aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2018-07-20 13:57:57 +0200
committerMarvin Borner2018-07-20 13:57:57 +0200
commit932d439444f10774bff546923cc0a2e5e2f2857b (patch)
treeef9bcc039d263f929b4f4991881a52a8343c1dfe
parentbd04ac097a0a29ba7c48a5f4a46d99ae7d86eea1 (diff)
Rewrite (only for backend/oauth/api use from now on)
-rw-r--r--.editorconfig16
-rw-r--r--.env.example39
-rw-r--r--[-rwxr-xr-x].gitattributes0
-rw-r--r--[-rwxr-xr-x].gitignore4
-rwxr-xr-xStartServer.sh15
-rw-r--r--[-rwxr-xr-x]app/Console/Kernel.php0
-rw-r--r--[-rwxr-xr-x]app/Exceptions/Handler.php17
-rwxr-xr-xapp/Http/Controllers/AdminController.php28
-rw-r--r--app/Http/Controllers/ApiController.php13
-rw-r--r--[-rwxr-xr-x]app/Http/Controllers/Auth/ForgotPasswordController.php0
-rw-r--r--[-rwxr-xr-x]app/Http/Controllers/Auth/LoginController.php10
-rw-r--r--[-rwxr-xr-x]app/Http/Controllers/Auth/RegisterController.php51
-rw-r--r--[-rwxr-xr-x]app/Http/Controllers/Auth/ResetPasswordController.php4
-rw-r--r--[-rwxr-xr-x]app/Http/Controllers/Controller.php0
-rwxr-xr-xapp/Http/Controllers/ImageController.php17
-rwxr-xr-xapp/Http/Controllers/PublicKeyController.php49
-rwxr-xr-xapp/Http/Controllers/SocketController.php44
-rwxr-xr-xapp/Http/Controllers/UserController.php32
-rw-r--r--[-rwxr-xr-x]app/Http/Kernel.php2
-rw-r--r--app/Http/Middleware/CheckForMaintenanceMode.php17
-rw-r--r--[-rwxr-xr-x]app/Http/Middleware/EncryptCookies.php0
-rw-r--r--[-rwxr-xr-x]app/Http/Middleware/RedirectIfAuthenticated.php2
-rw-r--r--[-rwxr-xr-x]app/Http/Middleware/TrimStrings.php0
-rw-r--r--[-rwxr-xr-x]app/Http/Middleware/TrustProxies.php0
-rw-r--r--[-rwxr-xr-x]app/Http/Middleware/VerifyCsrfToken.php0
-rwxr-xr-xapp/Jobs/SendVerificationEmail.php39
-rwxr-xr-xapp/Mail/EmailVerification.php36
-rwxr-xr-xapp/Message.php17
-rw-r--r--[-rwxr-xr-x]app/Providers/AppServiceProvider.php0
-rw-r--r--[-rwxr-xr-x]app/Providers/AuthServiceProvider.php0
-rw-r--r--[-rwxr-xr-x]app/Providers/BroadcastServiceProvider.php0
-rw-r--r--[-rwxr-xr-x]app/Providers/EventServiceProvider.php0
-rw-r--r--[-rwxr-xr-x]app/Providers/RouteServiceProvider.php16
-rwxr-xr-xapp/PublicKeys.php17
-rw-r--r--[-rwxr-xr-x]app/User.php8
-rw-r--r--[-rwxr-xr-x]artisan0
-rw-r--r--[-rwxr-xr-x]bootstrap/app.php0
-rw-r--r--[-rwxr-xr-x]composer.json6
-rw-r--r--[-rwxr-xr-x]composer.lock657
-rw-r--r--[-rwxr-xr-x]config/app.php6
-rw-r--r--[-rwxr-xr-x]config/auth.php0
-rw-r--r--[-rwxr-xr-x]config/broadcasting.php0
-rw-r--r--[-rwxr-xr-x]config/cache.php0
-rw-r--r--[-rwxr-xr-x]config/database.php0
-rw-r--r--[-rwxr-xr-x]config/filesystems.php2
-rw-r--r--[-rwxr-xr-x]config/hashing.php0
-rw-r--r--[-rwxr-xr-x]config/logging.php0
-rw-r--r--[-rwxr-xr-x]config/mail.php0
-rw-r--r--[-rwxr-xr-x]config/queue.php0
-rw-r--r--[-rwxr-xr-x]config/services.php0
-rw-r--r--[-rwxr-xr-x]config/session.php0
-rw-r--r--[-rwxr-xr-x]config/view.php0
-rw-r--r--[-rwxr-xr-x]database/.gitignore0
-rw-r--r--[-rwxr-xr-x]database/factories/UserFactory.php0
-rw-r--r--[-rwxr-xr-x]database/migrations/2014_10_12_000000_create_users_table.php13
-rw-r--r--[-rwxr-xr-x]database/migrations/2014_10_12_100000_create_password_resets_table.php6
-rwxr-xr-xdatabase/migrations/2018_06_30_203940_create_messages_table.php34
-rwxr-xr-xdatabase/migrations/2018_07_07_104937_create_public_keys_table.php35
-rw-r--r--[-rwxr-xr-x]database/seeds/DatabaseSeeder.php21
-rwxr-xr-xpackage-lock.json14563
-rw-r--r--[-rwxr-xr-x]package.json37
-rw-r--r--[-rwxr-xr-x]phpunit.xml0
-rw-r--r--[-rwxr-xr-x]public/.htaccess0
-rw-r--r--public/0bd0898fc9d907f4b31b968c6e2efa7f.js12
-rw-r--r--public/3fc17c73a369921b5d2a49b8e752592b.js30
-rw-r--r--public/baf35d07f64e6c38ebec2176b189d346.scss20
-rw-r--r--public/becf15e26adbe45cab6f048bbbbabf01.js89
-rw-r--r--public/css/admin.css165
-rwxr-xr-xpublic/css/app.css10513
-rwxr-xr-xpublic/css/app.css.map1
-rw-r--r--[-rwxr-xr-x]public/favicon.ico0
-rw-r--r--public/fonts/vendor/Ionicons/ionicons.eotbin120724 -> 0 bytes
-rw-r--r--public/fonts/vendor/Ionicons/ionicons.svg2230
-rw-r--r--public/fonts/vendor/Ionicons/ionicons.ttfbin188508 -> 0 bytes
-rw-r--r--public/fonts/vendor/Ionicons/ionicons.woffbin67904 -> 0 bytes
-rw-r--r--public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eotbin20127 -> 0 bytes
-rw-r--r--public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.svg288
-rw-r--r--public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.ttfbin45404 -> 0 bytes
-rw-r--r--public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woffbin23424 -> 0 bytes
-rw-r--r--public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff2bin18028 -> 0 bytes
-rw-r--r--public/fonts/vendor/font-awesome/fontawesome-webfont.eotbin165742 -> 0 bytes
-rw-r--r--public/fonts/vendor/font-awesome/fontawesome-webfont.svg2671
-rw-r--r--public/fonts/vendor/font-awesome/fontawesome-webfont.ttfbin165548 -> 0 bytes
-rw-r--r--public/fonts/vendor/font-awesome/fontawesome-webfont.woffbin98024 -> 0 bytes
-rw-r--r--public/fonts/vendor/font-awesome/fontawesome-webfont.woff2bin77160 -> 0 bytes
-rw-r--r--public/fonts/vendor/ionicons/dist/ionicons.eotbin112650 -> 0 bytes
-rw-r--r--public/fonts/vendor/ionicons/dist/ionicons.svg2090
-rw-r--r--public/fonts/vendor/ionicons/dist/ionicons.ttfbin112472 -> 0 bytes
-rw-r--r--public/fonts/vendor/ionicons/dist/ionicons.woffbin65912 -> 0 bytes
-rw-r--r--public/fonts/vendor/ionicons/dist/ionicons.woff2bin50632 -> 0 bytes
-rw-r--r--public/images/boxed-bg.jpgbin27178 -> 0 bytes
-rw-r--r--public/images/vendor/adminlte/dist/boxed-bg.jpgbin27178 -> 0 bytes
-rw-r--r--[-rwxr-xr-x]public/index.php0
-rwxr-xr-xpublic/js/admin.js146
-rwxr-xr-xpublic/js/app.js416
-rwxr-xr-xpublic/js/app.js.map1
-rwxr-xr-xpublic/js/initial_key_gen.js83
-rw-r--r--public/js/service-worker-ext.js1
-rw-r--r--public/manifest.json61
-rwxr-xr-xpublic/mix-manifest.json7
-rw-r--r--[-rwxr-xr-x]public/robots.txt0
-rw-r--r--public/service-worker.js1
-rw-r--r--resources/assets/js/admin.js269
-rwxr-xr-xresources/assets/js/app.js13
-rwxr-xr-xresources/assets/js/bootstrap.js52
-rwxr-xr-xresources/assets/js/chat.js55
-rwxr-xr-xresources/assets/js/chatServer.js26
-rwxr-xr-xresources/assets/js/components/ExampleComponent.vue23
-rwxr-xr-xresources/assets/js/initial_key_gen.js30
-rwxr-xr-xresources/assets/js/profile.js39
-rwxr-xr-xresources/assets/js/setup.js5
-rwxr-xr-xresources/assets/sass/_variables.scss8
-rw-r--r--resources/assets/sass/admin.scss10
-rwxr-xr-xresources/assets/sass/app.scss42
-rwxr-xr-xresources/assets/sass/chat.scss5
-rwxr-xr-xresources/lang/en/auth.php19
-rwxr-xr-xresources/lang/en/pagination.php19
-rwxr-xr-xresources/lang/en/passwords.php22
-rwxr-xr-xresources/lang/en/validation.php146
-rwxr-xr-xresources/views/admin/dashboard.blade.php388
-rwxr-xr-xresources/views/admin/layouts/app.blade.php46
-rw-r--r--resources/views/admin/layouts/left_sidebar.blade.php39
-rw-r--r--resources/views/admin/layouts/navbar.blade.php44
-rw-r--r--resources/views/admin/layouts/right_sidebar.blade.php185
-rwxr-xr-xresources/views/auth/login.blade.php71
-rwxr-xr-xresources/views/auth/passwords/email.blade.php47
-rwxr-xr-xresources/views/auth/passwords/reset.blade.php65
-rwxr-xr-xresources/views/auth/register.blade.php79
-rwxr-xr-xresources/views/confirmEmail.blade.php16
-rwxr-xr-xresources/views/email/verify.blade.php3
-rwxr-xr-xresources/views/errors/http.blade.php5
-rwxr-xr-xresources/views/layouts/app.blade.php58
-rwxr-xr-xresources/views/layouts/error.blade.php57
-rwxr-xr-xresources/views/profile.blade.php36
-rwxr-xr-xresources/views/verificationSuccess.blade.php17
-rwxr-xr-xresources/views/writeMessage.blade.php33
-rw-r--r--[-rwxr-xr-x]routes/api.php6
-rw-r--r--[-rwxr-xr-x]routes/channels.php10
-rw-r--r--[-rwxr-xr-x]routes/console.php0
-rwxr-xr-xroutes/keys.php18
-rw-r--r--[-rwxr-xr-x]routes/web.php20
-rw-r--r--[-rwxr-xr-x]server.php0
-rwxr-xr-xstorage/debugbar/.gitignore2
-rwxr-xr-xtests/CreatesApplication.php22
-rwxr-xr-xtests/Feature/ExampleTest.php21
-rwxr-xr-xtests/TestCase.php10
-rwxr-xr-xtests/Unit/ExampleTest.php19
-rw-r--r--tsconfig.json12
-rw-r--r--[-rwxr-xr-x]webpack.mix.js87
-rw-r--r--[-rwxr-xr-x]yarn.lock375
150 files changed, 421 insertions, 36851 deletions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..1492202
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+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]
+indent_style = space
+indent_size = 2
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..ec44a12
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,39 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=
+APP_DEBUG=true
+APP_URL=http://localhost
+
+LOG_CHANNEL=stack
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=homestead
+DB_USERNAME=homestead
+DB_PASSWORD=secret
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+QUEUE_DRIVER=sync
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_DRIVER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/.gitattributes b/.gitattributes
index 967315d..967315d 100755..100644
--- a/.gitattributes
+++ b/.gitattributes
diff --git a/.gitignore b/.gitignore
index 0fb4b81..67c0aea 100755..100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,11 @@
/public/storage
/storage/*.key
/vendor
+/.idea
/.vscode
/.vagrant
+Homestead.json
+Homestead.yaml
npm-debug.log
yarn-error.log
.env
-dump.rdb
diff --git a/StartServer.sh b/StartServer.sh
deleted file mode 100755
index c29ce23..0000000
--- a/StartServer.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash -e
-redis-server &
-PIDS[0]=$!
-node resources/assets/js/chatServer.js &
-PIDS[1]=$!
-php artisan queue:work &
-PIDS[2]=$!
-php artisan serve &
-PIDS[3]=$!
-npm run watch &#> /dev/null 2>&1
-PIDS[4]=$!
-
-trap "kill ${PIDS[*]}" SIGINT
-
-wait \ No newline at end of file
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index a8c5158..a8c5158 100755..100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index f1078a9..043cad6 100755..100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -4,8 +4,6 @@ namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
-use Illuminate\Support\Facades\View;
-use \Symfony\Component\HttpKernel\Exception\HttpException;
class Handler extends ExceptionHandler
{
@@ -48,21 +46,6 @@ class Handler extends ExceptionHandler
*/
public function render($request, Exception $exception)
{
- if ($exception instanceof HttpException) {
- $statusCode = $exception->getStatusCode();
- switch ($statusCode) {
- case '404':
- $codeMessage = 'Page could not be found.';
- }
- $errorMessage = $exception->getMessage() == '' ? (isset($codeMessage) ? $codeMessage : 'An unknown error occurred.') : $exception->getMessage();
-
-
- return response(View::make('errors.http', [
- 'ErrorMessage' => $errorMessage,
- 'ErrorCode' => $statusCode
- ]), $statusCode);
- }
-
return parent::render($request, $exception);
}
}
diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php
deleted file mode 100755
index b3c8443..0000000
--- a/app/Http/Controllers/AdminController.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Auth;
-use Illuminate\Foundation\Auth\User;
-
-class AdminController extends Controller
-{
- public function Dashboard()
- {
- $this->checkAdmin();
- return view('admin.dashboard', [
- 'user' => Auth::user(),
- 'cpu_load' => round(sys_getloadavg()[1]/(trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l")) + 1)*100, 0)
- ]);
- }
-
- private function checkAdmin()
- {
- $isAdmin = User::findOrFail(Auth::user()->id)->admin;
- if ($isAdmin !== 1) {
- abort(403, 'Sorry, you are not an administrator.');
- }
-
- return true;
- }
-}
diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php
deleted file mode 100644
index ecd8079..0000000
--- a/app/Http/Controllers/ApiController.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Illuminate\Http\Request;
-
-class ApiController extends Controller
-{
- public function getUserData(Request $request)
- {
- return $request->user();
- }
-}
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php
index 6a247fe..6a247fe 100755..100644
--- a/app/Http/Controllers/Auth/ForgotPasswordController.php
+++ b/app/Http/Controllers/Auth/ForgotPasswordController.php
diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php
index 87f66d5..b2ea669 100755..100644
--- a/app/Http/Controllers/Auth/LoginController.php
+++ b/app/Http/Controllers/Auth/LoginController.php
@@ -4,7 +4,6 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
-use Illuminate\Http\Request;
class LoginController extends Controller
{
@@ -17,21 +16,16 @@ class LoginController extends Controller
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
- */
+ */
use AuthenticatesUsers;
- protected function authenticated(Request $request, $user)
- {
- return redirect('/keys/cookie/public');
- }
-
/**
* Where to redirect users after login.
*
* @var string
*/
- protected $redirectTo = '/keys/cookie/public';
+ protected $redirectTo = '/home';
/**
* Create a new controller instance.
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
index 2994499..e749c07 100755..100644
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -2,14 +2,11 @@
namespace App\Http\Controllers\Auth;
-use App\Http\Controllers\Controller;
-use App\Jobs\SendVerificationEmail;
use App\User;
-use Illuminate\Auth\Events\Registered;
-use Illuminate\Foundation\Auth\RegistersUsers;
-use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
+use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
@@ -22,7 +19,7 @@ class RegisterController extends Controller
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
- */
+ */
use RegistersUsers;
@@ -31,7 +28,7 @@ class RegisterController extends Controller
*
* @var string
*/
- protected $redirectTo = '/keys/cookie/public';
+ protected $redirectTo = '/home';
/**
* Create a new controller instance.
@@ -66,48 +63,10 @@ class RegisterController extends Controller
*/
protected function create(array $data)
{
- $hashedPassword = Hash::make($data['password']);
- $previousHash = User::select('hash')->orderBy('id', 'desc')->first()->hash;
- $summedHash = Hash::make($previousHash . $data['name'] . $data['email'] . 'password' . $hashedPassword); // Hash::check to verify
-
return User::create([
'name' => $data['name'],
'email' => $data['email'],
- 'password' => $hashedPassword,
- 'prevHash' => $previousHash,
- 'hash' => $summedHash,
- 'email_token' => base64_encode($data['email']),
+ 'password' => Hash::make($data['password']),
]);
}
-
- /**
- * Handle a registration request for the application.
- *
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
- */
-
- public function register(Request $request)
- {
- $this->validator($request->all())->validate();
- event(new Registered($user = $this->create($request->all())));
- dispatch(new SendVerificationEmail($user));
- return view('confirmEmail');
- }
-
- /**
- * Handle a registration request for the application.
- *
- * @param $token
- * @return \Illuminate\Http\Response
- */
- public function verifyEmail($token)
- {
- $user = User::where('email_token', $token)->first();
- $user->verified = 1;
- if ($user->save()) {
- return view('verificationSuccess', ['user' => $user]);
- }
- }
-
}
diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php
index f5edc22..cf726ee 100755..100644
--- a/app/Http/Controllers/Auth/ResetPasswordController.php
+++ b/app/Http/Controllers/Auth/ResetPasswordController.php
@@ -16,7 +16,7 @@ class ResetPasswordController extends Controller
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
- */
+ */
use ResetsPasswords;
@@ -25,7 +25,7 @@ class ResetPasswordController extends Controller
*
* @var string
*/
- protected $redirectTo = '/';
+ protected $redirectTo = '/home';
/**
* Create a new controller instance.
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 03e02a2..03e02a2 100755..100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php
deleted file mode 100755
index 603008d..0000000
--- a/app/Http/Controllers/ImageController.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Illuminate\Http\Request;
-use Illuminate\Foundation\Auth\User;
-use Intervention\Image\ImageManagerStatic as Image;
-
-class ImageController extends Controller
-{
- public function getAvatar($user_id)
- {
- $usersAvatar = User::findOrFail($user_id)->avatar;
- $storagePath = storage_path('app/public/avatars/' . $usersAvatar);
- return Image::make($storagePath)->response();
- }
-}
diff --git a/app/Http/Controllers/PublicKeyController.php b/app/Http/Controllers/PublicKeyController.php
deleted file mode 100755
index af59cc2..0000000
--- a/app/Http/Controllers/PublicKeyController.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\PublicKeys;
-use Auth;
-use Cookie;
-use Illuminate\Foundation\Auth\User;
-use Illuminate\Http\Request;
-
-class PublicKeyController extends Controller
-{
- public function getUsersKey($user_id)
- {
- $public_key = PublicKeys::select('key')->where('user_id', $user_id)->first();
- // TODO: Friends: do not allow to request every public key
-
- return $public_key ? $public_key : abort(404, "This public key doesn't exist.");
- }
-
- public function setUsersKey(Request $request)
- {
- $request->validate([
- 'key' => 'required|max:4096',
- ]);
-
- $public_key = PublicKeys::firstOrNew(['user_id' => $user_id]);
- $public_key->user_id = $user_id;
- $public_key->key = $request->input('key');
- $public_key->save();
-
- return response()->json(['message' => 'Successfully inserted public key.'], 201);
- }
-
- public function setUsersKeyByCookie(Request $request)
- {
- if ($_COOKIE['publickey'] !== null) {
- $user = Auth::user();
- $public_key = PublicKeys::firstOrNew(['user_id' => $user->id]);
- $public_key->user_id = $user->id;
- $public_key->key = $_COOKIE['publickey'];
- $public_key->save();
-
- return redirect('/');
- } else {
- abort(400, "Public key is malformed.");
- }
- }
-}
diff --git a/app/Http/Controllers/SocketController.php b/app/Http/Controllers/SocketController.php
deleted file mode 100755
index dc95ad8..0000000
--- a/app/Http/Controllers/SocketController.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Http\Controllers\Controller;
-use App\Message;
-use Auth;
-use Illuminate\Http\Request;
-use LRedis;
-
-class SocketController extends Controller
-{
- //Write Message
- public function writeMessage()
- {
- $messages = Message::leftJoin('users', function ($join) {
- $join->on('messages.user_id', '=', 'users.id');
- })
- ->select('users.name', 'messages.message')->orderBy('messages.created_at')
- ->get();
-
- return view('writeMessage', compact('messages'));
- }
-
- //Send Message
- public function sendMessage(Request $request)
- {
- $user = Auth::user();
-
- $input = $request->all();
- $redis = LRedis::connection();
-
- if (!isset($input['message']) || trim($input['message']) === '') {
- } else {
- Message::create([
- 'user_id' => $user->id,
- 'message' => $input['message'],
- ]);
-
- $data = ['message' => $input['message'], 'user' => $user->name];
- $redis->publish('message', json_encode($data));
- }
- }
-}
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
deleted file mode 100755
index 8d98a9a..0000000
--- a/app/Http/Controllers/UserController.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Auth;
-use Illuminate\Foundation\Auth\User;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Storage;
-use Intervention\Image\ImageManagerStatic as Image;
-
-class UserController extends Controller
-{
- public function Profile()
- {
- $user = Auth::user();
- return view('profile', compact('user', $user));
- }
-
- public function updateAvatar(Request $request)
- {
- $request->validate([
- 'avatar' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
- ]);
- $user = Auth::user();
- $avatarName = $user->id . '.' . $request->avatar->getClientOriginalExtension();
- $fittedAvatar = Image::make($request->avatar)->fit(256)->encode();
- Storage::put('avatars/' . $avatarName, (string) $fittedAvatar);
- $user->avatar = $avatarName;
- $user->save();
- return response()->json(array('success' => 'You have successfully uploaded the avatar.'));
- }
-}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 3439540..fb9616a 100755..100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -14,7 +14,7 @@ class Kernel extends HttpKernel
* @var array
*/
protected $middleware = [
- \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
+ \App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php
new file mode 100644
index 0000000..35b9824
--- /dev/null
+++ b/app/Http/Middleware/CheckForMaintenanceMode.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
+
+class CheckForMaintenanceMode extends Middleware
+{
+ /**
+ * The URIs that should be reachable while maintenance mode is enabled.
+ *
+ * @var array
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php
index 033136a..033136a 100755..100644
--- a/app/Http/Middleware/EncryptCookies.php
+++ b/app/Http/Middleware/EncryptCookies.php
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php
index e27860e..e4cec9c 100755..100644
--- a/app/Http/Middleware/RedirectIfAuthenticated.php
+++ b/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -18,7 +18,7 @@ class RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
- return redirect('/');
+ return redirect('/home');
}
return $next($request);
diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php
index 5a50e7b..5a50e7b 100755..100644
--- a/app/Http/Middleware/TrimStrings.php
+++ b/app/Http/Middleware/TrimStrings.php
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
index 7daf51f..7daf51f 100755..100644
--- a/app/Http/Middleware/TrustProxies.php
+++ b/app/Http/Middleware/TrustProxies.php
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
index 0c13b85..0c13b85 100755..100644
--- a/app/Http/Middleware/VerifyCsrfToken.php
+++ b/app/Http/Middleware/VerifyCsrfToken.php
diff --git a/app/Jobs/SendVerificationEmail.php b/app/Jobs/SendVerificationEmail.php
deleted file mode 100755
index 0a71f05..0000000
--- a/app/Jobs/SendVerificationEmail.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace App\Jobs;
-
-use App\Mail\EmailVerification;
-use Illuminate\Bus\Queueable;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Foundation\Bus\Dispatchable;
-use Illuminate\Queue\InteractsWithQueue;
-use Illuminate\Queue\SerializesModels;
-use Mail;
-
-class SendVerificationEmail implements ShouldQueue
-{
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
-
- protected $user;
-
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct($user)
- {
- $this->user = $user;
- }
-
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- $email = new EmailVerification($this->user);
- Mail::to($this->user->email)->send($email);
- }
-}
diff --git a/app/Mail/EmailVerification.php b/app/Mail/EmailVerification.php
deleted file mode 100755
index 4f393ac..0000000
--- a/app/Mail/EmailVerification.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace App\Mail;
-
-use Illuminate\Bus\Queueable;
-use Illuminate\Mail\Mailable;
-use Illuminate\Queue\SerializesModels;
-
-class EmailVerification extends Mailable
-{
- use Queueable, SerializesModels;
-
- protected $user;
-
- /**
- * Create a new message instance.
- *
- * @return void
- */
- public function __construct($user)
- {
- $this->user = $user;
- }
-
- /**
- * Build the message.
- *
- * @return $this
- */
- public function build()
- {
- return $this->view('email.verify')->with([
- 'email_token' => $this->user->email_token,
- ]);
- }
-}
diff --git a/app/Message.php b/app/Message.php
deleted file mode 100755
index 79a1afd..0000000
--- a/app/Message.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace App;
-
-use Illuminate\Database\Eloquent\Model;
-
-class Message extends Model
-{
- /**
- * The attributes that are mass assignable.
- *
- * @var array
- */
- protected $fillable = [
- 'user_id', 'message',
- ];
-}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 706c003..706c003 100755..100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index 9784b1a..9784b1a 100755..100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
index 352cce4..352cce4 100755..100644
--- a/app/Providers/BroadcastServiceProvider.php
+++ b/app/Providers/BroadcastServiceProvider.php
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index fca6152..fca6152 100755..100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index e91ab48..5ea48d3 100755..100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -2,8 +2,8 @@
namespace App\Providers;
-use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
+use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
@@ -52,12 +52,8 @@ class RouteServiceProvider extends ServiceProvider
protected function mapWebRoutes()
{
Route::middleware('web')
- ->namespace($this->namespace)
- ->group(base_path('routes/web.php'));
-
- Route::middleware('web')
- ->namespace($this->namespace)
- ->group(base_path('routes/keys.php'));
+ ->namespace($this->namespace)
+ ->group(base_path('routes/web.php'));
}
/**
@@ -70,8 +66,8 @@ class RouteServiceProvider extends ServiceProvider
protected function mapApiRoutes()
{
Route::prefix('api')
- ->middleware('api')
- ->namespace($this->namespace)
- ->group(base_path('routes/api.php'));
+ ->middleware('api')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/api.php'));
}
}
diff --git a/app/PublicKeys.php b/app/PublicKeys.php
deleted file mode 100755
index 92f1b24..0000000
--- a/app/PublicKeys.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace App;
-
-use Illuminate\Database\Eloquent\Model;
-
-class PublicKeys extends Model
-{
- /**
- * The attributes that are mass assignable.
- *
- * @var array
- */
- protected $fillable = [
- 'user_id', 'key'
- ];
-}
diff --git a/app/User.php b/app/User.php
index 9dcf98e..bfd96a6 100755..100644
--- a/app/User.php
+++ b/app/User.php
@@ -1,19 +1,21 @@
<?php
+
namespace App;
-use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
+use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
+
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
- 'name', 'email', 'password', 'prevHash', 'hash', 'email_token'
+ 'name', 'email', 'password',
];
/**
@@ -22,6 +24,6 @@ class User extends Authenticatable
* @var array
*/
protected $hidden = [
- 'password', 'remember_token', 'prevHash',
+ 'password', 'remember_token',
];
}
diff --git a/artisan b/artisan
index 5c23e2e..5c23e2e 100755..100644
--- a/artisan
+++ b/artisan
diff --git a/bootstrap/app.php b/bootstrap/app.php
index f2801ad..f2801ad 100755..100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
diff --git a/composer.json b/composer.json
index 03e4eb0..65bf8b4 100755..100644
--- a/composer.json
+++ b/composer.json
@@ -6,15 +6,11 @@
"type": "project",
"require": {
"php": "^7.1.3",
- "almasaeed2010/adminlte": "~2.4",
"fideloper/proxy": "^4.0",
- "intervention/image": "^2.4",
"laravel/framework": "5.6.*",
- "laravel/tinker": "^1.0",
- "predis/predis": "^1.1"
+ "laravel/tinker": "^1.0"
},
"require-dev": {
- "barryvdh/laravel-debugbar": "^3.1",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
diff --git a/composer.lock b/composer.lock
index 45ac219..822178b 100755..100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,172 +4,9 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "4001a506fce7b638a071d7c86e3e97fb",
+ "content-hash": "d5bca48e56bbf3a25645858fcab9c285",
"packages": [
{
- "name": "almasaeed2010/adminlte",
- "version": "v2.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/almasaeed2010/AdminLTE.git",
- "reference": "b3acb63ac56b13eb45b36e628b384a9a2507b50e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/almasaeed2010/AdminLTE/zipball/b3acb63ac56b13eb45b36e628b384a9a2507b50e",
- "reference": "b3acb63ac56b13eb45b36e628b384a9a2507b50e",
- "shasum": ""
- },
- "require": {
- "composer/installers": "1.*"
- },
- "type": "template",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Abdullah Almsaeed",
- "email": "abdullah@almsaeedstudio.com"
- }
- ],
- "description": "AdminLTE - admin control panel and dashboard that's based on Bootstrap 3",
- "homepage": "https://adminlte.io/",
- "keywords": [
- "JS",
- "admin",
- "back-end",
- "css",
- "less",
- "responsive",
- "template",
- "theme",
- "web"
- ],
- "time": "2018-02-04T12:54:57+00:00"
- },
- {
- "name": "composer/installers",
- "version": "v1.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/installers.git",
- "reference": "049797d727261bf27f2690430d935067710049c2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/installers/zipball/049797d727261bf27f2690430d935067710049c2",
- "reference": "049797d727261bf27f2690430d935067710049c2",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.0"
- },
- "replace": {
- "roundcube/plugin-installer": "*",
- "shama/baton": "*"
- },
- "require-dev": {
- "composer/composer": "1.0.*@dev",
- "phpunit/phpunit": "^4.8.36"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "Composer\\Installers\\Plugin",
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Installers\\": "src/Composer/Installers"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kyle Robinson Young",
- "email": "kyle@dontkry.com",
- "homepage": "https://github.com/shama"
- }
- ],
- "description": "A multi-framework Composer library installer",
- "homepage": "https://composer.github.io/installers/",
- "keywords": [
- "Craft",
- "Dolibarr",
- "Eliasis",
- "Hurad",
- "ImageCMS",
- "Kanboard",
- "Lan Management System",
- "MODX Evo",
- "Mautic",
- "Maya",
- "OXID",
- "Plentymarkets",
- "Porto",
- "RadPHP",
- "SMF",
- "Thelia",
- "WolfCMS",
- "agl",
- "aimeos",
- "annotatecms",
- "attogram",
- "bitrix",
- "cakephp",
- "chef",
- "cockpit",
- "codeigniter",
- "concrete5",
- "croogo",
- "dokuwiki",
- "drupal",
- "eZ Platform",
- "elgg",
- "expressionengine",
- "fuelphp",
- "grav",
- "installer",
- "itop",
- "joomla",
- "kohana",
- "laravel",
- "lavalite",
- "lithium",
- "magento",
- "majima",
- "mako",
- "mediawiki",
- "modulework",
- "modx",
- "moodle",
- "osclass",
- "phpbb",
- "piwik",
- "ppi",
- "puppet",
- "pxcms",
- "reindex",
- "roundcube",
- "shopware",
- "silverstripe",
- "sydes",
- "symfony",
- "typo3",
- "wordpress",
- "yawik",
- "zend",
- "zikula"
- ],
- "time": "2017-12-29T09:13:20+00:00"
- },
- {
"name": "dnoegel/php-xdg-base-dir",
"version": "0.1",
"source": {
@@ -530,141 +367,6 @@
"time": "2018-02-07T20:20:57+00:00"
},
{
- "name": "guzzlehttp/psr7",
- "version": "1.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "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": "Tobias Schultze",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ],
- "time": "2017-03-20T17:10:46+00:00"
- },
- {
- "name": "intervention/image",
- "version": "2.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/Intervention/image.git",
- "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Intervention/image/zipball/e82d274f786e3d4b866a59b173f42e716f0783eb",
- "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb",
- "shasum": ""
- },
- "require": {
- "ext-fileinfo": "*",
- "guzzlehttp/psr7": "~1.1",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "mockery/mockery": "~0.9.2",
- "phpunit/phpunit": "^4.8 || ^5.7"
- },
- "suggest": {
- "ext-gd": "to use GD library based image processing.",
- "ext-imagick": "to use Imagick based image processing.",
- "intervention/imagecache": "Caching extension for the Intervention Image library"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.4-dev"
- },
- "laravel": {
- "providers": [
- "Intervention\\Image\\ImageServiceProvider"
- ],
- "aliases": {
- "Image": "Intervention\\Image\\Facades\\Image"
- }
- }
- },
- "autoload": {
- "psr-4": {
- "Intervention\\Image\\": "src/Intervention/Image"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Oliver Vogel",
- "email": "oliver@olivervogel.com",
- "homepage": "http://olivervogel.com/"
- }
- ],
- "description": "Image handling and manipulation library with support for Laravel integration",
- "homepage": "http://image.intervention.io/",
- "keywords": [
- "gd",
- "image",
- "imagick",
- "laravel",
- "thumbnail",
- "watermark"
- ],
- "time": "2018-05-29T14:19:03+00:00"
- },
- {
"name": "jakub-onderka/php-console-color",
"version": "0.1",
"source": {
@@ -753,16 +455,16 @@
},
{
"name": "laravel/framework",
- "version": "v5.6.26",
+ "version": "v5.6.28",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "7047df295e77cecb6a2f84736a732af66cc6789c"
+ "reference": "40ba2ee0e61cb4bc3c9f1dab04908e6acf06b86f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/7047df295e77cecb6a2f84736a732af66cc6789c",
- "reference": "7047df295e77cecb6a2f84736a732af66cc6789c",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/40ba2ee0e61cb4bc3c9f1dab04908e6acf06b86f",
+ "reference": "40ba2ee0e61cb4bc3c9f1dab04908e6acf06b86f",
"shasum": ""
},
"require": {
@@ -888,7 +590,7 @@
"framework",
"laravel"
],
- "time": "2018-06-20T14:21:11+00:00"
+ "time": "2018-07-17T14:15:36+00:00"
},
{
"name": "laravel/tinker",
@@ -1170,16 +872,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.0.2",
+ "version": "v4.0.3",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "35b8caf75e791ba1b2d24fec1552168d72692b12"
+ "reference": "bd088dc940a418f09cda079a9b5c7c478890fb8d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/35b8caf75e791ba1b2d24fec1552168d72692b12",
- "reference": "35b8caf75e791ba1b2d24fec1552168d72692b12",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd088dc940a418f09cda079a9b5c7c478890fb8d",
+ "reference": "bd088dc940a418f09cda079a9b5c7c478890fb8d",
"shasum": ""
},
"require": {
@@ -1217,37 +919,33 @@
"parser",
"php"
],
- "time": "2018-06-03T11:33:10+00:00"
+ "time": "2018-07-15T17:25:16+00:00"
},
{
"name": "paragonie/random_compat",
- "version": "v2.0.17",
+ "version": "v9.99.99",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
- "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d"
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d",
- "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
"shasum": ""
},
"require": {
- "php": ">=5.2.0"
+ "php": "^7"
},
"require-dev": {
- "phpunit/phpunit": "4.*|5.*"
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
},
"suggest": {
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
"type": "library",
- "autoload": {
- "files": [
- "lib/random.php"
- ]
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
@@ -1266,57 +964,7 @@
"pseudorandom",
"random"
],
- "time": "2018-07-04T16:31:37+00:00"
- },
- {
- "name": "predis/predis",
- "version": "v1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/nrk/predis.git",
- "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1",
- "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.9"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8"
- },
- "suggest": {
- "ext-curl": "Allows access to Webdis when paired with phpiredis",
- "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Predis\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniele Alessandri",
- "email": "suppakilla@gmail.com",
- "homepage": "http://clorophilla.net"
- }
- ],
- "description": "Flexible and feature-complete Redis client for PHP and HHVM",
- "homepage": "http://github.com/nrk/predis",
- "keywords": [
- "nosql",
- "predis",
- "redis"
- ],
- "time": "2016-06-16T16:22:20+00:00"
+ "time": "2018-07-02T15:55:56+00:00"
},
{
"name": "psr/container",
@@ -1368,56 +1016,6 @@
"time": "2017-02-14T16:28:37+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"
- ],
- "time": "2016-08-06T14:39:51+00:00"
- },
- {
"name": "psr/log",
"version": "1.0.2",
"source": {
@@ -1586,21 +1184,22 @@
},
{
"name": "ramsey/uuid",
- "version": "3.7.3",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76"
+ "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/44abcdad877d9a46685a3a4d221e3b2c4b87cb76",
- "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
+ "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"shasum": ""
},
"require": {
- "paragonie/random_compat": "^1.0|^2.0",
- "php": "^5.4 || ^7.0"
+ "paragonie/random_compat": "^1.0|^2.0|9.99.99",
+ "php": "^5.4 || ^7.0",
+ "symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
@@ -1608,16 +1207,17 @@
"require-dev": {
"codeception/aspect-mock": "^1.0 | ~2.0.0",
"doctrine/annotations": "~1.2.0",
- "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1",
+ "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0",
"ircmaxell/random-lib": "^1.1",
"jakub-onderka/php-parallel-lint": "^0.9.0",
"mockery/mockery": "^0.9.9",
"moontoast/math": "^1.1",
"php-mock/php-mock-phpunit": "^0.3|^1.1",
- "phpunit/phpunit": "^4.7|^5.0",
+ "phpunit/phpunit": "^4.7|^5.0|^6.5",
"squizlabs/php_codesniffer": "^2.3"
},
"suggest": {
+ "ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
"ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
@@ -1662,20 +1262,20 @@
"identifier",
"uuid"
],
- "time": "2018-01-20T00:28:24+00:00"
+ "time": "2018-07-19T23:38:55+00:00"
},
{
"name": "swiftmailer/swiftmailer",
- "version": "v6.1.1",
+ "version": "v6.1.2",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "aa899fef280b1c1aec8d5d4ac069af7f80c89a23"
+ "reference": "7d760881d266d63c5e7a1155cbcf2ac656a31ca8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/aa899fef280b1c1aec8d5d4ac069af7f80c89a23",
- "reference": "aa899fef280b1c1aec8d5d4ac069af7f80c89a23",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7d760881d266d63c5e7a1155cbcf2ac656a31ca8",
+ "reference": "7d760881d266d63c5e7a1155cbcf2ac656a31ca8",
"shasum": ""
},
"require": {
@@ -1721,7 +1321,7 @@
"mail",
"mailer"
],
- "time": "2018-07-04T11:12:44+00:00"
+ "time": "2018-07-13T07:04:35+00:00"
},
{
"name": "symfony/console",
@@ -2692,74 +2292,6 @@
],
"packages-dev": [
{
- "name": "barryvdh/laravel-debugbar",
- "version": "v3.1.5",
- "source": {
- "type": "git",
- "url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "d3cdca2ad6cc6e67735b4a63e7551c690a497f5f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/d3cdca2ad6cc6e67735b4a63e7551c690a497f5f",
- "reference": "d3cdca2ad6cc6e67735b4a63e7551c690a497f5f",
- "shasum": ""
- },
- "require": {
- "illuminate/routing": "5.5.x|5.6.x",
- "illuminate/session": "5.5.x|5.6.x",
- "illuminate/support": "5.5.x|5.6.x",
- "maximebf/debugbar": "~1.15.0",
- "php": ">=7.0",
- "symfony/debug": "^3|^4",
- "symfony/finder": "^3|^4"
- },
- "require-dev": {
- "illuminate/framework": "5.5.x"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.2-dev"
- },
- "laravel": {
- "providers": [
- "Barryvdh\\Debugbar\\ServiceProvider"
- ],
- "aliases": {
- "Debugbar": "Barryvdh\\Debugbar\\Facade"
- }
- }
- },
- "autoload": {
- "psr-4": {
- "Barryvdh\\Debugbar\\": "src/"
- },
- "files": [
- "src/helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Barry vd. Heuvel",
- "email": "barryvdh@gmail.com"
- }
- ],
- "description": "PHP Debugbar integration for Laravel",
- "keywords": [
- "debug",
- "debugbar",
- "laravel",
- "profiler",
- "webprofiler"
- ],
- "time": "2018-05-03T18:27:04+00:00"
- },
- {
"name": "doctrine/instantiator",
"version": "1.1.0",
"source": {
@@ -2876,16 +2408,16 @@
},
{
"name": "fzaninotto/faker",
- "version": "v1.7.1",
+ "version": "v1.8.0",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
- "reference": "d3ed4cc37051c1ca52d22d76b437d14809fc7e0d"
+ "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d3ed4cc37051c1ca52d22d76b437d14809fc7e0d",
- "reference": "d3ed4cc37051c1ca52d22d76b437d14809fc7e0d",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de",
+ "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de",
"shasum": ""
},
"require": {
@@ -2893,7 +2425,7 @@
},
"require-dev": {
"ext-intl": "*",
- "phpunit/phpunit": "^4.0 || ^5.0",
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
"squizlabs/php_codesniffer": "^1.5"
},
"type": "library",
@@ -2922,7 +2454,7 @@
"faker",
"fixtures"
],
- "time": "2017-08-15T16:48:10+00:00"
+ "time": "2018-07-12T10:23:15+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -2973,67 +2505,6 @@
"time": "2016-01-20T08:20:44+00:00"
},
{
- "name": "maximebf/debugbar",
- "version": "v1.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/maximebf/php-debugbar.git",
- "reference": "30e7d60937ee5f1320975ca9bc7bcdd44d500f07"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/30e7d60937ee5f1320975ca9bc7bcdd44d500f07",
- "reference": "30e7d60937ee5f1320975ca9bc7bcdd44d500f07",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0",
- "psr/log": "^1.0",
- "symfony/var-dumper": "^2.6|^3.0|^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0|^5.0"
- },
- "suggest": {
- "kriswallsmith/assetic": "The best way to manage assets",
- "monolog/monolog": "Log using Monolog",
- "predis/predis": "Redis storage"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.14-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "DebugBar\\": "src/DebugBar/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Maxime Bouroumeau-Fuseau",
- "email": "maxime.bouroumeau@gmail.com",
- "homepage": "http://maximebf.com"
- },
- {
- "name": "Barry vd. Heuvel",
- "email": "barryvdh@gmail.com"
- }
- ],
- "description": "Debug bar in the browser for php application",
- "homepage": "https://github.com/maximebf/php-debugbar",
- "keywords": [
- "debug",
- "debugbar"
- ],
- "time": "2017-12-15T11:13:46+00:00"
- },
- {
"name": "mockery/mockery",
"version": "1.1.0",
"source": {
@@ -3212,22 +2683,22 @@
},
{
"name": "phar-io/manifest",
- "version": "1.0.1",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0"
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0",
- "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-phar": "*",
- "phar-io/version": "^1.0.1",
+ "phar-io/version": "^2.0",
"php": "^5.6 || ^7.0"
},
"type": "library",
@@ -3263,20 +2734,20 @@
}
],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "time": "2017-03-05T18:14:27+00:00"
+ "time": "2018-07-08T19:23:20+00:00"
},
{
"name": "phar-io/version",
- "version": "1.0.1",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/phar-io/version.git",
- "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df",
- "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
"shasum": ""
},
"require": {
@@ -3310,7 +2781,7 @@
}
],
"description": "Library for handling version information and constraints",
- "time": "2017-03-05T17:38:23+00:00"
+ "time": "2018-07-08T19:19:57+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -3778,16 +3249,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "7.2.6",
+ "version": "7.2.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "400a3836ee549ae6f665323ac3f21e27eac7155f"
+ "reference": "8e878aff7917ef66e702e03d1359b16eee254e2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/400a3836ee549ae6f665323ac3f21e27eac7155f",
- "reference": "400a3836ee549ae6f665323ac3f21e27eac7155f",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e878aff7917ef66e702e03d1359b16eee254e2c",
+ "reference": "8e878aff7917ef66e702e03d1359b16eee254e2c",
"shasum": ""
},
"require": {
@@ -3798,8 +3269,8 @@
"ext-mbstring": "*",
"ext-xml": "*",
"myclabs/deep-copy": "^1.7",
- "phar-io/manifest": "^1.0.1",
- "phar-io/version": "^1.0",
+ "phar-io/manifest": "^1.0.2",
+ "phar-io/version": "^2.0",
"php": "^7.1",
"phpspec/prophecy": "^1.7",
"phpunit/php-code-coverage": "^6.0.7",
@@ -3858,7 +3329,7 @@
"testing",
"xunit"
],
- "time": "2018-06-21T13:13:39+00:00"
+ "time": "2018-07-15T05:20:50+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -3907,16 +3378,16 @@
},
{
"name": "sebastian/comparator",
- "version": "3.0.1",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "591a30922f54656695e59b1f39501aec513403da"
+ "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/591a30922f54656695e59b1f39501aec513403da",
- "reference": "591a30922f54656695e59b1f39501aec513403da",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
+ "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
"shasum": ""
},
"require": {
@@ -3967,7 +3438,7 @@
"compare",
"equality"
],
- "time": "2018-06-14T15:05:28+00:00"
+ "time": "2018-07-12T15:12:46+00:00"
},
{
"name": "sebastian/diff",
diff --git a/config/app.php b/config/app.php
index 66fde67..b16e7f7 100755..100644
--- a/config/app.php
+++ b/config/app.php
@@ -13,7 +13,7 @@ return [
|
*/
- 'name' => env('APP_NAME', 'BEAM-Messenger'),
+ 'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
@@ -156,7 +156,7 @@ return [
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
- App\Providers\BroadcastServiceProvider::class,
+ // App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
@@ -198,7 +198,7 @@ return [
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
- 'LRedis' => Illuminate\Support\Facades\Redis::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,
diff --git a/config/auth.php b/config/auth.php
index 7817501..7817501 100755..100644
--- a/config/auth.php
+++ b/config/auth.php
diff --git a/config/broadcasting.php b/config/broadcasting.php
index 3ca45ea..3ca45ea 100755..100644
--- a/config/broadcasting.php
+++ b/config/broadcasting.php
diff --git a/config/cache.php b/config/cache.php
index fa12e5e..fa12e5e 100755..100644
--- a/config/cache.php
+++ b/config/cache.php
diff --git a/config/database.php b/config/database.php
index cab5d06..cab5d06 100755..100644
--- a/config/database.php
+++ b/config/database.php
diff --git a/config/filesystems.php b/config/filesystems.php
index af32c3c..77fa5de 100755..100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -13,7 +13,7 @@ return [
|
*/
- 'default' => env('FILESYSTEM_DRIVER', 'public'),
+ 'default' => env('FILESYSTEM_DRIVER', 'local'),
/*
|--------------------------------------------------------------------------
diff --git a/config/hashing.php b/config/hashing.php
index d3c8e2f..d3c8e2f 100755..100644
--- a/config/hashing.php
+++ b/config/hashing.php
diff --git a/config/logging.php b/config/logging.php
index 400bc7f..400bc7f 100755..100644
--- a/config/logging.php
+++ b/config/logging.php
diff --git a/config/mail.php b/config/mail.php
index bb92224..bb92224 100755..100644
--- a/config/mail.php
+++ b/config/mail.php
diff --git a/config/queue.php b/config/queue.php
index 391304f..391304f 100755..100644
--- a/config/queue.php
+++ b/config/queue.php
diff --git a/config/services.php b/config/services.php
index aa1f7f8..aa1f7f8 100755..100644
--- a/config/services.php
+++ b/config/services.php
diff --git a/config/session.php b/config/session.php
index 736fb3c..736fb3c 100755..100644
--- a/config/session.php
+++ b/config/session.php
diff --git a/config/view.php b/config/view.php
index 2acfd9c..2acfd9c 100755..100644
--- a/config/view.php
+++ b/config/view.php
diff --git a/database/.gitignore b/database/.gitignore
index 9b1dffd..9b1dffd 100755..100644
--- a/database/.gitignore
+++ b/database/.gitignore
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index facf233..facf233 100755..100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php
index 0dd0011..689cbee 100755..100644
--- a/database/migrations/2014_10_12_000000_create_users_table.php
+++ b/database/migrations/2014_10_12_000000_create_users_table.php
@@ -1,7 +1,8 @@
<?php
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
+
use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
@@ -17,17 +18,11 @@ class CreateUsersTable extends Migration
$table->string('name');
$table->string('email')->unique();
$table->string('password');
- $table->string('avatar')->default('0.png');
- $table->string('prevHash', 60)->unique();
- $table->string('hash', 60)->unique();
- $table->string('api_token')->default("");
- $table->tinyInteger('verified')->default(0);
- $table->tinyInteger('admin')->default(0);
- $table->string('email_token')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
+
/**
* Reverse the migrations.
*
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
index 0dd2748..0d5cb84 100755..100644
--- a/database/migrations/2014_10_12_100000_create_password_resets_table.php
+++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php
@@ -1,7 +1,8 @@
<?php
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
+
use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
@@ -18,6 +19,7 @@ class CreatePasswordResetsTable extends Migration
$table->timestamp('created_at')->nullable();
});
}
+
/**
* Reverse the migrations.
*
diff --git a/database/migrations/2018_06_30_203940_create_messages_table.php b/database/migrations/2018_06_30_203940_create_messages_table.php
deleted file mode 100755
index f24bf21..0000000
--- a/database/migrations/2018_06_30_203940_create_messages_table.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Database\Migrations\Migration;
-
-class CreateMessagesTable extends Migration
-{
- /**
- * Run the migrations.
- *
- * @return void
- */
- public function up()
- {
- Schema::create('messages', function (Blueprint $table) {
- $table->increments('id');
- $table->integer('user_id')->unsigned();
- $table->text('message');
- $table->timestamps();
-
- $table->foreign('user_id')->references('id')->on('users');
- });
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::drop('messages');
- }
-} \ No newline at end of file
diff --git a/database/migrations/2018_07_07_104937_create_public_keys_table.php b/database/migrations/2018_07_07_104937_create_public_keys_table.php
deleted file mode 100755
index c9d548e..0000000
--- a/database/migrations/2018_07_07_104937_create_public_keys_table.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-use Illuminate\Support\Facades\Schema;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Database\Migrations\Migration;
-
-class CreatePublicKeysTable extends Migration
-{
- /**
- * Run the migrations.
- *
- * @return void
- */
- public function up()
- {
- Schema::create('public_keys', function (Blueprint $table) {
- $table->increments('id');
- $table->integer('user_id')->unsigned()->unique();
- $table->string('key', 4096);
- $table->timestamps();
-
- $table->foreign('user_id')->references('id')->on('users');
- });
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::dropIfExists('public_key');
- }
-}
diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php
index a443b45..91cb6d1 100755..100644
--- a/database/seeds/DatabaseSeeder.php
+++ b/database/seeds/DatabaseSeeder.php
@@ -1,8 +1,6 @@
<?php
use Illuminate\Database\Seeder;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder
{
@@ -13,23 +11,6 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
- DB::table('users')->insert([
- 'id' => 0,
- 'name' => 'genesis',
- 'email' => ' ',
- 'password' => ' ',
- 'prevHash' => '0',
- 'hash' => Hash::make('genesis')
- ]);
-
- DB::table('users')->insert([
- 'name' => 'Marvin Borner',
- 'email' => 'marvin@borners.de',
- 'password' => Hash::make('password'),
- 'prevHash' => Hash::make('genesis'),
- 'hash' => Hash::make(Hash::make('genesis') . 'Marvin Borner' . 'marvin@borners.de' . Hash::make('password')), // hashing: prev hash, all fields in current 'block'
- 'api_token' => "password",
- 'admin' => 1
- ]);
+ // $this->call(UsersTableSeeder::class);
}
}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100755
index 112c175..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,14563 +0,0 @@
-{
- "requires": true,
- "lockfileVersion": 1,
- "dependencies": {
- "@fortawesome/fontawesome-free": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.1.0.tgz",
- "integrity": "sha512-0XHj3cIq7OiG2v79UldqDHLFndLXxq0hbNTvsi7zDbLXiBtMkX+exuVUX466cajlSV8rkLiwa7GhTcMIKR1ajQ=="
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
- },
- "accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
- "requires": {
- "mime-types": "~2.1.18",
- "negotiator": "0.6.1"
- }
- },
- "acorn": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
- "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ=="
- },
- "acorn-dynamic-import": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
- "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
- "requires": {
- "acorn": "^4.0.3"
- },
- "dependencies": {
- "acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
- }
- }
- },
- "address-rfc2822": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/address-rfc2822/-/address-rfc2822-2.0.4.tgz",
- "integrity": "sha1-Lb07jWwt4elXwahUncAS1Au8NDE=",
- "requires": {
- "email-addresses": "^3.0.0"
- }
- },
- "adjust-sourcemap-loader": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz",
- "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==",
- "dev": true,
- "requires": {
- "assert": "^1.3.0",
- "camelcase": "^1.2.1",
- "loader-utils": "^1.1.0",
- "lodash.assign": "^4.0.1",
- "lodash.defaults": "^3.1.2",
- "object-path": "^0.9.2",
- "regex-parser": "^2.2.9"
- },
- "dependencies": {
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
- "dev": true
- },
- "lodash.defaults": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz",
- "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=",
- "dev": true,
- "requires": {
- "lodash.assign": "^3.0.0",
- "lodash.restparam": "^3.0.0"
- },
- "dependencies": {
- "lodash.assign": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
- "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
- "dev": true,
- "requires": {
- "lodash._baseassign": "^3.0.0",
- "lodash._createassigner": "^3.0.0",
- "lodash.keys": "^3.0.0"
- }
- }
- }
- }
- }
- },
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
- },
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
- "dev": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "ajv-keywords": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
- "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="
- },
- "align-text": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
- "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
- "requires": {
- "kind-of": "^3.0.2",
- "longest": "^1.0.1",
- "repeat-string": "^1.5.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "alphanum-sort": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
- "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
- "dev": true
- },
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
- },
- "ansi-align": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
- "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
- "requires": {
- "string-width": "^2.0.0"
- }
- },
- "ansi-escapes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
- "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
- },
- "ansi-gray": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
- "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "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": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "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==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "ansi-wrap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
- "dev": true
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
- },
- "archive-type": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz",
- "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=",
- "dev": true,
- "requires": {
- "file-type": "^3.1.0"
- },
- "dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
- "dev": true
- }
- }
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "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"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
- },
- "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=="
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
- },
- "array-differ": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
- "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
- },
- "array-flatten": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
- "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
- "dev": true
- },
- "array-includes": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
- "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.7.0"
- }
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
- },
- "arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
- },
- "asmcrypto.js": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz",
- "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA=="
- },
- "asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
- "dev": true
- },
- "asn1.js": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
- "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
- "requires": {
- "util": "0.10.3"
- }
- },
- "assert-plus": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
- "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- },
- "ast-types": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
- "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
- "dev": true
- },
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
- },
- "async-each-series": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz",
- "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=",
- "dev": true
- },
- "async-foreach": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
- "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
- "dev": true
- },
- "async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "atob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
- "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio="
- },
- "autoprefixer": {
- "version": "8.6.5",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
- "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==",
- "requires": {
- "browserslist": "^3.2.8",
- "caniuse-lite": "^1.0.30000864",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^6.0.23",
- "postcss-value-parser": "^3.2.3"
- }
- },
- "aws-sign2": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
- "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
- "dev": true
- },
- "aws4": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
- "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
- "dev": true
- },
- "axios": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
- "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
- "dev": true,
- "requires": {
- "follow-redirects": "^1.3.0",
- "is-buffer": "^1.1.5"
- }
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
- "requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- }
- }
- },
- "babel-core": {
- "version": "6.26.3",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
- "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
- },
- "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"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "babel-generator": {
- "version": "6.26.1",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
- "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
- "dev": true,
- "requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "babel-helper-builder-binary-assignment-operator-visitor": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
- "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
- "dev": true,
- "requires": {
- "babel-helper-explode-assignable-expression": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-call-delegate": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
- "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
- "dev": true,
- "requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-define-map": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
- "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
- "dev": true,
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-helper-explode-assignable-expression": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
- "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-function-name": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
- "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
- "dev": true,
- "requires": {
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-get-function-arity": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
- "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-hoist-variables": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
- "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-optimise-call-expression": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
- "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-regex": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
- "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-helper-remap-async-to-generator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
- "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
- "dev": true,
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-replace-supers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
- "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
- "dev": true,
- "requires": {
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helpers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
- "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-loader": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz",
- "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^1.0.0",
- "loader-utils": "^1.0.2",
- "mkdirp": "^0.5.1"
- }
- },
- "babel-messages": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-check-es2015-constants": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
- "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-syntax-async-functions": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
- "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
- "dev": true
- },
- "babel-plugin-syntax-exponentiation-operator": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
- "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
- "dev": true
- },
- "babel-plugin-syntax-object-rest-spread": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
- "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
- "dev": true
- },
- "babel-plugin-syntax-trailing-function-commas": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
- "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
- "dev": true
- },
- "babel-plugin-transform-async-to-generator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
- "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
- "dev": true,
- "requires": {
- "babel-helper-remap-async-to-generator": "^6.24.1",
- "babel-plugin-syntax-async-functions": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-arrow-functions": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
- "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-block-scoped-functions": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
- "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-block-scoping": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
- "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-plugin-transform-es2015-classes": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
- "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
- "dev": true,
- "requires": {
- "babel-helper-define-map": "^6.24.1",
- "babel-helper-function-name": "^6.24.1",
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-helper-replace-supers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-computed-properties": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
- "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-destructuring": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
- "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-duplicate-keys": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
- "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-for-of": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
- "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-function-name": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
- "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
- "dev": true,
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-literals": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
- "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-modules-amd": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
- "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
- "dev": true,
- "requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-modules-commonjs": {
- "version": "6.26.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
- "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
- "dev": true,
- "requires": {
- "babel-plugin-transform-strict-mode": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-types": "^6.26.0"
- }
- },
- "babel-plugin-transform-es2015-modules-systemjs": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
- "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
- "dev": true,
- "requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-modules-umd": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
- "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
- "dev": true,
- "requires": {
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-object-super": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
- "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
- "dev": true,
- "requires": {
- "babel-helper-replace-supers": "^6.24.1",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-parameters": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
- "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
- "dev": true,
- "requires": {
- "babel-helper-call-delegate": "^6.24.1",
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-shorthand-properties": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
- "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-spread": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
- "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-sticky-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
- "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
- "dev": true,
- "requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-template-literals": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
- "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-typeof-symbol": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
- "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-unicode-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
- "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
- "dev": true,
- "requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "regexpu-core": "^2.0.0"
- }
- },
- "babel-plugin-transform-exponentiation-operator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
- "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
- "dev": true,
- "requires": {
- "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
- "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-object-rest-spread": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
- "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
- "dev": true,
- "requires": {
- "babel-plugin-syntax-object-rest-spread": "^6.8.0",
- "babel-runtime": "^6.26.0"
- }
- },
- "babel-plugin-transform-regenerator": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
- "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
- "dev": true,
- "requires": {
- "regenerator-transform": "^0.10.0"
- }
- },
- "babel-plugin-transform-runtime": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
- "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-strict-mode": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
- "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-preset-env": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz",
- "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==",
- "dev": true,
- "requires": {
- "babel-plugin-check-es2015-constants": "^6.22.0",
- "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
- "babel-plugin-transform-async-to-generator": "^6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
- "babel-plugin-transform-es2015-classes": "^6.23.0",
- "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
- "babel-plugin-transform-es2015-destructuring": "^6.23.0",
- "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
- "babel-plugin-transform-es2015-for-of": "^6.23.0",
- "babel-plugin-transform-es2015-function-name": "^6.22.0",
- "babel-plugin-transform-es2015-literals": "^6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
- "babel-plugin-transform-es2015-object-super": "^6.22.0",
- "babel-plugin-transform-es2015-parameters": "^6.23.0",
- "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
- "babel-plugin-transform-es2015-spread": "^6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
- "babel-plugin-transform-es2015-template-literals": "^6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
- "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
- "babel-plugin-transform-exponentiation-operator": "^6.22.0",
- "babel-plugin-transform-regenerator": "^6.22.0",
- "browserslist": "^3.2.6",
- "invariant": "^2.2.2",
- "semver": "^5.3.0"
- },
- "dependencies": {
- "browserslist": {
- "version": "3.2.8",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
- "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30000844",
- "electron-to-chromium": "^1.3.47"
- }
- }
- }
- },
- "babel-register": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
- "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
- "dev": true,
- "requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "dev": true,
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "babel-template": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
- "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-traverse": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
- },
- "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"
- }
- }
- }
- },
- "babel-types": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
- }
- },
- "babylon": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
- "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
- "dev": true
- },
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "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=",
- "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==",
- "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==",
- "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==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "base64-arraybuffer": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
- },
- "base64-js": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
- "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
- "dev": true
- },
- "base64id": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
- "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
- },
- "batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "beeper": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
- "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
- "dev": true
- },
- "better-assert": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
- "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
- "requires": {
- "callsite": "1.0.0"
- }
- },
- "big.js": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
- "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
- },
- "bin-build": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz",
- "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=",
- "dev": true,
- "requires": {
- "archive-type": "^3.0.1",
- "decompress": "^3.0.0",
- "download": "^4.1.2",
- "exec-series": "^1.0.0",
- "rimraf": "^2.2.6",
- "tempfile": "^1.0.0",
- "url-regex": "^3.0.0"
- },
- "dependencies": {
- "tempfile": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
- "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
- "dev": true,
- "requires": {
- "os-tmpdir": "^1.0.0",
- "uuid": "^2.0.1"
- }
- },
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
- "dev": true
- }
- }
- },
- "bin-check": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz",
- "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=",
- "dev": true,
- "requires": {
- "executable": "^1.0.0"
- }
- },
- "bin-version": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz",
- "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=",
- "dev": true,
- "requires": {
- "find-versions": "^1.0.0"
- }
- },
- "bin-version-check": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz",
- "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=",
- "dev": true,
- "requires": {
- "bin-version": "^1.0.0",
- "minimist": "^1.1.0",
- "semver": "^4.0.3",
- "semver-truncate": "^1.0.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "semver": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
- "dev": true
- }
- }
- },
- "bin-wrapper": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz",
- "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=",
- "dev": true,
- "requires": {
- "bin-check": "^2.0.0",
- "bin-version-check": "^2.1.0",
- "download": "^4.0.0",
- "each-async": "^1.1.1",
- "lazy-req": "^1.0.0",
- "os-filter-obj": "^1.0.0"
- }
- },
- "binary-extensions": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
- "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
- },
- "bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "dev": true,
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "blob": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
- "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
- },
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "dev": true,
- "requires": {
- "inherits": "~2.0.0"
- }
- },
- "bluebird": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
- "dev": true
- },
- "bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
- },
- "body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
- "requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.1",
- "http-errors": "~1.6.2",
- "iconv-lite": "0.4.19",
- "on-finished": "~2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
- "type-is": "~1.6.15"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
- }
- }
- },
- "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
- },
- "boom": {
- "version": "2.10.1",
- "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
- "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
- "dev": true,
- "requires": {
- "hoek": "2.x.x"
- }
- },
- "bootstrap": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.2.tgz",
- "integrity": "sha512-3bP609EdMc/8EwgGp8KgpN8HwnR4V4lZ9CTi5pImMrXNxpkw7dK1B05aMwQWpG1ZWmTLlBSN/uzkuz5GsmQNFA==",
- "dev": true
- },
- "bootstrap3-wysihtml5-npm": {
- "version": "0.3.3-npm.12",
- "resolved": "https://registry.npmjs.org/bootstrap3-wysihtml5-npm/-/bootstrap3-wysihtml5-npm-0.3.3-npm.12.tgz",
- "integrity": "sha1-5NhqEJYMqDYQpV7JTp44pxQsWZE=",
- "requires": {
- "handlebars": "^1.3.0",
- "wysihtml": "^0.6.0-beta1"
- },
- "dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
- "optional": true
- },
- "handlebars": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz",
- "integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=",
- "requires": {
- "optimist": "~0.3",
- "uglify-js": "~2.3"
- }
- },
- "optimist": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
- "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
- "requires": {
- "wordwrap": "~0.0.2"
- }
- },
- "source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "optional": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- },
- "uglify-js": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz",
- "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=",
- "optional": true,
- "requires": {
- "async": "~0.2.6",
- "optimist": "~0.3.5",
- "source-map": "~0.1.7"
- }
- }
- }
- },
- "boxen": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
- "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
- "requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "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==",
- "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=",
- "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="
- },
- "browser-sync": {
- "version": "2.24.5",
- "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.5.tgz",
- "integrity": "sha512-r6ZRYncfYRGerw4Rh5S8Q9x9WKDdrwH572hd3ofsYgn0Px6a6EqXiLBVTCss2+2a45G9ZgjRHSeo9YY56UpgKw==",
- "dev": true,
- "requires": {
- "browser-sync-ui": "v1.0.1",
- "bs-recipes": "1.3.4",
- "chokidar": "1.7.0",
- "connect": "3.6.6",
- "connect-history-api-fallback": "^1.5.0",
- "dev-ip": "^1.0.1",
- "easy-extender": "2.3.2",
- "eazy-logger": "3.0.2",
- "etag": "^1.8.1",
- "fresh": "^0.5.2",
- "fs-extra": "3.0.1",
- "http-proxy": "1.15.2",
- "immutable": "3.8.2",
- "localtunnel": "1.9.0",
- "micromatch": "2.3.11",
- "opn": "4.0.2",
- "portscanner": "2.1.1",
- "qs": "6.2.3",
- "raw-body": "^2.3.2",
- "resp-modifier": "6.0.2",
- "rx": "4.1.0",
- "serve-index": "1.9.1",
- "serve-static": "1.13.2",
- "server-destroy": "1.0.1",
- "socket.io": "2.1.1",
- "ua-parser-js": "0.7.17",
- "yargs": "6.4.0"
- },
- "dependencies": {
- "anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
- "dev": true,
- "requires": {
- "micromatch": "^2.1.5",
- "normalize-path": "^2.0.0"
- }
- },
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "chokidar": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
- "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
- "dev": true,
- "requires": {
- "anymatch": "^1.3.0",
- "async-each": "^1.0.0",
- "fsevents": "^1.0.0",
- "glob-parent": "^2.0.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^2.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0"
- }
- },
- "eventemitter3": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
- "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
- "dev": true
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "http-proxy": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz",
- "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=",
- "dev": true,
- "requires": {
- "eventemitter3": "1.x.x",
- "requires-port": "1.x.x"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.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"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- },
- "opn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
- "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
- }
- },
- "qs": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
- "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=",
- "dev": true
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "window-size": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
- "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
- "dev": true
- },
- "yargs": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz",
- "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "window-size": "^0.2.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^4.1.0"
- }
- },
- "yargs-parser": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
- "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0"
- }
- }
- }
- },
- "browser-sync-ui": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz",
- "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==",
- "dev": true,
- "requires": {
- "async-each-series": "0.1.1",
- "connect-history-api-fallback": "^1.1.0",
- "immutable": "^3.7.6",
- "server-destroy": "1.0.1",
- "socket.io-client": "2.0.4",
- "stream-throttle": "^0.1.3"
- },
- "dependencies": {
- "async-each-series": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
- "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
- "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"
- }
- },
- "engine.io-client": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
- "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "ws": "~3.3.1",
- "xmlhttprequest-ssl": "~1.5.4",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- },
- "socket.io-client": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
- "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
- "dev": true,
- "requires": {
- "backo2": "1.0.2",
- "base64-arraybuffer": "0.1.5",
- "component-bind": "1.0.0",
- "component-emitter": "1.2.1",
- "debug": "~2.6.4",
- "engine.io-client": "~3.1.0",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "object-component": "0.0.3",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "socket.io-parser": "~3.1.1",
- "to-array": "0.1.4"
- }
- },
- "socket.io-parser": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
- "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "has-binary2": "~1.0.2",
- "isarray": "2.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "browser-sync-webpack-plugin": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.0.1.tgz",
- "integrity": "sha512-F9vkVErG4N1XCJb1OI+RD/5oAK1nMd1G5UDfNE/FmUVAyo24YItfXN+etzA8MBC4Z7oLjkuBKDeeLlbFa4NBGQ==",
- "dev": true,
- "requires": {
- "lodash": "^4"
- }
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "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==",
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
- "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1"
- }
- },
- "browserify-rsa": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
- "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
- "requires": {
- "bn.js": "^4.1.0",
- "randombytes": "^2.0.1"
- }
- },
- "browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
- "requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
- }
- },
- "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==",
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "browserslist": {
- "version": "3.2.8",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
- "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
- "requires": {
- "caniuse-lite": "^1.0.30000844",
- "electron-to-chromium": "^1.3.47"
- }
- },
- "bs-recipes": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
- "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=",
- "dev": true
- },
- "buffer": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",
- "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",
- "dev": true,
- "requires": {
- "base64-js": "0.0.8",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dev": true,
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
- "dev": true
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "dev": true
- },
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
- "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
- "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-to-vinyl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz",
- "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=",
- "dev": true,
- "requires": {
- "file-type": "^3.1.0",
- "readable-stream": "^2.0.2",
- "uuid": "^2.0.1",
- "vinyl": "^1.0.0"
- },
- "dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
- "dev": true
- },
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
- "dev": true
- }
- }
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
- },
- "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="
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
- },
- "cacache": {
- "version": "10.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
- "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.1",
- "mississippi": "^2.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
- "ssri": "^5.2.4",
- "unique-filename": "^1.1.0",
- "y18n": "^4.0.0"
- },
- "dependencies": {
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "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==",
- "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"
- }
- },
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
- },
- "camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
- "dev": true,
- "requires": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
- }
- },
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- }
- },
- "caniuse-db": {
- "version": "1.0.30000865",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000865.tgz",
- "integrity": "sha1-gv+2TUD3VnYgqsAtOmMgeWiavGs=",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30000865",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz",
- "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw=="
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
- "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "caw": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz",
- "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=",
- "dev": true,
- "requires": {
- "get-proxy": "^1.0.1",
- "is-obj": "^1.0.0",
- "object-assign": "^3.0.0",
- "tunnel-agent": "^0.4.0"
- },
- "dependencies": {
- "object-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
- "dev": true
- }
- }
- },
- "center-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
- "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
- "requires": {
- "align-text": "^0.1.3",
- "lazy-cache": "^1.0.3"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chardet": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.5.0.tgz",
- "integrity": "sha512-9ZTaoBaePSCFvNlNGrsyI8ZVACP2svUtq0DkM7t4K2ClAa96sqOIRjAzDTc8zXzFt1cZR46rRzLTiHFSJ+Qw0g=="
- },
- "charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
- "dev": true
- },
- "chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
- },
- "ci-info": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
- "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg=="
- },
- "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==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "clap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
- "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "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==",
- "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=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "clean-css": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
- "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=",
- "dev": true,
- "requires": {
- "source-map": "0.5.x"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "cli-boxes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
- "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM="
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- },
- "clone-deep": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
- "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.0",
- "shallow-clone": "^1.0.0"
- },
- "dependencies": {
- "for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- }
- }
- },
- "clone-stats": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
- "dev": true
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
- "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
- "requires": {
- "color-name": "1.1.1"
- }
- },
- "color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok="
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "colormin": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
- "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
- "dev": true,
- "requires": {
- "color": "^0.11.0",
- "css-color-names": "0.0.4",
- "has": "^1.0.1"
- },
- "dependencies": {
- "color": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
- "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2",
- "color-convert": "^1.3.0",
- "color-string": "^0.3.0"
- }
- },
- "color-string": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
- "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
- "dev": true,
- "requires": {
- "color-name": "^1.0.0"
- }
- }
- }
- },
- "colors": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
- },
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
- },
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
- },
- "compressible": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz",
- "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=",
- "dev": true,
- "requires": {
- "mime-db": ">= 1.34.0 < 2"
- }
- },
- "compression": {
- "version": "1.7.2",
- "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
- "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "bytes": "3.0.0",
- "compressible": "~2.0.13",
- "debug": "2.6.9",
- "on-headers": "~1.0.1",
- "safe-buffer": "5.1.1",
- "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"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- }
- }
- },
- "compressjs": {
- "version": "github:openpgpjs/compressjs#ce5ccbede61f075926081e29573c8a79ddf10d88",
- "from": "github:openpgpjs/compressjs",
- "requires": {
- "amdefine": "~1.0.0",
- "commander": "~2.8.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
- }
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "concatenate": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz",
- "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=",
- "dev": true,
- "requires": {
- "globs": "^0.1.2"
- }
- },
- "config-chain": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz",
- "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=",
- "dev": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "configstore": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
- "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
- "requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- },
- "dependencies": {
- "write-file-atomic": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
- "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- }
- }
- },
- "connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.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"
- }
- },
- "finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- }
- },
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "dev": true
- }
- }
- },
- "connect-history-api-fallback": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
- "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
- "dev": true
- },
- "console-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
- "requires": {
- "date-now": "^0.1.4"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
- },
- "console-stream": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
- "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
- "dev": true
- },
- "consolidate": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz",
- "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=",
- "dev": true,
- "requires": {
- "bluebird": "^3.1.1"
- }
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
- },
- "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=="
- },
- "convert-source-map": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
- "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
- "dev": true
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
- },
- "core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
- "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="
- },
- "cosmiconfig": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
- "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
- "dev": true,
- "requires": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.9.0",
- "parse-json": "^4.0.0",
- "require-from-string": "^2.0.1"
- },
- "dependencies": {
- "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
- },
- "js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "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"
- }
- }
- }
- },
- "create-ecdh": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
- "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
- }
- },
- "create-error-class": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
- "requires": {
- "capture-stack-trace": "^1.0.0"
- }
- },
- "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==",
- "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==",
- "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-env": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz",
- "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.5",
- "is-windows": "^1.0.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
- "dev": true
- },
- "cryptiles": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
- "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
- "dev": true,
- "requires": {
- "boom": "2.x.x"
- }
- },
- "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==",
- "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"
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
- "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
- },
- "css": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
- "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "source-map": "^0.1.38",
- "source-map-resolve": "^0.5.1",
- "urix": "^0.1.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- }
- }
- },
- "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-loader": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz",
- "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==",
- "requires": {
- "babel-code-frame": "^6.26.0",
- "css-selector-tokenizer": "^0.7.0",
- "icss-utils": "^2.1.0",
- "loader-utils": "^1.0.2",
- "lodash.camelcase": "^4.3.0",
- "postcss": "^6.0.23",
- "postcss-modules-extract-imports": "^1.2.0",
- "postcss-modules-local-by-default": "^1.2.0",
- "postcss-modules-scope": "^1.1.0",
- "postcss-modules-values": "^1.3.0",
- "postcss-value-parser": "^3.3.0",
- "source-list-map": "^2.0.0"
- }
- },
- "css-select": {
- "version": "1.3.0-rc0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz",
- "integrity": "sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE=",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "^1.0.1"
- }
- },
- "css-select-base-adapter": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz",
- "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=",
- "dev": true
- },
- "css-selector-tokenizer": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
- "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
- "requires": {
- "cssesc": "^0.1.0",
- "fastparse": "^1.1.1",
- "regexpu-core": "^1.0.0"
- },
- "dependencies": {
- "regexpu-core": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
- "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
- "requires": {
- "regenerate": "^1.2.1",
- "regjsgen": "^0.2.0",
- "regjsparser": "^0.1.4"
- }
- }
- }
- },
- "css-tree": {
- "version": "1.0.0-alpha25",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz",
- "integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==",
- "dev": true,
- "requires": {
- "mdn-data": "^1.0.0",
- "source-map": "^0.5.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "css-url-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
- "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
- "dev": true
- },
- "css-what": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
- "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
- "dev": true
- },
- "cssesc": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
- "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q="
- },
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "cyclist": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
- "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
- "dev": true
- },
- "d": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
- "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
- "requires": {
- "es5-ext": "^0.10.9"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- }
- }
- },
- "date-now": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
- },
- "dateformat": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
- "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
- "dev": true
- },
- "de-indent": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
- "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
- "dev": true
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "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="
- },
- "decompress": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz",
- "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=",
- "dev": true,
- "requires": {
- "buffer-to-vinyl": "^1.0.0",
- "concat-stream": "^1.4.6",
- "decompress-tar": "^3.0.0",
- "decompress-tarbz2": "^3.0.0",
- "decompress-targz": "^3.0.0",
- "decompress-unzip": "^3.0.0",
- "stream-combiner2": "^1.1.1",
- "vinyl-assign": "^1.0.1",
- "vinyl-fs": "^2.2.0"
- }
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "decompress-tar": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
- "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=",
- "dev": true,
- "requires": {
- "is-tar": "^1.0.0",
- "object-assign": "^2.0.0",
- "strip-dirs": "^1.0.0",
- "tar-stream": "^1.1.1",
- "through2": "^0.6.1",
- "vinyl": "^0.4.3"
- },
- "dependencies": {
- "clone": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
- },
- "object-assign": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
- },
- "vinyl": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
- "dev": true,
- "requires": {
- "clone": "^0.2.0",
- "clone-stats": "^0.0.1"
- }
- }
- }
- },
- "decompress-tarbz2": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz",
- "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=",
- "dev": true,
- "requires": {
- "is-bzip2": "^1.0.0",
- "object-assign": "^2.0.0",
- "seek-bzip": "^1.0.3",
- "strip-dirs": "^1.0.0",
- "tar-stream": "^1.1.1",
- "through2": "^0.6.1",
- "vinyl": "^0.4.3"
- },
- "dependencies": {
- "clone": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
- },
- "object-assign": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
- },
- "vinyl": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
- "dev": true,
- "requires": {
- "clone": "^0.2.0",
- "clone-stats": "^0.0.1"
- }
- }
- }
- },
- "decompress-targz": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz",
- "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=",
- "dev": true,
- "requires": {
- "is-gzip": "^1.0.0",
- "object-assign": "^2.0.0",
- "strip-dirs": "^1.0.0",
- "tar-stream": "^1.1.1",
- "through2": "^0.6.1",
- "vinyl": "^0.4.3"
- },
- "dependencies": {
- "clone": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
- },
- "object-assign": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
- },
- "vinyl": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
- "dev": true,
- "requires": {
- "clone": "^0.2.0",
- "clone-stats": "^0.0.1"
- }
- }
- }
- },
- "decompress-unzip": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz",
- "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=",
- "dev": true,
- "requires": {
- "is-zip": "^1.0.0",
- "read-all-stream": "^3.0.0",
- "stat-mode": "^0.2.0",
- "strip-dirs": "^1.0.0",
- "through2": "^2.0.0",
- "vinyl": "^1.0.0",
- "yauzl": "^2.2.1"
- },
- "dependencies": {
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
- "dev": true
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- },
- "define-properties": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
- "dev": true,
- "requires": {
- "foreach": "^2.0.5",
- "object-keys": "^1.0.8"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "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==",
- "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==",
- "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==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "del": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
- "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
- "requires": {
- "globby": "^6.1.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "p-map": "^1.1.1",
- "pify": "^3.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "des.js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
- "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
- "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="
- },
- "detect-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
- "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
- },
- "detect-node": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
- "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
- "dev": true
- },
- "dev-ip": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
- "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=",
- "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==",
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.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.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
- "dev": true,
- "requires": {
- "domelementtype": "~1.1.1",
- "entities": "~1.1.1"
- },
- "dependencies": {
- "domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
- "dev": true
- }
- }
- },
- "dom-urls": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz",
- "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=",
- "requires": {
- "urijs": "^1.16.1"
- }
- },
- "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=="
- },
- "domelementtype": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
- "dev": true
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "dev": true,
- "requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "dot-prop": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
- "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "dotenv": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz",
- "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=",
- "dev": true
- },
- "dotenv-expand": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
- "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
- "dev": true
- },
- "double-ended-queue": {
- "version": "2.1.0-0",
- "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
- "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw="
- },
- "download": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz",
- "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=",
- "dev": true,
- "requires": {
- "caw": "^1.0.1",
- "concat-stream": "^1.4.7",
- "each-async": "^1.0.0",
- "filenamify": "^1.0.1",
- "got": "^5.0.0",
- "gulp-decompress": "^1.2.0",
- "gulp-rename": "^1.2.0",
- "is-url": "^1.2.0",
- "object-assign": "^4.0.1",
- "read-all-stream": "^3.0.0",
- "readable-stream": "^2.0.2",
- "stream-combiner2": "^1.1.1",
- "vinyl": "^1.0.0",
- "vinyl-fs": "^2.2.0",
- "ware": "^1.2.0"
- }
- },
- "duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.2"
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "each-async": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
- "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
- "dev": true,
- "requires": {
- "onetime": "^1.0.0",
- "set-immediate-shim": "^1.0.0"
- }
- },
- "easy-extender": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz",
- "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=",
- "dev": true,
- "requires": {
- "lodash": "^3.10.1"
- },
- "dependencies": {
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
- "dev": true
- }
- }
- },
- "eazy-logger": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz",
- "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=",
- "dev": true,
- "requires": {
- "tfunk": "^3.0.1"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "electron-to-chromium": {
- "version": "1.3.52",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz",
- "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA="
- },
- "elliptic": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
- "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
- },
- "email-addresses": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.1.tgz",
- "integrity": "sha1-wfwgwYnn+W1AEtN121/qzN0kORw="
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "engine.io": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz",
- "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==",
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "1.0.0",
- "cookie": "0.3.1",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.0",
- "ws": "~3.3.1"
- },
- "dependencies": {
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "engine.io-client": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
- "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
- "requires": {
- "component-emitter": "1.2.1",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "ws": "~3.3.1",
- "xmlhttprequest-ssl": "~1.5.4",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "engine.io-parser": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
- "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
- "requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.5",
- "blob": "0.0.4",
- "has-binary2": "~1.0.2"
- }
- },
- "enhanced-resolve": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
- "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "tapable": "^1.0.0"
- }
- },
- "entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
- "dev": true
- },
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "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==",
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "error-stack-parser": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz",
- "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==",
- "dev": true,
- "requires": {
- "stackframe": "^1.0.4"
- }
- },
- "es-abstract": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
- "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- }
- },
- "es-to-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
- "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.1",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.1"
- }
- },
- "es5-ext": {
- "version": "0.10.45",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
- "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
- "requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.1",
- "next-tick": "1"
- }
- },
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "es6-map": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
- "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14",
- "es6-iterator": "~2.0.1",
- "es6-set": "~0.1.5",
- "es6-symbol": "~3.1.1",
- "event-emitter": "~0.3.5"
- }
- },
- "es6-promise": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
- "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ=="
- },
- "es6-set": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
- "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14",
- "es6-iterator": "~2.0.1",
- "es6-symbol": "3.1.1",
- "event-emitter": "~0.3.5"
- }
- },
- "es6-symbol": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
- "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "es6-templates": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
- "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
- "dev": true,
- "requires": {
- "recast": "~0.11.12",
- "through": "~2.3.6"
- }
- },
- "es6-weak-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
- "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.14",
- "es6-iterator": "^2.0.1",
- "es6-symbol": "^3.1.1"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "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="
- },
- "escope": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
- "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
- "requires": {
- "es6-map": "^0.1.3",
- "es6-weak-map": "^2.0.1",
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
- "dev": true
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "eventemitter3": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
- "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
- "dev": true
- },
- "events": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
- },
- "eventsource": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
- "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
- "dev": true,
- "requires": {
- "original": ">=0.0.5"
- }
- },
- "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==",
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "exec-buffer": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
- "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "p-finally": "^1.0.0",
- "pify": "^3.0.0",
- "rimraf": "^2.5.4",
- "tempfile": "^2.0.0"
- }
- },
- "exec-series": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz",
- "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=",
- "dev": true,
- "requires": {
- "async-each-series": "^1.1.0",
- "object-assign": "^4.1.0"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- }
- }
- },
- "executable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz",
- "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=",
- "dev": true,
- "requires": {
- "meow": "^3.1.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "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==",
- "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=",
- "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=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "^2.1.0"
- },
- "dependencies": {
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
- "dev": true,
- "requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
- }
- },
- "is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "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"
- }
- },
- "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"
- }
- }
- }
- },
- "express": {
- "version": "4.16.3",
- "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
- "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
- "requires": {
- "accepts": "~1.3.5",
- "array-flatten": "1.1.1",
- "body-parser": "1.18.2",
- "content-disposition": "0.5.2",
- "content-type": "~1.0.4",
- "cookie": "0.3.1",
- "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.1",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.3",
- "qs": "6.5.1",
- "range-parser": "~1.2.0",
- "safe-buffer": "5.1.1",
- "send": "0.16.2",
- "serve-static": "1.13.2",
- "setprototypeof": "1.1.0",
- "statuses": "~1.4.0",
- "type-is": "~1.6.16",
- "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="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- }
- }
- },
- "ext-list": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
- "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
- "dev": true,
- "requires": {
- "mime-db": "^1.28.0"
- }
- },
- "ext-name": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
- "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
- "dev": true,
- "requires": {
- "ext-list": "^2.0.0",
- "sort-keys-length": "^1.0.0"
- }
- },
- "extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "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==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "external-editor": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.0.tgz",
- "integrity": "sha512-mpkfj0FEdxrIhOC04zk85X7StNtr0yXnG7zCb+8ikO8OJi2jsHh5YGoknNTyXgsbHOf1WOOcVU3kPFWT2WgCkQ==",
- "requires": {
- "chardet": "^0.5.0",
- "iconv-lite": "^0.4.22",
- "tmp": "^0.0.33"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "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=",
- "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=",
- "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==",
- "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==",
- "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==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "extract-text-webpack-plugin": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz",
- "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
- "dev": true,
- "requires": {
- "async": "^2.4.1",
- "loader-utils": "^1.1.0",
- "schema-utils": "^0.3.0",
- "webpack-sources": "^1.0.1"
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fancy-log": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
- "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
- "dev": true,
- "requires": {
- "ansi-gray": "^0.1.1",
- "color-support": "^1.1.3",
- "time-stamp": "^1.0.0"
- }
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
- },
- "fastclick": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz",
- "integrity": "sha1-FhYlsnsaWAZAWTa9qaLBkm0Gvmo="
- },
- "fastparse": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
- "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg="
- },
- "faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "dev": true,
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "object-assign": "^4.1.0"
- }
- },
- "file-loader": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz",
- "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.0.2"
- }
- },
- "file-type": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
- "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
- "dev": true
- },
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
- },
- "filename-reserved-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
- "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
- "dev": true
- },
- "filenamify": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
- "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
- "dev": true,
- "requires": {
- "filename-reserved-regex": "^1.0.0",
- "strip-outer": "^1.0.0",
- "trim-repeated": "^1.0.0"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "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=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "finalhandler": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
- "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.4.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==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "find-cache-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
- "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^1.0.0",
- "pkg-dir": "^2.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "find-versions": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz",
- "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.0",
- "get-stdin": "^4.0.1",
- "meow": "^3.5.0",
- "semver-regex": "^1.0.0"
- }
- },
- "first-chunk-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
- "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
- "dev": true
- },
- "flatten": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
- "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
- "dev": true
- },
- "flush-write-stream": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
- "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
- }
- },
- "follow-redirects": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz",
- "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==",
- "dev": true,
- "requires": {
- "debug": "^3.1.0"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
- },
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
- "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.5",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "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="
- },
- "friendly-errors-webpack-plugin": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz",
- "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "error-stack-parser": "^2.0.0",
- "string-width": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true
- },
- "fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^3.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs-minipass": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
- "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
- "optional": true,
- "requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "optional": 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"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "optional": true,
- "requires": {
- "safer-buffer": "^2.1.0"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "optional": 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"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "optional": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true
- }
- }
- },
- "fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "gaze": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
- "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
- "dev": true,
- "requires": {
- "globule": "^1.0.0"
- }
- },
- "get-caller-file": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
- "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
- },
- "get-proxy": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz",
- "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=",
- "dev": true,
- "requires": {
- "rc": "^1.1.2"
- }
- },
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- }
- }
- },
- "gifsicle": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz",
- "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=",
- "dev": true,
- "requires": {
- "bin-build": "^2.0.0",
- "bin-wrapper": "^3.0.0",
- "logalot": "^2.0.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "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-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^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=",
- "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=",
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "glob-stream": {
- "version": "5.3.5",
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
- "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "glob": "^5.0.3",
- "glob-parent": "^3.0.0",
- "micromatch": "^2.3.7",
- "ordered-read-streams": "^0.3.0",
- "through2": "^0.6.0",
- "to-absolute-glob": "^0.1.1",
- "unique-stream": "^2.0.2"
- },
- "dependencies": {
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "glob": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
- "dev": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.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"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- }
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "global-modules-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.1.0.tgz",
- "integrity": "sha512-3DrmGj2TP+96cABk9TfMp6f3knH/Y46dqvWznTU3Tf6/bDGLDAn15tFluQ7BcloykOcdY16U0WGq0BQblYOxJQ=="
- },
- "globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true
- },
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
- }
- },
- "globs": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz",
- "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==",
- "dev": true,
- "requires": {
- "glob": "^7.1.1"
- }
- },
- "globule": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
- "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
- "dev": true,
- "requires": {
- "glob": "~7.1.1",
- "lodash": "~4.17.10",
- "minimatch": "~3.0.2"
- }
- },
- "glogg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
- "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "got": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
- "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
- "dev": true,
- "requires": {
- "create-error-class": "^3.0.1",
- "duplexer2": "^0.1.4",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "node-status-codes": "^1.0.0",
- "object-assign": "^4.0.1",
- "parse-json": "^2.1.0",
- "pinkie-promise": "^2.0.0",
- "read-all-stream": "^3.0.0",
- "readable-stream": "^2.0.5",
- "timed-out": "^3.0.0",
- "unzip-response": "^1.0.2",
- "url-parse-lax": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
- },
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
- },
- "growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
- "dev": true
- },
- "gulp-decompress": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz",
- "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=",
- "dev": true,
- "requires": {
- "archive-type": "^3.0.0",
- "decompress": "^3.0.0",
- "gulp-util": "^3.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "gulp-rename": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.3.0.tgz",
- "integrity": "sha512-nEuZB7/9i0IZ8AXORTizl2QLP9tcC9uWc/s329zElBLJw1CfOhmMXBxwVlCRKjDyrWuhVP0uBKl61KeQ32TiCg==",
- "dev": true
- },
- "gulp-sourcemaps": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
- "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
- "dev": true,
- "requires": {
- "convert-source-map": "^1.1.1",
- "graceful-fs": "^4.1.2",
- "strip-bom": "^2.0.0",
- "through2": "^2.0.0",
- "vinyl": "^1.0.0"
- },
- "dependencies": {
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "gulp-util": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
- "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
- "dev": true,
- "requires": {
- "array-differ": "^1.0.0",
- "array-uniq": "^1.0.2",
- "beeper": "^1.0.0",
- "chalk": "^1.0.0",
- "dateformat": "^2.0.0",
- "fancy-log": "^1.1.0",
- "gulplog": "^1.0.0",
- "has-gulplog": "^0.1.0",
- "lodash._reescape": "^3.0.0",
- "lodash._reevaluate": "^3.0.0",
- "lodash._reinterpolate": "^3.0.0",
- "lodash.template": "^3.0.0",
- "minimist": "^1.1.0",
- "multipipe": "^0.1.2",
- "object-assign": "^3.0.0",
- "replace-ext": "0.0.1",
- "through2": "^2.0.0",
- "vinyl": "^0.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "object-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
- "dev": true
- },
- "replace-ext": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
- "dev": true
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "vinyl": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
- "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
- "dev": true,
- "requires": {
- "clone": "^1.0.0",
- "clone-stats": "^0.0.1",
- "replace-ext": "0.0.1"
- }
- }
- }
- },
- "gulplog": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
- "dev": true,
- "requires": {
- "glogg": "^1.0.0"
- }
- },
- "handle-thing": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
- "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
- "dev": true
- },
- "har-schema": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
- "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
- "dev": true
- },
- "har-validator": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
- "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
- "dev": true,
- "requires": {
- "ajv": "^4.9.1",
- "har-schema": "^1.0.5"
- },
- "dependencies": {
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true,
- "requires": {
- "co": "^4.6.0",
- "json-stable-stringify": "^1.0.1"
- }
- }
- }
- },
- "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-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "requires": {
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- }
- }
- },
- "has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "has-gulplog": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "has-symbol-support-x": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
- "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
- "dev": true
- },
- "has-to-string-tag-x": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
- "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
- "dev": true,
- "requires": {
- "has-symbol-support-x": "^1.4.1"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "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=",
- "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=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "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.4",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.4.tgz",
- "integrity": "sha512-A6RlQvvZEtFS5fLU43IDu0QUmBy+fDO9VMdTXvufKwIkt/rFfvICAViCax5fbDO4zdNzaC3/27ZhKUok5bAJyw==",
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "hawk": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
- "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
- "dev": true,
- "requires": {
- "boom": "2.x.x",
- "cryptiles": "2.x.x",
- "hoek": "2.x.x",
- "sntp": "1.x.x"
- }
- },
- "he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
- "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=",
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "hoek": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
- "dev": true
- },
- "home-or-tmp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
- "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
- }
- },
- "hosted-git-info": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.1.tgz",
- "integrity": "sha512-Ba4+0M4YvIDUUsprMjhVTU1yN9F2/LJSAl69ZpzaLT4l4j5mwTS6jqqW9Ojvj6lKz/veqPzpJBqGbXspOb533A=="
- },
- "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"
- }
- },
- "html-comment-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
- "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=",
- "dev": true
- },
- "html-entities": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
- "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
- "dev": true
- },
- "html-loader": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz",
- "integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=",
- "dev": true,
- "requires": {
- "es6-templates": "^0.2.2",
- "fastparse": "^1.1.1",
- "html-minifier": "^3.0.1",
- "loader-utils": "^1.0.2",
- "object-assign": "^4.1.0"
- }
- },
- "html-minifier": {
- "version": "3.5.19",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.19.tgz",
- "integrity": "sha512-Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==",
- "dev": true,
- "requires": {
- "camel-case": "3.0.x",
- "clean-css": "4.1.x",
- "commander": "2.16.x",
- "he": "1.1.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
- },
- "dependencies": {
- "commander": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
- "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
- "dev": true
- },
- "uglify-js": {
- "version": "3.4.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.4.tgz",
- "integrity": "sha512-RiB1kNcC9RMyqwRrjXC+EjgLoXULoDnCaOnEDzUCHkBN0bHwmtF5rzDMiDWU29gu0kXCRRWwtcTAVFWRECmU2Q==",
- "dev": true,
- "requires": {
- "commander": "~2.16.0",
- "source-map": "~0.6.1"
- }
- }
- }
- },
- "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.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "http-parser-js": {
- "version": "0.4.13",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
- "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
- "dev": true
- },
- "http-proxy": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
- "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
- "dev": true,
- "requires": {
- "eventemitter3": "^3.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- }
- },
- "http-proxy-middleware": {
- "version": "0.17.4",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
- "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
- "dev": true,
- "requires": {
- "http-proxy": "^1.16.2",
- "is-glob": "^3.1.0",
- "lodash": "^4.17.2",
- "micromatch": "^2.3.11"
- },
- "dependencies": {
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- },
- "dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- }
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- },
- "dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- }
- }
- },
- "http-signature": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
- "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
- "dev": true,
- "requires": {
- "assert-plus": "^0.2.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.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="
- },
- "iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
- },
- "icss-replace-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
- "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
- },
- "icss-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
- "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
- "requires": {
- "postcss": "^6.0.1"
- }
- },
- "ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
- "ignore-walk": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
- "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "imagemin": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz",
- "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=",
- "dev": true,
- "requires": {
- "file-type": "^4.1.0",
- "globby": "^6.1.0",
- "make-dir": "^1.0.0",
- "p-pipe": "^1.1.0",
- "pify": "^2.3.0",
- "replace-ext": "^1.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "imagemin-gifsicle": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz",
- "integrity": "sha512-K01m5QuPK+0en8oVhiOOAicF7KjrHlCZxS++mfLI2mV/Ksfq/Y9nCXCWDz6jRv13wwlqe5T7hXT+ji2DnLc2yQ==",
- "dev": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "gifsicle": "^3.0.0",
- "is-gif": "^1.0.0"
- }
- },
- "imagemin-mozjpeg": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-7.0.0.tgz",
- "integrity": "sha1-2SZHf8bvXzp2ikIi97LYCNPrpWg=",
- "dev": true,
- "requires": {
- "execa": "^0.8.0",
- "is-jpg": "^1.0.0",
- "mozjpeg": "^5.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
- "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- }
- }
- },
- "imagemin-optipng": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz",
- "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=",
- "dev": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "is-png": "^1.0.0",
- "optipng-bin": "^3.0.0"
- }
- },
- "imagemin-pngquant": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-5.1.0.tgz",
- "integrity": "sha512-RtIUPbp8/HYX5EKY6p/L1NLKnkxNj37I92IFNsrptzBVql8FqBgPra9DO/eUgE4EWx+zq6ih4a/Y9YhF3pNM5A==",
- "dev": true,
- "requires": {
- "execa": "^0.10.0",
- "is-png": "^1.0.0",
- "is-stream": "^1.1.0",
- "pngquant-bin": "^4.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
- "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- }
- }
- },
- "imagemin-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-6.0.0.tgz",
- "integrity": "sha512-xwjBZQKpbkklHtJYnCOwRJjTRJA/nR0hQzKMh+CUZRvm/L0QwKKPJQ9tkPWQHrg+cydPu2i1vLgHuy2E0hKEkg==",
- "dev": true,
- "requires": {
- "buffer-from": "^0.1.1",
- "is-svg": "^2.0.0",
- "svgo": "^1.0.0"
- },
- "dependencies": {
- "buffer-from": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
- "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==",
- "dev": true
- },
- "coa": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz",
- "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==",
- "dev": true,
- "requires": {
- "q": "^1.1.2"
- }
- },
- "csso": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
- "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
- "dev": true,
- "requires": {
- "css-tree": "1.0.0-alpha.29"
- },
- "dependencies": {
- "css-tree": {
- "version": "1.0.0-alpha.29",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
- "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
- "dev": true,
- "requires": {
- "mdn-data": "~1.1.0",
- "source-map": "^0.5.3"
- }
- }
- }
- },
- "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
- },
- "js-yaml": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
- "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "svgo": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.0.5.tgz",
- "integrity": "sha512-nYrifviB77aNKDNKKyuay3M9aYiK6Hv5gJVDdjj2ZXTQmI8WZc8+UPLR5IpVlktJfSu3co/4XcWgrgI6seGBPg==",
- "dev": true,
- "requires": {
- "coa": "~2.0.1",
- "colors": "~1.1.2",
- "css-select": "~1.3.0-rc0",
- "css-select-base-adapter": "~0.1.0",
- "css-tree": "1.0.0-alpha25",
- "css-url-regex": "^1.1.0",
- "csso": "^3.5.0",
- "js-yaml": "~3.10.0",
- "mkdirp": "~0.5.1",
- "object.values": "^1.0.4",
- "sax": "~1.2.4",
- "stable": "~0.1.6",
- "unquote": "~1.1.1",
- "util.promisify": "~1.0.0"
- }
- }
- }
- },
- "img-loader": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-2.0.1.tgz",
- "integrity": "sha512-cD5D+zzIDvVPyX9nmz6+GL20BfpRUKUEXFur9IPeUC8/LRJT/PQ3YJVyKelIum8R5rCVZXgSFB0ccpsnS4IyAQ==",
- "dev": true,
- "requires": {
- "imagemin": "^5.3.1",
- "imagemin-gifsicle": "^5.2.0",
- "imagemin-mozjpeg": "^7.0.0",
- "imagemin-optipng": "^5.2.0",
- "imagemin-pngquant": "^5.0.1",
- "imagemin-svgo": "^6.0.0",
- "loader-utils": "^1.1.0"
- }
- },
- "immutable": {
- "version": "3.8.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
- "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
- "dev": true
- },
- "import-cwd": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
- "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
- "dev": true,
- "requires": {
- "import-from": "^2.1.0"
- }
- },
- "import-from": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
- "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
- "dev": true,
- "requires": {
- "resolve-from": "^3.0.0"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
- },
- "import-local": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
- "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
- "requires": {
- "pkg-dir": "^2.0.0",
- "resolve-cwd": "^2.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
- "in-publish": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
- "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
- "dev": true
- },
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
- "dev": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
- },
- "inquirer": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.0.0.tgz",
- "integrity": "sha512-tISQWRwtcAgrz+SHPhTH7d3e73k31gsOy6i1csonLc0u1dVK/wYvuOnFeiWqC5OXFIYbmrIFInef31wbT8MEJg==",
- "requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.0",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.1.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "internal-ip": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz",
- "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
- "dev": true,
- "requires": {
- "meow": "^3.3.0"
- }
- },
- "interpret": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
- "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
- },
- "invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
- },
- "ionicons": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.2.4.tgz",
- "integrity": "sha512-iaBPyuPSefGd6X03SkBM1BRqVbVFe1PZL5kYSNbMLxvTXGTenxK+O2TWsE1PPDo10qd0OiDb5cBod1oeHPCItA=="
- },
- "ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
- "dev": true
- },
- "ip-regex": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
- "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=",
- "dev": true
- },
- "ipaddr.js": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
- "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
- },
- "is-absolute": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
- "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
- "dev": true,
- "requires": {
- "is-relative": "^0.1.0"
- }
- },
- "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=",
- "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=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
- },
- "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=",
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "requires": {
- "builtin-modules": "^1.0.0"
- }
- },
- "is-bzip2": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz",
- "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=",
- "dev": true
- },
- "is-callable": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
- "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
- "dev": true
- },
- "is-ci": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
- "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
- "requires": {
- "ci-info": "^1.0.0"
- }
- },
- "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=",
- "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=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-date-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
- "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==",
- "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=="
- }
- }
- },
- "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-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true,
- "requires": {
- "is-primitive": "^2.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-finite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "is-gif": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz",
- "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-gzip": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
- "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
- "dev": true
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
- "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-jpg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.1.tgz",
- "integrity": "sha1-KW1X/dmc4BBDSnKD40armhA16XU=",
- "dev": true
- },
- "is-natural-number": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz",
- "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=",
- "dev": true
- },
- "is-npm": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
- "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ="
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "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=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-number-like": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
- "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
- "dev": true,
- "requires": {
- "lodash.isfinite": "^3.3.2"
- }
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
- },
- "is-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
- "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
- "dev": true
- },
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
- },
- "is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
- "requires": {
- "is-path-inside": "^1.0.0"
- }
- },
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "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==",
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-png": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz",
- "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=",
- "dev": true
- },
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
- },
- "is-redirect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
- },
- "is-regex": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
- "dev": true,
- "requires": {
- "has": "^1.0.1"
- }
- },
- "is-relative": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
- "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
- "dev": true
- },
- "is-retry-allowed": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ="
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-svg": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
- "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
- "dev": true,
- "requires": {
- "html-comment-regex": "^1.1.0"
- }
- },
- "is-symbol": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
- "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
- "dev": true
- },
- "is-tar": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
- "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
- "dev": true
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
- },
- "is-valid-glob": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
- "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
- "dev": true
- },
- "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=="
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
- "is-zip": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz",
- "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "isurl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
- "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
- "dev": true,
- "requires": {
- "has-to-string-tag-x": "^1.2.0",
- "is-object": "^1.0.1"
- }
- },
- "jquery": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
- "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
- },
- "jquery-migrate": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz",
- "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA=="
- },
- "jquery-slimscroll": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/jquery-slimscroll/-/jquery-slimscroll-1.3.8.tgz",
- "integrity": "sha1-hIHETnpHaHZTkIoo9/cK7WTITjY=",
- "requires": {
- "jquery": ">= 1.7"
- }
- },
- "jquery-ui-bundle": {
- "version": "1.12.1-migrate",
- "resolved": "https://registry.npmjs.org/jquery-ui-bundle/-/jquery-ui-bundle-1.12.1-migrate.tgz",
- "integrity": "sha1-uTQ+LDEHQ1J2Ms/4vtsMXpYAsUw="
- },
- "js-base64": {
- "version": "2.4.6",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.6.tgz",
- "integrity": "sha512-O9SR2NVICx6rCqh1qsU91QZ5IoNa+2T1ROJ0OQlfvATKGmnjsAvg3r0E5ufPZ4a95jdKTPXhFWiE/sOZ7a5Rtg==",
- "dev": true
- },
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
- },
- "js-yaml": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
- "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^2.6.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true,
- "optional": true
- },
- "jsesc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
- "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
- "dev": true
- },
- "json-loader": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
- "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
- },
- "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-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
- "dev": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "requires": {
- "jsonify": "~0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json3": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
- "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
- "dev": true
- },
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
- },
- "jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- }
- }
- },
- "killable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz",
- "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
- },
- "laravel-echo": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.4.0.tgz",
- "integrity": "sha512-O0vkToCCpxuH9dYAlugTLQzG0BmxvGrjXim0LHZ0VPsFu/Y+sXnV9GvYbmcBq1rcJymQc/6GHMUCDY01lN26lQ=="
- },
- "laravel-mix": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-2.1.11.tgz",
- "integrity": "sha512-+iDqVPOuHSq6Ng/WX0w8V2O7R8847u1N1jybB/AAuRca3nRw4iI9BNNJ307ViiXb1GulxKixLe67shPFatJjvQ==",
- "dev": true,
- "requires": {
- "autoprefixer": "^7.2.6",
- "babel-core": "^6.24.1",
- "babel-loader": "^7.1.1",
- "babel-plugin-transform-object-rest-spread": "^6.26.0",
- "babel-plugin-transform-runtime": "^6.23.0",
- "babel-preset-env": "^1.5.1",
- "chokidar": "^2.0.0",
- "clean-css": "^4.1.3",
- "concatenate": "0.0.2",
- "css-loader": "^0.28.9",
- "dotenv": "^4.0.0",
- "dotenv-expand": "^4.2.0",
- "extract-text-webpack-plugin": "^3.0.2",
- "file-loader": "^0.11.2",
- "friendly-errors-webpack-plugin": "^1.6.1",
- "fs-extra": "^3.0.1",
- "glob": "^7.1.2",
- "html-loader": "^0.4.5",
- "img-loader": "^2.0.1",
- "lodash": "^4.17.5",
- "md5": "^2.2.1",
- "node-sass": "^4.7.2",
- "postcss-loader": "^2.1.0",
- "resolve-url-loader": "^2.2.1",
- "sass-loader": "^6.0.5",
- "style-loader": "^0.18.2",
- "uglify-js": "^2.8.29",
- "uglifyjs-webpack-plugin": "^1.1.8",
- "vue-loader": "^13.7.1",
- "vue-template-compiler": "^2.5.13",
- "webpack": "^3.11.0",
- "webpack-chunk-hash": "^0.4.0",
- "webpack-dev-server": "^2.11.1",
- "webpack-merge": "^4.1.0",
- "webpack-notifier": "^1.5.1",
- "yargs": "^8.0.2"
- },
- "dependencies": {
- "ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.1"
- }
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "autoprefixer": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
- "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
- "dev": true,
- "requires": {
- "browserslist": "^2.11.3",
- "caniuse-lite": "^1.0.30000805",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^6.0.17",
- "postcss-value-parser": "^3.2.3"
- },
- "dependencies": {
- "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"
- }
- },
- "browserslist": {
- "version": "2.11.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
- "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30000792",
- "electron-to-chromium": "^1.3.30"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.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": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
- },
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "caniuse-api": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
- "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
- "dev": true,
- "requires": {
- "browserslist": "^1.3.6",
- "caniuse-db": "^1.0.30000529",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "coa": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
- "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
- "dev": true,
- "requires": {
- "q": "^1.1.2"
- }
- },
- "css-loader": {
- "version": "0.28.11",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz",
- "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==",
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "css-selector-tokenizer": "^0.7.0",
- "cssnano": "^3.10.0",
- "icss-utils": "^2.1.0",
- "loader-utils": "^1.0.2",
- "lodash.camelcase": "^4.3.0",
- "object-assign": "^4.1.1",
- "postcss": "^5.0.6",
- "postcss-modules-extract-imports": "^1.2.0",
- "postcss-modules-local-by-default": "^1.2.0",
- "postcss-modules-scope": "^1.1.0",
- "postcss-modules-values": "^1.3.0",
- "postcss-value-parser": "^3.3.0",
- "source-list-map": "^2.0.0"
- }
- },
- "cssnano": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
- "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
- "dev": true,
- "requires": {
- "autoprefixer": "^6.3.1",
- "decamelize": "^1.1.2",
- "defined": "^1.0.0",
- "has": "^1.0.1",
- "object-assign": "^4.0.1",
- "postcss": "^5.0.14",
- "postcss-calc": "^5.2.0",
- "postcss-colormin": "^2.1.8",
- "postcss-convert-values": "^2.3.4",
- "postcss-discard-comments": "^2.0.4",
- "postcss-discard-duplicates": "^2.0.1",
- "postcss-discard-empty": "^2.0.1",
- "postcss-discard-overridden": "^0.1.1",
- "postcss-discard-unused": "^2.2.1",
- "postcss-filter-plugins": "^2.0.0",
- "postcss-merge-idents": "^2.1.5",
- "postcss-merge-longhand": "^2.0.1",
- "postcss-merge-rules": "^2.0.3",
- "postcss-minify-font-values": "^1.0.2",
- "postcss-minify-gradients": "^1.0.1",
- "postcss-minify-params": "^1.0.4",
- "postcss-minify-selectors": "^2.0.4",
- "postcss-normalize-charset": "^1.1.0",
- "postcss-normalize-url": "^3.0.7",
- "postcss-ordered-values": "^2.1.0",
- "postcss-reduce-idents": "^2.2.2",
- "postcss-reduce-initial": "^1.0.0",
- "postcss-reduce-transforms": "^1.0.3",
- "postcss-svgo": "^2.1.1",
- "postcss-unique-selectors": "^2.0.2",
- "postcss-value-parser": "^3.2.3",
- "postcss-zindex": "^2.0.1"
- },
- "dependencies": {
- "autoprefixer": {
- "version": "6.7.7",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
- "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
- "dev": true,
- "requires": {
- "browserslist": "^1.7.6",
- "caniuse-db": "^1.0.30000634",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^5.2.16",
- "postcss-value-parser": "^3.2.3"
- }
- }
- }
- },
- "csso": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
- "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
- "dev": true,
- "requires": {
- "clap": "^1.0.9",
- "source-map": "^0.5.3"
- }
- },
- "enhanced-resolve": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
- "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "object-assign": "^4.0.1",
- "tapable": "^0.2.7"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "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
- },
- "normalize-url": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "prepend-http": "^1.0.0",
- "query-string": "^4.1.0",
- "sort-keys": "^1.0.0"
- }
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "dependencies": {
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
- "postcss-calc": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
- "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.2",
- "postcss-message-helpers": "^2.0.0",
- "reduce-css-calc": "^1.2.6"
- }
- },
- "postcss-colormin": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
- "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
- "dev": true,
- "requires": {
- "colormin": "^1.0.5",
- "postcss": "^5.0.13",
- "postcss-value-parser": "^3.2.3"
- }
- },
- "postcss-convert-values": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
- "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.11",
- "postcss-value-parser": "^3.1.2"
- }
- },
- "postcss-discard-comments": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
- "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.14"
- }
- },
- "postcss-discard-duplicates": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
- "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.4"
- }
- },
- "postcss-discard-empty": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
- "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.14"
- }
- },
- "postcss-discard-overridden": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
- "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.16"
- }
- },
- "postcss-merge-longhand": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
- "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.4"
- }
- },
- "postcss-merge-rules": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
- "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
- "dev": true,
- "requires": {
- "browserslist": "^1.5.2",
- "caniuse-api": "^1.5.2",
- "postcss": "^5.0.4",
- "postcss-selector-parser": "^2.2.2",
- "vendors": "^1.0.0"
- }
- },
- "postcss-minify-font-values": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
- "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "postcss": "^5.0.4",
- "postcss-value-parser": "^3.0.2"
- }
- },
- "postcss-minify-gradients": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
- "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.12",
- "postcss-value-parser": "^3.3.0"
- }
- },
- "postcss-minify-params": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
- "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
- "dev": true,
- "requires": {
- "alphanum-sort": "^1.0.1",
- "postcss": "^5.0.2",
- "postcss-value-parser": "^3.0.2",
- "uniqs": "^2.0.0"
- }
- },
- "postcss-minify-selectors": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
- "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
- "dev": true,
- "requires": {
- "alphanum-sort": "^1.0.2",
- "has": "^1.0.1",
- "postcss": "^5.0.14",
- "postcss-selector-parser": "^2.0.0"
- }
- },
- "postcss-normalize-charset": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
- "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.5"
- }
- },
- "postcss-normalize-url": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
- "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
- "dev": true,
- "requires": {
- "is-absolute-url": "^2.0.0",
- "normalize-url": "^1.4.0",
- "postcss": "^5.0.14",
- "postcss-value-parser": "^3.2.3"
- }
- },
- "postcss-ordered-values": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
- "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.4",
- "postcss-value-parser": "^3.0.1"
- }
- },
- "postcss-reduce-initial": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
- "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.4"
- }
- },
- "postcss-reduce-transforms": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
- "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
- "dev": true,
- "requires": {
- "has": "^1.0.1",
- "postcss": "^5.0.8",
- "postcss-value-parser": "^3.0.1"
- }
- },
- "postcss-svgo": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
- "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
- "dev": true,
- "requires": {
- "is-svg": "^2.0.0",
- "postcss": "^5.0.14",
- "postcss-value-parser": "^3.2.3",
- "svgo": "^0.7.0"
- }
- },
- "postcss-unique-selectors": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
- "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
- "dev": true,
- "requires": {
- "alphanum-sort": "^1.0.1",
- "postcss": "^5.0.4",
- "uniqs": "^2.0.0"
- }
- },
- "reduce-css-calc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
- "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
- "dev": true,
- "requires": {
- "balanced-match": "^0.4.2",
- "math-expression-evaluator": "^1.2.14",
- "reduce-function-call": "^1.0.1"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "style-loader": {
- "version": "0.18.2",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz",
- "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.0.2",
- "schema-utils": "^0.3.0"
- }
- },
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "dev": true,
- "requires": {
- "has-flag": "^2.0.0"
- }
- },
- "svgo": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
- "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
- "dev": true,
- "requires": {
- "coa": "~1.0.1",
- "colors": "~1.1.2",
- "csso": "~2.3.1",
- "js-yaml": "~3.7.0",
- "mkdirp": "~0.5.1",
- "sax": "~1.2.1",
- "whet.extend": "~0.9.9"
- }
- },
- "tapable": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
- "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
- "dev": true
- },
- "webpack": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
- "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.0",
- "acorn-dynamic-import": "^2.0.0",
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0",
- "async": "^2.1.2",
- "enhanced-resolve": "^3.4.0",
- "escope": "^3.6.0",
- "interpret": "^1.0.0",
- "json-loader": "^0.5.4",
- "json5": "^0.5.1",
- "loader-runner": "^2.3.0",
- "loader-utils": "^1.1.0",
- "memory-fs": "~0.4.1",
- "mkdirp": "~0.5.0",
- "node-libs-browser": "^2.0.0",
- "source-map": "^0.5.3",
- "supports-color": "^4.2.1",
- "tapable": "^0.2.7",
- "uglifyjs-webpack-plugin": "^0.4.6",
- "watchpack": "^1.4.0",
- "webpack-sources": "^1.0.1",
- "yargs": "^8.0.2"
- },
- "dependencies": {
- "uglifyjs-webpack-plugin": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
- "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6",
- "uglify-js": "^2.8.29",
- "webpack-sources": "^1.0.1"
- }
- }
- }
- },
- "webpack-dev-server": {
- "version": "2.11.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz",
- "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==",
- "dev": true,
- "requires": {
- "ansi-html": "0.0.7",
- "array-includes": "^3.0.3",
- "bonjour": "^3.5.0",
- "chokidar": "^2.0.0",
- "compression": "^1.5.2",
- "connect-history-api-fallback": "^1.3.0",
- "debug": "^3.1.0",
- "del": "^3.0.0",
- "express": "^4.16.2",
- "html-entities": "^1.2.0",
- "http-proxy-middleware": "~0.17.4",
- "import-local": "^1.0.0",
- "internal-ip": "1.2.0",
- "ip": "^1.1.5",
- "killable": "^1.0.0",
- "loglevel": "^1.4.1",
- "opn": "^5.1.0",
- "portfinder": "^1.0.9",
- "selfsigned": "^1.9.1",
- "serve-index": "^1.7.2",
- "sockjs": "0.3.19",
- "sockjs-client": "1.1.4",
- "spdy": "^3.4.1",
- "strip-ansi": "^3.0.0",
- "supports-color": "^5.1.0",
- "webpack-dev-middleware": "1.12.2",
- "yargs": "6.6.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "yargs": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
- "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^4.2.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
- "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0"
- }
- }
- }
- },
- "latest-version": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
- "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
- "requires": {
- "package-json": "^4.0.0"
- }
- },
- "lazy-cache": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
- },
- "lazy-req": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz",
- "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=",
- "dev": true
- },
- "lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.5"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "limiter": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz",
- "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==",
- "dev": true
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
- }
- },
- "loader-runner": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
- "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
- },
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
- }
- },
- "localtunnel": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz",
- "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==",
- "dev": true,
- "requires": {
- "axios": "0.17.1",
- "debug": "2.6.8",
- "openurl": "1.1.1",
- "yargs": "6.6.0"
- },
- "dependencies": {
- "axios": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz",
- "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=",
- "dev": true,
- "requires": {
- "follow-redirects": "^1.2.5",
- "is-buffer": "^1.1.5"
- }
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "yargs": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
- "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^4.2.0"
- }
- },
- "yargs-parser": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
- "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0"
- }
- }
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.10",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
- },
- "lodash._baseassign": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
- "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
- "dev": true,
- "requires": {
- "lodash._basecopy": "^3.0.0",
- "lodash.keys": "^3.0.0"
- }
- },
- "lodash._basecopy": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
- "dev": true
- },
- "lodash._basetostring": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
- "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
- "dev": true
- },
- "lodash._basevalues": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
- "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
- "dev": true
- },
- "lodash._bindcallback": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
- "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
- "dev": true
- },
- "lodash._createassigner": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
- "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
- "dev": true,
- "requires": {
- "lodash._bindcallback": "^3.0.0",
- "lodash._isiterateecall": "^3.0.0",
- "lodash.restparam": "^3.0.0"
- }
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
- "dev": true
- },
- "lodash._isiterateecall": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
- "dev": true
- },
- "lodash._reescape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
- "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
- "dev": true
- },
- "lodash._reevaluate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
- "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
- "dev": true
- },
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
- },
- "lodash._root": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
- "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
- "dev": true
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
- "dev": true
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "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="
- },
- "lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
- },
- "lodash.escape": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
- "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
- "dev": true,
- "requires": {
- "lodash._root": "^3.0.0"
- }
- },
- "lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
- "dev": true
- },
- "lodash.isarray": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
- "dev": true
- },
- "lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
- "dev": true
- },
- "lodash.isfinite": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
- "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=",
- "dev": true
- },
- "lodash.keys": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
- "dev": true,
- "requires": {
- "lodash._getnative": "^3.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- }
- },
- "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.mergewith": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
- "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
- "dev": true
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
- "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
- "dev": true
- },
- "lodash.tail": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
- "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
- "dev": true
- },
- "lodash.template": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
- "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
- "dev": true,
- "requires": {
- "lodash._basecopy": "^3.0.0",
- "lodash._basetostring": "^3.0.0",
- "lodash._basevalues": "^3.0.0",
- "lodash._isiterateecall": "^3.0.0",
- "lodash._reinterpolate": "^3.0.0",
- "lodash.escape": "^3.0.0",
- "lodash.keys": "^3.0.0",
- "lodash.restparam": "^3.0.0",
- "lodash.templatesettings": "^3.0.0"
- }
- },
- "lodash.templatesettings": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
- "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "^3.0.0",
- "lodash.escape": "^3.0.0"
- }
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "dev": true
- },
- "logalot": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
- "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
- "dev": true,
- "requires": {
- "figures": "^1.3.5",
- "squeak": "^1.0.0"
- }
- },
- "loglevel": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
- "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
- "dev": true
- },
- "longest": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
- "lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
- "dev": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
- },
- "lpad-align": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
- "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1",
- "indent-string": "^2.1.0",
- "longest": "^1.0.0",
- "meow": "^3.3.0"
- }
- },
- "lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "math-expression-evaluator": {
- "version": "1.2.17",
- "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
- "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
- "dev": true
- },
- "math-random": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
- "dev": true
- },
- "md5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
- "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
- "dev": true,
- "requires": {
- "charenc": "~0.0.1",
- "crypt": "~0.0.1",
- "is-buffer": "~1.1.1"
- }
- },
- "md5.js": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
- "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "mdn-data": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
- "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
- "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="
- },
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- }
- }
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "merge-stream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
- "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "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==",
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- }
- },
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
- },
- "mime-db": {
- "version": "1.34.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz",
- "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.18",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
- "requires": {
- "mime-db": "~1.33.0"
- },
- "dependencies": {
- "mime-db": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
- }
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- },
- "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=="
- },
- "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="
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- },
- "minipass": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz",
- "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==",
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
- "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
- }
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
- "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mississippi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
- "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^2.0.1",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- },
- "dependencies": {
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
- "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==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "mixin-object": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
- "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
- "dev": true,
- "requires": {
- "for-in": "^0.1.3",
- "is-extendable": "^0.1.1"
- },
- "dependencies": {
- "for-in": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
- "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
- "dev": true
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "moment": {
- "version": "2.22.2",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
- "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
- },
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "mozjpeg": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-5.0.0.tgz",
- "integrity": "sha1-uGccSSRWijY94AP/L9OXq4P3UsU=",
- "dev": true,
- "requires": {
- "bin-build": "^2.2.0",
- "bin-wrapper": "^3.0.0",
- "logalot": "^2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "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
- },
- "multipipe": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
- "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
- "dev": true,
- "requires": {
- "duplexer2": "0.0.2"
- },
- "dependencies": {
- "duplexer2": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
- "dev": true,
- "requires": {
- "readable-stream": "~1.1.9"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
- "nan": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "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"
- }
- },
- "needle": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz",
- "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==",
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
- },
- "neo-async": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz",
- "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA=="
- },
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
- },
- "nice-try": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz",
- "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA=="
- },
- "no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
- "dev": true,
- "requires": {
- "lower-case": "^1.1.1"
- }
- },
- "node-fetch": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
- "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
- },
- "node-forge": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
- "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==",
- "dev": true
- },
- "node-gyp": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz",
- "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==",
- "dev": true,
- "requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": ">=2.9.0 <2.82.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
- },
- "dependencies": {
- "request": {
- "version": "2.81.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
- "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.6.0",
- "aws4": "^1.2.1",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.0",
- "forever-agent": "~0.6.1",
- "form-data": "~2.1.1",
- "har-validator": "~4.2.1",
- "hawk": "~3.1.3",
- "http-signature": "~1.1.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.7",
- "oauth-sign": "~0.8.1",
- "performance-now": "^0.2.0",
- "qs": "~6.4.0",
- "safe-buffer": "^5.0.1",
- "stringstream": "~0.0.4",
- "tough-cookie": "~2.3.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.0.0"
- }
- },
- "semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- }
- }
- },
- "node-libs-browser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
- "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
- "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": "^1.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.0",
- "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.10.3",
- "vm-browserify": "0.0.4"
- },
- "dependencies": {
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
- },
- "buffer": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
- "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- }
- }
- },
- "node-localstorage": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz",
- "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==",
- "requires": {
- "write-file-atomic": "^1.1.4"
- }
- },
- "node-notifier": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz",
- "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==",
- "dev": true,
- "requires": {
- "growly": "^1.3.0",
- "semver": "^5.4.1",
- "shellwords": "^0.1.1",
- "which": "^1.3.0"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.2",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.2.tgz",
- "integrity": "sha512-16lql9QTqs6KsB9fl3neWyZm02KxIKdI9FlJjrB0y7eMTP5Nyz+xalwPbOlw3iw7EejllJPmlJSnY711PLD1ug==",
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- },
- "dependencies": {
- "nopt": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "tar": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz",
- "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==",
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.3",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
- }
- },
- "yallist": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
- "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
- }
- }
- },
- "node-sass": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz",
- "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==",
- "dev": true,
- "requires": {
- "async-foreach": "^0.1.3",
- "chalk": "^1.1.1",
- "cross-spawn": "^3.0.0",
- "gaze": "^1.0.0",
- "get-stdin": "^4.0.1",
- "glob": "^7.0.3",
- "in-publish": "^2.0.0",
- "lodash.assign": "^4.2.0",
- "lodash.clonedeep": "^4.3.2",
- "lodash.mergewith": "^4.6.0",
- "meow": "^3.7.0",
- "mkdirp": "^0.5.1",
- "nan": "^2.10.0",
- "node-gyp": "^3.3.1",
- "npmlog": "^4.0.0",
- "request": "2.87.0",
- "sass-graph": "^2.2.4",
- "stdout-stream": "^1.4.0",
- "true-case-path": "^1.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "cross-spawn": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
- "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "node-status-codes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
- "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
- "dev": true
- },
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
- },
- "npm-bundled": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
- "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow=="
- },
- "npm-conf": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
- "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
- "dev": true,
- "requires": {
- "config-chain": "^1.1.11",
- "pify": "^3.0.0"
- }
- },
- "npm-packlist": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
- "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "nth-check": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
- "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
- "dev": true,
- "requires": {
- "boolbase": "~1.0.0"
- }
- },
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-component": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
- "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "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=",
- "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=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
- "dev": true
- },
- "object-path": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
- "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=",
- "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=",
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
- "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
- }
- },
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true,
- "requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "object.values": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
- "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.6.1",
- "function-bind": "^1.1.0",
- "has": "^1.0.1"
- }
- },
- "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=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
- "dev": true
- },
- "openpgp": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-3.0.13.tgz",
- "integrity": "sha512-I+pLx99CS6m0djuHEPRKKr0vxTi2DZGN9DFVU+M+zy3BeRcDt+KLVdVWa09IbSQXqUf7BfHVMJAaBOJ4rGRjog==",
- "requires": {
- "address-rfc2822": "^2.0.3",
- "asmcrypto.js": "^0.22.0",
- "asn1.js": "^5.0.0",
- "bn.js": "^4.11.8",
- "buffer": "^5.0.8",
- "compressjs": "github:openpgpjs/compressjs#ce5ccbede61f075926081e29573c8a79ddf10d88",
- "elliptic": "github:openpgpjs/elliptic#e187e706e11fa51bcd20e46e5119054be4e2a4a6",
- "hash.js": "^1.1.3",
- "node-fetch": "^2.1.2",
- "node-localstorage": "~1.3.0",
- "pako": "^1.0.6",
- "rusha": "^0.8.12"
- },
- "dependencies": {
- "asn1.js": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.1.tgz",
- "integrity": "sha512-aO8EaEgbgqq77IEw+1jfx5c9zTbzvkfuRBuZsSsPnTHMkmd5AI4J6OtITLZFa381jReeaQL67J0GBTUu0+ZTVw==",
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
- },
- "buffer": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz",
- "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "elliptic": {
- "version": "github:openpgpjs/elliptic#e187e706e11fa51bcd20e46e5119054be4e2a4a6",
- "from": "github:openpgpjs/elliptic",
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
- }
- }
- },
- "openurl": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
- "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=",
- "dev": true
- },
- "opn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
- "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "dev": true,
- "requires": {
- "is-wsl": "^1.1.0"
- }
- },
- "optipng-bin": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz",
- "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=",
- "dev": true,
- "requires": {
- "bin-build": "^2.0.0",
- "bin-wrapper": "^3.0.0",
- "logalot": "^2.0.0"
- }
- },
- "ordered-read-streams": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
- "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
- "dev": true,
- "requires": {
- "is-stream": "^1.0.1",
- "readable-stream": "^2.0.1"
- }
- },
- "original": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz",
- "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==",
- "dev": true,
- "requires": {
- "url-parse": "~1.4.0"
- }
- },
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
- },
- "os-filter-obj": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz",
- "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=",
- "dev": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "osenv": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "p-cancelable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
- "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==",
- "dev": true
- },
- "p-event": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
- "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
- "dev": true,
- "requires": {
- "p-timeout": "^1.1.1"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
- },
- "p-map-series": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
- "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
- "dev": true,
- "requires": {
- "p-reduce": "^1.0.0"
- }
- },
- "p-pipe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz",
- "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=",
- "dev": true
- },
- "p-reduce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
- "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
- "dev": true
- },
- "p-timeout": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
- "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
- "dev": true,
- "requires": {
- "p-finally": "^1.0.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "package-json": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
- "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- },
- "dependencies": {
- "got": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
- },
- "unzip-response": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
- "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c="
- }
- }
- },
- "pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
- },
- "parallel-transform": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
- "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
- "dev": true,
- "requires": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "dev": true,
- "requires": {
- "no-case": "^2.2.0"
- }
- },
- "parse-asn1": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
- "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
- "requires": {
- "asn1.js": "^4.0.0",
- "browserify-aes": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3"
- }
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "parseqs": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
- "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
- "requires": {
- "better-assert": "~1.0.0"
- }
- },
- "parseuri": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
- "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
- "requires": {
- "better-assert": "~1.0.0"
- }
- },
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
- },
- "path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "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="
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
- "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="
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
- }
- },
- "pbkdf2": {
- "version": "3.0.16",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
- "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
- "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"
- }
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
- },
- "performance-now": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
- "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "pkg-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
- "requires": {
- "find-up": "^2.1.0"
- }
- },
- "pngquant-bin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-4.0.0.tgz",
- "integrity": "sha512-jhjMp87bvaUeQOfNaPhSKx3tLCEwRaAycgDpIhMflgFr2+vYhw4ZrcK06eQeYg4OprXPanFljXLl5VuuAP2IHw==",
- "dev": true,
- "requires": {
- "bin-build": "^3.0.0",
- "bin-wrapper": "^3.0.0",
- "execa": "^0.10.0",
- "logalot": "^2.0.0"
- },
- "dependencies": {
- "bin-build": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz",
- "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==",
- "dev": true,
- "requires": {
- "decompress": "^4.0.0",
- "download": "^6.2.2",
- "execa": "^0.7.0",
- "p-map-series": "^1.0.0",
- "tempfile": "^2.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
- "caw": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
- "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
- "dev": true,
- "requires": {
- "get-proxy": "^2.0.0",
- "isurl": "^1.0.0-alpha5",
- "tunnel-agent": "^0.6.0",
- "url-to-options": "^1.0.1"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "decompress": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz",
- "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=",
- "dev": true,
- "requires": {
- "decompress-tar": "^4.0.0",
- "decompress-tarbz2": "^4.0.0",
- "decompress-targz": "^4.0.0",
- "decompress-unzip": "^4.0.1",
- "graceful-fs": "^4.1.10",
- "make-dir": "^1.0.0",
- "pify": "^2.3.0",
- "strip-dirs": "^2.0.0"
- }
- },
- "decompress-tar": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
- "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
- "dev": true,
- "requires": {
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0",
- "tar-stream": "^1.5.2"
- }
- },
- "decompress-tarbz2": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
- "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
- "dev": true,
- "requires": {
- "decompress-tar": "^4.1.0",
- "file-type": "^6.1.0",
- "is-stream": "^1.1.0",
- "seek-bzip": "^1.0.5",
- "unbzip2-stream": "^1.0.9"
- },
- "dependencies": {
- "file-type": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
- "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
- "dev": true
- }
- }
- },
- "decompress-targz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
- "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
- "dev": true,
- "requires": {
- "decompress-tar": "^4.1.1",
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0"
- }
- },
- "decompress-unzip": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
- "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
- "dev": true,
- "requires": {
- "file-type": "^3.8.0",
- "get-stream": "^2.2.0",
- "pify": "^2.3.0",
- "yauzl": "^2.4.2"
- },
- "dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
- "dev": true
- }
- }
- },
- "download": {
- "version": "6.2.5",
- "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
- "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==",
- "dev": true,
- "requires": {
- "caw": "^2.0.0",
- "content-disposition": "^0.5.2",
- "decompress": "^4.0.0",
- "ext-name": "^5.0.0",
- "file-type": "5.2.0",
- "filenamify": "^2.0.0",
- "get-stream": "^3.0.0",
- "got": "^7.0.0",
- "make-dir": "^1.0.0",
- "p-event": "^1.0.0",
- "pify": "^3.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "execa": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
- "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
- "file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true
- },
- "filename-reserved-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
- "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
- "dev": true
- },
- "filenamify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
- "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
- "dev": true,
- "requires": {
- "filename-reserved-regex": "^2.0.0",
- "strip-outer": "^1.0.0",
- "trim-repeated": "^1.0.0"
- }
- },
- "get-proxy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
- "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
- "dev": true,
- "requires": {
- "npm-conf": "^1.1.0"
- }
- },
- "get-stream": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
- "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
- }
- },
- "got": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
- "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
- "dev": true,
- "requires": {
- "decompress-response": "^3.2.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-plain-obj": "^1.1.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "isurl": "^1.0.0-alpha5",
- "lowercase-keys": "^1.0.0",
- "p-cancelable": "^0.3.0",
- "p-timeout": "^1.1.1",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "url-parse-lax": "^1.0.0",
- "url-to-options": "^1.0.1"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
- "is-natural-number": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
- "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "strip-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
- "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
- "dev": true,
- "requires": {
- "is-natural-number": "^4.0.1"
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- }
- }
- },
- "popper.js": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz",
- "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=",
- "dev": true
- },
- "portfinder": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
- "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
- "dev": true,
- "requires": {
- "async": "^1.5.2",
- "debug": "^2.2.0",
- "mkdirp": "0.5.x"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "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"
- }
- }
- }
- },
- "portscanner": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
- "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
- "dev": true,
- "requires": {
- "async": "1.5.2",
- "is-number-like": "^1.0.3"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- }
- }
- },
- "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="
- },
- "postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "requires": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- }
- },
- "postcss-discard-unused": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
- "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.14",
- "uniqs": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
- "postcss-filter-plugins": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
- "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
- "dev": true,
- "requires": {
- "postcss": "^5.0.4"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
- "postcss-load-config": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
- "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
- "dev": true,
- "requires": {
- "cosmiconfig": "^4.0.0",
- "import-cwd": "^2.0.0"
- }
- },
- "postcss-load-options": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
- "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
- "dev": true,
- "requires": {
- "cosmiconfig": "^2.1.0",
- "object-assign": "^4.1.0"
- },
- "dependencies": {
- "cosmiconfig": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
- "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
- "dev": true,
- "requires": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.4.3",
- "minimist": "^1.2.0",
- "object-assign": "^4.1.0",
- "os-homedir": "^1.0.1",
- "parse-json": "^2.2.0",
- "require-from-string": "^1.1.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "require-from-string": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
- "dev": true
- }
- }
- },
- "postcss-load-plugins": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
- "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
- "dev": true,
- "requires": {
- "cosmiconfig": "^2.1.1",
- "object-assign": "^4.1.0"
- },
- "dependencies": {
- "cosmiconfig": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
- "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
- "dev": true,
- "requires": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.4.3",
- "minimist": "^1.2.0",
- "object-assign": "^4.1.0",
- "os-homedir": "^1.0.1",
- "parse-json": "^2.2.0",
- "require-from-string": "^1.1.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "require-from-string": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
- "dev": true
- }
- }
- },
- "postcss-loader": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz",
- "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0",
- "postcss": "^6.0.0",
- "postcss-load-config": "^2.0.0",
- "schema-utils": "^0.4.0"
- },
- "dependencies": {
- "ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.1"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "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
- },
- "schema-utils": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
- "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "postcss-merge-idents": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
- "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
- "dev": true,
- "requires": {
- "has": "^1.0.1",
- "postcss": "^5.0.10",
- "postcss-value-parser": "^3.1.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
- "postcss-message-helpers": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
- "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
- "dev": true
- },
- "postcss-modules-extract-imports": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz",
- "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=",
- "requires": {
- "postcss": "^6.0.1"
- }
- },
- "postcss-modules-local-by-default": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
- "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
- "requires": {
- "css-selector-tokenizer": "^0.7.0",
- "postcss": "^6.0.1"
- }
- },
- "postcss-modules-scope": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
- "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
- "requires": {
- "css-selector-tokenizer": "^0.7.0",
- "postcss": "^6.0.1"
- }
- },
- "postcss-modules-values": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
- "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
- "requires": {
- "icss-replace-symbols": "^1.1.0",
- "postcss": "^6.0.1"
- }
- },
- "postcss-reduce-idents": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
- "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
- "dev": true,
- "requires": {
- "postcss": "^5.0.4",
- "postcss-value-parser": "^3.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
- "postcss-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
- "dev": true,
- "requires": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "postcss-value-parser": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
- "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU="
- },
- "postcss-zindex": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
- "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
- "dev": true,
- "requires": {
- "has": "^1.0.1",
- "postcss": "^5.0.4",
- "uniqs": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
- },
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
- },
- "prettier": {
- "version": "1.13.7",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz",
- "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==",
- "dev": true
- },
- "pretty-bytes": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
- "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk="
- },
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
- "dev": true
- },
- "proxy-addr": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
- "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.6.0"
- }
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "public-encrypt": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
- "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
- "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"
- }
- },
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
- "qs": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
- "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
- "dev": true
- },
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
- },
- "querystringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz",
- "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==",
- "dev": true
- },
- "randomatic": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
- "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
- "dev": true,
- "requires": {
- "is-number": "^4.0.0",
- "kind-of": "^6.0.0",
- "math-random": "^1.0.1"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
- }
- },
- "randombytes": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
- "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
- "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==",
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
- },
- "rangy": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rangy/-/rangy-1.3.0.tgz",
- "integrity": "sha1-t8mnCuoF5djNx0qNTIJz1pcnGQQ="
- },
- "raw-body": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": ">= 1.3.1 < 2"
- }
- },
- "setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
- }
- }
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- }
- }
- },
- "read-all-stream": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
- "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0",
- "readable-stream": "^2.0.0"
- }
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "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.1.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
- "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "minimatch": "^3.0.2",
- "readable-stream": "^2.0.2",
- "set-immediate-shim": "^1.0.1"
- }
- },
- "recast": {
- "version": "0.11.23",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
- "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
- "dev": true,
- "requires": {
- "ast-types": "0.9.6",
- "esprima": "~3.1.0",
- "private": "~0.1.5",
- "source-map": "~0.5.0"
- },
- "dependencies": {
- "esprima": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
- "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
- "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
- }
- }
- },
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- }
- },
- "redis": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz",
- "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==",
- "requires": {
- "double-ended-queue": "^2.1.0-0",
- "redis-commands": "^1.2.0",
- "redis-parser": "^2.6.0"
- }
- },
- "redis-commands": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz",
- "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA=="
- },
- "redis-parser": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz",
- "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs="
- },
- "reduce-function-call": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
- "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
- "dev": true,
- "requires": {
- "balanced-match": "^0.4.2"
- },
- "dependencies": {
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
- }
- }
- },
- "regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
- "dev": true
- },
- "regenerator-transform": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
- "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.18.0",
- "babel-types": "^6.19.0",
- "private": "^0.1.6"
- }
- },
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
- "dev": true,
- "requires": {
- "is-equal-shallow": "^0.1.3"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regex-parser": {
- "version": "2.2.9",
- "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.9.tgz",
- "integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==",
- "dev": true
- },
- "regexpu-core": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
- "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
- "dev": true,
- "requires": {
- "regenerate": "^1.2.1",
- "regjsgen": "^0.2.0",
- "regjsparser": "^0.1.4"
- }
- },
- "registry-auth-token": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
- "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
- "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
- "requires": {
- "rc": "^1.0.1"
- }
- },
- "regjsgen": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
- "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
- },
- "regjsparser": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
- "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
- "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="
- }
- }
- },
- "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="
- },
- "repeat-element": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
- },
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "request": {
- "version": "2.87.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
- "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.6.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.1",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.1",
- "har-validator": "~5.0.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.17",
- "oauth-sign": "~0.8.2",
- "performance-now": "^2.1.0",
- "qs": "~6.5.1",
- "safe-buffer": "^5.1.1",
- "tough-cookie": "~2.3.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.1.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
- "dev": true,
- "requires": {
- "ajv": "^5.1.0",
- "har-schema": "^2.0.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
- },
- "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.8.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
- "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.5"
- }
- },
- "resolve-cwd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
- "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
- "requires": {
- "resolve-from": "^3.0.0"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
- },
- "resolve-url-loader": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz",
- "integrity": "sha512-RaEUWgF/B6aTg9VKaOv2o6dfm5f75/lGh8S+SQwoMcBm48WkA2nhLR+V7KEawkxXjU4lLB16IVeHCe7F69nyVw==",
- "dev": true,
- "requires": {
- "adjust-sourcemap-loader": "^1.1.0",
- "camelcase": "^4.1.0",
- "convert-source-map": "^1.5.1",
- "loader-utils": "^1.1.0",
- "lodash.defaults": "^4.0.0",
- "rework": "^1.0.1",
- "rework-visit": "^1.0.0",
- "source-map": "^0.5.7",
- "urix": "^0.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "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
- }
- }
- },
- "resp-modifier": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
- "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
- "dev": true,
- "requires": {
- "debug": "^2.2.0",
- "minimatch": "^3.0.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"
- }
- }
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- },
- "dependencies": {
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.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=="
- },
- "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
- },
- "right-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
- "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
- "requires": {
- "align-text": "^0.1.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "requires": {
- "is-promise": "^2.1.0"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- }
- },
- "rusha": {
- "version": "0.8.13",
- "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz",
- "integrity": "sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo="
- },
- "rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
- "dev": true
- },
- "rxjs": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.2.tgz",
- "integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==",
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "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=="
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "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=="
- },
- "sass-graph": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
- "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "lodash": "^4.0.0",
- "scss-tokenizer": "^0.2.3",
- "yargs": "^7.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "yargs": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
- "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^5.0.0"
- }
- }
- }
- },
- "sass-loader": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz",
- "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==",
- "dev": true,
- "requires": {
- "clone-deep": "^2.0.1",
- "loader-utils": "^1.0.1",
- "lodash.tail": "^4.1.1",
- "neo-async": "^2.5.0",
- "pify": "^3.0.0"
- }
- },
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
- },
- "schema-utils": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
- "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
- "dev": true,
- "requires": {
- "ajv": "^5.0.0"
- }
- },
- "scss-tokenizer": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
- "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
- "dev": true,
- "requires": {
- "js-base64": "^2.1.8",
- "source-map": "^0.4.2"
- },
- "dependencies": {
- "source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- }
- }
- },
- "seek-bzip": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
- "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
- "dev": true,
- "requires": {
- "commander": "~2.8.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "dev": true,
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
- }
- }
- },
- "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.3",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz",
- "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==",
- "dev": true,
- "requires": {
- "node-forge": "0.7.5"
- }
- },
- "semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
- },
- "semver-diff": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
- "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "semver-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
- "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
- "dev": true
- },
- "semver-truncate": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
- "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
- "dev": true,
- "requires": {
- "semver": "^5.3.0"
- }
- },
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "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.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "serialize-javascript": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
- "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
- "dev": true
- },
- "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"
- }
- }
- }
- },
- "serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
- }
- },
- "server-destroy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
- "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
- "dev": true
- },
- "serviceworker-cache-polyfill": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz",
- "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves="
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
- },
- "set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
- "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=",
- "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="
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shallow-clone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
- "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.1",
- "kind-of": "^5.0.0",
- "mixin-object": "^2.0.1"
- },
- "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
- }
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "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.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- },
- "slide": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
- "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc="
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "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==",
- "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=",
- "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=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- }
- }
- },
- "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==",
- "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=",
- "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==",
- "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==",
- "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==",
- "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==",
- "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=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "sntp": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
- "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
- "dev": true,
- "requires": {
- "hoek": "2.x.x"
- }
- },
- "socket.io": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
- "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
- "requires": {
- "debug": "~3.1.0",
- "engine.io": "~3.2.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.1.1",
- "socket.io-parser": "~3.2.0"
- }
- },
- "socket.io-adapter": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
- "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
- },
- "socket.io-client": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
- "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
- "requires": {
- "backo2": "1.0.2",
- "base64-arraybuffer": "0.1.5",
- "component-bind": "1.0.0",
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "engine.io-client": "~3.2.0",
- "has-binary2": "~1.0.2",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "object-component": "0.0.3",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "socket.io-parser": "~3.2.0",
- "to-array": "0.1.4"
- }
- },
- "socket.io-parser": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
- "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
- "requires": {
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
- }
- }
- },
- "sockjs": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
- "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
- "dev": true,
- "requires": {
- "faye-websocket": "^0.10.0",
- "uuid": "^3.0.1"
- }
- },
- "sockjs-client": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz",
- "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=",
- "dev": true,
- "requires": {
- "debug": "^2.6.6",
- "eventsource": "0.1.6",
- "faye-websocket": "~0.11.0",
- "inherits": "^2.0.1",
- "json3": "^3.3.2",
- "url-parse": "^1.1.8"
- },
- "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"
- }
- },
- "faye-websocket": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
- "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- }
- }
- },
- "sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
- "dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
- }
- },
- "sort-keys-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
- "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
- "dev": true,
- "requires": {
- "sort-keys": "^1.0.0"
- }
- },
- "source-list-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
- "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "requires": {
- "atob": "^2.1.1",
- "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.4.18",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- },
- "dependencies": {
- "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-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
- },
- "sparkles": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
- "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
- "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
- "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
- },
- "spdy": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
- "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
- "dev": true,
- "requires": {
- "debug": "^2.6.8",
- "handle-thing": "^1.2.5",
- "http-deceiver": "^1.2.7",
- "safe-buffer": "^5.0.1",
- "select-hose": "^2.0.0",
- "spdy-transport": "^2.0.18"
- },
- "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"
- }
- }
- }
- },
- "spdy-transport": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz",
- "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==",
- "dev": true,
- "requires": {
- "debug": "^2.6.8",
- "detect-node": "^2.0.3",
- "hpack.js": "^2.1.6",
- "obuf": "^1.1.1",
- "readable-stream": "^2.2.9",
- "safe-buffer": "^5.0.1",
- "wbuf": "^1.7.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"
- }
- }
- }
- },
- "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==",
- "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
- },
- "sqlite3": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.1.tgz",
- "integrity": "sha512-i8LtU2fdEGFEt4Kcs7eNjYdGmnAQ8zWlaOv6Esbq/jfVfR0Qbn/1dgVyKebrMc2zN7h3oHsqla9zq7AJ0+34ZA==",
- "requires": {
- "nan": "~2.10.0",
- "node-pre-gyp": "~0.10.1"
- }
- },
- "squeak": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
- "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
- "dev": true,
- "requires": {
- "chalk": "^1.0.0",
- "console-stream": "^0.1.1",
- "lpad-align": "^1.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "sshpk": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
- "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- }
- }
- },
- "ssri": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
- "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- },
- "stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "dev": true
- },
- "stackframe": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz",
- "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==",
- "dev": true
- },
- "stat-mode": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
- "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
- "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=",
- "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=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- },
- "stdout-stream": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
- "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
- },
- "stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "stream-combiner2": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
- "dev": true,
- "requires": {
- "duplexer2": "~0.1.0",
- "readable-stream": "^2.0.2"
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
- "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "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==",
- "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"
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
- "dev": true
- },
- "stream-throttle": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
- "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
- "dev": true,
- "requires": {
- "commander": "^2.2.0",
- "limiter": "^1.0.5"
- }
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "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==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "stringstream": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
- "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "strip-bom-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
- "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
- "dev": true,
- "requires": {
- "first-chunk-stream": "^1.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "strip-dirs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz",
- "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=",
- "dev": true,
- "requires": {
- "chalk": "^1.0.0",
- "get-stdin": "^4.0.1",
- "is-absolute": "^0.1.5",
- "is-natural-number": "^2.0.0",
- "minimist": "^1.1.0",
- "sum-up": "^1.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- },
- "strip-outer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
- "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
- "style-loader": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz",
- "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==",
- "requires": {
- "loader-utils": "^1.1.0",
- "schema-utils": "^0.4.5"
- },
- "dependencies": {
- "ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.1"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
- },
- "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=="
- },
- "schema-utils": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
- "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
- "requires": {
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "sum-up": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
- "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=",
- "dev": true,
- "requires": {
- "chalk": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "sw-precache": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz",
- "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==",
- "requires": {
- "dom-urls": "^1.1.0",
- "es6-promise": "^4.0.5",
- "glob": "^7.1.1",
- "lodash.defaults": "^4.2.0",
- "lodash.template": "^4.4.0",
- "meow": "^3.7.0",
- "mkdirp": "^0.5.1",
- "pretty-bytes": "^4.0.2",
- "sw-toolbox": "^3.4.0",
- "update-notifier": "^2.3.0"
- },
- "dependencies": {
- "lodash.template": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
- "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
- "requires": {
- "lodash._reinterpolate": "~3.0.0",
- "lodash.templatesettings": "^4.0.0"
- }
- },
- "lodash.templatesettings": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
- "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
- "requires": {
- "lodash._reinterpolate": "~3.0.0"
- }
- }
- }
- },
- "sw-precache-webpack-plugin": {
- "version": "0.11.5",
- "resolved": "https://registry.npmjs.org/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.5.tgz",
- "integrity": "sha512-K6E52DbYyzGNXGyv2LhI2Duomr3t/2FFMmnGdHZ1Ruk3ulFHDMASJtg3WpA3CXlWODZx189tTaOIO5mWkSKyVg==",
- "requires": {
- "del": "^3.0.0",
- "sw-precache": "^5.2.1",
- "uglify-es": "^3.3.9"
- },
- "dependencies": {
- "commander": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
- "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA=="
- },
- "uglify-es": {
- "version": "3.3.9",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
- "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
- "requires": {
- "commander": "~2.13.0",
- "source-map": "~0.6.1"
- }
- }
- }
- },
- "sw-toolbox": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz",
- "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=",
- "requires": {
- "path-to-regexp": "^1.0.1",
- "serviceworker-cache-polyfill": "^4.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "path-to-regexp": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
- "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
- "requires": {
- "isarray": "0.0.1"
- }
- }
- }
- },
- "tapable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz",
- "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg=="
- },
- "tar": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
- "dev": true,
- "requires": {
- "block-stream": "*",
- "fstream": "^1.0.2",
- "inherits": "2"
- }
- },
- "tar-stream": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
- "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
- "dev": true,
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.1.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.0",
- "xtend": "^4.0.0"
- }
- },
- "temp-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
- "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
- "dev": true
- },
- "tempfile": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
- "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
- "dev": true,
- "requires": {
- "temp-dir": "^1.0.0",
- "uuid": "^3.0.1"
- }
- },
- "term-size": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
- "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "tfunk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz",
- "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=",
- "dev": true,
- "requires": {
- "chalk": "^1.1.1",
- "object-path": "^0.9.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "through2": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
- "dev": true,
- "requires": {
- "readable-stream": ">=1.0.33-1 <1.1.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "through2-filter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
- "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
- "dev": true,
- "requires": {
- "through2": "~2.0.0",
- "xtend": "~4.0.0"
- },
- "dependencies": {
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "thunky": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz",
- "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=",
- "dev": true
- },
- "time-stamp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
- "dev": true
- },
- "timed-out": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
- "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
- "dev": true
- },
- "timers-browserify": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
- "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-absolute-glob": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
- "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.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"
- }
- }
- }
- },
- "to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
- },
- "to-buffer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
- "dev": true
- },
- "to-fast-properties": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
- "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
- "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=",
- "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=",
- "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==",
- "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=",
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "tough-cookie": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
- "dev": true,
- "requires": {
- "punycode": "^1.4.1"
- }
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
- },
- "trim-repeated": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
- "trim-right": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
- "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
- "dev": true
- },
- "true-case-path": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz",
- "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=",
- "dev": true,
- "requires": {
- "glob": "^6.0.4"
- },
- "dependencies": {
- "glob": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
- "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
- "dev": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
- "ts-loader": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.4.2.tgz",
- "integrity": "sha512-Z3Y1a7A0KZZ1s/mAZkt74l1NAF7Y5xUhD1V9VB8/1eUlUOk8Qa/oo46tO2Uu5kQ3wXypOlbv77lLQySjXEDcdw==",
- "requires": {
- "chalk": "^2.3.0",
- "enhanced-resolve": "^4.0.0",
- "loader-utils": "^1.0.2",
- "micromatch": "^3.1.4",
- "semver": "^5.0.1"
- }
- },
- "tslib": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
- "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
- },
- "tunnel-agent": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
- "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
- "dev": true
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true,
- "optional": true
- },
- "type-is": {
- "version": "1.6.16",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
- "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.18"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "typescript": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
- "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w=="
- },
- "ua-parser-js": {
- "version": "0.7.17",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
- "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
- "dev": true
- },
- "uglify-js": {
- "version": "2.8.29",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
- "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
- "requires": {
- "source-map": "~0.5.1",
- "uglify-to-browserify": "~1.0.0",
- "yargs": "~3.10.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
- },
- "cliui": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
- "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
- "requires": {
- "center-align": "^0.1.1",
- "right-align": "^0.1.1",
- "wordwrap": "0.0.2"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- },
- "yargs": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
- "requires": {
- "camelcase": "^1.0.2",
- "cliui": "^2.1.0",
- "decamelize": "^1.0.0",
- "window-size": "0.1.0"
- }
- }
- }
- },
- "uglify-to-browserify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
- "optional": true
- },
- "uglifyjs-webpack-plugin": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz",
- "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==",
- "dev": true,
- "requires": {
- "cacache": "^10.0.4",
- "find-cache-dir": "^1.0.0",
- "schema-utils": "^0.4.5",
- "serialize-javascript": "^1.4.0",
- "source-map": "^0.6.1",
- "uglify-es": "^3.3.4",
- "webpack-sources": "^1.1.0",
- "worker-farm": "^1.5.2"
- },
- "dependencies": {
- "ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.1"
- }
- },
- "commander": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
- "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "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
- },
- "schema-utils": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
- "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "uglify-es": {
- "version": "3.3.9",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
- "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
- "dev": true,
- "requires": {
- "commander": "~2.13.0",
- "source-map": "~0.6.1"
- }
- }
- }
- },
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
- },
- "unbzip2-stream": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz",
- "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==",
- "dev": true,
- "requires": {
- "buffer": "^3.0.1",
- "through": "^2.3.6"
- }
- },
- "union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
- }
- },
- "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
- },
- "unique-filename": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
- "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
- "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unique-stream": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
- "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
- "dev": true,
- "requires": {
- "json-stable-stringify": "^1.0.0",
- "through2-filter": "^2.0.0"
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
- "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
- "requires": {
- "crypto-random-string": "^1.0.0"
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "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=",
- "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=",
- "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=",
- "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="
- }
- }
- },
- "unzip-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
- "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
- "dev": true
- },
- "upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw=="
- },
- "update-notifier": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
- "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
- "requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
- "dev": true
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "requires": {
- "punycode": "^2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- }
- }
- },
- "urijs": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz",
- "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg=="
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "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="
- }
- }
- },
- "url-parse": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz",
- "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.0.0",
- "requires-port": "^1.0.0"
- }
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "requires": {
- "prepend-http": "^1.0.1"
- }
- },
- "url-regex": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz",
- "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=",
- "dev": true,
- "requires": {
- "ip-regex": "^1.0.1"
- }
- },
- "url-to-options": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
- "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
- "dev": true
- },
- "use": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
- "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
- },
- "v8-compile-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz",
- "integrity": "sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg=="
- },
- "vali-date": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
- "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
- "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- },
- "vendors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
- "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==",
- "dev": true
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- }
- }
- },
- "vinyl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
- "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
- "dev": true,
- "requires": {
- "clone": "^1.0.0",
- "clone-stats": "^0.0.1",
- "replace-ext": "0.0.1"
- },
- "dependencies": {
- "replace-ext": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
- "dev": true
- }
- }
- },
- "vinyl-assign": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz",
- "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "vinyl-fs": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
- "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
- "dev": true,
- "requires": {
- "duplexify": "^3.2.0",
- "glob-stream": "^5.3.2",
- "graceful-fs": "^4.0.0",
- "gulp-sourcemaps": "1.6.0",
- "is-valid-glob": "^0.3.0",
- "lazystream": "^1.0.0",
- "lodash.isequal": "^4.0.0",
- "merge-stream": "^1.0.0",
- "mkdirp": "^0.5.0",
- "object-assign": "^4.0.0",
- "readable-stream": "^2.0.4",
- "strip-bom": "^2.0.0",
- "strip-bom-stream": "^1.0.0",
- "through2": "^2.0.0",
- "through2-filter": "^2.0.0",
- "vali-date": "^1.0.0",
- "vinyl": "^1.0.0"
- },
- "dependencies": {
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "vm-browserify": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "requires": {
- "indexof": "0.0.1"
- }
- },
- "vue": {
- "version": "2.5.16",
- "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz",
- "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==",
- "dev": true
- },
- "vue-hot-reload-api": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz",
- "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==",
- "dev": true
- },
- "vue-loader": {
- "version": "13.7.2",
- "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.2.tgz",
- "integrity": "sha512-pgFWFsUjYO1v+J+3r7K0Q4lCp0eOyI24/q9j+cCudWyCTjgpjpcAa1MdwjlDUUettt9xkkUBbQ9fkAN1NC8t9w==",
- "dev": true,
- "requires": {
- "consolidate": "^0.14.0",
- "hash-sum": "^1.0.2",
- "loader-utils": "^1.1.0",
- "lru-cache": "^4.1.1",
- "postcss": "^6.0.8",
- "postcss-load-config": "^1.1.0",
- "postcss-selector-parser": "^2.0.0",
- "prettier": "^1.7.0",
- "resolve": "^1.4.0",
- "source-map": "^0.6.1",
- "vue-hot-reload-api": "^2.2.0",
- "vue-style-loader": "^3.0.0",
- "vue-template-es2015-compiler": "^1.6.0"
- },
- "dependencies": {
- "cosmiconfig": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
- "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
- "dev": true,
- "requires": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.4.3",
- "minimist": "^1.2.0",
- "object-assign": "^4.1.0",
- "os-homedir": "^1.0.1",
- "parse-json": "^2.2.0",
- "require-from-string": "^1.1.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "postcss-load-config": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
- "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
- "dev": true,
- "requires": {
- "cosmiconfig": "^2.1.0",
- "object-assign": "^4.1.0",
- "postcss-load-options": "^1.2.0",
- "postcss-load-plugins": "^2.3.0"
- }
- },
- "require-from-string": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
- "dev": true
- }
- }
- },
- "vue-style-loader": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz",
- "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==",
- "dev": true,
- "requires": {
- "hash-sum": "^1.0.2",
- "loader-utils": "^1.0.2"
- }
- },
- "vue-template-compiler": {
- "version": "2.5.16",
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz",
- "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==",
- "dev": true,
- "requires": {
- "de-indent": "^1.0.2",
- "he": "^1.1.0"
- }
- },
- "vue-template-es2015-compiler": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz",
- "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==",
- "dev": true
- },
- "ware": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz",
- "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=",
- "dev": true,
- "requires": {
- "wrap-fn": "^0.1.0"
- }
- },
- "watchpack": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
- "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
- "requires": {
- "chokidar": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- }
- },
- "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": "3.12.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
- "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==",
- "requires": {
- "acorn": "^5.0.0",
- "acorn-dynamic-import": "^2.0.0",
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0",
- "async": "^2.1.2",
- "enhanced-resolve": "^3.4.0",
- "escope": "^3.6.0",
- "interpret": "^1.0.0",
- "json-loader": "^0.5.4",
- "json5": "^0.5.1",
- "loader-runner": "^2.3.0",
- "loader-utils": "^1.1.0",
- "memory-fs": "~0.4.1",
- "mkdirp": "~0.5.0",
- "node-libs-browser": "^2.0.0",
- "source-map": "^0.5.3",
- "supports-color": "^4.2.1",
- "tapable": "^0.2.7",
- "uglifyjs-webpack-plugin": "^0.4.6",
- "watchpack": "^1.4.0",
- "webpack-sources": "^1.0.1",
- "yargs": "^8.0.2"
- },
- "dependencies": {
- "ajv": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
- "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.1"
- }
- },
- "enhanced-resolve": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
- "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "object-assign": "^4.0.1",
- "tapable": "^0.2.7"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
- },
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
- },
- "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=="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- },
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "requires": {
- "has-flag": "^2.0.0"
- }
- },
- "tapable": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
- "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI="
- },
- "uglifyjs-webpack-plugin": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
- "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
- "requires": {
- "source-map": "^0.5.6",
- "uglify-js": "^2.8.29",
- "webpack-sources": "^1.0.1"
- }
- }
- }
- },
- "webpack-chunk-hash": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/webpack-chunk-hash/-/webpack-chunk-hash-0.4.0.tgz",
- "integrity": "sha1-a0DDBw+8n/DP4P54HHF0r2x8FqQ=",
- "dev": true
- },
- "webpack-cli": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.0.8.tgz",
- "integrity": "sha512-KnRLJ0BUaYRqrhAMb9dv3gzdmhmgIMKo0FmdsnmfqbPGtLnnZ6tORZAvmmKfr+A0VgiVpqC60Gv7Ofg0R2CHtQ==",
- "requires": {
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "enhanced-resolve": "^4.0.0",
- "global-modules-path": "^2.1.0",
- "import-local": "^1.0.0",
- "inquirer": "^6.0.0",
- "interpret": "^1.1.0",
- "loader-utils": "^1.1.0",
- "supports-color": "^5.4.0",
- "v8-compile-cache": "^2.0.0",
- "yargs": "^11.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "yargs": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
- "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
- }
- },
- "yargs-parser": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
- "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
- "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
- "dev": true,
- "requires": {
- "memory-fs": "~0.4.1",
- "mime": "^1.5.0",
- "path-is-absolute": "^1.0.0",
- "range-parser": "^1.0.3",
- "time-stamp": "^2.0.0"
- },
- "dependencies": {
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
- "time-stamp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
- "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
- "dev": true
- }
- }
- },
- "webpack-merge": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.3.tgz",
- "integrity": "sha512-zxwAIGK7nKdu5CIZL0BjTQoq3elV0t0MfB7rUC1zj668geid52abs6hN/ACwZdK6LeMS8dC9B6WmtF978zH5mg==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.5"
- }
- },
- "webpack-notifier": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.6.0.tgz",
- "integrity": "sha1-/6yOVf+MRpdSuMG7sBGhbxCYbgI=",
- "dev": true,
- "requires": {
- "node-notifier": "^5.1.2",
- "object-assign": "^4.1.0",
- "strip-ansi": "^3.0.1"
- }
- },
- "webpack-sources": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
- "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "websocket-driver": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
- "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
- "dev": true,
- "requires": {
- "http-parser-js": ">=0.4.0",
- "websocket-extensions": ">=0.1.1"
- }
- },
- "websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
- "dev": true
- },
- "whet.extend": {
- "version": "0.9.9",
- "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
- "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
- "dev": true
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "widest-line": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
- "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
- "requires": {
- "string-width": "^2.1.1"
- }
- },
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
- },
- "wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
- },
- "worker-farm": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
- "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "wrap-fn": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz",
- "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=",
- "dev": true,
- "requires": {
- "co": "3.1.0"
- },
- "dependencies": {
- "co": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
- "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
- "dev": true
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write-file-atomic": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
- "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "slide": "^1.1.5"
- }
- },
- "wysihtml": {
- "version": "0.6.0-beta1",
- "resolved": "https://registry.npmjs.org/wysihtml/-/wysihtml-0.6.0-beta1.tgz",
- "integrity": "sha1-j/oHO7Wi8i2NMH90liBboy3RW0Q="
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
- "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
- },
- "xmlhttprequest-ssl": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
- "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
- "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- }
- }
- },
- "yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
- "dev": true,
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "yeast": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
- }
- }
-}
diff --git a/package.json b/package.json
index 899e174..e81ab87 100755..100644
--- a/package.json
+++ b/package.json
@@ -5,47 +5,18 @@
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
"watch-poll": "npm run watch -- --watch-poll",
- "watch-production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --watch --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.18",
- "bootstrap": "^4.1.2",
- "browser-sync": "^2.24.5",
- "browser-sync-webpack-plugin": "2.0.1",
+ "bootstrap": "^4.0.0",
+ "popper.js": "^1.12",
"cross-env": "^5.1",
- "jquery": "^3.3.1",
- "laravel-mix": "^2.1.11",
+ "jquery": "^3.2",
+ "laravel-mix": "^2.0",
"lodash": "^4.17.4",
- "popper.js": "^1.12",
"vue": "^2.5.7"
- },
- "dependencies": {
- "@fortawesome/fontawesome-free": "^5.1.0",
- "autoprefixer": "^8.6.5",
- "bootstrap3-wysihtml5-npm": "^0.3.3-npm.12",
- "css-loader": "^1.0.0",
- "express": "^4.16.3",
- "fastclick": "^1.0.6",
- "ionicons": "^4.2.4",
- "jquery-migrate": "^3.0.1",
- "jquery-slimscroll": "^1.3.8",
- "jquery-ui-bundle": "^1.12.1-migrate",
- "laravel-echo": "^1.4.0",
- "moment": "^2.22.2",
- "openpgp": "^3.0.13",
- "rangy": "^1.3.0",
- "redis": "^2.8.0",
- "socket.io": "^2.1.1",
- "socket.io-client": "^2.1.1",
- "sqlite3": "^4.0.1",
- "style-loader": "^0.21.0",
- "sw-precache-webpack-plugin": "^0.11.5",
- "ts-loader": "^4.4.2",
- "typescript": "^2.9.2",
- "webpack": "^3.11.0",
- "webpack-cli": "^3.0.8"
}
}
diff --git a/phpunit.xml b/phpunit.xml
index 4942aa2..4942aa2 100755..100644
--- a/phpunit.xml
+++ b/phpunit.xml
diff --git a/public/.htaccess b/public/.htaccess
index b75525b..b75525b 100755..100644
--- a/public/.htaccess
+++ b/public/.htaccess
diff --git a/public/0bd0898fc9d907f4b31b968c6e2efa7f.js b/public/0bd0898fc9d907f4b31b968c6e2efa7f.js
deleted file mode 100644
index 7a42989..0000000
--- a/public/0bd0898fc9d907f4b31b968c6e2efa7f.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * First we will load all of this project's JavaScript dependencies which
- * includes Vue and other libraries. It is a great starting point when
- * building robust, powerful web applications using Vue and Laravel.
- */
-
-window.openpgp = require('openpgp');
-window.Vue = require('vue');
-require('./bootstrap');
-require('./setup');
-require('./profile');
-require('./chat'); \ No newline at end of file
diff --git a/public/3fc17c73a369921b5d2a49b8e752592b.js b/public/3fc17c73a369921b5d2a49b8e752592b.js
deleted file mode 100644
index 1b6875f..0000000
--- a/public/3fc17c73a369921b5d2a49b8e752592b.js
+++ /dev/null
@@ -1,30 +0,0 @@
-$('form[keygen]').submit((event) => {
- event.preventDefault();
-
- $('button[type="submit"]').attr("disabled", true).html('Loading...');
-
- var openpgp = window.openpgp;
-
- var options = {
- userIds: [{
- email: $("input#email").val()
- }],
- numBits: 4096,
- passphrase: $("input#password").val()
- };
-
- openpgp.generateKey(options).then((key) => {
- var privateKey = key.privateKeyArmored;
- var publicKey = key.publicKeyArmored;
-
- localStorage.setItem("privkey", privateKey);
-
- var now = new Date();
- var time = now.getTime();
- time += 3600 * 1000;
- now.setTime(time);
- document.cookie = "publickey=" + encodeURI(publicKey.substr(96).slice(0, -35)) + "; expires=" + now.toUTCString() + ";";
-
- $('form[keygen]').unbind('submit').submit();
- });
-}); \ No newline at end of file
diff --git a/public/baf35d07f64e6c38ebec2176b189d346.scss b/public/baf35d07f64e6c38ebec2176b189d346.scss
deleted file mode 100644
index bd5e1a5..0000000
--- a/public/baf35d07f64e6c38ebec2176b189d346.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Fonts
-@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");
-
-// Variables
-@import "variables";
-
-// Bootstrap
-@import "~bootstrap/scss/bootstrap";
-
-// Chat
-@import "chat";
-
-.navbar-laravel {
- background-color: #fff;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
-}
-
-.alert {
- display: none;
-} \ No newline at end of file
diff --git a/public/becf15e26adbe45cab6f048bbbbabf01.js b/public/becf15e26adbe45cab6f048bbbbabf01.js
deleted file mode 100644
index a2259ab..0000000
--- a/public/becf15e26adbe45cab6f048bbbbabf01.js
+++ /dev/null
@@ -1,89 +0,0 @@
-
-/**
- * When source maps are enabled, `style-loader` uses a link element with a data-uri to
- * embed the css on the page. This breaks all relative urls because now they are relative to a
- * bundle instead of the current page.
- *
- * One solution is to only use full urls, but that may be impossible.
- *
- * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
- *
- * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
- *
- */
-
-module.exports = function (css) {
- // get current location
- var location = typeof window !== "undefined" && window.location;
-
- if (!location) {
- throw new Error("fixUrls requires window.location");
- }
-
- // blank or null?
- if (!css || typeof css !== "string") {
- return css;
- }
-
- var baseUrl = location.protocol + "//" + location.host;
- var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");
-
- // convert each url(...)
- /*
- This regular expression is just a way to recursively match brackets within
- a string.
-
- /url\s*\( = Match on the word "url" with any whitespace after it and then a parens
- ( = Start a capturing group
- (?: = Start a non-capturing group
- [^)(] = Match anything that isn't a parentheses
- | = OR
- \( = Match a start parentheses
- (?: = Start another non-capturing groups
- [^)(]+ = Match anything that isn't a parentheses
- | = OR
- \( = Match a start parentheses
- [^)(]* = Match anything that isn't a parentheses
- \) = Match a end parentheses
- ) = End Group
- *\) = Match anything and then a close parens
- ) = Close non-capturing group
- * = Match anything
- ) = Close capturing group
- \) = Match a close parens
-
- /gi = Get all matches, not the first. Be case insensitive.
- */
- var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
- // strip quotes (if they exist)
- var unquotedOrigUrl = origUrl
- .trim()
- .replace(/^"(.*)"$/, function(o, $1){ return $1; })
- .replace(/^'(.*)'$/, function(o, $1){ return $1; });
-
- // already a full url? no change
- if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(unquotedOrigUrl)) {
- return fullMatch;
- }
-
- // convert the url to a full url
- var newUrl;
-
- if (unquotedOrigUrl.indexOf("//") === 0) {
- //TODO: should we add protocol?
- newUrl = unquotedOrigUrl;
- } else if (unquotedOrigUrl.indexOf("/") === 0) {
- // path should be relative to the base url
- newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
- } else {
- // path should be relative to current directory
- newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
- }
-
- // send back the fixed url(...)
- return "url(" + JSON.stringify(newUrl) + ")";
- });
-
- // send back the fixed css
- return fixedCss;
-};
diff --git a/public/css/admin.css b/public/css/admin.css
deleted file mode 100644
index f42bebf..0000000
--- a/public/css/admin.css
+++ /dev/null
@@ -1,165 +0,0 @@
-/*!
- * Bootstrap v3.3.7 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eot?f4769f9bdb7466be65088239c12046d1);src:url(/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eot?f4769f9bdb7466be65088239c12046d1?#iefix) format('embedded-opentype'),url(/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff2?448c34a56d699c29117adc64c43affeb) format('woff2'),url(/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff?fa2772327f55d8198301fdb8bcfc8158) format('woff'),url(/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.ttf?e18bbf611f2a2e43afc071aa2f4e1512) format('truetype'),url(/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.svg?89889688147bd7575d6327160d64e760#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"*"}.glyphicon-plus:before{content:"+"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20AC"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270F"}.glyphicon-glass:before{content:"\E001"}.glyphicon-music:before{content:"\E002"}.glyphicon-search:before{content:"\E003"}.glyphicon-heart:before{content:"\E005"}.glyphicon-star:before{content:"\E006"}.glyphicon-star-empty:before{content:"\E007"}.glyphicon-user:before{content:"\E008"}.glyphicon-film:before{content:"\E009"}.glyphicon-th-large:before{content:"\E010"}.glyphicon-th:before{content:"\E011"}.glyphicon-th-list:before{content:"\E012"}.glyphicon-ok:before{content:"\E013"}.glyphicon-remove:before{content:"\E014"}.glyphicon-zoom-in:before{content:"\E015"}.glyphicon-zoom-out:before{content:"\E016"}.glyphicon-off:before{content:"\E017"}.glyphicon-signal:before{content:"\E018"}.glyphicon-cog:before{content:"\E019"}.glyphicon-trash:before{content:"\E020"}.glyphicon-home:before{content:"\E021"}.glyphicon-file:before{content:"\E022"}.glyphicon-time:before{content:"\E023"}.glyphicon-road:before{content:"\E024"}.glyphicon-download-alt:before{content:"\E025"}.glyphicon-download:before{content:"\E026"}.glyphicon-upload:before{content:"\E027"}.glyphicon-inbox:before{content:"\E028"}.glyphicon-play-circle:before{content:"\E029"}.glyphicon-repeat:before{content:"\E030"}.glyphicon-refresh:before{content:"\E031"}.glyphicon-list-alt:before{content:"\E032"}.glyphicon-lock:before{content:"\E033"}.glyphicon-flag:before{content:"\E034"}.glyphicon-headphones:before{content:"\E035"}.glyphicon-volume-off:before{content:"\E036"}.glyphicon-volume-down:before{content:"\E037"}.glyphicon-volume-up:before{content:"\E038"}.glyphicon-qrcode:before{content:"\E039"}.glyphicon-barcode:before{content:"\E040"}.glyphicon-tag:before{content:"\E041"}.glyphicon-tags:before{content:"\E042"}.glyphicon-book:before{content:"\E043"}.glyphicon-bookmark:before{content:"\E044"}.glyphicon-print:before{content:"\E045"}.glyphicon-camera:before{content:"\E046"}.glyphicon-font:before{content:"\E047"}.glyphicon-bold:before{content:"\E048"}.glyphicon-italic:before{content:"\E049"}.glyphicon-text-height:before{content:"\E050"}.glyphicon-text-width:before{content:"\E051"}.glyphicon-align-left:before{content:"\E052"}.glyphicon-align-center:before{content:"\E053"}.glyphicon-align-right:before{content:"\E054"}.glyphicon-align-justify:before{content:"\E055"}.glyphicon-list:before{content:"\E056"}.glyphicon-indent-left:before{content:"\E057"}.glyphicon-indent-right:before{content:"\E058"}.glyphicon-facetime-video:before{content:"\E059"}.glyphicon-picture:before{content:"\E060"}.glyphicon-map-marker:before{content:"\E062"}.glyphicon-adjust:before{content:"\E063"}.glyphicon-tint:before{content:"\E064"}.glyphicon-edit:before{content:"\E065"}.glyphicon-share:before{content:"\E066"}.glyphicon-check:before{content:"\E067"}.glyphicon-move:before{content:"\E068"}.glyphicon-step-backward:before{content:"\E069"}.glyphicon-fast-backward:before{content:"\E070"}.glyphicon-backward:before{content:"\E071"}.glyphicon-play:before{content:"\E072"}.glyphicon-pause:before{content:"\E073"}.glyphicon-stop:before{content:"\E074"}.glyphicon-forward:before{content:"\E075"}.glyphicon-fast-forward:before{content:"\E076"}.glyphicon-step-forward:before{content:"\E077"}.glyphicon-eject:before{content:"\E078"}.glyphicon-chevron-left:before{content:"\E079"}.glyphicon-chevron-right:before{content:"\E080"}.glyphicon-plus-sign:before{content:"\E081"}.glyphicon-minus-sign:before{content:"\E082"}.glyphicon-remove-sign:before{content:"\E083"}.glyphicon-ok-sign:before{content:"\E084"}.glyphicon-question-sign:before{content:"\E085"}.glyphicon-info-sign:before{content:"\E086"}.glyphicon-screenshot:before{content:"\E087"}.glyphicon-remove-circle:before{content:"\E088"}.glyphicon-ok-circle:before{content:"\E089"}.glyphicon-ban-circle:before{content:"\E090"}.glyphicon-arrow-left:before{content:"\E091"}.glyphicon-arrow-right:before{content:"\E092"}.glyphicon-arrow-up:before{content:"\E093"}.glyphicon-arrow-down:before{content:"\E094"}.glyphicon-share-alt:before{content:"\E095"}.glyphicon-resize-full:before{content:"\E096"}.glyphicon-resize-small:before{content:"\E097"}.glyphicon-exclamation-sign:before{content:"\E101"}.glyphicon-gift:before{content:"\E102"}.glyphicon-leaf:before{content:"\E103"}.glyphicon-fire:before{content:"\E104"}.glyphicon-eye-open:before{content:"\E105"}.glyphicon-eye-close:before{content:"\E106"}.glyphicon-warning-sign:before{content:"\E107"}.glyphicon-plane:before{content:"\E108"}.glyphicon-calendar:before{content:"\E109"}.glyphicon-random:before{content:"\E110"}.glyphicon-comment:before{content:"\E111"}.glyphicon-magnet:before{content:"\E112"}.glyphicon-chevron-up:before{content:"\E113"}.glyphicon-chevron-down:before{content:"\E114"}.glyphicon-retweet:before{content:"\E115"}.glyphicon-shopping-cart:before{content:"\E116"}.glyphicon-folder-close:before{content:"\E117"}.glyphicon-folder-open:before{content:"\E118"}.glyphicon-resize-vertical:before{content:"\E119"}.glyphicon-resize-horizontal:before{content:"\E120"}.glyphicon-hdd:before{content:"\E121"}.glyphicon-bullhorn:before{content:"\E122"}.glyphicon-bell:before{content:"\E123"}.glyphicon-certificate:before{content:"\E124"}.glyphicon-thumbs-up:before{content:"\E125"}.glyphicon-thumbs-down:before{content:"\E126"}.glyphicon-hand-right:before{content:"\E127"}.glyphicon-hand-left:before{content:"\E128"}.glyphicon-hand-up:before{content:"\E129"}.glyphicon-hand-down:before{content:"\E130"}.glyphicon-circle-arrow-right:before{content:"\E131"}.glyphicon-circle-arrow-left:before{content:"\E132"}.glyphicon-circle-arrow-up:before{content:"\E133"}.glyphicon-circle-arrow-down:before{content:"\E134"}.glyphicon-globe:before{content:"\E135"}.glyphicon-wrench:before{content:"\E136"}.glyphicon-tasks:before{content:"\E137"}.glyphicon-filter:before{content:"\E138"}.glyphicon-briefcase:before{content:"\E139"}.glyphicon-fullscreen:before{content:"\E140"}.glyphicon-dashboard:before{content:"\E141"}.glyphicon-paperclip:before{content:"\E142"}.glyphicon-heart-empty:before{content:"\E143"}.glyphicon-link:before{content:"\E144"}.glyphicon-phone:before{content:"\E145"}.glyphicon-pushpin:before{content:"\E146"}.glyphicon-usd:before{content:"\E148"}.glyphicon-gbp:before{content:"\E149"}.glyphicon-sort:before{content:"\E150"}.glyphicon-sort-by-alphabet:before{content:"\E151"}.glyphicon-sort-by-alphabet-alt:before{content:"\E152"}.glyphicon-sort-by-order:before{content:"\E153"}.glyphicon-sort-by-order-alt:before{content:"\E154"}.glyphicon-sort-by-attributes:before{content:"\E155"}.glyphicon-sort-by-attributes-alt:before{content:"\E156"}.glyphicon-unchecked:before{content:"\E157"}.glyphicon-expand:before{content:"\E158"}.glyphicon-collapse-down:before{content:"\E159"}.glyphicon-collapse-up:before{content:"\E160"}.glyphicon-log-in:before{content:"\E161"}.glyphicon-flash:before{content:"\E162"}.glyphicon-log-out:before{content:"\E163"}.glyphicon-new-window:before{content:"\E164"}.glyphicon-record:before{content:"\E165"}.glyphicon-save:before{content:"\E166"}.glyphicon-open:before{content:"\E167"}.glyphicon-saved:before{content:"\E168"}.glyphicon-import:before{content:"\E169"}.glyphicon-export:before{content:"\E170"}.glyphicon-send:before{content:"\E171"}.glyphicon-floppy-disk:before{content:"\E172"}.glyphicon-floppy-saved:before{content:"\E173"}.glyphicon-floppy-remove:before{content:"\E174"}.glyphicon-floppy-save:before{content:"\E175"}.glyphicon-floppy-open:before{content:"\E176"}.glyphicon-credit-card:before{content:"\E177"}.glyphicon-transfer:before{content:"\E178"}.glyphicon-cutlery:before{content:"\E179"}.glyphicon-header:before{content:"\E180"}.glyphicon-compressed:before{content:"\E181"}.glyphicon-earphone:before{content:"\E182"}.glyphicon-phone-alt:before{content:"\E183"}.glyphicon-tower:before{content:"\E184"}.glyphicon-stats:before{content:"\E185"}.glyphicon-sd-video:before{content:"\E186"}.glyphicon-hd-video:before{content:"\E187"}.glyphicon-subtitles:before{content:"\E188"}.glyphicon-sound-stereo:before{content:"\E189"}.glyphicon-sound-dolby:before{content:"\E190"}.glyphicon-sound-5-1:before{content:"\E191"}.glyphicon-sound-6-1:before{content:"\E192"}.glyphicon-sound-7-1:before{content:"\E193"}.glyphicon-copyright-mark:before{content:"\E194"}.glyphicon-registration-mark:before{content:"\E195"}.glyphicon-cloud-download:before{content:"\E197"}.glyphicon-cloud-upload:before{content:"\E198"}.glyphicon-tree-conifer:before{content:"\E199"}.glyphicon-tree-deciduous:before{content:"\E200"}.glyphicon-cd:before{content:"\E201"}.glyphicon-save-file:before{content:"\E202"}.glyphicon-open-file:before{content:"\E203"}.glyphicon-level-up:before{content:"\E204"}.glyphicon-copy:before{content:"\E205"}.glyphicon-paste:before{content:"\E206"}.glyphicon-alert:before{content:"\E209"}.glyphicon-equalizer:before{content:"\E210"}.glyphicon-king:before{content:"\E211"}.glyphicon-queen:before{content:"\E212"}.glyphicon-pawn:before{content:"\E213"}.glyphicon-bishop:before{content:"\E214"}.glyphicon-knight:before{content:"\E215"}.glyphicon-baby-formula:before{content:"\E216"}.glyphicon-tent:before{content:"\26FA"}.glyphicon-blackboard:before{content:"\E218"}.glyphicon-bed:before{content:"\E219"}.glyphicon-apple:before{content:"\F8FF"}.glyphicon-erase:before{content:"\E221"}.glyphicon-hourglass:before{content:"\231B"}.glyphicon-lamp:before{content:"\E223"}.glyphicon-duplicate:before{content:"\E224"}.glyphicon-piggy-bank:before{content:"\E225"}.glyphicon-scissors:before{content:"\E226"}.glyphicon-bitcoin:before{content:"\E227"}.glyphicon-btc:before{content:"\E227"}.glyphicon-xbt:before{content:"\E227"}.glyphicon-yen:before{content:"\A5"}.glyphicon-jpy:before{content:"\A5"}.glyphicon-ruble:before{content:"\20BD"}.glyphicon-rub:before{content:"\20BD"}.glyphicon-scale:before{content:"\E230"}.glyphicon-ice-lolly:before{content:"\E231"}.glyphicon-ice-lolly-tasted:before{content:"\E232"}.glyphicon-education:before{content:"\E233"}.glyphicon-option-horizontal:before{content:"\E234"}.glyphicon-option-vertical:before{content:"\E235"}.glyphicon-menu-hamburger:before{content:"\E236"}.glyphicon-modal-window:before{content:"\E237"}.glyphicon-oil:before{content:"\E238"}.glyphicon-grain:before{content:"\E239"}.glyphicon-sunglasses:before{content:"\E240"}.glyphicon-text-size:before{content:"\E241"}.glyphicon-text-color:before{content:"\E242"}.glyphicon-text-background:before{content:"\E243"}.glyphicon-object-align-top:before{content:"\E244"}.glyphicon-object-align-bottom:before{content:"\E245"}.glyphicon-object-align-horizontal:before{content:"\E246"}.glyphicon-object-align-left:before{content:"\E247"}.glyphicon-object-align-vertical:before{content:"\E248"}.glyphicon-object-align-right:before{content:"\E249"}.glyphicon-triangle-right:before{content:"\E250"}.glyphicon-triangle-left:before{content:"\E251"}.glyphicon-triangle-bottom:before{content:"\E252"}.glyphicon-triangle-top:before{content:"\E253"}.glyphicon-console:before{content:"\E254"}.glyphicon-superscript:before{content:"\E255"}.glyphicon-subscript:before{content:"\E256"}.glyphicon-menu-left:before{content:"\E257"}.glyphicon-menu-right:before{content:"\E258"}.glyphicon-menu-down:before{content:"\E259"}.glyphicon-menu-up:before{content:"\E260"}*{-webkit-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\A0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out, -webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out, -webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-gradient(linear,left top, right top,color-stop(0, rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,left top, right top,color-stop(0, rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203A'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
-/*# sourceMappingURL=bootstrap.min.css.map *//*!
- * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url(/fonts/vendor/font-awesome/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(/fonts/vendor/font-awesome/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format('embedded-opentype'),url(/fonts/vendor/font-awesome/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format('woff2'),url(/fonts/vendor/font-awesome/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format('woff'),url(/fonts/vendor/font-awesome/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format('truetype'),url(/fonts/vendor/font-awesome/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.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%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -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{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-gear:before,.fa-cog:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-rotate-right:before,.fa-repeat:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-gears:before,.fa-cogs:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-save:before,.fa-floppy-o:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-unsorted:before,.fa-sort:before{content:"\F0DC"}.fa-sort-down:before,.fa-sort-desc:before{content:"\F0DD"}.fa-sort-up:before,.fa-sort-asc:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-legal:before,.fa-gavel:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-flash:before,.fa-bolt:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-paste:before,.fa-clipboard:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-unlink:before,.fa-chain-broken:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\F150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\F151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\F152"}.fa-euro:before,.fa-eur:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-rupee:before,.fa-inr:before{content:"\F156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\F157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\F158"}.fa-won:before,.fa-krw:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-turkish-lira:before,.fa-try:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before{content:"\F19B"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\F19C"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper-pp:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\F1C5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\F1C6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\F1D0"}.fa-ge:before,.fa-empire:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-send:before,.fa-paper-plane:before{content:"\F1D8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-hotel:before,.fa-bed:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-yc:before,.fa-y-combinator:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-tv:before,.fa-television:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.fa-gitlab:before{content:"\F296"}.fa-wpbeginner:before{content:"\F297"}.fa-wpforms:before{content:"\F298"}.fa-envira:before{content:"\F299"}.fa-universal-access:before{content:"\F29A"}.fa-wheelchair-alt:before{content:"\F29B"}.fa-question-circle-o:before{content:"\F29C"}.fa-blind:before{content:"\F29D"}.fa-audio-description:before{content:"\F29E"}.fa-volume-control-phone:before{content:"\F2A0"}.fa-braille:before{content:"\F2A1"}.fa-assistive-listening-systems:before{content:"\F2A2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\F2A3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\F2A4"}.fa-glide:before{content:"\F2A5"}.fa-glide-g:before{content:"\F2A6"}.fa-signing:before,.fa-sign-language:before{content:"\F2A7"}.fa-low-vision:before{content:"\F2A8"}.fa-viadeo:before{content:"\F2A9"}.fa-viadeo-square:before{content:"\F2AA"}.fa-snapchat:before{content:"\F2AB"}.fa-snapchat-ghost:before{content:"\F2AC"}.fa-snapchat-square:before{content:"\F2AD"}.fa-pied-piper:before{content:"\F2AE"}.fa-first-order:before{content:"\F2B0"}.fa-yoast:before{content:"\F2B1"}.fa-themeisle:before{content:"\F2B2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\F2B3"}.fa-fa:before,.fa-font-awesome:before{content:"\F2B4"}.fa-handshake-o:before{content:"\F2B5"}.fa-envelope-open:before{content:"\F2B6"}.fa-envelope-open-o:before{content:"\F2B7"}.fa-linode:before{content:"\F2B8"}.fa-address-book:before{content:"\F2B9"}.fa-address-book-o:before{content:"\F2BA"}.fa-vcard:before,.fa-address-card:before{content:"\F2BB"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\F2BC"}.fa-user-circle:before{content:"\F2BD"}.fa-user-circle-o:before{content:"\F2BE"}.fa-user-o:before{content:"\F2C0"}.fa-id-badge:before{content:"\F2C1"}.fa-drivers-license:before,.fa-id-card:before{content:"\F2C2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\F2C3"}.fa-quora:before{content:"\F2C4"}.fa-free-code-camp:before{content:"\F2C5"}.fa-telegram:before{content:"\F2C6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\F2C7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\F2C8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\F2C9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\F2CA"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\F2CB"}.fa-shower:before{content:"\F2CC"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\F2CD"}.fa-podcast:before{content:"\F2CE"}.fa-window-maximize:before{content:"\F2D0"}.fa-window-minimize:before{content:"\F2D1"}.fa-window-restore:before{content:"\F2D2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\F2D3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\F2D4"}.fa-bandcamp:before{content:"\F2D5"}.fa-grav:before{content:"\F2D6"}.fa-etsy:before{content:"\F2D7"}.fa-imdb:before{content:"\F2D8"}.fa-ravelry:before{content:"\F2D9"}.fa-eercast:before{content:"\F2DA"}.fa-microchip:before{content:"\F2DB"}.fa-snowflake-o:before{content:"\F2DC"}.fa-superpowers:before{content:"\F2DD"}.fa-wpexplorer:before{content:"\F2DE"}.fa-meetup:before{content:"\F2E0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
-@charset "UTF-8";/*!
- Ionicons, v2.0.0
- Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
- https://twitter.com/benjsperry https://twitter.com/ionicframework
- MIT License: https://github.com/driftyco/ionicons
-
- Android-style icons originally built by Google’s
- Material Design Icons: https://github.com/google/material-design-icons
- used under CC BY http://creativecommons.org/licenses/by/4.0/
- Modified icons to fit ionicon’s grid from original.
-*/@font-face{font-family:"Ionicons";src:url(/fonts/vendor/Ionicons/ionicons.eot?2c2ae068be3b089e0a5b59abb1831550);src:url(/fonts/vendor/Ionicons/ionicons.eot?2c2ae068be3b089e0a5b59abb1831550#iefix) format("embedded-opentype"),url(/fonts/vendor/Ionicons/ionicons.ttf?24712f6c47821394fba7942fbb52c3b2) format("truetype"),url(/fonts/vendor/Ionicons/ionicons.woff?05acfdb568b3df49ad31355b19495d4a) format("woff"),url(/fonts/vendor/Ionicons/ionicons.svg?621bd386841f74e0053cb8e67f8a0604#Ionicons) format("svg");font-weight:normal;font-style:normal}.ion,.ionicons,.ion-alert:before,.ion-alert-circled:before,.ion-android-add:before,.ion-android-add-circle:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done:before,.ion-android-done-all:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite:before,.ion-android-favorite-outline:before,.ion-android-film:before,.ion-android-folder:before,.ion-android-folder-open:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone:before,.ion-android-microphone-off:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person:before,.ion-android-person-add:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove:before,.ion-android-remove-circle:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share:before,.ion-android-share-alt:before,.ion-android-star:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace:before,.ion-backspace-outline:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox:before,.ion-chatbox-working:before,.ion-chatboxes:before,.ion-chatbubble:before,.ion-chatbubble-working:before,.ion-chatbubbles:before,.ion-checkmark:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close:before,.ion-close-circled:before,.ion-close-round:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code:before,.ion-code-download:before,.ion-code-working:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document:before,.ion-document-text:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email:before,.ion-email-unread:before,.ion-erlenmeyer-flask:before,.ion-erlenmeyer-flask-bubbles:before,.ion-eye:before,.ion-eye-disabled:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash:before,.ion-flash-off:before,.ion-folder:before,.ion-fork:before,.ion-fork-repo:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy:before,.ion-happy-outline:before,.ion-headphone:before,.ion-heart:before,.ion-heart-broken:before,.ion-help:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information:before,.ion-information-circled:before,.ion-ionic:before,.ion-ios-alarm:before,.ion-ios-alarm-outline:before,.ion-ios-albums:before,.ion-ios-albums-outline:before,.ion-ios-americanfootball:before,.ion-ios-americanfootball-outline:before,.ion-ios-analytics:before,.ion-ios-analytics-outline:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at:before,.ion-ios-at-outline:before,.ion-ios-barcode:before,.ion-ios-barcode-outline:before,.ion-ios-baseball:before,.ion-ios-baseball-outline:before,.ion-ios-basketball:before,.ion-ios-basketball-outline:before,.ion-ios-bell:before,.ion-ios-bell-outline:before,.ion-ios-body:before,.ion-ios-body-outline:before,.ion-ios-bolt:before,.ion-ios-bolt-outline:before,.ion-ios-book:before,.ion-ios-book-outline:before,.ion-ios-bookmarks:before,.ion-ios-bookmarks-outline:before,.ion-ios-box:before,.ion-ios-box-outline:before,.ion-ios-briefcase:before,.ion-ios-briefcase-outline:before,.ion-ios-browsers:before,.ion-ios-browsers-outline:before,.ion-ios-calculator:before,.ion-ios-calculator-outline:before,.ion-ios-calendar:before,.ion-ios-calendar-outline:before,.ion-ios-camera:before,.ion-ios-camera-outline:before,.ion-ios-cart:before,.ion-ios-cart-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatbubble:before,.ion-ios-chatbubble-outline:before,.ion-ios-checkmark:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock:before,.ion-ios-clock-outline:before,.ion-ios-close:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-cloud:before,.ion-ios-cloud-download:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloudy:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-outline:before,.ion-ios-cog:before,.ion-ios-cog-outline:before,.ion-ios-color-filter:before,.ion-ios-color-filter-outline:before,.ion-ios-color-wand:before,.ion-ios-color-wand-outline:before,.ion-ios-compose:before,.ion-ios-compose-outline:before,.ion-ios-contact:before,.ion-ios-contact-outline:before,.ion-ios-copy:before,.ion-ios-copy-outline:before,.ion-ios-crop:before,.ion-ios-crop-strong:before,.ion-ios-download:before,.ion-ios-download-outline:before,.ion-ios-drag:before,.ion-ios-email:before,.ion-ios-email-outline:before,.ion-ios-eye:before,.ion-ios-eye-outline:before,.ion-ios-fastforward:before,.ion-ios-fastforward-outline:before,.ion-ios-filing:before,.ion-ios-filing-outline:before,.ion-ios-film:before,.ion-ios-film-outline:before,.ion-ios-flag:before,.ion-ios-flag-outline:before,.ion-ios-flame:before,.ion-ios-flame-outline:before,.ion-ios-flask:before,.ion-ios-flask-outline:before,.ion-ios-flower:before,.ion-ios-flower-outline:before,.ion-ios-folder:before,.ion-ios-folder-outline:before,.ion-ios-football:before,.ion-ios-football-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-b:before,.ion-ios-game-controller-b-outline:before,.ion-ios-gear:before,.ion-ios-gear-outline:before,.ion-ios-glasses:before,.ion-ios-glasses-outline:before,.ion-ios-grid-view:before,.ion-ios-grid-view-outline:before,.ion-ios-heart:before,.ion-ios-heart-outline:before,.ion-ios-help:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-home:before,.ion-ios-home-outline:before,.ion-ios-infinite:before,.ion-ios-infinite-outline:before,.ion-ios-information:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-ionic-outline:before,.ion-ios-keypad:before,.ion-ios-keypad-outline:before,.ion-ios-lightbulb:before,.ion-ios-lightbulb-outline:before,.ion-ios-list:before,.ion-ios-list-outline:before,.ion-ios-location:before,.ion-ios-location-outline:before,.ion-ios-locked:before,.ion-ios-locked-outline:before,.ion-ios-loop:before,.ion-ios-loop-strong:before,.ion-ios-medical:before,.ion-ios-medical-outline:before,.ion-ios-medkit:before,.ion-ios-medkit-outline:before,.ion-ios-mic:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-minus:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-monitor:before,.ion-ios-monitor-outline:before,.ion-ios-moon:before,.ion-ios-moon-outline:before,.ion-ios-more:before,.ion-ios-more-outline:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate:before,.ion-ios-navigate-outline:before,.ion-ios-nutrition:before,.ion-ios-nutrition-outline:before,.ion-ios-paper:before,.ion-ios-paper-outline:before,.ion-ios-paperplane:before,.ion-ios-paperplane-outline:before,.ion-ios-partlysunny:before,.ion-ios-partlysunny-outline:before,.ion-ios-pause:before,.ion-ios-pause-outline:before,.ion-ios-paw:before,.ion-ios-paw-outline:before,.ion-ios-people:before,.ion-ios-people-outline:before,.ion-ios-person:before,.ion-ios-person-outline:before,.ion-ios-personadd:before,.ion-ios-personadd-outline:before,.ion-ios-photos:before,.ion-ios-photos-outline:before,.ion-ios-pie:before,.ion-ios-pie-outline:before,.ion-ios-pint:before,.ion-ios-pint-outline:before,.ion-ios-play:before,.ion-ios-play-outline:before,.ion-ios-plus:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetags:before,.ion-ios-pricetags-outline:before,.ion-ios-printer:before,.ion-ios-printer-outline:before,.ion-ios-pulse:before,.ion-ios-pulse-strong:before,.ion-ios-rainy:before,.ion-ios-rainy-outline:before,.ion-ios-recording:before,.ion-ios-recording-outline:before,.ion-ios-redo:before,.ion-ios-redo-outline:before,.ion-ios-refresh:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-reload:before,.ion-ios-reverse-camera:before,.ion-ios-reverse-camera-outline:before,.ion-ios-rewind:before,.ion-ios-rewind-outline:before,.ion-ios-rose:before,.ion-ios-rose-outline:before,.ion-ios-search:before,.ion-ios-search-strong:before,.ion-ios-settings:before,.ion-ios-settings-strong:before,.ion-ios-shuffle:before,.ion-ios-shuffle-strong:before,.ion-ios-skipbackward:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipforward:before,.ion-ios-skipforward-outline:before,.ion-ios-snowy:before,.ion-ios-speedometer:before,.ion-ios-speedometer-outline:before,.ion-ios-star:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-stopwatch:before,.ion-ios-stopwatch-outline:before,.ion-ios-sunny:before,.ion-ios-sunny-outline:before,.ion-ios-telephone:before,.ion-ios-telephone-outline:before,.ion-ios-tennisball:before,.ion-ios-tennisball-outline:before,.ion-ios-thunderstorm:before,.ion-ios-thunderstorm-outline:before,.ion-ios-time:before,.ion-ios-time-outline:before,.ion-ios-timer:before,.ion-ios-timer-outline:before,.ion-ios-toggle:before,.ion-ios-toggle-outline:before,.ion-ios-trash:before,.ion-ios-trash-outline:before,.ion-ios-undo:before,.ion-ios-undo-outline:before,.ion-ios-unlocked:before,.ion-ios-unlocked-outline:before,.ion-ios-upload:before,.ion-ios-upload-outline:before,.ion-ios-videocam:before,.ion-ios-videocam-outline:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass:before,.ion-ios-wineglass-outline:before,.ion-ios-world:before,.ion-ios-world-outline:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon:before,.ion-navicon-round:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person:before,.ion-person-add:before,.ion-person-stalker:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply:before,.ion-reply-all:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad:before,.ion-sad-outline:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android:before,.ion-social-android-outline:before,.ion-social-angular:before,.ion-social-angular-outline:before,.ion-social-apple:before,.ion-social-apple-outline:before,.ion-social-bitcoin:before,.ion-social-bitcoin-outline:before,.ion-social-buffer:before,.ion-social-buffer-outline:before,.ion-social-chrome:before,.ion-social-chrome-outline:before,.ion-social-codepen:before,.ion-social-codepen-outline:before,.ion-social-css3:before,.ion-social-css3-outline:before,.ion-social-designernews:before,.ion-social-designernews-outline:before,.ion-social-dribbble:before,.ion-social-dribbble-outline:before,.ion-social-dropbox:before,.ion-social-dropbox-outline:before,.ion-social-euro:before,.ion-social-euro-outline:before,.ion-social-facebook:before,.ion-social-facebook-outline:before,.ion-social-foursquare:before,.ion-social-foursquare-outline:before,.ion-social-freebsd-devil:before,.ion-social-github:before,.ion-social-github-outline:before,.ion-social-google:before,.ion-social-google-outline:before,.ion-social-googleplus:before,.ion-social-googleplus-outline:before,.ion-social-hackernews:before,.ion-social-hackernews-outline:before,.ion-social-html5:before,.ion-social-html5-outline:before,.ion-social-instagram:before,.ion-social-instagram-outline:before,.ion-social-javascript:before,.ion-social-javascript-outline:before,.ion-social-linkedin:before,.ion-social-linkedin-outline:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest:before,.ion-social-pinterest-outline:before,.ion-social-python:before,.ion-social-reddit:before,.ion-social-reddit-outline:before,.ion-social-rss:before,.ion-social-rss-outline:before,.ion-social-sass:before,.ion-social-skype:before,.ion-social-skype-outline:before,.ion-social-snapchat:before,.ion-social-snapchat-outline:before,.ion-social-tumblr:before,.ion-social-tumblr-outline:before,.ion-social-tux:before,.ion-social-twitch:before,.ion-social-twitch-outline:before,.ion-social-twitter:before,.ion-social-twitter-outline:before,.ion-social-usd:before,.ion-social-usd-outline:before,.ion-social-vimeo:before,.ion-social-vimeo-outline:before,.ion-social-whatsapp:before,.ion-social-whatsapp-outline:before,.ion-social-windows:before,.ion-social-windows-outline:before,.ion-social-wordpress:before,.ion-social-wordpress-outline:before,.ion-social-yahoo:before,.ion-social-yahoo-outline:before,.ion-social-yen:before,.ion-social-yen-outline:before,.ion-social-youtube:before,.ion-social-youtube-outline:before,.ion-soup-can:before,.ion-soup-can-outline:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle:before,.ion-toggle-filled:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt:before,.ion-tshirt-outline:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before{display:inline-block;font-family:"Ionicons";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:"\F101"}.ion-alert-circled:before{content:"\F100"}.ion-android-add:before{content:"\F2C7"}.ion-android-add-circle:before{content:"\F359"}.ion-android-alarm-clock:before{content:"\F35A"}.ion-android-alert:before{content:"\F35B"}.ion-android-apps:before{content:"\F35C"}.ion-android-archive:before{content:"\F2C9"}.ion-android-arrow-back:before{content:"\F2CA"}.ion-android-arrow-down:before{content:"\F35D"}.ion-android-arrow-dropdown:before{content:"\F35F"}.ion-android-arrow-dropdown-circle:before{content:"\F35E"}.ion-android-arrow-dropleft:before{content:"\F361"}.ion-android-arrow-dropleft-circle:before{content:"\F360"}.ion-android-arrow-dropright:before{content:"\F363"}.ion-android-arrow-dropright-circle:before{content:"\F362"}.ion-android-arrow-dropup:before{content:"\F365"}.ion-android-arrow-dropup-circle:before{content:"\F364"}.ion-android-arrow-forward:before{content:"\F30F"}.ion-android-arrow-up:before{content:"\F366"}.ion-android-attach:before{content:"\F367"}.ion-android-bar:before{content:"\F368"}.ion-android-bicycle:before{content:"\F369"}.ion-android-boat:before{content:"\F36A"}.ion-android-bookmark:before{content:"\F36B"}.ion-android-bulb:before{content:"\F36C"}.ion-android-bus:before{content:"\F36D"}.ion-android-calendar:before{content:"\F2D1"}.ion-android-call:before{content:"\F2D2"}.ion-android-camera:before{content:"\F2D3"}.ion-android-cancel:before{content:"\F36E"}.ion-android-car:before{content:"\F36F"}.ion-android-cart:before{content:"\F370"}.ion-android-chat:before{content:"\F2D4"}.ion-android-checkbox:before{content:"\F374"}.ion-android-checkbox-blank:before{content:"\F371"}.ion-android-checkbox-outline:before{content:"\F373"}.ion-android-checkbox-outline-blank:before{content:"\F372"}.ion-android-checkmark-circle:before{content:"\F375"}.ion-android-clipboard:before{content:"\F376"}.ion-android-close:before{content:"\F2D7"}.ion-android-cloud:before{content:"\F37A"}.ion-android-cloud-circle:before{content:"\F377"}.ion-android-cloud-done:before{content:"\F378"}.ion-android-cloud-outline:before{content:"\F379"}.ion-android-color-palette:before{content:"\F37B"}.ion-android-compass:before{content:"\F37C"}.ion-android-contact:before{content:"\F2D8"}.ion-android-contacts:before{content:"\F2D9"}.ion-android-contract:before{content:"\F37D"}.ion-android-create:before{content:"\F37E"}.ion-android-delete:before{content:"\F37F"}.ion-android-desktop:before{content:"\F380"}.ion-android-document:before{content:"\F381"}.ion-android-done:before{content:"\F383"}.ion-android-done-all:before{content:"\F382"}.ion-android-download:before{content:"\F2DD"}.ion-android-drafts:before{content:"\F384"}.ion-android-exit:before{content:"\F385"}.ion-android-expand:before{content:"\F386"}.ion-android-favorite:before{content:"\F388"}.ion-android-favorite-outline:before{content:"\F387"}.ion-android-film:before{content:"\F389"}.ion-android-folder:before{content:"\F2E0"}.ion-android-folder-open:before{content:"\F38A"}.ion-android-funnel:before{content:"\F38B"}.ion-android-globe:before{content:"\F38C"}.ion-android-hand:before{content:"\F2E3"}.ion-android-hangout:before{content:"\F38D"}.ion-android-happy:before{content:"\F38E"}.ion-android-home:before{content:"\F38F"}.ion-android-image:before{content:"\F2E4"}.ion-android-laptop:before{content:"\F390"}.ion-android-list:before{content:"\F391"}.ion-android-locate:before{content:"\F2E9"}.ion-android-lock:before{content:"\F392"}.ion-android-mail:before{content:"\F2EB"}.ion-android-map:before{content:"\F393"}.ion-android-menu:before{content:"\F394"}.ion-android-microphone:before{content:"\F2EC"}.ion-android-microphone-off:before{content:"\F395"}.ion-android-more-horizontal:before{content:"\F396"}.ion-android-more-vertical:before{content:"\F397"}.ion-android-navigate:before{content:"\F398"}.ion-android-notifications:before{content:"\F39B"}.ion-android-notifications-none:before{content:"\F399"}.ion-android-notifications-off:before{content:"\F39A"}.ion-android-open:before{content:"\F39C"}.ion-android-options:before{content:"\F39D"}.ion-android-people:before{content:"\F39E"}.ion-android-person:before{content:"\F3A0"}.ion-android-person-add:before{content:"\F39F"}.ion-android-phone-landscape:before{content:"\F3A1"}.ion-android-phone-portrait:before{content:"\F3A2"}.ion-android-pin:before{content:"\F3A3"}.ion-android-plane:before{content:"\F3A4"}.ion-android-playstore:before{content:"\F2F0"}.ion-android-print:before{content:"\F3A5"}.ion-android-radio-button-off:before{content:"\F3A6"}.ion-android-radio-button-on:before{content:"\F3A7"}.ion-android-refresh:before{content:"\F3A8"}.ion-android-remove:before{content:"\F2F4"}.ion-android-remove-circle:before{content:"\F3A9"}.ion-android-restaurant:before{content:"\F3AA"}.ion-android-sad:before{content:"\F3AB"}.ion-android-search:before{content:"\F2F5"}.ion-android-send:before{content:"\F2F6"}.ion-android-settings:before{content:"\F2F7"}.ion-android-share:before{content:"\F2F8"}.ion-android-share-alt:before{content:"\F3AC"}.ion-android-star:before{content:"\F2FC"}.ion-android-star-half:before{content:"\F3AD"}.ion-android-star-outline:before{content:"\F3AE"}.ion-android-stopwatch:before{content:"\F2FD"}.ion-android-subway:before{content:"\F3AF"}.ion-android-sunny:before{content:"\F3B0"}.ion-android-sync:before{content:"\F3B1"}.ion-android-textsms:before{content:"\F3B2"}.ion-android-time:before{content:"\F3B3"}.ion-android-train:before{content:"\F3B4"}.ion-android-unlock:before{content:"\F3B5"}.ion-android-upload:before{content:"\F3B6"}.ion-android-volume-down:before{content:"\F3B7"}.ion-android-volume-mute:before{content:"\F3B8"}.ion-android-volume-off:before{content:"\F3B9"}.ion-android-volume-up:before{content:"\F3BA"}.ion-android-walk:before{content:"\F3BB"}.ion-android-warning:before{content:"\F3BC"}.ion-android-watch:before{content:"\F3BD"}.ion-android-wifi:before{content:"\F305"}.ion-aperture:before{content:"\F313"}.ion-archive:before{content:"\F102"}.ion-arrow-down-a:before{content:"\F103"}.ion-arrow-down-b:before{content:"\F104"}.ion-arrow-down-c:before{content:"\F105"}.ion-arrow-expand:before{content:"\F25E"}.ion-arrow-graph-down-left:before{content:"\F25F"}.ion-arrow-graph-down-right:before{content:"\F260"}.ion-arrow-graph-up-left:before{content:"\F261"}.ion-arrow-graph-up-right:before{content:"\F262"}.ion-arrow-left-a:before{content:"\F106"}.ion-arrow-left-b:before{content:"\F107"}.ion-arrow-left-c:before{content:"\F108"}.ion-arrow-move:before{content:"\F263"}.ion-arrow-resize:before{content:"\F264"}.ion-arrow-return-left:before{content:"\F265"}.ion-arrow-return-right:before{content:"\F266"}.ion-arrow-right-a:before{content:"\F109"}.ion-arrow-right-b:before{content:"\F10A"}.ion-arrow-right-c:before{content:"\F10B"}.ion-arrow-shrink:before{content:"\F267"}.ion-arrow-swap:before{content:"\F268"}.ion-arrow-up-a:before{content:"\F10C"}.ion-arrow-up-b:before{content:"\F10D"}.ion-arrow-up-c:before{content:"\F10E"}.ion-asterisk:before{content:"\F314"}.ion-at:before{content:"\F10F"}.ion-backspace:before{content:"\F3BF"}.ion-backspace-outline:before{content:"\F3BE"}.ion-bag:before{content:"\F110"}.ion-battery-charging:before{content:"\F111"}.ion-battery-empty:before{content:"\F112"}.ion-battery-full:before{content:"\F113"}.ion-battery-half:before{content:"\F114"}.ion-battery-low:before{content:"\F115"}.ion-beaker:before{content:"\F269"}.ion-beer:before{content:"\F26A"}.ion-bluetooth:before{content:"\F116"}.ion-bonfire:before{content:"\F315"}.ion-bookmark:before{content:"\F26B"}.ion-bowtie:before{content:"\F3C0"}.ion-briefcase:before{content:"\F26C"}.ion-bug:before{content:"\F2BE"}.ion-calculator:before{content:"\F26D"}.ion-calendar:before{content:"\F117"}.ion-camera:before{content:"\F118"}.ion-card:before{content:"\F119"}.ion-cash:before{content:"\F316"}.ion-chatbox:before{content:"\F11B"}.ion-chatbox-working:before{content:"\F11A"}.ion-chatboxes:before{content:"\F11C"}.ion-chatbubble:before{content:"\F11E"}.ion-chatbubble-working:before{content:"\F11D"}.ion-chatbubbles:before{content:"\F11F"}.ion-checkmark:before{content:"\F122"}.ion-checkmark-circled:before{content:"\F120"}.ion-checkmark-round:before{content:"\F121"}.ion-chevron-down:before{content:"\F123"}.ion-chevron-left:before{content:"\F124"}.ion-chevron-right:before{content:"\F125"}.ion-chevron-up:before{content:"\F126"}.ion-clipboard:before{content:"\F127"}.ion-clock:before{content:"\F26E"}.ion-close:before{content:"\F12A"}.ion-close-circled:before{content:"\F128"}.ion-close-round:before{content:"\F129"}.ion-closed-captioning:before{content:"\F317"}.ion-cloud:before{content:"\F12B"}.ion-code:before{content:"\F271"}.ion-code-download:before{content:"\F26F"}.ion-code-working:before{content:"\F270"}.ion-coffee:before{content:"\F272"}.ion-compass:before{content:"\F273"}.ion-compose:before{content:"\F12C"}.ion-connection-bars:before{content:"\F274"}.ion-contrast:before{content:"\F275"}.ion-crop:before{content:"\F3C1"}.ion-cube:before{content:"\F318"}.ion-disc:before{content:"\F12D"}.ion-document:before{content:"\F12F"}.ion-document-text:before{content:"\F12E"}.ion-drag:before{content:"\F130"}.ion-earth:before{content:"\F276"}.ion-easel:before{content:"\F3C2"}.ion-edit:before{content:"\F2BF"}.ion-egg:before{content:"\F277"}.ion-eject:before{content:"\F131"}.ion-email:before{content:"\F132"}.ion-email-unread:before{content:"\F3C3"}.ion-erlenmeyer-flask:before{content:"\F3C5"}.ion-erlenmeyer-flask-bubbles:before{content:"\F3C4"}.ion-eye:before{content:"\F133"}.ion-eye-disabled:before{content:"\F306"}.ion-female:before{content:"\F278"}.ion-filing:before{content:"\F134"}.ion-film-marker:before{content:"\F135"}.ion-fireball:before{content:"\F319"}.ion-flag:before{content:"\F279"}.ion-flame:before{content:"\F31A"}.ion-flash:before{content:"\F137"}.ion-flash-off:before{content:"\F136"}.ion-folder:before{content:"\F139"}.ion-fork:before{content:"\F27A"}.ion-fork-repo:before{content:"\F2C0"}.ion-forward:before{content:"\F13A"}.ion-funnel:before{content:"\F31B"}.ion-gear-a:before{content:"\F13D"}.ion-gear-b:before{content:"\F13E"}.ion-grid:before{content:"\F13F"}.ion-hammer:before{content:"\F27B"}.ion-happy:before{content:"\F31C"}.ion-happy-outline:before{content:"\F3C6"}.ion-headphone:before{content:"\F140"}.ion-heart:before{content:"\F141"}.ion-heart-broken:before{content:"\F31D"}.ion-help:before{content:"\F143"}.ion-help-buoy:before{content:"\F27C"}.ion-help-circled:before{content:"\F142"}.ion-home:before{content:"\F144"}.ion-icecream:before{content:"\F27D"}.ion-image:before{content:"\F147"}.ion-images:before{content:"\F148"}.ion-information:before{content:"\F14A"}.ion-information-circled:before{content:"\F149"}.ion-ionic:before{content:"\F14B"}.ion-ios-alarm:before{content:"\F3C8"}.ion-ios-alarm-outline:before{content:"\F3C7"}.ion-ios-albums:before{content:"\F3CA"}.ion-ios-albums-outline:before{content:"\F3C9"}.ion-ios-americanfootball:before{content:"\F3CC"}.ion-ios-americanfootball-outline:before{content:"\F3CB"}.ion-ios-analytics:before{content:"\F3CE"}.ion-ios-analytics-outline:before{content:"\F3CD"}.ion-ios-arrow-back:before{content:"\F3CF"}.ion-ios-arrow-down:before{content:"\F3D0"}.ion-ios-arrow-forward:before{content:"\F3D1"}.ion-ios-arrow-left:before{content:"\F3D2"}.ion-ios-arrow-right:before{content:"\F3D3"}.ion-ios-arrow-thin-down:before{content:"\F3D4"}.ion-ios-arrow-thin-left:before{content:"\F3D5"}.ion-ios-arrow-thin-right:before{content:"\F3D6"}.ion-ios-arrow-thin-up:before{content:"\F3D7"}.ion-ios-arrow-up:before{content:"\F3D8"}.ion-ios-at:before{content:"\F3DA"}.ion-ios-at-outline:before{content:"\F3D9"}.ion-ios-barcode:before{content:"\F3DC"}.ion-ios-barcode-outline:before{content:"\F3DB"}.ion-ios-baseball:before{content:"\F3DE"}.ion-ios-baseball-outline:before{content:"\F3DD"}.ion-ios-basketball:before{content:"\F3E0"}.ion-ios-basketball-outline:before{content:"\F3DF"}.ion-ios-bell:before{content:"\F3E2"}.ion-ios-bell-outline:before{content:"\F3E1"}.ion-ios-body:before{content:"\F3E4"}.ion-ios-body-outline:before{content:"\F3E3"}.ion-ios-bolt:before{content:"\F3E6"}.ion-ios-bolt-outline:before{content:"\F3E5"}.ion-ios-book:before{content:"\F3E8"}.ion-ios-book-outline:before{content:"\F3E7"}.ion-ios-bookmarks:before{content:"\F3EA"}.ion-ios-bookmarks-outline:before{content:"\F3E9"}.ion-ios-box:before{content:"\F3EC"}.ion-ios-box-outline:before{content:"\F3EB"}.ion-ios-briefcase:before{content:"\F3EE"}.ion-ios-briefcase-outline:before{content:"\F3ED"}.ion-ios-browsers:before{content:"\F3F0"}.ion-ios-browsers-outline:before{content:"\F3EF"}.ion-ios-calculator:before{content:"\F3F2"}.ion-ios-calculator-outline:before{content:"\F3F1"}.ion-ios-calendar:before{content:"\F3F4"}.ion-ios-calendar-outline:before{content:"\F3F3"}.ion-ios-camera:before{content:"\F3F6"}.ion-ios-camera-outline:before{content:"\F3F5"}.ion-ios-cart:before{content:"\F3F8"}.ion-ios-cart-outline:before{content:"\F3F7"}.ion-ios-chatboxes:before{content:"\F3FA"}.ion-ios-chatboxes-outline:before{content:"\F3F9"}.ion-ios-chatbubble:before{content:"\F3FC"}.ion-ios-chatbubble-outline:before{content:"\F3FB"}.ion-ios-checkmark:before{content:"\F3FF"}.ion-ios-checkmark-empty:before{content:"\F3FD"}.ion-ios-checkmark-outline:before{content:"\F3FE"}.ion-ios-circle-filled:before{content:"\F400"}.ion-ios-circle-outline:before{content:"\F401"}.ion-ios-clock:before{content:"\F403"}.ion-ios-clock-outline:before{content:"\F402"}.ion-ios-close:before{content:"\F406"}.ion-ios-close-empty:before{content:"\F404"}.ion-ios-close-outline:before{content:"\F405"}.ion-ios-cloud:before{content:"\F40C"}.ion-ios-cloud-download:before{content:"\F408"}.ion-ios-cloud-download-outline:before{content:"\F407"}.ion-ios-cloud-outline:before{content:"\F409"}.ion-ios-cloud-upload:before{content:"\F40B"}.ion-ios-cloud-upload-outline:before{content:"\F40A"}.ion-ios-cloudy:before{content:"\F410"}.ion-ios-cloudy-night:before{content:"\F40E"}.ion-ios-cloudy-night-outline:before{content:"\F40D"}.ion-ios-cloudy-outline:before{content:"\F40F"}.ion-ios-cog:before{content:"\F412"}.ion-ios-cog-outline:before{content:"\F411"}.ion-ios-color-filter:before{content:"\F414"}.ion-ios-color-filter-outline:before{content:"\F413"}.ion-ios-color-wand:before{content:"\F416"}.ion-ios-color-wand-outline:before{content:"\F415"}.ion-ios-compose:before{content:"\F418"}.ion-ios-compose-outline:before{content:"\F417"}.ion-ios-contact:before{content:"\F41A"}.ion-ios-contact-outline:before{content:"\F419"}.ion-ios-copy:before{content:"\F41C"}.ion-ios-copy-outline:before{content:"\F41B"}.ion-ios-crop:before{content:"\F41E"}.ion-ios-crop-strong:before{content:"\F41D"}.ion-ios-download:before{content:"\F420"}.ion-ios-download-outline:before{content:"\F41F"}.ion-ios-drag:before{content:"\F421"}.ion-ios-email:before{content:"\F423"}.ion-ios-email-outline:before{content:"\F422"}.ion-ios-eye:before{content:"\F425"}.ion-ios-eye-outline:before{content:"\F424"}.ion-ios-fastforward:before{content:"\F427"}.ion-ios-fastforward-outline:before{content:"\F426"}.ion-ios-filing:before{content:"\F429"}.ion-ios-filing-outline:before{content:"\F428"}.ion-ios-film:before{content:"\F42B"}.ion-ios-film-outline:before{content:"\F42A"}.ion-ios-flag:before{content:"\F42D"}.ion-ios-flag-outline:before{content:"\F42C"}.ion-ios-flame:before{content:"\F42F"}.ion-ios-flame-outline:before{content:"\F42E"}.ion-ios-flask:before{content:"\F431"}.ion-ios-flask-outline:before{content:"\F430"}.ion-ios-flower:before{content:"\F433"}.ion-ios-flower-outline:before{content:"\F432"}.ion-ios-folder:before{content:"\F435"}.ion-ios-folder-outline:before{content:"\F434"}.ion-ios-football:before{content:"\F437"}.ion-ios-football-outline:before{content:"\F436"}.ion-ios-game-controller-a:before{content:"\F439"}.ion-ios-game-controller-a-outline:before{content:"\F438"}.ion-ios-game-controller-b:before{content:"\F43B"}.ion-ios-game-controller-b-outline:before{content:"\F43A"}.ion-ios-gear:before{content:"\F43D"}.ion-ios-gear-outline:before{content:"\F43C"}.ion-ios-glasses:before{content:"\F43F"}.ion-ios-glasses-outline:before{content:"\F43E"}.ion-ios-grid-view:before{content:"\F441"}.ion-ios-grid-view-outline:before{content:"\F440"}.ion-ios-heart:before{content:"\F443"}.ion-ios-heart-outline:before{content:"\F442"}.ion-ios-help:before{content:"\F446"}.ion-ios-help-empty:before{content:"\F444"}.ion-ios-help-outline:before{content:"\F445"}.ion-ios-home:before{content:"\F448"}.ion-ios-home-outline:before{content:"\F447"}.ion-ios-infinite:before{content:"\F44A"}.ion-ios-infinite-outline:before{content:"\F449"}.ion-ios-information:before{content:"\F44D"}.ion-ios-information-empty:before{content:"\F44B"}.ion-ios-information-outline:before{content:"\F44C"}.ion-ios-ionic-outline:before{content:"\F44E"}.ion-ios-keypad:before{content:"\F450"}.ion-ios-keypad-outline:before{content:"\F44F"}.ion-ios-lightbulb:before{content:"\F452"}.ion-ios-lightbulb-outline:before{content:"\F451"}.ion-ios-list:before{content:"\F454"}.ion-ios-list-outline:before{content:"\F453"}.ion-ios-location:before{content:"\F456"}.ion-ios-location-outline:before{content:"\F455"}.ion-ios-locked:before{content:"\F458"}.ion-ios-locked-outline:before{content:"\F457"}.ion-ios-loop:before{content:"\F45A"}.ion-ios-loop-strong:before{content:"\F459"}.ion-ios-medical:before{content:"\F45C"}.ion-ios-medical-outline:before{content:"\F45B"}.ion-ios-medkit:before{content:"\F45E"}.ion-ios-medkit-outline:before{content:"\F45D"}.ion-ios-mic:before{content:"\F461"}.ion-ios-mic-off:before{content:"\F45F"}.ion-ios-mic-outline:before{content:"\F460"}.ion-ios-minus:before{content:"\F464"}.ion-ios-minus-empty:before{content:"\F462"}.ion-ios-minus-outline:before{content:"\F463"}.ion-ios-monitor:before{content:"\F466"}.ion-ios-monitor-outline:before{content:"\F465"}.ion-ios-moon:before{content:"\F468"}.ion-ios-moon-outline:before{content:"\F467"}.ion-ios-more:before{content:"\F46A"}.ion-ios-more-outline:before{content:"\F469"}.ion-ios-musical-note:before{content:"\F46B"}.ion-ios-musical-notes:before{content:"\F46C"}.ion-ios-navigate:before{content:"\F46E"}.ion-ios-navigate-outline:before{content:"\F46D"}.ion-ios-nutrition:before{content:"\F470"}.ion-ios-nutrition-outline:before{content:"\F46F"}.ion-ios-paper:before{content:"\F472"}.ion-ios-paper-outline:before{content:"\F471"}.ion-ios-paperplane:before{content:"\F474"}.ion-ios-paperplane-outline:before{content:"\F473"}.ion-ios-partlysunny:before{content:"\F476"}.ion-ios-partlysunny-outline:before{content:"\F475"}.ion-ios-pause:before{content:"\F478"}.ion-ios-pause-outline:before{content:"\F477"}.ion-ios-paw:before{content:"\F47A"}.ion-ios-paw-outline:before{content:"\F479"}.ion-ios-people:before{content:"\F47C"}.ion-ios-people-outline:before{content:"\F47B"}.ion-ios-person:before{content:"\F47E"}.ion-ios-person-outline:before{content:"\F47D"}.ion-ios-personadd:before{content:"\F480"}.ion-ios-personadd-outline:before{content:"\F47F"}.ion-ios-photos:before{content:"\F482"}.ion-ios-photos-outline:before{content:"\F481"}.ion-ios-pie:before{content:"\F484"}.ion-ios-pie-outline:before{content:"\F483"}.ion-ios-pint:before{content:"\F486"}.ion-ios-pint-outline:before{content:"\F485"}.ion-ios-play:before{content:"\F488"}.ion-ios-play-outline:before{content:"\F487"}.ion-ios-plus:before{content:"\F48B"}.ion-ios-plus-empty:before{content:"\F489"}.ion-ios-plus-outline:before{content:"\F48A"}.ion-ios-pricetag:before{content:"\F48D"}.ion-ios-pricetag-outline:before{content:"\F48C"}.ion-ios-pricetags:before{content:"\F48F"}.ion-ios-pricetags-outline:before{content:"\F48E"}.ion-ios-printer:before{content:"\F491"}.ion-ios-printer-outline:before{content:"\F490"}.ion-ios-pulse:before{content:"\F493"}.ion-ios-pulse-strong:before{content:"\F492"}.ion-ios-rainy:before{content:"\F495"}.ion-ios-rainy-outline:before{content:"\F494"}.ion-ios-recording:before{content:"\F497"}.ion-ios-recording-outline:before{content:"\F496"}.ion-ios-redo:before{content:"\F499"}.ion-ios-redo-outline:before{content:"\F498"}.ion-ios-refresh:before{content:"\F49C"}.ion-ios-refresh-empty:before{content:"\F49A"}.ion-ios-refresh-outline:before{content:"\F49B"}.ion-ios-reload:before{content:"\F49D"}.ion-ios-reverse-camera:before{content:"\F49F"}.ion-ios-reverse-camera-outline:before{content:"\F49E"}.ion-ios-rewind:before{content:"\F4A1"}.ion-ios-rewind-outline:before{content:"\F4A0"}.ion-ios-rose:before{content:"\F4A3"}.ion-ios-rose-outline:before{content:"\F4A2"}.ion-ios-search:before{content:"\F4A5"}.ion-ios-search-strong:before{content:"\F4A4"}.ion-ios-settings:before{content:"\F4A7"}.ion-ios-settings-strong:before{content:"\F4A6"}.ion-ios-shuffle:before{content:"\F4A9"}.ion-ios-shuffle-strong:before{content:"\F4A8"}.ion-ios-skipbackward:before{content:"\F4AB"}.ion-ios-skipbackward-outline:before{content:"\F4AA"}.ion-ios-skipforward:before{content:"\F4AD"}.ion-ios-skipforward-outline:before{content:"\F4AC"}.ion-ios-snowy:before{content:"\F4AE"}.ion-ios-speedometer:before{content:"\F4B0"}.ion-ios-speedometer-outline:before{content:"\F4AF"}.ion-ios-star:before{content:"\F4B3"}.ion-ios-star-half:before{content:"\F4B1"}.ion-ios-star-outline:before{content:"\F4B2"}.ion-ios-stopwatch:before{content:"\F4B5"}.ion-ios-stopwatch-outline:before{content:"\F4B4"}.ion-ios-sunny:before{content:"\F4B7"}.ion-ios-sunny-outline:before{content:"\F4B6"}.ion-ios-telephone:before{content:"\F4B9"}.ion-ios-telephone-outline:before{content:"\F4B8"}.ion-ios-tennisball:before{content:"\F4BB"}.ion-ios-tennisball-outline:before{content:"\F4BA"}.ion-ios-thunderstorm:before{content:"\F4BD"}.ion-ios-thunderstorm-outline:before{content:"\F4BC"}.ion-ios-time:before{content:"\F4BF"}.ion-ios-time-outline:before{content:"\F4BE"}.ion-ios-timer:before{content:"\F4C1"}.ion-ios-timer-outline:before{content:"\F4C0"}.ion-ios-toggle:before{content:"\F4C3"}.ion-ios-toggle-outline:before{content:"\F4C2"}.ion-ios-trash:before{content:"\F4C5"}.ion-ios-trash-outline:before{content:"\F4C4"}.ion-ios-undo:before{content:"\F4C7"}.ion-ios-undo-outline:before{content:"\F4C6"}.ion-ios-unlocked:before{content:"\F4C9"}.ion-ios-unlocked-outline:before{content:"\F4C8"}.ion-ios-upload:before{content:"\F4CB"}.ion-ios-upload-outline:before{content:"\F4CA"}.ion-ios-videocam:before{content:"\F4CD"}.ion-ios-videocam-outline:before{content:"\F4CC"}.ion-ios-volume-high:before{content:"\F4CE"}.ion-ios-volume-low:before{content:"\F4CF"}.ion-ios-wineglass:before{content:"\F4D1"}.ion-ios-wineglass-outline:before{content:"\F4D0"}.ion-ios-world:before{content:"\F4D3"}.ion-ios-world-outline:before{content:"\F4D2"}.ion-ipad:before{content:"\F1F9"}.ion-iphone:before{content:"\F1FA"}.ion-ipod:before{content:"\F1FB"}.ion-jet:before{content:"\F295"}.ion-key:before{content:"\F296"}.ion-knife:before{content:"\F297"}.ion-laptop:before{content:"\F1FC"}.ion-leaf:before{content:"\F1FD"}.ion-levels:before{content:"\F298"}.ion-lightbulb:before{content:"\F299"}.ion-link:before{content:"\F1FE"}.ion-load-a:before{content:"\F29A"}.ion-load-b:before{content:"\F29B"}.ion-load-c:before{content:"\F29C"}.ion-load-d:before{content:"\F29D"}.ion-location:before{content:"\F1FF"}.ion-lock-combination:before{content:"\F4D4"}.ion-locked:before{content:"\F200"}.ion-log-in:before{content:"\F29E"}.ion-log-out:before{content:"\F29F"}.ion-loop:before{content:"\F201"}.ion-magnet:before{content:"\F2A0"}.ion-male:before{content:"\F2A1"}.ion-man:before{content:"\F202"}.ion-map:before{content:"\F203"}.ion-medkit:before{content:"\F2A2"}.ion-merge:before{content:"\F33F"}.ion-mic-a:before{content:"\F204"}.ion-mic-b:before{content:"\F205"}.ion-mic-c:before{content:"\F206"}.ion-minus:before{content:"\F209"}.ion-minus-circled:before{content:"\F207"}.ion-minus-round:before{content:"\F208"}.ion-model-s:before{content:"\F2C1"}.ion-monitor:before{content:"\F20A"}.ion-more:before{content:"\F20B"}.ion-mouse:before{content:"\F340"}.ion-music-note:before{content:"\F20C"}.ion-navicon:before{content:"\F20E"}.ion-navicon-round:before{content:"\F20D"}.ion-navigate:before{content:"\F2A3"}.ion-network:before{content:"\F341"}.ion-no-smoking:before{content:"\F2C2"}.ion-nuclear:before{content:"\F2A4"}.ion-outlet:before{content:"\F342"}.ion-paintbrush:before{content:"\F4D5"}.ion-paintbucket:before{content:"\F4D6"}.ion-paper-airplane:before{content:"\F2C3"}.ion-paperclip:before{content:"\F20F"}.ion-pause:before{content:"\F210"}.ion-person:before{content:"\F213"}.ion-person-add:before{content:"\F211"}.ion-person-stalker:before{content:"\F212"}.ion-pie-graph:before{content:"\F2A5"}.ion-pin:before{content:"\F2A6"}.ion-pinpoint:before{content:"\F2A7"}.ion-pizza:before{content:"\F2A8"}.ion-plane:before{content:"\F214"}.ion-planet:before{content:"\F343"}.ion-play:before{content:"\F215"}.ion-playstation:before{content:"\F30A"}.ion-plus:before{content:"\F218"}.ion-plus-circled:before{content:"\F216"}.ion-plus-round:before{content:"\F217"}.ion-podium:before{content:"\F344"}.ion-pound:before{content:"\F219"}.ion-power:before{content:"\F2A9"}.ion-pricetag:before{content:"\F2AA"}.ion-pricetags:before{content:"\F2AB"}.ion-printer:before{content:"\F21A"}.ion-pull-request:before{content:"\F345"}.ion-qr-scanner:before{content:"\F346"}.ion-quote:before{content:"\F347"}.ion-radio-waves:before{content:"\F2AC"}.ion-record:before{content:"\F21B"}.ion-refresh:before{content:"\F21C"}.ion-reply:before{content:"\F21E"}.ion-reply-all:before{content:"\F21D"}.ion-ribbon-a:before{content:"\F348"}.ion-ribbon-b:before{content:"\F349"}.ion-sad:before{content:"\F34A"}.ion-sad-outline:before{content:"\F4D7"}.ion-scissors:before{content:"\F34B"}.ion-search:before{content:"\F21F"}.ion-settings:before{content:"\F2AD"}.ion-share:before{content:"\F220"}.ion-shuffle:before{content:"\F221"}.ion-skip-backward:before{content:"\F222"}.ion-skip-forward:before{content:"\F223"}.ion-social-android:before{content:"\F225"}.ion-social-android-outline:before{content:"\F224"}.ion-social-angular:before{content:"\F4D9"}.ion-social-angular-outline:before{content:"\F4D8"}.ion-social-apple:before{content:"\F227"}.ion-social-apple-outline:before{content:"\F226"}.ion-social-bitcoin:before{content:"\F2AF"}.ion-social-bitcoin-outline:before{content:"\F2AE"}.ion-social-buffer:before{content:"\F229"}.ion-social-buffer-outline:before{content:"\F228"}.ion-social-chrome:before{content:"\F4DB"}.ion-social-chrome-outline:before{content:"\F4DA"}.ion-social-codepen:before{content:"\F4DD"}.ion-social-codepen-outline:before{content:"\F4DC"}.ion-social-css3:before{content:"\F4DF"}.ion-social-css3-outline:before{content:"\F4DE"}.ion-social-designernews:before{content:"\F22B"}.ion-social-designernews-outline:before{content:"\F22A"}.ion-social-dribbble:before{content:"\F22D"}.ion-social-dribbble-outline:before{content:"\F22C"}.ion-social-dropbox:before{content:"\F22F"}.ion-social-dropbox-outline:before{content:"\F22E"}.ion-social-euro:before{content:"\F4E1"}.ion-social-euro-outline:before{content:"\F4E0"}.ion-social-facebook:before{content:"\F231"}.ion-social-facebook-outline:before{content:"\F230"}.ion-social-foursquare:before{content:"\F34D"}.ion-social-foursquare-outline:before{content:"\F34C"}.ion-social-freebsd-devil:before{content:"\F2C4"}.ion-social-github:before{content:"\F233"}.ion-social-github-outline:before{content:"\F232"}.ion-social-google:before{content:"\F34F"}.ion-social-google-outline:before{content:"\F34E"}.ion-social-googleplus:before{content:"\F235"}.ion-social-googleplus-outline:before{content:"\F234"}.ion-social-hackernews:before{content:"\F237"}.ion-social-hackernews-outline:before{content:"\F236"}.ion-social-html5:before{content:"\F4E3"}.ion-social-html5-outline:before{content:"\F4E2"}.ion-social-instagram:before{content:"\F351"}.ion-social-instagram-outline:before{content:"\F350"}.ion-social-javascript:before{content:"\F4E5"}.ion-social-javascript-outline:before{content:"\F4E4"}.ion-social-linkedin:before{content:"\F239"}.ion-social-linkedin-outline:before{content:"\F238"}.ion-social-markdown:before{content:"\F4E6"}.ion-social-nodejs:before{content:"\F4E7"}.ion-social-octocat:before{content:"\F4E8"}.ion-social-pinterest:before{content:"\F2B1"}.ion-social-pinterest-outline:before{content:"\F2B0"}.ion-social-python:before{content:"\F4E9"}.ion-social-reddit:before{content:"\F23B"}.ion-social-reddit-outline:before{content:"\F23A"}.ion-social-rss:before{content:"\F23D"}.ion-social-rss-outline:before{content:"\F23C"}.ion-social-sass:before{content:"\F4EA"}.ion-social-skype:before{content:"\F23F"}.ion-social-skype-outline:before{content:"\F23E"}.ion-social-snapchat:before{content:"\F4EC"}.ion-social-snapchat-outline:before{content:"\F4EB"}.ion-social-tumblr:before{content:"\F241"}.ion-social-tumblr-outline:before{content:"\F240"}.ion-social-tux:before{content:"\F2C5"}.ion-social-twitch:before{content:"\F4EE"}.ion-social-twitch-outline:before{content:"\F4ED"}.ion-social-twitter:before{content:"\F243"}.ion-social-twitter-outline:before{content:"\F242"}.ion-social-usd:before{content:"\F353"}.ion-social-usd-outline:before{content:"\F352"}.ion-social-vimeo:before{content:"\F245"}.ion-social-vimeo-outline:before{content:"\F244"}.ion-social-whatsapp:before{content:"\F4F0"}.ion-social-whatsapp-outline:before{content:"\F4EF"}.ion-social-windows:before{content:"\F247"}.ion-social-windows-outline:before{content:"\F246"}.ion-social-wordpress:before{content:"\F249"}.ion-social-wordpress-outline:before{content:"\F248"}.ion-social-yahoo:before{content:"\F24B"}.ion-social-yahoo-outline:before{content:"\F24A"}.ion-social-yen:before{content:"\F4F2"}.ion-social-yen-outline:before{content:"\F4F1"}.ion-social-youtube:before{content:"\F24D"}.ion-social-youtube-outline:before{content:"\F24C"}.ion-soup-can:before{content:"\F4F4"}.ion-soup-can-outline:before{content:"\F4F3"}.ion-speakerphone:before{content:"\F2B2"}.ion-speedometer:before{content:"\F2B3"}.ion-spoon:before{content:"\F2B4"}.ion-star:before{content:"\F24E"}.ion-stats-bars:before{content:"\F2B5"}.ion-steam:before{content:"\F30B"}.ion-stop:before{content:"\F24F"}.ion-thermometer:before{content:"\F2B6"}.ion-thumbsdown:before{content:"\F250"}.ion-thumbsup:before{content:"\F251"}.ion-toggle:before{content:"\F355"}.ion-toggle-filled:before{content:"\F354"}.ion-transgender:before{content:"\F4F5"}.ion-trash-a:before{content:"\F252"}.ion-trash-b:before{content:"\F253"}.ion-trophy:before{content:"\F356"}.ion-tshirt:before{content:"\F4F7"}.ion-tshirt-outline:before{content:"\F4F6"}.ion-umbrella:before{content:"\F2B7"}.ion-university:before{content:"\F357"}.ion-unlocked:before{content:"\F254"}.ion-upload:before{content:"\F255"}.ion-usb:before{content:"\F2B8"}.ion-videocamera:before{content:"\F256"}.ion-volume-high:before{content:"\F257"}.ion-volume-low:before{content:"\F258"}.ion-volume-medium:before{content:"\F259"}.ion-volume-mute:before{content:"\F25A"}.ion-wand:before{content:"\F358"}.ion-waterdrop:before{content:"\F25B"}.ion-wifi:before{content:"\F25C"}.ion-wineglass:before{content:"\F2B9"}.ion-woman:before{content:"\F25D"}.ion-wrench:before{content:"\F2BA"}.ion-xbox:before{content:"\F30C"}
-svg {
- -ms-touch-action: none;
- touch-action: none;
-}
-
-.jvectormap-container {
- width: 100%;
- height: 100%;
- position: relative;
- overflow: hidden;
- -ms-touch-action: none;
- touch-action: none;
-}
-
-.jvectormap-tip {
- position: absolute;
- display: none;
- border: solid 1px #CDCDCD;
- border-radius: 3px;
- background: #292929;
- color: white;
- font-family: sans-serif, Verdana;
- font-size: smaller;
- padding: 3px;
-}
-
-.jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback {
- position: absolute;
- left: 10px;
- border-radius: 3px;
- background: #292929;
- padding: 3px;
- color: white;
- cursor: pointer;
- line-height: 10px;
- text-align: center;
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
-}
-
-.jvectormap-zoomin, .jvectormap-zoomout {
- width: 10px;
- height: 10px;
-}
-
-.jvectormap-zoomin {
- top: 10px;
-}
-
-.jvectormap-zoomout {
- top: 30px;
-}
-
-.jvectormap-goback {
- bottom: 10px;
- z-index: 1000;
- padding: 6px;
-}
-
-.jvectormap-spinner {
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- background: center no-repeat url(data:image/gif;base64,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);
-}
-
-.jvectormap-legend-title {
- font-weight: bold;
- font-size: 14px;
- text-align: center;
-}
-
-.jvectormap-legend-cnt {
- position: absolute;
-}
-
-.jvectormap-legend-cnt-h {
- bottom: 0;
- right: 0;
-}
-
-.jvectormap-legend-cnt-v {
- top: 0;
- right: 0;
-}
-
-.jvectormap-legend {
- background: black;
- color: white;
- border-radius: 3px;
-}
-
-.jvectormap-legend-cnt-h .jvectormap-legend {
- float: left;
- margin: 0 10px 10px 0;
- padding: 3px 3px 1px 3px;
-}
-
-.jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {
- float: left;
-}
-
-.jvectormap-legend-cnt-v .jvectormap-legend {
- margin: 10px 10px 0 0;
- padding: 3px;
-}
-
-.jvectormap-legend-cnt-h .jvectormap-legend-tick {
- width: 40px;
-}
-
-.jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {
- height: 15px;
-}
-
-.jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {
- height: 20px;
- width: 20px;
- display: inline-block;
- vertical-align: middle;
-}
-
-.jvectormap-legend-tick-text {
- font-size: 12px;
-}
-
-.jvectormap-legend-cnt-h .jvectormap-legend-tick-text {
- text-align: center;
-}
-
-.jvectormap-legend-cnt-v .jvectormap-legend-tick-text {
- display: inline-block;
- vertical-align: middle;
- line-height: 20px;
- padding-left: 3px;
-}/*!
- * AdminLTE v2.4.2
- * Author: Almsaeed Studio
- * Website: Almsaeed Studio <https://adminlte.io>
- * License: Open source - MIT
- * Please visit http://opensource.org/licenses/MIT for more information
- */html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.5);box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url(/images/boxed-bg.jpg?5bbbd344130f0926b70aa3499638a387) repeat fixed}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-webkit-transition:margin .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:margin .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out,-webkit-transform .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\F0C9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\A0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-webkit-transition:width .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:width .3s ease-in-out,-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out,-webkit-transform .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{-webkit-box-shadow:3px 0 8px rgba(0,0,0,0.125);box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:768px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{-webkit-box-shadow:none;box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;-webkit-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg);transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;-webkit-box-shadow:none;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;-webkit-box-shadow:none;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;-webkit-box-shadow:none;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;-webkit-box-shadow:none;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;-webkit-box-shadow:none;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{-webkit-box-shadow:none;box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;transition:-webkit-transform .5s ease-in-out;transition:transform .5s ease-in-out;transition:transform .5s ease-in-out, -webkit-transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;transition:-webkit-transform linear .3s;transition:transform linear .3s;transition:transform linear .3s, -webkit-transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{-webkit-box-shadow:inset 0 0 90px rgba(0,0,0,0.2);box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{-webkit-box-shadow:none !important;box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}}.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;-webkit-box-shadow:none;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;-webkit-box-shadow:none;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{-webkit-box-shadow:none;box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
-
diff --git a/public/css/app.css b/public/css/app.css
deleted file mode 100755
index ebb1437..0000000
--- a/public/css/app.css
+++ /dev/null
@@ -1,10513 +0,0 @@
-@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600);/*!
- * Bootstrap v4.1.2 (https://getbootstrap.com/)
- * Copyright 2011-2018 The Bootstrap Authors
- * Copyright 2011-2018 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-:root {
- --blue: #007bff;
- --indigo: #6610f2;
- --purple: #6f42c1;
- --pink: #e83e8c;
- --red: #dc3545;
- --orange: #fd7e14;
- --yellow: #ffc107;
- --green: #28a745;
- --teal: #20c997;
- --cyan: #17a2b8;
- --white: #fff;
- --gray: #6c757d;
- --gray-dark: #343a40;
- --primary: #007bff;
- --secondary: #6c757d;
- --success: #28a745;
- --info: #17a2b8;
- --warning: #ffc107;
- --danger: #dc3545;
- --light: #f8f9fa;
- --dark: #343a40;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
- --font-family-sans-serif: "Raleway", sans-serif;
- --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-}
-
-*,
-*::before,
-*::after {
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-html {
- font-family: sans-serif;
- line-height: 1.15;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
- -ms-overflow-style: scrollbar;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-@-ms-viewport {
- width: device-width;
-}
-
-article,
-aside,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section {
- display: block;
-}
-
-body {
- margin: 0;
- font-family: "Raleway", sans-serif;
- font-size: 0.9rem;
- font-weight: 400;
- line-height: 1.6;
- color: #212529;
- text-align: left;
- background-color: #f5f8fa;
-}
-
-[tabindex="-1"]:focus {
- outline: 0 !important;
-}
-
-hr {
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
- overflow: visible;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin-top: 0;
- margin-bottom: 0.5rem;
-}
-
-p {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-
-abbr[title],
-abbr[data-original-title] {
- text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- cursor: help;
- border-bottom: 0;
-}
-
-address {
- margin-bottom: 1rem;
- font-style: normal;
- line-height: inherit;
-}
-
-ol,
-ul,
-dl {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-
-ol ol,
-ul ul,
-ol ul,
-ul ol {
- margin-bottom: 0;
-}
-
-dt {
- font-weight: 700;
-}
-
-dd {
- margin-bottom: .5rem;
- margin-left: 0;
-}
-
-blockquote {
- margin: 0 0 1rem;
-}
-
-dfn {
- font-style: italic;
-}
-
-b,
-strong {
- font-weight: bolder;
-}
-
-small {
- font-size: 80%;
-}
-
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -.25em;
-}
-
-sup {
- top: -.5em;
-}
-
-a {
- color: #007bff;
- text-decoration: none;
- background-color: transparent;
- -webkit-text-decoration-skip: objects;
-}
-
-a:hover {
- color: #0056b3;
- text-decoration: underline;
-}
-
-a:not([href]):not([tabindex]) {
- color: inherit;
- text-decoration: none;
-}
-
-a:not([href]):not([tabindex]):hover,
-a:not([href]):not([tabindex]):focus {
- color: inherit;
- text-decoration: none;
-}
-
-a:not([href]):not([tabindex]):focus {
- outline: 0;
-}
-
-pre,
-code,
-kbd,
-samp {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 1em;
-}
-
-pre {
- margin-top: 0;
- margin-bottom: 1rem;
- overflow: auto;
- -ms-overflow-style: scrollbar;
-}
-
-figure {
- margin: 0 0 1rem;
-}
-
-img {
- vertical-align: middle;
- border-style: none;
-}
-
-svg:not(:root) {
- overflow: hidden;
- vertical-align: middle;
-}
-
-table {
- border-collapse: collapse;
-}
-
-caption {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
- color: #6c757d;
- text-align: left;
- caption-side: bottom;
-}
-
-th {
- text-align: inherit;
-}
-
-label {
- display: inline-block;
- margin-bottom: 0.5rem;
-}
-
-button {
- border-radius: 0;
-}
-
-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color;
-}
-
-input,
-button,
-select,
-optgroup,
-textarea {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-button,
-input {
- overflow: visible;
-}
-
-button,
-select {
- text-transform: none;
-}
-
-button,
-html [type="button"],
-[type="reset"],
-[type="submit"] {
- -webkit-appearance: button;
-}
-
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner,
-[type="reset"]::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
- -webkit-appearance: listbox;
-}
-
-textarea {
- overflow: auto;
- resize: vertical;
-}
-
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-
-legend {
- display: block;
- width: 100%;
- max-width: 100%;
- padding: 0;
- margin-bottom: .5rem;
- font-size: 1.5rem;
- line-height: inherit;
- color: inherit;
- white-space: normal;
-}
-
-progress {
- vertical-align: baseline;
-}
-
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-[type="search"] {
- outline-offset: -2px;
- -webkit-appearance: none;
-}
-
-[type="search"]::-webkit-search-cancel-button,
-[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-::-webkit-file-upload-button {
- font: inherit;
- -webkit-appearance: button;
-}
-
-output {
- display: inline-block;
-}
-
-summary {
- display: list-item;
- cursor: pointer;
-}
-
-template {
- display: none;
-}
-
-[hidden] {
- display: none !important;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- margin-bottom: 0.5rem;
- font-family: inherit;
- font-weight: 500;
- line-height: 1.2;
- color: inherit;
-}
-
-h1,
-.h1 {
- font-size: 2.25rem;
-}
-
-h2,
-.h2 {
- font-size: 1.8rem;
-}
-
-h3,
-.h3 {
- font-size: 1.575rem;
-}
-
-h4,
-.h4 {
- font-size: 1.35rem;
-}
-
-h5,
-.h5 {
- font-size: 1.125rem;
-}
-
-h6,
-.h6 {
- font-size: 0.9rem;
-}
-
-.lead {
- font-size: 1.125rem;
- font-weight: 300;
-}
-
-.display-1 {
- font-size: 6rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-.display-2 {
- font-size: 5.5rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-.display-3 {
- font-size: 4.5rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-.display-4 {
- font-size: 3.5rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-hr {
- margin-top: 1rem;
- margin-bottom: 1rem;
- border: 0;
- border-top: 1px solid rgba(0, 0, 0, 0.1);
-}
-
-small,
-.small {
- font-size: 80%;
- font-weight: 400;
-}
-
-mark,
-.mark {
- padding: 0.2em;
- background-color: #fcf8e3;
-}
-
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-
-.list-inline {
- padding-left: 0;
- list-style: none;
-}
-
-.list-inline-item {
- display: inline-block;
-}
-
-.list-inline-item:not(:last-child) {
- margin-right: 0.5rem;
-}
-
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-
-.blockquote {
- margin-bottom: 1rem;
- font-size: 1.125rem;
-}
-
-.blockquote-footer {
- display: block;
- font-size: 80%;
- color: #6c757d;
-}
-
-.blockquote-footer::before {
- content: "\2014 \A0";
-}
-
-.img-fluid {
- max-width: 100%;
- height: auto;
-}
-
-.img-thumbnail {
- padding: 0.25rem;
- background-color: #f5f8fa;
- border: 1px solid #dee2e6;
- border-radius: 0.25rem;
- max-width: 100%;
- height: auto;
-}
-
-.figure {
- display: inline-block;
-}
-
-.figure-img {
- margin-bottom: 0.5rem;
- line-height: 1;
-}
-
-.figure-caption {
- font-size: 90%;
- color: #6c757d;
-}
-
-code {
- font-size: 87.5%;
- color: #e83e8c;
- word-break: break-word;
-}
-
-a > code {
- color: inherit;
-}
-
-kbd {
- padding: 0.2rem 0.4rem;
- font-size: 87.5%;
- color: #fff;
- background-color: #212529;
- border-radius: 0.2rem;
-}
-
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 700;
-}
-
-pre {
- display: block;
- font-size: 87.5%;
- color: #212529;
-}
-
-pre code {
- font-size: inherit;
- color: inherit;
- word-break: normal;
-}
-
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-
-.container {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-@media (min-width: 576px) {
- .container {
- max-width: 540px;
- }
-}
-
-@media (min-width: 768px) {
- .container {
- max-width: 720px;
- }
-}
-
-@media (min-width: 992px) {
- .container {
- max-width: 960px;
- }
-}
-
-@media (min-width: 1200px) {
- .container {
- max-width: 1140px;
- }
-}
-
-.container-fluid {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-.row {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- margin-right: -15px;
- margin-left: -15px;
-}
-
-.no-gutters {
- margin-right: 0;
- margin-left: 0;
-}
-
-.no-gutters > .col,
-.no-gutters > [class*="col-"] {
- padding-right: 0;
- padding-left: 0;
-}
-
-.col-1,
-.col-2,
-.col-3,
-.col-4,
-.col-5,
-.col-6,
-.col-7,
-.col-8,
-.col-9,
-.col-10,
-.col-11,
-.col-12,
-.col,
-.col-auto,
-.col-sm-1,
-.col-sm-2,
-.col-sm-3,
-.col-sm-4,
-.col-sm-5,
-.col-sm-6,
-.col-sm-7,
-.col-sm-8,
-.col-sm-9,
-.col-sm-10,
-.col-sm-11,
-.col-sm-12,
-.col-sm,
-.col-sm-auto,
-.col-md-1,
-.col-md-2,
-.col-md-3,
-.col-md-4,
-.col-md-5,
-.col-md-6,
-.col-md-7,
-.col-md-8,
-.col-md-9,
-.col-md-10,
-.col-md-11,
-.col-md-12,
-.col-md,
-.col-md-auto,
-.col-lg-1,
-.col-lg-2,
-.col-lg-3,
-.col-lg-4,
-.col-lg-5,
-.col-lg-6,
-.col-lg-7,
-.col-lg-8,
-.col-lg-9,
-.col-lg-10,
-.col-lg-11,
-.col-lg-12,
-.col-lg,
-.col-lg-auto,
-.col-xl-1,
-.col-xl-2,
-.col-xl-3,
-.col-xl-4,
-.col-xl-5,
-.col-xl-6,
-.col-xl-7,
-.col-xl-8,
-.col-xl-9,
-.col-xl-10,
-.col-xl-11,
-.col-xl-12,
-.col-xl,
-.col-xl-auto {
- position: relative;
- width: 100%;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px;
-}
-
-.col {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%;
-}
-
-.col-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none;
-}
-
-.col-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333333%;
- flex: 0 0 8.33333333%;
- max-width: 8.33333333%;
-}
-
-.col-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66666667%;
- flex: 0 0 16.66666667%;
- max-width: 16.66666667%;
-}
-
-.col-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
-}
-
-.col-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333333%;
- flex: 0 0 33.33333333%;
- max-width: 33.33333333%;
-}
-
-.col-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66666667%;
- flex: 0 0 41.66666667%;
- max-width: 41.66666667%;
-}
-
-.col-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
-}
-
-.col-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333333%;
- flex: 0 0 58.33333333%;
- max-width: 58.33333333%;
-}
-
-.col-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66666667%;
- flex: 0 0 66.66666667%;
- max-width: 66.66666667%;
-}
-
-.col-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
-}
-
-.col-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333333%;
- flex: 0 0 83.33333333%;
- max-width: 83.33333333%;
-}
-
-.col-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66666667%;
- flex: 0 0 91.66666667%;
- max-width: 91.66666667%;
-}
-
-.col-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
-}
-
-.order-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1;
-}
-
-.order-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13;
-}
-
-.order-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
-}
-
-.order-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
-}
-
-.order-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
-}
-
-.order-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3;
-}
-
-.order-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4;
-}
-
-.order-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5;
-}
-
-.order-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6;
-}
-
-.order-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7;
-}
-
-.order-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8;
-}
-
-.order-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9;
-}
-
-.order-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10;
-}
-
-.order-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11;
-}
-
-.order-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12;
-}
-
-.offset-1 {
- margin-left: 8.33333333%;
-}
-
-.offset-2 {
- margin-left: 16.66666667%;
-}
-
-.offset-3 {
- margin-left: 25%;
-}
-
-.offset-4 {
- margin-left: 33.33333333%;
-}
-
-.offset-5 {
- margin-left: 41.66666667%;
-}
-
-.offset-6 {
- margin-left: 50%;
-}
-
-.offset-7 {
- margin-left: 58.33333333%;
-}
-
-.offset-8 {
- margin-left: 66.66666667%;
-}
-
-.offset-9 {
- margin-left: 75%;
-}
-
-.offset-10 {
- margin-left: 83.33333333%;
-}
-
-.offset-11 {
- margin-left: 91.66666667%;
-}
-
-@media (min-width: 576px) {
- .col-sm {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%;
- }
-
- .col-sm-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none;
- }
-
- .col-sm-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333333%;
- flex: 0 0 8.33333333%;
- max-width: 8.33333333%;
- }
-
- .col-sm-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66666667%;
- flex: 0 0 16.66666667%;
- max-width: 16.66666667%;
- }
-
- .col-sm-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-sm-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333333%;
- flex: 0 0 33.33333333%;
- max-width: 33.33333333%;
- }
-
- .col-sm-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66666667%;
- flex: 0 0 41.66666667%;
- max-width: 41.66666667%;
- }
-
- .col-sm-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-sm-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333333%;
- flex: 0 0 58.33333333%;
- max-width: 58.33333333%;
- }
-
- .col-sm-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66666667%;
- flex: 0 0 66.66666667%;
- max-width: 66.66666667%;
- }
-
- .col-sm-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-sm-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333333%;
- flex: 0 0 83.33333333%;
- max-width: 83.33333333%;
- }
-
- .col-sm-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66666667%;
- flex: 0 0 91.66666667%;
- max-width: 91.66666667%;
- }
-
- .col-sm-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-sm-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1;
- }
-
- .order-sm-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13;
- }
-
- .order-sm-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
- }
-
- .order-sm-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- }
-
- .order-sm-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
- }
-
- .order-sm-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3;
- }
-
- .order-sm-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4;
- }
-
- .order-sm-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5;
- }
-
- .order-sm-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6;
- }
-
- .order-sm-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7;
- }
-
- .order-sm-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8;
- }
-
- .order-sm-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9;
- }
-
- .order-sm-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10;
- }
-
- .order-sm-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11;
- }
-
- .order-sm-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12;
- }
-
- .offset-sm-0 {
- margin-left: 0;
- }
-
- .offset-sm-1 {
- margin-left: 8.33333333%;
- }
-
- .offset-sm-2 {
- margin-left: 16.66666667%;
- }
-
- .offset-sm-3 {
- margin-left: 25%;
- }
-
- .offset-sm-4 {
- margin-left: 33.33333333%;
- }
-
- .offset-sm-5 {
- margin-left: 41.66666667%;
- }
-
- .offset-sm-6 {
- margin-left: 50%;
- }
-
- .offset-sm-7 {
- margin-left: 58.33333333%;
- }
-
- .offset-sm-8 {
- margin-left: 66.66666667%;
- }
-
- .offset-sm-9 {
- margin-left: 75%;
- }
-
- .offset-sm-10 {
- margin-left: 83.33333333%;
- }
-
- .offset-sm-11 {
- margin-left: 91.66666667%;
- }
-}
-
-@media (min-width: 768px) {
- .col-md {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%;
- }
-
- .col-md-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none;
- }
-
- .col-md-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333333%;
- flex: 0 0 8.33333333%;
- max-width: 8.33333333%;
- }
-
- .col-md-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66666667%;
- flex: 0 0 16.66666667%;
- max-width: 16.66666667%;
- }
-
- .col-md-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-md-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333333%;
- flex: 0 0 33.33333333%;
- max-width: 33.33333333%;
- }
-
- .col-md-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66666667%;
- flex: 0 0 41.66666667%;
- max-width: 41.66666667%;
- }
-
- .col-md-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-md-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333333%;
- flex: 0 0 58.33333333%;
- max-width: 58.33333333%;
- }
-
- .col-md-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66666667%;
- flex: 0 0 66.66666667%;
- max-width: 66.66666667%;
- }
-
- .col-md-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-md-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333333%;
- flex: 0 0 83.33333333%;
- max-width: 83.33333333%;
- }
-
- .col-md-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66666667%;
- flex: 0 0 91.66666667%;
- max-width: 91.66666667%;
- }
-
- .col-md-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-md-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1;
- }
-
- .order-md-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13;
- }
-
- .order-md-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
- }
-
- .order-md-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- }
-
- .order-md-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
- }
-
- .order-md-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3;
- }
-
- .order-md-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4;
- }
-
- .order-md-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5;
- }
-
- .order-md-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6;
- }
-
- .order-md-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7;
- }
-
- .order-md-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8;
- }
-
- .order-md-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9;
- }
-
- .order-md-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10;
- }
-
- .order-md-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11;
- }
-
- .order-md-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12;
- }
-
- .offset-md-0 {
- margin-left: 0;
- }
-
- .offset-md-1 {
- margin-left: 8.33333333%;
- }
-
- .offset-md-2 {
- margin-left: 16.66666667%;
- }
-
- .offset-md-3 {
- margin-left: 25%;
- }
-
- .offset-md-4 {
- margin-left: 33.33333333%;
- }
-
- .offset-md-5 {
- margin-left: 41.66666667%;
- }
-
- .offset-md-6 {
- margin-left: 50%;
- }
-
- .offset-md-7 {
- margin-left: 58.33333333%;
- }
-
- .offset-md-8 {
- margin-left: 66.66666667%;
- }
-
- .offset-md-9 {
- margin-left: 75%;
- }
-
- .offset-md-10 {
- margin-left: 83.33333333%;
- }
-
- .offset-md-11 {
- margin-left: 91.66666667%;
- }
-}
-
-@media (min-width: 992px) {
- .col-lg {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%;
- }
-
- .col-lg-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none;
- }
-
- .col-lg-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333333%;
- flex: 0 0 8.33333333%;
- max-width: 8.33333333%;
- }
-
- .col-lg-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66666667%;
- flex: 0 0 16.66666667%;
- max-width: 16.66666667%;
- }
-
- .col-lg-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-lg-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333333%;
- flex: 0 0 33.33333333%;
- max-width: 33.33333333%;
- }
-
- .col-lg-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66666667%;
- flex: 0 0 41.66666667%;
- max-width: 41.66666667%;
- }
-
- .col-lg-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-lg-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333333%;
- flex: 0 0 58.33333333%;
- max-width: 58.33333333%;
- }
-
- .col-lg-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66666667%;
- flex: 0 0 66.66666667%;
- max-width: 66.66666667%;
- }
-
- .col-lg-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-lg-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333333%;
- flex: 0 0 83.33333333%;
- max-width: 83.33333333%;
- }
-
- .col-lg-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66666667%;
- flex: 0 0 91.66666667%;
- max-width: 91.66666667%;
- }
-
- .col-lg-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-lg-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1;
- }
-
- .order-lg-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13;
- }
-
- .order-lg-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
- }
-
- .order-lg-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- }
-
- .order-lg-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
- }
-
- .order-lg-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3;
- }
-
- .order-lg-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4;
- }
-
- .order-lg-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5;
- }
-
- .order-lg-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6;
- }
-
- .order-lg-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7;
- }
-
- .order-lg-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8;
- }
-
- .order-lg-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9;
- }
-
- .order-lg-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10;
- }
-
- .order-lg-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11;
- }
-
- .order-lg-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12;
- }
-
- .offset-lg-0 {
- margin-left: 0;
- }
-
- .offset-lg-1 {
- margin-left: 8.33333333%;
- }
-
- .offset-lg-2 {
- margin-left: 16.66666667%;
- }
-
- .offset-lg-3 {
- margin-left: 25%;
- }
-
- .offset-lg-4 {
- margin-left: 33.33333333%;
- }
-
- .offset-lg-5 {
- margin-left: 41.66666667%;
- }
-
- .offset-lg-6 {
- margin-left: 50%;
- }
-
- .offset-lg-7 {
- margin-left: 58.33333333%;
- }
-
- .offset-lg-8 {
- margin-left: 66.66666667%;
- }
-
- .offset-lg-9 {
- margin-left: 75%;
- }
-
- .offset-lg-10 {
- margin-left: 83.33333333%;
- }
-
- .offset-lg-11 {
- margin-left: 91.66666667%;
- }
-}
-
-@media (min-width: 1200px) {
- .col-xl {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%;
- }
-
- .col-xl-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none;
- }
-
- .col-xl-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333333%;
- flex: 0 0 8.33333333%;
- max-width: 8.33333333%;
- }
-
- .col-xl-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66666667%;
- flex: 0 0 16.66666667%;
- max-width: 16.66666667%;
- }
-
- .col-xl-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-xl-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333333%;
- flex: 0 0 33.33333333%;
- max-width: 33.33333333%;
- }
-
- .col-xl-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66666667%;
- flex: 0 0 41.66666667%;
- max-width: 41.66666667%;
- }
-
- .col-xl-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-xl-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333333%;
- flex: 0 0 58.33333333%;
- max-width: 58.33333333%;
- }
-
- .col-xl-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66666667%;
- flex: 0 0 66.66666667%;
- max-width: 66.66666667%;
- }
-
- .col-xl-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-xl-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333333%;
- flex: 0 0 83.33333333%;
- max-width: 83.33333333%;
- }
-
- .col-xl-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66666667%;
- flex: 0 0 91.66666667%;
- max-width: 91.66666667%;
- }
-
- .col-xl-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-xl-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1;
- }
-
- .order-xl-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13;
- }
-
- .order-xl-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
- }
-
- .order-xl-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- }
-
- .order-xl-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
- }
-
- .order-xl-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3;
- }
-
- .order-xl-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4;
- }
-
- .order-xl-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5;
- }
-
- .order-xl-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6;
- }
-
- .order-xl-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7;
- }
-
- .order-xl-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8;
- }
-
- .order-xl-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9;
- }
-
- .order-xl-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10;
- }
-
- .order-xl-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11;
- }
-
- .order-xl-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12;
- }
-
- .offset-xl-0 {
- margin-left: 0;
- }
-
- .offset-xl-1 {
- margin-left: 8.33333333%;
- }
-
- .offset-xl-2 {
- margin-left: 16.66666667%;
- }
-
- .offset-xl-3 {
- margin-left: 25%;
- }
-
- .offset-xl-4 {
- margin-left: 33.33333333%;
- }
-
- .offset-xl-5 {
- margin-left: 41.66666667%;
- }
-
- .offset-xl-6 {
- margin-left: 50%;
- }
-
- .offset-xl-7 {
- margin-left: 58.33333333%;
- }
-
- .offset-xl-8 {
- margin-left: 66.66666667%;
- }
-
- .offset-xl-9 {
- margin-left: 75%;
- }
-
- .offset-xl-10 {
- margin-left: 83.33333333%;
- }
-
- .offset-xl-11 {
- margin-left: 91.66666667%;
- }
-}
-
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 1rem;
- background-color: transparent;
-}
-
-.table th,
-.table td {
- padding: 0.75rem;
- vertical-align: top;
- border-top: 1px solid #dee2e6;
-}
-
-.table thead th {
- vertical-align: bottom;
- border-bottom: 2px solid #dee2e6;
-}
-
-.table tbody + tbody {
- border-top: 2px solid #dee2e6;
-}
-
-.table .table {
- background-color: #f5f8fa;
-}
-
-.table-sm th,
-.table-sm td {
- padding: 0.3rem;
-}
-
-.table-bordered {
- border: 1px solid #dee2e6;
-}
-
-.table-bordered th,
-.table-bordered td {
- border: 1px solid #dee2e6;
-}
-
-.table-bordered thead th,
-.table-bordered thead td {
- border-bottom-width: 2px;
-}
-
-.table-borderless th,
-.table-borderless td,
-.table-borderless thead th,
-.table-borderless tbody + tbody {
- border: 0;
-}
-
-.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.table-hover tbody tr:hover {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table-primary,
-.table-primary > th,
-.table-primary > td {
- background-color: #b8daff;
-}
-
-.table-hover .table-primary:hover {
- background-color: #9fcdff;
-}
-
-.table-hover .table-primary:hover > td,
-.table-hover .table-primary:hover > th {
- background-color: #9fcdff;
-}
-
-.table-secondary,
-.table-secondary > th,
-.table-secondary > td {
- background-color: #d6d8db;
-}
-
-.table-hover .table-secondary:hover {
- background-color: #c8cbcf;
-}
-
-.table-hover .table-secondary:hover > td,
-.table-hover .table-secondary:hover > th {
- background-color: #c8cbcf;
-}
-
-.table-success,
-.table-success > th,
-.table-success > td {
- background-color: #c3e6cb;
-}
-
-.table-hover .table-success:hover {
- background-color: #b1dfbb;
-}
-
-.table-hover .table-success:hover > td,
-.table-hover .table-success:hover > th {
- background-color: #b1dfbb;
-}
-
-.table-info,
-.table-info > th,
-.table-info > td {
- background-color: #bee5eb;
-}
-
-.table-hover .table-info:hover {
- background-color: #abdde5;
-}
-
-.table-hover .table-info:hover > td,
-.table-hover .table-info:hover > th {
- background-color: #abdde5;
-}
-
-.table-warning,
-.table-warning > th,
-.table-warning > td {
- background-color: #ffeeba;
-}
-
-.table-hover .table-warning:hover {
- background-color: #ffe8a1;
-}
-
-.table-hover .table-warning:hover > td,
-.table-hover .table-warning:hover > th {
- background-color: #ffe8a1;
-}
-
-.table-danger,
-.table-danger > th,
-.table-danger > td {
- background-color: #f5c6cb;
-}
-
-.table-hover .table-danger:hover {
- background-color: #f1b0b7;
-}
-
-.table-hover .table-danger:hover > td,
-.table-hover .table-danger:hover > th {
- background-color: #f1b0b7;
-}
-
-.table-light,
-.table-light > th,
-.table-light > td {
- background-color: #fdfdfe;
-}
-
-.table-hover .table-light:hover {
- background-color: #ececf6;
-}
-
-.table-hover .table-light:hover > td,
-.table-hover .table-light:hover > th {
- background-color: #ececf6;
-}
-
-.table-dark,
-.table-dark > th,
-.table-dark > td {
- background-color: #c6c8ca;
-}
-
-.table-hover .table-dark:hover {
- background-color: #b9bbbe;
-}
-
-.table-hover .table-dark:hover > td,
-.table-hover .table-dark:hover > th {
- background-color: #b9bbbe;
-}
-
-.table-active,
-.table-active > th,
-.table-active > td {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table-hover .table-active:hover {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table-hover .table-active:hover > td,
-.table-hover .table-active:hover > th {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table .thead-dark th {
- color: #f5f8fa;
- background-color: #212529;
- border-color: #32383e;
-}
-
-.table .thead-light th {
- color: #495057;
- background-color: #e9ecef;
- border-color: #dee2e6;
-}
-
-.table-dark {
- color: #f5f8fa;
- background-color: #212529;
-}
-
-.table-dark th,
-.table-dark td,
-.table-dark thead th {
- border-color: #32383e;
-}
-
-.table-dark.table-bordered {
- border: 0;
-}
-
-.table-dark.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(255, 255, 255, 0.05);
-}
-
-.table-dark.table-hover tbody tr:hover {
- background-color: rgba(255, 255, 255, 0.075);
-}
-
-@media (max-width: 575.98px) {
- .table-responsive-sm {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- }
-
- .table-responsive-sm > .table-bordered {
- border: 0;
- }
-}
-
-@media (max-width: 767.98px) {
- .table-responsive-md {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- }
-
- .table-responsive-md > .table-bordered {
- border: 0;
- }
-}
-
-@media (max-width: 991.98px) {
- .table-responsive-lg {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- }
-
- .table-responsive-lg > .table-bordered {
- border: 0;
- }
-}
-
-@media (max-width: 1199.98px) {
- .table-responsive-xl {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- }
-
- .table-responsive-xl > .table-bordered {
- border: 0;
- }
-}
-
-.table-responsive {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar;
-}
-
-.table-responsive > .table-bordered {
- border: 0;
-}
-
-.form-control {
- display: block;
- width: 100%;
- padding: 0.375rem 0.75rem;
- font-size: 0.9rem;
- line-height: 1.6;
- color: #495057;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .form-control {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.form-control::-ms-expand {
- background-color: transparent;
- border: 0;
-}
-
-.form-control:focus {
- color: #495057;
- background-color: #fff;
- border-color: #80bdff;
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.form-control::-webkit-input-placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control:-ms-input-placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control::-ms-input-placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control::placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control:disabled,
-.form-control[readonly] {
- background-color: #e9ecef;
- opacity: 1;
-}
-
-select.form-control:not([size]):not([multiple]) {
- height: calc(2.19rem + 2px);
-}
-
-select.form-control:focus::-ms-value {
- color: #495057;
- background-color: #fff;
-}
-
-.form-control-file,
-.form-control-range {
- display: block;
- width: 100%;
-}
-
-.col-form-label {
- padding-top: calc(0.375rem + 1px);
- padding-bottom: calc(0.375rem + 1px);
- margin-bottom: 0;
- font-size: inherit;
- line-height: 1.6;
-}
-
-.col-form-label-lg {
- padding-top: calc(0.5rem + 1px);
- padding-bottom: calc(0.5rem + 1px);
- font-size: 1.125rem;
- line-height: 1.5;
-}
-
-.col-form-label-sm {
- padding-top: calc(0.25rem + 1px);
- padding-bottom: calc(0.25rem + 1px);
- font-size: 0.7875rem;
- line-height: 1.5;
-}
-
-.form-control-plaintext {
- display: block;
- width: 100%;
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- margin-bottom: 0;
- line-height: 1.6;
- color: #212529;
- background-color: transparent;
- border: solid transparent;
- border-width: 1px 0;
-}
-
-.form-control-plaintext.form-control-sm,
-.input-group-sm > .form-control-plaintext.form-control,
-.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text,
-.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text,
-.input-group-sm > .input-group-prepend > .form-control-plaintext.btn,
-.input-group-sm > .input-group-append > .form-control-plaintext.btn,
-.form-control-plaintext.form-control-lg,
-.input-group-lg > .form-control-plaintext.form-control,
-.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text,
-.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text,
-.input-group-lg > .input-group-prepend > .form-control-plaintext.btn,
-.input-group-lg > .input-group-append > .form-control-plaintext.btn {
- padding-right: 0;
- padding-left: 0;
-}
-
-.form-control-sm,
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-prepend > .input-group-text,
-.input-group-sm > .input-group-append > .input-group-text,
-.input-group-sm > .input-group-prepend > .btn,
-.input-group-sm > .input-group-append > .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.7875rem;
- line-height: 1.5;
- border-radius: 0.2rem;
-}
-
-select.form-control-sm:not([size]):not([multiple]),
-.input-group-sm > select.form-control:not([size]):not([multiple]),
-.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),
-.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]),
-.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]),
-.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) {
- height: calc(1.68125rem + 2px);
-}
-
-.form-control-lg,
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-prepend > .input-group-text,
-.input-group-lg > .input-group-append > .input-group-text,
-.input-group-lg > .input-group-prepend > .btn,
-.input-group-lg > .input-group-append > .btn {
- padding: 0.5rem 1rem;
- font-size: 1.125rem;
- line-height: 1.5;
- border-radius: 0.3rem;
-}
-
-select.form-control-lg:not([size]):not([multiple]),
-.input-group-lg > select.form-control:not([size]):not([multiple]),
-.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),
-.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]),
-.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]),
-.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) {
- height: calc(2.6875rem + 2px);
-}
-
-.form-group {
- margin-bottom: 1rem;
-}
-
-.form-text {
- display: block;
- margin-top: 0.25rem;
-}
-
-.form-row {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- margin-right: -5px;
- margin-left: -5px;
-}
-
-.form-row > .col,
-.form-row > [class*="col-"] {
- padding-right: 5px;
- padding-left: 5px;
-}
-
-.form-check {
- position: relative;
- display: block;
- padding-left: 1.25rem;
-}
-
-.form-check-input {
- position: absolute;
- margin-top: 0.3rem;
- margin-left: -1.25rem;
-}
-
-.form-check-input:disabled ~ .form-check-label {
- color: #6c757d;
-}
-
-.form-check-label {
- margin-bottom: 0;
-}
-
-.form-check-inline {
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- padding-left: 0;
- margin-right: 0.75rem;
-}
-
-.form-check-inline .form-check-input {
- position: static;
- margin-top: 0;
- margin-right: 0.3125rem;
- margin-left: 0;
-}
-
-.valid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #28a745;
-}
-
-.valid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1;
- color: #fff;
- background-color: rgba(40, 167, 69, 0.8);
- border-radius: .2rem;
-}
-
-.was-validated .form-control:valid,
-.form-control.is-valid,
-.was-validated
-.custom-select:valid,
-.custom-select.is-valid {
- border-color: #28a745;
-}
-
-.was-validated .form-control:valid:focus,
-.form-control.is-valid:focus,
-.was-validated
-.custom-select:valid:focus,
-.custom-select.is-valid:focus {
- border-color: #28a745;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.was-validated .form-control:valid ~ .valid-feedback,
-.was-validated .form-control:valid ~ .valid-tooltip,
-.form-control.is-valid ~ .valid-feedback,
-.form-control.is-valid ~ .valid-tooltip,
-.was-validated
-.custom-select:valid ~ .valid-feedback,
-.was-validated
-.custom-select:valid ~ .valid-tooltip,
-.custom-select.is-valid ~ .valid-feedback,
-.custom-select.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .form-control-file:valid ~ .valid-feedback,
-.was-validated .form-control-file:valid ~ .valid-tooltip,
-.form-control-file.is-valid ~ .valid-feedback,
-.form-control-file.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .form-check-input:valid ~ .form-check-label,
-.form-check-input.is-valid ~ .form-check-label {
- color: #28a745;
-}
-
-.was-validated .form-check-input:valid ~ .valid-feedback,
-.was-validated .form-check-input:valid ~ .valid-tooltip,
-.form-check-input.is-valid ~ .valid-feedback,
-.form-check-input.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .custom-control-input:valid ~ .custom-control-label,
-.custom-control-input.is-valid ~ .custom-control-label {
- color: #28a745;
-}
-
-.was-validated .custom-control-input:valid ~ .custom-control-label::before,
-.custom-control-input.is-valid ~ .custom-control-label::before {
- background-color: #71dd8a;
-}
-
-.was-validated .custom-control-input:valid ~ .valid-feedback,
-.was-validated .custom-control-input:valid ~ .valid-tooltip,
-.custom-control-input.is-valid ~ .valid-feedback,
-.custom-control-input.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,
-.custom-control-input.is-valid:checked ~ .custom-control-label::before {
- background-color: #34ce57;
-}
-
-.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,
-.custom-control-input.is-valid:focus ~ .custom-control-label::before {
- -webkit-box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
- box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.was-validated .custom-file-input:valid ~ .custom-file-label,
-.custom-file-input.is-valid ~ .custom-file-label {
- border-color: #28a745;
-}
-
-.was-validated .custom-file-input:valid ~ .custom-file-label::before,
-.custom-file-input.is-valid ~ .custom-file-label::before {
- border-color: inherit;
-}
-
-.was-validated .custom-file-input:valid ~ .valid-feedback,
-.was-validated .custom-file-input:valid ~ .valid-tooltip,
-.custom-file-input.is-valid ~ .valid-feedback,
-.custom-file-input.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .custom-file-input:valid:focus ~ .custom-file-label,
-.custom-file-input.is-valid:focus ~ .custom-file-label {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.invalid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #dc3545;
-}
-
-.invalid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1;
- color: #fff;
- background-color: rgba(220, 53, 69, 0.8);
- border-radius: .2rem;
-}
-
-.was-validated .form-control:invalid,
-.form-control.is-invalid,
-.was-validated
-.custom-select:invalid,
-.custom-select.is-invalid {
- border-color: #dc3545;
-}
-
-.was-validated .form-control:invalid:focus,
-.form-control.is-invalid:focus,
-.was-validated
-.custom-select:invalid:focus,
-.custom-select.is-invalid:focus {
- border-color: #dc3545;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.was-validated .form-control:invalid ~ .invalid-feedback,
-.was-validated .form-control:invalid ~ .invalid-tooltip,
-.form-control.is-invalid ~ .invalid-feedback,
-.form-control.is-invalid ~ .invalid-tooltip,
-.was-validated
-.custom-select:invalid ~ .invalid-feedback,
-.was-validated
-.custom-select:invalid ~ .invalid-tooltip,
-.custom-select.is-invalid ~ .invalid-feedback,
-.custom-select.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .form-control-file:invalid ~ .invalid-feedback,
-.was-validated .form-control-file:invalid ~ .invalid-tooltip,
-.form-control-file.is-invalid ~ .invalid-feedback,
-.form-control-file.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .form-check-input:invalid ~ .form-check-label,
-.form-check-input.is-invalid ~ .form-check-label {
- color: #dc3545;
-}
-
-.was-validated .form-check-input:invalid ~ .invalid-feedback,
-.was-validated .form-check-input:invalid ~ .invalid-tooltip,
-.form-check-input.is-invalid ~ .invalid-feedback,
-.form-check-input.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .custom-control-input:invalid ~ .custom-control-label,
-.custom-control-input.is-invalid ~ .custom-control-label {
- color: #dc3545;
-}
-
-.was-validated .custom-control-input:invalid ~ .custom-control-label::before,
-.custom-control-input.is-invalid ~ .custom-control-label::before {
- background-color: #efa2a9;
-}
-
-.was-validated .custom-control-input:invalid ~ .invalid-feedback,
-.was-validated .custom-control-input:invalid ~ .invalid-tooltip,
-.custom-control-input.is-invalid ~ .invalid-feedback,
-.custom-control-input.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,
-.custom-control-input.is-invalid:checked ~ .custom-control-label::before {
- background-color: #e4606d;
-}
-
-.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,
-.custom-control-input.is-invalid:focus ~ .custom-control-label::before {
- -webkit-box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
- box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.was-validated .custom-file-input:invalid ~ .custom-file-label,
-.custom-file-input.is-invalid ~ .custom-file-label {
- border-color: #dc3545;
-}
-
-.was-validated .custom-file-input:invalid ~ .custom-file-label::before,
-.custom-file-input.is-invalid ~ .custom-file-label::before {
- border-color: inherit;
-}
-
-.was-validated .custom-file-input:invalid ~ .invalid-feedback,
-.was-validated .custom-file-input:invalid ~ .invalid-tooltip,
-.custom-file-input.is-invalid ~ .invalid-feedback,
-.custom-file-input.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,
-.custom-file-input.is-invalid:focus ~ .custom-file-label {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.form-inline {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
-}
-
-.form-inline .form-check {
- width: 100%;
-}
-
-@media (min-width: 576px) {
- .form-inline label {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- margin-bottom: 0;
- }
-
- .form-inline .form-group {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- margin-bottom: 0;
- }
-
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
-
- .form-inline .form-control-plaintext {
- display: inline-block;
- }
-
- .form-inline .input-group,
- .form-inline .custom-select {
- width: auto;
- }
-
- .form-inline .form-check {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- width: auto;
- padding-left: 0;
- }
-
- .form-inline .form-check-input {
- position: relative;
- margin-top: 0;
- margin-right: 0.25rem;
- margin-left: 0;
- }
-
- .form-inline .custom-control {
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- }
-
- .form-inline .custom-control-label {
- margin-bottom: 0;
- }
-}
-
-.btn {
- display: inline-block;
- font-weight: 400;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 0.9rem;
- line-height: 1.6;
- border-radius: 0.25rem;
- -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .btn {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.btn:hover,
-.btn:focus {
- text-decoration: none;
-}
-
-.btn:focus,
-.btn.focus {
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.btn.disabled,
-.btn:disabled {
- opacity: 0.65;
-}
-
-.btn:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-
-.btn:not(:disabled):not(.disabled):active,
-.btn:not(:disabled):not(.disabled).active {
- background-image: none;
-}
-
-a.btn.disabled,
-fieldset:disabled a.btn {
- pointer-events: none;
-}
-
-.btn-primary {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-primary:hover {
- color: #fff;
- background-color: #0069d9;
- border-color: #0062cc;
-}
-
-.btn-primary:focus,
-.btn-primary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.btn-primary.disabled,
-.btn-primary:disabled {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-primary:not(:disabled):not(.disabled):active,
-.btn-primary:not(:disabled):not(.disabled).active,
-.show > .btn-primary.dropdown-toggle {
- color: #fff;
- background-color: #0062cc;
- border-color: #005cbf;
-}
-
-.btn-primary:not(:disabled):not(.disabled):active:focus,
-.btn-primary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-primary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.btn-secondary {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-secondary:hover {
- color: #fff;
- background-color: #5a6268;
- border-color: #545b62;
-}
-
-.btn-secondary:focus,
-.btn-secondary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-secondary.disabled,
-.btn-secondary:disabled {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-secondary:not(:disabled):not(.disabled):active,
-.btn-secondary:not(:disabled):not(.disabled).active,
-.show > .btn-secondary.dropdown-toggle {
- color: #fff;
- background-color: #545b62;
- border-color: #4e555b;
-}
-
-.btn-secondary:not(:disabled):not(.disabled):active:focus,
-.btn-secondary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-secondary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-success {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-success:hover {
- color: #fff;
- background-color: #218838;
- border-color: #1e7e34;
-}
-
-.btn-success:focus,
-.btn-success.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.btn-success.disabled,
-.btn-success:disabled {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-success:not(:disabled):not(.disabled):active,
-.btn-success:not(:disabled):not(.disabled).active,
-.show > .btn-success.dropdown-toggle {
- color: #fff;
- background-color: #1e7e34;
- border-color: #1c7430;
-}
-
-.btn-success:not(:disabled):not(.disabled):active:focus,
-.btn-success:not(:disabled):not(.disabled).active:focus,
-.show > .btn-success.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.btn-info {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-info:hover {
- color: #fff;
- background-color: #138496;
- border-color: #117a8b;
-}
-
-.btn-info:focus,
-.btn-info.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.btn-info.disabled,
-.btn-info:disabled {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-info:not(:disabled):not(.disabled):active,
-.btn-info:not(:disabled):not(.disabled).active,
-.show > .btn-info.dropdown-toggle {
- color: #fff;
- background-color: #117a8b;
- border-color: #10707f;
-}
-
-.btn-info:not(:disabled):not(.disabled):active:focus,
-.btn-info:not(:disabled):not(.disabled).active:focus,
-.show > .btn-info.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.btn-warning {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-warning:hover {
- color: #212529;
- background-color: #e0a800;
- border-color: #d39e00;
-}
-
-.btn-warning:focus,
-.btn-warning.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.btn-warning.disabled,
-.btn-warning:disabled {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-warning:not(:disabled):not(.disabled):active,
-.btn-warning:not(:disabled):not(.disabled).active,
-.show > .btn-warning.dropdown-toggle {
- color: #212529;
- background-color: #d39e00;
- border-color: #c69500;
-}
-
-.btn-warning:not(:disabled):not(.disabled):active:focus,
-.btn-warning:not(:disabled):not(.disabled).active:focus,
-.show > .btn-warning.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.btn-danger {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-danger:hover {
- color: #fff;
- background-color: #c82333;
- border-color: #bd2130;
-}
-
-.btn-danger:focus,
-.btn-danger.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.btn-danger.disabled,
-.btn-danger:disabled {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-danger:not(:disabled):not(.disabled):active,
-.btn-danger:not(:disabled):not(.disabled).active,
-.show > .btn-danger.dropdown-toggle {
- color: #fff;
- background-color: #bd2130;
- border-color: #b21f2d;
-}
-
-.btn-danger:not(:disabled):not(.disabled):active:focus,
-.btn-danger:not(:disabled):not(.disabled).active:focus,
-.show > .btn-danger.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.btn-light {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-light:hover {
- color: #212529;
- background-color: #e2e6ea;
- border-color: #dae0e5;
-}
-
-.btn-light:focus,
-.btn-light.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-light.disabled,
-.btn-light:disabled {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-light:not(:disabled):not(.disabled):active,
-.btn-light:not(:disabled):not(.disabled).active,
-.show > .btn-light.dropdown-toggle {
- color: #212529;
- background-color: #dae0e5;
- border-color: #d3d9df;
-}
-
-.btn-light:not(:disabled):not(.disabled):active:focus,
-.btn-light:not(:disabled):not(.disabled).active:focus,
-.show > .btn-light.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-dark {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-dark:hover {
- color: #fff;
- background-color: #23272b;
- border-color: #1d2124;
-}
-
-.btn-dark:focus,
-.btn-dark.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-dark.disabled,
-.btn-dark:disabled {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-dark:not(:disabled):not(.disabled):active,
-.btn-dark:not(:disabled):not(.disabled).active,
-.show > .btn-dark.dropdown-toggle {
- color: #fff;
- background-color: #1d2124;
- border-color: #171a1d;
-}
-
-.btn-dark:not(:disabled):not(.disabled):active:focus,
-.btn-dark:not(:disabled):not(.disabled).active:focus,
-.show > .btn-dark.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-outline-primary {
- color: #007bff;
- background-color: transparent;
- background-image: none;
- border-color: #007bff;
-}
-
-.btn-outline-primary:hover {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-outline-primary:focus,
-.btn-outline-primary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.btn-outline-primary.disabled,
-.btn-outline-primary:disabled {
- color: #007bff;
- background-color: transparent;
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled):active,
-.btn-outline-primary:not(:disabled):not(.disabled).active,
-.show > .btn-outline-primary.dropdown-toggle {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled):active:focus,
-.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-primary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.btn-outline-secondary {
- color: #6c757d;
- background-color: transparent;
- background-image: none;
- border-color: #6c757d;
-}
-
-.btn-outline-secondary:hover {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-outline-secondary:focus,
-.btn-outline-secondary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-outline-secondary.disabled,
-.btn-outline-secondary:disabled {
- color: #6c757d;
- background-color: transparent;
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled):active,
-.btn-outline-secondary:not(:disabled):not(.disabled).active,
-.show > .btn-outline-secondary.dropdown-toggle {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,
-.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-secondary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-outline-success {
- color: #28a745;
- background-color: transparent;
- background-image: none;
- border-color: #28a745;
-}
-
-.btn-outline-success:hover {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-outline-success:focus,
-.btn-outline-success.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.btn-outline-success.disabled,
-.btn-outline-success:disabled {
- color: #28a745;
- background-color: transparent;
-}
-
-.btn-outline-success:not(:disabled):not(.disabled):active,
-.btn-outline-success:not(:disabled):not(.disabled).active,
-.show > .btn-outline-success.dropdown-toggle {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-outline-success:not(:disabled):not(.disabled):active:focus,
-.btn-outline-success:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-success.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.btn-outline-info {
- color: #17a2b8;
- background-color: transparent;
- background-image: none;
- border-color: #17a2b8;
-}
-
-.btn-outline-info:hover {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-outline-info:focus,
-.btn-outline-info.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.btn-outline-info.disabled,
-.btn-outline-info:disabled {
- color: #17a2b8;
- background-color: transparent;
-}
-
-.btn-outline-info:not(:disabled):not(.disabled):active,
-.btn-outline-info:not(:disabled):not(.disabled).active,
-.show > .btn-outline-info.dropdown-toggle {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-outline-info:not(:disabled):not(.disabled):active:focus,
-.btn-outline-info:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-info.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.btn-outline-warning {
- color: #ffc107;
- background-color: transparent;
- background-image: none;
- border-color: #ffc107;
-}
-
-.btn-outline-warning:hover {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-outline-warning:focus,
-.btn-outline-warning.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.btn-outline-warning.disabled,
-.btn-outline-warning:disabled {
- color: #ffc107;
- background-color: transparent;
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled):active,
-.btn-outline-warning:not(:disabled):not(.disabled).active,
-.show > .btn-outline-warning.dropdown-toggle {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled):active:focus,
-.btn-outline-warning:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-warning.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.btn-outline-danger {
- color: #dc3545;
- background-color: transparent;
- background-image: none;
- border-color: #dc3545;
-}
-
-.btn-outline-danger:hover {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-outline-danger:focus,
-.btn-outline-danger.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.btn-outline-danger.disabled,
-.btn-outline-danger:disabled {
- color: #dc3545;
- background-color: transparent;
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled):active,
-.btn-outline-danger:not(:disabled):not(.disabled).active,
-.show > .btn-outline-danger.dropdown-toggle {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled):active:focus,
-.btn-outline-danger:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-danger.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.btn-outline-light {
- color: #f8f9fa;
- background-color: transparent;
- background-image: none;
- border-color: #f8f9fa;
-}
-
-.btn-outline-light:hover {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-outline-light:focus,
-.btn-outline-light.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-outline-light.disabled,
-.btn-outline-light:disabled {
- color: #f8f9fa;
- background-color: transparent;
-}
-
-.btn-outline-light:not(:disabled):not(.disabled):active,
-.btn-outline-light:not(:disabled):not(.disabled).active,
-.show > .btn-outline-light.dropdown-toggle {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-outline-light:not(:disabled):not(.disabled):active:focus,
-.btn-outline-light:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-light.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-outline-dark {
- color: #343a40;
- background-color: transparent;
- background-image: none;
- border-color: #343a40;
-}
-
-.btn-outline-dark:hover {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-outline-dark:focus,
-.btn-outline-dark.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-outline-dark.disabled,
-.btn-outline-dark:disabled {
- color: #343a40;
- background-color: transparent;
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled):active,
-.btn-outline-dark:not(:disabled):not(.disabled).active,
-.show > .btn-outline-dark.dropdown-toggle {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled):active:focus,
-.btn-outline-dark:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-dark.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-link {
- font-weight: 400;
- color: #007bff;
- background-color: transparent;
-}
-
-.btn-link:hover {
- color: #0056b3;
- text-decoration: underline;
- background-color: transparent;
- border-color: transparent;
-}
-
-.btn-link:focus,
-.btn-link.focus {
- text-decoration: underline;
- border-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-.btn-link:disabled,
-.btn-link.disabled {
- color: #6c757d;
- pointer-events: none;
-}
-
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 0.5rem 1rem;
- font-size: 1.125rem;
- line-height: 1.5;
- border-radius: 0.3rem;
-}
-
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.7875rem;
- line-height: 1.5;
- border-radius: 0.2rem;
-}
-
-.btn-block {
- display: block;
- width: 100%;
-}
-
-.btn-block + .btn-block {
- margin-top: 0.5rem;
-}
-
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-
-.fade {
- -webkit-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .fade {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.fade:not(.show) {
- opacity: 0;
-}
-
-.collapse:not(.show) {
- display: none;
-}
-
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height 0.35s ease;
- transition: height 0.35s ease;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .collapsing {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.dropup,
-.dropright,
-.dropdown,
-.dropleft {
- position: relative;
-}
-
-.dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid;
- border-right: 0.3em solid transparent;
- border-bottom: 0;
- border-left: 0.3em solid transparent;
-}
-
-.dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: 0.5rem 0;
- margin: 0.125rem 0 0;
- font-size: 0.9rem;
- color: #212529;
- text-align: left;
- list-style: none;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 0.25rem;
-}
-
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-
-.dropup .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-top: 0;
- margin-bottom: 0.125rem;
-}
-
-.dropup .dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0;
- border-right: 0.3em solid transparent;
- border-bottom: 0.3em solid;
- border-left: 0.3em solid transparent;
-}
-
-.dropup .dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropright .dropdown-menu {
- top: 0;
- right: auto;
- left: 100%;
- margin-top: 0;
- margin-left: 0.125rem;
-}
-
-.dropright .dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid transparent;
- border-right: 0;
- border-bottom: 0.3em solid transparent;
- border-left: 0.3em solid;
-}
-
-.dropright .dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropright .dropdown-toggle::after {
- vertical-align: 0;
-}
-
-.dropleft .dropdown-menu {
- top: 0;
- right: 100%;
- left: auto;
- margin-top: 0;
- margin-right: 0.125rem;
-}
-
-.dropleft .dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
-}
-
-.dropleft .dropdown-toggle::after {
- display: none;
-}
-
-.dropleft .dropdown-toggle::before {
- display: inline-block;
- width: 0;
- height: 0;
- margin-right: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid transparent;
- border-right: 0.3em solid;
- border-bottom: 0.3em solid transparent;
-}
-
-.dropleft .dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropleft .dropdown-toggle::before {
- vertical-align: 0;
-}
-
-.dropdown-menu[x-placement^="top"],
-.dropdown-menu[x-placement^="right"],
-.dropdown-menu[x-placement^="bottom"],
-.dropdown-menu[x-placement^="left"] {
- right: auto;
- bottom: auto;
-}
-
-.dropdown-divider {
- height: 0;
- margin: 0.5rem 0;
- overflow: hidden;
- border-top: 1px solid #e9ecef;
-}
-
-.dropdown-item {
- display: block;
- width: 100%;
- padding: 0.25rem 1.5rem;
- clear: both;
- font-weight: 400;
- color: #212529;
- text-align: inherit;
- white-space: nowrap;
- background-color: transparent;
- border: 0;
-}
-
-.dropdown-item:hover,
-.dropdown-item:focus {
- color: #16181b;
- text-decoration: none;
- background-color: #f8f9fa;
-}
-
-.dropdown-item.active,
-.dropdown-item:active {
- color: #fff;
- text-decoration: none;
- background-color: #007bff;
-}
-
-.dropdown-item.disabled,
-.dropdown-item:disabled {
- color: #6c757d;
- background-color: transparent;
-}
-
-.dropdown-menu.show {
- display: block;
-}
-
-.dropdown-header {
- display: block;
- padding: 0.5rem 1.5rem;
- margin-bottom: 0;
- font-size: 0.7875rem;
- color: #6c757d;
- white-space: nowrap;
-}
-
-.dropdown-item-text {
- display: block;
- padding: 0.25rem 1.5rem;
- color: #212529;
-}
-
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- vertical-align: middle;
-}
-
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- -webkit-box-flex: 0;
- -ms-flex: 0 1 auto;
- flex: 0 1 auto;
-}
-
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover {
- z-index: 1;
-}
-
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn:focus,
-.btn-group-vertical > .btn:active,
-.btn-group-vertical > .btn.active {
- z-index: 1;
-}
-
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group,
-.btn-group-vertical .btn + .btn,
-.btn-group-vertical .btn + .btn-group,
-.btn-group-vertical .btn-group + .btn,
-.btn-group-vertical .btn-group + .btn-group {
- margin-left: -1px;
-}
-
-.btn-toolbar {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
-}
-
-.btn-toolbar .input-group {
- width: auto;
-}
-
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-
-.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
-.btn-group > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.btn-group > .btn:not(:first-child),
-.btn-group > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.dropdown-toggle-split {
- padding-right: 0.5625rem;
- padding-left: 0.5625rem;
-}
-
-.dropdown-toggle-split::after,
-.dropup .dropdown-toggle-split::after,
-.dropright .dropdown-toggle-split::after {
- margin-left: 0;
-}
-
-.dropleft .dropdown-toggle-split::before {
- margin-right: 0;
-}
-
-.btn-sm + .dropdown-toggle-split,
-.btn-group-sm > .btn + .dropdown-toggle-split {
- padding-right: 0.375rem;
- padding-left: 0.375rem;
-}
-
-.btn-lg + .dropdown-toggle-split,
-.btn-group-lg > .btn + .dropdown-toggle-split {
- padding-right: 0.75rem;
- padding-left: 0.75rem;
-}
-
-.btn-group-vertical {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: start;
- -ms-flex-align: start;
- align-items: flex-start;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
-}
-
-.btn-group-vertical .btn,
-.btn-group-vertical .btn-group {
- width: 100%;
-}
-
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-
-.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
-.btn-group-vertical > .btn-group:not(:last-child) > .btn {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.btn-group-vertical > .btn:not(:first-child),
-.btn-group-vertical > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.btn-group-toggle > .btn,
-.btn-group-toggle > .btn-group > .btn {
- margin-bottom: 0;
-}
-
-.btn-group-toggle > .btn input[type="radio"],
-.btn-group-toggle > .btn input[type="checkbox"],
-.btn-group-toggle > .btn-group > .btn input[type="radio"],
-.btn-group-toggle > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-
-.input-group {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-align: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- width: 100%;
-}
-
-.input-group > .form-control,
-.input-group > .custom-select,
-.input-group > .custom-file {
- position: relative;
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- width: 1%;
- margin-bottom: 0;
-}
-
-.input-group > .form-control + .form-control,
-.input-group > .form-control + .custom-select,
-.input-group > .form-control + .custom-file,
-.input-group > .custom-select + .form-control,
-.input-group > .custom-select + .custom-select,
-.input-group > .custom-select + .custom-file,
-.input-group > .custom-file + .form-control,
-.input-group > .custom-file + .custom-select,
-.input-group > .custom-file + .custom-file {
- margin-left: -1px;
-}
-
-.input-group > .form-control:focus,
-.input-group > .custom-select:focus,
-.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {
- z-index: 3;
-}
-
-.input-group > .form-control:not(:last-child),
-.input-group > .custom-select:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.input-group > .form-control:not(:first-child),
-.input-group > .custom-select:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.input-group > .custom-file {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
-}
-
-.input-group > .custom-file:not(:last-child) .custom-file-label,
-.input-group > .custom-file:not(:last-child) .custom-file-label::after {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.input-group > .custom-file:not(:first-child) .custom-file-label {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.input-group-prepend,
-.input-group-append {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
-}
-
-.input-group-prepend .btn,
-.input-group-append .btn {
- position: relative;
- z-index: 2;
-}
-
-.input-group-prepend .btn + .btn,
-.input-group-prepend .btn + .input-group-text,
-.input-group-prepend .input-group-text + .input-group-text,
-.input-group-prepend .input-group-text + .btn,
-.input-group-append .btn + .btn,
-.input-group-append .btn + .input-group-text,
-.input-group-append .input-group-text + .input-group-text,
-.input-group-append .input-group-text + .btn {
- margin-left: -1px;
-}
-
-.input-group-prepend {
- margin-right: -1px;
-}
-
-.input-group-append {
- margin-left: -1px;
-}
-
-.input-group-text {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- padding: 0.375rem 0.75rem;
- margin-bottom: 0;
- font-size: 0.9rem;
- font-weight: 400;
- line-height: 1.6;
- color: #495057;
- text-align: center;
- white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
-}
-
-.input-group-text input[type="radio"],
-.input-group-text input[type="checkbox"] {
- margin-top: 0;
-}
-
-.input-group > .input-group-prepend > .btn,
-.input-group > .input-group-prepend > .input-group-text,
-.input-group > .input-group-append:not(:last-child) > .btn,
-.input-group > .input-group-append:not(:last-child) > .input-group-text,
-.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.input-group > .input-group-append > .btn,
-.input-group > .input-group-append > .input-group-text,
-.input-group > .input-group-prepend:not(:first-child) > .btn,
-.input-group > .input-group-prepend:not(:first-child) > .input-group-text,
-.input-group > .input-group-prepend:first-child > .btn:not(:first-child),
-.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.custom-control {
- position: relative;
- display: block;
- min-height: 1.6rem;
- padding-left: 1.5rem;
-}
-
-.custom-control-inline {
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- margin-right: 1rem;
-}
-
-.custom-control-input {
- position: absolute;
- z-index: -1;
- opacity: 0;
-}
-
-.custom-control-input:checked ~ .custom-control-label::before {
- color: #fff;
- background-color: #007bff;
-}
-
-.custom-control-input:focus ~ .custom-control-label::before {
- -webkit-box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-control-input:active ~ .custom-control-label::before {
- color: #fff;
- background-color: #b3d7ff;
-}
-
-.custom-control-input:disabled ~ .custom-control-label {
- color: #6c757d;
-}
-
-.custom-control-input:disabled ~ .custom-control-label::before {
- background-color: #e9ecef;
-}
-
-.custom-control-label {
- position: relative;
- margin-bottom: 0;
-}
-
-.custom-control-label::before {
- position: absolute;
- top: 0.3rem;
- left: -1.5rem;
- display: block;
- width: 1rem;
- height: 1rem;
- pointer-events: none;
- content: "";
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: #dee2e6;
-}
-
-.custom-control-label::after {
- position: absolute;
- top: 0.3rem;
- left: -1.5rem;
- display: block;
- width: 1rem;
- height: 1rem;
- content: "";
- background-repeat: no-repeat;
- background-position: center center;
- background-size: 50% 50%;
-}
-
-.custom-checkbox .custom-control-label::before {
- border-radius: 0.25rem;
-}
-
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {
- background-color: #007bff;
-}
-
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E");
-}
-
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {
- background-color: #007bff;
-}
-
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E");
-}
-
-.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-radio .custom-control-label::before {
- border-radius: 50%;
-}
-
-.custom-radio .custom-control-input:checked ~ .custom-control-label::before {
- background-color: #007bff;
-}
-
-.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E");
-}
-
-.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-select {
- display: inline-block;
- width: 100%;
- height: calc(2.19rem + 2px);
- padding: 0.375rem 1.75rem 0.375rem 0.75rem;
- line-height: 1.6;
- color: #495057;
- vertical-align: middle;
- background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center;
- background-size: 8px 10px;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-.custom-select:focus {
- border-color: #80bdff;
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5);
-}
-
-.custom-select:focus::-ms-value {
- color: #495057;
- background-color: #fff;
-}
-
-.custom-select[multiple],
-.custom-select[size]:not([size="1"]) {
- height: auto;
- padding-right: 0.75rem;
- background-image: none;
-}
-
-.custom-select:disabled {
- color: #6c757d;
- background-color: #e9ecef;
-}
-
-.custom-select::-ms-expand {
- opacity: 0;
-}
-
-.custom-select-sm {
- height: calc(1.68125rem + 2px);
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- font-size: 75%;
-}
-
-.custom-select-lg {
- height: calc(2.6875rem + 2px);
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- font-size: 125%;
-}
-
-.custom-file {
- position: relative;
- display: inline-block;
- width: 100%;
- height: calc(2.19rem + 2px);
- margin-bottom: 0;
-}
-
-.custom-file-input {
- position: relative;
- z-index: 2;
- width: 100%;
- height: calc(2.19rem + 2px);
- margin: 0;
- opacity: 0;
-}
-
-.custom-file-input:focus ~ .custom-file-label {
- border-color: #80bdff;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-file-input:focus ~ .custom-file-label::after {
- border-color: #80bdff;
-}
-
-.custom-file-input:disabled ~ .custom-file-label {
- background-color: #e9ecef;
-}
-
-.custom-file-input:lang(en) ~ .custom-file-label::after {
- content: "Browse";
-}
-
-.custom-file-label {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1;
- height: calc(2.19rem + 2px);
- padding: 0.375rem 0.75rem;
- line-height: 1.6;
- color: #495057;
- background-color: #fff;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
-}
-
-.custom-file-label::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- z-index: 3;
- display: block;
- height: 2.19rem;
- padding: 0.375rem 0.75rem;
- line-height: 1.6;
- color: #495057;
- content: "Browse";
- background-color: #e9ecef;
- border-left: 1px solid #ced4da;
- border-radius: 0 0.25rem 0.25rem 0;
-}
-
-.custom-range {
- width: 100%;
- padding-left: 0;
- background-color: transparent;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-.custom-range:focus {
- outline: none;
-}
-
-.custom-range::-moz-focus-outer {
- border: 0;
-}
-
-.custom-range::-webkit-slider-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: -0.25rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- -webkit-appearance: none;
- appearance: none;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .custom-range::-webkit-slider-thumb {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.custom-range::-webkit-slider-thumb:focus {
- outline: none;
- -webkit-box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-range::-webkit-slider-thumb:active {
- background-color: #b3d7ff;
-}
-
-.custom-range::-webkit-slider-runnable-track {
- width: 100%;
- height: 0.5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem;
-}
-
-.custom-range::-moz-range-thumb {
- width: 1rem;
- height: 1rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- -moz-appearance: none;
- appearance: none;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .custom-range::-moz-range-thumb {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.custom-range::-moz-range-thumb:focus {
- outline: none;
- box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-range::-moz-range-thumb:active {
- background-color: #b3d7ff;
-}
-
-.custom-range::-moz-range-track {
- width: 100%;
- height: 0.5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem;
-}
-
-.custom-range::-ms-thumb {
- width: 1rem;
- height: 1rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- appearance: none;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .custom-range::-ms-thumb {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.custom-range::-ms-thumb:focus {
- outline: none;
- box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-range::-ms-thumb:active {
- background-color: #b3d7ff;
-}
-
-.custom-range::-ms-track {
- width: 100%;
- height: 0.5rem;
- color: transparent;
- cursor: pointer;
- background-color: transparent;
- border-color: transparent;
- border-width: 0.5rem;
-}
-
-.custom-range::-ms-fill-lower {
- background-color: #dee2e6;
- border-radius: 1rem;
-}
-
-.custom-range::-ms-fill-upper {
- margin-right: 15px;
- background-color: #dee2e6;
- border-radius: 1rem;
-}
-
-.custom-control-label::before,
-.custom-file-label,
-.custom-select {
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .custom-control-label::before,
- .custom-file-label,
- .custom-select {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.nav {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-
-.nav-link {
- display: block;
- padding: 0.5rem 1rem;
-}
-
-.nav-link:hover,
-.nav-link:focus {
- text-decoration: none;
-}
-
-.nav-link.disabled {
- color: #6c757d;
-}
-
-.nav-tabs {
- border-bottom: 1px solid #dee2e6;
-}
-
-.nav-tabs .nav-item {
- margin-bottom: -1px;
-}
-
-.nav-tabs .nav-link {
- border: 1px solid transparent;
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
-}
-
-.nav-tabs .nav-link:hover,
-.nav-tabs .nav-link:focus {
- border-color: #e9ecef #e9ecef #dee2e6;
-}
-
-.nav-tabs .nav-link.disabled {
- color: #6c757d;
- background-color: transparent;
- border-color: transparent;
-}
-
-.nav-tabs .nav-link.active,
-.nav-tabs .nav-item.show .nav-link {
- color: #495057;
- background-color: #f5f8fa;
- border-color: #dee2e6 #dee2e6 #f5f8fa;
-}
-
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.nav-pills .nav-link {
- border-radius: 0.25rem;
-}
-
-.nav-pills .nav-link.active,
-.nav-pills .show > .nav-link {
- color: #fff;
- background-color: #007bff;
-}
-
-.nav-fill .nav-item {
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- text-align: center;
-}
-
-.nav-justified .nav-item {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- text-align: center;
-}
-
-.tab-content > .tab-pane {
- display: none;
-}
-
-.tab-content > .active {
- display: block;
-}
-
-.navbar {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
- padding: 0.5rem 1rem;
-}
-
-.navbar > .container,
-.navbar > .container-fluid {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
-}
-
-.navbar-brand {
- display: inline-block;
- padding-top: 0.32rem;
- padding-bottom: 0.32rem;
- margin-right: 1rem;
- font-size: 1.125rem;
- line-height: inherit;
- white-space: nowrap;
-}
-
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-
-.navbar-nav {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-
-.navbar-nav .nav-link {
- padding-right: 0;
- padding-left: 0;
-}
-
-.navbar-nav .dropdown-menu {
- position: static;
- float: none;
-}
-
-.navbar-text {
- display: inline-block;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-
-.navbar-collapse {
- -ms-flex-preferred-size: 100%;
- flex-basis: 100%;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
-}
-
-.navbar-toggler {
- padding: 0.25rem 0.75rem;
- font-size: 1.125rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 0.25rem;
-}
-
-.navbar-toggler:hover,
-.navbar-toggler:focus {
- text-decoration: none;
-}
-
-.navbar-toggler:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-
-.navbar-toggler-icon {
- display: inline-block;
- width: 1.5em;
- height: 1.5em;
- vertical-align: middle;
- content: "";
- background: no-repeat center center;
- background-size: 100% 100%;
-}
-
-@media (max-width: 575.98px) {
- .navbar-expand-sm > .container,
- .navbar-expand-sm > .container-fluid {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 576px) {
- .navbar-expand-sm {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
- }
-
- .navbar-expand-sm .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- }
-
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-sm .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-sm > .container,
- .navbar-expand-sm > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- }
-
- .navbar-expand-sm .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto;
- }
-
- .navbar-expand-sm .navbar-toggler {
- display: none;
- }
-}
-
-@media (max-width: 767.98px) {
- .navbar-expand-md > .container,
- .navbar-expand-md > .container-fluid {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 768px) {
- .navbar-expand-md {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
- }
-
- .navbar-expand-md .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- }
-
- .navbar-expand-md .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-md .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-md > .container,
- .navbar-expand-md > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- }
-
- .navbar-expand-md .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto;
- }
-
- .navbar-expand-md .navbar-toggler {
- display: none;
- }
-}
-
-@media (max-width: 991.98px) {
- .navbar-expand-lg > .container,
- .navbar-expand-lg > .container-fluid {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 992px) {
- .navbar-expand-lg {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
- }
-
- .navbar-expand-lg .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- }
-
- .navbar-expand-lg .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-lg .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-lg > .container,
- .navbar-expand-lg > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- }
-
- .navbar-expand-lg .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto;
- }
-
- .navbar-expand-lg .navbar-toggler {
- display: none;
- }
-}
-
-@media (max-width: 1199.98px) {
- .navbar-expand-xl > .container,
- .navbar-expand-xl > .container-fluid {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 1200px) {
- .navbar-expand-xl {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
- }
-
- .navbar-expand-xl .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- }
-
- .navbar-expand-xl .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-xl .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-xl > .container,
- .navbar-expand-xl > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- }
-
- .navbar-expand-xl .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto;
- }
-
- .navbar-expand-xl .navbar-toggler {
- display: none;
- }
-}
-
-.navbar-expand {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
-}
-
-.navbar-expand > .container,
-.navbar-expand > .container-fluid {
- padding-right: 0;
- padding-left: 0;
-}
-
-.navbar-expand .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
-}
-
-.navbar-expand .navbar-nav .dropdown-menu {
- position: absolute;
-}
-
-.navbar-expand .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
-}
-
-.navbar-expand > .container,
-.navbar-expand > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
-}
-
-.navbar-expand .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto;
-}
-
-.navbar-expand .navbar-toggler {
- display: none;
-}
-
-.navbar-light .navbar-brand {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-brand:hover,
-.navbar-light .navbar-brand:focus {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-nav .nav-link {
- color: rgba(0, 0, 0, 0.5);
-}
-
-.navbar-light .navbar-nav .nav-link:hover,
-.navbar-light .navbar-nav .nav-link:focus {
- color: rgba(0, 0, 0, 0.7);
-}
-
-.navbar-light .navbar-nav .nav-link.disabled {
- color: rgba(0, 0, 0, 0.3);
-}
-
-.navbar-light .navbar-nav .show > .nav-link,
-.navbar-light .navbar-nav .active > .nav-link,
-.navbar-light .navbar-nav .nav-link.show,
-.navbar-light .navbar-nav .nav-link.active {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-toggler {
- color: rgba(0, 0, 0, 0.5);
- border-color: rgba(0, 0, 0, 0.1);
-}
-
-.navbar-light .navbar-toggler-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
-}
-
-.navbar-light .navbar-text {
- color: rgba(0, 0, 0, 0.5);
-}
-
-.navbar-light .navbar-text a {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-text a:hover,
-.navbar-light .navbar-text a:focus {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-dark .navbar-brand {
- color: #fff;
-}
-
-.navbar-dark .navbar-brand:hover,
-.navbar-dark .navbar-brand:focus {
- color: #fff;
-}
-
-.navbar-dark .navbar-nav .nav-link {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.navbar-dark .navbar-nav .nav-link:hover,
-.navbar-dark .navbar-nav .nav-link:focus {
- color: rgba(255, 255, 255, 0.75);
-}
-
-.navbar-dark .navbar-nav .nav-link.disabled {
- color: rgba(255, 255, 255, 0.25);
-}
-
-.navbar-dark .navbar-nav .show > .nav-link,
-.navbar-dark .navbar-nav .active > .nav-link,
-.navbar-dark .navbar-nav .nav-link.show,
-.navbar-dark .navbar-nav .nav-link.active {
- color: #fff;
-}
-
-.navbar-dark .navbar-toggler {
- color: rgba(255, 255, 255, 0.5);
- border-color: rgba(255, 255, 255, 0.1);
-}
-
-.navbar-dark .navbar-toggler-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
-}
-
-.navbar-dark .navbar-text {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.navbar-dark .navbar-text a {
- color: #fff;
-}
-
-.navbar-dark .navbar-text a:hover,
-.navbar-dark .navbar-text a:focus {
- color: #fff;
-}
-
-.card {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- min-width: 0;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: border-box;
- border: 1px solid rgba(0, 0, 0, 0.125);
- border-radius: 0.25rem;
-}
-
-.card > hr {
- margin-right: 0;
- margin-left: 0;
-}
-
-.card > .list-group:first-child .list-group-item:first-child {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
-}
-
-.card > .list-group:last-child .list-group-item:last-child {
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem;
-}
-
-.card-body {
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- padding: 1.25rem;
-}
-
-.card-title {
- margin-bottom: 0.75rem;
-}
-
-.card-subtitle {
- margin-top: -0.375rem;
- margin-bottom: 0;
-}
-
-.card-text:last-child {
- margin-bottom: 0;
-}
-
-.card-link:hover {
- text-decoration: none;
-}
-
-.card-link + .card-link {
- margin-left: 1.25rem;
-}
-
-.card-header {
- padding: 0.75rem 1.25rem;
- margin-bottom: 0;
- background-color: rgba(0, 0, 0, 0.03);
- border-bottom: 1px solid rgba(0, 0, 0, 0.125);
-}
-
-.card-header:first-child {
- border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;
-}
-
-.card-header + .list-group .list-group-item:first-child {
- border-top: 0;
-}
-
-.card-footer {
- padding: 0.75rem 1.25rem;
- background-color: rgba(0, 0, 0, 0.03);
- border-top: 1px solid rgba(0, 0, 0, 0.125);
-}
-
-.card-footer:last-child {
- border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);
-}
-
-.card-header-tabs {
- margin-right: -0.625rem;
- margin-bottom: -0.75rem;
- margin-left: -0.625rem;
- border-bottom: 0;
-}
-
-.card-header-pills {
- margin-right: -0.625rem;
- margin-left: -0.625rem;
-}
-
-.card-img-overlay {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1.25rem;
-}
-
-.card-img {
- width: 100%;
- border-radius: calc(0.25rem - 1px);
-}
-
-.card-img-top {
- width: 100%;
- border-top-left-radius: calc(0.25rem - 1px);
- border-top-right-radius: calc(0.25rem - 1px);
-}
-
-.card-img-bottom {
- width: 100%;
- border-bottom-right-radius: calc(0.25rem - 1px);
- border-bottom-left-radius: calc(0.25rem - 1px);
-}
-
-.card-deck {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
-}
-
-.card-deck .card {
- margin-bottom: 15px;
-}
-
-@media (min-width: 576px) {
- .card-deck {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- margin-right: -15px;
- margin-left: -15px;
- }
-
- .card-deck .card {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-flex: 1;
- -ms-flex: 1 0 0%;
- flex: 1 0 0%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- margin-right: 15px;
- margin-bottom: 0;
- margin-left: 15px;
- }
-}
-
-.card-group {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
-}
-
-.card-group > .card {
- margin-bottom: 15px;
-}
-
-@media (min-width: 576px) {
- .card-group {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- }
-
- .card-group > .card {
- -webkit-box-flex: 1;
- -ms-flex: 1 0 0%;
- flex: 1 0 0%;
- margin-bottom: 0;
- }
-
- .card-group > .card + .card {
- margin-left: 0;
- border-left: 0;
- }
-
- .card-group > .card:first-child {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- }
-
- .card-group > .card:first-child .card-img-top,
- .card-group > .card:first-child .card-header {
- border-top-right-radius: 0;
- }
-
- .card-group > .card:first-child .card-img-bottom,
- .card-group > .card:first-child .card-footer {
- border-bottom-right-radius: 0;
- }
-
- .card-group > .card:last-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-
- .card-group > .card:last-child .card-img-top,
- .card-group > .card:last-child .card-header {
- border-top-left-radius: 0;
- }
-
- .card-group > .card:last-child .card-img-bottom,
- .card-group > .card:last-child .card-footer {
- border-bottom-left-radius: 0;
- }
-
- .card-group > .card:only-child {
- border-radius: 0.25rem;
- }
-
- .card-group > .card:only-child .card-img-top,
- .card-group > .card:only-child .card-header {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
- }
-
- .card-group > .card:only-child .card-img-bottom,
- .card-group > .card:only-child .card-footer {
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem;
- }
-
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {
- border-radius: 0;
- }
-
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {
- border-radius: 0;
- }
-}
-
-.card-columns .card {
- margin-bottom: 0.75rem;
-}
-
-@media (min-width: 576px) {
- .card-columns {
- -webkit-column-count: 3;
- column-count: 3;
- -webkit-column-gap: 1.25rem;
- column-gap: 1.25rem;
- orphans: 1;
- widows: 1;
- }
-
- .card-columns .card {
- display: inline-block;
- width: 100%;
- }
-}
-
-.accordion .card:not(:first-of-type):not(:last-of-type) {
- border-bottom: 0;
- border-radius: 0;
-}
-
-.accordion .card:not(:first-of-type) .card-header:first-child {
- border-radius: 0;
-}
-
-.accordion .card:first-of-type {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.accordion .card:last-of-type {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.breadcrumb {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- padding: 0.75rem 1rem;
- margin-bottom: 1rem;
- list-style: none;
- background-color: #e9ecef;
- border-radius: 0.25rem;
-}
-
-.breadcrumb-item + .breadcrumb-item {
- padding-left: 0.5rem;
-}
-
-.breadcrumb-item + .breadcrumb-item::before {
- display: inline-block;
- padding-right: 0.5rem;
- color: #6c757d;
- content: "/";
-}
-
-.breadcrumb-item + .breadcrumb-item:hover::before {
- text-decoration: underline;
-}
-
-.breadcrumb-item + .breadcrumb-item:hover::before {
- text-decoration: none;
-}
-
-.breadcrumb-item.active {
- color: #6c757d;
-}
-
-.pagination {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- padding-left: 0;
- list-style: none;
- border-radius: 0.25rem;
-}
-
-.page-link {
- position: relative;
- display: block;
- padding: 0.5rem 0.75rem;
- margin-left: -1px;
- line-height: 1.25;
- color: #007bff;
- background-color: #fff;
- border: 1px solid #dee2e6;
-}
-
-.page-link:hover {
- z-index: 2;
- color: #0056b3;
- text-decoration: none;
- background-color: #e9ecef;
- border-color: #dee2e6;
-}
-
-.page-link:focus {
- z-index: 2;
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.page-link:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-
-.page-item:first-child .page-link {
- margin-left: 0;
- border-top-left-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem;
-}
-
-.page-item:last-child .page-link {
- border-top-right-radius: 0.25rem;
- border-bottom-right-radius: 0.25rem;
-}
-
-.page-item.active .page-link {
- z-index: 1;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.page-item.disabled .page-link {
- color: #6c757d;
- pointer-events: none;
- cursor: auto;
- background-color: #fff;
- border-color: #dee2e6;
-}
-
-.pagination-lg .page-link {
- padding: 0.75rem 1.5rem;
- font-size: 1.125rem;
- line-height: 1.5;
-}
-
-.pagination-lg .page-item:first-child .page-link {
- border-top-left-radius: 0.3rem;
- border-bottom-left-radius: 0.3rem;
-}
-
-.pagination-lg .page-item:last-child .page-link {
- border-top-right-radius: 0.3rem;
- border-bottom-right-radius: 0.3rem;
-}
-
-.pagination-sm .page-link {
- padding: 0.25rem 0.5rem;
- font-size: 0.7875rem;
- line-height: 1.5;
-}
-
-.pagination-sm .page-item:first-child .page-link {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
-}
-
-.pagination-sm .page-item:last-child .page-link {
- border-top-right-radius: 0.2rem;
- border-bottom-right-radius: 0.2rem;
-}
-
-.badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
-}
-
-.badge:empty {
- display: none;
-}
-
-.btn .badge {
- position: relative;
- top: -1px;
-}
-
-.badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem;
-}
-
-.badge-primary {
- color: #fff;
- background-color: #007bff;
-}
-
-.badge-primary[href]:hover,
-.badge-primary[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #0062cc;
-}
-
-.badge-secondary {
- color: #fff;
- background-color: #6c757d;
-}
-
-.badge-secondary[href]:hover,
-.badge-secondary[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #545b62;
-}
-
-.badge-success {
- color: #fff;
- background-color: #28a745;
-}
-
-.badge-success[href]:hover,
-.badge-success[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #1e7e34;
-}
-
-.badge-info {
- color: #fff;
- background-color: #17a2b8;
-}
-
-.badge-info[href]:hover,
-.badge-info[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #117a8b;
-}
-
-.badge-warning {
- color: #212529;
- background-color: #ffc107;
-}
-
-.badge-warning[href]:hover,
-.badge-warning[href]:focus {
- color: #212529;
- text-decoration: none;
- background-color: #d39e00;
-}
-
-.badge-danger {
- color: #fff;
- background-color: #dc3545;
-}
-
-.badge-danger[href]:hover,
-.badge-danger[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #bd2130;
-}
-
-.badge-light {
- color: #212529;
- background-color: #f8f9fa;
-}
-
-.badge-light[href]:hover,
-.badge-light[href]:focus {
- color: #212529;
- text-decoration: none;
- background-color: #dae0e5;
-}
-
-.badge-dark {
- color: #fff;
- background-color: #343a40;
-}
-
-.badge-dark[href]:hover,
-.badge-dark[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #1d2124;
-}
-
-.jumbotron {
- padding: 2rem 1rem;
- margin-bottom: 2rem;
- background-color: #e9ecef;
- border-radius: 0.3rem;
-}
-
-@media (min-width: 576px) {
- .jumbotron {
- padding: 4rem 2rem;
- }
-}
-
-.jumbotron-fluid {
- padding-right: 0;
- padding-left: 0;
- border-radius: 0;
-}
-
-.alert {
- position: relative;
- padding: 0.75rem 1.25rem;
- margin-bottom: 1rem;
- border: 1px solid transparent;
- border-radius: 0.25rem;
-}
-
-.alert-heading {
- color: inherit;
-}
-
-.alert-link {
- font-weight: 700;
-}
-
-.alert-dismissible {
- padding-right: 3.85rem;
-}
-
-.alert-dismissible .close {
- position: absolute;
- top: 0;
- right: 0;
- padding: 0.75rem 1.25rem;
- color: inherit;
-}
-
-.alert-primary {
- color: #004085;
- background-color: #cce5ff;
- border-color: #b8daff;
-}
-
-.alert-primary hr {
- border-top-color: #9fcdff;
-}
-
-.alert-primary .alert-link {
- color: #002752;
-}
-
-.alert-secondary {
- color: #383d41;
- background-color: #e2e3e5;
- border-color: #d6d8db;
-}
-
-.alert-secondary hr {
- border-top-color: #c8cbcf;
-}
-
-.alert-secondary .alert-link {
- color: #202326;
-}
-
-.alert-success {
- color: #155724;
- background-color: #d4edda;
- border-color: #c3e6cb;
-}
-
-.alert-success hr {
- border-top-color: #b1dfbb;
-}
-
-.alert-success .alert-link {
- color: #0b2e13;
-}
-
-.alert-info {
- color: #0c5460;
- background-color: #d1ecf1;
- border-color: #bee5eb;
-}
-
-.alert-info hr {
- border-top-color: #abdde5;
-}
-
-.alert-info .alert-link {
- color: #062c33;
-}
-
-.alert-warning {
- color: #856404;
- background-color: #fff3cd;
- border-color: #ffeeba;
-}
-
-.alert-warning hr {
- border-top-color: #ffe8a1;
-}
-
-.alert-warning .alert-link {
- color: #533f03;
-}
-
-.alert-danger {
- color: #721c24;
- background-color: #f8d7da;
- border-color: #f5c6cb;
-}
-
-.alert-danger hr {
- border-top-color: #f1b0b7;
-}
-
-.alert-danger .alert-link {
- color: #491217;
-}
-
-.alert-light {
- color: #818182;
- background-color: #fefefe;
- border-color: #fdfdfe;
-}
-
-.alert-light hr {
- border-top-color: #ececf6;
-}
-
-.alert-light .alert-link {
- color: #686868;
-}
-
-.alert-dark {
- color: #1b1e21;
- background-color: #d6d8d9;
- border-color: #c6c8ca;
-}
-
-.alert-dark hr {
- border-top-color: #b9bbbe;
-}
-
-.alert-dark .alert-link {
- color: #040505;
-}
-
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-@keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-.progress {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- height: 1rem;
- overflow: hidden;
- font-size: 0.675rem;
- background-color: #e9ecef;
- border-radius: 0.25rem;
-}
-
-.progress-bar {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- background-color: #007bff;
- -webkit-transition: width 0.6s ease;
- transition: width 0.6s ease;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .progress-bar {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.progress-bar-striped {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-size: 1rem 1rem;
-}
-
-.progress-bar-animated {
- -webkit-animation: progress-bar-stripes 1s linear infinite;
- animation: progress-bar-stripes 1s linear infinite;
-}
-
-.media {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: start;
- -ms-flex-align: start;
- align-items: flex-start;
-}
-
-.media-body {
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1;
-}
-
-.list-group {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
-}
-
-.list-group-item-action {
- width: 100%;
- color: #495057;
- text-align: inherit;
-}
-
-.list-group-item-action:hover,
-.list-group-item-action:focus {
- color: #495057;
- text-decoration: none;
- background-color: #f8f9fa;
-}
-
-.list-group-item-action:active {
- color: #212529;
- background-color: #e9ecef;
-}
-
-.list-group-item {
- position: relative;
- display: block;
- padding: 0.75rem 1.25rem;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, 0.125);
-}
-
-.list-group-item:first-child {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
-}
-
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem;
-}
-
-.list-group-item:hover,
-.list-group-item:focus {
- z-index: 1;
- text-decoration: none;
-}
-
-.list-group-item.disabled,
-.list-group-item:disabled {
- color: #6c757d;
- background-color: #fff;
-}
-
-.list-group-item.active {
- z-index: 2;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.list-group-flush .list-group-item {
- border-right: 0;
- border-left: 0;
- border-radius: 0;
-}
-
-.list-group-flush:first-child .list-group-item:first-child {
- border-top: 0;
-}
-
-.list-group-flush:last-child .list-group-item:last-child {
- border-bottom: 0;
-}
-
-.list-group-item-primary {
- color: #004085;
- background-color: #b8daff;
-}
-
-.list-group-item-primary.list-group-item-action:hover,
-.list-group-item-primary.list-group-item-action:focus {
- color: #004085;
- background-color: #9fcdff;
-}
-
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #004085;
- border-color: #004085;
-}
-
-.list-group-item-secondary {
- color: #383d41;
- background-color: #d6d8db;
-}
-
-.list-group-item-secondary.list-group-item-action:hover,
-.list-group-item-secondary.list-group-item-action:focus {
- color: #383d41;
- background-color: #c8cbcf;
-}
-
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #383d41;
- border-color: #383d41;
-}
-
-.list-group-item-success {
- color: #155724;
- background-color: #c3e6cb;
-}
-
-.list-group-item-success.list-group-item-action:hover,
-.list-group-item-success.list-group-item-action:focus {
- color: #155724;
- background-color: #b1dfbb;
-}
-
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #155724;
- border-color: #155724;
-}
-
-.list-group-item-info {
- color: #0c5460;
- background-color: #bee5eb;
-}
-
-.list-group-item-info.list-group-item-action:hover,
-.list-group-item-info.list-group-item-action:focus {
- color: #0c5460;
- background-color: #abdde5;
-}
-
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #0c5460;
- border-color: #0c5460;
-}
-
-.list-group-item-warning {
- color: #856404;
- background-color: #ffeeba;
-}
-
-.list-group-item-warning.list-group-item-action:hover,
-.list-group-item-warning.list-group-item-action:focus {
- color: #856404;
- background-color: #ffe8a1;
-}
-
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #856404;
- border-color: #856404;
-}
-
-.list-group-item-danger {
- color: #721c24;
- background-color: #f5c6cb;
-}
-
-.list-group-item-danger.list-group-item-action:hover,
-.list-group-item-danger.list-group-item-action:focus {
- color: #721c24;
- background-color: #f1b0b7;
-}
-
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #721c24;
- border-color: #721c24;
-}
-
-.list-group-item-light {
- color: #818182;
- background-color: #fdfdfe;
-}
-
-.list-group-item-light.list-group-item-action:hover,
-.list-group-item-light.list-group-item-action:focus {
- color: #818182;
- background-color: #ececf6;
-}
-
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #818182;
- border-color: #818182;
-}
-
-.list-group-item-dark {
- color: #1b1e21;
- background-color: #c6c8ca;
-}
-
-.list-group-item-dark.list-group-item-action:hover,
-.list-group-item-dark.list-group-item-action:focus {
- color: #1b1e21;
- background-color: #b9bbbe;
-}
-
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #1b1e21;
- border-color: #1b1e21;
-}
-
-.close {
- float: right;
- font-size: 1.35rem;
- font-weight: 700;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: .5;
-}
-
-.close:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-
-.close:not(:disabled):not(.disabled):hover,
-.close:not(:disabled):not(.disabled):focus {
- color: #000;
- text-decoration: none;
- opacity: .75;
-}
-
-button.close {
- padding: 0;
- background-color: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-
-.modal-open {
- overflow: hidden;
-}
-
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- display: none;
- overflow: hidden;
- outline: 0;
-}
-
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 0.5rem;
- pointer-events: none;
-}
-
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform 0.3s ease-out;
- transition: -webkit-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
- transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
- -webkit-transform: translate(0, -25%);
- transform: translate(0, -25%);
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .modal.fade .modal-dialog {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.modal.show .modal-dialog {
- -webkit-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-
-.modal-dialog-centered {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- min-height: calc(100% - (0.5rem * 2));
-}
-
-.modal-content {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- width: 100%;
- pointer-events: auto;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 0.3rem;
- outline: 0;
-}
-
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000;
-}
-
-.modal-backdrop.fade {
- opacity: 0;
-}
-
-.modal-backdrop.show {
- opacity: 0.5;
-}
-
-.modal-header {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: start;
- -ms-flex-align: start;
- align-items: flex-start;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
- padding: 1rem;
- border-bottom: 1px solid #e9ecef;
- border-top-left-radius: 0.3rem;
- border-top-right-radius: 0.3rem;
-}
-
-.modal-header .close {
- padding: 1rem;
- margin: -1rem -1rem -1rem auto;
-}
-
-.modal-title {
- margin-bottom: 0;
- line-height: 1.6;
-}
-
-.modal-body {
- position: relative;
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- padding: 1rem;
-}
-
-.modal-footer {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: end;
- -ms-flex-pack: end;
- justify-content: flex-end;
- padding: 1rem;
- border-top: 1px solid #e9ecef;
-}
-
-.modal-footer > :not(:first-child) {
- margin-left: .25rem;
-}
-
-.modal-footer > :not(:last-child) {
- margin-right: .25rem;
-}
-
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-
-@media (min-width: 576px) {
- .modal-dialog {
- max-width: 500px;
- margin: 1.75rem auto;
- }
-
- .modal-dialog-centered {
- min-height: calc(100% - (1.75rem * 2));
- }
-
- .modal-sm {
- max-width: 300px;
- }
-}
-
-@media (min-width: 992px) {
- .modal-lg {
- max-width: 800px;
- }
-}
-
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- margin: 0;
- font-family: "Raleway", sans-serif;
- font-style: normal;
- font-weight: 400;
- line-height: 1.6;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: 0.7875rem;
- word-wrap: break-word;
- opacity: 0;
-}
-
-.tooltip.show {
- opacity: 0.9;
-}
-
-.tooltip .arrow {
- position: absolute;
- display: block;
- width: 0.8rem;
- height: 0.4rem;
-}
-
-.tooltip .arrow::before {
- position: absolute;
- content: "";
- border-color: transparent;
- border-style: solid;
-}
-
-.bs-tooltip-top,
-.bs-tooltip-auto[x-placement^="top"] {
- padding: 0.4rem 0;
-}
-
-.bs-tooltip-top .arrow,
-.bs-tooltip-auto[x-placement^="top"] .arrow {
- bottom: 0;
-}
-
-.bs-tooltip-top .arrow::before,
-.bs-tooltip-auto[x-placement^="top"] .arrow::before {
- top: 0;
- border-width: 0.4rem 0.4rem 0;
- border-top-color: #000;
-}
-
-.bs-tooltip-right,
-.bs-tooltip-auto[x-placement^="right"] {
- padding: 0 0.4rem;
-}
-
-.bs-tooltip-right .arrow,
-.bs-tooltip-auto[x-placement^="right"] .arrow {
- left: 0;
- width: 0.4rem;
- height: 0.8rem;
-}
-
-.bs-tooltip-right .arrow::before,
-.bs-tooltip-auto[x-placement^="right"] .arrow::before {
- right: 0;
- border-width: 0.4rem 0.4rem 0.4rem 0;
- border-right-color: #000;
-}
-
-.bs-tooltip-bottom,
-.bs-tooltip-auto[x-placement^="bottom"] {
- padding: 0.4rem 0;
-}
-
-.bs-tooltip-bottom .arrow,
-.bs-tooltip-auto[x-placement^="bottom"] .arrow {
- top: 0;
-}
-
-.bs-tooltip-bottom .arrow::before,
-.bs-tooltip-auto[x-placement^="bottom"] .arrow::before {
- bottom: 0;
- border-width: 0 0.4rem 0.4rem;
- border-bottom-color: #000;
-}
-
-.bs-tooltip-left,
-.bs-tooltip-auto[x-placement^="left"] {
- padding: 0 0.4rem;
-}
-
-.bs-tooltip-left .arrow,
-.bs-tooltip-auto[x-placement^="left"] .arrow {
- right: 0;
- width: 0.4rem;
- height: 0.8rem;
-}
-
-.bs-tooltip-left .arrow::before,
-.bs-tooltip-auto[x-placement^="left"] .arrow::before {
- left: 0;
- border-width: 0.4rem 0 0.4rem 0.4rem;
- border-left-color: #000;
-}
-
-.tooltip-inner {
- max-width: 200px;
- padding: 0.25rem 0.5rem;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: 0.25rem;
-}
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: block;
- max-width: 276px;
- font-family: "Raleway", sans-serif;
- font-style: normal;
- font-weight: 400;
- line-height: 1.6;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: 0.7875rem;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 0.3rem;
-}
-
-.popover .arrow {
- position: absolute;
- display: block;
- width: 1rem;
- height: 0.5rem;
- margin: 0 0.3rem;
-}
-
-.popover .arrow::before,
-.popover .arrow::after {
- position: absolute;
- display: block;
- content: "";
- border-color: transparent;
- border-style: solid;
-}
-
-.bs-popover-top,
-.bs-popover-auto[x-placement^="top"] {
- margin-bottom: 0.5rem;
-}
-
-.bs-popover-top .arrow,
-.bs-popover-auto[x-placement^="top"] .arrow {
- bottom: calc((0.5rem + 1px) * -1);
-}
-
-.bs-popover-top .arrow::before,
-.bs-popover-auto[x-placement^="top"] .arrow::before,
-.bs-popover-top .arrow::after,
-.bs-popover-auto[x-placement^="top"] .arrow::after {
- border-width: 0.5rem 0.5rem 0;
-}
-
-.bs-popover-top .arrow::before,
-.bs-popover-auto[x-placement^="top"] .arrow::before {
- bottom: 0;
- border-top-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-top .arrow::after,
-.bs-popover-auto[x-placement^="top"] .arrow::after {
- bottom: 1px;
- border-top-color: #fff;
-}
-
-.bs-popover-right,
-.bs-popover-auto[x-placement^="right"] {
- margin-left: 0.5rem;
-}
-
-.bs-popover-right .arrow,
-.bs-popover-auto[x-placement^="right"] .arrow {
- left: calc((0.5rem + 1px) * -1);
- width: 0.5rem;
- height: 1rem;
- margin: 0.3rem 0;
-}
-
-.bs-popover-right .arrow::before,
-.bs-popover-auto[x-placement^="right"] .arrow::before,
-.bs-popover-right .arrow::after,
-.bs-popover-auto[x-placement^="right"] .arrow::after {
- border-width: 0.5rem 0.5rem 0.5rem 0;
-}
-
-.bs-popover-right .arrow::before,
-.bs-popover-auto[x-placement^="right"] .arrow::before {
- left: 0;
- border-right-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-right .arrow::after,
-.bs-popover-auto[x-placement^="right"] .arrow::after {
- left: 1px;
- border-right-color: #fff;
-}
-
-.bs-popover-bottom,
-.bs-popover-auto[x-placement^="bottom"] {
- margin-top: 0.5rem;
-}
-
-.bs-popover-bottom .arrow,
-.bs-popover-auto[x-placement^="bottom"] .arrow {
- top: calc((0.5rem + 1px) * -1);
-}
-
-.bs-popover-bottom .arrow::before,
-.bs-popover-auto[x-placement^="bottom"] .arrow::before,
-.bs-popover-bottom .arrow::after,
-.bs-popover-auto[x-placement^="bottom"] .arrow::after {
- border-width: 0 0.5rem 0.5rem 0.5rem;
-}
-
-.bs-popover-bottom .arrow::before,
-.bs-popover-auto[x-placement^="bottom"] .arrow::before {
- top: 0;
- border-bottom-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-bottom .arrow::after,
-.bs-popover-auto[x-placement^="bottom"] .arrow::after {
- top: 1px;
- border-bottom-color: #fff;
-}
-
-.bs-popover-bottom .popover-header::before,
-.bs-popover-auto[x-placement^="bottom"] .popover-header::before {
- position: absolute;
- top: 0;
- left: 50%;
- display: block;
- width: 1rem;
- margin-left: -0.5rem;
- content: "";
- border-bottom: 1px solid #f7f7f7;
-}
-
-.bs-popover-left,
-.bs-popover-auto[x-placement^="left"] {
- margin-right: 0.5rem;
-}
-
-.bs-popover-left .arrow,
-.bs-popover-auto[x-placement^="left"] .arrow {
- right: calc((0.5rem + 1px) * -1);
- width: 0.5rem;
- height: 1rem;
- margin: 0.3rem 0;
-}
-
-.bs-popover-left .arrow::before,
-.bs-popover-auto[x-placement^="left"] .arrow::before,
-.bs-popover-left .arrow::after,
-.bs-popover-auto[x-placement^="left"] .arrow::after {
- border-width: 0.5rem 0 0.5rem 0.5rem;
-}
-
-.bs-popover-left .arrow::before,
-.bs-popover-auto[x-placement^="left"] .arrow::before {
- right: 0;
- border-left-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-left .arrow::after,
-.bs-popover-auto[x-placement^="left"] .arrow::after {
- right: 1px;
- border-left-color: #fff;
-}
-
-.popover-header {
- padding: 0.5rem 0.75rem;
- margin-bottom: 0;
- font-size: 0.9rem;
- color: inherit;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-top-left-radius: calc(0.3rem - 1px);
- border-top-right-radius: calc(0.3rem - 1px);
-}
-
-.popover-header:empty {
- display: none;
-}
-
-.popover-body {
- padding: 0.5rem 0.75rem;
- color: #212529;
-}
-
-.carousel {
- position: relative;
-}
-
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-
-.carousel-item {
- position: relative;
- display: none;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- width: 100%;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000px;
- perspective: 1000px;
-}
-
-.carousel-item.active,
-.carousel-item-next,
-.carousel-item-prev {
- display: block;
- -webkit-transition: -webkit-transform 0.6s ease;
- transition: -webkit-transform 0.6s ease;
- transition: transform 0.6s ease;
- transition: transform 0.6s ease, -webkit-transform 0.6s ease;
-}
-
-@media screen and (prefers-reduced-motion: reduce) {
- .carousel-item.active,
- .carousel-item-next,
- .carousel-item-prev {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.carousel-item-next,
-.carousel-item-prev {
- position: absolute;
- top: 0;
-}
-
-.carousel-item-next.carousel-item-left,
-.carousel-item-prev.carousel-item-right {
- -webkit-transform: translateX(0);
- transform: translateX(0);
-}
-
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-item-next.carousel-item-left,
- .carousel-item-prev.carousel-item-right {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
-}
-
-.carousel-item-next,
-.active.carousel-item-right {
- -webkit-transform: translateX(100%);
- transform: translateX(100%);
-}
-
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-item-next,
- .active.carousel-item-right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
-}
-
-.carousel-item-prev,
-.active.carousel-item-left {
- -webkit-transform: translateX(-100%);
- transform: translateX(-100%);
-}
-
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-item-prev,
- .active.carousel-item-left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
-}
-
-.carousel-fade .carousel-item {
- opacity: 0;
- -webkit-transition-duration: .6s;
- transition-duration: .6s;
- -webkit-transition-property: opacity;
- transition-property: opacity;
-}
-
-.carousel-fade .carousel-item.active,
-.carousel-fade .carousel-item-next.carousel-item-left,
-.carousel-fade .carousel-item-prev.carousel-item-right {
- opacity: 1;
-}
-
-.carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-right {
- opacity: 0;
-}
-
-.carousel-fade .carousel-item-next,
-.carousel-fade .carousel-item-prev,
-.carousel-fade .carousel-item.active,
-.carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-prev {
- -webkit-transform: translateX(0);
- transform: translateX(0);
-}
-
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-fade .carousel-item-next,
- .carousel-fade .carousel-item-prev,
- .carousel-fade .carousel-item.active,
- .carousel-fade .active.carousel-item-left,
- .carousel-fade .active.carousel-item-prev {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
-}
-
-.carousel-control-prev,
-.carousel-control-next {
- position: absolute;
- top: 0;
- bottom: 0;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- width: 15%;
- color: #fff;
- text-align: center;
- opacity: 0.5;
-}
-
-.carousel-control-prev:hover,
-.carousel-control-prev:focus,
-.carousel-control-next:hover,
-.carousel-control-next:focus {
- color: #fff;
- text-decoration: none;
- outline: 0;
- opacity: .9;
-}
-
-.carousel-control-prev {
- left: 0;
-}
-
-.carousel-control-next {
- right: 0;
-}
-
-.carousel-control-prev-icon,
-.carousel-control-next-icon {
- display: inline-block;
- width: 20px;
- height: 20px;
- background: transparent no-repeat center center;
- background-size: 100% 100%;
-}
-
-.carousel-control-prev-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E");
-}
-
-.carousel-control-next-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E");
-}
-
-.carousel-indicators {
- position: absolute;
- right: 0;
- bottom: 10px;
- left: 0;
- z-index: 15;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- padding-left: 0;
- margin-right: 15%;
- margin-left: 15%;
- list-style: none;
-}
-
-.carousel-indicators li {
- position: relative;
- -webkit-box-flex: 0;
- -ms-flex: 0 1 auto;
- flex: 0 1 auto;
- width: 30px;
- height: 3px;
- margin-right: 3px;
- margin-left: 3px;
- text-indent: -999px;
- cursor: pointer;
- background-color: rgba(255, 255, 255, 0.5);
-}
-
-.carousel-indicators li::before {
- position: absolute;
- top: -10px;
- left: 0;
- display: inline-block;
- width: 100%;
- height: 10px;
- content: "";
-}
-
-.carousel-indicators li::after {
- position: absolute;
- bottom: -10px;
- left: 0;
- display: inline-block;
- width: 100%;
- height: 10px;
- content: "";
-}
-
-.carousel-indicators .active {
- background-color: #fff;
-}
-
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
-}
-
-.align-baseline {
- vertical-align: baseline !important;
-}
-
-.align-top {
- vertical-align: top !important;
-}
-
-.align-middle {
- vertical-align: middle !important;
-}
-
-.align-bottom {
- vertical-align: bottom !important;
-}
-
-.align-text-bottom {
- vertical-align: text-bottom !important;
-}
-
-.align-text-top {
- vertical-align: text-top !important;
-}
-
-.bg-primary {
- background-color: #007bff !important;
-}
-
-a.bg-primary:hover,
-a.bg-primary:focus,
-button.bg-primary:hover,
-button.bg-primary:focus {
- background-color: #0062cc !important;
-}
-
-.bg-secondary {
- background-color: #6c757d !important;
-}
-
-a.bg-secondary:hover,
-a.bg-secondary:focus,
-button.bg-secondary:hover,
-button.bg-secondary:focus {
- background-color: #545b62 !important;
-}
-
-.bg-success {
- background-color: #28a745 !important;
-}
-
-a.bg-success:hover,
-a.bg-success:focus,
-button.bg-success:hover,
-button.bg-success:focus {
- background-color: #1e7e34 !important;
-}
-
-.bg-info {
- background-color: #17a2b8 !important;
-}
-
-a.bg-info:hover,
-a.bg-info:focus,
-button.bg-info:hover,
-button.bg-info:focus {
- background-color: #117a8b !important;
-}
-
-.bg-warning {
- background-color: #ffc107 !important;
-}
-
-a.bg-warning:hover,
-a.bg-warning:focus,
-button.bg-warning:hover,
-button.bg-warning:focus {
- background-color: #d39e00 !important;
-}
-
-.bg-danger {
- background-color: #dc3545 !important;
-}
-
-a.bg-danger:hover,
-a.bg-danger:focus,
-button.bg-danger:hover,
-button.bg-danger:focus {
- background-color: #bd2130 !important;
-}
-
-.bg-light {
- background-color: #f8f9fa !important;
-}
-
-a.bg-light:hover,
-a.bg-light:focus,
-button.bg-light:hover,
-button.bg-light:focus {
- background-color: #dae0e5 !important;
-}
-
-.bg-dark {
- background-color: #343a40 !important;
-}
-
-a.bg-dark:hover,
-a.bg-dark:focus,
-button.bg-dark:hover,
-button.bg-dark:focus {
- background-color: #1d2124 !important;
-}
-
-.bg-white {
- background-color: #fff !important;
-}
-
-.bg-transparent {
- background-color: transparent !important;
-}
-
-.border {
- border: 1px solid #dee2e6 !important;
-}
-
-.border-top {
- border-top: 1px solid #dee2e6 !important;
-}
-
-.border-right {
- border-right: 1px solid #dee2e6 !important;
-}
-
-.border-bottom {
- border-bottom: 1px solid #dee2e6 !important;
-}
-
-.border-left {
- border-left: 1px solid #dee2e6 !important;
-}
-
-.border-0 {
- border: 0 !important;
-}
-
-.border-top-0 {
- border-top: 0 !important;
-}
-
-.border-right-0 {
- border-right: 0 !important;
-}
-
-.border-bottom-0 {
- border-bottom: 0 !important;
-}
-
-.border-left-0 {
- border-left: 0 !important;
-}
-
-.border-primary {
- border-color: #007bff !important;
-}
-
-.border-secondary {
- border-color: #6c757d !important;
-}
-
-.border-success {
- border-color: #28a745 !important;
-}
-
-.border-info {
- border-color: #17a2b8 !important;
-}
-
-.border-warning {
- border-color: #ffc107 !important;
-}
-
-.border-danger {
- border-color: #dc3545 !important;
-}
-
-.border-light {
- border-color: #f8f9fa !important;
-}
-
-.border-dark {
- border-color: #343a40 !important;
-}
-
-.border-white {
- border-color: #fff !important;
-}
-
-.rounded {
- border-radius: 0.25rem !important;
-}
-
-.rounded-top {
- border-top-left-radius: 0.25rem !important;
- border-top-right-radius: 0.25rem !important;
-}
-
-.rounded-right {
- border-top-right-radius: 0.25rem !important;
- border-bottom-right-radius: 0.25rem !important;
-}
-
-.rounded-bottom {
- border-bottom-right-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important;
-}
-
-.rounded-left {
- border-top-left-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important;
-}
-
-.rounded-circle {
- border-radius: 50% !important;
-}
-
-.rounded-0 {
- border-radius: 0 !important;
-}
-
-.clearfix::after {
- display: block;
- clear: both;
- content: "";
-}
-
-.d-none {
- display: none !important;
-}
-
-.d-inline {
- display: inline !important;
-}
-
-.d-inline-block {
- display: inline-block !important;
-}
-
-.d-block {
- display: block !important;
-}
-
-.d-table {
- display: table !important;
-}
-
-.d-table-row {
- display: table-row !important;
-}
-
-.d-table-cell {
- display: table-cell !important;
-}
-
-.d-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
-}
-
-.d-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
-}
-
-@media (min-width: 576px) {
- .d-sm-none {
- display: none !important;
- }
-
- .d-sm-inline {
- display: inline !important;
- }
-
- .d-sm-inline-block {
- display: inline-block !important;
- }
-
- .d-sm-block {
- display: block !important;
- }
-
- .d-sm-table {
- display: table !important;
- }
-
- .d-sm-table-row {
- display: table-row !important;
- }
-
- .d-sm-table-cell {
- display: table-cell !important;
- }
-
- .d-sm-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- }
-
- .d-sm-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 768px) {
- .d-md-none {
- display: none !important;
- }
-
- .d-md-inline {
- display: inline !important;
- }
-
- .d-md-inline-block {
- display: inline-block !important;
- }
-
- .d-md-block {
- display: block !important;
- }
-
- .d-md-table {
- display: table !important;
- }
-
- .d-md-table-row {
- display: table-row !important;
- }
-
- .d-md-table-cell {
- display: table-cell !important;
- }
-
- .d-md-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- }
-
- .d-md-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 992px) {
- .d-lg-none {
- display: none !important;
- }
-
- .d-lg-inline {
- display: inline !important;
- }
-
- .d-lg-inline-block {
- display: inline-block !important;
- }
-
- .d-lg-block {
- display: block !important;
- }
-
- .d-lg-table {
- display: table !important;
- }
-
- .d-lg-table-row {
- display: table-row !important;
- }
-
- .d-lg-table-cell {
- display: table-cell !important;
- }
-
- .d-lg-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- }
-
- .d-lg-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 1200px) {
- .d-xl-none {
- display: none !important;
- }
-
- .d-xl-inline {
- display: inline !important;
- }
-
- .d-xl-inline-block {
- display: inline-block !important;
- }
-
- .d-xl-block {
- display: block !important;
- }
-
- .d-xl-table {
- display: table !important;
- }
-
- .d-xl-table-row {
- display: table-row !important;
- }
-
- .d-xl-table-cell {
- display: table-cell !important;
- }
-
- .d-xl-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- }
-
- .d-xl-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-@media print {
- .d-print-none {
- display: none !important;
- }
-
- .d-print-inline {
- display: inline !important;
- }
-
- .d-print-inline-block {
- display: inline-block !important;
- }
-
- .d-print-block {
- display: block !important;
- }
-
- .d-print-table {
- display: table !important;
- }
-
- .d-print-table-row {
- display: table-row !important;
- }
-
- .d-print-table-cell {
- display: table-cell !important;
- }
-
- .d-print-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- }
-
- .d-print-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important;
- }
-}
-
-.embed-responsive {
- position: relative;
- display: block;
- width: 100%;
- padding: 0;
- overflow: hidden;
-}
-
-.embed-responsive::before {
- display: block;
- content: "";
-}
-
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-
-.embed-responsive-21by9::before {
- padding-top: 42.85714286%;
-}
-
-.embed-responsive-16by9::before {
- padding-top: 56.25%;
-}
-
-.embed-responsive-4by3::before {
- padding-top: 75%;
-}
-
-.embed-responsive-1by1::before {
- padding-top: 100%;
-}
-
-.flex-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important;
-}
-
-.flex-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important;
-}
-
-.flex-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
-}
-
-.flex-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
-}
-
-.flex-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
-}
-
-.flex-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
-}
-
-.flex-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
-}
-
-.flex-fill {
- -webkit-box-flex: 1 !important;
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
-}
-
-.flex-grow-0 {
- -webkit-box-flex: 0 !important;
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
-}
-
-.flex-grow-1 {
- -webkit-box-flex: 1 !important;
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
-}
-
-.flex-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
-}
-
-.flex-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
-}
-
-.justify-content-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
-}
-
-.justify-content-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
-}
-
-.justify-content-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important;
-}
-
-.justify-content-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
-}
-
-.justify-content-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
-}
-
-.align-items-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important;
-}
-
-.align-items-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important;
-}
-
-.align-items-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important;
-}
-
-.align-items-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
-}
-
-.align-items-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
-}
-
-.align-content-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
-}
-
-.align-content-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
-}
-
-.align-content-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
-}
-
-.align-content-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
-}
-
-.align-content-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
-}
-
-.align-content-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
-}
-
-.align-self-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
-}
-
-.align-self-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
-}
-
-.align-self-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
-}
-
-.align-self-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
-}
-
-.align-self-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
-}
-
-.align-self-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
-}
-
-@media (min-width: 576px) {
- .flex-sm-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
-
- .flex-sm-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
-
- .flex-sm-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
-
- .flex-sm-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
-
- .flex-sm-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
-
- .flex-sm-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
-
- .flex-sm-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-sm-fill {
- -webkit-box-flex: 1 !important;
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
-
- .flex-sm-grow-0 {
- -webkit-box-flex: 0 !important;
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
-
- .flex-sm-grow-1 {
- -webkit-box-flex: 1 !important;
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
-
- .flex-sm-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
-
- .flex-sm-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
-
- .justify-content-sm-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
-
- .justify-content-sm-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
-
- .justify-content-sm-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
-
- .justify-content-sm-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
-
- .justify-content-sm-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
-
- .align-items-sm-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
-
- .align-items-sm-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
-
- .align-items-sm-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important;
- }
-
- .align-items-sm-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
-
- .align-items-sm-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
-
- .align-content-sm-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
-
- .align-content-sm-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
-
- .align-content-sm-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
-
- .align-content-sm-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
-
- .align-content-sm-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
-
- .align-content-sm-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
-
- .align-self-sm-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
-
- .align-self-sm-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
-
- .align-self-sm-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
-
- .align-self-sm-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
-
- .align-self-sm-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
-
- .align-self-sm-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 768px) {
- .flex-md-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
-
- .flex-md-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
-
- .flex-md-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
-
- .flex-md-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
-
- .flex-md-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
-
- .flex-md-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
-
- .flex-md-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-md-fill {
- -webkit-box-flex: 1 !important;
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
-
- .flex-md-grow-0 {
- -webkit-box-flex: 0 !important;
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
-
- .flex-md-grow-1 {
- -webkit-box-flex: 1 !important;
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
-
- .flex-md-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
-
- .flex-md-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
-
- .justify-content-md-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
-
- .justify-content-md-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
-
- .justify-content-md-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
-
- .justify-content-md-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
-
- .justify-content-md-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
-
- .align-items-md-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
-
- .align-items-md-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
-
- .align-items-md-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important;
- }
-
- .align-items-md-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
-
- .align-items-md-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
-
- .align-content-md-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
-
- .align-content-md-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
-
- .align-content-md-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
-
- .align-content-md-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
-
- .align-content-md-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
-
- .align-content-md-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
-
- .align-self-md-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
-
- .align-self-md-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
-
- .align-self-md-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
-
- .align-self-md-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
-
- .align-self-md-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
-
- .align-self-md-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 992px) {
- .flex-lg-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
-
- .flex-lg-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
-
- .flex-lg-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
-
- .flex-lg-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
-
- .flex-lg-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
-
- .flex-lg-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
-
- .flex-lg-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-lg-fill {
- -webkit-box-flex: 1 !important;
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
-
- .flex-lg-grow-0 {
- -webkit-box-flex: 0 !important;
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
-
- .flex-lg-grow-1 {
- -webkit-box-flex: 1 !important;
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
-
- .flex-lg-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
-
- .flex-lg-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
-
- .justify-content-lg-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
-
- .justify-content-lg-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
-
- .justify-content-lg-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
-
- .justify-content-lg-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
-
- .justify-content-lg-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
-
- .align-items-lg-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
-
- .align-items-lg-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
-
- .align-items-lg-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important;
- }
-
- .align-items-lg-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
-
- .align-items-lg-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
-
- .align-content-lg-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
-
- .align-content-lg-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
-
- .align-content-lg-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
-
- .align-content-lg-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
-
- .align-content-lg-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
-
- .align-content-lg-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
-
- .align-self-lg-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
-
- .align-self-lg-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
-
- .align-self-lg-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
-
- .align-self-lg-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
-
- .align-self-lg-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
-
- .align-self-lg-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 1200px) {
- .flex-xl-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important;
- }
-
- .flex-xl-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important;
- }
-
- .flex-xl-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important;
- }
-
- .flex-xl-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important;
- }
-
- .flex-xl-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important;
- }
-
- .flex-xl-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important;
- }
-
- .flex-xl-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-xl-fill {
- -webkit-box-flex: 1 !important;
- -ms-flex: 1 1 auto !important;
- flex: 1 1 auto !important;
- }
-
- .flex-xl-grow-0 {
- -webkit-box-flex: 0 !important;
- -ms-flex-positive: 0 !important;
- flex-grow: 0 !important;
- }
-
- .flex-xl-grow-1 {
- -webkit-box-flex: 1 !important;
- -ms-flex-positive: 1 !important;
- flex-grow: 1 !important;
- }
-
- .flex-xl-shrink-0 {
- -ms-flex-negative: 0 !important;
- flex-shrink: 0 !important;
- }
-
- .flex-xl-shrink-1 {
- -ms-flex-negative: 1 !important;
- flex-shrink: 1 !important;
- }
-
- .justify-content-xl-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important;
- }
-
- .justify-content-xl-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important;
- }
-
- .justify-content-xl-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important;
- }
-
- .justify-content-xl-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important;
- }
-
- .justify-content-xl-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important;
- }
-
- .align-items-xl-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important;
- }
-
- .align-items-xl-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important;
- }
-
- .align-items-xl-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important;
- }
-
- .align-items-xl-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important;
- }
-
- .align-items-xl-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important;
- }
-
- .align-content-xl-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important;
- }
-
- .align-content-xl-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important;
- }
-
- .align-content-xl-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important;
- }
-
- .align-content-xl-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important;
- }
-
- .align-content-xl-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important;
- }
-
- .align-content-xl-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important;
- }
-
- .align-self-xl-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important;
- }
-
- .align-self-xl-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important;
- }
-
- .align-self-xl-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important;
- }
-
- .align-self-xl-center {
- -ms-flex-item-align: center !important;
- align-self: center !important;
- }
-
- .align-self-xl-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important;
- }
-
- .align-self-xl-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important;
- }
-}
-
-.float-left {
- float: left !important;
-}
-
-.float-right {
- float: right !important;
-}
-
-.float-none {
- float: none !important;
-}
-
-@media (min-width: 576px) {
- .float-sm-left {
- float: left !important;
- }
-
- .float-sm-right {
- float: right !important;
- }
-
- .float-sm-none {
- float: none !important;
- }
-}
-
-@media (min-width: 768px) {
- .float-md-left {
- float: left !important;
- }
-
- .float-md-right {
- float: right !important;
- }
-
- .float-md-none {
- float: none !important;
- }
-}
-
-@media (min-width: 992px) {
- .float-lg-left {
- float: left !important;
- }
-
- .float-lg-right {
- float: right !important;
- }
-
- .float-lg-none {
- float: none !important;
- }
-}
-
-@media (min-width: 1200px) {
- .float-xl-left {
- float: left !important;
- }
-
- .float-xl-right {
- float: right !important;
- }
-
- .float-xl-none {
- float: none !important;
- }
-}
-
-.position-static {
- position: static !important;
-}
-
-.position-relative {
- position: relative !important;
-}
-
-.position-absolute {
- position: absolute !important;
-}
-
-.position-fixed {
- position: fixed !important;
-}
-
-.position-sticky {
- position: -webkit-sticky !important;
- position: sticky !important;
-}
-
-.fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-
-.fixed-bottom {
- position: fixed;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030;
-}
-
-@supports ((position: -webkit-sticky) or (position: sticky)) {
- .sticky-top {
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- z-index: 1020;
- }
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0;
-}
-
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: normal;
-}
-
-.shadow-sm {
- -webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
-}
-
-.shadow {
- -webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
-}
-
-.shadow-lg {
- -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
-}
-
-.shadow-none {
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
-}
-
-.w-25 {
- width: 25% !important;
-}
-
-.w-50 {
- width: 50% !important;
-}
-
-.w-75 {
- width: 75% !important;
-}
-
-.w-100 {
- width: 100% !important;
-}
-
-.w-auto {
- width: auto !important;
-}
-
-.h-25 {
- height: 25% !important;
-}
-
-.h-50 {
- height: 50% !important;
-}
-
-.h-75 {
- height: 75% !important;
-}
-
-.h-100 {
- height: 100% !important;
-}
-
-.h-auto {
- height: auto !important;
-}
-
-.mw-100 {
- max-width: 100% !important;
-}
-
-.mh-100 {
- max-height: 100% !important;
-}
-
-.m-0 {
- margin: 0 !important;
-}
-
-.mt-0,
-.my-0 {
- margin-top: 0 !important;
-}
-
-.mr-0,
-.mx-0 {
- margin-right: 0 !important;
-}
-
-.mb-0,
-.my-0 {
- margin-bottom: 0 !important;
-}
-
-.ml-0,
-.mx-0 {
- margin-left: 0 !important;
-}
-
-.m-1 {
- margin: 0.25rem !important;
-}
-
-.mt-1,
-.my-1 {
- margin-top: 0.25rem !important;
-}
-
-.mr-1,
-.mx-1 {
- margin-right: 0.25rem !important;
-}
-
-.mb-1,
-.my-1 {
- margin-bottom: 0.25rem !important;
-}
-
-.ml-1,
-.mx-1 {
- margin-left: 0.25rem !important;
-}
-
-.m-2 {
- margin: 0.5rem !important;
-}
-
-.mt-2,
-.my-2 {
- margin-top: 0.5rem !important;
-}
-
-.mr-2,
-.mx-2 {
- margin-right: 0.5rem !important;
-}
-
-.mb-2,
-.my-2 {
- margin-bottom: 0.5rem !important;
-}
-
-.ml-2,
-.mx-2 {
- margin-left: 0.5rem !important;
-}
-
-.m-3 {
- margin: 1rem !important;
-}
-
-.mt-3,
-.my-3 {
- margin-top: 1rem !important;
-}
-
-.mr-3,
-.mx-3 {
- margin-right: 1rem !important;
-}
-
-.mb-3,
-.my-3 {
- margin-bottom: 1rem !important;
-}
-
-.ml-3,
-.mx-3 {
- margin-left: 1rem !important;
-}
-
-.m-4 {
- margin: 1.5rem !important;
-}
-
-.mt-4,
-.my-4 {
- margin-top: 1.5rem !important;
-}
-
-.mr-4,
-.mx-4 {
- margin-right: 1.5rem !important;
-}
-
-.mb-4,
-.my-4 {
- margin-bottom: 1.5rem !important;
-}
-
-.ml-4,
-.mx-4 {
- margin-left: 1.5rem !important;
-}
-
-.m-5 {
- margin: 3rem !important;
-}
-
-.mt-5,
-.my-5 {
- margin-top: 3rem !important;
-}
-
-.mr-5,
-.mx-5 {
- margin-right: 3rem !important;
-}
-
-.mb-5,
-.my-5 {
- margin-bottom: 3rem !important;
-}
-
-.ml-5,
-.mx-5 {
- margin-left: 3rem !important;
-}
-
-.p-0 {
- padding: 0 !important;
-}
-
-.pt-0,
-.py-0 {
- padding-top: 0 !important;
-}
-
-.pr-0,
-.px-0 {
- padding-right: 0 !important;
-}
-
-.pb-0,
-.py-0 {
- padding-bottom: 0 !important;
-}
-
-.pl-0,
-.px-0 {
- padding-left: 0 !important;
-}
-
-.p-1 {
- padding: 0.25rem !important;
-}
-
-.pt-1,
-.py-1 {
- padding-top: 0.25rem !important;
-}
-
-.pr-1,
-.px-1 {
- padding-right: 0.25rem !important;
-}
-
-.pb-1,
-.py-1 {
- padding-bottom: 0.25rem !important;
-}
-
-.pl-1,
-.px-1 {
- padding-left: 0.25rem !important;
-}
-
-.p-2 {
- padding: 0.5rem !important;
-}
-
-.pt-2,
-.py-2 {
- padding-top: 0.5rem !important;
-}
-
-.pr-2,
-.px-2 {
- padding-right: 0.5rem !important;
-}
-
-.pb-2,
-.py-2 {
- padding-bottom: 0.5rem !important;
-}
-
-.pl-2,
-.px-2 {
- padding-left: 0.5rem !important;
-}
-
-.p-3 {
- padding: 1rem !important;
-}
-
-.pt-3,
-.py-3 {
- padding-top: 1rem !important;
-}
-
-.pr-3,
-.px-3 {
- padding-right: 1rem !important;
-}
-
-.pb-3,
-.py-3 {
- padding-bottom: 1rem !important;
-}
-
-.pl-3,
-.px-3 {
- padding-left: 1rem !important;
-}
-
-.p-4 {
- padding: 1.5rem !important;
-}
-
-.pt-4,
-.py-4 {
- padding-top: 1.5rem !important;
-}
-
-.pr-4,
-.px-4 {
- padding-right: 1.5rem !important;
-}
-
-.pb-4,
-.py-4 {
- padding-bottom: 1.5rem !important;
-}
-
-.pl-4,
-.px-4 {
- padding-left: 1.5rem !important;
-}
-
-.p-5 {
- padding: 3rem !important;
-}
-
-.pt-5,
-.py-5 {
- padding-top: 3rem !important;
-}
-
-.pr-5,
-.px-5 {
- padding-right: 3rem !important;
-}
-
-.pb-5,
-.py-5 {
- padding-bottom: 3rem !important;
-}
-
-.pl-5,
-.px-5 {
- padding-left: 3rem !important;
-}
-
-.m-auto {
- margin: auto !important;
-}
-
-.mt-auto,
-.my-auto {
- margin-top: auto !important;
-}
-
-.mr-auto,
-.mx-auto {
- margin-right: auto !important;
-}
-
-.mb-auto,
-.my-auto {
- margin-bottom: auto !important;
-}
-
-.ml-auto,
-.mx-auto {
- margin-left: auto !important;
-}
-
-@media (min-width: 576px) {
- .m-sm-0 {
- margin: 0 !important;
- }
-
- .mt-sm-0,
- .my-sm-0 {
- margin-top: 0 !important;
- }
-
- .mr-sm-0,
- .mx-sm-0 {
- margin-right: 0 !important;
- }
-
- .mb-sm-0,
- .my-sm-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-sm-0,
- .mx-sm-0 {
- margin-left: 0 !important;
- }
-
- .m-sm-1 {
- margin: 0.25rem !important;
- }
-
- .mt-sm-1,
- .my-sm-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-sm-1,
- .mx-sm-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-sm-1,
- .my-sm-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-sm-1,
- .mx-sm-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-sm-2 {
- margin: 0.5rem !important;
- }
-
- .mt-sm-2,
- .my-sm-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-sm-2,
- .mx-sm-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-sm-2,
- .my-sm-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-sm-2,
- .mx-sm-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-sm-3 {
- margin: 1rem !important;
- }
-
- .mt-sm-3,
- .my-sm-3 {
- margin-top: 1rem !important;
- }
-
- .mr-sm-3,
- .mx-sm-3 {
- margin-right: 1rem !important;
- }
-
- .mb-sm-3,
- .my-sm-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-sm-3,
- .mx-sm-3 {
- margin-left: 1rem !important;
- }
-
- .m-sm-4 {
- margin: 1.5rem !important;
- }
-
- .mt-sm-4,
- .my-sm-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-sm-4,
- .mx-sm-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-sm-4,
- .my-sm-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-sm-4,
- .mx-sm-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-sm-5 {
- margin: 3rem !important;
- }
-
- .mt-sm-5,
- .my-sm-5 {
- margin-top: 3rem !important;
- }
-
- .mr-sm-5,
- .mx-sm-5 {
- margin-right: 3rem !important;
- }
-
- .mb-sm-5,
- .my-sm-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-sm-5,
- .mx-sm-5 {
- margin-left: 3rem !important;
- }
-
- .p-sm-0 {
- padding: 0 !important;
- }
-
- .pt-sm-0,
- .py-sm-0 {
- padding-top: 0 !important;
- }
-
- .pr-sm-0,
- .px-sm-0 {
- padding-right: 0 !important;
- }
-
- .pb-sm-0,
- .py-sm-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-sm-0,
- .px-sm-0 {
- padding-left: 0 !important;
- }
-
- .p-sm-1 {
- padding: 0.25rem !important;
- }
-
- .pt-sm-1,
- .py-sm-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-sm-1,
- .px-sm-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-sm-1,
- .py-sm-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-sm-1,
- .px-sm-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-sm-2 {
- padding: 0.5rem !important;
- }
-
- .pt-sm-2,
- .py-sm-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-sm-2,
- .px-sm-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-sm-2,
- .py-sm-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-sm-2,
- .px-sm-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-sm-3 {
- padding: 1rem !important;
- }
-
- .pt-sm-3,
- .py-sm-3 {
- padding-top: 1rem !important;
- }
-
- .pr-sm-3,
- .px-sm-3 {
- padding-right: 1rem !important;
- }
-
- .pb-sm-3,
- .py-sm-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-sm-3,
- .px-sm-3 {
- padding-left: 1rem !important;
- }
-
- .p-sm-4 {
- padding: 1.5rem !important;
- }
-
- .pt-sm-4,
- .py-sm-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-sm-4,
- .px-sm-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-sm-4,
- .py-sm-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-sm-4,
- .px-sm-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-sm-5 {
- padding: 3rem !important;
- }
-
- .pt-sm-5,
- .py-sm-5 {
- padding-top: 3rem !important;
- }
-
- .pr-sm-5,
- .px-sm-5 {
- padding-right: 3rem !important;
- }
-
- .pb-sm-5,
- .py-sm-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-sm-5,
- .px-sm-5 {
- padding-left: 3rem !important;
- }
-
- .m-sm-auto {
- margin: auto !important;
- }
-
- .mt-sm-auto,
- .my-sm-auto {
- margin-top: auto !important;
- }
-
- .mr-sm-auto,
- .mx-sm-auto {
- margin-right: auto !important;
- }
-
- .mb-sm-auto,
- .my-sm-auto {
- margin-bottom: auto !important;
- }
-
- .ml-sm-auto,
- .mx-sm-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 768px) {
- .m-md-0 {
- margin: 0 !important;
- }
-
- .mt-md-0,
- .my-md-0 {
- margin-top: 0 !important;
- }
-
- .mr-md-0,
- .mx-md-0 {
- margin-right: 0 !important;
- }
-
- .mb-md-0,
- .my-md-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-md-0,
- .mx-md-0 {
- margin-left: 0 !important;
- }
-
- .m-md-1 {
- margin: 0.25rem !important;
- }
-
- .mt-md-1,
- .my-md-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-md-1,
- .mx-md-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-md-1,
- .my-md-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-md-1,
- .mx-md-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-md-2 {
- margin: 0.5rem !important;
- }
-
- .mt-md-2,
- .my-md-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-md-2,
- .mx-md-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-md-2,
- .my-md-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-md-2,
- .mx-md-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-md-3 {
- margin: 1rem !important;
- }
-
- .mt-md-3,
- .my-md-3 {
- margin-top: 1rem !important;
- }
-
- .mr-md-3,
- .mx-md-3 {
- margin-right: 1rem !important;
- }
-
- .mb-md-3,
- .my-md-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-md-3,
- .mx-md-3 {
- margin-left: 1rem !important;
- }
-
- .m-md-4 {
- margin: 1.5rem !important;
- }
-
- .mt-md-4,
- .my-md-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-md-4,
- .mx-md-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-md-4,
- .my-md-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-md-4,
- .mx-md-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-md-5 {
- margin: 3rem !important;
- }
-
- .mt-md-5,
- .my-md-5 {
- margin-top: 3rem !important;
- }
-
- .mr-md-5,
- .mx-md-5 {
- margin-right: 3rem !important;
- }
-
- .mb-md-5,
- .my-md-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-md-5,
- .mx-md-5 {
- margin-left: 3rem !important;
- }
-
- .p-md-0 {
- padding: 0 !important;
- }
-
- .pt-md-0,
- .py-md-0 {
- padding-top: 0 !important;
- }
-
- .pr-md-0,
- .px-md-0 {
- padding-right: 0 !important;
- }
-
- .pb-md-0,
- .py-md-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-md-0,
- .px-md-0 {
- padding-left: 0 !important;
- }
-
- .p-md-1 {
- padding: 0.25rem !important;
- }
-
- .pt-md-1,
- .py-md-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-md-1,
- .px-md-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-md-1,
- .py-md-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-md-1,
- .px-md-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-md-2 {
- padding: 0.5rem !important;
- }
-
- .pt-md-2,
- .py-md-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-md-2,
- .px-md-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-md-2,
- .py-md-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-md-2,
- .px-md-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-md-3 {
- padding: 1rem !important;
- }
-
- .pt-md-3,
- .py-md-3 {
- padding-top: 1rem !important;
- }
-
- .pr-md-3,
- .px-md-3 {
- padding-right: 1rem !important;
- }
-
- .pb-md-3,
- .py-md-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-md-3,
- .px-md-3 {
- padding-left: 1rem !important;
- }
-
- .p-md-4 {
- padding: 1.5rem !important;
- }
-
- .pt-md-4,
- .py-md-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-md-4,
- .px-md-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-md-4,
- .py-md-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-md-4,
- .px-md-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-md-5 {
- padding: 3rem !important;
- }
-
- .pt-md-5,
- .py-md-5 {
- padding-top: 3rem !important;
- }
-
- .pr-md-5,
- .px-md-5 {
- padding-right: 3rem !important;
- }
-
- .pb-md-5,
- .py-md-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-md-5,
- .px-md-5 {
- padding-left: 3rem !important;
- }
-
- .m-md-auto {
- margin: auto !important;
- }
-
- .mt-md-auto,
- .my-md-auto {
- margin-top: auto !important;
- }
-
- .mr-md-auto,
- .mx-md-auto {
- margin-right: auto !important;
- }
-
- .mb-md-auto,
- .my-md-auto {
- margin-bottom: auto !important;
- }
-
- .ml-md-auto,
- .mx-md-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 992px) {
- .m-lg-0 {
- margin: 0 !important;
- }
-
- .mt-lg-0,
- .my-lg-0 {
- margin-top: 0 !important;
- }
-
- .mr-lg-0,
- .mx-lg-0 {
- margin-right: 0 !important;
- }
-
- .mb-lg-0,
- .my-lg-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-lg-0,
- .mx-lg-0 {
- margin-left: 0 !important;
- }
-
- .m-lg-1 {
- margin: 0.25rem !important;
- }
-
- .mt-lg-1,
- .my-lg-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-lg-1,
- .mx-lg-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-lg-1,
- .my-lg-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-lg-1,
- .mx-lg-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-lg-2 {
- margin: 0.5rem !important;
- }
-
- .mt-lg-2,
- .my-lg-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-lg-2,
- .mx-lg-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-lg-2,
- .my-lg-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-lg-2,
- .mx-lg-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-lg-3 {
- margin: 1rem !important;
- }
-
- .mt-lg-3,
- .my-lg-3 {
- margin-top: 1rem !important;
- }
-
- .mr-lg-3,
- .mx-lg-3 {
- margin-right: 1rem !important;
- }
-
- .mb-lg-3,
- .my-lg-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-lg-3,
- .mx-lg-3 {
- margin-left: 1rem !important;
- }
-
- .m-lg-4 {
- margin: 1.5rem !important;
- }
-
- .mt-lg-4,
- .my-lg-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-lg-4,
- .mx-lg-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-lg-4,
- .my-lg-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-lg-4,
- .mx-lg-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-lg-5 {
- margin: 3rem !important;
- }
-
- .mt-lg-5,
- .my-lg-5 {
- margin-top: 3rem !important;
- }
-
- .mr-lg-5,
- .mx-lg-5 {
- margin-right: 3rem !important;
- }
-
- .mb-lg-5,
- .my-lg-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-lg-5,
- .mx-lg-5 {
- margin-left: 3rem !important;
- }
-
- .p-lg-0 {
- padding: 0 !important;
- }
-
- .pt-lg-0,
- .py-lg-0 {
- padding-top: 0 !important;
- }
-
- .pr-lg-0,
- .px-lg-0 {
- padding-right: 0 !important;
- }
-
- .pb-lg-0,
- .py-lg-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-lg-0,
- .px-lg-0 {
- padding-left: 0 !important;
- }
-
- .p-lg-1 {
- padding: 0.25rem !important;
- }
-
- .pt-lg-1,
- .py-lg-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-lg-1,
- .px-lg-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-lg-1,
- .py-lg-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-lg-1,
- .px-lg-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-lg-2 {
- padding: 0.5rem !important;
- }
-
- .pt-lg-2,
- .py-lg-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-lg-2,
- .px-lg-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-lg-2,
- .py-lg-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-lg-2,
- .px-lg-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-lg-3 {
- padding: 1rem !important;
- }
-
- .pt-lg-3,
- .py-lg-3 {
- padding-top: 1rem !important;
- }
-
- .pr-lg-3,
- .px-lg-3 {
- padding-right: 1rem !important;
- }
-
- .pb-lg-3,
- .py-lg-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-lg-3,
- .px-lg-3 {
- padding-left: 1rem !important;
- }
-
- .p-lg-4 {
- padding: 1.5rem !important;
- }
-
- .pt-lg-4,
- .py-lg-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-lg-4,
- .px-lg-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-lg-4,
- .py-lg-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-lg-4,
- .px-lg-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-lg-5 {
- padding: 3rem !important;
- }
-
- .pt-lg-5,
- .py-lg-5 {
- padding-top: 3rem !important;
- }
-
- .pr-lg-5,
- .px-lg-5 {
- padding-right: 3rem !important;
- }
-
- .pb-lg-5,
- .py-lg-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-lg-5,
- .px-lg-5 {
- padding-left: 3rem !important;
- }
-
- .m-lg-auto {
- margin: auto !important;
- }
-
- .mt-lg-auto,
- .my-lg-auto {
- margin-top: auto !important;
- }
-
- .mr-lg-auto,
- .mx-lg-auto {
- margin-right: auto !important;
- }
-
- .mb-lg-auto,
- .my-lg-auto {
- margin-bottom: auto !important;
- }
-
- .ml-lg-auto,
- .mx-lg-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 1200px) {
- .m-xl-0 {
- margin: 0 !important;
- }
-
- .mt-xl-0,
- .my-xl-0 {
- margin-top: 0 !important;
- }
-
- .mr-xl-0,
- .mx-xl-0 {
- margin-right: 0 !important;
- }
-
- .mb-xl-0,
- .my-xl-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-xl-0,
- .mx-xl-0 {
- margin-left: 0 !important;
- }
-
- .m-xl-1 {
- margin: 0.25rem !important;
- }
-
- .mt-xl-1,
- .my-xl-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-xl-1,
- .mx-xl-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-xl-1,
- .my-xl-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-xl-1,
- .mx-xl-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-xl-2 {
- margin: 0.5rem !important;
- }
-
- .mt-xl-2,
- .my-xl-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-xl-2,
- .mx-xl-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-xl-2,
- .my-xl-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-xl-2,
- .mx-xl-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-xl-3 {
- margin: 1rem !important;
- }
-
- .mt-xl-3,
- .my-xl-3 {
- margin-top: 1rem !important;
- }
-
- .mr-xl-3,
- .mx-xl-3 {
- margin-right: 1rem !important;
- }
-
- .mb-xl-3,
- .my-xl-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-xl-3,
- .mx-xl-3 {
- margin-left: 1rem !important;
- }
-
- .m-xl-4 {
- margin: 1.5rem !important;
- }
-
- .mt-xl-4,
- .my-xl-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-xl-4,
- .mx-xl-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-xl-4,
- .my-xl-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-xl-4,
- .mx-xl-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-xl-5 {
- margin: 3rem !important;
- }
-
- .mt-xl-5,
- .my-xl-5 {
- margin-top: 3rem !important;
- }
-
- .mr-xl-5,
- .mx-xl-5 {
- margin-right: 3rem !important;
- }
-
- .mb-xl-5,
- .my-xl-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-xl-5,
- .mx-xl-5 {
- margin-left: 3rem !important;
- }
-
- .p-xl-0 {
- padding: 0 !important;
- }
-
- .pt-xl-0,
- .py-xl-0 {
- padding-top: 0 !important;
- }
-
- .pr-xl-0,
- .px-xl-0 {
- padding-right: 0 !important;
- }
-
- .pb-xl-0,
- .py-xl-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-xl-0,
- .px-xl-0 {
- padding-left: 0 !important;
- }
-
- .p-xl-1 {
- padding: 0.25rem !important;
- }
-
- .pt-xl-1,
- .py-xl-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-xl-1,
- .px-xl-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-xl-1,
- .py-xl-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-xl-1,
- .px-xl-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-xl-2 {
- padding: 0.5rem !important;
- }
-
- .pt-xl-2,
- .py-xl-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-xl-2,
- .px-xl-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-xl-2,
- .py-xl-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-xl-2,
- .px-xl-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-xl-3 {
- padding: 1rem !important;
- }
-
- .pt-xl-3,
- .py-xl-3 {
- padding-top: 1rem !important;
- }
-
- .pr-xl-3,
- .px-xl-3 {
- padding-right: 1rem !important;
- }
-
- .pb-xl-3,
- .py-xl-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-xl-3,
- .px-xl-3 {
- padding-left: 1rem !important;
- }
-
- .p-xl-4 {
- padding: 1.5rem !important;
- }
-
- .pt-xl-4,
- .py-xl-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-xl-4,
- .px-xl-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-xl-4,
- .py-xl-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-xl-4,
- .px-xl-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-xl-5 {
- padding: 3rem !important;
- }
-
- .pt-xl-5,
- .py-xl-5 {
- padding-top: 3rem !important;
- }
-
- .pr-xl-5,
- .px-xl-5 {
- padding-right: 3rem !important;
- }
-
- .pb-xl-5,
- .py-xl-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-xl-5,
- .px-xl-5 {
- padding-left: 3rem !important;
- }
-
- .m-xl-auto {
- margin: auto !important;
- }
-
- .mt-xl-auto,
- .my-xl-auto {
- margin-top: auto !important;
- }
-
- .mr-xl-auto,
- .mx-xl-auto {
- margin-right: auto !important;
- }
-
- .mb-xl-auto,
- .my-xl-auto {
- margin-bottom: auto !important;
- }
-
- .ml-xl-auto,
- .mx-xl-auto {
- margin-left: auto !important;
- }
-}
-
-.text-monospace {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-}
-
-.text-justify {
- text-align: justify !important;
-}
-
-.text-nowrap {
- white-space: nowrap !important;
-}
-
-.text-truncate {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.text-left {
- text-align: left !important;
-}
-
-.text-right {
- text-align: right !important;
-}
-
-.text-center {
- text-align: center !important;
-}
-
-@media (min-width: 576px) {
- .text-sm-left {
- text-align: left !important;
- }
-
- .text-sm-right {
- text-align: right !important;
- }
-
- .text-sm-center {
- text-align: center !important;
- }
-}
-
-@media (min-width: 768px) {
- .text-md-left {
- text-align: left !important;
- }
-
- .text-md-right {
- text-align: right !important;
- }
-
- .text-md-center {
- text-align: center !important;
- }
-}
-
-@media (min-width: 992px) {
- .text-lg-left {
- text-align: left !important;
- }
-
- .text-lg-right {
- text-align: right !important;
- }
-
- .text-lg-center {
- text-align: center !important;
- }
-}
-
-@media (min-width: 1200px) {
- .text-xl-left {
- text-align: left !important;
- }
-
- .text-xl-right {
- text-align: right !important;
- }
-
- .text-xl-center {
- text-align: center !important;
- }
-}
-
-.text-lowercase {
- text-transform: lowercase !important;
-}
-
-.text-uppercase {
- text-transform: uppercase !important;
-}
-
-.text-capitalize {
- text-transform: capitalize !important;
-}
-
-.font-weight-light {
- font-weight: 300 !important;
-}
-
-.font-weight-normal {
- font-weight: 400 !important;
-}
-
-.font-weight-bold {
- font-weight: 700 !important;
-}
-
-.font-italic {
- font-style: italic !important;
-}
-
-.text-white {
- color: #fff !important;
-}
-
-.text-primary {
- color: #007bff !important;
-}
-
-a.text-primary:hover,
-a.text-primary:focus {
- color: #0062cc !important;
-}
-
-.text-secondary {
- color: #6c757d !important;
-}
-
-a.text-secondary:hover,
-a.text-secondary:focus {
- color: #545b62 !important;
-}
-
-.text-success {
- color: #28a745 !important;
-}
-
-a.text-success:hover,
-a.text-success:focus {
- color: #1e7e34 !important;
-}
-
-.text-info {
- color: #17a2b8 !important;
-}
-
-a.text-info:hover,
-a.text-info:focus {
- color: #117a8b !important;
-}
-
-.text-warning {
- color: #ffc107 !important;
-}
-
-a.text-warning:hover,
-a.text-warning:focus {
- color: #d39e00 !important;
-}
-
-.text-danger {
- color: #dc3545 !important;
-}
-
-a.text-danger:hover,
-a.text-danger:focus {
- color: #bd2130 !important;
-}
-
-.text-light {
- color: #f8f9fa !important;
-}
-
-a.text-light:hover,
-a.text-light:focus {
- color: #dae0e5 !important;
-}
-
-.text-dark {
- color: #343a40 !important;
-}
-
-a.text-dark:hover,
-a.text-dark:focus {
- color: #1d2124 !important;
-}
-
-.text-body {
- color: #212529 !important;
-}
-
-.text-muted {
- color: #6c757d !important;
-}
-
-.text-black-50 {
- color: rgba(0, 0, 0, 0.5) !important;
-}
-
-.text-white-50 {
- color: rgba(255, 255, 255, 0.5) !important;
-}
-
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.visible {
- visibility: visible !important;
-}
-
-.invisible {
- visibility: hidden !important;
-}
-
-@media print {
- *,
- *::before,
- *::after {
- text-shadow: none !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- }
-
- a:not(.btn) {
- text-decoration: underline;
- }
-
- abbr[title]::after {
- content: " (" attr(title) ")";
- }
-
- pre {
- white-space: pre-wrap !important;
- }
-
- pre,
- blockquote {
- border: 1px solid #adb5bd;
- page-break-inside: avoid;
- }
-
- thead {
- display: table-header-group;
- }
-
- tr,
- img {
- page-break-inside: avoid;
- }
-
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
-
- h2,
- h3 {
- page-break-after: avoid;
- }
-
-@page {
- size: a3;
-}
-
- body {
- min-width: 992px !important;
- }
-
- .container {
- min-width: 992px !important;
- }
-
- .navbar {
- display: none;
- }
-
- .badge {
- border: 1px solid #000;
- }
-
- .table {
- border-collapse: collapse !important;
- }
-
- .table td,
- .table th {
- background-color: #fff !important;
- }
-
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #dee2e6 !important;
- }
-
- .table-dark {
- color: inherit;
- }
-
- .table-dark th,
- .table-dark td,
- .table-dark thead th,
- .table-dark tbody + tbody {
- border-color: #dee2e6;
- }
-
- .table .thead-dark th {
- color: inherit;
- border-color: #dee2e6;
- }
-}
-
-.MessagesWindow {
- height: 250px;
- overflow-y: scroll;
- padding: 15px;
-}
-
-.navbar-laravel {
- margin: 0;
- padding: 0;
- -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
-}
-
-.navbar.fixed-bottom {
- width: 100%;
- background-color: #555;
- overflow: auto;
-}
-
-.navbar.fixed-bottom .navbar-icon {
- float: left;
- width: 20%;
- text-align: center;
- padding: 12px 0;
- -webkit-transition: all 0.3s ease;
- transition: all 0.3s ease;
- color: white;
- font-size: 36px;
-}
-
-.navbar.fixed-bottom a:hover {
- background-color: #000;
-}
-
-.active {
- background-color: #4CAF50 !important;
-}
-
-.alert {
- display: none;
-}
-
diff --git a/public/css/app.css.map b/public/css/app.css.map
deleted file mode 100755
index f5753b9..0000000
--- a/public/css/app.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./resources/assets/sass/node_modules/bootstrap/scss/bootstrap.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_root.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_reboot.scss","webpack:///./resources/assets/sass/app.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_hover.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_type.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_lists.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_images.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_image.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_code.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_grid.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_grid.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_grid-framework.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_tables.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_table-row.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_forms.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_transition.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_forms.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_gradients.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_buttons.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_buttons.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_transitions.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_dropdown.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_caret.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_nav-divider.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_button-group.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_input-group.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_custom-forms.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_nav.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_navbar.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_card.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_breadcrumb.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_pagination.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_pagination.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_badge.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_badge.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_jumbotron.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_alert.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_alert.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_progress.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_media.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_list-group.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_list-group.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_close.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_modal.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_tooltip.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_popover.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_carousel.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_align.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_background-variant.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_background.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_borders.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_clearfix.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_display.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_embed.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_flex.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_float.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_float.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_position.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_screenreaders.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_screen-reader.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_shadows.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_sizing.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_spacing.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_text.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_text-emphasis.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_text-hide.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/utilities/_visibility.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/mixins/_visibility.scss","webpack:///./resources/assets/sass/node_modules/bootstrap/scss/_print.scss","webpack:///./resources/assets/sass/resources/assets/sass/app.scss"],"names":[],"mappings":"yEAAA;;;;;GCAA,MAGI,8MAIA,yIAIA,2GAKF,8CACA,uGCGF,iBAGE,oDAGF,KACE,uBACA,iBACA,8BACA,0BACA,6BACA,0CAKA,cACE,mBAMJ,sEACE,cAWF,KACE,SACA,+BACA,gBACA,gBACA,gBACA,cACA,gBACA,yBCiBD,sBDRC,oBASF,GACE,sDACA,SACA,iBAaF,kBACE,aACA,oBAQF,EACE,aACA,mBAUF,sCAEE,0BACA,0EACA,YACA,gBAGF,QAEE,kBACA,oBAGF,iBALE,mBAKF,SAGE,aAIF,wBAIE,gBAGF,GACE,gBAGF,GACE,oBACA,cAGF,WACE,gBAGF,IACE,kBAIF,SAEE,mBAIF,MACE,cAQF,QAEE,kBACA,cACA,cACA,wBAGF,IAAM,cACN,IAAM,UAON,EACE,cACA,qBACA,6BACA,qCAJF,QAOI,cACA,0BE7LF,sGF4ME,cACA,qBANJ,oCAUI,UASJ,kBAIE,uFACA,cAGF,IAEE,aAEA,mBAEA,cAGA,6BAQF,OAEE,gBAQF,IACE,sBACA,kBAGF,eACE,gBAQF,MACE,yBAGF,QACE,mBACA,sBACA,cACA,gBACA,oBAGF,GAGE,mBAQF,MAEE,qBACA,oBAMF,OACE,gBAOF,aACE,mBACA,0CAGF,sCAKE,SACA,oBACA,kBACA,oBAGF,aAEE,iBAGF,cAEE,oBAMF,qDAIE,0BAIF,wHAIE,UACA,kBAGF,uCAEE,oDACA,UAIF,+EASE,2BAGF,SACE,cAEA,gBAGF,SAME,YAEA,UACA,SACA,SAKF,OACE,cACA,WACA,eACA,UACA,oBACA,iBACA,oBACA,cACA,mBAGF,SACE,wBCnFD,kFDyFC,YCpFD,cD4FC,oBACA,wBCxFD,qFDiGC,wBAQF,6BACE,aACA,0BAOF,OACE,qBAGF,QACE,kBACA,eAGF,SACE,aCrGD,SD2GC,uBGxdF,0CAEE,oBACA,oBACA,gBACA,gBACA,cAGF,OAAU,kBACV,OAAU,iBACV,OAAU,mBACV,OAAU,kBACV,OAAU,mBACV,OAAU,gBAEV,MACE,mBACA,gBAIF,WACE,eAIF,sBAHE,gBACA,gBAEF,WACE,iBAIF,WACE,iBAIF,sBAHE,gBACA,gBAEF,WACE,iBHsCF,GG3BE,gBACA,mBACA,SACA,oCAQF,aAEE,cACA,gBAGF,WAEE,aACA,yBAaF,4BCpFE,eACA,gBDsFF,kBACE,qBAEA,mCACE,mBAUJ,YACE,cACA,yBAIF,YACE,mBACA,mBAGF,mBACE,cACA,cACA,cAEA,0BACE,sBE7GJ,0BCFE,eAGA,YDDF,eACE,eACA,yBACA,yBEZE,qBFwBJ,QAEE,qBAGF,YACE,oBACA,cAGF,gBACE,cACA,cGvCF,KACE,gBACA,cACA,sBAGA,OACE,cAKJ,IACE,oBACA,gBACA,WACA,4CDbE,CCSJ,QASI,UACA,eACA,gBR0NJ,IQnNE,cACA,gBACA,cAHF,SAOI,kBACA,cACA,kBAKJ,gBACE,iBACA,kBCzCA,WCAA,WACA,mBACA,kBACA,kBACA,iBCmDE,yBFvDF,WCYI,gBT+jBH,CUphBC,yBFvDF,WCYI,gBTqkBH,CU1hBC,yBFvDF,WCYI,gBT2kBH,CUhiBC,0BFvDF,WCYI,iBTilBH,CQjlBD,iBCZA,WACA,mBACA,kBACA,kBACA,iBDkBA,KCJA,qDACA,kCACA,mBACA,kBDOA,YACE,eACA,cAFF,2CAMI,gBACA,eGjCJ,sqBACE,kBACA,WACA,eACA,mBACA,kBAmBE,KACE,uCACA,mDACA,eAEF,UACE,gCACA,WACA,eAIA,iBANA,mBAMA,OFFN,8CAIA,sBEFM,OFFN,gDAIA,uBEFM,cFFN,mBEEM,OFFN,8BAIA,cEFM,OFFN,gDAIA,uBEFM,cFFN,mBEEM,OFFN,gDAIA,uBEFM,OFFN,8BAIA,cEFM,cFFN,mBEEM,OFFN,gDAIA,uBEFM,OFFN,gDAIA,uBEFM,cFFN,mBEEM,OFFN,8BAIA,cEFM,QFFN,gDAIA,uBEFM,gBFFN,mBEEM,QFFN,gDAIA,uBEFM,QFFN,mDAIA,eEGI,aAAwB,uDAExB,YAAuB,wDAGrB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,qDAAxB,SAAwB,sDAAxB,UAAwB,wDAAxB,UAAwB,wDAAxB,UAAwB,wDAMtB,UFTR,wBESQ,UFTR,yBESQ,UFTR,gBESQ,UFTR,yBESQ,UFTR,yBESQ,UFTR,gBESQ,UFTR,yBESQ,UFTR,yBESQ,UFTR,gBESQ,WFTR,yBESQ,WFTR,yBCUE,yBC7BE,QACE,uCACA,mDACA,eAEF,aACE,mDACA,WACA,eAIA,UFFN,iEAIA,sBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,WFFN,mEAIA,uBEFM,WFFN,mEAIA,uBEFM,WFFN,mDAIA,eEGI,gBAAwB,uDAExB,eAAuB,wDAGrB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,sDAAxB,aAAwB,wDAAxB,aAAwB,wDAAxB,aAAwB,wDAMtB,aFTR,cESQ,aFTR,wBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aFTR,yBESQ,aFTR,gBESQ,cFTR,yBESQ,cFTR,yBT6/BC,CUn/BC,yBC7BE,QACE,uCACA,mDACA,eAEF,aACE,mDACA,WACA,eAIA,UFFN,iEAIA,sBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,WFFN,mEAIA,uBEFM,WFFN,mEAIA,uBEFM,WFFN,mDAIA,eEGI,gBAAwB,uDAExB,eAAuB,wDAGrB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,sDAAxB,aAAwB,wDAAxB,aAAwB,wDAAxB,aAAwB,wDAMtB,aFTR,cESQ,aFTR,wBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aFTR,yBESQ,aFTR,gBESQ,cFTR,yBESQ,cFTR,yBTmrCC,CUzqCC,yBC7BE,QACE,uCACA,mDACA,eAEF,aACE,mDACA,WACA,eAIA,UFFN,iEAIA,sBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,WFFN,mEAIA,uBEFM,WFFN,mEAIA,uBEFM,WFFN,mDAIA,eEGI,gBAAwB,uDAExB,eAAuB,wDAGrB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,sDAAxB,aAAwB,wDAAxB,aAAwB,wDAAxB,aAAwB,wDAMtB,aFTR,cESQ,aFTR,wBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aFTR,yBESQ,aFTR,gBESQ,cFTR,yBESQ,cFTR,yBTy2CC,CU/1CC,0BC7BE,QACE,uCACA,mDACA,eAEF,aACE,mDACA,WACA,eAIA,UFFN,iEAIA,sBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,UFFN,mEAIA,uBEFM,UFFN,mEAIA,uBEFM,UFFN,iDAIA,cEFM,WFFN,mEAIA,uBEFM,WFFN,mEAIA,uBEFM,WFFN,mDAIA,eEGI,gBAAwB,uDAExB,eAAuB,wDAGrB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,qDAAxB,YAAwB,sDAAxB,aAAwB,wDAAxB,aAAwB,wDAAxB,aAAwB,wDAMtB,aFTR,cESQ,aFTR,wBESQ,aFTR,yBESQ,aFTR,gBESQ,aFTR,yBESQ,aF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,gBACA,cACA,kBACA,mBACA,4C3BTE,C2BaF,aACE,aAKJ,YACE,kBACA,SAOF,YACE,mBACA,qC3B9BE,C2BuCF,eC1CA,WACA,yBjCcA,sDiCVI,WACA,qBACA,yBDmCJ,iBC1CA,WACA,yBDyCA,0DCrCI,WACA,qBACA,yBDmCJ,eC1CA,WACA,yBDyCA,sDCrCI,WACA,qBACA,yBDmCJ,YC1CA,WACA,yBjCcA,gDiCVI,WACA,qBACA,yBDmCJ,eC1CA,cACA,yBDyCA,sDCrCI,cACA,qBACA,yBDmCJ,cC1CA,WACA,yBDyCA,oDCrCI,WACA,qBACA,yBDmCJ,aC1CA,cACA,yBjCcA,kDiCVI,cACA,qBACA,yBDmCJ,YC1CA,WACA,yBjCcA,gDiCVI,WACA,qBACA,yBCRN,WACE,kBACA,mBACA,4C7BCE,CIwDA,yByB5DJ,WAOI,kBnCg5JD,CmC54JH,iBACE,gBACA,8B7BTE,C8BAJ,OACE,kBACA,uBACA,mBACA,iD9BJE,C8BSJ,eAEE,cAIF,YACE,gBAQF,mBACE,sBAGA,0BACE,kBACA,MACA,QACA,uBACA,cAUF,eC9CA,uCAEA,qBD4CA,kBCzCE,yBAGF,2BACE,cDqCF,iBC9CA,uCAEA,qBD4CA,oBCzCE,yBDyCF,6BCrCE,cDqCF,eC9CA,uCAEA,qBD4CA,kBCzCE,yBDyCF,2BCrCE,cDqCF,YC9CA,uCAEA,qBD4CA,eCzCE,yBAGF,wBACE,cDqCF,eC9CA,uCAEA,qBD4CA,kBCzCE,yBDyCF,2BCrCE,cDqCF,cC9CA,uCAEA,qBD4CA,iBCzCE,yBDyCF,0BCrCE,cDqCF,aC9CA,uCAEA,qBAEA,gBACE,yBAGF,yBACE,cDqCF,YC9CA,uCAEA,qBD4CA,eCzCE,yBDyCF,wBCrCE,cCVJ,wCACE,GAAO,2BACP,GAAK,wBtCijKJ,CsCnjKH,gCACE,GAAO,2BACP,GAAK,wBtCijKJ,CsC9iKH,UAEE,YACA,gBACA,kBACA,6ChCNE,CgCWJ,wBATE,qDASF,cAEE,yGACA,oEACA,WACA,kBACA,mBACA,2DvBjBI,0BAIJ,kDuBMF,cvBLI,wCfmkKD,CsCnjKH,sBrBiBE,sKqBfA,0BAGF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","file":"/css/app.css","sourcesContent":["/*!\n * Bootstrap v4.1.1 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"utilities\";\n@import \"print\";\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/bootstrap.scss",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_root.scss","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `<meta name=\"viewport\">` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `<td>` alignment by inheriting from the `<body>`, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_reboot.scss","@import url(\"https://fonts.googleapis.com/css?family=Raleway:300,400,600\");\n\n/*!\n * Bootstrap v4.1.1 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: \"Raleway\", sans-serif;\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle,\naside,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: \"Raleway\", sans-serif;\n font-size: 0.9rem;\n font-weight: 400;\n line-height: 1.6;\n color: #212529;\n text-align: left;\n background-color: #f5f8fa;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover,\na:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n margin-bottom: 0.5rem;\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n color: inherit;\n}\n\nh1,\n.h1 {\n font-size: 2.25rem;\n}\n\nh2,\n.h2 {\n font-size: 1.8rem;\n}\n\nh3,\n.h3 {\n font-size: 1.575rem;\n}\n\nh4,\n.h4 {\n font-size: 1.35rem;\n}\n\nh5,\n.h5 {\n font-size: 1.125rem;\n}\n\nh6,\n.h6 {\n font-size: 0.9rem;\n}\n\n.lead {\n font-size: 1.125rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.125rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014 \\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #f5f8fa;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12,\n.col,\n.col-auto,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-sm,\n.col-sm-auto,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-md,\n.col-md-auto,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12,\n.col-lg,\n.col-lg-auto,\n.col-xl-1,\n.col-xl-2,\n.col-xl-3,\n.col-xl-4,\n.col-xl-5,\n.col-xl-6,\n.col-xl-7,\n.col-xl-8,\n.col-xl-9,\n.col-xl-10,\n.col-xl-11,\n.col-xl-12,\n.col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n\n .col-sm-1 {\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .order-sm-first {\n order: -1;\n }\n\n .order-sm-last {\n order: 13;\n }\n\n .order-sm-0 {\n order: 0;\n }\n\n .order-sm-1 {\n order: 1;\n }\n\n .order-sm-2 {\n order: 2;\n }\n\n .order-sm-3 {\n order: 3;\n }\n\n .order-sm-4 {\n order: 4;\n }\n\n .order-sm-5 {\n order: 5;\n }\n\n .order-sm-6 {\n order: 6;\n }\n\n .order-sm-7 {\n order: 7;\n }\n\n .order-sm-8 {\n order: 8;\n }\n\n .order-sm-9 {\n order: 9;\n }\n\n .order-sm-10 {\n order: 10;\n }\n\n .order-sm-11 {\n order: 11;\n }\n\n .order-sm-12 {\n order: 12;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n\n .col-md-1 {\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .order-md-first {\n order: -1;\n }\n\n .order-md-last {\n order: 13;\n }\n\n .order-md-0 {\n order: 0;\n }\n\n .order-md-1 {\n order: 1;\n }\n\n .order-md-2 {\n order: 2;\n }\n\n .order-md-3 {\n order: 3;\n }\n\n .order-md-4 {\n order: 4;\n }\n\n .order-md-5 {\n order: 5;\n }\n\n .order-md-6 {\n order: 6;\n }\n\n .order-md-7 {\n order: 7;\n }\n\n .order-md-8 {\n order: 8;\n }\n\n .order-md-9 {\n order: 9;\n }\n\n .order-md-10 {\n order: 10;\n }\n\n .order-md-11 {\n order: 11;\n }\n\n .order-md-12 {\n order: 12;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n\n .col-lg-1 {\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .order-lg-first {\n order: -1;\n }\n\n .order-lg-last {\n order: 13;\n }\n\n .order-lg-0 {\n order: 0;\n }\n\n .order-lg-1 {\n order: 1;\n }\n\n .order-lg-2 {\n order: 2;\n }\n\n .order-lg-3 {\n order: 3;\n }\n\n .order-lg-4 {\n order: 4;\n }\n\n .order-lg-5 {\n order: 5;\n }\n\n .order-lg-6 {\n order: 6;\n }\n\n .order-lg-7 {\n order: 7;\n }\n\n .order-lg-8 {\n order: 8;\n }\n\n .order-lg-9 {\n order: 9;\n }\n\n .order-lg-10 {\n order: 10;\n }\n\n .order-lg-11 {\n order: 11;\n }\n\n .order-lg-12 {\n order: 12;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n\n .col-xl-1 {\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .order-xl-first {\n order: -1;\n }\n\n .order-xl-last {\n order: 13;\n }\n\n .order-xl-0 {\n order: 0;\n }\n\n .order-xl-1 {\n order: 1;\n }\n\n .order-xl-2 {\n order: 2;\n }\n\n .order-xl-3 {\n order: 3;\n }\n\n .order-xl-4 {\n order: 4;\n }\n\n .order-xl-5 {\n order: 5;\n }\n\n .order-xl-6 {\n order: 6;\n }\n\n .order-xl-7 {\n order: 7;\n }\n\n .order-xl-8 {\n order: 8;\n }\n\n .order-xl-9 {\n order: 9;\n }\n\n .order-xl-10 {\n order: 10;\n }\n\n .order-xl-11 {\n order: 11;\n }\n\n .order-xl-12 {\n order: 12;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n}\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 1rem;\n background-color: transparent;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table .table {\n background-color: #f5f8fa;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #f5f8fa;\n background-color: #212529;\n border-color: #32383e;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #f5f8fa;\n background-color: #212529;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #32383e;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 0.9rem;\n line-height: 1.6;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled,\n.form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:not([size]):not([multiple]) {\n height: calc(2.19rem + 2px);\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.6;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.125rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.7875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.6;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm,\n.input-group-sm > .form-control-plaintext.form-control,\n.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text,\n.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text,\n.input-group-sm > .input-group-prepend > .form-control-plaintext.btn,\n.input-group-sm > .input-group-append > .form-control-plaintext.btn,\n.form-control-plaintext.form-control-lg,\n.input-group-lg > .form-control-plaintext.form-control,\n.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text,\n.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text,\n.input-group-lg > .input-group-prepend > .form-control-plaintext.btn,\n.input-group-lg > .input-group-append > .form-control-plaintext.btn {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm,\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.7875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\nselect.form-control-sm:not([size]):not([multiple]),\n.input-group-sm > select.form-control:not([size]):not([multiple]),\n.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),\n.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]),\n.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]),\n.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) {\n height: calc(1.68125rem + 2px);\n}\n\n.form-control-lg,\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.125rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control-lg:not([size]):not([multiple]),\n.input-group-lg > select.form-control:not([size]):not([multiple]),\n.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),\n.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]),\n.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]),\n.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) {\n height: calc(2.6875rem + 2px);\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.8);\n border-radius: .2rem;\n}\n\n.was-validated .form-control:valid,\n.form-control.is-valid,\n.was-validated\n.custom-select:valid,\n.custom-select.is-valid {\n border-color: #28a745;\n}\n\n.was-validated .form-control:valid:focus,\n.form-control.is-valid:focus,\n.was-validated\n.custom-select:valid:focus,\n.custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip,\n.form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip,\n.was-validated\n.custom-select:valid ~ .valid-feedback,\n.was-validated\n.custom-select:valid ~ .valid-tooltip,\n.custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip,\n.form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label,\n.form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip,\n.form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label,\n.custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before,\n.custom-control-input.is-valid ~ .custom-control-label::before {\n background-color: #71dd8a;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip,\n.custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,\n.custom-control-input.is-valid:checked ~ .custom-control-label::before {\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,\n.custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label,\n.custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label::before,\n.custom-file-input.is-valid ~ .custom-file-label::before {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip,\n.custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label,\n.custom-file-input.is-valid:focus ~ .custom-file-label {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.8);\n border-radius: .2rem;\n}\n\n.was-validated .form-control:invalid,\n.form-control.is-invalid,\n.was-validated\n.custom-select:invalid,\n.custom-select.is-invalid {\n border-color: #dc3545;\n}\n\n.was-validated .form-control:invalid:focus,\n.form-control.is-invalid:focus,\n.was-validated\n.custom-select:invalid:focus,\n.custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip,\n.form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip,\n.was-validated\n.custom-select:invalid ~ .invalid-feedback,\n.was-validated\n.custom-select:invalid ~ .invalid-tooltip,\n.custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip,\n.form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label,\n.form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip,\n.form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label,\n.custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before,\n.custom-control-input.is-invalid ~ .custom-control-label::before {\n background-color: #efa2a9;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip,\n.custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,\n.custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,\n.custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label,\n.custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label::before,\n.custom-file-input.is-invalid ~ .custom-file-label::before {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip,\n.custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,\n.custom-file-input.is-invalid:focus ~ .custom-file-label {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n\n .form-inline .form-check-input {\n position: relative;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 0.9rem;\n line-height: 1.6;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover,\n.btn:focus {\n text-decoration: none;\n}\n\n.btn:focus,\n.btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled,\n.btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.btn:not(:disabled):not(.disabled):active,\n.btn:not(:disabled):not(.disabled).active {\n background-image: none;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus,\n.btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-primary.disabled,\n.btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active,\n.btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus,\n.btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus,\n.btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-secondary.disabled,\n.btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active,\n.btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus,\n.btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus,\n.btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-success.disabled,\n.btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active,\n.btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus,\n.btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus,\n.btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-info.disabled,\n.btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active,\n.btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus,\n.btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus,\n.btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-warning.disabled,\n.btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active,\n.btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus,\n.btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus,\n.btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-danger.disabled,\n.btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active,\n.btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus,\n.btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus,\n.btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-light.disabled,\n.btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active,\n.btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus,\n.btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus,\n.btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-dark.disabled,\n.btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active,\n.btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus,\n.btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n background-color: transparent;\n background-image: none;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus,\n.btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled,\n.btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active,\n.btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus,\n.btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n background-color: transparent;\n background-image: none;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus,\n.btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled,\n.btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active,\n.btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,\n.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n background-color: transparent;\n background-image: none;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus,\n.btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled,\n.btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active,\n.btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus,\n.btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n background-color: transparent;\n background-image: none;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus,\n.btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled,\n.btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active,\n.btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus,\n.btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n background-color: transparent;\n background-image: none;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus,\n.btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled,\n.btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active,\n.btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus,\n.btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n background-color: transparent;\n background-image: none;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus,\n.btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled,\n.btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active,\n.btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus,\n.btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n background-color: transparent;\n background-image: none;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus,\n.btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled,\n.btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active,\n.btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus,\n.btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n background-color: transparent;\n background-image: none;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus,\n.btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled,\n.btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active,\n.btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus,\n.btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n background-color: transparent;\n border-color: transparent;\n}\n\n.btn-link:focus,\n.btn-link.focus {\n text-decoration: underline;\n border-color: transparent;\n box-shadow: none;\n}\n\n.btn-link:disabled,\n.btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.125rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.7875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 0.9rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"],\n.dropdown-menu[x-placement^=\"right\"],\n.dropdown-menu[x-placement^=\"bottom\"],\n.dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover,\n.dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active,\n.dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled,\n.dropdown-item:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.7875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 0 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group,\n.btn-group-vertical .btn + .btn,\n.btn-group-vertical .btn + .btn-group,\n.btn-group-vertical .btn-group + .btn,\n.btn-group-vertical .btn-group + .btn-group {\n margin-left: -1px;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split,\n.btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split,\n.btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical .btn,\n.btn-group-vertical .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file:focus {\n z-index: 3;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 0.9rem;\n font-weight: 400;\n line-height: 1.6;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.6rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.3rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n user-select: none;\n background-color: #dee2e6;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.3rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(2.19rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n line-height: 1.6;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n background-size: 8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple],\n.custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n opacity: 0;\n}\n\n.custom-select-sm {\n height: calc(1.68125rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 75%;\n}\n\n.custom-select-lg {\n height: calc(2.6875rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 125%;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(2.19rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(2.19rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:focus ~ .custom-file-label::after {\n border-color: #80bdff;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(2.19rem + 2px);\n padding: 0.375rem 0.75rem;\n line-height: 1.6;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: 2.19rem;\n padding: 0.375rem 0.75rem;\n line-height: 1.6;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: 1px solid #ced4da;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n padding-left: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n appearance: none;\n}\n\n.custom-range::-webkit-slider-thumb:focus {\n outline: none;\n box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n appearance: none;\n}\n\n.custom-range::-moz-range-thumb:focus {\n outline: none;\n box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n appearance: none;\n}\n\n.custom-range::-ms-thumb:focus {\n outline: none;\n box-shadow: 0 0 0 1px #f5f8fa, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover,\n.nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover,\n.nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #f5f8fa;\n border-color: #dee2e6 #dee2e6 #f5f8fa;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.32rem;\n padding-bottom: 0.32rem;\n margin-right: 1rem;\n font-size: 1.125rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.125rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover,\n.navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover,\n.navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover,\n.navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover,\n.navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover,\n.navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n .card-group > .card:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n .card-group > .card:first-child .card-img-top,\n .card-group > .card:first-child .card-header {\n border-top-right-radius: 0;\n }\n\n .card-group > .card:first-child .card-img-bottom,\n .card-group > .card:first-child .card-footer {\n border-bottom-right-radius: 0;\n }\n\n .card-group > .card:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .card-group > .card:last-child .card-img-top,\n .card-group > .card:last-child .card-header {\n border-top-left-radius: 0;\n }\n\n .card-group > .card:last-child .card-img-bottom,\n .card-group > .card:last-child .card-footer {\n border-bottom-left-radius: 0;\n }\n\n .card-group > .card:only-child {\n border-radius: 0.25rem;\n }\n\n .card-group > .card:only-child .card-img-top,\n .card-group > .card:only-child .card-header {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n }\n\n .card-group > .card:only-child .card-img-bottom,\n .card-group > .card:only-child .card-footer {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n }\n\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {\n border-radius: 0;\n }\n\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {\n border-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-link:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.7875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\n.badge-primary[href]:hover,\n.badge-primary[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #0062cc;\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\n.badge-secondary[href]:hover,\n.badge-secondary[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #545b62;\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\n.badge-success[href]:hover,\n.badge-success[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #1e7e34;\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.badge-info[href]:hover,\n.badge-info[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #117a8b;\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\n.badge-warning[href]:hover,\n.badge-warning[href]:focus {\n color: #212529;\n text-decoration: none;\n background-color: #d39e00;\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\n.badge-danger[href]:hover,\n.badge-danger[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #bd2130;\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\n.badge-light[href]:hover,\n.badge-light[href]:focus {\n color: #212529;\n text-decoration: none;\n background-color: #dae0e5;\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.badge-dark[href]:hover,\n.badge-dark[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #1d2124;\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3.85rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.675rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover,\n.list-group-item-action:focus {\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item:hover,\n.list-group-item:focus {\n z-index: 1;\n text-decoration: none;\n}\n\n.list-group-item.disabled,\n.list-group-item:disabled {\n color: #6c757d;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover,\n.list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover,\n.list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover,\n.list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover,\n.list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover,\n.list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover,\n.list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover,\n.list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover,\n.list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.35rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n opacity: .75;\n}\n\n.close:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -25%);\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: translate(0, 0);\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - (0.5rem * 2));\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem;\n border-bottom: 1px solid #e9ecef;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.6;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #e9ecef;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n\n .modal-dialog-centered {\n min-height: calc(100% - (1.75rem * 2));\n }\n\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg {\n max-width: 800px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: \"Raleway\", sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.6;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.7875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top,\n.bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow,\n.bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before,\n.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right,\n.bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow,\n.bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before,\n.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom,\n.bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow,\n.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before,\n.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left,\n.bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow,\n.bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before,\n.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: \"Raleway\", sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.6;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.7875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before,\n.popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top,\n.bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top .arrow,\n.bs-popover-auto[x-placement^=\"top\"] .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top .arrow::before,\n.bs-popover-auto[x-placement^=\"top\"] .arrow::before,\n.bs-popover-top .arrow::after,\n.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n border-width: 0.5rem 0.5rem 0;\n}\n\n.bs-popover-top .arrow::before,\n.bs-popover-auto[x-placement^=\"top\"] .arrow::before {\n bottom: 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top .arrow::after,\n.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n bottom: 1px;\n border-top-color: #fff;\n}\n\n.bs-popover-right,\n.bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right .arrow,\n.bs-popover-auto[x-placement^=\"right\"] .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right .arrow::before,\n.bs-popover-auto[x-placement^=\"right\"] .arrow::before,\n.bs-popover-right .arrow::after,\n.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n border-width: 0.5rem 0.5rem 0.5rem 0;\n}\n\n.bs-popover-right .arrow::before,\n.bs-popover-auto[x-placement^=\"right\"] .arrow::before {\n left: 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right .arrow::after,\n.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n left: 1px;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom,\n.bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom .arrow,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom .arrow::before,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow::before,\n.bs-popover-bottom .arrow::after,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n border-width: 0 0.5rem 0.5rem 0.5rem;\n}\n\n.bs-popover-bottom .arrow::before,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow::before {\n top: 0;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom .arrow::after,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n top: 1px;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before,\n.bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left,\n.bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left .arrow,\n.bs-popover-auto[x-placement^=\"left\"] .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left .arrow::before,\n.bs-popover-auto[x-placement^=\"left\"] .arrow::before,\n.bs-popover-left .arrow::after,\n.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n border-width: 0.5rem 0 0.5rem 0.5rem;\n}\n\n.bs-popover-left .arrow::before,\n.bs-popover-auto[x-placement^=\"left\"] .arrow::before {\n right: 0;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left .arrow::after,\n.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n right: 1px;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 0.9rem;\n color: inherit;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-item {\n position: relative;\n display: none;\n align-items: center;\n width: 100%;\n transition: transform 0.6s ease;\n backface-visibility: hidden;\n perspective: 1000px;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n position: absolute;\n top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next,\n .active.carousel-item-right {\n transform: translate3d(100%, 0, 0);\n }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-prev,\n .active.carousel-item-left {\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-duration: .6s;\n transition-property: opacity;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n opacity: 0;\n}\n\n.carousel-fade .carousel-item-next,\n.carousel-fade .carousel-item-prev,\n.carousel-fade .carousel-item.active,\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-prev {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-fade .carousel-item-next,\n .carousel-fade .carousel-item-prev,\n .carousel-fade .carousel-item.active,\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-prev {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n}\n\n.carousel-control-prev:hover,\n.carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: .9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: transparent no-repeat center center;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 10px;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n position: relative;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: rgba(255, 255, 255, 0.5);\n}\n\n.carousel-indicators li::before {\n position: absolute;\n top: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators li::after {\n position: absolute;\n bottom: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators .active {\n background-color: #fff;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover,\na.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover,\na.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover,\na.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover,\na.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover,\na.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover,\na.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover,\na.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover,\na.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.85714286%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n\n .float-sm-right {\n float: right !important;\n }\n\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n\n .float-md-right {\n float: right !important;\n }\n\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n\n .float-lg-right {\n float: right !important;\n }\n\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n\n .float-xl-right {\n float: right !important;\n }\n\n .float-xl-none {\n float: none !important;\n }\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n\n .text-sm-right {\n text-align: right !important;\n }\n\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n\n .text-md-right {\n text-align: right !important;\n }\n\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n\n .text-lg-right {\n text-align: right !important;\n }\n\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n\n .text-xl-right {\n text-align: right !important;\n }\n\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover,\na.text-primary:focus {\n color: #0062cc !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover,\na.text-secondary:focus {\n color: #545b62 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover,\na.text-success:focus {\n color: #1e7e34 !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover,\na.text-info:focus {\n color: #117a8b !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover,\na.text-warning:focus {\n color: #d39e00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover,\na.text-danger:focus {\n color: #bd2130 !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover,\na.text-light:focus {\n color: #dae0e5 !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover,\na.text-dark:focus {\n color: #1d2124 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n\n a:not(.btn) {\n text-decoration: underline;\n }\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n pre {\n white-space: pre-wrap !important;\n }\n\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n@page {\n size: a3;\n}\n\n body {\n min-width: 992px !important;\n }\n\n .container {\n min-width: 992px !important;\n }\n\n .navbar {\n display: none;\n }\n\n .badge {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n\n .table td,\n .table th {\n background-color: #fff !important;\n }\n\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n\n .table-dark {\n color: inherit;\n }\n\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n.navbar-laravel {\n background-color: #fff;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.MessagesWindow {\n height: 250px;\n overflow-y: scroll;\n padding: 15px;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/app.scss","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_hover.scss","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { font-size: $h1-font-size; }\nh2, .h2 { font-size: $h2-font-size; }\nh3, .h3 { font-size: $h3-font-size; }\nh4, .h4 { font-size: $h4-font-size; }\nh5, .h5 { font-size: $h5-font-size; }\nh6, .h6 { font-size: $h6-font-size; }\n\n.lead {\n font-size: $lead-font-size;\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n font-size: $display1-size;\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n font-size: $display2-size;\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n font-size: $display3-size;\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n font-size: $display4-size;\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n font-size: $small-font-size;\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n font-size: $blockquote-font-size;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%; // back to default font-size\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_type.scss","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_lists.scss","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: ($spacer / 2);\n line-height: 1;\n}\n\n.figure-caption {\n font-size: $figure-caption-font-size;\n color: $figure-caption-color;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_images.scss","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n// stylelint-disable indentation, media-query-list-comma-newline-after\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_image.scss","// Single side border-radius\n\n@mixin border-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_border-radius.scss","// Inline code\ncode {\n font-size: $code-font-size;\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n font-size: $kbd-font-size;\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n font-size: $code-font-size;\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_code.scss","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_grid.scss","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_grid.scss","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_breakpoints.scss","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_grid-framework.scss","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: $spacer;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n\n .table {\n background-color: $body-bg;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: (2 * $table-border-width);\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, -9));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_tables.scss","// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_table-row.scss","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-size: $font-size-base;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @if $enable-rounded {\n // Manually use the if/else instead of the mixin to account for iOS override\n border-radius: $input-border-radius;\n } @else {\n // Otherwise undo the iOS default\n border-radius: 0;\n }\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n background-color: transparent;\n border: 0;\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n @include form-control-focus();\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n}\n\nselect.form-control {\n &:not([size]):not([multiple]) {\n height: $input-height;\n }\n\n &:focus::-ms-value {\n // Suppress the nested default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `<label>/<legend>` default\n font-size: inherit; // Override the `<legend>` default\n line-height: $input-line-height;\n}\n\n.col-form-label-lg {\n padding-top: calc(#{$input-padding-y-lg} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y-lg} + #{$input-border-width});\n font-size: $font-size-lg;\n line-height: $input-line-height-lg;\n}\n\n.col-form-label-sm {\n padding-top: calc(#{$input-padding-y-sm} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y-sm} + #{$input-border-width});\n font-size: $font-size-sm;\n line-height: $input-line-height-sm;\n}\n\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: $input-padding-y;\n padding-bottom: $input-padding-y;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.form-control-sm {\n padding: $input-padding-y-sm $input-padding-x-sm;\n font-size: $font-size-sm;\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\nselect.form-control-sm {\n &:not([size]):not([multiple]) {\n height: $input-height-sm;\n }\n}\n\n.form-control-lg {\n padding: $input-padding-y-lg $input-padding-x-lg;\n font-size: $font-size-lg;\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\nselect.form-control-lg {\n &:not([size]):not([multiple]) {\n height: $input-height-lg;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: $form-group-margin-bottom;\n}\n\n.form-text {\n display: block;\n margin-top: $form-text-margin-top;\n}\n\n\n// Form grid\n//\n// Special replacement for our grid system's `.row` for tighter form layouts.\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.form-check {\n position: relative;\n display: block;\n padding-left: $form-check-input-gutter;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: $form-check-input-margin-y;\n margin-left: -$form-check-input-gutter;\n\n &:disabled ~ .form-check-label {\n color: $text-muted;\n }\n}\n\n.form-check-label {\n margin-bottom: 0; // Override default `<label>` bottom margin\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0; // Override base .form-check\n margin-right: $form-check-inline-margin-x;\n\n // Undo .form-check-input defaults and add some `margin-right`.\n .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: $form-check-inline-input-margin-x;\n margin-left: 0;\n }\n}\n\n\n// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server side validation.\n\n@include form-validation-state(\"valid\", $form-feedback-valid-color);\n@include form-validation-state(\"invalid\", $form-feedback-invalid-color);\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)\n\n // Because we use flex, the initial sizing of checkboxes is collapsed and\n // doesn't occupy the full-width (which is what we want for xs grid tier),\n // so we force that here.\n .form-check {\n width: 100%;\n }\n\n // Kick in the inline\n @include media-breakpoint-up(sm) {\n label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n\n // Inline-block all the things for \"inline\"\n .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n\n // Allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-plaintext {\n display: inline-block;\n }\n\n .input-group,\n .custom-select {\n width: auto;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-check-input {\n position: relative;\n margin-top: 0;\n margin-right: $form-check-input-margin-x;\n margin-left: 0;\n }\n\n .custom-control {\n align-items: center;\n justify-content: center;\n }\n .custom-control-label {\n margin-bottom: 0;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_forms.scss","@mixin transition($transition...) {\n @if $enable-transitions {\n @if length($transition) == 0 {\n transition: $transition-base;\n } @else {\n transition: $transition;\n }\n }\n\n @media screen and (prefers-reduced-motion: reduce) {\n transition: none;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_transition.scss","// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus() {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $input-focus-box-shadow;\n } @else {\n box-shadow: $input-focus-box-shadow;\n }\n }\n}\n\n\n@mixin form-validation-state($state, $color) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n font-size: $form-feedback-font-size;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: $white;\n background-color: rgba($color, .8);\n border-radius: .2rem;\n }\n\n .form-control,\n .custom-select {\n .was-validated &:#{$state},\n &.is-#{$state} {\n border-color: $color;\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .form-control-file {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .form-check-input {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n background-color: lighten($color, 25%);\n }\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n\n &:checked {\n ~ .custom-control-label::before {\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .custom-file-label {\n border-color: $color;\n\n &::before { border-color: inherit; }\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n\n &:focus {\n ~ .custom-file-label {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_forms.scss","// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_gradients.scss","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-weight: $btn-font-weight;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $font-size-base, $btn-line-height, $btn-border-radius);\n @include transition($btn-transition);\n\n // Share hover and focus styles\n @include hover-focus {\n text-decoration: none;\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n\n // Opinionated: add \"hand\" cursor to non-disabled .btn elements\n &:not(:disabled):not(.disabled) {\n cursor: pointer;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active {\n background-image: none;\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n}\n\n// Future-proof disabling of clicks on `<a>` elements\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $link-color;\n background-color: transparent;\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n background-color: transparent;\n border-color: transparent;\n }\n\n &:focus,\n &.focus {\n text-decoration: $link-hover-decoration;\n border-color: transparent;\n box-shadow: none;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n pointer-events: none;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n display: block;\n width: 100%;\n\n // Vertically space out multiple block buttons\n + .btn-block {\n margin-top: $btn-block-spacing-y;\n }\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_buttons.scss","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n background-color: transparent;\n background-image: none;\n border-color: $color;\n\n &:hover {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows and $btn-active-box-shadow != none {\n box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n font-size: $font-size;\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @if $enable-rounded {\n border-radius: $border-radius;\n } @else {\n border-radius: 0;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_buttons.scss","// stylelint-disable selector-no-qualifying-type\n\n.fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_transitions.scss","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n // Generate the caret automatically\n @include caret;\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y 0;\n margin: $dropdown-spacer 0 0; // override default ul\n font-size: $font-size-base; // Redeclare because nesting can cause inheritance issues\n color: $body-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropright {\n .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(right);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropleft {\n .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(left);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n// When enabled Popper.js, reset basic dropdown position\n// stylelint-disable no-duplicate-selectors\n.dropdown-menu {\n &[x-placement^=\"top\"],\n &[x-placement^=\"right\"],\n &[x-placement^=\"bottom\"],\n &[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n }\n}\n// stylelint-enable no-duplicate-selectors\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n @include nav-divider($dropdown-divider-bg);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n @include hover-focus {\n color: $dropdown-link-hover-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-padding-y $dropdown-item-padding-x;\n margin-bottom: 0; // for use with heading elements\n font-size: $font-size-sm;\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_dropdown.scss","@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: $caret-width * .85;\n vertical-align: $caret-width * .85;\n content: \"\";\n @if $direction == down {\n @include caret-down;\n } @else if $direction == up {\n @include caret-up;\n } @else if $direction == right {\n @include caret-right;\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: $caret-width * .85;\n vertical-align: $caret-width * .85;\n content: \"\";\n @include caret-left;\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_caret.scss","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_nav-divider.scss","// stylelint-disable selector-no-qualifying-type\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 0 1 auto;\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n @include hover {\n z-index: 1;\n }\n &:focus,\n &:active,\n &.active {\n z-index: 1;\n }\n }\n\n // Prevent double borders when buttons are next to each other\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -$btn-border-width;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n > .btn:first-child {\n margin-left: 0;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-right-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-left-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropright &::after {\n margin-left: 0;\n }\n\n .dropleft &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n .btn,\n .btn-group {\n width: 100%;\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -$btn-border-width;\n margin-left: 0;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n.btn-group-toggle {\n > .btn,\n > .btn-group > .btn {\n margin-bottom: 0; // Override default `<label>` value\n\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_button-group.scss","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .custom-select,\n > .custom-file {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n // Add width 1% and flex-basis auto to ensure that button will not wrap out\n // the column. Applies to IE Edge+ and Firefox. Chrome does not require this.\n width: 1%;\n margin-bottom: 0;\n\n // Bring the \"active\" form control to the top of surrounding elements\n &:focus {\n z-index: 3;\n }\n\n + .form-control,\n + .custom-select,\n + .custom-file {\n margin-left: -$input-border-width;\n }\n }\n\n > .form-control,\n > .custom-select {\n &:not(:last-child) { @include border-right-radius(0); }\n &:not(:first-child) { @include border-left-radius(0); }\n }\n\n // Custom file inputs have more complex markup, thus requiring different\n // border-radius overrides.\n > .custom-file {\n display: flex;\n align-items: center;\n\n &:not(:last-child) .custom-file-label,\n &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }\n &:not(:first-child) .custom-file-label { @include border-left-radius(0); }\n }\n}\n\n\n// Prepend and append\n//\n// While it requires one extra layer of HTML for each, dedicated prepend and\n// append elements allow us to 1) be less clever, 2) simplify our selectors, and\n// 3) support HTML5 form validation.\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n }\n\n .btn + .btn,\n .btn + .input-group-text,\n .input-group-text + .input-group-text,\n .input-group-text + .btn {\n margin-left: -$input-border-width;\n }\n}\n\n.input-group-prepend { margin-right: -$input-border-width; }\n.input-group-append { margin-left: -$input-border-width; }\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-padding-y $input-padding-x;\n margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom\n font-size: $font-size-base; // Match inputs\n font-weight: $font-weight-normal;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n @extend .form-control-lg;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n @extend .form-control-sm;\n}\n\n\n// Prepend and append rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n @include border-right-radius(0);\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n @include border-left-radius(0);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_input-group.scss","// Embedded icons from Open Iconic.\n// Released under MIT and copyright 2014 Waybury.\n// https://useiconic.com/open\n\n\n// Checkboxes and radios\n//\n// Base class takes care of all the key behavioral aspects.\n\n.custom-control {\n position: relative;\n display: block;\n min-height: (1rem * $line-height-base);\n padding-left: $custom-control-gutter;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: $custom-control-spacer-x;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1; // Put the input behind the label so it doesn't overlay text\n opacity: 0;\n\n &:checked ~ .custom-control-label::before {\n color: $custom-control-indicator-checked-color;\n @include gradient-bg($custom-control-indicator-checked-bg);\n @include box-shadow($custom-control-indicator-checked-box-shadow);\n }\n\n &:focus ~ .custom-control-label::before {\n // the mixin is not used here to make sure there is feedback\n box-shadow: $custom-control-indicator-focus-box-shadow;\n }\n\n &:active ~ .custom-control-label::before {\n color: $custom-control-indicator-active-color;\n background-color: $custom-control-indicator-active-bg;\n @include box-shadow($custom-control-indicator-active-box-shadow);\n }\n\n &:disabled {\n ~ .custom-control-label {\n color: $custom-control-label-disabled-color;\n\n &::before {\n background-color: $custom-control-indicator-disabled-bg;\n }\n }\n }\n}\n\n// Custom control indicators\n//\n// Build the custom controls out of pseudo-elements.\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n\n // Background-color and (when enabled) gradient\n &::before {\n position: absolute;\n top: (($line-height-base - $custom-control-indicator-size) / 2);\n left: -$custom-control-gutter;\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n pointer-events: none;\n content: \"\";\n user-select: none;\n background-color: $custom-control-indicator-bg;\n @include box-shadow($custom-control-indicator-box-shadow);\n }\n\n // Foreground (icon)\n &::after {\n position: absolute;\n top: (($line-height-base - $custom-control-indicator-size) / 2);\n left: -$custom-control-gutter;\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n content: \"\";\n background-repeat: no-repeat;\n background-position: center center;\n background-size: $custom-control-indicator-bg-size;\n }\n}\n\n\n// Checkboxes\n//\n// Tweak just a few things for checkboxes.\n\n.custom-checkbox {\n .custom-control-label::before {\n @include border-radius($custom-checkbox-indicator-border-radius);\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::before {\n @include gradient-bg($custom-control-indicator-checked-bg);\n }\n &::after {\n background-image: $custom-checkbox-indicator-icon-checked;\n }\n }\n\n .custom-control-input:indeterminate ~ .custom-control-label {\n &::before {\n @include gradient-bg($custom-checkbox-indicator-indeterminate-bg);\n @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);\n }\n &::after {\n background-image: $custom-checkbox-indicator-icon-indeterminate;\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n background-color: $custom-control-indicator-checked-disabled-bg;\n }\n &:indeterminate ~ .custom-control-label::before {\n background-color: $custom-control-indicator-checked-disabled-bg;\n }\n }\n}\n\n// Radios\n//\n// Tweak just a few things for radios.\n\n.custom-radio {\n .custom-control-label::before {\n border-radius: $custom-radio-indicator-border-radius;\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::before {\n @include gradient-bg($custom-control-indicator-checked-bg);\n }\n &::after {\n background-image: $custom-radio-indicator-icon-checked;\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n background-color: $custom-control-indicator-checked-disabled-bg;\n }\n }\n}\n\n\n// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n//\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: $custom-select-height;\n padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;\n line-height: $custom-select-line-height;\n color: $custom-select-color;\n vertical-align: middle;\n background: $custom-select-bg $custom-select-indicator no-repeat right $custom-select-padding-x center;\n background-size: $custom-select-bg-size;\n border: $custom-select-border-width solid $custom-select-border-color;\n @if $enable-rounded {\n border-radius: $custom-select-border-radius;\n } @else {\n border-radius: 0;\n }\n appearance: none;\n\n &:focus {\n border-color: $custom-select-focus-border-color;\n outline: 0;\n box-shadow: $custom-select-focus-box-shadow;\n\n &::-ms-value {\n // For visual consistency with other platforms/browsers,\n // suppress the default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: $custom-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $custom-select-disabled-color;\n background-color: $custom-select-disabled-bg;\n }\n\n // Hides the default caret in IE11\n &::-ms-expand {\n opacity: 0;\n }\n}\n\n.custom-select-sm {\n height: $custom-select-height-sm;\n padding-top: $custom-select-padding-y;\n padding-bottom: $custom-select-padding-y;\n font-size: $custom-select-font-size-sm;\n}\n\n.custom-select-lg {\n height: $custom-select-height-lg;\n padding-top: $custom-select-padding-y;\n padding-bottom: $custom-select-padding-y;\n font-size: $custom-select-font-size-lg;\n}\n\n\n// File\n//\n// Custom file input.\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: $custom-file-height;\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: $custom-file-height;\n margin: 0;\n opacity: 0;\n\n &:focus ~ .custom-file-label {\n border-color: $custom-file-focus-border-color;\n box-shadow: $custom-file-focus-box-shadow;\n\n &::after {\n border-color: $custom-file-focus-border-color;\n }\n }\n\n @each $lang, $value in $custom-file-text {\n &:lang(#{$lang}) ~ .custom-file-label::after {\n content: $value;\n }\n }\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: $custom-file-height;\n padding: $custom-file-padding-y $custom-file-padding-x;\n line-height: $custom-file-line-height;\n color: $custom-file-color;\n background-color: $custom-file-bg;\n border: $custom-file-border-width solid $custom-file-border-color;\n @include border-radius($custom-file-border-radius);\n @include box-shadow($custom-file-box-shadow);\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: $custom-file-height-inner;\n padding: $custom-file-padding-y $custom-file-padding-x;\n line-height: $custom-file-line-height;\n color: $custom-file-button-color;\n content: \"Browse\";\n @include gradient-bg($custom-file-button-bg);\n border-left: $custom-file-border-width solid $custom-file-border-color;\n @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);\n }\n}\n\n// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.custom-range {\n width: 100%;\n padding-left: 0; // Firefox specific\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: none;\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: -($custom-range-thumb-width * .25); // Webkit specific?\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n appearance: none;\n\n &:focus {\n outline: none;\n box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility\n }\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent; // Why?\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent;\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n appearance: none;\n\n &:focus {\n outline: none;\n box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility\n }\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n appearance: none;\n\n &:focus {\n outline: none;\n box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility\n }\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-ms-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: transparent;\n border-color: transparent;\n border-width: ($custom-range-thumb-height * .5);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-fill-lower {\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &::-ms-fill-upper {\n margin-right: 15px; // arbitrary?\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_custom-forms.scss","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s or `<ul>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n\n @include hover-focus {\n text-decoration: none;\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-item {\n margin-bottom: -$nav-tabs-border-width;\n }\n\n .nav-link {\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n @include hover-focus {\n border-color: $nav-tabs-link-hover-border-color;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n background-color: $nav-pills-link-active-bg;\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_nav.scss","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Navbar divider\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: $navbar-padding-y $navbar-padding-x;\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properities so that content nested within behave properly.\n > .container,\n > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n display: inline-block;\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-padding-x;\n font-size: $navbar-brand-font-size;\n line-height: inherit;\n white-space: nowrap;\n\n @include hover-focus {\n text-decoration: none;\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n float: none;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n display: inline-block;\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orienation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n font-size: $navbar-toggler-font-size;\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n\n @include hover-focus {\n text-decoration: none;\n }\n\n // Opinionated: add \"hand\" cursor to non-disabled .navbar-toggler elements\n &:not(:disabled):not(.disabled) {\n cursor: pointer;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n > .container,\n > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n }\n\n @include media-breakpoint-up($next) {\n flex-flow: row nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n // For nesting containers, have to redeclare for alignment purposes\n > .container,\n > .container-fluid {\n flex-wrap: nowrap;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n\n // Changes flex-bases to auto because of an IE10 bug\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n }\n }\n }\n}\n\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-active-color;\n\n @include hover-focus {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n @include hover-focus {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: $navbar-light-toggler-icon-bg;\n }\n\n .navbar-text {\n color: $navbar-light-color;\n a {\n color: $navbar-light-active-color;\n\n @include hover-focus {\n color: $navbar-light-active-color;\n }\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-active-color;\n\n @include hover-focus {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n @include hover-focus {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: $navbar-dark-toggler-icon-bg;\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a {\n color: $navbar-dark-active-color;\n\n @include hover-focus {\n color: $navbar-dark-active-color;\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_navbar.scss","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group:first-child {\n .list-group-item:first-child {\n @include border-top-radius($card-border-radius);\n }\n }\n\n > .list-group:last-child {\n .list-group-item:last-child {\n @include border-bottom-radius($card-border-radius);\n }\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: $card-spacer-x;\n}\n\n.card-title {\n margin-bottom: $card-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -($card-spacer-y / 2);\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n @include hover {\n text-decoration: none;\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-spacer-y $card-spacer-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n\n + .list-group {\n .list-group-item:first-child {\n border-top: 0;\n }\n }\n}\n\n.card-footer {\n padding: $card-spacer-y $card-spacer-x;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -($card-spacer-x / 2);\n margin-bottom: -$card-spacer-y;\n margin-left: -($card-spacer-x / 2);\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -($card-spacer-x / 2);\n margin-left: -($card-spacer-x / 2);\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n}\n\n.card-img {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n @include border-radius($card-inner-border-radius);\n}\n\n// Card image caps\n.card-img-top {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n// Card deck\n\n.card-deck {\n display: flex;\n flex-direction: column;\n\n .card {\n margin-bottom: $card-deck-margin;\n }\n\n @include media-breakpoint-up(sm) {\n flex-flow: row wrap;\n margin-right: -$card-deck-margin;\n margin-left: -$card-deck-margin;\n\n .card {\n display: flex;\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: $card-deck-margin;\n margin-bottom: 0; // Override the default\n margin-left: $card-deck-margin;\n }\n }\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n display: flex;\n flex-direction: column;\n\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:first-child {\n @include border-right-radius(0);\n\n .card-img-top,\n .card-header {\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n border-bottom-right-radius: 0;\n }\n }\n\n &:last-child {\n @include border-left-radius(0);\n\n .card-img-top,\n .card-header {\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n border-bottom-left-radius: 0;\n }\n }\n\n &:only-child {\n @include border-radius($card-border-radius);\n\n .card-img-top,\n .card-header {\n @include border-top-radius($card-border-radius);\n }\n .card-img-bottom,\n .card-footer {\n @include border-bottom-radius($card-border-radius);\n }\n }\n\n &:not(:first-child):not(:last-child):not(:only-child) {\n @include border-radius(0);\n\n .card-img-top,\n .card-img-bottom,\n .card-header,\n .card-footer {\n @include border-radius(0);\n }\n }\n }\n }\n }\n}\n\n\n//\n// Columns\n//\n\n.card-columns {\n .card {\n margin-bottom: $card-columns-margin;\n }\n\n @include media-breakpoint-up(sm) {\n column-count: $card-columns-count;\n column-gap: $card-columns-gap;\n orphans: 1;\n widows: 1;\n\n .card {\n display: inline-block; // Don't let them vertically span multiple columns\n width: 100%; // Don't let their width change\n }\n }\n}\n\n\n//\n// Accordion\n//\n\n.accordion {\n .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n }\n\n .card:not(:first-of-type) {\n .card-header:first-child {\n border-radius: 0;\n }\n }\n\n .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_card.scss",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding;\n\n &::before {\n display: inline-block; // Suppress underlining of the separator in modern browsers\n padding-right: $breadcrumb-item-padding;\n color: $breadcrumb-divider-color;\n content: $breadcrumb-divider;\n }\n }\n\n // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built\n // without `<ul>`s. The `::before` pseudo-element generates an element\n // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.\n //\n // To trick IE into suppressing the underline, we give the pseudo-element an\n // underline and then immediately remove it.\n + .breadcrumb-item:hover::before {\n text-decoration: underline;\n }\n // stylelint-disable-next-line no-duplicate-selectors\n + .breadcrumb-item:hover::before {\n text-decoration: none;\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_breadcrumb.scss",".pagination {\n display: flex;\n @include list-unstyled();\n @include border-radius();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: $pagination-padding-y $pagination-padding-x;\n margin-left: -$pagination-border-width;\n line-height: $pagination-line-height;\n color: $pagination-color;\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: none;\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 2;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n\n // Opinionated: add \"hand\" cursor to non-disabled .page-link elements\n &:not(:disabled):not(.disabled) {\n cursor: pointer;\n }\n}\n\n.page-item {\n &:first-child {\n .page-link {\n margin-left: 0;\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n\n &.active .page-link {\n z-index: 1;\n color: $pagination-active-color;\n background-color: $pagination-active-bg;\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n // Opinionated: remove the \"hand\" cursor set previously for .page-link\n cursor: auto;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_pagination.scss","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n font-size: $font-size;\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_pagination.scss","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n font-size: $badge-font-size;\n font-weight: $badge-font-weight;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n// Pill badges\n//\n// Make them extra rounded with a modifier to replace v3's badges.\n\n.badge-pill {\n padding-right: $badge-pill-padding-x;\n padding-left: $badge-pill-padding-x;\n @include border-radius($badge-pill-border-radius);\n}\n\n// Colors\n//\n// Contextual variations (linked badges get darker on :hover).\n\n@each $color, $value in $theme-colors {\n .badge-#{$color} {\n @include badge-variant($value);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_badge.scss","@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n &[href] {\n @include hover-focus {\n color: color-yiq($bg);\n text-decoration: none;\n background-color: darken($bg, 10%);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_badge.scss",".jumbotron {\n padding: $jumbotron-padding ($jumbotron-padding / 2);\n margin-bottom: $jumbotron-padding;\n background-color: $jumbotron-bg;\n @include border-radius($border-radius-lg);\n\n @include media-breakpoint-up(sm) {\n padding: ($jumbotron-padding * 2) $jumbotron-padding;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n @include border-radius(0);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_jumbotron.scss","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: ($close-font-size + $alert-padding-x * 2);\n\n // Adjust close link position\n .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: $alert-padding-y $alert-padding-x;\n color: inherit;\n }\n}\n\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $color, $value in $theme-colors {\n .alert-#{$color} {\n @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_alert.scss","@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_alert.scss","@keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n}\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n font-size: $progress-font-size;\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes $progress-bar-animation-timing;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_progress.scss",".media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_media.scss","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n @include hover-focus {\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -$list-group-border-width;\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius($list-group-border-radius);\n }\n\n &:last-child {\n margin-bottom: 0;\n @include border-bottom-radius($list-group-border-radius);\n }\n\n @include hover-focus {\n z-index: 1; // Place hover/active items above their siblings for proper border styling\n text-decoration: none;\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n .list-group-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n }\n\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n }\n }\n\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $color, $value in $theme-colors {\n @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_list-group.scss","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_list-group.scss",".close {\n float: right;\n font-size: $close-font-size;\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n opacity: .5;\n\n @include hover-focus {\n color: $close-color;\n text-decoration: none;\n opacity: .75;\n }\n\n // Opinionated: add \"hand\" cursor to non-disabled .close elements\n &:not(:disabled):not(.disabled) {\n cursor: pointer;\n }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n// stylelint-disable property-no-vendor-prefix, selector-no-qualifying-type\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n// stylelint-enable\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_close.scss","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n overflow: hidden;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n\n .modal-open & {\n overflow-x: hidden;\n overflow-y: auto;\n }\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: translate(0, -25%);\n }\n .modal.show & {\n transform: translate(0, 0);\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - (#{$modal-dialog-margin} * 2));\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-modal-backdrop;\n background-color: $modal-backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $modal-backdrop-opacity; }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n align-items: flex-start; // so the close btn always stays on the upper right corner\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-border-radius);\n\n .close {\n padding: $modal-header-padding;\n // auto on the left force icon to the right even when there is no .modal-title\n margin: (-$modal-header-padding) (-$modal-header-padding) (-$modal-header-padding) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when should there be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n\n // Easily place margin between footer elements\n > :not(:first-child) { margin-left: .25rem; }\n > :not(:last-child) { margin-right: .25rem; }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-centered {\n min-height: calc(100% - (#{$modal-dialog-margin-y-sm-up} * 2));\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg { max-width: $modal-lg; }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_modal.scss","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n font-size: $tooltip-font-size;\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n bottom: 0;\n\n &::before {\n top: 0;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-right {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n top: 0;\n\n &::before {\n bottom: 0;\n border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-left {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-tooltip-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-tooltip-left;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_tooltip.scss","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start; // stylelint-disable-line declaration-block-no-duplicate-properties\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_reset-text.scss",".popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n font-size: $popover-font-size;\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n margin: 0 $border-radius-lg;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n margin-bottom: $popover-arrow-height;\n\n .arrow {\n bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);\n }\n\n .arrow::before,\n .arrow::after {\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n }\n\n .arrow::before {\n bottom: 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n .arrow::after {\n bottom: $popover-border-width;\n border-top-color: $popover-arrow-color;\n }\n}\n\n.bs-popover-right {\n margin-left: $popover-arrow-height;\n\n .arrow {\n left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners\n }\n\n .arrow::before,\n .arrow::after {\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n }\n\n .arrow::before {\n left: 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n .arrow::after {\n left: $popover-border-width;\n border-right-color: $popover-arrow-color;\n }\n}\n\n.bs-popover-bottom {\n margin-top: $popover-arrow-height;\n\n .arrow {\n top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);\n }\n\n .arrow::before,\n .arrow::after {\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n }\n\n .arrow::before {\n top: 0;\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n .arrow::after {\n top: $popover-border-width;\n border-bottom-color: $popover-arrow-color;\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: ($popover-arrow-width / -2);\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-left {\n margin-right: $popover-arrow-height;\n\n .arrow {\n right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners\n }\n\n .arrow::before,\n .arrow::after {\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n }\n\n .arrow::before {\n right: 0;\n border-left-color: $popover-arrow-outer-color;\n }\n\n .arrow::after {\n right: $popover-border-width;\n border-left-color: $popover-arrow-color;\n }\n}\n\n.bs-popover-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-popover-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-popover-left;\n }\n}\n\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n font-size: $font-size-base;\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);\n $offset-border-width: calc(#{$border-radius-lg} - #{$popover-border-width});\n @include border-top-radius($offset-border-width);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_popover.scss","// Notes on the classes:\n//\n// 1. The .carousel-item-left and .carousel-item-right is used to indicate where\n// the active slide is heading.\n// 2. .active.carousel-item is the current slide.\n// 3. .active.carousel-item-left and .active.carousel-item-right is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 4. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-item {\n position: relative;\n display: none;\n align-items: center;\n width: 100%;\n @include transition($carousel-transition);\n backface-visibility: hidden;\n perspective: 1000px;\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n position: absolute;\n top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n transform: translateX(0);\n\n @supports (transform-style: preserve-3d) {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n transform: translateX(100%);\n\n @supports (transform-style: preserve-3d) {\n transform: translate3d(100%, 0, 0);\n }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n transform: translateX(-100%);\n\n @supports (transform-style: preserve-3d) {\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-duration: .6s;\n transition-property: opacity;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n opacity: 1;\n }\n\n .active.carousel-item-left,\n .active.carousel-item-right {\n opacity: 0;\n }\n\n .carousel-item-next,\n .carousel-item-prev,\n .carousel-item.active,\n .active.carousel-item-left,\n .active.carousel-item-prev {\n transform: translateX(0);\n\n @supports (transform-style: preserve-3d) {\n transform: translate3d(0, 0, 0);\n }\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n color: $carousel-control-color;\n text-align: center;\n opacity: $carousel-control-opacity;\n // We can't have a transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Hover/focus state\n @include hover-focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: .9;\n }\n}\n.carousel-control-prev {\n left: 0;\n @if $enable-gradients {\n background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));\n }\n}\n.carousel-control-next {\n right: 0;\n @if $enable-gradients {\n background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));\n }\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background: transparent no-repeat center center;\n background-size: 100% 100%;\n}\n.carousel-control-prev-icon {\n background-image: $carousel-control-prev-icon-bg;\n}\n.carousel-control-next-icon {\n background-image: $carousel-control-next-icon-bg;\n}\n\n\n// Optional indicator pips\n//\n// Add an ordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 10px;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0; // override <ol> default\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-left: $carousel-control-width;\n list-style: none;\n\n li {\n position: relative;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: rgba($carousel-indicator-active-bg, .5);\n\n // Use pseudo classes to increase the hit area by 10px on top and bottom.\n &::before {\n position: absolute;\n top: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n }\n &::after {\n position: absolute;\n bottom: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n }\n }\n\n .active {\n background-color: $carousel-indicator-active-bg;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: ((100% - $carousel-caption-width) / 2);\n bottom: 20px;\n left: ((100% - $carousel-caption-width) / 2);\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_carousel.scss","// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_align.scss","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus {\n background-color: darken($color, 10%) !important;\n }\n }\n}\n\n@mixin bg-gradient-variant($parent, $color) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_background-variant.scss","// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(\".bg-#{$color}\", $value);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(\".bg-gradient-#{$color}\", $value);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_background.scss","// stylelint-disable declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded {\n border-radius: $border-radius !important;\n}\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_borders.scss",".clearfix {\n @include clearfix();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_clearfix.scss","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_clearfix.scss","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_display.scss","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: \"\";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n.embed-responsive-21by9 {\n &::before {\n padding-top: percentage(9 / 21);\n }\n}\n\n.embed-responsive-16by9 {\n &::before {\n padding-top: percentage(9 / 16);\n }\n}\n\n.embed-responsive-4by3 {\n &::before {\n padding-top: percentage(3 / 4);\n }\n}\n\n.embed-responsive-1by1 {\n &::before {\n padding-top: percentage(1 / 1);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_embed.scss","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_flex.scss","@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { @include float-left; }\n .float#{$infix}-right { @include float-right; }\n .float#{$infix}-none { @include float-none; }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_float.scss","// stylelint-disable declaration-no-important\n\n@mixin float-left {\n float: left !important;\n}\n@mixin float-right {\n float: right !important;\n}\n@mixin float-none {\n float: none !important;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_float.scss","// stylelint-disable declaration-no-important\n\n// Common values\n\n// Sass list not in variables since it's not intended for customization.\n// stylelint-disable-next-line scss/dollar-variable-default\n$positions: static, relative, absolute, fixed, sticky;\n\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_position.scss","//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_screenreaders.scss","// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_screen-reader.scss","// stylelint-disable declaration-no-important\n\n.shadow-sm { box-shadow: $box-shadow-sm !important; }\n.shadow { box-shadow: $box-shadow !important; }\n.shadow-lg { box-shadow: $box-shadow-lg !important; }\n.shadow-none { box-shadow: none !important; }\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_shadows.scss","// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_sizing.scss","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_spacing.scss","// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n.text-monospace { font-family: $font-family-monospace; }\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate; }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: $white !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(\".text-#{$color}\", $value);\n}\n\n.text-body { color: $body-color !important; }\n.text-muted { color: $text-muted !important; }\n\n.text-black-50 { color: rgba($black, .5) !important; }\n.text-white-50 { color: rgba($white, .5) !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide($ignore-warning: true);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_text.scss","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_text-truncate.scss","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $color !important;\n }\n a#{$parent} {\n @include hover-focus {\n color: darken($color, 10%) !important;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_text-emphasis.scss","// CSS image replacement\n@mixin text-hide($ignore-warning: false) {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @if ($ignore-warning != true) {\n @warn \"The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5.\";\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_text-hide.scss","//\n// Visibility utilities\n//\n\n.visible {\n @include invisible(visible);\n}\n\n.invisible {\n @include invisible(hidden);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/utilities/_visibility.scss","// stylelint-disable declaration-no-important\n\n// Visibility\n\n@mixin invisible($visibility) {\n visibility: $visibility !important;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/mixins/_visibility.scss","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// https://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n @media print {\n *,\n *::before,\n *::after {\n // Bootstrap specific; comment out `color` and `background`\n //color: $black !important; // Black prints faster\n text-shadow: none !important;\n //background: transparent !important;\n box-shadow: none !important;\n }\n\n a {\n &:not(.btn) {\n text-decoration: underline;\n }\n }\n\n // Bootstrap specific; comment the following selector out\n //a[href]::after {\n // content: \" (\" attr(href) \")\";\n //}\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n // Bootstrap specific; comment the following selector out\n //\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n //\n\n //a[href^=\"#\"]::after,\n //a[href^=\"javascript:\"]::after {\n // content: \"\";\n //}\n\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px\n page-break-inside: avoid;\n }\n\n //\n // Printing Tables:\n // http://css-discuss.incutio.com/wiki/Printing_Tables\n //\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Specify a size and min-width to make printing closer across browsers.\n // We don't set margin here because it breaks `size` in Chrome. We also\n // don't use `!important` on `size` as it breaks in Chrome.\n @page {\n size: $print-page-size;\n }\n body {\n min-width: $print-body-min-width !important;\n }\n .container {\n min-width: $print-body-min-width !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .badge {\n border: $border-width solid $black;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: $white !important;\n }\n }\n\n .table-bordered {\n th,\n td {\n border: 1px solid $gray-300 !important;\n }\n }\n\n .table-dark {\n color: inherit;\n\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $table-border-color;\n }\n }\n\n .table .thead-dark th {\n color: inherit;\n border-color: $table-border-color;\n }\n\n // Bootstrap specific changes end\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/node_modules/bootstrap/scss/_print.scss","// Fonts\n@import url(\"https://fonts.googleapis.com/css?family=Raleway:300,400,600\");\n// Variables\n@import \"variables\";\n// Bootstrap\n@import '~bootstrap/scss/bootstrap';\n.navbar-laravel {\n background-color: #fff;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.MessagesWindow {\n height: 250px;\n overflow-y: scroll;\n padding: 15px;\n}\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/sass/resources/assets/sass/app.scss"],"sourceRoot":""} \ No newline at end of file
diff --git a/public/favicon.ico b/public/favicon.ico
index e69de29..e69de29 100755..100644
--- a/public/favicon.ico
+++ b/public/favicon.ico
diff --git a/public/fonts/vendor/Ionicons/ionicons.eot b/public/fonts/vendor/Ionicons/ionicons.eot
deleted file mode 100644
index 92a3f20..0000000
--- a/public/fonts/vendor/Ionicons/ionicons.eot
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/Ionicons/ionicons.svg b/public/fonts/vendor/Ionicons/ionicons.svg
deleted file mode 100644
index 49fc8f3..0000000
--- a/public/fonts/vendor/Ionicons/ionicons.svg
+++ /dev/null
@@ -1,2230 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2014-12-4: Created.
--->
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-Created by FontForge 20120731 at Thu Dec 4 09:51:48 2014
- By Adam Bradley
-Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net)
-</metadata>
-<defs>
-<font id="Ionicons" horiz-adv-x="448" >
- <font-face
- font-family="Ionicons"
- font-weight="500"
- font-stretch="normal"
- units-per-em="512"
- panose-1="2 0 6 3 0 0 0 0 0 0"
- ascent="448"
- descent="-64"
- bbox="-0.54049 -64 512.487 448"
- underline-thickness="25.6"
- underline-position="-51.2"
- unicode-range="U+F100-F4F7"
- />
- <missing-glyph />
- <glyph glyph-name="ion-alert-circled" unicode="&#xf100;"
-d="M445 26c3 -5 5 -13 2 -18s-8 -8 -14 -8h-418c-6 0 -11 3 -14 8s-1 13 2 18l207 349c3 5 8 9 14 9s11 -4 14 -9zM256 48v48h-64v-48h64zM256 128v144h-64v-144h64z" />
- <glyph glyph-name="ion-alert" unicode="&#xf101;" horiz-adv-x="128"
-d="M128 -32h-128v96h128v-96zM112 128h-96l-16 288h128z" />
- <glyph glyph-name="ion-android-add-circle" unicode="&#xf359;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86z" />
- <glyph glyph-name="ion-android-add" unicode="&#xf2c7;" horiz-adv-x="320"
-d="M320 171h-139v-139h-42v139h-139v42h139v139h42v-139h139v-42z" />
- <glyph glyph-name="ion-android-alarm-clock" unicode="&#xf35a;" horiz-adv-x="428"
-d="M428 323l-28 -33l-98 82l28 33zM125 373l-97 -83l-28 33l97 83zM225 275v0v-111l85 -50l-16 -27l-101 61v127h32zM214 360c106 0 193 -86 193 -191s-87 -191 -193 -191c-107 0 -193 86 -193 191s86 191 193 191zM214 20c82 0 150 66 150 149c0 82 -68 149 -150 149
-s-150 -67 -150 -149s68 -149 150 -149z" />
- <glyph glyph-name="ion-android-alert" unicode="&#xf35b;" horiz-adv-x="416"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM232 88v40h-48v-40h48zM232 176v128h-48v-128h48z" />
- <glyph glyph-name="ion-android-apps" unicode="&#xf35c;" horiz-adv-x="320"
-d="M0 272v80h80v-80h-80zM120 32v80h80v-80h-80zM0 32v80h80v-80h-80zM0 152v80h80v-80h-80zM120 152v80h80v-80h-80zM240 352h80v-80h-80v80zM120 272v80h80v-80h-80zM240 152v80h80v-80h-80zM240 32v80h80v-80h-80z" />
- <glyph glyph-name="ion-android-archive" unicode="&#xf2c9;" horiz-adv-x="416"
-d="M406 348c7 -7 10 -17 10 -29v-289c0 -25 -21 -46 -46 -46h-324c-25 0 -46 21 -46 46v289c0 12 3 22 10 29l33 39c6 8 16 13 26 13h278c10 0 20 -5 26 -13zM208 65l127 127h-81v46h-92v-46h-81zM49 354h317l-22 23h-277z" />
- <glyph glyph-name="ion-android-arrow-back" unicode="&#xf2ca;" horiz-adv-x="342"
-d="M342 213v-42h-260l119 -120l-30 -30l-171 171l171 171l31 -30l-120 -120h260z" />
- <glyph glyph-name="ion-android-arrow-down" unicode="&#xf35d;" horiz-adv-x="342"
-d="M192 363v-260l120 120l30 -31l-171 -171l-171 171l30 30l120 -119v260h42z" />
- <glyph glyph-name="ion-android-arrow-dropdown-circle" unicode="&#xf35e;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 128l96 96h-192z" />
- <glyph glyph-name="ion-android-arrow-dropdown" unicode="&#xf35f;" horiz-adv-x="256"
-d="M0 256h256l-128 -128z" />
- <glyph glyph-name="ion-android-arrow-dropleft-circle" unicode="&#xf360;" horiz-adv-x="416"
-d="M416 192c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208s208 -93 208 -208zM144 192l96 -96v192z" />
- <glyph glyph-name="ion-android-arrow-dropleft" unicode="&#xf361;" horiz-adv-x="128"
-d="M128 320v-256l-128 128z" />
- <glyph glyph-name="ion-android-arrow-dropright-circle" unicode="&#xf362;" horiz-adv-x="416"
-d="M208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208zM176 96l96 96l-96 96v-192z" />
- <glyph glyph-name="ion-android-arrow-dropright" unicode="&#xf363;" horiz-adv-x="128"
-d="M0 320l128 -128l-128 -128v256z" />
- <glyph glyph-name="ion-android-arrow-dropup-circle" unicode="&#xf364;" horiz-adv-x="416"
-d="M416 192c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208s208 -93 208 -208zM304 160l-96 96l-96 -96h192z" />
- <glyph glyph-name="ion-android-arrow-dropup" unicode="&#xf365;" horiz-adv-x="256"
-d="M0 128l128 128l128 -128h-256z" />
- <glyph glyph-name="ion-android-arrow-forward" unicode="&#xf30f;" horiz-adv-x="342"
-d="M0 171v42h260l-119 120l30 30l171 -171l-171 -171l-31 30l120 120h-260z" />
- <glyph glyph-name="ion-android-arrow-up" unicode="&#xf366;" horiz-adv-x="342"
-d="M192 21h-42v260l-120 -119l-30 30l171 171l171 -171l-30 -31l-120 120v-260z" />
- <glyph glyph-name="ion-android-attach" unicode="&#xf367;" horiz-adv-x="235"
-d="M203 320h32v-235c0 -65 -53 -117 -118 -117s-117 52 -117 117v246c0 47 38 85 85 85s86 -38 86 -85v-246c0 -30 -24 -53 -54 -53s-53 23 -53 53v203h32v-203c0 -12 9 -21 21 -21s22 9 22 21v246c0 30 -24 53 -54 53s-53 -23 -53 -53v-246c0 -47 38 -85 85 -85
-s86 38 86 85v235z" />
- <glyph glyph-name="ion-android-bar" unicode="&#xf368;" horiz-adv-x="384"
-d="M171 171l-171 170v43h384v-43l-171 -170v-131h107v-40h-256v40h107v131zM96 299h192l43 42h-278z" />
- <glyph glyph-name="ion-android-bicycle" unicode="&#xf369;"
-d="M299 317c-19 0 -34 14 -34 33s15 34 34 34s33 -15 33 -34s-14 -33 -33 -33zM355 187c51 0 93 -43 93 -94s-42 -93 -93 -93s-94 42 -94 93s43 94 94 94zM355 28c36 0 65 29 65 65s-29 66 -65 66s-66 -30 -66 -66s30 -65 66 -65zM274 224l-30 45l-43 -45l39 -32v-112h-32
-v86l-61 38c-9 6 -19 15 -19 27c0 8 3 17 9 23l72 69c6 6 14 9 22 9c11 0 22 -7 28 -16l34 -60h59v-32h-78zM93 187c51 0 94 -43 94 -94s-43 -93 -94 -93s-93 42 -93 93s42 94 93 94zM93 28c36 0 66 29 66 65s-30 66 -66 66s-65 -30 -65 -66s29 -65 65 -65z" />
- <glyph glyph-name="ion-android-boat" unicode="&#xf36a;"
-d="M52 35l-51 139c-2 6 -1 12 1 17s8 8 13 10l38 13v98c0 23 20 43 43 43h64l16 53h96l16 -53h64c23 0 43 -20 43 -43v-98l38 -13c5 -2 11 -5 13 -10s3 -12 1 -17l-51 -139h-1c-34 0 -65 20 -86 43c-21 -23 -51 -43 -85 -43s-64 19 -85 42c-21 -23 -52 -42 -86 -42h-1z
-M96 312v-84l128 41l128 -41v84h-256zM309 40c0 0 59 -64 107 -64h-21c-30 0 -59 12 -86 26c-53 -28 -117 -28 -170 0c-27 -14 -56 -26 -86 -26h-21c49 0 107 64 107 64c52 -36 118 -36 170 0z" />
- <glyph glyph-name="ion-android-bookmark" unicode="&#xf36b;" horiz-adv-x="288"
-d="M248 384c22 0 40 -18 40 -40v-344l-144 64l-144 -64v344c0 22 18 40 40 40h208z" />
- <glyph glyph-name="ion-android-bulb" unicode="&#xf36c;"
-d="M224 278c-25 0 -50 -10 -68 -28s-28 -43 -28 -68c0 -34 18 -66 48 -83l16 -10v-18v-71h64v71v18l16 10c15 8 27 20 35 34c9 15 13 31 13 49c0 25 -10 50 -28 68s-43 28 -68 28zM245 416v0v-64h-42v64h42zM374 362v0l30 -30l-38 -38l-30 30zM74 362v0l38 -38l-30 -30
-l-38 38zM224 310v0c70 0 128 -58 128 -128c0 -48 -26 -89 -64 -111v-103h-128v103c-38 22 -64 64 -64 111c0 70 58 128 128 128zM448 203v0v-42h-64v42h64zM64 203v0v-42h-64v42h64z" />
- <glyph glyph-name="ion-android-bus" unicode="&#xf36d;" horiz-adv-x="352"
-d="M0 96v204c0 75 82 84 176 84s176 -9 176 -84v-204c0 -18 -14 -24 -27 -36v-39c0 -12 -9 -21 -21 -21h-21c-12 0 -22 9 -22 21v22h-170v-22c0 -12 -10 -21 -22 -21h-21c-12 0 -21 9 -21 21v39c-13 12 -27 17 -27 36zM80 80c18 0 32 14 32 32s-14 32 -32 32
-s-32 -14 -32 -32s14 -32 32 -32zM272 80c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 203v106h-256v-106h256z" />
- <glyph glyph-name="ion-android-calendar" unicode="&#xf2d1;" horiz-adv-x="384"
-d="M304 176v-96h-96v96h96zM272 384h48v-32h24c22 0 40 -18 40 -40v-272c0 -22 -18 -40 -40 -40h-304c-22 0 -40 18 -40 40v272c0 22 18 40 40 40h24v32h48v-32h160v32zM344 40v212h-304v-212h304z" />
- <glyph glyph-name="ion-android-call" unicode="&#xf2d2;" horiz-adv-x="384"
-d="M363 117c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-201 0 -363 162 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 13 -77c2 -7 0 -16 -5 -21l-47 -47c31 -61 80 -110 141 -141l47 47c5 6 14 7 21 5c23 -7 49 -12 76 -12z" />
- <glyph glyph-name="ion-android-camera" unicode="&#xf2d3;"
-d="M161 168c0 42 21 63 63 63s63 -21 63 -63s-21 -63 -63 -63s-63 21 -63 63zM408 352c11 0 20 -4 28 -12s12 -17 12 -28v-272c0 -11 -4 -20 -12 -28s-17 -12 -28 -12h-368c-11 0 -20 4 -28 12s-12 17 -12 28v272c0 11 4 20 12 28s17 12 28 12h88l32 32h128l32 -32h88z
-M224 56c31 0 57 11 79 33s33 48 33 79s-11 57 -33 79s-48 33 -79 33s-57 -11 -79 -33s-33 -48 -33 -79s11 -57 33 -79s48 -33 79 -33z" />
- <glyph glyph-name="ion-android-cancel" unicode="&#xf36e;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM312 117l-75 75l75 75l-29 29l-75 -75l-75 75l-29 -29l75 -75l-75 -75l29 -29l75 75l75 -75z" />
- <glyph glyph-name="ion-android-car" unicode="&#xf36f;" horiz-adv-x="384"
-d="M339 331l45 -118v-160c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v11h-256v-11c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v160l45 118c4 13 16 21 30 21h234c14 0 26 -8 30 -21zM75 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 128
-c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM43 235h298l-32 85h-234z" />
- <glyph glyph-name="ion-android-cart" unicode="&#xf370;" horiz-adv-x="416"
-d="M122 70c23 0 41 -18 41 -41s-18 -42 -41 -42s-42 19 -42 42s19 41 42 41zM0 397h68l19 -42h308c11 0 21 -9 21 -20c0 -4 -1 -8 -2 -10l-75 -129c-7 -14 -20 -22 -36 -22h-155l-21 -32s-2 -5 -2 -6c0 -3 2 -5 5 -5h238v-40h-243c-26 0 -45 14 -45 42c0 7 2 15 5 20l31 51
-l-74 151h-42v42zM326 70c23 0 42 -18 42 -41s-19 -42 -42 -42s-41 19 -41 42s18 41 41 41z" />
- <glyph glyph-name="ion-android-chat" unicode="&#xf2d4;" horiz-adv-x="416"
-d="M344 384c4 0 7 -4 7 -8v-214c0 -4 -3 -9 -7 -9h-187l-90 -89v89h-57c-4 0 -10 5 -10 9v214c0 4 6 8 10 8h334zM408 321c4 0 8 -5 8 -9v-214c0 -4 -4 -9 -8 -9h-57v-89l-90 89h-130l39 39h181c18 0 25 10 25 26v167h32z" />
- <glyph glyph-name="ion-android-checkbox-blank" unicode="&#xf371;" horiz-adv-x="384"
-d="M341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
- <glyph glyph-name="ion-android-checkbox-outline-blank" unicode="&#xf372;" horiz-adv-x="384"
-d="M341 341h-298v-298h298v298zM341 384v0c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
- <glyph glyph-name="ion-android-checkbox-outline" unicode="&#xf373;" horiz-adv-x="384"
-d="M105 233l66 -66l183 183l30 -30l-213 -213l-96 96zM341 43v170h43v-170c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h213v-43h-213v-298h298z" />
- <glyph glyph-name="ion-android-checkbox" unicode="&#xf374;" horiz-adv-x="384"
-d="M341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM149 85l192 192l-30 30l-162 -162l-76 77l-30 -30z" />
- <glyph glyph-name="ion-android-checkmark-circle" unicode="&#xf375;" horiz-adv-x="416"
-d="M123 232l64 -64l179 178l29 -29l-208 -208l-93 93zM374 192h42c0 -114 -94 -208 -208 -208s-208 94 -208 208s94 208 208 208c28 0 54 -6 78 -16l-32 -32c-15 4 -30 6 -46 6c-92 0 -166 -74 -166 -166s74 -166 166 -166s166 74 166 166z" />
- <glyph glyph-name="ion-android-clipboard" unicode="&#xf376;" horiz-adv-x="384"
-d="M341 368c23 0 43 -20 43 -43v-314c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v314c0 23 20 43 43 43h87c7 28 32 48 62 48s55 -20 62 -48h87zM192 368c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM344 8v320h-40v-72h-224v72h-40v-320h304z" />
- <glyph glyph-name="ion-android-close" unicode="&#xf2d7;" horiz-adv-x="298"
-d="M298 311l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" />
- <glyph glyph-name="ion-android-cloud-circle" unicode="&#xf377;" horiz-adv-x="416"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM302 109c29 0 52 23 52 52s-23 52 -52 52h-11c0 46 -37 83 -83 83c-38 0 -71 -26 -80 -62h-3c-34 0 -63 -29 -63 -63s29 -62 63 -62h177z" />
- <glyph glyph-name="ion-android-cloud-done" unicode="&#xf378;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM197 85l141 141l-30 30l-111 -111l-44 45l-30 -30z" />
- <glyph glyph-name="ion-android-cloud-outline" unicode="&#xf379;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM380 72c33 0 60 27 60 60s-27 60 -60 60h-30v10c0 61 -49 110 -110 110c-51 0 -93 -34 -106 -80h-14
-c-44 0 -80 -36 -80 -80s36 -80 80 -80h260z" />
- <glyph glyph-name="ion-android-cloud" unicode="&#xf37a;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121z" />
- <glyph glyph-name="ion-android-color-palette" unicode="&#xf37b;" horiz-adv-x="384"
-d="M192 384c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-38c-18 0 -32 -14 -32 -32c0 -9 3 -17 8 -22s9 -12 9 -21c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192zM75 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 277
-c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM245 277c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-android-compass" unicode="&#xf37c;"
-d="M224 217c13 0 25 -12 25 -25s-12 -25 -25 -25s-25 12 -25 25s12 25 25 25zM224 416c123 0 224 -101 224 -224s-101 -224 -224 -224s-224 101 -224 224s101 224 224 224zM273 143l85 183l-183 -85l-85 -183z" />
- <glyph glyph-name="ion-android-contact" unicode="&#xf2d8;" horiz-adv-x="384"
-d="M267 110c59 -18 104 -58 117 -110h-384c13 52 58 92 117 110c22 -13 48 -20 75 -20s53 7 75 20zM192 384c73 0 132 -59 132 -132s-59 -132 -132 -132s-132 59 -132 132s59 132 132 132zM192 153c42 0 78 26 92 63h-184c14 -37 50 -63 92 -63z" />
- <glyph glyph-name="ion-android-contacts" unicode="&#xf2d9;"
-d="M207 104c47 -14 76 -62 87 -104h-294c11 42 40 90 87 104c18 -10 38 -16 60 -16s42 6 60 16zM147 328c58 0 106 -48 106 -106s-48 -106 -106 -106s-106 48 -106 106s48 106 106 106zM147 141c34 0 62 23 74 51h-148c12 -28 40 -51 74 -51zM291 64c-13 20 -34 43 -60 53
-c11 9 21 23 28 35c13 -5 27 -8 42 -8c22 0 42 6 60 16c47 -14 76 -54 87 -96h-157zM275 248c-8 37 -31 69 -63 87c19 29 52 49 89 49c58 0 106 -48 106 -106s-48 -106 -106 -106c-11 0 -22 2 -32 5c3 8 6 16 7 25c8 -3 16 -4 25 -4c34 0 62 22 74 50h-100z" />
- <glyph glyph-name="ion-android-contract" unicode="&#xf37d;" horiz-adv-x="384"
-d="M0 77v51h128v-128h-51v77h-77zM77 307v77h51v-128h-128v51h77zM256 0v128h128v-51h-77v-77h-51zM307 307h77v-51h-128v128h51v-77z" />
- <glyph glyph-name="ion-android-create" unicode="&#xf37e;" horiz-adv-x="384"
-d="M0 80l236 236l80 -80l-236 -236h-80v80zM378 298l-40 -40l-80 80l40 40c9 9 20 9 29 0l51 -51c9 -9 9 -20 0 -29z" />
- <glyph glyph-name="ion-android-delete" unicode="&#xf37f;" horiz-adv-x="320"
-d="M32 43v245h256v-245c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43zM320 352v-32h-320v32h80l27 32h106l27 -32h80z" />
- <glyph glyph-name="ion-android-desktop" unicode="&#xf380;"
-d="M405 416c23 0 43 -20 43 -43v-282c0 -23 -20 -43 -43 -43h-138l42 -48v-32h-170v32l42 48h-138c-23 0 -43 20 -43 43v282c0 23 20 43 43 43h362zM405 128v245h-362v-245h362z" />
- <glyph glyph-name="ion-android-document" unicode="&#xf381;" horiz-adv-x="320"
-d="M192 400l128 -128v-248c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v336c0 22 18 40 40 40h152zM176 256h112l-112 112v-112z" />
- <glyph glyph-name="ion-android-done-all" unicode="&#xf382;" horiz-adv-x="512"
-d="M388 308l-140 -139l-31 31l140 139zM481 339l31 -31l-264 -263l-122 123l30 31l92 -91zM0 168l32 31l122 -123l-31 -31z" />
- <glyph glyph-name="ion-android-done" unicode="&#xf383;" horiz-adv-x="384"
-d="M122 108l230 230l32 -31l-262 -261l-122 122l32 31z" />
- <glyph glyph-name="ion-android-download" unicode="&#xf2dd;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM208 180h-68l100 -100l100 100h-68v76h-64v-76z" />
- <glyph glyph-name="ion-android-drafts" unicode="&#xf384;"
-d="M448 246v-203c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v203c0 15 8 30 20 37l204 101l204 -101c13 -7 20 -22 20 -37zM224 144l171 112l-171 85l-171 -85z" />
- <glyph glyph-name="ion-android-exit" unicode="&#xf385;" horiz-adv-x="384"
-d="M151 115l55 56h-206v42h207l-56 56l30 30l107 -107l-107 -107zM341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85h43v-85h298v298h-298v-85h-43v85c0 23 20 43 43 43h298z" />
- <glyph glyph-name="ion-android-expand" unicode="&#xf386;" horiz-adv-x="384"
-d="M333 51v77h51v-128h-128v51h77zM333 333h-77v51h128v-128h-51v77zM51 333v-77h-51v128h128v-51h-77zM51 51h77v-51h-128v128h51v-77z" />
- <glyph glyph-name="ion-android-favorite-outline" unicode="&#xf387;" horiz-adv-x="416"
-d="M302 384c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242l-30 -27l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44zM221 55c50 46 94 86 123 122c28 35 40 63 40 92c0 23 -9 44 -24 59s-35 24 -58 24
-c-26 0 -53 -13 -70 -33l-24 -29l-24 29c-17 20 -44 33 -70 33c-23 0 -43 -9 -58 -24s-24 -36 -24 -59c0 -29 12 -57 40 -92c29 -36 73 -76 123 -122l4 -4l9 -8l9 8z" />
- <glyph glyph-name="ion-android-favorite" unicode="&#xf388;" horiz-adv-x="416"
-d="M208 0l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242z" />
- <glyph glyph-name="ion-android-film" unicode="&#xf389;" horiz-adv-x="320"
-d="M280 384h40v-384h-40v43h-40v-43h-160v43h-40v-43h-40v384h40v-43h40v43h160v-43h40v43zM80 85v43h-40v-43h40zM80 171v42h-40v-42h40zM80 256v43h-40v-43h40zM280 85v43h-40v-43h40zM280 171v42h-40v-42h40zM280 256v43h-40v-43h40z" />
- <glyph glyph-name="ion-android-folder-open" unicode="&#xf38a;"
-d="M405 304c23 0 43 -20 43 -43v-186c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v234c0 23 20 43 43 43h138l43 -48h181zM416 75v186c0 6 -5 11 -11 11h-373v-197c0 -6 5 -11 11 -11h362c6 0 11 5 11 11z" />
- <glyph glyph-name="ion-android-folder" unicode="&#xf2e0;"
-d="M181 352l43 -48h181c23 0 43 -20 43 -43v-186c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v234c0 23 20 43 43 43h138z" />
- <glyph glyph-name="ion-android-funnel" unicode="&#xf38b;"
-d="M176 48v48h96v-48h-96zM0 336h448v-48h-448v48zM80 167v50h288v-50h-288z" />
- <glyph glyph-name="ion-android-globe" unicode="&#xf38c;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM186 15c6 15 21 29 8 39c-8 7 -16 14 -23 21c-2 2 -11 20 -9 23c5 9 6 14 8 24c3 12 -3 16 -13 22c-15 10 -29 23 -43 34c-7 5 -17 10 -20 19s-5 20 -10 28c-14 20 -12 34 -10 58
-c0 7 -1 16 -2 25c-28 -32 -42 -73 -42 -116c0 -48 18 -92 52 -126c29 -29 65 -46 104 -51zM334 66c23 23 39 51 47 82c-8 -1 -19 2 -19 2s-21 24 -23 45c-2 22 0 39 -3 57c-3 16 -20 31 -27 46c-7 14 -13 28 -20 42c2 -1 5 -2 7 -3c5 1 10 2 14 2c-23 16 -49 25 -76 29v-8
-l4 -9l-14 -13l-9 3l-10 10l-10 12l-14 5c-16 -2 -31 -7 -45 -13v-7c7 3 16 5 23 8c3 1 13 -7 16 -9c-4 -5 -21 -15 -22 -21c0 -2 7 -6 7 -10c0 -6 -1 -11 -1 -17c3 3 20 21 22 21c13 3 35 -19 37 -26s-22 -24 -33 -34c-8 -8 -25 -12 -20 -24c2 -4 10 -20 5 -24
-c-6 -5 -14 9 -17 12c-8 10 -26 7 -38 7c0 -17 -1 -31 15 -43c15 -11 30 -25 47 -33c13 -6 36 7 47 -1c16 -11 29 -21 47 -29c8 -3 33 -20 26 -31c-5 -8 -10 -15 -14 -23s-13 -20 -20 -25c-8 -6 -16 -17 -21 -29c35 7 66 23 92 49z" />
- <glyph glyph-name="ion-android-hand" unicode="&#xf2e3;" horiz-adv-x="414"
-d="M401 174c15 -15 18 -36 3 -51c0 0 -96 -103 -126 -121v0c-28 -21 -65 -34 -100 -34c-55 0 -101 36 -117 85v0v1c0 1 -1 2 -1 3l-58 189c-5 15 2 32 17 37s30 -3 35 -18l34 -88c1 -4 2 -2 2 1l-22 161c-3 15 7 30 22 33s30 -8 33 -23l25 -138c0 -2 2 -2 2 0v177
-c0 15 13 28 28 28s28 -13 28 -28l8 -175c0 -5 3 -4 4 -1l23 135c2 15 16 27 31 25s27 -17 25 -32l-21 -172c-1 -12 -3 -30 2 -36c8 -9 20 -9 31 2l42 42c15 15 35 13 50 -2z" />
- <glyph glyph-name="ion-android-hangout" unicode="&#xf38d;" horiz-adv-x="352"
-d="M176 400c97 0 176 -77 176 -172c0 -91 -76 -196 -176 -244v71c-97 0 -176 78 -176 173s79 172 176 172zM166 217v61h-62v-61h31l-21 -40h31zM248 217v61h-62v-61h31l-20 -40h31z" />
- <glyph glyph-name="ion-android-happy" unicode="&#xf38e;" horiz-adv-x="416"
-d="M208 400c114 0 208 -94 208 -208s-93 -208 -208 -208s-208 94 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM281 213c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM135 213
-c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM208 78c-49 0 -89 29 -106 72h212c-17 -43 -57 -72 -106 -72z" />
- <glyph glyph-name="ion-android-home" unicode="&#xf38f;" horiz-adv-x="416"
-d="M160 0h-98v192h-62l208 192l208 -192h-62v-192h-98v128h-96v-128z" />
- <glyph glyph-name="ion-android-image" unicode="&#xf2e4;" horiz-adv-x="384"
-d="M384 43c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298zM117 160l-74 -96h298l-96 128l-74 -96z" />
- <glyph glyph-name="ion-android-laptop" unicode="&#xf390;" horiz-adv-x="512"
-d="M437 32h75c0 -23 -64 -32 -96 -32h-320c-32 0 -96 9 -96 32h75c-23 0 -43 20 -43 43v266c0 23 20 43 43 43h362c23 0 43 -20 43 -43v-266c0 -23 -20 -43 -43 -43zM75 341v-272h362v272h-362zM256 13c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22z" />
- <glyph glyph-name="ion-android-list" unicode="&#xf391;" horiz-adv-x="384"
-d="M344 384c22 0 40 -18 40 -40v-304c0 -22 -18 -40 -40 -40h-304c-22 0 -40 18 -40 40v304c0 22 18 40 40 40h304zM240 80v48h-160v-48h160zM304 168v48h-224v-48h224zM304 256v48h-224v-48h224z" />
- <glyph glyph-name="ion-android-locate" unicode="&#xf2e9;"
-d="M224 272c44 0 80 -36 80 -80s-36 -80 -80 -80s-80 36 -80 80s36 80 80 80zM415 213h33v-42h-33c-10 -89 -81 -160 -170 -170v-33h-42v33c-89 10 -160 81 -170 170h-33v42h33c10 89 81 160 170 170v33h42v-33c89 -10 160 -81 170 -170zM224 43c82 0 149 67 149 149
-s-67 149 -149 149s-149 -67 -149 -149s67 -149 149 -149z" />
- <glyph glyph-name="ion-android-lock" unicode="&#xf392;" horiz-adv-x="320"
-d="M280 262c22 0 40 -18 40 -40v-200c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v200c0 22 18 40 40 40h20v40c0 55 45 100 100 100s100 -45 100 -100v-40h20zM160 80c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM222 262v40c0 34 -28 62 -62 62
-s-62 -28 -62 -62v-40h124z" />
- <glyph glyph-name="ion-android-mail" unicode="&#xf2eb;"
-d="M405 368c23 0 43 -20 43 -43v-266c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v266c0 23 20 43 43 43h362zM400 277v43l-176 -117l-176 117v-43l176 -117z" />
- <glyph glyph-name="ion-android-map" unicode="&#xf393;" horiz-adv-x="384"
-d="M373 384c6 0 11 -5 11 -11v-322c0 -5 -3 -9 -7 -10l-121 -41l-128 45s-105 -41 -108 -42s-7 -3 -9 -3c-6 0 -11 5 -11 11v322c0 5 3 9 7 10l121 41l128 -45s103 40 108 42s7 3 9 3zM256 43v254l-128 44v-254z" />
- <glyph glyph-name="ion-android-menu" unicode="&#xf394;" horiz-adv-x="384"
-d="M0 64v43h384v-43h-384zM0 171v42h384v-42h-384zM0 320h384v-43h-384v43z" />
- <glyph glyph-name="ion-android-microphone-off" unicode="&#xf395;" horiz-adv-x="408"
-d="M316 93l58 -58l-58 58l58 -58l34 -33l-24 -24l-95 95c-19 -11 -40 -20 -62 -23v-82h-46v82c-75 10 -137 76 -137 153h39c0 -68 58 -117 121 -117c20 0 40 5 57 14l-32 33c-8 -3 -16 -5 -25 -5c-38 0 -69 31 -69 69v29l-135 134l24 24l111 -110v0l140 -140l5 -5l9 -9z
-M273 197c0 -4 0 -8 -1 -12l-137 137v25c0 38 31 69 69 69s69 -31 69 -69v-150zM365 203c0 -31 -10 -60 -27 -84l-27 28c9 17 15 36 15 56h39zM408 2v0l-34 33z" />
- <glyph glyph-name="ion-android-microphone" unicode="&#xf2ec;" horiz-adv-x="320"
-d="M160 128c-38 0 -69 31 -69 69v150c0 38 31 69 69 69s69 -31 69 -69v-150c0 -38 -31 -69 -69 -69zM281 203h39c0 -78 -62 -142 -137 -153v-82h-46v82c-75 10 -137 75 -137 153h39c0 -69 58 -116 121 -116s121 47 121 116z" />
- <glyph glyph-name="ion-android-more-horizontal" unicode="&#xf396;" horiz-adv-x="320"
-d="M40 232c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40zM280 232c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40zM160 232c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40z" />
- <glyph glyph-name="ion-android-more-vertical" unicode="&#xf397;" horiz-adv-x="80"
-d="M80 312c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40zM80 72c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40zM80 192c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40z" />
- <glyph glyph-name="ion-android-navigate" unicode="&#xf398;" horiz-adv-x="320"
-d="M160 384l160 -369l-15 -15l-145 64l-145 -64l-15 15z" />
- <glyph glyph-name="ion-android-notifications-none" unicode="&#xf399;" horiz-adv-x="352"
-d="M177 328h-2c-6 0 -24 -5 -24 -5c-46 -10 -78 -53 -78 -100v-114v-13l-9 -10l-8 -8h240l-8 8l-9 10v13v114c0 47 -32 90 -78 100c0 0 -17 5 -24 5zM176 400v0c18 0 31 -13 31 -31v-15c59 -14 104 -68 104 -131v-114l41 -42v-21h-352v21l41 42v114c0 63 45 117 104 131v15
-c0 18 13 31 31 31zM217 26v0c0 -23 -18 -42 -41 -42s-41 19 -41 42h82z" />
- <glyph glyph-name="ion-android-notifications-off" unicode="&#xf39a;" horiz-adv-x="364"
-d="M182 -16c-23 0 -41 19 -41 42h82c0 -23 -18 -42 -41 -42zM57 341l295 -295v0l12 -12l-24 -24l-36 36h-298v21l41 41v115c0 23 6 44 16 63l-63 64l24 24l33 -33v0zM317 223v-94l-208 207c13 8 27 15 42 18v15c0 18 13 31 31 31s31 -13 31 -31v-15c59 -14 104 -67 104 -131
-z" />
- <glyph glyph-name="ion-android-notifications" unicode="&#xf39b;" horiz-adv-x="352"
-d="M176 -16c-23 0 -41 19 -41 42h82c0 -23 -18 -42 -41 -42zM311 109l41 -42v-21h-352v21l41 42v114c0 63 45 117 104 131v15c0 18 13 31 31 31s31 -13 31 -31v-15c59 -14 104 -68 104 -131v-114z" />
- <glyph glyph-name="ion-android-open" unicode="&#xf39c;" horiz-adv-x="384"
-d="M341 43v133h43v-133c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h133v-43h-133v-298h298zM224 384h160v-160h-43v87l-215 -215l-30 30l215 215h-87v43z" />
- <glyph glyph-name="ion-android-options" unicode="&#xf39d;"
-d="M0 32v32h272v-32h-272zM368 32v32h80v-32h-80zM352 0c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM0 176v32h80v-32h-80zM176 176v32h272v-32h-272zM160 144c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96
-c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM0 320v32h272v-32h-272zM368 320v32h80v-32h-80zM352 288c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96z" />
- <glyph glyph-name="ion-android-people" unicode="&#xf39e;"
-d="M305 216c-34 0 -61 27 -61 60s27 60 61 60s62 -27 62 -60s-28 -60 -62 -60zM143 216c-34 0 -62 27 -62 60s28 60 62 60s61 -27 61 -60s-27 -60 -61 -60zM143 172c48 0 145 -23 145 -70v-54h-288v54c0 47 95 70 143 70zM305 161c48 0 143 -12 143 -59v-54h-128v54
-c0 30 -9 41 -32 58c7 1 11 1 17 1z" />
- <glyph glyph-name="ion-android-person-add" unicode="&#xf39f;" horiz-adv-x="480"
-d="M288 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM288 144c64 0 192 -32 192 -96v-48h-384v48c0 64 128 96 192 96zM96 224h64v-32h-64v-64h-32v64h-64v32h64v64h32v-64z" />
- <glyph glyph-name="ion-android-person" unicode="&#xf3a0;" horiz-adv-x="384"
-d="M192 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM192 144c64 0 192 -32 192 -96v-48h-384v48c0 64 128 96 192 96z" />
- <glyph glyph-name="ion-android-phone-landscape" unicode="&#xf3a1;"
-d="M448 89c0 -23 -19 -41 -41 -41h-366c-22 0 -41 18 -41 41v206c0 23 19 41 41 41h366c22 0 41 -18 41 -41v-206zM80 84h288v216h-288v-216z" />
- <glyph glyph-name="ion-android-phone-portrait" unicode="&#xf3a2;" horiz-adv-x="288"
-d="M247 416c23 0 41 -19 41 -41v-366c0 -22 -18 -41 -41 -41h-206c-23 0 -41 19 -41 41v366c0 22 18 41 41 41h206zM252 48v288h-216v-288h216z" />
- <glyph glyph-name="ion-android-pin" unicode="&#xf3a3;" horiz-adv-x="320"
-d="M160 416c88 0 160 -71 160 -157c0 -118 -160 -291 -160 -291s-160 173 -160 291c0 86 72 157 160 157zM160 203c32 0 57 25 57 56s-25 56 -57 56s-57 -25 -57 -56s25 -56 57 -56z" />
- <glyph glyph-name="ion-android-plane" unicode="&#xf3a4;" horiz-adv-x="384"
-d="M384 112l-160 48v-114l48 -31v-31l-80 16l-80 -16v31l48 31v114l-160 -48v40l160 104v113c0 18 15 31 32 31s32 -13 32 -31v-113l160 -104v-40z" />
- <glyph glyph-name="ion-android-playstore" unicode="&#xf2f0;" horiz-adv-x="416"
-d="M416 296c-19 -214 -13 -312 -13 -312h-390s6 96 -13 312h104c0 57 47 104 104 104s104 -47 104 -104h104zM208 374c-43 0 -78 -35 -78 -78h156c0 43 -35 78 -78 78zM156 50l143 85l-143 84v-169z" />
- <glyph glyph-name="ion-android-print" unicode="&#xf3a5;" horiz-adv-x="416"
-d="M352 288c35 0 64 -29 64 -64v-139h-80v-85h-256v85h-80v139c0 35 29 64 64 64h288zM304 32v128h-192v-128h192zM336 384v0v-80h-256v80h256z" />
- <glyph glyph-name="ion-android-radio-button-off" unicode="&#xf3a6;" horiz-adv-x="416"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166z" />
- <glyph glyph-name="ion-android-radio-button-on" unicode="&#xf3a7;" horiz-adv-x="416"
-d="M208 296c57 0 104 -47 104 -104s-47 -104 -104 -104s-104 47 -104 104s47 104 104 104zM208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166z" />
- <glyph glyph-name="ion-android-refresh" unicode="&#xf3a8;" horiz-adv-x="352"
-d="M176 60c56 0 104 34 123 84h46c-21 -74 -88 -128 -169 -128c-98 0 -176 79 -176 176s79 176 176 176c48 0 92 -20 124 -52l52 52v-154h-154l70 70c-23 24 -56 40 -92 40c-73 0 -132 -59 -132 -132s59 -132 132 -132z" />
- <glyph glyph-name="ion-android-remove-circle" unicode="&#xf3a9;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171v42h-214v-42h214z" />
- <glyph glyph-name="ion-android-remove" unicode="&#xf2f4;" horiz-adv-x="320"
-d="M0 171v42h320v-42h-320z" />
- <glyph glyph-name="ion-android-restaurant" unicode="&#xf3aa;" horiz-adv-x="415"
-d="M116 168l-91 89c-34 33 -34 86 0 119l153 -148zM264 206l-33 -31l150 -145l-30 -30l-150 146l-150 -146l-30 30s163 159 211 207c-15 32 -4 77 31 111c41 40 101 49 132 17c33 -31 24 -89 -17 -129c-34 -34 -80 -45 -114 -30z" />
- <glyph glyph-name="ion-android-sad" unicode="&#xf3ab;" horiz-adv-x="416"
-d="M208 160c45 0 83 -26 102 -64h-204c19 38 57 64 102 64zM208 400c114 0 208 -94 208 -208s-93 -208 -208 -208s-208 94 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM281 213c-18 0 -31 13 -31 31
-s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM135 213c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31z" />
- <glyph glyph-name="ion-android-search" unicode="&#xf2f5;" horiz-adv-x="384"
-d="M274 143l110 -110l-33 -33l-109 110v17l-7 6c-25 -21 -58 -34 -93 -34c-79 0 -142 63 -142 142s63 143 141 143c79 0 142 -64 142 -143c0 -36 -13 -68 -34 -93l7 -5h18zM142 143c55 0 99 43 99 98s-44 99 -99 99s-98 -44 -98 -99s43 -98 98 -98z" />
- <glyph glyph-name="ion-android-send" unicode="&#xf2f6;" horiz-adv-x="416"
-d="M0 0v149l298 43l-298 43v149l416 -192z" />
- <glyph glyph-name="ion-android-settings" unicode="&#xf2f7;" horiz-adv-x="416"
-d="M366 171l47 -34c3 -3 4 -10 2 -14l-43 -71c-2 -4 -7 -7 -12 -5l-54 21c-12 -8 -23 -16 -36 -21l-8 -55c-1 -4 -6 -8 -11 -8h-85c-5 0 -10 3 -11 8l-8 55c-13 5 -25 13 -36 21l-54 -21c-4 -2 -10 1 -12 5l-43 71c-3 5 -2 11 2 14l45 34c0 7 -1 14 -1 21s1 14 1 21l-46 34
-c-3 3 -4 10 -2 14l43 71c2 4 7 7 12 5l54 -21c12 8 23 16 36 21l8 55c1 4 6 8 11 8h85c5 0 10 -4 11 -8l7 -55c13 -5 25 -13 36 -21l53 21c4 2 11 -1 13 -5l43 -71c3 -5 2 -11 -2 -14l-45 -34c0 -7 1 -14 1 -21s0 -15 -1 -21zM207 119c41 0 75 32 75 73s-34 73 -75 73
-s-74 -32 -74 -73s33 -73 74 -73z" />
- <glyph glyph-name="ion-android-share-alt" unicode="&#xf3ac;" horiz-adv-x="384"
-d="M320 104c34 0 62 -28 62 -62s-28 -62 -62 -62s-62 28 -62 62c0 5 1 10 2 14l-152 88c-12 -11 -27 -17 -44 -17c-35 0 -64 29 -64 64s28 64 63 64c17 0 32 -6 44 -17l151 87c-1 5 -2 10 -2 15c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64c-17 0 -32 6 -44 17
-l-151 -87c1 -5 2 -10 2 -15s-1 -10 -2 -15l153 -88c11 11 26 16 42 16z" />
- <glyph glyph-name="ion-android-share" unicode="&#xf2f8;" horiz-adv-x="384"
-d="M384 200l-160 -147v88c-107 0 -171 -34 -224 -109c21 107 75 214 224 235v85z" />
- <glyph glyph-name="ion-android-star-half" unicode="&#xf3ad;" horiz-adv-x="404"
-d="M404 238l-110 -96l33 -142l-125 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134zM219 103l60 -36l-16 68l-5 19l15 12l53 46l-70 6l-19 2l-8 18l-27 64v-189z" />
- <glyph glyph-name="ion-android-star-outline" unicode="&#xf3ae;" horiz-adv-x="404"
-d="M404 238l-110 -96l33 -142l-125 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134zM219 103l60 -36l-16 68l-5 19l15 12l53 46l-70 6l-19 2l-8 18l-27 64l-27 -64l-8 -18l-19 -2l-70 -6l53 -46l15 -12l-5 -19l-16 -68l60 36l17 10z" />
- <glyph glyph-name="ion-android-star" unicode="&#xf2fc;" horiz-adv-x="404"
-d="M202 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134l145 -12l-110 -96l33 -142z" />
- <glyph glyph-name="ion-android-stopwatch" unicode="&#xf2fd;" horiz-adv-x="384"
-d="M168 141v131h48v-131h-48zM344 278c25 -33 40 -74 40 -118c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192c44 0 85 -15 118 -40l31 30l33 -33zM298 54c28 28 44 66 44 106s-16 78 -44 106s-66 44 -106 44s-78 -16 -106 -44s-44 -66 -44 -106
-s16 -78 44 -106s66 -44 106 -44s78 16 106 44zM128 368v48h128v-48h-128z" />
- <glyph glyph-name="ion-android-subway" unicode="&#xf3af;" horiz-adv-x="352"
-d="M176 400c94 0 176 -10 176 -85v-214c0 -42 -33 -74 -75 -74l27 -27v-16h-256v16l27 27c-42 0 -75 32 -75 74v214c0 75 82 85 176 85zM80 64c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 208v96h-112v-96h112zM272 64c18 0 32 14 32 32
-s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 208v96h-112v-96h112z" />
- <glyph glyph-name="ion-android-sunny" unicode="&#xf3b0;"
-d="M224 288c-25 0 -50 -10 -68 -28s-28 -43 -28 -68s10 -50 28 -68s43 -28 68 -28s50 10 68 28s28 43 28 68s-10 50 -28 68s-43 28 -68 28zM245 416v0v-64h-42v64h42zM374 372v0l30 -30l-38 -38l-30 30zM74 372v0l38 -38l-30 -30l-38 38zM224 320v0c70 0 128 -58 128 -128
-s-58 -128 -128 -128s-128 58 -128 128s58 128 128 128zM448 213v0v-42h-64v42h64zM64 213v0v-42h-64v42h64zM366 80v0l38 -38l-30 -30l-38 38zM82 80v0l30 -30l-38 -38l-30 30zM245 32v0v-64h-42v64h42z" />
- <glyph glyph-name="ion-android-sync" unicode="&#xf3b1;" horiz-adv-x="320"
-d="M160 355c88 0 160 -73 160 -163c0 -32 -9 -62 -25 -87l-29 30c9 17 14 37 14 57c0 67 -54 122 -120 122v-61l-80 82l80 81v-61zM160 70v61l80 -82l-80 -81v61c-88 0 -160 73 -160 163c0 32 9 63 25 87l29 -30c-9 -17 -14 -37 -14 -57c0 -67 54 -122 120 -122z" />
- <glyph glyph-name="ion-android-textsms" unicode="&#xf3b2;" horiz-adv-x="384"
-d="M344 384c22 0 40 -18 40 -40v-240c0 -22 -18 -40 -40 -40h-280l-64 -64v344c0 22 10 40 32 40h312zM134 206v40h-38v-40h38zM211 206v40h-38v-40h38zM288 206v40h-38v-40h38z" />
- <glyph glyph-name="ion-android-time" unicode="&#xf3b3;" horiz-adv-x="426"
-d="M213 405c117 0 213 -96 213 -213s-95 -213 -213 -213s-213 96 -213 213s95 213 213 213zM213 22c94 0 170 76 170 170s-76 170 -170 170s-170 -76 -170 -170s76 -170 170 -170zM224 298v-111l96 -57l-16 -26l-112 67v127h32z" />
- <glyph glyph-name="ion-android-train" unicode="&#xf3b4;" horiz-adv-x="352"
-d="M0 101v214c0 75 82 85 176 85s176 -10 176 -85v-214c0 -42 -33 -74 -75 -74l27 -27v-16h-256v16l27 27c-42 0 -75 32 -75 74zM176 72c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM304 224v96h-256v-96h256z" />
- <glyph glyph-name="ion-android-unlock" unicode="&#xf3b5;" horiz-adv-x="320"
-d="M280 262c22 0 40 -18 40 -40v-200c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v200c0 22 18 40 40 40h182v40v0c0 34 -28 62 -62 62s-62 -28 -62 -62h-38c0 55 45 100 100 100s100 -45 100 -100v-40h20zM160 80c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40
-s18 -40 40 -40z" />
- <glyph glyph-name="ion-android-upload" unicode="&#xf3b6;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM272 172h68l-100 100l-100 -100h68v-76h64v76z" />
- <glyph glyph-name="ion-android-volume-down" unicode="&#xf3b7;" horiz-adv-x="288"
-d="M0 256h85l107 112v-352l-107 112h-85v128zM288 192c0 -38 -21 -73 -53 -88v177c32 -16 53 -51 53 -89z" />
- <glyph glyph-name="ion-android-volume-mute" unicode="&#xf3b8;" horiz-adv-x="192"
-d="M0 256h85l107 112v-352l-107 112h-85v128z" />
- <glyph glyph-name="ion-android-volume-off" unicode="&#xf3b9;" horiz-adv-x="384"
-d="M342 192c0 69 -45 128 -107 147v45c85 -20 149 -99 149 -192c0 -35 -8 -68 -24 -96l-32 32c9 19 14 41 14 64zM192 368v-104l-51 51zM357 51v0l24 -24l-24 -24l-40 40c-23 -21 -51 -36 -82 -43v45c19 6 37 15 52 28l-95 95v-152l-107 112h-85v128h85l9 10l-91 91l24 24z
-M288 192c0 -7 0 -15 -2 -22l-51 51v60c32 -16 53 -51 53 -89z" />
- <glyph glyph-name="ion-android-volume-up" unicode="&#xf3ba;" horiz-adv-x="384"
-d="M0 256h85l107 112v-352l-107 112h-85v128zM288 192c0 -38 -21 -73 -53 -88v177c32 -16 53 -51 53 -89zM235 384c85 -20 149 -99 149 -192s-64 -172 -149 -192v45c62 19 106 78 106 147s-44 128 -106 147v45z" />
- <glyph glyph-name="ion-android-walk" unicode="&#xf3bb;" horiz-adv-x="272"
-d="M168 336c-22 0 -40 18 -40 40s18 40 40 40s40 -18 40 -40s-18 -40 -40 -40zM168 216l-20 38l-20 -62l57 -96v-128h-38v96l-50 68l-57 -164h-40l81 320l-41 -16v-80h-40v112l111 38c4 1 10 1 13 1c13 0 23 -6 31 -18l45 -69h72v-40h-104z" />
- <glyph glyph-name="ion-android-warning" unicode="&#xf3bc;"
-d="M0 -16l224 416l224 -416h-448zM248 48v48h-48v-48h48zM248 128v96h-48v-96h48z" />
- <glyph glyph-name="ion-android-watch" unicode="&#xf3bd;" horiz-adv-x="320"
-d="M320 192c0 -51 -24 -96 -61 -125l-19 -115h-160l-19 115c-37 29 -61 74 -61 125s24 96 61 125l19 115h160l19 -115c37 -29 61 -74 61 -125zM40 192c0 -66 54 -120 120 -120s120 54 120 120s-54 120 -120 120s-120 -54 -120 -120z" />
- <glyph glyph-name="ion-android-wifi" unicode="&#xf305;" horiz-adv-x="416"
-d="M208 219c23 0 42 -18 42 -41s-19 -41 -42 -41s-42 18 -42 41s19 41 42 41zM333 178c0 -45 -26 -85 -63 -107l-20 36c25 14 41 40 41 71c0 45 -37 82 -83 82s-83 -37 -83 -82c0 -31 16 -57 41 -71l-20 -36c-37 22 -63 62 -63 107c0 68 56 124 125 124s125 -56 125 -124z
-M208 384c114 0 208 -93 208 -206c0 -76 -42 -142 -104 -178l-21 36c50 28 83 81 83 142c0 91 -74 165 -166 165s-166 -74 -166 -165c0 -61 33 -113 83 -142l-21 -36c-62 36 -104 102 -104 178c0 113 94 206 208 206z" />
- <glyph glyph-name="ion-aperture" unicode="&#xf313;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM168 342l56 -86h-147
-c17 40 50 71 91 86zM381 160h-102l72 129c21 -27 33 -60 33 -97c0 -11 -1 -22 -3 -32zM328 314l-49 -90l-78 126c8 1 15 2 23 2c40 0 76 -14 104 -38zM67 224h102l-72 -129c-21 27 -33 60 -33 97c0 11 1 22 3 32zM280 42l-56 86h147c-17 -40 -50 -71 -91 -86zM120 70l49 90
-l78 -126c-8 -1 -15 -2 -23 -2c-40 0 -76 14 -104 38z" />
- <glyph glyph-name="ion-archive" unicode="&#xf102;"
-d="M224 140l-128 116h80v96h96v-96h80zM433 151c11 -6 17 -19 15 -32l-9 -67c-2 -13 -9 -20 -28 -20h-374c-18 0 -26 7 -28 20l-9 67c-2 13 3 26 14 32l72 55h42l-62 -62h50c2 0 5 -1 6 -3l18 -45h168l18 45c1 2 3 3 5 3h51l-62 62h42z" />
- <glyph glyph-name="ion-arrow-down-a" unicode="&#xf103;" horiz-adv-x="384"
-d="M192 -0l-192 192h112v192h160v-192h112z" />
- <glyph glyph-name="ion-arrow-down-b" unicode="&#xf104;" horiz-adv-x="320"
-d="M3 263c-2 2 -3 6 -3 9c0 9 8 16 17 16v0h286v0c9 0 17 -7 17 -16c0 -3 -1 -6 -3 -8l-2 -3l-136 -156c-5 -5 -11 -9 -19 -9s-14 4 -19 9l-136 156z" />
- <glyph glyph-name="ion-arrow-down-c" unicode="&#xf105;" horiz-adv-x="274"
-d="M265 125l-105 -100c-6 -6 -14 -9 -23 -9s-16 3 -22 9l-106 100c-12 12 -12 31 0 43s34 12 46 0l50 -48v217c0 17 14 31 32 31s32 -14 32 -31v-217l50 48c12 12 34 12 46 0s12 -31 0 -43z" />
- <glyph glyph-name="ion-arrow-expand" unicode="&#xf25e;" horiz-adv-x="320"
-d="M178 238l64 64l-50 50h128v-128l-50 50l-64 -64zM178 146l28 28l64 -64l50 50v-128h-128l50 50zM142 146l-64 -64l50 -50h-128v128l50 -50l64 64zM142 238l-28 -28l-64 64l-50 -50v128h128l-50 -50z" />
- <glyph glyph-name="ion-arrow-graph-down-left" unicode="&#xf25f;"
-d="M0 64v160l61 -61l131 141l107 -112l149 128l-149 -203l-107 107l-94 -98l62 -62h-160z" />
- <glyph glyph-name="ion-arrow-graph-down-right" unicode="&#xf260;"
-d="M288 64l62 62l-94 98l-107 -107l-149 203l149 -128l107 112l131 -141l61 61v-160h-160z" />
- <glyph glyph-name="ion-arrow-graph-up-left" unicode="&#xf261;"
-d="M160 320l-62 -62l94 -98l107 107l149 -203l-149 128l-107 -112l-131 141l-61 -61v160h160z" />
- <glyph glyph-name="ion-arrow-graph-up-right" unicode="&#xf262;"
-d="M288 320h160v-160l-61 61l-131 -141l-107 112l-149 -128l149 203l107 -107l94 98z" />
- <glyph glyph-name="ion-arrow-left-a" unicode="&#xf106;" horiz-adv-x="384"
-d="M0 192l192 192v-112h192v-160h-192v-112z" />
- <glyph glyph-name="ion-arrow-left-b" unicode="&#xf107;" horiz-adv-x="192"
-d="M167 349c2 2 6 3 9 3c9 0 16 -8 16 -17v0v-286v0c0 -9 -7 -17 -16 -17c-3 0 -7 1 -9 3l-2 2l-156 136c-5 5 -9 11 -9 19s4 14 9 19l156 136z" />
- <glyph glyph-name="ion-arrow-left-c" unicode="&#xf108;" horiz-adv-x="352"
-d="M109 320c12 12 32 12 44 0s12 -34 0 -46l-49 -50h217c17 0 31 -14 31 -32s-14 -32 -31 -32h-217l48 -50c12 -12 12 -34 0 -46s-31 -12 -43 0l-100 106c-6 6 -9 13 -9 22s3 17 9 23z" />
- <glyph glyph-name="ion-arrow-move" unicode="&#xf263;"
-d="M448 192l-96 -96v76h-109l1 -108h76l-96 -96l-96 96h76v108h-108v-76l-96 96l96 96v-76h108v108h-76l96 96l96 -96h-76v-108h108v76z" />
- <glyph glyph-name="ion-arrow-resize" unicode="&#xf264;" horiz-adv-x="320"
-d="M192 352h128v-128l-50 50l-9 -9l-183 -183l50 -50h-128v128l50 -50l128 128v0l64 64z" />
- <glyph glyph-name="ion-arrow-return-left" unicode="&#xf265;" horiz-adv-x="384"
-d="M128 352v-64h248c4 0 8 -4 8 -8v-240c0 -4 -4 -8 -8 -8h-304c-4 0 -8 4 -8 8v48c0 4 4 8 8 8h248v128h-192v-64l-128 96z" />
- <glyph glyph-name="ion-arrow-return-right" unicode="&#xf266;" horiz-adv-x="384"
-d="M384 256l-128 -96v64h-192v-128h248c4 0 8 -4 8 -8v-48c0 -4 -4 -8 -8 -8h-304c-4 0 -8 4 -8 8v240c0 4 4 8 8 8h248v64z" />
- <glyph glyph-name="ion-arrow-right-a" unicode="&#xf109;" horiz-adv-x="384"
-d="M384 192l-192 -192v112h-192v160h192v112z" />
- <glyph glyph-name="ion-arrow-right-b" unicode="&#xf10a;" horiz-adv-x="192"
-d="M25 35c-2 -2 -6 -3 -9 -3c-9 0 -16 8 -16 17v0v286v0c0 9 7 17 16 17c3 0 6 -1 8 -3l3 -2l156 -136c5 -5 9 -11 9 -19s-4 -14 -9 -19l-156 -136z" />
- <glyph glyph-name="ion-arrow-right-c" unicode="&#xf10b;" horiz-adv-x="352"
-d="M243 320l100 -105c6 -6 9 -14 9 -23s-3 -16 -9 -22l-100 -106c-12 -12 -31 -12 -43 0s-12 34 0 46l48 50h-217c-17 0 -31 14 -31 32s14 32 31 32h217l-49 50c-12 12 -12 34 0 46s32 12 44 0z" />
- <glyph glyph-name="ion-arrow-shrink" unicode="&#xf267;" horiz-adv-x="384"
-d="M384 356l-82 -82l50 -50h-128v128l50 -50l82 82zM384 28l-28 -28l-82 82l-50 -50v128h128l-50 -50zM0 28l82 82l-50 50h128v-128l-50 50l-82 -82zM0 356l28 28l82 -82l50 50v-128h-128l50 50z" />
- <glyph glyph-name="ion-arrow-swap" unicode="&#xf268;" horiz-adv-x="384"
-d="M0 120c0 4 4 8 8 8h248v64l128 -96l-128 -96v64h-248c-4 0 -8 4 -8 8v48zM384 264c0 -4 -4 -8 -8 -8h-248v-64l-128 96l128 96v-64h248c4 0 8 -4 8 -8v-48z" />
- <glyph glyph-name="ion-arrow-up-a" unicode="&#xf10c;" horiz-adv-x="384"
-d="M192 384l192 -192h-112v-192h-160v192h-112z" />
- <glyph glyph-name="ion-arrow-up-b" unicode="&#xf10d;" horiz-adv-x="320"
-d="M317 121c2 -2 3 -6 3 -9c0 -9 -8 -16 -17 -16v0h-286v0c-9 0 -17 7 -17 16c0 3 1 6 3 8l2 3l136 156c5 5 11 9 19 9s14 -4 19 -9l136 -156z" />
- <glyph glyph-name="ion-arrow-up-c" unicode="&#xf10e;" horiz-adv-x="274"
-d="M9 259l105 100c6 6 14 9 23 9s16 -3 22 -9l106 -100c12 -12 12 -31 0 -43s-34 -12 -46 0l-50 48v-217c0 -17 -14 -31 -32 -31s-32 14 -32 31v217l-50 -49c-12 -12 -34 -12 -46 0s-12 32 0 44z" />
- <glyph glyph-name="ion-asterisk" unicode="&#xf314;"
-d="M448 224v-64l-186 10l104 -170l-56 -32l-86 176l-86 -176l-56 32l104 170l-186 -10v64l187 -7l-109 167l60 32l86 -176l86 176l60 -32l-109 -167z" />
- <glyph glyph-name="ion-at" unicode="&#xf10f;"
-d="M422 41c-24 -25 -52 -43 -85 -55s-69 -18 -105 -18c-35 0 -66 6 -95 17s-53 26 -73 46s-36 43 -47 71s-17 58 -17 90s6 62 18 89s29 51 50 71s46 35 74 47c28 11 58 17 90 17c28 0 55 -4 81 -12s49 -20 69 -36s36 -36 48 -60s18 -53 18 -85c0 -24 -3 -46 -10 -64
-s-16 -34 -27 -46s-24 -22 -38 -28s-29 -10 -45 -10s-29 4 -39 12s-15 17 -15 29h-3c-6 -10 -15 -19 -28 -28s-28 -13 -46 -13c-28 0 -49 9 -64 27s-23 42 -23 71c0 17 3 34 9 50s14 31 24 44s23 23 38 31s31 12 49 12c15 0 27 -4 38 -10c10 -6 18 -15 21 -24h1l5 24h54
-l-24 -113c-1 -6 -2 -12 -3 -19s-2 -13 -2 -19c0 -7 1 -13 4 -18s7 -7 15 -7c16 0 29 9 39 26s16 40 16 68c0 24 -4 45 -12 64s-20 34 -34 47s-32 23 -52 29s-41 9 -65 9c-26 0 -49 -4 -70 -13s-39 -22 -54 -38s-27 -34 -35 -56c-8 -21 -13 -44 -13 -69c0 -26 4 -51 13 -72
-s21 -39 37 -54s35 -27 57 -35s46 -12 72 -12c33 0 61 6 85 16s45 25 65 43zM231 260c-10 0 -18 -2 -25 -8s-14 -13 -19 -22s-8 -18 -11 -28s-4 -20 -4 -30c0 -5 0 -10 1 -16c1 -5 3 -10 6 -15s7 -8 12 -11s11 -5 19 -5c11 0 20 3 28 8s14 13 19 21s9 16 11 26s3 19 3 27
-c0 6 0 13 -1 19s-4 12 -7 17s-7 9 -12 12s-12 5 -20 5z" />
- <glyph glyph-name="ion-backspace-outline" unicode="&#xf3be;" horiz-adv-x="512"
-d="M413 116c2 -2 3 -4 3 -6s-1 -4 -3 -6l-21 -22c-2 -2 -4 -2 -6 -2s-4 0 -6 2l-76 77l-76 -77c-2 -2 -4 -2 -6 -2s-4 0 -6 2l-21 22c-2 2 -3 4 -3 6s1 4 3 6l76 76l-77 76c-3 3 -3 9 0 12l22 22c2 2 4 2 6 2s4 0 6 -2l76 -76l76 76c2 2 4 2 6 2s4 0 6 -2l22 -22
-c3 -3 3 -9 0 -12l-77 -76zM499 354c9 -9 13 -20 13 -33v-256c0 -27 -20 -49 -46 -49h-298c-13 0 -24 3 -34 9c-9 5 -16 11 -23 20v0l-1 1l-110 146l110 148c14 19 34 28 58 28h298c13 0 24 -5 33 -14zM480 65v256c0 9 -5 15 -14 15h-298c-11 0 -22 -3 -32 -16l-96 -128
-l96 -128c8 -10 17 -16 32 -16h298c9 0 14 8 14 17z" />
- <glyph glyph-name="ion-backspace" unicode="&#xf3bf;" horiz-adv-x="512"
-d="M499 354c9 -9 13 -20 13 -33v-256c0 -27 -20 -49 -46 -49h-298c-13 0 -24 3 -34 9c-9 5 -16 11 -23 20v0l-1 1l-110 146l110 148c14 19 34 28 58 28h298c13 0 24 -5 33 -14zM413 116l-76 76l77 76c3 3 3 9 0 12l-22 22c-2 2 -4 2 -6 2s-4 0 -6 -2l-76 -76l-76 76
-c-2 2 -4 2 -6 2s-4 0 -6 -2l-22 -22c-3 -3 -3 -9 0 -12l77 -76l-76 -76c-2 -2 -3 -4 -3 -6s1 -4 3 -6l21 -22c2 -2 4 -2 6 -2s4 0 6 2l76 77l76 -77c2 -2 4 -2 6 -2s4 0 6 2l21 22c2 2 3 4 3 6s-1 4 -3 6z" />
- <glyph glyph-name="ion-bag" unicode="&#xf110;"
-d="M416 288l32 -320h-448l32 320h64v4c0 68 56 124 124 124h8c68 0 124 -56 124 -124v-4h64zM128 292v-4h192v4c0 51 -41 92 -92 92v0h-8c-51 0 -92 -41 -92 -92zM36 0h376l-25 256h-35v-36c10 -6 16 -16 16 -28c0 -18 -14 -32 -32 -32s-32 14 -32 32c0 12 6 22 16 28v36
-h-192v-36c10 -6 16 -16 16 -28c0 -18 -14 -32 -32 -32s-32 14 -32 32c0 12 6 22 16 28v36h-35z" />
- <glyph glyph-name="ion-battery-charging" unicode="&#xf111;"
-d="M10 64c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381zM225 288l-100 -111h61l-27 -81l100 111h-61z" />
- <glyph glyph-name="ion-battery-empty" unicode="&#xf112;"
-d="M438 256c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37zM416 160v64h-15h-32v32v32h-337v-192h337v32v32h32h15z" />
- <glyph glyph-name="ion-battery-full" unicode="&#xf113;"
-d="M438 256c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37z" />
- <glyph glyph-name="ion-battery-half" unicode="&#xf114;"
-d="M438 256c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37zM416 160v64h-15h-32v32v32h-81l32 -192h49v32v32h32h15z" />
- <glyph glyph-name="ion-battery-low" unicode="&#xf115;"
-d="M10 64c-6 0 -10 4 -10 10v236c0 6 4 10 10 10h381c6 0 10 -4 10 -10v-54h37c6 0 10 -4 10 -10v-108c0 -6 -4 -10 -10 -10h-37v-54c0 -6 -4 -10 -10 -10h-381zM369 288h-209l32 -192h177v32v32h32h15v64h-15h-32v32v32z" />
- <glyph glyph-name="ion-beaker" unicode="&#xf269;" horiz-adv-x="384"
-d="M80 256h240v-224c0 -9 -7 -16 -16 -16h-208c-9 0 -16 7 -16 16v224zM296 104v48c0 4 -4 8 -8 8s-8 -4 -8 -8v-48c0 -4 4 -8 8 -8s8 4 8 8zM288 176c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM381 416c3 0 3 -2 3 -3s-2 -3 -3 -5s-13 -20 -13 -40v-336
-c0 -35 -29 -64 -64 -64h-208c-35 0 -64 29 -64 64v307c0 32 -2 33 -32 37c0 12 11 40 65 40h316zM336 368c0 5 0 16 1 16h-273c-1 0 -3 0 -4 -1c5 -7 4 -32 4 -44v-307c0 -18 14 -32 32 -32h210c17 0 30 14 30 32v336z" />
- <glyph glyph-name="ion-beer" unicode="&#xf26a;"
-d="M384 288c35 0 64 -29 64 -64v-96c0 -35 -29 -64 -64 -64h-32v-80c0 -9 -7 -16 -16 -16h-256c-9 0 -16 7 -16 16v223c-26 0 -48 22 -48 48v54v1c-10 11 -16 26 -16 42c0 35 29 64 64 64c18 0 34 -8 46 -20c10 12 26 20 43 20c14 0 27 -6 37 -14c12 9 26 14 42 14
-c17 0 34 -6 46 -16c11 10 26 16 42 16c35 0 64 -29 64 -64c0 -24 -18 -44 -32 -48v-16h32zM296 144c4 0 8 3 8 8v0v48c0 4 -4 8 -8 8s-8 -4 -8 -8v-48c0 -3 2 -6 4 -7c1 -1 2 -1 4 -1zM303 220c1 2 1 4 1 6s-1 4 -3 5s-4 1 -6 1s-4 -2 -5 -4s-2 -4 -2 -6s2 -4 4 -5
-s4 -1 6 -1s4 2 5 4zM320 288v32h-20c-3 -8 -7 -16 -13 -23c-13 -16 -33 -25 -55 -25c-26 0 -48 13 -61 33c-6 -2 -12 -3 -18 -3c-12 0 -23 4 -32 10c-2 1 -3 3 -5 4c-1 -2 -2 -3 -3 -5c-5 -6 -11 -10 -17 -14v-32v-9h80c0 4 4 8 8 8s8 -4 8 -8h128v32zM351 343c1 3 1 6 1 9
-c0 18 -14 32 -32 32c-9 0 -17 -4 -23 -10c-2 -2 -6 -5 -16 -6h-8c-6 1 -12 3 -14 5c-7 7 -16 11 -27 11c-9 0 -18 -4 -25 -9l-7 -7c0 -1 0 -1 -1 -2c-3 -3 -7 -5 -11 -5c-5 0 -8 3 -11 6c-1 2 -2 3 -3 5s-3 4 -5 6c-4 4 -10 6 -16 6c-10 0 -18 -9 -25 -16
-c-7 -8 -27 -8 -34 0s-18 16 -30 16c-18 0 -32 -14 -32 -32c0 -2 1 -5 1 -7c2 -9 7 -17 15 -21v-34v-35c0 -9 7 -16 16 -16v26v23v32c10 0 18 4 24 11c2 2 3 4 4 6c0 0 6 10 12 11s20 6 30 -5c4 -5 11 -9 19 -9c3 0 5 1 7 2c3 1 7 2 9 4v0c3 2 6 4 10 4c7 0 12 -4 14 -10
-c0 0 1 -1 1 -2c1 -3 1 -5 3 -8c7 -12 20 -20 35 -20c13 0 25 6 32 16c5 7 8 15 8 24s9 8 9 8h7h48c6 0 13 -3 15 -9zM416 128v96c0 18 -14 32 -32 32h-32v-160h32c18 0 32 14 32 32zM128 280c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM288 280c0 5 3 8 8 8s8 -3 8 -8
-s-3 -8 -8 -8s-8 3 -8 8z" />
- <glyph glyph-name="ion-bluetooth" unicode="&#xf116;" horiz-adv-x="256"
-d="M12 304c16 16 18 13 19 12l68 -65v0v0c2 -2 10 -10 10 -3v156v0v2c0 6 6 10 12 10c4 0 7 -2 9 -4v0s117 -113 122 -117s5 -10 1 -14l-84 -81s-4 -4 -4 -8s4 -8 4 -8l84 -81c4 -4 4 -10 -1 -14s-122 -117 -122 -117v0c-2 -2 -5 -4 -9 -4c-6 0 -12 4 -12 10v2v0v156
-s-8 -1 -10 -3v0v-1l-68 -64c-1 -1 -3 -4 -19 12s-12 17 -11 18s90 86 90 86s4 3 4 8v0c0 5 -4 8 -4 8s-89 85 -90 86s-5 2 11 18zM152 328v-79c0 -8 8 -1 10 1l30 30s3 5 3 7s-1 5 -3 7l-30 30c-2 2 -10 11 -10 4zM152 135v-79s8 2 10 4l30 30c2 2 3 5 3 7s-1 5 -3 7l-30 30
-c-2 2 -10 9 -10 1z" />
- <glyph glyph-name="ion-bonfire" unicode="&#xf315;" horiz-adv-x="384"
-d="M207 97l15 -89c1 -3 1 -5 1 -8c0 -18 -14 -32 -32 -32s-32 14 -32 32c0 2 0 5 1 7l15 92v0c2 7 8 13 16 13s15 -7 16 -15zM242 93v0v0v0zM329 58c9 -8 10 -25 0 -35s-27 -9 -35 0c-1 1 -2 3 -3 4l-49 66c-3 5 -2 11 2 15c5 5 10 5 16 1l64 -47c2 -1 3 -3 5 -4zM309 113v0
-v0v0zM371 126c9 -1 13 -7 13 -19c0 -9 -10 -14 -18 -12l-57 18v0v0c-3 2 -6 5 -5 9s4 7 8 6zM75 113v0v0v0zM75 113v0l-58 -18c-8 -2 -17 3 -17 12c0 12 3 18 12 19l60 2c4 1 7 -2 8 -6s-2 -7 -5 -9v0zM124 109c5 4 11 4 16 -1c4 -4 5 -10 2 -15l-49 -66c-1 -1 -2 -3 -3 -4
-c-10 -10 -25 -10 -35 0s-10 25 0 35c2 2 3 3 5 4zM288 320c0 -32 -9 -58 -50 -86c-37 -26 -94 -46 -110 -106c0 0 -58 24 -48 96s124 106 112 192c24 0 96 -35 96 -96zM288 192c-16 -50 -44 -64 -80 -64c-15 0 -32 9 -43 26c12 15 28 26 47 37c9 5 20 10 29 16
-c21 14 38 31 47 49c5 -15 5 -48 0 -64zM88 288c-6 4 -9 14 -8 27c2 22 34 39 32 69c14 2 31 -3 42 -24c-5 -11 -15 -21 -28 -34s-26 -22 -38 -38z" />
- <glyph glyph-name="ion-bookmark" unicode="&#xf26b;" horiz-adv-x="192"
-d="M184 384c4 0 8 -4 8 -8v-56h-192v56c0 4 4 8 8 8h176zM0 0v304h192v-304l-96 96z" />
- <glyph glyph-name="ion-bowtie" unicode="&#xf3c0;"
-d="M192 236c0 0 8 5 20 7c21 4 39 5 47 -9c10 -17 19 -53 17 -85c-1 -17 -5 -22 -5 -22s-15 -10 -47 -7c-35 3 -40 15 -40 15s5 12 8 43s0 58 0 58zM152 163c-17 -4 -38 -10 -38 -10s45 4 64 9c-4 -21 -10 -34 -10 -34s-83 -80 -116 -80c-28 0 -52 68 -52 144s26 144 52 144
-c35 0 106 -57 128 -97c0 0 3 -16 2 -32c-10 5 -24 10 -44 14c-28 6 -42 3 -42 3s18 -4 57 -17c15 -5 22 -8 29 -10c0 -3 -1 -7 -1 -10c0 -5 0 -10 -1 -15c-5 -2 -15 -6 -28 -9zM396 336c26 0 52 -68 52 -144s-24 -144 -52 -144c-37 0 -104 68 -112 79c0 0 4 5 5 22v9
-c16 -7 70 -13 70 -13s-21 6 -40 11c-13 4 -25 8 -30 10c-1 11 -2 23 -4 33c17 11 69 34 69 34s-15 -2 -35 -9c-14 -5 -29 -11 -37 -14c-3 10 -7 18 -10 24c0 1 -1 4 -1 4v1c22 40 89 97 125 97z" />
- <glyph glyph-name="ion-briefcase" unicode="&#xf26c;"
-d="M240 176v8h208v-176c0 -4 -4 -8 -8 -8h-432c-4 0 -8 4 -8 8v176h208v-8h32zM440 304c4 0 8 -4 8 -8v-96h-208v8h-32v-8h-208v96c0 4 4 8 8 8h120v31c1 28 22 49 51 49h90c30 0 50 -21 51 -49v-31h120zM288 332v1c0 10 -9 19 -19 19h-90c-10 0 -19 -9 -19 -19v-1v-1v-27
-h128v27v1z" />
- <glyph glyph-name="ion-bug" unicode="&#xf2be;"
-d="M343 321c-6 -16 -16 -31 -28 -43c-24 -24 -57 -37 -91 -37s-67 13 -91 37c-12 12 -22 27 -28 43c29 39 72 63 119 63s90 -24 119 -63zM95 305c22 -45 68 -77 121 -80v-225c-40 2 -77 22 -104 54c-7 -6 -10 -9 -13 -15c8 -9 7 -22 -1 -31c-9 -10 -24 -11 -34 -2
-s-11 24 -2 34l3 3s2 1 2 1c4 13 13 25 27 36c-15 26 -26 57 -29 90c-7 0 -12 -2 -17 -3c-1 -13 -11 -23 -24 -23s-24 11 -24 24s11 24 24 24h3c4 2 8 5 12 6c7 2 14 4 25 4c1 23 6 45 13 65c-6 4 -11 7 -15 11c-6 5 -11 13 -14 19c-1 0 -3 1 -4 2c-12 6 -15 21 -9 33
-s21 15 33 9c11 -6 15 -20 10 -31c2 -3 3 -7 4 -8c2 -2 5 -3 8 -5c2 3 3 5 5 8zM424 192c13 0 24 -11 24 -24s-11 -24 -24 -24s-23 10 -24 23c-5 1 -10 3 -17 3c-3 -33 -14 -64 -29 -90c14 -11 23 -23 27 -36c0 0 1 0 2 -1l3 -3c9 -10 8 -25 -2 -34s-25 -8 -34 2
-c-8 9 -9 22 -1 31c-3 6 -6 9 -13 15c-27 -32 -64 -52 -104 -54v225c53 3 99 35 121 80c2 -3 3 -5 5 -8c3 2 6 3 8 5c1 1 2 5 4 8c-5 11 -1 25 10 31c12 6 27 3 33 -9s3 -27 -9 -33c-1 -1 -3 -2 -4 -2c-3 -6 -8 -14 -14 -19c-4 -4 -9 -7 -15 -11c7 -20 12 -42 13 -65
-c11 0 18 -2 25 -4c4 -1 8 -4 12 -6h3z" />
- <glyph glyph-name="ion-calculator" unicode="&#xf26d;" horiz-adv-x="320"
-d="M304 416c9 0 16 -7 16 -16v-416c0 -9 -7 -16 -16 -16h-288c-9 0 -16 7 -16 16v416c0 9 7 16 16 16h288zM48 240v-32h32v32h-32zM48 176v-32h32v32h-32zM48 112v-32h32v32h-32zM144 16v32h-96v-32h96zM144 80v32h-32v-32h32zM144 144v32h-32v-32h32zM144 208v32h-32v-32
-h32zM208 16v32h-32v-32h32zM208 80v32h-32v-32h32zM208 144v32h-32v-32h32zM208 208v32h-32v-32h32zM272 16v96h-32v-96h32zM272 144v32h-32v-32h32zM272 208v32h-32v-32h32zM272 288v80h-224v-80h224z" />
- <glyph glyph-name="ion-calendar" unicode="&#xf117;"
-d="M112 320c-18 0 -32 14 -32 32v32c0 18 14 32 32 32s32 -14 32 -32v-32c0 -18 -14 -32 -32 -32zM336 320c-18 0 -32 14 -32 32v32c0 18 14 32 32 32s32 -14 32 -32v-32c0 -18 -14 -32 -32 -32zM440 384c4 0 8 -4 8 -8v-400c0 -4 -4 -8 -8 -8h-432c-4 0 -8 4 -8 8v400
-c0 4 4 8 8 8h56v-41c0 -22 24 -39 48 -39s48 17 48 39v41h128v-41c0 -22 25 -39 49 -39s47 17 47 39v41h56zM400 16v256h-352v-256h352z" />
- <glyph glyph-name="ion-camera" unicode="&#xf118;" horiz-adv-x="416"
-d="M382 301c18 0 34 -14 34 -33v-202c0 -19 -16 -34 -34 -34h-348c-19 0 -34 15 -34 34v202c0 19 15 33 34 33h69l39 40v0c6 7 15 11 25 11h84c9 0 17 -4 23 -10v0v0v0l41 -41h67zM208 82c51 0 92 42 92 93s-41 93 -92 93s-92 -42 -92 -93s41 -93 92 -93zM376 248
-c8 0 14 6 14 14s-6 14 -14 14s-14 -6 -14 -14s6 -14 14 -14zM208 245c38 0 70 -31 70 -70s-32 -70 -70 -70c-39 0 -70 31 -70 70s31 70 70 70z" />
- <glyph glyph-name="ion-card" unicode="&#xf119;"
-d="M420 352c16 0 28 -12 28 -28v0v-264v0c0 -16 -12 -28 -28 -28h-392c-16 0 -28 12 -28 28v0v0v264v0v0c0 16 12 28 28 28h392zM45 320c-7 0 -12 -5 -13 -12v-20h384v20c-1 7 -6 12 -13 12h-358zM403 64c7 0 12 5 13 12v116h-384v-116c1 -7 6 -12 13 -12h358zM64 128v16
-h192v-16h-192zM64 96v16h96v-16h-96zM320 96v48h64v-48h-64z" />
- <glyph glyph-name="ion-cash" unicode="&#xf316;" horiz-adv-x="512"
-d="M0 352h512v-256h-512v256zM193 128c-20 23 -33 58 -33 96s13 73 33 96h-97c0 -35 -29 -64 -64 -64v-80c27 0 48 -21 48 -48h113zM298 187c3 4 4 9 4 15c0 3 0 5 -1 8s-2 6 -4 8s-4 4 -7 6s-6 4 -10 5c-1 0 -4 1 -7 2s-5 0 -8 1v31c2 -1 5 -2 7 -3c4 -3 6 -7 7 -13h20
-c0 5 -2 9 -4 13s-5 8 -9 11s-9 5 -14 6c-2 1 -5 2 -7 2v9h-18v-9c-2 0 -4 -1 -6 -2c-5 -1 -10 -2 -14 -5s-7 -6 -9 -10s-4 -9 -4 -14c0 -3 0 -5 1 -8s2 -5 4 -7s5 -5 8 -7s7 -4 12 -5c3 -1 6 0 8 -1v-35c-3 1 -6 2 -9 4s-5 4 -6 7s-2 6 -2 9h-20c0 -5 2 -11 4 -16
-c3 -5 6 -8 10 -11s9 -6 15 -7c3 -1 5 -2 8 -2v-9h18v9c3 0 6 1 9 2c5 1 10 2 14 5s7 7 10 11zM480 176v80c-35 0 -64 29 -64 64h-97c20 -23 33 -58 33 -96s-13 -73 -33 -96h113c0 27 22 48 48 48zM64 224c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32z
-M384 224c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32zM273 213c2 -1 4 -2 6 -4s3 -5 3 -9c0 -2 0 -4 -1 -6s-2 -4 -4 -5s-5 -3 -8 -4c-1 0 -2 -1 -4 -1v31c3 -1 6 -1 8 -2zM236 257c1 2 3 3 5 4s4 2 6 2v-26c-4 1 -7 3 -9 5s-4 4 -4 8c0 3 1 5 2 7zM0 32
-v32h512v-32h-512z" />
- <glyph glyph-name="ion-chatbox-working" unicode="&#xf11a;" horiz-adv-x="416"
-d="M76 48c-42 0 -76 31 -76 71v209c0 40 34 72 76 72h264c42 0 76 -32 76 -72v-209c0 -40 -34 -71 -76 -71h-4v-64s-79 54 -86 59s-7 5 -21 5h-153zM304 256c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM208 256c-18 0 -32 -14 -32 -32s14 -32 32 -32
-s32 14 32 32s-14 32 -32 32zM112 256c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32z" />
- <glyph glyph-name="ion-chatbox" unicode="&#xf11b;" horiz-adv-x="416"
-d="M76 48c-42 0 -76 31 -76 71v209c0 40 34 72 76 72h264c42 0 76 -32 76 -72v-209c0 -40 -34 -71 -76 -71h-4v-64s-79 54 -86 59s-7 5 -21 5h-153z" />
- <glyph glyph-name="ion-chatboxes" unicode="&#xf11c;" horiz-adv-x="416"
-d="M246 82l26 -18c-4 -21 -29 -32 -52 -32h-90c-8 0 -11 -2 -13 -3l-53 -45v48h-16c-26 0 -48 16 -48 41v129c0 25 20 45 46 45h2v-101c0 -33 29 -59 64 -59h117c10 0 14 -3 17 -5zM353 400c35 0 63 -27 63 -60v-168c0 -33 -28 -60 -63 -60h-17v-64l-75 60c-2 2 -7 4 -17 4
-h-101c-35 0 -63 27 -63 60v98v70c0 33 21 60 56 60h217z" />
- <glyph glyph-name="ion-chatbubble-working" unicode="&#xf11d;" horiz-adv-x="416"
-d="M208 -1c-115 0 -208 89 -208 200s93 201 208 201s208 -90 208 -201c0 -40 -12 -77 -33 -108c-1 -1 -2 -3 -3 -4v0c-2 -4 -4 -10 -4 -15l22 -88l-84 31c-4 2 -8 2 -12 2s-7 -1 -11 -2v0c-1 0 -1 -1 -2 -1c-25 -10 -52 -15 -81 -15zM304 224c-18 0 -32 -14 -32 -32
-s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM208 224c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM112 224c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32z" />
- <glyph glyph-name="ion-chatbubble" unicode="&#xf11e;" horiz-adv-x="416"
-d="M208 -1c-115 0 -208 89 -208 200s93 201 208 201s208 -90 208 -201c0 -40 -12 -77 -33 -108c-1 -1 -2 -3 -3 -4v0c-2 -4 -4 -10 -4 -15l22 -88l-84 31c-4 2 -8 2 -12 2s-7 -1 -11 -2v0c-1 0 -1 -1 -2 -1c-25 -10 -52 -15 -81 -15z" />
- <glyph glyph-name="ion-chatbubbles" unicode="&#xf11f;" horiz-adv-x="416"
-d="M25 57c-1 1 0 2 -1 3c-15 22 -24 49 -24 77c0 42 19 80 49 106c-2 -11 -4 -22 -4 -34c0 -92 78 -168 174 -168c15 0 30 2 44 6c-27 -32 -69 -53 -115 -53c-20 0 -40 5 -58 12h-1v0c-2 1 -5 2 -8 2s-6 -1 -9 -2l-56 -22l12 63c0 4 -1 7 -3 10v0zM242 400
-c96 0 174 -76 174 -168c0 -33 -11 -64 -28 -90c-1 -1 -1 -2 -2 -3v0c-2 -4 -3 -8 -3 -12l17 -74l-69 26c-3 1 -6 2 -10 2c-3 0 -6 -1 -9 -2v0l-2 -1c-8 -3 -16 -5 -24 -7c-14 -4 -29 -6 -44 -6c-96 0 -173 75 -173 167c0 12 1 24 3 35c16 76 86 133 170 133z" />
- <glyph glyph-name="ion-checkmark-circled" unicode="&#xf120;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM339 267c1 1 1 2 1 3s0 3 -1 4l-31 24c-1 1 -3 1 -4 1s-2 0 -3 -1l-111 -143s-44 42 -45 43s-4 3 -6 3s-3 -2 -4 -3l-25 -25l-1 -1c-1 -1 -1 -3 -1 -4s0 -2 1 -3l2 -1
-s78 -75 79 -76s3 -3 5 -3s4 2 5 3z" />
- <glyph glyph-name="ion-checkmark-round" unicode="&#xf121;" horiz-adv-x="416"
-d="M400 376c17 -13 22 -39 9 -57l-207 -302c-13 -18 -37 -22 -54 -9s-137 147 -137 147c-15 16 -15 42 1 58s40 15 55 -2l99 -107l180 263c13 18 37 22 54 9z" />
- <glyph glyph-name="ion-checkmark" unicode="&#xf122;" horiz-adv-x="416"
-d="M414 338c1 -2 2 -4 2 -6s-1 -4 -2 -6l-249 -320c-2 -2 -5 -6 -9 -6s-8 3 -10 5s-141 136 -141 136l-3 3c-1 2 -2 4 -2 6s1 3 2 5l2 2c14 15 42 44 44 46s4 6 8 6s8 -4 10 -6s80 -78 80 -78l200 257c2 2 4 2 6 2s5 -1 7 -2z" />
- <glyph glyph-name="ion-chevron-down" unicode="&#xf123;"
-d="M224 150v0v0l174 167c4 4 12 4 16 0l31 -30c4 -4 4 -12 0 -16l-213 -204c-2 -2 -5 -3 -8 -3s-6 1 -8 3l-213 204c-4 4 -4 12 0 16l31 30c4 4 12 4 16 0z" />
- <glyph glyph-name="ion-chevron-left" unicode="&#xf124;" horiz-adv-x="256"
-d="M86 192l167 -174c4 -4 4 -12 0 -16l-30 -31c-4 -4 -12 -4 -16 0l-204 213c-2 2 -3 5 -3 8s1 6 3 8l204 213c4 4 12 3 16 -1l30 -30c4 -4 4 -12 0 -16l-167 -174v0v0z" />
- <glyph glyph-name="ion-chevron-right" unicode="&#xf125;" horiz-adv-x="256"
-d="M170 192v0v0l-167 174c-4 4 -4 12 0 16l30 30c4 4 12 5 16 1l204 -213c2 -2 3 -5 3 -8s-1 -6 -3 -8l-204 -213c-4 -4 -12 -4 -16 0l-30 31c-4 4 -4 12 0 16z" />
- <glyph glyph-name="ion-chevron-up" unicode="&#xf126;"
-d="M224 234l-174 -167c-4 -4 -12 -4 -16 0l-31 30c-4 4 -4 12 0 16l213 204c2 2 5 3 8 3s6 -1 8 -3l213 -204c4 -4 4 -12 0 -16l-31 -30c-4 -4 -12 -4 -16 0l-174 167v0v0z" />
- <glyph glyph-name="ion-clipboard" unicode="&#xf127;" horiz-adv-x="352"
-d="M80 288c2 20 10 35 28 40l1 1c12 3 21 7 21 20v21c0 26 21 46 46 46s46 -20 46 -46v-21c0 -13 9 -18 21 -21h2c18 -5 25 -20 27 -40h-192zM176 384c-8 0 -13 -6 -13 -14s5 -14 13 -14s14 6 14 14s-6 14 -14 14zM325 384c15 0 27 -12 27 -28v-360c0 -16 -12 -28 -27 -28
-h-149h-148c-15 0 -28 12 -28 28v360c0 16 13 28 28 28h73v-13c0 -11 -9 -19 -19 -19h-37c-7 0 -12 -6 -12 -13v-327c0 -6 5 -12 11 -12h265c6 0 11 6 11 12v327c0 7 -5 13 -12 13h-37c-10 0 -20 8 -20 19v13h74zM64 224v32h112v-32h-112zM64 32v32h160v-32h-160zM64 96v32
-h129v-32h-129zM64 160v32h208v-32h-208z" />
- <glyph glyph-name="ion-clock" unicode="&#xf26e;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c10 10 19 21 26 33l-27 16l8 14l27 -16c13 25 21 52 22 81h-32v16h32c-1 29 -9 56 -22 81l-27 -16l-8 14l27 16c-7 12 -16 23 -26 33s-21 19 -33 26l-16 -27l-14 8
-l16 27c-25 13 -52 21 -81 22v-32h-16v32c-29 -1 -56 -9 -81 -22l16 -27l-14 -8l-16 27c-12 -7 -23 -16 -33 -26s-19 -21 -26 -33l27 -16l-8 -14l-27 16c-13 -25 -21 -52 -22 -81h32v-16h-32c1 -29 9 -56 22 -81l27 16l8 -14l-27 -16c7 -12 16 -23 26 -33s21 -19 33 -26
-l16 27l14 -8l-16 -27c25 -13 52 -21 81 -22v32h16v-32c29 1 56 9 81 22l-16 27l14 8l16 -27c12 7 23 16 33 26zM368 207v-32h-117c-6 -9 -16 -15 -27 -15c-18 0 -32 14 -32 32c0 12 6 22 16 28v68h32v-68c5 -3 9 -8 12 -13h116z" />
- <glyph glyph-name="ion-close-circled" unicode="&#xf128;"
-d="M224 415c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM332 116l-75 75l76 75c3 3 3 9 0 12l-22 21c-2 2 -4 3 -6 3s-3 -1 -5 -3l-76 -74l-76 74c-2 2 -3 3 -5 3s-4 -1 -6 -3l-21 -21c-3 -3 -3 -9 0 -12l76 -75l-76 -76
-c-2 -1 -2 -3 -2 -5s0 -4 2 -6l21 -22c2 -2 4 -2 6 -2s4 0 6 2l75 76l76 -75c2 -2 3 -3 5 -3s4 1 6 3l21 21c2 1 3 4 3 6s-1 4 -3 6z" />
- <glyph glyph-name="ion-close-round" unicode="&#xf129;" horiz-adv-x="384"
-d="M374 61c14 -14 14 -37 0 -51s-37 -14 -51 0l-131 131l-131 -131c-14 -14 -36 -14 -50 0s-14 37 0 51l130 131l-130 131c-14 14 -14 37 0 51s36 14 50 0l131 -131l131 131c14 14 37 14 51 0s14 -37 0 -51l-131 -131z" />
- <glyph glyph-name="ion-close" unicode="&#xf12a;" horiz-adv-x="384"
-d="M380 61c3 -3 4 -6 4 -10s-1 -7 -4 -10l-38 -37c-3 -3 -5 -4 -9 -4s-7 1 -10 4l-131 131l-131 -131c-3 -3 -5 -4 -9 -4s-7 1 -10 4l-38 37c-3 3 -4 6 -4 10s1 7 4 10l132 131l-132 130c-5 5 -5 15 0 20l37 38c3 2 6 4 10 4s7 -1 10 -4l131 -130l131 130c3 2 6 4 10 4
-s7 -1 10 -4l37 -38c5 -5 5 -14 0 -19l-132 -130z" />
- <glyph glyph-name="ion-closed-captioning" unicode="&#xf317;" horiz-adv-x="512"
-d="M0 384h512v-384h-512v384zM464 192c0 27 0 44 -4 80s-23 56 -59 60s-91 4 -138 4h-7h-7c-47 0 -102 0 -138 -4s-55 -24 -59 -60s-4 -53 -4 -80s2 -47 4 -80s19 -56 59 -60s96 -4 145 -4s105 0 145 4s57 27 59 60s4 53 4 80zM372 164v4h53c0 -27 -7 -48 -19 -62
-s-32 -21 -61 -21c-14 0 -26 2 -36 5s-18 9 -25 17s-12 19 -15 33s-5 30 -5 51s3 39 7 53s9 25 17 33s17 14 27 17s22 5 34 5c25 0 44 -7 57 -21s19 -37 19 -62h-52v1c0 20 -12 33 -27 33s-25 -11 -28 -30c0 0 -2 -11 -2 -29s2 -28 2 -28c1 -17 12 -29 27 -29s27 10 27 29v1z
-M195 164v4h53c0 -27 -7 -48 -19 -62s-32 -21 -61 -21c-14 0 -26 2 -36 5s-18 9 -25 17s-12 19 -15 33s-5 30 -5 51s3 39 7 53s9 25 17 33s17 14 27 17s22 5 34 5c25 0 44 -7 57 -21s19 -37 19 -62h-52v1c0 20 -12 33 -27 33s-25 -11 -28 -30c0 0 -2 -11 -2 -29s2 -28 2 -28
-c1 -17 12 -29 27 -29s27 10 27 29v1z" />
- <glyph glyph-name="ion-cloud" unicode="&#xf12b;"
-d="M366 215c45 0 82 -38 82 -84s-37 -83 -82 -83v0h-276c-49 0 -90 41 -90 91c0 40 26 74 61 86c5 29 29 51 59 51c10 0 18 -3 26 -7c19 40 59 67 105 67c64 0 115 -53 115 -118v-3z" />
- <glyph glyph-name="ion-code-download" unicode="&#xf26f;"
-d="M299 164l-63 -63v0l-1 -1v0l-2 -1v0l-1 -1v0l-2 -1v0h-1v0h-1c-1 0 -3 -1 -4 -1s-3 1 -4 1h-1v0h-1v0l-2 1v0l-1 1v0c-1 1 -2 1 -3 2v0l-63 63c-6 6 -6 17 0 23s18 6 24 0l35 -34v118c0 9 7 17 16 17s16 -8 16 -17v-118l35 34c6 6 18 6 24 0s6 -17 0 -23zM136 56
-c-6 0 -12 2 -17 7l-112 112c-9 9 -9 25 0 34l112 112c9 9 25 9 34 0s9 -25 0 -34l-95 -95l95 -95c9 -9 9 -25 0 -34c-5 -5 -11 -7 -17 -7zM312 56c-6 0 -12 2 -17 7c-9 9 -9 25 0 34l95 95l-95 95c-9 9 -9 25 0 34s25 9 34 0l112 -112c9 -9 9 -25 0 -34l-112 -112
-c-5 -5 -11 -7 -17 -7z" />
- <glyph glyph-name="ion-code-working" unicode="&#xf270;"
-d="M128 192c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM200 192c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM272 192c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM136 56c-7 0 -12 2 -17 7l-112 112c-5 5 -7 10 -7 17
-s2 12 7 17l112 112c5 5 10 7 17 7s12 -2 17 -7s7 -10 7 -17s-2 -12 -7 -17l-95 -95l95 -95c5 -5 7 -10 7 -17s-2 -12 -7 -17s-10 -7 -17 -7zM312 56c-7 0 -12 2 -17 7s-7 10 -7 17s2 12 7 17l95 95l-95 95c-5 5 -7 10 -7 17s2 12 7 17s10 7 17 7s12 -2 17 -7l112 -112
-c5 -5 7 -10 7 -17s-2 -12 -7 -17l-112 -112c-5 -5 -10 -7 -17 -7z" />
- <glyph glyph-name="ion-code" unicode="&#xf271;"
-d="M136 56c-6 0 -12 2 -17 7l-112 112c-9 9 -9 25 0 34l112 112c9 9 25 9 34 0s9 -25 0 -34l-95 -95l95 -95c9 -9 9 -25 0 -34c-5 -5 -11 -7 -17 -7zM312 56c-6 0 -12 2 -17 7c-9 9 -9 25 0 34l95 95l-95 95c-9 9 -9 25 0 34s25 9 34 0l112 -112c9 -9 9 -25 0 -34l-112 -112
-c-5 -5 -11 -7 -17 -7z" />
- <glyph glyph-name="ion-coffee" unicode="&#xf272;" horiz-adv-x="384"
-d="M319 191c37 -7 65 -40 65 -79c0 -20 -8 -39 -21 -54c-15 -17 -37 -26 -61 -26c-8 0 -17 1 -25 3c-6 1 -10 3 -15 5c-11 -15 -23 -25 -32 -33v0c-5 -5 -12 -7 -19 -7h-102c-7 0 -14 2 -19 7v0c-17 15 -41 36 -62 86s-28 91 -28 111s3 20 16 20h101c-5 17 -37 19 -37 46
-c0 17 15 32 28 37c-2 -8 -3 -14 -3 -21c0 -19 39 -30 39 -53c0 -3 0 -6 -1 -9h56c1 5 2 10 2 14c0 36 -56 36 -56 84c0 28 21 55 47 62c-4 -14 -9 -23 -9 -35c0 -32 57 -50 57 -88c0 -13 -5 -25 -12 -37h76c13 0 16 0 16 -20c0 -4 0 -8 -1 -13zM302 64c33 0 50 25 50 48
-s-17 43 -39 47c-4 -19 -11 -42 -21 -66c-4 -9 -8 -17 -12 -25c6 -3 13 -4 22 -4z" />
- <glyph glyph-name="ion-compass" unicode="&#xf273;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224c0 39 10 76 27 108c-16 12 -27 30 -27 52c0 35 29 64 64 64c22 0 40 -11 52 -27c32 17 69 27 108 27zM32 352c0 -10 5 -20 13 -26c13 17 28 32 45 45c-6 8 -16 13 -26 13c-18 0 -32 -14 -32 -32z
-M360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM320 320c0 0 -54 -130 -72 -152s-120 -104 -120 -104s54 132 72 152s120 104 120 104z" />
- <glyph glyph-name="ion-compose" unicode="&#xf12c;" horiz-adv-x="384"
-d="M379 348c7 -7 7 -18 0 -25l-32 -31l-55 55l31 32c7 7 18 7 25 0zM282 338l55 -55l-177 -173l-64 -14l14 64zM320 192l32 32v-201c0 -13 -10 -23 -23 -23h-306c-13 0 -23 10 -23 23v306c0 13 10 23 23 23h201l-32 -32h-149c-6 0 -11 -5 -11 -10v-268s4 -10 10 -10h269
-s9 5 9 10v150z" />
- <glyph glyph-name="ion-connection-bars" unicode="&#xf274;" horiz-adv-x="352"
-d="M0 32v64h64v-64h-64zM96 32v128h64v-128h-64zM192 32v224h64v-224h-64zM288 32v320h64v-320h-64z" />
- <glyph glyph-name="ion-contrast" unicode="&#xf275;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56v-384c51 0 100 20 136 56z" />
- <glyph glyph-name="ion-crop" unicode="&#xf3c1;"
-d="M320 -32v48h64v-48h-64zM384 96h64v-64h-384v256h-64v64h64v64h64v-320h192v192h-176v64h240v-256z" />
- <glyph glyph-name="ion-cube" unicode="&#xf318;"
-d="M435 280c7 0 13 -6 13 -12v-183c0 -9 -6 -17 -14 -22v-1l-175 -92v-1c-2 -1 -4 -1 -6 -1c-7 0 -13 6 -13 12v185c0 9 5 17 13 22v0l3 2l172 89l2 1c2 1 3 1 5 1zM422 329c0 0 8 -3 8 -9c0 -7 -8 -11 -8 -11l-183 -97l-2 -1c-4 -2 -8 -3 -13 -3s-9 1 -13 3l-2 1l-183 96
-s-8 5 -8 12c0 6 8 9 8 9l181 82s11 5 17 5s17 -5 17 -5zM195 187c8 -5 13 -13 13 -22v-185c0 -6 -6 -12 -13 -12c-2 0 -4 1 -6 2v0l-175 92v1c-8 5 -14 13 -14 22v183c0 6 6 12 13 12c2 0 4 0 5 -1l2 -1l171 -89z" />
- <glyph glyph-name="ion-disc" unicode="&#xf12d;"
-d="M224 289c54 0 97 -43 97 -97s-43 -97 -97 -97s-97 43 -97 97s43 97 97 97zM224 148c24 0 44 20 44 44s-20 44 -44 44s-44 -20 -44 -44s20 -44 44 -44zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM224 69
-c68 0 123 55 123 123s-55 123 -123 123s-123 -55 -123 -123s55 -123 123 -123z" />
- <glyph glyph-name="ion-document-text" unicode="&#xf12e;" horiz-adv-x="288"
-d="M286 279c1 -3 2 -6 2 -10v-245c0 -13 -10 -24 -22 -24h-243c-12 0 -23 11 -23 24v336c0 13 11 24 23 24h160c3 0 6 0 9 -2c2 -1 5 -3 7 -5l84 -92c2 -2 2 -4 3 -6zM48 269v-10c0 -1 1 -3 3 -3h71c2 0 3 2 3 3v10c0 2 -1 3 -3 3h-71c-2 0 -3 -1 -3 -3zM48 141v-10
-c0 -1 1 -3 3 -3h123c2 0 2 2 2 3v10c0 2 0 3 -2 3h-123c-2 0 -3 -1 -3 -3zM208 67v10c0 2 0 3 -2 3h-155c-2 0 -3 -1 -3 -3v-10c0 -1 1 -3 3 -3h155c2 0 2 2 2 3zM240 195v10c0 2 0 3 -2 3h-187c-2 0 -3 -1 -3 -3v-10c0 -1 1 -3 3 -3h187c2 0 2 2 2 3zM193 270h60l-71 78
-v-66c0 -6 5 -12 11 -12z" />
- <glyph glyph-name="ion-document" unicode="&#xf12f;" horiz-adv-x="288"
-d="M287 279c1 -3 1 -5 1 -9v-244c0 -13 -9 -26 -21 -26h-243c-12 0 -24 13 -24 26v335c0 13 12 23 24 23h160c3 0 6 0 9 -2c2 -1 5 -2 7 -4l83 -92c2 -2 3 -4 4 -7zM193 337v-63h58zM32 32h224v210h-67c-15 0 -28 13 -28 28v82h-129v-320z" />
- <glyph glyph-name="ion-drag" unicode="&#xf130;" horiz-adv-x="512"
-d="M0 272v32h512v-32h-512zM0 176v32h512v-32h-512zM0 80v32h512v-32h-512z" />
- <glyph glyph-name="ion-earth" unicode="&#xf276;"
-d="M325 322c2 -4 7 -12 3 -15c-3 -2 -10 -2 -13 5s0 11 -5 9s-7 3 -6 4c1 2 3 3 5 4c0 2 -4 8 2 7c4 -1 12 -10 14 -14zM344 277v0v0zM403 251c0 0 -2 0 0 0v0zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM141 19l8 -4
-c3 -1 6 -2 10 -3c14 -5 28 -8 43 -10c28 -3 56 -1 83 8c15 5 30 11 43 20c6 4 6 16 10 24c8 16 -2 33 12 47c12 14 4 19 4 34c0 10 8 18 4 29c-1 4 -7 -3 -9 1c-5 7 -21 1 -28 2c-13 2 -24 14 -33 23c-5 5 0 20 1 26c4 15 0 33 19 38c5 1 5 9 10 11c5 1 10 3 15 4
-c9 1 17 -2 26 -2c10 0 14 -5 22 -11c7 -6 13 -3 22 -5c7 0 0 5 -2 8c-3 2 -6 2 -8 2c-16 4 -23 22 -36 30c-6 3 -9 2 -11 0c-1 -1 1 -12 1 -12c-1 -3 -10 -4 -13 -5c-9 -2 -29 17 -15 22c4 1 27 5 24 15c-3 6 2 13 -5 14c-8 1 -7 7 -15 8c-5 1 -5 11 -5 14c0 9 2 6 9 7
-c-17 11 -37 19 -57 24c-1 -3 -5 -12 -8 -12c-5 -1 -6 0 -9 -3c-9 -10 -16 -28 -25 -7c-4 11 5 19 2 28h-6h-3c6 -12 -5 -18 -8 -19c-8 0 -10 5 -17 4c-4 -1 -7 4 -11 2s-13 -8 -14 -12c-3 -12 6 -13 14 -6c6 6 17 12 25 6c6 -5 5 -9 5 -14s-1 -18 -9 -16c-4 1 -7 6 -11 3
-c-8 -7 -18 -6 -29 -9c-10 -2 -16 -6 -25 -9c-8 -3 -11 -4 -12 -12c0 -2 0 -14 -3 -15c-5 -2 -8 22 -22 20c-12 -1 -30 -13 -25 -28c2 -5 28 -3 10 -14c-2 -1 2 -17 2 -20c1 -8 13 -18 21 -10c6 6 6 5 14 2c15 -8 33 -15 45 -27c6 -6 9 -24 17 -28c9 -5 19 -5 26 -14
-c6 -7 -2 -19 -8 -23c-4 -2 -12 -24 -16 -29c-2 -4 -12 -6 -16 -7c-3 0 -7 -9 -9 -11c-7 -7 -8 -13 -17 -19c-18 -12 -22 -23 -18 -44c2 -8 5 -13 11 -16zM100 46l2 -2c7 -6 15 -11 23 -16c-21 21 -23 49 -21 78l3 24c1 3 -4 7 -4 11c0 10 0 5 -8 13c-4 4 -10 11 -12 17
-c-7 16 1 30 10 43c9 14 -7 20 -10 32c-1 6 -7 6 -6 12c1 7 -4 5 -9 9c-12 8 -1 20 -7 26c-43 -70 -36 -162 16 -224c1 -1 0 -1 1 -2h1c3 -4 6 -8 9 -11s7 -6 10 -9z" />
- <glyph glyph-name="ion-easel" unicode="&#xf3c2;"
-d="M48 112v192h352v-192h-352zM432 352c9 0 16 -7 16 -16v-256c0 -9 -7 -16 -16 -16h-416c-9 0 -16 7 -16 16v256c0 9 7 16 16 16h416zM416 96v224h-384v-224h384zM48 -32l29 80h31l-28 -80h-32zM239 416l17 -48h-64l17 48h30zM340 48h31l29 -80h-32zM208 0v48h32v-48h-32z
-" />
- <glyph glyph-name="ion-edit" unicode="&#xf2bf;"
-d="M381 259l-250 -251l-91 91l251 250zM440 360c12 -12 11 -32 -2 -45l-45 -45l-91 91l45 45c13 13 33 14 45 2zM32 85l85 -85l-117 -32z" />
- <glyph glyph-name="ion-egg" unicode="&#xf277;" horiz-adv-x="320"
-d="M160 416c64 0 160 -133 160 -257s-64 -191 -160 -191s-160 67 -160 191s96 257 160 257z" />
- <glyph glyph-name="ion-eject" unicode="&#xf131;" horiz-adv-x="320"
-d="M303 128h-286v0c-10 0 -17 7 -17 16c0 3 1 5 3 8l138 191c5 5 11 9 19 9s14 -4 19 -9l138 -190c2 -3 3 -6 3 -9c0 -9 -7 -16 -17 -16v0zM308 96c7 0 12 -5 12 -12v-40c0 -7 -5 -12 -12 -12h-296c-7 0 -12 5 -12 12v40c0 7 5 12 12 12h296z" />
- <glyph glyph-name="ion-email-unread" unicode="&#xf3c3;" horiz-adv-x="480"
-d="M352 288c0 43 21 64 64 64s64 -21 64 -64s-21 -64 -64 -64s-64 21 -64 64zM209 288h127c0 -17 5 -33 15 -47c-6 -3 -14 -8 -22 -12s-16 -8 -23 -12s-14 -8 -22 -12s-15 -8 -21 -11s-11 -6 -16 -9s-9 -5 -12 -7s-4 -3 -5 -3c-6 -3 -13 -4 -21 -4s-15 1 -21 4
-c-1 1 -15 8 -42 23s-54 29 -81 44s-43 23 -46 25c-7 4 -12 8 -13 11c-1 4 -1 6 1 8s6 2 11 2h191zM277 175c18 11 45 30 83 56c16 -15 34 -23 56 -23v-155c0 -2 -1 -4 -2 -7s-3 -5 -5 -7s-4 -4 -7 -5s-6 -2 -8 -2h-185h-185c-5 0 -11 2 -16 7s-8 9 -8 14v205c0 6 3 8 9 5
-c2 -1 11 -7 26 -17s32 -22 53 -36s39 -26 53 -35l-83 -93c-2 -2 -2 -4 -1 -5c2 -1 4 -1 6 1l98 83c16 -10 25 -16 27 -17c6 -3 13 -4 21 -4s15 1 21 4c2 1 11 7 27 17l98 -83c2 -2 5 -2 6 -1s0 3 -2 5z" />
- <glyph glyph-name="ion-email" unicode="&#xf132;" horiz-adv-x="416"
-d="M19 299c-4 2 -11 7 -13 11c-3 8 1 10 12 10h191h191c11 0 15 -2 12 -10c-2 -4 -9 -9 -13 -11c-11 -6 -163 -89 -169 -92s-12 -4 -21 -4s-15 1 -21 4s-158 86 -169 92zM408 295c9 4 8 -1 8 -5v-205c0 -9 -12 -21 -22 -21h-185h-185c-10 0 -24 12 -24 21v205s0 9 9 5
-c8 -4 83 -56 132 -88l-83 -93c-2 -2 -2 -4 -1 -5s4 -1 6 1l98 83c15 -10 25 -16 27 -17c8 -4 14 -4 21 -4s13 0 21 4c2 1 12 7 27 17l98 -83c2 -2 5 -2 6 -1s0 3 -2 5l-82 93c49 32 123 84 131 88z" />
- <glyph glyph-name="ion-erlenmeyer-flask-bubbles" unicode="&#xf3c4;" horiz-adv-x="384"
-d="M382 21c2 -4 3 -10 0 -14s-8 -7 -13 -7h-177h-178c-5 0 -9 3 -12 7s-2 10 0 14l118 199v150c0 8 6 14 14 14s15 -6 15 -14v-80c4 3 10 5 16 5c15 0 27 -12 27 -27s-12 -26 -27 -26c-6 0 -12 2 -16 5v-31c0 -2 -1 -4 -2 -6l-35 -59h72c-15 6 -26 20 -26 37
-c0 23 19 42 43 42c15 0 27 -8 35 -19c-1 2 -1 3 -1 5v154c0 8 6 14 14 14s15 -6 15 -14v-150zM218 151h53l-31 54c2 -5 3 -11 3 -17c0 -17 -10 -31 -25 -37zM201 319c-12 0 -22 9 -22 21s10 21 22 21s22 -9 22 -21s-10 -21 -22 -21z" />
- <glyph glyph-name="ion-erlenmeyer-flask" unicode="&#xf3c5;" horiz-adv-x="384"
-d="M375 52c6 -9 9 -20 9 -32c0 -28 -16 -52 -63 -52h-258c-47 0 -63 24 -63 52c0 12 3 23 9 32l49 73l49 77c13 20 21 44 21 70v92s-14 34 -16 43c-2 8 1 9 17 9h126c16 0 18 -1 16 -9c-2 -9 -15 -22 -15 -42v-93c0 -26 6 -50 19 -70zM345 7c3 3 7 8 7 14c0 5 -2 10 -4 14
-l-101 150c-16 26 -23 56 -23 87v112h-64v-112c0 -32 -9 -62 -25 -87l-99 -150c-2 -4 -4 -9 -4 -14c0 -6 3 -11 6 -14c4 -4 12 -7 25 -7h258c13 0 20 3 24 7zM325 37c1 -2 3 -6 3 -8c0 -7 -6 -15 -14 -15h-244c-7 0 -14 6 -14 14c0 3 1 6 3 8l81 124h103l82 -124v1zM238 106
-c2 -1 4 -2 6 -2s3 0 5 2c1 2 3 4 3 6s-1 4 -3 6c-1 2 -3 2 -5 2s-4 0 -6 -2c-1 -2 -2 -4 -2 -6s0 -4 2 -6zM285 47c4 2 4 7 2 11l-23 36c-1 2 -4 4 -7 4c-2 0 -3 0 -4 -1c-4 -2 -4 -7 -2 -11l23 -36c1 -2 5 -4 7 -4c1 0 3 0 4 1z" />
- <glyph glyph-name="ion-eye-disabled" unicode="&#xf306;"
-d="M344 290c41 -27 76 -66 104 -100c-51 -54 -124 -135 -224 -135c-36 0 -65 8 -92 22l-77 -77l-23 23l71 71c-36 25 -68 61 -103 98c78 85 142 137 224 137c34 0 64 -9 92 -23l77 78l23 -23zM134 192c0 -19 6 -36 16 -51l27 27c-4 7 -5 15 -5 24c0 29 23 53 52 53h8
-c-5 -6 -8 -13 -8 -21c0 -3 0 -5 1 -8l51 50c-15 11 -33 17 -52 17c-49 0 -90 -41 -90 -91zM224 101c49 0 90 41 90 91c0 19 -6 37 -16 52l-50 -51c3 -1 5 -1 8 -1c8 0 14 3 20 7v-7c0 -29 -23 -53 -52 -53c-9 0 -17 2 -24 6l-28 -27c15 -11 33 -17 52 -17z" />
- <glyph glyph-name="ion-eye" unicode="&#xf133;"
-d="M224 320c99 0 172 -70 224 -129c-51 -50 -124 -127 -224 -127s-157 60 -224 128c78 79 142 128 224 128zM224 101c49 0 90 41 90 91s-41 91 -90 91s-90 -41 -90 -91s41 -91 90 -91zM224 224c0 -18 14 -32 32 -32c8 0 14 3 20 7v-7c0 -29 -23 -53 -52 -53s-52 24 -52 53
-s23 53 52 53h8c-5 -6 -8 -13 -8 -21z" />
- <glyph glyph-name="ion-female" unicode="&#xf278;" horiz-adv-x="256"
-d="M160 164v-68h64v-64h-64v-64h-64v64h-64v64h64v68c-55 14 -96 64 -96 124c0 71 57 128 128 128s128 -57 128 -128c0 -60 -41 -110 -96 -124zM128 208c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" />
- <glyph glyph-name="ion-filing" unicode="&#xf134;" horiz-adv-x="384"
-d="M317 319c12 0 19 0 19 -20v-28h-288v28c0 20 8 20 20 20h249zM269 352c13 0 19 -1 19 -19h-192c0 18 7 19 20 19h153zM368 278c13 -8 17 -17 15 -41l-17 -184c-4 -21 -16 -21 -24 -21h-300c-8 0 -20 0 -24 21l-17 185c-3 26 1 31 15 40l15 10v-32h321v32z" />
- <glyph glyph-name="ion-film-marker" unicode="&#xf135;" horiz-adv-x="416"
-d="M400 240c9 0 16 -7 16 -15v-210c0 -8 -7 -15 -16 -15h-384c-9 0 -16 7 -16 15v210c0 8 6 14 13 15c-2 2 -3 4 -4 7l-9 45c-2 8 5 16 13 18l370 74c8 2 16 -4 18 -12l9 -46c2 -8 -4 -16 -12 -18l-342 -68h344zM257 46l-20 58l51 36h-62l-20 58l-19 -58h-63l51 -36l-19 -58
-l50 36z" />
- <glyph glyph-name="ion-fireball" unicode="&#xf319;" horiz-adv-x="320"
-d="M297 210c14 -24 23 -52 23 -82c0 -33 -10 -63 -26 -88v0v0c-29 -43 -78 -72 -134 -72c-17 0 -32 1 -46 7s-25 13 -33 25c-11 16 -17 28 -21 52c-6 -25 2 -48 9 -60c-43 26 -69 71 -69 125v4c5 78 65 109 90 151c8 14 13 30 10 48c11 -9 15 -25 15 -39
-c0 -16 -3 -29 -3 -29c4 8 7 18 9 31c6 35 2 85 -37 132l-1 1s7 0 18 -3c95 -16 169 -91 184 -186c2 -12 3 -23 3 -35c0 -16 -2 -32 -5 -47c10 23 13 43 14 55v10z" />
- <glyph glyph-name="ion-flag" unicode="&#xf279;" horiz-adv-x="384"
-d="M362 266c0 0 12 2 22 6c0 -16 -7 -32 -9 -36c-28 -50 -99 -123 -181 -84c-65 31 -92 30 -117 24c-1 0 -2 -1 -3 -1c-3 -1 -15 -5 -26 -1v197c0 16 14 31 33 35c39 7 106 5 148 -74c39 -74 97 -72 133 -66zM24 416c4 0 8 -4 8 -8v-432c0 -4 -4 -8 -8 -8h-16
-c-4 0 -8 4 -8 8v432c0 4 4 8 8 8h16z" />
- <glyph glyph-name="ion-flame" unicode="&#xf31a;" horiz-adv-x="256"
-d="M1 128c-11 109 72 224 159 288c-26 -145 97 -142 96 -288c-1 -120 -105 -160 -128 -160s-114 26 -127 160zM88 80c0 -44 40 -80 40 -80s41 36 41 80s-41 80 -41 80s-40 -36 -40 -80z" />
- <glyph glyph-name="ion-flash-off" unicode="&#xf136;"
-d="M115 -4c-69 38 -115 112 -115 196c0 124 100 224 224 224c24 0 47 -4 68 -11c2 -1 3 -1 5 -2c12 -4 24 -9 35 -15v0c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-24 0 -47 4 -68 11c-2 1 -3 1 -5 2c-12 4 -24 8 -35 14zM86 291c-20 -28 -32 -62 -32 -99
-c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c2 -1 3 -1 5 -2c9 -3 19 -5 29 -7c9 -2 18 -2 27 -2c37 0 71 12 99 32l-52 53l36 40l55 -54c20 28 32 62 32 99c0 66 -37 123 -91 151c-6 3 -12 6 -18 8c-2 1 -3 1 -5 2c-9 3 -19 5 -29 7c-9 2 -18 2 -27 2c-37 0 -72 -12 -100 -32
-l53 -52l-36 -41zM178 58l38 113h-85l139 155l-38 -113h85z" />
- <glyph glyph-name="ion-flash" unicode="&#xf137;" horiz-adv-x="320"
-d="M0 160l224 256l-51 -192h147l-224 -256l51 192h-147z" />
- <glyph glyph-name="ion-folder" unicode="&#xf139;" horiz-adv-x="384"
-d="M366 256c18 0 19 -7 18 -18l-12 -186c-1 -11 -3 -20 -21 -20h-317c-18 0 -20 9 -21 20l-13 184c-1 11 0 20 18 20h348zM362 305l2 -33h-344c0 6 4 46 6 63c2 18 8 17 25 17h75c28 0 23 0 37 -15c16 -18 19 -17 41 -17h143c11 0 15 -3 15 -15z" />
- <glyph glyph-name="ion-fork-repo" unicode="&#xf2c0;" horiz-adv-x="320"
-d="M320 368v-64h-48v-48h-64v48h-48v64h48v48h64v-48h48zM208 208h64v-5v0c0 -43 -7 -70 -38 -95c-23 -19 -51 -20 -75 -22c-9 -1 -18 -2 -26 -3c-6 -1 -13 -5 -20 -10c9 -11 15 -25 15 -41c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55
-c0 35 29 64 64 64s64 -29 64 -64c0 -24 -13 -44 -32 -55v-160c8 4 18 7 27 9c11 2 21 2 31 3c17 1 33 3 40 9c10 8 14 11 14 50zM64 384c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM64 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32
-s14 -32 32 -32z" />
- <glyph glyph-name="ion-fork" unicode="&#xf27a;" horiz-adv-x="128"
-d="M78 299v0v0v0zM128 282c0 -26 -15 -48 -37 -58c-12 -6 -11 -11 -11 -11s16 -200 16 -213s-3 -18 -9 -24s-15 -8 -23 -8v0v0c-8 0 -16 2 -22 8s-10 13 -10 24s16 213 16 213s0 6 -11 11c-22 10 -37 32 -37 58c0 43 15 93 24 134h8v-117c0 -6 3 -11 9 -11s9 4 10 10v1
-l9 117h8l10 -117v-1c1 -6 3 -10 9 -10s9 5 9 11v117h8v0c9 -40 24 -91 24 -134z" />
- <glyph glyph-name="ion-forward" unicode="&#xf13a;" horiz-adv-x="384"
-d="M224 150c-102 0 -171 -9 -224 -102c0 0 37 208 224 208v80l160 -144l-160 -134v92z" />
- <glyph glyph-name="ion-funnel" unicode="&#xf31b;"
-d="M224 416c124 0 224 -36 224 -80c0 -8 -3 -15 -9 -22v0c-35 -43 -151 -179 -151 -218v-4v-83v0c0 -23 -29 -41 -64 -41s-64 18 -64 41v0v87c0 39 -117 177 -149 216v0c-7 8 -11 16 -11 24c0 44 100 80 224 80zM224 288c92 0 176 22 176 48s-83 48 -176 48
-s-176 -22 -176 -48s84 -48 176 -48z" />
- <glyph glyph-name="ion-gear-a" unicode="&#xf13d;" horiz-adv-x="384"
-d="M347 192c0 -24 15 -43 37 -56c-4 -13 -10 -26 -16 -38c-25 6 -45 -3 -62 -20s-22 -37 -16 -62c-12 -6 -25 -12 -38 -16c-13 22 -36 37 -60 37s-47 -15 -60 -37c-13 4 -27 10 -39 16c6 25 2 45 -15 62s-37 21 -62 15c-6 12 -12 26 -16 39c22 13 37 36 37 60s-15 43 -37 56
-c4 13 9 26 16 38c25 -6 45 3 62 20s21 37 15 62c12 6 26 12 39 16c13 -22 36 -37 60 -37s47 15 60 37c13 -4 27 -10 39 -16c-6 -25 -2 -45 15 -62s37 -26 62 -20c6 -12 12 -25 16 -38c-22 -13 -37 -32 -37 -56zM192 94c54 0 98 44 98 98s-44 98 -98 98s-98 -44 -98 -98
-s44 -98 98 -98z" />
- <glyph glyph-name="ion-gear-b" unicode="&#xf13e;" horiz-adv-x="384"
-d="M384 154h-44c-4 -14 -10 -27 -17 -39l32 -32l-54 -54l-33 32c-12 -7 -24 -11 -38 -15v-46h-76v46c-13 4 -26 8 -38 15l-33 -32l-54 54l32 32c-7 12 -13 25 -17 39h-44v76h43c4 14 9 29 16 41l-30 30l54 54l29 -29c13 8 27 13 42 17v41h76v-41c15 -4 29 -9 42 -17l29 29
-l54 -54l-30 -30c7 -12 13 -27 16 -41h43v-76zM192 138c30 0 54 24 54 54s-24 54 -54 54s-54 -24 -54 -54s24 -54 54 -54z" />
- <glyph glyph-name="ion-grid" unicode="&#xf13f;" horiz-adv-x="320"
-d="M64 295c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM192 295c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM320 295c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM64 167
-c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM192 167c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM320 167c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM64 39
-c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM192 39c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50zM320 39c0 -4 -3 -7 -7 -7h-50c-4 0 -7 3 -7 7v50c0 4 3 7 7 7h50c4 0 7 -3 7 -7v-50z" />
- <glyph glyph-name="ion-hammer" unicode="&#xf27b;" horiz-adv-x="320"
-d="M314 416c3 0 6 -3 6 -6v-84c0 -3 -3 -6 -6 -6h-52c-3 0 -6 3 -6 6v14c-6 5 -16 9 -22 7c-7 -2 -23 -13 -30 -25s-6 -28 -6 -66l8 -2c5 -1 7 -6 7 -9v-70c0 -95 11 -201 11 -201c0 -3 -3 -6 -6 -6h-84c-3 0 -6 3 -6 6c0 0 11 106 11 201v70c0 3 3 8 7 9l7 2
-c0 43 -5 58 -22 74c-18 16 -41 19 -63 17s-51 -35 -58 -45s-10 2 -10 11c1 16 22 60 72 81s91 22 102 22s27 -1 38 -3s16 -18 26 -18c7 0 14 5 18 9v6c0 3 3 6 6 6h52z" />
- <glyph glyph-name="ion-happy-outline" unicode="&#xf3c6;"
-d="M355 158c8 -4 11 -13 7 -21c-24 -46 -78 -73 -138 -73c-62 0 -118 29 -139 74c-4 8 0 17 8 21c2 1 5 1 7 1c6 0 11 -3 14 -9c16 -34 60 -55 110 -55c49 0 92 21 110 56c3 5 8 8 14 8c3 0 5 -1 7 -2zM381 217c5 -7 4 -17 -4 -22c-3 -2 -6 -3 -10 -3c-5 0 -11 2 -14 6
-s-7 10 -17 10s-14 -6 -17 -10s-9 -6 -14 -6c-4 0 -7 1 -10 3c-8 6 -9 15 -3 22c11 14 23 23 44 23s35 -9 45 -23zM157 217c5 -7 4 -17 -4 -22c-3 -2 -6 -3 -10 -3c-5 0 -11 2 -14 6s-7 10 -17 10s-14 -6 -17 -10s-9 -6 -14 -6c-4 0 -7 1 -10 3c-8 6 -9 15 -3 22
-c11 14 23 23 44 23s35 -9 45 -23zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56
-s100 20 136 56z" />
- <glyph glyph-name="ion-happy" unicode="&#xf31c;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM71 195c3 -2 6 -3 10 -3c5 0 11 2 14 6s7 10 17 10s14 -6 17 -10s9 -6 14 -6c4 0 7 1 10 3c8 5 9 15 4 22c-10 14 -24 23 -45 23s-33 -9 -44 -23c-6 -7 -5 -16 3 -22zM362 137
-c4 8 1 17 -7 21c-2 1 -4 2 -7 2c-6 0 -11 -3 -14 -8c-18 -35 -61 -56 -110 -56c-50 0 -94 21 -110 55c-3 6 -8 9 -14 9c-2 0 -5 0 -7 -1c-8 -4 -12 -13 -8 -21c21 -45 77 -74 139 -74c60 0 114 27 138 73zM377 195c8 5 9 15 4 22c-10 14 -24 23 -45 23s-33 -9 -44 -23
-c-6 -7 -5 -16 3 -22c3 -2 6 -3 10 -3c5 0 11 2 14 6s7 10 17 10s14 -6 17 -10s9 -6 14 -6c4 0 7 1 10 3z" />
- <glyph glyph-name="ion-headphone" unicode="&#xf140;" horiz-adv-x="384"
-d="M383 210c3 -51 -3 -130 -13 -162c-20 -67 -40 -80 -72 -80s-58 27 -58 59v106c0 33 23 59 53 59c18 0 34 -9 44 -24c0 0 11 7 13 22s4 34 -5 64s-21 19 -36 38c-2 3 -5 7 -8 10l-10 10c-2 2 -3 3 -5 4c-11 9 -21 17 -34 23c-19 9 -39 13 -60 13s-42 -4 -61 -13
-c-13 -6 -22 -14 -33 -23c-2 -1 -3 -2 -5 -4l-10 -10s-6 -7 -8 -10c-15 -19 -27 -8 -36 -38c-9 -31 -7 -49 -5 -64s13 -22 13 -22c10 15 26 24 44 24c30 0 53 -27 53 -59v-106c0 -32 -26 -59 -58 -59s-52 13 -72 80c-10 32 -16 111 -13 162c3 60 22 108 56 145v0
-c8 8 15 16 24 23s19 13 29 18c25 13 53 20 82 20s57 -7 82 -20c10 -5 19 -11 28 -18s17 -15 25 -23v0c34 -37 53 -85 56 -145z" />
- <glyph glyph-name="ion-heart-broken" unicode="&#xf31d;" horiz-adv-x="416"
-d="M181 160c0 -36 -2 -71 4 -107c2 -10 2 -20 2 -31l-153 159c-45 47 -45 124 0 171c40 41 103 43 144 3c-2 -15 -3 -31 -3 -46c-18 -14 -40 -21 -56 -39l11 7c17 11 15 8 35 14c3 1 8 3 11 5c0 -1 -1 -5 -1 -6c1 -20 11 -39 15 -60c0 -5 1 -10 -1 -15c-8 -17 -7 -37 -8 -55
-zM274 147c8 -18 23 -29 38 -39l-104 -108l-17 18c0 13 -4 26 -4 38c-2 48 10 94 21 142v0c1 -1 2 -1 3 -1c30 -6 52 -24 63 -50zM382 352c46 -47 46 -124 0 -171l-68 -70c-28 24 -42 54 -65 81c-12 13 -26 23 -41 32c-3 13 -8 26 -11 39c-3 12 14 21 16 31c3 12 3 26 3 39
-l19 19c40 42 107 42 147 0z" />
- <glyph glyph-name="ion-heart" unicode="&#xf141;" horiz-adv-x="416"
-d="M382 352c46 -47 46 -124 0 -171l-174 -181l-174 181c-46 47 -46 124 0 171c40 42 107 42 147 0l27 -28l28 28c40 42 106 42 146 0z" />
- <glyph glyph-name="ion-help-buoy" unicode="&#xf27c;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM402 264c-10 24 -23 45 -42 64s-41 32 -65 42l-19 -61c14 -6 27 -15 38 -26s21 -24 27 -38zM224 96c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM88 328
-c-19 -19 -32 -41 -42 -65l61 -19c6 14 15 27 26 38s24 21 38 27l-19 61c-24 -10 -45 -23 -64 -42zM46 120c10 -24 23 -45 42 -64s41 -32 65 -42l19 61c-14 6 -27 15 -38 26s-21 24 -27 38zM360 56c19 19 32 41 42 65l-61 19c-6 -14 -15 -27 -26 -38s-24 -21 -38 -27l19 -61
-c24 10 45 23 64 42z" />
- <glyph glyph-name="ion-help-circled" unicode="&#xf142;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM244 89c1 18 -12 31 -29 31c-16 0 -30 -11 -30 -29s12 -30 28 -30c17 0 31 10 31 28zM293 217c7 10 12 22 12 36c0 23 -9 40 -25 52c-17 13 -37 18 -62 18
-c-19 0 -34 -4 -47 -13c-19 -13 -28 -34 -28 -68h49c0 9 -1 19 4 27s13 15 26 15s19 -3 25 -11c5 -7 8 -15 8 -23c0 -7 -4 -14 -8 -20c-2 -4 -6 -7 -10 -10c0 0 -26 -15 -35 -30c-7 -11 -9 -24 -10 -41c0 -1 0 -4 4 -4h39s5 3 5 4c0 6 1 15 2 19c2 7 6 12 12 17l14 9
-c12 9 21 17 25 23z" />
- <glyph glyph-name="ion-help" unicode="&#xf143;" horiz-adv-x="256"
-d="M217 371c25 -19 39 -46 39 -83c0 -22 -8 -42 -19 -57c-7 -9 -21 -21 -40 -36l-21 -14c-10 -8 -17 -18 -20 -28c-2 -6 -3 -19 -3 -29c0 -2 -1 -6 -7 -6h-62c-7 0 -7 3 -7 5c1 26 4 49 15 66c15 23 57 48 57 48c6 5 11 9 15 15c7 10 12 21 12 32c0 13 -3 26 -11 36
-c-10 12 -21 18 -41 18s-32 -11 -40 -24s-7 -29 -7 -43h-77c0 54 14 88 44 108c20 14 45 20 75 20c39 0 70 -7 98 -28zM114 78c27 -1 47 -20 46 -48s-22 -46 -49 -45c-26 1 -46 19 -45 47s22 47 48 46z" />
- <glyph glyph-name="ion-home" unicode="&#xf144;" horiz-adv-x="384"
-d="M384 160h-48v-160h-96v128h-96v-128h-96v160h-48l192 224z" />
- <glyph glyph-name="ion-icecream" unicode="&#xf27d;" horiz-adv-x="320"
-d="M32 192h256l-128 -224zM307 275c8 -5 13 -13 13 -23c0 -16 -14 -28 -30 -28h-4h-252h-4c-16 0 -30 13 -30 28c0 10 6 18 14 23c1 0 1 2 2 2c4 3 7 7 8 12v1c-2 6 -2 12 -2 18c0 42 34 76 76 76c8 0 16 -2 23 -4c-3 -12 -4 -31 -4 -31c2 15 11 29 11 29c18 23 46 38 77 38
-c53 0 96 -43 96 -96c0 -11 -2 -21 -5 -30v-1c0 -4 4 -9 8 -12c1 0 2 -2 3 -2z" />
- <glyph glyph-name="ion-image" unicode="&#xf147;"
-d="M336 224c-26 0 -48 22 -48 48s22 48 48 48s48 -22 48 -48s-22 -48 -48 -48zM420 384c16 0 28 -12 28 -28v-328c0 -16 -12 -28 -28 -28h-392c-16 0 -28 12 -28 28v328c0 16 12 28 28 28h392zM317 186l99 -106v260c0 7 -6 12 -13 12h-358c-7 0 -12 -5 -13 -12v-260l126 152
-c4 4 10 8 17 8s13 -2 17 -7l54 -59l4 -4c3 -2 7 -4 11 -4s8 2 12 5l18 16c4 3 8 5 13 5s10 -2 13 -6z" />
- <glyph glyph-name="ion-images" unicode="&#xf148;"
-d="M426 308c13 -1 23 -12 22 -24l-14 -263c-1 -13 -12 -22 -25 -21l-330 16c-13 1 -23 10 -22 23l2 46l-15 -1c-12 -1 -22 7 -23 18l-21 236c-1 11 7 21 19 22l296 24c12 1 22 -7 23 -18l5 -54zM71 302c1 12 11 22 24 22l219 -11l-2 31h-1v1c-1 5 -5 8 -10 8l-261 -22
-c-5 0 -10 -4 -10 -9v0v-1l16 -178l18 25zM405 66l10 198v1v0c0 6 -5 10 -11 10l-58 3l-29 2l-204 9c-6 0 -11 -4 -12 -9v0v-1l-3 -63l-7 -128v-7l6 7l102 109c4 4 8 6 14 6s11 -3 14 -7l43 -49l3 -3c2 -2 6 -4 10 -4s5 1 9 3l17 12c4 3 7 4 11 4s9 -2 11 -5l27 -33zM341 186
-c-20 0 -35 15 -35 35s16 35 35 35c20 0 35 -16 35 -35s-16 -35 -35 -35z" />
- <glyph glyph-name="ion-information-circled" unicode="&#xf149;"
-d="M448 195c2 -124 -97 -225 -221 -227s-225 97 -227 221s97 225 221 227s225 -97 227 -221zM224 336c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM268 53v11h-22v172h-66v-12h22v-160h-22v-11h88z" />
- <glyph glyph-name="ion-information" unicode="&#xf14a;" horiz-adv-x="128"
-d="M96 0h32v-16h-128v16h32v240h-32v16h96v-256zM64 304c-27 0 -48 21 -48 48s21 48 48 48s48 -21 48 -48s-21 -48 -48 -48z" />
- <glyph glyph-name="ion-ionic" unicode="&#xf14b;" horiz-adv-x="416"
-d="M376 315c25 -34 40 -77 40 -123c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208c46 0 89 -15 123 -40c5 3 11 5 18 5c18 0 32 -14 32 -32c0 -7 -2 -13 -5 -18zM344 56c18 18 31 38 41 61c10 24 15 49 15 75s-5 51 -15 75c-6 13 -13 26 -21 38
-c-4 -2 -10 -4 -15 -4c-18 0 -32 14 -32 32c0 5 2 11 4 15c-12 8 -25 15 -38 21c-24 10 -49 15 -75 15s-51 -5 -75 -15c-23 -10 -43 -23 -61 -41s-31 -38 -41 -61c-10 -24 -15 -49 -15 -75s5 -51 15 -75c10 -23 23 -43 41 -61s38 -31 61 -41c24 -10 49 -15 75 -15s51 5 75 15
-c23 10 43 23 61 41zM112 192c0 64 32 96 96 96s96 -32 96 -96s-32 -96 -96 -96s-96 32 -96 96z" />
- <glyph glyph-name="ion-ios-alarm-outline" unicode="&#xf3c7;" horiz-adv-x="404"
-d="M384 256l-54 52l-9 -9c35 -32 57 -79 57 -130c0 -44 -16 -83 -43 -114l36 -45l-12 -10l-35 43c-32 -30 -75 -49 -122 -49v0v0c-47 0 -90 19 -122 49l-35 -43l-12 10l36 45c-27 31 -43 71 -43 115c0 51 22 97 57 129l-9 9l-54 -52c-12 14 -20 32 -20 52c0 44 35 80 80 82
-h5c20 0 39 -7 54 -18l-54 -52l11 -11c26 19 56 32 90 35v0c0 8 8 16 16 16s15 -8 15 -16v0c34 -3 65 -16 91 -35l11 11l-54 52c15 11 34 18 54 18h5c45 -2 80 -38 80 -82c0 -20 -8 -38 -20 -52zM22 280l91 89c-9 5 -19 7 -32 6c-37 -2 -65 -32 -65 -67c0 -10 2 -19 6 -28z
-M362 172c0 88 -72 158 -160 158s-160 -70 -160 -158s72 -158 160 -158s160 70 160 158zM291 369l91 -89c4 9 6 18 6 28c0 35 -28 65 -65 67c-13 1 -23 -1 -32 -6zM202 288h16v-144h-112v16h96v128z" />
- <glyph glyph-name="ion-ios-alarm" unicode="&#xf3c8;" horiz-adv-x="404"
-d="M385 256l-55 52l-9 -9c35 -32 57 -79 57 -130c0 -44 -16 -83 -43 -114l37 -45l-13 -10l-35 43c-32 -30 -75 -49 -122 -49v0v0c-47 0 -90 19 -122 49l-35 -43l-12 10l36 45c-27 31 -43 70 -43 114c0 51 22 98 57 130l-9 9l-54 -52c-12 14 -20 32 -20 52c0 44 35 80 80 82
-h5c20 0 39 -7 54 -18l-54 -53l11 -10c26 19 56 32 90 35v0c0 8 8 16 16 16s15 -8 15 -16v0c34 -3 65 -16 91 -35l11 11l-54 52c15 11 34 18 54 18h5c45 -2 80 -38 80 -82c0 -20 -7 -38 -19 -52zM218 144v144h-16v-128h-96v-16h112z" />
- <glyph glyph-name="ion-ios-albums-outline" unicode="&#xf3c9;"
-d="M432 304h-416v-288h416v288zM448 320v0v-320h-448v320h448zM40 336v16h368v-16h-368zM72 368v16h304v-16h-304z" />
- <glyph glyph-name="ion-ios-albums" unicode="&#xf3ca;"
-d="M448 320v0v-320h-448v320h448zM40 336v16h368v-16h-368zM72 368v16h304v-16h-304z" />
- <glyph glyph-name="ion-ios-americanfootball-outline" unicode="&#xf3cb;" horiz-adv-x="416"
-d="M331 315c112 -112 81 -327 81 -327s-26 -4 -65 -4c-73 0 -189 12 -262 85c-112 112 -81 327 -81 327s26 4 65 4c73 0 189 -12 262 -85zM17 383c-2 -19 -5 -60 0 -107c1 -8 2 -16 3 -23l127 127c-25 3 -51 5 -78 5v0v0c-22 0 -41 -1 -52 -2zM96 80c30 -30 72 -53 124 -66
-c10 -3 20 -5 31 -7l142 142c-4 22 -10 44 -17 63c-14 37 -32 68 -56 92c-30 30 -72 53 -124 66c-10 3 -20 5 -31 7l-142 -142c4 -22 10 -44 17 -63c14 -37 32 -68 56 -92zM399 1c2 19 5 60 0 107c-1 8 -2 16 -3 23l-127 -127c25 -3 51 -5 78 -5c22 0 41 1 52 2zM259 130
-l-28 -29l-12 12l29 28l-23 23l-28 -29l-12 12l29 28l-23 23l-28 -29l-12 12l29 28l-23 23l-28 -29l-12 12l29 28l-22 23l-29 -29l-11 12l67 67l12 -11l-29 -29l23 -22l28 29l12 -12l-29 -28l23 -23l28 29l12 -12l-29 -28l23 -23l28 29l12 -12l-29 -28l22 -23l29 29l12 -12
-l-29 -28l22 -23l29 29l11 -12l-67 -67l-12 11l29 29z" />
- <glyph glyph-name="ion-ios-americanfootball" unicode="&#xf3cc;" horiz-adv-x="416"
-d="M331 315c112 -112 81 -327 81 -327s-26 -4 -65 -4c-73 0 -189 12 -262 85c-112 112 -81 327 -81 327s26 4 65 4c73 0 189 -12 262 -85zM20 253l3 -18l142 142l-18 3zM219 113l12 -12l28 29l23 -22l-29 -29l12 -11l67 67l-11 12l-29 -29l-22 23l29 28l-12 12l-28 -29
-l-23 23l29 28l-12 12l-28 -29l-23 23l29 28l-12 12l-28 -29l-23 23l29 28l-12 12l-28 -29l-23 22l29 29l-12 11l-67 -67l11 -12l29 29l22 -23l-29 -28l12 -12l28 29l23 -23l-29 -28l12 -12l28 29l23 -23l-29 -28l12 -12l28 29l23 -23zM269 4l127 127l-3 18l-142 -142z" />
- <glyph glyph-name="ion-ios-analytics-outline" unicode="&#xf3cd;"
-d="M224 400c-28 0 -55 -5 -81 -16c-25 -10 -47 -26 -66 -45s-35 -41 -45 -66c-11 -26 -16 -53 -16 -81s5 -55 16 -81c10 -25 26 -47 45 -66s41 -35 66 -45c26 -11 53 -16 81 -16s55 5 81 16c25 10 47 26 66 45s35 41 45 66c11 26 16 53 16 81s-5 55 -16 81
-c-10 25 -26 47 -45 66s-41 35 -66 45c-26 11 -53 16 -81 16zM224 416v0c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM76 128c-25 0 -41 18 -42 19c-3 3 -2 9 1 12s8 2 11 -1c1 -1 15 -17 36 -14c12 2 27 26 38 42c4 6 9 12 12 16
-c17 21 34 23 45 21c24 -3 45 -28 54 -50c7 -18 18 -28 32 -29c15 -1 31 11 43 30c1 2 3 4 4 7c9 17 24 43 52 43c31 0 52 -35 53 -36c2 -4 1 -9 -3 -11s-9 -1 -11 3c0 0 -5 8 -12 15c-6 6 -16 13 -27 13c-18 0 -29 -19 -38 -35c-1 -3 -3 -5 -4 -7c-15 -25 -36 -40 -58 -38
-c-20 1 -36 15 -46 39s-28 39 -41 41c-11 1 -21 -4 -31 -16c-3 -4 -6 -9 -10 -15c-14 -20 -31 -45 -50 -48c-3 0 -5 -1 -8 -1z" />
- <glyph glyph-name="ion-ios-analytics" unicode="&#xf3ce;"
-d="M224 416c124 0 224 -100 224 -224c0 -13 -1 -25 -3 -37c-1 -6 -2 -12 -3 -17c-24 -98 -113 -170 -218 -170c-122 0 -221 98 -224 219v5c0 9 1 17 2 26c13 111 107 198 222 198zM431 168c1 8 1 16 1 24c0 28 -5 55 -16 81c-10 25 -26 47 -45 66s-41 35 -66 45
-c-26 11 -53 16 -81 16s-55 -5 -81 -16c-25 -10 -47 -26 -66 -45s-35 -41 -45 -66c-11 -26 -16 -53 -16 -81v0c14 -21 29 -34 29 -34h1v-1c1 -1 15 -16 36 -13c12 2 27 26 38 42c4 6 9 12 12 16c17 21 34 23 45 21c24 -3 45 -27 54 -50c7 -18 18 -28 32 -29c15 -1 31 9 43 29
-c1 2 3 4 4 7c9 17 24 44 52 44c31 0 52 -35 53 -36c3 -4 9 -12 16 -20z" />
- <glyph glyph-name="ion-ios-arrow-back" unicode="&#xf3cf;" horiz-adv-x="192"
-d="M192 320l-127 -128l127 -128l-32 -32l-160 160v0v0l160 160z" />
- <glyph glyph-name="ion-ios-arrow-down" unicode="&#xf3d0;" horiz-adv-x="320"
-d="M301 288l19 -21l-160 -171l-160 171l19 21l141 -150z" />
- <glyph glyph-name="ion-ios-arrow-forward" unicode="&#xf3d1;" horiz-adv-x="192"
-d="M0 320l32 32l160 -160v0v0l-160 -160l-32 32l127 128z" />
- <glyph glyph-name="ion-ios-arrow-left" unicode="&#xf3d2;" horiz-adv-x="192"
-d="M192 333l-150 -141l150 -141l-21 -19l-171 160l171 160z" />
- <glyph glyph-name="ion-ios-arrow-right" unicode="&#xf3d3;" horiz-adv-x="192"
-d="M0 333l21 19l171 -160l-171 -160l-21 19l150 141z" />
- <glyph glyph-name="ion-ios-arrow-thin-down" unicode="&#xf3d4;" horiz-adv-x="192"
-d="M190 126c2 -2 2 -4 2 -6s0 -4 -2 -6c0 0 -87 -79 -88 -80s-3 -2 -6 -2s-5 1 -6 2s-88 80 -88 80c-3 3 -3 9 0 12s9 3 12 0l74 -67v285c0 4 4 8 8 8s8 -4 8 -8v-285l74 67c3 3 9 3 12 0z" />
- <glyph glyph-name="ion-ios-arrow-thin-left" unicode="&#xf3d5;" horiz-adv-x="320"
-d="M94 98c-2 -2 -4 -2 -6 -2s-4 0 -6 2c0 0 -79 87 -80 88s-2 3 -2 6s1 5 2 6s80 88 80 88c3 3 9 3 12 0s3 -9 0 -12l-67 -74h285c4 0 8 -4 8 -8s-4 -8 -8 -8h-285l67 -74c3 -3 3 -9 0 -12z" />
- <glyph glyph-name="ion-ios-arrow-thin-right" unicode="&#xf3d6;" horiz-adv-x="320"
-d="M226 98c-3 3 -3 9 0 12l67 74h-285c-4 0 -8 4 -8 8s4 8 8 8h285l-67 74c-3 3 -3 9 0 12s9 3 12 0c0 0 79 -87 80 -88s2 -3 2 -6s-1 -5 -2 -6s-80 -88 -80 -88c-2 -2 -4 -2 -6 -2s-4 0 -6 2z" />
- <glyph glyph-name="ion-ios-arrow-thin-up" unicode="&#xf3d7;" horiz-adv-x="192"
-d="M190 258c-3 -3 -9 -3 -12 0l-74 67v-285c0 -4 -4 -8 -8 -8s-8 4 -8 8v285l-74 -67c-3 -3 -9 -3 -12 0s-3 9 0 12c0 0 87 79 88 80s3 2 6 2s5 -1 6 -2s88 -80 88 -80c2 -2 2 -4 2 -6s0 -4 -2 -6z" />
- <glyph glyph-name="ion-ios-arrow-up" unicode="&#xf3d8;" horiz-adv-x="320"
-d="M301 96l-141 150l-141 -150l-19 21l160 171l160 -171z" />
- <glyph glyph-name="ion-ios-at-outline" unicode="&#xf3d9;" horiz-adv-x="255"
-d="M236 127v1h19l-3 -6c-3 -6 -13 -19 -22 -27s-18 -14 -28 -20s-21 -10 -32 -13s-23 -5 -34 -5c-16 0 -33 3 -49 8s-30 13 -43 24c-12 11 -26 29 -34 46c-7 16 -10 33 -10 58c0 18 4 38 11 55c7 16 17 30 29 42s27 21 43 28c15 6 33 9 53 9c16 0 32 -3 46 -8
-c15 -5 28 -12 39 -22s17 -21 24 -35c6 -13 8 -26 8 -44c0 -14 -2 -28 -7 -40s-9 -20 -17 -30c-8 -9 -13 -15 -23 -21c-11 -6 -20 -9 -29 -9c-8 0 -15 2 -20 7c-3 2 -5 6 -6 9c-6 -6 -11 -10 -17 -12c-10 -3 -18 -4 -26 -4s-15 1 -21 4s-12 7 -17 12s-8 11 -11 18
-s-5 14 -5 22c0 12 3 24 7 36v2c4 11 5 16 13 26c8 11 17 19 28 26s24 11 38 11c12 0 21 -3 31 -9c7 -4 12 -10 16 -16l6 17h18l-38 -102c-2 -5 -4 -10 -5 -14s-1 -7 -1 -10c0 -2 1 -4 3 -5s4 -2 8 -2c6 0 11 2 20 7c8 4 12 9 19 17c6 8 10 14 14 25s6 23 6 35
-c0 15 -2 25 -7 36c-6 13 -10 22 -19 30s-20 15 -33 20s-27 7 -42 7c-19 0 -35 -3 -48 -9c-15 -6 -27 -14 -37 -24c-11 -10 -19 -23 -25 -37c-6 -15 -10 -32 -10 -48c0 -22 2 -36 8 -49c6 -15 17 -31 28 -41s24 -18 38 -23s30 -7 46 -7c10 0 20 1 30 4s18 6 27 11
-s17 11 24 18s14 13 19 21zM147 154c4 5 8 12 11 20l21 57c-2 5 -4 10 -7 13c-3 4 -6 6 -10 8c-1 0 -1 1 -2 1c-3 2 -5 3 -9 4c-5 1 -9 2 -13 2c-10 0 -19 -3 -28 -9s-17 -13 -23 -22c-5 -8 -7 -11 -10 -20c0 -1 -1 -3 -1 -4c-4 -11 -5 -20 -5 -30c0 -6 1 -11 3 -16
-s5 -9 8 -13s7 -6 12 -8s9 -3 15 -3c4 0 9 1 14 2c4 1 8 2 12 5s8 7 12 13z" />
- <glyph glyph-name="ion-ios-at" unicode="&#xf3da;" horiz-adv-x="256"
-d="M228 128v0h28c-1 -1 -2 -4 -3 -6c-4 -6 -14 -19 -23 -27s-18 -14 -28 -20s-20 -10 -32 -13c-11 -3 -23 -5 -34 -5c-16 0 -33 3 -49 8s-30 13 -43 24c-12 10 -26 28 -34 46c-7 16 -10 33 -10 58c0 19 4 39 11 55s17 30 29 42s28 21 44 28c15 6 32 9 52 9c16 0 31 -3 46 -8
-s28 -12 39 -22s18 -22 25 -36c6 -14 8 -26 8 -44c0 -14 -2 -28 -7 -40c-4 -11 -9 -20 -17 -30c-7 -9 -14 -16 -24 -22c-12 -6 -21 -9 -30 -9s-16 2 -22 8c-2 1 -3 3 -4 5c-4 -4 -9 -6 -14 -8c-10 -3 -18 -5 -27 -5c-8 0 -16 2 -23 5s-12 7 -17 12s-9 12 -12 19s-4 14 -4 22
-c0 12 2 25 6 37l1 1c4 10 5 17 13 27c8 11 17 20 28 27c12 7 24 10 38 10c12 0 22 -3 33 -9c5 -3 8 -6 12 -10l5 12h25l-39 -104c-2 -5 -3 -9 -4 -13c-1 -3 -1 -7 -1 -9s0 -3 1 -3c0 0 1 -1 5 -1c5 0 11 2 19 7c7 4 10 8 16 16s9 13 13 23s6 20 6 32c0 14 -1 24 -6 34
-c-5 12 -10 21 -18 28c-9 8 -19 14 -31 18s-26 7 -40 7c-18 0 -32 -3 -44 -8c-14 -6 -25 -13 -35 -23s-18 -22 -24 -35c-6 -14 -9 -30 -9 -45c0 -21 3 -34 8 -46c6 -14 16 -30 26 -39s22 -16 35 -21c14 -5 28 -7 43 -7c10 0 20 2 29 4s18 6 26 11s28 20 38 33zM144 157
-c4 5 7 12 10 19l20 55c-1 4 -3 7 -5 9c-3 3 -6 6 -9 8h-1h-1v1c-3 2 -5 2 -8 3c-4 1 -8 1 -12 1c-9 0 -17 -2 -25 -7c-10 -6 -17 -14 -21 -21c-5 -8 -6 -11 -9 -19c0 -1 -1 -2 -1 -3c-3 -10 -6 -19 -6 -28c0 -5 1 -10 3 -14s4 -8 7 -11s7 -6 11 -8s8 -2 13 -2c4 0 8 0 12 1
-v0c4 1 7 2 11 5c3 2 7 5 11 11z" />
- <glyph glyph-name="ion-ios-barcode-outline" unicode="&#xf3db;" horiz-adv-x="416"
-d="M0 64v256h80v-16h-64v-224h64v-16h-80zM336 320h80v-256h-80v16h64v224h-64v16zM64 128v128h16v-128h-16zM336 128v128h16v-128h-16zM272 96v192h16v-192h-16zM128 96v192h16v-192h-16zM199 112v160h16v-160h-16z" />
- <glyph glyph-name="ion-ios-barcode" unicode="&#xf3dc;" horiz-adv-x="416"
-d="M0 320h416v-256h-416v256zM80 128v128h-16v-128h16zM144 96v192h-16v-192h16zM215 112v160h-16v-160h16zM288 96v192h-16v-192h16zM352 128v128h-16v-128h16z" />
- <glyph glyph-name="ion-ios-baseball-outline" unicode="&#xf3dd;" horiz-adv-x="416"
-d="M415 169v-1v0c-11 -97 -90 -174 -187 -183v0h-2c-2 0 -3 -1 -5 -1h-1h-3h-1h-8c-115 0 -208 93 -208 208v8v1v3v1c0 2 1 3 1 5v2v0c9 97 86 176 183 187v0v0c8 1 16 1 24 1c115 0 208 -93 208 -208c0 -7 0 -14 -1 -20v0v-3zM399 192c0 105 -86 191 -191 191
-c-3 0 -5 -1 -8 -1c0 -11 2 -21 4 -31l20 6l5 -15l-21 -7c2 -7 4 -14 7 -21c2 -5 5 -11 8 -16l17 12l9 -13l-19 -13c7 -12 16 -23 26 -33l14 15l12 -12l-15 -15c11 -10 22 -18 34 -25l12 18l14 -9l-12 -17c5 -2 10 -5 15 -7c7 -3 14 -5 22 -7l7 20l15 -5l-6 -19
-c10 -2 20 -4 30 -4c0 3 1 5 1 8zM17 192c0 -105 86 -191 191 -191h4c-1 9 -1 17 -3 26l-22 -7l-5 16l23 7c-2 8 -5 16 -8 24c-2 5 -4 9 -6 14l-20 -13l-9 13l21 14c-7 12 -16 24 -26 35l-17 -17l-11 11l17 17c-10 10 -22 18 -34 25l-14 -21l-14 9l14 20c-5 2 -10 5 -15 7
-c-7 3 -15 6 -23 8l-8 -24l-15 5l7 23c-9 2 -18 2 -27 3v-4zM228 2c88 9 158 78 169 166c-11 1 -23 3 -34 5l-9 -27l-15 5l8 25c-14 4 -28 10 -41 17l-15 -23l-13 9l14 21c-13 8 -26 17 -37 28l-19 -19l-11 11l19 19c-10 11 -19 23 -27 36l-21 -14l-9 13l22 15
-c-7 13 -12 27 -16 41l-25 -8l-5 16l26 8c-2 12 -4 23 -5 35c-88 -11 -157 -81 -166 -169c10 -1 21 -2 31 -4l8 23l15 -5l-7 -22c14 -4 28 -9 42 -16l13 19l14 -9l-13 -18c13 -8 25 -17 36 -28l17 17l11 -11l-17 -17c11 -12 20 -24 28 -37l19 13l9 -14l-20 -13
-c7 -14 12 -28 16 -42l23 7l5 -15l-24 -8c2 -10 3 -20 4 -30z" />
- <glyph glyph-name="ion-ios-baseball" unicode="&#xf3de;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208c0 -8 0 -16 -1 -24v0v0c-12 -104 -100 -184 -207 -184c-115 0 -208 93 -208 208c0 107 80 195 184 207v0v0c8 1 16 1 24 1zM212 1c5 0 11 0 16 1c-1 10 -2 20 -4 30l24 8l-5 15l-23 -7c-4 14 -9 28 -16 42l20 13l-9 14l-19 -13
-c-8 13 -17 25 -28 37l17 17l-11 11l-17 -17c-11 11 -23 20 -36 28l13 18l-14 9l-13 -19c-14 7 -28 12 -42 16l7 22l-15 5l-8 -23c-10 2 -21 3 -31 4c-1 -5 -1 -11 -1 -16c9 -1 18 -1 27 -3l-7 -23l15 -5l8 24c8 -2 16 -5 23 -8c5 -2 10 -5 15 -7l-14 -20l14 -9l14 21
-c12 -7 24 -15 34 -25l-17 -17l11 -11l17 17c10 -11 19 -23 26 -35l-21 -14l9 -13l20 13c2 -5 4 -9 6 -14c3 -8 6 -16 8 -24l-23 -7l5 -16l22 7c2 -8 2 -17 3 -26zM363 173c11 -2 23 -4 34 -5c1 5 1 11 1 16c-10 1 -20 2 -30 4l6 19l-15 5l-7 -20c-8 2 -15 4 -22 7
-c-5 2 -10 5 -15 7l12 17l-14 9l-12 -18c-12 7 -23 15 -34 25l15 15l-12 12l-15 -15c-10 10 -18 21 -25 33l19 13l-9 13l-17 -12c-3 5 -6 11 -8 16c-3 7 -5 14 -7 21l21 7l-5 15l-20 -6c-2 10 -3 20 -4 31c-5 0 -11 0 -16 -1c1 -12 3 -23 5 -35l-26 -8l5 -16l25 8
-c4 -14 9 -28 16 -41l-22 -15l9 -13l21 14c8 -13 17 -25 27 -36l-19 -19l11 -11l19 19c11 -11 24 -20 37 -28l-14 -21l13 -9l15 23c13 -7 27 -13 41 -17l-8 -25l15 -5z" />
- <glyph glyph-name="ion-ios-basketball-outline" unicode="&#xf3df;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM399 192c0 55 -24 105 -62 140c-14 -34 -31 -65 -52 -95c15 -12 31 -21 49 -29c21 -9 43 -14 65 -16v0zM325 343c-32 25 -73 40 -117 40v0c2 -22 6 -44 15 -65
-c10 -25 26 -47 45 -66c2 -1 2 -3 4 -4c20 29 38 60 52 93c0 1 1 1 1 2zM192 382c-51 -4 -96 -29 -128 -65c64 -28 121 -69 169 -119c11 12 21 24 30 37c-40 37 -67 89 -71 147zM233 174c-15 -16 -31 -30 -48 -44c28 -35 45 -79 47 -127c33 4 63 17 88 35
-c-22 50 -51 95 -87 136zM214 178l8 8l-10 10c-46 46 -99 82 -158 108c-18 -25 -31 -55 -35 -88c62 -3 116 -31 155 -74c14 11 27 23 40 36zM18 200c0 -3 -1 -5 -1 -8c0 -45 16 -87 43 -120c36 16 71 36 102 60l-7 7c-19 19 -41 35 -66 45c-22 9 -46 15 -71 16zM71 59
-c35 -36 83 -58 137 -58c3 0 5 1 8 1c-1 25 -6 48 -16 71c-7 17 -17 33 -28 47c-31 -24 -65 -45 -101 -61zM333 48c37 32 61 77 65 128c-46 3 -89 21 -123 48c-10 -13 -20 -26 -31 -38c36 -41 67 -87 89 -138z" />
- <glyph glyph-name="ion-ios-basketball" unicode="&#xf3e0;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM333 48c-22 51 -53 97 -89 138c11 12 21 25 31 38c34 -27 77 -45 123 -48c0 5 1 11 1 16c-22 2 -44 7 -65 16c-18 8 -34 17 -49 29c21 30 38 61 52 95c-4 4 -8 8 -12 11
-c0 -1 -1 -1 -1 -2c-14 -33 -32 -64 -52 -93c-2 1 -2 2 -4 4c-19 19 -35 41 -45 66c-9 21 -13 43 -15 65c-5 0 -11 -1 -16 -1c4 -58 31 -110 71 -147c-9 -13 -19 -25 -30 -37c-48 50 -105 91 -169 119c-4 -4 -7 -9 -10 -13c59 -26 112 -62 158 -108l10 -10l-8 -8
-c-13 -13 -26 -25 -40 -36c-39 43 -93 71 -155 74c-1 -5 -1 -11 -1 -16c25 -1 49 -7 71 -16c25 -10 47 -26 66 -45l7 -7c-31 -24 -66 -44 -102 -60c4 -4 7 -9 11 -13c36 16 70 37 101 61c11 -14 21 -30 28 -47c10 -23 15 -46 16 -71c5 0 11 0 16 1c-2 48 -19 92 -47 127
-c17 14 33 28 48 44c36 -41 65 -86 87 -136c4 3 9 6 13 10z" />
- <glyph glyph-name="ion-ios-bell-outline" unicode="&#xf3e1;" horiz-adv-x="384"
-d="M318 222c0 -114 28 -126 66 -158h-384c38 32 66 44 66 158c0 98 53 130 102 138v2c0 12 11 22 24 22s24 -10 24 -22v-2c49 -7 102 -40 102 -138zM43 80h298c-25 25 -40 58 -40 142c0 46 -13 80 -37 101c-23 19 -52 23 -72 23s-49 -4 -72 -23c-25 -21 -37 -55 -37 -101
-c0 -51 -5 -85 -17 -110c-6 -13 -14 -23 -23 -32zM192 0c-27 0 -49 20 -52 43h104c-3 -23 -25 -43 -52 -43z" />
- <glyph glyph-name="ion-ios-bell" unicode="&#xf3e2;" horiz-adv-x="384"
-d="M318 222c0 -114 28 -126 66 -158h-384c38 32 66 44 66 158c0 98 53 130 102 138v2c0 12 11 22 24 22s24 -10 24 -22v-2c49 -7 102 -40 102 -138zM192 0c-27 0 -49 20 -52 43h104c-3 -23 -25 -43 -52 -43z" />
- <glyph glyph-name="ion-ios-body-outline" unicode="&#xf3e3;" horiz-adv-x="384"
-d="M192 400c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM192 416v0c27 0 48 -21 48 -48s-21 -48 -48 -48s-48 21 -48 48s21 48 48 48zM360 304c13 0 24 -11 24 -24s-11 -24 -24 -24h-100c-5 0 -14 -5 -18 -15c-5 -12 -2 -33 1 -51l4 -21v-1v0l32 -172
-c2 -13 -6 -26 -19 -28h-5c-11 0 -22 8 -24 20l-21 120v0s-5 31 -17 31h-2c-12 0 -19 -31 -19 -31v0l-21 -120c-2 -12 -11 -20 -22 -20h-5c-13 2 -21 15 -19 28l32 172v1l4 21c3 18 6 39 1 51c-4 10 -12 15 -18 15h-100c-13 0 -24 11 -24 24s11 24 24 24h336zM24 272
-c-4 0 -8 4 -8 8s4 8 8 8h336c4 0 8 -4 8 -8s-4 -8 -8 -8h-102c-16 0 -26 -15 -30 -24c-5 -13 -6 -32 -1 -61v0v0l3 -19l1 -3l32 -172c0 -3 0 -5 -1 -6s-2 -2 -5 -3h-2c-4 0 -7 2 -8 6l-21 120v0c0 2 -2 10 -5 19c-2 6 -5 11 -8 15c-7 9 -14 11 -20 11h-2
-c-5 0 -13 -2 -20 -11c-3 -4 -6 -9 -8 -15c-4 -9 -6 -17 -6 -18v-1l-21 -120c-1 -4 -3 -6 -7 -6h-2c-3 0 -4 2 -5 3s-2 3 -1 6l32 172v0v1l4 21v0v0c5 29 5 48 0 61c-4 9 -14 24 -32 24z" />
- <glyph glyph-name="ion-ios-body" unicode="&#xf3e4;" horiz-adv-x="384"
-d="M144 368c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM360 304c7 0 12 -2 17 -7s7 -10 7 -17s-2 -12 -7 -17s-10 -7 -17 -7h-98c-8 -2 -15 -6 -18 -14c-4 -9 -3 -27 1 -52l4 -21v-1v0l30 -172c1 -7 0 -13 -4 -18s-8 -9 -15 -10s-13 0 -18 4
-s-9 9 -10 16l-21 120v-1l-2 9c-1 5 -3 11 -6 16s-6 8 -10 8h-2c-8 0 -14 -11 -18 -33v1l-21 -120c-1 -7 -5 -12 -10 -16s-11 -5 -18 -4s-11 5 -15 10s-5 11 -4 18l30 172v0v1l4 21c4 25 5 43 1 52c-3 8 -10 12 -18 14h-98c-7 0 -12 2 -17 7s-7 10 -7 17s2 12 7 17s10 7 17 7
-h336z" />
- <glyph glyph-name="ion-ios-bolt-outline" unicode="&#xf3e5;" horiz-adv-x="226"
-d="M131 316l-100 -140h65h19l-3 -19l-17 -89l100 140h-65h-19l3 19zM160 384v0l-30 -160h96l-160 -224l30 160h-96z" />
- <glyph glyph-name="ion-ios-bolt" unicode="&#xf3e6;" horiz-adv-x="226"
-d="M160 384v0l-30 -160h96l-160 -224l30 160h-96z" />
- <glyph glyph-name="ion-ios-book-outline" unicode="&#xf3e7;" horiz-adv-x="384"
-d="M284 384c55 0 100 -26 100 -79v-1v-4v-261v-17h-6h-11h-5c-17 30 -44 42 -78 42c-40 0 -74 -28 -82 -64h-20c-8 36 -42 64 -82 64c-34 0 -65 -16 -78 -42h-5h-11h-6v9v264v9v1c0 53 45 79 100 79c41 0 78 -14 92 -44c12 30 51 44 92 44zM184 37v254v13v2
-c-1 43 -39 62 -84 62c-44 0 -81 -19 -84 -61v-1v0v-262h1c19 26 48 36 83 36s66 -17 84 -43zM368 300v14v1c-3 42 -40 53 -84 53c-46 0 -84 -20 -84 -64v-1v-266c18 26 49 43 84 43s66 -10 84 -36v256z" />
- <glyph glyph-name="ion-ios-book" unicode="&#xf3e8;" horiz-adv-x="384"
-d="M100 384c35 0 67 -10 84 -31v-353h-2c-8 36 -42 64 -82 64c-34 0 -65 -16 -78 -42h-5h-11h-6v9v264v9v1c0 53 45 79 100 79zM284 384c55 0 100 -26 100 -79v-1v-4v-261v-17h-6h-11h-5c-17 30 -44 42 -78 42c-40 0 -74 -28 -82 -64h-2v353c17 21 50 31 84 31z" />
- <glyph glyph-name="ion-ios-bookmarks-outline" unicode="&#xf3e9;" horiz-adv-x="418"
-d="M385 384c19 0 33 -13 33 -32v-286c0 -19 -14 -34 -33 -34h-143s-25 -4 -25 -19v-13h-8h-8v13c0 15 -11 19 -25 19h-143c-19 0 -33 15 -33 34v286c0 19 14 32 33 32h150c10 0 20 -5 26 -12v0v0c6 7 16 12 26 12h150zM201 37v309c0 9 -12 22 -25 22h-143
-c-9 0 -16 -7 -16 -16v-286c0 -9 7 -18 16 -18h144c10 0 19 -3 24 -11zM273 368v-100l23 14l9 6l9 -6l23 -14v100h-64zM401 66v286c0 9 -7 16 -16 16h-32v-131l-48 32l-48 -32v131h-15c-13 0 -25 -13 -25 -22v-309c5 9 14 11 24 11h144c9 0 16 9 16 18z" />
- <glyph glyph-name="ion-ios-bookmarks" unicode="&#xf3ea;" horiz-adv-x="418"
-d="M296 283l-23 -15v116h64v-116l-23 15l-9 6zM385 384c19 0 33 -13 33 -32v-286c0 -19 -14 -34 -33 -34h-143s-25 -4 -25 -19v-13h-8h-8v13c0 15 -11 19 -25 19h-143c-19 0 -33 15 -33 34v286c0 19 14 32 33 32h150s18 -8 18 -15v-329l8 -6l8 6v329s10 15 18 15h22v-146
-l48 32l48 -32v146h32z" />
- <glyph glyph-name="ion-ios-box-outline" unicode="&#xf3eb;" horiz-adv-x="320"
-d="M192 208h-1h-63c-9 0 -16 -7 -16 -16s7 -16 16 -16h64c9 0 16 7 16 16s-7 16 -16 16zM192 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32h-64c-18 0 -32 14 -32 32s14 32 32 32h64zM320 336v-80h-16v-208h-288v208h-16v80h320zM288 64v192h-256v-192h256zM304 272v48h-288
-v-48h288z" />
- <glyph glyph-name="ion-ios-box" unicode="&#xf3ec;" horiz-adv-x="320"
-d="M16 48v192h288v-192h-288zM128 208c-9 0 -16 -7 -16 -16s7 -16 16 -16h64c9 0 16 7 16 16s-7 16 -16 16h-64zM0 336h320v-80h-16h-288h-16v80z" />
- <glyph glyph-name="ion-ios-briefcase-outline" unicode="&#xf3ed;" horiz-adv-x="416"
-d="M368 320h48v-320h-416v320h48v16h32v-16h48v30v2c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-2v-30h48v16h32v-16zM144 320v0h128v0v30c0 10 -7 18 -17 18h-97c-11 0 -14 -8 -14 -18v-30zM400 16v224h-384v-224h384zM400 256v48h-32v-16h-32v16h-256v-16h-32v16h-32v-48
-h384z" />
- <glyph glyph-name="ion-ios-briefcase" unicode="&#xf3ee;" horiz-adv-x="416"
-d="M48 320v16h32v-16h-32zM0 0v240h416v-240h-416zM336 320v16h32v-16h-32zM368 320h48v-64h-416v64h48v-32h32v32h48v30v2c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-2v-30h48v-32h32v32zM272 320v30c0 10 -7 18 -17 18h-97c-11 0 -14 -8 -14 -18v-30v0h128v0z" />
- <glyph glyph-name="ion-ios-browsers-outline" unicode="&#xf3ef;" horiz-adv-x="384"
-d="M0 304h304v-304h-304v304zM288 16v272h-272v-272h272zM384 384v-304h-64v16h48v272h-272v-48h-16v64h304z" />
- <glyph glyph-name="ion-ios-browsers" unicode="&#xf3f0;" horiz-adv-x="384"
-d="M0 304h304v-304h-304v304zM80 384h304v-304h-64v240h-240v64z" />
- <glyph glyph-name="ion-ios-calculator-outline" unicode="&#xf3f1;" horiz-adv-x="288"
-d="M32 288v64h224v-64h-224zM48 336v-32h192v32h-192zM256 384c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-224c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h224zM272 32v320c0 9 -7 16 -16 16h-224c-9 0 -16 -7 -16 -16v-320c0 -9 7 -16 16 -16h224c9 0 16 7 16 16z
-M48 208h32h16v-16h-64v64h16v-16v-32zM48 128h32h16v-16h-64v64h16v-16v-32zM48 48h32h16v-16h-64v64h16v-16v-32zM128 208h32h16v-16h-64v64h16v-16v-32zM208 208h32h16v-16h-64v64h16v-16v-32zM128 128h32h16v-16h-64v64h16v-16v-32zM128 48h32h16v-16h-64v64h16v-16v-32z
-M208 48h32h16v-16h-64v144h16v-96v-32z" />
- <glyph glyph-name="ion-ios-calculator" unicode="&#xf3f2;" horiz-adv-x="288"
-d="M256 384c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-224c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h224zM248 168h-48v-128h48v128zM248 248h-48v-48h48v48zM168 88h-48v-48h48v48zM168 168h-48v-48h48v48zM168 248h-48v-48h48v48zM88 88h-48v-48h48v48zM88 168
-h-48v-48h48v48zM88 248h-48v-48h48v48zM40 296h208v48h-208v-48z" />
- <glyph glyph-name="ion-ios-calendar-outline" unicode="&#xf3f3;" horiz-adv-x="384"
-d="M16 336v-64h352v64zM288 352h96v-352h-384v352h96v32h16v-32h160v32h16v-32zM368 16v240h-352v-240h352zM368 272v64h-80v-32h-16v32h-160v-32h-16v32h-80v-64h352z" />
- <glyph glyph-name="ion-ios-calendar" unicode="&#xf3f4;" horiz-adv-x="384"
-d="M0 0v256h384v-256h-384zM384 352v-80h-384v80h96v-48h16v48h160v-48h16v48h96zM96 352v32h16v-32h-16zM272 352v32h16v-32h-16z" />
- <glyph glyph-name="ion-ios-camera-outline" unicode="&#xf3f5;" horiz-adv-x="384"
-d="M354 288c18 0 30 -13 30 -31v-176c0 -18 -12 -33 -30 -33h-320c-18 0 -34 15 -34 33v176c0 18 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM368 81v176c0 9 -5 15 -14 15h-62h-7l-5 3c-3 4 -7 8 -10 11c-12 13 -20 24 -26 30
-c-5 5 -7 4 -7 4h-88s-2 0 -7 -4c-6 -5 -14 -14 -25 -27c-3 -4 -7 -10 -11 -14l-5 -3h-7h-60c-9 0 -18 -7 -18 -15v-176c0 -9 9 -17 18 -17h320c8 0 14 8 14 17zM192 258c47 0 86 -38 86 -85s-39 -85 -86 -85s-86 38 -86 85s39 85 86 85zM192 104c38 0 70 31 70 69
-s-32 69 -70 69s-70 -31 -70 -69s32 -69 70 -69zM288 239v17h17v-17h-17zM160 173c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32z" />
- <glyph glyph-name="ion-ios-camera" unicode="&#xf3f6;" horiz-adv-x="384"
-d="M354 288c18 0 30 -13 30 -31v-176c0 -18 -12 -33 -30 -33h-320c-18 0 -34 15 -34 33v176c0 18 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM192 88c47 0 86 38 86 85s-39 85 -86 85s-86 -38 -86 -85s39 -85 86 -85zM305 239v17h-17v-17h17
-zM192 242c38 0 70 -31 70 -69s-32 -69 -70 -69s-70 31 -70 69s32 69 70 69zM192 141c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-ios-cart-outline" unicode="&#xf3f7;" horiz-adv-x="384"
-d="M96 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM96 16c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM320 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM320 16c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM384 320
-l-16 -128l-271 -48l5 -30c7 -34 21 -34 26 -34h240v-16h-240c-11 0 -21 5 -28 14c-6 8 -11 19 -13 33l-43 234v0c-2 8 -3 12 -7 16c-6 5 -18 7 -37 7v16c23 0 38 -4 47 -11c7 -6 10 -14 12 -21zM355 206l11 99l-304 31l32 -176z" />
- <glyph glyph-name="ion-ios-cart" unicode="&#xf3f8;" horiz-adv-x="384"
-d="M96 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM320 48c13 0 24 -11 24 -24s-11 -24 -24 -24s-24 11 -24 24s11 24 24 24zM384 320l-16 -128l-271 -48l5 -30c7 -34 21 -34 26 -34h240v-16h-240c-11 0 -21 5 -28 14c-6 8 -11 19 -13 33l-43 234v0
-c-2 8 -3 12 -7 16c-6 5 -18 7 -37 7v16c23 0 38 -4 47 -11c7 -6 10 -14 12 -21z" />
- <glyph glyph-name="ion-ios-chatboxes-outline" unicode="&#xf3f9;" horiz-adv-x="416"
-d="M16 384v-192h96v-16h-112v224h288v-112h-16v96h-256zM128 272h288v-224h-48v-64h-13l-64 64h-163v224zM400 64v192h-256v-192h153l55 -55v55h48z" />
- <glyph glyph-name="ion-ios-chatboxes" unicode="&#xf3fa;" horiz-adv-x="416"
-d="M288 400v-112h-176v-112h-112v224h288zM128 272h288v-224h-48v-64h-13l-64 64h-163v224z" />
- <glyph glyph-name="ion-ios-chatbubble-outline" unicode="&#xf3fb;" horiz-adv-x="384"
-d="M192 336c-97 0 -176 -62 -176 -138c0 -26 10 -51 27 -73c0 -1 0 -2 1 -3s2 -1 2 -2c4 -6 6 -13 6 -20c0 -3 1 -3 -13 -47l39 17v0c2 1 10 4 11 4h1v0c5 2 10 3 16 3c5 0 9 -1 14 -2l1 -1h2c19 -6 41 -10 70 -10c48 0 92 15 125 40c32 25 50 58 50 94
-c0 76 -79 138 -176 138zM192 352v0c106 0 192 -69 192 -154s-85 -150 -191 -150c-27 0 -52 3 -75 11h-2v0c-3 1 -6 2 -10 2s-9 -1 -12 -2h1h-1c-1 0 -9 -4 -10 -4l-50 -22l-2 -1h-3h-3c-6 1 -8 6 -7 10v0s17 57 17 58c0 4 -1 8 -3 11v0v0v0l1 -1l-4 4c-19 24 -30 53 -30 84
-c0 85 86 154 192 154z" />
- <glyph glyph-name="ion-ios-chatbubble" unicode="&#xf3fc;" horiz-adv-x="384"
-d="M192 352v0c106 0 192 -69 192 -154s-85 -150 -191 -150c-27 0 -52 3 -75 11h-2v0c-3 1 -6 2 -10 2s-9 -1 -12 -2h1h-1c-1 0 -9 -4 -10 -4l-50 -22l-2 -1h-3h-3c-6 1 -8 6 -7 10v0s17 57 17 58c0 4 -1 8 -3 11v0v0v0l1 -1l-4 4c-19 24 -30 53 -30 84c0 85 86 154 192 154z
-" />
- <glyph glyph-name="ion-ios-checkmark-empty" unicode="&#xf3fd;" horiz-adv-x="207"
-d="M74 118c-2 -2 -6 -4 -9 -4s-7 2 -9 4l-56 56l18 18l47 -47l125 126l17 -18z" />
- <glyph glyph-name="ion-ios-checkmark-outline" unicode="&#xf3fe;" horiz-adv-x="416"
-d="M292 271l18 -18l-134 -135c-2 -2 -6 -4 -9 -4s-7 2 -9 4l-56 56l18 18l47 -47zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191z" />
- <glyph glyph-name="ion-ios-checkmark" unicode="&#xf3ff;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM176 118l134 135l-18 18l-125 -126l-47 47l-18 -18l56 -56c2 -2 6 -4 9 -4s7 2 9 4z" />
- <glyph glyph-name="ion-ios-circle-filled" unicode="&#xf400;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM208 352c88 0 160 -72 160 -160s-72 -160 -160 -160s-160 72 -160 160s72 160 160 160z" />
- <glyph glyph-name="ion-ios-circle-outline" unicode="&#xf401;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191z" />
- <glyph glyph-name="ion-ios-clock-outline" unicode="&#xf402;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM208 192v128h17v-145h-113v17h96z" />
- <glyph glyph-name="ion-ios-clock" unicode="&#xf403;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM225 175v145h-17v-128h-96v-17h113z" />
- <glyph glyph-name="ion-ios-close-empty" unicode="&#xf404;" horiz-adv-x="192"
-d="M180 288l12 -12l-84 -84l84 -84l-12 -12l-84 84l-84 -84l-12 12l84 84l-84 84l12 12l84 -84z" />
- <glyph glyph-name="ion-ios-close-outline" unicode="&#xf405;" horiz-adv-x="416"
-d="M355 339c81 -81 81 -213 0 -294s-213 -81 -294 0s-81 213 0 294s213 81 294 0zM343 57c74 74 74 196 0 270s-196 74 -270 0s-74 -196 0 -270s196 -74 270 0zM292 288l12 -12l-84 -84l84 -84l-12 -12l-84 84l-84 -84l-12 12l84 84l-84 84l12 12l84 -84z" />
- <glyph glyph-name="ion-ios-close" unicode="&#xf406;" horiz-adv-x="416"
-d="M355 339c81 -81 81 -213 0 -294s-213 -81 -294 0s-81 213 0 294s213 81 294 0zM304 108l-84 84l84 84l-12 12l-84 -84l-84 84l-12 -12l84 -84l-84 -84l12 -12l84 84l84 -84z" />
- <glyph glyph-name="ion-ios-cloud-download-outline" unicode="&#xf407;"
-d="M161 67l55 -54v242h16v-242l55 54l12 -12l-75 -73l-74 73zM367 284c45 0 81 -37 81 -82s-37 -82 -82 -82v0h-101v16h97h4c37 0 66 30 66 66s-29 67 -66 67h-15v20c0 55 -46 97 -101 97c-38 0 -73 -22 -90 -56l-6 -14l-14 7c-6 3 -13 5 -20 5c-22 0 -40 -18 -44 -39l-1 -9
-l-9 -3c-30 -10 -50 -36 -50 -67c0 -40 33 -74 74 -74h91v-16h-91c-50 0 -90 40 -90 89c0 39 26 71 61 83c5 28 29 51 59 51c10 0 18 -2 26 -6c19 39 59 65 105 65c64 0 117 -51 117 -115c0 -1 -1 -2 -1 -3z" />
- <glyph glyph-name="ion-ios-cloud-download" unicode="&#xf408;"
-d="M216 13v107h16v-107l55 54l12 -12l-75 -73l-74 73l11 12zM367 284c45 0 81 -37 81 -82s-37 -82 -82 -82h-134v135h-16v-135h-35h-21h-70c-50 0 -90 40 -90 89c0 39 26 71 61 83c5 28 29 51 59 51c10 0 18 -2 26 -6c19 39 59 65 105 65c64 0 117 -51 117 -115
-c0 -1 -1 -2 -1 -3z" />
- <glyph glyph-name="ion-ios-cloud-outline" unicode="&#xf409;"
-d="M367 215c45 0 81 -37 81 -83c0 -45 -37 -84 -82 -84h-276c-50 0 -90 42 -90 92c0 40 26 71 61 83c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 67 105 67c64 0 117 -53 117 -117c0 -1 -1 -3 -1 -4zM366 64c37 0 66 32 66 69s-29 67 -66 67h-15v21c0 56 -46 99 -101 99
-c-38 0 -73 -23 -90 -58l-6 -14l-14 7c-6 3 -13 5 -20 5c-22 0 -40 -17 -44 -39l-1 -9l-9 -3c-30 -10 -50 -37 -50 -69c0 -41 33 -76 74 -76h272h4z" />
- <glyph glyph-name="ion-ios-cloud-upload-outline" unicode="&#xf40a;"
-d="M161 188l-11 11l74 75l75 -75l-12 -11l-55 54v-242h-16v242zM367 264c45 0 81 -39 81 -85s-37 -83 -82 -83v0h-101v16h97h4c37 0 66 30 66 67s-29 70 -66 70l-15 1v20c0 56 -46 99 -101 99c-38 0 -73 -23 -90 -58l-6 -13l-14 6c-6 3 -13 5 -20 5c-22 0 -40 -17 -44 -39
-l-1 -9l-9 -3c-30 -10 -50 -39 -50 -71c0 -41 33 -75 74 -75h91v-16h-91c-50 0 -90 40 -90 90c0 40 26 74 61 86c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 66 105 66c64 0 117 -52 117 -116c0 -1 -1 -3 -1 -4z" />
- <glyph glyph-name="ion-ios-cloud-upload" unicode="&#xf40b;"
-d="M216 0v96h16v-96h-16zM367 264c45 0 81 -39 81 -85s-37 -83 -82 -83h-134v146l55 -54l12 11l-75 75l-74 -75l11 -11l55 54v-146h-35h-31h-60c-50 0 -90 40 -90 90c0 40 26 74 61 86c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 66 105 66c64 0 117 -52 117 -116
-c0 -1 -1 -3 -1 -4z" />
- <glyph glyph-name="ion-ios-cloud" unicode="&#xf40c;"
-d="M367 215c45 0 81 -37 81 -83c0 -45 -37 -84 -82 -84h-276c-50 0 -90 42 -90 92c0 40 26 71 61 83c5 28 29 52 59 52c10 0 18 -2 26 -6c19 39 59 67 105 67c64 0 117 -53 117 -117c0 -1 -1 -3 -1 -4z" />
- <glyph glyph-name="ion-ios-cloudy-night-outline" unicode="&#xf40d;" horiz-adv-x="384"
-d="M125 224c-34 0 -63 -28 -63 -62v-12s1 -10 1 -10c-5 0 -12 -1 -14 -1c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h157c27 0 49 22 49 49s-22 50 -49 50c-2 0 -4 -1 -6 -1l-14 -2l-3 14c-3 14 -11 26 -22 35s-25 14 -39 14zM125 240v0c37 0 68 -26 76 -61
-h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78zM361 142c8 0 15 2 23 4c-4 -7 -9 -14 -14 -20c-21 -24 -50 -41 -84 -45c4 6 6 12 8 19c19 4 36 13 50 25c-18 1 -35 6 -50 13c-23 11 -42 29 -56 51
-c-14 21 -22 48 -22 75c0 15 2 30 7 44c-24 -12 -43 -33 -53 -59c-5 2 -12 4 -18 5c14 36 45 65 82 77c8 2 16 4 24 5c-5 -6 -9 -13 -12 -20c-8 -16 -12 -34 -12 -52c0 -32 12 -63 35 -86s54 -36 86 -36h6z" />
- <glyph glyph-name="ion-ios-cloudy-night" unicode="&#xf40e;" horiz-adv-x="384"
-d="M361 142c8 0 15 2 23 4c-4 -7 -9 -15 -14 -21c-21 -24 -50 -40 -84 -44h-3c4 10 7 21 7 32c0 22 -9 43 -24 58c-14 15 -33 23 -53 24c-6 16 -16 29 -29 40c-10 8 -20 13 -32 17v2c14 36 45 65 82 77c8 2 16 4 24 5c-5 -6 -9 -13 -12 -20c-8 -16 -12 -34 -12 -52
-c0 -32 12 -63 35 -86s54 -36 86 -36h6zM125 239v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v7c0 43 35 79 78 79z" />
- <glyph glyph-name="ion-ios-cloudy-outline" unicode="&#xf40f;" horiz-adv-x="274"
-d="M125 272c-34 0 -63 -28 -63 -62v-12s1 -10 1 -10c-6 0 -12 -1 -14 -1c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h157c27 0 49 22 49 49s-22 50 -49 50c-2 0 -4 -1 -6 -1l-14 -2l-3 14c-3 14 -11 26 -22 35s-25 14 -39 14zM125 288v0c37 0 68 -26 76 -61
-h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78z" />
- <glyph glyph-name="ion-ios-cloudy" unicode="&#xf410;" horiz-adv-x="274"
-d="M125 288v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78z" />
- <glyph glyph-name="ion-ios-cog-outline" unicode="&#xf411;" horiz-adv-x="384"
-d="M384 175l-33 -8l-3 -14l27 -20l-12 -30l-34 5l-8 -11l17 -29l-23 -23l-29 17l-10 -7l5 -34l-29 -12l-21 27l-14 -3l-8 -33h-32l-9 33l-13 3l-21 -28l-29 12l4 34l-11 8l-30 -19l-23 23l18 31l-7 11l-35 -5l-12 29l28 22l-2 12l-35 9v32l35 9l2 12l-29 22l12 30l36 -5
-l7 10l-19 32l22 22l32 -19l11 8l-4 35l29 13l22 -29l12 2l9 35h32l9 -35l12 -2l22 28l29 -12l-5 -35l11 -8l30 18l22 -23l-17 -30l7 -10l35 5l12 -30l-28 -21l3 -13l33 -9v-32zM356 127l-26 20l6 33l32 8v7l-32 8l-6 33l26 19l-3 7l-32 -5l-19 27l17 28l-5 6l-28 -17l-28 18
-l5 34l-6 2l-20 -26l-32 6l-8 33h-7l-9 -33l-32 -6l-20 27l-7 -3l5 -34l-28 -18l-9 6l-21 12l-5 -5l18 -30l-18 -27l-33 5l-3 -7l27 -20l-6 -32l-33 -8v-7l33 -9l6 -32l-27 -20l3 -6l33 4l18 -27l-17 -29l5 -6l29 18l28 -18l-5 -33l7 -3l19 27l33 -7l8 -31h8l7 31l33 7
-l20 -26l7 3l-5 32l26 18l28 -16l5 5l-16 27l19 28l32 -4zM192 320c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM80 192c0 -7 1 -15 2 -22l104 28l28 104c-7 1 -15 2 -22 2c-30 0 -58 -12 -79 -33s-33 -49 -33 -79zM192 80c27 0 53 10 73 27
-l-75 75l-104 -28c6 -15 15 -29 27 -41c21 -21 49 -33 79 -33zM276 118c18 20 28 47 28 74c0 30 -12 58 -33 79c-12 12 -26 22 -42 27l-28 -105z" />
- <glyph glyph-name="ion-ios-cog" unicode="&#xf412;" horiz-adv-x="384"
-d="M229 298c16 -5 30 -15 42 -27c21 -21 33 -49 33 -79c0 -27 -10 -54 -28 -74l-75 75zM214 302l-28 -104l-104 -28c-1 7 -2 15 -2 22c0 30 12 58 33 79s49 33 79 33c7 0 15 -1 22 -2zM86 154l104 28l75 -75c-20 -17 -46 -27 -73 -27c-30 0 -58 12 -79 33
-c-12 12 -21 26 -27 41zM384 175l-33 -8l-3 -14l27 -20l-12 -30l-34 5l-8 -11l17 -29l-23 -23l-29 17l-10 -7l5 -34l-29 -12l-21 27l-14 -3l-8 -33h-32l-9 33l-13 3l-21 -28l-29 12l4 34l-11 8l-30 -19l-23 23l18 31l-7 11l-35 -5l-12 29l28 22l-2 12l-35 9v32l35 9l2 12
-l-29 22l12 30l36 -5l7 10l-19 32l22 22l32 -19l11 8l-4 35l29 13l22 -29l12 2l9 35h32l9 -35l12 -2l22 28l29 -12l-5 -35l11 -8l30 18l22 -23l-17 -30l7 -10l35 5l12 -30l-28 -21l3 -13l33 -9v-32zM192 64c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128
-s57 -128 128 -128z" />
- <glyph glyph-name="ion-ios-color-filter-outline" unicode="&#xf413;" horiz-adv-x="384"
-d="M302 236c47 -13 82 -57 82 -108c0 -62 -50 -112 -112 -112c-31 0 -60 13 -80 34c-20 -21 -49 -34 -80 -34c-62 0 -112 50 -112 112c0 51 35 95 82 108c-1 7 -2 13 -2 20c0 62 50 112 112 112s112 -50 112 -112c0 -7 -1 -13 -2 -20zM96 256c0 -6 0 -12 1 -17
-c5 1 10 1 15 1c31 0 60 -13 80 -34c20 21 49 34 80 34c5 0 10 0 15 -1c1 5 1 11 1 17c0 53 -43 96 -96 96s-96 -43 -96 -96zM208 128c0 6 0 12 -1 17c-5 -1 -10 -1 -15 -1s-10 0 -15 1c-1 -5 -1 -11 -1 -17c0 -20 6 -38 16 -53c10 15 16 33 16 53zM192 160c3 0 7 1 10 1
-c-3 7 -6 14 -10 20c-4 -6 -7 -13 -10 -20c3 0 7 -1 10 -1zM166 164c4 11 9 21 16 30c-18 18 -43 30 -70 30c-3 0 -7 -1 -10 -1c10 -29 34 -51 64 -59zM202 194c7 -9 12 -19 16 -30c30 8 54 30 64 59c-3 0 -7 1 -10 1c-27 0 -52 -12 -70 -30zM112 32c27 0 52 12 70 30
-c-14 19 -22 41 -22 66c0 7 1 13 2 20c-36 10 -64 37 -76 72c-40 -11 -70 -48 -70 -92c0 -53 43 -96 96 -96zM272 32c53 0 96 43 96 96c0 44 -30 81 -70 92c-12 -35 -40 -62 -76 -72c1 -7 2 -13 2 -20c0 -25 -8 -47 -22 -66c18 -18 43 -30 70 -30z" />
- <glyph glyph-name="ion-ios-color-filter" unicode="&#xf414;" horiz-adv-x="384"
-d="M302 236c47 -13 82 -57 82 -108c0 -62 -50 -112 -112 -112c-31 0 -60 13 -80 34c-20 -21 -49 -34 -80 -34c-62 0 -112 50 -112 112c0 51 35 95 82 108c-1 7 -2 13 -2 20c0 62 50 112 112 112s112 -50 112 -112c0 -7 -1 -13 -2 -20zM192 53l1 -2c3 3 6 7 9 11
-c14 19 22 41 22 66c0 7 -1 13 -2 20c36 10 64 37 76 72c2 5 3 10 4 15c-1 0 -2 1 -3 1v1c-4 1 -8 1 -12 2c-5 1 -10 1 -15 1c-31 0 -60 -13 -80 -34c-20 21 -49 34 -80 34c-5 0 -10 0 -15 -1c-4 -1 -8 -1 -12 -2v-1c-1 0 -2 -1 -3 -1c1 -5 2 -10 4 -15c12 -35 40 -62 76 -72
-c-1 -7 -2 -13 -2 -20c0 -25 8 -47 22 -66c3 -4 6 -8 9 -11zM207 145c1 -5 1 -11 1 -17c0 -20 -6 -38 -16 -53c-10 15 -16 33 -16 53c0 6 0 12 1 17c5 -1 10 -1 15 -1s10 0 15 1zM282 223c-10 -29 -34 -51 -64 -59c-4 11 -9 21 -16 30c18 18 43 30 70 30c3 0 7 -1 10 -1z
-M202 161c-3 0 -7 -1 -10 -1s-7 1 -10 1c3 7 6 14 10 20c4 -6 7 -13 10 -20zM112 224c27 0 52 -12 70 -30c-7 -9 -12 -19 -16 -30c-30 8 -54 30 -64 59c3 0 7 1 10 1z" />
- <glyph glyph-name="ion-ios-color-wand-outline" unicode="&#xf415;" horiz-adv-x="384"
-d="M128 298l256 -256l-34 -34l-256 256zM149 232l201 -201l11 11l-201 202zM120 344v40h16v-40h-16zM120 140v40h16v-40h-16zM216 256v16h40v-16h-40zM0 256v16h40v-16h-40zM47 354l29 -29l-12 -11l-28 28zM76 198l-29 -28l-11 11l28 28zM220 342l-28 -28l-12 11l29 29z" />
- <glyph glyph-name="ion-ios-color-wand" unicode="&#xf416;" horiz-adv-x="396"
-d="M140 289l256 -257l-34 -34l-256 257zM124 322v64h32v-64h-32zM124 118v64h32v-64h-32zM216 238v32h64v-32h-64zM246 336l-45 -45l-23 22l45 46zM34 336l23 23l45 -46l-23 -22zM34 169l45 45l23 -22l-45 -46zM0 238v32h64v-32h-64z" />
- <glyph glyph-name="ion-ios-compose-outline" unicode="&#xf417;" horiz-adv-x="384"
-d="M304 32v208l16 16v-240h-320v304h256l-16 -16h-224v-272h288zM174 164l171 171l11 -11l-180 -180h-32v32l180 180l11 -11l-171 -171zM380 368c2 -3 4 -6 4 -10s-2 -7 -4 -10l-12 -12l-21 21l-11 11v0l12 12c3 2 6 4 10 4s7 -2 10 -4z" />
- <glyph glyph-name="ion-ios-compose" unicode="&#xf418;" horiz-adv-x="384"
-d="M192 128l128 128v-240h-320v304h256l-128 -128v-64h64zM324 356l32 -32l-180 -180h-32v32zM380 368c2 -3 4 -6 4 -10s-2 -7 -4 -10l-12 -12l-21 21l-11 11v0l12 12c3 2 6 4 10 4s7 -2 10 -4z" />
- <glyph glyph-name="ion-ios-contact-outline" unicode="&#xf419;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 383c-105 0 -191 -86 -191 -191c0 -47 17 -89 45 -122c18 8 62 24 90 32c2 1 3 0 3 10c0 11 -1 18 -4 24c-4 8 -7 20 -9 31c-4 5 -10 15 -14 33c-3 16 -1 22 1 28v2
-c1 4 0 23 -3 38c-2 10 1 34 15 52c9 12 27 26 58 28h18c32 -2 49 -16 58 -28c14 -18 17 -42 15 -52c-3 -15 -4 -34 -3 -38c0 0 1 -1 1 -2c2 -6 3 -12 0 -28c-4 -18 -10 -27 -14 -32c-2 -11 -5 -24 -9 -32c-3 -7 -6 -15 -6 -23c0 -10 0 -10 2 -11c27 -8 73 -24 93 -32
-c28 33 45 76 45 122c0 105 -86 191 -191 191z" />
- <glyph glyph-name="ion-ios-contact" unicode="&#xf41a;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c59 0 111 27 146 69c-20 8 -66 24 -93 32c-2 1 -3 1 -3 11c0 8 4 16 7 23c4 8 7 21 9 32c4 5 10 14 14 32c3 16 2 22 0 28c0 0 -1 1 -1 2c-1 4 0 23 3 38c2 10 -1 34 -15 52
-c-9 12 -26 26 -58 28h-18c-31 -2 -49 -16 -58 -28c-14 -18 -17 -42 -15 -52c3 -15 4 -34 3 -38v-2c-2 -6 -4 -12 -1 -28c4 -18 10 -28 14 -33c2 -11 5 -23 9 -31c3 -6 4 -13 4 -24c0 -10 -1 -9 -3 -10c-28 -8 -72 -24 -90 -32c35 -42 87 -69 146 -69z" />
- <glyph glyph-name="ion-ios-copy-outline" unicode="&#xf41b;" horiz-adv-x="288"
-d="M192 352v-64h64v-16h-80v80h16zM213 384l75 -75v-261h-48v-48h-240v336h48v48h165zM224 16v32h-176v272h-32v-304h208zM272 64v238l-65 66h-143v-304h208z" />
- <glyph glyph-name="ion-ios-copy" unicode="&#xf41c;" horiz-adv-x="288"
-d="M32 32h16h192v-32h-240v336h32v-288v-16zM213 384l75 -75v-261h-48h-192v288v48h165zM256 272v16h-64v64h-16v-80h80z" />
- <glyph glyph-name="ion-ios-crop-strong" unicode="&#xf41d;" horiz-adv-x="384"
-d="M64 336v48h32v-48h-32zM96 96h176v-32h-208v208h32v-176zM336 64v32h48v-32h-48zM0 320h320v-320h-32v288h-288v32z" />
- <glyph glyph-name="ion-ios-crop" unicode="&#xf41e;" horiz-adv-x="384"
-d="M64 336v48h16v-48h-16zM80 80h208v-16h-224v224h16v-208zM336 64v16h48v-16h-48zM0 320h320v-320h-16v304h-304v16z" />
- <glyph glyph-name="ion-ios-download-outline" unicode="&#xf41f;" horiz-adv-x="320"
-d="M192 304h128v-304h-320v304h128v-16h-112v-272h288v272h-112v16zM97 196l55 -55v243h16v-243l55 55l11 -12l-74 -74l-74 74z" />
- <glyph glyph-name="ion-ios-download" unicode="&#xf420;" horiz-adv-x="320"
-d="M168 304h152v-304h-320v304h152v-163l-55 55l-11 -12l74 -74l74 74l-11 12l-55 -55v163zM152 304v80h16v-80h-16z" />
- <glyph glyph-name="ion-ios-drag" unicode="&#xf421;" horiz-adv-x="352"
-d="M0 128v16h352v-16h-352zM0 184v16h352v-16h-352zM0 240v16h352v-16h-352z" />
- <glyph glyph-name="ion-ios-email-outline" unicode="&#xf422;" horiz-adv-x="384"
-d="M0 320h384v-256h-384v256zM192 180l163 124h-326zM16 80h352v214l-115 -88l68 -77l-2 -2l-79 70l-48 -37l-48 37l-79 -70l-2 2l68 77l-115 88v-214z" />
- <glyph glyph-name="ion-ios-email" unicode="&#xf423;" horiz-adv-x="384"
-d="M384 64h-384v242l131 -100l-68 -77l2 -2l79 70l48 -37l48 37l79 -70l2 2l-68 77l131 100v-242zM376 320l-184 -140l-184 140h368z" />
- <glyph glyph-name="ion-ios-eye-outline" unicode="&#xf424;" horiz-adv-x="384"
-d="M383 192l1 -1l-6 -6c-21 -21 -47 -48 -78 -69c-36 -24 -72 -36 -108 -36c-83 0 -130 49 -185 105l-7 7l1 1c39 40 67 64 94 81c32 20 63 30 97 30c83 0 146 -60 191 -112zM192 288c-62 0 -111 -36 -170 -96c24 -24 48 -50 76 -68c30 -20 60 -28 94 -28
-c75 0 133 56 171 95c-26 29 -50 50 -74 66c-32 21 -64 31 -97 31zM192 112c-44 0 -80 36 -80 80s36 80 80 80s80 -36 80 -80s-36 -80 -80 -80zM192 256c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM224 192h16v0c0 -26 -22 -48 -48 -48s-48 21 -48 48
-s22 48 48 48v-16c-16 0 -32 -13 -32 -31s15 -33 32 -33s32 14 32 32v0z" />
- <glyph glyph-name="ion-ios-eye" unicode="&#xf425;" horiz-adv-x="384"
-d="M383 192l1 -1l-6 -6c-21 -21 -47 -48 -78 -69c-36 -24 -72 -36 -108 -36c-83 0 -130 49 -185 105l-7 7l1 1c39 40 67 64 94 81c32 20 63 30 97 30c83 0 146 -60 191 -112zM192 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM186 221
-c0 -19 16 -35 35 -35c7 0 14 2 19 6v0c0 -27 -22 -48 -48 -48s-48 21 -48 48s22 48 48 48c-4 -5 -6 -12 -6 -19z" />
- <glyph glyph-name="ion-ios-fastforward-outline" unicode="&#xf426;"
-d="M16 293v-202l184 101zM240 292v0v-78v-27v-95l176 100zM224 320v0l224 -128l-224 -128v123l-224 -123v256l224 -123v123z" />
- <glyph glyph-name="ion-ios-fastforward" unicode="&#xf427;"
-d="M224 320v0l224 -128l-224 -128v123l-224 -123v256l224 -123v123z" />
- <glyph glyph-name="ion-ios-filing-outline" unicode="&#xf428;" horiz-adv-x="352"
-d="M288 320l64 -96v-160h-176h-176v160l64 96h224zM333 224l-45 68v-68h45zM80 304v-80h48c0 -26 22 -48 48 -48s48 22 48 48h48v80h-192zM64 292l-45 -68h45v68zM336 80v128h-98c-7 -28 -32 -48 -62 -48s-55 20 -62 48h-98v-128h160h160z" />
- <glyph glyph-name="ion-ios-filing" unicode="&#xf429;" horiz-adv-x="352"
-d="M176 160c30 0 55 20 62 48h114v-144h-176h-176v144h114c7 -28 32 -48 62 -48zM64 224h-7h-57l64 96v0v-80h16v80h192v-80h16v80v0l64 -96h-56h-8h-16h-8h-40c0 -26 -22 -48 -48 -48s-48 22 -48 48h-39h-9h-16z" />
- <glyph glyph-name="ion-ios-film-outline" unicode="&#xf42a;" horiz-adv-x="400"
-d="M0 360h400v-336h-400v336zM72 40v48h-56v-48h56zM72 104v48h-56v-48h56zM72 168v48h-56v-48h56zM72 232v48h-56v-48h56zM72 296v48h-56v-48h56zM312 40v144h-224v-144h224zM312 200v144h-224v-144h224zM384 40v48h-56v-48h56zM384 104v48h-56v-48h56zM384 168v48h-56v-48
-h56zM384 232v48h-56v-48h56zM384 296v48h-56v-48h56z" />
- <glyph glyph-name="ion-ios-film" unicode="&#xf42b;" horiz-adv-x="400"
-d="M0 360h400v-336h-400v336zM72 40v48h-56v-48h56zM72 104v48h-56v-48h56zM72 168v48h-56v-48h56zM72 232v48h-56v-48h56zM72 296v48h-56v-48h56zM312 184v16h-224v-16h224zM384 40v48h-56v-48h56zM384 104v48h-56v-48h56zM384 168v48h-56v-48h56zM384 232v48h-56v-48h56z
-M384 296v48h-56v-48h56z" />
- <glyph glyph-name="ion-ios-flag-outline" unicode="&#xf42c;" horiz-adv-x="256"
-d="M240 336c6 1 11 1 16 2v-16v-157c-5 -1 -10 -1 -16 -2c-11 -1 -24 -3 -39 -3c-25 0 -47 4 -69 9s-42 13 -64 13c-30 0 -46 -5 -52 -7v-143h-16v142v162v2l3 3c2 1 18 11 65 11c24 0 45 -4 67 -9c21 -4 42 -11 65 -11c15 0 29 3 40 4zM240 179v0v141c-11 -1 -25 -4 -40 -4
-c-25 0 -46 6 -68 11s-42 9 -64 9c-30 0 -46 -5 -52 -7v-137c10 3 26 6 52 6c24 0 45 -8 67 -13c21 -4 43 -9 66 -9c15 0 28 2 39 3z" />
- <glyph glyph-name="ion-ios-flag" unicode="&#xf42d;" horiz-adv-x="256"
-d="M240 336c6 1 11 1 16 2v-16v-157c-5 -1 -10 -1 -16 -2c-11 -1 -24 -3 -39 -3c-25 0 -47 4 -69 9s-42 13 -64 13c-30 0 -46 -5 -52 -7v-143h-16v142v162v2l3 3c2 1 18 11 65 11c24 0 45 -4 67 -9c21 -4 42 -11 65 -11c15 0 29 3 40 4z" />
- <glyph glyph-name="ion-ios-flame-outline" unicode="&#xf42e;" horiz-adv-x="256"
-d="M96 416c87 -64 170 -179 159 -288c-13 -134 -104 -160 -127 -160s-127 40 -128 160c-1 146 122 143 96 288zM128 -24c0 0 40 36 40 80s-40 80 -40 80s-41 -36 -41 -80s41 -80 41 -80zM239 130c5 47 -10 99 -41 151c-22 36 -50 70 -83 99c0 -57 -24 -91 -49 -123
-c-26 -34 -50 -65 -50 -129c0 -25 5 -48 15 -68c8 -17 20 -32 35 -45c8 -7 16 -12 23 -16c-9 16 -18 35 -18 57c0 51 44 90 46 92l11 9l11 -9c2 -2 45 -41 45 -92c0 -23 -9 -44 -19 -60c7 4 13 8 20 14c14 12 25 27 34 44c11 21 17 47 20 76z" />
- <glyph glyph-name="ion-ios-flame" unicode="&#xf42f;" horiz-adv-x="256"
-d="M96 416c87 -64 170 -179 159 -288c-13 -134 -104 -160 -127 -160s-127 40 -128 160c-1 146 122 143 96 288zM128 -24c0 0 40 36 40 80s-40 80 -40 80s-41 -36 -41 -80s41 -80 41 -80z" />
- <glyph glyph-name="ion-ios-flask-outline" unicode="&#xf430;" horiz-adv-x="384"
-d="M373 78c8 -16 11 -32 11 -46c-1 -36 -27 -64 -63 -64h-256c-36 0 -64 27 -65 64c0 14 4 30 12 46l116 195v127h-16v16h16h16v-16v-16h48v-16h-48v-32h32v-16h-32v-32h48v-16h-48v-3l-2 -4l-15 -25h49v-16h-58l-92 -154c-13 -25 -14 -43 -2 -63c9 -14 23 -23 41 -23h256
-c17 0 33 8 41 22c5 8 6 17 6 26c0 12 -2 25 -9 38l-116 195l-3 4v131v16h16h16v-16h-16v-127zM44 73l72 119h153l72 -119c7 -11 10 -24 10 -33c-1 -24 -16 -40 -46 -40h-226c-30 0 -46 12 -46 40c0 9 4 22 11 33zM260 176h-135l-67 -111v0v0c-5 -8 -9 -19 -9 -25
-c0 -13 5 -17 6 -18c4 -4 13 -6 24 -6h226c10 0 18 3 23 7c4 4 7 10 7 18c0 6 -3 16 -8 24v0v0z" />
- <glyph glyph-name="ion-ios-flask" unicode="&#xf431;" horiz-adv-x="384"
-d="M327 65v0c5 -8 8 -18 8 -24c0 -8 -3 -14 -7 -18c-5 -4 -13 -7 -23 -7h-226c-11 0 -20 2 -24 6c-1 1 -6 5 -6 18c0 6 4 17 9 25v0v0l67 111h135l67 -111v0zM373 78c8 -16 11 -32 11 -46c-1 -36 -27 -64 -63 -64h-256c-36 0 -64 27 -65 64c0 14 4 30 12 46l116 195v127h-16
-v16h160v-16h-16v-127zM144 384v-16h48v16h-48zM144 336v-16h32v16h-32zM144 288v-16h48v16h-48zM127 240l-9 -16h58v16h-49zM351 40c0 9 -3 22 -10 33l-72 119h-154l-71 -119c-7 -11 -11 -24 -11 -33c0 -28 16 -40 46 -40h226c30 0 45 16 46 40z" />
- <glyph glyph-name="ion-ios-flower-outline" unicode="&#xf432;"
-d="M363 164c-29 0 -65 7 -93 14c-1 -3 -2 -6 -4 -9c25 -15 56 -36 76 -56c40 -40 53 -68 41 -80c-3 -3 -7 -4 -12 -4c-15 0 -38 15 -68 45c-20 20 -41 51 -56 76c-3 -2 -7 -3 -10 -4c7 -28 15 -64 15 -93c0 -56 -12 -85 -28 -85s-28 29 -28 85c0 29 8 65 15 93
-c-3 1 -7 2 -10 4c-15 -25 -36 -56 -56 -76c-30 -30 -53 -45 -68 -45c-5 0 -9 1 -12 4c-12 12 1 40 41 80c20 20 51 41 76 56c-2 3 -3 6 -4 9c-28 -7 -64 -14 -93 -14c-56 0 -85 12 -85 28s29 28 85 28c29 0 65 -8 93 -15c1 3 2 7 4 10c-25 15 -56 35 -76 55
-c-40 40 -53 68 -41 80c3 3 7 4 12 4c15 0 38 -14 68 -44c20 -20 41 -51 56 -76c3 2 7 3 10 4c-7 28 -15 64 -15 93c0 56 12 85 28 85s28 -29 28 -85c0 -29 -8 -65 -15 -93c3 -1 7 -2 10 -4c15 25 36 56 56 76c30 30 53 44 68 44c5 0 9 -1 12 -4c12 -12 -1 -40 -41 -80
-c-20 -20 -51 -40 -76 -55c2 -3 3 -7 4 -10c28 7 64 15 93 15c56 0 85 -12 85 -28s-29 -28 -85 -28zM288 193v-3c30 -7 56 -10 75 -10c21 0 39 2 52 5c10 3 14 6 16 7c-2 1 -6 4 -16 7c-13 3 -31 5 -52 5c-19 0 -45 -4 -75 -11zM314 299c-14 -14 -30 -35 -46 -61l2 -2
-c26 16 47 32 61 46c15 15 26 28 33 40c5 9 7 14 7 16c-4 0 -22 -4 -57 -39zM178 236l2 2c-16 26 -32 47 -46 61c-35 35 -53 39 -57 39c0 -2 2 -7 7 -16c7 -12 18 -25 33 -40c14 -14 35 -30 61 -46zM85 180c19 0 45 3 75 10v3c-30 7 -56 11 -75 11c-21 0 -39 -2 -52 -5
-c-10 -3 -14 -6 -16 -7c2 -1 5 -4 15 -7c13 -3 32 -5 53 -5zM134 85c14 14 30 35 46 61l-2 2c-26 -16 -47 -32 -61 -46c-15 -15 -26 -29 -33 -41c-5 -9 -7 -14 -7 -16c4 0 22 5 57 40zM270 148l-2 -2c16 -26 32 -47 46 -61c35 -35 53 -40 57 -40c0 2 -2 7 -7 16
-c-7 12 -18 26 -33 41c-14 14 -35 30 -61 46zM217 383c-3 -13 -5 -31 -5 -52c0 -19 4 -45 11 -75h2c7 30 11 56 11 75c0 21 -2 39 -5 52c-3 10 -6 14 -7 16c-1 -2 -4 -6 -7 -16zM231 0c3 13 5 32 5 53c0 19 -4 45 -11 75h-2c-7 -30 -11 -56 -11 -75c0 -21 2 -40 5 -53
-c3 -10 6 -13 7 -15c1 2 4 5 7 15zM224 160c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM313 42c10 -34 7 -53 -5 -58c-2 -1 -3 -1 -5 -1c-11 0 -25 13 -37 35c5 35 -2 76 -2 76s24 -34 49 -52zM302 -1c1 4 2 14 -3 34c-5 4 -10 9 -15 14
-c0 -9 0 -17 -1 -25c10 -16 16 -22 19 -23zM182 365c-6 -35 1 -75 1 -75s-27 35 -48 51c-10 35 -7 54 5 59c2 1 3 1 5 1c11 0 24 -12 37 -36zM164 337c0 9 0 17 1 25c-10 16 -16 21 -19 22c-1 -4 -2 -14 3 -34c5 -4 10 -8 15 -13zM50 149c35 -4 76 2 76 2s-34 -24 -51 -48
-c-12 -4 -26 -6 -35 -6c-13 0 -21 4 -24 11c-5 11 7 25 34 41zM66 117c4 5 8 10 13 15c-9 0 -17 0 -25 1c-16 -10 -21 -16 -22 -19c1 0 4 -1 8 -1c7 0 16 1 26 4zM432 276c5 -11 -7 -26 -34 -42c-35 5 -76 -2 -76 -2s33 25 51 49c13 4 26 5 35 5c13 0 21 -3 24 -10zM394 250
-c16 10 21 16 22 19c-1 0 -4 1 -8 1c-7 0 -16 -1 -26 -4c-4 -5 -8 -9 -13 -14c9 0 17 -1 25 -2zM131 39c31 24 53 55 53 55s-7 -39 -3 -71c-15 -26 -28 -39 -39 -39c-2 0 -4 0 -6 1c-11 5 -13 24 -5 54zM143 1c4 2 12 8 22 26c0 6 -1 13 -1 20c-6 -6 -13 -12 -19 -17
-c-4 -18 -3 -26 -2 -29zM312 398c11 -5 13 -22 5 -54c-29 -21 -53 -55 -53 -55s8 48 3 71c13 25 28 39 39 39c2 0 4 0 6 -1zM303 353c5 18 3 27 2 30c-4 -2 -12 -8 -22 -26c0 -6 1 -14 1 -21c6 6 13 12 19 17zM71 285c18 -24 55 -53 55 -53s-40 7 -70 3c-28 15 -43 32 -38 44
-c3 7 10 11 22 11c8 0 21 -1 31 -5zM33 273c2 -4 8 -12 26 -22c6 0 13 1 20 1c-6 6 -12 12 -17 18c-8 2 -16 4 -22 4c-4 0 -6 -1 -7 -1zM392 149c30 -17 43 -33 38 -45c-3 -7 -10 -10 -22 -10c-8 0 -19 1 -31 5c-20 27 -55 52 -55 52s45 -8 70 -2zM408 110c4 0 6 1 7 1
-c-2 4 -8 12 -26 22c-6 0 -13 -1 -20 -1c6 -6 12 -13 17 -19c8 -2 16 -3 22 -3z" />
- <glyph glyph-name="ion-ios-flower" unicode="&#xf433;"
-d="M363 220c56 0 85 -12 85 -28s-29 -28 -85 -28c-29 0 -65 7 -93 14c-1 -3 -2 -6 -4 -9c25 -15 56 -36 76 -56c40 -40 53 -68 41 -80s-40 1 -80 41c-20 20 -41 51 -56 76c-3 -2 -7 -3 -10 -4c7 -28 15 -64 15 -93c0 -56 -12 -85 -28 -85s-28 29 -28 85c0 29 8 65 15 93
-c-3 1 -7 2 -10 4c-15 -25 -36 -56 -56 -76c-40 -40 -68 -53 -80 -41s1 40 41 80c20 20 51 41 76 56c-2 3 -3 6 -4 9c-28 -7 -64 -14 -93 -14c-56 0 -85 12 -85 28s29 28 85 28c29 0 65 -8 93 -15c1 3 2 7 4 10c-25 15 -56 35 -76 55c-40 40 -53 68 -41 80s40 0 80 -40
-c20 -20 41 -51 56 -76c3 2 6 3 9 4c-7 28 -14 64 -14 93c0 56 12 85 28 85s28 -29 28 -85c0 -29 -7 -65 -14 -93c3 -1 6 -2 9 -4c15 25 36 56 56 76c40 40 68 52 80 40s-1 -40 -41 -80c-20 -20 -51 -40 -76 -55c2 -3 3 -7 4 -10c28 7 64 15 93 15zM264 94c0 0 24 -34 49 -52
-c10 -34 7 -53 -5 -58c-2 -1 -3 -1 -5 -1c-11 0 -25 13 -37 35c5 35 -2 76 -2 76zM183 290c0 0 -27 35 -48 51c-10 35 -7 54 5 59c2 1 3 1 5 1c11 0 24 -12 37 -36c-6 -35 1 -75 1 -75zM126 151c0 0 -34 -24 -51 -48c-12 -4 -26 -6 -35 -6c-13 0 -21 4 -24 11
-c-5 11 7 25 34 41c35 -4 76 2 76 2zM322 232c0 0 33 25 51 49c13 4 26 5 35 5c13 0 21 -3 24 -10c5 -11 -7 -26 -34 -42c-35 5 -76 -2 -76 -2zM131 39c31 24 53 55 53 55s-7 -39 -3 -71c-15 -26 -28 -39 -39 -39c-2 0 -4 0 -6 1c-11 5 -13 24 -5 54zM317 344
-c-29 -21 -53 -55 -53 -55s8 48 3 71c13 25 28 39 39 39c2 0 4 0 6 -1c11 -5 13 -22 5 -54zM56 235c-28 15 -43 32 -38 44c3 7 10 11 22 11c8 0 21 -1 31 -5c18 -24 55 -53 55 -53s-40 7 -70 3zM392 149c30 -17 43 -33 38 -45c-3 -7 -10 -10 -22 -10c-8 0 -19 1 -31 5
-c-20 27 -55 52 -55 52s45 -8 70 -2z" />
- <glyph glyph-name="ion-ios-folder-outline" unicode="&#xf434;"
-d="M425 352c13 0 23 -10 23 -23v-304c0 -14 -10 -25 -23 -25h-400c-13 0 -25 12 -25 25v336c0 13 11 23 25 23h112c8 0 12 -2 17 -7v0l23 -23c2 -2 3 -2 6 -2h242zM25 368c-4 0 -9 -3 -9 -7v-74c3 1 5 1 8 1h400c3 0 5 0 8 -1v42c0 4 -3 7 -7 7h-242c-7 0 -12 2 -17 7
-l-23 23c-2 2 -3 2 -6 2h-112zM432 25v239c0 4 -4 8 -8 8h-400c-4 0 -8 -4 -8 -8v-239c0 -4 5 -9 9 -9h400c4 0 7 5 7 9z" />
- <glyph glyph-name="ion-ios-folder" unicode="&#xf435;"
-d="M440 272c4 0 8 -4 8 -8v-239c0 -14 -10 -25 -23 -25h-400c-13 0 -25 12 -25 25v239c0 4 4 8 8 8h432zM425 352c13 0 23 -10 23 -23v-42c-3 1 -5 1 -8 1h-432c-3 0 -5 0 -8 -1v74c0 13 11 23 25 23h112c8 0 12 -2 17 -7v0l23 -23c2 -2 3 -2 6 -2h242z" />
- <glyph glyph-name="ion-ios-football-outline" unicode="&#xf436;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM249 6c3 1 5 1 8 2l24 64l-20 39v1h-106l-20 -39l25 -65c2 -1 5 -1 7 -2c12 -3 25 -5 38 -5c14 0 30 2 44 5zM41 284c-15 -27 -23 -57 -24 -89l43 37v0zM142 371
-c-36 -14 -68 -38 -90 -69l22 -64l5 -2l49 -23l71 60v58zM277 201l-70 58l-69 -58v-1l18 -72h104l18 72zM399 195c-1 32 -9 63 -24 90l-19 -53v0zM364 302c-22 31 -54 56 -90 69l-58 -40v-58l71 -60l54 24zM18 175c3 -34 15 -66 33 -92l70 -1l21 39l-20 77l-1 1l-49 22z
-M295 82l70 1c18 26 30 58 33 92l-54 46l-50 -23l-20 -77zM207 345l47 32c-15 4 -30 6 -46 6s-32 -2 -47 -6zM118 66l-54 1c20 -23 46 -42 75 -53l-20 50zM277 14c29 11 55 30 75 53l-56 -1l-2 -3z" />
- <glyph glyph-name="ion-ios-football" unicode="&#xf437;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM249 6c3 1 5 1 8 2l24 64l-20 39v1h-106l-20 -39l25 -65c2 -1 5 -1 7 -2c12 -3 25 -5 38 -5c14 0 30 2 44 5zM142 371c-36 -14 -68 -38 -90 -69l22 -64l5 -2l49 -23l71 60v58z
-M364 302c-22 31 -54 56 -90 69l-58 -40v-58l71 -60l54 24zM18 175c3 -34 15 -66 33 -92l70 -1l21 39l-20 77l-1 1l-49 22zM295 82l70 1c18 26 30 58 33 92l-54 46l-50 -23l-20 -77z" />
- <glyph glyph-name="ion-ios-game-controller-a-outline" unicode="&#xf438;"
-d="M163 208c3 0 5 -2 5 -5v-22c0 -3 -2 -5 -5 -5h-35v-35c0 -3 -3 -5 -6 -5h-21c-3 0 -5 2 -5 5v35h-35c-3 0 -5 3 -5 6v21c0 3 2 5 5 5h35v35c0 3 2 5 5 5h22c3 0 5 -2 5 -5v-35h35zM330 169c11 0 20 -8 20 -19s-9 -19 -20 -19s-19 8 -19 19s8 19 19 19zM288 211
-c11 0 19 -8 19 -19s-8 -19 -19 -19s-20 8 -20 19s9 19 20 19zM373 211c11 0 19 -8 19 -19s-8 -19 -19 -19s-20 8 -20 19s9 19 20 19zM330 253c11 0 20 -8 20 -19s-9 -20 -20 -20s-19 9 -19 20s8 19 19 19zM337 286h-226c-26 0 -49 -9 -67 -26s-28 -41 -28 -67s10 -51 28 -68
-s41 -27 67 -27h226c26 0 49 10 67 27s28 42 28 68s-10 50 -28 67s-41 26 -67 26zM337 302v0c61 0 111 -45 111 -109s-50 -111 -111 -111h-226c-61 0 -111 47 -111 111s50 109 111 109h226z" />
- <glyph glyph-name="ion-ios-game-controller-a" unicode="&#xf439;"
-d="M337 302c61 0 111 -45 111 -109s-50 -111 -111 -111h-226c-61 0 -111 47 -111 111s50 109 111 109h226zM168 181v0v22c0 3 -2 5 -5 5h-35v35c0 3 -2 5 -5 5h-22c-3 0 -5 -2 -5 -5v-35h-35c-3 0 -5 -2 -5 -5v-21c0 -3 2 -6 5 -6h35v-35c0 -3 2 -5 5 -5h21c3 0 6 2 6 5v35
-h35c3 0 5 2 5 5zM288 173c11 0 19 8 19 19s-8 19 -19 19s-20 -8 -20 -19s9 -19 20 -19zM330 131c11 0 20 8 20 19s-9 19 -20 19s-19 -8 -19 -19s8 -19 19 -19zM330 214c11 0 20 9 20 20s-9 19 -20 19s-19 -8 -19 -19s8 -20 19 -20zM373 173c11 0 19 8 19 19s-8 19 -19 19
-s-20 -8 -20 -19s9 -19 20 -19z" />
- <glyph glyph-name="ion-ios-game-controller-b-outline" unicode="&#xf43a;"
-d="M276 244c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM320 200c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM103 264c22 0 39 -18 39 -40s-17 -40 -39 -40s-39 18 -39 40s17 40 39 40zM103 205c11 0 19 8 19 19s-8 19 -19 19
-s-19 -8 -19 -19s8 -19 19 -19zM320 288c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM364 244c11 0 20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20s9 20 20 20zM434 199c21 -88 18 -152 -7 -164c-4 -2 -9 -3 -13 -3c-22 0 -45 24 -68 52c-26 32 -32 33 -110 33
-h-24c-78 0 -84 -1 -110 -33c-23 -28 -46 -52 -68 -52c-4 0 -9 1 -13 3c-25 12 -28 76 -7 164s43 136 88 149c10 3 18 4 26 4c28 0 47 -15 96 -15s68 15 96 15c8 0 16 -1 26 -4c45 -13 67 -61 88 -149zM420 49c10 5 23 48 -1 146c-21 90 -43 128 -78 138c-8 2 -14 3 -21 3
-c-10 0 -19 -2 -30 -5c-16 -4 -36 -10 -66 -10s-50 6 -66 10c-11 3 -20 5 -30 5c-7 0 -13 -1 -21 -3c-35 -10 -57 -48 -78 -138c-24 -98 -11 -141 -1 -146c2 -1 4 -1 6 -1c6 0 14 4 23 12s19 18 32 34s24 28 44 34c17 5 38 5 79 5h24c41 0 62 0 79 -5c20 -6 31 -18 44 -34
-s23 -26 32 -34s17 -12 23 -12c2 0 4 0 6 1z" />
- <glyph glyph-name="ion-ios-game-controller-b" unicode="&#xf43b;"
-d="M103 243c11 0 19 -8 19 -19s-8 -19 -19 -19s-19 8 -19 19s8 19 19 19zM434 199c21 -88 18 -152 -7 -164c-4 -2 -9 -3 -13 -3c-22 0 -45 24 -68 52c-26 32 -32 33 -110 33h-24c-78 0 -84 -1 -110 -33c-23 -28 -46 -52 -68 -52c-4 0 -9 1 -13 3c-25 12 -28 76 -7 164
-s43 136 88 149c10 3 18 4 26 4c28 0 47 -15 96 -15s68 15 96 15c8 0 16 -1 26 -4c45 -13 67 -61 88 -149zM103 184c22 0 39 18 39 40s-17 40 -39 40s-39 -18 -39 -40s17 -40 39 -40zM276 204c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM320 160
-c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM320 248c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM364 204c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20z" />
- <glyph glyph-name="ion-ios-gear-outline" unicode="&#xf43c;" horiz-adv-x="384"
-d="M193 288c26 0 50 -10 68 -28s28 -42 28 -68s-10 -50 -28 -68s-42 -28 -68 -28s-50 10 -68 28s-28 42 -28 68s10 50 28 68s42 28 68 28zM193 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM138 365c-10 -3 -20 -7 -30 -12c2 -8 1 -16 0 -24
-c-2 -13 -8 -25 -18 -35c-12 -12 -29 -19 -46 -19c-4 0 -9 0 -13 1c-5 -10 -9 -20 -12 -30c7 -4 12 -10 17 -17c8 -11 12 -24 12 -37s-4 -26 -12 -37c-5 -7 -10 -13 -17 -17c3 -10 7 -20 12 -30c4 1 9 1 13 1c17 0 34 -7 46 -19c10 -10 16 -22 18 -35c1 -8 2 -16 0 -24
-c10 -5 20 -9 30 -12c4 7 10 12 17 17c11 8 24 12 37 12s26 -4 37 -12c7 -5 13 -10 17 -17c10 3 20 7 30 12c-2 8 -1 16 0 24c2 13 8 25 18 35c12 12 29 19 46 19c4 0 9 0 13 -1c5 10 9 20 12 30c-7 4 -12 10 -17 17c-8 11 -12 24 -12 37s4 26 12 37c5 7 10 13 17 17
-c-3 10 -7 20 -12 30c-4 -1 -9 -1 -13 -1c-17 0 -34 7 -46 19c-10 10 -16 22 -18 35c-1 8 -2 16 0 24c-10 5 -20 9 -30 12c-4 -7 -10 -12 -17 -17c-11 -8 -24 -12 -37 -12s-26 4 -37 12c-7 5 -13 10 -17 17zM238 384v0c20 -5 40 -13 57 -24c-8 -18 -5 -40 10 -55
-c10 -10 22 -14 35 -14c7 0 14 1 20 4c11 -17 19 -37 24 -57c-19 -7 -32 -25 -32 -46s14 -39 32 -46c-5 -20 -13 -40 -24 -57c-6 3 -13 4 -20 4c-13 0 -25 -4 -35 -14c-15 -15 -18 -37 -10 -55c-17 -11 -37 -19 -57 -24c-7 18 -25 32 -46 32s-39 -14 -46 -32
-c-20 5 -40 13 -57 24c8 18 5 40 -10 55c-10 10 -22 14 -35 14c-7 0 -14 -1 -20 -4c-11 17 -19 37 -24 57c18 7 32 25 32 46s-13 39 -32 46c5 20 13 40 24 57c6 -3 13 -4 20 -4c13 0 25 4 35 14c15 15 18 37 10 55c17 11 37 19 57 24c7 -19 25 -32 46 -32s39 13 46 32z" />
- <glyph glyph-name="ion-ios-gear" unicode="&#xf43d;" horiz-adv-x="384"
-d="M352 192c0 -21 14 -39 32 -46c-5 -20 -13 -40 -24 -57c-6 3 -13 4 -20 4c-13 0 -25 -4 -35 -14c-15 -15 -18 -37 -10 -55c-17 -11 -37 -19 -57 -24c-7 18 -25 32 -46 32s-39 -14 -46 -32c-20 5 -40 13 -57 24c8 18 5 40 -10 55c-10 10 -22 14 -35 14c-7 0 -14 -1 -20 -4
-c-11 17 -19 37 -24 57c18 7 32 25 32 46s-13 39 -32 46c5 20 13 40 24 57c6 -3 13 -4 20 -4c13 0 25 4 35 14c15 15 18 37 10 55c17 11 37 19 57 24c7 -19 25 -32 46 -32s39 13 46 32c20 -5 40 -13 57 -24c-8 -18 -5 -40 10 -55c10 -10 22 -14 35 -14c7 0 14 1 20 4
-c11 -17 19 -37 24 -57c-19 -7 -32 -25 -32 -46zM193 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" />
- <glyph glyph-name="ion-ios-glasses-outline" unicode="&#xf43e;"
-d="M433 201v0h15v-18h-15c-2 -22 -13 -43 -29 -58c-17 -16 -39 -25 -62 -25c-51 0 -92 41 -92 92v0v0c0 10 -12 22 -26 22s-26 -12 -26 -22v0v0c0 -51 -41 -92 -92 -92c-23 0 -45 9 -62 25c-16 15 -27 36 -29 58h-15v18h15c2 22 13 43 29 59c17 16 39 24 62 24
-c42 0 78 -27 89 -67c7 7 18 12 29 12s22 -5 29 -12c11 40 47 67 89 67c23 0 45 -9 62 -25c16 -15 27 -36 29 -58zM342 115c42 0 77 35 77 77s-35 77 -77 77s-77 -35 -77 -77s35 -77 77 -77zM106 115c42 0 77 35 77 77s-35 77 -77 77s-77 -35 -77 -77s35 -77 77 -77z" />
- <glyph glyph-name="ion-ios-glasses" unicode="&#xf43f;"
-d="M433 201v0h15v-18h-15c-2 -22 -13 -43 -29 -58c-17 -16 -39 -25 -62 -25c-51 0 -92 41 -92 92v0v0c0 10 -12 22 -26 22s-26 -12 -26 -22v0v0c0 -51 -41 -92 -92 -92c-23 0 -45 9 -62 25c-16 15 -27 36 -29 58h-15v18h15c2 22 13 43 29 59c17 16 39 24 62 24
-c42 0 78 -27 89 -67c7 7 18 12 29 12s22 -5 29 -12c11 40 47 67 89 67c23 0 45 -9 62 -25c16 -15 27 -36 29 -58z" />
- <glyph glyph-name="ion-ios-grid-view-outline" unicode="&#xf440;" horiz-adv-x="384"
-d="M384 256h-112v-128h112v-16h-112v-112h-16v112h-128v-112h-16v112h-112v16h112v128h-112v16h112v112h16v-112h128v112h16v-112h112v-16zM256 128v128h-128v-128h128z" />
- <glyph glyph-name="ion-ios-grid-view" unicode="&#xf441;" horiz-adv-x="384"
-d="M128 128v128h128v-128h-128zM0 384h384v-384h-384v384zM352 256v16h-80v80h-16v-80h-128v80h-16v-80h-80v-16h80v-128h-80v-16h80v-80h16v80h128v-80h16v80h80v16h-80v128h80z" />
- <glyph glyph-name="ion-ios-heart-outline" unicode="&#xf442;"
-d="M327 368c69 0 121 -43 121 -116c0 -31 -13 -71 -41 -105s-45 -52 -100 -88s-83 -43 -83 -43s-28 7 -83 43s-72 54 -100 88s-41 74 -41 105c0 73 52 116 121 116c39 0 82 -18 103 -53c21 35 64 53 103 53zM395 157c12 14 22 31 28 49c6 16 9 31 9 46c0 30 -10 56 -29 74
-c-9 8 -20 15 -33 19c-13 5 -28 7 -43 7c-38 0 -73 -18 -89 -45l-14 -23l-14 23c-16 27 -51 45 -89 45c-15 0 -30 -2 -43 -7c-13 -4 -24 -11 -33 -19c-19 -18 -29 -44 -29 -74c0 -15 3 -30 9 -46c6 -18 16 -35 28 -49c27 -32 42 -49 97 -85c40 -27 65 -36 74 -39
-c9 3 34 12 74 39c55 36 70 53 97 85z" />
- <glyph glyph-name="ion-ios-heart" unicode="&#xf443;"
-d="M327 368c69 0 121 -43 121 -116c0 -31 -13 -71 -41 -105s-45 -52 -100 -88s-83 -43 -83 -43s-28 7 -83 43s-72 54 -100 88s-41 74 -41 105c0 73 52 116 121 116c39 0 82 -18 103 -53c21 35 64 53 103 53z" />
- <glyph glyph-name="ion-ios-help-empty" unicode="&#xf444;" horiz-adv-x="128"
-d="M68 82c-9 0 -17 8 -17 17s8 17 17 17s17 -8 17 -17s-8 -17 -17 -17zM102 197c-23 -22 -22 -27 -23 -53h-19c1 28 7 43 30 64c11 10 19 24 19 39c0 24 -19 39 -42 39c-32 0 -49 -16 -48 -46h-19c0 42 25 62 68 62c33 0 60 -20 60 -54c0 -22 -11 -37 -26 -51z" />
- <glyph glyph-name="ion-ios-help-outline" unicode="&#xf445;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM212 302c33 0 60 -21 60 -55c0 -22 -11 -36 -26 -50c-23 -23 -22 -27 -23 -53h-19
-c1 28 7 43 30 64c11 10 19 23 19 38c0 24 -19 40 -42 40c-32 0 -49 -16 -48 -46h-19c0 42 25 62 68 62zM212 116c9 0 17 -8 17 -17s-8 -17 -17 -17s-17 8 -17 17s8 17 17 17z" />
- <glyph glyph-name="ion-ios-help" unicode="&#xf446;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM212 82c9 0 17 8 17 17s-8 17 -17 17s-17 -8 -17 -17s8 -17 17 -17zM246 197c15 14 26 29 26 51c0 34 -27 54 -60 54c-43 0 -68 -20 -68 -62h19c-1 30 16 46 48 46
-c23 0 42 -15 42 -39c0 -15 -8 -29 -19 -39c-23 -21 -29 -36 -30 -64h19c1 26 0 31 23 53z" />
- <glyph glyph-name="ion-ios-home-outline" unicode="&#xf447;" horiz-adv-x="384"
-d="M192 336l160 -128v-208h-112v128h-96v-128h-112v208zM336 16v184l-144 116l-144 -116v-184h80v128h128v-128h80zM192 384l192 -153l-12 -12l-180 145l-180 -145l-12 12l32 25v96h64v-45zM80 294v42h-32v-67z" />
- <glyph glyph-name="ion-ios-home" unicode="&#xf448;" horiz-adv-x="384"
-d="M192 336l160 -128v-208h-112v128h-96v-128h-112v208zM192 384l192 -153l-12 -12l-180 145l-180 -145l-12 12l32 25v96h64v-45z" />
- <glyph glyph-name="ion-ios-infinite-outline" unicode="&#xf449;"
-d="M419 260c19 -19 29 -43 29 -68s-10 -49 -29 -68c-19 -18 -44 -28 -70 -28s-50 10 -69 28l-126 123c-15 15 -35 22 -56 22s-40 -7 -55 -22c-31 -30 -31 -80 0 -110c15 -15 34 -22 55 -22s41 7 56 22l43 42l13 -14l-42 -41c-19 -18 -44 -28 -70 -28s-50 10 -69 28
-c-19 19 -29 43 -29 68s10 49 29 68c19 18 43 28 69 28s51 -10 70 -28l126 -123c15 -15 34 -22 55 -22s41 7 56 22c31 30 31 80 0 110c-15 15 -35 22 -56 22s-40 -7 -55 -22l-43 -42l-13 14l42 41c19 18 44 28 70 28s50 -10 69 -28z" />
- <glyph glyph-name="ion-ios-infinite" unicode="&#xf44a;" horiz-adv-x="464"
-d="M433 266c20 -20 31 -46 31 -74s-11 -54 -31 -74s-48 -30 -76 -30s-55 10 -75 30l-125 123c-13 13 -32 20 -51 20s-37 -7 -50 -20s-21 -31 -21 -49c0 -19 8 -36 21 -49s31 -20 50 -20s38 7 51 20l39 38l25 -25l-39 -38c-20 -20 -48 -30 -76 -30s-55 10 -75 30
-s-31 46 -31 74s11 54 31 74s47 30 75 30s56 -10 76 -30l125 -123c13 -13 31 -20 50 -20s38 7 51 20s20 31 20 49c0 19 -7 36 -20 49s-32 20 -51 20s-37 -7 -50 -20l-39 -38l-25 25l39 38c20 20 48 30 76 30s55 -10 75 -30z" />
- <glyph glyph-name="ion-ios-information-empty" unicode="&#xf44b;" horiz-adv-x="64"
-d="M8 276c0 13 7 20 20 20s20 -7 20 -20s-7 -20 -20 -20s-20 7 -20 20zM48 104h16v-8h-64v8h16v120h-16v8h48v-128z" />
- <glyph glyph-name="ion-ios-information-outline" unicode="&#xf44c;" horiz-adv-x="416"
-d="M184 276c0 13 7 20 20 20s20 -7 20 -20s-7 -20 -20 -20s-20 7 -20 20zM224 104h16v-8h-64v8h16v120h-16v8h48v-128zM208 400c57 0 106 -20 147 -61s61 -90 61 -147s-20 -106 -61 -147s-90 -61 -147 -61s-106 20 -147 61s-61 90 -61 147s20 106 61 147s90 61 147 61z
-M208 1c53 0 98 19 135 56s56 82 56 135s-19 98 -56 135s-82 56 -135 56s-98 -19 -135 -56s-56 -82 -56 -135s19 -98 56 -135s82 -56 135 -56z" />
- <glyph glyph-name="ion-ios-information" unicode="&#xf44d;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM204 296c-11 0 -20 -9 -20 -20s9 -20 20 -20s20 9 20 20s-9 20 -20 20zM240 96v8h-16v128h-48v-8h16v-120h-16v-8h64z" />
- <glyph glyph-name="ion-ios-ionic-outline" unicode="&#xf44e;" horiz-adv-x="416"
-d="M378 313c24 -34 38 -76 38 -121c0 -115 -92 -208 -207 -208s-209 93 -209 208s94 208 209 208c45 0 86 -14 120 -38c6 5 13 8 21 8c19 0 35 -16 35 -35c0 -8 -2 -16 -7 -22zM350 357c-12 0 -22 -10 -22 -22s10 -22 22 -22s22 10 22 22s-10 22 -22 22zM344 56
-c18 18 31 39 41 62c10 24 15 48 15 74s-5 51 -15 75c-5 13 -12 25 -20 36c-5 -2 -10 -3 -15 -3c-19 0 -35 16 -35 35c0 5 2 11 4 15c-11 8 -23 15 -36 20c-24 10 -49 14 -75 14s-51 -4 -75 -14c-23 -10 -43 -24 -61 -42s-31 -38 -41 -61c-10 -24 -15 -49 -15 -75
-s5 -50 15 -74c10 -23 23 -44 41 -62s38 -31 61 -41c24 -10 49 -15 75 -15s51 5 75 15c23 10 43 23 61 41zM208 288c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96zM208 112c44 0 80 36 80 80s-36 80 -80 80s-79 -36 -79 -80s35 -80 79 -80z" />
- <glyph glyph-name="ion-ios-keypad-outline" unicode="&#xf44f;" horiz-adv-x="384"
-d="M331 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-54 23 -54 53s24 54 54 54zM331 16c21 0 37 16 37 37s-16 38 -37 38s-38 -17 -38 -38s17 -37 38 -37zM192 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-53 23 -53 53s23 54 53 54zM192 16c21 0 37 16 37 37s-16 38 -37 38
-s-37 -17 -37 -38s16 -37 37 -37zM53 107c30 0 54 -24 54 -54s-24 -53 -54 -53s-53 23 -53 53s23 54 53 54zM53 16c21 0 38 16 38 37s-17 38 -38 38s-37 -17 -37 -38s16 -37 37 -37zM331 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-54 23 -54 53s24 53 54 53zM331 155
-c21 0 37 16 37 37s-16 37 -37 37s-38 -16 -38 -37s17 -37 38 -37zM192 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-53 23 -53 53s23 53 53 53zM192 155c21 0 37 16 37 37s-16 37 -37 37s-37 -16 -37 -37s16 -37 37 -37zM53 245c30 0 54 -23 54 -53s-24 -53 -54 -53
-s-53 23 -53 53s23 53 53 53zM53 155c21 0 38 16 38 37s-17 37 -38 37s-37 -16 -37 -37s16 -37 37 -37zM331 277c-30 0 -54 24 -54 54s24 53 54 53s53 -23 53 -53s-23 -54 -53 -54zM331 368c-21 0 -38 -16 -38 -37s17 -38 38 -38s37 17 37 38s-16 37 -37 37zM192 384
-c30 0 53 -23 53 -53s-23 -54 -53 -54s-53 24 -53 54s23 53 53 53zM192 293c21 0 37 17 37 38s-16 37 -37 37s-37 -16 -37 -37s16 -38 37 -38zM53 384c30 0 54 -23 54 -53s-24 -54 -54 -54s-53 24 -53 54s23 53 53 53zM53 293c21 0 38 17 38 38s-17 37 -38 37
-s-37 -16 -37 -37s16 -38 37 -38z" />
- <glyph glyph-name="ion-ios-keypad" unicode="&#xf450;" horiz-adv-x="384"
-d="M331 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-54 23 -54 53s24 54 54 54zM192 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-53 23 -53 53s23 54 53 54zM53 107c30 0 54 -24 54 -54s-24 -53 -54 -53s-53 23 -53 53s23 54 53 54zM331 245c30 0 53 -23 53 -53
-s-23 -53 -53 -53s-54 23 -54 53s24 53 54 53zM192 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-53 23 -53 53s23 53 53 53zM53 245c30 0 54 -23 54 -53s-24 -53 -54 -53s-53 23 -53 53s23 53 53 53zM331 277c-30 0 -54 24 -54 54s24 53 54 53s53 -23 53 -53s-23 -54 -53 -54z
-M192 384c30 0 53 -23 53 -53s-23 -54 -53 -54s-53 24 -53 54s23 53 53 53zM53 384c30 0 54 -23 54 -53s-24 -54 -54 -54s-53 24 -53 54s23 53 53 53z" />
- <glyph glyph-name="ion-ios-lightbulb-outline" unicode="&#xf451;" horiz-adv-x="288"
-d="M288 275c0 -31 -13 -59 -30 -83v0c-11 -15 -22 -28 -32 -45c-22 -38 -18 -73 -18 -82v-1h-128v1c0 7 3 44 -19 82c-10 17 -20 30 -31 45v0c-17 24 -30 52 -30 83c0 78 66 141 144 141s144 -63 144 -141zM239 194l6 8c16 22 27 47 27 73c0 33 -16 65 -40 89s-55 36 -88 36
-s-64 -12 -88 -36s-40 -56 -40 -89c0 -26 11 -51 27 -73l19 -26v0c5 -6 9 -13 13 -21c17 -29 21 -58 21 -75h16v112l-32 64h17l31 -64v-112h32v112l31 64h17l-32 -64v-112h16c0 17 4 45 21 75c8 14 16 25 24 36c1 1 1 2 2 3zM112 -32v16h64v-16h-64zM96 0v16h96v-16h-96z
-M96 32v16h96v-16h-96z" />
- <glyph glyph-name="ion-ios-lightbulb" unicode="&#xf452;" horiz-adv-x="288"
-d="M288 275c0 -31 -13 -59 -30 -83v0c-11 -15 -22 -28 -32 -45c-22 -38 -18 -73 -18 -82v-1h-32v128l32 64h-16l-32 -64v-128h-32v128l-31 64h-17l32 -64v-128h-32v1c0 7 3 44 -19 82c-10 17 -20 30 -31 45v0c-17 24 -30 52 -30 83c0 78 66 141 144 141s144 -63 144 -141z
-M112 -32v16h64v-16h-64zM96 0v16h96v-16h-96zM96 32v16h96v-16h-96z" />
- <glyph glyph-name="ion-ios-list-outline" unicode="&#xf453;" horiz-adv-x="384"
-d="M368 368h-352v-352h352v352zM384 384v0v-384h-384v384h384zM128 280v16h192v-16h-192zM128 184v16h192v-16h-192zM128 88v16h192v-16h-192zM64 288c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16zM64 192c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16
-s-16 5 -16 16zM64 96c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16z" />
- <glyph glyph-name="ion-ios-list" unicode="&#xf454;" horiz-adv-x="384"
-d="M0 384h384v-384h-384v384zM80 80c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM80 176c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM80 272c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM320 88v16h-192v-16h192zM320 184v16
-h-192v-16h192zM320 280v16h-192v-16h192z" />
- <glyph glyph-name="ion-ios-location-outline" unicode="&#xf455;" horiz-adv-x="288"
-d="M144 400c-34 0 -67 -13 -91 -37s-37 -57 -37 -91c0 -43 24 -107 70 -186c22 -38 44 -72 58 -91c14 19 36 53 58 91c46 79 70 143 70 186c0 34 -13 67 -37 91s-57 37 -91 37zM144 416v0c80 0 144 -64 144 -144c0 -112 -144 -304 -144 -304s-144 192 -144 304
-c0 80 64 144 144 144zM144 336c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM144 225c26 0 47 21 47 47s-21 47 -47 47s-47 -21 -47 -47s21 -47 47 -47z" />
- <glyph glyph-name="ion-ios-location" unicode="&#xf456;" horiz-adv-x="288"
-d="M144 416c80 0 144 -64 144 -144c0 -112 -144 -304 -144 -304s-144 192 -144 304c0 80 64 144 144 144zM144 225c26 0 47 21 47 47s-21 47 -47 47s-47 -21 -47 -47s21 -47 47 -47z" />
- <glyph glyph-name="ion-ios-locked-outline" unicode="&#xf457;" horiz-adv-x="320"
-d="M264 224h56v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-72zM72 296v-72h176v72c0 49 -39 88 -88 88s-88 -39 -88 -88zM304 0v208h-288v-208h288zM160 160c18 0 32 -14 32 -32c0 -15 -10 -27 -24 -31v-33h-16v33c-14 4 -24 16 -24 31c0 18 14 32 32 32z
-M160 112c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" />
- <glyph glyph-name="ion-ios-locked" unicode="&#xf458;" horiz-adv-x="320"
-d="M264 224h56v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-72zM168 97c14 4 24 16 24 31c0 18 -14 32 -32 32s-32 -14 -32 -32c0 -15 10 -27 24 -31v-33h16v33zM248 224v72c0 49 -39 88 -88 88s-88 -39 -88 -88v-72h176zM160 144c9 0 16 -7 16 -16
-s-7 -16 -16 -16s-16 7 -16 16s7 16 16 16z" />
- <glyph glyph-name="ion-ios-loop-strong" unicode="&#xf459;" horiz-adv-x="512"
-d="M256 400c115 0 208 -93 208 -208c0 -14 -1 -28 -4 -42l-1 -4l-24 5l1 4c2 12 4 24 4 37c0 101 -83 184 -184 184c-66 0 -127 -36 -160 -94l-2 -3l-21 11l2 4c37 65 106 106 181 106zM416 102l2 3l21 -11l-2 -4c-37 -65 -106 -106 -181 -106c-115 0 -208 93 -208 208
-c0 14 1 28 4 42l1 4l24 -5l-1 -4c-2 -12 -4 -24 -4 -37c0 -101 83 -184 184 -184c66 0 127 36 160 94zM384 192h128l-64 -64zM0 192l64 64l64 -64h-128z" />
- <glyph glyph-name="ion-ios-loop" unicode="&#xf45a;" horiz-adv-x="489"
-d="M478 192l11 -11l-52 -53l-53 53l10 11l43 -41zM449 192v0v0c0 -7 0 -14 -1 -21l-16 1c1 7 1 14 1 21c-1 103 -85 187 -188 187c-68 0 -131 -37 -164 -96l-14 8c36 64 104 104 178 104c112 0 203 -91 204 -202v0v-2zM409 100l14 -8c-36 -64 -104 -104 -178 -104
-c-111 0 -202 90 -204 200v0v3v1v0c0 7 0 14 1 21l16 -1c-1 -7 -1 -14 -1 -21c0 -103 85 -187 188 -187c68 0 131 37 164 96zM53 256l52 -53l-11 -11l-41 41l-42 -41l-11 11z" />
- <glyph glyph-name="ion-ios-medical-outline" unicode="&#xf45b;" horiz-adv-x="364"
-d="M364 260l-118 -68l118 -68l-32 -56l-118 69v-137h-64v137l-118 -69l-32 56l118 68l-118 68l32 56l118 -69v137h64v-137l118 69zM342 118l-128 74l128 74l-16 28l-128 -74v148h-32v-148l-128 74l-16 -28l128 -74l-128 -74l16 -28l128 74v-148h32v148l128 -74z" />
- <glyph glyph-name="ion-ios-medical" unicode="&#xf45c;" horiz-adv-x="364"
-d="M364 260l-118 -68l118 -68l-32 -56l-118 69v-137h-64v137l-118 -69l-32 56l118 68l-118 68l32 56l118 -69v137h64v-137l118 69z" />
- <glyph glyph-name="ion-ios-medkit-outline" unicode="&#xf45d;" horiz-adv-x="416"
-d="M224 240h-32v-48v-16h-16h-48v-32h48h16v-16v-48h32v48v16h16h48v32h-48h-16v16v48zM240 256v0v-64h64v-64h-64v-64h-64v64h-64v64h64v64h64zM288 320h128v-320h-416v320h128v32c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-32zM144 350v-30h128v30c0 10 -7 18 -17 18h-97
-c-11 0 -14 -8 -14 -18zM400 16v288h-384v-288h384z" />
- <glyph glyph-name="ion-ios-medkit" unicode="&#xf45e;" horiz-adv-x="416"
-d="M224 176h16h48v-32h-48h-16v-16v-48h-32v48v16h-16h-48v32h48h16v16v48h32v-48v-16zM288 320h128v-320h-416v320h128v32c0 18 10 32 29 32h99c19 0 32 -14 32 -32v-32zM144 350v-30h128v30c0 10 -7 18 -17 18h-97c-11 0 -14 -8 -14 -18zM304 128v64h-64v64h-64v-64h-64
-v-64h64v-64h64v64h64z" />
- <glyph glyph-name="ion-ios-mic-off" unicode="&#xf45f;" horiz-adv-x="280"
-d="M266 -32l-258 440l14 8l258 -440zM128 95c-44 0 -79 37 -79 83v118l113 -193c-10 -5 -22 -8 -34 -8zM207 178c0 -10 -2 -19 -5 -28l-136 234c14 20 37 32 62 32c44 0 79 -38 79 -84v-154zM256 176c0 -28 -9 -54 -24 -75l-10 17c11 17 17 36 17 58v80h17v-80zM139 49v0
-v-63h69v-18h-161v18h73v63c-67 5 -120 60 -120 127v80h19v-80c0 -60 50 -109 110 -109c17 0 34 4 48 11l9 -16c-14 -7 -30 -12 -47 -13z" />
- <glyph glyph-name="ion-ios-mic-outline" unicode="&#xf460;" horiz-adv-x="256"
-d="M128 416c44 0 79 -38 79 -84v-154c0 -46 -35 -84 -79 -84s-79 38 -79 84v154c0 46 35 84 79 84zM191 178v154c0 37 -28 68 -63 68s-63 -31 -63 -68v-154c0 -37 28 -68 63 -68s63 31 63 68zM239 256h17v-80c0 -67 -51 -122 -117 -127v-63h69v-18h-161v18h73v63
-c-67 5 -120 60 -120 127v80h19v-80c0 -60 50 -109 110 -109s110 49 110 109v80z" />
- <glyph glyph-name="ion-ios-mic" unicode="&#xf461;" horiz-adv-x="256"
-d="M128 94c-44 0 -79 38 -79 84v154c0 46 35 84 79 84s79 -38 79 -84v-154c0 -46 -35 -84 -79 -84zM239 256h17v-80c0 -67 -51 -122 -117 -127v-63h69v-18h-161v18h73v63c-67 5 -120 60 -120 127v80h19v-80c0 -60 50 -109 110 -109s110 49 110 109v80z" />
- <glyph glyph-name="ion-ios-minus-empty" unicode="&#xf462;" horiz-adv-x="256"
-d="M256 183h-256v17h256v-17z" />
- <glyph glyph-name="ion-ios-minus-outline" unicode="&#xf463;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM80 183v17h256v-17h-256z" />
- <glyph glyph-name="ion-ios-minus" unicode="&#xf464;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM336 183v17h-256v-17h256z" />
- <glyph glyph-name="ion-ios-monitor-outline" unicode="&#xf465;" horiz-adv-x="480"
-d="M480 64h-176v-16h64v-16h-257v16h64v16h-175v288h480v-288zM16 336v-256h448v256h-448z" />
- <glyph glyph-name="ion-ios-monitor" unicode="&#xf466;" horiz-adv-x="480"
-d="M480 64h-176v-16h64v-16h-257v16h64v16h-175v288h480v-288zM16 336v-256h448v256h-448zM32 96v224h416v-224h-416z" />
- <glyph glyph-name="ion-ios-moon-outline" unicode="&#xf467;" horiz-adv-x="216"
-d="M195 133c7 0 14 1 21 3c-4 -7 -7 -12 -12 -18c-21 -25 -53 -41 -88 -41c-64 0 -116 51 -116 115c0 52 34 96 81 111c7 2 14 3 22 4c-4 -6 -8 -12 -11 -18c-7 -14 -11 -30 -11 -47c0 -29 11 -56 32 -77s48 -32 77 -32h5zM116 93c25 0 48 9 65 24c-65 5 -116 59 -116 125
-c0 14 2 28 6 40c-33 -16 -55 -51 -55 -90c0 -55 45 -99 100 -99z" />
- <glyph glyph-name="ion-ios-moon" unicode="&#xf468;" horiz-adv-x="216"
-d="M195 133c7 0 14 1 21 3c-4 -7 -7 -12 -12 -18c-21 -25 -53 -41 -88 -41c-64 0 -116 51 -116 115c0 52 34 96 81 111c7 2 14 3 22 4c-4 -6 -8 -12 -11 -18c-7 -14 -11 -30 -11 -47c0 -29 11 -56 32 -77s48 -32 77 -32h5z" />
- <glyph glyph-name="ion-ios-more-outline" unicode="&#xf469;" horiz-adv-x="320"
-d="M160 210c-10 0 -18 -8 -18 -18s8 -18 18 -18s18 8 18 18s-8 18 -18 18zM160 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM32 210c-10 0 -18 -8 -18 -18s8 -18 18 -18s18 8 18 18s-8 18 -18 18zM32 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32
-s-32 14 -32 32s14 32 32 32zM288 210c-10 0 -18 -8 -18 -18s8 -18 18 -18s18 8 18 18s-8 18 -18 18zM288 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32z" />
- <glyph glyph-name="ion-ios-more" unicode="&#xf46a;" horiz-adv-x="320"
-d="M160 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM32 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM288 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32z" />
- <glyph glyph-name="ion-ios-musical-note" unicode="&#xf46b;" horiz-adv-x="192"
-d="M192 346v-1v-65c0 -3 -3 -6 -6 -5v0l-73 13v-192c0 -33 1 -80 -51 -82c-48 -2 -62 16 -62 41c0 19 9 39 51 41c22 1 37 1 45 1v273l90 -19l2 -1c2 0 3 -1 4 -3v0v-1v0z" />
- <glyph glyph-name="ion-ios-musical-notes" unicode="&#xf46c;" horiz-adv-x="320"
-d="M320 128c0 -34 4 -80 -49 -82c-49 -2 -62 16 -62 41c0 20 9 39 52 41c23 1 34 2 43 2v160l-191 -32v-161c0 -34 3 -81 -50 -83c-49 -2 -63 17 -63 42c0 20 9 39 52 41c23 1 35 1 44 1v237l224 35v-242z" />
- <glyph glyph-name="ion-ios-navigate-outline" unicode="&#xf46d;" horiz-adv-x="416"
-d="M208 384c-51 0 -99 -21 -135 -57s-57 -84 -57 -135s21 -99 57 -135s84 -57 135 -57s99 21 135 57s57 84 57 135s-21 99 -57 135s-84 57 -135 57zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM304 288l-96 -224v128h-128z" />
- <glyph glyph-name="ion-ios-navigate" unicode="&#xf46e;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 64l96 224l-224 -96h128v-128z" />
- <glyph glyph-name="ion-ios-nutrition-outline" unicode="&#xf46f;" horiz-adv-x="384"
-d="M294 214v0c6 -6 10 -14 10 -23c0 -11 -5 -20 -13 -26v0s-51 -37 -106 -77l-38 31c-2 2 -4 3 -6 3c-1 0 -2 0 -3 -1v0c-2 -2 -2 -6 1 -10l29 -35l-115 -84c-6 -4 -13 -8 -21 -8c-18 0 -32 14 -32 32c0 7 1 13 4 18v0c2 2 17 25 37 57l21 -17c2 -2 4 -2 6 -2c1 0 3 0 4 1v0
-c2 2 1 6 -2 10l-19 23c27 43 60 96 84 134l36 -30c2 -2 4 -3 6 -3c1 0 2 1 3 2v0c2 2 2 5 -1 9l-33 40c11 18 19 29 19 29v0c6 10 15 16 27 16c9 0 18 -4 24 -10v0l78 -79v0v0zM282 178c4 3 6 8 6 13c0 4 -2 9 -5 12l-5 4v1l-69 69v0l-5 5c-3 3 -8 5 -12 5
-c-6 0 -10 -3 -13 -8l-5 -8c-2 -3 -5 -7 -8 -12l25 -30v0l1 -1c8 -10 8 -22 0 -30l-1 -1l-1 -1c-4 -3 -8 -5 -13 -5s-11 2 -16 6v1h-1l-21 18l-24 -39l-44 -70l12 -14v0v0c8 -10 8 -23 0 -31v0c-4 -4 -9 -6 -15 -6c-5 0 -11 2 -16 6v0v0l-7 5c-3 -5 -5 -9 -8 -13
-c-12 -19 -16 -26 -18 -29c-1 -3 -2 -6 -2 -9c0 -9 7 -16 16 -16c3 0 6 2 11 5l101 74l-18 22h-1v0c-8 10 -8 23 0 31v0v0v0c4 4 10 6 15 6s11 -2 16 -6v0h1l28 -24c49 36 93 68 96 70zM376 333l8 -14l-5 -3l-103 -60l-17 17l71 123l2 4l14 -8l-3 -4l-63 -111l91 53z" />
- <glyph glyph-name="ion-ios-nutrition" unicode="&#xf470;" horiz-adv-x="384"
-d="M295 214v0c6 -6 9 -13 9 -22c0 -11 -5 -20 -13 -26v0s-51 -38 -106 -78l-38 32c-4 3 -8 3 -10 1v0c-2 -2 -2 -6 1 -10l29 -35l-114 -84c-6 -4 -13 -8 -21 -8c-18 0 -32 14 -32 32c0 7 2 13 5 18v0c1 2 16 25 36 57l20 -17c4 -3 8 -3 10 -1v0c2 2 2 6 -1 10l-20 23
-c27 43 60 96 84 134l36 -30c4 -3 8 -3 10 -1v0c2 2 2 6 -1 10l-33 40c11 18 18 29 18 29v0c6 10 16 16 28 16c9 0 18 -4 24 -10v0l78 -79l1 -1v0zM384 309l-103 -59l-28 29l70 121l28 -16l-50 -85l67 38z" />
- <glyph glyph-name="ion-ios-paper-outline" unicode="&#xf471;" horiz-adv-x="384"
-d="M48 384h336v-353c0 -17 -14 -31 -31 -31h-322c-17 0 -31 14 -31 31v305h32v-16h-16v-289c0 -8 7 -15 15 -15h322c8 0 15 7 15 15v337h-304v-320h-16v320v16zM96 320v16h128v-16h-128zM96 240v16h240v-16h-240zM96 160v16h192v-16h-192zM96 80v16h240v-16h-240z" />
- <glyph glyph-name="ion-ios-paper" unicode="&#xf472;" horiz-adv-x="384"
-d="M48 384h336v-353c0 -17 -14 -31 -31 -31h-322c-17 0 -31 14 -31 31v305h32v-288h16v288v32v16zM96 336v-16h128v16h-128zM96 176v-16h192v16h-192zM336 80v16h-240v-16h240zM336 240v16h-240v-16h240z" />
- <glyph glyph-name="ion-ios-paperplane-outline" unicode="&#xf473;" horiz-adv-x="320"
-d="M0 198l320 154l-146 -320l-57 115zM132 152l41 -83l115 249zM286 320l-248 -121l83 -36z" />
- <glyph glyph-name="ion-ios-paperplane" unicode="&#xf474;" horiz-adv-x="320"
-d="M0 198l320 154l-214 -200zM320 352l-146 -320l-52 104z" />
- <glyph glyph-name="ion-ios-partlysunny-outline" unicode="&#xf475;" horiz-adv-x="384"
-d="M144 298v54h16v-54h-16zM0 192v16h55v-16h-55zM44 299l10 11l32 -32l-11 -11zM223 268l-11 11l32 32l11 -11zM56 96l-10 11l31 31l11 -11zM129 153c-4 -3 -8 -7 -12 -12c-23 12 -39 36 -39 63c0 39 32 71 71 71c21 0 40 -10 53 -25c-4 -2 -9 -4 -14 -8
-c-10 11 -23 17 -39 17c-30 0 -55 -25 -55 -55c0 -23 15 -43 35 -51zM235 208c-34 0 -63 -28 -63 -62v-12s1 -10 1 -10c-5 0 -12 -1 -14 -1c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h157c27 0 49 22 49 49s-22 50 -49 50c-2 0 -4 -1 -6 -1l-14 -2l-3 14
-c-3 14 -11 26 -22 35s-25 14 -39 14zM235 224v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78z" />
- <glyph glyph-name="ion-ios-partlysunny" unicode="&#xf476;" horiz-adv-x="384"
-d="M144 298v54h16v-54h-16zM0 192v16h55v-16h-55zM44 299l10 11l32 -32l-11 -11zM223 268l-11 11l32 32l11 -11zM56 96l-10 11l31 31l11 -11zM235 224v0c37 0 68 -26 76 -61h8c36 0 65 -29 65 -65s-29 -66 -65 -66h-157c-28 0 -52 24 -52 53c0 27 21 51 47 53v8
-c0 43 35 78 78 78zM201 252l1 -2v0c-31 -5 -62 -43 -62 -75c0 -2 1 -5 1 -7l-1 -1h-1c-11 -6 -18 -14 -22 -26v1v-1c-23 12 -39 36 -39 63c0 39 32 71 71 71c21 0 39 -9 52 -23z" />
- <glyph glyph-name="ion-ios-pause-outline" unicode="&#xf477;" horiz-adv-x="256"
-d="M63 336h-47v-288h47v288zM79 352v0v-320h-79v320h79zM240 336h-47v-288h47v288zM256 352v0v-320h-79v320h79z" />
- <glyph glyph-name="ion-ios-pause" unicode="&#xf478;" horiz-adv-x="256"
-d="M0 32v320h79v-320h-79zM177 32v320h79v-320h-79z" />
- <glyph glyph-name="ion-ios-paw-outline" unicode="&#xf479;" horiz-adv-x="384"
-d="M380 252c6 -17 5 -38 -3 -57c-10 -25 -31 -43 -51 -43c-5 0 -10 1 -15 3c-22 10 -30 45 -17 79c10 28 31 46 51 46c5 0 10 -1 14 -3c10 -4 17 -13 21 -25zM362 202c6 15 7 31 2 44c-2 5 -5 12 -12 15c-2 1 -4 2 -7 2c-13 0 -28 -15 -36 -36c-9 -25 -6 -50 8 -56
-c2 -1 5 -1 8 -1c14 0 29 13 37 32zM90 234c13 -34 5 -69 -17 -79c-5 -2 -10 -3 -15 -3c-20 0 -41 18 -51 43c-8 19 -9 40 -3 57c4 12 11 21 21 25c4 2 9 3 14 3c20 0 41 -18 51 -46zM67 171c14 6 17 31 8 56c-8 21 -23 36 -36 36c-3 0 -5 -1 -7 -2c-7 -3 -10 -10 -12 -15
-c-5 -13 -4 -29 2 -44c8 -19 23 -32 37 -32c3 0 6 0 8 1zM134 237c-28 1 -52 32 -56 69c-2 23 4 45 16 60c8 10 19 17 31 18h6c27 -1 46 -29 50 -67c3 -24 -1 -48 -13 -63c-8 -9 -17 -15 -28 -16c-2 0 -4 -1 -6 -1zM107 356c-10 -12 -14 -29 -12 -48c3 -29 21 -53 40 -54h3
-c6 1 12 4 17 10c10 12 12 31 10 51c-3 29 -17 52 -35 53h-3c-9 -1 -16 -7 -20 -12zM192 208c64 0 128 -76 128 -149c0 -22 -11 -40 -22 -47c-13 -9 -23 -12 -42 -12c-23 0 -29 8 -40 15c-8 5 -14 10 -24 10s-16 -5 -24 -10c-11 -7 -17 -15 -40 -15c-19 0 -29 3 -42 12
-c-11 7 -22 25 -22 47c0 73 64 149 128 149zM290 27c6 4 14 16 14 32c0 30 -14 64 -36 91c-11 13 -23 24 -36 31c-13 8 -27 11 -40 11s-27 -3 -40 -11c-13 -7 -25 -18 -36 -31c-22 -27 -36 -61 -36 -91c0 -16 8 -28 14 -32c11 -7 18 -10 34 -10c14 0 19 4 26 9c2 1 4 3 6 4
-c9 6 18 12 32 12s23 -6 32 -12c2 -1 4 -3 6 -4c7 -5 12 -9 26 -9c16 0 23 3 34 10zM244 238c-11 1 -20 7 -28 16c-12 15 -16 39 -13 63c4 38 23 66 50 67h7c12 -1 22 -8 30 -18c12 -15 18 -37 16 -60c-4 -37 -28 -67 -56 -68h-6zM219 315c-2 -20 0 -39 10 -51
-c5 -6 11 -9 17 -10h3c19 1 38 25 41 54c2 19 -3 36 -13 48c-4 5 -10 11 -19 12h-4c-18 -1 -32 -24 -35 -53z" />
- <glyph glyph-name="ion-ios-paw" unicode="&#xf47a;" horiz-adv-x="384"
-d="M380 252c6 -17 5 -38 -3 -57c-10 -25 -31 -43 -51 -43c-5 0 -10 1 -15 3c-22 10 -30 45 -17 79c10 28 31 46 51 46c5 0 10 -1 14 -3c10 -4 17 -13 21 -25zM90 234c13 -34 5 -69 -17 -79c-5 -2 -10 -3 -15 -3c-20 0 -41 18 -51 43c-8 19 -9 40 -3 57c4 12 11 21 21 25
-c4 2 9 3 14 3c20 0 41 -18 51 -46zM134 237c-28 1 -52 32 -56 69c-2 23 4 45 16 60c8 10 19 17 31 18h6c27 -1 46 -29 50 -67c3 -24 -1 -48 -13 -63c-8 -9 -17 -15 -28 -16c-2 0 -4 -1 -6 -1zM192 208c64 0 128 -76 128 -149c0 -22 -11 -40 -22 -47c-13 -9 -23 -12 -42 -12
-c-23 0 -29 8 -40 15c-8 5 -14 10 -24 10s-16 -5 -24 -10c-11 -7 -17 -15 -40 -15c-19 0 -29 3 -42 12c-11 7 -22 25 -22 47c0 73 64 149 128 149zM244 238c-11 1 -20 7 -28 16c-12 15 -16 39 -13 63c4 38 23 66 50 67h7c12 -1 22 -8 30 -18c12 -15 18 -37 16 -60
-c-4 -37 -28 -67 -56 -68h-6z" />
- <glyph glyph-name="ion-ios-people-outline" unicode="&#xf47b;"
-d="M224 336v0v0zM317 113c11 -4 -11 4 0 0c28 -10 46 -35 46 -65h-28h-250c0 22 9 42 27 55c15 11 31 12 49 16c7 1 24 5 26 13s1 15 1 23c0 3 0 3 -2 5c-4 4 -6 9 -8 14c-2 8 -3 16 -4 24c-9 -2 -10 16 -12 21c-1 4 -7 24 3 21c-3 5 -4 13 -5 19c-2 13 -2 26 3 39
-c10 26 37 39 64 38c26 -1 51 -16 59 -42c4 -12 3 -26 1 -39c-1 -5 -2 -11 -4 -15c10 3 4 -20 3 -23c-2 -5 -3 -21 -12 -19c-1 -10 -2 -22 -7 -31c-1 -2 -7 -8 -7 -10v-11c0 -5 0 -10 2 -15s10 -7 14 -8c14 -5 27 -5 41 -10zM115 84c-6 -6 9 10 0 0c-6 -6 -10 -12 -12 -20h4
-h238c-4 15 -17 27 -30 33s-28 4 -41 9s-25 9 -28 25c-2 11 -2 22 -2 33c0 2 7 7 8 9c3 5 4 11 5 17c1 5 0 12 4 15c5 4 7 7 9 13c2 8 3 12 -1 19c-3 5 0 8 1 13c3 11 4 24 2 36c-8 37 -62 45 -86 19c-12 -13 -12 -31 -9 -47c1 -6 6 -14 3 -19c-1 -3 -5 -6 -4 -10
-c2 -5 2 -11 4 -16c2 -4 4 -6 7 -8s3 -6 3 -9c1 -7 2 -17 6 -23c3 -4 8 -6 8 -11v-21c-1 -8 -2 -18 -8 -24c-7 -6 -18 -10 -27 -12c-11 -3 -23 -3 -33 -7c-8 -3 -15 -8 -21 -14zM112 126c-15 -7 9 4 0 0c-9 -5 -18 -11 -25 -19c-1 -2 -6 -11 -7 -11h-25h-55c0 20 13 34 31 40
-c6 2 27 4 30 11c2 5 0 11 0 16c-10 -1 -24 1 -32 7c-2 2 3 9 4 12l3 12c1 9 1 19 1 28c0 16 -1 34 8 48c8 13 23 18 38 18c24 0 43 -13 47 -37c3 -16 1 -32 2 -48c0 -8 2 -16 5 -24c1 -2 5 -7 3 -9l-6 -3c-5 -2 -11 -3 -17 -4c-1 0 -8 0 -9 -1s0 -9 0 -11c0 -4 1 -6 5 -7
-c6 -2 19 -3 23 -8c2 -3 1 -5 -2 -5c-8 -1 -15 -1 -22 -5zM71 112c6 10 16 18 26 24c-9 9 -5 26 -4 37c0 2 0 5 2 5h8c6 0 11 1 17 2c-7 23 0 47 -5 70c-3 16 -15 23 -31 23c-17 0 -27 -9 -30 -25c-4 -22 3 -46 -4 -68c9 -1 17 -2 26 -2c1 0 1 -28 1 -29
-c-1 -12 -8 -18 -19 -22c-12 -4 -29 -3 -36 -15h49zM368 96c-2 8 -10 14 -16 19c-8 6 -18 13 -28 15c-3 1 -16 -1 -13 5c2 4 9 5 13 6s15 2 16 7c0 1 1 14 0 14c-6 0 -12 1 -18 2c-4 1 -7 2 -11 4c-6 3 -2 6 0 11c14 32 -10 88 32 105c15 6 34 5 48 -3c15 -9 20 -27 20 -44
-c0 -20 -4 -44 7 -62c2 -3 4 -4 0 -6c-2 -1 -4 -1 -6 -2l-12 -3s-9 -1 -13 -1c0 -4 -2 -13 1 -17c6 -7 21 -7 29 -10c18 -6 31 -20 31 -40h-80zM367 123c4 -4 -5 5 0 0s8 -11 15 -11h16h28c-7 12 -26 11 -38 16c-11 4 -16 12 -17 24c0 2 -1 27 1 27c9 0 18 0 26 1
-c-7 23 1 47 -4 70c-3 15 -15 23 -30 23c-17 0 -28 -8 -31 -25c-4 -23 2 -46 -5 -68c6 -2 12 -2 18 -2s8 1 9 -5c1 -11 5 -28 -4 -37c6 -4 11 -8 16 -13z" />
- <glyph glyph-name="ion-ios-people" unicode="&#xf47c;"
-d="M317 113c11 -4 -11 4 0 0v0zM317 113c28 -10 46 -35 46 -65h-28h-250c0 22 9 42 27 55c15 11 31 12 49 16c7 1 24 5 26 13s1 15 1 23c0 3 0 3 -2 5c-4 4 -6 9 -8 14c-2 8 -3 16 -4 24c-9 -2 -10 16 -12 21c-1 4 -7 24 3 21c-3 5 -4 13 -5 19c-2 13 -2 26 3 39
-c10 26 37 39 64 38c26 -1 51 -16 59 -42c4 -12 3 -26 1 -39c-1 -5 -2 -11 -4 -15c10 3 4 -20 3 -23c-2 -5 -3 -21 -12 -19c-1 -10 -2 -22 -7 -31c-1 -2 -7 -8 -7 -10v-11c0 -5 0 -10 2 -15s10 -7 14 -8c14 -5 27 -5 41 -10zM111 126h2h-1h-1zM111 126c-9 -5 -17 -11 -24 -19
-c-1 -2 -6 -11 -7 -11h-25h-55c0 20 12 34 30 40c6 2 27 4 30 11c2 5 1 11 1 16c-10 -1 -24 1 -32 7c-2 2 3 9 4 12c1 4 2 7 3 11c1 9 1 19 1 28c0 16 -1 35 8 49c8 13 23 18 38 18c24 0 43 -13 47 -37c3 -16 1 -32 2 -48c0 -8 2 -16 5 -24c1 -2 5 -7 3 -9l-6 -3
-c-5 -2 -11 -3 -17 -4c-1 0 -8 0 -9 -1s0 -9 0 -11c0 -4 1 -6 5 -7c6 -2 19 -3 23 -8c2 -3 1 -5 -2 -5c-7 -1 -14 -2 -21 -5c2 1 2 2 -1 0c-8 -4 -4 -2 -1 0zM417 136c18 -6 31 -20 31 -40h-80c-2 8 -10 14 -16 19c-8 6 -18 13 -28 15c-3 1 -16 -1 -13 5c2 4 9 5 13 6
-s15 2 16 7c0 1 1 14 0 14c-6 0 -12 1 -18 2c-4 1 -7 2 -11 4c-6 3 -2 6 0 11c14 32 -10 88 32 105c15 6 34 5 48 -3c15 -9 20 -27 20 -44c0 -20 -4 -44 7 -62c2 -3 4 -4 0 -6c-2 -1 -4 -1 -6 -2l-12 -3s-9 -1 -13 -1c0 -4 -2 -13 1 -17c6 -7 21 -7 29 -10z" />
- <glyph glyph-name="ion-ios-person-outline" unicode="&#xf47d;" horiz-adv-x="320"
-d="M106 246v0v0zM267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10
-c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9zM160 48v0h137c-2 3 -4 6 -8 8c-7 5 -16 9 -27 13c-7 2 -17 4 -26 5c-6 1 -10 2 -15 3c-3 1 -21 5 -29 15c-4 5 -6 12 -6 32c0 10 1 20 1 20v4l2 4
-c1 2 6 9 8 15c2 5 5 19 6 28c0 0 0 -1 1 4s8 4 9 8s3 7 5 18s-5 12 -5 17c0 4 1 5 1 5v0c0 1 4 14 4 38c0 13 -5 26 -14 35c-11 11 -25 16 -44 16c-18 0 -34 -5 -45 -16c-9 -9 -13 -22 -13 -35c1 -24 4 -37 4 -38v0s1 -3 0 -6c-1 -5 -6 -5 -4 -16s4 -14 5 -18s8 -3 9 -8
-s1 -4 1 -4c1 -9 4 -23 6 -28c2 -6 6 -13 8 -15l2 -4v-4s1 -10 1 -20c0 -20 -2 -27 -6 -32c-8 -10 -26 -14 -29 -15c-5 -1 -10 -2 -16 -3c-9 -1 -18 -3 -25 -5c-11 -4 -20 -8 -27 -13c-4 -2 -6 -5 -8 -8h137z" />
- <glyph glyph-name="ion-ios-person" unicode="&#xf47e;" horiz-adv-x="320"
-d="M267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10
-c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9z" />
- <glyph glyph-name="ion-ios-personadd-outline" unicode="&#xf47f;" horiz-adv-x="320"
-d="M320 295v-14h-25v-25h-14v25h-25v14h25v25h14v-25h25zM106 246v0v0zM267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68
-s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9zM160 48v0h137c-2 3 -4 6 -8 8c-7 5 -16 9 -27 13c-7 2 -17 4 -26 5c-6 1 -10 2 -15 3
-c-3 1 -21 5 -29 15c-4 5 -6 12 -6 32c0 10 1 20 1 20v4l2 4c1 2 6 9 8 15c2 5 5 19 6 28c0 0 0 -1 1 4s8 4 9 8s3 7 5 18s-5 12 -5 17c0 4 1 5 1 5v0c0 1 4 14 4 38c0 13 -5 26 -14 35c-11 11 -25 16 -44 16c-18 0 -34 -5 -45 -16c-9 -9 -13 -22 -13 -35c1 -24 4 -37 4 -38
-v0s1 -3 0 -6c-1 -5 -6 -5 -4 -16s4 -14 5 -18s8 -3 9 -8s1 -4 1 -4c1 -9 4 -23 6 -28c2 -6 6 -13 8 -15l2 -4v-4s1 -10 1 -20c0 -20 -2 -27 -6 -32c-8 -10 -26 -14 -29 -15c-5 -1 -10 -2 -16 -3c-9 -1 -18 -3 -25 -5c-11 -4 -20 -8 -27 -13c-4 -2 -6 -5 -8 -8h137z" />
- <glyph glyph-name="ion-ios-personadd" unicode="&#xf480;" horiz-adv-x="320"
-d="M320 295v-14h-25v-25h-14v25h-25v14h25v25h14v-25h25zM267 84c13 -5 53 -20 53 -52h-160h-160c0 32 40 47 53 52s31 6 43 9c7 2 17 5 20 9s1 41 1 41s-6 10 -9 18s-7 32 -7 32s-7 0 -9 12c-2 13 -6 17 -6 27c0 9 5 10 5 10v0s-4 13 -5 42c-1 34 25 68 74 68
-s75 -34 74 -68c-1 -29 -5 -42 -5 -42v0s5 -1 5 -10c0 -10 -3 -15 -6 -28c-2 -12 -9 -12 -9 -12s-4 -23 -7 -31s-9 -18 -9 -18s-2 -37 1 -41s13 -7 20 -9c12 -3 30 -4 43 -9z" />
- <glyph glyph-name="ion-ios-photos-outline" unicode="&#xf481;"
-d="M64 320h384v-320h-384v320zM432 16v288h-352v-288h352zM0 384h384v-48h-16v32h-352v-288h32v-16h-48v320z" />
- <glyph glyph-name="ion-ios-photos" unicode="&#xf482;"
-d="M64 320h384v-320h-384v320zM384 384v-48h-336v-272h-48v320h384z" />
- <glyph glyph-name="ion-ios-pie-outline" unicode="&#xf483;"
-d="M256 367v0v-207v-12l-12 -4l-180 -45c6 -13 13 -25 21 -36c12 -16 25 -30 41 -42c33 -24 73 -37 114 -37c26 0 51 5 75 15c23 10 43 23 61 41s31 38 41 61c10 24 15 49 15 75c0 51 -20 100 -56 136c-32 32 -75 51 -120 55zM240 384v0c115 0 208 -93 208 -208
-s-93 -208 -208 -208c-92 0 -171 60 -198 143l198 49v224zM208 400c-31 -1 -60 -7 -85 -18c-24 -11 -44 -26 -61 -46c-29 -34 -46 -80 -46 -127v0v0c0 -13 3 -46 12 -70l180 46v215zM224 416v0v-244l-205 -52c-19 32 -19 89 -19 89c0 91 58 207 218 207h6z" />
- <glyph glyph-name="ion-ios-pie" unicode="&#xf484;"
-d="M240 384v0c115 0 208 -93 208 -208s-93 -208 -208 -208c-92 0 -171 60 -198 143l198 49v224zM224 416v0v-244l-205 -52c-19 32 -19 89 -19 89c0 91 58 207 218 207h6z" />
- <glyph glyph-name="ion-ios-pint-outline" unicode="&#xf485;" horiz-adv-x="224"
-d="M224 278c0 -98 -32 -101 -32 -181c0 -40 16 -71 16 -99c0 -27 -9 -30 -32 -30h-128c-23 0 -32 2 -32 29c0 28 16 60 16 100c0 80 -32 83 -32 181c0 21 1 89 19 125c4 9 13 13 32 13h122c19 0 28 -4 32 -13c18 -36 19 -104 19 -125zM34 396c-8 -16 -14 -43 -17 -76h190
-c-3 33 -9 60 -17 76c-1 2 -1 1 -2 2c-2 1 -6 2 -15 2h-122c-9 0 -13 -1 -15 -2c-1 -1 -1 0 -2 -2zM191 -15c0 1 1 5 1 13c0 11 -4 23 -7 37c-4 18 -9 39 -9 62c0 41 8 64 16 86c8 23 16 46 16 95c0 9 -1 18 -1 26h-190c0 -8 -1 -17 -1 -26c0 -49 8 -72 16 -95
-c8 -22 16 -45 16 -86c0 -23 -5 -44 -9 -62c-3 -14 -7 -26 -7 -37c0 -8 1 -12 1 -13c2 -1 7 -1 15 -1h128c8 0 13 0 15 1z" />
- <glyph glyph-name="ion-ios-pint" unicode="&#xf486;" horiz-adv-x="224"
-d="M224 278c0 -98 -32 -101 -32 -181c0 -40 16 -71 16 -99c0 -27 -9 -30 -32 -30h-128c-23 0 -32 2 -32 29c0 28 16 60 16 100c0 80 -32 83 -32 181c0 21 1 89 19 125c4 9 13 13 32 13h122c19 0 28 -4 32 -13c18 -36 19 -104 19 -125zM34 396c-8 -16 -14 -43 -17 -76h190
-c-3 33 -9 60 -17 76c-1 2 -1 1 -2 2c-2 1 -6 2 -15 2h-122c-9 0 -13 -1 -15 -2c-1 -1 -1 0 -2 -2z" />
- <glyph glyph-name="ion-ios-play-outline" unicode="&#xf487;" horiz-adv-x="256"
-d="M16 323v-262l210 131zM0 352v0l256 -160l-256 -160v320z" />
- <glyph glyph-name="ion-ios-play" unicode="&#xf488;" horiz-adv-x="256"
-d="M0 352v0l256 -160l-256 -160v320z" />
- <glyph glyph-name="ion-ios-plus-empty" unicode="&#xf489;" horiz-adv-x="256"
-d="M256 183h-120v-119h-17v119h-119v17h119v120h17v-120h120v-17z" />
- <glyph glyph-name="ion-ios-plus-outline" unicode="&#xf48a;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191zM216 320v-120h120v-17h-120v-119h-17v119h-119v17h119v120h17z" />
- <glyph glyph-name="ion-ios-plus" unicode="&#xf48b;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM336 183v17h-120v120h-17v-120h-119v-17h119v-119h17v119h120z" />
- <glyph glyph-name="ion-ios-pricetag-outline" unicode="&#xf48c;" horiz-adv-x="416"
-d="M416 416v-160l-256 -288l-160 160l256 288h160zM400 264v136h-136l-240 -272l136 -136zM320 288c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM320 336c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16z" />
- <glyph glyph-name="ion-ios-pricetag" unicode="&#xf48d;" horiz-adv-x="416"
-d="M304 320c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16zM256 416h160v-160l-256 -288l-160 160zM320 288c9 0 16 4 22 10s10 13 10 22s-4 16 -10 22s-13 10 -22 10s-16 -4 -22 -10s-10 -13 -10 -22s4 -16 10 -22s13 -10 22 -10z" />
- <glyph glyph-name="ion-ios-pricetags-outline" unicode="&#xf48e;"
-d="M416 384h32v-144l-240 -272l-25 24l-23 -24l-160 160l256 288h160v-32zM160 -9l12 12l11 12l217 248v105v16v16h-137l-241 -272zM432 247v121h-16v-112l-221 -253l13 -12zM320 288c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM320 336
-c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16z" />
- <glyph glyph-name="ion-ios-pricetags" unicode="&#xf48f;"
-d="M432 384h16v-144l-240 -272l-13 13l237 266v137zM256 416h160v-32v-16v-112l-221 -253l-12 -11l-23 -24l-160 160zM320 288c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 320c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16z" />
- <glyph glyph-name="ion-ios-printer-outline" unicode="&#xf490;" horiz-adv-x="416"
-d="M384 336c18 0 32 -13 32 -31v-159c0 -18 -14 -32 -32 -32h-48v-114h-256v114h-48c-18 0 -32 14 -32 32v159c0 18 14 31 32 31h32v48h288v-48h32zM80 368v-32h256v32h-256zM320 16v192h-224v-192h224zM400 146v159c0 9 -7 15 -16 15v0h-352c-9 0 -16 -6 -16 -15v-159
-c0 -9 7 -16 16 -16h48v94h256v-94h48c9 0 16 7 16 16z" />
- <glyph glyph-name="ion-ios-printer" unicode="&#xf491;" horiz-adv-x="416"
-d="M80 0v224h256v-224h-256zM80 -0v224h256v-224h-256zM64 352v32h288v-32h-288zM385 336c18 0 31 -14 31 -31v-158c0 -17 -13 -34 -31 -34h-33v126h-288v-126h-31c-18 0 -33 17 -33 34v158c0 17 15 31 33 31h352z" />
- <glyph glyph-name="ion-ios-pulse-strong" unicode="&#xf492;" horiz-adv-x="480"
-d="M432 175c27 0 48 -20 48 -47s-21 -49 -48 -49c-21 0 -38 13 -45 31h-51c-7 0 -13 4 -15 11l-16 47l-50 -173c-2 -7 -8 -11 -15 -11h-1c-7 0 -14 5 -15 12l-51 308l-45 -182c-2 -7 -9 -12 -16 -12h-112v32h99l61 245c2 7 8 13 16 13s15 -7 16 -14l52 -314l45 155
-c2 7 8 11 15 11v0c7 0 13 -4 15 -11l29 -85h38c6 19 25 33 46 33z" />
- <glyph glyph-name="ion-ios-pulse" unicode="&#xf493;"
-d="M416 160c18 0 32 -14 32 -32s-14 -32 -32 -32c-15 0 -27 10 -31 23h-65c-3 0 -7 2 -8 5l-23 72l-57 -198c-1 -3 -4 -6 -8 -6v0c-4 0 -7 3 -8 7l-58 346l-54 -220c-1 -4 -4 -6 -8 -6h-96v16h90l62 251c1 4 4 6 8 6s7 -3 8 -7l58 -349l54 190c1 3 4 5 8 5s7 -2 8 -5l30 -91
-h59c3 14 16 25 31 25z" />
- <glyph glyph-name="ion-ios-rainy-outline" unicode="&#xf494;" horiz-adv-x="288"
-d="M220 269c38 0 68 -33 68 -71c0 -29 -19 -56 -45 -66l-55 -80c-2 -2 -5 -4 -8 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l46 66v0h-35l-31 -44c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 1 3 2 5l25 35h-37l-53 -76c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 2 4 3 6l46 66h-36l-32 -44
-c-2 -2 -4 -4 -7 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l25 34c-29 2 -52 27 -52 56c0 28 22 58 50 60c0 3 -1 5 -1 8c0 46 31 84 82 84c45 0 73 -31 81 -68c3 0 5 1 8 1zM220 146c28 0 52 24 52 52s-24 54 -52 54h-6l-15 -2l-3 15c-3 14 -11 31 -23 40c-12 10 -26 14 -41 14
-c-36 0 -66 -31 -66 -67v-12v-10c-6 0 -12 -2 -14 -2c-20 -3 -35 -23 -35 -43c0 -10 4 -20 11 -27s16 -12 26 -12h124v0v0h42z" />
- <glyph glyph-name="ion-ios-rainy" unicode="&#xf495;" horiz-adv-x="288"
-d="M220 269c38 0 68 -33 68 -71c0 -29 -19 -56 -45 -66l-55 -80c-2 -2 -5 -4 -8 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l46 66v0h-35l-31 -44c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 1 3 2 5l25 35h-37l-53 -76c-2 -2 -4 -4 -7 -4c-5 0 -9 3 -9 8c0 2 2 4 3 6l46 66h-36l-32 -44
-c-2 -2 -4 -4 -7 -4c-5 0 -8 3 -8 8c0 2 1 4 2 6l25 34c-29 2 -52 27 -52 56c0 28 22 58 50 60c0 3 -1 5 -1 8c0 46 31 84 82 84c45 0 73 -31 81 -68c3 0 5 1 8 1z" />
- <glyph glyph-name="ion-ios-recording-outline" unicode="&#xf496;" horiz-adv-x="480"
-d="M370 304c61 0 110 -50 110 -112s-49 -112 -110 -112h-260c-61 0 -110 50 -110 112s49 112 110 112s110 -50 110 -112c0 -40 -21 -75 -53 -95h146c-32 20 -53 55 -53 95c0 62 49 112 110 112zM16 192c0 -53 42 -95 94 -95s93 42 93 95s-41 95 -93 95s-94 -42 -94 -95z
-M370 97c52 0 94 42 94 95s-42 95 -94 95s-93 -42 -93 -95s41 -95 93 -95zM368 240c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM368 256v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM112 240c-26 0 -48 -22 -48 -48
-s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM112 256v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64z" />
- <glyph glyph-name="ion-ios-recording" unicode="&#xf497;" horiz-adv-x="480"
-d="M370 304c61 0 110 -50 110 -112s-49 -112 -110 -112h-260c-61 0 -110 50 -110 112s49 112 110 112s110 -50 110 -112c0 -40 -21 -76 -53 -95h146c-32 19 -53 55 -53 95c0 62 49 112 110 112zM112 128c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64z
-M368 128c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM368 240c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48zM112 240c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48z" />
- <glyph glyph-name="ion-ios-redo-outline" unicode="&#xf498;" horiz-adv-x="384"
-d="M0 48v32c0 17 -3 83 49 136c35 36 80 53 143 56v80l192 -128l-192 -128v80c-40 -1 -63 -9 -87 -20c-31 -14 -55 -44 -75 -77l-20 -31h-10zM208 256c-201 0 -192 -169 -192 -169c48 81 101 105 192 105v-65l148 97l-148 97v-65z" />
- <glyph glyph-name="ion-ios-redo" unicode="&#xf499;" horiz-adv-x="384"
-d="M0 48v32c0 17 -3 83 49 136c35 36 80 53 143 56v80l192 -128l-192 -128v80c-40 -1 -63 -9 -87 -20c-31 -14 -55 -44 -75 -77l-20 -31h-10z" />
- <glyph glyph-name="ion-ios-refresh-empty" unicode="&#xf49a;" horiz-adv-x="256"
-d="M128 64c-71 0 -128 57 -128 128s57 128 128 128v44l96 -64l-96 -56v56c-60 0 -108 -48 -108 -108s48 -108 108 -108s108 48 108 108h20c0 -71 -57 -128 -128 -128z" />
- <glyph glyph-name="ion-ios-refresh-outline" unicode="&#xf49b;" horiz-adv-x="416"
-d="M316 192v0h20c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128v44l96 -64l-96 -56v56c-60 0 -108 -48 -108 -108s48 -108 108 -108s108 48 108 108zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 1
-c105 0 191 86 191 191s-86 191 -191 191s-191 -86 -191 -191s86 -191 191 -191z" />
- <glyph glyph-name="ion-ios-refresh" unicode="&#xf49c;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 64c71 0 128 57 128 128h-20c0 -60 -48 -108 -108 -108s-108 48 -108 108s48 108 108 108v-56l96 56l-96 64v-44c-71 0 -128 -57 -128 -128s57 -128 128 -128z" />
- <glyph glyph-name="ion-ios-reload" unicode="&#xf49d;"
-d="M192 384c106 0 192 -86 192 -192l55 53l9 -9l-70 -68l-67 68l9 9l51 -52c0 98 -80 178 -179 178s-179 -80 -179 -179s80 -179 179 -179c79 0 146 50 170 121l12 -3c-26 -76 -97 -131 -182 -131c-106 0 -192 86 -192 192s86 192 192 192z" />
- <glyph glyph-name="ion-ios-reverse-camera-outline" unicode="&#xf49e;" horiz-adv-x="384"
-d="M238 129l2 2l11 -12l-2 -2c-16 -14 -36 -21 -57 -21c-45 0 -82 36 -87 78h-30l38 50l39 -50h-31c5 -33 35 -62 71 -62c17 0 33 6 46 17zM252 249c16 -14 25 -37 27 -57h30l-38 -51l-39 51h31c-5 35 -35 64 -71 64c-17 0 -33 -6 -46 -17l-2 -2l-11 12l2 2
-c16 14 36 21 57 21c22 0 44 -8 60 -23zM354 288c18 0 30 -14 30 -31v-176c0 -17 -12 -33 -30 -33h-320c-18 0 -34 16 -34 33v176c0 17 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM368 81v176c0 9 -5 15 -14 15h-62h-6s-4 1 -6 3s-6 8 -9 11
-c-12 13 -21 24 -27 30c-5 5 -7 4 -7 4h-88s-1 0 -6 -4c-6 -5 -15 -14 -26 -27c-3 -4 -8 -11 -11 -14s-4 -3 -6 -3h-6h-60c-9 0 -18 -7 -18 -15v-176c0 -9 9 -17 18 -17h320c8 0 14 8 14 17z" />
- <glyph glyph-name="ion-ios-reverse-camera" unicode="&#xf49f;" horiz-adv-x="384"
-d="M354 288c18 0 30 -14 30 -31v-176c0 -17 -12 -33 -30 -33h-320c-18 0 -34 16 -34 33v176c0 17 16 31 34 31h13v16h34v-16h13c32 36 43 48 55 48h88c12 0 23 -12 55 -48h62zM249 117l2 2l-11 12l-2 -2c-13 -11 -29 -17 -46 -17c-36 0 -66 29 -71 62h31l-39 50l-38 -50h30
-c5 -42 42 -78 87 -78c21 0 41 7 57 21zM271 141l38 51h-30c-2 20 -11 43 -27 57c-16 15 -38 23 -60 23c-21 0 -41 -7 -57 -21l-2 -2l11 -12l2 2c13 11 29 17 46 17c36 0 66 -29 71 -64h-31z" />
- <glyph glyph-name="ion-ios-rewind-outline" unicode="&#xf4a0;"
-d="M432 293l-184 -101l184 -101v202zM208 292v0l-176 -100l176 -100v95v27v78zM224 320v0v-123l224 123v-256l-224 123v-123l-224 128z" />
- <glyph glyph-name="ion-ios-rewind" unicode="&#xf4a1;"
-d="M224 320v0v-123l224 123v-256l-224 123v-123l-224 128z" />
- <glyph glyph-name="ion-ios-rose-outline" unicode="&#xf4a2;" horiz-adv-x="320"
-d="M284 295c-4 -1 -9 -3 -13 -4c-37 -11 -71 -24 -103 -39c-17 -8 -24 -12 -44 -24l-7 -4c-31 -18 -50 -33 -63 -51c-15 -21 -22 -45 -22 -77c0 -16 3 -30 9 -44c6 -13 14 -26 25 -36c23 -21 55 -32 94 -32s71 11 94 32c11 10 19 23 25 36c6 14 9 28 9 44c0 20 -5 40 -11 60
-c-11 40 -23 83 7 139zM320 320v0c-77 -96 -16 -151 -16 -224s-56 -128 -144 -128s-144 55 -144 128s35 109 93 142c25 14 33 19 52 28c30 14 65 28 105 40c17 5 35 10 54 14zM38 325c14 -28 18 -57 19 -83c9 7 20 13 30 20c7 4 14 9 21 13c5 3 10 6 16 9c-5 4 -11 7 -17 11
-c-22 13 -48 23 -69 30zM0 352v0s66 -15 115 -43c15 -8 28 -18 37 -29c-12 -6 -24 -12 -36 -19c-7 -4 -14 -8 -20 -12c-25 -16 -44 -31 -57 -42c5 41 2 98 -39 145zM249 367c-8 -1 -20 -2 -35 -7c-25 -8 -47 -20 -64 -36c8 -6 15 -12 21 -18c29 12 65 26 95 34
-c-5 10 -12 20 -17 27zM256 384v0s26 -32 32 -55c-33 -8 -84 -25 -121 -42l-3 3c-9 11 -22 22 -39 32c52 60 131 62 131 62zM85 394c-6 -10 -10 -20 -14 -28c12 -4 22 -10 36 -17c4 5 9 10 14 14c-13 15 -27 25 -36 31zM80 416v0s35 -16 64 -56c-12 -9 -23 -20 -33 -31
-c-26 13 -40 21 -61 27c5 15 15 38 30 60z" />
- <glyph glyph-name="ion-ios-rose" unicode="&#xf4a3;" horiz-adv-x="320"
-d="M320 320v0c-77 -96 -16 -151 -16 -224s-56 -128 -144 -128s-144 55 -144 128s35 109 93 142c25 14 33 19 52 28c30 14 65 28 105 40c17 5 35 10 54 14zM0 352v0s66 -15 115 -43c15 -8 28 -18 37 -29c-12 -6 -24 -12 -36 -19c-7 -4 -14 -8 -20 -12
-c-25 -16 -44 -31 -57 -42c5 41 2 98 -39 145zM256 384v0s26 -32 32 -55c-33 -8 -84 -25 -121 -42l-3 3c-9 11 -22 22 -39 32c52 60 131 62 131 62zM80 416v0s35 -16 64 -56c-12 -9 -23 -20 -33 -31c-26 13 -40 21 -61 27c5 15 15 38 30 60z" />
- <glyph glyph-name="ion-ios-search-strong" unicode="&#xf4a4;" horiz-adv-x="384"
-d="M280 150l-4 -7l108 -109l-34 -34l-108 109l-7 -5c-24 -15 -53 -25 -83 -25c-84 0 -152 69 -152 153s68 152 152 152s152 -68 152 -152c0 -30 -9 -58 -24 -82zM237 317c-23 23 -53 35 -85 35s-62 -12 -85 -35s-35 -53 -35 -85s12 -62 35 -85s53 -35 85 -35s62 12 85 35
-s36 53 36 85s-13 62 -36 85z" />
- <glyph glyph-name="ion-ios-search" unicode="&#xf4a5;" horiz-adv-x="384"
-d="M384 23l-23 -23l-113 113c-26 -21 -60 -33 -96 -33c-84 0 -152 68 -152 152s68 152 152 152s152 -68 152 -152c0 -36 -12 -69 -33 -95zM56 135c26 -26 60 -39 96 -39s70 14 96 40s40 60 40 96s-14 70 -40 96s-60 40 -96 40s-70 -14 -96 -40s-40 -60 -40 -96
-s14 -71 40 -97z" />
- <glyph glyph-name="ion-ios-settings-strong" unicode="&#xf4a6;"
-d="M0 72h283c6 14 21 24 37 24s31 -10 37 -24h91v-32h-91c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-283zM0 208h91c6 14 21 24 37 24s31 -10 37 -24h283v-32h-283c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-91zM0 344h283c6 14 21 24 37 24s31 -10 37 -24h91v-32h-91
-c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-283z" />
- <glyph glyph-name="ion-ios-settings" unicode="&#xf4a7;"
-d="M320 344c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16zM320 360v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM320 72c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16zM320 88v0c18 0 32 -14 32 -32s-14 -32 -32 -32
-s-32 14 -32 32s14 32 32 32zM128 208c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16zM128 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM175 200h273v-16h-273c0 3 1 5 1 8s-1 5 -1 8zM80 192c0 -3 1 -5 1 -8h-81v16h81
-c0 -3 -1 -5 -1 -8zM367 64h81v-16h-81c0 3 1 5 1 8s-1 5 -1 8zM272 56c0 -3 1 -5 1 -8h-273v16h273c0 -3 -1 -5 -1 -8zM367 336h81v-16h-81c0 3 1 5 1 8s-1 5 -1 8zM273 336c0 -3 -1 -5 -1 -8s1 -5 1 -8h-273v16h273z" />
- <glyph glyph-name="ion-ios-shuffle-strong" unicode="&#xf4a8;" horiz-adv-x="384"
-d="M301 296c-85 0 -119 -64 -152 -126c-1 -3 -3 -5 -4 -8l-1 -1c-2 -3 -2 -5 -4 -8c-21 -38 -43 -68 -68 -83c-15 -9 -34 -18 -72 -18v32c45 0 76 18 112 84c2 3 2 6 4 9h1c1 2 3 4 4 7c34 64 76 144 180 144h15l-52 43l21 25l99 -84l-99 -82l-21 24l51 42h-14zM285 154
-l99 -82l-99 -84l-21 25l52 43h-15c-78 0 -122 45 -153 95l18 33c29 -51 64 -96 135 -96h14l-51 42zM112 216c-36 66 -67 84 -112 84v32c38 0 57 -9 72 -18c25 -15 47 -44 67 -81c-7 -11 -13 -22 -19 -33c-1 2 -2 5 -3 7h-1c-2 3 -2 6 -4 9z" />
- <glyph glyph-name="ion-ios-shuffle" unicode="&#xf4a9;" horiz-adv-x="384"
-d="M298 241l-10 12l62 51h-46c-93 0 -129 -75 -164 -139c-2 -3 -3 -6 -5 -9c-20 -37 -41 -61 -65 -75c-14 -8 -33 -17 -70 -17v16c48 0 83 14 121 84c2 3 3 6 5 9c35 65 75 147 178 147h46l-62 52l10 12l86 -72zM135 228c0 -1 1 -2 1 -3c-3 -5 -6 -11 -9 -16c0 1 -1 1 -1 2
-c-2 3 -3 6 -5 9c-38 70 -73 84 -121 84v16c37 0 56 -9 70 -17c24 -14 45 -38 65 -75zM298 143l86 -71l-86 -72l-10 12l62 52h-46c-76 0 -118 45 -149 95c1 2 2 5 3 7c2 3 4 7 6 10c30 -50 67 -96 140 -96h46l-62 51z" />
- <glyph glyph-name="ion-ios-skipbackward-outline" unicode="&#xf4aa;" horiz-adv-x="320"
-d="M0 352h79v-142l241 142v-320l-241 142v-142h-79v320zM80 192l7 -4l217 -128v264v0l-217 -128zM16 336v-288h47v126v8v28v126h-47z" />
- <glyph glyph-name="ion-ios-skipbackward" unicode="&#xf4ab;" horiz-adv-x="320"
-d="M0 352h79v-142l241 142v-320l-241 142v-142h-79v320z" />
- <glyph glyph-name="ion-ios-skipforward-outline" unicode="&#xf4ac;" horiz-adv-x="320"
-d="M241 352h79v-320h-79v142l-241 -142v320l241 -142v142zM233 188l7 4l-7 4l-217 128v0v-264zM304 48v288h-47v-126v-28v-8v-126h47z" />
- <glyph glyph-name="ion-ios-skipforward" unicode="&#xf4ad;" horiz-adv-x="320"
-d="M241 352h79v-320h-79v142l-241 -142v320l241 -142v142z" />
- <glyph glyph-name="ion-ios-snowy" unicode="&#xf4ae;" horiz-adv-x="256"
-d="M252 131c4 -2 5 -7 3 -11s-7 -5 -11 -3l-29 17c-2 -8 -2 -16 0 -24c1 -4 -3 -9 -7 -10s-8 2 -9 6c-2 12 -3 24 1 36l-64 36v-73c11 -3 22 -8 31 -16c3 -3 4 -8 1 -11s-8 -4 -11 -1c-6 5 -13 10 -21 12v-33c0 -4 -4 -8 -8 -8s-8 4 -8 8v33c-8 -2 -15 -7 -21 -12
-c-3 -3 -8 -2 -11 1s-3 8 0 11c9 8 20 13 32 16v73l-65 -36c4 -12 4 -23 2 -35c-1 -4 -5 -8 -9 -7s-8 6 -7 10c2 8 2 16 0 24l-29 -17c-4 -2 -9 -1 -11 3s-1 9 3 11l29 16c-6 6 -13 10 -21 13c-4 1 -6 6 -5 10c2 4 6 6 10 5c12 -4 22 -11 30 -19l65 36l-65 37
-c-8 -9 -18 -15 -30 -19c-4 -1 -9 0 -10 4s1 10 5 11c8 3 15 6 21 12l-29 16c-4 2 -5 7 -3 11s7 5 11 3l29 -16c2 8 2 15 0 23c-1 4 3 9 7 10s8 -2 9 -6c2 -12 1 -25 -2 -36l65 -36v73c-12 3 -23 8 -32 16c-3 3 -3 8 0 11s8 4 11 1c6 -5 13 -10 21 -12v33c0 4 4 8 8 8
-s8 -4 8 -8v-33c8 2 15 7 21 12c3 3 8 2 11 -1s2 -8 -1 -11c-9 -8 -20 -13 -31 -16v-73l64 36c-3 11 -4 24 -2 36c1 4 6 7 10 6s7 -6 6 -10c-2 -8 -1 -15 1 -23l29 16c4 2 9 1 11 -3s1 -9 -3 -11l-29 -16c6 -6 13 -10 21 -13c4 -1 6 -6 5 -10s-6 -6 -10 -5
-c-12 4 -23 10 -31 19l-64 -36l64 -36c8 8 19 15 31 19c4 1 9 -1 10 -5s-1 -9 -5 -10c-8 -3 -15 -7 -21 -13z" />
- <glyph glyph-name="ion-ios-speedometer-outline" unicode="&#xf4af;"
-d="M224 384c124 0 224 -100 224 -224c0 -57 -21 -108 -56 -148c-4 -4 -7 -8 -11 -12l-10 10l-1 2c-19 18 -41 33 -65 43c-26 11 -53 16 -81 16s-55 -5 -81 -16c-24 -10 -46 -25 -65 -43l-1 -2l-10 -10c-4 4 -7 8 -11 12c-35 40 -56 91 -56 148c0 124 100 224 224 224z
-M416 79c10 23 15 48 16 73h-32v16h32c-1 25 -6 50 -16 73c-9 22 -23 42 -39 60l-27 -27l-6 6l-5 5v0h-1l27 27c-18 17 -38 31 -60 40c-23 10 -48 15 -74 16v-38h-16v38c-25 -1 -49 -6 -72 -16c-22 -10 -43 -23 -61 -40l27 -27v0v0l-6 -6l-5 -5l-27 27
-c-16 -18 -30 -38 -39 -60c-10 -23 -15 -49 -16 -74h32v-16h-32c1 -25 6 -49 16 -72c9 -20 20 -39 35 -56c40 40 96 64 157 64s117 -24 157 -64c15 17 26 36 35 56zM336 273l2 -1l-75 -84c6 -8 9 -18 9 -28c0 -26 -22 -48 -48 -48c-10 0 -19 4 -27 9l-13 -12l-11 11l12 12
-c-6 8 -9 18 -9 28c0 26 22 48 48 48c10 0 19 -3 27 -8zM224 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-ios-speedometer" unicode="&#xf4b0;"
-d="M385 169v-15h30c-1 -22 -6 -44 -15 -65c-8 -18 -19 -35 -32 -50c-39 37 -90 58 -144 58s-105 -21 -144 -58c-13 15 -24 32 -32 50c-9 21 -14 43 -15 65h28h1v16h-29c1 23 6 45 15 66c9 20 20 38 35 54l25 -24l10 10l1 1v0v0l-25 25c16 15 36 26 56 35c21 9 43 14 66 15
-v-34h14h1v34c23 -1 46 -6 67 -15s39 -20 55 -35l-24 -25l11 -11l25 25c15 -16 26 -35 35 -55c9 -21 14 -43 15 -66h-30v-1zM272 160c0 10 -3 20 -9 28l63 76l-2 1l-73 -65c-8 5 -17 8 -27 8c-26 0 -48 -22 -48 -48c0 -10 3 -20 9 -28l-12 -12l11 -11l13 12c8 -5 17 -9 27 -9
-c26 0 48 22 48 48zM224 384c124 0 224 -100 224 -224c0 -57 -21 -108 -56 -148c-4 -4 -7 -8 -11 -12h-23c-32 39 -80 64 -134 64s-102 -25 -134 -64h-23c-4 4 -7 8 -11 12c-35 40 -56 91 -56 148c0 124 100 224 224 224zM379 27c34 37 52 86 52 136c0 55 -22 106 -61 145
-s-91 60 -146 60s-107 -21 -146 -60s-61 -90 -61 -145c0 -50 18 -99 52 -136l10 -10l1 -1v1l9 9l1 1v0c17 17 38 30 60 39c24 10 48 15 74 15s50 -5 74 -15c22 -9 43 -22 60 -39v0l1 -1l9 -9v-1l1 1zM192 160c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32s-32 11 -32 32z
-" />
- <glyph glyph-name="ion-ios-star-half" unicode="&#xf4b1;"
-d="M140 143l-140 98h171l53 159l53 -159h171l-140 -98l54 -159l-138 99l-138 -99zM224 347v-244l107 -76l-43 122l108 75h-131z" />
- <glyph glyph-name="ion-ios-star-outline" unicode="&#xf4b2;"
-d="M448 241l-140 -98l54 -159l-138 99l-138 -99l54 159l-140 98h171l53 159l53 -159h171zM331 27l-43 122l108 75h-131l-41 123l-41 -123h-131l108 -75l-43 -122l107 76z" />
- <glyph glyph-name="ion-ios-star" unicode="&#xf4b3;"
-d="M448 241l-140 -98l54 -159l-138 99l-138 -99l54 159l-140 98h171l53 159l53 -159h171z" />
- <glyph glyph-name="ion-ios-stopwatch-outline" unicode="&#xf4b4;" horiz-adv-x="384"
-d="M334 301c32 -35 50 -80 50 -128c0 -104 -86 -189 -192 -189s-192 85 -192 189c0 48 18 94 51 129l1 1h-18l-8 -8l-23 23l41 40l23 -22l-9 -9v-18c31 30 72 50 116 53h2v38h32v-38c43 -4 82 -21 113 -49l5 -5v19l-9 9l23 22l41 -40l-22 -23l-9 8h-18zM192 2
-c96 0 173 77 173 171s-77 171 -173 171c-95 0 -173 -77 -173 -171s77 -171 173 -171zM200 191c14 -4 24 -17 24 -31c0 -15 -10 -26 -24 -30l-8 -18v0l-8 18c-14 4 -24 15 -24 30c0 14 12 27 24 31v129h16v-129z" />
- <glyph glyph-name="ion-ios-stopwatch" unicode="&#xf4b5;" horiz-adv-x="384"
-d="M334 301c32 -35 50 -80 50 -128c0 -104 -86 -189 -192 -189s-192 85 -192 189c0 48 18 94 51 129l1 1h-18l-8 -8l-23 23l41 40l23 -22l-9 -9v-18c31 30 72 50 116 53h2v38h32v-38c43 -4 82 -21 113 -49l5 -5v19l-9 9l23 22l41 -40l-22 -23l-9 8h-18zM200 130
-c14 4 24 15 24 30c0 14 -10 27 -24 31v129h-16v-129c-12 -4 -24 -17 -24 -31c0 -15 10 -26 24 -30l8 -18z" />
- <glyph glyph-name="ion-ios-sunny-outline" unicode="&#xf4b6;" horiz-adv-x="320"
-d="M151 296v56h18v-56h-18zM151 32v60h18v-60h-18zM264 183v18h56v-18h-56zM0 183v18h60v-18h-60zM240 130l34 -34l-12 -12l-33 34zM64 306l34 -33l-12 -12l-34 34zM229 272l33 34l12 -12l-34 -33zM52 96l34 34l11 -12l-33 -34zM160 116c-42 0 -76 34 -76 76s34 76 76 76
-s76 -34 76 -76s-34 -76 -76 -76zM160 251c-32 0 -59 -27 -59 -59s27 -59 59 -59s59 27 59 59s-27 59 -59 59z" />
- <glyph glyph-name="ion-ios-sunny" unicode="&#xf4b7;" horiz-adv-x="320"
-d="M151 296v56h18v-56h-18zM151 32v60h18v-60h-18zM264 183v18h56v-18h-56zM0 183v18h60v-18h-60zM240 130l34 -34l-12 -12l-33 34zM64 306l34 -33l-12 -12l-34 34zM229 272l33 34l12 -12l-34 -33zM52 96l34 34l11 -12l-33 -34zM160 116c-42 0 -76 34 -76 76s34 76 76 76
-s76 -34 76 -76s-34 -76 -76 -76z" />
- <glyph glyph-name="ion-ios-telephone-outline" unicode="&#xf4b8;" horiz-adv-x="352"
-d="M336 112c16 -16 26 -35 0 -66c-25 -30 -42 -30 -64 -30c-24 0 -58 14 -93 40c-32 23 -46 34 -78 67c-34 35 -55 64 -79 107c-27 50 -24 74 -18 92c4 12 14 24 28 33l1 1c6 4 18 12 32 12c13 0 24 -6 34 -18l1 -1c11 -14 24 -31 32 -47c10 -21 10 -38 -1 -53
-c-9 -12 -12 -19 -12 -23s5 -9 13 -18l1 -1c16 -18 20 -23 26 -29c1 -1 3 -2 4 -3l2 -2c7 -7 11 -12 29 -28l1 -1c7 -6 9 -8 12 -8c5 0 16 7 29 15c4 3 11 5 17 5c27 0 68 -29 83 -44zM324 57c19 22 13 31 1 43c-13 14 -50 39 -72 39c-3 0 -6 -1 -8 -2
-c-19 -12 -28 -18 -37 -18s-15 6 -23 13h-1c-19 16 -23 21 -30 29l-2 2c-1 1 -3 2 -4 3c-6 6 -11 12 -27 30v1c-10 11 -17 18 -18 28s5 20 16 34c15 20 -5 48 -31 79l-1 1c-7 8 -14 12 -22 12c-10 0 -18 -6 -23 -9c-1 0 -2 -1 -2 -1c-11 -7 -18 -16 -21 -24
-c-5 -16 -7 -35 17 -79c23 -42 43 -70 76 -104c31 -32 45 -42 76 -64c32 -23 64 -38 84 -38c21 0 32 1 52 25z" />
- <glyph glyph-name="ion-ios-telephone" unicode="&#xf4b9;" horiz-adv-x="352"
-d="M336 112c16 -16 26 -35 0 -66c-25 -30 -42 -30 -64 -30c-24 0 -58 14 -93 40c-32 23 -46 34 -78 67c-34 35 -55 64 -79 107c-27 50 -24 74 -18 92c4 12 14 24 28 33l1 1c6 4 18 12 32 12c13 0 24 -6 34 -18l1 -1c11 -14 24 -31 32 -47c10 -21 10 -38 -1 -53
-c-9 -12 -12 -19 -12 -23s5 -9 13 -18l1 -1c16 -18 20 -23 26 -29c1 -1 3 -2 4 -3l2 -2c7 -7 11 -12 29 -28l1 -1c7 -6 9 -8 12 -8c5 0 16 7 29 15c4 3 11 5 17 5c27 0 68 -29 83 -44z" />
- <glyph glyph-name="ion-ios-tennisball-outline" unicode="&#xf4ba;" horiz-adv-x="416"
-d="M416 192v-8v0c0 -5 0 -11 -1 -16v0c-11 -97 -90 -174 -187 -183v0h-4h-2s-1 -1 -2 -1h-3h-1h-8c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208zM399 192c0 105 -86 191 -191 191c-3 0 -5 -1 -8 -1c1 -24 6 -46 15 -68c10 -26 26 -49 46 -69s43 -36 69 -46
-c22 -9 44 -14 68 -15c0 3 1 5 1 8zM17 192c0 -105 86 -191 191 -191h4c-1 22 -7 45 -15 66c-10 26 -26 48 -46 68s-42 36 -68 46c-21 8 -44 14 -66 15v-4zM228 2c88 9 158 78 169 166c-54 3 -106 25 -147 66s-63 93 -66 147c-88 -11 -157 -81 -166 -169
-c53 -3 105 -25 145 -65s62 -92 65 -145z" />
- <glyph glyph-name="ion-ios-tennisball" unicode="&#xf4bb;" horiz-adv-x="416"
-d="M0 196v0v0v0zM212 -16h1h-1v0zM208 400c115 0 208 -93 208 -208c0 -8 0 -16 -1 -24v0v0c-11 -97 -90 -174 -187 -183v0v0c-6 -1 -13 -1 -20 -1c-115 0 -208 93 -208 208v4v0v0c0 6 0 11 1 16v0v0c9 97 86 176 183 187v0v0c6 1 11 1 16 1v0v0h8zM83 181
-c26 -10 48 -26 68 -46s36 -42 46 -68c8 -21 14 -44 15 -66c5 0 11 0 16 1c-3 53 -25 105 -65 145s-92 62 -145 65c-1 -5 -1 -11 -1 -16c22 -1 45 -7 66 -15zM250 234c41 -41 93 -63 147 -66c1 5 1 11 1 16c-24 1 -46 6 -68 15c-26 10 -49 26 -69 46s-36 43 -46 69
-c-9 22 -14 44 -15 68c-5 0 -11 0 -16 -1c3 -54 25 -106 66 -147z" />
- <glyph glyph-name="ion-ios-thunderstorm-outline" unicode="&#xf4bc;" horiz-adv-x="274"
-d="M193 176l-88 -128l29 96h-52l15 80h72l-16 -48h40zM209 275c36 0 65 -29 65 -65s-29 -66 -65 -66h-8v17h8c27 0 49 22 49 49s-22 50 -49 50h-6l-14 -2l-3 14c-3 14 -11 26 -22 35s-25 13 -39 13c-34 0 -63 -27 -63 -62v-12s1 -9 1 -9c-5 0 -12 -2 -14 -2
-c-19 -3 -33 -18 -33 -37c0 -10 3 -19 10 -26s16 -11 26 -11h11v-17h-11c-28 0 -52 24 -52 53c0 27 21 51 47 53v8c0 43 35 78 78 78c37 0 68 -26 76 -61h8z" />
- <glyph glyph-name="ion-ios-thunderstorm" unicode="&#xf4bd;" horiz-adv-x="274"
-d="M153 176h40l-22 -32l-66 -96l29 96h-52l15 80h72zM84 240h107l-16 -48h18h30l-33 -48h19c36 0 65 30 65 66s-29 65 -65 65h-8c-8 35 -39 61 -76 61c-43 0 -78 -35 -78 -78v-8c-26 -2 -47 -26 -47 -53c0 -29 24 -53 52 -53h14z" />
- <glyph glyph-name="ion-ios-time-outline" unicode="&#xf4be;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM371 45c19 19 35 41 45 66c11 26 16 53 16 81s-5 55 -16 81c-10 25 -26 47 -45 66s-41 35 -66 45c-26 11 -53 16 -81 16s-55 -5 -81 -16c-25 -10 -47 -26 -66 -45
-s-35 -41 -45 -66c-11 -26 -16 -53 -16 -81s5 -55 16 -81c10 -25 26 -47 45 -66s41 -35 66 -45c26 -11 53 -16 81 -16s55 5 81 16c25 10 47 26 66 45zM216 368c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM216 16c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM392 192
-c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM40 192c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM128 344c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM304 40c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM368 280c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8
-zM64 104c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM64 280c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM368 104c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM304 344c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM128 40c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8
-s-8 3 -8 8zM238 200c4 -8 2 -18 -6 -22v-122c0 -4 -4 -8 -8 -8s-8 4 -8 8v122c-2 1 -4 4 -6 6c-3 5 -3 11 0 16l-37 63c-2 4 -1 9 3 11s8 1 10 -3l38 -63c5 0 11 -3 14 -8z" />
- <glyph glyph-name="ion-ios-time" unicode="&#xf4bf;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM224 376c-4 0 -8 -4 -8 -8s4 -8 8 -8s8 4 8 8s-4 8 -8 8zM48 184c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM76 97c4 2 4 7 2 11s-6 5 -10 3s-5 -7 -3 -11s7 -5 11 -3z
-M78 276c2 4 2 9 -2 11s-9 1 -11 -3s-1 -9 3 -11s8 -1 10 3zM132 351c-4 -2 -5 -7 -3 -11s7 -4 11 -2s5 6 3 10s-7 5 -11 3zM143 36c2 4 1 8 -3 10s-9 2 -11 -2s-1 -9 3 -11s9 -1 11 3zM224 8c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM232 178c8 4 10 14 6 22
-c-3 5 -9 8 -14 8l-38 64c-2 4 -7 4 -11 2s-4 -7 -2 -11l37 -63c-3 -5 -3 -11 0 -16c2 -2 4 -5 6 -6v-122c0 -4 4 -8 8 -8s8 4 8 8v122zM316 33c4 2 5 7 3 11s-7 4 -11 2s-5 -6 -3 -10s7 -5 11 -3zM319 340c2 4 1 9 -3 11s-9 1 -11 -3s-1 -8 3 -10s9 -2 11 2zM383 100
-c2 4 1 9 -3 11s-8 1 -10 -3s-2 -9 2 -11s9 -1 11 3zM380 273c4 2 5 7 3 11s-7 5 -11 3s-4 -7 -2 -11s6 -5 10 -3zM400 184c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8z" />
- <glyph glyph-name="ion-ios-timer-outline" unicode="&#xf4c0;" horiz-adv-x="416"
-d="M189 176l-1 2s-89 118 -86 120s121 -85 121 -85c1 -1 1 -2 2 -3c5 -5 8 -11 8 -18c0 -14 -11 -25 -25 -25c-8 0 -14 3 -19 9zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208c0 57 23 109 61 147l12 -12c-35 -35 -56 -82 -56 -135
-c0 -106 85 -191 191 -191s191 85 191 191c0 100 -77 183 -175 191v-95h-16v112v0v0z" />
- <glyph glyph-name="ion-ios-timer" unicode="&#xf4c1;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM102 298c-2 -2 86 -120 86 -120l1 -1c5 -6 11 -10 19 -10c14 0 25 11 25 25c0 7 -3 13 -8 18l-3 3c0 0 -117 87 -120 85zM208 1c106 0 192 85 192 191s-86 192 -192 192v-96h16v78
-c88 -9 158 -84 158 -174c0 -96 -78 -174 -174 -174s-175 78 -175 174c0 48 19 92 51 124l-11 12c-35 -35 -56 -83 -56 -136c0 -106 85 -191 191 -191z" />
- <glyph glyph-name="ion-ios-toggle-outline" unicode="&#xf4c2;"
-d="M96 128c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM96 144v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM351 160v0h-255c-44 0 -80 -36 -80 -80s36 -80 80 -80h256c44 0 80 36 80 80s-37 80 -81 80zM352 176v0
-c53 0 96 -43 96 -96s-43 -96 -96 -96h-256c-53 0 -96 43 -96 96s43 96 96 96h256zM352 352c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM352 368v0c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM97 384v0c-44 0 -81 -36 -81 -80
-s36 -80 80 -80h256c44 0 80 36 80 80s-36 80 -80 80h-255zM96 400v0h256c53 0 96 -43 96 -96s-43 -96 -96 -96h-256c-53 0 -96 43 -96 96s43 96 96 96z" />
- <glyph glyph-name="ion-ios-toggle" unicode="&#xf4c3;"
-d="M96 128c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48zM352 176c53 0 96 -43 96 -96s-43 -96 -96 -96h-256c-53 0 -96 43 -96 96s43 96 96 96h256zM96 16c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM352 256c-26 0 -48 22 -48 48
-s22 48 48 48s48 -22 48 -48s-22 -48 -48 -48zM96 208c-53 0 -96 43 -96 96s43 96 96 96h256c53 0 96 -43 96 -96s-43 -96 -96 -96h-256zM352 368c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64z" />
- <glyph glyph-name="ion-ios-trash-outline" unicode="&#xf4c4;" horiz-adv-x="288"
-d="M288 335v-15h-20l-24 -291c0 -16 -13 -29 -29 -29h-141c-16 0 -29 13 -29 29l-24 291h-21v15h80v20c0 16 13 29 29 29h70c16 0 29 -13 29 -29v-20h80zM95 355v-20h98v20c0 8 -6 14 -14 14h-70c-8 0 -14 -6 -14 -14zM230 30l23 290h-217l23 -290v0v-1c0 -8 7 -14 15 -14
-h141c8 0 15 6 15 14v1v0zM137 47v241h14v-241h-14zM208 288l-11 -241h-14l10 241h15zM94 288l11 -241h-14l-11 241h14z" />
- <glyph glyph-name="ion-ios-trash" unicode="&#xf4c5;" horiz-adv-x="288"
-d="M208 335h80v-15h-20l-24 -291c0 -16 -13 -29 -29 -29h-141c-16 0 -29 13 -29 29l-24 291h-21v15h80v20c0 16 13 29 29 29h70c16 0 29 -13 29 -29v-20zM95 355v0v-20h98v20c0 8 -6 14 -14 14h-70c-8 0 -14 -6 -14 -14zM91 47h14l-11 241h-14zM151 47v241h-14v-241h14z
-M197 47l11 241h-14l-11 -241h14z" />
- <glyph glyph-name="ion-ios-undo-outline" unicode="&#xf4c6;" horiz-adv-x="384"
-d="M384 80v-32h-10l-20 31c-20 33 -44 63 -75 77c-24 11 -47 19 -87 20v-80l-192 128l192 128v-80c63 -3 108 -21 143 -56c52 -53 49 -119 49 -136zM368 87c0 0 9 169 -192 169v65l-148 -97l148 -97v65c91 0 144 -24 192 -105z" />
- <glyph glyph-name="ion-ios-undo" unicode="&#xf4c7;" horiz-adv-x="384"
-d="M384 80v-32h-10l-20 31c-20 33 -44 63 -75 77c-24 11 -47 19 -87 20v-80l-192 128l192 128v-80c63 -3 108 -21 143 -56c52 -53 49 -119 49 -136z" />
- <glyph glyph-name="ion-ios-unlocked-outline" unicode="&#xf4c8;" horiz-adv-x="320"
-d="M160 160c18 0 32 -14 32 -32c0 -15 -10 -27 -24 -31v-33h-16v33c-14 4 -24 16 -24 31c0 18 14 32 32 32zM160 112c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM72 224h248v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-8h-16v8
-c0 49 -39 88 -88 88s-88 -39 -88 -88v-72zM304 0v208h-288v-208h288z" />
- <glyph glyph-name="ion-ios-unlocked" unicode="&#xf4c9;" horiz-adv-x="320"
-d="M160 144c9 0 16 -7 16 -16s-7 -16 -16 -16s-16 7 -16 16s7 16 16 16zM72 224h248v-240h-320v240h56v72c0 57 47 104 104 104s104 -47 104 -104v-8h-16v8c0 49 -39 88 -88 88s-88 -39 -88 -88v-72zM168 97c14 4 24 16 24 31c0 18 -14 32 -32 32s-32 -14 -32 -32
-c0 -15 10 -27 24 -31v-33h16v33z" />
- <glyph glyph-name="ion-ios-upload-outline" unicode="&#xf4ca;" horiz-adv-x="320"
-d="M192 304h128v-304h-320v304h128v-16h-112v-272h288v272h-112v16zM97 330l-11 12l74 74l74 -74l-11 -12l-55 55v-243h-16v243z" />
- <glyph glyph-name="ion-ios-upload" unicode="&#xf4cb;" horiz-adv-x="320"
-d="M168 304h152v-304h-320v304h152v-162h16v162zM168 385v-81h-16v81l-55 -55l-11 12l74 74l74 -74l-11 -12z" />
- <glyph glyph-name="ion-ios-videocam-outline" unicode="&#xf4cc;" horiz-adv-x="418"
-d="M257 320c19 0 33 -14 33 -33v-188c0 -19 -14 -35 -33 -35h-221c-19 0 -36 16 -36 35v188c0 19 17 33 36 33h221zM273 99v188c0 9 -8 16 -17 16h-221c-9 0 -18 -7 -18 -16v-188c0 -9 10 -18 19 -18h221c9 0 16 9 16 18zM320 235l98 53v-192l-98 53v86zM401 258v0l-64 -33
-v-66l64 -33v132z" />
- <glyph glyph-name="ion-ios-videocam" unicode="&#xf4cd;" horiz-adv-x="418"
-d="M257 320c19 0 33 -14 33 -33v-188c0 -19 -14 -35 -33 -35h-221c-19 0 -36 16 -36 35v188c0 19 17 33 36 33h221zM320 235l98 53v-192l-98 53v86z" />
- <glyph glyph-name="ion-ios-volume-high" unicode="&#xf4ce;" horiz-adv-x="320"
-d="M278 320c26 -36 42 -80 42 -128s-16 -92 -42 -128l-14 10c24 33 39 74 39 118s-15 85 -39 118zM224 96l-14 10c18 24 29 54 29 86s-11 62 -29 86l14 10c20 -27 32 -60 32 -96s-12 -69 -32 -96zM177 128l-13 10c12 15 18 34 18 54s-6 39 -18 54l13 10
-c14 -18 22 -40 22 -64s-8 -46 -22 -64zM58 232l70 56v-192l-70 56h-58v80h58z" />
- <glyph glyph-name="ion-ios-volume-low" unicode="&#xf4cf;" horiz-adv-x="128"
-d="M58 232l70 56v-192l-70 56h-58v80h58z" />
- <glyph glyph-name="ion-ios-wineglass-outline" unicode="&#xf4d0;" horiz-adv-x="192"
-d="M104 139v-155h72v-16h-80h-80v16h72v155c0 22 -20 39 -40 55c-8 6 -16 13 -22 19c-27 28 -26 52 -26 71v4c0 44 31 125 32 128h64h64c1 -3 32 -84 32 -128v-4c0 -19 1 -43 -26 -71c-6 -6 -14 -13 -22 -19c-20 -16 -40 -33 -40 -55zM43 400c-5 -16 -20 -63 -25 -96h156
-c-5 33 -20 80 -25 96h-53h-53zM96 175c3 0 5 0 7 2v0c9 11 20 20 31 29c8 6 15 12 20 18c22 23 22 41 22 60v4h-160v-4c0 -19 0 -37 22 -60c5 -6 12 -12 20 -18c11 -9 22 -18 31 -29v0c2 -2 4 -2 7 -2z" />
- <glyph glyph-name="ion-ios-wineglass" unicode="&#xf4d1;" horiz-adv-x="192"
-d="M104 139v-155h72v-16h-80h-80v16h72v155c0 22 -20 39 -40 55c-8 6 -16 13 -22 19c-27 28 -26 52 -26 71v4c0 44 31 125 32 128h64h64c1 -3 32 -84 32 -128v-4c0 -19 1 -43 -26 -71c-6 -6 -14 -13 -22 -19c-20 -16 -40 -33 -40 -55zM43 400c-5 -16 -20 -63 -25 -96h156
-c-5 33 -20 80 -25 96h-53h-53z" />
- <glyph glyph-name="ion-ios-world-outline" unicode="&#xf4d2;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208v0v0v0c-115 0 -208 93 -208 208s93 208 208 208v0v0v0zM216 276v-76h75c-1 31 -5 60 -11 84c-21 -5 -42 -7 -64 -8zM216 292c20 1 41 3 60 8c-14 46 -38 76 -60 82v-90zM200 382c-23 -6 -45 -36 -60 -82
-c19 -5 39 -7 60 -8v90zM200 276c-22 1 -44 3 -65 8c-6 -24 -10 -53 -11 -84h76v76zM108 200c1 32 4 62 11 88c-21 6 -41 15 -59 25c-26 -31 -41 -70 -43 -113h91zM108 184h-91c2 -43 17 -82 43 -113c19 10 38 19 59 25c-7 26 -10 56 -11 88zM124 184c1 -31 5 -60 11 -84
-c21 5 43 8 65 9v75h-76zM200 92c-21 -1 -41 -3 -60 -8c15 -46 37 -76 60 -82v90zM216 2c22 6 46 36 60 82c-19 5 -40 7 -60 8v-90zM216 109c22 -1 43 -4 64 -9c6 24 10 53 11 84h-75v-75zM308 184c-1 -32 -5 -62 -12 -88c21 -6 41 -15 60 -25c26 31 41 70 43 113h-91z
-M308 200v0h91c-2 43 -17 82 -43 113c-19 -10 -38 -19 -59 -25c7 -26 10 -56 11 -88zM344 326c-25 25 -56 44 -91 52c16 -17 29 -43 39 -74c18 6 35 13 52 22zM163 378c-35 -8 -67 -27 -91 -52c16 -9 34 -15 52 -21c10 31 23 56 39 73zM72 58c25 -25 56 -44 91 -52
-c-16 17 -30 43 -40 74c-18 -6 -35 -13 -51 -22zM253 6c35 8 66 27 91 52c-17 9 -34 16 -52 22c-10 -31 -23 -57 -39 -74z" />
- <glyph glyph-name="ion-ios-world" unicode="&#xf4d3;" horiz-adv-x="416"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208v0v0v0c-115 0 -208 93 -208 208s93 208 208 208v0v0v0zM208 1c106 0 191 85 191 191s-85 191 -191 191v0v0v0c-106 0 -191 -85 -191 -191s86 -191 191 -191v0v0v0zM274 276c6 -22 9 -48 10 -76h-68v68c20 1 39 4 58 8
-zM216 366c20 -6 41 -34 54 -75c-17 -4 -36 -6 -54 -7v82zM145 291c13 42 35 69 55 75v-82c-19 1 -37 3 -55 7zM333 315c-15 -8 -31 -15 -48 -20c-9 29 -21 52 -36 67c32 -8 61 -24 84 -47zM299 200c-1 29 -4 56 -10 80c19 6 37 14 54 23c23 -28 38 -64 40 -103h-84zM132 200
-c1 28 3 54 9 76c19 -5 39 -7 59 -8v-68h-68zM284 184c-1 -28 -4 -54 -10 -76c-19 5 -38 7 -58 8v68h68zM141 108c-6 22 -8 48 -9 76h68v-68c-20 -1 -40 -3 -59 -8zM200 18c-20 6 -42 33 -55 75c18 4 36 6 55 7v-82zM249 22c15 15 27 38 36 67c17 -5 33 -11 48 -19
-c-23 -23 -52 -40 -84 -48zM167 362c-15 -15 -27 -39 -36 -67c-16 5 -33 11 -48 19c22 23 52 40 84 48zM289 104c6 24 9 51 10 80h84c-2 -39 -17 -75 -40 -103c-17 9 -35 17 -54 23zM216 100c18 -1 37 -3 54 -7c-13 -42 -34 -69 -54 -75v82zM127 280c-6 -24 -11 -51 -11 -80
-h-83c2 39 17 75 40 103c17 -9 35 -17 54 -23zM116 184c1 -29 4 -56 10 -80c-19 -6 -36 -14 -53 -23c-23 28 -38 64 -40 103h83zM83 70c15 8 32 14 48 19c9 -28 21 -52 36 -67c-32 8 -62 25 -84 48z" />
- <glyph glyph-name="ion-ipad" unicode="&#xf1f9;" horiz-adv-x="288"
-d="M0 375c0 5 4 9 9 9h270c5 0 9 -4 9 -9v-366c0 -5 -4 -9 -9 -9h-270c-5 0 -9 4 -9 9v366zM144 10c8 0 14 6 14 14s-7 14 -14 14c-8 0 -14 -6 -14 -14s6 -14 14 -14zM32 329v-275c0 -4 3 -6 6 -6h211c3 0 7 2 7 6v275c0 4 -4 7 -7 7h-211c-3 0 -6 -3 -6 -7z" />
- <glyph glyph-name="ion-iphone" unicode="&#xf1fa;" horiz-adv-x="192"
-d="M168 384c13 0 24 -11 24 -24v-336c0 -13 -11 -24 -24 -24h-144c-13 0 -24 11 -24 24v336c0 13 11 24 24 24h144zM80 348v0c0 -2 2 -4 4 -4h24c2 0 4 2 4 4v0c0 2 -2 4 -4 4h-24c-2 0 -4 -2 -4 -4zM68 352c-2 0 -4 -2 -4 -4s2 -4 4 -4s4 2 4 4s-2 4 -4 4zM96 16
-c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM176 64v256h-160v-256h160z" />
- <glyph glyph-name="ion-ipod" unicode="&#xf1fb;" horiz-adv-x="224"
-d="M112 137c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM196 384c15 0 28 -12 28 -28v-328c0 -16 -13 -28 -28 -28h-168c-15 0 -28 12 -28 28v328c0 16 13 28 28 28h168zM112 32c40 0 72 32 72 72s-32 72 -72 72s-72 -32 -72 -72s32 -72 72 -72z
-M192 221v118c-1 7 -6 12 -12 13h-136c-7 -1 -12 -7 -12 -15v-114c0 -8 6 -15 14 -15h131c8 0 14 5 15 13z" />
- <glyph glyph-name="ion-jet" unicode="&#xf295;" horiz-adv-x="326"
-d="M222 80l-2 -13l53 -58l-18 -27l-74 9l-18 -55l-19 55l-73 -9l-18 27l53 58l-2 13l-104 -35l3 53l114 103s26 173 28 192c5 40 18 55 18 55s13 -15 18 -55c2 -19 28 -192 28 -192l114 -103l3 -53z" />
- <glyph glyph-name="ion-key" unicode="&#xf296;" horiz-adv-x="192"
-d="M144 147c28 -17 48 -48 48 -83c0 -53 -43 -96 -96 -96s-96 43 -96 96c0 36 19 67 48 84c0 0 7 16 12 41c0 4 11 6 11 12v20c0 5 -7 9 -7 11v8v8c0 2 0 4 1 6c0 1 1 1 1 2l2 1l4 4v1c2 2 3 4 3 6c0 1 1 8 1 9c0 3 -2 6 -4 8l-1 1l-4 4v0l-1 1v0c-2 2 -3 5 -3 8v7
-c0 3 2 7 4 9v0l5 5v0c2 2 4 3 4 6v24c0 3 -2 6 -4 8v1l-4 4l-1 1c-2 2 -3 5 -3 8v18c0 11 0 19 9 23c3 1 14 3 23 3c20 0 30 -8 32 -36c0 0 7 -81 9 -143s7 -90 7 -90zM96 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-knife" unicode="&#xf297;" horiz-adv-x="64"
-d="M62 416c2 0 2 -1 2 -6v-412c0 -15 -10 -30 -24 -30v0v0c-14 0 -24 15 -24 30c1 19 14 83 16 130v0c1 30 -32 31 -32 70c0 134 35 191 54 214c2 2 5 4 8 4z" />
- <glyph glyph-name="ion-laptop" unicode="&#xf1fc;" horiz-adv-x="512"
-d="M480 342v-262h-448v262c0 6 4 10 10 10h428c6 0 10 -4 10 -10zM448 112v208h-384v-208h384zM0 59v5h512v-5c-70 -20 -116 -27 -256 -27s-186 7 -256 27z" />
- <glyph glyph-name="ion-leaf" unicode="&#xf1fd;" horiz-adv-x="422"
-d="M412 69c18 -3 10 -41 -5 -39c0 0 -21 -1 -63 12c0 0 -16 -19 -39 -30c-26 -12 -118 -33 -197 38c-108 97 -120 354 -100 333c86 -90 197 -47 270 -106c55 -44 88 -127 77 -192c0 0 5 -8 57 -16zM316 65c5 5 10 16 10 24c-161 52 -252 160 -252 160s104 -143 242 -184z
-" />
- <glyph glyph-name="ion-levels" unicode="&#xf298;" horiz-adv-x="350"
-d="M46 349c11 -5 18 -16 18 -29s-7 -24 -18 -29v-275c0 -9 -7 -16 -16 -16s-16 7 -16 16v278c-8 6 -14 15 -14 26s6 20 14 26v22c0 9 7 16 16 16s16 -7 16 -16v-19zM142 155c9 -6 15 -16 15 -27s-6 -21 -15 -27v-85c0 -9 -7 -16 -16 -16s-16 7 -16 16v84
-c-10 5 -17 16 -17 28s7 23 17 28v212c0 9 7 16 16 16s16 -7 16 -16v-213zM238 285c10 -6 16 -16 16 -28s-6 -22 -16 -28v-213c0 -9 -7 -16 -16 -16s-16 7 -16 16v213c-10 6 -16 16 -16 28s6 22 16 28v83c0 9 7 16 16 16s16 -7 16 -16v-83zM350 65c0 -12 -6 -22 -16 -28v-21
-c0 -9 -7 -16 -16 -16s-16 7 -16 16v21c-10 6 -16 16 -16 28s6 22 16 28v275c0 9 7 16 16 16s16 -7 16 -16v-275c10 -6 16 -16 16 -28z" />
- <glyph glyph-name="ion-lightbulb" unicode="&#xf299;" horiz-adv-x="256"
-d="M128 416c71 0 128 -56 128 -124c0 -5 0 -9 -1 -14s-2 -11 -3 -16v-2c-17 -63 -45 -71 -59 -167v-1c-2 -9 -10 -12 -20 -12h-90c-10 0 -18 3 -20 12v1c-14 96 -42 104 -59 167v2c-1 5 -2 11 -3 16s-1 9 -1 14c0 68 57 124 128 124zM190 52v-1c-2 -3 -3 -4 -3 -7s1 -5 3 -8
-v-1c1 -2 2 -3 2 -5s-1 -4 -2 -6v-1c-2 -3 -3 -4 -3 -7s1 -5 3 -8v-1c1 -2 2 -4 2 -6c0 -5 -4 -9 -10 -11h-1c-6 -1 -13 -2 -19 -3h-2c-6 -1 -11 -5 -14 -9v0c-4 -5 -10 -10 -18 -10s-15 6 -19 11v0c-3 4 -7 7 -13 8h-2c-6 1 -13 2 -19 3h-1c-6 2 -10 6 -10 11c0 2 1 4 2 6v1
-c2 2 3 4 3 7s-1 5 -3 8v1c-1 2 -2 4 -2 6s1 3 2 5v1c2 3 3 5 3 8s-1 4 -3 7v1v0c-1 2 -2 4 -2 6c0 4 -1 6 7 6h114c8 0 7 -2 7 -6c0 -2 -1 -4 -2 -6v0z" />
- <glyph glyph-name="ion-link" unicode="&#xf1fe;" horiz-adv-x="384"
-d="M192 240v0v0v0zM304 288c44 0 80 -36 80 -80v-32c0 -44 -36 -80 -80 -80h-112c-33 0 -60 20 -73 48c-4 10 -7 20 -7 32v32h48v-32c0 -18 14 -32 32 -32h112c18 0 32 14 32 32v32c0 18 -14 32 -32 32v0h-16c-6 31 -32 48 -32 48h48zM266 240c4 -10 6 -21 6 -32v-32v0h-48
-v0v32c0 18 -14 32 -32 32v0h-112c-18 0 -32 -14 -32 -32v-32c0 -18 14 -32 32 -32h16c6 -31 32 -48 32 -48h-48c-44 0 -80 36 -80 80v32c0 44 36 80 80 80h112c33 0 62 -20 74 -48z" />
- <glyph glyph-name="ion-load-a" unicode="&#xf29a;" horiz-adv-x="384"
-d="M144 352c0 43 21 64 64 64s64 -21 64 -64s-21 -64 -64 -64s-64 21 -64 64zM0 192c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM312 304c0 5 3 8 8 8s8 -3 8 -8s-3 -8 -8 -8s-8 3 -8 8zM132 340c10 -10 15 -22 15 -36s-5 -26 -15 -36s-22 -15 -36 -15
-s-26 5 -36 15s-15 22 -15 36s5 26 15 36s22 15 36 15s26 -5 36 -15zM352 192c0 11 5 16 16 16s16 -5 16 -16s-5 -16 -16 -16s-16 5 -16 16zM297 79c0 16 8 24 24 24s24 -8 24 -24s-8 -24 -24 -24s-24 8 -24 24zM176 32c0 21 11 32 32 32s32 -11 32 -32s-11 -32 -32 -32
-s-32 11 -32 32zM56 80c0 27 13 40 40 40s40 -13 40 -40s-13 -40 -40 -40s-40 13 -40 40z" />
- <glyph glyph-name="ion-load-b" unicode="&#xf29b;"
-d="M256 288c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM224 128v0c18 0 32 -14 32 -32v-96c0 -18 -14 -32 -32 -32s-32 14 -32 32v96c0 18 14 32 32 32zM416 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32h-96
-c-18 0 -32 14 -32 32s14 32 32 32h96zM128 224v0c18 0 32 -14 32 -32s-14 -32 -32 -32h-96c-18 0 -32 14 -32 32s14 32 32 32h96zM314 237c-12 -12 -33 -12 -45 0v0c-12 12 -12 34 0 46l68 67c12 12 33 12 45 0v0c12 -12 12 -33 0 -45zM179 147v0c12 -12 12 -33 0 -46
-l-68 -67c-12 -12 -33 -12 -45 0s-12 33 0 45l67 68c12 12 34 12 46 0zM382 79v0c12 -12 12 -33 0 -45s-33 -12 -45 0l-68 68c-12 12 -12 33 0 45s33 12 45 0zM179 282v0c12 -12 12 -33 0 -45s-34 -12 -46 0l-67 68c-12 12 -12 33 0 45s33 12 45 0z" />
- <glyph glyph-name="ion-load-c" unicode="&#xf29c;"
-d="M448 222c0 -3 0 -6 -1 -9c-4 -8 -15 -12 -23 -7c-4 2 -6 7 -7 11c-1 5 -1 9 -2 14c-4 20 -12 40 -22 58c-12 21 -28 41 -47 56c-18 15 -40 26 -62 33c-21 6 -42 9 -64 9h-4c-3 0 -6 -1 -9 -1c-6 0 -14 -1 -20 -2c-13 -2 -25 -6 -37 -11c-21 -8 -40 -20 -57 -35
-s-31 -33 -42 -52c-12 -22 -20 -45 -24 -70c-2 -11 -2 -23 -2 -34c0 -6 0 -11 1 -16c1 -6 2 -13 3 -19c5 -24 14 -47 28 -67c13 -20 29 -38 48 -52c20 -15 42 -26 65 -33c25 -7 50 -9 76 -7c25 2 50 9 73 20c11 5 22 12 32 19s19 15 27 24c4 4 8 9 12 14s7 10 10 15
-c6 10 12 20 17 31c4 8 8 16 11 25c2 4 3 9 4 13s1 7 2 11c1 -9 1 -18 -1 -26c-1 -5 -2 -11 -4 -16c-1 -5 -3 -10 -5 -15c-4 -10 -8 -19 -13 -28c-6 -11 -12 -21 -20 -30s-16 -18 -25 -26c-18 -15 -40 -27 -62 -36c-23 -9 -48 -14 -73 -15s-51 3 -75 11c-23 7 -45 19 -65 33
-c-19 14 -36 31 -50 50c-7 10 -13 20 -18 31s-9 21 -13 33c-6 18 -9 37 -10 56c-1 20 1 39 5 58c5 24 15 47 28 68c12 19 26 35 42 50s35 27 55 36c23 11 48 19 74 21c10 1 19 1 29 1c13 0 26 -2 38 -4c24 -5 47 -14 68 -26s41 -29 57 -48c15 -18 27 -37 36 -58
-c4 -10 7 -21 10 -32c2 -8 5 -17 6 -26z" />
- <glyph glyph-name="ion-load-d" unicode="&#xf29d;" horiz-adv-x="384"
-d="M368 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-80c-9 0 -16 7 -16 16s7 16 16 16h80zM112 192c0 -9 -7 -16 -16 -16h-80c-9 0 -16 7 -16 16s7 16 16 16h80c9 0 16 -7 16 -16zM192 112c9 0 16 -7 16 -16v-80c0 -9 -7 -16 -16 -16s-16 7 -16 16v80c0 9 7 16 16 16zM192 384
-c9 0 16 -7 16 -16v-80c0 -9 -7 -16 -16 -16s-16 7 -16 16v80c0 9 7 16 16 16zM261 232c-4 8 -2 18 6 22l69 40c8 4 18 2 22 -6s2 -18 -6 -22l-69 -40c-8 -4 -18 -2 -22 6zM123 152c4 -8 2 -18 -6 -22l-69 -40c-8 -4 -18 -2 -22 6s-2 18 6 22l69 40c8 4 18 2 22 -6zM254 117
-l40 -69c4 -8 2 -18 -6 -22s-18 -2 -22 6l-40 69c-4 8 -2 18 6 22s18 2 22 -6zM118 352l40 -69c4 -8 2 -18 -6 -22s-18 -2 -22 6l-40 69c-4 8 -2 18 6 22s18 2 22 -6zM232 261c-8 4 -10 14 -6 22l40 69c4 8 14 10 22 6s10 -14 6 -22l-40 -69c-4 -8 -14 -10 -22 -6zM152 123
-c8 -4 10 -14 6 -22l-40 -69c-4 -8 -14 -10 -22 -6s-10 14 -6 22l40 69c4 8 14 10 22 6zM352 118c8 -4 10 -14 6 -22s-14 -10 -22 -6l-69 40c-8 4 -10 14 -6 22s14 10 22 6zM32 266c-8 4 -10 14 -6 22s14 10 22 6l69 -40c8 -4 10 -14 6 -22s-14 -10 -22 -6z" />
- <glyph glyph-name="ion-location" unicode="&#xf1ff;" horiz-adv-x="239"
-d="M119 384c66 0 120 -54 120 -120c0 -115 -120 -264 -120 -264s-119 149 -119 264c0 66 53 120 119 120zM119 206c31 0 57 25 57 56s-26 57 -57 57s-56 -26 -56 -57s25 -56 56 -56z" />
- <glyph glyph-name="ion-lock-combination" unicode="&#xf4d4;" horiz-adv-x="384"
-d="M320 271c39 -35 64 -86 64 -143c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 57 25 108 64 143v49c0 71 57 128 128 128s128 -57 128 -128v-49zM96 320v-26c28 16 61 26 96 26s68 -10 96 -26v26c0 53 -43 96 -96 96s-96 -43 -96 -96zM192 -32c88 0 160 72 160 160
-s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM192 272c80 0 144 -64 144 -144s-64 -144 -144 -144s-144 64 -144 144s64 144 144 144zM315 95c2 9 4 18 4 29h-7v7h8c0 11 -2 20 -5 30l-25 -7l-4 12l25 8c-4 10 -8 18 -14 26l-11 -8l-4 6l11 8c-6 8 -13 16 -21 22
-l-15 -21l-11 8l15 20c-8 6 -17 11 -27 14l-4 -13l-6 2l5 13c-9 3 -20 5 -29 5v-13v-6h-16v6v13c-11 -1 -19 -2 -29 -5l4 -12l-6 -2l-4 12c-10 -3 -19 -8 -27 -14l15 -20l-10 -8l-15 21c-8 -6 -16 -14 -22 -22l11 -8l-4 -5l-10 8c-6 -8 -10 -17 -14 -27l24 -8l-5 -12l-25 7
-c-3 -10 -3 -19 -3 -30h6v-7h-5c0 -11 2 -20 4 -29l24 7l4 -12l-24 -8c4 -10 8 -19 14 -27l9 7l4 -5l-9 -7c6 -8 13 -16 21 -22l15 21l10 -8l-15 -20c8 -5 17 -11 27 -14l3 11l7 -2l-4 -11c10 -3 18 -4 29 -5v13v6h16v-6v-13c9 1 19 2 29 5l-5 12l6 2l4 -12c10 3 19 8 27 14
-l-15 20l11 8l15 -21c8 6 15 14 21 22l-11 7l4 6l10 -8c6 8 11 17 15 27l-25 8l4 12zM111 128c0 54 27 81 81 81s81 -27 81 -81s-27 -81 -81 -81s-81 27 -81 81z" />
- <glyph glyph-name="ion-locked" unicode="&#xf200;" horiz-adv-x="384"
-d="M22 -32c-12 0 -22 10 -22 22v212c0 12 10 22 22 22h3h19v31c0 42 17 87 43 115s64 46 105 46v0v0c41 0 79 -18 105 -46s43 -73 43 -115v-31h22c12 0 22 -10 22 -22v-212c0 -12 -10 -22 -22 -22h-340zM97 255v-31h17h155h18v31c0 27 -10 61 -28 80v0v1
-c-18 19 -42 29 -67 29v0v0c-25 0 -49 -10 -67 -29v-1v0c-18 -19 -28 -53 -28 -80z" />
- <glyph glyph-name="ion-log-in" unicode="&#xf29e;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224c-96 0 -177 60 -209 144h34c9 -20 23 -40 39 -56c36 -36 85 -56 136 -56s100 20 136 56s56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56c-16 -16 -30 -36 -39 -56h-34c32 84 113 144 209 144z
-M175 124l52 52h-227v32h227l-52 52l22 23l91 -91l-91 -91z" />
- <glyph glyph-name="ion-log-out" unicode="&#xf29f;"
-d="M335 124l52 52h-227v32h227l-52 52l22 23l91 -91l-91 -91zM359 56c3 3 6 5 8 8h41c-40 -58 -108 -96 -184 -96c-124 0 -224 100 -224 224s100 224 224 224c76 0 144 -38 184 -96h-41c-2 3 -5 5 -8 8c-36 36 -84 56 -135 56s-100 -20 -136 -56s-56 -85 -56 -136
-s20 -100 56 -136s85 -56 136 -56s99 20 135 56z" />
- <glyph glyph-name="ion-loop" unicode="&#xf201;" horiz-adv-x="334"
-d="M184 148v-58c49 8 86 50 86 102c0 16 -4 30 -10 44c-3 6 -5 12 -9 17l47 43c1 -1 2 -3 3 -4c21 -28 33 -62 33 -100v-4c-2 -72 -47 -131 -111 -154c-12 -4 -26 -8 -39 -9v-57l-76 67l-26 23l44 39zM0 196c2 72 48 133 113 155c12 4 24 7 37 8v57l76 -67l26 -23l-44 -39
-l-59 -51l1 58c-49 -8 -86 -51 -86 -102c0 -16 4 -31 10 -45c3 -6 5 -11 9 -16l-47 -44c-1 2 -2 3 -3 5c-20 28 -33 63 -33 100v4z" />
- <glyph glyph-name="ion-magnet" unicode="&#xf2a0;" horiz-adv-x="384"
-d="M192 416c115 0 192 -78 192 -200c0 -49 -3 -77 -15 -128c-16 -66 -39 -113 -39 -113v-1c-2 -3 -6 -6 -10 -6c-1 0 -3 1 -4 1l-2 1l-50 20l-2 1c-3 2 -5 5 -5 9c0 1 0 3 1 4v1c7 16 27 59 37 101s13 63 13 108c0 71 -52 122 -116 122s-116 -51 -116 -122
-c0 -45 3 -66 13 -108s30 -85 37 -101v-1c1 -1 1 -3 1 -4c0 -4 -2 -7 -5 -9l-2 -1l-50 -20l-2 -1c-1 0 -3 -1 -4 -1c-4 0 -8 3 -10 6v1s-24 47 -40 113c-12 51 -14 79 -14 128c0 122 77 200 192 200zM109 4c-9 19 -27 59 -36 98l-42 -12c13 -53 30 -92 35 -104l43 17v1z
-M317 -14c5 12 23 51 36 104l-43 12c-9 -39 -26 -79 -35 -98v-1z" />
- <glyph glyph-name="ion-male" unicode="&#xf2a1;"
-d="M448 256l-63 63l-69 -69c22 -30 36 -66 36 -106c0 -97 -79 -176 -176 -176s-176 79 -176 176s79 176 176 176c40 0 76 -14 106 -36l69 69l-63 63h160v-160zM266 54c24 24 38 56 38 90s-14 66 -38 90s-56 38 -90 38s-66 -14 -90 -38s-38 -56 -38 -90s14 -66 38 -90
-s56 -38 90 -38s66 14 90 38z" />
- <glyph glyph-name="ion-man" unicode="&#xf202;" horiz-adv-x="168"
-d="M84 341c-21 0 -37 17 -37 38s16 37 37 37s37 -16 37 -37s-16 -38 -37 -38zM121 333c28 0 47 -24 47 -48v-114c0 -22 -32 -22 -32 0v105h-5v-286c0 -28 -41 -31 -43 0v165h-1h-7v-165c-1 -29 -43 -30 -43 0v286h-6v-105c0 -22 -31 -22 -31 0v114c0 24 19 48 47 48h37h37z
-" />
- <glyph glyph-name="ion-map" unicode="&#xf203;"
-d="M441 311c4 -3 7 -8 7 -14v-281c0 -6 -2 -11 -7 -14c-2 -1 -5 -2 -7 -2c-3 0 -6 0 -8 2l-97 66l-97 -66c-5 -3 -10 -3 -15 0l-97 66l-97 -66c-5 -3 -10 -3 -15 0s-8 8 -8 14v281c0 6 3 11 7 14l105 71c5 3 10 3 15 0l97 -66l98 66c5 3 10 3 15 0zM103 95v242l-71 -50v-242
-zM135 95l73 -49v129l-4 -11c-7 2 -13 6 -20 10l8 13c5 -3 11 -6 16 -8v109l-73 49v-101c4 -2 9 -4 13 -7l-10 -13c-1 1 -2 1 -3 2v-123zM240 46l73 49v109c0 -1 -1 -1 -1 -2l-6 -6l-12 11l6 6c3 3 5 7 8 10l5 -5v119l-73 -49v-112h7l3 -15c-3 0 -6 -1 -9 -1h-1v-114zM416 46
-v242l-71 49v-88c3 1 5 1 8 2l4 -16c-4 -1 -8 -1 -12 -3v-137zM97 227c-3 -1 -11 -5 -14 -7l-11 12c4 3 8 6 12 8c3 2 6 3 9 4l5 -15c-2 -1 1 -1 -1 -2zM265 182c5 3 10 5 15 10l11 -12c-6 -6 -12 -10 -19 -13zM67 192v-1l-15 5v1c2 7 4 13 9 20l13 -9c-4 -5 -5 -10 -7 -16z
-M166 210c3 -4 7 -8 11 -11l-11 -12c-4 4 -8 9 -12 13l-3 3l12 11c1 -1 2 -3 3 -4zM376 218l-11 12l10 10l-10 10l11 12l10 -11l11 11l11 -12l-10 -10l10 -10l-11 -12l-11 11z" />
- <glyph glyph-name="ion-medkit" unicode="&#xf2a2;"
-d="M440 304c4 0 8 -4 8 -8v-288c0 -4 -4 -8 -8 -8h-432c-4 0 -8 4 -8 8v288c0 4 4 8 8 8h120v31c1 28 22 49 51 49h45h45c30 0 50 -21 51 -49v-31h120zM160 331v-27h128v27v1v1c0 10 -9 19 -19 19h-45h-45c-10 0 -19 -9 -19 -19v-1v-1zM320 128v64h-64v64h-64v-64h-64v-64
-h64v-64h64v64h64z" />
- <glyph glyph-name="ion-merge" unicode="&#xf33f;" horiz-adv-x="384"
-d="M320 224c35 0 64 -29 64 -64s-29 -64 -64 -64c-24 0 -44 13 -55 32h-10c-61 0 -115 25 -159 74v-115c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64c0 -19 -8 -37 -22 -49
-c4 -9 17 -35 37 -58c32 -35 70 -53 112 -53h10c11 19 31 32 55 32zM64 384c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM64 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM320 128c18 0 32 14 32 32s-14 32 -32 32
-s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-mic-a" unicode="&#xf204;" horiz-adv-x="288"
-d="M0 210c0 10 9 19 20 19s19 -9 19 -19v-14c0 -28 12 -53 31 -72s45 -31 74 -31s55 12 74 31s31 44 31 72v14c0 10 8 19 19 19s20 -9 20 -19v-14c0 -66 -46 -120 -108 -136c-1 0 -3 -1 -4 -1c-6 -2 -10 -7 -12 -13v-58c0 -11 -9 -20 -20 -20v0c-11 0 -20 9 -20 20v58
-c-2 6 -6 11 -12 13c-1 0 -3 1 -4 1c-62 16 -108 70 -108 136v14zM67 340c0 42 34 76 77 76s78 -34 78 -76v-144c0 -42 -35 -75 -78 -75s-77 33 -77 75v144z" />
- <glyph glyph-name="ion-mic-b" unicode="&#xf205;" horiz-adv-x="160"
-d="M80 416c35 0 65 -23 76 -59c6 -18 4 -45 2 -55s-8 -20 -14 -28c-3 -4 -7 -7 -11 -9c-1 0 -1 -1 -2 -1c-3 -1 -6 -2 -10 -3c-12 -3 -25 -5 -39 -5v0h-1h-1v0c-14 0 -29 2 -41 5c-4 1 -7 2 -10 3c-1 0 -1 1 -2 1c-4 2 -8 5 -11 9c-6 8 -12 18 -14 28s-4 37 2 55
-c11 36 41 59 76 59zM119 247c6 0 12 -5 12 -12v-2c-5 -67 -18 -241 -19 -252c0 0 -3 -13 -32 -13v0c-29 0 -32 13 -32 13c-1 11 -13 185 -18 252v2c0 7 5 12 11 12h1c1 0 1 -1 2 -1c2 0 4 -1 6 -1c9 -2 21 -2 31 -2s20 0 29 2c2 0 4 1 6 1c1 0 1 1 2 1h1zM90 166v33
-c0 6 -4 11 -10 11s-10 -5 -10 -11v-33c0 -6 4 -11 10 -11s10 5 10 11z" />
- <glyph glyph-name="ion-mic-c" unicode="&#xf206;" horiz-adv-x="256"
-d="M201 416c30 0 55 -23 55 -52v-28h-59v-37h59v-43h-59v-37h59v-43h-59v-37h59v-42c0 -29 -25 -52 -55 -52h-30v-77h-86v77h-30c-30 0 -55 23 -55 52v42h152v37h-152v43h152v37h-152v43h152v37h-152v28c0 29 25 52 55 52h146z" />
- <glyph glyph-name="ion-minus-circled" unicode="&#xf207;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM352 176v32h-256v-32h256z" />
- <glyph glyph-name="ion-minus-round" unicode="&#xf208;" horiz-adv-x="384"
-d="M353 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32h322z" />
- <glyph glyph-name="ion-minus" unicode="&#xf209;" horiz-adv-x="384"
-d="M0 160v64h384v-64h-384z" />
- <glyph glyph-name="ion-model-s" unicode="&#xf2c1;" horiz-adv-x="512"
-d="M509 57v-8v0v-1v-3v0c0 -3 -1 -5 -1 -7c-1 -12 -2 -18 -6 -20c-3 -2 -6 -2 -10 -2h-43s-10 1 -11 16v8c20 1 39 1 52 0c10 0 13 0 16 6c2 3 2 7 3 11zM3 57c1 -4 1 -8 3 -11c3 -6 6 -6 16 -6c13 1 32 1 52 0v-8c-1 -15 -8 -16 -11 -16h-43s-7 0 -10 2c-4 2 -6 8 -7 20v7
-v0v3v1v0v8zM512 151c0 -31 -2 -58 -2 -68c0 -4 0 -11 -1 -18c-1 -4 -1 -8 -3 -11c-3 -6 -6 -6 -16 -6c-13 1 -32 1 -52 0c-13 0 -27 -2 -39 -2c-30 -1 -21 4 -34 4s-63 -2 -109 -2s-97 2 -110 2s-4 -5 -34 -4c-12 0 -25 2 -38 2c-20 1 -39 1 -52 0c-10 0 -13 0 -16 6
-c-2 3 -2 7 -3 11c-1 7 -1 14 -1 18c0 10 -2 37 -2 68s4 61 6 64c1 2 8 9 26 21s17 10 20 18c-3 1 -5 3 -7 3c-4 0 -4 -3 -12 -3s-24 1 -28 5c-4 3 -5 5 -5 8s2 9 5 13s19 6 27 7s10 0 12 -1c4 -2 3 -22 3 -22l9 -1c5 13 12 41 24 62c13 23 26 30 32 32s10 2 48 6s69 5 96 5
-s58 -1 96 -5s42 -4 48 -6s19 -9 32 -32c12 -21 19 -49 24 -62l9 1s-1 20 3 22c2 1 4 2 12 1s24 -3 27 -7s5 -10 5 -13s-1 -4 -5 -8s-20 -5 -28 -5s-8 3 -12 3c-2 0 -4 -2 -7 -3c3 -8 2 -6 20 -18s25 -19 26 -21c2 -3 6 -33 6 -64zM86 303c-5 -11 -11 -33 -10 -36
-s-1 -5 15 -4s117 3 165 3s149 -2 165 -3s14 1 15 4s-5 25 -10 36s-17 31 -26 37c-2 1 -17 7 -54 9c-34 2 -72 3 -90 3s-56 -1 -90 -3c-37 -2 -52 -8 -54 -9c-7 -4 -21 -26 -26 -37zM123 178c7 2 11 2 11 2s-17 16 -48 25s-49 11 -66 10c0 0 -3 -16 0 -27s8 -10 16 -12
-s13 -5 16 -4s7 4 12 4s29 -4 38 -4s14 4 21 6zM358 99c15 2 34 19 21 33c-18 19 -15 19 -55 24c-35 4 -61 4 -68 4s-33 0 -68 -4c-40 -5 -37 -5 -55 -24c-13 -14 6 -31 21 -33c14 -2 74 -3 102 -3s88 1 102 3zM492 188c3 11 0 27 0 27c-17 1 -35 -1 -66 -10s-48 -26 -48 -26
-s4 1 11 -1s12 -6 21 -6s33 4 38 4s9 -3 12 -4s8 2 16 4s13 1 16 12z" />
- <glyph glyph-name="ion-monitor" unicode="&#xf20a;"
-d="M437 384c6 0 11 -5 11 -11v-266c0 -6 -5 -11 -11 -11h-426c-6 0 -11 5 -11 11v266c0 6 5 11 11 11h426zM416 128v224h-384v-224h384zM270 0h-92c-28 0 -42 3 -30 12s30 16 30 23c0 4 1 45 1 45h45h45s1 -41 1 -45c0 -7 18 -14 30 -23s-2 -12 -30 -12z" />
- <glyph glyph-name="ion-more" unicode="&#xf20b;" horiz-adv-x="384"
-d="M50 144c-28 0 -50 21 -50 48c0 26 22 48 50 48s50 -22 50 -48c0 -27 -22 -48 -50 -48zM192 144c-28 0 -50 21 -50 48c0 26 22 48 50 48s50 -22 50 -48c0 -27 -22 -48 -50 -48zM334 144c-28 0 -50 21 -50 48c0 26 22 48 50 48s50 -22 50 -48c0 -27 -22 -48 -50 -48z" />
- <glyph glyph-name="ion-mouse" unicode="&#xf340;" horiz-adv-x="256"
-d="M128 416h-1h5h-4zM251 255c2 1 2 1 4 1h1v-176c0 -37 -21 -71 -53 -91c-5 -3 -9 -5 -14 -7v-1v0c-18 -9 -39 -13 -61 -13c-71 0 -128 50 -128 112v176h1c2 0 3 0 5 -1v0c34 -13 76 -23 122 -23s88 10 122 23h1zM189 -18c5 2 10 4 14 7c-5 -3 -9 -5 -14 -7v0v-1v1v0z
-M203 -11c-4 -3 -9 -5 -14 -7c5 2 9 4 14 7zM132 416c69 -2 124 -51 124 -112v-23c-2 -2 -4 -4 -6 -5c-1 -1 -3 0 -4 -1c-23 -10 -50 -16 -82 -19h-1h-2c-11 0 -17 0 -17 10v86c0 9 -7 16 -16 16s-16 -7 -16 -16v-85c0 -11 -6 -11 -17 -11h-2c-32 3 -61 9 -84 19v0
-c-1 0 -1 1 -2 1c-3 1 -5 3 -7 5v23c0 61 57 111 127 112h5z" />
- <glyph glyph-name="ion-music-note" unicode="&#xf20c;" horiz-adv-x="384"
-d="M362 416c12 0 22 -9 22 -21v-303s-3 -43 -12 -55v0c-9 -15 -25 -21 -43 -21h-37c-28 0 -52 20 -52 48s24 48 52 48h60v192l-208 -38v-232c0 -8 -3 -27 -13 -41c-1 -2 -2 -3 -3 -5c0 -1 -1 -1 -2 -2v0c-9 -11 -23 -18 -38 -18h-37c-28 0 -51 20 -51 48s23 48 51 48v0h61
-v286c1 14 13 28 27 32l218 33s3 1 5 1z" />
- <glyph glyph-name="ion-navicon-round" unicode="&#xf20d;" horiz-adv-x="384"
-d="M353 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32h322zM353 352c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32h322zM353 96c17 0 31 -14 31 -32s-14 -32 -31 -32h-322c-17 0 -31 14 -31 32s14 32 31 32
-h322z" />
- <glyph glyph-name="ion-navicon" unicode="&#xf20e;" horiz-adv-x="320"
-d="M0 175v32h320v-32h-320zM0 271v32h320v-32h-320zM0 79v32h320v-32h-320z" />
- <glyph glyph-name="ion-navigate" unicode="&#xf2a3;"
-d="M448 416l-192 -448v256h-256z" />
- <glyph glyph-name="ion-network" unicode="&#xf341;" horiz-adv-x="384"
-d="M384 352c0 -24 -13 -44 -32 -55v-93l-128 -64v-53c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v53l-128 64v93c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64c0 -24 -13 -44 -32 -55v-53l96 -48l96 48v53c-19 11 -32 31 -32 55
-c0 35 29 64 64 64s64 -29 64 -64zM64 384c-18 0 -32 -14 -32 -32s14 -32 32 -32s32 14 32 32s-14 32 -32 32zM192 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM320 320c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-no-smoking" unicode="&#xf2c2;"
-d="M328 144v48h16v-48h-16zM80 144v48h90l48 -48h-138zM332 388c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-24 0 -47 4 -68 11c-2 1 -3 1 -5 2c-12 4 -24 9 -35 15h-1c-69 38 -115 112 -115 196c0 124 100 224 224 224c24 0 47 -4 68 -11c2 -1 3 -1 5 -2
-c12 -4 24 -9 35 -15v0zM224 22c37 0 72 12 100 32l-238 238c-20 -28 -32 -63 -32 -100c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c2 -1 3 -1 5 -2c9 -3 19 -5 29 -7c9 -2 18 -2 27 -2zM362 93c20 28 32 62 32 99c0 66 -37 123 -91 151c-6 3 -12 6 -18 8c-2 1 -3 1 -5 2
-c-9 3 -19 5 -29 7c-9 2 -18 2 -27 2c-37 0 -71 -12 -99 -32zM320 150l-42 42h42v-42zM352 144v48h16v-48h-16zM328 235c16 -7 16 -27 16 -34v-1h-16v1c0 8 -1 17 -7 20c-4 2 -13 4 -39 4h-3c-13 0 -24 0 -33 13c-5 8 -5 19 -2 29c-4 1 -8 1 -12 3c-17 7 -26 20 -26 38
-c0 33 27 44 39 44v-16c-1 0 -23 -2 -23 -28c0 -11 5 -19 16 -23c9 -4 18 -3 18 -3c3 0 6 -2 7 -5s2 -6 0 -8c-5 -7 -7 -18 -4 -22c4 -6 7 -6 20 -6h3c24 0 37 -2 46 -6zM368 200v0h-16c0 28 -4 41 -7 46c-6 10 -14 14 -25 14h-30c-3 0 -5 2 -6 4s-1 6 0 8c0 0 8 18 6 32
-c-1 8 -6 17 -27 17v16c24 0 40 -11 43 -30c2 -11 0 -23 -3 -31h17c16 0 30 -8 39 -22c6 -10 9 -28 9 -54z" />
- <glyph glyph-name="ion-nuclear" unicode="&#xf2a4;"
-d="M176 176c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM176 176c0 32 16 48 48 48s48 -16 48 -48s-16 -48 -48 -48s-48 16 -48 48zM448 176c0 -27 -5 -53 -15 -78s-23 -47 -40 -66s-36 -35 -59 -48l-79 136c22 12 33 31 33 56h160zM224 240
-c-12 0 -23 -3 -33 -9l-80 138c35 20 73 31 113 31s78 -10 113 -30l-81 -139c-10 6 -21 9 -32 9zM160 176c0 -25 11 -44 33 -56l-79 -136c-35 20 -62 46 -83 80s-31 71 -31 112h160z" />
- <glyph glyph-name="ion-outlet" unicode="&#xf342;"
-d="M338 416c61 0 110 -51 110 -113v-222c0 -62 -49 -113 -110 -113h-228c-61 0 -110 51 -110 113v222c0 62 49 113 110 113h228zM143 197v102c0 11 -9 21 -20 21h-23c-11 0 -19 -9 -20 -20v-2v-101v-1c0 -11 9 -20 20 -20h23c11 0 20 9 20 20v1zM265 52v29
-c0 23 -18 42 -41 42s-41 -19 -41 -42v-29v0c0 -11 9 -20 20 -20h21h21c11 0 20 7 20 18v2zM368 197v102c0 11 -9 21 -20 21h-24c-11 0 -19 -9 -20 -20v-2v-101v-1c0 -11 9 -20 20 -20h24c11 0 20 9 20 20v1z" />
- <glyph glyph-name="ion-paintbrush" unicode="&#xf4d5;"
-d="M118 165c52 0 102 -41 90 -102c-11 -52 -54 -71 -90 -77c-30 -5 -100 0 -118 35c24 9 34 26 34 49c0 49 32 95 84 95zM436 388c13 -13 17 -30 5 -45l-154 -175c2 -9 1 -17 -3 -23l-50 -58v0v0c-2 -2 -4 -2 -6 0c-1 1 -1 2 -1 3v1c2 53 -41 87 -89 90v0h-2s-2 0 -2 1
-c-2 2 -2 4 0 6l59 49c6 4 14 4 23 2l175 154c15 12 32 8 45 -5zM134 188v0v0v0z" />
- <glyph glyph-name="ion-paintbucket" unicode="&#xf4d6;" horiz-adv-x="480"
-d="M112 384l32 32l275 -276l-58 -12l-163 -160l-198 192l152 152zM309 160l-110 110l-110 -110h220zM419 140c0 0 61 -66 61 -99s-27 -60 -61 -60s-60 27 -60 60s60 99 60 99z" />
- <glyph glyph-name="ion-paper-airplane" unicode="&#xf2c3;"
-d="M0 176l448 240l-112 -448l-112 112l-80 -112l-16 160zM319 31l80 323l-322 -173l83 -31l192 154l-128 -176z" />
- <glyph glyph-name="ion-paperclip" unicode="&#xf20f;" horiz-adv-x="160"
-d="M149 293c6 0 11 -5 11 -12v-195c0 -28 -10 -49 -24 -63c-15 -15 -36 -23 -56 -23c-40 0 -80 31 -80 88v234c0 24 11 44 29 54s39 11 57 0s29 -30 29 -54l-1 -225c0 -13 -3 -24 -9 -32s-16 -12 -25 -12c-17 0 -34 15 -34 44v173c0 6 6 12 12 12s11 -6 11 -12v-173
-c0 -14 5 -21 11 -21c2 0 5 2 7 4c3 4 5 10 5 17v225c0 15 -6 28 -17 34s-24 6 -35 0s-17 -19 -17 -34v-234c0 -44 29 -64 57 -64s57 19 57 63v195c0 6 6 11 12 11z" />
- <glyph glyph-name="ion-pause" unicode="&#xf210;" horiz-adv-x="256"
-d="M96 12c0 -7 -5 -12 -12 -12h-72c-7 0 -12 5 -12 12v360c0 7 5 12 12 12h72c7 0 12 -5 12 -12v-360zM244 384c7 0 12 -5 12 -12v-360c0 -7 -5 -12 -12 -12h-72c-7 0 -12 5 -12 12v360c0 7 5 12 12 12h72z" />
- <glyph glyph-name="ion-person-add" unicode="&#xf211;"
-d="M397 120h-42v51h-51v42h51v51h42v-51h51v-42h-51v-51zM384 0h-192h-192s0 26 2 40c2 11 17 25 81 49c63 23 60 12 60 55c0 28 -14 11 -23 64c-4 21 -6 7 -14 40c-4 17 3 19 2 27s-2 16 -4 33c-2 21 18 76 88 76s90 -55 88 -76c-2 -17 -3 -25 -4 -33s6 -10 2 -27
-c-8 -33 -10 -19 -14 -40c-9 -53 -23 -36 -23 -64c0 -43 -3 -32 60 -55c64 -24 79 -38 81 -49c2 -14 2 -40 2 -40z" />
- <glyph glyph-name="ion-person-stalker" unicode="&#xf212;"
-d="M393 123c42 -16 52 -26 53 -33c2 -9 2 -90 2 -90h-98c0 18 0 71 -1 77c-1 10 -1 29 -55 50c-8 3 -14 5 -19 7c18 8 15 15 15 28c0 19 -9 11 -15 47c-2 14 -4 5 -9 28c-3 12 1 12 1 18s-1 10 -2 22c-1 14 11 52 57 52s59 -38 58 -52c-1 -12 -2 -16 -2 -22
-c-1 -6 4 -6 1 -18c-5 -23 -7 -14 -9 -28c-6 -36 -16 -28 -16 -47c0 -29 -2 -23 39 -39zM325 0h-163h-162s0 65 2 77c2 10 15 22 69 43c54 20 50 17 50 55c0 24 -12 8 -20 54c-3 18 -5 7 -11 36c-3 15 2 16 1 23s-2 14 -3 29c-2 19 15 67 74 67s77 -49 75 -67
-c-1 -15 -2 -22 -3 -29s5 -8 2 -23c-6 -29 -9 -18 -12 -36c-8 -46 -20 -30 -20 -54c0 -32 -2 -36 31 -48c6 -2 11 -4 19 -7c54 -21 67 -33 69 -43c1 -6 2 -28 2 -47v-30z" />
- <glyph glyph-name="ion-person" unicode="&#xf213;" horiz-adv-x="384"
-d="M384 0h-192h-192s0 26 2 40c2 11 17 25 81 49c63 23 60 12 60 55c0 28 -14 11 -23 64c-4 21 -6 7 -14 40c-4 17 3 19 2 27s-2 16 -4 33c-2 21 18 76 88 76s90 -55 88 -76c-2 -17 -3 -25 -4 -33s6 -10 2 -27c-8 -33 -10 -19 -14 -40c-9 -53 -23 -36 -23 -64
-c0 -43 -3 -32 60 -55c64 -24 79 -38 81 -49c2 -14 2 -40 2 -40z" />
- <glyph glyph-name="ion-pie-graph" unicode="&#xf2a5;"
-d="M1 192c0 5 -1 11 -1 16c0 115 93 208 208 208c5 0 11 -1 16 -1v-32v-191h-191h-32zM78 46c-26 32 -42 71 -45 114h223v223c43 -3 82 -19 114 -45c47 -38 78 -96 78 -162c0 -115 -93 -208 -208 -208c-66 0 -124 31 -162 78z" />
- <glyph glyph-name="ion-pin" unicode="&#xf2a6;" horiz-adv-x="224"
-d="M188 220c20 -10 36 -31 36 -55c0 -17 -3 -21 -15 -21h-81l-12 -176h-8l-12 176h-81c-12 0 -15 5 -15 21c0 24 16 45 36 55v0c1 0 3 1 4 2c7 4 12 11 14 19l18 118v5c0 7 -4 10 -10 13v0c-1 0 -1 1 -2 1c-7 3 -12 9 -12 17c0 20 6 21 18 21h92c12 0 18 -1 18 -21
-c0 -8 -5 -14 -12 -17c-1 0 -1 -1 -2 -1v0c-6 -3 -10 -6 -10 -13v-5l18 -118c2 -8 7 -15 14 -19c1 -1 3 -2 4 -2v0z" />
- <glyph glyph-name="ion-pinpoint" unicode="&#xf2a7;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c32 32 51 75 55 120l-63 8v16l63 8c-4 45 -23 88 -55 120s-75 51 -120 55l-8 -63h-16l-8 63c-45 -4 -88 -23 -120 -55s-51 -75 -55 -120l63 -8v-16l-63 -8
-c4 -45 23 -88 55 -120s75 -51 120 -55l8 63h16l8 -63c45 4 88 23 120 55z" />
- <glyph glyph-name="ion-pizza" unicode="&#xf2a8;" horiz-adv-x="352"
-d="M315 318c10 -4 12 -13 9 -20l-148 -330s-143 320 -148 331s2 16 9 19c39 18 90 28 139 28s96 -9 139 -28zM112 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM176 109c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM240 224
-c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM342 382c6 -3 10 -6 10 -13c0 -1 0 -3 -1 -5l-8 -19c-3 -5 -8 -9 -14 -9c-1 0 -3 1 -6 2c-41 18 -95 30 -147 30s-102 -11 -147 -30c-3 -1 -4 -2 -6 -2c-6 0 -11 4 -14 9l-8 19s-1 2 -1 5c0 8 6 12 10 14
-c49 21 107 33 166 33s118 -13 166 -34z" />
- <glyph glyph-name="ion-plane" unicode="&#xf214;"
-d="M250 136c0 -7 1 -69 -6 -102c-1 -4 3 -4 5 -7l51 -33c2 -2 3 -8 3 -8l1 -18l-68 16l-12 -32l-12 32l-68 -16l1 18s0 6 2 8l52 33c2 3 6 3 5 7c-7 33 -6 95 -6 102s-8 5 -8 5l-62 -13l-128 -49c0 23 2 26 9 31l183 131s5 63 5 113c0 24 12 78 27 78s27 -54 27 -78
-c0 -53 5 -113 5 -113l183 -131c6 -4 9 -7 9 -31l-128 49l-62 13s-8 2 -8 -5z" />
- <glyph glyph-name="ion-planet" unicode="&#xf343;" horiz-adv-x="512"
-d="M96 182c39 -24 85 -48 134 -69c44 -19 87 -35 126 -46c-27 -22 -62 -35 -100 -35c-85 0 -155 66 -160 150zM107 251c1 4 3 8 5 11c10 21 26 40 44 55c27 22 62 35 100 35c85 0 155 -66 160 -150v-10c0 -21 -4 -41 -11 -59c-1 -4 -3 -8 -5 -11c-6 1 -13 3 -19 5
-c-39 11 -82 26 -126 45c-56 24 -108 52 -148 79zM430 163c57 -35 87 -62 81 -82c-4 -12 -19 -17 -44 -17c-50 0 -136 23 -231 64c-141 61 -246 140 -235 175c4 12 20 20 44 17c22 -3 47 -9 73 -18c-8 -9 -8 -12 -14 -22c-23 5 -44 8 -59 8h-6c2 -2 5 -6 8 -9
-c11 -11 27 -24 46 -37c41 -29 97 -59 156 -85c44 -19 89 -35 128 -46c36 -10 68 -15 90 -15h6c-2 2 -5 6 -8 9c-10 10 -24 22 -41 34c4 11 5 12 6 24z" />
- <glyph glyph-name="ion-play" unicode="&#xf215;" horiz-adv-x="320"
-d="M309 215c7 -6 11 -14 11 -23s-4 -17 -11 -23l-278 -166c-4 -2 -7 -3 -11 -3c-11 0 -20 9 -20 20v0v344v0c0 11 9 20 20 20c4 0 8 -1 11 -3z" />
- <glyph glyph-name="ion-playstation" unicode="&#xf30a;" horiz-adv-x="512"
-d="M400 245c0 -11 0 -22 -2 -33c-2 -10 -5 -20 -10 -28c-4 -7 -10 -13 -18 -17c-7 -4 -16 -6 -24 -6c-13 0 -31 4 -42 9v131v2c0 9 -7 17 -15 17h-1c-9 0 -16 -8 -16 -17v-3v-300l-80 26v358s28 -4 75 -18s67 -21 84 -31c8 -5 15 -11 21 -17c7 -7 13 -14 17 -23
-c8 -16 10 -33 11 -50zM87 90c-4 -2 -8 -3 -11 -6c-1 -1 -3 -3 -2 -5s4 -4 6 -5c6 -2 13 -3 19 -3c7 0 15 0 22 2c5 1 9 3 14 5c30 10 41 12 41 12v-42c-14 -2 -36 -4 -50 -4c-30 -1 -60 4 -88 13c-9 3 -19 6 -27 12c-4 3 -8 8 -10 13c-2 4 -1 9 1 13s5 8 9 11
-c9 6 18 10 28 14c8 4 17 7 26 10c35 12 111 37 111 37v-47s-62 -20 -89 -30zM512 102c0 -5 -2 -9 -5 -13c-6 -7 -14 -11 -22 -15s-17 -8 -26 -11c-54 -19 -171 -59 -171 -59v48s92 30 133 44c6 2 11 4 16 8c2 2 4 3 3 6c-1 2 -4 4 -6 5c-6 2 -13 3 -19 3
-c-10 0 -20 -2 -30 -5c-29 -10 -97 -32 -97 -32v49s45 14 67 16c8 1 23 1 31 1c26 0 54 -3 79 -11c5 -2 8 -3 14 -5c9 -3 18 -8 25 -14c4 -4 8 -9 8 -15z" />
- <glyph glyph-name="ion-plus-circled" unicode="&#xf216;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM352 176v32h-112v112h-32v-112h-112v-32h112v-112h32v112h112z" />
- <glyph glyph-name="ion-plus-round" unicode="&#xf217;" horiz-adv-x="384"
-d="M353 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-129v-129c0 -17 -14 -31 -32 -31s-32 14 -32 31v129h-129c-17 0 -31 14 -31 32s14 32 31 32h129v129c0 17 14 31 32 31s32 -14 32 -31v-129h129z" />
- <glyph glyph-name="ion-plus" unicode="&#xf218;" horiz-adv-x="384"
-d="M384 224v-64h-160v-160h-64v160h-160v64h160v160h64v-160h160z" />
- <glyph glyph-name="ion-podium" unicode="&#xf344;"
-d="M0 0v192h128v-192h-128zM160 0v288h128v-288h-128zM320 0v128h128v-128h-128z" />
- <glyph glyph-name="ion-pound" unicode="&#xf219;"
-d="M93 96h-93v54h101l13 84h-99v54h107l22 128h64l-22 -128h106l22 128h63l-22 -128h93v-54h-102l-12 -84h99v-54h-107l-22 -128h-63l22 128h-107l-22 -128h-63zM177 234l-12 -84h106l12 84h-106v0z" />
- <glyph glyph-name="ion-power" unicode="&#xf2a9;"
-d="M224 192c-18 0 -32 14 -32 32v160c0 18 14 32 32 32s32 -14 32 -32v-160c0 -18 -14 -32 -32 -32zM347 379c61 -40 101 -109 101 -187c0 -124 -100 -224 -224 -224s-224 100 -224 224c0 78 40 147 101 187v0c5 3 11 5 17 5c18 0 32 -14 32 -32c0 -6 -2 -12 -5 -17
-c-2 -3 -4 -6 -7 -8c-1 -1 -3 -2 -4 -3c-8 -6 -16 -12 -23 -19c-30 -30 -47 -70 -47 -113s17 -83 47 -113s70 -47 113 -47s83 17 113 47s47 70 47 113s-17 83 -47 113c-7 7 -15 13 -23 19c-1 1 -3 2 -4 3c-3 2 -5 5 -7 8c-3 5 -5 11 -5 17c0 18 14 32 32 32c6 0 12 -2 17 -5
-v0z" />
- <glyph glyph-name="ion-pricetag" unicode="&#xf2aa;"
-d="M439 187c12 -12 12 -31 0 -43l-165 -167c-11 -11 -30 -11 -42 -1l-3 3l-206 209l-6 5c-6 7 -9 15 -10 24v0v2v0l-7 98v4v0c0 12 4 24 13 33l49 49c8 9 20 13 31 13h4l100 -4v0c12 0 22 -4 30 -12v0l2 -2v0l210 -211v0v0zM112 256c26 0 48 22 48 48s-22 48 -48 48
-s-48 -22 -48 -48s22 -48 48 -48z" />
- <glyph glyph-name="ion-pricetags" unicode="&#xf2ab;"
-d="M440 209c10 -11 11 -28 0 -39l-29 -29c11 11 10 28 0 39v0v0l-190 191v0l-1 1h-1c-8 7 -16 12 -27 12v0l-90 3h-4c-9 0 -19 -3 -26 -10l28 27c8 8 17 12 27 12h4l90 -4v0c11 0 19 -4 27 -11h1l1 -1v0l190 -191v0v0zM396 166v0c11 -11 11 -29 0 -40l-108 -109v1l-26 -27
-l-2 -2l-13 -13c-10 -10 -26 -10 -37 -1l-3 3l-186 188l-5 5c-5 6 -9 14 -10 22v0v2v0l-6 88v3v1c0 11 4 21 12 29l44 45l1 1l1 1c7 6 17 9 26 9h4l90 -3v0c11 0 19 -4 27 -11v0l2 -1v0l189 -191v0zM79 308c-12 -8 -21 -21 -21 -37c0 -24 19 -43 43 -43c16 0 29 9 37 21
-c4 7 7 14 7 22c0 24 -20 44 -44 44c-8 0 -15 -3 -22 -7z" />
- <glyph glyph-name="ion-printer" unicode="&#xf21a;"
-d="M392 320c28 0 56 -19 56 -55v-131c0 -31 -28 -54 -56 -54h-40v-112h-8h-8h-224h-11h-5v112h-40c-28 0 -56 24 -56 62v123c0 38 28 55 56 55h40v64h256v-64h40zM336 -16v176h-224v-176h224zM336 320v48h-224v-48h224zM384 256v16h-17v-16h17zM128 112v16h192v-16h-192z
-M128 64v16h192v-16h-192zM128 16v16h192v-16h-192z" />
- <glyph glyph-name="ion-pull-request" unicode="&#xf345;" horiz-adv-x="384"
-d="M64 384c35 0 64 -29 64 -64c0 -24 -13 -44 -32 -55v-178c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v178c-19 11 -32 31 -32 55c0 35 29 64 64 64zM64 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM64 288
-c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM351 88c20 -11 33 -32 33 -56c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 23 12 44 31 55v156c0 16 -4 26 -11 33c-10 9 -26 12 -52 12v-64l-96 96l96 96v-64c42 1 74 -8 96 -29c21 -19 31 -46 31 -80v-155z
-M320 0c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-qr-scanner" unicode="&#xf346;" horiz-adv-x="416"
-d="M48 324v-68h-48v68c0 33 28 60 61 60h67v-48h-68c-7 0 -12 -5 -12 -12zM356 384c33 0 60 -27 60 -60v-68h-48v68c0 7 -6 12 -13 12h-67v48h68zM368 61v67h48v-67c0 -33 -27 -61 -60 -61h-68v49h68c7 0 12 5 12 12zM60 49h68v-49h-67c-33 0 -61 28 -61 61v67h48v-67
-c0 -7 5 -12 12 -12z" />
- <glyph glyph-name="ion-quote" unicode="&#xf347;" horiz-adv-x="384"
-d="M128 384c-41 0 -73 -11 -95 -33s-33 -54 -33 -95v-256h160v256h-96c0 23 5 39 15 49s26 15 49 15zM352 384c-41 0 -73 -11 -95 -33s-33 -54 -33 -95v-256h160v256h-96c0 23 5 39 15 49s26 15 49 15z" />
- <glyph glyph-name="ion-radio-waves" unicode="&#xf2ac;"
-d="M160 192c0 43 21 64 64 64s64 -21 64 -64s-21 -64 -64 -64s-64 21 -64 64zM112 192c0 -18 5 -35 13 -50s19 -28 33 -37l-23 -25c-6 5 -13 10 -18 16c-25 26 -37 59 -37 96s12 70 37 96c5 6 12 11 18 16l23 -25c-14 -9 -25 -22 -33 -37s-13 -32 -13 -50zM336 192
-c0 18 -5 35 -13 50s-19 28 -33 37l23 25c6 -5 13 -10 18 -16c25 -26 37 -59 37 -96s-12 -70 -37 -96c-5 -6 -12 -11 -18 -16l-23 25c14 9 25 22 33 37s13 32 13 50zM32 192c0 -27 6 -53 17 -77s27 -43 47 -59l-23 -24c-6 5 -12 10 -17 16c-18 19 -31 41 -41 65
-c-10 25 -15 51 -15 79s5 54 15 79c10 24 23 46 41 65c5 6 11 11 17 16l23 -24c-10 -8 -18 -17 -26 -27s-14 -21 -20 -32s-10 -24 -13 -37s-5 -26 -5 -40zM416 192c0 27 -6 53 -17 77s-27 43 -47 59l23 24c6 -5 12 -10 17 -16c18 -19 31 -41 41 -65c10 -25 15 -51 15 -79
-s-5 -54 -15 -79c-10 -24 -23 -46 -41 -65c-4 -5 -10 -10 -17 -16l-23 24c20 16 36 35 47 59s17 50 17 77z" />
- <glyph glyph-name="ion-record" unicode="&#xf21b;" horiz-adv-x="416"
-d="M208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208z" />
- <glyph glyph-name="ion-refresh" unicode="&#xf21c;"
-d="M352 96l-104 112h74c-7 65 -64 112 -130 112c-71 0 -128 -57 -128 -128s57 -128 128 -128c28 0 53 8 75 24l6 5l43 -46l-7 -6c-34 -26 -74 -41 -117 -41c-91 0 -167 64 -187 149v0c0 1 -1 2 -1 3v1v2s-1 2 -1 3v1c0 1 -1 3 -1 4v0c-1 6 -2 13 -2 19v1v4v5v5v4v1
-c0 6 1 13 2 19v0c0 1 1 3 1 4v1c0 1 1 1 1 2v3v1c0 1 1 2 1 3v0c20 85 96 149 187 149v0v0c11 0 21 -1 31 -3h2h2c57 -10 106 -47 133 -96c13 -23 21 -49 23 -77h65z" />
- <glyph glyph-name="ion-reply-all" unicode="&#xf21d;" horiz-adv-x="416"
-d="M257 256c153 0 159 -208 159 -208c-51 93 -91 102 -159 102v-92l-152 134l152 144v-80zM0 192l144 136v-57l-82 -79l82 -68v-58z" />
- <glyph glyph-name="ion-reply" unicode="&#xf21e;" horiz-adv-x="384"
-d="M384 48c-53 93 -122 102 -224 102v-92l-160 134l160 144v-80c187 0 224 -208 224 -208z" />
- <glyph glyph-name="ion-ribbon-a" unicode="&#xf348;" horiz-adv-x="352"
-d="M272 416l80 -96l-64 -134c-24 30 -59 49 -99 53zM80 416l83 -177c-40 -4 -75 -23 -99 -53l-64 134zM189 416h67l-53 -112h-27h-27l-53 112h80h13zM176 224c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM176 0c53 0 96 43 96 96
-s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM176 184c49 0 88 -39 88 -88s-39 -88 -88 -88s-88 39 -88 88s39 88 88 88z" />
- <glyph glyph-name="ion-ribbon-b" unicode="&#xf349;" horiz-adv-x="384"
-d="M192 376c49 0 88 -39 88 -88s-39 -88 -88 -88s-88 39 -88 88s39 88 88 88zM192 416c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM192 192c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM83 194c26 -30 65 -50 109 -50
-c12 0 23 1 34 4l-34 -74l-48 -106l-48 80h-96zM301 194l83 -146h-96l-48 -80l-40 88l45 98c22 9 41 23 56 40z" />
- <glyph glyph-name="ion-sad-outline" unicode="&#xf4d7;"
-d="M367 164c3 -9 -2 -17 -11 -19c-3 -1 -7 0 -10 1c-5 2 -9 5 -11 10s-4 12 -13 15s-14 0 -19 -3c-4 -3 -10 -3 -15 -1c-3 1 -7 3 -9 6c-6 8 -3 17 5 22c15 9 29 13 49 6s29 -21 34 -37zM165 195c8 -5 10 -14 4 -22c-2 -3 -6 -5 -9 -6c-5 -2 -11 -2 -15 1c-5 3 -10 6 -19 3
-s-11 -10 -13 -15s-6 -8 -11 -10c-3 -1 -7 -2 -10 -1c-9 2 -14 10 -11 19c5 16 14 30 34 37s35 3 50 -6zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56
-s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM317 89c5 -7 3 -17 -4 -22c-3 -2 -6 -3 -9 -3c-5 0 -10 3 -13 7c0 0 -19 25 -67 25s-67 -25 -67 -25c-3 -4 -8 -7 -13 -7c-3 0 -6 1 -9 3c-7 5 -9 15 -4 22c1 2 28 39 93 39
-s92 -37 93 -39z" />
- <glyph glyph-name="ion-sad" unicode="&#xf34a;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM113 156c2 5 4 12 13 15s14 0 19 -3c4 -3 10 -3 15 -1c3 1 7 3 9 6c6 8 4 17 -4 22c-15 9 -30 13 -50 6s-29 -21 -34 -37c-3 -9 2 -17 11 -19c3 -1 7 0 10 1c5 2 9 5 11 10z
-M313 67c7 5 9 15 4 22c-1 2 -28 39 -93 39s-92 -37 -93 -39c-5 -7 -3 -17 4 -22c3 -2 6 -3 9 -3c5 0 10 3 13 7c0 0 19 25 67 25s67 -25 67 -25c3 -4 8 -7 13 -7c3 0 6 1 9 3zM356 145c9 2 14 10 11 19c-5 16 -14 30 -34 37s-34 3 -49 -6c-8 -5 -11 -14 -5 -22
-c2 -3 6 -5 9 -6c5 -2 11 -2 15 1c5 3 10 6 19 3s11 -10 13 -15s6 -8 11 -10c3 -1 7 -2 10 -1z" />
- <glyph glyph-name="ion-scissors" unicode="&#xf34b;" horiz-adv-x="384"
-d="M341 332c-13 -33 -117 -172 -117 -172l-32 -32s-31 -13 -50 -43s-33 -71 -33 -71v0c-7 -26 -28 -46 -53 -46c-31 0 -56 29 -56 64s25 64 56 64c13 0 25 -5 34 -13c2 -1 3 -3 4 -4v0l2 -2c4 -4 7 -2 14 11c8 15 17 35 27 54s38 59 38 59l17 23l144 192
-c23 -20 18 -51 5 -84zM56 0c15 0 28 14 28 32s-13 32 -28 32s-28 -14 -28 -32s13 -32 28 -32zM192 160c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM143 183c-30 41 -90 125 -100 149c-13 33 -18 64 5 84l134 -178l-3 -4v0v0l-17 -23v-1v0
-c-1 -1 -10 -13 -19 -27zM328 96c31 0 56 -29 56 -64s-25 -64 -56 -64c-25 0 -47 20 -54 46v0s-13 41 -32 71c-11 17 -26 28 -36 35l29 29l1 1h1c1 1 1 2 2 4c3 -4 5 -9 7 -12c10 -19 20 -39 28 -54c7 -13 10 -15 14 -11c1 1 0 1 1 2h1c1 1 2 3 4 4c9 8 21 13 34 13zM328 0
-c15 0 28 14 28 32s-13 32 -28 32s-28 -14 -28 -32s13 -32 28 -32z" />
- <glyph glyph-name="ion-search" unicode="&#xf21f;" horiz-adv-x="384"
-d="M381 61c4 -4 4 -10 0 -14l-43 -44c-2 -2 -5 -3 -8 -3s-5 1 -7 3l-84 86c-25 -15 -52 -23 -80 -23c-87 0 -159 71 -159 159s72 159 159 159s158 -71 158 -159c0 -27 -7 -54 -21 -78zM159 322c-53 0 -97 -43 -97 -97s44 -97 97 -97s96 43 96 97s-43 97 -96 97z" />
- <glyph glyph-name="ion-settings" unicode="&#xf2ad;" horiz-adv-x="416"
-d="M402 310c10 -6 15 -25 14 -36c-1 -17 -7 -36 -25 -54c-1 -1 -2 -1 -3 -2c-26 -25 -62 -30 -94 -20c-1 1 -2 2 -4 2c-5 1 -10 0 -13 -4l-36 -39c52 -50 107 -96 107 -96c2 -2 2 -5 0 -7l-50 -51c-2 -2 -5 -2 -7 0c0 0 -44 55 -93 107l-92 -98c-14 -16 -40 -15 -55 0
-c-15 16 -15 42 1 56l97 93l-12 12c-2 2 -3 7 -1 10l2 5c-25 26 -36 33 -56 32s-36 -13 -48 -28s-10 -52 -8 -62s-7 -6 -12 0c-9 10 -23 50 -6 93s42 69 48 75s16 15 24 21s21 -1 27 5c4 4 5 11 5 16l-4 4c-2 2 -2 5 0 7l31 31c2 2 5 2 7 0l50 -50c2 -2 2 -6 0 -8l-31 -31
-c-2 -2 -5 -2 -7 0l-8 9c-7 0 -15 -5 -17 -10c-3 -6 -6 -21 -3 -33c3 -11 13 -20 36 -43l5 3c4 2 8 1 10 -1c0 0 1 -2 13 -14l38 37c4 3 5 7 4 13c0 2 0 4 -1 5c-10 33 -6 69 19 96l2 2c18 18 36 25 53 26c10 1 30 -5 35 -15l-48 -48l-2 -3l-1 -1c-1 -1 -1 -2 -1 -4
-s0 -3 1 -5l2 -2l2 -2l41 -42l3 -3l1 -1c1 -1 2 -1 4 -1s3 0 4 1l2 1l2 3z" />
- <glyph glyph-name="ion-share" unicode="&#xf220;" horiz-adv-x="384"
-d="M288 70v59l38 31v-109c0 -11 -8 -19 -19 -19h-288c-11 0 -19 9 -19 19v218c0 11 8 19 19 19h120c-29 -18 -43 -38 -43 -38h-58v-180h250zM256 224c-84 0 -116 -24 -160 -96c0 0 5 164 160 164v60l128 -96l-128 -96v64z" />
- <glyph glyph-name="ion-shuffle" unicode="&#xf221;"
-d="M338 267c-52 0 -83 -43 -120 -92c-41 -55 -88 -120 -171 -120h-47v63h47c52 0 84 47 121 96c41 55 87 116 170 116h29v54l81 -81l-81 -84v48h-29zM121 230c-21 21 -42 35 -74 36c-34 1 -47 0 -47 0v63h47c48 0 83 -20 113 -48c-10 -12 -19 -24 -28 -36
-c-4 -5 -7 -10 -11 -15zM367 118v47l81 -84l-81 -81v54h-29c-50 0 -87 23 -117 53c12 14 22 28 32 41c2 3 5 6 7 9c22 -24 46 -39 78 -39h29z" />
- <glyph glyph-name="ion-skip-backward" unicode="&#xf222;" horiz-adv-x="384"
-d="M12 352h8c7 0 12 -5 12 -12v-113l187 122c2 2 5 3 8 3c8 0 16 -7 16 -17v-63l118 78c2 2 5 2 8 2c8 0 15 -7 15 -17v-286c0 -10 -7 -17 -15 -17c-3 0 -5 1 -8 3l-118 78v-64c0 -10 -8 -17 -16 -17c-3 0 -5 1 -8 3l-187 122v-113c0 -7 -5 -12 -12 -12h-8
-c-7 0 -12 5 -12 12v296c0 7 5 12 12 12z" />
- <glyph glyph-name="ion-skip-forward" unicode="&#xf223;" horiz-adv-x="384"
-d="M372 352c7 0 12 -5 12 -12v-296c0 -7 -5 -12 -12 -12h-8c-7 0 -12 5 -12 12v113l-187 -122c-3 -2 -5 -3 -8 -3c-8 0 -15 7 -15 17v64l-119 -78c-3 -2 -5 -3 -8 -3c-8 0 -15 7 -15 17v286c0 10 7 17 15 17c3 0 6 0 8 -2l119 -78v63c0 10 7 17 15 17c3 0 6 -1 8 -3
-l187 -122v113c0 7 5 12 12 12h8z" />
- <glyph glyph-name="ion-social-android-outline" unicode="&#xf224;" horiz-adv-x="352"
-d="M272 240h-192v-60v-89h24h16v-15v-52c0 -4 4 -8 8 -8s8 4 8 8v52v15h17h49h15v-15v-52c0 -2 1 -4 3 -6h1v0c1 -1 2 -2 4 -2h1v0v0c4 0 7 4 7 8v52v15h17h22v89v60zM288 256v0v-76v-90c0 -7 -3 -15 -10 -15h-29v-51c0 -13 -10 -24 -23 -24v0h-1c-6 0 -11 2 -15 5
-c-5 4 -9 11 -9 19v51h-49v-51c0 -13 -11 -24 -24 -24s-24 11 -24 24v51h-28c-7 0 -12 8 -12 15v90v76h224zM328 256c-4 0 -8 -4 -8 -8v-96c0 -4 4 -8 8 -8s8 4 8 8v96c0 4 -4 8 -8 8zM328 272v0c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96
-c0 13 11 24 24 24zM24 256c-4 0 -8 -4 -8 -8v-96c0 -4 4 -8 8 -8s8 4 8 8v96c0 4 -4 8 -8 8zM24 272v0c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96c0 13 11 24 24 24zM175 354c-14 0 -27 -3 -38 -6l-10 -4c-28 -12 -40 -37 -44 -56h186
-c-4 18 -15 43 -44 56l-10 4c-12 4 -25 6 -39 6v0v0h-1zM105 384v0h1l19 -23c13 5 30 9 50 9h1c20 0 36 -4 50 -9l20 23v0s1 -1 2 -1c1 -1 2 -3 2 -3l-19 -22c48 -21 56 -71 57 -86h-224c1 15 9 66 57 87l-19 22c0 1 1 1 2 2zM127 309c-7 0 -14 6 -14 13s6 14 14 14
-c7 0 13 -7 13 -14s-5 -13 -13 -13zM225 309c-7 0 -13 6 -13 13s5 14 13 14c7 0 13 -7 13 -14s-6 -13 -13 -13z" />
- <glyph glyph-name="ion-social-android" unicode="&#xf225;" horiz-adv-x="352"
-d="M64 180v76h224v-76v-90c0 -7 -4 -14 -11 -14h-28v-52c0 -13 -11 -24 -24 -24v0h-1c-6 0 -10 2 -14 5c-5 4 -9 11 -9 19v52h-49v-52c0 -13 -11 -24 -24 -24s-24 11 -24 24v52h-29c-7 0 -11 7 -11 14v90zM328 272c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24
-s-24 11 -24 24v96c0 13 11 24 24 24zM24 272c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96c0 13 11 24 24 24zM231 359c48 -21 56 -72 57 -87h-224c1 15 8 66 56 87l-18 22c0 1 0 1 1 2s3 1 3 1l19 -23c14 5 31 9 51 9s36 -4 50 -9l20 23c0 1 1 0 2 -1
-l2 -2zM127 309c8 0 13 6 13 13s-6 14 -13 14c-8 0 -14 -7 -14 -14s7 -13 14 -13zM225 309c7 0 14 6 14 13s-7 14 -14 14c-8 0 -13 -7 -13 -14s6 -13 13 -13z" />
- <glyph glyph-name="ion-social-angular-outline" unicode="&#xf4d8;"
-d="M224 384l-188 -69l39 -230l149 -80l149 80l39 230zM224 416v0l224 -80l-46 -272l-178 -96l-178 96l-46 272zM312 96l-27 56h-122l-27 -56h-40l128 280l128 -280h-40zM182 192h84l-42 89z" />
- <glyph glyph-name="ion-social-angular" unicode="&#xf4d9;"
-d="M182 192l42 89l42 -89h-84zM224 416l224 -80l-46 -272l-178 -96l-178 96l-46 272zM312 96h40l-128 280l-128 -280h40l27 56h122z" />
- <glyph glyph-name="ion-social-apple-outline" unicode="&#xf226;" horiz-adv-x="320"
-d="M238 278c-15 0 -26 -4 -37 -8c-10 -4 -21 -8 -35 -8s-25 4 -37 8c-11 4 -22 8 -34 8c-11 0 -23 -3 -34 -10c-12 -7 -23 -18 -31 -31c-12 -18 -16 -47 -13 -77c3 -34 16 -69 35 -99c13 -21 30 -45 50 -45h1c8 0 13 3 20 6c10 5 23 10 44 10v0c21 0 34 -5 44 -10
-c7 -3 12 -6 19 -6v0c22 0 44 35 52 48c8 12 12 20 17 31c-12 7 -22 16 -30 28c-10 15 -17 33 -18 52c-1 18 2 37 10 53c6 12 14 22 24 30c-14 13 -31 20 -47 20zM238 294v0c25 0 52 -14 71 -39c-63 -36 -53 -128 11 -153c-9 -20 -13 -28 -24 -46c-16 -25 -37 -56 -65 -56h-1
-c-24 0 -31 16 -63 16v0c-33 0 -40 -16 -64 -16h-1c-28 0 -48 28 -64 53c-44 69 -48 150 -21 193c19 30 50 48 78 48c29 0 47 -16 71 -16c23 0 38 16 72 16zM214 364c-11 -5 -21 -13 -28 -22c-4 -5 -9 -13 -13 -23c-1 -3 -2 -6 -2 -9c11 4 21 11 28 21c4 5 12 18 15 33z
-M230 384v0c3 -23 -6 -46 -18 -62c-13 -17 -35 -30 -56 -30h-1c-4 22 6 44 18 60c14 17 37 31 57 32z" />
- <glyph glyph-name="ion-social-apple" unicode="&#xf227;" horiz-adv-x="320"
-d="M238 294v0c25 0 52 -14 71 -39c-63 -36 -53 -128 11 -153c-9 -20 -13 -28 -24 -46c-16 -25 -37 -56 -65 -56h-1c-24 0 -31 16 -63 16v0c-33 0 -40 -16 -64 -16h-1c-28 0 -48 28 -64 53c-44 69 -48 150 -21 193c19 30 50 48 78 48c29 0 47 -16 71 -16c23 0 38 16 72 16z
-M230 384v0c3 -23 -6 -46 -18 -62c-13 -17 -35 -30 -56 -30h-1c-4 22 6 44 18 60c14 17 37 31 57 32z" />
- <glyph glyph-name="ion-social-bitcoin-outline" unicode="&#xf2ae;" horiz-adv-x="320"
-d="M184 400h-8v-48v-16h-16h-32h-16v16v48h-9v-48v-16h-16h-72v-16h13c11 0 19 0 25 -3s10 -7 13 -13s3 -8 3 -20v-178c0 -11 0 -18 -3 -24v-1c-1 -3 -4 -10 -12 -14h-1c-5 -3 -8 -3 -17 -3h-13l-3 -16h67h16v-16v-48h9v48v16h16h32h16v-16v-48h8v49v16h15c23 1 41 5 55 10
-c16 6 28 15 37 26c8 11 12 29 13 42c1 14 -1 29 -4 36s-8 16 -21 23c-7 4 -14 6 -21 8l-46 11l43 19c4 2 7 4 12 9c6 5 9 12 11 16c2 5 4 13 3 22c-1 17 -4 29 -10 37c-7 9 -17 16 -31 21c-12 5 -24 7 -41 8l-15 1v15v47zM200 416v0v-63c20 -1 32 -4 45 -9
-c16 -6 29 -15 38 -27s12 -28 13 -45c1 -10 0 -20 -3 -28s-8 -16 -16 -23c-6 -6 -11 -9 -16 -11c9 -2 17 -6 25 -10c15 -8 24 -18 29 -30c4 -10 6 -30 5 -44c-1 -16 -6 -37 -16 -51c-11 -14 -26 -24 -45 -31c-15 -6 -33 -10 -59 -11v-65h-40v64h-32v-64h-41v64h-87l8 48h28
-c9 0 8 1 11 2s4 3 5 6s1 9 1 18v178c0 9 0 10 -1 12s-3 4 -6 6s-9 2 -18 2h-28v48h87v64h41v-64h32v64h40zM160 298v-74h-32v74h32zM160 176v0v-90h-32v90h32zM200 294v0c6 -2 10 -7 14 -12c4 -6 6 -13 6 -21s-2 -15 -7 -21c-4 -5 -7 -9 -13 -12v66zM200 174v0
-c5 -1 8 -1 12 -3c8 -3 14 -7 19 -13s8 -15 8 -24c0 -11 -2 -19 -10 -26s-13 -11 -23 -15c-2 -1 -4 0 -6 -1v82z" />
- <glyph glyph-name="ion-social-bitcoin" unicode="&#xf2af;" horiz-adv-x="320"
-d="M314 169c4 -10 7 -30 6 -44c-1 -16 -5 -37 -16 -51s-26 -24 -45 -31c-15 -6 -33 -10 -59 -11v-64h-40v64h-32v-64h-41v64h-87l9 48h26c9 0 9 0 12 1s4 4 5 7s2 8 2 17v173c0 9 -1 16 -2 18s-3 4 -6 6s-9 2 -18 2h-28v48h87v64h41v-64h32v64h40v-64c20 -1 33 -4 46 -9
-c16 -6 28 -15 37 -27s12 -28 13 -45c1 -10 0 -20 -3 -28c-2 -8 -8 -16 -16 -23c-6 -6 -11 -9 -16 -11c9 -2 17 -6 25 -10c15 -8 23 -18 28 -30zM128 298v-74h32v74h-32zM128 86h32v90h-32v-90zM200 294v-66c6 3 9 7 13 12c5 6 7 12 7 20s-2 15 -6 21c-4 5 -8 11 -14 13z
-M229 107c8 7 10 15 10 26c0 9 -3 19 -8 25s-12 10 -20 13c-4 2 -6 2 -11 3v-82c2 0 5 1 7 2c10 4 14 6 22 13z" />
- <glyph glyph-name="ion-social-buffer-outline" unicode="&#xf228;" horiz-adv-x="384"
-d="M7 284c-9 4 -9 11 0 15l169 82c4 2 10 3 16 3s12 -1 16 -3l169 -82c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3zM183 366l-156 -75l156 -75c2 -1 5 -1 9 -1s7 0 9 1l156 75l-156 75c-2 1 -5 2 -9 2s-7 -1 -9 -2zM377 200c9 -4 9 -12 0 -16l-169 -81
-c-4 -2 -10 -4 -16 -4s-12 2 -16 4l-169 81c-9 4 -9 12 0 16c0 0 27 13 33 16c5 3 7 3 13 0s123 -60 123 -60c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 59 125 61s5 2 9 0s35 -17 35 -17zM201 117l156 75l-19 9l-123 -59c-6 -3 -15 -5 -23 -5s-17 2 -23 5l-123 59l-19 -9l156 -75
-c2 -1 5 -2 9 -2s7 1 9 2zM377 100c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3l-169 82c-9 4 -9 11 0 15c0 0 27 14 33 17c5 3 7 2 13 -1s123 -59 123 -59c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 58 125 60s5 2 9 0s35 -17 35 -17zM201 18l156 75l-19 9
-l-123 -60c-6 -3 -15 -4 -23 -4s-17 1 -23 4l-123 60l-19 -9l156 -75c2 -1 5 -2 9 -2s7 1 9 2z" />
- <glyph glyph-name="ion-social-buffer" unicode="&#xf229;" horiz-adv-x="384"
-d="M7 284c-9 4 -9 11 0 15l169 82c4 2 10 3 16 3s12 -1 16 -3l169 -82c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3zM377 200c9 -4 9 -12 0 -16l-169 -81c-4 -2 -10 -4 -16 -4s-12 2 -16 4l-169 81c-9 4 -9 12 0 16c0 0 27 13 33 16c5 3 7 3 13 0
-s123 -60 123 -60c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 59 125 61s5 2 9 0s35 -17 35 -17zM377 100c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3l-169 82c-9 4 -9 11 0 15c0 0 27 14 33 17c5 3 7 2 13 -1s123 -59 123 -59c4 -2 10 -3 16 -3s12 1 16 3
-c0 0 121 58 125 60s5 2 9 0s35 -17 35 -17z" />
- <glyph glyph-name="ion-social-chrome-outline" unicode="&#xf4da;"
-d="M224 416c123 0 224 -101 224 -224s-101 -224 -224 -224s-224 101 -224 224s101 224 224 224zM224 371c-57 0 -109 -27 -141 -68l54 -93c8 40 43 72 87 72h155c-30 54 -89 89 -155 89zM291 192c0 37 -30 67 -67 67s-67 -30 -67 -67s30 -67 67 -67s67 30 67 67zM45 192
-c0 -91 67 -166 154 -177l54 93c-9 -3 -19 -6 -29 -6c-34 0 -61 18 -77 45v0l-78 135c-16 -27 -24 -58 -24 -90zM224 13c99 0 179 80 179 179c0 24 -4 46 -13 67h-108c19 -17 32 -40 32 -67c0 -17 -5 -32 -13 -45v0z" />
- <glyph glyph-name="ion-social-chrome" unicode="&#xf4db;"
-d="M157 192c0 37 30 67 67 67s67 -30 67 -67s-30 -67 -67 -67s-67 30 -67 67zM445 230c2 -12 3 -25 3 -38c0 -106 -74 -195 -174 -218c-10 -2 -20 -4 -30 -5c-7 -1 -13 -1 -20 -1c-8 0 -17 0 -25 1v0v0v0v1l102 177c8 13 13 28 13 45c0 27 -13 50 -32 67h156
-c3 -9 5 -19 7 -29v0c-2 10 -4 20 -7 29v0c3 -9 5 -19 7 -29v0zM224 103c10 0 20 2 29 5l-78 -135v0c-42 9 -79 30 -108 59c-42 41 -67 97 -67 160c0 31 6 61 18 88c7 16 16 31 26 45v0l103 -178c16 -27 43 -44 77 -44zM59 343v0v1c24 26 55 47 90 59c23 8 49 13 75 13
-c73 0 138 -36 179 -90h1c10 -14 18 -29 25 -44v0c-7 15 -15 30 -25 44h-1c10 -14 19 -29 26 -44h-205c-44 0 -79 -32 -87 -72z" />
- <glyph glyph-name="ion-social-codepen-outline" unicode="&#xf4dc;"
-d="M356 244c5 -3 7 -6 7 -12v-81c0 -6 -3 -10 -8 -13c-41 -27 -82 -55 -123 -82c-6 -4 -11 -4 -17 0c-41 27 -81 55 -122 82c-5 3 -8 7 -8 13v80c0 6 3 11 8 14c41 27 81 54 122 81c6 4 11 4 17 0c41 -27 83 -55 124 -82zM236 296v-54c0 -1 1 -2 2 -3c16 -11 31 -21 47 -32
-c1 -1 3 -1 4 0l40 26zM212 295c0 0 -62 -41 -93 -62c14 -9 27 -17 40 -26c1 -1 3 -1 4 0c15 10 31 21 46 31c1 1 3 4 3 6v51zM109 211v-40l30 20zM212 87v53c0 1 -2 3 -3 4c-15 10 -31 21 -46 31c-2 1 -3 1 -5 0l-39 -26c31 -21 93 -62 93 -62zM227 165l39 26s-34 23 -40 27
-c-1 1 -4 0 -5 -1c-5 -3 -9 -6 -14 -9c-8 -6 -25 -17 -25 -17l39 -26c2 -1 4 -1 6 0zM236 87l93 62l-38 26c-2 2 -5 2 -7 0c-15 -10 -30 -21 -45 -31c-2 -2 -3 -3 -3 -6v-51zM338 171v40l-30 -20zM224 384c-51 0 -100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136
-s85 -56 136 -56s100 20 136 56s56 85 56 136s-20 100 -56 136s-85 56 -136 56zM224 416v0c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224z" />
- <glyph glyph-name="ion-social-codepen" unicode="&#xf4dd;"
-d="M209 144c1 -1 3 -3 3 -4v-53s-62 41 -93 62l39 26c2 1 3 1 5 0c15 -10 31 -21 46 -31zM163 207c-1 -1 -3 -1 -4 0c-13 9 -26 17 -40 26c31 21 93 62 93 62v-51c0 -2 -2 -5 -3 -6c-15 -10 -31 -21 -46 -31zM238 239c-1 1 -2 2 -2 3v54l93 -63l-40 -26c-1 -1 -3 -1 -4 0
-c-16 11 -31 21 -47 32zM226 218c6 -4 40 -27 40 -27l-39 -26c-2 -1 -4 -1 -6 0l-39 26s17 11 25 17c5 3 9 6 14 9c1 1 4 2 5 1zM109 211l30 -20l-30 -20v40zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM363 151v81
-c0 6 -2 9 -7 12c-41 27 -83 55 -124 82c-6 4 -11 4 -17 0c-41 -27 -81 -54 -122 -81c-5 -3 -8 -8 -8 -14v-80c0 -6 3 -10 8 -13c41 -27 81 -55 122 -82c6 -4 11 -4 17 0c41 27 82 55 123 82c5 3 8 7 8 13zM284 175c2 2 5 2 7 0l38 -26l-93 -62v51c0 3 1 4 3 6
-c15 10 30 21 45 31zM338 171l-30 20l30 20v-40z" />
- <glyph glyph-name="ion-social-css3-outline" unicode="&#xf4de;" horiz-adv-x="384"
-d="M291 81l-99 -28l-98 28l-7 78h48l4 -40l53 -15v0v0l54 15l5 64h-112l-4 50h121l4 51h-184l-4 49h241zM0 416h384l-35 -403l-157 -45l-157 45zM319 37l30 347h-314l30 -347l127 -36z" />
- <glyph glyph-name="ion-social-css3" unicode="&#xf4df;" horiz-adv-x="384"
-d="M192 109v0zM0 416h384l-35 -403l-157 -45l-157 45zM291 81l22 252h-241l4 -49h184l-4 -51h-121l4 -50h112l-5 -64l-54 -15v0v0l-53 15l-4 40h-48l7 -78l98 -28z" />
- <glyph glyph-name="ion-social-designernews-outline" unicode="&#xf22a;"
-d="M259 302v-53l-65 103zM0 188zM297 352l151 -119v-201h-248l-200 156h63c46 0 77 33 77 82c0 20 -5 37 -15 51l-3 3l37 -29v-107h41l-2 98l63 -98h36v84v80zM432 48v178l-119 92v1v-47v-83v-17h-15h-37h-9l-4 8l-33 50l1 -42v-16h-16h-41h-16v16v29c-3 -6 -7 -12 -12 -17
-c-8 -9 -18 -16 -30 -21s-24 -7 -38 -7h-16l159 -124h226zM59 298h-1h-3v-57h4c8 0 13 2 17 6c5 6 6 15 6 22c0 26 -12 29 -23 29zM59 314v0c25 0 39 -16 39 -45c0 -28 -14 -44 -40 -44h-19v89h20z" />
- <glyph glyph-name="ion-social-designernews" unicode="&#xf22b;"
-d="M258 303l1 -53l-64 102zM297 352l151 -118v-202h-248l-200 157v0h63c46 0 77 33 77 82c0 20 -5 37 -15 51l-3 3l37 -29v-107h40l-2 99l64 -99h36v83v80zM98 270c0 -28 -14 -44 -40 -44h-19v89h19c26 0 40 -16 40 -45z" />
- <glyph glyph-name="ion-social-dribbble-outline" unicode="&#xf22c;" horiz-adv-x="384"
-d="M192 384c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM314 296c-17 -25 -47 -47 -85 -64c5 -10 9 -20 13 -31c33 3 75 4 110 2c-2 35 -16 68 -38 93zM192 352c-14 0 -26 -2 -39 -5c23 -23 43 -53 62 -87c34 14 62 33 79 55
-c-28 23 -63 37 -102 37zM120 334c-41 -21 -71 -58 -83 -103h25c44 0 85 6 121 17c-19 34 -40 63 -63 86zM32 200v-8c0 -40 15 -78 40 -106c24 45 67 83 122 106c4 2 8 3 14 4c-3 8 -6 16 -10 24c-40 -13 -88 -20 -138 -21c-9 0 -19 1 -28 1zM192 32c20 0 39 3 57 10
-c-3 25 -8 53 -15 79c-4 17 -10 33 -16 49c-7 -2 -13 -4 -17 -6c-48 -22 -86 -56 -107 -98c27 -21 61 -34 98 -34zM278 58c40 26 68 67 73 116c-30 2 -68 3 -99 0c4 -12 9 -25 12 -38c7 -27 11 -52 14 -78z" />
- <glyph glyph-name="ion-social-dribbble" unicode="&#xf22d;" horiz-adv-x="384"
-d="M192 384c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM192 32c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM242 201c-4 11 -8 21 -13 31c25 11 47 24 63 39c15 -19 26 -42 28 -67c-26 0 -55 -1 -78 -3z
-M271 292c-15 -12 -34 -23 -56 -32c-12 22 -24 41 -38 59c5 1 10 1 15 1c30 0 57 -11 79 -28zM142 310c15 -18 28 -39 41 -62c-34 -10 -72 -16 -113 -17c11 36 38 65 72 79zM319 176c-4 -33 -21 -63 -46 -83c-3 14 -5 28 -9 43c-3 13 -8 26 -12 38c21 2 45 3 67 2zM194 192
-c-43 -18 -79 -46 -104 -78c-16 22 -26 49 -26 78v7c49 1 95 8 134 21c4 -8 7 -16 10 -24c-6 -1 -10 -2 -14 -4zM219 170c6 -16 11 -32 15 -49c4 -15 7 -31 10 -46c-16 -7 -34 -11 -52 -11c-31 0 -59 11 -81 29c22 30 53 54 90 71c4 2 11 4 18 6z" />
- <glyph glyph-name="ion-social-dropbox-outline" unicode="&#xf22e;" horiz-adv-x="384"
-d="M113 371l79 -66l-114 -71l-78 63zM27 295l52 -42l86 53l-53 46zM306 235l78 -63l-78 -51v-39l-114 -69l-114 68v39l-78 52l78 63l114 -71l-79 -66l-19 12v-20l98 -59l98 59v20l-19 -12l-79 66zM79 217l-52 -44l85 -55l53 44zM219 162l53 -44l85 56l-52 43zM384 297
-l-78 -63l-114 71l79 66zM219 305l86 -52l52 42l-85 56z" />
- <glyph glyph-name="ion-social-dropbox" unicode="&#xf22f;" horiz-adv-x="384"
-d="M113 371l79 -66l-114 -71l-78 63zM0 172l78 62l114 -70l-79 -66zM192 164l114 70l78 -62l-113 -74zM384 297l-78 -63l-114 71l79 66zM192 150l80 -66l34 22v-25l-114 -68l-114 68v25l34 -22z" />
- <glyph glyph-name="ion-social-euro-outline" unicode="&#xf4e0;" horiz-adv-x="320"
-d="M214 384c-53 0 -91 -9 -115 -27c-22 -16 -33 -40 -33 -74v-11v-17h-16h-34v-16h34h16v-15v-48v-17h-16h-34v-16h34h16v-15v-27c0 -34 11 -58 33 -74c24 -18 62 -27 115 -27c31 0 59 2 88 8l-5 35c-30 -4 -55 -7 -80 -7c-36 0 -59 6 -74 19c-19 16 -21 40 -21 60v13v15h16
-h103l3 16h-106h-16v17v48v15h16h118l2 16h-120h-16v17v2c0 16 2 39 21 55c16 13 39 19 74 19c24 0 51 -3 80 -7l5 35c-29 6 -57 8 -88 8zM214 400v0c35 0 68 -3 106 -12l-9 -65c-37 6 -68 9 -94 9c-64 0 -79 -22 -79 -58v-3h139l-8 -48h-131v-48h124l-7 -48h-117v-12
-c0 -44 15 -63 79 -63c26 0 57 3 94 9l9 -65c-38 -9 -71 -12 -106 -12c-115 0 -164 41 -164 117v26h-50v48h50v48h-50v48h50v12c0 76 49 117 164 117z" />
- <glyph glyph-name="ion-social-euro" unicode="&#xf4e1;" horiz-adv-x="320"
-d="M138 176h124l-7 -48h-117v-13c0 -44 15 -63 79 -63c26 0 56 3 93 9l10 -65c-38 -9 -71 -12 -106 -12c-115 0 -164 41 -164 117v27h-50v48h50v48h-50v48h50v11c0 76 49 117 164 117c35 0 68 -3 106 -12l-10 -65c-37 6 -67 9 -93 9c-64 0 -79 -22 -79 -58v-2h138l-7 -48
-h-131v-48z" />
- <glyph glyph-name="ion-social-facebook-outline" unicode="&#xf230;" horiz-adv-x="192"
-d="M128 256h64l-8 -64h-56v-192h-83v192h-45v64h45v43c0 54 23 85 91 85h56v-64h-34c-27 0 -30 -9 -30 -26v-38zM170 208l4 32h-45h-17v17v37c0 10 1 21 9 30c10 11 25 12 37 12h18v32h-40c-28 0 -49 -6 -60 -18c-10 -11 -15 -27 -15 -51v-43v-16h-15h-30v-32h30h15v-16
-v-176h51v176v16h17h41z" />
- <glyph glyph-name="ion-social-facebook" unicode="&#xf231;" horiz-adv-x="192"
-d="M128 256h64l-8 -64h-56v-192h-83v192h-45v64h45v43c0 54 23 85 91 85h56v-64h-34c-27 0 -30 -9 -30 -26v-38z" />
- <glyph glyph-name="ion-social-foursquare-outline" unicode="&#xf34c;" horiz-adv-x="320"
-d="M302 284c-12 -60 -25 -131 -27 -138zM281 416c35 0 45 -20 37 -57c-3 -16 -10 -44 -16 -75l-27 -137c-3 -13 -8 -35 -39 -35h-72c-3 0 -3 0 -6 -3c-2 -2 -115 -133 -115 -133c-9 -10 -23 -8 -28 -6s-15 8 -15 26v380s10 40 43 40h238zM280 352c6 31 6 32 -24 32h-195
-c-29 0 -29 -3 -29 -28v-297c0 -38 1 -38 3 -38s10 8 29 31c0 0 78 89 79 90c2 2 3 2 6 2h62c26 0 28 6 33 31c4 21 36 177 36 177zM302 284c6 31 13 59 16 75zM233 352c5 0 9 -5 8 -11l-8 -44c-1 -4 -6 -9 -11 -9h-75c-8 0 -8 -5 -8 -13v-6c0 -8 0 -13 8 -13h64
-s11 -6 10 -12s-11 -51 -12 -54s-4 -9 -11 -9h-62c-9 0 -11 -1 -17 -8l-54 -63c-1 -1 -1 -1 -1 0v231c0 5 5 11 11 11h158z" />
- <glyph glyph-name="ion-social-foursquare" unicode="&#xf34d;" horiz-adv-x="320"
-d="M281 416c35 0 45 -20 37 -57c-10 -49 -40 -202 -43 -213c-3 -13 -8 -34 -39 -34h-72c-3 0 -3 0 -6 -3c-2 -2 -115 -133 -115 -133c-9 -10 -23 -8 -28 -6s-15 8 -15 26v380s10 40 43 40h238zM275 146c3 11 33 164 43 213zM267 351c2 9 -5 16 -12 16h-191
-c-9 0 -15 -8 -15 -15v-296c0 -1 1 -1 2 0c0 0 70 84 78 94s11 11 23 11h64c9 0 14 8 15 12s8 43 10 51s-6 16 -13 16h-82c-10 0 -18 8 -18 18v13c0 10 8 17 18 17h96s14 6 15 12z" />
- <glyph glyph-name="ion-social-freebsd-devil" unicode="&#xf2c4;" horiz-adv-x="512"
-d="M503 333c19 -37 8 -81 -20 -108s-60 -33 -60 -33c2 -32 16 -59 -41 -102c-43 -32 2 -90 2 -90c10 -14 23 -19 32 -32h-272s15 14 -7 32c0 0 -20 17 -18 29s6 13 9 15s0 7 0 7l-19 19s-13 -13 -44 -13c-38 0 -65 39 -65 39h46s-6 -8 -7 -13c-1 -4 1 -5 1 -5s11 -6 22 -6
-c17 0 33 12 33 12l-24 22l-15 -4l-16 37l39 -10l-1 -15l28 -18s9 9 7 27s-9 26 -9 26s-4 0 -9 -4s-6 -6 -6 -6l-10 44s43 -19 50 -63c3 -20 -6 -35 -6 -35l17 -10s6 5 17 7s23 2 29 -8s5 -12 4 -19s0 -9 6 -11s6 -6 11 -8s15 -6 21 -2s8 11 8 18v16s-9 8 -32 20
-s-54 22 -66 40s-12 44 0 57c9 10 23 25 26 35c4 14 4 42 4 42s-10 16 -8 40c2 30 22 84 96 114c0 0 -40 -55 -20 -80c0 0 37 11 77 9c31 -2 56 -12 73 -28s25 -23 47 -17s28 17 28 33c0 19 -16 51 -16 51s36 -7 58 -51zM195 245c14 4 21 -11 21 -11c14 25 30 60 22 64
-s-64 -25 -66 -88c0 0 6 31 23 35zM232 230c5 7 34 8 37 -17c4 -35 -24 -57 -24 -57s7 -2 23 2c17 4 43 29 43 70s-21 66 -41 62s-38 -60 -38 -60z" />
- <glyph glyph-name="ion-social-github-outline" unicode="&#xf232;"
-d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5
-c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4
-c-89 30 -153 116 -153 218c0 127 100 230 224 230zM146 -0c-15 0 -28 4 -38 9c14 -10 28 -17 44 -23v6v8h-6zM157 73c-16 4 -35 10 -52 24c6 -6 11 -11 13 -16c7 -12 14 -17 25 -17c4 0 9 1 12 2c1 2 1 5 2 7zM347 14c17 13 32 28 45 46c26 37 40 80 40 126
-c0 29 -5 58 -16 84c-10 25 -26 48 -45 68s-41 34 -66 45c-26 11 -53 17 -81 17s-55 -6 -81 -17c-25 -11 -47 -25 -66 -45s-35 -42 -45 -68c-11 -26 -16 -55 -16 -84c0 -46 14 -89 40 -126c10 -14 22 -27 35 -38c-7 8 -11 16 -13 22c-7 18 -15 24 -17 25h-2v1
-c-5 3 -20 13 -15 28c3 9 12 15 25 15h1v0v0c13 -1 24 -6 32 -13c-21 19 -37 48 -37 98c0 24 7 47 21 66c-3 13 -6 34 5 62l3 8l7 2c2 0 5 1 10 1c12 0 31 -3 60 -22c17 4 35 6 53 6v0v0c18 0 36 -2 53 -6c29 19 48 22 60 22c5 0 8 -1 10 -1l7 -2l3 -7c11 -27 8 -50 5 -63
-c14 -19 21 -41 21 -66c0 -92 -55 -117 -92 -125c3 -8 5 -18 5 -30v-51v-6c18 7 35 16 51 28z" />
- <glyph glyph-name="ion-social-github" unicode="&#xf233;"
-d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5
-c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4
-c-89 30 -153 116 -153 218c0 127 100 230 224 230z" />
- <glyph glyph-name="ion-social-google-outline" unicode="&#xf34e;" horiz-adv-x="256"
-d="M191 366c12 -10 37 -30 37 -68c0 -37 -21 -55 -43 -72c-7 -7 -15 -13 -15 -24s8 -17 14 -22l18 -14c23 -19 43 -36 43 -71c0 -47 -47 -95 -135 -95c-74 0 -110 35 -110 72c0 18 10 44 40 62c32 19 75 21 98 23c-7 9 -16 18 -16 34c0 9 2 14 5 20c-6 0 -11 -1 -16 -1
-c-54 0 -85 40 -85 79c0 23 11 48 33 67c29 24 63 28 91 28h106l-33 -18h-32zM155 142c-4 1 -7 1 -12 1s-32 -1 -54 -8c-11 -4 -44 -16 -44 -52s36 -62 91 -62c49 0 75 24 75 55c0 26 -17 39 -56 66zM170 238c12 12 13 28 13 37c0 36 -22 92 -65 92c-13 0 -28 -6 -36 -16
-c-9 -11 -11 -25 -11 -38c0 -34 20 -89 64 -89c13 0 27 6 35 14z" />
- <glyph glyph-name="ion-social-google" unicode="&#xf34f;" horiz-adv-x="288"
-d="M210 172c22 -18 45 -36 45 -73c0 -49 -48 -99 -140 -99c-80 0 -115 39 -115 77c0 10 3 42 42 65c27 16 61 20 85 22c-4 7 -8 16 -8 27c0 4 0 7 1 10h-4c-19 0 -46 4 -67 26c-15 15 -24 36 -24 57c0 26 13 53 35 71v0c32 25 70 29 95 29h133l-60 -33h-13
-c11 -13 23 -31 23 -58c0 -40 -25 -59 -45 -74v-1c-6 -6 -11 -10 -11 -17c0 -6 4 -10 10 -15v0zM85 308c0 -13 4 -33 14 -51c7 -12 20 -27 41 -27c10 0 21 4 28 11c10 10 10 25 10 30c0 18 -6 38 -15 54c-7 13 -20 27 -40 27c-11 0 -22 -5 -29 -13c-6 -7 -9 -18 -9 -31z
-M206 80c0 20 -13 31 -50 56c-3 0 -4 1 -8 1c-6 0 -32 -2 -51 -8c-16 -6 -37 -16 -37 -42c0 -31 32 -51 80 -51c41 0 66 17 66 44z" />
- <glyph glyph-name="ion-social-googleplus-outline" unicode="&#xf234;"
-d="M192 366c12 -10 36 -30 36 -68c0 -37 -21 -55 -43 -72c-7 -7 -15 -13 -15 -24s8 -18 14 -22l18 -14c23 -19 43 -36 43 -71c0 -47 -47 -95 -135 -95c-74 0 -110 35 -110 72c0 18 10 44 40 62c32 19 75 21 98 23c-7 9 -16 18 -16 34c0 9 3 14 5 20c-6 0 -11 -1 -16 -1
-c-54 0 -85 40 -85 79c0 23 10 48 32 67c29 24 64 28 92 28h106l-33 -18h-31zM155 142c-4 0 -7 1 -12 1s-32 -1 -54 -8c-11 -4 -44 -16 -44 -52s36 -62 91 -62c49 0 75 24 75 55c0 26 -17 39 -56 66zM170 238c12 12 13 28 13 37c0 36 -22 92 -65 92c-13 0 -28 -6 -36 -16
-c-9 -11 -11 -24 -11 -37c0 -34 20 -90 64 -90c13 0 27 6 35 14zM448 306v-18h-78v-81h-18v81h-80v18h80v78h18v-78h78z" />
- <glyph glyph-name="ion-social-googleplus" unicode="&#xf235;"
-d="M210 172c22 -18 45 -36 45 -73c0 -49 -47 -99 -139 -99c-80 0 -116 39 -116 77c0 10 3 42 42 65c27 16 61 21 85 23c-4 7 -8 15 -8 26c0 4 0 7 1 10h-4c-19 0 -46 4 -67 26c-15 15 -24 36 -24 57c0 26 13 53 35 71v0c32 25 69 29 94 29h134l-60 -33h-13
-c11 -13 23 -31 23 -58c0 -40 -25 -59 -45 -74v-1c-6 -6 -11 -10 -11 -17c0 -6 4 -10 10 -15v0zM85 308c0 -13 4 -33 14 -51c7 -12 21 -27 41 -27c10 0 21 4 28 11c10 10 10 25 10 30c0 18 -6 37 -15 53c-8 13 -20 28 -40 28c-11 0 -23 -5 -29 -13c-6 -7 -9 -18 -9 -31z
-M206 80c0 20 -13 31 -50 56c-3 0 -4 1 -8 1c-6 0 -31 -2 -50 -8c-16 -6 -38 -16 -38 -42c0 -31 32 -51 80 -51c41 0 66 17 66 44zM370 306h78v-34h-78v-81h-34v81h-80v34h80v78h34v-78z" />
- <glyph glyph-name="ion-social-hackernews-outline" unicode="&#xf236;" horiz-adv-x="384"
-d="M352 352h-320v-320h320v320zM384 384v0v-384h-384v384h384zM233 289h45l-64 -120v-72h-40v72l-66 120h47l40 -84z" />
- <glyph glyph-name="ion-social-hackernews" unicode="&#xf237;" horiz-adv-x="384"
-d="M0 384h384v-384h-384v384zM214 169l64 120h-45l-38 -84l-40 84h-47l66 -120v-72h40v72z" />
- <glyph glyph-name="ion-social-html5-outline" unicode="&#xf4e2;" horiz-adv-x="384"
-d="M0 416h384l-35 -403l-157 -45l-157 45zM319 37l30 347h-314l30 -347l127 -36zM84 184l-13 150h241l-4 -50h-184l4 -51h176l-14 -151l-98 -28l-99 28l-6 77h48l3 -39l54 -15l53 15l6 64h-167z" />
- <glyph glyph-name="ion-social-html5" unicode="&#xf4e3;" horiz-adv-x="384"
-d="M0 416h384l-35 -403l-157 -45l-157 45zM308 284l4 50h-241l13 -150h167l-6 -64l-53 -15l-54 15l-3 39h-48l6 -78l99 -27l98 28l14 151h-176l-4 51h184z" />
- <glyph glyph-name="ion-social-instagram-outline" unicode="&#xf350;" horiz-adv-x="384"
-d="M384 336v-289c0 -26 -22 -47 -48 -47h-288c-26 0 -48 21 -48 47v289c0 26 22 48 48 48h288c26 0 48 -22 48 -48zM192 272c-44 0 -80 -36 -80 -80s36 -80 80 -80s80 36 80 80s-36 80 -80 80zM352 288v48c0 9 -7 16 -16 16h-48c-9 0 -16 -7 -16 -16v-48c0 -9 7 -16 16 -16
-h48c9 0 16 7 16 16zM337 32c9 0 15 7 15 16v176h-52c3 -10 4 -21 4 -32c0 -30 -11 -58 -32 -79s-50 -33 -80 -33s-58 12 -79 33s-33 49 -33 79c0 11 2 22 5 32h-53v-176c0 -9 8 -16 17 -16h288z" />
- <glyph glyph-name="ion-social-instagram" unicode="&#xf351;" horiz-adv-x="384"
-d="M112 192c0 53 27 80 80 80s80 -27 80 -80s-27 -80 -80 -80s-80 27 -80 80zM113 271c-14 -14 -23 -29 -28 -47h-85v112c0 13 4 25 14 34s22 14 35 14h288c13 0 24 -5 33 -14s14 -21 14 -34v-112h-84c-5 18 -14 33 -28 47c-22 22 -49 33 -80 33s-57 -11 -79 -33zM352 300
-v39c0 4 -2 7 -4 9s-5 4 -9 4h-38c-4 0 -7 -2 -9 -4s-4 -5 -4 -9v-39c0 -4 2 -7 4 -9s5 -3 9 -3h38c4 0 7 1 9 3s4 5 4 9zM272 113c22 22 32 48 32 79h80v-144c0 -13 -5 -24 -14 -34s-20 -14 -33 -14h-288c-13 0 -24 4 -34 14s-15 21 -15 34v144h81c0 -31 10 -57 32 -79
-s48 -33 79 -33s58 11 80 33z" />
- <glyph glyph-name="ion-social-javascript-outline" unicode="&#xf4e4;"
-d="M160 344h-48v-196c0 -30 -6 -50 -17 -64c-11 -13 -26 -20 -48 -20c-9 0 -18 1 -25 2l-4 -30c11 -2 25 -4 37 -4c34 0 59 8 76 25c19 18 29 48 29 90v197zM176 360v0v-213c0 -97 -49 -131 -121 -131c-18 0 -40 3 -55 8l8 62c10 -4 24 -6 39 -6c31 0 49 15 49 68v212h80z
-M350 352c-34 0 -62 -9 -82 -26c-19 -15 -28 -36 -28 -60c0 -20 7 -36 21 -51c14 -14 34 -26 61 -36c23 -8 38 -15 48 -24c12 -11 18 -23 18 -38c0 -16 -7 -31 -20 -40c-12 -9 -28 -14 -48 -14c-28 0 -52 8 -70 15l-7 -32c18 -8 44 -14 72 -14c38 0 70 9 90 27
-c18 16 27 38 27 63c0 21 -5 36 -17 50s-31 27 -58 37v0v0c-38 15 -72 28 -72 63c0 14 7 27 19 36c11 9 26 13 45 13c24 0 43 -5 57 -11l10 32c-19 6 -42 10 -66 10zM350 368v0c38 0 65 -7 85 -16l-19 -64c-13 7 -35 17 -67 17s-48 -16 -48 -33c0 -22 19 -31 62 -48
-c58 -22 85 -53 85 -102c0 -57 -42 -106 -133 -106c-38 0 -72 10 -91 21l15 63v0c20 -11 49 -21 81 -21c34 0 52 15 52 38c0 21 -15 33 -55 47c-55 20 -93 52 -93 102c0 58 49 102 126 102z" />
- <glyph glyph-name="ion-social-javascript" unicode="&#xf4e5;"
-d="M176 360v0v-213c0 -97 -49 -131 -121 -131c-18 0 -40 3 -55 8l8 62c10 -4 24 -6 39 -6c31 0 49 15 49 68v212h80zM350 368v0c38 0 65 -7 85 -16l-19 -64c-13 7 -35 17 -67 17s-48 -16 -48 -33c0 -22 19 -31 62 -48c58 -22 85 -53 85 -102c0 -57 -42 -106 -133 -106
-c-38 0 -72 10 -91 21l15 63v0c20 -11 49 -21 81 -21c34 0 52 15 52 38c0 21 -15 33 -55 47c-55 20 -93 52 -93 102c0 58 49 102 126 102z" />
- <glyph glyph-name="ion-social-linkedin-outline" unicode="&#xf238;" horiz-adv-x="384"
-d="M119 64v0h-55v171h55v-171zM93 261v0v0c-18 0 -29 13 -29 29c0 17 12 30 30 30s29 -13 29 -30c0 -16 -12 -29 -30 -29zM257 239c36 0 63 -24 63 -75v-100h-55v94c0 22 -8 37 -28 37c-15 0 -24 -10 -28 -20c-2 -4 -2 -9 -2 -14v-97h-55v171h55v-24c8 11 21 28 50 28z
-M353 384c18 0 31 -13 31 -30v-321c0 -17 -13 -33 -31 -33h-320c-18 0 -33 16 -33 33v321c0 17 15 30 33 30h320zM350 32c1 0 2 1 2 2v316c0 1 -1 2 -2 2h-316s-2 -1 -2 -2v-315s1 -3 3 -3h315z" />
- <glyph glyph-name="ion-social-linkedin" unicode="&#xf239;" horiz-adv-x="384"
-d="M353 384c18 0 31 -13 31 -30v-321c0 -17 -13 -33 -31 -33h-320c-18 0 -33 16 -33 33v321c0 17 15 30 33 30h320zM119 64v171h-55v-171h55zM93 261c18 0 30 13 30 29c0 17 -11 30 -29 30s-30 -13 -30 -30c0 -16 11 -29 29 -29v0zM320 64v100c0 51 -27 75 -63 75
-c-29 0 -42 -17 -50 -28v24h-55v-171h55v97c0 5 0 10 2 14c4 10 13 20 28 20c20 0 28 -15 28 -37v-94h55z" />
- <glyph glyph-name="ion-social-markdown" unicode="&#xf4e6;"
-d="M416 352c18 0 32 -14 32 -32v-256c0 -18 -14 -32 -32 -32h-384c-18 0 -32 14 -32 32v256c0 18 14 32 32 32h384zM252 96v0v192h-56l-42 -68l-42 68h-56v-192h56v96l42 -54l42 54v-96h56zM336 96v0l70 96h-42v96h-56v-96h-42z" />
- <glyph glyph-name="ion-social-nodejs" unicode="&#xf4e7;" horiz-adv-x="384"
-d="M192 -32c-6 0 -12 2 -17 5l-53 32c-8 5 -4 6 -1 7c11 4 14 5 25 12c1 1 3 1 4 0l39 -23c1 -1 4 -1 5 0l156 92c1 1 2 2 2 4v187c0 2 0 4 -2 5l-156 94c-1 1 -3 1 -4 0l-155 -94c-2 -1 -3 -3 -3 -5v-187c0 -2 0 -3 2 -4l40 -24c24 -12 38 1 38 15v183c0 3 2 5 5 5h22
-c3 0 5 -2 5 -5v-183c0 -33 -19 -52 -49 -52c-9 0 -17 1 -37 11l-41 24c-10 6 -17 18 -17 30v190c0 12 7 24 17 30l158 95c10 6 24 6 34 0l158 -95c10 -6 17 -18 17 -30v-190c0 -12 -7 -24 -17 -30l-158 -94c-5 -3 -11 -5 -17 -5v0zM241 96c-65 0 -84 31 -84 59c0 3 1 5 4 5
-h21c2 0 5 -2 5 -4c3 -22 16 -31 54 -31c33 0 47 11 47 29c0 11 -3 18 -55 23c-43 4 -71 15 -71 51c0 33 28 52 73 52c46 0 76 -14 79 -51c0 -1 -1 -2 -2 -3s-2 -2 -3 -2h-20c-2 0 -5 2 -5 4c-4 17 -16 23 -49 23c-36 0 -41 -12 -41 -22c0 -12 5 -16 54 -23s72 -16 72 -51
-c0 -36 -29 -59 -79 -59v0v0z" />
- <glyph glyph-name="ion-social-octocat" unicode="&#xf4e8;"
-d="M146 161c9 0 16 -4 22 -13s10 -20 10 -32s-4 -22 -10 -31s-14 -13 -22 -13c-9 0 -17 4 -23 13s-9 19 -9 31s3 24 9 32c6 9 14 13 23 13zM303 161c9 0 16 -4 22 -13s9 -20 9 -32s-3 -22 -9 -31s-13 -13 -22 -13s-18 4 -24 13s-9 19 -9 31s3 24 9 32c6 9 15 13 24 13z
-M414 276c24 -27 34 -66 34 -96c0 -24 -1 -46 -6 -65c-6 -19 -13 -35 -21 -47c-9 -12 -19 -23 -32 -32s-24 -17 -34 -21s-22 -8 -36 -10c-13 -2 -24 -4 -31 -4c0 0 -28 -1 -64 -1s-64 1 -64 1c-7 0 -18 2 -31 4c-14 2 -26 6 -36 10s-22 12 -34 21c-13 9 -23 20 -32 32
-c-8 12 -15 28 -21 47c-5 19 -6 41 -6 65c0 31 10 70 34 96c0 0 -2 14 0 39s7 48 16 69c30 -3 67 -20 112 -51c15 4 36 6 62 6c28 0 48 -2 62 -6c20 14 39 24 58 33c19 8 33 13 41 15s13 3 13 3c9 -21 14 -44 16 -69s0 -39 0 -39v0zM348 42c28 13 42 40 42 81
-c0 24 -8 43 -26 59c-9 9 -20 13 -32 15s-31 1 -56 -1s-40 -4 -52 -4s-25 2 -42 3s-30 3 -39 3c-10 0 -20 1 -31 -2s-21 -7 -28 -14c-17 -15 -25 -35 -25 -59c0 -41 13 -68 41 -81c27 -13 69 -18 123 -18h2c54 0 95 5 123 18z" />
- <glyph glyph-name="ion-social-pinterest-outline" unicode="&#xf2b0;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136c14 -14 31 -25 48 -34c1 6 2 10 3 16c4 18 29 122 29 122
-s-8 15 -8 36c0 33 20 58 44 58c20 0 30 -16 30 -34c0 -20 -13 -51 -20 -79c-6 -24 12 -43 35 -43c42 0 71 54 71 119c0 49 -33 85 -93 85c-68 0 -110 -50 -110 -107c0 -20 6 -33 15 -44c4 -5 5 -6 3 -12c-1 -4 -4 -14 -5 -18c-2 -6 -6 -8 -11 -6c-31 13 -46 48 -46 86
-c0 64 54 140 160 140c86 0 142 -63 142 -129c0 -88 -49 -153 -121 -153c-24 0 -47 13 -55 28c0 0 -12 -52 -15 -62c-2 -6 -4 -13 -7 -19c15 -4 31 -6 47 -6c51 0 100 20 136 56z" />
- <glyph glyph-name="ion-social-pinterest" unicode="&#xf2b1;"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224c-22 0 -44 3 -64 9c8 14 18 31 23 48c3 10 16 62 16 62c8 -15 30 -28 54 -28c72 0 121 65 121 153c0 66 -56 129 -142 129c-106 0 -160 -76 -160 -140c0 -39 15 -73 46 -86c5 -2 10 0 12 6c1 4 3 14 4 18
-c2 6 1 7 -3 12c-9 11 -15 24 -15 44c0 57 42 107 110 107c60 0 94 -36 94 -85c0 -65 -29 -119 -71 -119c-24 0 -42 19 -36 43c7 28 20 59 20 79c0 18 -10 34 -30 34c-24 0 -43 -25 -43 -58c0 -21 7 -36 7 -36s-25 -104 -29 -122c-4 -17 -5 -35 -4 -51
-c-79 35 -134 113 -134 205c0 124 100 224 224 224z" />
- <glyph glyph-name="ion-social-python" unicode="&#xf4e9;" horiz-adv-x="384"
-d="M129 199c-29 -5 -49 -30 -49 -57v-43v-3h-15c-29 0 -54 29 -62 69c-2 9 -3 17 -3 27v1c0 53 29 95 65 95h127v16h-96v29c0 26 7 40 46 47c13 2 29 4 45 4s39 -1 55 -4c25 -4 46 -22 46 -47v-57v-31c0 -21 -14 -38 -33 -43c-4 -1 -8 -2 -13 -2h-104h3c-4 0 -8 0 -12 -1z
-M140 321c10 0 17 7 17 17s-7 18 -17 18s-18 -8 -18 -18s8 -17 18 -17zM380 225c3 -10 4 -21 4 -33c0 -16 -3 -30 -7 -43c-11 -31 -33 -53 -58 -53h-127v-16h96v-26c0 -26 -23 -40 -46 -47c-35 -10 -68 -9 -97 0c-25 7 -49 22 -49 47v54v33c0 21 14 36 33 41c4 1 8 2 13 2
-h104c3 0 6 1 9 1c27 4 49 28 49 62v38v3h15c28 0 52 -26 61 -63zM244 65c-10 0 -18 -7 -18 -17s8 -18 18 -18s17 8 17 18s-7 17 -17 17z" />
- <glyph glyph-name="ion-social-reddit-outline" unicode="&#xf23a;" horiz-adv-x="449"
-d="M259 160c0 21 11 31 32 31s32 -10 32 -31s-11 -32 -32 -32s-32 11 -32 32zM127 160c0 21 11 31 32 31s32 -10 32 -31s-11 -32 -32 -32s-32 11 -32 32zM449 197c0 -20 -9 -36 -27 -45c1 -5 1 -9 1 -14c0 -38 -19 -71 -58 -98s-85 -40 -140 -40s-102 13 -141 40
-s-58 59 -58 97c0 5 0 10 1 15c-18 9 -27 24 -27 45c0 14 5 25 15 35s21 15 35 15c13 0 24 -4 33 -13c36 25 79 39 129 41h7l29 98l86 -17c8 19 21 28 41 28c12 0 22 -4 31 -13s13 -20 13 -32s-4 -23 -13 -32s-19 -13 -31 -13s-23 4 -32 13s-13 19 -13 31l-69 14l-24 -77
-c50 -2 94 -16 129 -41c10 9 21 13 34 13c9 0 16 -3 24 -7s14 -10 18 -18s7 -16 7 -25zM375 366c-4 0 -8 -1 -11 -2s-6 -4 -8 -6s-5 -6 -6 -9s-2 -6 -2 -10c0 -8 3 -14 8 -19s12 -8 19 -8c5 0 9 1 13 3s8 6 10 10s4 9 4 14c0 8 -3 14 -8 19s-12 8 -19 8zM18 197
-c0 -11 5 -20 14 -27c7 19 19 37 37 53c-6 4 -12 6 -19 6c-3 0 -7 0 -10 -1s-6 -3 -9 -5s-5 -4 -7 -7s-4 -6 -5 -9s-1 -6 -1 -10zM355 55c34 23 50 51 50 83v9c-1 6 -3 12 -5 18c-6 16 -15 30 -30 43c-5 4 -10 9 -15 12v0c-36 25 -79 37 -130 37s-95 -12 -131 -37v0
-c-5 -3 -10 -8 -15 -12c-15 -13 -24 -27 -30 -43c-2 -6 -4 -12 -5 -18v-9c0 -32 16 -60 50 -83c36 -25 80 -37 131 -37s94 12 130 37zM417 170c9 6 14 16 14 27c0 9 -3 17 -9 23s-13 9 -22 9c-7 0 -14 -2 -20 -6c18 -16 30 -34 37 -53zM289 90l13 -12
-c-20 -20 -45 -30 -77 -30s-58 10 -78 30l13 12c16 -16 38 -24 65 -24s48 8 64 24z" />
- <glyph glyph-name="ion-social-reddit" unicode="&#xf23b;" horiz-adv-x="449"
-d="M449 197c0 -20 -11 -37 -27 -45c1 -5 1 -9 1 -14c0 -76 -89 -138 -199 -138s-198 61 -198 137c0 5 0 10 1 15c-16 8 -27 25 -27 45c0 28 23 50 50 50c13 0 24 -5 33 -13c33 23 79 39 129 41h2l31 103l90 -18c8 14 22 24 39 24v0h1c25 0 44 -20 44 -45s-19 -45 -44 -45h-1
-v0c-23 0 -42 17 -44 40l-67 14l-22 -74c49 -3 93 -17 125 -40c9 8 21 13 34 13c27 0 49 -22 49 -50zM34 177c5 15 15 29 29 41c-4 3 -9 5 -15 5c-14 0 -25 -11 -25 -25c0 -9 4 -17 11 -21zM358 339c0 -9 7 -17 16 -17s17 8 17 17s-8 17 -17 17s-16 -8 -16 -17zM127 160
-c0 -18 14 -32 32 -32s32 14 32 32s-14 31 -32 31s-32 -13 -32 -31zM224 48c48 0 77 29 78 30l-13 12s-25 -24 -65 -24c-41 0 -64 24 -64 24l-13 -12c1 -1 29 -30 77 -30zM291 128c18 0 32 14 32 32s-14 31 -32 31s-32 -13 -32 -31s14 -32 32 -32zM415 176c7 5 11 13 11 22
-c0 14 -11 25 -25 25c-6 0 -11 -2 -15 -5c14 -12 24 -27 29 -42z" />
- <glyph glyph-name="ion-social-rss-outline" unicode="&#xf23c;" horiz-adv-x="384"
-d="M56 112c31 0 56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56s25 56 56 56zM56 16c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM0 256c140 0 256 -116 256 -256h-80c0 48 -14 94 -48 128s-80 48 -128 48v80zM240 16c-2 26 -8 52 -19 77
-c-12 28 -30 54 -52 76s-48 40 -76 52c-25 10 -51 16 -77 18v-47c50 -3 92 -22 123 -53s50 -73 53 -123h48zM0 384c212 0 384 -172 384 -384h-80c0 171 -133 304 -304 304v80zM227 228c56 -56 89 -131 93 -212h48c-8 190 -162 344 -352 352v-48c81 -4 155 -36 211 -92z" />
- <glyph glyph-name="ion-social-rss" unicode="&#xf23d;" horiz-adv-x="384"
-d="M56 112c31 0 56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56s25 56 56 56zM0 256c140 0 256 -116 256 -256h-80c0 48 -14 94 -48 128s-80 48 -128 48v80zM0 384c212 0 384 -172 384 -384h-80c0 171 -133 304 -304 304v80z" />
- <glyph glyph-name="ion-social-sass" unicode="&#xf4ea;" horiz-adv-x="512"
-d="M512 119v-8c-1 -9 -7 -17 -15 -22s-12 -4 -13 -3s1 3 4 5c13 8 17 20 10 33c-5 10 -15 16 -26 20c-24 8 -48 7 -72 0c4 -12 7 -23 -2 -34c-10 -12 -23 -19 -39 -22c-7 -2 -14 2 -15 9c-3 19 17 36 30 47c-7 11 -11 24 -14 37c-15 -17 -31 -40 -26 -61
-c3 -14 -1 -27 -14 -36s-30 -14 -46 -11c-4 1 -6 5 -5 8c2 14 25 32 35 43c2 2 3 4 1 7c-6 12 -10 23 -14 36c-13 -29 -30 -80 -57 -98c-9 -6 -17 -4 -21 5c-3 8 -2 20 -1 29c-6 -13 -11 -27 -20 -38c-7 -8 -24 -7 -30 1c-16 21 -13 50 -5 73l-29 -15c7 -16 8 -32 4 -49
-c-5 -19 -17 -35 -35 -46c-19 -12 -64 -24 -77 4c-7 16 -4 30 6 44c17 24 48 37 74 50c-32 23 -80 42 -96 80c-15 35 17 68 43 89c59 48 166 95 244 59c15 -7 36 -24 31 -52c-4 -24 -13 -39 -28 -54c-32 -32 -152 -77 -176 -15c-1 1 -1 4 1 4c2 -1 20 -15 43 -16
-c17 -1 36 3 52 8c33 11 71 33 80 67c4 13 -2 28 -15 34c-49 24 -116 -4 -159 -26c-33 -17 -84 -45 -82 -87c1 -37 56 -60 81 -82c15 7 42 15 52 27c11 13 26 25 44 26c8 0 14 -3 16 -10c2 -6 1 -11 0 -19c5 4 11 4 15 -1c12 -14 -22 -50 -10 -66c14 14 21 42 30 59
-c4 8 17 51 26 53c7 2 18 4 25 0c2 -1 3 -3 2 -5c-7 -19 -7 -33 3 -52c14 20 29 43 34 67c1 2 3 3 5 4c7 2 18 3 25 0c3 -1 3 -2 2 -5c-7 -22 -6 -38 6 -58c31 11 69 15 97 -5c-3 2 -7 5 0 0c5 -4 3 -2 0 0c12 -8 19 -18 21 -32zM113 94v0c1 7 -1 13 -3 20
-c-24 -8 -66 -35 -64 -62c1 -10 8 -13 17 -12s19 7 27 13c14 11 22 24 23 41zM216 166c1 3 -2 5 -5 4c-29 -8 -43 -57 -33 -81c1 -3 4 -3 6 -1c17 16 28 56 32 78zM286 84c8 -3 27 17 26 27c-8 -9 -18 -18 -26 -27zM367 102c11 6 16 19 12 30c-8 -6 -21 -19 -20 -31
-c0 -2 6 0 8 1z" />
- <glyph glyph-name="ion-social-skype-outline" unicode="&#xf23e;" horiz-adv-x="384"
-d="M106 352c-41 0 -74 -33 -74 -73c0 -13 4 -25 10 -36l6 -11l-2 -12c-2 -10 -3 -20 -3 -30c0 -40 16 -77 44 -105s67 -44 107 -44c9 0 19 1 28 3l11 2l9 -5c11 -6 24 -9 36 -9c41 0 74 33 74 73c0 11 -3 22 -8 32l-5 10l3 11c2 10 3 21 3 32c0 40 -16 77 -44 105
-s-67 43 -107 43c-9 0 -18 0 -26 -2l-12 -2l-10 7c-12 7 -26 11 -40 11zM106 384v0c21 0 40 -6 56 -16c10 2 21 2 32 2c101 0 183 -80 183 -180c0 -13 -1 -27 -4 -39c7 -14 11 -29 11 -46c0 -58 -47 -105 -106 -105c-18 0 -35 4 -50 12c-11 -2 -22 -3 -34 -3
-c-101 0 -183 81 -183 181c0 12 2 24 4 36c-9 16 -15 34 -15 53c0 58 47 105 106 105zM288 104c-8 -12 -21 -21 -37 -28s-36 -10 -58 -10c-26 0 -48 5 -65 14c-12 7 -22 15 -30 26s-12 22 -12 33c0 7 3 12 8 17s11 7 19 7c6 0 12 -2 16 -6s7 -8 10 -15s7 -13 11 -18
-s8 -9 15 -12s16 -5 27 -5c15 0 28 4 37 10s13 13 13 22c0 7 -2 13 -7 17c-5 5 -11 9 -19 11c-8 3 -20 5 -34 8c-19 4 -35 9 -48 14c-13 6 -24 13 -32 23s-11 22 -11 36s4 25 12 36c8 10 20 19 36 25c15 6 34 8 54 8c16 0 30 -1 42 -5s23 -9 31 -15s14 -13 18 -20
-s5 -14 5 -21c0 -6 -2 -12 -7 -17s-11 -8 -19 -8c-7 0 -12 2 -16 5c-3 3 -7 7 -11 14c-5 8 -10 15 -16 20s-17 8 -31 8c-13 0 -23 -3 -31 -8s-12 -11 -12 -18c0 -4 2 -7 4 -10c3 -3 6 -6 11 -8s10 -5 15 -6s13 -3 25 -6c15 -3 28 -6 40 -10s23 -8 32 -14s15 -13 20 -22
-s8 -20 8 -32c0 -15 -5 -28 -13 -40z" />
- <glyph glyph-name="ion-social-skype" unicode="&#xf23f;" horiz-adv-x="384"
-d="M373 151c7 -14 11 -29 11 -46c0 -58 -47 -105 -106 -105c-18 0 -35 4 -50 12c-11 -2 -22 -3 -34 -3c-101 0 -183 81 -183 181c0 12 2 24 4 36c-9 16 -15 34 -15 53c0 58 47 105 106 105c21 0 41 -6 57 -16c10 2 20 2 31 2c101 0 183 -80 183 -180c0 -13 -1 -27 -4 -39z
-M288 104c9 12 12 25 12 40c0 12 -2 23 -7 32s-12 16 -21 22s-19 10 -31 14s-26 7 -41 10c-12 3 -20 5 -25 6s-10 4 -15 6s-7 5 -10 8c-2 3 -4 6 -4 10c0 7 3 13 11 18s19 7 32 7c14 0 25 -2 31 -7s11 -12 16 -20c4 -7 8 -11 11 -14c4 -3 9 -5 16 -5c8 0 13 3 18 8s8 11 8 17
-c0 7 -2 14 -6 21s-10 14 -18 20s-18 11 -30 15s-27 5 -43 5c-20 0 -38 -2 -53 -8c-16 -6 -28 -15 -36 -25c-8 -11 -12 -22 -12 -36s3 -26 11 -36s19 -17 32 -23c13 -5 29 -10 48 -14c14 -3 26 -5 34 -8c8 -2 14 -6 19 -11c5 -4 7 -10 7 -17c0 -9 -4 -17 -13 -23
-s-22 -9 -37 -9c-11 0 -20 2 -27 5s-11 6 -15 11s-8 12 -11 19s-6 11 -10 15s-10 6 -16 6c-8 0 -14 -2 -19 -7s-8 -10 -8 -17c0 -11 4 -22 12 -33s18 -19 30 -26c17 -9 39 -14 65 -14c22 0 42 3 58 10s29 16 37 28z" />
- <glyph glyph-name="ion-social-snapchat-outline" unicode="&#xf4eb;" horiz-adv-x="480"
-d="M240 400v0v0c-71 0 -128 -54 -118 -128c2 -15 3 -32 4 -45c0 0 -2 -5 -12 -5c-6 0 -15 2 -28 7c-2 1 -4 1 -6 1c-8 0 -13 -6 -14 -12c0 -5 4 -11 8 -13c14 -7 47 -10 47 -33s-23 -47 -41 -64s-64 -21 -64 -21s0 -21 32 -29s32 -5 33 -13c2 -15 1 -22 11 -22c2 0 4 1 6 1
-c8 1 20 3 32 3c11 0 23 -2 34 -9c23 -15 41 -34 76 -34s53 19 76 34c11 7 24 9 35 9c12 0 23 -2 31 -3c2 0 4 -1 6 -1c10 0 9 7 11 22c1 8 1 5 33 13s32 29 32 29s-46 4 -64 21s-41 41 -41 64s33 26 47 33c4 2 9 8 9 13c-1 6 -6 12 -14 12c-2 0 -5 0 -7 -1
-c-13 -5 -21 -6 -27 -6c-10 0 -13 4 -13 4c1 13 2 30 4 45c10 74 -47 128 -118 128zM240 416v0c41 0 80 -16 105 -45c24 -28 34 -63 29 -101c-1 -11 -2 -22 -3 -31c4 1 10 2 18 5c4 1 8 2 12 2c16 0 29 -12 30 -27c1 -13 -9 -25 -18 -29c-4 -2 -9 -3 -14 -5
-c-7 -2 -14 -5 -19 -8c-4 -3 -5 -4 -5 -5c0 -16 20 -37 36 -52c11 -10 39 -16 54 -17l15 -1v-14c0 -2 0 -11 -6 -21c-5 -8 -16 -19 -38 -24c-6 -1 -11 -3 -15 -4c-2 -1 -5 -1 -7 -1v-1c-1 -7 -1 -13 -4 -18c-2 -5 -9 -12 -22 -12c-2 0 -6 0 -9 1c-2 0 -3 1 -5 1
-c-7 1 -15 2 -23 2c-10 0 -19 -2 -26 -6c-4 -3 -9 -7 -14 -10c-18 -13 -38 -27 -71 -27s-53 14 -71 27c-5 3 -9 7 -14 10c-7 4 -15 6 -25 6c-8 0 -17 -1 -24 -2c-2 0 -3 -1 -5 -1c-3 -1 -7 -1 -9 -1c-13 0 -20 7 -22 12c-3 5 -3 11 -4 18v1c-2 0 -4 0 -6 1c-4 1 -10 3 -16 4
-c-22 5 -33 16 -38 24c-6 10 -6 18 -6 20v15l15 1c16 1 44 7 54 17c29 27 36 43 36 52c0 1 0 2 -4 5c-5 3 -13 6 -20 8c-5 2 -10 3 -14 5c-9 4 -18 16 -17 29c1 15 14 27 30 27c4 0 8 0 12 -2c8 -3 13 -4 17 -5c-1 9 -2 19 -3 30c-5 38 5 74 29 102c25 29 64 45 105 45v0z
-M240 219c-21 0 -41 8 -56 23c-3 3 -3 9 0 12s9 3 12 0c12 -12 27 -19 44 -19c16 0 32 7 44 19c3 3 9 3 12 0s3 -9 0 -12c-15 -15 -35 -23 -56 -23zM176 296c0 16 5 24 16 24s16 -8 16 -24s-5 -24 -16 -24s-16 8 -16 24zM272 296c0 16 5 24 16 24s16 -8 16 -24
-s-5 -24 -16 -24s-16 8 -16 24z" />
- <glyph glyph-name="ion-social-snapchat" unicode="&#xf4ec;" horiz-adv-x="480"
-d="M480 88c0 -2 0 -11 -6 -21c-5 -8 -16 -19 -38 -24c-6 -1 -11 -3 -15 -4c-2 -1 -5 -1 -7 -1v-1c-1 -7 -1 -13 -4 -18c-2 -5 -9 -12 -22 -12c-2 0 -6 0 -9 1c-2 0 -3 1 -5 1c-7 1 -15 2 -23 2c-10 0 -19 -2 -26 -6c-4 -3 -9 -7 -14 -10c-18 -13 -38 -27 -71 -27
-s-53 14 -71 27c-5 3 -9 7 -14 10c-7 4 -15 6 -25 6c-8 0 -17 -1 -24 -2c-2 0 -3 -1 -5 -1c-3 -1 -7 -1 -9 -1c-13 0 -20 7 -22 12c-3 5 -3 11 -4 18v1c-2 0 -4 0 -6 1c-4 1 -10 3 -16 4c-22 5 -33 16 -38 24c-6 10 -6 18 -6 20v15l15 1c16 1 44 7 54 17c29 27 36 43 36 52
-c0 1 0 2 -4 5c-5 3 -13 6 -20 8c-5 2 -10 3 -14 5c-9 4 -18 16 -17 29c1 15 14 27 30 27c4 0 8 0 12 -2c8 -3 13 -4 17 -5c-1 9 -2 19 -3 30c-5 38 5 74 29 102c25 29 64 45 105 45v0c41 0 80 -16 105 -45c24 -28 34 -63 29 -101c-1 -11 -2 -22 -3 -31c4 1 10 2 18 5
-c4 1 8 2 12 2c16 0 29 -12 30 -27c1 -13 -9 -25 -18 -29c-4 -2 -9 -3 -14 -5c-7 -2 -14 -5 -19 -8c-4 -3 -5 -4 -5 -5c0 -16 20 -37 36 -52c11 -10 39 -16 54 -17l15 -1v-14zM192 320c-9 0 -16 -11 -16 -24s7 -24 16 -24s16 11 16 24s-7 24 -16 24zM296 242c3 3 3 9 0 12
-s-9 3 -12 0c-12 -12 -28 -19 -44 -19c-17 0 -32 7 -44 19c-3 3 -9 3 -12 0s-3 -9 0 -12c15 -15 35 -23 56 -23s41 8 56 23zM288 272c9 0 16 11 16 24s-7 24 -16 24s-16 -11 -16 -24s7 -24 16 -24z" />
- <glyph glyph-name="ion-social-tumblr-outline" unicode="&#xf240;" horiz-adv-x="256"
-d="M193 52c21 0 42 6 63 20v-65c-18 -8 -34 -15 -48 -18s-28 -5 -45 -5c-19 0 -35 2 -50 7c-14 5 -28 12 -38 21s-17 18 -21 28s-6 25 -6 44v140h-48v58c16 5 30 14 42 24s19 21 26 35s11 37 14 59h62v-112h96v-64h-96v-101c0 -24 1 -40 4 -47c2 -7 7 -12 14 -16
-c9 -6 19 -8 31 -8zM240 17v29c-15 -6 -31 -10 -47 -10c-15 0 -28 3 -40 10c-10 6 -17 15 -21 25c-2 6 -4 17 -4 52v117h96v32h-96v112h-32c-2 -16 -7 -36 -14 -50c-8 -16 -17 -29 -30 -40c-11 -9 -23 -17 -36 -23v-31h48v-156c0 -21 2 -32 4 -38c3 -8 10 -15 18 -22
-c9 -8 19 -14 31 -18c13 -4 29 -6 46 -6c16 0 28 2 41 5c11 2 23 6 36 12z" />
- <glyph glyph-name="ion-social-tumblr" unicode="&#xf241;" horiz-adv-x="256"
-d="M193 52c21 0 42 6 63 20v-65c-18 -8 -34 -15 -48 -18s-28 -5 -45 -5c-19 0 -35 2 -50 7c-14 5 -28 12 -38 21s-17 18 -21 28s-6 25 -6 44v140h-48v58c16 5 30 14 42 24s19 21 26 35s11 37 14 59h62v-112h96v-64h-96v-101c0 -24 1 -40 4 -47c2 -7 7 -12 14 -16
-c9 -6 19 -8 31 -8z" />
- <glyph glyph-name="ion-social-tux" unicode="&#xf2c5;" horiz-adv-x="383"
-d="M189 347c2 2 -1 -1 0 0c2 2 4 4 6 5c-3 -2 -5 -4 -7 -8c0 1 0 2 1 3zM361 52c7 -4 23 -11 21 -22c-2 -10 -17 -15 -24 -19c-15 -8 -28 -14 -41 -25c-9 -8 -17 -15 -29 -17c-11 -2 -25 -1 -33 8c-5 5 -7 11 -15 12c-25 5 -54 4 -79 0c-13 -2 -21 -11 -32 -17
-c-10 -5 -20 -5 -30 -1c-13 5 -27 10 -41 13s-29 5 -43 9c-31 8 -5 30 -11 50c-3 12 -10 29 8 30c9 1 27 -1 31 11c2 7 -2 15 2 22s-1 17 1 25c4 18 19 32 25 49c5 14 8 25 18 37c9 11 22 22 29 34c10 18 9 35 8 55c-1 17 -1 33 -2 50c0 33 20 60 58 60h14
-c38 0 63 -32 64 -69c0 -19 -5 -38 5 -67c15 -27 36 -48 52 -73c10 -16 16 -31 20 -49c3 -14 9 -31 7 -45c-1 -6 -2 -9 -4 -11c3 -1 7 -2 9 -5c3 -4 2 -11 0 -26c-1 -8 5 -15 12 -19zM137 -3c2 20 -15 39 -25 56c-10 16 -21 43 -39 52c-8 4 -19 5 -23 -5c-2 -7 0 -19 -2 -22
-c-4 -9 -14 -10 -23 -11c-6 0 -17 0 -17 -8c1 -10 10 -20 7 -30c-2 -7 -8 -12 -8 -19c0 -14 38 -15 47 -17c19 -4 37 -14 57 -16c12 -1 25 7 26 20zM253 62c-2 10 2 -10 0 0s-5 28 1 35c4 5 10 6 17 5c0 4 1 9 3 12c8 13 29 8 39 0l-1 2c-3 4 -8 9 -13 10c0 0 4 12 2 34
-c-4 40 -33 62 -33 62c27 -30 27 -58 27 -72c0 -6 -1 -18 -4 -24c-4 -1 -7 -2 -11 -4c-10 -5 -8 2 -8 10c0 18 -2 36 -7 54c-3 9 -7 17 -13 24c-4 5 -4 9 -5 15c-3 12 -9 22 -16 32c-7 9 -7 17 -5 28c1 7 2 14 -6 17c-6 2 -26 5 -27 14c-1 6 -1 16 5 20c16 14 30 -11 17 -24
-c-3 -3 7 -4 8 -4c4 1 4 7 5 10c1 4 1 9 1 13c0 17 -18 32 -34 21c-6 -4 -9 -11 -10 -17c0 -2 -1 -20 0 -20c-4 0 -7 5 -11 5c-3 0 -7 0 -10 -1c0 0 2 14 -2 22c-4 9 -18 16 -24 4s-3 -25 0 -31s4 -6 4 -6c2 1 5 4 5 4s-6 3 -7 11c-1 9 3 14 7 15s10 -2 12 -8s0 -13 0 -13
-c-7 -6 -30 -18 -22 -28c14 -18 33 -15 52 -9c8 3 18 5 24 12c3 3 11 2 8 -4c-2 -5 -18 -7 -22 -9c-9 -4 -18 -8 -28 -10c-6 -1 -13 -5 -28 9c7 -6 8 -16 17 -20c13 -6 33 9 44 15c1 1 16 5 14 0c-1 -4 -11 -7 -15 -9c-11 -6 -23 -21 -36 -22c-8 -1 -21 16 -25 22
-c-1 1 -5 9 -6 4c-1 -8 2 -14 -3 -21c-6 -9 -11 -18 -13 -29c-1 -6 0 -11 -3 -16c-11 -15 -17 -33 -19 -51c0 -4 3 -43 -5 -41c-18 5 -17 33 -14 47c-3 -12 -8 -30 2 -44c12 -15 99 -55 53 -80c7 -14 14 -25 12 -41c8 7 2 20 -1 28c0 0 17 -12 38 -10c17 2 32 7 46 16
-c6 4 11 9 16 14c1 2 4 6 6 7l1 -11c2 -17 -12 -27 -10 -34c4 8 11 14 13 24c3 12 0 24 -2 36zM155 323v0v-3c2 0 2 5 1 8c-1 4 -3 6 -4 6h-2c3 -2 5 -6 5 -11zM210 335c3 -2 0 0 0 0c3 -2 5 -5 5 -10v-3c2 0 3 4 2 7s-3 6 -5 6h-2zM347 15c24 11 -24 -10 0 0
-c24 11 35 17 20 26c-17 10 -26 13 -26 29c0 5 4 16 2 22c-1 4 -6 5 -9 5c-10 -10 -17 -25 -34 -25c-14 0 -25 11 -28 24c-4 2 -10 1 -13 -4c-6 -12 1 -29 3 -41c2 -18 -4 -35 -2 -53c2 -21 26 -22 40 -13c16 10 29 22 47 30z" />
- <glyph glyph-name="ion-social-twitch-outline" unicode="&#xf4ed;" horiz-adv-x="416"
-d="M32 416h384v-272l-112 -112h-80l-64 -64h-64v64h-96v304zM368 160v208h-304v-272h80v-64l64 64h96zM272 176v129h48v-129h-48zM160 176v129h48v-129h-48z" />
- <glyph glyph-name="ion-social-twitch" unicode="&#xf4ee;" horiz-adv-x="416"
-d="M32 416h384v-272l-112 -112h-80l-64 -64h-64v64h-96v304zM208 176v129h-48v-129h48zM320 176v129h-48v-129h48z" />
- <glyph glyph-name="ion-social-twitter-outline" unicode="&#xf242;" horiz-adv-x="472"
-d="M472 338c-13 -20 -29 -36 -48 -50v-12c0 -128 -98 -276 -276 -276c-55 0 -105 16 -148 44c8 -1 15 -2 23 -2c45 0 87 16 120 42c-42 1 -78 29 -90 67c6 -1 12 -2 18 -2c9 0 18 2 26 4c-44 9 -78 48 -78 95v1c13 -7 28 -12 44 -12c-26 17 -43 47 -43 81c0 18 5 34 13 48
-c48 -59 119 -97 199 -101c-2 7 -2 14 -2 22c0 54 43 97 97 97c28 0 52 -12 70 -31c22 4 43 13 62 24c-7 -23 -23 -42 -43 -54c20 2 39 7 56 15zM414 301c3 2 8 6 11 8c-2 0 -11 -2 -19 -1s-21 5 -21 5s14 13 18 17l11 11c-4 -1 -10 -2 -14 -3l-8 -2l-6 6
-c-15 16 -37 26 -59 26c-45 0 -81 -37 -81 -81c0 -6 1 -12 2 -18l5 -21l-22 1c-42 2 -81 13 -118 32c-28 14 -53 34 -75 56c-1 -6 -2 -13 -2 -19c0 -27 14 -53 36 -68c0 0 33 -23 46 -29c-24 -2 -56 0 -56 0c-8 0 -16 1 -24 3c8 -28 32 -50 62 -56l61 -10l-61 -21
-c-7 -2 -14 -3 -21 -3c15 -20 38 -34 64 -34l45 -1l-35 -28c-18 -14 -38 -25 -60 -33c-10 -3 -19 -6 -29 -8c27 -9 55 -14 84 -14c40 0 78 8 112 24c31 14 58 34 81 60c22 24 38 53 50 84c11 30 17 62 17 92v12l-1 8z" />
- <glyph glyph-name="ion-social-twitter" unicode="&#xf243;" horiz-adv-x="472"
-d="M472 338c-13 -20 -29 -36 -48 -50v-12c0 -128 -98 -276 -276 -276c-55 0 -105 16 -148 44c8 -1 15 -2 23 -2c45 0 87 16 120 42c-42 1 -78 29 -90 67c6 -1 12 -2 18 -2c9 0 18 2 26 4c-44 9 -78 48 -78 95v1c13 -7 28 -12 44 -12c-26 17 -43 47 -43 81c0 18 5 34 13 48
-c48 -59 119 -97 199 -101c-2 7 -2 14 -2 22c0 54 43 97 97 97c28 0 52 -12 70 -31c22 4 43 13 62 24c-7 -23 -23 -42 -43 -54c20 2 39 7 56 15z" />
- <glyph glyph-name="ion-social-usd-outline" unicode="&#xf352;" horiz-adv-x="320"
-d="M125 345c11 2 19 3 19 3v-131l-22 6c-15 5 -27 11 -36 19c-12 10 -19 25 -19 43c0 13 4 24 11 33c6 8 13 14 22 19c7 4 17 6 25 8zM128 238v92c-7 -2 -15 -4 -21 -7c-7 -4 -12 -9 -17 -15s-7 -14 -7 -23c0 -13 4 -24 13 -31c8 -7 20 -12 32 -16zM252 151
-c10 -10 15 -24 15 -42c0 -9 -1 -18 -5 -27s-11 -17 -20 -24c-8 -6 -18 -11 -31 -15c-6 -2 -11 -3 -17 -4s-18 -1 -18 -1v145l20 -5c10 -3 19 -6 28 -9c10 -4 20 -10 28 -18zM247 89c3 7 4 13 4 20c0 14 -3 24 -10 31s-15 11 -23 14s-16 5 -26 8v-107c6 1 10 2 14 3
-c11 3 20 8 27 13s11 11 14 18zM315 145c3 -10 5 -19 5 -29c0 -21 -5 -38 -14 -53s-20 -26 -35 -35s-31 -17 -50 -21c-10 -2 -19 -3 -29 -4v-35h-64v35c-9 1 -19 4 -28 6c-20 5 -36 12 -51 23s-26 24 -35 41c-8 16 -13 34 -14 55h69c0 -12 2 -24 7 -33c5 -10 12 -17 21 -23
-s20 -11 31 -14v120c-8 2 -18 4 -27 6c-17 4 -30 9 -41 16s-20 15 -27 23s-11 17 -14 26s-4 18 -4 28c0 18 4 34 12 48s19 25 33 34s29 16 46 20c7 2 15 3 22 4v33h64v-33c9 -1 16 -4 24 -6c18 -5 34 -12 48 -22s25 -22 33 -37c7 -13 11 -28 12 -46h-69c-3 21 -12 37 -26 46
-c-7 4 -13 8 -22 10v-106c9 -2 16 -4 25 -6c12 -3 22 -6 27 -7c13 -4 23 -9 33 -15c10 -7 18 -14 24 -22s11 -17 14 -27zM293 72c7 12 11 27 11 44c0 8 -1 16 -4 24s-7 15 -12 22s-12 13 -20 19c-8 5 -18 10 -29 13c-5 1 -13 3 -24 6h-1l-4 1c-7 2 -13 4 -21 6l-13 3v137
-s9 -1 19 -4s19 -6 28 -12c15 -9 25 -24 30 -43h38c-2 8 -4 15 -8 22c-7 13 -16 24 -28 32c-12 9 -27 16 -43 20c-8 2 -16 4 -23 5l-13 2v31h-32v-31l-14 -2c-7 -1 -14 -2 -20 -4c-15 -4 -29 -10 -41 -18s-21 -16 -28 -28c-7 -11 -10 -24 -10 -40c0 -8 1 -15 3 -23
-c2 -7 6 -14 11 -21s14 -13 23 -19c10 -6 22 -10 37 -14v0v0c4 -1 8 -2 11 -3c5 -1 11 -3 16 -4l12 -3v-151s-8 1 -20 4s-26 8 -36 15c-11 8 -20 18 -26 30c-4 7 -6 16 -8 24h-36c2 -11 5 -23 10 -32c8 -14 17 -26 30 -35c13 -10 28 -16 46 -21c8 -2 17 -4 26 -5l14 -2v-33
-h32v33l15 1c9 1 17 3 26 5c17 4 32 10 45 18s23 19 31 31z" />
- <glyph glyph-name="ion-social-usd" unicode="&#xf353;" horiz-adv-x="320"
-d="M315 145c3 -10 5 -19 5 -29c0 -21 -5 -38 -14 -53s-20 -26 -35 -35s-31 -17 -50 -21c-10 -2 -19 -3 -29 -4v-35h-64v35c-9 1 -19 4 -28 6c-20 5 -36 12 -51 23s-26 24 -35 41c-8 16 -13 34 -14 55h69c0 -12 2 -24 7 -33c5 -10 12 -17 21 -23s20 -11 31 -14v120
-c-8 2 -18 4 -27 6c-17 4 -30 9 -41 16s-20 15 -27 23s-11 17 -14 26s-4 18 -4 28c0 18 4 34 12 48s19 25 33 34s29 16 46 20c7 2 15 3 22 4v33h64v-33c9 -1 16 -4 24 -6c18 -5 34 -12 48 -22s25 -22 33 -37c7 -13 11 -28 12 -46h-69c-3 21 -12 37 -26 46c-7 4 -13 8 -22 10
-v-106c9 -2 16 -4 25 -6c12 -3 22 -6 27 -7c13 -4 23 -9 33 -15c10 -7 18 -14 24 -22s11 -17 14 -27zM128 238v92c-7 -2 -15 -4 -21 -7c-7 -4 -12 -9 -17 -15s-7 -14 -7 -23c0 -13 4 -24 13 -31c8 -7 20 -12 32 -16zM247 89c3 7 4 13 4 20c0 14 -3 24 -10 31s-15 11 -23 14
-s-16 5 -26 8v-107c6 1 10 2 14 3c11 3 20 8 27 13s11 11 14 18z" />
- <glyph glyph-name="ion-social-vimeo-outline" unicode="&#xf244;"
-d="M445 334c7 -33 1 -66 -13 -97s-31 -59 -51 -87c-26 -36 -52 -71 -85 -101c-19 -18 -41 -35 -66 -44c-10 -4 -19 -5 -27 -5c-17 0 -31 9 -44 27c-14 19 -22 40 -28 63c-12 45 -25 90 -38 134c-4 12 -9 22 -15 33c-3 5 -8 10 -12 14c-2 2 -5 3 -8 3s-6 -1 -9 -3
-c-10 -6 -28 -18 -28 -18l-21 27c26 24 82 71 82 71c11 9 33 25 48 27h8c18 0 32 -7 42 -22c11 -17 15 -37 18 -57c7 -41 12 -82 24 -122c3 -10 7 -20 12 -29c4 -7 9 -10 14 -10c4 0 7 2 11 5s7 6 10 10c20 24 37 52 48 81c3 9 3 17 3 27c0 13 -10 25 -25 26h-7
-c-11 0 -20 -2 -32 -7c6 24 24 62 54 84c20 14 45 20 67 20c10 0 20 -2 27 -4c23 -8 36 -23 41 -46zM418 244c13 30 17 59 11 87c-4 19 -13 28 -30 34c-6 2 -14 3 -22 3c-21 0 -42 -6 -57 -17c-16 -12 -29 -30 -38 -48h6h8c23 -1 39 -19 40 -41c0 -10 0 -22 -4 -34
-c-11 -29 -29 -58 -51 -85c-4 -4 -7 -9 -12 -13c-7 -6 -15 -8 -22 -8c-8 0 -18 3 -27 18c-7 11 -11 22 -14 32c-10 31 -14 64 -19 95c-2 10 -3 19 -5 29c-3 17 -6 36 -16 51c-7 10 -16 15 -28 15h-6c-8 -1 -25 -11 -40 -23c-2 -2 -43 -37 -70 -61l2 -3c5 4 12 7 16 10
-c6 3 12 5 18 5c7 0 13 -3 18 -7c8 -7 13 -12 16 -18c6 -11 12 -24 16 -37c13 -44 26 -88 38 -133c5 -19 13 -41 26 -59s23 -20 31 -20c6 0 13 1 21 4c23 8 43 25 61 41c32 29 57 63 83 99v0c21 28 37 55 50 84z" />
- <glyph glyph-name="ion-social-vimeo" unicode="&#xf245;"
-d="M445 334c7 -33 1 -66 -13 -97s-31 -59 -51 -87c-26 -36 -52 -71 -85 -101c-19 -18 -41 -35 -66 -44c-31 -11 -52 -5 -71 22c-14 19 -22 40 -28 63c-12 45 -25 90 -38 134c-4 12 -9 22 -15 33c-3 5 -8 10 -12 14c-5 4 -11 3 -17 0c-10 -6 -28 -18 -28 -18l-21 27
-c26 24 82 71 82 71c11 9 33 25 48 27c21 3 38 -4 50 -22c11 -17 15 -37 18 -57c7 -41 11 -82 23 -122c3 -10 8 -20 13 -29c7 -11 15 -13 25 -5c4 3 7 6 10 10c20 24 37 52 48 81c3 9 3 17 3 27c0 13 -10 25 -25 26s-24 -1 -39 -7c6 24 24 62 54 84c29 21 71 24 94 16
-s36 -23 41 -46z" />
- <glyph glyph-name="ion-social-whatsapp-outline" unicode="&#xf4ef;"
-d="M178 294c4 -11 15 -39 16 -42s2 -6 0 -10s-3 -6 -6 -9s-6 -7 -9 -9c-3 -3 -6 -6 -3 -12s14 -24 30 -39c21 -20 38 -27 44 -30s9 -3 12 1s15 16 19 21s8 5 13 3s31 -17 37 -20s10 -5 11 -7s0 -13 -5 -26s-28 -24 -38 -25s-11 -8 -67 16s-90 84 -93 88s-22 31 -21 58
-s17 41 22 46s11 7 15 7h10s9 0 13 -11zM228 384c-50 0 -97 -20 -133 -55c-35 -35 -55 -81 -55 -131c0 -34 9 -67 27 -96l8 -13l-5 -14l-19 -57l61 19l13 4l12 -6c28 -15 59 -23 91 -23c50 0 97 19 133 54c35 35 55 82 55 132s-20 96 -55 131c-36 35 -83 55 -133 55zM228 416
-v0c121 0 220 -97 220 -218s-99 -218 -220 -218c-39 0 -74 10 -106 27l-122 -39l40 117c-20 33 -32 72 -32 113c0 121 99 218 220 218z" />
- <glyph glyph-name="ion-social-whatsapp" unicode="&#xf4f0;"
-d="M228 416c121 0 220 -97 220 -218s-99 -218 -220 -218c-39 0 -74 10 -106 27l-122 -39l40 117c-20 33 -32 72 -32 113c0 121 99 218 220 218zM337 115c5 13 6 24 5 26s-5 4 -11 7s-32 18 -37 20s-9 2 -13 -3s-16 -17 -19 -21s-6 -4 -12 -1s-23 10 -44 30
-c-16 15 -27 33 -30 39s0 9 3 12c3 2 6 6 9 9s4 5 6 9s1 7 0 10s-12 31 -16 42s-10 11 -13 11h-10s-10 -2 -15 -7s-21 -19 -22 -46s18 -54 21 -58s37 -64 93 -88s57 -17 67 -16s33 12 38 25z" />
- <glyph glyph-name="ion-social-windows-outline" unicode="&#xf246;"
-d="M432 167h-216v-149l216 -32v181zM448 183v0v-215l-248 36v179h248zM168 167h-152v-120l152 -22v142zM184 183v0v-177l-184 27v150h184zM432 398v0l-216 -31v-152h216v183zM448 416v0v-217h-248v182zM168 360v0l-152 -22v-123h152v145zM184 378v0v-179h-184v153z" />
- <glyph glyph-name="ion-social-windows" unicode="&#xf247;"
-d="M448 183v0v-215l-248 36v179h248zM184 183v0v-177l-184 27v150h184zM448 416v0v-217h-248v182zM184 378v0v-179h-184v153z" />
- <glyph glyph-name="ion-social-wordpress-outline" unicode="&#xf248;" horiz-adv-x="384"
-d="M192 384c106 0 192 -86 192 -192c0 -9 -1 -18 -2 -26c-12 -85 -79 -153 -165 -164c-8 -1 -17 -2 -25 -2c-106 0 -192 86 -192 192s86 192 192 192zM19 192c0 -68 40 -127 98 -155l-83 225c-10 -21 -15 -45 -15 -70zM214 21c12 2 24 4 35 8c0 1 -1 2 -1 3l-53 145l-33 -96
-v0l-19 -55c15 -5 32 -7 49 -7c8 0 15 1 22 2zM216 273l62 -186l17 58c9 22 13 41 13 56c0 21 -7 35 -14 47c-9 14 -17 27 -17 41c0 16 12 30 29 30h2c-31 28 -71 45 -116 45c-60 0 -113 -30 -144 -77c4 0 8 -1 11 -1c18 0 46 3 46 3c9 1 10 -14 1 -15c0 0 -10 -1 -20 -1
-l63 -187l38 113l-27 74c-9 0 -18 1 -18 1c-9 0 -8 16 1 15c0 0 28 -3 45 -3c18 0 46 3 46 3c9 1 11 -14 2 -15c0 0 -10 -1 -20 -1zM279 43c45 26 77 71 84 125c1 8 2 16 2 24c0 30 -8 58 -22 83c1 -6 1 -12 1 -18c0 -18 -3 -37 -13 -62l-39 -113z" />
- <glyph glyph-name="ion-social-wordpress" unicode="&#xf249;" horiz-adv-x="384"
-d="M195 177l53 -146c0 -1 6 -13 9 -19c-3 -1 -5 -2 -8 -3v0c-10 -3 -21 -6 -32 -7c-8 -1 -17 -2 -25 -2c-17 0 -34 2 -50 6v0c-2 0 -3 2 -5 2l25 73v0zM17 268c6 0 7 -1 15 -1l93 -255c-3 1 -5 2 -8 3c-63 27 -109 87 -116 158c-1 6 -1 13 -1 19c0 25 7 53 17 76zM366 273
-c11 -24 18 -52 18 -81c0 -9 -1 -18 -2 -26c-9 -65 -50 -120 -107 -147c-2 -1 -3 -1 -5 -2l22 65l39 113c10 25 13 45 13 62v19v0c-1 18 -10 44 -36 43h-2c-17 0 -29 -14 -29 -30c0 -14 8 -27 17 -41c7 -12 14 -26 14 -47c0 -15 -4 -34 -13 -56l-17 -58l-62 186
-c10 0 20 1 20 1c9 1 7 16 -2 15c0 0 -28 -3 -46 -3c-17 0 -45 3 -45 3c-9 1 -10 -15 -1 -15c0 0 9 -1 18 -1l27 -74l-38 -113l-63 187c10 0 20 2 20 2c9 1 8 15 -1 14c0 0 -28 -2 -46 -2h-34c5 9 11 17 17 25c35 44 90 72 150 72c24 0 48 -5 69 -13c34 -13 63 -36 85 -65
-c2 -2 3 -5 5 -7c6 -8 11 -17 15 -26z" />
- <glyph glyph-name="ion-social-yahoo-outline" unicode="&#xf24a;" horiz-adv-x="320"
-d="M289 380c11 0 21 1 31 4l-128 -213v-171c-10 4 -21 4 -32 4s-22 0 -32 -4v171l-128 213c10 -4 21 -4 32 -4s22 0 32 4l96 -160l96 160c10 -4 22 -4 33 -4zM178 180l111 184h-1c-7 0 -15 0 -24 2l-90 -150l-14 -23l-14 23l-89 150c-9 -2 -17 -2 -25 -2h-1l111 -184l2 -4
-v-5v-151c6 1 11 0 16 0s11 1 16 0v151v5z" />
- <glyph glyph-name="ion-social-yahoo" unicode="&#xf24b;" horiz-adv-x="320"
-d="M289 380c11 0 21 1 31 4l-128 -213v-171c-10 4 -21 4 -32 4s-22 0 -32 -4v171l-128 213c10 -4 21 -4 32 -4s22 0 32 4l96 -160l96 160c10 -4 22 -4 33 -4z" />
- <glyph glyph-name="ion-social-yen-outline" unicode="&#xf4f1;" horiz-adv-x="384"
-d="M384 416l-112 -208h48v-48h-73l-15 -31v-17h88v-48h-88v-96h-80v96h-88v48h88v17l-14 31h-74v48h48l-112 208h80l112 -221l112 221h80zM304 192h-59l13 24l99 184v0h-43l-122 -240l-122 240h-43l99 -184l13 -24h-59v-16h68l20 -44v-36h-88v-16h88v-96h48v96h88v16h-88v37
-l21 43h67v16z" />
- <glyph glyph-name="ion-social-yen" unicode="&#xf4f2;" horiz-adv-x="384"
-d="M384 416l-112 -208h48v-48h-73l-15 -31v-17h88v-48h-88v-96h-80v96h-88v48h88v17l-14 31h-74v48h48l-112 208h80l112 -221l112 221h80z" />
- <glyph glyph-name="ion-social-youtube-outline" unicode="&#xf24c;" horiz-adv-x="512"
-d="M265 352v0h-9h-9c-65 0 -118 -2 -168 -4h-1h-1c-23 0 -42 -22 -42 -49v-1v-1c-2 -34 -3 -70 -3 -105v0v0c0 -35 1 -70 3 -104v-2v-1c0 -14 5 -26 14 -36c8 -9 17 -13 28 -13h1h1c52 -2 108 -4 166 -4h11v0v0h11c58 0 113 2 166 4h1h1c11 0 20 4 28 13c9 10 14 22 14 36v1
-v2c2 34 3 68 3 104v0v0c0 36 -1 71 -3 105v1v2c0 27 -19 49 -42 49h-1h-1c-49 2 -103 3 -168 3zM265 384v0c58 0 115 0 170 -3c41 0 74 -36 74 -81c2 -36 3 -72 3 -108s-1 -71 -3 -107c0 -45 -33 -81 -74 -81c-55 -3 -111 -4 -168 -4h-11h-11c-57 0 -113 1 -168 4
-c-41 0 -74 36 -74 81c-2 36 -3 71 -3 107s2 71 4 107c0 45 32 82 73 82c55 2 112 3 170 3h9h9zM207 94v197l145 -99z" />
- <glyph glyph-name="ion-social-youtube" unicode="&#xf24d;" horiz-adv-x="512"
-d="M509 299c2 -36 3 -71 3 -107s-1 -71 -3 -107c0 -45 -33 -81 -74 -81c-58 -3 -118 -4 -179 -4s-121 1 -179 4c-41 0 -74 36 -74 81c-2 36 -3 71 -3 107s2 71 4 107c0 45 32 81 73 81c55 3 112 4 170 4h9h9c58 0 115 -1 170 -4c41 0 74 -36 74 -81zM207 94l145 98l-145 99
-v-197z" />
- <glyph glyph-name="ion-soup-can-outline" unicode="&#xf4f3;" horiz-adv-x="320"
-d="M160 304c-88 0 -160 29 -160 64s72 64 160 64s160 -29 160 -64s-72 -64 -160 -64zM160 415c-70 0 -126 -19 -126 -43s56 -43 126 -43s126 19 126 43s-56 43 -126 43zM161 288c88 0 158 29 159 64c0 -5 0 -33 -8 -40v-240c0 -35 -64 -64 -152 -64s-152 29 -152 64v240
-c-8 6 -8 40 -8 40c0 -35 73 -64 161 -64zM280 72v80c-18 -10 -43 -17 -72 -21h-2c-6 -20 -24 -35 -46 -35s-40 15 -46 35h-2c-29 4 -54 11 -72 21v-80c1 -2 9 -10 30 -18c24 -9 55 -14 90 -14s67 5 91 14c21 8 29 16 29 18zM280 184v91c-33 -12 -75 -19 -119 -19
-c-45 0 -87 7 -121 19v-91c18 -10 43 -17 73 -21h3c7 17 24 29 44 29s37 -12 44 -29h3c30 4 55 11 73 21zM178 -16zM160 -16h1h-1v0zM312 32l8 -16c0 -7 -3 -14 -8 -20c-21 -26 -81 -44 -152 -44s-131 18 -152 44c-5 6 -8 13 -8 20l8 16v16c0 -35 63 -64 152 -64
-s152 28 152 64v-16z" />
- <glyph glyph-name="ion-soup-can" unicode="&#xf4f4;" horiz-adv-x="320"
-d="M0 368c0 43 53 64 160 64s160 -21 160 -64s-53 -64 -160 -64s-160 21 -160 64zM160 8c-44 0 -80 6 -109 18s-43 28 -43 46v128c0 -9 4 -19 13 -27s21 -15 37 -21s33 -10 54 -13c1 -12 7 -23 16 -31s20 -12 32 -12s23 4 32 12s15 19 16 31c31 4 56 12 75 23s29 24 29 38
-v-128c0 -18 -14 -34 -43 -46s-65 -18 -109 -18zM160 288c44 0 82 6 113 18s47 28 47 46v-8c0 -5 -1 -11 -2 -18s-3 -11 -6 -14v-96c0 -14 -10 -27 -29 -38s-44 -19 -76 -23c-2 11 -8 19 -17 26s-19 11 -30 11s-21 -4 -30 -11s-15 -15 -17 -26c-32 4 -57 12 -76 23
-s-29 24 -29 38v96c-5 5 -8 18 -8 40c0 -18 16 -34 47 -46s69 -18 113 -18zM312 56v-24l8 -16c0 -7 -3 -14 -8 -20c-11 -13 -30 -24 -58 -32s-59 -12 -94 -12s-66 4 -94 12s-47 19 -58 32c-5 6 -8 13 -8 20l8 16v24c0 -18 14 -34 43 -46s65 -18 109 -18s80 6 109 18
-s43 28 43 46z" />
- <glyph glyph-name="ion-speakerphone" unicode="&#xf2b2;"
-d="M39 266c0 -37 20 -69 50 -86c-1 0 -2 1 -3 1s-4 1 -5 1v0c-35 3 -62 33 -69 69c-6 0 -12 7 -12 16c0 8 5 15 11 16c6 42 40 75 81 75h8c-36 -15 -61 -51 -61 -92zM433 357c10 -25 15 -56 15 -88s-5 -63 -15 -88l-3 -9c-6 -14 -15 -26 -24 -34c-10 -10 -22 -19 -34 -20h-3
-c-7 0 -15 2 -22 5c-3 2 -10 5 -10 5c-22 10 -84 28 -115 29c-4 -8 -10 -20 -12 -30c-2 -9 -6 -27 -7 -61c-1 -32 1 -59 3 -82c0 -2 1 -5 1 -7c0 -6 -2 -9 -9 -9h-77c-6 0 -9 3 -9 6v7c2 72 25 140 26 145c2 9 5 17 7 30c2 12 -27 13 -40 24c-29 17 -47 49 -47 86
-c0 41 25 77 59 92h42h19c58 3 114 21 163 50c1 1 3 1 4 2v0c8 4 16 6 24 6c13 0 26 -6 37 -16c9 -9 18 -21 24 -35c1 -3 2 -5 3 -8zM410 180c9 22 15 54 15 89s-6 66 -15 88c-8 18 -19 29 -30 29s-21 -11 -29 -29c-9 -22 -15 -53 -15 -88s6 -67 15 -89c8 -19 18 -33 29 -33
-s22 15 30 33z" />
- <glyph glyph-name="ion-speedometer" unicode="&#xf2b3;"
-d="M312 192l8 -8l-64 -84v-4c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32h4zM224 352c124 0 224 -100 224 -224c0 -34 -8 -67 -22 -96h-36c15 27 25 57 26 88h-32v16h32c-1 29 -9 56 -22 81l-27 -15l-8 13l27 16c-8 12 -16 23 -26 33s-21 18 -33 26l-16 -27l-14 8
-l16 27c-25 13 -52 21 -81 22v-32h-16v32c-29 -1 -56 -9 -81 -22l16 -27l-14 -8l-16 27c-12 -8 -23 -16 -33 -26s-19 -21 -26 -33l28 -16l-8 -13l-28 15c-13 -25 -21 -52 -22 -81h32v-16h-32c1 -31 11 -61 26 -88h-36c-14 29 -22 62 -22 96c0 124 100 224 224 224z" />
- <glyph glyph-name="ion-spoon" unicode="&#xf2b4;" horiz-adv-x="128"
-d="M128 288c0 64 -26 128 -64 128s-64 -64 -64 -128v0c1 -25 16 -54 37 -64l1 -1v0c3 -2 10 -6 10 -10c0 0 -16 -199 -16 -210s4 -20 10 -26s14 -9 22 -9v0v0c8 0 16 3 22 9s10 13 10 26s-16 210 -16 210c0 4 7 8 10 10l1 1c22 10 37 38 37 64z" />
- <glyph glyph-name="ion-star" unicode="&#xf24e;"
-d="M448 248l-139 -104l55 -176l-140 112l-140 -112l55 176l-139 104h172l52 168l53 -168h171z" />
- <glyph glyph-name="ion-stats-bars" unicode="&#xf2b5;" horiz-adv-x="352"
-d="M96 32v320h64v-320h-64zM0 32v96h64v-96h-64zM192 32v160h64v-160h-64zM288 32v224h64v-224h-64z" />
- <glyph glyph-name="ion-steam" unicode="&#xf30b;" horiz-adv-x="512"
-d="M480 240c0 -20 -16 -37 -37 -37c-20 0 -37 16 -37 37c0 20 16 37 37 37c20 0 37 -17 37 -37zM443 309c38 0 69 -31 69 -69s-31 -70 -69 -70l-67 -48c-2 -26 -24 -47 -51 -47c-25 0 -46 18 -51 41l-196 78c-8 -5 -16 -7 -26 -7c-28 0 -52 24 -52 52s24 52 52 52
-c25 0 45 -18 50 -41l196 -79c8 5 17 8 27 8c2 0 3 -1 5 -1l43 62c0 38 32 69 70 69zM443 286c-26 0 -47 -20 -47 -46s21 -47 47 -47s46 21 46 47s-20 46 -46 46zM52 277c-21 0 -38 -17 -38 -38s17 -38 38 -38c3 0 5 0 8 1l-16 6v0c-15 7 -22 24 -16 39s24 23 39 17v0l19 -7
-c-6 12 -19 20 -34 20zM325 165c-3 0 -6 -1 -9 -1l16 -6c16 -6 23 -24 17 -40s-23 -23 -39 -17c-6 3 -13 6 -19 8c6 -12 19 -20 34 -20c21 0 38 17 38 38s-17 38 -38 38z" />
- <glyph glyph-name="ion-stop" unicode="&#xf24f;" horiz-adv-x="384"
-d="M373 384c6 0 11 -5 11 -11v-362c0 -6 -5 -11 -11 -11h-362c-6 0 -11 5 -11 11v362c0 6 5 11 11 11h362z" />
- <glyph glyph-name="ion-thermometer" unicode="&#xf2b6;" horiz-adv-x="160"
-d="M127 112c20 -14 33 -38 33 -64c0 -44 -36 -80 -80 -80s-80 36 -80 80c0 27 13 51 33 65v257c0 26 21 46 47 46s47 -20 47 -46v-258zM65 370v-50h30v50c0 8 -7 14 -15 14s-15 -6 -15 -14zM96 160v16h-16v-16h16zM96 192v64h-16v-64h16z" />
- <glyph glyph-name="ion-thumbsdown" unicode="&#xf250;" horiz-adv-x="384"
-d="M24 195c-10 5 -18 17 -18 29c0 14 8 25 20 30c-4 5 -6 12 -6 19c0 14 8 25 20 30c-3 5 -5 11 -5 17c0 18 11 24 35 30s74 12 126 9c23 -1 55 -7 76 -7v32h112v-240h-112v16c-15 -1 -31 -4 -40 -14c-22 -23 -40 -65 -40 -108c0 -19 1 -29 -4 -34c-13 -13 -44 9 -52 37
-c-9 34 -1 62 1 87h-103c-19 0 -34 15 -34 34c0 15 10 29 24 33zM336 352c-9 0 -16 -7 -16 -16s7 -16 16 -16s16 7 16 16s-7 16 -16 16z" />
- <glyph glyph-name="ion-thumbsup" unicode="&#xf251;" horiz-adv-x="384"
-d="M360 189c10 -5 18 -17 18 -29c0 -14 -8 -25 -20 -30c4 -5 6 -12 6 -19c0 -14 -8 -25 -20 -30c3 -5 5 -11 5 -17c0 -18 -11 -24 -35 -30s-74 -12 -126 -9c-23 1 -55 7 -76 7v-32h-112v240h112v-16c15 1 31 4 40 14c22 23 40 65 40 108c0 19 -1 29 4 34c13 13 44 -9 52 -37
-c9 -34 1 -62 -1 -87h103c19 0 34 -15 34 -34c0 -15 -10 -29 -24 -33zM48 32c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" />
- <glyph glyph-name="ion-toggle-filled" unicode="&#xf354;"
-d="M320 240c26 0 48 -22 48 -48s-22 -48 -48 -48s-48 22 -48 48s22 48 48 48zM320 320c71 0 128 -57 128 -128s-57 -128 -128 -128h-192c-71 0 -128 57 -128 128s57 128 128 128h192zM320 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" />
- <glyph glyph-name="ion-toggle" unicode="&#xf355;"
-d="M320 288h-192c-53 0 -96 -43 -96 -96s43 -96 96 -96h192c53 0 96 43 96 96s-43 96 -96 96zM320 320v0c71 0 128 -57 128 -128s-57 -128 -128 -128h-192c-71 0 -128 57 -128 128s57 128 128 128h192zM128 240c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48
-s-22 48 -48 48zM128 272v0c44 0 80 -36 80 -80s-36 -80 -80 -80s-80 36 -80 80s36 80 80 80z" />
- <glyph glyph-name="ion-transgender" unicode="&#xf4f5;" horiz-adv-x="512"
-d="M368 448h144v-144h-40v76l-101 -100c8 -17 13 -36 13 -56c0 -63 -46 -115 -104 -126v-52h72v-46h-72v-64h-48v64h-72v46h72v52c-59 11 -104 63 -104 126c0 20 5 39 13 56l-22 22l-36 -36l-33 33l36 36l-46 45v-76h-40v144h144v-40h-70l43 -42l36 36l33 -33l-36 -36
-l17 -17c23 22 54 36 89 36c27 0 53 -8 74 -23c0 0 6 -5 15 -13l93 92h-70v40zM256 144c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" />
- <glyph glyph-name="ion-trash-a" unicode="&#xf252;" horiz-adv-x="352"
-d="M261 320v0h91v-32h-9s-5 -1 -8 -4s-4 -9 -4 -9l-19 -241c-2 -29 -2 -34 -36 -34h-200c-34 0 -34 5 -36 34l-19 242s-1 6 -4 9s-8 3 -8 3h-9v32h91v29c0 19 14 35 34 35h101c20 0 35 -16 35 -35v-29zM112 349v-29h128v29c0 10 -9 15 -19 15h-91c-10 0 -18 -5 -18 -15z
-M104 64h20l-10 192h-21zM187 64v192h-22v-192h22zM249 64l10 192h-20l-11 -192h21z" />
- <glyph glyph-name="ion-trash-b" unicode="&#xf253;" horiz-adv-x="320"
-d="M318 315c3 -12 4 -11 -7 -11h-302c-11 0 -10 -1 -7 11c2 9 4 13 4 13c3 9 9 9 19 11l53 7c7 1 7 1 10 7c9 20 10 31 20 31h103c10 0 12 -11 21 -31c3 -6 3 -6 10 -7l53 -6c10 -2 16 -2 19 -11c0 0 2 -5 4 -14zM283 272c17 0 18 -2 17 -15l-19 -242c-2 -12 -2 -15 -17 -15
-h-208c-15 0 -15 3 -17 15l-19 242c-1 12 0 15 17 15h246z" />
- <glyph glyph-name="ion-trophy" unicode="&#xf356;"
-d="M448 345c0 -25 2 -73 -22 -122c-15 -30 -36 -55 -63 -75c-23 -16 -49 -28 -77 -35c-16 -17 -32 -27 -46 -31v-33s0 -49 99 -49h13v-32h-256v32h13c85 0 97 35 99 46v36c-14 4 -30 14 -46 31c-28 7 -55 19 -77 35c-27 20 -48 45 -63 75c-17 36 -21 71 -22 97v0v11v0v21v0
-h80c-2 35 0 64 0 64h143h1h1h142s2 -29 0 -64h81v-7zM51 237c17 -34 43 -61 77 -78c-22 40 -33 84 -42 135c-1 8 -2 17 -3 26h-51c1 -23 5 -53 19 -83zM397 237c14 30 18 60 19 83h-51c-1 -9 -3 -18 -4 -26c-9 -51 -20 -95 -42 -135c34 17 61 43 78 78z" />
- <glyph glyph-name="ion-tshirt-outline" unicode="&#xf4f6;"
-d="M146 362l-104 -31l11 -32l39 4l38 5l-2 -38l-14 -255h220l-14 255l-2 38l38 -5l39 -4l11 32l-104 31c-6 -8 -13 -14 -21 -19c-15 -10 -34 -15 -57 -15v0v0c-34 1 -59 11 -78 34zM288 400v0l160 -48l-32 -88l-64 8l16 -289h-288l16 289l-64 -8l-32 88l160 48
-c14 -27 31 -39 64 -40c33 0 50 13 64 40z" />
- <glyph glyph-name="ion-tshirt" unicode="&#xf4f7;"
-d="M448 352l-32 -88l-64 8l16 -288h-288l16 288l-64 -8l-32 88l160 48c14 -27 31 -39 64 -40c33 0 50 13 64 40z" />
- <glyph glyph-name="ion-umbrella" unicode="&#xf2b7;"
-d="M344 160v0v0v0zM104 160v0v0v0zM240 399c116 -8 208 -109 208 -227v-12c-4 25 -26 52 -52 52c-29 0 -52 -23 -52 -52v0c0 29 -23 52 -52 52s-49 -12 -52 -45v-135c0 -17 -6 -33 -18 -45s-29 -19 -46 -19c-35 0 -63 29 -63 64c0 9 7 16 16 16s16 -7 16 -16
-c0 -18 14 -32 31 -32c18 0 32 14 32 32v134c-1 24 -26 46 -52 46c-29 0 -52 -23 -52 -52v0c0 29 -23 52 -52 52c-27 0 -49 -26 -52 -52v18c0 118 92 213 208 221v1c0 9 7 16 16 16s16 -7 16 -16v-1z" />
- <glyph glyph-name="ion-university" unicode="&#xf357;"
-d="M224 384l224 -111l-92 -60l-132 -85l-160 102v-198l-32 16v203l-32 21zM358 192l10 -82c-16 -12 -112 -78 -144 -110c-32 32 -128 98 -144 110l9 82l135 -88z" />
- <glyph glyph-name="ion-unlocked" unicode="&#xf254;" horiz-adv-x="384"
-d="M22 -32c-12 0 -22 10 -22 22v212c0 12 10 22 22 22h3h19v31c0 42 17 87 43 115s64 46 105 46v0v0c41 0 79 -18 105 -46c20 -21 33 -51 39 -82h-53c-5 18 -13 35 -24 47v0v1c-18 19 -42 29 -67 29v0v0c-25 0 -49 -10 -67 -29v-1v0c-18 -19 -28 -53 -28 -80v-31h265
-c12 0 22 -10 22 -22v-212c0 -12 -10 -22 -22 -22h-340z" />
- <glyph glyph-name="ion-upload" unicode="&#xf255;"
-d="M366 215c45 0 82 -37 82 -83s-37 -84 -82 -84h-110v80h48l-80 84l-80 -84h48v-80h-102c-49 0 -90 41 -90 91c0 40 26 74 61 86c5 29 29 51 59 51c10 0 18 -3 26 -7c19 40 59 67 105 67c64 0 115 -53 115 -118v-3z" />
- <glyph glyph-name="ion-usb" unicode="&#xf2b8;" horiz-adv-x="256"
-d="M16 228v0v0zM256 320c0 -11 -6 -21 -14 -27v0c-2 -1 -3 -5 -3 -7c-1 -20 -3 -36 -9 -50c-7 -19 -20 -33 -39 -46c-17 -12 -29 -21 -36 -34c-7 -12 -11 -28 -11 -53v-24c0 -7 2 -13 10 -18c4 -2 7 -6 10 -9c8 -9 14 -21 14 -34c0 -28 -22 -50 -50 -50s-50 22 -50 50v1v0
-c0 18 10 33 24 42c5 4 9 5 9 18v0c0 14 -3 17 -10 27s-18 17 -32 26c-19 13 -33 27 -40 46c-6 15 -8 31 -9 39s-2 9 -4 11c-10 6 -16 16 -16 28c0 18 14 32 32 32s32 -14 32 -32c0 -10 -4 -20 -12 -26c-3 -2 -4 -11 -4 -14v0v0c0 -9 3 -18 7 -28c10 -21 45 -44 52 -44
-s8 5 8 12v196s-1 2 -3 4h-1v1v0c-9 6 -15 16 -15 27c0 18 14 32 32 32s32 -14 32 -32c0 -11 -5 -21 -14 -27v0c-2 -2 -2 -3 -2 -5v-140c0 -10 2 -12 8 -11c13 3 48 30 52 43c3 10 6 23 7 41v1c0 2 -2 4 -3 6c-10 6 -16 16 -16 28c0 18 14 32 32 32s32 -14 32 -32zM32 240
-c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM128 368c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM224 304c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" />
- <glyph glyph-name="ion-videocamera" unicode="&#xf256;"
-d="M335 263v-66l113 35v-89v-88l-113 35v-65c0 -5 -4 -9 -9 -9h-317c-5 0 -9 4 -9 9v12v55v171c0 5 4 9 9 9h208v38c0 4 -6 10 -10 10h-176v48h178c36 0 65 -29 65 -64v-32h52c5 0 9 -4 9 -9zM226 107c20 0 36 16 36 36s-16 35 -36 35s-36 -15 -36 -35c0 -10 4 -19 11 -26
-h-68c7 7 11 16 11 26c0 20 -16 36 -36 36s-36 -16 -36 -36s16 -36 36 -36h12h95h11z" />
- <glyph glyph-name="ion-volume-high" unicode="&#xf257;"
-d="M199 40l-95 88h-104v128h104l95 88v-304zM255 92l-20 16c17 24 27 52 27 84s-10 60 -27 84l20 16c20 -28 33 -63 33 -100s-13 -72 -33 -100zM322 46l-21 16c27 36 43 81 43 130s-16 94 -43 130l21 16c30 -41 48 -91 48 -146s-18 -105 -48 -146zM365 369l20 15
-c39 -54 63 -120 63 -192s-24 -138 -63 -192l-20 15c36 49 58 111 58 177s-22 128 -58 177z" />
- <glyph glyph-name="ion-volume-low" unicode="&#xf258;" horiz-adv-x="288"
-d="M199 40l-95 88h-104v128h104l95 88v-304zM255 92l-20 16c17 24 28 52 28 84s-11 60 -28 84l20 16c20 -28 33 -63 33 -100s-13 -72 -33 -100z" />
- <glyph glyph-name="ion-volume-medium" unicode="&#xf259;" horiz-adv-x="370"
-d="M199 40l-95 88h-104v128h104l95 88v-304zM255 92l-20 16c17 24 28 52 28 84s-11 60 -28 84l20 16c20 -28 33 -63 33 -100s-13 -72 -33 -100zM322 46l-21 16c27 36 43 81 43 130s-16 94 -43 130l21 16c30 -41 48 -91 48 -146s-18 -105 -48 -146z" />
- <glyph glyph-name="ion-volume-mute" unicode="&#xf25a;"
-d="M224 231l47 51v-180l-47 51h-65v78h65zM332 388c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-39 0 -76 10 -108 27l-1 1c-69 38 -115 112 -115 196c0 124 100 224 224 224c39 0 75 -10 107 -28h1zM362 93c20 28 33 62 33 99c0 66 -38 123 -92 151
-c-6 3 -11 6 -17 8c-19 7 -40 11 -62 11c-37 0 -71 -12 -99 -32l73 -74h-76l-36 35c-20 -28 -32 -62 -32 -99c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c19 -7 39 -11 61 -11c37 0 72 12 100 32l-20 20v77z" />
- <glyph glyph-name="ion-wand" unicode="&#xf358;"
-d="M192 208l48 48l48 -48l-48 -48zM0 16l176 176l48 -48l-176 -176zM224 352v64h32v-64h-32zM398 344l-45 -45l-23 22l46 45zM127 299l-45 45l22 22l45 -45zM376 50l-46 45l23 23l45 -46zM384 192v32h64v-32h-64z" />
- <glyph glyph-name="ion-waterdrop" unicode="&#xf25b;" horiz-adv-x="320"
-d="M175 409c40 -41 145 -160 145 -288c0 -85 -72 -153 -160 -153c-56 0 -106 27 -134 69c-6 9 -11 19 -15 29c-7 17 -11 35 -11 55v4c1 67 31 131 64 183c20 31 42 57 59 77c9 10 16 18 22 24l1 1v0c4 3 8 6 14 6c5 0 10 -3 14 -6v0zM160 24c55 0 100 45 100 100
-c0 14 -3 28 -8 40c-17 -65 -70 -116 -136 -130c13 -6 28 -10 44 -10z" />
- <glyph glyph-name="ion-wifi" unicode="&#xf25c;"
-d="M224 352c80 0 156 -30 214 -84l10 -10l-10 -9l-32 -32l-10 -10l-9 9c-44 41 -103 64 -163 64s-119 -23 -163 -64l-9 -9l-10 10l-32 32l-10 9l10 10c58 54 134 84 214 84v0zM365 192l11 -10l-10 -10l-33 -32l-9 -9l-10 8c-25 22 -57 35 -90 35s-65 -13 -90 -35l-10 -8
-l-9 9l-33 32l-10 10l11 10c37 33 83 52 132 54v0h9v0v0c52 0 102 -19 141 -54zM224 32l-10 10l-52 52l-11 10l12 10c17 11 32 20 61 20s47 -9 62 -20l11 -10l-10 -10l-53 -52z" />
- <glyph glyph-name="ion-wineglass" unicode="&#xf2b9;" horiz-adv-x="256"
-d="M167 153c-11 -4 -24 -8 -24 -32v-94c0 -11 4 -19 12 -25c3 -2 7 -4 15 -6c32 -9 48 -16 50 -18c2 -1 4 -3 4 -7c0 0 -14 -3 -96 -3s-96 3 -96 3c0 4 2 6 4 7c2 2 18 9 50 18c8 2 11 4 14 6c8 6 11 14 11 25v94c0 24 -11 28 -22 32s-18 6 -26 11c-12 7 -23 16 -32 26
-c-20 23 -31 52 -31 87c0 50 4 100 8 114s14 25 31 25h178c17 0 27 -11 31 -25s8 -65 8 -115c0 -35 -11 -63 -31 -86c-9 -10 -20 -19 -32 -26c-8 -5 -15 -7 -26 -11zM128 178c26 0 50 11 67 28l6 6c16 18 22 35 23 65s-2 83 -8 107h-177c-7 -35 -8 -80 -7 -108s7 -46 23 -64
-c2 -3 4 -6 7 -8c17 -16 41 -26 66 -26zM208 277c0 -10 -1 -20 -4 -29s-8 -18 -15 -25l-5 -5c-14 -14 -34 -23 -56 -23c-21 0 -41 8 -55 22l-6 6c-7 7 -12 16 -15 25s-3 15 -4 29c-1 9 0 34 1 53c1 10 2 19 3 22h153c1 -6 2 -14 2 -22c1 -21 1 -45 1 -53zM192 269v0v26
-c0 4 -4 8 -8 8s-8 -4 -8 -8v-26c0 -3 1 -6 3 -7c1 -1 3 -1 5 -1c4 0 8 3 8 8zM191 316c1 2 1 4 1 6s-2 4 -4 5s-4 1 -6 1s-4 -1 -5 -3s-1 -4 -1 -6s2 -4 4 -5s4 -1 6 -1s4 1 5 3z" />
- <glyph glyph-name="ion-woman" unicode="&#xf25d;" horiz-adv-x="192"
-d="M30 299c3 12 17 33 42 34h48c24 -1 38 -22 42 -34l29 -104c6 -23 -21 -32 -27 -10l-26 96h-9l46 -169h-43v-127c0 -23 -31 -23 -31 0v127h-10v-127c0 -23 -32 -23 -32 0v127h-42l45 169h-7l-27 -96c-7 -21 -33 -13 -27 10zM133 379c0 -21 -17 -37 -37 -37s-37 16 -37 37
-s17 37 37 37s37 -16 37 -37z" />
- <glyph glyph-name="ion-wrench" unicode="&#xf2ba;"
-d="M430 333c14 -14 19 -31 18 -44s-6 -39 -32 -65s-77 -42 -113 -24c-5 3 -13 5 -21 -3c-10 -9 -202 -215 -202 -215c-17 -19 -48 -18 -66 0s-19 49 0 66c0 0 207 194 215 202s5 16 3 22c-20 47 2 89 24 112c22 24 51 31 65 32c13 1 31 -5 44 -18l-57 -56l10 -56l55 -10z
-M59 5c6 6 6 17 0 23s-16 6 -22 0s-6 -17 0 -23s16 -6 22 0z" />
- <glyph glyph-name="ion-xbox" unicode="&#xf30c;"
-d="M95 200c-49 -72 -50 -139 -50 -143c-28 38 -45 84 -45 135c0 67 30 128 77 169l3 -1c51 -18 93 -68 93 -68s-38 -33 -78 -92zM448 192c0 -51 -17 -97 -45 -135c0 4 -1 71 -50 143c-40 59 -78 92 -78 92s42 50 93 68l3 1c47 -41 77 -102 77 -169zM169 367
-c-37 17 -65 12 -72 10c36 25 80 39 127 39s91 -14 127 -39c-7 2 -35 6 -72 -10c-29 -13 -55 -35 -55 -35s-26 22 -55 35zM327 155c40 -49 54 -85 62 -108l2 -5c-41 -46 -101 -74 -167 -74s-126 28 -167 74l1 5c8 23 23 59 63 108c46 57 103 94 103 94s57 -37 103 -94z" />
- </font>
-</defs></svg>
diff --git a/public/fonts/vendor/Ionicons/ionicons.ttf b/public/fonts/vendor/Ionicons/ionicons.ttf
deleted file mode 100644
index c4e4632..0000000
--- a/public/fonts/vendor/Ionicons/ionicons.ttf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/Ionicons/ionicons.woff b/public/fonts/vendor/Ionicons/ionicons.woff
deleted file mode 100644
index 5f3a14e..0000000
--- a/public/fonts/vendor/Ionicons/ionicons.woff
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eot b/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eot
deleted file mode 100644
index b93a495..0000000
--- a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eot
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.svg b/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.svg
deleted file mode 100644
index 94fb549..0000000
--- a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="400" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
-<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
-<glyph unicode="&#x2000;" horiz-adv-x="650" />
-<glyph unicode="&#x2001;" horiz-adv-x="1300" />
-<glyph unicode="&#x2002;" horiz-adv-x="650" />
-<glyph unicode="&#x2003;" horiz-adv-x="1300" />
-<glyph unicode="&#x2004;" horiz-adv-x="433" />
-<glyph unicode="&#x2005;" horiz-adv-x="325" />
-<glyph unicode="&#x2006;" horiz-adv-x="216" />
-<glyph unicode="&#x2007;" horiz-adv-x="216" />
-<glyph unicode="&#x2008;" horiz-adv-x="162" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="325" />
-<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
-<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
-<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
-<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
-<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
-<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
-<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
-<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
-<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
-<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
-<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
-<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
-<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
-<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
-<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
-<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
-<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
-<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
-<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
-<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
-<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
-<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
-<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
-<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
-<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
-<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
-<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
-<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
-<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
-<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
-<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
-<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
-<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
-<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
-<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
-<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
-<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
-<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
-<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
-<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
-<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
-<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
-<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
-<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
-<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
-<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
-<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
-<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
-<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
-<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
-<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
-<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
-<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
-<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
-<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
-<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
-<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
-<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
-<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
-<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
-<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
-<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
-<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
-<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
-<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
-<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
-<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
-<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
-<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
-<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
-<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
-<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
-<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
-<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
-<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
-<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
-<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
-<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
-<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
-<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
-<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
-<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
-<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
-<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
-<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
-<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
-<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
-<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
-<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
-<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
-<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
-<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
-<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
-<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
-<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
-<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
-<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
-<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
-<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
-<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
-<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
-<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
-<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
-<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
-<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
-<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
-<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
-<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
-<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
-<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
-<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
-<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
-<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
-<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
-<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
-<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
-<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
-<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
-<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
-<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
-<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
-<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
-<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
-<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
-<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
-<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
-<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
-<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
-<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
-<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
-<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
-<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
-<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
-<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
-<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
-<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
-<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
-<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
-<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
-<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
-<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
-<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
-<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
-<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
-<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
-<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
-<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
-<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
-<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
-<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
-<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
-<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
-<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
-<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
-<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
-<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
-<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
-<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
-<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
-<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
-<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
-<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
-<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
-<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
-<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.ttf b/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 1413fc6..0000000
--- a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff b/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff
deleted file mode 100644
index 9e61285..0000000
--- a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff2 b/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff2
deleted file mode 100644
index 64539b5..0000000
--- a/public/fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff2
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/font-awesome/fontawesome-webfont.eot b/public/fonts/vendor/font-awesome/fontawesome-webfont.eot
deleted file mode 100644
index e9f60ca..0000000
--- a/public/fonts/vendor/font-awesome/fontawesome-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/font-awesome/fontawesome-webfont.svg b/public/fonts/vendor/font-awesome/fontawesome-webfont.svg
deleted file mode 100644
index 855c845..0000000
--- a/public/fonts/vendor/font-awesome/fontawesome-webfont.svg
+++ /dev/null
@@ -1,2671 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg>
-<metadata>
-Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
- By ,,,
-Copyright Dave Gandy 2016. All rights reserved.
-</metadata>
-<defs>
-<font id="FontAwesome" horiz-adv-x="1536" >
- <font-face
- font-family="FontAwesome"
- font-weight="400"
- font-stretch="normal"
- units-per-em="1792"
- panose-1="0 0 0 0 0 0 0 0 0 0"
- ascent="1536"
- descent="-256"
- bbox="-1.02083 -256.962 2304.6 1537.02"
- underline-thickness="0"
- underline-position="0"
- unicode-range="U+0020-F500"
- />
-<missing-glyph horiz-adv-x="896"
-d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
- <glyph glyph-name=".notdef" horiz-adv-x="896"
-d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
- <glyph glyph-name=".null" horiz-adv-x="0"
- />
- <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597"
- />
- <glyph glyph-name="space" unicode=" " horiz-adv-x="448"
- />
- <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792"
- />
- <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792"
- />
- <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792"
- />
- <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792"
- />
- <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792"
- />
- <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792"
- />
- <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792"
- />
- <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792"
- />
- <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792"
- />
- <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792"
-d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
- <glyph glyph-name="music" unicode="&#xf001;"
-d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
-t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
- <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664"
-d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
-t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
- <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792"
-d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
-t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
-M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
- <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792"
-d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
-q-18 -18 -44 -18z" />
- <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664"
-d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
-l502 -73q56 -9 56 -46z" />
- <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664"
-d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
-l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
- <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
-d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
-t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
- <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920"
-d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
-q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
-t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
-q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
-t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
- <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664"
-d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
-h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
- <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
-d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
-h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
-q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
- <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792"
-d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
-h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
- <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792"
-d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
- <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408"
-d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
-t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
- <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664"
-d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
-q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
-t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
- <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664"
-d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
-M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
-" />
- <glyph glyph-name="off" unicode="&#xf011;"
-d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
-t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
- <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792"
-d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
-v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
- <glyph glyph-name="cog" unicode="&#xf013;"
-d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
-q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
-l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
-q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
- <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408"
-d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
-q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
-q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
- <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664"
-d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
-l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
- <glyph glyph-name="file_alt" unicode="&#xf016;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-" />
- <glyph glyph-name="time" unicode="&#xf017;"
-d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920"
-d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
-q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
- <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664"
-d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
-q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
- <glyph glyph-name="download" unicode="&#xf01a;"
-d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
-t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="upload" unicode="&#xf01b;"
-d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
-t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="inbox" unicode="&#xf01c;"
-d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
-q25 -61 25 -123z" />
- <glyph glyph-name="play_circle" unicode="&#xf01d;"
-d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="repeat" unicode="&#xf01e;"
-d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
-l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
- <glyph glyph-name="refresh" unicode="&#xf021;"
-d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
-q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
-q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
- <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792"
-d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
-M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
-t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
-t47 -113z" />
- <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152"
-d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
- <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792"
-d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
-t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
- <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664"
-d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
-t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
-t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
- <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768"
-d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
- <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152"
-d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
-t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
- <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664"
-d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
-t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
-t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
-t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
- <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408"
-d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
-M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
- <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792"
-d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
-M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
- <glyph glyph-name="tag" unicode="&#xf02b;"
-d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
-l715 -714q37 -39 37 -91z" />
- <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920"
-d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
-l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
- <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664"
-d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
-q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
-q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
-t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
- <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280"
-d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
- <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664"
-d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
-v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
- <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
-d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
-q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664"
-d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
-q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
-q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
- <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408"
-d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
-q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
-t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
-t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
- <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024"
-d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
-q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
- <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792"
-d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
-t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
-q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
-q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
- <glyph glyph-name="text_width" unicode="&#xf035;"
-d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
-t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
-q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
-t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
-t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
- <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792"
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
-t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
- <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792"
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
-h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
- <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792"
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
-t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
- <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792"
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
-t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
- <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792"
-d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
-t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
-q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
-t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
-q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
- <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792"
-d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
-t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
-q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
- <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792"
-d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
-t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
-q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
- <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792"
-d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
-q39 -17 39 -59z" />
- <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920"
-d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
-q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
- <glyph glyph-name="pencil" unicode="&#xf040;"
-d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
-q53 0 91 -38l235 -234q37 -39 37 -91z" />
- <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024"
-d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
- <glyph glyph-name="adjust" unicode="&#xf042;"
-d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024"
-d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
-q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
- <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792"
-d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
-q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
-l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
- <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664"
-d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
-q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
-t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
- <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664"
-d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
-q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
-q24 -24 24 -57t-24 -57z" />
- <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792"
-d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
-t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
- <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024"
-d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
- <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792"
-d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
-q19 19 32 13t13 -32v-710q4 10 13 19z" />
- <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664"
-d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
- <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408"
-d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
- <glyph glyph-name="pause" unicode="&#xf04c;"
-d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
- <glyph glyph-name="stop" unicode="&#xf04d;"
-d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
- <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664"
-d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
- <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792"
-d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
-q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
- <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024"
-d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
- <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538"
-d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
- <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280"
-d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
- <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280"
-d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
- <glyph glyph-name="plus_sign" unicode="&#xf055;"
-d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
-t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="minus_sign" unicode="&#xf056;"
-d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
-t103 -385.5z" />
- <glyph glyph-name="remove_sign" unicode="&#xf057;"
-d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
-q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="ok_sign" unicode="&#xf058;"
-d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="question_sign" unicode="&#xf059;"
-d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
-q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="info_sign" unicode="&#xf05a;"
-d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
-t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="screenshot" unicode="&#xf05b;"
-d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
-q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
-q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
- <glyph glyph-name="remove_circle" unicode="&#xf05c;"
-d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
-l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
-t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="ok_circle" unicode="&#xf05d;"
-d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
-t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="ban_circle" unicode="&#xf05e;"
-d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
-t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
- <glyph glyph-name="arrow_left" unicode="&#xf060;"
-d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
-t32.5 -90.5z" />
- <glyph glyph-name="arrow_right" unicode="&#xf061;"
-d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
- <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664"
-d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
-q37 -39 37 -91z" />
- <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664"
-d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
- <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792"
-d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
-t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
- <glyph glyph-name="resize_full" unicode="&#xf065;"
-d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
-q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
- <glyph glyph-name="resize_small" unicode="&#xf066;"
-d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
-t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
- <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408"
-d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
- <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408"
-d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
- <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664"
-d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
-q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
- <glyph glyph-name="exclamation_sign" unicode="&#xf06a;"
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
-q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
- <glyph glyph-name="gift" unicode="&#xf06b;"
-d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
-q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
-t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
- <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792"
-d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
-q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
-t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
- <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408"
-d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
-q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
- <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792"
-d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
-t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
- <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792"
-d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
-q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
-q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
-" />
- <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792"
-d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
-q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
- <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408"
-d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
-q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
- <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664"
-d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
-M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
-q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
-h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
- <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792"
-d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
-t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
-v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
-t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
- <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792"
-d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
-q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
- <glyph glyph-name="magnet" unicode="&#xf076;"
-d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
-q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
- <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792"
-d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
- <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792"
-d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
- <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920"
-d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
-zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
-" />
- <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664"
-d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
-t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
- <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664"
-d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
- <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920"
-d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
-t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
- <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768"
-d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
- <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792"
-d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
- <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048"
-d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
- <glyph glyph-name="twitter_sign" unicode="&#xf081;"
-d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
-q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
-t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="facebook_sign" unicode="&#xf082;"
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
-q0 119 84.5 203.5t203.5 84.5h960z" />
- <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792"
-d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
-t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
-q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
- <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792"
-d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
-l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
-t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
- <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920"
-d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
-t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
-l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
-l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
-q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
-t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
-q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
-q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
- <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792"
-d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
-q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
-q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
- <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;"
-d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
-t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
-q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
-q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
- <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;"
-d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
-t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
-M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
-h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
- <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896"
-d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
- <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792"
-d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
-q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
-q224 0 351 -124t127 -344z" />
- <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664"
-d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
-q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
- <glyph glyph-name="linkedin_sign" unicode="&#xf08c;"
-d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
-q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152"
-d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
-t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
- <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792"
-d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
-q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
- <glyph glyph-name="signin" unicode="&#xf090;"
-d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
-q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664"
-d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
-t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
-q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
- <glyph glyph-name="github_sign" unicode="&#xf092;"
-d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
-q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
-t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
-q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664"
-d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
-t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
- <glyph glyph-name="lemon" unicode="&#xf094;"
-d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
-q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
-q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
-q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
- <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408"
-d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
-q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
-t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
- <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408"
-d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
-q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280"
-d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
-q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
- <glyph glyph-name="phone_sign" unicode="&#xf098;"
-d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
-t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
-t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
-" />
- <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664"
-d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
-q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
- <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024"
-d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
- <glyph glyph-name="github" unicode="&#xf09b;"
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
-q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
-t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
-q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
-M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
- <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664"
-d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
-t316.5 -131.5t131.5 -316.5z" />
- <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920"
-d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
-q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
- <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408"
-d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
-t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
-q187 -186 294 -425.5t120 -501.5z" />
- <glyph glyph-name="hdd" unicode="&#xf0a0;"
-d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
-h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
-l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
- <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792"
-d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
-t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
- <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792"
-d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
-M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
-t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
- <glyph glyph-name="certificate" unicode="&#xf0a3;"
-d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
-l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
-l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
- <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792"
-d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
-q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
-q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
-t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
- <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792"
-d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
-t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
-M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
-q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
- <glyph glyph-name="hand_up" unicode="&#xf0a6;"
-d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
-q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
-t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
-q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
- <glyph glyph-name="hand_down" unicode="&#xf0a7;"
-d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
-t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
-q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
-q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
- <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;"
-d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;"
-d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;"
-d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;"
-d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="globe" unicode="&#xf0ac;"
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
-q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
-q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
-q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
-t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
-q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
-q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
-t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
-t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
-q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
-q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
-q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
-t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
-q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
-q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
- <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664"
-d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
-t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
- <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
-d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
-t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
- <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408"
-d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
- <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
-d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
-t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
- <glyph glyph-name="fullscreen" unicode="&#xf0b2;"
-d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
-l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
-" />
- <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920"
-d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
-t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
-t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
-t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
- <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664"
-d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
-l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
-t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
-q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
- <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920"
-d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
-" />
- <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664"
-d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
- <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792"
-d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
-q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
-q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
-q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
-q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
- <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792"
-d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
-h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
- <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408"
-d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
-l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
-z" />
- <glyph glyph-name="save" unicode="&#xf0c7;"
-d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
-h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
- <glyph glyph-name="sign_blank" unicode="&#xf0c8;"
-d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="reorder" unicode="&#xf0c9;"
-d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
-t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
- <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792"
-d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
-t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
-M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
- <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792"
-d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
-q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
-t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
-q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
- <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
-d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
-l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
-l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
- <glyph glyph-name="underline" unicode="&#xf0cd;"
-d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
-q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
-q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
-q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
- <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664"
-d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
-v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
-q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
-q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
-z" />
- <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664"
-d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
-l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
- <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792"
-d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
-t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
-t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
- <glyph glyph-name="pinterest" unicode="&#xf0d2;"
-d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
-q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
-q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;"
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
-t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
-t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
- <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;"
-d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
-h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304"
-d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
-q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
- <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920"
-d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
-v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
- <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024"
-d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
- <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024"
-d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
- <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640"
-d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
- <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640"
-d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
- <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664"
-d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
- <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024"
-d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
- <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024"
-d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
- <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024"
-d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
- <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792"
-d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
-q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
- <glyph glyph-name="linkedin" unicode="&#xf0e1;"
-d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
-q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
- <glyph glyph-name="undo" unicode="&#xf0e2;"
-d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
-t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
- <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792"
-d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
-t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
-q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
-q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
- <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792"
-d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
-t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
-t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
-q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792"
-d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
-q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
-t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
- <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792"
-d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
-t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
-t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
-q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
- <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896"
-d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
- <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792"
-d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
-q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
-z" />
- <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664"
-d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
-q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
-q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
- <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792"
-d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
-h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
- <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024"
-d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
-q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
-q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
-t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
- <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792"
-d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
-q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
- <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920"
-d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
-q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
- <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920"
-d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
-q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
- <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408"
-d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
-t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
-t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
-t271.5 -112.5t112.5 -271.5z" />
- <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
-d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
-t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
-t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
- <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792"
-d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
-t66 -158z" />
- <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792"
-d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
-t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
- <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920"
-d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
-t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
- <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408"
-d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
-t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
- <glyph glyph-name="file_text_alt" unicode="&#xf0f6;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
-q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
- <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408"
-d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
- <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408"
-d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
-t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
-v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
- <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920"
-d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
-t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
-q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
- <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792"
-d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
-q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
- <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920"
-d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
-q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
- <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664"
-d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
- <glyph glyph-name="h_sign" unicode="&#xf0fd;"
-d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="f0fe" unicode="&#xf0fe;"
-d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024"
-d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
-t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
- <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024"
-d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
-l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
- <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152"
-d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
-q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
- <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152"
-d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
-t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
- <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640"
-d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
- <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640"
-d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
- <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152"
-d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
- <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152"
-d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
- <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920"
-d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
-t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
- <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920"
-d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
-M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
- <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152"
-d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
-q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
- <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768"
-d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
-q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
- <glyph glyph-name="circle_blank" unicode="&#xf10c;"
-d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
-t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664"
-d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
-M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
- <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664"
-d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
-v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
- <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792"
-d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
-t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
-M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
-q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
- <glyph glyph-name="circle" unicode="&#xf111;"
-d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792"
-d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
-l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
- <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664"
-d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
-q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
-t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
-q0 -87 -27 -168q136 -160 136 -398z" />
- <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664"
-d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
-q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
- <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920"
-d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
-v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
-" />
- <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792"
- />
- <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792"
- />
- <glyph glyph-name="smile" unicode="&#xf118;"
-d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
-t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="frown" unicode="&#xf119;"
-d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
-t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
-t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="meh" unicode="&#xf11a;"
-d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
-t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920"
-d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
-t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
-t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
- <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920"
-d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
-h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
-h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
-q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
-h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
- <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792"
-d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
-h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
-q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
- <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792"
-d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
-q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
-q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
-q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
- <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664"
-d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
-t9 -23z" />
- <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920"
-d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
-l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
- <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792"
-d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
-q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
- <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664"
-d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
-l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
- <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408"
-d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
- <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664"
-d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
-v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
- <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024"
-d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
-q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
-q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
- <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664"
-d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
-q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
-l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
-t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
- <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024"
-d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
-t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
- <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640"
-d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
-q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
- <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640"
-d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
- <glyph glyph-name="superscript" unicode="&#xf12b;"
-d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
-M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
-t-65.5 -51.5t-30.5 -63h232v80h126z" />
- <glyph glyph-name="subscript" unicode="&#xf12c;"
-d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
-M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
-h232v80h126z" />
- <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920"
-d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
- <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664"
-d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
-t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
-q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
-q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
- <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152"
-d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
-t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
- <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408"
-d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
-q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
-t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
- <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280"
-d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
-t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
- <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664"
-d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
-q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
- <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408"
-d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
-q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
-q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
- <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664"
-d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
-q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
- <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792"
-d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
- <glyph glyph-name="chevron_sign_left" unicode="&#xf137;"
-d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="chevron_sign_right" unicode="&#xf138;"
-d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="chevron_sign_up" unicode="&#xf139;"
-d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;"
-d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408"
-d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
- <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792"
-d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
- <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792"
-d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
-q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
-t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
- <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152"
-d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
-v-320h736z" />
- <glyph glyph-name="bullseye" unicode="&#xf140;"
-d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
-t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408"
-d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
- <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384"
-d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
- <glyph glyph-name="_303" unicode="&#xf143;"
-d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
-q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="play_sign" unicode="&#xf144;"
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
-q16 -8 32 -8q17 0 32 9z" />
- <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792"
-d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
-t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
- <glyph glyph-name="minus_sign_alt" unicode="&#xf146;"
-d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
-t84.5 -203.5z" />
- <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408"
-d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
-t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024"
-d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
- <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024"
-d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
- <glyph glyph-name="check_sign" unicode="&#xf14a;"
-d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
-t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="edit_sign" unicode="&#xf14b;"
-d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_312" unicode="&#xf14c;"
-d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
-q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="share_sign" unicode="&#xf14d;"
-d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
-t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="compass" unicode="&#xf14e;"
-d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="collapse" unicode="&#xf150;"
-d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="collapse_top" unicode="&#xf151;"
-d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_317" unicode="&#xf152;"
-d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
-t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024"
-d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
-t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
-l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
- <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024"
-d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
-q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
- <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024"
-d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
-t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
-t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
-t53 -63.5t31.5 -76.5t13 -94z" />
- <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898"
-d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
-q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
- <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027"
-d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
-l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
- <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280"
-d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
-q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
- <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792"
-d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
-t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
-q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
- <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280"
-d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
-l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
-t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
- <glyph glyph-name="file" unicode="&#xf15b;"
-d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
- <glyph glyph-name="file_text" unicode="&#xf15c;"
-d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
-q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
- <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664"
-d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
-v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
-l230 -662h70z" />
- <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664"
-d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
-v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
-v119h121z" />
- <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792"
-d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
-q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
- <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792"
-d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
-q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
- <glyph glyph-name="sort_by_order" unicode="&#xf162;"
-d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
-zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
-t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
- <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;"
-d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
-t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
-q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
- <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664"
-d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
-q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
-t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
- <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664"
-d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
-t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
-t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
- <glyph glyph-name="youtube_sign" unicode="&#xf166;"
-d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
-q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
-q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
-q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
-q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
-h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="youtube" unicode="&#xf167;"
-d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
-q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
-q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
-q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
-q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
- <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408"
-d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
-q25 45 64 45h241q22 0 31 -15z" />
- <glyph glyph-name="xing_sign" unicode="&#xf169;"
-d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
-l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792"
-d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
-l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
-q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
- <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792"
-d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
- <glyph glyph-name="stackexchange" unicode="&#xf16c;"
-d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
- <glyph glyph-name="instagram" unicode="&#xf16d;"
-d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
-q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
-t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
-q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
- <glyph glyph-name="flickr" unicode="&#xf16e;"
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
-t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
- <glyph glyph-name="adn" unicode="&#xf170;"
-d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408"
-d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
-t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
-t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
-t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
- <glyph glyph-name="bitbucket_sign" unicode="&#xf172;"
-d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
-t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
-M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024"
-d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
-q78 2 134 29z" />
- <glyph glyph-name="tumblr_sign" unicode="&#xf174;"
-d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
-M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768"
-d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
- <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768"
-d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
- <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792"
-d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
- <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792"
-d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
- <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408"
-d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
-q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
- <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664"
-d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
- <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408"
-d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
-t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
-h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
- <glyph glyph-name="linux" unicode="&#xf17c;"
-d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
-M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
-q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
-q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
-t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
-q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
-q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
-q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
-q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
-t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
-t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
-q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
-t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
-q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
-t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
-t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
- <glyph glyph-name="dribble" unicode="&#xf17d;"
-d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
-t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
-q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
-t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="skype" unicode="&#xf17e;"
-d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
-t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
-q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
-q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
- <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280"
-d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
-M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
-l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
- <glyph glyph-name="trello" unicode="&#xf181;"
-d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
-q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
- <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280"
-d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
-q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
- <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024"
-d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
-M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
- <glyph glyph-name="gittip" unicode="&#xf184;"
-d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792"
-d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
-l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
-q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
- <glyph glyph-name="_366" unicode="&#xf186;"
-d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
-t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
- <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792"
-d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
-q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
- <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664"
-d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
-q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
-t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
- <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920"
-d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
-t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
-q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
-q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
-q39 5 64 -2.5t31 -16.5z" />
- <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792"
-d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
-q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
-q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
-q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
-M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
- <glyph glyph-name="renren" unicode="&#xf18b;"
-d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
-q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
- <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408"
-d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
-t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
-t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
-t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
- <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280"
-d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
-" />
- <glyph glyph-name="_374" unicode="&#xf18e;"
-d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
-t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;"
-d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
-t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_376" unicode="&#xf191;"
-d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
-M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="dot_circle_alt" unicode="&#xf192;"
-d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
-t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664"
-d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
-q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
- <glyph glyph-name="vimeo_square" unicode="&#xf194;"
-d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
-q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152"
-d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
-q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
- <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408"
-d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
-q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176"
-d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
-t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
-q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
- <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664"
-d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
-q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
-t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
- <glyph glyph-name="_384" unicode="&#xf199;"
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
-q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
-t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
- <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792"
-d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
-t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
-t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
-t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
-t273 -182.5t331.5 -68z" />
- <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792"
-d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
- <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048"
-d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
-q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
- <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304"
-d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
-q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
- <glyph glyph-name="_389" unicode="&#xf19e;"
-d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
-q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
- <glyph glyph-name="uniF1A0" unicode="&#xf1a0;"
-d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
-t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
- <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792"
-d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
-t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
-q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
-t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="_392" unicode="&#xf1a2;"
-d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
-q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
-q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
-q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_393" unicode="&#xf1a3;"
-d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
-v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
-t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920"
-d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
-v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
- <glyph glyph-name="_395" unicode="&#xf1a5;"
-d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
-t84.5 -203.5z" />
- <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048"
-d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
-v-369h123z" />
- <glyph glyph-name="_397" unicode="&#xf1a7;"
-d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
-v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
-q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038"
-d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
-q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
-q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
-q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
-t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
-q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
-t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
-t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
- <glyph glyph-name="_399" unicode="&#xf1a9;"
-d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
-q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
-q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
-t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
-q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
- <glyph glyph-name="_400" unicode="&#xf1aa;"
-d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
-M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
-t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
-q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
-t135.5 51q85 0 145 -60.5t60 -145.5z" />
- <glyph glyph-name="f1ab" unicode="&#xf1ab;"
-d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
-q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
-q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
-M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
-q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
-q20 0 20 -21v-418z" />
- <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792"
-d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
-l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
-t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
-q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
-q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
- <glyph glyph-name="_403" unicode="&#xf1ad;"
-d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
-t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
-q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
-q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
-t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
-q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
-q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
-t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
- <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280"
-d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
-q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
- <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664"
-d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
-q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
-q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
-t100.5 134t141.5 55.5z" />
- <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768"
-d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
- <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792"
-d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
-" />
- <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304"
-d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
-t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
-v-400l434 -186q36 -16 57 -48t21 -70z" />
- <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048"
-d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
-q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
-q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
- <glyph glyph-name="_410" unicode="&#xf1b5;"
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
-t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
-t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
- <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792"
-d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
-q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
-q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
- <glyph glyph-name="_412" unicode="&#xf1b7;"
-d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
-q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
-q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
-" />
- <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792"
-d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
-l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
-t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
-q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
- <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048"
-d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
-q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
-l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
- <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048"
-d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
-t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
-M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
- <glyph glyph-name="_416" unicode="&#xf1bb;"
-d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
-q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
- <glyph glyph-name="_417" unicode="&#xf1bc;"
-d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
-q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
-q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024"
-d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
- <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304"
-d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
-q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
-q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
-l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
-q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
-q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
-q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
- <glyph glyph-name="uniF1C0" unicode="&#xf1c0;"
-d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
-t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
-t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
- <glyph glyph-name="uniF1C1" unicode="&#xf1c1;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
-q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
-q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
- <glyph glyph-name="_422" unicode="&#xf1c2;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
-t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
- <glyph glyph-name="_423" unicode="&#xf1c3;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
-h-290v-107h68l189 -272l-194 -283h-68z" />
- <glyph glyph-name="_424" unicode="&#xf1c4;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
- <glyph glyph-name="_425" unicode="&#xf1c5;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
- <glyph glyph-name="_426" unicode="&#xf1c6;"
-d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
-v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
-q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
- <glyph glyph-name="_427" unicode="&#xf1c7;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
-q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
- <glyph glyph-name="_428" unicode="&#xf1c8;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
- <glyph glyph-name="_429" unicode="&#xf1c9;"
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
-l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
- <glyph glyph-name="_430" unicode="&#xf1ca;"
-d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
-q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
- <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792"
-d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
-q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
- <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048"
-d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
-q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
-t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
- <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792"
-d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
-q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
-t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
- <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792"
-d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
-t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
- <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792"
-d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
-t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
-t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
-q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
- <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792"
-d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
-l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
-q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
-q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
-t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
-t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="uniF1D2" unicode="&#xf1d2;"
-d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
-q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
-q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
-q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792"
-d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
-q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
-q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
-v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
- <glyph glyph-name="_439" unicode="&#xf1d4;"
-d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280"
-d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
-t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
-t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
- <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792"
-d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
-q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
-t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
-t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
- <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048"
-d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
-q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
-q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
-q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
- <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792"
-d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
- <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792"
-d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
-l863 639l-478 -797z" />
- <glyph glyph-name="_445" unicode="&#xf1da;"
-d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
-t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
-t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
- <glyph glyph-name="_446" unicode="&#xf1db;"
-d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792"
-d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
-t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
-t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
-q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
-q0 -26 -12 -48t-36 -22z" />
- <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280"
-d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
-q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
- <glyph glyph-name="_449" unicode="&#xf1de;"
-d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
-q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
- <glyph glyph-name="uniF1E0" unicode="&#xf1e0;"
-d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
-t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
- <glyph glyph-name="_451" unicode="&#xf1e1;"
-d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
-t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792"
-d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
-t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
-q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
-t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
- <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792"
-d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
-l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
- <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792"
-d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
-v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
-zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
-t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
- <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792"
-d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
-M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
- <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792"
-d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
-l401 400q38 37 91 37t90 -37z" />
- <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792"
-d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
-t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
-M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
-t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
- <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792"
-d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
- <glyph glyph-name="_459" unicode="&#xf1e9;"
-d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
-q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
-t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
-q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
- <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048"
-d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
-t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
- <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048"
-d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
-q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
-M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
- <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792"
-d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
-t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
-t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
-t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
-M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
-h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_463" unicode="&#xf1ed;"
-d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
-q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
-q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
- <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792"
-d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
-q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
- <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304"
-d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
-q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
-q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304"
-d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
-q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
-M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
-h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
-q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
-q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
-q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
-q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
-q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
-h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
-t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304"
-d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
-q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
-v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
-q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
-t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
- <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304"
-d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
-M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
-l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
-v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
-q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
-q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
-t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
-h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
-t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
- <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304"
-d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
-t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
-q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
-t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
-l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
-q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304"
-d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
-q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
-q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
-q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
-q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048"
-d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
-l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
-l418 363q10 8 23.5 7t21.5 -11z" />
- <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048"
-d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
-q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
-q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
- <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408"
-d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
-q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
-q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
- <glyph glyph-name="_474" unicode="&#xf1f9;"
-d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
-t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
-t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_475" unicode="&#xf1fa;"
-d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
-q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
-t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
-t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
- <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792"
-d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
-t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
- <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792"
-d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
-t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
- <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792"
-d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
-t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
-t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
-h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
-q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
- <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048"
-d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
- <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792"
-d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048"
-d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
-t9 -23z" />
- <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792"
-d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
-q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
-t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
-q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
- <glyph glyph-name="_483" unicode="&#xf203;"
-d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
-q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
-q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048"
-d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
-t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
-t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
- <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048"
-d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
-t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
- <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304"
-d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
-q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
-q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
-q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
- <glyph glyph-name="_487" unicode="&#xf207;"
-d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
-h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
-t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
- <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048"
-d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
-q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
-q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
- <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280"
-d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
-t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
-t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
-q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
-q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
-t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
- <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048"
-d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
-q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
-t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
-t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
- <glyph glyph-name="_491" unicode="&#xf20b;"
-d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
-t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
- <glyph glyph-name="_492" unicode="&#xf20c;"
-d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
-q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
-q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
- <glyph glyph-name="_493" unicode="&#xf20d;"
-d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
- <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048"
-d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
-q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
-q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
-h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
-l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
-l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
-zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
- <glyph glyph-name="f210" unicode="&#xf210;"
-d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
- <glyph glyph-name="_496" unicode="&#xf211;"
-d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
-q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
- <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048"
-d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
-q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
-q209 0 374 -102q172 107 374 102z" />
- <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048"
-d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
-q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
-q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
- <glyph glyph-name="_499" unicode="&#xf214;"
-d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
-l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
-v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
-M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
-v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
-h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
-t-43 -34t-16.5 -53.5z" />
- <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048"
-d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
-q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
- <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048"
-d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
-t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
-t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
-q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
- <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664"
-d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
-q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
- <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664"
-d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
-q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
- <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048"
-d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
-l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
- <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048"
-d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
-q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
-q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
-v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
-q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
- <glyph glyph-name="_506" unicode="&#xf21b;"
-d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
-t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
-q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
-t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
- <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304"
-d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
-t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
-l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
-t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
- <glyph glyph-name="_508" unicode="&#xf21d;"
-d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
-q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
-q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
-t158.5 -65.5t65.5 -158.5z" />
- <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792"
-d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
-q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
-t127 -344z" />
- <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280"
-d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
-q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
- <glyph glyph-name="_511" unicode="&#xf222;"
-d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
-q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280"
-d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
-t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_513" unicode="&#xf224;"
-d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
-q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792"
-d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
-q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
-t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
-t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792"
-d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
-t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
-q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
-q0 -226 -154 -391q103 -57 218 -57z" />
- <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920"
-d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
-q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
-t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
-q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
- <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048"
-d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
-t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
-t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
-t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
- <glyph glyph-name="_518" unicode="&#xf229;"
-d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
-t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280"
-d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
-t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
-t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048"
-d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
-t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
-t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280"
-d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
-t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
- <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280"
-d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
-t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
- <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792"
- />
- <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792"
- />
- <glyph glyph-name="_525" unicode="&#xf230;"
-d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
- <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280"
-d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
-l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
-q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
- <glyph glyph-name="_527" unicode="&#xf232;"
-d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
-t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
-l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
- <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792"
-d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
-q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
- <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048"
-d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
-t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
-t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
- <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048"
-d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
-q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
-t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
- <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048"
-d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
-q-26 0 -45 -19t-19 -45v-384h1152z" />
- <glyph glyph-name="_532" unicode="&#xf237;"
-d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
- <glyph glyph-name="_533" unicode="&#xf238;"
-d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
-t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
- <glyph glyph-name="_534" unicode="&#xf239;"
-d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
-t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
- <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792"
-d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
-q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
- <glyph glyph-name="_536" unicode="&#xf23b;"
-d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
- <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296"
-d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
-q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
-q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
-q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
-q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
-q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
-q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
-t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
-q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
-q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
-M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
-t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
-q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
-l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
-t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
-q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
-q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
- <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304"
-d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
-t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
-t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
- <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792"
-d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
-t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
-t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
-q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
-q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
- <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304"
-d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
-v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
- <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304"
-d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
- <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304"
-d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
- <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304"
-d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
- <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304"
-d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
-v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
- <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280"
-d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
- <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024"
-d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
- <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048"
-d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
-h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
- <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304"
-d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
-v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
- <glyph glyph-name="_549" unicode="&#xf249;"
-d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
- <glyph glyph-name="_550" unicode="&#xf24a;"
-d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
-z" />
- <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304"
-d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
-t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
-t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
-t90 38h2048q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304"
-d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
-t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
-M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792"
-d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
-zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
- <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304"
-d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
-q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
-t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
-t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
- <glyph glyph-name="_555" unicode="&#xf250;"
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
-t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
- <glyph glyph-name="_556" unicode="&#xf251;"
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
- <glyph glyph-name="_557" unicode="&#xf252;"
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
- <glyph glyph-name="_558" unicode="&#xf253;"
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
-h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
- <glyph glyph-name="_559" unicode="&#xf254;"
-d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
-t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
-h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
- <glyph glyph-name="_560" unicode="&#xf255;"
-d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
-q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
-t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
-q72 69 174 69z" />
- <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792"
-d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
-t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
-h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
- <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792"
-d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
-q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
-t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
-t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
-q0 -42 -23 -78t-61 -53l-310 -141h91z" />
- <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048"
-d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
-q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
-q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
- <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048"
-d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
-t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
-q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
-l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
- <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792"
-d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
-q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
-v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
-v-384h32z" />
- <glyph glyph-name="_566" unicode="&#xf25b;"
-d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
-v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
-q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
-q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
-q0 -53 37.5 -90.5t90.5 -37.5h668z" />
- <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973"
-d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
-t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
-q13 0 22 -8.5t10 -20.5z" />
- <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792"
-d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
-t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
-q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792"
-d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
-q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
-t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
-q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
-t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
- <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048"
-d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
- <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792"
-d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
-t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304"
-d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
-t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
-t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
-t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
-t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
-q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
- <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280"
-d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
-t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
-q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
- <glyph glyph-name="_574" unicode="&#xf264;"
-d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
-q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
-zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720"
-d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
-l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
- <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304"
-d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
-q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
-l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
- <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792"
-d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
-q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
-t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
-t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
-t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
-t191 -286t71 -348z" />
- <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792"
-d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
-q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
- <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792"
-d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
-q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
-q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
- <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792"
-d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
-q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
-" />
- <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792"
-d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
-q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
-M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
- <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048"
-d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
-v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
- <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792"
-d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
-h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
-q-68 175 -180 287z" />
- <glyph glyph-name="_584" unicode="&#xf26e;"
-d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
-q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
-q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
-q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
-q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
-t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
- <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792"
-d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
-M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
-q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
-t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
-q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
- <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792"
-d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
-h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
-v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
- <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792"
-d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
-t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
-t47 -113v-96h128q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792"
-d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
-M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
-q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792"
-d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
-t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
-t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
- <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792"
-d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
- <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024"
-d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
-q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
- <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792"
-d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
-q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
- <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048"
-d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
-v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
- <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792"
-d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
-q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
- <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792"
-d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
-t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
-t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
- <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792"
-d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
-t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
-t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
-t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
- <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024"
-d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
- <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792"
-d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
-q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
- <glyph glyph-name="f27e" unicode="&#xf27e;"
-d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
- <glyph glyph-name="uniF280" unicode="&#xf280;"
-d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
-h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
-l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
- <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792"
-d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
-l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
-t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
-q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
- <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792"
-d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
-q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
- <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304"
-d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
- <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792"
-d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
-t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
-t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
- <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792"
-d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
- <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792"
-d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
-q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
-q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
-q16 0 16 -16z" />
- <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304"
-d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
-q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
-t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
- <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792"
-d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
-t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304"
-d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
-q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
-q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
-q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
- <glyph glyph-name="_610" unicode="&#xf28a;"
-d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
-t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
-q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
-t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
- <glyph glyph-name="_611" unicode="&#xf28b;"
-d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
-t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_612" unicode="&#xf28c;"
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
-t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
- <glyph glyph-name="_613" unicode="&#xf28d;"
-d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
-t103 -385.5z" />
- <glyph glyph-name="_614" unicode="&#xf28e;"
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
-t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
- <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792"
-d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
-t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
- <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048"
-d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
-t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
-q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
-h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
- <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792"
-d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
-q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
-q15 0 25 -12q9 -12 6 -28z" />
- <glyph glyph-name="_618" unicode="&#xf293;"
-d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
-t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
- <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024"
-d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
- <glyph glyph-name="_620" unicode="&#xf295;"
-d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
-t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
-t271.5 -112.5t112.5 -271.5z" />
- <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792"
-d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
- <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792"
-d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
-q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
- <glyph glyph-name="_623" unicode="&#xf298;"
-d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
-t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
- <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792"
-d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
-q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
-q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
- <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792"
-d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
-q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
-M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
-t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="_626" unicode="&#xf29b;"
-d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
-l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
-M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
- <glyph glyph-name="_627" unicode="&#xf29c;"
-d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
-t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
-t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
-t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408"
-d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
-q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
-q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
-q3 -1 7 1t7 4l3 2q11 9 11 17z" />
- <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304"
-d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
-t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
-t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
-h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
-t9.5 -70.5z" />
- <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408"
-d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
-q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
-l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
-t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
-q-18 -19 -45 -19z" />
- <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176"
-d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
-q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
-q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
-t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
-t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
-t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
-t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
- <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792"
-d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
-M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
-t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
-t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
-q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
- <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304"
-d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
-q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
-q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
-q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
-q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
-q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
- <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792"
-d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
-t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
-t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
-l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
- <glyph glyph-name="uniF2A5" unicode="&#xf2a5;"
-d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
-q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
-q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
-t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535"
-d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
-l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
-q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
-q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
- <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664"
-d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
-t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
-l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
-q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
-l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
- <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792"
-d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
-q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
-q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
-q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
- <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280"
-d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
-q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
-M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
- <glyph glyph-name="uniF2AA" unicode="&#xf2aa;"
-d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
-M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
-q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
-t84.5 -203.5z" />
- <glyph glyph-name="uniF2AB" unicode="&#xf2ab;"
-d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
-q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
-t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
-t103 -385.5z" />
- <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664"
-d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
-q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
-t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
- <glyph glyph-name="uniF2AD" unicode="&#xf2ad;"
-d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
-q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
-t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
-q119 0 203.5 -84.5t84.5 -203.5z" />
- <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304"
-d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
-q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
-q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
- <glyph glyph-name="uniF2B0" unicode="&#xf2b0;"
-d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
-q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
-l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
-M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
- <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664"
-d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
-t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
- <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792"
-d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
-t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
-q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
-q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
-t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
-q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
-q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
-t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
- <glyph glyph-name="uniF2B3" unicode="&#xf2b3;"
-d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
-h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
- <glyph glyph-name="uniF2B4" unicode="&#xf2b4;"
-d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
-q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
- <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304"
-d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
-l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
-q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
-M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
-q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
- <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792"
-d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
-t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
-q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
- <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792"
-d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
-l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
-h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
-q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
- <glyph glyph-name="uniF2B8" unicode="&#xf2b8;"
-d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
-l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
-q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
-q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
- <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664"
-d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
-q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
-q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
- <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664"
-d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
-t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
-q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
-q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
- <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048"
-d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
-M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
-q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
-h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048"
-d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
-q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
-q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
-t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
-t113 47h1728q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792"
-d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
-t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792"
-d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
-t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
- <glyph glyph-name="uniF2C0" unicode="&#xf2c0;"
-d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
-t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
-q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
- <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280"
-d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
-t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
-q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048"
-d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
-t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
-v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
-q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048"
-d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
-M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
-q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
-h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792"
-d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
-q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
-t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
- <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304"
-d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
-t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
-t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
-t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
-q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
-t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
-q2 -42 2 -64z" />
- <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792"
-d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
-t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024"
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
- <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024"
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
- <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024"
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
- <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024"
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
- <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024"
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
-M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
- <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920"
-d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
-t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
-t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
-q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
-t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
-q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
- <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792"
-d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
-t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
-t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
-q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
-t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
-t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
- <glyph glyph-name="uniF2CE" unicode="&#xf2ce;"
-d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
-t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
-q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
-q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
-t72.5 -263.5z" />
- <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792"
-d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792"
-d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048"
-d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
-t47 -113z" />
- <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792"
-d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
-l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792"
-d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
-l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792"
-d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794"
-d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
-t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
-t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
-q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
-q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
-q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
-t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
- <glyph glyph-name="uniF2D7" unicode="&#xf2d7;"
-d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
-q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
-t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
- <glyph glyph-name="uniF2D8" unicode="&#xf2d8;"
-d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
-t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
-h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
-v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
- <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176"
-d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
-q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
-q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
-q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
-q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
-t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
- <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792"
-d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
-q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
-t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
-t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
-t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
- <glyph glyph-name="uniF2DB" unicode="&#xf2db;"
-d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
-q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
-t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
-q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
-h48q16 0 16 -16z" />
- <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664"
-d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
-t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
-q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
-l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
-q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
- <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792"
-d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
-q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
- <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792"
-d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
-t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
-t286 -191t191 -286t71 -348z" />
- <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920"
-d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
-t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
-q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
-q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
-t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
-q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
-M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
-q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
-q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
- <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792"
- />
- <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792"
- />
- <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792"
- />
- <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792"
- />
- </font>
-</defs></svg>
diff --git a/public/fonts/vendor/font-awesome/fontawesome-webfont.ttf b/public/fonts/vendor/font-awesome/fontawesome-webfont.ttf
deleted file mode 100644
index 35acda2..0000000
--- a/public/fonts/vendor/font-awesome/fontawesome-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/font-awesome/fontawesome-webfont.woff b/public/fonts/vendor/font-awesome/fontawesome-webfont.woff
deleted file mode 100644
index 400014a..0000000
--- a/public/fonts/vendor/font-awesome/fontawesome-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/font-awesome/fontawesome-webfont.woff2 b/public/fonts/vendor/font-awesome/fontawesome-webfont.woff2
deleted file mode 100644
index 4d13fc6..0000000
--- a/public/fonts/vendor/font-awesome/fontawesome-webfont.woff2
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/ionicons/dist/ionicons.eot b/public/fonts/vendor/ionicons/dist/ionicons.eot
deleted file mode 100644
index 4b1fd0f..0000000
--- a/public/fonts/vendor/ionicons/dist/ionicons.eot
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/ionicons/dist/ionicons.svg b/public/fonts/vendor/ionicons/dist/ionicons.svg
deleted file mode 100644
index ba35c41..0000000
--- a/public/fonts/vendor/ionicons/dist/ionicons.svg
+++ /dev/null
@@ -1,2090 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2018-6-14: Created with FontForge (http://fontforge.org)
--->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
-<metadata>
-Created by FontForge 20160407 at Thu Jun 14 08:50:34 2018
- By Adam Bradley
-Copyright (c) 2018, Adam Bradley
-</metadata>
-<defs>
-<font id="Ionicons" horiz-adv-x="416" >
- <font-face
- font-family="Ionicons"
- font-weight="400"
- font-stretch="normal"
- units-per-em="512"
- panose-1="2 0 5 3 0 0 0 0 0 0"
- ascent="448"
- descent="-64"
- bbox="-0.75 -64 512.487 448"
- underline-thickness="25.6"
- underline-position="-51.2"
- unicode-range="U+F100-F4CD"
- />
- <missing-glyph />
- <glyph glyph-name="ion-ios-color-fill" unicode="&#xf159;" horiz-adv-x="384"
-d="M167 330l172 -170c4 -4 1 -11 -5 -11v0c-10 0 -23 -1 -29 -7c-8 -8 -88 -86 -126 -123c-11 -10 -28 -10 -39 0l-131 126c-11 11 -12 29 -1 40l85 84l-50 49c-19 19 -19 49 0 68v0c9 9 22 14 34 14s25 -5 34 -14l56 -56v0zM64 338l48 -49l29 28l-50 49c-4 4 -9 6 -14 6
-c-6 0 -11 -3 -15 -8c-6 -8 -5 -19 2 -26zM339 108c11 -12 45 -53 45 -76c0 -26 -22 -48 -48 -48v0c-26 0 -48 21 -48 48c0 22 35 64 45 76c2 2 4 2 6 0z" />
- <glyph glyph-name="ion-md-backspace" unicode="&#xf28f;" horiz-adv-x="426"
-d="M390 352c20 0 36 -16 36 -36v-248c0 -20 -16 -36 -36 -36h-266c-12 0 -22 7 -28 16l-96 144l96 144c6 9 16 16 28 16h266zM337 128l-63 64l63 64l-25 25l-64 -64l-63 64l-25 -25l64 -64l-64 -64l25 -25l63 64l64 -64z" />
- <glyph glyph-name="ion-md-paper-plane" unicode="&#xf33e;"
-d="M0 177l416 223l-104 -416l-104 104l-74 -104l-15 148zM295 51l73 288l-291 -156l69 -25l181 138l-115 -161z" />
- <glyph glyph-name="ion-ios-cart" unicode="&#xf3f8;"
-d="M88 24c0 13 10 24 23 24s25 -11 25 -24s-11 -24 -24 -24s-24 11 -24 24zM336 0c-13 0 -24 12 -24 25s12 23 25 23s23 -12 23 -25s-11 -23 -24 -23zM416 316v-3l-16 -116c0 -3 -2 -5 -5 -5l-278 -47v0l4 -24c3 -16 7 -23 11 -26c3 -3 7 -3 9 -3v0h237c8 0 14 -6 14 -14
-s-6 -14 -14 -14h-237c-13 0 -25 5 -33 16c-7 9 -12 22 -14 36l-40 212s-2 9 -2 10v0c-1 7 -5 15 -10 16s-17 2 -26 2s-16 5 -16 14s7 14 16 14c27 0 41 0 49 -9c6 -8 8 -12 12 -19c1 -3 5 -4 8 -4l325 -32c2 0 5 -2 6 -4z" />
- <glyph glyph-name="ion-ios-rose" unicode="&#xf4a3;" horiz-adv-x="320"
-d="M320 307c-77 -89 -16 -136 -16 -204s-56 -119 -144 -119s-144 47 -144 115c0 60 35 100 93 131c25 14 33 17 52 26c30 13 65 27 105 38c17 5 35 9 54 13zM39 206c5 38 3 91 -39 135c0 0 66 -15 115 -41c14 -8 28 -17 37 -27c-12 -6 -24 -11 -36 -17c-7 -4 -14 -7 -20 -11
-c-25 -14 -44 -29 -57 -39zM256 370c0 0 26 -29 32 -51c-33 -7 -78 -20 -115 -36c-15 15 -43 32 -43 32c52 56 126 55 126 55zM144 351c-12 -8 -21 -16 -31 -27c-26 12 -41 18 -62 24c5 14 14 31 29 52c0 0 35 -11 64 -49z" />
- <glyph glyph-name="ion-ios-refresh" unicode="&#xf49c;" horiz-adv-x="384"
-d="M369 159v0c9 0 16 -7 15 -16c-8 -98 -91 -175 -192 -175c-106 0 -192 85 -192 191c0 104 84 189 188 191c2 0 4 2 4 4v46c0 13 14 21 25 14l96 -67c10 -6 10 -21 0 -27l-96 -67c-11 -7 -25 0 -25 13v50c0 2 -2 4 -4 4c-88 -2 -158 -73 -158 -161c0 -89 72 -161 162 -161
-c85 0 155 65 162 148c1 8 7 13 15 13z" />
- <glyph glyph-name="ion-md-musical-note" unicode="&#xf332;" horiz-adv-x="256"
-d="M128 384h128v-85h-85v-214c0 -47 -39 -85 -86 -85s-85 38 -85 85s38 86 85 86c16 0 30 -5 43 -12v225z" />
- <glyph glyph-name="ion-md-list-box" unicode="&#xf31a;" horiz-adv-x="384"
-d="M344 384c22 0 40 -18 40 -40v-304c0 -22 -18 -40 -40 -40h-304c-22 0 -40 18 -40 40v304c0 22 18 40 40 40h304zM240 80v48h-160v-48h160zM304 168v48h-224v-48h224zM304 256v48h-224v-48h224z" />
- <glyph glyph-name="ion-ios-mail" unicode="&#xf1b8;"
-d="M413 301c1 1 3 0 3 -2v-219c0 -18 -14 -32 -32 -32h-352c-18 0 -32 14 -32 32v219c0 2 2 3 3 2l108 -110c1 -1 1 -2 0 -3l-75 -80c-5 -5 -5 -13 0 -18c2 -2 6 -4 9 -4s7 2 9 4l75 80c1 1 2 1 3 0l18 -18c16 -16 36 -25 58 -25s43 8 58 24l18 19c1 1 2 1 3 0l75 -80
-c2 -2 6 -4 9 -4s7 2 9 4c5 5 5 13 0 18l-75 80c-1 1 -1 2 0 3zM208 153c-15 0 -29 6 -39 16l-157 160c5 4 12 7 20 7h352c8 0 14 -3 20 -7l-157 -160c-10 -11 -24 -16 -39 -16z" />
- <glyph glyph-name="ion-md-ice-cream" unicode="&#xf30d;" horiz-adv-x="320"
-d="M32 192h256l-128 -224zM296 287c14 -4 24 -16 24 -31v0c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v0c0 15 10 27 24 31c-2 6 -2 15 -2 21c0 42 34 76 76 76c8 0 10 -1 17 -3c-5 -12 -3 -22 -1 -31l3 -1c2 15 11 29 11 29c18 23 46 38 77 38c53 0 96 -43 96 -96
-c0 -10 -2 -24 -5 -33z" />
- <glyph glyph-name="ion-md-at" unicode="&#xf28d;"
-d="M218 236c2 0 4 -1 6 -1s5 -1 7 -1l-7 -66c-3 -8 -7 -13 -11 -16s-8 -5 -14 -5s-10 3 -13 9s-4 15 -3 27c2 18 5 30 11 39s14 14 24 14zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM336 198c2 40 -8 72 -29 95s-51 35 -91 35
-s-73 -13 -97 -37s-37 -57 -39 -99s9 -76 31 -100s53 -36 94 -36c10 0 21 1 31 3s19 6 26 10l-6 24c-7 -3 -15 -5 -24 -7s-18 -2 -26 -2c-31 0 -55 10 -71 29s-24 46 -22 79c2 34 12 61 30 81s42 30 72 30c31 0 55 -10 70 -28s22 -44 20 -77c-1 -16 -4 -30 -11 -40
-s-16 -15 -27 -15c-3 0 -5 2 -7 5s-2 10 -2 18l8 83h-1h1c-9 5 -18 9 -25 11s-17 4 -29 4c-17 0 -33 -7 -45 -22s-19 -35 -22 -59c-2 -19 1 -34 9 -46s19 -17 34 -17c8 0 17 2 23 6s11 10 15 18c2 -8 7 -14 13 -18s13 -7 21 -7c25 0 44 7 56 23s19 35 20 56z" />
- <glyph glyph-name="ion-ios-create" unicode="&#xf165;" horiz-adv-x="448"
-d="M372 362c3 3 9 3 12 0l26 -26c3 -3 3 -9 0 -12l-202 -202c-2 -2 -4 -2 -6 -2h-26c-4 0 -8 4 -8 8v26c0 2 0 4 2 6zM444 381c3 -3 4 -8 4 -12s-1 -8 -4 -11l-12 -12c-2 -2 -3 -2 -5 0l-22 22l-10 10c-2 2 -2 4 0 6l11 12c3 3 8 4 12 4s8 -1 11 -4v-1zM218 106l1 1l148 147
-c2 2 6 2 6 -2v-209c0 -32 -26 -59 -58 -59h-256c-32 0 -59 27 -59 59v224c0 32 27 58 59 58h241c4 0 4 -5 2 -7l-147 -147l-1 -1c-3 -3 -5 -7 -5 -11v-1v-38v-3c0 -9 7 -16 16 -16h3h38h1c4 0 8 2 11 5z" />
- <glyph glyph-name="ion-logo-chrome" unicode="&#xf22f;" horiz-adv-x="448"
-d="M157 192c0 37 30 67 67 67s67 -30 67 -67s-30 -67 -67 -67s-67 30 -67 67zM445 230c2 -12 3 -25 3 -38c0 -106 -74 -195 -174 -218c-10 -2 -20 -4 -30 -5c-7 -1 -13 -1 -20 -1c-8 0 -17 0 -25 1v0v0v0v1l102 177c8 13 13 28 13 45c0 27 -13 50 -32 67h156
-c3 -9 5 -19 7 -29v0c-2 10 -4 20 -7 29v0c3 -9 5 -19 7 -29v0zM224 103c10 0 20 2 29 5l-78 -135v0c-42 9 -79 30 -108 59c-42 41 -67 97 -67 160c0 31 6 61 18 88c7 16 16 31 26 45v0l103 -178c16 -27 43 -44 77 -44zM59 343v0v1c24 26 55 47 90 59c23 8 49 13 75 13
-c73 0 138 -36 179 -90h1c10 -14 18 -29 25 -44v0c-7 15 -15 30 -25 44h-1c10 -14 19 -29 26 -44h-205c-44 0 -79 -32 -87 -72z" />
- <glyph glyph-name="ion-md-volume-mute" unicode="&#xf3a1;" horiz-adv-x="192"
-d="M0 256h85l107 112v-352l-107 112h-85v128z" />
- <glyph glyph-name="ion-md-skip-forward" unicode="&#xf37d;" horiz-adv-x="384"
-d="M0 384l277 -192l-277 -192v384zM320 0v384h64v-384h-64z" />
- <glyph glyph-name="ion-ios-infinite" unicode="&#xf44a;" horiz-adv-x="464"
-d="M433 266c20 -20 31 -46 31 -74s-12 -54 -32 -74s-47 -30 -75 -30s-55 10 -75 30l-125 123c-14 13 -32 20 -51 20s-36 -7 -50 -20c-13 -13 -21 -31 -21 -49s8 -36 21 -49c14 -13 31 -20 50 -20s37 7 51 20l31 30c2 2 3 2 5 0l20 -19c2 -2 2 -4 0 -6l-31 -30
-c-20 -20 -48 -30 -76 -30s-55 10 -75 30s-31 46 -31 74s11 54 31 74s47 30 75 30s56 -10 76 -30l125 -123c14 -13 32 -20 51 -20s36 7 50 20c13 13 20 31 20 49s-7 36 -20 49c-14 13 -31 20 -50 20s-37 -7 -51 -20l-31 -30c-2 -2 -3 -2 -5 0l-20 19c-2 2 -2 4 0 6l31 30
-c20 20 48 30 76 30s55 -10 75 -30z" />
- <glyph glyph-name="ion-logo-windows" unicode="&#xf32f;" horiz-adv-x="448"
-d="M448 183v0v-215l-248 36v179h248zM184 183v0v-177l-184 27v150h184zM448 416v0v-217h-248v182zM184 378v0v-179h-184v153z" />
- <glyph glyph-name="ion-md-microphone" unicode="&#xf32d;" horiz-adv-x="256"
-d="M256 336h-56v-37h56v-43h-56v-37h56v-43h-56v-37h56v-42c0 -29 -25 -52 -55 -52h-30v-77h-86v77h-30c-30 0 -55 23 -55 52v42h152v37h-152v43h152v37h-152v43h152v37h-152v28c0 29 25 52 55 52h146c30 0 55 -23 55 -52v-28z" />
- <glyph glyph-name="ion-ios-share-alt" unicode="&#xf20f;" horiz-adv-x="384"
-d="M381 218c2 -2 3 -7 3 -10s0 -6 -3 -8l-143 -134c-5 -5 -14 -2 -14 5v65c0 2 -2 5 -4 5c-98 -1 -161 -44 -212 -108c-3 -3 -9 1 -8 5c21 109 80 214 220 236c2 0 4 2 4 4v66c0 5 6 8 10 8c2 0 4 0 6 -2z" />
- <glyph glyph-name="ion-md-wine" unicode="&#xf3a9;" horiz-adv-x="384"
-d="M171 171l-171 170v43h384v-43l-171 -170v-131h107v-40h-256v40h107v131zM96 299h192l43 42h-278z" />
- <glyph glyph-name="ion-md-skip-backward" unicode="&#xf37c;" horiz-adv-x="384"
-d="M107 192l277 192v-384zM0 0v384h64v-384h-64z" />
- <glyph glyph-name="ion-ios-bug" unicode="&#xf134;" horiz-adv-x="448"
-d="M343 321c-6 -16 -17 -31 -29 -43c-24 -24 -56 -37 -90 -37s-67 13 -91 37c-12 12 -22 27 -28 43c29 39 72 63 119 63s90 -24 119 -63zM90 298c22 -45 69 -80 122 -83v-215c-40 2 -73 23 -100 55l-5 -5c-5 -4 -6 -11 -4 -17c3 -8 1 -18 -5 -25c-9 -10 -24 -11 -34 -2
-s-11 24 -2 34l3 3s2 1 2 1c4 13 13 26 27 37c-15 26 -26 56 -29 89c-2 0 -4 -1 -6 -1c-6 -1 -10 -4 -12 -9c-4 -10 -14 -17 -25 -16c-12 1 -21 10 -22 22c-1 14 10 26 24 26h3c4 2 8 5 12 6c7 2 14 4 25 4c1 23 6 45 13 65c-6 4 -11 7 -15 11c-5 4 -9 9 -12 14
-c-2 3 -3 5 -6 7c-2 1 -4 3 -6 5c-7 7 -7 18 -3 27c6 12 21 17 33 10c11 -6 15 -20 10 -31c2 -4 4 -7 6 -9s6 -3 6 -3zM424 192c14 0 25 -12 24 -26c-1 -12 -10 -21 -22 -22c-11 -1 -20 6 -24 15c-2 6 -7 9 -13 10c-2 0 -4 1 -6 1c-3 -33 -14 -64 -29 -90
-c14 -11 23 -23 27 -36c0 0 1 0 2 -1l3 -3c9 -10 8 -25 -2 -34s-25 -8 -34 2c-6 7 -8 16 -5 24c2 6 1 14 -4 18c-2 1 -3 2 -5 4c-27 -32 -60 -52 -100 -54v215c53 3 100 37 122 82c0 0 4 2 6 4c3 3 4 6 6 9c-5 11 -1 25 10 31c12 6 27 3 33 -9s3 -27 -9 -33v0
-c-2 -1 -5 -4 -6 -6c-3 -5 -7 -11 -12 -15c-4 -4 -9 -7 -15 -11c7 -20 12 -42 13 -65c11 0 18 -2 25 -4c4 -1 8 -4 12 -6h3z" />
- <glyph glyph-name="ion-ios-help-circle" unicode="&#xf198;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM204 96c12 0 21 9 21 21s-9 20 -21 20s-22 -8 -22 -20s10 -21 22 -21zM244 193c18 11 28 24 28 44c0 30 -25 51 -63 51c-40 0 -64 -23 -65 -55h36c1 15 11 25 26 25s27 -10 27 -22
-s-7 -19 -24 -29c-18 -11 -25 -23 -23 -44v-8h35v8c0 13 6 20 23 30z" />
- <glyph glyph-name="ion-md-bulb" unicode="&#xf2a7;" horiz-adv-x="288"
-d="M80 20v18h128v-18c0 -11 -9 -20 -20 -20h-88c-11 0 -20 9 -20 20zM144 384c80 0 144 -60 144 -134c0 -46 -25 -87 -62 -111v-43c0 -11 -9 -19 -20 -19h-124c-11 0 -21 8 -21 19v43c-37 24 -61 65 -61 111c0 74 64 134 144 134z" />
- <glyph glyph-name="ion-ios-document" unicode="&#xf170;" horiz-adv-x="304"
-d="M208 293c-10 0 -19 9 -19 19v72c0 4 3 8 7 8v0c8 0 15 -3 21 -8l76 -63c7 -6 11 -14 11 -23v0c0 -3 -2 -5 -5 -5h-91zM163 312c0 -25 20 -45 45 -45h96v-243c0 -18 -14 -32 -32 -32h-240c-18 0 -32 14 -32 32v336c0 18 14 32 32 32h131v-80z" />
- <glyph glyph-name="ion-ios-search" unicode="&#xf4a5;" horiz-adv-x="384"
-d="M380 28c6 -7 6 -18 -1 -24c-3 -3 -7 -4 -11 -4s-9 2 -12 5l-106 107c-26 -21 -60 -34 -97 -34c-85 0 -153 69 -153 153s68 153 153 153s153 -69 153 -153c0 -36 -12 -69 -33 -95zM153 111c32 0 62 12 85 35s35 53 35 85s-12 62 -35 85s-53 35 -85 35s-62 -12 -85 -35
-s-35 -53 -35 -85s12 -62 35 -85s53 -35 85 -35z" />
- <glyph glyph-name="ion-logo-youtube" unicode="&#xf34f;" horiz-adv-x="512"
-d="M509 299c2 -36 3 -71 3 -107s-1 -71 -3 -107c0 -45 -33 -81 -74 -81c-58 -3 -118 -4 -179 -4s-121 1 -179 4c-41 0 -74 36 -74 81c-2 36 -3 71 -3 107s2 71 4 107c0 45 32 81 73 81c55 3 112 4 170 4h9h9c58 0 115 -1 170 -4c41 0 74 -36 74 -81zM207 94l145 98l-145 99
-v-197z" />
- <glyph glyph-name="ion-md-aperture" unicode="&#xf279;" horiz-adv-x="448"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM360 56c36 36 56 85 56 136s-20 100 -56 136s-85 56 -136 56s-100 -20 -136 -56s-56 -85 -56 -136s20 -100 56 -136s85 -56 136 -56s100 20 136 56zM168 342l56 -86h-147
-c17 40 50 71 91 86zM381 160h-102l72 129c21 -27 33 -60 33 -97c0 -11 -1 -22 -3 -32zM328 314l-49 -90l-78 126c8 1 15 2 23 2c40 0 76 -14 104 -38zM67 224h102l-72 -129c-21 27 -33 60 -33 97c0 11 1 22 3 32zM280 42l-56 86h147c-17 -40 -50 -71 -91 -86zM120 70l49 90
-l78 -126c-8 -1 -15 -2 -23 -2c-40 0 -76 14 -104 38z" />
- <glyph glyph-name="ion-md-list" unicode="&#xf31b;" horiz-adv-x="352"
-d="M0 120v48h256v-48h-256zM0 216v48h320v-48h-320zM0 312v48h352v-48h-352zM0 24v48h288v-48h-288z" />
- <glyph glyph-name="ion-ios-power" unicode="&#xf1ef;" horiz-adv-x="384"
-d="M316 336c43 -36 68 -89 68 -145c0 -105 -86 -191 -192 -191s-192 86 -192 191c0 56 25 109 68 145c3 3 8 5 12 5c5 0 9 -3 13 -7c3 -4 5 -8 5 -13s-3 -10 -7 -13c-35 -29 -55 -72 -55 -117c0 -85 70 -155 156 -155s156 70 156 155c0 45 -20 87 -55 117c-4 3 -7 8 -7 13
-s2 9 5 13s9 7 14 7c4 0 8 -2 11 -5zM193 174c-10 0 -19 8 -19 18v174c0 10 9 18 19 18s18 -8 18 -18v-174c0 -10 -8 -18 -18 -18z" />
- <glyph glyph-name="ion-md-grid" unicode="&#xf302;" horiz-adv-x="384"
-d="M346 384c21 0 38 -17 38 -38v-308c0 -21 -17 -38 -38 -38h-308c-21 0 -38 17 -38 38v308c0 21 17 38 38 38h308zM115 38v77h-77v-77h77zM115 154v76h-77v-76h77zM115 269v77h-77v-77h77zM230 38v77h-76v-77h76zM230 154v76h-76v-76h76zM230 269v77h-76v-77h76zM346 38v77
-h-77v-77h77zM346 154v76h-77v-76h77zM346 269v77h-77v-77h77z" />
- <glyph glyph-name="ion-ios-glasses" unicode="&#xf43f;" horiz-adv-x="446"
-d="M432 207c8 0 14 -7 14 -15s-6 -15 -14 -15h-7c-3 -21 -13 -40 -28 -55c-17 -17 -40 -26 -64 -26c-51 0 -93 43 -93 96v0c0 6 -7 15 -17 15s-17 -9 -17 -15v0c0 -53 -42 -96 -93 -96c-24 0 -47 9 -64 26c-15 15 -25 34 -28 55h-7c-8 0 -14 7 -14 15s6 15 14 15h7
-c3 21 13 40 28 55c17 16 40 26 64 26c20 0 40 -6 56 -19c14 -11 24 -25 30 -42c7 5 16 7 24 7s17 -2 24 -7c6 17 16 31 30 42c16 13 36 19 56 19c24 0 47 -9 64 -26c15 -15 25 -34 28 -55h7z" />
- <glyph glyph-name="ion-md-hand" unicode="&#xf304;" horiz-adv-x="414"
-d="M401 174c15 -15 18 -36 3 -51c0 0 -96 -103 -126 -121v0c-28 -21 -65 -34 -100 -34c-55 0 -101 36 -117 85v0v1c0 1 -1 2 -1 3l-58 189c-5 15 2 32 17 37s30 -3 35 -18l34 -88c1 -4 2 -2 2 1l-22 161c-3 15 7 30 22 33s30 -8 33 -23l25 -138c0 -2 2 -2 2 0v177
-c0 15 13 28 28 28s28 -13 28 -28l8 -175c0 -5 3 -4 4 -1l23 135c2 15 16 27 31 25s27 -17 25 -32l-21 -172c-1 -12 -3 -30 2 -36c8 -9 20 -9 31 2l42 42c15 15 35 13 50 -2z" />
- <glyph glyph-name="ion-ios-bluetooth" unicode="&#xf128;" horiz-adv-x="256"
-d="M250 115c7 -6 7 -16 1 -23l-116 -120c-2 -2 -6 -4 -9 -4v0c-6 0 -11 5 -11 11v170l-85 -74c-7 -6 -19 -5 -25 2v0c-6 7 -5 18 2 24l108 91l-109 92c-7 6 -8 17 -2 24v0c6 7 18 7 25 1l86 -73v169c0 6 5 11 11 11v0c3 0 7 -2 9 -4l116 -121c6 -7 6 -17 -1 -23l-88 -76z
-M151 347c-1 1 -3 1 -3 -1v-119c0 -2 2 -3 3 -2l63 53c1 1 1 2 0 3zM148 38c0 -2 2 -2 3 -1l63 65c1 1 1 2 0 3l-63 53c-1 1 -3 0 -3 -2v-118z" />
- <glyph glyph-name="ion-ios-time" unicode="&#xf4bf;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM222 174v146c0 8 -6 14 -14 14s-14 -6 -14 -14v-132h-82c-8 0 -14 -6 -14 -14s6 -14 14 -14h96c8 0 14 6 14 14z" />
- <glyph glyph-name="ion-ios-trending-up" unicode="&#xf25b;" horiz-adv-x="448"
-d="M433 320c8 0 15 -7 15 -15v-118c0 -8 -7 -15 -15 -15s-15 7 -15 15v82l-150 -152c-3 -3 -6 -4 -10 -4s-8 1 -11 4l-86 84l-135 -133c-3 -3 -7 -4 -11 -4s-8 1 -11 4s-4 6 -4 10c0 6 2 9 4 11l146 143c3 3 7 5 11 5s8 -2 11 -5l86 -84l138 142h-84c-8 0 -15 7 -15 15
-s7 15 15 15h121z" />
- <glyph glyph-name="ion-md-contact" unicode="&#xf2d6;"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 338c-34 0 -62 -29 -62 -63s28 -62 62 -62s62 28 62 62s-28 63 -62 63zM208 37c52 0 98 27 125 67c-1 42 -83 64 -125 64s-124 -22 -125 -64c27 -40 73 -67 125 -67z" />
- <glyph glyph-name="ion-md-close-circle" unicode="&#xf2bf;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM312 117l-75 75l75 75l-29 29l-75 -75l-75 75l-29 -29l75 -75l-75 -75l29 -29l75 75l75 -75z" />
- <glyph glyph-name="ion-logo-sass" unicode="&#xf249;" horiz-adv-x="512"
-d="M512 119v-8c-1 -9 -7 -17 -15 -22s-12 -4 -13 -3s1 3 4 5c13 8 17 20 10 33c-5 10 -15 16 -26 20c-24 8 -48 7 -72 0c4 -12 7 -23 -2 -34c-10 -12 -23 -19 -39 -22c-7 -2 -14 2 -15 9c-3 19 17 36 30 47c-7 11 -11 24 -14 37c-15 -17 -31 -40 -26 -61
-c3 -14 -1 -27 -14 -36s-30 -14 -46 -11c-4 1 -6 5 -5 8c2 14 25 32 35 43c2 2 3 4 1 7c-6 12 -10 23 -14 36c-13 -29 -30 -80 -57 -98c-9 -6 -17 -4 -21 5c-3 8 -2 20 -1 29c-6 -13 -11 -27 -20 -38c-7 -8 -24 -7 -30 1c-16 21 -13 50 -5 73l-29 -15c7 -16 8 -32 4 -49
-c-5 -19 -17 -35 -35 -46c-19 -12 -64 -24 -77 4c-7 16 -4 30 6 44c17 24 48 37 74 50c-32 23 -80 42 -96 80c-15 35 17 68 43 89c59 48 166 95 244 59c15 -7 36 -24 31 -52c-4 -24 -13 -39 -28 -54c-32 -32 -152 -77 -176 -15c-1 1 -1 4 1 4c2 -1 20 -15 43 -16
-c17 -1 36 3 52 8c33 11 71 33 80 67c4 13 -2 28 -15 34c-49 24 -116 -4 -159 -26c-33 -17 -84 -45 -82 -87c1 -37 56 -60 81 -82c15 7 42 15 52 27c11 13 26 25 44 26c8 0 14 -3 16 -10c2 -6 1 -11 0 -19c5 4 11 4 15 -1c12 -14 -22 -50 -10 -66c14 14 21 42 30 59
-c4 8 17 51 26 53c7 2 18 4 25 0c2 -1 3 -3 2 -5c-7 -19 -7 -33 3 -52c14 20 29 43 34 67c1 2 3 3 5 4c7 2 18 3 25 0c3 -1 3 -2 2 -5c-7 -22 -6 -38 6 -58c31 11 69 15 97 -5c-3 2 -7 5 0 0c5 -4 3 -2 0 0c12 -8 19 -18 21 -32zM113 94v0c1 7 -1 13 -3 20
-c-24 -8 -66 -35 -64 -62c1 -10 8 -13 17 -12s19 7 27 13c14 11 22 24 23 41zM216 166c1 3 -2 5 -5 4c-29 -8 -43 -57 -33 -81c1 -3 4 -3 6 -1c17 16 28 56 32 78zM286 84c8 -3 27 17 26 27c-8 -9 -18 -18 -26 -27zM367 102c11 6 16 19 12 30c-8 -6 -21 -19 -20 -31
-c0 -2 6 0 8 1z" />
- <glyph glyph-name="ion-ios-apps" unicode="&#xf10a;" horiz-adv-x="384"
-d="M371 310c18 -8 18 -21 0 -29l-148 -67c-17 -8 -45 -8 -62 0l-148 67c-18 8 -18 21 0 29l150 68c16 7 43 7 59 0zM161 73c17 -8 45 -8 62 0l100 45c4 2 9 2 13 0l35 -16c18 -8 18 -21 0 -29l-148 -67c-17 -8 -45 -8 -62 0l-148 67c-18 8 -18 21 0 29l35 16c4 2 10 2 14 0z
-M371 206c18 -8 18 -21 0 -29l-148 -67c-17 -8 -45 -8 -62 0l-148 67c-18 8 -18 21 0 29l32 15c4 2 9 2 13 0l108 -49c15 -5 37 -5 52 0l108 49c4 2 9 2 13 0z" />
- <glyph glyph-name="ion-ios-outlet" unicode="&#xf1db;"
-d="M311 370c3 0 6 0 8 -2c58 -37 97 -102 97 -176s-39 -138 -97 -176c-2 -2 -5 -2 -8 -2h-206c-3 0 -6 0 -8 2c-58 38 -97 102 -97 176s39 139 97 176c2 2 5 2 8 2h206zM145 177c2 0 4 2 4 4v111c0 2 -2 4 -4 4h-22c-2 0 -4 -2 -4 -4v-111c0 -2 2 -4 4 -4h22zM234 58
-c2 0 4 2 4 4v41c0 16 -14 30 -30 30s-30 -15 -30 -31v-40c0 -2 2 -4 4 -4h52zM293 192c2 0 4 2 4 4v81c0 2 -2 4 -4 4h-22c-2 0 -4 -2 -4 -4v-81c0 -2 2 -4 4 -4h22z" />
- <glyph glyph-name="ion-ios-tablet-landscape" unicode="&#xf223;" horiz-adv-x="448"
-d="M7 345v0c4 4 11 7 17 7h400c6 0 13 -3 17 -7v0c4 -4 7 -11 7 -17v-272c0 -6 -3 -13 -7 -17v0c-4 -4 -11 -7 -17 -7h-400c-6 0 -13 3 -17 7v0c-4 4 -7 11 -7 17v272c0 6 3 13 7 17zM17 192c0 -4 3 -7 7 -7s7 3 7 7s-3 7 -7 7s-7 -3 -7 -7zM438 192c0 8 -6 14 -14 14
-s-14 -6 -14 -14s6 -14 14 -14s14 6 14 14zM400 336h-352v-288h352v288z" />
- <glyph glyph-name="ion-md-arrow-dropdown-circle" unicode="&#xf27f;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 128l96 96h-192z" />
- <glyph glyph-name="ion-logo-flickr" unicode="&#xf107;" horiz-adv-x="384"
-d="M288 384c53 0 96 -43 96 -96v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192zM120 144c26 0 48 22 48 48s-22 48 -48 48s-48 -22 -48 -48s22 -48 48 -48zM264 144c26 0 48 22 48 48s-22 48 -48 48s-48 -22 -48 -48s22 -48 48 -48z" />
- <glyph glyph-name="ion-md-tv" unicode="&#xf17f;" horiz-adv-x="448"
-d="M407 372c22 0 41 -18 41 -40v-240c0 -22 -19 -40 -41 -40h-102v-40h-163v40h-101c-22 0 -41 18 -41 40v240c0 22 19 40 41 40h366zM407 92v0v240h-366v-240h366z" />
- <glyph glyph-name="ion-ios-bowtie" unicode="&#xf130;" horiz-adv-x="448"
-d="M259 234c10 -17 19 -53 17 -85c-1 -17 -5 -22 -5 -22s-12 -7 -36 -7h-11c-35 3 -40 15 -40 15s4 12 8 43s0 58 0 58s7 5 19 7c8 2 17 3 23 3v0c11 0 20 -4 25 -12zM174 239c0 0 3 -16 2 -32v-10c0 -3 -1 -6 -1 -10c0 -5 0 -10 -1 -15l-2 -10c-4 -21 -10 -34 -10 -34
-s-77 -80 -110 -80c-28 0 -52 68 -52 144s26 144 52 144c35 0 100 -57 122 -97zM396 336c26 0 52 -68 52 -144s-24 -144 -52 -144c-37 0 -98 69 -106 79c0 0 4 5 5 22v9v8c0 11 -2 23 -4 33l-3 11c-3 10 -7 18 -10 24c0 1 -2 4 -2 4l1 1c22 40 83 97 119 97z" />
- <glyph glyph-name="ion-ios-barcode" unicode="&#xf3dc;"
-d="M74 60c4 0 7 -2 10 -5s4 -6 4 -10c0 -8 -7 -13 -15 -13h-56c-10 0 -17 6 -17 16v288c0 10 8 16 18 16h54c4 0 9 -1 12 -4s4 -6 4 -10c0 -8 -7 -14 -15 -14h-40c-2 0 -4 -2 -4 -4v-256c0 -2 2 -4 4 -4h41zM399 352c10 0 17 -6 17 -16v-288c0 -10 -7 -16 -17 -16h-57
-c-4 0 -7 1 -10 4s-4 6 -4 10c0 8 7 14 15 14h40c2 0 4 2 4 4v256c0 2 -2 4 -4 4h-41c-5 0 -9 3 -12 8c0 1 -1 1 -1 2c-3 10 4 18 14 18h56zM74 272c8 0 14 -6 14 -14v-132c0 -8 -6 -14 -14 -14s-14 6 -14 14v132c0 8 6 14 14 14zM342 112c-8 0 -14 6 -14 14v132
-c0 8 6 14 14 14s14 -6 14 -14v-132c0 -8 -6 -14 -14 -14zM278 304c8 0 14 -6 14 -14v-196c0 -8 -6 -14 -14 -14s-14 6 -14 14v196c0 8 6 14 14 14zM138 304c8 0 14 -6 14 -14v-196c0 -8 -6 -14 -14 -14s-14 6 -14 14v196c0 8 6 14 14 14zM208 288c8 0 14 -6 14 -14v-164
-c0 -8 -6 -14 -14 -14s-14 6 -14 14v164c0 8 6 14 14 14z" />
- <glyph glyph-name="ion-ios-shirt" unicode="&#xf213;" horiz-adv-x="413"
-d="M413 266l-62 -64c-2 -3 -7 -1 -7 3v45c0 5 -5 10 -11 9c-4 -1 -7 -5 -7 -9v-61v-181c0 -4 -4 -8 -8 -8h-222c-4 0 -8 4 -8 8v181v61c0 5 -5 10 -11 9c-4 -1 -7 -5 -7 -9v-45c0 -4 -5 -6 -7 -3l-62 64c-1 2 -1 4 0 6c12 12 61 63 89 83c20 15 41 29 63 29s22 -8 54 -8
-s32 8 54 8s42 -14 62 -29c28 -20 77 -71 89 -83c1 -2 2 -4 1 -6zM207 305c30 0 54 13 54 36c0 30 -24 11 -54 11s-54 19 -54 -11c0 -23 24 -36 54 -36z" />
- <glyph glyph-name="ion-md-home" unicode="&#xf30c;"
-d="M160 0h-98v192h-62l208 192l208 -192h-62v-192h-98v128h-96v-128z" />
- <glyph glyph-name="ion-ios-cafe" unicode="&#xf13c;"
-d="M322 44c8 0 14 -7 14 -15s-7 -13 -15 -13h-259c-8 0 -14 7 -14 15s6 13 14 13h260zM351 330v0c39 -14 65 -49 65 -88c0 -25 -11 -49 -30 -67s-45 -27 -72 -27h-6v0c-16 -28 -36 -50 -58 -64c-19 -12 -38 -20 -44 -20h-60c-9 0 -46 12 -78 49c-18 21 -33 47 -44 79
-c-14 38 -22 84 -24 136c0 11 4 22 12 30c7 7 17 10 27 10h274c10 0 19 -3 26 -10c8 -8 12 -17 12 -28zM322 176v0c37 3 66 32 66 66c0 13 -5 26 -13 37c-7 9 -16 16 -26 21v0c-4 -47 -13 -90 -27 -124z" />
- <glyph glyph-name="ion-md-navigate" unicode="&#xf334;" horiz-adv-x="320"
-d="M160 384l160 -369l-15 -15l-145 64l-145 -64l-15 15z" />
- <glyph glyph-name="ion-md-arrow-round-down" unicode="&#xf289;" horiz-adv-x="332"
-d="M9 163c-12 12 -12 31 0 43s34 12 46 0l79 -83v214c0 17 14 31 32 31s32 -14 32 -31v-214l79 83c12 12 34 12 46 0s12 -31 0 -43l-134 -138c-6 -6 -14 -9 -23 -9v0c-9 0 -17 3 -23 9z" />
- <glyph glyph-name="ion-md-color-fill" unicode="&#xf2d0;" horiz-adv-x="448"
-d="M104 370l30 30l257 -256l-54 -11l-153 -149l-184 178l142 141zM288 162l-102 103l-103 -103h205zM391 144c0 0 57 -61 57 -92s-26 -56 -57 -56s-56 25 -56 56s56 92 56 92z" />
- <glyph glyph-name="ion-ios-star-half" unicode="&#xf4b1;" horiz-adv-x="448"
-d="M431 256c9 0 17 -7 17 -16c0 -4 -2 -8 -5 -11l-3 -2l-120 -86l46 -135c2 -7 1 -14 -5 -18c-3 -2 -6 -4 -9 -4s-7 2 -10 4l-118 84l-118 -84c-3 -2 -7 -4 -10 -4s-6 2 -9 4c-6 4 -7 12 -5 18l46 135l-121 85c-5 4 -7 7 -7 11v3c0 9 7 16 16 16v0h148l45 133
-c2 6 8 11 15 11s13 -5 15 -11l45 -133h147zM384 221c3 2 1 7 -3 7h-97v0c-12 0 -23 8 -27 19l-29 88v0c-1 2 -4 2 -4 0v-210c0 -12 6 -23 16 -30v0l78 -56c3 -2 7 1 6 5l-30 88c-4 12 0 25 10 32z" />
- <glyph glyph-name="ion-ios-person" unicode="&#xf47e;" horiz-adv-x="384"
-d="M384 10c1 -5 -3 -10 -8 -10h-368c-5 0 -9 5 -8 10c7 32 49 47 63 52c16 6 38 7 52 10c8 2 20 6 24 11s1 49 1 49s-7 12 -11 22s-8 38 -8 38s-8 0 -11 14c-3 16 -9 22 -8 34s7 11 7 11s-6 16 -7 51c-1 41 31 82 90 82c58 0 91 -41 90 -82c-1 -35 -7 -51 -7 -51s6 1 7 -11
-s-5 -18 -8 -34c-3 -14 -11 -14 -11 -14s-4 -28 -8 -38s-12 -22 -12 -22s-2 -44 2 -49s16 -9 24 -11c14 -3 36 -4 52 -10c14 -5 56 -20 63 -52z" />
- <glyph glyph-name="ion-md-settings" unicode="&#xf377;"
-d="M366 171l47 -34c3 -3 4 -10 2 -14l-43 -71c-2 -4 -7 -7 -12 -5l-54 21c-12 -8 -23 -16 -36 -21l-8 -55c-1 -4 -6 -8 -11 -8h-85c-5 0 -10 3 -11 8l-8 55c-13 5 -25 13 -36 21l-54 -21c-4 -2 -10 1 -12 5l-43 71c-3 5 -2 11 2 14l45 34c0 7 -1 14 -1 21s1 14 1 21l-46 34
-c-3 3 -4 10 -2 14l43 71c2 4 7 7 12 5l54 -21c12 8 23 16 36 21l8 55c1 4 6 8 11 8h85c5 0 10 -4 11 -8l7 -55c13 -5 25 -13 36 -21l53 21c4 2 11 -1 13 -5l43 -71c3 -5 2 -11 -2 -14l-45 -34c0 -7 1 -14 1 -21s0 -15 -1 -21zM207 119c41 0 75 32 75 73s-34 73 -75 73
-s-74 -32 -74 -73s33 -73 74 -73z" />
- <glyph glyph-name="ion-ios-lock" unicode="&#xf1b0;" horiz-adv-x="320"
-d="M280 256c22 0 40 -18 40 -40v-192c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v192c0 22 18 40 40 40h24v48c0 53 44 97 97 96s95 -44 95 -97v-47h24zM174 131c11 5 18 16 18 29c0 18 -15 33 -34 32c-16 -1 -29 -13 -30 -29c-1 -14 6 -26 18 -32v-69
-c0 -8 7 -14 15 -14s13 6 13 14v69zM228 256v48c0 18 -7 35 -20 48s-30 20 -48 20s-35 -7 -48 -20s-20 -30 -20 -48v-48h136z" />
- <glyph glyph-name="ion-ios-egg" unicode="&#xf175;" horiz-adv-x="320"
-d="M160 416v0c64 0 160 -133 160 -257s-64 -191 -160 -191s-160 67 -160 191s96 257 160 257z" />
- <glyph glyph-name="ion-ios-repeat" unicode="&#xf1fe;" horiz-adv-x="384"
-d="M273 290c4 -4 6 -9 6 -15s-2 -11 -6 -15l-36 -36c-3 -3 -6 -4 -10 -4s-7 1 -10 4s-4 7 -4 11c0 3 2 7 4 9l16 16h-155c-13 0 -25 -5 -35 -15s-15 -22 -15 -35v-16c0 -8 -6 -14 -14 -14v0c-8 0 -14 6 -14 14v16c0 21 8 40 23 55s34 23 55 23h157l-16 16c-2 2 -4 6 -4 9
-c0 5 2 10 7 13c1 1 2 2 3 2c5 1 10 0 14 -4zM370 204c8 0 14 -6 14 -14v-16c0 -43 -35 -78 -78 -78h-157l16 -16c2 -2 4 -6 4 -9c0 -5 -2 -10 -7 -13c-1 -1 -2 -1 -3 -1c-5 -1 -10 -1 -14 3l-34 34c-4 4 -6 9 -6 15s2 12 6 16l36 35c3 3 6 4 10 4s7 -1 10 -4s4 -7 4 -11
-c0 -3 -2 -7 -4 -9l-16 -16h155c13 0 25 5 35 15s15 22 15 35v16c0 8 6 14 14 14v0z" />
- <glyph glyph-name="ion-ios-color-palette" unicode="&#xf15b;" horiz-adv-x="384"
-d="M366 100c12 -11 14 -35 0 -48c-39 -34 -94 -52 -149 -52h-1c-55 0 -111 18 -153 55c-84 74 -84 195 0 269c45 40 102 60 158 60c48 0 94 -15 128 -45c46 -41 46 -108 0 -149l-30 -27c-14 -13 -14 -31 0 -44c7 -6 11 -8 23 -10c8 -1 17 -3 24 -9zM56 232
-c0 -18 14 -32 32 -32s32 14 32 32s-14 32 -32 32s-32 -14 -32 -32zM96 106c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 267c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM232 48c26 0 48 22 48 48s-22 48 -48 48
-s-48 -22 -48 -48s22 -48 48 -48zM256 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-ios-alert" unicode="&#xf104;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM225 290c0 10 -7 18 -17 18v0c-10 0 -17 -8 -17 -18l3 -115c0 -8 6 -15 14 -15v0c8 0 14 7 14 15zM208 94c11 0 19 8 19 18s-8 19 -19 19s-19 -9 -19 -19s8 -18 19 -18z" />
- <glyph glyph-name="ion-ios-bus" unicode="&#xf13a;" horiz-adv-x="320"
-d="M14 31c11 -12 24 -9 58 -9c0 -10 1 -22 -3 -22h-55c-4 0 -5 7 -6 29c0 3 4 4 6 2zM306 31c2 2 6 1 6 -2c-1 -22 -2 -29 -6 -29h-55s-3 12 -3 22c34 0 47 -3 58 9zM288 384c18 0 32 -14 32 -32v0v-276c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v276v0
-c0 18 14 32 32 32h8h240h8zM66 72c12 1 21 10 22 22c1 15 -11 27 -26 26c-12 -1 -21 -10 -22 -22c-1 -15 11 -27 26 -26zM142 150c2 0 4 2 4 4v140c0 2 -2 4 -4 4h-98c-9 0 -16 -7 -16 -16v-116c0 -9 7 -16 16 -16h98zM258 72c12 1 21 10 22 22c1 15 -11 27 -26 26
-c-12 -1 -21 -10 -22 -22c-1 -15 11 -27 26 -26zM292 166v116c0 9 -7 16 -16 16h-98c-2 0 -4 -2 -4 -4v-140c0 -2 2 -4 4 -4h98c9 0 16 7 16 16zM277 328c9 0 15 6 15 14s-6 14 -15 14h-234c-9 0 -15 -6 -15 -14s6 -14 15 -14h234z" />
- <glyph glyph-name="ion-md-beer" unicode="&#xf298;" horiz-adv-x="448"
-d="M384 308c47 0 64 -33 64 -68v-96c0 -35 -14 -68 -64 -68h-16v-33v-11c0 -35 -29 -64 -64 -64h-176c-35 0 -64 29 -64 64v173v2c-26 0 -48 22 -48 48v55c-10 11 -16 26 -16 42c0 35 29 64 64 64c18 0 34 -8 46 -20c10 12 26 20 43 20c14 0 27 -6 37 -14c12 9 26 14 42 14
-c17 0 34 -6 46 -16c11 10 26 16 42 16c35 0 64 -29 64 -64c0 -15 -7 -29 -16 -38v-6h16zM320 256v49v15h-20c-3 -8 -7 -16 -13 -23c-13 -16 -33 -25 -55 -25c-26 0 -48 13 -61 33c-6 -2 -12 -3 -18 -3c-12 0 -23 4 -32 10c-2 1 -3 3 -5 4c-1 -2 -2 -3 -3 -5l-1 -1v-54h208z
-M64 320c9 0 18 4 24 11c2 2 3 4 4 6c0 0 6 10 12 11s20 6 30 -5c4 -5 11 -9 19 -9c3 0 5 1 7 2c3 1 7 2 9 4v0c3 2 6 4 10 4c7 0 12 -4 14 -10c0 0 1 -1 1 -2c1 -3 1 -5 3 -8c7 -12 20 -20 35 -20c13 0 26 6 33 16c5 7 7 15 7 24s9 8 9 8h55c6 0 13 -3 15 -9c1 3 1 6 1 9
-c0 18 -14 32 -32 32c-9 0 -17 -4 -23 -10c-2 -2 -6 -5 -16 -6h-8c-6 1 -11 3 -13 5c-7 7 -17 11 -28 11c-9 0 -18 -4 -25 -9c-2 -2 -4 -5 -6 -7c0 -1 -1 -1 -2 -2c-3 -3 -7 -5 -11 -5c-5 0 -8 3 -11 6c-1 2 -2 3 -3 5s-3 4 -5 6c-4 4 -10 6 -16 6c-10 0 -18 -9 -25 -16
-c-7 -8 -27 -8 -34 0s-18 16 -30 16c-18 0 -32 -14 -32 -32c0 -2 1 -5 1 -7c2 -9 7 -17 15 -21v-63c0 -9 7 -16 16 -16v75zM400 144v96c0 18 -6 24 -24 24h-8v-144h8c18 0 24 6 24 24z" />
- <glyph glyph-name="ion-md-snow" unicode="&#xf37e;" horiz-adv-x="412"
-d="M411 150l-57 -16l58 -33l-24 -42l-57 33l16 -57l-31 -8l-24 88l-62 36v-71l64 -64l-22 -23l-42 42v-67h-48v66l-42 -42l-22 22l64 65v71l-61 -35l-23 -88l-31 8l15 57l-58 -33l-24 41l57 33l-57 15l8 31l88 -23l63 36l-63 36l-88 -24l-8 31l57 15l-57 33l24 42l58 -34
-l-15 57l31 9l23 -88l61 -35v71l-64 65l22 22l42 -42v66h48v-67l42 42l22 -23l-64 -64v-71l62 36l24 88l31 -9l-16 -57l57 33l24 -42l-58 -33l57 -15l-8 -31l-88 24l-60 -35l60 -35l88 23z" />
- <glyph glyph-name="ion-md-download" unicode="&#xf2e3;" horiz-adv-x="320"
-d="M320 248l-160 -158l-160 158h91v136h138v-136h91zM0 45h320v-45h-320v45z" />
- <glyph glyph-name="ion-md-star-outline" unicode="&#xf383;" horiz-adv-x="404"
-d="M404 238l-110 -96l33 -142l-125 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134zM219 103l60 -36l-16 68l-5 19l15 12l53 46l-70 6l-19 2l-8 18l-27 64l-27 -64l-8 -18l-19 -2l-70 -6l53 -46l15 -12l-5 -19l-16 -68l60 36l17 10z" />
- <glyph glyph-name="ion-ios-microphone" unicode="&#xf1c6;" horiz-adv-x="288"
-d="M203 244c-7 0 -12 -5 -12 -12s5 -12 12 -12h73c7 0 12 -5 12 -12s-5 -12 -12 -12h-73c-7 0 -12 -5 -12 -12s5 -12 12 -12h77c4 0 8 -4 8 -8c0 -14 -3 -27 -8 -39c-1 -3 -4 -5 -7 -5h-258c-3 0 -6 2 -7 5c-5 12 -8 25 -8 39c0 4 4 8 8 8h77c7 0 12 5 12 12s-5 12 -12 12
-h-73c-7 0 -12 5 -12 12s5 12 12 12h73c7 0 12 5 12 12s-5 12 -12 12h-73c-7 0 -12 5 -12 12s5 12 12 12h73c7 0 12 5 12 12s-5 12 -12 12h-77c-4 0 -8 4 -8 8c2 47 31 88 73 106c5 2 11 -1 11 -7v-36c0 -7 5 -12 12 -12s12 5 12 12v41c0 7 5 12 12 12v0c7 0 12 -5 12 -12
-v-57c0 -7 5 -12 12 -12s12 5 12 12v57c0 7 5 12 12 12v0c7 0 12 -5 12 -12v-41c0 -7 5 -12 12 -12s12 5 12 12v36c0 6 6 9 11 7c42 -18 71 -58 73 -106c0 -4 -4 -8 -8 -8h-77c-7 0 -12 -5 -12 -12s5 -12 12 -12h73c7 0 12 -5 12 -12s-5 -12 -12 -12h-73zM30 89c-2 3 0 7 3 7
-h222c3 0 6 -4 4 -7c-19 -22 -46 -36 -76 -40c-4 0 -7 -4 -7 -8v-41c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v41c0 4 -3 8 -7 8c-30 4 -56 18 -75 40z" />
- <glyph glyph-name="ion-md-git-network" unicode="&#xf2fe;" horiz-adv-x="384"
-d="M384 352c0 -24 -13 -44 -32 -55v-93l-128 -64v-53c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v53l-128 64v93c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64c0 -24 -13 -44 -32 -55v-53l96 -48l96 48v53c-19 11 -32 31 -32 55
-c0 35 29 64 64 64s64 -29 64 -64zM64 392c-22 0 -40 -18 -40 -40s18 -40 40 -40s40 18 40 40s-18 40 -40 40zM192 -8c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM320 312c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40z" />
- <glyph glyph-name="ion-md-code-working" unicode="&#xf2cd;" horiz-adv-x="448"
-d="M158 94l-30 -30l-128 128l128 128l30 -30l-98 -98zM290 94l98 98l-98 98l30 30l128 -128l-128 -128zM124 172v40h40v-40h-40zM324 212v-40h-40v40h40zM204 172v40h40v-40h-40z" />
- <glyph glyph-name="ion-md-phone-portrait" unicode="&#xf347;" horiz-adv-x="288"
-d="M247 416c23 0 41 -19 41 -41v-366c0 -22 -18 -41 -41 -41h-206c-23 0 -41 19 -41 41v366c0 22 18 41 41 41h206zM252 48v288h-216v-288h216z" />
- <glyph glyph-name="ion-ios-videocam" unicode="&#xf4cd;" horiz-adv-x="448"
-d="M419 294h20c5 0 9 -3 9 -8v-188c0 -5 -4 -9 -9 -9h-20c-3 0 -7 1 -10 3l-86 55c-2 2 -4 4 -4 7v76c0 3 2 5 4 7l86 55c3 2 7 2 10 2zM242 64h-190c-28 0 -52 23 -52 51v154c0 28 23 51 51 51h190c28 0 52 -23 52 -51v-153c0 -28 -23 -52 -51 -52z" />
- <glyph glyph-name="ion-logo-no-smoking" unicode="&#xf109;" horiz-adv-x="448"
-d="M328 144v48h16v-48h-16zM80 144v48h82l48 -48h-130zM332 388c69 -38 116 -112 116 -196c0 -124 -100 -224 -224 -224c-24 0 -47 4 -68 11c-2 1 -3 1 -5 2c-12 4 -24 9 -35 15h-1c-69 38 -115 112 -115 196c0 124 100 224 224 224c24 0 47 -4 68 -11c2 -1 3 -1 5 -2
-c12 -4 24 -9 35 -15v0zM224 22c37 0 72 12 100 32l-238 238c-20 -28 -32 -63 -32 -100c0 -65 36 -121 90 -150c6 -3 13 -7 19 -9c2 -1 3 -1 5 -2c9 -3 19 -5 29 -7c9 -2 18 -2 27 -2zM362 93c20 28 32 62 32 99c0 66 -37 123 -91 151c-6 3 -12 6 -18 8c-2 1 -3 1 -5 2
-c-9 3 -19 5 -29 7c-9 2 -18 2 -27 2c-37 0 -71 -12 -99 -32zM320 192v-34l-34 34h34zM352 144v48h16v-48h-16zM328 235c16 -7 16 -23 16 -30v-1h-16v1c0 8 -1 13 -7 16c-4 2 -13 4 -39 4h-3c-13 0 -24 0 -33 13c-5 8 -5 19 -2 29c-4 1 -8 1 -12 3c-17 7 -26 20 -26 38
-c0 33 27 44 39 44v-16c-1 0 -23 -2 -23 -28c0 -11 5 -19 16 -23c9 -4 18 -3 18 -3c3 0 6 -2 7 -5s2 -6 0 -8c-5 -7 -7 -18 -4 -22c4 -6 7 -6 20 -6h3c24 0 37 -2 46 -6zM368 204v0h-16c0 28 -4 37 -7 42c-6 10 -14 14 -25 14h-30c-3 0 -5 2 -6 4s-1 6 0 8c0 0 8 18 6 32
-c-1 8 -6 17 -27 17v16c24 0 40 -11 43 -30c2 -11 0 -23 -3 -31h17c16 0 30 -8 39 -22c6 -10 9 -24 9 -50z" />
- <glyph glyph-name="ion-md-add" unicode="&#xf273;" horiz-adv-x="320"
-d="M320 171h-139v-139h-42v139h-139v42h139v139h42v-139h139v-42z" />
- <glyph glyph-name="ion-md-arrow-dropup" unicode="&#xf286;" horiz-adv-x="256"
-d="M0 128l128 128l128 -128h-256z" />
- <glyph glyph-name="ion-ios-checkmark-circle" unicode="&#xf14a;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM314 250c2 2 2 3 0 5l-17 18c-1 1 -2 2 -3 2v0c-1 0 -2 -1 -3 -2l-122 -123l-44 45c-1 1 -2 1 -3 1s-2 0 -3 -1l-18 -18c-2 -2 -2 -4 0 -6l56 -56c4 -4 8 -5 12 -5c5 0 10 3 12 5v0
-z" />
- <glyph glyph-name="ion-ios-link" unicode="&#xf22a;"
-d="M232 107c15 1 23 -17 13 -27l-66 -65c-20 -20 -46 -31 -74 -31s-54 11 -74 31s-31 46 -31 74s10 55 30 75l69 68c8 8 18 15 28 20c6 3 12 5 19 7c1 0 3 1 4 1c5 1 11 3 16 3h7c4 0 7 -1 11 -1h6c22 -4 42 -14 58 -30c12 -12 20 -25 24 -41c2 -8 -2 -17 -10 -19v0h-1
-c-8 -2 -16 2 -19 10c-4 10 -9 19 -17 27c-12 12 -29 20 -47 21h-4h-11c-5 -1 -10 -2 -15 -4s-9 -4 -14 -7c-4 -3 -8 -6 -12 -10l-68 -68c-14 -14 -22 -32 -22 -52s8 -37 22 -51s31 -22 51 -22s38 8 52 22l64 64c3 2 6 5 10 5h1zM385 369c20 -20 31 -46 31 -74
-s-10 -55 -30 -75l-69 -68c-8 -8 -18 -15 -28 -20c-6 -3 -12 -5 -19 -7c-6 -2 -14 -3 -20 -3c-3 0 -4 -1 -7 -1c-4 0 -7 1 -11 1c-24 2 -47 13 -64 30v0v0c-12 12 -20 24 -24 38c-3 9 3 18 12 20c8 2 16 -2 19 -10c4 -10 9 -18 16 -25c12 -12 29 -20 47 -21h4h11
-c5 1 10 2 15 4s9 5 14 8c4 3 8 5 12 9l68 68c14 14 22 32 22 52s-8 37 -22 51s-31 22 -51 22s-37 -8 -51 -22l-64 -63c-3 -3 -8 -5 -13 -5c-14 1 -20 18 -10 28l64 63c20 20 46 31 74 31s54 -11 74 -31z" />
- <glyph glyph-name="ion-md-checkbox-outline" unicode="&#xf2b8;" horiz-adv-x="384"
-d="M105 233l66 -66l183 183l30 -30l-213 -213l-96 96zM341 43v170h43v-170c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h213v-43h-213v-298h298z" />
- <glyph glyph-name="ion-md-cloud-upload" unicode="&#xf2c8;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM272 172h68l-100 100l-100 -100h68v-76h64v76z" />
- <glyph glyph-name="ion-logo-instagram" unicode="&#xf23e;" horiz-adv-x="384"
-d="M272 352h-160c-21 0 -41 -9 -56 -24s-24 -35 -24 -56v-160c0 -21 9 -41 24 -56s35 -24 56 -24h160c21 0 41 9 56 24s24 35 24 56v160c0 21 -9 41 -24 56s-35 24 -56 24zM272 384v0c62 0 112 -50 112 -112v-160c0 -62 -50 -112 -112 -112h-160c-62 0 -112 50 -112 112v160
-c0 62 50 112 112 112h160zM296 272c-13 0 -24 11 -24 24s11 24 24 24s24 -11 24 -24s-11 -24 -24 -24zM192 256c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM192 288v0c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96z" />
- <glyph glyph-name="ion-md-volume-high" unicode="&#xf123;" horiz-adv-x="384"
-d="M0 256h85l107 112v-352l-107 112h-85v128zM288 192c0 -38 -21 -73 -53 -88v177c32 -16 53 -51 53 -89zM235 384c85 -20 149 -99 149 -192s-64 -172 -149 -192v45c62 19 106 78 106 147s-44 128 -106 147v45z" />
- <glyph glyph-name="ion-md-help-buoy" unicode="&#xf309;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM269 44c19 8 37 20 52 35s27 33 35 52l-40 12c-6 -13 -14 -25 -24 -35s-22 -18 -35 -24zM147 340c-19 -8 -37 -20 -52 -35s-27 -33 -35 -52l40 -12c6 13 14 25 24 35s22 18 35 24z
-M208 256c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM321 305c-15 15 -33 27 -52 35l-12 -40c13 -6 25 -14 35 -24s18 -22 24 -35l40 12c-8 19 -20 37 -35 52zM95 79c15 -15 33 -27 52 -35l12 40c-13 6 -25 14 -35 24s-18 22 -24 35l-40 -12
-c8 -19 20 -37 35 -52z" />
- <glyph glyph-name="ion-md-restaurant" unicode="&#xf36c;" horiz-adv-x="415"
-d="M116 168l-91 89c-34 33 -34 86 0 119l153 -148zM264 206l-33 -31l150 -145l-30 -30l-150 146l-150 -146l-30 30s163 159 211 207c-15 32 -4 77 31 111c41 40 101 49 132 17c33 -31 24 -89 -17 -129c-34 -34 -80 -45 -114 -30z" />
- <glyph glyph-name="ion-md-body" unicode="&#xf29c;" horiz-adv-x="384"
-d="M192 400c22 0 40 -18 40 -40s-18 -40 -40 -40s-40 18 -40 40s18 40 40 40zM384 256h-128v-272h-43v144h-42v-144h-43v272h-128v43h384v-43z" />
- <glyph glyph-name="ion-md-crop" unicode="&#xf2dc;"
-d="M304 135v153h-153v38h153c21 0 38 -17 38 -38v-153h-38zM112 102h304v-38h-74v-80h-38v80h-192c-21 0 -38 17 -38 38v186h-74v38h74v74h38v-298z" />
- <glyph glyph-name="ion-md-chatbubbles" unicode="&#xf2b7;"
-d="M85 80h219v-7c0 -17 -13 -31 -30 -31h-216l-58 -58v274c0 17 13 30 30 30h10v-163c0 -20 25 -45 45 -45zM381 400c19 0 35 -16 35 -35v-314l-76 53h-238c-19 0 -35 16 -35 35v226c0 19 16 35 35 35h279z" />
- <glyph glyph-name="ion-logo-rss" unicode="&#xf248;" horiz-adv-x="384"
-d="M56 112c31 0 56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56s25 56 56 56zM0 256c140 0 256 -116 256 -256h-80c0 48 -14 94 -48 128s-80 48 -128 48v80zM0 384c212 0 384 -172 384 -384h-80c0 171 -133 304 -304 304v80z" />
- <glyph glyph-name="ion-md-outlet" unicode="&#xf33d;" horiz-adv-x="448"
-d="M338 416c61 0 110 -51 110 -113v-222c0 -62 -49 -113 -110 -113h-228c-61 0 -110 51 -110 113v222c0 62 49 113 110 113h228zM143 197v102c0 11 -9 21 -20 21h-23c-11 0 -19 -9 -20 -20v-2v-101v-1c0 -11 9 -20 20 -20h23c11 0 20 9 20 20v1zM265 50v31
-c0 23 -18 42 -41 42s-41 -19 -41 -42v-29c0 -12 9 -20 20 -20h42c11 0 20 7 20 18zM368 197v102c0 11 -9 21 -20 21h-24c-11 0 -19 -9 -20 -20v-2v-101v-1c0 -11 9 -20 20 -20h24c11 0 20 9 20 20v1z" />
- <glyph glyph-name="ion-ios-information-circle-outline" unicode="&#xf19f;"
-d="M187 276c0 11 10 20 21 20s21 -9 21 -20s-10 -20 -21 -20s-21 9 -21 20zM189 240h38v-144h-38v144zM208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0
-c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-md-flash-off" unicode="&#xf169;" horiz-adv-x="408"
-d="M408 12l-24 -24l-140 140l-72 -144v192h-64v88l-108 107l24 25zM300 240l-24 -48l-168 168v40h192l-64 -160h64z" />
- <glyph glyph-name="ion-md-videocam" unicode="&#xf39f;" horiz-adv-x="448"
-d="M352 228l96 98v-268l-96 98v-86c0 -13 -11 -24 -25 -24h-302c-14 0 -25 11 -25 24v244c0 13 11 24 25 24h302c14 0 25 -11 25 -24v-86z" />
- <glyph glyph-name="ion-ios-square-outline" unicode="&#xf15c;" horiz-adv-x="320"
-d="M292 352c15 0 28 -13 28 -28v-264c0 -15 -13 -28 -28 -28h-264c-15 0 -28 13 -28 28v264c0 15 13 28 28 28h264zM292 68v248c0 4 -4 8 -8 8h-248c-4 0 -8 -4 -8 -8v-248c0 -4 4 -8 8 -8h248c4 0 8 4 8 8z" />
- <glyph glyph-name="ion-ios-information-circle" unicode="&#xf1a0;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM227 96v144h-38v-144h38zM208 256c11 0 21 9 21 20s-10 20 -21 20s-21 -9 -21 -20s10 -20 21 -20z" />
- <glyph glyph-name="ion-ios-heart-dislike" unicode="&#xf13f;" horiz-adv-x="448"
-d="M392 21c6 -6 6 -14 0 -20c-2 -2 -5 -2 -7 -3c-5 -1 -9 -1 -13 3l-368 362c-6 6 -6 14 0 20s14 6 20 0zM32 279c0 10 1 20 4 30l270 -265c-36 -31 -66 -52 -66 -52s-101 72 -161 154c-32 43 -47 96 -47 133zM402 146c-16 -22 -33 -42 -52 -61l-282 277c20 18 47 30 76 30
-v0v0h1c40 0 75 -21 95 -52c20 31 55 52 95 52h1v0v0c62 -1 112 -51 112 -113c0 -37 -14 -90 -46 -133z" />
- <glyph glyph-name="ion-md-search" unicode="&#xf375;" horiz-adv-x="384"
-d="M274 143l110 -110l-33 -33l-109 110v17l-7 6c-25 -21 -58 -34 -93 -34c-79 0 -142 63 -142 142s63 143 141 143c79 0 142 -64 142 -143c0 -36 -13 -68 -34 -93l7 -5h18zM142 143c55 0 99 43 99 98s-44 99 -99 99s-98 -44 -98 -99s43 -98 98 -98z" />
- <glyph glyph-name="ion-ios-download" unicode="&#xf420;" horiz-adv-x="320"
-d="M280 304c22 0 40 -18 40 -40v-240c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v240c0 22 18 40 40 40h107v-180l-48 47c-5 5 -13 5 -18 0s-5 -13 0 -18l70 -69v0c1 -1 2 -2 4 -3s3 -1 5 -1c3 0 7 2 9 4l70 69c5 5 5 13 0 18s-13 5 -18 0l-48 -47v180h107zM173 387
-v-83h-26v83c0 7 6 13 13 13s13 -6 13 -13z" />
- <glyph glyph-name="ion-ios-boat" unicode="&#xf12a;" horiz-adv-x="400"
-d="M296 26c0 0 27 -24 63 -36c2 -1 1 -4 -1 -4c-23 2 -40 6 -62 12c-22 -10 -67 -14 -96 -14s-73 5 -96 14c-21 -6 -39 -9 -62 -12c-2 0 -3 3 -1 4c36 12 63 36 63 36c26 -9 66 -15 96 -15s70 6 96 15zM390 185c6 -3 10 -9 10 -16c0 -2 0 -5 -1 -7l-55 -136
-c-28 0 -57 22 -57 22c-18 -9 -53 -17 -79 -19h-8h-8c-26 2 -61 10 -79 19c0 0 -29 -22 -57 -22l-55 136c-1 2 -1 5 -1 7c0 7 4 13 10 16v0l187 85c2 1 4 1 6 0l187 -85v0zM156 160c7 0 12 10 12 22s-5 22 -12 22s-12 -10 -12 -22s5 -22 12 -22zM244 160c7 0 12 10 12 22
-s-5 22 -12 22s-12 -10 -12 -22s5 -22 12 -22zM336 321l18 -97c1 -3 -2 -5 -5 -4l-26 11c-1 0 -2 2 -2 3l-16 86c-3 11 -7 16 -16 16h-177c-9 0 -15 -5 -17 -16l-16 -86c0 -1 -1 -3 -2 -3l-25 -11c-3 -1 -7 1 -6 4l18 97c5 26 17 47 40 47h34l2 8c4 14 16 24 31 24h57
-c15 0 27 -10 31 -24l2 -8h35c22 0 34 -20 40 -47v0z" />
- <glyph glyph-name="ion-ios-volume-off" unicode="&#xf264;" horiz-adv-x="384"
-d="M326 -16c-5 0 -9 3 -12 7l-228 388c-4 7 -2 15 5 19s15 2 19 -5l228 -388c4 -7 2 -15 -5 -19c-2 -1 -5 -2 -7 -2zM69 248l51 41l40 -69v-124c0 -6 -3 -11 -9 -14c-2 -1 -5 -2 -7 -2c-4 0 -7 2 -10 4l-65 52h-53c-9 0 -16 7 -16 16v80c0 9 7 16 16 16h53zM384 192v0
-c0 -53 -19 -103 -53 -143l-13 22c27 34 42 77 42 121v0v0c0 53 -20 102 -58 139c-5 5 -5 12 0 17s11 5 16 0c42 -42 66 -97 66 -156v0zM321 192c0 -31 -8 -60 -23 -85l-15 24c9 19 14 39 14 61v0v0c0 37 -14 72 -40 98c-5 5 -5 12 0 17s12 5 17 0c30 -31 47 -71 47 -115v0v0
-zM254 192c0 -3 -1 -7 -1 -10l-48 82c0 1 1 1 2 2c5 5 12 4 17 -1c19 -20 30 -45 30 -73v0v0z" />
- <glyph glyph-name="ion-logo-reddit" unicode="&#xf247;" horiz-adv-x="449"
-d="M259 160c0 18 14 31 32 31s32 -13 32 -31s-14 -32 -32 -32s-32 14 -32 32zM127 160c0 18 14 31 32 31s32 -13 32 -31s-14 -32 -32 -32s-32 14 -32 32zM449 197c0 -20 -11 -37 -27 -45c1 -5 1 -9 1 -14c0 -76 -88 -138 -198 -138s-199 61 -199 137c0 5 0 10 1 15
-c-16 8 -27 25 -27 45c0 28 23 50 50 50c13 0 24 -5 33 -13c33 23 79 39 129 41h7l29 98l86 -17c7 16 22 28 41 28c25 0 44 -20 44 -45s-19 -45 -44 -45c-24 0 -45 19 -45 44l-69 14l-24 -77c50 -2 96 -18 129 -41c9 8 21 13 34 13c27 0 49 -22 49 -50zM375 366
-c-15 0 -27 -12 -27 -27s12 -27 27 -27s27 12 27 27s-12 27 -27 27zM18 197c0 -11 6 -21 14 -27c7 19 20 38 37 53c-5 4 -12 6 -19 6c-18 0 -32 -14 -32 -32zM355 55c32 22 50 52 50 83v9c-1 6 -3 12 -5 18c-6 16 -15 30 -30 43c-4 4 -10 8 -15 12v0c-35 24 -80 37 -130 37
-s-96 -13 -131 -37v0c-5 -4 -11 -8 -15 -12c-15 -13 -24 -27 -30 -43c-2 -6 -4 -12 -5 -18v-9c0 -31 18 -61 50 -83c35 -24 81 -37 131 -37s95 13 130 37zM417 170c8 6 14 16 14 27c0 18 -13 32 -31 32c-7 0 -15 -2 -20 -6c17 -15 30 -34 37 -53zM289 90l13 -12
-c-1 -1 -29 -30 -77 -30s-77 29 -78 30l13 12s24 -24 65 -24c40 0 64 24 64 24z" />
- <glyph glyph-name="ion-ios-flashlight" unicode="&#xf141;" horiz-adv-x="170"
-d="M146 416c18 0 24 -14 24 -32h-170c0 18 6 32 24 32h122zM25 300c-16 18 -25 33 -25 68h170c0 -33 -10 -50 -25 -68c-8 -9 -12 -19 -12 -31v-266c0 -22 -18 -35 -40 -35h-16c-22 0 -40 13 -40 35v266c0 12 -4 22 -12 31zM57 210v-36c0 -16 13 -28 28 -28s28 12 28 28v36
-c0 16 -13 28 -28 28s-28 -12 -28 -28zM65 175c0 11 9 20 20 20s20 -9 20 -20s-9 -20 -20 -20s-20 9 -20 20z" />
- <glyph glyph-name="ion-md-qr-scanner" unicode="&#xf35e;"
-d="M48 324v-68h-48v68c0 34 27 60 61 60h67v-48h-68c-7 0 -12 -5 -12 -12zM356 384c33 0 60 -26 60 -60v-68h-48v68c0 7 -6 12 -13 12h-67v48h68zM368 61v67h48v-67c0 -34 -26 -61 -60 -61h-68v49h68c7 0 12 5 12 12zM60 49h68v-49h-67c-34 0 -61 27 -61 61v67h48v-67
-c0 -7 5 -12 12 -12z" />
- <glyph glyph-name="ion-ios-navigate" unicode="&#xf46e;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 64l96 224l-224 -96h128v-128z" />
- <glyph glyph-name="ion-md-power" unicode="&#xf359;"
-d="M231 400v-231h-46v231h46zM343 350c45 -38 73 -95 73 -158c0 -115 -93 -208 -208 -208s-208 93 -208 208c0 63 28 120 73 158l33 -33c-36 -30 -60 -74 -60 -125c0 -89 72 -162 162 -162s162 73 162 162c0 51 -24 96 -60 125z" />
- <glyph glyph-name="ion-ios-stopwatch" unicode="&#xf4b5;" horiz-adv-x="384"
-d="M352 304l-26 26c-3 3 -3 8 0 11l12 11c3 3 8 3 11 0l25 -25c3 -3 3 -8 0 -11l-11 -12c-3 -3 -8 -3 -11 0zM21 304l-11 12c-3 3 -3 8 0 11l25 25c3 3 8 3 11 0l12 -11c3 -3 3 -8 0 -11l-26 -26c-3 -3 -8 -3 -11 0zM216 366c95 -12 168 -92 168 -190
-c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 98 73 178 168 190v18c0 9 7 16 16 16h16c9 0 16 -7 16 -16v-18zM206 147c11 5 18 16 18 29s-7 24 -18 29v99c0 8 -6 14 -14 14s-14 -6 -14 -14v-99c-11 -5 -18 -16 -18 -29s7 -24 18 -29v-19c0 -8 6 -14 14 -14s14 6 14 14
-v19z" />
- <glyph glyph-name="ion-md-key" unicode="&#xf316;"
-d="M201 224h215v-64h-43v-64h-69v64h-103c-14 -40 -53 -72 -98 -72c-57 0 -103 47 -103 104s44 104 101 104c45 0 86 -32 100 -72zM104 158c19 0 34 15 34 34s-15 34 -34 34s-35 -15 -35 -34s16 -34 35 -34z" />
- <glyph glyph-name="ion-ios-arrow-down" unicode="&#xf3d0;" horiz-adv-x="336"
-d="M168 154l127 127c9 9 25 9 34 0s9 -25 0 -34l-144 -144c-9 -9 -24 -10 -33 -1l-145 145c-5 5 -7 11 -7 17s2 12 7 17c9 9 25 9 34 0z" />
- <glyph glyph-name="ion-logo-linkedin" unicode="&#xf240;" horiz-adv-x="384"
-d="M353 384c18 0 31 -13 31 -30v-321c0 -17 -13 -33 -31 -33h-320c-18 0 -33 16 -33 33v321c0 17 15 30 33 30h320zM119 64v171h-55v-171h55zM93 261c18 0 30 13 30 29c0 17 -11 30 -29 30s-30 -13 -30 -30c0 -16 11 -29 29 -29v0zM320 64v100c0 51 -27 75 -63 75
-c-29 0 -42 -17 -50 -28v24h-55v-171h55v97c0 5 0 10 2 14c4 10 13 20 28 20c20 0 28 -15 28 -37v-94h55z" />
- <glyph glyph-name="ion-ios-arrow-dropdown" unicode="&#xf110;"
-d="M100 237c8 8 19 8 27 0l81 -81l81 79c8 8 19 8 27 0c4 -4 6 -8 6 -13s-2 -10 -6 -14l-94 -94c-8 -7 -20 -6 -27 1l-95 95c-8 8 -8 19 0 27zM0 192c0 115 93 208 208 208s208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208zM332 316c-33 33 -77 52 -124 52
-s-91 -19 -124 -52s-52 -77 -52 -124s19 -91 52 -124s77 -52 124 -52s91 19 124 52s52 77 52 124s-19 91 -52 124z" />
- <glyph glyph-name="ion-ios-settings" unicode="&#xf4a7;" horiz-adv-x="384"
-d="M352 192c0 -21 14 -39 32 -46c-5 -20 -13 -40 -24 -57c-6 3 -13 4 -20 4c-13 0 -25 -5 -35 -15c-15 -15 -18 -36 -10 -54c-17 -11 -37 -19 -57 -24c-7 18 -25 32 -46 32s-39 -14 -46 -32c-20 5 -40 13 -57 24c8 18 5 39 -10 54c-10 10 -22 15 -35 15c-7 0 -14 -1 -20 -4
-c-11 17 -19 37 -24 57c18 7 32 25 32 46s-14 39 -32 46c5 20 13 39 24 57c6 -3 13 -4 20 -4c13 0 25 4 35 14c15 15 18 37 10 55c17 11 37 19 57 24c7 -18 25 -32 46 -32s39 14 46 32c20 -5 40 -13 57 -24c-8 -18 -5 -40 10 -55c10 -10 22 -14 35 -14c7 0 14 1 20 4
-c11 -17 19 -37 24 -57c-19 -7 -32 -25 -32 -46zM193 112c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80z" />
- <glyph glyph-name="ion-md-sad" unicode="&#xf373;"
-d="M208 160c45 0 83 -26 102 -64h-204c19 38 57 64 102 64zM208 400c114 0 208 -94 208 -208s-93 -208 -208 -208s-208 94 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM281 213c-18 0 -31 13 -31 31
-s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM135 213c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31z" />
- <glyph glyph-name="ion-ios-tennisball" unicode="&#xf4bb;"
-d="M202 -16c-110 3 -199 93 -202 203c8 1 15 1 23 1c48 0 94 -18 128 -52s53 -80 53 -128c0 -8 -1 -16 -2 -24zM182 374c0 -115 92 -207 207 -207c9 0 18 0 26 1c-11 -96 -89 -173 -186 -183c1 8 1 15 1 23c0 115 -92 207 -207 207c-7 0 -15 0 -22 -1c10 96 87 172 182 184
-c-1 -8 -1 -16 -1 -24zM261 246c-34 34 -53 80 -53 128c0 9 1 18 2 26c112 -2 204 -93 206 -205c-9 -1 -18 -2 -27 -2c-48 0 -94 19 -128 53zM184 399v0v0v0z" />
- <glyph glyph-name="ion-ios-card" unicode="&#xf142;" horiz-adv-x="448"
-d="M448 320v-48h-448v48c0 18 14 32 32 32h384c18 0 32 -14 32 -32zM0 64v160h448v-160c0 -18 -14 -32 -32 -32h-384c-18 0 -32 14 -32 32zM142 112c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h164c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-164zM70 112c-8 0 -14 -6 -14 -14v0
-c0 -8 6 -14 14 -14h12c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-12z" />
- <glyph glyph-name="ion-md-create" unicode="&#xf2db;" horiz-adv-x="384"
-d="M0 80l236 236l80 -80l-236 -236h-80v80zM378 298l-40 -40l-80 80l40 40c9 9 20 9 29 0l51 -51c9 -9 9 -20 0 -29z" />
- <glyph glyph-name="ion-logo-vk" unicode="&#xf10d;" horiz-adv-x="448"
-d="M395 149c41 -38 53 -58 53 -70c0 -6 -3 -9 -6 -11c-5 -4 -22 -4 -34 -4h-28c-9 0 -18 -1 -26 2c-6 2 -12 5 -18 9c-12 9 -21 21 -31 32c-5 6 -10 11 -17 15c-8 4 -14 2 -19 -4c-6 -6 -7 -18 -7 -26s1 -18 -6 -24c-2 -1 -4 -2 -6 -2c-4 -1 -17 -2 -33 -2s-68 8 -105 49
-c-36 39 -62 79 -82 120c-11 23 -30 55 -30 66c0 5 5 9 10 9h66c9 0 15 -4 19 -11s10 -26 23 -52c13 -25 25 -45 41 -50c2 0 8 -1 10 3c4 7 5 18 6 25c4 29 3 46 -5 67c-2 5 -7 7 -11 9c-7 3 -13 2 -11 5c4 5 12 10 19 12s21 4 40 4s40 -1 48 -7c1 -1 4 -4 5 -6
-c5 -11 2 -29 1 -55c-1 -46 3 -51 5 -54s5 -3 6 -3c2 0 4 0 6 1c8 4 26 26 40 52c13 25 18 36 21 44s8 16 14 16h74c16 0 20 -3 20 -14c0 -17 -18 -39 -32 -58c-34 -45 -40 -53 -40 -59c0 -3 0 -5 1 -8c3 -8 10 -12 19 -20z" />
- <glyph glyph-name="ion-ios-wifi" unicode="&#xf26d;" horiz-adv-x="448"
-d="M224 352c82 0 163 -33 222 -88c3 -3 3 -9 0 -12l-27 -28c-3 -3 -8 -3 -11 0c-23 22 -51 39 -80 51c-33 14 -68 21 -104 21s-71 -7 -104 -21c-29 -12 -56 -29 -79 -51c-3 -3 -9 -3 -12 0l-27 28c-3 3 -2 9 1 12c58 55 139 88 221 88zM81 170c-3 3 -3 9 0 12
-c38 34 88 55 143 55s104 -21 142 -55c4 -3 4 -9 1 -12l-29 -28c-3 -3 -8 -3 -11 0c-28 25 -65 39 -103 39s-75 -14 -103 -39c-3 -3 -8 -3 -11 0zM224 124c23 0 44 -10 59 -26c3 -3 3 -8 0 -11l-53 -53c-3 -3 -9 -3 -12 0l-53 53c-3 3 -3 8 0 11c15 16 36 26 59 26z" />
- <glyph glyph-name="ion-logo-vimeo" unicode="&#xf2c4;" horiz-adv-x="448"
-d="M445 334c7 -33 1 -66 -13 -97s-31 -59 -51 -87c-26 -36 -52 -71 -85 -101c-19 -18 -41 -35 -66 -44c-31 -11 -52 -5 -71 22c-14 19 -22 40 -28 63c-12 45 -25 90 -38 134c-4 12 -9 22 -15 33c-3 5 -8 10 -12 14c-5 4 -11 3 -17 0c-10 -6 -28 -18 -28 -18l-21 27
-c26 24 82 71 82 71c11 9 33 25 48 27c21 3 38 -4 50 -22c11 -17 15 -37 18 -57c7 -41 11 -82 23 -122c3 -10 8 -20 13 -29c7 -11 15 -13 25 -5c4 3 7 6 10 10c20 24 37 52 48 81c3 9 3 17 3 27c0 13 -10 25 -25 26s-24 -1 -39 -7c6 24 24 62 54 84c29 21 71 24 94 16
-s36 -23 41 -46z" />
- <glyph glyph-name="ion-ios-checkmark-circle-outline" unicode="&#xf149;"
-d="M315 255c2 -2 1 -4 0 -6l-134 -134v0c-2 -2 -7 -5 -12 -5c-4 0 -7 1 -11 5l-56 56c-2 2 -2 4 0 6l17 18c1 1 2 1 3 1s2 0 3 -1l44 -45l122 123c1 1 2 1 3 1v0c1 0 2 0 3 -1zM208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53
-s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-md-battery-full" unicode="&#xf296;" horiz-adv-x="224"
-d="M194 371c16 0 30 -14 30 -30v-343c0 -16 -13 -30 -30 -30h-164c-16 0 -30 13 -30 30v343c0 16 14 30 30 30h37v45h90v-45h37z" />
- <glyph glyph-name="ion-md-color-wand" unicode="&#xf2d3;" horiz-adv-x="384"
-d="M137 291l247 -254l-36 -37l-248 253zM117 316v68h37v-68h-37zM117 118v68h37v-68h-37zM206 235v37h69v-37h-69zM242 332l-48 -48l-25 26l47 48zM105 310l-26 -26l-47 48l26 26zM32 170l47 48l26 -26l-47 -48zM0 235v37h65v-37h-65z" />
- <glyph glyph-name="ion-md-analytics" unicode="&#xf278;" horiz-adv-x="448"
-d="M347 270c4 -1 9 -2 13 -2c11 0 22 4 30 10l58 -39v-212c0 -24 -19 -43 -43 -43h-362c-24 0 -43 19 -43 43v57l61 57c7 -4 15 -6 24 -6c13 0 24 5 33 13l58 -33c0 -3 -1 -6 -1 -9c0 -26 22 -48 48 -48s48 22 48 48c0 12 -4 22 -11 30zM85 231c-26 0 -48 -22 -48 -48
-c0 -6 1 -12 3 -17l-40 -38v229c0 24 19 43 43 43h362c24 0 43 -19 43 -43v-80l-41 28c1 4 1 7 1 11c0 26 -22 48 -48 48s-48 -22 -48 -48c0 -10 3 -20 9 -28l-87 -135c-3 1 -7 1 -11 1c-12 0 -22 -4 -30 -11l-60 34v6c0 26 -22 48 -48 48z" />
- <glyph glyph-name="ion-ios-compass" unicode="&#xf15d;"
-d="M232 168c1 -1 1 -3 0 -4l-98 -49c-2 -1 -4 1 -3 3l49 98c1 1 3 1 4 0zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM249 151v0l81 160c1 2 -1 4 -3 3l-159 -81h-1l-81 -160c-1 -2 1 -4 3 -3z" />
- <glyph glyph-name="ion-logo-dribbble" unicode="&#xf233;" horiz-adv-x="384"
-d="M192 384c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM314 296c-17 -25 -47 -47 -85 -64c5 -10 9 -20 13 -31c33 3 75 4 110 2c-2 35 -16 68 -38 93zM192 352c-14 0 -26 -2 -39 -5c23 -23 43 -53 62 -87c34 14 62 33 79 55
-c-28 23 -63 37 -102 37zM120 334c-41 -21 -71 -58 -83 -103h25c44 0 85 6 121 17c-19 34 -40 63 -63 86zM32 200v-8c0 -40 15 -78 40 -106c24 45 67 83 122 106c4 2 8 3 14 4c-3 8 -6 16 -10 24c-40 -13 -88 -20 -138 -21c-9 0 -19 1 -28 1zM192 32c20 0 39 3 57 10
-c-3 25 -8 53 -15 79c-4 17 -10 33 -16 49c-7 -2 -13 -4 -17 -6c-48 -22 -86 -56 -107 -98c27 -21 61 -34 98 -34zM278 58c40 26 68 67 73 116c-30 2 -68 3 -99 0c4 -12 9 -25 12 -38c7 -27 11 -52 14 -78z" />
- <glyph glyph-name="ion-ios-fitness" unicode="&#xf1ab;" horiz-adv-x="448"
-d="M320 168h-192c-4 0 -8 4 -8 8v32c0 4 4 8 8 8h192c4 0 8 -4 8 -8v-32c0 -4 -4 -8 -8 -8zM346 86v212c0 12 10 22 22 22v0c12 0 22 -10 22 -22v-212c0 -12 -10 -22 -22 -22v0c-12 0 -22 10 -22 22zM428 256c11 0 20 -9 20 -20v-88c0 -11 -9 -20 -20 -20h-12
-c-4 0 -8 4 -8 8v112c0 4 4 8 8 8h12zM102 86c0 -12 -10 -22 -22 -22v0c-12 0 -22 10 -22 22v212c0 12 10 22 22 22v0c12 0 22 -10 22 -22v-212zM32 256c4 0 8 -4 8 -8v-112c0 -4 -4 -8 -8 -8h-12c-11 0 -20 9 -20 20v88c0 11 9 20 20 20h12z" />
- <glyph glyph-name="ion-ios-aperture" unicode="&#xf108;"
-d="M202 77h179c-25 -37 -61 -66 -103 -81l-22 22l-55 55c-1 1 -1 4 1 4zM119 113c0 2 2 3 3 2l127 -127c-13 -3 -27 -4 -41 -4c-32 0 -62 7 -89 20v109zM208 400c32 0 63 -7 90 -20v-109c0 -2 -3 -3 -4 -2l-126 127c13 3 26 4 40 4zM20 281h110c2 0 2 -2 1 -3l-127 -127
-c-3 13 -4 27 -4 41c0 32 7 62 20 89zM139 388l77 -77c1 -1 1 -4 -1 -4h-180c25 37 61 66 104 81zM119 227c0 1 0 2 1 3l50 50c1 1 2 1 3 1h71c1 0 1 0 2 -1l50 -50c1 -1 2 -2 2 -3v-70c0 -1 -1 -2 -2 -3l-50 -50c-1 -1 -1 -1 -2 -1h-71c-1 0 -2 0 -3 1l-50 50
-c-1 1 -1 2 -1 3v70zM412 232c3 -13 4 -26 4 -40c0 -32 -7 -62 -20 -89h-109c-2 0 -2 2 -1 3zM324 365c37 -25 65 -61 80 -104l-77 -77c-1 -1 -3 0 -3 2v179zM12 122l78 78c1 1 3 0 3 -2v-179c-37 25 -66 60 -81 103z" />
- <glyph glyph-name="ion-md-document" unicode="&#xf2e1;" horiz-adv-x="320"
-d="M192 400l128 -128v-248c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v336c0 22 18 40 40 40h152zM176 256h112l-112 112v-112z" />
- <glyph glyph-name="ion-ios-bicycle" unicode="&#xf127;" horiz-adv-x="448"
-d="M93 159c-17 0 -34 -8 -46 -20s-19 -29 -19 -46s7 -34 19 -46s29 -19 46 -19s34 7 46 19s20 29 20 46s-8 35 -20 47s-29 19 -46 19zM93 187v0c51 0 94 -43 94 -94s-43 -93 -94 -93s-93 42 -93 93s42 94 93 94zM288 320c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32
-s-14 -32 -32 -32zM355 159c-17 0 -34 -8 -46 -20s-20 -29 -20 -46s8 -34 20 -46s29 -19 46 -19s34 7 46 19s19 29 19 46s-7 35 -19 47s-29 19 -46 19zM355 187v0c51 0 93 -43 93 -94s-42 -93 -93 -93s-94 42 -94 93s43 94 94 94zM336 256c9 0 16 -7 16 -16s-7 -16 -16 -16
-h-57s-19 24 -38 52l-49 -52c18 -14 48 -25 48 -38v-90c0 -9 -7 -16 -16 -16s-16 7 -16 16v66s-16 16 -62 42c-6 4 -18 10 -18 27c0 8 3 17 9 23l72 69c6 6 14 9 22 9c11 0 21 -7 27 -16l30 -60h48z" />
- <glyph glyph-name="ion-ios-clipboard" unicode="&#xf14c;" horiz-adv-x="352"
-d="M60 288c0 9 7 16 16 16h200c9 0 16 -7 16 -16v-240c0 -9 -7 -16 -16 -16h-200c-9 0 -16 7 -16 16v240zM242 367c8 0 14 -7 14 -15v-18c0 -1 -1 -2 -2 -2h-156c-1 0 -2 1 -2 2v16c0 10 8 17 18 17h14c0 6 1 11 3 16c2 6 6 11 10 16c9 10 21 17 35 17s27 -7 36 -17
-c4 -5 8 -10 10 -16c2 -5 2 -10 2 -16h18zM179 352c7 1 12 6 13 13c1 10 -8 19 -18 18c-7 -1 -12 -7 -13 -14c-1 -10 8 -18 18 -17zM320 400c18 0 32 -14 32 -32v-368c0 -17 -15 -32 -32 -32h-288c-18 0 -32 14 -32 56v344c0 18 14 32 32 32h76c2 0 3 -2 2 -3
-c-3 -4 -6 -9 -8 -16c0 -1 0 -1 -1 -1h-1c-22 0 -27 -18 -27 -37v-9c0 -1 -1 -2 -2 -2h-22c-9 0 -16 -7 -16 -16v-297c0 -9 7 -16 16 -16h253c9 0 16 7 16 16v297c0 9 -7 16 -16 16h-20c-1 0 -2 1 -2 2v14v1v0c-1 19 -8 34 -27 34h-1c-1 0 -2 0 -2 1c-2 5 -4 9 -7 13
-c-1 1 0 3 2 3h75z" />
- <glyph glyph-name="ion-ios-arrow-dropright-circle" unicode="&#xf12b;"
-d="M0 192c0 115 93 208 208 208s208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208zM244 192l-79 -81c-8 -8 -8 -19 0 -27c4 -4 8 -6 13 -6s10 2 14 6l94 94c7 8 6 20 -1 27l-95 95c-8 8 -19 8 -27 0s-8 -19 0 -27z" />
- <glyph glyph-name="ion-md-mail-unread" unicode="&#xf172;" horiz-adv-x="464"
-d="M336 320c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64zM351 245c14 -9 31 -15 49 -15s34 5 48 14v-185c0 -24 -19 -43 -43 -43h-362c-24 0 -43 19 -43 43v266c0 24 19 43 43 43h281c-9 -14 -14 -30 -14 -48s5 -36 15 -50l-101 -67l-176 117v-43
-l176 -117z" />
- <glyph glyph-name="ion-md-shirt" unicode="&#xf37a;" horiz-adv-x="384"
-d="M256 384l128 -32v-96l-77 16l13 -272h-256l13 272l-77 -16v96l128 32c11 -19 40 -32 64 -32s53 13 64 32z" />
- <glyph glyph-name="ion-ios-finger-print" unicode="&#xf17c;"
-d="M403 266c8 -24 13 -50 13 -73v-11c0 -7 -7 -13 -14 -13v0c-4 0 -8 1 -10 4s-4 6 -4 10c0 2 1 7 1 10c0 20 -5 42 -12 63s-17 38 -27 48c-5 5 -5 15 0 20c3 3 6 4 10 4v0c4 0 7 -1 10 -4c13 -13 24 -34 33 -58zM95 337c-4 0 -9 2 -11 6c-2 3 -3 6 -2 10s2 7 5 9
-c35 25 76 38 121 38c47 0 92 -17 131 -49c6 -5 7 -13 2 -19c-3 -3 -7 -5 -11 -5c-3 0 -6 1 -8 3c-34 28 -73 43 -114 43c-39 0 -75 -12 -105 -33c-2 -2 -5 -3 -8 -3zM27 193c0 -30 6 -53 15 -82c1 -4 1 -8 -1 -11s-5 -5 -9 -6c-1 0 -3 -1 -4 -1c-6 0 -11 4 -13 10
-c-10 31 -15 57 -15 90c0 50 18 99 51 137c3 3 7 4 11 4v0c3 0 6 -1 8 -3c3 -2 5 -5 5 -9s-1 -7 -3 -10c-29 -33 -45 -75 -45 -119zM308 318c26 -23 46 -55 57 -94c12 -43 16 -96 10 -155c-1 -7 -7 -12 -14 -12h-1c-8 1 -13 7 -12 15c5 55 2 106 -9 145c-10 34 -27 62 -49 81
-s-50 29 -79 29c-40 0 -76 -14 -101 -41c-23 -25 -36 -59 -33 -95c2 -31 6 -48 9 -63c5 -23 9 -42 6 -92c0 -7 -7 -13 -14 -13c-1 0 -3 1 -4 1c-6 2 -10 7 -10 14c3 46 -1 64 -5 85c-3 16 -7 33 -9 66c-3 43 11 84 40 115c30 32 73 50 121 50c36 0 70 -12 97 -36zM326 180
-c5 -31 7 -56 7 -77c0 -42 -5 -76 -5 -77c-1 -7 -7 -12 -14 -12h-2c-4 1 -7 3 -9 6s-3 6 -2 10c0 0 4 33 4 73c0 20 -2 43 -7 73c-5 31 -16 57 -32 75c-16 17 -36 26 -58 26c-15 0 -29 -3 -42 -9c-2 -1 -4 -1 -6 -1c-4 0 -8 2 -11 5s-4 8 -3 12s4 7 8 9c16 8 35 12 54 12
-c30 0 56 -12 77 -34s35 -53 41 -91zM137 244c-11 -16 -14 -35 -10 -59c9 -54 18 -116 10 -174c-1 -7 -7 -12 -14 -12h-1c-4 0 -7 2 -9 5s-3 7 -3 11c8 54 -1 114 -10 165c-5 31 0 58 15 80c3 4 7 6 11 6c3 0 7 -1 9 -3c5 -5 6 -13 2 -19zM270 60c7 0 13 -5 13 -13
-c0 -1 1 -21 -3 -41c-1 -6 -6 -11 -13 -11h-5c-6 2 -10 9 -9 16c3 17 3 35 3 35c0 8 5 14 13 14h1zM247 242c11 -10 19 -26 24 -44c8 -28 11 -67 12 -114c0 -4 -2 -7 -4 -10c-3 -3 -5 -4 -9 -4v0c-8 0 -14 7 -14 14c-1 45 -5 82 -12 108c-3 12 -13 39 -38 39
-c-11 0 -20 -4 -26 -11c-6 -8 -9 -21 -6 -37c13 -65 16 -127 9 -184c-1 -7 -7 -12 -14 -12h-1c-7 1 -13 7 -12 15c7 54 4 114 -8 176c-6 31 2 50 10 60c11 13 28 20 48 20c15 0 30 -6 41 -16zM217 202c8 -19 14 -51 16 -90c3 -39 2 -80 -2 -116c-1 -7 -6 -12 -13 -12h-2
-c-4 0 -7 2 -9 5s-3 6 -3 10c4 33 4 73 2 110s-7 67 -14 83c-3 7 0 15 7 18c2 1 3 1 5 1v0c6 0 11 -4 13 -9z" />
- <glyph glyph-name="ion-logo-buffer" unicode="&#xf22d;" horiz-adv-x="384"
-d="M7 284c-9 4 -9 11 0 15l169 82c4 2 10 3 16 3s12 -1 16 -3l169 -82c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3zM377 200c9 -4 9 -12 0 -16l-169 -81c-4 -2 -10 -4 -16 -4s-12 2 -16 4l-169 81c-9 4 -9 12 0 16c0 0 27 13 33 16c5 3 7 3 13 0
-s123 -60 123 -60c4 -2 10 -3 16 -3s12 1 16 3c0 0 121 59 125 61s5 2 9 0s35 -17 35 -17zM377 100c9 -4 9 -11 0 -15l-169 -82c-4 -2 -10 -3 -16 -3s-12 1 -16 3l-169 82c-9 4 -9 11 0 15c0 0 27 14 33 17c5 3 7 2 13 -1s123 -59 123 -59c4 -2 10 -3 16 -3s12 1 16 3
-c0 0 121 58 125 60s5 2 9 0s35 -17 35 -17z" />
- <glyph glyph-name="ion-ios-arrow-forward" unicode="&#xf3d1;" horiz-adv-x="192"
-d="M134 192l-127 127c-9 9 -9 25 0 34s25 9 34 0l144 -144c9 -9 10 -24 1 -33l-145 -145c-5 -5 -11 -7 -17 -7s-12 2 -17 7c-9 9 -9 25 0 34z" />
- <glyph glyph-name="ion-md-construct" unicode="&#xf2d5;" horiz-adv-x="480"
-d="M415 55c7 -5 7 -18 -2 -25l-41 -41c-7 -7 -17 -7 -24 0l-114 113l-96 -112c-8 -8 -19 -8 -27 0l-43 43c-10 8 -10 21 -2 27l105 105l-14 15c-41 -16 -89 -8 -123 26c-35 35 -44 88 -23 130l78 -75l53 53l-76 75c42 19 96 12 131 -23c34 -34 43 -80 27 -121l13 -13v0
-l58 -58v0zM478 231c2 -2 2 -5 0 -7l-55 -56c-2 -2 -6 -2 -8 0l-35 34c-2 2 -2 6 0 8l10 10l-14 13c-6 4 -17 4 -30 0l-31 -37l-57 57l29 28s-1 47 -17 60s-45 29 -45 29v30c30 0 55 -7 91 -25s63 -45 70 -52s17 -18 23 -27s5 -18 5 -18l18 -16l4 4c2 2 6 2 8 0z" />
- <glyph glyph-name="ion-ios-restaurant" unicode="&#xf201;" horiz-adv-x="288"
-d="M272 384c5 0 16 0 16 -11v-357c0 -9 -7 -16 -16 -16s-16 7 -16 16v128s-32 23 -32 80c0 83 23 160 48 160zM176 384h8s24 -107 24 -128s-13 -38 -32 -45v-195c0 -9 -7 -16 -16 -16s-16 7 -16 16v195c-19 7 -32 24 -32 45s24 128 24 128h8l-10 -104c0 -4 4 -8 8 -8
-s8 4 8 8l6 104h8l6 -104c0 -4 4 -8 8 -8s8 4 8 8zM48 384c26 0 48 -64 48 -128c0 -21 -13 -38 -32 -45v-195c0 -9 -7 -16 -16 -16s-16 7 -16 16v195c-19 7 -32 24 -32 45c0 64 22 128 48 128z" />
- <glyph glyph-name="ion-md-repeat" unicode="&#xf36a;" horiz-adv-x="384"
-d="M85 296v0v-83h-42v125h256v62l85 -83l-85 -83v62h-214zM299 88v0v83h42v-125h-256v-62l-85 83l85 83v-62h214z" />
- <glyph glyph-name="ion-ios-reverse-camera" unicode="&#xf49f;" horiz-adv-x="384"
-d="M354 288c18 0 30 -13 30 -31v-176c0 -18 -12 -33 -30 -33h-320c-18 0 -34 15 -34 33v176c0 18 16 31 34 31h7v8c0 4 4 8 8 8h26c4 0 8 -4 8 -8v-8h4c4 0 9 2 12 5c28 32 40 43 52 43h85c12 0 23 -11 51 -43c3 -3 7 -5 12 -5h55zM244 108c1 4 1 8 -2 11c-2 2 -5 4 -8 4
-c-2 0 -5 -2 -7 -3c-11 -8 -23 -11 -35 -11c-15 0 -30 5 -42 16c-10 9 -16 21 -19 34h20c1 0 1 1 2 1c3 2 4 5 2 8l-32 42c-1 1 -3 2 -5 2s-3 -1 -4 -2l-31 -42s-1 -1 -1 -2c0 -4 3 -6 6 -6h20c3 -19 12 -37 27 -51c16 -15 36 -22 57 -22c17 0 34 4 48 14c2 2 3 5 4 7z
-M301 175c2 3 1 7 -2 9h-2h-21c-3 20 -13 40 -26 52c-16 14 -36 23 -58 23c-17 0 -34 -5 -48 -15c-2 -1 -3 -4 -4 -6c-1 -4 -1 -9 2 -12c2 -2 5 -3 8 -3c2 0 5 1 7 2c11 7 23 11 35 11c15 0 29 -5 41 -16c10 -10 17 -22 20 -36h-21h-2c-3 -2 -4 -6 -2 -9l33 -43v-1
-c3 -2 7 -1 9 1z" />
- <glyph glyph-name="ion-md-move" unicode="&#xf331;" horiz-adv-x="448"
-d="M448 192l-96 -96v64h-96v-96h64l-96 -96l-96 96h64v96h-96v-64l-96 96l96 96v-64h96v96h-64l96 96l96 -96h-64v-96h96v64z" />
- <glyph glyph-name="ion-ios-book" unicode="&#xf3e8;"
-d="M98 384c54 0 100 -28 100 -82v-16v0v0v0v-284c0 -2 -3 -3 -4 -1v0c-10 34 -38 68 -82 71c-34 2 -67 -13 -93 -37c-2 -2 -5 -3 -7 -3h-4c-4 0 -8 3 -8 6v290c0 32 44 56 98 56zM318 384c54 0 98 -24 98 -56v-290c0 -3 -4 -6 -8 -6h-4c-2 0 -5 2 -7 3c-29 26 -60 39 -93 37
-c-43 -3 -72 -36 -82 -70v-1c-1 -2 -4 -1 -4 1v284v0v0v0v16c0 54 46 82 100 82z" />
- <glyph glyph-name="ion-ios-cloud-outline" unicode="&#xf409;" horiz-adv-x="512"
-d="M288 324c-40 0 -77 -20 -100 -53l-7 -9c-4 -5 -10 -7 -16 -5l-11 4c-5 2 -10 4 -16 4c-11 0 -22 -5 -30 -14s-14 -20 -14 -32v-11c0 -6 -4 -10 -9 -12l-10 -4c-14 -4 -25 -13 -34 -25c-8 -12 -13 -27 -13 -41c0 -17 7 -33 19 -46s28 -20 44 -20h330c16 0 32 7 44 20
-s19 29 19 46c0 15 -5 30 -15 42s-23 21 -37 23l-11 2c-6 1 -10 5 -11 11l-1 11c-3 30 -17 57 -39 77s-52 32 -82 32zM288 352v0c77 0 141 -59 149 -134c43 -8 75 -47 75 -92c0 -50 -41 -94 -91 -94h-330c-50 0 -91 44 -91 94c0 41 26 80 66 93c1 39 33 74 72 74
-c10 0 19 -3 27 -6c27 39 72 65 123 65z" />
- <glyph glyph-name="ion-ios-arrow-dropdown-circle" unicode="&#xf125;"
-d="M0 192c0 115 93 208 208 208s208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208zM289 235l-81 -79l-81 81c-8 8 -19 8 -27 0s-8 -19 0 -27l95 -95c7 -7 19 -8 27 -1l94 94c4 4 6 9 6 14s-2 9 -6 13c-8 8 -19 8 -27 0z" />
- <glyph glyph-name="ion-md-pin" unicode="&#xf34a;" horiz-adv-x="320"
-d="M160 416c88 0 160 -71 160 -157c0 -118 -160 -291 -160 -291s-160 173 -160 291c0 86 72 157 160 157zM160 203c32 0 57 25 57 56s-25 56 -57 56s-57 -25 -57 -56s25 -56 57 -56z" />
- <glyph glyph-name="ion-ios-list-box" unicode="&#xf143;"
-d="M0 365c0 19 16 35 35 35h346c19 0 35 -16 35 -35v-346c0 -19 -16 -35 -35 -35h-346c-19 0 -35 16 -35 35v346zM89 68c9 1 16 8 17 17c2 13 -9 25 -22 23c-9 -1 -16 -8 -17 -17c-2 -13 9 -25 22 -23zM89 172c9 1 16 8 17 17c2 13 -9 25 -22 23c-9 -1 -16 -8 -17 -17
-c-2 -13 9 -25 22 -23zM89 276c9 1 16 8 17 17c2 13 -9 25 -22 23c-9 -1 -16 -8 -17 -17c-2 -13 9 -25 22 -23zM337 74c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-180c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h180zM337 178c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-180
-c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h180zM337 282c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-180c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h180z" />
- <glyph glyph-name="ion-ios-disc" unicode="&#xf16e;"
-d="M208 282c50 0 90 -40 90 -90s-40 -90 -90 -90s-90 40 -90 90s40 90 90 90zM208 152c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 78c63 0 114 51 114 114
-s-51 114 -114 114s-114 -51 -114 -114s51 -114 114 -114z" />
- <glyph glyph-name="ion-ios-cube" unicode="&#xf168;"
-d="M393 318c6 -3 6 -11 0 -14l-179 -94c-4 -2 -8 -2 -12 0l-179 94c-6 3 -6 11 0 14l179 81c4 2 8 2 12 0zM232 -15c-5 -3 -11 1 -11 7v187c0 3 1 6 4 7l180 93c5 3 11 -1 11 -7v-185c0 -3 -2 -6 -4 -7zM0 272c0 6 6 10 11 7l180 -93c3 -1 4 -4 4 -7v-187
-c0 -6 -6 -10 -11 -7l-180 95c-2 1 -4 4 -4 7v185z" />
- <glyph glyph-name="ion-md-thunderstorm" unicode="&#xf393;" horiz-adv-x="448"
-d="M361 287c48 -3 87 -44 87 -93c0 -52 -41 -82 -93 -82h-94l18 36h-33l33 67h-99v-103h-68c-62 0 -112 38 -112 100c0 55 38 100 91 111c6 1 15 2 21 2c50 0 91 -31 106 -75h33c-6 24 -19 47 -37 65c-25 25 -57 37 -91 40c25 31 61 45 101 45c68 0 124 -48 137 -113z
-M180 80v32h81l-59 -128v96h-22z" />
- <glyph glyph-name="ion-md-male" unicode="&#xf323;"
-d="M368 400h48v-48v-128h-48v94l-107 -107c17 -24 27 -52 27 -83c0 -80 -64 -144 -144 -144s-144 64 -144 144s64 144 144 144c31 0 59 -10 83 -27l107 107h-94v48h128zM144 32c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96z" />
- <glyph glyph-name="ion-ios-color-wand" unicode="&#xf416;" horiz-adv-x="384"
-d="M382 42c3 -3 3 -8 0 -11l-29 -29c-3 -3 -8 -3 -11 0l-245 246c-3 3 -3 8 0 11l29 29c3 3 8 3 11 0zM356 28c3 3 3 8 0 11l-190 191c-3 3 -8 3 -11 0v0c-3 -3 -3 -9 0 -12l190 -190c3 -3 8 -3 11 0v0zM129 328c-7 0 -12 5 -12 12v32c0 7 5 12 12 12s12 -5 12 -12v-32
-c0 -7 -5 -12 -12 -12zM129 185c7 0 12 -5 12 -12v-32c0 -7 -5 -12 -12 -12s-12 5 -12 12v32c0 7 5 12 12 12zM207 258c0 7 5 12 12 12h32c7 0 12 -5 12 -12s-5 -12 -12 -12h-32c-7 0 -12 5 -12 12zM56 258c0 -7 -6 -12 -12 -12h-32c-7 0 -12 5 -12 12s5 12 12 12h32
-c7 0 12 -5 12 -12zM61 307l-21 21c-5 5 -5 12 0 17c2 2 5 3 8 3s7 -1 9 -3l21 -21c5 -5 5 -12 0 -17c-2 -2 -6 -3 -9 -3s-6 1 -8 3zM69 208c3 0 7 -1 9 -3c5 -5 5 -12 0 -17l-21 -21c-2 -2 -6 -4 -9 -4s-6 2 -8 4s-4 5 -4 8s2 7 4 9l21 21c2 2 5 3 8 3v0zM188 304
-c-3 0 -6 1 -8 3s-4 6 -4 9s2 6 4 8l21 21c2 2 5 3 8 3s7 -1 9 -3c5 -5 5 -12 0 -17l-21 -21c-2 -2 -6 -3 -9 -3z" />
- <glyph glyph-name="ion-ios-pie" unicode="&#xf484;" horiz-adv-x="448"
-d="M244 380c0 2 2 4 4 4c111 -4 200 -96 200 -208c0 -114 -92 -207 -207 -208c-88 -1 -164 54 -195 131c-1 2 1 5 3 6l189 48c4 1 6 4 6 8v219zM0 209c0 90 59 205 216 207c2 0 4 -2 4 -4v-229c0 -4 -2 -7 -6 -8l-194 -50c-2 0 -4 1 -5 3c-15 32 -15 81 -15 81z" />
- <glyph glyph-name="ion-md-person" unicode="&#xf345;" horiz-adv-x="384"
-d="M192 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM192 144c64 0 192 -32 192 -96v-48h-384v48c0 64 128 96 192 96z" />
- <glyph glyph-name="ion-md-alert" unicode="&#xf276;"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM232 88v40h-48v-40h48zM232 176v128h-48v-128h48z" />
- <glyph glyph-name="ion-md-tennisball" unicode="&#xf38e;"
-d="M336 356c-42 -45 -64 -103 -64 -164s23 -119 65 -163c-36 -28 -81 -45 -129 -45s-93 17 -128 45c42 44 64 102 64 163s-22 119 -64 164c35 28 80 44 128 44s93 -16 128 -44zM305 193c0 27 5 53 15 78c9 23 23 44 40 62c35 -37 56 -87 56 -141s-21 -103 -55 -140
-c-18 19 -31 39 -41 63c-10 25 -15 51 -15 78zM111 193c0 -27 -5 -53 -15 -78c-10 -24 -23 -45 -41 -64c-34 37 -55 87 -55 141c0 55 21 105 56 142c17 -18 31 -40 40 -63c10 -25 15 -51 15 -78z" />
- <glyph glyph-name="ion-logo-closed-captioning" unicode="&#xf105;" horiz-adv-x="448"
-d="M0 352h448v-320h-448v320zM406 192c0 23 0 38 -3 70s-20 50 -52 53s-86 3 -127 3s-95 0 -127 -3s-49 -21 -52 -53s-3 -47 -3 -70s1 -41 3 -70s17 -50 52 -53s84 -3 127 -3s92 0 127 3s50 24 52 53s3 47 3 70zM326 168c0 1 -1 3 -1 3h46c0 -24 -5 -42 -16 -54
-s-29 -19 -54 -19c-12 0 -22 2 -31 5s-15 8 -21 15s-10 16 -13 28s-5 28 -5 46s2 33 6 45s8 22 15 29s15 12 24 15s19 5 30 5c22 0 38 -7 49 -19s17 -32 17 -54h-46v1c0 18 -11 29 -24 29c-14 0 -22 -9 -24 -26c0 0 -1 -10 -1 -26s1 -24 1 -24c1 -15 10 -26 24 -26
-s24 10 24 26v1zM171 168c0 1 -1 3 -1 3h46c0 -24 -5 -42 -16 -54s-29 -19 -54 -19c-12 0 -21 2 -30 5s-16 8 -22 15s-10 16 -13 28s-5 28 -5 46s2 33 6 45s8 22 15 29s15 12 24 15s19 5 30 5c22 0 38 -7 49 -19s17 -32 17 -54h-45v1c0 18 -11 29 -24 29
-c-14 0 -23 -9 -25 -26c0 0 -1 -10 -1 -26s1 -24 1 -24c1 -15 10 -26 24 -26s24 10 24 26v1z" />
- <glyph glyph-name="ion-ios-qr-scanner" unicode="&#xf1f3;"
-d="M126 384c8 0 14 -6 14 -14s-6 -14 -14 -14h-60c-9 0 -18 -4 -26 -12c-7 -8 -12 -17 -12 -26v-60c0 -8 -6 -14 -14 -14s-14 6 -14 14v59c0 37 30 67 67 67h59zM350 384c36 0 66 -30 66 -66v-60c0 -8 -6 -14 -14 -14s-14 6 -14 14v60c0 9 -5 18 -12 26c-8 8 -17 12 -26 12
-h-60c-8 0 -14 6 -14 14s6 14 14 14h60zM126 28c8 0 14 -6 14 -14s-6 -14 -14 -14h-60c-36 0 -66 30 -66 66v60c0 8 6 14 14 14s14 -6 14 -14v-60c0 -9 5 -18 12 -26c8 -8 17 -12 26 -12h60zM402 140c8 0 14 -6 14 -14v-59c0 -37 -30 -67 -67 -67h-59c-8 0 -14 6 -14 14
-s6 14 14 14h60c9 0 18 4 26 12c7 8 12 17 12 26v60c0 8 6 14 14 14z" />
- <glyph glyph-name="ion-md-flashlight" unicode="&#xf16b;" horiz-adv-x="352"
-d="M48 150l1 122h255v-122l-64 -64v-118h-128v118zM155 416h42v-64h-42v64zM0 338l30 30l45 -46l-30 -30zM277 322l45 46l30 -30l-45 -46z" />
- <glyph glyph-name="ion-ios-code" unicode="&#xf157;" horiz-adv-x="384"
-d="M268 305l114 -109c1 -1 2 -2 2 -4s-1 -3 -2 -4l-114 -109c-1 -1 -2 -2 -4 -2s-3 1 -4 2l-14 13c-1 1 -2 2 -2 4s1 3 2 4l96 92l-96 92c-1 1 -2 2 -2 4s1 3 2 4l14 13c1 1 3 2 4 2s3 -1 4 -2zM140 288c0 -2 -1 -3 -2 -4l-96 -92l96 -92c1 -1 2 -2 2 -4s-1 -3 -2 -4
-l-14 -13c-1 -1 -2 -2 -4 -2c-1 0 -3 1 -4 2l-114 109c-1 1 -2 2 -2 4s1 3 2 4l114 109c1 1 3 2 4 2s3 -1 4 -2l14 -13c1 -1 2 -2 2 -4z" />
- <glyph glyph-name="ion-md-bowtie" unicode="&#xf2a1;" horiz-adv-x="448"
-d="M244 144h-40c-15 0 -28 13 -28 28v40c0 15 13 28 28 28h40c15 0 28 -13 28 -28v-40c0 -15 -13 -28 -28 -28zM144 168c0 -18 8 -35 22 -45c-6 -27 -102 -91 -134 -91c-18 0 -32 14 -32 32v256c0 18 14 32 32 32c32 0 128 -64 134 -91c-14 -10 -22 -27 -22 -45v-48z
-M416 352c18 0 32 -14 32 -32v-256c0 -18 -14 -32 -32 -32c-32 0 -128 64 -134 91c14 10 22 27 22 45v48c0 18 -8 35 -22 45c6 27 102 91 134 91z" />
- <glyph glyph-name="ion-md-infinite" unicode="&#xf310;"
-d="M387 260c19 -18 29 -42 29 -68s-11 -50 -30 -68s-43 -28 -70 -28c-26 0 -51 10 -70 28l-38 36l-38 -36c-19 -18 -43 -28 -70 -28s-52 10 -71 28s-29 42 -29 68s10 50 29 68s44 28 71 28c26 0 51 -10 70 -28l108 -104c10 -10 24 -15 38 -15s28 5 38 15s15 22 15 36
-s-5 26 -15 36s-24 15 -38 15s-28 -5 -38 -15v0l-17 -16l-33 32l18 16c19 18 43 28 70 28s52 -10 71 -28zM138 156l37 36l-37 36c-10 10 -24 15 -38 15s-28 -5 -38 -15s-15 -22 -15 -36s5 -26 15 -36s24 -15 38 -15s28 5 38 15z" />
- <glyph glyph-name="ion-md-volume-off" unicode="&#xf3a2;" horiz-adv-x="384"
-d="M342 192c0 69 -45 128 -107 147v45c85 -20 149 -99 149 -192c0 -35 -8 -68 -24 -96l-32 32c9 19 14 41 14 64zM192 368v-104l-51 51zM357 51v0l24 -24l-24 -24l-40 40c-23 -21 -51 -36 -82 -43v45c19 6 37 15 52 28l-95 95v-152l-107 112h-85v128h85l9 10l-91 91l24 24z
-M288 192c0 -7 0 -15 -2 -22l-51 51v60c32 -16 53 -51 53 -89z" />
- <glyph glyph-name="ion-ios-flag" unicode="&#xf42d;" horiz-adv-x="320"
-d="M311 367c5 1 9 -3 9 -8v-191c0 -4 -3 -7 -7 -8c0 0 -37 -7 -72 -7s-57 6 -83 12s-51 15 -77 15c-21 0 -37 -2 -47 -4c-4 -1 -6 -4 -6 -8v-154c0 -8 -8 -15 -16 -14c-7 1 -12 7 -12 14v354l4 3c2 1 21 13 77 13c28 0 55 -5 81 -11c25 -5 50 -12 78 -12c18 0 48 3 61 5
-c4 0 7 1 10 1z" />
- <glyph glyph-name="ion-md-cloud-download" unicode="&#xf2c6;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM208 180h-68l100 -100l100 100h-68v76h-64v-76z" />
- <glyph glyph-name="ion-md-git-compare" unicode="&#xf2fc;" horiz-adv-x="448"
-d="M160 66v62l96 -96l-96 -96v64h-22c-39 0 -64 11 -84 36c-18 23 -22 48 -22 94v167c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64c0 -24 -13 -44 -32 -55v-167c0 -35 2 -47 8 -54c5 -6 9 -10 34 -10h22zM64 392c-22 0 -40 -18 -40 -40s18 -40 40 -40s40 18 40 40
-s-18 40 -40 40zM416 87c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v170c0 35 -2 47 -8 54c-5 6 -9 9 -34 9h-22v-64l-96 96l96 96v-62h22c39 0 64 -10 84 -35c18 -23 22 -48 22 -94v-170zM384 -8c22 0 40 18 40 40s-18 40 -40 40
-s-40 -18 -40 -40s18 -40 40 -40z" />
- <glyph glyph-name="ion-ios-mic" unicode="&#xf461;" horiz-adv-x="220"
-d="M110 112c-35 0 -64 29 -64 64v160c0 35 29 64 64 64v0c35 0 64 -29 64 -64v-160c0 -35 -29 -64 -64 -64v0zM206 256c8 0 14 -6 14 -14v-69c0 -56 -42 -102 -96 -109v-52h36c8 0 14 -6 14 -14s-6 -14 -14 -14h-100c-8 0 -14 6 -14 14s6 14 14 14h36v52
-c-54 7 -96 53 -96 109v69c0 8 6 14 14 14s14 -6 14 -14v-69c0 -45 37 -82 82 -82s82 37 82 82v69c0 8 6 14 14 14z" />
- <glyph glyph-name="ion-md-transgender" unicode="&#xf397;" horiz-adv-x="448"
-d="M320 416h128v-128h-35v69l-88 -88c7 -15 11 -31 11 -49c0 -55 -40 -100 -91 -110v-46h63v-40h-63v-56h-42v56h-63v40h63v46c-52 10 -91 55 -91 110c0 18 4 34 11 49l-19 19l-31 -31l-29 29l31 31l-40 40v-69h-35v128h128v-35h-63l37 -37l32 32l28 -29l-31 -31l15 -15
-c20 19 48 31 78 31c24 0 46 -7 64 -20c0 0 6 -5 14 -12l81 81h-63v35zM224 158c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64z" />
- <glyph glyph-name="ion-md-headset" unicode="&#xf306;" horiz-adv-x="384"
-d="M192 400c106 0 192 -88 192 -197v-153c0 -36 -29 -66 -64 -66h-64v176h85v43c0 85 -67 153 -149 153s-149 -68 -149 -153v-43h85v-176h-64c-35 0 -64 30 -64 66v153c0 109 86 197 192 197z" />
- <glyph glyph-name="ion-md-arrow-down" unicode="&#xf27e;" horiz-adv-x="342"
-d="M192 363v-260l120 120l30 -31l-171 -171l-171 171l30 30l120 -119v260h42z" />
- <glyph glyph-name="ion-ios-partly-sunny" unicode="&#xf1df;" horiz-adv-x="480"
-d="M152 384c9 0 16 -7 16 -16v-30c0 -9 -7 -16 -16 -16v0c-9 0 -16 7 -16 16v30c0 9 7 16 16 16v0zM63 232c0 -9 -7 -16 -16 -16h-31c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h31c9 0 16 -7 16 -16v0zM64 299l-21 21c-6 6 -6 16 0 22c3 3 8 4 12 4v0c4 0 8 -1 11 -4l20 -21
-c6 -6 6 -16 0 -22c-3 -3 -7 -5 -11 -5s-8 2 -11 5zM255 343c6 -6 6 -16 0 -22l-20 -21c-3 -3 -7 -4 -11 -4s-8 1 -11 4v0h-1c-6 6 -6 16 0 22l21 21c3 3 7 5 11 5v0c4 0 8 -2 11 -5zM77 175c4 0 8 -2 11 -5c6 -6 6 -16 0 -22l-20 -21c-3 -3 -7 -5 -11 -5s-9 2 -12 5
-c-6 6 -6 17 0 23l21 20c3 3 7 5 11 5v0zM387 189c51 0 93 -43 93 -94s-42 -95 -93 -95h-226c-41 0 -74 36 -74 77c0 39 29 73 67 76v1v10v6c2 39 24 74 56 92c5 3 10 5 15 7c13 5 26 8 41 8c54 0 99 -39 110 -89c3 0 6 1 9 1h2zM135 164c-34 7 -59 36 -59 72
-c0 40 33 74 73 74c23 0 45 -11 58 -28h-1c-5 -2 -9 -5 -14 -8c-33 -19 -56 -53 -58 -93v-6c0 -3 1 -7 1 -10v-1z" />
- <glyph glyph-name="ion-md-cloudy-night" unicode="&#xf2ca;" horiz-adv-x="448"
-d="M91 265h2h-2zM310 145c42 -3 74 -38 74 -81c0 -44 -36 -80 -80 -80h-208c-53 0 -96 44 -96 97c0 47 32 86 78 95c5 1 13 1 18 1c43 0 78 -26 91 -64h28c-6 21 -16 40 -32 56c-21 21 -48 32 -77 34c21 27 52 39 86 39c58 0 107 -41 118 -97zM80 223l-13 -17v0v5
-c0 92 63 168 148 189c-9 -21 -14 -45 -14 -70c0 -20 3 -39 9 -57c-6 1 -12 1 -18 1c-22 0 -43 -4 -61 -12c-20 -9 -37 -22 -51 -39zM386 141c-3 3 -6 7 -10 10h3c24 0 48 5 69 14c-7 -27 -19 -53 -35 -74c-4 19 -14 36 -27 50z" />
- <glyph glyph-name="ion-md-nutrition" unicode="&#xf33a;"
-d="M309 212c8 -8 13 -19 13 -31c0 -14 -6 -28 -17 -36l-233 -168c-9 -6 -19 -9 -28 -9c-25 0 -44 20 -44 44c0 8 2 15 5 21v1l158 255v0c8 10 21 16 35 16c10 0 20 -4 28 -10h1zM416 303l-109 -56l-42 41l68 128l49 -28l-32 -56l37 20z" />
- <glyph glyph-name="ion-ios-options" unicode="&#xf1d9;"
-d="M251 72c6 14 21 24 37 24s31 -10 37 -24h75c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16h-75c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-235c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h235zM91 208c6 14 21 24 37 24s31 -10 37 -24h235c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16
-h-235c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-75c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h75zM251 344c6 14 21 24 37 24s31 -10 37 -24h75c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16h-75c-6 -14 -21 -24 -37 -24s-31 10 -37 24h-235c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h235z
-" />
- <glyph glyph-name="ion-md-log-out" unicode="&#xf31f;"
-d="M144 171v42h190l-45 45l31 30l96 -96l-96 -96l-30 30l44 45h-190zM208 27c44 0 85 17 116 48l30 -30c-8 -8 -17 -16 -27 -23c-35 -24 -76 -38 -119 -38c-114 0 -208 93 -208 208s94 208 208 208c43 0 84 -13 119 -37c10 -7 19 -16 27 -24l-30 -30c-31 31 -72 48 -116 48
-s-86 -17 -117 -48s-48 -73 -48 -117s17 -86 48 -117s73 -48 117 -48zM401 192l-1 1l-1 -1l1 -1z" />
- <glyph glyph-name="ion-md-appstore" unicode="&#xf27b;"
-d="M416 296c-19 -214 -13 -312 -13 -312h-390s6 96 -13 312h104c0 57 47 104 104 104s104 -47 104 -104h104zM208 374c-43 0 -78 -35 -78 -78h156c0 43 -35 78 -78 78zM156 50l143 85l-143 84v-169z" />
- <glyph glyph-name="ion-md-cellular" unicode="&#xf164;" horiz-adv-x="384"
-d="M0 0l384 384v-384h-384z" />
- <glyph glyph-name="ion-ios-beer" unicode="&#xf126;" horiz-adv-x="384"
-d="M48 286v-96h-26c-9 0 -17 8 -17 17c0 16 11 22 11 35v51c0 19 -16 12 -16 41v4c0 26 25 43 50 43c10 0 18 -1 23 -2c6 -1 12 1 16 6c9 10 22 17 36 17c9 0 19 -2 26 -7c6 -4 13 -2 17 3c10 11 23 18 44 18c24 0 47 -16 56 -39c2 -5 7 -9 13 -9h1c21 0 38 -17 38 -38v-22
-c0 -2 -3 -4 -5 -2v0c-4 3 -8 4 -13 4h-230c-13 0 -24 -11 -24 -24zM322 -4c8 0 14 -6 14 -14s-6 -14 -14 -14h-276c-8 0 -14 6 -14 14s6 14 14 14h276zM336 254c26 0 48 -22 48 -48v-96c0 -26 -22 -48 -48 -48h-32c0 -12 2 -18 5 -30c1 -6 0 -12 -5 -16c-3 -3 -7 -4 -11 -4
-h-214c-6 0 -12 3 -15 8c-3 4 -4 9 -3 14v0c2 12 3 18 3 30v214c0 9 7 16 16 16h208c9 0 16 -7 16 -16v-24h32zM356 110v96c0 11 -9 20 -20 20h-32v-136h32c11 0 20 9 20 20z" />
- <glyph glyph-name="ion-ios-snow" unicode="&#xf218;" horiz-adv-x="384"
-d="M377 102c7 -4 9 -13 5 -20c-3 -5 -8 -8 -13 -8c-3 0 -6 1 -8 2l-32 19c-4 -16 -2 -32 -2 -32c1 -8 -4 -15 -12 -17c-1 0 -2 -1 -3 -1c-7 0 -13 6 -14 13c0 1 -4 26 6 52l-96 56v-99c27 -5 46 -20 47 -21c3 -2 6 -6 6 -10s-1 -8 -4 -11s-7 -5 -11 -5c-3 0 -7 1 -10 3
-c0 0 -12 10 -28 14v-38c0 -8 -8 -15 -16 -15s-15 7 -15 15v38c-16 -4 -29 -14 -29 -14c-3 -2 -7 -3 -10 -3c-4 0 -8 2 -11 5s-4 7 -4 11s3 8 6 10c1 1 21 16 48 21v99l-96 -56c10 -26 6 -51 6 -52c-1 -7 -7 -13 -14 -13c-1 0 -2 1 -3 1c-8 2 -13 9 -12 17c0 0 2 16 -3 32
-l-32 -19c-2 -1 -5 -2 -8 -2c-5 0 -10 3 -13 8c-4 7 -2 16 5 20l33 19c-12 12 -26 19 -26 19c-8 3 -11 11 -9 19c2 6 7 9 13 9c2 0 4 0 6 -1c1 0 24 -10 42 -31l96 56l-96 56c-18 -21 -41 -31 -42 -31c-2 -1 -4 -1 -6 -1c-6 0 -11 4 -13 10c-2 8 1 16 9 19c0 0 14 6 26 18
-l-33 19c-7 4 -9 13 -5 20c3 5 8 8 13 8c3 0 6 -1 8 -2l32 -19c5 16 3 32 3 32c-1 8 4 16 12 18h3c7 0 13 -6 14 -13c0 -1 4 -26 -6 -52l96 -56v100c-27 5 -47 19 -48 20c-3 2 -6 6 -6 10s1 8 4 11s7 5 11 5s7 -1 10 -3c0 0 13 -10 29 -14v38c0 8 7 15 15 15s16 -7 16 -15
-v-38c16 4 28 14 28 14c3 2 7 3 10 3c4 0 8 -2 11 -5s4 -7 4 -11s-3 -8 -6 -10c-1 -1 -20 -16 -47 -21v-99l96 56c-10 26 -7 51 -7 52c1 7 8 13 15 13c1 0 2 -1 3 -1c8 -2 13 -9 12 -17c0 -1 -2 -16 2 -32l32 19c2 1 5 2 8 2c5 0 10 -3 13 -8c4 -7 2 -16 -5 -20l-33 -19
-c12 -12 26 -19 26 -19c8 -3 11 -11 9 -19c-2 -6 -7 -9 -13 -9c-2 0 -4 0 -6 1c-1 0 -24 10 -42 31l-96 -56l96 -56c18 21 41 31 42 31c2 1 4 1 6 1c6 0 11 -4 13 -10c2 -8 -1 -16 -9 -19c0 0 -14 -6 -26 -18z" />
- <glyph glyph-name="ion-ios-happy" unicode="&#xf192;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM280 248c-13 0 -24 -11 -24 -24s11 -24 24 -24s24 11 24 24s-11 24 -24 24zM136 248c-13 0 -24 -11 -24 -24s11 -24 24 -24s24 11 24 24s-11 24 -24 24zM208 79c45 0 82 30 94 71
-c2 5 -3 10 -8 10h-172c-5 0 -10 -5 -8 -10c12 -41 49 -71 94 -71z" />
- <glyph glyph-name="ion-md-wallet" unicode="&#xf18f;"
-d="M155 107c0 -24 18 -43 42 -43h197v-21c0 -24 -18 -43 -42 -43h-308c-24 0 -44 18 -44 42v300c0 24 20 42 44 42h308c23 0 42 -19 42 -43v-21h-197c-24 0 -42 -19 -42 -43v-170zM197 262c0 9 7 16 16 16h187c9 0 16 -7 16 -16v-140c0 -9 -7 -16 -16 -16h-187
-c-9 0 -16 7 -16 16v140zM274 160c16 1 29 14 30 30c1 19 -15 35 -34 34c-16 -1 -29 -14 -30 -30c-1 -19 15 -35 34 -34z" />
- <glyph glyph-name="ion-md-funnel" unicode="&#xf2f7;" horiz-adv-x="448"
-d="M176 48v48h96v-48h-96zM0 336h448v-48h-448v48zM80 167v50h288v-50h-288z" />
- <glyph glyph-name="ion-ios-refresh-circle" unicode="&#xf135;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 64c67 0 123 51 128 117c0 6 -4 11 -10 11v0c-5 0 -10 -4 -10 -9c-4 -55 -51 -98 -107 -99c-59 -1 -108 47 -109 106c-1 60 48 110 108 110v-42c0 -6 7 -10 12 -7l73 47
-c5 3 5 10 0 13l-73 53c-5 4 -12 -1 -12 -7v-37c-71 0 -128 -57 -128 -128s57 -128 128 -128z" />
- <glyph glyph-name="ion-ios-watch" unicode="&#xf269;"
-d="M392 287c16 -25 24 -53 24 -82v-41c0 -21 -4 -40 -12 -58c-8 -17 -19 -33 -33 -46c-28 -25 -66 -39 -108 -39c-41 0 -54 8 -65 14c-7 4 -13 6 -27 7c-38 2 -69 16 -94 40c-3 2 -4 5 -4 9c0 3 2 7 4 9c2 3 5 4 9 4c3 0 8 -1 10 -3c20 -19 45 -30 77 -32
-c20 -1 29 -6 37 -11c9 -5 19 -10 53 -10c35 0 67 12 90 32c12 10 21 22 27 36c7 15 10 31 10 48v41c0 24 -7 48 -20 68c-12 20 -30 35 -51 46c-3 2 -6 5 -7 8s-1 7 1 10c2 4 7 7 12 7c2 0 4 0 6 -1c25 -13 46 -32 61 -56zM236 65c-6 1 -11 6 -11 13v2c1 6 7 11 13 11h2
-c7 -1 14 -2 21 -2c26 0 48 9 65 25c2 2 6 4 9 4c4 0 7 -2 9 -5c5 -5 5 -13 0 -18c-11 -10 -24 -19 -38 -24s-29 -8 -45 -8c-8 0 -16 1 -25 2zM238 86v0v0v0zM175 26c7 0 13 -6 13 -13s-6 -13 -13 -13c-46 0 -86 16 -121 47s-54 73 -54 114v44c0 29 8 57 24 82
-c15 24 36 43 61 56c2 1 4 1 6 1c5 0 10 -3 12 -7c2 -3 2 -7 1 -10s-4 -6 -7 -8c-21 -11 -39 -26 -51 -46c-13 -20 -20 -44 -20 -68v-44c0 -34 17 -68 46 -94c30 -27 63 -41 103 -41zM300 333c-1 -14 11 -26 25 -26v0c2 0 3 -3 1 -4c-8 -7 -18 -10 -29 -10h-178
-c-11 0 -21 3 -29 9c-1 1 0 3 0 4v0c0 1 1 1 2 1c13 1 24 12 23 26c-1 12 -11 22 -23 23c-4 0 -7 -1 -10 -2s-5 2 -4 4c8 16 23 26 41 26h178c11 0 22 -4 30 -11c5 -4 8 -9 11 -15c1 -2 0 -5 -3 -4c-4 2 -8 2 -12 2c-12 -1 -22 -11 -23 -23zM279 343c-2 8 -9 15 -17 17
-c-16 4 -31 -10 -27 -26c2 -8 9 -15 17 -17c16 -4 31 10 27 26z" />
- <glyph glyph-name="ion-ios-reorder" unicode="&#xf1fd;" horiz-adv-x="352"
-d="M0 128v16h352v-16h-352zM0 184v16h352v-16h-352zM0 240v16h352v-16h-352z" />
- <glyph glyph-name="ion-ios-volume-high" unicode="&#xf11c;" horiz-adv-x="383"
-d="M151 302c6 -3 9 -8 9 -14v-192c0 -6 -3 -11 -9 -14c-2 -1 -5 -2 -7 -2c-4 0 -7 2 -10 4l-65 52h-53c-9 0 -16 7 -16 16v80c0 9 7 16 16 16h53l65 53c3 2 6 3 10 3c2 0 5 -1 7 -2zM383 192v0v0c0 -59 -23 -114 -65 -156c-2 -2 -6 -4 -9 -4s-6 2 -8 4c-5 5 -5 12 0 17
-c38 37 58 86 58 139v0v0c0 53 -20 102 -58 139c-5 5 -5 12 0 17s12 5 17 0c42 -42 65 -97 65 -156zM320 192v0c0 -44 -16 -84 -46 -115c-2 -2 -6 -4 -9 -4s-6 2 -8 4c-5 5 -6 12 -1 17c26 26 40 61 40 98v0v0c0 37 -14 72 -40 98c-5 5 -4 12 1 17s12 5 17 0
-c30 -31 46 -71 46 -115v0zM223 266c19 -20 30 -46 30 -74v0v0c0 -28 -11 -54 -30 -74c-2 -2 -6 -3 -9 -3s-6 1 -8 3c-5 5 -5 12 0 17c15 15 23 36 23 57v0v0c0 22 -8 42 -23 57c-5 5 -5 12 0 17s12 5 17 0z" />
- <glyph glyph-name="ion-ios-contrast" unicode="&#xf163;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM335 65c34 34 53 79 53 127s-19 93 -53 127s-79 53 -127 53v-360c48 0 93 19 127 53z" />
- <glyph glyph-name="ion-ios-today" unicode="&#xf14f;" horiz-adv-x="384"
-d="M324 416c33 0 60 -27 60 -60v-328c0 -33 -27 -60 -60 -60h-264c-33 0 -60 27 -60 60v328c0 33 27 60 60 60h264zM356 28v328c0 18 -14 32 -32 32h-264c-18 0 -32 -14 -32 -32v-328c0 -18 14 -32 32 -32h264c18 0 32 14 32 32zM296 272c13 0 24 -11 24 -24v-192
-c0 -13 -11 -24 -24 -24h-208c-13 0 -24 11 -24 24v192c0 13 11 24 24 24h208zM78 324c-8 0 -14 6 -14 14s6 14 14 14h100c8 0 14 -6 14 -14s-6 -14 -14 -14h-100z" />
- <glyph glyph-name="ion-ios-mic-off" unicode="&#xf45f;" horiz-adv-x="256"
-d="M242 -16c-5 0 -9 3 -12 7l-228 388c-4 7 -2 15 5 19s16 2 20 -5l227 -388c4 -7 2 -15 -5 -19c-2 -1 -5 -2 -7 -2zM192 176c0 -9 -2 -17 -5 -25l-120 205c8 26 33 44 61 44v0c35 0 64 -29 64 -64v-160zM64 176v65l75 -128c-4 -1 -7 -1 -11 -1v0c-35 0 -64 29 -64 64z
-M238 173c0 -26 -9 -49 -24 -68l-15 26c7 12 11 27 11 42v69c0 8 6 14 14 14s14 -6 14 -14v-69zM128 91c8 0 15 1 22 3l15 -25c-7 -3 -15 -4 -23 -5v-52h36c8 0 14 -6 14 -14s-6 -14 -14 -14h-100c-8 0 -14 6 -14 14s6 14 14 14h36v52c-54 7 -96 53 -96 109v69
-c0 8 6 14 14 14s14 -6 14 -14v-69c0 -45 37 -82 82 -82z" />
- <glyph glyph-name="ion-ios-medkit" unicode="&#xf45e;"
-d="M384 320c18 0 32 -14 32 -32v-256c0 -18 -14 -32 -32 -32h-352c-18 0 -32 14 -32 32v256c0 18 14 32 32 32h84v32c0 18 14 32 32 32h120c18 0 32 -14 32 -32v-32h84zM144 348v-28h128v28c0 4 -4 8 -8 8h-112c-4 0 -8 -4 -8 -8zM272 144c9 0 16 7 16 16s-7 16 -16 16h-32
-h-16v16v32c0 9 -7 16 -16 16s-16 -7 -16 -16v-32v-16h-16h-32c-9 0 -16 -7 -16 -16s7 -16 16 -16h32h16v-16v-32c0 -9 7 -16 16 -16s16 7 16 16v32v16h16h32z" />
- <glyph glyph-name="ion-ios-arrow-round-down" unicode="&#xf118;" horiz-adv-x="192"
-d="M188 152c5 -5 5 -13 0 -18l-83 -82c-2 -2 -6 -4 -9 -4c-2 0 -3 0 -5 1s-3 2 -4 3v0l-83 82c-5 5 -5 13 0 18s13 6 18 1l61 -61v231c0 7 6 13 13 13s13 -6 13 -13v-231l61 60c5 5 13 5 18 0z" />
- <glyph glyph-name="ion-md-link" unicode="&#xf22e;" horiz-adv-x="448"
-d="M43 192c0 -38 31 -69 69 -69h88v-43h-88c-62 0 -112 50 -112 112s50 112 112 112h88v-43h-88c-38 0 -69 -31 -69 -69zM128 170v44h192v-44h-192zM336 304c62 0 112 -50 112 -112s-50 -112 -112 -112h-88v43h88c38 0 69 31 69 69s-31 69 -69 69h-88v43h88z" />
- <glyph glyph-name="ion-ios-chatbubbles" unicode="&#xf146;"
-d="M383 127l16 -58s1 -2 1 -3c0 -4 -4 -8 -8 -8c-2 0 -4 1 -4 1l-57 21c-3 1 -6 2 -10 2c-3 0 -6 -1 -9 -2s-15 -5 -26 -8s-32 -8 -47 -8c-96 0 -171 77 -171 169c0 12 2 23 4 34c16 76 86 133 170 133c96 0 174 -75 174 -167c0 -33 -11 -64 -28 -90c-1 -1 -1 -2 -2 -3
-c-2 -4 -3 -9 -3 -13zM270 56c4 1 9 2 13 3c-4 -5 -7 -9 -7 -9c-30 -35 -73 -56 -120 -56c-21 0 -42 5 -61 12c-4 2 -6 2 -6 2c-2 0 -4 0 -6 -1l-56 -22c-1 0 -2 -1 -3 -1c-2 0 -3 1 -5 2c-2 2 -4 5 -3 8c0 0 12 60 12 62s-1 4 -3 8c-16 24 -25 53 -25 82c0 42 19 82 52 111
-l8 7c-1 -4 -3 -9 -4 -13s-1 -9 -2 -13c-1 -6 -2 -14 -2 -21c0 -92 75 -169 171 -169c10 0 24 2 34 4c5 1 9 3 13 4z" />
- <glyph glyph-name="ion-ios-beaker" unicode="&#xf124;" horiz-adv-x="384"
-d="M381 400c2 0 3 -1 3 -2s-2 -4 -3 -6s-12 -15 -14 -33v-310c0 -35 -28 -65 -63 -65h-208c-35 0 -64 29 -64 64v276c0 32 -2 32 -32 36c0 12 10 40 64 40h270h47zM48 371c12 -13 12 -29 12 -47v-36h279v0v71v3c0 3 1 6 2 10h-7h-270c-4 0 -10 0 -16 -1v0z" />
- <glyph glyph-name="ion-ios-git-branch" unicode="&#xf183;" horiz-adv-x="332"
-d="M262 352c39 0 70 -31 70 -70c0 -34 -24 -63 -56 -69c-1 -28 -14 -46 -38 -64c-25 -19 -56 -25 -78 -29c-27 -5 -42 -14 -51 -24c19 -13 31 -35 31 -58c0 -39 -31 -70 -70 -70s-70 31 -70 70c0 17 6 33 17 46c10 11 24 19 38 22v172c-15 3 -28 11 -38 22
-c-11 13 -17 29 -17 46c0 39 31 70 70 70s70 -31 70 -70c0 -17 -6 -34 -18 -47c-10 -11 -24 -19 -39 -22v-169c10 13 32 33 73 40c19 3 45 7 65 23c17 13 26 24 27 43c-32 7 -56 35 -56 68c0 39 31 70 70 70zM28 346c0 -23 19 -42 42 -42s42 19 42 42s-19 42 -42 42
-s-42 -19 -42 -42zM112 38c0 23 -19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42s42 19 42 42zM262 240c23 0 42 19 42 42s-19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42z" />
- <glyph glyph-name="ion-logo-google" unicode="&#xf23a;" horiz-adv-x="408"
-d="M406 224c0 -1 2 -14 2 -37c0 -54 -18 -106 -54 -144s-87 -59 -141 -59c-59 0 -116 22 -156 64c-38 39 -57 92 -57 144s20 108 59 147c40 39 94 61 150 61v0c73 0 120 -38 137 -53l-58 -58c-10 9 -38 30 -77 30c-34 0 -68 -12 -90 -35c-23 -23 -39 -58 -39 -92
-c0 -35 15 -69 39 -92c23 -22 58 -36 91 -36c46 0 102 30 114 87h-116v82h194z" />
- <glyph glyph-name="ion-ios-recording" unicode="&#xf497;" horiz-adv-x="480"
-d="M370 302c61 0 110 -49 110 -110s-49 -110 -110 -110h-260c-61 0 -110 49 -110 110s49 110 110 110v0v0c61 0 110 -49 110 -110c0 -30 -12 -58 -32 -78h105c-20 20 -33 48 -33 78c0 61 49 110 110 110v0v0zM448 192c0 43 -35 78 -78 78s-78 -35 -78 -78s35 -78 78 -78
-s78 35 78 78zM110 114c43 0 78 35 78 78s-35 78 -78 78s-78 -35 -78 -78s35 -78 78 -78z" />
- <glyph glyph-name="ion-md-checkmark-circle" unicode="&#xf2bb;"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM165 81l192 192l-29 30l-163 -162l-76 77l-30 -30z" />
- <glyph glyph-name="ion-ios-checkbox-outline" unicode="&#xf147;" horiz-adv-x="384"
-d="M352 384c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h320zM356 36v312c0 4 -4 8 -8 8h-312c-4 0 -8 -4 -8 -8v-312c0 -4 4 -8 8 -8h312c4 0 8 4 8 8zM300 255c2 -2 1 -4 0 -6l-134 -134v0c-2 -2 -7 -5 -12 -5
-c-4 0 -7 1 -11 5l-56 56c-2 2 -2 4 0 6l17 18c1 1 2 1 3 1s2 0 3 -1l44 -45l122 123c1 1 2 1 3 1v0c1 0 2 0 3 -1z" />
- <glyph glyph-name="ion-ios-arrow-round-up" unicode="&#xf11a;" horiz-adv-x="192"
-d="M188 232c-5 -5 -13 -5 -18 0l-61 60v-231c0 -7 -6 -13 -13 -13s-13 6 -13 13v231l-61 -61c-5 -5 -13 -4 -18 1s-5 13 0 18l83 82v0c1 1 2 2 4 3s3 1 5 1c3 0 7 -2 9 -4l83 -82c5 -5 5 -13 0 -18z" />
- <glyph glyph-name="ion-ios-home" unicode="&#xf448;"
-d="M211 344l156 -125c1 -1 1 -2 1 -3v-230c0 -1 -1 -2 -2 -2h-108c-1 0 -2 1 -2 2v140c0 1 -1 2 -2 2h-92c-1 0 -2 -1 -2 -2v-140c0 -1 -1 -2 -2 -2h-108c-1 0 -2 1 -2 2v230c0 1 1 2 2 3l156 125c2 1 3 1 5 0zM411 244c3 -2 5 -6 5 -10s-1 -8 -4 -11s-6 -4 -10 -4
-c-3 0 -7 1 -9 3l-184 147l-1 1l-1 -1l-184 -148c-2 -2 -6 -3 -9 -3c-4 0 -7 1 -10 4s-4 7 -4 11s2 8 5 10l43 35v92c0 1 1 2 2 2h60c1 0 2 -1 2 -2v-42l82 67c4 3 9 5 14 5s10 -2 14 -5z" />
- <glyph glyph-name="ion-ios-paper" unicode="&#xf472;"
-d="M76 368c0 18 12 30 30 30l278 2c18 0 32 -14 32 -32v-353c0 -17 -14 -31 -31 -31h-353c-18 0 -32 14 -32 32v288c0 18 14 32 32 32h16v-290c0 -8 6 -14 14 -14v0c8 0 14 6 14 14v322zM142 336c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h84c8 0 14 6 14 14v0
-c0 8 -6 14 -14 14h-84zM142 176c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h148c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-148zM338 68c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-196c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h196zM338 228c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-196
-c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h196z" />
- <glyph glyph-name="ion-md-cafe" unicode="&#xf2a9;"
-d="M0 0v48h368v-48h-368zM376 384c22 0 40 -18 40 -40v-80c0 -22 -18 -40 -40 -40h-40v-64c0 -44 -36 -80 -80 -80h-144c-44 0 -80 36 -80 80v224h293h11h40zM376 272v64h-40v-64h40z" />
- <glyph glyph-name="ion-md-medical" unicode="&#xf327;" horiz-adv-x="408"
-d="M300 192l108 -62l-48 -84l-108 63v-125h-96v125l-108 -63l-48 84l108 62l-108 62l48 84l108 -63v125h96v-125l108 63l48 -84z" />
- <glyph glyph-name="ion-ios-log-in" unicode="&#xf1b1;" horiz-adv-x="414"
-d="M368 368c25 0 46 -21 46 -46v-260c0 -25 -21 -46 -46 -46h-280c-25 0 -46 21 -46 46c0 8 6 14 14 14s14 -6 14 -14c0 -10 8 -18 18 -18h280c10 0 18 8 18 18v260c0 10 -8 18 -18 18h-280c-10 0 -18 -8 -18 -18c0 -8 -6 -14 -14 -14s-14 6 -14 14c0 25 21 46 46 46h280z
-M175 114l64 64h-225c-8 0 -14 6 -14 14s6 14 14 14h224l-65 64c-6 6 -6 14 0 20c3 3 6 4 10 4s7 -1 10 -4l84 -84c4 -4 7 -10 7 -15s-3 -11 -7 -15l-82 -82c-3 -3 -6 -4 -10 -4s-7 2 -10 4v0c-5 6 -5 15 0 20z" />
- <glyph glyph-name="ion-ios-return-right" unicode="&#xf203;" horiz-adv-x="384"
-d="M378 183c4 -4 6 -10 6 -16s-3 -11 -7 -15l-57 -58c-3 -3 -6 -4 -10 -4s-7 2 -10 4v0c-3 3 -4 6 -4 10s1 7 4 10l40 40h-262c-21 0 -40 8 -55 23s-23 34 -23 55v48c0 8 6 14 14 14s14 -6 14 -14v-48c0 -13 5 -25 15 -35s22 -15 35 -15h261l-41 40v0c-3 3 -4 6 -4 10
-s1 7 4 10s6 4 10 4s7 -1 10 -4z" />
- <glyph glyph-name="ion-logo-bitbucket" unicode="&#xf193;"
-d="M405 384c7 -1 12 -8 11 -16l-18 -113h-256l22 -127h88l16 96h125l-34 -212c-1 -7 -6 -12 -13 -12h-271c-4 0 -9 1 -12 4v0c-3 3 -5 8 -6 12l-57 352v2c0 8 7 14 14 14h389h2z" />
- <glyph glyph-name="ion-ios-man" unicode="&#xf1bb;" horiz-adv-x="228"
-d="M114 341v0v0c-25 0 -46 21 -46 46s21 45 46 45s45 -20 45 -45c0 -12 -4 -24 -13 -32c-8 -9 -20 -14 -32 -14zM79 -48c-14 0 -27 10 -27 30l1 278h-10v-105c0 -9 -3 -15 -6 -18c-4 -4 -9 -7 -15 -7s-12 3 -16 7c-3 3 -6 9 -6 18v122c0 14 5 27 14 38c10 12 24 18 39 18
-h122c15 0 29 -6 39 -18c9 -11 14 -24 14 -38v-122c0 -7 -2 -14 -7 -18c-4 -4 -9 -7 -15 -7s-12 3 -16 7c-5 4 -6 11 -6 18v105h-9v-278c0 -20 -14 -30 -28 -30c-13 0 -26 10 -27 30v0v141h-12v-141v0c-1 -20 -15 -30 -29 -30z" />
- <glyph glyph-name="ion-md-lock" unicode="&#xf31d;" horiz-adv-x="320"
-d="M280 262c22 0 40 -18 40 -40v-200c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v200c0 22 18 40 40 40h20v40c0 55 45 100 100 100s100 -45 100 -100v-40h20zM160 80c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40zM222 262v40c0 34 -28 62 -62 62
-s-62 -28 -62 -62v-40h124z" />
- <glyph glyph-name="ion-ios-flask" unicode="&#xf431;" horiz-adv-x="385"
-d="M374 94c8 -16 11 -32 11 -46c-1 -36 -27 -64 -63 -64h-257c-36 0 -64 28 -65 64c0 14 4 30 12 46l116 194v2v78c0 2 -2 4 -4 4c-7 0 -12 5 -12 12v4c0 7 5 12 12 12h137c7 0 12 -5 12 -12v-4c0 -7 -5 -12 -12 -12c-2 0 -4 -2 -4 -4v-78v-2zM98 160h189c6 0 10 7 7 12
-l-61 102c-3 5 -4 10 -4 16v78v4h-73v-4v-78c0 -6 -1 -11 -4 -16l-61 -102c-3 -5 1 -12 7 -12z" />
- <glyph glyph-name="ion-md-remove-circle" unicode="&#xf367;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171v42h-214v-42h214z" />
- <glyph glyph-name="ion-md-code-download" unicode="&#xf2cc;" horiz-adv-x="448"
-d="M203 288h42v-126l45 45l30 -31l-96 -96l-96 96l30 30l45 -44v126zM158 94l-30 -30l-128 128l128 128l30 -30l-98 -98zM290 94l98 98l-98 98l30 30l128 -128l-128 -128z" />
- <glyph glyph-name="ion-ios-wine" unicode="&#xf26f;" horiz-adv-x="208"
-d="M177 397c9 -25 31 -87 31 -125v-4v-1c0 -19 0 -45 -28 -74c-7 -7 -15 -13 -23 -20c-19 -15 -39 -31 -39 -50v-115c0 -1 1 -2 2 -2h57c8 0 15 -6 15 -14s-7 -14 -15 -14h-146c-8 0 -15 6 -15 14s7 14 15 14h57c1 0 2 1 2 2v115c0 19 -20 35 -39 50c-8 7 -17 13 -23 20
-c-28 29 -28 55 -28 74v1v4c0 38 22 100 31 125c2 6 7 9 13 9h120c6 0 11 -3 13 -9zM176 295v1c-5 26 -15 60 -22 81c0 1 -1 1 -2 1h-96c-1 0 -2 0 -2 -1c-7 -21 -17 -55 -22 -81v-1s1 -1 2 -1h140c1 0 2 1 2 1z" />
- <glyph glyph-name="ion-ios-expand" unicode="&#xf178;" horiz-adv-x="384"
-d="M48 356l117 -117c5 -5 5 -15 0 -20c-3 -3 -6 -4 -10 -4s-7 1 -10 4l-117 117v-78c0 -8 -6 -14 -14 -14v0c-8 0 -14 6 -14 14v112c0 8 6 14 14 14h112c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-78zM370 384c8 0 14 -6 14 -14v-112c0 -8 -6 -14 -14 -14v0
-c-8 0 -14 6 -14 14v78l-117 -117c-3 -3 -6 -4 -10 -4s-7 1 -10 4c-5 5 -5 15 0 20l117 117h-78c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h112zM155 169c4 0 7 -1 10 -4c5 -5 5 -15 0 -20l-117 -117h78c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-112c-8 0 -14 6 -14 14v112
-c0 8 6 14 14 14v0c8 0 14 -6 14 -14v-78l117 117c3 3 6 4 10 4zM370 140c8 0 14 -6 14 -14v-112c0 -8 -6 -14 -14 -14h-112c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h78l-117 117c-5 5 -5 15 0 20c3 3 6 4 10 4s7 -1 10 -4l117 -117v78c0 8 6 14 14 14v0z" />
- <glyph glyph-name="ion-ios-list" unicode="&#xf454;" horiz-adv-x="384"
-d="M0 192c0 15 13 28 28 28s28 -13 28 -28s-13 -28 -28 -28s-28 13 -28 28zM0 316c0 15 13 28 28 28s28 -13 28 -28s-13 -28 -28 -28s-28 13 -28 28zM0 68c0 15 13 28 28 28s28 -13 28 -28s-13 -28 -28 -28s-28 13 -28 28zM368 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-240
-c-9 0 -16 7 -16 16s7 16 16 16h240zM368 84c9 0 16 -7 16 -16s-7 -16 -16 -16h-240c-9 0 -16 7 -16 16s7 16 16 16h240zM128 300c-9 0 -16 7 -16 16s7 16 16 16h240c9 0 16 -7 16 -16s-7 -16 -16 -16h-240z" />
- <glyph glyph-name="ion-md-keypad" unicode="&#xf317;" horiz-adv-x="320"
-d="M160 50c22 0 40 -19 40 -41s-18 -41 -40 -41s-40 19 -40 41s18 41 40 41zM40 416c22 0 41 -19 41 -41s-19 -40 -41 -40s-40 18 -40 40s18 41 40 41zM40 294c22 0 41 -19 41 -41s-19 -41 -41 -41s-40 19 -40 41s18 41 40 41zM40 172c22 0 41 -19 41 -41s-19 -41 -41 -41
-s-40 19 -40 41s18 41 40 41zM280 334c-22 0 -41 19 -41 41s19 41 41 41s40 -19 40 -41s-18 -41 -40 -41zM160 172c22 0 40 -19 40 -41s-18 -41 -40 -41s-40 19 -40 41s18 41 40 41zM280 172c22 0 40 -19 40 -41s-18 -41 -40 -41s-41 19 -41 41s19 41 41 41zM280 294
-c22 0 40 -19 40 -41s-18 -41 -40 -41s-41 19 -41 41s19 41 41 41zM160 294c22 0 40 -19 40 -41s-18 -41 -40 -41s-40 19 -40 41s18 41 40 41zM160 416c22 0 40 -19 40 -41s-18 -40 -40 -40s-40 18 -40 40s18 41 40 41z" />
- <glyph glyph-name="ion-logo-octocat" unicode="&#xf243;" horiz-adv-x="448"
-d="M146 160c8 0 16 -3 22 -12c6 -8 10 -20 10 -32s-4 -23 -10 -31s-14 -13 -22 -13c-9 0 -17 5 -23 13s-9 19 -9 31s3 24 9 32c6 9 14 12 23 12zM303 160c9 0 16 -3 22 -12c6 -8 9 -20 9 -32s-3 -23 -9 -31s-14 -13 -22 -13c-9 0 -17 5 -23 13s-10 19 -10 31s4 24 10 32
-c6 9 14 12 23 12zM414 276c24 -27 34 -66 34 -96c0 -24 0 -46 -6 -65s-13 -35 -21 -47c-9 -12 -20 -23 -32 -32c-13 -9 -24 -17 -34 -21s-22 -7 -36 -9c-13 -2 -24 -4 -31 -4c0 0 -28 -2 -64 -2s-64 2 -64 2c-7 0 -18 2 -31 4c-14 2 -26 5 -36 9s-22 12 -34 21
-c-13 9 -23 20 -32 32c-8 12 -15 28 -21 47c-5 19 -6 41 -6 65c0 31 10 70 34 96c0 0 -2 14 0 39s7 48 16 69c30 -3 67 -20 112 -51c15 4 36 6 62 6c28 0 48 -2 62 -6c20 14 40 25 58 33c19 8 33 13 41 15s13 3 13 3c9 -21 14 -44 16 -69s0 -39 0 -39v0zM348 42
-c28 13 42 40 42 81c0 24 -8 43 -26 59c-9 8 -20 13 -32 15s-31 1 -56 -1s-40 -4 -52 -4s-25 2 -42 3s-30 3 -39 3c-10 0 -20 1 -31 -2s-21 -8 -28 -14c-17 -15 -25 -35 -25 -59c0 -41 13 -68 41 -81c27 -13 69 -18 123 -18h2c54 0 95 5 123 18z" />
- <glyph glyph-name="ion-ios-planet" unicode="&#xf1eb;"
-d="M415 96c2 -6 2 -12 -1 -17c-3 -6 -11 -9 -22 -9c-37 0 -120 32 -208 81c-54 30 -103 64 -137 92c-38 32 -53 54 -45 67c4 7 11 10 23 10c16 0 48 -10 83 -24c3 -1 3 -5 1 -7l-11 -10c-1 -1 -2 -2 -4 -1c-21 8 -46 16 -57 19c-4 1 -6 -3 -4 -6c10 -13 25 -24 39 -35
-c7 -6 15 -11 23 -17c8 21 23 39 41 52c21 15 44 23 70 23c32 0 63 -11 86 -33c24 -23 37 -54 37 -87c0 -26 -9 -51 -25 -72c10 -4 19 -8 28 -11c15 -6 34 -11 44 -13c3 -1 6 3 4 6c-6 8 -26 24 -42 36c-2 1 -3 4 -2 6l5 13c1 3 4 4 7 2c24 -18 45 -35 55 -47
-c6 -7 10 -12 12 -18zM264 94c2 -1 4 -3 4 -5s-1 -4 -3 -5c-20 -13 -42 -20 -66 -20c-32 0 -63 12 -86 35s-36 53 -36 85c0 1 1 3 1 4c0 2 1 4 3 5c1 0 2 1 3 1s2 -1 3 -2c25 -17 54 -36 84 -53c33 -19 64 -32 93 -45z" />
- <glyph glyph-name="ion-logo-usd" unicode="&#xf2b1;" horiz-adv-x="320"
-d="M315 145c3 -10 5 -19 5 -29c0 -21 -5 -38 -14 -53s-20 -26 -35 -35s-31 -17 -50 -21c-10 -2 -19 -3 -29 -4v-35h-64v35c-9 1 -19 4 -28 6c-20 5 -36 12 -51 23s-26 24 -35 41c-8 16 -13 34 -14 55h69c0 -12 2 -24 7 -33c5 -10 12 -17 21 -23s20 -11 31 -14v120
-c-8 2 -18 4 -27 6c-17 4 -30 9 -41 16s-20 15 -27 23s-11 17 -14 26s-4 18 -4 28c0 18 4 34 12 48s19 25 33 34s29 16 46 20c7 2 15 3 22 4v33h64v-33c9 -1 16 -4 24 -6c18 -5 34 -12 48 -22s25 -22 33 -37c7 -13 11 -28 12 -46h-69c-3 21 -12 37 -26 46c-7 4 -13 8 -22 10
-v-106c9 -2 16 -4 25 -6c12 -3 22 -6 27 -7c13 -4 23 -9 33 -15c10 -7 18 -14 24 -22s11 -17 14 -27zM128 238v92c-7 -2 -15 -4 -21 -7c-7 -4 -12 -9 -17 -15s-7 -14 -7 -23c0 -13 4 -24 13 -31c8 -7 20 -12 32 -16zM247 89c3 7 4 13 4 20c0 14 -3 24 -10 31s-15 11 -23 14
-s-16 5 -26 8v-107c6 1 10 2 14 3c11 3 20 8 27 13s11 11 14 18z" />
- <glyph glyph-name="ion-ios-bulb" unicode="&#xf138;" horiz-adv-x="296"
-d="M296 259c0 -31 -13 -56 -30 -80v0c-11 -15 -22 -18 -32 -35c-14 -24 -17 -41 -18 -56c0 -8 -8 -15 -16 -15h-10c-2 0 -4 2 -4 4v94c0 5 1 11 3 15l22 42c3 7 -1 15 -9 15v0c-4 0 -7 -3 -9 -6l-26 -51c-2 -4 -3 -9 -3 -14v-95c0 -2 -2 -4 -4 -4h-24c-2 0 -4 2 -4 4v95
-c0 5 -1 10 -3 14l-26 51c-2 4 -5 6 -9 6v0c-8 0 -13 -8 -9 -15l21 -42c2 -4 3 -9 3 -14v-95c0 -2 -2 -4 -4 -4h-9c-8 0 -16 6 -16 15c-1 15 -4 31 -19 56c-10 17 -20 20 -31 35v0c-17 24 -30 49 -30 80c0 78 70 141 148 141s148 -63 148 -141zM130 -16c-8 0 -14 6 -14 14v0
-c0 8 6 14 14 14h36c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-36zM110 28c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h76c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-76z" />
- <glyph glyph-name="ion-md-map" unicode="&#xf325;" horiz-adv-x="384"
-d="M373 384c6 0 11 -5 11 -11v-322c0 -5 -3 -9 -7 -10l-121 -41l-128 45s-105 -41 -108 -42s-7 -3 -9 -3c-6 0 -11 5 -11 11v322c0 5 3 9 7 10l121 41l128 -45s103 40 108 42s7 3 9 3zM256 43v254l-128 44v-254z" />
- <glyph glyph-name="ion-md-time" unicode="&#xf394;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM218 296v-109l94 -56l-16 -25l-109 65v125h31z" />
- <glyph glyph-name="ion-logo-ionitron" unicode="&#xf151;" horiz-adv-x="426"
-d="M425 179c3 -34 -4 -63 -19 -65h-7c-18 -79 -87 -141 -172 -146c-71 -4 -134 33 -169 89l-16 -3c-17 -2 -36 26 -41 64s5 71 22 73l12 1c17 80 86 142 172 147c77 4 145 -38 177 -103c11 -22 16 -46 17 -72c4 24 -2 57 -8 72c21 2 29 -23 32 -57zM47 184
-c9 -13 18 -34 21 -58c3 -25 1 -46 -5 -61c9 10 17 36 13 64c-4 27 -18 47 -29 55zM231 68c8 0 15 8 15 16s-9 14 -17 14c-9 0 -14 -8 -14 -16s8 -14 16 -14zM312 72c8 0 15 9 15 17s-9 14 -17 14c-9 0 -14 -8 -14 -16s8 -15 16 -15zM123 378h-1c-1 1 0 3 0 4c0 3 2 6 5 9
-s8 6 14 9c1 0 1 1 2 1c1 1 3 1 4 1c4 6 9 12 17 14c7 1 14 0 19 -4h2h2c6 0 12 1 16 0c3 -1 6 -2 8 -3c1 0 2 1 3 1c3 0 6 -3 6 -6s-3 -6 -6 -6v-1c-1 -1 -1 -2 -2 -3s-3 -2 -4 -3s-2 -1 -3 -2l-8 -5h-1l1 2l6 3c1 1 3 2 4 3l3 3s1 2 2 3v0c-2 1 -5 3 -5 6c0 1 0 2 1 3
-c-2 1 -4 1 -6 1h-11v0h-4h-1c-7 -1 -14 -2 -22 -4c-1 0 -2 -1 -3 -1c14 3 24 3 29 2c2 -3 3 -6 4 -10c2 -12 -3 -23 -14 -28l4 -24l-13 -2l-4 24c-12 0 -21 9 -23 21c-1 4 -1 7 0 10v0c-1 0 -2 -1 -3 -1c-4 -2 -8 -5 -11 -7c-3 -3 -5 -6 -5 -8v-2c0 0 0 -1 1 -1
-c2 -2 5 -3 9 -4c3 -1 7 -1 11 -1h1l2 -1h-3c-4 0 -9 1 -12 1c-4 1 -7 0 -9 2c-1 1 -2 2 -2 3v0v1v0v0v0z" />
- <glyph glyph-name="ion-ios-grid" unicode="&#xf18c;" horiz-adv-x="384"
-d="M142 140c-1 0 -2 1 -2 2v100c0 1 1 2 2 2h100c1 0 2 -1 2 -2v-100c0 -1 -1 -2 -2 -2h-100zM0 352c0 18 14 32 32 32h320c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v320zM330 244c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-56c-1 0 -2 1 -2 2
-v56c0 8 -6 14 -14 14v0c-8 0 -14 -6 -14 -14v-56c0 -1 -1 -2 -2 -2h-100c-1 0 -2 1 -2 2v56c0 8 -6 14 -14 14v0c-8 0 -14 -6 -14 -14v-56c0 -1 -1 -2 -2 -2h-56c-8 0 -14 -6 -14 -14v0c0 -8 6 -14 14 -14h56c1 0 2 -1 2 -2v-100c0 -1 -1 -2 -2 -2h-56c-8 0 -14 -6 -14 -14
-v0c0 -8 6 -14 14 -14h56c1 0 2 -1 2 -2v-56c0 -8 6 -14 14 -14v0c8 0 14 6 14 14v56c0 1 1 2 2 2h100c1 0 2 -1 2 -2v-56c0 -8 6 -14 14 -14v0c8 0 14 6 14 14v56c0 1 1 2 2 2h56c8 0 14 6 14 14v0c0 8 -6 14 -14 14h-56c-1 0 -2 1 -2 2v100c0 1 1 2 2 2h56z" />
- <glyph glyph-name="ion-logo-model-s" unicode="&#xf153;" horiz-adv-x="448"
-d="M412 240c9 -6 23 -16 32 -26c0 0 4 -28 4 -62c0 -48 -6 -93 -6 -93c-2 0 -3 -1 -5 -1c0 -1 -1 -13 -2 -21c0 -2 -1 -5 -6 -5h-64c-2 0 -5 1 -5 3l-1 17h-12c-25 0 -15 8 -27 8c-11 0 -55 -3 -96 -3s-85 3 -96 3c-12 0 -2 -8 -27 -8h-11l-1 -17c0 -2 -3 -3 -5 -3h-65
-c-5 0 -6 3 -6 5c-1 8 -2 20 -2 21c-2 0 -3 1 -5 1c0 0 -6 45 -6 93c0 33 4 62 4 62c9 10 23 19 32 25c3 2 3 7 -1 8l-5 1v0c-7 0 -23 2 -26 5s-4 6 -4 9s2 8 5 11s15 5 23 6s9 0 11 -1s3 -7 3 -12c0 -3 3 -6 6 -7c2 0 2 1 3 3c5 13 12 34 21 51c12 21 23 27 28 29s9 3 43 6
-c34 4 64 4 81 4s46 0 80 -4s38 -4 43 -6s17 -8 29 -29c9 -16 14 -36 19 -49c1 -3 5 -5 8 -4h1c1 0 2 2 2 3c0 6 1 14 3 15s2 2 10 1s21 -3 24 -6s5 -8 5 -11s-1 -6 -4 -9s-19 -5 -26 -5v0l-5 -1c-4 -1 -4 -5 -1 -7zM91 293c-4 -9 -10 -31 -9 -33s-1 -4 12 -3s91 3 130 3
-s117 -2 130 -3s11 1 12 3s-6 24 -10 33c-2 5 -6 11 -10 17c-5 7 -12 12 -20 13c-17 3 -53 7 -102 7s-85 -4 -102 -7c-8 -1 -16 -6 -21 -13c-4 -6 -8 -12 -10 -17zM100 177c6 0 14 2 20 3c4 1 4 5 1 7c-7 5 -20 13 -37 18c-26 7 -41 7 -55 7c-2 0 -4 -1 -4 -3
-c0 -4 -1 -11 1 -19c2 -11 26 -15 28 -15s6 3 11 3s25 -1 35 -1zM310 104c13 2 28 16 18 30c-6 8 -21 14 -49 18c-30 4 -48 4 -55 4s-26 0 -56 -4c-28 -4 -41 -10 -49 -18c-11 -13 6 -28 19 -30s58 -2 86 -2s73 0 86 2zM422 189c2 8 0 16 0 20c0 2 -1 3 -3 3
-c-14 0 -30 -1 -56 -8c-17 -5 -30 -12 -37 -17c-3 -2 -2 -6 2 -7c6 -1 14 -3 20 -3c10 0 30 1 35 1s9 -4 11 -4s26 4 28 15z" />
- <glyph glyph-name="ion-ios-hand" unicode="&#xf190;" horiz-adv-x="320"
-d="M299 331c12 0 21 -10 21 -21v-233c0 -55 -32 -93 -78 -93h-58s-40 11 -40 11c-43 25 -94 96 -113 118c-20 22 -39 41 -27 53c18 17 40 7 66 -16l28 -24v219c0 11 9 20 21 20s21 -9 21 -20v-127c0 -5 4 -9 9 -9s9 4 9 9v161c0 11 9 21 21 21s21 -10 21 -21v-144
-c0 -5 4 -8 9 -8s9 3 9 8v127c0 11 9 21 21 21s21 -10 21 -21v-161c0 -5 4 -9 9 -9s9 4 9 9v109c0 11 9 21 21 21z" />
- <glyph glyph-name="ion-md-brush" unicode="&#xf2a4;" horiz-adv-x="448"
-d="M118 146c39 0 71 -32 71 -70c0 -51 -43 -92 -95 -92c-36 0 -72 18 -94 46c20 0 47 16 47 46c0 38 32 70 71 70zM441 362c9 -9 9 -23 0 -32l-211 -207l-65 63l211 207c9 9 25 9 34 0z" />
- <glyph glyph-name="ion-ios-add-circle-outline" unicode="&#xf100;"
-d="M298 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-74v-74c0 -9 -7 -16 -16 -16s-16 6 -16 16v74h-74s-16 6 -16 16s7 16 16 16h74v74c0 9 7 16 16 16s16 -7 16 -16v-74h74zM208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53s93 19 127 53
-s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-ios-mail-unread" unicode="&#xf145;"
-d="M320 296c0 27 21 48 48 48s48 -21 48 -48s-21 -48 -48 -48s-48 21 -48 48zM368 230c19 0 36 7 48 20v-178c0 -18 -14 -32 -32 -32h-352c-18 0 -32 14 -32 32v219c0 2 2 3 3 2l108 -110c1 -1 1 -2 0 -3l-75 -80c-5 -5 -5 -13 0 -18c2 -2 6 -4 9 -4s7 2 9 4l75 80
-c1 1 2 1 3 0l18 -18c16 -16 36 -25 58 -25s43 8 58 24l18 19c1 1 2 1 3 0l75 -80c2 -2 6 -4 9 -4s7 2 9 4c5 5 5 13 0 18l-75 80c-1 1 -1 2 0 3l47 48c5 -1 11 -1 16 -1zM302 296c0 -22 10 -41 26 -53l-81 -82c-10 -11 -24 -16 -39 -16s-29 5 -39 16l-157 160c5 4 12 7 20 7
-h278c-5 -10 -8 -20 -8 -32z" />
- <glyph glyph-name="ion-md-desktop" unicode="&#xf2df;" horiz-adv-x="448"
-d="M405 416c23 0 43 -20 43 -43v-282c0 -23 -20 -43 -43 -43h-138l42 -48v-32h-170v32l42 48h-138c-23 0 -43 20 -43 43v282c0 23 20 43 43 43h362zM405 128v245h-362v-245h362z" />
- <glyph glyph-name="ion-ios-briefcase" unicode="&#xf3ee;"
-d="M32 0c-18 0 -32 14 -32 32v192h416v-192c0 -18 -14 -32 -32 -32h-352zM384 320c18 0 32 -14 32 -32v-40h-416v40c0 18 14 32 32 32h8v8c0 4 4 8 8 8h32c4 0 8 -4 8 -8v-8h28v32c0 18 14 32 32 32h120c18 0 32 -14 32 -32v-32h28v8c0 4 4 8 8 8h32c4 0 8 -4 8 -8v-8h8z
-M272 320v28c0 4 -4 8 -8 8h-112c-4 0 -8 -4 -8 -8v-28h128z" />
- <glyph glyph-name="ion-ios-cloud-circle" unicode="&#xf152;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM291 128c25 0 45 21 45 47c0 23 -16 42 -38 46c-4 38 -34 67 -72 67c-26 0 -49 -14 -62 -34c-4 2 -10 4 -15 4c-20 0 -36 -17 -36 -37c-20 -6 -33 -25 -33 -46c0 -26 20 -47 45 -47
-h166z" />
- <glyph glyph-name="ion-md-trophy" unicode="&#xf39b;"
-d="M344 343h72c0 -62 -13 -108 -21 -127s-34 -52 -59 -70c-24 -17 -95 -53 -104 -58v-28c3 -9 17 -28 78 -28h26v-48h-256v48h21c60 0 78 18 83 28v28c-9 4 -74 35 -104 58c-32 25 -48 46 -59 70s-21 59 -21 127h71c-1 27 0 56 0 57h273c0 -1 1 -30 0 -57zM62 236
-c10 -20 24 -37 41 -51c-11 26 -19 58 -26 97c-1 5 -1 10 -2 16h-29c2 -24 7 -44 16 -62zM354 236c9 18 14 38 16 62h-29c-1 -6 -1 -11 -2 -16c-7 -40 -15 -71 -26 -97c18 14 31 31 41 51z" />
- <glyph glyph-name="ion-md-apps" unicode="&#xf27a;" horiz-adv-x="320"
-d="M0 272v80h80v-80h-80zM120 32v80h80v-80h-80zM0 32v80h80v-80h-80zM0 152v80h80v-80h-80zM120 152v80h80v-80h-80zM240 352h80v-80h-80v80zM120 272v80h80v-80h-80zM240 152v80h80v-80h-80zM240 32v80h80v-80h-80z" />
- <glyph glyph-name="ion-md-mail-open" unicode="&#xf321;" horiz-adv-x="448"
-d="M448 246v-203c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v203c0 15 8 30 20 37l204 101l204 -101c13 -7 20 -22 20 -37zM224 144l171 112l-171 85l-171 -85z" />
- <glyph glyph-name="ion-md-cart" unicode="&#xf2b4;"
-d="M122 70c23 0 41 -18 41 -41s-18 -42 -41 -42s-42 19 -42 42s19 41 42 41zM0 397h68l19 -42h308c11 0 21 -9 21 -20c0 -4 -1 -8 -2 -10l-75 -129c-7 -14 -20 -22 -36 -22h-155l-21 -32s-2 -5 -2 -6c0 -3 2 -5 5 -5h238v-40h-243c-26 0 -45 14 -45 42c0 7 2 15 5 20l31 51
-l-74 151h-42v42zM326 70c23 0 42 -18 42 -41s-19 -42 -42 -42s-41 19 -41 42s18 41 41 41z" />
- <glyph glyph-name="ion-md-archive" unicode="&#xf27c;"
-d="M406 348c7 -7 10 -17 10 -29v-289c0 -25 -21 -46 -46 -46h-324c-25 0 -46 21 -46 46v289c0 12 3 22 10 29l33 39c6 8 16 13 26 13h278c10 0 20 -5 26 -13zM208 65l127 127h-81v46h-92v-46h-81zM49 354h317l-22 23h-277z" />
- <glyph glyph-name="ion-logo-whatsapp" unicode="&#xf2c5;" horiz-adv-x="448"
-d="M228 416c121 0 220 -97 220 -218s-99 -218 -220 -218c-39 0 -74 10 -106 27l-122 -39l40 117c-20 33 -32 72 -32 113c0 121 99 218 220 218zM337 115c5 13 6 24 5 26s-5 4 -11 7s-32 18 -37 20s-9 2 -13 -3s-16 -17 -19 -21s-6 -4 -12 -1s-23 10 -44 30
-c-16 15 -27 33 -30 39s0 9 3 12c3 2 6 6 9 9s4 5 6 9s1 7 0 10s-12 31 -16 42s-10 11 -13 11h-10s-10 -2 -15 -7s-21 -19 -22 -46s18 -54 21 -58s37 -64 93 -88s57 -17 67 -16s33 12 38 25z" />
- <glyph glyph-name="ion-md-paw" unicode="&#xf342;"
-d="M412 282c7 -15 5 -34 -3 -52c-11 -23 -34 -38 -56 -38c-6 0 -11 1 -16 3c-24 9 -32 39 -18 70c11 25 33 42 55 42c5 0 9 -1 14 -3c10 -4 19 -12 24 -22zM97 265c14 -31 6 -61 -18 -70c-5 -2 -11 -3 -16 -3c-22 0 -45 15 -56 38c-9 17 -9 37 -2 52c5 10 13 18 23 22
-c5 2 9 3 14 3c22 0 44 -17 55 -42zM146 269c-30 1 -57 28 -61 61c-3 20 4 40 17 54c9 9 20 15 33 16h7c29 -1 50 -26 54 -60c3 -22 -1 -43 -14 -57c-8 -8 -18 -13 -30 -14h-6zM208 224c69 0 139 -97 139 -176c0 -24 -12 -43 -24 -51c-14 -10 -24 -13 -45 -13
-c-13 0 -22 2 -28 6c-12 7 -26 10 -40 10h-4c-14 0 -28 -3 -40 -10c-6 -4 -15 -6 -28 -6c-21 0 -31 3 -45 13c-12 8 -24 27 -24 51c0 79 70 176 139 176zM265 269c-12 1 -23 6 -31 14c-13 14 -17 35 -14 57c4 34 26 59 55 60h6c13 -1 24 -7 33 -16c13 -13 20 -34 17 -54
-c-4 -34 -30 -60 -60 -61h-6z" />
- <glyph glyph-name="ion-md-tablet-landscape" unicode="&#xf38c;" horiz-adv-x="448"
-d="M0 328c0 13 11 24 24 24h400c13 0 24 -11 24 -24v-272c0 -13 -11 -24 -24 -24h-400c-13 0 -24 11 -24 24v272zM384 320h-336v-256h336v256zM430 192c0 8 -6 14 -14 14s-14 -6 -14 -14s6 -14 14 -14s14 6 14 14z" />
- <glyph glyph-name="ion-md-mail" unicode="&#xf322;" horiz-adv-x="448"
-d="M405 368c23 0 43 -20 43 -43v-266c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v266c0 23 20 43 43 43h362zM400 277v43l-176 -117l-176 117v-43l176 -117z" />
- <glyph glyph-name="ion-ios-git-compare" unicode="&#xf185;" horiz-adv-x="448"
-d="M202 120l59 -59c4 -4 7 -10 7 -16s-3 -11 -7 -15l-57 -58c-3 -3 -6 -4 -10 -4s-7 2 -10 4v0c-5 6 -5 15 0 20l40 40h-90c-34 0 -58 16 -70 45c-9 23 -9 50 -9 65v136c-15 3 -28 11 -38 22c-11 13 -17 29 -17 46c0 39 31 70 70 70s70 -31 70 -70c0 -17 -6 -34 -18 -47
-c-10 -11 -24 -19 -39 -22v-135c0 -17 1 -42 9 -59c8 -16 22 -23 42 -23h89l-41 40v0c-3 3 -4 6 -4 10s1 7 4 10s6 4 10 4s7 -1 10 -4zM70 304c23 0 42 19 42 42s-19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42zM393 106c14 -3 28 -11 38 -22c11 -13 17 -29 17 -46
-c0 -39 -31 -70 -70 -70s-70 31 -70 70c0 17 6 34 18 47c10 11 24 19 39 22v135c0 17 -1 41 -9 58c-8 16 -22 24 -42 24h-89l41 -40v0c3 -3 4 -6 4 -10s-1 -7 -4 -10s-6 -4 -10 -4s-7 1 -10 4l-59 59c-4 4 -7 10 -7 16s3 11 7 15l57 58c3 3 6 4 10 4s7 -2 10 -4v0
-c5 -6 5 -15 0 -20l-40 -40h90c34 0 58 -16 70 -45c9 -23 9 -50 9 -65v-136zM378 -4c23 0 42 19 42 42s-19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42z" />
- <glyph glyph-name="ion-ios-radio" unicode="&#xf1f9;" horiz-adv-x="448"
-d="M28 192c0 -51 19 -98 54 -136c3 -3 4 -6 4 -10s-1 -7 -4 -10c-3 -2 -6 -4 -10 -4s-7 1 -10 4c-40 43 -62 98 -62 156c0 59 22 113 62 156c3 3 6 4 10 4s7 -1 10 -4c6 -6 5 -14 0 -20c-35 -38 -54 -85 -54 -136zM386 348c40 -43 62 -98 62 -156s-22 -112 -62 -155
-c-3 -3 -6 -5 -10 -5s-8 1 -10 4c-6 6 -5 14 0 20c35 38 54 85 54 136s-19 98 -54 136c-3 3 -4 6 -4 10s1 7 4 10c3 2 6 4 10 4v0c4 0 7 -1 10 -4zM127 100v0c3 -3 4 -6 4 -10s-1 -6 -4 -9s-6 -5 -10 -5s-7 2 -10 5v0v0c-29 30 -45 68 -45 110c0 43 17 83 47 113
-c3 3 6 4 10 4v0c4 0 7 -2 10 -5c5 -6 6 -14 0 -19c-25 -24 -39 -58 -39 -93c0 -34 13 -67 37 -91v0zM339 304c30 -30 47 -70 47 -112s-16 -81 -45 -111c-2 -3 -6 -5 -10 -5s-7 2 -10 5c-5 5 -5 14 0 19c24 24 37 58 37 92c0 35 -14 68 -39 92v0v0c-6 6 -5 14 0 19
-c3 3 6 5 10 5v0c4 0 7 -1 10 -4zM175 265c5 -6 5 -15 0 -20c-14 -14 -23 -33 -23 -53s8 -39 22 -53c3 -3 4 -6 4 -10s-1 -7 -4 -10s-6 -4 -10 -4s-7 1 -10 4c-19 19 -30 45 -30 72c0 28 11 54 31 74c3 3 6 4 10 4v0c4 0 7 -1 10 -4zM294 265c20 -20 30 -46 30 -74
-c0 -27 -10 -53 -29 -72c-3 -3 -6 -4 -10 -4s-7 1 -10 4s-4 6 -4 10s1 7 4 10c14 14 21 32 21 52s-8 40 -22 54c-6 6 -5 15 0 20c3 3 6 4 10 4v0c4 0 7 -1 10 -4zM224 230c21 0 38 -17 38 -38s-17 -38 -38 -38s-38 17 -38 38s17 38 38 38z" />
- <glyph glyph-name="ion-md-rose" unicode="&#xf372;"
-d="M213 233c-32 41 -61 76 -95 93c-14 7 -24 11 -30 14c86 25 120 76 120 76s35 -52 119 -78c-2 -1 -15 -3 -23 -8c-43 -25 -67 -56 -91 -97zM198 195c60 -92 109 -130 145 -158c-27 -41 -77 -69 -135 -69c-86 0 -156 62 -156 138c0 41 2 136 -52 215c83 0 138 -34 198 -126
-zM416 321c-69 -101 -52 -174 -52 -215c0 -13 -2 -25 -6 -37c-8 6 -16 14 -27 24c-22 22 -57 58 -96 110c21 42 53 77 96 103c30 18 85 15 85 15z" />
- <glyph glyph-name="ion-md-build" unicode="&#xf2a6;" horiz-adv-x="448"
-d="M442 50c8 -6 8 -21 -2 -29l-47 -47c-8 -8 -20 -8 -28 0l-185 186c-47 -18 -101 -8 -140 31c-41 41 -51 102 -27 151l90 -88l61 62l-88 88c49 22 110 14 151 -27c39 -39 48 -94 30 -141z" />
- <glyph glyph-name="ion-ios-chatboxes" unicode="&#xf3fa;"
-d="M378 278c21 0 38 -17 38 -38v-155c0 -21 -21 -38 -42 -38h-1c-6 0 -10 -2 -10 -8v-50c0 -5 -5 -6 -9 -3l-63 58c-2 2 -5 3 -8 3h-127c-21 0 -38 17 -38 38v155c0 21 17 38 38 38h222zM126 302c-18 0 -32 -14 -32 -32v-100h-61c-18 0 -33 14 -33 32v165c0 18 15 33 33 33
-h238c18 0 33 -15 33 -33v-65h-178z" />
- <glyph glyph-name="ion-ios-transgender" unicode="&#xf259;"
-d="M402 280c-8 0 -13 6 -13 13v60l-73 -72c34 -31 53 -74 53 -120c0 -31 -9 -60 -25 -86l20 -19l29 29c2 3 5 4 9 4s7 -1 10 -4c5 -5 5 -14 0 -19l-29 -30l29 -29c5 -5 5 -14 0 -19c-2 -3 -6 -4 -10 -4s-6 1 -9 4l-29 29l-30 -29c-2 -3 -5 -4 -9 -4s-7 1 -10 4
-c-5 5 -5 14 0 19l29 29l-16 17c-31 -34 -74 -53 -120 -53c-43 0 -84 17 -114 47s-47 71 -47 114c0 46 19 89 53 120l-17 16l-30 -30c-2 -3 -5 -4 -9 -4s-7 1 -10 4c-5 5 -5 14 0 19l30 30l-37 37v-60c0 -8 -5 -13 -13 -13s-14 5 -14 13v93c0 8 6 14 14 14h93
-c8 0 14 -6 14 -14s-6 -13 -14 -13h-60l37 -37l28 28c2 3 6 4 10 4s6 -1 9 -4c5 -5 5 -14 0 -19l-28 -29l19 -19c26 16 55 25 86 25s60 -9 86 -25l75 76h-60c-8 0 -13 5 -13 13s5 14 13 14h93c8 0 14 -6 14 -14v-93c0 -8 -6 -13 -14 -13zM342 161c0 36 -14 70 -39 95
-s-59 39 -95 39s-70 -14 -95 -39s-39 -59 -39 -95s14 -70 39 -95s59 -39 95 -39s70 14 95 39s39 59 39 95z" />
- <glyph glyph-name="ion-ios-train" unicode="&#xf258;" horiz-adv-x="288"
-d="M282 -8c6 -5 6 -14 0 -20c-3 -3 -6 -4 -10 -4s-7 1 -10 4l-14 14h-208l-14 -14c-3 -3 -6 -4 -10 -4s-7 1 -10 4c-5 6 -6 15 0 20l50 48c6 5 15 6 20 0s6 -15 0 -20l-6 -6h148l-6 6c-6 5 -5 14 0 20s14 5 20 0zM225 400c35 0 63 -28 63 -63v-236c0 -35 -144 -65 -144 -65
-s-144 30 -144 65v236c0 35 30 63 65 63h15c0 9 7 16 16 16h96c9 0 16 -7 16 -16h17zM144 96c26 0 48 22 48 48s-22 48 -48 48s-48 -22 -48 -48s22 -48 48 -48zM240 256v64c0 9 -7 16 -16 16h-160c-9 0 -16 -7 -16 -16v-64c0 -9 7 -16 16 -16h160c9 0 16 7 16 16zM114 144
-c0 17 13 30 30 30s30 -13 30 -30s-13 -30 -30 -30s-30 13 -30 30z" />
- <glyph glyph-name="ion-md-checkmark-circle-outline" unicode="&#xf2ba;"
-d="M123 232l64 -64l179 178l29 -29l-208 -208l-93 93zM374 192h42c0 -114 -94 -208 -208 -208s-208 94 -208 208s94 208 208 208c28 0 54 -6 78 -16l-32 -32c-15 4 -30 6 -46 6c-92 0 -166 -74 -166 -166s74 -166 166 -166s166 74 166 166z" />
- <glyph glyph-name="ion-md-umbrella" unicode="&#xf39c;"
-d="M362 204c-17 0 -32 -11 -37 -26h-20c-6 14 -21 26 -38 26c-18 0 -40 -6 -42 -32v-119c0 -15 -1 -37 -14 -50c-10 -10 -23 -19 -43 -19c-36 0 -60 26 -60 61v21h43v-21c0 -14 10 -16 17 -16c14 0 13 15 13 24v118c-1 18 -16 33 -34 33c-16 0 -29 -11 -33 -26h-20
-c-5 15 -19 26 -36 26c-13 0 -29 -11 -36 -26h-22v4c0 106 77 193 181 203c3 9 11 15 21 15s19 -6 22 -15c50 -5 97 -29 133 -66c38 -39 59 -91 59 -141h-20c-7 15 -22 26 -34 26z" />
- <glyph glyph-name="ion-md-trending-down" unicode="&#xf399;" horiz-adv-x="448"
-d="M448 51h-134l51 51l-109 110l-90 -90l-166 166l32 32l134 -134l90 89l141 -141l51 52v-135z" />
- <glyph glyph-name="ion-md-git-branch" unicode="&#xf2fa;" horiz-adv-x="320"
-d="M320 288c0 -24 -13 -44 -32 -55v-9c0 -42 -19 -76 -55 -99c-23 -15 -53 -25 -92 -31c-20 -3 -28 -14 -30 -19c10 -11 17 -26 17 -43c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64
-c0 -24 -13 -44 -32 -55v-150c10 5 21 9 35 11c29 4 53 11 68 21c18 11 25 25 25 45v9c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64zM64 392c-22 0 -40 -18 -40 -40s18 -40 40 -40s40 18 40 40s-18 40 -40 40zM64 -8c22 0 40 18 40 40s-18 40 -40 40
-s-40 -18 -40 -40s18 -40 40 -40zM256 248c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40z" />
- <glyph glyph-name="ion-ios-jet" unicode="&#xf1a5;"
-d="M416 400c0 0 -1 -19 -27 -53c-12 -15 -121 -162 -121 -162l8 -160l-36 -41l-52 102l-10 -8l-4 -82l-33 -6l-48 60l-53 -26l26 53l-60 48l6 33l82 4l8 10l-102 52l41 36l160 -8s146 109 162 121c33 26 53 27 53 27z" />
- <glyph glyph-name="ion-ios-school" unicode="&#xf209;" horiz-adv-x="448"
-d="M64 178c0 6 7 10 12 7l132 -75c2 -2 4 -4 4 -7v-94c0 -6 -7 -10 -12 -7l-132 76c-2 2 -4 4 -4 7v93zM248 2c-5 -3 -12 1 -12 7v94c0 3 2 6 4 7l132 76c5 3 12 -1 12 -7v-94c0 -3 -2 -6 -4 -7zM216 383c5 3 11 3 16 0l212 -129c2 -2 4 -5 4 -8v-171c0 -7 -6 -10 -10 -10v0
-c-7 0 -11 3 -11 10v153c0 6 -2 10 -7 7l-188 -108c-5 -3 -11 -3 -16 0l-212 118c-5 3 -5 11 0 14z" />
- <glyph glyph-name="ion-ios-magnet" unicode="&#xf1b4;"
-d="M414 186c2 -2 2 -6 0 -8l-57 -58c-2 -2 -7 -2 -9 0l-163 163c-13 13 -28 20 -42 22s-26 -2 -36 -12s-15 -23 -13 -37s10 -28 23 -41l163 -163c2 -2 2 -7 0 -9l-58 -57c-1 -1 -2 -2 -4 -2s-3 1 -4 2l-173 172c-27 27 -41 62 -41 100s14 74 41 101s63 41 101 41
-s73 -14 100 -41zM228 68l-30 -30l20 -20l30 30zM352 152l30 30l-20 20l-30 -30z" />
- <glyph glyph-name="ion-ios-flash" unicode="&#xf17e;" horiz-adv-x="256"
-d="M248 224c6 0 11 -8 7 -14l-184 -240c-3 -4 -8 -1 -7 3l52 187h-108c-6 0 -10 7 -6 13l183 241c3 4 8 1 7 -3l-52 -187h108z" />
- <glyph glyph-name="ion-logo-twitch" unicode="&#xf2af;"
-d="M32 416h384v-272l-112 -112h-80l-64 -64h-64v64h-96v304zM368 160v208h-304v-272h80v-64l64 64h96zM272 176v129h48v-129h-48zM160 176v129h48v-129h-48z" />
- <glyph glyph-name="ion-md-disc" unicode="&#xf2e0;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM208 98c52 0 94 42 94 94s-42 94 -94 94s-94 -42 -94 -94s42 -94 94 -94zM208 213c11 0 21 -10 21 -21s-10 -21 -21 -21s-21 10 -21 21s10 21 21 21z" />
- <glyph glyph-name="ion-md-cube" unicode="&#xf2dd;" horiz-adv-x="448"
-d="M435 280c7 0 13 -6 13 -12v-183c0 -9 -6 -19 -14 -23v0l-175 -92v-1c-2 -1 -4 -1 -6 -1c-7 0 -13 6 -13 12v185c0 9 4 17 12 22h1l177 92c2 1 3 1 5 1zM422 330c0 0 8 -4 8 -10c0 -8 -8 -11 -8 -11l-185 -98c-4 -2 -8 -3 -13 -3c-4 0 -9 1 -13 3l-185 97s-8 5 -8 12
-c0 6 8 10 8 10l182 81s10 5 16 5s17 -5 17 -5zM196 187c8 -5 12 -13 12 -22v-185c0 -6 -6 -12 -13 -12c-2 0 -4 1 -6 2l-175 92v1c-8 4 -14 13 -14 22v183c0 6 6 12 13 12c2 0 3 0 5 -1z" />
- <glyph glyph-name="ion-md-log-in" unicode="&#xf31e;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208c-43 0 -84 13 -119 38c-34 24 -60 57 -75 96l-4 10h46l2 -5c8 -18 19 -34 33 -48c31 -31 73 -48 117 -48s86 17 117 48s48 73 48 117s-17 86 -48 117s-73 48 -117 48s-86 -17 -117 -48c-14 -14 -25 -30 -33 -48l-2 -5
-h-46l4 10c15 39 41 72 75 96c35 24 76 38 119 38zM0 171v42h190l-45 45l31 30l96 -96l-96 -96l-30 30l44 45h-190z" />
- <glyph glyph-name="ion-md-happy" unicode="&#xf305;"
-d="M208 400c114 0 208 -94 208 -208s-93 -208 -208 -208s-208 94 -208 208s93 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166zM281 213c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM135 213
-c-18 0 -31 13 -31 31s13 31 31 31s31 -13 31 -31s-13 -31 -31 -31zM208 78c-49 0 -89 29 -106 72h212c-17 -43 -57 -72 -106 -72z" />
- <glyph glyph-name="ion-logo-npm" unicode="&#xf195;" horiz-adv-x="512"
-d="M228 178v57h28v-57h-28zM0 292h512v-171h-256v-29h-114v29h-142v171zM142 149v114h-114v-114h57v86h29v-86h28zM284 149v114h-113v-143h57v29h56zM484 149v0v114h-171v-114h57v86h28v-86h29v86h28v-86h29z" />
- <glyph glyph-name="ion-md-watch" unicode="&#xf3a6;" horiz-adv-x="320"
-d="M320 192c0 -51 -24 -96 -61 -125l-19 -115h-160l-19 115c-37 29 -61 74 -61 125s24 96 61 125l19 115h160l19 -115c37 -29 61 -74 61 -125zM40 192c0 -66 54 -120 120 -120s120 54 120 120s-54 120 -120 120s-120 -54 -120 -120z" />
- <glyph glyph-name="ion-md-notifications" unicode="&#xf338;" horiz-adv-x="352"
-d="M176 -16c-23 0 -41 19 -41 42h82c0 -23 -18 -42 -41 -42zM311 109l41 -42v-21h-352v21l41 42v114c0 63 45 117 104 131v15c0 18 13 31 31 31s31 -13 31 -31v-15c59 -14 104 -68 104 -131v-114z" />
- <glyph glyph-name="ion-md-bookmarks" unicode="&#xf2a0;" horiz-adv-x="384"
-d="M341 384c24 0 43 -19 43 -43v-298c0 -24 -19 -43 -43 -43h-21c16 5 23 21 23 43v298c0 22 -8 37 -23 43h21zM282 384c22 -2 38 -21 38 -43v-298c0 -22 -16 -41 -38 -43h-5h-234c-24 0 -43 19 -43 43v298c0 24 19 43 43 43h234h5zM144 192v160h-112v-160l56 32z" />
- <glyph glyph-name="ion-ios-volume-mute" unicode="&#xf263;" horiz-adv-x="160"
-d="M151 302c6 -3 9 -8 9 -14v-192c0 -6 -3 -11 -9 -14c-2 -1 -5 -2 -7 -2c-4 0 -7 2 -10 4l-65 52h-53c-9 0 -16 7 -16 16v80c0 9 7 16 16 16h53l65 52c3 2 6 4 10 4c2 0 5 -1 7 -2z" />
- <glyph glyph-name="ion-ios-male" unicode="&#xf1b9;"
-d="M402 400c8 0 14 -6 14 -14v-108c0 -8 -6 -14 -14 -14s-13 6 -13 14v75l-91 -90c26 -31 40 -70 40 -110c0 -23 -4 -45 -13 -66c-8 -20 -20 -37 -36 -53s-34 -29 -54 -37c-21 -9 -43 -13 -66 -13s-45 4 -66 13c-20 8 -37 21 -53 37s-29 33 -37 53c-9 21 -13 43 -13 66
-s4 45 13 66c8 20 21 38 37 54s33 28 53 36c21 9 43 13 66 13c40 0 79 -14 110 -40l90 91h-75c-8 0 -14 5 -14 13s6 14 14 14h108zM311 153c0 38 -15 73 -42 100s-62 42 -100 42s-73 -15 -100 -42s-42 -62 -42 -100s15 -73 42 -100s62 -42 100 -42s73 15 100 42s42 62 42 100
-z" />
- <glyph glyph-name="ion-ios-cut" unicode="&#xf16a;" horiz-adv-x="360"
-d="M232 171c-25 -33 -38 -42 -38 -42l-14 -9c-7 -4 -20 -14 -29 -28c-14 -23 -25 -55 -26 -58c-4 -14 -12 -26 -22 -35c-11 -10 -25 -15 -39 -15c-17 0 -34 8 -46 22c-12 13 -18 31 -18 49s6 36 18 49c12 14 28 22 46 22c12 0 24 -4 34 -11l10 20c3 7 7 15 11 22
-c2 4 5 9 9 15c3 5 6 9 9 14c8 12 15 22 15 23v0l15 20v0l3 4l10 13l114 154c6 0 15 -2 20 -7c12 -11 19 -23 19 -41c0 -13 -4 -28 -11 -46c-10 -24 -64 -102 -90 -135zM64 27c13 0 24 12 24 28c0 15 -11 28 -24 28s-24 -13 -24 -28s11 -28 24 -28zM180 160c9 0 16 7 16 16
-s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM116 188c-35 48 -69 97 -78 118c-7 18 -11 32 -11 46c0 18 7 35 19 44c4 3 10 4 19 4l105 -141l-47 -65c-2 -3 -3 -6 -5 -9c-1 1 -1 2 -2 3zM296 126c35 0 64 -32 64 -71s-29 -71 -64 -71c-14 0 -28 5 -39 15
-c-10 9 -18 21 -22 35c-1 3 -12 35 -26 58c-5 7 -10 12 -15 17l36 33l11 14c4 -7 7 -14 10 -21c4 -8 8 -14 11 -20c10 7 22 11 34 11zM296 27c13 0 24 12 24 28c0 15 -11 28 -24 28s-24 -13 -24 -28s11 -28 24 -28z" />
- <glyph glyph-name="ion-ios-paper-plane" unicode="&#xf1dd;"
-d="M404 399c6 3 14 -2 12 -9l-82 -400c-1 -6 -7 -8 -12 -4l-99 72c-4 3 -9 2 -12 -2l-38 -45c-4 -6 -10 -4 -11 3l11 78c1 7 3 12 7 18l179 219c2 3 0 6 -3 7c-2 0 -3 0 -4 -1l-208 -203c-4 -5 -7 -11 -7 -18l8 -91c0 -5 -9 -3 -10 2l-53 109c-2 4 -5 6 -9 8l-68 26
-c-6 3 -7 12 -1 15z" />
- <glyph glyph-name="ion-md-eye-off" unicode="&#xf2e8;" horiz-adv-x="448"
-d="M224 303c-13 0 -25 -2 -37 -7l-44 44c25 9 53 14 81 14c102 0 189 -63 224 -152c-15 -38 -39 -70 -70 -96l-59 59c5 12 7 24 7 37c0 56 -46 101 -102 101zM20 358l26 26l362 -358l-26 -26l-60 59l-9 9c-28 -11 -57 -18 -89 -18c-102 0 -189 63 -224 152
-c16 40 42 75 76 101l-9 9zM133 247c-7 -14 -11 -29 -11 -45c0 -56 46 -101 102 -101c16 0 31 4 45 11l-32 31c-4 -1 -9 -1 -13 -1c-34 0 -61 26 -61 60c0 4 1 9 2 13zM221 262h3c34 0 61 -26 61 -60v-3z" />
- <glyph glyph-name="ion-md-code" unicode="&#xf2ce;" horiz-adv-x="448"
-d="M158 94l-30 -30l-128 128l128 128l30 -30l-98 -98zM290 94l98 98l-98 98l30 30l128 -128l-128 -128z" />
- <glyph glyph-name="ion-logo-foursquare" unicode="&#xf237;" horiz-adv-x="320"
-d="M281 416c35 0 45 -20 37 -57c-10 -49 -40 -202 -43 -213c-3 -13 -8 -34 -39 -34h-72c-3 0 -3 0 -6 -3c-2 -2 -115 -133 -115 -133c-9 -10 -23 -8 -28 -6s-15 8 -15 26v380s10 40 43 40h238zM275 146c3 11 33 164 43 213zM267 351c2 9 -5 16 -12 16h-191
-c-9 0 -15 -8 -15 -15v-296c0 -1 1 -1 2 0c0 0 70 84 78 94s11 11 23 11h64c9 0 14 8 15 12s8 43 10 51s-6 16 -13 16h-82c-10 0 -18 8 -18 18v13c0 10 8 17 18 17h96s14 6 15 12z" />
- <glyph glyph-name="ion-logo-facebook" unicode="&#xf236;" horiz-adv-x="384"
-d="M363 384c12 0 21 -9 21 -21v-342c0 -12 -9 -21 -21 -21h-107v152h50l7 56h-57v36c0 17 5 28 29 28h35v52c-5 1 -28 2 -49 2c-44 0 -79 -27 -79 -77v-41h-46v-56h46v-152h-171c-12 0 -21 9 -21 21v342c0 12 9 21 21 21h342z" />
- <glyph glyph-name="ion-md-today" unicode="&#xf17d;" horiz-adv-x="384"
-d="M341 416c24 0 43 -19 43 -43v-362c0 -24 -19 -43 -43 -43h-298c-24 0 -43 19 -43 43v362c0 24 19 43 43 43h298zM337 11c2 0 4 2 4 4v354c0 2 -2 4 -4 4h-290c-2 0 -4 -2 -4 -4v-354c0 -2 2 -4 4 -4h290zM81 254c0 1 1 2 2 2h218c1 0 2 -1 2 -2v-204c0 -1 -1 -2 -2 -2
-h-218c-1 0 -2 1 -2 2v204zM81 333c0 1 1 2 2 2h171c1 0 2 -1 2 -2v-34c0 -1 -1 -2 -2 -2h-171c-1 0 -2 1 -2 2v34z" />
- <glyph glyph-name="ion-ios-umbrella" unicode="&#xf25f;"
-d="M359 310c36 -43 56 -86 57 -144c0 -2 -1 -3 -2 -4s-2 -2 -4 -2h-2c-3 0 -4 1 -5 4c-3 10 -8 20 -16 26c-8 7 -17 10 -27 10s-18 -4 -26 -10s-13 -16 -16 -26c-1 -3 -3 -4 -6 -4h-5c-3 0 -4 1 -5 4c-3 10 -8 20 -16 26s-17 10 -27 10c-15 0 -29 -9 -37 -23v-147
-c0 -25 -19 -46 -44 -46s-45 21 -45 46c0 8 5 14 13 14s14 -6 14 -14c0 -10 8 -18 18 -18s17 8 17 18v148c-8 14 -22 22 -37 22c-20 0 -36 -15 -42 -36c-1 -3 -3 -4 -6 -4h-5c-3 0 -4 1 -5 4c-3 10 -8 20 -16 26c-8 7 -17 10 -27 10s-19 -4 -27 -10s-13 -16 -16 -26
-c-1 -3 -2 -4 -5 -4h-3c-3 0 -6 3 -6 6v2c0 58 20 102 56 144c35 41 81 66 132 71c2 10 10 17 20 17s18 -7 20 -17c50 -5 96 -31 131 -73z" />
- <glyph glyph-name="ion-md-flag" unicode="&#xf2ef;" horiz-adv-x="320"
-d="M300 365c8 1 15 2 20 3v-20v-188c-6 -1 -12 -2 -20 -3c-14 -2 -30 -4 -48 -4c-31 0 -59 6 -87 12c-27 6 -53 15 -80 15c-15 0 -27 -1 -37 -2v-178h-28h-20v171v53v141v3l4 3c2 1 22 13 81 13c29 0 57 -5 84 -11c26 -5 52 -12 81 -12c18 0 36 2 50 4z" />
- <glyph glyph-name="ion-logo-euro" unicode="&#xf235;" horiz-adv-x="320"
-d="M138 176h124l-7 -48h-117v-13c0 -44 15 -63 79 -63c26 0 56 3 93 9l10 -65c-38 -9 -71 -12 -106 -12c-115 0 -164 41 -164 117v27h-50v48h50v48h-50v48h50v11c0 76 49 117 164 117c35 0 68 -3 106 -12l-10 -65c-37 6 -67 9 -93 9c-64 0 -79 -22 -79 -58v-2h138l-7 -48
-h-131v-48z" />
- <glyph glyph-name="ion-md-musical-notes" unicode="&#xf333;" horiz-adv-x="384"
-d="M96 384h288v-315c0 -41 -32 -69 -70 -69s-69 27 -69 65s31 65 69 65c9 0 19 -1 27 -4v122h-202v-179c0 -41 -32 -69 -70 -69s-69 27 -69 65s31 65 69 65c9 0 19 -1 27 -4v258zM341 288v53h-202v-53h202z" />
- <glyph glyph-name="ion-logo-javascript" unicode="&#xf23f;" horiz-adv-x="448"
-d="M176 360v0v-213c0 -97 -49 -131 -121 -131c-18 0 -40 3 -55 8l8 62c10 -4 24 -6 39 -6c31 0 49 15 49 68v212h80zM350 368v0c38 0 65 -7 85 -16l-19 -64c-13 7 -35 17 -67 17s-48 -16 -48 -33c0 -22 19 -31 62 -48c58 -22 85 -53 85 -102c0 -57 -42 -106 -133 -106
-c-38 0 -72 10 -91 21l15 63v0c20 -11 49 -21 81 -21c34 0 52 15 52 38c0 21 -15 33 -55 47c-55 20 -93 52 -93 102c0 58 49 102 126 102z" />
- <glyph glyph-name="ion-md-paper" unicode="&#xf33f;" horiz-adv-x="448"
-d="M432 384c9 0 16 -7 16 -16v-286c0 -45 -37 -82 -82 -82h-280c-47 0 -86 38 -86 86v208c0 23 19 42 42 42h102v32c0 9 7 16 16 16h272zM144 304h-45c2 -6 3 -12 3 -19v-173h42v192zM127 49c9 9 15 19 17 31h-58c-9 0 -16 7 -16 16v189c0 11 -8 19 -19 19s-19 -8 -19 -19
-v-199c0 -14 6 -28 16 -38s24 -16 38 -16c15 0 30 6 41 17zM416 82v269h-240v-15v-250c0 -21 -8 -39 -21 -54h211c13 0 25 5 35 15s15 22 15 35zM216 256v56h160v-56h-160zM216 192v32h160v-32h-160zM216 128v32h160v-32h-160zM376 96c0 -11 0 -32 -19 -32h-149
-c8 0 8 32 8 32h160z" />
- <glyph glyph-name="ion-md-medkit" unicode="&#xf328;"
-d="M304 304h112v-264c0 -22 -18 -40 -40 -40h-336c-22 0 -40 18 -40 40v264h112v40c0 22 18 40 40 40h112c22 0 40 -18 40 -40v-40zM152 344v-40h112v40h-112zM288 120v48h-56v56h-48v-56h-56v-48h56v-56h48v56h56z" />
- <glyph glyph-name="ion-logo-twitter" unicode="&#xf2b0;" horiz-adv-x="472"
-d="M472 338c-13 -20 -29 -36 -48 -50v-12c0 -128 -98 -276 -276 -276c-55 0 -105 16 -148 44c8 -1 15 -2 23 -2c45 0 87 16 120 42c-42 1 -78 29 -90 67c6 -1 12 -2 18 -2c9 0 18 2 26 4c-44 9 -78 48 -78 95v1c13 -7 28 -12 44 -12c-26 17 -43 47 -43 81c0 18 5 34 13 48
-c48 -59 119 -97 199 -101c-2 7 -2 14 -2 22c0 54 43 97 97 97c28 0 52 -12 70 -31c22 4 43 13 62 24c-7 -23 -23 -42 -43 -54c20 2 39 7 56 15z" />
- <glyph glyph-name="ion-ios-hourglass" unicode="&#xf103;" horiz-adv-x="348"
-d="M334 14c8 0 14 -5 14 -13s-6 -15 -14 -15h-320c-8 0 -14 7 -14 15s6 13 14 13h6c6 0 11 1 12 7v1c14 136 100 138 100 170s-85 34 -100 170v1c-1 6 -6 7 -12 7h-6c-8 0 -14 7 -14 15s6 13 14 13h320c8 0 14 -7 14 -15s-6 -13 -14 -13h-5c-6 0 -12 -1 -13 -7v-1
-c-14 -136 -100 -138 -100 -170s85 -34 100 -170v-1c1 -6 7 -7 13 -7h5zM81 48c-3 -7 -1 -16 7 -16h172c8 0 10 9 7 16c-31 79 -80 71 -80 102v55c0 19 37 33 60 65c4 5 0 12 -6 12h-133c-6 0 -11 -7 -7 -12c23 -32 60 -46 60 -65v-55c0 -32 -51 -22 -80 -102z" />
- <glyph glyph-name="ion-md-trending-up" unicode="&#xf39a;" horiz-adv-x="448"
-d="M314 320h134v-134l-51 51l-141 -141l-90 90l-134 -135l-32 32l166 166l90 -90l109 110z" />
- <glyph glyph-name="ion-logo-nodejs" unicode="&#xf242;" horiz-adv-x="384"
-d="M192 -32c-6 0 -12 2 -17 5l-53 32c-8 5 -4 6 -1 7c11 4 14 5 25 12c1 1 3 1 4 0l39 -23c1 -1 4 -1 5 0l156 92c1 1 2 2 2 4v187c0 2 0 4 -2 5l-156 94c-1 1 -3 1 -4 0l-155 -94c-2 -1 -3 -3 -3 -5v-187c0 -2 0 -3 2 -4l40 -24c24 -12 38 1 38 15v183c0 3 2 5 5 5h22
-c3 0 5 -2 5 -5v-183c0 -33 -19 -52 -49 -52c-9 0 -17 1 -37 11l-41 24c-10 6 -17 18 -17 30v190c0 12 7 24 17 30l158 95c10 6 24 6 34 0l158 -95c10 -6 17 -18 17 -30v-190c0 -12 -7 -24 -17 -30l-158 -94c-5 -3 -11 -5 -17 -5v0zM241 96c-65 0 -84 31 -84 59c0 3 1 5 4 5
-h21c2 0 5 -2 5 -4c3 -22 16 -31 54 -31c33 0 47 11 47 29c0 11 -3 18 -55 23c-43 4 -71 15 -71 51c0 33 28 52 73 52c46 0 76 -14 79 -51c0 -1 -1 -2 -2 -3s-2 -2 -3 -2h-20c-2 0 -5 2 -5 4c-4 17 -16 23 -49 23c-36 0 -41 -12 -41 -22c0 -12 5 -16 54 -23s72 -16 72 -51
-c0 -36 -29 -59 -79 -59v0v0z" />
- <glyph glyph-name="ion-ios-shuffle" unicode="&#xf4a9;" horiz-adv-x="384"
-d="M342 160l36 -36c4 -4 6 -9 6 -15s-2 -12 -6 -16l-34 -33c-3 -3 -6 -4 -10 -4s-7 1 -10 4s-4 6 -4 10s1 7 4 10l16 16h-84c-4 0 -8 2 -11 5v0l-53 67l-53 -67v0c-3 -3 -7 -5 -11 -5h-114c-8 0 -14 6 -14 14s6 14 14 14h107l53 66l-53 66h-107c-8 0 -14 6 -14 14
-s6 14 14 14h114c4 0 8 -2 11 -5v0l124 -155h75l-16 16c-3 3 -4 6 -4 10s1 7 4 10s6 4 10 4s7 -1 10 -4zM215 213l-10 12c-2 2 -2 5 0 7l40 51v0c3 3 7 5 11 5h84l-16 16c-3 3 -4 6 -4 10s1 7 4 10s6 4 10 4s7 -1 10 -4l34 -34c4 -4 6 -9 6 -15s-2 -12 -6 -16l-36 -35
-c-3 -3 -6 -4 -10 -4s-7 1 -10 4s-4 6 -4 10s1 7 4 10l16 16h-75l-38 -47c-1 -1 -3 -3 -5 -3v0c-2 0 -4 2 -5 3z" />
- <glyph glyph-name="ion-logo-steam" unicode="&#xf24c;" horiz-adv-x="512"
-d="M479 240c0 -20 -16 -36 -36 -36s-36 16 -36 36s16 36 36 36s36 -16 36 -36zM443 309c38 0 69 -31 69 -69s-31 -70 -69 -70l-67 -48c-2 -26 -24 -47 -51 -47c-25 0 -46 18 -51 41l-196 78c-8 -5 -16 -7 -26 -7c-28 0 -52 24 -52 52s24 52 52 52c25 0 45 -18 50 -41
-l196 -79c8 5 17 8 27 8c2 0 3 -1 5 -1l43 62c0 38 32 69 70 69zM443 286c-26 0 -47 -20 -47 -46s21 -47 47 -47s46 21 46 47s-20 46 -46 46zM52 277c-21 0 -38 -17 -38 -38s17 -38 38 -38c3 0 5 0 8 1l-16 6v0c-15 7 -22 24 -16 39s24 23 39 17v0l19 -7c-6 12 -19 20 -34 20
-zM325 165c-3 0 -6 -1 -9 -1l16 -6c16 -6 23 -24 17 -40s-23 -23 -39 -17c-6 3 -13 6 -19 8c6 -12 19 -20 34 -20c21 0 38 17 38 38s-17 38 -38 38z" />
- <glyph glyph-name="ion-md-beaker" unicode="&#xf297;" horiz-adv-x="384"
-d="M384 413c0 -1 -2 -3 -3 -5s-11 -15 -13 -33v-332v0v-11c0 -35 -29 -64 -64 -64h-208c-35 0 -64 29 -64 64v308c0 32 -2 32 -32 36c0 12 10 40 64 40h270h47c2 0 3 -2 3 -3zM290 16c17 0 30 14 30 32v320h-240v-325c3 -15 16 -27 32 -27h178zM118 288h164v-226
-c0 -4 -4 -8 -8 -8h-148c-4 0 -8 4 -8 8v226z" />
- <glyph glyph-name="ion-md-arrow-dropleft" unicode="&#xf282;" horiz-adv-x="128"
-d="M128 320v-256l-128 128z" />
- <glyph glyph-name="ion-md-bed" unicode="&#xf160;" horiz-adv-x="384"
-d="M105 184c-29 0 -53 23 -53 51s24 51 53 51s52 -23 52 -51s-23 -51 -52 -51zM314 286c39 0 70 -30 70 -68v-154h-35v51h-314v-51h-35v256h35v-154h139v120h140z" />
- <glyph glyph-name="ion-md-cog" unicode="&#xf2cf;" horiz-adv-x="448"
-d="M448 160h-35c-2 -12 -5 -24 -9 -35l30 -17l-32 -56l-30 18c-8 -9 -17 -18 -26 -26l18 -30l-56 -32l-17 30c-11 -4 -23 -7 -35 -9v-35h-64v35c-12 2 -24 5 -35 9l-17 -30l-56 32l18 30c-9 8 -18 17 -26 26l-30 -18l-32 56l30 17c-4 11 -7 23 -9 35h-35v64h35
-c2 12 5 24 9 35l-30 17l32 56l30 -18c8 9 17 18 26 26l-18 30l56 32l17 -30c11 4 23 7 35 9v35h64v-35c12 -2 24 -5 35 -9l17 30l56 -32l-18 -30c9 -8 18 -17 26 -26l30 18l32 -56l-30 -17c4 -11 7 -23 9 -35h35v-64zM224 224c-18 0 -32 -14 -32 -32s14 -32 32 -32
-s32 14 32 32s-14 32 -32 32zM109 105l32 38c-8 14 -13 31 -13 49v1l-47 17c-1 -6 -1 -12 -1 -18c0 -33 11 -63 29 -87zM150 253c11 13 25 23 42 29v50c-37 -8 -69 -31 -89 -62zM224 48c24 0 46 6 66 16l-32 38c-10 -4 -22 -6 -34 -6s-24 2 -34 6l-32 -38
-c20 -10 42 -16 66 -16zM256 282c17 -6 31 -16 42 -29l47 17c-20 31 -52 54 -89 62v-50zM339 105c18 24 29 54 29 87c0 6 0 12 -1 18l-47 -17v-1c0 -18 -5 -35 -13 -49z" />
- <glyph glyph-name="ion-md-flask" unicode="&#xf2f2;" horiz-adv-x="384"
-d="M373 94c8 -16 11 -32 11 -46c-1 -36 -27 -64 -63 -64h-256c-36 0 -64 28 -65 64c0 14 4 30 12 46l100 162v96h-32v48h224v-48h-32v-96zM91 144h203l-30 48h-143z" />
- <glyph glyph-name="ion-md-bonfire" unicode="&#xf29d;"
-d="M224 97l16 -89c1 -3 2 -5 2 -8c0 -18 -16 -32 -35 -32s-35 14 -35 32c0 2 1 5 1 7l17 93v0c2 7 9 12 17 12c9 0 16 -7 17 -15zM262 93v0v0zM356 58c10 -8 10 -25 0 -35s-29 -9 -37 0c-1 1 -3 2 -4 4l-53 66c-3 5 -2 11 2 15c5 5 12 5 18 1l69 -47c2 -1 3 -3 5 -4z
-M334 113v0v0zM402 126c10 -1 14 -7 14 -19c0 -9 -10 -14 -19 -12l-63 18v0v0c-4 2 -6 5 -5 9s5 7 9 6zM82 113v0v0zM82 113h-1l-62 -18c-9 -2 -19 3 -19 12c0 12 3 18 13 19l65 2c4 1 8 -2 9 -6s-1 -7 -5 -9v0zM134 109c5 4 13 3 18 -1c4 -4 5 -10 2 -15l-53 -65
-c-1 -2 -3 -4 -4 -5c-10 -10 -27 -10 -37 0s-10 25 0 35c2 2 3 3 5 4zM208 416c72 -22 108 -106 108 -179c0 -60 -48 -108 -108 -108s-108 48 -108 108c0 46 17 89 44 121l-1 -6c0 -28 21 -51 49 -51s46 23 46 51c0 29 -30 64 -30 64zM204 169c36 0 65 29 65 65
-c0 19 -3 37 -8 54c-14 -18 -38 -29 -62 -34s-38 -20 -38 -42c0 -23 19 -43 43 -43z" />
- <glyph glyph-name="ion-md-git-merge" unicode="&#xf2fd;" horiz-adv-x="384"
-d="M320 224c35 0 64 -29 64 -64s-29 -64 -64 -64c-24 0 -44 13 -55 32c-22 0 -70 4 -109 27c-21 13 -41 30 -60 49v-117c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55c0 35 29 64 64 64s64 -29 64 -64
-c0 -21 -10 -39 -26 -51c22 -37 55 -72 87 -91c23 -14 58 -18 76 -18c11 19 31 32 55 32zM24 352c0 -22 18 -40 40 -40s40 18 40 40s-18 40 -40 40s-40 -18 -40 -40zM104 32c0 22 -18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40s40 18 40 40zM320 120c22 0 40 18 40 40
-s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40z" />
- <glyph glyph-name="ion-ios-funnel" unicode="&#xf182;"
-d="M0 361c0 13 9 23 21 23h374c12 0 21 -10 21 -23v0c0 -6 -2 -12 -6 -16l-152 -180c-4 -4 -5 -9 -5 -15v-134c0 -11 -10 -19 -20 -15l-55 20c-9 3 -15 12 -15 22v107c0 6 -1 11 -5 15l-152 180c-4 4 -6 10 -6 16v0z" />
- <glyph glyph-name="ion-md-close-circle-outline" unicode="&#xf166;"
-d="M208 358c-44 0 -86 -18 -117 -49s-49 -73 -49 -117s18 -86 49 -117s73 -49 117 -49s86 18 117 49s49 73 49 117s-18 86 -49 117s-73 49 -117 49zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM312 117l-29 -29l-75 75l-75 -75
-l-29 29l75 75l-75 75l29 29l75 -75l75 75l29 -29l-75 -75z" />
- <glyph glyph-name="ion-md-help-circle" unicode="&#xf30a;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM229 67v42h-42v-42h42zM229 130c0 46 62 52 62 104c0 46 -37 83 -83 83s-83 -37 -83 -83h41c0 22 19 42 42 42s42 -19 42 -42c0 -42 -63 -37 -63 -104h42z" />
- <glyph glyph-name="ion-md-book" unicode="&#xf29e;"
-d="M378 368c22 3 38 -17 38 -38v-244c0 -21 -16 -33 -38 -38l-170 -32l-170 32c-22 5 -38 17 -38 38v244c0 21 16 41 38 38l170 -32zM378 86v244l-151 -32v-244zM189 54v244l-151 32v-244z" />
- <glyph glyph-name="ion-ios-pricetags" unicode="&#xf48f;" horiz-adv-x="448"
-d="M371 416c15 0 28 -13 28 -28v-124c0 -4 -1 -7 -4 -10l-232 -232c-16 -14 -32 -9 -43 2l-112 113c-11 11 -11 28 0 39l235 236c3 3 6 4 10 4h118zM325 308c14 2 26 14 28 28c2 20 -14 36 -34 34c-14 -2 -25 -14 -27 -28c-2 -20 13 -36 33 -34zM424 368
-c14 -2 24 -14 24 -28v-118c0 -4 -1 -7 -4 -10l-235 -236c-11 -11 -28 -11 -39 0l-9 9l259 259c3 3 4 6 4 10v114z" />
- <glyph glyph-name="ion-ios-move" unicode="&#xf1cb;" horiz-adv-x="448"
-d="M444 202c6 -5 6 -15 0 -20l-79 -79c-5 -5 -15 -5 -20 0v0c-5 5 -5 15 0 20l55 55h-162l1 -162l55 55c5 5 14 5 19 0v0c5 -5 5 -15 0 -20l-79 -79c-5 -5 -15 -5 -20 0l-79 79c-5 5 -5 15 0 20v0c5 5 15 5 20 0l55 -55v162h-162l55 -55c5 -5 5 -15 0 -20v0
-c-5 -5 -15 -5 -20 0l-79 79c-5 5 -5 15 0 20l79 79c5 5 15 5 20 0v0c5 -5 5 -15 0 -20l-55 -55h162v162l-55 -55c-5 -5 -15 -5 -20 0v0c-5 5 -5 15 0 20l79 79c5 5 15 5 20 0l79 -79c5 -5 5 -15 0 -20v0c-5 -5 -14 -5 -19 0l-55 55l-1 -162h162l-55 55c-5 5 -5 15 0 20v0
-c5 5 15 5 20 0z" />
- <glyph glyph-name="ion-ios-wallet" unicode="&#xf18b;"
-d="M356 288c33 0 60 -27 60 -60v-168c0 -33 -27 -60 -60 -60h-296c-33 0 -60 27 -60 60v168c0 33 27 60 60 60h296zM295 383c16 3 32 -2 43 -13v0c9 -9 14 -25 14 -38v-20h-287c-34 0 -49 -19 -49 -19c0 22 26 40 44 44z" />
- <glyph glyph-name="ion-ios-car" unicode="&#xf140;"
-d="M368 252c26 -22 48 -46 48 -85v-76c0 -4 -2 -7 -6 -8c-15 -3 -62 -10 -202 -10s-187 7 -202 10c-4 1 -6 4 -6 8v76c0 39 24 62 48 85c15 33 49 92 100 92h120c51 0 86 -61 100 -92zM142 320c-35 0 -62 -60 -62 -70h256c0 10 -22 70 -62 70h-132zM64 116c18 0 32 14 32 32
-s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM280 148v0c0 9 -7 16 -16 16h-112c-9 0 -16 -7 -16 -16v0c0 -9 7 -16 16 -16h112c9 0 16 7 16 16zM352 116c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM112 64c0 -11 1 -24 -5 -24h-85s-6 12 -6 29
-c0 0 48 -5 96 -5zM304 64c48 0 96 5 96 5c0 -16 2 -29 -5 -29h-86s-5 14 -5 24z" />
- <glyph glyph-name="ion-md-notifications-off" unicode="&#xf336;" horiz-adv-x="364"
-d="M182 -16c-23 0 -41 19 -41 42h82c0 -23 -18 -42 -41 -42zM57 341l295 -295v0l12 -12l-24 -24l-36 36h-298v21l41 41v115c0 23 6 44 16 63l-63 64l24 24l33 -33v0zM317 223v-94l-208 207c13 8 27 15 42 18v15c0 18 13 31 31 31s31 -13 31 -31v-15c59 -14 104 -67 104 -131
-z" />
- <glyph glyph-name="ion-md-school" unicode="&#xf374;" horiz-adv-x="448"
-d="M82 167l142 -82l142 82v-85l-142 -82l-142 82v85zM224 384l224 -128v-171h-41v148l-183 -105l-224 128z" />
- <glyph glyph-name="ion-ios-color-filter" unicode="&#xf414;" horiz-adv-x="424"
-d="M398 199c17 -22 26 -49 26 -77c0 -34 -13 -65 -37 -89s-54 -37 -88 -37c-33 0 -64 12 -87 35c-24 -23 -54 -35 -87 -35s-64 13 -88 37s-37 55 -37 89c0 28 9 55 26 77c16 20 38 36 62 44c-1 6 -1 13 -1 19c0 34 12 65 36 89s55 37 89 37s65 -13 89 -37s36 -55 36 -89
-c0 -6 0 -13 -1 -19c24 -8 46 -23 62 -44zM212 362c-55 0 -100 -44 -100 -100c0 -5 0 -9 1 -14h12c33 0 64 -12 87 -35c24 23 54 35 87 35h12c1 5 1 9 1 14c0 56 -45 100 -100 100zM212 161h6c-2 4 -4 7 -6 11c-2 -4 -4 -7 -6 -11h6zM165 30c11 5 22 11 31 20
-c-14 21 -23 46 -23 72c0 6 1 13 2 19c-18 6 -35 16 -49 29s-25 30 -32 48c-19 -6 -36 -19 -48 -35c-14 -18 -21 -39 -21 -61c0 -56 45 -100 100 -100c14 0 27 2 40 8zM181 166c4 10 9 19 15 28c-9 9 -20 15 -31 20c-13 6 -26 9 -40 9h-5c11 -27 33 -48 61 -57zM212 72
-c9 15 14 32 14 50c0 5 -1 9 -2 14h-12h-12c-1 -5 -1 -9 -1 -14c0 -18 4 -35 13 -50zM259 214c-11 -5 -22 -11 -31 -20c6 -9 11 -18 15 -28c28 9 50 30 61 57h-5c-14 0 -27 -3 -40 -9zM299 22c55 0 100 44 100 100c0 22 -7 43 -21 61c-12 16 -29 29 -48 35
-c-7 -18 -18 -35 -32 -48s-31 -23 -49 -29c1 -6 2 -13 2 -19c0 -26 -9 -51 -23 -72c9 -9 20 -15 31 -20c13 -6 26 -8 40 -8z" />
- <glyph glyph-name="ion-md-magnet" unicode="&#xf320;" horiz-adv-x="352"
-d="M304 349c32 -33 48 -80 48 -135c0 -44 -1 -72 -13 -116s-33 -98 -37 -106s-9 -9 -14 -7s-48 18 -55 21s-11 10 -9 16s26 65 34 95s12 55 12 95c0 28 -10 53 -28 72c-18 18 -41 29 -66 29s-48 -11 -66 -29c-18 -19 -28 -44 -28 -72c0 -40 4 -59 12 -95c0 0 30 -86 34 -95
-c3 -7 -1 -12 -9 -16s-49 -19 -55 -21c-8 -2 -12 1 -16 9c-13 28 -35 104 -35 104c-11 47 -13 72 -13 116c0 55 16 102 48 135s76 51 128 51s96 -18 128 -51zM93 28l-27 74l-22 -6c9 -34 19 -61 26 -77zM282 19c7 16 17 43 25 77l-22 6c-8 -29 -19 -57 -26 -74z" />
- <glyph glyph-name="ion-logo-snapchat" unicode="&#xf24b;" horiz-adv-x="480"
-d="M480 88c0 -2 0 -11 -6 -21c-5 -8 -16 -19 -38 -24c-6 -1 -11 -3 -15 -4c-2 -1 -5 -1 -7 -1v-1c-1 -7 -1 -13 -4 -18c-2 -5 -9 -12 -22 -12c-2 0 -6 0 -9 1c-2 0 -3 1 -5 1c-7 1 -15 2 -23 2c-10 0 -19 -2 -26 -6c-4 -3 -9 -7 -14 -10c-18 -13 -38 -27 -71 -27
-s-53 14 -71 27c-5 3 -9 7 -14 10c-7 4 -15 6 -25 6c-8 0 -17 -1 -24 -2c-2 0 -3 -1 -5 -1c-3 -1 -7 -1 -9 -1c-13 0 -20 7 -22 12c-3 5 -3 11 -4 18v1c-2 0 -4 0 -6 1c-4 1 -10 3 -16 4c-22 5 -33 16 -38 24c-6 10 -6 18 -6 20v15l15 1c16 1 44 7 54 17c29 27 36 43 36 52
-c0 1 0 2 -4 5c-5 3 -13 6 -20 8c-5 2 -10 3 -14 5c-9 4 -18 16 -17 29c1 15 14 27 30 27c4 0 8 0 12 -2c8 -3 13 -4 17 -5c-1 9 -2 19 -3 30c-5 38 5 74 29 102c25 29 64 45 105 45v0c41 0 80 -16 105 -45c24 -28 34 -63 29 -101c-1 -11 -2 -22 -3 -31c4 1 10 2 18 5
-c4 1 8 2 12 2c16 0 29 -12 30 -27c1 -13 -9 -25 -18 -29c-4 -2 -9 -3 -14 -5c-7 -2 -14 -5 -19 -8c-4 -3 -5 -4 -5 -5c0 -16 20 -37 36 -52c11 -10 39 -16 54 -17l15 -1v-14zM192 320c-9 0 -16 -11 -16 -24s7 -24 16 -24s16 11 16 24s-7 24 -16 24zM296 242c3 3 3 9 0 12
-s-9 3 -12 0c-12 -12 -28 -19 -44 -19c-17 0 -32 7 -44 19c-3 3 -9 3 -12 0s-3 -9 0 -12c15 -15 35 -23 56 -23s41 8 56 23zM288 272c9 0 16 11 16 24s-7 24 -16 24s-16 -11 -16 -24s7 -24 16 -24z" />
- <glyph glyph-name="ion-ios-eye" unicode="&#xf425;" horiz-adv-x="448"
-d="M224 336c96 0 168 -69 220 -133c5 -6 5 -15 0 -21c-51 -56 -124 -134 -220 -134c-98 0 -155 61 -220 133c-6 6 -6 16 0 22c76 83 140 133 220 133zM228 102c46 2 84 40 86 86c2 53 -41 96 -94 94c-46 -2 -84 -40 -86 -86c-2 -53 41 -96 94 -94zM224 239
-c0 -26 21 -47 46 -47c6 0 12 2 18 4v-4c0 -37 -31 -67 -69 -64c-31 2 -57 28 -59 59c-3 38 27 69 64 69h3c-2 -5 -3 -11 -3 -17z" />
- <glyph glyph-name="ion-ios-nuclear" unicode="&#xf1d5;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM120 35c27 -15 56 -23 88 -23s62 8 89 23l-50 86c-1 2 0 4 2 5c20 13 34 36 35 61c0 2 2 3 4 3h100v2c0 48 -19 93 -53 127c-11 11 -23 20 -36 28l-51 -87c-1 -2 -3 -3 -5 -2
-c-10 5 -23 8 -35 8c-13 0 -25 -2 -36 -8c-2 -1 -4 -1 -5 1l-51 88c-13 -8 -24 -17 -35 -28c-34 -34 -53 -79 -53 -127v-2h100c2 0 4 -1 4 -3c1 -25 15 -48 35 -61c2 -1 3 -3 2 -5zM152 192c0 31 25 56 56 56s56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56z" />
- <glyph glyph-name="ion-ios-journal" unicode="&#xf189;" horiz-adv-x="384"
-d="M28 416h228v-384h-208c-9 0 -17 -8 -16 -18c1 -8 8 -14 16 -14h320c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16h-340c-16 0 -28 12 -28 28v392c0 16 12 28 28 28zM368 32h-64v384h52c16 0 28 -12 28 -28v-340c0 -9 -7 -16 -16 -16z" />
- <glyph glyph-name="ion-ios-notifications-off" unicode="&#xf1d1;" horiz-adv-x="320"
-d="M160 -8c-31 0 -48 22 -48 53h96c0 -31 -17 -53 -48 -53zM59 393l227 -388c4 -7 2 -15 -5 -19c-2 -1 -5 -2 -7 -2c-5 0 -9 3 -12 7l-228 388c-4 7 -2 15 5 19c2 1 5 2 7 2v0h1v0c5 0 10 -3 12 -7zM200 64h-40h-140c-16 0 -26 19 -16 32c15 20 46 32 46 123
-c0 33 5 59 13 79zM316 96c10 -13 0 -32 -16 -32h-30l-166 284c8 5 17 9 26 11c4 1 6 2 6 6v3c0 13 11 24 24 24s25 -11 25 -24v-3c0 -4 2 -5 6 -6c38 -9 79 -47 79 -140c0 -91 31 -103 46 -123z" />
- <glyph glyph-name="ion-md-card" unicode="&#xf2b3;" horiz-adv-x="448"
-d="M403 368c25 0 45 -20 45 -44v-264c0 -24 -20 -44 -45 -44h-358c-25 0 -45 20 -45 44v264c0 24 20 44 45 44h358zM403 60v132h-358v-132h358zM403 280v44h-358v-44h358z" />
- <glyph glyph-name="ion-logo-codepen" unicode="&#xf230;" horiz-adv-x="448"
-d="M209 144c1 -1 3 -3 3 -4v-53s-62 41 -93 62l39 26c2 1 3 1 5 0c15 -10 31 -21 46 -31zM163 207c-1 -1 -3 -1 -4 0c-13 9 -26 17 -40 26c31 21 93 62 93 62v-51c0 -2 -2 -5 -3 -6c-15 -10 -31 -21 -46 -31zM238 239c-1 1 -2 2 -2 3v54l93 -63l-40 -26c-1 -1 -3 -1 -4 0
-c-16 11 -31 21 -47 32zM226 218c6 -4 40 -27 40 -27l-39 -26c-2 -1 -4 -1 -6 0l-39 26s17 11 25 17c5 3 9 6 14 9c1 1 4 2 5 1zM109 211l30 -20l-30 -20v40zM224 416c124 0 224 -100 224 -224s-100 -224 -224 -224s-224 100 -224 224s100 224 224 224zM363 151v81
-c0 6 -2 9 -7 12c-41 27 -83 55 -124 82c-6 4 -11 4 -17 0c-41 -27 -81 -54 -122 -81c-5 -3 -8 -8 -8 -14v-80c0 -6 3 -10 8 -13c41 -27 81 -55 122 -82c6 -4 11 -4 17 0c41 27 82 55 123 82c5 3 8 7 8 13zM284 175c2 2 5 2 7 0l38 -26l-93 -62v51c0 3 1 4 3 6
-c15 10 30 21 45 31zM338 171l-30 20l30 20v-40z" />
- <glyph glyph-name="ion-md-battery-dead" unicode="&#xf295;" horiz-adv-x="224"
-d="M194 371c16 0 30 -14 30 -30v-343c0 -16 -13 -30 -30 -30h-164c-16 0 -30 13 -30 30v343c0 16 14 30 30 30h37v45h90v-45h37zM176 16v307h-128v-307h128z" />
- <glyph glyph-name="ion-md-wifi" unicode="&#xf3a8;"
-d="M208 219c23 0 42 -18 42 -41s-19 -41 -42 -41s-42 18 -42 41s19 41 42 41zM333 178c0 -45 -26 -85 -63 -107l-20 36c25 14 41 40 41 71c0 45 -37 82 -83 82s-83 -37 -83 -82c0 -31 16 -57 41 -71l-20 -36c-37 22 -63 62 -63 107c0 68 56 124 125 124s125 -56 125 -124z
-M208 384c114 0 208 -93 208 -206c0 -76 -42 -142 -104 -178l-21 36c50 28 83 81 83 142c0 91 -74 165 -166 165s-166 -74 -166 -165c0 -61 33 -113 83 -142l-21 -36c-62 36 -104 102 -104 178c0 113 94 206 208 206z" />
- <glyph glyph-name="ion-ios-brush" unicode="&#xf132;" horiz-adv-x="448"
-d="M118 165c52 0 102 -42 90 -102c-11 -52 -54 -71 -90 -77c-6 -1 -14 -2 -22 -2c-32 0 -78 8 -95 33c-1 2 -1 5 1 6c20 9 32 26 32 47c0 49 32 95 84 95zM436 388c13 -13 17 -30 5 -45l-145 -165c-5 -6 -8 -12 -8 -20v-1c0 -5 -2 -11 -6 -15l-45 -52c-2 -2 -6 -3 -8 -1
-c-1 1 -2 3 -2 5c0 50 -41 82 -87 86c-2 0 -4 2 -5 4v0c-1 2 0 5 2 7l53 43c4 4 10 6 16 6v0v0c7 0 15 3 20 8l165 145c6 5 13 7 19 7c9 0 18 -4 26 -12z" />
- <glyph glyph-name="ion-ios-checkmark" unicode="&#xf3ff;" horiz-adv-x="215"
-d="M214 255c2 -2 1 -4 0 -6l-133 -134h-1c-2 -2 -6 -5 -11 -5c-4 0 -8 1 -12 5l-56 56c-2 2 -2 4 0 6l18 18c1 1 2 1 3 1s2 0 3 -1l44 -45l122 123c1 1 2 1 3 1v0c1 0 2 0 3 -1z" />
- <glyph glyph-name="ion-ios-body" unicode="&#xf3e4;" horiz-adv-x="384"
-d="M144 368c0 27 21 48 48 48s48 -21 48 -48s-21 -48 -48 -48s-48 21 -48 48zM360 304c13 0 24 -11 24 -24s-11 -24 -24 -24h-98c-6 -1 -14 -4 -18 -14c-5 -12 -2 -34 1 -52l4 -21v-1v0l30 -172c2 -13 -6 -26 -19 -28s-26 7 -28 20l-21 120v0s-6 32 -18 32h-1
-c-12 0 -19 -32 -19 -32v0l-21 -120c-2 -13 -15 -22 -28 -20s-21 15 -19 28l30 172v0v1l4 21c3 18 6 40 1 52c-4 10 -12 13 -18 14h-98c-13 0 -24 11 -24 24s11 24 24 24h336z" />
- <glyph glyph-name="ion-ios-crop" unicode="&#xf41e;" horiz-adv-x="384"
-d="M78 384c8 0 14 -6 14 -14v-20c0 -8 -6 -14 -14 -14v0c-8 0 -14 6 -14 14v20c0 8 6 14 14 14v0zM92 106c0 -8 6 -14 14 -14h152c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-166c-16 0 -28 12 -28 28v166c0 8 6 14 14 14v0c8 0 14 -6 14 -14v-152zM370 92c8 0 14 -6 14 -14
-v0c0 -8 -6 -14 -14 -14h-20c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h20zM0 306c0 8 6 14 14 14h278c16 0 28 -12 28 -28v-278c0 -8 -6 -14 -14 -14v0c-8 0 -14 6 -14 14v264c0 8 -6 14 -14 14h-264c-8 0 -14 6 -14 14v0z" />
- <glyph glyph-name="ion-md-radio" unicode="&#xf362;"
-d="M26 306l263 110l14 -35l-172 -72h243c23 0 42 -18 42 -42v-256c0 -24 -19 -43 -42 -43h-332c-23 0 -42 19 -42 43v256c0 18 11 33 26 39zM112 10c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM368 181v86h-320v-86h243v47h45v-47h32z" />
- <glyph glyph-name="ion-ios-appstore" unicode="&#xf10c;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM129 103l18 30c-2 6 -10 12 -20 12h-2c-3 0 -5 -2 -7 -4l-14 -23c-4 -7 -2 -16 5 -20c2 -1 6 -2 8 -2c5 0 9 2 12 7zM249 150c0 0 1 1 1 4c0 5 -1 9 -4 14l-1 1c-3 6 -11 9 -18 9
-h-54v0l37 62l16 28l18 30c4 7 2 16 -5 20s-16 2 -20 -5l-9 -16v0l-10 16c-4 7 -13 9 -20 5s-8 -13 -4 -20l17 -30v0l-53 -90v0h-45c-8 0 -15 -6 -15 -14s6 -15 14 -15h29h33zM322 149c8 0 14 7 14 15s-7 14 -15 14h-41v0l-49 82s-4 -1 -8 -9c-6 -11 -5 -25 1 -36l22 -37
-l17 -29l27 -46c3 -4 7 -7 12 -7c3 0 6 1 8 2c7 4 9 13 5 20l-19 31v0h26z" />
- <glyph glyph-name="ion-ios-build" unicode="&#xf136;"
-d="M393 317c4 3 9 3 12 -1c8 -12 12 -24 11 -34c-1 -12 -6 -36 -30 -60c-17 -17 -45 -30 -72 -30c-11 0 -22 3 -32 8c-2 1 -6 2 -9 2s-7 -1 -11 -5c-9 -9 -188 -200 -188 -200c-8 -9 -19 -13 -30 -13s-23 5 -31 13c-17 17 -18 45 0 61c0 0 192 181 200 188c7 7 4 15 2 20
-c-19 44 3 83 23 104c21 22 48 29 60 30h2c10 0 22 -4 32 -11c4 -3 5 -8 1 -12l-45 -45c-1 -1 -1 -2 -1 -3l8 -47c0 -2 1 -3 3 -3l47 -8c1 0 2 0 3 1zM55 19c5 5 5 14 0 20c-6 5 -14 5 -20 0c-5 -6 -5 -14 0 -20c6 -5 14 -5 20 0z" />
- <glyph glyph-name="ion-ios-cellular" unicode="&#xf13d;"
-d="M360 396c36 -34 56 -78 56 -126v0v0v0c0 -48 -20 -93 -56 -127c-3 -2 -5 -3 -9 -3s-7 2 -10 4c-3 3 -4 5 -4 9s1 8 4 10c30 29 47 67 47 107v0c0 41 -17 79 -47 107c-3 3 -4 5 -4 9s1 7 4 10c3 2 6 4 10 4s6 -2 9 -4zM303 351c23 -22 35 -50 35 -81v0v0v0
-c0 -31 -12 -59 -35 -81c-2 -2 -6 -4 -9 -4s-7 1 -9 3s-4 6 -4 9s2 7 4 9c18 17 28 40 28 64v0c0 24 -10 47 -28 64c-2 2 -4 6 -4 9s2 6 4 8s6 4 9 4s7 -2 9 -4zM75 377c-30 -28 -47 -66 -47 -107v0c0 -41 17 -79 47 -107c3 -3 4 -6 4 -10s-1 -6 -4 -9c-3 -2 -6 -4 -10 -4
-s-6 1 -9 3c-36 34 -56 79 -56 127v0v0c0 48 20 92 56 126c3 2 5 4 9 4v0c4 0 7 -2 10 -4c3 -3 4 -6 4 -10s-1 -7 -4 -9zM131 334c-18 -17 -28 -40 -28 -64v0c0 -24 10 -47 28 -64c2 -2 4 -6 4 -9s-2 -7 -4 -9s-6 -3 -9 -3s-7 2 -9 4c-23 22 -35 50 -35 81v0v0
-c0 31 12 59 35 81c2 2 6 4 9 4s7 -2 9 -4s4 -5 4 -8s-2 -7 -4 -9zM208 325c26 0 48 -22 48 -48c0 -22 -14 -40 -34 -46v-233c0 -8 -6 -14 -14 -14s-14 6 -14 14v233c-20 6 -34 24 -34 46c0 26 22 48 48 48z" />
- <glyph glyph-name="ion-ios-trophy" unicode="&#xf25d;"
-d="M402 348c8 0 14 -6 14 -14v0c0 -41 -7 -66 -22 -90c-14 -22 -34 -37 -57 -41c-3 0 -5 -2 -6 -5c-6 -15 -20 -35 -51 -52c-20 -11 -37 -19 -52 -22c-4 -1 -6 -3 -6 -7v-81c0 -4 4 -8 8 -8h66c8 0 14 -7 14 -15s-6 -13 -14 -13h-80h-16h-80c-8 0 -14 7 -14 15s6 13 14 13
-h66c4 0 8 4 8 8v81c0 4 -2 7 -6 8c-15 3 -32 10 -52 21c-31 17 -45 37 -51 52c-1 3 -3 5 -6 5c-23 4 -42 19 -56 41c-15 24 -23 49 -23 90v0c0 8 6 14 14 14h66v20c0 9 7 16 16 16h224c9 0 16 -7 16 -16v-20h66zM80 237v75c0 4 -4 8 -8 8h-35c-5 0 -8 -4 -8 -9
-c2 -27 9 -38 15 -49c7 -14 18 -23 31 -28c3 -1 5 0 5 3zM372 262c6 11 13 22 15 49c0 5 -3 9 -8 9h-35c-4 0 -8 -4 -8 -8v-75c0 -3 2 -4 5 -3c13 5 24 14 31 28z" />
- <glyph glyph-name="ion-ios-git-network" unicode="&#xf187;" horiz-adv-x="384"
-d="M313 416c39 0 71 -32 71 -71c0 -34 -24 -62 -56 -69v-57c0 -3 -2 -6 -4 -7l-117 -60v-44c15 -3 28 -11 38 -23c11 -13 18 -29 18 -46c0 -39 -32 -71 -71 -71s-71 32 -71 71c0 34 24 62 56 69v44l-117 60c-2 1 -4 4 -4 7v57c-15 3 -28 11 -38 23c-11 13 -18 29 -18 46
-c0 39 32 71 71 71s70 -32 70 -71c0 -34 -23 -62 -55 -69v-43l106 -55l106 55v43c-15 3 -28 11 -38 23c-11 13 -17 29 -17 46c0 39 31 71 70 71zM30 345c0 -22 19 -41 41 -41s40 19 40 41s-18 41 -40 41s-41 -19 -41 -41zM233 39c0 22 -19 41 -41 41s-41 -19 -41 -41
-s19 -41 41 -41s41 19 41 41zM313 304c22 0 41 19 41 41s-19 41 -41 41s-40 -19 -40 -41s18 -41 40 -41z" />
- <glyph glyph-name="ion-md-warning" unicode="&#xf3a5;" horiz-adv-x="448"
-d="M0 -16l224 416l224 -416h-448zM248 48v48h-48v-48h48zM248 128v96h-48v-96h48z" />
- <glyph glyph-name="ion-md-thumbs-up" unicode="&#xf392;"
-d="M150 0c-21 0 -38 17 -38 38v192c0 11 4 20 11 27l126 127l20 -20c5 -5 9 -12 9 -20l-1 -6l-18 -82h119c21 0 38 -24 38 -45v-38c0 -5 -1 -10 -3 -14l-57 -136c-6 -14 -18 -23 -34 -23h-172zM0 0v224h64v-224h-64z" />
- <glyph glyph-name="ion-ios-megaphone" unicode="&#xf1c1;"
-d="M42 261c0 -27 14 -54 34 -72c3 -3 0 -8 -4 -7v0c-27 9 -54 30 -61 64c-6 0 -11 7 -11 15s4 14 10 15c6 39 36 70 74 70v0c3 0 5 -4 2 -6c-26 -16 -44 -46 -44 -79zM402 345c9 -23 14 -52 14 -82s-5 -58 -14 -81c-1 -3 -2 -5 -3 -8c-6 -13 -12 -24 -21 -33
-c-16 -16 -29 -18 -35 -18s-11 2 -20 5c-38 14 -64 32 -112 32c-26 0 -16 -97 -16 -132s4 -44 -14 -44s-61 16 -68 24s-6 18 -4 36s23 102 25 115s-9 12 -21 22c-27 16 -44 46 -44 80c0 38 22 71 54 85c0 0 -2 0 40 0s111 20 154 46c4 3 12 8 26 8c13 0 24 -5 34 -15
-c8 -8 16 -19 22 -32c1 -2 2 -5 3 -8zM376 188c8 18 14 45 14 75s-6 57 -14 75c-6 16 -18 25 -27 25s-18 -9 -24 -25c-8 -18 -13 -45 -13 -75s5 -57 13 -75c6 -16 15 -28 24 -28s21 12 27 28z" />
- <glyph glyph-name="ion-md-flash" unicode="&#xf2f1;" horiz-adv-x="192"
-d="M0 400h192l-64 -160h64l-128 -256v192h-64v224z" />
- <glyph glyph-name="ion-md-expand" unicode="&#xf2e7;" horiz-adv-x="384"
-d="M333 51v77h51v-128h-128v51h77zM333 333h-77v51h128v-128h-51v77zM51 333v-77h-51v128h128v-51h-77zM51 51h77v-51h-128v128h51v-77z" />
- <glyph glyph-name="ion-md-train" unicode="&#xf396;" horiz-adv-x="352"
-d="M176 400c97 0 176 -11 176 -88v-208c0 -42 -35 -76 -77 -76l33 -33v-11h-44l-44 44h-83l-44 -44h-49v11l33 33c-42 0 -77 34 -77 76v208c0 77 88 88 176 88zM77 72c18 0 33 14 33 32s-15 33 -33 33s-33 -15 -33 -33s15 -32 33 -32zM154 225v87h-110v-87h110zM198 225h110
-v87h-110v-87zM275 72c18 0 33 14 33 32s-15 33 -33 33s-33 -15 -33 -33s15 -32 33 -32z" />
- <glyph glyph-name="ion-md-boat" unicode="&#xf29b;" horiz-adv-x="448"
-d="M52 35l-51 139c-2 6 -1 12 1 17s8 8 13 10l38 13v98c0 23 20 43 43 43h64l16 53h96l16 -53h64c23 0 43 -20 43 -43v-98l38 -13c5 -2 11 -5 13 -10s3 -12 1 -17l-51 -139h-1c-34 0 -65 20 -86 43c-21 -23 -51 -43 -85 -43s-64 19 -85 42c-21 -23 -52 -42 -86 -42h-1z
-M96 312v-84l128 41l128 -41v84h-256zM309 40c0 0 59 -64 107 -64h-21c-30 0 -59 12 -86 26c-53 -28 -117 -28 -170 0c-27 -14 -56 -26 -86 -26h-21c49 0 107 64 107 64c52 -36 118 -36 170 0z" />
- <glyph glyph-name="ion-md-planet" unicode="&#xf356;" horiz-adv-x="448"
-d="M104 297c15 18 32 31 53 41c32 15 69 19 106 10c83 -21 135 -103 119 -186c-1 -3 -1 -7 -2 -10c-5 -20 -11 -37 -23 -53c-2 -3 -6 -6 -8 -9c-6 3 -11 6 -17 9c-35 20 -73 46 -111 75c-48 37 -93 78 -125 114c2 3 6 6 8 9zM386 121c47 -49 70 -82 59 -100
-c-6 -10 -23 -11 -47 -5c-25 6 -58 17 -96 35c-34 -19 -76 -25 -117 -15c-86 22 -139 109 -117 195c-51 60 -77 112 -65 132c6 10 24 12 47 3c21 -8 43 -20 66 -35c-10 -7 -14 -11 -14 -11c-23 14 -43 19 -58 23c-2 0 -9 2 -7 -4c2 -4 3 -7 5 -11c8 -14 21 -30 36 -48
-c33 -38 79 -80 130 -120c38 -30 78 -56 114 -76c33 -19 63 -33 84 -38c2 -1 4 -1 6 -1c6 -1 1 8 -1 12c-7 12 -14 26 -32 47c0 0 3 6 7 17z" />
- <glyph glyph-name="ion-ios-keypad" unicode="&#xf450;" horiz-adv-x="384"
-d="M331 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-54 23 -54 53s24 54 54 54zM192 107c30 0 53 -24 53 -54s-23 -53 -53 -53s-53 23 -53 53s23 54 53 54zM53 107c30 0 54 -24 54 -54s-24 -53 -54 -53s-53 23 -53 53s23 54 53 54zM331 245c30 0 53 -23 53 -53
-s-23 -53 -53 -53s-54 23 -54 53s24 53 54 53zM192 245c30 0 53 -23 53 -53s-23 -53 -53 -53s-53 23 -53 53s23 53 53 53zM53 245c30 0 54 -23 54 -53s-24 -53 -54 -53s-53 23 -53 53s23 53 53 53zM331 384c30 0 53 -23 53 -53s-23 -54 -53 -54s-54 24 -54 54s24 53 54 53z
-M192 384c30 0 53 -23 53 -53s-23 -54 -53 -54s-53 24 -53 54s23 53 53 53zM53 384c30 0 54 -23 54 -53s-24 -54 -54 -54s-53 24 -53 54s23 53 53 53z" />
- <glyph glyph-name="ion-md-contrast" unicode="&#xf2d9;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM321 79c30 30 47 70 47 113s-17 83 -47 113s-70 47 -113 47v-320c43 0 83 17 113 47z" />
- <glyph glyph-name="ion-md-save" unicode="&#xf1a9;" horiz-adv-x="384"
-d="M299 384l85 -85v-256c0 -24 -19 -43 -43 -43h-298c-24 0 -43 19 -43 43v298c0 24 19 43 43 43h256zM192 43c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM256 256v85h-213v-85h213z" />
- <glyph glyph-name="ion-md-football" unicode="&#xf2f6;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM79 210l-44 -38c3 -27 12 -53 27 -76h58l15 29l-17 67zM296 96h57c15 23 25 49 28 76l-44 38l-39 -18l-17 -67zM329 242l19 54c-19 26 -46 46 -76 58l-48 -33v-47l61 -52zM143 354
-c-30 -12 -56 -32 -75 -58l19 -54l43 -20l61 52v47zM170 22c11 -2 23 -4 35 -4c13 0 29 2 41 4c1 0 2 1 3 1l19 54l-15 30h-90l-15 -29l20 -56h2z" />
- <glyph glyph-name="ion-md-star-half" unicode="&#xf382;" horiz-adv-x="404"
-d="M404 238l-110 -96l33 -142l-125 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134zM219 103l60 -36l-16 68l-5 19l15 12l53 46l-70 6l-19 2l-8 18l-27 64v-189z" />
- <glyph glyph-name="ion-logo-game-controller-b" unicode="&#xf181;" horiz-adv-x="448"
-d="M103 243c11 0 19 -8 19 -19s-8 -19 -19 -19s-19 8 -19 19s8 19 19 19zM434 199c21 -88 18 -152 -7 -164c-4 -2 -9 -3 -13 -3c-22 0 -45 24 -67 52c-26 32 -33 33 -111 33h-24c-78 0 -84 -1 -110 -33c-23 -28 -46 -52 -68 -52c-4 0 -9 1 -13 3c-25 12 -28 76 -7 164
-s43 136 88 149c10 3 18 4 26 4c28 0 47 -15 96 -15s68 15 96 15c8 0 16 -1 26 -4c45 -13 67 -61 88 -149zM103 184c22 0 39 18 39 40s-17 40 -39 40s-39 -18 -39 -40s17 -40 39 -40zM276 204c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM320 160
-c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM320 248c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20zM364 204c11 0 20 9 20 20s-9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20z" />
- <glyph glyph-name="ion-ios-woman" unicode="&#xf271;" horiz-adv-x="256"
-d="M158 -48c-6 0 -12 3 -16 7c-3 3 -7 8 -7 18v120h-14v-120c0 -10 -4 -16 -7 -19c-4 -4 -10 -6 -16 -6s-13 2 -17 6c-3 3 -7 9 -7 19v120h-44l44 170h-6l-25 -90c-4 -13 -13 -18 -21 -18v0c-7 0 -13 3 -17 9c-5 6 -6 15 -4 24l29 104c4 15 21 38 49 39v0h98
-c28 -1 45 -26 49 -39v0l29 -105c2 -9 1 -18 -4 -24c-4 -5 -11 -8 -17 -8c-8 0 -17 5 -21 18v0l-24 90h-8l45 -170h-45v-120c0 -10 -4 -15 -7 -18c-4 -4 -10 -7 -16 -7zM128 342c-24 0 -44 20 -44 45s20 45 44 45s44 -20 44 -45s-20 -45 -44 -45z" />
- <glyph glyph-name="ion-logo-yen" unicode="&#xf34e;" horiz-adv-x="384"
-d="M384 416l-112 -208h48v-48h-73l-15 -31v-17h88v-48h-88v-96h-80v96h-88v48h88v17l-14 31h-74v48h48l-112 208h80l112 -221l112 221h80z" />
- <glyph glyph-name="ion-ios-phone-portrait" unicode="&#xf1e3;" horiz-adv-x="224"
-d="M192 416c18 0 32 -15 32 -33v-381c0 -18 -14 -34 -32 -34h-159c-18 0 -33 16 -33 34v381c0 18 15 33 33 33h159zM97 393c-2 0 -4 -2 -4 -4s2 -4 4 -4h30c2 0 4 2 4 4s-2 4 -4 4h-30zM112 -17c10 0 18 7 18 17s-8 18 -18 18s-17 -8 -17 -18s7 -17 17 -17zM206 32
-c1 0 2 1 2 2v329c0 1 -1 2 -2 2h-188c-1 0 -2 -1 -2 -2v-329c0 -1 1 -2 2 -2h188z" />
- <glyph glyph-name="ion-md-jet" unicode="&#xf315;" horiz-adv-x="448"
-d="M448 416c0 0 1 -24 -27 -60c-13 -17 -128 -175 -128 -175l4 -169l-39 -44l-55 110l-11 -9v-88l-41 -7l-48 63l-60 -26l26 60l-63 48l7 41h88l9 11l-110 55l44 39l169 -4s159 115 176 128c36 28 59 27 59 27z" />
- <glyph glyph-name="ion-ios-cloud-done" unicode="&#xf154;" horiz-adv-x="512"
-d="M437 218c43 -8 75 -47 75 -92c0 -50 -41 -94 -91 -94h-330c-50 0 -91 44 -91 94c0 41 26 80 66 93c1 39 33 74 72 74c10 0 19 -3 27 -6c27 39 72 65 123 65c77 0 141 -59 149 -134zM362 236c2 2 2 3 0 5l-17 18c-1 1 -2 2 -3 2v0c-1 0 -2 -1 -3 -2l-122 -123l-44 45
-c-1 1 -2 1 -3 1s-2 0 -3 -1l-18 -18c-2 -2 -2 -4 0 -6l56 -56c4 -4 8 -5 12 -5c5 0 10 3 12 5v0z" />
- <glyph glyph-name="ion-md-pricetag" unicode="&#xf35a;" horiz-adv-x="384"
-d="M352 384l32 -32v-160l-188 -179c-9 -9 -23 -13 -31 -13s-21 5 -29 13l-123 123c-9 9 -13 20 -13 31c0 10 5 21 13 29l181 188h158zM321 281c10 3 19 12 22 22c6 22 -10 41 -31 41c-18 0 -32 -14 -32 -32c0 -21 19 -37 41 -31z" />
- <glyph glyph-name="ion-md-text" unicode="&#xf38f;" horiz-adv-x="384"
-d="M344 384c22 0 40 -18 40 -40v-240c0 -22 -18 -40 -40 -40h-280l-64 -64v344c0 22 10 40 32 40h312zM134 206v40h-38v-40h38zM211 206v40h-38v-40h38zM288 206v40h-38v-40h38z" />
- <glyph glyph-name="ion-ios-paw" unicode="&#xf47a;"
-d="M276 368c23 -3 38 -36 33 -73c-5 -34 -26 -60 -48 -60h-4c-23 3 -37 36 -32 73c5 34 25 60 47 60h1v0v0v0h3zM273 368v0v0zM394 279c22 -9 29 -45 15 -79c-12 -29 -34 -47 -54 -47c-4 0 -7 1 -11 2c-22 9 -28 44 -14 78c12 29 33 48 53 48v0v0v0c4 0 7 -1 11 -2zM280 153
-c24 -37 71 -40 83 -72c2 -6 4 -13 4 -19c0 -26 -20 -46 -46 -46c-32 0 -75 24 -113 24s-81 -24 -113 -24c-26 0 -46 20 -46 46c0 6 1 13 3 19c12 32 60 35 84 72c28 44 40 60 72 60s44 -16 72 -60zM155 235c-22 0 -43 26 -48 60c-5 37 10 70 33 73h4c22 0 43 -26 48 -60
-c5 -37 -10 -70 -33 -73h-4zM72 155c-4 -1 -7 -2 -11 -2c-20 0 -42 18 -54 47c-14 34 -7 70 15 79c4 1 7 2 11 2c20 0 42 -19 54 -48c14 -34 7 -69 -15 -78z" />
- <glyph glyph-name="ion-md-heart-half" unicode="&#xf1a2;"
-d="M302 384c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242l-30 -27l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44zM208 42c50 46 107 99 136 135c28 35 40 63 40 92c0 23 -9 44 -24 59s-35 24 -58 24
-c-26 0 -53 -13 -70 -33l-24 -29v-248z" />
- <glyph glyph-name="ion-ios-images" unicode="&#xf19e;" horiz-adv-x="448"
-d="M230 249l70 -136c2 -3 -1 -7 -5 -7l-161 14c-4 0 -5 4 -3 7l92 123c2 2 5 2 7 -1zM335 184l46 -78c2 -3 -1 -8 -5 -8l-45 4c-2 0 -2 2 -3 3l-26 49c-1 2 0 4 1 6l25 25c2 2 5 2 7 -1zM346 224c-15 0 -27 13 -24 28c2 11 12 19 23 19c15 0 27 -13 24 -28
-c-2 -11 -12 -19 -23 -19zM423 319c15 -1 26 -15 25 -30l-26 -296c-1 -15 -14 -26 -29 -25l-298 26c-15 1 -25 14 -24 29l1 17l-16 -1c-15 -1 -28 9 -29 24l-27 297c-1 15 10 28 25 29l297 27c15 1 28 -10 29 -25l6 -67zM56 147l26 3l15 170c1 15 14 26 29 25l202 -18l-5 53
-c0 4 -3 6 -7 6l-280 -25c-4 0 -6 -4 -6 -8l18 -200c0 -4 4 -6 8 -6zM418 283c0 4 -2 7 -6 7l-52 5l-30 2l-198 17c-4 0 -7 -2 -7 -6l-14 -156l-3 -44c0 -4 2 -7 6 -7l260 -23l19 -1c4 0 7 2 7 6z" />
- <glyph glyph-name="ion-md-arrow-back" unicode="&#xf27d;" horiz-adv-x="342"
-d="M342 213v-42h-260l119 -120l-30 -30l-171 171l171 171l31 -30l-120 -120h260z" />
- <glyph glyph-name="ion-md-finger-print" unicode="&#xf2ee;" horiz-adv-x="384"
-d="M14 242c-2 0 -5 1 -7 2c-7 4 -9 12 -5 19c18 30 72 101 190 101c51 0 96 -14 133 -41c31 -22 49 -47 57 -59c4 -6 2 -15 -4 -19s-16 -3 -20 3c-15 22 -60 88 -166 88c-104 0 -151 -61 -166 -87c-3 -5 -7 -7 -12 -7zM252 -32h-4c-86 22 -118 108 -119 112v1
-c-1 2 -18 62 8 97c12 16 31 24 55 24c23 0 39 -7 50 -22c9 -12 13 -27 17 -41c8 -30 13 -45 44 -47c14 -1 23 7 28 14c14 19 15 50 5 77c-13 35 -60 101 -144 101c-36 0 -69 -12 -95 -34c-22 -18 -39 -44 -47 -70c-15 -49 5 -125 5 -126c2 -7 -2 -15 -10 -17s-15 3 -17 10
-c-1 4 -23 86 -5 142c19 61 79 122 169 122c42 0 81 -14 114 -41c25 -21 46 -49 57 -77c14 -36 10 -77 -10 -103c-13 -18 -32 -27 -52 -26c-53 3 -63 40 -70 68s-11 42 -39 42c-15 0 -25 -4 -32 -13c-9 -12 -10 -30 -9 -44s4 -26 5 -28c2 -6 31 -77 99 -94
-c8 -2 12 -10 10 -17c-2 -6 -7 -10 -13 -10zM142 -26c-4 0 -8 2 -11 5c-34 36 -54 77 -61 128v0c-4 34 3 81 32 114c22 24 52 37 90 37c45 0 81 -22 103 -62c16 -29 19 -58 19 -59c1 -8 -4 -14 -12 -15s-15 4 -16 12v0s-2 26 -16 50c-17 31 -43 46 -78 46
-c-30 0 -54 -9 -70 -27c-23 -26 -27 -66 -24 -92c6 -45 24 -81 54 -113c5 -6 5 -15 -1 -20c-3 -2 -6 -4 -9 -4zM300 14c-30 0 -56 9 -76 26c-41 33 -46 88 -46 90c-1 8 5 14 13 15s14 -5 15 -13c0 -1 4 -45 36 -71c19 -15 43 -22 74 -18c8 1 15 -4 16 -12s-5 -14 -13 -15
-c-7 -1 -13 -2 -19 -2zM323 385c5 -2 9 -7 9 -13c0 -8 -6 -13 -14 -13c-3 0 -7 0 -9 2v0v0s-36 27 -117 27s-117 -27 -117 -27v0v0c-2 -2 -5 -2 -8 -2c-8 0 -14 5 -14 13c0 4 1 8 4 11v0h1s0 1 1 1c9 6 51 32 133 32c78 0 119 -23 131 -31z" />
- <glyph glyph-name="ion-md-refresh" unicode="&#xf366;" horiz-adv-x="352"
-d="M176 60c56 0 104 34 123 84h46c-21 -74 -88 -128 -169 -128c-98 0 -176 79 -176 176s79 176 176 176c48 0 92 -20 124 -52l52 52v-154h-154l70 70c-23 24 -56 40 -92 40c-73 0 -132 -59 -132 -132s59 -132 132 -132z" />
- <glyph glyph-name="ion-ios-undo" unicode="&#xf4c7;" horiz-adv-x="448"
-d="M448 53v-37h-3c-2 0 -3 1 -4 3c-2 6 -8 20 -21 40c-22 33 -59 67 -95 83c-28 12 -53 21 -97 23c-2 0 -4 -2 -4 -4v-81c0 -3 -3 -6 -6 -4l-216 142c-2 2 -2 5 0 7l216 142c3 2 6 0 6 -3v-83c0 -2 2 -4 4 -4c72 -4 123 -24 163 -65c61 -62 57 -139 57 -159z" />
- <glyph glyph-name="ion-md-arrow-dropup-circle" unicode="&#xf285;"
-d="M416 192c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208s208 -93 208 -208zM304 160l-96 96l-96 -96h192z" />
- <glyph glyph-name="ion-logo-skype" unicode="&#xf24a;" horiz-adv-x="384"
-d="M373 151c7 -14 11 -29 11 -46c0 -58 -47 -105 -106 -105c-18 0 -35 4 -50 12c-11 -2 -22 -3 -34 -3c-101 0 -183 81 -183 181c0 12 2 24 4 36c-9 16 -15 34 -15 53c0 58 47 105 106 105c21 0 41 -6 57 -16c10 2 20 2 31 2c101 0 183 -80 183 -180c0 -13 -1 -27 -4 -39z
-M288 104c9 12 12 25 12 40c0 12 -2 23 -7 32s-12 16 -21 22s-19 10 -31 14s-26 7 -41 10c-12 3 -20 5 -25 6s-10 4 -15 6s-7 5 -10 8c-2 3 -4 6 -4 10c0 7 3 13 11 18s19 7 32 7c14 0 25 -2 31 -7s11 -12 16 -20c4 -7 8 -11 11 -14c4 -3 9 -5 16 -5c8 0 13 3 18 8s8 11 8 17
-c0 7 -2 14 -6 21s-10 14 -18 20s-18 11 -30 15s-27 5 -43 5c-20 0 -38 -2 -53 -8c-16 -6 -28 -15 -36 -25c-8 -11 -12 -22 -12 -36s3 -26 11 -36s19 -17 32 -23c13 -5 29 -10 48 -14c14 -3 26 -5 34 -8c8 -2 14 -6 19 -11c5 -4 7 -10 7 -17c0 -9 -4 -17 -13 -23
-s-22 -9 -37 -9c-11 0 -20 2 -27 5s-11 6 -15 11s-8 12 -11 19s-6 11 -10 15s-10 6 -16 6c-8 0 -14 -2 -19 -7s-8 -10 -8 -17c0 -11 4 -22 12 -33s18 -19 30 -26c17 -9 39 -14 65 -14c22 0 42 3 58 10s29 16 37 28z" />
- <glyph glyph-name="ion-ios-pizza" unicode="&#xf1e7;" horiz-adv-x="384"
-d="M383 338c3 -9 0 -18 -4 -26c-6 -12 -17 -13 -23 -14l-158 -295c-1 -2 -3 -3 -5 -3v0c-2 0 -5 1 -6 3l-158 296c-10 1 -19 8 -22 14c0 1 -2 2 -2 3c-3 6 -7 13 -4 21c2 7 15 14 27 20c28 13 71 27 165 27c91 0 138 -15 165 -27c11 -5 22 -12 25 -19zM117 225
-c3 8 2 18 -2 26s-11 13 -20 16c-4 1 -7 2 -11 2h-1c-3 0 -4 -3 -3 -6c8 -14 16 -30 25 -47c1 -3 5 -2 7 0c2 3 4 5 5 9zM233 128l26 48c1 1 0 4 -1 5c-6 7 -15 11 -25 11c-19 0 -34 -15 -34 -33c0 -17 13 -31 30 -33c2 0 3 1 4 2zM268 305c3 2 6 4 8 7s0 6 -3 7
-c-16 3 -33 5 -51 6c-3 0 -5 -2 -4 -5s3 -6 5 -9c5 -7 12 -11 21 -12c2 0 3 -1 5 -1c7 0 13 3 19 7z" />
- <glyph glyph-name="ion-md-glasses" unicode="&#xf300;" horiz-adv-x="448"
-d="M448 272v0v0v-48h-11l-5 -22c-16 -65 -40 -90 -95 -90s-97 17 -97 90v22s-2 16 -16 16s-16 -16 -16 -16v-22c0 -73 -40 -90 -96 -90s-80 22 -96 90l-5 22h-11v48h208v0h32v0h208z" />
- <glyph glyph-name="ion-ios-contact" unicode="&#xf41a;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208v0v0c-108 0 -196 81 -207 186c-1 7 -1 15 -1 22s0 15 1 22c11 105 99 186 207 186v0v0zM344 74c29 33 44 74 44 118c0 48 -19 93 -53 127s-79 53 -127 53s-93 -19 -127 -53s-53 -79 -53 -127c0 -44 15 -85 44 -118
-c21 8 56 21 80 28c2 1 3 0 3 10c0 11 -1 18 -4 24c-4 8 -7 20 -9 31c-4 5 -10 15 -14 33c-3 16 -1 22 1 28v2c1 4 0 23 -3 38c-2 10 1 34 15 52c9 12 27 26 58 28h18c32 -2 49 -16 58 -28c14 -18 17 -42 15 -52c-3 -15 -4 -34 -3 -38c0 0 1 -1 1 -2c2 -6 3 -12 0 -28
-c-4 -18 -10 -27 -14 -32c-2 -11 -5 -24 -9 -32c-3 -7 -6 -15 -6 -23c0 -10 0 -10 2 -11c23 -7 60 -19 83 -28z" />
- <glyph glyph-name="ion-md-copy" unicode="&#xf2da;" horiz-adv-x="336"
-d="M208 400l128 -128v-200c0 -22 -18 -40 -40 -40h-8v-8c0 -22 -18 -40 -40 -40h-208c-22 0 -40 18 -40 40v288c0 22 18 40 40 40h8v8c0 22 18 40 40 40h120zM208 355v-83h83zM256 24v8h-176c-22 0 -32 10 -32 32v256h-8c-5 0 -8 -4 -8 -8v-288c0 -4 4 -8 8 -8h208
-c4 0 8 3 8 8zM304 72v168h-96h-32v32v96h-16h-72c-5 0 -8 -4 -8 -8v-288c0 -4 4 -8 8 -8h208c4 0 8 3 8 8z" />
- <glyph glyph-name="ion-ios-people" unicode="&#xf47c;" horiz-adv-x="449"
-d="M318 113c11 -4 45 -22 45 -67h-139h-139c0 45 35 63 46 67s29 5 37 8c6 2 15 4 18 8s3 28 3 28s-7 7 -10 14s-5 28 -5 28s-6 -3 -9 10c-2 11 -6 18 -5 26s5 6 5 6s-5 9 -5 38c0 30 22 59 64 59s65 -29 65 -59c0 -29 -6 -38 -6 -38s5 2 6 -6s-3 -15 -5 -26
-c-3 -13 -10 -10 -10 -10s-1 -21 -4 -28s-10 -14 -10 -14s0 -24 3 -28s11 -6 17 -8c8 -3 27 -4 38 -8zM108 162c0 0 -1 -14 1 -16s19 -6 19 -6c12 -2 9 -9 9 -9c-7 -1 -16 0 -25 -5c-15 -8 -30 -22 -32 -30h-80c0 20 15 35 23 38s16 5 25 7c4 1 10 3 12 5s2 17 2 17v0
-s-24 -1 -34 8c16 20 7 51 10 77s18 41 46 41v0h1c29 0 44 -15 47 -41s-6 -53 10 -77c-10 -8 -34 -9 -34 -9zM340 162c0 0 -23 1 -33 9c16 24 7 51 10 77s18 41 47 41c0 0 -1 0 0 0v0c28 0 44 -15 47 -41s-6 -57 10 -77c-10 -9 -33 -8 -33 -8v0s-2 -15 0 -17s8 -4 12 -5
-c9 -2 18 -4 26 -7s23 -18 23 -38h-80c-2 8 -17 22 -32 30c-9 5 -18 4 -25 5c0 0 -3 7 9 9c0 0 17 4 19 6s0 16 0 16z" />
- <glyph glyph-name="ion-md-baseball" unicode="&#xf291;"
-d="M318 45c5 -6 10 -12 16 -18c-35 -27 -78 -43 -126 -43s-91 16 -126 43c6 6 11 12 16 18l23 -13l16 28l-20 12c5 9 10 17 14 26c1 3 3 7 4 10l25 -6l7 32l-23 5c3 12 5 24 6 37h24v32h-24c-1 12 -3 25 -6 37l23 5l-7 32l-25 -6c-1 3 -3 6 -4 9c-4 9 -9 19 -14 27l20 12
-l-16 28l-23 -14c-5 6 -10 13 -16 19c35 27 78 43 126 43s91 -16 126 -43c-6 -6 -11 -13 -16 -19l-23 14l-16 -28l20 -12c-5 -8 -10 -18 -14 -27c-1 -3 -3 -6 -4 -9l-25 6l-7 -32l23 -5c-3 -12 -5 -25 -6 -37h-24v-32h24c1 -13 3 -25 6 -37l-23 -5l7 -32l25 6
-c1 -3 3 -7 4 -10c4 -9 9 -18 14 -26l-20 -12l16 -28zM346 322c3 4 6 7 10 11l2 2c36 -37 58 -88 58 -143s-22 -106 -58 -144l-2 2c-4 4 -7 8 -10 12l18 10l-16 28l-21 -12c-5 8 -9 17 -13 26l-1 1l21 5l-7 32l-24 -6c-2 10 -4 20 -5 30h24v32h-24c1 10 3 20 5 30l24 -6l7 32
-l-21 5v1c4 9 9 18 14 26l21 -13l16 28zM70 62c-3 -4 -6 -7 -10 -11l-2 -2c-36 37 -58 88 -58 143s22 106 58 144l2 -2c4 -4 7 -8 10 -12l-18 -11l16 -28l21 13c5 -8 9 -17 13 -26l1 -1l-21 -5l7 -32l24 6c2 -10 4 -20 5 -30h-24v-32h24c-1 -10 -3 -20 -5 -30l-24 6l-7 -32
-l21 -5v-1c-4 -9 -9 -18 -14 -26l-21 12l-16 -28z" />
- <glyph glyph-name="ion-logo-tux" unicode="&#xf2ae;" horiz-adv-x="384"
-d="M362 52c7 -4 22 -10 22 -20s-16 -16 -42 -30s-33 -34 -61 -34s-28 18 -39 21s-33 2 -46 2s-35 2 -42 -4c-11 -9 -23 -19 -38 -19s-26 9 -56 16s-60 7 -60 23s11 17 7 31s-7 25 -4 30s10 4 19 5s19 2 22 11c1 5 -2 17 5 25c-4 16 -2 27 10 44c17 23 15 38 24 53
-s31 36 36 45c9 16 9 22 8 55c0 0 -2 22 -2 51c0 27 17 59 67 59s68 -31 70 -69c4 -60 0 -68 26 -100c15 -18 37 -43 45 -68s13 -56 12 -66c-1 -6 -1 -9 -3 -11c3 -1 6 -2 8 -5c3 -4 2 -11 0 -26c-1 -8 5 -15 12 -19zM136 -4c1 13 -4 22 -17 44s-28 53 -42 60s-21 5 -22 0
-s-2 -20 -3 -23c-3 -6 -11 -11 -16 -12s-19 1 -22 -4s4 -16 4 -24c0 -21 -14 -32 1 -35c14 -2 34 -6 49 -10s31 -11 44 -12c12 -1 23 3 24 16zM254 62c-2 10 -5 28 1 35c4 5 10 6 17 5c0 4 0 8 3 12s11 7 19 7c16 0 24 -11 20 -5c-3 4 -8 10 -13 11c0 0 4 11 2 33
-c-4 40 -34 62 -34 62c27 -30 27 -58 27 -72c0 -6 -1 -16 -4 -22c0 0 -6 -1 -12 -3c-11 -4 -8 -3 -7 7c3 29 -7 64 -17 77s-7 19 -15 35s-18 18 -15 34s5 22 -8 25s-23 8 -24 13c0 2 -1 5 0 10s5 13 14 13c8 0 14 -5 14 -13s-4 -13 -5 -14c-2 -2 3 -3 7 -3c3 4 6 10 6 22
-c0 15 -10 25 -22 25s-29 -11 -22 -41c-8 6 -15 5 -21 3c0 0 2 15 -2 23c-4 9 -18 16 -24 4s-3 -25 0 -31s4 -6 4 -6c2 1 5 4 5 4s-6 3 -7 11c-1 9 3 14 7 15s10 -2 12 -8s0 -13 0 -13s-8 -8 -12 -11s-12 -7 -12 -11s6 -11 15 -17c11 -7 19 -7 44 3c19 7 16 11 22 13
-c4 1 7 -3 5 -6s-6 -2 -22 -9s-21 -8 -29 -11c-6 -2 -11 -5 -26 9c-1 1 10 -16 17 -19s35 11 51 18c3 1 7 -2 3 -6s-29 -25 -48 -28c-11 -2 -21 16 -25 22c-5 8 -7 11 -5 -12s-9 -32 -17 -43s-13 -17 -19 -44s2 -56 -8 -53c-6 2 -14 12 -14 25s-1 17 0 20c1 4 -4 -8 -4 -21
-s2 -17 7 -23c3 -4 44 -32 55 -42s12 -21 9 -28s-11 -10 -11 -10s5 -9 9 -18c3 -7 2 -18 2 -22c0 0 10 9 5 25c0 0 11 -10 32 -8c25 2 41 11 53 22c11 10 12 12 12 2c1 -17 -7 -24 -5 -31c4 8 9 11 11 23s1 26 -1 36zM344 15c24 11 31 16 23 22c-17 11 -29 16 -29 32
-c0 5 5 15 3 21c-2 4 -7 4 -7 4c-10 -24 -33 -22 -33 -22c-20 0 -26 15 -27 20c-2 0 -10 2 -11 -4s1 -13 5 -37c6 -31 -11 -49 -5 -59s19 -16 34 -8s23 21 47 31z" />
- <glyph glyph-name="ion-ios-skip-backward" unicode="&#xf215;" horiz-adv-x="320"
-d="M79 348v-138l229 140c5 3 12 -1 12 -7v-302c0 -6 -7 -10 -12 -7l-229 140v-138c0 -2 -2 -4 -4 -4h-71c-2 0 -4 2 -4 4v312c0 2 2 4 4 4h71c2 0 4 -2 4 -4z" />
- <glyph glyph-name="ion-ios-help-circle-outline" unicode="&#xf197;"
-d="M208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM209 288c38 0 63 -21 63 -51
-c0 -20 -10 -33 -28 -44c-17 -10 -23 -17 -23 -30v-8h-35v8c-2 21 5 33 23 44c17 10 24 17 24 29s-12 22 -27 22s-25 -10 -26 -25h-36c1 32 25 55 65 55zM182 117c0 12 10 20 22 20s21 -8 21 -20s-9 -21 -21 -21s-22 9 -22 21z" />
- <glyph glyph-name="ion-logo-wordpress" unicode="&#xf330;" horiz-adv-x="384"
-d="M195 177l53 -146c0 -1 6 -13 9 -19c-3 -1 -5 -2 -8 -3v0c-10 -3 -21 -6 -32 -7c-8 -1 -17 -2 -25 -2c-17 0 -34 2 -50 6v0c-2 0 -3 2 -5 2l25 73v0zM17 268c6 0 7 -1 15 -1l93 -255c-3 1 -5 2 -8 3c-63 27 -109 87 -116 158c-1 6 -1 13 -1 19c0 25 7 53 17 76zM366 273
-c11 -24 18 -52 18 -81c0 -9 -1 -18 -2 -26c-9 -65 -50 -120 -107 -147c-2 -1 -3 -1 -5 -2l22 65l39 113c10 25 13 45 13 62v19v0c-1 18 -10 44 -36 43h-2c-17 0 -29 -14 -29 -30c0 -14 8 -27 17 -41c7 -12 14 -26 14 -47c0 -15 -4 -34 -13 -56l-17 -58l-62 186
-c10 0 20 1 20 1c9 1 7 16 -2 15c0 0 -28 -3 -46 -3c-17 0 -45 3 -45 3c-9 1 -10 -15 -1 -15c0 0 9 -1 18 -1l27 -74l-38 -113l-63 187c10 0 20 2 20 2c9 1 8 15 -1 14c0 0 -28 -2 -46 -2h-34c5 9 11 17 17 25c35 44 90 72 150 72c24 0 48 -5 69 -13c34 -13 63 -36 85 -65
-c2 -2 3 -5 5 -7c6 -8 11 -17 15 -26z" />
- <glyph glyph-name="ion-ios-speedometer" unicode="&#xf4b0;" horiz-adv-x="448"
-d="M224 384c124 0 224 -100 224 -224c0 -57 -21 -108 -56 -148l-4 -4c-5 -5 -11 -8 -18 -8s-14 3 -19 8c-32 34 -77 56 -127 56s-95 -22 -127 -56c-5 -5 -12 -8 -19 -8s-13 3 -18 8l-4 4c-35 40 -56 91 -56 148c0 124 100 224 224 224zM210 338v-36c0 -8 6 -14 14 -14
-s14 6 14 14v36c0 8 -6 14 -14 14s-14 -6 -14 -14zM82 146c8 0 14 6 14 14s-6 14 -14 14h-36c-8 0 -14 -6 -14 -14s6 -14 14 -14h36zM134 251c5 5 5 14 0 19l-26 26c-5 5 -15 5 -20 0v0c-5 -5 -5 -15 0 -20l26 -25c5 -5 15 -5 20 0v0zM294 216c3 4 2 11 -2 14
-c-4 2 -9 2 -12 0l-75 -47c-14 -10 -17 -28 -7 -42s28 -17 42 -7c3 2 5 4 7 7zM334 251l26 25c5 5 5 15 0 20v0c-5 5 -15 5 -20 0l-26 -26c-5 -5 -5 -14 0 -19v0c5 -5 15 -5 20 0zM402 146c8 0 14 6 14 14s-6 14 -14 14h-36c-8 0 -14 -6 -14 -14s6 -14 14 -14h36z" />
- <glyph glyph-name="ion-md-albums" unicode="&#xf275;"
-d="M107 -16c-24 0 -43 20 -43 43v266c0 24 19 43 43 43h266c24 0 43 -19 43 -43v-266c0 -24 -19 -43 -43 -43h-266zM43 400h266c24 0 43 -19 43 -43v-5h-32h-229c-24 0 -43 -19 -43 -43v-229v-32h-5c-24 0 -43 19 -43 43v266c0 24 19 43 43 43z" />
- <glyph glyph-name="ion-ios-map" unicode="&#xf1bd;" horiz-adv-x="384"
-d="M0 376c0 7 7 11 12 7l70 -51c2 -2 3 -4 3 -7v-316c0 -7 -7 -11 -12 -7l-69 50c-2 2 -4 4 -4 7v317zM105 325c0 3 1 5 3 7l62 36c5 4 12 0 12 -7v-316c0 -3 -1 -5 -3 -7l-62 -37c-5 -4 -12 0 -12 7v317zM372 382c5 4 12 1 12 -6v-317c0 -3 -2 -5 -4 -7l-69 -50
-c-5 -4 -12 0 -12 7v316c0 3 1 5 3 7zM202 362c0 7 7 11 12 7l62 -37c2 -2 3 -4 3 -7v-316c0 -7 -7 -11 -12 -7l-62 37c-2 2 -3 4 -3 7v316z" />
- <glyph glyph-name="ion-ios-thunderstorm" unicode="&#xf4bd;" horiz-adv-x="448"
-d="M342 306c58 0 106 -41 106 -100c0 -58 -41 -110 -113 -110h-84l54 85c2 3 0 7 -3 7h-60l22 74c1 3 -1 6 -4 6h-86c-2 0 -4 -2 -4 -4l-23 -112c-1 -2 1 -5 4 -5h67l-14 -51h-119c-47 0 -85 41 -85 88c0 44 34 84 76 90v4c0 71 58 122 128 122s113 -40 125 -94h13zM175 -11
-l29 107h47l-69 -110c-2 -4 -8 -1 -7 3z" />
- <glyph glyph-name="ion-ios-heart-half" unicode="&#xf19d;"
-d="M304 392c62 -1 112 -51 112 -113c0 -37 -16 -90 -48 -133c-60 -82 -160 -154 -160 -154s-100 72 -160 154c-32 43 -48 96 -48 133c0 62 50 112 112 113v0v0h1c40 0 75 -21 95 -52c20 31 55 52 95 52h1v0v0zM346 163c29 40 42 87 42 116c0 22 -8 44 -24 60s-38 25 -60 25
-v0h-1v0c-14 0 -28 -4 -41 -11c-12 -7 -22 -16 -30 -28l-1 -1c-15 -22 -23 -48 -23 -75v-205c0 -7 8 -10 13 -6c33 27 88 74 125 125z" />
- <glyph glyph-name="ion-md-add-circle-outline" unicode="&#xf158;"
-d="M315 171h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM208 358c-44 0 -86 -18 -117 -49s-49 -73 -49 -117s18 -86 49 -117s73 -49 117 -49s86 18 117 49s49 73 49 117s-18 86 -49 117s-73 49 -117 49zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208
-s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-ios-arrow-dropup-circle" unicode="&#xf12d;"
-d="M208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208zM208 228l81 -79c8 -8 19 -8 27 0c4 4 6 8 6 13s-2 10 -6 14l-94 94c-8 7 -20 6 -27 -1l-95 -95c-8 -8 -8 -19 0 -27s19 -8 27 0z" />
- <glyph glyph-name="ion-ios-rainy" unicode="&#xf495;"
-d="M386 272c19 -18 30 -42 30 -69c0 -24 -9 -48 -25 -67c-15 -18 -36 -31 -58 -35l-69 -95c-3 -4 -8 -6 -13 -6c-3 0 -6 1 -9 3s-6 6 -6 10s1 7 3 10l55 75h-35l-37 -50c-3 -4 -7 -5 -12 -5c-3 0 -7 0 -9 2c-3 2 -5 6 -6 10s1 8 3 11l24 32h-35l-67 -92c-2 -3 -7 -6 -14 -6
-c-2 0 -4 1 -8 3c-3 2 -6 6 -6 10s0 7 2 10l56 75h-35l-37 -50c-3 -4 -8 -5 -13 -5c-3 0 -7 0 -9 2c-3 2 -5 6 -6 10s1 8 3 11v0l24 32c-42 3 -77 41 -77 86c0 21 8 42 22 58c12 14 28 24 46 28c1 31 13 60 36 81s53 33 86 33c31 0 60 -9 81 -26c18 -15 31 -34 37 -58h6
-c28 0 53 -10 72 -28z" />
- <glyph glyph-name="ion-ios-trash" unicode="&#xf4c5;" horiz-adv-x="276"
-d="M15 320h247l-24 -291c0 -16 -13 -29 -29 -29h-141c-16 0 -29 13 -29 29zM77 55h18l-7 233h-18zM147 55v233h-18v-233h18zM199 55l7 233h-18l-7 -233h18zM246 356c18 0 30 -8 30 -26h-276c0 18 12 26 30 26h36l26 23c4 3 9 5 14 5h64c5 0 10 -2 14 -5l26 -23h36z" />
- <glyph glyph-name="ion-md-image" unicode="&#xf30e;" horiz-adv-x="384"
-d="M384 43c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298zM117 160l-74 -96h298l-96 128l-74 -96z" />
- <glyph glyph-name="ion-ios-airplane" unicode="&#xf137;" horiz-adv-x="448"
-d="M376 224c44 0 72 -14 72 -32s-28 -32 -72 -32h-18l-65 2c-1 0 -2 0 -2 -1l-97 -146c-3 -5 -8 -7 -14 -7h-23c-6 0 -8 6 -6 11l50 143c0 1 -1 2 -2 2l-121 3c-2 0 -5 -1 -7 -3l-38 -46c-3 -4 -7 -6 -12 -6h-17c-3 0 -5 3 -4 6l20 68c2 4 2 8 0 12l-20 69c-1 3 1 5 4 5h17
-c5 0 9 -2 12 -6l37 -45c2 -2 4 -3 7 -3l122 2c1 0 2 1 2 2l-50 143c-2 5 0 11 6 11h23c5 0 11 -2 14 -7l97 -146c0 -1 1 -1 2 -1l65 2h18z" />
- <glyph glyph-name="ion-md-calendar" unicode="&#xf2ab;" horiz-adv-x="384"
-d="M304 176v-96h-96v96h96zM272 384h48v-32h24c22 0 40 -18 40 -40v-272c0 -22 -18 -40 -40 -40h-304c-22 0 -40 18 -40 40v272c0 22 18 40 40 40h24v32h48v-32h160v32zM344 40v212h-304v-212h304z" />
- <glyph glyph-name="ion-md-redo" unicode="&#xf365;" horiz-adv-x="448"
-d="M0 111c30 92 116 157 218 157c58 0 110 -21 150 -56l80 76v-192h-198l80 77c-30 25 -69 41 -112 41c-77 0 -143 -48 -166 -118z" />
- <glyph glyph-name="ion-ios-sync" unicode="&#xf222;" horiz-adv-x="480"
-d="M476 191c5 -5 5 -14 0 -19l-42 -42c-2 -2 -4 -3 -7 -3s-5 1 -7 3l-43 42c-5 5 -5 14 0 19c2 2 6 4 10 4s7 -2 9 -4l19 -18c3 24 0 48 -7 71c-8 27 -24 53 -44 73c-17 17 -36 30 -58 39c-21 9 -43 13 -66 13s-45 -4 -66 -13c-22 -9 -41 -22 -58 -39
-c-12 -12 -22 -25 -30 -39c-2 -4 -7 -7 -12 -7c-2 0 -5 0 -7 1c-3 2 -6 5 -7 9s-1 8 1 11c9 16 21 32 34 45c19 20 42 35 68 45c25 10 50 15 77 15c52 0 100 -19 138 -54c46 -42 70 -103 66 -165l13 13c3 3 5 4 9 4s7 -1 10 -4zM413 112c4 -2 6 -4 7 -8s1 -9 -1 -12
-c-9 -17 -21 -31 -35 -45c-20 -20 -42 -35 -67 -45c-24 -10 -51 -15 -77 -15s-53 5 -77 15c-25 10 -48 25 -68 45c-24 24 -40 52 -50 83c-8 24 -11 50 -9 76l-13 -13c-3 -3 -5 -4 -9 -4s-7 1 -10 4c-5 5 -5 14 0 19l42 43c2 2 4 3 7 3s5 -1 7 -3l43 -43c5 -5 5 -13 0 -18
-l-1 -1c-2 -2 -6 -4 -9 -4s-7 2 -9 4l-19 18c-6 -53 12 -106 50 -144c17 -17 37 -30 59 -39c21 -9 43 -12 66 -12s45 3 66 12c22 9 41 22 58 39c12 12 22 25 30 39c2 4 7 8 12 8c2 0 5 -1 7 -2z" />
- <glyph glyph-name="ion-ios-photos" unicode="&#xf482;" horiz-adv-x="480"
-d="M448 304c18 0 32 -14 32 -32v-240c0 -18 -14 -32 -32 -32h-336c-18 0 -32 14 -32 32v240c0 18 14 32 32 32h336zM84 332c-18 0 -32 -14 -32 -32v-236h-20c-18 0 -32 14 -32 32v256c0 18 14 32 32 32h352c18 0 32 -14 32 -32v-20h-332z" />
- <glyph glyph-name="ion-md-locate" unicode="&#xf31c;" horiz-adv-x="448"
-d="M224 272c44 0 80 -36 80 -80s-36 -80 -80 -80s-80 36 -80 80s36 80 80 80zM415 213h33v-42h-33c-10 -89 -81 -160 -170 -170v-33h-42v33c-89 10 -160 81 -170 170h-33v42h33c10 89 81 160 170 170v33h42v-33c89 -10 160 -81 170 -170zM224 43c82 0 149 67 149 149
-s-67 149 -149 149s-149 -67 -149 -149s67 -149 149 -149z" />
- <glyph glyph-name="ion-logo-game-controller-a" unicode="&#xf13b;" horiz-adv-x="448"
-d="M337 302c61 0 111 -45 111 -109s-50 -111 -111 -111h-226c-61 0 -111 47 -111 111s50 109 111 109h226zM168 181v22c0 3 -2 5 -5 5h-35v35c0 3 -2 5 -5 5h-22c-3 0 -5 -2 -5 -5v-35h-36c-3 0 -4 -2 -4 -5v-21c0 -3 2 -6 5 -6h35v-36c0 -3 2 -4 5 -4h21c3 0 6 2 6 5v35h35
-c3 0 5 2 5 5zM288 172c11 0 19 9 19 20s-8 19 -19 19s-20 -8 -20 -19s9 -20 20 -20zM330 131c11 0 20 8 20 19s-9 19 -20 19s-19 -8 -19 -19s8 -19 19 -19zM330 214c11 0 20 10 20 20c0 11 -9 19 -20 19s-19 -8 -19 -19c0 -10 8 -20 19 -20zM373 172c11 0 19 9 19 20
-s-8 19 -19 19s-19 -8 -19 -19s8 -20 19 -20z" />
- <glyph glyph-name="ion-md-man" unicode="&#xf324;" horiz-adv-x="168"
-d="M84 341c-21 0 -37 17 -37 38s16 37 37 37s37 -16 37 -37s-16 -38 -37 -38zM121 333c28 0 47 -24 47 -48v-114c0 -22 -32 -22 -32 0v105h-5v-286c0 -28 -41 -31 -43 0v165h-1h-7v-165c-1 -29 -43 -30 -43 0v286h-6v-105c0 -22 -31 -22 -31 0v114c0 24 19 48 47 48h37h37z
-" />
- <glyph glyph-name="ion-ios-call" unicode="&#xf13e;" horiz-adv-x="384"
-d="M373 83c15 -15 12 -18 9 -26c0 0 -5 -12 -13 -24c-10 -15 -18 -23 -30 -29s-35 -12 -95 22c-48 27 -85 53 -125 93v0v0v0v0c-40 39 -66 77 -93 125c-34 60 -27 82 -21 94s13 21 28 31c12 8 24 13 24 13c8 3 11 6 26 -9s37 -49 45 -67c10 -20 10 -28 0 -42
-c-8 -12 -17 -20 -14 -34s24 -41 50 -67s52 -46 66 -49s22 5 34 14c14 10 22 10 42 0c17 -8 52 -30 67 -45z" />
- <glyph glyph-name="ion-ios-arrow-back" unicode="&#xf3cf;" horiz-adv-x="192"
-d="M58 192l127 -127c9 -9 9 -25 0 -34c-5 -5 -11 -7 -17 -7s-12 2 -17 7l-145 145c-9 9 -8 24 1 33l144 144c9 9 25 9 34 0s9 -25 0 -34z" />
- <glyph glyph-name="ion-md-barcode" unicode="&#xf290;" horiz-adv-x="480"
-d="M72 64v256h48v-256h-48zM216 64v256h48v-256h-48zM144 80v224h48v-224h-48zM288 80v224h48v-224h-48zM360 64v256h48v-256h-48zM88 344h-40v-304h40v-48h-88v8v40v304v40v8h88v-48zM392 392h88v-8v-40v-304v-40v-8h-88v48h40v304h-40v48z" />
- <glyph glyph-name="ion-logo-freebsd-devil" unicode="&#xf238;" horiz-adv-x="512"
-d="M503 333c19 -37 8 -81 -20 -108s-60 -33 -60 -33c2 -32 16 -59 -41 -102c-43 -32 2 -90 2 -90c10 -14 23 -19 32 -32h-272s15 14 -7 32c0 0 -20 17 -18 29s6 13 9 15s0 7 0 7l-19 19s-13 -13 -44 -13c-38 0 -65 39 -65 39h46s-6 -8 -7 -13c-1 -4 1 -5 1 -5s11 -6 22 -6
-c17 0 33 12 33 12l-24 22l-15 -4l-16 37l39 -10l-1 -15l28 -18s9 9 7 27s-9 26 -9 26s-4 0 -9 -4s-6 -6 -6 -6l-10 44s43 -19 50 -63c3 -20 -6 -35 -6 -35l17 -10s6 5 17 7s23 2 29 -8s5 -12 4 -19s0 -9 6 -11s6 -6 11 -8s15 -6 21 -2s8 11 8 18v16s-9 8 -32 20
-s-54 22 -66 40s-12 44 0 57c9 10 23 25 26 35c4 14 4 42 4 42s-10 16 -8 40c2 30 22 84 96 114c0 0 -40 -55 -20 -80c0 0 37 11 77 9c31 -2 56 -12 73 -28s25 -23 47 -17s28 17 28 33c0 19 -16 51 -16 51s36 -7 58 -51zM195 245c14 4 21 -11 21 -11c14 25 30 60 22 64
-s-64 -25 -66 -88c0 0 6 31 23 35zM232 230c5 7 34 8 37 -17c4 -35 -24 -57 -24 -57s7 -2 23 2c17 4 43 29 43 70s-21 66 -41 62s-38 -60 -38 -60z" />
- <glyph glyph-name="ion-logo-markdown" unicode="&#xf241;" horiz-adv-x="448"
-d="M416 352c18 0 32 -14 32 -32v-256c0 -18 -14 -32 -32 -32h-384c-18 0 -32 14 -32 32v256c0 18 14 32 32 32h384zM252 96v0v192h-56l-42 -68l-42 68h-56v-192h56v96l42 -54l42 54v-96h56zM336 96v0l70 96h-42v96h-56v-96h-42z" />
- <glyph glyph-name="ion-md-arrow-up" unicode="&#xf28c;" horiz-adv-x="342"
-d="M192 21h-42v260l-120 -119l-30 30l171 171l171 -171l-30 -31l-120 120v-260z" />
- <glyph glyph-name="ion-ios-backspace" unicode="&#xf11d;"
-d="M347 352c38 0 69 -31 69 -69v-180c0 -38 -31 -71 -69 -71h-165c-45 0 -64 26 -102 64s-72 76 -72 76c-5 6 -8 13 -8 21s3 15 8 21c0 0 43 45 72 74s55 64 102 64h165zM329 139l-52 53l52 53c6 6 6 16 0 22s-16 6 -22 0l-53 -52l-53 52c-6 6 -15 7 -22 0s-6 -16 0 -22
-s52 -53 52 -53s-45 -46 -52 -53s-6 -16 0 -22s16 -6 22 0l53 52l53 -52c6 -6 16 -6 22 0s6 16 0 22z" />
- <glyph glyph-name="ion-md-hammer" unicode="&#xf303;" horiz-adv-x="448"
-d="M442 50c8 -6 8 -21 -2 -29l-47 -47c-8 -8 -20 -8 -28 0l-215 268c-14 4 -32 -2 -39 -6l-15 -14l10 -10c2 -2 2 -7 0 -9l-36 -36c-2 -2 -7 -2 -9 0l-59 59c-2 2 -2 6 0 8l37 37c2 2 6 2 8 0l4 -4l20 17s-2 11 5 20s17 21 25 29s36 37 74 56s65 27 97 27v-32
-s-30 -18 -48 -32c-17 -14 -26 -72 -26 -72z" />
- <glyph glyph-name="ion-md-cloud-done" unicode="&#xf2c3;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM197 85l141 141l-30 30l-111 -111l-44 45l-30 -30z" />
- <glyph glyph-name="ion-md-business" unicode="&#xf1a4;"
-d="M213 299h203v-299h-416v384h213v-85zM85 43v42h-42v-42h42zM85 128v43h-42v-43h42zM85 213v43h-42v-43h42zM85 299v42h-42v-42h42zM170 43v42h-42v-42h42zM170 128v43h-42v-43h42zM170 213v43h-42v-43h42zM170 299v42h-42v-42h42zM373 43v213h-160v-43h43v-42h-43v-43h43
-v-43h-43v-42h160zM336 213v-42h-43v42h43zM336 128v-43h-43v43h43z" />
- <glyph glyph-name="ion-ios-exit" unicode="&#xf177;"
-d="M96 312c0 22 18 40 40 40h240c22 0 40 -18 40 -40v-240c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v107h180l-47 -48c-5 -5 -5 -13 0 -18s13 -5 18 0l69 70v0c1 1 2 2 3 4s1 3 1 5c0 3 -2 7 -4 9l-69 70c-5 5 -13 5 -18 0s-5 -13 0 -18l47 -48h-180v107zM13 205h83
-v-26h-83c-7 0 -13 6 -13 13s6 13 13 13z" />
- <glyph glyph-name="ion-md-send" unicode="&#xf376;"
-d="M0 0v149l298 43l-298 43v149l416 -192z" />
- <glyph glyph-name="ion-ios-ice-cream" unicode="&#xf19a;" horiz-adv-x="288"
-d="M109 42c0 2 1 3 3 2l12 -7c2 -2 2 -5 0 -7l-7 -4c-1 -1 -3 0 -3 1zM175 27c0 -1 -2 -2 -3 -1l-7 4c-2 2 -2 5 0 7l12 7c2 1 4 0 3 -2zM77 206c2 1 3 1 5 0c10 -9 22 -16 36 -19c4 -1 5 -5 2 -7l-37 -23l-7 -4c-1 -1 -3 0 -3 1l-4 12l-9 29c0 1 0 2 1 2c6 2 12 5 16 9z
-M81 137c1 1 3 1 4 0l39 -24c2 -2 2 -5 0 -7l-28 -16c-1 -1 -3 0 -3 1l-14 45zM146 99l42 -26v0c1 -1 1 -2 0 -3v0l-42 -26c-1 -1 -3 -1 -4 0l-41 26h-1c-1 1 -1 2 0 3v1l42 25c1 1 3 1 4 0zM185 151c2 -2 2 -4 0 -6l-39 -24c-1 -1 -3 -1 -4 0l-38 24c-2 2 -2 4 0 6l38 24
-c1 1 3 1 4 0zM206 206c2 1 4 1 6 0c4 -4 11 -7 18 -9l-10 -31l-4 -12c0 -1 -2 -2 -3 -1l-7 4l-37 23c-3 2 -3 6 1 7c14 3 26 10 36 19zM121 6c-1 2 -1 3 1 4l20 13c1 1 3 1 4 0l20 -13c2 -1 3 -2 2 -4l-2 -5s-7 -19 -22 -19c-14 0 -22 19 -22 19zM165 106c-3 2 -3 5 0 7
-l39 24c1 1 3 1 4 0h1c1 0 1 -2 1 -3l-15 -44c0 -1 -2 -2 -3 -1zM264 280c3 3 7 3 10 0c8 -7 14 -18 14 -30c0 -22 -18 -40 -40 -40c-11 0 -29 4 -37 12c-2 1 -3 1 -5 0c-15 -13 -36 -20 -62 -20s-47 7 -62 20c-2 1 -3 1 -5 0c-9 -8 -26 -12 -37 -12c-22 0 -40 18 -40 40
-c0 13 7 25 17 32c2 1 4 1 5 0c7 -7 15 -11 20 -13c2 -1 3 1 2 3l-4 6c-6 9 -8 19 -6 29c9 54 54 95 110 95s102 -41 111 -94c2 -10 -1 -21 -7 -30l-4 -6c-1 -2 0 -4 2 -3c5 2 12 6 18 11z" />
- <glyph glyph-name="ion-md-resize" unicode="&#xf36b;"
-d="M250 400h166v-166l-65 64l-249 -249l64 -65h-166v166l65 -64l249 249z" />
- <glyph glyph-name="ion-ios-camera" unicode="&#xf3f6;" horiz-adv-x="384"
-d="M134 173c0 32 26 57 58 57s58 -25 58 -57s-26 -57 -58 -57s-58 25 -58 57zM354 288c18 0 30 -13 30 -31v-176c0 -18 -12 -33 -30 -33h-320c-18 0 -34 15 -34 33v176c0 18 16 31 34 31h7v8c0 4 4 8 8 8h26c4 0 8 -4 8 -8v-8h4c4 0 9 2 12 5c28 32 40 43 52 43h85
-c12 0 23 -11 51 -43c3 -3 7 -5 12 -5h55zM196 88c44 2 79 37 81 81c2 50 -39 91 -89 89c-44 -2 -79 -37 -81 -81c-2 -50 39 -91 89 -89zM288 230c7 0 13 6 13 13s-6 13 -13 13s-13 -6 -13 -13s6 -13 13 -13z" />
- <glyph glyph-name="ion-md-information" unicode="&#xf312;" horiz-adv-x="48"
-d="M0 76v137h48v-137h-48zM0 260v48h48v-48h-48z" />
- <glyph glyph-name="ion-md-bluetooth" unicode="&#xf29a;" horiz-adv-x="286"
-d="M286 288l-97 -96l97 -96l-128 -128h-23v170l-103 -103l-32 32l126 125l-126 125l32 32l103 -103v170h23zM180 330v-84l42 42zM222 96l-42 42v-84z" />
- <glyph glyph-name="ion-ios-filing" unicode="&#xf429;"
-d="M376 384c22 0 40 -18 40 -40v-304c0 -22 -18 -40 -40 -40h-336c-22 0 -40 18 -40 40v304c0 22 18 40 40 40h336zM388 208v132c0 9 -7 16 -16 16h-328c-9 0 -16 -7 -16 -16v-132c0 -9 7 -16 16 -16h87c7 0 13 -5 15 -11c4 -12 14 -21 26 -21h72c12 0 22 9 26 21
-c2 6 8 11 15 11h87c9 0 16 7 16 16zM338 292h-260c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h260c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14zM338 228h-260c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h260c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14z" />
- <glyph glyph-name="ion-ios-thermometer" unicode="&#xf252;" horiz-adv-x="192"
-d="M150 143c25 -17 42 -46 42 -79c0 -53 -43 -96 -96 -96s-96 43 -96 96c0 33 17 62 42 79c4 3 7 8 7 13v214c0 26 21 46 47 46s47 -20 47 -46v-214c0 -5 3 -10 7 -13zM96 3c32 0 58 27 58 59c0 25 -16 47 -38 55c-3 1 -6 5 -6 8v143c0 8 -6 14 -14 14v0
-c-8 0 -15 -6 -15 -14v-143c0 -3 -2 -7 -5 -8c-22 -8 -38 -30 -38 -55c0 -32 26 -59 58 -59z" />
- <glyph glyph-name="ion-logo-ionic" unicode="&#xf150;"
-d="M208 287c52 0 95 -43 95 -95s-43 -95 -95 -95s-95 43 -95 95s43 95 95 95zM301 322c0 24 19 43 43 43s43 -19 43 -43s-19 -44 -43 -44s-43 20 -43 44zM397 278c12 -27 19 -56 19 -86c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208c34 0 65 -8 95 -23l4 -2
-l-3 -3c-8 -7 -15 -15 -19 -25l-1 -3l-3 2c-23 11 -48 16 -73 16c-94 0 -170 -76 -170 -170s76 -170 170 -170s170 76 170 170c0 22 -4 44 -13 65l-1 3l2 1c10 4 20 10 27 18l3 3z" />
- <glyph glyph-name="ion-ios-gift" unicode="&#xf191;"
-d="M384 312c18 0 32 -14 32 -32v-20c0 -2 -2 -4 -4 -4h-408c-2 0 -4 2 -4 4v20c0 18 14 32 32 32h84c-12 11 -20 27 -20 44c0 33 28 60 63 60c21 0 38 -9 49 -27c11 18 28 27 49 27c35 0 63 -27 63 -60c0 -17 -8 -33 -20 -44h84zM257 388c-19 0 -34 -16 -34 -64h34
-s34 14 34 32s-15 32 -34 32zM159 388c-19 0 -34 -14 -34 -32s15 -32 34 -32h34c0 48 -15 64 -34 64zM16 222c0 4 4 8 8 8h170v-262h-146c-18 0 -32 14 -32 32v222zM392 230c4 0 8 -4 8 -8v-222c0 -18 -14 -32 -32 -32h-146v262h170z" />
- <glyph glyph-name="ion-md-help-circle-outline" unicode="&#xf16d;"
-d="M208 358c-44 0 -86 -18 -117 -49s-49 -73 -49 -117s18 -86 49 -117s73 -49 117 -49s86 18 117 49s49 73 49 117s-18 86 -49 117s-73 49 -117 49zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM187 67v42h42v-42h-42zM229 130
-h-42c0 67 63 62 63 104c0 23 -19 42 -42 42s-42 -20 -42 -42h-41c0 46 37 83 83 83s83 -37 83 -83c0 -52 -62 -58 -62 -104z" />
- <glyph glyph-name="ion-ios-battery-full" unicode="&#xf122;" horiz-adv-x="480"
-d="M380 304c26 0 48 -22 48 -48v-128c0 -26 -22 -48 -48 -48h-332c-26 0 -48 22 -48 48v128c0 26 22 48 48 48h332zM400 128v128c0 11 -9 20 -20 20h-332c-11 0 -20 -9 -20 -20v-128c0 -11 9 -20 20 -20h332c11 0 20 9 20 20zM448 243c16 0 32 -27 32 -51s-16 -51 -32 -51
-v102zM368 256c7 0 12 -5 12 -12v-104c0 -7 -5 -12 -12 -12h-308c-7 0 -12 5 -12 12v104c0 7 5 12 12 12h308z" />
- <glyph glyph-name="ion-ios-radio-button-off" unicode="&#xf1f6;"
-d="M208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-md-play" unicode="&#xf357;" horiz-adv-x="320"
-d="M0 396l320 -204l-320 -204v408z" />
- <glyph glyph-name="ion-md-close" unicode="&#xf2c0;" horiz-adv-x="298"
-d="M298 311l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" />
- <glyph glyph-name="ion-ios-bookmark" unicode="&#xf12e;" horiz-adv-x="256"
-d="M0 368c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-380c0 -3 -3 -5 -6 -3l-117 92c-3 2 -7 2 -10 0l-117 -92c-3 -2 -6 0 -6 3v380z" />
- <glyph glyph-name="ion-md-play-circle" unicode="&#xf174;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM166 98l125 94l-125 94v-188z" />
- <glyph glyph-name="ion-md-color-palette" unicode="&#xf2d2;" horiz-adv-x="384"
-d="M192 384c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-38c-18 0 -32 -14 -32 -32c0 -9 3 -17 8 -22s9 -12 9 -21c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192zM75 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 277
-c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM245 277c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-ios-arrow-dropleft-circle" unicode="&#xf129;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM251 111l-79 81l81 81c8 8 8 19 0 27s-19 8 -27 0l-95 -95c-7 -7 -8 -19 -1 -27l94 -94c4 -4 9 -6 14 -6s9 2 13 6c8 8 8 19 0 27z" />
- <glyph glyph-name="ion-md-battery-charging" unicode="&#xf294;" horiz-adv-x="224"
-d="M194 371c16 0 30 -14 30 -30v-343c0 -16 -13 -30 -30 -30h-164c-16 0 -30 13 -30 30v343c0 16 14 30 30 30h37v45h90v-45h37zM90 13l89 168h-45v123l-89 -168h45v-123z" />
- <glyph glyph-name="ion-md-share-alt" unicode="&#xf378;" horiz-adv-x="384"
-d="M384 200l-160 -147v88c-107 0 -171 -34 -224 -109c21 107 75 214 224 235v85z" />
- <glyph glyph-name="ion-logo-xing" unicode="&#xf10f;" horiz-adv-x="426"
-d="M271 144v-1l99 -175h-103c-1 0 -2 0 -2 1l-99 173v2l156 272h104zM179 232v-1l-81 -134c0 -1 0 -1 -1 -1h-97l81 135v1l-59 104h96c1 0 2 0 2 -1z" />
- <glyph glyph-name="ion-md-unlock" unicode="&#xf39e;" horiz-adv-x="320"
-d="M280 262c22 0 40 -18 40 -40v-200c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v200c0 22 18 40 40 40h182v40v0c0 34 -28 62 -62 62s-62 -28 -62 -62h-38c0 55 45 100 100 100s100 -45 100 -100v-40h20zM160 80c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40
-s18 -40 40 -40z" />
- <glyph glyph-name="ion-logo-apple" unicode="&#xf229;" horiz-adv-x="320"
-d="M238 294v0c25 0 52 -14 71 -39c-63 -36 -53 -128 11 -153c-9 -20 -13 -28 -24 -46c-16 -25 -37 -56 -65 -56h-1c-24 0 -31 16 -63 16v0c-33 0 -40 -16 -64 -16h-1c-28 0 -48 28 -64 53c-44 69 -48 150 -21 193c19 30 50 48 78 48c29 0 47 -16 71 -16c23 0 38 16 72 16z
-M230 384v0c3 -23 -6 -46 -18 -62c-13 -17 -35 -30 -56 -30h-1c-4 22 6 44 18 60c14 17 37 31 57 32z" />
- <glyph glyph-name="ion-ios-square" unicode="&#xf21a;" horiz-adv-x="320"
-d="M292 32h-264c-15 0 -28 13 -28 28v264c0 15 13 28 28 28h264c15 0 28 -13 28 -28v-264c0 -15 -13 -28 -28 -28z" />
- <glyph glyph-name="ion-ios-albums" unicode="&#xf3ca;" horiz-adv-x="480"
-d="M445 287c19 0 35 -16 35 -35v-232c0 -19 -16 -35 -35 -35h-410c-19 0 -35 16 -35 35v232c0 19 16 35 35 35h410zM418 315h-356c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h356c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14zM387 371h-294c-7 0 -13 6 -13 13v2c0 7 6 13 13 13h294
-c7 0 13 -6 13 -13v-2c0 -7 -6 -13 -13 -13z" />
- <glyph glyph-name="ion-md-star" unicode="&#xf384;" horiz-adv-x="404"
-d="M202 75l-125 -75l33 142l-110 96l145 12l57 134l57 -134l145 -12l-110 -96l33 -142z" />
- <glyph glyph-name="ion-md-bookmark" unicode="&#xf29f;" horiz-adv-x="288"
-d="M248 384c22 0 40 -18 40 -40v-344l-144 64l-144 -64v344c0 22 18 40 40 40h208z" />
- <glyph glyph-name="ion-md-woman" unicode="&#xf3aa;" horiz-adv-x="192"
-d="M30 299c3 12 17 33 42 34h48c24 -1 38 -22 42 -34l29 -104c6 -23 -21 -32 -27 -10l-26 96h-9l46 -169h-43v-127c0 -23 -31 -23 -31 0v127h-10v-127c0 -23 -32 -23 -32 0v127h-42l45 169h-7l-27 -96c-7 -21 -33 -13 -27 10zM133 379c0 -21 -17 -37 -37 -37s-37 16 -37 37
-s17 37 37 37s37 -16 37 -37z" />
- <glyph glyph-name="ion-ios-construct" unicode="&#xf15f;" horiz-adv-x="480"
-d="M364 384v0v0zM259 390c6 -4 18 -12 10 -12c0 0 -35 6 -60 -15c-18 -16 -30 -31 -31 -53s7 -34 35 -62l5 3c1 1 3 1 4 1c2 0 6 -1 7 -2c0 0 -5 5 14 -14l-50 -47c-18 18 -13 13 -13 13c-2 2 -3 6 -1 10l4 7c-25 25 -39 37 -51 40c-4 1 -8 2 -12 2c-10 0 -17 -3 -21 -7
-s-12 -16 -5 -23l12 -12c2 -2 2 -6 0 -8l-33 -35c-1 -1 -3 -1 -4 -1s-3 0 -4 1l-63 64c-2 2 -2 5 0 7l34 34c1 1 3 2 4 2c0 0 16 -8 24 0s0 20 6 29s16 19 23 26s35 34 81 53c16 7 33 9 47 9c15 0 29 -4 38 -10zM446 48c2 -2 2 -6 0 -8l-55 -54c-1 -1 -3 -2 -4 -2s-3 1 -4 2
-c0 0 -56 66 -114 127l47 51c61 -58 130 -116 130 -116zM463 323c13 -13 18 -29 17 -41s-6 -36 -30 -60c-17 -17 -45 -30 -72 -30c-11 0 -22 3 -32 8c-2 1 -6 2 -9 2s-7 -1 -11 -5c-2 -2 -9 -10 -21 -22c-3 -4 -7 -8 -11 -12c-8 -8 -17 -17 -26 -27c-4 -4 -7 -8 -11 -12
-c-54 -57 -119 -127 -119 -127c-8 -9 -18 -13 -29 -13s-24 5 -32 13c-17 17 -18 45 0 61c0 0 70 65 127 119c4 4 8 7 12 11c10 9 19 18 27 26c4 4 7 8 11 11c13 12 21 20 23 21c7 8 5 15 3 20c-19 44 2 83 22 104c21 22 48 29 60 30h2c12 0 28 -6 39 -17l-53 -53l10 -51
-l51 -9zM121 22c5 5 5 14 0 20c-5 5 -13 5 -19 0c-5 -5 -5 -14 0 -20c5 -5 13 -5 19 0z" />
- <glyph glyph-name="ion-logo-android" unicode="&#xf225;" horiz-adv-x="352"
-d="M64 180v76h224v-76v-90c0 -7 -4 -14 -11 -14h-28v-52c0 -13 -11 -24 -24 -24v0h-1c-6 0 -10 2 -14 5c-5 4 -9 11 -9 19v52h-49v-52c0 -13 -11 -24 -24 -24s-24 11 -24 24v52h-29c-7 0 -11 7 -11 14v90zM328 272c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24
-s-24 11 -24 24v96c0 13 11 24 24 24zM24 272c13 0 24 -11 24 -24v-96c0 -13 -11 -24 -24 -24s-24 11 -24 24v96c0 13 11 24 24 24zM231 359c48 -21 56 -72 57 -87h-224c1 15 8 66 56 87l-18 22c0 1 0 1 1 2s3 1 3 1l19 -23c14 5 31 9 51 9s36 -4 50 -9l20 23c0 1 1 0 2 -1
-l2 -2zM127 309c8 0 13 6 13 13s-6 14 -13 14c-8 0 -14 -7 -14 -14s7 -13 14 -13zM225 309c7 0 14 6 14 13s-7 14 -14 14c-8 0 -13 -7 -13 -14s6 -13 13 -13z" />
- <glyph glyph-name="ion-md-radio-button-on" unicode="&#xf361;"
-d="M208 296c57 0 104 -47 104 -104s-47 -104 -104 -104s-104 47 -104 104s47 104 104 104zM208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166z" />
- <glyph glyph-name="ion-ios-cloud-download" unicode="&#xf408;" horiz-adv-x="512"
-d="M437 282c43 -8 75 -47 75 -92c0 -50 -41 -94 -91 -94h-152v141c0 7 -6 13 -13 13s-13 -6 -13 -13v-141h-152c-50 0 -91 44 -91 94c0 41 26 80 66 93c1 39 33 74 72 74c10 0 19 -3 27 -6c27 39 72 65 123 65c77 0 141 -59 149 -134zM243 12v84h26v-84l48 47c5 5 13 5 18 0
-s5 -13 0 -18l-70 -69v0c-1 -1 -2 -2 -4 -3s-3 -1 -5 -1c-3 0 -7 2 -9 4l-70 69c-5 5 -5 13 0 18s13 5 18 0z" />
- <glyph glyph-name="ion-md-heart-dislike" unicode="&#xf167;"
-d="M4 371l24 25l384 -384l-24 -24l-92 92c-18 -17 -37 -34 -58 -53l-30 -27l-30 27c-107 98 -178 162 -178 242c0 30 11 57 29 77zM416 269c0 -49 -26 -92 -72 -141l-254 254c8 2 16 2 24 2c36 0 71 -17 94 -44c23 27 58 44 94 44c64 0 114 -50 114 -115z" />
- <glyph glyph-name="ion-md-leaf" unicode="&#xf319;" horiz-adv-x="320"
-d="M320 160c0 -119 -81 -140 -128 -143v-49h-64v49c-47 3 -128 24 -128 143c0 167 160 256 160 256s160 -89 160 -256z" />
- <glyph glyph-name="ion-md-people" unicode="&#xf343;" horiz-adv-x="448"
-d="M305 216c-34 0 -61 27 -61 60s27 60 61 60s62 -27 62 -60s-28 -60 -62 -60zM143 216c-34 0 -62 27 -62 60s28 60 62 60s61 -27 61 -60s-27 -60 -61 -60zM143 172c48 0 145 -23 145 -70v-54h-288v54c0 47 95 70 143 70zM305 161c48 0 143 -12 143 -59v-54h-128v54
-c0 30 -9 41 -32 58c7 1 11 1 17 1z" />
- <glyph glyph-name="ion-ios-thumbs-down" unicode="&#xf254;" horiz-adv-x="384"
-d="M17 325c2 2 4 5 3 8c0 1 -1 2 -1 3c-3 6 -5 13 -1 23c11 26 45 33 76 37c17 2 36 4 56 4c38 0 81 -4 113 -8c22 -3 34 -7 46 -12c16 -6 31 -12 67 -12c5 0 8 -3 8 -8v-160c0 -4 -4 -8 -8 -8c-6 0 -15 -3 -22 -10c-3 -3 -9 -11 -14 -19c-8 -12 -17 -25 -26 -33
-c-2 -2 -6 -5 -10 -9c-17 -15 -49 -43 -57 -60c-5 -11 -9 -30 -12 -42c-4 -15 -3 -23 -6 -27c-5 -6 -16 -8 -28 -8s-20 9 -26 19c-12 21 -13 57 -3 90c5 17 11 28 15 36c3 6 5 11 5 13c-1 5 -4 6 -17 5c-3 0 -11 -1 -21 -3c-25 -4 -63 -10 -81 -11c-26 -2 -36 0 -46 12
-c-8 9 -13 24 -8 38c2 6 0 14 -4 18c-5 5 -10 11 -10 23c0 13 3 21 6 26c2 3 3 6 2 10l-1 1c0 1 0 2 -1 3c-5 6 -11 15 -11 29c0 15 9 26 17 32z" />
- <glyph glyph-name="ion-md-clipboard" unicode="&#xf2bd;" horiz-adv-x="384"
-d="M341 368c23 0 43 -20 43 -43v-314c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v314c0 23 20 43 43 43h87c7 28 32 48 62 48s55 -20 62 -48h87zM192 368c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM344 8v320h-40v-72h-224v72h-40v-320h304z" />
- <glyph glyph-name="ion-md-images" unicode="&#xf30f;" horiz-adv-x="448"
-d="M426 308c13 -1 23 -12 22 -24l-14 -263c-1 -13 -12 -22 -25 -21l-330 16c-13 1 -23 10 -22 23l2 46l-15 -1c-12 -1 -22 7 -23 18l-21 236c-1 11 7 21 19 22l296 24c12 1 22 -7 23 -18l5 -54zM71 302c1 12 11 22 24 22l219 -11l-2 31h-1v1c-1 5 -5 8 -10 8l-261 -22
-c-5 0 -9 -4 -10 -9v0v-1l16 -178l18 25zM405 66l10 199h-1c0 6 -4 10 -10 10l-291 14c-6 0 -11 -4 -12 -9v0l-10 -199l122 131l69 -81l38 34zM352 192c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32z" />
- <glyph glyph-name="ion-ios-star-outline" unicode="&#xf4b2;" horiz-adv-x="448"
-d="M431 256c9 0 17 -7 17 -16c0 -4 -2 -8 -5 -11l-3 -2l-120 -86l46 -135c2 -7 1 -14 -5 -18c-3 -2 -6 -4 -9 -4s-7 2 -10 4l-118 84l-118 -84c-3 -2 -7 -4 -10 -4s-6 2 -9 4c-6 4 -7 12 -5 18l46 135l-121 85c-5 4 -7 7 -7 11v3c0 9 7 16 16 16v0h148l45 133
-c2 6 8 11 15 11s13 -5 15 -11l45 -133h147zM304 164l79 57c3 2 2 7 -2 7h-97v0c-12 0 -23 8 -27 19l-29 89c-1 4 -7 4 -8 0l-30 -89c-4 -11 -14 -19 -26 -19h-99c-4 0 -5 -5 -2 -7l81 -57c10 -7 14 -20 10 -32l-30 -88c-1 -4 3 -6 6 -4l78 55c5 4 10 5 16 5s11 -1 16 -5
-l78 -56c3 -2 7 1 6 5l-30 88c-4 12 0 25 10 32z" />
- <glyph glyph-name="ion-md-reverse-camera" unicode="&#xf36f;" horiz-adv-x="448"
-d="M408 352c22 0 40 -18 40 -40v-272c0 -22 -18 -40 -40 -40h-368c-22 0 -40 18 -40 40v272c0 22 18 40 40 40h88l32 32h128l32 -32h88zM336 181v0v99l-33 -33c-20 20 -48 33 -79 33c-62 0 -112 -50 -112 -112s50 -112 112 -112c52 0 95 34 108 81h-30
-c-12 -32 -42 -53 -78 -53c-46 0 -84 38 -84 84s38 84 84 84c23 0 44 -11 59 -26l-45 -45h98z" />
- <glyph glyph-name="ion-md-american-football" unicode="&#xf277;" horiz-adv-x="448"
-d="M0 192c14 35 36 66 64 91v-182c-28 25 -50 56 -64 91zM448 192c-14 -35 -36 -66 -64 -91v182c28 -25 50 -56 64 -91zM224 343c47 0 91 -14 128 -37v-77v-21v-32v-28v-70c-37 -23 -81 -37 -128 -37s-91 14 -128 37v70v28v32v21v77c37 23 81 37 128 37zM320 208v32h-32v-32
-h-48v32h-32v-32h-48v32h-32v-32v-32v-32h32v32h48v-32h32v32h48v-32h32v32v32z" />
- <glyph glyph-name="ion-ios-calendar" unicode="&#xf3f4;"
-d="M376 352c22 0 40 -18 40 -40v-272c0 -22 -18 -40 -40 -40h-336c-22 0 -40 18 -40 40v272c0 22 18 40 40 40h40v-24c0 -4 4 -8 8 -8h16c4 0 8 4 8 8v24h192v-24c0 -4 4 -8 8 -8h16c4 0 8 4 8 8v24h40zM384 52v180c0 4 -4 8 -8 8h-336c-4 0 -8 -4 -8 -8v-180
-c0 -11 9 -20 20 -20h312c11 0 20 9 20 20zM112 376v-24h-32v24c0 4 4 8 8 8h16c4 0 8 -4 8 -8zM336 376v-24h-32v24c0 4 4 8 8 8h16c4 0 8 -4 8 -8z" />
- <glyph glyph-name="ion-md-more" unicode="&#xf1c9;" horiz-adv-x="80"
-d="M80 312c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40zM80 72c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40zM80 192c0 -22 -18 -40 -40 -40s-40 18 -40 40s18 40 40 40s40 -18 40 -40z" />
- <glyph glyph-name="ion-md-eye" unicode="&#xf2e9;" horiz-adv-x="448"
-d="M224 343c102 0 188 -62 224 -151c-36 -89 -122 -151 -224 -151s-188 62 -224 151c36 89 122 151 224 151zM224 91c56 0 102 46 102 101s-46 101 -102 101s-102 -46 -102 -101s46 -101 102 -101zM224 252c34 0 61 -27 61 -60s-27 -60 -61 -60s-61 27 -61 60s27 60 61 60z
-" />
- <glyph glyph-name="ion-md-heart-empty" unicode="&#xf1a1;"
-d="M302 384c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242l-30 -27l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44zM221 55c50 46 94 86 123 122c28 35 40 63 40 92c0 23 -9 44 -24 59s-35 24 -58 24
-c-26 0 -53 -12 -70 -32l-24 -30l-24 30c-17 20 -44 32 -70 32c-23 0 -43 -9 -58 -24s-24 -36 -24 -59c0 -29 12 -57 40 -92c29 -36 73 -76 123 -122l4 -4l9 -8l9 8z" />
- <glyph glyph-name="ion-md-arrow-round-back" unicode="&#xf288;" horiz-adv-x="352"
-d="M321 224c17 0 31 -14 31 -32s-14 -32 -31 -32h-214l83 -79c12 -12 12 -34 0 -46s-31 -12 -43 0l-138 134c-6 6 -9 14 -9 23v0c0 9 3 17 9 23l138 134c12 12 31 12 43 0s12 -34 0 -46l-83 -79h214z" />
- <glyph glyph-name="ion-md-airplane" unicode="&#xf15a;" horiz-adv-x="384"
-d="M384 112l-160 48v-114l48 -31v-31l-80 16l-80 -16v31l48 31v114l-160 -48v40l160 104v113c0 18 15 31 32 31s32 -13 32 -31v-113l160 -104v-40z" />
- <glyph glyph-name="ion-md-fastforward" unicode="&#xf2ea;" horiz-adv-x="448"
-d="M448 192l-218 -146v292zM0 338l218 -146l-218 -146v292z" />
- <glyph glyph-name="ion-ios-cloud-upload" unicode="&#xf40b;" horiz-adv-x="512"
-d="M437 282c43 -8 75 -47 75 -92c0 -50 -41 -94 -91 -94h-152v142l48 -47c5 -5 13 -5 18 0s5 13 0 18l-70 69c-2 2 -6 4 -9 4c-2 0 -3 0 -5 -1s-3 -2 -4 -3v0l-70 -69c-5 -5 -5 -13 0 -18s13 -5 18 0l48 47v-142h-152c-50 0 -91 44 -91 94c0 41 26 80 66 93
-c1 39 33 74 72 74c10 0 19 -3 27 -6c27 39 72 65 123 65c77 0 141 -59 149 -134zM243 -19v115h26v-115c0 -7 -6 -13 -13 -13s-13 6 -13 13z" />
- <glyph glyph-name="ion-ios-arrow-dropup" unicode="&#xf116;"
-d="M100 147c-8 8 -8 19 0 27l95 95c7 7 19 8 27 1l94 -94c4 -4 6 -9 6 -14s-2 -9 -6 -13c-8 -8 -19 -8 -27 0l-81 79l-81 -81c-8 -8 -19 -8 -27 0zM208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208zM208 16c47 0 91 19 124 52
-s52 77 52 124s-19 91 -52 124s-77 52 -124 52s-91 -19 -124 -52s-52 -77 -52 -124s19 -91 52 -124s77 -52 124 -52z" />
- <glyph glyph-name="ion-md-pizza" unicode="&#xf354;" horiz-adv-x="384"
-d="M343 318c11 -4 13 -13 10 -20l-161 -330s-156 320 -161 330s2 17 10 20c43 18 97 28 151 28s105 -9 151 -28zM122 244c19 0 32 14 32 32s-13 32 -32 32s-32 -14 -32 -32s13 -32 32 -32zM192 101c19 0 32 14 32 32s-13 32 -32 32s-32 -14 -32 -32s13 -32 32 -32zM262 224
-c19 0 32 14 32 32s-13 32 -32 32s-32 -14 -32 -32s13 -32 32 -32zM373 382c6 -2 11 -6 11 -13l-10 -24c-3 -5 -8 -9 -15 -9c-2 0 -3 1 -7 2c-45 18 -103 30 -160 30s-111 -11 -160 -30c-3 -1 -5 -2 -7 -2c-6 0 -12 4 -15 9l-10 24c0 8 6 12 11 14c53 21 117 33 181 33
-s129 -13 181 -34z" />
- <glyph glyph-name="ion-ios-code-working" unicode="&#xf156;" horiz-adv-x="384"
-d="M382 196c1 -1 2 -2 2 -4s-1 -3 -2 -4l-114 -109c-1 -1 -2 -2 -4 -2s-3 1 -4 2l-14 13c-1 1 -2 2 -2 4s1 3 2 4l96 92l-96 92c-1 1 -2 2 -2 4s1 3 2 4l14 13c1 1 3 2 4 2s3 -1 4 -2zM42 192l96 -92c1 -1 2 -2 2 -4s-1 -3 -2 -4l-14 -13c-1 -1 -2 -2 -4 -2c-1 0 -3 1 -4 2
-l-114 109c-1 1 -2 2 -2 4s1 3 2 4l114 109c1 1 3 2 4 2s3 -1 4 -2l14 -13c1 -1 2 -2 2 -4s-1 -3 -2 -4zM170 192c0 12 10 22 22 22s22 -10 22 -22s-10 -22 -22 -22s-22 10 -22 22zM106 192c0 12 10 22 22 22s22 -10 22 -22s-10 -22 -22 -22s-22 10 -22 22zM234 192
-c0 12 10 22 22 22s22 -10 22 -22s-10 -22 -22 -22s-22 10 -22 22z" />
- <glyph glyph-name="ion-logo-designernews" unicode="&#xf232;" horiz-adv-x="448"
-d="M258 303l1 -53l-64 102zM297 352l151 -118v-202h-248l-200 157v0h63c46 0 77 33 77 82c0 20 -5 37 -15 51l-3 3l37 -29v-107h40l-2 99l64 -99h36v83v80zM98 270c0 -28 -14 -44 -40 -44h-19v89h19c26 0 40 -16 40 -45z" />
- <glyph glyph-name="ion-logo-dropbox" unicode="&#xf234;" horiz-adv-x="384"
-d="M113 371l79 -66l-114 -71l-78 63zM0 172l78 62l114 -70l-79 -66zM192 164l114 70l78 -62l-113 -74zM384 297l-78 -63l-114 71l79 66zM192 150l80 -66l34 22v-25l-114 -68l-114 68v25l34 -22z" />
- <glyph glyph-name="ion-ios-arrow-round-forward" unicode="&#xf119;" horiz-adv-x="288"
-d="M184 284c5 5 13 5 18 0l82 -83c2 -2 4 -6 4 -9c0 -2 0 -3 -1 -5s-2 -3 -3 -4v0l-82 -83c-5 -5 -13 -5 -18 0s-6 13 -1 18l61 61h-231c-7 0 -13 6 -13 13s6 13 13 13h231l-60 61c-5 5 -5 13 0 18z" />
- <glyph glyph-name="ion-md-car" unicode="&#xf2b2;" horiz-adv-x="384"
-d="M339 331l45 -118v-160c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v11h-256v-11c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v160l45 118c4 13 16 21 30 21h234c14 0 26 -8 30 -21zM75 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 128
-c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM43 235h298l-32 85h-234z" />
- <glyph glyph-name="ion-ios-swap" unicode="&#xf21f;" horiz-adv-x="448"
-d="M357 182c-5 5 -5 13 0 18l47 48h-225c-7 0 -13 6 -13 13s6 13 13 13h225l-47 48c-5 5 -5 13 0 18s13 5 18 0l69 -70v0c1 -1 2 -2 3 -4s1 -3 1 -5c0 -3 -2 -7 -4 -9l-69 -70c-5 -5 -13 -5 -18 0zM91 44c-5 -5 -13 -5 -18 0l-69 70c-2 2 -4 6 -4 9c0 2 0 3 1 5s2 3 3 4v0
-l69 70c5 5 13 5 18 0s5 -13 0 -18l-47 -48h225c7 0 13 -6 13 -13s-6 -13 -13 -13h-225l47 -48c5 -5 5 -13 0 -18z" />
- <glyph glyph-name="ion-md-git-commit" unicode="&#xf2fb;" horiz-adv-x="448"
-d="M448 224v-64h-100c-14 -55 -64 -96 -124 -96s-109 41 -123 96h-101v64h101c14 55 63 96 123 96s110 -41 124 -96h100zM224 112c44 0 80 36 80 80s-36 80 -80 80s-79 -36 -79 -80s35 -80 79 -80z" />
- <glyph glyph-name="ion-md-person-add" unicode="&#xf344;" horiz-adv-x="480"
-d="M288 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM288 144c64 0 192 -32 192 -96v-48h-384v48c0 64 128 96 192 96zM96 224h64v-32h-64v-64h-32v64h-64v32h64v64h32v-64z" />
- <glyph glyph-name="ion-ios-moon" unicode="&#xf468;" horiz-adv-x="352"
-d="M321 94c9 0 18 0 26 2c3 1 6 -3 4 -6c-5 -8 -10 -15 -16 -22c-35 -42 -87 -68 -145 -68c-105 0 -190 86 -190 193c0 86 55 159 133 184c12 4 22 6 28 7c3 1 5 -3 3 -6c-4 -7 -10 -17 -13 -24c-11 -24 -18 -50 -18 -78c0 -49 19 -95 53 -129s79 -53 127 -53h8z" />
- <glyph glyph-name="ion-ios-business" unicode="&#xf1a3;" horiz-adv-x="320"
-d="M50 368c-10 0 -18 8 -18 18v0c0 10 8 18 18 18h220c10 0 18 -8 18 -18v0c0 -10 -8 -18 -18 -18h-220zM302 348c10 0 18 -8 18 -18c0 -9 -7 -17 -16 -18v-300c0 -13 -11 -24 -24 -24h-88c-4 0 -8 4 -8 8v40c0 4 -4 8 -8 8h-32c-4 0 -8 -4 -8 -8v-40c0 -4 -4 -8 -8 -8h-88
-c-13 0 -24 11 -24 24v300c-9 1 -16 9 -16 18c0 10 8 18 18 18h284zM96 84v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM96 148v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM96 212v16c0 4 -4 8 -8 8h-16
-c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM96 276v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM176 84v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM176 148v16c0 4 -4 8 -8 8h-16
-c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM176 212v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM176 276v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM256 84v16c0 4 -4 8 -8 8h-16
-c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM256 148v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM256 212v16c0 4 -4 8 -8 8h-16c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8zM256 276v16c0 4 -4 8 -8 8h-16
-c-4 0 -8 -4 -8 -8v-16c0 -4 4 -8 8 -8h16c4 0 8 4 8 8z" />
- <glyph glyph-name="ion-ios-film" unicode="&#xf42b;" horiz-adv-x="448"
-d="M416 368c18 0 32 -14 32 -32v-288c0 -18 -14 -32 -32 -32h-384c-18 0 -32 14 -32 32v288c0 18 14 32 32 32h384zM88 48v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8zM88 128v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48
-c4 0 8 4 8 8zM88 208v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8zM88 288v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8zM320 180c7 0 12 5 12 12s-5 12 -12 12h-192c-7 0 -12 -5 -12 -12s5 -12 12 -12h192z
-M424 48v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8zM424 128v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8zM424 208v48c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8zM424 288v48
-c0 4 -4 8 -8 8h-48c-4 0 -8 -4 -8 -8v-48c0 -4 4 -8 8 -8h48c4 0 8 4 8 8z" />
- <glyph glyph-name="ion-md-git-pull-request" unicode="&#xf2ff;" horiz-adv-x="384"
-d="M352 71c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v170c0 35 -2 47 -8 54c-5 6 -9 10 -34 10h-22v-65l-96 96l96 96v-61h22c39 0 64 -11 84 -36c18 -23 22 -48 22 -94v-170zM320 -24c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40
-s18 -40 40 -40zM64 400c35 0 64 -29 64 -64c0 -24 -13 -44 -32 -55v-210c19 -11 32 -31 32 -55c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 24 13 44 32 55v210c-19 11 -32 31 -32 55c0 35 29 64 64 64zM64 -24c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40z
-M64 296c22 0 40 18 40 40s-18 40 -40 40s-40 -18 -40 -40s18 -40 40 -40z" />
- <glyph glyph-name="ion-ios-arrow-up" unicode="&#xf3d8;" horiz-adv-x="336"
-d="M168 230l-127 -127c-9 -9 -25 -9 -34 0c-5 5 -7 11 -7 17s2 12 7 17l145 145c9 9 24 8 33 -1l144 -144c9 -9 9 -25 0 -34s-25 -9 -34 0z" />
- <glyph glyph-name="ion-ios-american-football" unicode="&#xf106;"
-d="M331 315c40 -40 62 -96 73 -148l-171 -171c-52 11 -108 33 -148 73s-62 95 -73 148l171 171c52 -11 108 -33 148 -73zM296 160c5 5 5 13 1 18c-3 3 -7 4 -11 4c-3 0 -6 -2 -8 -4l-19 -19l-16 16l20 19c3 3 5 8 3 13c0 1 -1 1 -1 2c-3 5 -7 8 -13 7c-3 0 -6 -2 -8 -4
-l-19 -19l-16 16l20 19c3 3 5 8 3 13c-1 2 -1 5 -3 6v0c-3 3 -8 4 -12 3c-3 0 -5 -2 -7 -4l-19 -19l-16 16l20 19c3 3 5 8 3 13c0 1 -1 1 -1 2c-3 5 -7 8 -13 7c-3 0 -6 -2 -8 -4l-19 -19l-15 15c-5 5 -13 5 -18 0v0c-5 -5 -5 -13 0 -18l15 -15l-19 -19c-3 -3 -6 -8 -4 -13
-c0 -1 1 -1 1 -2c3 -5 8 -8 14 -7c3 0 5 2 7 4l20 19l15 -16l-19 -19c-3 -3 -6 -8 -4 -13c0 -1 1 -1 1 -2c3 -5 8 -8 14 -7c3 0 5 2 7 4l19 19l16 -16l-20 -19c-3 -3 -5 -8 -3 -13c0 -1 1 -1 1 -2c3 -5 7 -8 13 -7c3 0 6 2 8 4l19 19l16 -16l-20 -19c-3 -3 -4 -8 -3 -13
-c1 -2 1 -3 3 -5v0c3 -3 8 -5 12 -4c3 0 5 2 7 4l19 19l15 -15c5 -5 13 -5 18 0v0c5 5 5 13 0 18l-15 15zM347 -16c-24 0 -54 1 -85 6l148 148c10 -66 5 -125 3 -144c0 -4 -3 -7 -7 -7c-10 -1 -31 -3 -59 -3zM69 400c24 0 54 -1 85 -6l-148 -148c-10 66 -5 125 -3 144
-c0 4 3 7 7 7c10 1 31 3 59 3z" />
- <glyph glyph-name="ion-ios-unlock" unicode="&#xf261;" horiz-adv-x="320"
-d="M280 256c22 0 40 -18 40 -40v-192c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v192c0 22 18 40 40 40h24v47c0 53 42 96 95 97s97 -43 97 -96v0v0c0 -8 -6 -14 -14 -14s-14 6 -14 14v0v0c0 18 -7 35 -20 48s-30 20 -48 20s-35 -7 -48 -20s-20 -30 -20 -48v-48h188z
-M174 131c11 5 18 16 18 29c0 18 -15 33 -34 32c-16 -1 -29 -13 -30 -29c-1 -14 6 -26 18 -32v-69c0 -8 7 -14 15 -14s13 6 13 14v69z" />
- <glyph glyph-name="ion-ios-pint" unicode="&#xf486;" horiz-adv-x="232"
-d="M232 273c0 -91 -36 -94 -36 -169c0 -37 16 -66 16 -92c0 -25 -6 -28 -29 -28h-134c-23 0 -29 3 -29 28c0 26 16 56 16 93c0 75 -36 76 -36 167c0 20 1 82 19 116c4 8 10 12 29 12h136c19 0 25 -4 29 -12c18 -34 19 -95 19 -115zM48 372h-6c-5 -12 -10 -29 -12 -51h172
-c-2 22 -7 39 -12 51h-6h-136z" />
- <glyph glyph-name="ion-ios-flash-off" unicode="&#xf12f;" horiz-adv-x="256"
-d="M254 5c4 -7 2 -15 -5 -19c-2 -1 -5 -2 -7 -2c-5 0 -9 3 -12 7l-228 388c-4 7 -2 15 5 19s16 2 20 -5zM197 135l-53 89h104c6 0 11 -8 7 -14zM192 411l-51 -182l-42 72l86 113c3 4 8 1 7 -3zM59 249l53 -89h-104c-6 0 -10 8 -6 14zM64 -27l51 182l42 -72l-86 -113
-c-3 -4 -8 -1 -7 3z" />
- <glyph glyph-name="ion-ios-cog" unicode="&#xf412;"
-d="M409 206c4 0 7 -4 7 -8v-12c0 -4 -3 -8 -7 -8l-26 -4c-3 -1 -7 -2 -7 -6c0 -3 0 -7 -1 -10s1 -7 4 -9l23 -12c4 -2 5 -6 4 -10l-4 -11c-1 -4 -6 -6 -10 -5l-26 5c-4 1 -6 -1 -8 -4s-3 -6 -5 -9s-1 -6 1 -9l17 -20c3 -3 3 -8 0 -11l-7 -9c-3 -3 -8 -3 -11 -1l-23 13
-c-3 2 -6 1 -9 -1c-2 -2 -5 -4 -7 -6c-3 -2 -4 -6 -3 -9l10 -25c2 -4 0 -8 -4 -10l-10 -6c-4 -2 -8 0 -10 3l-17 20c-2 3 -6 4 -9 3s-5 -3 -9 -4c-3 -1 -6 -4 -6 -8l1 -26c0 -4 -3 -7 -7 -8l-12 -2c-4 -1 -8 1 -9 5l-8 25c-1 3 -4 6 -8 6c-2 0 -3 -1 -5 -1s-3 1 -5 1
-c-4 0 -7 -3 -8 -6l-8 -25c-1 -4 -5 -6 -9 -5l-12 2c-4 1 -6 4 -6 8v26c0 4 -3 7 -6 8c-4 1 -7 3 -10 4s-6 0 -8 -3l-16 -20c-2 -3 -7 -5 -11 -3l-10 6c-4 2 -5 6 -3 10l9 25c1 3 0 7 -3 9c-2 2 -5 4 -7 6c-3 2 -6 3 -9 1l-23 -13c-3 -2 -8 -2 -11 1l-7 9c-3 3 -3 8 0 11
-l18 20c2 3 2 6 0 9s-3 6 -5 9s-5 5 -8 4l-26 -5c-4 -1 -8 1 -9 5l-4 11c-1 4 -1 7 3 9l24 13c3 2 5 6 4 9s-2 6 -2 9c0 4 -3 6 -7 7l-26 4c-4 0 -7 4 -7 8v12c0 4 3 8 7 8l26 4c3 1 7 3 7 7c0 3 1 6 2 9s-1 7 -4 9l-24 13c-4 2 -4 6 -3 10l4 11c1 4 5 6 9 5l26 -5
-c4 -1 6 1 8 4s3 5 5 8s2 7 0 10l-18 20c-3 3 -3 7 0 10l7 9c3 3 8 4 11 2l22 -14c3 -2 7 -1 10 1c2 2 5 4 7 6c3 2 4 6 3 9l-10 25c-2 4 0 8 4 10l10 6c4 2 8 1 10 -2l17 -21c3 -3 5 -4 8 -3c2 1 8 3 10 4c3 1 6 4 6 8l-1 26c0 4 3 8 7 9l12 2c4 1 8 -2 9 -6l8 -25
-c1 -3 4 -5 8 -5h5h5c4 0 7 2 8 5l8 25c1 4 5 7 9 6l12 -2c4 -1 6 -5 6 -9v-26c0 -4 3 -7 6 -8c4 -1 9 -4 9 -4c4 -1 7 1 9 3l16 21c2 3 7 4 11 2l10 -6c4 -2 5 -6 3 -10l-9 -25c-1 -3 0 -7 3 -9c2 -2 5 -4 7 -6c3 -2 6 -3 9 -1l23 14c3 2 8 1 11 -2l7 -9c3 -3 3 -8 0 -11
-l-18 -19c-2 -3 -2 -7 0 -10s3 -5 5 -8s5 -5 8 -4l26 5c4 1 8 -1 9 -5l4 -11c1 -4 1 -8 -3 -10l-24 -13c-3 -2 -5 -6 -4 -9s2 -6 2 -9c0 -4 3 -6 7 -7zM134 91l56 97c1 2 1 6 0 8l-56 97c-5 9 -18 10 -26 3c-27 -26 -44 -63 -44 -104s17 -78 45 -104c8 -7 20 -6 25 3z
-M348 158c2 10 -6 20 -16 20h-111c-3 0 -6 -2 -7 -4l-56 -97c-5 -9 -1 -20 9 -23c13 -4 27 -6 41 -6c68 0 125 47 140 110zM332 206c10 0 18 10 16 20c-15 63 -72 110 -140 110c-14 0 -28 -2 -41 -6c-10 -3 -14 -14 -9 -23l56 -97c1 -2 4 -4 7 -4h111z" />
- <glyph glyph-name="ion-ios-baseball" unicode="&#xf3de;"
-d="M208 374c-2 -1 -5 1 -5 3c-1 8 -2 15 -3 23h8c115 0 208 -93 208 -208v-8v0c-7 1 -15 2 -22 3c-2 0 -4 3 -3 5l3 9c2 5 -1 9 -6 11v0c-5 2 -9 0 -11 -5l-4 -11c-1 -2 -3 -4 -5 -3c-7 2 -15 5 -22 8c-4 2 -8 3 -12 5c-2 1 -3 4 -2 6l6 8c3 4 2 10 -2 13h-1
-c-4 3 -9 1 -12 -3l-7 -10c-1 -2 -3 -2 -5 -1c-12 7 -23 16 -33 25c-2 2 -2 3 0 5l8 8c4 3 4 8 0 12l-1 1c-3 4 -8 4 -12 0l-8 -8c-2 -2 -4 -2 -6 0c-9 10 -16 21 -23 32c-1 2 -1 4 1 5l10 7c4 3 6 8 3 12v1c-3 4 -9 5 -13 2l-8 -6c-2 -1 -5 0 -6 2c-2 4 -4 9 -6 14
-c-3 7 -5 13 -7 20c-1 2 0 4 2 5l12 4c5 2 7 6 5 11v0c-2 5 -6 8 -11 6zM210 1c1 -5 2 -12 2 -17v0h-4c-115 0 -208 93 -208 208v4v0c6 -1 12 -1 18 -2c2 0 4 -3 3 -5l-4 -13c-2 -5 1 -9 6 -11v0c5 -2 9 1 11 6l5 14c1 2 3 4 5 3c8 -2 15 -5 22 -8c4 -2 9 -4 13 -6
-c2 -1 3 -4 2 -6l-8 -11c-3 -4 -1 -9 3 -12v-1c4 -3 9 -1 12 3l9 13c1 2 3 2 5 1c11 -7 22 -15 32 -24c2 -2 3 -3 1 -5l-10 -10c-4 -3 -4 -9 0 -13v0c3 -4 9 -4 13 0l9 10c2 2 4 1 6 -1c9 -10 18 -21 25 -33c1 -2 1 -4 -1 -5l-13 -9c-4 -3 -6 -8 -3 -12h1c3 -4 8 -6 12 -3
-l11 8c2 1 5 0 6 -2c2 -4 3 -8 5 -12c3 -8 6 -15 8 -23c1 -2 -1 -4 -3 -5l-13 -4c-5 -2 -8 -7 -6 -12v0c2 -5 6 -8 11 -6l12 4c2 1 5 -1 5 -3zM383 167c1 2 3 3 5 3c9 -2 17 -3 26 -4c-12 -95 -88 -171 -184 -181v1c-1 7 -2 15 -3 22c0 2 1 3 3 4l16 5c5 2 7 6 5 11v1
-c-2 5 -6 7 -11 5l-14 -4c-2 -1 -4 1 -5 3c-4 14 -9 27 -15 40c-1 2 -1 4 1 5l13 9c4 3 5 8 2 12v1c-3 4 -9 5 -13 2l-10 -7c-2 -1 -5 -1 -6 1c-8 12 -17 25 -27 36c-2 2 -2 3 0 5l10 11c4 3 4 8 0 12v0c-3 4 -9 4 -13 0l-10 -10c-2 -2 -3 -1 -5 0c-11 10 -23 18 -35 26
-c-2 1 -2 4 -1 6l7 10c3 4 1 10 -3 13v0c-4 3 -9 1 -12 -3l-8 -12c-1 -2 -4 -2 -6 -1c-13 7 -26 12 -40 16c-2 1 -4 3 -3 5l4 13c2 5 0 9 -5 11h-1c-5 2 -9 -1 -11 -6l-5 -14c-1 -2 -2 -3 -4 -3c-7 1 -15 2 -23 3h-1c10 96 86 172 181 184c1 -9 2 -19 4 -28c0 -2 -1 -3 -3 -4
-l-17 -6c-5 -2 -8 -6 -6 -11v0c2 -5 6 -8 11 -6l16 5c2 1 4 -1 5 -3c4 -14 10 -26 16 -39c1 -2 1 -5 -1 -6l-15 -10c-4 -3 -6 -8 -3 -12h1c3 -4 8 -6 12 -3l13 9c2 1 5 1 6 -1c8 -12 16 -23 26 -34c2 -2 2 -3 0 -5l-13 -13c-4 -3 -4 -9 0 -13v0c3 -4 9 -4 13 0l13 13
-c2 2 3 1 5 0c11 -10 23 -19 35 -27c2 -1 2 -3 1 -5l-9 -14c-3 -4 -1 -9 3 -12v-1c4 -3 9 -1 12 3l11 15c1 2 3 3 5 2c13 -6 25 -12 39 -16c2 -1 4 -3 3 -5l-5 -17c-2 -5 1 -9 6 -11v0c5 -2 9 1 11 6z" />
- <glyph glyph-name="ion-ios-help" unicode="&#xf446;" horiz-adv-x="128"
-d="M65 288c38 0 63 -21 63 -51c0 -20 -10 -33 -28 -44c-17 -10 -23 -17 -23 -30v-8h-35v8c-2 21 5 33 23 44c17 10 24 17 24 29s-12 22 -27 22s-25 -10 -26 -25h-36c1 32 25 55 65 55zM38 117c0 12 10 20 22 20s21 -8 21 -20s-9 -21 -21 -21s-22 9 -22 21z" />
- <glyph glyph-name="ion-md-square" unicode="&#xf381;" horiz-adv-x="384"
-d="M341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
- <glyph glyph-name="ion-ios-folder-open" unicode="&#xf180;" horiz-adv-x="448"
-d="M416 329v-41h-384v73c0 13 11 23 25 23h96c8 0 12 -2 17 -7v0l23 -23c2 -2 3 -2 6 -2h194c13 0 23 -10 23 -23zM32 260h384h8c15 0 25 -10 24 -30c-1 -21 -24 -205 -24 -205c-2 -17 -10 -25 -23 -25h-352c-13 0 -22 7 -25 25c0 0 -22 192 -24 211s11 24 24 24h8z" />
- <glyph glyph-name="ion-ios-tablet-portrait" unicode="&#xf24e;" horiz-adv-x="320"
-d="M313 409v0c4 -4 7 -11 7 -17v-400c0 -6 -3 -13 -7 -17v0c-4 -4 -11 -7 -17 -7h-272c-6 0 -13 3 -17 7v0c-4 4 -7 11 -7 17v400c0 6 3 13 7 17v0c4 4 11 7 17 7h272c6 0 13 -3 17 -7zM160 399c-4 0 -7 -3 -7 -7s3 -7 7 -7s7 3 7 7s-3 7 -7 7zM160 -22c8 0 14 6 14 14
-s-6 14 -14 14s-14 -6 -14 -14s6 -14 14 -14zM304 16v352h-288v-352h288z" />
- <glyph glyph-name="ion-ios-arrow-dropright" unicode="&#xf114;"
-d="M163 300c8 8 19 8 27 0l95 -95c7 -7 8 -19 1 -27l-94 -94c-4 -4 -9 -6 -14 -6s-9 2 -13 6c-8 8 -8 19 0 27l80 81l-82 81c-8 7 -8 19 0 27zM0 192c0 115 93 208 208 208s208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208zM32 192c0 -47 19 -91 52 -124
-s77 -52 124 -52s91 19 124 52s52 77 52 124s-19 91 -52 124s-77 52 -124 52s-91 -19 -124 -52s-52 -77 -52 -124z" />
- <glyph glyph-name="ion-ios-image" unicode="&#xf19c;"
-d="M65 136c-4 0 -8 4 -5 8l95 154c2 3 7 3 9 0l96 -154c3 -4 -1 -8 -5 -8h-190zM259 194c-1 2 -1 4 0 6l26 32c2 3 7 3 9 0l62 -88c3 -4 -1 -8 -5 -8h-53c-2 0 -3 0 -4 2zM303 280c-18 -2 -33 13 -31 31c1 13 12 24 25 25c18 2 33 -13 31 -31c-1 -13 -12 -24 -25 -25z
-M384 400c18 0 32 -14 32 -32v-352c0 -18 -14 -32 -32 -32h-352c-18 0 -32 14 -32 32v352c0 18 14 32 32 32h352zM381 120v0v237c0 4 -4 8 -8 8h-330c-4 0 -8 -4 -8 -8v-237c0 -4 4 -8 8 -8h330c4 0 8 4 8 8z" />
- <glyph glyph-name="ion-logo-slack" unicode="&#xf10b;" horiz-adv-x="480"
-d="M218 150l-20 62l64 21l20 -62zM218 150l-20 62l64 21l20 -62zM460 258c50 -165 11 -236 -154 -286s-236 -11 -286 154s-11 236 154 286s236 11 286 -154zM377 151c13 4 19 19 15 32s-18 19 -31 15l-31 -10l-21 62l31 10c13 4 20 19 16 32s-19 19 -32 15l-31 -10l-10 32
-c-4 13 -19 20 -32 16s-20 -19 -16 -32l11 -32l-64 -21l-11 32c-4 13 -18 20 -31 16s-20 -19 -16 -32l11 -32l-31 -10c-13 -4 -20 -19 -16 -32c3 -10 13 -17 23 -17c3 0 6 0 9 1l31 11l20 -62l-31 -11c-13 -4 -19 -18 -15 -31c3 -10 13 -17 23 -17c3 0 5 0 8 1l31 11l11 -33
-c3 -10 13 -17 23 -17c3 0 5 1 8 2c13 4 20 18 16 31l-11 32l64 22l11 -33c3 -10 13 -16 23 -16c3 0 6 0 9 1c13 4 19 18 15 31l-10 32z" />
- <glyph glyph-name="ion-md-trash" unicode="&#xf398;" horiz-adv-x="320"
-d="M32 43v245h256v-245c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43zM320 352v-32h-320v32h80l27 32h106l27 -32h80z" />
- <glyph glyph-name="ion-md-rainy" unicode="&#xf363;" horiz-adv-x="448"
-d="M107 48c0 0 23 -26 23 -41c0 -13 -10 -23 -23 -23s-23 10 -23 23c0 15 23 41 23 41zM185 80c0 0 23 -26 23 -41c0 -13 -10 -23 -23 -23s-23 10 -23 23c0 15 23 41 23 41zM263 48c0 0 23 -26 23 -41c0 -13 -10 -23 -23 -23s-23 10 -23 23c0 15 23 41 23 41zM341 80
-c0 0 23 -26 23 -41c0 -13 -10 -23 -23 -23s-23 10 -23 23c0 15 23 41 23 41zM361 287c48 -3 87 -44 87 -93c0 -52 -44 -98 -96 -98h-243c-62 0 -109 54 -109 116c0 55 38 100 91 111c6 1 15 2 21 2c50 0 91 -31 106 -75h33c-6 24 -19 47 -37 65c-25 25 -57 37 -91 40
-c25 31 61 45 101 45c68 0 124 -48 137 -113z" />
- <glyph glyph-name="ion-ios-skip-forward" unicode="&#xf217;" horiz-adv-x="320"
-d="M241 348c0 2 2 4 4 4h71c2 0 4 -2 4 -4v-312c0 -2 -2 -4 -4 -4h-71c-2 0 -4 2 -4 4v138l-229 -140c-5 -3 -12 1 -12 7v302c0 6 7 10 12 7l229 -140v138z" />
- <glyph glyph-name="ion-md-cloud-outline" unicode="&#xf2c7;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121zM380 72c33 0 60 27 60 60s-27 60 -60 60h-30v10c0 61 -49 110 -110 110c-51 0 -93 -34 -106 -80h-14
-c-44 0 -80 -36 -80 -80s36 -80 80 -80h260z" />
- <glyph glyph-name="ion-ios-help-buoy" unicode="&#xf196;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM263 364l-6 -89c14 -8 26 -20 34 -34l89 6c-9 27 -24 51 -45 72s-45 36 -72 45zM81 319c-21 -21 -36 -45 -45 -72l89 -6c8 14 20 26 34 34l-6 89c-27 -9 -51 -24 -72 -45zM153 20
-l6 89c-14 8 -26 20 -34 34l-89 -6c9 -27 24 -51 45 -72s45 -36 72 -45zM208 124c38 0 68 30 68 68s-30 68 -68 68s-68 -30 -68 -68s30 -68 68 -68zM335 65c21 21 36 46 45 73l-89 6c-8 -14 -20 -27 -34 -35l6 -89c27 9 51 24 72 45z" />
- <glyph glyph-name="ion-md-fitness" unicode="&#xf1ac;"
-d="M386 132l30 -29l-45 -45l30 -30l-30 -29l-29 29l-45 -44l-30 30l-29 -30l-30 30l74 74l-178 178l-74 -74l-30 30l30 30l-30 29l44 45l-29 30l29 29l30 -29l45 44l30 -30l29 30l30 -30l-74 -74l178 -178l74 74l30 -30z" />
- <glyph glyph-name="ion-md-compass" unicode="&#xf2d4;" horiz-adv-x="448"
-d="M224 217c13 0 25 -12 25 -25s-12 -25 -25 -25s-25 12 -25 25s12 25 25 25zM224 416c123 0 224 -101 224 -224s-101 -224 -224 -224s-224 101 -224 224s101 224 224 224zM273 143l85 183l-183 -85l-85 -183z" />
- <glyph glyph-name="ion-md-bicycle" unicode="&#xf299;" horiz-adv-x="448"
-d="M299 317c-19 0 -34 14 -34 33s15 34 34 34s33 -15 33 -34s-14 -33 -33 -33zM355 187c51 0 93 -43 93 -94s-42 -93 -93 -93s-94 42 -94 93s43 94 94 94zM355 28c36 0 65 29 65 65s-29 66 -65 66s-66 -30 -66 -66s30 -65 66 -65zM274 224l-30 45l-43 -45l39 -32v-112h-32
-v86l-61 38c-9 6 -19 15 -19 27c0 8 3 17 9 23l72 69c6 6 14 9 22 9c11 0 22 -7 28 -16l34 -60h59v-32h-78zM93 187c51 0 94 -43 94 -94s-43 -93 -94 -93s-93 42 -93 93s42 94 93 94zM93 28c36 0 66 29 66 65s-30 66 -66 66s-65 -30 -65 -66s29 -65 65 -65z" />
- <glyph glyph-name="ion-md-filing" unicode="&#xf2ec;"
-d="M401 240l15 -48v-167c0 -21 -21 -41 -43 -41h-314c-24 0 -59 19 -59 43v165l15 48h26v32l14 48h26v32l15 48h224l15 -48v-32h26l14 -48v-32h26zM128 352v-32h160v32h-160zM87 272v-32h242v32h-242zM369 160v32h-322v-32h83c7 -36 39 -64 78 -64s71 28 78 64h83z" />
- <glyph glyph-name="ion-ios-close-circle-outline" unicode="&#xf14d;"
-d="M283 139c6 -6 6 -16 0 -22s-16 -6 -22 0l-53 52l-53 -52c-6 -6 -16 -6 -22 0s-7 15 0 22s52 53 52 53s-46 47 -52 53s-7 15 0 22s16 6 22 0l53 -52l53 52c6 6 16 6 22 0s6 -16 0 -22l-52 -53zM208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127
-s79 -53 127 -53s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-ios-bed" unicode="&#xf139;" horiz-adv-x="448"
-d="M426 240c12 0 22 -10 22 -22v-180c0 -12 -10 -22 -22 -22v0c-12 0 -22 10 -22 22v6c0 2 -2 4 -4 4h-352c-2 0 -4 -2 -4 -4v-6c0 -12 -10 -22 -22 -22v0c-12 0 -22 10 -22 22v180c0 12 10 22 22 22v0c12 0 22 -10 22 -22c0 -1 1 -2 2 -2h356c1 0 2 1 2 2c0 12 10 22 22 22
-v0zM52 234c-4 0 -8 4 -8 8v94c0 18 14 32 32 32h296c18 0 32 -14 32 -32v-94c0 -4 -4 -8 -8 -8h-22c-2 0 -4 2 -4 4v13c0 9 -7 16 -16 16h-98c-9 0 -16 -7 -16 -16v-13c0 -2 -2 -4 -4 -4h-24c-2 0 -4 2 -4 4v13c0 9 -7 16 -16 16h-98c-9 0 -16 -7 -16 -16v-13
-c0 -2 -2 -4 -4 -4h-22z" />
- <glyph glyph-name="ion-md-arrow-forward" unicode="&#xf287;" horiz-adv-x="342"
-d="M0 171v42h260l-119 120l30 30l171 -171l-171 -171l-31 30l120 120h-260z" />
- <glyph glyph-name="ion-md-arrow-dropdown" unicode="&#xf280;" horiz-adv-x="256"
-d="M0 256h256l-128 -128z" />
- <glyph glyph-name="ion-ios-musical-note" unicode="&#xf46b;" horiz-adv-x="236"
-d="M226 400c6 1 10 -4 10 -8v-75c0 -8 -6 -13 -13 -15l-93 -19c-4 -1 -6 -4 -6 -8v-230c0 -26 -13 -41 -24 -48c-15 -10 -43 -13 -51 -13c-3 0 -9 0 -14 1c-13 3 -35 17 -35 47c0 37 40 47 64 52c5 1 11 2 14 3c8 2 13 7 16 13c2 4 2 10 2 12v255v0v0c0 4 4 7 8 8
-s117 24 122 25z" />
- <glyph glyph-name="ion-ios-walk" unicode="&#xf266;" horiz-adv-x="256"
-d="M73 87v91l46 -47l-9 -52c0 -5 -2 -10 -6 -14l-70 -51c-4 -4 -12 -9 -16 -9c-5 0 -9 3 -13 7s-5 7 -5 12s1 10 5 14zM141 342c-20 3 -34 23 -31 43s23 34 43 31s33 -23 30 -43s-22 -34 -42 -31zM223 -11c1 -10 -6 -19 -16 -21h-2c-9 0 -17 7 -18 16l-15 104c0 2 -1 4 -2 5
-l-92 94c-3 3 -5 7 -5 11v76l-32 -17c-3 -1 -4 -4 -4 -7v-58c0 -10 -9 -19 -19 -19s-18 9 -18 19v65c0 13 5 24 15 29l68 32c2 1 5 2 8 2h37c12 0 18 -5 18 -16v-120l57 -68c2 -3 5 -6 5 -10zM250 216c4 -4 6 -10 6 -15s-1 -8 -5 -12c-7 -7 -19 -7 -26 0l-70 70v53z" />
- <glyph glyph-name="ion-ios-pricetag" unicode="&#xf48d;"
-d="M387 400c16 0 29 -13 29 -29v-123c0 -4 -1 -7 -4 -10l-246 -246c-11 -11 -30 -11 -41 0l-117 117c-11 11 -11 30 0 41l246 246c3 3 6 4 10 4h123zM340 288c15 2 26 13 28 28c2 20 -16 38 -36 36c-15 -2 -26 -13 -28 -28c-2 -20 16 -38 36 -36z" />
- <glyph glyph-name="ion-ios-menu" unicode="&#xf1c3;" horiz-adv-x="384"
-d="M368 272h-352c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h352c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16zM368 176h-352c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h352c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16zM368 80h-352c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h352
-c9 0 16 -7 16 -16v0c0 -9 -7 -16 -16 -16z" />
- <glyph glyph-name="ion-md-cash" unicode="&#xf2b5;" horiz-adv-x="448"
-d="M0 352h448v-256h-448v256zM160 128c-20 24 -32 58 -32 96s12 72 32 96h-64c0 -35 -29 -64 -64 -64v-80c27 0 48 -21 48 -48h80zM416 176v80c-35 0 -64 29 -64 64h-64c20 -24 32 -58 32 -96s-12 -72 -32 -96h80c0 27 22 48 48 48zM0 32v32h448v-32h-448z" />
- <glyph glyph-name="ion-ios-person-add" unicode="&#xf1e1;" horiz-adv-x="384"
-d="M321 62c14 -5 56 -20 63 -52c1 -5 -3 -10 -8 -10h-184h-184c-5 0 -9 5 -8 10c7 32 49 47 63 52c16 6 38 7 52 10c8 2 20 6 24 11c4 4 2 38 2 47c0 1 -1 3 -2 4c-2 4 -7 12 -10 20s-6 25 -7 33c0 2 -2 5 -4 6c-3 2 -6 5 -8 13c-3 16 -9 22 -8 34c0 5 2 7 4 9s3 5 2 8
-c-2 8 -6 22 -6 45c-1 41 31 82 90 82c58 0 91 -41 90 -82c0 -23 -4 -37 -6 -45c-1 -3 0 -6 2 -8s4 -4 4 -9c1 -12 -5 -18 -8 -34c-2 -8 -5 -11 -8 -13c-2 -1 -4 -4 -4 -6c-1 -8 -4 -25 -7 -33s-9 -16 -11 -20c-1 -1 -1 -3 -1 -4c0 -9 -2 -43 2 -47c4 -5 16 -9 24 -11
-c14 -3 36 -4 52 -10zM373 154c6 0 11 -4 11 -10v0c0 -6 -5 -10 -11 -10h-27v-28c0 -6 -4 -10 -10 -10v0c-6 0 -11 4 -11 10v28h-27c-6 0 -10 4 -10 10v0c0 6 4 10 10 10h27v28c0 6 5 10 11 10v0c6 0 10 -4 10 -10v-28h27z" />
- <glyph glyph-name="ion-ios-git-commit" unicode="&#xf184;" horiz-adv-x="448"
-d="M434 206c8 0 14 -6 14 -14s-6 -14 -14 -14h-77c-3 -32 -17 -62 -41 -84c-25 -24 -58 -36 -92 -36s-67 12 -92 36c-24 22 -38 52 -41 84h-77c-8 0 -14 6 -14 14s6 14 14 14h77c3 32 17 62 41 84c25 24 58 36 92 36s67 -12 92 -36c24 -22 38 -52 41 -84h77zM299 117
-c20 20 31 47 31 75s-11 55 -31 75s-47 31 -75 31s-55 -11 -75 -31s-31 -47 -31 -75s11 -55 31 -75s47 -31 75 -31s55 11 75 31z" />
- <glyph glyph-name="ion-ios-close-circle" unicode="&#xf14e;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM261 117c6 -6 16 -6 22 0s6 16 0 22l-52 53l52 53c6 6 6 16 0 22s-16 6 -22 0l-53 -52l-53 52c-6 6 -16 6 -22 0c-3 -3 -5 -7 -5 -11s2 -8 5 -11l52 -53l-52 -53
-c-3 -3 -5 -7 -5 -11s2 -8 5 -11c6 -6 16 -6 22 0l53 52z" />
- <glyph glyph-name="ion-ios-close" unicode="&#xf406;" horiz-adv-x="191"
-d="M118 192l68 -68c6 -6 6 -17 0 -23s-16 -6 -22 0l-68 68l-69 -68c-6 -6 -16 -6 -22 0c-3 3 -5 7 -5 11s2 9 5 12l68 68l-68 68c-3 3 -5 8 -5 12s2 8 5 11c6 6 16 6 22 0l69 -68l68 68c6 6 16 6 22 0s6 -17 0 -23z" />
- <glyph glyph-name="ion-md-camera" unicode="&#xf2ad;" horiz-adv-x="448"
-d="M161 168c0 35 28 63 63 63s63 -28 63 -63s-28 -63 -63 -63s-63 28 -63 63zM408 352c22 0 40 -18 40 -40v-272c0 -22 -18 -40 -40 -40h-368c-22 0 -40 18 -40 40v272c0 22 18 40 40 40h88l32 32h128l32 -32h88zM224 56c62 0 112 50 112 112s-50 112 -112 112
-s-112 -50 -112 -112s50 -112 112 -112z" />
- <glyph glyph-name="ion-ios-resize" unicode="&#xf1ff;" horiz-adv-x="352"
-d="M338 368c8 0 14 -6 14 -14v-110c0 -8 -6 -14 -14 -14v0c-8 0 -14 6 -14 14v76l-276 -276h76c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-110c-8 0 -14 6 -14 14v110c0 8 6 14 14 14v0c8 0 14 -6 14 -14v-76l276 276h-76c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h110z" />
- <glyph glyph-name="ion-md-arrow-round-forward" unicode="&#xf28a;" horiz-adv-x="352"
-d="M205 35c-12 -12 -31 -12 -43 0s-12 34 0 46l83 79h-214c-17 0 -31 14 -31 32s14 32 31 32h214l-83 79c-12 12 -12 34 0 46s31 12 43 0l138 -134c6 -6 9 -14 9 -23v0c0 -9 -3 -17 -9 -23z" />
- <glyph glyph-name="ion-ios-football" unicode="&#xf437;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM335 319c-20 20 -43 35 -69 44c-1 0 -3 0 -4 -1l-38 -26c-1 -1 -2 -2 -2 -3v-63c0 -1 1 -2 2 -3l56 -48c1 -1 3 -2 4 -1l58 27c1 0 2 1 2 2l14 41c0 1 1 3 0 4c-6 10 -15 19 -23 27
-zM261 22l17 43v3l-23 42c-1 1 -1 2 -3 2h-88c-1 0 -2 -1 -3 -2l-23 -42v-3l17 -43c0 -1 1 -3 2 -3c16 -5 33 -7 51 -7c17 0 35 2 51 7c1 0 2 2 2 3zM194 333c0 1 -1 3 -2 3l-38 26c-1 1 -3 0 -4 0c-26 -9 -49 -23 -69 -43c-8 -8 -17 -17 -23 -27c-1 -1 0 -3 0 -4l14 -41
-c0 -1 1 -2 2 -2l58 -27c1 -1 3 0 4 1l57 47c1 1 1 3 1 4v63zM30 184c-1 -1 -2 -2 -2 -3c2 -35 15 -68 35 -96c1 -1 2 -1 3 -1l46 -1c2 0 3 1 4 2l23 44v3l-14 57c0 1 -2 3 -3 3l-52 24c-1 1 -3 0 -4 -1zM300 85c1 -1 2 -2 4 -2l46 1c1 0 2 0 3 1c20 28 33 61 35 96
-c0 1 -1 2 -2 3l-36 31c-1 1 -3 2 -4 1l-52 -24c-1 0 -3 -2 -3 -3l-14 -57v-3z" />
- <glyph glyph-name="ion-ios-headset" unicode="&#xf194;" horiz-adv-x="448"
-d="M224 324c24 0 47 -10 64 -28s26 -34 26 -60c0 -8 -6 -14 -13 -14s-13 6 -13 14c0 17 -7 33 -19 44s-28 16 -45 16s-33 -5 -45 -16s-19 -27 -19 -44c0 -8 -6 -14 -13 -14s-13 6 -13 14c0 26 9 42 26 60s40 28 64 28zM425 169c15 -15 23 -34 23 -55v-12
-c0 -21 -8 -40 -23 -55s-34 -23 -55 -23h-6c-4 0 -7 -1 -10 -4c-2 -2 -6 -4 -10 -4c-8 0 -14 6 -14 14v204c0 28 -11 55 -31 75s-47 31 -75 31s-55 -11 -75 -31s-31 -47 -31 -75v-204c0 -8 -6 -14 -14 -14c-4 0 -8 2 -10 4c-3 3 -6 4 -10 4h-6c-21 0 -40 8 -55 23
-s-23 34 -23 55v12c0 21 8 40 23 55s34 23 55 23h8c2 0 4 2 4 4v38c0 36 14 70 39 95s59 39 95 39s70 -14 95 -40c25 -25 39 -58 39 -94v-38c0 -2 2 -4 4 -4h8c21 0 40 -8 55 -23z" />
- <glyph glyph-name="ion-md-arrow-dropleft-circle" unicode="&#xf281;"
-d="M416 192c0 -115 -93 -208 -208 -208s-208 93 -208 208s93 208 208 208s208 -93 208 -208zM144 192l96 -96v192z" />
- <glyph glyph-name="ion-ios-analytics" unicode="&#xf3ce;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM28 192c0 -12 1 -23 3 -34c6 -5 20 -16 37 -13c12 2 28 25 38 41c4 6 8 12 11 16c17 21 34 23 45 21c24 -3 43 -27 52 -49c7 -18 20 -28 33 -29c15 -1 31 10 42 29c1 2 3 5 4 7
-c9 17 23 43 51 43c20 0 35 -14 44 -24c-2 45 -21 87 -53 119c-34 34 -79 53 -127 53s-93 -19 -127 -53s-53 -79 -53 -127z" />
- <glyph glyph-name="ion-ios-hammer" unicode="&#xf18e;"
-d="M229 201c4 -9 3 -18 -3 -25c-6 -6 -19 -18 -39 -38c-40 -40 -90 -97 -119 -132c-6 -7 -17 -8 -24 -1l-39 39c-7 7 -6 18 1 24c34 29 92 78 132 118l39 39s15 8 23 4c2 -1 5 -2 7 -4l18 -18c2 -2 3 -4 4 -6zM414 230c2 -2 2 -6 0 -8l-56 -55c-1 -1 -3 -2 -4 -2
-c-2 0 -3 1 -4 2l-34 34c-2 2 -2 6 0 8l2 2c7 6 6 17 0 24c-1 1 -2 1 -3 2c-4 2 -13 5 -23 5c-4 0 -9 -1 -13 -2c-9 -2 -17 -9 -31 -23c-3 -3 -9 -3 -12 0l-19 20c-3 3 -3 8 0 11c15 17 20 28 19 45c-1 23 -15 40 -31 53c-10 8 -29 10 -45 10c-10 0 -19 0 -23 -1h-3
-c-8 0 -3 9 3 14c7 7 29 15 55 15c14 0 30 -2 47 -9c47 -19 75 -46 82 -53s18 -18 24 -27s-2 -22 5 -29c3 -3 8 -5 12 -5s8 1 10 3v0c1 1 3 2 4 2c2 0 3 -1 4 -2z" />
- <glyph glyph-name="ion-md-open" unicode="&#xf33b;" horiz-adv-x="384"
-d="M341 43v133h43v-133c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h133v-43h-133v-298h298zM224 384h160v-160h-43v87l-215 -215l-30 30l215 215h-87v43z" />
- <glyph glyph-name="ion-md-return-left" unicode="&#xf36d;" horiz-adv-x="448"
-d="M401 312h47v-144h-358l85 -86l-33 -34l-142 144l142 144l33 -34l-85 -86h311v96z" />
- <glyph glyph-name="ion-md-square-outline" unicode="&#xf380;" horiz-adv-x="384"
-d="M341 341h-298v-298h298v298zM341 384v0c24 0 43 -19 43 -43v-298c0 -24 -19 -43 -43 -43h-298c-24 0 -43 19 -43 43v298c0 24 19 43 43 43h298z" />
- <glyph glyph-name="ion-md-phone-landscape" unicode="&#xf346;" horiz-adv-x="448"
-d="M448 89c0 -23 -19 -41 -41 -41h-366c-22 0 -41 18 -41 41v206c0 23 19 41 41 41h366c22 0 41 -18 41 -41v-206zM80 84h288v216h-288v-216z" />
- <glyph glyph-name="ion-md-stopwatch" unicode="&#xf386;" horiz-adv-x="384"
-d="M168 141v131h48v-131h-48zM344 278c25 -33 40 -74 40 -118c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192c44 0 85 -15 118 -40l31 30l33 -33zM298 54c28 28 44 66 44 106s-16 78 -44 106s-66 44 -106 44s-78 -16 -106 -44s-44 -66 -44 -106
-s16 -78 44 -106s66 -44 106 -44s78 16 106 44zM128 368v48h128v-48h-128z" />
- <glyph glyph-name="ion-logo-python" unicode="&#xf246;" horiz-adv-x="384"
-d="M129 199c-29 -5 -49 -30 -49 -57v-43v-3h-15c-29 0 -54 29 -62 69c-2 9 -3 17 -3 27v1c0 53 29 95 65 95h127v16h-96v29c0 26 7 40 46 47c13 2 29 4 45 4s39 -1 55 -4c25 -4 46 -22 46 -47v-57v-31c0 -21 -14 -38 -33 -43c-4 -1 -8 -2 -13 -2h-104h3c-4 0 -8 0 -12 -1z
-M140 321c10 0 17 7 17 17s-7 18 -17 18s-18 -8 -18 -18s8 -17 18 -17zM380 225c3 -10 4 -21 4 -33c0 -16 -3 -30 -7 -43c-11 -31 -33 -53 -58 -53h-127v-16h96v-26c0 -26 -23 -40 -46 -47c-35 -10 -68 -9 -97 0c-25 7 -49 22 -49 47v54v33c0 21 14 36 33 41c4 1 8 2 13 2
-h104c3 0 6 1 9 1c27 4 49 28 49 62v38v3h15c28 0 52 -26 61 -63zM244 65c-10 0 -18 -7 -18 -17s8 -18 18 -18s17 8 17 18s-7 17 -17 17z" />
- <glyph glyph-name="ion-logo-hackernews" unicode="&#xf23c;" horiz-adv-x="384"
-d="M0 384h384v-384h-384v384zM214 169l64 120h-45l-38 -84l-40 84h-47l66 -120v-72h40v72z" />
- <glyph glyph-name="ion-md-cut" unicode="&#xf2de;" horiz-adv-x="448"
-d="M171 290l277 -277v-23h-67l-157 157l-53 -53c5 -11 8 -23 8 -36c0 -50 -39 -90 -89 -90s-90 40 -90 90s40 89 90 89c13 0 25 -3 36 -8l53 53l-53 53c-11 -5 -23 -8 -36 -8c-50 0 -90 39 -90 89s40 90 90 90s89 -40 89 -90c0 -13 -3 -25 -8 -36zM90 282c25 0 44 19 44 44
-s-19 45 -44 45s-45 -20 -45 -45s20 -44 45 -44zM90 13c25 0 44 20 44 45s-19 44 -44 44s-45 -19 -45 -44s20 -45 45 -45zM224 181c6 0 11 5 11 11s-5 11 -11 11s-11 -5 -11 -11s5 -11 11 -11zM381 394h67v-23l-157 -157l-45 45z" />
- <glyph glyph-name="ion-md-photos" unicode="&#xf348;"
-d="M352 27c0 -24 -20 -43 -43 -43h-266c-24 0 -43 19 -43 43v266c0 24 19 43 43 43h266c24 0 43 -19 43 -43v-266zM109 144l-66 -96h266l-88 128l-66 -96zM373 400c24 0 43 -19 43 -43v-266c0 -24 -19 -43 -43 -43h-5v32v229c0 24 -19 43 -43 43h-229h-32v5
-c0 24 19 43 43 43h266z" />
- <glyph glyph-name="ion-ios-locate" unicode="&#xf1ae;" horiz-adv-x="415"
-d="M347 189c0 1 -1 2 -1 3s1 2 1 3c0 -1 -1 -1 -1 -2s1 -3 1 -4zM411 178c2 0 4 -2 4 -4c-9 -100 -89 -180 -189 -189c-2 0 -5 2 -5 4v50c0 8 -5 14 -13 14s-15 -6 -15 -14v-50c0 -2 -2 -4 -4 -4c-100 9 -180 89 -189 189c0 2 2 4 4 4h50c8 0 14 5 14 13s-6 15 -14 15h-50
-c-2 0 -4 2 -4 4c9 100 89 180 189 189c2 0 4 -2 4 -4v-50c0 -8 6 -14 14 -14s14 6 14 14v50c0 2 3 4 5 4c100 -9 180 -89 189 -189c0 -2 -2 -4 -4 -4h-50c-7 0 -13 -5 -14 -11c0 -1 -1 -2 -1 -3s1 -2 1 -3c1 -6 6 -11 13 -11h51zM207 122c39 0 70 31 70 70s-31 70 -70 70
-s-70 -31 -70 -70s31 -70 70 -70z" />
- <glyph glyph-name="ion-md-mic-off" unicode="&#xf32b;" horiz-adv-x="408"
-d="M316 93l58 -58l-58 58l58 -58l34 -33l-24 -24l-95 95c-19 -11 -40 -20 -62 -23v-82h-46v82c-75 10 -137 76 -137 153h39c0 -68 58 -117 121 -117c20 0 40 5 57 14l-32 33c-8 -3 -16 -5 -25 -5c-38 0 -69 31 -69 69v29l-135 134l24 24l111 -110v0l140 -140l5 -5l9 -9z
-M273 197c0 -4 0 -8 -1 -12l-137 137v25c0 38 31 69 69 69s69 -31 69 -69v-150zM365 203c0 -31 -10 -60 -27 -84l-27 28c9 17 15 36 15 56h39zM408 2v0l-34 33z" />
- <glyph glyph-name="ion-md-cloudy" unicode="&#xf2cb;" horiz-adv-x="448"
-d="M91 265h2h-2zM361 229c48 -3 87 -44 87 -93c0 -52 -41 -94 -93 -94h-243c-62 0 -112 50 -112 112c0 55 38 100 91 111c6 1 15 2 21 2c50 0 91 -31 106 -75h33c-6 24 -19 47 -37 65c-25 25 -57 37 -91 40c25 31 61 45 101 45c68 0 124 -48 137 -113z" />
- <glyph glyph-name="ion-ios-podium" unicode="&#xf1ed;" horiz-adv-x="384"
-d="M0 248c0 4 4 8 8 8h96c4 0 8 -4 8 -8v-208c0 -4 -4 -8 -8 -8h-96c-4 0 -8 4 -8 8v208zM136 352h112c4 0 8 -4 8 -8v-304c0 -4 -4 -8 -8 -8h-119h-1v312c0 4 4 8 8 8zM376 192c4 0 8 -4 8 -8v-144c0 -4 -4 -8 -8 -8h-96c-4 0 -8 4 -8 8v144c0 4 4 8 8 8h96z" />
- <glyph glyph-name="ion-ios-print" unicode="&#xf1f1;"
-d="M80 200c0 9 7 16 16 16h224c9 0 16 -7 16 -16v-200c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v200zM336 400c9 0 16 -7 16 -16v-20c0 -2 -2 -4 -4 -4h-280c-2 0 -4 2 -4 4v20c0 9 7 16 16 16h256zM384 336c18 0 32 -13 32 -31v-175c0 -18 -14 -32 -32 -32h-16
-c-4 0 -8 4 -8 8v106c0 16 -12 28 -28 28h-248c-16 0 -28 -12 -28 -28v-106c0 -4 -4 -8 -8 -8h-16c-18 0 -32 14 -32 32v175c0 18 14 31 32 31h352z" />
- <glyph glyph-name="ion-md-browsers" unicode="&#xf2a3;" horiz-adv-x="432"
-d="M384 384c27 0 48 -22 48 -48v-288c0 -26 -22 -48 -48 -48h-336c-27 0 -48 22 -48 48v288c0 26 21 48 48 48h336zM384 48v224h-336v-224h336z" />
- <glyph glyph-name="ion-ios-calculator" unicode="&#xf3f2;" horiz-adv-x="296"
-d="M264 400c18 0 32 -14 32 -32v-352c0 -18 -14 -32 -32 -32h-232c-18 0 -32 14 -32 32v352c0 18 14 32 32 32h232zM252 128c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v-80c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v80zM252 208c0 13 -11 24 -24 24v0
-c-13 0 -24 -11 -24 -24v0c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0zM172 48c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v0c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0zM172 128c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v0c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0
-zM172 208c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v0c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0zM92 48c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v0c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0zM92 128c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v0
-c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0zM92 208c0 13 -11 24 -24 24v0c-13 0 -24 -11 -24 -24v0c0 -13 11 -24 24 -24v0c13 0 24 11 24 24v0zM44 288c0 -9 7 -16 16 -16h176c9 0 16 7 16 16v48c0 9 -7 16 -16 16h-176c-9 0 -16 -7 -16 -16v-48z" />
- <glyph glyph-name="ion-md-gift" unicode="&#xf199;" horiz-adv-x="420"
-d="M378 314c23 0 42 -19 42 -43v-245c0 -24 -20 -42 -43 -42h-336c-23 0 -41 18 -41 42v245c0 24 19 43 42 43h46c-2 7 -4 13 -4 21c0 35 28 65 63 65c22 0 42 -13 53 -30l10 -14l10 14c11 17 31 28 53 28c35 0 63 -28 63 -63c0 -7 -2 -14 -4 -21h46zM274 357
-c-12 0 -21 -9 -21 -21s9 -21 21 -21s21 9 21 21s-9 21 -21 21zM146 357c-12 0 -21 -9 -21 -21s9 -21 21 -21s21 9 21 21s-9 21 -21 21zM42 271v-245h147v229v0l-50 -69l-34 24l44 61h-107zM378 26v245h-107l44 -61l-34 -24l-50 69v-229h147z" />
- <glyph glyph-name="ion-md-thumbs-down" unicode="&#xf391;"
-d="M266 384c21 0 38 -17 38 -38v-192c0 -11 -4 -20 -11 -27l-126 -127l-20 20c-5 5 -9 12 -9 20l1 6l18 82h-119c-21 0 -38 24 -38 45v38c0 5 1 10 3 14l57 136c6 14 18 23 34 23h172zM352 160v224h64v-224h-64z" />
- <glyph glyph-name="ion-md-arrow-dropright-circle" unicode="&#xf283;"
-d="M208 -16c-115 0 -208 93 -208 208s93 208 208 208s208 -93 208 -208s-93 -208 -208 -208zM176 96l96 96l-96 96v-192z" />
- <glyph glyph-name="ion-ios-battery-dead" unicode="&#xf121;" horiz-adv-x="480"
-d="M380 304c26 0 48 -22 48 -48v-128c0 -26 -22 -48 -48 -48h-332c-26 0 -48 22 -48 48v128c0 26 22 48 48 48h332zM400 128v128c0 11 -9 20 -20 20h-332c-11 0 -20 -9 -20 -20v-128c0 -11 9 -20 20 -20h332c11 0 20 9 20 20zM448 243c16 0 32 -27 32 -51s-16 -51 -32 -51
-v102z" />
- <glyph glyph-name="ion-ios-add" unicode="&#xf102;" horiz-adv-x="257"
-d="M241 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-97v-96c0 -9 -7 -16 -16 -16c-4 0 -8 1 -11 4s-5 8 -5 12v96h-96c-4 0 -8 2 -11 5s-5 7 -5 11c0 9 7 16 16 16h96v96c0 9 7 16 16 16s16 -7 16 -16v-96h97z" />
- <glyph glyph-name="ion-md-rocket" unicode="&#xf179;" horiz-adv-x="288"
-d="M144 26c18 0 33 7 43 11c5 2 11 -1 11 -7l-4 -51c0 -3 -4 -5 -6 -3l-15 11c-2 1 -4 1 -5 -1l-21 -32c-2 -2 -4 -2 -6 0l-21 32c-1 2 -4 2 -6 1l-14 -11c-2 -2 -6 0 -6 3l-4 51c0 6 6 9 11 7c10 -4 25 -11 43 -11zM286 155c2 -2 2 -4 2 -7l-18 -112c-1 -6 -7 -8 -12 -5
-l-67 45s-20 -20 -46 -20s-48 20 -48 20l-67 -45c-5 -3 -10 -1 -11 5l-19 112c0 3 0 5 2 7l48 49c0 158 94 228 94 228s94 -70 94 -228zM144 256c17 0 31 14 31 32s-14 32 -31 32s-30 -14 -30 -32s13 -32 30 -32z" />
- <glyph glyph-name="ion-md-briefcase" unicode="&#xf2a2;"
-d="M304 304h112v-264c0 -22 -18 -40 -40 -40h-336c-22 0 -40 18 -40 40v264h112v40c0 22 18 40 40 40h112c22 0 40 -18 40 -40v-40zM264 304v40h-112v-40h112z" />
- <glyph glyph-name="ion-ios-flower" unicode="&#xf433;"
-d="M337 218c52 0 79 -11 79 -26s-27 -26 -79 -26c-27 0 -60 6 -86 13c-1 -3 -2 -6 -4 -9c23 -14 52 -32 71 -51c37 -37 48 -63 37 -74c-3 -2 -6 -4 -10 -4c-14 0 -36 13 -64 41c-19 19 -37 48 -51 71c-3 -2 -7 -3 -10 -4c7 -26 14 -59 14 -86c0 -52 -11 -79 -26 -79
-s-26 27 -26 79c0 27 7 60 14 86c-3 1 -6 2 -9 4c-14 -23 -33 -52 -52 -71c-28 -28 -50 -41 -64 -41c-4 0 -7 1 -10 4c-11 11 0 37 37 74c19 19 48 37 71 51c-2 3 -3 6 -4 9c-26 -7 -59 -13 -86 -13c-52 0 -79 11 -79 26s27 26 79 26c27 0 60 -7 86 -14c1 3 2 6 4 9
-c-23 14 -52 33 -71 52c-37 37 -48 63 -37 74c3 2 6 4 10 4c14 0 36 -13 64 -41c19 -19 37 -48 51 -71c3 2 6 3 9 4c-7 26 -13 59 -13 86c0 52 11 79 26 79s26 -27 26 -79c0 -27 -7 -60 -14 -86c3 -1 7 -2 10 -4c14 23 32 52 51 71c28 28 50 41 64 41c4 0 7 -1 10 -4
-c11 -11 0 -37 -37 -74c-19 -19 -48 -38 -71 -52c2 -3 3 -6 4 -9c26 7 59 14 86 14zM270 72c7 -7 14 -14 20 -19c9 -31 7 -50 -4 -54c-2 -1 -3 -1 -5 -1c-10 0 -22 11 -34 33c1 10 2 20 2 32s-1 25 -3 38c8 -11 16 -21 24 -29zM146 312c-7 7 -14 13 -20 18c-9 31 -7 51 4 55
-c2 1 3 1 5 1c10 0 22 -11 34 -33c-1 -10 -2 -20 -2 -32s1 -25 3 -38c-8 11 -16 21 -24 29zM88 129c-7 -7 -14 -14 -19 -20c-13 -4 -24 -5 -32 -5c-12 0 -19 4 -22 10c-4 10 6 24 32 38c10 -1 20 -1 32 -1s25 1 38 3c-11 -8 -21 -17 -29 -25zM328 254c7 7 14 14 19 20
-c13 4 24 6 32 6c12 0 19 -4 22 -10c4 -10 -6 -25 -32 -39c-10 1 -20 2 -32 2s-25 -2 -38 -4c11 8 21 17 29 25zM146 72c8 8 16 18 24 29c-2 -13 -3 -26 -3 -38c0 -10 0 -20 1 -28c-14 -24 -26 -36 -36 -36c-2 0 -3 0 -5 1c-10 4 -13 22 -5 50c8 6 16 14 24 22zM270 312
-c-8 -8 -16 -19 -24 -30c2 13 3 27 3 39c0 10 0 19 -1 27c14 24 26 36 36 36c2 0 3 1 5 0c10 -4 13 -23 5 -51c-8 -6 -16 -13 -24 -21zM52 232c-28 16 -41 30 -36 41c3 6 11 10 22 10c8 0 17 -2 28 -5c6 -8 14 -16 22 -24s18 -17 29 -25c-13 2 -26 4 -38 4
-c-10 0 -19 0 -27 -1zM364 152c28 -16 41 -31 36 -42c-3 -6 -11 -9 -22 -9c-8 0 -17 2 -28 5c-6 8 -14 15 -22 23s-18 17 -29 25c13 -2 26 -3 38 -3c10 0 19 0 27 1z" />
- <glyph glyph-name="ion-logo-github" unicode="&#xf239;" horiz-adv-x="448"
-d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5
-c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4
-c-89 30 -153 116 -153 218c0 127 100 230 224 230z" />
- <glyph glyph-name="ion-ios-play" unicode="&#xf488;" horiz-adv-x="256"
-d="M0 344c0 6 7 10 12 7l240 -152c5 -3 5 -11 0 -14l-240 -152c-5 -3 -12 1 -12 7v304z" />
- <glyph glyph-name="ion-md-globe" unicode="&#xf301;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM186 15c6 15 21 29 8 39c-8 7 -16 14 -23 21c-2 2 -11 20 -9 23c5 9 6 14 8 24c3 12 -3 16 -13 22c-15 10 -29 23 -43 34c-7 5 -17 10 -20 19s-5 20 -10 28c-14 20 -12 34 -10 58
-c0 7 -1 16 -2 25c-28 -32 -42 -73 -42 -116c0 -48 18 -92 52 -126c29 -29 65 -46 104 -51zM334 66c23 23 39 51 47 82c-8 -1 -19 2 -19 2s-21 24 -23 45c-2 22 0 39 -3 57c-3 16 -20 31 -27 46c-7 14 -13 28 -20 42c2 -1 5 -2 7 -3c5 1 10 2 14 2c-23 16 -49 25 -76 29v-8
-l4 -9l-14 -13l-9 3l-10 10l-10 12l-14 5c-16 -2 -31 -7 -45 -13v-7c7 3 16 5 23 8c3 1 13 -7 16 -9c-4 -5 -21 -15 -22 -21c0 -2 7 -6 7 -10c0 -6 -1 -11 -1 -17c3 3 20 21 22 21c13 3 35 -19 37 -26s-22 -24 -33 -34c-8 -8 -25 -12 -20 -24c2 -4 10 -20 5 -24
-c-6 -5 -14 9 -17 12c-8 10 -26 7 -38 7c0 -17 -1 -31 15 -43c15 -11 30 -25 47 -33c13 -6 36 7 47 -1c16 -11 29 -21 47 -29c8 -3 33 -20 26 -31c-5 -8 -10 -15 -14 -23s-13 -20 -20 -25c-8 -6 -16 -17 -21 -29c35 7 66 23 92 49z" />
- <glyph glyph-name="ion-md-cloud" unicode="&#xf2c9;" horiz-adv-x="480"
-d="M387 231c52 -3 93 -46 93 -99c0 -55 -45 -100 -100 -100h-260c-66 0 -120 54 -120 120c0 62 47 113 107 119c25 48 75 81 133 81c73 0 133 -52 147 -121z" />
- <glyph glyph-name="ion-md-egg" unicode="&#xf2e5;" horiz-adv-x="352"
-d="M176 416c70 0 176 -133 176 -257s-70 -191 -176 -191s-176 67 -176 191s106 257 176 257z" />
- <glyph glyph-name="ion-ios-easel" unicode="&#xf173;" horiz-adv-x="448"
-d="M402 -14c2 -4 1 -8 -1 -12s-7 -6 -11 -6h-1c-6 0 -11 3 -13 8l-26 70c-2 4 0 8 2 12s7 6 11 6c5 0 10 -3 12 -8zM86 64c4 0 9 -2 11 -6c3 -4 3 -8 1 -12l-26 -70c-2 -5 -6 -8 -12 -8h-1c-4 0 -9 2 -11 6s-3 8 -1 12l26 70c2 5 7 8 13 8zM225 64c7 0 13 -6 13 -13v-37
-c0 -7 -6 -14 -13 -14h-1c-7 0 -14 7 -14 14v37c0 7 7 13 14 13h1zM392 320c4 0 8 -4 8 -8v-176c0 -4 -4 -8 -8 -8h-336c-4 0 -8 4 -8 8v176c0 4 4 8 8 8h336zM416 368c18 0 32 -14 32 -32v-224c0 -18 -14 -32 -32 -32h-384c-18 0 -32 14 -32 32v224c0 18 14 32 32 32h384z
-M420 124v0v205c0 3 -1 6 -3 8v0c-2 2 -5 3 -8 3h-365c-9 0 -16 -7 -16 -16v-200c0 -9 7 -16 16 -16h360c9 0 16 7 16 16zM224 416c13 0 24 -13 24 -26h-48c0 13 11 26 24 26z" />
- <glyph glyph-name="ion-ios-log-out" unicode="&#xf1b2;"
-d="M264 76c8 0 14 -6 14 -14c0 -25 -21 -46 -46 -46h-186c-25 0 -46 21 -46 46v260c0 25 21 46 46 46h186c25 0 46 -21 46 -46c0 -8 -6 -14 -14 -14s-14 6 -14 14c0 10 -8 18 -18 18h-186c-10 0 -18 -8 -18 -18v-260c0 -10 8 -18 18 -18h186c10 0 18 8 18 18c0 8 6 14 14 14
-zM325 290l84 -84c4 -4 7 -10 7 -15s-3 -11 -7 -15l-82 -82c-3 -3 -6 -4 -10 -4s-7 2 -10 4v0c-5 6 -5 15 0 20l64 64h-257c-8 0 -14 6 -14 14s6 14 14 14h256l-65 64c-6 6 -6 14 0 20c3 3 6 4 10 4s7 -1 10 -4z" />
- <glyph glyph-name="ion-md-options" unicode="&#xf33c;" horiz-adv-x="448"
-d="M0 32v32h272v-32h-272zM368 32v32h80v-32h-80zM352 0c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM0 176v32h80v-32h-80zM176 176v32h272v-32h-272zM160 144c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96
-c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96zM0 320v32h272v-32h-272zM368 320v32h80v-32h-80zM352 288c0 -18 -14 -32 -32 -32v0c-18 0 -32 14 -32 32v96c0 18 14 32 32 32v0c18 0 32 -14 32 -32v-96z" />
- <glyph glyph-name="ion-md-color-filter" unicode="&#xf2d1;" horiz-adv-x="384"
-d="M378 328c8 -8 8 -22 0 -30l-67 -67l41 -41l-30 -30l-30 30l-191 -190h-101v101l190 191l-30 30l30 30l41 -41l67 67c8 8 22 8 30 0zM84 43l172 171l-42 42l-171 -172z" />
- <glyph glyph-name="ion-ios-heart" unicode="&#xf443;"
-d="M304 392c62 -1 112 -51 112 -113c0 -37 -16 -90 -48 -133c-60 -82 -160 -154 -160 -154s-100 72 -160 154c-32 43 -48 96 -48 133c0 62 50 112 112 113v0v0h1c40 0 75 -21 95 -52c20 31 55 52 95 52h1v0v0z" />
- <glyph glyph-name="ion-md-rewind" unicode="&#xf370;" horiz-adv-x="448"
-d="M218 46l-218 146l218 146v-292zM230 192l218 146v-292z" />
- <glyph glyph-name="ion-md-reorder" unicode="&#xf369;" horiz-adv-x="320"
-d="M0 64v36h320v-36h-320zM0 284v36h320v-36h-320zM0 212v35h320v-35h-320zM0 137v35h320v-35h-320z" />
- <glyph glyph-name="ion-md-bus" unicode="&#xf2a8;" horiz-adv-x="352"
-d="M0 96v204c0 75 82 84 176 84s176 -9 176 -84v-204c0 -18 -14 -24 -27 -36v-39c0 -12 -9 -21 -21 -21h-21c-12 0 -22 9 -22 21v22h-170v-22c0 -12 -10 -21 -22 -21h-21c-12 0 -21 9 -21 21v39c-13 12 -27 17 -27 36zM80 80c18 0 32 14 32 32s-14 32 -32 32
-s-32 -14 -32 -32s14 -32 32 -32zM272 80c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 203v106h-256v-106h256z" />
- <glyph glyph-name="ion-ios-medical" unicode="&#xf45c;" horiz-adv-x="353"
-d="M351 274c4 -7 1 -17 -6 -21l-99 -57c-3 -2 -3 -5 0 -7l99 -57c7 -4 10 -15 6 -22l-17 -28c-4 -7 -14 -10 -21 -6l-99 57c-3 2 -6 0 -6 -3v-115c0 -9 -6 -15 -15 -15h-33c-9 0 -16 6 -16 15v115c0 3 -3 5 -6 3l-98 -57c-7 -4 -17 -1 -21 6l-17 28c-4 7 -1 17 6 21l98 57
-c3 2 3 5 0 7l-98 57c-7 4 -10 15 -6 22l17 28c4 7 14 10 21 6l98 -57c3 -2 6 0 6 3v114c0 9 7 16 16 16h33c9 0 15 -7 15 -16v-114c0 -3 3 -5 6 -3l99 57c7 4 17 1 21 -6z" />
- <glyph glyph-name="ion-ios-stats" unicode="&#xf21c;" horiz-adv-x="352"
-d="M104 0c-4 0 -8 4 -8 8v368c0 4 4 8 8 8h48c4 0 8 -4 8 -8v-368c0 -4 -4 -8 -8 -8h-48zM8 0c-4 0 -8 4 -8 8v144c0 4 4 8 8 8h48c4 0 8 -4 8 -8v-144c0 -4 -4 -8 -8 -8h-48zM200 0c-4 0 -8 4 -8 8v208c0 4 4 8 8 8h48c4 0 8 -4 8 -8v-208c0 -4 -4 -8 -8 -8h-48zM288 312
-c0 4 4 8 8 8h48c4 0 8 -4 8 -8v-304c0 -4 -4 -8 -8 -8h-48c-4 0 -8 4 -8 8v304z" />
- <glyph glyph-name="ion-ios-battery-charging" unicode="&#xf120;" horiz-adv-x="480"
-d="M380 304c26 0 48 -22 48 -48v-128c0 -26 -22 -48 -48 -48h-332c-26 0 -48 22 -48 48v128c0 26 22 48 48 48h332zM400 128v128c0 11 -9 20 -20 20h-332c-11 0 -20 -9 -20 -20v-128c0 -11 9 -20 20 -20h332c11 0 20 9 20 20zM448 243c16 0 32 -27 32 -51s-16 -51 -32 -51
-v102zM368 256c7 0 12 -5 12 -12v-104c0 -7 -5 -12 -12 -12h-308c-7 0 -12 5 -12 12v104c0 7 5 12 12 12h308zM203 140l45 61h-27l8 43l-45 -61h27z" />
- <glyph glyph-name="ion-logo-pinterest" unicode="&#xf244;" horiz-adv-x="448"
-d="M224 416c124 0 224 -100 224 -224s-100 -224 -224 -224c-22 0 -44 3 -64 9c8 14 18 31 23 48c3 10 16 62 16 62c8 -15 30 -28 54 -28c72 0 121 65 121 153c0 66 -56 129 -142 129c-106 0 -160 -76 -160 -140c0 -39 15 -73 46 -86c5 -2 10 0 12 6c1 4 3 14 4 18
-c2 6 1 7 -3 12c-9 11 -15 24 -15 44c0 57 42 107 110 107c60 0 94 -36 94 -85c0 -65 -29 -119 -71 -119c-24 0 -42 19 -36 43c7 28 20 59 20 79c0 18 -10 34 -30 34c-24 0 -43 -25 -43 -58c0 -21 7 -36 7 -36s-25 -104 -29 -122c-4 -17 -5 -35 -4 -51
-c-79 35 -134 113 -134 205c0 124 100 224 224 224z" />
- <glyph glyph-name="ion-md-call" unicode="&#xf2ac;" horiz-adv-x="384"
-d="M363 117c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-201 0 -363 162 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 13 -77c2 -7 0 -16 -5 -21l-47 -47c31 -61 80 -110 141 -141l47 47c5 6 14 7 21 5c23 -7 49 -12 76 -12z" />
- <glyph glyph-name="ion-ios-redo" unicode="&#xf499;" horiz-adv-x="448"
-d="M0 16v37c0 20 -4 97 57 159c40 41 91 61 163 65c2 0 4 2 4 4v83c0 3 3 5 6 3l216 -142c2 -2 2 -5 0 -7l-216 -142c-3 -2 -6 1 -6 4v81c0 2 -2 4 -4 4c-44 -2 -69 -11 -97 -23c-36 -16 -73 -51 -95 -84c-13 -20 -19 -33 -21 -39c-1 -2 -2 -3 -4 -3h-3z" />
- <glyph glyph-name="ion-md-sync" unicode="&#xf38b;" horiz-adv-x="320"
-d="M160 355c88 0 160 -73 160 -163c0 -32 -9 -62 -25 -87l-29 30c9 17 14 37 14 57c0 67 -54 122 -120 122v-61l-80 82l80 81v-61zM160 70v61l80 -82l-80 -81v61c-88 0 -160 73 -160 163c0 32 9 63 25 87l29 -30c-9 -17 -14 -37 -14 -57c0 -67 54 -122 120 -122z" />
- <glyph glyph-name="ion-ios-remove-circle" unicode="&#xf1fb;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM298 176c9 0 16 7 16 16s-7 16 -16 16h-180c-9 0 -16 -6 -16 -16s8 -16 16 -16h180z" />
- <glyph glyph-name="ion-md-medal" unicode="&#xf326;"
-d="M226 296h-226l54 104h241zM122 71c0 48 38 86 86 86s87 -38 87 -86s-39 -87 -87 -87s-86 39 -86 87zM301 149c-2 3 -5 5 -7 7c-23 23 -54 36 -86 36l139 208l69 -104zM158 181c-13 -6 -26 -14 -36 -24c-16 -16 -27 -36 -32 -57l-90 162h104z" />
- <glyph glyph-name="ion-ios-mail-open" unicode="&#xf1b6;"
-d="M406 238c4 -4 10 -13 10 -25v-213c0 -18 -14 -32 -32 -32h-352c-18 0 -32 14 -32 32v212c0 11 5 21 10 26s159 162 159 162c10 11 24 16 39 16s29 -5 39 -16c0 0 155 -158 159 -162zM386 196c10 10 0 36 -16 36h-324s-26 -26 -16 -36l81 -85c1 -1 1 -2 0 -3l-75 -80
-c-5 -5 -5 -13 0 -18c2 -2 6 -4 9 -4s7 2 9 4l151 161c2 2 4 2 6 0l151 -161c2 -2 6 -4 9 -4s7 2 9 4c5 5 5 13 0 18l-75 80c-1 1 -1 2 0 3z" />
- <glyph glyph-name="ion-ios-checkbox" unicode="&#xf148;" horiz-adv-x="384"
-d="M352 384c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h320zM300 250c2 2 1 3 -1 5l-17 18c-1 1 -2 2 -3 2v0c-1 0 -2 -1 -3 -2l-122 -123l-44 45c-1 1 -2 1 -3 1s-2 0 -3 -1l-18 -18c-2 -2 -2 -4 0 -6l56 -56
-c4 -4 8 -5 12 -5c5 0 10 3 12 5v0z" />
- <glyph glyph-name="ion-ios-code-download" unicode="&#xf155;" horiz-adv-x="384"
-d="M268 305l114 -109c1 -1 2 -2 2 -4s-1 -3 -2 -4l-114 -109c-1 -1 -2 -2 -4 -2s-3 1 -4 2l-14 13c-1 1 -2 2 -2 4s1 3 2 4l96 92l-96 92c-1 1 -2 2 -2 4s1 3 2 4l14 13c1 1 3 2 4 2s3 -1 4 -2zM42 192l96 -92c1 -1 2 -2 2 -4s-1 -3 -2 -4l-14 -13c-1 -1 -2 -2 -4 -2
-c-1 0 -3 1 -4 2l-114 109c-1 1 -2 2 -2 4s1 3 2 4l114 109c1 1 3 2 4 2s3 -1 4 -2l14 -13c1 -1 2 -2 2 -4s-1 -3 -2 -4zM269 181c0 -4 -2 -8 -5 -11l-62 -57c-3 -2 -6 -4 -10 -4s-7 2 -10 4l-62 57c-3 3 -5 7 -5 11s1 7 4 10v0c3 3 7 4 11 4c3 0 6 -1 9 -3l39 -35v106
-c0 8 6 15 14 15s14 -7 14 -15v-106l39 35c3 2 5 4 9 4s7 -2 10 -5h1c3 -3 4 -6 4 -10z" />
- <glyph glyph-name="ion-ios-alarm" unicode="&#xf3c8;" horiz-adv-x="384"
-d="M317 384c38 -2 67 -33 67 -69c0 -18 -7 -26 -16 -37c-1 -1 -3 -2 -5 -2h-1c-2 0 -3 1 -4 2l-90 80c-2 1 -2 4 -2 6s0 4 2 5c13 10 29 15 45 15v0h4zM0 315c0 36 29 67 67 69h4v0c16 0 32 -5 45 -15c2 -1 2 -3 2 -5s0 -5 -2 -6l-90 -80c-1 -1 -2 -2 -4 -2h-1
-c-2 0 -4 1 -5 2c-9 11 -16 19 -16 37zM326 62l35 -36c6 -6 5 -15 -1 -21c-3 -3 -8 -5 -12 -5s-8 2 -11 5l-34 35c-30 -25 -69 -40 -111 -40s-81 15 -111 40l-35 -35c-3 -3 -7 -5 -11 -5s-8 2 -11 5c-6 6 -7 15 -1 21l35 36c-26 31 -42 70 -42 114c0 97 79 176 176 176
-s176 -79 176 -176c0 -44 -16 -83 -42 -114zM206 174v116c0 8 -6 14 -14 14s-14 -6 -14 -14v-102h-68c-8 0 -14 -6 -14 -14s6 -14 14 -14h82c8 0 14 6 14 14z" />
- <glyph glyph-name="ion-ios-send" unicode="&#xf20c;" horiz-adv-x="384"
-d="M372 383c7 3 14 -4 11 -11l-152 -367c-3 -6 -12 -6 -15 0l-65 104c-4 6 -3 14 2 19l169 191c1 1 3 4 2 5s-5 -1 -6 -2l-195 -168c-5 -4 -13 -5 -19 -2l-99 56c-7 3 -6 12 0 15z" />
- <glyph glyph-name="ion-ios-fastforward" unicode="&#xf427;" horiz-adv-x="448"
-d="M444 199c5 -3 5 -11 0 -14l-208 -120c-5 -3 -12 1 -12 7v115l-212 -122c-5 -3 -12 1 -12 7v240c0 6 7 10 12 7l212 -122v115c0 6 7 10 12 7z" />
- <glyph glyph-name="ion-ios-timer" unicode="&#xf4c1;" horiz-adv-x="400"
-d="M200 -8c-110 0 -200 90 -200 200c0 55 21 106 61 144c6 6 17 6 23 0s6 -17 0 -23c-33 -32 -52 -75 -52 -121c0 -92 76 -168 168 -168s168 76 168 168c0 87 -67 159 -152 167v-63c0 -9 -7 -16 -16 -16s-16 7 -16 16v80c0 9 7 16 16 16c110 0 200 -90 200 -200
-s-90 -200 -200 -200zM120 286l99 -71c14 -10 17 -28 7 -42s-28 -17 -42 -7c-3 2 -5 4 -7 7l-71 99c-3 4 -2 11 2 14s9 2 12 0z" />
- <glyph glyph-name="ion-md-water" unicode="&#xf3a7;" horiz-adv-x="352"
-d="M300 285c69 -72 69 -191 0 -263c-34 -36 -79 -54 -124 -54s-91 18 -125 54c-69 72 -69 191 0 263l125 131z" />
- <glyph glyph-name="ion-ios-heart-empty" unicode="&#xf19b;"
-d="M304 392c62 -1 112 -51 112 -113c0 -37 -16 -90 -48 -133c-60 -82 -160 -154 -160 -154s-100 72 -160 154c-32 43 -48 96 -48 133c0 62 50 112 112 113v0v0h1c40 0 75 -21 95 -52c20 31 55 52 95 52h1v0v0zM346 163c29 40 42 87 42 116c0 22 -8 44 -24 60s-38 25 -60 25
-v0h-1v0c-14 0 -28 -4 -41 -11c-12 -7 -22 -16 -30 -28c-5 -8 -14 -13 -24 -13s-18 5 -23 13c-8 12 -19 21 -31 28c-13 7 -27 11 -41 11v0h-1v0c-23 0 -43 -9 -59 -25s-25 -37 -25 -60c0 -29 13 -76 42 -116c43 -58 108 -112 138 -136c30 24 95 78 138 136z" />
- <glyph glyph-name="ion-md-radio-button-off" unicode="&#xf360;"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM208 26c92 0 166 74 166 166s-74 166 -166 166s-166 -74 -166 -166s74 -166 166 -166z" />
- <glyph glyph-name="ion-md-chatboxes" unicode="&#xf2b6;"
-d="M344 384c4 0 7 -4 7 -8v-214c0 -4 -3 -9 -7 -9h-187l-90 -89v89h-57c-4 0 -10 5 -10 9v214c0 4 6 8 10 8h334zM408 321c4 0 8 -5 8 -9v-214c0 -4 -4 -9 -8 -9h-57v-89l-90 89h-130l39 39h181c18 0 25 10 25 26v167h32z" />
- <glyph glyph-name="ion-md-exit" unicode="&#xf2e6;" horiz-adv-x="384"
-d="M151 115l55 56h-206v42h207l-56 56l30 30l107 -107l-107 -107zM341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85h43v-85h298v298h-298v-85h-43v85c0 23 20 43 43 43h298z" />
- <glyph glyph-name="ion-ios-pulse" unicode="&#xf493;" horiz-adv-x="448"
-d="M403 176c25 -1 44 -21 45 -46c1 -27 -21 -50 -48 -50c-20 0 -38 13 -45 31h-51c-7 0 -13 5 -15 11l-16 47l-50 -173c-2 -7 -8 -12 -15 -12h-1c-8 0 -14 6 -15 13l-51 308l-37 -182c-2 -7 -9 -12 -16 -12h-72c-9 0 -16 7 -16 16v0c0 9 7 16 16 16h59l53 245
-c2 7 9 12 17 12s14 -5 15 -13l52 -315l45 156c2 7 8 11 15 11v0c7 0 13 -4 15 -11l29 -85h38c7 20 27 34 49 33z" />
- <glyph glyph-name="ion-md-folder" unicode="&#xf2f5;" horiz-adv-x="448"
-d="M181 352l43 -48h181c23 0 43 -20 43 -43v-186c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v234c0 23 20 43 43 43h138z" />
- <glyph glyph-name="ion-ios-copy" unicode="&#xf41c;" horiz-adv-x="384"
-d="M288 333c-10 0 -19 9 -19 19v72c0 4 3 8 7 8v0c6 0 16 -4 21 -8l77 -64c6 -5 10 -13 10 -21v0c0 -3 -3 -6 -6 -6h-90zM243 352c0 -25 20 -45 45 -45h96v-243c0 -18 -14 -32 -32 -32h-240c-18 0 -32 14 -32 32v336c0 18 14 32 32 32h131v-80zM52 36c0 -18 14 -32 32 -32
-h236v-20c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v352c0 18 14 32 32 32h20v-332z" />
- <glyph glyph-name="ion-md-basket" unicode="&#xf292;" horiz-adv-x="448"
-d="M330 243h98c11 0 20 -9 20 -20l-1 -6l-51 -187c-5 -17 -21 -30 -40 -30h-264c-19 0 -35 13 -40 30l-51 187c-1 2 -1 4 -1 6c0 11 9 20 20 20h98l89 132c4 6 11 9 17 9s13 -2 17 -8zM163 243h122l-61 89zM224 81c22 0 41 18 41 40s-19 41 -41 41s-41 -19 -41 -41
-s19 -40 41 -40z" />
- <glyph glyph-name="ion-ios-contacts" unicode="&#xf161;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM351 136c9 -3 17 -8 23 -15c10 22 14 46 14 71c0 49 -19 94 -54 128c-34 33 -80 52 -128 52c-47 0 -91 -19 -125 -52c-34 -34 -53 -80 -53 -128c0 -33 9 -64 25 -92
-c13 7 27 8 42 11c7 1 23 5 25 13s2 15 2 23c0 3 -1 3 -3 5c-4 4 -6 9 -8 14c-2 8 -3 16 -4 24c-9 -2 -10 16 -12 21c-1 4 -2 19 4 22c-3 5 -4 12 -5 18c-2 13 -2 26 3 39c10 26 36 39 63 38c26 -1 52 -15 60 -41c4 -12 3 -27 1 -40c-1 -5 -3 -10 -5 -14c8 -3 4 -21 3 -24
-c-2 -5 -2 -21 -11 -19c-1 -10 -2 -22 -7 -31c-1 -2 -8 -8 -8 -10v-11c0 -5 0 -10 2 -15s10 -7 14 -8c14 -5 28 -5 42 -10c28 -10 45 -35 45 -65v0c0 -2 3 -3 5 -2s3 2 5 3c4 3 6 8 6 12c-2 17 -7 31 -20 44c-20 19 -46 25 -46 25c-3 1 -8 2 -12 3s-4 6 0 8c8 3 13 5 16 6
-c4 1 15 4 16 9v14c-21 2 -29 6 -29 6c-6 3 -2 6 0 11c14 32 -10 88 32 105c7 3 15 4 25 4c12 0 23 -2 31 -7c15 -9 20 -27 20 -44c0 -20 -4 -44 7 -62c2 -3 4 -4 0 -6c0 0 -6 -5 -31 -6c0 0 -2 -13 1 -17c6 -7 21 -7 29 -10z" />
- <glyph glyph-name="ion-ios-desktop" unicode="&#xf16c;" horiz-adv-x="448"
-d="M320 6c0 -3 -2 -6 -5 -6h-182c-3 0 -5 3 -5 6c0 2 2 4 4 4l22 2c12 3 21 16 23 28l1 8h92l1 -8c2 -12 11 -25 23 -28l22 -2c2 0 4 -2 4 -4zM441 377c4 -4 7 -11 7 -17v-272c0 -6 -3 -13 -7 -17s-11 -7 -17 -7h-400c-6 0 -13 3 -17 7s-7 11 -7 17v272c0 6 3 13 7 17
-s11 7 17 7h400c6 0 13 -3 17 -7zM224 88c4 0 8 4 8 8s-4 8 -8 8s-8 -4 -8 -8s4 -8 8 -8zM428 128c2 0 4 2 4 4v224c0 7 -5 12 -12 12h-392c-7 0 -12 -5 -12 -12v-224c0 -2 2 -4 4 -4h408z" />
- <glyph glyph-name="ion-logo-yahoo" unicode="&#xf34d;" horiz-adv-x="320"
-d="M289 380c11 0 21 1 31 4l-128 -213v-171c-10 4 -21 4 -32 4s-22 0 -32 -4v171l-128 213c10 -4 21 -4 32 -4s22 0 32 4l96 -160l96 160c10 -4 22 -4 33 -4z" />
- <glyph glyph-name="ion-ios-laptop" unicode="&#xf1a8;" horiz-adv-x="480"
-d="M432 80h48v0c0 -10 -10 -19 -20 -23s-28 -9 -48 -9h-344c-20 0 -38 5 -49 10c-9 4 -19 12 -19 22v0h48v239c0 10 8 17 17 17h350c9 0 17 -8 17 -17v-239zM240 328c-2 0 -4 -2 -4 -4s2 -4 4 -4s4 2 4 4s-2 4 -4 4zM66 312c-1 0 -2 -1 -2 -2v-212c0 -1 1 -2 2 -2h348
-c1 0 2 1 2 2v212c0 1 -1 2 -2 2h-348zM282 72c7 0 10 6 10 8h-104c0 -2 5 -8 10 -8h84z" />
- <glyph glyph-name="ion-ios-flame" unicode="&#xf42f;" horiz-adv-x="288"
-d="M108 400c98 -59 187 -161 180 -267c-8 -125 -117 -149 -143 -149s-144 38 -145 149c-1 136 137 132 108 267zM182 45c2 6 3 12 3 18c0 41 -41 88 -41 88s-40 -47 -40 -88c0 -6 0 -12 2 -18c10 -39 66 -39 76 0z" />
- <glyph glyph-name="ion-md-contract" unicode="&#xf2d8;" horiz-adv-x="384"
-d="M0 77v51h128v-128h-51v77h-77zM77 307v77h51v-128h-128v51h77zM256 0v128h128v-51h-77v-77h-51zM307 307h77v-51h-128v128h51v-77z" />
- <glyph glyph-name="ion-md-female" unicode="&#xf2eb;" horiz-adv-x="288"
-d="M288 272c0 -71 -52 -131 -120 -142v-50h72v-48h-72v-64h-48v64h-72v48h72v50c-68 11 -120 71 -120 142c0 80 64 144 144 144s144 -64 144 -144zM48 272c0 -53 43 -96 96 -96s96 43 96 96s-43 96 -96 96s-96 -43 -96 -96z" />
- <glyph glyph-name="ion-md-share" unicode="&#xf379;" horiz-adv-x="384"
-d="M320 104c34 0 62 -28 62 -62s-28 -62 -62 -62s-62 28 -62 62c0 5 1 10 2 14l-152 88c-12 -11 -27 -17 -44 -17c-35 0 -64 29 -64 64s28 64 63 64c17 0 32 -6 44 -17l151 87c-1 5 -2 10 -2 15c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64c-17 0 -32 6 -44 17
-l-151 -87c1 -5 2 -10 2 -15s-1 -10 -2 -15l153 -88c11 11 26 16 42 16z" />
- <glyph glyph-name="ion-md-calculator" unicode="&#xf2aa;" horiz-adv-x="320"
-d="M272 400c27 0 48 -22 48 -48v-320c0 -26 -22 -48 -48 -48h-224c-27 0 -48 22 -48 48v320c0 26 21 48 48 48h224zM104 32v48h-48v-48h48zM104 120v48h-48v-48h48zM104 208v48h-48v-48h48zM184 32v48h-48v-48h48zM184 120v48h-48v-48h48zM184 208v48h-48v-48h48zM264 32
-v136h-48v-136h48zM264 208v48h-48v-48h48zM264 304v48h-208v-48h208z" />
- <glyph glyph-name="ion-ios-nutrition" unicode="&#xf470;" horiz-adv-x="384"
-d="M295 216v0c6 -6 9 -14 9 -23c0 -11 -5 -20 -13 -26v0s-44 -33 -97 -72c-3 -2 -7 -2 -10 0l-37 26c-4 3 -8 3 -10 1v0c-2 -2 -2 -6 1 -10l21 -32c2 -4 1 -9 -2 -11l-105 -77c-6 -4 -12 -8 -20 -8c-18 0 -32 14 -32 32c0 7 2 13 5 18v0c1 2 11 18 29 46c2 4 6 5 10 3l17 -8
-c4 -3 8 -3 10 -1v0c2 2 2 6 -1 10l-14 24c-2 3 -2 6 0 8c24 39 49 79 71 114c2 4 7 4 11 2l32 -20c4 -3 8 -3 10 -1v0c2 2 2 6 -1 10l-27 41c-2 3 -2 5 0 8l12 20v0c6 10 16 16 28 16c9 0 18 -4 24 -10v0l79 -79v-1v0zM383 317c2 -4 1 -9 -3 -11l-92 -47l-28 29l57 108
-c2 4 7 5 11 3l18 -8c4 -2 5 -7 3 -11l-48 -79l60 37c4 2 9 1 11 -3z" />
- <glyph glyph-name="ion-md-folder-open" unicode="&#xf2f4;" horiz-adv-x="448"
-d="M405 304c23 0 43 -20 43 -43v-186c0 -23 -20 -43 -43 -43h-362c-23 0 -43 20 -43 43v234c0 23 20 43 43 43h138l43 -48h181zM416 75v186c0 6 -5 11 -11 11h-373v-197c0 -6 5 -11 11 -11h362c6 0 11 5 11 11z" />
- <glyph glyph-name="ion-md-bug" unicode="&#xf2a5;" horiz-adv-x="384"
-d="M384 288v-48h-50c1 -8 2 -16 2 -24v-24h48v-48h-48v-24c0 -8 -1 -16 -2 -24h50v-48h-67c-25 -43 -72 -72 -125 -72s-100 29 -125 72h-67v48h50c-1 8 -2 16 -2 24v24h-48v48h48v24c0 8 1 16 2 24h-50v48h68c11 19 25 35 43 47l-39 39l34 34l52 -52c11 3 22 4 34 4
-s23 -1 34 -4l52 52l34 -34l-39 -39c18 -12 33 -28 44 -47h67z" />
- <glyph glyph-name="ion-md-arrow-round-up" unicode="&#xf28b;" horiz-adv-x="332"
-d="M323 221c12 -12 12 -31 0 -43s-34 -12 -46 0l-79 83v-214c0 -17 -14 -31 -32 -31s-32 14 -32 31v214l-79 -83c-12 -12 -34 -12 -46 0s-12 31 0 43l134 138c6 6 14 9 23 9v0c9 0 17 -3 23 -9z" />
- <glyph glyph-name="ion-ios-save" unicode="&#xf1a6;" horiz-adv-x="384"
-d="M208 384c4 0 8 -4 8 -8v-72c0 -4 -4 -8 -8 -8h-12c-4 0 -12 4 -12 8v72c0 4 4 8 8 8h16zM370 318c9 -9 14 -21 14 -34v-252c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h32c9 0 16 -7 16 -16v-80c0 -9 7 -16 16 -16h128c9 0 16 7 16 16v80
-c0 9 7 16 16 16h28c13 0 25 -5 34 -14zM258 48v96c0 9 -8 16 -18 16h-160c-10 0 -18 -7 -18 -16v-96c0 -9 8 -16 18 -16h160c10 0 18 7 18 16z" />
- <glyph glyph-name="ion-md-ribbon" unicode="&#xf371;" horiz-adv-x="384"
-d="M192 416c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM192 208c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM130 141c20 -8 40 -13 62 -13c9 0 18 1 26 2l-26 -56l-48 -106l-48 80h-96l75 131c1 -2 3 -3 4 -4
-c15 -15 32 -26 51 -34zM309 179l75 -131h-96l-48 -80l-32 70l22 49l24 54c19 8 36 19 51 34z" />
- <glyph glyph-name="ion-ios-sunny" unicode="&#xf4b7;"
-d="M208 61c8 0 15 -7 15 -15v-47c0 -8 -7 -15 -15 -15s-15 7 -15 15v47c0 8 7 15 15 15zM208 400c8 0 15 -7 15 -15v-47c0 -8 -7 -15 -15 -15s-15 7 -15 15v47c0 8 7 15 15 15zM77 192c0 -8 -7 -15 -15 -15h-47c-8 0 -15 7 -15 15s7 15 15 15h47c8 0 15 -7 15 -15zM401 207
-c8 0 15 -7 15 -15s-7 -15 -15 -15h-47c-8 0 -15 7 -15 15s7 15 15 15h47zM104 104c4 0 8 -2 11 -5c6 -6 6 -15 0 -21l-32 -33c-3 -3 -7 -5 -11 -5s-8 2 -11 5s-5 7 -5 11s2 8 5 11l33 32c3 3 6 5 10 5zM312 280c-4 0 -8 2 -11 5s-5 7 -5 11s2 7 5 10l32 33c3 3 7 5 11 5
-s8 -2 11 -5s5 -7 5 -11s-2 -8 -5 -11l-33 -32c-3 -3 -6 -5 -10 -5zM83 339l32 -33c3 -3 5 -6 5 -10s-2 -8 -5 -11s-7 -5 -11 -5s-7 2 -10 5l-33 32c-3 3 -5 7 -5 11s2 8 5 11s7 5 11 5s8 -2 11 -5zM322 99l33 -32c3 -3 5 -7 5 -11s-2 -8 -5 -11s-7 -5 -11 -5s-8 2 -11 5
-l-32 33c-6 6 -6 15 0 21c3 3 7 5 11 5s7 -2 10 -5zM208 288v0c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96z" />
- <glyph glyph-name="ion-ios-subway" unicode="&#xf21e;" horiz-adv-x="320"
-d="M256 416c35 0 64 -29 64 -64v-232c0 -35 -29 -64 -64 -64h-192c-35 0 -64 29 -64 64v232c0 35 29 64 64 64h192zM104 392c-4 0 -8 -4 -8 -8s4 -8 8 -8h112c4 0 8 4 8 8s-4 8 -8 8h-112zM72 88c16 0 28 12 28 28s-12 28 -28 28s-28 -12 -28 -28s12 -28 28 -28zM248 88
-c16 0 28 12 28 28s-12 28 -28 28s-28 -12 -28 -28s12 -28 28 -28zM288 240v96c0 9 -7 16 -16 16h-224c-9 0 -16 -7 -16 -16v-96c0 -9 7 -16 16 -16h224c9 0 16 7 16 16zM298 -8c6 -5 6 -14 0 -20c-3 -3 -6 -4 -10 -4s-7 1 -10 4l-14 14h-208l-14 -14c-3 -3 -6 -4 -10 -4
-s-7 1 -10 4c-5 6 -6 15 0 20l50 48c6 5 15 6 20 0s6 -15 0 -20l-6 -6h148l-6 6c-6 5 -5 14 0 20s14 5 20 0z" />
- <glyph glyph-name="ion-md-clock" unicode="&#xf2be;"
-d="M355 339c81 -81 81 -213 0 -294s-213 -81 -294 0s-81 213 0 294s213 81 294 0zM339 286c-8 -4 -10 -14 -6 -22s14 -10 22 -6s10 14 6 22s-14 10 -22 6zM32 192c0 -9 7 -16 16 -16s16 7 16 16s-7 16 -16 16s-16 -7 -16 -16zM77 98c8 4 10 14 6 22s-14 10 -22 6
-s-9 -14 -5 -22s13 -10 21 -6zM83 264c4 8 2 18 -6 22s-17 2 -21 -6s-3 -18 5 -22s18 -2 22 6zM120 344c-8 -4 -10 -14 -6 -22s14 -9 22 -5s10 13 6 21s-14 10 -22 6zM112 234l80 -47v-123h31v139l-95 57zM142 45c4 8 2 18 -6 22s-18 2 -22 -6s-2 -17 6 -21s18 -3 22 5z
-M208 16c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM208 336c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16zM296 40c8 4 10 14 6 22s-14 9 -22 5s-10 -13 -6 -21s14 -10 22 -6zM302 323c4 8 2 17 -6 21s-18 3 -22 -5s-2 -18 6 -22s18 -2 22 6z
-M360 104c4 8 3 18 -5 22s-18 2 -22 -6s-2 -18 6 -22s17 -2 21 6zM368 176c9 0 16 7 16 16s-7 16 -16 16s-16 -7 -16 -16s7 -16 16 -16z" />
- <glyph glyph-name="ion-ios-notifications-outline" unicode="&#xf133;" horiz-adv-x="320"
-d="M193 45v0c8 0 15 -8 13 -16c-5 -22 -20 -37 -46 -37s-42 15 -47 37c-2 8 5 16 13 16v0c6 0 11 -4 12 -10c1 -4 3 -8 5 -11c1 -1 6 -6 17 -6s15 4 16 6c2 3 4 7 5 11c1 6 6 10 12 10zM316 96c10 -13 0 -32 -16 -32h-140h-140c-16 0 -26 19 -16 32c15 20 46 32 46 123
-c0 93 41 131 79 140c4 1 7 2 7 6v3c0 13 11 24 24 24v0v0c13 0 24 -11 24 -24v-3c0 -4 2 -5 6 -6c38 -9 80 -47 80 -140c0 -91 31 -103 46 -123zM277 90c4 0 5 4 3 7c-7 8 -16 19 -22 34c-10 23 -14 51 -14 88s-7 67 -21 87c-12 18 -28 25 -39 27c-7 2 -13 5 -18 11
-c-3 4 -9 4 -12 0c-4 -5 -11 -9 -19 -11c-11 -2 -27 -9 -39 -27c-14 -20 -21 -50 -21 -87s-4 -65 -14 -88c-6 -15 -14 -26 -21 -34c-2 -3 -1 -7 3 -7h234z" />
- <glyph glyph-name="ion-ios-quote" unicode="&#xf1f5;" horiz-adv-x="320"
-d="M113 352v0c18 0 31 -13 31 -31v-192c0 -52 -21 -84 -28 -94c-2 -2 -5 -3 -7 -3h-40c-7 0 -11 8 -6 13c12 14 30 38 32 74c0 5 -3 9 -8 9h-39c-26 0 -48 22 -48 48v128c0 26 22 48 48 48h65zM289 352v0c18 0 31 -13 31 -31v-192c0 -52 -21 -84 -28 -94c-2 -2 -5 -3 -7 -3
-h-40c-7 0 -11 8 -6 13c12 14 30 38 32 74c0 5 -3 9 -8 9h-39c-26 0 -48 22 -48 48v128c0 26 22 48 48 48h65z" />
- <glyph glyph-name="ion-ios-pause" unicode="&#xf478;" horiz-adv-x="256"
-d="M72 32h-64c-4 0 -8 4 -8 8v304c0 4 4 8 8 8h64c4 0 8 -4 8 -8v-304c0 -4 -4 -8 -8 -8zM248 32h-64c-4 0 -8 4 -8 8v304c0 4 4 8 8 8h64c4 0 8 -4 8 -8v-304c0 -4 -4 -8 -8 -8z" />
- <glyph glyph-name="ion-ios-remove" unicode="&#xf1fc;" horiz-adv-x="257"
-d="M241 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-225c-4 0 -8 2 -11 5s-5 7 -5 11c0 9 7 16 16 16h225z" />
- <glyph glyph-name="ion-ios-done-all" unicode="&#xf171;" horiz-adv-x="320"
-d="M222 238l-67 -69l-26 27l66 69c1 1 3 2 4 2v0c1 0 2 -1 3 -2l20 -21c2 -2 2 -4 0 -6zM28 195l76 -79l-13 -14v0c-2 -2 -7 -6 -13 -6c-4 0 -9 3 -13 7l-64 65c-2 2 -2 4 0 6l20 21c1 1 3 1 4 1s2 0 3 -1zM319 266c2 -2 2 -5 0 -7l-151 -156v0c-2 -2 -7 -6 -13 -6
-c-4 0 -10 2 -14 6l-63 65c-2 2 -2 5 0 7l20 21c1 1 2 1 3 1s3 0 4 -1l50 -52l138 143c1 1 2 1 3 1v0c1 0 2 0 3 -1z" />
- <glyph glyph-name="ion-md-recording" unicode="&#xf364;" horiz-adv-x="420"
-d="M324 288c53 0 96 -43 96 -96s-43 -96 -96 -96h-228c-53 0 -96 43 -96 96s43 96 96 96s97 -43 97 -96c0 -24 -8 -44 -22 -61h79c-14 17 -22 37 -22 61c0 53 43 96 96 96zM96 131c34 0 61 27 61 61s-27 61 -61 61s-61 -27 -61 -61s27 -61 61 -61zM324 131c34 0 61 27 61 61
-s-27 61 -61 61s-61 -27 -61 -61s27 -61 61 -61z" />
- <glyph glyph-name="ion-ios-archive" unicode="&#xf10e;"
-d="M412 328h-408c-2 0 -4 2 -4 4v20c0 18 14 32 32 32h352c18 0 32 -14 32 -32v-20c0 -2 -2 -4 -4 -4zM392 302c4 0 8 -4 8 -8v-262c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v262c0 4 4 8 8 8h368zM258 160c8 0 15 8 14 16c-1 7 -7 12 -14 12h-100
-c-8 0 -15 -8 -14 -16c1 -7 7 -12 14 -12h100z" />
- <glyph glyph-name="ion-ios-text" unicode="&#xf250;"
-d="M208 384c115 0 208 -75 208 -168s-93 -168 -208 -168c-10 0 -19 1 -28 2c-6 -7 -25 -27 -47 -37c-18 -8 -39 -12 -51 -13c-3 0 -5 4 -3 6c12 14 28 35 33 61c-67 28 -112 84 -112 149c0 93 93 168 208 168z" />
- <glyph glyph-name="ion-ios-remove-circle-outline" unicode="&#xf1fa;"
-d="M298 208c9 0 16 -7 16 -16s-7 -16 -16 -16h-180c-8 0 -16 6 -16 16s7 16 16 16h180zM208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208
-s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208z" />
- <glyph glyph-name="ion-ios-attach" unicode="&#xf11b;" horiz-adv-x="231"
-d="M216 287c9 0 15 -7 15 -16v-194c0 -14 -3 -28 -9 -42c-6 -13 -14 -25 -24 -35c-21 -20 -48 -32 -76 -32h-13c-28 0 -55 11 -76 32c-20 20 -33 49 -33 78v251c0 24 9 45 26 61s38 26 62 26s46 -10 62 -26c17 -16 26 -38 26 -61v-235c0 -18 -7 -33 -18 -44s-26 -18 -42 -18
-c-34 0 -60 26 -60 62v134c0 9 7 16 16 16s15 -7 15 -16v-134c0 -19 15 -32 29 -32c15 0 29 15 29 32v235c0 15 -7 29 -17 39s-25 16 -40 16s-30 -6 -41 -16c-11 -11 -17 -24 -17 -39v-251c0 -20 9 -39 24 -55s35 -25 55 -25h13c20 0 42 9 56 24s22 35 22 55v194
-c0 9 7 16 16 16z" />
- <glyph glyph-name="ion-md-undo" unicode="&#xf39d;" horiz-adv-x="448"
-d="M230 268c102 0 188 -66 218 -157l-52 -15c-23 70 -89 118 -166 118c-43 0 -82 -16 -112 -41l80 -77h-198v192l80 -76c40 35 92 56 150 56z" />
- <glyph glyph-name="ion-md-refresh-circle" unicode="&#xf228;"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM320 206v98l-33 -33c-20 20 -48 33 -79 33c-62 0 -112 -50 -112 -112s50 -112 112 -112c51 0 93 34 107 80h-29c-12 -31 -43 -52 -78 -52c-46 0 -84 38 -84 84s38 84 84 84
-c23 0 44 -10 59 -25l-45 -45h98z" />
- <glyph glyph-name="ion-ios-switch" unicode="&#xf221;"
-d="M54 80c0 23 19 42 42 42s42 -19 42 -42s-19 -42 -42 -42s-42 19 -42 42zM320 176c53 0 96 -43 96 -96s-43 -96 -96 -96h-224c-53 0 -96 43 -96 96s43 96 96 96h224zM96 16c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM278 304c0 23 19 42 42 42
-s42 -19 42 -42s-19 -42 -42 -42s-42 19 -42 42zM96 208c-53 0 -96 43 -96 96s43 96 96 96h224c53 0 96 -43 96 -96s-43 -96 -96 -96h-224zM320 368c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64z" />
- <glyph glyph-name="ion-logo-bitcoin" unicode="&#xf22b;" horiz-adv-x="320"
-d="M314 169c4 -10 7 -30 6 -44c-1 -16 -5 -37 -16 -51s-26 -24 -45 -31c-15 -6 -33 -10 -59 -11v-64h-40v64h-32v-64h-41v64h-87l9 48h26c9 0 9 0 12 1s4 4 5 7s2 8 2 17v173c0 9 -1 16 -2 18s-3 4 -6 6s-9 2 -18 2h-28v48h87v64h41v-64h32v64h40v-64c20 -1 33 -4 46 -9
-c16 -6 28 -15 37 -27s12 -28 13 -45c1 -10 0 -20 -3 -28c-2 -8 -8 -16 -16 -23c-6 -6 -11 -9 -16 -11c9 -2 17 -6 25 -10c15 -8 23 -18 28 -30zM128 298v-74h32v74h-32zM128 86h32v90h-32v-90zM200 294v-66c6 3 9 7 13 12c5 6 7 12 7 20s-2 15 -6 21c-4 5 -8 11 -14 13z
-M229 107c8 7 10 15 10 26c0 9 -3 19 -8 25s-12 10 -20 13c-4 2 -6 2 -11 3v-82c2 0 5 1 7 2c10 4 14 6 22 13z" />
- <glyph glyph-name="ion-ios-return-left" unicode="&#xf202;" horiz-adv-x="384"
-d="M6 183l60 59c3 3 6 4 10 4s7 -1 10 -4s4 -6 4 -10s-1 -7 -4 -10v0l-41 -40h261c13 0 25 5 35 15c10 9 15 22 15 35v48c0 8 6 14 14 14s14 -6 14 -14v-48c0 -21 -8 -40 -23 -55s-34 -23 -55 -23h-262l40 -40c3 -3 4 -6 4 -10s-1 -7 -4 -10v0c-3 -2 -6 -4 -10 -4
-s-7 1 -10 4l-58 58c-4 4 -6 9 -6 15s2 12 6 16z" />
- <glyph glyph-name="ion-ios-trending-down" unicode="&#xf25a;" horiz-adv-x="448"
-d="M448 79c0 -8 -7 -15 -15 -15h-121c-8 0 -15 7 -15 15s7 15 15 15h84l-138 142l-86 -84c-3 -3 -7 -5 -11 -5s-8 2 -11 5l-146 143c-2 2 -4 6 -4 11c0 4 1 7 4 10s7 4 11 4s8 -1 11 -4l135 -133l86 84c3 3 7 4 11 4s8 -1 11 -4l149 -152v82c0 8 7 15 15 15s15 -7 15 -15
-v-118z" />
- <glyph glyph-name="ion-logo-tumblr" unicode="&#xf24d;" horiz-adv-x="256"
-d="M193 52c21 0 42 6 63 20v-65c-18 -8 -34 -15 -48 -18s-28 -5 -45 -5c-19 0 -35 2 -50 7c-14 5 -28 12 -38 21s-17 18 -21 28s-6 25 -6 44v140h-48v58c16 5 30 14 42 24s19 21 26 35s11 37 14 59h62v-112h96v-64h-96v-101c0 -24 1 -40 4 -47c2 -7 7 -12 14 -16
-c9 -6 19 -8 31 -8z" />
- <glyph glyph-name="ion-ios-notifications" unicode="&#xf1d3;" horiz-adv-x="320"
-d="M160 -8c-31 0 -48 22 -48 53h96c0 -31 -17 -53 -48 -53zM316 96c10 -13 0 -32 -16 -32h-140h-140c-16 0 -26 19 -16 32c15 20 46 32 46 123c0 93 41 131 79 140c4 1 7 2 7 6v3c0 13 11 24 24 24s24 -11 24 -24v-3c0 -4 3 -5 7 -6c38 -9 79 -47 79 -140
-c0 -91 31 -103 46 -123z" />
- <glyph glyph-name="ion-ios-cash" unicode="&#xf144;" horiz-adv-x="448"
-d="M434 92c8 0 14 -6 14 -14s-6 -14 -14 -14h-420c-8 0 -14 6 -14 14s6 14 14 14h420zM434 44c8 0 14 -6 14 -14s-6 -14 -14 -14h-420c-8 0 -14 6 -14 14s6 14 14 14h420zM413 368c19 0 35 -16 35 -35v-178c0 -19 -16 -35 -35 -35h-378c-19 0 -35 16 -35 35v178
-c0 19 16 35 35 35h378zM82 152c8 0 14 6 14 14s-6 14 -14 14h-36c-8 0 -14 -6 -14 -14s6 -14 14 -14h36zM82 308c8 0 14 6 14 14s-6 14 -14 14h-36c-8 0 -14 -6 -14 -14s6 -14 14 -14h36zM224 164c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM402 152
-c8 0 14 6 14 14s-6 14 -14 14h-36c-8 0 -14 -6 -14 -14s6 -14 14 -14h36zM402 308c8 0 14 6 14 14s-6 14 -14 14h-36c-8 0 -14 -6 -14 -14s6 -14 14 -14h36zM171 242c0 29 24 53 53 53s53 -24 53 -53s-24 -53 -53 -53s-53 24 -53 53z" />
- <glyph glyph-name="ion-md-menu" unicode="&#xf32a;" horiz-adv-x="384"
-d="M0 64v43h384v-43h-384zM0 171v42h384v-42h-384zM0 320h384v-43h-384v43z" />
- <glyph glyph-name="ion-ios-eye-off" unicode="&#xf17a;" horiz-adv-x="448"
-d="M56 380l356 -356c6 -6 6 -14 0 -20c-2 -2 -5 -3 -7 -4c-5 -1 -9 0 -13 4l-356 356c-6 6 -6 14 0 20s14 6 20 0zM228 102c12 1 24 4 35 9l43 -44c-25 -12 -52 -19 -82 -19c-98 0 -155 61 -220 133c-6 6 -6 16 0 22c30 32 57 60 85 81l54 -54c-5 -10 -8 -22 -9 -34
-c-2 -53 41 -96 94 -94zM444 182c-24 -26 -52 -57 -85 -82l-54 54c5 10 8 22 9 34c2 53 -41 96 -94 94c-12 0 -25 -4 -35 -9l-43 44c26 12 53 19 82 19c96 0 168 -69 220 -133c5 -6 5 -15 0 -21zM160 187c-1 8 1 17 3 24l79 -80c-7 -2 -15 -4 -23 -3c-31 2 -57 28 -59 59z
-M288 192c0 -6 -1 -13 -3 -19l-18 19h3c6 0 12 2 18 4v-4zM224 239v-5l-19 19c6 2 13 3 19 3h3c-2 -5 -3 -11 -3 -17z" />
- <glyph glyph-name="ion-ios-radio-button-on" unicode="&#xf1f7;"
-d="M208 372c-48 0 -93 -19 -127 -53s-53 -79 -53 -127s19 -93 53 -127s79 -53 127 -53s93 19 127 53s53 79 53 127s-19 93 -53 127s-79 53 -127 53zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM316 300c29 -29 44 -67 44 -108
-s-15 -79 -44 -108s-67 -44 -108 -44s-79 15 -108 44s-44 67 -44 108s15 79 44 108s67 44 108 44s79 -15 108 -44z" />
- <glyph glyph-name="ion-logo-xbox" unicode="&#xf34c;" horiz-adv-x="448"
-d="M95 200c-49 -72 -50 -139 -50 -143c-28 38 -45 84 -45 135c0 67 30 128 77 169l3 -1c51 -18 93 -68 93 -68s-38 -33 -78 -92zM448 192c0 -51 -17 -97 -45 -135c0 4 -1 71 -50 143c-40 59 -78 92 -78 92s42 50 93 68l3 1c47 -41 77 -102 77 -169zM169 367
-c-37 17 -65 12 -72 10c36 25 80 39 127 39s91 -14 127 -39c-7 2 -35 6 -72 -10c-29 -13 -55 -35 -55 -35s-26 22 -55 35zM327 155c40 -49 54 -85 62 -108l2 -5c-41 -46 -101 -74 -167 -74s-126 28 -167 74l1 5c8 23 23 59 63 108c46 57 103 94 103 94s57 -37 103 -94z" />
- <glyph glyph-name="ion-logo-html5" unicode="&#xf23d;" horiz-adv-x="384"
-d="M0 416h384l-35 -403l-157 -45l-157 45zM308 284l4 50h-241l13 -150h167l-6 -64l-53 -15l-54 15l-3 39h-48l6 -78l99 -27l98 28l14 151h-176l-4 51h184z" />
- <glyph glyph-name="ion-ios-globe" unicode="&#xf18a;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208v0h-1c-55 0 -107 22 -146 61s-61 91 -61 147s22 108 61 147s91 61 146 61h1v0zM388 206c-3 36 -16 69 -38 97c-16 -8 -32 -15 -49 -21c6 -24 9 -49 10 -76h77zM194 206v62c-18 1 -36 3 -53 7c-5 -21 -8 -45 -9 -69h62
-zM194 178h-62c1 -24 4 -48 9 -69c17 4 35 6 53 7v62zM222 178v-62c18 -1 35 -3 52 -7c5 21 8 45 9 69h-61zM222 206h61c-1 24 -4 48 -9 69c-17 -4 -34 -6 -52 -7v-62zM331 324c-19 17 -40 31 -64 39c10 -15 19 -34 26 -55c13 4 26 10 38 16zM267 301c-11 34 -28 59 -45 68
-v-74c15 1 30 3 45 6zM194 369c-17 -9 -34 -34 -46 -68c15 -3 31 -5 46 -6v74zM148 363c-24 -8 -45 -22 -63 -39c12 -6 24 -12 37 -16c7 21 16 41 26 55zM66 303c-22 -28 -35 -62 -38 -97h77c1 27 4 52 10 76c-17 5 -33 13 -49 21zM28 178c3 -36 15 -69 37 -97
-c16 8 33 15 50 21c-6 24 -9 49 -10 76h-77zM84 60c18 -17 40 -31 64 -39c-10 15 -19 34 -26 55c-13 -4 -26 -10 -38 -16zM148 83c12 -34 29 -59 46 -68v74c-15 -1 -31 -3 -46 -6zM222 15c17 9 34 34 45 68c-15 3 -30 5 -45 6v-74zM267 21c24 8 46 22 65 39
-c-12 6 -25 12 -38 16c-7 -21 -17 -40 -27 -55zM350 81c22 28 35 61 38 97h-77c-1 -27 -4 -52 -10 -76c17 -6 33 -13 49 -21z" />
- <glyph glyph-name="ion-md-print" unicode="&#xf35c;"
-d="M352 288c35 0 64 -29 64 -64v-139h-80v-85h-256v85h-80v139c0 35 29 64 64 64h288zM304 32v128h-192v-128h192zM336 384v0v-80h-256v80h256z" />
- <glyph glyph-name="ion-md-information-circle" unicode="&#xf311;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM229 88v125h-42v-125h42zM229 254v42h-42v-42h42z" />
- <glyph glyph-name="ion-ios-open" unicode="&#xf1d7;"
-d="M180 148c5 -5 13 -5 18 0l134 134c3 -5 4 -12 4 -18v-224c0 -22 -18 -40 -40 -40h-256c-22 0 -40 18 -40 40v224c0 22 18 40 40 40h256c6 0 13 -1 18 -4l-134 -134c-5 -5 -5 -13 0 -18zM412 380c2 -2 4 -6 4 -10v-98c0 -7 -6 -13 -13 -13s-13 6 -13 13v67l-58 -57
-c-4 8 -10 14 -18 18l57 58h-67c-7 0 -13 6 -13 13s6 13 13 13h97c4 0 9 -2 11 -4z" />
- <glyph glyph-name="ion-md-mic" unicode="&#xf32c;" horiz-adv-x="320"
-d="M160 128c-38 0 -69 31 -69 69v150c0 38 31 69 69 69s69 -31 69 -69v-150c0 -38 -31 -69 -69 -69zM281 203h39c0 -78 -62 -142 -137 -153v-82h-46v82c-75 10 -137 75 -137 153h39c0 -69 58 -116 121 -116s121 47 121 116z" />
- <glyph glyph-name="ion-md-cloud-circle" unicode="&#xf2c2;"
-d="M208 400c114 0 208 -94 208 -208s-94 -208 -208 -208s-208 94 -208 208s94 208 208 208zM302 109c29 0 52 23 52 52s-23 52 -52 52h-11c0 46 -37 83 -83 83c-38 0 -71 -26 -80 -62h-3c-34 0 -63 -29 -63 -63s29 -62 63 -62h177z" />
- <glyph glyph-name="ion-md-heart" unicode="&#xf308;"
-d="M208 0l-30 27c-107 98 -178 162 -178 242c0 65 50 115 114 115c36 0 71 -17 94 -44c23 27 58 44 94 44c64 0 114 -50 114 -115c0 -80 -71 -144 -178 -242z" />
- <glyph glyph-name="ion-ios-musical-notes" unicode="&#xf46c;" horiz-adv-x="320"
-d="M310 400c6 1 10 -4 10 -8v-302c0 -21 -9 -38 -27 -48c-13 -8 -29 -12 -37 -13s-13 -1 -19 -1c-16 1 -42 14 -42 48c0 37 40 47 64 52c5 1 11 2 14 3c8 2 14 7 17 13c2 4 2 9 2 13v131c0 5 -5 9 -10 8l-152 -31c-4 -1 -6 -3 -6 -7v-213c0 -26 -13 -41 -24 -48
-c-15 -10 -44 -13 -51 -13v0c-3 0 -5 1 -7 1c-19 2 -42 16 -42 47c0 37 40 47 64 52c5 1 11 2 14 3c8 2 13 7 16 13c2 4 2 10 2 12v240c0 4 4 7 8 8s201 39 206 40z" />
- <glyph glyph-name="ion-ios-pin" unicode="&#xf1e5;" horiz-adv-x="288"
-d="M144 400c80 0 144 -60 144 -134c0 -104 -144 -282 -144 -282s-144 178 -144 282c0 74 64 134 144 134zM144 209c26 0 47 21 47 47s-21 47 -47 47s-47 -21 -47 -47s21 -47 47 -47z" />
- <glyph glyph-name="ion-ios-cloud" unicode="&#xf40c;" horiz-adv-x="512"
-d="M437 218c43 -8 75 -47 75 -92c0 -50 -41 -94 -91 -94h-330c-50 0 -91 44 -91 94c0 41 26 80 66 93c1 39 33 74 72 74c10 0 19 -3 27 -6c27 39 72 65 123 65c77 0 141 -59 149 -134z" />
- <glyph glyph-name="ion-md-easel" unicode="&#xf2e4;"
-d="M80 144v128h256v-128h-256zM400 352c9 0 16 -7 16 -16v-256c0 -9 -7 -16 -16 -16h-384c-9 0 -16 7 -16 16v256c0 9 7 16 16 16h384zM368 112v192h-320v-192h320zM32 -16l23 64h57l-23 -64h-57zM231 400l12 -32h-70l12 32h46zM327 -16l-23 64h57l23 -64h-57zM184 16v32h48
-v-32h-48z" />
- <glyph glyph-name="ion-md-pie" unicode="&#xf349;" horiz-adv-x="448"
-d="M1 192c0 5 -1 11 -1 16c0 115 93 208 208 208c5 0 11 -1 16 -1v-32v-191h-191h-32zM78 46c-26 32 -42 71 -45 114h223v223c43 -3 82 -19 114 -45c47 -38 78 -96 78 -162c0 -115 -93 -208 -208 -208c-66 0 -124 31 -162 78z" />
- <glyph glyph-name="ion-md-done-all" unicode="&#xf2e2;" horiz-adv-x="512"
-d="M388 308l-140 -139l-31 31l140 139zM481 339l31 -31l-264 -263l-122 123l30 31l92 -91zM0 168l32 31l122 -123l-31 -31z" />
- <glyph glyph-name="ion-md-volume-low" unicode="&#xf131;" horiz-adv-x="288"
-d="M0 256h85l107 112v-352l-107 112h-85v128zM288 192c0 -38 -21 -73 -53 -88v177c32 -16 53 -51 53 -89z" />
- <glyph glyph-name="ion-md-help" unicode="&#xf30b;" horiz-adv-x="256"
-d="M161 0h-66v65h66v-65zM160 98h-64c0 101 96 95 96 159c0 35 -29 63 -64 63s-64 -30 -64 -64h-64c0 71 57 128 128 128s128 -56 128 -127c0 -80 -96 -89 -96 -159z" />
- <glyph glyph-name="ion-ios-contract" unicode="&#xf162;" horiz-adv-x="384"
-d="M120 243l-116 117c-5 5 -5 15 0 20c3 3 6 4 10 4s7 -1 10 -4l117 -116v77c0 8 6 14 14 14v0c8 0 14 -6 14 -14v-112c0 -8 -6 -14 -14 -14h-112c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h77zM229 215c-8 0 -14 6 -14 14v112c0 8 6 14 14 14v0c8 0 14 -6 14 -14v-77l117 116
-c3 3 6 4 10 4s7 -1 10 -4c5 -5 5 -15 0 -20l-116 -117h77c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-112zM14 0c-4 0 -7 1 -10 4c-5 5 -5 15 0 20l116 117h-77c-8 0 -14 6 -14 14v0c0 8 6 14 14 14h112c8 0 14 -6 14 -14v-112c0 -8 -6 -14 -14 -14v0c-8 0 -14 6 -14 14v77
-l-117 -116c-3 -3 -6 -4 -10 -4zM229 29c-8 0 -14 6 -14 14v112c0 8 6 14 14 14h112c8 0 14 -6 14 -14v0c0 -8 -6 -14 -14 -14h-77l116 -117c5 -5 5 -15 0 -20c-3 -3 -6 -4 -10 -4s-7 1 -10 4l-117 116v-77c0 -8 -6 -14 -14 -14v0z" />
- <glyph glyph-name="ion-md-megaphone" unicode="&#xf329;" horiz-adv-x="448"
-d="M350 305c21 -21 34 -50 34 -81s-13 -60 -34 -81l-23 23c15 15 24 36 24 58s-9 43 -24 58zM396 349c32 -32 52 -76 52 -125s-20 -93 -52 -125l-22 23c26 26 42 62 42 102s-16 76 -42 102zM288 264c18 -2 32 -19 32 -40s-14 -38 -32 -40v-104h-32l-96 64h-30l30 -128h-48
-l-80 128l-32 16v112l32 16h128l96 80h32v-104z" />
- <glyph glyph-name="ion-md-speedometer" unicode="&#xf37f;"
-d="M80 -16v48h256v-48h-256zM208 160c-18 0 -32 14 -32 32c0 3 0 6 1 9l-49 67l4 4l67 -49c3 1 6 1 9 1c18 0 32 -14 32 -32s-14 -32 -32 -32zM208 400c115 0 208 -93 208 -208c0 -48 -16 -93 -44 -128h-59l-4 4l-22 22l23 23l22 -22c20 24 32 54 35 85h-31v32h31
-c-3 31 -15 61 -35 85l-22 -22l-23 23l22 22c-24 20 -54 32 -85 35v-31h-32v31c-31 -3 -61 -15 -85 -35l22 -22l-23 -23l-22 22c-20 -24 -32 -54 -35 -85h31v-32h-31c3 -31 15 -61 35 -85l22 22l23 -23l-22 -22l-4 -4h-59c-28 35 -44 80 -44 128c0 115 93 208 208 208z" />
- <glyph glyph-name="ion-md-pint" unicode="&#xf34b;" horiz-adv-x="384"
-d="M0 400h384l-43 -379c-3 -21 -20 -37 -42 -37h-214c-22 0 -39 16 -42 37zM327 275l9 83h-288l9 -83h270z" />
- <glyph glyph-name="ion-md-contacts" unicode="&#xf2d7;" horiz-adv-x="448"
-d="M207 104c47 -14 76 -62 87 -104h-294c11 42 40 90 87 104c18 -10 38 -16 60 -16s42 6 60 16zM147 328c58 0 106 -48 106 -106s-48 -106 -106 -106s-106 48 -106 106s48 106 106 106zM147 141c34 0 62 23 74 51h-148c12 -28 40 -51 74 -51zM291 64c-13 20 -34 43 -60 53
-c11 9 21 23 28 35c13 -5 27 -8 42 -8c22 0 42 6 60 16c47 -14 76 -54 87 -96h-157zM275 248c-8 37 -31 69 -63 87c19 29 52 49 89 49c58 0 106 -48 106 -106s-48 -106 -106 -106c-11 0 -22 2 -32 5c3 8 6 16 7 25c8 -3 16 -4 25 -4c34 0 62 22 74 50h-100z" />
- <glyph glyph-name="ion-ios-bonfire" unicode="&#xf12c;" horiz-adv-x="384"
-d="M207 97l15 -75c1 -3 1 -5 1 -8c0 -18 -14 -30 -32 -30s-32 12 -32 30c0 2 1 5 1 7l15 79v0c2 7 8 12 16 12s15 -7 16 -15zM242 93v0v0zM325 62c9 -8 9 -25 0 -35c-10 -10 -27 -9 -35 0c-1 1 -2 2 -3 4l-45 62c-3 5 -2 11 2 15c4 5 10 5 16 1l60 -43c2 -1 3 -3 5 -4z
-M308 113v0v0zM371 128c8 0 13 -6 13 -18c0 -9 -10 -17 -18 -15l-57 18h-1v0c-3 2 -5 5 -4 9s4 6 8 6h59zM75 113v0v0zM75 113v0l-58 -18c-8 -2 -17 6 -17 15s4 18 12 18h60s7 -2 8 -6s-2 -7 -5 -9v0zM124 109c5 4 11 3 16 -1c4 -4 5 -10 2 -15l-45 -61c-1 -2 -2 -4 -3 -5
-c-10 -10 -25 -10 -35 0s-10 25 0 35c2 2 3 3 5 4zM295 309c0 -30 -10 -55 -51 -81c-37 -24 -93 -43 -109 -100c0 0 -58 23 -48 91s124 100 112 181c24 0 96 -33 96 -91zM295 188c-16 -47 -44 -60 -80 -60c-15 0 -36 12 -47 28c12 14 28 24 47 34c9 5 20 10 29 16
-c21 14 39 28 48 46c5 -14 8 -49 3 -64zM98 276c-6 4 -12 16 -11 29c2 21 34 36 32 65c14 2 34 -6 45 -26c-5 -10 -15 -20 -28 -32s-26 -21 -38 -36z" />
- <glyph glyph-name="ion-logo-googleplus" unicode="&#xf23b;" horiz-adv-x="512"
-d="M318 217c0 0 2 -11 2 -29c0 -43 -14 -84 -42 -113c-28 -30 -68 -46 -110 -46c-46 0 -91 17 -123 50c-30 31 -45 72 -45 113s16 85 46 115c31 31 74 48 118 48v0c57 0 94 -29 108 -41l-48 -48c-8 7 -28 21 -58 21c-27 0 -51 -7 -69 -25s-28 -43 -28 -70s10 -52 29 -70
-c18 -18 43 -26 69 -26c36 0 75 19 84 64h-91v64h157zM512 224v-41h-57v-57h-41v57h-57v41h57v57h41v-57h57z" />
- <glyph glyph-name="ion-md-stats" unicode="&#xf385;" horiz-adv-x="352"
-d="M96 0v384h64v-384h-64zM0 0v112h64v-112h-64zM192 0v176h64v-176h-64zM288 0v272h64v-272h-64z" />
- <glyph glyph-name="ion-ios-rewind" unicode="&#xf4a1;" horiz-adv-x="448"
-d="M4 199l208 120c5 3 12 -1 12 -7v-115l212 122c5 3 12 -1 12 -7v-240c0 -6 -7 -10 -12 -7l-212 122v-115c0 -6 -7 -10 -12 -7l-208 120c-5 3 -5 11 0 14z" />
- <glyph glyph-name="ion-logo-polymer" unicode="&#xf15e;" horiz-adv-x="448"
-d="M360 352l88 -160l-88 -160h-78l88 160l-51 93l-153 -253h-78l-88 160l88 160h78l-88 -160l51 -93l153 253h78z" />
- <glyph glyph-name="ion-md-timer" unicode="&#xf395;"
-d="M185 76c0 13 10 24 23 24s23 -11 23 -24s-10 -23 -23 -23s-23 10 -23 23zM185 400h23c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208c0 68 32 128 83 166v1l158 -157l-33 -33l-125 125c-23 -28 -37 -63 -37 -102c0 -89 72 -162 162 -162s162 73 162 162
-c0 82 -61 149 -139 160v-44h-46v92zM347 192c0 -13 -10 -23 -23 -23s-24 10 -24 23s11 23 24 23s23 -10 23 -23zM69 192c0 13 10 23 23 23s24 -10 24 -23s-11 -23 -24 -23s-23 10 -23 23z" />
- <glyph glyph-name="ion-md-checkmark" unicode="&#xf2bc;" horiz-adv-x="384"
-d="M122 108l230 230l32 -31l-262 -261l-122 122l32 31z" />
- <glyph glyph-name="ion-ios-water" unicode="&#xf26b;" horiz-adv-x="320"
-d="M256 302c37 -52 64 -111 64 -175c0 -79 -72 -143 -160 -143c-56 0 -106 26 -134 65c-6 8 -11 17 -15 26c-7 16 -11 34 -11 52v4c1 62 27 119 64 171c34 48 68 79 91 96c3 2 7 2 10 0c23 -18 57 -47 91 -96zM170 37c55 0 100 42 100 94v1c0 10 -13 12 -17 3
-c-17 -42 -41 -67 -86 -81c-9 -3 -7 -17 3 -17v0z" />
- <glyph glyph-name="ion-ios-cloudy" unicode="&#xf410;" horiz-adv-x="448"
-d="M204 352v0c70 0 113 -49 125 -103h6h7c58 0 106 -50 106 -109s-48 -108 -106 -108h-257c-47 0 -85 41 -85 88c0 44 34 84 77 88c0 4 -1 9 -1 13c0 71 58 131 128 131z" />
- <glyph glyph-name="ion-md-podium" unicode="&#xf358;" horiz-adv-x="448"
-d="M0 32v192h128v-192h-128zM160 32v288h128v-288h-128zM320 32v128h128v-128h-128z" />
- <glyph glyph-name="ion-ios-basketball" unicode="&#xf3e0;"
-d="M171 142c-22 23 -48 42 -77 56s-60 22 -92 24c5 33 18 64 36 90c64 -28 122 -68 172 -118c3 -3 5 -6 8 -9l-6 -6c-13 -13 -27 -25 -41 -37zM278 262c-21 21 -37 46 -49 73c-9 21 -15 43 -17 65c45 -1 87 -16 121 -42c-15 -34 -32 -67 -53 -97c-1 0 -2 1 -2 1zM351 213
-c-18 8 -36 19 -52 31c21 30 40 62 55 96c37 -37 61 -88 62 -144c-22 2 -44 8 -65 17zM146 130c1 -1 2 -3 4 -4c-33 -24 -68 -46 -105 -63c-28 35 -45 80 -45 129v4c25 -2 50 -7 73 -17c27 -12 52 -28 73 -49zM236 204c-26 27 -56 52 -86 74c-30 21 -62 40 -95 55
-c33 36 79 61 131 66c6 -61 35 -117 79 -159c-9 -12 -19 -25 -29 -36zM253 185c11 12 21 24 31 37c38 -29 83 -47 131 -52c-5 -52 -30 -97 -66 -131c-24 53 -57 102 -96 146zM187 122c17 14 34 28 49 44c38 -43 69 -91 92 -144c-26 -18 -57 -31 -90 -36c-4 49 -21 96 -51 136
-zM167 106c11 -15 21 -31 28 -49c10 -23 15 -48 17 -73h-4c-56 0 -107 23 -145 59c37 17 72 39 104 63z" />
- <glyph glyph-name="ion-ios-at" unicode="&#xf3da;" horiz-adv-x="384"
-d="M384 214c0 -74 -35 -121 -90 -121c-28 0 -49 15 -53 37h-4c-10 -23 -30 -36 -57 -36c-49 0 -82 40 -82 98c0 56 33 94 81 94c25 0 46 -12 55 -32h4v28h39v-130c0 -16 9 -26 25 -26c28 0 46 34 46 86c0 83 -63 139 -155 139c-91 0 -156 -66 -156 -160
-c0 -96 64 -158 164 -158c20 0 40 2 55 5c10 2 18 -6 18 -16v0c0 -7 -5 -13 -12 -15c-18 -4 -39 -7 -62 -7c-122 0 -200 75 -200 192c0 114 79 192 195 192c111 0 189 -69 189 -170zM141 191c0 -37 18 -60 46 -60c30 0 49 24 49 60s-20 59 -49 59s-46 -22 -46 -59z" />
- <glyph glyph-name="ion-md-pulse" unicode="&#xf35d;" horiz-adv-x="448"
-d="M396 179c29 0 52 -22 52 -51c0 -14 -5 -27 -15 -37s-23 -16 -37 -16c-20 0 -40 12 -48 31h-56c-9 0 -16 6 -19 14l-16 40l-40 -162c-2 -8 -10 -14 -19 -14h-1c-10 1 -17 7 -19 16l-54 282l-31 -161c-2 -9 -10 -15 -19 -15h-74v40h58l51 238c2 10 9 16 19 16s18 -8 20 -18
-l55 -292l34 136c2 8 10 14 19 14v0c9 0 16 -5 19 -13l31 -81h42c8 20 26 33 48 33z" />
- <glyph glyph-name="ion-ios-medal" unicode="&#xf1bf;"
-d="M2 324h126c1 0 2 -1 2 -2v-118c0 -1 -2 -2 -3 -2l-104 29c-14 4 -23 17 -23 31v60c0 1 1 2 2 2zM208 166zM156 322c0 1 1 2 2 2h106c1 0 2 -1 2 -2v-124c0 -1 0 -2 -1 -2l-56 -16h-1l-50 14c-1 0 -2 1 -2 2v126zM286 322c0 1 1 2 2 2h126c1 0 2 -1 2 -2v-60
-c0 -14 -9 -27 -23 -31l-104 -30c-1 0 -3 1 -3 2v119zM0 384c0 18 14 32 32 32h352c18 0 32 -14 32 -32v-38c0 -1 -1 -2 -2 -2h-412c-1 0 -2 1 -2 2v38zM208 140zM152 96c0 31 25 56 56 56s56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56zM303 181c20 -23 33 -52 33 -85
-c0 -71 -57 -128 -128 -128s-128 57 -128 128c0 33 13 63 33 86l51 -14c-24 -15 -40 -42 -40 -72c0 -46 38 -84 84 -84s84 38 84 84c0 30 -16 57 -40 72zM208 152c31 0 56 -25 56 -56s-25 -56 -56 -56s-56 25 -56 56s25 56 56 56z" />
- <glyph glyph-name="ion-md-shuffle" unicode="&#xf37b;" horiz-adv-x="384"
-d="M158 260l-34 -34l-124 124l34 34zM252 384h132v-132l-49 49l-301 -301l-34 34l301 301zM260 158l75 -75l49 49v-132h-132l49 49l-75 75z" />
- <glyph glyph-name="ion-md-flower" unicode="&#xf2f3;" horiz-adv-x="384"
-d="M341 192c25 -12 43 -37 43 -67c0 -41 -34 -74 -75 -74c-16 0 -31 5 -43 13l1 -6c0 -41 -34 -74 -75 -74s-75 33 -75 74l1 6c-12 -8 -27 -13 -43 -13c-41 0 -75 33 -75 74c0 30 18 55 43 67c-25 12 -43 37 -43 67c0 41 34 74 75 74c16 0 31 -5 43 -13l-1 6
-c0 41 34 74 75 74s75 -33 75 -74l-1 -6c12 8 27 13 43 13c41 0 75 -33 75 -74c0 -30 -18 -55 -43 -67zM192 118c41 0 75 33 75 74s-34 74 -75 74s-75 -33 -75 -74s34 -74 75 -74z" />
- <glyph glyph-name="ion-md-walk" unicode="&#xf3a4;" horiz-adv-x="272"
-d="M168 336c-22 0 -40 18 -40 40s18 40 40 40s40 -18 40 -40s-18 -40 -40 -40zM168 216l-20 38l-20 -62l57 -96v-128h-38v96l-50 68l-57 -164h-40l81 320l-41 -16v-80h-40v112l111 38c4 1 10 1 13 1c13 0 23 -6 31 -18l45 -69h72v-40h-104z" />
- <glyph glyph-name="ion-md-add-circle" unicode="&#xf272;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86z" />
- <glyph glyph-name="ion-ios-thumbs-up" unicode="&#xf256;" horiz-adv-x="384"
-d="M367 59c-2 -2 -4 -5 -3 -8c0 -1 1 -2 1 -3c3 -6 5 -13 1 -23c-11 -26 -45 -33 -76 -37c-17 -2 -36 -4 -56 -4c-38 0 -81 4 -113 8c-22 3 -34 7 -46 12c-16 6 -31 12 -67 12c-5 0 -8 3 -8 8v160c0 4 4 8 8 8c6 0 15 3 22 10c3 3 9 11 14 19c8 12 17 25 26 33c2 2 6 5 10 9
-c17 15 49 43 57 60c5 11 9 30 12 42c4 15 3 23 6 27c5 6 16 8 28 8s20 -9 26 -19c12 -21 13 -57 3 -90c-5 -17 -11 -28 -15 -36c-3 -6 -5 -11 -5 -13c1 -5 4 -6 17 -5c3 0 11 1 21 3c25 4 62 10 80 11c26 2 37 0 47 -12c8 -9 13 -24 8 -38c-2 -6 0 -14 4 -18
-c5 -5 10 -11 10 -23c0 -13 -3 -21 -6 -26c-2 -3 -3 -6 -2 -10v-1c0 -1 1 -2 2 -3c5 -6 11 -15 11 -29c0 -15 -9 -26 -17 -32z" />
- <glyph glyph-name="ion-ios-rocket" unicode="&#xf14b;"
-d="M414 394c13 -57 -34 -180 -102 -248c-13 -13 -27 -24 -40 -33c2 -21 1 -41 -7 -59c-22 -50 -80 -66 -105 -70c-6 -1 -12 4 -11 10l9 81c-8 0 -14 1 -18 1s-8 3 -11 6l-32 31c-3 3 -5 7 -5 11s-1 10 -1 18l-81 -8c-6 -1 -11 4 -10 10c4 25 19 83 69 105c18 8 39 9 60 7
-c9 13 20 27 33 40c68 68 195 115 249 102c2 0 3 -2 3 -4zM251 234c17 -17 43 -17 60 0s17 44 0 61s-43 17 -60 0s-17 -44 0 -61zM127 68c2 2 5 0 5 -3c-1 -10 -5 -19 -13 -27c-18 -18 -85 -20 -85 -20s2 67 20 85c8 8 17 12 27 13c3 0 5 -4 3 -6v0c-4 -4 -7 -12 -8 -20
-c-3 -18 13 -33 31 -30c8 1 16 4 20 8v0z" />
- <glyph glyph-name="ion-md-alarm" unicode="&#xf274;" horiz-adv-x="428"
-d="M428 323l-28 -33l-98 82l28 33zM125 373l-97 -83l-28 33l97 83zM225 275v0v-111l85 -50l-16 -27l-101 61v127h32zM214 360c106 0 193 -86 193 -191s-87 -191 -193 -191c-107 0 -193 86 -193 191s86 191 193 191zM214 20c82 0 150 66 150 149c0 82 -68 149 -150 149
-s-150 -67 -150 -149s68 -149 150 -149z" />
- <glyph glyph-name="ion-ios-sad" unicode="&#xf207;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM134 248c-12 -1 -21 -10 -22 -22c-1 -15 11 -27 26 -26c12 1 21 10 22 22c1 15 -11 27 -26 26zM133 96c0 0 39 4 77 4s73 -4 73 -4c12 0 19 11 14 22c-15 34 -49 59 -89 59
-s-74 -25 -89 -59c-5 -11 2 -22 14 -22zM282 200c12 1 21 10 22 22c1 15 -11 27 -26 26c-12 -1 -21 -10 -22 -22c-1 -15 11 -27 26 -26z" />
- <glyph glyph-name="ion-md-nuclear" unicode="&#xf339;" horiz-adv-x="448"
-d="M304 176h144c0 -83 -46 -153 -114 -192l-71 122c-12 -6 -25 -10 -39 -10s-28 3 -40 10l-70 -122c-68 39 -114 109 -114 192h144c0 29 15 54 38 68l-71 125c33 19 72 31 113 31s80 -11 113 -30l-73 -124c24 -14 40 -40 40 -70z" />
- <glyph glyph-name="ion-md-attach" unicode="&#xf28e;" horiz-adv-x="235"
-d="M203 320h32v-235c0 -65 -53 -117 -118 -117s-117 52 -117 117v246c0 47 38 85 85 85s86 -38 86 -85v-246c0 -30 -24 -53 -54 -53s-53 23 -53 53v203h32v-203c0 -12 9 -21 21 -21s22 9 22 21v246c0 30 -24 53 -54 53s-53 -23 -53 -53v-246c0 -47 38 -85 85 -85
-s86 38 86 85v235z" />
- <glyph glyph-name="ion-ios-more" unicode="&#xf1c8;" horiz-adv-x="384"
-d="M192 230v0c21 0 38 -17 38 -38s-17 -38 -38 -38s-38 17 -38 38s17 38 38 38zM38 230v0c21 0 38 -17 38 -38s-17 -38 -38 -38s-38 17 -38 38s17 38 38 38zM346 230v0c21 0 38 -17 38 -38s-17 -38 -38 -38s-38 17 -38 38s17 38 38 38z" />
- <glyph glyph-name="ion-md-tablet-portrait" unicode="&#xf38d;" horiz-adv-x="320"
-d="M296 416c13 0 24 -11 24 -24v-400c0 -13 -11 -24 -24 -24h-272c-13 0 -24 11 -24 24v400c0 13 11 24 24 24h272zM288 32v336h-256v-336h256zM160 -14c8 0 14 6 14 14s-6 14 -14 14s-14 -6 -14 -14s6 -14 14 -14z" />
- <glyph glyph-name="ion-md-journal" unicode="&#xf18d;" horiz-adv-x="341"
-d="M32 405h203v-426h-203c-18 0 -32 14 -32 32v362c0 18 14 32 32 32zM299 405c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-16v426h16z" />
- <glyph glyph-name="ion-md-arrow-dropright" unicode="&#xf284;" horiz-adv-x="128"
-d="M0 320l128 -128l-128 -128v256z" />
- <glyph glyph-name="ion-md-flame" unicode="&#xf2f0;" horiz-adv-x="320"
-d="M297 226c14 -24 23 -47 23 -85s-4 -74 -32 -106s-63 -51 -119 -51c-17 0 -34 1 -48 7s-25 13 -33 25c-11 16 -21 28 -25 52c-6 -25 -1 -48 6 -60c-43 26 -69 71 -69 125v4c5 78 65 93 90 135c8 14 14 30 10 48c11 -9 18 -26 18 -40c0 -16 -2 -28 -2 -28c4 8 12 18 14 31
-c6 35 -10 70 -50 117l17 -2c94 -16 168 -56 188 -154c7 -36 -3 -68 -10 -83c14 11 21 43 22 55v10z" />
- <glyph glyph-name="ion-ios-volume-low" unicode="&#xf11e;" horiz-adv-x="256"
-d="M151 302c6 -3 9 -8 9 -14v-192c0 -6 -3 -11 -9 -14c-2 -1 -5 -2 -7 -2c-4 0 -7 2 -10 4l-65 52h-53c-9 0 -16 7 -16 16v80c0 9 7 16 16 16h53l65 52c3 2 6 4 10 4c2 0 5 -1 7 -2zM226 265c19 -20 30 -45 30 -73v0v0c0 -28 -11 -54 -30 -74c-2 -2 -5 -3 -8 -3s-6 1 -8 3
-c-5 5 -5 12 0 17c15 15 22 36 22 57v0v0c0 22 -7 41 -22 56c-5 5 -5 13 0 18s11 4 16 -1z" />
- <glyph glyph-name="ion-md-switch" unicode="&#xf38a;" horiz-adv-x="288"
-d="M56 232c-31 0 -56 25 -56 56s25 56 56 56h95c14 15 35 24 57 24c44 0 80 -36 80 -80s-36 -80 -80 -80c-22 0 -43 9 -57 24h-95zM39 305c-5 -4 -7 -11 -7 -17s2 -12 7 -17c4 -5 11 -7 17 -7h76c-2 8 -4 16 -4 24s2 16 4 24h-76c-6 0 -12 -2 -17 -7zM232 152
-c31 0 56 -25 56 -56s-25 -56 -56 -56h-95c-14 -15 -35 -24 -57 -24c-44 0 -80 36 -80 80s36 80 80 80c22 0 43 -9 57 -24h95zM249 79c5 4 7 11 7 17s-2 12 -7 17c-4 5 -11 7 -17 7h-76c2 -8 4 -16 4 -24s-2 -16 -4 -24h76c6 0 12 2 17 7z" />
- <glyph glyph-name="ion-md-information-circle-outline" unicode="&#xf16f;"
-d="M208 358c-44 0 -86 -18 -117 -49s-49 -73 -49 -117s18 -86 49 -117s73 -49 117 -49s86 18 117 49s49 73 49 117s-18 86 -49 117s-73 49 -117 49zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM229 88h-42v125h42v-125z
-M229 254h-42v42h42v-42z" />
- <glyph glyph-name="ion-md-swap" unicode="&#xf389;" horiz-adv-x="448"
-d="M99 217v-75h175v-49h-175v-75l-99 99zM448 267l-99 -100v75h-175v49h175v75z" />
- <glyph glyph-name="ion-md-film" unicode="&#xf2ed;" horiz-adv-x="320"
-d="M280 384h40v-384h-40v43h-40v-43h-160v43h-40v-43h-40v384h40v-43h40v43h160v-43h40v43zM80 85v43h-40v-43h40zM80 171v42h-40v-42h40zM80 256v43h-40v-43h40zM280 85v43h-40v-43h40zM280 171v42h-40v-42h40zM280 256v43h-40v-43h40z" />
- <glyph glyph-name="ion-md-moon" unicode="&#xf32e;" horiz-adv-x="410"
-d="M144 323c0 -106 86 -192 192 -192c26 0 51 5 74 15c-22 -91 -104 -159 -202 -159c-115 0 -208 93 -208 208c0 98 68 180 159 202c-10 -23 -15 -48 -15 -74z" />
- <glyph glyph-name="ion-md-partly-sunny" unicode="&#xf340;" horiz-adv-x="448"
-d="M235 312l-19 19l25 25l19 -19zM144 322c30 0 56 -15 70 -39c-7 -2 -13 -4 -19 -7c-20 -9 -37 -22 -51 -39l-13 -16c-21 -5 -39 -15 -54 -28c-9 13 -15 29 -15 47c0 45 37 82 82 82zM130 343v41h28v-41h-28zM0 226v28h41v-28h-41zM50 171l18 -18l-25 -25l-19 19l25 25z
-M28 337l19 19l25 -25l-19 -19zM374 159c42 -3 74 -37 74 -79c0 -44 -36 -80 -80 -80h-208c-53 0 -96 43 -96 96c0 47 32 85 78 94c5 1 13 2 18 2c43 0 78 -27 91 -64h28c-6 21 -16 39 -32 55c-21 21 -48 32 -77 34c21 27 52 39 86 39c58 0 107 -42 118 -97z" />
- <glyph glyph-name="ion-md-subway" unicode="&#xf387;" horiz-adv-x="352"
-d="M176 400c94 0 176 -10 176 -85v-214c0 -42 -33 -74 -75 -74l27 -27v-16h-256v16l27 27c-42 0 -75 32 -75 74v214c0 75 82 85 176 85zM80 64c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 208v96h-112v-96h112zM272 64c18 0 32 14 32 32
-s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM304 208v96h-112v-96h112z" />
- <glyph glyph-name="ion-ios-cloudy-night" unicode="&#xf40e;" horiz-adv-x="448"
-d="M246 153c42 0 76 -35 76 -77s-34 -76 -76 -76h-186c-34 0 -60 29 -60 62c0 32 24 59 55 62v9c0 50 41 91 92 91c44 0 80 -30 89 -71h8h2zM420 143c7 0 16 2 23 3c4 0 6 -3 4 -6c-4 -6 -10 -13 -15 -19c-22 -25 -53 -43 -87 -51c0 2 1 4 1 6c0 26 -10 52 -29 71
-c-17 17 -39 28 -63 30c-7 18 -19 34 -34 46c-21 17 -47 25 -73 25h-5c9 61 54 112 114 130c8 2 15 5 23 6c3 0 6 -3 4 -6l-11 -19c-10 -20 -16 -42 -16 -65c0 -40 16 -79 46 -107c30 -29 68 -45 110 -45c3 0 6 1 8 1z" />
- <glyph glyph-name="ion-ios-ribbon" unicode="&#xf205;" horiz-adv-x="384"
-d="M191 155c-70 1 -129 59 -130 129c-1 73 59 133 132 132c70 -1 129 -60 130 -130c1 -73 -59 -132 -132 -131zM187 359c-37 -2 -66 -32 -68 -69c-3 -44 34 -81 78 -78c37 2 66 31 68 68c3 44 -34 82 -78 79zM192 140c9 0 18 0 27 2c3 1 5 -3 4 -6l-31 -69l-43 -94
-c-3 -6 -12 -7 -15 -1l-39 65c-2 2 -4 4 -7 4h-80c-6 0 -10 6 -7 12l76 133c1 2 4 3 6 1c27 -29 66 -47 109 -47zM300 187c2 2 5 1 7 -1l76 -133c3 -6 -1 -12 -7 -12h-80c-3 0 -5 -2 -7 -4l-39 -65c-3 -6 -12 -5 -15 1l-34 74v4l45 97c0 1 1 3 2 3c20 8 37 20 52 36z" />
- <glyph glyph-name="ion-logo-css3" unicode="&#xf231;" horiz-adv-x="384"
-d="M192 109v0zM0 416h384l-35 -403l-157 -45l-157 45zM291 81l22 252h-241l4 -49h184l-4 -51h-121l4 -50h112l-5 -64l-54 -15v0v0l-53 15l-4 40h-48l7 -78l98 -28z" />
- <glyph glyph-name="ion-md-remove" unicode="&#xf368;" horiz-adv-x="320"
-d="M0 171v42h320v-42h-320z" />
- <glyph glyph-name="ion-ios-share" unicode="&#xf211;" horiz-adv-x="320"
-d="M280 272c22 0 40 -18 40 -40v-208c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v208c0 22 18 40 40 40h107v-147c0 -7 6 -13 14 -13c7 0 12 6 12 13v147h107zM173 356v-84h-26v84l-48 -47c-5 -5 -13 -5 -18 0s-5 13 0 18l70 69v0c1 1 2 2 4 3s3 1 5 1c3 0 7 -2 9 -4
-l70 -69c5 -5 5 -13 0 -18s-13 -5 -18 0z" />
- <glyph glyph-name="ion-ios-arrow-dropleft" unicode="&#xf112;"
-d="M253 300c8 -8 8 -19 0 -27l-81 -81l79 -81c8 -8 8 -19 0 -27c-4 -4 -8 -6 -13 -6s-10 2 -14 6l-94 94c-7 8 -6 20 1 27l95 95c8 8 19 8 27 0zM208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM332 68c33 33 52 77 52 124
-s-19 91 -52 124s-77 52 -124 52s-91 -19 -124 -52s-52 -77 -52 -124s19 -91 52 -124s77 -52 124 -52s91 19 124 52z" />
- <glyph glyph-name="ion-md-checkbox" unicode="&#xf2b9;" horiz-adv-x="384"
-d="M341 384c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM149 85l192 192l-30 30l-162 -162l-76 77l-30 -30z" />
- <glyph glyph-name="ion-ios-bookmarks" unicode="&#xf3ea;" horiz-adv-x="432"
-d="M376 416c30 0 56 -25 56 -55v-290c0 -30 -25 -55 -55 -55h-108c-4 0 -8 0 -12 -1c-16 -3 -27 -17 -27 -33c0 -8 -8 -15 -16 -14c-7 1 -12 7 -12 14c0 16 -12 30 -27 33c-4 1 -8 1 -12 1h-108c-30 0 -55 25 -55 55v290c0 30 25 55 55 55h106v0c22 0 41 -18 41 -41v-314
-c0 -8 7 -14 15 -14s13 6 13 14v314c0 23 19 41 41 41v0h41v-128l23 15l9 6l9 -6l23 -15v128z" />
- <glyph glyph-name="ion-ios-key" unicode="&#xf1a7;"
-d="M297 230c66 0 119 -54 119 -122s-53 -124 -119 -124s-119 56 -119 124c0 18 2 32 9 48c-3 5 -9 11 -10 17c-1 5 7 25 6 30s-8 10 -11 11c-9 2 -25 -11 -31 -10s-21 14 -22 24s15 24 5 34s-21 -3 -30 -3c-7 0 -11 4 -16 9c-6 6 -9 11 -9 19s4 18 3 24s-2 9 -10 12
-s-27 -7 -36 3c-6 6 -10 9 -25 24c-5 5 21 33 28 40c5 4 13 10 21 10c5 0 10 -2 15 -7c10 -11 143 -124 194 -167c12 4 25 4 38 4zM320 48c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32z" />
- <glyph glyph-name="ion-md-basketball" unicode="&#xf293;"
-d="M144 176h48v-192c-42 3 -81 19 -113 44c38 41 61 93 65 148zM224 -16v192h49c4 -55 26 -107 64 -148c-32 -25 -71 -41 -113 -44zM192 400v-192h-48c-3 55 -26 107 -64 148c31 25 70 41 112 44zM273 208h-49v192c42 -3 80 -19 112 -44c-38 -41 -60 -93 -63 -148zM361 334
-c31 -34 51 -78 55 -126h-110c2 22 6 43 14 63c9 23 24 45 41 63zM320 115c-8 20 -12 40 -14 61h110c-4 -48 -24 -91 -55 -125c-18 19 -31 40 -41 64zM96 271c8 -20 12 -41 14 -63h-110c4 48 25 92 56 126c17 -19 30 -40 40 -63zM55 51c-31 34 -51 77 -55 125h110
-c-2 -21 -6 -41 -14 -61c-10 -24 -23 -45 -41 -64z" />
- <glyph glyph-name="ion-md-pause" unicode="&#xf341;" horiz-adv-x="320"
-d="M0 0v384h107v-384h-107zM213 384h107v-384h-107v384z" />
- <glyph glyph-name="ion-md-return-right" unicode="&#xf36e;" horiz-adv-x="448"
-d="M0 312h47v-96h311l-85 86l33 34l142 -144l-142 -144l-33 34l85 86h-358v144z" />
- <glyph glyph-name="ion-ios-star" unicode="&#xf4b3;" horiz-adv-x="448"
-d="M431 256c9 0 17 -7 17 -16c0 -4 -2 -8 -5 -11l-3 -2l-120 -86l46 -135c2 -7 1 -14 -5 -18c-3 -2 -6 -4 -9 -4s-7 2 -10 4l-118 84l-118 -84c-3 -2 -7 -4 -10 -4s-6 2 -9 4c-6 4 -7 12 -5 18l46 135l-121 85c-5 4 -7 7 -7 11v3c0 9 7 16 16 16v0h148l45 133
-c2 6 8 11 15 11s13 -5 15 -11l45 -133h147z" />
- <glyph glyph-name="ion-ios-female" unicode="&#xf17b;"
-d="M14 -16c-4 0 -7 1 -10 4c-5 5 -5 14 0 19l45 45l-37 37c-5 5 -5 14 0 19c2 3 5 4 9 4s7 -1 10 -4l37 -37l50 50c-26 31 -40 70 -40 110c0 23 4 45 13 66c8 20 20 37 36 53s34 29 54 37c21 9 43 13 66 13s45 -4 66 -13c20 -8 37 -21 53 -37s29 -33 37 -53
-c9 -21 13 -43 13 -66s-4 -45 -13 -66c-8 -20 -21 -38 -37 -54s-33 -28 -53 -36c-21 -9 -43 -13 -66 -13c-40 0 -79 14 -110 40l-50 -50l37 -37c5 -5 5 -14 0 -19c-2 -3 -5 -4 -9 -4s-7 1 -10 4l-37 37l-45 -45c-2 -3 -5 -4 -9 -4zM146 331c-27 -27 -41 -62 -41 -100
-s15 -73 42 -100s62 -42 100 -42s73 15 100 42s42 62 42 100s-15 73 -42 100s-62 42 -100 42s-74 -15 -101 -42z" />
- <glyph glyph-name="ion-logo-playstation" unicode="&#xf245;" horiz-adv-x="512"
-d="M400 245c0 -11 0 -22 -2 -33c-2 -10 -5 -20 -10 -28c-4 -7 -10 -13 -18 -17c-7 -4 -16 -6 -24 -6c-13 0 -31 4 -42 9v131v2c0 9 -7 17 -15 17h-1c-9 0 -16 -8 -16 -17v-3v-300l-80 26v358s28 -4 75 -18s67 -21 84 -31c8 -5 15 -11 21 -17c7 -7 13 -14 17 -23
-c8 -16 10 -33 11 -50zM87 90c-4 -2 -8 -3 -11 -6c-1 -1 -3 -3 -2 -5s4 -4 6 -5c6 -2 13 -3 19 -3c7 0 15 0 22 2c5 1 9 3 14 5c30 10 41 12 41 12v-42c-14 -2 -36 -4 -50 -4c-30 -1 -60 4 -88 13c-9 3 -19 6 -27 12c-4 3 -8 8 -10 13c-2 4 -1 9 1 13s5 8 9 11
-c9 6 18 10 28 14c8 4 17 7 26 10c35 12 111 37 111 37v-47s-62 -20 -89 -30zM512 102c0 -5 -2 -9 -5 -13c-6 -7 -14 -11 -22 -15s-17 -8 -26 -11c-54 -19 -171 -59 -171 -59v48s92 30 133 44c6 2 11 4 16 8c2 2 4 3 3 6c-1 2 -4 4 -6 5c-6 2 -13 3 -19 3
-c-10 0 -20 -2 -30 -5c-29 -10 -97 -32 -97 -32v49s45 14 67 16c8 1 23 1 31 1c26 0 54 -3 79 -11c5 -2 8 -3 14 -5c9 -3 18 -8 25 -14c4 -4 8 -9 8 -15z" />
- <glyph glyph-name="ion-ios-git-merge" unicode="&#xf186;" horiz-adv-x="384"
-d="M314 230c39 0 70 -31 70 -70s-31 -70 -70 -70c-33 0 -61 24 -68 56c-12 0 -25 3 -50 13c-31 12 -72 32 -113 89v-141c15 -3 29 -11 39 -22c12 -13 18 -30 18 -47c0 -39 -31 -70 -70 -70s-70 31 -70 70c0 17 6 33 17 46c10 11 24 19 38 22v172c-15 3 -28 11 -38 22
-c-11 13 -17 29 -17 46c0 39 31 70 70 70s70 -31 70 -70c0 -30 -18 -56 -45 -66c40 -63 81 -83 111 -95c21 -8 29 -11 39 -11c6 32 35 56 69 56zM112 38c0 23 -19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42s42 19 42 42zM70 304c23 0 42 19 42 42s-19 42 -42 42
-s-42 -19 -42 -42s19 -42 42 -42zM314 118c23 0 42 19 42 42s-19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42z" />
- <glyph glyph-name="ion-md-remove-circle-outline" unicode="&#xf176;"
-d="M208 358c-44 0 -86 -18 -117 -49s-49 -73 -49 -117s18 -86 49 -117s73 -49 117 -49s86 18 117 49s49 73 49 117s-18 86 -49 117s-73 49 -117 49zM208 400v0c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM315 171h-214v42h214v-42z" />
- <glyph glyph-name="ion-ios-clock" unicode="&#xf403;"
-d="M355 339c81 -81 81 -213 0 -294s-213 -81 -294 0s-81 213 0 294s213 81 294 0zM42 184c3 1 5 3 6 6c1 6 -3 11 -9 10c-3 -1 -6 -3 -7 -6c-1 -6 4 -11 10 -10zM68 102c2 2 3 5 2 8c-2 5 -9 8 -13 4c-2 -2 -3 -5 -2 -8c2 -5 9 -8 13 -4zM70 274c1 3 0 6 -2 8
-c-4 4 -11 1 -13 -4c-1 -3 0 -6 2 -8c4 -4 11 -1 13 4zM132 44c1 3 -1 6 -3 8c-4 4 -10 2 -12 -3c-1 -3 0 -7 2 -9c4 -4 11 -1 13 4zM129 332c2 2 4 5 3 8c-2 5 -9 8 -13 4c-2 -2 -3 -6 -2 -9c2 -5 8 -7 12 -3zM165 255l33 -61c1 -2 2 -5 2 -8v-122c0 -5 3 -8 8 -8s8 3 8 8
-v122c0 5 -2 10 -4 15l-34 63c-2 4 -7 4 -11 2s-4 -7 -2 -11zM210 16c3 1 5 3 6 6c1 6 -3 11 -9 10c-3 -1 -6 -3 -7 -6c-1 -6 4 -11 10 -10zM210 352c3 1 5 3 6 6c1 6 -3 11 -9 10c-3 -1 -6 -3 -7 -6c-1 -6 4 -11 10 -10zM297 40c2 2 4 6 3 9c-2 5 -9 7 -13 3
-c-2 -2 -3 -5 -2 -8c2 -5 8 -8 12 -4zM300 335c1 3 -1 7 -3 9c-4 4 -10 1 -12 -4c-1 -3 0 -6 2 -8c4 -4 11 -2 13 3zM361 106c1 3 0 6 -2 8c-4 4 -11 1 -13 -4c-1 -3 0 -6 2 -8c4 -4 11 -1 13 4zM359 270c2 2 3 5 2 8c-2 5 -9 8 -13 4c-2 -2 -3 -5 -2 -8c2 -5 9 -8 13 -4z
-M378 184c3 1 5 3 6 6c1 6 -3 11 -9 10c-3 -1 -6 -3 -7 -6c-1 -6 4 -11 10 -10z" />
- <glyph glyph-name="ion-md-sunny" unicode="&#xf388;" horiz-adv-x="448"
-d="M245 416v0v-64h-42v64h42zM374 372v0l30 -30l-38 -38l-30 30zM74 372v0l38 -38l-30 -30l-38 38zM224 320v0c70 0 128 -58 128 -128s-58 -128 -128 -128s-128 58 -128 128s58 128 128 128zM448 213v0v-42h-64v42h64zM64 213v0v-42h-64v42h64zM366 80v0l38 -38l-30 -30
-l-38 38zM82 80v0l30 -30l-38 -38l-30 30zM245 32v0v-64h-42v64h42z" />
- <glyph glyph-name="ion-ios-add-circle" unicode="&#xf101;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM298 176c9 0 16 7 16 16s-7 16 -16 16h-74v74c0 9 -7 16 -16 16s-16 -7 -16 -16v-74h-74c-9 0 -16 -7 -16 -16c0 -4 1 -8 4 -11s8 -5 12 -5h74v-74c0 -4 2 -9 5 -12s7 -4 11 -4
-c9 0 16 7 16 16v74h74z" />
- <glyph glyph-name="ion-ios-browsers" unicode="&#xf3f0;"
-d="M0 267c0 22 18 40 40 40h243c22 0 40 -18 40 -40v-243c0 -22 -18 -40 -40 -40h-243c-22 0 -40 18 -40 40v243zM93 360c0 22 18 40 40 40h243c22 0 40 -18 40 -40v-243c0 -22 -18 -40 -40 -40h-28c-2 0 -4 2 -4 4v199c0 26 -22 48 -48 48h-199c-2 0 -4 2 -4 4v28z" />
- <glyph glyph-name="ion-ios-git-pull-request" unicode="&#xf188;" horiz-adv-x="384"
-d="M329 106c14 -3 28 -11 38 -22c11 -13 17 -29 17 -46c0 -39 -31 -70 -70 -70s-70 31 -70 70c0 17 6 34 18 47c10 11 24 19 39 22v135c0 17 -1 41 -9 58c-8 16 -22 24 -42 24h-77l41 -40v0c3 -3 4 -6 4 -10s-1 -7 -4 -10s-6 -4 -10 -4s-7 1 -10 4l-56 56
-c-3 -11 -8 -21 -16 -29c-10 -11 -24 -19 -39 -22v-162c15 -3 29 -11 39 -22c12 -13 18 -30 18 -47c0 -39 -31 -70 -70 -70s-70 31 -70 70c0 17 6 33 17 46c10 11 24 19 38 22v164c-15 3 -28 11 -38 22c-11 13 -17 29 -17 46c0 39 31 70 70 70c32 0 59 -22 67 -51l55 55
-c3 3 6 4 10 4s7 -2 10 -4v0c5 -6 5 -15 0 -20l-40 -40h78c34 0 58 -16 70 -45c9 -23 9 -50 9 -65v-136zM112 38c0 23 -19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42s42 19 42 42zM70 296c23 0 42 19 42 42s-19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42zM314 -4
-c23 0 42 19 42 42s-19 42 -42 42s-42 -19 -42 -42s19 -42 42 -42z" />
- <glyph glyph-name="ion-md-quote" unicode="&#xf35f;" horiz-adv-x="383"
-d="M32 32l45 97h-77v223h160v-223l-51 -97h-77zM256 32l50 97h-82v223h159v-223l-50 -97h-77z" />
- <glyph glyph-name="ion-md-pricetags" unicode="&#xf35b;" horiz-adv-x="448"
-d="M410 341l38 -37v-128l-191 -180c-9 -9 -23 -12 -31 -12s-21 4 -29 12l213 204v141zM352 400l32 -32v-160l-188 -180c-9 -9 -23 -12 -31 -12s-21 4 -29 12l-124 124c-9 9 -12 21 -12 32s4 20 12 28l180 188h160zM321 297c10 3 19 12 22 22c6 22 -10 41 -31 41
-c-18 0 -32 -14 -32 -32c0 -21 19 -37 41 -31z" />
- <glyph glyph-name="ion-logo-angular" unicode="&#xf227;" horiz-adv-x="448"
-d="M182 192l42 89l42 -89h-84zM224 416l224 -80l-46 -272l-178 -96l-178 96l-46 272zM312 96h40l-128 280l-128 -280h40l27 56h122z" />
- <glyph glyph-name="ion-md-thermometer" unicode="&#xf390;" horiz-adv-x="192"
-d="M143 148c29 -16 49 -48 49 -84c0 -53 -43 -96 -96 -96s-96 43 -96 96c0 36 20 68 49 84v222c0 26 21 46 47 46s47 -20 47 -46v-222zM80 370v-50h32v50c0 8 -8 14 -16 14s-16 -6 -16 -14z" />
- <glyph glyph-name="ion-ios-information" unicode="&#xf44d;" horiz-adv-x="41"
-d="M0 272c0 11 9 20 20 20s21 -9 21 -20s-10 -20 -21 -20s-20 9 -20 20zM1 236h39v-144h-39v144z" />
- <glyph glyph-name="ion-ios-basket" unicode="&#xf11f;" horiz-adv-x="448"
-d="M356 74v76h67l-18 -76h-49zM356 0v55h45l-6 -25c-5 -17 -20 -30 -39 -30v0zM233 0v56h104v-56h-104zM43 74l-17 76h66v-76h-49zM111 168v88h104v-88h-104zM233 168v88h104v-88h-104zM54 30l-7 26h45v-56v0c-19 0 -33 13 -38 30zM111 0v56h104v-56h-104zM233 74v76h104
-v-76h-104zM111 74v76h104v-76h-104zM432 256c10 0 18 -10 16 -20l-20 -68h-72v174c0 8 -6 14 -14 14h-236c-8 0 -14 -6 -14 -14v-174h-72l-20 68c-2 10 6 20 16 20h48v96c0 18 14 32 32 32h256c18 0 32 -14 32 -32v-96h48z" />
- <glyph glyph-name="ion-md-hourglass" unicode="&#xf111;" horiz-adv-x="256"
-d="M0 400h256v-123v0v0l-85 -85l85 -85v0v0v-123h-256v123v0v0l85 85l-85 85v0v0v123zM213 96l-85 85l-85 -85v-71h170v71zM128 203l85 85v72h-170v-72z" />
- <glyph glyph-name="ion-ios-leaf" unicode="&#xf1aa;"
-d="M406 69c17 -3 10 -39 -5 -37c0 0 -20 1 -62 14c0 0 -15 -23 -38 -34c-25 -12 -117 -33 -195 38c-106 97 -118 354 -98 333c85 -90 194 -47 266 -106c54 -44 92 -122 76 -196c0 0 4 -4 56 -12zM314 62c5 5 10 16 10 24c-84 28 -151 72 -194 108c-4 3 -9 -2 -5 -6
-c44 -45 111 -103 189 -126z" />
- <glyph glyph-name="ion-ios-folder" unicode="&#xf435;" horiz-adv-x="448"
-d="M448 329v-42c0 -2 -2 -1 -3 0s-5 1 -7 1h-428c-2 0 -6 0 -7 -1s-3 -2 -3 0v74c0 13 11 23 25 23h96c8 0 12 -2 17 -7v0l23 -23c2 -2 3 -2 6 -2h258c13 0 23 -10 23 -23zM0 32v212c0 9 7 16 16 16h416c9 0 16 -7 16 -16v-212c0 -18 -14 -32 -32 -32h-384
-c-17 0 -32 14 -32 32z" />
- <glyph glyph-name="ion-md-laptop" unicode="&#xf318;" horiz-adv-x="512"
-d="M437 32h75c0 -23 -64 -32 -96 -32h-320c-32 0 -96 9 -96 32h75c-23 0 -43 20 -43 43v266c0 23 20 43 43 43h362c23 0 43 -20 43 -43v-266c0 -23 -20 -43 -43 -43zM75 341v-272h362v272h-362zM256 13c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22z" />
- <glyph glyph-name="ion-md-notifications-outline" unicode="&#xf337;" horiz-adv-x="352"
-d="M177 328c7 0 24 -5 24 -5c46 -10 78 -53 78 -100v-114v-13l9 -10l8 -8h-240l8 8l9 10v13v114c0 47 32 90 78 100c0 0 18 5 24 5zM176 400v0c18 0 31 -13 31 -31v-15c59 -14 104 -68 104 -131v-114l41 -42v-21h-352v21l41 42v114c0 63 45 117 104 131v15c0 18 13 31 31 31
-zM217 26v0c0 -23 -18 -42 -41 -42s-41 19 -41 42h82z" />
- <glyph glyph-name="ion-ios-tv" unicode="&#xf115;" horiz-adv-x="484"
-d="M438 370c26 0 46 -20 46 -46v-216c0 -26 -20 -46 -46 -46h-392c-26 0 -46 20 -46 46v216c0 26 20 46 46 46h392zM456 108v0v216c0 10 -8 18 -18 18h-392c-10 0 -18 -8 -18 -18v-216c0 -10 8 -18 18 -18h392c10 0 18 8 18 18zM422 320c7 0 12 -5 12 -12v-184
-c0 -7 -5 -12 -12 -12h-360c-7 0 -12 5 -12 12v184c0 7 5 12 12 12h360zM356 42c8 0 14 -6 14 -14s-6 -14 -14 -14h-228c-8 0 -14 6 -14 14s6 14 14 14h228z" />
- <glyph glyph-name="ion-ios-phone-landscape" unicode="&#xf1e2;" horiz-adv-x="448"
-d="M0 272c0 18 15 32 33 32h381c18 0 34 -14 34 -32v-159c0 -18 -16 -33 -34 -33h-381c-18 0 -33 15 -33 33v159zM23 177c0 -2 2 -4 4 -4s4 2 4 4v30c0 2 -2 4 -4 4s-4 -2 -4 -4v-30zM437 192c0 10 -7 18 -17 18s-18 -8 -18 -18s8 -17 18 -17s17 7 17 17zM392 288h-341v-192
-h341v192zM410 192c0 6 5 10 10 10c6 0 10 -4 10 -10s-4 -10 -10 -10c-5 0 -10 4 -10 10z" />
- <glyph glyph-name="ion-ios-warning" unicode="&#xf268;"
-d="M181 368c12 21 42 21 54 0l177 -323c11 -20 -4 -45 -27 -45h-354c-23 0 -38 25 -27 45zM226 234h-36l4 -122h28zM208 46c11 0 19 8 19 18s-8 18 -19 18s-19 -8 -19 -18s8 -18 19 -18z" />
- <glyph glyph-name="ion-ios-arrow-round-back" unicode="&#xf117;" horiz-adv-x="288"
-d="M104 284c5 -5 5 -13 0 -18l-60 -61h231c7 0 13 -6 13 -13s-6 -13 -13 -13h-231l60 -61c5 -5 5 -13 0 -18s-13 -5 -18 0l-82 83v0c-1 1 -2 2 -3 4s-1 3 -1 5c0 3 2 7 4 9l82 83c5 5 13 5 18 0z" />
- <glyph glyph-name="ion-ios-play-circle" unicode="&#xf113;"
-d="M208 400c115 0 208 -93 208 -208s-93 -208 -208 -208s-208 93 -208 208s93 208 208 208zM292 188c3 2 3 6 0 8l-137 83c-3 2 -7 0 -7 -4v-166c0 -4 4 -6 7 -4z" />
- </font>
-</defs></svg>
diff --git a/public/fonts/vendor/ionicons/dist/ionicons.ttf b/public/fonts/vendor/ionicons/dist/ionicons.ttf
deleted file mode 100644
index 67bd842..0000000
--- a/public/fonts/vendor/ionicons/dist/ionicons.ttf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/ionicons/dist/ionicons.woff b/public/fonts/vendor/ionicons/dist/ionicons.woff
deleted file mode 100644
index ec1c1f8..0000000
--- a/public/fonts/vendor/ionicons/dist/ionicons.woff
+++ /dev/null
Binary files differ
diff --git a/public/fonts/vendor/ionicons/dist/ionicons.woff2 b/public/fonts/vendor/ionicons/dist/ionicons.woff2
deleted file mode 100644
index 4233951..0000000
--- a/public/fonts/vendor/ionicons/dist/ionicons.woff2
+++ /dev/null
Binary files differ
diff --git a/public/images/boxed-bg.jpg b/public/images/boxed-bg.jpg
deleted file mode 100644
index 3464070..0000000
--- a/public/images/boxed-bg.jpg
+++ /dev/null
Binary files differ
diff --git a/public/images/vendor/adminlte/dist/boxed-bg.jpg b/public/images/vendor/adminlte/dist/boxed-bg.jpg
deleted file mode 100644
index 3464070..0000000
--- a/public/images/vendor/adminlte/dist/boxed-bg.jpg
+++ /dev/null
Binary files differ
diff --git a/public/index.php b/public/index.php
index 4584cbc..4584cbc 100755..100644
--- a/public/index.php
+++ b/public/index.php
diff --git a/public/js/admin.js b/public/js/admin.js
deleted file mode 100755
index a2dece2..0000000
--- a/public/js/admin.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "/";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 46);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 11:
-/***/ (function(module, exports) {
-
-eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/NWY3MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBIiwiZmlsZSI6IjExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11\n");
-
-/***/ }),
-
-/***/ 46:
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(47);
-
-
-/***/ }),
-
-/***/ 47:
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("window.$ = window.jQuery = __webpack_require__(48);\n__webpack_require__(49);\n__webpack_require__(50);\n__webpack_require__(51);\n__webpack_require__(52);\n__webpack_require__(53);\n__webpack_require__(54);\nwindow.Chart = __webpack_require__(55);\n\n$(function () {\n 'use strict';\n /* ChartJS\n * -------\n * Charts\n */\n\n // sales example chart\n\n var salesChartCanvas = $('#salesChart').get(0).getContext('2d');\n var salesChart = new Chart(salesChartCanvas);\n var salesChartData = {\n labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],\n datasets: [{\n label: 'Electronics',\n fillColor: 'rgb(210, 214, 222)',\n strokeColor: 'rgb(210, 214, 222)',\n pointColor: 'rgb(210, 214, 222)',\n pointStrokeColor: '#c1c7d1',\n pointHighlightFill: '#fff',\n pointHighlightStroke: 'rgb(220,220,220)',\n data: [65, 59, 80, 81, 56, 55, 40]\n }, {\n label: 'Digital Goods',\n fillColor: 'rgba(60,141,188,0.9)',\n strokeColor: 'rgba(60,141,188,0.8)',\n pointColor: '#3b8bba',\n pointStrokeColor: 'rgba(60,141,188,1)',\n pointHighlightFill: '#fff',\n pointHighlightStroke: 'rgba(60,141,188,1)',\n data: [28, 48, 40, 19, 86, 27, 90]\n }]\n };\n var salesChartOptions = {\n showScale: true,\n scaleShowGridLines: false,\n scaleGridLineColor: 'rgba(0,0,0,.05)',\n scaleGridLineWidth: 1,\n scaleShowHorizontalLines: true,\n scaleShowVerticalLines: true,\n bezierCurve: true,\n bezierCurveTension: 0.3,\n pointDot: false,\n pointDotRadius: 4,\n pointDotStrokeWidth: 1,\n pointHitDetectionRadius: 20,\n datasetStroke: true,\n datasetStrokeWidth: 2,\n datasetFill: true,\n legendTemplate: '<ul class=\\'<%=name.toLowerCase()%>-legend\\'><% for (var i=0; i<datasets.length; i++){%><li><span style=\\'background-color:<%=datasets[i].lineColor%>\\'></span><%=datasets[i].label%></li><%}%></ul>',\n maintainAspectRatio: true,\n responsive: true\n };\n salesChart.Line(salesChartData, salesChartOptions);\n\n // -------------\n // - PIE CHART -\n // -------------\n var pieChartCanvas = $('#pieChart').get(0).getContext('2d');\n var pieChart = new Chart(pieChartCanvas);\n var PieData = [{\n value: 700,\n color: '#f56954',\n highlight: '#f56954',\n label: 'Chrome'\n }, {\n value: 500,\n color: '#00a65a',\n highlight: '#00a65a',\n label: 'IE'\n }, {\n value: 400,\n color: '#f39c12',\n highlight: '#f39c12',\n label: 'FireFox'\n }, {\n value: 600,\n color: '#00c0ef',\n highlight: '#00c0ef',\n label: 'Safari'\n }, {\n value: 300,\n color: '#3c8dbc',\n highlight: '#3c8dbc',\n label: 'Opera'\n }, {\n value: 100,\n color: '#d2d6de',\n highlight: '#d2d6de',\n label: 'Navigator'\n }];\n var pieOptions = {\n segmentShowStroke: true,\n segmentStrokeColor: '#fff',\n segmentStrokeWidth: 1,\n percentageInnerCutout: 50,\n animationSteps: 100,\n animationEasing: 'easeOutBounce',\n animateRotate: true,\n animateScale: false,\n responsive: true,\n maintainAspectRatio: false,\n legendTemplate: '<ul class=\\'<%=name.toLowerCase()%>-legend\\'><% for (var i=0; i<segments.length; i++){%><li><span style=\\'background-color:<%=segments[i].fillColor%>\\'></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',\n tooltipTemplate: '<%=value %> <%=label%> users'\n };\n pieChart.Doughnut(PieData, pieOptions);\n\n /* jVector Maps\n * ------------\n * Create a world map with markers\n */\n $('#world-map-markers').vectorMap({\n map: 'world_mill_en',\n normalizeFunction: 'polynomial',\n hoverOpacity: 0.7,\n hoverColor: false,\n backgroundColor: 'transparent',\n regionStyle: {\n initial: {\n fill: 'rgba(210, 214, 222, 1)',\n 'fill-opacity': 1,\n stroke: 'none',\n 'stroke-width': 0,\n 'stroke-opacity': 1\n },\n hover: {\n 'fill-opacity': 0.7,\n cursor: 'pointer'\n },\n selected: {\n fill: 'yellow'\n },\n selectedHover: {}\n },\n markerStyle: {\n initial: {\n fill: '#00a65a',\n stroke: '#111'\n }\n },\n markers: [{\n latLng: [41.90, 12.45],\n name: 'Vatican City'\n }, {\n latLng: [43.73, 7.41],\n name: 'Monaco'\n }, {\n latLng: [-0.52, 166.93],\n name: 'Nauru'\n }, {\n latLng: [-8.51, 179.21],\n name: 'Tuvalu'\n }, {\n latLng: [43.93, 12.46],\n name: 'San Marino'\n }, {\n latLng: [47.14, 9.52],\n name: 'Liechtenstein'\n }, {\n latLng: [7.11, 171.06],\n name: 'Marshall Islands'\n }, {\n latLng: [17.3, -62.73],\n name: 'Saint Kitts and Nevis'\n }, {\n latLng: [3.2, 73.22],\n name: 'Maldives'\n }, {\n latLng: [35.88, 14.5],\n name: 'Malta'\n }, {\n latLng: [12.05, -61.75],\n name: 'Grenada'\n }, {\n latLng: [13.16, -61.23],\n name: 'Saint Vincent and the Grenadines'\n }, {\n latLng: [13.16, -59.55],\n name: 'Barbados'\n }, {\n latLng: [17.11, -61.85],\n name: 'Antigua and Barbuda'\n }, {\n latLng: [-4.61, 55.45],\n name: 'Seychelles'\n }, {\n latLng: [7.35, 134.46],\n name: 'Palau'\n }, {\n latLng: [42.5, 1.51],\n name: 'Andorra'\n }, {\n latLng: [14.01, -60.98],\n name: 'Saint Lucia'\n }, {\n latLng: [6.91, 158.18],\n name: 'Federated States of Micronesia'\n }, {\n latLng: [1.3, 103.8],\n name: 'Singapore'\n }, {\n latLng: [1.46, 173.03],\n name: 'Kiribati'\n }, {\n latLng: [-21.13, -175.2],\n name: 'Tonga'\n }, {\n latLng: [15.3, -61.38],\n name: 'Dominica'\n }, {\n latLng: [-20.2, 57.5],\n name: 'Mauritius'\n }, {\n latLng: [26.02, 50.55],\n name: 'Bahrain'\n }, {\n latLng: [0.33, 6.73],\n name: 'São Tomé and Príncipe'\n }]\n });\n});\n\n//---------------------------------------------------------END OF CHARTS------------------------------------------------------//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2FkbWluLmpzPzI5ODYiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJDaGFydCIsInNhbGVzQ2hhcnRDYW52YXMiLCJnZXQiLCJnZXRDb250ZXh0Iiwic2FsZXNDaGFydCIsInNhbGVzQ2hhcnREYXRhIiwibGFiZWxzIiwiZGF0YXNldHMiLCJsYWJlbCIsImZpbGxDb2xvciIsInN0cm9rZUNvbG9yIiwicG9pbnRDb2xvciIsInBvaW50U3Ryb2tlQ29sb3IiLCJwb2ludEhpZ2hsaWdodEZpbGwiLCJwb2ludEhpZ2hsaWdodFN0cm9rZSIsImRhdGEiLCJzYWxlc0NoYXJ0T3B0aW9ucyIsInNob3dTY2FsZSIsInNjYWxlU2hvd0dyaWRMaW5lcyIsInNjYWxlR3JpZExpbmVDb2xvciIsInNjYWxlR3JpZExpbmVXaWR0aCIsInNjYWxlU2hvd0hvcml6b250YWxMaW5lcyIsInNjYWxlU2hvd1ZlcnRpY2FsTGluZXMiLCJiZXppZXJDdXJ2ZSIsImJlemllckN1cnZlVGVuc2lvbiIsInBvaW50RG90IiwicG9pbnREb3RSYWRpdXMiLCJwb2ludERvdFN0cm9rZVdpZHRoIiwicG9pbnRIaXREZXRlY3Rpb25SYWRpdXMiLCJkYXRhc2V0U3Ryb2tlIiwiZGF0YXNldFN0cm9rZVdpZHRoIiwiZGF0YXNldEZpbGwiLCJsZWdlbmRUZW1wbGF0ZSIsIm1haW50YWluQXNwZWN0UmF0aW8iLCJyZXNwb25zaXZlIiwiTGluZSIsInBpZUNoYXJ0Q2FudmFzIiwicGllQ2hhcnQiLCJQaWVEYXRhIiwidmFsdWUiLCJjb2xvciIsImhpZ2hsaWdodCIsInBpZU9wdGlvbnMiLCJzZWdtZW50U2hvd1N0cm9rZSIsInNlZ21lbnRTdHJva2VDb2xvciIsInNlZ21lbnRTdHJva2VXaWR0aCIsInBlcmNlbnRhZ2VJbm5lckN1dG91dCIsImFuaW1hdGlvblN0ZXBzIiwiYW5pbWF0aW9uRWFzaW5nIiwiYW5pbWF0ZVJvdGF0ZSIsImFuaW1hdGVTY2FsZSIsInRvb2x0aXBUZW1wbGF0ZSIsIkRvdWdobnV0IiwidmVjdG9yTWFwIiwibWFwIiwibm9ybWFsaXplRnVuY3Rpb24iLCJob3Zlck9wYWNpdHkiLCJob3ZlckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwicmVnaW9uU3R5bGUiLCJpbml0aWFsIiwiZmlsbCIsInN0cm9rZSIsImhvdmVyIiwiY3Vyc29yIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEhvdmVyIiwibWFya2VyU3R5bGUiLCJtYXJrZXJzIiwibGF0TG5nIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLENBQVAsR0FBV0QsT0FBT0UsTUFBUCxHQUFnQixtQkFBQUMsQ0FBUSxFQUFSLENBQTNCO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0FILE9BQU9JLEtBQVAsR0FBZSxtQkFBQUQsQ0FBUSxFQUFSLENBQWY7O0FBRUFGLEVBQUUsWUFBWTtBQUNWO0FBQ0E7Ozs7O0FBS0E7O0FBQ0EsUUFBSUksbUJBQW1CSixFQUFFLGFBQUYsRUFBaUJLLEdBQWpCLENBQXFCLENBQXJCLEVBQXdCQyxVQUF4QixDQUFtQyxJQUFuQyxDQUF2QjtBQUNBLFFBQUlDLGFBQWEsSUFBSUosS0FBSixDQUFVQyxnQkFBVixDQUFqQjtBQUNBLFFBQUlJLGlCQUFpQjtBQUNqQkMsZ0JBQVEsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixPQUF4QixFQUFpQyxPQUFqQyxFQUEwQyxLQUExQyxFQUFpRCxNQUFqRCxFQUF5RCxNQUF6RCxDQURTO0FBRWpCQyxrQkFBVSxDQUFDO0FBQ0hDLG1CQUFPLGFBREo7QUFFSEMsdUJBQVcsb0JBRlI7QUFHSEMseUJBQWEsb0JBSFY7QUFJSEMsd0JBQVksb0JBSlQ7QUFLSEMsOEJBQWtC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Rkw7QUFDSUQsb0JBQVEsQ0FBQyxDQUFDLEtBQUYsRUFBUyxDQUFDLEtBQVYsQ0FEWjtBQUVJQyxrQkFBTTtBQUZWLFNBcEZLLEVBd0ZMO0FBQ0lELG9CQUFRLENBQUMsSUFBRCxFQUFPLENBQUMsS0FBUixDQURaO0FBRUlDLGtCQUFNO0FBRlYsU0F4RkssRUE0Rkw7QUFDSUQsb0JBQVEsQ0FBQyxDQUFDLElBQUYsRUFBUSxJQUFSLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQTVGSyxFQWdHTDtBQUNJRCxvQkFBUSxDQUFDLEtBQUQsRUFBUSxLQUFSLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQWhHSyxFQW9HTDtBQUNJRCxvQkFBUSxDQUFDLElBQUQsRUFBTyxJQUFQLENBRFo7QUFFSUMsa0JBQU07QUFGVixTQXBHSztBQTdCcUIsS0FBbEM7QUF1SUgsQ0E5UEQ7O0FBa1FBIiwiZmlsZSI6IjQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsid2luZG93LiQgPSB3aW5kb3cualF1ZXJ5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanNcIik7XG5yZXF1aXJlKFwiLi4vLi4vLi4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9mYXN0Y2xpY2svbGliL2Zhc3RjbGljay5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qc1wiKTtcbnJlcXVpcmUoXCIuLi8uLi8uLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtMS4yLjIubWluLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL3BsdWdpbnMvanZlY3Rvcm1hcC9qcXVlcnktanZlY3Rvcm1hcC13b3JsZC1taWxsLWVuLmpzXCIpO1xucmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5LXNsaW1zY3JvbGwvanF1ZXJ5LnNsaW1zY3JvbGwubWluLmpzXCIpO1xud2luZG93LkNoYXJ0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvY2hhcnQuanMvQ2hhcnQuanNcIik7XG5cbiQoZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvKiBDaGFydEpTXG4gICAgICogLS0tLS0tLVxuICAgICAqIENoYXJ0c1xuICAgICAqL1xuXG4gICAgLy8gc2FsZXMgZXhhbXBsZSBjaGFydFxuICAgIHZhciBzYWxlc0NoYXJ0Q2FudmFzID0gJCgnI3NhbGVzQ2hhcnQnKS5nZXQoMCkuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB2YXIgc2FsZXNDaGFydCA9IG5ldyBDaGFydChzYWxlc0NoYXJ0Q2FudmFzKTtcbiAgICB2YXIgc2FsZXNDaGFydERhdGEgPSB7XG4gICAgICAgIGxhYmVsczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknXSxcbiAgICAgICAgZGF0YXNldHM6IFt7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbGVjdHJvbmljcycsXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiAncmdiKDIxMCwgMjE0LCAyMjIpJyxcbiAgICAgICAgICAgICAgICBzdHJva2VDb2xvcjogJ3JnYigyMTAsIDIxNCwgMjIyKScsXG4gICAgICAgICAgICAgICAgcG9pbnRDb2xvcjogJ3JnYigyMTAsIDIxNCwgMjIyKScsXG4gICAgICAgICAgICAgICAgcG9pbnRTdHJva2VDb2xvcjogJyNjMWM3ZDEnLFxuICAgICAgICAgICAgICAgIHBvaW50SGlnaGxpZ2h0RmlsbDogJyNmZmYnLFxuICAgICAgICAgICAgICAgIHBvaW50SGlnaGxpZ2h0U3Ryb2tlOiAncmdiKDIyMCwyMjAsMjIwKScsXG4gICAgICAgICAgICAgICAgZGF0YTogWzY1LCA1OSwgODAsIDgxLCA1NiwgNTUsIDQwXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0RpZ2l0YWwgR29vZHMnLFxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogJ3JnYmEoNjAsMTQxLDE4OCwwLjkpJyxcbiAgICAgICAgICAgICAgICBzdHJva2VDb2xvcjogJ3JnYmEoNjAsMTQxLDE4OCwwLjgpJyxcbiAgICAgICAgICAgICAgICBwb2ludENvbG9yOiAnIzNiOGJiYScsXG4gICAgICAgICAgICAgICAgcG9pbnRTdHJva2VDb2xvcjogJ3JnYmEoNjAsMTQxLDE4OCwxKScsXG4gICAgICAgICAgICAgICAgcG9pbnRIaWdobGlnaHRGaWxsOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgcG9pbnRIaWdobGlnaHRTdHJva2U6ICdyZ2JhKDYwLDE0MSwxODgsMSknLFxuICAgICAgICAgICAgICAgIGRhdGE6IFsyOCwgNDgsIDQwLCAxOSwgODYsIDI3LCA5MF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG4gICAgdmFyIHNhbGVzQ2hhcnRPcHRpb25zID0ge1xuICAgICAgICBzaG93U2NhbGU6IHRydWUsXG4gICAgICAgIHNjYWxlU2hvd0dyaWRMaW5lczogZmFsc2UsXG4gICAgICAgIHNjYWxlR3JpZExpbmVDb2xvcjogJ3JnYmEoMCwwLDAsLjA1KScsXG4gICAgICAgIHNjYWxlR3JpZExpbmVXaWR0aDogMSxcbiAgICAgICAgc2NhbGVTaG93SG9yaXpvbnRhbExpbmVzOiB0cnVlLFxuICAgICAgICBzY2FsZVNob3dWZXJ0aWNhbExpbmVzOiB0cnVlLFxuICAgICAgICBiZXppZXJDdXJ2ZTogdHJ1ZSxcbiAgICAgICAgYmV6aWVyQ3VydmVUZW5zaW9uOiAwLjMsXG4gICAgICAgIHBvaW50RG90OiBmYWxzZSxcbiAgICAgICAgcG9pbnREb3RSYWRpdXM6IDQsXG4gICAgICAgIHBvaW50RG90U3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIHBvaW50SGl0RGV0ZWN0aW9uUmFkaXVzOiAyMCxcbiAgICAgICAgZGF0YXNldFN0cm9rZTogdHJ1ZSxcbiAgICAgICAgZGF0YXNldFN0cm9rZVdpZHRoOiAyLFxuICAgICAgICBkYXRhc2V0RmlsbDogdHJ1ZSxcbiAgICAgICAgbGVnZW5kVGVtcGxhdGU6ICc8dWwgY2xhc3M9XFwnPCU9bmFtZS50b0xvd2VyQ2FzZSgpJT4tbGVnZW5kXFwnPjwlIGZvciAodmFyIGk9MDsgaTxkYXRhc2V0cy5sZW5ndGg7IGkrKyl7JT48bGk+PHNwYW4gc3R5bGU9XFwnYmFja2dyb3VuZC1jb2xvcjo8JT1kYXRhc2V0c1tpXS5saW5lQ29sb3IlPlxcJz48L3NwYW4+PCU9ZGF0YXNldHNbaV0ubGFiZWwlPjwvbGk+PCV9JT48L3VsPicsXG4gICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUsXG4gICAgICAgIHJlc3BvbnNpdmU6IHRydWVcbiAgICB9O1xuICAgIHNhbGVzQ2hhcnQuTGluZShzYWxlc0NoYXJ0RGF0YSwgc2FsZXNDaGFydE9wdGlvbnMpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0gUElFIENIQVJUIC1cbiAgICAvLyAtLS0tLS0tLS0tLS0tXG4gICAgdmFyIHBpZUNoYXJ0Q2FudmFzID0gJCgnI3BpZUNoYXJ0JykuZ2V0KDApLmdldENvbnRleHQoJzJkJyk7XG4gICAgdmFyIHBpZUNoYXJ0ID0gbmV3IENoYXJ0KHBpZUNoYXJ0Q2FudmFzKTtcbiAgICB2YXIgUGllRGF0YSA9IFt7XG4gICAgICAgICAgICB2YWx1ZTogNzAwLFxuICAgICAgICAgICAgY29sb3I6ICcjZjU2OTU0JyxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogJyNmNTY5NTQnLFxuICAgICAgICAgICAgbGFiZWw6ICdDaHJvbWUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiA1MDAsXG4gICAgICAgICAgICBjb2xvcjogJyMwMGE2NWEnLFxuICAgICAgICAgICAgaGlnaGxpZ2h0OiAnIzAwYTY1YScsXG4gICAgICAgICAgICBsYWJlbDogJ0lFJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogNDAwLFxuICAgICAgICAgICAgY29sb3I6ICcjZjM5YzEyJyxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogJyNmMzljMTInLFxuICAgICAgICAgICAgbGFiZWw6ICdGaXJlRm94J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogNjAwLFxuICAgICAgICAgICAgY29sb3I6ICcjMDBjMGVmJyxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogJyMwMGMwZWYnLFxuICAgICAgICAgICAgbGFiZWw6ICdTYWZhcmknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAzMDAsXG4gICAgICAgICAgICBjb2xvcjogJyMzYzhkYmMnLFxuICAgICAgICAgICAgaGlnaGxpZ2h0OiAnIzNjOGRiYycsXG4gICAgICAgICAgICBsYWJlbDogJ09wZXJhJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogMTAwLFxuICAgICAgICAgICAgY29sb3I6ICcjZDJkNmRlJyxcbiAgICAgICAgICAgIGhpZ2hsaWdodDogJyNkMmQ2ZGUnLFxuICAgICAgICAgICAgbGFiZWw6ICdOYXZpZ2F0b3InXG4gICAgICAgIH1cbiAgICBdO1xuICAgIHZhciBwaWVPcHRpb25zID0ge1xuICAgICAgICBzZWdtZW50U2hvd1N0cm9rZTogdHJ1ZSxcbiAgICAgICAgc2VnbWVudFN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgIHNlZ21lbnRTdHJva2VXaWR0aDogMSxcbiAgICAgICAgcGVyY2VudGFnZUlubmVyQ3V0b3V0OiA1MCxcbiAgICAgICAgYW5pbWF0aW9uU3RlcHM6IDEwMCxcbiAgICAgICAgYW5pbWF0aW9uRWFzaW5nOiAnZWFzZU91dEJvdW5jZScsXG4gICAgICAgIGFuaW1hdGVSb3RhdGU6IHRydWUsXG4gICAgICAgIGFuaW1hdGVTY2FsZTogZmFsc2UsXG4gICAgICAgIHJlc3BvbnNpdmU6IHRydWUsXG4gICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICBsZWdlbmRUZW1wbGF0ZTogJzx1bCBjbGFzcz1cXCc8JT1uYW1lLnRvTG93ZXJDYXNlKCklPi1sZWdlbmRcXCc+PCUgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKXslPjxsaT48c3BhbiBzdHlsZT1cXCdiYWNrZ3JvdW5kLWNvbG9yOjwlPXNlZ21lbnRzW2ldLmZpbGxDb2xvciU+XFwnPjwvc3Bhbj48JWlmKHNlZ21lbnRzW2ldLmxhYmVsKXslPjwlPXNlZ21lbnRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPicsXG4gICAgICAgIHRvb2x0aXBUZW1wbGF0ZTogJzwlPXZhbHVlICU+IDwlPWxhYmVsJT4gdXNlcnMnXG4gICAgfTtcbiAgICBwaWVDaGFydC5Eb3VnaG51dChQaWVEYXRhLCBwaWVPcHRpb25zKTtcblxuXG4gICAgLyogalZlY3RvciBNYXBzXG4gICAgICogLS0tLS0tLS0tLS0tXG4gICAgICogQ3JlYXRlIGEgd29ybGQgbWFwIHdpdGggbWFya2Vyc1xuICAgICAqL1xuICAgICQoJyN3b3JsZC1tYXAtbWFya2VycycpLnZlY3Rvck1hcCh7XG4gICAgICAgIG1hcDogJ3dvcmxkX21pbGxfZW4nLFxuICAgICAgICBub3JtYWxpemVGdW5jdGlvbjogJ3BvbHlub21pYWwnLFxuICAgICAgICBob3Zlck9wYWNpdHk6IDAuNyxcbiAgICAgICAgaG92ZXJDb2xvcjogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgcmVnaW9uU3R5bGU6IHtcbiAgICAgICAgICAgIGluaXRpYWw6IHtcbiAgICAgICAgICAgICAgICBmaWxsOiAncmdiYSgyMTAsIDIxNCwgMjIyLCAxKScsXG4gICAgICAgICAgICAgICAgJ2ZpbGwtb3BhY2l0eSc6IDEsXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgJ3N0cm9rZS13aWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgJ3N0cm9rZS1vcGFjaXR5JzogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgJ2ZpbGwtb3BhY2l0eSc6IDAuNyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiB7XG4gICAgICAgICAgICAgICAgZmlsbDogJ3llbGxvdydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RlZEhvdmVyOiB7fVxuICAgICAgICB9LFxuICAgICAgICBtYXJrZXJTdHlsZToge1xuICAgICAgICAgICAgaW5pdGlhbDoge1xuICAgICAgICAgICAgICAgIGZpbGw6ICcjMDBhNjVhJyxcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjMTExJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtYXJrZXJzOiBbe1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzQxLjkwLCAxMi40NV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZhdGljYW4gQ2l0eSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbNDMuNzMsIDcuNDFdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNb25hY28nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWy0wLjUyLCAxNjYuOTNdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdOYXVydSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbLTguNTEsIDE3OS4yMV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1R1dmFsdSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbNDMuOTMsIDEyLjQ2XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2FuIE1hcmlubydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbNDcuMTQsIDkuNTJdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdMaWVjaHRlbnN0ZWluJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFs3LjExLCAxNzEuMDZdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNYXJzaGFsbCBJc2xhbmRzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFsxNy4zLCAtNjIuNzNdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTYWludCBLaXR0cyBhbmQgTmV2aXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzMuMiwgNzMuMjJdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNYWxkaXZlcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMzUuODgsIDE0LjVdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNYWx0YSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMTIuMDUsIC02MS43NV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0dyZW5hZGEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzEzLjE2LCAtNjEuMjNdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMTMuMTYsIC01OS41NV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JhcmJhZG9zJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFsxNy4xMSwgLTYxLjg1XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW50aWd1YSBhbmQgQmFyYnVkYSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbLTQuNjEsIDU1LjQ1XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2V5Y2hlbGxlcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbNy4zNSwgMTM0LjQ2XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnUGFsYXUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzQyLjUsIDEuNTFdLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBbmRvcnJhJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFsxNC4wMSwgLTYwLjk4XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2FpbnQgTHVjaWEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzYuOTEsIDE1OC4xOF0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0ZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMS4zLCAxMDMuOF0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NpbmdhcG9yZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMS40NiwgMTczLjAzXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnS2lyaWJhdGknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWy0yMS4xMywgLTE3NS4yXSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnVG9uZ2EnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhdExuZzogWzE1LjMsIC02MS4zOF0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ0RvbWluaWNhJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXRMbmc6IFstMjAuMiwgNTcuNV0sXG4gICAgICAgICAgICAgICAgbmFtZTogJ01hdXJpdGl1cydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMjYuMDIsIDUwLjU1XSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmFocmFpbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF0TG5nOiBbMC4zMywgNi43M10sXG4gICAgICAgICAgICAgICAgbmFtZTogJ1PDo28gVG9tw6kgYW5kIFByw61uY2lwZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0pO1xufSk7XG5cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUVORCBPRiBDSEFSVFMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2FkbWluLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n");
-
-/***/ }),
-
-/***/ 48:
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(e,t){\"use strict\";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\"script\");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[c.call(e)]||\"object\":typeof e}var b=\"3.3.1\",w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\"3.3.1\",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:\"jQuery\"+(\"3.3.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==c.call(e))&&(!(t=i(e))||\"function\"==typeof(n=f.call(t,\"constructor\")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(T,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),\"function\"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function C(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\"sizzle\"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",I=\"\\\\[\"+M+\"*(\"+R+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+R+\"))|)\"+M+\"*\\\\]\",W=\":(\"+R+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+I+\")*)|.*)\\\\)|)\",$=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),F=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),_=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),z=new RegExp(\"=\"+M+\"*([^\\\\]'\\\"]*?)\"+M+\"*\\\\]\",\"g\"),X=new RegExp(W),U=new RegExp(\"^\"+R+\"$\"),V={ID:new RegExp(\"^#(\"+R+\")\"),CLASS:new RegExp(\"^\\\\.(\"+R+\")\"),TAG:new RegExp(\"^(\"+R+\"|[*])\"),ATTR:new RegExp(\"^\"+I),PSEUDO:new RegExp(\"^\"+W),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+\" \"]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){(c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=b),s=(h=a(e)).length;while(s--)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute(\"id\")}}}return u(e.replace(B,\"$1\"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\"|\"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function de(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",re,!1):i.attachEvent&&i.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+b+\"'></a><select id='\"+b+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&y.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||y.push(\"\\\\[\"+M+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+b+\"-]\").length||y.push(\"~=\"),e.querySelectorAll(\":checked\").length||y.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||y.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&y.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&y.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&y.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),y.push(\",.*:\")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,\"*\"),m.call(e,\"[s!='']:x\"),v.push(\"!=\",W)}),y=y.length&&new RegExp(y.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,\"='$1']\"),n.matchesSelector&&g&&!S[t+\" \"]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+\"\").replace(te,ne)},oe.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&E(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\"!=\"===t:!t||(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i.replace($,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\"$1\"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||\"\")||oe.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B,\" \")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&\"parentNode\"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace(B,\"$1\"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\"0\",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG(\"*\",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\" \"];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\"function\"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split(\"\").sort(D).join(\"\")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(i=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,\"parentNode\")},parentsUntil:function(e,t,n){return k(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return k(e,\"nextSibling\")},prevAll:function(e){return k(e,\"previousSibling\")},nextUntil:function(e,t,n){return k(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return k(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\"iframe\")?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\"string\"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\"catch\":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\"Thenable self-resolution\");l=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\"With\"](this===o?void 0:this,arguments),this},o[t[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\"DOMContentLoaded\",_),e.removeEventListener(\"load\",_),w.ready()}\"complete\"===r.readyState||\"loading\"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\"DOMContentLoaded\",_),e.addEventListener(\"load\",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\"ms-\").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(ee,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=J.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&w.contains(e.ownerDocument,e)&&\"none\"===w.css(e,\"display\")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u=s(),l=n&&n[3]||(w.cssNumber[t]?\"\":\"px\"),c=(w.cssNumber[t]||\"px\"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===i&&(i=\"block\"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(i[o]=ce(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\"script\"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\"div\")),t=r.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\"undefined\"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&N(this,\"input\"))return this.click(),!1},_default:function(e){return N(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ae=/<script|<style|<link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Le(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")?w(e).children(\"tbody\")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&pe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&\"string\"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&w.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,\"\"),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\"script\")).length>0&&ve(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\"|\"),\"i\");!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\"1%\"!==t.top,u=12===n(t.marginLeft),c.style.right=\"60%\",s=36===n(t.right),o=36===n(t.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\"div\"),c=r.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",h.clearCloneStyle=\"content-box\"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ve={letterSpacing:\"0\",fontWeight:\"400\"},Ge=[\"Webkit\",\"Moz\",\"ms\"],Ye=r.createElement(\"div\").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+oe[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+oe[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+oe[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\"border-box\"===w.css(e,\"boxSizing\",!1,r),a=o;if(We.test(i)){if(!n)return i;i=\"auto\"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(e,\"display\",!1,r))&&(i=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\"border\":\"content\"),a,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),h.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),\"normal\"===i&&t in Ve&&(i=Ve[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\"border-box\"===w.css(e,\"boxSizing\",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\"border\",!1,o)-.5)),s&&(i=ie.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),w.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=oe[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,\"fxshow\");n.queue||(null==(a=w._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,\"display\")),\"none\"===(c=w.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===w.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?\"hidden\"in y&&(g=y.hidden):y=J.access(e,\"fxshow\",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\"fxshow\");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\"*\"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&\"object\"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\"input\"),t=r.createElement(\"select\").appendChild(r.createElement(\"option\"));e.type=\"checkbox\",h.checkOn=\"\"!==e.value,h.optSelected=t.selected,(e=r.createElement(\"input\")).value=\"t\",e.type=\"radio\",h.radioValue=\"t\"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&\"radio\"===t&&N(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\" \")}function mt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function xt(e){return Array.isArray(e)?e:\"string\"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])while(r.indexOf(\" \"+o+\" \")>-1)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&\"boolean\"!==n||((t=mt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&(\" \"+vt(mt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?\"\":e+\"\"})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(bt,\"\"):null==n?\"\":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,\"optgroup\"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),h.focusin=\"onfocusin\"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\"type\")?t.type:t,x=f.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(m=(x=m.split(\".\")).shift(),x.sort()),c=m.indexOf(\":\")<0&&\"on\"+m,t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,\"events\")||{})[t.type]&&J.get(s,\"handle\"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x(t))r(e,t);else for(i in t)jt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Bt=r.createElement(\"a\");Bt.href=Ct.href;function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\"once memory\"),x=h.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(M)||[\"\"],null==h.crossDomain){l=r.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\"//\"+Bt.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(qt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(kt.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,\"$1\"),d=(kt.test(o)?\"&\":\"?\")+\"_=\"+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[o]),w.etag[o]&&E.setRequestHeader(\"If-None-Match\",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\"abort\",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger(\"ajaxSend\",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\"No Transport\");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||\"\",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[o]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[o]=T)),204===t||\"HEAD\"===h.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?\"ajaxSuccess\":\"ajaxError\",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger(\"ajaxComplete\",[E,h]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&\"withCredentials\"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),w.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\\?(?=&|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Yt.pop()||w.expando+\"_\"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Qt.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\"$1\"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),\"script\"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?w(\"<div>\").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\"position\"),f=w(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=w.css(e,\"top\"),u=w.css(e,\"left\"),(l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===w.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,\"borderTopWidth\",!0),i.left+=w.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===w.css(e,\"position\"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\"top\",\"left\"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\"px\":n})}),w.each({Height:\"height\",Width:\"width\"},function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),w.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==\"function\"&&__webpack_require__(11)&&!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function(){return w}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9kaXN0L2pxdWVyeS5taW4uanM/OTVkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsYUFBYSx1R0FBdUcsMkVBQTJFLFlBQVksTUFBTSxzREFBc0QsYUFBYSw0RkFBNEYsbUVBQW1FLGlCQUFpQix3REFBd0QsaUJBQWlCLDZCQUE2QixJQUFJLDRCQUE0QixrQkFBa0IseUNBQXlDLDJDQUEyQyxnREFBZ0QsY0FBYyw2RkFBNkYsOEJBQThCLDBCQUEwQix3Q0FBd0Msa0JBQWtCLHlEQUF5RCxvQkFBb0IsaUJBQWlCLDREQUE0RCx1QkFBdUIsb0NBQW9DLDJCQUEyQixrQkFBa0Isc0JBQXNCLGlCQUFpQiwrQ0FBK0MscUJBQXFCLEdBQUcsa0JBQWtCLCtDQUErQyxrQkFBa0Isa0JBQWtCLGlCQUFpQixtQkFBbUIsZ0JBQWdCLGlDQUFpQyw4Q0FBOEMsZ0JBQWdCLDJDQUEyQyxvQ0FBb0MsaUNBQWlDLGtDQUFrQyw2QkFBNkIsZ0RBQWdELHFDQUFxQyxzQkFBc0IsSUFBSSxpTEFBaUwsNkNBQTZDLFNBQVMsV0FBVyx3RkFBd0YsbUJBQW1CLGtCQUFrQiwyQkFBMkIsUUFBUSxxSUFBcUksMkJBQTJCLE1BQU0sb0JBQW9CLFNBQVMsd0JBQXdCLEtBQUssb0JBQW9CLFVBQVUsU0FBUyxlQUFlLElBQUksc0NBQXNDLGtEQUFrRCxTQUFTLGtCQUFrQix1Q0FBdUMseUJBQXlCLFlBQVksaUZBQWlGLHlCQUF5QixnQ0FBZ0MscUJBQXFCLG1DQUFtQyxJQUFJLGdCQUFnQixvQkFBb0Isc0JBQXNCLG1DQUFtQyxJQUFJLHFDQUFxQyxTQUFTLHFCQUFxQixpQkFBaUIsdUJBQXVCLElBQUkscUNBQXFDLGlEQUFpRCxxQkFBcUIsa0JBQWtCLCtLQUErSyxvQ0FBb0MsRUFBRSxjQUFjLHlDQUF5Qyw0RUFBNEUsa0JBQWtCLDBIQUEw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LHlEQUF5RCxhQUFhLEdBQUcsVUFBVSxpREFBaUQsZUFBZSx3QkFBd0Isb0JBQW9CLDhCQUE4QixNQUFNLDRFQUE0RSx5REFBeUQsd0JBQXdCLHNDQUFzQywrQ0FBK0MsMkRBQTJELEVBQUUsVUFBVSw4QkFBOEIsZUFBZSxRQUFRLHlDQUF5QyxlQUFlLHNCQUFzQix5RkFBeUYsOEJBQThCLE1BQU0sK1BBQStQLGtCQUFrQixFQUFFLDBOQUEwTixzQkFBc0IsK0RBQStELGVBQWUsb0JBQW9CLDRDQUE0QyxlQUFlLHFCQUFxQiwyQkFBMkIsc0JBQXNCLDBCQUEwQiw0QkFBNEIsd0JBQXdCLDRCQUE0QixvRUFBb0Usd0JBQXdCLFVBQVUsdUZBQXVGLG9EQUFvRCxrQ0FBa0MseUJBQXlCLDRCQUE0Qix1SkFBdUosZ0JBQWdCLDREQUE0RCxtSUFBc0UsU0FBUztBQUFBLHFHQUFFLHVCQUF1QixnQ0FBZ0MsMERBQTBELHVCQUF1QiIsImZpbGUiOiI0OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBqUXVlcnkgdjMuMy4xIHwgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqL1xuIWZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWUuZG9jdW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiB0KGUpfTp0KGUpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49W10scj1lLmRvY3VtZW50LGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLG89bi5zbGljZSxhPW4uY29uY2F0LHM9bi5wdXNoLHU9bi5pbmRleE9mLGw9e30sYz1sLnRvU3RyaW5nLGY9bC5oYXNPd25Qcm9wZXJ0eSxwPWYudG9TdHJpbmcsZD1wLmNhbGwoT2JqZWN0KSxoPXt9LGc9ZnVuY3Rpb24gZSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZcIm51bWJlclwiIT10eXBlb2YgdC5ub2RlVHlwZX0seT1mdW5jdGlvbiBlKHQpe3JldHVybiBudWxsIT10JiZ0PT09dC53aW5kb3d9LHY9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfTtmdW5jdGlvbiBtKGUsdCxuKXt2YXIgaSxvPSh0PXR8fHIpLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7aWYoby50ZXh0PWUsbilmb3IoaSBpbiB2KW5baV0mJihvW2ldPW5baV0pO3QuaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIG51bGw9PWU/ZStcIlwiOlwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2xbYy5jYWxsKGUpXXx8XCJvYmplY3RcIjp0eXBlb2YgZX12YXIgYj1cIjMuMy4xXCIsdz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdy5mbi5pbml0KGUsdCl9LFQ9L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO3cuZm49dy5wcm90b3R5cGU9e2pxdWVyeTpcIjMuMy4xXCIsY29uc3RydWN0b3I6dyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP28uY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHcuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobj49MCYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpzLHNvcnQ6bi5zb3J0LHNwbGljZTpuLnNwbGljZX0sdy5leHRlbmQ9dy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBhJiYobD1hLGE9YXJndW1lbnRzW3NdfHx7fSxzKyspLFwib2JqZWN0XCI9PXR5cGVvZiBhfHxnKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSluPWFbdF0sYSE9PShyPWVbdF0pJiYobCYmciYmKHcuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmQXJyYXkuaXNBcnJheShuKT9uOltdKTpvPW4mJncuaXNQbGFpbk9iamVjdChuKT9uOnt9LGFbdF09dy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LHcuZXh0ZW5kKHtleHBhbmRvOlwialF1ZXJ5XCIrKFwiMy4zLjFcIitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cXEQvZyxcIlwiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fFwiW29iamVjdCBPYmplY3RdXCIhPT1jLmNhbGwoZSkpJiYoISh0PWkoZSkpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZihuPWYuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3IpJiZwLmNhbGwobik9PT1kKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe20oZSl9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYoQyhlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOihlK1wiXCIpLnJlcGxhY2UoVCxcIlwiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihDKE9iamVjdChlKSk/dy5tZXJnZShuLFwic3RyaW5nXCI9PXR5cGVvZiBlP1tlXTplKTpzLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6dS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGgscz0hbjtvPGE7bysrKShyPSF0KGVbb10sbykpIT09cyYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLHM9W107aWYoQyhlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmcy5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJnMucHVzaChpKTtyZXR1cm4gYS5hcHBseShbXSxzKX0sZ3VpZDoxLHN1cHBvcnQ6aH0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKHcuZm5bU3ltYm9sLml0ZXJhdG9yXT1uW1N5bWJvbC5pdGVyYXRvcl0pLHcuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7bFtcIltvYmplY3QgXCIrdCtcIl1cIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gQyhlKXt2YXIgdD0hIWUmJlwibGVuZ3RoXCJpbiBlJiZlLmxlbmd0aCxuPXgoZSk7cmV0dXJuIWcoZSkmJiF5KGUpJiYoXCJhcnJheVwiPT09bnx8MD09PXR8fFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX12YXIgRT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGwsYyxmLHAsZCxoLGcseSx2LG0seCxiPVwic2l6emxlXCIrMSpuZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxFPWFlKCksaz1hZSgpLFM9YWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoZj0hMCksMH0sTj17fS5oYXNPd25Qcm9wZXJ0eSxBPVtdLGo9QS5wb3AscT1BLnB1c2gsTD1BLnB1c2gsSD1BLnNsaWNlLE89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFA9XCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLE09XCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFI9XCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLEk9XCJcXFxcW1wiK00rXCIqKFwiK1IrXCIpKD86XCIrTStcIiooWypeJHwhfl0/PSlcIitNK1wiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIrUitcIikpfClcIitNK1wiKlxcXFxdXCIsVz1cIjooXCIrUitcIikoPzpcXFxcKCgoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXwoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIrSStcIikqKXwuKilcXFxcKXwpXCIsJD1uZXcgUmVnRXhwKE0rXCIrXCIsXCJnXCIpLEI9bmV3IFJlZ0V4cChcIl5cIitNK1wiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIitNK1wiKyRcIixcImdcIiksRj1uZXcgUmVnRXhwKFwiXlwiK00rXCIqLFwiK00rXCIqXCIpLF89bmV3IFJlZ0V4cChcIl5cIitNK1wiKihbPit+XXxcIitNK1wiKVwiK00rXCIqXCIpLHo9bmV3IFJlZ0V4cChcIj1cIitNK1wiKihbXlxcXFxdJ1xcXCJdKj8pXCIrTStcIipcXFxcXVwiLFwiZ1wiKSxYPW5ldyBSZWdFeHAoVyksVT1uZXcgUmVnRXhwKFwiXlwiK1IrXCIkXCIpLFY9e0lEOm5ldyBSZWdFeHAoXCJeIyhcIitSK1wiKVwiKSxDTEFTUzpuZXcgUmVnRXhwKFwiXlxcXFwuKFwiK1IrXCIpXCIpLFRBRzpuZXcgUmVnRXhwKFwiXihcIitSK1wifFsqXSlcIiksQVRUUjpuZXcgUmVnRXhwKFwiXlwiK0kpLFBTRVVETzpuZXcgUmVnRXhwKFwiXlwiK1cpLENISUxEOm5ldyBSZWdFeHAoXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiK00rXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIitNK1wiKig/OihbKy1dfClcIitNK1wiKihcXFxcZCspfCkpXCIrTStcIipcXFxcKXwpXCIsXCJpXCIpLGJvb2w6bmV3IFJlZ0V4cChcIl4oPzpcIitQK1wiKSRcIixcImlcIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoXCJeXCIrTStcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIrTStcIiooKD86LVxcXFxkKT9cXFxcZCopXCIrTStcIipcXFxcKXwpKD89W14tXXwkKVwiLFwiaVwiKX0sRz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFk9L15oXFxkJC9pLFE9L15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxKPS9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLEs9L1srfl0vLFo9bmV3IFJlZ0V4cChcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiK00rXCI/fChcIitNK1wiKXwuKVwiLFwiaWdcIiksZWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwiMHhcIit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0sdGU9LyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9cIlxcMFwiPT09ZT9cIlxcdWZmZmRcIjplLnNsaWNlKDAsLTEpK1wiXFxcXFwiK2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygxNikrXCIgXCI6XCJcXFxcXCIrZX0scmU9ZnVuY3Rpb24oKXtwKCl9LGllPW1lKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZS5kaXNhYmxlZCYmKFwiZm9ybVwiaW4gZXx8XCJsYWJlbFwiaW4gZSl9LHtkaXI6XCJwYXJlbnROb2RlXCIsbmV4dDpcImxlZ2VuZFwifSk7dHJ5e0wuYXBwbHkoQT1ILmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEFbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7TD17YXBwbHk6QS5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtxLmFwcGx5KGUsSC5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb2UoZSx0LHIsaSl7dmFyIG8scyxsLGMsZixoLHYsbT10JiZ0Lm93bmVyRG9jdW1lbnQsVD10P3Qubm9kZVR5cGU6OTtpZihyPXJ8fFtdLFwic3RyaW5nXCIhPXR5cGVvZiBlfHwhZXx8MSE9PVQmJjkhPT1UJiYxMSE9PVQpcmV0dXJuIHI7aWYoIWkmJigodD90Lm93bmVyRG9jdW1lbnR8fHQ6dykhPT1kJiZwKHQpLHQ9dHx8ZCxnKSl7aWYoMTEhPT1UJiYoZj1KLmV4ZWMoZSkpKWlmKG89ZlsxXSl7aWYoOT09PVQpe2lmKCEobD10LmdldEVsZW1lbnRCeUlkKG8pKSlyZXR1cm4gcjtpZihsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZSBpZihtJiYobD1tLmdldEVsZW1lbnRCeUlkKG8pKSYmeCh0LGwpJiZsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZXtpZihmWzJdKXJldHVybiBMLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigobz1mWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEwuYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobykpLHJ9aWYobi5xc2EmJiFTW2UrXCIgXCJdJiYoIXl8fCF5LnRlc3QoZSkpKXtpZigxIT09VCltPXQsdj1lO2Vsc2UgaWYoXCJvYmplY3RcIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGM9dC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk/Yz1jLnJlcGxhY2UodGUsbmUpOnQuc2V0QXR0cmlidXRlKFwiaWRcIixjPWIpLHM9KGg9YShlKSkubGVuZ3RoO3doaWxlKHMtLSloW3NdPVwiI1wiK2MrXCIgXCIrdmUoaFtzXSk7dj1oLmpvaW4oXCIsXCIpLG09Sy50ZXN0KGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0fWlmKHYpdHJ5e3JldHVybiBMLmFwcGx5KHIsbS5xdWVyeVNlbGVjdG9yQWxsKHYpKSxyfWNhdGNoKGUpe31maW5hbGx5e2M9PT1iJiZ0LnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpfX19cmV0dXJuIHUoZS5yZXBsYWNlKEIsXCIkMVwiKSx0LHIsaSl9ZnVuY3Rpb24gYWUoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4saSl7cmV0dXJuIGUucHVzaChuK1wiIFwiKT5yLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbitcIiBcIl09aX1yZXR1cm4gdH1mdW5jdGlvbiBzZShlKXtyZXR1cm4gZVtiXT0hMCxlfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGxlKGUsdCl7dmFyIG49ZS5zcGxpdChcInxcIiksaT1uLmxlbmd0aDt3aGlsZShpLS0pci5hdHRySGFuZGxlW25baV1dPXR9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGZlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cImlucHV0XCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHBlKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKFwiaW5wdXRcIj09PW58fFwiYnV0dG9uXCI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVyblwiZm9ybVwiaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD9cImxhYmVsXCJpbiB0P1wibGFiZWxcImluIHQucGFyZW50Tm9kZT90LnBhcmVudE5vZGUuZGlzYWJsZWQ9PT1lOnQuZGlzYWJsZWQ9PT1lOnQuaXNEaXNhYmxlZD09PWV8fHQuaXNEaXNhYmxlZCE9PSFlJiZpZSh0KT09PWU6dC5kaXNhYmxlZD09PWU6XCJsYWJlbFwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIGhlKGUpe3JldHVybiBzZShmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxzZShmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGdlKGUpe3JldHVybiBlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1uPW9lLnN1cHBvcnQ9e30sbz1vZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuISF0JiZcIkhUTUxcIiE9PXQubm9kZU5hbWV9LHA9b2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsaSxhPWU/ZS5vd25lckRvY3VtZW50fHxlOnc7cmV0dXJuIGEhPT1kJiY5PT09YS5ub2RlVHlwZSYmYS5kb2N1bWVudEVsZW1lbnQ/KGQ9YSxoPWQuZG9jdW1lbnRFbGVtZW50LGc9IW8oZCksdyE9PWQmJihpPWQuZGVmYXVsdFZpZXcpJiZpLnRvcCE9PWkmJihpLmFkZEV2ZW50TGlzdGVuZXI/aS5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIscmUsITEpOmkuYXR0YWNoRXZlbnQmJmkuYXR0YWNoRXZlbnQoXCJvbnVubG9hZFwiLHJlKSksbi5hdHRyaWJ1dGVzPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT1cImlcIiwhZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGQuY3JlYXRlQ29tbWVudChcIlwiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1RLnRlc3QoZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxuLmdldEJ5SWQ9dWUoZnVuY3Rpb24oZSl7cmV0dXJuIGguYXBwZW5kQ2hpbGQoZSkuaWQ9YiwhZC5nZXRFbGVtZW50c0J5TmFtZXx8IWQuZ2V0RWxlbWVudHNCeU5hbWUoYikubGVuZ3RofSksbi5nZXRCeUlkPyhyLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoWixlZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZShcImlkXCIpPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZnKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooci5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlJiZlLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSxyLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmZyl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKSkmJm4udmFsdWU9PT1lKXJldHVybltvXTtpPXQuZ2V0RWxlbWVudHNCeU5hbWUoZSkscj0wO3doaWxlKG89aVtyKytdKWlmKChuPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHIuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6bi5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoXCIqXCI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxyLmZpbmQuQ0xBU1M9bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmcpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sdj1bXSx5PVtdLChuLnFzYT1RLnRlc3QoZC5xdWVyeVNlbGVjdG9yQWxsKSkmJih1ZShmdW5jdGlvbihlKXtoLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD1cIjxhIGlkPSdcIitiK1wiJz48L2E+PHNlbGVjdCBpZD0nXCIrYitcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLGUucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCYmeS5wdXNoKFwiWypeJF09XCIrTStcIiooPzonJ3xcXFwiXFxcIilcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fHkucHVzaChcIlxcXFxbXCIrTStcIiooPzp2YWx1ZXxcIitQK1wiKVwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWR+PVwiK2IrXCItXVwiKS5sZW5ndGh8fHkucHVzaChcIn49XCIpLGUucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aHx8eS5wdXNoKFwiOmNoZWNrZWRcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiYSNcIitiK1wiKypcIikubGVuZ3RofHx5LnB1c2goXCIuIy4rWyt+XVwiKX0pLHVlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPVwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7dmFyIHQ9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJEXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCYmeS5wdXNoKFwibmFtZVwiK00rXCIqWypeJHwhfl0/PVwiKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoJiZ5LnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLGguYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbChcIjpkaXNhYmxlZFwiKS5sZW5ndGgmJnkucHVzaChcIjplbmFibGVkXCIsXCI6ZGlzYWJsZWRcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKSx5LnB1c2goXCIsLio6XCIpfSkpLChuLm1hdGNoZXNTZWxlY3Rvcj1RLnRlc3QobT1oLm1hdGNoZXN8fGgud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxoLm1vek1hdGNoZXNTZWxlY3Rvcnx8aC5vTWF0Y2hlc1NlbGVjdG9yfHxoLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnVlKGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsXCIqXCIpLG0uY2FsbChlLFwiW3MhPScnXTp4XCIpLHYucHVzaChcIiE9XCIsVyl9KSx5PXkubGVuZ3RoJiZuZXcgUmVnRXhwKHkuam9pbihcInxcIikpLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKFwifFwiKSksdD1RLnRlc3QoaC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseD10fHxRLnRlc3QoaC5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciByPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiByfHwoMSYocj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFuLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PXI/ZT09PWR8fGUub3duZXJEb2N1bWVudD09PXcmJngodyxlKT8tMTp0PT09ZHx8dC5vd25lckRvY3VtZW50PT09dyYmeCh3LHQpPzE6Yz9PKGMsZSktTyhjLHQpOjA6NCZyPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBmPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PWQ/LTE6dD09PWQ/MTppPy0xOm8/MTpjP08oYyxlKS1PKGMsdCk6MDtpZihpPT09bylyZXR1cm4gY2UoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP2NlKGFbcl0sc1tyXSk6YVtyXT09PXc/LTE6c1tyXT09PXc/MTowfSxkKTpkfSxvZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9lKGUsbnVsbCxudWxsLHQpfSxvZS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtpZigoZS5vd25lckRvY3VtZW50fHxlKSE9PWQmJnAoZSksdD10LnJlcGxhY2UoeixcIj0nJDEnXVwiKSxuLm1hdGNoZXNTZWxlY3RvciYmZyYmIVNbdCtcIiBcIl0mJighdnx8IXYudGVzdCh0KSkmJigheXx8IXkudGVzdCh0KSkpdHJ5e3ZhciByPW0uY2FsbChlLHQpO2lmKHJ8fG4uZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gcn1jYXRjaChlKXt9cmV0dXJuIG9lKHQsZCxudWxsLFtlXSkubGVuZ3RoPjB9LG9lLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHgoZSx0KX0sb2UuYXR0cj1mdW5jdGlvbihlLHQpeyhlLm93bmVyRG9jdW1lbnR8fGUpIT09ZCYmcChlKTt2YXIgaT1yLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxvPWkmJk4uY2FsbChyLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9pKGUsdCwhZyk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1vP286bi5hdHRyaWJ1dGVzfHwhZz9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGx9LG9lLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZStcIlwiKS5yZXBsYWNlKHRlLG5lKX0sb2UuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIrZSl9LG9lLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKGY9IW4uZGV0ZWN0RHVwbGljYXRlcyxjPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGYpe3doaWxlKHQ9ZVtvKytdKXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVybiBjPW51bGwsZX0saT1vZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49XCJcIixyPTAsbz1lLm5vZGVUeXBlO2lmKG8pe2lmKDE9PT1vfHw5PT09b3x8MTE9PT1vKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9aShlKX1lbHNlIGlmKDM9PT1vfHw0PT09bylyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSB3aGlsZSh0PWVbcisrXSluKz1pKHQpO3JldHVybiBufSwocj1vZS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpzZSxtYXRjaDpWLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7XCI+XCI6e2RpcjpcInBhcmVudE5vZGVcIixmaXJzdDohMH0sXCIgXCI6e2RpcjpcInBhcmVudE5vZGVcIn0sXCIrXCI6e2RpcjpcInByZXZpb3VzU2libGluZ1wiLGZpcnN0OiEwfSxcIn5cIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKFosZWUpLGVbM109KGVbM118fGVbNF18fGVbNV18fFwiXCIpLnJlcGxhY2UoWixlZSksXCJ+PVwiPT09ZVsyXSYmKGVbM109XCIgXCIrZVszXStcIiBcIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksXCJudGhcIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b2UuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooXCJldmVuXCI9PT1lWzNdfHxcIm9kZFwiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fFwib2RkXCI9PT1lWzNdKSk6ZVszXSYmb2UuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNl0mJmVbMl07cmV0dXJuIFYuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8XCJcIjpuJiZYLnRlc3QobikmJih0PWEobiwhMCkpJiYodD1uLmluZGV4T2YoXCIpXCIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoWixlZSkudG9Mb3dlckNhc2UoKTtyZXR1cm5cIipcIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1FW2UrXCIgXCJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKFwiKF58XCIrTStcIilcIitlK1wiKFwiK00rXCJ8JClcIikpJiZFKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdChcInN0cmluZ1wiPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vZS5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/XCIhPVwiPT09dDohdHx8KGkrPVwiXCIsXCI9XCI9PT10P2k9PT1uOlwiIT1cIj09PXQ/aSE9PW46XCJePVwiPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOlwiKj1cIj09PXQ/biYmaS5pbmRleE9mKG4pPi0xOlwiJD1cIj09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjpcIn49XCI9PT10PyhcIiBcIitpLnJlcGxhY2UoJCxcIiBcIikrXCIgXCIpLmluZGV4T2Yobik+LTE6XCJ8PVwiPT09dCYmKGk9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uK1wiLVwiKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPVwibnRoXCIhPT1lLnNsaWNlKDAsMyksYT1cImxhc3RcIiE9PWUuc2xpY2UoLTQpLHM9XCJvZi10eXBlXCI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscCxkLGgsZz1vIT09YT9cIm5leHRTaWJsaW5nXCI6XCJwcmV2aW91c1NpYmxpbmdcIix5PXQucGFyZW50Tm9kZSx2PXMmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxtPSF1JiYhcyx4PSExO2lmKHkpe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT12OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz1cIm9ubHlcIj09PWUmJiFoJiZcIm5leHRTaWJsaW5nXCJ9cmV0dXJuITB9aWYoaD1bYT95LmZpcnN0Q2hpbGQ6eS5sYXN0Q2hpbGRdLGEmJm0pe3g9KGQ9KGw9KGM9KGY9KHA9eSlbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV18fFtdKVswXT09PVQmJmxbMV0pJiZsWzJdLHA9ZCYmeS5jaGlsZE5vZGVzW2RdO3doaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKDE9PT1wLm5vZGVUeXBlJiYrK3gmJnA9PT10KXtjW2VdPVtULGQseF07YnJlYWt9fWVsc2UgaWYobSYmKHg9ZD0obD0oYz0oZj0ocD10KVtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXXx8W10pWzBdPT09VCYmbFsxXSksITE9PT14KXdoaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PXAubm9kZVR5cGUpJiYrK3gmJihtJiYoKGM9KGY9cFtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXT1bVCx4XSkscD09PXQpKWJyZWFrO3JldHVybih4LT1pKT09PXJ8fHglcj09MCYmeC9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLGk9ci5wc2V1ZG9zW2VdfHxyLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b2UuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK2UpO3JldHVybiBpW2JdP2kodCk6aS5sZW5ndGg+MT8obj1bZSxlLFwiXCIsdF0sci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/c2UoZnVuY3Rpb24oZSxuKXt2YXIgcixvPWkoZSx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSllW3I9TyhlLG9bYV0pXT0hKG5bcl09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gaShlLDAsbil9KTppfX0scHNldWRvczp7bm90OnNlKGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1zKGUucmVwbGFjZShCLFwiJDFcIikpO3JldHVybiByW2JdP3NlKGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGE9cihlLG51bGwsaSxbXSkscz1lLmxlbmd0aDt3aGlsZShzLS0pKG89YVtzXSkmJihlW3NdPSEodFtzXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLHRbMF09bnVsbCwhbi5wb3AoKX19KSxoYXM6c2UoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvZShlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOnNlKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZShaLGVlKSxmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGkodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpzZShmdW5jdGlvbihlKXtyZXR1cm4gVS50ZXN0KGV8fFwiXCIpfHxvZS5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiK2UpLGU9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG97aWYobj1nP3QubGFuZzp0LmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpfHx0LmdldEF0dHJpYnV0ZShcImxhbmdcIikpcmV0dXJuKG49bi50b0xvd2VyQ2FzZSgpKT09PWV8fDA9PT1uLmluZGV4T2YoZStcIi1cIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09aH0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kLmFjdGl2ZUVsZW1lbnQmJighZC5oYXNGb2N1c3x8ZC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpkZSghMSksZGlzYWJsZWQ6ZGUoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PXQmJiEhZS5jaGVja2VkfHxcIm9wdGlvblwiPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hci5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFkudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEcudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT10JiZcImJ1dHRvblwiPT09ZS50eXBlfHxcImJ1dHRvblwiPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImlucHV0XCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpoZShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aGUoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmhlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpoZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OmhlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19KS5wc2V1ZG9zLm50aD1yLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pci5wc2V1ZG9zW3RdPWZlKHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0pci5wc2V1ZG9zW3RdPXBlKHQpO2Z1bmN0aW9uIHllKCl7fXllLnByb3RvdHlwZT1yLmZpbHRlcnM9ci5wc2V1ZG9zLHIuc2V0RmlsdGVycz1uZXcgeWUsYT1vZS50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLGksbyxhLHMsdSxsLGM9a1tlK1wiIFwiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsdT1bXSxsPXIucHJlRmlsdGVyO3doaWxlKHMpe24mJiEoaT1GLmV4ZWMocykpfHwoaSYmKHM9cy5zbGljZShpWzBdLmxlbmd0aCl8fHMpLHUucHVzaChvPVtdKSksbj0hMSwoaT1fLmV4ZWMocykpJiYobj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6aVswXS5yZXBsYWNlKEIsXCIgXCIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gci5maWx0ZXIpIShpPVZbYV0uZXhlYyhzKSl8fGxbYV0mJiEoaT1sW2FdKGkpKXx8KG49aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczppfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9vZS5lcnJvcihlKTprKGUsdSkuc2xpY2UoMCl9O2Z1bmN0aW9uIHZlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj1cIlwiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBtZShlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLGE9biYmXCJwYXJlbnROb2RlXCI9PT1vLHM9QysrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixpKXt3aGlsZSh0PXRbcl0paWYoMT09PXQubm9kZVR5cGV8fGEpcmV0dXJuIGUodCxuLGkpO3JldHVybiExfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxmLHA9W1Qsc107aWYodSl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8YSkmJmUodCxuLHUpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxhKWlmKGY9dFtiXXx8KHRbYl09e30pLGM9Zlt0LnVuaXF1ZUlEXXx8KGZbdC51bmlxdWVJRF09e30pLGkmJmk9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpdD10W3JdfHx0O2Vsc2V7aWYoKGw9Y1tvXSkmJmxbMF09PT1UJiZsWzFdPT09cylyZXR1cm4gcFsyXT1sWzJdO2lmKGNbb109cCxwWzJdPWUodCxuLHUpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBiZShlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKW9lKGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiB3ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhPVtdLHM9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtzPHU7cysrKShvPWVbc10pJiYobiYmIW4obyxyLGkpfHwoYS5wdXNoKG8pLGwmJnQucHVzaChzKSkpO3JldHVybiBhfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPVRlKHIpKSxpJiYhaVtiXSYmKGk9VGUoaSxvKSksc2UoZnVuY3Rpb24obyxhLHMsdSl7dmFyIGwsYyxmLHA9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8YmUodHx8XCIqXCIscy5ub2RlVHlwZT9bc106cyxbXSkseT0hZXx8IW8mJnQ/Zzp3ZShnLHAsZSxzLHUpLHY9bj9pfHwobz9lOmh8fHIpP1tdOmE6eTtpZihuJiZuKHksdixzLHUpLHIpe2w9d2UodixkKSxyKGwsW10scyx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkoZj1sW2NdKSYmKHZbZFtjXV09ISh5W2RbY11dPWYpKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9di5sZW5ndGg7d2hpbGUoYy0tKShmPXZbY10pJiZsLnB1c2goeVtjXT1mKTtpKG51bGwsdj1bXSxsLHUpfWM9di5sZW5ndGg7d2hpbGUoYy0tKShmPXZbY10pJiYobD1pP08obyxmKTpwW2NdKT4tMSYmKG9bbF09IShhW2xdPWYpKX19ZWxzZSB2PXdlKHY9PT1hP3Yuc3BsaWNlKGgsdi5sZW5ndGgpOnYpLGk/aShudWxsLGEsdix1KTpMLmFwcGx5KGEsdil9KX1mdW5jdGlvbiBDZShlKXtmb3IodmFyIHQsbixpLG89ZS5sZW5ndGgsYT1yLnJlbGF0aXZlW2VbMF0udHlwZV0scz1hfHxyLnJlbGF0aXZlW1wiIFwiXSx1PWE/MTowLGM9bWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxmPW1lKGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSk+LTF9LHMsITApLHA9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hYSYmKHJ8fG4hPT1sKXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOmYoZSxuLHIpKTtyZXR1cm4gdD1udWxsLGl9XTt1PG87dSsrKWlmKG49ci5yZWxhdGl2ZVtlW3VdLnR5cGVdKXA9W21lKHhlKHApLG4pXTtlbHNle2lmKChuPXIuZmlsdGVyW2VbdV0udHlwZV0uYXBwbHkobnVsbCxlW3VdLm1hdGNoZXMpKVtiXSl7Zm9yKGk9Kyt1O2k8bztpKyspaWYoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKWJyZWFrO3JldHVybiBUZSh1PjEmJnhlKHApLHU+MSYmdmUoZS5zbGljZSgwLHUtMSkuY29uY2F0KHt2YWx1ZTpcIiBcIj09PWVbdS0yXS50eXBlP1wiKlwiOlwiXCJ9KSkucmVwbGFjZShCLFwiJDFcIiksbix1PGkmJkNlKGUuc2xpY2UodSxpKSksaTxvJiZDZShlPWUuc2xpY2UoaSkpLGk8byYmdmUoZSkpfXAucHVzaChuKX1yZXR1cm4geGUocCl9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgbj10Lmxlbmd0aD4wLGk9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKG8sYSxzLHUsYyl7dmFyIGYsaCx5LHY9MCxtPVwiMFwiLHg9byYmW10sYj1bXSx3PWwsQz1vfHxpJiZyLmZpbmQuVEFHKFwiKlwiLGMpLEU9VCs9bnVsbD09dz8xOk1hdGgucmFuZG9tKCl8fC4xLGs9Qy5sZW5ndGg7Zm9yKGMmJihsPWE9PT1kfHxhfHxjKTttIT09ayYmbnVsbCE9KGY9Q1ttXSk7bSsrKXtpZihpJiZmKXtoPTAsYXx8Zi5vd25lckRvY3VtZW50PT09ZHx8KHAoZikscz0hZyk7d2hpbGUoeT1lW2grK10paWYoeShmLGF8fGQscykpe3UucHVzaChmKTticmVha31jJiYoVD1FKX1uJiYoKGY9IXkmJmYpJiZ2LS0sbyYmeC5wdXNoKGYpKX1pZih2Kz1tLG4mJm0hPT12KXtoPTA7d2hpbGUoeT10W2grK10peSh4LGIsYSxzKTtpZihvKXtpZih2PjApd2hpbGUobS0tKXhbbV18fGJbbV18fChiW21dPWouY2FsbCh1KSk7Yj13ZShiKX1MLmFwcGx5KHUsYiksYyYmIW8mJmIubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb2UudW5pcXVlU29ydCh1KX1yZXR1cm4gYyYmKFQ9RSxsPXcpLHh9O3JldHVybiBuP3NlKG8pOm99cmV0dXJuIHM9b2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPVNbZStcIiBcIl07aWYoIW8pe3R8fCh0PWEoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShvPUNlKHRbbl0pKVtiXT9yLnB1c2gobyk6aS5wdXNoKG8pOyhvPVMoZSxFZShpLHIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gb30sdT1vZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sdSxsLGMsZixwPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsZD0haSYmYShlPXAuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PWQubGVuZ3RoKXtpZigodT1kWzBdPWRbMF0uc2xpY2UoMCkpLmxlbmd0aD4yJiZcIklEXCI9PT0obD11WzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmZyYmci5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZighKHQ9KHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLGVlKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtwJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1vPVYubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShvLS0pe2lmKGw9dVtvXSxyLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigoZj1yLmZpbmRbY10pJiYoaT1mKGwubWF0Y2hlc1swXS5yZXBsYWNlKFosZWUpLEsudGVzdCh1WzBdLnR5cGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKHUuc3BsaWNlKG8sMSksIShlPWkubGVuZ3RoJiZ2ZSh1KSkpcmV0dXJuIEwuYXBwbHkobixpKSxuO2JyZWFrfX19cmV0dXJuKHB8fHMoZSxkKSkoaSx0LCFnLG4sIXR8fEsudGVzdChlKSYmZ2UodC5wYXJlbnROb2RlKXx8dCksbn0sbi5zb3J0U3RhYmxlPWIuc3BsaXQoXCJcIikuc29ydChEKS5qb2luKFwiXCIpPT09YixuLmRldGVjdER1cGxpY2F0ZXM9ISFmLHAoKSxuLnNvcnREZXRhY2hlZD11ZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpKX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD1cIjxhIGhyZWY9JyMnPjwvYT5cIixcIiNcIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfSl8fGxlKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbilyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCxcInR5cGVcIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9XCI8aW5wdXQvPlwiLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIpLFwiXCI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIil9KXx8bGUoXCJ2YWx1ZVwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmXCJpbnB1dFwiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpfSl8fGxlKFAsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKCFuKXJldHVybiEwPT09ZVt0XT90LnRvTG93ZXJDYXNlKCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSksb2V9KGUpO3cuZmluZD1FLHcuZXhwcj1FLnNlbGVjdG9ycyx3LmV4cHJbXCI6XCJdPXcuZXhwci5wc2V1ZG9zLHcudW5pcXVlU29ydD13LnVuaXF1ZT1FLnVuaXF1ZVNvcnQsdy50ZXh0PUUuZ2V0VGV4dCx3LmlzWE1MRG9jPUUuaXNYTUwsdy5jb250YWlucz1FLmNvbnRhaW5zLHcuZXNjYXBlU2VsZWN0b3I9RS5lc2NhcGU7dmFyIGs9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJncoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxTPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxEPXcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gTihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIEE9L148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2k7ZnVuY3Rpb24gaihlLHQsbil7cmV0dXJuIGcodCk/dy5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1cm4hIXQuY2FsbChlLHIsZSkhPT1ufSk6dC5ub2RlVHlwZT93LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk6XCJzdHJpbmdcIiE9dHlwZW9mIHQ/dy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbCh0LGUpPi0xIT09bn0pOncuZmlsdGVyKHQsZSxuKX13LmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9XCI6bm90KFwiK2UrXCIpXCIpLDE9PT10Lmxlbmd0aCYmMT09PXIubm9kZVR5cGU/dy5maW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTp3LmZpbmQubWF0Y2hlcyhlLHcuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pKX0sdy5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMubGVuZ3RoLGk9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYody5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyl3LmZpbmQoZSxpW3RdLG4pO3JldHVybiByPjE/dy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZELnRlc3QoZSk/dyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC87KHcuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZihuPW58fHEsXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCEoaT1cIjxcIj09PWVbMF0mJlwiPlwiPT09ZVtlLmxlbmd0aC0xXSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpMLmV4ZWMoZSkpfHwhaVsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKGlbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHc/dFswXTp0LHcubWVyZ2UodGhpcyx3LnBhcnNlSFRNTChpWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OnIsITApKSxBLnRlc3QoaVsxXSkmJncuaXNQbGFpbk9iamVjdCh0KSlmb3IoaSBpbiB0KWcodGhpc1tpXSk/dGhpc1tpXSh0W2ldKTp0aGlzLmF0dHIoaSx0W2ldKTtyZXR1cm4gdGhpc31yZXR1cm4obz1yLmdldEVsZW1lbnRCeUlkKGlbMl0pKSYmKHRoaXNbMF09byx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpnKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKHcpOncubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9dy5mbixxPXcocik7dmFyIEg9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sTz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt3LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXcoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYody5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9XCJzdHJpbmdcIiE9dHlwZW9mIGUmJncoZSk7aWYoIUQudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT9hLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/dy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT9cInN0cmluZ1wiPT10eXBlb2YgZT91LmNhbGwodyhlKSx0aGlzWzBdKTp1LmNhbGwodGhpcyxlLmpxdWVyeT9lWzBdOmUpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcudW5pcXVlU29ydCh3Lm1lcmdlKHRoaXMuZ2V0KCksdyhlLHQpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlvbiBQKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX13LmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSxcInBhcmVudE5vZGVcIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsoZSxcInBhcmVudE5vZGVcIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLFwibmV4dFNpYmxpbmdcIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gayhlLFwibmV4dFNpYmxpbmdcIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLFwibmV4dFNpYmxpbmdcIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLFwicHJldmlvdXNTaWJsaW5nXCIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gTihlLFwiaWZyYW1lXCIpP2UuY29udGVudERvY3VtZW50OihOKGUsXCJ0ZW1wbGF0ZVwiKSYmKGU9ZS5jb250ZW50fHxlKSx3Lm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9dy5tYXAodGhpcyx0LG4pO3JldHVyblwiVW50aWxcIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiZcInN0cmluZ1wiPT10eXBlb2YgciYmKGk9dy5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKE9bZV18fHcudW5pcXVlU29ydChpKSxILnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KTt2YXIgTT0vW15cXHgyMFxcdFxcclxcblxcZl0rL2c7ZnVuY3Rpb24gUihlKXt2YXIgdD17fTtyZXR1cm4gdy5lYWNoKGUubWF0Y2goTSl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9dy5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT1cInN0cmluZ1wiPT10eXBlb2YgZT9SKGUpOncuZXh0ZW5kKHt9LGUpO3ZhciB0LG4scixpLG89W10sYT1bXSxzPS0xLHU9ZnVuY3Rpb24oKXtmb3IoaT1pfHxlLm9uY2Uscj10PSEwO2EubGVuZ3RoO3M9LTEpe249YS5zaGlmdCgpO3doaWxlKCsrczxvLmxlbmd0aCkhMT09PW9bc10uYXBwbHkoblswXSxuWzFdKSYmZS5zdG9wT25GYWxzZSYmKHM9by5sZW5ndGgsbj0hMSl9ZS5tZW1vcnl8fChuPSExKSx0PSExLGkmJihvPW4/W106XCJcIil9LGw9e2FkZDpmdW5jdGlvbigpe3JldHVybiBvJiYobiYmIXQmJihzPW8ubGVuZ3RoLTEsYS5wdXNoKG4pKSxmdW5jdGlvbiB0KG4pe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7ZyhyKT9lLnVuaXF1ZSYmbC5oYXMocil8fG8ucHVzaChyKTpyJiZyLmxlbmd0aCYmXCJzdHJpbmdcIiE9PXgocikmJnQocil9KX0oYXJndW1lbnRzKSxuJiYhdCYmdSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXcuaW5BcnJheSh0LG8sbikpPi0xKW8uc3BsaWNlKG4sMSksbjw9cyYmcy0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3cuaW5BcnJheShlLG8pPi0xOm8ubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihvPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxvPW49XCJcIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFvfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxufHx0fHwobz1uPVwiXCIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhaX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaXx8KG49W2UsKG49bnx8W10pLnNsaWNlP24uc2xpY2UoKTpuXSxhLnB1c2gobiksdHx8dSgpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGwuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFyfX07cmV0dXJuIGx9O2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gVyhlKXt0aHJvdyBlfWZ1bmN0aW9uICQoZSx0LG4scil7dmFyIGk7dHJ5e2UmJmcoaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmZyhpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fXcuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbih0KXt2YXIgbj1bW1wibm90aWZ5XCIsXCJwcm9ncmVzc1wiLHcuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLHcuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLDJdLFtcInJlc29sdmVcIixcImRvbmVcIix3LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHcuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksMCxcInJlc29sdmVkXCJdLFtcInJlamVjdFwiLFwiZmFpbFwiLHcuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksdy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwxLFwicmVqZWN0ZWRcIl1dLHI9XCJwZW5kaW5nXCIsaT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG8uZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSxcImNhdGNoXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKHQpe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZyhlW3JbNF1dKSYmZVtyWzRdXTtvW3JbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmZyhlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCk6dFtyWzBdK1wiV2l0aFwiXSh0aGlzLGk/W2VdOmFyZ3VtZW50cyl9KX0pLGU9bnVsbH0pLnByb21pc2UoKX0sdGhlbjpmdW5jdGlvbih0LHIsaSl7dmFyIG89MDtmdW5jdGlvbiBhKHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMsdT1hcmd1bWVudHMsbD1mdW5jdGlvbigpe3ZhciBlLGw7aWYoISh0PG8pKXtpZigoZT1yLmFwcGx5KHMsdSkpPT09bi5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiKTtsPWUmJihcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJmUudGhlbixnKGwpP2k/bC5jYWxsKGUsYShvLG4sSSxpKSxhKG8sbixXLGkpKToobysrLGwuY2FsbChlLGEobyxuLEksaSksYShvLG4sVyxpKSxhKG8sbixJLG4ubm90aWZ5V2l0aCkpKToociE9PUkmJihzPXZvaWQgMCx1PVtlXSksKGl8fG4ucmVzb2x2ZVdpdGgpKHMsdSkpfX0sYz1pP2w6ZnVuY3Rpb24oKXt0cnl7bCgpfWNhdGNoKGUpe3cuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsYy5zdGFja1RyYWNlKSx0KzE+PW8mJihyIT09VyYmKHM9dm9pZCAwLHU9W2VdKSxuLnJlamVjdFdpdGgocyx1KSl9fTt0P2MoKToody5EZWZlcnJlZC5nZXRTdGFja0hvb2smJihjLnN0YWNrVHJhY2U9dy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksZS5zZXRUaW1lb3V0KGMpKX19cmV0dXJuIHcuRGVmZXJyZWQoZnVuY3Rpb24oZSl7blswXVszXS5hZGQoYSgwLGUsZyhpKT9pOkksZS5ub3RpZnlXaXRoKSksblsxXVszXS5hZGQoYSgwLGUsZyh0KT90OkkpKSxuWzJdWzNdLmFkZChhKDAsZSxnKHIpP3I6VykpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3cuZXh0ZW5kKGUsaSk6aX19LG89e307cmV0dXJuIHcuZWFjaChuLGZ1bmN0aW9uKGUsdCl7dmFyIGE9dFsyXSxzPXRbNV07aVt0WzFdXT1hLmFkZCxzJiZhLmFkZChmdW5jdGlvbigpe3I9c30sblszLWVdWzJdLmRpc2FibGUsblszLWVdWzNdLmRpc2FibGUsblswXVsyXS5sb2NrLG5bMF1bM10ubG9jayksYS5hZGQodFszXS5maXJlKSxvW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIG9bdFswXStcIldpdGhcIl0odGhpcz09PW8/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxvW3RbMF0rXCJXaXRoXCJdPWEuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9by5jYWxsKGFyZ3VtZW50cyksYT13LkRlZmVycmVkKCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1lbnRzLmxlbmd0aD4xP28uY2FsbChhcmd1bWVudHMpOm4sLS10fHxhLnJlc29sdmVXaXRoKHIsaSl9fTtpZih0PD0xJiYoJChlLGEuZG9uZShzKG4pKS5yZXNvbHZlLGEucmVqZWN0LCF0KSxcInBlbmRpbmdcIj09PWEuc3RhdGUoKXx8ZyhpW25dJiZpW25dLnRoZW4pKSlyZXR1cm4gYS50aGVuKCk7d2hpbGUobi0tKSQoaVtuXSxzKG4pLGEucmVqZWN0KTtyZXR1cm4gYS5wcm9taXNlKCl9fSk7dmFyIEI9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87dy5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKHQsbil7ZS5jb25zb2xlJiZlLmNvbnNvbGUud2FybiYmdCYmQi50ZXN0KHQubmFtZSkmJmUuY29uc29sZS53YXJuKFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIrdC5tZXNzYWdlLHQuc3RhY2ssbil9LHcucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24odCl7ZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfTt2YXIgRj13LkRlZmVycmVkKCk7dy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpW1wiY2F0Y2hcIl0oZnVuY3Rpb24oZSl7dy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LHcuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS13LnJlYWR5V2FpdDp3LmlzUmVhZHkpfHwody5pc1JlYWR5PSEwLCEwIT09ZSYmLS13LnJlYWR5V2FpdD4wfHxGLnJlc29sdmVXaXRoKHIsW3ddKSl9fSksdy5yZWFkeS50aGVuPUYudGhlbjtmdW5jdGlvbiBfKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLF8pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixfKSx3LnJlYWR5KCl9XCJjb21wbGV0ZVwiPT09ci5yZWFkeVN0YXRlfHxcImxvYWRpbmdcIiE9PXIucmVhZHlTdGF0ZSYmIXIuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Uuc2V0VGltZW91dCh3LnJlYWR5KTooci5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLF8pLGUuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixfKSk7dmFyIHo9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZihcIm9iamVjdFwiPT09eChuKSl7aT0hMDtmb3IocyBpbiBuKXooZSx0LHMsbltzXSwhMCxvLGEpfWVsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsZyhyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbCh3KGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LFg9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFYoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGUucmVwbGFjZShYLFwibXMtXCIpLnJlcGxhY2UoVSxWKX12YXIgWT1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9O2Z1bmN0aW9uIFEoKXt0aGlzLmV4cGFuZG89dy5leHBhbmRvK1EudWlkKyt9US51aWQ9MSxRLnByb3RvdHlwZT17Y2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVt0aGlzLmV4cGFuZG9dO3JldHVybiB0fHwodD17fSxZKGUpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFuZG8se3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5jYWNoZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpW0codCldPW47ZWxzZSBmb3IociBpbiB0KWlbRyhyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtHKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKEcpOih0PUcodCkpaW4gcj9bdF06dC5tYXRjaChNKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fHcuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIXcuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBKPW5ldyBRLEs9bmV3IFEsWj0vXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sZWU9L1tBLVpdL2c7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuXCJ0cnVlXCI9PT1lfHxcImZhbHNlXCIhPT1lJiYoXCJudWxsXCI9PT1lP251bGw6ZT09PStlK1wiXCI/K2U6Wi50ZXN0KGUpP0pTT04ucGFyc2UoZSk6ZSl9ZnVuY3Rpb24gbmUoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9XCJkYXRhLVwiK3QucmVwbGFjZShlZSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpLFwic3RyaW5nXCI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249dGUobil9Y2F0Y2goZSl7fUsuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufXcuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBLLmhhc0RhdGEoZSl8fEouaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEsuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0sucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSi5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9fSksdy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYoaT1LLmdldChvKSwxPT09by5ub2RlVHlwZSYmIUouZ2V0KG8sXCJoYXNEYXRhQXR0cnNcIikpKXtuPWEubGVuZ3RoO3doaWxlKG4tLSlhW25dJiYwPT09KHI9YVtuXS5uYW1lKS5pbmRleE9mKFwiZGF0YS1cIikmJihyPUcoci5zbGljZSg1KSksbmUobyxyLGlbcl0pKTtKLnNldChvLFwiaGFzRGF0YUF0dHJzXCIsITApfXJldHVybiBpfXJldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0suc2V0KHRoaXMsZSl9KTp6KHRoaXMsZnVuY3Rpb24odCl7dmFyIG47aWYobyYmdm9pZCAwPT09dCl7aWYodm9pZCAwIT09KG49Sy5nZXQobyxlKSkpcmV0dXJuIG47aWYodm9pZCAwIT09KG49bmUobyxlKSkpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXtLLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5yZW1vdmUodGhpcyxlKX0pfX0pLHcuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8XCJmeFwiKStcInF1ZXVlXCIscj1KLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPUouYWNjZXNzKGUsdCx3Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8XCJmeFwiO3ZhciBuPXcucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89dy5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXt3LmRlcXVldWUoZSx0KX07XCJpbnByb2dyZXNzXCI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoXCJmeFwiPT09dCYmbi51bnNoaWZ0KFwiaW5wcm9ncmVzc1wiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGEsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10K1wicXVldWVIb29rc1wiO3JldHVybiBKLmdldChlLG4pfHxKLmFjY2VzcyhlLG4se2VtcHR5OncuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCl7Si5yZW1vdmUoZSxbdCtcInF1ZXVlXCIsbl0pfSl9KX19KSx3LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlJiYodD1lLGU9XCJmeFwiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP3cucXVldWUodGhpc1swXSxlKTp2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dy5xdWV1ZSh0aGlzLGUsdCk7dy5fcXVldWVIb29rcyh0aGlzLGUpLFwiZnhcIj09PWUmJlwiaW5wcm9ncmVzc1wiIT09blswXSYmdy5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5kZXF1ZXVlKHRoaXMsZSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9dy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTtcInN0cmluZ1wiIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHxcImZ4XCI7d2hpbGUoYS0tKShuPUouZ2V0KG9bYV0sZStcInF1ZXVlSG9va3NcIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgcmU9L1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLGllPW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK3JlK1wiKShbYS16JV0qKSRcIixcImlcIiksb2U9W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGFlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJub25lXCI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHxcIlwiPT09ZS5zdHlsZS5kaXNwbGF5JiZ3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKSYmXCJub25lXCI9PT13LmNzcyhlLFwiZGlzcGxheVwiKX0sc2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9O2Z1bmN0aW9uIHVlKGUsdCxuLHIpe3ZhciBpLG8sYT0yMCxzPXI/ZnVuY3Rpb24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gdy5jc3MoZSx0LFwiXCIpfSx1PXMoKSxsPW4mJm5bM118fCh3LmNzc051bWJlclt0XT9cIlwiOlwicHhcIiksYz0ody5jc3NOdW1iZXJbdF18fFwicHhcIiE9PWwmJit1KSYmaWUuZXhlYyh3LmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pdy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLHcuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgbGU9e307ZnVuY3Rpb24gY2UoZSl7dmFyIHQsbj1lLm93bmVyRG9jdW1lbnQscj1lLm5vZGVOYW1lLGk9bGVbcl07cmV0dXJuIGl8fCh0PW4uYm9keS5hcHBlbmRDaGlsZChuLmNyZWF0ZUVsZW1lbnQocikpLGk9dy5jc3ModCxcImRpc3BsYXlcIiksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLFwibm9uZVwiPT09aSYmKGk9XCJibG9ja1wiKSxsZVtyXT1pLGkpfWZ1bmN0aW9uIGZlKGUsdCl7Zm9yKHZhciBuLHIsaT1bXSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKShyPWVbb10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oXCJub25lXCI9PT1uJiYoaVtvXT1KLmdldChyLFwiZGlzcGxheVwiKXx8bnVsbCxpW29dfHwoci5zdHlsZS5kaXNwbGF5PVwiXCIpKSxcIlwiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGlbb109Y2UocikpKTpcIm5vbmVcIiE9PW4mJihpW29dPVwibm9uZVwiLEouc2V0KHIsXCJkaXNwbGF5XCIsbikpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKTtyZXR1cm4gZX13LmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP3codGhpcykuc2hvdygpOncodGhpcykuaGlkZSgpfSl9fSk7dmFyIHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaSxoZT0vXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLGdlPXtvcHRpb246WzEsXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsXCI8L3NlbGVjdD5cIl0sdGhlYWQ6WzEsXCI8dGFibGU+XCIsXCI8L3RhYmxlPlwiXSxjb2w6WzIsXCI8dGFibGU+PGNvbGdyb3VwPlwiLFwiPC9jb2xncm91cD48L3RhYmxlPlwiXSx0cjpbMixcIjx0YWJsZT48dGJvZHk+XCIsXCI8L3Rib2R5PjwvdGFibGU+XCJdLHRkOlszLFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sX2RlZmF1bHQ6WzAsXCJcIixcIlwiXX07Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7ZnVuY3Rpb24geWUoZSx0KXt2YXIgbjtyZXR1cm4gbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fFwiKlwiKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHxcIipcIik6W10sdm9pZCAwPT09dHx8dCYmTihlLHQpP3cubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspSi5zZXQoZVtuXSxcImdsb2JhbEV2YWxcIiwhdHx8Si5nZXQodFtuXSxcImdsb2JhbEV2YWxcIikpfXZhciBtZT0vPHwmIz9cXHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZihcIm9iamVjdFwiPT09eChvKSl3Lm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxzPShkZS5leGVjKG8pfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK3cuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDt3Lm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD1cIlwiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiZ3LmluQXJyYXkobyxyKT4tMSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPXcuY29udGFpbnMoby5vd25lckRvY3VtZW50LG8pLGE9eWUoZi5hcHBlbmRDaGlsZChvKSxcInNjcmlwdFwiKSxsJiZ2ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fFwiXCIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9IWZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx0PXIuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3Quc2V0QXR0cmlidXRlKFwidHlwZVwiLFwicmFkaW9cIiksdC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpLHQuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwidFwiKSxlLmFwcGVuZENoaWxkKHQpLGguY2hlY2tDbG9uZT1lLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxlLmlubmVySFRNTD1cIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIixoLm5vQ2xvbmVDaGVja2VkPSEhZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGJlPXIuZG9jdW1lbnRFbGVtZW50LHdlPS9ea2V5LyxUZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sQ2U9L14oW14uXSopKD86XFwuKC4rKXwpLztmdW5jdGlvbiBFZSgpe3JldHVybiEwfWZ1bmN0aW9uIGtlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoKXt0cnl7cmV0dXJuIHIuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIERlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtcInN0cmluZ1wiIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCk7Zm9yKHMgaW4gdClEZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJihcInN0cmluZ1wiPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPWtlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiB3KCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9dy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9dy5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcseT1KLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJlLGkpLG4uZ3VpZHx8KG4uZ3VpZD13Lmd1aWQrKyksKHU9eS5ldmVudHMpfHwodT15LmV2ZW50cz17fSksKGE9eS5oYW5kbGUpfHwoYT15LmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgdyYmdy5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/dy5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSksbD0odD0odHx8XCJcIikubWF0Y2goTSl8fFtcIlwiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9Q2UuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksZCYmKGY9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPXcuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJncuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKFwiLlwiKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwoZSxyLGgsYSl8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSx3LmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHk9Si5oYXNEYXRhKGUpJiZKLmdldChlKTtpZih5JiYodT15LmV2ZW50cykpe2w9KHQ9KHR8fFwiXCIpLm1hdGNoKE0pfHxbXCJcIl0pLmxlbmd0aDt3aGlsZShsLS0paWYocz1DZS5leGVjKHRbbF0pfHxbXSxkPWc9c1sxXSxoPShzWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLGQpe2Y9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXVbZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK2guam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJihcIioqXCIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx5LmhhbmRsZSl8fHcucmVtb3ZlRXZlbnQoZSxkLHkuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KXcuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7dy5pc0VtcHR5T2JqZWN0KHUpJiZKLnJlbW92ZShlLFwiaGFuZGxlIGV2ZW50c1wiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PXcuZXZlbnQuZml4KGUpLG4scixpLG8sYSxzLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KEouZ2V0KHRoaXMsXCJldmVudHNcIil8fHt9KVt0LnR5cGVdfHxbXSxjPXcuZXZlbnQuc3BlY2lhbFt0LnR5cGVdfHx7fTtmb3IodVswXT10LG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXVbbl09YXJndW1lbnRzW25dO2lmKHQuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyx0KSl7cz13LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyx0LGwpLG49MDt3aGlsZSgobz1zW24rK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXt0LmN1cnJlbnRUYXJnZXQ9by5lbGVtLHI9MDt3aGlsZSgoYT1vLmhhbmRsZXJzW3IrK10pJiYhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKXQucm5hbWVzcGFjZSYmIXQucm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKXx8KHQuaGFuZGxlT2JqPWEsdC5kYXRhPWEuZGF0YSx2b2lkIDAhPT0oaT0oKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8YS5oYW5kbGVyKS5hcHBseShvLmVsZW0sdSkpJiYhMT09PSh0LnJlc3VsdD1pKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsdCksdC5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscz1bXSx1PXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0O2lmKHUmJmwubm9kZVR5cGUmJiEoXCJjbGlja1wiPT09ZS50eXBlJiZlLmJ1dHRvbj49MSkpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKFwiY2xpY2tcIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrXCIgXCJdJiYoYVtpXT1yLm5lZWRzQ29udGV4dD93KGksdGhpcykuaW5kZXgobCk+LTE6dy5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlzLHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQcm9wOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpnKHQpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbZV19LHNldDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSl9LGZpeDpmdW5jdGlvbihlKXtyZXR1cm4gZVt3LmV4cGFuZG9dP2U6bmV3IHcuRXZlbnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1TZSgpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT1TZSgpJiZ0aGlzLmJsdXIpcmV0dXJuIHRoaXMuYmx1cigpLCExfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKFwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmTih0aGlzLFwiaW5wdXRcIikpcmV0dXJuIHRoaXMuY2xpY2soKSwhMX0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZS50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LHcucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LHcuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB3LkV2ZW50KSlyZXR1cm4gbmV3IHcuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9FZTprZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZ3LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbdy5leHBhbmRvXT0hMH0sdy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmtlLGlzUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1FZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sdy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLFwiY2hhclwiOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnV0dG9uO3JldHVybiBudWxsPT1lLndoaWNoJiZ3ZS50ZXN0KGUudHlwZSk/bnVsbCE9ZS5jaGFyQ29kZT9lLmNoYXJDb2RlOmUua2V5Q29kZTohZS53aGljaCYmdm9pZCAwIT09dCYmVGUudGVzdChlLnR5cGUpPzEmdD8xOjImdD8zOjQmdD8yOjA6ZS53aGljaH19LHcuZXZlbnQuYWRkUHJvcCksdy5lYWNoKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwicG9pbnRlcm92ZXJcIixwb2ludGVybGVhdmU6XCJwb2ludGVyb3V0XCJ9LGZ1bmN0aW9uKGUsdCl7dy5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4gaSYmKGk9PT1yfHx3LmNvbnRhaW5zKHIsaSkpfHwoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx3LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIERlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRGUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosdyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZStcIi5cIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49a2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLEFlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGplPS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2kscWU9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO2Z1bmN0aW9uIExlKGUsdCl7cmV0dXJuIE4oZSxcInRhYmxlXCIpJiZOKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCxcInRyXCIpP3coZSkuY2hpbGRyZW4oXCJ0Ym9keVwiKVswXXx8ZTplfWZ1bmN0aW9uIEhlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2UudHlwZSxlfWZ1bmN0aW9uIE9lKGUpe3JldHVyblwidHJ1ZS9cIj09PShlLnR5cGV8fFwiXCIpLnNsaWNlKDAsNSk/ZS50eXBlPWUudHlwZS5zbGljZSg1KTplLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksZX1mdW5jdGlvbiBQZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKEouaGFzRGF0YShlKSYmKG89Si5hY2Nlc3MoZSksYT1KLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e307Zm9yKGkgaW4gbClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7bjxyO24rKyl3LmV2ZW50LmFkZCh0LGksbFtpXVtuXSl9Sy5oYXNEYXRhKGUpJiYocz1LLmFjY2VzcyhlKSx1PXcuZXh0ZW5kKHt9LHMpLEsuc2V0KHQsdSkpfX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1uJiZwZS50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDpcImlucHV0XCIhPT1uJiZcInRleHRhcmVhXCIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIFJlKGUsdCxuLHIpe3Q9YS5hcHBseShbXSx0KTt2YXIgaSxvLHMsdSxsLGMsZj0wLHA9ZS5sZW5ndGgsZD1wLTEseT10WzBdLHY9Zyh5KTtpZih2fHxwPjEmJlwic3RyaW5nXCI9PXR5cGVvZiB5JiYhaC5jaGVja0Nsb25lJiZqZS50ZXN0KHkpKXJldHVybiBlLmVhY2goZnVuY3Rpb24oaSl7dmFyIG89ZS5lcShpKTt2JiYodFswXT15LmNhbGwodGhpcyxpLG8uaHRtbCgpKSksUmUobyx0LG4scil9KTtpZihwJiYoaT14ZSh0LGVbMF0ub3duZXJEb2N1bWVudCwhMSxlLHIpLG89aS5maXJzdENoaWxkLDE9PT1pLmNoaWxkTm9kZXMubGVuZ3RoJiYoaT1vKSxvfHxyKSl7Zm9yKHU9KHM9dy5tYXAoeWUoaSxcInNjcmlwdFwiKSxIZSkpLmxlbmd0aDtmPHA7ZisrKWw9aSxmIT09ZCYmKGw9dy5jbG9uZShsLCEwLCEwKSx1JiZ3Lm1lcmdlKHMseWUobCxcInNjcmlwdFwiKSkpLG4uY2FsbChlW2ZdLGwsZik7aWYodSlmb3IoYz1zW3MubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsdy5tYXAocyxPZSksZj0wO2Y8dTtmKyspbD1zW2ZdLGhlLnRlc3QobC50eXBlfHxcIlwiKSYmIUouYWNjZXNzKGwsXCJnbG9iYWxFdmFsXCIpJiZ3LmNvbnRhaW5zKGMsbCkmJihsLnNyYyYmXCJtb2R1bGVcIiE9PShsLnR5cGV8fFwiXCIpLnRvTG93ZXJDYXNlKCk/dy5fZXZhbFVybCYmdy5fZXZhbFVybChsLnNyYyk6bShsLnRleHRDb250ZW50LnJlcGxhY2UocWUsXCJcIiksYyxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24gSWUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/dy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fHcuY2xlYW5EYXRhKHllKHIpKSxyLnBhcmVudE5vZGUmJihuJiZ3LmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKSYmdmUoeWUocixcInNjcmlwdFwiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX13LmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKE5lLFwiPCQxPjwvJDI+XCIpfSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNsb25lTm9kZSghMCksdT13LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZighKGgubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHcuaXNYTUxEb2MoZSkpKWZvcihhPXllKHMpLHI9MCxpPShvPXllKGUpKS5sZW5ndGg7cjxpO3IrKylNZShvW3JdLGFbcl0pO2lmKHQpaWYobilmb3Iobz1vfHx5ZShlKSxhPWF8fHllKHMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspUGUob1tyXSxhW3JdKTtlbHNlIFBlKGUscyk7cmV0dXJuKGE9eWUocyxcInNjcmlwdFwiKSkubGVuZ3RoPjAmJnZlKGEsIXUmJnllKGUsXCJzY3JpcHRcIikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9dy5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoWShuKSl7aWYodD1uW0ouZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/dy5ldmVudC5yZW1vdmUobixyKTp3LnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltKLmV4cGFuZG9dPXZvaWQgMH1uW0suZXhwYW5kb10mJihuW0suZXhwYW5kb109dm9pZCAwKX19fSksdy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gSWUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxMZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PUxlKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKGUsITEpKSxlLnRleHRDb250ZW50PVwiXCIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB3LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhQWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9dy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTt3LmluQXJyYXkodGhpcyxlKTwwJiYody5jbGVhbkRhdGEoeWUodGhpcykpLG4mJm4ucmVwbGFjZUNoaWxkKHQsdGhpcykpfSxlKX19KSx3LmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9dyhlKSxvPWkubGVuZ3RoLTEsYT0wO2E8PW87YSsrKW49YT09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx3KGlbYV0pW3RdKG4pLHMuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyIFdlPW5ldyBSZWdFeHAoXCJeKFwiK3JlK1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLCRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gbiYmbi5vcGVuZXJ8fChuPWUpLG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sQmU9bmV3IFJlZ0V4cChvZS5qb2luKFwifFwiKSxcImlcIik7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2lmKGMpe2wuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIixjLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElXCIsYmUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7dmFyIHQ9ZS5nZXRDb21wdXRlZFN0eWxlKGMpO2k9XCIxJVwiIT09dC50b3AsdT0xMj09PW4odC5tYXJnaW5MZWZ0KSxjLnN0eWxlLnJpZ2h0PVwiNjAlXCIscz0zNj09PW4odC5yaWdodCksbz0zNj09PW4odC53aWR0aCksYy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsYT0zNj09PWMub2Zmc2V0V2lkdGh8fFwiYWJzb2x1dGVcIixiZS5yZW1vdmVDaGlsZChsKSxjPW51bGx9fWZ1bmN0aW9uIG4oZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIGksbyxhLHMsdSxsPXIuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjPXIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLnN0eWxlJiYoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsYy5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsaC5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09Yy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx3LmV4dGVuZChoLHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiB0KCksb30scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHN9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGl9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiB0KCksdX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0KCksYX19KSl9KCk7ZnVuY3Rpb24gRmUoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHwkZShlKSkmJihcIlwiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8dy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXcuc3R5bGUoZSx0KSksIWgucGl4ZWxCb3hTdHlsZXMoKSYmV2UudGVzdChhKSYmQmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hK1wiXCI6YX1mdW5jdGlvbiBfZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19dmFyIHplPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxYZT0vXi0tLyxVZT17cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixkaXNwbGF5OlwiYmxvY2tcIn0sVmU9e2xldHRlclNwYWNpbmc6XCIwXCIsZm9udFdlaWdodDpcIjQwMFwifSxHZT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0sWWU9ci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlO2Z1bmN0aW9uIFFlKGUpe2lmKGUgaW4gWWUpcmV0dXJuIGU7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1HZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUdlW25dK3QpaW4gWWUpcmV0dXJuIGV9ZnVuY3Rpb24gSmUoZSl7dmFyIHQ9dy5jc3NQcm9wc1tlXTtyZXR1cm4gdHx8KHQ9dy5jc3NQcm9wc1tlXT1RZShlKXx8ZSksdH1mdW5jdGlvbiBLZShlLHQsbil7dmFyIHI9aWUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8XCJweFwiKTp0fWZ1bmN0aW9uIFplKGUsdCxuLHIsaSxvKXt2YXIgYT1cIndpZHRoXCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj9cImJvcmRlclwiOlwiY29udGVudFwiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKVwibWFyZ2luXCI9PT1uJiYodSs9dy5jc3MoZSxuK29lW2FdLCEwLGkpKSxyPyhcImNvbnRlbnRcIj09PW4mJih1LT13LmNzcyhlLFwicGFkZGluZ1wiK29lW2FdLCEwLGkpKSxcIm1hcmdpblwiIT09biYmKHUtPXcuY3NzKGUsXCJib3JkZXJcIitvZVthXStcIldpZHRoXCIsITAsaSkpKToodSs9dy5jc3MoZSxcInBhZGRpbmdcIitvZVthXSwhMCxpKSxcInBhZGRpbmdcIiE9PW4/dSs9dy5jc3MoZSxcImJvcmRlclwiK29lW2FdK1wiV2lkdGhcIiwhMCxpKTpzKz13LmNzcyhlLFwiYm9yZGVyXCIrb2VbYV0rXCJXaWR0aFwiLCEwLGkpKTtyZXR1cm4hciYmbz49MCYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKSksdX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9JGUoZSksaT1GZShlLHQsciksbz1cImJvcmRlci1ib3hcIj09PXcuY3NzKGUsXCJib3hTaXppbmdcIiwhMSxyKSxhPW87aWYoV2UudGVzdChpKSl7aWYoIW4pcmV0dXJuIGk7aT1cImF1dG9cIn1yZXR1cm4gYT1hJiYoaC5ib3hTaXppbmdSZWxpYWJsZSgpfHxpPT09ZS5zdHlsZVt0XSksKFwiYXV0b1wiPT09aXx8IXBhcnNlRmxvYXQoaSkmJlwiaW5saW5lXCI9PT13LmNzcyhlLFwiZGlzcGxheVwiLCExLHIpKSYmKGk9ZVtcIm9mZnNldFwiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSxhPSEwKSwoaT1wYXJzZUZsb2F0KGkpfHwwKStaZShlLHQsbnx8KG8/XCJib3JkZXJcIjpcImNvbnRlbnRcIiksYSxyLGkpK1wicHhcIn13LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUZlKGUsXCJvcGFjaXR5XCIpO3JldHVyblwiXCI9PT1uP1wiMVwiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1HKHQpLHU9WGUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9SmUocykpLGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiZcImdldFwiaW4gYSYmdm9pZCAwIT09KGk9YS5nZXQoZSwhMSxyKSk/aTpsW3RdO1wic3RyaW5nXCI9PShvPXR5cGVvZiBuKSYmKGk9aWUuZXhlYyhuKSkmJmlbMV0mJihuPXVlKGUsdCxpKSxvPVwibnVtYmVyXCIpLG51bGwhPW4mJm49PT1uJiYoXCJudW1iZXJcIj09PW8mJihuKz1pJiZpWzNdfHwody5jc3NOdW1iZXJbc10/XCJcIjpcInB4XCIpKSxoLmNsZWFyQ2xvbmVTdHlsZXx8XCJcIiE9PW58fDAhPT10LmluZGV4T2YoXCJiYWNrZ3JvdW5kXCIpfHwobFt0XT1cImluaGVyaXRcIiksYSYmXCJzZXRcImluIGEmJnZvaWQgMD09PShuPWEuc2V0KGUsbixyKSl8fCh1P2wuc2V0UHJvcGVydHkodCxuKTpsW3RdPW4pKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1HKHQpO3JldHVybiBYZS50ZXN0KHQpfHwodD1KZShzKSksKGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSkmJlwiZ2V0XCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1GZShlLHQscikpLFwibm9ybWFsXCI9PT1pJiZ0IGluIFZlJiYoaT1WZVt0XSksXCJcIj09PW58fG4/KG89cGFyc2VGbG9hdChpKSwhMD09PW58fGlzRmluaXRlKG8pP298fDA6aSk6aX19KSx3LmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hemUudGVzdCh3LmNzcyhlLFwiZGlzcGxheVwiKSl8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/ZXQoZSx0LHIpOnNlKGUsVWUsZnVuY3Rpb24oKXtyZXR1cm4gZXQoZSx0LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz0kZShlKSxhPVwiYm9yZGVyLWJveFwiPT09dy5jc3MoZSxcImJveFNpemluZ1wiLCExLG8pLHM9ciYmWmUoZSx0LHIsYSxvKTtyZXR1cm4gYSYmaC5zY3JvbGxib3hTaXplKCk9PT1vLnBvc2l0aW9uJiYocy09TWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tcGFyc2VGbG9hdChvW3RdKS1aZShlLHQsXCJib3JkZXJcIiwhMSxvKS0uNSkpLHMmJihpPWllLmV4ZWMobikpJiZcInB4XCIhPT0oaVszXXx8XCJweFwiKSYmKGUuc3R5bGVbdF09bixuPXcuY3NzKGUsdCkpLEtlKGUsbixzKX19fSksdy5jc3NIb29rcy5tYXJnaW5MZWZ0PV9lKGgucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChGZShlLFwibWFyZ2luTGVmdFwiKSl8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1zZShlLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKStcInB4XCJ9KSx3LmVhY2goe21hcmdpbjpcIlwiLHBhZGRpbmc6XCJcIixib3JkZXI6XCJXaWR0aFwifSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wLGk9e30sbz1cInN0cmluZ1wiPT10eXBlb2Ygbj9uLnNwbGl0KFwiIFwiKTpbbl07cjw0O3IrKylpW2Urb2Vbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sXCJtYXJnaW5cIiE9PWUmJih3LmNzc0hvb2tzW2UrdF0uc2V0PUtlKX0pLHcuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPSRlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPXcuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj93LnN0eWxlKGUsdCxuKTp3LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KTtmdW5jdGlvbiB0dChlLHQsbixyLGkpe3JldHVybiBuZXcgdHQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX13LlR3ZWVuPXR0LHR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8dy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh3LmNzc051bWJlcltuXT9cIlwiOlwicHhcIil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPXR0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTp0dC5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj10dC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9dy5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOnR0LnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LHR0LnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT10dC5wcm90b3R5cGUsdHQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9dy5jc3MoZS5lbGVtLGUucHJvcCxcIlwiKSkmJlwiYXV0b1wiIT09dD90OjB9LHNldDpmdW5jdGlvbihlKXt3LmZ4LnN0ZXBbZS5wcm9wXT93LmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsPT1lLmVsZW0uc3R5bGVbdy5jc3NQcm9wc1tlLnByb3BdXSYmIXcuY3NzSG9va3NbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzp3LnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSx0dC5wcm9wSG9va3Muc2Nyb2xsVG9wPXR0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LHcuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6XCJzd2luZ1wifSx3LmZ4PXR0LnByb3RvdHlwZS5pbml0LHcuZnguc3RlcD17fTt2YXIgbnQscnQsaXQ9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLG90PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gYXQoKXtydCYmKCExPT09ci5oaWRkZW4mJmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lP2UucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGF0KTplLnNldFRpbWVvdXQoYXQsdy5meC5pbnRlcnZhbCksdy5meC50aWNrKCkpfWZ1bmN0aW9uIHN0KCl7cmV0dXJuIGUuc2V0VGltZW91dChmdW5jdGlvbigpe250PXZvaWQgMH0pLG50PURhdGUubm93KCl9ZnVuY3Rpb24gdXQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVtcIm1hcmdpblwiKyhuPW9lW3JdKV09aVtcInBhZGRpbmdcIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBsdChlLHQsbil7Zm9yKHZhciByLGk9KHB0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KHB0LnR3ZWVuZXJzW1wiKlwiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gY3QoZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj1cIndpZHRoXCJpbiB0fHxcImhlaWdodFwiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx5PUouZ2V0KGUsXCJmeHNob3dcIik7bi5xdWV1ZXx8KG51bGw9PShhPXcuX3F1ZXVlSG9va3MoZSxcImZ4XCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxzPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxzKCl9KSxhLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx3LnF1ZXVlKGUsXCJmeFwiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0saXQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHxcInRvZ2dsZVwiPT09aSxpPT09KGc/XCJoaWRlXCI6XCJzaG93XCIpKXtpZihcInNob3dcIiE9PWl8fCF5fHx2b2lkIDA9PT15W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT15JiZ5W3JdfHx3LnN0eWxlKGUscil9aWYoKHU9IXcuaXNFbXB0eU9iamVjdCh0KSl8fCF3LmlzRW1wdHlPYmplY3QoZCkpe2YmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9eSYmeS5kaXNwbGF5KSYmKGw9Si5nZXQoZSxcImRpc3BsYXlcIikpLFwibm9uZVwiPT09KGM9dy5jc3MoZSxcImRpc3BsYXlcIikpJiYobD9jPWw6KGZlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz13LmNzcyhlLFwiZGlzcGxheVwiKSxmZShbZV0pKSksKFwiaW5saW5lXCI9PT1jfHxcImlubGluZS1ibG9ja1wiPT09YyYmbnVsbCE9bCkmJlwibm9uZVwiPT09dy5jc3MoZSxcImZsb2F0XCIpJiYodXx8KHAuZG9uZShmdW5jdGlvbigpe2guZGlzcGxheT1sfSksbnVsbD09bCYmKGM9aC5kaXNwbGF5LGw9XCJub25lXCI9PT1jP1wiXCI6YykpLGguZGlzcGxheT1cImlubGluZS1ibG9ja1wiKSksbi5vdmVyZmxvdyYmKGgub3ZlcmZsb3c9XCJoaWRkZW5cIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMTtmb3IociBpbiBkKXV8fCh5P1wiaGlkZGVuXCJpbiB5JiYoZz15LmhpZGRlbik6eT1KLmFjY2VzcyhlLFwiZnhzaG93XCIse2Rpc3BsYXk6bH0pLG8mJih5LmhpZGRlbj0hZyksZyYmZmUoW2VdLCEwKSxwLmRvbmUoZnVuY3Rpb24oKXtnfHxmZShbZV0pLEoucmVtb3ZlKGUsXCJmeHNob3dcIik7Zm9yKHIgaW4gZCl3LnN0eWxlKGUscixkW3JdKX0pKSx1PWx0KGc/eVtyXTowLHIscCksciBpbiB5fHwoeVtyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfX1mdW5jdGlvbiBmdChlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPUcobiksaT10W3JdLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKGE9dy5jc3NIb29rc1tyXSkmJlwiZXhwYW5kXCJpbiBhKXtvPWEuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByLGksbz0wLGE9cHQucHJlZmlsdGVycy5sZW5ndGgscz13LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO2Zvcih2YXIgdD1udHx8c3QoKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPTEtKG4vbC5kdXJhdGlvbnx8MCksbz0wLGE9bC50d2VlbnMubGVuZ3RoO288YTtvKyspbC50d2VlbnNbb10ucnVuKHIpO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbbCxyLG5dKSxyPDEmJmE/bjooYXx8cy5ub3RpZnlXaXRoKGUsW2wsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOncuZXh0ZW5kKHt9LHQpLG9wdHM6dy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOncuZWFzaW5nLl9kZWZhdWx0fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6bnR8fHN0KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj13LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO248cjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0PyhzLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2wsdF0pKTpzLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKGZ0KGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288YTtvKyspaWYocj1wdC5wcmVmaWx0ZXJzW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gZyhyLnN0b3ApJiYody5fcXVldWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPXIuc3RvcC5iaW5kKHIpKSxyO3JldHVybiB3Lm1hcChjLGx0LGwpLGcobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSx3LmZ4LnRpbWVyKHcuZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9dy5BbmltYXRpb249dy5leHRlbmQocHQse3R3ZWVuZXJzOntcIipcIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHVlKG4uZWxlbSxlLGllLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7ZyhlKT8odD1lLGU9W1wiKlwiXSk6ZT1lLm1hdGNoKE0pO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxwdC50d2VlbmVyc1tuXT1wdC50d2VlbmVyc1tuXXx8W10scHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbY3RdLHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/cHQucHJlZmlsdGVycy51bnNoaWZ0KGUpOnB0LnByZWZpbHRlcnMucHVzaChlKX19KSx3LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiZcIm9iamVjdFwiPT10eXBlb2YgZT93LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGcoZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWcodCkmJnR9O3JldHVybiB3LmZ4Lm9mZj9yLmR1cmF0aW9uPTA6XCJudW1iZXJcIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIHcuZnguc3BlZWRzP3IuZHVyYXRpb249dy5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj13LmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT1cImZ4XCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe2coci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJncuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx3LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihhZSkuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT13LmlzRW1wdHlPYmplY3QoZSksbz13LnNwZWVkKHQsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIHQ9cHQodGhpcyx3LmV4dGVuZCh7fSxlKSxvKTsoaXx8Si5nZXQodGhpcyxcImZpbmlzaFwiKSkmJnQuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKG49dCx0PWUsZT12b2lkIDApLHQmJiExIT09ZSYmdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZStcInF1ZXVlSG9va3NcIixvPXcudGltZXJzLGE9Si5nZXQodGhpcyk7aWYoaSlhW2ldJiZhW2ldLnN0b3AmJnIoYVtpXSk7ZWxzZSBmb3IoaSBpbiBhKWFbaV0mJmFbaV0uc3RvcCYmb3QudGVzdChpKSYmcihhW2ldKTtmb3IoaT1vLmxlbmd0aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tpXS5hbmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTshdCYmbnx8dy5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8XCJmeFwiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPUouZ2V0KHRoaXMpLHI9bltlK1wicXVldWVcIl0saT1uW2UrXCJxdWV1ZUhvb2tzXCJdLG89dy50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHcucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3Q8YTt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSksdy5lYWNoKFtcInRvZ2dsZVwiLFwic2hvd1wiLFwiaGlkZVwiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXcuZm5bdF07dy5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fFwiYm9vbGVhblwiPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUodXQodCwhMCksZSxyLGkpfX0pLHcuZWFjaCh7c2xpZGVEb3duOnV0KFwic2hvd1wiKSxzbGlkZVVwOnV0KFwiaGlkZVwiKSxzbGlkZVRvZ2dsZTp1dChcInRvZ2dsZVwiKSxmYWRlSW46e29wYWNpdHk6XCJzaG93XCJ9LGZhZGVPdXQ6e29wYWNpdHk6XCJoaWRlXCJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6XCJ0b2dnbGVcIn19LGZ1bmN0aW9uKGUsdCl7dy5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx3LnRpbWVycz1bXSx3LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj13LnRpbWVycztmb3IobnQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHx3LmZ4LnN0b3AoKSxudD12b2lkIDB9LHcuZngudGltZXI9ZnVuY3Rpb24oZSl7dy50aW1lcnMucHVzaChlKSx3LmZ4LnN0YXJ0KCl9LHcuZnguaW50ZXJ2YWw9MTMsdy5meC5zdGFydD1mdW5jdGlvbigpe3J0fHwocnQ9ITAsYXQoKSl9LHcuZnguc3RvcD1mdW5jdGlvbigpe3J0PW51bGx9LHcuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHcuZm4uZGVsYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD13LmZ4P3cuZnguc3BlZWRzW3RdfHx0OnQsbj1ufHxcImZ4XCIsdGhpcy5xdWV1ZShuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5zZXRUaW1lb3V0KG4sdCk7ci5zdG9wPWZ1bmN0aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksdD1yLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIikuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKTtlLnR5cGU9XCJjaGVja2JveFwiLGguY2hlY2tPbj1cIlwiIT09ZS52YWx1ZSxoLm9wdFNlbGVjdGVkPXQuc2VsZWN0ZWQsKGU9ci5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikpLnZhbHVlPVwidFwiLGUudHlwZT1cInJhZGlvXCIsaC5yYWRpb1ZhbHVlPVwidFwiPT09ZS52YWx1ZX0oKTt2YXIgZHQsaHQ9dy5leHByLmF0dHJIYW5kbGU7dy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/dy5wcm9wKGUsdCxuKTooMT09PW8mJncuaXNYTUxEb2MoZSl8fChpPXcuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fCh3LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP2R0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCB3LnJlbW92ZUF0dHIoZSx0KTppJiZcInNldFwiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rXCJcIiksbik6aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPXcuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZighaC5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT10JiZOKGUsXCJpbnB1dFwiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goTSk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksZHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P3cucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LHcuZWFjaCh3LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1xcdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj1odFt0XXx8dy5maW5kLmF0dHI7aHRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChvPWh0W2FdLGh0W2FdPWksaT1udWxsIT1uKGUsdCxyKT9hOm51bGwsaHRbYV09byksaX19KTt2YXIgZ3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7dy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdfHxlXX0pfX0pLHcuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmdy5pc1hNTERvYyhlKXx8KHQ9dy5wcm9wRml4W3RdfHx0LGk9dy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmXCJzZXRcImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD13LmZpbmQuYXR0cihlLFwidGFiaW5kZXhcIik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6Z3QudGVzdChlLm5vZGVOYW1lKXx8eXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7XCJmb3JcIjpcImh0bWxGb3JcIixcImNsYXNzXCI6XCJjbGFzc05hbWVcIn19KSxoLm9wdFNlbGVjdGVkfHwody5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiYodC5zZWxlY3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLHcuZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXt3LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7ZnVuY3Rpb24gdnQoZSl7cmV0dXJuKGUubWF0Y2goTSl8fFtdKS5qb2luKFwiIFwiKX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZT9lLm1hdGNoKE0pfHxbXTpbXX13LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdT0wO2lmKGcoZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsbXQodGhpcykpKX0pO2lmKCh0PXh0KGUpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1tdChuKSxyPTE9PT1uLm5vZGVUeXBlJiZcIiBcIit2dChpKStcIiBcIil7YT0wO3doaWxlKG89dFthKytdKXIuaW5kZXhPZihcIiBcIitvK1wiIFwiKTwwJiYocis9bytcIiBcIik7aSE9PShzPXZ0KHIpKSYmbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1PTA7aWYoZyhlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCxtdCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsXCJcIik7aWYoKHQ9eHQoZSkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPW10KG4pLHI9MT09PW4ubm9kZVR5cGUmJlwiIFwiK3Z0KGkpK1wiIFwiKXthPTA7d2hpbGUobz10W2ErK10pd2hpbGUoci5pbmRleE9mKFwiIFwiK28rXCIgXCIpPi0xKXI9ci5yZXBsYWNlKFwiIFwiK28rXCIgXCIsXCIgXCIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPVwic3RyaW5nXCI9PT1ufHxBcnJheS5pc0FycmF5KGUpO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdCYmcj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTpnKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sbXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpLG8sYTtpZihyKXtpPTAsbz13KHRoaXMpLGE9eHQoZSk7d2hpbGUodD1hW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZSB2b2lkIDAhPT1lJiZcImJvb2xlYW5cIiE9PW58fCgodD1tdCh0aGlzKSkmJkouc2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIsdCksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIix0fHwhMT09PWU/XCJcIjpKLmdldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiKXx8XCJcIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9XCIgXCIrZStcIiBcIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmKFwiIFwiK3Z0KG10KG4pKStcIiBcIikuaW5kZXhPZih0KT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgYnQ9L1xcci9nO3cuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1nKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PShpPXI/ZS5jYWxsKHRoaXMsbix3KHRoaXMpLnZhbCgpKTplKT9pPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGk/aSs9XCJcIjpBcnJheS5pc0FycmF5KGkpJiYoaT13Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1wiXCI6ZStcIlwifSkpLCh0PXcudmFsSG9va3NbdGhpcy50eXBlXXx8dy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJzZXRcImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSxcInZhbHVlXCIpfHwodGhpcy52YWx1ZT1pKSl9KTtpZihpKXJldHVybih0PXcudmFsSG9va3NbaS50eXBlXXx8dy52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJnZXRcImluIHQmJnZvaWQgMCE9PShuPXQuZ2V0KGksXCJ2YWx1ZVwiKSk/bjpcInN0cmluZ1wiPT10eXBlb2Yobj1pLnZhbHVlKT9uLnJlcGxhY2UoYnQsXCJcIik6bnVsbD09bj9cIlwiOm59fX0pLHcuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5maW5kLmF0dHIoZSxcInZhbHVlXCIpO3JldHVybiBudWxsIT10P3Q6dnQody50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPVwic2VsZWN0LW9uZVwiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhTihuLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKHQ9dyhuKS52YWwoKSxhKXJldHVybiB0O3MucHVzaCh0KX1yZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXcubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKSgocj1pW2FdKS5zZWxlY3RlZD13LmluQXJyYXkody52YWxIb29rcy5vcHRpb24uZ2V0KHIpLG8pPi0xKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksdy5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe3cudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD13LmluQXJyYXkodyhlKS52YWwoKSx0KT4tMX19LGguY2hlY2tPbnx8KHcudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKT9cIm9uXCI6ZS52YWx1ZX0pfSksaC5mb2N1c2luPVwib25mb2N1c2luXCJpbiBlO3ZhciB3dD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sVHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07dy5leHRlbmQody5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbih0LG4saSxvKXt2YXIgYSxzLHUsbCxjLHAsZCxoLHY9W2l8fHJdLG09Zi5jYWxsKHQsXCJ0eXBlXCIpP3QudHlwZTp0LHg9Zi5jYWxsKHQsXCJuYW1lc3BhY2VcIik/dC5uYW1lc3BhY2Uuc3BsaXQoXCIuXCIpOltdO2lmKHM9aD11PWk9aXx8ciwzIT09aS5ub2RlVHlwZSYmOCE9PWkubm9kZVR5cGUmJiF3dC50ZXN0KG0rdy5ldmVudC50cmlnZ2VyZWQpJiYobS5pbmRleE9mKFwiLlwiKT4tMSYmKG09KHg9bS5zcGxpdChcIi5cIikpLnNoaWZ0KCkseC5zb3J0KCkpLGM9bS5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrbSx0PXRbdy5leHBhbmRvXT90Om5ldyB3LkV2ZW50KG0sXCJvYmplY3RcIj09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPW8/MjozLHQubmFtZXNwYWNlPXguam9pbihcIi5cIiksdC5ybmFtZXNwYWNlPXQubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIit4LmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLHQucmVzdWx0PXZvaWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PWkpLG49bnVsbD09bj9bdF06dy5tYWtlQXJyYXkobixbdF0pLGQ9dy5ldmVudC5zcGVjaWFsW21dfHx7fSxvfHwhZC50cmlnZ2VyfHwhMSE9PWQudHJpZ2dlci5hcHBseShpLG4pKSl7aWYoIW8mJiFkLm5vQnViYmxlJiYheShpKSl7Zm9yKGw9ZC5kZWxlZ2F0ZVR5cGV8fG0sd3QudGVzdChsK20pfHwocz1zLnBhcmVudE5vZGUpO3M7cz1zLnBhcmVudE5vZGUpdi5wdXNoKHMpLHU9czt1PT09KGkub3duZXJEb2N1bWVudHx8cikmJnYucHVzaCh1LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvd3x8ZSl9YT0wO3doaWxlKChzPXZbYSsrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpaD1zLHQudHlwZT1hPjE/bDpkLmJpbmRUeXBlfHxtLChwPShKLmdldChzLFwiZXZlbnRzXCIpfHx7fSlbdC50eXBlXSYmSi5nZXQocyxcImhhbmRsZVwiKSkmJnAuYXBwbHkocyxuKSwocD1jJiZzW2NdKSYmcC5hcHBseSYmWShzKSYmKHQucmVzdWx0PXAuYXBwbHkocyxuKSwhMT09PXQucmVzdWx0JiZ0LnByZXZlbnREZWZhdWx0KCkpO3JldHVybiB0LnR5cGU9bSxvfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxkLl9kZWZhdWx0JiYhMSE9PWQuX2RlZmF1bHQuYXBwbHkodi5wb3AoKSxuKXx8IVkoaSl8fGMmJmcoaVttXSkmJiF5KGkpJiYoKHU9aVtjXSkmJihpW2NdPW51bGwpLHcuZXZlbnQudHJpZ2dlcmVkPW0sdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZoLmFkZEV2ZW50TGlzdGVuZXIobSxUdCksaVttXSgpLHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmaC5yZW1vdmVFdmVudExpc3RlbmVyKG0sVHQpLHcuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCx1JiYoaVtjXT11KSksdC5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dy5leHRlbmQobmV3IHcuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwfSk7dy5ldmVudC50cmlnZ2VyKHIsbnVsbCx0KX19KSx3LmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiB3LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApfX0pLGguZm9jdXNpbnx8dy5lYWNoKHtmb2N1czpcImZvY3VzaW5cIixibHVyOlwiZm9jdXNvdXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXt3LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdy5ldmVudC5maXgoZSkpfTt3LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGk9Si5hY2Nlc3Mocix0KTtpfHxyLmFkZEV2ZW50TGlzdGVuZXIoZSxuLCEwKSxKLmFjY2VzcyhyLHQsKGl8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPUouYWNjZXNzKHIsdCktMTtpP0ouYWNjZXNzKHIsdCxpKTooci5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMCksSi5yZW1vdmUocix0KSl9fX0pO3ZhciBDdD1lLmxvY2F0aW9uLEV0PURhdGUubm93KCksa3Q9L1xcPy87dy5wYXJzZVhNTD1mdW5jdGlvbih0KXt2YXIgbjtpZighdHx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIG51bGw7dHJ5e249KG5ldyBlLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsXCJ0ZXh0L3htbFwiKX1jYXRjaChlKXtuPXZvaWQgMH1yZXR1cm4gbiYmIW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKS5sZW5ndGh8fHcuZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrdCksbn07dmFyIFN0PS9cXFtcXF0kLyxEdD0vXFxyP1xcbi9nLE50PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxBdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24ganQoZSx0LG4scil7dmFyIGk7aWYoQXJyYXkuaXNBcnJheSh0KSl3LmVhY2godCxmdW5jdGlvbih0LGkpe258fFN0LnRlc3QoZSk/cihlLGkpOmp0KGUrXCJbXCIrKFwib2JqZWN0XCI9PXR5cGVvZiBpJiZudWxsIT1pP3Q6XCJcIikrXCJdXCIsaSxuLHIpfSk7ZWxzZSBpZihufHxcIm9iamVjdFwiIT09eCh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWp0KGUrXCJbXCIraStcIl1cIix0W2ldLG4scil9dy5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPWcodCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uP1wiXCI6bil9O2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdy5pc1BsYWluT2JqZWN0KGUpKXcuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpanQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbihcIiZcIil9LHcuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXcucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGU/dy5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhdyh0aGlzKS5pcyhcIjpkaXNhYmxlZFwiKSYmQXQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIU50LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXcodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP3cubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShEdCxcIlxcclxcblwiKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKER0LFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pO3ZhciBxdD0vJTIwL2csTHQ9LyMuKiQvLEh0PS8oWz8mXSlfPVteJl0qLyxPdD0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLFB0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLE10PS9eKD86R0VUfEhFQUQpJC8sUnQ9L15cXC9cXC8vLEl0PXt9LFd0PXt9LCR0PVwiKi9cIi5jb25jYXQoXCIqXCIpLEJ0PXIuY3JlYXRlRWxlbWVudChcImFcIik7QnQuaHJlZj1DdC5ocmVmO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiBmdW5jdGlvbih0LG4pe1wic3RyaW5nXCIhPXR5cGVvZiB0JiYobj10LHQ9XCIqXCIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaChNKXx8W107aWYoZyhuKSl3aGlsZShyPW9baSsrXSlcIitcIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8XCIqXCIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1XdDtmdW5jdGlvbiBhKHMpe3ZhciB1O3JldHVybiBpW3NdPSEwLHcuZWFjaChlW3NdfHxbXSxmdW5jdGlvbihlLHMpe3ZhciBsPXModCxuLHIpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBsfHxvfHxpW2xdP28/ISh1PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxhKGwpLCExKX0pLHV9cmV0dXJuIGEodC5kYXRhVHlwZXNbMF0pfHwhaVtcIipcIl0mJmEoXCIqXCIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPXcuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJncuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoXCIqXCI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpK1wiIFwiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX1mdW5jdGlvbiBVdChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKFwiKlwiPT09bylvPXU7ZWxzZSBpZihcIipcIiE9PXUmJnUhPT1vKXtpZighKGE9bFt1K1wiIFwiK29dfHxsW1wiKiBcIitvXSkpZm9yKGkgaW4gbClpZigocz1pLnNwbGl0KFwiIFwiKSlbMV09PT1vJiYoYT1sW3UrXCIgXCIrc1swXV18fGxbXCIqIFwiK3NbMF1dKSl7ITA9PT1hP2E9bFtpXTohMCE9PWxbaV0mJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZighMCE9PWEpaWYoYSYmZVtcInRocm93c1wiXSl0PWEodCk7ZWxzZSB0cnl7dD1hKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZTpcInBhcnNlcmVycm9yXCIsZXJyb3I6YT9lOlwiTm8gY29udmVyc2lvbiBmcm9tIFwiK3UrXCIgdG8gXCIrb319fXJldHVybntzdGF0ZTpcInN1Y2Nlc3NcIixkYXRhOnR9fXcuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpDdC5ocmVmLHR5cGU6XCJHRVRcIixpc0xvY2FsOlB0LnRlc3QoQ3QucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLGFjY2VwdHM6e1wiKlwiOiR0LHRleHQ6XCJ0ZXh0L3BsYWluXCIsaHRtbDpcInRleHQvaHRtbFwiLHhtbDpcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixqc29uOlwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJ9LGNvbnRlbnRzOnt4bWw6L1xcYnhtbFxcYi8saHRtbDovXFxiaHRtbC8sanNvbjovXFxianNvblxcYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6XCJyZXNwb25zZVhNTFwiLHRleHQ6XCJyZXNwb25zZVRleHRcIixqc29uOlwicmVzcG9uc2VKU09OXCJ9LGNvbnZlcnRlcnM6e1wiKiB0ZXh0XCI6U3RyaW5nLFwidGV4dCBodG1sXCI6ITAsXCJ0ZXh0IGpzb25cIjpKU09OLnBhcnNlLFwidGV4dCB4bWxcIjp3LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD96dCh6dChlLHcuYWpheFNldHRpbmdzKSx0KTp6dCh3LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjpGdChJdCksYWpheFRyYW5zcG9ydDpGdChXdCksYWpheDpmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiB0JiYobj10LHQ9dm9pZCAwKSxuPW58fHt9O3ZhciBpLG8sYSxzLHUsbCxjLGYscCxkLGg9dy5hamF4U2V0dXAoe30sbiksZz1oLmNvbnRleHR8fGgseT1oLmNvbnRleHQmJihnLm5vZGVUeXBlfHxnLmpxdWVyeSk/dyhnKTp3LmV2ZW50LHY9dy5EZWZlcnJlZCgpLG09dy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSx4PWguc3RhdHVzQ29kZXx8e30sYj17fSxUPXt9LEM9XCJjYW5jZWxlZFwiLEU9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighcyl7cz17fTt3aGlsZSh0PU90LmV4ZWMoYSkpc1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9VFtlLnRvTG93ZXJDYXNlKCldPVRbZS50b0xvd2VyQ2FzZSgpXXx8ZSxiW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihjKUUuYWx3YXlzKGVbRS5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpeFt0XT1beFt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8QztyZXR1cm4gaSYmaS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKHYucHJvbWlzZShFKSxoLnVybD0oKHR8fGgudXJsfHxDdC5ocmVmKStcIlwiKS5yZXBsYWNlKFJ0LEN0LnByb3RvY29sK1wiLy9cIiksaC50eXBlPW4ubWV0aG9kfHxuLnR5cGV8fGgubWV0aG9kfHxoLnR5cGUsaC5kYXRhVHlwZXM9KGguZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKE0pfHxbXCJcIl0sbnVsbD09aC5jcm9zc0RvbWFpbil7bD1yLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3RyeXtsLmhyZWY9aC51cmwsbC5ocmVmPWwuaHJlZixoLmNyb3NzRG9tYWluPUJ0LnByb3RvY29sK1wiLy9cIitCdC5ob3N0IT1sLnByb3RvY29sK1wiLy9cIitsLmhvc3R9Y2F0Y2goZSl7aC5jcm9zc0RvbWFpbj0hMH19aWYoaC5kYXRhJiZoLnByb2Nlc3NEYXRhJiZcInN0cmluZ1wiIT10eXBlb2YgaC5kYXRhJiYoaC5kYXRhPXcucGFyYW0oaC5kYXRhLGgudHJhZGl0aW9uYWwpKSxfdChJdCxoLG4sRSksYylyZXR1cm4gRTsoZj13LmV2ZW50JiZoLmdsb2JhbCkmJjA9PXcuYWN0aXZlKysmJncuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKSxoLnR5cGU9aC50eXBlLnRvVXBwZXJDYXNlKCksaC5oYXNDb250ZW50PSFNdC50ZXN0KGgudHlwZSksbz1oLnVybC5yZXBsYWNlKEx0LFwiXCIpLGguaGFzQ29udGVudD9oLmRhdGEmJmgucHJvY2Vzc0RhdGEmJjA9PT0oaC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmKGguZGF0YT1oLmRhdGEucmVwbGFjZShxdCxcIitcIikpOihkPWgudXJsLnNsaWNlKG8ubGVuZ3RoKSxoLmRhdGEmJihoLnByb2Nlc3NEYXRhfHxcInN0cmluZ1wiPT10eXBlb2YgaC5kYXRhKSYmKG8rPShrdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStoLmRhdGEsZGVsZXRlIGguZGF0YSksITE9PT1oLmNhY2hlJiYobz1vLnJlcGxhY2UoSHQsXCIkMVwiKSxkPShrdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStcIl89XCIrRXQrKytkKSxoLnVybD1vK2QpLGguaWZNb2RpZmllZCYmKHcubGFzdE1vZGlmaWVkW29dJiZFLnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Nb2RpZmllZC1TaW5jZVwiLHcubGFzdE1vZGlmaWVkW29dKSx3LmV0YWdbb10mJkUuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIix3LmV0YWdbb10pKSwoaC5kYXRhJiZoLmhhc0NvbnRlbnQmJiExIT09aC5jb250ZW50VHlwZXx8bi5jb250ZW50VHlwZSkmJkUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLGguY29udGVudFR5cGUpLEUuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLGguZGF0YVR5cGVzWzBdJiZoLmFjY2VwdHNbaC5kYXRhVHlwZXNbMF1dP2guYWNjZXB0c1toLmRhdGFUeXBlc1swXV0rKFwiKlwiIT09aC5kYXRhVHlwZXNbMF0/XCIsIFwiKyR0K1wiOyBxPTAuMDFcIjpcIlwiKTpoLmFjY2VwdHNbXCIqXCJdKTtmb3IocCBpbiBoLmhlYWRlcnMpRS5zZXRSZXF1ZXN0SGVhZGVyKHAsaC5oZWFkZXJzW3BdKTtpZihoLmJlZm9yZVNlbmQmJighMT09PWguYmVmb3JlU2VuZC5jYWxsKGcsRSxoKXx8YykpcmV0dXJuIEUuYWJvcnQoKTtpZihDPVwiYWJvcnRcIixtLmFkZChoLmNvbXBsZXRlKSxFLmRvbmUoaC5zdWNjZXNzKSxFLmZhaWwoaC5lcnJvciksaT1fdChXdCxoLG4sRSkpe2lmKEUucmVhZHlTdGF0ZT0xLGYmJnkudHJpZ2dlcihcImFqYXhTZW5kXCIsW0UsaF0pLGMpcmV0dXJuIEU7aC5hc3luYyYmaC50aW1lb3V0PjAmJih1PWUuc2V0VGltZW91dChmdW5jdGlvbigpe0UuYWJvcnQoXCJ0aW1lb3V0XCIpfSxoLnRpbWVvdXQpKTt0cnl7Yz0hMSxpLnNlbmQoYixrKX1jYXRjaChlKXtpZihjKXRocm93IGU7aygtMSxlKX19ZWxzZSBrKC0xLFwiTm8gVHJhbnNwb3J0XCIpO2Z1bmN0aW9uIGsodCxuLHIscyl7dmFyIGwscCxkLGIsVCxDPW47Y3x8KGM9ITAsdSYmZS5jbGVhclRpbWVvdXQodSksaT12b2lkIDAsYT1zfHxcIlwiLEUucmVhZHlTdGF0ZT10PjA/NDowLGw9dD49MjAwJiZ0PDMwMHx8MzA0PT09dCxyJiYoYj1YdChoLEUscikpLGI9VXQoaCxiLEUsbCksbD8oaC5pZk1vZGlmaWVkJiYoKFQ9RS5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIikpJiYody5sYXN0TW9kaWZpZWRbb109VCksKFQ9RS5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIikpJiYody5ldGFnW29dPVQpKSwyMDQ9PT10fHxcIkhFQURcIj09PWgudHlwZT9DPVwibm9jb250ZW50XCI6MzA0PT09dD9DPVwibm90bW9kaWZpZWRcIjooQz1iLnN0YXRlLHA9Yi5kYXRhLGw9IShkPWIuZXJyb3IpKSk6KGQ9QywhdCYmQ3x8KEM9XCJlcnJvclwiLHQ8MCYmKHQ9MCkpKSxFLnN0YXR1cz10LEUuc3RhdHVzVGV4dD0obnx8QykrXCJcIixsP3YucmVzb2x2ZVdpdGgoZyxbcCxDLEVdKTp2LnJlamVjdFdpdGgoZyxbRSxDLGRdKSxFLnN0YXR1c0NvZGUoeCkseD12b2lkIDAsZiYmeS50cmlnZ2VyKGw/XCJhamF4U3VjY2Vzc1wiOlwiYWpheEVycm9yXCIsW0UsaCxsP3A6ZF0pLG0uZmlyZVdpdGgoZyxbRSxDXSksZiYmKHkudHJpZ2dlcihcImFqYXhDb21wbGV0ZVwiLFtFLGhdKSwtLXcuYWN0aXZlfHx3LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKSkpfXJldHVybiBFfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdy5nZXQoZSx0LG4sXCJqc29uXCIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdy5nZXQoZSx2b2lkIDAsdCxcInNjcmlwdFwiKX19KSx3LmVhY2goW1wiZ2V0XCIsXCJwb3N0XCJdLGZ1bmN0aW9uKGUsdCl7d1t0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gZyhuKSYmKGk9aXx8cixyPW4sbj12b2lkIDApLHcuYWpheCh3LmV4dGVuZCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0sdy5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksdy5fZXZhbFVybD1mdW5jdGlvbihlKXtyZXR1cm4gdy5hamF4KHt1cmw6ZSx0eXBlOlwiR0VUXCIsZGF0YVR5cGU6XCJzY3JpcHRcIixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsXCJ0aHJvd3NcIjohMH0pfSx3LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKGcoZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD13KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4gZyhlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dyh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dyh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD1nKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7dyh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoXCJib2R5XCIpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLHcuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hdy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sdy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LHcuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFZ0PXswOjIwMCwxMjIzOjIwNH0sR3Q9dy5hamF4U2V0dGluZ3MueGhyKCk7aC5jb3JzPSEhR3QmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBHdCxoLmFqYXg9R3Q9ISFHdCx3LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24odCl7dmFyIG4scjtpZihoLmNvcnN8fEd0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHM9dC54aHIoKTtpZihzLm9wZW4odC50eXBlLHQudXJsLHQuYXN5bmMsdC51c2VybmFtZSx0LnBhc3N3b3JkKSx0LnhockZpZWxkcylmb3IoYSBpbiB0LnhockZpZWxkcylzW2FdPXQueGhyRmllbGRzW2FdO3QubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoaVtcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKTtmb3IoYSBpbiBpKXMuc2V0UmVxdWVzdEhlYWRlcihhLGlbYV0pO249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7biYmKG49cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsXCJhYm9ydFwiPT09ZT9zLmFib3J0KCk6XCJlcnJvclwiPT09ZT9cIm51bWJlclwiIT10eXBlb2Ygcy5zdGF0dXM/bygwLFwiZXJyb3JcIik6byhzLnN0YXR1cyxzLnN0YXR1c1RleHQpOm8oVnRbcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsXCJ0ZXh0XCIhPT0ocy5yZXNwb25zZVR5cGV8fFwidGV4dFwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHMucmVzcG9uc2VUZXh0P3tiaW5hcnk6cy5yZXNwb25zZX06e3RleHQ6cy5yZXNwb25zZVRleHR9LHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPW4oKSxyPXMub25lcnJvcj1zLm9udGltZW91dD1uKFwiZXJyb3JcIiksdm9pZCAwIT09cy5vbmFib3J0P3Mub25hYm9ydD1yOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXMucmVhZHlTdGF0ZSYmZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcigpfSl9LG49bihcImFib3J0XCIpO3RyeXtzLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSx3LmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLHcuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6XCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwifSxjb250ZW50czp7c2NyaXB0Oi9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL30sY29udmVydGVyczp7XCJ0ZXh0IHNjcmlwdFwiOmZ1bmN0aW9uKGUpe3JldHVybiB3Lmdsb2JhbEV2YWwoZSksZX19fSksdy5hamF4UHJlZmlsdGVyKFwic2NyaXB0XCIsZnVuY3Rpb24oZSl7dm9pZCAwPT09ZS5jYWNoZSYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9XCJHRVRcIil9KSx3LmFqYXhUcmFuc3BvcnQoXCJzY3JpcHRcIixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKGksbyl7dD13KFwiPHNjcmlwdD5cIikucHJvcCh7Y2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oXCJsb2FkIGVycm9yXCIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZvKFwiZXJyb3JcIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxyLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIFl0PVtdLFF0PS8oPSlcXD8oPz0mfCQpfFxcP1xcPy87dy5hamF4U2V0dXAoe2pzb25wOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WXQucG9wKCl8fHcuZXhwYW5kbytcIl9cIitFdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksdy5hamF4UHJlZmlsdGVyKFwianNvbiBqc29ucFwiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLGEscz0hMSE9PXQuanNvbnAmJihRdC50ZXN0KHQudXJsKT9cInVybFwiOlwic3RyaW5nXCI9PXR5cGVvZiB0LmRhdGEmJjA9PT0odC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmUXQudGVzdCh0LmRhdGEpJiZcImRhdGFcIik7aWYoc3x8XCJqc29ucFwiPT09dC5kYXRhVHlwZXNbMF0pcmV0dXJuIGk9dC5qc29ucENhbGxiYWNrPWcodC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2sscz90W3NdPXRbc10ucmVwbGFjZShRdCxcIiQxXCIraSk6ITEhPT10Lmpzb25wJiYodC51cmwrPShrdC50ZXN0KHQudXJsKT9cIiZcIjpcIj9cIikrdC5qc29ucCtcIj1cIitpKSx0LmNvbnZlcnRlcnNbXCJzY3JpcHQganNvblwiXT1mdW5jdGlvbigpe3JldHVybiBhfHx3LmVycm9yKGkrXCIgd2FzIG5vdCBjYWxsZWRcIiksYVswXX0sdC5kYXRhVHlwZXNbMF09XCJqc29uXCIsbz1lW2ldLGVbaV09ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1vP3coZSkucmVtb3ZlUHJvcChpKTplW2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1uLmpzb25wQ2FsbGJhY2ssWXQucHVzaChpKSksYSYmZyhvKSYmbyhhWzBdKSxhPW89dm9pZCAwfSksXCJzY3JpcHRcIn0pLGguY3JlYXRlSFRNTERvY3VtZW50PWZ1bmN0aW9uKCl7dmFyIGU9ci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJcIikuYm9keTtyZXR1cm4gZS5pbm5lckhUTUw9XCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiLDI9PT1lLmNoaWxkTm9kZXMubGVuZ3RofSgpLHcucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm5bXTtcImJvb2xlYW5cIj09dHlwZW9mIHQmJihuPXQsdD0hMSk7dmFyIGksbyxhO3JldHVybiB0fHwoaC5jcmVhdGVIVE1MRG9jdW1lbnQ/KChpPSh0PXIuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpKS5jcmVhdGVFbGVtZW50KFwiYmFzZVwiKSkuaHJlZj1yLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKGkpKTp0PXIpLG89QS5leGVjKGUpLGE9IW4mJltdLG8/W3QuY3JlYXRlRWxlbWVudChvWzFdKV06KG89eGUoW2VdLHQsYSksYSYmYS5sZW5ndGgmJncoYSkucmVtb3ZlKCksdy5tZXJnZShbXSxvLmNoaWxkTm9kZXMpKX0sdy5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT10aGlzLHM9ZS5pbmRleE9mKFwiIFwiKTtyZXR1cm4gcz4tMSYmKHI9dnQoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLGcodCk/KG49dCx0PXZvaWQgMCk6dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJihpPVwiUE9TVFwiKSxhLmxlbmd0aD4wJiZ3LmFqYXgoe3VybDplLHR5cGU6aXx8XCJHRVRcIixkYXRhVHlwZTpcImh0bWxcIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP3coXCI8ZGl2PlwiKS5hcHBlbmQody5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSx3LmVhY2goW1wiYWpheFN0YXJ0XCIsXCJhamF4U3RvcFwiLFwiYWpheENvbXBsZXRlXCIsXCJhamF4RXJyb3JcIixcImFqYXhTdWNjZXNzXCIsXCJhamF4U2VuZFwiXSxmdW5jdGlvbihlLHQpe3cuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx3LmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gdy5ncmVwKHcudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSx3Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPXcuY3NzKGUsXCJwb3NpdGlvblwiKSxmPXcoZSkscD17fTtcInN0YXRpY1wiPT09YyYmKGUuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxzPWYub2Zmc2V0KCksbz13LmNzcyhlLFwidG9wXCIpLHU9dy5jc3MoZSxcImxlZnRcIiksKGw9KFwiYWJzb2x1dGVcIj09PWN8fFwiZml4ZWRcIj09PWMpJiYobyt1KS5pbmRleE9mKFwiYXV0b1wiKT4tMSk/KGE9KHI9Zi5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxnKHQpJiYodD10LmNhbGwoZSxuLHcuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihwLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihwLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSxcInVzaW5nXCJpbiB0P3QudXNpbmcuY2FsbChlLHApOmYuY3NzKHApfX0sdy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1lP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3cub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgdCxuLHI9dGhpc1swXTtpZihyKXJldHVybiByLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyh0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDp0LnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6dC5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoXCJmaXhlZFwiPT09dy5jc3MocixcInBvc2l0aW9uXCIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmXCJzdGF0aWNcIj09PXcuY3NzKGUsXCJwb3NpdGlvblwiKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT13KGUpLm9mZnNldCgpKS50b3ArPXcuY3NzKGUsXCJib3JkZXJUb3BXaWR0aFwiLCEwKSxpLmxlZnQrPXcuY3NzKGUsXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3Atdy5jc3MocixcIm1hcmdpblRvcFwiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtdy5jc3MocixcIm1hcmdpbkxlZnRcIiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmXCJzdGF0aWNcIj09PXcuY3NzKGUsXCJwb3NpdGlvblwiKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxiZX0pfX0pLHcuZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1cInBhZ2VZT2Zmc2V0XCI9PT10O3cuZm5bZV09ZnVuY3Rpb24ocil7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG87aWYoeShlKT9vPWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/b1t0XTplW3JdO28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksdy5lYWNoKFtcInRvcFwiLFwibGVmdFwiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09X2UoaC5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsbil7aWYobilyZXR1cm4gbj1GZShlLHQpLFdlLnRlc3Qobik/dyhlKS5wb3NpdGlvbigpW3RdK1wicHhcIjpufSl9KSx3LmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oZSx0KXt3LmVhY2goe3BhZGRpbmc6XCJpbm5lclwiK2UsY29udGVudDp0LFwiXCI6XCJvdXRlclwiK2V9LGZ1bmN0aW9uKG4scil7dy5mbltyXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihufHxcImJvb2xlYW5cIiE9dHlwZW9mIGkpLHM9bnx8KCEwPT09aXx8ITA9PT1vP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIHoodGhpcyxmdW5jdGlvbih0LG4saSl7dmFyIG87cmV0dXJuIHkodCk/MD09PXIuaW5kZXhPZihcIm91dGVyXCIpP3RbXCJpbm5lclwiK2VdOnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W1wiY2xpZW50XCIrZV06OT09PXQubm9kZVR5cGU/KG89dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5W1wic2Nyb2xsXCIrZV0sb1tcInNjcm9sbFwiK2VdLHQuYm9keVtcIm9mZnNldFwiK2VdLG9bXCJvZmZzZXRcIitlXSxvW1wiY2xpZW50XCIrZV0pKTp2b2lkIDA9PT1pP3cuY3NzKHQsbixzKTp3LnN0eWxlKHQsbixpLHMpfSx0LGE/aTp2b2lkIDAsYSl9fSl9KSx3LmVhY2goXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksdy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHcuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLFwiKipcIik6dGhpcy5vZmYodCxlfHxcIioqXCIsbil9fSksdy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxnKGUpKXJldHVybiByPW8uY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHcuZ3VpZCsrLGl9LHcuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/dy5yZWFkeVdhaXQrKzp3LnJlYWR5KCEwKX0sdy5pc0FycmF5PUFycmF5LmlzQXJyYXksdy5wYXJzZUpTT049SlNPTi5wYXJzZSx3Lm5vZGVOYW1lPU4sdy5pc0Z1bmN0aW9uPWcsdy5pc1dpbmRvdz15LHcuY2FtZWxDYXNlPUcsdy50eXBlPXgsdy5ub3c9RGF0ZS5ub3csdy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9dy50eXBlKGUpO3JldHVybihcIm51bWJlclwiPT09dHx8XCJzdHJpbmdcIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiB3fSk7dmFyIEp0PWUualF1ZXJ5LEt0PWUuJDtyZXR1cm4gdy5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT13JiYoZS4kPUt0KSx0JiZlLmpRdWVyeT09PXcmJihlLmpRdWVyeT1KdCksd30sdHx8KGUualF1ZXJ5PWUuJD13KSx3fSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9hbG1hc2FlZWQyMDEwL2FkbWlubHRlL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qc1xuLy8gbW9kdWxlIGlkID0gNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n");
-
-/***/ }),
-
-/***/ 49:
-/***/ (function(module, exports) {
-
-eval("/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(a){\"use strict\";var b=a.fn.jquery.split(\" \")[0].split(\".\");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(a){\"use strict\";function b(){var a=document.createElement(\"bootstrap\"),b={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(\"bsTransitionEnd\",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var c=a(this),e=c.data(\"bs.alert\");e||c.data(\"bs.alert\",e=new d(this)),\"string\"==typeof b&&e[b].call(c)})}var c='[data-dismiss=\"alert\"]',d=function(b){a(b).on(\"click\",c,this.close)};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger(\"closed.bs.alert\").remove()}var e=a(this),f=e.attr(\"data-target\");f||(f=e.attr(\"href\"),f=f&&f.replace(/.*(?=#[^\\s]*$)/,\"\"));var g=a(\"#\"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(\".alert\")),g.trigger(b=a.Event(\"close.bs.alert\")),b.isDefaultPrevented()||(g.removeClass(\"in\"),a.support.transition&&g.hasClass(\"fade\")?g.one(\"bsTransitionEnd\",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on(\"click.bs.alert.data-api\",c,d.prototype.close)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.button\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.button\",e=new c(this,f)),\"toggle\"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION=\"3.3.7\",c.DEFAULTS={loadingText:\"loading...\"},c.prototype.setState=function(b){var c=\"disabled\",d=this.$element,e=d.is(\"input\")?\"val\":\"html\",f=d.data();b+=\"Text\",null==f.resetText&&d.data(\"resetText\",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),\"loadingText\"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle=\"buttons\"]');if(b.length){var c=this.$element.find(\"input\");\"radio\"==c.prop(\"type\")?(c.prop(\"checked\")&&(a=!1),b.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==c.prop(\"type\")&&(c.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(a=!1),this.$element.toggleClass(\"active\")),c.prop(\"checked\",this.$element.hasClass(\"active\")),a&&c.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(c){var d=a(c.target).closest(\".btn\");b.call(d,\"toggle\"),a(c.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(c.preventDefault(),d.is(\"input,button\")?d.trigger(\"focus\"):d.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(b){a(b.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.carousel\"),f=a.extend({},c.DEFAULTS,d.data(),\"object\"==typeof b&&b),g=\"string\"==typeof b?b:f.slide;e||d.data(\"bs.carousel\",e=new c(this,f)),\"number\"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",a.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",a.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",a.proxy(this.cycle,this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(\".item\"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d=\"prev\"==a&&0===c||\"next\"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e=\"prev\"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?\"next\":\"prev\",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(\".next, .prev\").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(b,d){var e=this.$element.find(\".item.active\"),f=d||this.getItemForDirection(b,e),g=this.interval,h=\"next\"==b?\"left\":\"right\",i=this;if(f.hasClass(\"active\"))return this.sliding=!1;var j=f[0],k=a.Event(\"slide.bs.carousel\",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass(\"active\")}var m=a.Event(\"slid.bs.carousel\",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass(\"slide\")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one(\"bsTransitionEnd\",function(){f.removeClass([b,h].join(\" \")).addClass(\"active\"),e.removeClass([\"active\",h].join(\" \")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass(\"active\"),f.addClass(\"active\"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr(\"data-target\")||(d=e.attr(\"href\"))&&d.replace(/.*(?=#[^\\s]+$)/,\"\"));if(f.hasClass(\"carousel\")){var g=a.extend({},f.data(),e.data()),h=e.attr(\"data-slide-to\");h&&(g.interval=!1),b.call(f,g),h&&f.data(\"bs.carousel\").to(h),c.preventDefault()}};a(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),a(window).on(\"load\",function(){a('[data-ride=\"carousel\"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){\"use strict\";function b(b){var c,d=b.attr(\"data-target\")||(c=b.attr(\"href\"))&&c.replace(/.*(?=#[^\\s]+$)/,\"\");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data(\"bs.collapse\"),f=a.extend({},d.DEFAULTS,c.data(),\"object\"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data(\"bs.collapse\",e=new d(this,f)),\"string\"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+b.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+b.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass(\"width\");return a?\"width\":\"height\"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var b,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(b=e.data(\"bs.collapse\"),b&&b.transitioning))){var f=a.Event(\"show.bs.collapse\");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,\"hide\"),b||e.data(\"bs.collapse\",null));var g=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var h=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return h.call(this);var i=a.camelCase([\"scroll\",g].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var b=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};return a.support.transition?void this.$element[c](0).one(\"bsTransitionEnd\",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass(\"in\");a.attr(\"aria-expanded\",c),b.toggleClass(\"collapsed\",!c).attr(\"aria-expanded\",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(d){var e=a(this);e.attr(\"data-target\")||d.preventDefault();var f=b(e),g=f.data(\"bs.collapse\"),h=g?\"toggle\":e.data();c.call(f,h)})}(jQuery),+function(a){\"use strict\";function b(b){var c=b.attr(\"data-target\");c||(c=b.attr(\"href\"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\\s]*$)/,\"\"));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass(\"open\")&&(c&&\"click\"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event(\"hide.bs.dropdown\",f)),c.isDefaultPrevented()||(d.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data(\"bs.dropdown\");d||c.data(\"bs.dropdown\",d=new g(this)),\"string\"==typeof b&&d[b].call(c)})}var e=\".dropdown-backdrop\",f='[data-toggle=\"dropdown\"]',g=function(b){a(b).on(\"click.bs.dropdown\",this.toggle)};g.VERSION=\"3.3.7\",g.prototype.toggle=function(d){var e=a(this);if(!e.is(\".disabled, :disabled\")){var f=b(e),g=f.hasClass(\"open\");if(c(),!g){\"ontouchstart\"in document.documentElement&&!f.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",c);var h={relatedTarget:this};if(f.trigger(d=a.Event(\"show.bs.dropdown\",h)),d.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),f.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(\".disabled, :disabled\")){var e=b(d),g=e.hasClass(\"open\");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger(\"focus\"),d.trigger(\"click\");var h=\" li:not(.disabled):visible a\",i=e.find(\".dropdown-menu\"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger(\"focus\")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(\"click.bs.dropdown.data-api\",c).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(a){a.stopPropagation()}).on(\"click.bs.dropdown.data-api\",f,g.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",f,g.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",g.prototype.keydown)}(jQuery),+function(a){\"use strict\";function b(b,d){return this.each(function(){var e=a(this),f=e.data(\"bs.modal\"),g=a.extend({},c.DEFAULTS,e.data(),\"object\"==typeof b&&b);f||e.data(\"bs.modal\",f=new c(this,g)),\"string\"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,a.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event(\"show.bs.modal\",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',a.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){d.$element.one(\"mouseup.dismiss.bs.modal\",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass(\"fade\");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass(\"in\"),d.enforceFocus();var f=a.Event(\"shown.bs.modal\",{relatedTarget:b});e?d.$dialog.one(\"bsTransitionEnd\",function(){d.$element.trigger(\"focus\").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger(\"focus\").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(\"hide.bs.modal\"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),a.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger(\"focus\")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},c.prototype.resize=function(){this.isShown?a(window).on(\"resize.bs.modal\",a.proxy(this.handleUpdate,this)):a(window).off(\"resize.bs.modal\")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass(\"modal-open\"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger(\"hidden.bs.modal\")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement(\"div\")).addClass(\"modal-backdrop \"+e).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!b)return;f?this.$backdrop.one(\"bsTransitionEnd\",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:\"\"})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\",this.bodyIsOverflowing&&this.$body.css(\"padding-right\",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement(\"div\");a.className=\"modal-scrollbar-measure\",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(c){var d=a(this),e=d.attr(\"href\"),f=a(d.attr(\"data-target\")||e&&e.replace(/.*(?=#[^\\s]+$)/,\"\")),g=f.data(\"bs.modal\")?\"toggle\":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is(\"a\")&&c.preventDefault(),f.one(\"show.bs.modal\",function(a){a.isDefaultPrevented()||f.one(\"hidden.bs.modal\",function(){d.is(\":visible\")&&d.trigger(\"focus\")})}),b.call(f,g,this)})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tooltip\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.tooltip\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",a,b)};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var e=this.options.trigger.split(\" \"),f=e.length;f--;){var g=e[f];if(\"click\"==g)this.$element.on(\"click.\"+this.type,this.options.selector,a.proxy(this.toggle,this));else if(\"manual\"!=g){var h=\"hover\"==g?\"mouseenter\":\"focusin\",i=\"hover\"==g?\"mouseleave\":\"focusout\";this.$element.on(h+\".\"+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+\".\"+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&\"number\"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusin\"==b.type?\"focus\":\"hover\"]=!0),c.tip().hasClass(\"in\")||\"in\"==c.hoverState?void(c.hoverState=\"in\"):(clearTimeout(c.timeout),c.hoverState=\"in\",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){\"in\"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusout\"==b.type?\"focus\":\"hover\"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState=\"out\",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){\"out\"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr(\"id\",g),this.$element.attr(\"aria-describedby\",g),this.options.animation&&f.addClass(\"fade\");var h=\"function\"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\\s?auto?\\s?/i,j=i.test(h);j&&(h=h.replace(i,\"\")||\"top\"),f.detach().css({top:0,left:0,display:\"block\"}).addClass(h).data(\"bs.\"+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h=\"bottom\"==h&&k.bottom+m>o.bottom?\"top\":\"top\"==h&&k.top-m<o.top?\"bottom\":\"right\"==h&&k.right+l>o.width?\"left\":\"left\"==h&&k.left-l<o.left?\"right\":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger(\"shown.bs.\"+e.type),e.hoverState=null,\"out\"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css(\"margin-top\"),10),h=parseInt(d.css(\"margin-left\"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass(\"in\");var i=d[0].offsetWidth,j=d[0].offsetHeight;\"top\"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?\"offsetWidth\":\"offsetHeight\";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?\"left\":\"top\",50*(1-a/b)+\"%\").css(c?\"top\":\"left\",\"\")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](b),a.removeClass(\"fade in top bottom left right\")},c.prototype.hide=function(b){function d(){\"in\"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event(\"hide.bs.\"+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass(\"in\"),a.support.transition&&f.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(\"title\")||\"string\"!=typeof a.attr(\"data-original-title\"))&&a.attr(\"data-original-title\",a.attr(\"title\")||\"\").attr(\"title\",\"\")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d=\"BODY\"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return\"bottom\"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:\"top\"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:\"left\"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr(\"data-original-title\")||(\"function\"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data(\"bs.\"+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass(\"in\")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off(\".\"+a.type).removeData(\"bs.\"+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.popover\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.popover\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.init(\"popover\",a,b)};if(!a.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");c.VERSION=\"3.3.7\",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(\".popover-title\")[this.options.html?\"html\":\"text\"](b),a.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof c?\"html\":\"append\":\"text\"](c),a.removeClass(\"fade top bottom left right in\"),a.find(\".popover-title\").html()||a.find(\".popover-title\").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr(\"data-content\")||(\"function\"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){\"use strict\";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data(\"bs.scrollspy\"),f=\"object\"==typeof c&&c;e||d.data(\"bs.scrollspy\",e=new b(this,f)),\"string\"==typeof c&&e[c]()})}b.VERSION=\"3.3.7\",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c=\"offset\",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c=\"position\",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data(\"target\")||b.attr(\"href\"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(\":visible\")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){\nthis.activeTarget=b,this.clear();var c=this.selector+'[data-target=\"'+b+'\"],'+this.selector+'[href=\"'+b+'\"]',d=a(c).parents(\"li\").addClass(\"active\");d.parent(\".dropdown-menu\").length&&(d=d.closest(\"li.dropdown\").addClass(\"active\")),d.trigger(\"activate.bs.scrollspy\")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on(\"load.bs.scrollspy.data-api\",function(){a('[data-spy=\"scroll\"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tab\");e||d.data(\"bs.tab\",e=new c(this)),\"string\"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest(\"ul:not(.dropdown-menu)\"),d=b.data(\"target\");if(d||(d=b.attr(\"href\"),d=d&&d.replace(/.*(?=#[^\\s]*$)/,\"\")),!b.parent(\"li\").hasClass(\"active\")){var e=c.find(\".active:last a\"),f=a.Event(\"hide.bs.tab\",{relatedTarget:b[0]}),g=a.Event(\"show.bs.tab\",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest(\"li\"),c),this.activate(h,h.parent(),function(){e.trigger({type:\"hidden.bs.tab\",relatedTarget:b[0]}),b.trigger({type:\"shown.bs.tab\",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),h?(b[0].offsetWidth,b.addClass(\"in\")):b.removeClass(\"fade\"),b.parent(\".dropdown-menu\").length&&b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),e&&e()}var g=d.find(\"> .active\"),h=e&&a.support.transition&&(g.length&&g.hasClass(\"fade\")||!!d.find(\"> .fade\").length);g.length&&h?g.one(\"bsTransitionEnd\",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass(\"in\")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),\"show\")};a(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',e).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',e)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.affix\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.affix\",e=new c(this,f)),\"string\"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on(\"scroll.bs.affix.data-api\",a.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION=\"3.3.7\",c.RESET=\"affix affix-top affix-bottom\",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&\"top\"==this.affixed)return e<c&&\"top\";if(\"bottom\"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&\"bottom\":!(e+g<=a-d)&&\"bottom\";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?\"top\":null!=d&&i+j>=a-d&&\"bottom\"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());\"object\"!=typeof d&&(f=e=d),\"function\"==typeof e&&(e=d.top(this.$element)),\"function\"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css(\"top\",\"\");var i=\"affix\"+(h?\"-\"+h:\"\"),j=a.Event(i+\".bs.affix\");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin=\"bottom\"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on(\"load\",function(){a('[data-spy=\"affix\"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanM/OGZhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLGFBQWEsYUFBYSwyQ0FBMkMsZ0tBQWdLLHNCQUFzQixhQUFhLGFBQWEsNkNBQTZDLDZJQUE2SSw2Q0FBNkMsVUFBVSxTQUFTLHNDQUFzQyxnQkFBZ0IseUNBQXlDLEtBQUssRUFBRSxpQkFBaUIsMkNBQTJDLDRCQUE0QixjQUFjLGlGQUFpRiwyRkFBMkYsMEVBQTBFLEVBQUUsRUFBRSxzQkFBc0IsYUFBYSxjQUFjLDRCQUE0QixtQ0FBbUMscUVBQXFFLEVBQUUsNkNBQTZDLCtCQUErQiwwRUFBMEUsYUFBYSwrQ0FBK0Msc0NBQXNDLDBEQUEwRCxzQkFBc0Isa1FBQWtRLGlCQUFpQix1RUFBdUUseUJBQXlCLCtEQUErRCxzQkFBc0IsYUFBYSxjQUFjLDRCQUE0Qiw0REFBNEQsK0VBQStFLEVBQUUsb0JBQW9CLDJDQUEyQyxrQ0FBa0MsOEJBQThCLHlCQUF5QixrQ0FBa0MseUVBQXlFLHNGQUFzRiw0TEFBNEwsVUFBVSwrQkFBK0IsNERBQTRELGFBQWEsa0NBQWtDLHNVQUFzVSwrR0FBK0csa0JBQWtCLDBFQUEwRSwwQkFBMEIsaUZBQWlGLGtDQUFrQywrTUFBK00sOEZBQThGLDZFQUE2RSxFQUFFLHNCQUFzQixhQUFhLGNBQWMsNEJBQTRCLG1EQUFtRCwyRUFBMkUsMkdBQTJHLEVBQUUsb0JBQW9CLHVkQUF1ZCx3REFBd0QsK0NBQStDLGlDQUFpQyw4Q0FBOEMsZ0JBQWdCLG9CQUFvQixNQUFNLG9CQUFvQixNQUFNLGVBQWUsb0JBQW9CLCtCQUErQiw0TEFBNEwsc0NBQXNDLG1GQUFtRiwrQ0FBK0Msa0ZBQWtGLGtDQUFrQyxnREFBZ0QseUJBQXlCLDRCQUE0QixnRkFB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QUFjLDRCQUE0QiwyREFBMkQsaUVBQWlFLEVBQUUsb0JBQW9CLHdCQUF3QixpU0FBaVMscUVBQXFFLHVCQUF1Qix3Q0FBd0MsZ0ZBQWdGLGtEQUFrRCxnR0FBZ0csNkNBQTZDLHVEQUF1RCx3Q0FBd0MsOENBQThDLHFEQUFxRCx3REFBd0QsaUNBQWlDLG1EQUFtRCwrQ0FBK0Msc0NBQXNDLGlDQUFpQyxpSUFBaUksNkhBQTZILDZCQUE2QixvQkFBb0IsOENBQThDLG9EQUFvRCwwREFBMEQsbUtBQW1LLG1DQUFtQyxVQUFVLElBQUksaUJBQWlCLHVFQUF1RSx5QkFBeUIsZ0NBQWdDLHdDQUF3Qyx5QkFBeUIscUJBQXFCLGtIQUFrSCxFQUFFLEVBQUUiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEJvb3RzdHJhcCB2My4zLjcgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNiBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeVwiKTsrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9YS5mbi5qcXVlcnkuc3BsaXQoXCIgXCIpWzBdLnNwbGl0KFwiLlwiKTtpZihiWzBdPDImJmJbMV08OXx8MT09YlswXSYmOT09YlsxXSYmYlsyXTwxfHxiWzBdPjMpdGhyb3cgbmV3IEVycm9yKFwiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gNFwiKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJib290c3RyYXBcIiksYj17V2Via2l0VHJhbnNpdGlvbjpcIndlYmtpdFRyYW5zaXRpb25FbmRcIixNb3pUcmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwiLE9UcmFuc2l0aW9uOlwib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmRcIix0cmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwifTtmb3IodmFyIGMgaW4gYilpZih2b2lkIDAhPT1hLnN0eWxlW2NdKXJldHVybntlbmQ6YltjXX07cmV0dXJuITF9YS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihiKXt2YXIgYz0hMSxkPXRoaXM7YSh0aGlzKS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2M9ITB9KTt2YXIgZT1mdW5jdGlvbigpe2N8fGEoZCkudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfTtyZXR1cm4gc2V0VGltZW91dChlLGIpLHRoaXN9LGEoZnVuY3Rpb24oKXthLnN1cHBvcnQudHJhbnNpdGlvbj1iKCksYS5zdXBwb3J0LnRyYW5zaXRpb24mJihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24oYil7aWYoYShiLnRhcmdldCkuaXModGhpcykpcmV0dXJuIGIuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5hbGVydFwiKTtlfHxjLmRhdGEoXCJicy5hbGVydFwiLGU9bmV3IGQodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdLmNhbGwoYyl9KX12YXIgYz0nW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oXCJjbGlja1wiLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj1cIjMuMy43XCIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxkLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBjKCl7Zy5kZXRhY2goKS50cmlnZ2VyKFwiY2xvc2VkLmJzLmFsZXJ0XCIpLnJlbW92ZSgpfXZhciBlPWEodGhpcyksZj1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtmfHwoZj1lLmF0dHIoXCJocmVmXCIpLGY9ZiYmZi5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZz1hKFwiI1wiPT09Zj9bXTpmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdChcIi5hbGVydFwiKSksZy50cmlnZ2VyKGI9YS5FdmVudChcImNsb3NlLmJzLmFsZXJ0XCIpKSxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZy5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKFwiZmFkZVwiKT9nLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6YygpKX07dmFyIGU9YS5mbi5hbGVydDthLmZuLmFsZXJ0PWIsYS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1kLGEuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFsZXJ0PWUsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5hbGVydC5kYXRhLWFwaVwiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuYnV0dG9uXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYnV0dG9uXCIsZT1uZXcgYyh0aGlzLGYpKSxcInRvZ2dsZVwiPT1iP2UudG9nZ2xlKCk6YiYmZS5zZXRTdGF0ZShiKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuaXNMb2FkaW5nPSExfTtjLlZFUlNJT049XCIzLjMuN1wiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OlwibG9hZGluZy4uLlwifSxjLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihiKXt2YXIgYz1cImRpc2FibGVkXCIsZD10aGlzLiRlbGVtZW50LGU9ZC5pcyhcImlucHV0XCIpP1widmFsXCI6XCJodG1sXCIsZj1kLmRhdGEoKTtiKz1cIlRleHRcIixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKFwicmVzZXRUZXh0XCIsZFtlXSgpKSxzZXRUaW1lb3V0KGEucHJveHkoZnVuY3Rpb24oKXtkW2VdKG51bGw9PWZbYl0/dGhpcy5vcHRpb25zW2JdOmZbYl0pLFwibG9hZGluZ1RleHRcIj09Yj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcyhjKS5hdHRyKGMsYykucHJvcChjLCEwKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykucHJvcChjLCExKSl9LHRoaXMpLDApfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoXCJpbnB1dFwiKTtcInJhZGlvXCI9PWMucHJvcChcInR5cGVcIik/KGMucHJvcChcImNoZWNrZWRcIikmJihhPSExKSxiLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJhY3RpdmVcIikpOlwiY2hlY2tib3hcIj09Yy5wcm9wKFwidHlwZVwiKSYmKGMucHJvcChcImNoZWNrZWRcIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpJiYoYT0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKSksYy5wcm9wKFwiY2hlY2tlZFwiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLGEmJmMudHJpZ2dlcihcImNoYW5nZVwiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtcHJlc3NlZFwiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpfTt2YXIgZD1hLmZuLmJ1dHRvbjthLmZuLmJ1dHRvbj1iLGEuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWMsYS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJ1dHRvbj1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpLmNsb3Nlc3QoXCIuYnRuXCIpO2IuY2FsbChkLFwidG9nZ2xlXCIpLGEoYy50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpfHwoYy5wcmV2ZW50RGVmYXVsdCgpLGQuaXMoXCJpbnB1dCxidXR0b25cIik/ZC50cmlnZ2VyKFwiZm9jdXNcIik6ZC5maW5kKFwiaW5wdXQ6dmlzaWJsZSxidXR0b246dmlzaWJsZVwiKS5maXJzdCgpLnRyaWdnZXIoXCJmb2N1c1wiKSl9KS5vbihcImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKS50b2dnbGVDbGFzcyhcImZvY3VzXCIsL15mb2N1cyhpbik/JC8udGVzdChiLnR5cGUpKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuY2Fyb3VzZWxcIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKSxnPVwic3RyaW5nXCI9PXR5cGVvZiBiP2I6Zi5zbGlkZTtlfHxkLmRhdGEoXCJicy5jYXJvdXNlbFwiLGU9bmV3IGModGhpcyxmKSksXCJudW1iZXJcIj09dHlwZW9mIGI/ZS50byhiKTpnP2VbZ10oKTpmLmludGVydmFsJiZlLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9bnVsbCx0aGlzLnNsaWRpbmc9bnVsbCx0aGlzLmludGVydmFsPW51bGwsdGhpcy4kYWN0aXZlPW51bGwsdGhpcy4kaXRlbXM9bnVsbCx0aGlzLm9wdGlvbnMua2V5Ym9hcmQmJnRoaXMuJGVsZW1lbnQub24oXCJrZXlkb3duLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLFwiaG92ZXJcIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiZ0aGlzLiRlbGVtZW50Lm9uKFwibW91c2VlbnRlci5icy5jYXJvdXNlbFwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oXCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yy5WRVJTSU9OPVwiMy4zLjdcIixjLlRSQU5TSVRJT05fRFVSQVRJT049NjAwLGMuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZTpcImhvdmVyXCIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oXCIuaXRlbVwiKSx0aGlzLiRpdGVtcy5pbmRleChhfHx0aGlzLiRhY3RpdmUpfSxjLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRJdGVtSW5kZXgoYiksZD1cInByZXZcIj09YSYmMD09PWN8fFwibmV4dFwiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9XCJwcmV2XCI9PWE/LTE6MSxmPShjK2UpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEoZil9LGMucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpKTtpZighKGE+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fGE8MCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIixmdW5jdGlvbigpe2IudG8oYSl9KTpjPT1hP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUoYT5jP1wibmV4dFwiOlwicHJldlwiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKFwiLm5leHQsIC5wcmV2XCIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zbGlkaW5nKXJldHVybiB0aGlzLnNsaWRlKFwibmV4dFwiKX0sYy5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJwcmV2XCIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtLmFjdGl2ZVwiKSxmPWR8fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihiLGUpLGc9dGhpcy5pbnRlcnZhbCxoPVwibmV4dFwiPT1iP1wibGVmdFwiOlwicmlnaHRcIixpPXRoaXM7aWYoZi5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBqPWZbMF0saz1hLkV2ZW50KFwic2xpZGUuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBsPWEodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KGYpXSk7bCYmbC5hZGRDbGFzcyhcImFjdGl2ZVwiKX12YXIgbT1hLkV2ZW50KFwic2xpZC5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmosZGlyZWN0aW9uOmh9KTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJzbGlkZVwiKT8oZi5hZGRDbGFzcyhiKSxmWzBdLm9mZnNldFdpZHRoLGUuYWRkQ2xhc3MoaCksZi5hZGRDbGFzcyhoKSxlLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKFwiIFwiKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIiksZS5yZW1vdmVDbGFzcyhbXCJhY3RpdmVcIixoXS5qb2luKFwiIFwiKSksaS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLiRlbGVtZW50LnRyaWdnZXIobSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KGUucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksZi5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fChkPWUuYXR0cihcImhyZWZcIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpO2lmKGYuaGFzQ2xhc3MoXCJjYXJvdXNlbFwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKFwiZGF0YS1zbGlkZS10b1wiKTtoJiYoZy5pbnRlcnZhbD0hMSksYi5jYWxsKGYsZyksaCYmZi5kYXRhKFwiYnMuY2Fyb3VzZWxcIikudG8oaCksYy5wcmV2ZW50RGVmYXVsdCgpfX07YShkb2N1bWVudCkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGVdXCIsZSkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGUtdG9dXCIsZSksYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtcmlkZT1cImNhcm91c2VsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7Yi5jYWxsKGMsYy5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHwoYz1iLmF0dHIoXCJocmVmXCIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpO3JldHVybiBhKGQpfWZ1bmN0aW9uIGMoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpOyFlJiZmLnRvZ2dsZSYmL3Nob3d8aGlkZS8udGVzdChiKSYmKGYudG9nZ2xlPSExKSxlfHxjLmRhdGEoXCJicy5jb2xsYXBzZVwiLGU9bmV3IGQodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMnK2IuaWQrJ1wiXSxbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXRhcmdldD1cIiMnK2IuaWQrJ1wiXScpLHRoaXMudHJhbnNpdGlvbmluZz1udWxsLHRoaXMub3B0aW9ucy5wYXJlbnQ/dGhpcy4kcGFyZW50PXRoaXMuZ2V0UGFyZW50KCk6dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy4kZWxlbWVudCx0aGlzLiR0cmlnZ2VyKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTtkLlZFUlNJT049XCIzLjMuN1wiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0zNTAsZC5ERUZBVUxUUz17dG9nZ2xlOiEwfSxkLnByb3RvdHlwZS5kaW1lbnNpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwid2lkdGhcIik7cmV0dXJuIGE/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJ9LGQucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiYhdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImluXCIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKFwiLnBhbmVsXCIpLmNoaWxkcmVuKFwiLmluLCAuY29sbGFwc2luZ1wiKTtpZighKGUmJmUubGVuZ3RoJiYoYj1lLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudChcInNob3cuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpLCFmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtlJiZlLmxlbmd0aCYmKGMuY2FsbChlLFwiaGlkZVwiKSxifHxlLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZVwiKS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIilbZ10oMCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgaD1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbZ10oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGddLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGI9YS5FdmVudChcImhpZGUuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLCFiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgYz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbY10odGhpcy4kZWxlbWVudFtjXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBpblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKFwiY29sbGFwc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNpbmdcIikuYWRkQ2xhc3MoXCJjb2xsYXBzZVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24/dm9pZCB0aGlzLiRlbGVtZW50W2NdKDApLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoZSx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTplLmNhbGwodGhpcyl9fX0sZC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIik/XCJoaWRlXCI6XCJzaG93XCJdKCl9LGQucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMub3B0aW9ucy5wYXJlbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJyt0aGlzLm9wdGlvbnMucGFyZW50KydcIl0nKS5lYWNoKGEucHJveHkoZnVuY3Rpb24oYyxkKXt2YXIgZT1hKGQpO3RoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGIoZSksZSl9LHRoaXMpKS5lbmQoKX0sZC5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5oYXNDbGFzcyhcImluXCIpO2EuYXR0cihcImFyaWEtZXhwYW5kZWRcIixjKSxiLnRvZ2dsZUNsYXNzKFwiY29sbGFwc2VkXCIsIWMpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsYyl9O3ZhciBlPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1jLGEuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9ZCxhLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jb2xsYXBzZT1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nLGZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7ZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fGQucHJldmVudERlZmF1bHQoKTt2YXIgZj1iKGUpLGc9Zi5kYXRhKFwiYnMuY29sbGFwc2VcIiksaD1nP1widG9nZ2xlXCI6ZS5kYXRhKCk7Yy5jYWxsKGYsaCl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXt2YXIgYz1iLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtjfHwoYz1iLmF0dHIoXCJocmVmXCIpLGM9YyYmLyNbQS1aYS16XS8udGVzdChjKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZD1jJiZhKGMpO3JldHVybiBkJiZkLmxlbmd0aD9kOmIucGFyZW50KCl9ZnVuY3Rpb24gYyhjKXtjJiYzPT09Yy53aGljaHx8KGEoZSkucmVtb3ZlKCksYShmKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWIoZCksZj17cmVsYXRlZFRhcmdldDp0aGlzfTtlLmhhc0NsYXNzKFwib3BlblwiKSYmKGMmJlwiY2xpY2tcIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudChcImhpZGUuYnMuZHJvcGRvd25cIixmKSksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGQuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLGUucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIoYS5FdmVudChcImhpZGRlbi5icy5kcm9wZG93blwiLGYpKSkpKX0pKX1mdW5jdGlvbiBkKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy5kYXRhKFwiYnMuZHJvcGRvd25cIik7ZHx8Yy5kYXRhKFwiYnMuZHJvcGRvd25cIixkPW5ldyBnKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZFtiXS5jYWxsKGMpfSl9dmFyIGU9XCIuZHJvcGRvd24tYmFja2Ryb3BcIixmPSdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScsZz1mdW5jdGlvbihiKXthKGIpLm9uKFwiY2xpY2suYnMuZHJvcGRvd25cIix0aGlzLnRvZ2dsZSl9O2cuVkVSU0lPTj1cIjMuMy43XCIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIGY9YihlKSxnPWYuaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKGMoKSwhZyl7XCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdChcIi5uYXZiYXItbmF2XCIpLmxlbmd0aCYmYShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcImRyb3Bkb3duLWJhY2tkcm9wXCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKFwiY2xpY2tcIixjKTt2YXIgaD17cmVsYXRlZFRhcmdldDp0aGlzfTtpZihmLnRyaWdnZXIoZD1hLkV2ZW50KFwic2hvdy5icy5kcm9wZG93blwiLGgpKSxkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtlLnRyaWdnZXIoXCJmb2N1c1wiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxmLnRvZ2dsZUNsYXNzKFwib3BlblwiKS50cmlnZ2VyKGEuRXZlbnQoXCJzaG93bi5icy5kcm9wZG93blwiLGgpKX1yZXR1cm4hMX19LGcucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oYyl7aWYoLygzOHw0MHwyN3wzMikvLnRlc3QoYy53aGljaCkmJiEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpKXt2YXIgZD1hKHRoaXMpO2lmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCFkLmlzKFwiLmRpc2FibGVkLCA6ZGlzYWJsZWRcIikpe3ZhciBlPWIoZCksZz1lLmhhc0NsYXNzKFwib3BlblwiKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoXCJmb2N1c1wiKSxkLnRyaWdnZXIoXCJjbGlja1wiKTt2YXIgaD1cIiBsaTpub3QoLmRpc2FibGVkKTp2aXNpYmxlIGFcIixpPWUuZmluZChcIi5kcm9wZG93bi1tZW51XCIraCk7aWYoaS5sZW5ndGgpe3ZhciBqPWkuaW5kZXgoYy50YXJnZXQpOzM4PT1jLndoaWNoJiZqPjAmJmotLSw0MD09Yy53aGljaCYmajxpLmxlbmd0aC0xJiZqKyssfmp8fChqPTApLGkuZXEoaikudHJpZ2dlcihcImZvY3VzXCIpfX19fTt2YXIgaD1hLmZuLmRyb3Bkb3duO2EuZm4uZHJvcGRvd249ZCxhLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWcsYS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uZHJvcGRvd249aCx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsYykub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duIGZvcm1cIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixmLGcucHJvdG90eXBlLmtleWRvd24pLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duLW1lbnVcIixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpLGY9ZS5kYXRhKFwiYnMubW9kYWxcIiksZz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGUuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoXCJicy5tb2RhbFwiLGY9bmV3IGModGhpcyxnKSksXCJzdHJpbmdcIj09dHlwZW9mIGI/ZltiXShkKTpnLnNob3cmJmYuc2hvdyhkKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWMsdGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRkaWFsb2c9dGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWRpYWxvZ1wiKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtY29udGVudFwiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUsYS5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihcImxvYWRlZC5icy5tb2RhbFwiKX0sdGhpcykpfTtjLlZFUlNJT049XCIzLjMuN1wiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoXCJzaG93LmJzLm1vZGFsXCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd258fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcyhcIm1vZGFsLW9wZW5cIiksdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsYS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMuJGRpYWxvZy5vbihcIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50Lm9uZShcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKTtkLiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8ZC4kZWxlbWVudC5hcHBlbmRUbyhkLiRib2R5KSxkLiRlbGVtZW50LnNob3coKS5zY3JvbGxUb3AoMCksZC5hZGp1c3REaWFsb2coKSxlJiZkLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLGQuJGVsZW1lbnQuYWRkQ2xhc3MoXCJpblwiKSxkLmVuZm9yY2VGb2N1cygpO3ZhciBmPWEuRXZlbnQoXCJzaG93bi5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2QuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIoZil9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmQuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudChcImhpZGUuYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLHRoaXMuaXNTaG93biYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLGEoZG9jdW1lbnQpLm9mZihcImZvY3VzaW4uYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImluXCIpLm9mZihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIikub2ZmKFwibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsXCIpLHRoaXMuJGRpYWxvZy5vZmYoXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhLnByb3h5KHRoaXMuaGlkZU1vZGFsLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnRoaXMuaGlkZU1vZGFsKCkpfSxjLnByb3RvdHlwZS5lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXthKGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLm9uKFwiZm9jdXNpbi5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7ZG9jdW1lbnQ9PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudFswXT09PWEudGFyZ2V0fHx0aGlzLiRlbGVtZW50LmhhcyhhLnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0sdGhpcykpfSxjLnByb3RvdHlwZS5lc2NhcGU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIpfSxjLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24/YSh3aW5kb3cpLm9uKFwicmVzaXplLmJzLm1vZGFsXCIsYS5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSx0aGlzKSk6YSh3aW5kb3cpLm9mZihcInJlc2l6ZS5icy5tb2RhbFwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcyhcIm1vZGFsLW9wZW5cIiksYS5yZXNldEFkanVzdG1lbnRzKCksYS5yZXNldFNjcm9sbGJhcigpLGEuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5tb2RhbFwiKX0pfSxjLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxjLnByb3RvdHlwZS5iYWNrZHJvcD1mdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/XCJmYWRlXCI6XCJcIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGY9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmU7aWYodGhpcy4kYmFja2Ryb3A9YShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcIm1vZGFsLWJhY2tkcm9wIFwiK2UpLmFwcGVuZFRvKHRoaXMuJGJvZHkpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsYS5wcm94eShmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrP3ZvaWQodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExKTp2b2lkKGEudGFyZ2V0PT09YS5jdXJyZW50VGFyZ2V0JiYoXCJzdGF0aWNcIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoXCJpblwiKSwhYilyZXR1cm47Zj90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixiKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmIoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcyhcImluXCIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGJhY2tkcm9wLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGcpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6ZygpfWVsc2UgYiYmYigpfSxjLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmFkanVzdERpYWxvZygpfSxjLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmYT90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6XCJcIn0pfSxjLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OlwiXCIscGFkZGluZ1JpZ2h0OlwiXCJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiKXx8MCwxMCk7dGhpcy5vcmlnaW5hbEJvZHlQYWQ9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHR8fFwiXCIsdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIix0aGlzLm9yaWdpbmFsQm9keVBhZCl9LGMucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2EuY2xhc3NOYW1lPVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5tb2RhbC5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsZnVuY3Rpb24oYyl7dmFyIGQ9YSh0aGlzKSxlPWQuYXR0cihcImhyZWZcIiksZj1hKGQuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxlJiZlLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpLGc9Zi5kYXRhKFwiYnMubW9kYWxcIik/XCJ0b2dnbGVcIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoXCJhXCIpJiZjLnByZXZlbnREZWZhdWx0KCksZi5vbmUoXCJzaG93LmJzLm1vZGFsXCIsZnVuY3Rpb24oYSl7YS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5vbmUoXCJoaWRkZW4uYnMubW9kYWxcIixmdW5jdGlvbigpe2QuaXMoXCI6dmlzaWJsZVwiKSYmZC50cmlnZ2VyKFwiZm9jdXNcIil9KX0pLGIuY2FsbChmLGcsdGhpcyl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRvb2x0aXBcIiksZj1cIm9iamVjdFwiPT10eXBlb2YgYiYmYjshZSYmL2Rlc3Ryb3l8aGlkZS8udGVzdChiKXx8KGV8fGQuZGF0YShcImJzLnRvb2x0aXBcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KFwidG9vbHRpcFwiLGEsYil9O2MuVkVSU0lPTj1cIjMuMy43XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OlwidG9wXCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOlwiYm9keVwiLHBhZGRpbmc6MH19LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYixjLGQpe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9Yix0aGlzLiRlbGVtZW50PWEoYyksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgXCIrdGhpcy50eXBlK1wiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IVwiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoXCIgXCIpLGY9ZS5sZW5ndGg7Zi0tOyl7dmFyIGc9ZVtmXTtpZihcImNsaWNrXCI9PWcpdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZihcIm1hbnVhbFwiIT1nKXt2YXIgaD1cImhvdmVyXCI9PWc/XCJtb3VzZWVudGVyXCI6XCJmb2N1c2luXCIsaT1cImhvdmVyXCI9PWc/XCJtb3VzZWxlYXZlXCI6XCJmb2N1c291dFwiO3RoaXMuJGVsZW1lbnQub24oaCtcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGEucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihpK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuZml4VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5ERUZBVUxUU30sYy5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihiKXtyZXR1cm4gYj1hLmV4dGVuZCh7fSx0aGlzLmdldERlZmF1bHRzKCksdGhpcy4kZWxlbWVudC5kYXRhKCksYiksYi5kZWxheSYmXCJudW1iZXJcIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVtcImZvY3VzaW5cIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSEwKSxjLnRpcCgpLmhhc0NsYXNzKFwiaW5cIil8fFwiaW5cIj09Yy5ob3ZlclN0YXRlP3ZvaWQoYy5ob3ZlclN0YXRlPVwiaW5cIik6KGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cImluXCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJpblwiPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW2FdKXJldHVybiEwO3JldHVybiExfSxjLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtpZihjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlW1wiZm9jdXNvdXRcIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSExKSwhYy5pc0luU3RhdGVUcnVlKCkpcmV0dXJuIGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cIm91dFwiLGMub3B0aW9ucy5kZWxheSYmYy5vcHRpb25zLmRlbGF5LmhpZGU/dm9pZChjLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wib3V0XCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KFwic2hvdy5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihiKTt2YXIgZD1hLmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy4kZWxlbWVudFswXSk7aWYoYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IWQpcmV0dXJuO3ZhciBlPXRoaXMsZj10aGlzLnRpcCgpLGc9dGhpcy5nZXRVSUQodGhpcy50eXBlKTt0aGlzLnNldENvbnRlbnQoKSxmLmF0dHIoXCJpZFwiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixnKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZmLmFkZENsYXNzKFwiZmFkZVwiKTt2YXIgaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9cXHM/YXV0bz9cXHM/L2ksaj1pLnRlc3QoaCk7aiYmKGg9aC5yZXBsYWNlKGksXCJcIil8fFwidG9wXCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheTpcImJsb2NrXCJ9KS5hZGRDbGFzcyhoKS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLHRoaXMpLHRoaXMub3B0aW9ucy5jb250YWluZXI/Zi5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTpmLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImluc2VydGVkLmJzLlwiK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPVwiYm90dG9tXCI9PWgmJmsuYm90dG9tK20+by5ib3R0b20/XCJ0b3BcIjpcInRvcFwiPT1oJiZrLnRvcC1tPG8udG9wP1wiYm90dG9tXCI6XCJyaWdodFwiPT1oJiZrLnJpZ2h0K2w+by53aWR0aD9cImxlZnRcIjpcImxlZnRcIj09aCYmay5sZWZ0LWw8by5sZWZ0P1wicmlnaHRcIjpoLGYucmVtb3ZlQ2xhc3MobikuYWRkQ2xhc3MoaCl9dmFyIHA9dGhpcy5nZXRDYWxjdWxhdGVkT2Zmc2V0KGgsayxsLG0pO3RoaXMuYXBwbHlQbGFjZW1lbnQocCxoKTt2YXIgcT1mdW5jdGlvbigpe3ZhciBhPWUuaG92ZXJTdGF0ZTtlLiRlbGVtZW50LnRyaWdnZXIoXCJzaG93bi5icy5cIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLFwib3V0XCI9PWEmJmUubGVhdmUoZSl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoXCJmYWRlXCIpP2Yub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcyhcIm1hcmdpbi10b3BcIiksMTApLGg9cGFyc2VJbnQoZC5jc3MoXCJtYXJnaW4tbGVmdFwiKSwxMCk7aXNOYU4oZykmJihnPTApLGlzTmFOKGgpJiYoaD0wKSxiLnRvcCs9ZyxiLmxlZnQrPWgsYS5vZmZzZXQuc2V0T2Zmc2V0KGRbMF0sYS5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKGEpe2QuY3NzKHt0b3A6TWF0aC5yb3VuZChhLnRvcCksbGVmdDpNYXRoLnJvdW5kKGEubGVmdCl9KX19LGIpLDApLGQuYWRkQ2xhc3MoXCJpblwiKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7XCJ0b3BcIj09YyYmaiE9ZiYmKGIudG9wPWIudG9wK2Ytaik7dmFyIGs9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoYyxiLGksaik7ay5sZWZ0P2IubGVmdCs9ay5sZWZ0OmIudG9wKz1rLnRvcDt2YXIgbD0vdG9wfGJvdHRvbS8udGVzdChjKSxtPWw/MiprLmxlZnQtZStpOjIqay50b3AtZitqLG49bD9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjP1wibGVmdFwiOlwidG9wXCIsNTAqKDEtYS9iKStcIiVcIikuY3NzKGM/XCJ0b3BcIjpcImxlZnRcIixcIlwiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKFwiLnRvb2x0aXAtaW5uZXJcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEucmVtb3ZlQ2xhc3MoXCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodFwiKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKCl7XCJpblwiIT1lLmhvdmVyU3RhdGUmJmYuZGV0YWNoKCksZS4kZWxlbWVudCYmZS4kZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLlwiK2UudHlwZSksYiYmYigpfXZhciBlPXRoaXMsZj1hKHRoaXMuJHRpcCksZz1hLkV2ZW50KFwiaGlkZS5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm4gZi5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZmLmhhc0NsYXNzKFwiZmFkZVwiKT9mLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXN9LGMucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudDsoYS5hdHRyKFwidGl0bGVcIil8fFwic3RyaW5nXCIhPXR5cGVvZiBhLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpKSYmYS5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiLGEuYXR0cihcInRpdGxlXCIpfHxcIlwiKS5hdHRyKFwidGl0bGVcIixcIlwiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9XCJCT0RZXCI9PWMudGFnTmFtZSxlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09ZS53aWR0aCYmKGU9YS5leHRlbmQoe30sZSx7d2lkdGg6ZS5yaWdodC1lLmxlZnQsaGVpZ2h0OmUuYm90dG9tLWUudG9wfSkpO3ZhciBmPXdpbmRvdy5TVkdFbGVtZW50JiZjIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQsZz1kP3t0b3A6MCxsZWZ0OjB9OmY/bnVsbDpiLm9mZnNldCgpLGg9e3Njcm9sbDpkP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOmIuc2Nyb2xsVG9wKCl9LGk9ZD97d2lkdGg6YSh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OmEod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gYS5leHRlbmQoe30sZSxoLGksZyl9LGMucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuXCJib3R0b21cIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwidG9wXCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwibGVmdFwiPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQtY306e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdCtiLndpZHRofX0sYy5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXt0b3A6MCxsZWZ0OjB9O2lmKCF0aGlzLiR2aWV3cG9ydClyZXR1cm4gZTt2YXIgZj10aGlzLm9wdGlvbnMudmlld3BvcnQmJnRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nfHwwLGc9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7aWYoL3JpZ2h0fGxlZnQvLnRlc3QoYSkpe3ZhciBoPWIudG9wLWYtZy5zY3JvbGwsaT1iLnRvcCtmLWcuc2Nyb2xsK2Q7aDxnLnRvcD9lLnRvcD1nLnRvcC1oOmk+Zy50b3ArZy5oZWlnaHQmJihlLnRvcD1nLnRvcCtnLmhlaWdodC1pKX1lbHNle3ZhciBqPWIubGVmdC1mLGs9Yi5sZWZ0K2YrYztqPGcubGVmdD9lLmxlZnQ9Zy5sZWZ0LWo6az5nLnJpZ2h0JiYoZS5sZWZ0PWcubGVmdCtnLndpZHRoLWspfXJldHVybiBlfSxjLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kZWxlbWVudCxjPXRoaXMub3B0aW9ucztyZXR1cm4gYT1iLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtpZighdGhpcy4kdGlwJiYodGhpcy4kdGlwPWEodGhpcy5vcHRpb25zLnRlbXBsYXRlKSwxIT10aGlzLiR0aXAubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlK1wiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhXCIpO3JldHVybiB0aGlzLiR0aXB9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoXCIudG9vbHRpcC1hcnJvd1wiKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpKSxiPyhjLmluU3RhdGUuY2xpY2s9IWMuaW5TdGF0ZS5jbGljayxjLmlzSW5TdGF0ZVRydWUoKT9jLmVudGVyKGMpOmMubGVhdmUoYykpOmMudGlwKCkuaGFzQ2xhc3MoXCJpblwiKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKFwiLlwiK2EudHlwZSkucmVtb3ZlRGF0YShcImJzLlwiK2EudHlwZSksYS4kdGlwJiZhLiR0aXAuZGV0YWNoKCksYS4kdGlwPW51bGwsYS4kYXJyb3c9bnVsbCxhLiR2aWV3cG9ydD1udWxsLGEuJGVsZW1lbnQ9bnVsbH0pfTt2YXIgZD1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWIsYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWMsYS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b29sdGlwPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoXCJicy5wb3BvdmVyXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7IWUmJi9kZXN0cm95fGhpZGUvLnRlc3QoYil8fChlfHxkLmRhdGEoXCJicy5wb3BvdmVyXCIsZT1uZXcgYyh0aGlzLGYpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpKX0pfXZhciBjPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KFwicG9wb3ZlclwiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKFwiUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzXCIpO2MuVkVSU0lPTj1cIjMuMy43XCIsYy5ERUZBVUxUUz1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMse3BsYWNlbWVudDpcInJpZ2h0XCIsdHJpZ2dlcjpcImNsaWNrXCIsY29udGVudDpcIlwiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPjwvZGl2PjwvZGl2Pid9KSxjLnByb3RvdHlwZT1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKSxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRpcCgpLGI9dGhpcy5nZXRUaXRsZSgpLGM9dGhpcy5nZXRDb250ZW50KCk7YS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEuZmluZChcIi5wb3BvdmVyLWNvbnRlbnRcIikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD9cInN0cmluZ1wiPT10eXBlb2YgYz9cImh0bWxcIjpcImFwcGVuZFwiOlwidGV4dFwiXShjKSxhLnJlbW92ZUNsYXNzKFwiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW5cIiksYS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaHRtbCgpfHxhLmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cihcImRhdGEtY29udGVudFwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuY29udGVudD9iLmNvbnRlbnQuY2FsbChhWzBdKTpiLmNvbnRlbnQpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLmFycm93XCIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYyxkKXt0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kc2Nyb2xsRWxlbWVudD1hKGEoYykuaXMoZG9jdW1lbnQuYm9keSk/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fFwiXCIpK1wiIC5uYXYgbGkgPiBhXCIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbihcInNjcm9sbC5icy5zY3JvbGxzcHlcIixhLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9ZnVuY3Rpb24gYyhjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnNjcm9sbHNweVwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YShcImJzLnNjcm9sbHNweVwiLGU9bmV3IGIodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGMmJmVbY10oKX0pfWIuVkVSU0lPTj1cIjMuMy43XCIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPVwib2Zmc2V0XCIsZD0wO3RoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxhLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYz1cInBvc2l0aW9uXCIsZD10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKSx0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxlPWIuZGF0YShcInRhcmdldFwiKXx8Yi5hdHRyKFwiaHJlZlwiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKFwiOnZpc2libGVcIikmJltbZltjXSgpLnRvcCtkLGVdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlvbigpe2Iub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLGIudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LGIucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxjPXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0K2MtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxlPXRoaXMub2Zmc2V0cyxmPXRoaXMudGFyZ2V0cyxnPXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHRoaXMuc2Nyb2xsSGVpZ2h0IT1jJiZ0aGlzLnJlZnJlc2goKSxiPj1kKXJldHVybiBnIT0oYT1mW2YubGVuZ3RoLTFdKSYmdGhpcy5hY3RpdmF0ZShhKTtpZihnJiZiPGVbMF0pcmV0dXJuIHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5jbGVhcigpO2ZvcihhPWUubGVuZ3RoO2EtLTspZyE9ZlthXSYmYj49ZVthXSYmKHZvaWQgMD09PWVbYSsxXXx8YjxlW2ErMV0pJiZ0aGlzLmFjdGl2YXRlKGZbYV0pfSxiLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiKXtcbnRoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrYisnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2IrJ1wiXScsZD1hKGMpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtkLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKGQ9ZC5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLGQudHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIGQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9YyxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5zY3JvbGxzcHk9ZCx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yy5jYWxsKGIsYi5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRhYlwiKTtlfHxkLmRhdGEoXCJicy50YWJcIixlPW5ldyBjKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGM9ZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50PWEoYil9O2MuVkVSU0lPTj1cIjMuMy43XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KFwidWw6bm90KC5kcm9wZG93bi1tZW51KVwiKSxkPWIuZGF0YShcInRhcmdldFwiKTtpZihkfHwoZD1iLmF0dHIoXCJocmVmXCIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKSwhYi5wYXJlbnQoXCJsaVwiKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSl7dmFyIGU9Yy5maW5kKFwiLmFjdGl2ZTpsYXN0IGFcIiksZj1hLkV2ZW50KFwiaGlkZS5icy50YWJcIix7cmVsYXRlZFRhcmdldDpiWzBdfSksZz1hLkV2ZW50KFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDplWzBdfSk7aWYoZS50cmlnZ2VyKGYpLGIudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBoPWEoZCk7dGhpcy5hY3RpdmF0ZShiLmNsb3Nlc3QoXCJsaVwiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZTpcImhpZGRlbi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmJbMF19KSxiLnRyaWdnZXIoe3R5cGU6XCJzaG93bi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmVbMF19KX0pfX19LGMucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIsZCxlKXtmdW5jdGlvbiBmKCl7Zy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5maW5kKFwiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksYi5hZGRDbGFzcyhcImFjdGl2ZVwiKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSxoPyhiWzBdLm9mZnNldFdpZHRoLGIuYWRkQ2xhc3MoXCJpblwiKSk6Yi5yZW1vdmVDbGFzcyhcImZhZGVcIiksYi5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJmIuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLGUmJmUoKX12YXIgZz1kLmZpbmQoXCI+IC5hY3RpdmVcIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKFwiZmFkZVwiKXx8ISFkLmZpbmQoXCI+IC5mYWRlXCIpLmxlbmd0aCk7Zy5sZW5ndGgmJmg/Zy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKFwiaW5cIil9O3ZhciBkPWEuZm4udGFiO2EuZm4udGFiPWIsYS5mbi50YWIuQ29uc3RydWN0b3I9YyxhLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udGFiPWQsdGhpc307dmFyIGU9ZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwic2hvd1wiKX07YShkb2N1bWVudCkub24oXCJjbGljay5icy50YWIuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJyxlKS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmFmZml4XCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYWZmaXhcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKFwic2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpXCIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKFwiY2xpY2suYnMuYWZmaXguZGF0YS1hcGlcIixhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsdGhpcykpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLmFmZml4ZWQ9bnVsbCx0aGlzLnVucGluPW51bGwsdGhpcy5waW5uZWRPZmZzZXQ9bnVsbCx0aGlzLmNoZWNrUG9zaXRpb24oKX07Yy5WRVJTSU9OPVwiMy4zLjdcIixjLlJFU0VUPVwiYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbVwiLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmXCJ0b3BcIj09dGhpcy5hZmZpeGVkKXJldHVybiBlPGMmJlwidG9wXCI7aWYoXCJib3R0b21cIj09dGhpcy5hZmZpeGVkKXJldHVybiBudWxsIT1jPyEoZSt0aGlzLnVucGluPD1mLnRvcCkmJlwiYm90dG9tXCI6IShlK2c8PWEtZCkmJlwiYm90dG9tXCI7dmFyIGg9bnVsbD09dGhpcy5hZmZpeGVkLGk9aD9lOmYudG9wLGo9aD9nOmI7cmV0dXJuIG51bGwhPWMmJmU8PWM/XCJ0b3BcIjpudWxsIT1kJiZpK2o+PWEtZCYmXCJib3R0b21cIn0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoXCJhZmZpeFwiKTt2YXIgYT10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksYj10aGlzLiRlbGVtZW50Lm9mZnNldCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD1iLnRvcC1hfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikpe3ZhciBiPXRoaXMuJGVsZW1lbnQuaGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0LGU9ZC50b3AsZj1kLmJvdHRvbSxnPU1hdGgubWF4KGEoZG9jdW1lbnQpLmhlaWdodCgpLGEoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpO1wib2JqZWN0XCIhPXR5cGVvZiBkJiYoZj1lPWQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWQudG9wKHRoaXMuJGVsZW1lbnQpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBmJiYoZj1kLmJvdHRvbSh0aGlzLiRlbGVtZW50KSk7dmFyIGg9dGhpcy5nZXRTdGF0ZShnLGIsZSxmKTtpZih0aGlzLmFmZml4ZWQhPWgpe251bGwhPXRoaXMudW5waW4mJnRoaXMuJGVsZW1lbnQuY3NzKFwidG9wXCIsXCJcIik7dmFyIGk9XCJhZmZpeFwiKyhoP1wiLVwiK2g6XCJcIiksaj1hLkV2ZW50KGkrXCIuYnMuYWZmaXhcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGopLGouaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuYWZmaXhlZD1oLHRoaXMudW5waW49XCJib3R0b21cIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZShcImFmZml4XCIsXCJhZmZpeGVkXCIpK1wiLmJzLmFmZml4XCIpfVwiYm90dG9tXCI9PWgmJnRoaXMuJGVsZW1lbnQub2Zmc2V0KHt0b3A6Zy1iLWZ9KX19O3ZhciBkPWEuZm4uYWZmaXg7YS5mbi5hZmZpeD1iLGEuZm4uYWZmaXguQ29uc3RydWN0b3I9YyxhLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hZmZpeD1kLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweT1cImFmZml4XCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n");
-
-/***/ }),
-
-/***/ 50:
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var __WEBPACK_AMD_DEFINE_RESULT__;;(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (true) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn FastClick;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzPzk2ODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQixZQUFZLE9BQU8sWUFBWTtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQix5Q0FBeUM7QUFDL0Q7OztBQUdBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQyxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxZQUFZLFlBQVk7QUFDeEIsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE1BQU07QUFDbEIsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLFlBQVksT0FBTyxZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQUE7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiI1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIEBwcmVzZXJ2ZSBGYXN0Q2xpY2s6IHBvbHlmaWxsIHRvIHJlbW92ZSBjbGljayBkZWxheXMgb24gYnJvd3NlcnMgd2l0aCB0b3VjaCBVSXMuXG5cdCAqXG5cdCAqIEBjb2RpbmdzdGFuZGFyZCBmdGxhYnMtanN2MlxuXHQgKiBAY29weXJpZ2h0IFRoZSBGaW5hbmNpYWwgVGltZXMgTGltaXRlZCBbQWxsIFJpZ2h0cyBSZXNlcnZlZF1cblx0ICogQGxpY2Vuc2UgTUlUIExpY2Vuc2UgKHNlZSBMSUNFTlNFLnR4dClcblx0ICovXG5cblx0Lypqc2xpbnQgYnJvd3Nlcjp0cnVlLCBub2RlOnRydWUqL1xuXHQvKmdsb2JhbCBkZWZpbmUsIEV2ZW50LCBOb2RlKi9cblxuXG5cdC8qKlxuXHQgKiBJbnN0YW50aWF0ZSBmYXN0LWNsaWNraW5nIGxpc3RlbmVycyBvbiB0aGUgc3BlY2lmaWVkIGxheWVyLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtFbGVtZW50fSBsYXllciBUaGUgbGF5ZXIgdG8gbGlzdGVuIG9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzXG5cdCAqL1xuXHRmdW5jdGlvbiBGYXN0Q2xpY2sobGF5ZXIsIG9wdGlvbnMpIHtcblx0XHR2YXIgb2xkT25DbGljaztcblxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0LyoqXG5cdFx0ICogV2hldGhlciBhIGNsaWNrIGlzIGN1cnJlbnRseSBiZWluZyB0cmFja2VkLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgYm9vbGVhblxuXHRcdCAqL1xuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXG5cblx0XHQvKipcblx0XHQgKiBUaW1lc3RhbXAgZm9yIHdoZW4gY2xpY2sgdHJhY2tpbmcgc3RhcnRlZC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0ID0gMDtcblxuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGVsZW1lbnQgYmVpbmcgdHJhY2tlZCBmb3IgYSBjbGljay5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIEV2ZW50VGFyZ2V0XG5cdFx0ICovXG5cdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblxuXG5cdFx0LyoqXG5cdFx0ICogWC1jb29yZGluYXRlIG9mIHRvdWNoIHN0YXJ0IGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgbnVtYmVyXG5cdFx0ICovXG5cdFx0dGhpcy50b3VjaFN0YXJ0WCA9IDA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFktY29vcmRpbmF0ZSBvZiB0b3VjaCBzdGFydCBldmVudC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMudG91Y2hTdGFydFkgPSAwO1xuXG5cblx0XHQvKipcblx0XHQgKiBJRCBvZiB0aGUgbGFzdCB0b3VjaCwgcmV0cmlldmVkIGZyb20gVG91Y2guaWRlbnRpZmllci5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIG51bWJlclxuXHRcdCAqL1xuXHRcdHRoaXMubGFzdFRvdWNoSWRlbnRpZmllciA9IDA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFRvdWNobW92ZSBib3VuZGFyeSwgYmV5b25kIHdoaWNoIGEgY2xpY2sgd2lsbCBiZSBjYW5jZWxsZWQuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBudW1iZXJcblx0XHQgKi9cblx0XHR0aGlzLnRvdWNoQm91bmRhcnkgPSBvcHRpb25zLnRvdWNoQm91bmRhcnkgfHwgMTA7XG5cblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBGYXN0Q2xpY2sgbGF5ZXIuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBFbGVtZW50XG5cdFx0ICovXG5cdFx0dGhpcy5sYXllciA9IGxheWVyO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdGltZSBiZXR3ZWVuIHRhcCh0b3VjaHN0YXJ0IGFuZCB0b3VjaGVuZCkgZXZlbnRzXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBudW1iZXJcblx0XHQgKi9cblx0XHR0aGlzLnRhcERlbGF5ID0gb3B0aW9ucy50YXBEZWxheSB8fCAyMDA7XG5cblx0XHQvKipcblx0XHQgKiBUaGUgbWF4aW11bSB0aW1lIGZvciBhIHRhcFxuXHRcdCAqXG5cdFx0ICogQHR5cGUgbnVtYmVyXG5cdFx0ICovXG5cdFx0dGhpcy50YXBUaW1lb3V0ID0gb3B0aW9ucy50YXBUaW1lb3V0IHx8IDcwMDtcblxuXHRcdGlmIChGYXN0Q2xpY2subm90TmVlZGVkKGxheWVyKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIEFuZHJvaWQgZG9uJ3QgaGF2ZSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuXHRcdGZ1bmN0aW9uIGJpbmQobWV0aG9kLCBjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTsgfTtcblx0XHR9XG5cblxuXHRcdHZhciBtZXRob2RzID0gWydvbk1vdXNlJywgJ29uQ2xpY2snLCAnb25Ub3VjaFN0YXJ0JywgJ29uVG91Y2hNb3ZlJywgJ29uVG91Y2hFbmQnLCAnb25Ub3VjaENhbmNlbCddO1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcztcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb250ZXh0W21ldGhvZHNbaV1dID0gYmluZChjb250ZXh0W21ldGhvZHNbaV1dLCBjb250ZXh0KTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnMgYXMgcmVxdWlyZWRcblx0XHRpZiAoZGV2aWNlSXNBbmRyb2lkKSB7XG5cdFx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2UsIHRydWUpO1xuXHRcdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHRcdGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2UsIHRydWUpO1xuXHRcdH1cblxuXHRcdGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrLCB0cnVlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIGZhbHNlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG5cdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsIGZhbHNlKTtcblx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbCwgZmFsc2UpO1xuXG5cdFx0Ly8gSGFjayBpcyByZXF1aXJlZCBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IEV2ZW50I3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAoZS5nLiBBbmRyb2lkIDIpXG5cdFx0Ly8gd2hpY2ggaXMgaG93IEZhc3RDbGljayBub3JtYWxseSBzdG9wcyBjbGljayBldmVudHMgYnViYmxpbmcgdG8gY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gdGhlIEZhc3RDbGlja1xuXHRcdC8vIGxheWVyIHdoZW4gdGhleSBhcmUgY2FuY2VsbGVkLlxuXHRcdGlmICghRXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbikge1xuXHRcdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0XHRcdHZhciBybXYgPSBOb2RlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0XHRcdHJtdi5jYWxsKGxheWVyLCB0eXBlLCBjYWxsYmFjay5oaWphY2tlZCB8fCBjYWxsYmFjaywgY2FwdHVyZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm12LmNhbGwobGF5ZXIsIHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0XHRcdHZhciBhZHYgPSBOb2RlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0XHRcdGFkdi5jYWxsKGxheWVyLCB0eXBlLCBjYWxsYmFjay5oaWphY2tlZCB8fCAoY2FsbGJhY2suaGlqYWNrZWQgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdFx0aWYgKCFldmVudC5wcm9wYWdhdGlvblN0b3BwZWQpIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2soZXZlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLCBjYXB0dXJlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZHYuY2FsbChsYXllciwgdHlwZSwgY2FsbGJhY2ssIGNhcHR1cmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIElmIGEgaGFuZGxlciBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoZSBlbGVtZW50J3Mgb25jbGljayBhdHRyaWJ1dGUsIGl0IHdpbGwgYmUgZmlyZWQgYmVmb3JlXG5cdFx0Ly8gRmFzdENsaWNrJ3Mgb25DbGljayBoYW5kbGVyLiBGaXggdGhpcyBieSBwdWxsaW5nIG91dCB0aGUgdXNlci1kZWZpbmVkIGhhbmRsZXIgZnVuY3Rpb24gYW5kXG5cdFx0Ly8gYWRkaW5nIGl0IGFzIGxpc3RlbmVyLlxuXHRcdGlmICh0eXBlb2YgbGF5ZXIub25jbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuXG5cdFx0XHQvLyBBbmRyb2lkIGJyb3dzZXIgb24gYXQgbGVhc3QgMy4yIHJlcXVpcmVzIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gaW4gbGF5ZXIub25jbGlja1xuXHRcdFx0Ly8gLSB0aGUgb2xkIG9uZSB3b24ndCB3b3JrIGlmIHBhc3NlZCB0byBhZGRFdmVudExpc3RlbmVyIGRpcmVjdGx5LlxuXHRcdFx0b2xkT25DbGljayA9IGxheWVyLm9uY2xpY2s7XG5cdFx0XHRsYXllci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdG9sZE9uQ2xpY2soZXZlbnQpO1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdFx0bGF5ZXIub25jbGljayA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogV2luZG93cyBQaG9uZSA4LjEgZmFrZXMgdXNlciBhZ2VudCBzdHJpbmcgdG8gbG9vayBsaWtlIEFuZHJvaWQgYW5kIGlQaG9uZS5cblx0KlxuXHQqIEB0eXBlIGJvb2xlYW5cblx0Ki9cblx0dmFyIGRldmljZUlzV2luZG93c1Bob25lID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiV2luZG93cyBQaG9uZVwiKSA+PSAwO1xuXG5cdC8qKlxuXHQgKiBBbmRyb2lkIHJlcXVpcmVzIGV4Y2VwdGlvbnMuXG5cdCAqXG5cdCAqIEB0eXBlIGJvb2xlYW5cblx0ICovXG5cdHZhciBkZXZpY2VJc0FuZHJvaWQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0FuZHJvaWQnKSA+IDAgJiYgIWRldmljZUlzV2luZG93c1Bob25lO1xuXG5cblx0LyoqXG5cdCAqIGlPUyByZXF1aXJlcyBleGNlcHRpb25zLlxuXHQgKlxuXHQgKiBAdHlwZSBib29sZWFuXG5cdCAqL1xuXHR2YXIgZGV2aWNlSXNJT1MgPSAvaVAoYWR8aG9uZXxvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIWRldmljZUlzV2luZG93c1Bob25lO1xuXG5cblx0LyoqXG5cdCAqIGlPUyA0IHJlcXVpcmVzIGFuIGV4Y2VwdGlvbiBmb3Igc2VsZWN0IGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAdHlwZSBib29sZWFuXG5cdCAqL1xuXHR2YXIgZGV2aWNlSXNJT1M0ID0gZGV2aWNlSXNJT1MgJiYgKC9PUyA0X1xcZChfXFxkKT8vKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG5cblx0LyoqXG5cdCAqIGlPUyA2LjAtNy4qIHJlcXVpcmVzIHRoZSB0YXJnZXQgZWxlbWVudCB0byBiZSBtYW51YWxseSBkZXJpdmVkXG5cdCAqXG5cdCAqIEB0eXBlIGJvb2xlYW5cblx0ICovXG5cdHZhciBkZXZpY2VJc0lPU1dpdGhCYWRUYXJnZXQgPSBkZXZpY2VJc0lPUyAmJiAoL09TIFs2LTddX1xcZC8pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cblx0LyoqXG5cdCAqIEJsYWNrQmVycnkgcmVxdWlyZXMgZXhjZXB0aW9ucy5cblx0ICpcblx0ICogQHR5cGUgYm9vbGVhblxuXHQgKi9cblx0dmFyIGRldmljZUlzQmxhY2tCZXJyeTEwID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdCQjEwJykgPiAwO1xuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIGVsZW1lbnQgcmVxdWlyZXMgYSBuYXRpdmUgY2xpY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IG5lZWRzIGEgbmF0aXZlIGNsaWNrXG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm5lZWRzQ2xpY2sgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cblx0XHQvLyBEb24ndCBzZW5kIGEgc3ludGhldGljIGNsaWNrIHRvIGRpc2FibGVkIGlucHV0cyAoaXNzdWUgIzYyKVxuXHRcdGNhc2UgJ2J1dHRvbic6XG5cdFx0Y2FzZSAnc2VsZWN0Jzpcblx0XHRjYXNlICd0ZXh0YXJlYSc6XG5cdFx0XHRpZiAodGFyZ2V0LmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdpbnB1dCc6XG5cblx0XHRcdC8vIEZpbGUgaW5wdXRzIG5lZWQgcmVhbCBjbGlja3Mgb24gaU9TIDYgZHVlIHRvIGEgYnJvd3NlciBidWcgKGlzc3VlICM2OClcblx0XHRcdGlmICgoZGV2aWNlSXNJT1MgJiYgdGFyZ2V0LnR5cGUgPT09ICdmaWxlJykgfHwgdGFyZ2V0LmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdsYWJlbCc6XG5cdFx0Y2FzZSAnaWZyYW1lJzogLy8gaU9TOCBob21lc2NyZWVuIGFwcHMgY2FuIHByZXZlbnQgZXZlbnRzIGJ1YmJsaW5nIGludG8gZnJhbWVzXG5cdFx0Y2FzZSAndmlkZW8nOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICgvXFxibmVlZHNjbGlja1xcYi8pLnRlc3QodGFyZ2V0LmNsYXNzTmFtZSk7XG5cdH07XG5cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBlbGVtZW50IHJlcXVpcmVzIGEgY2FsbCB0byBmb2N1cyB0byBzaW11bGF0ZSBjbGljayBpbnRvIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVzIGEgY2FsbCB0byBmb2N1cyB0byBzaW11bGF0ZSBuYXRpdmUgY2xpY2suXG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm5lZWRzRm9jdXMgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRzd2l0Y2ggKHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSAndGV4dGFyZWEnOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0Y2FzZSAnc2VsZWN0Jzpcblx0XHRcdHJldHVybiAhZGV2aWNlSXNBbmRyb2lkO1xuXHRcdGNhc2UgJ2lucHV0Jzpcblx0XHRcdHN3aXRjaCAodGFyZ2V0LnR5cGUpIHtcblx0XHRcdGNhc2UgJ2J1dHRvbic6XG5cdFx0XHRjYXNlICdjaGVja2JveCc6XG5cdFx0XHRjYXNlICdmaWxlJzpcblx0XHRcdGNhc2UgJ2ltYWdlJzpcblx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTm8gcG9pbnQgaW4gYXR0ZW1wdGluZyB0byBmb2N1cyBkaXNhYmxlZCBpbnB1dHNcblx0XHRcdHJldHVybiAhdGFyZ2V0LmRpc2FibGVkICYmICF0YXJnZXQucmVhZE9ubHk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAoL1xcYm5lZWRzZm9jdXNcXGIvKS50ZXN0KHRhcmdldC5jbGFzc05hbWUpO1xuXHRcdH1cblx0fTtcblxuXG5cdC8qKlxuXHQgKiBTZW5kIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEVsZW1lbnR9IHRhcmdldEVsZW1lbnRcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUuc2VuZENsaWNrID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpIHtcblx0XHR2YXIgY2xpY2tFdmVudCwgdG91Y2g7XG5cblx0XHQvLyBPbiBzb21lIEFuZHJvaWQgZGV2aWNlcyBhY3RpdmVFbGVtZW50IG5lZWRzIHRvIGJlIGJsdXJyZWQgb3RoZXJ3aXNlIHRoZSBzeW50aGV0aWMgY2xpY2sgd2lsbCBoYXZlIG5vIGVmZmVjdCAoIzI0KVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRhcmdldEVsZW1lbnQpIHtcblx0XHRcdGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdH1cblxuXHRcdHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG5cblx0XHQvLyBTeW50aGVzaXNlIGEgY2xpY2sgZXZlbnQsIHdpdGggYW4gZXh0cmEgYXR0cmlidXRlIHNvIGl0IGNhbiBiZSB0cmFja2VkXG5cdFx0Y2xpY2tFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuXHRcdGNsaWNrRXZlbnQuaW5pdE1vdXNlRXZlbnQodGhpcy5kZXRlcm1pbmVFdmVudFR5cGUodGFyZ2V0RWxlbWVudCksIHRydWUsIHRydWUsIHdpbmRvdywgMSwgdG91Y2guc2NyZWVuWCwgdG91Y2guc2NyZWVuWSwgdG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuXHRcdGNsaWNrRXZlbnQuZm9yd2FyZGVkVG91Y2hFdmVudCA9IHRydWU7XG5cdFx0dGFyZ2V0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGNsaWNrRXZlbnQpO1xuXHR9O1xuXG5cdEZhc3RDbGljay5wcm90b3R5cGUuZGV0ZXJtaW5lRXZlbnRUeXBlID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCkge1xuXG5cdFx0Ly9Jc3N1ZSAjMTU5OiBBbmRyb2lkIENocm9tZSBTZWxlY3QgQm94IGRvZXMgbm90IG9wZW4gd2l0aCBhIHN5bnRoZXRpYyBjbGljayBldmVudFxuXHRcdGlmIChkZXZpY2VJc0FuZHJvaWQgJiYgdGFyZ2V0RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ21vdXNlZG93bic7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICdjbGljayc7XG5cdH07XG5cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldHxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24odGFyZ2V0RWxlbWVudCkge1xuXHRcdHZhciBsZW5ndGg7XG5cblx0XHQvLyBJc3N1ZSAjMTYwOiBvbiBpT1MgNywgc29tZSBpbnB1dCBlbGVtZW50cyAoZS5nLiBkYXRlIGRhdGV0aW1lIG1vbnRoKSB0aHJvdyBhIHZhZ3VlIFR5cGVFcnJvciBvbiBzZXRTZWxlY3Rpb25SYW5nZS4gVGhlc2UgZWxlbWVudHMgZG9uJ3QgaGF2ZSBhbiBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZCBwcm9wZXJ0aWVzLCBidXQgdW5mb3J0dW5hdGVseSB0aGF0IGNhbid0IGJlIHVzZWQgZm9yIGRldGVjdGlvbiBiZWNhdXNlIGFjY2Vzc2luZyB0aGUgcHJvcGVydGllcyBhbHNvIHRocm93cyBhIFR5cGVFcnJvci4gSnVzdCBjaGVjayB0aGUgdHlwZSBpbnN0ZWFkLiBGaWxlZCBhcyBBcHBsZSBidWcgIzE1MTIyNzI0LlxuXHRcdGlmIChkZXZpY2VJc0lPUyAmJiB0YXJnZXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlICYmIHRhcmdldEVsZW1lbnQudHlwZS5pbmRleE9mKCdkYXRlJykgIT09IDAgJiYgdGFyZ2V0RWxlbWVudC50eXBlICE9PSAndGltZScgJiYgdGFyZ2V0RWxlbWVudC50eXBlICE9PSAnbW9udGgnKSB7XG5cdFx0XHRsZW5ndGggPSB0YXJnZXRFbGVtZW50LnZhbHVlLmxlbmd0aDtcblx0XHRcdHRhcmdldEVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2YgYSBzY3JvbGxhYmxlIGxheWVyIGFuZCBpZiBzbywgc2V0IGEgZmxhZyBvbiBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldHxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLnVwZGF0ZVNjcm9sbFBhcmVudCA9IGZ1bmN0aW9uKHRhcmdldEVsZW1lbnQpIHtcblx0XHR2YXIgc2Nyb2xsUGFyZW50LCBwYXJlbnRFbGVtZW50O1xuXG5cdFx0c2Nyb2xsUGFyZW50ID0gdGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQ7XG5cblx0XHQvLyBBdHRlbXB0IHRvIGRpc2NvdmVyIHdoZXRoZXIgdGhlIHRhcmdldCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBzY3JvbGxhYmxlIGxheWVyLiBSZS1jaGVjayBpZiB0aGVcblx0XHQvLyB0YXJnZXQgZWxlbWVudCB3YXMgbW92ZWQgdG8gYW5vdGhlciBwYXJlbnQuXG5cdFx0aWYgKCFzY3JvbGxQYXJlbnQgfHwgIXNjcm9sbFBhcmVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0cGFyZW50RWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGlmIChwYXJlbnRFbGVtZW50LnNjcm9sbEhlaWdodCA+IHBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KSB7XG5cdFx0XHRcdFx0c2Nyb2xsUGFyZW50ID0gcGFyZW50RWxlbWVudDtcblx0XHRcdFx0XHR0YXJnZXRFbGVtZW50LmZhc3RDbGlja1Njcm9sbFBhcmVudCA9IHBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0fSB3aGlsZSAocGFyZW50RWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWx3YXlzIHVwZGF0ZSB0aGUgc2Nyb2xsIHRvcCB0cmFja2VyIGlmIHBvc3NpYmxlLlxuXHRcdGlmIChzY3JvbGxQYXJlbnQpIHtcblx0XHRcdHNjcm9sbFBhcmVudC5mYXN0Q2xpY2tMYXN0U2Nyb2xsVG9wID0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcDtcblx0XHR9XG5cdH07XG5cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0RWxlbWVudFxuXHQgKiBAcmV0dXJucyB7RWxlbWVudHxFdmVudFRhcmdldH1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUuZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudFRhcmdldCA9IGZ1bmN0aW9uKGV2ZW50VGFyZ2V0KSB7XG5cblx0XHQvLyBPbiBzb21lIG9sZGVyIGJyb3dzZXJzIChub3RhYmx5IFNhZmFyaSBvbiBpT1MgNC4xIC0gc2VlIGlzc3VlICM1NikgdGhlIGV2ZW50IHRhcmdldCBtYXkgYmUgYSB0ZXh0IG5vZGUuXG5cdFx0aWYgKGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuXHRcdFx0cmV0dXJuIGV2ZW50VGFyZ2V0LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50VGFyZ2V0O1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE9uIHRvdWNoIHN0YXJ0LCByZWNvcmQgdGhlIHBvc2l0aW9uIGFuZCBzY3JvbGwgb2Zmc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR2YXIgdGFyZ2V0RWxlbWVudCwgdG91Y2gsIHNlbGVjdGlvbjtcblxuXHRcdC8vIElnbm9yZSBtdWx0aXBsZSB0b3VjaGVzLCBvdGhlcndpc2UgcGluY2gtdG8tem9vbSBpcyBwcmV2ZW50ZWQgaWYgYm90aCBmaW5nZXJzIGFyZSBvbiB0aGUgRmFzdENsaWNrIGVsZW1lbnQgKGlzc3VlICMxMTEpLlxuXHRcdGlmIChldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHRhcmdldEVsZW1lbnQgPSB0aGlzLmdldFRhcmdldEVsZW1lbnRGcm9tRXZlbnRUYXJnZXQoZXZlbnQudGFyZ2V0KTtcblx0XHR0b3VjaCA9IGV2ZW50LnRhcmdldFRvdWNoZXNbMF07XG5cblx0XHRpZiAoZGV2aWNlSXNJT1MpIHtcblxuXHRcdFx0Ly8gT25seSB0cnVzdGVkIGV2ZW50cyB3aWxsIGRlc2VsZWN0IHRleHQgb24gaU9TIChpc3N1ZSAjNDkpXG5cdFx0XHRzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgJiYgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFkZXZpY2VJc0lPUzQpIHtcblxuXHRcdFx0XHQvLyBXZWlyZCB0aGluZ3MgaGFwcGVuIG9uIGlPUyB3aGVuIGFuIGFsZXJ0IG9yIGNvbmZpcm0gZGlhbG9nIGlzIG9wZW5lZCBmcm9tIGEgY2xpY2sgZXZlbnQgY2FsbGJhY2sgKGlzc3VlICMyMyk6XG5cdFx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgbmV4dCB0YXBzIGFueXdoZXJlIGVsc2Ugb24gdGhlIHBhZ2UsIG5ldyB0b3VjaHN0YXJ0IGFuZCB0b3VjaGVuZCBldmVudHMgYXJlIGRpc3BhdGNoZWRcblx0XHRcdFx0Ly8gd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIHRoZSB0b3VjaCBldmVudCB0aGF0IHByZXZpb3VzbHkgdHJpZ2dlcmVkIHRoZSBjbGljayB0aGF0IHRyaWdnZXJlZCB0aGUgYWxlcnQuXG5cdFx0XHRcdC8vIFNhZGx5LCB0aGVyZSBpcyBhbiBpc3N1ZSBvbiBpT1MgNCB0aGF0IGNhdXNlcyBzb21lIG5vcm1hbCB0b3VjaCBldmVudHMgdG8gaGF2ZSB0aGUgc2FtZSBpZGVudGlmaWVyIGFzIGFuXG5cdFx0XHRcdC8vIGltbWVkaWF0ZWx5IHByZWNlZWRpbmcgdG91Y2ggZXZlbnQgKGlzc3VlICM1MiksIHNvIHRoaXMgZml4IGlzIHVuYXZhaWxhYmxlIG9uIHRoYXQgcGxhdGZvcm0uXG5cdFx0XHRcdC8vIElzc3VlIDEyMDogdG91Y2guaWRlbnRpZmllciBpcyAwIHdoZW4gQ2hyb21lIGRldiB0b29scyAnRW11bGF0ZSB0b3VjaCBldmVudHMnIGlzIHNldCB3aXRoIGFuIGlPUyBkZXZpY2UgVUEgc3RyaW5nLFxuXHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgYWxsIHRvdWNoIGV2ZW50cyB0byBiZSBpZ25vcmVkLiBBcyB0aGlzIGJsb2NrIG9ubHkgYXBwbGllcyB0byBpT1MsIGFuZCBpT1MgaWRlbnRpZmllcnMgYXJlIGFsd2F5cyBsb25nLFxuXHRcdFx0XHQvLyByYW5kb20gaW50ZWdlcnMsIGl0J3Mgc2FmZSB0byB0byBjb250aW51ZSBpZiB0aGUgaWRlbnRpZmllciBpcyAwIGhlcmUuXG5cdFx0XHRcdGlmICh0b3VjaC5pZGVudGlmaWVyICYmIHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMubGFzdFRvdWNoSWRlbnRpZmllcikge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5sYXN0VG91Y2hJZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtcblxuXHRcdFx0XHQvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBjaGlsZCBvZiBhIHNjcm9sbGFibGUgbGF5ZXIgKHVzaW5nIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaCkgYW5kOlxuXHRcdFx0XHQvLyAxKSB0aGUgdXNlciBkb2VzIGEgZmxpbmcgc2Nyb2xsIG9uIHRoZSBzY3JvbGxhYmxlIGxheWVyXG5cdFx0XHRcdC8vIDIpIHRoZSB1c2VyIHN0b3BzIHRoZSBmbGluZyBzY3JvbGwgd2l0aCBhbm90aGVyIHRhcFxuXHRcdFx0XHQvLyB0aGVuIHRoZSBldmVudC50YXJnZXQgb2YgdGhlIGxhc3QgJ3RvdWNoZW5kJyBldmVudCB3aWxsIGJlIHRoZSBlbGVtZW50IHRoYXQgd2FzIHVuZGVyIHRoZSB1c2VyJ3MgZmluZ2VyXG5cdFx0XHRcdC8vIHdoZW4gdGhlIGZsaW5nIHNjcm9sbCB3YXMgc3RhcnRlZCwgY2F1c2luZyBGYXN0Q2xpY2sgdG8gc2VuZCBhIGNsaWNrIGV2ZW50IHRvIHRoYXQgbGF5ZXIgLSB1bmxlc3MgYSBjaGVja1xuXHRcdFx0XHQvLyBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IGEgcGFyZW50IGxheWVyIHdhcyBub3Qgc2Nyb2xsZWQgYmVmb3JlIHNlbmRpbmcgYSBzeW50aGV0aWMgY2xpY2sgKGlzc3VlICM0MikuXG5cdFx0XHRcdHRoaXMudXBkYXRlU2Nyb2xsUGFyZW50KHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IHRydWU7XG5cdFx0dGhpcy50cmFja2luZ0NsaWNrU3RhcnQgPSBldmVudC50aW1lU3RhbXA7XG5cdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudDtcblxuXHRcdHRoaXMudG91Y2hTdGFydFggPSB0b3VjaC5wYWdlWDtcblx0XHR0aGlzLnRvdWNoU3RhcnRZID0gdG91Y2gucGFnZVk7XG5cblx0XHQvLyBQcmV2ZW50IHBoYW50b20gY2xpY2tzIG9uIGZhc3QgZG91YmxlLXRhcCAoaXNzdWUgIzM2KVxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy5sYXN0Q2xpY2tUaW1lKSA8IHRoaXMudGFwRGVsYXkpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblxuXHQvKipcblx0ICogQmFzZWQgb24gYSB0b3VjaG1vdmUgZXZlbnQgb2JqZWN0LCBjaGVjayB3aGV0aGVyIHRoZSB0b3VjaCBoYXMgbW92ZWQgcGFzdCBhIGJvdW5kYXJ5IHNpbmNlIGl0IHN0YXJ0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0RmFzdENsaWNrLnByb3RvdHlwZS50b3VjaEhhc01vdmVkID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR2YXIgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSwgYm91bmRhcnkgPSB0aGlzLnRvdWNoQm91bmRhcnk7XG5cblx0XHRpZiAoTWF0aC5hYnModG91Y2gucGFnZVggLSB0aGlzLnRvdWNoU3RhcnRYKSA+IGJvdW5kYXJ5IHx8IE1hdGguYWJzKHRvdWNoLnBhZ2VZIC0gdGhpcy50b3VjaFN0YXJ0WSkgPiBib3VuZGFyeSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgbGFzdCBwb3NpdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMudHJhY2tpbmdDbGljaykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIHRvdWNoIGhhcyBtb3ZlZCwgY2FuY2VsIHRoZSBjbGljayB0cmFja2luZ1xuXHRcdGlmICh0aGlzLnRhcmdldEVsZW1lbnQgIT09IHRoaXMuZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudFRhcmdldChldmVudC50YXJnZXQpIHx8IHRoaXMudG91Y2hIYXNNb3ZlZChldmVudCkpIHtcblx0XHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBBdHRlbXB0IHRvIGZpbmQgdGhlIGxhYmVsbGVkIGNvbnRyb2wgZm9yIHRoZSBnaXZlbiBsYWJlbCBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fEhUTUxMYWJlbEVsZW1lbnR9IGxhYmVsRWxlbWVudFxuXHQgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxuXHQgKi9cblx0RmFzdENsaWNrLnByb3RvdHlwZS5maW5kQ29udHJvbCA9IGZ1bmN0aW9uKGxhYmVsRWxlbWVudCkge1xuXG5cdFx0Ly8gRmFzdCBwYXRoIGZvciBuZXdlciBicm93c2VycyBzdXBwb3J0aW5nIHRoZSBIVE1MNSBjb250cm9sIGF0dHJpYnV0ZVxuXHRcdGlmIChsYWJlbEVsZW1lbnQuY29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gbGFiZWxFbGVtZW50LmNvbnRyb2w7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGJyb3dzZXJzIHVuZGVyIHRlc3QgdGhhdCBzdXBwb3J0IHRvdWNoIGV2ZW50cyBhbHNvIHN1cHBvcnQgdGhlIEhUTUw1IGh0bWxGb3IgYXR0cmlidXRlXG5cdFx0aWYgKGxhYmVsRWxlbWVudC5odG1sRm9yKSB7XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobGFiZWxFbGVtZW50Lmh0bWxGb3IpO1xuXHRcdH1cblxuXHRcdC8vIElmIG5vIGZvciBhdHRyaWJ1dGUgZXhpc3RzLCBhdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBsYWJlbGxhYmxlIGRlc2NlbmRhbnQgZWxlbWVudFxuXHRcdC8vIHRoZSBsaXN0IG9mIHdoaWNoIGlzIGRlZmluZWQgaGVyZTogaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZm9ybXMuaHRtbCNjYXRlZ29yeS1sYWJlbFxuXHRcdHJldHVybiBsYWJlbEVsZW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLCBpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSksIGtleWdlbiwgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHNlbGVjdCwgdGV4dGFyZWEnKTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBPbiB0b3VjaCBlbmQsIGRldGVybWluZSB3aGV0aGVyIHRvIHNlbmQgYSBjbGljayBldmVudCBhdCBvbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0dmFyIGZvckVsZW1lbnQsIHRyYWNraW5nQ2xpY2tTdGFydCwgdGFyZ2V0VGFnTmFtZSwgc2Nyb2xsUGFyZW50LCB0b3VjaCwgdGFyZ2V0RWxlbWVudCA9IHRoaXMudGFyZ2V0RWxlbWVudDtcblxuXHRcdGlmICghdGhpcy50cmFja2luZ0NsaWNrKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBQcmV2ZW50IHBoYW50b20gY2xpY2tzIG9uIGZhc3QgZG91YmxlLXRhcCAoaXNzdWUgIzM2KVxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy5sYXN0Q2xpY2tUaW1lKSA8IHRoaXMudGFwRGVsYXkpIHtcblx0XHRcdHRoaXMuY2FuY2VsTmV4dENsaWNrID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICgoZXZlbnQudGltZVN0YW1wIC0gdGhpcy50cmFja2luZ0NsaWNrU3RhcnQpID4gdGhpcy50YXBUaW1lb3V0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBSZXNldCB0byBwcmV2ZW50IHdyb25nIGNsaWNrIGNhbmNlbCBvbiBpbnB1dCAoaXNzdWUgIzE1NikuXG5cdFx0dGhpcy5jYW5jZWxOZXh0Q2xpY2sgPSBmYWxzZTtcblxuXHRcdHRoaXMubGFzdENsaWNrVGltZSA9IGV2ZW50LnRpbWVTdGFtcDtcblxuXHRcdHRyYWNraW5nQ2xpY2tTdGFydCA9IHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0O1xuXHRcdHRoaXMudHJhY2tpbmdDbGljayA9IGZhbHNlO1xuXHRcdHRoaXMudHJhY2tpbmdDbGlja1N0YXJ0ID0gMDtcblxuXHRcdC8vIE9uIHNvbWUgaU9TIGRldmljZXMsIHRoZSB0YXJnZXRFbGVtZW50IHN1cHBsaWVkIHdpdGggdGhlIGV2ZW50IGlzIGludmFsaWQgaWYgdGhlIGxheWVyXG5cdFx0Ly8gaXMgcGVyZm9ybWluZyBhIHRyYW5zaXRpb24gb3Igc2Nyb2xsLCBhbmQgaGFzIHRvIGJlIHJlLWRldGVjdGVkIG1hbnVhbGx5LiBOb3RlIHRoYXRcblx0XHQvLyBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHksIGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogdGhlIGV2ZW50IHRhcmdldCBpcyBjaGVja2VkIVxuXHRcdC8vIFNlZSBpc3N1ZSAjNTc7IGFsc28gZmlsZWQgYXMgcmRhcjovLzEzMDQ4NTg5IC5cblx0XHRpZiAoZGV2aWNlSXNJT1NXaXRoQmFkVGFyZ2V0KSB7XG5cdFx0XHR0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuXG5cdFx0XHQvLyBJbiBjZXJ0YWluIGNhc2VzIGFyZ3VtZW50cyBvZiBlbGVtZW50RnJvbVBvaW50IGNhbiBiZSBuZWdhdGl2ZSwgc28gcHJldmVudCBzZXR0aW5nIHRhcmdldEVsZW1lbnQgdG8gbnVsbFxuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2gucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIHRvdWNoLnBhZ2VZIC0gd2luZG93LnBhZ2VZT2Zmc2V0KSB8fCB0YXJnZXRFbGVtZW50O1xuXHRcdFx0dGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQgPSB0aGlzLnRhcmdldEVsZW1lbnQuZmFzdENsaWNrU2Nyb2xsUGFyZW50O1xuXHRcdH1cblxuXHRcdHRhcmdldFRhZ05hbWUgPSB0YXJnZXRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ2xhYmVsJykge1xuXHRcdFx0Zm9yRWxlbWVudCA9IHRoaXMuZmluZENvbnRyb2wodGFyZ2V0RWxlbWVudCk7XG5cdFx0XHRpZiAoZm9yRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0XHRpZiAoZGV2aWNlSXNBbmRyb2lkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0RWxlbWVudCA9IGZvckVsZW1lbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLm5lZWRzRm9jdXModGFyZ2V0RWxlbWVudCkpIHtcblxuXHRcdFx0Ly8gQ2FzZSAxOiBJZiB0aGUgdG91Y2ggc3RhcnRlZCBhIHdoaWxlIGFnbyAoYmVzdCBndWVzcyBpcyAxMDBtcyBiYXNlZCBvbiB0ZXN0cyBmb3IgaXNzdWUgIzM2KSB0aGVuIGZvY3VzIHdpbGwgYmUgdHJpZ2dlcmVkIGFueXdheS4gUmV0dXJuIGVhcmx5IGFuZCB1bnNldCB0aGUgdGFyZ2V0IGVsZW1lbnQgcmVmZXJlbmNlIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgY2xpY2sgd2lsbCBiZSBhbGxvd2VkIHRocm91Z2guXG5cdFx0XHQvLyBDYXNlIDI6IFdpdGhvdXQgdGhpcyBleGNlcHRpb24gZm9yIGlucHV0IGVsZW1lbnRzIHRhcHBlZCB3aGVuIHRoZSBkb2N1bWVudCBpcyBjb250YWluZWQgaW4gYW4gaWZyYW1lLCB0aGVuIGFueSBpbnB1dHRlZCB0ZXh0IHdvbid0IGJlIHZpc2libGUgZXZlbiB0aG91Z2ggdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyB1cGRhdGVkIGFzIHRoZSB1c2VyIHR5cGVzIChpc3N1ZSAjMzcpLlxuXHRcdFx0aWYgKChldmVudC50aW1lU3RhbXAgLSB0cmFja2luZ0NsaWNrU3RhcnQpID4gMTAwIHx8IChkZXZpY2VJc0lPUyAmJiB3aW5kb3cudG9wICE9PSB3aW5kb3cgJiYgdGFyZ2V0VGFnTmFtZSA9PT0gJ2lucHV0JykpIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5zZW5kQ2xpY2sodGFyZ2V0RWxlbWVudCwgZXZlbnQpO1xuXG5cdFx0XHQvLyBTZWxlY3QgZWxlbWVudHMgbmVlZCB0aGUgZXZlbnQgdG8gZ28gdGhyb3VnaCBvbiBpT1MgNCwgb3RoZXJ3aXNlIHRoZSBzZWxlY3RvciBtZW51IHdvbid0IG9wZW4uXG5cdFx0XHQvLyBBbHNvIHRoaXMgYnJlYWtzIG9wZW5pbmcgc2VsZWN0cyB3aGVuIFZvaWNlT3ZlciBpcyBhY3RpdmUgb24gaU9TNiwgaU9TNyAoYW5kIHBvc3NpYmx5IG90aGVycylcblx0XHRcdGlmICghZGV2aWNlSXNJT1MgfHwgdGFyZ2V0VGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChkZXZpY2VJc0lPUyAmJiAhZGV2aWNlSXNJT1M0KSB7XG5cblx0XHRcdC8vIERvbid0IHNlbmQgYSBzeW50aGV0aWMgY2xpY2sgZXZlbnQgaWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBwYXJlbnQgbGF5ZXIgdGhhdCB3YXMgc2Nyb2xsZWRcblx0XHRcdC8vIGFuZCB0aGlzIHRhcCBpcyBiZWluZyB1c2VkIHRvIHN0b3AgdGhlIHNjcm9sbGluZyAodXN1YWxseSBpbml0aWF0ZWQgYnkgYSBmbGluZyAtIGlzc3VlICM0MikuXG5cdFx0XHRzY3JvbGxQYXJlbnQgPSB0YXJnZXRFbGVtZW50LmZhc3RDbGlja1Njcm9sbFBhcmVudDtcblx0XHRcdGlmIChzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50LmZhc3RDbGlja0xhc3RTY3JvbGxUb3AgIT09IHNjcm9sbFBhcmVudC5zY3JvbGxUb3ApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJldmVudCB0aGUgYWN0dWFsIGNsaWNrIGZyb20gZ29pbmcgdGhvdWdoIC0gdW5sZXNzIHRoZSB0YXJnZXQgbm9kZSBpcyBtYXJrZWQgYXMgcmVxdWlyaW5nXG5cdFx0Ly8gcmVhbCBjbGlja3Mgb3IgaWYgaXQgaXMgaW4gdGhlIHdoaXRlbGlzdCBpbiB3aGljaCBjYXNlIG9ubHkgbm9uLXByb2dyYW1tYXRpYyBjbGlja3MgYXJlIHBlcm1pdHRlZC5cblx0XHRpZiAoIXRoaXMubmVlZHNDbGljayh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuc2VuZENsaWNrKHRhcmdldEVsZW1lbnQsIGV2ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblxuXHQvKipcblx0ICogT24gdG91Y2ggY2FuY2VsLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay5cblx0ICpcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hDYW5jZWwgPSBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRyYWNraW5nQ2xpY2sgPSBmYWxzZTtcblx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBudWxsO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIERldGVybWluZSBtb3VzZSBldmVudHMgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uTW91c2UgPSBmdW5jdGlvbihldmVudCkge1xuXG5cdFx0Ly8gSWYgYSB0YXJnZXQgZWxlbWVudCB3YXMgbmV2ZXIgc2V0IChiZWNhdXNlIGEgdG91Y2ggZXZlbnQgd2FzIG5ldmVyIGZpcmVkKSBhbGxvdyB0aGUgZXZlbnRcblx0XHRpZiAoIXRoaXMudGFyZ2V0RWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50LmZvcndhcmRlZFRvdWNoRXZlbnQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFByb2dyYW1tYXRpY2FsbHkgZ2VuZXJhdGVkIGV2ZW50cyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBlbGVtZW50IHNob3VsZCBiZSBwZXJtaXR0ZWRcblx0XHRpZiAoIWV2ZW50LmNhbmNlbGFibGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIERlcml2ZSBhbmQgY2hlY2sgdGhlIHRhcmdldCBlbGVtZW50IHRvIHNlZSB3aGV0aGVyIHRoZSBtb3VzZSBldmVudCBuZWVkcyB0byBiZSBwZXJtaXR0ZWQ7XG5cdFx0Ly8gdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZCwgcHJldmVudCBub24tdG91Y2ggY2xpY2sgZXZlbnRzIGZyb20gdHJpZ2dlcmluZyBhY3Rpb25zLFxuXHRcdC8vIHRvIHByZXZlbnQgZ2hvc3QvZG91YmxlY2xpY2tzLlxuXHRcdGlmICghdGhpcy5uZWVkc0NsaWNrKHRoaXMudGFyZ2V0RWxlbWVudCkgfHwgdGhpcy5jYW5jZWxOZXh0Q2xpY2spIHtcblxuXHRcdFx0Ly8gUHJldmVudCBhbnkgdXNlci1hZGRlZCBsaXN0ZW5lcnMgZGVjbGFyZWQgb24gRmFzdENsaWNrIGVsZW1lbnQgZnJvbSBiZWluZyBmaXJlZC5cblx0XHRcdGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFBhcnQgb2YgdGhlIGhhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBFdmVudCNzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gKGUuZy4gQW5kcm9pZCAyKVxuXHRcdFx0XHRldmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYW5jZWwgdGhlIGV2ZW50XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbW91c2UgZXZlbnQgaXMgcGVybWl0dGVkLCByZXR1cm4gdHJ1ZSBmb3IgdGhlIGFjdGlvbiB0byBnbyB0aHJvdWdoLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIE9uIGFjdHVhbCBjbGlja3MsIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSB0b3VjaC1nZW5lcmF0ZWQgY2xpY2ssIGEgY2xpY2sgYWN0aW9uIG9jY3VycmluZ1xuXHQgKiBuYXR1cmFsbHkgYWZ0ZXIgYSBkZWxheSBhZnRlciBhIHRvdWNoICh3aGljaCBuZWVkcyB0byBiZSBjYW5jZWxsZWQgdG8gYXZvaWQgZHVwbGljYXRpb24pLCBvclxuXHQgKiBhbiBhY3R1YWwgY2xpY2sgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLm9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdHZhciBwZXJtaXR0ZWQ7XG5cblx0XHQvLyBJdCdzIHBvc3NpYmxlIGZvciBhbm90aGVyIEZhc3RDbGljay1saWtlIGxpYnJhcnkgZGVsaXZlcmVkIHdpdGggdGhpcmQtcGFydHkgY29kZSB0byBmaXJlIGEgY2xpY2sgZXZlbnQgYmVmb3JlIEZhc3RDbGljayBkb2VzIChpc3N1ZSAjNDQpLiBJbiB0aGF0IGNhc2UsIHNldCB0aGUgY2xpY2stdHJhY2tpbmcgZmxhZyBiYWNrIHRvIGZhbHNlIGFuZCByZXR1cm4gZWFybHkuIFRoaXMgd2lsbCBjYXVzZSBvblRvdWNoRW5kIHRvIHJldHVybiBlYXJseS5cblx0XHRpZiAodGhpcy50cmFja2luZ0NsaWNrKSB7XG5cdFx0XHR0aGlzLnRhcmdldEVsZW1lbnQgPSBudWxsO1xuXHRcdFx0dGhpcy50cmFja2luZ0NsaWNrID0gZmFsc2U7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBWZXJ5IG9kZCBiZWhhdmlvdXIgb24gaU9TIChpc3N1ZSAjMTgpOiBpZiBhIHN1Ym1pdCBlbGVtZW50IGlzIHByZXNlbnQgaW5zaWRlIGEgZm9ybSBhbmQgdGhlIHVzZXIgaGl0cyBlbnRlciBpbiB0aGUgaU9TIHNpbXVsYXRvciBvciBjbGlja3MgdGhlIEdvIGJ1dHRvbiBvbiB0aGUgcG9wLXVwIE9TIGtleWJvYXJkIHRoZSBhIGtpbmQgb2YgJ2Zha2UnIGNsaWNrIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIHdpdGggdGhlIHN1Ym1pdC10eXBlIGlucHV0IGVsZW1lbnQgYXMgdGhlIHRhcmdldC5cblx0XHRpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdzdWJtaXQnICYmIGV2ZW50LmRldGFpbCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cGVybWl0dGVkID0gdGhpcy5vbk1vdXNlKGV2ZW50KTtcblxuXHRcdC8vIE9ubHkgdW5zZXQgdGFyZ2V0RWxlbWVudCBpZiB0aGUgY2xpY2sgaXMgbm90IHBlcm1pdHRlZC4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBjaGVjayBmb3IgIXRhcmdldEVsZW1lbnQgaW4gb25Nb3VzZSBmYWlscyBhbmQgdGhlIGJyb3dzZXIncyBjbGljayBkb2Vzbid0IGdvIHRocm91Z2guXG5cdFx0aWYgKCFwZXJtaXR0ZWQpIHtcblx0XHRcdHRoaXMudGFyZ2V0RWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgY2xpY2tzIGFyZSBwZXJtaXR0ZWQsIHJldHVybiB0cnVlIGZvciB0aGUgYWN0aW9uIHRvIGdvIHRocm91Z2guXG5cdFx0cmV0dXJuIHBlcm1pdHRlZDtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIEZhc3RDbGljaydzIGV2ZW50IGxpc3RlbmVycy5cblx0ICpcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRGYXN0Q2xpY2sucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGF5ZXIgPSB0aGlzLmxheWVyO1xuXG5cdFx0aWYgKGRldmljZUlzQW5kcm9pZCkge1xuXHRcdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHRcdGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZSwgdHJ1ZSk7XG5cdFx0XHRsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlLCB0cnVlKTtcblx0XHR9XG5cblx0XHRsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGljaywgdHJ1ZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgZmFsc2UpO1xuXHRcdGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG5cdFx0bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLm9uVG91Y2hDYW5jZWwsIGZhbHNlKTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBDaGVjayB3aGV0aGVyIEZhc3RDbGljayBpcyBuZWVkZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gbGF5ZXIgVGhlIGxheWVyIHRvIGxpc3RlbiBvblxuXHQgKi9cblx0RmFzdENsaWNrLm5vdE5lZWRlZCA9IGZ1bmN0aW9uKGxheWVyKSB7XG5cdFx0dmFyIG1ldGFWaWV3cG9ydDtcblx0XHR2YXIgY2hyb21lVmVyc2lvbjtcblx0XHR2YXIgYmxhY2tiZXJyeVZlcnNpb247XG5cdFx0dmFyIGZpcmVmb3hWZXJzaW9uO1xuXG5cdFx0Ly8gRGV2aWNlcyB0aGF0IGRvbid0IHN1cHBvcnQgdG91Y2ggZG9uJ3QgbmVlZCBGYXN0Q2xpY2tcblx0XHRpZiAodHlwZW9mIHdpbmRvdy5vbnRvdWNoc3RhcnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBDaHJvbWUgdmVyc2lvbiAtIHplcm8gZm9yIG90aGVyIGJyb3dzZXJzXG5cdFx0Y2hyb21lVmVyc2lvbiA9ICsoL0Nocm9tZVxcLyhbMC05XSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IFssMF0pWzFdO1xuXG5cdFx0aWYgKGNocm9tZVZlcnNpb24pIHtcblxuXHRcdFx0aWYgKGRldmljZUlzQW5kcm9pZCkge1xuXHRcdFx0XHRtZXRhVmlld3BvcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9dmlld3BvcnRdJyk7XG5cblx0XHRcdFx0aWYgKG1ldGFWaWV3cG9ydCkge1xuXHRcdFx0XHRcdC8vIENocm9tZSBvbiBBbmRyb2lkIHdpdGggdXNlci1zY2FsYWJsZT1cIm5vXCIgZG9lc24ndCBuZWVkIEZhc3RDbGljayAoaXNzdWUgIzg5KVxuXHRcdFx0XHRcdGlmIChtZXRhVmlld3BvcnQuY29udGVudC5pbmRleE9mKCd1c2VyLXNjYWxhYmxlPW5vJykgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQ2hyb21lIDMyIGFuZCBhYm92ZSB3aXRoIHdpZHRoPWRldmljZS13aWR0aCBvciBsZXNzIGRvbid0IG5lZWQgRmFzdENsaWNrXG5cdFx0XHRcdFx0aWYgKGNocm9tZVZlcnNpb24gPiAzMSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGggPD0gd2luZG93Lm91dGVyV2lkdGgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBDaHJvbWUgZGVza3RvcCBkb2Vzbid0IG5lZWQgRmFzdENsaWNrIChpc3N1ZSAjMTUpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZGV2aWNlSXNCbGFja0JlcnJ5MTApIHtcblx0XHRcdGJsYWNrYmVycnlWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblxcLyhbMC05XSopXFwuKFswLTldKikvKTtcblxuXHRcdFx0Ly8gQmxhY2tCZXJyeSAxMC4zKyBkb2VzIG5vdCByZXF1aXJlIEZhc3RjbGljayBsaWJyYXJ5LlxuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2Z0bGFicy9mYXN0Y2xpY2svaXNzdWVzLzI1MVxuXHRcdFx0aWYgKGJsYWNrYmVycnlWZXJzaW9uWzFdID49IDEwICYmIGJsYWNrYmVycnlWZXJzaW9uWzJdID49IDMpIHtcblx0XHRcdFx0bWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPXZpZXdwb3J0XScpO1xuXG5cdFx0XHRcdGlmIChtZXRhVmlld3BvcnQpIHtcblx0XHRcdFx0XHQvLyB1c2VyLXNjYWxhYmxlPW5vIGVsaW1pbmF0ZXMgY2xpY2sgZGVsYXkuXG5cdFx0XHRcdFx0aWYgKG1ldGFWaWV3cG9ydC5jb250ZW50LmluZGV4T2YoJ3VzZXItc2NhbGFibGU9bm8nKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB3aWR0aD1kZXZpY2Utd2lkdGggKG9yIGxlc3MgdGhhbiBkZXZpY2Utd2lkdGgpIGVsaW1pbmF0ZXMgY2xpY2sgZGVsYXkuXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCA8PSB3aW5kb3cub3V0ZXJXaWR0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSUUxMCB3aXRoIC1tcy10b3VjaC1hY3Rpb246IG5vbmUgb3IgbWFuaXB1bGF0aW9uLCB3aGljaCBkaXNhYmxlcyBkb3VibGUtdGFwLXRvLXpvb20gKGlzc3VlICM5Nylcblx0XHRpZiAobGF5ZXIuc3R5bGUubXNUb3VjaEFjdGlvbiA9PT0gJ25vbmUnIHx8IGxheWVyLnN0eWxlLnRvdWNoQWN0aW9uID09PSAnbWFuaXB1bGF0aW9uJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZWZveCB2ZXJzaW9uIC0gemVybyBmb3Igb3RoZXIgYnJvd3NlcnNcblx0XHRmaXJlZm94VmVyc2lvbiA9ICsoL0ZpcmVmb3hcXC8oWzAtOV0rKS8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCBbLDBdKVsxXTtcblxuXHRcdGlmIChmaXJlZm94VmVyc2lvbiA+PSAyNykge1xuXHRcdFx0Ly8gRmlyZWZveCAyNysgZG9lcyBub3QgaGF2ZSB0YXAgZGVsYXkgaWYgdGhlIGNvbnRlbnQgaXMgbm90IHpvb21hYmxlIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyODk2XG5cblx0XHRcdG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT12aWV3cG9ydF0nKTtcblx0XHRcdGlmIChtZXRhVmlld3BvcnQgJiYgKG1ldGFWaWV3cG9ydC5jb250ZW50LmluZGV4T2YoJ3VzZXItc2NhbGFibGU9bm8nKSAhPT0gLTEgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoIDw9IHdpbmRvdy5vdXRlcldpZHRoKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJRTExOiBwcmVmaXhlZCAtbXMtdG91Y2gtYWN0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYW5kIGl0J3MgcmVjb21lbmRlZCB0byB1c2Ugbm9uLXByZWZpeGVkIHZlcnNpb25cblx0XHQvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9hcHBzL0hoNzY3MzEzLmFzcHhcblx0XHRpZiAobGF5ZXIuc3R5bGUudG91Y2hBY3Rpb24gPT09ICdub25lJyB8fCBsYXllci5zdHlsZS50b3VjaEFjdGlvbiA9PT0gJ21hbmlwdWxhdGlvbicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBGYXN0Q2xpY2sgb2JqZWN0XG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gbGF5ZXIgVGhlIGxheWVyIHRvIGxpc3RlbiBvblxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0c1xuXHQgKi9cblx0RmFzdENsaWNrLmF0dGFjaCA9IGZ1bmN0aW9uKGxheWVyLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIG5ldyBGYXN0Q2xpY2sobGF5ZXIsIG9wdGlvbnMpO1xuXHR9O1xuXG5cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblxuXHRcdC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gRmFzdENsaWNrO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBGYXN0Q2xpY2suYXR0YWNoO1xuXHRcdG1vZHVsZS5leHBvcnRzLkZhc3RDbGljayA9IEZhc3RDbGljaztcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuRmFzdENsaWNrID0gRmFzdENsaWNrO1xuXHR9XG59KCkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2Zhc3RjbGljay9saWIvZmFzdGNsaWNrLmpzXG4vLyBtb2R1bGUgaWQgPSA1MFxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///50\n");
-
-/***/ }),
-
-/***/ 51:
-/***/ (function(module, exports) {
-
-eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! AdminLTE app.js\n* ================\n* Main JS application file for AdminLTE v2. This file\n* should be included in all pages. It controls some layout\n* options and implements exclusive AdminLTE plugins.\n*\n* @Author Almsaeed Studio\n* @Support <https://www.almsaeedstudio.com>\n* @Email <abdullah@almsaeedstudio.com>\n* @version 2.4.2\n* @repository git://github.com/almasaeed2010/AdminLTE.git\n* @license MIT <http://opensource.org/licenses/MIT>\n*/\nif (\"undefined\" == typeof jQuery) throw new Error(\"AdminLTE requires jQuery\");+function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n g = e.data(c);if (!g) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, g = new f(e, h));\n }if (\"string\" == typeof g) {\n if (void 0 === g[b]) throw new Error(\"No method named \" + b);g[b]();\n }\n });\n }var c = \"lte.boxrefresh\",\n d = { source: \"\", params: {}, trigger: \".refresh-btn\", content: \".box-body\", loadInContent: !0, responseType: \"\", overlayTemplate: '<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>', onLoadStart: function onLoadStart() {}, onLoadDone: function onLoadDone(a) {\n return a;\n } },\n e = { data: '[data-widget=\"box-refresh\"]' },\n f = function f(b, c) {\n if (this.element = b, this.options = c, this.$overlay = a(c.overlay), \"\" === c.source) throw new Error(\"Source url was not defined. Please specify a url in your BoxRefresh source option.\");this._setUpListeners(), this.load();\n };f.prototype.load = function () {\n this._addOverlay(), this.options.onLoadStart.call(a(this)), a.get(this.options.source, this.options.params, function (b) {\n this.options.loadInContent && a(this.options.content).html(b), this.options.onLoadDone.call(a(this), b), this._removeOverlay();\n }.bind(this), \"\" !== this.options.responseType && this.options.responseType);\n }, f.prototype._setUpListeners = function () {\n a(this.element).on(\"click\", e.trigger, function (a) {\n a && a.preventDefault(), this.load();\n }.bind(this));\n }, f.prototype._addOverlay = function () {\n a(this.element).append(this.$overlay);\n }, f.prototype._removeOverlay = function () {\n a(this.element).remove(this.$overlay);\n };var g = a.fn.boxRefresh;a.fn.boxRefresh = b, a.fn.boxRefresh.Constructor = f, a.fn.boxRefresh.noConflict = function () {\n return a.fn.boxRefresh = g, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(e, g));\n }if (\"string\" == typeof b) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.boxwidget\",\n d = { animationSpeed: 500, collapseTrigger: '[data-widget=\"collapse\"]', removeTrigger: '[data-widget=\"remove\"]', collapseIcon: \"fa-minus\", expandIcon: \"fa-plus\", removeIcon: \"fa-times\" },\n e = { data: \".box\", collapsed: \".collapsed-box\", header: \".box-header\", body: \".box-body\", footer: \".box-footer\", tools: \".box-tools\" },\n f = { collapsed: \"collapsed-box\" },\n g = { collapsed: \"collapsed.boxwidget\", expanded: \"expanded.boxwidget\", removed: \"removed.boxwidget\" },\n h = function h(a, b) {\n this.element = a, this.options = b, this._setUpListeners();\n };h.prototype.toggle = function () {\n a(this.element).is(e.collapsed) ? this.expand() : this.collapse();\n }, h.prototype.expand = function () {\n var b = a.Event(g.expanded),\n c = this.options.collapseIcon,\n d = this.options.expandIcon;a(this.element).removeClass(f.collapsed), a(this.element).children(e.header + \", \" + e.body + \", \" + e.footer).children(e.tools).find(\".\" + d).removeClass(d).addClass(c), a(this.element).children(e.body + \", \" + e.footer).slideDown(this.options.animationSpeed, function () {\n a(this.element).trigger(b);\n }.bind(this));\n }, h.prototype.collapse = function () {\n var b = a.Event(g.collapsed),\n c = this.options.collapseIcon,\n d = this.options.expandIcon;a(this.element).children(e.header + \", \" + e.body + \", \" + e.footer).children(e.tools).find(\".\" + c).removeClass(c).addClass(d), a(this.element).children(e.body + \", \" + e.footer).slideUp(this.options.animationSpeed, function () {\n a(this.element).addClass(f.collapsed), a(this.element).trigger(b);\n }.bind(this));\n }, h.prototype.remove = function () {\n var b = a.Event(g.removed);a(this.element).slideUp(this.options.animationSpeed, function () {\n a(this.element).trigger(b), a(this.element).remove();\n }.bind(this));\n }, h.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"click\", this.options.collapseTrigger, function (c) {\n return c && c.preventDefault(), b.toggle(a(this)), !1;\n }), a(this.element).on(\"click\", this.options.removeTrigger, function (c) {\n return c && c.preventDefault(), b.remove(a(this)), !1;\n });\n };var i = a.fn.boxWidget;a.fn.boxWidget = b, a.fn.boxWidget.Constructor = h, a.fn.boxWidget.noConflict = function () {\n return a.fn.boxWidget = i, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(e, g));\n }\"string\" == typeof b && f.toggle();\n });\n }var c = \"lte.controlsidebar\",\n d = { slide: !0 },\n e = { sidebar: \".control-sidebar\", data: '[data-toggle=\"control-sidebar\"]', open: \".control-sidebar-open\", bg: \".control-sidebar-bg\", wrapper: \".wrapper\", content: \".content-wrapper\", boxed: \".layout-boxed\" },\n f = { open: \"control-sidebar-open\", fixed: \"fixed\" },\n g = { collapsed: \"collapsed.controlsidebar\", expanded: \"expanded.controlsidebar\" },\n h = function h(a, b) {\n this.element = a, this.options = b, this.hasBindedResize = !1, this.init();\n };h.prototype.init = function () {\n a(this.element).is(e.data) || a(this).on(\"click\", this.toggle), this.fix(), a(window).resize(function () {\n this.fix();\n }.bind(this));\n }, h.prototype.toggle = function (b) {\n b && b.preventDefault(), this.fix(), a(e.sidebar).is(e.open) || a(\"body\").is(e.open) ? this.collapse() : this.expand();\n }, h.prototype.expand = function () {\n this.options.slide ? a(e.sidebar).addClass(f.open) : a(\"body\").addClass(f.open), a(this.element).trigger(a.Event(g.expanded));\n }, h.prototype.collapse = function () {\n a(\"body, \" + e.sidebar).removeClass(f.open), a(this.element).trigger(a.Event(g.collapsed));\n }, h.prototype.fix = function () {\n a(\"body\").is(e.boxed) && this._fixForBoxed(a(e.bg));\n }, h.prototype._fixForBoxed = function (b) {\n b.css({ position: \"absolute\", height: a(e.wrapper).height() });\n };var i = a.fn.controlSidebar;a.fn.controlSidebar = b, a.fn.controlSidebar.Constructor = h, a.fn.controlSidebar.noConflict = function () {\n return a.fn.controlSidebar = i, this;\n }, a(document).on(\"click\", e.data, function (c) {\n c && c.preventDefault(), b.call(a(this), \"toggle\");\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var d = a(this),\n e = d.data(c);e || d.data(c, e = new f(d)), \"string\" == typeof b && e.toggle(d);\n });\n }var c = \"lte.directchat\",\n d = { data: '[data-widget=\"chat-pane-toggle\"]', box: \".direct-chat\" },\n e = { open: \"direct-chat-contacts-open\" },\n f = function f(a) {\n this.element = a;\n };f.prototype.toggle = function (a) {\n a.parents(d.box).first().toggleClass(e.open);\n };var g = a.fn.directChat;a.fn.directChat = b, a.fn.directChat.Constructor = f, a.fn.directChat.noConflict = function () {\n return a.fn.directChat = g, this;\n }, a(document).on(\"click\", d.data, function (c) {\n c && c.preventDefault(), b.call(a(this), \"toggle\");\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new g(h));\n }if (\"string\" == typeof b) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.layout\",\n d = { slimscroll: !0, resetHeight: !0 },\n e = { wrapper: \".wrapper\", contentWrapper: \".content-wrapper\", layoutBoxed: \".layout-boxed\", mainFooter: \".main-footer\", mainHeader: \".main-header\", sidebar: \".sidebar\", controlSidebar: \".control-sidebar\", fixed: \".fixed\", sidebarMenu: \".sidebar-menu\", logo: \".main-header .logo\" },\n f = { fixed: \"fixed\", holdTransition: \"hold-transition\" },\n g = function g(a) {\n this.options = a, this.bindedResize = !1, this.activate();\n };g.prototype.activate = function () {\n this.fix(), this.fixSidebar(), a(\"body\").removeClass(f.holdTransition), this.options.resetHeight && a(\"body, html, \" + e.wrapper).css({ height: \"auto\", \"min-height\": \"100%\" }), this.bindedResize || (a(window).resize(function () {\n this.fix(), this.fixSidebar(), a(e.logo + \", \" + e.sidebar).one(\"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this));\n }.bind(this)), this.bindedResize = !0), a(e.sidebarMenu).on(\"expanded.tree\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this)), a(e.sidebarMenu).on(\"collapsed.tree\", function () {\n this.fix(), this.fixSidebar();\n }.bind(this));\n }, g.prototype.fix = function () {\n a(e.layoutBoxed + \" > \" + e.wrapper).css(\"overflow\", \"hidden\");var b = a(e.mainFooter).outerHeight() || 0,\n c = a(e.mainHeader).outerHeight() + b,\n d = a(window).height(),\n g = a(e.sidebar).height() || 0;if (a(\"body\").hasClass(f.fixed)) a(e.contentWrapper).css(\"min-height\", d - b);else {\n var h;d >= g ? (a(e.contentWrapper).css(\"min-height\", d - c), h = d - c) : (a(e.contentWrapper).css(\"min-height\", g), h = g);var i = a(e.controlSidebar);void 0 !== i && i.height() > h && a(e.contentWrapper).css(\"min-height\", i.height());\n }\n }, g.prototype.fixSidebar = function () {\n if (!a(\"body\").hasClass(f.fixed)) return void (void 0 !== a.fn.slimScroll && a(e.sidebar).slimScroll({ destroy: !0 }).height(\"auto\"));this.options.slimscroll && void 0 !== a.fn.slimScroll && a(e.sidebar).slimScroll({ height: a(window).height() - a(e.mainHeader).height() + \"px\" });\n };var h = a.fn.layout;a.fn.layout = b, a.fn.layout.Constuctor = g, a.fn.layout.noConflict = function () {\n return a.fn.layout = h, this;\n }, a(window).on(\"load\", function () {\n b.call(a(\"body\"));\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var g = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new h(g));\n }\"toggle\" === b && f.toggle();\n });\n }var c = \"lte.pushmenu\",\n d = { collapseScreenSize: 767, expandOnHover: !1, expandTransitionDelay: 200 },\n e = { collapsed: \".sidebar-collapse\", open: \".sidebar-open\", mainSidebar: \".main-sidebar\", contentWrapper: \".content-wrapper\", searchInput: \".sidebar-form .form-control\", button: '[data-toggle=\"push-menu\"]', mini: \".sidebar-mini\", expanded: \".sidebar-expanded-on-hover\", layoutFixed: \".fixed\" },\n f = { collapsed: \"sidebar-collapse\", open: \"sidebar-open\", mini: \"sidebar-mini\", expanded: \"sidebar-expanded-on-hover\", expandFeature: \"sidebar-mini-expand-feature\", layoutFixed: \"fixed\" },\n g = { expanded: \"expanded.pushMenu\", collapsed: \"collapsed.pushMenu\" },\n h = function h(a) {\n this.options = a, this.init();\n };h.prototype.init = function () {\n (this.options.expandOnHover || a(\"body\").is(e.mini + e.layoutFixed)) && (this.expandOnHover(), a(\"body\").addClass(f.expandFeature)), a(e.contentWrapper).click(function () {\n a(window).width() <= this.options.collapseScreenSize && a(\"body\").hasClass(f.open) && this.close();\n }.bind(this)), a(e.searchInput).click(function (a) {\n a.stopPropagation();\n });\n }, h.prototype.toggle = function () {\n var b = a(window).width(),\n c = !a(\"body\").hasClass(f.collapsed);b <= this.options.collapseScreenSize && (c = a(\"body\").hasClass(f.open)), c ? this.close() : this.open();\n }, h.prototype.open = function () {\n a(window).width() > this.options.collapseScreenSize ? a(\"body\").removeClass(f.collapsed).trigger(a.Event(g.expanded)) : a(\"body\").addClass(f.open).trigger(a.Event(g.expanded));\n }, h.prototype.close = function () {\n a(window).width() > this.options.collapseScreenSize ? a(\"body\").addClass(f.collapsed).trigger(a.Event(g.collapsed)) : a(\"body\").removeClass(f.open + \" \" + f.collapsed).trigger(a.Event(g.collapsed));\n }, h.prototype.expandOnHover = function () {\n a(e.mainSidebar).hover(function () {\n a(\"body\").is(e.mini + e.collapsed) && a(window).width() > this.options.collapseScreenSize && this.expand();\n }.bind(this), function () {\n a(\"body\").is(e.expanded) && this.collapse();\n }.bind(this));\n }, h.prototype.expand = function () {\n setTimeout(function () {\n a(\"body\").removeClass(f.collapsed).addClass(f.expanded);\n }, this.options.expandTransitionDelay);\n }, h.prototype.collapse = function () {\n setTimeout(function () {\n a(\"body\").removeClass(f.expanded).addClass(f.collapsed);\n }, this.options.expandTransitionDelay);\n };var i = a.fn.pushMenu;a.fn.pushMenu = b, a.fn.pushMenu.Constructor = h, a.fn.pushMenu.noConflict = function () {\n return a.fn.pushMenu = i, this;\n }, a(document).on(\"click\", e.button, function (c) {\n c.preventDefault(), b.call(a(this), \"toggle\");\n }), a(window).on(\"load\", function () {\n b.call(a(e.button));\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this),\n f = e.data(c);if (!f) {\n var h = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, f = new g(e, h));\n }if (\"string\" == typeof f) {\n if (void 0 === f[b]) throw new Error(\"No method named \" + b);f[b]();\n }\n });\n }var c = \"lte.todolist\",\n d = { onCheck: function onCheck(a) {\n return a;\n }, onUnCheck: function onUnCheck(a) {\n return a;\n } },\n e = { data: '[data-widget=\"todo-list\"]' },\n f = { done: \"done\" },\n g = function g(a, b) {\n this.element = a, this.options = b, this._setUpListeners();\n };g.prototype.toggle = function (a) {\n if (a.parents(e.li).first().toggleClass(f.done), !a.prop(\"checked\")) return void this.unCheck(a);this.check(a);\n }, g.prototype.check = function (a) {\n this.options.onCheck.call(a);\n }, g.prototype.unCheck = function (a) {\n this.options.onUnCheck.call(a);\n }, g.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"change ifChanged\", \"input:checkbox\", function () {\n b.toggle(a(this));\n });\n };var h = a.fn.todoList;a.fn.todoList = b, a.fn.todoList.Constructor = g, a.fn.todoList.noConflict = function () {\n return a.fn.todoList = h, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery), function (a) {\n \"use strict\";\n function b(b) {\n return this.each(function () {\n var e = a(this);if (!e.data(c)) {\n var f = a.extend({}, d, e.data(), \"object\" == (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && b);e.data(c, new h(e, f));\n }\n });\n }var c = \"lte.tree\",\n d = { animationSpeed: 500, accordion: !0, followLink: !1, trigger: \".treeview a\" },\n e = { tree: \".tree\", treeview: \".treeview\", treeviewMenu: \".treeview-menu\", open: \".menu-open, .active\", li: \"li\", data: '[data-widget=\"tree\"]', active: \".active\" },\n f = { open: \"menu-open\", tree: \"tree\" },\n g = { collapsed: \"collapsed.tree\", expanded: \"expanded.tree\" },\n h = function h(b, c) {\n this.element = b, this.options = c, a(this.element).addClass(f.tree), a(e.treeview + e.active, this.element).addClass(f.open), this._setUpListeners();\n };h.prototype.toggle = function (a, b) {\n var c = a.next(e.treeviewMenu),\n d = a.parent(),\n g = d.hasClass(f.open);d.is(e.treeview) && (this.options.followLink && \"#\" !== a.attr(\"href\") || b.preventDefault(), g ? this.collapse(c, d) : this.expand(c, d));\n }, h.prototype.expand = function (b, c) {\n var d = a.Event(g.expanded);if (this.options.accordion) {\n var h = c.siblings(e.open),\n i = h.children(e.treeviewMenu);this.collapse(i, h);\n }c.addClass(f.open), b.slideDown(this.options.animationSpeed, function () {\n a(this.element).trigger(d);\n }.bind(this));\n }, h.prototype.collapse = function (b, c) {\n var d = a.Event(g.collapsed);b.find(e.open).removeClass(f.open), c.removeClass(f.open), b.slideUp(this.options.animationSpeed, function () {\n b.find(e.open + \" > \" + e.treeview).slideUp(), a(this.element).trigger(d);\n }.bind(this));\n }, h.prototype._setUpListeners = function () {\n var b = this;a(this.element).on(\"click\", this.options.trigger, function (c) {\n b.toggle(a(this), c);\n });\n };var i = a.fn.tree;a.fn.tree = b, a.fn.tree.Constructor = h, a.fn.tree.noConflict = function () {\n return a.fn.tree = i, this;\n }, a(window).on(\"load\", function () {\n a(e.data).each(function () {\n b.call(a(this));\n });\n });\n}(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qcz9jMDQ2Il0sIm5hbWVzIjpbImpRdWVyeSIsIkVycm9yIiwiYSIsImIiLCJlYWNoIiwiZSIsImciLCJkYXRhIiwiYyIsImgiLCJleHRlbmQiLCJkIiwiZiIsInNvdXJjZSIsInBhcmFtcyIsInRyaWdnZXIiLCJjb250ZW50IiwibG9hZEluQ29udGVudCIsInJlc3BvbnNlVHlwZSIsIm92ZXJsYXlUZW1wbGF0ZSIsIm9uTG9hZFN0YXJ0Iiwib25Mb2FkRG9uZSIsImVsZW1lbnQiLCJvcHRpb25zIiwiJG92ZXJsYXkiLCJvdmVybGF5IiwiX3NldFVwTGlzdGVuZXJzIiwibG9hZCIsInByb3RvdHlwZSIsIl9hZGRPdmVybGF5IiwiY2FsbCIsImdldCIsImh0bWwiLCJfcmVtb3ZlT3ZlcmxheSIsImJpbmQiLCJvbiIsInByZXZlbnREZWZhdWx0IiwiYXBwZW5kIiwicmVtb3ZlIiwiZm4iLCJib3hSZWZyZXNoIiwiQ29uc3RydWN0b3IiLCJub0NvbmZsaWN0Iiwid2luZG93IiwiYW5pbWF0aW9uU3BlZWQiLCJjb2xsYXBzZVRyaWdnZXIiLCJyZW1vdmVUcmlnZ2VyIiwiY29sbGFwc2VJY29uIiwiZXhwYW5kSWNvbiIsInJlbW92ZUljb24iLCJjb2xsYXBzZWQiLCJoZWFkZXIiLCJib2R5IiwiZm9vdGVyIiwidG9vbHMiLCJleHBhbmRlZCIsInJlbW92ZWQiLCJ0b2dnbGUiLCJpcyIsImV4cGFuZCIsImNvbGxhcHNlIiwiRXZlbnQiLCJyZW1vdmVDbGFzcyIsImNoaWxkcmVuIiwiZmluZCIsImFkZENsYXNzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImkiLCJib3hXaWRnZXQiLCJzbGlkZSIsInNpZGViYXIiLCJvcGVuIiwiYmciLCJ3cmFwcGVyIiwiYm94ZWQiLCJmaXhlZCIsImhhc0JpbmRlZFJlc2l6ZSIsImluaXQiLCJmaXgiLCJyZXNpemUiLCJfZml4Rm9yQm94ZWQiLCJjc3MiLCJwb3NpdGlvbiIsImhlaWdodCIsImNvbnRyb2xTaWRlYmFyIiwiZG9jdW1lbnQiLCJib3giLCJwYXJlbnRzIiwiZmlyc3QiLCJ0b2dnbGVDbGFzcyIsImRpcmVjdENoYXQiLCJzbGltc2Nyb2xsIiwicmVzZXRIZWlnaHQiLCJjb250ZW50V3JhcHBlciIsImxheW91dEJveGVkIiwibWFpbkZvb3RlciIsIm1haW5IZWFkZXIiLCJzaWRlYmFyTWVudSIsImxvZ28iLCJob2xkVHJhbnNpdGlvbiIsImJpbmRlZFJlc2l6ZSIsImFjdGl2YXRlIiwiZml4U2lkZWJhciIsIm9uZSIsIm91dGVySGVpZ2h0IiwiaGFzQ2xhc3MiLCJzbGltU2Nyb2xsIiwiZGVzdHJveSIsImxheW91dCIsIkNvbnN0dWN0b3IiLCJjb2xsYXBzZVNjcmVlblNpemUiLCJleHBhbmRPbkhvdmVyIiwiZXhwYW5kVHJhbnNpdGlvbkRlbGF5IiwibWFpblNpZGViYXIiLCJzZWFyY2hJbnB1dCIsImJ1dHRvbiIsIm1pbmkiLCJsYXlvdXRGaXhlZCIsImV4cGFuZEZlYXR1cmUiLCJjbGljayIsIndpZHRoIiwiY2xvc2UiLCJzdG9wUHJvcGFnYXRpb24iLCJob3ZlciIsInNldFRpbWVvdXQiLCJwdXNoTWVudSIsIm9uQ2hlY2siLCJvblVuQ2hlY2siLCJkb25lIiwibGkiLCJwcm9wIiwidW5DaGVjayIsImNoZWNrIiwidG9kb0xpc3QiLCJhY2NvcmRpb24iLCJmb2xsb3dMaW5rIiwidHJlZSIsInRyZWV2aWV3IiwidHJlZXZpZXdNZW51IiwiYWN0aXZlIiwibmV4dCIsInBhcmVudCIsImF0dHIiLCJzaWJsaW5ncyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7Ozs7OztBQWFBLElBQUcsZUFBYSxPQUFPQSxNQUF2QixFQUE4QixNQUFNLElBQUlDLEtBQUosQ0FBVSwwQkFBVixDQUFOLENBQTRDLENBQUMsVUFBU0MsQ0FBVCxFQUFXO0FBQUM7QUFBYSxXQUFTQyxDQUFULENBQVdBLENBQVgsRUFBYTtB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LENBQXhCLENBQTFDO0FBQXFFLEtBQWhGLENBQWlGdUIsSUFBakYsQ0FBc0YsSUFBdEYsQ0FBdEMsQ0FBekQ7QUFBNEwsR0FBcnVCLEVBQXN1QnpCLEVBQUVtQixTQUFGLENBQVlGLGVBQVosR0FBNEIsWUFBVTtBQUFDLFFBQUl2QixJQUFFLElBQU4sQ0FBV0QsRUFBRSxLQUFLb0IsT0FBUCxFQUFnQmEsRUFBaEIsQ0FBbUIsT0FBbkIsRUFBMkIsS0FBS1osT0FBTCxDQUFhUixPQUF4QyxFQUFnRCxVQUFTUCxDQUFULEVBQVc7QUFBQ0wsUUFBRXNELE1BQUYsQ0FBU3ZELEVBQUUsSUFBRixDQUFULEVBQWlCTSxDQUFqQjtBQUFvQixLQUFoRjtBQUFrRixHQUExMkIsQ0FBMjJCLElBQUk0RCxJQUFFbEUsRUFBRXFDLEVBQUYsQ0FBS2tHLElBQVgsQ0FBZ0J2SSxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxHQUFVdEksQ0FBVixFQUFZRCxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxDQUFVaEcsV0FBVixHQUFzQmhDLENBQWxDLEVBQW9DUCxFQUFFcUMsRUFBRixDQUFLa0csSUFBTCxDQUFVL0YsVUFBVixHQUFxQixZQUFVO0FBQUMsV0FBT3hDLEVBQUVxQyxFQUFGLENBQUtrRyxJQUFMLEdBQVVyRSxDQUFWLEVBQVksSUFBbkI7QUFBd0IsR0FBNUYsRUFBNkZsRSxFQUFFeUMsTUFBRixFQUFVUixFQUFWLENBQWEsTUFBYixFQUFvQixZQUFVO0FBQUNqQyxNQUFFRyxFQUFFRSxJQUFKLEVBQVVILElBQVYsQ0FBZSxZQUFVO0FBQUNELFFBQUUyQixJQUFGLENBQU81QixFQUFFLElBQUYsQ0FBUDtBQUFnQixLQUExQztBQUE0QyxHQUEzRSxDQUE3RjtBQUEwSyxDQUFuckQsQ0FBb3JERixNQUFwckQsQ0FBN2dZIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohIEFkbWluTFRFIGFwcC5qc1xuKiA9PT09PT09PT09PT09PT09XG4qIE1haW4gSlMgYXBwbGljYXRpb24gZmlsZSBmb3IgQWRtaW5MVEUgdjIuIFRoaXMgZmlsZVxuKiBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYWxsIHBhZ2VzLiBJdCBjb250cm9scyBzb21lIGxheW91dFxuKiBvcHRpb25zIGFuZCBpbXBsZW1lbnRzIGV4Y2x1c2l2ZSBBZG1pbkxURSBwbHVnaW5zLlxuKlxuKiBAQXV0aG9yICBBbG1zYWVlZCBTdHVkaW9cbiogQFN1cHBvcnQgPGh0dHBzOi8vd3d3LmFsbXNhZWVkc3R1ZGlvLmNvbT5cbiogQEVtYWlsICAgPGFiZHVsbGFoQGFsbXNhZWVkc3R1ZGlvLmNvbT5cbiogQHZlcnNpb24gMi40LjJcbiogQHJlcG9zaXRvcnkgZ2l0Oi8vZ2l0aHViLmNvbS9hbG1hc2FlZWQyMDEwL0FkbWluTFRFLmdpdFxuKiBAbGljZW5zZSBNSVQgPGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+XG4qL1xuaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJBZG1pbkxURSByZXF1aXJlcyBqUXVlcnlcIik7K2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZz1lLmRhdGEoYyk7aWYoIWcpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGc9bmV3IGYoZSxoKSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGcpe2lmKHZvaWQgMD09PWdbYl0pdGhyb3cgbmV3IEVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFwiK2IpO2dbYl0oKX19KX12YXIgYz1cImx0ZS5ib3hyZWZyZXNoXCIsZD17c291cmNlOlwiXCIscGFyYW1zOnt9LHRyaWdnZXI6XCIucmVmcmVzaC1idG5cIixjb250ZW50OlwiLmJveC1ib2R5XCIsbG9hZEluQ29udGVudDohMCxyZXNwb25zZVR5cGU6XCJcIixvdmVybGF5VGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PGRpdiBjbGFzcz1cImZhIGZhLXJlZnJlc2ggZmEtc3BpblwiPjwvZGl2PjwvZGl2Picsb25Mb2FkU3RhcnQ6ZnVuY3Rpb24oKXt9LG9uTG9hZERvbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9fSxlPXtkYXRhOidbZGF0YS13aWRnZXQ9XCJib3gtcmVmcmVzaFwiXSd9LGY9ZnVuY3Rpb24oYixjKXtpZih0aGlzLmVsZW1lbnQ9Yix0aGlzLm9wdGlvbnM9Yyx0aGlzLiRvdmVybGF5PWEoYy5vdmVybGF5KSxcIlwiPT09Yy5zb3VyY2UpdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHVybCB3YXMgbm90IGRlZmluZWQuIFBsZWFzZSBzcGVjaWZ5IGEgdXJsIGluIHlvdXIgQm94UmVmcmVzaCBzb3VyY2Ugb3B0aW9uLlwiKTt0aGlzLl9zZXRVcExpc3RlbmVycygpLHRoaXMubG9hZCgpfTtmLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5fYWRkT3ZlcmxheSgpLHRoaXMub3B0aW9ucy5vbkxvYWRTdGFydC5jYWxsKGEodGhpcykpLGEuZ2V0KHRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5vcHRpb25zLnBhcmFtcyxmdW5jdGlvbihiKXt0aGlzLm9wdGlvbnMubG9hZEluQ29udGVudCYmYSh0aGlzLm9wdGlvbnMuY29udGVudCkuaHRtbChiKSx0aGlzLm9wdGlvbnMub25Mb2FkRG9uZS5jYWxsKGEodGhpcyksYiksdGhpcy5fcmVtb3ZlT3ZlcmxheSgpfS5iaW5kKHRoaXMpLFwiXCIhPT10aGlzLm9wdGlvbnMucmVzcG9uc2VUeXBlJiZ0aGlzLm9wdGlvbnMucmVzcG9uc2VUeXBlKX0sZi5wcm90b3R5cGUuX3NldFVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2xpY2tcIixlLnRyaWdnZXIsZnVuY3Rpb24oYSl7YSYmYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubG9hZCgpfS5iaW5kKHRoaXMpKX0sZi5wcm90b3R5cGUuX2FkZE92ZXJsYXk9ZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuYXBwZW5kKHRoaXMuJG92ZXJsYXkpfSxmLnByb3RvdHlwZS5fcmVtb3ZlT3ZlcmxheT1mdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS5yZW1vdmUodGhpcy4kb3ZlcmxheSl9O3ZhciBnPWEuZm4uYm94UmVmcmVzaDthLmZuLmJveFJlZnJlc2g9YixhLmZuLmJveFJlZnJlc2guQ29uc3RydWN0b3I9ZixhLmZuLmJveFJlZnJlc2gubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJveFJlZnJlc2g9Zyx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXthKGUuZGF0YSkuZWFjaChmdW5jdGlvbigpe2IuY2FsbChhKHRoaXMpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShjKTtpZighZil7dmFyIGc9YS5leHRlbmQoe30sZCxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7ZS5kYXRhKGMsZj1uZXcgaChlLGcpKX1pZihcInN0cmluZ1wiPT10eXBlb2YgYil7aWYodm9pZCAwPT09ZltiXSl0aHJvdyBuZXcgRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXCIrYik7ZltiXSgpfX0pfXZhciBjPVwibHRlLmJveHdpZGdldFwiLGQ9e2FuaW1hdGlvblNwZWVkOjUwMCxjb2xsYXBzZVRyaWdnZXI6J1tkYXRhLXdpZGdldD1cImNvbGxhcHNlXCJdJyxyZW1vdmVUcmlnZ2VyOidbZGF0YS13aWRnZXQ9XCJyZW1vdmVcIl0nLGNvbGxhcHNlSWNvbjpcImZhLW1pbnVzXCIsZXhwYW5kSWNvbjpcImZhLXBsdXNcIixyZW1vdmVJY29uOlwiZmEtdGltZXNcIn0sZT17ZGF0YTpcIi5ib3hcIixjb2xsYXBzZWQ6XCIuY29sbGFwc2VkLWJveFwiLGhlYWRlcjpcIi5ib3gtaGVhZGVyXCIsYm9keTpcIi5ib3gtYm9keVwiLGZvb3RlcjpcIi5ib3gtZm9vdGVyXCIsdG9vbHM6XCIuYm94LXRvb2xzXCJ9LGY9e2NvbGxhcHNlZDpcImNvbGxhcHNlZC1ib3hcIn0sZz17Y29sbGFwc2VkOlwiY29sbGFwc2VkLmJveHdpZGdldFwiLGV4cGFuZGVkOlwiZXhwYW5kZWQuYm94d2lkZ2V0XCIscmVtb3ZlZDpcInJlbW92ZWQuYm94d2lkZ2V0XCJ9LGg9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLl9zZXRVcExpc3RlbmVycygpfTtoLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuaXMoZS5jb2xsYXBzZWQpP3RoaXMuZXhwYW5kKCk6dGhpcy5jb2xsYXBzZSgpfSxoLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KGcuZXhwYW5kZWQpLGM9dGhpcy5vcHRpb25zLmNvbGxhcHNlSWNvbixkPXRoaXMub3B0aW9ucy5leHBhbmRJY29uO2EodGhpcy5lbGVtZW50KS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCksYSh0aGlzLmVsZW1lbnQpLmNoaWxkcmVuKGUuaGVhZGVyK1wiLCBcIitlLmJvZHkrXCIsIFwiK2UuZm9vdGVyKS5jaGlsZHJlbihlLnRvb2xzKS5maW5kKFwiLlwiK2QpLnJlbW92ZUNsYXNzKGQpLmFkZENsYXNzKGMpLGEodGhpcy5lbGVtZW50KS5jaGlsZHJlbihlLmJvZHkrXCIsIFwiK2UuZm9vdGVyKS5zbGlkZURvd24odGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkLGZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoYil9LmJpbmQodGhpcykpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3ZhciBiPWEuRXZlbnQoZy5jb2xsYXBzZWQpLGM9dGhpcy5vcHRpb25zLmNvbGxhcHNlSWNvbixkPXRoaXMub3B0aW9ucy5leHBhbmRJY29uO2EodGhpcy5lbGVtZW50KS5jaGlsZHJlbihlLmhlYWRlcitcIiwgXCIrZS5ib2R5K1wiLCBcIitlLmZvb3RlcikuY2hpbGRyZW4oZS50b29scykuZmluZChcIi5cIitjKS5yZW1vdmVDbGFzcyhjKS5hZGRDbGFzcyhkKSxhKHRoaXMuZWxlbWVudCkuY2hpbGRyZW4oZS5ib2R5K1wiLCBcIitlLmZvb3Rlcikuc2xpZGVVcCh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQsZnVuY3Rpb24oKXthKHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoZi5jb2xsYXBzZWQpLGEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGIpfS5iaW5kKHRoaXMpKX0saC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudChnLnJlbW92ZWQpO2EodGhpcy5lbGVtZW50KS5zbGlkZVVwKHRoaXMub3B0aW9ucy5hbmltYXRpb25TcGVlZCxmdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS50cmlnZ2VyKGIpLGEodGhpcy5lbGVtZW50KS5yZW1vdmUoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLl9zZXRVcExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBiPXRoaXM7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2xpY2tcIix0aGlzLm9wdGlvbnMuY29sbGFwc2VUcmlnZ2VyLGZ1bmN0aW9uKGMpe3JldHVybiBjJiZjLnByZXZlbnREZWZhdWx0KCksYi50b2dnbGUoYSh0aGlzKSksITF9KSxhKHRoaXMuZWxlbWVudCkub24oXCJjbGlja1wiLHRoaXMub3B0aW9ucy5yZW1vdmVUcmlnZ2VyLGZ1bmN0aW9uKGMpe3JldHVybiBjJiZjLnByZXZlbnREZWZhdWx0KCksYi5yZW1vdmUoYSh0aGlzKSksITF9KX07dmFyIGk9YS5mbi5ib3hXaWRnZXQ7YS5mbi5ib3hXaWRnZXQ9YixhLmZuLmJveFdpZGdldC5Db25zdHJ1Y3Rvcj1oLGEuZm4uYm94V2lkZ2V0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5ib3hXaWRnZXQ9aSx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXthKGUuZGF0YSkuZWFjaChmdW5jdGlvbigpe2IuY2FsbChhKHRoaXMpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShjKTtpZighZil7dmFyIGc9YS5leHRlbmQoe30sZCxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7ZS5kYXRhKGMsZj1uZXcgaChlLGcpKX1cInN0cmluZ1wiPT10eXBlb2YgYiYmZi50b2dnbGUoKX0pfXZhciBjPVwibHRlLmNvbnRyb2xzaWRlYmFyXCIsZD17c2xpZGU6ITB9LGU9e3NpZGViYXI6XCIuY29udHJvbC1zaWRlYmFyXCIsZGF0YTonW2RhdGEtdG9nZ2xlPVwiY29udHJvbC1zaWRlYmFyXCJdJyxvcGVuOlwiLmNvbnRyb2wtc2lkZWJhci1vcGVuXCIsYmc6XCIuY29udHJvbC1zaWRlYmFyLWJnXCIsd3JhcHBlcjpcIi53cmFwcGVyXCIsY29udGVudDpcIi5jb250ZW50LXdyYXBwZXJcIixib3hlZDpcIi5sYXlvdXQtYm94ZWRcIn0sZj17b3BlbjpcImNvbnRyb2wtc2lkZWJhci1vcGVuXCIsZml4ZWQ6XCJmaXhlZFwifSxnPXtjb2xsYXBzZWQ6XCJjb2xsYXBzZWQuY29udHJvbHNpZGViYXJcIixleHBhbmRlZDpcImV4cGFuZGVkLmNvbnRyb2xzaWRlYmFyXCJ9LGg9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLmhhc0JpbmRlZFJlc2l6ZT0hMSx0aGlzLmluaXQoKX07aC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2EodGhpcy5lbGVtZW50KS5pcyhlLmRhdGEpfHxhKHRoaXMpLm9uKFwiY2xpY2tcIix0aGlzLnRvZ2dsZSksdGhpcy5maXgoKSxhKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7dGhpcy5maXgoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXtiJiZiLnByZXZlbnREZWZhdWx0KCksdGhpcy5maXgoKSxhKGUuc2lkZWJhcikuaXMoZS5vcGVuKXx8YShcImJvZHlcIikuaXMoZS5vcGVuKT90aGlzLmNvbGxhcHNlKCk6dGhpcy5leHBhbmQoKX0saC5wcm90b3R5cGUuZXhwYW5kPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnNsaWRlP2EoZS5zaWRlYmFyKS5hZGRDbGFzcyhmLm9wZW4pOmEoXCJib2R5XCIpLmFkZENsYXNzKGYub3BlbiksYSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoYS5FdmVudChnLmV4cGFuZGVkKSl9LGgucHJvdG90eXBlLmNvbGxhcHNlPWZ1bmN0aW9uKCl7YShcImJvZHksIFwiK2Uuc2lkZWJhcikucmVtb3ZlQ2xhc3MoZi5vcGVuKSxhKHRoaXMuZWxlbWVudCkudHJpZ2dlcihhLkV2ZW50KGcuY29sbGFwc2VkKSl9LGgucHJvdG90eXBlLmZpeD1mdW5jdGlvbigpe2EoXCJib2R5XCIpLmlzKGUuYm94ZWQpJiZ0aGlzLl9maXhGb3JCb3hlZChhKGUuYmcpKX0saC5wcm90b3R5cGUuX2ZpeEZvckJveGVkPWZ1bmN0aW9uKGIpe2IuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsaGVpZ2h0OmEoZS53cmFwcGVyKS5oZWlnaHQoKX0pfTt2YXIgaT1hLmZuLmNvbnRyb2xTaWRlYmFyO2EuZm4uY29udHJvbFNpZGViYXI9YixhLmZuLmNvbnRyb2xTaWRlYmFyLkNvbnN0cnVjdG9yPWgsYS5mbi5jb250cm9sU2lkZWJhci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY29udHJvbFNpZGViYXI9aSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZS5kYXRhLGZ1bmN0aW9uKGMpe2MmJmMucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInRvZ2dsZVwiKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoYyk7ZXx8ZC5kYXRhKGMsZT1uZXcgZihkKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmUudG9nZ2xlKGQpfSl9dmFyIGM9XCJsdGUuZGlyZWN0Y2hhdFwiLGQ9e2RhdGE6J1tkYXRhLXdpZGdldD1cImNoYXQtcGFuZS10b2dnbGVcIl0nLGJveDpcIi5kaXJlY3QtY2hhdFwifSxlPXtvcGVuOlwiZGlyZWN0LWNoYXQtY29udGFjdHMtb3BlblwifSxmPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1hfTtmLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7YS5wYXJlbnRzKGQuYm94KS5maXJzdCgpLnRvZ2dsZUNsYXNzKGUub3Blbil9O3ZhciBnPWEuZm4uZGlyZWN0Q2hhdDthLmZuLmRpcmVjdENoYXQ9YixhLmZuLmRpcmVjdENoYXQuQ29uc3RydWN0b3I9ZixhLmZuLmRpcmVjdENoYXQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmRpcmVjdENoYXQ9Zyx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZC5kYXRhLGZ1bmN0aW9uKGMpe2MmJmMucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInRvZ2dsZVwiKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGcoaCkpfWlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtpZih2b2lkIDA9PT1mW2JdKXRocm93IG5ldyBFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcIitiKTtmW2JdKCl9fSl9dmFyIGM9XCJsdGUubGF5b3V0XCIsZD17c2xpbXNjcm9sbDohMCxyZXNldEhlaWdodDohMH0sZT17d3JhcHBlcjpcIi53cmFwcGVyXCIsY29udGVudFdyYXBwZXI6XCIuY29udGVudC13cmFwcGVyXCIsbGF5b3V0Qm94ZWQ6XCIubGF5b3V0LWJveGVkXCIsbWFpbkZvb3RlcjpcIi5tYWluLWZvb3RlclwiLG1haW5IZWFkZXI6XCIubWFpbi1oZWFkZXJcIixzaWRlYmFyOlwiLnNpZGViYXJcIixjb250cm9sU2lkZWJhcjpcIi5jb250cm9sLXNpZGViYXJcIixmaXhlZDpcIi5maXhlZFwiLHNpZGViYXJNZW51OlwiLnNpZGViYXItbWVudVwiLGxvZ286XCIubWFpbi1oZWFkZXIgLmxvZ29cIn0sZj17Zml4ZWQ6XCJmaXhlZFwiLGhvbGRUcmFuc2l0aW9uOlwiaG9sZC10cmFuc2l0aW9uXCJ9LGc9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWEsdGhpcy5iaW5kZWRSZXNpemU9ITEsdGhpcy5hY3RpdmF0ZSgpfTtnLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuZml4KCksdGhpcy5maXhTaWRlYmFyKCksYShcImJvZHlcIikucmVtb3ZlQ2xhc3MoZi5ob2xkVHJhbnNpdGlvbiksdGhpcy5vcHRpb25zLnJlc2V0SGVpZ2h0JiZhKFwiYm9keSwgaHRtbCwgXCIrZS53cmFwcGVyKS5jc3Moe2hlaWdodDpcImF1dG9cIixcIm1pbi1oZWlnaHRcIjpcIjEwMCVcIn0pLHRoaXMuYmluZGVkUmVzaXplfHwoYSh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe3RoaXMuZml4KCksdGhpcy5maXhTaWRlYmFyKCksYShlLmxvZ28rXCIsIFwiK2Uuc2lkZWJhcikub25lKFwid2Via2l0VHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCBvVHJhbnNpdGlvbkVuZCBtc1RyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZFwiLGZ1bmN0aW9uKCl7dGhpcy5maXgoKSx0aGlzLmZpeFNpZGViYXIoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpLHRoaXMuYmluZGVkUmVzaXplPSEwKSxhKGUuc2lkZWJhck1lbnUpLm9uKFwiZXhwYW5kZWQudHJlZVwiLGZ1bmN0aW9uKCl7dGhpcy5maXgoKSx0aGlzLmZpeFNpZGViYXIoKX0uYmluZCh0aGlzKSksYShlLnNpZGViYXJNZW51KS5vbihcImNvbGxhcHNlZC50cmVlXCIsZnVuY3Rpb24oKXt0aGlzLmZpeCgpLHRoaXMuZml4U2lkZWJhcigpfS5iaW5kKHRoaXMpKX0sZy5wcm90b3R5cGUuZml4PWZ1bmN0aW9uKCl7YShlLmxheW91dEJveGVkK1wiID4gXCIrZS53cmFwcGVyKS5jc3MoXCJvdmVyZmxvd1wiLFwiaGlkZGVuXCIpO3ZhciBiPWEoZS5tYWluRm9vdGVyKS5vdXRlckhlaWdodCgpfHwwLGM9YShlLm1haW5IZWFkZXIpLm91dGVySGVpZ2h0KCkrYixkPWEod2luZG93KS5oZWlnaHQoKSxnPWEoZS5zaWRlYmFyKS5oZWlnaHQoKXx8MDtpZihhKFwiYm9keVwiKS5oYXNDbGFzcyhmLmZpeGVkKSlhKGUuY29udGVudFdyYXBwZXIpLmNzcyhcIm1pbi1oZWlnaHRcIixkLWIpO2Vsc2V7dmFyIGg7ZD49Zz8oYShlLmNvbnRlbnRXcmFwcGVyKS5jc3MoXCJtaW4taGVpZ2h0XCIsZC1jKSxoPWQtYyk6KGEoZS5jb250ZW50V3JhcHBlcikuY3NzKFwibWluLWhlaWdodFwiLGcpLGg9Zyk7dmFyIGk9YShlLmNvbnRyb2xTaWRlYmFyKTt2b2lkIDAhPT1pJiZpLmhlaWdodCgpPmgmJmEoZS5jb250ZW50V3JhcHBlcikuY3NzKFwibWluLWhlaWdodFwiLGkuaGVpZ2h0KCkpfX0sZy5wcm90b3R5cGUuZml4U2lkZWJhcj1mdW5jdGlvbigpe2lmKCFhKFwiYm9keVwiKS5oYXNDbGFzcyhmLmZpeGVkKSlyZXR1cm4gdm9pZCh2b2lkIDAhPT1hLmZuLnNsaW1TY3JvbGwmJmEoZS5zaWRlYmFyKS5zbGltU2Nyb2xsKHtkZXN0cm95OiEwfSkuaGVpZ2h0KFwiYXV0b1wiKSk7dGhpcy5vcHRpb25zLnNsaW1zY3JvbGwmJnZvaWQgMCE9PWEuZm4uc2xpbVNjcm9sbCYmYShlLnNpZGViYXIpLnNsaW1TY3JvbGwoe2hlaWdodDphKHdpbmRvdykuaGVpZ2h0KCktYShlLm1haW5IZWFkZXIpLmhlaWdodCgpK1wicHhcIn0pfTt2YXIgaD1hLmZuLmxheW91dDthLmZuLmxheW91dD1iLGEuZm4ubGF5b3V0LkNvbnN0dWN0b3I9ZyxhLmZuLmxheW91dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ubGF5b3V0PWgsdGhpc30sYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7Yi5jYWxsKGEoXCJib2R5XCIpKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBnPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGgoZykpfVwidG9nZ2xlXCI9PT1iJiZmLnRvZ2dsZSgpfSl9dmFyIGM9XCJsdGUucHVzaG1lbnVcIixkPXtjb2xsYXBzZVNjcmVlblNpemU6NzY3LGV4cGFuZE9uSG92ZXI6ITEsZXhwYW5kVHJhbnNpdGlvbkRlbGF5OjIwMH0sZT17Y29sbGFwc2VkOlwiLnNpZGViYXItY29sbGFwc2VcIixvcGVuOlwiLnNpZGViYXItb3BlblwiLG1haW5TaWRlYmFyOlwiLm1haW4tc2lkZWJhclwiLGNvbnRlbnRXcmFwcGVyOlwiLmNvbnRlbnQtd3JhcHBlclwiLHNlYXJjaElucHV0OlwiLnNpZGViYXItZm9ybSAuZm9ybS1jb250cm9sXCIsYnV0dG9uOidbZGF0YS10b2dnbGU9XCJwdXNoLW1lbnVcIl0nLG1pbmk6XCIuc2lkZWJhci1taW5pXCIsZXhwYW5kZWQ6XCIuc2lkZWJhci1leHBhbmRlZC1vbi1ob3ZlclwiLGxheW91dEZpeGVkOlwiLmZpeGVkXCJ9LGY9e2NvbGxhcHNlZDpcInNpZGViYXItY29sbGFwc2VcIixvcGVuOlwic2lkZWJhci1vcGVuXCIsbWluaTpcInNpZGViYXItbWluaVwiLGV4cGFuZGVkOlwic2lkZWJhci1leHBhbmRlZC1vbi1ob3ZlclwiLGV4cGFuZEZlYXR1cmU6XCJzaWRlYmFyLW1pbmktZXhwYW5kLWZlYXR1cmVcIixsYXlvdXRGaXhlZDpcImZpeGVkXCJ9LGc9e2V4cGFuZGVkOlwiZXhwYW5kZWQucHVzaE1lbnVcIixjb2xsYXBzZWQ6XCJjb2xsYXBzZWQucHVzaE1lbnVcIn0saD1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnM9YSx0aGlzLmluaXQoKX07aC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpeyh0aGlzLm9wdGlvbnMuZXhwYW5kT25Ib3Zlcnx8YShcImJvZHlcIikuaXMoZS5taW5pK2UubGF5b3V0Rml4ZWQpKSYmKHRoaXMuZXhwYW5kT25Ib3ZlcigpLGEoXCJib2R5XCIpLmFkZENsYXNzKGYuZXhwYW5kRmVhdHVyZSkpLGEoZS5jb250ZW50V3JhcHBlcikuY2xpY2soZnVuY3Rpb24oKXthKHdpbmRvdykud2lkdGgoKTw9dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZSYmYShcImJvZHlcIikuaGFzQ2xhc3MoZi5vcGVuKSYmdGhpcy5jbG9zZSgpfS5iaW5kKHRoaXMpKSxhKGUuc2VhcmNoSW5wdXQpLmNsaWNrKGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KX0saC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGI9YSh3aW5kb3cpLndpZHRoKCksYz0hYShcImJvZHlcIikuaGFzQ2xhc3MoZi5jb2xsYXBzZWQpO2I8PXRoaXMub3B0aW9ucy5jb2xsYXBzZVNjcmVlblNpemUmJihjPWEoXCJib2R5XCIpLmhhc0NsYXNzKGYub3BlbikpLGM/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxoLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7YSh3aW5kb3cpLndpZHRoKCk+dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZT9hKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCkudHJpZ2dlcihhLkV2ZW50KGcuZXhwYW5kZWQpKTphKFwiYm9keVwiKS5hZGRDbGFzcyhmLm9wZW4pLnRyaWdnZXIoYS5FdmVudChnLmV4cGFuZGVkKSl9LGgucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7YSh3aW5kb3cpLndpZHRoKCk+dGhpcy5vcHRpb25zLmNvbGxhcHNlU2NyZWVuU2l6ZT9hKFwiYm9keVwiKS5hZGRDbGFzcyhmLmNvbGxhcHNlZCkudHJpZ2dlcihhLkV2ZW50KGcuY29sbGFwc2VkKSk6YShcImJvZHlcIikucmVtb3ZlQ2xhc3MoZi5vcGVuK1wiIFwiK2YuY29sbGFwc2VkKS50cmlnZ2VyKGEuRXZlbnQoZy5jb2xsYXBzZWQpKX0saC5wcm90b3R5cGUuZXhwYW5kT25Ib3Zlcj1mdW5jdGlvbigpe2EoZS5tYWluU2lkZWJhcikuaG92ZXIoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5pcyhlLm1pbmkrZS5jb2xsYXBzZWQpJiZhKHdpbmRvdykud2lkdGgoKT50aGlzLm9wdGlvbnMuY29sbGFwc2VTY3JlZW5TaXplJiZ0aGlzLmV4cGFuZCgpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7YShcImJvZHlcIikuaXMoZS5leHBhbmRlZCkmJnRoaXMuY29sbGFwc2UoKX0uYmluZCh0aGlzKSl9LGgucHJvdG90eXBlLmV4cGFuZD1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmNvbGxhcHNlZCkuYWRkQ2xhc3MoZi5leHBhbmRlZCl9LHRoaXMub3B0aW9ucy5leHBhbmRUcmFuc2l0aW9uRGVsYXkpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhmLmV4cGFuZGVkKS5hZGRDbGFzcyhmLmNvbGxhcHNlZCl9LHRoaXMub3B0aW9ucy5leHBhbmRUcmFuc2l0aW9uRGVsYXkpfTt2YXIgaT1hLmZuLnB1c2hNZW51O2EuZm4ucHVzaE1lbnU9YixhLmZuLnB1c2hNZW51LkNvbnN0cnVjdG9yPWgsYS5mbi5wdXNoTWVudS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ucHVzaE1lbnU9aSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrXCIsZS5idXR0b24sZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwidG9nZ2xlXCIpfSksYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7Yi5jYWxsKGEoZS5idXR0b24pKX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoYyk7aWYoIWYpe3ZhciBoPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLGY9bmV3IGcoZSxoKSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpe2lmKHZvaWQgMD09PWZbYl0pdGhyb3cgbmV3IEVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFwiK2IpO2ZbYl0oKX19KX12YXIgYz1cImx0ZS50b2RvbGlzdFwiLGQ9e29uQ2hlY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LG9uVW5DaGVjazpmdW5jdGlvbihhKXtyZXR1cm4gYX19LGU9e2RhdGE6J1tkYXRhLXdpZGdldD1cInRvZG8tbGlzdFwiXSd9LGY9e2RvbmU6XCJkb25lXCJ9LGc9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLm9wdGlvbnM9Yix0aGlzLl9zZXRVcExpc3RlbmVycygpfTtnLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7aWYoYS5wYXJlbnRzKGUubGkpLmZpcnN0KCkudG9nZ2xlQ2xhc3MoZi5kb25lKSwhYS5wcm9wKFwiY2hlY2tlZFwiKSlyZXR1cm4gdm9pZCB0aGlzLnVuQ2hlY2soYSk7dGhpcy5jaGVjayhhKX0sZy5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zLm9uQ2hlY2suY2FsbChhKX0sZy5wcm90b3R5cGUudW5DaGVjaz1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnMub25VbkNoZWNrLmNhbGwoYSl9LGcucHJvdG90eXBlLl9zZXRVcExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBiPXRoaXM7YSh0aGlzLmVsZW1lbnQpLm9uKFwiY2hhbmdlIGlmQ2hhbmdlZFwiLFwiaW5wdXQ6Y2hlY2tib3hcIixmdW5jdGlvbigpe2IudG9nZ2xlKGEodGhpcykpfSl9O3ZhciBoPWEuZm4udG9kb0xpc3Q7YS5mbi50b2RvTGlzdD1iLGEuZm4udG9kb0xpc3QuQ29uc3RydWN0b3I9ZyxhLmZuLnRvZG9MaXN0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b2RvTGlzdD1oLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoZS5kYXRhKS5lYWNoKGZ1bmN0aW9uKCl7Yi5jYWxsKGEodGhpcykpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmRhdGEoYykpe3ZhciBmPWEuZXh0ZW5kKHt9LGQsZS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpO2UuZGF0YShjLG5ldyBoKGUsZikpfX0pfXZhciBjPVwibHRlLnRyZWVcIixkPXthbmltYXRpb25TcGVlZDo1MDAsYWNjb3JkaW9uOiEwLGZvbGxvd0xpbms6ITEsdHJpZ2dlcjpcIi50cmVldmlldyBhXCJ9LGU9e3RyZWU6XCIudHJlZVwiLHRyZWV2aWV3OlwiLnRyZWV2aWV3XCIsdHJlZXZpZXdNZW51OlwiLnRyZWV2aWV3LW1lbnVcIixvcGVuOlwiLm1lbnUtb3BlbiwgLmFjdGl2ZVwiLGxpOlwibGlcIixkYXRhOidbZGF0YS13aWRnZXQ9XCJ0cmVlXCJdJyxhY3RpdmU6XCIuYWN0aXZlXCJ9LGY9e29wZW46XCJtZW51LW9wZW5cIix0cmVlOlwidHJlZVwifSxnPXtjb2xsYXBzZWQ6XCJjb2xsYXBzZWQudHJlZVwiLGV4cGFuZGVkOlwiZXhwYW5kZWQudHJlZVwifSxoPWZ1bmN0aW9uKGIsYyl7dGhpcy5lbGVtZW50PWIsdGhpcy5vcHRpb25zPWMsYSh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKGYudHJlZSksYShlLnRyZWV2aWV3K2UuYWN0aXZlLHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoZi5vcGVuKSx0aGlzLl9zZXRVcExpc3RlbmVycygpfTtoLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm5leHQoZS50cmVldmlld01lbnUpLGQ9YS5wYXJlbnQoKSxnPWQuaGFzQ2xhc3MoZi5vcGVuKTtkLmlzKGUudHJlZXZpZXcpJiYodGhpcy5vcHRpb25zLmZvbGxvd0xpbmsmJlwiI1wiIT09YS5hdHRyKFwiaHJlZlwiKXx8Yi5wcmV2ZW50RGVmYXVsdCgpLGc/dGhpcy5jb2xsYXBzZShjLGQpOnRoaXMuZXhwYW5kKGMsZCkpfSxoLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24oYixjKXt2YXIgZD1hLkV2ZW50KGcuZXhwYW5kZWQpO2lmKHRoaXMub3B0aW9ucy5hY2NvcmRpb24pe3ZhciBoPWMuc2libGluZ3MoZS5vcGVuKSxpPWguY2hpbGRyZW4oZS50cmVldmlld01lbnUpO3RoaXMuY29sbGFwc2UoaSxoKX1jLmFkZENsYXNzKGYub3BlbiksYi5zbGlkZURvd24odGhpcy5vcHRpb25zLmFuaW1hdGlvblNwZWVkLGZ1bmN0aW9uKCl7YSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIoZCl9LmJpbmQodGhpcykpfSxoLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbihiLGMpe3ZhciBkPWEuRXZlbnQoZy5jb2xsYXBzZWQpO2IuZmluZChlLm9wZW4pLnJlbW92ZUNsYXNzKGYub3BlbiksYy5yZW1vdmVDbGFzcyhmLm9wZW4pLGIuc2xpZGVVcCh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3BlZWQsZnVuY3Rpb24oKXtiLmZpbmQoZS5vcGVuK1wiID4gXCIrZS50cmVldmlldykuc2xpZGVVcCgpLGEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGQpfS5iaW5kKHRoaXMpKX0saC5wcm90b3R5cGUuX3NldFVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpczthKHRoaXMuZWxlbWVudCkub24oXCJjbGlja1wiLHRoaXMub3B0aW9ucy50cmlnZ2VyLGZ1bmN0aW9uKGMpe2IudG9nZ2xlKGEodGhpcyksYyl9KX07dmFyIGk9YS5mbi50cmVlO2EuZm4udHJlZT1iLGEuZm4udHJlZS5Db25zdHJ1Y3Rvcj1oLGEuZm4udHJlZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udHJlZT1pLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoZS5kYXRhKS5lYWNoKGZ1bmN0aW9uKCl7Yi5jYWxsKGEodGhpcykpfSl9KX0oalF1ZXJ5KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9kaXN0L2pzL2FkbWlubHRlLm1pbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///51\n");
-
-/***/ }),
-
-/***/ 52:
-/***/ (function(module, exports) {
-
-eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * jVectorMap version 1.2.2\n *\n * Copyright 2011-2013, Kirill Lebedev\n * Licensed under the MIT license.\n *\n */(function (e) {\n var t = { set: { colors: 1, values: 1, backgroundColor: 1, scaleColors: 1, normalizeFunction: 1, focus: 1 }, get: { selectedRegions: 1, selectedMarkers: 1, mapObject: 1, regionName: 1 } };e.fn.vectorMap = function (e) {\n var n,\n r,\n i,\n n = this.children(\".jvectormap-container\").data(\"mapObject\");if (e === \"addMap\") jvm.WorldMap.maps[arguments[1]] = arguments[2];else {\n if (!(e !== \"set\" && e !== \"get\" || !t[e][arguments[1]])) return r = arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1), n[e + r].apply(n, Array.prototype.slice.call(arguments, 2));e = e || {}, e.container = this, n = new jvm.WorldMap(e);\n }return this;\n };\n})(jQuery), function (e) {\n function r(t) {\n var n = t || window.event,\n r = [].slice.call(arguments, 1),\n i = 0,\n s = !0,\n o = 0,\n u = 0;return t = e.event.fix(n), t.type = \"mousewheel\", n.wheelDelta && (i = n.wheelDelta / 120), n.detail && (i = -n.detail / 3), u = i, n.axis !== undefined && n.axis === n.HORIZONTAL_AXIS && (u = 0, o = -1 * i), n.wheelDeltaY !== undefined && (u = n.wheelDeltaY / 120), n.wheelDeltaX !== undefined && (o = -1 * n.wheelDeltaX / 120), r.unshift(t, i, o, u), (e.event.dispatch || e.event.handle).apply(this, r);\n }var t = [\"DOMMouseScroll\", \"mousewheel\"];if (e.event.fixHooks) for (var n = t.length; n;) {\n e.event.fixHooks[t[--n]] = e.event.mouseHooks;\n }e.event.special.mousewheel = { setup: function setup() {\n if (this.addEventListener) for (var e = t.length; e;) {\n this.addEventListener(t[--e], r, !1);\n } else this.onmousewheel = r;\n }, teardown: function teardown() {\n if (this.removeEventListener) for (var e = t.length; e;) {\n this.removeEventListener(t[--e], r, !1);\n } else this.onmousewheel = null;\n } }, e.fn.extend({ mousewheel: function mousewheel(e) {\n return e ? this.bind(\"mousewheel\", e) : this.trigger(\"mousewheel\");\n }, unmousewheel: function unmousewheel(e) {\n return this.unbind(\"mousewheel\", e);\n } });\n}(jQuery);var jvm = { inherits: function inherits(e, t) {\n function n() {}n.prototype = t.prototype, e.prototype = new n(), e.prototype.constructor = e, e.parentClass = t;\n }, mixin: function mixin(e, t) {\n var n;for (n in t.prototype) {\n t.prototype.hasOwnProperty(n) && (e.prototype[n] = t.prototype[n]);\n }\n }, min: function min(e) {\n var t = Number.MAX_VALUE,\n n;if (e instanceof Array) for (n = 0; n < e.length; n++) {\n e[n] < t && (t = e[n]);\n } else for (n in e) {\n e[n] < t && (t = e[n]);\n }return t;\n }, max: function max(e) {\n var t = Number.MIN_VALUE,\n n;if (e instanceof Array) for (n = 0; n < e.length; n++) {\n e[n] > t && (t = e[n]);\n } else for (n in e) {\n e[n] > t && (t = e[n]);\n }return t;\n }, keys: function keys(e) {\n var t = [],\n n;for (n in e) {\n t.push(n);\n }return t;\n }, values: function values(e) {\n var t = [],\n n,\n r;for (r = 0; r < arguments.length; r++) {\n e = arguments[r];for (n in e) {\n t.push(e[n]);\n }\n }return t;\n } };jvm.$ = jQuery, jvm.AbstractElement = function (e, t) {\n this.node = this.createElement(e), this.name = e, this.properties = {}, t && this.set(t);\n}, jvm.AbstractElement.prototype.set = function (e, t) {\n var n;if ((typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) == \"object\") for (n in e) {\n this.properties[n] = e[n], this.applyAttr(n, e[n]);\n } else this.properties[e] = t, this.applyAttr(e, t);\n}, jvm.AbstractElement.prototype.get = function (e) {\n return this.properties[e];\n}, jvm.AbstractElement.prototype.applyAttr = function (e, t) {\n this.node.setAttribute(e, t);\n}, jvm.AbstractElement.prototype.remove = function () {\n jvm.$(this.node).remove();\n}, jvm.AbstractCanvasElement = function (e, t, n) {\n this.container = e, this.setSize(t, n), this.rootElement = new jvm[this.classPrefix + \"GroupElement\"](), this.node.appendChild(this.rootElement.node), this.container.appendChild(this.node);\n}, jvm.AbstractCanvasElement.prototype.add = function (e, t) {\n t = t || this.rootElement, t.add(e), e.canvas = this;\n}, jvm.AbstractCanvasElement.prototype.addPath = function (e, t, n) {\n var r = new jvm[this.classPrefix + \"PathElement\"](e, t);return this.add(r, n), r;\n}, jvm.AbstractCanvasElement.prototype.addCircle = function (e, t, n) {\n var r = new jvm[this.classPrefix + \"CircleElement\"](e, t);return this.add(r, n), r;\n}, jvm.AbstractCanvasElement.prototype.addGroup = function (e) {\n var t = new jvm[this.classPrefix + \"GroupElement\"]();return e ? e.node.appendChild(t.node) : this.node.appendChild(t.node), t.canvas = this, t;\n}, jvm.AbstractShapeElement = function (e, t, n) {\n this.style = n || {}, this.style.current = {}, this.isHovered = !1, this.isSelected = !1, this.updateStyle();\n}, jvm.AbstractShapeElement.prototype.setHovered = function (e) {\n this.isHovered !== e && (this.isHovered = e, this.updateStyle());\n}, jvm.AbstractShapeElement.prototype.setSelected = function (e) {\n this.isSelected !== e && (this.isSelected = e, this.updateStyle(), jvm.$(this.node).trigger(\"selected\", [e]));\n}, jvm.AbstractShapeElement.prototype.setStyle = function (e, t) {\n var n = {};(typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) == \"object\" ? n = e : n[e] = t, jvm.$.extend(this.style.current, n), this.updateStyle();\n}, jvm.AbstractShapeElement.prototype.updateStyle = function () {\n var e = {};jvm.AbstractShapeElement.mergeStyles(e, this.style.initial), jvm.AbstractShapeElement.mergeStyles(e, this.style.current), this.isHovered && jvm.AbstractShapeElement.mergeStyles(e, this.style.hover), this.isSelected && (jvm.AbstractShapeElement.mergeStyles(e, this.style.selected), this.isHovered && jvm.AbstractShapeElement.mergeStyles(e, this.style.selectedHover)), this.set(e);\n}, jvm.AbstractShapeElement.mergeStyles = function (e, t) {\n var n;t = t || {};for (n in t) {\n t[n] === null ? delete e[n] : e[n] = t[n];\n }\n}, jvm.SVGElement = function (e, t) {\n jvm.SVGElement.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.SVGElement, jvm.AbstractElement), jvm.SVGElement.svgns = \"http://www.w3.org/2000/svg\", jvm.SVGElement.prototype.createElement = function (e) {\n return document.createElementNS(jvm.SVGElement.svgns, e);\n}, jvm.SVGElement.prototype.addClass = function (e) {\n this.node.setAttribute(\"class\", e);\n}, jvm.SVGElement.prototype.getElementCtr = function (e) {\n return jvm[\"SVG\" + e];\n}, jvm.SVGElement.prototype.getBBox = function () {\n return this.node.getBBox();\n}, jvm.SVGGroupElement = function () {\n jvm.SVGGroupElement.parentClass.call(this, \"g\");\n}, jvm.inherits(jvm.SVGGroupElement, jvm.SVGElement), jvm.SVGGroupElement.prototype.add = function (e) {\n this.node.appendChild(e.node);\n}, jvm.SVGCanvasElement = function (e, t, n) {\n this.classPrefix = \"SVG\", jvm.SVGCanvasElement.parentClass.call(this, \"svg\"), jvm.AbstractCanvasElement.apply(this, arguments);\n}, jvm.inherits(jvm.SVGCanvasElement, jvm.SVGElement), jvm.mixin(jvm.SVGCanvasElement, jvm.AbstractCanvasElement), jvm.SVGCanvasElement.prototype.setSize = function (e, t) {\n this.width = e, this.height = t, this.node.setAttribute(\"width\", e), this.node.setAttribute(\"height\", t);\n}, jvm.SVGCanvasElement.prototype.applyTransformParams = function (e, t, n) {\n this.scale = e, this.transX = t, this.transY = n, this.rootElement.node.setAttribute(\"transform\", \"scale(\" + e + \") translate(\" + t + \", \" + n + \")\");\n}, jvm.SVGShapeElement = function (e, t, n) {\n jvm.SVGShapeElement.parentClass.call(this, e, t), jvm.AbstractShapeElement.apply(this, arguments);\n}, jvm.inherits(jvm.SVGShapeElement, jvm.SVGElement), jvm.mixin(jvm.SVGShapeElement, jvm.AbstractShapeElement), jvm.SVGPathElement = function (e, t) {\n jvm.SVGPathElement.parentClass.call(this, \"path\", e, t), this.node.setAttribute(\"fill-rule\", \"evenodd\");\n}, jvm.inherits(jvm.SVGPathElement, jvm.SVGShapeElement), jvm.SVGCircleElement = function (e, t) {\n jvm.SVGCircleElement.parentClass.call(this, \"circle\", e, t);\n}, jvm.inherits(jvm.SVGCircleElement, jvm.SVGShapeElement), jvm.VMLElement = function (e, t) {\n jvm.VMLElement.VMLInitialized || jvm.VMLElement.initializeVML(), jvm.VMLElement.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.VMLElement, jvm.AbstractElement), jvm.VMLElement.VMLInitialized = !1, jvm.VMLElement.initializeVML = function () {\n try {\n document.namespaces.rvml || document.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\"), jvm.VMLElement.prototype.createElement = function (e) {\n return document.createElement(\"<rvml:\" + e + ' class=\"rvml\">');\n };\n } catch (e) {\n jvm.VMLElement.prototype.createElement = function (e) {\n return document.createElement(\"<\" + e + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n };\n }document.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\"), jvm.VMLElement.VMLInitialized = !0;\n}, jvm.VMLElement.prototype.getElementCtr = function (e) {\n return jvm[\"VML\" + e];\n}, jvm.VMLElement.prototype.addClass = function (e) {\n jvm.$(this.node).addClass(e);\n}, jvm.VMLElement.prototype.applyAttr = function (e, t) {\n this.node[e] = t;\n}, jvm.VMLElement.prototype.getBBox = function () {\n var e = jvm.$(this.node);return { x: e.position().left / this.canvas.scale, y: e.position().top / this.canvas.scale, width: e.width() / this.canvas.scale, height: e.height() / this.canvas.scale };\n}, jvm.VMLGroupElement = function () {\n jvm.VMLGroupElement.parentClass.call(this, \"group\"), this.node.style.left = \"0px\", this.node.style.top = \"0px\", this.node.coordorigin = \"0 0\";\n}, jvm.inherits(jvm.VMLGroupElement, jvm.VMLElement), jvm.VMLGroupElement.prototype.add = function (e) {\n this.node.appendChild(e.node);\n}, jvm.VMLCanvasElement = function (e, t, n) {\n this.classPrefix = \"VML\", jvm.VMLCanvasElement.parentClass.call(this, \"group\"), jvm.AbstractCanvasElement.apply(this, arguments), this.node.style.position = \"absolute\";\n}, jvm.inherits(jvm.VMLCanvasElement, jvm.VMLElement), jvm.mixin(jvm.VMLCanvasElement, jvm.AbstractCanvasElement), jvm.VMLCanvasElement.prototype.setSize = function (e, t) {\n var n, r, i, s;this.width = e, this.height = t, this.node.style.width = e + \"px\", this.node.style.height = t + \"px\", this.node.coordsize = e + \" \" + t, this.node.coordorigin = \"0 0\";if (this.rootElement) {\n n = this.rootElement.node.getElementsByTagName(\"shape\");for (i = 0, s = n.length; i < s; i++) {\n n[i].coordsize = e + \" \" + t, n[i].style.width = e + \"px\", n[i].style.height = t + \"px\";\n }r = this.node.getElementsByTagName(\"group\");for (i = 0, s = r.length; i < s; i++) {\n r[i].coordsize = e + \" \" + t, r[i].style.width = e + \"px\", r[i].style.height = t + \"px\";\n }\n }\n}, jvm.VMLCanvasElement.prototype.applyTransformParams = function (e, t, n) {\n this.scale = e, this.transX = t, this.transY = n, this.rootElement.node.coordorigin = this.width - t - this.width / 100 + \",\" + (this.height - n - this.height / 100), this.rootElement.node.coordsize = this.width / e + \",\" + this.height / e;\n}, jvm.VMLShapeElement = function (e, t) {\n jvm.VMLShapeElement.parentClass.call(this, e, t), this.fillElement = new jvm.VMLElement(\"fill\"), this.strokeElement = new jvm.VMLElement(\"stroke\"), this.node.appendChild(this.fillElement.node), this.node.appendChild(this.strokeElement.node), this.node.stroked = !1, jvm.AbstractShapeElement.apply(this, arguments);\n}, jvm.inherits(jvm.VMLShapeElement, jvm.VMLElement), jvm.mixin(jvm.VMLShapeElement, jvm.AbstractShapeElement), jvm.VMLShapeElement.prototype.applyAttr = function (e, t) {\n switch (e) {case \"fill\":\n this.node.fillcolor = t;break;case \"fill-opacity\":\n this.fillElement.node.opacity = Math.round(t * 100) + \"%\";break;case \"stroke\":\n t === \"none\" ? this.node.stroked = !1 : this.node.stroked = !0, this.node.strokecolor = t;break;case \"stroke-opacity\":\n this.strokeElement.node.opacity = Math.round(t * 100) + \"%\";break;case \"stroke-width\":\n parseInt(t, 10) === 0 ? this.node.stroked = !1 : this.node.stroked = !0, this.node.strokeweight = t;break;case \"d\":\n this.node.path = jvm.VMLPathElement.pathSvgToVml(t);break;default:\n jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this, arguments);}\n}, jvm.VMLPathElement = function (e, t) {\n var n = new jvm.VMLElement(\"skew\");jvm.VMLPathElement.parentClass.call(this, \"shape\", e, t), this.node.coordorigin = \"0 0\", n.node.on = !0, n.node.matrix = \"0.01,0,0,0.01,0,0\", n.node.offset = \"0,0\", this.node.appendChild(n.node);\n}, jvm.inherits(jvm.VMLPathElement, jvm.VMLShapeElement), jvm.VMLPathElement.prototype.applyAttr = function (e, t) {\n e === \"d\" ? this.node.path = jvm.VMLPathElement.pathSvgToVml(t) : jvm.VMLShapeElement.prototype.applyAttr.call(this, e, t);\n}, jvm.VMLPathElement.pathSvgToVml = function (e) {\n var t = \"\",\n n = 0,\n r = 0,\n i,\n s;return e = e.replace(/(-?\\d+)e(-?\\d+)/g, \"0\"), e.replace(/([MmLlHhVvCcSs])\\s*((?:-?\\d*(?:\\.\\d+)?\\s*,?\\s*)+)/g, function (e, t, o, u) {\n o = o.replace(/(\\d)-/g, \"$1,-\").replace(/^\\s+/g, \"\").replace(/\\s+$/g, \"\").replace(/\\s+/g, \",\").split(\",\"), o[0] || o.shift();for (var a = 0, f = o.length; a < f; a++) {\n o[a] = Math.round(100 * o[a]);\n }switch (t) {case \"m\":\n return n += o[0], r += o[1], \"t\" + o.join(\",\");case \"M\":\n return n = o[0], r = o[1], \"m\" + o.join(\",\");case \"l\":\n return n += o[0], r += o[1], \"r\" + o.join(\",\");case \"L\":\n return n = o[0], r = o[1], \"l\" + o.join(\",\");case \"h\":\n return n += o[0], \"r\" + o[0] + \",0\";case \"H\":\n return n = o[0], \"l\" + n + \",\" + r;case \"v\":\n return r += o[0], \"r0,\" + o[0];case \"V\":\n return r = o[0], \"l\" + n + \",\" + r;case \"c\":\n return i = n + o[o.length - 4], s = r + o[o.length - 3], n += o[o.length - 2], r += o[o.length - 1], \"v\" + o.join(\",\");case \"C\":\n return i = o[o.length - 4], s = o[o.length - 3], n = o[o.length - 2], r = o[o.length - 1], \"c\" + o.join(\",\");case \"s\":\n return o.unshift(r - s), o.unshift(n - i), i = n + o[o.length - 4], s = r + o[o.length - 3], n += o[o.length - 2], r += o[o.length - 1], \"v\" + o.join(\",\");case \"S\":\n return o.unshift(r + r - s), o.unshift(n + n - i), i = o[o.length - 4], s = o[o.length - 3], n = o[o.length - 2], r = o[o.length - 1], \"c\" + o.join(\",\");}return \"\";\n }).replace(/z/g, \"e\");\n}, jvm.VMLCircleElement = function (e, t) {\n jvm.VMLCircleElement.parentClass.call(this, \"oval\", e, t);\n}, jvm.inherits(jvm.VMLCircleElement, jvm.VMLShapeElement), jvm.VMLCircleElement.prototype.applyAttr = function (e, t) {\n switch (e) {case \"r\":\n this.node.style.width = t * 2 + \"px\", this.node.style.height = t * 2 + \"px\", this.applyAttr(\"cx\", this.get(\"cx\") || 0), this.applyAttr(\"cy\", this.get(\"cy\") || 0);break;case \"cx\":\n if (!t) return;this.node.style.left = t - (this.get(\"r\") || 0) + \"px\";break;case \"cy\":\n if (!t) return;this.node.style.top = t - (this.get(\"r\") || 0) + \"px\";break;default:\n jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this, e, t);}\n}, jvm.VectorCanvas = function (e, t, n) {\n return this.mode = window.SVGAngle ? \"svg\" : \"vml\", this.mode == \"svg\" ? this.impl = new jvm.SVGCanvasElement(e, t, n) : this.impl = new jvm.VMLCanvasElement(e, t, n), this.impl;\n}, jvm.SimpleScale = function (e) {\n this.scale = e;\n}, jvm.SimpleScale.prototype.getValue = function (e) {\n return e;\n}, jvm.OrdinalScale = function (e) {\n this.scale = e;\n}, jvm.OrdinalScale.prototype.getValue = function (e) {\n return this.scale[e];\n}, jvm.NumericScale = function (e, t, n, r) {\n this.scale = [], t = t || \"linear\", e && this.setScale(e), t && this.setNormalizeFunction(t), n && this.setMin(n), r && this.setMax(r);\n}, jvm.NumericScale.prototype = { setMin: function setMin(e) {\n this.clearMinValue = e, typeof this.normalize == \"function\" ? this.minValue = this.normalize(e) : this.minValue = e;\n }, setMax: function setMax(e) {\n this.clearMaxValue = e, typeof this.normalize == \"function\" ? this.maxValue = this.normalize(e) : this.maxValue = e;\n }, setScale: function setScale(e) {\n var t;for (t = 0; t < e.length; t++) {\n this.scale[t] = [e[t]];\n }\n }, setNormalizeFunction: function setNormalizeFunction(e) {\n e === \"polynomial\" ? this.normalize = function (e) {\n return Math.pow(e, .2);\n } : e === \"linear\" ? delete this.normalize : this.normalize = e, this.setMin(this.clearMinValue), this.setMax(this.clearMaxValue);\n }, getValue: function getValue(e) {\n var t = [],\n n = 0,\n r,\n i = 0,\n s;typeof this.normalize == \"function\" && (e = this.normalize(e));for (i = 0; i < this.scale.length - 1; i++) {\n r = this.vectorLength(this.vectorSubtract(this.scale[i + 1], this.scale[i])), t.push(r), n += r;\n }s = (this.maxValue - this.minValue) / n;for (i = 0; i < t.length; i++) {\n t[i] *= s;\n }i = 0, e -= this.minValue;while (e - t[i] >= 0) {\n e -= t[i], i++;\n }return i == this.scale.length - 1 ? e = this.vectorToNum(this.scale[i]) : e = this.vectorToNum(this.vectorAdd(this.scale[i], this.vectorMult(this.vectorSubtract(this.scale[i + 1], this.scale[i]), e / t[i]))), e;\n }, vectorToNum: function vectorToNum(e) {\n var t = 0,\n n;for (n = 0; n < e.length; n++) {\n t += Math.round(e[n]) * Math.pow(256, e.length - n - 1);\n }return t;\n }, vectorSubtract: function vectorSubtract(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] - t[r];\n }return n;\n }, vectorAdd: function vectorAdd(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] + t[r];\n }return n;\n }, vectorMult: function vectorMult(e, t) {\n var n = [],\n r;for (r = 0; r < e.length; r++) {\n n[r] = e[r] * t;\n }return n;\n }, vectorLength: function vectorLength(e) {\n var t = 0,\n n;for (n = 0; n < e.length; n++) {\n t += e[n] * e[n];\n }return Math.sqrt(t);\n } }, jvm.ColorScale = function (e, t, n, r) {\n jvm.ColorScale.parentClass.apply(this, arguments);\n}, jvm.inherits(jvm.ColorScale, jvm.NumericScale), jvm.ColorScale.prototype.setScale = function (e) {\n var t;for (t = 0; t < e.length; t++) {\n this.scale[t] = jvm.ColorScale.rgbToArray(e[t]);\n }\n}, jvm.ColorScale.prototype.getValue = function (e) {\n return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this, e));\n}, jvm.ColorScale.arrayToRgb = function (e) {\n var t = \"#\",\n n,\n r;for (r = 0; r < e.length; r++) {\n n = e[r].toString(16), t += n.length == 1 ? \"0\" + n : n;\n }return t;\n}, jvm.ColorScale.numToRgb = function (e) {\n e = e.toString(16);while (e.length < 6) {\n e = \"0\" + e;\n }return \"#\" + e;\n}, jvm.ColorScale.rgbToArray = function (e) {\n return e = e.substr(1), [parseInt(e.substr(0, 2), 16), parseInt(e.substr(2, 2), 16), parseInt(e.substr(4, 2), 16)];\n}, jvm.DataSeries = function (e, t) {\n var n;e = e || {}, e.attribute = e.attribute || \"fill\", this.elements = t, this.params = e, e.attributes && this.setAttributes(e.attributes), jvm.$.isArray(e.scale) ? (n = e.attribute === \"fill\" || e.attribute === \"stroke\" ? jvm.ColorScale : jvm.NumericScale, this.scale = new n(e.scale, e.normalizeFunction, e.min, e.max)) : e.scale ? this.scale = new jvm.OrdinalScale(e.scale) : this.scale = new jvm.SimpleScale(e.scale), this.values = e.values || {}, this.setValues(this.values);\n}, jvm.DataSeries.prototype = { setAttributes: function setAttributes(e, t) {\n var n = e,\n r;if (typeof e == \"string\") this.elements[e] && this.elements[e].setStyle(this.params.attribute, t);else for (r in n) {\n this.elements[r] && this.elements[r].element.setStyle(this.params.attribute, n[r]);\n }\n }, setValues: function setValues(e) {\n var t = Number.MIN_VALUE,\n n = Number.MAX_VALUE,\n r,\n i,\n s = {};if (this.scale instanceof jvm.OrdinalScale || this.scale instanceof jvm.SimpleScale) for (i in e) {\n e[i] ? s[i] = this.scale.getValue(e[i]) : s[i] = this.elements[i].element.style.initial[this.params.attribute];\n } else {\n if (!this.params.min || !this.params.max) {\n for (i in e) {\n r = parseFloat(e[i]), r > t && (t = e[i]), r < n && (n = r);\n }this.params.min || this.scale.setMin(n), this.params.max || this.scale.setMax(t), this.params.min = n, this.params.max = t;\n }for (i in e) {\n r = parseFloat(e[i]), isNaN(r) ? s[i] = this.elements[i].element.style.initial[this.params.attribute] : s[i] = this.scale.getValue(r);\n }\n }this.setAttributes(s), jvm.$.extend(this.values, e);\n }, clear: function clear() {\n var e,\n t = {};for (e in this.values) {\n this.elements[e] && (t[e] = this.elements[e].element.style.initial[this.params.attribute]);\n }this.setAttributes(t), this.values = {};\n }, setScale: function setScale(e) {\n this.scale.setScale(e), this.values && this.setValues(this.values);\n }, setNormalizeFunction: function setNormalizeFunction(e) {\n this.scale.setNormalizeFunction(e), this.values && this.setValues(this.values);\n } }, jvm.Proj = { degRad: 180 / Math.PI, radDeg: Math.PI / 180, radius: 6381372, sgn: function sgn(e) {\n return e > 0 ? 1 : e < 0 ? -1 : e;\n }, mill: function mill(e, t, n) {\n return { x: this.radius * (t - n) * this.radDeg, y: -this.radius * Math.log(Math.tan((45 + .4 * e) * this.radDeg)) / .8 };\n }, mill_inv: function mill_inv(e, t, n) {\n return { lat: (2.5 * Math.atan(Math.exp(.8 * t / this.radius)) - 5 * Math.PI / 8) * this.degRad, lng: (n * this.radDeg + e / this.radius) * this.degRad };\n }, merc: function merc(e, t, n) {\n return { x: this.radius * (t - n) * this.radDeg, y: -this.radius * Math.log(Math.tan(Math.PI / 4 + e * Math.PI / 360)) };\n }, merc_inv: function merc_inv(e, t, n) {\n return { lat: (2 * Math.atan(Math.exp(t / this.radius)) - Math.PI / 2) * this.degRad, lng: (n * this.radDeg + e / this.radius) * this.degRad };\n }, aea: function aea(e, t, n) {\n var r = 0,\n i = n * this.radDeg,\n s = 29.5 * this.radDeg,\n o = 45.5 * this.radDeg,\n u = e * this.radDeg,\n a = t * this.radDeg,\n f = (Math.sin(s) + Math.sin(o)) / 2,\n l = Math.cos(s) * Math.cos(s) + 2 * f * Math.sin(s),\n c = f * (a - i),\n h = Math.sqrt(l - 2 * f * Math.sin(u)) / f,\n p = Math.sqrt(l - 2 * f * Math.sin(r)) / f;return { x: h * Math.sin(c) * this.radius, y: -(p - h * Math.cos(c)) * this.radius };\n }, aea_inv: function aea_inv(e, t, n) {\n var r = e / this.radius,\n i = t / this.radius,\n s = 0,\n o = n * this.radDeg,\n u = 29.5 * this.radDeg,\n a = 45.5 * this.radDeg,\n f = (Math.sin(u) + Math.sin(a)) / 2,\n l = Math.cos(u) * Math.cos(u) + 2 * f * Math.sin(u),\n c = Math.sqrt(l - 2 * f * Math.sin(s)) / f,\n h = Math.sqrt(r * r + (c - i) * (c - i)),\n p = Math.atan(r / (c - i));return { lat: Math.asin((l - h * h * f * f) / (2 * f)) * this.degRad, lng: (o + p / f) * this.degRad };\n }, lcc: function lcc(e, t, n) {\n var r = 0,\n i = n * this.radDeg,\n s = t * this.radDeg,\n o = 33 * this.radDeg,\n u = 45 * this.radDeg,\n a = e * this.radDeg,\n f = Math.log(Math.cos(o) * (1 / Math.cos(u))) / Math.log(Math.tan(Math.PI / 4 + u / 2) * (1 / Math.tan(Math.PI / 4 + o / 2))),\n l = Math.cos(o) * Math.pow(Math.tan(Math.PI / 4 + o / 2), f) / f,\n c = l * Math.pow(1 / Math.tan(Math.PI / 4 + a / 2), f),\n h = l * Math.pow(1 / Math.tan(Math.PI / 4 + r / 2), f);return { x: c * Math.sin(f * (s - i)) * this.radius, y: -(h - c * Math.cos(f * (s - i))) * this.radius };\n }, lcc_inv: function lcc_inv(e, t, n) {\n var r = e / this.radius,\n i = t / this.radius,\n s = 0,\n o = n * this.radDeg,\n u = 33 * this.radDeg,\n a = 45 * this.radDeg,\n f = Math.log(Math.cos(u) * (1 / Math.cos(a))) / Math.log(Math.tan(Math.PI / 4 + a / 2) * (1 / Math.tan(Math.PI / 4 + u / 2))),\n l = Math.cos(u) * Math.pow(Math.tan(Math.PI / 4 + u / 2), f) / f,\n c = l * Math.pow(1 / Math.tan(Math.PI / 4 + s / 2), f),\n h = this.sgn(f) * Math.sqrt(r * r + (c - i) * (c - i)),\n p = Math.atan(r / (c - i));return { lat: (2 * Math.atan(Math.pow(l / h, 1 / f)) - Math.PI / 2) * this.degRad, lng: (o + p / f) * this.degRad };\n } }, jvm.WorldMap = function (e) {\n var t = this,\n n;this.params = jvm.$.extend(!0, {}, jvm.WorldMap.defaultParams, e);if (!jvm.WorldMap.maps[this.params.map]) throw new Error(\"Attempt to use map which was not loaded: \" + this.params.map);this.mapData = jvm.WorldMap.maps[this.params.map], this.markers = {}, this.regions = {}, this.regionsColors = {}, this.regionsData = {}, this.container = jvm.$(\"<div>\").css({ width: \"100%\", height: \"100%\" }).addClass(\"jvectormap-container\"), this.params.container.append(this.container), this.container.data(\"mapObject\", this), this.container.css({ position: \"relative\", overflow: \"hidden\" }), this.defaultWidth = this.mapData.width, this.defaultHeight = this.mapData.height, this.setBackgroundColor(this.params.backgroundColor), this.onResize = function () {\n t.setSize();\n }, jvm.$(window).resize(this.onResize);for (n in jvm.WorldMap.apiEvents) {\n this.params[n] && this.container.bind(jvm.WorldMap.apiEvents[n] + \".jvectormap\", this.params[n]);\n }this.canvas = new jvm.VectorCanvas(this.container[0], this.width, this.height), \"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch ? this.params.bindTouchEvents && this.bindContainerTouchEvents() : this.bindContainerEvents(), this.bindElementEvents(), this.createLabel(), this.params.zoomButtons && this.bindZoomButtons(), this.createRegions(), this.createMarkers(this.params.markers || {}), this.setSize(), this.params.focusOn && (_typeof(this.params.focusOn) == \"object\" ? this.setFocus.call(this, this.params.focusOn.scale, this.params.focusOn.x, this.params.focusOn.y) : this.setFocus.call(this, this.params.focusOn)), this.params.selectedRegions && this.setSelectedRegions(this.params.selectedRegions), this.params.selectedMarkers && this.setSelectedMarkers(this.params.selectedMarkers), this.params.series && this.createSeries();\n}, jvm.WorldMap.prototype = { transX: 0, transY: 0, scale: 1, baseTransX: 0, baseTransY: 0, baseScale: 1, width: 0, height: 0, setBackgroundColor: function setBackgroundColor(e) {\n this.container.css(\"background-color\", e);\n }, resize: function resize() {\n var e = this.baseScale;this.width / this.height > this.defaultWidth / this.defaultHeight ? (this.baseScale = this.height / this.defaultHeight, this.baseTransX = Math.abs(this.width - this.defaultWidth * this.baseScale) / (2 * this.baseScale)) : (this.baseScale = this.width / this.defaultWidth, this.baseTransY = Math.abs(this.height - this.defaultHeight * this.baseScale) / (2 * this.baseScale)), this.scale *= this.baseScale / e, this.transX *= this.baseScale / e, this.transY *= this.baseScale / e;\n }, setSize: function setSize() {\n this.width = this.container.width(), this.height = this.container.height(), this.resize(), this.canvas.setSize(this.width, this.height), this.applyTransform();\n }, reset: function reset() {\n var e, t;for (e in this.series) {\n for (t = 0; t < this.series[e].length; t++) {\n this.series[e][t].clear();\n }\n }this.scale = this.baseScale, this.transX = this.baseTransX, this.transY = this.baseTransY, this.applyTransform();\n }, applyTransform: function applyTransform() {\n var e, t, n, r;this.defaultWidth * this.scale <= this.width ? (e = (this.width - this.defaultWidth * this.scale) / (2 * this.scale), n = (this.width - this.defaultWidth * this.scale) / (2 * this.scale)) : (e = 0, n = (this.width - this.defaultWidth * this.scale) / this.scale), this.defaultHeight * this.scale <= this.height ? (t = (this.height - this.defaultHeight * this.scale) / (2 * this.scale), r = (this.height - this.defaultHeight * this.scale) / (2 * this.scale)) : (t = 0, r = (this.height - this.defaultHeight * this.scale) / this.scale), this.transY > t ? this.transY = t : this.transY < r && (this.transY = r), this.transX > e ? this.transX = e : this.transX < n && (this.transX = n), this.canvas.applyTransformParams(this.scale, this.transX, this.transY), this.markers && this.repositionMarkers(), this.container.trigger(\"viewportChange\", [this.scale / this.baseScale, this.transX, this.transY]);\n }, bindContainerEvents: function bindContainerEvents() {\n var e = !1,\n t,\n n,\n r = this;this.container.mousemove(function (i) {\n return e && (r.transX -= (t - i.pageX) / r.scale, r.transY -= (n - i.pageY) / r.scale, r.applyTransform(), t = i.pageX, n = i.pageY), !1;\n }).mousedown(function (r) {\n return e = !0, t = r.pageX, n = r.pageY, !1;\n }), jvm.$(\"body\").mouseup(function () {\n e = !1;\n }), this.params.zoomOnScroll && this.container.mousewheel(function (e, t, n, i) {\n var s = jvm.$(r.container).offset(),\n o = e.pageX - s.left,\n u = e.pageY - s.top,\n a = Math.pow(1.3, i);r.label.hide(), r.setScale(r.scale * a, o, u), e.preventDefault();\n });\n }, bindContainerTouchEvents: function bindContainerTouchEvents() {\n var e,\n t,\n n = this,\n r,\n i,\n s,\n o,\n u,\n a = function a(_a) {\n var f = _a.originalEvent.touches,\n l,\n c,\n h,\n p;_a.type == \"touchstart\" && (u = 0), f.length == 1 ? (u == 1 && (h = n.transX, p = n.transY, n.transX -= (r - f[0].pageX) / n.scale, n.transY -= (i - f[0].pageY) / n.scale, n.applyTransform(), n.label.hide(), (h != n.transX || p != n.transY) && _a.preventDefault()), r = f[0].pageX, i = f[0].pageY) : f.length == 2 && (u == 2 ? (c = Math.sqrt(Math.pow(f[0].pageX - f[1].pageX, 2) + Math.pow(f[0].pageY - f[1].pageY, 2)) / t, n.setScale(e * c, s, o), n.label.hide(), _a.preventDefault()) : (l = jvm.$(n.container).offset(), f[0].pageX > f[1].pageX ? s = f[1].pageX + (f[0].pageX - f[1].pageX) / 2 : s = f[0].pageX + (f[1].pageX - f[0].pageX) / 2, f[0].pageY > f[1].pageY ? o = f[1].pageY + (f[0].pageY - f[1].pageY) / 2 : o = f[0].pageY + (f[1].pageY - f[0].pageY) / 2, s -= l.left, o -= l.top, e = n.scale, t = Math.sqrt(Math.pow(f[0].pageX - f[1].pageX, 2) + Math.pow(f[0].pageY - f[1].pageY, 2)))), u = f.length;\n };jvm.$(this.container).bind(\"touchstart\", a), jvm.$(this.container).bind(\"touchmove\", a);\n }, bindElementEvents: function bindElementEvents() {\n var e = this,\n t;this.container.mousemove(function () {\n t = !0;\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mouseover mouseout\", function (t) {\n var n = this,\n r = jvm.$(this).attr(\"class\").baseVal ? jvm.$(this).attr(\"class\").baseVal : jvm.$(this).attr(\"class\"),\n i = r.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"region\",\n s = i == \"region\" ? jvm.$(this).attr(\"data-code\") : jvm.$(this).attr(\"data-index\"),\n o = i == \"region\" ? e.regions[s].element : e.markers[s].element,\n u = i == \"region\" ? e.mapData.paths[s].name : e.markers[s].config.name || \"\",\n a = jvm.$.Event(i + \"LabelShow.jvectormap\"),\n f = jvm.$.Event(i + \"Over.jvectormap\");t.type == \"mouseover\" ? (e.container.trigger(f, [s]), f.isDefaultPrevented() || o.setHovered(!0), e.label.text(u), e.container.trigger(a, [e.label, s]), a.isDefaultPrevented() || (e.label.show(), e.labelWidth = e.label.width(), e.labelHeight = e.label.height())) : (o.setHovered(!1), e.label.hide(), e.container.trigger(i + \"Out.jvectormap\", [s]));\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mousedown\", function (e) {\n t = !1;\n }), this.container.delegate(\"[class~='jvectormap-element']\", \"mouseup\", function (n) {\n var r = this,\n i = jvm.$(this).attr(\"class\").baseVal ? jvm.$(this).attr(\"class\").baseVal : jvm.$(this).attr(\"class\"),\n s = i.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"region\",\n o = s == \"region\" ? jvm.$(this).attr(\"data-code\") : jvm.$(this).attr(\"data-index\"),\n u = jvm.$.Event(s + \"Click.jvectormap\"),\n a = s == \"region\" ? e.regions[o].element : e.markers[o].element;if (!t) {\n e.container.trigger(u, [o]);if (s === \"region\" && e.params.regionsSelectable || s === \"marker\" && e.params.markersSelectable) u.isDefaultPrevented() || (e.params[s + \"sSelectableOne\"] && e.clearSelected(s + \"s\"), a.setSelected(!a.isSelected));\n }\n });\n }, bindZoomButtons: function bindZoomButtons() {\n var e = this;jvm.$(\"<div/>\").addClass(\"jvectormap-zoomin\").text(\"+\").appendTo(this.container), jvm.$(\"<div/>\").addClass(\"jvectormap-zoomout\").html(\"&#x2212;\").appendTo(this.container), this.container.find(\".jvectormap-zoomin\").click(function () {\n e.setScale(e.scale * e.params.zoomStep, e.width / 2, e.height / 2);\n }), this.container.find(\".jvectormap-zoomout\").click(function () {\n e.setScale(e.scale / e.params.zoomStep, e.width / 2, e.height / 2);\n });\n }, createLabel: function createLabel() {\n var e = this;this.label = jvm.$(\"<div/>\").addClass(\"jvectormap-label\").appendTo(jvm.$(\"body\")), this.container.mousemove(function (t) {\n var n = t.pageX - 15 - e.labelWidth,\n r = t.pageY - 15 - e.labelHeight;n < 5 && (n = t.pageX + 15), r < 5 && (r = t.pageY + 15), e.label.is(\":visible\") && e.label.css({ left: n, top: r });\n });\n }, setScale: function setScale(e, t, n, r) {\n var i,\n s = jvm.$.Event(\"zoom.jvectormap\");e > this.params.zoomMax * this.baseScale ? e = this.params.zoomMax * this.baseScale : e < this.params.zoomMin * this.baseScale && (e = this.params.zoomMin * this.baseScale), typeof t != \"undefined\" && typeof n != \"undefined\" && (i = e / this.scale, r ? (this.transX = t + this.defaultWidth * (this.width / (this.defaultWidth * e)) / 2, this.transY = n + this.defaultHeight * (this.height / (this.defaultHeight * e)) / 2) : (this.transX -= (i - 1) / e * t, this.transY -= (i - 1) / e * n)), this.scale = e, this.applyTransform(), this.container.trigger(s, [e / this.baseScale]);\n }, setFocus: function setFocus(e, t, n) {\n var r, i, s, o, u;if (jvm.$.isArray(e) || this.regions[e]) {\n jvm.$.isArray(e) ? o = e : o = [e];for (u = 0; u < o.length; u++) {\n this.regions[o[u]] && (i = this.regions[o[u]].element.getBBox(), i && (typeof r == \"undefined\" ? r = i : (s = { x: Math.min(r.x, i.x), y: Math.min(r.y, i.y), width: Math.max(r.x + r.width, i.x + i.width) - Math.min(r.x, i.x), height: Math.max(r.y + r.height, i.y + i.height) - Math.min(r.y, i.y) }, r = s)));\n }this.setScale(Math.min(this.width / r.width, this.height / r.height), -(r.x + r.width / 2), -(r.y + r.height / 2), !0);\n } else e *= this.baseScale, this.setScale(e, -t * this.defaultWidth, -n * this.defaultHeight, !0);\n }, getSelected: function getSelected(e) {\n var t,\n n = [];for (t in this[e]) {\n this[e][t].element.isSelected && n.push(t);\n }return n;\n }, getSelectedRegions: function getSelectedRegions() {\n return this.getSelected(\"regions\");\n }, getSelectedMarkers: function getSelectedMarkers() {\n return this.getSelected(\"markers\");\n }, setSelected: function setSelected(e, t) {\n var n;(typeof t === \"undefined\" ? \"undefined\" : _typeof(t)) != \"object\" && (t = [t]);if (jvm.$.isArray(t)) for (n = 0; n < t.length; n++) {\n this[e][t[n]].element.setSelected(!0);\n } else for (n in t) {\n this[e][n].element.setSelected(!!t[n]);\n }\n }, setSelectedRegions: function setSelectedRegions(e) {\n this.setSelected(\"regions\", e);\n }, setSelectedMarkers: function setSelectedMarkers(e) {\n this.setSelected(\"markers\", e);\n }, clearSelected: function clearSelected(e) {\n var t = {},\n n = this.getSelected(e),\n r;for (r = 0; r < n.length; r++) {\n t[n[r]] = !1;\n }this.setSelected(e, t);\n }, clearSelectedRegions: function clearSelectedRegions() {\n this.clearSelected(\"regions\");\n }, clearSelectedMarkers: function clearSelectedMarkers() {\n this.clearSelected(\"markers\");\n }, getMapObject: function getMapObject() {\n return this;\n }, getRegionName: function getRegionName(e) {\n return this.mapData.paths[e].name;\n }, createRegions: function createRegions() {\n var e,\n t,\n n = this;for (e in this.mapData.paths) {\n t = this.canvas.addPath({ d: this.mapData.paths[e].path, \"data-code\": e }, jvm.$.extend(!0, {}, this.params.regionStyle)), jvm.$(t.node).bind(\"selected\", function (e, t) {\n n.container.trigger(\"regionSelected.jvectormap\", [jvm.$(this).attr(\"data-code\"), t, n.getSelectedRegions()]);\n }), t.addClass(\"jvectormap-region jvectormap-element\"), this.regions[e] = { element: t, config: this.mapData.paths[e] };\n }\n }, createMarkers: function createMarkers(e) {\n var t,\n n,\n r,\n i,\n s,\n o = this;this.markersGroup = this.markersGroup || this.canvas.addGroup();if (jvm.$.isArray(e)) {\n s = e.slice(), e = {};for (t = 0; t < s.length; t++) {\n e[t] = s[t];\n }\n }for (t in e) {\n i = e[t] instanceof Array ? { latLng: e[t] } : e[t], r = this.getMarkerPosition(i), r !== !1 && (n = this.canvas.addCircle({ \"data-index\": t, cx: r.x, cy: r.y }, jvm.$.extend(!0, {}, this.params.markerStyle, { initial: i.style || {} }), this.markersGroup), n.addClass(\"jvectormap-marker jvectormap-element\"), jvm.$(n.node).bind(\"selected\", function (e, t) {\n o.container.trigger(\"markerSelected.jvectormap\", [jvm.$(this).attr(\"data-index\"), t, o.getSelectedMarkers()]);\n }), this.markers[t] && this.removeMarkers([t]), this.markers[t] = { element: n, config: i });\n }\n }, repositionMarkers: function repositionMarkers() {\n var e, t;for (e in this.markers) {\n t = this.getMarkerPosition(this.markers[e].config), t !== !1 && this.markers[e].element.setStyle({ cx: t.x, cy: t.y });\n }\n }, getMarkerPosition: function getMarkerPosition(e) {\n return jvm.WorldMap.maps[this.params.map].projection ? this.latLngToPoint.apply(this, e.latLng || [0, 0]) : { x: e.coords[0] * this.scale + this.transX * this.scale, y: e.coords[1] * this.scale + this.transY * this.scale };\n }, addMarker: function addMarker(e, t, n) {\n var r = {},\n i = [],\n s,\n o,\n n = n || [];r[e] = t;for (o = 0; o < n.length; o++) {\n s = {}, s[e] = n[o], i.push(s);\n }this.addMarkers(r, i);\n }, addMarkers: function addMarkers(e, t) {\n var n;t = t || [], this.createMarkers(e);for (n = 0; n < t.length; n++) {\n this.series.markers[n].setValues(t[n] || {});\n }\n }, removeMarkers: function removeMarkers(e) {\n var t;for (t = 0; t < e.length; t++) {\n this.markers[e[t]].element.remove(), delete this.markers[e[t]];\n }\n }, removeAllMarkers: function removeAllMarkers() {\n var e,\n t = [];for (e in this.markers) {\n t.push(e);\n }this.removeMarkers(t);\n }, latLngToPoint: function latLngToPoint(e, t) {\n var n,\n r = jvm.WorldMap.maps[this.params.map].projection,\n i = r.centralMeridian,\n s = this.width - this.baseTransX * 2 * this.baseScale,\n o = this.height - this.baseTransY * 2 * this.baseScale,\n u,\n a,\n f = this.scale / this.baseScale;return t < -180 + i && (t += 360), n = jvm.Proj[r.type](e, t, i), u = this.getInsetForPoint(n.x, n.y), u ? (a = u.bbox, n.x = (n.x - a[0].x) / (a[1].x - a[0].x) * u.width * this.scale, n.y = (n.y - a[0].y) / (a[1].y - a[0].y) * u.height * this.scale, { x: n.x + this.transX * this.scale + u.left * this.scale, y: n.y + this.transY * this.scale + u.top * this.scale }) : !1;\n }, pointToLatLng: function pointToLatLng(e, t) {\n var n = jvm.WorldMap.maps[this.params.map].projection,\n r = n.centralMeridian,\n i = jvm.WorldMap.maps[this.params.map].insets,\n s,\n o,\n u,\n a,\n f;for (s = 0; s < i.length; s++) {\n o = i[s], u = o.bbox, a = e - (this.transX * this.scale + o.left * this.scale), f = t - (this.transY * this.scale + o.top * this.scale), a = a / (o.width * this.scale) * (u[1].x - u[0].x) + u[0].x, f = f / (o.height * this.scale) * (u[1].y - u[0].y) + u[0].y;if (a > u[0].x && a < u[1].x && f > u[0].y && f < u[1].y) return jvm.Proj[n.type + \"_inv\"](a, -f, r);\n }return !1;\n }, getInsetForPoint: function getInsetForPoint(e, t) {\n var n = jvm.WorldMap.maps[this.params.map].insets,\n r,\n i;for (r = 0; r < n.length; r++) {\n i = n[r].bbox;if (e > i[0].x && e < i[1].x && t > i[0].y && t < i[1].y) return n[r];\n }\n }, createSeries: function createSeries() {\n var e, t;this.series = { markers: [], regions: [] };for (t in this.params.series) {\n for (e = 0; e < this.params.series[t].length; e++) {\n this.series[t][e] = new jvm.DataSeries(this.params.series[t][e], this[t]);\n }\n }\n }, remove: function remove() {\n this.label.remove(), this.container.remove(), jvm.$(window).unbind(\"resize\", this.onResize);\n } }, jvm.WorldMap.maps = {}, jvm.WorldMap.defaultParams = { map: \"world_mill_en\", backgroundColor: \"#505050\", zoomButtons: !0, zoomOnScroll: !0, zoomMax: 8, zoomMin: 1, zoomStep: 1.6, regionsSelectable: !1, markersSelectable: !1, bindTouchEvents: !0, regionStyle: { initial: { fill: \"white\", \"fill-opacity\": 1, stroke: \"none\", \"stroke-width\": 0, \"stroke-opacity\": 1 }, hover: { \"fill-opacity\": .8 }, selected: { fill: \"yellow\" }, selectedHover: {} }, markerStyle: { initial: { fill: \"grey\", stroke: \"#505050\", \"fill-opacity\": 1, \"stroke-width\": 1, \"stroke-opacity\": 1, r: 5 }, hover: { stroke: \"black\", \"stroke-width\": 2 }, selected: { fill: \"blue\" }, selectedHover: {} } }, jvm.WorldMap.apiEvents = { onRegionLabelShow: \"regionLabelShow\", onRegionOver: \"regionOver\", onRegionOut: \"regionOut\", onRegionClick: \"regionClick\", onRegionSelected: \"regionSelected\", onMarkerLabelShow: \"markerLabelShow\", onMarkerOver: \"markerOver\", onMarkerOut: \"markerOut\", onMarkerClick: \"markerClick\", onMarkerSelected: \"markerSelected\", onViewportChange: \"viewportChange\" };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtMS4yLjIubWluLmpzPzQ3MjEiXSwibmFtZXMiOlsiZSIsInQiLCJzZXQiLCJjb2xvcnMiLCJ2YWx1ZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzY2FsZUNvbG9ycyIsIm5vcm1hbGl6ZUZ1bmN0aW9uIiwiZm9jdXMiLCJnZXQiLCJzZWxlY3RlZFJlZ2lvbnMiLCJzZWxlY3RlZE1hcmtlcnMiLCJtYXBPYmplY3QiLCJyZWdpb25OYW1lIiwiZm4iLCJ2ZWN0b3JNYXAiLCJuIiwiciIsImkiLCJjaGlsZHJlbiIsImRhdGEiLCJqdm0iLCJXb3JsZE1hcCIsIm1hcHMiLCJhcmd1bWVudHMiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0ciIsImFwcGx5IiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJjb250YWluZXIiLCJqUXVlcnkiLCJ3aW5kb3ciLCJldmVudCIsInMiLCJvIiwidSIsImZpeCIsInR5cGUiLCJ3aGVlbERlbHRhIiwiZGV0YWlsIiwiYXhpcyIsInVuZGVmaW5lZCIsIkhPUklaT05UQUxfQVhJUyIsIndoZWVsRGVsdGFZIiwid2hlZWxEZWx0YVgiLCJ1bnNoaWZ0IiwiZGlzcGF0Y2giLCJoYW5kbGUiLCJmaXhIb29rcyIsImxlbmd0aCIsIm1vdXNlSG9va3MiLCJzcGVjaWFsIiwibW91c2V3aGVlbCIsInNldHVwIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ubW91c2V3aGVlbCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV4dGVuZCIsImJpbmQiLCJ0cmlnZ2VyIiwidW5tb3VzZXdoZWVsIiwidW5iaW5kIiwiaW5oZXJpdHMiLCJjb25zdHJ1Y3RvciIsInBhcmVudENsYXNzIiwibWl4aW4iLCJoYXNPd25Qcm9wZXJ0eSIsIm1pbiIsIk51bWJlciIsIk1BWF9WQUxVRSIsIm1heCIsIk1JTl9WQUxVRSIsImtleXMiLCJwdXNoIiwiJCIsIkFic3RyYWN0RWxlbWVudCIsIm5vZGUiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsInByb3BlcnRpZXMiLCJhcHBseUF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmUiLCJBYnN0cmFjdENhbnZhc0VsZW1lbnQiLCJzZXRTaXplIiwicm9vdEVsZW1lbnQiLCJjbGFzc1ByZWZpeCIsImFwcGVuZENoaWxkIiwiYWRkIiwiY2FudmFzIiwiYWRkUGF0aCIsImFkZENpcmNsZSIsImFkZEdyb3VwIiwiQWJzdHJhY3RTaGFwZUVsZW1lbnQiLCJzdHlsZSIsImN1cnJlbnQiLCJpc0hvdmVyZWQiLCJpc1NlbGVjdGVkIiwidXBkYXRlU3R5bGUiLCJzZXRIb3ZlcmVkIiwic2V0U2VsZWN0ZWQiLCJzZXRTdHlsZSIsIm1lcmdlU3R5bGVzIiwiaW5pdGlhbCIsImhvdmVyIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEhvdmVyIiwiU1ZHRWxlbWVudCIsInN2Z25zIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhZGRDbGFzcyIsImdldEVsZW1lbnRDdHIiLCJnZXRCQm94IiwiU1ZHR3JvdXBFbGVtZW50IiwiU1ZHQ2FudmFzRWxlbWVudCIsIndpZHRoIiwiaGVpZ2h0IiwiYXBwbHlUcmFuc2Zvcm1QYXJhbXMiLCJzY2FsZSIsInRyYW5zWCIsInRyYW5zWSIsIlNWR1NoYXBlRWxlbWVudCIsIlNWR1BhdGhFbGVtZW50IiwiU1ZHQ2lyY2xlRWxlbWVudCIsIlZNTEVsZW1lbnQiLCJWTUxJbml0aWFsaXplZCIsImluaXRpYWxpemVWTUwiLCJuYW1lc3BhY2VzIiwicnZtbCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJhZGRSdWxlIiwieCIsInBvc2l0aW9uIiwibGVmdCIsInkiLCJ0b3AiLCJWTUxHcm91cEVsZW1lbnQiLCJjb29yZG9yaWdpbiIsIlZNTENhbnZhc0VsZW1lbnQiLCJjb29yZHNpemUiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIlZNTFNoYXBlRWxlbWVudCIsImZpbGxFbGVtZW50Iiwic3Ryb2tlRWxlbWVudCIsInN0cm9rZWQiLCJmaWxsY29sb3IiLCJvcGFjaXR5IiwiTWF0aCIsInJvdW5kIiwic3Ryb2tlY29sb3IiLCJwYXJzZUludCIsInN0cm9rZXdlaWdodCIsInBhdGgiLCJWTUxQYXRoRWxlbWVudCIsInBhdGhTdmdUb1ZtbCIsIm9uIiwibWF0cml4Iiwib2Zmc2V0IiwicmVwbGFjZSIsInNwbGl0Iiwic2hpZnQiLCJhIiwiZiIsImpvaW4iLCJWTUxDaXJjbGVFbGVtZW50IiwiVmVjdG9yQ2FudmFzIiwibW9kZSIsIlNWR0FuZ2xlIiwiaW1wbCIsIlNpbXBsZVNjYWxlIiwiZ2V0VmFsdWUiLCJPcmRpbmFsU2NhbGUiLCJOdW1lcmljU2NhbGUiLCJzZXRTY2FsZSIsInNldE5vcm1hbGl6ZUZ1bmN0aW9uIiwic2V0TWluIiwic2V0TWF4IiwiY2xlYXJNaW5WYWx1ZSIsIm5vcm1hbGl6ZSIsIm1pblZhbHVlIiwiY2xlYXJNYXhWYWx1ZSIsIm1heFZhbHVlIiwicG93IiwidmVjdG9yTGVuZ3RoIiwidmVjdG9yU3VidHJhY3QiLCJ2ZWN0b3JUb051bSIsInZlY3RvckFkZCIsInZlY3Rvck11bHQiLCJzcXJ0IiwiQ29sb3JTY2FsZSIsInJnYlRvQXJyYXkiLCJudW1Ub1JnYiIsImFycmF5VG9SZ2IiLCJ0b1N0cmluZyIsIkRhdGFTZXJpZXMiLCJhdHRyaWJ1dGUiLCJlbGVtZW50cyIsInBhcmFtcyIsImF0dHJpYnV0ZXMiLCJzZXRBdHRyaWJ1dGVzIiwiaXNBcnJheSIsInNldFZhbHVlcyIsImVsZW1lbnQiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJjbGVhciIsIlByb2oiLCJkZWdSYWQiLCJQSSIsInJhZERlZyIsInJhZGl1cyIsInNnbiIsIm1pbGwiLCJsb2ciLCJ0YW4iLCJtaWxsX2ludiIsImxhdCIsImF0YW4iLCJleHAiLCJsbmciLCJtZXJjIiwibWVyY19pbnYiLCJhZWEiLCJzaW4iLCJsIiwiY29zIiwiYyIsImgiLCJwIiwiYWVhX2ludiIsImFzaW4iLCJsY2MiLCJsY2NfaW52IiwiZGVmYXVsdFBhcmFtcyIsIm1hcCIsIkVycm9yIiwibWFwRGF0YSIsIm1hcmtlcnMiLCJyZWdpb25zIiwicmVnaW9uc0NvbG9ycyIsInJlZ2lvbnNEYXRhIiwiY3NzIiwiYXBwZW5kIiwib3ZlcmZsb3ciLCJkZWZhdWx0V2lkdGgiLCJkZWZhdWx0SGVpZ2h0Iiwic2V0QmFja2dyb3VuZENvbG9yIiwib25SZXNpemUiLCJyZXNpemUiLCJhcGlFdmVudHMiLCJEb2N1bWVudFRvdWNoIiwiYmluZFRvdWNoRXZlbnRzIiwiYmluZENvbnRhaW5lclRvdWNoRXZlbnRzIiwiYmluZENvbnRhaW5lckV2ZW50cyIsImJpbmRFbGVtZW50RXZlbnRzIiwiY3JlYXRlTGFiZWwiLCJ6b29tQnV0dG9ucyIsImJpbmRab29tQnV0dG9ucyIsImNyZWF0ZVJlZ2lvbnMiLCJjcmVhdGVNYXJrZXJzIiwiZm9jdXNPbiIsInNldEZvY3VzIiwic2V0U2VsZWN0ZWRSZWdpb25zIiwic2V0U2VsZWN0ZWRNYXJrZXJzIiwic2VyaWVzIiwiY3JlYXRlU2VyaWVzIiwiYmFzZVRyYW5zWCIsImJhc2VUcmFuc1kiLCJiYXNlU2NhbGUiLCJhYnMiLCJhcHBseVRyYW5zZm9ybSIsInJlc2V0IiwicmVwb3NpdGlvbk1hcmtlcnMiLCJtb3VzZW1vdmUiLCJwYWdlWCIsInBhZ2VZIiwibW91c2Vkb3duIiwibW91c2V1cCIsInpvb21PblNjcm9sbCIsImxhYmVsIiwiaGlkZSIsInByZXZlbnREZWZhdWx0Iiwib3JpZ2luYWxFdmVudCIsInRvdWNoZXMiLCJkZWxlZ2F0ZSIsImF0dHIiLCJiYXNlVmFsIiwiaW5kZXhPZiIsInBhdGhzIiwiY29uZmlnIiwiRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJ0ZXh0Iiwic2hvdyIsImxhYmVsV2lkdGgiLCJsYWJlbEhlaWdodCIsInJlZ2lvbnNTZWxlY3RhYmxlIiwibWFya2Vyc1NlbGVjdGFibGUiLCJjbGVhclNlbGVjdGVkIiwiYXBwZW5kVG8iLCJodG1sIiwiZmluZCIsImNsaWNrIiwiem9vbVN0ZXAiLCJpcyIsInpvb21NYXgiLCJ6b29tTWluIiwiZ2V0U2VsZWN0ZWQiLCJnZXRTZWxlY3RlZFJlZ2lvbnMiLCJnZXRTZWxlY3RlZE1hcmtlcnMiLCJjbGVhclNlbGVjdGVkUmVnaW9ucyIsImNsZWFyU2VsZWN0ZWRNYXJrZXJzIiwiZ2V0TWFwT2JqZWN0IiwiZ2V0UmVnaW9uTmFtZSIsImQiLCJyZWdpb25TdHlsZSIsIm1hcmtlcnNHcm91cCIsImxhdExuZyIsImdldE1hcmtlclBvc2l0aW9uIiwiY3giLCJjeSIsIm1hcmtlclN0eWxlIiwicmVtb3ZlTWFya2VycyIsInByb2plY3Rpb24iLCJsYXRMbmdUb1BvaW50IiwiY29vcmRzIiwiYWRkTWFya2VyIiwiYWRkTWFya2VycyIsInJlbW92ZUFsbE1hcmtlcnMiLCJjZW50cmFsTWVyaWRpYW4iLCJnZXRJbnNldEZvclBvaW50IiwiYmJveCIsInBvaW50VG9MYXRMbmciLCJpbnNldHMiLCJmaWxsIiwic3Ryb2tlIiwib25SZWdpb25MYWJlbFNob3ciLCJvblJlZ2lvbk92ZXIiLCJvblJlZ2lvbk91dCIsIm9uUmVnaW9uQ2xpY2siLCJvblJlZ2lvblNlbGVjdGVkIiwib25NYXJrZXJMYWJlbFNob3ciLCJvbk1hcmtlck92ZXIiLCJvbk1hcmtlck91dCIsIm9uTWFya2VyQ2xpY2siLCJvbk1hcmtlclNlbGVjdGVkIiwib25WaWV3cG9ydENoYW5nZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUcsQ0FBQyxVQUFTQSxDQUFULEVBQVc7QUFBQyxNQUFJQyxJQUFFLEVBQUNDLEtBQUksRUFBQ0MsUUFBTyxDQUFSLEVBQVVDLFFBQU8sQ0FBakIsRUFBbUJDLGlCQUFnQixDQUFuQyxFQUFxQ0MsYUFBWSxDQUFqRCxFQUFtREMsbUJBQWtCLENBQXJFLEVBQXVFQyxPQUFNLENBQTdFLEVBQUwsRUFBcUZDLEtBQUksRUFBQ0MsaUJBQWdCLENBQWpCLEVBQW1CQyxpQkFBZ0IsQ0FBbkMsRUFBcUNDLFdB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SyxFQUQraS9CLEVBQTl6NkIsRUFDOWpFMUYsSUFBSUMsUUFBSixDQUFheU8sU0FBYixHQUF1QixFQUFDdUYsbUJBQWtCLGlCQUFuQixFQUFxQ0MsY0FBYSxZQUFsRCxFQUErREMsYUFBWSxXQUEzRSxFQUF1RkMsZUFBYyxhQUFyRyxFQUFtSEMsa0JBQWlCLGdCQUFwSSxFQUFxSkMsbUJBQWtCLGlCQUF2SyxFQUF5TEMsY0FBYSxZQUF0TSxFQUFtTkMsYUFBWSxXQUEvTixFQUEyT0MsZUFBYyxhQUF6UCxFQUF1UUMsa0JBQWlCLGdCQUF4UixFQUF5U0Msa0JBQWlCLGdCQUExVCxFQUR1aUUiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGpWZWN0b3JNYXAgdmVyc2lvbiAxLjIuMlxuICpcbiAqIENvcHlyaWdodCAyMDExLTIwMTMsIEtpcmlsbCBMZWJlZGV2XG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICovKGZ1bmN0aW9uKGUpe3ZhciB0PXtzZXQ6e2NvbG9yczoxLHZhbHVlczoxLGJhY2tncm91bmRDb2xvcjoxLHNjYWxlQ29sb3JzOjEsbm9ybWFsaXplRnVuY3Rpb246MSxmb2N1czoxfSxnZXQ6e3NlbGVjdGVkUmVnaW9uczoxLHNlbGVjdGVkTWFya2VyczoxLG1hcE9iamVjdDoxLHJlZ2lvbk5hbWU6MX19O2UuZm4udmVjdG9yTWFwPWZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxuPXRoaXMuY2hpbGRyZW4oXCIuanZlY3Rvcm1hcC1jb250YWluZXJcIikuZGF0YShcIm1hcE9iamVjdFwiKTtpZihlPT09XCJhZGRNYXBcIilqdm0uV29ybGRNYXAubWFwc1thcmd1bWVudHNbMV1dPWFyZ3VtZW50c1syXTtlbHNle2lmKCEoZSE9PVwic2V0XCImJmUhPT1cImdldFwifHwhdFtlXVthcmd1bWVudHNbMV1dKSlyZXR1cm4gcj1hcmd1bWVudHNbMV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYXJndW1lbnRzWzFdLnN1YnN0cigxKSxuW2Urcl0uYXBwbHkobixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2U9ZXx8e30sZS5jb250YWluZXI9dGhpcyxuPW5ldyBqdm0uV29ybGRNYXAoZSl9cmV0dXJuIHRoaXN9fSkoalF1ZXJ5KSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3ZhciBuPXR8fHdpbmRvdy5ldmVudCxyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGk9MCxzPSEwLG89MCx1PTA7cmV0dXJuIHQ9ZS5ldmVudC5maXgobiksdC50eXBlPVwibW91c2V3aGVlbFwiLG4ud2hlZWxEZWx0YSYmKGk9bi53aGVlbERlbHRhLzEyMCksbi5kZXRhaWwmJihpPS1uLmRldGFpbC8zKSx1PWksbi5heGlzIT09dW5kZWZpbmVkJiZuLmF4aXM9PT1uLkhPUklaT05UQUxfQVhJUyYmKHU9MCxvPS0xKmkpLG4ud2hlZWxEZWx0YVkhPT11bmRlZmluZWQmJih1PW4ud2hlZWxEZWx0YVkvMTIwKSxuLndoZWVsRGVsdGFYIT09dW5kZWZpbmVkJiYobz0tMSpuLndoZWVsRGVsdGFYLzEyMCksci51bnNoaWZ0KHQsaSxvLHUpLChlLmV2ZW50LmRpc3BhdGNofHxlLmV2ZW50LmhhbmRsZSkuYXBwbHkodGhpcyxyKX12YXIgdD1bXCJET01Nb3VzZVNjcm9sbFwiLFwibW91c2V3aGVlbFwiXTtpZihlLmV2ZW50LmZpeEhvb2tzKWZvcih2YXIgbj10Lmxlbmd0aDtuOyllLmV2ZW50LmZpeEhvb2tzW3RbLS1uXV09ZS5ldmVudC5tb3VzZUhvb2tzO2UuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsPXtzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcilmb3IodmFyIGU9dC5sZW5ndGg7ZTspdGhpcy5hZGRFdmVudExpc3RlbmVyKHRbLS1lXSxyLCExKTtlbHNlIHRoaXMub25tb3VzZXdoZWVsPXJ9LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKWZvcih2YXIgZT10Lmxlbmd0aDtlOyl0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodFstLWVdLHIsITEpO2Vsc2UgdGhpcy5vbm1vdXNld2hlZWw9bnVsbH19LGUuZm4uZXh0ZW5kKHttb3VzZXdoZWVsOmZ1bmN0aW9uKGUpe3JldHVybiBlP3RoaXMuYmluZChcIm1vdXNld2hlZWxcIixlKTp0aGlzLnRyaWdnZXIoXCJtb3VzZXdoZWVsXCIpfSx1bm1vdXNld2hlZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudW5iaW5kKFwibW91c2V3aGVlbFwiLGUpfX0pfShqUXVlcnkpO3ZhciBqdm09e2luaGVyaXRzOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe31uLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbixlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucGFyZW50Q2xhc3M9dH0sbWl4aW46ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IobiBpbiB0LnByb3RvdHlwZSl0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShuKSYmKGUucHJvdG90eXBlW25dPXQucHJvdG90eXBlW25dKX0sbWluOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlci5NQVhfVkFMVUUsbjtpZihlIGluc3RhbmNlb2YgQXJyYXkpZm9yKG49MDtuPGUubGVuZ3RoO24rKyllW25dPHQmJih0PWVbbl0pO2Vsc2UgZm9yKG4gaW4gZSllW25dPHQmJih0PWVbbl0pO3JldHVybiB0fSxtYXg6ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyLk1JTl9WQUxVRSxuO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlmb3Iobj0wO248ZS5sZW5ndGg7bisrKWVbbl0+dCYmKHQ9ZVtuXSk7ZWxzZSBmb3IobiBpbiBlKWVbbl0+dCYmKHQ9ZVtuXSk7cmV0dXJuIHR9LGtleXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbjtmb3IobiBpbiBlKXQucHVzaChuKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLG4scjtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe2U9YXJndW1lbnRzW3JdO2ZvcihuIGluIGUpdC5wdXNoKGVbbl0pfXJldHVybiB0fX07anZtLiQ9alF1ZXJ5LGp2bS5BYnN0cmFjdEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLm5vZGU9dGhpcy5jcmVhdGVFbGVtZW50KGUpLHRoaXMubmFtZT1lLHRoaXMucHJvcGVydGllcz17fSx0JiZ0aGlzLnNldCh0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYodHlwZW9mIGU9PVwib2JqZWN0XCIpZm9yKG4gaW4gZSl0aGlzLnByb3BlcnRpZXNbbl09ZVtuXSx0aGlzLmFwcGx5QXR0cihuLGVbbl0pO2Vsc2UgdGhpcy5wcm9wZXJ0aWVzW2VdPXQsdGhpcy5hcHBseUF0dHIoZSx0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BlcnRpZXNbZV19LGp2bS5BYnN0cmFjdEVsZW1lbnQucHJvdG90eXBlLmFwcGx5QXR0cj1mdW5jdGlvbihlLHQpe3RoaXMubm9kZS5zZXRBdHRyaWJ1dGUoZSx0KX0sanZtLkFic3RyYWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7anZtLiQodGhpcy5ub2RlKS5yZW1vdmUoKX0sanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dGhpcy5jb250YWluZXI9ZSx0aGlzLnNldFNpemUodCxuKSx0aGlzLnJvb3RFbGVtZW50PW5ldyBqdm1bdGhpcy5jbGFzc1ByZWZpeCtcIkdyb3VwRWxlbWVudFwiXSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbWVudC5ub2RlKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0PXR8fHRoaXMucm9vdEVsZW1lbnQsdC5hZGQoZSksZS5jYW52YXM9dGhpc30sanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudC5wcm90b3R5cGUuYWRkUGF0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bmV3IGp2bVt0aGlzLmNsYXNzUHJlZml4K1wiUGF0aEVsZW1lbnRcIl0oZSx0KTtyZXR1cm4gdGhpcy5hZGQocixuKSxyfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGRDaXJjbGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW5ldyBqdm1bdGhpcy5jbGFzc1ByZWZpeCtcIkNpcmNsZUVsZW1lbnRcIl0oZSx0KTtyZXR1cm4gdGhpcy5hZGQocixuKSxyfSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hZGRHcm91cD1mdW5jdGlvbihlKXt2YXIgdD1uZXcganZtW3RoaXMuY2xhc3NQcmVmaXgrXCJHcm91cEVsZW1lbnRcIl07cmV0dXJuIGU/ZS5ub2RlLmFwcGVuZENoaWxkKHQubm9kZSk6dGhpcy5ub2RlLmFwcGVuZENoaWxkKHQubm9kZSksdC5jYW52YXM9dGhpcyx0fSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc3R5bGU9bnx8e30sdGhpcy5zdHlsZS5jdXJyZW50PXt9LHRoaXMuaXNIb3ZlcmVkPSExLHRoaXMuaXNTZWxlY3RlZD0hMSx0aGlzLnVwZGF0ZVN0eWxlKCl9LGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5wcm90b3R5cGUuc2V0SG92ZXJlZD1mdW5jdGlvbihlKXt0aGlzLmlzSG92ZXJlZCE9PWUmJih0aGlzLmlzSG92ZXJlZD1lLHRoaXMudXBkYXRlU3R5bGUoKSl9LGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5wcm90b3R5cGUuc2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oZSl7dGhpcy5pc1NlbGVjdGVkIT09ZSYmKHRoaXMuaXNTZWxlY3RlZD1lLHRoaXMudXBkYXRlU3R5bGUoKSxqdm0uJCh0aGlzLm5vZGUpLnRyaWdnZXIoXCJzZWxlY3RlZFwiLFtlXSkpfSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307dHlwZW9mIGU9PVwib2JqZWN0XCI/bj1lOm5bZV09dCxqdm0uJC5leHRlbmQodGhpcy5zdHlsZS5jdXJyZW50LG4pLHRoaXMudXBkYXRlU3R5bGUoKX0sanZtLkFic3RyYWN0U2hhcGVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVTdHlsZT1mdW5jdGlvbigpe3ZhciBlPXt9O2p2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5tZXJnZVN0eWxlcyhlLHRoaXMuc3R5bGUuaW5pdGlhbCksanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5jdXJyZW50KSx0aGlzLmlzSG92ZXJlZCYmanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5ob3ZlciksdGhpcy5pc1NlbGVjdGVkJiYoanZtLkFic3RyYWN0U2hhcGVFbGVtZW50Lm1lcmdlU3R5bGVzKGUsdGhpcy5zdHlsZS5zZWxlY3RlZCksdGhpcy5pc0hvdmVyZWQmJmp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5tZXJnZVN0eWxlcyhlLHRoaXMuc3R5bGUuc2VsZWN0ZWRIb3ZlcikpLHRoaXMuc2V0KGUpfSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQubWVyZ2VTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjt0PXR8fHt9O2ZvcihuIGluIHQpdFtuXT09PW51bGw/ZGVsZXRlIGVbbl06ZVtuXT10W25dfSxqdm0uU1ZHRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5TVkdFbGVtZW50LnBhcmVudENsYXNzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sanZtLmluaGVyaXRzKGp2bS5TVkdFbGVtZW50LGp2bS5BYnN0cmFjdEVsZW1lbnQpLGp2bS5TVkdFbGVtZW50LnN2Z25zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixqdm0uU1ZHRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp2bS5TVkdFbGVtZW50LnN2Z25zLGUpfSxqdm0uU1ZHRWxlbWVudC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24oZSl7dGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsZSl9LGp2bS5TVkdFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50Q3RyPWZ1bmN0aW9uKGUpe3JldHVybiBqdm1bXCJTVkdcIitlXX0sanZtLlNWR0VsZW1lbnQucHJvdG90eXBlLmdldEJCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldEJCb3goKX0sanZtLlNWR0dyb3VwRWxlbWVudD1mdW5jdGlvbigpe2p2bS5TVkdHcm91cEVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwiZ1wiKX0sanZtLmluaGVyaXRzKGp2bS5TVkdHcm91cEVsZW1lbnQsanZtLlNWR0VsZW1lbnQpLGp2bS5TVkdHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlKX0sanZtLlNWR0NhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY2xhc3NQcmVmaXg9XCJTVkdcIixqdm0uU1ZHQ2FudmFzRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJzdmdcIiksanZtLkFic3RyYWN0Q2FudmFzRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uU1ZHQ2FudmFzRWxlbWVudCxqdm0uU1ZHRWxlbWVudCksanZtLm1peGluKGp2bS5TVkdDYW52YXNFbGVtZW50LGp2bS5BYnN0cmFjdENhbnZhc0VsZW1lbnQpLGp2bS5TVkdDYW52YXNFbGVtZW50LnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXQsdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsZSksdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLHQpfSxqdm0uU1ZHQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm1QYXJhbXM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2NhbGU9ZSx0aGlzLnRyYW5zWD10LHRoaXMudHJhbnNZPW4sdGhpcy5yb290RWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwic2NhbGUoXCIrZStcIikgdHJhbnNsYXRlKFwiK3QrXCIsIFwiK24rXCIpXCIpfSxqdm0uU1ZHU2hhcGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtqdm0uU1ZHU2hhcGVFbGVtZW50LnBhcmVudENsYXNzLmNhbGwodGhpcyxlLHQpLGp2bS5BYnN0cmFjdFNoYXBlRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uU1ZHU2hhcGVFbGVtZW50LGp2bS5TVkdFbGVtZW50KSxqdm0ubWl4aW4oanZtLlNWR1NoYXBlRWxlbWVudCxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQpLGp2bS5TVkdQYXRoRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5TVkdQYXRoRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJwYXRoXCIsZSx0KSx0aGlzLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpfSxqdm0uaW5oZXJpdHMoanZtLlNWR1BhdGhFbGVtZW50LGp2bS5TVkdTaGFwZUVsZW1lbnQpLGp2bS5TVkdDaXJjbGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlNWR0NpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwiY2lyY2xlXCIsZSx0KX0sanZtLmluaGVyaXRzKGp2bS5TVkdDaXJjbGVFbGVtZW50LGp2bS5TVkdTaGFwZUVsZW1lbnQpLGp2bS5WTUxFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlZNTEVsZW1lbnQuVk1MSW5pdGlhbGl6ZWR8fGp2bS5WTUxFbGVtZW50LmluaXRpYWxpemVWTUwoKSxqdm0uVk1MRWxlbWVudC5wYXJlbnRDbGFzcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGp2bS5pbmhlcml0cyhqdm0uVk1MRWxlbWVudCxqdm0uQWJzdHJhY3RFbGVtZW50KSxqdm0uVk1MRWxlbWVudC5WTUxJbml0aWFsaXplZD0hMSxqdm0uVk1MRWxlbWVudC5pbml0aWFsaXplVk1MPWZ1bmN0aW9uKCl7dHJ5e2RvY3VtZW50Lm5hbWVzcGFjZXMucnZtbHx8ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoXCJydm1sXCIsXCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbFwiKSxqdm0uVk1MRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIjxydm1sOlwiK2UrJyBjbGFzcz1cInJ2bWxcIj4nKX19Y2F0Y2goZSl7anZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrZSsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cInJ2bWxcIj4nKX19ZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCgpLmFkZFJ1bGUoXCIucnZtbFwiLFwiYmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTClcIiksanZtLlZNTEVsZW1lbnQuVk1MSW5pdGlhbGl6ZWQ9ITB9LGp2bS5WTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50Q3RyPWZ1bmN0aW9uKGUpe3JldHVybiBqdm1bXCJWTUxcIitlXX0sanZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKGUpe2p2bS4kKHRoaXMubm9kZSkuYWRkQ2xhc3MoZSl9LGp2bS5WTUxFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXt0aGlzLm5vZGVbZV09dH0sanZtLlZNTEVsZW1lbnQucHJvdG90eXBlLmdldEJCb3g9ZnVuY3Rpb24oKXt2YXIgZT1qdm0uJCh0aGlzLm5vZGUpO3JldHVybnt4OmUucG9zaXRpb24oKS5sZWZ0L3RoaXMuY2FudmFzLnNjYWxlLHk6ZS5wb3NpdGlvbigpLnRvcC90aGlzLmNhbnZhcy5zY2FsZSx3aWR0aDplLndpZHRoKCkvdGhpcy5jYW52YXMuc2NhbGUsaGVpZ2h0OmUuaGVpZ2h0KCkvdGhpcy5jYW52YXMuc2NhbGV9fSxqdm0uVk1MR3JvdXBFbGVtZW50PWZ1bmN0aW9uKCl7anZtLlZNTEdyb3VwRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJncm91cFwiKSx0aGlzLm5vZGUuc3R5bGUubGVmdD1cIjBweFwiLHRoaXMubm9kZS5zdHlsZS50b3A9XCIwcHhcIix0aGlzLm5vZGUuY29vcmRvcmlnaW49XCIwIDBcIn0sanZtLmluaGVyaXRzKGp2bS5WTUxHcm91cEVsZW1lbnQsanZtLlZNTEVsZW1lbnQpLGp2bS5WTUxHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5ub2RlKX0sanZtLlZNTENhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuY2xhc3NQcmVmaXg9XCJWTUxcIixqdm0uVk1MQ2FudmFzRWxlbWVudC5wYXJlbnRDbGFzcy5jYWxsKHRoaXMsXCJncm91cFwiKSxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLm5vZGUuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwifSxqdm0uaW5oZXJpdHMoanZtLlZNTENhbnZhc0VsZW1lbnQsanZtLlZNTEVsZW1lbnQpLGp2bS5taXhpbihqdm0uVk1MQ2FudmFzRWxlbWVudCxqdm0uQWJzdHJhY3RDYW52YXNFbGVtZW50KSxqdm0uVk1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzO3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMubm9kZS5zdHlsZS53aWR0aD1lK1wicHhcIix0aGlzLm5vZGUuc3R5bGUuaGVpZ2h0PXQrXCJweFwiLHRoaXMubm9kZS5jb29yZHNpemU9ZStcIiBcIit0LHRoaXMubm9kZS5jb29yZG9yaWdpbj1cIjAgMFwiO2lmKHRoaXMucm9vdEVsZW1lbnQpe249dGhpcy5yb290RWxlbWVudC5ub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2hhcGVcIik7Zm9yKGk9MCxzPW4ubGVuZ3RoO2k8cztpKyspbltpXS5jb29yZHNpemU9ZStcIiBcIit0LG5baV0uc3R5bGUud2lkdGg9ZStcInB4XCIsbltpXS5zdHlsZS5oZWlnaHQ9dCtcInB4XCI7cj10aGlzLm5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJncm91cFwiKTtmb3IoaT0wLHM9ci5sZW5ndGg7aTxzO2krKylyW2ldLmNvb3Jkc2l6ZT1lK1wiIFwiK3QscltpXS5zdHlsZS53aWR0aD1lK1wicHhcIixyW2ldLnN0eWxlLmhlaWdodD10K1wicHhcIn19LGp2bS5WTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybVBhcmFtcz1mdW5jdGlvbihlLHQsbil7dGhpcy5zY2FsZT1lLHRoaXMudHJhbnNYPXQsdGhpcy50cmFuc1k9bix0aGlzLnJvb3RFbGVtZW50Lm5vZGUuY29vcmRvcmlnaW49dGhpcy53aWR0aC10LXRoaXMud2lkdGgvMTAwK1wiLFwiKyh0aGlzLmhlaWdodC1uLXRoaXMuaGVpZ2h0LzEwMCksdGhpcy5yb290RWxlbWVudC5ub2RlLmNvb3Jkc2l6ZT10aGlzLndpZHRoL2UrXCIsXCIrdGhpcy5oZWlnaHQvZX0sanZtLlZNTFNoYXBlRWxlbWVudD1mdW5jdGlvbihlLHQpe2p2bS5WTUxTaGFwZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLGUsdCksdGhpcy5maWxsRWxlbWVudD1uZXcganZtLlZNTEVsZW1lbnQoXCJmaWxsXCIpLHRoaXMuc3Ryb2tlRWxlbWVudD1uZXcganZtLlZNTEVsZW1lbnQoXCJzdHJva2VcIiksdGhpcy5ub2RlLmFwcGVuZENoaWxkKHRoaXMuZmlsbEVsZW1lbnQubm9kZSksdGhpcy5ub2RlLmFwcGVuZENoaWxkKHRoaXMuc3Ryb2tlRWxlbWVudC5ub2RlKSx0aGlzLm5vZGUuc3Ryb2tlZD0hMSxqdm0uQWJzdHJhY3RTaGFwZUVsZW1lbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxqdm0uaW5oZXJpdHMoanZtLlZNTFNoYXBlRWxlbWVudCxqdm0uVk1MRWxlbWVudCksanZtLm1peGluKGp2bS5WTUxTaGFwZUVsZW1lbnQsanZtLkFic3RyYWN0U2hhcGVFbGVtZW50KSxqdm0uVk1MU2hhcGVFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZmlsbFwiOnRoaXMubm9kZS5maWxsY29sb3I9dDticmVhaztjYXNlXCJmaWxsLW9wYWNpdHlcIjp0aGlzLmZpbGxFbGVtZW50Lm5vZGUub3BhY2l0eT1NYXRoLnJvdW5kKHQqMTAwKStcIiVcIjticmVhaztjYXNlXCJzdHJva2VcIjp0PT09XCJub25lXCI/dGhpcy5ub2RlLnN0cm9rZWQ9ITE6dGhpcy5ub2RlLnN0cm9rZWQ9ITAsdGhpcy5ub2RlLnN0cm9rZWNvbG9yPXQ7YnJlYWs7Y2FzZVwic3Ryb2tlLW9wYWNpdHlcIjp0aGlzLnN0cm9rZUVsZW1lbnQubm9kZS5vcGFjaXR5PU1hdGgucm91bmQodCoxMDApK1wiJVwiO2JyZWFrO2Nhc2VcInN0cm9rZS13aWR0aFwiOnBhcnNlSW50KHQsMTApPT09MD90aGlzLm5vZGUuc3Ryb2tlZD0hMTp0aGlzLm5vZGUuc3Ryb2tlZD0hMCx0aGlzLm5vZGUuc3Ryb2tld2VpZ2h0PXQ7YnJlYWs7Y2FzZVwiZFwiOnRoaXMubm9kZS5wYXRoPWp2bS5WTUxQYXRoRWxlbWVudC5wYXRoU3ZnVG9WbWwodCk7YnJlYWs7ZGVmYXVsdDpqdm0uVk1MU2hhcGVFbGVtZW50LnBhcmVudENsYXNzLnByb3RvdHlwZS5hcHBseUF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sanZtLlZNTFBhdGhFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IGp2bS5WTUxFbGVtZW50KFwic2tld1wiKTtqdm0uVk1MUGF0aEVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwic2hhcGVcIixlLHQpLHRoaXMubm9kZS5jb29yZG9yaWdpbj1cIjAgMFwiLG4ubm9kZS5vbj0hMCxuLm5vZGUubWF0cml4PVwiMC4wMSwwLDAsMC4wMSwwLDBcIixuLm5vZGUub2Zmc2V0PVwiMCwwXCIsdGhpcy5ub2RlLmFwcGVuZENoaWxkKG4ubm9kZSl9LGp2bS5pbmhlcml0cyhqdm0uVk1MUGF0aEVsZW1lbnQsanZtLlZNTFNoYXBlRWxlbWVudCksanZtLlZNTFBhdGhFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHI9ZnVuY3Rpb24oZSx0KXtlPT09XCJkXCI/dGhpcy5ub2RlLnBhdGg9anZtLlZNTFBhdGhFbGVtZW50LnBhdGhTdmdUb1ZtbCh0KTpqdm0uVk1MU2hhcGVFbGVtZW50LnByb3RvdHlwZS5hcHBseUF0dHIuY2FsbCh0aGlzLGUsdCl9LGp2bS5WTUxQYXRoRWxlbWVudC5wYXRoU3ZnVG9WbWw9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPTAscj0wLGkscztyZXR1cm4gZT1lLnJlcGxhY2UoLygtP1xcZCspZSgtP1xcZCspL2csXCIwXCIpLGUucmVwbGFjZSgvKFtNbUxsSGhWdkNjU3NdKVxccyooKD86LT9cXGQqKD86XFwuXFxkKyk/XFxzKiw/XFxzKikrKS9nLGZ1bmN0aW9uKGUsdCxvLHUpe289by5yZXBsYWNlKC8oXFxkKS0vZyxcIiQxLC1cIikucmVwbGFjZSgvXlxccysvZyxcIlwiKS5yZXBsYWNlKC9cXHMrJC9nLFwiXCIpLnJlcGxhY2UoL1xccysvZyxcIixcIikuc3BsaXQoXCIsXCIpLG9bMF18fG8uc2hpZnQoKTtmb3IodmFyIGE9MCxmPW8ubGVuZ3RoO2E8ZjthKyspb1thXT1NYXRoLnJvdW5kKDEwMCpvW2FdKTtzd2l0Y2godCl7Y2FzZVwibVwiOnJldHVybiBuKz1vWzBdLHIrPW9bMV0sXCJ0XCIrby5qb2luKFwiLFwiKTtjYXNlXCJNXCI6cmV0dXJuIG49b1swXSxyPW9bMV0sXCJtXCIrby5qb2luKFwiLFwiKTtjYXNlXCJsXCI6cmV0dXJuIG4rPW9bMF0scis9b1sxXSxcInJcIitvLmpvaW4oXCIsXCIpO2Nhc2VcIkxcIjpyZXR1cm4gbj1vWzBdLHI9b1sxXSxcImxcIitvLmpvaW4oXCIsXCIpO2Nhc2VcImhcIjpyZXR1cm4gbis9b1swXSxcInJcIitvWzBdK1wiLDBcIjtjYXNlXCJIXCI6cmV0dXJuIG49b1swXSxcImxcIituK1wiLFwiK3I7Y2FzZVwidlwiOnJldHVybiByKz1vWzBdLFwicjAsXCIrb1swXTtjYXNlXCJWXCI6cmV0dXJuIHI9b1swXSxcImxcIituK1wiLFwiK3I7Y2FzZVwiY1wiOnJldHVybiBpPW4rb1tvLmxlbmd0aC00XSxzPXIrb1tvLmxlbmd0aC0zXSxuKz1vW28ubGVuZ3RoLTJdLHIrPW9bby5sZW5ndGgtMV0sXCJ2XCIrby5qb2luKFwiLFwiKTtjYXNlXCJDXCI6cmV0dXJuIGk9b1tvLmxlbmd0aC00XSxzPW9bby5sZW5ndGgtM10sbj1vW28ubGVuZ3RoLTJdLHI9b1tvLmxlbmd0aC0xXSxcImNcIitvLmpvaW4oXCIsXCIpO2Nhc2VcInNcIjpyZXR1cm4gby51bnNoaWZ0KHItcyksby51bnNoaWZ0KG4taSksaT1uK29bby5sZW5ndGgtNF0scz1yK29bby5sZW5ndGgtM10sbis9b1tvLmxlbmd0aC0yXSxyKz1vW28ubGVuZ3RoLTFdLFwidlwiK28uam9pbihcIixcIik7Y2FzZVwiU1wiOnJldHVybiBvLnVuc2hpZnQocityLXMpLG8udW5zaGlmdChuK24taSksaT1vW28ubGVuZ3RoLTRdLHM9b1tvLmxlbmd0aC0zXSxuPW9bby5sZW5ndGgtMl0scj1vW28ubGVuZ3RoLTFdLFwiY1wiK28uam9pbihcIixcIil9cmV0dXJuXCJcIn0pLnJlcGxhY2UoL3ovZyxcImVcIil9LGp2bS5WTUxDaXJjbGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7anZtLlZNTENpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MuY2FsbCh0aGlzLFwib3ZhbFwiLGUsdCl9LGp2bS5pbmhlcml0cyhqdm0uVk1MQ2lyY2xlRWxlbWVudCxqdm0uVk1MU2hhcGVFbGVtZW50KSxqdm0uVk1MQ2lyY2xlRWxlbWVudC5wcm90b3R5cGUuYXBwbHlBdHRyPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcInJcIjp0aGlzLm5vZGUuc3R5bGUud2lkdGg9dCoyK1wicHhcIix0aGlzLm5vZGUuc3R5bGUuaGVpZ2h0PXQqMitcInB4XCIsdGhpcy5hcHBseUF0dHIoXCJjeFwiLHRoaXMuZ2V0KFwiY3hcIil8fDApLHRoaXMuYXBwbHlBdHRyKFwiY3lcIix0aGlzLmdldChcImN5XCIpfHwwKTticmVhaztjYXNlXCJjeFwiOmlmKCF0KXJldHVybjt0aGlzLm5vZGUuc3R5bGUubGVmdD10LSh0aGlzLmdldChcInJcIil8fDApK1wicHhcIjticmVhaztjYXNlXCJjeVwiOmlmKCF0KXJldHVybjt0aGlzLm5vZGUuc3R5bGUudG9wPXQtKHRoaXMuZ2V0KFwiclwiKXx8MCkrXCJweFwiO2JyZWFrO2RlZmF1bHQ6anZtLlZNTENpcmNsZUVsZW1lbnQucGFyZW50Q2xhc3MucHJvdG90eXBlLmFwcGx5QXR0ci5jYWxsKHRoaXMsZSx0KX19LGp2bS5WZWN0b3JDYW52YXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm1vZGU9d2luZG93LlNWR0FuZ2xlP1wic3ZnXCI6XCJ2bWxcIix0aGlzLm1vZGU9PVwic3ZnXCI/dGhpcy5pbXBsPW5ldyBqdm0uU1ZHQ2FudmFzRWxlbWVudChlLHQsbik6dGhpcy5pbXBsPW5ldyBqdm0uVk1MQ2FudmFzRWxlbWVudChlLHQsbiksdGhpcy5pbXBsfSxqdm0uU2ltcGxlU2NhbGU9ZnVuY3Rpb24oZSl7dGhpcy5zY2FsZT1lfSxqdm0uU2ltcGxlU2NhbGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxqdm0uT3JkaW5hbFNjYWxlPWZ1bmN0aW9uKGUpe3RoaXMuc2NhbGU9ZX0sanZtLk9yZGluYWxTY2FsZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2NhbGVbZV19LGp2bS5OdW1lcmljU2NhbGU9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zY2FsZT1bXSx0PXR8fFwibGluZWFyXCIsZSYmdGhpcy5zZXRTY2FsZShlKSx0JiZ0aGlzLnNldE5vcm1hbGl6ZUZ1bmN0aW9uKHQpLG4mJnRoaXMuc2V0TWluKG4pLHImJnRoaXMuc2V0TWF4KHIpfSxqdm0uTnVtZXJpY1NjYWxlLnByb3RvdHlwZT17c2V0TWluOmZ1bmN0aW9uKGUpe3RoaXMuY2xlYXJNaW5WYWx1ZT1lLHR5cGVvZiB0aGlzLm5vcm1hbGl6ZT09XCJmdW5jdGlvblwiP3RoaXMubWluVmFsdWU9dGhpcy5ub3JtYWxpemUoZSk6dGhpcy5taW5WYWx1ZT1lfSxzZXRNYXg6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhck1heFZhbHVlPWUsdHlwZW9mIHRoaXMubm9ybWFsaXplPT1cImZ1bmN0aW9uXCI/dGhpcy5tYXhWYWx1ZT10aGlzLm5vcm1hbGl6ZShlKTp0aGlzLm1heFZhbHVlPWV9LHNldFNjYWxlOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zY2FsZVt0XT1bZVt0XV19LHNldE5vcm1hbGl6ZUZ1bmN0aW9uOmZ1bmN0aW9uKGUpe2U9PT1cInBvbHlub21pYWxcIj90aGlzLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSwuMil9OmU9PT1cImxpbmVhclwiP2RlbGV0ZSB0aGlzLm5vcm1hbGl6ZTp0aGlzLm5vcm1hbGl6ZT1lLHRoaXMuc2V0TWluKHRoaXMuY2xlYXJNaW5WYWx1ZSksdGhpcy5zZXRNYXgodGhpcy5jbGVhck1heFZhbHVlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0wLHIsaT0wLHM7dHlwZW9mIHRoaXMubm9ybWFsaXplPT1cImZ1bmN0aW9uXCImJihlPXRoaXMubm9ybWFsaXplKGUpKTtmb3IoaT0wO2k8dGhpcy5zY2FsZS5sZW5ndGgtMTtpKyspcj10aGlzLnZlY3Rvckxlbmd0aCh0aGlzLnZlY3RvclN1YnRyYWN0KHRoaXMuc2NhbGVbaSsxXSx0aGlzLnNjYWxlW2ldKSksdC5wdXNoKHIpLG4rPXI7cz0odGhpcy5tYXhWYWx1ZS10aGlzLm1pblZhbHVlKS9uO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXSo9cztpPTAsZS09dGhpcy5taW5WYWx1ZTt3aGlsZShlLXRbaV0+PTApZS09dFtpXSxpKys7cmV0dXJuIGk9PXRoaXMuc2NhbGUubGVuZ3RoLTE/ZT10aGlzLnZlY3RvclRvTnVtKHRoaXMuc2NhbGVbaV0pOmU9dGhpcy52ZWN0b3JUb051bSh0aGlzLnZlY3RvckFkZCh0aGlzLnNjYWxlW2ldLHRoaXMudmVjdG9yTXVsdCh0aGlzLnZlY3RvclN1YnRyYWN0KHRoaXMuc2NhbGVbaSsxXSx0aGlzLnNjYWxlW2ldKSxlL3RbaV0pKSksZX0sdmVjdG9yVG9OdW06ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspdCs9TWF0aC5yb3VuZChlW25dKSpNYXRoLnBvdygyNTYsZS5sZW5ndGgtbi0xKTtyZXR1cm4gdH0sdmVjdG9yU3VidHJhY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1lW3JdLXRbcl07cmV0dXJuIG59LHZlY3RvckFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl0rdFtyXTtyZXR1cm4gbn0sdmVjdG9yTXVsdDpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl0qdDtyZXR1cm4gbn0sdmVjdG9yTGVuZ3RoOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl0qZVtuXTtyZXR1cm4gTWF0aC5zcXJ0KHQpfX0sanZtLkNvbG9yU2NhbGU9ZnVuY3Rpb24oZSx0LG4scil7anZtLkNvbG9yU2NhbGUucGFyZW50Q2xhc3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxqdm0uaW5oZXJpdHMoanZtLkNvbG9yU2NhbGUsanZtLk51bWVyaWNTY2FsZSksanZtLkNvbG9yU2NhbGUucHJvdG90eXBlLnNldFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zY2FsZVt0XT1qdm0uQ29sb3JTY2FsZS5yZ2JUb0FycmF5KGVbdF0pfSxqdm0uQ29sb3JTY2FsZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGp2bS5Db2xvclNjYWxlLm51bVRvUmdiKGp2bS5Db2xvclNjYWxlLnBhcmVudENsYXNzLnByb3RvdHlwZS5nZXRWYWx1ZS5jYWxsKHRoaXMsZSkpfSxqdm0uQ29sb3JTY2FsZS5hcnJheVRvUmdiPWZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiLG4scjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKW49ZVtyXS50b1N0cmluZygxNiksdCs9bi5sZW5ndGg9PTE/XCIwXCIrbjpuO3JldHVybiB0fSxqdm0uQ29sb3JTY2FsZS5udW1Ub1JnYj1mdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoMTYpO3doaWxlKGUubGVuZ3RoPDYpZT1cIjBcIitlO3JldHVyblwiI1wiK2V9LGp2bS5Db2xvclNjYWxlLnJnYlRvQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5zdWJzdHIoMSksW3BhcnNlSW50KGUuc3Vic3RyKDAsMiksMTYpLHBhcnNlSW50KGUuc3Vic3RyKDIsMiksMTYpLHBhcnNlSW50KGUuc3Vic3RyKDQsMiksMTYpXX0sanZtLkRhdGFTZXJpZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjtlPWV8fHt9LGUuYXR0cmlidXRlPWUuYXR0cmlidXRlfHxcImZpbGxcIix0aGlzLmVsZW1lbnRzPXQsdGhpcy5wYXJhbXM9ZSxlLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyhlLmF0dHJpYnV0ZXMpLGp2bS4kLmlzQXJyYXkoZS5zY2FsZSk/KG49ZS5hdHRyaWJ1dGU9PT1cImZpbGxcInx8ZS5hdHRyaWJ1dGU9PT1cInN0cm9rZVwiP2p2bS5Db2xvclNjYWxlOmp2bS5OdW1lcmljU2NhbGUsdGhpcy5zY2FsZT1uZXcgbihlLnNjYWxlLGUubm9ybWFsaXplRnVuY3Rpb24sZS5taW4sZS5tYXgpKTplLnNjYWxlP3RoaXMuc2NhbGU9bmV3IGp2bS5PcmRpbmFsU2NhbGUoZS5zY2FsZSk6dGhpcy5zY2FsZT1uZXcganZtLlNpbXBsZVNjYWxlKGUuc2NhbGUpLHRoaXMudmFsdWVzPWUudmFsdWVzfHx7fSx0aGlzLnNldFZhbHVlcyh0aGlzLnZhbHVlcyl9LGp2bS5EYXRhU2VyaWVzLnByb3RvdHlwZT17c2V0QXR0cmlidXRlczpmdW5jdGlvbihlLHQpe3ZhciBuPWUscjtpZih0eXBlb2YgZT09XCJzdHJpbmdcIil0aGlzLmVsZW1lbnRzW2VdJiZ0aGlzLmVsZW1lbnRzW2VdLnNldFN0eWxlKHRoaXMucGFyYW1zLmF0dHJpYnV0ZSx0KTtlbHNlIGZvcihyIGluIG4pdGhpcy5lbGVtZW50c1tyXSYmdGhpcy5lbGVtZW50c1tyXS5lbGVtZW50LnNldFN0eWxlKHRoaXMucGFyYW1zLmF0dHJpYnV0ZSxuW3JdKX0sc2V0VmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlci5NSU5fVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLHIsaSxzPXt9O2lmKHRoaXMuc2NhbGUgaW5zdGFuY2VvZiBqdm0uT3JkaW5hbFNjYWxlfHx0aGlzLnNjYWxlIGluc3RhbmNlb2YganZtLlNpbXBsZVNjYWxlKWZvcihpIGluIGUpZVtpXT9zW2ldPXRoaXMuc2NhbGUuZ2V0VmFsdWUoZVtpXSk6c1tpXT10aGlzLmVsZW1lbnRzW2ldLmVsZW1lbnQuc3R5bGUuaW5pdGlhbFt0aGlzLnBhcmFtcy5hdHRyaWJ1dGVdO2Vsc2V7aWYoIXRoaXMucGFyYW1zLm1pbnx8IXRoaXMucGFyYW1zLm1heCl7Zm9yKGkgaW4gZSlyPXBhcnNlRmxvYXQoZVtpXSkscj50JiYodD1lW2ldKSxyPG4mJihuPXIpO3RoaXMucGFyYW1zLm1pbnx8dGhpcy5zY2FsZS5zZXRNaW4obiksdGhpcy5wYXJhbXMubWF4fHx0aGlzLnNjYWxlLnNldE1heCh0KSx0aGlzLnBhcmFtcy5taW49bix0aGlzLnBhcmFtcy5tYXg9dH1mb3IoaSBpbiBlKXI9cGFyc2VGbG9hdChlW2ldKSxpc05hTihyKT9zW2ldPXRoaXMuZWxlbWVudHNbaV0uZWxlbWVudC5zdHlsZS5pbml0aWFsW3RoaXMucGFyYW1zLmF0dHJpYnV0ZV06c1tpXT10aGlzLnNjYWxlLmdldFZhbHVlKHIpfXRoaXMuc2V0QXR0cmlidXRlcyhzKSxqdm0uJC5leHRlbmQodGhpcy52YWx1ZXMsZSl9LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGUsdD17fTtmb3IoZSBpbiB0aGlzLnZhbHVlcyl0aGlzLmVsZW1lbnRzW2VdJiYodFtlXT10aGlzLmVsZW1lbnRzW2VdLmVsZW1lbnQuc3R5bGUuaW5pdGlhbFt0aGlzLnBhcmFtcy5hdHRyaWJ1dGVdKTt0aGlzLnNldEF0dHJpYnV0ZXModCksdGhpcy52YWx1ZXM9e319LHNldFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuc2NhbGUuc2V0U2NhbGUoZSksdGhpcy52YWx1ZXMmJnRoaXMuc2V0VmFsdWVzKHRoaXMudmFsdWVzKX0sc2V0Tm9ybWFsaXplRnVuY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5zY2FsZS5zZXROb3JtYWxpemVGdW5jdGlvbihlKSx0aGlzLnZhbHVlcyYmdGhpcy5zZXRWYWx1ZXModGhpcy52YWx1ZXMpfX0sanZtLlByb2o9e2RlZ1JhZDoxODAvTWF0aC5QSSxyYWREZWc6TWF0aC5QSS8xODAscmFkaXVzOjYzODEzNzIsc2duOmZ1bmN0aW9uKGUpe3JldHVybiBlPjA/MTplPDA/LTE6ZX0sbWlsbDpmdW5jdGlvbihlLHQsbil7cmV0dXJue3g6dGhpcy5yYWRpdXMqKHQtbikqdGhpcy5yYWREZWcseTotdGhpcy5yYWRpdXMqTWF0aC5sb2coTWF0aC50YW4oKDQ1Ky40KmUpKnRoaXMucmFkRGVnKSkvLjh9fSxtaWxsX2ludjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2xhdDooMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCp0L3RoaXMucmFkaXVzKSktNSpNYXRoLlBJLzgpKnRoaXMuZGVnUmFkLGxuZzoobip0aGlzLnJhZERlZytlL3RoaXMucmFkaXVzKSp0aGlzLmRlZ1JhZH19LG1lcmM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt4OnRoaXMucmFkaXVzKih0LW4pKnRoaXMucmFkRGVnLHk6LXRoaXMucmFkaXVzKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtlKk1hdGguUEkvMzYwKSl9fSxtZXJjX2ludjpmdW5jdGlvbihlLHQsbil7cmV0dXJue2xhdDooMipNYXRoLmF0YW4oTWF0aC5leHAodC90aGlzLnJhZGl1cykpLU1hdGguUEkvMikqdGhpcy5kZWdSYWQsbG5nOihuKnRoaXMucmFkRGVnK2UvdGhpcy5yYWRpdXMpKnRoaXMuZGVnUmFkfX0sYWVhOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wLGk9bip0aGlzLnJhZERlZyxzPTI5LjUqdGhpcy5yYWREZWcsbz00NS41KnRoaXMucmFkRGVnLHU9ZSp0aGlzLnJhZERlZyxhPXQqdGhpcy5yYWREZWcsZj0oTWF0aC5zaW4ocykrTWF0aC5zaW4obykpLzIsbD1NYXRoLmNvcyhzKSpNYXRoLmNvcyhzKSsyKmYqTWF0aC5zaW4ocyksYz1mKihhLWkpLGg9TWF0aC5zcXJ0KGwtMipmKk1hdGguc2luKHUpKS9mLHA9TWF0aC5zcXJ0KGwtMipmKk1hdGguc2luKHIpKS9mO3JldHVybnt4OmgqTWF0aC5zaW4oYykqdGhpcy5yYWRpdXMseTotKHAtaCpNYXRoLmNvcyhjKSkqdGhpcy5yYWRpdXN9fSxhZWFfaW52OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lL3RoaXMucmFkaXVzLGk9dC90aGlzLnJhZGl1cyxzPTAsbz1uKnRoaXMucmFkRGVnLHU9MjkuNSp0aGlzLnJhZERlZyxhPTQ1LjUqdGhpcy5yYWREZWcsZj0oTWF0aC5zaW4odSkrTWF0aC5zaW4oYSkpLzIsbD1NYXRoLmNvcyh1KSpNYXRoLmNvcyh1KSsyKmYqTWF0aC5zaW4odSksYz1NYXRoLnNxcnQobC0yKmYqTWF0aC5zaW4ocykpL2YsaD1NYXRoLnNxcnQocipyKyhjLWkpKihjLWkpKSxwPU1hdGguYXRhbihyLyhjLWkpKTtyZXR1cm57bGF0Ok1hdGguYXNpbigobC1oKmgqZipmKS8oMipmKSkqdGhpcy5kZWdSYWQsbG5nOihvK3AvZikqdGhpcy5kZWdSYWR9fSxsY2M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTAsaT1uKnRoaXMucmFkRGVnLHM9dCp0aGlzLnJhZERlZyxvPTMzKnRoaXMucmFkRGVnLHU9NDUqdGhpcy5yYWREZWcsYT1lKnRoaXMucmFkRGVnLGY9TWF0aC5sb2coTWF0aC5jb3MobykqKDEvTWF0aC5jb3ModSkpKS9NYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrdS8yKSooMS9NYXRoLnRhbihNYXRoLlBJLzQrby8yKSkpLGw9TWF0aC5jb3MobykqTWF0aC5wb3coTWF0aC50YW4oTWF0aC5QSS80K28vMiksZikvZixjPWwqTWF0aC5wb3coMS9NYXRoLnRhbihNYXRoLlBJLzQrYS8yKSxmKSxoPWwqTWF0aC5wb3coMS9NYXRoLnRhbihNYXRoLlBJLzQrci8yKSxmKTtyZXR1cm57eDpjKk1hdGguc2luKGYqKHMtaSkpKnRoaXMucmFkaXVzLHk6LShoLWMqTWF0aC5jb3MoZioocy1pKSkpKnRoaXMucmFkaXVzfX0sbGNjX2ludjpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS90aGlzLnJhZGl1cyxpPXQvdGhpcy5yYWRpdXMscz0wLG89bip0aGlzLnJhZERlZyx1PTMzKnRoaXMucmFkRGVnLGE9NDUqdGhpcy5yYWREZWcsZj1NYXRoLmxvZyhNYXRoLmNvcyh1KSooMS9NYXRoLmNvcyhhKSkpL01hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKigxL01hdGgudGFuKE1hdGguUEkvNCt1LzIpKSksbD1NYXRoLmNvcyh1KSpNYXRoLnBvdyhNYXRoLnRhbihNYXRoLlBJLzQrdS8yKSxmKS9mLGM9bCpNYXRoLnBvdygxL01hdGgudGFuKE1hdGguUEkvNCtzLzIpLGYpLGg9dGhpcy5zZ24oZikqTWF0aC5zcXJ0KHIqcisoYy1pKSooYy1pKSkscD1NYXRoLmF0YW4oci8oYy1pKSk7cmV0dXJue2xhdDooMipNYXRoLmF0YW4oTWF0aC5wb3cobC9oLDEvZikpLU1hdGguUEkvMikqdGhpcy5kZWdSYWQsbG5nOihvK3AvZikqdGhpcy5kZWdSYWR9fX0sanZtLldvcmxkTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbjt0aGlzLnBhcmFtcz1qdm0uJC5leHRlbmQoITAse30sanZtLldvcmxkTWFwLmRlZmF1bHRQYXJhbXMsZSk7aWYoIWp2bS5Xb3JsZE1hcC5tYXBzW3RoaXMucGFyYW1zLm1hcF0pdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdCB0byB1c2UgbWFwIHdoaWNoIHdhcyBub3QgbG9hZGVkOiBcIit0aGlzLnBhcmFtcy5tYXApO3RoaXMubWFwRGF0YT1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLHRoaXMubWFya2Vycz17fSx0aGlzLnJlZ2lvbnM9e30sdGhpcy5yZWdpb25zQ29sb3JzPXt9LHRoaXMucmVnaW9uc0RhdGE9e30sdGhpcy5jb250YWluZXI9anZtLiQoXCI8ZGl2PlwiKS5jc3Moe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIn0pLmFkZENsYXNzKFwianZlY3Rvcm1hcC1jb250YWluZXJcIiksdGhpcy5wYXJhbXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXIuZGF0YShcIm1hcE9iamVjdFwiLHRoaXMpLHRoaXMuY29udGFpbmVyLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCJ9KSx0aGlzLmRlZmF1bHRXaWR0aD10aGlzLm1hcERhdGEud2lkdGgsdGhpcy5kZWZhdWx0SGVpZ2h0PXRoaXMubWFwRGF0YS5oZWlnaHQsdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IodGhpcy5wYXJhbXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLm9uUmVzaXplPWZ1bmN0aW9uKCl7dC5zZXRTaXplKCl9LGp2bS4kKHdpbmRvdykucmVzaXplKHRoaXMub25SZXNpemUpO2ZvcihuIGluIGp2bS5Xb3JsZE1hcC5hcGlFdmVudHMpdGhpcy5wYXJhbXNbbl0mJnRoaXMuY29udGFpbmVyLmJpbmQoanZtLldvcmxkTWFwLmFwaUV2ZW50c1tuXStcIi5qdmVjdG9ybWFwXCIsdGhpcy5wYXJhbXNbbl0pO3RoaXMuY2FudmFzPW5ldyBqdm0uVmVjdG9yQ2FudmFzKHRoaXMuY29udGFpbmVyWzBdLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLFwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3d8fHdpbmRvdy5Eb2N1bWVudFRvdWNoJiZkb2N1bWVudCBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2g/dGhpcy5wYXJhbXMuYmluZFRvdWNoRXZlbnRzJiZ0aGlzLmJpbmRDb250YWluZXJUb3VjaEV2ZW50cygpOnRoaXMuYmluZENvbnRhaW5lckV2ZW50cygpLHRoaXMuYmluZEVsZW1lbnRFdmVudHMoKSx0aGlzLmNyZWF0ZUxhYmVsKCksdGhpcy5wYXJhbXMuem9vbUJ1dHRvbnMmJnRoaXMuYmluZFpvb21CdXR0b25zKCksdGhpcy5jcmVhdGVSZWdpb25zKCksdGhpcy5jcmVhdGVNYXJrZXJzKHRoaXMucGFyYW1zLm1hcmtlcnN8fHt9KSx0aGlzLnNldFNpemUoKSx0aGlzLnBhcmFtcy5mb2N1c09uJiYodHlwZW9mIHRoaXMucGFyYW1zLmZvY3VzT249PVwib2JqZWN0XCI/dGhpcy5zZXRGb2N1cy5jYWxsKHRoaXMsdGhpcy5wYXJhbXMuZm9jdXNPbi5zY2FsZSx0aGlzLnBhcmFtcy5mb2N1c09uLngsdGhpcy5wYXJhbXMuZm9jdXNPbi55KTp0aGlzLnNldEZvY3VzLmNhbGwodGhpcyx0aGlzLnBhcmFtcy5mb2N1c09uKSksdGhpcy5wYXJhbXMuc2VsZWN0ZWRSZWdpb25zJiZ0aGlzLnNldFNlbGVjdGVkUmVnaW9ucyh0aGlzLnBhcmFtcy5zZWxlY3RlZFJlZ2lvbnMpLHRoaXMucGFyYW1zLnNlbGVjdGVkTWFya2VycyYmdGhpcy5zZXRTZWxlY3RlZE1hcmtlcnModGhpcy5wYXJhbXMuc2VsZWN0ZWRNYXJrZXJzKSx0aGlzLnBhcmFtcy5zZXJpZXMmJnRoaXMuY3JlYXRlU2VyaWVzKCl9LGp2bS5Xb3JsZE1hcC5wcm90b3R5cGU9e3RyYW5zWDowLHRyYW5zWTowLHNjYWxlOjEsYmFzZVRyYW5zWDowLGJhc2VUcmFuc1k6MCxiYXNlU2NhbGU6MSx3aWR0aDowLGhlaWdodDowLHNldEJhY2tncm91bmRDb2xvcjpmdW5jdGlvbihlKXt0aGlzLmNvbnRhaW5lci5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsZSl9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZVNjYWxlO3RoaXMud2lkdGgvdGhpcy5oZWlnaHQ+dGhpcy5kZWZhdWx0V2lkdGgvdGhpcy5kZWZhdWx0SGVpZ2h0Pyh0aGlzLmJhc2VTY2FsZT10aGlzLmhlaWdodC90aGlzLmRlZmF1bHRIZWlnaHQsdGhpcy5iYXNlVHJhbnNYPU1hdGguYWJzKHRoaXMud2lkdGgtdGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5iYXNlU2NhbGUpLygyKnRoaXMuYmFzZVNjYWxlKSk6KHRoaXMuYmFzZVNjYWxlPXRoaXMud2lkdGgvdGhpcy5kZWZhdWx0V2lkdGgsdGhpcy5iYXNlVHJhbnNZPU1hdGguYWJzKHRoaXMuaGVpZ2h0LXRoaXMuZGVmYXVsdEhlaWdodCp0aGlzLmJhc2VTY2FsZSkvKDIqdGhpcy5iYXNlU2NhbGUpKSx0aGlzLnNjYWxlKj10aGlzLmJhc2VTY2FsZS9lLHRoaXMudHJhbnNYKj10aGlzLmJhc2VTY2FsZS9lLHRoaXMudHJhbnNZKj10aGlzLmJhc2VTY2FsZS9lfSxzZXRTaXplOmZ1bmN0aW9uKCl7dGhpcy53aWR0aD10aGlzLmNvbnRhaW5lci53aWR0aCgpLHRoaXMuaGVpZ2h0PXRoaXMuY29udGFpbmVyLmhlaWdodCgpLHRoaXMucmVzaXplKCksdGhpcy5jYW52YXMuc2V0U2l6ZSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LHJlc2V0OmZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IoZSBpbiB0aGlzLnNlcmllcylmb3IodD0wO3Q8dGhpcy5zZXJpZXNbZV0ubGVuZ3RoO3QrKyl0aGlzLnNlcmllc1tlXVt0XS5jbGVhcigpO3RoaXMuc2NhbGU9dGhpcy5iYXNlU2NhbGUsdGhpcy50cmFuc1g9dGhpcy5iYXNlVHJhbnNYLHRoaXMudHJhbnNZPXRoaXMuYmFzZVRyYW5zWSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGFwcGx5VHJhbnNmb3JtOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7dGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5zY2FsZTw9dGhpcy53aWR0aD8oZT0odGhpcy53aWR0aC10aGlzLmRlZmF1bHRXaWR0aCp0aGlzLnNjYWxlKS8oMip0aGlzLnNjYWxlKSxuPSh0aGlzLndpZHRoLXRoaXMuZGVmYXVsdFdpZHRoKnRoaXMuc2NhbGUpLygyKnRoaXMuc2NhbGUpKTooZT0wLG49KHRoaXMud2lkdGgtdGhpcy5kZWZhdWx0V2lkdGgqdGhpcy5zY2FsZSkvdGhpcy5zY2FsZSksdGhpcy5kZWZhdWx0SGVpZ2h0KnRoaXMuc2NhbGU8PXRoaXMuaGVpZ2h0Pyh0PSh0aGlzLmhlaWdodC10aGlzLmRlZmF1bHRIZWlnaHQqdGhpcy5zY2FsZSkvKDIqdGhpcy5zY2FsZSkscj0odGhpcy5oZWlnaHQtdGhpcy5kZWZhdWx0SGVpZ2h0KnRoaXMuc2NhbGUpLygyKnRoaXMuc2NhbGUpKToodD0wLHI9KHRoaXMuaGVpZ2h0LXRoaXMuZGVmYXVsdEhlaWdodCp0aGlzLnNjYWxlKS90aGlzLnNjYWxlKSx0aGlzLnRyYW5zWT50P3RoaXMudHJhbnNZPXQ6dGhpcy50cmFuc1k8ciYmKHRoaXMudHJhbnNZPXIpLHRoaXMudHJhbnNYPmU/dGhpcy50cmFuc1g9ZTp0aGlzLnRyYW5zWDxuJiYodGhpcy50cmFuc1g9biksdGhpcy5jYW52YXMuYXBwbHlUcmFuc2Zvcm1QYXJhbXModGhpcy5zY2FsZSx0aGlzLnRyYW5zWCx0aGlzLnRyYW5zWSksdGhpcy5tYXJrZXJzJiZ0aGlzLnJlcG9zaXRpb25NYXJrZXJzKCksdGhpcy5jb250YWluZXIudHJpZ2dlcihcInZpZXdwb3J0Q2hhbmdlXCIsW3RoaXMuc2NhbGUvdGhpcy5iYXNlU2NhbGUsdGhpcy50cmFuc1gsdGhpcy50cmFuc1ldKX0sYmluZENvbnRhaW5lckV2ZW50czpmdW5jdGlvbigpe3ZhciBlPSExLHQsbixyPXRoaXM7dGhpcy5jb250YWluZXIubW91c2Vtb3ZlKGZ1bmN0aW9uKGkpe3JldHVybiBlJiYoci50cmFuc1gtPSh0LWkucGFnZVgpL3Iuc2NhbGUsci50cmFuc1ktPShuLWkucGFnZVkpL3Iuc2NhbGUsci5hcHBseVRyYW5zZm9ybSgpLHQ9aS5wYWdlWCxuPWkucGFnZVkpLCExfSkubW91c2Vkb3duKGZ1bmN0aW9uKHIpe3JldHVybiBlPSEwLHQ9ci5wYWdlWCxuPXIucGFnZVksITF9KSxqdm0uJChcImJvZHlcIikubW91c2V1cChmdW5jdGlvbigpe2U9ITF9KSx0aGlzLnBhcmFtcy56b29tT25TY3JvbGwmJnRoaXMuY29udGFpbmVyLm1vdXNld2hlZWwoZnVuY3Rpb24oZSx0LG4saSl7dmFyIHM9anZtLiQoci5jb250YWluZXIpLm9mZnNldCgpLG89ZS5wYWdlWC1zLmxlZnQsdT1lLnBhZ2VZLXMudG9wLGE9TWF0aC5wb3coMS4zLGkpO3IubGFiZWwuaGlkZSgpLHIuc2V0U2NhbGUoci5zY2FsZSphLG8sdSksZS5wcmV2ZW50RGVmYXVsdCgpfSl9LGJpbmRDb250YWluZXJUb3VjaEV2ZW50czpmdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLHIsaSxzLG8sdSxhPWZ1bmN0aW9uKGEpe3ZhciBmPWEub3JpZ2luYWxFdmVudC50b3VjaGVzLGwsYyxoLHA7YS50eXBlPT1cInRvdWNoc3RhcnRcIiYmKHU9MCksZi5sZW5ndGg9PTE/KHU9PTEmJihoPW4udHJhbnNYLHA9bi50cmFuc1ksbi50cmFuc1gtPShyLWZbMF0ucGFnZVgpL24uc2NhbGUsbi50cmFuc1ktPShpLWZbMF0ucGFnZVkpL24uc2NhbGUsbi5hcHBseVRyYW5zZm9ybSgpLG4ubGFiZWwuaGlkZSgpLChoIT1uLnRyYW5zWHx8cCE9bi50cmFuc1kpJiZhLnByZXZlbnREZWZhdWx0KCkpLHI9ZlswXS5wYWdlWCxpPWZbMF0ucGFnZVkpOmYubGVuZ3RoPT0yJiYodT09Mj8oYz1NYXRoLnNxcnQoTWF0aC5wb3coZlswXS5wYWdlWC1mWzFdLnBhZ2VYLDIpK01hdGgucG93KGZbMF0ucGFnZVktZlsxXS5wYWdlWSwyKSkvdCxuLnNldFNjYWxlKGUqYyxzLG8pLG4ubGFiZWwuaGlkZSgpLGEucHJldmVudERlZmF1bHQoKSk6KGw9anZtLiQobi5jb250YWluZXIpLm9mZnNldCgpLGZbMF0ucGFnZVg+ZlsxXS5wYWdlWD9zPWZbMV0ucGFnZVgrKGZbMF0ucGFnZVgtZlsxXS5wYWdlWCkvMjpzPWZbMF0ucGFnZVgrKGZbMV0ucGFnZVgtZlswXS5wYWdlWCkvMixmWzBdLnBhZ2VZPmZbMV0ucGFnZVk/bz1mWzFdLnBhZ2VZKyhmWzBdLnBhZ2VZLWZbMV0ucGFnZVkpLzI6bz1mWzBdLnBhZ2VZKyhmWzFdLnBhZ2VZLWZbMF0ucGFnZVkpLzIscy09bC5sZWZ0LG8tPWwudG9wLGU9bi5zY2FsZSx0PU1hdGguc3FydChNYXRoLnBvdyhmWzBdLnBhZ2VYLWZbMV0ucGFnZVgsMikrTWF0aC5wb3coZlswXS5wYWdlWS1mWzFdLnBhZ2VZLDIpKSkpLHU9Zi5sZW5ndGh9O2p2bS4kKHRoaXMuY29udGFpbmVyKS5iaW5kKFwidG91Y2hzdGFydFwiLGEpLGp2bS4kKHRoaXMuY29udGFpbmVyKS5iaW5kKFwidG91Y2htb3ZlXCIsYSl9LGJpbmRFbGVtZW50RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0O3RoaXMuY29udGFpbmVyLm1vdXNlbW92ZShmdW5jdGlvbigpe3Q9ITB9KSx0aGlzLmNvbnRhaW5lci5kZWxlZ2F0ZShcIltjbGFzc349J2p2ZWN0b3JtYXAtZWxlbWVudCddXCIsXCJtb3VzZW92ZXIgbW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw/anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw6anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLGk9ci5pbmRleE9mKFwianZlY3Rvcm1hcC1yZWdpb25cIik9PT0tMT9cIm1hcmtlclwiOlwicmVnaW9uXCIscz1pPT1cInJlZ2lvblwiP2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIik6anZtLiQodGhpcykuYXR0cihcImRhdGEtaW5kZXhcIiksbz1pPT1cInJlZ2lvblwiP2UucmVnaW9uc1tzXS5lbGVtZW50OmUubWFya2Vyc1tzXS5lbGVtZW50LHU9aT09XCJyZWdpb25cIj9lLm1hcERhdGEucGF0aHNbc10ubmFtZTplLm1hcmtlcnNbc10uY29uZmlnLm5hbWV8fFwiXCIsYT1qdm0uJC5FdmVudChpK1wiTGFiZWxTaG93Lmp2ZWN0b3JtYXBcIiksZj1qdm0uJC5FdmVudChpK1wiT3Zlci5qdmVjdG9ybWFwXCIpO3QudHlwZT09XCJtb3VzZW92ZXJcIj8oZS5jb250YWluZXIudHJpZ2dlcihmLFtzXSksZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8by5zZXRIb3ZlcmVkKCEwKSxlLmxhYmVsLnRleHQodSksZS5jb250YWluZXIudHJpZ2dlcihhLFtlLmxhYmVsLHNdKSxhLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZS5sYWJlbC5zaG93KCksZS5sYWJlbFdpZHRoPWUubGFiZWwud2lkdGgoKSxlLmxhYmVsSGVpZ2h0PWUubGFiZWwuaGVpZ2h0KCkpKTooby5zZXRIb3ZlcmVkKCExKSxlLmxhYmVsLmhpZGUoKSxlLmNvbnRhaW5lci50cmlnZ2VyKGkrXCJPdXQuanZlY3Rvcm1hcFwiLFtzXSkpfSksdGhpcy5jb250YWluZXIuZGVsZWdhdGUoXCJbY2xhc3N+PSdqdmVjdG9ybWFwLWVsZW1lbnQnXVwiLFwibW91c2Vkb3duXCIsZnVuY3Rpb24oZSl7dD0hMX0pLHRoaXMuY29udGFpbmVyLmRlbGVnYXRlKFwiW2NsYXNzfj0nanZlY3Rvcm1hcC1lbGVtZW50J11cIixcIm1vdXNldXBcIixmdW5jdGlvbihuKXt2YXIgcj10aGlzLGk9anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw/anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLmJhc2VWYWw6anZtLiQodGhpcykuYXR0cihcImNsYXNzXCIpLHM9aS5pbmRleE9mKFwianZlY3Rvcm1hcC1yZWdpb25cIik9PT0tMT9cIm1hcmtlclwiOlwicmVnaW9uXCIsbz1zPT1cInJlZ2lvblwiP2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIik6anZtLiQodGhpcykuYXR0cihcImRhdGEtaW5kZXhcIiksdT1qdm0uJC5FdmVudChzK1wiQ2xpY2suanZlY3Rvcm1hcFwiKSxhPXM9PVwicmVnaW9uXCI/ZS5yZWdpb25zW29dLmVsZW1lbnQ6ZS5tYXJrZXJzW29dLmVsZW1lbnQ7aWYoIXQpe2UuY29udGFpbmVyLnRyaWdnZXIodSxbb10pO2lmKHM9PT1cInJlZ2lvblwiJiZlLnBhcmFtcy5yZWdpb25zU2VsZWN0YWJsZXx8cz09PVwibWFya2VyXCImJmUucGFyYW1zLm1hcmtlcnNTZWxlY3RhYmxlKXUuaXNEZWZhdWx0UHJldmVudGVkKCl8fChlLnBhcmFtc1tzK1wic1NlbGVjdGFibGVPbmVcIl0mJmUuY2xlYXJTZWxlY3RlZChzK1wic1wiKSxhLnNldFNlbGVjdGVkKCFhLmlzU2VsZWN0ZWQpKX19KX0sYmluZFpvb21CdXR0b25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztqdm0uJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImp2ZWN0b3JtYXAtem9vbWluXCIpLnRleHQoXCIrXCIpLmFwcGVuZFRvKHRoaXMuY29udGFpbmVyKSxqdm0uJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImp2ZWN0b3JtYXAtem9vbW91dFwiKS5odG1sKFwiJiN4MjIxMjtcIikuYXBwZW5kVG8odGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyLmZpbmQoXCIuanZlY3Rvcm1hcC16b29taW5cIikuY2xpY2soZnVuY3Rpb24oKXtlLnNldFNjYWxlKGUuc2NhbGUqZS5wYXJhbXMuem9vbVN0ZXAsZS53aWR0aC8yLGUuaGVpZ2h0LzIpfSksdGhpcy5jb250YWluZXIuZmluZChcIi5qdmVjdG9ybWFwLXpvb21vdXRcIikuY2xpY2soZnVuY3Rpb24oKXtlLnNldFNjYWxlKGUuc2NhbGUvZS5wYXJhbXMuem9vbVN0ZXAsZS53aWR0aC8yLGUuaGVpZ2h0LzIpfSl9LGNyZWF0ZUxhYmVsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhYmVsPWp2bS4kKFwiPGRpdi8+XCIpLmFkZENsYXNzKFwianZlY3Rvcm1hcC1sYWJlbFwiKS5hcHBlbmRUbyhqdm0uJChcImJvZHlcIikpLHRoaXMuY29udGFpbmVyLm1vdXNlbW92ZShmdW5jdGlvbih0KXt2YXIgbj10LnBhZ2VYLTE1LWUubGFiZWxXaWR0aCxyPXQucGFnZVktMTUtZS5sYWJlbEhlaWdodDtuPDUmJihuPXQucGFnZVgrMTUpLHI8NSYmKHI9dC5wYWdlWSsxNSksZS5sYWJlbC5pcyhcIjp2aXNpYmxlXCIpJiZlLmxhYmVsLmNzcyh7bGVmdDpuLHRvcDpyfSl9KX0sc2V0U2NhbGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGkscz1qdm0uJC5FdmVudChcInpvb20uanZlY3Rvcm1hcFwiKTtlPnRoaXMucGFyYW1zLnpvb21NYXgqdGhpcy5iYXNlU2NhbGU/ZT10aGlzLnBhcmFtcy56b29tTWF4KnRoaXMuYmFzZVNjYWxlOmU8dGhpcy5wYXJhbXMuem9vbU1pbip0aGlzLmJhc2VTY2FsZSYmKGU9dGhpcy5wYXJhbXMuem9vbU1pbip0aGlzLmJhc2VTY2FsZSksdHlwZW9mIHQhPVwidW5kZWZpbmVkXCImJnR5cGVvZiBuIT1cInVuZGVmaW5lZFwiJiYoaT1lL3RoaXMuc2NhbGUscj8odGhpcy50cmFuc1g9dCt0aGlzLmRlZmF1bHRXaWR0aCoodGhpcy53aWR0aC8odGhpcy5kZWZhdWx0V2lkdGgqZSkpLzIsdGhpcy50cmFuc1k9bit0aGlzLmRlZmF1bHRIZWlnaHQqKHRoaXMuaGVpZ2h0Lyh0aGlzLmRlZmF1bHRIZWlnaHQqZSkpLzIpOih0aGlzLnRyYW5zWC09KGktMSkvZSp0LHRoaXMudHJhbnNZLT0oaS0xKS9lKm4pKSx0aGlzLnNjYWxlPWUsdGhpcy5hcHBseVRyYW5zZm9ybSgpLHRoaXMuY29udGFpbmVyLnRyaWdnZXIocyxbZS90aGlzLmJhc2VTY2FsZV0pfSxzZXRGb2N1czpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzLG8sdTtpZihqdm0uJC5pc0FycmF5KGUpfHx0aGlzLnJlZ2lvbnNbZV0pe2p2bS4kLmlzQXJyYXkoZSk/bz1lOm89W2VdO2Zvcih1PTA7dTxvLmxlbmd0aDt1KyspdGhpcy5yZWdpb25zW29bdV1dJiYoaT10aGlzLnJlZ2lvbnNbb1t1XV0uZWxlbWVudC5nZXRCQm94KCksaSYmKHR5cGVvZiByPT1cInVuZGVmaW5lZFwiP3I9aToocz17eDpNYXRoLm1pbihyLngsaS54KSx5Ok1hdGgubWluKHIueSxpLnkpLHdpZHRoOk1hdGgubWF4KHIueCtyLndpZHRoLGkueCtpLndpZHRoKS1NYXRoLm1pbihyLngsaS54KSxoZWlnaHQ6TWF0aC5tYXgoci55K3IuaGVpZ2h0LGkueStpLmhlaWdodCktTWF0aC5taW4oci55LGkueSl9LHI9cykpKTt0aGlzLnNldFNjYWxlKE1hdGgubWluKHRoaXMud2lkdGgvci53aWR0aCx0aGlzLmhlaWdodC9yLmhlaWdodCksLShyLngrci53aWR0aC8yKSwtKHIueStyLmhlaWdodC8yKSwhMCl9ZWxzZSBlKj10aGlzLmJhc2VTY2FsZSx0aGlzLnNldFNjYWxlKGUsLXQqdGhpcy5kZWZhdWx0V2lkdGgsLW4qdGhpcy5kZWZhdWx0SGVpZ2h0LCEwKX0sZ2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IodCBpbiB0aGlzW2VdKXRoaXNbZV1bdF0uZWxlbWVudC5pc1NlbGVjdGVkJiZuLnB1c2godCk7cmV0dXJuIG59LGdldFNlbGVjdGVkUmVnaW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNlbGVjdGVkKFwicmVnaW9uc1wiKX0sZ2V0U2VsZWN0ZWRNYXJrZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWQoXCJtYXJrZXJzXCIpfSxzZXRTZWxlY3RlZDpmdW5jdGlvbihlLHQpe3ZhciBuO3R5cGVvZiB0IT1cIm9iamVjdFwiJiYodD1bdF0pO2lmKGp2bS4kLmlzQXJyYXkodCkpZm9yKG49MDtuPHQubGVuZ3RoO24rKyl0aGlzW2VdW3Rbbl1dLmVsZW1lbnQuc2V0U2VsZWN0ZWQoITApO2Vsc2UgZm9yKG4gaW4gdCl0aGlzW2VdW25dLmVsZW1lbnQuc2V0U2VsZWN0ZWQoISF0W25dKX0sc2V0U2VsZWN0ZWRSZWdpb25zOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U2VsZWN0ZWQoXCJyZWdpb25zXCIsZSl9LHNldFNlbGVjdGVkTWFya2VyczpmdW5jdGlvbihlKXt0aGlzLnNldFNlbGVjdGVkKFwibWFya2Vyc1wiLGUpfSxjbGVhclNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49dGhpcy5nZXRTZWxlY3RlZChlKSxyO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspdFtuW3JdXT0hMTt0aGlzLnNldFNlbGVjdGVkKGUsdCl9LGNsZWFyU2VsZWN0ZWRSZWdpb25zOmZ1bmN0aW9uKCl7dGhpcy5jbGVhclNlbGVjdGVkKFwicmVnaW9uc1wiKX0sY2xlYXJTZWxlY3RlZE1hcmtlcnM6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyU2VsZWN0ZWQoXCJtYXJrZXJzXCIpfSxnZXRNYXBPYmplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZ2V0UmVnaW9uTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXBEYXRhLnBhdGhzW2VdLm5hbWV9LGNyZWF0ZVJlZ2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG49dGhpcztmb3IoZSBpbiB0aGlzLm1hcERhdGEucGF0aHMpdD10aGlzLmNhbnZhcy5hZGRQYXRoKHtkOnRoaXMubWFwRGF0YS5wYXRoc1tlXS5wYXRoLFwiZGF0YS1jb2RlXCI6ZX0sanZtLiQuZXh0ZW5kKCEwLHt9LHRoaXMucGFyYW1zLnJlZ2lvblN0eWxlKSksanZtLiQodC5ub2RlKS5iaW5kKFwic2VsZWN0ZWRcIixmdW5jdGlvbihlLHQpe24uY29udGFpbmVyLnRyaWdnZXIoXCJyZWdpb25TZWxlY3RlZC5qdmVjdG9ybWFwXCIsW2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWNvZGVcIiksdCxuLmdldFNlbGVjdGVkUmVnaW9ucygpXSl9KSx0LmFkZENsYXNzKFwianZlY3Rvcm1hcC1yZWdpb24ganZlY3Rvcm1hcC1lbGVtZW50XCIpLHRoaXMucmVnaW9uc1tlXT17ZWxlbWVudDp0LGNvbmZpZzp0aGlzLm1hcERhdGEucGF0aHNbZV19fSxjcmVhdGVNYXJrZXJzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLHMsbz10aGlzO3RoaXMubWFya2Vyc0dyb3VwPXRoaXMubWFya2Vyc0dyb3VwfHx0aGlzLmNhbnZhcy5hZGRHcm91cCgpO2lmKGp2bS4kLmlzQXJyYXkoZSkpe3M9ZS5zbGljZSgpLGU9e307Zm9yKHQ9MDt0PHMubGVuZ3RoO3QrKyllW3RdPXNbdF19Zm9yKHQgaW4gZSlpPWVbdF1pbnN0YW5jZW9mIEFycmF5P3tsYXRMbmc6ZVt0XX06ZVt0XSxyPXRoaXMuZ2V0TWFya2VyUG9zaXRpb24oaSksciE9PSExJiYobj10aGlzLmNhbnZhcy5hZGRDaXJjbGUoe1wiZGF0YS1pbmRleFwiOnQsY3g6ci54LGN5OnIueX0sanZtLiQuZXh0ZW5kKCEwLHt9LHRoaXMucGFyYW1zLm1hcmtlclN0eWxlLHtpbml0aWFsOmkuc3R5bGV8fHt9fSksdGhpcy5tYXJrZXJzR3JvdXApLG4uYWRkQ2xhc3MoXCJqdmVjdG9ybWFwLW1hcmtlciBqdmVjdG9ybWFwLWVsZW1lbnRcIiksanZtLiQobi5ub2RlKS5iaW5kKFwic2VsZWN0ZWRcIixmdW5jdGlvbihlLHQpe28uY29udGFpbmVyLnRyaWdnZXIoXCJtYXJrZXJTZWxlY3RlZC5qdmVjdG9ybWFwXCIsW2p2bS4kKHRoaXMpLmF0dHIoXCJkYXRhLWluZGV4XCIpLHQsby5nZXRTZWxlY3RlZE1hcmtlcnMoKV0pfSksdGhpcy5tYXJrZXJzW3RdJiZ0aGlzLnJlbW92ZU1hcmtlcnMoW3RdKSx0aGlzLm1hcmtlcnNbdF09e2VsZW1lbnQ6bixjb25maWc6aX0pfSxyZXBvc2l0aW9uTWFya2VyczpmdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKGUgaW4gdGhpcy5tYXJrZXJzKXQ9dGhpcy5nZXRNYXJrZXJQb3NpdGlvbih0aGlzLm1hcmtlcnNbZV0uY29uZmlnKSx0IT09ITEmJnRoaXMubWFya2Vyc1tlXS5lbGVtZW50LnNldFN0eWxlKHtjeDp0LngsY3k6dC55fSl9LGdldE1hcmtlclBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBqdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLnByb2plY3Rpb24/dGhpcy5sYXRMbmdUb1BvaW50LmFwcGx5KHRoaXMsZS5sYXRMbmd8fFswLDBdKTp7eDplLmNvb3Jkc1swXSp0aGlzLnNjYWxlK3RoaXMudHJhbnNYKnRoaXMuc2NhbGUseTplLmNvb3Jkc1sxXSp0aGlzLnNjYWxlK3RoaXMudHJhbnNZKnRoaXMuc2NhbGV9fSxhZGRNYXJrZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9LGk9W10scyxvLG49bnx8W107cltlXT10O2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspcz17fSxzW2VdPW5bb10saS5wdXNoKHMpO3RoaXMuYWRkTWFya2VycyhyLGkpfSxhZGRNYXJrZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG47dD10fHxbXSx0aGlzLmNyZWF0ZU1hcmtlcnMoZSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLnNlcmllcy5tYXJrZXJzW25dLnNldFZhbHVlcyh0W25dfHx7fSl9LHJlbW92ZU1hcmtlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLm1hcmtlcnNbZVt0XV0uZWxlbWVudC5yZW1vdmUoKSxkZWxldGUgdGhpcy5tYXJrZXJzW2VbdF1dfSxyZW1vdmVBbGxNYXJrZXJzOmZ1bmN0aW9uKCl7dmFyIGUsdD1bXTtmb3IoZSBpbiB0aGlzLm1hcmtlcnMpdC5wdXNoKGUpO3RoaXMucmVtb3ZlTWFya2Vycyh0KX0sbGF0TG5nVG9Qb2ludDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9anZtLldvcmxkTWFwLm1hcHNbdGhpcy5wYXJhbXMubWFwXS5wcm9qZWN0aW9uLGk9ci5jZW50cmFsTWVyaWRpYW4scz10aGlzLndpZHRoLXRoaXMuYmFzZVRyYW5zWCoyKnRoaXMuYmFzZVNjYWxlLG89dGhpcy5oZWlnaHQtdGhpcy5iYXNlVHJhbnNZKjIqdGhpcy5iYXNlU2NhbGUsdSxhLGY9dGhpcy5zY2FsZS90aGlzLmJhc2VTY2FsZTtyZXR1cm4gdDwtMTgwK2kmJih0Kz0zNjApLG49anZtLlByb2pbci50eXBlXShlLHQsaSksdT10aGlzLmdldEluc2V0Rm9yUG9pbnQobi54LG4ueSksdT8oYT11LmJib3gsbi54PShuLngtYVswXS54KS8oYVsxXS54LWFbMF0ueCkqdS53aWR0aCp0aGlzLnNjYWxlLG4ueT0obi55LWFbMF0ueSkvKGFbMV0ueS1hWzBdLnkpKnUuaGVpZ2h0KnRoaXMuc2NhbGUse3g6bi54K3RoaXMudHJhbnNYKnRoaXMuc2NhbGUrdS5sZWZ0KnRoaXMuc2NhbGUseTpuLnkrdGhpcy50cmFuc1kqdGhpcy5zY2FsZSt1LnRvcCp0aGlzLnNjYWxlfSk6ITF9LHBvaW50VG9MYXRMbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLnByb2plY3Rpb24scj1uLmNlbnRyYWxNZXJpZGlhbixpPWp2bS5Xb3JsZE1hcC5tYXBzW3RoaXMucGFyYW1zLm1hcF0uaW5zZXRzLHMsbyx1LGEsZjtmb3Iocz0wO3M8aS5sZW5ndGg7cysrKXtvPWlbc10sdT1vLmJib3gsYT1lLSh0aGlzLnRyYW5zWCp0aGlzLnNjYWxlK28ubGVmdCp0aGlzLnNjYWxlKSxmPXQtKHRoaXMudHJhbnNZKnRoaXMuc2NhbGUrby50b3AqdGhpcy5zY2FsZSksYT1hLyhvLndpZHRoKnRoaXMuc2NhbGUpKih1WzFdLngtdVswXS54KSt1WzBdLngsZj1mLyhvLmhlaWdodCp0aGlzLnNjYWxlKSoodVsxXS55LXVbMF0ueSkrdVswXS55O2lmKGE+dVswXS54JiZhPHVbMV0ueCYmZj51WzBdLnkmJmY8dVsxXS55KXJldHVybiBqdm0uUHJvaltuLnR5cGUrXCJfaW52XCJdKGEsLWYscil9cmV0dXJuITF9LGdldEluc2V0Rm9yUG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1qdm0uV29ybGRNYXAubWFwc1t0aGlzLnBhcmFtcy5tYXBdLmluc2V0cyxyLGk7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7aT1uW3JdLmJib3g7aWYoZT5pWzBdLngmJmU8aVsxXS54JiZ0PmlbMF0ueSYmdDxpWzFdLnkpcmV0dXJuIG5bcl19fSxjcmVhdGVTZXJpZXM6ZnVuY3Rpb24oKXt2YXIgZSx0O3RoaXMuc2VyaWVzPXttYXJrZXJzOltdLHJlZ2lvbnM6W119O2Zvcih0IGluIHRoaXMucGFyYW1zLnNlcmllcylmb3IoZT0wO2U8dGhpcy5wYXJhbXMuc2VyaWVzW3RdLmxlbmd0aDtlKyspdGhpcy5zZXJpZXNbdF1bZV09bmV3IGp2bS5EYXRhU2VyaWVzKHRoaXMucGFyYW1zLnNlcmllc1t0XVtlXSx0aGlzW3RdKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5sYWJlbC5yZW1vdmUoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmUoKSxqdm0uJCh3aW5kb3cpLnVuYmluZChcInJlc2l6ZVwiLHRoaXMub25SZXNpemUpfX0sanZtLldvcmxkTWFwLm1hcHM9e30sanZtLldvcmxkTWFwLmRlZmF1bHRQYXJhbXM9e21hcDpcIndvcmxkX21pbGxfZW5cIixiYWNrZ3JvdW5kQ29sb3I6XCIjNTA1MDUwXCIsem9vbUJ1dHRvbnM6ITAsem9vbU9uU2Nyb2xsOiEwLHpvb21NYXg6OCx6b29tTWluOjEsem9vbVN0ZXA6MS42LHJlZ2lvbnNTZWxlY3RhYmxlOiExLG1hcmtlcnNTZWxlY3RhYmxlOiExLGJpbmRUb3VjaEV2ZW50czohMCxyZWdpb25TdHlsZTp7aW5pdGlhbDp7ZmlsbDpcIndoaXRlXCIsXCJmaWxsLW9wYWNpdHlcIjoxLHN0cm9rZTpcIm5vbmVcIixcInN0cm9rZS13aWR0aFwiOjAsXCJzdHJva2Utb3BhY2l0eVwiOjF9LGhvdmVyOntcImZpbGwtb3BhY2l0eVwiOi44fSxzZWxlY3RlZDp7ZmlsbDpcInllbGxvd1wifSxzZWxlY3RlZEhvdmVyXG46e319LG1hcmtlclN0eWxlOntpbml0aWFsOntmaWxsOlwiZ3JleVwiLHN0cm9rZTpcIiM1MDUwNTBcIixcImZpbGwtb3BhY2l0eVwiOjEsXCJzdHJva2Utd2lkdGhcIjoxLFwic3Ryb2tlLW9wYWNpdHlcIjoxLHI6NX0saG92ZXI6e3N0cm9rZTpcImJsYWNrXCIsXCJzdHJva2Utd2lkdGhcIjoyfSxzZWxlY3RlZDp7ZmlsbDpcImJsdWVcIn0sc2VsZWN0ZWRIb3Zlcjp7fX19LGp2bS5Xb3JsZE1hcC5hcGlFdmVudHM9e29uUmVnaW9uTGFiZWxTaG93OlwicmVnaW9uTGFiZWxTaG93XCIsb25SZWdpb25PdmVyOlwicmVnaW9uT3ZlclwiLG9uUmVnaW9uT3V0OlwicmVnaW9uT3V0XCIsb25SZWdpb25DbGljazpcInJlZ2lvbkNsaWNrXCIsb25SZWdpb25TZWxlY3RlZDpcInJlZ2lvblNlbGVjdGVkXCIsb25NYXJrZXJMYWJlbFNob3c6XCJtYXJrZXJMYWJlbFNob3dcIixvbk1hcmtlck92ZXI6XCJtYXJrZXJPdmVyXCIsb25NYXJrZXJPdXQ6XCJtYXJrZXJPdXRcIixvbk1hcmtlckNsaWNrOlwibWFya2VyQ2xpY2tcIixvbk1hcmtlclNlbGVjdGVkOlwibWFya2VyU2VsZWN0ZWRcIixvblZpZXdwb3J0Q2hhbmdlOlwidmlld3BvcnRDaGFuZ2VcIn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvcGx1Z2lucy9qdmVjdG9ybWFwL2pxdWVyeS1qdmVjdG9ybWFwLTEuMi4yLm1pbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n");
-
-/***/ }),
-
-/***/ 53:
-/***/ (function(module, exports) {
-
-eval("$.fn.vectorMap('addMap', 'world_mill_en', { \"insets\": [{ \"width\": 900.0, \"top\": 0, \"height\": 440.7063107441331, \"bbox\": [{ \"y\": -12671671.123330014, \"x\": -20004297.151525836 }, { \"y\": 6930392.02513512, \"x\": 20026572.394749384 }], \"left\": 0 }], \"paths\": { \"BD\": { \"path\": \"M652.71,228.85l-0.04,1.38l-0.46,-0.21l-0.42,0.3l0.05,0.65l-0.17,-1.37l-0.48,-1.26l-1.08,-1.6l-0.23,-0.13l-2.31,-0.11l-0.31,0.36l0.21,0.98l-0.6,1.11l-0.8,-0.4l-0.37,0.09l-0.23,0.3l-0.54,-0.21l-0.78,-0.19l-0.38,-2.04l-0.83,-1.89l0.4,-1.5l-0.16,-0.35l-1.24,-0.57l0.36,-0.62l1.5,-0.95l0.02,-0.49l-1.62,-1.26l0.64,-1.31l1.7,1.0l0.12,0.04l0.96,0.11l0.19,1.62l0.25,0.26l2.38,0.37l2.32,-0.04l1.06,0.33l-0.92,1.79l-0.97,0.13l-0.23,0.16l-0.77,1.51l0.05,0.35l1.37,1.37l0.5,-0.14l0.35,-1.46l0.24,-0.0l1.24,3.92Z\", \"name\": \"Bangladesh\" }, \"BE\": { \"path\": \"M429.28,143.95l1.76,0.25l0.13,-0.01l2.16,-0.64l1.46,1.34l1.26,0.71l-0.23,1.8l-0.44,0.08l-0.24,0.25l-0.2,1.36l-1.8,-1.22l-0.23,-0.05l-1.14,0.23l-1.62,-1.43l-1.15,-1.31l-0.21,-0.1l-0.95,-0.04l-0.21,-0.68l1.66,-0.54Z\", \"name\": \"Belgium\" }, \"BF\": { \"path\": \"M413.48,260.21l-1.22,-0.46l-0.13,-0.02l-1.17,0.1l-0.15,0.06l-0.73,0.53l-0.87,-0.41l-0.39,-0.75l-0.13,-0.13l-0.98,-0.48l-0.14,-1.2l0.63,-0.99l0.05,-0.18l-0.05,-0.73l1.9,-2.01l0.08,-0.14l0.35,-1.65l0.49,-0.44l1.05,0.3l0.21,-0.02l1.05,-0.52l0.13,-0.13l0.3,-0.58l1.87,-1.1l0.11,-0.1l0.43,-0.72l2.23,-1.01l1.21,-0.32l0.51,0.4l0.19,0.06l1.25,-0.01l-0.14,0.89l0.01,0.13l0.34,1.16l0.06,0.11l1.35,1.59l0.07,1.13l0.24,0.28l2.64,0.53l-0.05,1.39l-0.42,0.59l-1.11,0.21l-0.22,0.17l-0.46,0.99l-0.69,0.23l-2.12,-0.05l-1.14,-0.2l-0.19,0.03l-0.72,0.36l-1.07,-0.17l-4.35,0.12l-0.29,0.29l-0.06,1.44l0.25,1.45Z\", \"name\": \"Burkina Faso\" }, \"BG\": { \"path\": \"M477.63,166.84l0.51,0.9l0.33,0.14l0.9,-0.21l1.91,0.47l3.68,0.16l0.17,-0.05l1.2,-0.75l2.78,-0.67l1.72,1.05l1.02,0.24l-0.97,0.97l-0.91,2.17l0.0,0.24l0.56,1.19l-1.58,-0.3l-0.16,0.01l-2.55,0.95l-0.2,0.28l-0.02,1.23l-1.92,0.24l-1.68,-0.99l-0.27,-0.02l-1.94,0.8l-1.52,-0.07l-0.15,-1.72l-0.12,-0.21l-0.99,-0.76l0.18,-0.18l0.02,-0.39l-0.17,-0.22l0.33,-0.75l0.91,-0.91l0.01,-0.42l-1.16,-1.25l-0.18,-0.89l0.24,-0.27Z\", \"name\": \"Bulgaria\" }, \"BA\": { \"path\": \"M468.39,164.66l0.16,0.04l0.43,-0.0l-0.43,0.93l0.06,0.34l1.08,1.06l-0.28,1.09l-0.5,0.13l-0.47,0.28l-0.86,0.74l-0.1,0.16l-0.28,1.29l-1.81,-0.94l-0.9,-1.22l-1.0,-0.73l-1.1,-1.1l-0.55,-0.96l-1.11,-1.3l0.3,-0.75l0.59,0.46l0.42,-0.04l0.46,-0.54l1.0,-0.06l2.11,0.5l1.72,-0.03l1.06,0.64Z\", \"name\": \"Bosnia and Herzegovina\" }, \"BN\": { \"path\": \"M707.34,273.57l0.76,-0.72l1.59,-1.03l-0.18,1.93l-0.9,-0.06l-0.28,0.14l-0.31,0.51l-0.68,-0.78Z\", \"name\": \"Brunei\" }, \"BO\": { \"path\": \"M263.83,340.79l-0.23,-0.12l-2.86,-0.11l-0.28,0.17l-0.77,1.67l-1.17,-1.51l-0.18,-0.11l-3.28,-0.64l-0.28,0.1l-2.02,2.3l-1.43,0.29l-0.91,-3.35l-1.31,-2.88l0.75,-2.41l-0.09,-0.32l-1.23,-1.03l-0.31,-1.76l-0.05,-0.12l-1.12,-1.6l1.49,-2.62l0.01,-0.28l-1.0,-2.0l0.48,-0.72l0.02,-0.29l-0.37,-0.78l0.87,-1.13l0.06,-0.18l0.05,-2.17l0.12,-1.71l0.5,-0.8l0.01,-0.3l-1.9,-3.58l1.3,0.15l1.34,-0.05l0.23,-0.12l0.51,-0.7l2.12,-0.99l1.31,-0.93l2.81,-0.37l-0.21,1.51l0.01,0.13l0.29,0.91l-0.19,1.64l0.11,0.27l2.72,2.27l0.15,0.07l2.71,0.41l0.92,0.88l0.12,0.07l1.64,0.49l1.0,0.71l0.18,0.06l1.5,-0.02l1.24,0.64l0.1,1.31l0.05,0.14l0.44,0.68l0.02,0.73l-0.44,0.03l-0.27,0.39l0.96,2.99l0.28,0.21l4.43,0.1l-0.28,1.12l0.0,0.15l0.27,1.02l0.15,0.19l1.27,0.67l0.52,1.42l-0.42,1.91l-0.66,1.1l-0.04,0.2l0.21,1.3l-0.19,0.13l-0.01,-0.27l-0.15,-0.24l-2.33,-1.33l-0.14,-0.04l-2.38,-0.03l-4.36,0.76l-0.21,0.16l-1.2,2.29l-0.03,0.13l-0.06,1.37l-0.79,2.53l-0.05,-0.08Z\", \"name\": \"Bolivia\" }, \"JP\": { \"path\": \"M781.17,166.78l1.8,0.67l0.28,-0.04l1.38,-1.01l0.43,2.67l-3.44,0.77l-0.18,0.12l-2.04,2.79l-3.71,-1.94l-0.42,0.15l-1.29,3.11l-2.32,0.04l-0.3,-2.63l1.12,-2.1l2.51,-0.16l0.28,-0.25l0.73,-4.22l0.58,-1.9l2.59,2.84l2.0,1.1ZM773.66,187.36l-0.92,2.24l-0.01,0.2l0.4,1.3l-1.18,1.81l-3.06,1.28l-4.35,0.17l-0.19,0.08l-3.4,3.06l-1.36,-0.87l-0.1,-1.95l-0.34,-0.28l-4.35,0.62l-2.99,1.33l-2.87,0.05l-0.28,0.2l0.09,0.33l2.37,1.93l-1.57,4.44l-1.35,0.97l-0.9,-0.79l0.57,-2.32l-0.15,-0.34l-1.5,-0.77l-0.81,-1.53l2.04,-0.75l0.14,-0.1l1.28,-1.72l2.47,-1.43l1.84,-1.92l4.83,-0.82l2.62,0.57l0.33,-0.16l2.45,-4.77l1.38,1.14l0.38,0.0l5.1,-4.02l0.09,-0.11l1.57,-3.57l0.02,-0.16l-0.42,-3.22l0.94,-1.67l2.27,-0.47l1.26,3.82l-0.07,2.23l-2.26,2.86l-0.06,0.19l0.04,2.93ZM757.85,196.18l0.22,0.66l-1.11,1.33l-0.8,-0.7l-0.33,-0.04l-1.28,0.65l-0.14,0.15l-0.54,1.34l-1.17,-0.57l0.02,-1.03l1.2,-1.45l1.24,0.28l0.29,-0.1l0.9,-1.03l1.51,0.5Z\", \"name\": \"Japan\" }, \"BI\": { \"path\": \"M494.7,295.83l-0.14,-2.71l-0.04,-0.13l-0.34,-0.62l0.93,0.12l0.3,-0.16l0.67,-1.25l0.9,0.11l0.11,0.76l0.08,0.16l0.46,0.48l0.02,0.56l-0.55,0.48l-0.96,1.29l-0.82,0.82l-0.61,0.07Z\", \"name\": \"Burundi\" }, \"BJ\": { \"path\": \"M427.4,268.94l-1.58,0.22l-0.52,-1.45l0.11,-5.73l-0.08,-0.21l-0.43,-0.44l-0.09,-1.13l-0.09,-0.19l-1.52,-1.52l0.24,-1.01l0.7,-0.23l0.18,-0.16l0.45,-0.97l1.07,-0.21l0.19,-0.12l0.53,-0.73l0.73,-0.65l0.68,-0.0l1.69,1.3l-0.08,0.67l0.02,0.14l0.52,1.38l-0.44,0.9l-0.01,0.24l0.2,0.52l-1.1,1.42l-0.76,0.76l-0.08,0.13l-0.47,1.59l0.05,1.69l-0.13,3.79Z\", \"name\": \"Benin\" }, \"BT\": { \"path\": \"M650.38,213.78l0.88,0.75l-0.13,1.24l-1.77,0.07l-2.1,-0.18l-1.57,0.4l-2.02,-0.91l-0.02,-0.24l1.54,-1.87l1.18,-0.6l1.67,0.59l1.32,0.08l1.01,0.67Z\", \"name\": \"Bhutan\" }, \"JM\": { \"path\": \"M226.67,238.37l1.64,0.23l1.2,0.56l0.11,0.19l-1.25,0.03l-0.14,0.04l-0.65,0.37l-1.24,-0.37l-1.17,-0.77l0.11,-0.22l0.86,-0.15l0.52,0.08Z\", \"name\": \"Jamaica\" }, \"BW\": { \"path\": \"M484.91,331.96l0.53,0.52l0.82,1.53l2.83,2.86l0.14,0.08l0.85,0.22l0.03,0.81l0.74,1.66l0.21,0.17l1.87,0.39l1.17,0.87l-3.13,1.71l-2.3,2.01l-0.07,0.1l-0.82,1.74l-0.66,0.88l-1.24,0.19l-0.24,0.2l-0.65,1.98l-1.4,0.55l-1.9,-0.12l-1.2,-0.74l-1.06,-0.32l-0.22,0.02l-1.22,0.62l-0.14,0.14l-0.58,1.21l-1.16,0.79l-1.18,1.13l-1.5,0.23l-0.4,-0.68l0.22,-1.53l-0.04,-0.19l-1.48,-2.54l-0.11,-0.11l-0.53,-0.31l-0.0,-7.25l2.18,-0.08l0.29,-0.3l0.07,-9.0l1.63,-0.08l3.69,-0.86l0.84,0.93l0.38,0.05l1.53,-0.97l0.79,-0.03l1.3,-0.53l0.23,0.1l0.92,1.96Z\", \"name\": \"Botswana\" }, \"BR\": { \"path\": \"M259.49,274.87l1.42,0.25l1.97,0.62l0.28,-0.05l0.67,-0.55l1.76,-0.38l2.8,-0.94l0.12,-0.08l0.92,-0.96l0.05,-0.33l-0.15,-0.32l0.73,-0.06l0.36,0.35l-0.27,0.93l0.17,0.36l0.76,0.34l0.44,0.9l-0.58,0.73l-0.06,0.13l-0.4,2.13l0.03,0.19l0.62,1.22l0.17,1.11l0.11,0.19l1.54,1.18l0.15,0.06l1.23,0.12l0.29,-0.15l0.2,-0.36l0.71,-0.11l1.13,-0.44l0.79,-0.63l1.25,0.19l0.65,-0.08l1.32,0.2l0.32,-0.18l0.23,-0.51l-0.05,-0.31l-0.31,-0.37l0.11,-0.31l0.75,0.17l0.13,0.0l1.1,-0.24l1.34,0.5l1.08,0.51l0.33,-0.05l0.67,-0.58l0.27,0.05l0.28,0.57l0.31,0.17l1.2,-0.18l0.17,-0.08l1.03,-1.05l0.76,-1.82l1.39,-2.16l0.49,-0.07l0.52,1.17l1.4,4.37l0.2,0.2l1.14,0.35l0.05,1.39l-1.8,1.97l0.01,0.42l0.78,0.75l0.18,0.08l4.16,0.37l0.08,2.25l0.5,0.22l1.78,-1.54l2.98,0.85l4.07,1.5l1.07,1.28l-0.37,1.23l0.36,0.38l2.83,-0.75l4.8,1.3l3.75,-0.09l3.6,2.02l3.27,2.84l1.93,0.72l2.13,0.11l0.76,0.66l1.22,4.56l-0.96,4.03l-1.22,1.58l-3.52,3.51l-1.63,2.91l-1.75,2.09l-0.5,0.04l-0.26,0.19l-0.72,1.99l0.18,4.76l-0.95,5.56l-0.74,0.96l-0.06,0.15l-0.43,3.39l-2.49,3.34l-0.06,0.13l-0.4,2.56l-1.9,1.07l-0.13,0.16l-0.51,1.38l-2.59,0.0l-3.94,1.01l-1.82,1.19l-2.85,0.81l-3.01,2.17l-2.12,2.65l-0.06,0.13l-0.36,2.0l0.01,0.13l0.4,1.42l-0.45,2.63l-0.53,1.23l-1.76,1.53l-2.76,4.79l-2.16,2.15l-1.69,1.29l-0.09,0.12l-1.12,2.6l-1.3,1.26l-0.45,-1.02l0.99,-1.18l0.01,-0.37l-1.5,-1.95l-1.98,-1.54l-2.58,-1.77l-0.2,-0.05l-0.81,0.07l-2.42,-2.05l-0.25,-0.07l-0.77,0.14l2.75,-3.07l2.8,-2.61l1.67,-1.09l2.11,-1.49l0.13,-0.24l0.05,-2.15l-0.07,-0.2l-1.26,-1.54l-0.35,-0.09l-0.64,0.27l0.3,-0.95l0.34,-1.57l0.01,-1.52l-0.16,-0.26l-0.9,-0.48l-0.27,-0.01l-0.86,0.39l-0.65,-0.08l-0.23,-0.8l-0.23,-2.39l-0.04,-0.12l-0.47,-0.79l-0.14,-0.12l-1.69,-0.71l-0.25,0.01l-0.93,0.47l-2.29,-0.44l0.15,-3.3l-0.03,-0.15l-0.62,-1.22l0.57,-0.39l0.13,-0.3l-0.22,-1.37l0.67,-1.13l0.44,-2.04l-0.01,-0.17l-0.59,-1.61l-0.14,-0.16l-1.25,-0.66l-0.22,-0.82l0.35,-1.41l-0.28,-0.37l-4.59,-0.1l-0.78,-2.41l0.34,-0.02l0.28,-0.31l-0.03,-1.1l-0.05,-0.16l-0.45,-0.68l-0.1,-1.4l-0.16,-0.24l-1.45,-0.76l-0.14,-0.03l-1.48,0.02l-1.04,-0.73l-1.62,-0.48l-0.93,-0.9l-0.16,-0.08l-2.72,-0.41l-2.53,-2.12l0.18,-1.54l-0.01,-0.13l-0.29,-0.91l0.26,-1.83l-0.34,-0.34l-3.28,0.43l-0.14,0.05l-1.3,0.93l-2.16,1.01l-0.12,0.09l-0.47,0.65l-1.12,0.05l-1.84,-0.21l-0.12,0.01l-1.33,0.41l-0.82,-0.21l0.16,-3.6l-0.48,-0.26l-1.97,1.43l-1.96,-0.06l-0.86,-1.23l-0.22,-0.13l-1.23,-0.11l0.34,-0.69l-0.05,-0.33l-1.36,-1.5l-0.92,-2.0l0.45,-0.32l0.13,-0.25l-0.0,-0.87l1.34,-0.64l0.17,-0.32l-0.23,-1.23l0.56,-0.77l0.05,-0.13l0.16,-1.03l2.7,-1.61l2.01,-0.47l0.16,-0.09l0.24,-0.27l2.11,0.11l0.31,-0.25l1.13,-6.87l0.06,-1.12l-0.4,-1.53l-0.1,-0.15l-1.0,-0.82l0.01,-1.45l1.08,-0.32l0.39,0.2l0.44,-0.24l0.08,-0.96l-0.25,-0.32l-1.22,-0.22l-0.02,-1.01l4.57,0.05l0.22,-0.09l0.6,-0.63l0.44,0.5l0.47,1.42l0.45,0.16l0.27,-0.18l1.21,1.16l0.23,0.08l1.95,-0.16l0.23,-0.14l0.43,-0.67l1.76,-0.55l1.05,-0.42l0.18,-0.2l0.25,-0.92l1.65,-0.66l0.18,-0.35l-0.14,-0.53l-0.26,-0.22l-1.91,-0.19l-0.29,-1.33l0.1,-1.64l-0.15,-0.28l-0.44,-0.25Z\", \"name\": \"Brazil\" }, \"BS\": { \"path\": \"M227.51,216.69l0.3,0.18l-0.24,1.07l0.03,-1.04l-0.09,-0.21ZM226.5,224.03l-0.13,0.03l-0.54,-1.3l-0.09,-0.12l-0.78,-0.64l0.4,-1.26l0.33,0.05l0.79,2.0l0.01,1.24ZM225.76,216.5l-2.16,0.34l-0.07,-0.41l0.85,-0.16l1.36,0.07l0.02,0.16Z\", \"name\": \"The Bahamas\" }, \"BY\": { \"path\": \"M480.08,135.28l2.09,0.02l0.13,-0.03l2.72,-1.3l0.16,-0.19l0.55,-1.83l1.94,-1.06l0.15,-0.31l-0.2,-1.33l1.33,-0.52l2.58,-1.3l2.39,0.8l0.3,0.75l0.37,0.17l1.22,-0.39l2.18,0.75l0.2,1.36l-0.48,0.85l0.01,0.32l1.57,2.26l0.92,0.6l-0.1,0.41l0.19,0.35l1.61,0.57l0.48,0.6l-0.64,0.49l-1.91,-0.11l-0.18,0.05l-0.48,0.32l-0.1,0.39l0.57,1.1l0.51,1.78l-1.79,0.17l-0.18,0.08l-0.77,0.73l-0.09,0.19l-0.13,1.31l-0.75,-0.22l-2.11,0.15l-0.56,-0.66l-0.39,-0.06l-0.8,0.49l-0.79,-0.4l-0.13,-0.03l-1.94,-0.07l-2.76,-0.79l-2.58,-0.27l-1.98,0.07l-0.15,0.05l-1.31,0.86l-0.8,0.09l-0.04,-1.16l-0.03,-0.12l-0.63,-1.28l1.22,-0.56l0.17,-0.27l0.01,-1.35l-0.04,-0.15l-0.66,-1.24l-0.08,-1.12Z\", \"name\": \"Belarus\" }, \"BZ\": { \"path\": \"M198.03,239.7l0.28,0.19l0.43,-0.1l0.82,-1.42l0.0,0.07l0.29,0.29l0.16,0.0l-0.02,0.35l-0.39,1.08l0.02,0.25l0.16,0.29l-0.23,0.8l0.04,0.24l0.09,0.14l-0.25,1.12l-0.38,0.53l-0.33,0.06l-0.21,0.15l-0.41,0.74l-0.25,0.0l0.17,-2.58l0.01,-2.2Z\", \"name\": \"Belize\" }, \"RU\": { \"path\": \"M688.57,38.85l0.63,2.39l0.44,0.19l2.22,-1.23l7.18,0.07l5.54,2.49l1.85,1.77l-0.55,2.34l-2.64,1.42l-6.57,2.76l-1.95,1.5l0.12,0.53l3.09,0.68l3.69,1.23l0.21,-0.01l1.98,-0.81l1.16,2.84l0.5,0.08l1.03,-1.18l3.86,-0.74l7.79,0.78l0.56,2.05l0.27,0.22l10.47,0.71l0.32,-0.29l0.13,-3.34l4.98,0.8l3.96,-0.02l3.88,2.43l1.06,2.79l-1.38,1.83l0.01,0.38l3.15,3.64l0.1,0.08l3.94,1.86l0.4,-0.14l2.28,-4.56l3.75,1.94l0.22,0.02l4.18,-1.22l4.76,1.4l0.26,-0.04l1.74,-1.23l3.98,0.63l0.32,-0.41l-1.71,-4.1l3.0,-1.86l22.39,3.04l2.06,2.67l0.1,0.08l6.55,3.51l0.17,0.03l10.08,-0.86l4.86,0.73l1.91,1.72l-0.29,3.13l0.18,0.31l3.08,1.26l0.19,0.01l3.32,-0.9l4.37,-0.11l4.78,0.87l4.61,-0.48l4.26,3.82l0.32,0.05l3.1,-1.4l0.12,-0.45l-1.91,-2.67l0.92,-1.64l7.78,1.22l5.22,-0.26l7.12,2.1l9.6,5.22l6.4,4.15l-0.2,2.44l0.14,0.28l1.69,1.04l0.45,-0.31l-0.51,-2.66l6.31,0.58l4.52,3.61l-2.1,1.52l-4.02,0.42l-0.27,0.29l-0.06,3.83l-0.81,0.67l-2.14,-0.11l-1.91,-1.39l-3.19,-1.13l-0.51,-1.63l-0.21,-0.2l-2.54,-0.67l-0.13,-0.0l-2.69,0.5l-1.12,-1.19l0.48,-1.36l-0.38,-0.39l-3.0,0.98l-0.17,0.44l1.02,1.76l-1.27,1.55l-3.09,1.71l-3.15,-0.29l-0.3,0.18l0.07,0.34l2.22,2.1l1.47,3.22l1.15,1.09l0.25,1.41l-0.48,0.76l-4.47,-0.81l-0.17,0.02l-6.97,2.9l-2.2,0.44l-0.11,0.05l-3.83,2.68l-3.63,2.32l-0.1,0.11l-0.76,1.4l-3.3,-2.4l-0.3,-0.03l-6.31,2.85l-0.99,-1.21l-0.4,-0.06l-2.32,1.54l-3.23,-0.49l-0.33,0.2l-0.79,2.39l-2.97,3.51l-0.07,0.21l0.09,1.47l0.22,0.27l2.62,0.74l-0.3,4.7l-2.06,0.12l-0.26,0.2l-1.07,2.94l0.04,0.27l0.83,1.19l-4.03,1.63l-0.18,0.21l-0.83,3.72l-3.55,0.79l-0.23,0.23l-0.73,3.32l-3.22,2.76l-0.76,-1.88l-1.07,-4.88l-1.39,-7.59l1.17,-4.76l2.05,-2.08l0.09,-0.19l0.11,-1.46l3.67,-0.77l0.15,-0.08l4.47,-4.61l4.29,-3.82l4.48,-3.01l0.11,-0.14l2.01,-5.43l-0.31,-0.4l-3.04,0.33l-0.24,0.17l-1.47,3.11l-5.98,3.94l-1.91,-4.36l-0.33,-0.17l-6.46,1.3l-0.15,0.08l-6.27,6.33l-0.01,0.41l1.7,1.87l-5.04,0.87l-3.51,0.34l0.16,-2.32l-0.26,-0.32l-3.89,-0.56l-0.19,0.04l-3.02,1.77l-7.63,-0.63l-8.24,1.1l-0.16,0.07l-8.11,7.09l-9.6,8.31l0.16,0.52l3.79,0.42l1.16,2.03l0.17,0.14l2.43,0.76l0.31,-0.08l1.5,-1.61l2.49,0.2l3.46,3.6l0.08,2.67l-1.91,3.26l-0.04,0.14l-0.21,3.91l-1.11,5.09l-3.73,4.55l-0.87,2.21l-6.73,7.14l-1.59,1.77l-3.23,1.72l-1.38,0.03l-1.48,-1.39l-0.37,-0.03l-3.36,2.22l-0.11,0.14l-0.16,0.42l-0.01,-1.09l1.0,-0.06l0.28,-0.27l0.36,-3.6l-0.61,-2.51l1.85,-0.94l2.94,0.53l0.32,-0.15l1.71,-3.1l0.84,-3.38l0.97,-1.18l1.32,-2.88l-0.34,-0.42l-4.14,0.95l-2.18,1.25l-3.51,-0.0l-0.95,-2.81l-0.1,-0.14l-2.97,-2.3l-0.11,-0.05l-4.19,-1.0l-0.89,-3.08l-0.87,-2.03l-0.95,-1.46l-1.54,-3.37l-0.12,-0.14l-2.27,-1.28l-3.83,-1.02l-3.37,0.1l-3.11,0.61l-0.13,0.06l-2.07,1.69l0.04,0.49l1.23,0.72l0.03,1.53l-1.34,1.05l-2.26,3.51l-0.05,0.17l0.02,1.27l-3.25,1.9l-2.87,-1.17l-0.14,-0.02l-2.86,0.26l-1.22,-1.02l-0.12,-0.06l-1.5,-0.35l-0.23,0.04l-3.62,2.27l-3.24,0.53l-2.28,0.79l-3.08,-0.51l-2.24,0.03l-1.49,-1.61l-2.45,-1.57l-0.11,-0.04l-2.6,-0.43l-3.17,0.43l-2.31,0.59l-3.31,-1.28l-0.45,-2.31l-0.21,-0.23l-2.94,-0.85l-2.26,-0.39l-2.77,-1.36l-0.37,0.09l-2.59,3.45l-0.03,0.32l0.91,1.74l-2.15,2.01l-3.47,-0.79l-2.44,-0.12l-1.59,-1.46l-0.2,-0.08l-2.55,-0.05l-2.12,-0.98l-0.24,-0.01l-3.85,1.57l-4.74,2.79l-2.59,0.55l-0.79,0.21l-1.21,-1.81l-0.29,-0.13l-3.05,0.41l-0.96,-1.25l-0.14,-0.1l-1.65,-0.6l-1.15,-1.82l-0.13,-0.12l-1.38,-0.6l-0.19,-0.02l-3.49,0.82l-3.35,-1.85l-0.38,0.08l-1.08,1.4l-5.36,-8.17l-3.02,-2.52l0.72,-0.85l0.01,-0.38l-0.37,-0.08l-6.22,3.21l-1.98,0.16l0.17,-1.51l-0.2,-0.31l-3.22,-1.17l-0.19,-0.0l-2.3,0.74l-0.72,-3.27l-0.24,-0.23l-4.5,-0.75l-0.21,0.04l-2.2,1.42l-6.21,1.27l-0.11,0.05l-1.16,0.81l-9.3,1.19l-0.18,0.09l-1.15,1.17l-0.02,0.39l1.56,2.01l-2.02,0.74l-0.16,0.42l0.35,0.68l-2.18,1.49l0.02,0.51l3.83,2.16l-0.45,1.13l-3.31,-0.13l-0.25,0.12l-0.57,0.77l-2.97,-1.59l-0.15,-0.04l-3.97,0.07l-0.13,0.03l-2.53,1.32l-2.84,-1.28l-5.52,-2.3l-0.12,-0.02l-3.91,0.09l-0.16,0.05l-5.17,3.6l-0.13,0.21l-0.25,1.89l-2.17,-1.6l-0.44,0.1l-2.0,3.59l0.06,0.37l0.55,0.5l-1.32,2.23l0.04,0.36l2.13,2.17l0.23,0.09l1.7,-0.08l1.42,1.89l-0.23,1.5l0.19,0.32l0.94,0.38l-0.89,1.44l-2.3,0.49l-0.17,0.11l-2.49,3.2l0.0,0.37l2.2,2.81l-0.23,1.93l0.06,0.22l2.56,3.32l-1.27,1.02l-0.4,0.66l-0.8,-0.15l-1.65,-1.75l-0.18,-0.09l-0.66,-0.09l-1.45,-0.64l-0.72,-1.16l-0.18,-0.13l-2.34,-0.63l-0.17,0.0l-1.32,0.41l-0.31,-0.4l-0.12,-0.09l-3.49,-1.48l-3.67,-0.49l-2.1,-0.52l-0.3,0.1l-0.12,0.14l-2.96,-2.4l-2.89,-1.19l-1.69,-1.42l1.27,-0.35l0.16,-0.1l2.08,-2.61l-0.04,-0.41l-1.02,-0.9l3.21,-1.12l0.2,-0.31l-0.07,-0.69l-0.37,-0.26l-1.86,0.42l0.05,-0.86l1.11,-0.76l2.35,-0.23l0.25,-0.19l0.39,-1.07l0.0,-0.19l-0.51,-1.64l0.95,-1.58l0.04,-0.16l-0.03,-0.95l-0.22,-0.28l-3.69,-1.06l-1.43,0.02l-1.45,-1.44l-0.29,-0.08l-1.83,0.49l-2.88,-1.04l0.04,-0.42l-0.04,-0.18l-0.89,-1.43l-0.23,-0.14l-1.77,-0.14l-0.13,-0.66l0.52,-0.56l0.01,-0.4l-1.6,-1.9l-0.27,-0.1l-2.55,0.32l-0.71,-0.16l-0.3,0.1l-0.53,0.63l-0.58,-0.08l-0.56,-1.97l-0.48,-0.94l0.17,-0.11l1.92,0.11l0.2,-0.06l0.97,-0.74l0.05,-0.42l-0.72,-0.91l-0.13,-0.1l-1.43,-0.51l0.09,-0.36l-0.13,-0.33l-0.97,-0.59l-1.43,-2.06l0.44,-0.77l0.04,-0.19l-0.25,-1.64l-0.2,-0.24l-2.45,-0.84l-0.19,-0.0l-1.05,0.34l-0.25,-0.62l-0.18,-0.17l-2.5,-0.84l-0.74,-1.93l-0.21,-1.7l-0.13,-0.21l-0.92,-0.63l0.83,-0.89l0.07,-0.27l-0.71,-3.26l1.69,-2.01l0.03,-0.34l-0.24,-0.41l2.63,-1.9l-0.01,-0.49l-2.31,-1.57l5.08,-4.61l2.33,-2.24l1.01,-2.08l-0.09,-0.37l-3.52,-2.56l0.94,-2.38l-0.04,-0.29l-2.14,-2.86l1.61,-3.35l-0.01,-0.29l-2.81,-4.58l2.19,-3.04l-0.06,-0.42l-3.7,-2.76l0.32,-2.67l1.87,-0.38l4.26,-1.77l2.46,-1.47l3.96,2.58l0.12,0.05l6.81,1.04l9.37,4.87l1.81,1.92l0.15,2.55l-2.61,2.06l-3.95,1.07l-11.1,-3.15l-0.17,0.0l-1.84,0.53l-0.1,0.53l3.97,2.97l0.15,1.77l0.16,4.14l0.19,0.27l3.21,1.22l1.94,1.03l0.44,-0.22l0.32,-1.94l-0.07,-0.25l-1.32,-1.52l1.25,-1.2l5.87,2.45l0.24,-0.01l2.11,-0.98l0.13,-0.42l-1.55,-2.75l5.52,-3.84l2.13,0.22l2.28,1.42l0.43,-0.12l1.46,-2.87l-0.04,-0.33l-1.97,-2.37l1.14,-2.38l-0.02,-0.3l-1.42,-2.07l6.15,1.22l1.14,1.92l-2.74,0.46l-0.25,0.3l0.02,2.36l0.12,0.24l1.97,1.44l0.25,0.05l3.87,-0.91l0.22,-0.23l0.58,-2.55l5.09,-1.98l8.67,-3.69l1.22,0.14l-2.06,2.2l0.18,0.5l3.11,0.45l0.23,-0.07l1.71,-1.41l4.59,-0.12l0.12,-0.03l3.53,-1.72l2.7,2.48l0.42,-0.01l2.85,-2.88l-0.0,-0.43l-2.42,-2.35l1.0,-1.13l7.2,1.31l3.42,1.36l9.06,4.97l0.39,-0.08l1.67,-2.27l-0.04,-0.4l-2.46,-2.23l-0.06,-0.82l-0.26,-0.27l-2.64,-0.38l0.69,-1.76l0.0,-0.22l-1.32,-3.47l-0.07,-1.27l4.52,-4.09l0.08,-0.11l1.6,-4.18l1.67,-0.84l6.33,1.2l0.46,2.31l-2.31,3.67l0.05,0.38l1.49,1.41l0.77,3.04l-0.56,6.05l0.09,0.24l2.62,2.54l-0.99,2.65l-4.87,5.96l0.17,0.48l2.86,0.61l0.31,-0.13l0.94,-1.42l2.67,-1.04l0.18,-0.19l0.64,-2.01l2.11,-1.98l0.05,-0.37l-1.38,-2.32l1.11,-2.74l-0.24,-0.41l-2.53,-0.33l-0.53,-2.16l1.96,-4.42l-0.05,-0.32l-3.03,-3.48l4.21,-2.94l0.12,-0.3l-0.52,-3.04l0.72,-0.06l1.18,2.35l-0.97,4.39l0.2,0.35l2.68,0.84l0.37,-0.38l-1.05,-3.07l3.89,-1.71l5.05,-0.24l4.55,2.62l0.36,-0.05l0.05,-0.36l-2.19,-3.84l-0.23,-4.78l4.07,-0.92l5.98,0.21l5.47,-0.64l0.2,-0.48l-1.88,-2.37l2.65,-2.99l2.75,-0.13l0.12,-0.03l4.82,-2.48l6.56,-0.67l0.23,-0.14l0.76,-1.27l6.33,-0.46l1.97,1.11l0.28,0.01l5.55,-2.71l4.53,0.08l0.29,-0.21l0.67,-2.18l2.29,-2.15l5.75,-2.13l3.48,1.4l-2.7,1.03l-0.19,0.31l0.26,0.26l5.47,0.78ZM871.83,65.73l0.25,-0.15l1.99,0.01l3.3,1.2l-0.08,0.22l-2.41,1.03l-5.73,0.49l-0.31,-1.0l2.99,-1.8ZM797.64,48.44l-2.22,1.51l-3.85,-0.43l-4.35,-1.85l0.42,-1.13l4.42,0.72l5.59,1.17ZM783.82,46.06l-1.71,3.25l-9.05,-0.14l-4.11,1.15l-4.64,-3.04l1.21,-3.13l3.11,-0.91l6.53,0.22l8.66,2.59ZM780.37,145.71l2.28,5.23l-3.09,-0.89l-0.37,0.19l-1.54,4.65l0.04,0.27l2.38,3.17l-0.05,1.4l-1.41,-1.41l-0.46,0.04l-1.23,1.81l-0.33,-1.86l0.28,-3.1l-0.28,-3.41l0.58,-2.46l0.11,-4.39l-0.03,-0.13l-1.44,-3.2l0.21,-4.39l2.19,-1.49l0.09,-0.41l-0.81,-1.3l0.48,-0.21l0.56,1.94l0.86,3.23l-0.05,3.36l1.03,3.35ZM780.16,57.18l-3.4,0.03l-5.06,-0.53l1.97,-1.59l2.95,-0.42l3.35,1.75l0.18,0.77ZM683.84,31.18l-13.29,1.97l4.16,-6.56l1.88,-0.58l1.77,0.34l6.08,3.02l-0.6,1.8ZM670.94,28.02l-5.18,0.65l-6.89,-1.58l-4.03,-2.07l-1.88,-3.98l-0.18,-0.16l-2.8,-0.93l5.91,-3.62l5.25,-1.29l4.73,2.88l5.63,5.44l-0.57,4.66ZM564.37,68.98l-0.85,0.23l-7.93,-0.57l-0.6,-1.84l-0.21,-0.2l-4.34,-1.18l-0.3,-2.08l2.34,-0.92l0.19,-0.29l-0.08,-2.43l4.85,-4.0l-0.12,-0.52l-1.68,-0.43l5.47,-3.94l0.11,-0.33l-0.6,-2.02l5.36,-2.55l8.22,-3.27l8.29,-0.96l4.34,-1.94l4.67,-0.65l1.45,1.72l-1.43,1.37l-8.8,2.52l-7.65,2.42l-7.92,4.84l-3.73,4.75l-3.92,4.58l-0.07,0.23l0.51,3.88l0.11,0.2l4.32,3.39ZM548.86,18.57l-3.28,0.75l-2.25,0.44l-0.22,0.19l-0.3,0.81l-2.67,0.86l-2.27,-1.14l1.2,-1.51l-0.23,-0.49l-3.14,-0.1l2.48,-0.54l3.55,-0.07l0.44,1.36l0.49,0.12l1.4,-1.35l2.2,-0.9l3.13,1.08l-0.54,0.49ZM477.5,133.25l-4.21,0.05l-2.69,-0.34l0.39,-1.03l3.24,-1.06l2.51,0.58l0.85,0.43l-0.2,0.71l-0.0,0.15l0.12,0.52Z\", \"name\": \"Russia\" }, \"RW\": { \"path\": \"M497.03,288.12l0.78,1.11l-0.12,1.19l-0.49,0.21l-1.25,-0.15l-0.3,0.16l-0.67,1.24l-1.01,-0.13l0.16,-0.92l0.22,-0.12l0.15,-0.24l0.09,-1.37l0.49,-0.48l0.42,0.18l0.25,-0.01l1.26,-0.65Z\", \"name\": \"Rwanda\" }, \"RS\": { \"path\": \"M469.75,168.65l0.21,-0.21l0.36,-1.44l-0.08,-0.29l-1.06,-1.03l0.54,-1.16l-0.28,-0.43l-0.26,0.0l0.55,-0.67l-0.01,-0.39l-0.77,-0.86l-0.45,-0.89l1.56,-0.67l1.39,0.12l1.22,1.1l0.26,0.91l0.16,0.19l1.38,0.66l0.17,1.12l0.14,0.21l1.46,0.9l0.35,-0.03l0.62,-0.54l0.09,0.06l-0.28,0.25l-0.03,0.42l0.29,0.34l-0.44,0.5l-0.07,0.26l0.22,1.12l0.07,0.14l1.02,1.1l-0.81,0.84l-0.42,0.96l0.04,0.3l0.12,0.15l-0.15,0.16l-1.04,0.04l-0.39,0.08l0.33,-0.81l-0.29,-0.41l-0.21,0.01l-0.39,-0.45l-0.13,-0.09l-0.32,-0.11l-0.27,-0.4l-0.14,-0.11l-0.4,-0.16l-0.31,-0.37l-0.34,-0.09l-0.45,0.17l-0.18,0.18l-0.29,0.84l-0.96,-0.65l-0.81,-0.33l-0.32,-0.37l-0.22,-0.18Z\", \"name\": \"Republic of Serbia\" }, \"LT\": { \"path\": \"M478.13,133.31l-0.14,-0.63l0.25,-0.88l-0.15,-0.35l-1.17,-0.58l-2.43,-0.57l-0.45,-2.51l2.58,-0.97l4.14,0.22l2.3,-0.32l0.26,0.54l0.22,0.17l1.26,0.22l2.25,1.6l0.19,1.23l-1.87,1.01l-0.14,0.18l-0.54,1.83l-2.54,1.21l-2.18,-0.02l-0.52,-0.91l-0.18,-0.14l-1.11,-0.32Z\", \"name\": \"Lithuania\" }, \"LU\": { \"path\": \"M435.95,147.99l0.33,0.49l-0.11,1.07l-0.39,0.04l-0.29,-0.15l0.21,-1.4l0.25,-0.05Z\", \"name\": \"Luxembourg\" }, \"LR\": { \"path\": \"M401.37,273.67l-0.32,0.01l-2.48,-1.15l-2.24,-1.89l-2.14,-1.38l-1.47,-1.42l0.44,-0.59l0.05,-0.13l0.12,-0.65l1.07,-1.3l1.08,-1.09l0.52,-0.07l0.43,-0.18l0.84,1.24l-0.15,0.89l0.07,0.25l0.49,0.54l0.22,0.1l0.71,0.01l0.27,-0.16l0.42,-0.83l0.19,0.02l-0.06,0.52l0.23,1.12l-0.5,1.03l0.06,0.35l0.73,0.69l0.14,0.08l0.71,0.15l0.92,0.91l0.06,0.76l-0.17,0.22l-0.06,0.15l-0.17,1.8Z\", \"name\": \"Liberia\" }, \"RO\": { \"path\": \"M477.94,155.19l1.02,-0.64l1.49,0.33l1.52,0.01l1.09,0.73l0.32,0.01l0.81,-0.46l1.8,-0.3l0.18,-0.1l0.54,-0.64l0.86,0.0l0.64,0.26l0.71,0.87l0.8,1.35l1.39,1.81l0.07,1.25l-0.26,1.3l0.01,0.15l0.45,1.42l0.15,0.18l1.12,0.57l0.25,0.01l1.05,-0.45l0.86,0.4l0.03,0.43l-0.92,0.51l-0.63,-0.24l-0.4,0.22l-0.64,3.41l-1.12,-0.24l-1.78,-1.09l-0.23,-0.04l-2.95,0.71l-1.25,0.77l-3.55,-0.16l-1.89,-0.47l-0.14,-0.0l-0.75,0.17l-0.61,-1.07l-0.3,-0.36l0.36,-0.32l-0.04,-0.48l-0.62,-0.38l-0.36,0.03l-0.62,0.54l-1.15,-0.71l-0.18,-1.14l-0.17,-0.22l-1.4,-0.67l-0.24,-0.86l-0.09,-0.14l-0.96,-0.87l1.49,-0.44l0.16,-0.11l1.51,-2.14l1.15,-2.09l1.44,-0.63Z\", \"name\": \"Romania\" }, \"GW\": { \"path\": \"M383.03,256.73l-1.12,-0.88l-0.14,-0.06l-0.94,-0.15l-0.43,-0.54l0.01,-0.27l-0.13,-0.26l-0.68,-0.48l-0.05,-0.16l0.99,-0.31l0.77,0.08l0.15,-0.02l0.61,-0.26l4.25,0.1l-0.02,0.44l-0.19,0.18l-0.08,0.29l0.17,0.66l-0.17,0.14l-0.44,0.0l-0.16,0.05l-0.57,0.37l-0.66,-0.04l-0.24,0.1l-0.92,1.03Z\", \"name\": \"Guinea Bissau\" }, \"GT\": { \"path\": \"M195.13,249.89l-1.05,-0.35l-1.5,-0.04l-1.06,-0.47l-1.19,-0.93l0.04,-0.53l0.27,-0.55l-0.03,-0.31l-0.24,-0.32l1.02,-1.77l3.04,-0.01l0.3,-0.28l0.06,-0.88l-0.19,-0.3l-0.3,-0.11l-0.23,-0.45l-0.11,-0.12l-0.9,-0.58l-0.35,-0.33l0.37,-0.0l0.3,-0.3l0.0,-1.15l4.05,0.02l-0.02,1.74l-0.2,2.89l0.3,0.32l0.67,-0.0l0.75,0.42l0.4,-0.11l-0.62,0.53l-1.17,0.7l-0.13,0.16l-0.18,0.49l0.0,0.21l0.14,0.34l-0.35,0.44l-0.49,0.13l-0.2,0.41l0.03,0.06l-0.27,0.16l-0.86,0.64l-0.12,0.22ZM199.35,245.38l0.07,-0.13l0.05,0.02l-0.13,0.11Z\", \"name\": \"Guatemala\" }, \"GR\": { \"path\": \"M487.2,174.55l-0.64,1.54l-0.43,0.24l-1.41,-0.08l-1.28,-0.28l-0.14,0.0l-3.03,0.77l-0.13,0.51l1.39,1.34l-0.78,0.29l-1.2,0.0l-1.23,-1.42l-0.47,0.02l-0.47,0.65l-0.04,0.27l0.56,1.76l0.06,0.11l1.02,1.12l-0.66,0.45l-0.04,0.46l1.39,1.35l1.15,0.79l0.02,1.06l-1.91,-0.63l-0.36,0.42l0.56,1.12l-1.2,0.23l-0.22,0.4l0.8,2.14l-1.15,0.02l-1.89,-1.15l-0.89,-2.19l-0.43,-1.91l-0.05,-0.11l-0.98,-1.35l-1.24,-1.62l-0.13,-0.63l1.07,-1.32l0.06,-0.14l0.13,-0.81l0.68,-0.36l0.16,-0.25l0.03,-0.54l1.4,-0.23l0.12,-0.05l0.87,-0.6l1.26,0.05l0.25,-0.11l0.34,-0.43l0.33,-0.07l1.81,0.08l0.13,-0.02l1.87,-0.77l1.64,0.97l0.19,0.04l2.28,-0.28l0.26,-0.29l0.02,-0.95l0.56,0.36ZM480.44,192.0l1.05,0.74l0.01,0.0l-1.26,-0.23l0.2,-0.51ZM481.76,192.79l1.86,-0.15l1.53,0.17l-0.02,0.19l0.34,0.3l-2.28,0.15l0.01,-0.13l-0.25,-0.31l-1.19,-0.22ZM485.65,193.28l0.65,-0.16l-0.05,0.12l-0.6,0.04Z\", \"name\": \"Greece\" }, \"GQ\": { \"path\": \"M444.81,282.04l-0.21,-0.17l0.74,-2.4l3.56,0.05l0.02,2.42l-3.34,-0.02l-0.76,0.13Z\", \"name\": \"Equatorial Guinea\" }, \"GY\": { \"path\": \"M271.34,264.25l1.43,0.81l1.44,1.53l0.06,1.19l0.28,0.28l0.84,0.05l2.13,1.92l-0.34,1.93l-1.37,0.59l-0.17,0.34l0.12,0.51l-0.43,1.21l0.03,0.26l1.11,1.82l0.26,0.14l0.56,0.0l0.32,1.29l1.25,1.78l-0.08,0.01l-1.34,-0.21l-0.24,0.06l-0.78,0.64l-1.06,0.41l-0.76,0.1l-0.22,0.15l-0.18,0.32l-0.95,-0.1l-1.38,-1.05l-0.19,-1.13l-0.6,-1.18l0.37,-1.96l0.65,-0.83l0.03,-0.32l-0.57,-1.17l-0.15,-0.14l-0.62,-0.27l0.25,-0.85l-0.08,-0.3l-0.58,-0.58l-0.24,-0.09l-1.15,0.1l-1.41,-1.58l0.48,-0.49l0.09,-0.22l-0.04,-0.92l1.31,-0.34l0.73,-0.52l0.04,-0.44l-0.75,-0.82l0.16,-0.66l1.74,-1.3Z\", \"name\": \"Guyana\" }, \"GE\": { \"path\": \"M525.41,174.19l0.26,-0.88l-0.0,-0.17l-0.63,-2.06l-0.1,-0.15l-1.45,-1.12l-0.11,-0.05l-1.31,-0.33l-0.66,-0.69l1.97,0.48l3.65,0.49l3.3,1.41l0.39,0.5l0.33,0.1l1.43,-0.45l2.14,0.58l0.7,1.14l0.13,0.12l1.06,0.47l-0.18,0.11l-0.08,0.43l1.08,1.41l-0.06,0.06l-1.16,-0.15l-1.82,-0.84l-0.31,0.04l-0.55,0.44l-3.29,0.44l-2.32,-1.41l-0.17,-0.04l-2.25,0.12Z\", \"name\": \"Georgia\" }, \"GB\": { \"path\": \"M412.82,118.6l-2.31,3.4l-0.0,0.33l0.31,0.13l2.52,-0.49l2.34,0.02l-0.56,2.51l-2.22,3.13l0.22,0.47l2.43,0.21l2.35,4.35l0.17,0.14l1.58,0.51l1.49,3.78l0.73,1.37l0.2,0.15l2.76,0.59l-0.25,1.75l-1.18,0.91l-0.08,0.39l0.87,1.49l-1.96,1.51l-3.31,-0.02l-4.15,0.88l-1.07,-0.59l-0.35,0.04l-1.55,1.44l-2.17,-0.35l-0.22,0.05l-1.61,1.15l-0.78,-0.38l3.31,-3.12l2.18,-0.7l0.21,-0.31l-0.26,-0.27l-3.78,-0.54l-0.48,-0.9l2.3,-0.92l0.13,-0.46l-1.29,-1.71l0.39,-1.83l3.46,0.29l0.32,-0.24l0.37,-1.99l-0.06,-0.24l-1.71,-2.17l-0.18,-0.11l-2.91,-0.58l-0.43,-0.68l0.82,-1.4l-0.03,-0.35l-0.82,-0.97l-0.46,0.01l-0.85,1.05l-0.11,-2.6l-0.05,-0.16l-1.19,-1.7l0.86,-3.53l1.81,-2.75l1.88,0.26l2.38,-0.24ZM406.39,132.84l-1.09,1.92l-1.65,-0.62l-1.26,0.02l0.41,-1.46l0.0,-0.16l-0.42,-1.51l1.62,-0.11l2.39,1.92Z\", \"name\": \"United Kingdom\" }, \"GA\": { \"path\": \"M448.76,294.47l-2.38,-2.34l-1.63,-2.04l-1.46,-2.48l0.06,-0.66l0.54,-0.81l0.61,-1.82l0.46,-1.69l0.63,-0.11l3.62,0.03l0.3,-0.3l-0.02,-2.75l0.88,-0.12l1.47,0.32l0.13,0.0l1.39,-0.3l-0.13,0.87l0.03,0.19l0.7,1.29l0.3,0.16l1.74,-0.19l0.36,0.29l-1.01,2.7l0.05,0.29l1.13,1.42l0.25,1.82l-0.3,1.56l-0.64,0.99l-1.93,-0.09l-1.26,-1.13l-0.5,0.17l-0.16,0.91l-1.48,0.27l-0.12,0.05l-0.86,0.63l-0.08,0.39l0.81,1.42l-1.48,1.08Z\", \"name\": \"Gabon\" }, \"GN\": { \"path\": \"M399.83,265.31l-0.69,-0.06l-0.3,0.16l-0.43,0.85l-0.39,-0.01l-0.3,-0.33l0.14,-0.87l-0.05,-0.22l-1.05,-1.54l-0.37,-0.11l-0.61,0.27l-0.84,0.12l0.02,-0.54l-0.04,-0.17l-0.35,-0.57l0.07,-0.63l-0.03,-0.17l-0.57,-1.11l-0.7,-0.9l-0.24,-0.12l-2.0,-0.0l-0.19,0.07l-0.51,0.42l-0.6,0.05l-0.21,0.11l-0.43,0.55l-0.3,0.7l-1.04,0.86l-0.91,-1.24l-1.0,-1.02l-0.69,-0.37l-0.52,-0.42l-0.3,-1.11l-0.37,-0.56l-0.1,-0.1l-0.4,-0.23l0.77,-0.85l0.62,0.04l0.18,-0.05l0.58,-0.38l0.46,-0.0l0.19,-0.07l0.39,-0.34l0.1,-0.3l-0.17,-0.67l0.15,-0.14l0.09,-0.2l0.03,-0.57l0.87,0.02l1.76,0.6l0.13,0.01l0.55,-0.06l0.22,-0.13l0.08,-0.12l1.18,0.17l0.17,-0.02l0.09,0.56l0.3,0.25l0.4,-0.0l0.14,-0.03l0.56,-0.29l0.23,0.05l0.63,0.59l0.15,0.07l1.07,0.2l0.24,-0.06l0.65,-0.52l0.77,-0.32l0.55,-0.32l0.3,0.04l0.44,0.45l0.34,0.74l0.84,0.87l-0.35,0.45l-0.06,0.15l-0.1,0.82l0.42,0.31l0.35,-0.16l0.05,0.04l-0.1,0.59l0.09,0.27l0.42,0.4l-0.06,0.02l-0.18,0.21l-0.2,0.86l0.03,0.21l0.56,1.02l0.52,1.71l-0.65,0.21l-0.15,0.12l-0.24,0.35l-0.03,0.28l0.16,0.41l-0.1,0.76l-0.12,0.0Z\", \"name\": \"Guinea\" }, \"GM\": { \"path\": \"M379.18,251.48l0.15,-0.55l2.51,-0.07l0.21,-0.09l0.48,-0.52l0.58,-0.03l0.91,0.58l0.16,0.05l0.78,0.01l0.14,-0.03l0.59,-0.31l0.16,0.24l-0.71,0.38l-0.94,-0.04l-1.02,-0.51l-0.3,0.01l-0.86,0.55l-0.37,0.02l-0.14,0.04l-0.53,0.31l-1.81,-0.04Z\", \"name\": \"Gambia\" }, \"GL\": { \"path\": \"M304.13,6.6l8.19,-3.63l8.72,0.28l0.19,-0.06l3.12,-2.28l8.75,-0.61l19.94,0.8l14.93,4.75l-3.92,2.01l-9.52,0.27l-13.48,0.6l-0.27,0.2l0.09,0.33l1.26,1.09l0.22,0.07l8.81,-0.67l7.49,2.07l0.19,-0.01l4.68,-1.78l1.76,1.84l-2.59,3.26l-0.01,0.36l0.34,0.11l6.35,-2.2l12.09,-2.32l7.31,1.14l1.17,2.13l-9.9,4.05l-1.43,1.32l-7.91,0.98l-0.26,0.31l0.29,0.29l5.25,0.25l-2.63,3.72l-2.02,3.61l-0.04,0.15l0.08,6.05l0.07,0.19l2.61,3.0l-3.4,0.2l-4.12,1.66l-0.04,0.54l4.5,2.67l0.53,3.9l-2.39,0.42l-0.19,0.48l2.91,3.83l-5.0,0.32l-0.27,0.22l0.12,0.33l2.69,1.84l-0.65,1.35l-3.36,0.71l-3.46,0.01l-0.21,0.51l3.05,3.15l0.02,1.53l-4.54,-1.79l-0.32,0.06l-1.29,1.26l0.11,0.5l3.33,1.15l3.17,2.74l0.85,3.29l-4.0,0.78l-1.83,-1.66l-3.1,-2.64l-0.36,-0.02l-0.13,0.33l0.8,2.92l-2.76,2.26l-0.09,0.33l0.28,0.2l6.59,0.19l2.47,0.18l-5.86,3.38l-6.76,3.43l-7.26,1.48l-2.73,0.02l-0.16,0.05l-2.67,1.72l-3.44,4.42l-5.28,2.86l-1.73,0.18l-3.33,1.01l-3.59,0.96l-0.15,0.1l-2.15,2.52l-0.07,0.19l-0.03,2.76l-1.21,2.49l-4.03,3.1l-0.1,0.33l0.98,2.94l-2.31,6.57l-3.21,0.21l-3.6,-3.0l-0.19,-0.07l-4.9,-0.02l-2.29,-1.97l-1.69,-3.78l-4.31,-4.86l-1.23,-2.52l-0.34,-3.58l-0.08,-0.17l-3.35,-3.67l0.85,-2.92l-0.09,-0.31l-1.5,-1.34l2.33,-4.7l3.67,-1.57l0.15,-0.13l1.02,-1.93l0.52,-3.47l-0.44,-0.31l-2.85,1.57l-1.33,0.64l-2.12,0.59l-2.81,-1.32l-0.15,-2.79l0.88,-2.17l2.09,-0.06l5.07,1.2l0.34,-0.17l-0.11,-0.37l-4.3,-2.9l-2.24,-1.58l-0.25,-0.05l-2.38,0.62l-1.7,-0.93l2.62,-4.1l-0.03,-0.36l-1.51,-1.75l-1.97,-3.3l-3.01,-5.21l-0.1,-0.11l-3.04,-1.85l0.03,-1.94l-0.18,-0.28l-6.82,-3.01l-5.35,-0.38l-6.69,0.21l-6.03,0.37l-2.81,-1.59l-3.84,-2.9l5.94,-1.5l5.01,-0.28l0.28,-0.29l-0.26,-0.31l-10.68,-1.38l-5.38,-2.1l0.27,-1.68l9.3,-2.6l9.18,-2.68l0.19,-0.16l0.97,-2.05l-0.18,-0.42l-6.29,-1.91l1.81,-1.9l8.58,-4.05l3.6,-0.63l0.23,-0.4l-0.92,-2.37l5.59,-1.5l7.66,-0.95l7.58,-0.05l2.65,1.84l0.31,0.02l6.52,-3.29l5.85,2.24l3.55,0.49l5.17,1.95l0.38,-0.16l-0.13,-0.39l-5.77,-3.16l0.29,-2.26Z\", \"name\": \"Greenland\" }, \"KW\": { \"path\": \"M540.87,207.81l0.41,0.94l-0.18,0.51l0.0,0.21l0.65,1.66l-1.15,0.05l-0.54,-1.12l-0.24,-0.17l-1.73,-0.2l1.44,-2.06l1.33,0.18Z\", \"name\": \"Kuwait\" }, \"GH\": { \"path\": \"M423.16,269.88l-3.58,1.34l-1.41,0.87l-2.13,0.69l-1.91,-0.61l0.09,-0.75l-0.03,-0.17l-1.04,-2.07l0.62,-2.7l1.04,-2.08l0.03,-0.19l-1.0,-5.46l0.05,-1.12l4.04,-0.11l1.08,0.18l0.18,-0.03l0.72,-0.36l0.75,0.13l-0.11,0.48l0.06,0.26l0.98,1.22l-0.0,1.77l0.24,1.99l0.05,0.13l0.55,0.81l-0.52,2.14l0.19,1.37l0.69,1.66l0.38,0.62Z\", \"name\": \"Ghana\" }, \"OM\": { \"path\": \"M568.16,231.0l-0.08,0.1l-0.84,1.61l-0.93,-0.11l-0.27,0.11l-0.58,0.73l-0.4,1.32l-0.01,0.14l0.29,1.61l-0.07,0.09l-1.0,-0.01l-0.16,0.04l-1.56,0.97l-0.14,0.2l-0.23,1.17l-0.41,0.4l-1.44,-0.02l-0.17,0.05l-0.98,0.65l-0.13,0.25l0.01,0.87l-0.97,0.57l-1.27,-0.22l-0.19,0.03l-1.63,0.84l-0.88,0.11l-2.55,-5.57l7.2,-2.49l0.19,-0.19l1.67,-5.23l-0.03,-0.25l-1.1,-1.78l0.05,-0.89l0.68,-1.03l0.05,-0.16l0.01,-0.89l0.96,-0.44l0.07,-0.5l-0.32,-0.26l0.16,-1.31l0.85,-0.01l1.03,1.67l0.09,0.09l1.4,0.96l0.11,0.05l1.82,0.34l1.37,0.45l1.75,2.32l0.13,0.1l0.7,0.26l-0.0,0.3l-1.25,2.19l-1.01,0.8ZM561.88,218.47l-0.01,0.02l-0.15,-0.29l0.3,-0.38l-0.14,0.65Z\", \"name\": \"Oman\" }, \"_3\": { \"path\": \"M543.2,261.06l-1.07,1.46l-1.65,1.99l-1.91,0.01l-8.08,-2.95l-0.89,-0.84l-0.9,-1.19l-0.81,-1.23l0.44,-0.73l0.76,-1.12l0.49,0.28l0.52,1.05l1.13,1.06l0.2,0.08l1.24,0.01l2.42,-0.65l2.77,-0.31l2.17,-0.78l1.31,-0.19l0.84,-0.43l1.03,-0.06l-0.01,4.54Z\", \"name\": \"Somaliland\" }, \"_2\": { \"path\": \"M384.23,230.37l0.07,-0.06l0.28,-0.89l0.99,-1.13l0.07,-0.13l0.8,-3.54l3.4,-2.8l0.09,-0.13l0.76,-2.17l0.07,5.5l-2.07,0.21l-0.24,0.17l-0.61,1.36l-0.02,0.16l0.43,3.46l-4.01,-0.01ZM391.82,218.2l0.07,-0.06l0.75,-1.93l1.86,-0.25l0.94,0.34l1.14,0.0l0.18,-0.06l0.73,-0.56l1.41,-0.08l-0.0,2.72l-7.08,-0.12Z\", \"name\": \"Western Sahara\" }, \"_1\": { \"path\": \"M472.71,172.84l-0.07,-0.43l-0.16,-0.22l-0.53,-0.27l-0.38,-0.58l0.3,-0.43l0.51,-0.19l0.18,-0.18l0.3,-0.87l0.12,-0.04l0.22,0.26l0.12,0.09l0.38,0.15l0.28,0.41l0.15,0.12l0.34,0.12l0.43,0.5l0.15,0.07l-0.12,0.3l-0.27,0.32l-0.03,0.18l-0.31,0.06l-1.48,0.47l-0.15,0.17Z\", \"name\": \"Kosovo\" }, \"_0\": { \"path\": \"M503.54,192.92l0.09,-0.17l0.41,0.01l-0.08,0.01l-0.42,0.15ZM504.23,192.76l1.02,0.02l0.4,-0.13l-0.09,0.29l0.03,0.08l-0.35,0.16l-0.24,-0.04l-0.06,-0.1l-0.18,-0.17l-0.19,-0.08l-0.33,-0.02Z\", \"name\": \"Northern Cyprus\" }, \"JO\": { \"path\": \"M510.26,200.93l0.28,-0.57l2.53,1.0l0.27,-0.02l4.57,-2.77l0.84,2.84l-0.28,0.25l-4.95,1.37l-0.14,0.49l2.24,2.48l-0.5,0.28l-0.13,0.14l-0.35,0.78l-1.76,0.35l-0.2,0.14l-0.57,0.94l-0.94,0.73l-2.45,-0.38l-0.03,-0.12l1.23,-4.32l-0.04,-1.1l0.34,-0.75l0.03,-0.12l0.0,-1.63Z\", \"name\": \"Jordan\" }, \"HR\": { \"path\": \"M455.49,162.73l1.53,0.09l0.24,-0.1l0.29,-0.34l0.64,0.38l0.14,0.04l0.98,0.06l0.32,-0.3l-0.01,-0.66l0.67,-0.25l0.19,-0.22l0.21,-1.11l1.72,-0.72l0.65,0.32l1.94,1.37l2.07,0.6l0.22,-0.02l0.67,-0.33l0.47,0.94l0.67,0.76l-0.63,0.77l-0.91,-0.55l-0.16,-0.04l-1.69,0.04l-2.2,-0.51l-1.17,0.07l-0.21,0.11l-0.36,0.42l-0.67,-0.53l-0.46,0.12l-0.52,1.29l0.05,0.31l1.21,1.42l0.58,0.99l1.15,1.14l0.95,0.68l0.92,1.23l0.1,0.09l1.75,0.91l-1.87,-0.89l-1.5,-1.11l-2.23,-0.88l-1.77,-1.9l0.12,-0.06l0.1,-0.47l-1.07,-1.22l-0.04,-0.94l-0.21,-0.27l-1.61,-0.49l-0.35,0.14l-0.53,0.93l-0.41,-0.57l0.04,-0.73Z\", \"name\": \"Croatia\" }, \"HT\": { \"path\": \"M237.82,234.68l1.35,0.1l1.95,0.37l0.18,1.15l-0.16,0.83l-0.51,0.37l-0.06,0.44l0.57,0.68l-0.02,0.22l-1.31,-0.35l-1.26,0.17l-1.49,-0.18l-0.15,0.02l-1.03,0.43l-1.02,-0.61l0.09,-0.36l2.04,0.32l1.9,0.21l0.19,-0.05l0.9,-0.58l0.05,-0.47l-1.05,-1.03l0.02,-0.86l-0.23,-0.3l-1.13,-0.29l0.18,-0.23Z\", \"name\": \"Haiti\" }, \"HU\": { \"path\": \"M461.96,157.92l0.68,-1.66l-0.03,-0.29l-0.15,-0.22l0.84,-0.0l0.3,-0.26l0.12,-0.84l0.88,0.57l0.98,0.38l0.16,0.01l2.1,-0.39l0.23,-0.21l0.14,-0.45l0.88,-0.1l1.06,-0.43l0.13,0.1l0.28,0.04l1.18,-0.4l0.14,-0.1l0.52,-0.67l0.63,-0.15l2.6,0.95l0.26,-0.03l0.38,-0.23l1.12,0.7l0.1,0.49l-1.31,0.57l-0.14,0.13l-1.18,2.14l-1.44,2.04l-1.85,0.55l-1.51,-0.13l-0.14,0.02l-1.92,0.82l-0.85,0.42l-1.91,-0.55l-1.83,-1.31l-0.74,-0.37l-0.44,-0.97l-0.26,-0.18Z\", \"name\": \"Hungary\" }, \"HN\": { \"path\": \"M202.48,251.87l-0.33,-0.62l-0.18,-0.14l-0.5,-0.15l0.13,-0.76l-0.11,-0.28l-0.34,-0.28l-0.6,-0.23l-0.18,-0.01l-0.81,0.22l-0.16,-0.24l-0.72,-0.39l-0.51,-0.48l-0.12,-0.07l-0.31,-0.09l0.24,-0.3l0.04,-0.3l-0.16,-0.4l0.1,-0.28l1.14,-0.69l1.0,-0.86l0.09,0.04l0.3,-0.05l0.47,-0.39l0.49,-0.03l0.14,0.13l0.29,0.06l0.31,-0.1l1.16,0.22l1.24,-0.08l0.81,-0.28l0.29,-0.25l0.63,0.1l0.69,0.18l0.65,-0.06l0.49,-0.2l1.04,0.32l0.38,0.06l0.7,0.44l0.71,0.56l0.92,0.41l0.1,0.11l-0.11,-0.01l-0.23,0.09l-0.3,0.3l-0.76,0.29l-0.58,0.0l-0.15,0.04l-0.45,0.26l-0.31,-0.07l-0.37,-0.34l-0.28,-0.07l-0.26,0.07l-0.18,0.15l-0.23,0.43l-0.04,-0.0l-0.33,0.28l-0.03,0.4l-0.76,0.61l-0.45,0.3l-0.15,0.16l-0.51,-0.36l-0.41,0.06l-0.45,0.56l-0.41,-0.01l-0.59,0.06l-0.27,0.31l0.04,0.96l-0.07,0.0l-0.25,0.16l-0.24,0.45l-0.42,0.06Z\", \"name\": \"Honduras\" }, \"PR\": { \"path\": \"M254.95,238.31l1.15,0.21l0.2,0.23l-0.36,0.36l-1.76,-0.01l-1.2,0.07l-0.09,-0.69l0.17,-0.18l1.89,0.01Z\", \"name\": \"Puerto Rico\" }, \"PS\": { \"path\": \"M509.66,201.06l-0.0,1.44l-0.29,0.63l-0.59,0.19l0.02,-0.11l0.52,-0.31l-0.02,-0.53l-0.41,-0.2l0.36,-1.28l0.41,0.17Z\", \"name\": \"West Bank\" }, \"PT\": { \"path\": \"M398.65,173.6l0.75,-0.63l0.7,-0.3l0.51,1.2l0.28,0.18l1.48,-0.0l0.2,-0.08l0.33,-0.3l1.16,0.08l0.52,1.11l-0.95,0.66l-0.13,0.24l-0.03,2.2l-0.33,0.35l-0.08,0.18l-0.08,1.17l-0.86,0.19l-0.2,0.44l0.93,1.64l-0.64,1.79l0.07,0.31l0.72,0.72l-0.24,0.56l-0.9,1.05l-0.07,0.26l0.17,0.77l-0.73,0.54l-1.18,-0.36l-0.16,-0.0l-0.85,0.21l0.31,-1.81l-0.23,-1.87l-0.23,-0.25l-0.99,-0.24l-0.49,-0.91l0.18,-1.72l0.93,-0.99l0.08,-0.16l0.17,-1.17l0.52,-1.76l-0.04,-1.36l-0.51,-1.14l-0.09,-0.8Z\", \"name\": \"Portugal\" }, \"PY\": { \"path\": \"M264.33,341.43l0.93,-2.96l0.07,-1.42l1.1,-2.1l4.19,-0.73l2.22,0.04l2.12,1.21l0.07,0.76l0.7,1.38l-0.16,3.48l0.24,0.31l2.64,0.5l0.19,-0.03l0.9,-0.45l1.47,0.62l0.38,0.64l0.23,2.35l0.3,1.07l0.25,0.21l0.93,0.12l0.16,-0.02l0.8,-0.37l0.61,0.33l-0.0,1.25l-0.33,1.53l-0.5,1.57l-0.39,2.26l-2.14,1.94l-1.85,0.4l-2.74,-0.4l-2.13,-0.62l2.26,-3.75l0.03,-0.24l-0.36,-1.18l-0.17,-0.19l-2.55,-1.03l-3.04,-1.95l-2.07,-0.43l-4.4,-4.12Z\", \"name\": \"Paraguay\" }, \"PA\": { \"path\": \"M213.65,263.79l0.18,-0.43l0.02,-0.18l-0.06,-0.28l0.23,-0.18l-0.01,-0.48l-0.4,-0.29l-0.01,-0.62l0.57,-0.13l0.68,0.69l-0.04,0.39l0.26,0.33l1.0,0.11l0.27,-0.1l0.49,0.44l0.24,0.07l1.34,-0.22l1.04,-0.62l1.49,-0.5l0.86,-0.73l0.99,0.11l0.18,0.28l1.35,0.08l1.02,0.4l0.78,0.72l0.71,0.53l-0.1,0.12l-0.05,0.3l0.53,1.34l-0.28,0.44l-0.6,-0.13l-0.36,0.22l-0.2,0.76l-0.41,-0.36l-0.44,-1.12l0.49,-0.53l-0.14,-0.49l-0.51,-0.14l-0.41,-0.72l-0.11,-0.11l-1.25,-0.7l-0.19,-0.04l-1.1,0.16l-0.22,0.15l-0.47,0.81l-0.9,0.56l-0.49,0.08l-0.22,0.17l-0.25,0.52l0.05,0.32l0.93,1.07l-0.41,0.21l-0.29,0.3l-0.81,0.09l-0.36,-1.26l-0.53,-0.1l-0.21,0.28l-0.5,-0.09l-0.44,-0.88l-0.22,-0.16l-0.99,-0.16l-0.61,-0.28l-0.13,-0.03l-1.0,0.0Z\", \"name\": \"Panama\" }, \"PG\": { \"path\": \"M808.4,298.6l0.62,0.46l1.19,1.56l1.04,0.77l-0.18,0.37l-0.42,0.15l-0.92,-0.82l-1.05,-1.53l-0.27,-0.96ZM804.09,296.06l-0.3,0.26l-0.36,-1.11l-0.66,-1.06l-2.55,-1.89l-1.42,-0.59l0.17,-0.15l1.16,0.6l0.85,0.55l1.01,0.58l0.97,1.02l0.9,0.76l0.24,1.03ZM796.71,297.99l0.15,0.82l0.34,0.24l1.43,-0.19l0.19,-0.11l0.68,-0.82l1.36,-0.87l0.13,-0.31l-0.21,-1.13l1.04,-0.03l0.3,0.25l-0.04,1.17l-0.74,1.34l-1.17,0.18l-0.22,0.15l-0.35,0.62l-2.51,1.13l-1.21,-0.0l-1.99,-0.71l-1.19,-0.58l0.07,-0.28l1.98,0.32l1.46,-0.2l0.24,-0.21l0.25,-0.79ZM789.24,303.52l0.11,0.15l2.19,1.62l1.6,2.62l0.27,0.14l1.09,-0.06l-0.07,0.77l0.23,0.32l1.23,0.27l-0.14,0.09l0.05,0.53l2.39,0.95l-0.11,0.28l-1.33,0.14l-0.51,-0.55l-0.18,-0.09l-4.59,-0.65l-1.87,-1.55l-1.38,-1.35l-1.28,-2.17l-0.16,-0.13l-3.27,-1.1l-0.19,0.0l-2.12,0.72l-1.58,0.85l-0.15,0.31l0.28,1.63l-1.65,0.73l-1.37,-0.4l-2.3,-0.09l-0.08,-15.65l3.95,1.57l4.58,1.42l1.67,1.25l1.32,1.19l0.36,1.39l0.19,0.21l4.06,1.51l0.39,0.85l-1.9,0.22l-0.25,0.39l0.55,1.68Z\", \"name\": \"Papua New Guinea\" }, \"PE\": { \"path\": \"M246.44,329.21l-0.63,1.25l-1.05,0.54l-2.25,-1.33l-0.19,-0.93l-0.16,-0.21l-4.95,-2.58l-4.46,-2.79l-1.87,-1.52l-0.94,-1.91l0.33,-0.6l-0.01,-0.31l-2.11,-3.33l-2.46,-4.66l-2.36,-5.02l-1.04,-1.18l-0.77,-1.81l-0.08,-0.11l-1.95,-1.64l-1.54,-0.88l0.61,-0.85l0.02,-0.31l-1.15,-2.27l0.69,-1.56l1.59,-1.26l0.12,0.42l-0.56,0.47l-0.11,0.25l0.07,0.92l0.36,0.27l0.97,-0.19l0.85,0.23l0.99,1.19l0.41,0.05l1.42,-1.03l0.11,-0.16l0.46,-1.64l1.45,-2.06l2.92,-0.96l0.11,-0.07l2.73,-2.62l0.84,-1.72l0.02,-0.18l-0.3,-1.65l0.28,-0.1l1.49,1.06l0.77,1.14l0.1,0.09l1.08,0.6l1.43,2.55l0.21,0.15l1.86,0.31l0.18,-0.03l1.25,-0.6l0.77,0.37l0.17,0.03l1.4,-0.2l1.57,0.96l-1.45,2.29l0.23,0.46l0.63,0.05l0.66,0.7l-1.51,-0.08l-0.24,0.1l-0.27,0.31l-1.96,0.46l-2.95,1.74l-0.14,0.21l-0.17,1.1l-0.6,0.82l-0.05,0.23l0.21,1.13l-1.31,0.63l-0.17,0.27l0.0,0.91l-0.53,0.37l-0.1,0.37l1.04,2.27l1.31,1.46l-0.44,0.9l0.24,0.43l1.52,0.13l0.87,1.23l0.24,0.13l2.21,0.07l0.18,-0.06l1.55,-1.13l-0.14,3.22l0.23,0.3l1.14,0.29l0.16,-0.0l1.18,-0.36l1.97,3.71l-0.45,0.71l-0.04,0.14l-0.12,1.8l-0.05,2.07l-0.92,1.2l-0.03,0.31l0.38,0.8l-0.48,0.72l-0.02,0.3l1.01,2.02l-1.5,2.64Z\", \"name\": \"Peru\" }, \"PK\": { \"path\": \"M609.08,187.76l1.66,1.21l0.71,2.11l0.2,0.19l3.62,1.01l-1.98,1.95l-2.65,0.4l-3.75,-0.68l-0.26,0.08l-1.23,1.22l-0.07,0.31l0.89,2.46l0.88,1.92l0.1,0.12l1.67,1.14l-1.8,1.35l-0.12,0.25l0.04,1.85l-2.35,2.67l-1.59,2.79l-2.5,2.72l-2.76,-0.2l-0.24,0.09l-2.76,2.83l0.04,0.45l1.54,1.13l0.27,1.94l0.09,0.17l1.34,1.29l0.4,1.83l-5.14,-0.01l-0.22,0.09l-1.53,1.63l-1.52,-0.56l-0.76,-1.88l-1.93,-2.03l-0.25,-0.09l-4.6,0.5l-4.05,0.05l-3.1,0.33l0.77,-2.53l3.48,-1.33l0.19,-0.33l-0.21,-1.24l-0.19,-0.23l-1.01,-0.37l-0.06,-2.18l-0.17,-0.26l-2.32,-1.16l-0.96,-1.57l-0.56,-0.65l3.16,1.05l0.14,0.01l2.45,-0.4l1.44,0.33l0.3,-0.1l0.4,-0.47l1.58,0.22l0.14,-0.01l3.25,-1.14l0.2,-0.27l0.08,-2.23l1.23,-1.38l1.73,0.0l0.28,-0.2l0.22,-0.61l1.68,-0.32l0.86,0.24l0.27,-0.05l0.98,-0.78l0.11,-0.26l-0.13,-1.57l0.96,-1.52l1.51,-0.67l0.14,-0.41l-0.74,-1.4l1.86,0.07l0.26,-0.13l0.69,-1.01l0.05,-0.2l-0.09,-0.94l1.14,-1.09l0.09,-0.28l-0.29,-1.41l-0.51,-1.07l1.23,-1.05l2.6,-0.58l2.86,-0.33l1.33,-0.54l1.3,-0.29Z\", \"name\": \"Pakistan\" }, \"PH\": { \"path\": \"M737.11,263.82l0.25,1.66l0.14,1.34l-0.54,1.46l-0.64,-1.79l-0.5,-0.1l-1.17,1.28l-0.05,0.32l0.74,1.71l-0.49,0.81l-2.6,-1.28l-0.61,-1.57l0.68,-1.07l-0.07,-0.4l-1.59,-1.19l-0.42,0.06l-0.69,0.91l-1.01,-0.08l-0.21,0.06l-1.58,1.2l-0.17,-0.3l0.87,-1.88l1.48,-0.66l1.18,-0.81l0.71,0.92l0.34,0.1l1.9,-0.69l0.18,-0.18l0.34,-0.94l1.57,-0.06l0.29,-0.32l-0.1,-1.38l1.41,0.83l0.36,2.06ZM734.94,254.42l0.56,2.24l-1.41,-0.49l-0.4,0.3l0.07,0.94l0.51,1.3l-0.54,0.26l-0.08,-1.34l-0.25,-0.28l-0.56,-0.1l-0.23,-0.91l1.03,0.14l0.34,-0.31l-0.03,-0.96l-0.06,-0.18l-1.14,-1.44l1.62,0.04l0.57,0.78ZM724.68,238.33l1.48,0.71l0.33,-0.04l0.44,-0.38l0.05,0.13l-0.37,0.97l0.01,0.23l0.81,1.75l-0.59,1.92l-1.37,0.79l-0.14,0.2l-0.39,2.07l0.01,0.14l0.56,2.04l0.23,0.21l1.33,0.28l0.14,-0.0l1.0,-0.27l2.82,1.28l-0.2,1.16l0.12,0.29l0.66,0.5l-0.13,0.56l-1.54,-0.99l-0.89,-1.29l-0.49,0.0l-0.44,0.65l-1.34,-1.28l-0.26,-0.08l-2.18,0.36l-0.96,-0.44l0.09,-0.72l0.69,-0.57l-0.01,-0.47l-0.75,-0.59l-0.47,0.14l-0.15,0.43l-0.86,-1.02l-0.34,-1.02l-0.07,-1.74l0.49,0.41l0.49,-0.21l0.26,-3.99l0.73,-2.1l1.23,0.0ZM731.12,258.92l-0.82,0.75l-0.83,1.64l-0.52,0.5l-1.17,-1.33l0.36,-0.47l0.62,-0.7l0.07,-0.15l0.24,-1.35l0.73,-0.08l-0.31,1.29l0.16,0.34l0.37,-0.09l1.21,-1.6l-0.12,1.24ZM726.66,255.58l0.85,0.45l0.14,0.03l1.28,-0.0l-0.03,0.62l-1.04,0.96l-1.15,0.55l-0.05,-0.71l0.17,-1.26l-0.01,-0.13l-0.16,-0.51ZM724.92,252.06l-0.45,1.5l-0.7,-0.83l-0.95,-1.43l1.44,0.06l0.67,0.7ZM717.48,261.28l-1.87,1.35l0.21,-0.3l1.81,-1.57l1.5,-1.75l0.97,-1.84l0.23,1.08l-1.56,1.33l-1.29,1.7Z\", \"name\": \"Philippines\" }, \"PL\": { \"path\": \"M458.8,144.25l-0.96,-1.98l0.18,-1.06l-0.01,-0.15l-0.62,-1.8l-0.82,-1.11l0.56,-0.73l0.05,-0.28l-0.51,-1.51l1.48,-0.87l3.88,-1.58l3.06,-1.14l2.23,0.52l0.15,0.66l0.29,0.23l2.4,0.04l3.11,0.39l4.56,-0.05l1.12,0.32l0.51,0.89l0.1,1.45l0.03,0.12l0.66,1.23l-0.01,1.08l-1.33,0.61l-0.14,0.41l0.74,1.5l0.07,1.53l1.22,2.79l-0.19,0.66l-1.09,0.33l-0.14,0.09l-2.27,2.72l-0.04,0.31l0.35,0.8l-2.22,-1.16l-0.21,-0.02l-1.72,0.44l-1.1,-0.31l-0.21,0.02l-1.3,0.61l-1.11,-1.02l-0.32,-0.05l-0.81,0.35l-1.15,-1.61l-0.21,-0.12l-1.65,-0.17l-0.19,-0.82l-0.23,-0.23l-1.72,-0.37l-0.34,0.17l-0.25,0.56l-0.88,-0.44l0.12,-0.69l-0.25,-0.35l-1.78,-0.27l-1.08,-0.97Z\", \"name\": \"Poland\" }, \"ZM\": { \"path\": \"M502.81,308.32l1.09,1.04l0.58,1.94l-0.39,0.66l-0.5,2.05l-0.0,0.14l0.45,1.95l-0.69,0.77l-0.06,0.11l-0.76,2.37l0.15,0.36l0.62,0.31l-6.85,1.9l-0.22,0.33l0.2,1.54l-1.62,0.3l-0.12,0.05l-1.43,1.02l-0.11,0.15l-0.25,0.73l-0.73,0.17l-0.14,0.08l-2.18,2.12l-1.33,1.6l-0.65,0.05l-0.83,-0.29l-2.75,-0.28l-0.24,-0.1l-0.15,-0.27l-0.99,-0.58l-0.12,-0.04l-1.73,-0.14l-1.88,0.54l-1.5,-1.48l-1.61,-2.01l0.11,-7.73l4.92,0.03l0.29,-0.37l-0.19,-0.79l0.34,-0.86l0.0,-0.21l-0.41,-1.11l0.26,-1.14l-0.01,-0.16l-0.12,-0.36l0.18,0.01l0.1,0.56l0.31,0.25l1.14,-0.06l1.44,0.21l0.76,1.05l0.19,0.12l2.01,0.35l0.19,-0.03l1.24,-0.65l0.44,1.03l0.22,0.18l1.81,0.34l0.85,0.99l1.02,1.39l0.24,0.12l1.92,0.02l0.3,-0.32l-0.21,-2.74l-0.47,-0.23l-0.53,0.36l-1.58,-0.89l-0.51,-0.34l0.29,-2.36l0.44,-2.99l-0.03,-0.18l-0.5,-0.99l0.61,-1.38l0.53,-0.24l3.26,-0.41l0.89,0.23l1.01,0.62l1.04,0.44l1.6,0.43l1.35,0.72Z\", \"name\": \"Zambia\" }, \"EE\": { \"path\": \"M482.19,120.88l0.23,-1.68l-0.43,-0.31l-0.75,0.37l-1.34,-1.1l-0.18,-1.75l2.92,-0.95l3.07,-0.53l2.66,0.6l2.48,-0.1l0.18,0.31l-1.65,1.96l-0.06,0.26l0.71,3.25l-0.88,0.94l-1.85,-0.01l-2.08,-1.3l-1.14,-0.47l-0.2,-0.01l-1.69,0.51Z\", \"name\": \"Estonia\" }, \"EG\": { \"path\": \"M508.07,208.8l-0.66,1.06l-0.53,2.03l-0.64,1.32l-0.32,0.26l-1.74,-1.85l-1.77,-3.86l-0.48,-0.09l-0.26,0.25l-0.07,0.32l1.04,2.88l1.55,2.76l1.89,4.18l0.94,1.48l0.83,1.54l2.08,2.73l-0.3,0.28l-0.1,0.23l0.08,1.72l0.11,0.22l2.91,2.37l-28.78,0.0l0.0,-19.06l-0.73,-2.2l0.61,-1.59l0.0,-0.2l-0.34,-1.04l0.73,-1.08l3.13,-0.04l2.36,0.72l2.48,0.81l1.15,0.43l0.23,-0.01l1.93,-0.87l1.02,-0.78l2.08,-0.21l1.59,0.31l0.62,1.24l0.52,0.03l0.46,-0.71l1.86,0.59l1.95,0.16l0.17,-0.04l0.92,-0.52l1.48,4.24Z\", \"name\": \"Egypt\" }, \"ZA\": { \"path\": \"M467.06,373.27l-0.13,-0.29l0.01,-1.58l-0.02,-0.12l-0.71,-1.64l0.59,-0.37l0.14,-0.26l-0.07,-2.13l-0.05,-0.15l-1.63,-2.58l-1.25,-2.31l-1.71,-3.37l0.88,-0.98l0.7,0.52l0.39,1.08l0.23,0.19l1.1,0.19l1.55,0.51l0.14,0.01l1.35,-0.2l0.11,-0.04l2.24,-1.39l0.14,-0.25l0.0,-9.4l0.16,0.09l1.39,2.38l-0.22,1.53l0.04,0.19l0.56,0.94l0.3,0.14l1.79,-0.27l0.16,-0.08l1.23,-1.18l1.17,-0.79l0.1,-0.12l0.57,-1.19l1.02,-0.52l0.9,0.28l1.16,0.73l0.14,0.05l2.04,0.13l0.13,-0.02l1.6,-0.62l0.18,-0.19l0.63,-1.93l1.18,-0.19l0.19,-0.12l0.78,-1.05l0.81,-1.71l2.18,-1.91l3.44,-1.88l0.89,0.02l1.17,0.43l0.21,-0.0l0.76,-0.29l1.07,0.21l1.15,3.55l0.63,1.82l-0.44,2.9l0.1,0.52l-0.74,-0.29l-0.18,-0.01l-0.72,0.19l-0.21,0.2l-0.22,0.74l-0.66,0.97l-0.05,0.18l0.02,0.93l0.09,0.21l1.49,1.46l0.27,0.08l1.47,-0.29l0.22,-0.18l0.43,-1.01l1.29,0.02l-0.51,1.63l-0.29,2.2l-0.59,1.12l-2.2,1.78l-1.06,1.39l-0.72,1.44l-1.39,1.93l-2.81,2.84l-1.75,1.65l-1.85,1.24l-2.55,1.06l-1.23,0.14l-0.24,0.18l-0.22,0.54l-1.27,-0.35l-0.2,0.01l-1.15,0.5l-2.62,-0.52l-0.12,0.0l-1.46,0.33l-0.98,-0.14l-0.16,0.02l-2.55,1.1l-2.11,0.44l-1.59,1.07l-0.93,0.06l-0.97,-0.92l-0.19,-0.08l-0.72,-0.04l-1.0,-1.16l-0.25,0.05ZM493.72,359.24l-1.12,-0.86l-0.31,-0.03l-1.23,0.59l-1.36,1.07l-1.39,1.78l0.01,0.38l1.88,2.11l0.31,0.09l0.9,-0.27l0.18,-0.15l0.4,-0.77l1.28,-0.39l0.18,-0.16l0.42,-0.88l0.76,-1.32l-0.05,-0.37l-0.87,-0.82Z\", \"name\": \"South Africa\" }, \"EC\": { \"path\": \"M220.2,293.48l1.25,-1.76l0.02,-0.31l-0.54,-1.09l-0.5,-0.06l-0.78,0.94l-1.03,-0.75l0.33,-0.46l0.05,-0.23l-0.38,-2.04l0.66,-0.28l0.17,-0.19l0.45,-1.52l0.93,-1.58l0.04,-0.2l-0.13,-0.78l1.19,-0.47l1.57,-0.91l2.35,1.34l0.17,0.04l0.28,-0.02l0.52,0.91l0.21,0.15l2.12,0.35l0.2,-0.03l0.55,-0.31l1.08,0.73l0.97,0.54l0.31,1.67l-0.71,1.49l-2.64,2.54l-2.95,0.97l-0.15,0.11l-1.53,2.18l-0.49,1.68l-1.1,0.8l-0.87,-1.05l-0.15,-0.1l-1.01,-0.27l-0.13,-0.0l-0.7,0.14l-0.03,-0.43l0.6,-0.5l0.1,-0.31l-0.26,-0.91Z\", \"name\": \"Ecuador\" }, \"AL\": { \"path\": \"M470.27,171.7l0.38,0.19l0.45,-0.18l0.4,0.61l0.11,0.1l0.46,0.24l0.13,0.87l-0.3,0.95l-0.0,0.17l0.36,1.28l0.12,0.17l0.9,0.63l-0.03,0.44l-0.67,0.35l-0.16,0.22l-0.14,0.88l-0.96,1.18l-0.06,-0.03l-0.04,-0.48l-0.12,-0.22l-1.28,-0.92l-0.19,-1.25l0.2,-1.96l0.33,-0.89l-0.06,-0.3l-0.36,-0.41l-0.13,-0.75l0.66,-0.9Z\", \"name\": \"Albania\" }, \"AO\": { \"path\": \"M461.62,299.93l0.55,1.67l0.73,1.54l1.56,2.18l0.28,0.12l1.66,-0.2l0.81,-0.34l1.28,0.33l0.33,-0.14l0.39,-0.67l0.56,-1.3l1.37,-0.09l0.27,-0.21l0.07,-0.23l0.67,-0.01l-0.13,0.53l0.29,0.37l2.74,-0.02l0.04,1.29l0.03,0.13l0.46,0.87l-0.35,1.52l0.18,1.55l0.07,0.16l0.75,0.85l-0.13,2.89l0.41,0.29l0.56,-0.21l1.11,0.05l1.5,-0.37l0.9,0.12l0.18,0.53l-0.27,1.15l0.01,0.17l0.4,1.08l-0.33,0.85l-0.01,0.18l0.12,0.51l-4.83,-0.03l-0.3,0.3l-0.12,8.13l0.07,0.19l1.69,2.1l1.27,1.25l-4.03,0.92l-5.93,-0.36l-1.66,-1.19l-0.18,-0.06l-10.15,0.11l-0.34,0.13l-1.35,-1.05l-0.17,-0.06l-1.62,-0.08l-1.6,0.45l-0.88,0.36l-0.17,-1.2l0.34,-2.19l0.85,-2.32l0.14,-1.13l0.79,-2.24l0.57,-1.0l1.42,-1.64l0.82,-1.15l0.05,-0.13l0.26,-1.88l-0.13,-1.51l-0.07,-0.16l-0.72,-0.87l-1.23,-2.91l0.09,-0.37l0.73,-0.95l0.05,-0.27l-1.27,-4.12l-1.19,-1.54l0.1,-0.2l0.86,-0.28l0.78,0.03l0.83,-0.29l7.12,0.03ZM451.81,298.94l-0.17,0.07l-0.5,-1.42l0.85,-0.92l0.53,-0.29l0.48,0.44l-0.56,0.32l-0.1,0.1l-0.41,0.65l-0.05,0.14l-0.07,0.91Z\", \"name\": \"Angola\" }, \"KZ\": { \"path\": \"M598.42,172.08l-1.37,0.54l-3.3,2.09l-0.11,0.12l-1.01,1.97l-0.56,0.01l-0.6,-1.24l-0.26,-0.17l-2.95,-0.09l-0.46,-2.22l-0.29,-0.24l-0.91,-0.02l0.17,-2.72l-0.12,-0.26l-3.0,-2.22l-0.2,-0.06l-4.29,0.24l-2.8,0.42l-2.36,-2.7l-6.4,-3.65l-0.23,-0.03l-6.45,1.83l-0.22,0.29l0.1,10.94l-0.84,0.1l-1.65,-2.21l-0.11,-0.09l-1.69,-0.84l-0.2,-0.02l-2.84,0.63l-0.14,0.07l-0.71,0.64l-0.02,-0.11l0.57,-1.17l0.0,-0.26l-0.48,-1.05l-0.17,-0.16l-2.78,-0.99l-1.08,-2.62l-0.13,-0.15l-1.24,-0.7l-0.04,-0.48l2.07,0.25l0.34,-0.29l0.09,-2.03l1.84,-0.44l2.12,0.45l0.36,-0.25l0.45,-3.04l-0.45,-2.06l-0.31,-0.23l-2.44,0.15l-2.07,-0.75l-0.23,0.01l-2.88,1.38l-2.21,0.62l-0.96,-0.38l0.22,-1.39l-0.06,-0.23l-1.6,-2.12l-0.25,-0.12l-1.72,0.08l-1.87,-1.91l1.33,-2.24l-0.06,-0.38l-0.55,-0.5l1.72,-3.08l2.3,1.7l0.48,-0.2l0.29,-2.26l4.99,-3.48l3.76,-0.08l5.46,2.27l2.96,1.33l0.26,-0.01l2.59,-1.36l3.82,-0.06l3.13,1.67l0.38,-0.09l0.63,-0.85l3.36,0.14l0.29,-0.19l0.63,-1.57l-0.13,-0.37l-3.64,-2.05l2.0,-1.36l0.1,-0.38l-0.32,-0.62l2.09,-0.76l0.13,-0.47l-1.65,-2.13l0.89,-0.91l9.27,-1.18l0.13,-0.05l1.17,-0.82l6.2,-1.27l2.26,-1.43l4.19,0.7l0.74,3.39l0.38,0.22l2.52,-0.81l2.9,1.06l-0.18,1.63l0.32,0.33l2.52,-0.23l5.0,-2.58l0.03,0.39l3.16,2.62l5.57,8.48l0.49,0.02l1.18,-1.53l3.22,1.78l0.21,0.03l3.5,-0.83l1.21,0.52l1.16,1.82l0.15,0.12l1.67,0.61l1.01,1.32l0.28,0.11l3.04,-0.41l1.1,1.64l-1.68,1.89l-1.97,0.28l-0.26,0.29l-0.12,3.09l-1.2,1.23l-4.81,-1.01l-0.35,0.2l-1.77,5.51l-1.14,0.62l-4.92,1.23l-0.2,0.41l2.14,5.06l-1.45,0.67l-0.17,0.31l0.15,1.28l-1.05,-0.3l-1.21,-1.04l-0.17,-0.07l-3.73,-0.32l-4.15,-0.08l-0.92,0.31l-3.46,-1.24l-0.22,0.01l-1.42,0.63l-0.17,0.21l-0.32,1.49l-3.82,-0.97l-0.15,0.0l-1.65,0.43l-0.2,0.17l-0.51,1.21Z\", \"name\": \"Kazakhstan\" }, \"ET\": { \"path\": \"M516.0,247.63l1.21,0.92l0.3,0.04l1.3,-0.53l0.46,0.41l0.19,0.08l1.65,0.03l2.05,0.96l0.67,0.88l1.07,0.79l1.0,1.45l0.7,0.68l-0.72,0.92l-0.85,1.19l-0.04,0.25l0.19,0.67l0.04,0.74l0.29,0.28l1.4,0.04l0.55,-0.15l0.23,0.19l-0.41,0.67l0.01,0.32l0.92,1.39l0.93,1.23l0.99,0.94l0.1,0.06l8.19,2.99l1.51,0.01l-6.51,6.95l-3.14,0.11l-0.18,0.06l-2.15,1.71l-1.51,0.04l-0.22,0.1l-0.6,0.69l-1.46,-0.0l-0.93,-0.78l-0.32,-0.04l-2.29,1.05l-0.12,0.1l-0.64,0.9l-1.44,-0.17l-0.51,-0.26l-0.17,-0.03l-0.56,0.07l-0.68,-0.02l-3.1,-2.08l-0.17,-0.05l-1.62,0.0l-0.68,-0.65l0.0,-1.28l-0.21,-0.29l-1.19,-0.38l-1.42,-2.63l-0.13,-0.12l-1.05,-0.53l-0.46,-1.0l-1.27,-1.23l-0.17,-0.08l-1.08,-0.13l0.53,-0.9l1.17,-0.05l0.26,-0.17l0.37,-0.77l0.03,-0.14l-0.03,-2.23l0.7,-2.49l1.08,-0.65l0.14,-0.19l0.24,-1.0l1.03,-1.85l1.47,-1.22l0.09,-0.12l1.02,-2.51l0.36,-1.96l2.62,0.48l0.33,-0.18l0.63,-1.55Z\", \"name\": \"Ethiopia\" }, \"ZW\": { \"path\": \"M498.95,341.2l-1.16,-0.23l-0.16,0.01l-0.74,0.28l-1.11,-0.41l-1.02,-0.04l-1.52,-1.13l-0.12,-0.05l-1.79,-0.37l-0.65,-1.46l-0.01,-0.86l-0.22,-0.29l-0.99,-0.26l-2.74,-2.77l-0.77,-1.46l-0.52,-0.5l-0.72,-1.54l2.24,0.23l0.78,0.28l0.12,0.02l0.85,-0.06l0.21,-0.11l1.38,-1.66l2.11,-2.05l0.81,-0.18l0.22,-0.2l0.27,-0.8l1.29,-0.93l1.53,-0.28l0.11,0.66l0.3,0.25l2.02,-0.05l1.04,0.48l0.5,0.59l0.18,0.1l1.13,0.18l1.11,0.7l0.01,3.06l-0.49,1.82l-0.11,1.94l0.03,0.16l0.35,0.68l-0.24,1.3l-0.27,0.17l-0.12,0.15l-0.64,1.83l-2.49,2.8Z\", \"name\": \"Zimbabwe\" }, \"ES\": { \"path\": \"M398.67,172.8l0.09,-1.45l-0.06,-0.2l-0.82,-1.05l3.16,-1.96l3.01,0.54l3.33,-0.02l2.64,0.52l2.14,-0.15l3.9,0.1l0.91,1.08l0.14,0.09l4.61,1.38l0.26,-0.04l0.77,-0.55l2.66,1.29l0.17,0.03l2.59,-0.35l0.1,1.28l-2.2,1.85l-3.13,0.62l-0.23,0.23l-0.21,0.92l-1.54,1.68l-0.97,2.4l0.02,0.26l0.85,1.46l-1.27,1.14l-0.09,0.14l-0.5,1.73l-1.73,0.53l-0.15,0.1l-1.68,2.1l-3.03,0.04l-2.38,-0.05l-0.17,0.05l-1.57,1.01l-0.9,1.01l-0.96,-0.19l-0.82,-0.86l-0.69,-1.6l-0.22,-0.18l-2.14,-0.41l-0.13,-0.62l0.83,-0.97l0.39,-0.86l-0.06,-0.33l-0.73,-0.73l0.63,-1.74l-0.02,-0.25l-0.8,-1.41l0.69,-0.15l0.23,-0.27l0.09,-1.29l0.33,-0.36l0.08,-0.2l0.03,-2.16l1.03,-0.72l0.1,-0.37l-0.7,-1.5l-0.25,-0.17l-1.46,-0.11l-0.22,0.07l-0.34,0.3l-1.17,0.0l-0.55,-1.29l-0.39,-0.16l-1.02,0.44l-0.45,0.36Z\", \"name\": \"Spain\" }, \"ER\": { \"path\": \"M527.15,253.05l-0.77,-0.74l-1.01,-1.47l-1.14,-0.86l-0.62,-0.84l-0.11,-0.09l-2.18,-1.02l-0.12,-0.03l-1.61,-0.03l-0.52,-0.46l-0.31,-0.05l-1.31,0.54l-1.38,-1.06l-0.46,0.12l-0.69,1.68l-2.49,-0.46l-0.2,-0.76l1.06,-3.69l0.24,-1.65l0.66,-0.66l1.76,-0.4l0.16,-0.1l0.97,-1.13l1.24,2.55l0.68,2.34l0.09,0.14l1.4,1.27l3.39,2.4l1.37,1.43l2.14,2.34l0.94,0.6l-0.32,0.26l-0.85,-0.17Z\", \"name\": \"Eritrea\" }, \"ME\": { \"path\": \"M469.05,172.9l-0.57,-0.8l-0.1,-0.09l-0.82,-0.46l0.16,-0.33l0.35,-1.57l0.72,-0.62l0.27,-0.16l0.48,0.38l0.35,0.4l0.12,0.08l0.79,0.32l0.66,0.43l-0.43,0.62l-0.28,0.11l-0.07,-0.25l-0.53,-0.1l-1.09,1.49l-0.05,0.23l0.06,0.32Z\", \"name\": \"Montenegro\" }, \"MD\": { \"path\": \"M488.2,153.75l0.14,-0.11l1.49,-0.28l1.75,0.95l1.06,0.14l0.92,0.7l-0.15,0.9l0.15,0.31l0.8,0.46l0.33,1.2l0.09,0.14l0.72,0.66l-0.11,0.28l0.1,0.33l-0.06,0.02l-1.25,-0.08l-0.17,-0.29l-0.39,-0.12l-0.52,0.25l-0.16,0.36l0.13,0.42l-0.6,0.88l-0.43,1.03l-0.22,0.12l-0.32,-1.0l0.25,-1.34l-0.08,-1.38l-0.06,-0.17l-1.43,-1.87l-0.81,-1.36l-0.78,-0.95l-0.12,-0.09l-0.29,-0.12Z\", \"name\": \"Moldova\" }, \"MG\": { \"path\": \"M544.77,316.45l0.64,1.04l0.6,1.62l0.4,3.04l0.63,1.21l-0.22,1.07l-0.15,0.26l-0.59,-1.05l-0.52,-0.01l-0.47,0.76l-0.04,0.23l0.46,1.84l-0.19,0.92l-0.61,0.53l-0.1,0.21l-0.16,2.15l-0.97,2.98l-1.24,3.59l-1.55,4.97l-0.96,3.67l-1.08,2.93l-1.94,0.61l-2.05,1.06l-3.2,-1.53l-0.62,-1.26l-0.18,-2.39l-0.87,-2.07l-0.22,-1.8l0.4,-1.69l1.01,-0.4l0.19,-0.28l0.01,-0.79l1.15,-1.91l0.04,-0.11l0.23,-1.66l-0.03,-0.17l-0.57,-1.21l-0.46,-1.58l-0.19,-2.25l0.82,-1.36l0.33,-1.51l1.11,-0.1l1.4,-0.53l0.9,-0.45l1.03,-0.03l0.21,-0.09l1.41,-1.45l2.12,-1.65l0.75,-1.29l0.03,-0.24l-0.17,-0.56l0.53,0.15l0.32,-0.1l1.38,-1.77l0.06,-0.18l0.04,-1.44l0.54,-0.74l0.62,0.77Z\", \"name\": \"Madagascar\" }, \"MA\": { \"path\": \"M378.66,230.13l0.07,-0.75l0.93,-0.72l0.82,-1.37l0.04,-0.21l-0.14,-0.8l0.8,-1.74l1.33,-1.61l0.79,-0.4l0.14,-0.15l0.66,-1.55l0.08,-1.46l0.83,-1.52l1.6,-0.94l0.11,-0.11l1.56,-2.71l1.2,-0.99l2.24,-0.29l0.17,-0.08l1.95,-1.83l1.3,-0.77l2.09,-2.28l0.07,-0.26l-0.61,-3.34l0.92,-2.3l0.33,-1.44l1.52,-1.79l2.48,-1.27l1.86,-1.16l0.1,-0.11l1.67,-2.93l0.72,-1.59l1.54,0.01l1.43,1.14l0.21,0.06l2.33,-0.19l2.55,0.62l0.97,0.03l0.83,1.6l0.15,1.71l0.86,2.96l0.09,0.14l0.5,0.45l-0.31,0.73l-3.11,0.44l-0.16,0.07l-1.07,0.97l-1.36,0.23l-0.25,0.28l-0.1,1.85l-2.74,1.02l-0.14,0.11l-0.9,1.3l-1.93,0.69l-2.56,0.44l-4.04,2.01l-0.17,0.27l0.02,2.91l-0.08,0.0l-0.3,0.31l0.05,1.15l-1.25,0.07l-0.16,0.06l-0.73,0.55l-0.98,0.0l-0.85,-0.33l-0.15,-0.02l-2.11,0.29l-0.24,0.19l-0.76,1.95l-0.63,0.16l-0.21,0.19l-1.15,3.29l-3.42,2.81l-0.1,0.17l-0.81,3.57l-0.98,1.12l-0.3,0.85l-5.13,0.19Z\", \"name\": \"Morocco\" }, \"UZ\": { \"path\": \"M587.83,186.48l0.06,-1.46l-0.19,-0.29l-3.31,-1.24l-2.57,-1.4l-1.63,-1.38l-2.79,-1.98l-1.2,-2.98l-0.12,-0.14l-0.84,-0.54l-0.18,-0.05l-2.61,0.13l-0.76,-0.48l-0.25,-2.25l-0.17,-0.24l-3.37,-1.6l-0.32,0.04l-2.08,1.73l-2.11,1.02l-0.16,0.35l0.31,1.14l-2.14,0.03l-0.09,-10.68l6.1,-1.74l6.25,3.57l2.36,2.72l0.27,0.1l2.92,-0.44l4.17,-0.23l2.78,2.06l-0.18,2.87l0.29,0.32l0.98,0.02l0.46,2.22l0.28,0.24l3.0,0.09l0.61,1.25l0.28,0.17l0.93,-0.02l0.26,-0.16l1.06,-2.06l3.21,-2.03l1.3,-0.5l0.19,0.08l-1.75,1.62l0.05,0.48l1.85,1.12l0.27,0.02l1.65,-0.69l2.4,1.27l-2.69,1.79l-1.79,-0.27l-0.89,0.06l-0.22,-0.52l0.48,-1.26l-0.34,-0.4l-3.35,0.69l-0.22,0.18l-0.78,1.87l-1.07,1.47l-1.93,-0.13l-0.29,0.16l-0.65,1.29l0.16,0.42l1.69,0.64l0.48,1.91l-1.25,2.6l-1.64,-0.53l-1.18,-0.03Z\", \"name\": \"Uzbekistan\" }, \"MM\": { \"path\": \"M670.1,233.39l-1.46,1.11l-1.68,0.11l-0.26,0.19l-1.1,2.7l-0.95,0.42l-0.14,0.42l1.21,2.27l1.61,1.92l0.94,1.55l-0.82,1.99l-0.77,0.42l-0.13,0.39l0.64,1.35l1.62,1.97l0.26,1.32l-0.04,1.15l0.02,0.13l0.92,2.18l-1.3,2.23l-0.79,1.69l-0.1,-0.77l0.74,-1.87l-0.02,-0.26l-0.8,-1.42l0.2,-2.68l-0.06,-0.2l-0.98,-1.27l-0.8,-2.98l-0.45,-3.22l-1.11,-2.22l-0.45,-0.1l-1.64,1.28l-2.74,1.76l-1.26,-0.2l-1.27,-0.49l0.79,-2.93l0.0,-0.14l-0.52,-2.42l-1.93,-2.97l0.26,-0.8l-0.22,-0.39l-1.37,-0.31l-1.65,-1.98l-0.12,-1.5l0.41,0.19l0.42,-0.26l0.05,-1.7l1.08,-0.54l0.16,-0.34l-0.24,-1.0l0.5,-0.79l0.05,-0.15l0.08,-2.35l1.58,0.49l0.36,-0.15l1.12,-2.19l0.15,-1.34l1.35,-2.18l0.04,-0.17l-0.07,-1.35l2.97,-1.71l1.67,0.45l0.38,-0.33l-0.18,-1.46l0.7,-0.4l0.15,-0.32l-0.13,-0.72l0.94,-0.13l0.74,1.41l0.11,0.12l0.95,0.56l0.07,1.89l-0.09,2.08l-2.28,2.15l-0.09,0.19l-0.3,3.15l0.35,0.32l2.37,-0.39l0.53,2.17l0.2,0.21l1.3,0.42l-0.63,1.9l0.14,0.36l1.86,0.99l1.1,0.49l0.24,0.0l1.45,-0.6l0.04,0.51l-2.01,1.6l-0.56,0.96l-1.34,0.56Z\", \"name\": \"Myanmar\" }, \"ML\": { \"path\": \"M390.79,248.2l0.67,-0.37l0.14,-0.18l0.36,-1.31l0.51,-0.04l1.68,0.69l0.21,0.0l1.34,-0.48l0.89,0.16l0.3,-0.13l0.29,-0.44l9.89,-0.04l0.29,-0.21l0.56,-1.8l-0.11,-0.33l-0.33,-0.24l-2.37,-22.1l3.41,-0.04l8.37,5.73l8.38,5.68l0.56,1.15l0.14,0.14l1.56,0.75l0.99,0.36l0.03,1.45l0.33,0.29l2.45,-0.22l0.01,5.52l-1.3,1.64l-0.06,0.15l-0.18,1.37l-1.99,0.36l-3.4,0.22l-0.19,0.09l-0.85,0.83l-1.48,0.09l-1.49,0.01l-0.54,-0.43l-0.26,-0.05l-1.38,0.36l-2.39,1.08l-0.13,0.12l-0.44,0.73l-1.88,1.11l-0.11,0.12l-0.3,0.57l-0.86,0.42l-1.1,-0.31l-0.28,0.07l-0.69,0.62l-0.09,0.16l-0.35,1.66l-1.93,2.04l-0.08,0.23l0.05,0.76l-0.63,0.99l-0.04,0.19l0.14,1.23l-0.81,0.29l-0.32,0.17l-0.27,-0.75l-0.39,-0.18l-0.65,0.26l-0.36,-0.04l-0.29,0.14l-0.37,0.6l-1.69,-0.02l-0.63,-0.34l-0.32,0.02l-0.12,0.09l-0.47,-0.45l0.1,-0.6l-0.09,-0.27l-0.31,-0.3l-0.33,-0.05l-0.05,0.02l0.02,-0.21l0.46,-0.59l-0.02,-0.39l-0.99,-1.02l-0.34,-0.74l-0.56,-0.56l-0.17,-0.09l-0.5,-0.07l-0.19,0.04l-0.58,0.35l-0.79,0.33l-0.65,0.51l-0.85,-0.16l-0.63,-0.59l-0.14,-0.07l-0.41,-0.08l-0.2,0.03l-0.59,0.31l-0.07,0.0l-0.1,-0.63l0.11,-0.85l-0.21,-0.98l-0.11,-0.17l-0.86,-0.66l-0.45,-1.34l-0.1,-1.36Z\", \"name\": \"Mali\" }, \"MN\": { \"path\": \"M641.06,150.59l2.41,-0.53l4.76,-2.8l3.67,-1.49l2.06,0.96l0.12,0.03l2.5,0.05l1.59,1.45l0.19,0.08l2.47,0.12l3.59,0.81l0.27,-0.07l2.43,-2.28l0.06,-0.36l-0.93,-1.77l2.33,-3.1l2.66,1.3l2.26,0.39l2.75,0.8l0.44,2.3l0.19,0.22l3.56,1.38l0.18,0.01l2.35,-0.6l3.1,-0.42l2.4,0.41l2.37,1.52l1.49,1.63l0.23,0.1l2.29,-0.03l3.13,0.52l0.15,-0.01l2.28,-0.79l3.27,-0.53l0.11,-0.04l3.56,-2.23l1.31,0.31l1.26,1.05l0.22,0.07l2.45,-0.22l-0.98,1.96l-1.77,3.21l-0.01,0.28l0.64,1.31l0.35,0.16l1.35,-0.38l2.4,0.48l0.22,-0.04l1.78,-1.09l1.82,0.92l2.11,2.07l-0.17,0.68l-1.79,-0.31l-3.74,0.45l-1.85,0.96l-1.78,2.01l-3.74,1.18l-2.46,1.61l-2.45,-0.6l-1.42,-0.28l-0.31,0.13l-1.31,1.99l0.0,0.33l0.78,1.15l0.3,0.74l-1.58,0.93l-1.75,1.59l-2.83,1.03l-3.77,0.12l-4.05,1.05l-2.81,1.54l-0.95,-0.8l-0.19,-0.07l-2.96,0.0l-3.64,-1.8l-2.55,-0.48l-3.38,0.41l-5.13,-0.67l-2.66,0.06l-1.35,-1.65l-1.12,-2.78l-0.21,-0.18l-1.5,-0.33l-2.98,-1.89l-0.12,-0.04l-3.37,-0.43l-2.84,-0.51l-0.75,-1.13l0.93,-3.54l-0.04,-0.24l-1.73,-2.55l-0.15,-0.12l-3.52,-1.18l-1.99,-1.61l-0.54,-1.85Z\", \"name\": \"Mongolia\" }, \"MK\": { \"path\": \"M472.73,173.87l0.08,0.01l0.32,-0.25l0.08,-0.44l1.29,-0.41l1.37,-0.28l1.03,-0.04l1.06,0.82l0.14,1.59l-0.22,0.04l-0.17,0.11l-0.32,0.4l-1.2,-0.05l-0.18,0.05l-0.9,0.61l-1.45,0.23l-0.85,-0.59l-0.3,-1.09l0.22,-0.71Z\", \"name\": \"Macedonia\" }, \"MW\": { \"path\": \"M507.18,313.84l-0.67,1.85l-0.01,0.16l0.7,3.31l0.31,0.24l0.75,-0.03l0.78,0.71l0.99,1.75l0.2,3.03l-0.91,0.45l-0.14,0.15l-0.59,1.38l-1.24,-1.21l-0.17,-1.62l0.49,-1.12l0.02,-0.16l-0.15,-1.03l-0.13,-0.21l-0.99,-0.65l-0.26,-0.03l-0.53,0.18l-1.31,-1.12l-1.15,-0.59l0.66,-2.06l0.75,-0.84l0.07,-0.27l-0.47,-2.04l0.48,-1.94l0.4,-0.65l0.03,-0.24l-0.64,-2.15l-0.08,-0.13l-0.44,-0.42l1.34,0.26l1.25,1.73l0.67,3.3Z\", \"name\": \"Malawi\" }, \"MR\": { \"path\": \"M390.54,247.66l-1.48,-1.58l-1.51,-1.88l-0.12,-0.09l-1.64,-0.67l-1.17,-0.74l-0.17,-0.05l-1.4,0.03l-0.12,0.03l-1.14,0.52l-1.15,-0.21l-0.26,0.08l-0.44,0.43l-0.11,-0.72l0.68,-1.29l0.31,-2.43l-0.28,-2.63l-0.29,-1.27l0.24,-1.24l-0.03,-0.2l-0.65,-1.24l-1.19,-1.05l0.32,-0.51l9.64,0.02l0.3,-0.34l-0.46,-3.71l0.51,-1.12l2.17,-0.22l0.27,-0.3l-0.08,-6.5l7.91,0.13l0.31,-0.3l0.01,-3.5l8.17,5.63l-2.89,0.04l-0.29,0.33l2.42,22.56l0.12,0.21l0.26,0.19l-0.43,1.38l-9.83,0.04l-0.25,0.13l-0.27,0.41l-0.77,-0.14l-0.15,0.01l-1.3,0.47l-1.64,-0.67l-0.14,-0.02l-0.79,0.06l-0.27,0.22l-0.39,1.39l-0.53,0.29Z\", \"name\": \"Mauritania\" }, \"UG\": { \"path\": \"M500.74,287.17l-2.84,-0.02l-0.92,0.32l-1.37,0.71l-0.29,-0.12l0.02,-1.6l0.54,-0.89l0.04,-0.13l0.14,-1.96l0.49,-1.09l0.91,-1.24l0.97,-0.68l0.8,-0.89l-0.13,-0.49l-0.79,-0.27l0.13,-2.55l0.78,-0.52l1.45,0.51l0.18,0.01l1.97,-0.57l1.72,0.01l0.18,-0.06l1.29,-0.97l0.98,1.44l0.29,1.24l1.05,2.75l-0.84,1.68l-1.94,2.66l-0.06,0.18l0.02,2.36l-4.8,0.18Z\", \"name\": \"Uganda\" }, \"MY\": { \"path\": \"M717.6,273.52l-1.51,0.7l-2.13,-0.41l-2.88,-0.0l-0.29,0.21l-0.84,2.77l-0.9,0.82l-0.08,0.12l-1.23,3.34l-1.81,0.47l-2.29,-0.68l-0.14,-0.01l-1.2,0.22l-0.14,0.07l-1.36,1.18l-1.47,-0.17l-0.12,0.01l-1.46,0.46l-1.51,-1.25l-0.24,-0.97l1.26,0.59l0.2,0.02l1.93,-0.47l0.22,-0.22l0.47,-1.98l0.9,-0.4l2.97,-0.54l0.17,-0.09l1.8,-1.98l1.02,-1.32l0.9,1.03l0.48,-0.04l0.43,-0.7l1.02,0.07l0.32,-0.27l0.25,-2.72l1.84,-1.67l1.23,-1.89l0.73,-0.01l1.12,1.11l0.1,0.99l0.18,0.24l1.66,0.71l1.85,0.67l-0.09,0.51l-1.45,0.11l-0.26,0.4l0.35,0.97ZM673.78,269.53l0.17,1.14l0.35,0.25l1.65,-0.3l0.18,-0.11l0.68,-0.86l0.31,0.13l1.41,1.45l0.99,1.59l0.13,1.57l-0.26,1.09l0.0,0.15l0.24,0.84l0.18,1.46l0.11,0.2l0.82,0.64l0.92,2.08l-0.03,0.52l-1.4,0.13l-2.29,-1.79l-2.86,-1.92l-0.27,-1.16l-0.07,-0.13l-1.39,-1.61l-0.33,-1.99l-0.05,-0.12l-0.84,-1.27l0.26,-1.72l-0.03,-0.18l-0.45,-0.87l0.13,-0.13l1.71,0.92Z\", \"name\": \"Malaysia\" }, \"MX\": { \"path\": \"M133.41,213.83l0.61,0.09l0.27,-0.09l0.93,-1.01l0.08,-0.18l0.09,-1.22l-0.09,-0.23l-1.93,-1.94l-1.46,-0.77l-2.96,-5.62l-0.86,-2.1l2.44,-0.18l2.68,-0.25l-0.03,0.08l0.17,0.4l3.79,1.35l5.81,1.97l6.96,-0.02l0.3,-0.3l0.0,-0.84l3.91,0.0l0.87,0.93l1.27,0.87l1.44,1.17l0.79,1.37l0.62,1.49l0.12,0.14l1.35,0.85l2.08,0.82l0.35,-0.1l1.49,-2.04l1.81,-0.05l1.63,1.01l1.21,1.8l0.86,1.58l1.47,1.55l0.53,1.82l0.73,1.32l0.14,0.13l1.98,0.84l1.78,0.59l0.61,-0.03l-0.78,1.89l-0.45,1.96l-0.19,3.58l-0.24,1.27l0.01,0.14l0.43,1.43l0.78,1.31l0.49,1.98l0.06,0.12l1.63,1.9l0.61,1.51l0.98,1.28l0.16,0.11l2.58,0.67l0.98,1.02l0.31,0.08l2.17,-0.71l1.91,-0.26l1.87,-0.47l1.67,-0.49l1.59,-1.06l0.11,-0.14l0.6,-1.52l0.22,-2.21l0.35,-0.62l1.58,-0.64l2.59,-0.59l2.18,0.09l1.43,-0.2l0.39,0.36l-0.07,1.02l-1.28,1.48l-0.65,1.68l0.07,0.32l0.33,0.32l-0.79,2.49l-0.28,-0.3l-0.24,-0.09l-1.0,0.08l-0.24,0.15l-0.74,1.28l-0.19,-0.13l-0.28,-0.03l-0.3,0.12l-0.19,0.29l0.0,0.06l-4.34,-0.02l-0.3,0.3l-0.0,1.16l-0.83,0.0l-0.28,0.19l0.08,0.33l0.93,0.86l0.9,0.58l0.24,0.48l0.16,0.15l0.2,0.08l-0.03,0.38l-2.94,0.01l-0.26,0.15l-1.21,2.09l0.02,0.33l0.25,0.33l-0.21,0.44l-0.04,0.22l-2.42,-2.35l-1.36,-0.87l-2.04,-0.67l-0.13,-0.01l-1.4,0.19l-2.07,0.98l-1.14,0.23l-1.72,-0.66l-1.85,-0.48l-2.31,-1.16l-1.92,-0.38l-2.79,-1.18l-2.04,-1.2l-0.6,-0.66l-0.19,-0.1l-1.37,-0.15l-2.45,-0.78l-1.07,-1.18l-2.63,-1.44l-1.2,-1.56l-0.44,-0.93l0.5,-0.15l0.2,-0.39l-0.2,-0.58l0.46,-0.55l0.07,-0.19l0.01,-0.91l-0.06,-0.18l-0.81,-1.13l-0.25,-1.08l-0.86,-1.36l-2.21,-2.63l-2.53,-2.09l-1.2,-1.63l-0.11,-0.09l-2.08,-1.06l-0.34,-0.48l0.35,-1.53l-0.16,-0.34l-1.24,-0.61l-1.39,-1.23l-0.6,-1.81l-0.24,-0.2l-1.25,-0.2l-1.38,-1.35l-1.11,-1.25l-0.1,-0.76l-0.05,-0.13l-1.33,-2.04l-0.85,-2.02l0.04,-0.99l-0.14,-0.27l-1.81,-1.1l-0.2,-0.04l-0.74,0.11l-1.34,-0.72l-0.42,0.16l-0.4,1.12l-0.0,0.19l0.41,1.3l0.24,2.04l0.06,0.15l0.88,1.16l1.84,1.86l0.4,0.61l0.12,0.1l0.27,0.14l0.29,0.82l0.31,0.2l0.2,-0.02l0.43,1.51l0.09,0.14l0.72,0.65l0.51,0.91l1.58,1.4l0.8,2.42l0.77,1.23l0.66,1.19l0.13,1.34l0.28,0.27l1.08,0.08l0.92,1.1l0.83,1.08l-0.03,0.24l-0.88,0.81l-0.13,-0.0l-0.59,-1.42l-0.07,-0.11l-1.67,-1.53l-1.81,-1.28l-1.15,-0.61l0.07,-1.85l-0.38,-1.45l-0.12,-0.17l-2.91,-2.03l-0.39,0.04l-0.11,0.11l-0.42,-0.46l-0.11,-0.08l-1.49,-0.63l-1.09,-1.16Z\", \"name\": \"Mexico\" }, \"VU\": { \"path\": \"M839.92,325.66l0.78,0.73l-0.18,0.07l-0.6,-0.8ZM839.13,322.74l0.27,1.36l-0.13,-0.06l-0.21,-0.02l-0.29,0.08l-0.22,-0.43l-0.03,-1.32l0.61,0.4Z\", \"name\": \"Vanuatu\" }, \"FR\": { \"path\": \"M444.58,172.63l-0.68,1.92l-0.72,-0.38l-0.51,-1.79l0.43,-0.95l1.15,-0.83l0.33,2.04ZM429.71,147.03l1.77,1.57l0.26,0.07l1.16,-0.23l2.12,1.44l0.56,0.28l0.16,0.03l0.61,-0.06l1.09,0.78l0.13,0.05l3.18,0.53l-1.09,1.94l-0.3,2.16l-0.48,0.38l-1.0,-0.26l-0.37,0.32l0.07,0.66l-1.73,1.68l-0.09,0.21l-0.04,1.42l0.41,0.29l0.96,-0.4l0.67,1.07l-0.09,0.78l0.04,0.19l0.61,0.97l-0.71,0.78l-0.07,0.28l0.65,2.39l0.21,0.21l1.09,0.31l-0.2,0.95l-2.08,1.58l-4.81,-0.8l-0.13,0.01l-3.65,0.99l-0.22,0.24l-0.25,1.6l-2.59,0.35l-2.74,-1.33l-0.31,0.03l-0.79,0.57l-4.38,-1.31l-0.79,-0.94l1.16,-1.64l0.05,-0.15l0.48,-6.17l-0.06,-0.21l-2.58,-3.3l-1.89,-1.65l-0.11,-0.06l-3.64,-1.17l-0.2,-1.88l2.92,-0.63l4.14,0.82l0.35,-0.36l-0.65,-3.0l1.77,1.05l0.27,0.02l5.83,-2.54l0.17,-0.19l0.71,-2.54l1.75,-0.53l0.27,0.88l0.27,0.21l1.04,0.05l1.08,1.23ZM289.1,278.45l-0.85,0.84l-0.88,0.13l-0.25,-0.51l-0.21,-0.16l-0.56,-0.1l-0.25,0.07l-0.63,0.55l-0.62,-0.29l0.5,-0.88l0.21,-1.11l0.42,-1.05l-0.03,-0.28l-0.93,-1.42l-0.18,-1.54l1.13,-1.87l2.42,0.78l2.55,2.04l0.33,0.81l-1.4,2.16l-0.77,1.84Z\", \"name\": \"France\" }, \"FI\": { \"path\": \"M492.26,76.42l-0.38,3.12l0.12,0.28l3.6,2.69l-2.14,2.96l-0.01,0.33l2.83,4.61l-1.61,3.36l0.03,0.31l2.15,2.87l-0.96,2.44l0.1,0.35l3.51,2.55l-0.81,1.72l-2.28,2.19l-5.28,4.79l-4.51,0.31l-4.39,1.37l-3.87,0.75l-1.34,-1.89l-0.11,-0.09l-2.23,-1.14l0.53,-3.54l-0.01,-0.14l-1.17,-3.37l1.12,-2.13l2.23,-2.44l5.69,-4.33l1.65,-0.84l0.16,-0.31l-0.26,-1.73l-0.15,-0.22l-3.4,-1.91l-0.77,-1.47l-0.07,-6.45l-0.12,-0.24l-3.91,-2.94l-3.0,-1.92l0.97,-0.76l2.6,2.17l0.21,0.07l3.2,-0.21l2.63,1.03l0.3,-0.05l2.39,-1.94l0.09,-0.13l1.18,-3.12l3.63,-1.42l2.87,1.59l-0.98,2.87Z\", \"name\": \"Finland\" }, \"FJ\": { \"path\": \"M869.98,327.07l-1.31,0.44l-0.14,-0.41l0.96,-0.41l0.85,-0.17l1.43,-0.78l-0.16,0.65l-1.64,0.67ZM867.58,329.12l0.54,0.47l-0.31,1.0l-1.32,0.3l-1.13,-0.26l-0.17,-0.78l0.72,-0.66l0.98,0.27l0.25,-0.04l0.43,-0.29Z\", \"name\": \"Fiji\" }, \"FK\": { \"path\": \"M268.15,427.89l2.6,-1.73l1.98,0.77l0.31,-0.05l1.32,-1.17l1.58,1.18l-0.54,0.84l-3.1,0.92l-1.0,-1.04l-0.39,-0.04l-1.9,1.35l-0.86,-1.04Z\", \"name\": \"Falkland Islands\" }, \"NI\": { \"path\": \"M202.1,252.6l0.23,-0.0l0.12,-0.11l0.68,-0.09l0.22,-0.15l0.23,-0.43l0.2,-0.01l0.28,-0.31l-0.04,-0.97l0.29,-0.03l0.5,0.02l0.25,-0.11l0.37,-0.46l0.51,0.35l0.4,-0.06l0.23,-0.28l0.45,-0.29l0.87,-0.7l0.11,-0.21l0.02,-0.26l0.23,-0.12l0.25,-0.48l0.29,0.27l0.14,0.07l0.5,0.12l0.22,-0.03l0.48,-0.28l0.66,-0.02l0.87,-0.33l0.36,-0.32l0.21,0.01l-0.11,0.48l0.0,0.14l0.22,0.8l-0.54,0.85l-0.27,1.03l-0.09,1.18l0.14,0.72l0.05,0.95l-0.24,0.15l-0.13,0.19l-0.23,1.09l0.0,0.14l0.14,0.53l-0.42,0.53l-0.06,0.24l0.12,0.69l0.08,0.15l0.18,0.19l-0.26,0.23l-0.49,-0.11l-0.35,-0.44l-0.16,-0.1l-0.79,-0.21l-0.23,0.03l-0.45,0.26l-1.51,-0.62l-0.31,0.05l-0.17,0.15l-1.81,-1.62l-0.6,-0.9l-1.04,-0.79l-0.77,-0.71Z\", \"name\": \"Nicaragua\" }, \"NL\": { \"path\": \"M436.22,136.65l1.82,0.08l0.36,0.89l-0.6,2.96l-0.53,1.06l-1.32,0.0l-0.3,0.34l0.35,2.89l-0.83,-0.47l-1.56,-1.43l-0.29,-0.07l-2.26,0.67l-1.02,-0.15l0.68,-0.48l0.1,-0.12l2.14,-4.84l3.25,-1.35Z\", \"name\": \"Netherlands\" }, \"NO\": { \"path\": \"M491.45,67.31l7.06,3.0l-2.52,0.94l-0.11,0.49l2.43,2.49l-3.82,1.59l-1.48,0.3l0.89,-2.61l-0.14,-0.36l-3.21,-1.78l-0.25,-0.02l-3.89,1.52l-0.17,0.17l-1.2,3.17l-2.19,1.78l-2.53,-0.99l-0.13,-0.02l-3.15,0.21l-2.69,-2.25l-0.38,-0.01l-1.43,1.11l-1.47,0.17l-0.26,0.26l-0.33,2.57l-4.42,-0.65l-0.33,0.22l-0.6,2.19l-2.17,-0.01l-0.27,0.16l-4.15,7.68l-3.88,5.76l-0.0,0.33l0.81,1.23l-0.7,1.27l-2.3,-0.06l-0.28,0.18l-1.63,3.72l-0.02,0.13l0.15,5.17l0.07,0.18l1.51,1.84l-0.79,4.24l-2.04,2.5l-0.92,1.75l-1.39,-1.88l-0.44,-0.05l-4.89,4.21l-3.16,0.81l-3.24,-1.74l-0.86,-3.82l-0.78,-8.6l2.18,-2.36l6.56,-3.28l5.0,-4.16l4.63,-5.74l5.99,-8.09l4.17,-3.23l6.84,-5.49l5.39,-1.92l4.06,0.24l0.23,-0.09l3.72,-3.67l4.51,0.19l4.4,-0.89ZM484.58,19.95l4.42,1.82l-3.25,2.68l-7.14,0.65l-7.16,-0.91l-0.39,-1.37l-0.28,-0.22l-3.48,-0.1l-2.25,-2.15l7.09,-1.48l3.55,1.36l0.28,-0.03l2.42,-1.66l6.18,1.41ZM481.99,33.92l-4.73,1.85l-3.76,-1.06l1.27,-1.02l0.04,-0.43l-1.18,-1.35l4.46,-0.94l0.89,1.83l0.17,0.15l2.83,0.96ZM466.5,23.95l7.64,3.87l-5.63,1.94l-0.19,0.19l-1.35,3.88l-2.08,0.96l-0.16,0.19l-1.14,4.18l-2.71,0.18l-4.94,-2.95l1.95,-1.63l-0.08,-0.51l-3.7,-1.54l-4.79,-4.54l-1.78,-4.01l6.29,-1.88l1.25,1.81l0.25,0.13l3.57,-0.08l0.26,-0.17l0.87,-1.79l3.41,-0.18l3.08,1.94Z\", \"name\": \"Norway\" }, \"NA\": { \"path\": \"M461.88,357.98l-1.61,-1.77l-0.94,-1.9l-0.54,-2.58l-0.62,-1.95l-0.83,-4.05l-0.06,-3.13l-0.33,-1.5l-0.07,-0.14l-0.95,-1.06l-1.27,-2.12l-1.3,-3.1l-0.59,-1.71l-1.98,-2.46l-0.13,-1.67l0.99,-0.4l1.44,-0.42l1.48,0.07l1.42,1.11l0.31,0.03l0.32,-0.15l9.99,-0.11l1.66,1.18l0.16,0.06l6.06,0.37l4.69,-1.06l2.01,-0.57l1.5,0.14l0.63,0.37l-1.0,0.41l-0.7,0.01l-0.16,0.05l-1.38,0.88l-0.79,-0.88l-0.29,-0.09l-3.83,0.9l-1.84,0.08l-0.29,0.3l-0.07,8.99l-2.18,0.08l-0.29,0.3l-0.0,17.47l-2.04,1.27l-1.21,0.18l-1.51,-0.49l-0.99,-0.18l-0.36,-1.0l-0.1,-0.14l-0.99,-0.74l-0.4,0.04l-0.98,1.09Z\", \"name\": \"Namibia\" }, \"NC\": { \"path\": \"M835.87,338.68l2.06,1.63l1.01,0.94l-0.49,0.32l-1.21,-0.62l-1.76,-1.16l-1.58,-1.36l-1.61,-1.79l-0.16,-0.41l0.54,0.02l1.32,0.83l1.08,0.87l0.79,0.73Z\", \"name\": \"New Caledonia\" }, \"NE\": { \"path\": \"M426.67,254.17l0.03,-1.04l-0.24,-0.3l-2.66,-0.53l-0.06,-1.0l-0.07,-0.17l-1.37,-1.62l-0.3,-1.04l0.15,-0.94l1.37,-0.09l0.19,-0.09l0.85,-0.83l3.34,-0.22l2.22,-0.41l0.24,-0.26l0.2,-1.5l1.32,-1.65l0.07,-0.19l-0.01,-5.74l3.4,-1.13l7.24,-5.12l8.46,-4.95l3.76,1.08l1.35,1.39l0.36,0.05l1.39,-0.77l0.55,3.66l0.12,0.2l0.82,0.6l0.03,0.69l0.1,0.21l0.87,0.74l-0.47,0.99l-0.96,5.26l-0.13,3.25l-3.08,2.34l-0.1,0.15l-1.08,3.37l0.08,0.31l0.94,0.86l-0.01,1.51l0.29,0.3l1.25,0.05l-0.14,0.66l-0.51,0.11l-0.24,0.26l-0.06,0.57l-0.04,0.0l-1.59,-2.62l-0.21,-0.14l-0.59,-0.1l-0.23,0.05l-1.83,1.33l-1.79,-0.68l-1.42,-0.17l-0.17,0.03l-0.65,0.32l-1.39,-0.07l-0.19,0.06l-1.4,1.03l-1.12,0.05l-2.97,-1.29l-0.26,0.01l-1.12,0.59l-1.08,-0.04l-0.85,-0.88l-0.11,-0.07l-2.51,-0.95l-0.14,-0.02l-2.69,0.3l-0.16,0.07l-0.65,0.55l-0.1,0.16l-0.34,1.41l-0.69,0.98l-0.05,0.15l-0.13,1.72l-1.47,-1.13l-0.18,-0.06l-0.9,0.01l-0.2,0.08l-0.32,0.28Z\", \"name\": \"Niger\" }, \"NG\": { \"path\": \"M442.0,272.7l-2.4,0.83l-0.88,-0.12l-0.19,0.04l-0.89,0.52l-1.78,-0.05l-1.23,-1.44l-0.88,-1.87l-1.77,-1.66l-0.21,-0.08l-3.78,0.03l0.13,-3.75l-0.06,-1.58l0.44,-1.47l0.74,-0.75l1.21,-1.56l0.04,-0.29l-0.22,-0.56l0.44,-0.9l0.01,-0.24l-0.54,-1.44l0.26,-2.97l0.72,-1.06l0.33,-1.37l0.51,-0.43l2.53,-0.28l2.38,0.9l0.89,0.91l0.2,0.09l1.28,0.04l0.15,-0.03l1.06,-0.56l2.9,1.26l0.13,0.02l1.28,-0.06l0.16,-0.06l1.39,-1.02l1.36,0.07l0.15,-0.03l0.64,-0.32l1.22,0.13l1.9,0.73l0.28,-0.04l1.86,-1.35l0.33,0.06l1.62,2.67l0.29,0.14l0.32,-0.04l0.73,0.74l-0.19,0.37l-0.12,0.74l-2.03,1.89l-0.07,0.11l-0.66,1.62l-0.35,1.28l-0.48,0.51l-0.07,0.12l-0.48,1.67l-1.26,0.98l-0.1,0.15l-0.38,1.24l-0.58,1.07l-0.2,0.91l-1.43,0.7l-1.26,-0.93l-0.19,-0.06l-0.95,0.04l-0.2,0.09l-1.41,1.39l-0.61,0.02l-0.26,0.17l-1.19,2.42l-0.61,1.67Z\", \"name\": \"Nigeria\" }, \"NZ\": { \"path\": \"M857.9,379.62l1.85,3.1l0.33,0.14l0.22,-0.28l0.04,-1.41l0.57,0.4l0.35,2.06l0.17,0.22l2.02,0.94l1.78,0.26l0.22,-0.06l1.31,-1.01l0.84,0.22l-0.53,2.27l-0.67,1.5l-1.71,-0.05l-0.25,0.12l-0.67,0.89l-0.05,0.23l0.21,1.15l-0.31,0.46l-2.15,3.57l-1.6,0.99l-0.28,-0.51l-0.15,-0.13l-0.72,-0.3l1.27,-2.15l0.01,-0.29l-0.82,-1.63l-0.15,-0.14l-2.5,-1.09l0.05,-0.69l1.67,-0.94l0.15,-0.21l0.42,-2.24l-0.11,-1.95l-0.03,-0.12l-0.97,-1.85l0.05,-0.41l-0.09,-0.25l-1.18,-1.17l-1.94,-2.49l-0.86,-1.64l0.38,-0.09l1.24,1.43l0.12,0.08l1.81,0.68l0.67,2.39ZM853.93,393.55l0.57,1.24l0.44,0.12l1.51,-1.03l0.52,0.91l0.0,1.09l-0.88,1.31l-1.62,2.2l-1.26,1.2l-0.05,0.38l0.64,1.02l-1.4,0.03l-0.14,0.04l-2.14,1.16l-0.14,0.17l-0.67,2.0l-1.38,3.06l-3.07,2.19l-2.12,-0.06l-1.55,-0.99l-0.14,-0.05l-2.53,-0.2l-0.31,-0.84l1.25,-2.15l3.07,-2.97l1.62,-0.59l1.81,-1.17l2.18,-1.63l1.55,-1.65l1.08,-2.18l0.9,-0.72l0.11,-0.17l0.35,-1.56l1.37,-1.07l0.4,0.91Z\", \"name\": \"New Zealand\" }, \"NP\": { \"path\": \"M641.26,213.53l-0.14,0.95l0.32,1.64l-0.21,0.78l-1.83,0.04l-2.98,-0.62l-1.86,-0.25l-1.37,-1.3l-0.18,-0.08l-3.38,-0.34l-3.21,-1.49l-2.38,-1.34l-2.16,-0.92l0.84,-2.2l1.51,-1.18l0.89,-0.57l1.83,0.77l2.5,1.76l1.39,0.41l0.78,1.21l0.17,0.13l1.91,0.53l2.0,1.17l2.92,0.66l2.63,0.24Z\", \"name\": \"Nepal\" }, \"CI\": { \"path\": \"M413.53,272.08l-0.83,0.02l-1.79,-0.49l-1.64,0.03l-3.04,0.46l-1.73,0.72l-2.4,0.89l-0.12,-0.02l0.16,-1.7l0.19,-0.25l0.06,-0.2l-0.08,-0.99l-0.09,-0.19l-1.06,-1.05l-0.15,-0.08l-0.71,-0.15l-0.51,-0.48l0.45,-0.92l0.02,-0.19l-0.24,-1.16l0.07,-0.43l0.14,-0.0l0.3,-0.26l0.15,-1.1l-0.02,-0.15l-0.13,-0.34l0.09,-0.13l0.83,-0.27l0.19,-0.37l-0.62,-2.02l-0.55,-1.0l0.14,-0.59l0.35,-0.14l0.24,-0.16l0.53,0.29l0.14,0.04l1.93,0.02l0.26,-0.14l0.36,-0.58l0.39,0.01l0.43,-0.17l0.28,0.79l0.43,0.16l0.56,-0.31l0.89,-0.32l0.92,0.45l0.39,0.75l0.14,0.13l1.13,0.53l0.3,-0.03l0.81,-0.59l1.02,-0.08l1.49,0.57l0.62,3.33l-1.03,2.09l-0.65,2.84l0.02,0.2l1.05,2.08l-0.07,0.64Z\", \"name\": \"Ivory Coast\" }, \"CH\": { \"path\": \"M444.71,156.27l0.05,0.3l-0.34,0.69l0.13,0.4l1.13,0.58l1.07,0.1l-0.12,0.81l-0.87,0.42l-1.75,-0.37l-0.34,0.18l-0.47,1.1l-0.86,0.07l-0.33,-0.38l-0.41,-0.04l-1.34,1.01l-1.02,0.13l-0.93,-0.58l-0.82,-1.32l-0.37,-0.12l-0.77,0.32l0.02,-0.84l1.74,-1.69l0.09,-0.25l-0.04,-0.38l0.73,0.19l0.26,-0.06l0.6,-0.48l2.02,0.02l0.24,-0.12l0.38,-0.51l2.31,0.84Z\", \"name\": \"Switzerland\" }, \"CO\": { \"path\": \"M232.24,284.95l-0.94,-0.52l-1.22,-0.82l-0.31,-0.01l-0.62,0.35l-1.88,-0.31l-0.54,-0.95l-0.29,-0.15l-0.37,0.03l-2.34,-1.33l-0.15,-0.35l0.57,-0.11l0.24,-0.32l-0.1,-1.15l0.46,-0.71l1.11,-0.15l0.21,-0.13l1.05,-1.57l0.95,-1.31l-0.08,-0.43l-0.73,-0.47l0.4,-1.24l0.01,-0.16l-0.53,-2.15l0.44,-0.54l0.06,-0.24l-0.4,-2.13l-0.06,-0.13l-0.93,-1.22l0.21,-0.8l0.52,0.12l0.32,-0.13l0.47,-0.75l0.03,-0.27l-0.52,-1.32l0.09,-0.11l1.14,0.07l0.22,-0.08l1.82,-1.71l0.96,-0.25l0.22,-0.28l0.02,-0.81l0.43,-2.01l1.28,-1.04l1.48,-0.05l0.27,-0.19l0.12,-0.31l1.73,0.19l0.2,-0.05l1.96,-1.28l0.97,-0.56l1.16,-1.16l0.64,0.11l0.43,0.44l-0.31,0.55l-1.49,0.39l-0.19,0.16l-0.6,1.2l-0.97,0.74l-0.73,0.94l-0.06,0.13l-0.3,1.76l-0.68,1.44l0.23,0.43l1.1,0.14l0.27,0.97l0.08,0.13l0.49,0.49l0.17,0.85l-0.27,0.86l-0.01,0.14l0.09,0.53l0.2,0.23l0.52,0.18l0.54,0.79l0.27,0.13l3.18,-0.24l1.31,0.29l1.7,2.08l0.31,0.1l0.96,-0.26l1.75,0.13l1.41,-0.27l0.56,0.27l-0.36,1.07l-0.54,0.81l-0.05,0.13l-0.2,1.8l0.51,1.79l0.07,0.12l0.65,0.68l0.05,0.32l-1.16,1.14l0.05,0.47l0.86,0.52l0.6,0.79l0.31,1.01l-0.7,-0.81l-0.44,-0.01l-0.74,0.77l-4.75,-0.05l-0.3,0.31l0.03,1.57l0.25,0.29l1.2,0.21l-0.02,0.24l-0.1,-0.05l-0.22,-0.02l-1.41,0.41l-0.22,0.29l-0.01,1.82l0.11,0.23l1.04,0.85l0.35,1.3l-0.06,1.02l-1.02,6.26l-0.84,-0.89l-0.19,-0.09l-0.25,-0.02l1.35,-2.13l-0.1,-0.42l-1.92,-1.17l-0.2,-0.04l-1.41,0.2l-0.82,-0.39l-0.26,0.0l-1.29,0.62l-1.63,-0.27l-1.4,-2.5l-0.12,-0.12l-1.1,-0.61l-0.83,-1.2l-1.67,-1.19l-0.27,-0.04l-0.54,0.19Z\", \"name\": \"Colombia\" }, \"CN\": { \"path\": \"M740.32,148.94l0.22,0.21l4.3,1.03l2.84,2.2l0.99,2.92l0.28,0.2l3.8,0.0l0.15,-0.04l2.13,-1.24l3.5,-0.8l-1.05,2.29l-0.95,1.13l-0.06,0.12l-0.85,3.41l-1.56,2.81l-2.83,-0.51l-0.19,0.03l-2.15,1.09l-0.15,0.34l0.65,2.59l-0.33,3.3l-1.03,0.07l-0.28,0.3l0.01,0.75l-1.09,-1.2l-0.48,0.05l-0.94,1.6l-3.76,1.26l-0.2,0.36l0.29,1.19l-1.67,-0.08l-1.11,-0.88l-0.42,0.05l-1.69,2.08l-2.71,1.57l-2.04,1.88l-3.42,0.84l-0.11,0.05l-1.8,1.34l-1.54,0.46l0.52,-0.53l0.06,-0.33l-0.44,-0.96l1.84,-1.84l0.02,-0.41l-1.32,-1.56l-0.36,-0.08l-2.23,1.08l-2.83,2.06l-1.52,1.85l-2.32,0.13l-0.2,0.09l-1.28,1.37l-0.03,0.37l1.32,1.97l0.18,0.13l1.83,0.43l0.07,1.08l0.18,0.26l1.98,0.84l0.3,-0.03l2.66,-1.96l2.06,1.04l0.12,0.03l1.4,0.07l0.27,1.0l-3.24,0.73l-0.17,0.11l-1.13,1.5l-2.38,1.4l-0.1,0.1l-1.29,1.99l0.1,0.42l2.6,1.5l0.97,2.72l1.52,2.56l1.66,2.08l-0.03,1.76l-1.4,0.67l-0.15,0.38l0.6,1.47l0.13,0.15l1.29,0.75l-0.35,2.0l-0.58,1.96l-1.22,0.21l-0.2,0.14l-1.83,2.93l-2.02,3.51l-2.29,3.13l-3.4,2.42l-3.42,2.18l-2.75,0.3l-0.15,0.06l-1.32,1.01l-0.68,-0.67l-0.41,-0.01l-1.37,1.27l-3.42,1.28l-2.62,0.4l-0.24,0.21l-0.8,2.57l-0.95,0.11l-0.53,-1.54l0.52,-0.89l-0.19,-0.44l-3.36,-0.84l-0.17,0.01l-1.09,0.4l-2.36,-0.64l-1.0,-0.9l0.35,-1.34l-0.23,-0.37l-2.22,-0.47l-1.15,-0.94l-0.36,-0.02l-2.08,1.37l-2.35,0.29l-1.98,-0.01l-0.13,0.03l-1.32,0.63l-1.28,0.38l-0.21,0.33l0.33,2.65l-0.78,-0.04l-0.14,-0.39l-0.07,-1.04l-0.41,-0.26l-1.72,0.71l-0.96,-0.43l-1.63,-0.86l0.65,-1.95l-0.19,-0.38l-1.43,-0.46l-0.56,-2.27l-0.34,-0.22l-2.26,0.38l0.25,-2.65l2.29,-2.15l0.09,-0.2l0.1,-2.21l-0.07,-2.09l-0.15,-0.25l-1.02,-0.6l-0.8,-1.52l-0.31,-0.16l-1.42,0.2l-2.16,-0.32l0.55,-0.74l0.01,-0.35l-1.17,-1.7l-0.41,-0.08l-1.67,1.07l-1.97,-0.63l-0.25,0.03l-2.89,1.73l-2.26,1.99l-1.82,0.3l-1.0,-0.66l-0.15,-0.05l-1.28,-0.06l-1.75,-0.61l-0.24,0.02l-1.35,0.69l-0.1,0.08l-1.2,1.45l-0.14,-1.41l-0.4,-0.25l-1.46,0.55l-2.83,-0.26l-2.77,-0.61l-1.99,-1.17l-1.91,-0.54l-0.78,-1.21l-0.17,-0.13l-1.36,-0.38l-2.54,-1.79l-2.01,-0.84l-0.28,0.02l-0.89,0.56l-3.31,-1.83l-2.35,-1.67l-0.57,-2.49l1.34,0.28l0.36,-0.28l0.08,-1.42l-0.05,-0.19l-0.93,-1.34l0.24,-2.18l-0.07,-0.22l-2.69,-3.32l-0.15,-0.1l-3.97,-1.11l-0.69,-2.05l-0.11,-0.15l-1.79,-1.3l-0.39,-0.73l-0.36,-1.57l0.08,-1.09l-0.18,-0.3l-1.52,-0.66l-0.22,-0.01l-0.51,0.18l-0.52,-2.21l0.59,-0.55l0.06,-0.35l-0.22,-0.44l2.12,-1.24l1.63,-0.55l2.58,0.39l0.31,-0.16l0.87,-1.75l3.05,-0.34l0.21,-0.12l0.84,-1.12l3.87,-1.59l0.15,-0.14l0.35,-0.68l0.03,-0.17l-0.17,-1.51l1.52,-0.7l0.15,-0.39l-2.12,-5.0l4.62,-1.15l1.35,-0.72l0.14,-0.17l1.72,-5.37l4.7,0.99l0.28,-0.08l1.39,-1.43l0.08,-0.2l0.11,-2.95l1.83,-0.26l0.18,-0.1l1.85,-2.08l0.61,-0.17l0.57,1.97l0.1,0.15l2.2,1.75l3.48,1.17l1.59,2.36l-0.93,3.53l0.04,0.24l0.9,1.35l0.2,0.13l2.98,0.53l3.32,0.43l2.97,1.89l1.49,0.35l1.08,2.67l1.52,1.88l0.24,0.11l2.74,-0.07l5.15,0.67l3.36,-0.41l2.39,0.43l3.67,1.81l0.13,0.03l2.92,-0.0l1.02,0.86l0.34,0.03l2.88,-1.59l3.98,-1.03l3.81,-0.13l3.02,-1.12l1.77,-1.61l1.73,-1.01l0.13,-0.37l-0.41,-1.01l-0.72,-1.07l1.09,-1.66l1.21,0.24l2.57,0.63l0.24,-0.04l2.46,-1.62l3.78,-1.19l0.13,-0.09l1.8,-2.03l1.66,-0.84l3.54,-0.41l1.93,0.35l0.34,-0.22l0.27,-1.12l-0.08,-0.29l-2.27,-2.22l-2.08,-1.07l-0.29,0.01l-1.82,1.12l-2.36,-0.47l-0.14,0.01l-1.18,0.34l-0.46,-0.94l1.69,-3.08l1.1,-2.21l2.75,1.12l0.26,-0.02l3.53,-2.06l0.15,-0.26l-0.02,-1.35l2.18,-3.39l1.35,-1.04l0.12,-0.24l-0.03,-1.85l-0.15,-0.25l-1.0,-0.58l1.68,-1.37l3.01,-0.59l3.25,-0.09l3.67,0.99l2.08,1.18l1.51,3.3l0.95,1.45l0.85,1.99l0.92,3.19ZM697.0,237.37l-1.95,1.12l-1.74,-0.68l-0.06,-1.9l1.08,-1.03l2.62,-0.7l1.23,0.05l0.37,0.65l-1.01,1.08l-0.54,1.4Z\", \"name\": \"China\" }, \"CM\": { \"path\": \"M453.76,278.92l-0.26,-0.11l-0.18,-0.02l-1.42,0.31l-1.56,-0.33l-1.17,0.16l-3.7,-0.05l0.3,-1.63l-0.04,-0.21l-0.98,-1.66l-0.15,-0.13l-1.03,-0.38l-0.46,-1.01l-0.13,-0.14l-0.48,-0.27l0.02,-0.46l0.62,-1.72l1.1,-2.25l0.54,-0.02l0.2,-0.09l1.41,-1.39l0.73,-0.03l1.32,0.97l0.31,0.03l1.72,-0.85l0.16,-0.2l0.22,-1.0l0.57,-1.03l0.36,-1.18l1.26,-0.98l0.1,-0.15l0.49,-1.7l0.48,-0.51l0.07,-0.13l0.35,-1.3l0.63,-1.54l2.06,-1.92l0.09,-0.17l0.12,-0.79l0.24,-0.41l-0.04,-0.36l-0.89,-0.91l0.04,-0.45l0.28,-0.06l0.85,1.39l0.16,1.59l-0.09,1.66l0.04,0.17l1.09,1.84l-0.86,-0.02l-0.72,0.17l-1.07,-0.24l-0.34,0.17l-0.54,1.19l0.06,0.34l1.48,1.47l1.06,0.44l0.32,0.94l0.73,1.6l-0.32,0.57l-1.23,2.49l-0.54,0.41l-0.12,0.21l-0.19,1.95l0.24,1.08l-0.18,0.67l0.07,0.28l1.13,1.25l0.24,0.93l0.92,1.29l1.1,0.8l0.1,1.01l0.26,0.73l-0.12,0.93l-1.65,-0.49l-2.02,-0.66l-3.19,-0.11Z\", \"name\": \"Cameroon\" }, \"CL\": { \"path\": \"M246.8,429.1l-1.14,0.78l-2.25,1.21l-0.16,0.23l-0.37,2.94l-0.75,0.06l-2.72,-1.07l-2.83,-2.34l-3.06,-1.9l-0.71,-1.92l0.67,-1.84l-0.02,-0.25l-1.22,-2.13l-0.31,-5.41l1.02,-2.95l2.59,-2.4l-0.13,-0.51l-3.32,-0.8l2.06,-2.4l0.07,-0.15l0.79,-4.77l2.44,0.95l0.4,-0.22l1.31,-6.31l-0.16,-0.33l-1.68,-0.8l-0.42,0.21l-0.72,3.47l-1.01,-0.27l0.74,-4.06l0.85,-5.46l1.12,-1.96l0.03,-0.22l-0.71,-2.82l-0.19,-2.94l0.76,-0.07l0.26,-0.2l1.53,-4.62l1.73,-4.52l1.07,-4.2l-0.56,-4.2l0.73,-2.2l0.01,-0.12l-0.29,-3.3l1.46,-3.34l0.45,-5.19l0.8,-5.52l0.78,-5.89l-0.18,-4.33l-0.49,-3.47l1.1,-0.56l0.13,-0.13l0.44,-0.88l0.9,1.29l0.32,1.8l0.1,0.18l1.16,0.97l-0.73,2.33l0.01,0.21l1.33,2.91l0.97,3.6l0.35,0.22l1.57,-0.31l0.16,0.34l-0.79,2.51l-2.61,1.25l-0.17,0.28l0.08,4.36l-0.48,0.79l0.01,0.33l0.6,0.84l-1.62,1.55l-1.67,2.6l-0.89,2.47l-0.02,0.13l0.23,2.56l-1.5,2.76l-0.03,0.21l1.15,4.8l0.11,0.17l0.54,0.42l-0.01,2.37l-1.4,2.7l-0.03,0.15l0.06,2.25l-1.8,1.78l-0.09,0.21l0.02,2.73l0.71,2.63l-1.33,0.94l-0.12,0.17l-0.67,2.64l-0.59,3.03l0.4,3.55l-0.84,0.51l-0.14,0.31l0.58,3.5l0.08,0.16l0.96,0.99l-0.7,1.08l0.11,0.43l1.04,0.55l0.19,0.8l-0.89,0.48l-0.16,0.31l0.26,1.77l-0.89,4.06l-1.31,2.67l-0.03,0.19l0.28,1.53l-0.73,1.88l-1.85,1.37l-0.12,0.26l0.22,3.46l0.06,0.16l0.88,1.19l0.28,0.12l1.32,-0.17l-0.04,2.13l0.04,0.15l1.04,1.95l0.24,0.16l5.94,0.44ZM248.79,430.71l0.0,7.41l0.3,0.3l2.67,0.0l1.01,0.06l-0.54,0.91l-1.99,1.01l-1.13,-0.1l-1.42,-0.27l-1.87,-1.06l-2.57,-0.49l-3.09,-1.9l-2.52,-1.83l-2.65,-2.93l0.93,0.32l3.54,2.29l3.32,1.23l0.34,-0.09l1.29,-1.57l0.83,-2.32l2.11,-1.28l1.43,0.32Z\", \"name\": \"Chile\" }, \"CA\": { \"path\": \"M280.14,145.66l-1.66,2.88l0.06,0.37l0.37,0.03l1.5,-1.01l1.17,0.49l-0.64,0.83l0.13,0.46l2.22,0.89l0.28,-0.03l1.02,-0.7l2.09,0.83l-0.69,2.1l0.37,0.38l1.43,-0.45l0.27,1.43l0.74,1.88l-0.95,2.5l-0.88,0.09l-1.34,-0.48l0.49,-2.34l-0.14,-0.32l-0.7,-0.4l-0.36,0.04l-2.81,2.66l-0.63,-0.05l1.2,-1.01l-0.1,-0.52l-2.4,-0.77l-2.79,0.18l-4.65,-0.09l-0.22,-0.54l1.37,-0.99l0.01,-0.48l-0.82,-0.65l1.91,-1.79l2.57,-5.17l1.49,-1.81l2.04,-1.07l0.63,0.08l-0.27,0.51l-1.33,2.07ZM193.92,74.85l-0.01,4.24l0.19,0.28l0.33,-0.07l3.14,-3.22l2.65,2.5l-0.71,3.04l0.06,0.26l2.42,2.88l0.46,0.0l2.66,-3.14l1.83,-3.74l0.03,-0.12l0.13,-4.53l3.23,0.31l3.63,0.64l3.18,2.08l0.13,1.91l-1.79,2.22l-0.0,0.37l1.69,2.2l-0.28,1.8l-4.74,2.84l-3.33,0.62l-2.5,-1.21l-0.41,0.17l-0.73,2.05l-2.39,3.44l-0.74,1.78l-2.78,2.61l-3.48,0.26l-0.17,0.07l-1.98,1.68l-0.1,0.21l-0.15,2.33l-2.68,0.45l-0.17,0.09l-3.1,3.2l-2.75,4.38l-0.99,3.06l-0.14,4.31l0.25,0.31l3.5,0.58l1.07,3.24l1.18,2.76l0.34,0.18l3.43,-0.69l4.55,1.52l2.45,1.32l1.76,1.65l0.12,0.07l3.11,0.96l2.63,1.46l0.13,0.04l4.12,0.2l2.41,0.3l-0.36,2.81l0.8,3.51l1.81,3.78l0.08,0.1l3.73,3.17l0.34,0.03l1.93,-1.08l0.13,-0.15l1.35,-3.44l0.01,-0.18l-1.31,-5.38l-0.08,-0.14l-1.46,-1.5l3.68,-1.51l2.84,-2.46l1.45,-2.55l0.04,-0.17l-0.2,-2.39l-0.04,-0.12l-1.7,-3.07l-2.9,-2.64l2.79,-3.66l0.05,-0.27l-1.08,-3.38l-0.8,-5.75l1.45,-0.75l4.18,1.03l2.6,0.38l0.18,-0.03l1.93,-0.95l2.18,1.23l3.01,2.18l0.73,1.42l0.25,0.16l4.18,0.27l-0.06,2.95l0.83,4.7l0.22,0.24l2.19,0.55l1.75,2.08l0.38,0.07l3.63,-2.03l0.11,-0.11l2.38,-4.06l1.36,-1.43l1.76,3.01l3.26,4.68l2.68,4.19l-0.94,2.09l0.12,0.38l3.31,1.98l2.23,1.98l0.13,0.07l3.94,0.89l1.48,1.02l0.96,2.82l0.22,0.2l1.85,0.43l0.88,1.13l0.17,3.53l-1.68,1.16l-1.76,1.14l-4.08,1.17l-0.11,0.06l-3.08,2.65l-4.11,0.52l-5.35,-0.69l-3.76,-0.02l-2.62,0.23l-0.2,0.1l-2.05,2.29l-3.13,1.41l-0.11,0.08l-3.6,4.24l-2.87,2.92l-0.05,0.36l0.33,0.14l2.13,-0.52l0.15,-0.08l3.98,-4.15l5.16,-2.63l3.58,-0.31l1.82,1.3l-2.09,1.91l-0.09,0.29l0.8,3.46l0.82,2.37l0.15,0.17l3.25,1.56l0.16,0.03l4.14,-0.45l0.21,-0.12l2.03,-2.86l0.11,1.46l0.13,0.22l1.26,0.88l-2.7,1.78l-5.51,1.83l-2.52,1.26l-2.75,2.16l-1.52,-0.18l-0.08,-2.16l4.19,-2.47l0.14,-0.34l-0.3,-0.22l-4.01,0.1l-2.66,0.36l-1.45,-1.56l0.0,-4.16l-0.11,-0.23l-1.11,-0.91l-0.28,-0.05l-1.5,0.48l-0.7,-0.7l-0.45,0.02l-1.91,2.39l-0.8,2.5l-0.82,1.31l-0.95,0.43l-0.77,0.15l-0.23,0.2l-0.18,0.56l-8.2,0.02l-0.13,0.03l-1.19,0.61l-2.95,2.45l-0.78,1.13l-4.6,0.01l-0.12,0.02l-1.13,0.48l-0.13,0.44l0.37,0.55l0.2,0.82l-0.01,0.09l-3.1,1.42l-2.63,0.5l-2.84,1.57l-0.47,0.0l-0.72,-0.4l-0.18,-0.27l0.03,-0.15l0.52,-1.0l1.2,-1.71l0.73,-1.8l0.02,-0.17l-1.03,-5.47l-0.15,-0.21l-2.35,-1.32l0.16,-0.29l-0.05,-0.35l-0.37,-0.38l-0.22,-0.09l-0.56,0.0l-0.35,-0.34l-0.11,-0.65l-0.46,-0.2l-0.39,0.26l-0.2,-0.03l-0.11,-0.33l-0.48,-0.25l-0.21,-0.71l-0.15,-0.18l-3.97,-2.07l-4.8,-2.39l-0.25,-0.01l-2.19,0.89l-0.72,0.03l-3.04,-0.82l-0.14,-0.0l-1.94,0.4l-2.4,-0.98l-2.56,-0.51l-1.7,-0.19l-0.62,-0.44l-0.42,-1.67l-0.3,-0.23l-0.85,0.02l-0.29,0.3l-0.01,0.95l-69.26,-0.01l-4.77,-3.14l-1.78,-1.41l-4.51,-1.38l-1.3,-2.73l0.34,-1.96l-0.17,-0.33l-3.06,-1.37l-0.41,-2.58l-0.11,-0.18l-2.92,-2.4l-0.05,-1.53l1.32,-1.59l0.07,-0.2l-0.07,-2.21l-0.16,-0.26l-4.19,-2.22l-2.52,-4.02l-1.56,-2.6l-0.08,-0.09l-2.28,-1.64l-1.65,-1.48l-1.31,-1.89l-0.38,-0.1l-2.51,1.21l-2.28,1.92l-2.03,-2.22l-1.85,-1.71l-2.44,-1.04l-2.28,-0.12l0.03,-37.72l4.27,0.98l4.0,2.13l2.61,0.4l0.24,-0.07l2.17,-1.81l2.92,-1.33l3.63,0.53l0.18,-0.03l3.72,-1.94l3.89,-1.06l1.6,1.72l0.37,0.06l1.87,-1.04l0.14,-0.19l0.48,-1.83l1.37,0.38l4.18,3.96l0.41,0.0l2.89,-2.62l0.28,2.79l0.37,0.26l3.08,-0.73l0.17,-0.12l0.85,-1.16l2.81,0.24l3.83,1.86l5.86,1.61l3.46,0.75l2.44,-0.26l2.89,1.89l-3.12,1.89l-0.14,0.31l0.24,0.24l4.53,0.92l6.84,-0.5l2.04,-0.71l2.54,2.44l0.39,0.02l2.72,-2.16l-0.01,-0.48l-2.26,-1.61l1.27,-1.16l2.94,-0.19l1.94,-0.42l1.89,0.97l2.49,2.32l0.24,0.08l2.71,-0.33l4.35,1.9l0.17,0.02l3.86,-0.67l3.62,0.1l0.31,-0.33l-0.26,-2.44l1.9,-0.65l3.58,1.36l-0.01,3.84l0.23,0.29l0.34,-0.17l1.51,-3.23l1.81,0.1l0.31,-0.22l1.13,-4.37l-0.08,-0.29l-2.68,-2.73l-2.83,-1.76l0.19,-4.73l2.77,-3.15l3.06,0.69l2.44,1.97l3.24,4.88l-2.05,2.02l0.15,0.51l4.41,0.85ZM265.85,150.7l-0.84,0.04l-3.15,-0.99l-1.77,-1.17l0.19,-0.06l3.17,0.79l2.39,1.27l0.01,0.12ZM249.41,3.71l6.68,0.49l5.34,0.79l4.34,1.6l-0.08,1.24l-5.91,2.56l-6.03,1.21l-2.36,1.38l-0.14,0.34l0.29,0.22l4.37,-0.02l-4.96,3.01l-4.06,1.64l-0.11,0.08l-4.21,4.62l-5.07,0.92l-0.12,0.05l-1.53,1.1l-7.5,0.59l-0.28,0.28l0.24,0.31l2.67,0.54l-1.04,0.6l-0.09,0.44l1.89,2.49l-2.11,1.66l-3.83,1.52l-0.15,0.13l-1.14,2.01l-3.41,1.55l-0.16,0.36l0.35,1.19l0.3,0.22l3.98,-0.19l0.03,0.78l-6.42,2.99l-6.44,-1.41l-7.41,0.79l-3.72,-0.62l-4.48,-0.26l-0.25,-2.0l4.37,-1.13l0.21,-0.38l-1.14,-3.55l1.13,-0.28l6.61,2.29l0.35,-0.12l-0.04,-0.37l-3.41,-3.45l-0.14,-0.08l-3.57,-0.92l1.62,-1.7l4.36,-1.3l0.2,-0.18l0.71,-1.94l-0.12,-0.36l-3.45,-2.15l-0.88,-2.43l6.36,0.23l1.94,0.61l0.23,-0.02l3.91,-2.1l0.15,-0.32l-0.26,-0.24l-5.69,-0.67l-8.69,0.37l-4.3,-1.92l-2.12,-2.39l-2.82,-1.68l-0.44,-1.65l3.41,-1.06l2.93,-0.2l4.91,-0.99l3.69,-2.28l2.93,0.31l2.64,1.68l0.42,-0.1l1.84,-3.23l3.17,-0.96l4.45,-0.69l7.56,-0.26l1.26,0.64l0.18,0.03l7.2,-1.06l10.81,0.8ZM203.94,57.59l0.01,0.32l1.97,2.97l0.51,-0.01l2.26,-3.75l6.05,-1.89l4.08,4.72l-0.36,2.95l0.38,0.33l4.95,-1.36l0.11,-0.05l2.23,-1.77l5.37,2.31l3.32,2.14l0.3,1.89l0.36,0.25l4.48,-1.01l2.49,2.8l0.14,0.09l5.99,1.78l2.09,1.74l2.18,3.83l-4.29,1.91l-0.01,0.54l5.9,2.83l3.95,0.94l3.54,3.84l0.2,0.1l3.58,0.25l-0.67,2.51l-4.18,4.54l-2.84,-1.61l-3.91,-3.95l-0.26,-0.09l-3.24,0.52l-0.25,0.26l-0.32,2.37l0.1,0.26l2.63,2.38l3.42,1.89l0.96,1.0l1.57,3.8l-0.74,2.43l-2.85,-0.96l-6.26,-3.15l-0.38,0.09l0.04,0.39l3.54,3.4l2.55,2.31l0.23,0.78l-6.26,-1.43l-5.33,-2.25l-2.73,-1.73l0.67,-0.86l-0.09,-0.45l-7.38,-4.01l-0.44,0.27l0.03,0.89l-6.85,0.61l-1.8,-1.17l1.43,-2.6l4.56,-0.07l5.15,-0.52l0.23,-0.45l-0.76,-1.34l0.8,-1.89l3.21,-4.06l0.05,-0.29l-0.72,-1.95l-0.97,-1.47l-0.11,-0.1l-3.84,-2.1l-4.53,-1.33l1.09,-0.75l0.05,-0.45l-2.65,-2.75l-0.18,-0.09l-2.12,-0.24l-1.91,-1.47l-0.39,0.02l-1.27,1.25l-4.4,0.56l-9.06,-0.99l-5.28,-1.31l-4.01,-0.67l-1.72,-1.31l2.32,-1.85l0.1,-0.33l-0.28,-0.2l-3.3,-0.02l-0.74,-4.36l1.86,-4.09l2.46,-1.88l5.74,-1.15l-1.5,2.55ZM261.28,159.28l0.19,0.14l1.82,0.42l1.66,-0.05l-0.66,0.68l-0.75,0.16l-3.0,-1.25l-0.46,-0.77l0.51,-0.52l0.68,1.19ZM230.87,84.48l-2.48,0.19l-0.52,-1.74l0.96,-2.17l2.03,-0.53l1.71,1.04l0.02,1.6l-0.22,0.46l-1.5,1.16ZM229.52,58.19l0.14,0.82l-4.99,-0.22l-2.73,0.63l-0.59,-0.23l-2.61,-2.4l0.08,-1.38l0.94,-0.25l5.61,0.51l4.14,2.54ZM222.12,105.0l-0.79,1.63l-0.75,-0.22l-0.52,-0.91l0.04,-0.09l0.84,-1.01l0.74,0.06l0.44,0.55ZM183.77,38.22l2.72,1.65l0.16,0.04l4.83,-0.01l1.92,1.52l-0.51,1.75l0.18,0.36l2.84,1.14l1.56,1.19l0.16,0.06l3.37,0.22l3.65,0.42l4.07,-1.1l5.05,-0.43l3.96,0.35l2.53,1.8l0.48,1.79l-1.37,1.16l-3.6,1.03l-3.22,-0.59l-7.17,0.76l-5.1,0.09l-4.0,-0.6l-6.48,-1.56l-0.81,-2.57l-0.3,-2.49l-0.1,-0.19l-2.51,-2.25l-0.16,-0.07l-5.12,-0.63l-2.61,-1.45l0.75,-1.71l4.88,0.32ZM207.46,91.26l0.42,1.62l0.42,0.19l1.12,-0.55l1.35,0.99l2.74,1.39l2.73,1.2l0.2,1.74l0.35,0.26l1.72,-0.29l1.31,0.97l-1.72,0.96l-3.68,-0.9l-1.34,-1.71l-0.43,-0.04l-2.46,2.1l-3.23,1.85l-0.74,-1.98l-0.31,-0.19l-2.47,0.28l1.49,-1.34l0.1,-0.19l0.32,-3.15l0.79,-3.45l1.34,0.25ZM215.59,102.66l-2.73,2.0l-1.49,-0.08l-0.37,-0.7l1.61,-1.56l3.0,0.03l-0.02,0.3ZM202.79,24.07l0.11,0.12l2.54,1.53l-3.01,1.47l-4.55,4.07l-4.3,0.38l-5.07,-0.68l-2.51,-2.09l0.03,-1.72l1.86,-1.4l0.1,-0.34l-0.29,-0.2l-4.49,0.04l-2.63,-1.79l-1.45,-2.36l1.61,-2.38l1.65,-1.69l2.47,-0.4l0.19,-0.48l-0.72,-0.89l5.1,-0.26l3.1,3.05l0.13,0.07l4.21,1.25l3.99,1.06l1.92,3.65ZM187.5,59.3l-0.15,0.1l-2.59,3.4l-2.5,-0.15l-1.47,-3.92l0.04,-2.24l1.22,-1.92l2.34,-1.26l5.11,0.17l4.28,1.06l-3.36,3.86l-2.9,0.9ZM186.19,48.8l-1.15,1.63l-3.42,-0.35l-2.68,-1.15l1.11,-1.88l3.34,-1.27l2.01,1.63l0.79,1.38ZM185.78,35.41l-0.95,0.13l-4.48,-0.33l-0.4,-0.91l4.5,0.07l1.45,0.82l-0.1,0.21ZM180.76,32.56l-3.43,1.03l-1.85,-1.14l-1.01,-1.92l-0.16,-1.87l2.87,0.2l1.39,0.35l2.75,1.75l-0.55,1.6ZM181.03,76.32l-1.21,1.2l-3.19,-1.26l-0.18,-0.01l-1.92,0.45l-2.88,-1.67l1.84,-1.16l1.6,-1.77l2.45,1.17l1.45,0.77l2.05,2.28ZM169.72,54.76l2.83,0.97l0.14,0.01l4.25,-0.58l0.47,1.01l-2.19,2.16l0.07,0.48l3.61,1.95l-0.41,3.84l-3.87,1.68l-2.23,-0.36l-1.73,-1.75l-6.07,-3.53l0.03,-1.01l4.79,0.55l0.3,-0.16l-0.04,-0.34l-2.55,-2.89l2.59,-2.05ZM174.44,40.56l1.49,1.87l0.07,2.48l-1.07,3.52l-3.87,0.48l-2.41,-0.72l0.05,-2.72l-0.33,-0.3l-3.79,0.36l-0.13,-3.31l2.36,0.14l0.15,-0.03l3.7,-1.74l3.44,0.29l0.31,-0.22l0.03,-0.12ZM170.14,31.5l0.75,1.74l-3.52,-0.52l-4.19,-1.77l-4.65,-0.17l1.65,-1.11l-0.05,-0.52l-2.86,-1.26l-0.13,-1.58l4.52,0.7l6.66,1.99l1.84,2.5ZM134.64,58.08l-1.08,1.93l0.34,0.44l5.44,-1.41l3.37,2.32l0.37,-0.02l2.66,-2.28l2.03,1.38l2.01,4.53l0.53,0.04l1.26,-1.93l0.03,-0.27l-1.67,-4.55l1.82,-0.58l2.36,0.73l2.69,1.84l1.53,4.46l0.77,3.24l0.15,0.19l4.22,2.26l4.32,2.04l-0.21,1.51l-3.87,0.34l-0.19,0.5l1.45,1.54l-0.65,1.23l-4.3,-0.65l-4.4,-1.19l-2.97,0.28l-4.67,1.48l-6.31,0.65l-4.27,0.39l-1.26,-1.91l-0.15,-0.12l-3.42,-1.2l-0.16,-0.01l-2.05,0.45l-2.66,-3.02l1.2,-0.34l3.82,-0.76l3.58,0.19l3.27,-0.78l0.23,-0.29l-0.24,-0.29l-4.84,-1.06l-5.42,0.35l-3.4,-0.09l-0.97,-1.22l5.39,-1.7l0.21,-0.33l-0.3,-0.25l-3.82,0.06l-3.95,-1.1l1.88,-3.13l1.68,-1.81l6.54,-2.84l2.11,0.77ZM158.85,56.58l-1.82,2.62l-3.38,-2.9l0.49,-0.39l3.17,-0.18l1.54,0.86ZM149.71,42.7l1.0,1.87l0.37,0.14l2.17,-0.83l2.33,0.2l0.38,2.16l-1.38,2.17l-8.33,0.76l-6.34,2.15l-3.51,0.1l-0.22,-1.13l4.98,-2.12l0.17,-0.34l-0.31,-0.23l-11.27,0.6l-3.04,-0.78l3.14,-4.57l2.2,-1.35l6.87,1.7l4.4,3.0l0.14,0.05l4.37,0.39l0.27,-0.48l-3.41,-4.68l1.96,-1.62l2.28,0.53l0.79,2.32ZM145.44,29.83l-2.18,0.77l-3.79,-0.0l0.02,-0.31l2.34,-1.5l1.2,0.23l2.42,0.83ZM144.83,34.5l-4.44,1.46l-3.18,-1.48l1.6,-1.36l3.51,-0.53l3.1,0.75l-0.6,1.16ZM119.02,65.87l-6.17,2.07l-1.19,-1.82l-0.13,-0.11l-5.48,-2.32l0.92,-1.7l1.73,-3.44l2.16,-3.15l-0.02,-0.36l-2.09,-2.56l7.84,-0.71l3.59,1.02l6.32,0.27l2.35,1.37l2.25,1.71l-2.68,1.04l-6.21,3.41l-3.1,3.28l-0.08,0.21l0.0,1.81ZM129.66,35.4l-0.3,3.55l-1.77,1.67l-2.34,0.27l-4.62,2.2l-3.89,0.76l-2.83,-0.93l3.85,-3.52l5.04,-3.36l3.75,0.07l3.11,-0.7ZM111.24,152.74l-0.82,0.29l-3.92,-1.39l-0.7,-1.06l-0.12,-0.1l-2.15,-1.09l-0.41,-0.84l-0.2,-0.16l-2.44,-0.56l-0.84,-1.56l0.1,-0.36l2.34,0.64l1.53,0.5l2.28,0.34l0.78,1.04l1.24,1.55l0.09,0.08l2.42,1.3l0.81,1.39ZM88.54,134.82l0.14,0.02l2.0,-0.23l-0.67,3.48l0.06,0.24l1.78,2.22l-0.24,-0.0l-1.4,-1.42l-0.91,-1.53l-1.26,-1.08l-0.42,-1.35l0.09,-0.66l0.82,0.31Z\", \"name\": \"Canada\" }, \"CG\": { \"path\": \"M453.66,296.61l-0.9,-0.82l-0.35,-0.04l-0.83,0.48l-0.77,0.83l-1.65,-2.13l1.66,-1.2l0.08,-0.39l-0.81,-1.43l0.59,-0.43l1.62,-0.29l0.24,-0.24l0.1,-0.58l0.94,0.84l0.19,0.08l2.21,0.11l0.27,-0.14l0.81,-1.29l0.32,-1.76l-0.27,-1.96l-0.06,-0.15l-1.08,-1.35l1.02,-2.74l-0.09,-0.34l-0.62,-0.5l-0.22,-0.06l-1.66,0.18l-0.55,-1.03l0.12,-0.73l2.85,0.09l1.98,0.65l2.0,0.59l0.38,-0.25l0.17,-1.3l1.26,-2.24l1.34,-1.19l1.54,0.38l1.35,0.12l-0.11,1.15l-0.74,1.34l-0.5,1.61l-0.31,2.22l0.12,1.41l-0.4,0.9l-0.06,0.88l-0.24,0.67l-1.57,1.15l-1.24,1.41l-1.09,2.43l-0.03,0.13l0.08,1.95l-0.55,0.69l-1.46,1.23l-1.32,1.41l-0.61,-0.29l-0.13,-0.57l-0.29,-0.23l-1.36,-0.02l-0.23,0.1l-0.72,0.81l-0.41,-0.16Z\", \"name\": \"Republic of the Congo\" }, \"CF\": { \"path\": \"M459.41,266.56l1.9,-0.17l0.22,-0.12l0.36,-0.5l0.14,0.02l0.55,0.51l0.29,0.07l3.15,-0.96l0.12,-0.07l1.05,-0.97l1.29,-0.87l0.12,-0.33l-0.17,-0.61l0.38,-0.12l2.36,0.15l0.15,-0.03l2.36,-1.17l0.12,-0.1l1.78,-2.72l1.18,-0.96l1.23,-0.34l0.21,0.79l0.07,0.13l1.37,1.5l0.01,0.86l-0.39,1.0l-0.01,0.17l0.16,0.78l0.1,0.17l0.91,0.76l1.89,1.09l1.24,0.92l0.02,0.67l0.12,0.23l1.67,1.3l0.99,1.03l0.61,1.46l0.14,0.15l1.79,0.95l0.2,0.4l-0.44,0.14l-1.54,-0.06l-1.98,-0.26l-0.93,0.22l-0.19,0.14l-0.3,0.48l-0.57,0.05l-0.91,-0.49l-0.26,-0.01l-2.7,1.21l-1.04,-0.23l-0.21,0.03l-0.34,0.19l-0.12,0.13l-0.64,1.3l-1.67,-0.43l-1.77,-0.24l-1.58,-0.91l-2.06,-0.85l-0.27,0.02l-1.42,0.88l-0.97,1.27l-0.06,0.14l-0.19,1.46l-1.3,-0.11l-1.67,-0.42l-0.27,0.07l-1.55,1.41l-0.99,1.76l-0.14,-1.18l-0.13,-0.22l-1.1,-0.78l-0.86,-1.2l-0.2,-0.84l-0.07,-0.13l-1.07,-1.19l0.16,-0.59l0.0,-0.15l-0.24,-1.01l0.18,-1.77l0.5,-0.38l0.09,-0.11l1.18,-2.4Z\", \"name\": \"Central African Republic\" }, \"CD\": { \"path\": \"M497.85,276.25l-0.14,2.77l0.2,0.3l0.57,0.19l-0.47,0.52l-1.0,0.71l-0.96,1.31l-0.56,1.22l-0.16,2.04l-0.54,0.89l-0.04,0.15l-0.02,1.76l-0.63,0.61l-0.09,0.2l-0.08,1.33l-0.2,0.11l-0.15,0.21l-0.23,1.37l0.03,0.2l0.6,1.08l0.16,2.96l0.44,2.29l-0.24,1.25l0.01,0.15l0.5,1.46l0.07,0.12l1.41,1.37l1.09,2.56l-0.51,-0.11l-3.45,0.45l-0.67,0.3l-0.15,0.15l-0.71,1.61l0.01,0.26l0.52,1.03l-0.43,2.9l-0.31,2.55l0.13,0.29l0.7,0.46l1.75,0.99l0.31,-0.01l0.26,-0.17l0.15,1.9l-1.44,-0.02l-0.94,-1.28l-0.94,-1.1l-0.17,-0.1l-1.76,-0.33l-0.5,-1.18l-0.42,-0.15l-1.44,0.75l-1.79,-0.32l-0.77,-1.05l-0.2,-0.12l-1.59,-0.23l-0.97,0.04l-0.1,-0.53l-0.27,-0.25l-0.86,-0.06l-1.13,-0.15l-1.62,0.37l-1.04,-0.06l-0.32,0.09l0.11,-2.56l-0.08,-0.21l-0.77,-0.87l-0.17,-1.41l0.36,-1.47l-0.03,-0.21l-0.48,-0.91l-0.04,-1.52l-0.3,-0.29l-2.65,0.02l0.13,-0.53l-0.29,-0.37l-1.28,0.01l-0.28,0.21l-0.07,0.24l-1.35,0.09l-0.26,0.18l-0.62,1.45l-0.25,0.42l-1.17,-0.3l-0.19,0.01l-0.79,0.34l-1.44,0.18l-1.41,-1.96l-0.7,-1.47l-0.61,-1.86l-0.28,-0.21l-7.39,-0.03l-0.92,0.3l-0.78,-0.03l-0.78,0.25l-0.11,-0.25l0.35,-0.15l0.18,-0.26l0.07,-1.02l0.33,-0.52l0.72,-0.42l0.52,0.2l0.33,-0.08l0.76,-0.86l0.99,0.02l0.11,0.48l0.16,0.2l0.94,0.44l0.35,-0.07l1.46,-1.56l1.44,-1.21l0.68,-0.85l0.06,-0.2l-0.08,-1.99l1.04,-2.33l1.1,-1.23l1.62,-1.19l0.11,-0.14l0.29,-0.8l0.08,-0.94l0.38,-0.82l0.03,-0.16l-0.13,-1.38l0.3,-2.16l0.47,-1.51l0.73,-1.31l0.04,-0.12l0.15,-1.51l0.21,-1.66l0.89,-1.16l1.16,-0.7l1.9,0.79l1.69,0.95l1.81,0.24l1.85,0.48l0.35,-0.16l0.71,-1.43l0.16,-0.09l1.03,0.23l0.19,-0.02l2.65,-1.19l0.86,0.46l0.17,0.03l0.81,-0.08l0.23,-0.14l0.31,-0.5l0.75,-0.17l1.83,0.26l1.64,0.06l0.72,-0.21l1.39,1.9l0.16,0.11l1.12,0.3l0.24,-0.04l0.58,-0.36l1.05,0.15l0.15,-0.02l1.15,-0.44l0.47,0.84l0.08,0.09l2.08,1.57Z\", \"name\": \"Democratic Republic of the Congo\" }, \"CZ\": { \"path\": \"M463.29,152.22l-0.88,-0.47l-0.18,-0.03l-1.08,0.15l-1.86,-0.94l-0.21,-0.02l-0.88,0.24l-0.13,0.07l-1.25,1.17l-1.63,-0.91l-1.38,-1.36l-1.22,-0.75l-0.24,-1.24l-0.33,-0.75l1.53,-0.6l0.98,-0.84l1.74,-0.62l0.11,-0.07l0.47,-0.47l0.46,0.27l0.24,0.03l0.96,-0.3l1.06,0.95l0.15,0.07l1.57,0.24l-0.1,0.6l0.16,0.32l1.36,0.68l0.41,-0.15l0.28,-0.62l1.29,0.28l0.19,0.84l0.26,0.23l1.73,0.18l0.74,1.02l-0.17,0.0l-0.25,0.13l-0.32,0.49l-0.46,0.11l-0.22,0.23l-0.13,0.57l-0.32,0.1l-0.2,0.22l-0.03,0.14l-0.65,0.25l-1.05,-0.05l-0.28,0.17l-0.22,0.43Z\", \"name\": \"Czech Republic\" }, \"CY\": { \"path\": \"M505.03,193.75l-1.51,0.68l-1.0,-0.3l-0.32,-0.63l0.69,-0.06l0.41,0.13l0.19,-0.0l0.62,-0.22l0.31,0.02l0.06,0.22l0.49,0.17l0.06,-0.01Z\", \"name\": \"Cyprus\" }, \"CR\": { \"path\": \"M213.0,263.84l-0.98,-0.4l-0.3,-0.31l0.16,-0.24l0.05,-0.21l-0.09,-0.56l-0.1,-0.18l-0.76,-0.65l-0.99,-0.5l-0.74,-0.28l-0.13,-0.58l-0.12,-0.18l-0.66,-0.45l-0.34,-0.0l-0.13,0.31l0.13,0.59l-0.17,0.21l-0.34,-0.42l-0.14,-0.1l-0.7,-0.22l-0.23,-0.34l0.01,-0.62l0.31,-0.74l-0.14,-0.38l-0.3,-0.15l0.47,-0.4l1.48,0.6l0.26,-0.02l0.47,-0.27l0.58,0.15l0.35,0.44l0.17,0.11l0.74,0.17l0.27,-0.07l0.3,-0.27l0.52,1.09l0.97,1.02l0.77,0.71l-0.41,0.1l-0.23,0.3l0.01,1.02l0.12,0.24l0.2,0.14l-0.07,0.05l-0.11,0.3l0.08,0.37l-0.23,0.63Z\", \"name\": \"Costa Rica\" }, \"CU\": { \"path\": \"M215.01,226.09l2.08,0.18l1.94,0.03l2.24,0.86l0.95,0.92l0.25,0.08l2.22,-0.28l0.79,0.55l3.68,2.81l0.19,0.06l0.77,-0.03l1.18,0.42l-0.12,0.47l0.27,0.37l1.78,0.1l1.59,0.9l-0.11,0.22l-1.5,0.3l-1.64,0.13l-1.75,-0.2l-2.69,0.19l1.0,-0.86l-0.03,-0.48l-1.02,-0.68l-0.13,-0.05l-1.52,-0.16l-0.74,-0.64l-0.57,-1.42l-0.3,-0.19l-1.36,0.1l-2.23,-0.67l-0.71,-0.52l-0.14,-0.06l-3.2,-0.4l-0.42,-0.25l0.56,-0.39l0.12,-0.33l-0.27,-0.22l-2.46,-0.13l-0.2,0.06l-1.72,1.31l-0.94,0.03l-0.25,0.15l-0.29,0.53l-1.04,0.24l-0.29,-0.07l0.7,-0.43l0.1,-0.11l0.5,-0.87l1.04,-0.54l1.23,-0.49l1.86,-0.25l0.62,-0.28Z\", \"name\": \"Cuba\" }, \"SZ\": { \"path\": \"M500.95,353.41l-0.41,0.97l-1.16,0.23l-1.29,-1.26l-0.02,-0.71l0.63,-0.93l0.23,-0.7l0.47,-0.12l1.04,0.4l0.32,1.05l0.2,1.08Z\", \"name\": \"Swaziland\" }, \"SY\": { \"path\": \"M510.84,199.83l0.09,-0.11l0.07,-0.2l-0.04,-1.08l0.56,-1.4l1.3,-1.01l0.1,-0.34l-0.41,-1.11l-0.24,-0.19l-0.89,-0.11l-0.2,-1.84l0.55,-1.05l1.3,-1.22l0.09,-0.19l0.09,-1.09l0.39,0.27l0.25,0.04l2.66,-0.77l1.35,0.52l2.06,-0.01l2.93,-1.08l1.35,0.04l2.14,-0.34l-0.83,1.16l-1.31,0.68l-0.16,0.3l0.23,2.03l-0.9,3.25l-5.43,2.87l-4.79,2.91l-2.32,-0.92Z\", \"name\": \"Syria\" }, \"KG\": { \"path\": \"M599.04,172.15l0.38,-0.9l1.43,-0.37l4.04,1.02l0.37,-0.23l0.36,-1.64l1.17,-0.52l3.45,1.24l0.2,-0.0l0.86,-0.31l4.09,0.08l3.61,0.31l1.18,1.02l0.11,0.06l1.19,0.34l-0.13,0.26l-3.84,1.58l-0.13,0.1l-0.81,1.08l-3.08,0.34l-0.24,0.16l-0.85,1.7l-2.43,-0.37l-0.14,0.01l-1.79,0.61l-2.39,1.4l-0.12,0.39l0.25,0.49l-0.48,0.45l-4.57,0.43l-3.04,-0.94l-2.45,0.18l0.14,-1.02l2.42,0.44l0.27,-0.08l0.81,-0.81l1.76,0.27l0.21,-0.05l3.21,-2.14l-0.03,-0.51l-2.97,-1.57l-0.26,-0.01l-1.64,0.69l-1.38,-0.84l1.81,-1.67l-0.09,-0.5l-0.46,-0.18Z\", \"name\": \"Kyrgyzstan\" }, \"KE\": { \"path\": \"M523.3,287.04l0.06,0.17l1.29,1.8l-1.46,0.84l-0.11,0.11l-0.55,0.93l-0.81,0.16l-0.24,0.24l-0.34,1.69l-0.81,1.06l-0.46,1.58l-0.76,0.63l-3.3,-2.3l-0.16,-1.32l-0.15,-0.23l-9.35,-5.28l-0.02,-2.4l1.92,-2.63l0.91,-1.83l0.01,-0.24l-1.09,-2.86l-0.29,-1.24l-1.09,-1.63l2.93,-2.85l0.92,0.3l0.0,1.19l0.09,0.22l0.86,0.83l0.21,0.08l1.65,0.0l3.09,2.08l0.16,0.05l0.79,0.03l0.54,-0.06l0.58,0.28l1.67,0.2l0.28,-0.12l0.69,-0.98l2.04,-0.94l0.86,0.73l0.19,0.07l1.1,0.0l-1.82,2.36l-0.06,0.18l0.03,9.12Z\", \"name\": \"Kenya\" }, \"SS\": { \"path\": \"M505.7,261.39l0.02,1.64l-0.27,0.55l-1.15,0.05l-0.24,0.15l-0.85,1.44l0.22,0.45l1.44,0.17l1.15,1.12l0.42,0.95l0.14,0.15l1.06,0.54l1.33,2.45l-3.06,2.98l-1.44,1.08l-1.75,0.01l-1.92,0.56l-1.5,-0.53l-0.27,0.03l-0.85,0.57l-1.98,-1.5l-0.56,-1.02l-0.37,-0.13l-1.32,0.5l-1.08,-0.15l-0.2,0.04l-0.56,0.35l-0.9,-0.24l-1.44,-1.97l-0.39,-0.77l-0.13,-0.13l-1.78,-0.94l-0.65,-1.5l-1.08,-1.12l-1.57,-1.22l-0.02,-0.68l-0.12,-0.23l-1.37,-1.02l-1.17,-0.68l0.2,-0.08l0.86,-0.48l0.14,-0.18l0.63,-2.22l0.6,-1.02l1.47,-0.28l0.35,0.56l1.29,1.48l0.14,0.09l0.69,0.22l0.22,-0.02l0.83,-0.4l1.58,0.08l0.26,0.39l0.25,0.13l2.49,0.0l0.3,-0.25l0.06,-0.35l1.13,-0.42l0.18,-0.18l0.22,-0.63l0.68,-0.38l1.95,1.37l0.23,0.05l1.29,-0.26l0.19,-0.12l1.23,-1.8l1.36,-1.37l0.08,-0.25l-0.21,-1.52l-0.06,-0.15l-0.25,-0.3l0.94,-0.08l0.26,-0.21l0.1,-0.32l0.6,0.09l-0.25,1.67l0.3,1.83l0.11,0.19l1.22,0.94l0.25,0.73l-0.04,1.2l0.26,0.31l0.09,0.01Z\", \"name\": \"South Sudan\" }, \"SR\": { \"path\": \"M278.1,270.26l2.71,0.45l0.31,-0.14l0.19,-0.32l1.82,-0.16l2.25,0.56l-1.09,1.81l-0.04,0.19l0.2,1.72l0.05,0.13l0.9,1.35l-0.39,0.99l-0.21,1.09l-0.48,0.8l-1.2,-0.44l-0.17,-0.01l-1.12,0.24l-0.95,-0.21l-0.35,0.2l-0.25,0.73l0.05,0.29l0.3,0.35l-0.06,0.13l-1.01,-0.15l-1.42,-2.03l-0.32,-1.36l-0.29,-0.23l-0.63,-0.0l-0.95,-1.56l0.41,-1.16l0.01,-0.17l-0.08,-0.35l1.29,-0.56l0.18,-0.22l0.35,-1.97Z\", \"name\": \"Suriname\" }, \"KH\": { \"path\": \"M680.28,257.89l-0.93,-1.2l-1.24,-2.56l-0.56,-2.9l1.45,-1.92l3.07,-0.46l2.26,0.35l2.03,0.98l0.38,-0.11l1.0,-1.55l1.86,0.79l0.52,1.51l-0.28,2.82l-4.05,1.88l-0.12,0.45l0.79,1.1l-2.2,0.17l-2.08,0.98l-1.89,-0.33Z\", \"name\": \"Cambodia\" }, \"SV\": { \"path\": \"M197.02,248.89l0.18,-0.05l0.59,0.17l0.55,0.51l0.64,0.35l0.06,0.22l0.37,0.21l1.01,-0.28l0.38,0.13l0.16,0.13l-0.14,0.81l-0.18,0.38l-1.22,-0.03l-0.84,-0.23l-1.11,-0.52l-1.31,-0.15l-0.49,-0.38l0.02,-0.08l0.76,-0.57l0.46,-0.27l0.11,-0.35Z\", \"name\": \"El Salvador\" }, \"SK\": { \"path\": \"M468.01,150.02l0.05,0.07l0.36,0.1l0.85,-0.37l1.12,1.02l0.33,0.05l1.38,-0.65l1.07,0.3l0.16,0.0l1.69,-0.43l1.95,1.02l-0.51,0.64l-0.45,1.2l-0.32,0.2l-2.55,-0.93l-0.17,-0.01l-0.82,0.2l-0.17,0.11l-0.53,0.68l-0.94,0.32l-0.14,-0.11l-0.29,-0.04l-1.18,0.48l-0.95,0.09l-0.26,0.21l-0.15,0.47l-1.84,0.34l-0.82,-0.31l-1.14,-0.73l-0.2,-0.89l0.42,-0.84l0.91,0.05l0.12,-0.02l0.86,-0.33l0.18,-0.21l0.03,-0.13l0.32,-0.1l0.2,-0.22l0.12,-0.55l0.39,-0.1l0.18,-0.13l0.3,-0.45l0.43,-0.0Z\", \"name\": \"Slovakia\" }, \"KR\": { \"path\": \"M737.31,185.72l0.84,0.08l0.27,-0.12l0.89,-1.2l1.63,-0.13l1.1,-0.2l0.21,-0.16l0.12,-0.24l1.86,2.95l0.59,1.79l0.02,3.17l-0.84,1.38l-2.23,0.55l-1.95,1.14l-1.91,0.21l-0.22,-1.21l0.45,-2.07l-0.01,-0.17l-0.99,-2.67l1.54,-0.4l0.17,-0.46l-1.55,-2.24Z\", \"name\": \"South Korea\" }, \"SI\": { \"path\": \"M455.77,159.59l1.79,0.21l0.18,-0.04l1.2,-0.68l2.12,-0.08l0.21,-0.1l0.38,-0.42l0.1,0.01l0.28,0.62l-1.71,0.71l-0.18,0.22l-0.21,1.1l-0.71,0.26l-0.2,0.28l0.01,0.55l-0.59,-0.04l-0.79,-0.47l-0.38,0.06l-0.36,0.41l-0.84,-0.05l0.05,-0.15l-0.56,-1.24l0.21,-1.17Z\", \"name\": \"Slovenia\" }, \"KP\": { \"path\": \"M747.76,172.02l-0.23,-0.04l-0.26,0.08l-1.09,1.02l-0.78,1.06l-0.06,0.19l0.09,1.95l-1.12,0.57l-0.53,0.58l-0.88,0.82l-1.69,0.51l-1.09,0.79l-0.12,0.22l-0.07,1.17l-0.22,0.25l0.09,0.47l0.96,0.46l1.22,1.1l-0.19,0.37l-0.91,0.16l-1.75,0.14l-0.22,0.12l-0.87,1.18l-0.95,-0.09l-0.3,0.18l-0.97,-0.44l-0.39,0.13l-0.25,0.44l-0.29,0.09l-0.03,-0.2l-0.18,-0.23l-0.62,-0.25l-0.43,-0.29l0.52,-0.97l0.52,-0.3l0.13,-0.38l-0.18,-0.42l0.59,-1.47l0.01,-0.21l-0.16,-0.48l-0.22,-0.2l-1.41,-0.31l-0.82,-0.55l1.74,-1.62l2.73,-1.58l1.62,-1.96l0.96,0.76l0.17,0.06l2.17,0.11l0.31,-0.37l-0.32,-1.31l3.61,-1.21l0.16,-0.13l0.79,-1.34l1.25,1.38Z\", \"name\": \"North Korea\" }, \"SO\": { \"path\": \"M543.8,256.48l0.61,-0.05l1.14,-0.37l1.31,-0.25l0.12,-0.05l1.11,-0.81l0.57,-0.0l0.03,0.39l-0.23,1.49l0.01,1.25l-0.52,0.92l-0.7,2.71l-1.19,2.79l-1.54,3.2l-2.13,3.66l-2.12,2.79l-2.92,3.39l-2.47,2.0l-3.76,2.5l-2.33,1.9l-2.77,3.06l-0.61,1.35l-0.28,0.29l-1.22,-1.69l-0.03,-8.92l2.12,-2.76l0.59,-0.68l1.47,-0.04l0.18,-0.06l2.15,-1.71l3.16,-0.11l0.21,-0.09l7.08,-7.55l1.76,-2.12l1.14,-1.57l0.06,-0.18l0.01,-4.67Z\", \"name\": \"Somalia\" }, \"SN\": { \"path\": \"M379.28,250.34l-0.95,-1.82l-0.09,-0.1l-0.83,-0.6l0.62,-0.28l0.13,-0.11l1.21,-1.8l0.6,-1.31l0.71,-0.68l1.09,0.2l0.18,-0.02l1.17,-0.53l1.25,-0.03l1.17,0.73l1.59,0.65l1.47,1.83l1.59,1.7l0.12,1.56l0.49,1.46l0.1,0.14l0.85,0.65l0.18,0.82l-0.08,0.57l-0.13,0.05l-1.29,-0.19l-0.29,0.13l-0.11,0.16l-0.35,0.04l-1.83,-0.61l-5.84,-0.13l-0.12,0.02l-0.6,0.26l-0.87,-0.06l-1.01,0.32l-0.26,-1.26l1.9,0.04l0.16,-0.04l0.54,-0.32l0.37,-0.02l0.15,-0.05l0.78,-0.5l0.92,0.46l0.12,0.03l1.09,0.04l0.15,-0.03l1.08,-0.57l0.11,-0.44l-0.51,-0.74l-0.39,-0.1l-0.76,0.39l-0.62,-0.01l-0.92,-0.58l-0.18,-0.05l-0.79,0.04l-0.2,0.09l-0.48,0.51l-2.41,0.06Z\", \"name\": \"Senegal\" }, \"SL\": { \"path\": \"M392.19,267.53l-0.44,-0.12l-1.73,-0.97l-1.24,-1.28l-0.4,-0.84l-0.27,-1.65l1.21,-1.0l0.09,-0.12l0.27,-0.66l0.32,-0.41l0.56,-0.05l0.16,-0.07l0.5,-0.41l1.75,0.0l0.59,0.77l0.49,0.96l-0.07,0.64l0.04,0.19l0.36,0.58l-0.03,0.84l0.24,0.2l-0.64,0.65l-1.13,1.37l-0.06,0.14l-0.12,0.66l-0.43,0.58Z\", \"name\": \"Sierra Leone\" }, \"SB\": { \"path\": \"M826.74,311.51l0.23,0.29l-0.95,-0.01l-0.39,-0.63l0.65,0.27l0.45,0.09ZM825.01,308.52l-1.18,-1.39l-0.37,-1.06l0.24,0.0l0.82,1.84l0.49,0.6ZM823.21,309.42l-0.44,0.03l-1.43,-0.24l-0.32,-0.24l0.08,-0.5l1.29,0.31l0.72,0.47l0.11,0.18ZM817.9,303.81l2.59,1.44l0.3,0.41l-1.21,-0.66l-1.34,-0.89l-0.34,-0.3ZM813.77,302.4l0.48,0.34l0.1,0.08l-0.33,-0.17l-0.25,-0.25Z\", \"name\": \"Solomon Islands\" }, \"SA\": { \"path\": \"M528.24,243.1l-0.2,-0.69l-0.07,-0.12l-0.69,-0.71l-0.18,-0.94l-0.12,-0.19l-1.24,-0.89l-1.28,-2.09l-0.7,-2.08l-0.07,-0.11l-1.73,-1.79l-0.11,-0.07l-1.03,-0.39l-1.57,-2.36l-0.27,-1.72l0.1,-1.53l-0.03,-0.15l-1.44,-2.93l-1.25,-1.13l-1.34,-0.56l-0.72,-1.33l0.11,-0.49l-0.02,-0.2l-0.7,-1.38l-0.08,-0.1l-0.68,-0.56l-0.97,-1.98l-2.8,-4.03l-0.25,-0.13l-0.85,0.01l0.29,-1.11l0.12,-0.97l0.23,-0.81l2.52,0.39l0.23,-0.06l1.08,-0.84l0.6,-0.95l1.78,-0.35l0.22,-0.17l0.37,-0.83l0.74,-0.42l0.08,-0.46l-2.17,-2.4l4.55,-1.26l0.12,-0.06l0.36,-0.32l2.83,0.71l3.67,1.91l7.04,5.5l0.17,0.06l4.64,0.22l2.06,0.24l0.55,1.15l0.28,0.17l1.56,-0.06l0.9,2.15l0.14,0.15l1.14,0.57l0.39,0.85l0.11,0.13l1.59,1.06l0.12,0.91l-0.23,0.83l0.01,0.18l0.32,0.9l0.07,0.11l0.68,0.7l0.33,0.86l0.37,0.65l0.09,0.1l0.76,0.53l0.25,0.04l0.45,-0.12l0.35,0.75l0.1,0.63l0.96,2.68l0.23,0.19l7.53,1.33l0.27,-0.09l0.24,-0.26l0.87,1.41l-1.58,4.96l-7.34,2.54l-7.28,1.02l-2.34,1.17l-0.12,0.1l-1.74,2.63l-0.86,0.32l-0.49,-0.68l-0.28,-0.12l-0.92,0.12l-2.32,-0.25l-0.41,-0.23l-0.15,-0.04l-2.89,0.06l-0.63,0.2l-0.91,-0.59l-0.43,0.11l-0.66,1.27l-0.03,0.21l0.21,0.89l-0.6,0.45Z\", \"name\": \"Saudi Arabia\" }, \"SE\": { \"path\": \"M476.42,90.44l-0.15,0.1l-2.43,2.86l-0.07,0.24l0.36,2.31l-3.84,3.1l-4.83,3.38l-0.11,0.15l-1.82,5.45l0.03,0.26l1.78,2.68l2.27,1.99l-2.13,3.88l-2.49,0.82l-0.2,0.24l-0.95,6.05l-1.32,3.09l-2.82,-0.32l-0.3,0.16l-1.34,2.64l-2.48,0.14l-0.76,-3.15l-2.09,-4.04l-1.85,-5.01l1.03,-1.98l2.06,-2.53l0.06,-0.13l0.83,-4.45l-0.06,-0.25l-1.54,-1.86l-0.15,-5.0l1.52,-3.48l2.28,0.06l0.27,-0.16l0.87,-1.59l-0.01,-0.31l-0.8,-1.21l3.79,-5.63l4.07,-7.54l2.23,0.01l0.29,-0.22l0.59,-2.15l4.46,0.66l0.34,-0.26l0.34,-2.64l1.21,-0.14l3.24,2.08l3.78,2.85l0.06,6.37l0.03,0.14l0.67,1.29l-3.95,1.07Z\", \"name\": \"Sweden\" }, \"SD\": { \"path\": \"M505.98,259.75l-0.31,-0.9l-0.1,-0.14l-1.2,-0.93l-0.27,-1.66l0.29,-1.83l-0.25,-0.34l-1.16,-0.17l-0.33,0.21l-0.11,0.37l-1.3,0.11l-0.21,0.49l0.55,0.68l0.18,1.29l-1.31,1.33l-1.18,1.72l-1.04,0.21l-2.0,-1.4l-0.32,-0.02l-0.95,0.52l-0.14,0.16l-0.21,0.6l-1.16,0.43l-0.19,0.23l-0.04,0.27l-2.08,0.0l-0.25,-0.39l-0.24,-0.13l-1.81,-0.09l-0.14,0.03l-0.8,0.38l-0.49,-0.16l-1.22,-1.39l-0.42,-0.67l-0.31,-0.14l-1.81,0.35l-0.2,0.14l-0.72,1.24l-0.61,2.14l-0.73,0.4l-0.62,0.22l-0.83,-0.68l-0.12,-0.6l0.38,-0.97l0.01,-1.14l-0.08,-0.2l-1.39,-1.53l-0.25,-0.97l0.03,-0.57l-0.11,-0.25l-0.81,-0.66l-0.03,-1.34l-0.04,-0.14l-0.52,-0.98l-0.31,-0.15l-0.42,0.07l0.12,-0.44l0.63,-1.03l0.03,-0.23l-0.24,-0.88l0.69,-0.66l0.02,-0.41l-0.4,-0.46l0.58,-1.39l1.04,-1.71l1.97,0.16l0.32,-0.3l-0.12,-10.24l0.02,-0.8l2.59,-0.01l0.3,-0.3l0.0,-4.92l29.19,0.0l0.68,2.17l-0.4,0.35l-0.1,0.27l0.36,2.69l0.93,3.15l0.12,0.16l2.05,1.4l-0.99,1.15l-1.75,0.4l-0.15,0.08l-0.79,0.79l-0.08,0.17l-0.24,1.69l-1.07,3.75l-0.0,0.16l0.25,0.96l-0.38,2.1l-0.98,2.41l-1.52,1.3l-1.07,1.94l-0.25,0.99l-1.08,0.64l-0.13,0.18l-0.46,1.65Z\", \"name\": \"Sudan\" }, \"DO\": { \"path\": \"M241.7,234.97l0.15,-0.22l1.73,0.01l1.43,0.64l0.15,0.03l0.45,-0.04l0.36,0.74l0.28,0.17l1.02,-0.04l-0.04,0.43l0.27,0.33l1.03,0.09l0.91,0.7l-0.57,0.64l-0.99,-0.47l-0.16,-0.03l-1.11,0.11l-0.79,-0.12l-0.26,0.09l-0.38,0.4l-0.66,0.11l-0.28,-0.45l-0.38,-0.12l-0.83,0.37l-0.14,0.13l-0.85,1.49l-0.27,-0.17l-0.1,-0.58l0.05,-0.67l-0.07,-0.21l-0.44,-0.53l0.35,-0.25l0.12,-0.19l0.19,-1.0l-0.2,-1.4Z\", \"name\": \"Dominican Republic\" }, \"DJ\": { \"path\": \"M528.78,253.36l0.34,0.45l-0.06,0.76l-1.26,0.54l-0.05,0.53l0.82,0.53l-0.57,0.83l-0.3,-0.25l-0.27,-0.05l-0.56,0.17l-1.07,-0.03l-0.04,-0.56l-0.16,-0.56l0.76,-1.07l0.76,-0.97l0.89,0.18l0.25,-0.06l0.51,-0.42Z\", \"name\": \"Djibouti\" }, \"DK\": { \"path\": \"M452.4,129.07l-1.27,2.39l-2.25,-1.69l-0.26,-1.08l3.15,-1.0l0.63,1.39ZM447.87,126.25l-0.35,0.76l-0.47,-0.24l-0.38,0.09l-1.8,2.53l-0.03,0.29l0.56,1.4l-1.22,0.4l-1.68,-0.41l-0.92,-1.76l-0.07,-3.47l0.38,-0.88l0.62,-0.93l2.07,-0.21l0.19,-0.1l0.84,-0.95l1.5,-0.76l-0.06,1.26l-0.7,1.1l-0.03,0.25l0.3,1.0l0.18,0.19l1.06,0.42Z\", \"name\": \"Denmark\" }, \"DE\": { \"path\": \"M445.51,131.69l0.03,0.94l0.21,0.28l2.32,0.74l-0.02,1.0l0.37,0.3l2.55,-0.65l1.36,-0.89l2.63,1.27l1.09,1.01l0.51,1.51l-0.6,0.78l-0.0,0.36l0.88,1.17l0.58,1.68l-0.18,1.08l0.03,0.18l0.87,1.81l-0.66,0.2l-0.55,-0.32l-0.36,0.05l-0.58,0.58l-1.73,0.62l-0.99,0.84l-1.77,0.7l-0.16,0.4l0.42,0.94l0.26,1.34l0.14,0.2l1.25,0.76l1.22,1.2l-0.71,1.2l-0.81,0.37l-0.17,0.32l0.34,1.99l-0.04,0.09l-0.47,-0.39l-0.17,-0.07l-1.2,-0.1l-1.85,0.57l-2.15,-0.13l-0.29,0.18l-0.21,0.5l-0.96,-0.67l-0.24,-0.05l-0.67,0.16l-2.6,-0.94l-0.34,0.1l-0.42,0.57l-1.64,-0.02l0.26,-1.88l1.24,-2.15l-0.21,-0.45l-3.54,-0.58l-0.98,-0.71l0.12,-1.26l-0.05,-0.2l-0.44,-0.64l0.27,-2.18l-0.38,-3.14l1.17,-0.0l0.27,-0.17l0.63,-1.26l0.65,-3.17l-0.02,-0.17l-0.41,-1.0l0.32,-0.47l1.77,-0.16l0.37,0.6l0.47,0.06l1.7,-1.69l0.06,-0.33l-0.55,-1.24l-0.09,-1.51l1.5,0.36l0.16,-0.01l1.22,-0.4Z\", \"name\": \"Germany\" }, \"YE\": { \"path\": \"M553.53,242.65l-1.51,0.58l-0.17,0.16l-0.48,1.14l-0.07,0.79l-2.31,1.0l-3.98,1.19l-2.28,1.8l-0.97,0.12l-0.7,-0.14l-0.23,0.05l-1.42,1.03l-1.51,0.47l-2.07,0.13l-0.68,0.15l-0.17,0.1l-0.49,0.6l-0.57,0.16l-0.18,0.13l-0.3,0.49l-1.06,-0.05l-0.13,0.02l-0.73,0.32l-1.48,-0.11l-0.55,-1.26l0.07,-1.32l-0.04,-0.16l-0.39,-0.72l-0.48,-1.85l-0.52,-0.79l0.08,-0.02l0.22,-0.36l-0.23,-1.05l0.24,-0.39l0.04,-0.19l-0.09,-0.95l0.96,-0.72l0.11,-0.31l-0.23,-0.98l0.46,-0.88l0.75,0.49l0.26,0.03l0.63,-0.22l2.76,-0.06l0.5,0.25l2.42,0.26l0.85,-0.11l0.52,0.71l0.35,0.1l1.17,-0.43l0.15,-0.12l1.75,-2.64l2.22,-1.11l6.95,-0.96l2.55,5.58Z\", \"name\": \"Yemen\" }, \"AT\": { \"path\": \"M463.17,154.15l-0.14,0.99l-1.15,0.01l-0.24,0.47l0.39,0.56l-0.75,1.84l-0.36,0.4l-2.06,0.07l-0.14,0.04l-1.18,0.67l-1.96,-0.23l-3.43,-0.78l-0.5,-0.97l-0.33,-0.16l-2.47,0.55l-0.2,0.16l-0.18,0.37l-1.27,-0.38l-1.28,-0.09l-0.81,-0.41l0.25,-0.51l0.03,-0.18l-0.05,-0.28l0.35,-0.08l1.16,0.81l0.45,-0.13l0.27,-0.64l2.0,0.12l1.84,-0.57l1.05,0.09l0.71,0.59l0.47,-0.11l0.23,-0.54l0.02,-0.17l-0.32,-1.85l0.69,-0.31l0.13,-0.12l0.73,-1.23l1.61,0.89l0.35,-0.04l1.35,-1.27l0.7,-0.19l1.84,0.93l0.18,0.03l1.08,-0.15l0.81,0.43l-0.07,0.15l-0.02,0.2l0.24,1.06Z\", \"name\": \"Austria\" }, \"DZ\": { \"path\": \"M450.58,224.94l-8.31,4.86l-7.23,5.12l-3.46,1.13l-2.42,0.22l-0.02,-1.33l-0.2,-0.28l-1.15,-0.42l-1.45,-0.69l-0.55,-1.13l-0.1,-0.12l-8.45,-5.72l-17.72,-12.17l0.03,-0.38l-0.02,-3.21l3.84,-1.91l2.46,-0.41l2.1,-0.75l0.14,-0.11l0.9,-1.3l2.84,-1.06l0.19,-0.27l0.09,-1.81l1.21,-0.2l0.15,-0.07l1.06,-0.96l3.19,-0.46l0.23,-0.18l0.46,-1.08l-0.08,-0.34l-0.6,-0.54l-0.83,-2.85l-0.18,-1.8l-0.82,-1.57l2.13,-1.37l2.65,-0.49l0.13,-0.05l1.55,-1.15l2.34,-0.85l4.2,-0.51l4.07,-0.23l1.21,0.41l0.23,-0.01l2.3,-1.11l2.52,-0.02l0.94,0.62l0.2,0.05l1.25,-0.13l-0.36,1.03l-0.01,0.14l0.39,2.66l-0.56,2.2l-1.49,1.52l-0.08,0.24l0.22,2.12l0.11,0.2l1.94,1.58l0.02,0.54l0.12,0.23l1.45,1.06l1.04,4.85l0.81,2.42l0.13,1.19l-0.43,2.17l0.17,1.28l-0.31,1.53l0.2,1.56l-0.9,1.02l-0.01,0.38l1.43,1.88l0.09,1.06l0.04,0.13l0.89,1.48l0.37,0.12l1.03,-0.43l1.79,1.12l0.89,1.34Z\", \"name\": \"Algeria\" }, \"US\": { \"path\": \"M892.64,99.05l1.16,0.57l0.21,0.02l1.45,-0.38l1.92,0.99l2.17,0.47l-1.65,0.72l-1.75,-0.79l-0.93,-0.7l-0.21,-0.06l-2.11,0.22l-0.35,-0.2l0.09,-0.87ZM183.29,150.37l0.39,1.54l0.12,0.17l0.78,0.55l0.14,0.05l1.74,0.2l2.52,0.5l2.4,0.98l0.17,0.02l1.96,-0.4l3.01,0.81l0.91,-0.02l2.22,-0.88l4.67,2.33l3.86,2.01l0.21,0.71l0.15,0.18l0.33,0.17l-0.02,0.05l0.23,0.43l0.67,0.1l0.21,-0.05l0.1,-0.07l0.05,0.29l0.09,0.16l0.5,0.5l0.21,0.09l0.56,0.0l0.13,0.13l-0.2,0.36l0.12,0.41l2.49,1.39l0.99,5.24l-0.69,1.68l-1.16,1.64l-0.6,1.18l-0.06,0.31l0.04,0.22l0.28,0.43l0.11,0.1l0.85,0.47l0.15,0.04l0.63,0.0l0.14,-0.04l2.87,-1.58l2.6,-0.49l3.28,-1.5l0.17,-0.23l0.04,-0.43l-0.23,-0.93l-0.24,-0.39l0.74,-0.32l4.7,-0.01l0.25,-0.13l0.77,-1.15l2.9,-2.41l1.04,-0.52l8.35,-0.02l0.28,-0.21l0.2,-0.6l0.7,-0.14l1.06,-0.48l0.13,-0.11l0.92,-1.49l0.75,-2.39l1.67,-2.08l0.59,0.6l0.3,0.07l1.52,-0.49l0.88,0.72l-0.0,4.14l0.08,0.2l1.6,1.72l0.31,0.72l-2.42,1.35l-2.55,1.05l-2.64,0.9l-0.14,0.11l-1.33,1.81l-0.44,0.7l-0.05,0.15l-0.03,1.6l0.03,0.14l0.83,1.59l0.24,0.16l0.78,0.06l-1.15,0.33l-1.25,-0.04l-1.83,0.52l-2.51,0.29l-2.17,0.88l-0.17,0.36l0.33,0.22l3.55,-0.54l0.15,0.11l-2.87,0.73l-1.19,0.0l-0.16,-0.33l-0.36,0.06l-0.76,0.82l0.17,0.5l0.42,0.08l-0.45,1.75l-1.4,1.74l-0.04,-0.17l-0.21,-0.22l-0.48,-0.13l-0.77,-0.69l-0.36,-0.03l-0.12,0.34l0.52,1.58l0.09,0.14l0.52,0.43l0.03,0.87l-0.74,1.05l-0.39,0.63l0.05,-0.12l-0.08,-0.34l-1.19,-1.03l-0.28,-2.31l-0.26,-0.26l-0.32,0.19l-0.48,1.27l-0.01,0.19l0.39,1.33l-1.14,-0.31l-0.36,0.18l0.14,0.38l1.57,0.85l0.1,2.58l0.22,0.28l0.55,0.15l0.21,0.81l0.33,2.72l-1.46,1.94l-2.5,0.81l-0.12,0.07l-1.58,1.58l-1.15,0.17l-0.15,0.06l-1.27,1.03l-0.09,0.13l-0.32,0.85l-2.71,1.79l-1.45,1.37l-1.18,1.64l-0.05,0.12l-0.39,1.96l0.0,0.13l0.44,1.91l0.85,2.37l1.1,1.91l0.03,1.2l1.16,3.07l-0.08,1.74l-0.1,0.99l-0.57,1.48l-0.54,0.24l-0.97,-0.26l-0.34,-1.02l-0.12,-0.16l-0.89,-0.58l-2.44,-4.28l-0.34,-0.94l0.49,-1.71l-0.02,-0.21l-0.7,-1.5l-2.0,-2.35l-0.11,-0.08l-0.98,-0.42l-0.25,0.01l-2.42,1.19l-0.26,-0.08l-1.26,-1.29l-1.57,-0.68l-0.16,-0.02l-2.79,0.34l-2.18,-0.3l-1.98,0.19l-1.12,0.45l-0.14,0.44l0.4,0.65l-0.04,1.02l0.09,0.22l0.29,0.3l-0.06,0.05l-0.77,-0.33l-0.26,0.01l-0.87,0.48l-1.64,-0.08l-1.79,-1.39l-0.23,-0.06l-2.11,0.33l-1.75,-0.61l-0.14,-0.01l-1.61,0.2l-2.11,0.64l-0.11,0.06l-2.25,1.99l-2.53,1.21l-1.43,1.38l-0.58,1.22l-0.03,0.12l-0.03,1.86l0.13,1.32l0.3,0.62l-0.46,0.04l-1.71,-0.57l-1.85,-0.79l-0.63,-1.14l-0.54,-1.85l-0.07,-0.12l-1.45,-1.51l-0.86,-1.58l-1.26,-1.87l-0.09,-0.09l-1.76,-1.09l-0.17,-0.04l-2.05,0.05l-0.23,0.12l-1.44,1.97l-1.84,-0.72l-1.19,-0.76l-0.6,-1.45l-0.9,-1.52l-1.49,-1.21l-1.27,-0.87l-0.89,-0.96l-0.22,-0.1l-4.34,-0.0l-0.3,0.3l-0.0,0.84l-6.62,0.02l-5.66,-1.93l-3.48,-1.24l0.11,-0.25l-0.3,-0.42l-3.18,0.3l-2.6,0.2l-0.35,-1.19l-0.08,-0.13l-1.62,-1.61l-0.13,-0.08l-1.02,-0.29l-0.22,-0.66l-0.25,-0.2l-1.31,-0.13l-0.82,-0.7l-0.16,-0.07l-2.25,-0.27l-0.48,-0.34l-0.28,-1.44l-0.07,-0.14l-2.41,-2.84l-2.03,-3.89l0.08,-0.58l-0.1,-0.27l-1.08,-0.94l-1.87,-2.36l-0.33,-2.31l-0.07,-0.15l-1.24,-1.5l0.52,-2.4l-0.09,-2.57l-0.78,-2.3l0.96,-2.83l0.61,-5.66l-0.46,-4.26l-0.79,-2.71l-0.68,-1.4l0.13,-0.26l3.24,0.97l1.28,2.88l0.52,0.06l0.62,-0.84l0.06,-0.22l-0.4,-2.61l-0.74,-2.29l68.9,-0.0l0.3,-0.3l0.01,-0.95l0.32,-0.01ZM32.5,67.43l1.75,1.99l0.41,0.04l1.02,-0.81l3.79,0.25l-0.1,0.72l0.24,0.34l3.83,0.77l2.6,-0.44l5.21,1.41l4.84,0.43l1.9,0.57l0.15,0.01l3.25,-0.71l3.72,1.32l2.52,0.58l-0.03,38.14l0.29,0.3l2.41,0.11l2.34,1.0l1.7,1.59l2.22,2.42l0.42,0.03l2.41,-2.04l2.25,-1.08l1.23,1.76l1.71,1.53l2.24,1.62l1.54,2.56l2.56,4.09l0.11,0.11l4.1,2.17l0.06,1.93l-1.12,1.35l-1.22,-1.14l-2.08,-1.05l-0.68,-2.94l-0.09,-0.16l-3.18,-2.84l-1.32,-3.35l-0.25,-0.19l-2.43,-0.24l-3.93,-0.09l-2.85,-1.02l-5.24,-3.85l-6.77,-2.04l-3.52,0.3l-4.84,-1.7l-2.96,-1.6l-0.23,-0.02l-2.78,0.8l-0.21,0.35l0.46,2.31l-1.11,0.19l-2.9,0.78l-2.24,1.26l-2.42,0.68l-0.29,-1.79l1.07,-3.49l2.54,-1.11l0.12,-0.45l-0.69,-0.96l-0.41,-0.07l-3.19,2.12l-1.76,2.54l-3.57,2.62l-0.03,0.46l1.63,1.59l-2.14,2.38l-2.64,1.49l-2.49,1.09l-0.16,0.17l-0.58,1.48l-3.8,1.79l-0.14,0.14l-0.75,1.57l-2.75,1.41l-1.62,-0.25l-0.16,0.02l-2.35,0.98l-2.54,1.19l-2.06,1.15l-4.05,0.93l-0.1,-0.15l2.45,-1.45l2.49,-1.1l2.61,-1.88l3.03,-0.39l0.19,-0.1l1.2,-1.41l3.43,-2.11l0.61,-0.75l1.81,-1.24l0.13,-0.2l0.42,-2.7l1.24,-2.12l-0.03,-0.35l-0.34,-0.09l-2.73,1.05l-0.67,-0.53l-0.39,0.02l-1.13,1.11l-1.43,-1.62l-0.49,0.06l-0.41,0.8l-0.67,-1.31l-0.42,-0.12l-2.43,1.43l-1.18,-0.0l-0.18,-1.86l0.43,-1.3l-0.09,-0.33l-1.61,-1.33l-0.26,-0.06l-3.11,0.68l-2.0,-1.66l-1.61,-0.85l-0.01,-1.97l-0.11,-0.23l-1.76,-1.48l0.86,-1.96l2.01,-2.13l0.88,-1.94l1.79,-0.25l1.65,0.6l0.31,-0.06l1.91,-1.8l1.67,0.31l0.22,-0.04l1.91,-1.23l0.13,-0.33l-0.47,-1.82l-0.15,-0.19l-1.0,-0.52l1.51,-1.27l0.09,-0.34l-0.29,-0.19l-1.62,0.06l-2.66,0.88l-0.13,0.09l-0.62,0.72l-1.77,-0.8l-0.16,-0.02l-3.48,0.44l-3.5,-0.92l-1.06,-1.61l-2.78,-2.09l3.07,-1.51l5.52,-2.01l1.65,0.0l-0.28,1.73l0.31,0.35l5.29,-0.16l0.23,-0.49l-2.03,-2.59l-0.1,-0.08l-3.03,-1.58l-1.79,-2.12l-2.4,-1.83l-3.18,-1.27l1.13,-1.84l4.28,-0.14l0.15,-0.05l3.16,-2.0l0.13,-0.17l0.57,-2.07l2.43,-2.02l2.42,-0.52l4.67,-1.98l2.22,0.29l0.2,-0.04l3.74,-2.37l3.57,0.91ZM37.66,123.49l-2.31,1.26l-1.04,-0.75l-0.31,-1.35l2.06,-1.16l1.24,-0.51l1.48,0.22l0.76,0.81l-1.89,1.49ZM30.89,233.84l1.2,0.57l0.35,0.3l0.48,0.69l-1.6,0.86l-0.3,0.31l-0.24,-0.14l0.05,-0.54l-0.02,-0.15l-0.36,-0.83l0.05,-0.12l0.39,-0.38l0.07,-0.31l-0.09,-0.27ZM29.06,231.89l0.5,0.14l0.31,0.19l-0.46,0.1l-0.34,-0.43ZM25.02,230.13l0.2,-0.11l0.4,0.47l-0.43,-0.05l-0.17,-0.31ZM21.29,228.68l0.1,-0.07l0.22,0.02l0.02,0.21l-0.02,0.02l-0.32,-0.18ZM6.0,113.33l-1.19,0.45l-1.5,-0.64l-0.94,-0.63l1.76,-0.46l1.71,0.29l0.16,0.98Z\", \"name\": \"United States of America\" }, \"LV\": { \"path\": \"M473.99,127.16l0.07,-2.15l1.15,-2.11l2.05,-1.07l1.84,2.48l0.25,0.12l2.01,-0.07l0.29,-0.25l0.45,-2.58l1.85,-0.56l0.98,0.4l2.13,1.33l0.16,0.05l1.97,0.01l1.02,0.7l0.21,1.67l0.71,1.84l-2.44,1.23l-1.36,0.53l-2.28,-1.62l-0.12,-0.05l-1.18,-0.2l-0.28,-0.6l-0.31,-0.17l-2.43,0.35l-4.17,-0.23l-0.12,0.02l-2.45,0.93Z\", \"name\": \"Latvia\" }, \"UY\": { \"path\": \"M276.9,363.17l1.3,-0.23l2.4,2.04l0.22,0.07l0.82,-0.07l2.48,1.7l1.93,1.5l1.28,1.67l-0.95,1.14l-0.04,0.31l0.63,1.45l-0.96,1.57l-2.65,1.47l-1.73,-0.53l-0.15,-0.01l-1.25,0.28l-2.22,-1.16l-0.16,-0.03l-1.56,0.08l-1.33,-1.36l0.17,-1.58l0.48,-0.55l0.07,-0.2l-0.02,-2.74l0.66,-2.8l0.57,-2.02Z\", \"name\": \"Uruguay\" }, \"LB\": { \"path\": \"M510.44,198.11l-0.48,0.03l-0.26,0.17l-0.15,0.32l-0.21,-0.0l0.72,-1.85l1.19,-1.9l0.74,0.09l0.27,0.73l-1.19,0.93l-0.09,0.13l-0.54,1.36Z\", \"name\": \"Lebanon\" }, \"LA\": { \"path\": \"M684.87,248.8l0.61,-0.86l0.05,-0.16l0.11,-2.17l-0.08,-0.22l-1.96,-2.16l-0.15,-2.44l-0.08,-0.18l-1.9,-2.1l-0.19,-0.1l-1.89,-0.18l-0.29,0.15l-0.42,0.76l-1.21,0.06l-0.67,-0.41l-0.31,-0.0l-2.2,1.29l-0.05,-1.77l0.61,-2.7l-0.27,-0.37l-1.44,-0.1l-0.12,-1.31l-0.12,-0.21l-0.87,-0.65l0.38,-0.68l1.76,-1.41l0.08,0.22l0.27,0.2l1.33,0.07l0.31,-0.34l-0.35,-2.75l0.85,-0.25l1.32,1.88l1.11,2.36l0.27,0.17l2.89,0.02l0.78,1.82l-1.32,0.56l-0.12,0.09l-0.72,0.93l0.1,0.45l2.93,1.52l3.62,5.27l1.88,1.78l0.58,1.67l-0.38,2.11l-1.87,-0.79l-0.37,0.11l-0.99,1.54l-1.51,-0.73Z\", \"name\": \"Laos\" }, \"TW\": { \"path\": \"M725.6,222.5l-1.5,4.22l-0.82,1.65l-1.01,-1.7l-0.26,-1.8l1.4,-2.48l1.8,-1.81l0.76,0.53l-0.38,1.39Z\", \"name\": \"Taiwan\" }, \"TT\": { \"path\": \"M266.35,259.46l0.41,-0.39l0.09,-0.23l-0.04,-0.75l1.14,-0.26l0.2,0.03l-0.07,1.37l-1.73,0.23Z\", \"name\": \"Trinidad and Tobago\" }, \"TR\": { \"path\": \"M513.25,175.38l3.63,1.17l0.14,0.01l2.88,-0.45l2.11,0.26l0.18,-0.03l2.9,-1.53l2.51,-0.13l2.25,1.37l0.36,0.88l-0.23,1.36l0.19,0.33l1.81,0.72l0.61,0.53l-1.31,0.64l-0.16,0.34l0.76,3.24l-0.44,0.8l0.01,0.3l1.19,2.02l-0.71,0.29l-0.74,-0.62l-0.15,-0.07l-2.91,-0.37l-0.15,0.02l-1.04,0.43l-2.78,0.44l-1.44,-0.03l-2.83,1.06l-1.95,0.01l-1.28,-0.52l-0.2,-0.01l-2.62,0.76l-0.7,-0.48l-0.47,0.22l-0.13,1.49l-1.01,0.94l-0.58,-0.82l0.79,-0.9l0.04,-0.34l-0.31,-0.15l-1.46,0.23l-2.03,-0.64l-0.3,0.07l-1.65,1.58l-3.58,0.3l-1.94,-1.47l-0.17,-0.06l-2.7,-0.1l-0.28,0.17l-0.51,1.06l-1.47,0.29l-2.32,-1.46l-0.17,-0.05l-2.55,0.05l-1.4,-2.7l-1.72,-1.54l1.11,-2.06l-0.07,-0.37l-1.35,-1.19l2.47,-2.51l3.74,-0.11l0.26,-0.17l0.96,-2.07l4.56,0.38l0.19,-0.05l2.97,-1.92l2.84,-0.83l4.03,-0.06l4.31,2.08ZM488.85,176.8l-1.81,1.38l-0.57,-1.01l0.02,-0.36l0.45,-0.25l0.13,-0.15l0.78,-1.87l-0.11,-0.37l-0.72,-0.47l1.91,-0.71l1.89,0.35l0.25,0.97l0.17,0.2l1.87,0.83l-0.19,0.31l-2.82,0.16l-0.18,0.07l-1.06,0.91Z\", \"name\": \"Turkey\" }, \"LK\": { \"path\": \"M625.44,266.07l-0.35,2.4l-0.9,0.61l-1.91,0.5l-1.04,-1.75l-0.43,-3.5l1.0,-3.6l1.34,1.09l1.13,1.72l1.16,2.52Z\", \"name\": \"Sri Lanka\" }, \"TN\": { \"path\": \"M444.91,206.18l-0.99,-4.57l-0.12,-0.18l-1.43,-1.04l-0.02,-0.53l-0.11,-0.22l-1.95,-1.59l-0.19,-1.85l1.44,-1.47l0.08,-0.14l0.59,-2.34l-0.38,-2.77l0.44,-1.28l2.52,-1.08l1.41,0.28l-0.06,1.2l0.43,0.28l1.81,-0.9l0.02,0.06l-1.14,1.28l-0.08,0.2l-0.02,1.32l0.11,0.24l0.74,0.6l-0.29,2.18l-1.56,1.35l-0.09,0.32l0.48,1.54l0.28,0.21l1.11,0.04l0.55,1.17l0.15,0.14l0.76,0.35l-0.12,1.79l-1.1,0.72l-0.8,0.91l-1.68,1.04l-0.13,0.32l0.25,1.08l-0.18,0.96l-0.74,0.39Z\", \"name\": \"Tunisia\" }, \"TL\": { \"path\": \"M734.21,307.22l0.17,-0.34l1.99,-0.52l1.72,-0.08l0.78,-0.3l0.29,0.1l-0.43,0.32l-2.57,1.09l-1.71,0.59l-0.05,-0.49l-0.19,-0.36Z\", \"name\": \"East Timor\" }, \"TM\": { \"path\": \"M553.16,173.51l-0.12,1.0l-0.26,-0.65l0.38,-0.34ZM553.54,173.16l0.13,-0.12l0.43,-0.09l-0.56,0.21ZM555.68,172.6l0.65,-0.14l1.53,0.76l1.71,2.29l0.27,0.12l1.27,-0.14l2.81,-0.04l0.29,-0.38l-0.35,-1.27l1.98,-0.97l1.96,-1.63l3.05,1.44l0.25,2.23l0.14,0.22l0.96,0.61l0.18,0.05l2.61,-0.13l0.68,0.44l1.2,2.97l0.1,0.13l2.85,2.03l1.67,1.41l2.66,1.45l3.13,1.17l-0.05,1.23l-0.36,-0.04l-1.12,-0.73l-0.44,0.14l-0.34,0.89l-1.96,0.52l-0.22,0.23l-0.47,2.17l-1.26,0.78l-1.93,0.42l-0.21,0.18l-0.46,1.14l-1.64,0.33l-2.3,-0.97l-0.2,-2.23l-0.28,-0.27l-1.76,-0.1l-2.78,-2.48l-0.15,-0.07l-1.95,-0.31l-2.82,-1.48l-1.78,-0.27l-0.18,0.03l-1.03,0.51l-1.6,-0.08l-0.22,0.08l-1.72,1.6l-1.83,0.46l-0.39,-1.7l0.36,-3.0l-0.16,-0.3l-1.73,-0.88l0.57,-1.77l-0.25,-0.39l-1.33,-0.14l0.41,-1.85l2.05,0.63l0.21,-0.01l2.2,-0.95l0.09,-0.49l-1.78,-1.75l-0.69,-1.66l-0.07,-0.03Z\", \"name\": \"Turkmenistan\" }, \"TJ\": { \"path\": \"M597.99,178.71l-0.23,0.23l-2.57,-0.47l-0.35,0.25l-0.24,1.7l0.32,0.34l2.66,-0.22l3.15,0.95l4.47,-0.42l0.58,2.45l0.39,0.21l0.71,-0.25l1.22,0.53l-0.06,1.01l0.29,1.28l-2.19,-0.0l-1.71,-0.21l-0.23,0.07l-1.51,1.25l-1.05,0.27l-0.77,0.51l-0.71,-0.67l0.22,-2.28l-0.24,-0.32l-0.43,-0.08l0.17,-0.57l-0.16,-0.36l-1.36,-0.66l-0.34,0.05l-1.08,1.01l-0.09,0.15l-0.25,1.09l-0.24,0.26l-1.36,-0.05l-0.27,0.14l-0.65,1.06l-0.58,-0.39l-0.3,-0.02l-1.68,0.86l-0.36,-0.16l1.28,-2.65l0.02,-0.2l-0.54,-2.17l-0.18,-0.21l-1.53,-0.58l0.41,-0.82l1.89,0.13l0.26,-0.12l1.19,-1.63l0.77,-1.82l2.66,-0.55l-0.33,0.87l0.01,0.23l0.36,0.82l0.3,0.18l0.23,-0.02Z\", \"name\": \"Tajikistan\" }, \"LS\": { \"path\": \"M493.32,359.69l0.69,0.65l-0.65,1.12l-0.38,0.8l-1.27,0.39l-0.18,0.15l-0.4,0.77l-0.59,0.18l-1.59,-1.78l1.16,-1.5l1.3,-1.02l0.97,-0.46l0.94,0.72Z\", \"name\": \"Lesotho\" }, \"TH\": { \"path\": \"M677.42,253.68l-1.7,-0.88l-0.14,-0.03l-1.77,0.04l0.3,-1.64l-0.3,-0.35l-2.21,0.01l-0.3,0.28l-0.2,2.76l-2.15,5.9l-0.02,0.13l0.17,1.83l0.28,0.27l1.45,0.07l0.93,2.1l0.44,2.15l0.08,0.15l1.4,1.44l0.16,0.09l1.43,0.27l1.04,1.05l-0.58,0.73l-1.24,0.22l-0.15,-0.99l-0.15,-0.22l-2.04,-1.1l-0.36,0.06l-0.23,0.23l-0.72,-0.71l-0.41,-1.18l-0.06,-0.11l-1.33,-1.42l-1.22,-1.2l-0.5,0.13l-0.15,0.54l-0.14,-0.41l0.26,-1.48l0.73,-2.38l1.2,-2.57l1.37,-2.35l0.02,-0.27l-0.95,-2.26l0.03,-1.19l-0.29,-1.42l-0.06,-0.13l-1.65,-2.0l-0.46,-0.99l0.62,-0.34l0.13,-0.15l0.92,-2.23l-0.02,-0.27l-1.05,-1.74l-1.57,-1.86l-1.04,-1.96l0.76,-0.34l0.16,-0.16l1.07,-2.63l1.58,-0.1l0.16,-0.06l1.43,-1.11l1.24,-0.52l0.84,0.62l0.13,1.43l0.28,0.27l1.34,0.09l-0.54,2.39l0.05,2.39l0.45,0.25l2.48,-1.45l0.6,0.36l0.17,0.04l1.47,-0.07l0.25,-0.15l0.41,-0.73l1.58,0.15l1.76,1.93l0.15,2.44l0.08,0.18l1.94,2.15l-0.1,1.96l-0.66,0.93l-2.25,-0.34l-3.24,0.49l-0.19,0.12l-1.6,2.12l-0.06,0.24l0.48,2.46Z\", \"name\": \"Thailand\" }, \"TF\": { \"path\": \"M593.76,417.73l1.38,0.84l2.15,0.37l0.04,0.31l-0.59,1.24l-3.36,0.19l-0.05,-1.38l0.43,-1.56Z\", \"name\": \"French Southern and Antarctic Lands\" }, \"TG\": { \"path\": \"M425.23,269.29l-1.49,0.4l-0.43,-0.68l-0.64,-1.54l-0.18,-1.16l0.54,-2.21l-0.04,-0.24l-0.59,-0.86l-0.23,-1.9l0.0,-1.82l-0.07,-0.19l-0.95,-1.19l0.1,-0.41l1.58,0.04l-0.23,0.97l0.08,0.28l1.55,1.55l0.09,1.13l0.08,0.19l0.42,0.43l-0.11,5.66l0.52,1.53Z\", \"name\": \"Togo\" }, \"TD\": { \"path\": \"M457.57,252.46l0.23,-1.08l-0.28,-0.36l-1.32,-0.05l0.0,-1.35l-0.1,-0.22l-0.9,-0.82l0.99,-3.1l3.12,-2.37l0.12,-0.23l0.13,-3.33l0.95,-5.2l0.53,-1.09l-0.07,-0.36l-0.94,-0.81l-0.03,-0.7l-0.12,-0.23l-0.84,-0.61l-0.57,-3.76l2.21,-1.26l19.67,9.88l0.12,9.74l-1.83,-0.15l-0.28,0.14l-1.14,1.89l-0.68,1.62l0.05,0.31l0.33,0.38l-0.61,0.58l-0.08,0.3l0.25,0.93l-0.58,0.95l-0.29,1.01l0.34,0.37l0.67,-0.11l0.39,0.73l0.03,1.4l0.11,0.23l0.8,0.65l-0.01,0.24l-1.38,0.37l-0.11,0.06l-1.27,1.03l-1.83,2.76l-2.21,1.1l-2.34,-0.15l-0.82,0.25l-0.2,0.37l0.19,0.68l-1.16,0.79l-1.01,0.94l-2.92,0.89l-0.5,-0.46l-0.17,-0.08l-0.41,-0.05l-0.28,0.12l-0.38,0.54l-1.36,0.12l0.1,-0.18l0.01,-0.27l-0.78,-1.72l-0.35,-1.03l-0.17,-0.18l-1.03,-0.41l-1.29,-1.28l0.36,-0.78l0.9,0.2l0.14,-0.0l0.67,-0.17l1.36,0.02l0.26,-0.45l-1.32,-2.22l0.09,-1.64l-0.17,-1.68l-0.04,-0.13l-0.93,-1.53Z\", \"name\": \"Chad\" }, \"LY\": { \"path\": \"M457.99,226.38l-1.57,0.87l-1.25,-1.28l-0.13,-0.08l-3.85,-1.11l-1.04,-1.57l-0.09,-0.09l-1.98,-1.23l-0.27,-0.02l-0.93,0.39l-0.72,-1.2l-0.09,-1.07l-0.06,-0.16l-1.33,-1.75l0.83,-0.94l0.07,-0.24l-0.21,-1.64l0.31,-1.43l-0.17,-1.29l0.43,-2.26l-0.15,-1.33l-0.73,-2.18l0.99,-0.52l0.16,-0.21l0.22,-1.16l-0.22,-1.06l1.54,-0.95l0.81,-0.92l1.19,-0.78l0.14,-0.23l0.12,-1.76l2.57,0.84l0.16,0.01l0.99,-0.23l2.01,0.45l3.19,1.2l1.12,2.36l0.2,0.16l2.24,0.53l3.5,1.14l2.65,1.36l0.29,-0.01l1.22,-0.71l1.27,-1.32l0.07,-0.29l-0.55,-2.0l0.69,-1.19l1.7,-1.23l1.61,-0.35l3.2,0.54l0.78,1.14l0.24,0.13l0.85,0.01l0.84,0.47l2.35,0.31l0.42,0.63l-0.79,1.16l-0.04,0.26l0.35,1.08l-0.61,1.6l-0.0,0.2l0.73,2.16l0.0,24.24l-2.58,0.01l-0.3,0.29l-0.02,0.62l-19.55,-9.83l-0.28,0.01l-2.53,1.44Z\", \"name\": \"Libya\" }, \"AE\": { \"path\": \"M550.59,223.8l0.12,0.08l1.92,-0.41l3.54,0.15l0.23,-0.09l1.71,-1.79l1.86,-1.7l1.31,-1.36l0.26,0.5l0.28,1.72l-0.93,0.01l-0.3,0.26l-0.21,1.73l0.11,0.27l0.08,0.06l-0.7,0.32l-0.17,0.27l-0.01,0.99l-0.68,1.02l-0.05,0.15l-0.06,0.96l-0.32,0.36l-7.19,-1.27l-0.79,-2.22Z\", \"name\": \"United Arab Emirates\" }, \"VE\": { \"path\": \"M240.66,256.5l0.65,0.91l-0.03,1.13l-1.05,1.39l-0.03,0.31l0.95,2.0l0.32,0.17l1.08,-0.16l0.24,-0.21l0.56,-1.83l-0.06,-0.29l-0.71,-0.81l-0.1,-1.58l2.9,-0.96l0.19,-0.37l-0.29,-1.02l0.45,-0.41l0.72,1.43l0.26,0.16l1.65,0.04l1.46,1.27l0.08,0.72l0.3,0.27l2.28,0.02l2.55,-0.25l1.34,1.06l0.14,0.06l1.92,0.31l0.2,-0.03l1.4,-0.79l0.15,-0.25l0.02,-0.36l2.82,-0.14l1.17,-0.01l-0.41,0.14l-0.14,0.46l0.86,1.19l0.22,0.12l1.93,0.18l1.73,1.13l0.37,1.9l0.31,0.24l1.21,-0.05l0.52,0.32l-1.63,1.21l-0.11,0.17l-0.22,0.92l0.07,0.27l0.63,0.69l-0.31,0.24l-1.48,0.39l-0.22,0.3l0.04,1.03l-0.59,0.6l-0.01,0.41l1.67,1.87l0.23,0.48l-0.72,0.76l-2.71,0.91l-1.78,0.39l-0.13,0.06l-0.6,0.49l-1.84,-0.58l-1.89,-0.33l-0.18,0.03l-0.47,0.23l-0.02,0.53l0.96,0.56l-0.08,1.58l0.35,1.58l0.26,0.23l1.91,0.19l0.02,0.07l-1.54,0.62l-0.18,0.2l-0.25,0.92l-0.88,0.35l-1.85,0.58l-0.16,0.13l-0.4,0.64l-1.66,0.14l-1.22,-1.18l-0.79,-2.52l-0.67,-0.88l-0.66,-0.43l0.99,-0.98l0.09,-0.26l-0.09,-0.56l-0.08,-0.16l-0.66,-0.69l-0.47,-1.54l0.18,-1.67l0.55,-0.85l0.45,-1.35l-0.15,-0.36l-0.89,-0.43l-0.19,-0.02l-1.39,0.28l-1.76,-0.13l-0.92,0.23l-1.64,-2.01l-0.17,-0.1l-1.54,-0.33l-3.05,0.23l-0.5,-0.73l-0.15,-0.12l-0.45,-0.15l-0.05,-0.28l0.28,-0.86l0.01,-0.15l-0.2,-1.01l-0.08,-0.15l-0.5,-0.5l-0.3,-1.08l-0.25,-0.22l-0.89,-0.12l0.54,-1.18l0.29,-1.73l0.66,-0.85l0.94,-0.7l0.09,-0.11l0.3,-0.6Z\", \"name\": \"Venezuela\" }, \"AF\": { \"path\": \"M574.42,192.1l2.24,0.95l0.18,0.02l1.89,-0.38l0.22,-0.18l0.46,-1.14l1.82,-0.4l1.5,-0.91l0.14,-0.19l0.46,-2.12l1.93,-0.51l0.2,-0.18l0.26,-0.68l0.87,0.57l0.13,0.05l0.79,0.09l1.35,0.02l1.83,0.59l0.75,0.34l0.26,-0.01l1.66,-0.85l0.7,0.46l0.42,-0.09l0.72,-1.17l1.32,0.05l0.23,-0.1l0.39,-0.43l0.07,-0.14l0.24,-1.08l0.86,-0.81l0.94,0.46l-0.2,0.64l0.23,0.38l0.49,0.09l-0.21,2.15l0.09,0.25l0.99,0.94l0.38,0.03l0.83,-0.57l1.06,-0.27l0.12,-0.06l1.46,-1.21l1.63,0.2l2.4,0.0l0.17,0.32l-1.12,0.25l-1.23,0.52l-2.86,0.33l-2.69,0.6l-0.13,0.06l-1.46,1.25l-0.07,0.36l0.58,1.18l0.25,1.21l-1.13,1.08l-0.09,0.25l0.09,0.98l-0.53,0.79l-2.22,-0.08l-0.28,0.44l0.83,1.57l-1.3,0.58l-0.13,0.11l-1.06,1.69l-0.05,0.18l0.13,1.51l-0.73,0.58l-0.78,-0.22l-0.14,-0.01l-1.91,0.36l-0.23,0.19l-0.2,0.57l-1.65,-0.0l-0.22,0.1l-1.4,1.56l-0.08,0.19l-0.08,2.13l-2.99,1.05l-1.67,-0.23l-0.27,0.1l-0.39,0.46l-1.43,-0.31l-2.43,0.4l-3.69,-1.23l1.96,-2.15l0.08,-0.24l-0.21,-1.78l-0.23,-0.26l-1.69,-0.42l-0.19,-1.62l-0.77,-2.08l0.98,-1.41l-0.14,-0.45l-0.82,-0.31l0.6,-1.79l0.93,-3.21Z\", \"name\": \"Afghanistan\" }, \"IQ\": { \"path\": \"M534.42,190.89l0.13,0.14l1.5,0.78l0.15,1.34l-1.13,0.87l-0.11,0.16l-0.58,2.2l0.04,0.24l1.73,2.67l0.12,0.1l2.99,1.49l1.18,1.94l-0.39,1.89l0.29,0.36l0.5,-0.0l0.02,1.17l0.08,0.2l0.83,0.86l-2.36,-0.29l-0.29,0.13l-1.74,2.49l-4.4,-0.21l-7.03,-5.49l-3.73,-1.94l-2.92,-0.74l-0.89,-3.0l5.33,-2.81l0.15,-0.19l0.95,-3.43l-0.2,-2.0l1.19,-0.61l0.11,-0.09l1.23,-1.73l0.92,-0.38l2.75,0.35l0.81,0.68l0.31,0.05l0.94,-0.38l1.5,3.17Z\", \"name\": \"Iraq\" }, \"IS\": { \"path\": \"M384.26,87.96l-0.51,2.35l0.08,0.28l2.61,2.58l-2.99,2.83l-7.16,2.72l-2.08,0.7l-9.51,-1.71l1.89,-1.36l-0.07,-0.53l-4.4,-1.59l3.33,-0.59l0.25,-0.32l-0.11,-1.2l-0.25,-0.27l-4.82,-0.88l1.38,-2.2l3.54,-0.57l3.8,2.74l0.33,0.01l3.68,-2.18l3.02,1.12l0.25,-0.02l4.01,-2.18l3.72,0.27Z\", \"name\": \"Iceland\" }, \"IR\": { \"path\": \"M556.2,187.5l2.05,-0.52l0.13,-0.07l1.69,-1.57l1.55,0.08l0.15,-0.03l1.02,-0.5l1.64,0.25l2.82,1.48l1.91,0.3l2.8,2.49l0.18,0.08l1.61,0.09l0.19,2.09l-1.0,3.47l-0.69,2.04l0.18,0.38l0.73,0.28l-0.85,1.22l-0.04,0.28l0.81,2.19l0.19,1.72l0.23,0.26l1.69,0.42l0.17,1.43l-2.18,2.39l-0.01,0.4l1.22,1.42l1.0,1.62l0.12,0.11l2.23,1.11l0.06,2.2l0.2,0.27l1.03,0.38l0.14,0.83l-3.38,1.3l-0.18,0.19l-0.87,2.85l-4.44,-0.76l-2.75,-0.62l-2.64,-0.32l-1.01,-3.11l-0.17,-0.19l-1.2,-0.48l-0.18,-0.01l-1.99,0.51l-2.42,1.25l-2.89,-0.84l-2.48,-2.03l-2.41,-0.79l-1.61,-2.47l-1.84,-3.63l-0.36,-0.15l-1.22,0.4l-1.48,-0.84l-0.37,0.06l-0.72,0.82l-1.08,-1.12l-0.02,-1.35l-0.3,-0.29l-0.43,0.0l0.34,-1.64l-0.04,-0.22l-1.29,-2.11l-0.12,-0.11l-3.0,-1.49l-1.62,-2.49l0.52,-1.98l1.18,-0.92l0.11,-0.27l-0.19,-1.66l-0.16,-0.23l-1.55,-0.81l-1.58,-3.33l-1.3,-2.2l0.41,-0.75l0.03,-0.21l-0.73,-3.12l1.2,-0.59l0.35,0.9l1.26,1.35l0.15,0.09l1.81,0.39l0.91,-0.09l0.15,-0.06l2.9,-2.13l0.7,-0.16l0.48,0.56l-0.75,1.26l0.05,0.37l1.56,1.53l0.28,0.08l0.37,-0.09l0.7,1.89l0.21,0.19l2.31,0.59l1.69,1.4l0.15,0.07l3.66,0.49l3.91,-0.76l0.23,-0.19l0.19,-0.52Z\", \"name\": \"Iran\" }, \"AM\": { \"path\": \"M530.51,176.08l2.91,-0.39l0.41,0.63l0.11,0.1l0.66,0.36l-0.32,0.47l0.07,0.41l1.1,0.84l-0.53,0.7l0.06,0.42l1.06,0.8l1.01,0.44l0.04,1.56l-0.44,0.04l-0.88,-1.46l0.01,-0.37l-0.3,-0.31l-0.98,0.01l-0.65,-0.69l-0.26,-0.09l-0.38,0.06l-0.97,-0.82l-1.64,-0.65l0.2,-1.2l-0.02,-0.16l-0.28,-0.69Z\", \"name\": \"Armenia\" }, \"IT\": { \"path\": \"M451.68,158.58l0.2,0.16l3.3,0.75l-0.22,1.26l0.02,0.18l0.35,0.78l-1.4,-0.32l-0.21,0.03l-2.04,1.1l-0.16,0.29l0.13,1.47l-0.29,0.82l0.02,0.24l0.82,1.57l0.1,0.11l2.28,1.5l1.29,2.53l2.79,2.43l0.2,0.07l1.83,-0.02l0.31,0.34l-0.46,0.39l0.06,0.5l4.06,1.97l2.06,1.49l0.17,0.36l-0.24,0.53l-1.08,-1.07l-0.15,-0.08l-2.18,-0.49l-0.33,0.15l-1.05,1.91l0.11,0.4l1.63,0.98l-0.22,1.12l-0.84,0.14l-0.22,0.15l-1.27,2.38l-0.54,0.12l0.01,-0.47l0.48,-1.46l0.5,-0.58l0.03,-0.35l-0.97,-1.69l-0.76,-1.48l-0.17,-0.15l-0.94,-0.33l-0.68,-1.18l-0.16,-0.13l-1.53,-0.52l-1.03,-1.14l-0.19,-0.1l-1.78,-0.19l-1.88,-1.3l-2.27,-1.94l-1.64,-1.68l-0.76,-2.94l-0.21,-0.21l-1.22,-0.35l-2.01,-1.0l-0.24,-0.01l-1.15,0.42l-0.11,0.07l-1.38,1.36l-0.5,0.11l0.19,-0.87l-0.21,-0.35l-1.19,-0.34l-0.56,-2.06l0.76,-0.82l0.03,-0.36l-0.68,-1.08l0.04,-0.31l0.68,0.42l0.19,0.04l1.21,-0.15l0.14,-0.06l1.18,-0.89l0.25,0.29l0.25,0.1l1.19,-0.1l0.25,-0.18l0.45,-1.04l1.61,0.34l0.19,-0.02l1.1,-0.53l0.17,-0.22l0.15,-0.95l1.19,0.35l0.35,-0.16l0.23,-0.47l2.11,-0.47l0.45,0.89ZM459.35,184.63l-0.71,1.81l0.0,0.23l0.33,0.79l-0.37,1.03l-1.6,-0.91l-1.33,-0.34l-3.24,-1.36l0.23,-0.99l2.73,0.24l3.95,-0.5ZM443.95,175.91l1.26,1.77l-0.31,3.47l-0.82,-0.13l-0.26,0.08l-0.83,0.79l-0.64,-0.52l-0.1,-3.42l-0.44,-1.34l0.91,0.1l0.21,-0.06l1.01,-0.74Z\", \"name\": \"Italy\" }, \"VN\": { \"path\": \"M690.8,230.21l-2.86,1.93l-2.09,2.46l-0.06,0.11l-0.55,1.8l0.04,0.26l4.26,6.1l2.31,1.63l1.46,1.97l1.12,4.62l-0.32,4.3l-1.97,1.57l-2.85,1.62l-2.09,2.14l-2.83,2.13l-0.67,-1.19l0.65,-1.58l-0.09,-0.35l-1.47,-1.14l1.67,-0.79l2.57,-0.18l0.22,-0.47l-0.89,-1.24l3.88,-1.8l0.17,-0.24l0.31,-3.05l-0.01,-0.13l-0.56,-1.63l0.44,-2.48l-0.01,-0.15l-0.63,-1.81l-0.08,-0.12l-1.87,-1.77l-3.64,-5.3l-0.11,-0.1l-2.68,-1.39l0.45,-0.59l1.53,-0.65l0.16,-0.39l-0.97,-2.27l-0.27,-0.18l-2.89,-0.02l-1.04,-2.21l-1.28,-1.83l0.96,-0.46l1.97,0.01l2.43,-0.3l0.13,-0.05l1.95,-1.29l1.04,0.85l0.13,0.06l1.98,0.42l-0.32,1.21l0.09,0.3l1.19,1.07l0.12,0.07l1.88,0.51Z\", \"name\": \"Vietnam\" }, \"AR\": { \"path\": \"M258.11,341.34l1.4,1.81l0.51,-0.06l0.89,-1.94l2.51,0.1l0.36,0.49l4.6,4.31l0.15,0.08l1.99,0.39l3.01,1.93l2.5,1.01l0.28,0.91l-2.4,3.97l0.17,0.44l2.57,0.74l2.81,0.41l2.09,-0.44l0.14,-0.07l2.27,-2.06l0.09,-0.17l0.38,-2.2l0.88,-0.36l1.05,1.29l-0.04,1.88l-1.98,1.4l-1.72,1.13l-2.84,2.65l-3.34,3.73l-0.07,0.12l-0.63,2.22l-0.67,2.85l0.02,2.73l-0.47,0.54l-0.07,0.17l-0.36,3.28l0.12,0.27l3.03,2.32l-0.31,1.78l0.11,0.29l1.44,1.15l-0.11,1.17l-2.32,3.57l-3.59,1.51l-4.95,0.6l-2.72,-0.29l-0.32,0.38l0.5,1.67l-0.49,2.13l0.01,0.16l0.4,1.29l-1.27,0.88l-2.41,0.39l-2.33,-1.05l-0.31,0.04l-0.97,0.78l-0.11,0.27l0.35,2.98l0.16,0.23l1.69,0.91l0.31,-0.02l1.08,-0.75l0.46,0.96l-2.1,0.88l-2.01,1.89l-0.09,0.18l-0.36,3.05l-0.51,1.42l-2.16,0.01l-0.19,0.07l-1.96,1.59l-0.1,0.15l-0.72,2.34l0.08,0.31l2.46,2.31l0.13,0.07l2.09,0.56l-0.74,2.45l-2.86,1.75l-0.12,0.14l-1.59,3.71l-2.2,1.24l-0.1,0.09l-1.03,1.54l-0.04,0.23l0.81,3.45l0.06,0.13l1.13,1.32l-2.59,-0.57l-5.89,-0.44l-0.92,-1.73l0.05,-2.4l-0.34,-0.3l-1.49,0.19l-0.72,-0.98l-0.2,-3.21l1.79,-1.33l0.1,-0.13l0.79,-2.04l0.02,-0.16l-0.27,-1.52l1.31,-2.69l0.91,-4.15l-0.23,-1.72l0.91,-0.49l0.15,-0.33l-0.27,-1.16l-0.15,-0.2l-0.87,-0.46l0.65,-1.01l-0.04,-0.37l-1.06,-1.09l-0.54,-3.2l0.83,-0.51l0.14,-0.29l-0.42,-3.6l0.58,-2.98l0.64,-2.5l1.41,-1.0l0.12,-0.32l-0.75,-2.8l-0.01,-2.48l1.81,-1.78l0.09,-0.22l-0.06,-2.3l1.39,-2.69l0.03,-0.14l0.01,-2.58l-0.11,-0.24l-0.57,-0.45l-1.1,-4.59l1.49,-2.73l0.04,-0.17l-0.23,-2.59l0.86,-2.38l1.6,-2.48l1.74,-1.65l0.04,-0.39l-0.64,-0.89l0.42,-0.7l0.04,-0.16l-0.08,-4.26l2.55,-1.23l0.16,-0.18l0.86,-2.75l-0.01,-0.22l-0.22,-0.48l1.84,-2.1l3.0,0.59ZM256.77,438.98l-2.1,0.15l-1.18,-1.14l-0.19,-0.08l-1.53,-0.09l-2.38,-0.0l-0.0,-6.28l0.4,0.65l1.25,2.55l0.11,0.12l3.26,2.07l3.19,0.8l-0.82,1.26Z\", \"name\": \"Argentina\" }, \"AU\": { \"path\": \"M705.55,353.06l0.09,0.09l0.37,0.05l0.13,-0.35l-0.57,-1.69l0.48,0.3l0.71,0.99l0.34,0.11l0.2,-0.29l-0.04,-1.37l-0.04,-0.14l-1.22,-2.07l-0.28,-0.9l-0.51,-0.69l0.24,-1.33l0.52,-0.7l0.34,-1.32l0.01,-0.13l-0.25,-1.44l0.51,-0.94l0.1,1.03l0.23,0.26l0.32,-0.14l1.01,-1.72l1.94,-0.84l1.27,-1.14l1.84,-0.92l1.0,-0.18l0.6,0.28l0.26,-0.0l1.94,-0.96l1.48,-0.28l0.19,-0.13l0.32,-0.49l0.51,-0.18l1.42,0.05l2.63,-0.76l0.11,-0.06l1.36,-1.15l0.08,-0.1l0.61,-1.33l1.42,-1.27l0.1,-0.19l0.11,-1.03l0.06,-1.32l1.39,-1.74l0.85,1.79l0.4,0.14l1.07,-0.51l0.11,-0.45l-0.77,-1.05l0.53,-0.84l0.86,0.43l0.43,-0.22l0.29,-1.85l1.29,-1.19l0.6,-0.98l1.16,-0.4l0.2,-0.27l0.02,-0.34l0.74,0.2l0.38,-0.27l0.03,-0.44l1.98,-0.61l1.7,1.08l1.36,1.48l0.22,0.1l1.55,0.02l1.57,0.24l0.33,-0.4l-0.48,-1.27l1.09,-1.86l1.06,-0.63l0.1,-0.42l-0.28,-0.46l0.93,-1.24l1.36,-0.8l1.16,0.27l0.14,0.0l2.1,-0.48l0.23,-0.3l-0.05,-1.3l-0.18,-0.26l-1.08,-0.49l0.44,-0.12l1.52,0.58l1.39,1.06l2.11,0.65l0.19,-0.0l0.59,-0.21l1.44,0.72l0.27,0.0l1.37,-0.68l0.84,0.2l0.26,-0.06l0.37,-0.3l0.82,0.89l-0.56,1.14l-0.84,0.91l-0.75,0.07l-0.26,0.38l0.26,0.9l-0.67,1.15l-0.88,1.24l-0.05,0.25l0.18,0.72l0.12,0.17l1.99,1.42l1.96,0.84l1.25,0.86l1.8,1.51l0.19,0.07l0.63,-0.0l1.15,0.58l0.34,0.7l0.17,0.15l2.39,0.88l0.24,-0.02l1.65,-0.88l0.14,-0.16l0.49,-1.37l0.52,-1.19l0.31,-1.39l0.75,-2.02l0.01,-0.19l-0.33,-1.16l0.16,-0.67l0.0,-0.13l-0.28,-1.41l0.3,-1.78l0.42,-0.45l0.05,-0.33l-0.33,-0.73l0.56,-1.25l0.48,-1.39l0.07,-0.69l0.58,-0.59l0.48,0.84l0.17,1.53l0.17,0.24l0.47,0.23l0.09,0.9l0.05,0.14l0.87,1.23l0.17,1.33l-0.09,0.89l0.03,0.15l0.9,2.0l0.43,0.13l1.38,-0.83l0.71,0.92l1.06,0.88l-0.22,0.96l0.0,0.14l0.53,2.2l0.38,1.3l0.15,0.18l0.52,0.26l0.62,2.01l-0.23,1.27l0.02,0.18l0.81,1.76l0.14,0.14l2.69,1.35l3.21,2.21l-0.2,0.4l0.04,0.34l1.39,1.6l0.95,2.78l0.43,0.16l0.79,-0.46l0.85,0.96l0.39,0.05l0.22,-0.15l0.36,2.33l0.09,0.18l1.78,1.63l1.16,1.01l1.9,2.1l0.67,2.05l0.06,1.47l-0.17,1.64l0.03,0.17l1.16,2.22l-0.14,2.28l-0.43,1.24l-0.68,2.44l0.04,1.63l-0.48,1.92l-1.06,2.43l-1.79,1.32l-0.1,0.12l-0.91,2.15l-0.82,1.37l-0.76,2.47l-0.98,1.46l-0.63,2.14l-0.33,2.02l0.1,0.82l-1.21,0.85l-2.71,0.1l-0.13,0.03l-2.31,1.19l-1.21,1.17l-1.34,1.11l-1.89,-1.18l-1.33,-0.46l0.32,-1.24l-0.4,-0.35l-1.46,0.61l-2.06,1.98l-1.99,-0.73l-1.43,-0.46l-1.45,-0.22l-2.32,-0.81l-1.51,-1.67l-0.45,-2.11l-0.6,-1.5l-0.07,-0.11l-1.23,-1.16l-0.16,-0.08l-1.96,-0.28l0.59,-0.99l0.03,-0.24l-0.61,-2.1l-0.54,-0.08l-1.16,1.85l-1.23,0.29l0.73,-0.88l0.06,-0.12l0.37,-1.57l0.93,-1.33l0.05,-0.2l-0.2,-2.07l-0.53,-0.17l-2.01,2.35l-1.52,0.94l-0.12,0.14l-0.82,1.93l-1.5,-0.9l0.07,-1.32l-0.06,-0.2l-1.57,-2.04l-1.15,-0.92l0.3,-0.41l-0.1,-0.44l-3.21,-1.69l-0.13,-0.03l-1.69,-0.08l-2.35,-1.31l-0.16,-0.04l-4.55,0.27l-3.24,0.99l-2.8,0.91l-2.33,-0.18l-0.17,0.03l-2.63,1.41l-2.14,0.64l-0.2,0.19l-0.47,1.42l-0.8,0.99l-1.99,0.06l-1.55,0.24l-2.27,-0.5l-1.79,0.3l-1.71,0.13l-0.19,0.09l-1.38,1.39l-0.58,-0.1l-0.21,0.04l-1.26,0.8l-1.13,0.85l-1.72,-0.1l-1.6,-0.0l-2.58,-1.76l-1.21,-0.49l0.04,-1.19l1.04,-0.32l0.16,-0.12l0.42,-0.64l0.05,-0.19l-0.09,-0.97l0.3,-2.0l-0.28,-1.64l-1.34,-2.84l-0.39,-1.49l0.1,-1.51l-0.04,-0.17l-0.96,-1.72l-0.06,-0.73l-0.09,-0.19l-1.04,-1.01l-0.3,-2.02l-0.05,-0.12l-1.23,-1.83ZM784.95,393.35l2.39,1.01l0.2,0.01l3.26,-0.96l1.19,0.16l0.16,3.19l-0.78,0.95l-0.07,0.16l-0.19,1.83l-0.43,-0.41l-0.44,0.03l-1.61,1.96l-0.4,-0.12l-1.38,-0.09l-1.43,-2.42l-0.37,-2.03l-1.4,-2.53l0.04,-0.94l1.27,0.2Z\", \"name\": \"Australia\" }, \"IL\": { \"path\": \"M509.04,199.22l0.71,0.0l0.27,-0.17l0.15,-0.33l0.19,-0.01l0.02,0.73l-0.27,0.34l0.02,0.08l-0.32,0.62l-0.65,-0.27l-0.41,0.19l-0.52,1.85l0.16,0.35l0.14,0.07l-0.17,0.1l-0.14,0.21l-0.11,0.73l0.39,0.33l0.81,-0.26l0.03,0.64l-0.97,3.43l-1.28,-3.67l0.62,-0.78l-0.03,-0.41l0.58,-1.16l0.5,-2.07l0.27,-0.54Z\", \"name\": \"Israel\" }, \"IN\": { \"path\": \"M615.84,192.58l2.4,2.97l-0.24,2.17l0.05,0.2l0.94,1.35l-0.06,0.97l-1.46,-0.3l-0.35,0.36l0.7,3.06l0.12,0.18l2.46,1.75l3.11,1.72l-1.23,0.96l-0.1,0.13l-0.97,2.55l0.16,0.38l2.41,1.02l2.37,1.33l3.27,1.52l3.43,0.37l1.37,1.3l0.17,0.08l1.92,0.25l3.0,0.62l2.15,-0.04l0.28,-0.22l0.29,-1.06l0.0,-0.13l-0.32,-1.66l0.16,-0.94l1.0,-0.37l0.23,2.28l0.18,0.24l2.28,1.02l0.2,0.02l1.52,-0.41l2.06,0.18l2.08,-0.08l0.29,-0.27l0.18,-1.66l-0.1,-0.26l-0.53,-0.44l1.38,-0.23l0.15,-0.07l2.26,-2.0l2.75,-1.65l1.97,0.63l0.25,-0.03l1.54,-0.99l0.89,1.28l-0.72,0.97l0.2,0.48l2.49,0.37l0.11,0.61l-0.69,0.39l-0.15,0.3l0.15,1.22l-1.36,-0.37l-0.23,0.03l-3.24,1.86l-0.15,0.28l0.07,1.44l-1.33,2.16l-0.04,0.13l-0.12,1.24l-0.98,1.91l-1.72,-0.53l-0.39,0.28l-0.09,2.66l-0.52,0.83l-0.04,0.23l0.21,0.89l-0.71,0.36l-1.21,-3.85l-0.29,-0.21l-0.69,0.01l-0.29,0.23l-0.28,1.17l-0.84,-0.84l0.6,-1.17l0.97,-0.13l0.23,-0.16l1.15,-2.25l-0.18,-0.42l-1.54,-0.47l-2.3,0.04l-2.13,-0.33l-0.19,-1.63l-0.26,-0.26l-1.13,-0.13l-1.93,-1.13l-0.42,0.13l-0.88,1.82l0.08,0.37l1.47,1.15l-1.21,0.77l-0.1,0.1l-0.56,0.97l0.13,0.42l1.31,0.61l-0.36,1.35l0.01,0.2l0.85,1.95l0.37,2.05l-0.26,0.68l-1.55,-0.02l-3.09,0.54l-0.25,0.32l0.13,1.84l-1.21,1.4l-3.64,1.79l-2.79,3.04l-1.86,1.61l-2.48,1.68l-0.13,0.25l-0.0,1.0l-1.07,0.55l-2.21,0.9l-1.13,0.13l-0.25,0.19l-0.75,1.96l-0.02,0.15l0.52,3.31l0.13,2.03l-1.03,2.35l-0.03,0.12l-0.01,4.03l-1.02,0.1l-0.23,0.15l-1.14,1.93l0.04,0.36l0.44,0.48l-1.83,0.57l-0.18,0.15l-0.81,1.65l-0.74,0.53l-2.14,-2.12l-1.14,-3.47l-0.96,-2.57l-0.9,-1.26l-1.3,-2.38l-0.61,-3.14l-0.44,-1.62l-2.29,-3.56l-1.03,-4.94l-0.74,-3.29l0.01,-3.12l-0.49,-2.51l-0.41,-0.22l-3.56,1.53l-1.59,-0.28l-2.96,-2.87l0.94,-0.74l0.06,-0.41l-0.74,-1.03l-2.73,-2.1l1.35,-1.43l5.38,0.01l0.29,-0.36l-0.5,-2.29l-0.09,-0.15l-1.33,-1.28l-0.27,-1.96l-0.12,-0.2l-1.36,-1.0l2.42,-2.48l2.77,0.2l0.24,-0.1l2.62,-2.85l1.59,-2.8l2.41,-2.74l0.07,-0.2l-0.04,-1.82l2.01,-1.51l-0.01,-0.49l-1.95,-1.33l-0.83,-1.81l-0.82,-2.27l0.98,-0.97l3.64,0.66l2.89,-0.42l0.17,-0.08l2.18,-2.15Z\", \"name\": \"India\" }, \"TZ\": { \"path\": \"M505.77,287.58l0.36,0.23l8.95,5.03l0.15,1.3l0.13,0.21l3.4,2.37l-1.07,2.88l-0.02,0.14l0.15,1.42l0.15,0.23l1.47,0.84l0.05,0.42l-0.66,1.44l-0.02,0.18l0.13,0.72l-0.16,1.16l0.03,0.19l0.87,1.57l1.03,2.48l0.12,0.14l0.53,0.32l-1.59,1.18l-2.64,0.95l-1.45,-0.04l-0.2,0.07l-0.81,0.69l-1.64,0.06l-0.68,0.3l-2.9,-0.69l-1.71,0.17l-0.65,-3.18l-0.05,-0.12l-1.35,-1.88l-0.19,-0.12l-2.41,-0.46l-1.38,-0.74l-1.63,-0.44l-0.96,-0.41l-0.95,-0.58l-1.31,-3.09l-1.47,-1.46l-0.45,-1.31l0.24,-1.34l-0.39,-1.99l0.71,-0.08l0.18,-0.09l0.91,-0.91l0.98,-1.31l0.59,-0.5l0.11,-0.24l-0.02,-0.81l-0.08,-0.2l-0.47,-0.5l-0.1,-0.67l0.51,-0.23l0.18,-0.25l0.14,-1.47l-0.05,-0.2l-0.76,-1.09l0.45,-0.15l2.71,0.03l5.01,-0.19Z\", \"name\": \"Tanzania\" }, \"AZ\": { \"path\": \"M539.36,175.66l0.16,0.09l1.11,0.2l0.32,-0.15l0.4,-0.71l1.22,-0.99l1.11,1.33l1.26,2.09l0.22,0.14l1.06,0.13l0.28,0.29l-1.46,0.17l-0.26,0.24l-0.43,2.26l-0.39,0.92l-0.85,0.63l-0.12,0.25l0.06,1.2l-0.22,0.05l-1.28,-1.25l0.74,-1.25l-0.03,-0.35l-0.74,-0.86l-0.3,-0.1l-1.05,0.27l-2.49,1.82l-0.04,-1.46l-0.18,-0.27l-1.09,-0.47l-0.8,-0.6l0.53,-0.7l-0.06,-0.42l-1.11,-0.84l0.34,-0.51l-0.11,-0.43l-0.89,-0.48l-0.33,-0.49l0.25,-0.2l1.78,0.81l1.35,0.18l0.25,-0.09l0.34,-0.35l0.02,-0.39l-1.04,-1.36l0.28,-0.18l0.49,0.07l1.65,1.74ZM533.53,180.16l0.63,0.67l0.22,0.09l0.8,-0.0l0.04,0.31l0.66,1.09l-0.94,-0.21l-1.16,-1.24l-0.25,-0.71Z\", \"name\": \"Azerbaijan\" }, \"IE\": { \"path\": \"M405.17,135.35l0.36,2.16l-1.78,2.84l-4.28,1.91l-3.02,-0.43l1.81,-3.13l0.02,-0.26l-1.23,-3.26l3.24,-2.56l1.54,-1.32l0.37,1.33l-0.49,1.77l0.3,0.38l1.49,-0.05l1.68,0.63Z\", \"name\": \"Ireland\" }, \"ID\": { \"path\": \"M756.56,287.86l0.69,4.02l0.15,0.21l2.59,1.5l0.39,-0.07l2.05,-2.61l2.75,-1.45l2.09,-0.0l2.08,0.85l1.85,0.89l2.52,0.46l0.08,15.44l-1.72,-1.6l-0.15,-0.07l-2.54,-0.51l-0.29,0.1l-0.53,0.62l-2.53,0.06l0.78,-1.51l1.48,-0.66l0.17,-0.34l-0.65,-2.74l-1.23,-2.19l-0.14,-0.13l-4.85,-2.13l-2.09,-0.23l-3.7,-2.28l-0.41,0.1l-0.67,1.11l-0.63,0.14l-0.41,-0.67l-0.01,-1.01l-0.14,-0.25l-1.39,-0.89l2.05,-0.69l1.73,0.05l0.29,-0.39l-0.21,-0.66l-0.29,-0.21l-3.5,-0.0l-0.9,-1.36l-0.19,-0.13l-2.14,-0.44l-0.65,-0.76l2.86,-0.51l1.28,-0.79l3.75,0.96l0.32,0.76ZM758.01,300.37l-0.79,1.04l-0.14,-1.07l0.4,-0.81l0.29,-0.47l0.24,0.31l-0.0,1.0ZM747.45,292.9l0.48,1.02l-1.45,-0.69l-2.09,-0.21l-1.45,0.16l-1.28,-0.07l0.35,-0.81l2.86,-0.1l2.58,0.68ZM741.15,285.69l-0.16,-0.25l-0.72,-3.08l0.47,-1.86l0.35,-0.38l0.1,0.73l0.25,0.26l1.28,0.19l0.18,0.78l-0.11,1.8l-0.96,-0.18l-0.35,0.22l-0.38,1.52l0.05,0.24ZM741.19,285.75l0.76,0.97l-0.11,0.05l-0.65,-1.02ZM739.18,293.52l-0.61,0.54l-1.44,-0.38l-0.25,-0.55l1.93,-0.09l0.36,0.48ZM728.4,295.87l-0.27,-0.07l-2.26,0.89l-0.37,-0.41l0.27,-0.8l-0.09,-0.33l-1.68,-1.37l0.17,-2.29l-0.42,-0.3l-1.67,0.76l-0.17,0.29l0.21,2.92l0.09,3.34l-1.22,0.28l-0.78,-0.54l0.65,-2.1l0.01,-0.14l-0.39,-2.42l-0.29,-0.25l-0.86,-0.02l-0.63,-1.4l0.99,-1.61l0.35,-1.97l1.24,-3.73l0.49,-0.96l1.95,-1.7l1.86,0.69l3.16,0.35l2.92,-0.1l0.17,-0.06l2.24,-1.65l0.11,0.14l-1.8,2.22l-1.72,0.44l-2.41,-0.48l-4.21,0.13l-2.19,0.36l-0.25,0.24l-0.36,1.9l0.08,0.27l2.24,2.23l0.4,0.02l1.29,-1.08l3.19,-0.58l-0.19,0.06l-1.04,1.4l-2.13,0.94l-0.12,0.45l2.26,3.06l-0.37,0.69l0.03,0.32l1.51,1.95ZM728.48,295.97l0.59,0.76l-0.02,1.37l-1.0,0.55l-0.64,-0.58l1.09,-1.84l-0.02,-0.26ZM728.64,286.95l0.79,-0.14l-0.07,0.39l-0.72,-0.24ZM732.38,310.1l-1.89,0.49l-0.06,-0.06l0.17,-0.64l1.0,-1.42l2.14,-0.87l0.1,0.2l0.04,0.58l-1.49,1.72ZM728.26,305.71l-0.17,0.63l-3.53,0.67l-3.02,-0.28l-0.0,-0.42l1.66,-0.44l1.47,0.71l0.16,0.03l1.75,-0.21l1.69,-0.69ZM722.98,310.33l-0.74,0.03l-2.52,-1.35l1.42,-0.3l1.19,0.7l0.72,0.63l-0.06,0.28ZM716.24,305.63l0.66,0.49l0.22,0.06l1.35,-0.18l0.31,0.53l-4.18,0.77l-0.8,-0.01l0.51,-0.86l1.2,-0.02l0.24,-0.12l0.49,-0.65ZM715.84,280.21l0.09,0.34l2.25,1.86l-2.25,0.22l-0.24,0.17l-0.84,1.71l-0.03,0.15l0.1,2.11l-2.27,1.62l-0.13,0.24l-0.06,2.46l-0.74,2.92l-0.02,-0.05l-0.39,-0.16l-2.62,1.04l-0.86,-1.33l-0.23,-0.14l-1.71,-0.14l-1.19,-0.76l-0.25,-0.03l-2.78,0.84l-0.79,-1.05l-0.26,-0.12l-1.61,0.13l-1.8,-0.25l-0.36,-3.13l-0.15,-0.23l-1.18,-0.65l-1.13,-2.02l-0.33,-2.1l0.27,-2.19l1.05,-1.17l0.28,1.12l0.1,0.16l1.71,1.41l0.28,0.05l1.55,-0.49l1.54,0.17l0.23,-0.07l1.4,-1.21l1.05,-0.19l2.3,0.68l0.16,0.0l2.04,-0.53l0.21,-0.19l1.26,-3.41l0.91,-0.82l0.09,-0.14l0.8,-2.64l2.63,0.0l1.71,0.33l-1.19,1.89l0.02,0.34l1.74,2.24l-0.37,1.0ZM692.67,302.0l0.26,0.19l4.8,0.25l0.28,-0.16l0.44,-0.83l4.29,1.12l0.85,1.52l0.23,0.15l3.71,0.45l2.37,1.15l-2.06,0.69l-2.77,-1.0l-2.25,0.07l-2.57,-0.18l-2.31,-0.45l-2.94,-0.97l-1.84,-0.25l-0.13,0.01l-0.97,0.29l-4.34,-0.98l-0.38,-0.94l-0.25,-0.19l-1.76,-0.14l1.31,-1.84l2.81,0.14l1.97,0.96l0.95,0.19l0.28,0.74ZM685.63,299.27l-2.36,0.04l-2.07,-2.05l-3.17,-2.02l-1.06,-1.5l-1.88,-2.02l-1.22,-1.85l-1.9,-3.49l-2.2,-2.11l-0.71,-2.08l-0.94,-1.99l-0.1,-0.12l-2.21,-1.54l-1.35,-2.17l-1.86,-1.39l-2.53,-2.68l-0.14,-0.81l1.22,0.08l3.76,0.47l2.16,2.4l1.94,1.7l1.37,1.04l2.35,2.67l0.22,0.1l2.44,0.04l1.99,1.62l1.42,2.06l0.09,0.09l1.67,1.0l-0.88,1.8l0.11,0.39l1.44,0.87l0.13,0.04l0.68,0.05l0.41,1.62l0.87,1.4l0.22,0.14l1.71,0.21l1.06,1.38l-0.61,3.04l-0.09,3.6Z\", \"name\": \"Indonesia\" }, \"UA\": { \"path\": \"M500.54,141.42l0.9,0.13l0.27,-0.11l0.52,-0.62l0.68,0.13l2.43,-0.3l1.32,1.57l-0.45,0.48l-0.07,0.26l0.21,1.03l0.27,0.24l1.85,0.15l0.76,1.22l-0.05,0.55l0.2,0.31l3.18,1.15l0.18,0.01l1.75,-0.47l1.42,1.41l0.22,0.09l1.42,-0.03l3.44,0.99l0.02,0.65l-0.97,1.62l-0.03,0.24l0.52,1.67l-0.29,0.79l-2.24,0.22l-0.14,0.05l-1.29,0.89l-0.13,0.23l-0.07,1.16l-1.75,0.22l-0.12,0.04l-1.6,0.98l-2.27,0.16l-0.12,0.04l-2.16,1.17l-0.16,0.29l0.15,1.94l0.14,0.23l1.23,0.75l0.18,0.04l2.06,-0.15l-0.22,0.51l-2.67,0.54l-3.27,1.72l-1.0,-0.45l0.45,-1.19l-0.19,-0.39l-2.34,-0.78l0.15,-0.2l2.32,-1.0l0.09,-0.49l-0.73,-0.72l-0.15,-0.08l-3.69,-0.75l-0.14,-0.96l-0.35,-0.25l-2.32,0.39l-0.21,0.15l-0.91,1.7l-1.77,2.1l-0.93,-0.44l-0.24,-0.0l-1.05,0.45l-0.48,-0.25l0.13,-0.07l0.14,-0.15l0.43,-1.04l0.67,-0.97l0.04,-0.26l-0.1,-0.31l0.04,-0.02l0.11,0.19l0.24,0.15l1.48,0.09l0.78,-0.25l0.07,-0.53l-0.27,-0.19l0.09,-0.25l-0.08,-0.33l-0.81,-0.74l-0.34,-1.24l-0.14,-0.18l-0.73,-0.42l0.15,-0.87l-0.11,-0.29l-1.13,-0.86l-0.15,-0.06l-0.97,-0.11l-1.79,-0.97l-0.2,-0.03l-1.66,0.32l-0.13,0.06l-0.52,0.41l-0.95,-0.0l-0.23,0.11l-0.56,0.66l-1.74,0.29l-0.79,0.43l-1.01,-0.68l-0.16,-0.05l-1.57,-0.01l-1.52,-0.35l-0.23,0.04l-0.71,0.45l-0.09,-0.43l-0.13,-0.19l-1.18,-0.74l0.38,-1.02l0.53,-0.64l0.35,0.12l0.37,-0.41l-0.57,-1.29l2.1,-2.5l1.16,-0.36l0.2,-0.2l0.27,-0.92l-0.01,-0.2l-1.1,-2.52l0.79,-0.09l0.13,-0.05l1.3,-0.86l1.83,-0.07l2.48,0.26l2.84,0.8l1.91,0.06l0.88,0.45l0.29,-0.01l0.72,-0.44l0.49,0.58l0.25,0.11l2.2,-0.16l0.94,0.3l0.39,-0.26l0.15,-1.57l0.61,-0.59l2.01,-0.19Z\", \"name\": \"Ukraine\" }, \"QA\": { \"path\": \"M548.47,221.47l-0.15,-1.72l0.59,-1.23l0.38,-0.16l0.54,0.6l0.04,1.4l-0.47,1.37l-0.41,0.11l-0.53,-0.37Z\", \"name\": \"Qatar\" }, \"MZ\": { \"path\": \"M507.71,314.14l1.65,-0.18l2.96,0.7l0.2,-0.02l0.6,-0.29l1.68,-0.06l0.18,-0.07l0.8,-0.69l1.5,0.02l2.74,-0.98l1.74,-1.27l0.25,0.7l-0.1,2.47l0.31,2.27l0.1,3.97l0.42,1.24l-0.7,1.71l-0.94,1.73l-1.52,1.52l-5.06,2.21l-2.88,2.8l-1.01,0.51l-1.72,1.81l-0.99,0.58l-0.15,0.23l-0.21,1.86l0.04,0.19l1.17,1.95l0.47,1.47l0.03,0.74l0.39,0.28l0.05,-0.01l-0.06,2.13l-0.39,1.19l0.1,0.33l0.42,0.32l-0.28,0.83l-0.95,0.86l-2.03,0.88l-3.08,1.49l-1.1,0.99l-0.09,0.28l0.21,1.13l0.21,0.23l0.38,0.11l-0.14,0.89l-1.39,-0.02l-0.17,-0.94l-0.38,-1.23l-0.2,-0.89l0.44,-2.91l-0.01,-0.14l-0.65,-1.88l-1.15,-3.55l2.52,-2.85l0.68,-1.89l0.29,-0.18l0.14,-0.2l0.28,-1.53l-0.03,-0.19l-0.36,-0.7l0.1,-1.83l0.49,-1.84l-0.01,-3.26l-0.14,-0.25l-1.3,-0.83l-0.11,-0.04l-1.08,-0.17l-0.47,-0.55l-0.1,-0.08l-1.16,-0.54l-0.13,-0.03l-1.83,0.04l-0.32,-2.25l7.19,-1.99l1.32,1.12l0.29,0.06l0.55,-0.19l0.75,0.49l0.11,0.81l-0.49,1.11l-0.02,0.15l0.19,1.81l0.09,0.18l1.63,1.59l0.48,-0.1l0.72,-1.68l0.99,-0.49l0.17,-0.29l-0.21,-3.29l-0.04,-0.13l-1.11,-1.92l-0.9,-0.82l-0.21,-0.08l-0.62,0.03l-0.63,-2.98l0.61,-1.67Z\", \"name\": \"Mozambique\" } }, \"height\": 440.7063107441331, \"projection\": { \"type\": \"mill\", \"centralMeridian\": 11.5 }, \"width\": 900.0 });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtd29ybGQtbWlsbC1lbi5qcz81ODVjIl0sIm5hbWVzIjpbIiQiLCJmbiIsInZlY3Rvck1hcCJdLCJtYXBwaW5ncyI6IkFBQUFBLEVBQUVDLEVBQUYsQ0FBS0MsU0FBTCxDQUFlLFFBQWYsRUFBeUIsZUFBekIsRUFBeUMsRUFBQyxVQUFVLENBQUMsRUFBQyxTQUFTLEtBQVYsRUFBaUIsT0FBTyxDQUF4QixFQUEyQixVQUFVLGlCQUFyQyxFQUF3RCxRQUFRLENBQUMsRUFBQyxLQUFLLENBQUMsa0JBQVAsRUFBMkIsS0FBSyxDQUFDLGtCQUFqQyxFQUFELEVBQXVELEVBQUMsS0FBSyxnQkFBTixFQUF3QixLQUFLLGtCQUE3QixFQUF2RCxDQUFoRSxFQUEwSyxRQUFRLENBQWxMLEVBQUQsQ0FBWCxFQUFtTSxTQUFTLEVBQUMsTUFBTSxFQUFDLFFBQVEscWZBQVQsRUFBZ2dCLFFBQVEsWUFBeGdCLEVBQVAsRUFBOGhCLE1BQU0sRUFBQyxRQUFRLHVOQUFULEVBQWtPLFFBQVEsU0FBMU8sRUFBcGlCLEVBQTB4QixNQUFNLEVBQUMsUUFBUSwra0JBQVQsRUFBMGxCLFFBQVEsY0FBbG1CLEVBQWh5QixFQUFtNUMsTUFBTSxFQUFDLFFBQVEsd1pBQVQsRUFBbWEsUUFBUSxVQUEzYSxFQUF6NUMsRUFBaTFELE1BQU0sRUFBQyxRQUFRLHlSQUFULEVBQW9TLFFBQVEsd0JBQTVTLEVBQXYxRCxFQUE4cEUsTUFBTSxFQUFDLFFBQVEsK0ZBQVQsRUFBMEcsUUFBUSxRQUFsSCxFQUFwcUUsRUFBaXlFLE1BQU0sRUFBQyxRQUFRLCs1QkFBVCxFQUEwNkIsUUFBUSxTQUFsN0IsRUFBdnlFLEVBQXF1RyxNQUFNLEVBQUMsUUFBUSxzNEJBQVQsRUFBaTVCLFFBQVEsT0FBejVCLEVBQTN1RyxFQUE4b0ksTUFBTSxFQUFDLFFBQVEsZ0xBQVQs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RUFBbW5CLFFBQVEsWUFBM25CLEVBQTVvckksRUFBc3hzSSxNQUFNLEVBQUMsUUFBUSx3S0FBVCxFQUFtTCxRQUFRLFNBQTNMLEVBQTV4c0ksRUFBbStzSSxNQUFNLEVBQUMsUUFBUSwrMkdBQVQsRUFBMDNHLFFBQVEsV0FBbDRHLEVBQXorc0ksRUFBeTN6SSxNQUFNLEVBQUMsUUFBUSw2K0NBQVQsRUFBdy9DLFFBQVEsU0FBaGdELEVBQS8zekksRUFBMjQySSxNQUFNLEVBQUMsUUFBUSx1R0FBVCxFQUFrSCxRQUFRLE9BQTFILEVBQWo1MkksRUFBcWgzSSxNQUFNLEVBQUMsUUFBUSwraENBQVQsRUFBMGlDLFFBQVEsWUFBbGpDLEVBQTNoM0ksRUFBNU0sRUFBeXk1SSxVQUFVLGlCQUFuejVJLEVBQXMwNUksY0FBYyxFQUFDLFFBQVEsTUFBVCxFQUFpQixtQkFBbUIsSUFBcEMsRUFBcDE1SSxFQUErMzVJLFNBQVMsS0FBeDQ1SSxFQUF6QyIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIiQuZm4udmVjdG9yTWFwKCdhZGRNYXAnLCAnd29ybGRfbWlsbF9lbicse1wiaW5zZXRzXCI6IFt7XCJ3aWR0aFwiOiA5MDAuMCwgXCJ0b3BcIjogMCwgXCJoZWlnaHRcIjogNDQwLjcwNjMxMDc0NDEzMzEsIFwiYmJveFwiOiBbe1wieVwiOiAtMTI2NzE2NzEuMTIzMzMwMDE0LCBcInhcIjogLTIwMDA0Mjk3LjE1MTUyNTgzNn0sIHtcInlcIjogNjkzMDM5Mi4wMjUxMzUxMiwgXCJ4XCI6IDIwMDI2NTcyLjM5NDc0OTM4NH1dLCBcImxlZnRcIjogMH1dLCBcInBhdGhzXCI6IHtcIkJEXCI6IHtcInBhdGhcIjogXCJNNjUyLjcxLDIyOC44NWwtMC4wNCwxLjM4bC0wLjQ2LC0wLjIxbC0wLjQyLDAuM2wwLjA1LDAuNjVsLTAuMTcsLTEuMzdsLTAuNDgsLTEuMjZsLTEuMDgsLTEuNmwtMC4yMywtMC4xM2wtMi4zMSwtMC4xMWwtMC4zMSwwLjM2bDAuMjEsMC45OGwtMC42LDEuMTFsLTAuOCwtMC40bC0wLjM3LDAuMDlsLTAuMjMsMC4zbC0wLjU0LC0wLjIxbC0wLjc4LC0wLjE5bC0wLjM4LC0yLjA0bC0wLjgzLC0xLjg5bDAuNCwtMS41bC0wLjE2LC0wLjM1bC0xLjI0LC0wLjU3bDAuMzYsLTAuNjJsMS41LC0wLjk1bDAuMDIsLTAuNDlsLTEuNjIsLTEuMjZsMC42NCwtMS4zMWwxLjcsMS4wbDAuMTIsMC4wNGwwLjk2LDAuMTFsMC4xOSwxLjYybDAuMjUsMC4yNmwyLjM4LDAuMzdsMi4zMiwtMC4wNGwxLjA2LDAuMzNsLTAuOTIsMS43OWwtMC45NywwLjEzbC0wLjIzLDAuMTZsLTAuNzcsMS41MWwwLjA1LDAuMzVsMS4zNywxLjM3bDAuNSwtMC4xNGwwLjM1LC0xLjQ2bDAuMjQsLTAuMGwxLjI0LDMuOTJaXCIsIFwibmFtZVwiOiBcIkJhbmdsYWRlc2hcIn0sIFwiQkVcIjoge1wicGF0aFwiOiBcIk00MjkuMjgsMTQzLjk1bDEuNzYsMC4yNWwwLjEzLC0wLjAxbDIuMTYsLTAuNjRsMS40NiwxLjM0bDEuMjYsMC43MWwtMC4yMywxLjhsLTAuNDQsMC4wOGwtMC4yNCwwLjI1bC0wLjIsMS4zNmwtMS44LC0xLjIybC0wLjIzLC0wLjA1bC0xLjE0LDAuMjNsLTEuNjIsLTEuNDNsLTEuMTUsLTEuMzFsLTAuMjEsLTAuMWwtMC45NSwtMC4wNGwtMC4yMSwtMC42OGwxLjY2LC0wLjU0WlwiLCBcIm5hbWVcIjogXCJCZWxnaXVtXCJ9LCBcIkJGXCI6IHtcInBhdGhcIjogXCJNNDEzLjQ4LDI2MC4yMWwtMS4yMiwtMC40NmwtMC4xMywtMC4wMmwtMS4xNywwLjFsLTAuMTUsMC4wNmwtMC43MywwLjUzbC0wLjg3LC0wLjQxbC0wLjM5LC0wLjc1bC0wLjEzLC0wLjEzbC0wLjk4LC0wLjQ4bC0wLjE0LC0xLjJsMC42MywtMC45OWwwLjA1LC0wLjE4bC0wLjA1LC0wLjczbDEuOSwtMi4wMWwwLjA4LC0wLjE0bDAuMzUsLTEuNjVsMC40OSwtMC40NGwxLjA1LDAuM2wwLjIxLC0wLjAybDEuMDUsLTAuNTJsMC4xMywtMC4xM2wwLjMsLTAuNThsMS44NywtMS4xbDAuMTEsLTAuMWwwLjQzLC0wLjcybDIuMjMsLTEuMDFsMS4yMSwtMC4zMmwwLjUxLDAuNGwwLjE5LDAuMDZsMS4yNSwtMC4wMWwtMC4xNCwwLjg5bDAuMDEsMC4xM2wwLjM0LDEuMTZsMC4wNiwwLjExbDEuMzUsMS41OWwwLjA3LDEuMTNsMC4yNCwwLjI4bDIuNjQsMC41M2wtMC4wNSwxLjM5bC0wLjQyLDAuNTlsLTEuMTEsMC4yMWwtMC4yMiwwLjE3bC0wLjQ2LDAuOTlsLTAuNjksMC4yM2wtMi4xMiwtMC4wNWwtMS4xNCwtMC4ybC0wLjE5LDAuMDNsLTAuNzIsMC4zNmwtMS4wNywtMC4xN2wtNC4zNSwwLjEybC0wLjI5LDAuMjlsLTAuMDYsMS40NGwwLjI1LDEuNDVaXCIsIFwibmFtZVwiOiBcIkJ1cmtpbmEgRmFzb1wifSwgXCJCR1wiOiB7XCJwYXRoXCI6IFwiTTQ3Ny42MywxNjYuODRsMC41MSwwLjlsMC4zMywwLjE0bDAuOSwtMC4yMWwxLjkxLDAuNDdsMy42OCwwLjE2bDAuMTcsLTAuMDVsMS4yLC0wLjc1bDIuNzgsLTAuNjdsMS43MiwxLjA1bDEuMDIsMC4yNGwtMC45NywwLjk3bC0wLjkxLDIuMTdsMC4wLDAuMjRsMC41NiwxLjE5bC0xLjU4LC0wLjNsLTAuMTYsMC4wMWwtMi41NSwwLjk1bC0wLjIsMC4yOGwtMC4wMiwxLjIzbC0xLjkyLDAuMjRsLTEuNjgsLTAuOTlsLTAuMjcsLTAuMDJsLTEuOTQsMC44bC0xLjUyLC0wLjA3bC0wLjE1LC0xLjcybC0wLjEyLC0wLjIxbC0wLjk5LC0wLjc2bDAuMTgsLTAuMThsMC4wMiwtMC4zOWwtMC4xNywtMC4yMmwwLjMzLC0wLjc1bDAuOTEsLTAuOTFsMC4wMSwtMC40MmwtMS4xNiwtMS4yNWwtMC4xOCwtMC44OWwwLjI0LC0wLjI3WlwiLCBcIm5hbWVcIjogXCJCdWxnYXJpYVwifSwgXCJCQVwiOiB7XCJwYXRoXCI6IFwiTTQ2OC4zOSwxNjQuNjZsMC4xNiwwLjA0bDAuNDMsLTAuMGwtMC40MywwLjkzbDAuMDYsMC4zNGwxLjA4LDEuMDZsLTAuMjgsMS4wOWwtMC41LDAuMTNsLTAuNDcsMC4yOGwtMC44NiwwLjc0bC0wLjEsMC4xNmwtMC4yOCwxLjI5bC0xLjgxLC0wLjk0bC0wLjksLTEuMjJsLTEuMCwtMC43M2wtMS4xLC0xLjFsLTAuNTUsLTAuOTZsLTEuMTEsLTEuM2wwLjMsLTAuNzVsMC41OSwwLjQ2bDAuNDIsLTAuMDRsMC40NiwtMC41NGwxLjAsLTAuMDZsMi4xMSwwLjVsMS43MiwtMC4wM2wxLjA2LDAuNjRaXCIsIFwibmFtZVwiOiBcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcIn0sIFwiQk5cIjoge1wicGF0aFwiOiBcIk03MDcuMzQsMjczLjU3bDAuNzYsLTAuNzJsMS41OSwtMS4wM2wtMC4xOCwxLjkzbC0wLjksLTAuMDZsLTAuMjgsMC4xNGwtMC4zMSwwLjUxbC0wLjY4LC0wLjc4WlwiLCBcIm5hbWVcIjogXCJCcnVuZWlcIn0sIFwiQk9cIjoge1wicGF0aFwiOiBcIk0yNjMuODMsMzQwLjc5bC0wLjIzLC0wLjEybC0yLjg2LC0wLjExbC0wLjI4LDAuMTdsLTAuNzcsMS42N2wtMS4xNywtMS41MWwtMC4xOCwtMC4xMWwtMy4yOCwtMC42NGwtMC4yOCwwLjFsLTIuMDIsMi4zbC0xLjQzLDAuMjlsLTAuOTEsLTMuMzVsLTEuMzEsLTIuODhsMC43NSwtMi40MWwtMC4wOSwtMC4zMmwtMS4yMywtMS4wM2wtMC4zMSwtMS43NmwtMC4wNSwtMC4xMmwtMS4xMiwtMS42bDEuNDksLTIuNjJsMC4wMSwtMC4yOGwtMS4wLC0yLjBsMC40OCwtMC43MmwwLjAyLC0wLjI5bC0wLjM3LC0wLjc4bDAuODcsLTEuMTNsMC4wNiwtMC4xOGwwLjA1LC0yLjE3bDAuMTIsLTEuNzFsMC41LC0wLjhsMC4wMSwtMC4zbC0xLjksLTMuNThsMS4zLDAuMTVsMS4zNCwtMC4wNWwwLjIzLC0wLjEybDAuNTEsLTAuN2wyLjEyLC0wLjk5bDEuMzEsLTAuOTNsMi44MSwtMC4zN2wtMC4yMSwxLjUxbDAuMDEsMC4xM2wwLjI5LDAuOTFsLTAuMTksMS42NGwwLjExLDAuMjdsMi43MiwyLjI3bDAuMTUsMC4wN2wyLjcxLDAuNDFsMC45MiwwLjg4bDAuMTIsMC4wN2wxLjY0LDAuNDlsMS4wLDAuNzFsMC4xOCwwLjA2bDEuNSwtMC4wMmwxLjI0LDAuNjRsMC4xLDEuMzFsMC4wNSwwLjE0bDAuNDQsMC42OGwwLjAyLDAuNzNsLTAuNDQsMC4wM2wtMC4yNywwLjM5bDAuOTYsMi45OWwwLjI4LDAuMjFsNC40MywwLjFsLTAuMjgsMS4xMmwwLjAsMC4xNWwwLjI3LDEuMDJsMC4xNSwwLjE5bDEuMjcsMC42N2wwLjUyLDEuNDJsLTAuNDIsMS45MWwtMC42NiwxLjFsLTAuMDQsMC4ybDAuMjEsMS4zbC0wLjE5LDAuMTNsLTAuMDEsLTAuMjdsLTAuMTUsLTAuMjRsLTIuMzMsLTEuMzNsLTAuMTQsLTAuMDRsLTIuMzgsLTAuMDNsLTQuMzYsMC43NmwtMC4yMSwwLjE2bC0xLjIsMi4yOWwtMC4wMywwLjEzbC0wLjA2LDEuMzdsLTAuNzksMi41M2wtMC4wNSwtMC4wOFpcIiwgXCJuYW1lXCI6IFwiQm9saXZpYVwifSwgXCJKUFwiOiB7XCJwYXRoXCI6IFwiTTc4MS4xNywxNjYuNzhsMS44LDAuNjdsMC4yOCwtMC4wNGwxLjM4LC0xLjAxbDAuNDMsMi42N2wtMy40NCwwLjc3bC0wLjE4LDAuMTJsLTIuMDQsMi43OWwtMy43MSwtMS45NGwtMC40MiwwLjE1bC0xLjI5LDMuMTFsLTIuMzIsMC4wNGwtMC4zLC0yLjYzbDEuMTIsLTIuMWwyLjUxLC0wLjE2bDAuMjgsLTAuMjVsMC43MywtNC4yMmwwLjU4LC0xLjlsMi41OSwyLjg0bDIuMCwxLjFaTTc3My42NiwxODcuMzZsLTAuOTIsMi4yNGwtMC4wMSwwLjJsMC40LDEuM2wtMS4xOCwxLjgxbC0zLjA2LDEuMjhsLTQuMzUsMC4xN2wtMC4xOSwwLjA4bC0zLjQsMy4wNmwtMS4zNiwtMC44N2wtMC4xLC0xLjk1bC0wLjM0LC0wLjI4bC00LjM1LDAuNjJsLTIuOTksMS4zM2wtMi44NywwLjA1bC0wLjI4LDAuMmwwLjA5LDAuMzNsMi4zNywxLjkzbC0xLjU3LDQuNDRsLTEuMzUsMC45N2wtMC45LC0wLjc5bDAuNTcsLTIuMzJsLTAuMTUsLTAuMzRsLTEuNSwtMC43N2wtMC44MSwtMS41M2wyLjA0LC0wLjc1bDAuMTQsLTAuMWwxLjI4LC0xLjcybDIuNDcsLTEuNDNsMS44NCwtMS45Mmw0LjgzLC0wLjgybDIuNjIsMC41N2wwLjMzLC0wLjE2bDIuNDUsLTQuNzdsMS4zOCwxLjE0bDAuMzgsMC4wbDUuMSwtNC4wMmwwLjA5LC0wLjExbDEuNTcsLTMuNTdsMC4wMiwtMC4xNmwtMC40MiwtMy4yMmwwLjk0LC0xLjY3bDIuMjcsLTAuNDdsMS4yNiwzLjgybC0wLjA3LDIuMjNsLTIuMjYsMi44NmwtMC4wNiwwLjE5bDAuMDQsMi45M1pNNzU3Ljg1LDE5Ni4xOGwwLjIyLDAuNjZsLTEuMTEsMS4zM2wtMC44LC0wLjdsLTAuMzMsLTAuMDRsLTEuMjgsMC42NWwtMC4xNCwwLjE1bC0wLjU0LDEuMzRsLTEuMTcsLTAuNTdsMC4wMiwtMS4wM2wxLjIsLTEuNDVsMS4yNCwwLjI4bDAuMjksLTAuMWwwLjksLTEuMDNsMS41MSwwLjVaXCIsIFwibmFtZVwiOiBcIkphcGFuXCJ9LCBcIkJJXCI6IHtcInBhdGhcIjogXCJNNDk0LjcsMjk1LjgzbC0wLjE0LC0yLjcxbC0wLjA0LC0wLjEzbC0wLjM0LC0wLjYybDAuOTMsMC4xMmwwLjMsLTAuMTZsMC42NywtMS4yNWwwLjksMC4xMWwwLjExLDAuNzZsMC4wOCwwLjE2bDAuNDYsMC40OGwwLjAyLDAuNTZsLTAuNTUsMC40OGwtMC45NiwxLjI5bC0wLjgyLDAuODJsLTAuNjEsMC4wN1pcIiwgXCJuYW1lXCI6IFwiQnVydW5kaVwifSwgXCJCSlwiOiB7XCJwYXRoXCI6IFwiTTQyNy40LDI2OC45NGwtMS41OCwwLjIybC0wLjUyLC0xLjQ1bDAuMTEsLTUuNzNsLTAuMDgsLTAuMjFsLTAuNDMsLTAuNDRsLTAuMDksLTEuMTNsLTAuMDksLTAuMTlsLTEuNTIsLTEuNTJsMC4yNCwtMS4wMWwwLjcsLTAuMjNsMC4xOCwtMC4xNmwwLjQ1LC0wLjk3bDEuMDcsLTAuMjFsMC4xOSwtMC4xMmwwLjUzLC0wLjczbDAuNzMsLTAuNjVsMC42OCwtMC4wbDEuNjksMS4zbC0wLjA4LDAuNjdsMC4wMiwwLjE0bDAuNTIsMS4zOGwtMC40NCwwLjlsLTAuMDEsMC4yNGwwLjIsMC41MmwtMS4xLDEuNDJsLTAuNzYsMC43NmwtMC4wOCwwLjEzbC0wLjQ3LDEuNTlsMC4wNSwxLjY5bC0wLjEzLDMuNzlaXCIsIFwibmFtZVwiOiBcIkJlbmluXCJ9LCBcIkJUXCI6IHtcInBhdGhcIjogXCJNNjUwLjM4LDIxMy43OGwwLjg4LDAuNzVsLTAuMTMsMS4yNGwtMS43NywwLjA3bC0yLjEsLTAuMThsLTEuNTcsMC40bC0yLjAyLC0wLjkxbC0wLjAyLC0wLjI0bDEuNTQsLTEuODdsMS4xOCwtMC42bDEuNjcsMC41OWwxLjMyLDAuMDhsMS4wMSwwLjY3WlwiLCBcIm5hbWVcIjogXCJCaHV0YW5cIn0sIFwiSk1cIjoge1wicGF0aFwiOiBcIk0yMjYuNjcsMjM4LjM3bDEuNjQsMC4yM2wxLjIsMC41NmwwLjExLDAuMTlsLTEuMjUsMC4wM2wtMC4xNCwwLjA0bC0wLjY1LDAuMzdsLTEuMjQsLTAuMzdsLTEuMTcsLTAuNzdsMC4xMSwtMC4yMmwwLjg2LC0wLjE1bDAuNTIsMC4wOFpcIiwgXCJuYW1lXCI6IFwiSmFtYWljYVwifSwgXCJCV1wiOiB7XCJwYXRoXCI6IFwiTTQ4NC45MSwzMzEuOTZsMC41MywwLjUybDAuODIsMS41M2wyLjgzLDIuODZsMC4xNCwwLjA4bDAuODUsMC4yMmwwLjAzLDAuODFsMC43NCwxLjY2bDAuMjEsMC4xN2wxLjg3LDAuMzlsMS4xNywwLjg3bC0zLjEzLDEuNzFsLTIuMywyLjAxbC0wLjA3LDAuMWwtMC44MiwxLjc0bC0wLjY2LDAuODhsLTEuMjQsMC4xOWwtMC4yNCwwLjJsLTAuNjUsMS45OGwtMS40LDAuNTVsLTEuOSwtMC4xMmwtMS4yLC0wLjc0bC0xLjA2LC0wLjMybC0wLjIyLDAuMDJsLTEuMjIsMC42MmwtMC4xNCwwLjE0bC0wLjU4LDEuMjFsLTEuMTYsMC43OWwtMS4xOCwxLjEzbC0xLjUsMC4yM2wtMC40LC0wLjY4bDAuMjIsLTEuNTNsLTAuMDQsLTAuMTlsLTEuNDgsLTIuNTRsLTAuMTEsLTAuMTFsLTAuNTMsLTAuMzFsLTAuMCwtNy4yNWwyLjE4LC0wLjA4bDAuMjksLTAuM2wwLjA3LC05LjBsMS42MywtMC4wOGwzLjY5LC0wLjg2bDAuODQsMC45M2wwLjM4LDAuMDVsMS41MywtMC45N2wwLjc5LC0wLjAzbDEuMywtMC41M2wwLjIzLDAuMWwwLjkyLDEuOTZaXCIsIFwibmFtZVwiOiBcIkJvdHN3YW5hXCJ9LCBcIkJSXCI6IHtcInBhdGhcIjogXCJNMjU5LjQ5LDI3NC44N2wxLjQyLDAuMjVsMS45NywwLjYybDAuMjgsLTAuMDVsMC42NywtMC41NWwxLjc2LC0wLjM4bDIuOCwtMC45NGwwLjEyLC0wLjA4bDAuOTIsLTAuOTZsMC4wNSwtMC4zM2wtMC4xNSwtMC4zMmwwLjczLC0wLjA2bDAuMzYsMC4zNWwtMC4yNywwLjkzbDAuMTcsMC4zNmwwLjc2LDAuMzRsMC40NCwwLjlsLTAuNTgsMC43M2wtMC4wNiwwLjEzbC0wLjQsMi4xM2wwLjAzLDAuMTlsMC42MiwxLjIybDAuMTcsMS4xMWwwLjExLDAuMTlsMS41NCwxLjE4bDAuMTUsMC4wNmwxLjIzLDAuMTJsMC4yOSwtMC4xNWwwLjIsLTAuMzZsMC43MSwtMC4xMWwxLjEzLC0wLjQ0bDAuNzksLTAuNjNsMS4yNSwwLjE5bDAuNjUsLTAuMDhsMS4zMiwwLjJsMC4zMiwtMC4xOGwwLjIzLC0wLjUxbC0wLjA1LC0wLjMxbC0wLjMxLC0wLjM3bDAuMTEsLTAuMzFsMC43NSwwLjE3bDAuMTMsMC4wbDEuMSwtMC4yNGwxLjM0LDAuNWwxLjA4LDAuNTFsMC4zMywtMC4wNWwwLjY3LC0wLjU4bDAuMjcsMC4wNWwwLjI4LDAuNTdsMC4zMSwwLjE3bDEuMiwtMC4xOGwwLjE3LC0wLjA4bDEuMDMsLTEuMDVsMC43NiwtMS44MmwxLjM5LC0yLjE2bDAuNDksLTAuMDdsMC41MiwxLjE3bDEuNCw0LjM3bDAuMiwwLjJsMS4xNCwwLjM1bDAuMDUsMS4zOWwtMS44LDEuOTdsMC4wMSwwLjQybDAuNzgsMC43NWwwLjE4LDAuMDhsNC4xNiwwLjM3bDAuMDgsMi4yNWwwLjUsMC4yMmwxLjc4LC0xLjU0bDIuOTgsMC44NWw0LjA3LDEuNWwxLjA3LDEuMjhsLTAuMzcsMS4yM2wwLjM2LDAuMzhsMi44MywtMC43NWw0LjgsMS4zbDMuNzUsLTAuMDlsMy42LDIuMDJsMy4yNywyLjg0bDEuOTMsMC43MmwyLjEzLDAuMTFsMC43NiwwLjY2bDEuMjIsNC41NmwtMC45Niw0LjAzbC0xLjIyLDEuNThsLTMuNTIsMy41MWwtMS42MywyLjkxbC0xLjc1LDIuMDlsLTAuNSwwLjA0bC0wLjI2LDAuMTlsLTAuNzIsMS45OWwwLjE4LDQuNzZsLTAuOTUsNS41NmwtMC43NCwwLjk2bC0wLjA2LDAuMTVsLTAuNDMsMy4zOWwtMi40OSwzLjM0bC0wLjA2LDAuMTNsLTAuNCwyLjU2bC0xLjksMS4wN2wtMC4xMywwLjE2bC0wLjUxLDEuMzhsLTIuNTksMC4wbC0zLjk0LDEuMDFsLTEuODIsMS4xOWwtMi44NSwwLjgxbC0zLjAxLDIuMTdsLTIuMTIsMi42NWwtMC4wNiwwLjEzbC0wLjM2LDIuMGwwLjAxLDAuMTNsMC40LDEuNDJsLTAuNDUsMi42M2wtMC41MywxLjIzbC0xLjc2LDEuNTNsLTIuNzYsNC43OWwtMi4xNiwyLjE1bC0xLjY5LDEuMjlsLTAuMDksMC4xMmwtMS4xMiwyLjZsLTEuMywxLjI2bC0wLjQ1LC0xLjAybDAuOTksLTEuMThsMC4wMSwtMC4zN2wtMS41LC0xLjk1bC0xLjk4LC0xLjU0bC0yLjU4LC0xLjc3bC0wLjIsLTAuMDVsLTAuODEsMC4wN2wtMi40MiwtMi4wNWwtMC4yNSwtMC4wN2wtMC43NywwLjE0bDIuNzUsLTMuMDdsMi44LC0yLjYxbDEuNjcsLTEuMDlsMi4xMSwtMS40OWwwLjEzLC0wLjI0bDAuMDUsLTIuMTVsLTAuMDcsLTAuMmwtMS4yNiwtMS41NGwtMC4zNSwtMC4wOWwtMC42NCwwLjI3bDAuMywtMC45NWwwLjM0LC0xLjU3bDAuMDEsLTEuNTJsLTAuMTYsLTAuMjZsLTAuOSwtMC40OGwtMC4yNywtMC4wMWwtMC44NiwwLjM5bC0wLjY1LC0wLjA4bC0wLjIzLC0wLjhsLTAuMjMsLTIuMzlsLTAuMDQsLTAuMTJsLTAuNDcsLTAuNzlsLTAuMTQsLTAuMTJsLTEuNjksLTAuNzFsLTAuMjUsMC4wMWwtMC45MywwLjQ3bC0yLjI5LC0wLjQ0bDAuMTUsLTMuM2wtMC4wMywtMC4xNWwtMC42MiwtMS4yMmwwLjU3LC0wLjM5bDAuMTMsLTAuM2wtMC4yMiwtMS4zN2wwLjY3LC0xLjEzbDAuNDQsLTIuMDRsLTAuMDEsLTAuMTdsLTAuNTksLTEuNjFsLTAuMTQsLTAuMTZsLTEuMjUsLTAuNjZsLTAuMjIsLTAuODJsMC4zNSwtMS40MWwtMC4yOCwtMC4zN2wtNC41OSwtMC4xbC0wLjc4LC0yLjQxbDAuMzQsLTAuMDJsMC4yOCwtMC4zMWwtMC4wMywtMS4xbC0wLjA1LC0wLjE2bC0wLjQ1LC0wLjY4bC0wLjEsLTEuNGwtMC4xNiwtMC4yNGwtMS40NSwtMC43NmwtMC4xNCwtMC4wM2wtMS40OCwwLjAybC0xLjA0LC0wLjczbC0xLjYyLC0wLjQ4bC0wLjkzLC0wLjlsLTAuMTYsLTAuMDhsLTIuNzIsLTAuNDFsLTIuNTMsLTIuMTJsMC4xOCwtMS41NGwtMC4wMSwtMC4xM2wtMC4yOSwtMC45MWwwLjI2LC0xLjgzbC0wLjM0LC0wLjM0bC0zLjI4LDAuNDNsLTAuMTQsMC4wNWwtMS4zLDAuOTNsLTIuMTYsMS4wMWwtMC4xMiwwLjA5bC0wLjQ3LDAuNjVsLTEuMTIsMC4wNWwtMS44NCwtMC4yMWwtMC4xMiwwLjAxbC0xLjMzLDAuNDFsLTAuODIsLTAuMjFsMC4xNiwtMy42bC0wLjQ4LC0wLjI2bC0xLjk3LDEuNDNsLTEuOTYsLTAuMDZsLTAuODYsLTEuMjNsLTAuMjIsLTAuMTNsLTEuMjMsLTAuMTFsMC4zNCwtMC42OWwtMC4wNSwtMC4zM2wtMS4zNiwtMS41bC0wLjkyLC0yLjBsMC40NSwtMC4zMmwwLjEzLC0wLjI1bC0wLjAsLTAuODdsMS4zNCwtMC42NGwwLjE3LC0wLjMybC0wLjIzLC0xLjIzbDAuNTYsLTAuNzdsMC4wNSwtMC4xM2wwLjE2LC0xLjAzbDIuNywtMS42MWwyLjAxLC0wLjQ3bDAuMTYsLTAuMDlsMC4yNCwtMC4yN2wyLjExLDAuMTFsMC4zMSwtMC4yNWwxLjEzLC02Ljg3bDAuMDYsLTEuMTJsLTAuNCwtMS41M2wtMC4xLC0wLjE1bC0xLjAsLTAuODJsMC4wMSwtMS40NWwxLjA4LC0wLjMybDAuMzksMC4ybDAuNDQsLTAuMjRsMC4wOCwtMC45NmwtMC4yNSwtMC4zMmwtMS4yMiwtMC4yMmwtMC4wMiwtMS4wMWw0LjU3LDAuMDVsMC4yMiwtMC4wOWwwLjYsLTAuNjNsMC40NCwwLjVsMC40NywxLjQybDAuNDUsMC4xNmwwLjI3LC0wLjE4bDEuMjEsMS4xNmwwLjIzLDAuMDhsMS45NSwtMC4xNmwwLjIzLC0wLjE0bDAuNDMsLTAuNjdsMS43NiwtMC41NWwxLjA1LC0wLjQybDAuMTgsLTAuMmwwLjI1LC0wLjkybDEuNjUsLTAuNjZsMC4xOCwtMC4zNWwtMC4xNCwtMC41M2wtMC4yNiwtMC4yMmwtMS45MSwtMC4xOWwtMC4yOSwtMS4zM2wwLjEsLTEuNjRsLTAuMTUsLTAuMjhsLTAuNDQsLTAuMjVaXCIsIFwibmFtZVwiOiBcIkJyYXppbFwifSwgXCJCU1wiOiB7XCJwYXRoXCI6IFwiTTIyNy41MSwyMTYuNjlsMC4zLDAuMThsLTAuMjQsMS4wN2wwLjAzLC0xLjA0bC0wLjA5LC0wLjIxWk0yMjYuNSwyMjQuMDNsLTAuMTMsMC4wM2wtMC41NCwtMS4zbC0wLjA5LC0wLjEybC0wLjc4LC0wLjY0bDAuNCwtMS4yNmwwLjMzLDAuMDVsMC43OSwyLjBsMC4wMSwxLjI0Wk0yMjUuNzYsMjE2LjVsLTIuMTYsMC4zNGwtMC4wNywtMC40MWwwLjg1LC0wLjE2bDEuMzYsMC4wN2wwLjAyLDAuMTZaXCIsIFwibmFtZVwiOiBcIlRoZSBCYWhhbWFzXCJ9LCBcIkJZXCI6IHtcInBhdGhcIjogXCJNNDgwLjA4LDEzNS4yOGwyLjA5LDAuMDJsMC4xMywtMC4wM2wyLjcyLC0xLjNsMC4xNiwtMC4xOWwwLjU1LC0xLjgzbDEuOTQsLTEuMDZsMC4xNSwtMC4zMWwtMC4yLC0xLjMzbDEuMzMsLTAuNTJsMi41OCwtMS4zbDIuMzksMC44bDAuMywwLjc1bDAuMzcsMC4xN2wxLjIyLC0wLjM5bDIuMTgsMC43NWwwLjIsMS4zNmwtMC40OCwwLjg1bDAuMDEsMC4zMmwxLjU3LDIuMjZsMC45MiwwLjZsLTAuMSwwLjQxbDAuMTksMC4zNWwxLjYxLDAuNTdsMC40OCwwLjZsLTAuNjQsMC40OWwtMS45MSwtMC4xMWwtMC4xOCwwLjA1bC0wLjQ4LDAuMzJsLTAuMSwwLjM5bDAuNTcsMS4xbDAuNTEsMS43OGwtMS43OSwwLjE3bC0wLjE4LDAuMDhsLTAuNzcsMC43M2wtMC4wOSwwLjE5bC0wLjEzLDEuMzFsLTAuNzUsLTAuMjJsLTIuMTEsMC4xNWwtMC41NiwtMC42NmwtMC4zOSwtMC4wNmwtMC44LDAuNDlsLTAuNzksLTAuNGwtMC4xMywtMC4wM2wtMS45NCwtMC4wN2wtMi43NiwtMC43OWwtMi41OCwtMC4yN2wtMS45OCwwLjA3bC0wLjE1LDAuMDVsLTEuMzEsMC44NmwtMC44LDAuMDlsLTAuMDQsLTEuMTZsLTAuMDMsLTAuMTJsLTAuNjMsLTEuMjhsMS4yMiwtMC41NmwwLjE3LC0wLjI3bDAuMDEsLTEuMzVsLTAuMDQsLTAuMTVsLTAuNjYsLTEuMjRsLTAuMDgsLTEuMTJaXCIsIFwibmFtZVwiOiBcIkJlbGFydXNcIn0sIFwiQlpcIjoge1wicGF0aFwiOiBcIk0xOTguMDMsMjM5LjdsMC4yOCwwLjE5bDAuNDMsLTAuMWwwLjgyLC0xLjQybDAuMCwwLjA3bDAuMjksMC4yOWwwLjE2LDAuMGwtMC4wMiwwLjM1bC0wLjM5LDEuMDhsMC4wMiwwLjI1bDAuMTYsMC4yOWwtMC4yMywwLjhsMC4wNCwwLjI0bDAuMDksMC4xNGwtMC4yNSwxLjEybC0wLjM4LDAuNTNsLTAuMzMsMC4wNmwtMC4yMSwwLjE1bC0wLjQxLDAuNzRsLTAuMjUsMC4wbDAuMTcsLTIuNThsMC4wMSwtMi4yWlwiLCBcIm5hbWVcIjogXCJCZWxpemVcIn0sIFwiUlVcIjoge1wicGF0aFwiOiBcIk02ODguNTcsMzguODVsMC42MywyLjM5bDAuNDQsMC4xOWwyLjIyLC0xLjIzbDcuMTgsMC4wN2w1LjU0LDIuNDlsMS44NSwxLjc3bC0wLjU1LDIuMzRsLTIuNjQsMS40MmwtNi41NywyLjc2bC0xLjk1LDEuNWwwLjEyLDAuNTNsMy4wOSwwLjY4bDMuNjksMS4yM2wwLjIxLC0wLjAxbDEuOTgsLTAuODFsMS4xNiwyLjg0bDAuNSwwLjA4bDEuMDMsLTEuMThsMy44NiwtMC43NGw3Ljc5LDAuNzhsMC41NiwyLjA1bDAuMjcsMC4yMmwxMC40NywwLjcxbDAuMzIsLTAuMjlsMC4xMywtMy4zNGw0Ljk4LDAuOGwzLjk2LC0wLjAybDMuODgsMi40M2wxLjA2LDIuNzlsLTEuMzgsMS44M2wwLjAxLDAuMzhsMy4xNSwzLjY0bDAuMSwwLjA4bDMuOTQsMS44NmwwLjQsLTAuMTRsMi4yOCwtNC41NmwzLjc1LDEuOTRsMC4yMiwwLjAybDQuMTgsLTEuMjJsNC43NiwxLjRsMC4yNiwtMC4wNGwxLjc0LC0xLjIzbDMuOTgsMC42M2wwLjMyLC0wLjQxbC0xLjcxLC00LjFsMy4wLC0xLjg2bDIyLjM5LDMuMDRsMi4wNiwyLjY3bDAuMSwwLjA4bDYuNTUsMy41MWwwLjE3LDAuMDNsMTAuMDgsLTAuODZsNC44NiwwLjczbDEuOTEsMS43MmwtMC4yOSwzLjEzbDAuMTgsMC4zMWwzLjA4LDEuMjZsMC4xOSwwLjAxbDMuMzIsLTAuOWw0LjM3LC0wLjExbDQuNzgsMC44N2w0LjYxLC0wLjQ4bDQuMjYsMy44MmwwLjMyLDAuMDVsMy4xLC0xLjRsMC4xMiwtMC40NWwtMS45MSwtMi42N2wwLjkyLC0xLjY0bDcuNzgsMS4yMmw1LjIyLC0wLjI2bDcuMTIsMi4xbDkuNiw1LjIybDYuNCw0LjE1bC0wLjIsMi40NGwwLjE0LDAuMjhsMS42OSwxLjA0bDAuNDUsLTAuMzFsLTAuNTEsLTIuNjZsNi4zMSwwLjU4bDQuNTIsMy42MWwtMi4xLDEuNTJsLTQuMDIsMC40MmwtMC4yNywwLjI5bC0wLjA2LDMuODNsLTAuODEsMC42N2wtMi4xNCwtMC4xMWwtMS45MSwtMS4zOWwtMy4xOSwtMS4xM2wtMC41MSwtMS42M2wtMC4yMSwtMC4ybC0yLjU0LC0wLjY3bC0wLjEzLC0wLjBsLTIuNjksMC41bC0xLjEyLC0xLjE5bDAuNDgsLTEuMzZsLTAuMzgsLTAuMzlsLTMuMCwwLjk4bC0wLjE3LDAuNDRsMS4wMiwxLjc2bC0xLjI3LDEuNTVsLTMuMDksMS43MWwtMy4xNSwtMC4yOWwtMC4zLDAuMThsMC4wNywwLjM0bDIuMjIsMi4xbDEuNDcsMy4yMmwxLjE1LDEuMDlsMC4yNSwxLjQxbC0wLjQ4LDAuNzZsLTQuNDcsLTAuODFsLTAuMTcsMC4wMmwtNi45NywyLjlsLTIuMiwwLjQ0bC0wLjExLDAuMDVsLTMuODMsMi42OGwtMy42MywyLjMybC0wLjEsMC4xMWwtMC43NiwxLjRsLTMuMywtMi40bC0wLjMsLTAuMDNsLTYuMzEsMi44NWwtMC45OSwtMS4yMWwtMC40LC0wLjA2bC0yLjMyLDEuNTRsLTMuMjMsLTAuNDlsLTAuMzMsMC4ybC0wLjc5LDIuMzlsLTIuOTcsMy41MWwtMC4wNywwLjIxbDAuMDksMS40N2wwLjIyLDAuMjdsMi42MiwwLjc0bC0wLjMsNC43bC0yLjA2LDAuMTJsLTAuMjYsMC4ybC0xLjA3LDIuOTRsMC4wNCwwLjI3bDAuODMsMS4xOWwtNC4wMywxLjYzbC0wLjE4LDAuMjFsLTAuODMsMy43MmwtMy41NSwwLjc5bC0wLjIzLDAuMjNsLTAuNzMsMy4zMmwtMy4yMiwyLjc2bC0wLjc2LC0xLjg4bC0xLjA3LC00Ljg4bC0xLjM5LC03LjU5bDEuMTcsLTQuNzZsMi4wNSwtMi4wOGwwLjA5LC0wLjE5bDAuMTEsLTEuNDZsMy42NywtMC43N2wwLjE1LC0wLjA4bDQuNDcsLTQuNjFsNC4yOSwtMy44Mmw0LjQ4LC0zLjAxbDAuMTEsLTAuMTRsMi4wMSwtNS40M2wtMC4zMSwtMC40bC0zLjA0LDAuMzNsLTAuMjQsMC4xN2wtMS40NywzLjExbC01Ljk4LDMuOTRsLTEuOTEsLTQuMzZsLTAuMzMsLTAuMTdsLTYuNDYsMS4zbC0wLjE1LDAuMDhsLTYuMjcsNi4zM2wtMC4wMSwwLjQxbDEuNywxLjg3bC01LjA0LDAuODdsLTMuNTEsMC4zNGwwLjE2LC0yLjMybC0wLjI2LC0wLjMybC0zLjg5LC0wLjU2bC0wLjE5LDAuMDRsLTMuMDIsMS43N2wtNy42MywtMC42M2wtOC4yNCwxLjFsLTAuMTYsMC4wN2wtOC4xMSw3LjA5bC05LjYsOC4zMWwwLjE2LDAuNTJsMy43OSwwLjQybDEuMTYsMi4wM2wwLjE3LDAuMTRsMi40MywwLjc2bDAuMzEsLTAuMDhsMS41LC0xLjYxbDIuNDksMC4ybDMuNDYsMy42bDAuMDgsMi42N2wtMS45MSwzLjI2bC0wLjA0LDAuMTRsLTAuMjEsMy45MWwtMS4xMSw1LjA5bC0zLjczLDQuNTVsLTAuODcsMi4yMWwtNi43Myw3LjE0bC0xLjU5LDEuNzdsLTMuMjMsMS43MmwtMS4zOCwwLjAzbC0xLjQ4LC0xLjM5bC0wLjM3LC0wLjAzbC0zLjM2LDIuMjJsLTAuMTEsMC4xNGwtMC4xNiwwLjQybC0wLjAxLC0xLjA5bDEuMCwtMC4wNmwwLjI4LC0wLjI3bDAuMzYsLTMuNmwtMC42MSwtMi41MWwxLjg1LC0wLjk0bDIuOTQsMC41M2wwLjMyLC0wLjE1bDEuNzEsLTMuMWwwLjg0LC0zLjM4bDAuOTcsLTEuMThsMS4zMiwtMi44OGwtMC4zNCwtMC40MmwtNC4xNCwwLjk1bC0yLjE4LDEuMjVsLTMuNTEsLTAuMGwtMC45NSwtMi44MWwtMC4xLC0wLjE0bC0yLjk3LC0yLjNsLTAuMTEsLTAuMDVsLTQuMTksLTEuMGwtMC44OSwtMy4wOGwtMC44NywtMi4wM2wtMC45NSwtMS40NmwtMS41NCwtMy4zN2wtMC4xMiwtMC4xNGwtMi4yNywtMS4yOGwtMy44MywtMS4wMmwtMy4zNywwLjFsLTMuMTEsMC42MWwtMC4xMywwLjA2bC0yLjA3LDEuNjlsMC4wNCwwLjQ5bDEuMjMsMC43MmwwLjAzLDEuNTNsLTEuMzQsMS4wNWwtMi4yNiwzLjUxbC0wLjA1LDAuMTdsMC4wMiwxLjI3bC0zLjI1LDEuOWwtMi44NywtMS4xN2wtMC4xNCwtMC4wMmwtMi44NiwwLjI2bC0xLjIyLC0xLjAybC0wLjEyLC0wLjA2bC0xLjUsLTAuMzVsLTAuMjMsMC4wNGwtMy42MiwyLjI3bC0zLjI0LDAuNTNsLTIuMjgsMC43OWwtMy4wOCwtMC41MWwtMi4yNCwwLjAzbC0xLjQ5LC0xLjYxbC0yLjQ1LC0xLjU3bC0wLjExLC0wLjA0bC0yLjYsLTAuNDNsLTMuMTcsMC40M2wtMi4zMSwwLjU5bC0zLjMxLC0xLjI4bC0wLjQ1LC0yLjMxbC0wLjIxLC0wLjIzbC0yLjk0LC0wLjg1bC0yLjI2LC0wLjM5bC0yLjc3LC0xLjM2bC0wLjM3LDAuMDlsLTIuNTksMy40NWwtMC4wMywwLjMybDAuOTEsMS43NGwtMi4xNSwyLjAxbC0zLjQ3LC0wLjc5bC0yLjQ0LC0wLjEybC0xLjU5LC0xLjQ2bC0wLjIsLTAuMDhsLTIuNTUsLTAuMDVsLTIuMTIsLTAuOThsLTAuMjQsLTAuMDFsLTMuODUsMS41N2wtNC43NCwyLjc5bC0yLjU5LDAuNTVsLTAuNzksMC4yMWwtMS4yMSwtMS44MWwtMC4yOSwtMC4xM2wtMy4wNSwwLjQxbC0wLjk2LC0xLjI1bC0wLjE0LC0wLjFsLTEuNjUsLTAuNmwtMS4xNSwtMS44MmwtMC4xMywtMC4xMmwtMS4zOCwtMC42bC0wLjE5LC0wLjAybC0zLjQ5LDAuODJsLTMuMzUsLTEuODVsLTAuMzgsMC4wOGwtMS4wOCwxLjRsLTUuMzYsLTguMTdsLTMuMDIsLTIuNTJsMC43MiwtMC44NWwwLjAxLC0wLjM4bC0wLjM3LC0wLjA4bC02LjIyLDMuMjFsLTEuOTgsMC4xNmwwLjE3LC0xLjUxbC0wLjIsLTAuMzFsLTMuMjIsLTEuMTdsLTAuMTksLTAuMGwtMi4zLDAuNzRsLTAuNzIsLTMuMjdsLTAuMjQsLTAuMjNsLTQuNSwtMC43NWwtMC4yMSwwLjA0bC0yLjIsMS40MmwtNi4yMSwxLjI3bC0wLjExLDAuMDVsLTEuMTYsMC44MWwtOS4zLDEuMTlsLTAuMTgsMC4wOWwtMS4xNSwxLjE3bC0wLjAyLDAuMzlsMS41NiwyLjAxbC0yLjAyLDAuNzRsLTAuMTYsMC40MmwwLjM1LDAuNjhsLTIuMTgsMS40OWwwLjAyLDAuNTFsMy44MywyLjE2bC0wLjQ1LDEuMTNsLTMuMzEsLTAuMTNsLTAuMjUsMC4xMmwtMC41NywwLjc3bC0yLjk3LC0xLjU5bC0wLjE1LC0wLjA0bC0zLjk3LDAuMDdsLTAuMTMsMC4wM2wtMi41MywxLjMybC0yLjg0LC0xLjI4bC01LjUyLC0yLjNsLTAuMTIsLTAuMDJsLTMuOTEsMC4wOWwtMC4xNiwwLjA1bC01LjE3LDMuNmwtMC4xMywwLjIxbC0wLjI1LDEuODlsLTIuMTcsLTEuNmwtMC40NCwwLjFsLTIuMCwzLjU5bDAuMDYsMC4zN2wwLjU1LDAuNWwtMS4zMiwyLjIzbDAuMDQsMC4zNmwyLjEzLDIuMTdsMC4yMywwLjA5bDEuNywtMC4wOGwxLjQyLDEuODlsLTAuMjMsMS41bDAuMTksMC4zMmwwLjk0LDAuMzhsLTAuODksMS40NGwtMi4zLDAuNDlsLTAuMTcsMC4xMWwtMi40OSwzLjJsMC4wLDAuMzdsMi4yLDIuODFsLTAuMjMsMS45M2wwLjA2LDAuMjJsMi41NiwzLjMybC0xLjI3LDEuMDJsLTAuNCwwLjY2bC0wLjgsLTAuMTVsLTEuNjUsLTEuNzVsLTAuMTgsLTAuMDlsLTAuNjYsLTAuMDlsLTEuNDUsLTAuNjRsLTAuNzIsLTEuMTZsLTAuMTgsLTAuMTNsLTIuMzQsLTAuNjNsLTAuMTcsMC4wbC0xLjMyLDAuNDFsLTAuMzEsLTAuNGwtMC4xMiwtMC4wOWwtMy40OSwtMS40OGwtMy42NywtMC40OWwtMi4xLC0wLjUybC0wLjMsMC4xbC0wLjEyLDAuMTRsLTIuOTYsLTIuNGwtMi44OSwtMS4xOWwtMS42OSwtMS40MmwxLjI3LC0wLjM1bDAuMTYsLTAuMWwyLjA4LC0yLjYxbC0wLjA0LC0wLjQxbC0xLjAyLC0wLjlsMy4yMSwtMS4xMmwwLjIsLTAuMzFsLTAuMDcsLTAuNjlsLTAuMzcsLTAuMjZsLTEuODYsMC40MmwwLjA1LC0wLjg2bDEuMTEsLTAuNzZsMi4zNSwtMC4yM2wwLjI1LC0wLjE5bDAuMzksLTEuMDdsMC4wLC0wLjE5bC0wLjUxLC0xLjY0bDAuOTUsLTEuNThsMC4wNCwtMC4xNmwtMC4wMywtMC45NWwtMC4yMiwtMC4yOGwtMy42OSwtMS4wNmwtMS40MywwLjAybC0xLjQ1LC0xLjQ0bC0wLjI5LC0wLjA4bC0xLjgzLDAuNDlsLTIuODgsLTEuMDRsMC4wNCwtMC40MmwtMC4wNCwtMC4xOGwtMC44OSwtMS40M2wtMC4yMywtMC4xNGwtMS43NywtMC4xNGwtMC4xMywtMC42NmwwLjUyLC0wLjU2bDAuMDEsLTAuNGwtMS42LC0xLjlsLTAuMjcsLTAuMWwtMi41NSwwLjMybC0wLjcxLC0wLjE2bC0wLjMsMC4xbC0wLjUzLDAuNjNsLTAuNTgsLTAuMDhsLTAuNTYsLTEuOTdsLTAuNDgsLTAuOTRsMC4xNywtMC4xMWwxLjkyLDAuMTFsMC4yLC0wLjA2bDAuOTcsLTAuNzRsMC4wNSwtMC40MmwtMC43MiwtMC45MWwtMC4xMywtMC4xbC0xLjQzLC0wLjUxbDAuMDksLTAuMzZsLTAuMTMsLTAuMzNsLTAuOTcsLTAuNTlsLTEuNDMsLTIuMDZsMC40NCwtMC43N2wwLjA0LC0wLjE5bC0wLjI1LC0xLjY0bC0wLjIsLTAuMjRsLTIuNDUsLTAuODRsLTAuMTksLTAuMGwtMS4wNSwwLjM0bC0wLjI1LC0wLjYybC0wLjE4LC0wLjE3bC0yLjUsLTAuODRsLTAuNzQsLTEuOTNsLTAuMjEsLTEuN2wtMC4xMywtMC4yMWwtMC45MiwtMC42M2wwLjgzLC0wLjg5bDAuMDcsLTAuMjdsLTAuNzEsLTMuMjZsMS42OSwtMi4wMWwwLjAzLC0wLjM0bC0wLjI0LC0wLjQxbDIuNjMsLTEuOWwtMC4wMSwtMC40OWwtMi4zMSwtMS41N2w1LjA4LC00LjYxbDIuMzMsLTIuMjRsMS4wMSwtMi4wOGwtMC4wOSwtMC4zN2wtMy41MiwtMi41NmwwLjk0LC0yLjM4bC0wLjA0LC0wLjI5bC0yLjE0LC0yLjg2bDEuNjEsLTMuMzVsLTAuMDEsLTAuMjlsLTIuODEsLTQuNThsMi4xOSwtMy4wNGwtMC4wNiwtMC40MmwtMy43LC0yLjc2bDAuMzIsLTIuNjdsMS44NywtMC4zOGw0LjI2LC0xLjc3bDIuNDYsLTEuNDdsMy45NiwyLjU4bDAuMTIsMC4wNWw2LjgxLDEuMDRsOS4zNyw0Ljg3bDEuODEsMS45MmwwLjE1LDIuNTVsLTIuNjEsMi4wNmwtMy45NSwxLjA3bC0xMS4xLC0zLjE1bC0wLjE3LDAuMGwtMS44NCwwLjUzbC0wLjEsMC41M2wzLjk3LDIuOTdsMC4xNSwxLjc3bDAuMTYsNC4xNGwwLjE5LDAuMjdsMy4yMSwxLjIybDEuOTQsMS4wM2wwLjQ0LC0wLjIybDAuMzIsLTEuOTRsLTAuMDcsLTAuMjVsLTEuMzIsLTEuNTJsMS4yNSwtMS4ybDUuODcsMi40NWwwLjI0LC0wLjAxbDIuMTEsLTAuOThsMC4xMywtMC40MmwtMS41NSwtMi43NWw1LjUyLC0zLjg0bDIuMTMsMC4yMmwyLjI4LDEuNDJsMC40MywtMC4xMmwxLjQ2LC0yLjg3bC0wLjA0LC0wLjMzbC0xLjk3LC0yLjM3bDEuMTQsLTIuMzhsLTAuMDIsLTAuM2wtMS40MiwtMi4wN2w2LjE1LDEuMjJsMS4xNCwxLjkybC0yLjc0LDAuNDZsLTAuMjUsMC4zbDAuMDIsMi4zNmwwLjEyLDAuMjRsMS45NywxLjQ0bDAuMjUsMC4wNWwzLjg3LC0wLjkxbDAuMjIsLTAuMjNsMC41OCwtMi41NWw1LjA5LC0xLjk4bDguNjcsLTMuNjlsMS4yMiwwLjE0bC0yLjA2LDIuMmwwLjE4LDAuNWwzLjExLDAuNDVsMC4yMywtMC4wN2wxLjcxLC0xLjQxbDQuNTksLTAuMTJsMC4xMiwtMC4wM2wzLjUzLC0xLjcybDIuNywyLjQ4bDAuNDIsLTAuMDFsMi44NSwtMi44OGwtMC4wLC0wLjQzbC0yLjQyLC0yLjM1bDEuMCwtMS4xM2w3LjIsMS4zMWwzLjQyLDEuMzZsOS4wNiw0Ljk3bDAuMzksLTAuMDhsMS42NywtMi4yN2wtMC4wNCwtMC40bC0yLjQ2LC0yLjIzbC0wLjA2LC0wLjgybC0wLjI2LC0wLjI3bC0yLjY0LC0wLjM4bDAuNjksLTEuNzZsMC4wLC0wLjIybC0xLjMyLC0zLjQ3bC0wLjA3LC0xLjI3bDQuNTIsLTQuMDlsMC4wOCwtMC4xMWwxLjYsLTQuMThsMS42NywtMC44NGw2LjMzLDEuMmwwLjQ2LDIuMzFsLTIuMzEsMy42N2wwLjA1LDAuMzhsMS40OSwxLjQxbDAuNzcsMy4wNGwtMC41Niw2LjA1bDAuMDksMC4yNGwyLjYyLDIuNTRsLTAuOTksMi42NWwtNC44Nyw1Ljk2bDAuMTcsMC40OGwyLjg2LDAuNjFsMC4zMSwtMC4xM2wwLjk0LC0xLjQybDIuNjcsLTEuMDRsMC4xOCwtMC4xOWwwLjY0LC0yLjAxbDIuMTEsLTEuOThsMC4wNSwtMC4zN2wtMS4zOCwtMi4zMmwxLjExLC0yLjc0bC0wLjI0LC0wLjQxbC0yLjUzLC0wLjMzbC0wLjUzLC0yLjE2bDEuOTYsLTQuNDJsLTAuMDUsLTAuMzJsLTMuMDMsLTMuNDhsNC4yMSwtMi45NGwwLjEyLC0wLjNsLTAuNTIsLTMuMDRsMC43MiwtMC4wNmwxLjE4LDIuMzVsLTAuOTcsNC4zOWwwLjIsMC4zNWwyLjY4LDAuODRsMC4zNywtMC4zOGwtMS4wNSwtMy4wN2wzLjg5LC0xLjcxbDUuMDUsLTAuMjRsNC41NSwyLjYybDAuMzYsLTAuMDVsMC4wNSwtMC4zNmwtMi4xOSwtMy44NGwtMC4yMywtNC43OGw0LjA3LC0wLjkybDUuOTgsMC4yMWw1LjQ3LC0wLjY0bDAuMiwtMC40OGwtMS44OCwtMi4zN2wyLjY1LC0yLjk5bDIuNzUsLTAuMTNsMC4xMiwtMC4wM2w0LjgyLC0yLjQ4bDYuNTYsLTAuNjdsMC4yMywtMC4xNGwwLjc2LC0xLjI3bDYuMzMsLTAuNDZsMS45NywxLjExbDAuMjgsMC4wMWw1LjU1LC0yLjcxbDQuNTMsMC4wOGwwLjI5LC0wLjIxbDAuNjcsLTIuMThsMi4yOSwtMi4xNWw1Ljc1LC0yLjEzbDMuNDgsMS40bC0yLjcsMS4wM2wtMC4xOSwwLjMxbDAuMjYsMC4yNmw1LjQ3LDAuNzhaTTg3MS44Myw2NS43M2wwLjI1LC0wLjE1bDEuOTksMC4wMWwzLjMsMS4ybC0wLjA4LDAuMjJsLTIuNDEsMS4wM2wtNS43MywwLjQ5bC0wLjMxLC0xLjBsMi45OSwtMS44Wk03OTcuNjQsNDguNDRsLTIuMjIsMS41MWwtMy44NSwtMC40M2wtNC4zNSwtMS44NWwwLjQyLC0xLjEzbDQuNDIsMC43Mmw1LjU5LDEuMTdaTTc4My44Miw0Ni4wNmwtMS43MSwzLjI1bC05LjA1LC0wLjE0bC00LjExLDEuMTVsLTQuNjQsLTMuMDRsMS4yMSwtMy4xM2wzLjExLC0wLjkxbDYuNTMsMC4yMmw4LjY2LDIuNTlaTTc4MC4zNywxNDUuNzFsMi4yOCw1LjIzbC0zLjA5LC0wLjg5bC0wLjM3LDAuMTlsLTEuNTQsNC42NWwwLjA0LDAuMjdsMi4zOCwzLjE3bC0wLjA1LDEuNGwtMS40MSwtMS40MWwtMC40NiwwLjA0bC0xLjIzLDEuODFsLTAuMzMsLTEuODZsMC4yOCwtMy4xbC0wLjI4LC0zLjQxbDAuNTgsLTIuNDZsMC4xMSwtNC4zOWwtMC4wMywtMC4xM2wtMS40NCwtMy4ybDAuMjEsLTQuMzlsMi4xOSwtMS40OWwwLjA5LC0wLjQxbC0wLjgxLC0xLjNsMC40OCwtMC4yMWwwLjU2LDEuOTRsMC44NiwzLjIzbC0wLjA1LDMuMzZsMS4wMywzLjM1Wk03ODAuMTYsNTcuMThsLTMuNCwwLjAzbC01LjA2LC0wLjUzbDEuOTcsLTEuNTlsMi45NSwtMC40MmwzLjM1LDEuNzVsMC4xOCwwLjc3Wk02ODMuODQsMzEuMThsLTEzLjI5LDEuOTdsNC4xNiwtNi41NmwxLjg4LC0wLjU4bDEuNzcsMC4zNGw2LjA4LDMuMDJsLTAuNiwxLjhaTTY3MC45NCwyOC4wMmwtNS4xOCwwLjY1bC02Ljg5LC0xLjU4bC00LjAzLC0yLjA3bC0xLjg4LC0zLjk4bC0wLjE4LC0wLjE2bC0yLjgsLTAuOTNsNS45MSwtMy42Mmw1LjI1LC0xLjI5bDQuNzMsMi44OGw1LjYzLDUuNDRsLTAuNTcsNC42NlpNNTY0LjM3LDY4Ljk4bC0wLjg1LDAuMjNsLTcuOTMsLTAuNTdsLTAuNiwtMS44NGwtMC4yMSwtMC4ybC00LjM0LC0xLjE4bC0wLjMsLTIuMDhsMi4zNCwtMC45MmwwLjE5LC0wLjI5bC0wLjA4LC0yLjQzbDQuODUsLTQuMGwtMC4xMiwtMC41MmwtMS42OCwtMC40M2w1LjQ3LC0zLjk0bDAuMTEsLTAuMzNsLTAuNiwtMi4wMmw1LjM2LC0yLjU1bDguMjIsLTMuMjdsOC4yOSwtMC45Nmw0LjM0LC0xLjk0bDQuNjcsLTAuNjVsMS40NSwxLjcybC0xLjQzLDEuMzdsLTguOCwyLjUybC03LjY1LDIuNDJsLTcuOTIsNC44NGwtMy43Myw0Ljc1bC0zLjkyLDQuNThsLTAuMDcsMC4yM2wwLjUxLDMuODhsMC4xMSwwLjJsNC4zMiwzLjM5Wk01NDguODYsMTguNTdsLTMuMjgsMC43NWwtMi4yNSwwLjQ0bC0wLjIyLDAuMTlsLTAuMywwLjgxbC0yLjY3LDAuODZsLTIuMjcsLTEuMTRsMS4yLC0xLjUxbC0wLjIzLC0wLjQ5bC0zLjE0LC0wLjFsMi40OCwtMC41NGwzLjU1LC0wLjA3bDAuNDQsMS4zNmwwLjQ5LDAuMTJsMS40LC0xLjM1bDIuMiwtMC45bDMuMTMsMS4wOGwtMC41NCwwLjQ5Wk00NzcuNSwxMzMuMjVsLTQuMjEsMC4wNWwtMi42OSwtMC4zNGwwLjM5LC0xLjAzbDMuMjQsLTEuMDZsMi41MSwwLjU4bDAuODUsMC40M2wtMC4yLDAuNzFsLTAuMCwwLjE1bDAuMTIsMC41MlpcIiwgXCJuYW1lXCI6IFwiUnVzc2lhXCJ9LCBcIlJXXCI6IHtcInBhdGhcIjogXCJNNDk3LjAzLDI4OC4xMmwwLjc4LDEuMTFsLTAuMTIsMS4xOWwtMC40OSwwLjIxbC0xLjI1LC0wLjE1bC0wLjMsMC4xNmwtMC42NywxLjI0bC0xLjAxLC0wLjEzbDAuMTYsLTAuOTJsMC4yMiwtMC4xMmwwLjE1LC0wLjI0bDAuMDksLTEuMzdsMC40OSwtMC40OGwwLjQyLDAuMThsMC4yNSwtMC4wMWwxLjI2LC0wLjY1WlwiLCBcIm5hbWVcIjogXCJSd2FuZGFcIn0sIFwiUlNcIjoge1wicGF0aFwiOiBcIk00NjkuNzUsMTY4LjY1bDAuMjEsLTAuMjFsMC4zNiwtMS40NGwtMC4wOCwtMC4yOWwtMS4wNiwtMS4wM2wwLjU0LC0xLjE2bC0wLjI4LC0wLjQzbC0wLjI2LDAuMGwwLjU1LC0wLjY3bC0wLjAxLC0wLjM5bC0wLjc3LC0wLjg2bC0wLjQ1LC0wLjg5bDEuNTYsLTAuNjdsMS4zOSwwLjEybDEuMjIsMS4xbDAuMjYsMC45MWwwLjE2LDAuMTlsMS4zOCwwLjY2bDAuMTcsMS4xMmwwLjE0LDAuMjFsMS40NiwwLjlsMC4zNSwtMC4wM2wwLjYyLC0wLjU0bDAuMDksMC4wNmwtMC4yOCwwLjI1bC0wLjAzLDAuNDJsMC4yOSwwLjM0bC0wLjQ0LDAuNWwtMC4wNywwLjI2bDAuMjIsMS4xMmwwLjA3LDAuMTRsMS4wMiwxLjFsLTAuODEsMC44NGwtMC40MiwwLjk2bDAuMDQsMC4zbDAuMTIsMC4xNWwtMC4xNSwwLjE2bC0xLjA0LDAuMDRsLTAuMzksMC4wOGwwLjMzLC0wLjgxbC0wLjI5LC0wLjQxbC0wLjIxLDAuMDFsLTAuMzksLTAuNDVsLTAuMTMsLTAuMDlsLTAuMzIsLTAuMTFsLTAuMjcsLTAuNGwtMC4xNCwtMC4xMWwtMC40LC0wLjE2bC0wLjMxLC0wLjM3bC0wLjM0LC0wLjA5bC0wLjQ1LDAuMTdsLTAuMTgsMC4xOGwtMC4yOSwwLjg0bC0wLjk2LC0wLjY1bC0wLjgxLC0wLjMzbC0wLjMyLC0wLjM3bC0wLjIyLC0wLjE4WlwiLCBcIm5hbWVcIjogXCJSZXB1YmxpYyBvZiBTZXJiaWFcIn0sIFwiTFRcIjoge1wicGF0aFwiOiBcIk00NzguMTMsMTMzLjMxbC0wLjE0LC0wLjYzbDAuMjUsLTAuODhsLTAuMTUsLTAuMzVsLTEuMTcsLTAuNThsLTIuNDMsLTAuNTdsLTAuNDUsLTIuNTFsMi41OCwtMC45N2w0LjE0LDAuMjJsMi4zLC0wLjMybDAuMjYsMC41NGwwLjIyLDAuMTdsMS4yNiwwLjIybDIuMjUsMS42bDAuMTksMS4yM2wtMS44NywxLjAxbC0wLjE0LDAuMThsLTAuNTQsMS44M2wtMi41NCwxLjIxbC0yLjE4LC0wLjAybC0wLjUyLC0wLjkxbC0wLjE4LC0wLjE0bC0xLjExLC0wLjMyWlwiLCBcIm5hbWVcIjogXCJMaXRodWFuaWFcIn0sIFwiTFVcIjoge1wicGF0aFwiOiBcIk00MzUuOTUsMTQ3Ljk5bDAuMzMsMC40OWwtMC4xMSwxLjA3bC0wLjM5LDAuMDRsLTAuMjksLTAuMTVsMC4yMSwtMS40bDAuMjUsLTAuMDVaXCIsIFwibmFtZVwiOiBcIkx1eGVtYm91cmdcIn0sIFwiTFJcIjoge1wicGF0aFwiOiBcIk00MDEuMzcsMjczLjY3bC0wLjMyLDAuMDFsLTIuNDgsLTEuMTVsLTIuMjQsLTEuODlsLTIuMTQsLTEuMzhsLTEuNDcsLTEuNDJsMC40NCwtMC41OWwwLjA1LC0wLjEzbDAuMTIsLTAuNjVsMS4wNywtMS4zbDEuMDgsLTEuMDlsMC41MiwtMC4wN2wwLjQzLC0wLjE4bDAuODQsMS4yNGwtMC4xNSwwLjg5bDAuMDcsMC4yNWwwLjQ5LDAuNTRsMC4yMiwwLjFsMC43MSwwLjAxbDAuMjcsLTAuMTZsMC40MiwtMC44M2wwLjE5LDAuMDJsLTAuMDYsMC41MmwwLjIzLDEuMTJsLTAuNSwxLjAzbDAuMDYsMC4zNWwwLjczLDAuNjlsMC4xNCwwLjA4bDAuNzEsMC4xNWwwLjkyLDAuOTFsMC4wNiwwLjc2bC0wLjE3LDAuMjJsLTAuMDYsMC4xNWwtMC4xNywxLjhaXCIsIFwibmFtZVwiOiBcIkxpYmVyaWFcIn0sIFwiUk9cIjoge1wicGF0aFwiOiBcIk00NzcuOTQsMTU1LjE5bDEuMDIsLTAuNjRsMS40OSwwLjMzbDEuNTIsMC4wMWwxLjA5LDAuNzNsMC4zMiwwLjAxbDAuODEsLTAuNDZsMS44LC0wLjNsMC4xOCwtMC4xbDAuNTQsLTAuNjRsMC44NiwwLjBsMC42NCwwLjI2bDAuNzEsMC44N2wwLjgsMS4zNWwxLjM5LDEuODFsMC4wNywxLjI1bC0wLjI2LDEuM2wwLjAxLDAuMTVsMC40NSwxLjQybDAuMTUsMC4xOGwxLjEyLDAuNTdsMC4yNSwwLjAxbDEuMDUsLTAuNDVsMC44NiwwLjRsMC4wMywwLjQzbC0wLjkyLDAuNTFsLTAuNjMsLTAuMjRsLTAuNCwwLjIybC0wLjY0LDMuNDFsLTEuMTIsLTAuMjRsLTEuNzgsLTEuMDlsLTAuMjMsLTAuMDRsLTIuOTUsMC43MWwtMS4yNSwwLjc3bC0zLjU1LC0wLjE2bC0xLjg5LC0wLjQ3bC0wLjE0LC0wLjBsLTAuNzUsMC4xN2wtMC42MSwtMS4wN2wtMC4zLC0wLjM2bDAuMzYsLTAuMzJsLTAuMDQsLTAuNDhsLTAuNjIsLTAuMzhsLTAuMzYsMC4wM2wtMC42MiwwLjU0bC0xLjE1LC0wLjcxbC0wLjE4LC0xLjE0bC0wLjE3LC0wLjIybC0xLjQsLTAuNjdsLTAuMjQsLTAuODZsLTAuMDksLTAuMTRsLTAuOTYsLTAuODdsMS40OSwtMC40NGwwLjE2LC0wLjExbDEuNTEsLTIuMTRsMS4xNSwtMi4wOWwxLjQ0LC0wLjYzWlwiLCBcIm5hbWVcIjogXCJSb21hbmlhXCJ9LCBcIkdXXCI6IHtcInBhdGhcIjogXCJNMzgzLjAzLDI1Ni43M2wtMS4xMiwtMC44OGwtMC4xNCwtMC4wNmwtMC45NCwtMC4xNWwtMC40MywtMC41NGwwLjAxLC0wLjI3bC0wLjEzLC0wLjI2bC0wLjY4LC0wLjQ4bC0wLjA1LC0wLjE2bDAuOTksLTAuMzFsMC43NywwLjA4bDAuMTUsLTAuMDJsMC42MSwtMC4yNmw0LjI1LDAuMWwtMC4wMiwwLjQ0bC0wLjE5LDAuMThsLTAuMDgsMC4yOWwwLjE3LDAuNjZsLTAuMTcsMC4xNGwtMC40NCwwLjBsLTAuMTYsMC4wNWwtMC41NywwLjM3bC0wLjY2LC0wLjA0bC0wLjI0LDAuMWwtMC45MiwxLjAzWlwiLCBcIm5hbWVcIjogXCJHdWluZWEgQmlzc2F1XCJ9LCBcIkdUXCI6IHtcInBhdGhcIjogXCJNMTk1LjEzLDI0OS44OWwtMS4wNSwtMC4zNWwtMS41LC0wLjA0bC0xLjA2LC0wLjQ3bC0xLjE5LC0wLjkzbDAuMDQsLTAuNTNsMC4yNywtMC41NWwtMC4wMywtMC4zMWwtMC4yNCwtMC4zMmwxLjAyLC0xLjc3bDMuMDQsLTAuMDFsMC4zLC0wLjI4bDAuMDYsLTAuODhsLTAuMTksLTAuM2wtMC4zLC0wLjExbC0wLjIzLC0wLjQ1bC0wLjExLC0wLjEybC0wLjksLTAuNThsLTAuMzUsLTAuMzNsMC4zNywtMC4wbDAuMywtMC4zbDAuMCwtMS4xNWw0LjA1LDAuMDJsLTAuMDIsMS43NGwtMC4yLDIuODlsMC4zLDAuMzJsMC42NywtMC4wbDAuNzUsMC40MmwwLjQsLTAuMTFsLTAuNjIsMC41M2wtMS4xNywwLjdsLTAuMTMsMC4xNmwtMC4xOCwwLjQ5bDAuMCwwLjIxbDAuMTQsMC4zNGwtMC4zNSwwLjQ0bC0wLjQ5LDAuMTNsLTAuMiwwLjQxbDAuMDMsMC4wNmwtMC4yNywwLjE2bC0wLjg2LDAuNjRsLTAuMTIsMC4yMlpNMTk5LjM1LDI0NS4zOGwwLjA3LC0wLjEzbDAuMDUsMC4wMmwtMC4xMywwLjExWlwiLCBcIm5hbWVcIjogXCJHdWF0ZW1hbGFcIn0sIFwiR1JcIjoge1wicGF0aFwiOiBcIk00ODcuMiwxNzQuNTVsLTAuNjQsMS41NGwtMC40MywwLjI0bC0xLjQxLC0wLjA4bC0xLjI4LC0wLjI4bC0wLjE0LDAuMGwtMy4wMywwLjc3bC0wLjEzLDAuNTFsMS4zOSwxLjM0bC0wLjc4LDAuMjlsLTEuMiwwLjBsLTEuMjMsLTEuNDJsLTAuNDcsMC4wMmwtMC40NywwLjY1bC0wLjA0LDAuMjdsMC41NiwxLjc2bDAuMDYsMC4xMWwxLjAyLDEuMTJsLTAuNjYsMC40NWwtMC4wNCwwLjQ2bDEuMzksMS4zNWwxLjE1LDAuNzlsMC4wMiwxLjA2bC0xLjkxLC0wLjYzbC0wLjM2LDAuNDJsMC41NiwxLjEybC0xLjIsMC4yM2wtMC4yMiwwLjRsMC44LDIuMTRsLTEuMTUsMC4wMmwtMS44OSwtMS4xNWwtMC44OSwtMi4xOWwtMC40MywtMS45MWwtMC4wNSwtMC4xMWwtMC45OCwtMS4zNWwtMS4yNCwtMS42MmwtMC4xMywtMC42M2wxLjA3LC0xLjMybDAuMDYsLTAuMTRsMC4xMywtMC44MWwwLjY4LC0wLjM2bDAuMTYsLTAuMjVsMC4wMywtMC41NGwxLjQsLTAuMjNsMC4xMiwtMC4wNWwwLjg3LC0wLjZsMS4yNiwwLjA1bDAuMjUsLTAuMTFsMC4zNCwtMC40M2wwLjMzLC0wLjA3bDEuODEsMC4wOGwwLjEzLC0wLjAybDEuODcsLTAuNzdsMS42NCwwLjk3bDAuMTksMC4wNGwyLjI4LC0wLjI4bDAuMjYsLTAuMjlsMC4wMiwtMC45NWwwLjU2LDAuMzZaTTQ4MC40NCwxOTIuMGwxLjA1LDAuNzRsMC4wMSwwLjBsLTEuMjYsLTAuMjNsMC4yLC0wLjUxWk00ODEuNzYsMTkyLjc5bDEuODYsLTAuMTVsMS41MywwLjE3bC0wLjAyLDAuMTlsMC4zNCwwLjNsLTIuMjgsMC4xNWwwLjAxLC0wLjEzbC0wLjI1LC0wLjMxbC0xLjE5LC0wLjIyWk00ODUuNjUsMTkzLjI4bDAuNjUsLTAuMTZsLTAuMDUsMC4xMmwtMC42LDAuMDRaXCIsIFwibmFtZVwiOiBcIkdyZWVjZVwifSwgXCJHUVwiOiB7XCJwYXRoXCI6IFwiTTQ0NC44MSwyODIuMDRsLTAuMjEsLTAuMTdsMC43NCwtMi40bDMuNTYsMC4wNWwwLjAyLDIuNDJsLTMuMzQsLTAuMDJsLTAuNzYsMC4xM1pcIiwgXCJuYW1lXCI6IFwiRXF1YXRvcmlhbCBHdWluZWFcIn0sIFwiR1lcIjoge1wicGF0aFwiOiBcIk0yNzEuMzQsMjY0LjI1bDEuNDMsMC44MWwxLjQ0LDEuNTNsMC4wNiwxLjE5bDAuMjgsMC4yOGwwLjg0LDAuMDVsMi4xMywxLjkybC0wLjM0LDEuOTNsLTEuMzcsMC41OWwtMC4xNywwLjM0bDAuMTIsMC41MWwtMC40MywxLjIxbDAuMDMsMC4yNmwxLjExLDEuODJsMC4yNiwwLjE0bDAuNTYsMC4wbDAuMzIsMS4yOWwxLjI1LDEuNzhsLTAuMDgsMC4wMWwtMS4zNCwtMC4yMWwtMC4yNCwwLjA2bC0wLjc4LDAuNjRsLTEuMDYsMC40MWwtMC43NiwwLjFsLTAuMjIsMC4xNWwtMC4xOCwwLjMybC0wLjk1LC0wLjFsLTEuMzgsLTEuMDVsLTAuMTksLTEuMTNsLTAuNiwtMS4xOGwwLjM3LC0xLjk2bDAuNjUsLTAuODNsMC4wMywtMC4zMmwtMC41NywtMS4xN2wtMC4xNSwtMC4xNGwtMC42MiwtMC4yN2wwLjI1LC0wLjg1bC0wLjA4LC0wLjNsLTAuNTgsLTAuNThsLTAuMjQsLTAuMDlsLTEuMTUsMC4xbC0xLjQxLC0xLjU4bDAuNDgsLTAuNDlsMC4wOSwtMC4yMmwtMC4wNCwtMC45MmwxLjMxLC0wLjM0bDAuNzMsLTAuNTJsMC4wNCwtMC40NGwtMC43NSwtMC44MmwwLjE2LC0wLjY2bDEuNzQsLTEuM1pcIiwgXCJuYW1lXCI6IFwiR3V5YW5hXCJ9LCBcIkdFXCI6IHtcInBhdGhcIjogXCJNNTI1LjQxLDE3NC4xOWwwLjI2LC0wLjg4bC0wLjAsLTAuMTdsLTAuNjMsLTIuMDZsLTAuMSwtMC4xNWwtMS40NSwtMS4xMmwtMC4xMSwtMC4wNWwtMS4zMSwtMC4zM2wtMC42NiwtMC42OWwxLjk3LDAuNDhsMy42NSwwLjQ5bDMuMywxLjQxbDAuMzksMC41bDAuMzMsMC4xbDEuNDMsLTAuNDVsMi4xNCwwLjU4bDAuNywxLjE0bDAuMTMsMC4xMmwxLjA2LDAuNDdsLTAuMTgsMC4xMWwtMC4wOCwwLjQzbDEuMDgsMS40MWwtMC4wNiwwLjA2bC0xLjE2LC0wLjE1bC0xLjgyLC0wLjg0bC0wLjMxLDAuMDRsLTAuNTUsMC40NGwtMy4yOSwwLjQ0bC0yLjMyLC0xLjQxbC0wLjE3LC0wLjA0bC0yLjI1LDAuMTJaXCIsIFwibmFtZVwiOiBcIkdlb3JnaWFcIn0sIFwiR0JcIjoge1wicGF0aFwiOiBcIk00MTIuODIsMTE4LjZsLTIuMzEsMy40bC0wLjAsMC4zM2wwLjMxLDAuMTNsMi41MiwtMC40OWwyLjM0LDAuMDJsLTAuNTYsMi41MWwtMi4yMiwzLjEzbDAuMjIsMC40N2wyLjQzLDAuMjFsMi4zNSw0LjM1bDAuMTcsMC4xNGwxLjU4LDAuNTFsMS40OSwzLjc4bDAuNzMsMS4zN2wwLjIsMC4xNWwyLjc2LDAuNTlsLTAuMjUsMS43NWwtMS4xOCwwLjkxbC0wLjA4LDAuMzlsMC44NywxLjQ5bC0xLjk2LDEuNTFsLTMuMzEsLTAuMDJsLTQuMTUsMC44OGwtMS4wNywtMC41OWwtMC4zNSwwLjA0bC0xLjU1LDEuNDRsLTIuMTcsLTAuMzVsLTAuMjIsMC4wNWwtMS42MSwxLjE1bC0wLjc4LC0wLjM4bDMuMzEsLTMuMTJsMi4xOCwtMC43bDAuMjEsLTAuMzFsLTAuMjYsLTAuMjdsLTMuNzgsLTAuNTRsLTAuNDgsLTAuOWwyLjMsLTAuOTJsMC4xMywtMC40NmwtMS4yOSwtMS43MWwwLjM5LC0xLjgzbDMuNDYsMC4yOWwwLjMyLC0wLjI0bDAuMzcsLTEuOTlsLTAuMDYsLTAuMjRsLTEuNzEsLTIuMTdsLTAuMTgsLTAuMTFsLTIuOTEsLTAuNThsLTAuNDMsLTAuNjhsMC44MiwtMS40bC0wLjAzLC0wLjM1bC0wLjgyLC0wLjk3bC0wLjQ2LDAuMDFsLTAuODUsMS4wNWwtMC4xMSwtMi42bC0wLjA1LC0wLjE2bC0xLjE5LC0xLjdsMC44NiwtMy41M2wxLjgxLC0yLjc1bDEuODgsMC4yNmwyLjM4LC0wLjI0Wk00MDYuMzksMTMyLjg0bC0xLjA5LDEuOTJsLTEuNjUsLTAuNjJsLTEuMjYsMC4wMmwwLjQxLC0xLjQ2bDAuMCwtMC4xNmwtMC40MiwtMS41MWwxLjYyLC0wLjExbDIuMzksMS45MlpcIiwgXCJuYW1lXCI6IFwiVW5pdGVkIEtpbmdkb21cIn0sIFwiR0FcIjoge1wicGF0aFwiOiBcIk00NDguNzYsMjk0LjQ3bC0yLjM4LC0yLjM0bC0xLjYzLC0yLjA0bC0xLjQ2LC0yLjQ4bDAuMDYsLTAuNjZsMC41NCwtMC44MWwwLjYxLC0xLjgybDAuNDYsLTEuNjlsMC42MywtMC4xMWwzLjYyLDAuMDNsMC4zLC0wLjNsLTAuMDIsLTIuNzVsMC44OCwtMC4xMmwxLjQ3LDAuMzJsMC4xMywwLjBsMS4zOSwtMC4zbC0wLjEzLDAuODdsMC4wMywwLjE5bDAuNywxLjI5bDAuMywwLjE2bDEuNzQsLTAuMTlsMC4zNiwwLjI5bC0xLjAxLDIuN2wwLjA1LDAuMjlsMS4xMywxLjQybDAuMjUsMS44MmwtMC4zLDEuNTZsLTAuNjQsMC45OWwtMS45MywtMC4wOWwtMS4yNiwtMS4xM2wtMC41LDAuMTdsLTAuMTYsMC45MWwtMS40OCwwLjI3bC0wLjEyLDAuMDVsLTAuODYsMC42M2wtMC4wOCwwLjM5bDAuODEsMS40MmwtMS40OCwxLjA4WlwiLCBcIm5hbWVcIjogXCJHYWJvblwifSwgXCJHTlwiOiB7XCJwYXRoXCI6IFwiTTM5OS44MywyNjUuMzFsLTAuNjksLTAuMDZsLTAuMywwLjE2bC0wLjQzLDAuODVsLTAuMzksLTAuMDFsLTAuMywtMC4zM2wwLjE0LC0wLjg3bC0wLjA1LC0wLjIybC0xLjA1LC0xLjU0bC0wLjM3LC0wLjExbC0wLjYxLDAuMjdsLTAuODQsMC4xMmwwLjAyLC0wLjU0bC0wLjA0LC0wLjE3bC0wLjM1LC0wLjU3bDAuMDcsLTAuNjNsLTAuMDMsLTAuMTdsLTAuNTcsLTEuMTFsLTAuNywtMC45bC0wLjI0LC0wLjEybC0yLjAsLTAuMGwtMC4xOSwwLjA3bC0wLjUxLDAuNDJsLTAuNiwwLjA1bC0wLjIxLDAuMTFsLTAuNDMsMC41NWwtMC4zLDAuN2wtMS4wNCwwLjg2bC0wLjkxLC0xLjI0bC0xLjAsLTEuMDJsLTAuNjksLTAuMzdsLTAuNTIsLTAuNDJsLTAuMywtMS4xMWwtMC4zNywtMC41NmwtMC4xLC0wLjFsLTAuNCwtMC4yM2wwLjc3LC0wLjg1bDAuNjIsMC4wNGwwLjE4LC0wLjA1bDAuNTgsLTAuMzhsMC40NiwtMC4wbDAuMTksLTAuMDdsMC4zOSwtMC4zNGwwLjEsLTAuM2wtMC4xNywtMC42N2wwLjE1LC0wLjE0bDAuMDksLTAuMmwwLjAzLC0wLjU3bDAuODcsMC4wMmwxLjc2LDAuNmwwLjEzLDAuMDFsMC41NSwtMC4wNmwwLjIyLC0wLjEzbDAuMDgsLTAuMTJsMS4xOCwwLjE3bDAuMTcsLTAuMDJsMC4wOSwwLjU2bDAuMywwLjI1bDAuNCwtMC4wbDAuMTQsLTAuMDNsMC41NiwtMC4yOWwwLjIzLDAuMDVsMC42MywwLjU5bDAuMTUsMC4wN2wxLjA3LDAuMmwwLjI0LC0wLjA2bDAuNjUsLTAuNTJsMC43NywtMC4zMmwwLjU1LC0wLjMybDAuMywwLjA0bDAuNDQsMC40NWwwLjM0LDAuNzRsMC44NCwwLjg3bC0wLjM1LDAuNDVsLTAuMDYsMC4xNWwtMC4xLDAuODJsMC40MiwwLjMxbDAuMzUsLTAuMTZsMC4wNSwwLjA0bC0wLjEsMC41OWwwLjA5LDAuMjdsMC40MiwwLjRsLTAuMDYsMC4wMmwtMC4xOCwwLjIxbC0wLjIsMC44NmwwLjAzLDAuMjFsMC41NiwxLjAybDAuNTIsMS43MWwtMC42NSwwLjIxbC0wLjE1LDAuMTJsLTAuMjQsMC4zNWwtMC4wMywwLjI4bDAuMTYsMC40MWwtMC4xLDAuNzZsLTAuMTIsMC4wWlwiLCBcIm5hbWVcIjogXCJHdWluZWFcIn0sIFwiR01cIjoge1wicGF0aFwiOiBcIk0zNzkuMTgsMjUxLjQ4bDAuMTUsLTAuNTVsMi41MSwtMC4wN2wwLjIxLC0wLjA5bDAuNDgsLTAuNTJsMC41OCwtMC4wM2wwLjkxLDAuNThsMC4xNiwwLjA1bDAuNzgsMC4wMWwwLjE0LC0wLjAzbDAuNTksLTAuMzFsMC4xNiwwLjI0bC0wLjcxLDAuMzhsLTAuOTQsLTAuMDRsLTEuMDIsLTAuNTFsLTAuMywwLjAxbC0wLjg2LDAuNTVsLTAuMzcsMC4wMmwtMC4xNCwwLjA0bC0wLjUzLDAuMzFsLTEuODEsLTAuMDRaXCIsIFwibmFtZVwiOiBcIkdhbWJpYVwifSwgXCJHTFwiOiB7XCJwYXRoXCI6IFwiTTMwNC4xMyw2LjZsOC4xOSwtMy42M2w4LjcyLDAuMjhsMC4xOSwtMC4wNmwzLjEyLC0yLjI4bDguNzUsLTAuNjFsMTkuOTQsMC44bDE0LjkzLDQuNzVsLTMuOTIsMi4wMWwtOS41MiwwLjI3bC0xMy40OCwwLjZsLTAuMjcsMC4ybDAuMDksMC4zM2wxLjI2LDEuMDlsMC4yMiwwLjA3bDguODEsLTAuNjdsNy40OSwyLjA3bDAuMTksLTAuMDFsNC42OCwtMS43OGwxLjc2LDEuODRsLTIuNTksMy4yNmwtMC4wMSwwLjM2bDAuMzQsMC4xMWw2LjM1LC0yLjJsMTIuMDksLTIuMzJsNy4zMSwxLjE0bDEuMTcsMi4xM2wtOS45LDQuMDVsLTEuNDMsMS4zMmwtNy45MSwwLjk4bC0wLjI2LDAuMzFsMC4yOSwwLjI5bDUuMjUsMC4yNWwtMi42MywzLjcybC0yLjAyLDMuNjFsLTAuMDQsMC4xNWwwLjA4LDYuMDVsMC4wNywwLjE5bDIuNjEsMy4wbC0zLjQsMC4ybC00LjEyLDEuNjZsLTAuMDQsMC41NGw0LjUsMi42N2wwLjUzLDMuOWwtMi4zOSwwLjQybC0wLjE5LDAuNDhsMi45MSwzLjgzbC01LjAsMC4zMmwtMC4yNywwLjIybDAuMTIsMC4zM2wyLjY5LDEuODRsLTAuNjUsMS4zNWwtMy4zNiwwLjcxbC0zLjQ2LDAuMDFsLTAuMjEsMC41MWwzLjA1LDMuMTVsMC4wMiwxLjUzbC00LjU0LC0xLjc5bC0wLjMyLDAuMDZsLTEuMjksMS4yNmwwLjExLDAuNWwzLjMzLDEuMTVsMy4xNywyLjc0bDAuODUsMy4yOWwtNC4wLDAuNzhsLTEuODMsLTEuNjZsLTMuMSwtMi42NGwtMC4zNiwtMC4wMmwtMC4xMywwLjMzbDAuOCwyLjkybC0yLjc2LDIuMjZsLTAuMDksMC4zM2wwLjI4LDAuMmw2LjU5LDAuMTlsMi40NywwLjE4bC01Ljg2LDMuMzhsLTYuNzYsMy40M2wtNy4yNiwxLjQ4bC0yLjczLDAuMDJsLTAuMTYsMC4wNWwtMi42NywxLjcybC0zLjQ0LDQuNDJsLTUuMjgsMi44NmwtMS43MywwLjE4bC0zLjMzLDEuMDFsLTMuNTksMC45NmwtMC4xNSwwLjFsLTIuMTUsMi41MmwtMC4wNywwLjE5bC0wLjAzLDIuNzZsLTEuMjEsMi40OWwtNC4wMywzLjFsLTAuMSwwLjMzbDAuOTgsMi45NGwtMi4zMSw2LjU3bC0zLjIxLDAuMjFsLTMuNiwtMy4wbC0wLjE5LC0wLjA3bC00LjksLTAuMDJsLTIuMjksLTEuOTdsLTEuNjksLTMuNzhsLTQuMzEsLTQuODZsLTEuMjMsLTIuNTJsLTAuMzQsLTMuNThsLTAuMDgsLTAuMTdsLTMuMzUsLTMuNjdsMC44NSwtMi45MmwtMC4wOSwtMC4zMWwtMS41LC0xLjM0bDIuMzMsLTQuN2wzLjY3LC0xLjU3bDAuMTUsLTAuMTNsMS4wMiwtMS45M2wwLjUyLC0zLjQ3bC0wLjQ0LC0wLjMxbC0yLjg1LDEuNTdsLTEuMzMsMC42NGwtMi4xMiwwLjU5bC0yLjgxLC0xLjMybC0wLjE1LC0yLjc5bDAuODgsLTIuMTdsMi4wOSwtMC4wNmw1LjA3LDEuMmwwLjM0LC0wLjE3bC0wLjExLC0wLjM3bC00LjMsLTIuOWwtMi4yNCwtMS41OGwtMC4yNSwtMC4wNWwtMi4zOCwwLjYybC0xLjcsLTAuOTNsMi42MiwtNC4xbC0wLjAzLC0wLjM2bC0xLjUxLC0xLjc1bC0xLjk3LC0zLjNsLTMuMDEsLTUuMjFsLTAuMSwtMC4xMWwtMy4wNCwtMS44NWwwLjAzLC0xLjk0bC0wLjE4LC0wLjI4bC02LjgyLC0zLjAxbC01LjM1LC0wLjM4bC02LjY5LDAuMjFsLTYuMDMsMC4zN2wtMi44MSwtMS41OWwtMy44NCwtMi45bDUuOTQsLTEuNWw1LjAxLC0wLjI4bDAuMjgsLTAuMjlsLTAuMjYsLTAuMzFsLTEwLjY4LC0xLjM4bC01LjM4LC0yLjFsMC4yNywtMS42OGw5LjMsLTIuNmw5LjE4LC0yLjY4bDAuMTksLTAuMTZsMC45NywtMi4wNWwtMC4xOCwtMC40MmwtNi4yOSwtMS45MWwxLjgxLC0xLjlsOC41OCwtNC4wNWwzLjYsLTAuNjNsMC4yMywtMC40bC0wLjkyLC0yLjM3bDUuNTksLTEuNWw3LjY2LC0wLjk1bDcuNTgsLTAuMDVsMi42NSwxLjg0bDAuMzEsMC4wMmw2LjUyLC0zLjI5bDUuODUsMi4yNGwzLjU1LDAuNDlsNS4xNywxLjk1bDAuMzgsLTAuMTZsLTAuMTMsLTAuMzlsLTUuNzcsLTMuMTZsMC4yOSwtMi4yNlpcIiwgXCJuYW1lXCI6IFwiR3JlZW5sYW5kXCJ9LCBcIktXXCI6IHtcInBhdGhcIjogXCJNNTQwLjg3LDIwNy44MWwwLjQxLDAuOTRsLTAuMTgsMC41MWwwLjAsMC4yMWwwLjY1LDEuNjZsLTEuMTUsMC4wNWwtMC41NCwtMS4xMmwtMC4yNCwtMC4xN2wtMS43MywtMC4ybDEuNDQsLTIuMDZsMS4zMywwLjE4WlwiLCBcIm5hbWVcIjogXCJLdXdhaXRcIn0sIFwiR0hcIjoge1wicGF0aFwiOiBcIk00MjMuMTYsMjY5Ljg4bC0zLjU4LDEuMzRsLTEuNDEsMC44N2wtMi4xMywwLjY5bC0xLjkxLC0wLjYxbDAuMDksLTAuNzVsLTAuMDMsLTAuMTdsLTEuMDQsLTIuMDdsMC42MiwtMi43bDEuMDQsLTIuMDhsMC4wMywtMC4xOWwtMS4wLC01LjQ2bDAuMDUsLTEuMTJsNC4wNCwtMC4xMWwxLjA4LDAuMThsMC4xOCwtMC4wM2wwLjcyLC0wLjM2bDAuNzUsMC4xM2wtMC4xMSwwLjQ4bDAuMDYsMC4yNmwwLjk4LDEuMjJsLTAuMCwxLjc3bDAuMjQsMS45OWwwLjA1LDAuMTNsMC41NSwwLjgxbC0wLjUyLDIuMTRsMC4xOSwxLjM3bDAuNjksMS42NmwwLjM4LDAuNjJaXCIsIFwibmFtZVwiOiBcIkdoYW5hXCJ9LCBcIk9NXCI6IHtcInBhdGhcIjogXCJNNTY4LjE2LDIzMS4wbC0wLjA4LDAuMWwtMC44NCwxLjYxbC0wLjkzLC0wLjExbC0wLjI3LDAuMTFsLTAuNTgsMC43M2wtMC40LDEuMzJsLTAuMDEsMC4xNGwwLjI5LDEuNjFsLTAuMDcsMC4wOWwtMS4wLC0wLjAxbC0wLjE2LDAuMDRsLTEuNTYsMC45N2wtMC4xNCwwLjJsLTAuMjMsMS4xN2wtMC40MSwwLjRsLTEuNDQsLTAuMDJsLTAuMTcsMC4wNWwtMC45OCwwLjY1bC0wLjEzLDAuMjVsMC4wMSwwLjg3bC0wLjk3LDAuNTdsLTEuMjcsLTAuMjJsLTAuMTksMC4wM2wtMS42MywwLjg0bC0wLjg4LDAuMTFsLTIuNTUsLTUuNTdsNy4yLC0yLjQ5bDAuMTksLTAuMTlsMS42NywtNS4yM2wtMC4wMywtMC4yNWwtMS4xLC0xLjc4bDAuMDUsLTAuODlsMC42OCwtMS4wM2wwLjA1LC0wLjE2bDAuMDEsLTAuODlsMC45NiwtMC40NGwwLjA3LC0wLjVsLTAuMzIsLTAuMjZsMC4xNiwtMS4zMWwwLjg1LC0wLjAxbDEuMDMsMS42N2wwLjA5LDAuMDlsMS40LDAuOTZsMC4xMSwwLjA1bDEuODIsMC4zNGwxLjM3LDAuNDVsMS43NSwyLjMybDAuMTMsMC4xbDAuNywwLjI2bC0wLjAsMC4zbC0xLjI1LDIuMTlsLTEuMDEsMC44Wk01NjEuODgsMjE4LjQ3bC0wLjAxLDAuMDJsLTAuMTUsLTAuMjlsMC4zLC0wLjM4bC0wLjE0LDAuNjVaXCIsIFwibmFtZVwiOiBcIk9tYW5cIn0sIFwiXzNcIjoge1wicGF0aFwiOiBcIk01NDMuMiwyNjEuMDZsLTEuMDcsMS40NmwtMS42NSwxLjk5bC0xLjkxLDAuMDFsLTguMDgsLTIuOTVsLTAuODksLTAuODRsLTAuOSwtMS4xOWwtMC44MSwtMS4yM2wwLjQ0LC0wLjczbDAuNzYsLTEuMTJsMC40OSwwLjI4bDAuNTIsMS4wNWwxLjEzLDEuMDZsMC4yLDAuMDhsMS4yNCwwLjAxbDIuNDIsLTAuNjVsMi43NywtMC4zMWwyLjE3LC0wLjc4bDEuMzEsLTAuMTlsMC44NCwtMC40M2wxLjAzLC0wLjA2bC0wLjAxLDQuNTRaXCIsIFwibmFtZVwiOiBcIlNvbWFsaWxhbmRcIn0sIFwiXzJcIjoge1wicGF0aFwiOiBcIk0zODQuMjMsMjMwLjM3bDAuMDcsLTAuMDZsMC4yOCwtMC44OWwwLjk5LC0xLjEzbDAuMDcsLTAuMTNsMC44LC0zLjU0bDMuNCwtMi44bDAuMDksLTAuMTNsMC43NiwtMi4xN2wwLjA3LDUuNWwtMi4wNywwLjIxbC0wLjI0LDAuMTdsLTAuNjEsMS4zNmwtMC4wMiwwLjE2bDAuNDMsMy40NmwtNC4wMSwtMC4wMVpNMzkxLjgyLDIxOC4ybDAuMDcsLTAuMDZsMC43NSwtMS45M2wxLjg2LC0wLjI1bDAuOTQsMC4zNGwxLjE0LDAuMGwwLjE4LC0wLjA2bDAuNzMsLTAuNTZsMS40MSwtMC4wOGwtMC4wLDIuNzJsLTcuMDgsLTAuMTJaXCIsIFwibmFtZVwiOiBcIldlc3Rlcm4gU2FoYXJhXCJ9LCBcIl8xXCI6IHtcInBhdGhcIjogXCJNNDcyLjcxLDE3Mi44NGwtMC4wNywtMC40M2wtMC4xNiwtMC4yMmwtMC41MywtMC4yN2wtMC4zOCwtMC41OGwwLjMsLTAuNDNsMC41MSwtMC4xOWwwLjE4LC0wLjE4bDAuMywtMC44N2wwLjEyLC0wLjA0bDAuMjIsMC4yNmwwLjEyLDAuMDlsMC4zOCwwLjE1bDAuMjgsMC40MWwwLjE1LDAuMTJsMC4zNCwwLjEybDAuNDMsMC41bDAuMTUsMC4wN2wtMC4xMiwwLjNsLTAuMjcsMC4zMmwtMC4wMywwLjE4bC0wLjMxLDAuMDZsLTEuNDgsMC40N2wtMC4xNSwwLjE3WlwiLCBcIm5hbWVcIjogXCJLb3Nvdm9cIn0sIFwiXzBcIjoge1wicGF0aFwiOiBcIk01MDMuNTQsMTkyLjkybDAuMDksLTAuMTdsMC40MSwwLjAxbC0wLjA4LDAuMDFsLTAuNDIsMC4xNVpNNTA0LjIzLDE5Mi43NmwxLjAyLDAuMDJsMC40LC0wLjEzbC0wLjA5LDAuMjlsMC4wMywwLjA4bC0wLjM1LDAuMTZsLTAuMjQsLTAuMDRsLTAuMDYsLTAuMWwtMC4xOCwtMC4xN2wtMC4xOSwtMC4wOGwtMC4zMywtMC4wMlpcIiwgXCJuYW1lXCI6IFwiTm9ydGhlcm4gQ3lwcnVzXCJ9LCBcIkpPXCI6IHtcInBhdGhcIjogXCJNNTEwLjI2LDIwMC45M2wwLjI4LC0wLjU3bDIuNTMsMS4wbDAuMjcsLTAuMDJsNC41NywtMi43N2wwLjg0LDIuODRsLTAuMjgsMC4yNWwtNC45NSwxLjM3bC0wLjE0LDAuNDlsMi4yNCwyLjQ4bC0wLjUsMC4yOGwtMC4xMywwLjE0bC0wLjM1LDAuNzhsLTEuNzYsMC4zNWwtMC4yLDAuMTRsLTAuNTcsMC45NGwtMC45NCwwLjczbC0yLjQ1LC0wLjM4bC0wLjAzLC0wLjEybDEuMjMsLTQuMzJsLTAuMDQsLTEuMWwwLjM0LC0wLjc1bDAuMDMsLTAuMTJsMC4wLC0xLjYzWlwiLCBcIm5hbWVcIjogXCJKb3JkYW5cIn0sIFwiSFJcIjoge1wicGF0aFwiOiBcIk00NTUuNDksMTYyLjczbDEuNTMsMC4wOWwwLjI0LC0wLjFsMC4yOSwtMC4zNGwwLjY0LDAuMzhsMC4xNCwwLjA0bDAuOTgsMC4wNmwwLjMyLC0wLjNsLTAuMDEsLTAuNjZsMC42NywtMC4yNWwwLjE5LC0wLjIybDAuMjEsLTEuMTFsMS43MiwtMC43MmwwLjY1LDAuMzJsMS45NCwxLjM3bDIuMDcsMC42bDAuMjIsLTAuMDJsMC42NywtMC4zM2wwLjQ3LDAuOTRsMC42NywwLjc2bC0wLjYzLDAuNzdsLTAuOTEsLTAuNTVsLTAuMTYsLTAuMDRsLTEuNjksMC4wNGwtMi4yLC0wLjUxbC0xLjE3LDAuMDdsLTAuMjEsMC4xMWwtMC4zNiwwLjQybC0wLjY3LC0wLjUzbC0wLjQ2LDAuMTJsLTAuNTIsMS4yOWwwLjA1LDAuMzFsMS4yMSwxLjQybDAuNTgsMC45OWwxLjE1LDEuMTRsMC45NSwwLjY4bDAuOTIsMS4yM2wwLjEsMC4wOWwxLjc1LDAuOTFsLTEuODcsLTAuODlsLTEuNSwtMS4xMWwtMi4yMywtMC44OGwtMS43NywtMS45bDAuMTIsLTAuMDZsMC4xLC0wLjQ3bC0xLjA3LC0xLjIybC0wLjA0LC0wLjk0bC0wLjIxLC0wLjI3bC0xLjYxLC0wLjQ5bC0wLjM1LDAuMTRsLTAuNTMsMC45M2wtMC40MSwtMC41N2wwLjA0LC0wLjczWlwiLCBcIm5hbWVcIjogXCJDcm9hdGlhXCJ9LCBcIkhUXCI6IHtcInBhdGhcIjogXCJNMjM3LjgyLDIzNC42OGwxLjM1LDAuMWwxLjk1LDAuMzdsMC4xOCwxLjE1bC0wLjE2LDAuODNsLTAuNTEsMC4zN2wtMC4wNiwwLjQ0bDAuNTcsMC42OGwtMC4wMiwwLjIybC0xLjMxLC0wLjM1bC0xLjI2LDAuMTdsLTEuNDksLTAuMThsLTAuMTUsMC4wMmwtMS4wMywwLjQzbC0xLjAyLC0wLjYxbDAuMDksLTAuMzZsMi4wNCwwLjMybDEuOSwwLjIxbDAuMTksLTAuMDVsMC45LC0wLjU4bDAuMDUsLTAuNDdsLTEuMDUsLTEuMDNsMC4wMiwtMC44NmwtMC4yMywtMC4zbC0xLjEzLC0wLjI5bDAuMTgsLTAuMjNaXCIsIFwibmFtZVwiOiBcIkhhaXRpXCJ9LCBcIkhVXCI6IHtcInBhdGhcIjogXCJNNDYxLjk2LDE1Ny45MmwwLjY4LC0xLjY2bC0wLjAzLC0wLjI5bC0wLjE1LC0wLjIybDAuODQsLTAuMGwwLjMsLTAuMjZsMC4xMiwtMC44NGwwLjg4LDAuNTdsMC45OCwwLjM4bDAuMTYsMC4wMWwyLjEsLTAuMzlsMC4yMywtMC4yMWwwLjE0LC0wLjQ1bDAuODgsLTAuMWwxLjA2LC0wLjQzbDAuMTMsMC4xbDAuMjgsMC4wNGwxLjE4LC0wLjRsMC4xNCwtMC4xbDAuNTIsLTAuNjdsMC42MywtMC4xNWwyLjYsMC45NWwwLjI2LC0wLjAzbDAuMzgsLTAuMjNsMS4xMiwwLjdsMC4xLDAuNDlsLTEuMzEsMC41N2wtMC4xNCwwLjEzbC0xLjE4LDIuMTRsLTEuNDQsMi4wNGwtMS44NSwwLjU1bC0xLjUxLC0wLjEzbC0wLjE0LDAuMDJsLTEuOTIsMC44MmwtMC44NSwwLjQybC0xLjkxLC0wLjU1bC0xLjgzLC0xLjMxbC0wLjc0LC0wLjM3bC0wLjQ0LC0wLjk3bC0wLjI2LC0wLjE4WlwiLCBcIm5hbWVcIjogXCJIdW5nYXJ5XCJ9LCBcIkhOXCI6IHtcInBhdGhcIjogXCJNMjAyLjQ4LDI1MS44N2wtMC4zMywtMC42MmwtMC4xOCwtMC4xNGwtMC41LC0wLjE1bDAuMTMsLTAuNzZsLTAuMTEsLTAuMjhsLTAuMzQsLTAuMjhsLTAuNiwtMC4yM2wtMC4xOCwtMC4wMWwtMC44MSwwLjIybC0wLjE2LC0wLjI0bC0wLjcyLC0wLjM5bC0wLjUxLC0wLjQ4bC0wLjEyLC0wLjA3bC0wLjMxLC0wLjA5bDAuMjQsLTAuM2wwLjA0LC0wLjNsLTAuMTYsLTAuNGwwLjEsLTAuMjhsMS4xNCwtMC42OWwxLjAsLTAuODZsMC4wOSwwLjA0bDAuMywtMC4wNWwwLjQ3LC0wLjM5bDAuNDksLTAuMDNsMC4xNCwwLjEzbDAuMjksMC4wNmwwLjMxLC0wLjFsMS4xNiwwLjIybDEuMjQsLTAuMDhsMC44MSwtMC4yOGwwLjI5LC0wLjI1bDAuNjMsMC4xbDAuNjksMC4xOGwwLjY1LC0wLjA2bDAuNDksLTAuMmwxLjA0LDAuMzJsMC4zOCwwLjA2bDAuNywwLjQ0bDAuNzEsMC41NmwwLjkyLDAuNDFsMC4xLDAuMTFsLTAuMTEsLTAuMDFsLTAuMjMsMC4wOWwtMC4zLDAuM2wtMC43NiwwLjI5bC0wLjU4LDAuMGwtMC4xNSwwLjA0bC0wLjQ1LDAuMjZsLTAuMzEsLTAuMDdsLTAuMzcsLTAuMzRsLTAuMjgsLTAuMDdsLTAuMjYsMC4wN2wtMC4xOCwwLjE1bC0wLjIzLDAuNDNsLTAuMDQsLTAuMGwtMC4zMywwLjI4bC0wLjAzLDAuNGwtMC43NiwwLjYxbC0wLjQ1LDAuM2wtMC4xNSwwLjE2bC0wLjUxLC0wLjM2bC0wLjQxLDAuMDZsLTAuNDUsMC41NmwtMC40MSwtMC4wMWwtMC41OSwwLjA2bC0wLjI3LDAuMzFsMC4wNCwwLjk2bC0wLjA3LDAuMGwtMC4yNSwwLjE2bC0wLjI0LDAuNDVsLTAuNDIsMC4wNlpcIiwgXCJuYW1lXCI6IFwiSG9uZHVyYXNcIn0sIFwiUFJcIjoge1wicGF0aFwiOiBcIk0yNTQuOTUsMjM4LjMxbDEuMTUsMC4yMWwwLjIsMC4yM2wtMC4zNiwwLjM2bC0xLjc2LC0wLjAxbC0xLjIsMC4wN2wtMC4wOSwtMC42OWwwLjE3LC0wLjE4bDEuODksMC4wMVpcIiwgXCJuYW1lXCI6IFwiUHVlcnRvIFJpY29cIn0sIFwiUFNcIjoge1wicGF0aFwiOiBcIk01MDkuNjYsMjAxLjA2bC0wLjAsMS40NGwtMC4yOSwwLjYzbC0wLjU5LDAuMTlsMC4wMiwtMC4xMWwwLjUyLC0wLjMxbC0wLjAyLC0wLjUzbC0wLjQxLC0wLjJsMC4zNiwtMS4yOGwwLjQxLDAuMTdaXCIsIFwibmFtZVwiOiBcIldlc3QgQmFua1wifSwgXCJQVFwiOiB7XCJwYXRoXCI6IFwiTTM5OC42NSwxNzMuNmwwLjc1LC0wLjYzbDAuNywtMC4zbDAuNTEsMS4ybDAuMjgsMC4xOGwxLjQ4LC0wLjBsMC4yLC0wLjA4bDAuMzMsLTAuM2wxLjE2LDAuMDhsMC41MiwxLjExbC0wLjk1LDAuNjZsLTAuMTMsMC4yNGwtMC4wMywyLjJsLTAuMzMsMC4zNWwtMC4wOCwwLjE4bC0wLjA4LDEuMTdsLTAuODYsMC4xOWwtMC4yLDAuNDRsMC45MywxLjY0bC0wLjY0LDEuNzlsMC4wNywwLjMxbDAuNzIsMC43MmwtMC4yNCwwLjU2bC0wLjksMS4wNWwtMC4wNywwLjI2bDAuMTcsMC43N2wtMC43MywwLjU0bC0xLjE4LC0wLjM2bC0wLjE2LC0wLjBsLTAuODUsMC4yMWwwLjMxLC0xLjgxbC0wLjIzLC0xLjg3bC0wLjIzLC0wLjI1bC0wLjk5LC0wLjI0bC0wLjQ5LC0wLjkxbDAuMTgsLTEuNzJsMC45MywtMC45OWwwLjA4LC0wLjE2bDAuMTcsLTEuMTdsMC41MiwtMS43NmwtMC4wNCwtMS4zNmwtMC41MSwtMS4xNGwtMC4wOSwtMC44WlwiLCBcIm5hbWVcIjogXCJQb3J0dWdhbFwifSwgXCJQWVwiOiB7XCJwYXRoXCI6IFwiTTI2NC4zMywzNDEuNDNsMC45MywtMi45NmwwLjA3LC0xLjQybDEuMSwtMi4xbDQuMTksLTAuNzNsMi4yMiwwLjA0bDIuMTIsMS4yMWwwLjA3LDAuNzZsMC43LDEuMzhsLTAuMTYsMy40OGwwLjI0LDAuMzFsMi42NCwwLjVsMC4xOSwtMC4wM2wwLjksLTAuNDVsMS40NywwLjYybDAuMzgsMC42NGwwLjIzLDIuMzVsMC4zLDEuMDdsMC4yNSwwLjIxbDAuOTMsMC4xMmwwLjE2LC0wLjAybDAuOCwtMC4zN2wwLjYxLDAuMzNsLTAuMCwxLjI1bC0wLjMzLDEuNTNsLTAuNSwxLjU3bC0wLjM5LDIuMjZsLTIuMTQsMS45NGwtMS44NSwwLjRsLTIuNzQsLTAuNGwtMi4xMywtMC42MmwyLjI2LC0zLjc1bDAuMDMsLTAuMjRsLTAuMzYsLTEuMThsLTAuMTcsLTAuMTlsLTIuNTUsLTEuMDNsLTMuMDQsLTEuOTVsLTIuMDcsLTAuNDNsLTQuNCwtNC4xMlpcIiwgXCJuYW1lXCI6IFwiUGFyYWd1YXlcIn0sIFwiUEFcIjoge1wicGF0aFwiOiBcIk0yMTMuNjUsMjYzLjc5bDAuMTgsLTAuNDNsMC4wMiwtMC4xOGwtMC4wNiwtMC4yOGwwLjIzLC0wLjE4bC0wLjAxLC0wLjQ4bC0wLjQsLTAuMjlsLTAuMDEsLTAuNjJsMC41NywtMC4xM2wwLjY4LDAuNjlsLTAuMDQsMC4zOWwwLjI2LDAuMzNsMS4wLDAuMTFsMC4yNywtMC4xbDAuNDksMC40NGwwLjI0LDAuMDdsMS4zNCwtMC4yMmwxLjA0LC0wLjYybDEuNDksLTAuNWwwLjg2LC0wLjczbDAuOTksMC4xMWwwLjE4LDAuMjhsMS4zNSwwLjA4bDEuMDIsMC40bDAuNzgsMC43MmwwLjcxLDAuNTNsLTAuMSwwLjEybC0wLjA1LDAuM2wwLjUzLDEuMzRsLTAuMjgsMC40NGwtMC42LC0wLjEzbC0wLjM2LDAuMjJsLTAuMiwwLjc2bC0wLjQxLC0wLjM2bC0wLjQ0LC0xLjEybDAuNDksLTAuNTNsLTAuMTQsLTAuNDlsLTAuNTEsLTAuMTRsLTAuNDEsLTAuNzJsLTAuMTEsLTAuMTFsLTEuMjUsLTAuN2wtMC4xOSwtMC4wNGwtMS4xLDAuMTZsLTAuMjIsMC4xNWwtMC40NywwLjgxbC0wLjksMC41NmwtMC40OSwwLjA4bC0wLjIyLDAuMTdsLTAuMjUsMC41MmwwLjA1LDAuMzJsMC45MywxLjA3bC0wLjQxLDAuMjFsLTAuMjksMC4zbC0wLjgxLDAuMDlsLTAuMzYsLTEuMjZsLTAuNTMsLTAuMWwtMC4yMSwwLjI4bC0wLjUsLTAuMDlsLTAuNDQsLTAuODhsLTAuMjIsLTAuMTZsLTAuOTksLTAuMTZsLTAuNjEsLTAuMjhsLTAuMTMsLTAuMDNsLTEuMCwwLjBaXCIsIFwibmFtZVwiOiBcIlBhbmFtYVwifSwgXCJQR1wiOiB7XCJwYXRoXCI6IFwiTTgwOC40LDI5OC42bDAuNjIsMC40NmwxLjE5LDEuNTZsMS4wNCwwLjc3bC0wLjE4LDAuMzdsLTAuNDIsMC4xNWwtMC45MiwtMC44MmwtMS4wNSwtMS41M2wtMC4yNywtMC45NlpNODA0LjA5LDI5Ni4wNmwtMC4zLDAuMjZsLTAuMzYsLTEuMTFsLTAuNjYsLTEuMDZsLTIuNTUsLTEuODlsLTEuNDIsLTAuNTlsMC4xNywtMC4xNWwxLjE2LDAuNmwwLjg1LDAuNTVsMS4wMSwwLjU4bDAuOTcsMS4wMmwwLjksMC43NmwwLjI0LDEuMDNaTTc5Ni43MSwyOTcuOTlsMC4xNSwwLjgybDAuMzQsMC4yNGwxLjQzLC0wLjE5bDAuMTksLTAuMTFsMC42OCwtMC44MmwxLjM2LC0wLjg3bDAuMTMsLTAuMzFsLTAuMjEsLTEuMTNsMS4wNCwtMC4wM2wwLjMsMC4yNWwtMC4wNCwxLjE3bC0wLjc0LDEuMzRsLTEuMTcsMC4xOGwtMC4yMiwwLjE1bC0wLjM1LDAuNjJsLTIuNTEsMS4xM2wtMS4yMSwtMC4wbC0xLjk5LC0wLjcxbC0xLjE5LC0wLjU4bDAuMDcsLTAuMjhsMS45OCwwLjMybDEuNDYsLTAuMmwwLjI0LC0wLjIxbDAuMjUsLTAuNzlaTTc4OS4yNCwzMDMuNTJsMC4xMSwwLjE1bDIuMTksMS42MmwxLjYsMi42MmwwLjI3LDAuMTRsMS4wOSwtMC4wNmwtMC4wNywwLjc3bDAuMjMsMC4zMmwxLjIzLDAuMjdsLTAuMTQsMC4wOWwwLjA1LDAuNTNsMi4zOSwwLjk1bC0wLjExLDAuMjhsLTEuMzMsMC4xNGwtMC41MSwtMC41NWwtMC4xOCwtMC4wOWwtNC41OSwtMC42NWwtMS44NywtMS41NWwtMS4zOCwtMS4zNWwtMS4yOCwtMi4xN2wtMC4xNiwtMC4xM2wtMy4yNywtMS4xbC0wLjE5LDAuMGwtMi4xMiwwLjcybC0xLjU4LDAuODVsLTAuMTUsMC4zMWwwLjI4LDEuNjNsLTEuNjUsMC43M2wtMS4zNywtMC40bC0yLjMsLTAuMDlsLTAuMDgsLTE1LjY1bDMuOTUsMS41N2w0LjU4LDEuNDJsMS42NywxLjI1bDEuMzIsMS4xOWwwLjM2LDEuMzlsMC4xOSwwLjIxbDQuMDYsMS41MWwwLjM5LDAuODVsLTEuOSwwLjIybC0wLjI1LDAuMzlsMC41NSwxLjY4WlwiLCBcIm5hbWVcIjogXCJQYXB1YSBOZXcgR3VpbmVhXCJ9LCBcIlBFXCI6IHtcInBhdGhcIjogXCJNMjQ2LjQ0LDMyOS4yMWwtMC42MywxLjI1bC0xLjA1LDAuNTRsLTIuMjUsLTEuMzNsLTAuMTksLTAuOTNsLTAuMTYsLTAuMjFsLTQuOTUsLTIuNThsLTQuNDYsLTIuNzlsLTEuODcsLTEuNTJsLTAuOTQsLTEuOTFsMC4zMywtMC42bC0wLjAxLC0wLjMxbC0yLjExLC0zLjMzbC0yLjQ2LC00LjY2bC0yLjM2LC01LjAybC0xLjA0LC0xLjE4bC0wLjc3LC0xLjgxbC0wLjA4LC0wLjExbC0xLjk1LC0xLjY0bC0xLjU0LC0wLjg4bDAuNjEsLTAuODVsMC4wMiwtMC4zMWwtMS4xNSwtMi4yN2wwLjY5LC0xLjU2bDEuNTksLTEuMjZsMC4xMiwwLjQybC0wLjU2LDAuNDdsLTAuMTEsMC4yNWwwLjA3LDAuOTJsMC4zNiwwLjI3bDAuOTcsLTAuMTlsMC44NSwwLjIzbDAuOTksMS4xOWwwLjQxLDAuMDVsMS40MiwtMS4wM2wwLjExLC0wLjE2bDAuNDYsLTEuNjRsMS40NSwtMi4wNmwyLjkyLC0wLjk2bDAuMTEsLTAuMDdsMi43MywtMi42MmwwLjg0LC0xLjcybDAuMDIsLTAuMThsLTAuMywtMS42NWwwLjI4LC0wLjFsMS40OSwxLjA2bDAuNzcsMS4xNGwwLjEsMC4wOWwxLjA4LDAuNmwxLjQzLDIuNTVsMC4yMSwwLjE1bDEuODYsMC4zMWwwLjE4LC0wLjAzbDEuMjUsLTAuNmwwLjc3LDAuMzdsMC4xNywwLjAzbDEuNCwtMC4ybDEuNTcsMC45NmwtMS40NSwyLjI5bDAuMjMsMC40NmwwLjYzLDAuMDVsMC42NiwwLjdsLTEuNTEsLTAuMDhsLTAuMjQsMC4xbC0wLjI3LDAuMzFsLTEuOTYsMC40NmwtMi45NSwxLjc0bC0wLjE0LDAuMjFsLTAuMTcsMS4xbC0wLjYsMC44MmwtMC4wNSwwLjIzbDAuMjEsMS4xM2wtMS4zMSwwLjYzbC0wLjE3LDAuMjdsMC4wLDAuOTFsLTAuNTMsMC4zN2wtMC4xLDAuMzdsMS4wNCwyLjI3bDEuMzEsMS40NmwtMC40NCwwLjlsMC4yNCwwLjQzbDEuNTIsMC4xM2wwLjg3LDEuMjNsMC4yNCwwLjEzbDIuMjEsMC4wN2wwLjE4LC0wLjA2bDEuNTUsLTEuMTNsLTAuMTQsMy4yMmwwLjIzLDAuM2wxLjE0LDAuMjlsMC4xNiwtMC4wbDEuMTgsLTAuMzZsMS45NywzLjcxbC0wLjQ1LDAuNzFsLTAuMDQsMC4xNGwtMC4xMiwxLjhsLTAuMDUsMi4wN2wtMC45MiwxLjJsLTAuMDMsMC4zMWwwLjM4LDAuOGwtMC40OCwwLjcybC0wLjAyLDAuM2wxLjAxLDIuMDJsLTEuNSwyLjY0WlwiLCBcIm5hbWVcIjogXCJQZXJ1XCJ9LCBcIlBLXCI6IHtcInBhdGhcIjogXCJNNjA5LjA4LDE4Ny43NmwxLjY2LDEuMjFsMC43MSwyLjExbDAuMiwwLjE5bDMuNjIsMS4wMWwtMS45OCwxLjk1bC0yLjY1LDAuNGwtMy43NSwtMC42OGwtMC4yNiwwLjA4bC0xLjIzLDEuMjJsLTAuMDcsMC4zMWwwLjg5LDIuNDZsMC44OCwxLjkybDAuMSwwLjEybDEuNjcsMS4xNGwtMS44LDEuMzVsLTAuMTIsMC4yNWwwLjA0LDEuODVsLTIuMzUsMi42N2wtMS41OSwyLjc5bC0yLjUsMi43MmwtMi43NiwtMC4ybC0wLjI0LDAuMDlsLTIuNzYsMi44M2wwLjA0LDAuNDVsMS41NCwxLjEzbDAuMjcsMS45NGwwLjA5LDAuMTdsMS4zNCwxLjI5bDAuNCwxLjgzbC01LjE0LC0wLjAxbC0wLjIyLDAuMDlsLTEuNTMsMS42M2wtMS41MiwtMC41NmwtMC43NiwtMS44OGwtMS45MywtMi4wM2wtMC4yNSwtMC4wOWwtNC42LDAuNWwtNC4wNSwwLjA1bC0zLjEsMC4zM2wwLjc3LC0yLjUzbDMuNDgsLTEuMzNsMC4xOSwtMC4zM2wtMC4yMSwtMS4yNGwtMC4xOSwtMC4yM2wtMS4wMSwtMC4zN2wtMC4wNiwtMi4xOGwtMC4xNywtMC4yNmwtMi4zMiwtMS4xNmwtMC45NiwtMS41N2wtMC41NiwtMC42NWwzLjE2LDEuMDVsMC4xNCwwLjAxbDIuNDUsLTAuNGwxLjQ0LDAuMzNsMC4zLC0wLjFsMC40LC0wLjQ3bDEuNTgsMC4yMmwwLjE0LC0wLjAxbDMuMjUsLTEuMTRsMC4yLC0wLjI3bDAuMDgsLTIuMjNsMS4yMywtMS4zOGwxLjczLDAuMGwwLjI4LC0wLjJsMC4yMiwtMC42MWwxLjY4LC0wLjMybDAuODYsMC4yNGwwLjI3LC0wLjA1bDAuOTgsLTAuNzhsMC4xMSwtMC4yNmwtMC4xMywtMS41N2wwLjk2LC0xLjUybDEuNTEsLTAuNjdsMC4xNCwtMC40MWwtMC43NCwtMS40bDEuODYsMC4wN2wwLjI2LC0wLjEzbDAuNjksLTEuMDFsMC4wNSwtMC4ybC0wLjA5LC0wLjk0bDEuMTQsLTEuMDlsMC4wOSwtMC4yOGwtMC4yOSwtMS40MWwtMC41MSwtMS4wN2wxLjIzLC0xLjA1bDIuNiwtMC41OGwyLjg2LC0wLjMzbDEuMzMsLTAuNTRsMS4zLC0wLjI5WlwiLCBcIm5hbWVcIjogXCJQYWtpc3RhblwifSwgXCJQSFwiOiB7XCJwYXRoXCI6IFwiTTczNy4xMSwyNjMuODJsMC4yNSwxLjY2bDAuMTQsMS4zNGwtMC41NCwxLjQ2bC0wLjY0LC0xLjc5bC0wLjUsLTAuMWwtMS4xNywxLjI4bC0wLjA1LDAuMzJsMC43NCwxLjcxbC0wLjQ5LDAuODFsLTIuNiwtMS4yOGwtMC42MSwtMS41N2wwLjY4LC0xLjA3bC0wLjA3LC0wLjRsLTEuNTksLTEuMTlsLTAuNDIsMC4wNmwtMC42OSwwLjkxbC0xLjAxLC0wLjA4bC0wLjIxLDAuMDZsLTEuNTgsMS4ybC0wLjE3LC0wLjNsMC44NywtMS44OGwxLjQ4LC0wLjY2bDEuMTgsLTAuODFsMC43MSwwLjkybDAuMzQsMC4xbDEuOSwtMC42OWwwLjE4LC0wLjE4bDAuMzQsLTAuOTRsMS41NywtMC4wNmwwLjI5LC0wLjMybC0wLjEsLTEuMzhsMS40MSwwLjgzbDAuMzYsMi4wNlpNNzM0Ljk0LDI1NC40MmwwLjU2LDIuMjRsLTEuNDEsLTAuNDlsLTAuNCwwLjNsMC4wNywwLjk0bDAuNTEsMS4zbC0wLjU0LDAuMjZsLTAuMDgsLTEuMzRsLTAuMjUsLTAuMjhsLTAuNTYsLTAuMWwtMC4yMywtMC45MWwxLjAzLDAuMTRsMC4zNCwtMC4zMWwtMC4wMywtMC45NmwtMC4wNiwtMC4xOGwtMS4xNCwtMS40NGwxLjYyLDAuMDRsMC41NywwLjc4Wk03MjQuNjgsMjM4LjMzbDEuNDgsMC43MWwwLjMzLC0wLjA0bDAuNDQsLTAuMzhsMC4wNSwwLjEzbC0wLjM3LDAuOTdsMC4wMSwwLjIzbDAuODEsMS43NWwtMC41OSwxLjkybC0xLjM3LDAuNzlsLTAuMTQsMC4ybC0wLjM5LDIuMDdsMC4wMSwwLjE0bDAuNTYsMi4wNGwwLjIzLDAuMjFsMS4zMywwLjI4bDAuMTQsLTAuMGwxLjAsLTAuMjdsMi44MiwxLjI4bC0wLjIsMS4xNmwwLjEyLDAuMjlsMC42NiwwLjVsLTAuMTMsMC41NmwtMS41NCwtMC45OWwtMC44OSwtMS4yOWwtMC40OSwwLjBsLTAuNDQsMC42NWwtMS4zNCwtMS4yOGwtMC4yNiwtMC4wOGwtMi4xOCwwLjM2bC0wLjk2LC0wLjQ0bDAuMDksLTAuNzJsMC42OSwtMC41N2wtMC4wMSwtMC40N2wtMC43NSwtMC41OWwtMC40NywwLjE0bC0wLjE1LDAuNDNsLTAuODYsLTEuMDJsLTAuMzQsLTEuMDJsLTAuMDcsLTEuNzRsMC40OSwwLjQxbDAuNDksLTAuMjFsMC4yNiwtMy45OWwwLjczLC0yLjFsMS4yMywwLjBaTTczMS4xMiwyNTguOTJsLTAuODIsMC43NWwtMC44MywxLjY0bC0wLjUyLDAuNWwtMS4xNywtMS4zM2wwLjM2LC0wLjQ3bDAuNjIsLTAuN2wwLjA3LC0wLjE1bDAuMjQsLTEuMzVsMC43MywtMC4wOGwtMC4zMSwxLjI5bDAuMTYsMC4zNGwwLjM3LC0wLjA5bDEuMjEsLTEuNmwtMC4xMiwxLjI0Wk03MjYuNjYsMjU1LjU4bDAuODUsMC40NWwwLjE0LDAuMDNsMS4yOCwtMC4wbC0wLjAzLDAuNjJsLTEuMDQsMC45NmwtMS4xNSwwLjU1bC0wLjA1LC0wLjcxbDAuMTcsLTEuMjZsLTAuMDEsLTAuMTNsLTAuMTYsLTAuNTFaTTcyNC45MiwyNTIuMDZsLTAuNDUsMS41bC0wLjcsLTAuODNsLTAuOTUsLTEuNDNsMS40NCwwLjA2bDAuNjcsMC43Wk03MTcuNDgsMjYxLjI4bC0xLjg3LDEuMzVsMC4yMSwtMC4zbDEuODEsLTEuNTdsMS41LC0xLjc1bDAuOTcsLTEuODRsMC4yMywxLjA4bC0xLjU2LDEuMzNsLTEuMjksMS43WlwiLCBcIm5hbWVcIjogXCJQaGlsaXBwaW5lc1wifSwgXCJQTFwiOiB7XCJwYXRoXCI6IFwiTTQ1OC44LDE0NC4yNWwtMC45NiwtMS45OGwwLjE4LC0xLjA2bC0wLjAxLC0wLjE1bC0wLjYyLC0xLjhsLTAuODIsLTEuMTFsMC41NiwtMC43M2wwLjA1LC0wLjI4bC0wLjUxLC0xLjUxbDEuNDgsLTAuODdsMy44OCwtMS41OGwzLjA2LC0xLjE0bDIuMjMsMC41MmwwLjE1LDAuNjZsMC4yOSwwLjIzbDIuNCwwLjA0bDMuMTEsMC4zOWw0LjU2LC0wLjA1bDEuMTIsMC4zMmwwLjUxLDAuODlsMC4xLDEuNDVsMC4wMywwLjEybDAuNjYsMS4yM2wtMC4wMSwxLjA4bC0xLjMzLDAuNjFsLTAuMTQsMC40MWwwLjc0LDEuNWwwLjA3LDEuNTNsMS4yMiwyLjc5bC0wLjE5LDAuNjZsLTEuMDksMC4zM2wtMC4xNCwwLjA5bC0yLjI3LDIuNzJsLTAuMDQsMC4zMWwwLjM1LDAuOGwtMi4yMiwtMS4xNmwtMC4yMSwtMC4wMmwtMS43MiwwLjQ0bC0xLjEsLTAuMzFsLTAuMjEsMC4wMmwtMS4zLDAuNjFsLTEuMTEsLTEuMDJsLTAuMzIsLTAuMDVsLTAuODEsMC4zNWwtMS4xNSwtMS42MWwtMC4yMSwtMC4xMmwtMS42NSwtMC4xN2wtMC4xOSwtMC44MmwtMC4yMywtMC4yM2wtMS43MiwtMC4zN2wtMC4zNCwwLjE3bC0wLjI1LDAuNTZsLTAuODgsLTAuNDRsMC4xMiwtMC42OWwtMC4yNSwtMC4zNWwtMS43OCwtMC4yN2wtMS4wOCwtMC45N1pcIiwgXCJuYW1lXCI6IFwiUG9sYW5kXCJ9LCBcIlpNXCI6IHtcInBhdGhcIjogXCJNNTAyLjgxLDMwOC4zMmwxLjA5LDEuMDRsMC41OCwxLjk0bC0wLjM5LDAuNjZsLTAuNSwyLjA1bC0wLjAsMC4xNGwwLjQ1LDEuOTVsLTAuNjksMC43N2wtMC4wNiwwLjExbC0wLjc2LDIuMzdsMC4xNSwwLjM2bDAuNjIsMC4zMWwtNi44NSwxLjlsLTAuMjIsMC4zM2wwLjIsMS41NGwtMS42MiwwLjNsLTAuMTIsMC4wNWwtMS40MywxLjAybC0wLjExLDAuMTVsLTAuMjUsMC43M2wtMC43MywwLjE3bC0wLjE0LDAuMDhsLTIuMTgsMi4xMmwtMS4zMywxLjZsLTAuNjUsMC4wNWwtMC44MywtMC4yOWwtMi43NSwtMC4yOGwtMC4yNCwtMC4xbC0wLjE1LC0wLjI3bC0wLjk5LC0wLjU4bC0wLjEyLC0wLjA0bC0xLjczLC0wLjE0bC0xLjg4LDAuNTRsLTEuNSwtMS40OGwtMS42MSwtMi4wMWwwLjExLC03LjczbDQuOTIsMC4wM2wwLjI5LC0wLjM3bC0wLjE5LC0wLjc5bDAuMzQsLTAuODZsMC4wLC0wLjIxbC0wLjQxLC0xLjExbDAuMjYsLTEuMTRsLTAuMDEsLTAuMTZsLTAuMTIsLTAuMzZsMC4xOCwwLjAxbDAuMSwwLjU2bDAuMzEsMC4yNWwxLjE0LC0wLjA2bDEuNDQsMC4yMWwwLjc2LDEuMDVsMC4xOSwwLjEybDIuMDEsMC4zNWwwLjE5LC0wLjAzbDEuMjQsLTAuNjVsMC40NCwxLjAzbDAuMjIsMC4xOGwxLjgxLDAuMzRsMC44NSwwLjk5bDEuMDIsMS4zOWwwLjI0LDAuMTJsMS45MiwwLjAybDAuMywtMC4zMmwtMC4yMSwtMi43NGwtMC40NywtMC4yM2wtMC41MywwLjM2bC0xLjU4LC0wLjg5bC0wLjUxLC0wLjM0bDAuMjksLTIuMzZsMC40NCwtMi45OWwtMC4wMywtMC4xOGwtMC41LC0wLjk5bDAuNjEsLTEuMzhsMC41MywtMC4yNGwzLjI2LC0wLjQxbDAuODksMC4yM2wxLjAxLDAuNjJsMS4wNCwwLjQ0bDEuNiwwLjQzbDEuMzUsMC43MlpcIiwgXCJuYW1lXCI6IFwiWmFtYmlhXCJ9LCBcIkVFXCI6IHtcInBhdGhcIjogXCJNNDgyLjE5LDEyMC44OGwwLjIzLC0xLjY4bC0wLjQzLC0wLjMxbC0wLjc1LDAuMzdsLTEuMzQsLTEuMWwtMC4xOCwtMS43NWwyLjkyLC0wLjk1bDMuMDcsLTAuNTNsMi42NiwwLjZsMi40OCwtMC4xbDAuMTgsMC4zMWwtMS42NSwxLjk2bC0wLjA2LDAuMjZsMC43MSwzLjI1bC0wLjg4LDAuOTRsLTEuODUsLTAuMDFsLTIuMDgsLTEuM2wtMS4xNCwtMC40N2wtMC4yLC0wLjAxbC0xLjY5LDAuNTFaXCIsIFwibmFtZVwiOiBcIkVzdG9uaWFcIn0sIFwiRUdcIjoge1wicGF0aFwiOiBcIk01MDguMDcsMjA4LjhsLTAuNjYsMS4wNmwtMC41MywyLjAzbC0wLjY0LDEuMzJsLTAuMzIsMC4yNmwtMS43NCwtMS44NWwtMS43NywtMy44NmwtMC40OCwtMC4wOWwtMC4yNiwwLjI1bC0wLjA3LDAuMzJsMS4wNCwyLjg4bDEuNTUsMi43NmwxLjg5LDQuMThsMC45NCwxLjQ4bDAuODMsMS41NGwyLjA4LDIuNzNsLTAuMywwLjI4bC0wLjEsMC4yM2wwLjA4LDEuNzJsMC4xMSwwLjIybDIuOTEsMi4zN2wtMjguNzgsMC4wbDAuMCwtMTkuMDZsLTAuNzMsLTIuMmwwLjYxLC0xLjU5bDAuMCwtMC4ybC0wLjM0LC0xLjA0bDAuNzMsLTEuMDhsMy4xMywtMC4wNGwyLjM2LDAuNzJsMi40OCwwLjgxbDEuMTUsMC40M2wwLjIzLC0wLjAxbDEuOTMsLTAuODdsMS4wMiwtMC43OGwyLjA4LC0wLjIxbDEuNTksMC4zMWwwLjYyLDEuMjRsMC41MiwwLjAzbDAuNDYsLTAuNzFsMS44NiwwLjU5bDEuOTUsMC4xNmwwLjE3LC0wLjA0bDAuOTIsLTAuNTJsMS40OCw0LjI0WlwiLCBcIm5hbWVcIjogXCJFZ3lwdFwifSwgXCJaQVwiOiB7XCJwYXRoXCI6IFwiTTQ2Ny4wNiwzNzMuMjdsLTAuMTMsLTAuMjlsMC4wMSwtMS41OGwtMC4wMiwtMC4xMmwtMC43MSwtMS42NGwwLjU5LC0wLjM3bDAuMTQsLTAuMjZsLTAuMDcsLTIuMTNsLTAuMDUsLTAuMTVsLTEuNjMsLTIuNThsLTEuMjUsLTIuMzFsLTEuNzEsLTMuMzdsMC44OCwtMC45OGwwLjcsMC41MmwwLjM5LDEuMDhsMC4yMywwLjE5bDEuMSwwLjE5bDEuNTUsMC41MWwwLjE0LDAuMDFsMS4zNSwtMC4ybDAuMTEsLTAuMDRsMi4yNCwtMS4zOWwwLjE0LC0wLjI1bDAuMCwtOS40bDAuMTYsMC4wOWwxLjM5LDIuMzhsLTAuMjIsMS41M2wwLjA0LDAuMTlsMC41NiwwLjk0bDAuMywwLjE0bDEuNzksLTAuMjdsMC4xNiwtMC4wOGwxLjIzLC0xLjE4bDEuMTcsLTAuNzlsMC4xLC0wLjEybDAuNTcsLTEuMTlsMS4wMiwtMC41MmwwLjksMC4yOGwxLjE2LDAuNzNsMC4xNCwwLjA1bDIuMDQsMC4xM2wwLjEzLC0wLjAybDEuNiwtMC42MmwwLjE4LC0wLjE5bDAuNjMsLTEuOTNsMS4xOCwtMC4xOWwwLjE5LC0wLjEybDAuNzgsLTEuMDVsMC44MSwtMS43MWwyLjE4LC0xLjkxbDMuNDQsLTEuODhsMC44OSwwLjAybDEuMTcsMC40M2wwLjIxLC0wLjBsMC43NiwtMC4yOWwxLjA3LDAuMjFsMS4xNSwzLjU1bDAuNjMsMS44MmwtMC40NCwyLjlsMC4xLDAuNTJsLTAuNzQsLTAuMjlsLTAuMTgsLTAuMDFsLTAuNzIsMC4xOWwtMC4yMSwwLjJsLTAuMjIsMC43NGwtMC42NiwwLjk3bC0wLjA1LDAuMThsMC4wMiwwLjkzbDAuMDksMC4yMWwxLjQ5LDEuNDZsMC4yNywwLjA4bDEuNDcsLTAuMjlsMC4yMiwtMC4xOGwwLjQzLC0xLjAxbDEuMjksMC4wMmwtMC41MSwxLjYzbC0wLjI5LDIuMmwtMC41OSwxLjEybC0yLjIsMS43OGwtMS4wNiwxLjM5bC0wLjcyLDEuNDRsLTEuMzksMS45M2wtMi44MSwyLjg0bC0xLjc1LDEuNjVsLTEuODUsMS4yNGwtMi41NSwxLjA2bC0xLjIzLDAuMTRsLTAuMjQsMC4xOGwtMC4yMiwwLjU0bC0xLjI3LC0wLjM1bC0wLjIsMC4wMWwtMS4xNSwwLjVsLTIuNjIsLTAuNTJsLTAuMTIsMC4wbC0xLjQ2LDAuMzNsLTAuOTgsLTAuMTRsLTAuMTYsMC4wMmwtMi41NSwxLjFsLTIuMTEsMC40NGwtMS41OSwxLjA3bC0wLjkzLDAuMDZsLTAuOTcsLTAuOTJsLTAuMTksLTAuMDhsLTAuNzIsLTAuMDRsLTEuMCwtMS4xNmwtMC4yNSwwLjA1Wk00OTMuNzIsMzU5LjI0bC0xLjEyLC0wLjg2bC0wLjMxLC0wLjAzbC0xLjIzLDAuNTlsLTEuMzYsMS4wN2wtMS4zOSwxLjc4bDAuMDEsMC4zOGwxLjg4LDIuMTFsMC4zMSwwLjA5bDAuOSwtMC4yN2wwLjE4LC0wLjE1bDAuNCwtMC43N2wxLjI4LC0wLjM5bDAuMTgsLTAuMTZsMC40MiwtMC44OGwwLjc2LC0xLjMybC0wLjA1LC0wLjM3bC0wLjg3LC0wLjgyWlwiLCBcIm5hbWVcIjogXCJTb3V0aCBBZnJpY2FcIn0sIFwiRUNcIjoge1wicGF0aFwiOiBcIk0yMjAuMiwyOTMuNDhsMS4yNSwtMS43NmwwLjAyLC0wLjMxbC0wLjU0LC0xLjA5bC0wLjUsLTAuMDZsLTAuNzgsMC45NGwtMS4wMywtMC43NWwwLjMzLC0wLjQ2bDAuMDUsLTAuMjNsLTAuMzgsLTIuMDRsMC42NiwtMC4yOGwwLjE3LC0wLjE5bDAuNDUsLTEuNTJsMC45MywtMS41OGwwLjA0LC0wLjJsLTAuMTMsLTAuNzhsMS4xOSwtMC40N2wxLjU3LC0wLjkxbDIuMzUsMS4zNGwwLjE3LDAuMDRsMC4yOCwtMC4wMmwwLjUyLDAuOTFsMC4yMSwwLjE1bDIuMTIsMC4zNWwwLjIsLTAuMDNsMC41NSwtMC4zMWwxLjA4LDAuNzNsMC45NywwLjU0bDAuMzEsMS42N2wtMC43MSwxLjQ5bC0yLjY0LDIuNTRsLTIuOTUsMC45N2wtMC4xNSwwLjExbC0xLjUzLDIuMThsLTAuNDksMS42OGwtMS4xLDAuOGwtMC44NywtMS4wNWwtMC4xNSwtMC4xbC0xLjAxLC0wLjI3bC0wLjEzLC0wLjBsLTAuNywwLjE0bC0wLjAzLC0wLjQzbDAuNiwtMC41bDAuMSwtMC4zMWwtMC4yNiwtMC45MVpcIiwgXCJuYW1lXCI6IFwiRWN1YWRvclwifSwgXCJBTFwiOiB7XCJwYXRoXCI6IFwiTTQ3MC4yNywxNzEuN2wwLjM4LDAuMTlsMC40NSwtMC4xOGwwLjQsMC42MWwwLjExLDAuMWwwLjQ2LDAuMjRsMC4xMywwLjg3bC0wLjMsMC45NWwtMC4wLDAuMTdsMC4zNiwxLjI4bDAuMTIsMC4xN2wwLjksMC42M2wtMC4wMywwLjQ0bC0wLjY3LDAuMzVsLTAuMTYsMC4yMmwtMC4xNCwwLjg4bC0wLjk2LDEuMThsLTAuMDYsLTAuMDNsLTAuMDQsLTAuNDhsLTAuMTIsLTAuMjJsLTEuMjgsLTAuOTJsLTAuMTksLTEuMjVsMC4yLC0xLjk2bDAuMzMsLTAuODlsLTAuMDYsLTAuM2wtMC4zNiwtMC40MWwtMC4xMywtMC43NWwwLjY2LC0wLjlaXCIsIFwibmFtZVwiOiBcIkFsYmFuaWFcIn0sIFwiQU9cIjoge1wicGF0aFwiOiBcIk00NjEuNjIsMjk5LjkzbDAuNTUsMS42N2wwLjczLDEuNTRsMS41NiwyLjE4bDAuMjgsMC4xMmwxLjY2LC0wLjJsMC44MSwtMC4zNGwxLjI4LDAuMzNsMC4zMywtMC4xNGwwLjM5LC0wLjY3bDAuNTYsLTEuM2wxLjM3LC0wLjA5bDAuMjcsLTAuMjFsMC4wNywtMC4yM2wwLjY3LC0wLjAxbC0wLjEzLDAuNTNsMC4yOSwwLjM3bDIuNzQsLTAuMDJsMC4wNCwxLjI5bDAuMDMsMC4xM2wwLjQ2LDAuODdsLTAuMzUsMS41MmwwLjE4LDEuNTVsMC4wNywwLjE2bDAuNzUsMC44NWwtMC4xMywyLjg5bDAuNDEsMC4yOWwwLjU2LC0wLjIxbDEuMTEsMC4wNWwxLjUsLTAuMzdsMC45LDAuMTJsMC4xOCwwLjUzbC0wLjI3LDEuMTVsMC4wMSwwLjE3bDAuNCwxLjA4bC0wLjMzLDAuODVsLTAuMDEsMC4xOGwwLjEyLDAuNTFsLTQuODMsLTAuMDNsLTAuMywwLjNsLTAuMTIsOC4xM2wwLjA3LDAuMTlsMS42OSwyLjFsMS4yNywxLjI1bC00LjAzLDAuOTJsLTUuOTMsLTAuMzZsLTEuNjYsLTEuMTlsLTAuMTgsLTAuMDZsLTEwLjE1LDAuMTFsLTAuMzQsMC4xM2wtMS4zNSwtMS4wNWwtMC4xNywtMC4wNmwtMS42MiwtMC4wOGwtMS42LDAuNDVsLTAuODgsMC4zNmwtMC4xNywtMS4ybDAuMzQsLTIuMTlsMC44NSwtMi4zMmwwLjE0LC0xLjEzbDAuNzksLTIuMjRsMC41NywtMS4wbDEuNDIsLTEuNjRsMC44MiwtMS4xNWwwLjA1LC0wLjEzbDAuMjYsLTEuODhsLTAuMTMsLTEuNTFsLTAuMDcsLTAuMTZsLTAuNzIsLTAuODdsLTEuMjMsLTIuOTFsMC4wOSwtMC4zN2wwLjczLC0wLjk1bDAuMDUsLTAuMjdsLTEuMjcsLTQuMTJsLTEuMTksLTEuNTRsMC4xLC0wLjJsMC44NiwtMC4yOGwwLjc4LDAuMDNsMC44MywtMC4yOWw3LjEyLDAuMDNaTTQ1MS44MSwyOTguOTRsLTAuMTcsMC4wN2wtMC41LC0xLjQybDAuODUsLTAuOTJsMC41MywtMC4yOWwwLjQ4LDAuNDRsLTAuNTYsMC4zMmwtMC4xLDAuMWwtMC40MSwwLjY1bC0wLjA1LDAuMTRsLTAuMDcsMC45MVpcIiwgXCJuYW1lXCI6IFwiQW5nb2xhXCJ9LCBcIktaXCI6IHtcInBhdGhcIjogXCJNNTk4LjQyLDE3Mi4wOGwtMS4zNywwLjU0bC0zLjMsMi4wOWwtMC4xMSwwLjEybC0xLjAxLDEuOTdsLTAuNTYsMC4wMWwtMC42LC0xLjI0bC0wLjI2LC0wLjE3bC0yLjk1LC0wLjA5bC0wLjQ2LC0yLjIybC0wLjI5LC0wLjI0bC0wLjkxLC0wLjAybDAuMTcsLTIuNzJsLTAuMTIsLTAuMjZsLTMuMCwtMi4yMmwtMC4yLC0wLjA2bC00LjI5LDAuMjRsLTIuOCwwLjQybC0yLjM2LC0yLjdsLTYuNCwtMy42NWwtMC4yMywtMC4wM2wtNi40NSwxLjgzbC0wLjIyLDAuMjlsMC4xLDEwLjk0bC0wLjg0LDAuMWwtMS42NSwtMi4yMWwtMC4xMSwtMC4wOWwtMS42OSwtMC44NGwtMC4yLC0wLjAybC0yLjg0LDAuNjNsLTAuMTQsMC4wN2wtMC43MSwwLjY0bC0wLjAyLC0wLjExbDAuNTcsLTEuMTdsMC4wLC0wLjI2bC0wLjQ4LC0xLjA1bC0wLjE3LC0wLjE2bC0yLjc4LC0wLjk5bC0xLjA4LC0yLjYybC0wLjEzLC0wLjE1bC0xLjI0LC0wLjdsLTAuMDQsLTAuNDhsMi4wNywwLjI1bDAuMzQsLTAuMjlsMC4wOSwtMi4wM2wxLjg0LC0wLjQ0bDIuMTIsMC40NWwwLjM2LC0wLjI1bDAuNDUsLTMuMDRsLTAuNDUsLTIuMDZsLTAuMzEsLTAuMjNsLTIuNDQsMC4xNWwtMi4wNywtMC43NWwtMC4yMywwLjAxbC0yLjg4LDEuMzhsLTIuMjEsMC42MmwtMC45NiwtMC4zOGwwLjIyLC0xLjM5bC0wLjA2LC0wLjIzbC0xLjYsLTIuMTJsLTAuMjUsLTAuMTJsLTEuNzIsMC4wOGwtMS44NywtMS45MWwxLjMzLC0yLjI0bC0wLjA2LC0wLjM4bC0wLjU1LC0wLjVsMS43MiwtMy4wOGwyLjMsMS43bDAuNDgsLTAuMmwwLjI5LC0yLjI2bDQuOTksLTMuNDhsMy43NiwtMC4wOGw1LjQ2LDIuMjdsMi45NiwxLjMzbDAuMjYsLTAuMDFsMi41OSwtMS4zNmwzLjgyLC0wLjA2bDMuMTMsMS42N2wwLjM4LC0wLjA5bDAuNjMsLTAuODVsMy4zNiwwLjE0bDAuMjksLTAuMTlsMC42MywtMS41N2wtMC4xMywtMC4zN2wtMy42NCwtMi4wNWwyLjAsLTEuMzZsMC4xLC0wLjM4bC0wLjMyLC0wLjYybDIuMDksLTAuNzZsMC4xMywtMC40N2wtMS42NSwtMi4xM2wwLjg5LC0wLjkxbDkuMjcsLTEuMThsMC4xMywtMC4wNWwxLjE3LC0wLjgybDYuMiwtMS4yN2wyLjI2LC0xLjQzbDQuMTksMC43bDAuNzQsMy4zOWwwLjM4LDAuMjJsMi41MiwtMC44MWwyLjksMS4wNmwtMC4xOCwxLjYzbDAuMzIsMC4zM2wyLjUyLC0wLjIzbDUuMCwtMi41OGwwLjAzLDAuMzlsMy4xNiwyLjYybDUuNTcsOC40OGwwLjQ5LDAuMDJsMS4xOCwtMS41M2wzLjIyLDEuNzhsMC4yMSwwLjAzbDMuNSwtMC44M2wxLjIxLDAuNTJsMS4xNiwxLjgybDAuMTUsMC4xMmwxLjY3LDAuNjFsMS4wMSwxLjMybDAuMjgsMC4xMWwzLjA0LC0wLjQxbDEuMSwxLjY0bC0xLjY4LDEuODlsLTEuOTcsMC4yOGwtMC4yNiwwLjI5bC0wLjEyLDMuMDlsLTEuMiwxLjIzbC00LjgxLC0xLjAxbC0wLjM1LDAuMmwtMS43Nyw1LjUxbC0xLjE0LDAuNjJsLTQuOTIsMS4yM2wtMC4yLDAuNDFsMi4xNCw1LjA2bC0xLjQ1LDAuNjdsLTAuMTcsMC4zMWwwLjE1LDEuMjhsLTEuMDUsLTAuM2wtMS4yMSwtMS4wNGwtMC4xNywtMC4wN2wtMy43MywtMC4zMmwtNC4xNSwtMC4wOGwtMC45MiwwLjMxbC0zLjQ2LC0xLjI0bC0wLjIyLDAuMDFsLTEuNDIsMC42M2wtMC4xNywwLjIxbC0wLjMyLDEuNDlsLTMuODIsLTAuOTdsLTAuMTUsMC4wbC0xLjY1LDAuNDNsLTAuMiwwLjE3bC0wLjUxLDEuMjFaXCIsIFwibmFtZVwiOiBcIkthemFraHN0YW5cIn0sIFwiRVRcIjoge1wicGF0aFwiOiBcIk01MTYuMCwyNDcuNjNsMS4yMSwwLjkybDAuMywwLjA0bDEuMywtMC41M2wwLjQ2LDAuNDFsMC4xOSwwLjA4bDEuNjUsMC4wM2wyLjA1LDAuOTZsMC42NywwLjg4bDEuMDcsMC43OWwxLjAsMS40NWwwLjcsMC42OGwtMC43MiwwLjkybC0wLjg1LDEuMTlsLTAuMDQsMC4yNWwwLjE5LDAuNjdsMC4wNCwwLjc0bDAuMjksMC4yOGwxLjQsMC4wNGwwLjU1LC0wLjE1bDAuMjMsMC4xOWwtMC40MSwwLjY3bDAuMDEsMC4zMmwwLjkyLDEuMzlsMC45MywxLjIzbDAuOTksMC45NGwwLjEsMC4wNmw4LjE5LDIuOTlsMS41MSwwLjAxbC02LjUxLDYuOTVsLTMuMTQsMC4xMWwtMC4xOCwwLjA2bC0yLjE1LDEuNzFsLTEuNTEsMC4wNGwtMC4yMiwwLjFsLTAuNiwwLjY5bC0xLjQ2LC0wLjBsLTAuOTMsLTAuNzhsLTAuMzIsLTAuMDRsLTIuMjksMS4wNWwtMC4xMiwwLjFsLTAuNjQsMC45bC0xLjQ0LC0wLjE3bC0wLjUxLC0wLjI2bC0wLjE3LC0wLjAzbC0wLjU2LDAuMDdsLTAuNjgsLTAuMDJsLTMuMSwtMi4wOGwtMC4xNywtMC4wNWwtMS42MiwwLjBsLTAuNjgsLTAuNjVsMC4wLC0xLjI4bC0wLjIxLC0wLjI5bC0xLjE5LC0wLjM4bC0xLjQyLC0yLjYzbC0wLjEzLC0wLjEybC0xLjA1LC0wLjUzbC0wLjQ2LC0xLjBsLTEuMjcsLTEuMjNsLTAuMTcsLTAuMDhsLTEuMDgsLTAuMTNsMC41MywtMC45bDEuMTcsLTAuMDVsMC4yNiwtMC4xN2wwLjM3LC0wLjc3bDAuMDMsLTAuMTRsLTAuMDMsLTIuMjNsMC43LC0yLjQ5bDEuMDgsLTAuNjVsMC4xNCwtMC4xOWwwLjI0LC0xLjBsMS4wMywtMS44NWwxLjQ3LC0xLjIybDAuMDksLTAuMTJsMS4wMiwtMi41MWwwLjM2LC0xLjk2bDIuNjIsMC40OGwwLjMzLC0wLjE4bDAuNjMsLTEuNTVaXCIsIFwibmFtZVwiOiBcIkV0aGlvcGlhXCJ9LCBcIlpXXCI6IHtcInBhdGhcIjogXCJNNDk4Ljk1LDM0MS4ybC0xLjE2LC0wLjIzbC0wLjE2LDAuMDFsLTAuNzQsMC4yOGwtMS4xMSwtMC40MWwtMS4wMiwtMC4wNGwtMS41MiwtMS4xM2wtMC4xMiwtMC4wNWwtMS43OSwtMC4zN2wtMC42NSwtMS40NmwtMC4wMSwtMC44NmwtMC4yMiwtMC4yOWwtMC45OSwtMC4yNmwtMi43NCwtMi43N2wtMC43NywtMS40NmwtMC41MiwtMC41bC0wLjcyLC0xLjU0bDIuMjQsMC4yM2wwLjc4LDAuMjhsMC4xMiwwLjAybDAuODUsLTAuMDZsMC4yMSwtMC4xMWwxLjM4LC0xLjY2bDIuMTEsLTIuMDVsMC44MSwtMC4xOGwwLjIyLC0wLjJsMC4yNywtMC44bDEuMjksLTAuOTNsMS41MywtMC4yOGwwLjExLDAuNjZsMC4zLDAuMjVsMi4wMiwtMC4wNWwxLjA0LDAuNDhsMC41LDAuNTlsMC4xOCwwLjFsMS4xMywwLjE4bDEuMTEsMC43bDAuMDEsMy4wNmwtMC40OSwxLjgybC0wLjExLDEuOTRsMC4wMywwLjE2bDAuMzUsMC42OGwtMC4yNCwxLjNsLTAuMjcsMC4xN2wtMC4xMiwwLjE1bC0wLjY0LDEuODNsLTIuNDksMi44WlwiLCBcIm5hbWVcIjogXCJaaW1iYWJ3ZVwifSwgXCJFU1wiOiB7XCJwYXRoXCI6IFwiTTM5OC42NywxNzIuOGwwLjA5LC0xLjQ1bC0wLjA2LC0wLjJsLTAuODIsLTEuMDVsMy4xNiwtMS45NmwzLjAxLDAuNTRsMy4zMywtMC4wMmwyLjY0LDAuNTJsMi4xNCwtMC4xNWwzLjksMC4xbDAuOTEsMS4wOGwwLjE0LDAuMDlsNC42MSwxLjM4bDAuMjYsLTAuMDRsMC43NywtMC41NWwyLjY2LDEuMjlsMC4xNywwLjAzbDIuNTksLTAuMzVsMC4xLDEuMjhsLTIuMiwxLjg1bC0zLjEzLDAuNjJsLTAuMjMsMC4yM2wtMC4yMSwwLjkybC0xLjU0LDEuNjhsLTAuOTcsMi40bDAuMDIsMC4yNmwwLjg1LDEuNDZsLTEuMjcsMS4xNGwtMC4wOSwwLjE0bC0wLjUsMS43M2wtMS43MywwLjUzbC0wLjE1LDAuMWwtMS42OCwyLjFsLTMuMDMsMC4wNGwtMi4zOCwtMC4wNWwtMC4xNywwLjA1bC0xLjU3LDEuMDFsLTAuOSwxLjAxbC0wLjk2LC0wLjE5bC0wLjgyLC0wLjg2bC0wLjY5LC0xLjZsLTAuMjIsLTAuMThsLTIuMTQsLTAuNDFsLTAuMTMsLTAuNjJsMC44MywtMC45N2wwLjM5LC0wLjg2bC0wLjA2LC0wLjMzbC0wLjczLC0wLjczbDAuNjMsLTEuNzRsLTAuMDIsLTAuMjVsLTAuOCwtMS40MWwwLjY5LC0wLjE1bDAuMjMsLTAuMjdsMC4wOSwtMS4yOWwwLjMzLC0wLjM2bDAuMDgsLTAuMmwwLjAzLC0yLjE2bDEuMDMsLTAuNzJsMC4xLC0wLjM3bC0wLjcsLTEuNWwtMC4yNSwtMC4xN2wtMS40NiwtMC4xMWwtMC4yMiwwLjA3bC0wLjM0LDAuM2wtMS4xNywwLjBsLTAuNTUsLTEuMjlsLTAuMzksLTAuMTZsLTEuMDIsMC40NGwtMC40NSwwLjM2WlwiLCBcIm5hbWVcIjogXCJTcGFpblwifSwgXCJFUlwiOiB7XCJwYXRoXCI6IFwiTTUyNy4xNSwyNTMuMDVsLTAuNzcsLTAuNzRsLTEuMDEsLTEuNDdsLTEuMTQsLTAuODZsLTAuNjIsLTAuODRsLTAuMTEsLTAuMDlsLTIuMTgsLTEuMDJsLTAuMTIsLTAuMDNsLTEuNjEsLTAuMDNsLTAuNTIsLTAuNDZsLTAuMzEsLTAuMDVsLTEuMzEsMC41NGwtMS4zOCwtMS4wNmwtMC40NiwwLjEybC0wLjY5LDEuNjhsLTIuNDksLTAuNDZsLTAuMiwtMC43NmwxLjA2LC0zLjY5bDAuMjQsLTEuNjVsMC42NiwtMC42NmwxLjc2LC0wLjRsMC4xNiwtMC4xbDAuOTcsLTEuMTNsMS4yNCwyLjU1bDAuNjgsMi4zNGwwLjA5LDAuMTRsMS40LDEuMjdsMy4zOSwyLjRsMS4zNywxLjQzbDIuMTQsMi4zNGwwLjk0LDAuNmwtMC4zMiwwLjI2bC0wLjg1LC0wLjE3WlwiLCBcIm5hbWVcIjogXCJFcml0cmVhXCJ9LCBcIk1FXCI6IHtcInBhdGhcIjogXCJNNDY5LjA1LDE3Mi45bC0wLjU3LC0wLjhsLTAuMSwtMC4wOWwtMC44MiwtMC40NmwwLjE2LC0wLjMzbDAuMzUsLTEuNTdsMC43MiwtMC42MmwwLjI3LC0wLjE2bDAuNDgsMC4zOGwwLjM1LDAuNGwwLjEyLDAuMDhsMC43OSwwLjMybDAuNjYsMC40M2wtMC40MywwLjYybC0wLjI4LDAuMTFsLTAuMDcsLTAuMjVsLTAuNTMsLTAuMWwtMS4wOSwxLjQ5bC0wLjA1LDAuMjNsMC4wNiwwLjMyWlwiLCBcIm5hbWVcIjogXCJNb250ZW5lZ3JvXCJ9LCBcIk1EXCI6IHtcInBhdGhcIjogXCJNNDg4LjIsMTUzLjc1bDAuMTQsLTAuMTFsMS40OSwtMC4yOGwxLjc1LDAuOTVsMS4wNiwwLjE0bDAuOTIsMC43bC0wLjE1LDAuOWwwLjE1LDAuMzFsMC44LDAuNDZsMC4zMywxLjJsMC4wOSwwLjE0bDAuNzIsMC42NmwtMC4xMSwwLjI4bDAuMSwwLjMzbC0wLjA2LDAuMDJsLTEuMjUsLTAuMDhsLTAuMTcsLTAuMjlsLTAuMzksLTAuMTJsLTAuNTIsMC4yNWwtMC4xNiwwLjM2bDAuMTMsMC40MmwtMC42LDAuODhsLTAuNDMsMS4wM2wtMC4yMiwwLjEybC0wLjMyLC0xLjBsMC4yNSwtMS4zNGwtMC4wOCwtMS4zOGwtMC4wNiwtMC4xN2wtMS40MywtMS44N2wtMC44MSwtMS4zNmwtMC43OCwtMC45NWwtMC4xMiwtMC4wOWwtMC4yOSwtMC4xMlpcIiwgXCJuYW1lXCI6IFwiTW9sZG92YVwifSwgXCJNR1wiOiB7XCJwYXRoXCI6IFwiTTU0NC43NywzMTYuNDVsMC42NCwxLjA0bDAuNiwxLjYybDAuNCwzLjA0bDAuNjMsMS4yMWwtMC4yMiwxLjA3bC0wLjE1LDAuMjZsLTAuNTksLTEuMDVsLTAuNTIsLTAuMDFsLTAuNDcsMC43NmwtMC4wNCwwLjIzbDAuNDYsMS44NGwtMC4xOSwwLjkybC0wLjYxLDAuNTNsLTAuMSwwLjIxbC0wLjE2LDIuMTVsLTAuOTcsMi45OGwtMS4yNCwzLjU5bC0xLjU1LDQuOTdsLTAuOTYsMy42N2wtMS4wOCwyLjkzbC0xLjk0LDAuNjFsLTIuMDUsMS4wNmwtMy4yLC0xLjUzbC0wLjYyLC0xLjI2bC0wLjE4LC0yLjM5bC0wLjg3LC0yLjA3bC0wLjIyLC0xLjhsMC40LC0xLjY5bDEuMDEsLTAuNGwwLjE5LC0wLjI4bDAuMDEsLTAuNzlsMS4xNSwtMS45MWwwLjA0LC0wLjExbDAuMjMsLTEuNjZsLTAuMDMsLTAuMTdsLTAuNTcsLTEuMjFsLTAuNDYsLTEuNThsLTAuMTksLTIuMjVsMC44MiwtMS4zNmwwLjMzLC0xLjUxbDEuMTEsLTAuMWwxLjQsLTAuNTNsMC45LC0wLjQ1bDEuMDMsLTAuMDNsMC4yMSwtMC4wOWwxLjQxLC0xLjQ1bDIuMTIsLTEuNjVsMC43NSwtMS4yOWwwLjAzLC0wLjI0bC0wLjE3LC0wLjU2bDAuNTMsMC4xNWwwLjMyLC0wLjFsMS4zOCwtMS43N2wwLjA2LC0wLjE4bDAuMDQsLTEuNDRsMC41NCwtMC43NGwwLjYyLDAuNzdaXCIsIFwibmFtZVwiOiBcIk1hZGFnYXNjYXJcIn0sIFwiTUFcIjoge1wicGF0aFwiOiBcIk0zNzguNjYsMjMwLjEzbDAuMDcsLTAuNzVsMC45MywtMC43MmwwLjgyLC0xLjM3bDAuMDQsLTAuMjFsLTAuMTQsLTAuOGwwLjgsLTEuNzRsMS4zMywtMS42MWwwLjc5LC0wLjRsMC4xNCwtMC4xNWwwLjY2LC0xLjU1bDAuMDgsLTEuNDZsMC44MywtMS41MmwxLjYsLTAuOTRsMC4xMSwtMC4xMWwxLjU2LC0yLjcxbDEuMiwtMC45OWwyLjI0LC0wLjI5bDAuMTcsLTAuMDhsMS45NSwtMS44M2wxLjMsLTAuNzdsMi4wOSwtMi4yOGwwLjA3LC0wLjI2bC0wLjYxLC0zLjM0bDAuOTIsLTIuM2wwLjMzLC0xLjQ0bDEuNTIsLTEuNzlsMi40OCwtMS4yN2wxLjg2LC0xLjE2bDAuMSwtMC4xMWwxLjY3LC0yLjkzbDAuNzIsLTEuNTlsMS41NCwwLjAxbDEuNDMsMS4xNGwwLjIxLDAuMDZsMi4zMywtMC4xOWwyLjU1LDAuNjJsMC45NywwLjAzbDAuODMsMS42bDAuMTUsMS43MWwwLjg2LDIuOTZsMC4wOSwwLjE0bDAuNSwwLjQ1bC0wLjMxLDAuNzNsLTMuMTEsMC40NGwtMC4xNiwwLjA3bC0xLjA3LDAuOTdsLTEuMzYsMC4yM2wtMC4yNSwwLjI4bC0wLjEsMS44NWwtMi43NCwxLjAybC0wLjE0LDAuMTFsLTAuOSwxLjNsLTEuOTMsMC42OWwtMi41NiwwLjQ0bC00LjA0LDIuMDFsLTAuMTcsMC4yN2wwLjAyLDIuOTFsLTAuMDgsMC4wbC0wLjMsMC4zMWwwLjA1LDEuMTVsLTEuMjUsMC4wN2wtMC4xNiwwLjA2bC0wLjczLDAuNTVsLTAuOTgsMC4wbC0wLjg1LC0wLjMzbC0wLjE1LC0wLjAybC0yLjExLDAuMjlsLTAuMjQsMC4xOWwtMC43NiwxLjk1bC0wLjYzLDAuMTZsLTAuMjEsMC4xOWwtMS4xNSwzLjI5bC0zLjQyLDIuODFsLTAuMSwwLjE3bC0wLjgxLDMuNTdsLTAuOTgsMS4xMmwtMC4zLDAuODVsLTUuMTMsMC4xOVpcIiwgXCJuYW1lXCI6IFwiTW9yb2Njb1wifSwgXCJVWlwiOiB7XCJwYXRoXCI6IFwiTTU4Ny44MywxODYuNDhsMC4wNiwtMS40NmwtMC4xOSwtMC4yOWwtMy4zMSwtMS4yNGwtMi41NywtMS40bC0xLjYzLC0xLjM4bC0yLjc5LC0xLjk4bC0xLjIsLTIuOThsLTAuMTIsLTAuMTRsLTAuODQsLTAuNTRsLTAuMTgsLTAuMDVsLTIuNjEsMC4xM2wtMC43NiwtMC40OGwtMC4yNSwtMi4yNWwtMC4xNywtMC4yNGwtMy4zNywtMS42bC0wLjMyLDAuMDRsLTIuMDgsMS43M2wtMi4xMSwxLjAybC0wLjE2LDAuMzVsMC4zMSwxLjE0bC0yLjE0LDAuMDNsLTAuMDksLTEwLjY4bDYuMSwtMS43NGw2LjI1LDMuNTdsMi4zNiwyLjcybDAuMjcsMC4xbDIuOTIsLTAuNDRsNC4xNywtMC4yM2wyLjc4LDIuMDZsLTAuMTgsMi44N2wwLjI5LDAuMzJsMC45OCwwLjAybDAuNDYsMi4yMmwwLjI4LDAuMjRsMy4wLDAuMDlsMC42MSwxLjI1bDAuMjgsMC4xN2wwLjkzLC0wLjAybDAuMjYsLTAuMTZsMS4wNiwtMi4wNmwzLjIxLC0yLjAzbDEuMywtMC41bDAuMTksMC4wOGwtMS43NSwxLjYybDAuMDUsMC40OGwxLjg1LDEuMTJsMC4yNywwLjAybDEuNjUsLTAuNjlsMi40LDEuMjdsLTIuNjksMS43OWwtMS43OSwtMC4yN2wtMC44OSwwLjA2bC0wLjIyLC0wLjUybDAuNDgsLTEuMjZsLTAuMzQsLTAuNGwtMy4zNSwwLjY5bC0wLjIyLDAuMThsLTAuNzgsMS44N2wtMS4wNywxLjQ3bC0xLjkzLC0wLjEzbC0wLjI5LDAuMTZsLTAuNjUsMS4yOWwwLjE2LDAuNDJsMS42OSwwLjY0bDAuNDgsMS45MWwtMS4yNSwyLjZsLTEuNjQsLTAuNTNsLTEuMTgsLTAuMDNaXCIsIFwibmFtZVwiOiBcIlV6YmVraXN0YW5cIn0sIFwiTU1cIjoge1wicGF0aFwiOiBcIk02NzAuMSwyMzMuMzlsLTEuNDYsMS4xMWwtMS42OCwwLjExbC0wLjI2LDAuMTlsLTEuMSwyLjdsLTAuOTUsMC40MmwtMC4xNCwwLjQybDEuMjEsMi4yN2wxLjYxLDEuOTJsMC45NCwxLjU1bC0wLjgyLDEuOTlsLTAuNzcsMC40MmwtMC4xMywwLjM5bDAuNjQsMS4zNWwxLjYyLDEuOTdsMC4yNiwxLjMybC0wLjA0LDEuMTVsMC4wMiwwLjEzbDAuOTIsMi4xOGwtMS4zLDIuMjNsLTAuNzksMS42OWwtMC4xLC0wLjc3bDAuNzQsLTEuODdsLTAuMDIsLTAuMjZsLTAuOCwtMS40MmwwLjIsLTIuNjhsLTAuMDYsLTAuMmwtMC45OCwtMS4yN2wtMC44LC0yLjk4bC0wLjQ1LC0zLjIybC0xLjExLC0yLjIybC0wLjQ1LC0wLjFsLTEuNjQsMS4yOGwtMi43NCwxLjc2bC0xLjI2LC0wLjJsLTEuMjcsLTAuNDlsMC43OSwtMi45M2wwLjAsLTAuMTRsLTAuNTIsLTIuNDJsLTEuOTMsLTIuOTdsMC4yNiwtMC44bC0wLjIyLC0wLjM5bC0xLjM3LC0wLjMxbC0xLjY1LC0xLjk4bC0wLjEyLC0xLjVsMC40MSwwLjE5bDAuNDIsLTAuMjZsMC4wNSwtMS43bDEuMDgsLTAuNTRsMC4xNiwtMC4zNGwtMC4yNCwtMS4wbDAuNSwtMC43OWwwLjA1LC0wLjE1bDAuMDgsLTIuMzVsMS41OCwwLjQ5bDAuMzYsLTAuMTVsMS4xMiwtMi4xOWwwLjE1LC0xLjM0bDEuMzUsLTIuMThsMC4wNCwtMC4xN2wtMC4wNywtMS4zNWwyLjk3LC0xLjcxbDEuNjcsMC40NWwwLjM4LC0wLjMzbC0wLjE4LC0xLjQ2bDAuNywtMC40bDAuMTUsLTAuMzJsLTAuMTMsLTAuNzJsMC45NCwtMC4xM2wwLjc0LDEuNDFsMC4xMSwwLjEybDAuOTUsMC41NmwwLjA3LDEuODlsLTAuMDksMi4wOGwtMi4yOCwyLjE1bC0wLjA5LDAuMTlsLTAuMywzLjE1bDAuMzUsMC4zMmwyLjM3LC0wLjM5bDAuNTMsMi4xN2wwLjIsMC4yMWwxLjMsMC40MmwtMC42MywxLjlsMC4xNCwwLjM2bDEuODYsMC45OWwxLjEsMC40OWwwLjI0LDAuMGwxLjQ1LC0wLjZsMC4wNCwwLjUxbC0yLjAxLDEuNmwtMC41NiwwLjk2bC0xLjM0LDAuNTZaXCIsIFwibmFtZVwiOiBcIk15YW5tYXJcIn0sIFwiTUxcIjoge1wicGF0aFwiOiBcIk0zOTAuNzksMjQ4LjJsMC42NywtMC4zN2wwLjE0LC0wLjE4bDAuMzYsLTEuMzFsMC41MSwtMC4wNGwxLjY4LDAuNjlsMC4yMSwwLjBsMS4zNCwtMC40OGwwLjg5LDAuMTZsMC4zLC0wLjEzbDAuMjksLTAuNDRsOS44OSwtMC4wNGwwLjI5LC0wLjIxbDAuNTYsLTEuOGwtMC4xMSwtMC4zM2wtMC4zMywtMC4yNGwtMi4zNywtMjIuMWwzLjQxLC0wLjA0bDguMzcsNS43M2w4LjM4LDUuNjhsMC41NiwxLjE1bDAuMTQsMC4xNGwxLjU2LDAuNzVsMC45OSwwLjM2bDAuMDMsMS40NWwwLjMzLDAuMjlsMi40NSwtMC4yMmwwLjAxLDUuNTJsLTEuMywxLjY0bC0wLjA2LDAuMTVsLTAuMTgsMS4zN2wtMS45OSwwLjM2bC0zLjQsMC4yMmwtMC4xOSwwLjA5bC0wLjg1LDAuODNsLTEuNDgsMC4wOWwtMS40OSwwLjAxbC0wLjU0LC0wLjQzbC0wLjI2LC0wLjA1bC0xLjM4LDAuMzZsLTIuMzksMS4wOGwtMC4xMywwLjEybC0wLjQ0LDAuNzNsLTEuODgsMS4xMWwtMC4xMSwwLjEybC0wLjMsMC41N2wtMC44NiwwLjQybC0xLjEsLTAuMzFsLTAuMjgsMC4wN2wtMC42OSwwLjYybC0wLjA5LDAuMTZsLTAuMzUsMS42NmwtMS45MywyLjA0bC0wLjA4LDAuMjNsMC4wNSwwLjc2bC0wLjYzLDAuOTlsLTAuMDQsMC4xOWwwLjE0LDEuMjNsLTAuODEsMC4yOWwtMC4zMiwwLjE3bC0wLjI3LC0wLjc1bC0wLjM5LC0wLjE4bC0wLjY1LDAuMjZsLTAuMzYsLTAuMDRsLTAuMjksMC4xNGwtMC4zNywwLjZsLTEuNjksLTAuMDJsLTAuNjMsLTAuMzRsLTAuMzIsMC4wMmwtMC4xMiwwLjA5bC0wLjQ3LC0wLjQ1bDAuMSwtMC42bC0wLjA5LC0wLjI3bC0wLjMxLC0wLjNsLTAuMzMsLTAuMDVsLTAuMDUsMC4wMmwwLjAyLC0wLjIxbDAuNDYsLTAuNTlsLTAuMDIsLTAuMzlsLTAuOTksLTEuMDJsLTAuMzQsLTAuNzRsLTAuNTYsLTAuNTZsLTAuMTcsLTAuMDlsLTAuNSwtMC4wN2wtMC4xOSwwLjA0bC0wLjU4LDAuMzVsLTAuNzksMC4zM2wtMC42NSwwLjUxbC0wLjg1LC0wLjE2bC0wLjYzLC0wLjU5bC0wLjE0LC0wLjA3bC0wLjQxLC0wLjA4bC0wLjIsMC4wM2wtMC41OSwwLjMxbC0wLjA3LDAuMGwtMC4xLC0wLjYzbDAuMTEsLTAuODVsLTAuMjEsLTAuOThsLTAuMTEsLTAuMTdsLTAuODYsLTAuNjZsLTAuNDUsLTEuMzRsLTAuMSwtMS4zNlpcIiwgXCJuYW1lXCI6IFwiTWFsaVwifSwgXCJNTlwiOiB7XCJwYXRoXCI6IFwiTTY0MS4wNiwxNTAuNTlsMi40MSwtMC41M2w0Ljc2LC0yLjhsMy42NywtMS40OWwyLjA2LDAuOTZsMC4xMiwwLjAzbDIuNSwwLjA1bDEuNTksMS40NWwwLjE5LDAuMDhsMi40NywwLjEybDMuNTksMC44MWwwLjI3LC0wLjA3bDIuNDMsLTIuMjhsMC4wNiwtMC4zNmwtMC45MywtMS43N2wyLjMzLC0zLjFsMi42NiwxLjNsMi4yNiwwLjM5bDIuNzUsMC44bDAuNDQsMi4zbDAuMTksMC4yMmwzLjU2LDEuMzhsMC4xOCwwLjAxbDIuMzUsLTAuNmwzLjEsLTAuNDJsMi40LDAuNDFsMi4zNywxLjUybDEuNDksMS42M2wwLjIzLDAuMWwyLjI5LC0wLjAzbDMuMTMsMC41MmwwLjE1LC0wLjAxbDIuMjgsLTAuNzlsMy4yNywtMC41M2wwLjExLC0wLjA0bDMuNTYsLTIuMjNsMS4zMSwwLjMxbDEuMjYsMS4wNWwwLjIyLDAuMDdsMi40NSwtMC4yMmwtMC45OCwxLjk2bC0xLjc3LDMuMjFsLTAuMDEsMC4yOGwwLjY0LDEuMzFsMC4zNSwwLjE2bDEuMzUsLTAuMzhsMi40LDAuNDhsMC4yMiwtMC4wNGwxLjc4LC0xLjA5bDEuODIsMC45MmwyLjExLDIuMDdsLTAuMTcsMC42OGwtMS43OSwtMC4zMWwtMy43NCwwLjQ1bC0xLjg1LDAuOTZsLTEuNzgsMi4wMWwtMy43NCwxLjE4bC0yLjQ2LDEuNjFsLTIuNDUsLTAuNmwtMS40MiwtMC4yOGwtMC4zMSwwLjEzbC0xLjMxLDEuOTlsMC4wLDAuMzNsMC43OCwxLjE1bDAuMywwLjc0bC0xLjU4LDAuOTNsLTEuNzUsMS41OWwtMi44MywxLjAzbC0zLjc3LDAuMTJsLTQuMDUsMS4wNWwtMi44MSwxLjU0bC0wLjk1LC0wLjhsLTAuMTksLTAuMDdsLTIuOTYsMC4wbC0zLjY0LC0xLjhsLTIuNTUsLTAuNDhsLTMuMzgsMC40MWwtNS4xMywtMC42N2wtMi42NiwwLjA2bC0xLjM1LC0xLjY1bC0xLjEyLC0yLjc4bC0wLjIxLC0wLjE4bC0xLjUsLTAuMzNsLTIuOTgsLTEuODlsLTAuMTIsLTAuMDRsLTMuMzcsLTAuNDNsLTIuODQsLTAuNTFsLTAuNzUsLTEuMTNsMC45MywtMy41NGwtMC4wNCwtMC4yNGwtMS43MywtMi41NWwtMC4xNSwtMC4xMmwtMy41MiwtMS4xOGwtMS45OSwtMS42MWwtMC41NCwtMS44NVpcIiwgXCJuYW1lXCI6IFwiTW9uZ29saWFcIn0sIFwiTUtcIjoge1wicGF0aFwiOiBcIk00NzIuNzMsMTczLjg3bDAuMDgsMC4wMWwwLjMyLC0wLjI1bDAuMDgsLTAuNDRsMS4yOSwtMC40MWwxLjM3LC0wLjI4bDEuMDMsLTAuMDRsMS4wNiwwLjgybDAuMTQsMS41OWwtMC4yMiwwLjA0bC0wLjE3LDAuMTFsLTAuMzIsMC40bC0xLjIsLTAuMDVsLTAuMTgsMC4wNWwtMC45LDAuNjFsLTEuNDUsMC4yM2wtMC44NSwtMC41OWwtMC4zLC0xLjA5bDAuMjIsLTAuNzFaXCIsIFwibmFtZVwiOiBcIk1hY2Vkb25pYVwifSwgXCJNV1wiOiB7XCJwYXRoXCI6IFwiTTUwNy4xOCwzMTMuODRsLTAuNjcsMS44NWwtMC4wMSwwLjE2bDAuNywzLjMxbDAuMzEsMC4yNGwwLjc1LC0wLjAzbDAuNzgsMC43MWwwLjk5LDEuNzVsMC4yLDMuMDNsLTAuOTEsMC40NWwtMC4xNCwwLjE1bC0wLjU5LDEuMzhsLTEuMjQsLTEuMjFsLTAuMTcsLTEuNjJsMC40OSwtMS4xMmwwLjAyLC0wLjE2bC0wLjE1LC0xLjAzbC0wLjEzLC0wLjIxbC0wLjk5LC0wLjY1bC0wLjI2LC0wLjAzbC0wLjUzLDAuMThsLTEuMzEsLTEuMTJsLTEuMTUsLTAuNTlsMC42NiwtMi4wNmwwLjc1LC0wLjg0bDAuMDcsLTAuMjdsLTAuNDcsLTIuMDRsMC40OCwtMS45NGwwLjQsLTAuNjVsMC4wMywtMC4yNGwtMC42NCwtMi4xNWwtMC4wOCwtMC4xM2wtMC40NCwtMC40MmwxLjM0LDAuMjZsMS4yNSwxLjczbDAuNjcsMy4zWlwiLCBcIm5hbWVcIjogXCJNYWxhd2lcIn0sIFwiTVJcIjoge1wicGF0aFwiOiBcIk0zOTAuNTQsMjQ3LjY2bC0xLjQ4LC0xLjU4bC0xLjUxLC0xLjg4bC0wLjEyLC0wLjA5bC0xLjY0LC0wLjY3bC0xLjE3LC0wLjc0bC0wLjE3LC0wLjA1bC0xLjQsMC4wM2wtMC4xMiwwLjAzbC0xLjE0LDAuNTJsLTEuMTUsLTAuMjFsLTAuMjYsMC4wOGwtMC40NCwwLjQzbC0wLjExLC0wLjcybDAuNjgsLTEuMjlsMC4zMSwtMi40M2wtMC4yOCwtMi42M2wtMC4yOSwtMS4yN2wwLjI0LC0xLjI0bC0wLjAzLC0wLjJsLTAuNjUsLTEuMjRsLTEuMTksLTEuMDVsMC4zMiwtMC41MWw5LjY0LDAuMDJsMC4zLC0wLjM0bC0wLjQ2LC0zLjcxbDAuNTEsLTEuMTJsMi4xNywtMC4yMmwwLjI3LC0wLjNsLTAuMDgsLTYuNWw3LjkxLDAuMTNsMC4zMSwtMC4zbDAuMDEsLTMuNWw4LjE3LDUuNjNsLTIuODksMC4wNGwtMC4yOSwwLjMzbDIuNDIsMjIuNTZsMC4xMiwwLjIxbDAuMjYsMC4xOWwtMC40MywxLjM4bC05LjgzLDAuMDRsLTAuMjUsMC4xM2wtMC4yNywwLjQxbC0wLjc3LC0wLjE0bC0wLjE1LDAuMDFsLTEuMywwLjQ3bC0xLjY0LC0wLjY3bC0wLjE0LC0wLjAybC0wLjc5LDAuMDZsLTAuMjcsMC4yMmwtMC4zOSwxLjM5bC0wLjUzLDAuMjlaXCIsIFwibmFtZVwiOiBcIk1hdXJpdGFuaWFcIn0sIFwiVUdcIjoge1wicGF0aFwiOiBcIk01MDAuNzQsMjg3LjE3bC0yLjg0LC0wLjAybC0wLjkyLDAuMzJsLTEuMzcsMC43MWwtMC4yOSwtMC4xMmwwLjAyLC0xLjZsMC41NCwtMC44OWwwLjA0LC0wLjEzbDAuMTQsLTEuOTZsMC40OSwtMS4wOWwwLjkxLC0xLjI0bDAuOTcsLTAuNjhsMC44LC0wLjg5bC0wLjEzLC0wLjQ5bC0wLjc5LC0wLjI3bDAuMTMsLTIuNTVsMC43OCwtMC41MmwxLjQ1LDAuNTFsMC4xOCwwLjAxbDEuOTcsLTAuNTdsMS43MiwwLjAxbDAuMTgsLTAuMDZsMS4yOSwtMC45N2wwLjk4LDEuNDRsMC4yOSwxLjI0bDEuMDUsMi43NWwtMC44NCwxLjY4bC0xLjk0LDIuNjZsLTAuMDYsMC4xOGwwLjAyLDIuMzZsLTQuOCwwLjE4WlwiLCBcIm5hbWVcIjogXCJVZ2FuZGFcIn0sIFwiTVlcIjoge1wicGF0aFwiOiBcIk03MTcuNiwyNzMuNTJsLTEuNTEsMC43bC0yLjEzLC0wLjQxbC0yLjg4LC0wLjBsLTAuMjksMC4yMWwtMC44NCwyLjc3bC0wLjksMC44MmwtMC4wOCwwLjEybC0xLjIzLDMuMzRsLTEuODEsMC40N2wtMi4yOSwtMC42OGwtMC4xNCwtMC4wMWwtMS4yLDAuMjJsLTAuMTQsMC4wN2wtMS4zNiwxLjE4bC0xLjQ3LC0wLjE3bC0wLjEyLDAuMDFsLTEuNDYsMC40NmwtMS41MSwtMS4yNWwtMC4yNCwtMC45N2wxLjI2LDAuNTlsMC4yLDAuMDJsMS45MywtMC40N2wwLjIyLC0wLjIybDAuNDcsLTEuOThsMC45LC0wLjRsMi45NywtMC41NGwwLjE3LC0wLjA5bDEuOCwtMS45OGwxLjAyLC0xLjMybDAuOSwxLjAzbDAuNDgsLTAuMDRsMC40MywtMC43bDEuMDIsMC4wN2wwLjMyLC0wLjI3bDAuMjUsLTIuNzJsMS44NCwtMS42N2wxLjIzLC0xLjg5bDAuNzMsLTAuMDFsMS4xMiwxLjExbDAuMSwwLjk5bDAuMTgsMC4yNGwxLjY2LDAuNzFsMS44NSwwLjY3bC0wLjA5LDAuNTFsLTEuNDUsMC4xMWwtMC4yNiwwLjRsMC4zNSwwLjk3Wk02NzMuNzgsMjY5LjUzbDAuMTcsMS4xNGwwLjM1LDAuMjVsMS42NSwtMC4zbDAuMTgsLTAuMTFsMC42OCwtMC44NmwwLjMxLDAuMTNsMS40MSwxLjQ1bDAuOTksMS41OWwwLjEzLDEuNTdsLTAuMjYsMS4wOWwwLjAsMC4xNWwwLjI0LDAuODRsMC4xOCwxLjQ2bDAuMTEsMC4ybDAuODIsMC42NGwwLjkyLDIuMDhsLTAuMDMsMC41MmwtMS40LDAuMTNsLTIuMjksLTEuNzlsLTIuODYsLTEuOTJsLTAuMjcsLTEuMTZsLTAuMDcsLTAuMTNsLTEuMzksLTEuNjFsLTAuMzMsLTEuOTlsLTAuMDUsLTAuMTJsLTAuODQsLTEuMjdsMC4yNiwtMS43MmwtMC4wMywtMC4xOGwtMC40NSwtMC44N2wwLjEzLC0wLjEzbDEuNzEsMC45MlpcIiwgXCJuYW1lXCI6IFwiTWFsYXlzaWFcIn0sIFwiTVhcIjoge1wicGF0aFwiOiBcIk0xMzMuNDEsMjEzLjgzbDAuNjEsMC4wOWwwLjI3LC0wLjA5bDAuOTMsLTEuMDFsMC4wOCwtMC4xOGwwLjA5LC0xLjIybC0wLjA5LC0wLjIzbC0xLjkzLC0xLjk0bC0xLjQ2LC0wLjc3bC0yLjk2LC01LjYybC0wLjg2LC0yLjFsMi40NCwtMC4xOGwyLjY4LC0wLjI1bC0wLjAzLDAuMDhsMC4xNywwLjRsMy43OSwxLjM1bDUuODEsMS45N2w2Ljk2LC0wLjAybDAuMywtMC4zbDAuMCwtMC44NGwzLjkxLDAuMGwwLjg3LDAuOTNsMS4yNywwLjg3bDEuNDQsMS4xN2wwLjc5LDEuMzdsMC42MiwxLjQ5bDAuMTIsMC4xNGwxLjM1LDAuODVsMi4wOCwwLjgybDAuMzUsLTAuMWwxLjQ5LC0yLjA0bDEuODEsLTAuMDVsMS42MywxLjAxbDEuMjEsMS44bDAuODYsMS41OGwxLjQ3LDEuNTVsMC41MywxLjgybDAuNzMsMS4zMmwwLjE0LDAuMTNsMS45OCwwLjg0bDEuNzgsMC41OWwwLjYxLC0wLjAzbC0wLjc4LDEuODlsLTAuNDUsMS45NmwtMC4xOSwzLjU4bC0wLjI0LDEuMjdsMC4wMSwwLjE0bDAuNDMsMS40M2wwLjc4LDEuMzFsMC40OSwxLjk4bDAuMDYsMC4xMmwxLjYzLDEuOWwwLjYxLDEuNTFsMC45OCwxLjI4bDAuMTYsMC4xMWwyLjU4LDAuNjdsMC45OCwxLjAybDAuMzEsMC4wOGwyLjE3LC0wLjcxbDEuOTEsLTAuMjZsMS44NywtMC40N2wxLjY3LC0wLjQ5bDEuNTksLTEuMDZsMC4xMSwtMC4xNGwwLjYsLTEuNTJsMC4yMiwtMi4yMWwwLjM1LC0wLjYybDEuNTgsLTAuNjRsMi41OSwtMC41OWwyLjE4LDAuMDlsMS40MywtMC4ybDAuMzksMC4zNmwtMC4wNywxLjAybC0xLjI4LDEuNDhsLTAuNjUsMS42OGwwLjA3LDAuMzJsMC4zMywwLjMybC0wLjc5LDIuNDlsLTAuMjgsLTAuM2wtMC4yNCwtMC4wOWwtMS4wLDAuMDhsLTAuMjQsMC4xNWwtMC43NCwxLjI4bC0wLjE5LC0wLjEzbC0wLjI4LC0wLjAzbC0wLjMsMC4xMmwtMC4xOSwwLjI5bDAuMCwwLjA2bC00LjM0LC0wLjAybC0wLjMsMC4zbC0wLjAsMS4xNmwtMC44MywwLjBsLTAuMjgsMC4xOWwwLjA4LDAuMzNsMC45MywwLjg2bDAuOSwwLjU4bDAuMjQsMC40OGwwLjE2LDAuMTVsMC4yLDAuMDhsLTAuMDMsMC4zOGwtMi45NCwwLjAxbC0wLjI2LDAuMTVsLTEuMjEsMi4wOWwwLjAyLDAuMzNsMC4yNSwwLjMzbC0wLjIxLDAuNDRsLTAuMDQsMC4yMmwtMi40MiwtMi4zNWwtMS4zNiwtMC44N2wtMi4wNCwtMC42N2wtMC4xMywtMC4wMWwtMS40LDAuMTlsLTIuMDcsMC45OGwtMS4xNCwwLjIzbC0xLjcyLC0wLjY2bC0xLjg1LC0wLjQ4bC0yLjMxLC0xLjE2bC0xLjkyLC0wLjM4bC0yLjc5LC0xLjE4bC0yLjA0LC0xLjJsLTAuNiwtMC42NmwtMC4xOSwtMC4xbC0xLjM3LC0wLjE1bC0yLjQ1LC0wLjc4bC0xLjA3LC0xLjE4bC0yLjYzLC0xLjQ0bC0xLjIsLTEuNTZsLTAuNDQsLTAuOTNsMC41LC0wLjE1bDAuMiwtMC4zOWwtMC4yLC0wLjU4bDAuNDYsLTAuNTVsMC4wNywtMC4xOWwwLjAxLC0wLjkxbC0wLjA2LC0wLjE4bC0wLjgxLC0xLjEzbC0wLjI1LC0xLjA4bC0wLjg2LC0xLjM2bC0yLjIxLC0yLjYzbC0yLjUzLC0yLjA5bC0xLjIsLTEuNjNsLTAuMTEsLTAuMDlsLTIuMDgsLTEuMDZsLTAuMzQsLTAuNDhsMC4zNSwtMS41M2wtMC4xNiwtMC4zNGwtMS4yNCwtMC42MWwtMS4zOSwtMS4yM2wtMC42LC0xLjgxbC0wLjI0LC0wLjJsLTEuMjUsLTAuMmwtMS4zOCwtMS4zNWwtMS4xMSwtMS4yNWwtMC4xLC0wLjc2bC0wLjA1LC0wLjEzbC0xLjMzLC0yLjA0bC0wLjg1LC0yLjAybDAuMDQsLTAuOTlsLTAuMTQsLTAuMjdsLTEuODEsLTEuMWwtMC4yLC0wLjA0bC0wLjc0LDAuMTFsLTEuMzQsLTAuNzJsLTAuNDIsMC4xNmwtMC40LDEuMTJsLTAuMCwwLjE5bDAuNDEsMS4zbDAuMjQsMi4wNGwwLjA2LDAuMTVsMC44OCwxLjE2bDEuODQsMS44NmwwLjQsMC42MWwwLjEyLDAuMWwwLjI3LDAuMTRsMC4yOSwwLjgybDAuMzEsMC4ybDAuMiwtMC4wMmwwLjQzLDEuNTFsMC4wOSwwLjE0bDAuNzIsMC42NWwwLjUxLDAuOTFsMS41OCwxLjRsMC44LDIuNDJsMC43NywxLjIzbDAuNjYsMS4xOWwwLjEzLDEuMzRsMC4yOCwwLjI3bDEuMDgsMC4wOGwwLjkyLDEuMWwwLjgzLDEuMDhsLTAuMDMsMC4yNGwtMC44OCwwLjgxbC0wLjEzLC0wLjBsLTAuNTksLTEuNDJsLTAuMDcsLTAuMTFsLTEuNjcsLTEuNTNsLTEuODEsLTEuMjhsLTEuMTUsLTAuNjFsMC4wNywtMS44NWwtMC4zOCwtMS40NWwtMC4xMiwtMC4xN2wtMi45MSwtMi4wM2wtMC4zOSwwLjA0bC0wLjExLDAuMTFsLTAuNDIsLTAuNDZsLTAuMTEsLTAuMDhsLTEuNDksLTAuNjNsLTEuMDksLTEuMTZaXCIsIFwibmFtZVwiOiBcIk1leGljb1wifSwgXCJWVVwiOiB7XCJwYXRoXCI6IFwiTTgzOS45MiwzMjUuNjZsMC43OCwwLjczbC0wLjE4LDAuMDdsLTAuNiwtMC44Wk04MzkuMTMsMzIyLjc0bDAuMjcsMS4zNmwtMC4xMywtMC4wNmwtMC4yMSwtMC4wMmwtMC4yOSwwLjA4bC0wLjIyLC0wLjQzbC0wLjAzLC0xLjMybDAuNjEsMC40WlwiLCBcIm5hbWVcIjogXCJWYW51YXR1XCJ9LCBcIkZSXCI6IHtcInBhdGhcIjogXCJNNDQ0LjU4LDE3Mi42M2wtMC42OCwxLjkybC0wLjcyLC0wLjM4bC0wLjUxLC0xLjc5bDAuNDMsLTAuOTVsMS4xNSwtMC44M2wwLjMzLDIuMDRaTTQyOS43MSwxNDcuMDNsMS43NywxLjU3bDAuMjYsMC4wN2wxLjE2LC0wLjIzbDIuMTIsMS40NGwwLjU2LDAuMjhsMC4xNiwwLjAzbDAuNjEsLTAuMDZsMS4wOSwwLjc4bDAuMTMsMC4wNWwzLjE4LDAuNTNsLTEuMDksMS45NGwtMC4zLDIuMTZsLTAuNDgsMC4zOGwtMS4wLC0wLjI2bC0wLjM3LDAuMzJsMC4wNywwLjY2bC0xLjczLDEuNjhsLTAuMDksMC4yMWwtMC4wNCwxLjQybDAuNDEsMC4yOWwwLjk2LC0wLjRsMC42NywxLjA3bC0wLjA5LDAuNzhsMC4wNCwwLjE5bDAuNjEsMC45N2wtMC43MSwwLjc4bC0wLjA3LDAuMjhsMC42NSwyLjM5bDAuMjEsMC4yMWwxLjA5LDAuMzFsLTAuMiwwLjk1bC0yLjA4LDEuNThsLTQuODEsLTAuOGwtMC4xMywwLjAxbC0zLjY1LDAuOTlsLTAuMjIsMC4yNGwtMC4yNSwxLjZsLTIuNTksMC4zNWwtMi43NCwtMS4zM2wtMC4zMSwwLjAzbC0wLjc5LDAuNTdsLTQuMzgsLTEuMzFsLTAuNzksLTAuOTRsMS4xNiwtMS42NGwwLjA1LC0wLjE1bDAuNDgsLTYuMTdsLTAuMDYsLTAuMjFsLTIuNTgsLTMuM2wtMS44OSwtMS42NWwtMC4xMSwtMC4wNmwtMy42NCwtMS4xN2wtMC4yLC0xLjg4bDIuOTIsLTAuNjNsNC4xNCwwLjgybDAuMzUsLTAuMzZsLTAuNjUsLTMuMGwxLjc3LDEuMDVsMC4yNywwLjAybDUuODMsLTIuNTRsMC4xNywtMC4xOWwwLjcxLC0yLjU0bDEuNzUsLTAuNTNsMC4yNywwLjg4bDAuMjcsMC4yMWwxLjA0LDAuMDVsMS4wOCwxLjIzWk0yODkuMSwyNzguNDVsLTAuODUsMC44NGwtMC44OCwwLjEzbC0wLjI1LC0wLjUxbC0wLjIxLC0wLjE2bC0wLjU2LC0wLjFsLTAuMjUsMC4wN2wtMC42MywwLjU1bC0wLjYyLC0wLjI5bDAuNSwtMC44OGwwLjIxLC0xLjExbDAuNDIsLTEuMDVsLTAuMDMsLTAuMjhsLTAuOTMsLTEuNDJsLTAuMTgsLTEuNTRsMS4xMywtMS44N2wyLjQyLDAuNzhsMi41NSwyLjA0bDAuMzMsMC44MWwtMS40LDIuMTZsLTAuNzcsMS44NFpcIiwgXCJuYW1lXCI6IFwiRnJhbmNlXCJ9LCBcIkZJXCI6IHtcInBhdGhcIjogXCJNNDkyLjI2LDc2LjQybC0wLjM4LDMuMTJsMC4xMiwwLjI4bDMuNiwyLjY5bC0yLjE0LDIuOTZsLTAuMDEsMC4zM2wyLjgzLDQuNjFsLTEuNjEsMy4zNmwwLjAzLDAuMzFsMi4xNSwyLjg3bC0wLjk2LDIuNDRsMC4xLDAuMzVsMy41MSwyLjU1bC0wLjgxLDEuNzJsLTIuMjgsMi4xOWwtNS4yOCw0Ljc5bC00LjUxLDAuMzFsLTQuMzksMS4zN2wtMy44NywwLjc1bC0xLjM0LC0xLjg5bC0wLjExLC0wLjA5bC0yLjIzLC0xLjE0bDAuNTMsLTMuNTRsLTAuMDEsLTAuMTRsLTEuMTcsLTMuMzdsMS4xMiwtMi4xM2wyLjIzLC0yLjQ0bDUuNjksLTQuMzNsMS42NSwtMC44NGwwLjE2LC0wLjMxbC0wLjI2LC0xLjczbC0wLjE1LC0wLjIybC0zLjQsLTEuOTFsLTAuNzcsLTEuNDdsLTAuMDcsLTYuNDVsLTAuMTIsLTAuMjRsLTMuOTEsLTIuOTRsLTMuMCwtMS45MmwwLjk3LC0wLjc2bDIuNiwyLjE3bDAuMjEsMC4wN2wzLjIsLTAuMjFsMi42MywxLjAzbDAuMywtMC4wNWwyLjM5LC0xLjk0bDAuMDksLTAuMTNsMS4xOCwtMy4xMmwzLjYzLC0xLjQybDIuODcsMS41OWwtMC45OCwyLjg3WlwiLCBcIm5hbWVcIjogXCJGaW5sYW5kXCJ9LCBcIkZKXCI6IHtcInBhdGhcIjogXCJNODY5Ljk4LDMyNy4wN2wtMS4zMSwwLjQ0bC0wLjE0LC0wLjQxbDAuOTYsLTAuNDFsMC44NSwtMC4xN2wxLjQzLC0wLjc4bC0wLjE2LDAuNjVsLTEuNjQsMC42N1pNODY3LjU4LDMyOS4xMmwwLjU0LDAuNDdsLTAuMzEsMS4wbC0xLjMyLDAuM2wtMS4xMywtMC4yNmwtMC4xNywtMC43OGwwLjcyLC0wLjY2bDAuOTgsMC4yN2wwLjI1LC0wLjA0bDAuNDMsLTAuMjlaXCIsIFwibmFtZVwiOiBcIkZpamlcIn0sIFwiRktcIjoge1wicGF0aFwiOiBcIk0yNjguMTUsNDI3Ljg5bDIuNiwtMS43M2wxLjk4LDAuNzdsMC4zMSwtMC4wNWwxLjMyLC0xLjE3bDEuNTgsMS4xOGwtMC41NCwwLjg0bC0zLjEsMC45MmwtMS4wLC0xLjA0bC0wLjM5LC0wLjA0bC0xLjksMS4zNWwtMC44NiwtMS4wNFpcIiwgXCJuYW1lXCI6IFwiRmFsa2xhbmQgSXNsYW5kc1wifSwgXCJOSVwiOiB7XCJwYXRoXCI6IFwiTTIwMi4xLDI1Mi42bDAuMjMsLTAuMGwwLjEyLC0wLjExbDAuNjgsLTAuMDlsMC4yMiwtMC4xNWwwLjIzLC0wLjQzbDAuMiwtMC4wMWwwLjI4LC0wLjMxbC0wLjA0LC0wLjk3bDAuMjksLTAuMDNsMC41LDAuMDJsMC4yNSwtMC4xMWwwLjM3LC0wLjQ2bDAuNTEsMC4zNWwwLjQsLTAuMDZsMC4yMywtMC4yOGwwLjQ1LC0wLjI5bDAuODcsLTAuN2wwLjExLC0wLjIxbDAuMDIsLTAuMjZsMC4yMywtMC4xMmwwLjI1LC0wLjQ4bDAuMjksMC4yN2wwLjE0LDAuMDdsMC41LDAuMTJsMC4yMiwtMC4wM2wwLjQ4LC0wLjI4bDAuNjYsLTAuMDJsMC44NywtMC4zM2wwLjM2LC0wLjMybDAuMjEsMC4wMWwtMC4xMSwwLjQ4bDAuMCwwLjE0bDAuMjIsMC44bC0wLjU0LDAuODVsLTAuMjcsMS4wM2wtMC4wOSwxLjE4bDAuMTQsMC43MmwwLjA1LDAuOTVsLTAuMjQsMC4xNWwtMC4xMywwLjE5bC0wLjIzLDEuMDlsMC4wLDAuMTRsMC4xNCwwLjUzbC0wLjQyLDAuNTNsLTAuMDYsMC4yNGwwLjEyLDAuNjlsMC4wOCwwLjE1bDAuMTgsMC4xOWwtMC4yNiwwLjIzbC0wLjQ5LC0wLjExbC0wLjM1LC0wLjQ0bC0wLjE2LC0wLjFsLTAuNzksLTAuMjFsLTAuMjMsMC4wM2wtMC40NSwwLjI2bC0xLjUxLC0wLjYybC0wLjMxLDAuMDVsLTAuMTcsMC4xNWwtMS44MSwtMS42MmwtMC42LC0wLjlsLTEuMDQsLTAuNzlsLTAuNzcsLTAuNzFaXCIsIFwibmFtZVwiOiBcIk5pY2FyYWd1YVwifSwgXCJOTFwiOiB7XCJwYXRoXCI6IFwiTTQzNi4yMiwxMzYuNjVsMS44MiwwLjA4bDAuMzYsMC44OWwtMC42LDIuOTZsLTAuNTMsMS4wNmwtMS4zMiwwLjBsLTAuMywwLjM0bDAuMzUsMi44OWwtMC44MywtMC40N2wtMS41NiwtMS40M2wtMC4yOSwtMC4wN2wtMi4yNiwwLjY3bC0xLjAyLC0wLjE1bDAuNjgsLTAuNDhsMC4xLC0wLjEybDIuMTQsLTQuODRsMy4yNSwtMS4zNVpcIiwgXCJuYW1lXCI6IFwiTmV0aGVybGFuZHNcIn0sIFwiTk9cIjoge1wicGF0aFwiOiBcIk00OTEuNDUsNjcuMzFsNy4wNiwzLjBsLTIuNTIsMC45NGwtMC4xMSwwLjQ5bDIuNDMsMi40OWwtMy44MiwxLjU5bC0xLjQ4LDAuM2wwLjg5LC0yLjYxbC0wLjE0LC0wLjM2bC0zLjIxLC0xLjc4bC0wLjI1LC0wLjAybC0zLjg5LDEuNTJsLTAuMTcsMC4xN2wtMS4yLDMuMTdsLTIuMTksMS43OGwtMi41MywtMC45OWwtMC4xMywtMC4wMmwtMy4xNSwwLjIxbC0yLjY5LC0yLjI1bC0wLjM4LC0wLjAxbC0xLjQzLDEuMTFsLTEuNDcsMC4xN2wtMC4yNiwwLjI2bC0wLjMzLDIuNTdsLTQuNDIsLTAuNjVsLTAuMzMsMC4yMmwtMC42LDIuMTlsLTIuMTcsLTAuMDFsLTAuMjcsMC4xNmwtNC4xNSw3LjY4bC0zLjg4LDUuNzZsLTAuMCwwLjMzbDAuODEsMS4yM2wtMC43LDEuMjdsLTIuMywtMC4wNmwtMC4yOCwwLjE4bC0xLjYzLDMuNzJsLTAuMDIsMC4xM2wwLjE1LDUuMTdsMC4wNywwLjE4bDEuNTEsMS44NGwtMC43OSw0LjI0bC0yLjA0LDIuNWwtMC45MiwxLjc1bC0xLjM5LC0xLjg4bC0wLjQ0LC0wLjA1bC00Ljg5LDQuMjFsLTMuMTYsMC44MWwtMy4yNCwtMS43NGwtMC44NiwtMy44MmwtMC43OCwtOC42bDIuMTgsLTIuMzZsNi41NiwtMy4yOGw1LjAsLTQuMTZsNC42MywtNS43NGw1Ljk5LC04LjA5bDQuMTcsLTMuMjNsNi44NCwtNS40OWw1LjM5LC0xLjkybDQuMDYsMC4yNGwwLjIzLC0wLjA5bDMuNzIsLTMuNjdsNC41MSwwLjE5bDQuNCwtMC44OVpNNDg0LjU4LDE5Ljk1bDQuNDIsMS44MmwtMy4yNSwyLjY4bC03LjE0LDAuNjVsLTcuMTYsLTAuOTFsLTAuMzksLTEuMzdsLTAuMjgsLTAuMjJsLTMuNDgsLTAuMWwtMi4yNSwtMi4xNWw3LjA5LC0xLjQ4bDMuNTUsMS4zNmwwLjI4LC0wLjAzbDIuNDIsLTEuNjZsNi4xOCwxLjQxWk00ODEuOTksMzMuOTJsLTQuNzMsMS44NWwtMy43NiwtMS4wNmwxLjI3LC0xLjAybDAuMDQsLTAuNDNsLTEuMTgsLTEuMzVsNC40NiwtMC45NGwwLjg5LDEuODNsMC4xNywwLjE1bDIuODMsMC45NlpNNDY2LjUsMjMuOTVsNy42NCwzLjg3bC01LjYzLDEuOTRsLTAuMTksMC4xOWwtMS4zNSwzLjg4bC0yLjA4LDAuOTZsLTAuMTYsMC4xOWwtMS4xNCw0LjE4bC0yLjcxLDAuMThsLTQuOTQsLTIuOTVsMS45NSwtMS42M2wtMC4wOCwtMC41MWwtMy43LC0xLjU0bC00Ljc5LC00LjU0bC0xLjc4LC00LjAxbDYuMjksLTEuODhsMS4yNSwxLjgxbDAuMjUsMC4xM2wzLjU3LC0wLjA4bDAuMjYsLTAuMTdsMC44NywtMS43OWwzLjQxLC0wLjE4bDMuMDgsMS45NFpcIiwgXCJuYW1lXCI6IFwiTm9yd2F5XCJ9LCBcIk5BXCI6IHtcInBhdGhcIjogXCJNNDYxLjg4LDM1Ny45OGwtMS42MSwtMS43N2wtMC45NCwtMS45bC0wLjU0LC0yLjU4bC0wLjYyLC0xLjk1bC0wLjgzLC00LjA1bC0wLjA2LC0zLjEzbC0wLjMzLC0xLjVsLTAuMDcsLTAuMTRsLTAuOTUsLTEuMDZsLTEuMjcsLTIuMTJsLTEuMywtMy4xbC0wLjU5LC0xLjcxbC0xLjk4LC0yLjQ2bC0wLjEzLC0xLjY3bDAuOTksLTAuNGwxLjQ0LC0wLjQybDEuNDgsMC4wN2wxLjQyLDEuMTFsMC4zMSwwLjAzbDAuMzIsLTAuMTVsOS45OSwtMC4xMWwxLjY2LDEuMThsMC4xNiwwLjA2bDYuMDYsMC4zN2w0LjY5LC0xLjA2bDIuMDEsLTAuNTdsMS41LDAuMTRsMC42MywwLjM3bC0xLjAsMC40MWwtMC43LDAuMDFsLTAuMTYsMC4wNWwtMS4zOCwwLjg4bC0wLjc5LC0wLjg4bC0wLjI5LC0wLjA5bC0zLjgzLDAuOWwtMS44NCwwLjA4bC0wLjI5LDAuM2wtMC4wNyw4Ljk5bC0yLjE4LDAuMDhsLTAuMjksMC4zbC0wLjAsMTcuNDdsLTIuMDQsMS4yN2wtMS4yMSwwLjE4bC0xLjUxLC0wLjQ5bC0wLjk5LC0wLjE4bC0wLjM2LC0xLjBsLTAuMSwtMC4xNGwtMC45OSwtMC43NGwtMC40LDAuMDRsLTAuOTgsMS4wOVpcIiwgXCJuYW1lXCI6IFwiTmFtaWJpYVwifSwgXCJOQ1wiOiB7XCJwYXRoXCI6IFwiTTgzNS44NywzMzguNjhsMi4wNiwxLjYzbDEuMDEsMC45NGwtMC40OSwwLjMybC0xLjIxLC0wLjYybC0xLjc2LC0xLjE2bC0xLjU4LC0xLjM2bC0xLjYxLC0xLjc5bC0wLjE2LC0wLjQxbDAuNTQsMC4wMmwxLjMyLDAuODNsMS4wOCwwLjg3bDAuNzksMC43M1pcIiwgXCJuYW1lXCI6IFwiTmV3IENhbGVkb25pYVwifSwgXCJORVwiOiB7XCJwYXRoXCI6IFwiTTQyNi42NywyNTQuMTdsMC4wMywtMS4wNGwtMC4yNCwtMC4zbC0yLjY2LC0wLjUzbC0wLjA2LC0xLjBsLTAuMDcsLTAuMTdsLTEuMzcsLTEuNjJsLTAuMywtMS4wNGwwLjE1LC0wLjk0bDEuMzcsLTAuMDlsMC4xOSwtMC4wOWwwLjg1LC0wLjgzbDMuMzQsLTAuMjJsMi4yMiwtMC40MWwwLjI0LC0wLjI2bDAuMiwtMS41bDEuMzIsLTEuNjVsMC4wNywtMC4xOWwtMC4wMSwtNS43NGwzLjQsLTEuMTNsNy4yNCwtNS4xMmw4LjQ2LC00Ljk1bDMuNzYsMS4wOGwxLjM1LDEuMzlsMC4zNiwwLjA1bDEuMzksLTAuNzdsMC41NSwzLjY2bDAuMTIsMC4ybDAuODIsMC42bDAuMDMsMC42OWwwLjEsMC4yMWwwLjg3LDAuNzRsLTAuNDcsMC45OWwtMC45Niw1LjI2bC0wLjEzLDMuMjVsLTMuMDgsMi4zNGwtMC4xLDAuMTVsLTEuMDgsMy4zN2wwLjA4LDAuMzFsMC45NCwwLjg2bC0wLjAxLDEuNTFsMC4yOSwwLjNsMS4yNSwwLjA1bC0wLjE0LDAuNjZsLTAuNTEsMC4xMWwtMC4yNCwwLjI2bC0wLjA2LDAuNTdsLTAuMDQsMC4wbC0xLjU5LC0yLjYybC0wLjIxLC0wLjE0bC0wLjU5LC0wLjFsLTAuMjMsMC4wNWwtMS44MywxLjMzbC0xLjc5LC0wLjY4bC0xLjQyLC0wLjE3bC0wLjE3LDAuMDNsLTAuNjUsMC4zMmwtMS4zOSwtMC4wN2wtMC4xOSwwLjA2bC0xLjQsMS4wM2wtMS4xMiwwLjA1bC0yLjk3LC0xLjI5bC0wLjI2LDAuMDFsLTEuMTIsMC41OWwtMS4wOCwtMC4wNGwtMC44NSwtMC44OGwtMC4xMSwtMC4wN2wtMi41MSwtMC45NWwtMC4xNCwtMC4wMmwtMi42OSwwLjNsLTAuMTYsMC4wN2wtMC42NSwwLjU1bC0wLjEsMC4xNmwtMC4zNCwxLjQxbC0wLjY5LDAuOThsLTAuMDUsMC4xNWwtMC4xMywxLjcybC0xLjQ3LC0xLjEzbC0wLjE4LC0wLjA2bC0wLjksMC4wMWwtMC4yLDAuMDhsLTAuMzIsMC4yOFpcIiwgXCJuYW1lXCI6IFwiTmlnZXJcIn0sIFwiTkdcIjoge1wicGF0aFwiOiBcIk00NDIuMCwyNzIuN2wtMi40LDAuODNsLTAuODgsLTAuMTJsLTAuMTksMC4wNGwtMC44OSwwLjUybC0xLjc4LC0wLjA1bC0xLjIzLC0xLjQ0bC0wLjg4LC0xLjg3bC0xLjc3LC0xLjY2bC0wLjIxLC0wLjA4bC0zLjc4LDAuMDNsMC4xMywtMy43NWwtMC4wNiwtMS41OGwwLjQ0LC0xLjQ3bDAuNzQsLTAuNzVsMS4yMSwtMS41NmwwLjA0LC0wLjI5bC0wLjIyLC0wLjU2bDAuNDQsLTAuOWwwLjAxLC0wLjI0bC0wLjU0LC0xLjQ0bDAuMjYsLTIuOTdsMC43MiwtMS4wNmwwLjMzLC0xLjM3bDAuNTEsLTAuNDNsMi41MywtMC4yOGwyLjM4LDAuOWwwLjg5LDAuOTFsMC4yLDAuMDlsMS4yOCwwLjA0bDAuMTUsLTAuMDNsMS4wNiwtMC41NmwyLjksMS4yNmwwLjEzLDAuMDJsMS4yOCwtMC4wNmwwLjE2LC0wLjA2bDEuMzksLTEuMDJsMS4zNiwwLjA3bDAuMTUsLTAuMDNsMC42NCwtMC4zMmwxLjIyLDAuMTNsMS45LDAuNzNsMC4yOCwtMC4wNGwxLjg2LC0xLjM1bDAuMzMsMC4wNmwxLjYyLDIuNjdsMC4yOSwwLjE0bDAuMzIsLTAuMDRsMC43MywwLjc0bC0wLjE5LDAuMzdsLTAuMTIsMC43NGwtMi4wMywxLjg5bC0wLjA3LDAuMTFsLTAuNjYsMS42MmwtMC4zNSwxLjI4bC0wLjQ4LDAuNTFsLTAuMDcsMC4xMmwtMC40OCwxLjY3bC0xLjI2LDAuOThsLTAuMSwwLjE1bC0wLjM4LDEuMjRsLTAuNTgsMS4wN2wtMC4yLDAuOTFsLTEuNDMsMC43bC0xLjI2LC0wLjkzbC0wLjE5LC0wLjA2bC0wLjk1LDAuMDRsLTAuMiwwLjA5bC0xLjQxLDEuMzlsLTAuNjEsMC4wMmwtMC4yNiwwLjE3bC0xLjE5LDIuNDJsLTAuNjEsMS42N1pcIiwgXCJuYW1lXCI6IFwiTmlnZXJpYVwifSwgXCJOWlwiOiB7XCJwYXRoXCI6IFwiTTg1Ny45LDM3OS42MmwxLjg1LDMuMWwwLjMzLDAuMTRsMC4yMiwtMC4yOGwwLjA0LC0xLjQxbDAuNTcsMC40bDAuMzUsMi4wNmwwLjE3LDAuMjJsMi4wMiwwLjk0bDEuNzgsMC4yNmwwLjIyLC0wLjA2bDEuMzEsLTEuMDFsMC44NCwwLjIybC0wLjUzLDIuMjdsLTAuNjcsMS41bC0xLjcxLC0wLjA1bC0wLjI1LDAuMTJsLTAuNjcsMC44OWwtMC4wNSwwLjIzbDAuMjEsMS4xNWwtMC4zMSwwLjQ2bC0yLjE1LDMuNTdsLTEuNiwwLjk5bC0wLjI4LC0wLjUxbC0wLjE1LC0wLjEzbC0wLjcyLC0wLjNsMS4yNywtMi4xNWwwLjAxLC0wLjI5bC0wLjgyLC0xLjYzbC0wLjE1LC0wLjE0bC0yLjUsLTEuMDlsMC4wNSwtMC42OWwxLjY3LC0wLjk0bDAuMTUsLTAuMjFsMC40MiwtMi4yNGwtMC4xMSwtMS45NWwtMC4wMywtMC4xMmwtMC45NywtMS44NWwwLjA1LC0wLjQxbC0wLjA5LC0wLjI1bC0xLjE4LC0xLjE3bC0xLjk0LC0yLjQ5bC0wLjg2LC0xLjY0bDAuMzgsLTAuMDlsMS4yNCwxLjQzbDAuMTIsMC4wOGwxLjgxLDAuNjhsMC42NywyLjM5Wk04NTMuOTMsMzkzLjU1bDAuNTcsMS4yNGwwLjQ0LDAuMTJsMS41MSwtMS4wM2wwLjUyLDAuOTFsMC4wLDEuMDlsLTAuODgsMS4zMWwtMS42MiwyLjJsLTEuMjYsMS4ybC0wLjA1LDAuMzhsMC42NCwxLjAybC0xLjQsMC4wM2wtMC4xNCwwLjA0bC0yLjE0LDEuMTZsLTAuMTQsMC4xN2wtMC42NywyLjBsLTEuMzgsMy4wNmwtMy4wNywyLjE5bC0yLjEyLC0wLjA2bC0xLjU1LC0wLjk5bC0wLjE0LC0wLjA1bC0yLjUzLC0wLjJsLTAuMzEsLTAuODRsMS4yNSwtMi4xNWwzLjA3LC0yLjk3bDEuNjIsLTAuNTlsMS44MSwtMS4xN2wyLjE4LC0xLjYzbDEuNTUsLTEuNjVsMS4wOCwtMi4xOGwwLjksLTAuNzJsMC4xMSwtMC4xN2wwLjM1LC0xLjU2bDEuMzcsLTEuMDdsMC40LDAuOTFaXCIsIFwibmFtZVwiOiBcIk5ldyBaZWFsYW5kXCJ9LCBcIk5QXCI6IHtcInBhdGhcIjogXCJNNjQxLjI2LDIxMy41M2wtMC4xNCwwLjk1bDAuMzIsMS42NGwtMC4yMSwwLjc4bC0xLjgzLDAuMDRsLTIuOTgsLTAuNjJsLTEuODYsLTAuMjVsLTEuMzcsLTEuM2wtMC4xOCwtMC4wOGwtMy4zOCwtMC4zNGwtMy4yMSwtMS40OWwtMi4zOCwtMS4zNGwtMi4xNiwtMC45MmwwLjg0LC0yLjJsMS41MSwtMS4xOGwwLjg5LC0wLjU3bDEuODMsMC43N2wyLjUsMS43NmwxLjM5LDAuNDFsMC43OCwxLjIxbDAuMTcsMC4xM2wxLjkxLDAuNTNsMi4wLDEuMTdsMi45MiwwLjY2bDIuNjMsMC4yNFpcIiwgXCJuYW1lXCI6IFwiTmVwYWxcIn0sIFwiQ0lcIjoge1wicGF0aFwiOiBcIk00MTMuNTMsMjcyLjA4bC0wLjgzLDAuMDJsLTEuNzksLTAuNDlsLTEuNjQsMC4wM2wtMy4wNCwwLjQ2bC0xLjczLDAuNzJsLTIuNCwwLjg5bC0wLjEyLC0wLjAybDAuMTYsLTEuN2wwLjE5LC0wLjI1bDAuMDYsLTAuMmwtMC4wOCwtMC45OWwtMC4wOSwtMC4xOWwtMS4wNiwtMS4wNWwtMC4xNSwtMC4wOGwtMC43MSwtMC4xNWwtMC41MSwtMC40OGwwLjQ1LC0wLjkybDAuMDIsLTAuMTlsLTAuMjQsLTEuMTZsMC4wNywtMC40M2wwLjE0LC0wLjBsMC4zLC0wLjI2bDAuMTUsLTEuMWwtMC4wMiwtMC4xNWwtMC4xMywtMC4zNGwwLjA5LC0wLjEzbDAuODMsLTAuMjdsMC4xOSwtMC4zN2wtMC42MiwtMi4wMmwtMC41NSwtMS4wbDAuMTQsLTAuNTlsMC4zNSwtMC4xNGwwLjI0LC0wLjE2bDAuNTMsMC4yOWwwLjE0LDAuMDRsMS45MywwLjAybDAuMjYsLTAuMTRsMC4zNiwtMC41OGwwLjM5LDAuMDFsMC40MywtMC4xN2wwLjI4LDAuNzlsMC40MywwLjE2bDAuNTYsLTAuMzFsMC44OSwtMC4zMmwwLjkyLDAuNDVsMC4zOSwwLjc1bDAuMTQsMC4xM2wxLjEzLDAuNTNsMC4zLC0wLjAzbDAuODEsLTAuNTlsMS4wMiwtMC4wOGwxLjQ5LDAuNTdsMC42MiwzLjMzbC0xLjAzLDIuMDlsLTAuNjUsMi44NGwwLjAyLDAuMmwxLjA1LDIuMDhsLTAuMDcsMC42NFpcIiwgXCJuYW1lXCI6IFwiSXZvcnkgQ29hc3RcIn0sIFwiQ0hcIjoge1wicGF0aFwiOiBcIk00NDQuNzEsMTU2LjI3bDAuMDUsMC4zbC0wLjM0LDAuNjlsMC4xMywwLjRsMS4xMywwLjU4bDEuMDcsMC4xbC0wLjEyLDAuODFsLTAuODcsMC40MmwtMS43NSwtMC4zN2wtMC4zNCwwLjE4bC0wLjQ3LDEuMWwtMC44NiwwLjA3bC0wLjMzLC0wLjM4bC0wLjQxLC0wLjA0bC0xLjM0LDEuMDFsLTEuMDIsMC4xM2wtMC45MywtMC41OGwtMC44MiwtMS4zMmwtMC4zNywtMC4xMmwtMC43NywwLjMybDAuMDIsLTAuODRsMS43NCwtMS42OWwwLjA5LC0wLjI1bC0wLjA0LC0wLjM4bDAuNzMsMC4xOWwwLjI2LC0wLjA2bDAuNiwtMC40OGwyLjAyLDAuMDJsMC4yNCwtMC4xMmwwLjM4LC0wLjUxbDIuMzEsMC44NFpcIiwgXCJuYW1lXCI6IFwiU3dpdHplcmxhbmRcIn0sIFwiQ09cIjoge1wicGF0aFwiOiBcIk0yMzIuMjQsMjg0Ljk1bC0wLjk0LC0wLjUybC0xLjIyLC0wLjgybC0wLjMxLC0wLjAxbC0wLjYyLDAuMzVsLTEuODgsLTAuMzFsLTAuNTQsLTAuOTVsLTAuMjksLTAuMTVsLTAuMzcsMC4wM2wtMi4zNCwtMS4zM2wtMC4xNSwtMC4zNWwwLjU3LC0wLjExbDAuMjQsLTAuMzJsLTAuMSwtMS4xNWwwLjQ2LC0wLjcxbDEuMTEsLTAuMTVsMC4yMSwtMC4xM2wxLjA1LC0xLjU3bDAuOTUsLTEuMzFsLTAuMDgsLTAuNDNsLTAuNzMsLTAuNDdsMC40LC0xLjI0bDAuMDEsLTAuMTZsLTAuNTMsLTIuMTVsMC40NCwtMC41NGwwLjA2LC0wLjI0bC0wLjQsLTIuMTNsLTAuMDYsLTAuMTNsLTAuOTMsLTEuMjJsMC4yMSwtMC44bDAuNTIsMC4xMmwwLjMyLC0wLjEzbDAuNDcsLTAuNzVsMC4wMywtMC4yN2wtMC41MiwtMS4zMmwwLjA5LC0wLjExbDEuMTQsMC4wN2wwLjIyLC0wLjA4bDEuODIsLTEuNzFsMC45NiwtMC4yNWwwLjIyLC0wLjI4bDAuMDIsLTAuODFsMC40MywtMi4wMWwxLjI4LC0xLjA0bDEuNDgsLTAuMDVsMC4yNywtMC4xOWwwLjEyLC0wLjMxbDEuNzMsMC4xOWwwLjIsLTAuMDVsMS45NiwtMS4yOGwwLjk3LC0wLjU2bDEuMTYsLTEuMTZsMC42NCwwLjExbDAuNDMsMC40NGwtMC4zMSwwLjU1bC0xLjQ5LDAuMzlsLTAuMTksMC4xNmwtMC42LDEuMmwtMC45NywwLjc0bC0wLjczLDAuOTRsLTAuMDYsMC4xM2wtMC4zLDEuNzZsLTAuNjgsMS40NGwwLjIzLDAuNDNsMS4xLDAuMTRsMC4yNywwLjk3bDAuMDgsMC4xM2wwLjQ5LDAuNDlsMC4xNywwLjg1bC0wLjI3LDAuODZsLTAuMDEsMC4xNGwwLjA5LDAuNTNsMC4yLDAuMjNsMC41MiwwLjE4bDAuNTQsMC43OWwwLjI3LDAuMTNsMy4xOCwtMC4yNGwxLjMxLDAuMjlsMS43LDIuMDhsMC4zMSwwLjFsMC45NiwtMC4yNmwxLjc1LDAuMTNsMS40MSwtMC4yN2wwLjU2LDAuMjdsLTAuMzYsMS4wN2wtMC41NCwwLjgxbC0wLjA1LDAuMTNsLTAuMiwxLjhsMC41MSwxLjc5bDAuMDcsMC4xMmwwLjY1LDAuNjhsMC4wNSwwLjMybC0xLjE2LDEuMTRsMC4wNSwwLjQ3bDAuODYsMC41MmwwLjYsMC43OWwwLjMxLDEuMDFsLTAuNywtMC44MWwtMC40NCwtMC4wMWwtMC43NCwwLjc3bC00Ljc1LC0wLjA1bC0wLjMsMC4zMWwwLjAzLDEuNTdsMC4yNSwwLjI5bDEuMiwwLjIxbC0wLjAyLDAuMjRsLTAuMSwtMC4wNWwtMC4yMiwtMC4wMmwtMS40MSwwLjQxbC0wLjIyLDAuMjlsLTAuMDEsMS44MmwwLjExLDAuMjNsMS4wNCwwLjg1bDAuMzUsMS4zbC0wLjA2LDEuMDJsLTEuMDIsNi4yNmwtMC44NCwtMC44OWwtMC4xOSwtMC4wOWwtMC4yNSwtMC4wMmwxLjM1LC0yLjEzbC0wLjEsLTAuNDJsLTEuOTIsLTEuMTdsLTAuMiwtMC4wNGwtMS40MSwwLjJsLTAuODIsLTAuMzlsLTAuMjYsMC4wbC0xLjI5LDAuNjJsLTEuNjMsLTAuMjdsLTEuNCwtMi41bC0wLjEyLC0wLjEybC0xLjEsLTAuNjFsLTAuODMsLTEuMmwtMS42NywtMS4xOWwtMC4yNywtMC4wNGwtMC41NCwwLjE5WlwiLCBcIm5hbWVcIjogXCJDb2xvbWJpYVwifSwgXCJDTlwiOiB7XCJwYXRoXCI6IFwiTTc0MC4zMiwxNDguOTRsMC4yMiwwLjIxbDQuMywxLjAzbDIuODQsMi4ybDAuOTksMi45MmwwLjI4LDAuMmwzLjgsMC4wbDAuMTUsLTAuMDRsMi4xMywtMS4yNGwzLjUsLTAuOGwtMS4wNSwyLjI5bC0wLjk1LDEuMTNsLTAuMDYsMC4xMmwtMC44NSwzLjQxbC0xLjU2LDIuODFsLTIuODMsLTAuNTFsLTAuMTksMC4wM2wtMi4xNSwxLjA5bC0wLjE1LDAuMzRsMC42NSwyLjU5bC0wLjMzLDMuM2wtMS4wMywwLjA3bC0wLjI4LDAuM2wwLjAxLDAuNzVsLTEuMDksLTEuMmwtMC40OCwwLjA1bC0wLjk0LDEuNmwtMy43NiwxLjI2bC0wLjIsMC4zNmwwLjI5LDEuMTlsLTEuNjcsLTAuMDhsLTEuMTEsLTAuODhsLTAuNDIsMC4wNWwtMS42OSwyLjA4bC0yLjcxLDEuNTdsLTIuMDQsMS44OGwtMy40MiwwLjg0bC0wLjExLDAuMDVsLTEuOCwxLjM0bC0xLjU0LDAuNDZsMC41MiwtMC41M2wwLjA2LC0wLjMzbC0wLjQ0LC0wLjk2bDEuODQsLTEuODRsMC4wMiwtMC40MWwtMS4zMiwtMS41NmwtMC4zNiwtMC4wOGwtMi4yMywxLjA4bC0yLjgzLDIuMDZsLTEuNTIsMS44NWwtMi4zMiwwLjEzbC0wLjIsMC4wOWwtMS4yOCwxLjM3bC0wLjAzLDAuMzdsMS4zMiwxLjk3bDAuMTgsMC4xM2wxLjgzLDAuNDNsMC4wNywxLjA4bDAuMTgsMC4yNmwxLjk4LDAuODRsMC4zLC0wLjAzbDIuNjYsLTEuOTZsMi4wNiwxLjA0bDAuMTIsMC4wM2wxLjQsMC4wN2wwLjI3LDEuMGwtMy4yNCwwLjczbC0wLjE3LDAuMTFsLTEuMTMsMS41bC0yLjM4LDEuNGwtMC4xLDAuMWwtMS4yOSwxLjk5bDAuMSwwLjQybDIuNiwxLjVsMC45NywyLjcybDEuNTIsMi41NmwxLjY2LDIuMDhsLTAuMDMsMS43NmwtMS40LDAuNjdsLTAuMTUsMC4zOGwwLjYsMS40N2wwLjEzLDAuMTVsMS4yOSwwLjc1bC0wLjM1LDIuMGwtMC41OCwxLjk2bC0xLjIyLDAuMjFsLTAuMiwwLjE0bC0xLjgzLDIuOTNsLTIuMDIsMy41MWwtMi4yOSwzLjEzbC0zLjQsMi40MmwtMy40MiwyLjE4bC0yLjc1LDAuM2wtMC4xNSwwLjA2bC0xLjMyLDEuMDFsLTAuNjgsLTAuNjdsLTAuNDEsLTAuMDFsLTEuMzcsMS4yN2wtMy40MiwxLjI4bC0yLjYyLDAuNGwtMC4yNCwwLjIxbC0wLjgsMi41N2wtMC45NSwwLjExbC0wLjUzLC0xLjU0bDAuNTIsLTAuODlsLTAuMTksLTAuNDRsLTMuMzYsLTAuODRsLTAuMTcsMC4wMWwtMS4wOSwwLjRsLTIuMzYsLTAuNjRsLTEuMCwtMC45bDAuMzUsLTEuMzRsLTAuMjMsLTAuMzdsLTIuMjIsLTAuNDdsLTEuMTUsLTAuOTRsLTAuMzYsLTAuMDJsLTIuMDgsMS4zN2wtMi4zNSwwLjI5bC0xLjk4LC0wLjAxbC0wLjEzLDAuMDNsLTEuMzIsMC42M2wtMS4yOCwwLjM4bC0wLjIxLDAuMzNsMC4zMywyLjY1bC0wLjc4LC0wLjA0bC0wLjE0LC0wLjM5bC0wLjA3LC0xLjA0bC0wLjQxLC0wLjI2bC0xLjcyLDAuNzFsLTAuOTYsLTAuNDNsLTEuNjMsLTAuODZsMC42NSwtMS45NWwtMC4xOSwtMC4zOGwtMS40MywtMC40NmwtMC41NiwtMi4yN2wtMC4zNCwtMC4yMmwtMi4yNiwwLjM4bDAuMjUsLTIuNjVsMi4yOSwtMi4xNWwwLjA5LC0wLjJsMC4xLC0yLjIxbC0wLjA3LC0yLjA5bC0wLjE1LC0wLjI1bC0xLjAyLC0wLjZsLTAuOCwtMS41MmwtMC4zMSwtMC4xNmwtMS40MiwwLjJsLTIuMTYsLTAuMzJsMC41NSwtMC43NGwwLjAxLC0wLjM1bC0xLjE3LC0xLjdsLTAuNDEsLTAuMDhsLTEuNjcsMS4wN2wtMS45NywtMC42M2wtMC4yNSwwLjAzbC0yLjg5LDEuNzNsLTIuMjYsMS45OWwtMS44MiwwLjNsLTEuMCwtMC42NmwtMC4xNSwtMC4wNWwtMS4yOCwtMC4wNmwtMS43NSwtMC42MWwtMC4yNCwwLjAybC0xLjM1LDAuNjlsLTAuMSwwLjA4bC0xLjIsMS40NWwtMC4xNCwtMS40MWwtMC40LC0wLjI1bC0xLjQ2LDAuNTVsLTIuODMsLTAuMjZsLTIuNzcsLTAuNjFsLTEuOTksLTEuMTdsLTEuOTEsLTAuNTRsLTAuNzgsLTEuMjFsLTAuMTcsLTAuMTNsLTEuMzYsLTAuMzhsLTIuNTQsLTEuNzlsLTIuMDEsLTAuODRsLTAuMjgsMC4wMmwtMC44OSwwLjU2bC0zLjMxLC0xLjgzbC0yLjM1LC0xLjY3bC0wLjU3LC0yLjQ5bDEuMzQsMC4yOGwwLjM2LC0wLjI4bDAuMDgsLTEuNDJsLTAuMDUsLTAuMTlsLTAuOTMsLTEuMzRsMC4yNCwtMi4xOGwtMC4wNywtMC4yMmwtMi42OSwtMy4zMmwtMC4xNSwtMC4xbC0zLjk3LC0xLjExbC0wLjY5LC0yLjA1bC0wLjExLC0wLjE1bC0xLjc5LC0xLjNsLTAuMzksLTAuNzNsLTAuMzYsLTEuNTdsMC4wOCwtMS4wOWwtMC4xOCwtMC4zbC0xLjUyLC0wLjY2bC0wLjIyLC0wLjAxbC0wLjUxLDAuMThsLTAuNTIsLTIuMjFsMC41OSwtMC41NWwwLjA2LC0wLjM1bC0wLjIyLC0wLjQ0bDIuMTIsLTEuMjRsMS42MywtMC41NWwyLjU4LDAuMzlsMC4zMSwtMC4xNmwwLjg3LC0xLjc1bDMuMDUsLTAuMzRsMC4yMSwtMC4xMmwwLjg0LC0xLjEybDMuODcsLTEuNTlsMC4xNSwtMC4xNGwwLjM1LC0wLjY4bDAuMDMsLTAuMTdsLTAuMTcsLTEuNTFsMS41MiwtMC43bDAuMTUsLTAuMzlsLTIuMTIsLTUuMGw0LjYyLC0xLjE1bDEuMzUsLTAuNzJsMC4xNCwtMC4xN2wxLjcyLC01LjM3bDQuNywwLjk5bDAuMjgsLTAuMDhsMS4zOSwtMS40M2wwLjA4LC0wLjJsMC4xMSwtMi45NWwxLjgzLC0wLjI2bDAuMTgsLTAuMWwxLjg1LC0yLjA4bDAuNjEsLTAuMTdsMC41NywxLjk3bDAuMSwwLjE1bDIuMiwxLjc1bDMuNDgsMS4xN2wxLjU5LDIuMzZsLTAuOTMsMy41M2wwLjA0LDAuMjRsMC45LDEuMzVsMC4yLDAuMTNsMi45OCwwLjUzbDMuMzIsMC40M2wyLjk3LDEuODlsMS40OSwwLjM1bDEuMDgsMi42N2wxLjUyLDEuODhsMC4yNCwwLjExbDIuNzQsLTAuMDdsNS4xNSwwLjY3bDMuMzYsLTAuNDFsMi4zOSwwLjQzbDMuNjcsMS44MWwwLjEzLDAuMDNsMi45MiwtMC4wbDEuMDIsMC44NmwwLjM0LDAuMDNsMi44OCwtMS41OWwzLjk4LC0xLjAzbDMuODEsLTAuMTNsMy4wMiwtMS4xMmwxLjc3LC0xLjYxbDEuNzMsLTEuMDFsMC4xMywtMC4zN2wtMC40MSwtMS4wMWwtMC43MiwtMS4wN2wxLjA5LC0xLjY2bDEuMjEsMC4yNGwyLjU3LDAuNjNsMC4yNCwtMC4wNGwyLjQ2LC0xLjYybDMuNzgsLTEuMTlsMC4xMywtMC4wOWwxLjgsLTIuMDNsMS42NiwtMC44NGwzLjU0LC0wLjQxbDEuOTMsMC4zNWwwLjM0LC0wLjIybDAuMjcsLTEuMTJsLTAuMDgsLTAuMjlsLTIuMjcsLTIuMjJsLTIuMDgsLTEuMDdsLTAuMjksMC4wMWwtMS44MiwxLjEybC0yLjM2LC0wLjQ3bC0wLjE0LDAuMDFsLTEuMTgsMC4zNGwtMC40NiwtMC45NGwxLjY5LC0zLjA4bDEuMSwtMi4yMWwyLjc1LDEuMTJsMC4yNiwtMC4wMmwzLjUzLC0yLjA2bDAuMTUsLTAuMjZsLTAuMDIsLTEuMzVsMi4xOCwtMy4zOWwxLjM1LC0xLjA0bDAuMTIsLTAuMjRsLTAuMDMsLTEuODVsLTAuMTUsLTAuMjVsLTEuMCwtMC41OGwxLjY4LC0xLjM3bDMuMDEsLTAuNTlsMy4yNSwtMC4wOWwzLjY3LDAuOTlsMi4wOCwxLjE4bDEuNTEsMy4zbDAuOTUsMS40NWwwLjg1LDEuOTlsMC45MiwzLjE5Wk02OTcuMCwyMzcuMzdsLTEuOTUsMS4xMmwtMS43NCwtMC42OGwtMC4wNiwtMS45bDEuMDgsLTEuMDNsMi42MiwtMC43bDEuMjMsMC4wNWwwLjM3LDAuNjVsLTEuMDEsMS4wOGwtMC41NCwxLjRaXCIsIFwibmFtZVwiOiBcIkNoaW5hXCJ9LCBcIkNNXCI6IHtcInBhdGhcIjogXCJNNDUzLjc2LDI3OC45MmwtMC4yNiwtMC4xMWwtMC4xOCwtMC4wMmwtMS40MiwwLjMxbC0xLjU2LC0wLjMzbC0xLjE3LDAuMTZsLTMuNywtMC4wNWwwLjMsLTEuNjNsLTAuMDQsLTAuMjFsLTAuOTgsLTEuNjZsLTAuMTUsLTAuMTNsLTEuMDMsLTAuMzhsLTAuNDYsLTEuMDFsLTAuMTMsLTAuMTRsLTAuNDgsLTAuMjdsMC4wMiwtMC40NmwwLjYyLC0xLjcybDEuMSwtMi4yNWwwLjU0LC0wLjAybDAuMiwtMC4wOWwxLjQxLC0xLjM5bDAuNzMsLTAuMDNsMS4zMiwwLjk3bDAuMzEsMC4wM2wxLjcyLC0wLjg1bDAuMTYsLTAuMmwwLjIyLC0xLjBsMC41NywtMS4wM2wwLjM2LC0xLjE4bDEuMjYsLTAuOThsMC4xLC0wLjE1bDAuNDksLTEuN2wwLjQ4LC0wLjUxbDAuMDcsLTAuMTNsMC4zNSwtMS4zbDAuNjMsLTEuNTRsMi4wNiwtMS45MmwwLjA5LC0wLjE3bDAuMTIsLTAuNzlsMC4yNCwtMC40MWwtMC4wNCwtMC4zNmwtMC44OSwtMC45MWwwLjA0LC0wLjQ1bDAuMjgsLTAuMDZsMC44NSwxLjM5bDAuMTYsMS41OWwtMC4wOSwxLjY2bDAuMDQsMC4xN2wxLjA5LDEuODRsLTAuODYsLTAuMDJsLTAuNzIsMC4xN2wtMS4wNywtMC4yNGwtMC4zNCwwLjE3bC0wLjU0LDEuMTlsMC4wNiwwLjM0bDEuNDgsMS40N2wxLjA2LDAuNDRsMC4zMiwwLjk0bDAuNzMsMS42bC0wLjMyLDAuNTdsLTEuMjMsMi40OWwtMC41NCwwLjQxbC0wLjEyLDAuMjFsLTAuMTksMS45NWwwLjI0LDEuMDhsLTAuMTgsMC42N2wwLjA3LDAuMjhsMS4xMywxLjI1bDAuMjQsMC45M2wwLjkyLDEuMjlsMS4xLDAuOGwwLjEsMS4wMWwwLjI2LDAuNzNsLTAuMTIsMC45M2wtMS42NSwtMC40OWwtMi4wMiwtMC42NmwtMy4xOSwtMC4xMVpcIiwgXCJuYW1lXCI6IFwiQ2FtZXJvb25cIn0sIFwiQ0xcIjoge1wicGF0aFwiOiBcIk0yNDYuOCw0MjkuMWwtMS4xNCwwLjc4bC0yLjI1LDEuMjFsLTAuMTYsMC4yM2wtMC4zNywyLjk0bC0wLjc1LDAuMDZsLTIuNzIsLTEuMDdsLTIuODMsLTIuMzRsLTMuMDYsLTEuOWwtMC43MSwtMS45MmwwLjY3LC0xLjg0bC0wLjAyLC0wLjI1bC0xLjIyLC0yLjEzbC0wLjMxLC01LjQxbDEuMDIsLTIuOTVsMi41OSwtMi40bC0wLjEzLC0wLjUxbC0zLjMyLC0wLjhsMi4wNiwtMi40bDAuMDcsLTAuMTVsMC43OSwtNC43N2wyLjQ0LDAuOTVsMC40LC0wLjIybDEuMzEsLTYuMzFsLTAuMTYsLTAuMzNsLTEuNjgsLTAuOGwtMC40MiwwLjIxbC0wLjcyLDMuNDdsLTEuMDEsLTAuMjdsMC43NCwtNC4wNmwwLjg1LC01LjQ2bDEuMTIsLTEuOTZsMC4wMywtMC4yMmwtMC43MSwtMi44MmwtMC4xOSwtMi45NGwwLjc2LC0wLjA3bDAuMjYsLTAuMmwxLjUzLC00LjYybDEuNzMsLTQuNTJsMS4wNywtNC4ybC0wLjU2LC00LjJsMC43MywtMi4ybDAuMDEsLTAuMTJsLTAuMjksLTMuM2wxLjQ2LC0zLjM0bDAuNDUsLTUuMTlsMC44LC01LjUybDAuNzgsLTUuODlsLTAuMTgsLTQuMzNsLTAuNDksLTMuNDdsMS4xLC0wLjU2bDAuMTMsLTAuMTNsMC40NCwtMC44OGwwLjksMS4yOWwwLjMyLDEuOGwwLjEsMC4xOGwxLjE2LDAuOTdsLTAuNzMsMi4zM2wwLjAxLDAuMjFsMS4zMywyLjkxbDAuOTcsMy42bDAuMzUsMC4yMmwxLjU3LC0wLjMxbDAuMTYsMC4zNGwtMC43OSwyLjUxbC0yLjYxLDEuMjVsLTAuMTcsMC4yOGwwLjA4LDQuMzZsLTAuNDgsMC43OWwwLjAxLDAuMzNsMC42LDAuODRsLTEuNjIsMS41NWwtMS42NywyLjZsLTAuODksMi40N2wtMC4wMiwwLjEzbDAuMjMsMi41NmwtMS41LDIuNzZsLTAuMDMsMC4yMWwxLjE1LDQuOGwwLjExLDAuMTdsMC41NCwwLjQybC0wLjAxLDIuMzdsLTEuNCwyLjdsLTAuMDMsMC4xNWwwLjA2LDIuMjVsLTEuOCwxLjc4bC0wLjA5LDAuMjFsMC4wMiwyLjczbDAuNzEsMi42M2wtMS4zMywwLjk0bC0wLjEyLDAuMTdsLTAuNjcsMi42NGwtMC41OSwzLjAzbDAuNCwzLjU1bC0wLjg0LDAuNTFsLTAuMTQsMC4zMWwwLjU4LDMuNWwwLjA4LDAuMTZsMC45NiwwLjk5bC0wLjcsMS4wOGwwLjExLDAuNDNsMS4wNCwwLjU1bDAuMTksMC44bC0wLjg5LDAuNDhsLTAuMTYsMC4zMWwwLjI2LDEuNzdsLTAuODksNC4wNmwtMS4zMSwyLjY3bC0wLjAzLDAuMTlsMC4yOCwxLjUzbC0wLjczLDEuODhsLTEuODUsMS4zN2wtMC4xMiwwLjI2bDAuMjIsMy40NmwwLjA2LDAuMTZsMC44OCwxLjE5bDAuMjgsMC4xMmwxLjMyLC0wLjE3bC0wLjA0LDIuMTNsMC4wNCwwLjE1bDEuMDQsMS45NWwwLjI0LDAuMTZsNS45NCwwLjQ0Wk0yNDguNzksNDMwLjcxbDAuMCw3LjQxbDAuMywwLjNsMi42NywwLjBsMS4wMSwwLjA2bC0wLjU0LDAuOTFsLTEuOTksMS4wMWwtMS4xMywtMC4xbC0xLjQyLC0wLjI3bC0xLjg3LC0xLjA2bC0yLjU3LC0wLjQ5bC0zLjA5LC0xLjlsLTIuNTIsLTEuODNsLTIuNjUsLTIuOTNsMC45MywwLjMybDMuNTQsMi4yOWwzLjMyLDEuMjNsMC4zNCwtMC4wOWwxLjI5LC0xLjU3bDAuODMsLTIuMzJsMi4xMSwtMS4yOGwxLjQzLDAuMzJaXCIsIFwibmFtZVwiOiBcIkNoaWxlXCJ9LCBcIkNBXCI6IHtcInBhdGhcIjogXCJNMjgwLjE0LDE0NS42NmwtMS42NiwyLjg4bDAuMDYsMC4zN2wwLjM3LDAuMDNsMS41LC0xLjAxbDEuMTcsMC40OWwtMC42NCwwLjgzbDAuMTMsMC40NmwyLjIyLDAuODlsMC4yOCwtMC4wM2wxLjAyLC0wLjdsMi4wOSwwLjgzbC0wLjY5LDIuMWwwLjM3LDAuMzhsMS40MywtMC40NWwwLjI3LDEuNDNsMC43NCwxLjg4bC0wLjk1LDIuNWwtMC44OCwwLjA5bC0xLjM0LC0wLjQ4bDAuNDksLTIuMzRsLTAuMTQsLTAuMzJsLTAuNywtMC40bC0wLjM2LDAuMDRsLTIuODEsMi42NmwtMC42MywtMC4wNWwxLjIsLTEuMDFsLTAuMSwtMC41MmwtMi40LC0wLjc3bC0yLjc5LDAuMThsLTQuNjUsLTAuMDlsLTAuMjIsLTAuNTRsMS4zNywtMC45OWwwLjAxLC0wLjQ4bC0wLjgyLC0wLjY1bDEuOTEsLTEuNzlsMi41NywtNS4xN2wxLjQ5LC0xLjgxbDIuMDQsLTEuMDdsMC42MywwLjA4bC0wLjI3LDAuNTFsLTEuMzMsMi4wN1pNMTkzLjkyLDc0Ljg1bC0wLjAxLDQuMjRsMC4xOSwwLjI4bDAuMzMsLTAuMDdsMy4xNCwtMy4yMmwyLjY1LDIuNWwtMC43MSwzLjA0bDAuMDYsMC4yNmwyLjQyLDIuODhsMC40NiwwLjBsMi42NiwtMy4xNGwxLjgzLC0zLjc0bDAuMDMsLTAuMTJsMC4xMywtNC41M2wzLjIzLDAuMzFsMy42MywwLjY0bDMuMTgsMi4wOGwwLjEzLDEuOTFsLTEuNzksMi4yMmwtMC4wLDAuMzdsMS42OSwyLjJsLTAuMjgsMS44bC00Ljc0LDIuODRsLTMuMzMsMC42MmwtMi41LC0xLjIxbC0wLjQxLDAuMTdsLTAuNzMsMi4wNWwtMi4zOSwzLjQ0bC0wLjc0LDEuNzhsLTIuNzgsMi42MWwtMy40OCwwLjI2bC0wLjE3LDAuMDdsLTEuOTgsMS42OGwtMC4xLDAuMjFsLTAuMTUsMi4zM2wtMi42OCwwLjQ1bC0wLjE3LDAuMDlsLTMuMSwzLjJsLTIuNzUsNC4zOGwtMC45OSwzLjA2bC0wLjE0LDQuMzFsMC4yNSwwLjMxbDMuNSwwLjU4bDEuMDcsMy4yNGwxLjE4LDIuNzZsMC4zNCwwLjE4bDMuNDMsLTAuNjlsNC41NSwxLjUybDIuNDUsMS4zMmwxLjc2LDEuNjVsMC4xMiwwLjA3bDMuMTEsMC45NmwyLjYzLDEuNDZsMC4xMywwLjA0bDQuMTIsMC4ybDIuNDEsMC4zbC0wLjM2LDIuODFsMC44LDMuNTFsMS44MSwzLjc4bDAuMDgsMC4xbDMuNzMsMy4xN2wwLjM0LDAuMDNsMS45MywtMS4wOGwwLjEzLC0wLjE1bDEuMzUsLTMuNDRsMC4wMSwtMC4xOGwtMS4zMSwtNS4zOGwtMC4wOCwtMC4xNGwtMS40NiwtMS41bDMuNjgsLTEuNTFsMi44NCwtMi40NmwxLjQ1LC0yLjU1bDAuMDQsLTAuMTdsLTAuMiwtMi4zOWwtMC4wNCwtMC4xMmwtMS43LC0zLjA3bC0yLjksLTIuNjRsMi43OSwtMy42NmwwLjA1LC0wLjI3bC0xLjA4LC0zLjM4bC0wLjgsLTUuNzVsMS40NSwtMC43NWw0LjE4LDEuMDNsMi42LDAuMzhsMC4xOCwtMC4wM2wxLjkzLC0wLjk1bDIuMTgsMS4yM2wzLjAxLDIuMThsMC43MywxLjQybDAuMjUsMC4xNmw0LjE4LDAuMjdsLTAuMDYsMi45NWwwLjgzLDQuN2wwLjIyLDAuMjRsMi4xOSwwLjU1bDEuNzUsMi4wOGwwLjM4LDAuMDdsMy42MywtMi4wM2wwLjExLC0wLjExbDIuMzgsLTQuMDZsMS4zNiwtMS40M2wxLjc2LDMuMDFsMy4yNiw0LjY4bDIuNjgsNC4xOWwtMC45NCwyLjA5bDAuMTIsMC4zOGwzLjMxLDEuOThsMi4yMywxLjk4bDAuMTMsMC4wN2wzLjk0LDAuODlsMS40OCwxLjAybDAuOTYsMi44MmwwLjIyLDAuMmwxLjg1LDAuNDNsMC44OCwxLjEzbDAuMTcsMy41M2wtMS42OCwxLjE2bC0xLjc2LDEuMTRsLTQuMDgsMS4xN2wtMC4xMSwwLjA2bC0zLjA4LDIuNjVsLTQuMTEsMC41MmwtNS4zNSwtMC42OWwtMy43NiwtMC4wMmwtMi42MiwwLjIzbC0wLjIsMC4xbC0yLjA1LDIuMjlsLTMuMTMsMS40MWwtMC4xMSwwLjA4bC0zLjYsNC4yNGwtMi44NywyLjkybC0wLjA1LDAuMzZsMC4zMywwLjE0bDIuMTMsLTAuNTJsMC4xNSwtMC4wOGwzLjk4LC00LjE1bDUuMTYsLTIuNjNsMy41OCwtMC4zMWwxLjgyLDEuM2wtMi4wOSwxLjkxbC0wLjA5LDAuMjlsMC44LDMuNDZsMC44MiwyLjM3bDAuMTUsMC4xN2wzLjI1LDEuNTZsMC4xNiwwLjAzbDQuMTQsLTAuNDVsMC4yMSwtMC4xMmwyLjAzLC0yLjg2bDAuMTEsMS40NmwwLjEzLDAuMjJsMS4yNiwwLjg4bC0yLjcsMS43OGwtNS41MSwxLjgzbC0yLjUyLDEuMjZsLTIuNzUsMi4xNmwtMS41MiwtMC4xOGwtMC4wOCwtMi4xNmw0LjE5LC0yLjQ3bDAuMTQsLTAuMzRsLTAuMywtMC4yMmwtNC4wMSwwLjFsLTIuNjYsMC4zNmwtMS40NSwtMS41NmwwLjAsLTQuMTZsLTAuMTEsLTAuMjNsLTEuMTEsLTAuOTFsLTAuMjgsLTAuMDVsLTEuNSwwLjQ4bC0wLjcsLTAuN2wtMC40NSwwLjAybC0xLjkxLDIuMzlsLTAuOCwyLjVsLTAuODIsMS4zMWwtMC45NSwwLjQzbC0wLjc3LDAuMTVsLTAuMjMsMC4ybC0wLjE4LDAuNTZsLTguMiwwLjAybC0wLjEzLDAuMDNsLTEuMTksMC42MWwtMi45NSwyLjQ1bC0wLjc4LDEuMTNsLTQuNiwwLjAxbC0wLjEyLDAuMDJsLTEuMTMsMC40OGwtMC4xMywwLjQ0bDAuMzcsMC41NWwwLjIsMC44MmwtMC4wMSwwLjA5bC0zLjEsMS40MmwtMi42MywwLjVsLTIuODQsMS41N2wtMC40NywwLjBsLTAuNzIsLTAuNGwtMC4xOCwtMC4yN2wwLjAzLC0wLjE1bDAuNTIsLTEuMGwxLjIsLTEuNzFsMC43MywtMS44bDAuMDIsLTAuMTdsLTEuMDMsLTUuNDdsLTAuMTUsLTAuMjFsLTIuMzUsLTEuMzJsMC4xNiwtMC4yOWwtMC4wNSwtMC4zNWwtMC4zNywtMC4zOGwtMC4yMiwtMC4wOWwtMC41NiwwLjBsLTAuMzUsLTAuMzRsLTAuMTEsLTAuNjVsLTAuNDYsLTAuMmwtMC4zOSwwLjI2bC0wLjIsLTAuMDNsLTAuMTEsLTAuMzNsLTAuNDgsLTAuMjVsLTAuMjEsLTAuNzFsLTAuMTUsLTAuMThsLTMuOTcsLTIuMDdsLTQuOCwtMi4zOWwtMC4yNSwtMC4wMWwtMi4xOSwwLjg5bC0wLjcyLDAuMDNsLTMuMDQsLTAuODJsLTAuMTQsLTAuMGwtMS45NCwwLjRsLTIuNCwtMC45OGwtMi41NiwtMC41MWwtMS43LC0wLjE5bC0wLjYyLC0wLjQ0bC0wLjQyLC0xLjY3bC0wLjMsLTAuMjNsLTAuODUsMC4wMmwtMC4yOSwwLjNsLTAuMDEsMC45NWwtNjkuMjYsLTAuMDFsLTQuNzcsLTMuMTRsLTEuNzgsLTEuNDFsLTQuNTEsLTEuMzhsLTEuMywtMi43M2wwLjM0LC0xLjk2bC0wLjE3LC0wLjMzbC0zLjA2LC0xLjM3bC0wLjQxLC0yLjU4bC0wLjExLC0wLjE4bC0yLjkyLC0yLjRsLTAuMDUsLTEuNTNsMS4zMiwtMS41OWwwLjA3LC0wLjJsLTAuMDcsLTIuMjFsLTAuMTYsLTAuMjZsLTQuMTksLTIuMjJsLTIuNTIsLTQuMDJsLTEuNTYsLTIuNmwtMC4wOCwtMC4wOWwtMi4yOCwtMS42NGwtMS42NSwtMS40OGwtMS4zMSwtMS44OWwtMC4zOCwtMC4xbC0yLjUxLDEuMjFsLTIuMjgsMS45MmwtMi4wMywtMi4yMmwtMS44NSwtMS43MWwtMi40NCwtMS4wNGwtMi4yOCwtMC4xMmwwLjAzLC0zNy43Mmw0LjI3LDAuOThsNC4wLDIuMTNsMi42MSwwLjRsMC4yNCwtMC4wN2wyLjE3LC0xLjgxbDIuOTIsLTEuMzNsMy42MywwLjUzbDAuMTgsLTAuMDNsMy43MiwtMS45NGwzLjg5LC0xLjA2bDEuNiwxLjcybDAuMzcsMC4wNmwxLjg3LC0xLjA0bDAuMTQsLTAuMTlsMC40OCwtMS44M2wxLjM3LDAuMzhsNC4xOCwzLjk2bDAuNDEsMC4wbDIuODksLTIuNjJsMC4yOCwyLjc5bDAuMzcsMC4yNmwzLjA4LC0wLjczbDAuMTcsLTAuMTJsMC44NSwtMS4xNmwyLjgxLDAuMjRsMy44MywxLjg2bDUuODYsMS42MWwzLjQ2LDAuNzVsMi40NCwtMC4yNmwyLjg5LDEuODlsLTMuMTIsMS44OWwtMC4xNCwwLjMxbDAuMjQsMC4yNGw0LjUzLDAuOTJsNi44NCwtMC41bDIuMDQsLTAuNzFsMi41NCwyLjQ0bDAuMzksMC4wMmwyLjcyLC0yLjE2bC0wLjAxLC0wLjQ4bC0yLjI2LC0xLjYxbDEuMjcsLTEuMTZsMi45NCwtMC4xOWwxLjk0LC0wLjQybDEuODksMC45N2wyLjQ5LDIuMzJsMC4yNCwwLjA4bDIuNzEsLTAuMzNsNC4zNSwxLjlsMC4xNywwLjAybDMuODYsLTAuNjdsMy42MiwwLjFsMC4zMSwtMC4zM2wtMC4yNiwtMi40NGwxLjksLTAuNjVsMy41OCwxLjM2bC0wLjAxLDMuODRsMC4yMywwLjI5bDAuMzQsLTAuMTdsMS41MSwtMy4yM2wxLjgxLDAuMWwwLjMxLC0wLjIybDEuMTMsLTQuMzdsLTAuMDgsLTAuMjlsLTIuNjgsLTIuNzNsLTIuODMsLTEuNzZsMC4xOSwtNC43M2wyLjc3LC0zLjE1bDMuMDYsMC42OWwyLjQ0LDEuOTdsMy4yNCw0Ljg4bC0yLjA1LDIuMDJsMC4xNSwwLjUxbDQuNDEsMC44NVpNMjY1Ljg1LDE1MC43bC0wLjg0LDAuMDRsLTMuMTUsLTAuOTlsLTEuNzcsLTEuMTdsMC4xOSwtMC4wNmwzLjE3LDAuNzlsMi4zOSwxLjI3bDAuMDEsMC4xMlpNMjQ5LjQxLDMuNzFsNi42OCwwLjQ5bDUuMzQsMC43OWw0LjM0LDEuNmwtMC4wOCwxLjI0bC01LjkxLDIuNTZsLTYuMDMsMS4yMWwtMi4zNiwxLjM4bC0wLjE0LDAuMzRsMC4yOSwwLjIybDQuMzcsLTAuMDJsLTQuOTYsMy4wMWwtNC4wNiwxLjY0bC0wLjExLDAuMDhsLTQuMjEsNC42MmwtNS4wNywwLjkybC0wLjEyLDAuMDVsLTEuNTMsMS4xbC03LjUsMC41OWwtMC4yOCwwLjI4bDAuMjQsMC4zMWwyLjY3LDAuNTRsLTEuMDQsMC42bC0wLjA5LDAuNDRsMS44OSwyLjQ5bC0yLjExLDEuNjZsLTMuODMsMS41MmwtMC4xNSwwLjEzbC0xLjE0LDIuMDFsLTMuNDEsMS41NWwtMC4xNiwwLjM2bDAuMzUsMS4xOWwwLjMsMC4yMmwzLjk4LC0wLjE5bDAuMDMsMC43OGwtNi40MiwyLjk5bC02LjQ0LC0xLjQxbC03LjQxLDAuNzlsLTMuNzIsLTAuNjJsLTQuNDgsLTAuMjZsLTAuMjUsLTIuMGw0LjM3LC0xLjEzbDAuMjEsLTAuMzhsLTEuMTQsLTMuNTVsMS4xMywtMC4yOGw2LjYxLDIuMjlsMC4zNSwtMC4xMmwtMC4wNCwtMC4zN2wtMy40MSwtMy40NWwtMC4xNCwtMC4wOGwtMy41NywtMC45MmwxLjYyLC0xLjdsNC4zNiwtMS4zbDAuMiwtMC4xOGwwLjcxLC0xLjk0bC0wLjEyLC0wLjM2bC0zLjQ1LC0yLjE1bC0wLjg4LC0yLjQzbDYuMzYsMC4yM2wxLjk0LDAuNjFsMC4yMywtMC4wMmwzLjkxLC0yLjFsMC4xNSwtMC4zMmwtMC4yNiwtMC4yNGwtNS42OSwtMC42N2wtOC42OSwwLjM3bC00LjMsLTEuOTJsLTIuMTIsLTIuMzlsLTIuODIsLTEuNjhsLTAuNDQsLTEuNjVsMy40MSwtMS4wNmwyLjkzLC0wLjJsNC45MSwtMC45OWwzLjY5LC0yLjI4bDIuOTMsMC4zMWwyLjY0LDEuNjhsMC40MiwtMC4xbDEuODQsLTMuMjNsMy4xNywtMC45Nmw0LjQ1LC0wLjY5bDcuNTYsLTAuMjZsMS4yNiwwLjY0bDAuMTgsMC4wM2w3LjIsLTEuMDZsMTAuODEsMC44Wk0yMDMuOTQsNTcuNTlsMC4wMSwwLjMybDEuOTcsMi45N2wwLjUxLC0wLjAxbDIuMjYsLTMuNzVsNi4wNSwtMS44OWw0LjA4LDQuNzJsLTAuMzYsMi45NWwwLjM4LDAuMzNsNC45NSwtMS4zNmwwLjExLC0wLjA1bDIuMjMsLTEuNzdsNS4zNywyLjMxbDMuMzIsMi4xNGwwLjMsMS44OWwwLjM2LDAuMjVsNC40OCwtMS4wMWwyLjQ5LDIuOGwwLjE0LDAuMDlsNS45OSwxLjc4bDIuMDksMS43NGwyLjE4LDMuODNsLTQuMjksMS45MWwtMC4wMSwwLjU0bDUuOSwyLjgzbDMuOTUsMC45NGwzLjU0LDMuODRsMC4yLDAuMWwzLjU4LDAuMjVsLTAuNjcsMi41MWwtNC4xOCw0LjU0bC0yLjg0LC0xLjYxbC0zLjkxLC0zLjk1bC0wLjI2LC0wLjA5bC0zLjI0LDAuNTJsLTAuMjUsMC4yNmwtMC4zMiwyLjM3bDAuMSwwLjI2bDIuNjMsMi4zOGwzLjQyLDEuODlsMC45NiwxLjBsMS41NywzLjhsLTAuNzQsMi40M2wtMi44NSwtMC45NmwtNi4yNiwtMy4xNWwtMC4zOCwwLjA5bDAuMDQsMC4zOWwzLjU0LDMuNGwyLjU1LDIuMzFsMC4yMywwLjc4bC02LjI2LC0xLjQzbC01LjMzLC0yLjI1bC0yLjczLC0xLjczbDAuNjcsLTAuODZsLTAuMDksLTAuNDVsLTcuMzgsLTQuMDFsLTAuNDQsMC4yN2wwLjAzLDAuODlsLTYuODUsMC42MWwtMS44LC0xLjE3bDEuNDMsLTIuNmw0LjU2LC0wLjA3bDUuMTUsLTAuNTJsMC4yMywtMC40NWwtMC43NiwtMS4zNGwwLjgsLTEuODlsMy4yMSwtNC4wNmwwLjA1LC0wLjI5bC0wLjcyLC0xLjk1bC0wLjk3LC0xLjQ3bC0wLjExLC0wLjFsLTMuODQsLTIuMWwtNC41MywtMS4zM2wxLjA5LC0wLjc1bDAuMDUsLTAuNDVsLTIuNjUsLTIuNzVsLTAuMTgsLTAuMDlsLTIuMTIsLTAuMjRsLTEuOTEsLTEuNDdsLTAuMzksMC4wMmwtMS4yNywxLjI1bC00LjQsMC41NmwtOS4wNiwtMC45OWwtNS4yOCwtMS4zMWwtNC4wMSwtMC42N2wtMS43MiwtMS4zMWwyLjMyLC0xLjg1bDAuMSwtMC4zM2wtMC4yOCwtMC4ybC0zLjMsLTAuMDJsLTAuNzQsLTQuMzZsMS44NiwtNC4wOWwyLjQ2LC0xLjg4bDUuNzQsLTEuMTVsLTEuNSwyLjU1Wk0yNjEuMjgsMTU5LjI4bDAuMTksMC4xNGwxLjgyLDAuNDJsMS42NiwtMC4wNWwtMC42NiwwLjY4bC0wLjc1LDAuMTZsLTMuMCwtMS4yNWwtMC40NiwtMC43N2wwLjUxLC0wLjUybDAuNjgsMS4xOVpNMjMwLjg3LDg0LjQ4bC0yLjQ4LDAuMTlsLTAuNTIsLTEuNzRsMC45NiwtMi4xN2wyLjAzLC0wLjUzbDEuNzEsMS4wNGwwLjAyLDEuNmwtMC4yMiwwLjQ2bC0xLjUsMS4xNlpNMjI5LjUyLDU4LjE5bDAuMTQsMC44MmwtNC45OSwtMC4yMmwtMi43MywwLjYzbC0wLjU5LC0wLjIzbC0yLjYxLC0yLjRsMC4wOCwtMS4zOGwwLjk0LC0wLjI1bDUuNjEsMC41MWw0LjE0LDIuNTRaTTIyMi4xMiwxMDUuMGwtMC43OSwxLjYzbC0wLjc1LC0wLjIybC0wLjUyLC0wLjkxbDAuMDQsLTAuMDlsMC44NCwtMS4wMWwwLjc0LDAuMDZsMC40NCwwLjU1Wk0xODMuNzcsMzguMjJsMi43MiwxLjY1bDAuMTYsMC4wNGw0LjgzLC0wLjAxbDEuOTIsMS41MmwtMC41MSwxLjc1bDAuMTgsMC4zNmwyLjg0LDEuMTRsMS41NiwxLjE5bDAuMTYsMC4wNmwzLjM3LDAuMjJsMy42NSwwLjQybDQuMDcsLTEuMWw1LjA1LC0wLjQzbDMuOTYsMC4zNWwyLjUzLDEuOGwwLjQ4LDEuNzlsLTEuMzcsMS4xNmwtMy42LDEuMDNsLTMuMjIsLTAuNTlsLTcuMTcsMC43NmwtNS4xLDAuMDlsLTQuMCwtMC42bC02LjQ4LC0xLjU2bC0wLjgxLC0yLjU3bC0wLjMsLTIuNDlsLTAuMSwtMC4xOWwtMi41MSwtMi4yNWwtMC4xNiwtMC4wN2wtNS4xMiwtMC42M2wtMi42MSwtMS40NWwwLjc1LC0xLjcxbDQuODgsMC4zMlpNMjA3LjQ2LDkxLjI2bDAuNDIsMS42MmwwLjQyLDAuMTlsMS4xMiwtMC41NWwxLjM1LDAuOTlsMi43NCwxLjM5bDIuNzMsMS4ybDAuMiwxLjc0bDAuMzUsMC4yNmwxLjcyLC0wLjI5bDEuMzEsMC45N2wtMS43MiwwLjk2bC0zLjY4LC0wLjlsLTEuMzQsLTEuNzFsLTAuNDMsLTAuMDRsLTIuNDYsMi4xbC0zLjIzLDEuODVsLTAuNzQsLTEuOThsLTAuMzEsLTAuMTlsLTIuNDcsMC4yOGwxLjQ5LC0xLjM0bDAuMSwtMC4xOWwwLjMyLC0zLjE1bDAuNzksLTMuNDVsMS4zNCwwLjI1Wk0yMTUuNTksMTAyLjY2bC0yLjczLDIuMGwtMS40OSwtMC4wOGwtMC4zNywtMC43bDEuNjEsLTEuNTZsMy4wLDAuMDNsLTAuMDIsMC4zWk0yMDIuNzksMjQuMDdsMC4xMSwwLjEybDIuNTQsMS41M2wtMy4wMSwxLjQ3bC00LjU1LDQuMDdsLTQuMywwLjM4bC01LjA3LC0wLjY4bC0yLjUxLC0yLjA5bDAuMDMsLTEuNzJsMS44NiwtMS40bDAuMSwtMC4zNGwtMC4yOSwtMC4ybC00LjQ5LDAuMDRsLTIuNjMsLTEuNzlsLTEuNDUsLTIuMzZsMS42MSwtMi4zOGwxLjY1LC0xLjY5bDIuNDcsLTAuNGwwLjE5LC0wLjQ4bC0wLjcyLC0wLjg5bDUuMSwtMC4yNmwzLjEsMy4wNWwwLjEzLDAuMDdsNC4yMSwxLjI1bDMuOTksMS4wNmwxLjkyLDMuNjVaTTE4Ny41LDU5LjNsLTAuMTUsMC4xbC0yLjU5LDMuNGwtMi41LC0wLjE1bC0xLjQ3LC0zLjkybDAuMDQsLTIuMjRsMS4yMiwtMS45MmwyLjM0LC0xLjI2bDUuMTEsMC4xN2w0LjI4LDEuMDZsLTMuMzYsMy44NmwtMi45LDAuOVpNMTg2LjE5LDQ4LjhsLTEuMTUsMS42M2wtMy40MiwtMC4zNWwtMi42OCwtMS4xNWwxLjExLC0xLjg4bDMuMzQsLTEuMjdsMi4wMSwxLjYzbDAuNzksMS4zOFpNMTg1Ljc4LDM1LjQxbC0wLjk1LDAuMTNsLTQuNDgsLTAuMzNsLTAuNCwtMC45MWw0LjUsMC4wN2wxLjQ1LDAuODJsLTAuMSwwLjIxWk0xODAuNzYsMzIuNTZsLTMuNDMsMS4wM2wtMS44NSwtMS4xNGwtMS4wMSwtMS45MmwtMC4xNiwtMS44N2wyLjg3LDAuMmwxLjM5LDAuMzVsMi43NSwxLjc1bC0wLjU1LDEuNlpNMTgxLjAzLDc2LjMybC0xLjIxLDEuMmwtMy4xOSwtMS4yNmwtMC4xOCwtMC4wMWwtMS45MiwwLjQ1bC0yLjg4LC0xLjY3bDEuODQsLTEuMTZsMS42LC0xLjc3bDIuNDUsMS4xN2wxLjQ1LDAuNzdsMi4wNSwyLjI4Wk0xNjkuNzIsNTQuNzZsMi44MywwLjk3bDAuMTQsMC4wMWw0LjI1LC0wLjU4bDAuNDcsMS4wMWwtMi4xOSwyLjE2bDAuMDcsMC40OGwzLjYxLDEuOTVsLTAuNDEsMy44NGwtMy44NywxLjY4bC0yLjIzLC0wLjM2bC0xLjczLC0xLjc1bC02LjA3LC0zLjUzbDAuMDMsLTEuMDFsNC43OSwwLjU1bDAuMywtMC4xNmwtMC4wNCwtMC4zNGwtMi41NSwtMi44OWwyLjU5LC0yLjA1Wk0xNzQuNDQsNDAuNTZsMS40OSwxLjg3bDAuMDcsMi40OGwtMS4wNywzLjUybC0zLjg3LDAuNDhsLTIuNDEsLTAuNzJsMC4wNSwtMi43MmwtMC4zMywtMC4zbC0zLjc5LDAuMzZsLTAuMTMsLTMuMzFsMi4zNiwwLjE0bDAuMTUsLTAuMDNsMy43LC0xLjc0bDMuNDQsMC4yOWwwLjMxLC0wLjIybDAuMDMsLTAuMTJaTTE3MC4xNCwzMS41bDAuNzUsMS43NGwtMy41MiwtMC41MmwtNC4xOSwtMS43N2wtNC42NSwtMC4xN2wxLjY1LC0xLjExbC0wLjA1LC0wLjUybC0yLjg2LC0xLjI2bC0wLjEzLC0xLjU4bDQuNTIsMC43bDYuNjYsMS45OWwxLjg0LDIuNVpNMTM0LjY0LDU4LjA4bC0xLjA4LDEuOTNsMC4zNCwwLjQ0bDUuNDQsLTEuNDFsMy4zNywyLjMybDAuMzcsLTAuMDJsMi42NiwtMi4yOGwyLjAzLDEuMzhsMi4wMSw0LjUzbDAuNTMsMC4wNGwxLjI2LC0xLjkzbDAuMDMsLTAuMjdsLTEuNjcsLTQuNTVsMS44MiwtMC41OGwyLjM2LDAuNzNsMi42OSwxLjg0bDEuNTMsNC40NmwwLjc3LDMuMjRsMC4xNSwwLjE5bDQuMjIsMi4yNmw0LjMyLDIuMDRsLTAuMjEsMS41MWwtMy44NywwLjM0bC0wLjE5LDAuNWwxLjQ1LDEuNTRsLTAuNjUsMS4yM2wtNC4zLC0wLjY1bC00LjQsLTEuMTlsLTIuOTcsMC4yOGwtNC42NywxLjQ4bC02LjMxLDAuNjVsLTQuMjcsMC4zOWwtMS4yNiwtMS45MWwtMC4xNSwtMC4xMmwtMy40MiwtMS4ybC0wLjE2LC0wLjAxbC0yLjA1LDAuNDVsLTIuNjYsLTMuMDJsMS4yLC0wLjM0bDMuODIsLTAuNzZsMy41OCwwLjE5bDMuMjcsLTAuNzhsMC4yMywtMC4yOWwtMC4yNCwtMC4yOWwtNC44NCwtMS4wNmwtNS40MiwwLjM1bC0zLjQsLTAuMDlsLTAuOTcsLTEuMjJsNS4zOSwtMS43bDAuMjEsLTAuMzNsLTAuMywtMC4yNWwtMy44MiwwLjA2bC0zLjk1LC0xLjFsMS44OCwtMy4xM2wxLjY4LC0xLjgxbDYuNTQsLTIuODRsMi4xMSwwLjc3Wk0xNTguODUsNTYuNThsLTEuODIsMi42MmwtMy4zOCwtMi45bDAuNDksLTAuMzlsMy4xNywtMC4xOGwxLjU0LDAuODZaTTE0OS43MSw0Mi43bDEuMCwxLjg3bDAuMzcsMC4xNGwyLjE3LC0wLjgzbDIuMzMsMC4ybDAuMzgsMi4xNmwtMS4zOCwyLjE3bC04LjMzLDAuNzZsLTYuMzQsMi4xNWwtMy41MSwwLjFsLTAuMjIsLTEuMTNsNC45OCwtMi4xMmwwLjE3LC0wLjM0bC0wLjMxLC0wLjIzbC0xMS4yNywwLjZsLTMuMDQsLTAuNzhsMy4xNCwtNC41N2wyLjIsLTEuMzVsNi44NywxLjdsNC40LDMuMGwwLjE0LDAuMDVsNC4zNywwLjM5bDAuMjcsLTAuNDhsLTMuNDEsLTQuNjhsMS45NiwtMS42MmwyLjI4LDAuNTNsMC43OSwyLjMyWk0xNDUuNDQsMjkuODNsLTIuMTgsMC43N2wtMy43OSwtMC4wbDAuMDIsLTAuMzFsMi4zNCwtMS41bDEuMiwwLjIzbDIuNDIsMC44M1pNMTQ0LjgzLDM0LjVsLTQuNDQsMS40NmwtMy4xOCwtMS40OGwxLjYsLTEuMzZsMy41MSwtMC41M2wzLjEsMC43NWwtMC42LDEuMTZaTTExOS4wMiw2NS44N2wtNi4xNywyLjA3bC0xLjE5LC0xLjgybC0wLjEzLC0wLjExbC01LjQ4LC0yLjMybDAuOTIsLTEuN2wxLjczLC0zLjQ0bDIuMTYsLTMuMTVsLTAuMDIsLTAuMzZsLTIuMDksLTIuNTZsNy44NCwtMC43MWwzLjU5LDEuMDJsNi4zMiwwLjI3bDIuMzUsMS4zN2wyLjI1LDEuNzFsLTIuNjgsMS4wNGwtNi4yMSwzLjQxbC0zLjEsMy4yOGwtMC4wOCwwLjIxbDAuMCwxLjgxWk0xMjkuNjYsMzUuNGwtMC4zLDMuNTVsLTEuNzcsMS42N2wtMi4zNCwwLjI3bC00LjYyLDIuMmwtMy44OSwwLjc2bC0yLjgzLC0wLjkzbDMuODUsLTMuNTJsNS4wNCwtMy4zNmwzLjc1LDAuMDdsMy4xMSwtMC43Wk0xMTEuMjQsMTUyLjc0bC0wLjgyLDAuMjlsLTMuOTIsLTEuMzlsLTAuNywtMS4wNmwtMC4xMiwtMC4xbC0yLjE1LC0xLjA5bC0wLjQxLC0wLjg0bC0wLjIsLTAuMTZsLTIuNDQsLTAuNTZsLTAuODQsLTEuNTZsMC4xLC0wLjM2bDIuMzQsMC42NGwxLjUzLDAuNWwyLjI4LDAuMzRsMC43OCwxLjA0bDEuMjQsMS41NWwwLjA5LDAuMDhsMi40MiwxLjNsMC44MSwxLjM5Wk04OC41NCwxMzQuODJsMC4xNCwwLjAybDIuMCwtMC4yM2wtMC42NywzLjQ4bDAuMDYsMC4yNGwxLjc4LDIuMjJsLTAuMjQsLTAuMGwtMS40LC0xLjQybC0wLjkxLC0xLjUzbC0xLjI2LC0xLjA4bC0wLjQyLC0xLjM1bDAuMDksLTAuNjZsMC44MiwwLjMxWlwiLCBcIm5hbWVcIjogXCJDYW5hZGFcIn0sIFwiQ0dcIjoge1wicGF0aFwiOiBcIk00NTMuNjYsMjk2LjYxbC0wLjksLTAuODJsLTAuMzUsLTAuMDRsLTAuODMsMC40OGwtMC43NywwLjgzbC0xLjY1LC0yLjEzbDEuNjYsLTEuMmwwLjA4LC0wLjM5bC0wLjgxLC0xLjQzbDAuNTksLTAuNDNsMS42MiwtMC4yOWwwLjI0LC0wLjI0bDAuMSwtMC41OGwwLjk0LDAuODRsMC4xOSwwLjA4bDIuMjEsMC4xMWwwLjI3LC0wLjE0bDAuODEsLTEuMjlsMC4zMiwtMS43NmwtMC4yNywtMS45NmwtMC4wNiwtMC4xNWwtMS4wOCwtMS4zNWwxLjAyLC0yLjc0bC0wLjA5LC0wLjM0bC0wLjYyLC0wLjVsLTAuMjIsLTAuMDZsLTEuNjYsMC4xOGwtMC41NSwtMS4wM2wwLjEyLC0wLjczbDIuODUsMC4wOWwxLjk4LDAuNjVsMi4wLDAuNTlsMC4zOCwtMC4yNWwwLjE3LC0xLjNsMS4yNiwtMi4yNGwxLjM0LC0xLjE5bDEuNTQsMC4zOGwxLjM1LDAuMTJsLTAuMTEsMS4xNWwtMC43NCwxLjM0bC0wLjUsMS42MWwtMC4zMSwyLjIybDAuMTIsMS40MWwtMC40LDAuOWwtMC4wNiwwLjg4bC0wLjI0LDAuNjdsLTEuNTcsMS4xNWwtMS4yNCwxLjQxbC0xLjA5LDIuNDNsLTAuMDMsMC4xM2wwLjA4LDEuOTVsLTAuNTUsMC42OWwtMS40NiwxLjIzbC0xLjMyLDEuNDFsLTAuNjEsLTAuMjlsLTAuMTMsLTAuNTdsLTAuMjksLTAuMjNsLTEuMzYsLTAuMDJsLTAuMjMsMC4xbC0wLjcyLDAuODFsLTAuNDEsLTAuMTZaXCIsIFwibmFtZVwiOiBcIlJlcHVibGljIG9mIHRoZSBDb25nb1wifSwgXCJDRlwiOiB7XCJwYXRoXCI6IFwiTTQ1OS40MSwyNjYuNTZsMS45LC0wLjE3bDAuMjIsLTAuMTJsMC4zNiwtMC41bDAuMTQsMC4wMmwwLjU1LDAuNTFsMC4yOSwwLjA3bDMuMTUsLTAuOTZsMC4xMiwtMC4wN2wxLjA1LC0wLjk3bDEuMjksLTAuODdsMC4xMiwtMC4zM2wtMC4xNywtMC42MWwwLjM4LC0wLjEybDIuMzYsMC4xNWwwLjE1LC0wLjAzbDIuMzYsLTEuMTdsMC4xMiwtMC4xbDEuNzgsLTIuNzJsMS4xOCwtMC45NmwxLjIzLC0wLjM0bDAuMjEsMC43OWwwLjA3LDAuMTNsMS4zNywxLjVsMC4wMSwwLjg2bC0wLjM5LDEuMGwtMC4wMSwwLjE3bDAuMTYsMC43OGwwLjEsMC4xN2wwLjkxLDAuNzZsMS44OSwxLjA5bDEuMjQsMC45MmwwLjAyLDAuNjdsMC4xMiwwLjIzbDEuNjcsMS4zbDAuOTksMS4wM2wwLjYxLDEuNDZsMC4xNCwwLjE1bDEuNzksMC45NWwwLjIsMC40bC0wLjQ0LDAuMTRsLTEuNTQsLTAuMDZsLTEuOTgsLTAuMjZsLTAuOTMsMC4yMmwtMC4xOSwwLjE0bC0wLjMsMC40OGwtMC41NywwLjA1bC0wLjkxLC0wLjQ5bC0wLjI2LC0wLjAxbC0yLjcsMS4yMWwtMS4wNCwtMC4yM2wtMC4yMSwwLjAzbC0wLjM0LDAuMTlsLTAuMTIsMC4xM2wtMC42NCwxLjNsLTEuNjcsLTAuNDNsLTEuNzcsLTAuMjRsLTEuNTgsLTAuOTFsLTIuMDYsLTAuODVsLTAuMjcsMC4wMmwtMS40MiwwLjg4bC0wLjk3LDEuMjdsLTAuMDYsMC4xNGwtMC4xOSwxLjQ2bC0xLjMsLTAuMTFsLTEuNjcsLTAuNDJsLTAuMjcsMC4wN2wtMS41NSwxLjQxbC0wLjk5LDEuNzZsLTAuMTQsLTEuMThsLTAuMTMsLTAuMjJsLTEuMSwtMC43OGwtMC44NiwtMS4ybC0wLjIsLTAuODRsLTAuMDcsLTAuMTNsLTEuMDcsLTEuMTlsMC4xNiwtMC41OWwwLjAsLTAuMTVsLTAuMjQsLTEuMDFsMC4xOCwtMS43N2wwLjUsLTAuMzhsMC4wOSwtMC4xMWwxLjE4LC0yLjRaXCIsIFwibmFtZVwiOiBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wifSwgXCJDRFwiOiB7XCJwYXRoXCI6IFwiTTQ5Ny44NSwyNzYuMjVsLTAuMTQsMi43N2wwLjIsMC4zbDAuNTcsMC4xOWwtMC40NywwLjUybC0xLjAsMC43MWwtMC45NiwxLjMxbC0wLjU2LDEuMjJsLTAuMTYsMi4wNGwtMC41NCwwLjg5bC0wLjA0LDAuMTVsLTAuMDIsMS43NmwtMC42MywwLjYxbC0wLjA5LDAuMmwtMC4wOCwxLjMzbC0wLjIsMC4xMWwtMC4xNSwwLjIxbC0wLjIzLDEuMzdsMC4wMywwLjJsMC42LDEuMDhsMC4xNiwyLjk2bDAuNDQsMi4yOWwtMC4yNCwxLjI1bDAuMDEsMC4xNWwwLjUsMS40NmwwLjA3LDAuMTJsMS40MSwxLjM3bDEuMDksMi41NmwtMC41MSwtMC4xMWwtMy40NSwwLjQ1bC0wLjY3LDAuM2wtMC4xNSwwLjE1bC0wLjcxLDEuNjFsMC4wMSwwLjI2bDAuNTIsMS4wM2wtMC40MywyLjlsLTAuMzEsMi41NWwwLjEzLDAuMjlsMC43LDAuNDZsMS43NSwwLjk5bDAuMzEsLTAuMDFsMC4yNiwtMC4xN2wwLjE1LDEuOWwtMS40NCwtMC4wMmwtMC45NCwtMS4yOGwtMC45NCwtMS4xbC0wLjE3LC0wLjFsLTEuNzYsLTAuMzNsLTAuNSwtMS4xOGwtMC40MiwtMC4xNWwtMS40NCwwLjc1bC0xLjc5LC0wLjMybC0wLjc3LC0xLjA1bC0wLjIsLTAuMTJsLTEuNTksLTAuMjNsLTAuOTcsMC4wNGwtMC4xLC0wLjUzbC0wLjI3LC0wLjI1bC0wLjg2LC0wLjA2bC0xLjEzLC0wLjE1bC0xLjYyLDAuMzdsLTEuMDQsLTAuMDZsLTAuMzIsMC4wOWwwLjExLC0yLjU2bC0wLjA4LC0wLjIxbC0wLjc3LC0wLjg3bC0wLjE3LC0xLjQxbDAuMzYsLTEuNDdsLTAuMDMsLTAuMjFsLTAuNDgsLTAuOTFsLTAuMDQsLTEuNTJsLTAuMywtMC4yOWwtMi42NSwwLjAybDAuMTMsLTAuNTNsLTAuMjksLTAuMzdsLTEuMjgsMC4wMWwtMC4yOCwwLjIxbC0wLjA3LDAuMjRsLTEuMzUsMC4wOWwtMC4yNiwwLjE4bC0wLjYyLDEuNDVsLTAuMjUsMC40MmwtMS4xNywtMC4zbC0wLjE5LDAuMDFsLTAuNzksMC4zNGwtMS40NCwwLjE4bC0xLjQxLC0xLjk2bC0wLjcsLTEuNDdsLTAuNjEsLTEuODZsLTAuMjgsLTAuMjFsLTcuMzksLTAuMDNsLTAuOTIsMC4zbC0wLjc4LC0wLjAzbC0wLjc4LDAuMjVsLTAuMTEsLTAuMjVsMC4zNSwtMC4xNWwwLjE4LC0wLjI2bDAuMDcsLTEuMDJsMC4zMywtMC41MmwwLjcyLC0wLjQybDAuNTIsMC4ybDAuMzMsLTAuMDhsMC43NiwtMC44NmwwLjk5LDAuMDJsMC4xMSwwLjQ4bDAuMTYsMC4ybDAuOTQsMC40NGwwLjM1LC0wLjA3bDEuNDYsLTEuNTZsMS40NCwtMS4yMWwwLjY4LC0wLjg1bDAuMDYsLTAuMmwtMC4wOCwtMS45OWwxLjA0LC0yLjMzbDEuMSwtMS4yM2wxLjYyLC0xLjE5bDAuMTEsLTAuMTRsMC4yOSwtMC44bDAuMDgsLTAuOTRsMC4zOCwtMC44MmwwLjAzLC0wLjE2bC0wLjEzLC0xLjM4bDAuMywtMi4xNmwwLjQ3LC0xLjUxbDAuNzMsLTEuMzFsMC4wNCwtMC4xMmwwLjE1LC0xLjUxbDAuMjEsLTEuNjZsMC44OSwtMS4xNmwxLjE2LC0wLjdsMS45LDAuNzlsMS42OSwwLjk1bDEuODEsMC4yNGwxLjg1LDAuNDhsMC4zNSwtMC4xNmwwLjcxLC0xLjQzbDAuMTYsLTAuMDlsMS4wMywwLjIzbDAuMTksLTAuMDJsMi42NSwtMS4xOWwwLjg2LDAuNDZsMC4xNywwLjAzbDAuODEsLTAuMDhsMC4yMywtMC4xNGwwLjMxLC0wLjVsMC43NSwtMC4xN2wxLjgzLDAuMjZsMS42NCwwLjA2bDAuNzIsLTAuMjFsMS4zOSwxLjlsMC4xNiwwLjExbDEuMTIsMC4zbDAuMjQsLTAuMDRsMC41OCwtMC4zNmwxLjA1LDAuMTVsMC4xNSwtMC4wMmwxLjE1LC0wLjQ0bDAuNDcsMC44NGwwLjA4LDAuMDlsMi4wOCwxLjU3WlwiLCBcIm5hbWVcIjogXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1wifSwgXCJDWlwiOiB7XCJwYXRoXCI6IFwiTTQ2My4yOSwxNTIuMjJsLTAuODgsLTAuNDdsLTAuMTgsLTAuMDNsLTEuMDgsMC4xNWwtMS44NiwtMC45NGwtMC4yMSwtMC4wMmwtMC44OCwwLjI0bC0wLjEzLDAuMDdsLTEuMjUsMS4xN2wtMS42MywtMC45MWwtMS4zOCwtMS4zNmwtMS4yMiwtMC43NWwtMC4yNCwtMS4yNGwtMC4zMywtMC43NWwxLjUzLC0wLjZsMC45OCwtMC44NGwxLjc0LC0wLjYybDAuMTEsLTAuMDdsMC40NywtMC40N2wwLjQ2LDAuMjdsMC4yNCwwLjAzbDAuOTYsLTAuM2wxLjA2LDAuOTVsMC4xNSwwLjA3bDEuNTcsMC4yNGwtMC4xLDAuNmwwLjE2LDAuMzJsMS4zNiwwLjY4bDAuNDEsLTAuMTVsMC4yOCwtMC42MmwxLjI5LDAuMjhsMC4xOSwwLjg0bDAuMjYsMC4yM2wxLjczLDAuMThsMC43NCwxLjAybC0wLjE3LDAuMGwtMC4yNSwwLjEzbC0wLjMyLDAuNDlsLTAuNDYsMC4xMWwtMC4yMiwwLjIzbC0wLjEzLDAuNTdsLTAuMzIsMC4xbC0wLjIsMC4yMmwtMC4wMywwLjE0bC0wLjY1LDAuMjVsLTEuMDUsLTAuMDVsLTAuMjgsMC4xN2wtMC4yMiwwLjQzWlwiLCBcIm5hbWVcIjogXCJDemVjaCBSZXB1YmxpY1wifSwgXCJDWVwiOiB7XCJwYXRoXCI6IFwiTTUwNS4wMywxOTMuNzVsLTEuNTEsMC42OGwtMS4wLC0wLjNsLTAuMzIsLTAuNjNsMC42OSwtMC4wNmwwLjQxLDAuMTNsMC4xOSwtMC4wbDAuNjIsLTAuMjJsMC4zMSwwLjAybDAuMDYsMC4yMmwwLjQ5LDAuMTdsMC4wNiwtMC4wMVpcIiwgXCJuYW1lXCI6IFwiQ3lwcnVzXCJ9LCBcIkNSXCI6IHtcInBhdGhcIjogXCJNMjEzLjAsMjYzLjg0bC0wLjk4LC0wLjRsLTAuMywtMC4zMWwwLjE2LC0wLjI0bDAuMDUsLTAuMjFsLTAuMDksLTAuNTZsLTAuMSwtMC4xOGwtMC43NiwtMC42NWwtMC45OSwtMC41bC0wLjc0LC0wLjI4bC0wLjEzLC0wLjU4bC0wLjEyLC0wLjE4bC0wLjY2LC0wLjQ1bC0wLjM0LC0wLjBsLTAuMTMsMC4zMWwwLjEzLDAuNTlsLTAuMTcsMC4yMWwtMC4zNCwtMC40MmwtMC4xNCwtMC4xbC0wLjcsLTAuMjJsLTAuMjMsLTAuMzRsMC4wMSwtMC42MmwwLjMxLC0wLjc0bC0wLjE0LC0wLjM4bC0wLjMsLTAuMTVsMC40NywtMC40bDEuNDgsMC42bDAuMjYsLTAuMDJsMC40NywtMC4yN2wwLjU4LDAuMTVsMC4zNSwwLjQ0bDAuMTcsMC4xMWwwLjc0LDAuMTdsMC4yNywtMC4wN2wwLjMsLTAuMjdsMC41MiwxLjA5bDAuOTcsMS4wMmwwLjc3LDAuNzFsLTAuNDEsMC4xbC0wLjIzLDAuM2wwLjAxLDEuMDJsMC4xMiwwLjI0bDAuMiwwLjE0bC0wLjA3LDAuMDVsLTAuMTEsMC4zbDAuMDgsMC4zN2wtMC4yMywwLjYzWlwiLCBcIm5hbWVcIjogXCJDb3N0YSBSaWNhXCJ9LCBcIkNVXCI6IHtcInBhdGhcIjogXCJNMjE1LjAxLDIyNi4wOWwyLjA4LDAuMThsMS45NCwwLjAzbDIuMjQsMC44NmwwLjk1LDAuOTJsMC4yNSwwLjA4bDIuMjIsLTAuMjhsMC43OSwwLjU1bDMuNjgsMi44MWwwLjE5LDAuMDZsMC43NywtMC4wM2wxLjE4LDAuNDJsLTAuMTIsMC40N2wwLjI3LDAuMzdsMS43OCwwLjFsMS41OSwwLjlsLTAuMTEsMC4yMmwtMS41LDAuM2wtMS42NCwwLjEzbC0xLjc1LC0wLjJsLTIuNjksMC4xOWwxLjAsLTAuODZsLTAuMDMsLTAuNDhsLTEuMDIsLTAuNjhsLTAuMTMsLTAuMDVsLTEuNTIsLTAuMTZsLTAuNzQsLTAuNjRsLTAuNTcsLTEuNDJsLTAuMywtMC4xOWwtMS4zNiwwLjFsLTIuMjMsLTAuNjdsLTAuNzEsLTAuNTJsLTAuMTQsLTAuMDZsLTMuMiwtMC40bC0wLjQyLC0wLjI1bDAuNTYsLTAuMzlsMC4xMiwtMC4zM2wtMC4yNywtMC4yMmwtMi40NiwtMC4xM2wtMC4yLDAuMDZsLTEuNzIsMS4zMWwtMC45NCwwLjAzbC0wLjI1LDAuMTVsLTAuMjksMC41M2wtMS4wNCwwLjI0bC0wLjI5LC0wLjA3bDAuNywtMC40M2wwLjEsLTAuMTFsMC41LC0wLjg3bDEuMDQsLTAuNTRsMS4yMywtMC40OWwxLjg2LC0wLjI1bDAuNjIsLTAuMjhaXCIsIFwibmFtZVwiOiBcIkN1YmFcIn0sIFwiU1pcIjoge1wicGF0aFwiOiBcIk01MDAuOTUsMzUzLjQxbC0wLjQxLDAuOTdsLTEuMTYsMC4yM2wtMS4yOSwtMS4yNmwtMC4wMiwtMC43MWwwLjYzLC0wLjkzbDAuMjMsLTAuN2wwLjQ3LC0wLjEybDEuMDQsMC40bDAuMzIsMS4wNWwwLjIsMS4wOFpcIiwgXCJuYW1lXCI6IFwiU3dhemlsYW5kXCJ9LCBcIlNZXCI6IHtcInBhdGhcIjogXCJNNTEwLjg0LDE5OS44M2wwLjA5LC0wLjExbDAuMDcsLTAuMmwtMC4wNCwtMS4wOGwwLjU2LC0xLjRsMS4zLC0xLjAxbDAuMSwtMC4zNGwtMC40MSwtMS4xMWwtMC4yNCwtMC4xOWwtMC44OSwtMC4xMWwtMC4yLC0xLjg0bDAuNTUsLTEuMDVsMS4zLC0xLjIybDAuMDksLTAuMTlsMC4wOSwtMS4wOWwwLjM5LDAuMjdsMC4yNSwwLjA0bDIuNjYsLTAuNzdsMS4zNSwwLjUybDIuMDYsLTAuMDFsMi45MywtMS4wOGwxLjM1LDAuMDRsMi4xNCwtMC4zNGwtMC44MywxLjE2bC0xLjMxLDAuNjhsLTAuMTYsMC4zbDAuMjMsMi4wM2wtMC45LDMuMjVsLTUuNDMsMi44N2wtNC43OSwyLjkxbC0yLjMyLC0wLjkyWlwiLCBcIm5hbWVcIjogXCJTeXJpYVwifSwgXCJLR1wiOiB7XCJwYXRoXCI6IFwiTTU5OS4wNCwxNzIuMTVsMC4zOCwtMC45bDEuNDMsLTAuMzdsNC4wNCwxLjAybDAuMzcsLTAuMjNsMC4zNiwtMS42NGwxLjE3LC0wLjUybDMuNDUsMS4yNGwwLjIsLTAuMGwwLjg2LC0wLjMxbDQuMDksMC4wOGwzLjYxLDAuMzFsMS4xOCwxLjAybDAuMTEsMC4wNmwxLjE5LDAuMzRsLTAuMTMsMC4yNmwtMy44NCwxLjU4bC0wLjEzLDAuMWwtMC44MSwxLjA4bC0zLjA4LDAuMzRsLTAuMjQsMC4xNmwtMC44NSwxLjdsLTIuNDMsLTAuMzdsLTAuMTQsMC4wMWwtMS43OSwwLjYxbC0yLjM5LDEuNGwtMC4xMiwwLjM5bDAuMjUsMC40OWwtMC40OCwwLjQ1bC00LjU3LDAuNDNsLTMuMDQsLTAuOTRsLTIuNDUsMC4xOGwwLjE0LC0xLjAybDIuNDIsMC40NGwwLjI3LC0wLjA4bDAuODEsLTAuODFsMS43NiwwLjI3bDAuMjEsLTAuMDVsMy4yMSwtMi4xNGwtMC4wMywtMC41MWwtMi45NywtMS41N2wtMC4yNiwtMC4wMWwtMS42NCwwLjY5bC0xLjM4LC0wLjg0bDEuODEsLTEuNjdsLTAuMDksLTAuNWwtMC40NiwtMC4xOFpcIiwgXCJuYW1lXCI6IFwiS3lyZ3l6c3RhblwifSwgXCJLRVwiOiB7XCJwYXRoXCI6IFwiTTUyMy4zLDI4Ny4wNGwwLjA2LDAuMTdsMS4yOSwxLjhsLTEuNDYsMC44NGwtMC4xMSwwLjExbC0wLjU1LDAuOTNsLTAuODEsMC4xNmwtMC4yNCwwLjI0bC0wLjM0LDEuNjlsLTAuODEsMS4wNmwtMC40NiwxLjU4bC0wLjc2LDAuNjNsLTMuMywtMi4zbC0wLjE2LC0xLjMybC0wLjE1LC0wLjIzbC05LjM1LC01LjI4bC0wLjAyLC0yLjRsMS45MiwtMi42M2wwLjkxLC0xLjgzbDAuMDEsLTAuMjRsLTEuMDksLTIuODZsLTAuMjksLTEuMjRsLTEuMDksLTEuNjNsMi45MywtMi44NWwwLjkyLDAuM2wwLjAsMS4xOWwwLjA5LDAuMjJsMC44NiwwLjgzbDAuMjEsMC4wOGwxLjY1LDAuMGwzLjA5LDIuMDhsMC4xNiwwLjA1bDAuNzksMC4wM2wwLjU0LC0wLjA2bDAuNTgsMC4yOGwxLjY3LDAuMmwwLjI4LC0wLjEybDAuNjksLTAuOThsMi4wNCwtMC45NGwwLjg2LDAuNzNsMC4xOSwwLjA3bDEuMSwwLjBsLTEuODIsMi4zNmwtMC4wNiwwLjE4bDAuMDMsOS4xMlpcIiwgXCJuYW1lXCI6IFwiS2VueWFcIn0sIFwiU1NcIjoge1wicGF0aFwiOiBcIk01MDUuNywyNjEuMzlsMC4wMiwxLjY0bC0wLjI3LDAuNTVsLTEuMTUsMC4wNWwtMC4yNCwwLjE1bC0wLjg1LDEuNDRsMC4yMiwwLjQ1bDEuNDQsMC4xN2wxLjE1LDEuMTJsMC40MiwwLjk1bDAuMTQsMC4xNWwxLjA2LDAuNTRsMS4zMywyLjQ1bC0zLjA2LDIuOThsLTEuNDQsMS4wOGwtMS43NSwwLjAxbC0xLjkyLDAuNTZsLTEuNSwtMC41M2wtMC4yNywwLjAzbC0wLjg1LDAuNTdsLTEuOTgsLTEuNWwtMC41NiwtMS4wMmwtMC4zNywtMC4xM2wtMS4zMiwwLjVsLTEuMDgsLTAuMTVsLTAuMiwwLjA0bC0wLjU2LDAuMzVsLTAuOSwtMC4yNGwtMS40NCwtMS45N2wtMC4zOSwtMC43N2wtMC4xMywtMC4xM2wtMS43OCwtMC45NGwtMC42NSwtMS41bC0xLjA4LC0xLjEybC0xLjU3LC0xLjIybC0wLjAyLC0wLjY4bC0wLjEyLC0wLjIzbC0xLjM3LC0xLjAybC0xLjE3LC0wLjY4bDAuMiwtMC4wOGwwLjg2LC0wLjQ4bDAuMTQsLTAuMThsMC42MywtMi4yMmwwLjYsLTEuMDJsMS40NywtMC4yOGwwLjM1LDAuNTZsMS4yOSwxLjQ4bDAuMTQsMC4wOWwwLjY5LDAuMjJsMC4yMiwtMC4wMmwwLjgzLC0wLjRsMS41OCwwLjA4bDAuMjYsMC4zOWwwLjI1LDAuMTNsMi40OSwwLjBsMC4zLC0wLjI1bDAuMDYsLTAuMzVsMS4xMywtMC40MmwwLjE4LC0wLjE4bDAuMjIsLTAuNjNsMC42OCwtMC4zOGwxLjk1LDEuMzdsMC4yMywwLjA1bDEuMjksLTAuMjZsMC4xOSwtMC4xMmwxLjIzLC0xLjhsMS4zNiwtMS4zN2wwLjA4LC0wLjI1bC0wLjIxLC0xLjUybC0wLjA2LC0wLjE1bC0wLjI1LC0wLjNsMC45NCwtMC4wOGwwLjI2LC0wLjIxbDAuMSwtMC4zMmwwLjYsMC4wOWwtMC4yNSwxLjY3bDAuMywxLjgzbDAuMTEsMC4xOWwxLjIyLDAuOTRsMC4yNSwwLjczbC0wLjA0LDEuMmwwLjI2LDAuMzFsMC4wOSwwLjAxWlwiLCBcIm5hbWVcIjogXCJTb3V0aCBTdWRhblwifSwgXCJTUlwiOiB7XCJwYXRoXCI6IFwiTTI3OC4xLDI3MC4yNmwyLjcxLDAuNDVsMC4zMSwtMC4xNGwwLjE5LC0wLjMybDEuODIsLTAuMTZsMi4yNSwwLjU2bC0xLjA5LDEuODFsLTAuMDQsMC4xOWwwLjIsMS43MmwwLjA1LDAuMTNsMC45LDEuMzVsLTAuMzksMC45OWwtMC4yMSwxLjA5bC0wLjQ4LDAuOGwtMS4yLC0wLjQ0bC0wLjE3LC0wLjAxbC0xLjEyLDAuMjRsLTAuOTUsLTAuMjFsLTAuMzUsMC4ybC0wLjI1LDAuNzNsMC4wNSwwLjI5bDAuMywwLjM1bC0wLjA2LDAuMTNsLTEuMDEsLTAuMTVsLTEuNDIsLTIuMDNsLTAuMzIsLTEuMzZsLTAuMjksLTAuMjNsLTAuNjMsLTAuMGwtMC45NSwtMS41NmwwLjQxLC0xLjE2bDAuMDEsLTAuMTdsLTAuMDgsLTAuMzVsMS4yOSwtMC41NmwwLjE4LC0wLjIybDAuMzUsLTEuOTdaXCIsIFwibmFtZVwiOiBcIlN1cmluYW1lXCJ9LCBcIktIXCI6IHtcInBhdGhcIjogXCJNNjgwLjI4LDI1Ny44OWwtMC45MywtMS4ybC0xLjI0LC0yLjU2bC0wLjU2LC0yLjlsMS40NSwtMS45MmwzLjA3LC0wLjQ2bDIuMjYsMC4zNWwyLjAzLDAuOThsMC4zOCwtMC4xMWwxLjAsLTEuNTVsMS44NiwwLjc5bDAuNTIsMS41MWwtMC4yOCwyLjgybC00LjA1LDEuODhsLTAuMTIsMC40NWwwLjc5LDEuMWwtMi4yLDAuMTdsLTIuMDgsMC45OGwtMS44OSwtMC4zM1pcIiwgXCJuYW1lXCI6IFwiQ2FtYm9kaWFcIn0sIFwiU1ZcIjoge1wicGF0aFwiOiBcIk0xOTcuMDIsMjQ4Ljg5bDAuMTgsLTAuMDVsMC41OSwwLjE3bDAuNTUsMC41MWwwLjY0LDAuMzVsMC4wNiwwLjIybDAuMzcsMC4yMWwxLjAxLC0wLjI4bDAuMzgsMC4xM2wwLjE2LDAuMTNsLTAuMTQsMC44MWwtMC4xOCwwLjM4bC0xLjIyLC0wLjAzbC0wLjg0LC0wLjIzbC0xLjExLC0wLjUybC0xLjMxLC0wLjE1bC0wLjQ5LC0wLjM4bDAuMDIsLTAuMDhsMC43NiwtMC41N2wwLjQ2LC0wLjI3bDAuMTEsLTAuMzVaXCIsIFwibmFtZVwiOiBcIkVsIFNhbHZhZG9yXCJ9LCBcIlNLXCI6IHtcInBhdGhcIjogXCJNNDY4LjAxLDE1MC4wMmwwLjA1LDAuMDdsMC4zNiwwLjFsMC44NSwtMC4zN2wxLjEyLDEuMDJsMC4zMywwLjA1bDEuMzgsLTAuNjVsMS4wNywwLjNsMC4xNiwwLjBsMS42OSwtMC40M2wxLjk1LDEuMDJsLTAuNTEsMC42NGwtMC40NSwxLjJsLTAuMzIsMC4ybC0yLjU1LC0wLjkzbC0wLjE3LC0wLjAxbC0wLjgyLDAuMmwtMC4xNywwLjExbC0wLjUzLDAuNjhsLTAuOTQsMC4zMmwtMC4xNCwtMC4xMWwtMC4yOSwtMC4wNGwtMS4xOCwwLjQ4bC0wLjk1LDAuMDlsLTAuMjYsMC4yMWwtMC4xNSwwLjQ3bC0xLjg0LDAuMzRsLTAuODIsLTAuMzFsLTEuMTQsLTAuNzNsLTAuMiwtMC44OWwwLjQyLC0wLjg0bDAuOTEsMC4wNWwwLjEyLC0wLjAybDAuODYsLTAuMzNsMC4xOCwtMC4yMWwwLjAzLC0wLjEzbDAuMzIsLTAuMWwwLjIsLTAuMjJsMC4xMiwtMC41NWwwLjM5LC0wLjFsMC4xOCwtMC4xM2wwLjMsLTAuNDVsMC40MywtMC4wWlwiLCBcIm5hbWVcIjogXCJTbG92YWtpYVwifSwgXCJLUlwiOiB7XCJwYXRoXCI6IFwiTTczNy4zMSwxODUuNzJsMC44NCwwLjA4bDAuMjcsLTAuMTJsMC44OSwtMS4ybDEuNjMsLTAuMTNsMS4xLC0wLjJsMC4yMSwtMC4xNmwwLjEyLC0wLjI0bDEuODYsMi45NWwwLjU5LDEuNzlsMC4wMiwzLjE3bC0wLjg0LDEuMzhsLTIuMjMsMC41NWwtMS45NSwxLjE0bC0xLjkxLDAuMjFsLTAuMjIsLTEuMjFsMC40NSwtMi4wN2wtMC4wMSwtMC4xN2wtMC45OSwtMi42N2wxLjU0LC0wLjRsMC4xNywtMC40NmwtMS41NSwtMi4yNFpcIiwgXCJuYW1lXCI6IFwiU291dGggS29yZWFcIn0sIFwiU0lcIjoge1wicGF0aFwiOiBcIk00NTUuNzcsMTU5LjU5bDEuNzksMC4yMWwwLjE4LC0wLjA0bDEuMiwtMC42OGwyLjEyLC0wLjA4bDAuMjEsLTAuMWwwLjM4LC0wLjQybDAuMSwwLjAxbDAuMjgsMC42MmwtMS43MSwwLjcxbC0wLjE4LDAuMjJsLTAuMjEsMS4xbC0wLjcxLDAuMjZsLTAuMiwwLjI4bDAuMDEsMC41NWwtMC41OSwtMC4wNGwtMC43OSwtMC40N2wtMC4zOCwwLjA2bC0wLjM2LDAuNDFsLTAuODQsLTAuMDVsMC4wNSwtMC4xNWwtMC41NiwtMS4yNGwwLjIxLC0xLjE3WlwiLCBcIm5hbWVcIjogXCJTbG92ZW5pYVwifSwgXCJLUFwiOiB7XCJwYXRoXCI6IFwiTTc0Ny43NiwxNzIuMDJsLTAuMjMsLTAuMDRsLTAuMjYsMC4wOGwtMS4wOSwxLjAybC0wLjc4LDEuMDZsLTAuMDYsMC4xOWwwLjA5LDEuOTVsLTEuMTIsMC41N2wtMC41MywwLjU4bC0wLjg4LDAuODJsLTEuNjksMC41MWwtMS4wOSwwLjc5bC0wLjEyLDAuMjJsLTAuMDcsMS4xN2wtMC4yMiwwLjI1bDAuMDksMC40N2wwLjk2LDAuNDZsMS4yMiwxLjFsLTAuMTksMC4zN2wtMC45MSwwLjE2bC0xLjc1LDAuMTRsLTAuMjIsMC4xMmwtMC44NywxLjE4bC0wLjk1LC0wLjA5bC0wLjMsMC4xOGwtMC45NywtMC40NGwtMC4zOSwwLjEzbC0wLjI1LDAuNDRsLTAuMjksMC4wOWwtMC4wMywtMC4ybC0wLjE4LC0wLjIzbC0wLjYyLC0wLjI1bC0wLjQzLC0wLjI5bDAuNTIsLTAuOTdsMC41MiwtMC4zbDAuMTMsLTAuMzhsLTAuMTgsLTAuNDJsMC41OSwtMS40N2wwLjAxLC0wLjIxbC0wLjE2LC0wLjQ4bC0wLjIyLC0wLjJsLTEuNDEsLTAuMzFsLTAuODIsLTAuNTVsMS43NCwtMS42MmwyLjczLC0xLjU4bDEuNjIsLTEuOTZsMC45NiwwLjc2bDAuMTcsMC4wNmwyLjE3LDAuMTFsMC4zMSwtMC4zN2wtMC4zMiwtMS4zMWwzLjYxLC0xLjIxbDAuMTYsLTAuMTNsMC43OSwtMS4zNGwxLjI1LDEuMzhaXCIsIFwibmFtZVwiOiBcIk5vcnRoIEtvcmVhXCJ9LCBcIlNPXCI6IHtcInBhdGhcIjogXCJNNTQzLjgsMjU2LjQ4bDAuNjEsLTAuMDVsMS4xNCwtMC4zN2wxLjMxLC0wLjI1bDAuMTIsLTAuMDVsMS4xMSwtMC44MWwwLjU3LC0wLjBsMC4wMywwLjM5bC0wLjIzLDEuNDlsMC4wMSwxLjI1bC0wLjUyLDAuOTJsLTAuNywyLjcxbC0xLjE5LDIuNzlsLTEuNTQsMy4ybC0yLjEzLDMuNjZsLTIuMTIsMi43OWwtMi45MiwzLjM5bC0yLjQ3LDIuMGwtMy43NiwyLjVsLTIuMzMsMS45bC0yLjc3LDMuMDZsLTAuNjEsMS4zNWwtMC4yOCwwLjI5bC0xLjIyLC0xLjY5bC0wLjAzLC04LjkybDIuMTIsLTIuNzZsMC41OSwtMC42OGwxLjQ3LC0wLjA0bDAuMTgsLTAuMDZsMi4xNSwtMS43MWwzLjE2LC0wLjExbDAuMjEsLTAuMDlsNy4wOCwtNy41NWwxLjc2LC0yLjEybDEuMTQsLTEuNTdsMC4wNiwtMC4xOGwwLjAxLC00LjY3WlwiLCBcIm5hbWVcIjogXCJTb21hbGlhXCJ9LCBcIlNOXCI6IHtcInBhdGhcIjogXCJNMzc5LjI4LDI1MC4zNGwtMC45NSwtMS44MmwtMC4wOSwtMC4xbC0wLjgzLC0wLjZsMC42MiwtMC4yOGwwLjEzLC0wLjExbDEuMjEsLTEuOGwwLjYsLTEuMzFsMC43MSwtMC42OGwxLjA5LDAuMmwwLjE4LC0wLjAybDEuMTcsLTAuNTNsMS4yNSwtMC4wM2wxLjE3LDAuNzNsMS41OSwwLjY1bDEuNDcsMS44M2wxLjU5LDEuN2wwLjEyLDEuNTZsMC40OSwxLjQ2bDAuMSwwLjE0bDAuODUsMC42NWwwLjE4LDAuODJsLTAuMDgsMC41N2wtMC4xMywwLjA1bC0xLjI5LC0wLjE5bC0wLjI5LDAuMTNsLTAuMTEsMC4xNmwtMC4zNSwwLjA0bC0xLjgzLC0wLjYxbC01Ljg0LC0wLjEzbC0wLjEyLDAuMDJsLTAuNiwwLjI2bC0wLjg3LC0wLjA2bC0xLjAxLDAuMzJsLTAuMjYsLTEuMjZsMS45LDAuMDRsMC4xNiwtMC4wNGwwLjU0LC0wLjMybDAuMzcsLTAuMDJsMC4xNSwtMC4wNWwwLjc4LC0wLjVsMC45MiwwLjQ2bDAuMTIsMC4wM2wxLjA5LDAuMDRsMC4xNSwtMC4wM2wxLjA4LC0wLjU3bDAuMTEsLTAuNDRsLTAuNTEsLTAuNzRsLTAuMzksLTAuMWwtMC43NiwwLjM5bC0wLjYyLC0wLjAxbC0wLjkyLC0wLjU4bC0wLjE4LC0wLjA1bC0wLjc5LDAuMDRsLTAuMiwwLjA5bC0wLjQ4LDAuNTFsLTIuNDEsMC4wNlpcIiwgXCJuYW1lXCI6IFwiU2VuZWdhbFwifSwgXCJTTFwiOiB7XCJwYXRoXCI6IFwiTTM5Mi4xOSwyNjcuNTNsLTAuNDQsLTAuMTJsLTEuNzMsLTAuOTdsLTEuMjQsLTEuMjhsLTAuNCwtMC44NGwtMC4yNywtMS42NWwxLjIxLC0xLjBsMC4wOSwtMC4xMmwwLjI3LC0wLjY2bDAuMzIsLTAuNDFsMC41NiwtMC4wNWwwLjE2LC0wLjA3bDAuNSwtMC40MWwxLjc1LDAuMGwwLjU5LDAuNzdsMC40OSwwLjk2bC0wLjA3LDAuNjRsMC4wNCwwLjE5bDAuMzYsMC41OGwtMC4wMywwLjg0bDAuMjQsMC4ybC0wLjY0LDAuNjVsLTEuMTMsMS4zN2wtMC4wNiwwLjE0bC0wLjEyLDAuNjZsLTAuNDMsMC41OFpcIiwgXCJuYW1lXCI6IFwiU2llcnJhIExlb25lXCJ9LCBcIlNCXCI6IHtcInBhdGhcIjogXCJNODI2Ljc0LDMxMS41MWwwLjIzLDAuMjlsLTAuOTUsLTAuMDFsLTAuMzksLTAuNjNsMC42NSwwLjI3bDAuNDUsMC4wOVpNODI1LjAxLDMwOC41MmwtMS4xOCwtMS4zOWwtMC4zNywtMS4wNmwwLjI0LDAuMGwwLjgyLDEuODRsMC40OSwwLjZaTTgyMy4yMSwzMDkuNDJsLTAuNDQsMC4wM2wtMS40MywtMC4yNGwtMC4zMiwtMC4yNGwwLjA4LC0wLjVsMS4yOSwwLjMxbDAuNzIsMC40N2wwLjExLDAuMThaTTgxNy45LDMwMy44MWwyLjU5LDEuNDRsMC4zLDAuNDFsLTEuMjEsLTAuNjZsLTEuMzQsLTAuODlsLTAuMzQsLTAuM1pNODEzLjc3LDMwMi40bDAuNDgsMC4zNGwwLjEsMC4wOGwtMC4zMywtMC4xN2wtMC4yNSwtMC4yNVpcIiwgXCJuYW1lXCI6IFwiU29sb21vbiBJc2xhbmRzXCJ9LCBcIlNBXCI6IHtcInBhdGhcIjogXCJNNTI4LjI0LDI0My4xbC0wLjIsLTAuNjlsLTAuMDcsLTAuMTJsLTAuNjksLTAuNzFsLTAuMTgsLTAuOTRsLTAuMTIsLTAuMTlsLTEuMjQsLTAuODlsLTEuMjgsLTIuMDlsLTAuNywtMi4wOGwtMC4wNywtMC4xMWwtMS43MywtMS43OWwtMC4xMSwtMC4wN2wtMS4wMywtMC4zOWwtMS41NywtMi4zNmwtMC4yNywtMS43MmwwLjEsLTEuNTNsLTAuMDMsLTAuMTVsLTEuNDQsLTIuOTNsLTEuMjUsLTEuMTNsLTEuMzQsLTAuNTZsLTAuNzIsLTEuMzNsMC4xMSwtMC40OWwtMC4wMiwtMC4ybC0wLjcsLTEuMzhsLTAuMDgsLTAuMWwtMC42OCwtMC41NmwtMC45NywtMS45OGwtMi44LC00LjAzbC0wLjI1LC0wLjEzbC0wLjg1LDAuMDFsMC4yOSwtMS4xMWwwLjEyLC0wLjk3bDAuMjMsLTAuODFsMi41MiwwLjM5bDAuMjMsLTAuMDZsMS4wOCwtMC44NGwwLjYsLTAuOTVsMS43OCwtMC4zNWwwLjIyLC0wLjE3bDAuMzcsLTAuODNsMC43NCwtMC40MmwwLjA4LC0wLjQ2bC0yLjE3LC0yLjRsNC41NSwtMS4yNmwwLjEyLC0wLjA2bDAuMzYsLTAuMzJsMi44MywwLjcxbDMuNjcsMS45MWw3LjA0LDUuNWwwLjE3LDAuMDZsNC42NCwwLjIybDIuMDYsMC4yNGwwLjU1LDEuMTVsMC4yOCwwLjE3bDEuNTYsLTAuMDZsMC45LDIuMTVsMC4xNCwwLjE1bDEuMTQsMC41N2wwLjM5LDAuODVsMC4xMSwwLjEzbDEuNTksMS4wNmwwLjEyLDAuOTFsLTAuMjMsMC44M2wwLjAxLDAuMThsMC4zMiwwLjlsMC4wNywwLjExbDAuNjgsMC43bDAuMzMsMC44NmwwLjM3LDAuNjVsMC4wOSwwLjFsMC43NiwwLjUzbDAuMjUsMC4wNGwwLjQ1LC0wLjEybDAuMzUsMC43NWwwLjEsMC42M2wwLjk2LDIuNjhsMC4yMywwLjE5bDcuNTMsMS4zM2wwLjI3LC0wLjA5bDAuMjQsLTAuMjZsMC44NywxLjQxbC0xLjU4LDQuOTZsLTcuMzQsMi41NGwtNy4yOCwxLjAybC0yLjM0LDEuMTdsLTAuMTIsMC4xbC0xLjc0LDIuNjNsLTAuODYsMC4zMmwtMC40OSwtMC42OGwtMC4yOCwtMC4xMmwtMC45MiwwLjEybC0yLjMyLC0wLjI1bC0wLjQxLC0wLjIzbC0wLjE1LC0wLjA0bC0yLjg5LDAuMDZsLTAuNjMsMC4ybC0wLjkxLC0wLjU5bC0wLjQzLDAuMTFsLTAuNjYsMS4yN2wtMC4wMywwLjIxbDAuMjEsMC44OWwtMC42LDAuNDVaXCIsIFwibmFtZVwiOiBcIlNhdWRpIEFyYWJpYVwifSwgXCJTRVwiOiB7XCJwYXRoXCI6IFwiTTQ3Ni40Miw5MC40NGwtMC4xNSwwLjFsLTIuNDMsMi44NmwtMC4wNywwLjI0bDAuMzYsMi4zMWwtMy44NCwzLjFsLTQuODMsMy4zOGwtMC4xMSwwLjE1bC0xLjgyLDUuNDVsMC4wMywwLjI2bDEuNzgsMi42OGwyLjI3LDEuOTlsLTIuMTMsMy44OGwtMi40OSwwLjgybC0wLjIsMC4yNGwtMC45NSw2LjA1bC0xLjMyLDMuMDlsLTIuODIsLTAuMzJsLTAuMywwLjE2bC0xLjM0LDIuNjRsLTIuNDgsMC4xNGwtMC43NiwtMy4xNWwtMi4wOSwtNC4wNGwtMS44NSwtNS4wMWwxLjAzLC0xLjk4bDIuMDYsLTIuNTNsMC4wNiwtMC4xM2wwLjgzLC00LjQ1bC0wLjA2LC0wLjI1bC0xLjU0LC0xLjg2bC0wLjE1LC01LjBsMS41MiwtMy40OGwyLjI4LDAuMDZsMC4yNywtMC4xNmwwLjg3LC0xLjU5bC0wLjAxLC0wLjMxbC0wLjgsLTEuMjFsMy43OSwtNS42M2w0LjA3LC03LjU0bDIuMjMsMC4wMWwwLjI5LC0wLjIybDAuNTksLTIuMTVsNC40NiwwLjY2bDAuMzQsLTAuMjZsMC4zNCwtMi42NGwxLjIxLC0wLjE0bDMuMjQsMi4wOGwzLjc4LDIuODVsMC4wNiw2LjM3bDAuMDMsMC4xNGwwLjY3LDEuMjlsLTMuOTUsMS4wN1pcIiwgXCJuYW1lXCI6IFwiU3dlZGVuXCJ9LCBcIlNEXCI6IHtcInBhdGhcIjogXCJNNTA1Ljk4LDI1OS43NWwtMC4zMSwtMC45bC0wLjEsLTAuMTRsLTEuMiwtMC45M2wtMC4yNywtMS42NmwwLjI5LC0xLjgzbC0wLjI1LC0wLjM0bC0xLjE2LC0wLjE3bC0wLjMzLDAuMjFsLTAuMTEsMC4zN2wtMS4zLDAuMTFsLTAuMjEsMC40OWwwLjU1LDAuNjhsMC4xOCwxLjI5bC0xLjMxLDEuMzNsLTEuMTgsMS43MmwtMS4wNCwwLjIxbC0yLjAsLTEuNGwtMC4zMiwtMC4wMmwtMC45NSwwLjUybC0wLjE0LDAuMTZsLTAuMjEsMC42bC0xLjE2LDAuNDNsLTAuMTksMC4yM2wtMC4wNCwwLjI3bC0yLjA4LDAuMGwtMC4yNSwtMC4zOWwtMC4yNCwtMC4xM2wtMS44MSwtMC4wOWwtMC4xNCwwLjAzbC0wLjgsMC4zOGwtMC40OSwtMC4xNmwtMS4yMiwtMS4zOWwtMC40MiwtMC42N2wtMC4zMSwtMC4xNGwtMS44MSwwLjM1bC0wLjIsMC4xNGwtMC43MiwxLjI0bC0wLjYxLDIuMTRsLTAuNzMsMC40bC0wLjYyLDAuMjJsLTAuODMsLTAuNjhsLTAuMTIsLTAuNmwwLjM4LC0wLjk3bDAuMDEsLTEuMTRsLTAuMDgsLTAuMmwtMS4zOSwtMS41M2wtMC4yNSwtMC45N2wwLjAzLC0wLjU3bC0wLjExLC0wLjI1bC0wLjgxLC0wLjY2bC0wLjAzLC0xLjM0bC0wLjA0LC0wLjE0bC0wLjUyLC0wLjk4bC0wLjMxLC0wLjE1bC0wLjQyLDAuMDdsMC4xMiwtMC40NGwwLjYzLC0xLjAzbDAuMDMsLTAuMjNsLTAuMjQsLTAuODhsMC42OSwtMC42NmwwLjAyLC0wLjQxbC0wLjQsLTAuNDZsMC41OCwtMS4zOWwxLjA0LC0xLjcxbDEuOTcsMC4xNmwwLjMyLC0wLjNsLTAuMTIsLTEwLjI0bDAuMDIsLTAuOGwyLjU5LC0wLjAxbDAuMywtMC4zbDAuMCwtNC45MmwyOS4xOSwwLjBsMC42OCwyLjE3bC0wLjQsMC4zNWwtMC4xLDAuMjdsMC4zNiwyLjY5bDAuOTMsMy4xNWwwLjEyLDAuMTZsMi4wNSwxLjRsLTAuOTksMS4xNWwtMS43NSwwLjRsLTAuMTUsMC4wOGwtMC43OSwwLjc5bC0wLjA4LDAuMTdsLTAuMjQsMS42OWwtMS4wNywzLjc1bC0wLjAsMC4xNmwwLjI1LDAuOTZsLTAuMzgsMi4xbC0wLjk4LDIuNDFsLTEuNTIsMS4zbC0xLjA3LDEuOTRsLTAuMjUsMC45OWwtMS4wOCwwLjY0bC0wLjEzLDAuMThsLTAuNDYsMS42NVpcIiwgXCJuYW1lXCI6IFwiU3VkYW5cIn0sIFwiRE9cIjoge1wicGF0aFwiOiBcIk0yNDEuNywyMzQuOTdsMC4xNSwtMC4yMmwxLjczLDAuMDFsMS40MywwLjY0bDAuMTUsMC4wM2wwLjQ1LC0wLjA0bDAuMzYsMC43NGwwLjI4LDAuMTdsMS4wMiwtMC4wNGwtMC4wNCwwLjQzbDAuMjcsMC4zM2wxLjAzLDAuMDlsMC45MSwwLjdsLTAuNTcsMC42NGwtMC45OSwtMC40N2wtMC4xNiwtMC4wM2wtMS4xMSwwLjExbC0wLjc5LC0wLjEybC0wLjI2LDAuMDlsLTAuMzgsMC40bC0wLjY2LDAuMTFsLTAuMjgsLTAuNDVsLTAuMzgsLTAuMTJsLTAuODMsMC4zN2wtMC4xNCwwLjEzbC0wLjg1LDEuNDlsLTAuMjcsLTAuMTdsLTAuMSwtMC41OGwwLjA1LC0wLjY3bC0wLjA3LC0wLjIxbC0wLjQ0LC0wLjUzbDAuMzUsLTAuMjVsMC4xMiwtMC4xOWwwLjE5LC0xLjBsLTAuMiwtMS40WlwiLCBcIm5hbWVcIjogXCJEb21pbmljYW4gUmVwdWJsaWNcIn0sIFwiREpcIjoge1wicGF0aFwiOiBcIk01MjguNzgsMjUzLjM2bDAuMzQsMC40NWwtMC4wNiwwLjc2bC0xLjI2LDAuNTRsLTAuMDUsMC41M2wwLjgyLDAuNTNsLTAuNTcsMC44M2wtMC4zLC0wLjI1bC0wLjI3LC0wLjA1bC0wLjU2LDAuMTdsLTEuMDcsLTAuMDNsLTAuMDQsLTAuNTZsLTAuMTYsLTAuNTZsMC43NiwtMS4wN2wwLjc2LC0wLjk3bDAuODksMC4xOGwwLjI1LC0wLjA2bDAuNTEsLTAuNDJaXCIsIFwibmFtZVwiOiBcIkRqaWJvdXRpXCJ9LCBcIkRLXCI6IHtcInBhdGhcIjogXCJNNDUyLjQsMTI5LjA3bC0xLjI3LDIuMzlsLTIuMjUsLTEuNjlsLTAuMjYsLTEuMDhsMy4xNSwtMS4wbDAuNjMsMS4zOVpNNDQ3Ljg3LDEyNi4yNWwtMC4zNSwwLjc2bC0wLjQ3LC0wLjI0bC0wLjM4LDAuMDlsLTEuOCwyLjUzbC0wLjAzLDAuMjlsMC41NiwxLjRsLTEuMjIsMC40bC0xLjY4LC0wLjQxbC0wLjkyLC0xLjc2bC0wLjA3LC0zLjQ3bDAuMzgsLTAuODhsMC42MiwtMC45M2wyLjA3LC0wLjIxbDAuMTksLTAuMWwwLjg0LC0wLjk1bDEuNSwtMC43NmwtMC4wNiwxLjI2bC0wLjcsMS4xbC0wLjAzLDAuMjVsMC4zLDEuMGwwLjE4LDAuMTlsMS4wNiwwLjQyWlwiLCBcIm5hbWVcIjogXCJEZW5tYXJrXCJ9LCBcIkRFXCI6IHtcInBhdGhcIjogXCJNNDQ1LjUxLDEzMS42OWwwLjAzLDAuOTRsMC4yMSwwLjI4bDIuMzIsMC43NGwtMC4wMiwxLjBsMC4zNywwLjNsMi41NSwtMC42NWwxLjM2LC0wLjg5bDIuNjMsMS4yN2wxLjA5LDEuMDFsMC41MSwxLjUxbC0wLjYsMC43OGwtMC4wLDAuMzZsMC44OCwxLjE3bDAuNTgsMS42OGwtMC4xOCwxLjA4bDAuMDMsMC4xOGwwLjg3LDEuODFsLTAuNjYsMC4ybC0wLjU1LC0wLjMybC0wLjM2LDAuMDVsLTAuNTgsMC41OGwtMS43MywwLjYybC0wLjk5LDAuODRsLTEuNzcsMC43bC0wLjE2LDAuNGwwLjQyLDAuOTRsMC4yNiwxLjM0bDAuMTQsMC4ybDEuMjUsMC43NmwxLjIyLDEuMmwtMC43MSwxLjJsLTAuODEsMC4zN2wtMC4xNywwLjMybDAuMzQsMS45OWwtMC4wNCwwLjA5bC0wLjQ3LC0wLjM5bC0wLjE3LC0wLjA3bC0xLjIsLTAuMWwtMS44NSwwLjU3bC0yLjE1LC0wLjEzbC0wLjI5LDAuMThsLTAuMjEsMC41bC0wLjk2LC0wLjY3bC0wLjI0LC0wLjA1bC0wLjY3LDAuMTZsLTIuNiwtMC45NGwtMC4zNCwwLjFsLTAuNDIsMC41N2wtMS42NCwtMC4wMmwwLjI2LC0xLjg4bDEuMjQsLTIuMTVsLTAuMjEsLTAuNDVsLTMuNTQsLTAuNThsLTAuOTgsLTAuNzFsMC4xMiwtMS4yNmwtMC4wNSwtMC4ybC0wLjQ0LC0wLjY0bDAuMjcsLTIuMThsLTAuMzgsLTMuMTRsMS4xNywtMC4wbDAuMjcsLTAuMTdsMC42MywtMS4yNmwwLjY1LC0zLjE3bC0wLjAyLC0wLjE3bC0wLjQxLC0xLjBsMC4zMiwtMC40N2wxLjc3LC0wLjE2bDAuMzcsMC42bDAuNDcsMC4wNmwxLjcsLTEuNjlsMC4wNiwtMC4zM2wtMC41NSwtMS4yNGwtMC4wOSwtMS41MWwxLjUsMC4zNmwwLjE2LC0wLjAxbDEuMjIsLTAuNFpcIiwgXCJuYW1lXCI6IFwiR2VybWFueVwifSwgXCJZRVwiOiB7XCJwYXRoXCI6IFwiTTU1My41MywyNDIuNjVsLTEuNTEsMC41OGwtMC4xNywwLjE2bC0wLjQ4LDEuMTRsLTAuMDcsMC43OWwtMi4zMSwxLjBsLTMuOTgsMS4xOWwtMi4yOCwxLjhsLTAuOTcsMC4xMmwtMC43LC0wLjE0bC0wLjIzLDAuMDVsLTEuNDIsMS4wM2wtMS41MSwwLjQ3bC0yLjA3LDAuMTNsLTAuNjgsMC4xNWwtMC4xNywwLjFsLTAuNDksMC42bC0wLjU3LDAuMTZsLTAuMTgsMC4xM2wtMC4zLDAuNDlsLTEuMDYsLTAuMDVsLTAuMTMsMC4wMmwtMC43MywwLjMybC0xLjQ4LC0wLjExbC0wLjU1LC0xLjI2bDAuMDcsLTEuMzJsLTAuMDQsLTAuMTZsLTAuMzksLTAuNzJsLTAuNDgsLTEuODVsLTAuNTIsLTAuNzlsMC4wOCwtMC4wMmwwLjIyLC0wLjM2bC0wLjIzLC0xLjA1bDAuMjQsLTAuMzlsMC4wNCwtMC4xOWwtMC4wOSwtMC45NWwwLjk2LC0wLjcybDAuMTEsLTAuMzFsLTAuMjMsLTAuOThsMC40NiwtMC44OGwwLjc1LDAuNDlsMC4yNiwwLjAzbDAuNjMsLTAuMjJsMi43NiwtMC4wNmwwLjUsMC4yNWwyLjQyLDAuMjZsMC44NSwtMC4xMWwwLjUyLDAuNzFsMC4zNSwwLjFsMS4xNywtMC40M2wwLjE1LC0wLjEybDEuNzUsLTIuNjRsMi4yMiwtMS4xMWw2Ljk1LC0wLjk2bDIuNTUsNS41OFpcIiwgXCJuYW1lXCI6IFwiWWVtZW5cIn0sIFwiQVRcIjoge1wicGF0aFwiOiBcIk00NjMuMTcsMTU0LjE1bC0wLjE0LDAuOTlsLTEuMTUsMC4wMWwtMC4yNCwwLjQ3bDAuMzksMC41NmwtMC43NSwxLjg0bC0wLjM2LDAuNGwtMi4wNiwwLjA3bC0wLjE0LDAuMDRsLTEuMTgsMC42N2wtMS45NiwtMC4yM2wtMy40MywtMC43OGwtMC41LC0wLjk3bC0wLjMzLC0wLjE2bC0yLjQ3LDAuNTVsLTAuMiwwLjE2bC0wLjE4LDAuMzdsLTEuMjcsLTAuMzhsLTEuMjgsLTAuMDlsLTAuODEsLTAuNDFsMC4yNSwtMC41MWwwLjAzLC0wLjE4bC0wLjA1LC0wLjI4bDAuMzUsLTAuMDhsMS4xNiwwLjgxbDAuNDUsLTAuMTNsMC4yNywtMC42NGwyLjAsMC4xMmwxLjg0LC0wLjU3bDEuMDUsMC4wOWwwLjcxLDAuNTlsMC40NywtMC4xMWwwLjIzLC0wLjU0bDAuMDIsLTAuMTdsLTAuMzIsLTEuODVsMC42OSwtMC4zMWwwLjEzLC0wLjEybDAuNzMsLTEuMjNsMS42MSwwLjg5bDAuMzUsLTAuMDRsMS4zNSwtMS4yN2wwLjcsLTAuMTlsMS44NCwwLjkzbDAuMTgsMC4wM2wxLjA4LC0wLjE1bDAuODEsMC40M2wtMC4wNywwLjE1bC0wLjAyLDAuMmwwLjI0LDEuMDZaXCIsIFwibmFtZVwiOiBcIkF1c3RyaWFcIn0sIFwiRFpcIjoge1wicGF0aFwiOiBcIk00NTAuNTgsMjI0Ljk0bC04LjMxLDQuODZsLTcuMjMsNS4xMmwtMy40NiwxLjEzbC0yLjQyLDAuMjJsLTAuMDIsLTEuMzNsLTAuMiwtMC4yOGwtMS4xNSwtMC40MmwtMS40NSwtMC42OWwtMC41NSwtMS4xM2wtMC4xLC0wLjEybC04LjQ1LC01LjcybC0xNy43MiwtMTIuMTdsMC4wMywtMC4zOGwtMC4wMiwtMy4yMWwzLjg0LC0xLjkxbDIuNDYsLTAuNDFsMi4xLC0wLjc1bDAuMTQsLTAuMTFsMC45LC0xLjNsMi44NCwtMS4wNmwwLjE5LC0wLjI3bDAuMDksLTEuODFsMS4yMSwtMC4ybDAuMTUsLTAuMDdsMS4wNiwtMC45NmwzLjE5LC0wLjQ2bDAuMjMsLTAuMThsMC40NiwtMS4wOGwtMC4wOCwtMC4zNGwtMC42LC0wLjU0bC0wLjgzLC0yLjg1bC0wLjE4LC0xLjhsLTAuODIsLTEuNTdsMi4xMywtMS4zN2wyLjY1LC0wLjQ5bDAuMTMsLTAuMDVsMS41NSwtMS4xNWwyLjM0LC0wLjg1bDQuMiwtMC41MWw0LjA3LC0wLjIzbDEuMjEsMC40MWwwLjIzLC0wLjAxbDIuMywtMS4xMWwyLjUyLC0wLjAybDAuOTQsMC42MmwwLjIsMC4wNWwxLjI1LC0wLjEzbC0wLjM2LDEuMDNsLTAuMDEsMC4xNGwwLjM5LDIuNjZsLTAuNTYsMi4ybC0xLjQ5LDEuNTJsLTAuMDgsMC4yNGwwLjIyLDIuMTJsMC4xMSwwLjJsMS45NCwxLjU4bDAuMDIsMC41NGwwLjEyLDAuMjNsMS40NSwxLjA2bDEuMDQsNC44NWwwLjgxLDIuNDJsMC4xMywxLjE5bC0wLjQzLDIuMTdsMC4xNywxLjI4bC0wLjMxLDEuNTNsMC4yLDEuNTZsLTAuOSwxLjAybC0wLjAxLDAuMzhsMS40MywxLjg4bDAuMDksMS4wNmwwLjA0LDAuMTNsMC44OSwxLjQ4bDAuMzcsMC4xMmwxLjAzLC0wLjQzbDEuNzksMS4xMmwwLjg5LDEuMzRaXCIsIFwibmFtZVwiOiBcIkFsZ2VyaWFcIn0sIFwiVVNcIjoge1wicGF0aFwiOiBcIk04OTIuNjQsOTkuMDVsMS4xNiwwLjU3bDAuMjEsMC4wMmwxLjQ1LC0wLjM4bDEuOTIsMC45OWwyLjE3LDAuNDdsLTEuNjUsMC43MmwtMS43NSwtMC43OWwtMC45MywtMC43bC0wLjIxLC0wLjA2bC0yLjExLDAuMjJsLTAuMzUsLTAuMmwwLjA5LC0wLjg3Wk0xODMuMjksMTUwLjM3bDAuMzksMS41NGwwLjEyLDAuMTdsMC43OCwwLjU1bDAuMTQsMC4wNWwxLjc0LDAuMmwyLjUyLDAuNWwyLjQsMC45OGwwLjE3LDAuMDJsMS45NiwtMC40bDMuMDEsMC44MWwwLjkxLC0wLjAybDIuMjIsLTAuODhsNC42NywyLjMzbDMuODYsMi4wMWwwLjIxLDAuNzFsMC4xNSwwLjE4bDAuMzMsMC4xN2wtMC4wMiwwLjA1bDAuMjMsMC40M2wwLjY3LDAuMWwwLjIxLC0wLjA1bDAuMSwtMC4wN2wwLjA1LDAuMjlsMC4wOSwwLjE2bDAuNSwwLjVsMC4yMSwwLjA5bDAuNTYsMC4wbDAuMTMsMC4xM2wtMC4yLDAuMzZsMC4xMiwwLjQxbDIuNDksMS4zOWwwLjk5LDUuMjRsLTAuNjksMS42OGwtMS4xNiwxLjY0bC0wLjYsMS4xOGwtMC4wNiwwLjMxbDAuMDQsMC4yMmwwLjI4LDAuNDNsMC4xMSwwLjFsMC44NSwwLjQ3bDAuMTUsMC4wNGwwLjYzLDAuMGwwLjE0LC0wLjA0bDIuODcsLTEuNThsMi42LC0wLjQ5bDMuMjgsLTEuNWwwLjE3LC0wLjIzbDAuMDQsLTAuNDNsLTAuMjMsLTAuOTNsLTAuMjQsLTAuMzlsMC43NCwtMC4zMmw0LjcsLTAuMDFsMC4yNSwtMC4xM2wwLjc3LC0xLjE1bDIuOSwtMi40MWwxLjA0LC0wLjUybDguMzUsLTAuMDJsMC4yOCwtMC4yMWwwLjIsLTAuNmwwLjcsLTAuMTRsMS4wNiwtMC40OGwwLjEzLC0wLjExbDAuOTIsLTEuNDlsMC43NSwtMi4zOWwxLjY3LC0yLjA4bDAuNTksMC42bDAuMywwLjA3bDEuNTIsLTAuNDlsMC44OCwwLjcybC0wLjAsNC4xNGwwLjA4LDAuMmwxLjYsMS43MmwwLjMxLDAuNzJsLTIuNDIsMS4zNWwtMi41NSwxLjA1bC0yLjY0LDAuOWwtMC4xNCwwLjExbC0xLjMzLDEuODFsLTAuNDQsMC43bC0wLjA1LDAuMTVsLTAuMDMsMS42bDAuMDMsMC4xNGwwLjgzLDEuNTlsMC4yNCwwLjE2bDAuNzgsMC4wNmwtMS4xNSwwLjMzbC0xLjI1LC0wLjA0bC0xLjgzLDAuNTJsLTIuNTEsMC4yOWwtMi4xNywwLjg4bC0wLjE3LDAuMzZsMC4zMywwLjIybDMuNTUsLTAuNTRsMC4xNSwwLjExbC0yLjg3LDAuNzNsLTEuMTksMC4wbC0wLjE2LC0wLjMzbC0wLjM2LDAuMDZsLTAuNzYsMC44MmwwLjE3LDAuNWwwLjQyLDAuMDhsLTAuNDUsMS43NWwtMS40LDEuNzRsLTAuMDQsLTAuMTdsLTAuMjEsLTAuMjJsLTAuNDgsLTAuMTNsLTAuNzcsLTAuNjlsLTAuMzYsLTAuMDNsLTAuMTIsMC4zNGwwLjUyLDEuNThsMC4wOSwwLjE0bDAuNTIsMC40M2wwLjAzLDAuODdsLTAuNzQsMS4wNWwtMC4zOSwwLjYzbDAuMDUsLTAuMTJsLTAuMDgsLTAuMzRsLTEuMTksLTEuMDNsLTAuMjgsLTIuMzFsLTAuMjYsLTAuMjZsLTAuMzIsMC4xOWwtMC40OCwxLjI3bC0wLjAxLDAuMTlsMC4zOSwxLjMzbC0xLjE0LC0wLjMxbC0wLjM2LDAuMThsMC4xNCwwLjM4bDEuNTcsMC44NWwwLjEsMi41OGwwLjIyLDAuMjhsMC41NSwwLjE1bDAuMjEsMC44MWwwLjMzLDIuNzJsLTEuNDYsMS45NGwtMi41LDAuODFsLTAuMTIsMC4wN2wtMS41OCwxLjU4bC0xLjE1LDAuMTdsLTAuMTUsMC4wNmwtMS4yNywxLjAzbC0wLjA5LDAuMTNsLTAuMzIsMC44NWwtMi43MSwxLjc5bC0xLjQ1LDEuMzdsLTEuMTgsMS42NGwtMC4wNSwwLjEybC0wLjM5LDEuOTZsMC4wLDAuMTNsMC40NCwxLjkxbDAuODUsMi4zN2wxLjEsMS45MWwwLjAzLDEuMmwxLjE2LDMuMDdsLTAuMDgsMS43NGwtMC4xLDAuOTlsLTAuNTcsMS40OGwtMC41NCwwLjI0bC0wLjk3LC0wLjI2bC0wLjM0LC0xLjAybC0wLjEyLC0wLjE2bC0wLjg5LC0wLjU4bC0yLjQ0LC00LjI4bC0wLjM0LC0wLjk0bDAuNDksLTEuNzFsLTAuMDIsLTAuMjFsLTAuNywtMS41bC0yLjAsLTIuMzVsLTAuMTEsLTAuMDhsLTAuOTgsLTAuNDJsLTAuMjUsMC4wMWwtMi40MiwxLjE5bC0wLjI2LC0wLjA4bC0xLjI2LC0xLjI5bC0xLjU3LC0wLjY4bC0wLjE2LC0wLjAybC0yLjc5LDAuMzRsLTIuMTgsLTAuM2wtMS45OCwwLjE5bC0xLjEyLDAuNDVsLTAuMTQsMC40NGwwLjQsMC42NWwtMC4wNCwxLjAybDAuMDksMC4yMmwwLjI5LDAuM2wtMC4wNiwwLjA1bC0wLjc3LC0wLjMzbC0wLjI2LDAuMDFsLTAuODcsMC40OGwtMS42NCwtMC4wOGwtMS43OSwtMS4zOWwtMC4yMywtMC4wNmwtMi4xMSwwLjMzbC0xLjc1LC0wLjYxbC0wLjE0LC0wLjAxbC0xLjYxLDAuMmwtMi4xMSwwLjY0bC0wLjExLDAuMDZsLTIuMjUsMS45OWwtMi41MywxLjIxbC0xLjQzLDEuMzhsLTAuNTgsMS4yMmwtMC4wMywwLjEybC0wLjAzLDEuODZsMC4xMywxLjMybDAuMywwLjYybC0wLjQ2LDAuMDRsLTEuNzEsLTAuNTdsLTEuODUsLTAuNzlsLTAuNjMsLTEuMTRsLTAuNTQsLTEuODVsLTAuMDcsLTAuMTJsLTEuNDUsLTEuNTFsLTAuODYsLTEuNThsLTEuMjYsLTEuODdsLTAuMDksLTAuMDlsLTEuNzYsLTEuMDlsLTAuMTcsLTAuMDRsLTIuMDUsMC4wNWwtMC4yMywwLjEybC0xLjQ0LDEuOTdsLTEuODQsLTAuNzJsLTEuMTksLTAuNzZsLTAuNiwtMS40NWwtMC45LC0xLjUybC0xLjQ5LC0xLjIxbC0xLjI3LC0wLjg3bC0wLjg5LC0wLjk2bC0wLjIyLC0wLjFsLTQuMzQsLTAuMGwtMC4zLDAuM2wtMC4wLDAuODRsLTYuNjIsMC4wMmwtNS42NiwtMS45M2wtMy40OCwtMS4yNGwwLjExLC0wLjI1bC0wLjMsLTAuNDJsLTMuMTgsMC4zbC0yLjYsMC4ybC0wLjM1LC0xLjE5bC0wLjA4LC0wLjEzbC0xLjYyLC0xLjYxbC0wLjEzLC0wLjA4bC0xLjAyLC0wLjI5bC0wLjIyLC0wLjY2bC0wLjI1LC0wLjJsLTEuMzEsLTAuMTNsLTAuODIsLTAuN2wtMC4xNiwtMC4wN2wtMi4yNSwtMC4yN2wtMC40OCwtMC4zNGwtMC4yOCwtMS40NGwtMC4wNywtMC4xNGwtMi40MSwtMi44NGwtMi4wMywtMy44OWwwLjA4LC0wLjU4bC0wLjEsLTAuMjdsLTEuMDgsLTAuOTRsLTEuODcsLTIuMzZsLTAuMzMsLTIuMzFsLTAuMDcsLTAuMTVsLTEuMjQsLTEuNWwwLjUyLC0yLjRsLTAuMDksLTIuNTdsLTAuNzgsLTIuM2wwLjk2LC0yLjgzbDAuNjEsLTUuNjZsLTAuNDYsLTQuMjZsLTAuNzksLTIuNzFsLTAuNjgsLTEuNGwwLjEzLC0wLjI2bDMuMjQsMC45N2wxLjI4LDIuODhsMC41MiwwLjA2bDAuNjIsLTAuODRsMC4wNiwtMC4yMmwtMC40LC0yLjYxbC0wLjc0LC0yLjI5bDY4LjksLTAuMGwwLjMsLTAuM2wwLjAxLC0wLjk1bDAuMzIsLTAuMDFaTTMyLjUsNjcuNDNsMS43NSwxLjk5bDAuNDEsMC4wNGwxLjAyLC0wLjgxbDMuNzksMC4yNWwtMC4xLDAuNzJsMC4yNCwwLjM0bDMuODMsMC43N2wyLjYsLTAuNDRsNS4yMSwxLjQxbDQuODQsMC40M2wxLjksMC41N2wwLjE1LDAuMDFsMy4yNSwtMC43MWwzLjcyLDEuMzJsMi41MiwwLjU4bC0wLjAzLDM4LjE0bDAuMjksMC4zbDIuNDEsMC4xMWwyLjM0LDEuMGwxLjcsMS41OWwyLjIyLDIuNDJsMC40MiwwLjAzbDIuNDEsLTIuMDRsMi4yNSwtMS4wOGwxLjIzLDEuNzZsMS43MSwxLjUzbDIuMjQsMS42MmwxLjU0LDIuNTZsMi41Niw0LjA5bDAuMTEsMC4xMWw0LjEsMi4xN2wwLjA2LDEuOTNsLTEuMTIsMS4zNWwtMS4yMiwtMS4xNGwtMi4wOCwtMS4wNWwtMC42OCwtMi45NGwtMC4wOSwtMC4xNmwtMy4xOCwtMi44NGwtMS4zMiwtMy4zNWwtMC4yNSwtMC4xOWwtMi40MywtMC4yNGwtMy45MywtMC4wOWwtMi44NSwtMS4wMmwtNS4yNCwtMy44NWwtNi43NywtMi4wNGwtMy41MiwwLjNsLTQuODQsLTEuN2wtMi45NiwtMS42bC0wLjIzLC0wLjAybC0yLjc4LDAuOGwtMC4yMSwwLjM1bDAuNDYsMi4zMWwtMS4xMSwwLjE5bC0yLjksMC43OGwtMi4yNCwxLjI2bC0yLjQyLDAuNjhsLTAuMjksLTEuNzlsMS4wNywtMy40OWwyLjU0LC0xLjExbDAuMTIsLTAuNDVsLTAuNjksLTAuOTZsLTAuNDEsLTAuMDdsLTMuMTksMi4xMmwtMS43NiwyLjU0bC0zLjU3LDIuNjJsLTAuMDMsMC40NmwxLjYzLDEuNTlsLTIuMTQsMi4zOGwtMi42NCwxLjQ5bC0yLjQ5LDEuMDlsLTAuMTYsMC4xN2wtMC41OCwxLjQ4bC0zLjgsMS43OWwtMC4xNCwwLjE0bC0wLjc1LDEuNTdsLTIuNzUsMS40MWwtMS42MiwtMC4yNWwtMC4xNiwwLjAybC0yLjM1LDAuOThsLTIuNTQsMS4xOWwtMi4wNiwxLjE1bC00LjA1LDAuOTNsLTAuMSwtMC4xNWwyLjQ1LC0xLjQ1bDIuNDksLTEuMWwyLjYxLC0xLjg4bDMuMDMsLTAuMzlsMC4xOSwtMC4xbDEuMiwtMS40MWwzLjQzLC0yLjExbDAuNjEsLTAuNzVsMS44MSwtMS4yNGwwLjEzLC0wLjJsMC40MiwtMi43bDEuMjQsLTIuMTJsLTAuMDMsLTAuMzVsLTAuMzQsLTAuMDlsLTIuNzMsMS4wNWwtMC42NywtMC41M2wtMC4zOSwwLjAybC0xLjEzLDEuMTFsLTEuNDMsLTEuNjJsLTAuNDksMC4wNmwtMC40MSwwLjhsLTAuNjcsLTEuMzFsLTAuNDIsLTAuMTJsLTIuNDMsMS40M2wtMS4xOCwtMC4wbC0wLjE4LC0xLjg2bDAuNDMsLTEuM2wtMC4wOSwtMC4zM2wtMS42MSwtMS4zM2wtMC4yNiwtMC4wNmwtMy4xMSwwLjY4bC0yLjAsLTEuNjZsLTEuNjEsLTAuODVsLTAuMDEsLTEuOTdsLTAuMTEsLTAuMjNsLTEuNzYsLTEuNDhsMC44NiwtMS45NmwyLjAxLC0yLjEzbDAuODgsLTEuOTRsMS43OSwtMC4yNWwxLjY1LDAuNmwwLjMxLC0wLjA2bDEuOTEsLTEuOGwxLjY3LDAuMzFsMC4yMiwtMC4wNGwxLjkxLC0xLjIzbDAuMTMsLTAuMzNsLTAuNDcsLTEuODJsLTAuMTUsLTAuMTlsLTEuMCwtMC41MmwxLjUxLC0xLjI3bDAuMDksLTAuMzRsLTAuMjksLTAuMTlsLTEuNjIsMC4wNmwtMi42NiwwLjg4bC0wLjEzLDAuMDlsLTAuNjIsMC43MmwtMS43NywtMC44bC0wLjE2LC0wLjAybC0zLjQ4LDAuNDRsLTMuNSwtMC45MmwtMS4wNiwtMS42MWwtMi43OCwtMi4wOWwzLjA3LC0xLjUxbDUuNTIsLTIuMDFsMS42NSwwLjBsLTAuMjgsMS43M2wwLjMxLDAuMzVsNS4yOSwtMC4xNmwwLjIzLC0wLjQ5bC0yLjAzLC0yLjU5bC0wLjEsLTAuMDhsLTMuMDMsLTEuNThsLTEuNzksLTIuMTJsLTIuNCwtMS44M2wtMy4xOCwtMS4yN2wxLjEzLC0xLjg0bDQuMjgsLTAuMTRsMC4xNSwtMC4wNWwzLjE2LC0yLjBsMC4xMywtMC4xN2wwLjU3LC0yLjA3bDIuNDMsLTIuMDJsMi40MiwtMC41Mmw0LjY3LC0xLjk4bDIuMjIsMC4yOWwwLjIsLTAuMDRsMy43NCwtMi4zN2wzLjU3LDAuOTFaTTM3LjY2LDEyMy40OWwtMi4zMSwxLjI2bC0xLjA0LC0wLjc1bC0wLjMxLC0xLjM1bDIuMDYsLTEuMTZsMS4yNCwtMC41MWwxLjQ4LDAuMjJsMC43NiwwLjgxbC0xLjg5LDEuNDlaTTMwLjg5LDIzMy44NGwxLjIsMC41N2wwLjM1LDAuM2wwLjQ4LDAuNjlsLTEuNiwwLjg2bC0wLjMsMC4zMWwtMC4yNCwtMC4xNGwwLjA1LC0wLjU0bC0wLjAyLC0wLjE1bC0wLjM2LC0wLjgzbDAuMDUsLTAuMTJsMC4zOSwtMC4zOGwwLjA3LC0wLjMxbC0wLjA5LC0wLjI3Wk0yOS4wNiwyMzEuODlsMC41LDAuMTRsMC4zMSwwLjE5bC0wLjQ2LDAuMWwtMC4zNCwtMC40M1pNMjUuMDIsMjMwLjEzbDAuMiwtMC4xMWwwLjQsMC40N2wtMC40MywtMC4wNWwtMC4xNywtMC4zMVpNMjEuMjksMjI4LjY4bDAuMSwtMC4wN2wwLjIyLDAuMDJsMC4wMiwwLjIxbC0wLjAyLDAuMDJsLTAuMzIsLTAuMThaTTYuMCwxMTMuMzNsLTEuMTksMC40NWwtMS41LC0wLjY0bC0wLjk0LC0wLjYzbDEuNzYsLTAuNDZsMS43MSwwLjI5bDAuMTYsMC45OFpcIiwgXCJuYW1lXCI6IFwiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhXCJ9LCBcIkxWXCI6IHtcInBhdGhcIjogXCJNNDczLjk5LDEyNy4xNmwwLjA3LC0yLjE1bDEuMTUsLTIuMTFsMi4wNSwtMS4wN2wxLjg0LDIuNDhsMC4yNSwwLjEybDIuMDEsLTAuMDdsMC4yOSwtMC4yNWwwLjQ1LC0yLjU4bDEuODUsLTAuNTZsMC45OCwwLjRsMi4xMywxLjMzbDAuMTYsMC4wNWwxLjk3LDAuMDFsMS4wMiwwLjdsMC4yMSwxLjY3bDAuNzEsMS44NGwtMi40NCwxLjIzbC0xLjM2LDAuNTNsLTIuMjgsLTEuNjJsLTAuMTIsLTAuMDVsLTEuMTgsLTAuMmwtMC4yOCwtMC42bC0wLjMxLC0wLjE3bC0yLjQzLDAuMzVsLTQuMTcsLTAuMjNsLTAuMTIsMC4wMmwtMi40NSwwLjkzWlwiLCBcIm5hbWVcIjogXCJMYXR2aWFcIn0sIFwiVVlcIjoge1wicGF0aFwiOiBcIk0yNzYuOSwzNjMuMTdsMS4zLC0wLjIzbDIuNCwyLjA0bDAuMjIsMC4wN2wwLjgyLC0wLjA3bDIuNDgsMS43bDEuOTMsMS41bDEuMjgsMS42N2wtMC45NSwxLjE0bC0wLjA0LDAuMzFsMC42MywxLjQ1bC0wLjk2LDEuNTdsLTIuNjUsMS40N2wtMS43MywtMC41M2wtMC4xNSwtMC4wMWwtMS4yNSwwLjI4bC0yLjIyLC0xLjE2bC0wLjE2LC0wLjAzbC0xLjU2LDAuMDhsLTEuMzMsLTEuMzZsMC4xNywtMS41OGwwLjQ4LC0wLjU1bDAuMDcsLTAuMmwtMC4wMiwtMi43NGwwLjY2LC0yLjhsMC41NywtMi4wMlpcIiwgXCJuYW1lXCI6IFwiVXJ1Z3VheVwifSwgXCJMQlwiOiB7XCJwYXRoXCI6IFwiTTUxMC40NCwxOTguMTFsLTAuNDgsMC4wM2wtMC4yNiwwLjE3bC0wLjE1LDAuMzJsLTAuMjEsLTAuMGwwLjcyLC0xLjg1bDEuMTksLTEuOWwwLjc0LDAuMDlsMC4yNywwLjczbC0xLjE5LDAuOTNsLTAuMDksMC4xM2wtMC41NCwxLjM2WlwiLCBcIm5hbWVcIjogXCJMZWJhbm9uXCJ9LCBcIkxBXCI6IHtcInBhdGhcIjogXCJNNjg0Ljg3LDI0OC44bDAuNjEsLTAuODZsMC4wNSwtMC4xNmwwLjExLC0yLjE3bC0wLjA4LC0wLjIybC0xLjk2LC0yLjE2bC0wLjE1LC0yLjQ0bC0wLjA4LC0wLjE4bC0xLjksLTIuMWwtMC4xOSwtMC4xbC0xLjg5LC0wLjE4bC0wLjI5LDAuMTVsLTAuNDIsMC43NmwtMS4yMSwwLjA2bC0wLjY3LC0wLjQxbC0wLjMxLC0wLjBsLTIuMiwxLjI5bC0wLjA1LC0xLjc3bDAuNjEsLTIuN2wtMC4yNywtMC4zN2wtMS40NCwtMC4xbC0wLjEyLC0xLjMxbC0wLjEyLC0wLjIxbC0wLjg3LC0wLjY1bDAuMzgsLTAuNjhsMS43NiwtMS40MWwwLjA4LDAuMjJsMC4yNywwLjJsMS4zMywwLjA3bDAuMzEsLTAuMzRsLTAuMzUsLTIuNzVsMC44NSwtMC4yNWwxLjMyLDEuODhsMS4xMSwyLjM2bDAuMjcsMC4xN2wyLjg5LDAuMDJsMC43OCwxLjgybC0xLjMyLDAuNTZsLTAuMTIsMC4wOWwtMC43MiwwLjkzbDAuMSwwLjQ1bDIuOTMsMS41MmwzLjYyLDUuMjdsMS44OCwxLjc4bDAuNTgsMS42N2wtMC4zOCwyLjExbC0xLjg3LC0wLjc5bC0wLjM3LDAuMTFsLTAuOTksMS41NGwtMS41MSwtMC43M1pcIiwgXCJuYW1lXCI6IFwiTGFvc1wifSwgXCJUV1wiOiB7XCJwYXRoXCI6IFwiTTcyNS42LDIyMi41bC0xLjUsNC4yMmwtMC44MiwxLjY1bC0xLjAxLC0xLjdsLTAuMjYsLTEuOGwxLjQsLTIuNDhsMS44LC0xLjgxbDAuNzYsMC41M2wtMC4zOCwxLjM5WlwiLCBcIm5hbWVcIjogXCJUYWl3YW5cIn0sIFwiVFRcIjoge1wicGF0aFwiOiBcIk0yNjYuMzUsMjU5LjQ2bDAuNDEsLTAuMzlsMC4wOSwtMC4yM2wtMC4wNCwtMC43NWwxLjE0LC0wLjI2bDAuMiwwLjAzbC0wLjA3LDEuMzdsLTEuNzMsMC4yM1pcIiwgXCJuYW1lXCI6IFwiVHJpbmlkYWQgYW5kIFRvYmFnb1wifSwgXCJUUlwiOiB7XCJwYXRoXCI6IFwiTTUxMy4yNSwxNzUuMzhsMy42MywxLjE3bDAuMTQsMC4wMWwyLjg4LC0wLjQ1bDIuMTEsMC4yNmwwLjE4LC0wLjAzbDIuOSwtMS41M2wyLjUxLC0wLjEzbDIuMjUsMS4zN2wwLjM2LDAuODhsLTAuMjMsMS4zNmwwLjE5LDAuMzNsMS44MSwwLjcybDAuNjEsMC41M2wtMS4zMSwwLjY0bC0wLjE2LDAuMzRsMC43NiwzLjI0bC0wLjQ0LDAuOGwwLjAxLDAuM2wxLjE5LDIuMDJsLTAuNzEsMC4yOWwtMC43NCwtMC42MmwtMC4xNSwtMC4wN2wtMi45MSwtMC4zN2wtMC4xNSwwLjAybC0xLjA0LDAuNDNsLTIuNzgsMC40NGwtMS40NCwtMC4wM2wtMi44MywxLjA2bC0xLjk1LDAuMDFsLTEuMjgsLTAuNTJsLTAuMiwtMC4wMWwtMi42MiwwLjc2bC0wLjcsLTAuNDhsLTAuNDcsMC4yMmwtMC4xMywxLjQ5bC0xLjAxLDAuOTRsLTAuNTgsLTAuODJsMC43OSwtMC45bDAuMDQsLTAuMzRsLTAuMzEsLTAuMTVsLTEuNDYsMC4yM2wtMi4wMywtMC42NGwtMC4zLDAuMDdsLTEuNjUsMS41OGwtMy41OCwwLjNsLTEuOTQsLTEuNDdsLTAuMTcsLTAuMDZsLTIuNywtMC4xbC0wLjI4LDAuMTdsLTAuNTEsMS4wNmwtMS40NywwLjI5bC0yLjMyLC0xLjQ2bC0wLjE3LC0wLjA1bC0yLjU1LDAuMDVsLTEuNCwtMi43bC0xLjcyLC0xLjU0bDEuMTEsLTIuMDZsLTAuMDcsLTAuMzdsLTEuMzUsLTEuMTlsMi40NywtMi41MWwzLjc0LC0wLjExbDAuMjYsLTAuMTdsMC45NiwtMi4wN2w0LjU2LDAuMzhsMC4xOSwtMC4wNWwyLjk3LC0xLjkybDIuODQsLTAuODNsNC4wMywtMC4wNmw0LjMxLDIuMDhaTTQ4OC44NSwxNzYuOGwtMS44MSwxLjM4bC0wLjU3LC0xLjAxbDAuMDIsLTAuMzZsMC40NSwtMC4yNWwwLjEzLC0wLjE1bDAuNzgsLTEuODdsLTAuMTEsLTAuMzdsLTAuNzIsLTAuNDdsMS45MSwtMC43MWwxLjg5LDAuMzVsMC4yNSwwLjk3bDAuMTcsMC4ybDEuODcsMC44M2wtMC4xOSwwLjMxbC0yLjgyLDAuMTZsLTAuMTgsMC4wN2wtMS4wNiwwLjkxWlwiLCBcIm5hbWVcIjogXCJUdXJrZXlcIn0sIFwiTEtcIjoge1wicGF0aFwiOiBcIk02MjUuNDQsMjY2LjA3bC0wLjM1LDIuNGwtMC45LDAuNjFsLTEuOTEsMC41bC0xLjA0LC0xLjc1bC0wLjQzLC0zLjVsMS4wLC0zLjZsMS4zNCwxLjA5bDEuMTMsMS43MmwxLjE2LDIuNTJaXCIsIFwibmFtZVwiOiBcIlNyaSBMYW5rYVwifSwgXCJUTlwiOiB7XCJwYXRoXCI6IFwiTTQ0NC45MSwyMDYuMThsLTAuOTksLTQuNTdsLTAuMTIsLTAuMThsLTEuNDMsLTEuMDRsLTAuMDIsLTAuNTNsLTAuMTEsLTAuMjJsLTEuOTUsLTEuNTlsLTAuMTksLTEuODVsMS40NCwtMS40N2wwLjA4LC0wLjE0bDAuNTksLTIuMzRsLTAuMzgsLTIuNzdsMC40NCwtMS4yOGwyLjUyLC0xLjA4bDEuNDEsMC4yOGwtMC4wNiwxLjJsMC40MywwLjI4bDEuODEsLTAuOWwwLjAyLDAuMDZsLTEuMTQsMS4yOGwtMC4wOCwwLjJsLTAuMDIsMS4zMmwwLjExLDAuMjRsMC43NCwwLjZsLTAuMjksMi4xOGwtMS41NiwxLjM1bC0wLjA5LDAuMzJsMC40OCwxLjU0bDAuMjgsMC4yMWwxLjExLDAuMDRsMC41NSwxLjE3bDAuMTUsMC4xNGwwLjc2LDAuMzVsLTAuMTIsMS43OWwtMS4xLDAuNzJsLTAuOCwwLjkxbC0xLjY4LDEuMDRsLTAuMTMsMC4zMmwwLjI1LDEuMDhsLTAuMTgsMC45NmwtMC43NCwwLjM5WlwiLCBcIm5hbWVcIjogXCJUdW5pc2lhXCJ9LCBcIlRMXCI6IHtcInBhdGhcIjogXCJNNzM0LjIxLDMwNy4yMmwwLjE3LC0wLjM0bDEuOTksLTAuNTJsMS43MiwtMC4wOGwwLjc4LC0wLjNsMC4yOSwwLjFsLTAuNDMsMC4zMmwtMi41NywxLjA5bC0xLjcxLDAuNTlsLTAuMDUsLTAuNDlsLTAuMTksLTAuMzZaXCIsIFwibmFtZVwiOiBcIkVhc3QgVGltb3JcIn0sIFwiVE1cIjoge1wicGF0aFwiOiBcIk01NTMuMTYsMTczLjUxbC0wLjEyLDEuMGwtMC4yNiwtMC42NWwwLjM4LC0wLjM0Wk01NTMuNTQsMTczLjE2bDAuMTMsLTAuMTJsMC40MywtMC4wOWwtMC41NiwwLjIxWk01NTUuNjgsMTcyLjZsMC42NSwtMC4xNGwxLjUzLDAuNzZsMS43MSwyLjI5bDAuMjcsMC4xMmwxLjI3LC0wLjE0bDIuODEsLTAuMDRsMC4yOSwtMC4zOGwtMC4zNSwtMS4yN2wxLjk4LC0wLjk3bDEuOTYsLTEuNjNsMy4wNSwxLjQ0bDAuMjUsMi4yM2wwLjE0LDAuMjJsMC45NiwwLjYxbDAuMTgsMC4wNWwyLjYxLC0wLjEzbDAuNjgsMC40NGwxLjIsMi45N2wwLjEsMC4xM2wyLjg1LDIuMDNsMS42NywxLjQxbDIuNjYsMS40NWwzLjEzLDEuMTdsLTAuMDUsMS4yM2wtMC4zNiwtMC4wNGwtMS4xMiwtMC43M2wtMC40NCwwLjE0bC0wLjM0LDAuODlsLTEuOTYsMC41MmwtMC4yMiwwLjIzbC0wLjQ3LDIuMTdsLTEuMjYsMC43OGwtMS45MywwLjQybC0wLjIxLDAuMThsLTAuNDYsMS4xNGwtMS42NCwwLjMzbC0yLjMsLTAuOTdsLTAuMiwtMi4yM2wtMC4yOCwtMC4yN2wtMS43NiwtMC4xbC0yLjc4LC0yLjQ4bC0wLjE1LC0wLjA3bC0xLjk1LC0wLjMxbC0yLjgyLC0xLjQ4bC0xLjc4LC0wLjI3bC0wLjE4LDAuMDNsLTEuMDMsMC41MWwtMS42LC0wLjA4bC0wLjIyLDAuMDhsLTEuNzIsMS42bC0xLjgzLDAuNDZsLTAuMzksLTEuN2wwLjM2LC0zLjBsLTAuMTYsLTAuM2wtMS43MywtMC44OGwwLjU3LC0xLjc3bC0wLjI1LC0wLjM5bC0xLjMzLC0wLjE0bDAuNDEsLTEuODVsMi4wNSwwLjYzbDAuMjEsLTAuMDFsMi4yLC0wLjk1bDAuMDksLTAuNDlsLTEuNzgsLTEuNzVsLTAuNjksLTEuNjZsLTAuMDcsLTAuMDNaXCIsIFwibmFtZVwiOiBcIlR1cmttZW5pc3RhblwifSwgXCJUSlwiOiB7XCJwYXRoXCI6IFwiTTU5Ny45OSwxNzguNzFsLTAuMjMsMC4yM2wtMi41NywtMC40N2wtMC4zNSwwLjI1bC0wLjI0LDEuN2wwLjMyLDAuMzRsMi42NiwtMC4yMmwzLjE1LDAuOTVsNC40NywtMC40MmwwLjU4LDIuNDVsMC4zOSwwLjIxbDAuNzEsLTAuMjVsMS4yMiwwLjUzbC0wLjA2LDEuMDFsMC4yOSwxLjI4bC0yLjE5LC0wLjBsLTEuNzEsLTAuMjFsLTAuMjMsMC4wN2wtMS41MSwxLjI1bC0xLjA1LDAuMjdsLTAuNzcsMC41MWwtMC43MSwtMC42N2wwLjIyLC0yLjI4bC0wLjI0LC0wLjMybC0wLjQzLC0wLjA4bDAuMTcsLTAuNTdsLTAuMTYsLTAuMzZsLTEuMzYsLTAuNjZsLTAuMzQsMC4wNWwtMS4wOCwxLjAxbC0wLjA5LDAuMTVsLTAuMjUsMS4wOWwtMC4yNCwwLjI2bC0xLjM2LC0wLjA1bC0wLjI3LDAuMTRsLTAuNjUsMS4wNmwtMC41OCwtMC4zOWwtMC4zLC0wLjAybC0xLjY4LDAuODZsLTAuMzYsLTAuMTZsMS4yOCwtMi42NWwwLjAyLC0wLjJsLTAuNTQsLTIuMTdsLTAuMTgsLTAuMjFsLTEuNTMsLTAuNThsMC40MSwtMC44MmwxLjg5LDAuMTNsMC4yNiwtMC4xMmwxLjE5LC0xLjYzbDAuNzcsLTEuODJsMi42NiwtMC41NWwtMC4zMywwLjg3bDAuMDEsMC4yM2wwLjM2LDAuODJsMC4zLDAuMThsMC4yMywtMC4wMlpcIiwgXCJuYW1lXCI6IFwiVGFqaWtpc3RhblwifSwgXCJMU1wiOiB7XCJwYXRoXCI6IFwiTTQ5My4zMiwzNTkuNjlsMC42OSwwLjY1bC0wLjY1LDEuMTJsLTAuMzgsMC44bC0xLjI3LDAuMzlsLTAuMTgsMC4xNWwtMC40LDAuNzdsLTAuNTksMC4xOGwtMS41OSwtMS43OGwxLjE2LC0xLjVsMS4zLC0xLjAybDAuOTcsLTAuNDZsMC45NCwwLjcyWlwiLCBcIm5hbWVcIjogXCJMZXNvdGhvXCJ9LCBcIlRIXCI6IHtcInBhdGhcIjogXCJNNjc3LjQyLDI1My42OGwtMS43LC0wLjg4bC0wLjE0LC0wLjAzbC0xLjc3LDAuMDRsMC4zLC0xLjY0bC0wLjMsLTAuMzVsLTIuMjEsMC4wMWwtMC4zLDAuMjhsLTAuMiwyLjc2bC0yLjE1LDUuOWwtMC4wMiwwLjEzbDAuMTcsMS44M2wwLjI4LDAuMjdsMS40NSwwLjA3bDAuOTMsMi4xbDAuNDQsMi4xNWwwLjA4LDAuMTVsMS40LDEuNDRsMC4xNiwwLjA5bDEuNDMsMC4yN2wxLjA0LDEuMDVsLTAuNTgsMC43M2wtMS4yNCwwLjIybC0wLjE1LC0wLjk5bC0wLjE1LC0wLjIybC0yLjA0LC0xLjFsLTAuMzYsMC4wNmwtMC4yMywwLjIzbC0wLjcyLC0wLjcxbC0wLjQxLC0xLjE4bC0wLjA2LC0wLjExbC0xLjMzLC0xLjQybC0xLjIyLC0xLjJsLTAuNSwwLjEzbC0wLjE1LDAuNTRsLTAuMTQsLTAuNDFsMC4yNiwtMS40OGwwLjczLC0yLjM4bDEuMiwtMi41N2wxLjM3LC0yLjM1bDAuMDIsLTAuMjdsLTAuOTUsLTIuMjZsMC4wMywtMS4xOWwtMC4yOSwtMS40MmwtMC4wNiwtMC4xM2wtMS42NSwtMi4wbC0wLjQ2LC0wLjk5bDAuNjIsLTAuMzRsMC4xMywtMC4xNWwwLjkyLC0yLjIzbC0wLjAyLC0wLjI3bC0xLjA1LC0xLjc0bC0xLjU3LC0xLjg2bC0xLjA0LC0xLjk2bDAuNzYsLTAuMzRsMC4xNiwtMC4xNmwxLjA3LC0yLjYzbDEuNTgsLTAuMWwwLjE2LC0wLjA2bDEuNDMsLTEuMTFsMS4yNCwtMC41MmwwLjg0LDAuNjJsMC4xMywxLjQzbDAuMjgsMC4yN2wxLjM0LDAuMDlsLTAuNTQsMi4zOWwwLjA1LDIuMzlsMC40NSwwLjI1bDIuNDgsLTEuNDVsMC42LDAuMzZsMC4xNywwLjA0bDEuNDcsLTAuMDdsMC4yNSwtMC4xNWwwLjQxLC0wLjczbDEuNTgsMC4xNWwxLjc2LDEuOTNsMC4xNSwyLjQ0bDAuMDgsMC4xOGwxLjk0LDIuMTVsLTAuMSwxLjk2bC0wLjY2LDAuOTNsLTIuMjUsLTAuMzRsLTMuMjQsMC40OWwtMC4xOSwwLjEybC0xLjYsMi4xMmwtMC4wNiwwLjI0bDAuNDgsMi40NlpcIiwgXCJuYW1lXCI6IFwiVGhhaWxhbmRcIn0sIFwiVEZcIjoge1wicGF0aFwiOiBcIk01OTMuNzYsNDE3LjczbDEuMzgsMC44NGwyLjE1LDAuMzdsMC4wNCwwLjMxbC0wLjU5LDEuMjRsLTMuMzYsMC4xOWwtMC4wNSwtMS4zOGwwLjQzLC0xLjU2WlwiLCBcIm5hbWVcIjogXCJGcmVuY2ggU291dGhlcm4gYW5kIEFudGFyY3RpYyBMYW5kc1wifSwgXCJUR1wiOiB7XCJwYXRoXCI6IFwiTTQyNS4yMywyNjkuMjlsLTEuNDksMC40bC0wLjQzLC0wLjY4bC0wLjY0LC0xLjU0bC0wLjE4LC0xLjE2bDAuNTQsLTIuMjFsLTAuMDQsLTAuMjRsLTAuNTksLTAuODZsLTAuMjMsLTEuOWwwLjAsLTEuODJsLTAuMDcsLTAuMTlsLTAuOTUsLTEuMTlsMC4xLC0wLjQxbDEuNTgsMC4wNGwtMC4yMywwLjk3bDAuMDgsMC4yOGwxLjU1LDEuNTVsMC4wOSwxLjEzbDAuMDgsMC4xOWwwLjQyLDAuNDNsLTAuMTEsNS42NmwwLjUyLDEuNTNaXCIsIFwibmFtZVwiOiBcIlRvZ29cIn0sIFwiVERcIjoge1wicGF0aFwiOiBcIk00NTcuNTcsMjUyLjQ2bDAuMjMsLTEuMDhsLTAuMjgsLTAuMzZsLTEuMzIsLTAuMDVsMC4wLC0xLjM1bC0wLjEsLTAuMjJsLTAuOSwtMC44MmwwLjk5LC0zLjFsMy4xMiwtMi4zN2wwLjEyLC0wLjIzbDAuMTMsLTMuMzNsMC45NSwtNS4ybDAuNTMsLTEuMDlsLTAuMDcsLTAuMzZsLTAuOTQsLTAuODFsLTAuMDMsLTAuN2wtMC4xMiwtMC4yM2wtMC44NCwtMC42MWwtMC41NywtMy43NmwyLjIxLC0xLjI2bDE5LjY3LDkuODhsMC4xMiw5Ljc0bC0xLjgzLC0wLjE1bC0wLjI4LDAuMTRsLTEuMTQsMS44OWwtMC42OCwxLjYybDAuMDUsMC4zMWwwLjMzLDAuMzhsLTAuNjEsMC41OGwtMC4wOCwwLjNsMC4yNSwwLjkzbC0wLjU4LDAuOTVsLTAuMjksMS4wMWwwLjM0LDAuMzdsMC42NywtMC4xMWwwLjM5LDAuNzNsMC4wMywxLjRsMC4xMSwwLjIzbDAuOCwwLjY1bC0wLjAxLDAuMjRsLTEuMzgsMC4zN2wtMC4xMSwwLjA2bC0xLjI3LDEuMDNsLTEuODMsMi43NmwtMi4yMSwxLjFsLTIuMzQsLTAuMTVsLTAuODIsMC4yNWwtMC4yLDAuMzdsMC4xOSwwLjY4bC0xLjE2LDAuNzlsLTEuMDEsMC45NGwtMi45MiwwLjg5bC0wLjUsLTAuNDZsLTAuMTcsLTAuMDhsLTAuNDEsLTAuMDVsLTAuMjgsMC4xMmwtMC4zOCwwLjU0bC0xLjM2LDAuMTJsMC4xLC0wLjE4bDAuMDEsLTAuMjdsLTAuNzgsLTEuNzJsLTAuMzUsLTEuMDNsLTAuMTcsLTAuMThsLTEuMDMsLTAuNDFsLTEuMjksLTEuMjhsMC4zNiwtMC43OGwwLjksMC4ybDAuMTQsLTAuMGwwLjY3LC0wLjE3bDEuMzYsMC4wMmwwLjI2LC0wLjQ1bC0xLjMyLC0yLjIybDAuMDksLTEuNjRsLTAuMTcsLTEuNjhsLTAuMDQsLTAuMTNsLTAuOTMsLTEuNTNaXCIsIFwibmFtZVwiOiBcIkNoYWRcIn0sIFwiTFlcIjoge1wicGF0aFwiOiBcIk00NTcuOTksMjI2LjM4bC0xLjU3LDAuODdsLTEuMjUsLTEuMjhsLTAuMTMsLTAuMDhsLTMuODUsLTEuMTFsLTEuMDQsLTEuNTdsLTAuMDksLTAuMDlsLTEuOTgsLTEuMjNsLTAuMjcsLTAuMDJsLTAuOTMsMC4zOWwtMC43MiwtMS4ybC0wLjA5LC0xLjA3bC0wLjA2LC0wLjE2bC0xLjMzLC0xLjc1bDAuODMsLTAuOTRsMC4wNywtMC4yNGwtMC4yMSwtMS42NGwwLjMxLC0xLjQzbC0wLjE3LC0xLjI5bDAuNDMsLTIuMjZsLTAuMTUsLTEuMzNsLTAuNzMsLTIuMThsMC45OSwtMC41MmwwLjE2LC0wLjIxbDAuMjIsLTEuMTZsLTAuMjIsLTEuMDZsMS41NCwtMC45NWwwLjgxLC0wLjkybDEuMTksLTAuNzhsMC4xNCwtMC4yM2wwLjEyLC0xLjc2bDIuNTcsMC44NGwwLjE2LDAuMDFsMC45OSwtMC4yM2wyLjAxLDAuNDVsMy4xOSwxLjJsMS4xMiwyLjM2bDAuMiwwLjE2bDIuMjQsMC41M2wzLjUsMS4xNGwyLjY1LDEuMzZsMC4yOSwtMC4wMWwxLjIyLC0wLjcxbDEuMjcsLTEuMzJsMC4wNywtMC4yOWwtMC41NSwtMi4wbDAuNjksLTEuMTlsMS43LC0xLjIzbDEuNjEsLTAuMzVsMy4yLDAuNTRsMC43OCwxLjE0bDAuMjQsMC4xM2wwLjg1LDAuMDFsMC44NCwwLjQ3bDIuMzUsMC4zMWwwLjQyLDAuNjNsLTAuNzksMS4xNmwtMC4wNCwwLjI2bDAuMzUsMS4wOGwtMC42MSwxLjZsLTAuMCwwLjJsMC43MywyLjE2bDAuMCwyNC4yNGwtMi41OCwwLjAxbC0wLjMsMC4yOWwtMC4wMiwwLjYybC0xOS41NSwtOS44M2wtMC4yOCwwLjAxbC0yLjUzLDEuNDRaXCIsIFwibmFtZVwiOiBcIkxpYnlhXCJ9LCBcIkFFXCI6IHtcInBhdGhcIjogXCJNNTUwLjU5LDIyMy44bDAuMTIsMC4wOGwxLjkyLC0wLjQxbDMuNTQsMC4xNWwwLjIzLC0wLjA5bDEuNzEsLTEuNzlsMS44NiwtMS43bDEuMzEsLTEuMzZsMC4yNiwwLjVsMC4yOCwxLjcybC0wLjkzLDAuMDFsLTAuMywwLjI2bC0wLjIxLDEuNzNsMC4xMSwwLjI3bDAuMDgsMC4wNmwtMC43LDAuMzJsLTAuMTcsMC4yN2wtMC4wMSwwLjk5bC0wLjY4LDEuMDJsLTAuMDUsMC4xNWwtMC4wNiwwLjk2bC0wLjMyLDAuMzZsLTcuMTksLTEuMjdsLTAuNzksLTIuMjJaXCIsIFwibmFtZVwiOiBcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCJ9LCBcIlZFXCI6IHtcInBhdGhcIjogXCJNMjQwLjY2LDI1Ni41bDAuNjUsMC45MWwtMC4wMywxLjEzbC0xLjA1LDEuMzlsLTAuMDMsMC4zMWwwLjk1LDIuMGwwLjMyLDAuMTdsMS4wOCwtMC4xNmwwLjI0LC0wLjIxbDAuNTYsLTEuODNsLTAuMDYsLTAuMjlsLTAuNzEsLTAuODFsLTAuMSwtMS41OGwyLjksLTAuOTZsMC4xOSwtMC4zN2wtMC4yOSwtMS4wMmwwLjQ1LC0wLjQxbDAuNzIsMS40M2wwLjI2LDAuMTZsMS42NSwwLjA0bDEuNDYsMS4yN2wwLjA4LDAuNzJsMC4zLDAuMjdsMi4yOCwwLjAybDIuNTUsLTAuMjVsMS4zNCwxLjA2bDAuMTQsMC4wNmwxLjkyLDAuMzFsMC4yLC0wLjAzbDEuNCwtMC43OWwwLjE1LC0wLjI1bDAuMDIsLTAuMzZsMi44MiwtMC4xNGwxLjE3LC0wLjAxbC0wLjQxLDAuMTRsLTAuMTQsMC40NmwwLjg2LDEuMTlsMC4yMiwwLjEybDEuOTMsMC4xOGwxLjczLDEuMTNsMC4zNywxLjlsMC4zMSwwLjI0bDEuMjEsLTAuMDVsMC41MiwwLjMybC0xLjYzLDEuMjFsLTAuMTEsMC4xN2wtMC4yMiwwLjkybDAuMDcsMC4yN2wwLjYzLDAuNjlsLTAuMzEsMC4yNGwtMS40OCwwLjM5bC0wLjIyLDAuM2wwLjA0LDEuMDNsLTAuNTksMC42bC0wLjAxLDAuNDFsMS42NywxLjg3bDAuMjMsMC40OGwtMC43MiwwLjc2bC0yLjcxLDAuOTFsLTEuNzgsMC4zOWwtMC4xMywwLjA2bC0wLjYsMC40OWwtMS44NCwtMC41OGwtMS44OSwtMC4zM2wtMC4xOCwwLjAzbC0wLjQ3LDAuMjNsLTAuMDIsMC41M2wwLjk2LDAuNTZsLTAuMDgsMS41OGwwLjM1LDEuNThsMC4yNiwwLjIzbDEuOTEsMC4xOWwwLjAyLDAuMDdsLTEuNTQsMC42MmwtMC4xOCwwLjJsLTAuMjUsMC45MmwtMC44OCwwLjM1bC0xLjg1LDAuNThsLTAuMTYsMC4xM2wtMC40LDAuNjRsLTEuNjYsMC4xNGwtMS4yMiwtMS4xOGwtMC43OSwtMi41MmwtMC42NywtMC44OGwtMC42NiwtMC40M2wwLjk5LC0wLjk4bDAuMDksLTAuMjZsLTAuMDksLTAuNTZsLTAuMDgsLTAuMTZsLTAuNjYsLTAuNjlsLTAuNDcsLTEuNTRsMC4xOCwtMS42N2wwLjU1LC0wLjg1bDAuNDUsLTEuMzVsLTAuMTUsLTAuMzZsLTAuODksLTAuNDNsLTAuMTksLTAuMDJsLTEuMzksMC4yOGwtMS43NiwtMC4xM2wtMC45MiwwLjIzbC0xLjY0LC0yLjAxbC0wLjE3LC0wLjFsLTEuNTQsLTAuMzNsLTMuMDUsMC4yM2wtMC41LC0wLjczbC0wLjE1LC0wLjEybC0wLjQ1LC0wLjE1bC0wLjA1LC0wLjI4bDAuMjgsLTAuODZsMC4wMSwtMC4xNWwtMC4yLC0xLjAxbC0wLjA4LC0wLjE1bC0wLjUsLTAuNWwtMC4zLC0xLjA4bC0wLjI1LC0wLjIybC0wLjg5LC0wLjEybDAuNTQsLTEuMThsMC4yOSwtMS43M2wwLjY2LC0wLjg1bDAuOTQsLTAuN2wwLjA5LC0wLjExbDAuMywtMC42WlwiLCBcIm5hbWVcIjogXCJWZW5lenVlbGFcIn0sIFwiQUZcIjoge1wicGF0aFwiOiBcIk01NzQuNDIsMTkyLjFsMi4yNCwwLjk1bDAuMTgsMC4wMmwxLjg5LC0wLjM4bDAuMjIsLTAuMThsMC40NiwtMS4xNGwxLjgyLC0wLjRsMS41LC0wLjkxbDAuMTQsLTAuMTlsMC40NiwtMi4xMmwxLjkzLC0wLjUxbDAuMiwtMC4xOGwwLjI2LC0wLjY4bDAuODcsMC41N2wwLjEzLDAuMDVsMC43OSwwLjA5bDEuMzUsMC4wMmwxLjgzLDAuNTlsMC43NSwwLjM0bDAuMjYsLTAuMDFsMS42NiwtMC44NWwwLjcsMC40NmwwLjQyLC0wLjA5bDAuNzIsLTEuMTdsMS4zMiwwLjA1bDAuMjMsLTAuMWwwLjM5LC0wLjQzbDAuMDcsLTAuMTRsMC4yNCwtMS4wOGwwLjg2LC0wLjgxbDAuOTQsMC40NmwtMC4yLDAuNjRsMC4yMywwLjM4bDAuNDksMC4wOWwtMC4yMSwyLjE1bDAuMDksMC4yNWwwLjk5LDAuOTRsMC4zOCwwLjAzbDAuODMsLTAuNTdsMS4wNiwtMC4yN2wwLjEyLC0wLjA2bDEuNDYsLTEuMjFsMS42MywwLjJsMi40LDAuMGwwLjE3LDAuMzJsLTEuMTIsMC4yNWwtMS4yMywwLjUybC0yLjg2LDAuMzNsLTIuNjksMC42bC0wLjEzLDAuMDZsLTEuNDYsMS4yNWwtMC4wNywwLjM2bDAuNTgsMS4xOGwwLjI1LDEuMjFsLTEuMTMsMS4wOGwtMC4wOSwwLjI1bDAuMDksMC45OGwtMC41MywwLjc5bC0yLjIyLC0wLjA4bC0wLjI4LDAuNDRsMC44MywxLjU3bC0xLjMsMC41OGwtMC4xMywwLjExbC0xLjA2LDEuNjlsLTAuMDUsMC4xOGwwLjEzLDEuNTFsLTAuNzMsMC41OGwtMC43OCwtMC4yMmwtMC4xNCwtMC4wMWwtMS45MSwwLjM2bC0wLjIzLDAuMTlsLTAuMiwwLjU3bC0xLjY1LC0wLjBsLTAuMjIsMC4xbC0xLjQsMS41NmwtMC4wOCwwLjE5bC0wLjA4LDIuMTNsLTIuOTksMS4wNWwtMS42NywtMC4yM2wtMC4yNywwLjFsLTAuMzksMC40NmwtMS40MywtMC4zMWwtMi40MywwLjRsLTMuNjksLTEuMjNsMS45NiwtMi4xNWwwLjA4LC0wLjI0bC0wLjIxLC0xLjc4bC0wLjIzLC0wLjI2bC0xLjY5LC0wLjQybC0wLjE5LC0xLjYybC0wLjc3LC0yLjA4bDAuOTgsLTEuNDFsLTAuMTQsLTAuNDVsLTAuODIsLTAuMzFsMC42LC0xLjc5bDAuOTMsLTMuMjFaXCIsIFwibmFtZVwiOiBcIkFmZ2hhbmlzdGFuXCJ9LCBcIklRXCI6IHtcInBhdGhcIjogXCJNNTM0LjQyLDE5MC44OWwwLjEzLDAuMTRsMS41LDAuNzhsMC4xNSwxLjM0bC0xLjEzLDAuODdsLTAuMTEsMC4xNmwtMC41OCwyLjJsMC4wNCwwLjI0bDEuNzMsMi42N2wwLjEyLDAuMWwyLjk5LDEuNDlsMS4xOCwxLjk0bC0wLjM5LDEuODlsMC4yOSwwLjM2bDAuNSwtMC4wbDAuMDIsMS4xN2wwLjA4LDAuMmwwLjgzLDAuODZsLTIuMzYsLTAuMjlsLTAuMjksMC4xM2wtMS43NCwyLjQ5bC00LjQsLTAuMjFsLTcuMDMsLTUuNDlsLTMuNzMsLTEuOTRsLTIuOTIsLTAuNzRsLTAuODksLTMuMGw1LjMzLC0yLjgxbDAuMTUsLTAuMTlsMC45NSwtMy40M2wtMC4yLC0yLjBsMS4xOSwtMC42MWwwLjExLC0wLjA5bDEuMjMsLTEuNzNsMC45MiwtMC4zOGwyLjc1LDAuMzVsMC44MSwwLjY4bDAuMzEsMC4wNWwwLjk0LC0wLjM4bDEuNSwzLjE3WlwiLCBcIm5hbWVcIjogXCJJcmFxXCJ9LCBcIklTXCI6IHtcInBhdGhcIjogXCJNMzg0LjI2LDg3Ljk2bC0wLjUxLDIuMzVsMC4wOCwwLjI4bDIuNjEsMi41OGwtMi45OSwyLjgzbC03LjE2LDIuNzJsLTIuMDgsMC43bC05LjUxLC0xLjcxbDEuODksLTEuMzZsLTAuMDcsLTAuNTNsLTQuNCwtMS41OWwzLjMzLC0wLjU5bDAuMjUsLTAuMzJsLTAuMTEsLTEuMmwtMC4yNSwtMC4yN2wtNC44MiwtMC44OGwxLjM4LC0yLjJsMy41NCwtMC41N2wzLjgsMi43NGwwLjMzLDAuMDFsMy42OCwtMi4xOGwzLjAyLDEuMTJsMC4yNSwtMC4wMmw0LjAxLC0yLjE4bDMuNzIsMC4yN1pcIiwgXCJuYW1lXCI6IFwiSWNlbGFuZFwifSwgXCJJUlwiOiB7XCJwYXRoXCI6IFwiTTU1Ni4yLDE4Ny41bDIuMDUsLTAuNTJsMC4xMywtMC4wN2wxLjY5LC0xLjU3bDEuNTUsMC4wOGwwLjE1LC0wLjAzbDEuMDIsLTAuNWwxLjY0LDAuMjVsMi44MiwxLjQ4bDEuOTEsMC4zbDIuOCwyLjQ5bDAuMTgsMC4wOGwxLjYxLDAuMDlsMC4xOSwyLjA5bC0xLjAsMy40N2wtMC42OSwyLjA0bDAuMTgsMC4zOGwwLjczLDAuMjhsLTAuODUsMS4yMmwtMC4wNCwwLjI4bDAuODEsMi4xOWwwLjE5LDEuNzJsMC4yMywwLjI2bDEuNjksMC40MmwwLjE3LDEuNDNsLTIuMTgsMi4zOWwtMC4wMSwwLjRsMS4yMiwxLjQybDEuMCwxLjYybDAuMTIsMC4xMWwyLjIzLDEuMTFsMC4wNiwyLjJsMC4yLDAuMjdsMS4wMywwLjM4bDAuMTQsMC44M2wtMy4zOCwxLjNsLTAuMTgsMC4xOWwtMC44NywyLjg1bC00LjQ0LC0wLjc2bC0yLjc1LC0wLjYybC0yLjY0LC0wLjMybC0xLjAxLC0zLjExbC0wLjE3LC0wLjE5bC0xLjIsLTAuNDhsLTAuMTgsLTAuMDFsLTEuOTksMC41MWwtMi40MiwxLjI1bC0yLjg5LC0wLjg0bC0yLjQ4LC0yLjAzbC0yLjQxLC0wLjc5bC0xLjYxLC0yLjQ3bC0xLjg0LC0zLjYzbC0wLjM2LC0wLjE1bC0xLjIyLDAuNGwtMS40OCwtMC44NGwtMC4zNywwLjA2bC0wLjcyLDAuODJsLTEuMDgsLTEuMTJsLTAuMDIsLTEuMzVsLTAuMywtMC4yOWwtMC40MywwLjBsMC4zNCwtMS42NGwtMC4wNCwtMC4yMmwtMS4yOSwtMi4xMWwtMC4xMiwtMC4xMWwtMy4wLC0xLjQ5bC0xLjYyLC0yLjQ5bDAuNTIsLTEuOThsMS4xOCwtMC45MmwwLjExLC0wLjI3bC0wLjE5LC0xLjY2bC0wLjE2LC0wLjIzbC0xLjU1LC0wLjgxbC0xLjU4LC0zLjMzbC0xLjMsLTIuMmwwLjQxLC0wLjc1bDAuMDMsLTAuMjFsLTAuNzMsLTMuMTJsMS4yLC0wLjU5bDAuMzUsMC45bDEuMjYsMS4zNWwwLjE1LDAuMDlsMS44MSwwLjM5bDAuOTEsLTAuMDlsMC4xNSwtMC4wNmwyLjksLTIuMTNsMC43LC0wLjE2bDAuNDgsMC41NmwtMC43NSwxLjI2bDAuMDUsMC4zN2wxLjU2LDEuNTNsMC4yOCwwLjA4bDAuMzcsLTAuMDlsMC43LDEuODlsMC4yMSwwLjE5bDIuMzEsMC41OWwxLjY5LDEuNGwwLjE1LDAuMDdsMy42NiwwLjQ5bDMuOTEsLTAuNzZsMC4yMywtMC4xOWwwLjE5LC0wLjUyWlwiLCBcIm5hbWVcIjogXCJJcmFuXCJ9LCBcIkFNXCI6IHtcInBhdGhcIjogXCJNNTMwLjUxLDE3Ni4wOGwyLjkxLC0wLjM5bDAuNDEsMC42M2wwLjExLDAuMWwwLjY2LDAuMzZsLTAuMzIsMC40N2wwLjA3LDAuNDFsMS4xLDAuODRsLTAuNTMsMC43bDAuMDYsMC40MmwxLjA2LDAuOGwxLjAxLDAuNDRsMC4wNCwxLjU2bC0wLjQ0LDAuMDRsLTAuODgsLTEuNDZsMC4wMSwtMC4zN2wtMC4zLC0wLjMxbC0wLjk4LDAuMDFsLTAuNjUsLTAuNjlsLTAuMjYsLTAuMDlsLTAuMzgsMC4wNmwtMC45NywtMC44MmwtMS42NCwtMC42NWwwLjIsLTEuMmwtMC4wMiwtMC4xNmwtMC4yOCwtMC42OVpcIiwgXCJuYW1lXCI6IFwiQXJtZW5pYVwifSwgXCJJVFwiOiB7XCJwYXRoXCI6IFwiTTQ1MS42OCwxNTguNThsMC4yLDAuMTZsMy4zLDAuNzVsLTAuMjIsMS4yNmwwLjAyLDAuMThsMC4zNSwwLjc4bC0xLjQsLTAuMzJsLTAuMjEsMC4wM2wtMi4wNCwxLjFsLTAuMTYsMC4yOWwwLjEzLDEuNDdsLTAuMjksMC44MmwwLjAyLDAuMjRsMC44MiwxLjU3bDAuMSwwLjExbDIuMjgsMS41bDEuMjksMi41M2wyLjc5LDIuNDNsMC4yLDAuMDdsMS44MywtMC4wMmwwLjMxLDAuMzRsLTAuNDYsMC4zOWwwLjA2LDAuNWw0LjA2LDEuOTdsMi4wNiwxLjQ5bDAuMTcsMC4zNmwtMC4yNCwwLjUzbC0xLjA4LC0xLjA3bC0wLjE1LC0wLjA4bC0yLjE4LC0wLjQ5bC0wLjMzLDAuMTVsLTEuMDUsMS45MWwwLjExLDAuNGwxLjYzLDAuOThsLTAuMjIsMS4xMmwtMC44NCwwLjE0bC0wLjIyLDAuMTVsLTEuMjcsMi4zOGwtMC41NCwwLjEybDAuMDEsLTAuNDdsMC40OCwtMS40NmwwLjUsLTAuNThsMC4wMywtMC4zNWwtMC45NywtMS42OWwtMC43NiwtMS40OGwtMC4xNywtMC4xNWwtMC45NCwtMC4zM2wtMC42OCwtMS4xOGwtMC4xNiwtMC4xM2wtMS41MywtMC41MmwtMS4wMywtMS4xNGwtMC4xOSwtMC4xbC0xLjc4LC0wLjE5bC0xLjg4LC0xLjNsLTIuMjcsLTEuOTRsLTEuNjQsLTEuNjhsLTAuNzYsLTIuOTRsLTAuMjEsLTAuMjFsLTEuMjIsLTAuMzVsLTIuMDEsLTEuMGwtMC4yNCwtMC4wMWwtMS4xNSwwLjQybC0wLjExLDAuMDdsLTEuMzgsMS4zNmwtMC41LDAuMTFsMC4xOSwtMC44N2wtMC4yMSwtMC4zNWwtMS4xOSwtMC4zNGwtMC41NiwtMi4wNmwwLjc2LC0wLjgybDAuMDMsLTAuMzZsLTAuNjgsLTEuMDhsMC4wNCwtMC4zMWwwLjY4LDAuNDJsMC4xOSwwLjA0bDEuMjEsLTAuMTVsMC4xNCwtMC4wNmwxLjE4LC0wLjg5bDAuMjUsMC4yOWwwLjI1LDAuMWwxLjE5LC0wLjFsMC4yNSwtMC4xOGwwLjQ1LC0xLjA0bDEuNjEsMC4zNGwwLjE5LC0wLjAybDEuMSwtMC41M2wwLjE3LC0wLjIybDAuMTUsLTAuOTVsMS4xOSwwLjM1bDAuMzUsLTAuMTZsMC4yMywtMC40N2wyLjExLC0wLjQ3bDAuNDUsMC44OVpNNDU5LjM1LDE4NC42M2wtMC43MSwxLjgxbDAuMCwwLjIzbDAuMzMsMC43OWwtMC4zNywxLjAzbC0xLjYsLTAuOTFsLTEuMzMsLTAuMzRsLTMuMjQsLTEuMzZsMC4yMywtMC45OWwyLjczLDAuMjRsMy45NSwtMC41Wk00NDMuOTUsMTc1LjkxbDEuMjYsMS43N2wtMC4zMSwzLjQ3bC0wLjgyLC0wLjEzbC0wLjI2LDAuMDhsLTAuODMsMC43OWwtMC42NCwtMC41MmwtMC4xLC0zLjQybC0wLjQ0LC0xLjM0bDAuOTEsMC4xbDAuMjEsLTAuMDZsMS4wMSwtMC43NFpcIiwgXCJuYW1lXCI6IFwiSXRhbHlcIn0sIFwiVk5cIjoge1wicGF0aFwiOiBcIk02OTAuOCwyMzAuMjFsLTIuODYsMS45M2wtMi4wOSwyLjQ2bC0wLjA2LDAuMTFsLTAuNTUsMS44bDAuMDQsMC4yNmw0LjI2LDYuMWwyLjMxLDEuNjNsMS40NiwxLjk3bDEuMTIsNC42MmwtMC4zMiw0LjNsLTEuOTcsMS41N2wtMi44NSwxLjYybC0yLjA5LDIuMTRsLTIuODMsMi4xM2wtMC42NywtMS4xOWwwLjY1LC0xLjU4bC0wLjA5LC0wLjM1bC0xLjQ3LC0xLjE0bDEuNjcsLTAuNzlsMi41NywtMC4xOGwwLjIyLC0wLjQ3bC0wLjg5LC0xLjI0bDMuODgsLTEuOGwwLjE3LC0wLjI0bDAuMzEsLTMuMDVsLTAuMDEsLTAuMTNsLTAuNTYsLTEuNjNsMC40NCwtMi40OGwtMC4wMSwtMC4xNWwtMC42MywtMS44MWwtMC4wOCwtMC4xMmwtMS44NywtMS43N2wtMy42NCwtNS4zbC0wLjExLC0wLjFsLTIuNjgsLTEuMzlsMC40NSwtMC41OWwxLjUzLC0wLjY1bDAuMTYsLTAuMzlsLTAuOTcsLTIuMjdsLTAuMjcsLTAuMThsLTIuODksLTAuMDJsLTEuMDQsLTIuMjFsLTEuMjgsLTEuODNsMC45NiwtMC40NmwxLjk3LDAuMDFsMi40MywtMC4zbDAuMTMsLTAuMDVsMS45NSwtMS4yOWwxLjA0LDAuODVsMC4xMywwLjA2bDEuOTgsMC40MmwtMC4zMiwxLjIxbDAuMDksMC4zbDEuMTksMS4wN2wwLjEyLDAuMDdsMS44OCwwLjUxWlwiLCBcIm5hbWVcIjogXCJWaWV0bmFtXCJ9LCBcIkFSXCI6IHtcInBhdGhcIjogXCJNMjU4LjExLDM0MS4zNGwxLjQsMS44MWwwLjUxLC0wLjA2bDAuODksLTEuOTRsMi41MSwwLjFsMC4zNiwwLjQ5bDQuNiw0LjMxbDAuMTUsMC4wOGwxLjk5LDAuMzlsMy4wMSwxLjkzbDIuNSwxLjAxbDAuMjgsMC45MWwtMi40LDMuOTdsMC4xNywwLjQ0bDIuNTcsMC43NGwyLjgxLDAuNDFsMi4wOSwtMC40NGwwLjE0LC0wLjA3bDIuMjcsLTIuMDZsMC4wOSwtMC4xN2wwLjM4LC0yLjJsMC44OCwtMC4zNmwxLjA1LDEuMjlsLTAuMDQsMS44OGwtMS45OCwxLjRsLTEuNzIsMS4xM2wtMi44NCwyLjY1bC0zLjM0LDMuNzNsLTAuMDcsMC4xMmwtMC42MywyLjIybC0wLjY3LDIuODVsMC4wMiwyLjczbC0wLjQ3LDAuNTRsLTAuMDcsMC4xN2wtMC4zNiwzLjI4bDAuMTIsMC4yN2wzLjAzLDIuMzJsLTAuMzEsMS43OGwwLjExLDAuMjlsMS40NCwxLjE1bC0wLjExLDEuMTdsLTIuMzIsMy41N2wtMy41OSwxLjUxbC00Ljk1LDAuNmwtMi43MiwtMC4yOWwtMC4zMiwwLjM4bDAuNSwxLjY3bC0wLjQ5LDIuMTNsMC4wMSwwLjE2bDAuNCwxLjI5bC0xLjI3LDAuODhsLTIuNDEsMC4zOWwtMi4zMywtMS4wNWwtMC4zMSwwLjA0bC0wLjk3LDAuNzhsLTAuMTEsMC4yN2wwLjM1LDIuOThsMC4xNiwwLjIzbDEuNjksMC45MWwwLjMxLC0wLjAybDEuMDgsLTAuNzVsMC40NiwwLjk2bC0yLjEsMC44OGwtMi4wMSwxLjg5bC0wLjA5LDAuMThsLTAuMzYsMy4wNWwtMC41MSwxLjQybC0yLjE2LDAuMDFsLTAuMTksMC4wN2wtMS45NiwxLjU5bC0wLjEsMC4xNWwtMC43MiwyLjM0bDAuMDgsMC4zMWwyLjQ2LDIuMzFsMC4xMywwLjA3bDIuMDksMC41NmwtMC43NCwyLjQ1bC0yLjg2LDEuNzVsLTAuMTIsMC4xNGwtMS41OSwzLjcxbC0yLjIsMS4yNGwtMC4xLDAuMDlsLTEuMDMsMS41NGwtMC4wNCwwLjIzbDAuODEsMy40NWwwLjA2LDAuMTNsMS4xMywxLjMybC0yLjU5LC0wLjU3bC01Ljg5LC0wLjQ0bC0wLjkyLC0xLjczbDAuMDUsLTIuNGwtMC4zNCwtMC4zbC0xLjQ5LDAuMTlsLTAuNzIsLTAuOThsLTAuMiwtMy4yMWwxLjc5LC0xLjMzbDAuMSwtMC4xM2wwLjc5LC0yLjA0bDAuMDIsLTAuMTZsLTAuMjcsLTEuNTJsMS4zMSwtMi42OWwwLjkxLC00LjE1bC0wLjIzLC0xLjcybDAuOTEsLTAuNDlsMC4xNSwtMC4zM2wtMC4yNywtMS4xNmwtMC4xNSwtMC4ybC0wLjg3LC0wLjQ2bDAuNjUsLTEuMDFsLTAuMDQsLTAuMzdsLTEuMDYsLTEuMDlsLTAuNTQsLTMuMmwwLjgzLC0wLjUxbDAuMTQsLTAuMjlsLTAuNDIsLTMuNmwwLjU4LC0yLjk4bDAuNjQsLTIuNWwxLjQxLC0xLjBsMC4xMiwtMC4zMmwtMC43NSwtMi44bC0wLjAxLC0yLjQ4bDEuODEsLTEuNzhsMC4wOSwtMC4yMmwtMC4wNiwtMi4zbDEuMzksLTIuNjlsMC4wMywtMC4xNGwwLjAxLC0yLjU4bC0wLjExLC0wLjI0bC0wLjU3LC0wLjQ1bC0xLjEsLTQuNTlsMS40OSwtMi43M2wwLjA0LC0wLjE3bC0wLjIzLC0yLjU5bDAuODYsLTIuMzhsMS42LC0yLjQ4bDEuNzQsLTEuNjVsMC4wNCwtMC4zOWwtMC42NCwtMC44OWwwLjQyLC0wLjdsMC4wNCwtMC4xNmwtMC4wOCwtNC4yNmwyLjU1LC0xLjIzbDAuMTYsLTAuMThsMC44NiwtMi43NWwtMC4wMSwtMC4yMmwtMC4yMiwtMC40OGwxLjg0LC0yLjFsMy4wLDAuNTlaTTI1Ni43Nyw0MzguOThsLTIuMSwwLjE1bC0xLjE4LC0xLjE0bC0wLjE5LC0wLjA4bC0xLjUzLC0wLjA5bC0yLjM4LC0wLjBsLTAuMCwtNi4yOGwwLjQsMC42NWwxLjI1LDIuNTVsMC4xMSwwLjEybDMuMjYsMi4wN2wzLjE5LDAuOGwtMC44MiwxLjI2WlwiLCBcIm5hbWVcIjogXCJBcmdlbnRpbmFcIn0sIFwiQVVcIjoge1wicGF0aFwiOiBcIk03MDUuNTUsMzUzLjA2bDAuMDksMC4wOWwwLjM3LDAuMDVsMC4xMywtMC4zNWwtMC41NywtMS42OWwwLjQ4LDAuM2wwLjcxLDAuOTlsMC4zNCwwLjExbDAuMiwtMC4yOWwtMC4wNCwtMS4zN2wtMC4wNCwtMC4xNGwtMS4yMiwtMi4wN2wtMC4yOCwtMC45bC0wLjUxLC0wLjY5bDAuMjQsLTEuMzNsMC41MiwtMC43bDAuMzQsLTEuMzJsMC4wMSwtMC4xM2wtMC4yNSwtMS40NGwwLjUxLC0wLjk0bDAuMSwxLjAzbDAuMjMsMC4yNmwwLjMyLC0wLjE0bDEuMDEsLTEuNzJsMS45NCwtMC44NGwxLjI3LC0xLjE0bDEuODQsLTAuOTJsMS4wLC0wLjE4bDAuNiwwLjI4bDAuMjYsLTAuMGwxLjk0LC0wLjk2bDEuNDgsLTAuMjhsMC4xOSwtMC4xM2wwLjMyLC0wLjQ5bDAuNTEsLTAuMThsMS40MiwwLjA1bDIuNjMsLTAuNzZsMC4xMSwtMC4wNmwxLjM2LC0xLjE1bDAuMDgsLTAuMWwwLjYxLC0xLjMzbDEuNDIsLTEuMjdsMC4xLC0wLjE5bDAuMTEsLTEuMDNsMC4wNiwtMS4zMmwxLjM5LC0xLjc0bDAuODUsMS43OWwwLjQsMC4xNGwxLjA3LC0wLjUxbDAuMTEsLTAuNDVsLTAuNzcsLTEuMDVsMC41MywtMC44NGwwLjg2LDAuNDNsMC40MywtMC4yMmwwLjI5LC0xLjg1bDEuMjksLTEuMTlsMC42LC0wLjk4bDEuMTYsLTAuNGwwLjIsLTAuMjdsMC4wMiwtMC4zNGwwLjc0LDAuMmwwLjM4LC0wLjI3bDAuMDMsLTAuNDRsMS45OCwtMC42MWwxLjcsMS4wOGwxLjM2LDEuNDhsMC4yMiwwLjFsMS41NSwwLjAybDEuNTcsMC4yNGwwLjMzLC0wLjRsLTAuNDgsLTEuMjdsMS4wOSwtMS44NmwxLjA2LC0wLjYzbDAuMSwtMC40MmwtMC4yOCwtMC40NmwwLjkzLC0xLjI0bDEuMzYsLTAuOGwxLjE2LDAuMjdsMC4xNCwwLjBsMi4xLC0wLjQ4bDAuMjMsLTAuM2wtMC4wNSwtMS4zbC0wLjE4LC0wLjI2bC0xLjA4LC0wLjQ5bDAuNDQsLTAuMTJsMS41MiwwLjU4bDEuMzksMS4wNmwyLjExLDAuNjVsMC4xOSwtMC4wbDAuNTksLTAuMjFsMS40NCwwLjcybDAuMjcsMC4wbDEuMzcsLTAuNjhsMC44NCwwLjJsMC4yNiwtMC4wNmwwLjM3LC0wLjNsMC44MiwwLjg5bC0wLjU2LDEuMTRsLTAuODQsMC45MWwtMC43NSwwLjA3bC0wLjI2LDAuMzhsMC4yNiwwLjlsLTAuNjcsMS4xNWwtMC44OCwxLjI0bC0wLjA1LDAuMjVsMC4xOCwwLjcybDAuMTIsMC4xN2wxLjk5LDEuNDJsMS45NiwwLjg0bDEuMjUsMC44NmwxLjgsMS41MWwwLjE5LDAuMDdsMC42MywtMC4wbDEuMTUsMC41OGwwLjM0LDAuN2wwLjE3LDAuMTVsMi4zOSwwLjg4bDAuMjQsLTAuMDJsMS42NSwtMC44OGwwLjE0LC0wLjE2bDAuNDksLTEuMzdsMC41MiwtMS4xOWwwLjMxLC0xLjM5bDAuNzUsLTIuMDJsMC4wMSwtMC4xOWwtMC4zMywtMS4xNmwwLjE2LC0wLjY3bDAuMCwtMC4xM2wtMC4yOCwtMS40MWwwLjMsLTEuNzhsMC40MiwtMC40NWwwLjA1LC0wLjMzbC0wLjMzLC0wLjczbDAuNTYsLTEuMjVsMC40OCwtMS4zOWwwLjA3LC0wLjY5bDAuNTgsLTAuNTlsMC40OCwwLjg0bDAuMTcsMS41M2wwLjE3LDAuMjRsMC40NywwLjIzbDAuMDksMC45bDAuMDUsMC4xNGwwLjg3LDEuMjNsMC4xNywxLjMzbC0wLjA5LDAuODlsMC4wMywwLjE1bDAuOSwyLjBsMC40MywwLjEzbDEuMzgsLTAuODNsMC43MSwwLjkybDEuMDYsMC44OGwtMC4yMiwwLjk2bDAuMCwwLjE0bDAuNTMsMi4ybDAuMzgsMS4zbDAuMTUsMC4xOGwwLjUyLDAuMjZsMC42MiwyLjAxbC0wLjIzLDEuMjdsMC4wMiwwLjE4bDAuODEsMS43NmwwLjE0LDAuMTRsMi42OSwxLjM1bDMuMjEsMi4yMWwtMC4yLDAuNGwwLjA0LDAuMzRsMS4zOSwxLjZsMC45NSwyLjc4bDAuNDMsMC4xNmwwLjc5LC0wLjQ2bDAuODUsMC45NmwwLjM5LDAuMDVsMC4yMiwtMC4xNWwwLjM2LDIuMzNsMC4wOSwwLjE4bDEuNzgsMS42M2wxLjE2LDEuMDFsMS45LDIuMWwwLjY3LDIuMDVsMC4wNiwxLjQ3bC0wLjE3LDEuNjRsMC4wMywwLjE3bDEuMTYsMi4yMmwtMC4xNCwyLjI4bC0wLjQzLDEuMjRsLTAuNjgsMi40NGwwLjA0LDEuNjNsLTAuNDgsMS45MmwtMS4wNiwyLjQzbC0xLjc5LDEuMzJsLTAuMSwwLjEybC0wLjkxLDIuMTVsLTAuODIsMS4zN2wtMC43NiwyLjQ3bC0wLjk4LDEuNDZsLTAuNjMsMi4xNGwtMC4zMywyLjAybDAuMSwwLjgybC0xLjIxLDAuODVsLTIuNzEsMC4xbC0wLjEzLDAuMDNsLTIuMzEsMS4xOWwtMS4yMSwxLjE3bC0xLjM0LDEuMTFsLTEuODksLTEuMThsLTEuMzMsLTAuNDZsMC4zMiwtMS4yNGwtMC40LC0wLjM1bC0xLjQ2LDAuNjFsLTIuMDYsMS45OGwtMS45OSwtMC43M2wtMS40MywtMC40NmwtMS40NSwtMC4yMmwtMi4zMiwtMC44MWwtMS41MSwtMS42N2wtMC40NSwtMi4xMWwtMC42LC0xLjVsLTAuMDcsLTAuMTFsLTEuMjMsLTEuMTZsLTAuMTYsLTAuMDhsLTEuOTYsLTAuMjhsMC41OSwtMC45OWwwLjAzLC0wLjI0bC0wLjYxLC0yLjFsLTAuNTQsLTAuMDhsLTEuMTYsMS44NWwtMS4yMywwLjI5bDAuNzMsLTAuODhsMC4wNiwtMC4xMmwwLjM3LC0xLjU3bDAuOTMsLTEuMzNsMC4wNSwtMC4ybC0wLjIsLTIuMDdsLTAuNTMsLTAuMTdsLTIuMDEsMi4zNWwtMS41MiwwLjk0bC0wLjEyLDAuMTRsLTAuODIsMS45M2wtMS41LC0wLjlsMC4wNywtMS4zMmwtMC4wNiwtMC4ybC0xLjU3LC0yLjA0bC0xLjE1LC0wLjkybDAuMywtMC40MWwtMC4xLC0wLjQ0bC0zLjIxLC0xLjY5bC0wLjEzLC0wLjAzbC0xLjY5LC0wLjA4bC0yLjM1LC0xLjMxbC0wLjE2LC0wLjA0bC00LjU1LDAuMjdsLTMuMjQsMC45OWwtMi44LDAuOTFsLTIuMzMsLTAuMThsLTAuMTcsMC4wM2wtMi42MywxLjQxbC0yLjE0LDAuNjRsLTAuMiwwLjE5bC0wLjQ3LDEuNDJsLTAuOCwwLjk5bC0xLjk5LDAuMDZsLTEuNTUsMC4yNGwtMi4yNywtMC41bC0xLjc5LDAuM2wtMS43MSwwLjEzbC0wLjE5LDAuMDlsLTEuMzgsMS4zOWwtMC41OCwtMC4xbC0wLjIxLDAuMDRsLTEuMjYsMC44bC0xLjEzLDAuODVsLTEuNzIsLTAuMWwtMS42LC0wLjBsLTIuNTgsLTEuNzZsLTEuMjEsLTAuNDlsMC4wNCwtMS4xOWwxLjA0LC0wLjMybDAuMTYsLTAuMTJsMC40MiwtMC42NGwwLjA1LC0wLjE5bC0wLjA5LC0wLjk3bDAuMywtMi4wbC0wLjI4LC0xLjY0bC0xLjM0LC0yLjg0bC0wLjM5LC0xLjQ5bDAuMSwtMS41MWwtMC4wNCwtMC4xN2wtMC45NiwtMS43MmwtMC4wNiwtMC43M2wtMC4wOSwtMC4xOWwtMS4wNCwtMS4wMWwtMC4zLC0yLjAybC0wLjA1LC0wLjEybC0xLjIzLC0xLjgzWk03ODQuOTUsMzkzLjM1bDIuMzksMS4wMWwwLjIsMC4wMWwzLjI2LC0wLjk2bDEuMTksMC4xNmwwLjE2LDMuMTlsLTAuNzgsMC45NWwtMC4wNywwLjE2bC0wLjE5LDEuODNsLTAuNDMsLTAuNDFsLTAuNDQsMC4wM2wtMS42MSwxLjk2bC0wLjQsLTAuMTJsLTEuMzgsLTAuMDlsLTEuNDMsLTIuNDJsLTAuMzcsLTIuMDNsLTEuNCwtMi41M2wwLjA0LC0wLjk0bDEuMjcsMC4yWlwiLCBcIm5hbWVcIjogXCJBdXN0cmFsaWFcIn0sIFwiSUxcIjoge1wicGF0aFwiOiBcIk01MDkuMDQsMTk5LjIybDAuNzEsMC4wbDAuMjcsLTAuMTdsMC4xNSwtMC4zM2wwLjE5LC0wLjAxbDAuMDIsMC43M2wtMC4yNywwLjM0bDAuMDIsMC4wOGwtMC4zMiwwLjYybC0wLjY1LC0wLjI3bC0wLjQxLDAuMTlsLTAuNTIsMS44NWwwLjE2LDAuMzVsMC4xNCwwLjA3bC0wLjE3LDAuMWwtMC4xNCwwLjIxbC0wLjExLDAuNzNsMC4zOSwwLjMzbDAuODEsLTAuMjZsMC4wMywwLjY0bC0wLjk3LDMuNDNsLTEuMjgsLTMuNjdsMC42MiwtMC43OGwtMC4wMywtMC40MWwwLjU4LC0xLjE2bDAuNSwtMi4wN2wwLjI3LC0wLjU0WlwiLCBcIm5hbWVcIjogXCJJc3JhZWxcIn0sIFwiSU5cIjoge1wicGF0aFwiOiBcIk02MTUuODQsMTkyLjU4bDIuNCwyLjk3bC0wLjI0LDIuMTdsMC4wNSwwLjJsMC45NCwxLjM1bC0wLjA2LDAuOTdsLTEuNDYsLTAuM2wtMC4zNSwwLjM2bDAuNywzLjA2bDAuMTIsMC4xOGwyLjQ2LDEuNzVsMy4xMSwxLjcybC0xLjIzLDAuOTZsLTAuMSwwLjEzbC0wLjk3LDIuNTVsMC4xNiwwLjM4bDIuNDEsMS4wMmwyLjM3LDEuMzNsMy4yNywxLjUybDMuNDMsMC4zN2wxLjM3LDEuM2wwLjE3LDAuMDhsMS45MiwwLjI1bDMuMCwwLjYybDIuMTUsLTAuMDRsMC4yOCwtMC4yMmwwLjI5LC0xLjA2bDAuMCwtMC4xM2wtMC4zMiwtMS42NmwwLjE2LC0wLjk0bDEuMCwtMC4zN2wwLjIzLDIuMjhsMC4xOCwwLjI0bDIuMjgsMS4wMmwwLjIsMC4wMmwxLjUyLC0wLjQxbDIuMDYsMC4xOGwyLjA4LC0wLjA4bDAuMjksLTAuMjdsMC4xOCwtMS42NmwtMC4xLC0wLjI2bC0wLjUzLC0wLjQ0bDEuMzgsLTAuMjNsMC4xNSwtMC4wN2wyLjI2LC0yLjBsMi43NSwtMS42NWwxLjk3LDAuNjNsMC4yNSwtMC4wM2wxLjU0LC0wLjk5bDAuODksMS4yOGwtMC43MiwwLjk3bDAuMiwwLjQ4bDIuNDksMC4zN2wwLjExLDAuNjFsLTAuNjksMC4zOWwtMC4xNSwwLjNsMC4xNSwxLjIybC0xLjM2LC0wLjM3bC0wLjIzLDAuMDNsLTMuMjQsMS44NmwtMC4xNSwwLjI4bDAuMDcsMS40NGwtMS4zMywyLjE2bC0wLjA0LDAuMTNsLTAuMTIsMS4yNGwtMC45OCwxLjkxbC0xLjcyLC0wLjUzbC0wLjM5LDAuMjhsLTAuMDksMi42NmwtMC41MiwwLjgzbC0wLjA0LDAuMjNsMC4yMSwwLjg5bC0wLjcxLDAuMzZsLTEuMjEsLTMuODVsLTAuMjksLTAuMjFsLTAuNjksMC4wMWwtMC4yOSwwLjIzbC0wLjI4LDEuMTdsLTAuODQsLTAuODRsMC42LC0xLjE3bDAuOTcsLTAuMTNsMC4yMywtMC4xNmwxLjE1LC0yLjI1bC0wLjE4LC0wLjQybC0xLjU0LC0wLjQ3bC0yLjMsMC4wNGwtMi4xMywtMC4zM2wtMC4xOSwtMS42M2wtMC4yNiwtMC4yNmwtMS4xMywtMC4xM2wtMS45MywtMS4xM2wtMC40MiwwLjEzbC0wLjg4LDEuODJsMC4wOCwwLjM3bDEuNDcsMS4xNWwtMS4yMSwwLjc3bC0wLjEsMC4xbC0wLjU2LDAuOTdsMC4xMywwLjQybDEuMzEsMC42MWwtMC4zNiwxLjM1bDAuMDEsMC4ybDAuODUsMS45NWwwLjM3LDIuMDVsLTAuMjYsMC42OGwtMS41NSwtMC4wMmwtMy4wOSwwLjU0bC0wLjI1LDAuMzJsMC4xMywxLjg0bC0xLjIxLDEuNGwtMy42NCwxLjc5bC0yLjc5LDMuMDRsLTEuODYsMS42MWwtMi40OCwxLjY4bC0wLjEzLDAuMjVsLTAuMCwxLjBsLTEuMDcsMC41NWwtMi4yMSwwLjlsLTEuMTMsMC4xM2wtMC4yNSwwLjE5bC0wLjc1LDEuOTZsLTAuMDIsMC4xNWwwLjUyLDMuMzFsMC4xMywyLjAzbC0xLjAzLDIuMzVsLTAuMDMsMC4xMmwtMC4wMSw0LjAzbC0xLjAyLDAuMWwtMC4yMywwLjE1bC0xLjE0LDEuOTNsMC4wNCwwLjM2bDAuNDQsMC40OGwtMS44MywwLjU3bC0wLjE4LDAuMTVsLTAuODEsMS42NWwtMC43NCwwLjUzbC0yLjE0LC0yLjEybC0xLjE0LC0zLjQ3bC0wLjk2LC0yLjU3bC0wLjksLTEuMjZsLTEuMywtMi4zOGwtMC42MSwtMy4xNGwtMC40NCwtMS42MmwtMi4yOSwtMy41NmwtMS4wMywtNC45NGwtMC43NCwtMy4yOWwwLjAxLC0zLjEybC0wLjQ5LC0yLjUxbC0wLjQxLC0wLjIybC0zLjU2LDEuNTNsLTEuNTksLTAuMjhsLTIuOTYsLTIuODdsMC45NCwtMC43NGwwLjA2LC0wLjQxbC0wLjc0LC0xLjAzbC0yLjczLC0yLjFsMS4zNSwtMS40M2w1LjM4LDAuMDFsMC4yOSwtMC4zNmwtMC41LC0yLjI5bC0wLjA5LC0wLjE1bC0xLjMzLC0xLjI4bC0wLjI3LC0xLjk2bC0wLjEyLC0wLjJsLTEuMzYsLTEuMGwyLjQyLC0yLjQ4bDIuNzcsMC4ybDAuMjQsLTAuMWwyLjYyLC0yLjg1bDEuNTksLTIuOGwyLjQxLC0yLjc0bDAuMDcsLTAuMmwtMC4wNCwtMS44MmwyLjAxLC0xLjUxbC0wLjAxLC0wLjQ5bC0xLjk1LC0xLjMzbC0wLjgzLC0xLjgxbC0wLjgyLC0yLjI3bDAuOTgsLTAuOTdsMy42NCwwLjY2bDIuODksLTAuNDJsMC4xNywtMC4wOGwyLjE4LC0yLjE1WlwiLCBcIm5hbWVcIjogXCJJbmRpYVwifSwgXCJUWlwiOiB7XCJwYXRoXCI6IFwiTTUwNS43NywyODcuNThsMC4zNiwwLjIzbDguOTUsNS4wM2wwLjE1LDEuM2wwLjEzLDAuMjFsMy40LDIuMzdsLTEuMDcsMi44OGwtMC4wMiwwLjE0bDAuMTUsMS40MmwwLjE1LDAuMjNsMS40NywwLjg0bDAuMDUsMC40MmwtMC42NiwxLjQ0bC0wLjAyLDAuMThsMC4xMywwLjcybC0wLjE2LDEuMTZsMC4wMywwLjE5bDAuODcsMS41N2wxLjAzLDIuNDhsMC4xMiwwLjE0bDAuNTMsMC4zMmwtMS41OSwxLjE4bC0yLjY0LDAuOTVsLTEuNDUsLTAuMDRsLTAuMiwwLjA3bC0wLjgxLDAuNjlsLTEuNjQsMC4wNmwtMC42OCwwLjNsLTIuOSwtMC42OWwtMS43MSwwLjE3bC0wLjY1LC0zLjE4bC0wLjA1LC0wLjEybC0xLjM1LC0xLjg4bC0wLjE5LC0wLjEybC0yLjQxLC0wLjQ2bC0xLjM4LC0wLjc0bC0xLjYzLC0wLjQ0bC0wLjk2LC0wLjQxbC0wLjk1LC0wLjU4bC0xLjMxLC0zLjA5bC0xLjQ3LC0xLjQ2bC0wLjQ1LC0xLjMxbDAuMjQsLTEuMzRsLTAuMzksLTEuOTlsMC43MSwtMC4wOGwwLjE4LC0wLjA5bDAuOTEsLTAuOTFsMC45OCwtMS4zMWwwLjU5LC0wLjVsMC4xMSwtMC4yNGwtMC4wMiwtMC44MWwtMC4wOCwtMC4ybC0wLjQ3LC0wLjVsLTAuMSwtMC42N2wwLjUxLC0wLjIzbDAuMTgsLTAuMjVsMC4xNCwtMS40N2wtMC4wNSwtMC4ybC0wLjc2LC0xLjA5bDAuNDUsLTAuMTVsMi43MSwwLjAzbDUuMDEsLTAuMTlaXCIsIFwibmFtZVwiOiBcIlRhbnphbmlhXCJ9LCBcIkFaXCI6IHtcInBhdGhcIjogXCJNNTM5LjM2LDE3NS42NmwwLjE2LDAuMDlsMS4xMSwwLjJsMC4zMiwtMC4xNWwwLjQsLTAuNzFsMS4yMiwtMC45OWwxLjExLDEuMzNsMS4yNiwyLjA5bDAuMjIsMC4xNGwxLjA2LDAuMTNsMC4yOCwwLjI5bC0xLjQ2LDAuMTdsLTAuMjYsMC4yNGwtMC40MywyLjI2bC0wLjM5LDAuOTJsLTAuODUsMC42M2wtMC4xMiwwLjI1bDAuMDYsMS4ybC0wLjIyLDAuMDVsLTEuMjgsLTEuMjVsMC43NCwtMS4yNWwtMC4wMywtMC4zNWwtMC43NCwtMC44NmwtMC4zLC0wLjFsLTEuMDUsMC4yN2wtMi40OSwxLjgybC0wLjA0LC0xLjQ2bC0wLjE4LC0wLjI3bC0xLjA5LC0wLjQ3bC0wLjgsLTAuNmwwLjUzLC0wLjdsLTAuMDYsLTAuNDJsLTEuMTEsLTAuODRsMC4zNCwtMC41MWwtMC4xMSwtMC40M2wtMC44OSwtMC40OGwtMC4zMywtMC40OWwwLjI1LC0wLjJsMS43OCwwLjgxbDEuMzUsMC4xOGwwLjI1LC0wLjA5bDAuMzQsLTAuMzVsMC4wMiwtMC4zOWwtMS4wNCwtMS4zNmwwLjI4LC0wLjE4bDAuNDksMC4wN2wxLjY1LDEuNzRaTTUzMy41MywxODAuMTZsMC42MywwLjY3bDAuMjIsMC4wOWwwLjgsLTAuMGwwLjA0LDAuMzFsMC42NiwxLjA5bC0wLjk0LC0wLjIxbC0xLjE2LC0xLjI0bC0wLjI1LC0wLjcxWlwiLCBcIm5hbWVcIjogXCJBemVyYmFpamFuXCJ9LCBcIklFXCI6IHtcInBhdGhcIjogXCJNNDA1LjE3LDEzNS4zNWwwLjM2LDIuMTZsLTEuNzgsMi44NGwtNC4yOCwxLjkxbC0zLjAyLC0wLjQzbDEuODEsLTMuMTNsMC4wMiwtMC4yNmwtMS4yMywtMy4yNmwzLjI0LC0yLjU2bDEuNTQsLTEuMzJsMC4zNywxLjMzbC0wLjQ5LDEuNzdsMC4zLDAuMzhsMS40OSwtMC4wNWwxLjY4LDAuNjNaXCIsIFwibmFtZVwiOiBcIklyZWxhbmRcIn0sIFwiSURcIjoge1wicGF0aFwiOiBcIk03NTYuNTYsMjg3Ljg2bDAuNjksNC4wMmwwLjE1LDAuMjFsMi41OSwxLjVsMC4zOSwtMC4wN2wyLjA1LC0yLjYxbDIuNzUsLTEuNDVsMi4wOSwtMC4wbDIuMDgsMC44NWwxLjg1LDAuODlsMi41MiwwLjQ2bDAuMDgsMTUuNDRsLTEuNzIsLTEuNmwtMC4xNSwtMC4wN2wtMi41NCwtMC41MWwtMC4yOSwwLjFsLTAuNTMsMC42MmwtMi41MywwLjA2bDAuNzgsLTEuNTFsMS40OCwtMC42NmwwLjE3LC0wLjM0bC0wLjY1LC0yLjc0bC0xLjIzLC0yLjE5bC0wLjE0LC0wLjEzbC00Ljg1LC0yLjEzbC0yLjA5LC0wLjIzbC0zLjcsLTIuMjhsLTAuNDEsMC4xbC0wLjY3LDEuMTFsLTAuNjMsMC4xNGwtMC40MSwtMC42N2wtMC4wMSwtMS4wMWwtMC4xNCwtMC4yNWwtMS4zOSwtMC44OWwyLjA1LC0wLjY5bDEuNzMsMC4wNWwwLjI5LC0wLjM5bC0wLjIxLC0wLjY2bC0wLjI5LC0wLjIxbC0zLjUsLTAuMGwtMC45LC0xLjM2bC0wLjE5LC0wLjEzbC0yLjE0LC0wLjQ0bC0wLjY1LC0wLjc2bDIuODYsLTAuNTFsMS4yOCwtMC43OWwzLjc1LDAuOTZsMC4zMiwwLjc2Wk03NTguMDEsMzAwLjM3bC0wLjc5LDEuMDRsLTAuMTQsLTEuMDdsMC40LC0wLjgxbDAuMjksLTAuNDdsMC4yNCwwLjMxbC0wLjAsMS4wWk03NDcuNDUsMjkyLjlsMC40OCwxLjAybC0xLjQ1LC0wLjY5bC0yLjA5LC0wLjIxbC0xLjQ1LDAuMTZsLTEuMjgsLTAuMDdsMC4zNSwtMC44MWwyLjg2LC0wLjFsMi41OCwwLjY4Wk03NDEuMTUsMjg1LjY5bC0wLjE2LC0wLjI1bC0wLjcyLC0zLjA4bDAuNDcsLTEuODZsMC4zNSwtMC4zOGwwLjEsMC43M2wwLjI1LDAuMjZsMS4yOCwwLjE5bDAuMTgsMC43OGwtMC4xMSwxLjhsLTAuOTYsLTAuMThsLTAuMzUsMC4yMmwtMC4zOCwxLjUybDAuMDUsMC4yNFpNNzQxLjE5LDI4NS43NWwwLjc2LDAuOTdsLTAuMTEsMC4wNWwtMC42NSwtMS4wMlpNNzM5LjE4LDI5My41MmwtMC42MSwwLjU0bC0xLjQ0LC0wLjM4bC0wLjI1LC0wLjU1bDEuOTMsLTAuMDlsMC4zNiwwLjQ4Wk03MjguNCwyOTUuODdsLTAuMjcsLTAuMDdsLTIuMjYsMC44OWwtMC4zNywtMC40MWwwLjI3LC0wLjhsLTAuMDksLTAuMzNsLTEuNjgsLTEuMzdsMC4xNywtMi4yOWwtMC40MiwtMC4zbC0xLjY3LDAuNzZsLTAuMTcsMC4yOWwwLjIxLDIuOTJsMC4wOSwzLjM0bC0xLjIyLDAuMjhsLTAuNzgsLTAuNTRsMC42NSwtMi4xbDAuMDEsLTAuMTRsLTAuMzksLTIuNDJsLTAuMjksLTAuMjVsLTAuODYsLTAuMDJsLTAuNjMsLTEuNGwwLjk5LC0xLjYxbDAuMzUsLTEuOTdsMS4yNCwtMy43M2wwLjQ5LC0wLjk2bDEuOTUsLTEuN2wxLjg2LDAuNjlsMy4xNiwwLjM1bDIuOTIsLTAuMWwwLjE3LC0wLjA2bDIuMjQsLTEuNjVsMC4xMSwwLjE0bC0xLjgsMi4yMmwtMS43MiwwLjQ0bC0yLjQxLC0wLjQ4bC00LjIxLDAuMTNsLTIuMTksMC4zNmwtMC4yNSwwLjI0bC0wLjM2LDEuOWwwLjA4LDAuMjdsMi4yNCwyLjIzbDAuNCwwLjAybDEuMjksLTEuMDhsMy4xOSwtMC41OGwtMC4xOSwwLjA2bC0xLjA0LDEuNGwtMi4xMywwLjk0bC0wLjEyLDAuNDVsMi4yNiwzLjA2bC0wLjM3LDAuNjlsMC4wMywwLjMybDEuNTEsMS45NVpNNzI4LjQ4LDI5NS45N2wwLjU5LDAuNzZsLTAuMDIsMS4zN2wtMS4wLDAuNTVsLTAuNjQsLTAuNThsMS4wOSwtMS44NGwtMC4wMiwtMC4yNlpNNzI4LjY0LDI4Ni45NWwwLjc5LC0wLjE0bC0wLjA3LDAuMzlsLTAuNzIsLTAuMjRaTTczMi4zOCwzMTAuMWwtMS44OSwwLjQ5bC0wLjA2LC0wLjA2bDAuMTcsLTAuNjRsMS4wLC0xLjQybDIuMTQsLTAuODdsMC4xLDAuMmwwLjA0LDAuNThsLTEuNDksMS43MlpNNzI4LjI2LDMwNS43MWwtMC4xNywwLjYzbC0zLjUzLDAuNjdsLTMuMDIsLTAuMjhsLTAuMCwtMC40MmwxLjY2LC0wLjQ0bDEuNDcsMC43MWwwLjE2LDAuMDNsMS43NSwtMC4yMWwxLjY5LC0wLjY5Wk03MjIuOTgsMzEwLjMzbC0wLjc0LDAuMDNsLTIuNTIsLTEuMzVsMS40MiwtMC4zbDEuMTksMC43bDAuNzIsMC42M2wtMC4wNiwwLjI4Wk03MTYuMjQsMzA1LjYzbDAuNjYsMC40OWwwLjIyLDAuMDZsMS4zNSwtMC4xOGwwLjMxLDAuNTNsLTQuMTgsMC43N2wtMC44LC0wLjAxbDAuNTEsLTAuODZsMS4yLC0wLjAybDAuMjQsLTAuMTJsMC40OSwtMC42NVpNNzE1Ljg0LDI4MC4yMWwwLjA5LDAuMzRsMi4yNSwxLjg2bC0yLjI1LDAuMjJsLTAuMjQsMC4xN2wtMC44NCwxLjcxbC0wLjAzLDAuMTVsMC4xLDIuMTFsLTIuMjcsMS42MmwtMC4xMywwLjI0bC0wLjA2LDIuNDZsLTAuNzQsMi45MmwtMC4wMiwtMC4wNWwtMC4zOSwtMC4xNmwtMi42MiwxLjA0bC0wLjg2LC0xLjMzbC0wLjIzLC0wLjE0bC0xLjcxLC0wLjE0bC0xLjE5LC0wLjc2bC0wLjI1LC0wLjAzbC0yLjc4LDAuODRsLTAuNzksLTEuMDVsLTAuMjYsLTAuMTJsLTEuNjEsMC4xM2wtMS44LC0wLjI1bC0wLjM2LC0zLjEzbC0wLjE1LC0wLjIzbC0xLjE4LC0wLjY1bC0xLjEzLC0yLjAybC0wLjMzLC0yLjFsMC4yNywtMi4xOWwxLjA1LC0xLjE3bDAuMjgsMS4xMmwwLjEsMC4xNmwxLjcxLDEuNDFsMC4yOCwwLjA1bDEuNTUsLTAuNDlsMS41NCwwLjE3bDAuMjMsLTAuMDdsMS40LC0xLjIxbDEuMDUsLTAuMTlsMi4zLDAuNjhsMC4xNiwwLjBsMi4wNCwtMC41M2wwLjIxLC0wLjE5bDEuMjYsLTMuNDFsMC45MSwtMC44MmwwLjA5LC0wLjE0bDAuOCwtMi42NGwyLjYzLDAuMGwxLjcxLDAuMzNsLTEuMTksMS44OWwwLjAyLDAuMzRsMS43NCwyLjI0bC0wLjM3LDEuMFpNNjkyLjY3LDMwMi4wbDAuMjYsMC4xOWw0LjgsMC4yNWwwLjI4LC0wLjE2bDAuNDQsLTAuODNsNC4yOSwxLjEybDAuODUsMS41MmwwLjIzLDAuMTVsMy43MSwwLjQ1bDIuMzcsMS4xNWwtMi4wNiwwLjY5bC0yLjc3LC0xLjBsLTIuMjUsMC4wN2wtMi41NywtMC4xOGwtMi4zMSwtMC40NWwtMi45NCwtMC45N2wtMS44NCwtMC4yNWwtMC4xMywwLjAxbC0wLjk3LDAuMjlsLTQuMzQsLTAuOThsLTAuMzgsLTAuOTRsLTAuMjUsLTAuMTlsLTEuNzYsLTAuMTRsMS4zMSwtMS44NGwyLjgxLDAuMTRsMS45NywwLjk2bDAuOTUsMC4xOWwwLjI4LDAuNzRaTTY4NS42MywyOTkuMjdsLTIuMzYsMC4wNGwtMi4wNywtMi4wNWwtMy4xNywtMi4wMmwtMS4wNiwtMS41bC0xLjg4LC0yLjAybC0xLjIyLC0xLjg1bC0xLjksLTMuNDlsLTIuMiwtMi4xMWwtMC43MSwtMi4wOGwtMC45NCwtMS45OWwtMC4xLC0wLjEybC0yLjIxLC0xLjU0bC0xLjM1LC0yLjE3bC0xLjg2LC0xLjM5bC0yLjUzLC0yLjY4bC0wLjE0LC0wLjgxbDEuMjIsMC4wOGwzLjc2LDAuNDdsMi4xNiwyLjRsMS45NCwxLjdsMS4zNywxLjA0bDIuMzUsMi42N2wwLjIyLDAuMWwyLjQ0LDAuMDRsMS45OSwxLjYybDEuNDIsMi4wNmwwLjA5LDAuMDlsMS42NywxLjBsLTAuODgsMS44bDAuMTEsMC4zOWwxLjQ0LDAuODdsMC4xMywwLjA0bDAuNjgsMC4wNWwwLjQxLDEuNjJsMC44NywxLjRsMC4yMiwwLjE0bDEuNzEsMC4yMWwxLjA2LDEuMzhsLTAuNjEsMy4wNGwtMC4wOSwzLjZaXCIsIFwibmFtZVwiOiBcIkluZG9uZXNpYVwifSwgXCJVQVwiOiB7XCJwYXRoXCI6IFwiTTUwMC41NCwxNDEuNDJsMC45LDAuMTNsMC4yNywtMC4xMWwwLjUyLC0wLjYybDAuNjgsMC4xM2wyLjQzLC0wLjNsMS4zMiwxLjU3bC0wLjQ1LDAuNDhsLTAuMDcsMC4yNmwwLjIxLDEuMDNsMC4yNywwLjI0bDEuODUsMC4xNWwwLjc2LDEuMjJsLTAuMDUsMC41NWwwLjIsMC4zMWwzLjE4LDEuMTVsMC4xOCwwLjAxbDEuNzUsLTAuNDdsMS40MiwxLjQxbDAuMjIsMC4wOWwxLjQyLC0wLjAzbDMuNDQsMC45OWwwLjAyLDAuNjVsLTAuOTcsMS42MmwtMC4wMywwLjI0bDAuNTIsMS42N2wtMC4yOSwwLjc5bC0yLjI0LDAuMjJsLTAuMTQsMC4wNWwtMS4yOSwwLjg5bC0wLjEzLDAuMjNsLTAuMDcsMS4xNmwtMS43NSwwLjIybC0wLjEyLDAuMDRsLTEuNiwwLjk4bC0yLjI3LDAuMTZsLTAuMTIsMC4wNGwtMi4xNiwxLjE3bC0wLjE2LDAuMjlsMC4xNSwxLjk0bDAuMTQsMC4yM2wxLjIzLDAuNzVsMC4xOCwwLjA0bDIuMDYsLTAuMTVsLTAuMjIsMC41MWwtMi42NywwLjU0bC0zLjI3LDEuNzJsLTEuMCwtMC40NWwwLjQ1LC0xLjE5bC0wLjE5LC0wLjM5bC0yLjM0LC0wLjc4bDAuMTUsLTAuMmwyLjMyLC0xLjBsMC4wOSwtMC40OWwtMC43MywtMC43MmwtMC4xNSwtMC4wOGwtMy42OSwtMC43NWwtMC4xNCwtMC45NmwtMC4zNSwtMC4yNWwtMi4zMiwwLjM5bC0wLjIxLDAuMTVsLTAuOTEsMS43bC0xLjc3LDIuMWwtMC45MywtMC40NGwtMC4yNCwtMC4wbC0xLjA1LDAuNDVsLTAuNDgsLTAuMjVsMC4xMywtMC4wN2wwLjE0LC0wLjE1bDAuNDMsLTEuMDRsMC42NywtMC45N2wwLjA0LC0wLjI2bC0wLjEsLTAuMzFsMC4wNCwtMC4wMmwwLjExLDAuMTlsMC4yNCwwLjE1bDEuNDgsMC4wOWwwLjc4LC0wLjI1bDAuMDcsLTAuNTNsLTAuMjcsLTAuMTlsMC4wOSwtMC4yNWwtMC4wOCwtMC4zM2wtMC44MSwtMC43NGwtMC4zNCwtMS4yNGwtMC4xNCwtMC4xOGwtMC43MywtMC40MmwwLjE1LC0wLjg3bC0wLjExLC0wLjI5bC0xLjEzLC0wLjg2bC0wLjE1LC0wLjA2bC0wLjk3LC0wLjExbC0xLjc5LC0wLjk3bC0wLjIsLTAuMDNsLTEuNjYsMC4zMmwtMC4xMywwLjA2bC0wLjUyLDAuNDFsLTAuOTUsLTAuMGwtMC4yMywwLjExbC0wLjU2LDAuNjZsLTEuNzQsMC4yOWwtMC43OSwwLjQzbC0xLjAxLC0wLjY4bC0wLjE2LC0wLjA1bC0xLjU3LC0wLjAxbC0xLjUyLC0wLjM1bC0wLjIzLDAuMDRsLTAuNzEsMC40NWwtMC4wOSwtMC40M2wtMC4xMywtMC4xOWwtMS4xOCwtMC43NGwwLjM4LC0xLjAybDAuNTMsLTAuNjRsMC4zNSwwLjEybDAuMzcsLTAuNDFsLTAuNTcsLTEuMjlsMi4xLC0yLjVsMS4xNiwtMC4zNmwwLjIsLTAuMmwwLjI3LC0wLjkybC0wLjAxLC0wLjJsLTEuMSwtMi41MmwwLjc5LC0wLjA5bDAuMTMsLTAuMDVsMS4zLC0wLjg2bDEuODMsLTAuMDdsMi40OCwwLjI2bDIuODQsMC44bDEuOTEsMC4wNmwwLjg4LDAuNDVsMC4yOSwtMC4wMWwwLjcyLC0wLjQ0bDAuNDksMC41OGwwLjI1LDAuMTFsMi4yLC0wLjE2bDAuOTQsMC4zbDAuMzksLTAuMjZsMC4xNSwtMS41N2wwLjYxLC0wLjU5bDIuMDEsLTAuMTlaXCIsIFwibmFtZVwiOiBcIlVrcmFpbmVcIn0sIFwiUUFcIjoge1wicGF0aFwiOiBcIk01NDguNDcsMjIxLjQ3bC0wLjE1LC0xLjcybDAuNTksLTEuMjNsMC4zOCwtMC4xNmwwLjU0LDAuNmwwLjA0LDEuNGwtMC40NywxLjM3bC0wLjQxLDAuMTFsLTAuNTMsLTAuMzdaXCIsIFwibmFtZVwiOiBcIlFhdGFyXCJ9LCBcIk1aXCI6IHtcInBhdGhcIjogXCJNNTA3LjcxLDMxNC4xNGwxLjY1LC0wLjE4bDIuOTYsMC43bDAuMiwtMC4wMmwwLjYsLTAuMjlsMS42OCwtMC4wNmwwLjE4LC0wLjA3bDAuOCwtMC42OWwxLjUsMC4wMmwyLjc0LC0wLjk4bDEuNzQsLTEuMjdsMC4yNSwwLjdsLTAuMSwyLjQ3bDAuMzEsMi4yN2wwLjEsMy45N2wwLjQyLDEuMjRsLTAuNywxLjcxbC0wLjk0LDEuNzNsLTEuNTIsMS41MmwtNS4wNiwyLjIxbC0yLjg4LDIuOGwtMS4wMSwwLjUxbC0xLjcyLDEuODFsLTAuOTksMC41OGwtMC4xNSwwLjIzbC0wLjIxLDEuODZsMC4wNCwwLjE5bDEuMTcsMS45NWwwLjQ3LDEuNDdsMC4wMywwLjc0bDAuMzksMC4yOGwwLjA1LC0wLjAxbC0wLjA2LDIuMTNsLTAuMzksMS4xOWwwLjEsMC4zM2wwLjQyLDAuMzJsLTAuMjgsMC44M2wtMC45NSwwLjg2bC0yLjAzLDAuODhsLTMuMDgsMS40OWwtMS4xLDAuOTlsLTAuMDksMC4yOGwwLjIxLDEuMTNsMC4yMSwwLjIzbDAuMzgsMC4xMWwtMC4xNCwwLjg5bC0xLjM5LC0wLjAybC0wLjE3LC0wLjk0bC0wLjM4LC0xLjIzbC0wLjIsLTAuODlsMC40NCwtMi45MWwtMC4wMSwtMC4xNGwtMC42NSwtMS44OGwtMS4xNSwtMy41NWwyLjUyLC0yLjg1bDAuNjgsLTEuODlsMC4yOSwtMC4xOGwwLjE0LC0wLjJsMC4yOCwtMS41M2wtMC4wMywtMC4xOWwtMC4zNiwtMC43bDAuMSwtMS44M2wwLjQ5LC0xLjg0bC0wLjAxLC0zLjI2bC0wLjE0LC0wLjI1bC0xLjMsLTAuODNsLTAuMTEsLTAuMDRsLTEuMDgsLTAuMTdsLTAuNDcsLTAuNTVsLTAuMSwtMC4wOGwtMS4xNiwtMC41NGwtMC4xMywtMC4wM2wtMS44MywwLjA0bC0wLjMyLC0yLjI1bDcuMTksLTEuOTlsMS4zMiwxLjEybDAuMjksMC4wNmwwLjU1LC0wLjE5bDAuNzUsMC40OWwwLjExLDAuODFsLTAuNDksMS4xMWwtMC4wMiwwLjE1bDAuMTksMS44MWwwLjA5LDAuMThsMS42MywxLjU5bDAuNDgsLTAuMWwwLjcyLC0xLjY4bDAuOTksLTAuNDlsMC4xNywtMC4yOWwtMC4yMSwtMy4yOWwtMC4wNCwtMC4xM2wtMS4xMSwtMS45MmwtMC45LC0wLjgybC0wLjIxLC0wLjA4bC0wLjYyLDAuMDNsLTAuNjMsLTIuOThsMC42MSwtMS42N1pcIiwgXCJuYW1lXCI6IFwiTW96YW1iaXF1ZVwifX0sIFwiaGVpZ2h0XCI6IDQ0MC43MDYzMTA3NDQxMzMxLCBcInByb2plY3Rpb25cIjoge1widHlwZVwiOiBcIm1pbGxcIiwgXCJjZW50cmFsTWVyaWRpYW5cIjogMTEuNX0sIFwid2lkdGhcIjogOTAwLjB9KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9wbHVnaW5zL2p2ZWN0b3JtYXAvanF1ZXJ5LWp2ZWN0b3JtYXAtd29ybGQtbWlsbC1lbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///53\n");
-
-/***/ }),
-
-/***/ 54:
-/***/ (function(module, exports) {
-
-eval("/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.8\n *\n */\n(function(e){e.fn.extend({slimScroll:function(f){var a=e.extend({width:\"auto\",height:\"250px\",size:\"7px\",color:\"#000\",position:\"right\",distance:\"1px\",start:\"top\",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:\"#333\",railOpacity:.2,railDraggable:!0,railClass:\"slimScrollRail\",barClass:\"slimScrollBar\",wrapperClass:\"slimScrollDiv\",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:\"7px\",railBorderRadius:\"7px\"},f);this.each(function(){function v(d){if(r){d=d||window.event;\nvar c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest(\".\"+a.wrapperClass).is(b.parent())&&n(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function n(d,g,e){k=!1;var f=b.outerHeight()-c.outerHeight();g&&(g=parseInt(c.css(\"top\"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),g=Math.min(Math.max(g,0),f),g=0<d?Math.ceil(g):Math.floor(g),c.css({top:g+\"px\"}));l=parseInt(c.css(\"top\"))/(b.outerHeight()-c.outerHeight());g=\nl*(b[0].scrollHeight-b.outerHeight());e&&(g=d,d=g/b[0].scrollHeight*b.outerHeight(),d=Math.min(Math.max(d,0),f),c.css({top:d+\"px\"}));b.scrollTop(g);b.trigger(\"slimscrolling\",~~g);w();p()}function x(){u=Math.max(b.outerHeight()/b[0].scrollHeight*b.outerHeight(),30);c.css({height:u+\"px\"});var a=u==b.outerHeight()?\"none\":\"block\";c.css({display:a})}function w(){x();clearTimeout(B);l==~~l?(k=a.allowPageScroll,C!=l&&b.trigger(\"slimscroll\",0==~~l?\"top\":\"bottom\")):k=!1;C=l;u>=b.outerHeight()?k=!0:(c.stop(!0,\n!0).fadeIn(\"fast\"),a.railVisible&&m.stop(!0,!0).fadeIn(\"fast\"))}function p(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut(\"slow\"),m.fadeOut(\"slow\"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var q=b.scrollTop(),c=b.siblings(\".\"+a.barClass),m=b.siblings(\".\"+a.railClass);x();if(e.isPlainObject(f)){if(\"height\"in f&&\"auto\"==f.height){b.parent().css(\"height\",\"auto\");b.css(\"height\",\"auto\");var h=b.parent().parent().height();b.parent().css(\"height\",\nh);b.css(\"height\",h)}else\"height\"in f&&(h=f.height,b.parent().css(\"height\",h),b.css(\"height\",h));if(\"scrollTo\"in f)q=parseInt(a.scrollTo);else if(\"scrollBy\"in f)q+=parseInt(a.scrollBy);else if(\"destroy\"in f){c.remove();m.remove();b.unwrap();return}n(q,!1,!0)}}else if(!(e.isPlainObject(f)&&\"destroy\"in f)){a.height=\"auto\"==a.height?b.parent().height():a.height;q=e(\"<div></div>\").addClass(a.wrapperClass).css({position:\"relative\",overflow:\"hidden\",width:a.width,height:a.height});b.css({overflow:\"hidden\",\nwidth:a.width,height:a.height});var m=e(\"<div></div>\").addClass(a.railClass).css({width:a.size,height:\"100%\",position:\"absolute\",top:0,display:a.alwaysVisible&&a.railVisible?\"block\":\"none\",\"border-radius\":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e(\"<div></div>\").addClass(a.barClass).css({background:a.color,width:a.size,position:\"absolute\",top:0,opacity:a.opacity,display:a.alwaysVisible?\"block\":\"none\",\"border-radius\":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,\nWebkitBorderRadius:a.borderRadius,zIndex:99}),h=\"right\"==a.position?{right:a.distance}:{left:a.distance};m.css(h);c.css(h);b.wrap(q);b.parent().append(c);b.parent().append(m);a.railDraggable&&c.bind(\"mousedown\",function(a){var b=e(document);z=!0;t=parseFloat(c.css(\"top\"));pageY=a.pageY;b.bind(\"mousemove.slimscroll\",function(a){currTop=t+a.pageY-pageY;c.css(\"top\",currTop);n(0,c.position().top,!1)});b.bind(\"mouseup.slimscroll\",function(a){z=!1;p();b.unbind(\".slimscroll\")});return!1}).bind(\"selectstart.slimscroll\",\nfunction(a){a.stopPropagation();a.preventDefault();return!1});m.hover(function(){w()},function(){p()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();p()},function(){r=!1;p()});b.bind(\"touchstart\",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind(\"touchmove\",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(n((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)});\nx();\"bottom\"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),n(0,!0)):\"top\"!==a.start&&(n(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener(\"DOMMouseScroll\",v,!1),this.addEventListener(\"mousewheel\",v,!1)):document.attachEvent(\"onmousewheel\",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS1zbGltc2Nyb2xsL2pxdWVyeS5zbGltc2Nyb2xsLm1pbi5qcz8xNWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhLHVCQUF1QixnQkFBZ0IsNlhBQTZYLElBQUkscUJBQXFCLGNBQWMsTUFBTTtBQUMzZSxRQUFRLG9DQUFvQyx5QkFBeUIsMkZBQTJGLHlDQUF5Qyx1QkFBdUIsa0JBQWtCLEtBQUssc0NBQXNDLDZJQUE2SSxXQUFXLEdBQUcsMkRBQTJEO0FBQ25mLHNDQUFzQyxpRkFBaUYsV0FBVyxHQUFHLGVBQWUsK0JBQStCLElBQUksSUFBSSxhQUFhLGlFQUFpRSxPQUFPLGNBQWMsRUFBRSx3Q0FBd0MsT0FBTyxVQUFVLEVBQUUsYUFBYSxJQUFJLGdCQUFnQixzRkFBc0YsSUFBSTtBQUN0ZCxnRUFBZ0UsYUFBYSwwQ0FBMEMsaUVBQWlFLE9BQU8sbUNBQW1DLHdDQUF3QywrRUFBK0UsSUFBSSx1QkFBdUIsbUNBQW1DLGdDQUFnQyx1QkFBdUIsbUNBQW1DO0FBQ2pmLEdBQUcsa0JBQWtCLDRFQUE0RSx5Q0FBeUMsK0NBQStDLHVCQUF1QixXQUFXLFdBQVcsV0FBVyxPQUFPLFlBQVksOENBQThDLHVEQUF1RCxpREFBaUQsb0VBQW9FLEVBQUUsT0FBTztBQUN2ZSw4QkFBOEIsRUFBRSxrREFBa0QscU1BQXFNLCtDQUErQztBQUN0VSw0Q0FBNEMseUJBQXlCLGlCQUFpQixFQUFFLGlCQUFpQixTQUFTLFNBQVMsVUFBVSxxQkFBcUIscUJBQXFCLGdEQUFnRCxrQkFBa0IsS0FBSywyQkFBMkIsY0FBYywwQ0FBMEMsd0JBQXdCLHFCQUFxQix5QkFBeUIsRUFBRSx3Q0FBd0MsS0FBSyxJQUFJLHdCQUF3QixFQUFFLFNBQVM7QUFDcmUsWUFBWSxvQkFBb0IsbUJBQW1CLFNBQVMsRUFBRSxtQkFBbUIsSUFBSSxZQUFZLElBQUksRUFBRSxtQkFBbUIsS0FBSyxZQUFZLEtBQUssRUFBRSxtQkFBbUIsS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxrQ0FBa0MscUVBQXFFLEVBQUUsK0JBQStCLG9DQUFvQyxrSUFBa0k7QUFDdmYsSUFBSSwyQkFBMkIsb0NBQW9DLDZGQUE2Rix3SkFBd0osRUFBRSxhQUFhLEVBQUUsYUFBYSwyQkFBMkIsRUFBRSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBDb3B5cmlnaHQgKGMpIDIwMTEgUGlvdHIgUm9jaGFsYSAoaHR0cDovL3JvY2hhLmxhKVxuICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqIGFuZCBHUEwgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwKSBsaWNlbnNlcy5cbiAqXG4gKiBWZXJzaW9uOiAxLjMuOFxuICpcbiAqL1xuKGZ1bmN0aW9uKGUpe2UuZm4uZXh0ZW5kKHtzbGltU2Nyb2xsOmZ1bmN0aW9uKGYpe3ZhciBhPWUuZXh0ZW5kKHt3aWR0aDpcImF1dG9cIixoZWlnaHQ6XCIyNTBweFwiLHNpemU6XCI3cHhcIixjb2xvcjpcIiMwMDBcIixwb3NpdGlvbjpcInJpZ2h0XCIsZGlzdGFuY2U6XCIxcHhcIixzdGFydDpcInRvcFwiLG9wYWNpdHk6LjQsYWx3YXlzVmlzaWJsZTohMSxkaXNhYmxlRmFkZU91dDohMSxyYWlsVmlzaWJsZTohMSxyYWlsQ29sb3I6XCIjMzMzXCIscmFpbE9wYWNpdHk6LjIscmFpbERyYWdnYWJsZTohMCxyYWlsQ2xhc3M6XCJzbGltU2Nyb2xsUmFpbFwiLGJhckNsYXNzOlwic2xpbVNjcm9sbEJhclwiLHdyYXBwZXJDbGFzczpcInNsaW1TY3JvbGxEaXZcIixhbGxvd1BhZ2VTY3JvbGw6ITEsd2hlZWxTdGVwOjIwLHRvdWNoU2Nyb2xsU3RlcDoyMDAsYm9yZGVyUmFkaXVzOlwiN3B4XCIscmFpbEJvcmRlclJhZGl1czpcIjdweFwifSxmKTt0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiB2KGQpe2lmKHIpe2Q9ZHx8d2luZG93LmV2ZW50O1xudmFyIGM9MDtkLndoZWVsRGVsdGEmJihjPS1kLndoZWVsRGVsdGEvMTIwKTtkLmRldGFpbCYmKGM9ZC5kZXRhaWwvMyk7ZShkLnRhcmdldHx8ZC5zcmNUYXJnZXR8fGQuc3JjRWxlbWVudCkuY2xvc2VzdChcIi5cIithLndyYXBwZXJDbGFzcykuaXMoYi5wYXJlbnQoKSkmJm4oYywhMCk7ZC5wcmV2ZW50RGVmYXVsdCYmIWsmJmQucHJldmVudERlZmF1bHQoKTtrfHwoZC5yZXR1cm5WYWx1ZT0hMSl9fWZ1bmN0aW9uIG4oZCxnLGUpe2s9ITE7dmFyIGY9Yi5vdXRlckhlaWdodCgpLWMub3V0ZXJIZWlnaHQoKTtnJiYoZz1wYXJzZUludChjLmNzcyhcInRvcFwiKSkrZCpwYXJzZUludChhLndoZWVsU3RlcCkvMTAwKmMub3V0ZXJIZWlnaHQoKSxnPU1hdGgubWluKE1hdGgubWF4KGcsMCksZiksZz0wPGQ/TWF0aC5jZWlsKGcpOk1hdGguZmxvb3IoZyksYy5jc3Moe3RvcDpnK1wicHhcIn0pKTtsPXBhcnNlSW50KGMuY3NzKFwidG9wXCIpKS8oYi5vdXRlckhlaWdodCgpLWMub3V0ZXJIZWlnaHQoKSk7Zz1cbmwqKGJbMF0uc2Nyb2xsSGVpZ2h0LWIub3V0ZXJIZWlnaHQoKSk7ZSYmKGc9ZCxkPWcvYlswXS5zY3JvbGxIZWlnaHQqYi5vdXRlckhlaWdodCgpLGQ9TWF0aC5taW4oTWF0aC5tYXgoZCwwKSxmKSxjLmNzcyh7dG9wOmQrXCJweFwifSkpO2Iuc2Nyb2xsVG9wKGcpO2IudHJpZ2dlcihcInNsaW1zY3JvbGxpbmdcIix+fmcpO3coKTtwKCl9ZnVuY3Rpb24geCgpe3U9TWF0aC5tYXgoYi5vdXRlckhlaWdodCgpL2JbMF0uc2Nyb2xsSGVpZ2h0KmIub3V0ZXJIZWlnaHQoKSwzMCk7Yy5jc3Moe2hlaWdodDp1K1wicHhcIn0pO3ZhciBhPXU9PWIub3V0ZXJIZWlnaHQoKT9cIm5vbmVcIjpcImJsb2NrXCI7Yy5jc3Moe2Rpc3BsYXk6YX0pfWZ1bmN0aW9uIHcoKXt4KCk7Y2xlYXJUaW1lb3V0KEIpO2w9PX5+bD8oaz1hLmFsbG93UGFnZVNjcm9sbCxDIT1sJiZiLnRyaWdnZXIoXCJzbGltc2Nyb2xsXCIsMD09fn5sP1widG9wXCI6XCJib3R0b21cIikpOms9ITE7Qz1sO3U+PWIub3V0ZXJIZWlnaHQoKT9rPSEwOihjLnN0b3AoITAsXG4hMCkuZmFkZUluKFwiZmFzdFwiKSxhLnJhaWxWaXNpYmxlJiZtLnN0b3AoITAsITApLmZhZGVJbihcImZhc3RcIikpfWZ1bmN0aW9uIHAoKXthLmFsd2F5c1Zpc2libGV8fChCPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc2FibGVGYWRlT3V0JiZyfHx5fHx6fHwoYy5mYWRlT3V0KFwic2xvd1wiKSxtLmZhZGVPdXQoXCJzbG93XCIpKX0sMUUzKSl9dmFyIHIseSx6LEIsQSx1LGwsQyxrPSExLGI9ZSh0aGlzKTtpZihiLnBhcmVudCgpLmhhc0NsYXNzKGEud3JhcHBlckNsYXNzKSl7dmFyIHE9Yi5zY3JvbGxUb3AoKSxjPWIuc2libGluZ3MoXCIuXCIrYS5iYXJDbGFzcyksbT1iLnNpYmxpbmdzKFwiLlwiK2EucmFpbENsYXNzKTt4KCk7aWYoZS5pc1BsYWluT2JqZWN0KGYpKXtpZihcImhlaWdodFwiaW4gZiYmXCJhdXRvXCI9PWYuaGVpZ2h0KXtiLnBhcmVudCgpLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTtiLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTt2YXIgaD1iLnBhcmVudCgpLnBhcmVudCgpLmhlaWdodCgpO2IucGFyZW50KCkuY3NzKFwiaGVpZ2h0XCIsXG5oKTtiLmNzcyhcImhlaWdodFwiLGgpfWVsc2VcImhlaWdodFwiaW4gZiYmKGg9Zi5oZWlnaHQsYi5wYXJlbnQoKS5jc3MoXCJoZWlnaHRcIixoKSxiLmNzcyhcImhlaWdodFwiLGgpKTtpZihcInNjcm9sbFRvXCJpbiBmKXE9cGFyc2VJbnQoYS5zY3JvbGxUbyk7ZWxzZSBpZihcInNjcm9sbEJ5XCJpbiBmKXErPXBhcnNlSW50KGEuc2Nyb2xsQnkpO2Vsc2UgaWYoXCJkZXN0cm95XCJpbiBmKXtjLnJlbW92ZSgpO20ucmVtb3ZlKCk7Yi51bndyYXAoKTtyZXR1cm59bihxLCExLCEwKX19ZWxzZSBpZighKGUuaXNQbGFpbk9iamVjdChmKSYmXCJkZXN0cm95XCJpbiBmKSl7YS5oZWlnaHQ9XCJhdXRvXCI9PWEuaGVpZ2h0P2IucGFyZW50KCkuaGVpZ2h0KCk6YS5oZWlnaHQ7cT1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoYS53cmFwcGVyQ2xhc3MpLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9KTtiLmNzcyh7b3ZlcmZsb3c6XCJoaWRkZW5cIixcbndpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fSk7dmFyIG09ZShcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKGEucmFpbENsYXNzKS5jc3Moe3dpZHRoOmEuc2l6ZSxoZWlnaHQ6XCIxMDAlXCIscG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDowLGRpc3BsYXk6YS5hbHdheXNWaXNpYmxlJiZhLnJhaWxWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIixcImJvcmRlci1yYWRpdXNcIjphLnJhaWxCb3JkZXJSYWRpdXMsYmFja2dyb3VuZDphLnJhaWxDb2xvcixvcGFjaXR5OmEucmFpbE9wYWNpdHksekluZGV4OjkwfSksYz1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoYS5iYXJDbGFzcykuY3NzKHtiYWNrZ3JvdW5kOmEuY29sb3Isd2lkdGg6YS5zaXplLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCxvcGFjaXR5OmEub3BhY2l0eSxkaXNwbGF5OmEuYWx3YXlzVmlzaWJsZT9cImJsb2NrXCI6XCJub25lXCIsXCJib3JkZXItcmFkaXVzXCI6YS5ib3JkZXJSYWRpdXMsQm9yZGVyUmFkaXVzOmEuYm9yZGVyUmFkaXVzLE1vekJvcmRlclJhZGl1czphLmJvcmRlclJhZGl1cyxcbldlYmtpdEJvcmRlclJhZGl1czphLmJvcmRlclJhZGl1cyx6SW5kZXg6OTl9KSxoPVwicmlnaHRcIj09YS5wb3NpdGlvbj97cmlnaHQ6YS5kaXN0YW5jZX06e2xlZnQ6YS5kaXN0YW5jZX07bS5jc3MoaCk7Yy5jc3MoaCk7Yi53cmFwKHEpO2IucGFyZW50KCkuYXBwZW5kKGMpO2IucGFyZW50KCkuYXBwZW5kKG0pO2EucmFpbERyYWdnYWJsZSYmYy5iaW5kKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYSl7dmFyIGI9ZShkb2N1bWVudCk7ej0hMDt0PXBhcnNlRmxvYXQoYy5jc3MoXCJ0b3BcIikpO3BhZ2VZPWEucGFnZVk7Yi5iaW5kKFwibW91c2Vtb3ZlLnNsaW1zY3JvbGxcIixmdW5jdGlvbihhKXtjdXJyVG9wPXQrYS5wYWdlWS1wYWdlWTtjLmNzcyhcInRvcFwiLGN1cnJUb3ApO24oMCxjLnBvc2l0aW9uKCkudG9wLCExKX0pO2IuYmluZChcIm1vdXNldXAuc2xpbXNjcm9sbFwiLGZ1bmN0aW9uKGEpe3o9ITE7cCgpO2IudW5iaW5kKFwiLnNsaW1zY3JvbGxcIil9KTtyZXR1cm4hMX0pLmJpbmQoXCJzZWxlY3RzdGFydC5zbGltc2Nyb2xsXCIsXG5mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpO2EucHJldmVudERlZmF1bHQoKTtyZXR1cm4hMX0pO20uaG92ZXIoZnVuY3Rpb24oKXt3KCl9LGZ1bmN0aW9uKCl7cCgpfSk7Yy5ob3ZlcihmdW5jdGlvbigpe3k9ITB9LGZ1bmN0aW9uKCl7eT0hMX0pO2IuaG92ZXIoZnVuY3Rpb24oKXtyPSEwO3coKTtwKCl9LGZ1bmN0aW9uKCl7cj0hMTtwKCl9KTtiLmJpbmQoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oYSxiKXthLm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGgmJihBPWEub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZKX0pO2IuYmluZChcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGIpe2t8fGIub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2Iub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCYmKG4oKEEtYi5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkpL2EudG91Y2hTY3JvbGxTdGVwLCEwKSxBPWIub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZKX0pO1xueCgpO1wiYm90dG9tXCI9PT1hLnN0YXJ0PyhjLmNzcyh7dG9wOmIub3V0ZXJIZWlnaHQoKS1jLm91dGVySGVpZ2h0KCl9KSxuKDAsITApKTpcInRvcFwiIT09YS5zdGFydCYmKG4oZShhLnN0YXJ0KS5wb3NpdGlvbigpLnRvcCxudWxsLCEwKSxhLmFsd2F5c1Zpc2libGV8fGMuaGlkZSgpKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj8odGhpcy5hZGRFdmVudExpc3RlbmVyKFwiRE9NTW91c2VTY3JvbGxcIix2LCExKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXdoZWVsXCIsdiwhMSkpOmRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25tb3VzZXdoZWVsXCIsdil9fSk7cmV0dXJuIHRoaXN9fSk7ZS5mbi5leHRlbmQoe3NsaW1zY3JvbGw6ZS5mbi5zbGltU2Nyb2xsfSl9KShqUXVlcnkpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnktc2xpbXNjcm9sbC9qcXVlcnkuc2xpbXNjcm9sbC5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///54\n");
-
-/***/ }),
-
-/***/ 55:
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 1.0.2\n *\n * Copyright 2015 Nick Downie\n * Released under the MIT license\n * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md\n */\n\n\n(function(){\n\n\t\"use strict\";\n\n\t//Declare root variable - window in the browser, global on the server\n\tvar root = this,\n\t\tprevious = root.Chart;\n\n\t//Occupy the global variable of Chart, and create a simple base class\n\tvar Chart = function(context){\n\t\tvar chart = this;\n\t\tthis.canvas = context.canvas;\n\n\t\tthis.ctx = context;\n\n\t\t//Variables global to the chart\n\t\tvar computeDimension = function(element,dimension)\n\t\t{\n\t\t\tif (element['offset'+dimension])\n\t\t\t{\n\t\t\t\treturn element['offset'+dimension];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn document.defaultView.getComputedStyle(element).getPropertyValue(dimension);\n\t\t\t}\n\t\t}\n\n\t\tvar width = this.width = computeDimension(context.canvas,'Width');\n\t\tvar height = this.height = computeDimension(context.canvas,'Height');\n\n\t\t// Firefox requires this to work correctly\n\t\tcontext.canvas.width = width;\n\t\tcontext.canvas.height = height;\n\n\t\tvar width = this.width = context.canvas.width;\n\t\tvar height = this.height = context.canvas.height;\n\t\tthis.aspectRatio = this.width / this.height;\n\t\t//High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale.\n\t\thelpers.retinaScale(this);\n\n\t\treturn this;\n\t};\n\t//Globally expose the defaults to allow for user updating/changing\n\tChart.defaults = {\n\t\tglobal: {\n\t\t\t// Boolean - Whether to animate the chart\n\t\t\tanimation: true,\n\n\t\t\t// Number - Number of animation steps\n\t\t\tanimationSteps: 60,\n\n\t\t\t// String - Animation easing effect\n\t\t\tanimationEasing: \"easeOutQuart\",\n\n\t\t\t// Boolean - If we should show the scale at all\n\t\t\tshowScale: true,\n\n\t\t\t// Boolean - If we want to override with a hard coded scale\n\t\t\tscaleOverride: false,\n\n\t\t\t// ** Required if scaleOverride is true **\n\t\t\t// Number - The number of steps in a hard coded scale\n\t\t\tscaleSteps: null,\n\t\t\t// Number - The value jump in the hard coded scale\n\t\t\tscaleStepWidth: null,\n\t\t\t// Number - The scale starting value\n\t\t\tscaleStartValue: null,\n\n\t\t\t// String - Colour of the scale line\n\t\t\tscaleLineColor: \"rgba(0,0,0,.1)\",\n\n\t\t\t// Number - Pixel width of the scale line\n\t\t\tscaleLineWidth: 1,\n\n\t\t\t// Boolean - Whether to show labels on the scale\n\t\t\tscaleShowLabels: true,\n\n\t\t\t// Interpolated JS string - can access value\n\t\t\tscaleLabel: \"<%=value%>\",\n\n\t\t\t// Boolean - Whether the scale should stick to integers, and not show any floats even if drawing space is there\n\t\t\tscaleIntegersOnly: true,\n\n\t\t\t// Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value\n\t\t\tscaleBeginAtZero: false,\n\n\t\t\t// String - Scale label font declaration for the scale label\n\t\t\tscaleFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Scale label font size in pixels\n\t\t\tscaleFontSize: 12,\n\n\t\t\t// String - Scale label font weight style\n\t\t\tscaleFontStyle: \"normal\",\n\n\t\t\t// String - Scale label font colour\n\t\t\tscaleFontColor: \"#666\",\n\n\t\t\t// Boolean - whether or not the chart should be responsive and resize when the browser does.\n\t\t\tresponsive: false,\n\n\t\t\t// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n\t\t\tmaintainAspectRatio: true,\n\n\t\t\t// Boolean - Determines whether to draw tooltips on the canvas or not - attaches events to touchmove & mousemove\n\t\t\tshowTooltips: true,\n\n\t\t\t// Boolean - Determines whether to draw built-in tooltip or call custom tooltip function\n\t\t\tcustomTooltips: false,\n\n\t\t\t// Array - Array of string names to attach tooltip events\n\t\t\ttooltipEvents: [\"mousemove\", \"touchstart\", \"touchmove\", \"mouseout\"],\n\n\t\t\t// String - Tooltip background colour\n\t\t\ttooltipFillColor: \"rgba(0,0,0,0.8)\",\n\n\t\t\t// String - Tooltip label font declaration for the scale label\n\t\t\ttooltipFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Tooltip label font size in pixels\n\t\t\ttooltipFontSize: 14,\n\n\t\t\t// String - Tooltip font weight style\n\t\t\ttooltipFontStyle: \"normal\",\n\n\t\t\t// String - Tooltip label font colour\n\t\t\ttooltipFontColor: \"#fff\",\n\n\t\t\t// String - Tooltip title font declaration for the scale label\n\t\t\ttooltipTitleFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\n\t\t\t// Number - Tooltip title font size in pixels\n\t\t\ttooltipTitleFontSize: 14,\n\n\t\t\t// String - Tooltip title font weight style\n\t\t\ttooltipTitleFontStyle: \"bold\",\n\n\t\t\t// String - Tooltip title font colour\n\t\t\ttooltipTitleFontColor: \"#fff\",\n\n\t\t\t// Number - pixel width of padding around tooltip text\n\t\t\ttooltipYPadding: 6,\n\n\t\t\t// Number - pixel width of padding around tooltip text\n\t\t\ttooltipXPadding: 6,\n\n\t\t\t// Number - Size of the caret on the tooltip\n\t\t\ttooltipCaretSize: 8,\n\n\t\t\t// Number - Pixel radius of the tooltip border\n\t\t\ttooltipCornerRadius: 6,\n\n\t\t\t// Number - Pixel offset from point x to tooltip edge\n\t\t\ttooltipXOffset: 10,\n\n\t\t\t// String - Template string for single tooltips\n\t\t\ttooltipTemplate: \"<%if (label){%><%=label%>: <%}%><%= value %>\",\n\n\t\t\t// String - Template string for single tooltips\n\t\t\tmultiTooltipTemplate: \"<%= value %>\",\n\n\t\t\t// String - Colour behind the legend colour block\n\t\t\tmultiTooltipKeyBackground: '#fff',\n\n\t\t\t// Function - Will fire on animation progression.\n\t\t\tonAnimationProgress: function(){},\n\n\t\t\t// Function - Will fire on animation completion.\n\t\t\tonAnimationComplete: function(){}\n\n\t\t}\n\t};\n\n\t//Create a dictionary of chart types, to allow for extension of existing types\n\tChart.types = {};\n\n\t//Global Chart helpers object for utility methods and classes\n\tvar helpers = Chart.helpers = {};\n\n\t\t//-- Basic js utility methods\n\tvar each = helpers.each = function(loopable,callback,self){\n\t\t\tvar additionalArgs = Array.prototype.slice.call(arguments, 3);\n\t\t\t// Check to see if null or undefined firstly.\n\t\t\tif (loopable){\n\t\t\t\tif (loopable.length === +loopable.length){\n\t\t\t\t\tvar i;\n\t\t\t\t\tfor (i=0; i<loopable.length; i++){\n\t\t\t\t\t\tcallback.apply(self,[loopable[i], i].concat(additionalArgs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tfor (var item in loopable){\n\t\t\t\t\t\tcallback.apply(self,[loopable[item],item].concat(additionalArgs));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tclone = helpers.clone = function(obj){\n\t\t\tvar objClone = {};\n\t\t\teach(obj,function(value,key){\n\t\t\t\tif (obj.hasOwnProperty(key)) objClone[key] = value;\n\t\t\t});\n\t\t\treturn objClone;\n\t\t},\n\t\textend = helpers.extend = function(base){\n\t\t\teach(Array.prototype.slice.call(arguments,1), function(extensionObject) {\n\t\t\t\teach(extensionObject,function(value,key){\n\t\t\t\t\tif (extensionObject.hasOwnProperty(key)) base[key] = value;\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn base;\n\t\t},\n\t\tmerge = helpers.merge = function(base,master){\n\t\t\t//Merge properties in left object over to a shallow clone of object right.\n\t\t\tvar args = Array.prototype.slice.call(arguments,0);\n\t\t\targs.unshift({});\n\t\t\treturn extend.apply(null, args);\n\t\t},\n\t\tindexOf = helpers.indexOf = function(arrayToSearch, item){\n\t\t\tif (Array.prototype.indexOf) {\n\t\t\t\treturn arrayToSearch.indexOf(item);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tfor (var i = 0; i < arrayToSearch.length; i++) {\n\t\t\t\t\tif (arrayToSearch[i] === item) return i;\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t},\n\t\twhere = helpers.where = function(collection, filterCallback){\n\t\t\tvar filtered = [];\n\n\t\t\thelpers.each(collection, function(item){\n\t\t\t\tif (filterCallback(item)){\n\t\t\t\t\tfiltered.push(item);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn filtered;\n\t\t},\n\t\tfindNextWhere = helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex){\n\t\t\t// Default to start of the array\n\t\t\tif (!startIndex){\n\t\t\t\tstartIndex = -1;\n\t\t\t}\n\t\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\tif (filterCallback(currentItem)){\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfindPreviousWhere = helpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex){\n\t\t\t// Default to end of the array\n\t\t\tif (!startIndex){\n\t\t\t\tstartIndex = arrayToSearch.length;\n\t\t\t}\n\t\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\tif (filterCallback(currentItem)){\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinherits = helpers.inherits = function(extensions){\n\t\t\t//Basic javascript inheritance based on the model created in Backbone.js\n\t\t\tvar parent = this;\n\t\t\tvar ChartElement = (extensions && extensions.hasOwnProperty(\"constructor\")) ? extensions.constructor : function(){ return parent.apply(this, arguments); };\n\n\t\t\tvar Surrogate = function(){ this.constructor = ChartElement;};\n\t\t\tSurrogate.prototype = parent.prototype;\n\t\t\tChartElement.prototype = new Surrogate();\n\n\t\t\tChartElement.extend = inherits;\n\n\t\t\tif (extensions) extend(ChartElement.prototype, extensions);\n\n\t\t\tChartElement.__super__ = parent.prototype;\n\n\t\t\treturn ChartElement;\n\t\t},\n\t\tnoop = helpers.noop = function(){},\n\t\tuid = helpers.uid = (function(){\n\t\t\tvar id=0;\n\t\t\treturn function(){\n\t\t\t\treturn \"chart-\" + id++;\n\t\t\t};\n\t\t})(),\n\t\twarn = helpers.warn = function(str){\n\t\t\t//Method for warning of errors\n\t\t\tif (window.console && typeof window.console.warn == \"function\") console.warn(str);\n\t\t},\n\t\tamd = helpers.amd = (\"function\" == 'function' && __webpack_require__(11)),\n\t\t//-- Math methods\n\t\tisNumber = helpers.isNumber = function(n){\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t},\n\t\tmax = helpers.max = function(array){\n\t\t\treturn Math.max.apply( Math, array );\n\t\t},\n\t\tmin = helpers.min = function(array){\n\t\t\treturn Math.min.apply( Math, array );\n\t\t},\n\t\tcap = helpers.cap = function(valueToCap,maxValue,minValue){\n\t\t\tif(isNumber(maxValue)) {\n\t\t\t\tif( valueToCap > maxValue ) {\n\t\t\t\t\treturn maxValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(isNumber(minValue)){\n\t\t\t\tif ( valueToCap < minValue ){\n\t\t\t\t\treturn minValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn valueToCap;\n\t\t},\n\t\tgetDecimalPlaces = helpers.getDecimalPlaces = function(num){\n\t\t\tif (num%1!==0 && isNumber(num)){\n\t\t\t\treturn num.toString().split(\".\")[1].length;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttoRadians = helpers.radians = function(degrees){\n\t\t\treturn degrees * (Math.PI/180);\n\t\t},\n\t\t// Gets the angle from vertical upright to the point about a centre.\n\t\tgetAngleFromPoint = helpers.getAngleFromPoint = function(centrePoint, anglePoint){\n\t\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x,\n\t\t\t\tdistanceFromYCenter = anglePoint.y - centrePoint.y,\n\t\t\t\tradialDistanceFromCenter = Math.sqrt( distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\n\t\t\tvar angle = Math.PI * 2 + Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\t\t//If the segment is in the top left quadrant, we need to add another rotation to the angle\n\t\t\tif (distanceFromXCenter < 0 && distanceFromYCenter < 0){\n\t\t\t\tangle += Math.PI*2;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tangle: angle,\n\t\t\t\tdistance: radialDistanceFromCenter\n\t\t\t};\n\t\t},\n\t\taliasPixel = helpers.aliasPixel = function(pixelWidth){\n\t\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t\t},\n\t\tsplineCurve = helpers.splineCurve = function(FirstPoint,MiddlePoint,AfterPoint,t){\n\t\t\t//Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t\t//http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\t\t\tvar d01=Math.sqrt(Math.pow(MiddlePoint.x-FirstPoint.x,2)+Math.pow(MiddlePoint.y-FirstPoint.y,2)),\n\t\t\t\td12=Math.sqrt(Math.pow(AfterPoint.x-MiddlePoint.x,2)+Math.pow(AfterPoint.y-MiddlePoint.y,2)),\n\t\t\t\tfa=t*d01/(d01+d12),// scaling factor for triangle Ta\n\t\t\t\tfb=t*d12/(d01+d12);\n\t\t\treturn {\n\t\t\t\tinner : {\n\t\t\t\t\tx : MiddlePoint.x-fa*(AfterPoint.x-FirstPoint.x),\n\t\t\t\t\ty : MiddlePoint.y-fa*(AfterPoint.y-FirstPoint.y)\n\t\t\t\t},\n\t\t\t\touter : {\n\t\t\t\t\tx: MiddlePoint.x+fb*(AfterPoint.x-FirstPoint.x),\n\t\t\t\t\ty : MiddlePoint.y+fb*(AfterPoint.y-FirstPoint.y)\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tcalculateOrderOfMagnitude = helpers.calculateOrderOfMagnitude = function(val){\n\t\t\treturn Math.floor(Math.log(val) / Math.LN10);\n\t\t},\n\t\tcalculateScaleRange = helpers.calculateScaleRange = function(valuesArray, drawingSize, textSize, startFromZero, integersOnly){\n\n\t\t\t//Set a minimum step of two - a point at the top of the graph, and a point at the base\n\t\t\tvar minSteps = 2,\n\t\t\t\tmaxSteps = Math.floor(drawingSize/(textSize * 1.5)),\n\t\t\t\tskipFitting = (minSteps >= maxSteps);\n\n\t\t\tvar maxValue = max(valuesArray),\n\t\t\t\tminValue = min(valuesArray);\n\n\t\t\t// We need some degree of seperation here to calculate the scales if all the values are the same\n\t\t\t// Adding/minusing 0.5 will give us a range of 1.\n\t\t\tif (maxValue === minValue){\n\t\t\t\tmaxValue += 0.5;\n\t\t\t\t// So we don't end up with a graph with a negative start value if we've said always start from zero\n\t\t\t\tif (minValue >= 0.5 && !startFromZero){\n\t\t\t\t\tminValue -= 0.5;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\t// Make up a whole number above the values\n\t\t\t\t\tmaxValue += 0.5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar\tvalueRange = Math.abs(maxValue - minValue),\n\t\t\t\trangeOrderOfMagnitude = calculateOrderOfMagnitude(valueRange),\n\t\t\t\tgraphMax = Math.ceil(maxValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tgraphMin = (startFromZero) ? 0 : Math.floor(minValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tgraphRange = graphMax - graphMin,\n\t\t\t\tstepValue = Math.pow(10, rangeOrderOfMagnitude),\n\t\t\t\tnumberOfSteps = Math.round(graphRange / stepValue);\n\n\t\t\t//If we have more space on the graph we'll use it to give more definition to the data\n\t\t\twhile((numberOfSteps > maxSteps || (numberOfSteps * 2) < maxSteps) && !skipFitting) {\n\t\t\t\tif(numberOfSteps > maxSteps){\n\t\t\t\t\tstepValue *=2;\n\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t// Don't ever deal with a decimal number of steps - cancel fitting and just use the minimum number of steps.\n\t\t\t\t\tif (numberOfSteps % 1 !== 0){\n\t\t\t\t\t\tskipFitting = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//We can fit in double the amount of scale points on the scale\n\t\t\t\telse{\n\t\t\t\t\t//If user has declared ints only, and the step value isn't a decimal\n\t\t\t\t\tif (integersOnly && rangeOrderOfMagnitude >= 0){\n\t\t\t\t\t\t//If the user has said integers only, we need to check that making the scale more granular wouldn't make it a float\n\t\t\t\t\t\tif(stepValue/2 % 1 === 0){\n\t\t\t\t\t\t\tstepValue /=2;\n\t\t\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//If it would make it a float break out of the loop\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//If the scale doesn't have to be an int, make the scale more granular anyway.\n\t\t\t\t\telse{\n\t\t\t\t\t\tstepValue /=2;\n\t\t\t\t\t\tnumberOfSteps = Math.round(graphRange/stepValue);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (skipFitting){\n\t\t\t\tnumberOfSteps = minSteps;\n\t\t\t\tstepValue = graphRange / numberOfSteps;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsteps : numberOfSteps,\n\t\t\t\tstepValue : stepValue,\n\t\t\t\tmin : graphMin,\n\t\t\t\tmax\t: graphMin + (numberOfSteps * stepValue)\n\t\t\t};\n\n\t\t},\n\t\t/* jshint ignore:start */\n\t\t// Blows up jshint errors based on the new Function constructor\n\t\t//Templating methods\n\t\t//Javascript micro templating by John Resig - source at http://ejohn.org/blog/javascript-micro-templating/\n\t\ttemplate = helpers.template = function(templateString, valuesObject){\n\n\t\t\t// If templateString is function rather than string-template - call the function for valuesObject\n\n\t\t\tif(templateString instanceof Function){\n\t\t\t \treturn templateString(valuesObject);\n\t\t \t}\n\n\t\t\tvar cache = {};\n\t\t\tfunction tmpl(str, data){\n\t\t\t\t// Figure out if we're getting a template, or if we need to\n\t\t\t\t// load the template - and be sure to cache the result.\n\t\t\t\tvar fn = !/\\W/.test(str) ?\n\t\t\t\tcache[str] = cache[str] :\n\n\t\t\t\t// Generate a reusable function that will serve as a template\n\t\t\t\t// generator (and which will be cached).\n\t\t\t\tnew Function(\"obj\",\n\t\t\t\t\t\"var p=[],print=function(){p.push.apply(p,arguments);};\" +\n\n\t\t\t\t\t// Introduce the data as local variables using with(){}\n\t\t\t\t\t\"with(obj){p.push('\" +\n\n\t\t\t\t\t// Convert the template into pure JavaScript\n\t\t\t\t\tstr\n\t\t\t\t\t\t.replace(/[\\r\\t\\n]/g, \" \")\n\t\t\t\t\t\t.split(\"<%\").join(\"\\t\")\n\t\t\t\t\t\t.replace(/((^|%>)[^\\t]*)'/g, \"$1\\r\")\n\t\t\t\t\t\t.replace(/\\t=(.*?)%>/g, \"',$1,'\")\n\t\t\t\t\t\t.split(\"\\t\").join(\"');\")\n\t\t\t\t\t\t.split(\"%>\").join(\"p.push('\")\n\t\t\t\t\t\t.split(\"\\r\").join(\"\\\\'\") +\n\t\t\t\t\t\"');}return p.join('');\"\n\t\t\t\t);\n\n\t\t\t\t// Provide some basic currying to the user\n\t\t\t\treturn data ? fn( data ) : fn;\n\t\t\t}\n\t\t\treturn tmpl(templateString,valuesObject);\n\t\t},\n\t\t/* jshint ignore:end */\n\t\tgenerateLabels = helpers.generateLabels = function(templateString,numberOfSteps,graphMin,stepValue){\n\t\t\tvar labelsArray = new Array(numberOfSteps);\n\t\t\tif (labelTemplateString){\n\t\t\t\teach(labelsArray,function(val,index){\n\t\t\t\t\tlabelsArray[index] = template(templateString,{value: (graphMin + (stepValue*(index+1)))});\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn labelsArray;\n\t\t},\n\t\t//--Animation methods\n\t\t//Easing functions adapted from Robert Penner's easing equations\n\t\t//http://www.robertpenner.com/easing/\n\t\teasingEffects = helpers.easingEffects = {\n\t\t\tlinear: function (t) {\n\t\t\t\treturn t;\n\t\t\t},\n\t\t\teaseInQuad: function (t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\t\t\teaseOutQuad: function (t) {\n\t\t\t\treturn -1 * t * (t - 2);\n\t\t\t},\n\t\t\teaseInOutQuad: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t;\n\t\t\t\treturn -1 / 2 * ((--t) * (t - 2) - 1);\n\t\t\t},\n\t\t\teaseInCubic: function (t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\t\t\teaseOutCubic: function (t) {\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * t + 1);\n\t\t\t},\n\t\t\teaseInOutCubic: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t;\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * t + 2);\n\t\t\t},\n\t\t\teaseInQuart: function (t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\t\t\teaseOutQuart: function (t) {\n\t\t\t\treturn -1 * ((t = t / 1 - 1) * t * t * t - 1);\n\t\t\t},\n\t\t\teaseInOutQuart: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t;\n\t\t\t\treturn -1 / 2 * ((t -= 2) * t * t * t - 2);\n\t\t\t},\n\t\t\teaseInQuint: function (t) {\n\t\t\t\treturn 1 * (t /= 1) * t * t * t * t;\n\t\t\t},\n\t\t\teaseOutQuint: function (t) {\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * t * t * t + 1);\n\t\t\t},\n\t\t\teaseInOutQuint: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t * t;\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * t * t * t + 2);\n\t\t\t},\n\t\t\teaseInSine: function (t) {\n\t\t\t\treturn -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;\n\t\t\t},\n\t\t\teaseOutSine: function (t) {\n\t\t\t\treturn 1 * Math.sin(t / 1 * (Math.PI / 2));\n\t\t\t},\n\t\t\teaseInOutSine: function (t) {\n\t\t\t\treturn -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);\n\t\t\t},\n\t\t\teaseInExpo: function (t) {\n\t\t\t\treturn (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));\n\t\t\t},\n\t\t\teaseOutExpo: function (t) {\n\t\t\t\treturn (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);\n\t\t\t},\n\t\t\teaseInOutExpo: function (t) {\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif (t === 1) return 1;\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * Math.pow(2, 10 * (t - 1));\n\t\t\t\treturn 1 / 2 * (-Math.pow(2, -10 * --t) + 2);\n\t\t\t},\n\t\t\teaseInCirc: function (t) {\n\t\t\t\tif (t >= 1) return t;\n\t\t\t\treturn -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);\n\t\t\t},\n\t\t\teaseOutCirc: function (t) {\n\t\t\t\treturn 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);\n\t\t\t},\n\t\t\teaseInOutCirc: function (t) {\n\t\t\t\tif ((t /= 1 / 2) < 1) return -1 / 2 * (Math.sqrt(1 - t * t) - 1);\n\t\t\t\treturn 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t\t\t},\n\t\t\teaseInElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif ((t /= 1) == 1) return 1;\n\t\t\t\tif (!p) p = 1 * 0.3;\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else s = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t\t},\n\t\t\teaseOutElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif ((t /= 1) == 1) return 1;\n\t\t\t\tif (!p) p = 1 * 0.3;\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else s = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;\n\t\t\t},\n\t\t\teaseInOutElastic: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tvar p = 0;\n\t\t\t\tvar a = 1;\n\t\t\t\tif (t === 0) return 0;\n\t\t\t\tif ((t /= 1 / 2) == 2) return 1;\n\t\t\t\tif (!p) p = 1 * (0.3 * 1.5);\n\t\t\t\tif (a < Math.abs(1)) {\n\t\t\t\t\ta = 1;\n\t\t\t\t\ts = p / 4;\n\t\t\t\t} else s = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\tif (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t\t\t},\n\t\t\teaseInBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\treturn 1 * (t /= 1) * t * ((s + 1) * t - s);\n\t\t\t},\n\t\t\teaseOutBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\treturn 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);\n\t\t\t},\n\t\t\teaseInOutBack: function (t) {\n\t\t\t\tvar s = 1.70158;\n\t\t\t\tif ((t /= 1 / 2) < 1) return 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t\t\treturn 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t\t\t},\n\t\t\teaseInBounce: function (t) {\n\t\t\t\treturn 1 - easingEffects.easeOutBounce(1 - t);\n\t\t\t},\n\t\t\teaseOutBounce: function (t) {\n\t\t\t\tif ((t /= 1) < (1 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * t * t);\n\t\t\t\t} else if (t < (2 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);\n\t\t\t\t} else if (t < (2.5 / 2.75)) {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);\n\t\t\t\t} else {\n\t\t\t\t\treturn 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);\n\t\t\t\t}\n\t\t\t},\n\t\t\teaseInOutBounce: function (t) {\n\t\t\t\tif (t < 1 / 2) return easingEffects.easeInBounce(t * 2) * 0.5;\n\t\t\t\treturn easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;\n\t\t\t}\n\t\t},\n\t\t//Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\t\trequestAnimFrame = helpers.requestAnimFrame = (function(){\n\t\t\treturn window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\twindow.oRequestAnimationFrame ||\n\t\t\t\twindow.msRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t\t})(),\n\t\tcancelAnimFrame = helpers.cancelAnimFrame = (function(){\n\t\t\treturn window.cancelAnimationFrame ||\n\t\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\t\twindow.oCancelAnimationFrame ||\n\t\t\t\twindow.msCancelAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\treturn window.clearTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t\t})(),\n\t\tanimationLoop = helpers.animationLoop = function(callback,totalSteps,easingString,onProgress,onComplete,chartInstance){\n\n\t\t\tvar currentStep = 0,\n\t\t\t\teasingFunction = easingEffects[easingString] || easingEffects.linear;\n\n\t\t\tvar animationFrame = function(){\n\t\t\t\tcurrentStep++;\n\t\t\t\tvar stepDecimal = currentStep/totalSteps;\n\t\t\t\tvar easeDecimal = easingFunction(stepDecimal);\n\n\t\t\t\tcallback.call(chartInstance,easeDecimal,stepDecimal, currentStep);\n\t\t\t\tonProgress.call(chartInstance,easeDecimal,stepDecimal);\n\t\t\t\tif (currentStep < totalSteps){\n\t\t\t\t\tchartInstance.animationFrame = requestAnimFrame(animationFrame);\n\t\t\t\t} else{\n\t\t\t\t\tonComplete.apply(chartInstance);\n\t\t\t\t}\n\t\t\t};\n\t\t\trequestAnimFrame(animationFrame);\n\t\t},\n\t\t//-- DOM methods\n\t\tgetRelativePosition = helpers.getRelativePosition = function(evt){\n\t\t\tvar mouseX, mouseY;\n\t\t\tvar e = evt.originalEvent || evt,\n\t\t\t\tcanvas = evt.currentTarget || evt.srcElement,\n\t\t\t\tboundingRect = canvas.getBoundingClientRect();\n\n\t\t\tif (e.touches){\n\t\t\t\tmouseX = e.touches[0].clientX - boundingRect.left;\n\t\t\t\tmouseY = e.touches[0].clientY - boundingRect.top;\n\n\t\t\t}\n\t\t\telse{\n\t\t\t\tmouseX = e.clientX - boundingRect.left;\n\t\t\t\tmouseY = e.clientY - boundingRect.top;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx : mouseX,\n\t\t\t\ty : mouseY\n\t\t\t};\n\n\t\t},\n\t\taddEvent = helpers.addEvent = function(node,eventType,method){\n\t\t\tif (node.addEventListener){\n\t\t\t\tnode.addEventListener(eventType,method);\n\t\t\t} else if (node.attachEvent){\n\t\t\t\tnode.attachEvent(\"on\"+eventType, method);\n\t\t\t} else {\n\t\t\t\tnode[\"on\"+eventType] = method;\n\t\t\t}\n\t\t},\n\t\tremoveEvent = helpers.removeEvent = function(node, eventType, handler){\n\t\t\tif (node.removeEventListener){\n\t\t\t\tnode.removeEventListener(eventType, handler, false);\n\t\t\t} else if (node.detachEvent){\n\t\t\t\tnode.detachEvent(\"on\"+eventType,handler);\n\t\t\t} else{\n\t\t\t\tnode[\"on\" + eventType] = noop;\n\t\t\t}\n\t\t},\n\t\tbindEvents = helpers.bindEvents = function(chartInstance, arrayOfEvents, handler){\n\t\t\t// Create the events object if it's not already present\n\t\t\tif (!chartInstance.events) chartInstance.events = {};\n\n\t\t\teach(arrayOfEvents,function(eventName){\n\t\t\t\tchartInstance.events[eventName] = function(){\n\t\t\t\t\thandler.apply(chartInstance, arguments);\n\t\t\t\t};\n\t\t\t\taddEvent(chartInstance.chart.canvas,eventName,chartInstance.events[eventName]);\n\t\t\t});\n\t\t},\n\t\tunbindEvents = helpers.unbindEvents = function (chartInstance, arrayOfEvents) {\n\t\t\teach(arrayOfEvents, function(handler,eventName){\n\t\t\t\tremoveEvent(chartInstance.chart.canvas, eventName, handler);\n\t\t\t});\n\t\t},\n\t\tgetMaximumWidth = helpers.getMaximumWidth = function(domNode){\n\t\t\tvar container = domNode.parentNode;\n\t\t\t// TODO = check cross browser stuff with this.\n\t\t\treturn container.clientWidth;\n\t\t},\n\t\tgetMaximumHeight = helpers.getMaximumHeight = function(domNode){\n\t\t\tvar container = domNode.parentNode;\n\t\t\t// TODO = check cross browser stuff with this.\n\t\t\treturn container.clientHeight;\n\t\t},\n\t\tgetMaximumSize = helpers.getMaximumSize = helpers.getMaximumWidth, // legacy support\n\t\tretinaScale = helpers.retinaScale = function(chart){\n\t\t\tvar ctx = chart.ctx,\n\t\t\t\twidth = chart.canvas.width,\n\t\t\t\theight = chart.canvas.height;\n\n\t\t\tif (window.devicePixelRatio) {\n\t\t\t\tctx.canvas.style.width = width + \"px\";\n\t\t\t\tctx.canvas.style.height = height + \"px\";\n\t\t\t\tctx.canvas.height = height * window.devicePixelRatio;\n\t\t\t\tctx.canvas.width = width * window.devicePixelRatio;\n\t\t\t\tctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n\t\t\t}\n\t\t},\n\t\t//-- Canvas methods\n\t\tclear = helpers.clear = function(chart){\n\t\t\tchart.ctx.clearRect(0,0,chart.width,chart.height);\n\t\t},\n\t\tfontString = helpers.fontString = function(pixelSize,fontStyle,fontFamily){\n\t\t\treturn fontStyle + \" \" + pixelSize+\"px \" + fontFamily;\n\t\t},\n\t\tlongestText = helpers.longestText = function(ctx,font,arrayOfStrings){\n\t\t\tctx.font = font;\n\t\t\tvar longest = 0;\n\t\t\teach(arrayOfStrings,function(string){\n\t\t\t\tvar textWidth = ctx.measureText(string).width;\n\t\t\t\tlongest = (textWidth > longest) ? textWidth : longest;\n\t\t\t});\n\t\t\treturn longest;\n\t\t},\n\t\tdrawRoundedRectangle = helpers.drawRoundedRectangle = function(ctx,x,y,width,height,radius){\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + radius, y);\n\t\t\tctx.lineTo(x + width - radius, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\t\tctx.lineTo(x + width, y + height - radius);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\t\tctx.lineTo(x + radius, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\t\tctx.lineTo(x, y + radius);\n\t\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\t\tctx.closePath();\n\t\t};\n\n\n\t//Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t//Destroy method on the chart will remove the instance of the chart from this reference.\n\tChart.instances = {};\n\n\tChart.Type = function(data,options,chart){\n\t\tthis.options = options;\n\t\tthis.chart = chart;\n\t\tthis.id = uid();\n\t\t//Add the chart instance to the global namespace\n\t\tChart.instances[this.id] = this;\n\n\t\t// Initialize is always called when a chart type is created\n\t\t// By default it is a no op, but it should be extended\n\t\tif (options.responsive){\n\t\t\tthis.resize();\n\t\t}\n\t\tthis.initialize.call(this,data);\n\t};\n\n\t//Core methods that'll be a part of every chart type\n\textend(Chart.Type.prototype,{\n\t\tinitialize : function(){return this;},\n\t\tclear : function(){\n\t\t\tclear(this.chart);\n\t\t\treturn this;\n\t\t},\n\t\tstop : function(){\n\t\t\t// Stops any current animation loop occuring\n\t\t\tcancelAnimFrame(this.animationFrame);\n\t\t\treturn this;\n\t\t},\n\t\tresize : function(callback){\n\t\t\tthis.stop();\n\t\t\tvar canvas = this.chart.canvas,\n\t\t\t\tnewWidth = getMaximumWidth(this.chart.canvas),\n\t\t\t\tnewHeight = this.options.maintainAspectRatio ? newWidth / this.chart.aspectRatio : getMaximumHeight(this.chart.canvas);\n\n\t\t\tcanvas.width = this.chart.width = newWidth;\n\t\t\tcanvas.height = this.chart.height = newHeight;\n\n\t\t\tretinaScale(this.chart);\n\n\t\t\tif (typeof callback === \"function\"){\n\t\t\t\tcallback.apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\treflow : noop,\n\t\trender : function(reflow){\n\t\t\tif (reflow){\n\t\t\t\tthis.reflow();\n\t\t\t}\n\t\t\tif (this.options.animation && !reflow){\n\t\t\t\thelpers.animationLoop(\n\t\t\t\t\tthis.draw,\n\t\t\t\t\tthis.options.animationSteps,\n\t\t\t\t\tthis.options.animationEasing,\n\t\t\t\t\tthis.options.onAnimationProgress,\n\t\t\t\t\tthis.options.onAnimationComplete,\n\t\t\t\t\tthis\n\t\t\t\t);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.draw();\n\t\t\t\tthis.options.onAnimationComplete.call(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\tgenerateLegend : function(){\n\t\t\treturn template(this.options.legendTemplate,this);\n\t\t},\n\t\tdestroy : function(){\n\t\t\tthis.clear();\n\t\t\tunbindEvents(this, this.events);\n\t\t\tvar canvas = this.chart.canvas;\n\n\t\t\t// Reset canvas height/width attributes starts a fresh with the canvas context\n\t\t\tcanvas.width = this.chart.width;\n\t\t\tcanvas.height = this.chart.height;\n\n\t\t\t// < IE9 doesn't support removeProperty\n\t\t\tif (canvas.style.removeProperty) {\n\t\t\t\tcanvas.style.removeProperty('width');\n\t\t\t\tcanvas.style.removeProperty('height');\n\t\t\t} else {\n\t\t\t\tcanvas.style.removeAttribute('width');\n\t\t\t\tcanvas.style.removeAttribute('height');\n\t\t\t}\n\n\t\t\tdelete Chart.instances[this.id];\n\t\t},\n\t\tshowTooltip : function(ChartElements, forceRedraw){\n\t\t\t// Only redraw the chart if we've actually changed what we're hovering on.\n\t\t\tif (typeof this.activeElements === 'undefined') this.activeElements = [];\n\n\t\t\tvar isChanged = (function(Elements){\n\t\t\t\tvar changed = false;\n\n\t\t\t\tif (Elements.length !== this.activeElements.length){\n\t\t\t\t\tchanged = true;\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\n\t\t\t\teach(Elements, function(element, index){\n\t\t\t\t\tif (element !== this.activeElements[index]){\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\t\t\t\treturn changed;\n\t\t\t}).call(this, ChartElements);\n\n\t\t\tif (!isChanged && !forceRedraw){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.activeElements = ChartElements;\n\t\t\t}\n\t\t\tthis.draw();\n\t\t\tif(this.options.customTooltips){\n\t\t\t\tthis.options.customTooltips(false);\n\t\t\t}\n\t\t\tif (ChartElements.length > 0){\n\t\t\t\t// If we have multiple datasets, show a MultiTooltip for all of the data points at that index\n\t\t\t\tif (this.datasets && this.datasets.length > 1) {\n\t\t\t\t\tvar dataArray,\n\t\t\t\t\t\tdataIndex;\n\n\t\t\t\t\tfor (var i = this.datasets.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tdataArray = this.datasets[i].points || this.datasets[i].bars || this.datasets[i].segments;\n\t\t\t\t\t\tdataIndex = indexOf(dataArray, ChartElements[0]);\n\t\t\t\t\t\tif (dataIndex !== -1){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar tooltipLabels = [],\n\t\t\t\t\t\ttooltipColors = [],\n\t\t\t\t\t\tmedianPosition = (function(index) {\n\n\t\t\t\t\t\t\t// Get all the points at that particular index\n\t\t\t\t\t\t\tvar Elements = [],\n\t\t\t\t\t\t\t\tdataCollection,\n\t\t\t\t\t\t\t\txPositions = [],\n\t\t\t\t\t\t\t\tyPositions = [],\n\t\t\t\t\t\t\t\txMax,\n\t\t\t\t\t\t\t\tyMax,\n\t\t\t\t\t\t\t\txMin,\n\t\t\t\t\t\t\t\tyMin;\n\t\t\t\t\t\t\thelpers.each(this.datasets, function(dataset){\n\t\t\t\t\t\t\t\tdataCollection = dataset.points || dataset.bars || dataset.segments;\n\t\t\t\t\t\t\t\tif (dataCollection[dataIndex] && dataCollection[dataIndex].hasValue()){\n\t\t\t\t\t\t\t\t\tElements.push(dataCollection[dataIndex]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\thelpers.each(Elements, function(element) {\n\t\t\t\t\t\t\t\txPositions.push(element.x);\n\t\t\t\t\t\t\t\tyPositions.push(element.y);\n\n\n\t\t\t\t\t\t\t\t//Include any colour information about the element\n\t\t\t\t\t\t\t\ttooltipLabels.push(helpers.template(this.options.multiTooltipTemplate, element));\n\t\t\t\t\t\t\t\ttooltipColors.push({\n\t\t\t\t\t\t\t\t\tfill: element._saved.fillColor || element.fillColor,\n\t\t\t\t\t\t\t\t\tstroke: element._saved.strokeColor || element.strokeColor\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}, this);\n\n\t\t\t\t\t\t\tyMin = min(yPositions);\n\t\t\t\t\t\t\tyMax = max(yPositions);\n\n\t\t\t\t\t\t\txMin = min(xPositions);\n\t\t\t\t\t\t\txMax = max(xPositions);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tx: (xMin > this.chart.width/2) ? xMin : xMax,\n\t\t\t\t\t\t\t\ty: (yMin + yMax)/2\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}).call(this, dataIndex);\n\n\t\t\t\t\tnew Chart.MultiTooltip({\n\t\t\t\t\t\tx: medianPosition.x,\n\t\t\t\t\t\ty: medianPosition.y,\n\t\t\t\t\t\txPadding: this.options.tooltipXPadding,\n\t\t\t\t\t\tyPadding: this.options.tooltipYPadding,\n\t\t\t\t\t\txOffset: this.options.tooltipXOffset,\n\t\t\t\t\t\tfillColor: this.options.tooltipFillColor,\n\t\t\t\t\t\ttextColor: this.options.tooltipFontColor,\n\t\t\t\t\t\tfontFamily: this.options.tooltipFontFamily,\n\t\t\t\t\t\tfontStyle: this.options.tooltipFontStyle,\n\t\t\t\t\t\tfontSize: this.options.tooltipFontSize,\n\t\t\t\t\t\ttitleTextColor: this.options.tooltipTitleFontColor,\n\t\t\t\t\t\ttitleFontFamily: this.options.tooltipTitleFontFamily,\n\t\t\t\t\t\ttitleFontStyle: this.options.tooltipTitleFontStyle,\n\t\t\t\t\t\ttitleFontSize: this.options.tooltipTitleFontSize,\n\t\t\t\t\t\tcornerRadius: this.options.tooltipCornerRadius,\n\t\t\t\t\t\tlabels: tooltipLabels,\n\t\t\t\t\t\tlegendColors: tooltipColors,\n\t\t\t\t\t\tlegendColorBackground : this.options.multiTooltipKeyBackground,\n\t\t\t\t\t\ttitle: ChartElements[0].label,\n\t\t\t\t\t\tchart: this.chart,\n\t\t\t\t\t\tctx: this.chart.ctx,\n\t\t\t\t\t\tcustom: this.options.customTooltips\n\t\t\t\t\t}).draw();\n\n\t\t\t\t} else {\n\t\t\t\t\teach(ChartElements, function(Element) {\n\t\t\t\t\t\tvar tooltipPosition = Element.tooltipPosition();\n\t\t\t\t\t\tnew Chart.Tooltip({\n\t\t\t\t\t\t\tx: Math.round(tooltipPosition.x),\n\t\t\t\t\t\t\ty: Math.round(tooltipPosition.y),\n\t\t\t\t\t\t\txPadding: this.options.tooltipXPadding,\n\t\t\t\t\t\t\tyPadding: this.options.tooltipYPadding,\n\t\t\t\t\t\t\tfillColor: this.options.tooltipFillColor,\n\t\t\t\t\t\t\ttextColor: this.options.tooltipFontColor,\n\t\t\t\t\t\t\tfontFamily: this.options.tooltipFontFamily,\n\t\t\t\t\t\t\tfontStyle: this.options.tooltipFontStyle,\n\t\t\t\t\t\t\tfontSize: this.options.tooltipFontSize,\n\t\t\t\t\t\t\tcaretHeight: this.options.tooltipCaretSize,\n\t\t\t\t\t\t\tcornerRadius: this.options.tooltipCornerRadius,\n\t\t\t\t\t\t\ttext: template(this.options.tooltipTemplate, Element),\n\t\t\t\t\t\t\tchart: this.chart,\n\t\t\t\t\t\t\tcustom: this.options.customTooltips\n\t\t\t\t\t\t}).draw();\n\t\t\t\t\t}, this);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\ttoBase64Image : function(){\n\t\t\treturn this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);\n\t\t}\n\t});\n\n\tChart.Type.extend = function(extensions){\n\n\t\tvar parent = this;\n\n\t\tvar ChartType = function(){\n\t\t\treturn parent.apply(this,arguments);\n\t\t};\n\n\t\t//Copy the prototype object of the this class\n\t\tChartType.prototype = clone(parent.prototype);\n\t\t//Now overwrite some of the properties in the base class with the new extensions\n\t\textend(ChartType.prototype, extensions);\n\n\t\tChartType.extend = Chart.Type.extend;\n\n\t\tif (extensions.name || parent.prototype.name){\n\n\t\t\tvar chartName = extensions.name || parent.prototype.name;\n\t\t\t//Assign any potential default values of the new chart type\n\n\t\t\t//If none are defined, we'll use a clone of the chart type this is being extended from.\n\t\t\t//I.e. if we extend a line chart, we'll use the defaults from the line chart if our new chart\n\t\t\t//doesn't define some defaults of their own.\n\n\t\t\tvar baseDefaults = (Chart.defaults[parent.prototype.name]) ? clone(Chart.defaults[parent.prototype.name]) : {};\n\n\t\t\tChart.defaults[chartName] = extend(baseDefaults,extensions.defaults);\n\n\t\t\tChart.types[chartName] = ChartType;\n\n\t\t\t//Register this new chart type in the Chart prototype\n\t\t\tChart.prototype[chartName] = function(data,options){\n\t\t\t\tvar config = merge(Chart.defaults.global, Chart.defaults[chartName], options || {});\n\t\t\t\treturn new ChartType(data,config,this);\n\t\t\t};\n\t\t} else{\n\t\t\twarn(\"Name not provided for this chart, so it hasn't been registered\");\n\t\t}\n\t\treturn parent;\n\t};\n\n\tChart.Element = function(configuration){\n\t\textend(this,configuration);\n\t\tthis.initialize.apply(this,arguments);\n\t\tthis.save();\n\t};\n\textend(Chart.Element.prototype,{\n\t\tinitialize : function(){},\n\t\trestore : function(props){\n\t\t\tif (!props){\n\t\t\t\textend(this,this._saved);\n\t\t\t} else {\n\t\t\t\teach(props,function(key){\n\t\t\t\t\tthis[key] = this._saved[key];\n\t\t\t\t},this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\tsave : function(){\n\t\t\tthis._saved = clone(this);\n\t\t\tdelete this._saved._saved;\n\t\t\treturn this;\n\t\t},\n\t\tupdate : function(newProps){\n\t\t\teach(newProps,function(value,key){\n\t\t\t\tthis._saved[key] = this[key];\n\t\t\t\tthis[key] = value;\n\t\t\t},this);\n\t\t\treturn this;\n\t\t},\n\t\ttransition : function(props,ease){\n\t\t\teach(props,function(value,key){\n\t\t\t\tthis[key] = ((value - this._saved[key]) * ease) + this._saved[key];\n\t\t\t},this);\n\t\t\treturn this;\n\t\t},\n\t\ttooltipPosition : function(){\n\t\t\treturn {\n\t\t\t\tx : this.x,\n\t\t\t\ty : this.y\n\t\t\t};\n\t\t},\n\t\thasValue: function(){\n\t\t\treturn isNumber(this.value);\n\t\t}\n\t});\n\n\tChart.Element.extend = inherits;\n\n\n\tChart.Point = Chart.Element.extend({\n\t\tdisplay: true,\n\t\tinRange: function(chartX,chartY){\n\t\t\tvar hitDetectionRange = this.hitDetectionRadius + this.radius;\n\t\t\treturn ((Math.pow(chartX-this.x, 2)+Math.pow(chartY-this.y, 2)) < Math.pow(hitDetectionRange,2));\n\t\t},\n\t\tdraw : function(){\n\t\t\tif (this.display){\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\tctx.beginPath();\n\n\t\t\t\tctx.arc(this.x, this.y, this.radius, 0, Math.PI*2);\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\t\tctx.fill();\n\t\t\t\tctx.stroke();\n\t\t\t}\n\n\n\t\t\t//Quick debug for bezier curve splining\n\t\t\t//Highlights control points and the line between them.\n\t\t\t//Handy for dev - stripped in the min version.\n\n\t\t\t// ctx.save();\n\t\t\t// ctx.fillStyle = \"black\";\n\t\t\t// ctx.strokeStyle = \"black\"\n\t\t\t// ctx.beginPath();\n\t\t\t// ctx.arc(this.controlPoints.inner.x,this.controlPoints.inner.y, 2, 0, Math.PI*2);\n\t\t\t// ctx.fill();\n\n\t\t\t// ctx.beginPath();\n\t\t\t// ctx.arc(this.controlPoints.outer.x,this.controlPoints.outer.y, 2, 0, Math.PI*2);\n\t\t\t// ctx.fill();\n\n\t\t\t// ctx.moveTo(this.controlPoints.inner.x,this.controlPoints.inner.y);\n\t\t\t// ctx.lineTo(this.x, this.y);\n\t\t\t// ctx.lineTo(this.controlPoints.outer.x,this.controlPoints.outer.y);\n\t\t\t// ctx.stroke();\n\n\t\t\t// ctx.restore();\n\n\n\n\t\t}\n\t});\n\n\tChart.Arc = Chart.Element.extend({\n\t\tinRange : function(chartX,chartY){\n\n\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(this, {\n\t\t\t\tx: chartX,\n\t\t\t\ty: chartY\n\t\t\t});\n\n\t\t\t//Check if within the range of the open/close angle\n\t\t\tvar betweenAngles = (pointRelativePosition.angle >= this.startAngle && pointRelativePosition.angle <= this.endAngle),\n\t\t\t\twithinRadius = (pointRelativePosition.distance >= this.innerRadius && pointRelativePosition.distance <= this.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t\t//Ensure within the outside of the arc centre, but inside arc outer\n\t\t},\n\t\ttooltipPosition : function(){\n\t\t\tvar centreAngle = this.startAngle + ((this.endAngle - this.startAngle) / 2),\n\t\t\t\trangeFromCentre = (this.outerRadius - this.innerRadius) / 2 + this.innerRadius;\n\t\t\treturn {\n\t\t\t\tx : this.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\t\ty : this.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t\t};\n\t\t},\n\t\tdraw : function(animationPercent){\n\n\t\t\tvar easingDecimal = animationPercent || 1;\n\n\t\t\tvar ctx = this.ctx;\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.arc(this.x, this.y, this.outerRadius, this.startAngle, this.endAngle);\n\n\t\t\tctx.arc(this.x, this.y, this.innerRadius, this.endAngle, this.startAngle, true);\n\n\t\t\tctx.closePath();\n\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\tctx.fill();\n\t\t\tctx.lineJoin = 'bevel';\n\n\t\t\tif (this.showStroke){\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.Rectangle = Chart.Element.extend({\n\t\tdraw : function(){\n\t\t\tvar ctx = this.ctx,\n\t\t\t\thalfWidth = this.width/2,\n\t\t\t\tleftX = this.x - halfWidth,\n\t\t\t\trightX = this.x + halfWidth,\n\t\t\t\ttop = this.base - (this.base - this.y),\n\t\t\t\thalfStroke = this.strokeWidth / 2;\n\n\t\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\t\tif (this.showStroke){\n\t\t\t\tleftX += halfStroke;\n\t\t\t\trightX -= halfStroke;\n\t\t\t\ttop += halfStroke;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.fillStyle = this.fillColor;\n\t\t\tctx.strokeStyle = this.strokeColor;\n\t\t\tctx.lineWidth = this.strokeWidth;\n\n\t\t\t// It'd be nice to keep this class totally generic to any rectangle\n\t\t\t// and simply specify which border to miss out.\n\t\t\tctx.moveTo(leftX, this.base);\n\t\t\tctx.lineTo(leftX, top);\n\t\t\tctx.lineTo(rightX, top);\n\t\t\tctx.lineTo(rightX, this.base);\n\t\t\tctx.fill();\n\t\t\tif (this.showStroke){\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t},\n\t\theight : function(){\n\t\t\treturn this.base - this.y;\n\t\t},\n\t\tinRange : function(chartX,chartY){\n\t\t\treturn (chartX >= this.x - this.width/2 && chartX <= this.x + this.width/2) && (chartY >= this.y && chartY <= this.base);\n\t\t}\n\t});\n\n\tChart.Tooltip = Chart.Element.extend({\n\t\tdraw : function(){\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\tctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\n\t\t\tthis.xAlign = \"center\";\n\t\t\tthis.yAlign = \"above\";\n\n\t\t\t//Distance between the actual element.y position and the start of the tooltip caret\n\t\t\tvar caretPadding = this.caretPadding = 2;\n\n\t\t\tvar tooltipWidth = ctx.measureText(this.text).width + 2*this.xPadding,\n\t\t\t\ttooltipRectHeight = this.fontSize + 2*this.yPadding,\n\t\t\t\ttooltipHeight = tooltipRectHeight + this.caretHeight + caretPadding;\n\n\t\t\tif (this.x + tooltipWidth/2 >this.chart.width){\n\t\t\t\tthis.xAlign = \"left\";\n\t\t\t} else if (this.x - tooltipWidth/2 < 0){\n\t\t\t\tthis.xAlign = \"right\";\n\t\t\t}\n\n\t\t\tif (this.y - tooltipHeight < 0){\n\t\t\t\tthis.yAlign = \"below\";\n\t\t\t}\n\n\n\t\t\tvar tooltipX = this.x - tooltipWidth/2,\n\t\t\t\ttooltipY = this.y - tooltipHeight;\n\n\t\t\tctx.fillStyle = this.fillColor;\n\n\t\t\t// Custom Tooltips\n\t\t\tif(this.custom){\n\t\t\t\tthis.custom(this);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tswitch(this.yAlign)\n\t\t\t\t{\n\t\t\t\tcase \"above\":\n\t\t\t\t\t//Draw a caret above the x/y\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.x,this.y - caretPadding);\n\t\t\t\t\tctx.lineTo(this.x + this.caretHeight, this.y - (caretPadding + this.caretHeight));\n\t\t\t\t\tctx.lineTo(this.x - this.caretHeight, this.y - (caretPadding + this.caretHeight));\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"below\":\n\t\t\t\t\ttooltipY = this.y + caretPadding + this.caretHeight;\n\t\t\t\t\t//Draw a caret below the x/y\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.x, this.y + caretPadding);\n\t\t\t\t\tctx.lineTo(this.x + this.caretHeight, this.y + caretPadding + this.caretHeight);\n\t\t\t\t\tctx.lineTo(this.x - this.caretHeight, this.y + caretPadding + this.caretHeight);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tswitch(this.xAlign)\n\t\t\t\t{\n\t\t\t\tcase \"left\":\n\t\t\t\t\ttooltipX = this.x - tooltipWidth + (this.cornerRadius + this.caretHeight);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\ttooltipX = this.x - (this.cornerRadius + this.caretHeight);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdrawRoundedRectangle(ctx,tooltipX,tooltipY,tooltipWidth,tooltipRectHeight,this.cornerRadius);\n\n\t\t\t\tctx.fill();\n\n\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\tctx.textAlign = \"center\";\n\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\tctx.fillText(this.text, tooltipX + tooltipWidth/2, tooltipY + tooltipRectHeight/2);\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.MultiTooltip = Chart.Element.extend({\n\t\tinitialize : function(){\n\t\t\tthis.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\n\t\t\tthis.titleFont = fontString(this.titleFontSize,this.titleFontStyle,this.titleFontFamily);\n\n\t\t\tthis.height = (this.labels.length * this.fontSize) + ((this.labels.length-1) * (this.fontSize/2)) + (this.yPadding*2) + this.titleFontSize *1.5;\n\n\t\t\tthis.ctx.font = this.titleFont;\n\n\t\t\tvar titleWidth = this.ctx.measureText(this.title).width,\n\t\t\t\t//Label has a legend square as well so account for this.\n\t\t\t\tlabelWidth = longestText(this.ctx,this.font,this.labels) + this.fontSize + 3,\n\t\t\t\tlongestTextWidth = max([labelWidth,titleWidth]);\n\n\t\t\tthis.width = longestTextWidth + (this.xPadding*2);\n\n\n\t\t\tvar halfHeight = this.height/2;\n\n\t\t\t//Check to ensure the height will fit on the canvas\n\t\t\tif (this.y - halfHeight < 0 ){\n\t\t\t\tthis.y = halfHeight;\n\t\t\t} else if (this.y + halfHeight > this.chart.height){\n\t\t\t\tthis.y = this.chart.height - halfHeight;\n\t\t\t}\n\n\t\t\t//Decide whether to align left or right based on position on canvas\n\t\t\tif (this.x > this.chart.width/2){\n\t\t\t\tthis.x -= this.xOffset + this.width;\n\t\t\t} else {\n\t\t\t\tthis.x += this.xOffset;\n\t\t\t}\n\n\n\t\t},\n\t\tgetLineHeight : function(index){\n\t\t\tvar baseLineHeight = this.y - (this.height/2) + this.yPadding,\n\t\t\t\tafterTitleIndex = index-1;\n\n\t\t\t//If the index is zero, we're getting the title\n\t\t\tif (index === 0){\n\t\t\t\treturn baseLineHeight + this.titleFontSize/2;\n\t\t\t} else{\n\t\t\t\treturn baseLineHeight + ((this.fontSize*1.5*afterTitleIndex) + this.fontSize/2) + this.titleFontSize * 1.5;\n\t\t\t}\n\n\t\t},\n\t\tdraw : function(){\n\t\t\t// Custom Tooltips\n\t\t\tif(this.custom){\n\t\t\t\tthis.custom(this);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tdrawRoundedRectangle(this.ctx,this.x,this.y - this.height/2,this.width,this.height,this.cornerRadius);\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\tctx.fillStyle = this.fillColor;\n\t\t\t\tctx.fill();\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.textAlign = \"left\";\n\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\tctx.fillStyle = this.titleTextColor;\n\t\t\t\tctx.font = this.titleFont;\n\n\t\t\t\tctx.fillText(this.title,this.x + this.xPadding, this.getLineHeight(0));\n\n\t\t\t\tctx.font = this.font;\n\t\t\t\thelpers.each(this.labels,function(label,index){\n\t\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\t\tctx.fillText(label,this.x + this.xPadding + this.fontSize + 3, this.getLineHeight(index + 1));\n\n\t\t\t\t\t//A bit gnarly, but clearing this rectangle breaks when using explorercanvas (clears whole canvas)\n\t\t\t\t\t//ctx.clearRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\t\t\t\t\t//Instead we'll make a white filled block to put the legendColour palette over.\n\n\t\t\t\t\tctx.fillStyle = this.legendColorBackground;\n\t\t\t\t\tctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\n\t\t\t\t\tctx.fillStyle = this.legendColors[index].fill;\n\t\t\t\t\tctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);\n\n\n\t\t\t\t},this);\n\t\t\t}\n\t\t}\n\t});\n\n\tChart.Scale = Chart.Element.extend({\n\t\tinitialize : function(){\n\t\t\tthis.fit();\n\t\t},\n\t\tbuildYLabels : function(){\n\t\t\tthis.yLabels = [];\n\n\t\t\tvar stepDecimalPlaces = getDecimalPlaces(this.stepValue);\n\n\t\t\tfor (var i=0; i<=this.steps; i++){\n\t\t\t\tthis.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));\n\t\t\t}\n\t\t\tthis.yLabelWidth = (this.display && this.showLabels) ? longestText(this.ctx,this.font,this.yLabels) : 0;\n\t\t},\n\t\taddXLabel : function(label){\n\t\t\tthis.xLabels.push(label);\n\t\t\tthis.valuesCount++;\n\t\t\tthis.fit();\n\t\t},\n\t\tremoveXLabel : function(){\n\t\t\tthis.xLabels.shift();\n\t\t\tthis.valuesCount--;\n\t\t\tthis.fit();\n\t\t},\n\t\t// Fitting loop to rotate x Labels and figure out what fits there, and also calculate how many Y steps to use\n\t\tfit: function(){\n\t\t\t// First we need the width of the yLabels, assuming the xLabels aren't rotated\n\n\t\t\t// To do that we need the base line at the top and base of the chart, assuming there is no x label rotation\n\t\t\tthis.startPoint = (this.display) ? this.fontSize : 0;\n\t\t\tthis.endPoint = (this.display) ? this.height - (this.fontSize * 1.5) - 5 : this.height; // -5 to pad labels\n\n\t\t\t// Apply padding settings to the start and end point.\n\t\t\tthis.startPoint += this.padding;\n\t\t\tthis.endPoint -= this.padding;\n\n\t\t\t// Cache the starting height, so can determine if we need to recalculate the scale yAxis\n\t\t\tvar cachedHeight = this.endPoint - this.startPoint,\n\t\t\t\tcachedYLabelWidth;\n\n\t\t\t// Build the current yLabels so we have an idea of what size they'll be to start\n\t\t\t/*\n\t\t\t *\tThis sets what is returned from calculateScaleRange as static properties of this class:\n\t\t\t *\n\t\t\t\tthis.steps;\n\t\t\t\tthis.stepValue;\n\t\t\t\tthis.min;\n\t\t\t\tthis.max;\n\t\t\t *\n\t\t\t */\n\t\t\tthis.calculateYRange(cachedHeight);\n\n\t\t\t// With these properties set we can now build the array of yLabels\n\t\t\t// and also the width of the largest yLabel\n\t\t\tthis.buildYLabels();\n\n\t\t\tthis.calculateXLabelRotation();\n\n\t\t\twhile((cachedHeight > this.endPoint - this.startPoint)){\n\t\t\t\tcachedHeight = this.endPoint - this.startPoint;\n\t\t\t\tcachedYLabelWidth = this.yLabelWidth;\n\n\t\t\t\tthis.calculateYRange(cachedHeight);\n\t\t\t\tthis.buildYLabels();\n\n\t\t\t\t// Only go through the xLabel loop again if the yLabel width has changed\n\t\t\t\tif (cachedYLabelWidth < this.yLabelWidth){\n\t\t\t\t\tthis.calculateXLabelRotation();\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\t\tcalculateXLabelRotation : function(){\n\t\t\t//Get the width of each grid by calculating the difference\n\t\t\t//between x offsets between 0 and 1.\n\n\t\t\tthis.ctx.font = this.font;\n\n\t\t\tvar firstWidth = this.ctx.measureText(this.xLabels[0]).width,\n\t\t\t\tlastWidth = this.ctx.measureText(this.xLabels[this.xLabels.length - 1]).width,\n\t\t\t\tfirstRotated,\n\t\t\t\tlastRotated;\n\n\n\t\t\tthis.xScalePaddingRight = lastWidth/2 + 3;\n\t\t\tthis.xScalePaddingLeft = (firstWidth/2 > this.yLabelWidth + 10) ? firstWidth/2 : this.yLabelWidth + 10;\n\n\t\t\tthis.xLabelRotation = 0;\n\t\t\tif (this.display){\n\t\t\t\tvar originalLabelWidth = longestText(this.ctx,this.font,this.xLabels),\n\t\t\t\t\tcosRotation,\n\t\t\t\t\tfirstRotatedWidth;\n\t\t\t\tthis.xLabelWidth = originalLabelWidth;\n\t\t\t\t//Allow 3 pixels x2 padding either side for label readability\n\t\t\t\tvar xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;\n\n\t\t\t\t//Max label rotate should be 90 - also act as a loop counter\n\t\t\t\twhile ((this.xLabelWidth > xGridWidth && this.xLabelRotation === 0) || (this.xLabelWidth > xGridWidth && this.xLabelRotation <= 90 && this.xLabelRotation > 0)){\n\t\t\t\t\tcosRotation = Math.cos(toRadians(this.xLabelRotation));\n\n\t\t\t\t\tfirstRotated = cosRotation * firstWidth;\n\t\t\t\t\tlastRotated = cosRotation * lastWidth;\n\n\t\t\t\t\t// We're right aligning the text now.\n\t\t\t\t\tif (firstRotated + this.fontSize / 2 > this.yLabelWidth + 8){\n\t\t\t\t\t\tthis.xScalePaddingLeft = firstRotated + this.fontSize / 2;\n\t\t\t\t\t}\n\t\t\t\t\tthis.xScalePaddingRight = this.fontSize/2;\n\n\n\t\t\t\t\tthis.xLabelRotation++;\n\t\t\t\t\tthis.xLabelWidth = cosRotation * originalLabelWidth;\n\n\t\t\t\t}\n\t\t\t\tif (this.xLabelRotation > 0){\n\t\t\t\t\tthis.endPoint -= Math.sin(toRadians(this.xLabelRotation))*originalLabelWidth + 3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.xLabelWidth = 0;\n\t\t\t\tthis.xScalePaddingRight = this.padding;\n\t\t\t\tthis.xScalePaddingLeft = this.padding;\n\t\t\t}\n\n\t\t},\n\t\t// Needs to be overidden in each Chart type\n\t\t// Otherwise we need to pass all the data into the scale class\n\t\tcalculateYRange: noop,\n\t\tdrawingArea: function(){\n\t\t\treturn this.startPoint - this.endPoint;\n\t\t},\n\t\tcalculateY : function(value){\n\t\t\tvar scalingFactor = this.drawingArea() / (this.min - this.max);\n\t\t\treturn this.endPoint - (scalingFactor * (value - this.min));\n\t\t},\n\t\tcalculateX : function(index){\n\t\t\tvar isRotated = (this.xLabelRotation > 0),\n\t\t\t\t// innerWidth = (this.offsetGridLines) ? this.width - offsetLeft - this.padding : this.width - (offsetLeft + halfLabelWidth * 2) - this.padding,\n\t\t\t\tinnerWidth = this.width - (this.xScalePaddingLeft + this.xScalePaddingRight),\n\t\t\t\tvalueWidth = innerWidth/Math.max((this.valuesCount - ((this.offsetGridLines) ? 0 : 1)), 1),\n\t\t\t\tvalueOffset = (valueWidth * index) + this.xScalePaddingLeft;\n\n\t\t\tif (this.offsetGridLines){\n\t\t\t\tvalueOffset += (valueWidth/2);\n\t\t\t}\n\n\t\t\treturn Math.round(valueOffset);\n\t\t},\n\t\tupdate : function(newProps){\n\t\t\thelpers.extend(this, newProps);\n\t\t\tthis.fit();\n\t\t},\n\t\tdraw : function(){\n\t\t\tvar ctx = this.ctx,\n\t\t\t\tyLabelGap = (this.endPoint - this.startPoint) / this.steps,\n\t\t\t\txStart = Math.round(this.xScalePaddingLeft);\n\t\t\tif (this.display){\n\t\t\t\tctx.fillStyle = this.textColor;\n\t\t\t\tctx.font = this.font;\n\t\t\t\teach(this.yLabels,function(labelString,index){\n\t\t\t\t\tvar yLabelCenter = this.endPoint - (yLabelGap * index),\n\t\t\t\t\t\tlinePositionY = Math.round(yLabelCenter),\n\t\t\t\t\t\tdrawHorizontalLine = this.showHorizontalLines;\n\n\t\t\t\t\tctx.textAlign = \"right\";\n\t\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\t\tif (this.showLabels){\n\t\t\t\t\t\tctx.fillText(labelString,xStart - 10,yLabelCenter);\n\t\t\t\t\t}\n\n\t\t\t\t\t// This is X axis, so draw it\n\t\t\t\t\tif (index === 0 && !drawHorizontalLine){\n\t\t\t\t\t\tdrawHorizontalLine = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawHorizontalLine){\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\t// This is a grid line in the centre, so drop that\n\t\t\t\t\t\tctx.lineWidth = this.gridLineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.gridLineColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is the first line on the scale\n\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tlinePositionY += helpers.aliasPixel(ctx.lineWidth);\n\n\t\t\t\t\tif(drawHorizontalLine){\n\t\t\t\t\t\tctx.moveTo(xStart, linePositionY);\n\t\t\t\t\t\tctx.lineTo(this.width, linePositionY);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(xStart - 5, linePositionY);\n\t\t\t\t\tctx.lineTo(xStart, linePositionY);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t},this);\n\n\t\t\t\teach(this.xLabels,function(label,index){\n\t\t\t\t\tvar xPos = this.calculateX(index) + aliasPixel(this.lineWidth),\n\t\t\t\t\t\t// Check to see if line/bar here and decide where to place the line\n\t\t\t\t\t\tlinePos = this.calculateX(index - (this.offsetGridLines ? 0.5 : 0)) + aliasPixel(this.lineWidth),\n\t\t\t\t\t\tisRotated = (this.xLabelRotation > 0),\n\t\t\t\t\t\tdrawVerticalLine = this.showVerticalLines;\n\n\t\t\t\t\t// This is Y axis, so draw it\n\t\t\t\t\tif (index === 0 && !drawVerticalLine){\n\t\t\t\t\t\tdrawVerticalLine = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawVerticalLine){\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\t// This is a grid line in the centre, so drop that\n\t\t\t\t\t\tctx.lineWidth = this.gridLineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.gridLineColor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is the first line on the scale\n\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (drawVerticalLine){\n\t\t\t\t\t\tctx.moveTo(linePos,this.endPoint);\n\t\t\t\t\t\tctx.lineTo(linePos,this.startPoint - 3);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t}\n\n\n\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\n\n\t\t\t\t\t// Small lines at the bottom of the base grid line\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(linePos,this.endPoint);\n\t\t\t\t\tctx.lineTo(linePos,this.endPoint + 5);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.translate(xPos,(isRotated) ? this.endPoint + 12 : this.endPoint + 8);\n\t\t\t\t\tctx.rotate(toRadians(this.xLabelRotation)*-1);\n\t\t\t\t\tctx.font = this.font;\n\t\t\t\t\tctx.textAlign = (isRotated) ? \"right\" : \"center\";\n\t\t\t\t\tctx.textBaseline = (isRotated) ? \"middle\" : \"top\";\n\t\t\t\t\tctx.fillText(label, 0, 0);\n\t\t\t\t\tctx.restore();\n\t\t\t\t},this);\n\n\t\t\t}\n\t\t}\n\n\t});\n\n\tChart.RadialScale = Chart.Element.extend({\n\t\tinitialize: function(){\n\t\t\tthis.size = min([this.height, this.width]);\n\t\t\tthis.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);\n\t\t},\n\t\tcalculateCenterOffset: function(value){\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = this.drawingArea / (this.max - this.min);\n\n\t\t\treturn (value - this.min) * scalingFactor;\n\t\t},\n\t\tupdate : function(){\n\t\t\tif (!this.lineArc){\n\t\t\t\tthis.setScaleSize();\n\t\t\t} else {\n\t\t\t\tthis.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);\n\t\t\t}\n\t\t\tthis.buildYLabels();\n\t\t},\n\t\tbuildYLabels: function(){\n\t\t\tthis.yLabels = [];\n\n\t\t\tvar stepDecimalPlaces = getDecimalPlaces(this.stepValue);\n\n\t\t\tfor (var i=0; i<=this.steps; i++){\n\t\t\t\tthis.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));\n\t\t\t}\n\t\t},\n\t\tgetCircumference : function(){\n\t\t\treturn ((Math.PI*2) / this.valuesCount);\n\t\t},\n\t\tsetScaleSize: function(){\n\t\t\t/*\n\t\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t\t *\n\t\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t\t *\n\t\t\t * Solution:\n\t\t\t *\n\t\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t\t * at each index we check if the text overlaps.\n\t\t\t *\n\t\t\t * Where it does, we store that angle and that index.\n\t\t\t *\n\t\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t\t * from the shape radius to move the point inwards by that x.\n\t\t\t *\n\t\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t\t * along with labels.\n\t\t\t *\n\t\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t\t *\n\t\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t\t * and position it in the most space efficient manner\n\t\t\t *\n\t\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t\t */\n\n\n\t\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\t\tvar largestPossibleRadius = min([(this.height/2 - this.pointLabelFontSize - 5), this.width/2]),\n\t\t\t\tpointPosition,\n\t\t\t\ti,\n\t\t\t\ttextWidth,\n\t\t\t\thalfTextWidth,\n\t\t\t\tfurthestRight = this.width,\n\t\t\t\tfurthestRightIndex,\n\t\t\t\tfurthestRightAngle,\n\t\t\t\tfurthestLeft = 0,\n\t\t\t\tfurthestLeftIndex,\n\t\t\t\tfurthestLeftAngle,\n\t\t\t\txProtrusionLeft,\n\t\t\t\txProtrusionRight,\n\t\t\t\tradiusReductionRight,\n\t\t\t\tradiusReductionLeft,\n\t\t\t\tmaxWidthRadius;\n\t\t\tthis.ctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);\n\t\t\tfor (i=0;i<this.valuesCount;i++){\n\t\t\t\t// 5px to space the text slightly out - similar to what we do in the draw function.\n\t\t\t\tpointPosition = this.getPointPosition(i, largestPossibleRadius);\n\t\t\t\ttextWidth = this.ctx.measureText(template(this.templateString, { value: this.labels[i] })).width + 5;\n\t\t\t\tif (i === 0 || i === this.valuesCount/2){\n\t\t\t\t\t// If we're at index zero, or exactly the middle, we're at exactly the top/bottom\n\t\t\t\t\t// of the radar chart, so text will be aligned centrally, so we'll half it and compare\n\t\t\t\t\t// w/left and right text sizes\n\t\t\t\t\thalfTextWidth = textWidth/2;\n\t\t\t\t\tif (pointPosition.x + halfTextWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + halfTextWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (pointPosition.x - halfTextWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - halfTextWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (i < this.valuesCount/2) {\n\t\t\t\t\t// Less than half the values means we'll left align the text\n\t\t\t\t\tif (pointPosition.x + textWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + textWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (i > this.valuesCount/2){\n\t\t\t\t\t// More than half the values means we'll right align the text\n\t\t\t\t\tif (pointPosition.x - textWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - textWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txProtrusionLeft = furthestLeft;\n\n\t\t\txProtrusionRight = Math.ceil(furthestRight - this.width);\n\n\t\t\tfurthestRightAngle = this.getIndexAngle(furthestRightIndex);\n\n\t\t\tfurthestLeftAngle = this.getIndexAngle(furthestLeftIndex);\n\n\t\t\tradiusReductionRight = xProtrusionRight / Math.sin(furthestRightAngle + Math.PI/2);\n\n\t\t\tradiusReductionLeft = xProtrusionLeft / Math.sin(furthestLeftAngle + Math.PI/2);\n\n\t\t\t// Ensure we actually need to reduce the size of the chart\n\t\t\tradiusReductionRight = (isNumber(radiusReductionRight)) ? radiusReductionRight : 0;\n\t\t\tradiusReductionLeft = (isNumber(radiusReductionLeft)) ? radiusReductionLeft : 0;\n\n\t\t\tthis.drawingArea = largestPossibleRadius - (radiusReductionLeft + radiusReductionRight)/2;\n\n\t\t\t//this.drawingArea = min([maxWidthRadius, (this.height - (2 * (this.pointLabelFontSize + 5)))/2])\n\t\t\tthis.setCenterPoint(radiusReductionLeft, radiusReductionRight);\n\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement){\n\n\t\t\tvar maxRight = this.width - rightMovement - this.drawingArea,\n\t\t\t\tmaxLeft = leftMovement + this.drawingArea;\n\n\t\t\tthis.xCenter = (maxLeft + maxRight)/2;\n\t\t\t// Always vertically in the centre as the text height doesn't change\n\t\t\tthis.yCenter = (this.height/2);\n\t\t},\n\n\t\tgetIndexAngle : function(index){\n\t\t\tvar angleMultiplier = (Math.PI * 2) / this.valuesCount;\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\n\t\t\treturn index * angleMultiplier - (Math.PI/2);\n\t\t},\n\t\tgetPointPosition : function(index, distanceFromCenter){\n\t\t\tvar thisAngle = this.getIndexAngle(index);\n\t\t\treturn {\n\t\t\t\tx : (Math.cos(thisAngle) * distanceFromCenter) + this.xCenter,\n\t\t\t\ty : (Math.sin(thisAngle) * distanceFromCenter) + this.yCenter\n\t\t\t};\n\t\t},\n\t\tdraw: function(){\n\t\t\tif (this.display){\n\t\t\t\tvar ctx = this.ctx;\n\t\t\t\teach(this.yLabels, function(label, index){\n\t\t\t\t\t// Don't draw a centre value\n\t\t\t\t\tif (index > 0){\n\t\t\t\t\t\tvar yCenterOffset = index * (this.drawingArea/this.steps),\n\t\t\t\t\t\t\tyHeight = this.yCenter - yCenterOffset,\n\t\t\t\t\t\t\tpointPosition;\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (this.lineWidth > 0){\n\t\t\t\t\t\t\tctx.strokeStyle = this.lineColor;\n\t\t\t\t\t\t\tctx.lineWidth = this.lineWidth;\n\n\t\t\t\t\t\t\tif(this.lineArc){\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tctx.arc(this.xCenter, this.yCenter, yCenterOffset, 0, Math.PI*2);\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t} else{\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tfor (var i=0;i<this.valuesCount;i++)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpointPosition = this.getPointPosition(i, this.calculateCenterOffset(this.min + (index * this.stepValue)));\n\t\t\t\t\t\t\t\t\tif (i === 0){\n\t\t\t\t\t\t\t\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.showLabels){\n\t\t\t\t\t\t\tctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);\n\t\t\t\t\t\t\tif (this.showLabelBackdrop){\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = this.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\tthis.xCenter - labelWidth/2 - this.backdropPaddingX,\n\t\t\t\t\t\t\t\t\tyHeight - this.fontSize/2 - this.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + this.backdropPaddingX*2,\n\t\t\t\t\t\t\t\t\tthis.fontSize + this.backdropPaddingY*2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = \"middle\";\n\t\t\t\t\t\t\tctx.fillStyle = this.fontColor;\n\t\t\t\t\t\t\tctx.fillText(label, this.xCenter, yHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tif (!this.lineArc){\n\t\t\t\t\tctx.lineWidth = this.angleLineWidth;\n\t\t\t\t\tctx.strokeStyle = this.angleLineColor;\n\t\t\t\t\tfor (var i = this.valuesCount - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (this.angleLineWidth > 0){\n\t\t\t\t\t\t\tvar outerPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max));\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\tctx.moveTo(this.xCenter, this.yCenter);\n\t\t\t\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\t\t\tvar pointLabelPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max) + 5);\n\t\t\t\t\t\tctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);\n\t\t\t\t\t\tctx.fillStyle = this.pointLabelFontColor;\n\n\t\t\t\t\t\tvar labelsCount = this.labels.length,\n\t\t\t\t\t\t\thalfLabelsCount = this.labels.length/2,\n\t\t\t\t\t\t\tquarterLabelsCount = halfLabelsCount/2,\n\t\t\t\t\t\t\tupperHalf = (i < quarterLabelsCount || i > labelsCount - quarterLabelsCount),\n\t\t\t\t\t\t\texactQuarter = (i === quarterLabelsCount || i === labelsCount - quarterLabelsCount);\n\t\t\t\t\t\tif (i === 0){\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if(i === halfLabelsCount){\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if (i < halfLabelsCount){\n\t\t\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textAlign = 'right';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Set the correct text baseline based on outer positioning\n\t\t\t\t\t\tif (exactQuarter){\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t} else if (upperHalf){\n\t\t\t\t\t\t\tctx.textBaseline = 'bottom';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textBaseline = 'top';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.fillText(this.labels[i], pointLabelPosition.x, pointLabelPosition.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Attach global event to resize each chart instance when the browser resizes\n\thelpers.addEvent(window, \"resize\", (function(){\n\t\t// Basic debounce of resize function so it doesn't hurt performance when resizing browser.\n\t\tvar timeout;\n\t\treturn function(){\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(function(){\n\t\t\t\teach(Chart.instances,function(instance){\n\t\t\t\t\t// If the responsive flag is set in the chart instance config\n\t\t\t\t\t// Cascade the resize event down to the chart.\n\t\t\t\t\tif (instance.options.responsive){\n\t\t\t\t\t\tinstance.resize(instance.render, true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, 50);\n\t\t};\n\t})());\n\n\n\tif (amd) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){\n\t\t\treturn Chart;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = Chart;\n\t}\n\n\troot.Chart = Chart;\n\n\tChart.noConflict = function(){\n\t\troot.Chart = previous;\n\t\treturn Chart;\n\t};\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\n\tvar defaultConfig = {\n\t\t//Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value\n\t\tscaleBeginAtZero : true,\n\n\t\t//Boolean - Whether grid lines are shown across the chart\n\t\tscaleShowGridLines : true,\n\n\t\t//String - Colour of the grid lines\n\t\tscaleGridLineColor : \"rgba(0,0,0,.05)\",\n\n\t\t//Number - Width of the grid lines\n\t\tscaleGridLineWidth : 1,\n\n\t\t//Boolean - Whether to show horizontal lines (except X axis)\n\t\tscaleShowHorizontalLines: true,\n\n\t\t//Boolean - Whether to show vertical lines (except Y axis)\n\t\tscaleShowVerticalLines: true,\n\n\t\t//Boolean - If there is a stroke on each bar\n\t\tbarShowStroke : true,\n\n\t\t//Number - Pixel width of the bar stroke\n\t\tbarStrokeWidth : 2,\n\n\t\t//Number - Spacing between each of the X value sets\n\t\tbarValueSpacing : 5,\n\n\t\t//Number - Spacing between data sets within X values\n\t\tbarDatasetSpacing : 1,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].fillColor%>\\\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\tname: \"Bar\",\n\t\tdefaults : defaultConfig,\n\t\tinitialize: function(data){\n\n\t\t\t//Expose options as a scope variable here so we can access it in the ScaleClass\n\t\t\tvar options = this.options;\n\n\t\t\tthis.ScaleClass = Chart.Scale.extend({\n\t\t\t\toffsetGridLines : true,\n\t\t\t\tcalculateBarX : function(datasetCount, datasetIndex, barIndex){\n\t\t\t\t\t//Reusable method for calculating the xPosition of a given bar based on datasetIndex & width of the bar\n\t\t\t\t\tvar xWidth = this.calculateBaseWidth(),\n\t\t\t\t\t\txAbsolute = this.calculateX(barIndex) - (xWidth/2),\n\t\t\t\t\t\tbarWidth = this.calculateBarWidth(datasetCount);\n\n\t\t\t\t\treturn xAbsolute + (barWidth * datasetIndex) + (datasetIndex * options.barDatasetSpacing) + barWidth/2;\n\t\t\t\t},\n\t\t\t\tcalculateBaseWidth : function(){\n\t\t\t\t\treturn (this.calculateX(1) - this.calculateX(0)) - (2*options.barValueSpacing);\n\t\t\t\t},\n\t\t\t\tcalculateBarWidth : function(datasetCount){\n\t\t\t\t\t//The padding between datasets is to the right of each bar, providing that there are more than 1 dataset\n\t\t\t\t\tvar baseWidth = this.calculateBaseWidth() - ((datasetCount - 1) * options.barDatasetSpacing);\n\n\t\t\t\t\treturn (baseWidth / datasetCount);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeBars = (evt.type !== 'mouseout') ? this.getBarsAtEvent(evt) : [];\n\n\t\t\t\t\tthis.eachBars(function(bar){\n\t\t\t\t\t\tbar.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeBars, function(activeBar){\n\t\t\t\t\t\tactiveBar.fillColor = activeBar.highlightFill;\n\t\t\t\t\t\tactiveBar.strokeColor = activeBar.highlightStroke;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeBars);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Declare the extension of the default point, to cater for the options passed in to the constructor\n\t\t\tthis.BarClass = Chart.Rectangle.extend({\n\t\t\t\tstrokeWidth : this.options.barStrokeWidth,\n\t\t\t\tshowStroke : this.options.barShowStroke,\n\t\t\t\tctx : this.chart.ctx\n\t\t\t});\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset,datasetIndex){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel : dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tbars : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tdatasetObject.bars.push(new this.BarClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\t\thighlightFill : dataset.highlightFill || dataset.fillColor,\n\t\t\t\t\t\thighlightStroke : dataset.highlightStroke || dataset.strokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t},this);\n\n\t\t\tthis.buildScale(data.labels);\n\n\t\t\tthis.BarClass.prototype.base = this.scale.endPoint;\n\n\t\t\tthis.eachBars(function(bar, index, datasetIndex){\n\t\t\t\thelpers.extend(bar, {\n\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length),\n\t\t\t\t\tx: this.scale.calculateBarX(this.datasets.length, datasetIndex, index),\n\t\t\t\t\ty: this.scale.endPoint\n\t\t\t\t});\n\t\t\t\tbar.save();\n\t\t\t}, this);\n\n\t\t\tthis.render();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.scale.update();\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor', 'strokeColor']);\n\t\t\t});\n\n\t\t\tthis.eachBars(function(bar){\n\t\t\t\tbar.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\t\teachBars : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset, datasetIndex){\n\t\t\t\thelpers.each(dataset.bars, callback, this, datasetIndex);\n\t\t\t},this);\n\t\t},\n\t\tgetBarsAtEvent : function(e){\n\t\t\tvar barsArray = [],\n\t\t\t\teventPosition = helpers.getRelativePosition(e),\n\t\t\t\tdatasetIterator = function(dataset){\n\t\t\t\t\tbarsArray.push(dataset.bars[barIndex]);\n\t\t\t\t},\n\t\t\t\tbarIndex;\n\n\t\t\tfor (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {\n\t\t\t\tfor (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {\n\t\t\t\t\tif (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){\n\t\t\t\t\t\thelpers.each(this.datasets, datasetIterator);\n\t\t\t\t\t\treturn barsArray;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn barsArray;\n\t\t},\n\t\tbuildScale : function(labels){\n\t\t\tvar self = this;\n\n\t\t\tvar dataTotal = function(){\n\t\t\t\tvar values = [];\n\t\t\t\tself.eachBars(function(bar){\n\t\t\t\t\tvalues.push(bar.value);\n\t\t\t\t});\n\t\t\t\treturn values;\n\t\t\t};\n\n\t\t\tvar scaleOptions = {\n\t\t\t\ttemplateString : this.options.scaleLabel,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttextColor : this.options.scaleFontColor,\n\t\t\t\tfontSize : this.options.scaleFontSize,\n\t\t\t\tfontStyle : this.options.scaleFontStyle,\n\t\t\t\tfontFamily : this.options.scaleFontFamily,\n\t\t\t\tvaluesCount : labels.length,\n\t\t\t\tbeginAtZero : this.options.scaleBeginAtZero,\n\t\t\t\tintegersOnly : this.options.scaleIntegersOnly,\n\t\t\t\tcalculateYRange: function(currentHeight){\n\t\t\t\t\tvar updatedRanges = helpers.calculateScaleRange(\n\t\t\t\t\t\tdataTotal(),\n\t\t\t\t\t\tcurrentHeight,\n\t\t\t\t\t\tthis.fontSize,\n\t\t\t\t\t\tthis.beginAtZero,\n\t\t\t\t\t\tthis.integersOnly\n\t\t\t\t\t);\n\t\t\t\t\thelpers.extend(this, updatedRanges);\n\t\t\t\t},\n\t\t\t\txLabels : labels,\n\t\t\t\tfont : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),\n\t\t\t\tlineWidth : this.options.scaleLineWidth,\n\t\t\t\tlineColor : this.options.scaleLineColor,\n\t\t\t\tshowHorizontalLines : this.options.scaleShowHorizontalLines,\n\t\t\t\tshowVerticalLines : this.options.scaleShowVerticalLines,\n\t\t\t\tgridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,\n\t\t\t\tgridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : \"rgba(0,0,0,0)\",\n\t\t\t\tpadding : (this.options.showScale) ? 0 : (this.options.barShowStroke) ? this.options.barStrokeWidth : 0,\n\t\t\t\tshowLabels : this.options.scaleShowLabels,\n\t\t\t\tdisplay : this.options.showScale\n\t\t\t};\n\n\t\t\tif (this.options.scaleOverride){\n\t\t\t\thelpers.extend(scaleOptions, {\n\t\t\t\t\tcalculateYRange: helpers.noop,\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.scale = new this.ScaleClass(scaleOptions);\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\tthis.datasets[datasetIndex].bars.push(new this.BarClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tx: this.scale.calculateBarX(this.datasets.length, datasetIndex, this.scale.valuesCount+1),\n\t\t\t\t\ty: this.scale.endPoint,\n\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length),\n\t\t\t\t\tbase : this.scale.endPoint,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].strokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].fillColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.addXLabel(label);\n\t\t\t//Then re-render the chart.\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.removeXLabel();\n\t\t\t//Then re-render the chart.\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.bars.shift();\n\t\t\t},this);\n\t\t\tthis.update();\n\t\t},\n\t\treflow : function(){\n\t\t\thelpers.extend(this.BarClass.prototype,{\n\t\t\t\ty: this.scale.endPoint,\n\t\t\t\tbase : this.scale.endPoint\n\t\t\t});\n\t\t\tvar newScaleProps = helpers.extend({\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width\n\t\t\t});\n\t\t\tthis.scale.update(newScaleProps);\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tthis.clear();\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\tthis.scale.draw(easingDecimal);\n\n\t\t\t//Draw all the bars for each dataset\n\t\t\thelpers.each(this.datasets,function(dataset,datasetIndex){\n\t\t\t\thelpers.each(dataset.bars,function(bar,index){\n\t\t\t\t\tif (bar.hasValue()){\n\t\t\t\t\t\tbar.base = this.scale.endPoint;\n\t\t\t\t\t\t//Transition then draw\n\t\t\t\t\t\tbar.transition({\n\t\t\t\t\t\t\tx : this.scale.calculateBarX(this.datasets.length, datasetIndex, index),\n\t\t\t\t\t\t\ty : this.scale.calculateY(bar.value),\n\t\t\t\t\t\t\twidth : this.scale.calculateBarWidth(this.datasets.length)\n\t\t\t\t\t\t}, easingDecimal).draw();\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\t\t\t},this);\n\t\t}\n\t});\n\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\t//Cache a local reference to Chart.helpers\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\t//Boolean - Whether we should show a stroke on each segment\n\t\tsegmentShowStroke : true,\n\n\t\t//String - The colour of each segment stroke\n\t\tsegmentStrokeColor : \"#fff\",\n\n\t\t//Number - The width of each segment stroke\n\t\tsegmentStrokeWidth : 2,\n\n\t\t//The percentage of the chart that we cut out of the middle.\n\t\tpercentageInnerCutout : 50,\n\n\t\t//Number - Amount of animation steps\n\t\tanimationSteps : 100,\n\n\t\t//String - Animation easing effect\n\t\tanimationEasing : \"easeOutBounce\",\n\n\t\t//Boolean - Whether we animate the rotation of the Doughnut\n\t\tanimateRotate : true,\n\n\t\t//Boolean - Whether we animate scaling the Doughnut from the centre\n\t\tanimateScale : false,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\t//Passing in a name registers this chart in the Chart namespace\n\t\tname: \"Doughnut\",\n\t\t//Providing a defaults will also register the deafults in the chart namespace\n\t\tdefaults : defaultConfig,\n\t\t//Initialize is fired when the chart is initialized - Data is passed in as a parameter\n\t\t//Config is automatically merged by the core of Chart.js, and is available at this.options\n\t\tinitialize: function(data){\n\n\t\t\t//Declare segments as a static property to prevent inheriting across the Chart type prototype\n\t\t\tthis.segments = [];\n\t\t\tthis.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -\tthis.options.segmentStrokeWidth/2)/2;\n\n\t\t\tthis.SegmentArc = Chart.Arc.extend({\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];\n\n\t\t\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\t\t\tsegment.restore([\"fillColor\"]);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeSegments,function(activeSegment){\n\t\t\t\t\t\tactiveSegment.fillColor = activeSegment.highlightColor;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeSegments);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.calculateTotal(data);\n\n\t\t\thelpers.each(data,function(datapoint, index){\n\t\t\t\tthis.addData(datapoint, index, true);\n\t\t\t},this);\n\n\t\t\tthis.render();\n\t\t},\n\t\tgetSegmentsAtEvent : function(e){\n\t\t\tvar segmentsArray = [];\n\n\t\t\tvar location = helpers.getRelativePosition(e);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tif (segment.inRange(location.x,location.y)) segmentsArray.push(segment);\n\t\t\t},this);\n\t\t\treturn segmentsArray;\n\t\t},\n\t\taddData : function(segment, atIndex, silent){\n\t\t\tvar index = atIndex || this.segments.length;\n\t\t\tthis.segments.splice(index, 0, new this.SegmentArc({\n\t\t\t\tvalue : segment.value,\n\t\t\t\touterRadius : (this.options.animateScale) ? 0 : this.outerRadius,\n\t\t\t\tinnerRadius : (this.options.animateScale) ? 0 : (this.outerRadius/100) * this.options.percentageInnerCutout,\n\t\t\t\tfillColor : segment.color,\n\t\t\t\thighlightColor : segment.highlight || segment.color,\n\t\t\t\tshowStroke : this.options.segmentShowStroke,\n\t\t\t\tstrokeWidth : this.options.segmentStrokeWidth,\n\t\t\t\tstrokeColor : this.options.segmentStrokeColor,\n\t\t\t\tstartAngle : Math.PI * 1.5,\n\t\t\t\tcircumference : (this.options.animateRotate) ? 0 : this.calculateCircumference(segment.value),\n\t\t\t\tlabel : segment.label\n\t\t\t}));\n\t\t\tif (!silent){\n\t\t\t\tthis.reflow();\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\t\tcalculateCircumference : function(value){\n\t\t\treturn (Math.PI*2)*(Math.abs(value) / this.total);\n\t\t},\n\t\tcalculateTotal : function(data){\n\t\t\tthis.total = 0;\n\t\t\thelpers.each(data,function(segment){\n\t\t\t\tthis.total += Math.abs(segment.value);\n\t\t\t},this);\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.calculateTotal(this.segments);\n\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor']);\n\t\t\t});\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tsegment.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\n\t\tremoveData: function(atIndex){\n\t\t\tvar indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;\n\t\t\tthis.segments.splice(indexToDelete, 1);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\n\t\treflow : function(){\n\t\t\thelpers.extend(this.SegmentArc.prototype,{\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -\tthis.options.segmentStrokeWidth/2)/2;\n\t\t\thelpers.each(this.segments, function(segment){\n\t\t\t\tsegment.update({\n\t\t\t\t\touterRadius : this.outerRadius,\n\t\t\t\t\tinnerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout\n\t\t\t\t});\n\t\t\t}, this);\n\t\t},\n\t\tdraw : function(easeDecimal){\n\t\t\tvar animDecimal = (easeDecimal) ? easeDecimal : 1;\n\t\t\tthis.clear();\n\t\t\thelpers.each(this.segments,function(segment,index){\n\t\t\t\tsegment.transition({\n\t\t\t\t\tcircumference : this.calculateCircumference(segment.value),\n\t\t\t\t\touterRadius : this.outerRadius,\n\t\t\t\t\tinnerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout\n\t\t\t\t},animDecimal);\n\n\t\t\t\tsegment.endAngle = segment.startAngle + segment.circumference;\n\n\t\t\t\tsegment.draw();\n\t\t\t\tif (index === 0){\n\t\t\t\t\tsegment.startAngle = Math.PI * 1.5;\n\t\t\t\t}\n\t\t\t\t//Check to see if it's the last segment, if not get the next and update the start angle\n\t\t\t\tif (index < this.segments.length-1){\n\t\t\t\t\tthis.segments[index+1].startAngle = segment.endAngle;\n\t\t\t\t}\n\t\t\t},this);\n\n\t\t}\n\t});\n\n\tChart.types.Doughnut.extend({\n\t\tname : \"Pie\",\n\t\tdefaults : helpers.merge(defaultConfig,{percentageInnerCutout : 0})\n\t});\n\n}).call(this);\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\n\t\t///Boolean - Whether grid lines are shown across the chart\n\t\tscaleShowGridLines : true,\n\n\t\t//String - Colour of the grid lines\n\t\tscaleGridLineColor : \"rgba(0,0,0,.05)\",\n\n\t\t//Number - Width of the grid lines\n\t\tscaleGridLineWidth : 1,\n\n\t\t//Boolean - Whether to show horizontal lines (except X axis)\n\t\tscaleShowHorizontalLines: true,\n\n\t\t//Boolean - Whether to show vertical lines (except Y axis)\n\t\tscaleShowVerticalLines: true,\n\n\t\t//Boolean - Whether the line is curved between points\n\t\tbezierCurve : true,\n\n\t\t//Number - Tension of the bezier curve between points\n\t\tbezierCurveTension : 0.4,\n\n\t\t//Boolean - Whether to show a dot for each point\n\t\tpointDot : true,\n\n\t\t//Number - Radius of each point dot in pixels\n\t\tpointDotRadius : 4,\n\n\t\t//Number - Pixel width of point dot stroke\n\t\tpointDotStrokeWidth : 1,\n\n\t\t//Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n\t\tpointHitDetectionRadius : 20,\n\n\t\t//Boolean - Whether to show a stroke for datasets\n\t\tdatasetStroke : true,\n\n\t\t//Number - Pixel width of dataset stroke\n\t\tdatasetStrokeWidth : 2,\n\n\t\t//Boolean - Whether to fill the dataset with a colour\n\t\tdatasetFill : true,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].strokeColor%>\\\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>\"\n\n\t};\n\n\n\tChart.Type.extend({\n\t\tname: \"Line\",\n\t\tdefaults : defaultConfig,\n\t\tinitialize: function(data){\n\t\t\t//Declare the extension of the default point, to cater for the options passed in to the constructor\n\t\t\tthis.PointClass = Chart.Point.extend({\n\t\t\t\tstrokeWidth : this.options.pointDotStrokeWidth,\n\t\t\t\tradius : this.options.pointDotRadius,\n\t\t\t\tdisplay: this.options.pointDot,\n\t\t\t\thitDetectionRadius : this.options.pointHitDetectionRadius,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tinRange : function(mouseX){\n\t\t\t\t\treturn (Math.pow(mouseX-this.x, 2) < Math.pow(this.radius + this.hitDetectionRadius,2));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activePoints = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];\n\t\t\t\t\tthis.eachPoints(function(point){\n\t\t\t\t\t\tpoint.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activePoints, function(activePoint){\n\t\t\t\t\t\tactivePoint.fillColor = activePoint.highlightFill;\n\t\t\t\t\t\tactivePoint.strokeColor = activePoint.highlightStroke;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activePoints);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel : dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tpointColor : dataset.pointColor,\n\t\t\t\t\tpointStrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\tpoints : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tdatasetObject.points.push(new this.PointClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tstrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\t\tfillColor : dataset.pointColor,\n\t\t\t\t\t\thighlightFill : dataset.pointHighlightFill || dataset.pointColor,\n\t\t\t\t\t\thighlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t\tthis.buildScale(data.labels);\n\n\n\t\t\t\tthis.eachPoints(function(point, index){\n\t\t\t\t\thelpers.extend(point, {\n\t\t\t\t\t\tx: this.scale.calculateX(index),\n\t\t\t\t\t\ty: this.scale.endPoint\n\t\t\t\t\t});\n\t\t\t\t\tpoint.save();\n\t\t\t\t}, this);\n\n\t\t\t},this);\n\n\n\t\t\tthis.render();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.scale.update();\n\t\t\t// Reset any highlight colours before updating.\n\t\t\thelpers.each(this.activeElements, function(activeElement){\n\t\t\t\tactiveElement.restore(['fillColor', 'strokeColor']);\n\t\t\t});\n\t\t\tthis.eachPoints(function(point){\n\t\t\t\tpoint.save();\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\t\teachPoints : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,callback,this);\n\t\t\t},this);\n\t\t},\n\t\tgetPointsAtEvent : function(e){\n\t\t\tvar pointsArray = [],\n\t\t\t\teventPosition = helpers.getRelativePosition(e);\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,function(point){\n\t\t\t\t\tif (point.inRange(eventPosition.x,eventPosition.y)) pointsArray.push(point);\n\t\t\t\t});\n\t\t\t},this);\n\t\t\treturn pointsArray;\n\t\t},\n\t\tbuildScale : function(labels){\n\t\t\tvar self = this;\n\n\t\t\tvar dataTotal = function(){\n\t\t\t\tvar values = [];\n\t\t\t\tself.eachPoints(function(point){\n\t\t\t\t\tvalues.push(point.value);\n\t\t\t\t});\n\n\t\t\t\treturn values;\n\t\t\t};\n\n\t\t\tvar scaleOptions = {\n\t\t\t\ttemplateString : this.options.scaleLabel,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttextColor : this.options.scaleFontColor,\n\t\t\t\tfontSize : this.options.scaleFontSize,\n\t\t\t\tfontStyle : this.options.scaleFontStyle,\n\t\t\t\tfontFamily : this.options.scaleFontFamily,\n\t\t\t\tvaluesCount : labels.length,\n\t\t\t\tbeginAtZero : this.options.scaleBeginAtZero,\n\t\t\t\tintegersOnly : this.options.scaleIntegersOnly,\n\t\t\t\tcalculateYRange : function(currentHeight){\n\t\t\t\t\tvar updatedRanges = helpers.calculateScaleRange(\n\t\t\t\t\t\tdataTotal(),\n\t\t\t\t\t\tcurrentHeight,\n\t\t\t\t\t\tthis.fontSize,\n\t\t\t\t\t\tthis.beginAtZero,\n\t\t\t\t\t\tthis.integersOnly\n\t\t\t\t\t);\n\t\t\t\t\thelpers.extend(this, updatedRanges);\n\t\t\t\t},\n\t\t\t\txLabels : labels,\n\t\t\t\tfont : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),\n\t\t\t\tlineWidth : this.options.scaleLineWidth,\n\t\t\t\tlineColor : this.options.scaleLineColor,\n\t\t\t\tshowHorizontalLines : this.options.scaleShowHorizontalLines,\n\t\t\t\tshowVerticalLines : this.options.scaleShowVerticalLines,\n\t\t\t\tgridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,\n\t\t\t\tgridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : \"rgba(0,0,0,0)\",\n\t\t\t\tpadding: (this.options.showScale) ? 0 : this.options.pointDotRadius + this.options.pointDotStrokeWidth,\n\t\t\t\tshowLabels : this.options.scaleShowLabels,\n\t\t\t\tdisplay : this.options.showScale\n\t\t\t};\n\n\t\t\tif (this.options.scaleOverride){\n\t\t\t\thelpers.extend(scaleOptions, {\n\t\t\t\t\tcalculateYRange: helpers.noop,\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tthis.scale = new Chart.Scale(scaleOptions);\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\tthis.datasets[datasetIndex].points.push(new this.PointClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tx: this.scale.calculateX(this.scale.valuesCount+1),\n\t\t\t\t\ty: this.scale.endPoint,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].pointStrokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].pointColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.addXLabel(label);\n\t\t\t//Then re-render the chart.\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.removeXLabel();\n\t\t\t//Then re-render the chart.\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.points.shift();\n\t\t\t},this);\n\t\t\tthis.update();\n\t\t},\n\t\treflow : function(){\n\t\t\tvar newScaleProps = helpers.extend({\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth : this.chart.width\n\t\t\t});\n\t\t\tthis.scale.update(newScaleProps);\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tthis.clear();\n\n\t\t\tvar ctx = this.chart.ctx;\n\n\t\t\t// Some helper methods for getting the next/prev points\n\t\t\tvar hasValue = function(item){\n\t\t\t\treturn item.value !== null;\n\t\t\t},\n\t\t\tnextPoint = function(point, collection, index){\n\t\t\t\treturn helpers.findNextWhere(collection, hasValue, index) || point;\n\t\t\t},\n\t\t\tpreviousPoint = function(point, collection, index){\n\t\t\t\treturn helpers.findPreviousWhere(collection, hasValue, index) || point;\n\t\t\t};\n\n\t\t\tthis.scale.draw(easingDecimal);\n\n\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tvar pointsWithValues = helpers.where(dataset.points, hasValue);\n\n\t\t\t\t//Transition each point first so that the line and point drawing isn't out of sync\n\t\t\t\t//We can use this extra loop to calculate the control points of this dataset also in this loop\n\n\t\t\t\thelpers.each(dataset.points, function(point, index){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.transition({\n\t\t\t\t\t\t\ty : this.scale.calculateY(point.value),\n\t\t\t\t\t\t\tx : this.scale.calculateX(index)\n\t\t\t\t\t\t}, easingDecimal);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\n\t\t\t\t// Control points need to be calculated in a seperate loop, because we need to know the current x/y of the point\n\t\t\t\t// This would cause issues when there is no animation, because the y of the next point would be 0, so beziers would be skewed\n\t\t\t\tif (this.options.bezierCurve){\n\t\t\t\t\thelpers.each(pointsWithValues, function(point, index){\n\t\t\t\t\t\tvar tension = (index > 0 && index < pointsWithValues.length - 1) ? this.options.bezierCurveTension : 0;\n\t\t\t\t\t\tpoint.controlPoints = helpers.splineCurve(\n\t\t\t\t\t\t\tpreviousPoint(point, pointsWithValues, index),\n\t\t\t\t\t\t\tpoint,\n\t\t\t\t\t\t\tnextPoint(point, pointsWithValues, index),\n\t\t\t\t\t\t\ttension\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\n\t\t\t\t\t\t// Cap puter bezier handles to the upper/lower scale bounds\n\t\t\t\t\t\tif (point.controlPoints.outer.y > this.scale.endPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.outer.y = this.scale.endPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (point.controlPoints.outer.y < this.scale.startPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.outer.y = this.scale.startPoint;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Cap inner bezier handles to the upper/lower scale bounds\n\t\t\t\t\t\tif (point.controlPoints.inner.y > this.scale.endPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.inner.y = this.scale.endPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (point.controlPoints.inner.y < this.scale.startPoint){\n\t\t\t\t\t\t\tpoint.controlPoints.inner.y = this.scale.startPoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t},this);\n\t\t\t\t}\n\n\n\t\t\t\t//Draw the line between all the points\n\t\t\t\tctx.lineWidth = this.options.datasetStrokeWidth;\n\t\t\t\tctx.strokeStyle = dataset.strokeColor;\n\t\t\t\tctx.beginPath();\n\n\t\t\t\thelpers.each(pointsWithValues, function(point, index){\n\t\t\t\t\tif (index === 0){\n\t\t\t\t\t\tctx.moveTo(point.x, point.y);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tif(this.options.bezierCurve){\n\t\t\t\t\t\t\tvar previous = previousPoint(point, pointsWithValues, index);\n\n\t\t\t\t\t\t\tctx.bezierCurveTo(\n\t\t\t\t\t\t\t\tprevious.controlPoints.outer.x,\n\t\t\t\t\t\t\t\tprevious.controlPoints.outer.y,\n\t\t\t\t\t\t\t\tpoint.controlPoints.inner.x,\n\t\t\t\t\t\t\t\tpoint.controlPoints.inner.y,\n\t\t\t\t\t\t\t\tpoint.x,\n\t\t\t\t\t\t\t\tpoint.y\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tctx.lineTo(point.x,point.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tctx.stroke();\n\n\t\t\t\tif (this.options.datasetFill && pointsWithValues.length > 0){\n\t\t\t\t\t//Round off the line by going to the base of the chart, back to the start, then fill.\n\t\t\t\t\tctx.lineTo(pointsWithValues[pointsWithValues.length - 1].x, this.scale.endPoint);\n\t\t\t\t\tctx.lineTo(pointsWithValues[0].x, this.scale.endPoint);\n\t\t\t\t\tctx.fillStyle = dataset.fillColor;\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.fill();\n\t\t\t\t}\n\n\t\t\t\t//Now draw the points over the line\n\t\t\t\t//A little inefficient double looping, but better than the line\n\t\t\t\t//lagging behind the point positions\n\t\t\t\thelpers.each(pointsWithValues,function(point){\n\t\t\t\t\tpoint.draw();\n\t\t\t\t});\n\t\t\t},this);\n\t\t}\n\t});\n\n\n}).call(this);\n\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\t//Cache a local reference to Chart.helpers\n\t\thelpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\t//Boolean - Show a backdrop to the scale label\n\t\tscaleShowLabelBackdrop : true,\n\n\t\t//String - The colour of the label backdrop\n\t\tscaleBackdropColor : \"rgba(255,255,255,0.75)\",\n\n\t\t// Boolean - Whether the scale should begin at zero\n\t\tscaleBeginAtZero : true,\n\n\t\t//Number - The backdrop padding above & below the label in pixels\n\t\tscaleBackdropPaddingY : 2,\n\n\t\t//Number - The backdrop padding to the side of the label in pixels\n\t\tscaleBackdropPaddingX : 2,\n\n\t\t//Boolean - Show line for each value in the scale\n\t\tscaleShowLine : true,\n\n\t\t//Boolean - Stroke a line around each segment in the chart\n\t\tsegmentShowStroke : true,\n\n\t\t//String - The colour of the stroke on each segement.\n\t\tsegmentStrokeColor : \"#fff\",\n\n\t\t//Number - The width of the stroke value in pixels\n\t\tsegmentStrokeWidth : 2,\n\n\t\t//Number - Amount of animation steps\n\t\tanimationSteps : 100,\n\n\t\t//String - Animation easing effect.\n\t\tanimationEasing : \"easeOutBounce\",\n\n\t\t//Boolean - Whether to animate the rotation of the chart\n\t\tanimateRotate : true,\n\n\t\t//Boolean - Whether to animate scaling the chart from the centre\n\t\tanimateScale : false,\n\n\t\t//String - A legend template\n\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>\"\n\t};\n\n\n\tChart.Type.extend({\n\t\t//Passing in a name registers this chart in the Chart namespace\n\t\tname: \"PolarArea\",\n\t\t//Providing a defaults will also register the deafults in the chart namespace\n\t\tdefaults : defaultConfig,\n\t\t//Initialize is fired when the chart is initialized - Data is passed in as a parameter\n\t\t//Config is automatically merged by the core of Chart.js, and is available at this.options\n\t\tinitialize: function(data){\n\t\t\tthis.segments = [];\n\t\t\t//Declare segment class as a chart instance specific class, so it can share props for this instance\n\t\t\tthis.SegmentArc = Chart.Arc.extend({\n\t\t\t\tshowStroke : this.options.segmentShowStroke,\n\t\t\t\tstrokeWidth : this.options.segmentStrokeWidth,\n\t\t\t\tstrokeColor : this.options.segmentStrokeColor,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\tinnerRadius : 0,\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.scale = new Chart.RadialScale({\n\t\t\t\tdisplay: this.options.showScale,\n\t\t\t\tfontStyle: this.options.scaleFontStyle,\n\t\t\t\tfontSize: this.options.scaleFontSize,\n\t\t\t\tfontFamily: this.options.scaleFontFamily,\n\t\t\t\tfontColor: this.options.scaleFontColor,\n\t\t\t\tshowLabels: this.options.scaleShowLabels,\n\t\t\t\tshowLabelBackdrop: this.options.scaleShowLabelBackdrop,\n\t\t\t\tbackdropColor: this.options.scaleBackdropColor,\n\t\t\t\tbackdropPaddingY : this.options.scaleBackdropPaddingY,\n\t\t\t\tbackdropPaddingX: this.options.scaleBackdropPaddingX,\n\t\t\t\tlineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,\n\t\t\t\tlineColor: this.options.scaleLineColor,\n\t\t\t\tlineArc: true,\n\t\t\t\twidth: this.chart.width,\n\t\t\t\theight: this.chart.height,\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttemplateString: this.options.scaleLabel,\n\t\t\t\tvaluesCount: data.length\n\t\t\t});\n\n\t\t\tthis.updateScaleRange(data);\n\n\t\t\tthis.scale.update();\n\n\t\t\thelpers.each(data,function(segment,index){\n\t\t\t\tthis.addData(segment,index,true);\n\t\t\t},this);\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];\n\t\t\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\t\t\tsegment.restore([\"fillColor\"]);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activeSegments,function(activeSegment){\n\t\t\t\t\t\tactiveSegment.fillColor = activeSegment.highlightColor;\n\t\t\t\t\t});\n\t\t\t\t\tthis.showTooltip(activeSegments);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.render();\n\t\t},\n\t\tgetSegmentsAtEvent : function(e){\n\t\t\tvar segmentsArray = [];\n\n\t\t\tvar location = helpers.getRelativePosition(e);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tif (segment.inRange(location.x,location.y)) segmentsArray.push(segment);\n\t\t\t},this);\n\t\t\treturn segmentsArray;\n\t\t},\n\t\taddData : function(segment, atIndex, silent){\n\t\t\tvar index = atIndex || this.segments.length;\n\n\t\t\tthis.segments.splice(index, 0, new this.SegmentArc({\n\t\t\t\tfillColor: segment.color,\n\t\t\t\thighlightColor: segment.highlight || segment.color,\n\t\t\t\tlabel: segment.label,\n\t\t\t\tvalue: segment.value,\n\t\t\t\touterRadius: (this.options.animateScale) ? 0 : this.scale.calculateCenterOffset(segment.value),\n\t\t\t\tcircumference: (this.options.animateRotate) ? 0 : this.scale.getCircumference(),\n\t\t\t\tstartAngle: Math.PI * 1.5\n\t\t\t}));\n\t\t\tif (!silent){\n\t\t\t\tthis.reflow();\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\t\tremoveData: function(atIndex){\n\t\t\tvar indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;\n\t\t\tthis.segments.splice(indexToDelete, 1);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\t\tcalculateTotal: function(data){\n\t\t\tthis.total = 0;\n\t\t\thelpers.each(data,function(segment){\n\t\t\t\tthis.total += segment.value;\n\t\t\t},this);\n\t\t\tthis.scale.valuesCount = this.segments.length;\n\t\t},\n\t\tupdateScaleRange: function(datapoints){\n\t\t\tvar valuesArray = [];\n\t\t\thelpers.each(datapoints,function(segment){\n\t\t\t\tvaluesArray.push(segment.value);\n\t\t\t});\n\n\t\t\tvar scaleSizes = (this.options.scaleOverride) ?\n\t\t\t\t{\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t} :\n\t\t\t\thelpers.calculateScaleRange(\n\t\t\t\t\tvaluesArray,\n\t\t\t\t\thelpers.min([this.chart.width, this.chart.height])/2,\n\t\t\t\t\tthis.options.scaleFontSize,\n\t\t\t\t\tthis.options.scaleBeginAtZero,\n\t\t\t\t\tthis.options.scaleIntegersOnly\n\t\t\t\t);\n\n\t\t\thelpers.extend(\n\t\t\t\tthis.scale,\n\t\t\t\tscaleSizes,\n\t\t\t\t{\n\t\t\t\t\tsize: helpers.min([this.chart.width, this.chart.height]),\n\t\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\t\tyCenter: this.chart.height/2\n\t\t\t\t}\n\t\t\t);\n\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.calculateTotal(this.segments);\n\n\t\t\thelpers.each(this.segments,function(segment){\n\t\t\t\tsegment.save();\n\t\t\t});\n\t\t\t\n\t\t\tthis.reflow();\n\t\t\tthis.render();\n\t\t},\n\t\treflow : function(){\n\t\t\thelpers.extend(this.SegmentArc.prototype,{\n\t\t\t\tx : this.chart.width/2,\n\t\t\t\ty : this.chart.height/2\n\t\t\t});\n\t\t\tthis.updateScaleRange(this.segments);\n\t\t\tthis.scale.update();\n\n\t\t\thelpers.extend(this.scale,{\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2\n\t\t\t});\n\n\t\t\thelpers.each(this.segments, function(segment){\n\t\t\t\tsegment.update({\n\t\t\t\t\touterRadius : this.scale.calculateCenterOffset(segment.value)\n\t\t\t\t});\n\t\t\t}, this);\n\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\t//Clear & draw the canvas\n\t\t\tthis.clear();\n\t\t\thelpers.each(this.segments,function(segment, index){\n\t\t\t\tsegment.transition({\n\t\t\t\t\tcircumference : this.scale.getCircumference(),\n\t\t\t\t\touterRadius : this.scale.calculateCenterOffset(segment.value)\n\t\t\t\t},easingDecimal);\n\n\t\t\t\tsegment.endAngle = segment.startAngle + segment.circumference;\n\n\t\t\t\t// If we've removed the first segment we need to set the first one to\n\t\t\t\t// start at the top.\n\t\t\t\tif (index === 0){\n\t\t\t\t\tsegment.startAngle = Math.PI * 1.5;\n\t\t\t\t}\n\n\t\t\t\t//Check to see if it's the last segment, if not get the next and update the start angle\n\t\t\t\tif (index < this.segments.length - 1){\n\t\t\t\t\tthis.segments[index+1].startAngle = segment.endAngle;\n\t\t\t\t}\n\t\t\t\tsegment.draw();\n\t\t\t}, this);\n\t\t\tthis.scale.draw();\n\t\t}\n\t});\n\n}).call(this);\n(function(){\n\t\"use strict\";\n\n\tvar root = this,\n\t\tChart = root.Chart,\n\t\thelpers = Chart.helpers;\n\n\n\n\tChart.Type.extend({\n\t\tname: \"Radar\",\n\t\tdefaults:{\n\t\t\t//Boolean - Whether to show lines for each scale point\n\t\t\tscaleShowLine : true,\n\n\t\t\t//Boolean - Whether we show the angle lines out of the radar\n\t\t\tangleShowLineOut : true,\n\n\t\t\t//Boolean - Whether to show labels on the scale\n\t\t\tscaleShowLabels : false,\n\n\t\t\t// Boolean - Whether the scale should begin at zero\n\t\t\tscaleBeginAtZero : true,\n\n\t\t\t//String - Colour of the angle line\n\t\t\tangleLineColor : \"rgba(0,0,0,.1)\",\n\n\t\t\t//Number - Pixel width of the angle line\n\t\t\tangleLineWidth : 1,\n\n\t\t\t//String - Point label font declaration\n\t\t\tpointLabelFontFamily : \"'Arial'\",\n\n\t\t\t//String - Point label font weight\n\t\t\tpointLabelFontStyle : \"normal\",\n\n\t\t\t//Number - Point label font size in pixels\n\t\t\tpointLabelFontSize : 10,\n\n\t\t\t//String - Point label font colour\n\t\t\tpointLabelFontColor : \"#666\",\n\n\t\t\t//Boolean - Whether to show a dot for each point\n\t\t\tpointDot : true,\n\n\t\t\t//Number - Radius of each point dot in pixels\n\t\t\tpointDotRadius : 3,\n\n\t\t\t//Number - Pixel width of point dot stroke\n\t\t\tpointDotStrokeWidth : 1,\n\n\t\t\t//Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n\t\t\tpointHitDetectionRadius : 20,\n\n\t\t\t//Boolean - Whether to show a stroke for datasets\n\t\t\tdatasetStroke : true,\n\n\t\t\t//Number - Pixel width of dataset stroke\n\t\t\tdatasetStrokeWidth : 2,\n\n\t\t\t//Boolean - Whether to fill the dataset with a colour\n\t\t\tdatasetFill : true,\n\n\t\t\t//String - A legend template\n\t\t\tlegendTemplate : \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].strokeColor%>\\\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>\"\n\n\t\t},\n\n\t\tinitialize: function(data){\n\t\t\tthis.PointClass = Chart.Point.extend({\n\t\t\t\tstrokeWidth : this.options.pointDotStrokeWidth,\n\t\t\t\tradius : this.options.pointDotRadius,\n\t\t\t\tdisplay: this.options.pointDot,\n\t\t\t\thitDetectionRadius : this.options.pointHitDetectionRadius,\n\t\t\t\tctx : this.chart.ctx\n\t\t\t});\n\n\t\t\tthis.datasets = [];\n\n\t\t\tthis.buildScale(data);\n\n\t\t\t//Set up tooltip events on the chart\n\t\t\tif (this.options.showTooltips){\n\t\t\t\thelpers.bindEvents(this, this.options.tooltipEvents, function(evt){\n\t\t\t\t\tvar activePointsCollection = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];\n\n\t\t\t\t\tthis.eachPoints(function(point){\n\t\t\t\t\t\tpoint.restore(['fillColor', 'strokeColor']);\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(activePointsCollection, function(activePoint){\n\t\t\t\t\t\tactivePoint.fillColor = activePoint.highlightFill;\n\t\t\t\t\t\tactivePoint.strokeColor = activePoint.highlightStroke;\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.showTooltip(activePointsCollection);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Iterate through each of the datasets, and build this into a property of the chart\n\t\t\thelpers.each(data.datasets,function(dataset){\n\n\t\t\t\tvar datasetObject = {\n\t\t\t\t\tlabel: dataset.label || null,\n\t\t\t\t\tfillColor : dataset.fillColor,\n\t\t\t\t\tstrokeColor : dataset.strokeColor,\n\t\t\t\t\tpointColor : dataset.pointColor,\n\t\t\t\t\tpointStrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\tpoints : []\n\t\t\t\t};\n\n\t\t\t\tthis.datasets.push(datasetObject);\n\n\t\t\t\thelpers.each(dataset.data,function(dataPoint,index){\n\t\t\t\t\t//Add a new point for each piece of data, passing any required data to draw.\n\t\t\t\t\tvar pointPosition;\n\t\t\t\t\tif (!this.scale.animation){\n\t\t\t\t\t\tpointPosition = this.scale.getPointPosition(index, this.scale.calculateCenterOffset(dataPoint));\n\t\t\t\t\t}\n\t\t\t\t\tdatasetObject.points.push(new this.PointClass({\n\t\t\t\t\t\tvalue : dataPoint,\n\t\t\t\t\t\tlabel : data.labels[index],\n\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\tx: (this.options.animation) ? this.scale.xCenter : pointPosition.x,\n\t\t\t\t\t\ty: (this.options.animation) ? this.scale.yCenter : pointPosition.y,\n\t\t\t\t\t\tstrokeColor : dataset.pointStrokeColor,\n\t\t\t\t\t\tfillColor : dataset.pointColor,\n\t\t\t\t\t\thighlightFill : dataset.pointHighlightFill || dataset.pointColor,\n\t\t\t\t\t\thighlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor\n\t\t\t\t\t}));\n\t\t\t\t},this);\n\n\t\t\t},this);\n\n\t\t\tthis.render();\n\t\t},\n\t\teachPoints : function(callback){\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\thelpers.each(dataset.points,callback,this);\n\t\t\t},this);\n\t\t},\n\n\t\tgetPointsAtEvent : function(evt){\n\t\t\tvar mousePosition = helpers.getRelativePosition(evt),\n\t\t\t\tfromCenter = helpers.getAngleFromPoint({\n\t\t\t\t\tx: this.scale.xCenter,\n\t\t\t\t\ty: this.scale.yCenter\n\t\t\t\t}, mousePosition);\n\n\t\t\tvar anglePerIndex = (Math.PI * 2) /this.scale.valuesCount,\n\t\t\t\tpointIndex = Math.round((fromCenter.angle - Math.PI * 1.5) / anglePerIndex),\n\t\t\t\tactivePointsCollection = [];\n\n\t\t\t// If we're at the top, make the pointIndex 0 to get the first of the array.\n\t\t\tif (pointIndex >= this.scale.valuesCount || pointIndex < 0){\n\t\t\t\tpointIndex = 0;\n\t\t\t}\n\n\t\t\tif (fromCenter.distance <= this.scale.drawingArea){\n\t\t\t\thelpers.each(this.datasets, function(dataset){\n\t\t\t\t\tactivePointsCollection.push(dataset.points[pointIndex]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn activePointsCollection;\n\t\t},\n\n\t\tbuildScale : function(data){\n\t\t\tthis.scale = new Chart.RadialScale({\n\t\t\t\tdisplay: this.options.showScale,\n\t\t\t\tfontStyle: this.options.scaleFontStyle,\n\t\t\t\tfontSize: this.options.scaleFontSize,\n\t\t\t\tfontFamily: this.options.scaleFontFamily,\n\t\t\t\tfontColor: this.options.scaleFontColor,\n\t\t\t\tshowLabels: this.options.scaleShowLabels,\n\t\t\t\tshowLabelBackdrop: this.options.scaleShowLabelBackdrop,\n\t\t\t\tbackdropColor: this.options.scaleBackdropColor,\n\t\t\t\tbackdropPaddingY : this.options.scaleBackdropPaddingY,\n\t\t\t\tbackdropPaddingX: this.options.scaleBackdropPaddingX,\n\t\t\t\tlineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,\n\t\t\t\tlineColor: this.options.scaleLineColor,\n\t\t\t\tangleLineColor : this.options.angleLineColor,\n\t\t\t\tangleLineWidth : (this.options.angleShowLineOut) ? this.options.angleLineWidth : 0,\n\t\t\t\t// Point labels at the edge of each line\n\t\t\t\tpointLabelFontColor : this.options.pointLabelFontColor,\n\t\t\t\tpointLabelFontSize : this.options.pointLabelFontSize,\n\t\t\t\tpointLabelFontFamily : this.options.pointLabelFontFamily,\n\t\t\t\tpointLabelFontStyle : this.options.pointLabelFontStyle,\n\t\t\t\theight : this.chart.height,\n\t\t\t\twidth: this.chart.width,\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2,\n\t\t\t\tctx : this.chart.ctx,\n\t\t\t\ttemplateString: this.options.scaleLabel,\n\t\t\t\tlabels: data.labels,\n\t\t\t\tvaluesCount: data.datasets[0].data.length\n\t\t\t});\n\n\t\t\tthis.scale.setScaleSize();\n\t\t\tthis.updateScaleRange(data.datasets);\n\t\t\tthis.scale.buildYLabels();\n\t\t},\n\t\tupdateScaleRange: function(datasets){\n\t\t\tvar valuesArray = (function(){\n\t\t\t\tvar totalDataArray = [];\n\t\t\t\thelpers.each(datasets,function(dataset){\n\t\t\t\t\tif (dataset.data){\n\t\t\t\t\t\ttotalDataArray = totalDataArray.concat(dataset.data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thelpers.each(dataset.points, function(point){\n\t\t\t\t\t\t\ttotalDataArray.push(point.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn totalDataArray;\n\t\t\t})();\n\n\n\t\t\tvar scaleSizes = (this.options.scaleOverride) ?\n\t\t\t\t{\n\t\t\t\t\tsteps: this.options.scaleSteps,\n\t\t\t\t\tstepValue: this.options.scaleStepWidth,\n\t\t\t\t\tmin: this.options.scaleStartValue,\n\t\t\t\t\tmax: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)\n\t\t\t\t} :\n\t\t\t\thelpers.calculateScaleRange(\n\t\t\t\t\tvaluesArray,\n\t\t\t\t\thelpers.min([this.chart.width, this.chart.height])/2,\n\t\t\t\t\tthis.options.scaleFontSize,\n\t\t\t\t\tthis.options.scaleBeginAtZero,\n\t\t\t\t\tthis.options.scaleIntegersOnly\n\t\t\t\t);\n\n\t\t\thelpers.extend(\n\t\t\t\tthis.scale,\n\t\t\t\tscaleSizes\n\t\t\t);\n\n\t\t},\n\t\taddData : function(valuesArray,label){\n\t\t\t//Map the values array for each of the datasets\n\t\t\tthis.scale.valuesCount++;\n\t\t\thelpers.each(valuesArray,function(value,datasetIndex){\n\t\t\t\tvar pointPosition = this.scale.getPointPosition(this.scale.valuesCount, this.scale.calculateCenterOffset(value));\n\t\t\t\tthis.datasets[datasetIndex].points.push(new this.PointClass({\n\t\t\t\t\tvalue : value,\n\t\t\t\t\tlabel : label,\n\t\t\t\t\tx: pointPosition.x,\n\t\t\t\t\ty: pointPosition.y,\n\t\t\t\t\tstrokeColor : this.datasets[datasetIndex].pointStrokeColor,\n\t\t\t\t\tfillColor : this.datasets[datasetIndex].pointColor\n\t\t\t\t}));\n\t\t\t},this);\n\n\t\t\tthis.scale.labels.push(label);\n\n\t\t\tthis.reflow();\n\n\t\t\tthis.update();\n\t\t},\n\t\tremoveData : function(){\n\t\t\tthis.scale.valuesCount--;\n\t\t\tthis.scale.labels.shift();\n\t\t\thelpers.each(this.datasets,function(dataset){\n\t\t\t\tdataset.points.shift();\n\t\t\t},this);\n\t\t\tthis.reflow();\n\t\t\tthis.update();\n\t\t},\n\t\tupdate : function(){\n\t\t\tthis.eachPoints(function(point){\n\t\t\t\tpoint.save();\n\t\t\t});\n\t\t\tthis.reflow();\n\t\t\tthis.render();\n\t\t},\n\t\treflow: function(){\n\t\t\thelpers.extend(this.scale, {\n\t\t\t\twidth : this.chart.width,\n\t\t\t\theight: this.chart.height,\n\t\t\t\tsize : helpers.min([this.chart.width, this.chart.height]),\n\t\t\t\txCenter: this.chart.width/2,\n\t\t\t\tyCenter: this.chart.height/2\n\t\t\t});\n\t\t\tthis.updateScaleRange(this.datasets);\n\t\t\tthis.scale.setScaleSize();\n\t\t\tthis.scale.buildYLabels();\n\t\t},\n\t\tdraw : function(ease){\n\t\t\tvar easeDecimal = ease || 1,\n\t\t\t\tctx = this.chart.ctx;\n\t\t\tthis.clear();\n\t\t\tthis.scale.draw();\n\n\t\t\thelpers.each(this.datasets,function(dataset){\n\n\t\t\t\t//Transition each point first so that the line and point drawing isn't out of sync\n\t\t\t\thelpers.each(dataset.points,function(point,index){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.transition(this.scale.getPointPosition(index, this.scale.calculateCenterOffset(point.value)), easeDecimal);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\n\n\n\t\t\t\t//Draw the line between all the points\n\t\t\t\tctx.lineWidth = this.options.datasetStrokeWidth;\n\t\t\t\tctx.strokeStyle = dataset.strokeColor;\n\t\t\t\tctx.beginPath();\n\t\t\t\thelpers.each(dataset.points,function(point,index){\n\t\t\t\t\tif (index === 0){\n\t\t\t\t\t\tctx.moveTo(point.x,point.y);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tctx.lineTo(point.x,point.y);\n\t\t\t\t\t}\n\t\t\t\t},this);\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\n\t\t\t\tctx.fillStyle = dataset.fillColor;\n\t\t\t\tctx.fill();\n\n\t\t\t\t//Now draw the points over the line\n\t\t\t\t//A little inefficient double looping, but better than the line\n\t\t\t\t//lagging behind the point positions\n\t\t\t\thelpers.each(dataset.points,function(point){\n\t\t\t\t\tif (point.hasValue()){\n\t\t\t\t\t\tpoint.draw();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t},this);\n\n\t\t}\n\n\t});\n\n\n\n\n\n}).call(this);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92ZW5kb3IvYWxtYXNhZWVkMjAxMC9hZG1pbmx0ZS9ib3dlcl9jb21wb25lbnRzL2NoYXJ0LmpzL0NoYXJ0LmpzP2IyZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsaUJBQWlCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFtQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDBCQUEwQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsUUFBUTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLHFIQUFxSCxzQ0FBc0M7O0FBRTNKLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNILG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsNEJBQTRCOztBQUU1RDtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxVQUFVLGtCQUFrQjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELDBDQUEwQztBQUM3RixLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLGFBQWE7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVULFFBQVE7O0FBRVI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzRkFBc0Y7QUFDdEY7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZUFBZTtBQUMvQixvREFBb0QsbUVBQW1FO0FBQ3ZIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwRkFBMEY7O0FBRTFGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixlQUFlO0FBQy9CLG9EQUFvRCxtRUFBbUU7QUFDdkg7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG1CQUFtQjtBQUMvQjtBQUNBO0FBQ0Esb0VBQW9FLHdCQUF3QjtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxRQUFRO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFBQTtBQUNILEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlGQUFpRixtQkFBbUIsTUFBTSxpR0FBaUcsMkJBQTJCLFVBQVU7O0FBRWhQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7O0FBRUwsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSw2QkFBNkIscUNBQXFDO0FBQ2xFLHNCQUFzQixvREFBb0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FB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Q0EsS0FBSzs7QUFFTCxJQUFJOzs7QUFHSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0YsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlGQUFpRixtQkFBbUIsTUFBTSxpR0FBaUcsMkJBQTJCLFVBQVU7QUFDaFA7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTs7QUFFSixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxFQUFFOztBQUVGLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtGQUFrRixtQkFBbUIsTUFBTSxtR0FBbUcsMkJBQTJCLFVBQVU7O0FBRW5QLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sS0FBSzs7QUFFTCxJQUFJOztBQUVKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7O0FBSUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLElBQUk7O0FBRUo7O0FBRUEsRUFBRTs7Ozs7O0FBTUYsQ0FBQyIsImZpbGUiOiI1NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ2hhcnQuanNcbiAqIGh0dHA6Ly9jaGFydGpzLm9yZy9cbiAqIFZlcnNpb246IDEuMC4yXG4gKlxuICogQ29weXJpZ2h0IDIwMTUgTmljayBEb3duaWVcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL25ubmljay9DaGFydC5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuXG4oZnVuY3Rpb24oKXtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvL0RlY2xhcmUgcm9vdCB2YXJpYWJsZSAtIHdpbmRvdyBpbiB0aGUgYnJvd3NlciwgZ2xvYmFsIG9uIHRoZSBzZXJ2ZXJcblx0dmFyIHJvb3QgPSB0aGlzLFxuXHRcdHByZXZpb3VzID0gcm9vdC5DaGFydDtcblxuXHQvL09jY3VweSB0aGUgZ2xvYmFsIHZhcmlhYmxlIG9mIENoYXJ0LCBhbmQgY3JlYXRlIGEgc2ltcGxlIGJhc2UgY2xhc3Ncblx0dmFyIENoYXJ0ID0gZnVuY3Rpb24oY29udGV4dCl7XG5cdFx0dmFyIGNoYXJ0ID0gdGhpcztcblx0XHR0aGlzLmNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuXG5cdFx0dGhpcy5jdHggPSBjb250ZXh0O1xuXG5cdFx0Ly9WYXJpYWJsZXMgZ2xvYmFsIHRvIHRoZSBjaGFydFxuXHRcdHZhciBjb21wdXRlRGltZW5zaW9uID0gZnVuY3Rpb24oZWxlbWVudCxkaW1lbnNpb24pXG5cdFx0e1xuXHRcdFx0aWYgKGVsZW1lbnRbJ29mZnNldCcrZGltZW5zaW9uXSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnRbJ29mZnNldCcrZGltZW5zaW9uXTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShkaW1lbnNpb24pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciB3aWR0aCA9IHRoaXMud2lkdGggPSBjb21wdXRlRGltZW5zaW9uKGNvbnRleHQuY2FudmFzLCdXaWR0aCcpO1xuXHRcdHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodCA9IGNvbXB1dGVEaW1lbnNpb24oY29udGV4dC5jYW52YXMsJ0hlaWdodCcpO1xuXG5cdFx0Ly8gRmlyZWZveCByZXF1aXJlcyB0aGlzIHRvIHdvcmsgY29ycmVjdGx5XG5cdFx0Y29udGV4dC5jYW52YXMud2lkdGggID0gd2lkdGg7XG5cdFx0Y29udGV4dC5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0dmFyIHdpZHRoID0gdGhpcy53aWR0aCA9IGNvbnRleHQuY2FudmFzLndpZHRoO1xuXHRcdHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodCA9IGNvbnRleHQuY2FudmFzLmhlaWdodDtcblx0XHR0aGlzLmFzcGVjdFJhdGlvID0gdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0O1xuXHRcdC8vSGlnaCBwaXhlbCBkZW5zaXR5IGRpc3BsYXlzIC0gbXVsdGlwbHkgdGhlIHNpemUgb2YgdGhlIGNhbnZhcyBoZWlnaHQvd2lkdGggYnkgdGhlIGRldmljZSBwaXhlbCByYXRpbywgdGhlbiBzY2FsZS5cblx0XHRoZWxwZXJzLnJldGluYVNjYWxlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdC8vR2xvYmFsbHkgZXhwb3NlIHRoZSBkZWZhdWx0cyB0byBhbGxvdyBmb3IgdXNlciB1cGRhdGluZy9jaGFuZ2luZ1xuXHRDaGFydC5kZWZhdWx0cyA9IHtcblx0XHRnbG9iYWw6IHtcblx0XHRcdC8vIEJvb2xlYW4gLSBXaGV0aGVyIHRvIGFuaW1hdGUgdGhlIGNoYXJ0XG5cdFx0XHRhbmltYXRpb246IHRydWUsXG5cblx0XHRcdC8vIE51bWJlciAtIE51bWJlciBvZiBhbmltYXRpb24gc3RlcHNcblx0XHRcdGFuaW1hdGlvblN0ZXBzOiA2MCxcblxuXHRcdFx0Ly8gU3RyaW5nIC0gQW5pbWF0aW9uIGVhc2luZyBlZmZlY3Rcblx0XHRcdGFuaW1hdGlvbkVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcblxuXHRcdFx0Ly8gQm9vbGVhbiAtIElmIHdlIHNob3VsZCBzaG93IHRoZSBzY2FsZSBhdCBhbGxcblx0XHRcdHNob3dTY2FsZTogdHJ1ZSxcblxuXHRcdFx0Ly8gQm9vbGVhbiAtIElmIHdlIHdhbnQgdG8gb3ZlcnJpZGUgd2l0aCBhIGhhcmQgY29kZWQgc2NhbGVcblx0XHRcdHNjYWxlT3ZlcnJpZGU6IGZhbHNlLFxuXG5cdFx0XHQvLyAqKiBSZXF1aXJlZCBpZiBzY2FsZU92ZXJyaWRlIGlzIHRydWUgKipcblx0XHRcdC8vIE51bWJlciAtIFRoZSBudW1iZXIgb2Ygc3RlcHMgaW4gYSBoYXJkIGNvZGVkIHNjYWxlXG5cdFx0XHRzY2FsZVN0ZXBzOiBudWxsLFxuXHRcdFx0Ly8gTnVtYmVyIC0gVGhlIHZhbHVlIGp1bXAgaW4gdGhlIGhhcmQgY29kZWQgc2NhbGVcblx0XHRcdHNjYWxlU3RlcFdpZHRoOiBudWxsLFxuXHRcdFx0Ly8gTnVtYmVyIC0gVGhlIHNjYWxlIHN0YXJ0aW5nIHZhbHVlXG5cdFx0XHRzY2FsZVN0YXJ0VmFsdWU6IG51bGwsXG5cblx0XHRcdC8vIFN0cmluZyAtIENvbG91ciBvZiB0aGUgc2NhbGUgbGluZVxuXHRcdFx0c2NhbGVMaW5lQ29sb3I6IFwicmdiYSgwLDAsMCwuMSlcIixcblxuXHRcdFx0Ly8gTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgdGhlIHNjYWxlIGxpbmVcblx0XHRcdHNjYWxlTGluZVdpZHRoOiAxLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0byBzaG93IGxhYmVscyBvbiB0aGUgc2NhbGVcblx0XHRcdHNjYWxlU2hvd0xhYmVsczogdHJ1ZSxcblxuXHRcdFx0Ly8gSW50ZXJwb2xhdGVkIEpTIHN0cmluZyAtIGNhbiBhY2Nlc3MgdmFsdWVcblx0XHRcdHNjYWxlTGFiZWw6IFwiPCU9dmFsdWUlPlwiLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIHN0aWNrIHRvIGludGVnZXJzLCBhbmQgbm90IHNob3cgYW55IGZsb2F0cyBldmVuIGlmIGRyYXdpbmcgc3BhY2UgaXMgdGhlcmVcblx0XHRcdHNjYWxlSW50ZWdlcnNPbmx5OiB0cnVlLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIHN0YXJ0IGF0IHplcm8sIG9yIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBkb3duIGZyb20gdGhlIGxvd2VzdCB2YWx1ZVxuXHRcdFx0c2NhbGVCZWdpbkF0WmVybzogZmFsc2UsXG5cblx0XHRcdC8vIFN0cmluZyAtIFNjYWxlIGxhYmVsIGZvbnQgZGVjbGFyYXRpb24gZm9yIHRoZSBzY2FsZSBsYWJlbFxuXHRcdFx0c2NhbGVGb250RmFtaWx5OiBcIidIZWx2ZXRpY2EgTmV1ZScsICdIZWx2ZXRpY2EnLCAnQXJpYWwnLCBzYW5zLXNlcmlmXCIsXG5cblx0XHRcdC8vIE51bWJlciAtIFNjYWxlIGxhYmVsIGZvbnQgc2l6ZSBpbiBwaXhlbHNcblx0XHRcdHNjYWxlRm9udFNpemU6IDEyLFxuXG5cdFx0XHQvLyBTdHJpbmcgLSBTY2FsZSBsYWJlbCBmb250IHdlaWdodCBzdHlsZVxuXHRcdFx0c2NhbGVGb250U3R5bGU6IFwibm9ybWFsXCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIFNjYWxlIGxhYmVsIGZvbnQgY29sb3VyXG5cdFx0XHRzY2FsZUZvbnRDb2xvcjogXCIjNjY2XCIsXG5cblx0XHRcdC8vIEJvb2xlYW4gLSB3aGV0aGVyIG9yIG5vdCB0aGUgY2hhcnQgc2hvdWxkIGJlIHJlc3BvbnNpdmUgYW5kIHJlc2l6ZSB3aGVuIHRoZSBicm93c2VyIGRvZXMuXG5cdFx0XHRyZXNwb25zaXZlOiBmYWxzZSxcblxuXHRcdFx0Ly8gQm9vbGVhbiAtIHdoZXRoZXIgdG8gbWFpbnRhaW4gdGhlIHN0YXJ0aW5nIGFzcGVjdCByYXRpbyBvciBub3Qgd2hlbiByZXNwb25zaXZlLCBpZiBzZXQgdG8gZmFsc2UsIHdpbGwgdGFrZSB1cCBlbnRpcmUgY29udGFpbmVyXG5cdFx0XHRtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRyYXcgdG9vbHRpcHMgb24gdGhlIGNhbnZhcyBvciBub3QgLSBhdHRhY2hlcyBldmVudHMgdG8gdG91Y2htb3ZlICYgbW91c2Vtb3ZlXG5cdFx0XHRzaG93VG9vbHRpcHM6IHRydWUsXG5cblx0XHRcdC8vIEJvb2xlYW4gLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZHJhdyBidWlsdC1pbiB0b29sdGlwIG9yIGNhbGwgY3VzdG9tIHRvb2x0aXAgZnVuY3Rpb25cblx0XHRcdGN1c3RvbVRvb2x0aXBzOiBmYWxzZSxcblxuXHRcdFx0Ly8gQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gYXR0YWNoIHRvb2x0aXAgZXZlbnRzXG5cdFx0XHR0b29sdGlwRXZlbnRzOiBbXCJtb3VzZW1vdmVcIiwgXCJ0b3VjaHN0YXJ0XCIsIFwidG91Y2htb3ZlXCIsIFwibW91c2VvdXRcIl0sXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgYmFja2dyb3VuZCBjb2xvdXJcblx0XHRcdHRvb2x0aXBGaWxsQ29sb3I6IFwicmdiYSgwLDAsMCwwLjgpXCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgbGFiZWwgZm9udCBkZWNsYXJhdGlvbiBmb3IgdGhlIHNjYWxlIGxhYmVsXG5cdFx0XHR0b29sdGlwRm9udEZhbWlseTogXCInSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZlwiLFxuXG5cdFx0XHQvLyBOdW1iZXIgLSBUb29sdGlwIGxhYmVsIGZvbnQgc2l6ZSBpbiBwaXhlbHNcblx0XHRcdHRvb2x0aXBGb250U2l6ZTogMTQsXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgZm9udCB3ZWlnaHQgc3R5bGVcblx0XHRcdHRvb2x0aXBGb250U3R5bGU6IFwibm9ybWFsXCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIFRvb2x0aXAgbGFiZWwgZm9udCBjb2xvdXJcblx0XHRcdHRvb2x0aXBGb250Q29sb3I6IFwiI2ZmZlwiLFxuXG5cdFx0XHQvLyBTdHJpbmcgLSBUb29sdGlwIHRpdGxlIGZvbnQgZGVjbGFyYXRpb24gZm9yIHRoZSBzY2FsZSBsYWJlbFxuXHRcdFx0dG9vbHRpcFRpdGxlRm9udEZhbWlseTogXCInSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZlwiLFxuXG5cdFx0XHQvLyBOdW1iZXIgLSBUb29sdGlwIHRpdGxlIGZvbnQgc2l6ZSBpbiBwaXhlbHNcblx0XHRcdHRvb2x0aXBUaXRsZUZvbnRTaXplOiAxNCxcblxuXHRcdFx0Ly8gU3RyaW5nIC0gVG9vbHRpcCB0aXRsZSBmb250IHdlaWdodCBzdHlsZVxuXHRcdFx0dG9vbHRpcFRpdGxlRm9udFN0eWxlOiBcImJvbGRcIixcblxuXHRcdFx0Ly8gU3RyaW5nIC0gVG9vbHRpcCB0aXRsZSBmb250IGNvbG91clxuXHRcdFx0dG9vbHRpcFRpdGxlRm9udENvbG9yOiBcIiNmZmZcIixcblxuXHRcdFx0Ly8gTnVtYmVyIC0gcGl4ZWwgd2lkdGggb2YgcGFkZGluZyBhcm91bmQgdG9vbHRpcCB0ZXh0XG5cdFx0XHR0b29sdGlwWVBhZGRpbmc6IDYsXG5cblx0XHRcdC8vIE51bWJlciAtIHBpeGVsIHdpZHRoIG9mIHBhZGRpbmcgYXJvdW5kIHRvb2x0aXAgdGV4dFxuXHRcdFx0dG9vbHRpcFhQYWRkaW5nOiA2LFxuXG5cdFx0XHQvLyBOdW1iZXIgLSBTaXplIG9mIHRoZSBjYXJldCBvbiB0aGUgdG9vbHRpcFxuXHRcdFx0dG9vbHRpcENhcmV0U2l6ZTogOCxcblxuXHRcdFx0Ly8gTnVtYmVyIC0gUGl4ZWwgcmFkaXVzIG9mIHRoZSB0b29sdGlwIGJvcmRlclxuXHRcdFx0dG9vbHRpcENvcm5lclJhZGl1czogNixcblxuXHRcdFx0Ly8gTnVtYmVyIC0gUGl4ZWwgb2Zmc2V0IGZyb20gcG9pbnQgeCB0byB0b29sdGlwIGVkZ2Vcblx0XHRcdHRvb2x0aXBYT2Zmc2V0OiAxMCxcblxuXHRcdFx0Ly8gU3RyaW5nIC0gVGVtcGxhdGUgc3RyaW5nIGZvciBzaW5nbGUgdG9vbHRpcHNcblx0XHRcdHRvb2x0aXBUZW1wbGF0ZTogXCI8JWlmIChsYWJlbCl7JT48JT1sYWJlbCU+OiA8JX0lPjwlPSB2YWx1ZSAlPlwiLFxuXG5cdFx0XHQvLyBTdHJpbmcgLSBUZW1wbGF0ZSBzdHJpbmcgZm9yIHNpbmdsZSB0b29sdGlwc1xuXHRcdFx0bXVsdGlUb29sdGlwVGVtcGxhdGU6IFwiPCU9IHZhbHVlICU+XCIsXG5cblx0XHRcdC8vIFN0cmluZyAtIENvbG91ciBiZWhpbmQgdGhlIGxlZ2VuZCBjb2xvdXIgYmxvY2tcblx0XHRcdG11bHRpVG9vbHRpcEtleUJhY2tncm91bmQ6ICcjZmZmJyxcblxuXHRcdFx0Ly8gRnVuY3Rpb24gLSBXaWxsIGZpcmUgb24gYW5pbWF0aW9uIHByb2dyZXNzaW9uLlxuXHRcdFx0b25BbmltYXRpb25Qcm9ncmVzczogZnVuY3Rpb24oKXt9LFxuXG5cdFx0XHQvLyBGdW5jdGlvbiAtIFdpbGwgZmlyZSBvbiBhbmltYXRpb24gY29tcGxldGlvbi5cblx0XHRcdG9uQW5pbWF0aW9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fVxuXG5cdFx0fVxuXHR9O1xuXG5cdC8vQ3JlYXRlIGEgZGljdGlvbmFyeSBvZiBjaGFydCB0eXBlcywgdG8gYWxsb3cgZm9yIGV4dGVuc2lvbiBvZiBleGlzdGluZyB0eXBlc1xuXHRDaGFydC50eXBlcyA9IHt9O1xuXG5cdC8vR2xvYmFsIENoYXJ0IGhlbHBlcnMgb2JqZWN0IGZvciB1dGlsaXR5IG1ldGhvZHMgYW5kIGNsYXNzZXNcblx0dmFyIGhlbHBlcnMgPSBDaGFydC5oZWxwZXJzID0ge307XG5cblx0XHQvLy0tIEJhc2ljIGpzIHV0aWxpdHkgbWV0aG9kc1xuXHR2YXIgZWFjaCA9IGhlbHBlcnMuZWFjaCA9IGZ1bmN0aW9uKGxvb3BhYmxlLGNhbGxiYWNrLHNlbGYpe1xuXHRcdFx0dmFyIGFkZGl0aW9uYWxBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBudWxsIG9yIHVuZGVmaW5lZCBmaXJzdGx5LlxuXHRcdFx0aWYgKGxvb3BhYmxlKXtcblx0XHRcdFx0aWYgKGxvb3BhYmxlLmxlbmd0aCA9PT0gK2xvb3BhYmxlLmxlbmd0aCl7XG5cdFx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdFx0Zm9yIChpPTA7IGk8bG9vcGFibGUubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoc2VsZixbbG9vcGFibGVbaV0sIGldLmNvbmNhdChhZGRpdGlvbmFsQXJncykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdGZvciAodmFyIGl0ZW0gaW4gbG9vcGFibGUpe1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoc2VsZixbbG9vcGFibGVbaXRlbV0saXRlbV0uY29uY2F0KGFkZGl0aW9uYWxBcmdzKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjbG9uZSA9IGhlbHBlcnMuY2xvbmUgPSBmdW5jdGlvbihvYmope1xuXHRcdFx0dmFyIG9iakNsb25lID0ge307XG5cdFx0XHRlYWNoKG9iaixmdW5jdGlvbih2YWx1ZSxrZXkpe1xuXHRcdFx0XHRpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIG9iakNsb25lW2tleV0gPSB2YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG9iakNsb25lO1xuXHRcdH0sXG5cdFx0ZXh0ZW5kID0gaGVscGVycy5leHRlbmQgPSBmdW5jdGlvbihiYXNlKXtcblx0XHRcdGVhY2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLCBmdW5jdGlvbihleHRlbnNpb25PYmplY3QpIHtcblx0XHRcdFx0ZWFjaChleHRlbnNpb25PYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5KXtcblx0XHRcdFx0XHRpZiAoZXh0ZW5zaW9uT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIGJhc2Vba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fSxcblx0XHRtZXJnZSA9IGhlbHBlcnMubWVyZ2UgPSBmdW5jdGlvbihiYXNlLG1hc3Rlcil7XG5cdFx0XHQvL01lcmdlIHByb3BlcnRpZXMgaW4gbGVmdCBvYmplY3Qgb3ZlciB0byBhIHNoYWxsb3cgY2xvbmUgb2Ygb2JqZWN0IHJpZ2h0LlxuXHRcdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7XG5cdFx0XHRhcmdzLnVuc2hpZnQoe30pO1xuXHRcdFx0cmV0dXJuIGV4dGVuZC5hcHBseShudWxsLCBhcmdzKTtcblx0XHR9LFxuXHRcdGluZGV4T2YgPSBoZWxwZXJzLmluZGV4T2YgPSBmdW5jdGlvbihhcnJheVRvU2VhcmNoLCBpdGVtKXtcblx0XHRcdGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuXHRcdFx0XHRyZXR1cm4gYXJyYXlUb1NlYXJjaC5pbmRleE9mKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheVRvU2VhcmNoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGFycmF5VG9TZWFyY2hbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHdoZXJlID0gaGVscGVycy53aGVyZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGZpbHRlckNhbGxiYWNrKXtcblx0XHRcdHZhciBmaWx0ZXJlZCA9IFtdO1xuXG5cdFx0XHRoZWxwZXJzLmVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRcdGlmIChmaWx0ZXJDYWxsYmFjayhpdGVtKSl7XG5cdFx0XHRcdFx0ZmlsdGVyZWQucHVzaChpdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBmaWx0ZXJlZDtcblx0XHR9LFxuXHRcdGZpbmROZXh0V2hlcmUgPSBoZWxwZXJzLmZpbmROZXh0V2hlcmUgPSBmdW5jdGlvbihhcnJheVRvU2VhcmNoLCBmaWx0ZXJDYWxsYmFjaywgc3RhcnRJbmRleCl7XG5cdFx0XHQvLyBEZWZhdWx0IHRvIHN0YXJ0IG9mIHRoZSBhcnJheVxuXHRcdFx0aWYgKCFzdGFydEluZGV4KXtcblx0XHRcdFx0c3RhcnRJbmRleCA9IC0xO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggKyAxOyBpIDwgYXJyYXlUb1NlYXJjaC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgY3VycmVudEl0ZW0gPSBhcnJheVRvU2VhcmNoW2ldO1xuXHRcdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKXtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudEl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGZpbmRQcmV2aW91c1doZXJlID0gaGVscGVycy5maW5kUHJldmlvdXNXaGVyZSA9IGZ1bmN0aW9uKGFycmF5VG9TZWFyY2gsIGZpbHRlckNhbGxiYWNrLCBzdGFydEluZGV4KXtcblx0XHRcdC8vIERlZmF1bHQgdG8gZW5kIG9mIHRoZSBhcnJheVxuXHRcdFx0aWYgKCFzdGFydEluZGV4KXtcblx0XHRcdFx0c3RhcnRJbmRleCA9IGFycmF5VG9TZWFyY2gubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHR2YXIgY3VycmVudEl0ZW0gPSBhcnJheVRvU2VhcmNoW2ldO1xuXHRcdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKXtcblx0XHRcdFx0XHRyZXR1cm4gY3VycmVudEl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGluaGVyaXRzID0gaGVscGVycy5pbmhlcml0cyA9IGZ1bmN0aW9uKGV4dGVuc2lvbnMpe1xuXHRcdFx0Ly9CYXNpYyBqYXZhc2NyaXB0IGluaGVyaXRhbmNlIGJhc2VkIG9uIHRoZSBtb2RlbCBjcmVhdGVkIGluIEJhY2tib25lLmpzXG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcztcblx0XHRcdHZhciBDaGFydEVsZW1lbnQgPSAoZXh0ZW5zaW9ucyAmJiBleHRlbnNpb25zLmhhc093blByb3BlcnR5KFwiY29uc3RydWN0b3JcIikpID8gZXh0ZW5zaW9ucy5jb25zdHJ1Y3RvciA6IGZ1bmN0aW9uKCl7IHJldHVybiBwYXJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcblxuXHRcdFx0dmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBDaGFydEVsZW1lbnQ7fTtcblx0XHRcdFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuXHRcdFx0Q2hhcnRFbGVtZW50LnByb3RvdHlwZSA9IG5ldyBTdXJyb2dhdGUoKTtcblxuXHRcdFx0Q2hhcnRFbGVtZW50LmV4dGVuZCA9IGluaGVyaXRzO1xuXG5cdFx0XHRpZiAoZXh0ZW5zaW9ucykgZXh0ZW5kKENoYXJ0RWxlbWVudC5wcm90b3R5cGUsIGV4dGVuc2lvbnMpO1xuXG5cdFx0XHRDaGFydEVsZW1lbnQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTtcblxuXHRcdFx0cmV0dXJuIENoYXJ0RWxlbWVudDtcblx0XHR9LFxuXHRcdG5vb3AgPSBoZWxwZXJzLm5vb3AgPSBmdW5jdGlvbigpe30sXG5cdFx0dWlkID0gaGVscGVycy51aWQgPSAoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBpZD0wO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBcImNoYXJ0LVwiICsgaWQrKztcblx0XHRcdH07XG5cdFx0fSkoKSxcblx0XHR3YXJuID0gaGVscGVycy53YXJuID0gZnVuY3Rpb24oc3RyKXtcblx0XHRcdC8vTWV0aG9kIGZvciB3YXJuaW5nIG9mIGVycm9yc1xuXHRcdFx0aWYgKHdpbmRvdy5jb25zb2xlICYmIHR5cGVvZiB3aW5kb3cuY29uc29sZS53YXJuID09IFwiZnVuY3Rpb25cIikgY29uc29sZS53YXJuKHN0cik7XG5cdFx0fSxcblx0XHRhbWQgPSBoZWxwZXJzLmFtZCA9ICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCksXG5cdFx0Ly8tLSBNYXRoIG1ldGhvZHNcblx0XHRpc051bWJlciA9IGhlbHBlcnMuaXNOdW1iZXIgPSBmdW5jdGlvbihuKXtcblx0XHRcdHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG5cdFx0fSxcblx0XHRtYXggPSBoZWxwZXJzLm1heCA9IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRcdHJldHVybiBNYXRoLm1heC5hcHBseSggTWF0aCwgYXJyYXkgKTtcblx0XHR9LFxuXHRcdG1pbiA9IGhlbHBlcnMubWluID0gZnVuY3Rpb24oYXJyYXkpe1xuXHRcdFx0cmV0dXJuIE1hdGgubWluLmFwcGx5KCBNYXRoLCBhcnJheSApO1xuXHRcdH0sXG5cdFx0Y2FwID0gaGVscGVycy5jYXAgPSBmdW5jdGlvbih2YWx1ZVRvQ2FwLG1heFZhbHVlLG1pblZhbHVlKXtcblx0XHRcdGlmKGlzTnVtYmVyKG1heFZhbHVlKSkge1xuXHRcdFx0XHRpZiggdmFsdWVUb0NhcCA+IG1heFZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXhWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihpc051bWJlcihtaW5WYWx1ZSkpe1xuXHRcdFx0XHRpZiAoIHZhbHVlVG9DYXAgPCBtaW5WYWx1ZSApe1xuXHRcdFx0XHRcdHJldHVybiBtaW5WYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlVG9DYXA7XG5cdFx0fSxcblx0XHRnZXREZWNpbWFsUGxhY2VzID0gaGVscGVycy5nZXREZWNpbWFsUGxhY2VzID0gZnVuY3Rpb24obnVtKXtcblx0XHRcdGlmIChudW0lMSE9PTAgJiYgaXNOdW1iZXIobnVtKSl7XG5cdFx0XHRcdHJldHVybiBudW0udG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0ubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dG9SYWRpYW5zID0gaGVscGVycy5yYWRpYW5zID0gZnVuY3Rpb24oZGVncmVlcyl7XG5cdFx0XHRyZXR1cm4gZGVncmVlcyAqIChNYXRoLlBJLzE4MCk7XG5cdFx0fSxcblx0XHQvLyBHZXRzIHRoZSBhbmdsZSBmcm9tIHZlcnRpY2FsIHVwcmlnaHQgdG8gdGhlIHBvaW50IGFib3V0IGEgY2VudHJlLlxuXHRcdGdldEFuZ2xlRnJvbVBvaW50ID0gaGVscGVycy5nZXRBbmdsZUZyb21Qb2ludCA9IGZ1bmN0aW9uKGNlbnRyZVBvaW50LCBhbmdsZVBvaW50KXtcblx0XHRcdHZhciBkaXN0YW5jZUZyb21YQ2VudGVyID0gYW5nbGVQb2ludC54IC0gY2VudHJlUG9pbnQueCxcblx0XHRcdFx0ZGlzdGFuY2VGcm9tWUNlbnRlciA9IGFuZ2xlUG9pbnQueSAtIGNlbnRyZVBvaW50LnksXG5cdFx0XHRcdHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlciA9IE1hdGguc3FydCggZGlzdGFuY2VGcm9tWENlbnRlciAqIGRpc3RhbmNlRnJvbVhDZW50ZXIgKyBkaXN0YW5jZUZyb21ZQ2VudGVyICogZGlzdGFuY2VGcm9tWUNlbnRlcik7XG5cblxuXHRcdFx0dmFyIGFuZ2xlID0gTWF0aC5QSSAqIDIgKyBNYXRoLmF0YW4yKGRpc3RhbmNlRnJvbVlDZW50ZXIsIGRpc3RhbmNlRnJvbVhDZW50ZXIpO1xuXG5cdFx0XHQvL0lmIHRoZSBzZWdtZW50IGlzIGluIHRoZSB0b3AgbGVmdCBxdWFkcmFudCwgd2UgbmVlZCB0byBhZGQgYW5vdGhlciByb3RhdGlvbiB0byB0aGUgYW5nbGVcblx0XHRcdGlmIChkaXN0YW5jZUZyb21YQ2VudGVyIDwgMCAmJiBkaXN0YW5jZUZyb21ZQ2VudGVyIDwgMCl7XG5cdFx0XHRcdGFuZ2xlICs9IE1hdGguUEkqMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0YW5nbGU6IGFuZ2xlLFxuXHRcdFx0XHRkaXN0YW5jZTogcmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YWxpYXNQaXhlbCA9IGhlbHBlcnMuYWxpYXNQaXhlbCA9IGZ1bmN0aW9uKHBpeGVsV2lkdGgpe1xuXHRcdFx0cmV0dXJuIChwaXhlbFdpZHRoICUgMiA9PT0gMCkgPyAwIDogMC41O1xuXHRcdH0sXG5cdFx0c3BsaW5lQ3VydmUgPSBoZWxwZXJzLnNwbGluZUN1cnZlID0gZnVuY3Rpb24oRmlyc3RQb2ludCxNaWRkbGVQb2ludCxBZnRlclBvaW50LHQpe1xuXHRcdFx0Ly9Qcm9wcyB0byBSb2IgU3BlbmNlciBhdCBzY2FsZWQgaW5ub3ZhdGlvbiBmb3IgaGlzIHBvc3Qgb24gc3BsaW5pbmcgYmV0d2VlbiBwb2ludHNcblx0XHRcdC8vaHR0cDovL3NjYWxlZGlubm92YXRpb24uY29tL2FuYWx5dGljcy9zcGxpbmVzL2Fib3V0U3BsaW5lcy5odG1sXG5cdFx0XHR2YXIgZDAxPU1hdGguc3FydChNYXRoLnBvdyhNaWRkbGVQb2ludC54LUZpcnN0UG9pbnQueCwyKStNYXRoLnBvdyhNaWRkbGVQb2ludC55LUZpcnN0UG9pbnQueSwyKSksXG5cdFx0XHRcdGQxMj1NYXRoLnNxcnQoTWF0aC5wb3coQWZ0ZXJQb2ludC54LU1pZGRsZVBvaW50LngsMikrTWF0aC5wb3coQWZ0ZXJQb2ludC55LU1pZGRsZVBvaW50LnksMikpLFxuXHRcdFx0XHRmYT10KmQwMS8oZDAxK2QxMiksLy8gc2NhbGluZyBmYWN0b3IgZm9yIHRyaWFuZ2xlIFRhXG5cdFx0XHRcdGZiPXQqZDEyLyhkMDErZDEyKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlubmVyIDoge1xuXHRcdFx0XHRcdHggOiBNaWRkbGVQb2ludC54LWZhKihBZnRlclBvaW50LngtRmlyc3RQb2ludC54KSxcblx0XHRcdFx0XHR5IDogTWlkZGxlUG9pbnQueS1mYSooQWZ0ZXJQb2ludC55LUZpcnN0UG9pbnQueSlcblx0XHRcdFx0fSxcblx0XHRcdFx0b3V0ZXIgOiB7XG5cdFx0XHRcdFx0eDogTWlkZGxlUG9pbnQueCtmYiooQWZ0ZXJQb2ludC54LUZpcnN0UG9pbnQueCksXG5cdFx0XHRcdFx0eSA6IE1pZGRsZVBvaW50LnkrZmIqKEFmdGVyUG9pbnQueS1GaXJzdFBvaW50LnkpXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblx0XHRjYWxjdWxhdGVPcmRlck9mTWFnbml0dWRlID0gaGVscGVycy5jYWxjdWxhdGVPcmRlck9mTWFnbml0dWRlID0gZnVuY3Rpb24odmFsKXtcblx0XHRcdHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMTApO1xuXHRcdH0sXG5cdFx0Y2FsY3VsYXRlU2NhbGVSYW5nZSA9IGhlbHBlcnMuY2FsY3VsYXRlU2NhbGVSYW5nZSA9IGZ1bmN0aW9uKHZhbHVlc0FycmF5LCBkcmF3aW5nU2l6ZSwgdGV4dFNpemUsIHN0YXJ0RnJvbVplcm8sIGludGVnZXJzT25seSl7XG5cblx0XHRcdC8vU2V0IGEgbWluaW11bSBzdGVwIG9mIHR3byAtIGEgcG9pbnQgYXQgdGhlIHRvcCBvZiB0aGUgZ3JhcGgsIGFuZCBhIHBvaW50IGF0IHRoZSBiYXNlXG5cdFx0XHR2YXIgbWluU3RlcHMgPSAyLFxuXHRcdFx0XHRtYXhTdGVwcyA9IE1hdGguZmxvb3IoZHJhd2luZ1NpemUvKHRleHRTaXplICogMS41KSksXG5cdFx0XHRcdHNraXBGaXR0aW5nID0gKG1pblN0ZXBzID49IG1heFN0ZXBzKTtcblxuXHRcdFx0dmFyIG1heFZhbHVlID0gbWF4KHZhbHVlc0FycmF5KSxcblx0XHRcdFx0bWluVmFsdWUgPSBtaW4odmFsdWVzQXJyYXkpO1xuXG5cdFx0XHQvLyBXZSBuZWVkIHNvbWUgZGVncmVlIG9mIHNlcGVyYXRpb24gaGVyZSB0byBjYWxjdWxhdGUgdGhlIHNjYWxlcyBpZiBhbGwgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWVcblx0XHRcdC8vIEFkZGluZy9taW51c2luZyAwLjUgd2lsbCBnaXZlIHVzIGEgcmFuZ2Ugb2YgMS5cblx0XHRcdGlmIChtYXhWYWx1ZSA9PT0gbWluVmFsdWUpe1xuXHRcdFx0XHRtYXhWYWx1ZSArPSAwLjU7XG5cdFx0XHRcdC8vIFNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIGEgZ3JhcGggd2l0aCBhIG5lZ2F0aXZlIHN0YXJ0IHZhbHVlIGlmIHdlJ3ZlIHNhaWQgYWx3YXlzIHN0YXJ0IGZyb20gemVyb1xuXHRcdFx0XHRpZiAobWluVmFsdWUgPj0gMC41ICYmICFzdGFydEZyb21aZXJvKXtcblx0XHRcdFx0XHRtaW5WYWx1ZSAtPSAwLjU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHQvLyBNYWtlIHVwIGEgd2hvbGUgbnVtYmVyIGFib3ZlIHRoZSB2YWx1ZXNcblx0XHRcdFx0XHRtYXhWYWx1ZSArPSAwLjU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyXHR2YWx1ZVJhbmdlID0gTWF0aC5hYnMobWF4VmFsdWUgLSBtaW5WYWx1ZSksXG5cdFx0XHRcdHJhbmdlT3JkZXJPZk1hZ25pdHVkZSA9IGNhbGN1bGF0ZU9yZGVyT2ZNYWduaXR1ZGUodmFsdWVSYW5nZSksXG5cdFx0XHRcdGdyYXBoTWF4ID0gTWF0aC5jZWlsKG1heFZhbHVlIC8gKDEgKiBNYXRoLnBvdygxMCwgcmFuZ2VPcmRlck9mTWFnbml0dWRlKSkpICogTWF0aC5wb3coMTAsIHJhbmdlT3JkZXJPZk1hZ25pdHVkZSksXG5cdFx0XHRcdGdyYXBoTWluID0gKHN0YXJ0RnJvbVplcm8pID8gMCA6IE1hdGguZmxvb3IobWluVmFsdWUgLyAoMSAqIE1hdGgucG93KDEwLCByYW5nZU9yZGVyT2ZNYWduaXR1ZGUpKSkgKiBNYXRoLnBvdygxMCwgcmFuZ2VPcmRlck9mTWFnbml0dWRlKSxcblx0XHRcdFx0Z3JhcGhSYW5nZSA9IGdyYXBoTWF4IC0gZ3JhcGhNaW4sXG5cdFx0XHRcdHN0ZXBWYWx1ZSA9IE1hdGgucG93KDEwLCByYW5nZU9yZGVyT2ZNYWduaXR1ZGUpLFxuXHRcdFx0XHRudW1iZXJPZlN0ZXBzID0gTWF0aC5yb3VuZChncmFwaFJhbmdlIC8gc3RlcFZhbHVlKTtcblxuXHRcdFx0Ly9JZiB3ZSBoYXZlIG1vcmUgc3BhY2Ugb24gdGhlIGdyYXBoIHdlJ2xsIHVzZSBpdCB0byBnaXZlIG1vcmUgZGVmaW5pdGlvbiB0byB0aGUgZGF0YVxuXHRcdFx0d2hpbGUoKG51bWJlck9mU3RlcHMgPiBtYXhTdGVwcyB8fCAobnVtYmVyT2ZTdGVwcyAqIDIpIDwgbWF4U3RlcHMpICYmICFza2lwRml0dGluZykge1xuXHRcdFx0XHRpZihudW1iZXJPZlN0ZXBzID4gbWF4U3RlcHMpe1xuXHRcdFx0XHRcdHN0ZXBWYWx1ZSAqPTI7XG5cdFx0XHRcdFx0bnVtYmVyT2ZTdGVwcyA9IE1hdGgucm91bmQoZ3JhcGhSYW5nZS9zdGVwVmFsdWUpO1xuXHRcdFx0XHRcdC8vIERvbid0IGV2ZXIgZGVhbCB3aXRoIGEgZGVjaW1hbCBudW1iZXIgb2Ygc3RlcHMgLSBjYW5jZWwgZml0dGluZyBhbmQganVzdCB1c2UgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHN0ZXBzLlxuXHRcdFx0XHRcdGlmIChudW1iZXJPZlN0ZXBzICUgMSAhPT0gMCl7XG5cdFx0XHRcdFx0XHRza2lwRml0dGluZyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vV2UgY2FuIGZpdCBpbiBkb3VibGUgdGhlIGFtb3VudCBvZiBzY2FsZSBwb2ludHMgb24gdGhlIHNjYWxlXG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0Ly9JZiB1c2VyIGhhcyBkZWNsYXJlZCBpbnRzIG9ubHksIGFuZCB0aGUgc3RlcCB2YWx1ZSBpc24ndCBhIGRlY2ltYWxcblx0XHRcdFx0XHRpZiAoaW50ZWdlcnNPbmx5ICYmIHJhbmdlT3JkZXJPZk1hZ25pdHVkZSA+PSAwKXtcblx0XHRcdFx0XHRcdC8vSWYgdGhlIHVzZXIgaGFzIHNhaWQgaW50ZWdlcnMgb25seSwgd2UgbmVlZCB0byBjaGVjayB0aGF0IG1ha2luZyB0aGUgc2NhbGUgbW9yZSBncmFudWxhciB3b3VsZG4ndCBtYWtlIGl0IGEgZmxvYXRcblx0XHRcdFx0XHRcdGlmKHN0ZXBWYWx1ZS8yICUgMSA9PT0gMCl7XG5cdFx0XHRcdFx0XHRcdHN0ZXBWYWx1ZSAvPTI7XG5cdFx0XHRcdFx0XHRcdG51bWJlck9mU3RlcHMgPSBNYXRoLnJvdW5kKGdyYXBoUmFuZ2Uvc3RlcFZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vSWYgaXQgd291bGQgbWFrZSBpdCBhIGZsb2F0IGJyZWFrIG91dCBvZiB0aGUgbG9vcFxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vSWYgdGhlIHNjYWxlIGRvZXNuJ3QgaGF2ZSB0byBiZSBhbiBpbnQsIG1ha2UgdGhlIHNjYWxlIG1vcmUgZ3JhbnVsYXIgYW55d2F5LlxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRzdGVwVmFsdWUgLz0yO1xuXHRcdFx0XHRcdFx0bnVtYmVyT2ZTdGVwcyA9IE1hdGgucm91bmQoZ3JhcGhSYW5nZS9zdGVwVmFsdWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChza2lwRml0dGluZyl7XG5cdFx0XHRcdG51bWJlck9mU3RlcHMgPSBtaW5TdGVwcztcblx0XHRcdFx0c3RlcFZhbHVlID0gZ3JhcGhSYW5nZSAvIG51bWJlck9mU3RlcHM7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0ZXBzIDogbnVtYmVyT2ZTdGVwcyxcblx0XHRcdFx0c3RlcFZhbHVlIDogc3RlcFZhbHVlLFxuXHRcdFx0XHRtaW4gOiBncmFwaE1pbixcblx0XHRcdFx0bWF4XHQ6IGdyYXBoTWluICsgKG51bWJlck9mU3RlcHMgKiBzdGVwVmFsdWUpXG5cdFx0XHR9O1xuXG5cdFx0fSxcblx0XHQvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdFx0Ly8gQmxvd3MgdXAganNoaW50IGVycm9ycyBiYXNlZCBvbiB0aGUgbmV3IEZ1bmN0aW9uIGNvbnN0cnVjdG9yXG5cdFx0Ly9UZW1wbGF0aW5nIG1ldGhvZHNcblx0XHQvL0phdmFzY3JpcHQgbWljcm8gdGVtcGxhdGluZyBieSBKb2huIFJlc2lnIC0gc291cmNlIGF0IGh0dHA6Ly9lam9obi5vcmcvYmxvZy9qYXZhc2NyaXB0LW1pY3JvLXRlbXBsYXRpbmcvXG5cdFx0dGVtcGxhdGUgPSBoZWxwZXJzLnRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGVTdHJpbmcsIHZhbHVlc09iamVjdCl7XG5cblx0XHRcdC8vIElmIHRlbXBsYXRlU3RyaW5nIGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHN0cmluZy10ZW1wbGF0ZSAtIGNhbGwgdGhlIGZ1bmN0aW9uIGZvciB2YWx1ZXNPYmplY3RcblxuXHRcdFx0aWYodGVtcGxhdGVTdHJpbmcgaW5zdGFuY2VvZiBGdW5jdGlvbil7XG5cdFx0XHQgXHRyZXR1cm4gdGVtcGxhdGVTdHJpbmcodmFsdWVzT2JqZWN0KTtcblx0XHQgXHR9XG5cblx0XHRcdHZhciBjYWNoZSA9IHt9O1xuXHRcdFx0ZnVuY3Rpb24gdG1wbChzdHIsIGRhdGEpe1xuXHRcdFx0XHQvLyBGaWd1cmUgb3V0IGlmIHdlJ3JlIGdldHRpbmcgYSB0ZW1wbGF0ZSwgb3IgaWYgd2UgbmVlZCB0b1xuXHRcdFx0XHQvLyBsb2FkIHRoZSB0ZW1wbGF0ZSAtIGFuZCBiZSBzdXJlIHRvIGNhY2hlIHRoZSByZXN1bHQuXG5cdFx0XHRcdHZhciBmbiA9ICEvXFxXLy50ZXN0KHN0cikgP1xuXHRcdFx0XHRjYWNoZVtzdHJdID0gY2FjaGVbc3RyXSA6XG5cblx0XHRcdFx0Ly8gR2VuZXJhdGUgYSByZXVzYWJsZSBmdW5jdGlvbiB0aGF0IHdpbGwgc2VydmUgYXMgYSB0ZW1wbGF0ZVxuXHRcdFx0XHQvLyBnZW5lcmF0b3IgKGFuZCB3aGljaCB3aWxsIGJlIGNhY2hlZCkuXG5cdFx0XHRcdG5ldyBGdW5jdGlvbihcIm9ialwiLFxuXHRcdFx0XHRcdFwidmFyIHA9W10scHJpbnQ9ZnVuY3Rpb24oKXtwLnB1c2guYXBwbHkocCxhcmd1bWVudHMpO307XCIgK1xuXG5cdFx0XHRcdFx0Ly8gSW50cm9kdWNlIHRoZSBkYXRhIGFzIGxvY2FsIHZhcmlhYmxlcyB1c2luZyB3aXRoKCl7fVxuXHRcdFx0XHRcdFwid2l0aChvYmope3AucHVzaCgnXCIgK1xuXG5cdFx0XHRcdFx0Ly8gQ29udmVydCB0aGUgdGVtcGxhdGUgaW50byBwdXJlIEphdmFTY3JpcHRcblx0XHRcdFx0XHRzdHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bXFxyXFx0XFxuXS9nLCBcIiBcIilcblx0XHRcdFx0XHRcdC5zcGxpdChcIjwlXCIpLmpvaW4oXCJcXHRcIilcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC8oKF58JT4pW15cXHRdKiknL2csIFwiJDFcXHJcIilcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHQ9KC4qPyklPi9nLCBcIicsJDEsJ1wiKVxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiXFx0XCIpLmpvaW4oXCInKTtcIilcblx0XHRcdFx0XHRcdC5zcGxpdChcIiU+XCIpLmpvaW4oXCJwLnB1c2goJ1wiKVxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiXFxyXCIpLmpvaW4oXCJcXFxcJ1wiKSArXG5cdFx0XHRcdFx0XCInKTt9cmV0dXJuIHAuam9pbignJyk7XCJcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBQcm92aWRlIHNvbWUgYmFzaWMgY3VycnlpbmcgdG8gdGhlIHVzZXJcblx0XHRcdFx0cmV0dXJuIGRhdGEgPyBmbiggZGF0YSApIDogZm47XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdG1wbCh0ZW1wbGF0ZVN0cmluZyx2YWx1ZXNPYmplY3QpO1xuXHRcdH0sXG5cdFx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0XHRnZW5lcmF0ZUxhYmVscyA9IGhlbHBlcnMuZ2VuZXJhdGVMYWJlbHMgPSBmdW5jdGlvbih0ZW1wbGF0ZVN0cmluZyxudW1iZXJPZlN0ZXBzLGdyYXBoTWluLHN0ZXBWYWx1ZSl7XG5cdFx0XHR2YXIgbGFiZWxzQXJyYXkgPSBuZXcgQXJyYXkobnVtYmVyT2ZTdGVwcyk7XG5cdFx0XHRpZiAobGFiZWxUZW1wbGF0ZVN0cmluZyl7XG5cdFx0XHRcdGVhY2gobGFiZWxzQXJyYXksZnVuY3Rpb24odmFsLGluZGV4KXtcblx0XHRcdFx0XHRsYWJlbHNBcnJheVtpbmRleF0gPSB0ZW1wbGF0ZSh0ZW1wbGF0ZVN0cmluZyx7dmFsdWU6IChncmFwaE1pbiArIChzdGVwVmFsdWUqKGluZGV4KzEpKSl9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGFiZWxzQXJyYXk7XG5cdFx0fSxcblx0XHQvLy0tQW5pbWF0aW9uIG1ldGhvZHNcblx0XHQvL0Vhc2luZyBmdW5jdGlvbnMgYWRhcHRlZCBmcm9tIFJvYmVydCBQZW5uZXIncyBlYXNpbmcgZXF1YXRpb25zXG5cdFx0Ly9odHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nL1xuXHRcdGVhc2luZ0VmZmVjdHMgPSBoZWxwZXJzLmVhc2luZ0VmZmVjdHMgPSB7XG5cdFx0XHRsaW5lYXI6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiB0O1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJblF1YWQ6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiB0ICogdDtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIC0xICogdCAqICh0IC0gMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKCh0IC89IDEgLyAyKSA8IDEpIHJldHVybiAxIC8gMiAqIHQgKiB0O1xuXHRcdFx0XHRyZXR1cm4gLTEgLyAyICogKCgtLXQpICogKHQgLSAyKSAtIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbkN1YmljOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gdCAqIHQgKiB0O1xuXHRcdFx0fSxcblx0XHRcdGVhc2VPdXRDdWJpYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiAoKHQgPSB0IC8gMSAtIDEpICogdCAqIHQgKyAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5PdXRDdWJpYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKCh0IC89IDEgLyAyKSA8IDEpIHJldHVybiAxIC8gMiAqIHQgKiB0ICogdDtcblx0XHRcdFx0cmV0dXJuIDEgLyAyICogKCh0IC09IDIpICogdCAqIHQgKyAyKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5RdWFydDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIHQgKiB0ICogdCAqIHQ7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZU91dFF1YXJ0OiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gLTEgKiAoKHQgPSB0IC8gMSAtIDEpICogdCAqIHQgKiB0IC0gMSk7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdGlmICgodCAvPSAxIC8gMikgPCAxKSByZXR1cm4gMSAvIDIgKiB0ICogdCAqIHQgKiB0O1xuXHRcdFx0XHRyZXR1cm4gLTEgLyAyICogKCh0IC09IDIpICogdCAqIHQgKiB0IC0gMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiAxICogKHQgLz0gMSkgKiB0ICogdCAqIHQgKiB0O1xuXHRcdFx0fSxcblx0XHRcdGVhc2VPdXRRdWludDogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiAoKHQgPSB0IC8gMSAtIDEpICogdCAqIHQgKiB0ICogdCArIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRpZiAoKHQgLz0gMSAvIDIpIDwgMSkgcmV0dXJuIDEgLyAyICogdCAqIHQgKiB0ICogdCAqIHQ7XG5cdFx0XHRcdHJldHVybiAxIC8gMiAqICgodCAtPSAyKSAqIHQgKiB0ICogdCAqIHQgKyAyKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5TaW5lOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gLTEgKiBNYXRoLmNvcyh0IC8gMSAqIChNYXRoLlBJIC8gMikpICsgMTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0U2luZTogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiBNYXRoLnNpbih0IC8gMSAqIChNYXRoLlBJIC8gMikpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dFNpbmU6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiAtMSAvIDIgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHQgLyAxKSAtIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbkV4cG86IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHJldHVybiAodCA9PT0gMCkgPyAxIDogMSAqIE1hdGgucG93KDIsIDEwICogKHQgLyAxIC0gMSkpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VPdXRFeHBvOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gKHQgPT09IDEpID8gMSA6IDEgKiAoLU1hdGgucG93KDIsIC0xMCAqIHQgLyAxKSArIDEpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dEV4cG86IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdGlmICh0ID09PSAwKSByZXR1cm4gMDtcblx0XHRcdFx0aWYgKHQgPT09IDEpIHJldHVybiAxO1xuXHRcdFx0XHRpZiAoKHQgLz0gMSAvIDIpIDwgMSkgcmV0dXJuIDEgLyAyICogTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKTtcblx0XHRcdFx0cmV0dXJuIDEgLyAyICogKC1NYXRoLnBvdygyLCAtMTAgKiAtLXQpICsgMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluQ2lyYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKHQgPj0gMSkgcmV0dXJuIHQ7XG5cdFx0XHRcdHJldHVybiAtMSAqIChNYXRoLnNxcnQoMSAtICh0IC89IDEpICogdCkgLSAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0Q2lyYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0cmV0dXJuIDEgKiBNYXRoLnNxcnQoMSAtICh0ID0gdCAvIDEgLSAxKSAqIHQpO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdGlmICgodCAvPSAxIC8gMikgPCAxKSByZXR1cm4gLTEgLyAyICogKE1hdGguc3FydCgxIC0gdCAqIHQpIC0gMSk7XG5cdFx0XHRcdHJldHVybiAxIC8gMiAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5FbGFzdGljOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHR2YXIgcyA9IDEuNzAxNTg7XG5cdFx0XHRcdHZhciBwID0gMDtcblx0XHRcdFx0dmFyIGEgPSAxO1xuXHRcdFx0XHRpZiAodCA9PT0gMCkgcmV0dXJuIDA7XG5cdFx0XHRcdGlmICgodCAvPSAxKSA9PSAxKSByZXR1cm4gMTtcblx0XHRcdFx0aWYgKCFwKSBwID0gMSAqIDAuMztcblx0XHRcdFx0aWYgKGEgPCBNYXRoLmFicygxKSkge1xuXHRcdFx0XHRcdGEgPSAxO1xuXHRcdFx0XHRcdHMgPSBwIC8gNDtcblx0XHRcdFx0fSBlbHNlIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbigxIC8gYSk7XG5cdFx0XHRcdHJldHVybiAtKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0IC09IDEpKSAqIE1hdGguc2luKCh0ICogMSAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0RWxhc3RpYzogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0dmFyIHMgPSAxLjcwMTU4O1xuXHRcdFx0XHR2YXIgcCA9IDA7XG5cdFx0XHRcdHZhciBhID0gMTtcblx0XHRcdFx0aWYgKHQgPT09IDApIHJldHVybiAwO1xuXHRcdFx0XHRpZiAoKHQgLz0gMSkgPT0gMSkgcmV0dXJuIDE7XG5cdFx0XHRcdGlmICghcCkgcCA9IDEgKiAwLjM7XG5cdFx0XHRcdGlmIChhIDwgTWF0aC5hYnMoMSkpIHtcblx0XHRcdFx0XHRhID0gMTtcblx0XHRcdFx0XHRzID0gcCAvIDQ7XG5cdFx0XHRcdH0gZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oMSAvIGEpO1xuXHRcdFx0XHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHQgKiAxIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKyAxO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dEVsYXN0aWM6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRcdFx0dmFyIHAgPSAwO1xuXHRcdFx0XHR2YXIgYSA9IDE7XG5cdFx0XHRcdGlmICh0ID09PSAwKSByZXR1cm4gMDtcblx0XHRcdFx0aWYgKCh0IC89IDEgLyAyKSA9PSAyKSByZXR1cm4gMTtcblx0XHRcdFx0aWYgKCFwKSBwID0gMSAqICgwLjMgKiAxLjUpO1xuXHRcdFx0XHRpZiAoYSA8IE1hdGguYWJzKDEpKSB7XG5cdFx0XHRcdFx0YSA9IDE7XG5cdFx0XHRcdFx0cyA9IHAgLyA0O1xuXHRcdFx0XHR9IGVsc2UgcyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKDEgLyBhKTtcblx0XHRcdFx0aWYgKHQgPCAxKSByZXR1cm4gLTAuNSAqIChhICogTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAqIDEgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSk7XG5cdFx0XHRcdHJldHVybiBhICogTWF0aC5wb3coMiwgLTEwICogKHQgLT0gMSkpICogTWF0aC5zaW4oKHQgKiAxIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKiAwLjUgKyAxO1xuXHRcdFx0fSxcblx0XHRcdGVhc2VJbkJhY2s6IGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRcdFx0cmV0dXJuIDEgKiAodCAvPSAxKSAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlT3V0QmFjazogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0dmFyIHMgPSAxLjcwMTU4O1xuXHRcdFx0XHRyZXR1cm4gMSAqICgodCA9IHQgLyAxIC0gMSkgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxKTtcblx0XHRcdH0sXG5cdFx0XHRlYXNlSW5PdXRCYWNrOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHR2YXIgcyA9IDEuNzAxNTg7XG5cdFx0XHRcdGlmICgodCAvPSAxIC8gMikgPCAxKSByZXR1cm4gMSAvIDIgKiAodCAqIHQgKiAoKChzICo9ICgxLjUyNSkpICsgMSkgKiB0IC0gcykpO1xuXHRcdFx0XHRyZXR1cm4gMSAvIDIgKiAoKHQgLT0gMikgKiB0ICogKCgocyAqPSAoMS41MjUpKSArIDEpICogdCArIHMpICsgMik7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZUluQm91bmNlOiBmdW5jdGlvbiAodCkge1xuXHRcdFx0XHRyZXR1cm4gMSAtIGVhc2luZ0VmZmVjdHMuZWFzZU91dEJvdW5jZSgxIC0gdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZWFzZU91dEJvdW5jZTogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKCh0IC89IDEpIDwgKDEgLyAyLjc1KSkge1xuXHRcdFx0XHRcdHJldHVybiAxICogKDcuNTYyNSAqIHQgKiB0KTtcblx0XHRcdFx0fSBlbHNlIGlmICh0IDwgKDIgLyAyLjc1KSkge1xuXHRcdFx0XHRcdHJldHVybiAxICogKDcuNTYyNSAqICh0IC09ICgxLjUgLyAyLjc1KSkgKiB0ICsgMC43NSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodCA8ICgyLjUgLyAyLjc1KSkge1xuXHRcdFx0XHRcdHJldHVybiAxICogKDcuNTYyNSAqICh0IC09ICgyLjI1IC8gMi43NSkpICogdCArIDAuOTM3NSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIDEgKiAoNy41NjI1ICogKHQgLT0gKDIuNjI1IC8gMi43NSkpICogdCArIDAuOTg0Mzc1KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGVhc2VJbk91dEJvdW5jZTogZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0aWYgKHQgPCAxIC8gMikgcmV0dXJuIGVhc2luZ0VmZmVjdHMuZWFzZUluQm91bmNlKHQgKiAyKSAqIDAuNTtcblx0XHRcdFx0cmV0dXJuIGVhc2luZ0VmZmVjdHMuZWFzZU91dEJvdW5jZSh0ICogMiAtIDEpICogMC41ICsgMSAqIDAuNTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vUmVxdWVzdCBhbmltYXRpb24gcG9seWZpbGwgLSBodHRwOi8vd3d3LnBhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cblx0XHRyZXF1ZXN0QW5pbUZyYW1lID0gaGVscGVycy5yZXF1ZXN0QW5pbUZyYW1lID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0XHR3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdFx0d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdFx0d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xuXHRcdFx0XHR9O1xuXHRcdH0pKCksXG5cdFx0Y2FuY2VsQW5pbUZyYW1lID0gaGVscGVycy5jYW5jZWxBbmltRnJhbWUgPSAoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdFx0d2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdHdpbmRvdy5tb3pDYW5jZWxBbmltYXRpb25GcmFtZSB8fFxuXHRcdFx0XHR3aW5kb3cub0NhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdHdpbmRvdy5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHRcdGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdpbmRvdy5jbGVhclRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7XG5cdFx0XHRcdH07XG5cdFx0fSkoKSxcblx0XHRhbmltYXRpb25Mb29wID0gaGVscGVycy5hbmltYXRpb25Mb29wID0gZnVuY3Rpb24oY2FsbGJhY2ssdG90YWxTdGVwcyxlYXNpbmdTdHJpbmcsb25Qcm9ncmVzcyxvbkNvbXBsZXRlLGNoYXJ0SW5zdGFuY2Upe1xuXG5cdFx0XHR2YXIgY3VycmVudFN0ZXAgPSAwLFxuXHRcdFx0XHRlYXNpbmdGdW5jdGlvbiA9IGVhc2luZ0VmZmVjdHNbZWFzaW5nU3RyaW5nXSB8fCBlYXNpbmdFZmZlY3RzLmxpbmVhcjtcblxuXHRcdFx0dmFyIGFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0Y3VycmVudFN0ZXArKztcblx0XHRcdFx0dmFyIHN0ZXBEZWNpbWFsID0gY3VycmVudFN0ZXAvdG90YWxTdGVwcztcblx0XHRcdFx0dmFyIGVhc2VEZWNpbWFsID0gZWFzaW5nRnVuY3Rpb24oc3RlcERlY2ltYWwpO1xuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoY2hhcnRJbnN0YW5jZSxlYXNlRGVjaW1hbCxzdGVwRGVjaW1hbCwgY3VycmVudFN0ZXApO1xuXHRcdFx0XHRvblByb2dyZXNzLmNhbGwoY2hhcnRJbnN0YW5jZSxlYXNlRGVjaW1hbCxzdGVwRGVjaW1hbCk7XG5cdFx0XHRcdGlmIChjdXJyZW50U3RlcCA8IHRvdGFsU3RlcHMpe1xuXHRcdFx0XHRcdGNoYXJ0SW5zdGFuY2UuYW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbUZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcblx0XHRcdFx0fSBlbHNle1xuXHRcdFx0XHRcdG9uQ29tcGxldGUuYXBwbHkoY2hhcnRJbnN0YW5jZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcblx0XHR9LFxuXHRcdC8vLS0gRE9NIG1ldGhvZHNcblx0XHRnZXRSZWxhdGl2ZVBvc2l0aW9uID0gaGVscGVycy5nZXRSZWxhdGl2ZVBvc2l0aW9uID0gZnVuY3Rpb24oZXZ0KXtcblx0XHRcdHZhciBtb3VzZVgsIG1vdXNlWTtcblx0XHRcdHZhciBlID0gZXZ0Lm9yaWdpbmFsRXZlbnQgfHwgZXZ0LFxuXHRcdFx0XHRjYW52YXMgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCxcblx0XHRcdFx0Ym91bmRpbmdSZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRpZiAoZS50b3VjaGVzKXtcblx0XHRcdFx0bW91c2VYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblx0XHRcdFx0bW91c2VZID0gZS50b3VjaGVzWzBdLmNsaWVudFkgLSBib3VuZGluZ1JlY3QudG9wO1xuXG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRtb3VzZVggPSBlLmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblx0XHRcdFx0bW91c2VZID0gZS5jbGllbnRZIC0gYm91bmRpbmdSZWN0LnRvcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eCA6IG1vdXNlWCxcblx0XHRcdFx0eSA6IG1vdXNlWVxuXHRcdFx0fTtcblxuXHRcdH0sXG5cdFx0YWRkRXZlbnQgPSBoZWxwZXJzLmFkZEV2ZW50ID0gZnVuY3Rpb24obm9kZSxldmVudFR5cGUsbWV0aG9kKXtcblx0XHRcdGlmIChub2RlLmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0XHRub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLG1ldGhvZCk7XG5cdFx0XHR9IGVsc2UgaWYgKG5vZGUuYXR0YWNoRXZlbnQpe1xuXHRcdFx0XHRub2RlLmF0dGFjaEV2ZW50KFwib25cIitldmVudFR5cGUsIG1ldGhvZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlW1wib25cIitldmVudFR5cGVdID0gbWV0aG9kO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVtb3ZlRXZlbnQgPSBoZWxwZXJzLnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24obm9kZSwgZXZlbnRUeXBlLCBoYW5kbGVyKXtcblx0XHRcdGlmIChub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0XHRub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKG5vZGUuZGV0YWNoRXZlbnQpe1xuXHRcdFx0XHRub2RlLmRldGFjaEV2ZW50KFwib25cIitldmVudFR5cGUsaGFuZGxlcik7XG5cdFx0XHR9IGVsc2V7XG5cdFx0XHRcdG5vZGVbXCJvblwiICsgZXZlbnRUeXBlXSA9IG5vb3A7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRiaW5kRXZlbnRzID0gaGVscGVycy5iaW5kRXZlbnRzID0gZnVuY3Rpb24oY2hhcnRJbnN0YW5jZSwgYXJyYXlPZkV2ZW50cywgaGFuZGxlcil7XG5cdFx0XHQvLyBDcmVhdGUgdGhlIGV2ZW50cyBvYmplY3QgaWYgaXQncyBub3QgYWxyZWFkeSBwcmVzZW50XG5cdFx0XHRpZiAoIWNoYXJ0SW5zdGFuY2UuZXZlbnRzKSBjaGFydEluc3RhbmNlLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRlYWNoKGFycmF5T2ZFdmVudHMsZnVuY3Rpb24oZXZlbnROYW1lKXtcblx0XHRcdFx0Y2hhcnRJbnN0YW5jZS5ldmVudHNbZXZlbnROYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0aGFuZGxlci5hcHBseShjaGFydEluc3RhbmNlLCBhcmd1bWVudHMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRhZGRFdmVudChjaGFydEluc3RhbmNlLmNoYXJ0LmNhbnZhcyxldmVudE5hbWUsY2hhcnRJbnN0YW5jZS5ldmVudHNbZXZlbnROYW1lXSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHVuYmluZEV2ZW50cyA9IGhlbHBlcnMudW5iaW5kRXZlbnRzID0gZnVuY3Rpb24gKGNoYXJ0SW5zdGFuY2UsIGFycmF5T2ZFdmVudHMpIHtcblx0XHRcdGVhY2goYXJyYXlPZkV2ZW50cywgZnVuY3Rpb24oaGFuZGxlcixldmVudE5hbWUpe1xuXHRcdFx0XHRyZW1vdmVFdmVudChjaGFydEluc3RhbmNlLmNoYXJ0LmNhbnZhcywgZXZlbnROYW1lLCBoYW5kbGVyKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0TWF4aW11bVdpZHRoID0gaGVscGVycy5nZXRNYXhpbXVtV2lkdGggPSBmdW5jdGlvbihkb21Ob2RlKXtcblx0XHRcdHZhciBjb250YWluZXIgPSBkb21Ob2RlLnBhcmVudE5vZGU7XG5cdFx0XHQvLyBUT0RPID0gY2hlY2sgY3Jvc3MgYnJvd3NlciBzdHVmZiB3aXRoIHRoaXMuXG5cdFx0XHRyZXR1cm4gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuXHRcdH0sXG5cdFx0Z2V0TWF4aW11bUhlaWdodCA9IGhlbHBlcnMuZ2V0TWF4aW11bUhlaWdodCA9IGZ1bmN0aW9uKGRvbU5vZGUpe1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IGRvbU5vZGUucGFyZW50Tm9kZTtcblx0XHRcdC8vIFRPRE8gPSBjaGVjayBjcm9zcyBicm93c2VyIHN0dWZmIHdpdGggdGhpcy5cblx0XHRcdHJldHVybiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuXHRcdH0sXG5cdFx0Z2V0TWF4aW11bVNpemUgPSBoZWxwZXJzLmdldE1heGltdW1TaXplID0gaGVscGVycy5nZXRNYXhpbXVtV2lkdGgsIC8vIGxlZ2FjeSBzdXBwb3J0XG5cdFx0cmV0aW5hU2NhbGUgPSBoZWxwZXJzLnJldGluYVNjYWxlID0gZnVuY3Rpb24oY2hhcnQpe1xuXHRcdFx0dmFyIGN0eCA9IGNoYXJ0LmN0eCxcblx0XHRcdFx0d2lkdGggPSBjaGFydC5jYW52YXMud2lkdGgsXG5cdFx0XHRcdGhlaWdodCA9IGNoYXJ0LmNhbnZhcy5oZWlnaHQ7XG5cblx0XHRcdGlmICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbykge1xuXHRcdFx0XHRjdHguY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG5cdFx0XHRcdGN0eC5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgXCJweFwiO1xuXHRcdFx0XHRjdHguY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuXHRcdFx0XHRjdHguY2FudmFzLndpZHRoID0gd2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblx0XHRcdFx0Y3R4LnNjYWxlKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLy0tIENhbnZhcyBtZXRob2RzXG5cdFx0Y2xlYXIgPSBoZWxwZXJzLmNsZWFyID0gZnVuY3Rpb24oY2hhcnQpe1xuXHRcdFx0Y2hhcnQuY3R4LmNsZWFyUmVjdCgwLDAsY2hhcnQud2lkdGgsY2hhcnQuaGVpZ2h0KTtcblx0XHR9LFxuXHRcdGZvbnRTdHJpbmcgPSBoZWxwZXJzLmZvbnRTdHJpbmcgPSBmdW5jdGlvbihwaXhlbFNpemUsZm9udFN0eWxlLGZvbnRGYW1pbHkpe1xuXHRcdFx0cmV0dXJuIGZvbnRTdHlsZSArIFwiIFwiICsgcGl4ZWxTaXplK1wicHggXCIgKyBmb250RmFtaWx5O1xuXHRcdH0sXG5cdFx0bG9uZ2VzdFRleHQgPSBoZWxwZXJzLmxvbmdlc3RUZXh0ID0gZnVuY3Rpb24oY3R4LGZvbnQsYXJyYXlPZlN0cmluZ3Mpe1xuXHRcdFx0Y3R4LmZvbnQgPSBmb250O1xuXHRcdFx0dmFyIGxvbmdlc3QgPSAwO1xuXHRcdFx0ZWFjaChhcnJheU9mU3RyaW5ncyxmdW5jdGlvbihzdHJpbmcpe1xuXHRcdFx0XHR2YXIgdGV4dFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KHN0cmluZykud2lkdGg7XG5cdFx0XHRcdGxvbmdlc3QgPSAodGV4dFdpZHRoID4gbG9uZ2VzdCkgPyB0ZXh0V2lkdGggOiBsb25nZXN0O1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gbG9uZ2VzdDtcblx0XHR9LFxuXHRcdGRyYXdSb3VuZGVkUmVjdGFuZ2xlID0gaGVscGVycy5kcmF3Um91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uKGN0eCx4LHksd2lkdGgsaGVpZ2h0LHJhZGl1cyl7XG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRjdHgubW92ZVRvKHggKyByYWRpdXMsIHkpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMsIHkpO1xuXHRcdFx0Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMpO1xuXHRcdFx0Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0KTtcblx0XHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByYWRpdXMpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4LCB5ICsgcmFkaXVzKTtcblx0XHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMsIHkpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdH07XG5cblxuXHQvL1N0b3JlIGEgcmVmZXJlbmNlIHRvIGVhY2ggaW5zdGFuY2UgLSBhbGxvd2luZyB1cyB0byBnbG9iYWxseSByZXNpemUgY2hhcnQgaW5zdGFuY2VzIG9uIHdpbmRvdyByZXNpemUuXG5cdC8vRGVzdHJveSBtZXRob2Qgb24gdGhlIGNoYXJ0IHdpbGwgcmVtb3ZlIHRoZSBpbnN0YW5jZSBvZiB0aGUgY2hhcnQgZnJvbSB0aGlzIHJlZmVyZW5jZS5cblx0Q2hhcnQuaW5zdGFuY2VzID0ge307XG5cblx0Q2hhcnQuVHlwZSA9IGZ1bmN0aW9uKGRhdGEsb3B0aW9ucyxjaGFydCl7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLmNoYXJ0ID0gY2hhcnQ7XG5cdFx0dGhpcy5pZCA9IHVpZCgpO1xuXHRcdC8vQWRkIHRoZSBjaGFydCBpbnN0YW5jZSB0byB0aGUgZ2xvYmFsIG5hbWVzcGFjZVxuXHRcdENoYXJ0Lmluc3RhbmNlc1t0aGlzLmlkXSA9IHRoaXM7XG5cblx0XHQvLyBJbml0aWFsaXplIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBhIGNoYXJ0IHR5cGUgaXMgY3JlYXRlZFxuXHRcdC8vIEJ5IGRlZmF1bHQgaXQgaXMgYSBubyBvcCwgYnV0IGl0IHNob3VsZCBiZSBleHRlbmRlZFxuXHRcdGlmIChvcHRpb25zLnJlc3BvbnNpdmUpe1xuXHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHR9XG5cdFx0dGhpcy5pbml0aWFsaXplLmNhbGwodGhpcyxkYXRhKTtcblx0fTtcblxuXHQvL0NvcmUgbWV0aG9kcyB0aGF0J2xsIGJlIGEgcGFydCBvZiBldmVyeSBjaGFydCB0eXBlXG5cdGV4dGVuZChDaGFydC5UeXBlLnByb3RvdHlwZSx7XG5cdFx0aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSxcblx0XHRjbGVhciA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRjbGVhcih0aGlzLmNoYXJ0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RvcCA6IGZ1bmN0aW9uKCl7XG5cdFx0XHQvLyBTdG9wcyBhbnkgY3VycmVudCBhbmltYXRpb24gbG9vcCBvY2N1cmluZ1xuXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuYW5pbWF0aW9uRnJhbWUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRyZXNpemUgOiBmdW5jdGlvbihjYWxsYmFjayl7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHRcdHZhciBjYW52YXMgPSB0aGlzLmNoYXJ0LmNhbnZhcyxcblx0XHRcdFx0bmV3V2lkdGggPSBnZXRNYXhpbXVtV2lkdGgodGhpcy5jaGFydC5jYW52YXMpLFxuXHRcdFx0XHRuZXdIZWlnaHQgPSB0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyA/IG5ld1dpZHRoIC8gdGhpcy5jaGFydC5hc3BlY3RSYXRpbyA6IGdldE1heGltdW1IZWlnaHQodGhpcy5jaGFydC5jYW52YXMpO1xuXG5cdFx0XHRjYW52YXMud2lkdGggPSB0aGlzLmNoYXJ0LndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHRjYW52YXMuaGVpZ2h0ID0gdGhpcy5jaGFydC5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cblx0XHRcdHJldGluYVNjYWxlKHRoaXMuY2hhcnQpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSh0aGlzLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0cmVmbG93IDogbm9vcCxcblx0XHRyZW5kZXIgOiBmdW5jdGlvbihyZWZsb3cpe1xuXHRcdFx0aWYgKHJlZmxvdyl7XG5cdFx0XHRcdHRoaXMucmVmbG93KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLmFuaW1hdGlvbiAmJiAhcmVmbG93KXtcblx0XHRcdFx0aGVscGVycy5hbmltYXRpb25Mb29wKFxuXHRcdFx0XHRcdHRoaXMuZHJhdyxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuYW5pbWF0aW9uU3RlcHMsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLmFuaW1hdGlvbkVhc2luZyxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25BbmltYXRpb25Qcm9ncmVzcyxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25BbmltYXRpb25Db21wbGV0ZSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHR0aGlzLmRyYXcoKTtcblx0XHRcdFx0dGhpcy5vcHRpb25zLm9uQW5pbWF0aW9uQ29tcGxldGUuY2FsbCh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Z2VuZXJhdGVMZWdlbmQgOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRlbXBsYXRlKHRoaXMub3B0aW9ucy5sZWdlbmRUZW1wbGF0ZSx0aGlzKTtcblx0XHR9LFxuXHRcdGRlc3Ryb3kgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5jbGVhcigpO1xuXHRcdFx0dW5iaW5kRXZlbnRzKHRoaXMsIHRoaXMuZXZlbnRzKTtcblx0XHRcdHZhciBjYW52YXMgPSB0aGlzLmNoYXJ0LmNhbnZhcztcblxuXHRcdFx0Ly8gUmVzZXQgY2FudmFzIGhlaWdodC93aWR0aCBhdHRyaWJ1dGVzIHN0YXJ0cyBhIGZyZXNoIHdpdGggdGhlIGNhbnZhcyBjb250ZXh0XG5cdFx0XHRjYW52YXMud2lkdGggPSB0aGlzLmNoYXJ0LndpZHRoO1xuXHRcdFx0Y2FudmFzLmhlaWdodCA9IHRoaXMuY2hhcnQuaGVpZ2h0O1xuXG5cdFx0XHQvLyA8IElFOSBkb2Vzbid0IHN1cHBvcnQgcmVtb3ZlUHJvcGVydHlcblx0XHRcdGlmIChjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkpIHtcblx0XHRcdFx0Y2FudmFzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCd3aWR0aCcpO1xuXHRcdFx0XHRjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2hlaWdodCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FudmFzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnd2lkdGgnKTtcblx0XHRcdFx0Y2FudmFzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnaGVpZ2h0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbGV0ZSBDaGFydC5pbnN0YW5jZXNbdGhpcy5pZF07XG5cdFx0fSxcblx0XHRzaG93VG9vbHRpcCA6IGZ1bmN0aW9uKENoYXJ0RWxlbWVudHMsIGZvcmNlUmVkcmF3KXtcblx0XHRcdC8vIE9ubHkgcmVkcmF3IHRoZSBjaGFydCBpZiB3ZSd2ZSBhY3R1YWxseSBjaGFuZ2VkIHdoYXQgd2UncmUgaG92ZXJpbmcgb24uXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuYWN0aXZlRWxlbWVudHMgPT09ICd1bmRlZmluZWQnKSB0aGlzLmFjdGl2ZUVsZW1lbnRzID0gW107XG5cblx0XHRcdHZhciBpc0NoYW5nZWQgPSAoZnVuY3Rpb24oRWxlbWVudHMpe1xuXHRcdFx0XHR2YXIgY2hhbmdlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChFbGVtZW50cy5sZW5ndGggIT09IHRoaXMuYWN0aXZlRWxlbWVudHMubGVuZ3RoKXtcblx0XHRcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gY2hhbmdlZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVhY2goRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KXtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAhPT0gdGhpcy5hY3RpdmVFbGVtZW50c1tpbmRleF0pe1xuXHRcdFx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGNoYW5nZWQ7XG5cdFx0XHR9KS5jYWxsKHRoaXMsIENoYXJ0RWxlbWVudHMpO1xuXG5cdFx0XHRpZiAoIWlzQ2hhbmdlZCAmJiAhZm9yY2VSZWRyYXcpe1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHR0aGlzLmFjdGl2ZUVsZW1lbnRzID0gQ2hhcnRFbGVtZW50cztcblx0XHRcdH1cblx0XHRcdHRoaXMuZHJhdygpO1xuXHRcdFx0aWYodGhpcy5vcHRpb25zLmN1c3RvbVRvb2x0aXBzKXtcblx0XHRcdFx0dGhpcy5vcHRpb25zLmN1c3RvbVRvb2x0aXBzKGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdGlmIChDaGFydEVsZW1lbnRzLmxlbmd0aCA+IDApe1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG11bHRpcGxlIGRhdGFzZXRzLCBzaG93IGEgTXVsdGlUb29sdGlwIGZvciBhbGwgb2YgdGhlIGRhdGEgcG9pbnRzIGF0IHRoYXQgaW5kZXhcblx0XHRcdFx0aWYgKHRoaXMuZGF0YXNldHMgJiYgdGhpcy5kYXRhc2V0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGFBcnJheSxcblx0XHRcdFx0XHRcdGRhdGFJbmRleDtcblxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSB0aGlzLmRhdGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0XHRkYXRhQXJyYXkgPSB0aGlzLmRhdGFzZXRzW2ldLnBvaW50cyB8fCB0aGlzLmRhdGFzZXRzW2ldLmJhcnMgfHwgdGhpcy5kYXRhc2V0c1tpXS5zZWdtZW50cztcblx0XHRcdFx0XHRcdGRhdGFJbmRleCA9IGluZGV4T2YoZGF0YUFycmF5LCBDaGFydEVsZW1lbnRzWzBdKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhSW5kZXggIT09IC0xKXtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciB0b29sdGlwTGFiZWxzID0gW10sXG5cdFx0XHRcdFx0XHR0b29sdGlwQ29sb3JzID0gW10sXG5cdFx0XHRcdFx0XHRtZWRpYW5Qb3NpdGlvbiA9IChmdW5jdGlvbihpbmRleCkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEdldCBhbGwgdGhlIHBvaW50cyBhdCB0aGF0IHBhcnRpY3VsYXIgaW5kZXhcblx0XHRcdFx0XHRcdFx0dmFyIEVsZW1lbnRzID0gW10sXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0eFBvc2l0aW9ucyA9IFtdLFxuXHRcdFx0XHRcdFx0XHRcdHlQb3NpdGlvbnMgPSBbXSxcblx0XHRcdFx0XHRcdFx0XHR4TWF4LFxuXHRcdFx0XHRcdFx0XHRcdHlNYXgsXG5cdFx0XHRcdFx0XHRcdFx0eE1pbixcblx0XHRcdFx0XHRcdFx0XHR5TWluO1xuXHRcdFx0XHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUNvbGxlY3Rpb24gPSBkYXRhc2V0LnBvaW50cyB8fCBkYXRhc2V0LmJhcnMgfHwgZGF0YXNldC5zZWdtZW50cztcblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YUNvbGxlY3Rpb25bZGF0YUluZGV4XSAmJiBkYXRhQ29sbGVjdGlvbltkYXRhSW5kZXhdLmhhc1ZhbHVlKCkpe1xuXHRcdFx0XHRcdFx0XHRcdFx0RWxlbWVudHMucHVzaChkYXRhQ29sbGVjdGlvbltkYXRhSW5kZXhdKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGhlbHBlcnMuZWFjaChFbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHhQb3NpdGlvbnMucHVzaChlbGVtZW50LngpO1xuXHRcdFx0XHRcdFx0XHRcdHlQb3NpdGlvbnMucHVzaChlbGVtZW50LnkpO1xuXG5cblx0XHRcdFx0XHRcdFx0XHQvL0luY2x1ZGUgYW55IGNvbG91ciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBMYWJlbHMucHVzaChoZWxwZXJzLnRlbXBsYXRlKHRoaXMub3B0aW9ucy5tdWx0aVRvb2x0aXBUZW1wbGF0ZSwgZWxlbWVudCkpO1xuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBDb2xvcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRmaWxsOiBlbGVtZW50Ll9zYXZlZC5maWxsQ29sb3IgfHwgZWxlbWVudC5maWxsQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJva2U6IGVsZW1lbnQuX3NhdmVkLnN0cm9rZUNvbG9yIHx8IGVsZW1lbnQuc3Ryb2tlQ29sb3Jcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHR9LCB0aGlzKTtcblxuXHRcdFx0XHRcdFx0XHR5TWluID0gbWluKHlQb3NpdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR5TWF4ID0gbWF4KHlQb3NpdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRcdHhNaW4gPSBtaW4oeFBvc2l0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdHhNYXggPSBtYXgoeFBvc2l0aW9ucyk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHR4OiAoeE1pbiA+IHRoaXMuY2hhcnQud2lkdGgvMikgPyB4TWluIDogeE1heCxcblx0XHRcdFx0XHRcdFx0XHR5OiAoeU1pbiArIHlNYXgpLzJcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLmNhbGwodGhpcywgZGF0YUluZGV4KTtcblxuXHRcdFx0XHRcdG5ldyBDaGFydC5NdWx0aVRvb2x0aXAoe1xuXHRcdFx0XHRcdFx0eDogbWVkaWFuUG9zaXRpb24ueCxcblx0XHRcdFx0XHRcdHk6IG1lZGlhblBvc2l0aW9uLnksXG5cdFx0XHRcdFx0XHR4UGFkZGluZzogdGhpcy5vcHRpb25zLnRvb2x0aXBYUGFkZGluZyxcblx0XHRcdFx0XHRcdHlQYWRkaW5nOiB0aGlzLm9wdGlvbnMudG9vbHRpcFlQYWRkaW5nLFxuXHRcdFx0XHRcdFx0eE9mZnNldDogdGhpcy5vcHRpb25zLnRvb2x0aXBYT2Zmc2V0LFxuXHRcdFx0XHRcdFx0ZmlsbENvbG9yOiB0aGlzLm9wdGlvbnMudG9vbHRpcEZpbGxDb2xvcixcblx0XHRcdFx0XHRcdHRleHRDb2xvcjogdGhpcy5vcHRpb25zLnRvb2x0aXBGb250Q29sb3IsXG5cdFx0XHRcdFx0XHRmb250RmFtaWx5OiB0aGlzLm9wdGlvbnMudG9vbHRpcEZvbnRGYW1pbHksXG5cdFx0XHRcdFx0XHRmb250U3R5bGU6IHRoaXMub3B0aW9ucy50b29sdGlwRm9udFN0eWxlLFxuXHRcdFx0XHRcdFx0Zm9udFNpemU6IHRoaXMub3B0aW9ucy50b29sdGlwRm9udFNpemUsXG5cdFx0XHRcdFx0XHR0aXRsZVRleHRDb2xvcjogdGhpcy5vcHRpb25zLnRvb2x0aXBUaXRsZUZvbnRDb2xvcixcblx0XHRcdFx0XHRcdHRpdGxlRm9udEZhbWlseTogdGhpcy5vcHRpb25zLnRvb2x0aXBUaXRsZUZvbnRGYW1pbHksXG5cdFx0XHRcdFx0XHR0aXRsZUZvbnRTdHlsZTogdGhpcy5vcHRpb25zLnRvb2x0aXBUaXRsZUZvbnRTdHlsZSxcblx0XHRcdFx0XHRcdHRpdGxlRm9udFNpemU6IHRoaXMub3B0aW9ucy50b29sdGlwVGl0bGVGb250U2l6ZSxcblx0XHRcdFx0XHRcdGNvcm5lclJhZGl1czogdGhpcy5vcHRpb25zLnRvb2x0aXBDb3JuZXJSYWRpdXMsXG5cdFx0XHRcdFx0XHRsYWJlbHM6IHRvb2x0aXBMYWJlbHMsXG5cdFx0XHRcdFx0XHRsZWdlbmRDb2xvcnM6IHRvb2x0aXBDb2xvcnMsXG5cdFx0XHRcdFx0XHRsZWdlbmRDb2xvckJhY2tncm91bmQgOiB0aGlzLm9wdGlvbnMubXVsdGlUb29sdGlwS2V5QmFja2dyb3VuZCxcblx0XHRcdFx0XHRcdHRpdGxlOiBDaGFydEVsZW1lbnRzWzBdLmxhYmVsLFxuXHRcdFx0XHRcdFx0Y2hhcnQ6IHRoaXMuY2hhcnQsXG5cdFx0XHRcdFx0XHRjdHg6IHRoaXMuY2hhcnQuY3R4LFxuXHRcdFx0XHRcdFx0Y3VzdG9tOiB0aGlzLm9wdGlvbnMuY3VzdG9tVG9vbHRpcHNcblx0XHRcdFx0XHR9KS5kcmF3KCk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlYWNoKENoYXJ0RWxlbWVudHMsIGZ1bmN0aW9uKEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdHZhciB0b29sdGlwUG9zaXRpb24gPSBFbGVtZW50LnRvb2x0aXBQb3NpdGlvbigpO1xuXHRcdFx0XHRcdFx0bmV3IENoYXJ0LlRvb2x0aXAoe1xuXHRcdFx0XHRcdFx0XHR4OiBNYXRoLnJvdW5kKHRvb2x0aXBQb3NpdGlvbi54KSxcblx0XHRcdFx0XHRcdFx0eTogTWF0aC5yb3VuZCh0b29sdGlwUG9zaXRpb24ueSksXG5cdFx0XHRcdFx0XHRcdHhQYWRkaW5nOiB0aGlzLm9wdGlvbnMudG9vbHRpcFhQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHR5UGFkZGluZzogdGhpcy5vcHRpb25zLnRvb2x0aXBZUGFkZGluZyxcblx0XHRcdFx0XHRcdFx0ZmlsbENvbG9yOiB0aGlzLm9wdGlvbnMudG9vbHRpcEZpbGxDb2xvcixcblx0XHRcdFx0XHRcdFx0dGV4dENvbG9yOiB0aGlzLm9wdGlvbnMudG9vbHRpcEZvbnRDb2xvcixcblx0XHRcdFx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5vcHRpb25zLnRvb2x0aXBGb250RmFtaWx5LFxuXHRcdFx0XHRcdFx0XHRmb250U3R5bGU6IHRoaXMub3B0aW9ucy50b29sdGlwRm9udFN0eWxlLFxuXHRcdFx0XHRcdFx0XHRmb250U2l6ZTogdGhpcy5vcHRpb25zLnRvb2x0aXBGb250U2l6ZSxcblx0XHRcdFx0XHRcdFx0Y2FyZXRIZWlnaHQ6IHRoaXMub3B0aW9ucy50b29sdGlwQ2FyZXRTaXplLFxuXHRcdFx0XHRcdFx0XHRjb3JuZXJSYWRpdXM6IHRoaXMub3B0aW9ucy50b29sdGlwQ29ybmVyUmFkaXVzLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiB0ZW1wbGF0ZSh0aGlzLm9wdGlvbnMudG9vbHRpcFRlbXBsYXRlLCBFbGVtZW50KSxcblx0XHRcdFx0XHRcdFx0Y2hhcnQ6IHRoaXMuY2hhcnQsXG5cdFx0XHRcdFx0XHRcdGN1c3RvbTogdGhpcy5vcHRpb25zLmN1c3RvbVRvb2x0aXBzXG5cdFx0XHRcdFx0XHR9KS5kcmF3KCk7XG5cdFx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0dG9CYXNlNjRJbWFnZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5jaGFydC5jYW52YXMudG9EYXRhVVJMLmFwcGx5KHRoaXMuY2hhcnQuY2FudmFzLCBhcmd1bWVudHMpO1xuXHRcdH1cblx0fSk7XG5cblx0Q2hhcnQuVHlwZS5leHRlbmQgPSBmdW5jdGlvbihleHRlbnNpb25zKXtcblxuXHRcdHZhciBwYXJlbnQgPSB0aGlzO1xuXG5cdFx0dmFyIENoYXJ0VHlwZSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHR9O1xuXG5cdFx0Ly9Db3B5IHRoZSBwcm90b3R5cGUgb2JqZWN0IG9mIHRoZSB0aGlzIGNsYXNzXG5cdFx0Q2hhcnRUeXBlLnByb3RvdHlwZSA9IGNsb25lKHBhcmVudC5wcm90b3R5cGUpO1xuXHRcdC8vTm93IG92ZXJ3cml0ZSBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIGNsYXNzIHdpdGggdGhlIG5ldyBleHRlbnNpb25zXG5cdFx0ZXh0ZW5kKENoYXJ0VHlwZS5wcm90b3R5cGUsIGV4dGVuc2lvbnMpO1xuXG5cdFx0Q2hhcnRUeXBlLmV4dGVuZCA9IENoYXJ0LlR5cGUuZXh0ZW5kO1xuXG5cdFx0aWYgKGV4dGVuc2lvbnMubmFtZSB8fCBwYXJlbnQucHJvdG90eXBlLm5hbWUpe1xuXG5cdFx0XHR2YXIgY2hhcnROYW1lID0gZXh0ZW5zaW9ucy5uYW1lIHx8IHBhcmVudC5wcm90b3R5cGUubmFtZTtcblx0XHRcdC8vQXNzaWduIGFueSBwb3RlbnRpYWwgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIG5ldyBjaGFydCB0eXBlXG5cblx0XHRcdC8vSWYgbm9uZSBhcmUgZGVmaW5lZCwgd2UnbGwgdXNlIGEgY2xvbmUgb2YgdGhlIGNoYXJ0IHR5cGUgdGhpcyBpcyBiZWluZyBleHRlbmRlZCBmcm9tLlxuXHRcdFx0Ly9JLmUuIGlmIHdlIGV4dGVuZCBhIGxpbmUgY2hhcnQsIHdlJ2xsIHVzZSB0aGUgZGVmYXVsdHMgZnJvbSB0aGUgbGluZSBjaGFydCBpZiBvdXIgbmV3IGNoYXJ0XG5cdFx0XHQvL2RvZXNuJ3QgZGVmaW5lIHNvbWUgZGVmYXVsdHMgb2YgdGhlaXIgb3duLlxuXG5cdFx0XHR2YXIgYmFzZURlZmF1bHRzID0gKENoYXJ0LmRlZmF1bHRzW3BhcmVudC5wcm90b3R5cGUubmFtZV0pID8gY2xvbmUoQ2hhcnQuZGVmYXVsdHNbcGFyZW50LnByb3RvdHlwZS5uYW1lXSkgOiB7fTtcblxuXHRcdFx0Q2hhcnQuZGVmYXVsdHNbY2hhcnROYW1lXSA9IGV4dGVuZChiYXNlRGVmYXVsdHMsZXh0ZW5zaW9ucy5kZWZhdWx0cyk7XG5cblx0XHRcdENoYXJ0LnR5cGVzW2NoYXJ0TmFtZV0gPSBDaGFydFR5cGU7XG5cblx0XHRcdC8vUmVnaXN0ZXIgdGhpcyBuZXcgY2hhcnQgdHlwZSBpbiB0aGUgQ2hhcnQgcHJvdG90eXBlXG5cdFx0XHRDaGFydC5wcm90b3R5cGVbY2hhcnROYW1lXSA9IGZ1bmN0aW9uKGRhdGEsb3B0aW9ucyl7XG5cdFx0XHRcdHZhciBjb25maWcgPSBtZXJnZShDaGFydC5kZWZhdWx0cy5nbG9iYWwsIENoYXJ0LmRlZmF1bHRzW2NoYXJ0TmFtZV0sIG9wdGlvbnMgfHwge30pO1xuXHRcdFx0XHRyZXR1cm4gbmV3IENoYXJ0VHlwZShkYXRhLGNvbmZpZyx0aGlzKTtcblx0XHRcdH07XG5cdFx0fSBlbHNle1xuXHRcdFx0d2FybihcIk5hbWUgbm90IHByb3ZpZGVkIGZvciB0aGlzIGNoYXJ0LCBzbyBpdCBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gcGFyZW50O1xuXHR9O1xuXG5cdENoYXJ0LkVsZW1lbnQgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKXtcblx0XHRleHRlbmQodGhpcyxjb25maWd1cmF0aW9uKTtcblx0XHR0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXHRcdHRoaXMuc2F2ZSgpO1xuXHR9O1xuXHRleHRlbmQoQ2hhcnQuRWxlbWVudC5wcm90b3R5cGUse1xuXHRcdGluaXRpYWxpemUgOiBmdW5jdGlvbigpe30sXG5cdFx0cmVzdG9yZSA6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHRcdGlmICghcHJvcHMpe1xuXHRcdFx0XHRleHRlbmQodGhpcyx0aGlzLl9zYXZlZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlYWNoKHByb3BzLGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRcdFx0dGhpc1trZXldID0gdGhpcy5fc2F2ZWRba2V5XTtcblx0XHRcdFx0fSx0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2F2ZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLl9zYXZlZCA9IGNsb25lKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3NhdmVkLl9zYXZlZDtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24obmV3UHJvcHMpe1xuXHRcdFx0ZWFjaChuZXdQcm9wcyxmdW5jdGlvbih2YWx1ZSxrZXkpe1xuXHRcdFx0XHR0aGlzLl9zYXZlZFtrZXldID0gdGhpc1trZXldO1xuXHRcdFx0XHR0aGlzW2tleV0gPSB2YWx1ZTtcblx0XHRcdH0sdGhpcyk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHRyYW5zaXRpb24gOiBmdW5jdGlvbihwcm9wcyxlYXNlKXtcblx0XHRcdGVhY2gocHJvcHMsZnVuY3Rpb24odmFsdWUsa2V5KXtcblx0XHRcdFx0dGhpc1trZXldID0gKCh2YWx1ZSAtIHRoaXMuX3NhdmVkW2tleV0pICogZWFzZSkgKyB0aGlzLl9zYXZlZFtrZXldO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0dG9vbHRpcFBvc2l0aW9uIDogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHggOiB0aGlzLngsXG5cdFx0XHRcdHkgOiB0aGlzLnlcblx0XHRcdH07XG5cdFx0fSxcblx0XHRoYXNWYWx1ZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBpc051bWJlcih0aGlzLnZhbHVlKTtcblx0XHR9XG5cdH0pO1xuXG5cdENoYXJ0LkVsZW1lbnQuZXh0ZW5kID0gaW5oZXJpdHM7XG5cblxuXHRDaGFydC5Qb2ludCA9IENoYXJ0LkVsZW1lbnQuZXh0ZW5kKHtcblx0XHRkaXNwbGF5OiB0cnVlLFxuXHRcdGluUmFuZ2U6IGZ1bmN0aW9uKGNoYXJ0WCxjaGFydFkpe1xuXHRcdFx0dmFyIGhpdERldGVjdGlvblJhbmdlID0gdGhpcy5oaXREZXRlY3Rpb25SYWRpdXMgKyB0aGlzLnJhZGl1cztcblx0XHRcdHJldHVybiAoKE1hdGgucG93KGNoYXJ0WC10aGlzLngsIDIpK01hdGgucG93KGNoYXJ0WS10aGlzLnksIDIpKSA8IE1hdGgucG93KGhpdERldGVjdGlvblJhbmdlLDIpKTtcblx0XHR9LFxuXHRcdGRyYXcgOiBmdW5jdGlvbigpe1xuXHRcdFx0aWYgKHRoaXMuZGlzcGxheSl7XG5cdFx0XHRcdHZhciBjdHggPSB0aGlzLmN0eDtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRcdGN0eC5hcmModGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzLCAwLCBNYXRoLlBJKjIpO1xuXHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cblx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5zdHJva2VDb2xvcjtcblx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuc3Ryb2tlV2lkdGg7XG5cblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbENvbG9yO1xuXG5cdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdH1cblxuXG5cdFx0XHQvL1F1aWNrIGRlYnVnIGZvciBiZXppZXIgY3VydmUgc3BsaW5pbmdcblx0XHRcdC8vSGlnaGxpZ2h0cyBjb250cm9sIHBvaW50cyBhbmQgdGhlIGxpbmUgYmV0d2VlbiB0aGVtLlxuXHRcdFx0Ly9IYW5keSBmb3IgZGV2IC0gc3RyaXBwZWQgaW4gdGhlIG1pbiB2ZXJzaW9uLlxuXG5cdFx0XHQvLyBjdHguc2F2ZSgpO1xuXHRcdFx0Ly8gY3R4LmZpbGxTdHlsZSA9IFwiYmxhY2tcIjtcblx0XHRcdC8vIGN0eC5zdHJva2VTdHlsZSA9IFwiYmxhY2tcIlxuXHRcdFx0Ly8gY3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0Ly8gY3R4LmFyYyh0aGlzLmNvbnRyb2xQb2ludHMuaW5uZXIueCx0aGlzLmNvbnRyb2xQb2ludHMuaW5uZXIueSwgMiwgMCwgTWF0aC5QSSoyKTtcblx0XHRcdC8vIGN0eC5maWxsKCk7XG5cblx0XHRcdC8vIGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdC8vIGN0eC5hcmModGhpcy5jb250cm9sUG9pbnRzLm91dGVyLngsdGhpcy5jb250cm9sUG9pbnRzLm91dGVyLnksIDIsIDAsIE1hdGguUEkqMik7XG5cdFx0XHQvLyBjdHguZmlsbCgpO1xuXG5cdFx0XHQvLyBjdHgubW92ZVRvKHRoaXMuY29udHJvbFBvaW50cy5pbm5lci54LHRoaXMuY29udHJvbFBvaW50cy5pbm5lci55KTtcblx0XHRcdC8vIGN0eC5saW5lVG8odGhpcy54LCB0aGlzLnkpO1xuXHRcdFx0Ly8gY3R4LmxpbmVUbyh0aGlzLmNvbnRyb2xQb2ludHMub3V0ZXIueCx0aGlzLmNvbnRyb2xQb2ludHMub3V0ZXIueSk7XG5cdFx0XHQvLyBjdHguc3Ryb2tlKCk7XG5cblx0XHRcdC8vIGN0eC5yZXN0b3JlKCk7XG5cblxuXG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5BcmMgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7XG5cdFx0aW5SYW5nZSA6IGZ1bmN0aW9uKGNoYXJ0WCxjaGFydFkpe1xuXG5cdFx0XHR2YXIgcG9pbnRSZWxhdGl2ZVBvc2l0aW9uID0gaGVscGVycy5nZXRBbmdsZUZyb21Qb2ludCh0aGlzLCB7XG5cdFx0XHRcdHg6IGNoYXJ0WCxcblx0XHRcdFx0eTogY2hhcnRZXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9DaGVjayBpZiB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBvcGVuL2Nsb3NlIGFuZ2xlXG5cdFx0XHR2YXIgYmV0d2VlbkFuZ2xlcyA9IChwb2ludFJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPj0gdGhpcy5zdGFydEFuZ2xlICYmIHBvaW50UmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA8PSB0aGlzLmVuZEFuZ2xlKSxcblx0XHRcdFx0d2l0aGluUmFkaXVzID0gKHBvaW50UmVsYXRpdmVQb3NpdGlvbi5kaXN0YW5jZSA+PSB0aGlzLmlubmVyUmFkaXVzICYmIHBvaW50UmVsYXRpdmVQb3NpdGlvbi5kaXN0YW5jZSA8PSB0aGlzLm91dGVyUmFkaXVzKTtcblxuXHRcdFx0cmV0dXJuIChiZXR3ZWVuQW5nbGVzICYmIHdpdGhpblJhZGl1cyk7XG5cdFx0XHQvL0Vuc3VyZSB3aXRoaW4gdGhlIG91dHNpZGUgb2YgdGhlIGFyYyBjZW50cmUsIGJ1dCBpbnNpZGUgYXJjIG91dGVyXG5cdFx0fSxcblx0XHR0b29sdGlwUG9zaXRpb24gOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNlbnRyZUFuZ2xlID0gdGhpcy5zdGFydEFuZ2xlICsgKCh0aGlzLmVuZEFuZ2xlIC0gdGhpcy5zdGFydEFuZ2xlKSAvIDIpLFxuXHRcdFx0XHRyYW5nZUZyb21DZW50cmUgPSAodGhpcy5vdXRlclJhZGl1cyAtIHRoaXMuaW5uZXJSYWRpdXMpIC8gMiArIHRoaXMuaW5uZXJSYWRpdXM7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4IDogdGhpcy54ICsgKE1hdGguY29zKGNlbnRyZUFuZ2xlKSAqIHJhbmdlRnJvbUNlbnRyZSksXG5cdFx0XHRcdHkgOiB0aGlzLnkgKyAoTWF0aC5zaW4oY2VudHJlQW5nbGUpICogcmFuZ2VGcm9tQ2VudHJlKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGRyYXcgOiBmdW5jdGlvbihhbmltYXRpb25QZXJjZW50KXtcblxuXHRcdFx0dmFyIGVhc2luZ0RlY2ltYWwgPSBhbmltYXRpb25QZXJjZW50IHx8IDE7XG5cblx0XHRcdHZhciBjdHggPSB0aGlzLmN0eDtcblxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRjdHguYXJjKHRoaXMueCwgdGhpcy55LCB0aGlzLm91dGVyUmFkaXVzLCB0aGlzLnN0YXJ0QW5nbGUsIHRoaXMuZW5kQW5nbGUpO1xuXG5cdFx0XHRjdHguYXJjKHRoaXMueCwgdGhpcy55LCB0aGlzLmlubmVyUmFkaXVzLCB0aGlzLmVuZEFuZ2xlLCB0aGlzLnN0YXJ0QW5nbGUsIHRydWUpO1xuXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnN0cm9rZUNvbG9yO1xuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuc3Ryb2tlV2lkdGg7XG5cblx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmZpbGxDb2xvcjtcblxuXHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdGN0eC5saW5lSm9pbiA9ICdiZXZlbCc7XG5cblx0XHRcdGlmICh0aGlzLnNob3dTdHJva2Upe1xuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5SZWN0YW5nbGUgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7XG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY3R4ID0gdGhpcy5jdHgsXG5cdFx0XHRcdGhhbGZXaWR0aCA9IHRoaXMud2lkdGgvMixcblx0XHRcdFx0bGVmdFggPSB0aGlzLnggLSBoYWxmV2lkdGgsXG5cdFx0XHRcdHJpZ2h0WCA9IHRoaXMueCArIGhhbGZXaWR0aCxcblx0XHRcdFx0dG9wID0gdGhpcy5iYXNlIC0gKHRoaXMuYmFzZSAtIHRoaXMueSksXG5cdFx0XHRcdGhhbGZTdHJva2UgPSB0aGlzLnN0cm9rZVdpZHRoIC8gMjtcblxuXHRcdFx0Ly8gQ2FudmFzIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3Ryb2tlIGluc2lkZSB0aGUgd2lkdGggc28gd2UgY2FuXG5cdFx0XHQvLyBhZGp1c3QgdGhlIHNpemVzIHRvIGZpdCBpZiB3ZSdyZSBzZXR0aW5nIGEgc3Ryb2tlIG9uIHRoZSBsaW5lXG5cdFx0XHRpZiAodGhpcy5zaG93U3Ryb2tlKXtcblx0XHRcdFx0bGVmdFggKz0gaGFsZlN0cm9rZTtcblx0XHRcdFx0cmlnaHRYIC09IGhhbGZTdHJva2U7XG5cdFx0XHRcdHRvcCArPSBoYWxmU3Ryb2tlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cblx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmZpbGxDb2xvcjtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuc3Ryb2tlQ29sb3I7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDtcblxuXHRcdFx0Ly8gSXQnZCBiZSBuaWNlIHRvIGtlZXAgdGhpcyBjbGFzcyB0b3RhbGx5IGdlbmVyaWMgdG8gYW55IHJlY3RhbmdsZVxuXHRcdFx0Ly8gYW5kIHNpbXBseSBzcGVjaWZ5IHdoaWNoIGJvcmRlciB0byBtaXNzIG91dC5cblx0XHRcdGN0eC5tb3ZlVG8obGVmdFgsIHRoaXMuYmFzZSk7XG5cdFx0XHRjdHgubGluZVRvKGxlZnRYLCB0b3ApO1xuXHRcdFx0Y3R4LmxpbmVUbyhyaWdodFgsIHRvcCk7XG5cdFx0XHRjdHgubGluZVRvKHJpZ2h0WCwgdGhpcy5iYXNlKTtcblx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRpZiAodGhpcy5zaG93U3Ryb2tlKXtcblx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGVpZ2h0IDogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlzLmJhc2UgLSB0aGlzLnk7XG5cdFx0fSxcblx0XHRpblJhbmdlIDogZnVuY3Rpb24oY2hhcnRYLGNoYXJ0WSl7XG5cdFx0XHRyZXR1cm4gKGNoYXJ0WCA+PSB0aGlzLnggLSB0aGlzLndpZHRoLzIgJiYgY2hhcnRYIDw9IHRoaXMueCArIHRoaXMud2lkdGgvMikgJiYgKGNoYXJ0WSA+PSB0aGlzLnkgJiYgY2hhcnRZIDw9IHRoaXMuYmFzZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5Ub29sdGlwID0gQ2hhcnQuRWxlbWVudC5leHRlbmQoe1xuXHRcdGRyYXcgOiBmdW5jdGlvbigpe1xuXG5cdFx0XHR2YXIgY3R4ID0gdGhpcy5jaGFydC5jdHg7XG5cblx0XHRcdGN0eC5mb250ID0gZm9udFN0cmluZyh0aGlzLmZvbnRTaXplLHRoaXMuZm9udFN0eWxlLHRoaXMuZm9udEZhbWlseSk7XG5cblx0XHRcdHRoaXMueEFsaWduID0gXCJjZW50ZXJcIjtcblx0XHRcdHRoaXMueUFsaWduID0gXCJhYm92ZVwiO1xuXG5cdFx0XHQvL0Rpc3RhbmNlIGJldHdlZW4gdGhlIGFjdHVhbCBlbGVtZW50LnkgcG9zaXRpb24gYW5kIHRoZSBzdGFydCBvZiB0aGUgdG9vbHRpcCBjYXJldFxuXHRcdFx0dmFyIGNhcmV0UGFkZGluZyA9IHRoaXMuY2FyZXRQYWRkaW5nID0gMjtcblxuXHRcdFx0dmFyIHRvb2x0aXBXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0aGlzLnRleHQpLndpZHRoICsgMip0aGlzLnhQYWRkaW5nLFxuXHRcdFx0XHR0b29sdGlwUmVjdEhlaWdodCA9IHRoaXMuZm9udFNpemUgKyAyKnRoaXMueVBhZGRpbmcsXG5cdFx0XHRcdHRvb2x0aXBIZWlnaHQgPSB0b29sdGlwUmVjdEhlaWdodCArIHRoaXMuY2FyZXRIZWlnaHQgKyBjYXJldFBhZGRpbmc7XG5cblx0XHRcdGlmICh0aGlzLnggKyB0b29sdGlwV2lkdGgvMiA+dGhpcy5jaGFydC53aWR0aCl7XG5cdFx0XHRcdHRoaXMueEFsaWduID0gXCJsZWZ0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMueCAtIHRvb2x0aXBXaWR0aC8yIDwgMCl7XG5cdFx0XHRcdHRoaXMueEFsaWduID0gXCJyaWdodFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy55IC0gdG9vbHRpcEhlaWdodCA8IDApe1xuXHRcdFx0XHR0aGlzLnlBbGlnbiA9IFwiYmVsb3dcIjtcblx0XHRcdH1cblxuXG5cdFx0XHR2YXIgdG9vbHRpcFggPSB0aGlzLnggLSB0b29sdGlwV2lkdGgvMixcblx0XHRcdFx0dG9vbHRpcFkgPSB0aGlzLnkgLSB0b29sdGlwSGVpZ2h0O1xuXG5cdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5maWxsQ29sb3I7XG5cblx0XHRcdC8vIEN1c3RvbSBUb29sdGlwc1xuXHRcdFx0aWYodGhpcy5jdXN0b20pe1xuXHRcdFx0XHR0aGlzLmN1c3RvbSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHN3aXRjaCh0aGlzLnlBbGlnbilcblx0XHRcdFx0e1xuXHRcdFx0XHRjYXNlIFwiYWJvdmVcIjpcblx0XHRcdFx0XHQvL0RyYXcgYSBjYXJldCBhYm92ZSB0aGUgeC95XG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8odGhpcy54LHRoaXMueSAtIGNhcmV0UGFkZGluZyk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh0aGlzLnggKyB0aGlzLmNhcmV0SGVpZ2h0LCB0aGlzLnkgLSAoY2FyZXRQYWRkaW5nICsgdGhpcy5jYXJldEhlaWdodCkpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8odGhpcy54IC0gdGhpcy5jYXJldEhlaWdodCwgdGhpcy55IC0gKGNhcmV0UGFkZGluZyArIHRoaXMuY2FyZXRIZWlnaHQpKTtcblx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0Y3R4LmZpbGwoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImJlbG93XCI6XG5cdFx0XHRcdFx0dG9vbHRpcFkgPSB0aGlzLnkgKyBjYXJldFBhZGRpbmcgKyB0aGlzLmNhcmV0SGVpZ2h0O1xuXHRcdFx0XHRcdC8vRHJhdyBhIGNhcmV0IGJlbG93IHRoZSB4L3lcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh0aGlzLngsIHRoaXMueSArIGNhcmV0UGFkZGluZyk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh0aGlzLnggKyB0aGlzLmNhcmV0SGVpZ2h0LCB0aGlzLnkgKyBjYXJldFBhZGRpbmcgKyB0aGlzLmNhcmV0SGVpZ2h0KTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHRoaXMueCAtIHRoaXMuY2FyZXRIZWlnaHQsIHRoaXMueSArIGNhcmV0UGFkZGluZyArIHRoaXMuY2FyZXRIZWlnaHQpO1xuXHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0XHRjdHguZmlsbCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3dpdGNoKHRoaXMueEFsaWduKVxuXHRcdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0dG9vbHRpcFggPSB0aGlzLnggLSB0b29sdGlwV2lkdGggKyAodGhpcy5jb3JuZXJSYWRpdXMgKyB0aGlzLmNhcmV0SGVpZ2h0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0dG9vbHRpcFggPSB0aGlzLnggLSAodGhpcy5jb3JuZXJSYWRpdXMgKyB0aGlzLmNhcmV0SGVpZ2h0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRyYXdSb3VuZGVkUmVjdGFuZ2xlKGN0eCx0b29sdGlwWCx0b29sdGlwWSx0b29sdGlwV2lkdGgsdG9vbHRpcFJlY3RIZWlnaHQsdGhpcy5jb3JuZXJSYWRpdXMpO1xuXG5cdFx0XHRcdGN0eC5maWxsKCk7XG5cblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMudGV4dENvbG9yO1xuXHRcdFx0XHRjdHgudGV4dEFsaWduID0gXCJjZW50ZXJcIjtcblx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cdFx0XHRcdGN0eC5maWxsVGV4dCh0aGlzLnRleHQsIHRvb2x0aXBYICsgdG9vbHRpcFdpZHRoLzIsIHRvb2x0aXBZICsgdG9vbHRpcFJlY3RIZWlnaHQvMik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5NdWx0aVRvb2x0aXAgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7XG5cdFx0aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLmZvbnQgPSBmb250U3RyaW5nKHRoaXMuZm9udFNpemUsdGhpcy5mb250U3R5bGUsdGhpcy5mb250RmFtaWx5KTtcblxuXHRcdFx0dGhpcy50aXRsZUZvbnQgPSBmb250U3RyaW5nKHRoaXMudGl0bGVGb250U2l6ZSx0aGlzLnRpdGxlRm9udFN0eWxlLHRoaXMudGl0bGVGb250RmFtaWx5KTtcblxuXHRcdFx0dGhpcy5oZWlnaHQgPSAodGhpcy5sYWJlbHMubGVuZ3RoICogdGhpcy5mb250U2l6ZSkgKyAoKHRoaXMubGFiZWxzLmxlbmd0aC0xKSAqICh0aGlzLmZvbnRTaXplLzIpKSArICh0aGlzLnlQYWRkaW5nKjIpICsgdGhpcy50aXRsZUZvbnRTaXplICoxLjU7XG5cblx0XHRcdHRoaXMuY3R4LmZvbnQgPSB0aGlzLnRpdGxlRm9udDtcblxuXHRcdFx0dmFyIHRpdGxlV2lkdGggPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0aGlzLnRpdGxlKS53aWR0aCxcblx0XHRcdFx0Ly9MYWJlbCBoYXMgYSBsZWdlbmQgc3F1YXJlIGFzIHdlbGwgc28gYWNjb3VudCBmb3IgdGhpcy5cblx0XHRcdFx0bGFiZWxXaWR0aCA9IGxvbmdlc3RUZXh0KHRoaXMuY3R4LHRoaXMuZm9udCx0aGlzLmxhYmVscykgKyB0aGlzLmZvbnRTaXplICsgMyxcblx0XHRcdFx0bG9uZ2VzdFRleHRXaWR0aCA9IG1heChbbGFiZWxXaWR0aCx0aXRsZVdpZHRoXSk7XG5cblx0XHRcdHRoaXMud2lkdGggPSBsb25nZXN0VGV4dFdpZHRoICsgKHRoaXMueFBhZGRpbmcqMik7XG5cblxuXHRcdFx0dmFyIGhhbGZIZWlnaHQgPSB0aGlzLmhlaWdodC8yO1xuXG5cdFx0XHQvL0NoZWNrIHRvIGVuc3VyZSB0aGUgaGVpZ2h0IHdpbGwgZml0IG9uIHRoZSBjYW52YXNcblx0XHRcdGlmICh0aGlzLnkgLSBoYWxmSGVpZ2h0IDwgMCApe1xuXHRcdFx0XHR0aGlzLnkgPSBoYWxmSGVpZ2h0O1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnkgKyBoYWxmSGVpZ2h0ID4gdGhpcy5jaGFydC5oZWlnaHQpe1xuXHRcdFx0XHR0aGlzLnkgPSB0aGlzLmNoYXJ0LmhlaWdodCAtIGhhbGZIZWlnaHQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vRGVjaWRlIHdoZXRoZXIgdG8gYWxpZ24gbGVmdCBvciByaWdodCBiYXNlZCBvbiBwb3NpdGlvbiBvbiBjYW52YXNcblx0XHRcdGlmICh0aGlzLnggPiB0aGlzLmNoYXJ0LndpZHRoLzIpe1xuXHRcdFx0XHR0aGlzLnggLT0gdGhpcy54T2Zmc2V0ICsgdGhpcy53aWR0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMueCArPSB0aGlzLnhPZmZzZXQ7XG5cdFx0XHR9XG5cblxuXHRcdH0sXG5cdFx0Z2V0TGluZUhlaWdodCA6IGZ1bmN0aW9uKGluZGV4KXtcblx0XHRcdHZhciBiYXNlTGluZUhlaWdodCA9IHRoaXMueSAtICh0aGlzLmhlaWdodC8yKSArIHRoaXMueVBhZGRpbmcsXG5cdFx0XHRcdGFmdGVyVGl0bGVJbmRleCA9IGluZGV4LTE7XG5cblx0XHRcdC8vSWYgdGhlIGluZGV4IGlzIHplcm8sIHdlJ3JlIGdldHRpbmcgdGhlIHRpdGxlXG5cdFx0XHRpZiAoaW5kZXggPT09IDApe1xuXHRcdFx0XHRyZXR1cm4gYmFzZUxpbmVIZWlnaHQgKyB0aGlzLnRpdGxlRm9udFNpemUvMjtcblx0XHRcdH0gZWxzZXtcblx0XHRcdFx0cmV0dXJuIGJhc2VMaW5lSGVpZ2h0ICsgKCh0aGlzLmZvbnRTaXplKjEuNSphZnRlclRpdGxlSW5kZXgpICsgdGhpcy5mb250U2l6ZS8yKSArIHRoaXMudGl0bGVGb250U2l6ZSAqIDEuNTtcblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHQvLyBDdXN0b20gVG9vbHRpcHNcblx0XHRcdGlmKHRoaXMuY3VzdG9tKXtcblx0XHRcdFx0dGhpcy5jdXN0b20odGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRkcmF3Um91bmRlZFJlY3RhbmdsZSh0aGlzLmN0eCx0aGlzLngsdGhpcy55IC0gdGhpcy5oZWlnaHQvMix0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LHRoaXMuY29ybmVyUmFkaXVzKTtcblx0XHRcdFx0dmFyIGN0eCA9IHRoaXMuY3R4O1xuXHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5maWxsQ29sb3I7XG5cdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdFx0XHRjdHgudGV4dEFsaWduID0gXCJsZWZ0XCI7XG5cdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy50aXRsZVRleHRDb2xvcjtcblx0XHRcdFx0Y3R4LmZvbnQgPSB0aGlzLnRpdGxlRm9udDtcblxuXHRcdFx0XHRjdHguZmlsbFRleHQodGhpcy50aXRsZSx0aGlzLnggKyB0aGlzLnhQYWRkaW5nLCB0aGlzLmdldExpbmVIZWlnaHQoMCkpO1xuXG5cdFx0XHRcdGN0eC5mb250ID0gdGhpcy5mb250O1xuXHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5sYWJlbHMsZnVuY3Rpb24obGFiZWwsaW5kZXgpe1xuXHRcdFx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLnRleHRDb2xvcjtcblx0XHRcdFx0XHRjdHguZmlsbFRleHQobGFiZWwsdGhpcy54ICsgdGhpcy54UGFkZGluZyArIHRoaXMuZm9udFNpemUgKyAzLCB0aGlzLmdldExpbmVIZWlnaHQoaW5kZXggKyAxKSk7XG5cblx0XHRcdFx0XHQvL0EgYml0IGduYXJseSwgYnV0IGNsZWFyaW5nIHRoaXMgcmVjdGFuZ2xlIGJyZWFrcyB3aGVuIHVzaW5nIGV4cGxvcmVyY2FudmFzIChjbGVhcnMgd2hvbGUgY2FudmFzKVxuXHRcdFx0XHRcdC8vY3R4LmNsZWFyUmVjdCh0aGlzLnggKyB0aGlzLnhQYWRkaW5nLCB0aGlzLmdldExpbmVIZWlnaHQoaW5kZXggKyAxKSAtIHRoaXMuZm9udFNpemUvMiwgdGhpcy5mb250U2l6ZSwgdGhpcy5mb250U2l6ZSk7XG5cdFx0XHRcdFx0Ly9JbnN0ZWFkIHdlJ2xsIG1ha2UgYSB3aGl0ZSBmaWxsZWQgYmxvY2sgdG8gcHV0IHRoZSBsZWdlbmRDb2xvdXIgcGFsZXR0ZSBvdmVyLlxuXG5cdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMubGVnZW5kQ29sb3JCYWNrZ3JvdW5kO1xuXHRcdFx0XHRcdGN0eC5maWxsUmVjdCh0aGlzLnggKyB0aGlzLnhQYWRkaW5nLCB0aGlzLmdldExpbmVIZWlnaHQoaW5kZXggKyAxKSAtIHRoaXMuZm9udFNpemUvMiwgdGhpcy5mb250U2l6ZSwgdGhpcy5mb250U2l6ZSk7XG5cblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGhpcy5sZWdlbmRDb2xvcnNbaW5kZXhdLmZpbGw7XG5cdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KHRoaXMueCArIHRoaXMueFBhZGRpbmcsIHRoaXMuZ2V0TGluZUhlaWdodChpbmRleCArIDEpIC0gdGhpcy5mb250U2l6ZS8yLCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRTaXplKTtcblxuXG5cdFx0XHRcdH0sdGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC5TY2FsZSA9IENoYXJ0LkVsZW1lbnQuZXh0ZW5kKHtcblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuZml0KCk7XG5cdFx0fSxcblx0XHRidWlsZFlMYWJlbHMgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy55TGFiZWxzID0gW107XG5cblx0XHRcdHZhciBzdGVwRGVjaW1hbFBsYWNlcyA9IGdldERlY2ltYWxQbGFjZXModGhpcy5zdGVwVmFsdWUpO1xuXG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8PXRoaXMuc3RlcHM7IGkrKyl7XG5cdFx0XHRcdHRoaXMueUxhYmVscy5wdXNoKHRlbXBsYXRlKHRoaXMudGVtcGxhdGVTdHJpbmcse3ZhbHVlOih0aGlzLm1pbiArIChpICogdGhpcy5zdGVwVmFsdWUpKS50b0ZpeGVkKHN0ZXBEZWNpbWFsUGxhY2VzKX0pKTtcblx0XHRcdH1cblx0XHRcdHRoaXMueUxhYmVsV2lkdGggPSAodGhpcy5kaXNwbGF5ICYmIHRoaXMuc2hvd0xhYmVscykgPyBsb25nZXN0VGV4dCh0aGlzLmN0eCx0aGlzLmZvbnQsdGhpcy55TGFiZWxzKSA6IDA7XG5cdFx0fSxcblx0XHRhZGRYTGFiZWwgOiBmdW5jdGlvbihsYWJlbCl7XG5cdFx0XHR0aGlzLnhMYWJlbHMucHVzaChsYWJlbCk7XG5cdFx0XHR0aGlzLnZhbHVlc0NvdW50Kys7XG5cdFx0XHR0aGlzLmZpdCgpO1xuXHRcdH0sXG5cdFx0cmVtb3ZlWExhYmVsIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMueExhYmVscy5zaGlmdCgpO1xuXHRcdFx0dGhpcy52YWx1ZXNDb3VudC0tO1xuXHRcdFx0dGhpcy5maXQoKTtcblx0XHR9LFxuXHRcdC8vIEZpdHRpbmcgbG9vcCB0byByb3RhdGUgeCBMYWJlbHMgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmaXRzIHRoZXJlLCBhbmQgYWxzbyBjYWxjdWxhdGUgaG93IG1hbnkgWSBzdGVwcyB0byB1c2Vcblx0XHRmaXQ6IGZ1bmN0aW9uKCl7XG5cdFx0XHQvLyBGaXJzdCB3ZSBuZWVkIHRoZSB3aWR0aCBvZiB0aGUgeUxhYmVscywgYXNzdW1pbmcgdGhlIHhMYWJlbHMgYXJlbid0IHJvdGF0ZWRcblxuXHRcdFx0Ly8gVG8gZG8gdGhhdCB3ZSBuZWVkIHRoZSBiYXNlIGxpbmUgYXQgdGhlIHRvcCBhbmQgYmFzZSBvZiB0aGUgY2hhcnQsIGFzc3VtaW5nIHRoZXJlIGlzIG5vIHggbGFiZWwgcm90YXRpb25cblx0XHRcdHRoaXMuc3RhcnRQb2ludCA9ICh0aGlzLmRpc3BsYXkpID8gdGhpcy5mb250U2l6ZSA6IDA7XG5cdFx0XHR0aGlzLmVuZFBvaW50ID0gKHRoaXMuZGlzcGxheSkgPyB0aGlzLmhlaWdodCAtICh0aGlzLmZvbnRTaXplICogMS41KSAtIDUgOiB0aGlzLmhlaWdodDsgLy8gLTUgdG8gcGFkIGxhYmVsc1xuXG5cdFx0XHQvLyBBcHBseSBwYWRkaW5nIHNldHRpbmdzIHRvIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50LlxuXHRcdFx0dGhpcy5zdGFydFBvaW50ICs9IHRoaXMucGFkZGluZztcblx0XHRcdHRoaXMuZW5kUG9pbnQgLT0gdGhpcy5wYWRkaW5nO1xuXG5cdFx0XHQvLyBDYWNoZSB0aGUgc3RhcnRpbmcgaGVpZ2h0LCBzbyBjYW4gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHNjYWxlIHlBeGlzXG5cdFx0XHR2YXIgY2FjaGVkSGVpZ2h0ID0gdGhpcy5lbmRQb2ludCAtIHRoaXMuc3RhcnRQb2ludCxcblx0XHRcdFx0Y2FjaGVkWUxhYmVsV2lkdGg7XG5cblx0XHRcdC8vIEJ1aWxkIHRoZSBjdXJyZW50IHlMYWJlbHMgc28gd2UgaGF2ZSBhbiBpZGVhIG9mIHdoYXQgc2l6ZSB0aGV5J2xsIGJlIHRvIHN0YXJ0XG5cdFx0XHQvKlxuXHRcdFx0ICpcdFRoaXMgc2V0cyB3aGF0IGlzIHJldHVybmVkIGZyb20gY2FsY3VsYXRlU2NhbGVSYW5nZSBhcyBzdGF0aWMgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzOlxuXHRcdFx0ICpcblx0XHRcdFx0dGhpcy5zdGVwcztcblx0XHRcdFx0dGhpcy5zdGVwVmFsdWU7XG5cdFx0XHRcdHRoaXMubWluO1xuXHRcdFx0XHR0aGlzLm1heDtcblx0XHRcdCAqXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY2FsY3VsYXRlWVJhbmdlKGNhY2hlZEhlaWdodCk7XG5cblx0XHRcdC8vIFdpdGggdGhlc2UgcHJvcGVydGllcyBzZXQgd2UgY2FuIG5vdyBidWlsZCB0aGUgYXJyYXkgb2YgeUxhYmVsc1xuXHRcdFx0Ly8gYW5kIGFsc28gdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHlMYWJlbFxuXHRcdFx0dGhpcy5idWlsZFlMYWJlbHMoKTtcblxuXHRcdFx0dGhpcy5jYWxjdWxhdGVYTGFiZWxSb3RhdGlvbigpO1xuXG5cdFx0XHR3aGlsZSgoY2FjaGVkSGVpZ2h0ID4gdGhpcy5lbmRQb2ludCAtIHRoaXMuc3RhcnRQb2ludCkpe1xuXHRcdFx0XHRjYWNoZWRIZWlnaHQgPSB0aGlzLmVuZFBvaW50IC0gdGhpcy5zdGFydFBvaW50O1xuXHRcdFx0XHRjYWNoZWRZTGFiZWxXaWR0aCA9IHRoaXMueUxhYmVsV2lkdGg7XG5cblx0XHRcdFx0dGhpcy5jYWxjdWxhdGVZUmFuZ2UoY2FjaGVkSGVpZ2h0KTtcblx0XHRcdFx0dGhpcy5idWlsZFlMYWJlbHMoKTtcblxuXHRcdFx0XHQvLyBPbmx5IGdvIHRocm91Z2ggdGhlIHhMYWJlbCBsb29wIGFnYWluIGlmIHRoZSB5TGFiZWwgd2lkdGggaGFzIGNoYW5nZWRcblx0XHRcdFx0aWYgKGNhY2hlZFlMYWJlbFdpZHRoIDwgdGhpcy55TGFiZWxXaWR0aCl7XG5cdFx0XHRcdFx0dGhpcy5jYWxjdWxhdGVYTGFiZWxSb3RhdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9LFxuXHRcdGNhbGN1bGF0ZVhMYWJlbFJvdGF0aW9uIDogZnVuY3Rpb24oKXtcblx0XHRcdC8vR2V0IHRoZSB3aWR0aCBvZiBlYWNoIGdyaWQgYnkgY2FsY3VsYXRpbmcgdGhlIGRpZmZlcmVuY2Vcblx0XHRcdC8vYmV0d2VlbiB4IG9mZnNldHMgYmV0d2VlbiAwIGFuZCAxLlxuXG5cdFx0XHR0aGlzLmN0eC5mb250ID0gdGhpcy5mb250O1xuXG5cdFx0XHR2YXIgZmlyc3RXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRoaXMueExhYmVsc1swXSkud2lkdGgsXG5cdFx0XHRcdGxhc3RXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRoaXMueExhYmVsc1t0aGlzLnhMYWJlbHMubGVuZ3RoIC0gMV0pLndpZHRoLFxuXHRcdFx0XHRmaXJzdFJvdGF0ZWQsXG5cdFx0XHRcdGxhc3RSb3RhdGVkO1xuXG5cblx0XHRcdHRoaXMueFNjYWxlUGFkZGluZ1JpZ2h0ID0gbGFzdFdpZHRoLzIgKyAzO1xuXHRcdFx0dGhpcy54U2NhbGVQYWRkaW5nTGVmdCA9IChmaXJzdFdpZHRoLzIgPiB0aGlzLnlMYWJlbFdpZHRoICsgMTApID8gZmlyc3RXaWR0aC8yIDogdGhpcy55TGFiZWxXaWR0aCArIDEwO1xuXG5cdFx0XHR0aGlzLnhMYWJlbFJvdGF0aW9uID0gMDtcblx0XHRcdGlmICh0aGlzLmRpc3BsYXkpe1xuXHRcdFx0XHR2YXIgb3JpZ2luYWxMYWJlbFdpZHRoID0gbG9uZ2VzdFRleHQodGhpcy5jdHgsdGhpcy5mb250LHRoaXMueExhYmVscyksXG5cdFx0XHRcdFx0Y29zUm90YXRpb24sXG5cdFx0XHRcdFx0Zmlyc3RSb3RhdGVkV2lkdGg7XG5cdFx0XHRcdHRoaXMueExhYmVsV2lkdGggPSBvcmlnaW5hbExhYmVsV2lkdGg7XG5cdFx0XHRcdC8vQWxsb3cgMyBwaXhlbHMgeDIgcGFkZGluZyBlaXRoZXIgc2lkZSBmb3IgbGFiZWwgcmVhZGFiaWxpdHlcblx0XHRcdFx0dmFyIHhHcmlkV2lkdGggPSBNYXRoLmZsb29yKHRoaXMuY2FsY3VsYXRlWCgxKSAtIHRoaXMuY2FsY3VsYXRlWCgwKSkgLSA2O1xuXG5cdFx0XHRcdC8vTWF4IGxhYmVsIHJvdGF0ZSBzaG91bGQgYmUgOTAgLSBhbHNvIGFjdCBhcyBhIGxvb3AgY291bnRlclxuXHRcdFx0XHR3aGlsZSAoKHRoaXMueExhYmVsV2lkdGggPiB4R3JpZFdpZHRoICYmIHRoaXMueExhYmVsUm90YXRpb24gPT09IDApIHx8ICh0aGlzLnhMYWJlbFdpZHRoID4geEdyaWRXaWR0aCAmJiB0aGlzLnhMYWJlbFJvdGF0aW9uIDw9IDkwICYmIHRoaXMueExhYmVsUm90YXRpb24gPiAwKSl7XG5cdFx0XHRcdFx0Y29zUm90YXRpb24gPSBNYXRoLmNvcyh0b1JhZGlhbnModGhpcy54TGFiZWxSb3RhdGlvbikpO1xuXG5cdFx0XHRcdFx0Zmlyc3RSb3RhdGVkID0gY29zUm90YXRpb24gKiBmaXJzdFdpZHRoO1xuXHRcdFx0XHRcdGxhc3RSb3RhdGVkID0gY29zUm90YXRpb24gKiBsYXN0V2lkdGg7XG5cblx0XHRcdFx0XHQvLyBXZSdyZSByaWdodCBhbGlnbmluZyB0aGUgdGV4dCBub3cuXG5cdFx0XHRcdFx0aWYgKGZpcnN0Um90YXRlZCArIHRoaXMuZm9udFNpemUgLyAyID4gdGhpcy55TGFiZWxXaWR0aCArIDgpe1xuXHRcdFx0XHRcdFx0dGhpcy54U2NhbGVQYWRkaW5nTGVmdCA9IGZpcnN0Um90YXRlZCArIHRoaXMuZm9udFNpemUgLyAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnhTY2FsZVBhZGRpbmdSaWdodCA9IHRoaXMuZm9udFNpemUvMjtcblxuXG5cdFx0XHRcdFx0dGhpcy54TGFiZWxSb3RhdGlvbisrO1xuXHRcdFx0XHRcdHRoaXMueExhYmVsV2lkdGggPSBjb3NSb3RhdGlvbiAqIG9yaWdpbmFsTGFiZWxXaWR0aDtcblxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLnhMYWJlbFJvdGF0aW9uID4gMCl7XG5cdFx0XHRcdFx0dGhpcy5lbmRQb2ludCAtPSBNYXRoLnNpbih0b1JhZGlhbnModGhpcy54TGFiZWxSb3RhdGlvbikpKm9yaWdpbmFsTGFiZWxXaWR0aCArIDM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHRoaXMueExhYmVsV2lkdGggPSAwO1xuXHRcdFx0XHR0aGlzLnhTY2FsZVBhZGRpbmdSaWdodCA9IHRoaXMucGFkZGluZztcblx0XHRcdFx0dGhpcy54U2NhbGVQYWRkaW5nTGVmdCA9IHRoaXMucGFkZGluZztcblx0XHRcdH1cblxuXHRcdH0sXG5cdFx0Ly8gTmVlZHMgdG8gYmUgb3ZlcmlkZGVuIGluIGVhY2ggQ2hhcnQgdHlwZVxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRvIHBhc3MgYWxsIHRoZSBkYXRhIGludG8gdGhlIHNjYWxlIGNsYXNzXG5cdFx0Y2FsY3VsYXRlWVJhbmdlOiBub29wLFxuXHRcdGRyYXdpbmdBcmVhOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RhcnRQb2ludCAtIHRoaXMuZW5kUG9pbnQ7XG5cdFx0fSxcblx0XHRjYWxjdWxhdGVZIDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0dmFyIHNjYWxpbmdGYWN0b3IgPSB0aGlzLmRyYXdpbmdBcmVhKCkgLyAodGhpcy5taW4gLSB0aGlzLm1heCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5lbmRQb2ludCAtIChzY2FsaW5nRmFjdG9yICogKHZhbHVlIC0gdGhpcy5taW4pKTtcblx0XHR9LFxuXHRcdGNhbGN1bGF0ZVggOiBmdW5jdGlvbihpbmRleCl7XG5cdFx0XHR2YXIgaXNSb3RhdGVkID0gKHRoaXMueExhYmVsUm90YXRpb24gPiAwKSxcblx0XHRcdFx0Ly8gaW5uZXJXaWR0aCA9ICh0aGlzLm9mZnNldEdyaWRMaW5lcykgPyB0aGlzLndpZHRoIC0gb2Zmc2V0TGVmdCAtIHRoaXMucGFkZGluZyA6IHRoaXMud2lkdGggLSAob2Zmc2V0TGVmdCArIGhhbGZMYWJlbFdpZHRoICogMikgLSB0aGlzLnBhZGRpbmcsXG5cdFx0XHRcdGlubmVyV2lkdGggPSB0aGlzLndpZHRoIC0gKHRoaXMueFNjYWxlUGFkZGluZ0xlZnQgKyB0aGlzLnhTY2FsZVBhZGRpbmdSaWdodCksXG5cdFx0XHRcdHZhbHVlV2lkdGggPSBpbm5lcldpZHRoL01hdGgubWF4KCh0aGlzLnZhbHVlc0NvdW50IC0gKCh0aGlzLm9mZnNldEdyaWRMaW5lcykgPyAwIDogMSkpLCAxKSxcblx0XHRcdFx0dmFsdWVPZmZzZXQgPSAodmFsdWVXaWR0aCAqIGluZGV4KSArIHRoaXMueFNjYWxlUGFkZGluZ0xlZnQ7XG5cblx0XHRcdGlmICh0aGlzLm9mZnNldEdyaWRMaW5lcyl7XG5cdFx0XHRcdHZhbHVlT2Zmc2V0ICs9ICh2YWx1ZVdpZHRoLzIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZU9mZnNldCk7XG5cdFx0fSxcblx0XHR1cGRhdGUgOiBmdW5jdGlvbihuZXdQcm9wcyl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLCBuZXdQcm9wcyk7XG5cdFx0XHR0aGlzLmZpdCgpO1xuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY3R4ID0gdGhpcy5jdHgsXG5cdFx0XHRcdHlMYWJlbEdhcCA9ICh0aGlzLmVuZFBvaW50IC0gdGhpcy5zdGFydFBvaW50KSAvIHRoaXMuc3RlcHMsXG5cdFx0XHRcdHhTdGFydCA9IE1hdGgucm91bmQodGhpcy54U2NhbGVQYWRkaW5nTGVmdCk7XG5cdFx0XHRpZiAodGhpcy5kaXNwbGF5KXtcblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMudGV4dENvbG9yO1xuXHRcdFx0XHRjdHguZm9udCA9IHRoaXMuZm9udDtcblx0XHRcdFx0ZWFjaCh0aGlzLnlMYWJlbHMsZnVuY3Rpb24obGFiZWxTdHJpbmcsaW5kZXgpe1xuXHRcdFx0XHRcdHZhciB5TGFiZWxDZW50ZXIgPSB0aGlzLmVuZFBvaW50IC0gKHlMYWJlbEdhcCAqIGluZGV4KSxcblx0XHRcdFx0XHRcdGxpbmVQb3NpdGlvblkgPSBNYXRoLnJvdW5kKHlMYWJlbENlbnRlciksXG5cdFx0XHRcdFx0XHRkcmF3SG9yaXpvbnRhbExpbmUgPSB0aGlzLnNob3dIb3Jpem9udGFsTGluZXM7XG5cblx0XHRcdFx0XHRjdHgudGV4dEFsaWduID0gXCJyaWdodFwiO1xuXHRcdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXHRcdFx0XHRcdGlmICh0aGlzLnNob3dMYWJlbHMpe1xuXHRcdFx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxhYmVsU3RyaW5nLHhTdGFydCAtIDEwLHlMYWJlbENlbnRlcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBYIGF4aXMsIHNvIGRyYXcgaXRcblx0XHRcdFx0XHRpZiAoaW5kZXggPT09IDAgJiYgIWRyYXdIb3Jpem9udGFsTGluZSl7XG5cdFx0XHRcdFx0XHRkcmF3SG9yaXpvbnRhbExpbmUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkcmF3SG9yaXpvbnRhbExpbmUpe1xuXHRcdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpbmRleCA+IDApe1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIGdyaWQgbGluZSBpbiB0aGUgY2VudHJlLCBzbyBkcm9wIHRoYXRcblx0XHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmdyaWRMaW5lV2lkdGg7XG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdyaWRMaW5lQ29sb3I7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb24gdGhlIHNjYWxlXG5cdFx0XHRcdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG5cdFx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmxpbmVDb2xvcjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRsaW5lUG9zaXRpb25ZICs9IGhlbHBlcnMuYWxpYXNQaXhlbChjdHgubGluZVdpZHRoKTtcblxuXHRcdFx0XHRcdGlmKGRyYXdIb3Jpem9udGFsTGluZSl7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKHhTdGFydCwgbGluZVBvc2l0aW9uWSk7XG5cdFx0XHRcdFx0XHRjdHgubGluZVRvKHRoaXMud2lkdGgsIGxpbmVQb3NpdGlvblkpO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcblx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmxpbmVDb2xvcjtcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0Y3R4Lm1vdmVUbyh4U3RhcnQgLSA1LCBsaW5lUG9zaXRpb25ZKTtcblx0XHRcdFx0XHRjdHgubGluZVRvKHhTdGFydCwgbGluZVBvc2l0aW9uWSk7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHRcdGVhY2godGhpcy54TGFiZWxzLGZ1bmN0aW9uKGxhYmVsLGluZGV4KXtcblx0XHRcdFx0XHR2YXIgeFBvcyA9IHRoaXMuY2FsY3VsYXRlWChpbmRleCkgKyBhbGlhc1BpeGVsKHRoaXMubGluZVdpZHRoKSxcblx0XHRcdFx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBsaW5lL2JhciBoZXJlIGFuZCBkZWNpZGUgd2hlcmUgdG8gcGxhY2UgdGhlIGxpbmVcblx0XHRcdFx0XHRcdGxpbmVQb3MgPSB0aGlzLmNhbGN1bGF0ZVgoaW5kZXggLSAodGhpcy5vZmZzZXRHcmlkTGluZXMgPyAwLjUgOiAwKSkgKyBhbGlhc1BpeGVsKHRoaXMubGluZVdpZHRoKSxcblx0XHRcdFx0XHRcdGlzUm90YXRlZCA9ICh0aGlzLnhMYWJlbFJvdGF0aW9uID4gMCksXG5cdFx0XHRcdFx0XHRkcmF3VmVydGljYWxMaW5lID0gdGhpcy5zaG93VmVydGljYWxMaW5lcztcblxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgWSBheGlzLCBzbyBkcmF3IGl0XG5cdFx0XHRcdFx0aWYgKGluZGV4ID09PSAwICYmICFkcmF3VmVydGljYWxMaW5lKXtcblx0XHRcdFx0XHRcdGRyYXdWZXJ0aWNhbExpbmUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkcmF3VmVydGljYWxMaW5lKXtcblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaW5kZXggPiAwKXtcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBncmlkIGxpbmUgaW4gdGhlIGNlbnRyZSwgc28gZHJvcCB0aGF0XG5cdFx0XHRcdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5ncmlkTGluZVdpZHRoO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5ncmlkTGluZUNvbG9yO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9uIHRoZSBzY2FsZVxuXHRcdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5saW5lQ29sb3I7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRyYXdWZXJ0aWNhbExpbmUpe1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhsaW5lUG9zLHRoaXMuZW5kUG9pbnQpO1xuXHRcdFx0XHRcdFx0Y3R4LmxpbmVUbyhsaW5lUG9zLHRoaXMuc3RhcnRQb2ludCAtIDMpO1xuXHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZVdpZHRoO1xuXHRcdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHRoaXMubGluZUNvbG9yO1xuXG5cblx0XHRcdFx0XHQvLyBTbWFsbCBsaW5lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBiYXNlIGdyaWQgbGluZVxuXHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRjdHgubW92ZVRvKGxpbmVQb3MsdGhpcy5lbmRQb2ludCk7XG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyhsaW5lUG9zLHRoaXMuZW5kUG9pbnQgKyA1KTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRcdFx0Y3R4LnNhdmUoKTtcblx0XHRcdFx0XHRjdHgudHJhbnNsYXRlKHhQb3MsKGlzUm90YXRlZCkgPyB0aGlzLmVuZFBvaW50ICsgMTIgOiB0aGlzLmVuZFBvaW50ICsgOCk7XG5cdFx0XHRcdFx0Y3R4LnJvdGF0ZSh0b1JhZGlhbnModGhpcy54TGFiZWxSb3RhdGlvbikqLTEpO1xuXHRcdFx0XHRcdGN0eC5mb250ID0gdGhpcy5mb250O1xuXHRcdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSAoaXNSb3RhdGVkKSA/IFwicmlnaHRcIiA6IFwiY2VudGVyXCI7XG5cdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9IChpc1JvdGF0ZWQpID8gXCJtaWRkbGVcIiA6IFwidG9wXCI7XG5cdFx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxhYmVsLCAwLCAwKTtcblx0XHRcdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdH0pO1xuXG5cdENoYXJ0LlJhZGlhbFNjYWxlID0gQ2hhcnQuRWxlbWVudC5leHRlbmQoe1xuXHRcdGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNpemUgPSBtaW4oW3RoaXMuaGVpZ2h0LCB0aGlzLndpZHRoXSk7XG5cdFx0XHR0aGlzLmRyYXdpbmdBcmVhID0gKHRoaXMuZGlzcGxheSkgPyAodGhpcy5zaXplLzIpIC0gKHRoaXMuZm9udFNpemUvMiArIHRoaXMuYmFja2Ryb3BQYWRkaW5nWSkgOiAodGhpcy5zaXplLzIpO1xuXHRcdH0sXG5cdFx0Y2FsY3VsYXRlQ2VudGVyT2Zmc2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHQvLyBUYWtlIGludG8gYWNjb3VudCBoYWxmIGZvbnQgc2l6ZSArIHRoZSB5UGFkZGluZyBvZiB0aGUgdG9wIHZhbHVlXG5cdFx0XHR2YXIgc2NhbGluZ0ZhY3RvciA9IHRoaXMuZHJhd2luZ0FyZWEgLyAodGhpcy5tYXggLSB0aGlzLm1pbik7XG5cblx0XHRcdHJldHVybiAodmFsdWUgLSB0aGlzLm1pbikgKiBzY2FsaW5nRmFjdG9yO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdGlmICghdGhpcy5saW5lQXJjKXtcblx0XHRcdFx0dGhpcy5zZXRTY2FsZVNpemUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZHJhd2luZ0FyZWEgPSAodGhpcy5kaXNwbGF5KSA/ICh0aGlzLnNpemUvMikgLSAodGhpcy5mb250U2l6ZS8yICsgdGhpcy5iYWNrZHJvcFBhZGRpbmdZKSA6ICh0aGlzLnNpemUvMik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmJ1aWxkWUxhYmVscygpO1xuXHRcdH0sXG5cdFx0YnVpbGRZTGFiZWxzOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy55TGFiZWxzID0gW107XG5cblx0XHRcdHZhciBzdGVwRGVjaW1hbFBsYWNlcyA9IGdldERlY2ltYWxQbGFjZXModGhpcy5zdGVwVmFsdWUpO1xuXG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8PXRoaXMuc3RlcHM7IGkrKyl7XG5cdFx0XHRcdHRoaXMueUxhYmVscy5wdXNoKHRlbXBsYXRlKHRoaXMudGVtcGxhdGVTdHJpbmcse3ZhbHVlOih0aGlzLm1pbiArIChpICogdGhpcy5zdGVwVmFsdWUpKS50b0ZpeGVkKHN0ZXBEZWNpbWFsUGxhY2VzKX0pKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldENpcmN1bWZlcmVuY2UgOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuICgoTWF0aC5QSSoyKSAvIHRoaXMudmFsdWVzQ291bnQpO1xuXHRcdH0sXG5cdFx0c2V0U2NhbGVTaXplOiBmdW5jdGlvbigpe1xuXHRcdFx0Lypcblx0XHRcdCAqIFJpZ2h0LCB0aGlzIGlzIHJlYWxseSBjb25mdXNpbmcgYW5kIHRoZXJlIGlzIGEgbG90IG9mIG1hdGhzIGdvaW5nIG9uIGhlcmVcblx0XHRcdCAqIFRoZSBnaXN0IG9mIHRoZSBwcm9ibGVtIGlzIGhlcmU6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25ubmljay82OTZjYzljNTVmNGIwYmViOGZlOVxuXHRcdFx0ICpcblx0XHRcdCAqIFJlYWN0aW9uOiBodHRwczovL2RsLmRyb3Bib3h1c2VyY29udGVudC5jb20vdS8zNDYwMTM2My90b29tdWNoc2NpZW5jZS5naWZcblx0XHRcdCAqXG5cdFx0XHQgKiBTb2x1dGlvbjpcblx0XHRcdCAqXG5cdFx0XHQgKiBXZSBhc3N1bWUgdGhlIHJhZGl1cyBvZiB0aGUgcG9seWdvbiBpcyBoYWxmIHRoZSBzaXplIG9mIHRoZSBjYW52YXMgYXQgZmlyc3Rcblx0XHRcdCAqIGF0IGVhY2ggaW5kZXggd2UgY2hlY2sgaWYgdGhlIHRleHQgb3ZlcmxhcHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogV2hlcmUgaXQgZG9lcywgd2Ugc3RvcmUgdGhhdCBhbmdsZSBhbmQgdGhhdCBpbmRleC5cblx0XHRcdCAqXG5cdFx0XHQgKiBBZnRlciBmaW5kaW5nIHRoZSBsYXJnZXN0IGluZGV4IGFuZCBhbmdsZSB3ZSBjYWxjdWxhdGUgaG93IG11Y2ggd2UgbmVlZCB0byByZW1vdmVcblx0XHRcdCAqIGZyb20gdGhlIHNoYXBlIHJhZGl1cyB0byBtb3ZlIHRoZSBwb2ludCBpbndhcmRzIGJ5IHRoYXQgeC5cblx0XHRcdCAqXG5cdFx0XHQgKiBXZSBhdmVyYWdlIHRoZSBsZWZ0IGFuZCByaWdodCBkaXN0YW5jZXMgdG8gZ2V0IHRoZSBtYXhpbXVtIHNoYXBlIHJhZGl1cyB0aGF0IGNhbiBmaXQgaW4gdGhlIGJveFxuXHRcdFx0ICogYWxvbmcgd2l0aCBsYWJlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogT25jZSB3ZSBoYXZlIHRoYXQsIHdlIGNhbiBmaW5kIHRoZSBjZW50cmUgcG9pbnQgZm9yIHRoZSBjaGFydCwgYnkgdGFraW5nIHRoZSB4IHRleHQgcHJvdHJ1c2lvblxuXHRcdFx0ICogb24gZWFjaCBzaWRlLCByZW1vdmluZyB0aGF0IGZyb20gdGhlIHNpemUsIGhhbHZpbmcgaXQgYW5kIGFkZGluZyB0aGUgbGVmdCB4IHByb3RydXNpb24gd2lkdGguXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyB3aWxsIG1lYW4gd2UgaGF2ZSBhIHNoYXBlIGZpdHRlZCB0byB0aGUgY2FudmFzLCBhcyBsYXJnZSBhcyBpdCBjYW4gYmUgd2l0aCB0aGUgbGFiZWxzXG5cdFx0XHQgKiBhbmQgcG9zaXRpb24gaXQgaW4gdGhlIG1vc3Qgc3BhY2UgZWZmaWNpZW50IG1hbm5lclxuXHRcdFx0ICpcblx0XHRcdCAqIGh0dHBzOi8vZGwuZHJvcGJveHVzZXJjb250ZW50LmNvbS91LzM0NjAxMzYzL3llYWhzY2llbmNlLmdpZlxuXHRcdFx0ICovXG5cblxuXHRcdFx0Ly8gR2V0IG1heGltdW0gcmFkaXVzIG9mIHRoZSBwb2x5Z29uLiBFaXRoZXIgaGFsZiB0aGUgaGVpZ2h0IChtaW51cyB0aGUgdGV4dCB3aWR0aCkgb3IgaGFsZiB0aGUgd2lkdGguXG5cdFx0XHQvLyBVc2UgdGhpcyB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCArIGNoYW5nZS4gLSBNYWtlIHN1cmUgTC9SIHByb3RydXNpb24gaXMgYXQgbGVhc3QgMCB0byBzdG9wIGlzc3VlcyB3aXRoIGNlbnRyZSBwb2ludHNcblx0XHRcdHZhciBsYXJnZXN0UG9zc2libGVSYWRpdXMgPSBtaW4oWyh0aGlzLmhlaWdodC8yIC0gdGhpcy5wb2ludExhYmVsRm9udFNpemUgLSA1KSwgdGhpcy53aWR0aC8yXSksXG5cdFx0XHRcdHBvaW50UG9zaXRpb24sXG5cdFx0XHRcdGksXG5cdFx0XHRcdHRleHRXaWR0aCxcblx0XHRcdFx0aGFsZlRleHRXaWR0aCxcblx0XHRcdFx0ZnVydGhlc3RSaWdodCA9IHRoaXMud2lkdGgsXG5cdFx0XHRcdGZ1cnRoZXN0UmlnaHRJbmRleCxcblx0XHRcdFx0ZnVydGhlc3RSaWdodEFuZ2xlLFxuXHRcdFx0XHRmdXJ0aGVzdExlZnQgPSAwLFxuXHRcdFx0XHRmdXJ0aGVzdExlZnRJbmRleCxcblx0XHRcdFx0ZnVydGhlc3RMZWZ0QW5nbGUsXG5cdFx0XHRcdHhQcm90cnVzaW9uTGVmdCxcblx0XHRcdFx0eFByb3RydXNpb25SaWdodCxcblx0XHRcdFx0cmFkaXVzUmVkdWN0aW9uUmlnaHQsXG5cdFx0XHRcdHJhZGl1c1JlZHVjdGlvbkxlZnQsXG5cdFx0XHRcdG1heFdpZHRoUmFkaXVzO1xuXHRcdFx0dGhpcy5jdHguZm9udCA9IGZvbnRTdHJpbmcodGhpcy5wb2ludExhYmVsRm9udFNpemUsdGhpcy5wb2ludExhYmVsRm9udFN0eWxlLHRoaXMucG9pbnRMYWJlbEZvbnRGYW1pbHkpO1xuXHRcdFx0Zm9yIChpPTA7aTx0aGlzLnZhbHVlc0NvdW50O2krKyl7XG5cdFx0XHRcdC8vIDVweCB0byBzcGFjZSB0aGUgdGV4dCBzbGlnaHRseSBvdXQgLSBzaW1pbGFyIHRvIHdoYXQgd2UgZG8gaW4gdGhlIGRyYXcgZnVuY3Rpb24uXG5cdFx0XHRcdHBvaW50UG9zaXRpb24gPSB0aGlzLmdldFBvaW50UG9zaXRpb24oaSwgbGFyZ2VzdFBvc3NpYmxlUmFkaXVzKTtcblx0XHRcdFx0dGV4dFdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGVtcGxhdGUodGhpcy50ZW1wbGF0ZVN0cmluZywgeyB2YWx1ZTogdGhpcy5sYWJlbHNbaV0gfSkpLndpZHRoICsgNTtcblx0XHRcdFx0aWYgKGkgPT09IDAgfHwgaSA9PT0gdGhpcy52YWx1ZXNDb3VudC8yKXtcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBhdCBpbmRleCB6ZXJvLCBvciBleGFjdGx5IHRoZSBtaWRkbGUsIHdlJ3JlIGF0IGV4YWN0bHkgdGhlIHRvcC9ib3R0b21cblx0XHRcdFx0XHQvLyBvZiB0aGUgcmFkYXIgY2hhcnQsIHNvIHRleHQgd2lsbCBiZSBhbGlnbmVkIGNlbnRyYWxseSwgc28gd2UnbGwgaGFsZiBpdCBhbmQgY29tcGFyZVxuXHRcdFx0XHRcdC8vIHcvbGVmdCBhbmQgcmlnaHQgdGV4dCBzaXplc1xuXHRcdFx0XHRcdGhhbGZUZXh0V2lkdGggPSB0ZXh0V2lkdGgvMjtcblx0XHRcdFx0XHRpZiAocG9pbnRQb3NpdGlvbi54ICsgaGFsZlRleHRXaWR0aCA+IGZ1cnRoZXN0UmlnaHQpIHtcblx0XHRcdFx0XHRcdGZ1cnRoZXN0UmlnaHQgPSBwb2ludFBvc2l0aW9uLnggKyBoYWxmVGV4dFdpZHRoO1xuXHRcdFx0XHRcdFx0ZnVydGhlc3RSaWdodEluZGV4ID0gaTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHBvaW50UG9zaXRpb24ueCAtIGhhbGZUZXh0V2lkdGggPCBmdXJ0aGVzdExlZnQpIHtcblx0XHRcdFx0XHRcdGZ1cnRoZXN0TGVmdCA9IHBvaW50UG9zaXRpb24ueCAtIGhhbGZUZXh0V2lkdGg7XG5cdFx0XHRcdFx0XHRmdXJ0aGVzdExlZnRJbmRleCA9IGk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGkgPCB0aGlzLnZhbHVlc0NvdW50LzIpIHtcblx0XHRcdFx0XHQvLyBMZXNzIHRoYW4gaGFsZiB0aGUgdmFsdWVzIG1lYW5zIHdlJ2xsIGxlZnQgYWxpZ24gdGhlIHRleHRcblx0XHRcdFx0XHRpZiAocG9pbnRQb3NpdGlvbi54ICsgdGV4dFdpZHRoID4gZnVydGhlc3RSaWdodCkge1xuXHRcdFx0XHRcdFx0ZnVydGhlc3RSaWdodCA9IHBvaW50UG9zaXRpb24ueCArIHRleHRXaWR0aDtcblx0XHRcdFx0XHRcdGZ1cnRoZXN0UmlnaHRJbmRleCA9IGk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGkgPiB0aGlzLnZhbHVlc0NvdW50LzIpe1xuXHRcdFx0XHRcdC8vIE1vcmUgdGhhbiBoYWxmIHRoZSB2YWx1ZXMgbWVhbnMgd2UnbGwgcmlnaHQgYWxpZ24gdGhlIHRleHRcblx0XHRcdFx0XHRpZiAocG9pbnRQb3NpdGlvbi54IC0gdGV4dFdpZHRoIDwgZnVydGhlc3RMZWZ0KSB7XG5cdFx0XHRcdFx0XHRmdXJ0aGVzdExlZnQgPSBwb2ludFBvc2l0aW9uLnggLSB0ZXh0V2lkdGg7XG5cdFx0XHRcdFx0XHRmdXJ0aGVzdExlZnRJbmRleCA9IGk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHhQcm90cnVzaW9uTGVmdCA9IGZ1cnRoZXN0TGVmdDtcblxuXHRcdFx0eFByb3RydXNpb25SaWdodCA9IE1hdGguY2VpbChmdXJ0aGVzdFJpZ2h0IC0gdGhpcy53aWR0aCk7XG5cblx0XHRcdGZ1cnRoZXN0UmlnaHRBbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShmdXJ0aGVzdFJpZ2h0SW5kZXgpO1xuXG5cdFx0XHRmdXJ0aGVzdExlZnRBbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShmdXJ0aGVzdExlZnRJbmRleCk7XG5cblx0XHRcdHJhZGl1c1JlZHVjdGlvblJpZ2h0ID0geFByb3RydXNpb25SaWdodCAvIE1hdGguc2luKGZ1cnRoZXN0UmlnaHRBbmdsZSArIE1hdGguUEkvMik7XG5cblx0XHRcdHJhZGl1c1JlZHVjdGlvbkxlZnQgPSB4UHJvdHJ1c2lvbkxlZnQgLyBNYXRoLnNpbihmdXJ0aGVzdExlZnRBbmdsZSArIE1hdGguUEkvMik7XG5cblx0XHRcdC8vIEVuc3VyZSB3ZSBhY3R1YWxseSBuZWVkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgY2hhcnRcblx0XHRcdHJhZGl1c1JlZHVjdGlvblJpZ2h0ID0gKGlzTnVtYmVyKHJhZGl1c1JlZHVjdGlvblJpZ2h0KSkgPyByYWRpdXNSZWR1Y3Rpb25SaWdodCA6IDA7XG5cdFx0XHRyYWRpdXNSZWR1Y3Rpb25MZWZ0ID0gKGlzTnVtYmVyKHJhZGl1c1JlZHVjdGlvbkxlZnQpKSA/IHJhZGl1c1JlZHVjdGlvbkxlZnQgOiAwO1xuXG5cdFx0XHR0aGlzLmRyYXdpbmdBcmVhID0gbGFyZ2VzdFBvc3NpYmxlUmFkaXVzIC0gKHJhZGl1c1JlZHVjdGlvbkxlZnQgKyByYWRpdXNSZWR1Y3Rpb25SaWdodCkvMjtcblxuXHRcdFx0Ly90aGlzLmRyYXdpbmdBcmVhID0gbWluKFttYXhXaWR0aFJhZGl1cywgKHRoaXMuaGVpZ2h0IC0gKDIgKiAodGhpcy5wb2ludExhYmVsRm9udFNpemUgKyA1KSkpLzJdKVxuXHRcdFx0dGhpcy5zZXRDZW50ZXJQb2ludChyYWRpdXNSZWR1Y3Rpb25MZWZ0LCByYWRpdXNSZWR1Y3Rpb25SaWdodCk7XG5cblx0XHR9LFxuXHRcdHNldENlbnRlclBvaW50OiBmdW5jdGlvbihsZWZ0TW92ZW1lbnQsIHJpZ2h0TW92ZW1lbnQpe1xuXG5cdFx0XHR2YXIgbWF4UmlnaHQgPSB0aGlzLndpZHRoIC0gcmlnaHRNb3ZlbWVudCAtIHRoaXMuZHJhd2luZ0FyZWEsXG5cdFx0XHRcdG1heExlZnQgPSBsZWZ0TW92ZW1lbnQgKyB0aGlzLmRyYXdpbmdBcmVhO1xuXG5cdFx0XHR0aGlzLnhDZW50ZXIgPSAobWF4TGVmdCArIG1heFJpZ2h0KS8yO1xuXHRcdFx0Ly8gQWx3YXlzIHZlcnRpY2FsbHkgaW4gdGhlIGNlbnRyZSBhcyB0aGUgdGV4dCBoZWlnaHQgZG9lc24ndCBjaGFuZ2Vcblx0XHRcdHRoaXMueUNlbnRlciA9ICh0aGlzLmhlaWdodC8yKTtcblx0XHR9LFxuXG5cdFx0Z2V0SW5kZXhBbmdsZSA6IGZ1bmN0aW9uKGluZGV4KXtcblx0XHRcdHZhciBhbmdsZU11bHRpcGxpZXIgPSAoTWF0aC5QSSAqIDIpIC8gdGhpcy52YWx1ZXNDb3VudDtcblx0XHRcdC8vIFN0YXJ0IGZyb20gdGhlIHRvcCBpbnN0ZWFkIG9mIHJpZ2h0LCBzbyByZW1vdmUgYSBxdWFydGVyIG9mIHRoZSBjaXJjbGVcblxuXHRcdFx0cmV0dXJuIGluZGV4ICogYW5nbGVNdWx0aXBsaWVyIC0gKE1hdGguUEkvMik7XG5cdFx0fSxcblx0XHRnZXRQb2ludFBvc2l0aW9uIDogZnVuY3Rpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlcil7XG5cdFx0XHR2YXIgdGhpc0FuZ2xlID0gdGhpcy5nZXRJbmRleEFuZ2xlKGluZGV4KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHggOiAoTWF0aC5jb3ModGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlcikgKyB0aGlzLnhDZW50ZXIsXG5cdFx0XHRcdHkgOiAoTWF0aC5zaW4odGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlcikgKyB0aGlzLnlDZW50ZXJcblx0XHRcdH07XG5cdFx0fSxcblx0XHRkcmF3OiBmdW5jdGlvbigpe1xuXHRcdFx0aWYgKHRoaXMuZGlzcGxheSl7XG5cdFx0XHRcdHZhciBjdHggPSB0aGlzLmN0eDtcblx0XHRcdFx0ZWFjaCh0aGlzLnlMYWJlbHMsIGZ1bmN0aW9uKGxhYmVsLCBpbmRleCl7XG5cdFx0XHRcdFx0Ly8gRG9uJ3QgZHJhdyBhIGNlbnRyZSB2YWx1ZVxuXHRcdFx0XHRcdGlmIChpbmRleCA+IDApe1xuXHRcdFx0XHRcdFx0dmFyIHlDZW50ZXJPZmZzZXQgPSBpbmRleCAqICh0aGlzLmRyYXdpbmdBcmVhL3RoaXMuc3RlcHMpLFxuXHRcdFx0XHRcdFx0XHR5SGVpZ2h0ID0gdGhpcy55Q2VudGVyIC0geUNlbnRlck9mZnNldCxcblx0XHRcdFx0XHRcdFx0cG9pbnRQb3NpdGlvbjtcblxuXHRcdFx0XHRcdFx0Ly8gRHJhdyBjaXJjdWxhciBsaW5lcyBhcm91bmQgdGhlIHNjYWxlXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5saW5lV2lkdGggPiAwKXtcblx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5saW5lQ29sb3I7XG5cdFx0XHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcblxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLmxpbmVBcmMpe1xuXHRcdFx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdFx0XHRjdHguYXJjKHRoaXMueENlbnRlciwgdGhpcy55Q2VudGVyLCB5Q2VudGVyT2Zmc2V0LCAwLCBNYXRoLlBJKjIpO1xuXHRcdFx0XHRcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdFx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaT0wO2k8dGhpcy52YWx1ZXNDb3VudDtpKyspXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cG9pbnRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihpLCB0aGlzLmNhbGN1bGF0ZUNlbnRlck9mZnNldCh0aGlzLm1pbiArIChpbmRleCAqIHRoaXMuc3RlcFZhbHVlKSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGkgPT09IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnRQb3NpdGlvbi54LCBwb2ludFBvc2l0aW9uLnkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZih0aGlzLnNob3dMYWJlbHMpe1xuXHRcdFx0XHRcdFx0XHRjdHguZm9udCA9IGZvbnRTdHJpbmcodGhpcy5mb250U2l6ZSx0aGlzLmZvbnRTdHlsZSx0aGlzLmZvbnRGYW1pbHkpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5zaG93TGFiZWxCYWNrZHJvcCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGxhYmVsV2lkdGggPSBjdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xuXHRcdFx0XHRcdFx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tkcm9wQ29sb3I7XG5cdFx0XHRcdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy54Q2VudGVyIC0gbGFiZWxXaWR0aC8yIC0gdGhpcy5iYWNrZHJvcFBhZGRpbmdYLFxuXHRcdFx0XHRcdFx0XHRcdFx0eUhlaWdodCAtIHRoaXMuZm9udFNpemUvMiAtIHRoaXMuYmFja2Ryb3BQYWRkaW5nWSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGggKyB0aGlzLmJhY2tkcm9wUGFkZGluZ1gqMixcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9udFNpemUgKyB0aGlzLmJhY2tkcm9wUGFkZGluZ1kqMlxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuXHRcdFx0XHRcdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcblx0XHRcdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMuZm9udENvbG9yO1xuXHRcdFx0XHRcdFx0XHRjdHguZmlsbFRleHQobGFiZWwsIHRoaXMueENlbnRlciwgeUhlaWdodCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCB0aGlzKTtcblxuXHRcdFx0XHRpZiAoIXRoaXMubGluZUFyYyl7XG5cdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMuYW5nbGVMaW5lV2lkdGg7XG5cdFx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdGhpcy5hbmdsZUxpbmVDb2xvcjtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gdGhpcy52YWx1ZXNDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbmdsZUxpbmVXaWR0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHR2YXIgb3V0ZXJQb3NpdGlvbiA9IHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihpLCB0aGlzLmNhbGN1bGF0ZUNlbnRlck9mZnNldCh0aGlzLm1heCkpO1xuXHRcdFx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8odGhpcy54Q2VudGVyLCB0aGlzLnlDZW50ZXIpO1xuXHRcdFx0XHRcdFx0XHRjdHgubGluZVRvKG91dGVyUG9zaXRpb24ueCwgb3V0ZXJQb3NpdGlvbi55KTtcblx0XHRcdFx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdFx0XHRcdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBFeHRyYSAzcHggb3V0IGZvciBzb21lIGxhYmVsIHNwYWNpbmdcblx0XHRcdFx0XHRcdHZhciBwb2ludExhYmVsUG9zaXRpb24gPSB0aGlzLmdldFBvaW50UG9zaXRpb24oaSwgdGhpcy5jYWxjdWxhdGVDZW50ZXJPZmZzZXQodGhpcy5tYXgpICsgNSk7XG5cdFx0XHRcdFx0XHRjdHguZm9udCA9IGZvbnRTdHJpbmcodGhpcy5wb2ludExhYmVsRm9udFNpemUsdGhpcy5wb2ludExhYmVsRm9udFN0eWxlLHRoaXMucG9pbnRMYWJlbEZvbnRGYW1pbHkpO1xuXHRcdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRoaXMucG9pbnRMYWJlbEZvbnRDb2xvcjtcblxuXHRcdFx0XHRcdFx0dmFyIGxhYmVsc0NvdW50ID0gdGhpcy5sYWJlbHMubGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRoYWxmTGFiZWxzQ291bnQgPSB0aGlzLmxhYmVscy5sZW5ndGgvMixcblx0XHRcdFx0XHRcdFx0cXVhcnRlckxhYmVsc0NvdW50ID0gaGFsZkxhYmVsc0NvdW50LzIsXG5cdFx0XHRcdFx0XHRcdHVwcGVySGFsZiA9IChpIDwgcXVhcnRlckxhYmVsc0NvdW50IHx8IGkgPiBsYWJlbHNDb3VudCAtIHF1YXJ0ZXJMYWJlbHNDb3VudCksXG5cdFx0XHRcdFx0XHRcdGV4YWN0UXVhcnRlciA9IChpID09PSBxdWFydGVyTGFiZWxzQ291bnQgfHwgaSA9PT0gbGFiZWxzQ291bnQgLSBxdWFydGVyTGFiZWxzQ291bnQpO1xuXHRcdFx0XHRcdFx0aWYgKGkgPT09IDApe1xuXHRcdFx0XHRcdFx0XHRjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYoaSA9PT0gaGFsZkxhYmVsc0NvdW50KXtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpIDwgaGFsZkxhYmVsc0NvdW50KXtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdsZWZ0Jztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSAncmlnaHQnO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgdGV4dCBiYXNlbGluZSBiYXNlZCBvbiBvdXRlciBwb3NpdGlvbmluZ1xuXHRcdFx0XHRcdFx0aWYgKGV4YWN0UXVhcnRlcil7XG5cdFx0XHRcdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodXBwZXJIYWxmKXtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjdHguZmlsbFRleHQodGhpcy5sYWJlbHNbaV0sIHBvaW50TGFiZWxQb3NpdGlvbi54LCBwb2ludExhYmVsUG9zaXRpb24ueSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBBdHRhY2ggZ2xvYmFsIGV2ZW50IHRvIHJlc2l6ZSBlYWNoIGNoYXJ0IGluc3RhbmNlIHdoZW4gdGhlIGJyb3dzZXIgcmVzaXplc1xuXHRoZWxwZXJzLmFkZEV2ZW50KHdpbmRvdywgXCJyZXNpemVcIiwgKGZ1bmN0aW9uKCl7XG5cdFx0Ly8gQmFzaWMgZGVib3VuY2Ugb2YgcmVzaXplIGZ1bmN0aW9uIHNvIGl0IGRvZXNuJ3QgaHVydCBwZXJmb3JtYW5jZSB3aGVuIHJlc2l6aW5nIGJyb3dzZXIuXG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHR0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRlYWNoKENoYXJ0Lmluc3RhbmNlcyxmdW5jdGlvbihpbnN0YW5jZSl7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHJlc3BvbnNpdmUgZmxhZyBpcyBzZXQgaW4gdGhlIGNoYXJ0IGluc3RhbmNlIGNvbmZpZ1xuXHRcdFx0XHRcdC8vIENhc2NhZGUgdGhlIHJlc2l6ZSBldmVudCBkb3duIHRvIHRoZSBjaGFydC5cblx0XHRcdFx0XHRpZiAoaW5zdGFuY2Uub3B0aW9ucy5yZXNwb25zaXZlKXtcblx0XHRcdFx0XHRcdGluc3RhbmNlLnJlc2l6ZShpbnN0YW5jZS5yZW5kZXIsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCA1MCk7XG5cdFx0fTtcblx0fSkoKSk7XG5cblxuXHRpZiAoYW1kKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gQ2hhcnQ7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IENoYXJ0O1xuXHR9XG5cblx0cm9vdC5DaGFydCA9IENoYXJ0O1xuXG5cdENoYXJ0Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpe1xuXHRcdHJvb3QuQ2hhcnQgPSBwcmV2aW91cztcblx0XHRyZXR1cm4gQ2hhcnQ7XG5cdH07XG5cbn0pLmNhbGwodGhpcyk7XG5cbihmdW5jdGlvbigpe1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgcm9vdCA9IHRoaXMsXG5cdFx0Q2hhcnQgPSByb290LkNoYXJ0LFxuXHRcdGhlbHBlcnMgPSBDaGFydC5oZWxwZXJzO1xuXG5cblx0dmFyIGRlZmF1bHRDb25maWcgPSB7XG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIHN0YXJ0IGF0IHplcm8sIG9yIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBkb3duIGZyb20gdGhlIGxvd2VzdCB2YWx1ZVxuXHRcdHNjYWxlQmVnaW5BdFplcm8gOiB0cnVlLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciBncmlkIGxpbmVzIGFyZSBzaG93biBhY3Jvc3MgdGhlIGNoYXJ0XG5cdFx0c2NhbGVTaG93R3JpZExpbmVzIDogdHJ1ZSxcblxuXHRcdC8vU3RyaW5nIC0gQ29sb3VyIG9mIHRoZSBncmlkIGxpbmVzXG5cdFx0c2NhbGVHcmlkTGluZUNvbG9yIDogXCJyZ2JhKDAsMCwwLC4wNSlcIixcblxuXHRcdC8vTnVtYmVyIC0gV2lkdGggb2YgdGhlIGdyaWQgbGluZXNcblx0XHRzY2FsZUdyaWRMaW5lV2lkdGggOiAxLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IGhvcml6b250YWwgbGluZXMgKGV4Y2VwdCBYIGF4aXMpXG5cdFx0c2NhbGVTaG93SG9yaXpvbnRhbExpbmVzOiB0cnVlLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IHZlcnRpY2FsIGxpbmVzIChleGNlcHQgWSBheGlzKVxuXHRcdHNjYWxlU2hvd1ZlcnRpY2FsTGluZXM6IHRydWUsXG5cblx0XHQvL0Jvb2xlYW4gLSBJZiB0aGVyZSBpcyBhIHN0cm9rZSBvbiBlYWNoIGJhclxuXHRcdGJhclNob3dTdHJva2UgOiB0cnVlLFxuXG5cdFx0Ly9OdW1iZXIgLSBQaXhlbCB3aWR0aCBvZiB0aGUgYmFyIHN0cm9rZVxuXHRcdGJhclN0cm9rZVdpZHRoIDogMixcblxuXHRcdC8vTnVtYmVyIC0gU3BhY2luZyBiZXR3ZWVuIGVhY2ggb2YgdGhlIFggdmFsdWUgc2V0c1xuXHRcdGJhclZhbHVlU3BhY2luZyA6IDUsXG5cblx0XHQvL051bWJlciAtIFNwYWNpbmcgYmV0d2VlbiBkYXRhIHNldHMgd2l0aGluIFggdmFsdWVzXG5cdFx0YmFyRGF0YXNldFNwYWNpbmcgOiAxLFxuXG5cdFx0Ly9TdHJpbmcgLSBBIGxlZ2VuZCB0ZW1wbGF0ZVxuXHRcdGxlZ2VuZFRlbXBsYXRlIDogXCI8dWwgY2xhc3M9XFxcIjwlPW5hbWUudG9Mb3dlckNhc2UoKSU+LWxlZ2VuZFxcXCI+PCUgZm9yICh2YXIgaT0wOyBpPGRhdGFzZXRzLmxlbmd0aDsgaSsrKXslPjxsaT48c3BhbiBzdHlsZT1cXFwiYmFja2dyb3VuZC1jb2xvcjo8JT1kYXRhc2V0c1tpXS5maWxsQ29sb3IlPlxcXCI+PC9zcGFuPjwlaWYoZGF0YXNldHNbaV0ubGFiZWwpeyU+PCU9ZGF0YXNldHNbaV0ubGFiZWwlPjwlfSU+PC9saT48JX0lPjwvdWw+XCJcblxuXHR9O1xuXG5cblx0Q2hhcnQuVHlwZS5leHRlbmQoe1xuXHRcdG5hbWU6IFwiQmFyXCIsXG5cdFx0ZGVmYXVsdHMgOiBkZWZhdWx0Q29uZmlnLFxuXHRcdGluaXRpYWxpemU6ICBmdW5jdGlvbihkYXRhKXtcblxuXHRcdFx0Ly9FeHBvc2Ugb3B0aW9ucyBhcyBhIHNjb3BlIHZhcmlhYmxlIGhlcmUgc28gd2UgY2FuIGFjY2VzcyBpdCBpbiB0aGUgU2NhbGVDbGFzc1xuXHRcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRcdHRoaXMuU2NhbGVDbGFzcyA9IENoYXJ0LlNjYWxlLmV4dGVuZCh7XG5cdFx0XHRcdG9mZnNldEdyaWRMaW5lcyA6IHRydWUsXG5cdFx0XHRcdGNhbGN1bGF0ZUJhclggOiBmdW5jdGlvbihkYXRhc2V0Q291bnQsIGRhdGFzZXRJbmRleCwgYmFySW5kZXgpe1xuXHRcdFx0XHRcdC8vUmV1c2FibGUgbWV0aG9kIGZvciBjYWxjdWxhdGluZyB0aGUgeFBvc2l0aW9uIG9mIGEgZ2l2ZW4gYmFyIGJhc2VkIG9uIGRhdGFzZXRJbmRleCAmIHdpZHRoIG9mIHRoZSBiYXJcblx0XHRcdFx0XHR2YXIgeFdpZHRoID0gdGhpcy5jYWxjdWxhdGVCYXNlV2lkdGgoKSxcblx0XHRcdFx0XHRcdHhBYnNvbHV0ZSA9IHRoaXMuY2FsY3VsYXRlWChiYXJJbmRleCkgLSAoeFdpZHRoLzIpLFxuXHRcdFx0XHRcdFx0YmFyV2lkdGggPSB0aGlzLmNhbGN1bGF0ZUJhcldpZHRoKGRhdGFzZXRDb3VudCk7XG5cblx0XHRcdFx0XHRyZXR1cm4geEFic29sdXRlICsgKGJhcldpZHRoICogZGF0YXNldEluZGV4KSArIChkYXRhc2V0SW5kZXggKiBvcHRpb25zLmJhckRhdGFzZXRTcGFjaW5nKSArIGJhcldpZHRoLzI7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNhbGN1bGF0ZUJhc2VXaWR0aCA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0cmV0dXJuICh0aGlzLmNhbGN1bGF0ZVgoMSkgLSB0aGlzLmNhbGN1bGF0ZVgoMCkpIC0gKDIqb3B0aW9ucy5iYXJWYWx1ZVNwYWNpbmcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjYWxjdWxhdGVCYXJXaWR0aCA6IGZ1bmN0aW9uKGRhdGFzZXRDb3VudCl7XG5cdFx0XHRcdFx0Ly9UaGUgcGFkZGluZyBiZXR3ZWVuIGRhdGFzZXRzIGlzIHRvIHRoZSByaWdodCBvZiBlYWNoIGJhciwgcHJvdmlkaW5nIHRoYXQgdGhlcmUgYXJlIG1vcmUgdGhhbiAxIGRhdGFzZXRcblx0XHRcdFx0XHR2YXIgYmFzZVdpZHRoID0gdGhpcy5jYWxjdWxhdGVCYXNlV2lkdGgoKSAtICgoZGF0YXNldENvdW50IC0gMSkgKiBvcHRpb25zLmJhckRhdGFzZXRTcGFjaW5nKTtcblxuXHRcdFx0XHRcdHJldHVybiAoYmFzZVdpZHRoIC8gZGF0YXNldENvdW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGF0YXNldHMgPSBbXTtcblxuXHRcdFx0Ly9TZXQgdXAgdG9vbHRpcCBldmVudHMgb24gdGhlIGNoYXJ0XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLnNob3dUb29sdGlwcyl7XG5cdFx0XHRcdGhlbHBlcnMuYmluZEV2ZW50cyh0aGlzLCB0aGlzLm9wdGlvbnMudG9vbHRpcEV2ZW50cywgZnVuY3Rpb24oZXZ0KXtcblx0XHRcdFx0XHR2YXIgYWN0aXZlQmFycyA9IChldnQudHlwZSAhPT0gJ21vdXNlb3V0JykgPyB0aGlzLmdldEJhcnNBdEV2ZW50KGV2dCkgOiBbXTtcblxuXHRcdFx0XHRcdHRoaXMuZWFjaEJhcnMoZnVuY3Rpb24oYmFyKXtcblx0XHRcdFx0XHRcdGJhci5yZXN0b3JlKFsnZmlsbENvbG9yJywgJ3N0cm9rZUNvbG9yJ10pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGhlbHBlcnMuZWFjaChhY3RpdmVCYXJzLCBmdW5jdGlvbihhY3RpdmVCYXIpe1xuXHRcdFx0XHRcdFx0YWN0aXZlQmFyLmZpbGxDb2xvciA9IGFjdGl2ZUJhci5oaWdobGlnaHRGaWxsO1xuXHRcdFx0XHRcdFx0YWN0aXZlQmFyLnN0cm9rZUNvbG9yID0gYWN0aXZlQmFyLmhpZ2hsaWdodFN0cm9rZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnNob3dUb29sdGlwKGFjdGl2ZUJhcnMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9EZWNsYXJlIHRoZSBleHRlbnNpb24gb2YgdGhlIGRlZmF1bHQgcG9pbnQsIHRvIGNhdGVyIGZvciB0aGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG5cdFx0XHR0aGlzLkJhckNsYXNzID0gQ2hhcnQuUmVjdGFuZ2xlLmV4dGVuZCh7XG5cdFx0XHRcdHN0cm9rZVdpZHRoIDogdGhpcy5vcHRpb25zLmJhclN0cm9rZVdpZHRoLFxuXHRcdFx0XHRzaG93U3Ryb2tlIDogdGhpcy5vcHRpb25zLmJhclNob3dTdHJva2UsXG5cdFx0XHRcdGN0eCA6IHRoaXMuY2hhcnQuY3R4XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9JdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgZGF0YXNldHMsIGFuZCBidWlsZCB0aGlzIGludG8gYSBwcm9wZXJ0eSBvZiB0aGUgY2hhcnRcblx0XHRcdGhlbHBlcnMuZWFjaChkYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQsZGF0YXNldEluZGV4KXtcblxuXHRcdFx0XHR2YXIgZGF0YXNldE9iamVjdCA9IHtcblx0XHRcdFx0XHRsYWJlbCA6IGRhdGFzZXQubGFiZWwgfHwgbnVsbCxcblx0XHRcdFx0XHRmaWxsQ29sb3IgOiBkYXRhc2V0LmZpbGxDb2xvcixcblx0XHRcdFx0XHRzdHJva2VDb2xvciA6IGRhdGFzZXQuc3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0YmFycyA6IFtdXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5kYXRhc2V0cy5wdXNoKGRhdGFzZXRPYmplY3QpO1xuXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmRhdGEsZnVuY3Rpb24oZGF0YVBvaW50LGluZGV4KXtcblx0XHRcdFx0XHQvL0FkZCBhIG5ldyBwb2ludCBmb3IgZWFjaCBwaWVjZSBvZiBkYXRhLCBwYXNzaW5nIGFueSByZXF1aXJlZCBkYXRhIHRvIGRyYXcuXG5cdFx0XHRcdFx0ZGF0YXNldE9iamVjdC5iYXJzLnB1c2gobmV3IHRoaXMuQmFyQ2xhc3Moe1xuXHRcdFx0XHRcdFx0dmFsdWUgOiBkYXRhUG9pbnQsXG5cdFx0XHRcdFx0XHRsYWJlbCA6IGRhdGEubGFiZWxzW2luZGV4XSxcblx0XHRcdFx0XHRcdGRhdGFzZXRMYWJlbDogZGF0YXNldC5sYWJlbCxcblx0XHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5zdHJva2VDb2xvcixcblx0XHRcdFx0XHRcdGZpbGxDb2xvciA6IGRhdGFzZXQuZmlsbENvbG9yLFxuXHRcdFx0XHRcdFx0aGlnaGxpZ2h0RmlsbCA6IGRhdGFzZXQuaGlnaGxpZ2h0RmlsbCB8fCBkYXRhc2V0LmZpbGxDb2xvcixcblx0XHRcdFx0XHRcdGhpZ2hsaWdodFN0cm9rZSA6IGRhdGFzZXQuaGlnaGxpZ2h0U3Ryb2tlIHx8IGRhdGFzZXQuc3Ryb2tlQ29sb3Jcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdHRoaXMuYnVpbGRTY2FsZShkYXRhLmxhYmVscyk7XG5cblx0XHRcdHRoaXMuQmFyQ2xhc3MucHJvdG90eXBlLmJhc2UgPSB0aGlzLnNjYWxlLmVuZFBvaW50O1xuXG5cdFx0XHR0aGlzLmVhY2hCYXJzKGZ1bmN0aW9uKGJhciwgaW5kZXgsIGRhdGFzZXRJbmRleCl7XG5cdFx0XHRcdGhlbHBlcnMuZXh0ZW5kKGJhciwge1xuXHRcdFx0XHRcdHdpZHRoIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJXaWR0aCh0aGlzLmRhdGFzZXRzLmxlbmd0aCksXG5cdFx0XHRcdFx0eDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJYKHRoaXMuZGF0YXNldHMubGVuZ3RoLCBkYXRhc2V0SW5kZXgsIGluZGV4KSxcblx0XHRcdFx0XHR5OiB0aGlzLnNjYWxlLmVuZFBvaW50XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRiYXIuc2F2ZSgpO1xuXHRcdFx0fSwgdGhpcyk7XG5cblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHR1cGRhdGUgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zY2FsZS51cGRhdGUoKTtcblx0XHRcdC8vIFJlc2V0IGFueSBoaWdobGlnaHQgY29sb3VycyBiZWZvcmUgdXBkYXRpbmcuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5hY3RpdmVFbGVtZW50cywgZnVuY3Rpb24oYWN0aXZlRWxlbWVudCl7XG5cdFx0XHRcdGFjdGl2ZUVsZW1lbnQucmVzdG9yZShbJ2ZpbGxDb2xvcicsICdzdHJva2VDb2xvciddKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmVhY2hCYXJzKGZ1bmN0aW9uKGJhcil7XG5cdFx0XHRcdGJhci5zYXZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRlYWNoQmFycyA6IGZ1bmN0aW9uKGNhbGxiYWNrKXtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQsIGRhdGFzZXRJbmRleCl7XG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmJhcnMsIGNhbGxiYWNrLCB0aGlzLCBkYXRhc2V0SW5kZXgpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHR9LFxuXHRcdGdldEJhcnNBdEV2ZW50IDogZnVuY3Rpb24oZSl7XG5cdFx0XHR2YXIgYmFyc0FycmF5ID0gW10sXG5cdFx0XHRcdGV2ZW50UG9zaXRpb24gPSBoZWxwZXJzLmdldFJlbGF0aXZlUG9zaXRpb24oZSksXG5cdFx0XHRcdGRhdGFzZXRJdGVyYXRvciA9IGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRcdGJhcnNBcnJheS5wdXNoKGRhdGFzZXQuYmFyc1tiYXJJbmRleF0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRiYXJJbmRleDtcblxuXHRcdFx0Zm9yICh2YXIgZGF0YXNldEluZGV4ID0gMDsgZGF0YXNldEluZGV4IDwgdGhpcy5kYXRhc2V0cy5sZW5ndGg7IGRhdGFzZXRJbmRleCsrKSB7XG5cdFx0XHRcdGZvciAoYmFySW5kZXggPSAwOyBiYXJJbmRleCA8IHRoaXMuZGF0YXNldHNbZGF0YXNldEluZGV4XS5iYXJzLmxlbmd0aDsgYmFySW5kZXgrKykge1xuXHRcdFx0XHRcdGlmICh0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uYmFyc1tiYXJJbmRleF0uaW5SYW5nZShldmVudFBvc2l0aW9uLngsZXZlbnRQb3NpdGlvbi55KSl7XG5cdFx0XHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cywgZGF0YXNldEl0ZXJhdG9yKTtcblx0XHRcdFx0XHRcdHJldHVybiBiYXJzQXJyYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBiYXJzQXJyYXk7XG5cdFx0fSxcblx0XHRidWlsZFNjYWxlIDogZnVuY3Rpb24obGFiZWxzKXtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0dmFyIGRhdGFUb3RhbCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHRcdFx0c2VsZi5lYWNoQmFycyhmdW5jdGlvbihiYXIpe1xuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKGJhci52YWx1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIHNjYWxlT3B0aW9ucyA9IHtcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmcgOiB0aGlzLm9wdGlvbnMuc2NhbGVMYWJlbCxcblx0XHRcdFx0aGVpZ2h0IDogdGhpcy5jaGFydC5oZWlnaHQsXG5cdFx0XHRcdHdpZHRoIDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0Y3R4IDogdGhpcy5jaGFydC5jdHgsXG5cdFx0XHRcdHRleHRDb2xvciA6IHRoaXMub3B0aW9ucy5zY2FsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFNpemUgOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udFN0eWxlIDogdGhpcy5vcHRpb25zLnNjYWxlRm9udFN0eWxlLFxuXHRcdFx0XHRmb250RmFtaWx5IDogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0dmFsdWVzQ291bnQgOiBsYWJlbHMubGVuZ3RoLFxuXHRcdFx0XHRiZWdpbkF0WmVybyA6IHRoaXMub3B0aW9ucy5zY2FsZUJlZ2luQXRaZXJvLFxuXHRcdFx0XHRpbnRlZ2Vyc09ubHkgOiB0aGlzLm9wdGlvbnMuc2NhbGVJbnRlZ2Vyc09ubHksXG5cdFx0XHRcdGNhbGN1bGF0ZVlSYW5nZTogZnVuY3Rpb24oY3VycmVudEhlaWdodCl7XG5cdFx0XHRcdFx0dmFyIHVwZGF0ZWRSYW5nZXMgPSBoZWxwZXJzLmNhbGN1bGF0ZVNjYWxlUmFuZ2UoXG5cdFx0XHRcdFx0XHRkYXRhVG90YWwoKSxcblx0XHRcdFx0XHRcdGN1cnJlbnRIZWlnaHQsXG5cdFx0XHRcdFx0XHR0aGlzLmZvbnRTaXplLFxuXHRcdFx0XHRcdFx0dGhpcy5iZWdpbkF0WmVybyxcblx0XHRcdFx0XHRcdHRoaXMuaW50ZWdlcnNPbmx5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLCB1cGRhdGVkUmFuZ2VzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eExhYmVscyA6IGxhYmVscyxcblx0XHRcdFx0Zm9udCA6IGhlbHBlcnMuZm9udFN0cmluZyh0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSwgdGhpcy5vcHRpb25zLnNjYWxlRm9udFN0eWxlLCB0aGlzLm9wdGlvbnMuc2NhbGVGb250RmFtaWx5KSxcblx0XHRcdFx0bGluZVdpZHRoIDogdGhpcy5vcHRpb25zLnNjYWxlTGluZVdpZHRoLFxuXHRcdFx0XHRsaW5lQ29sb3IgOiB0aGlzLm9wdGlvbnMuc2NhbGVMaW5lQ29sb3IsXG5cdFx0XHRcdHNob3dIb3Jpem9udGFsTGluZXMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93SG9yaXpvbnRhbExpbmVzLFxuXHRcdFx0XHRzaG93VmVydGljYWxMaW5lcyA6IHRoaXMub3B0aW9ucy5zY2FsZVNob3dWZXJ0aWNhbExpbmVzLFxuXHRcdFx0XHRncmlkTGluZVdpZHRoIDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dHcmlkTGluZXMpID8gdGhpcy5vcHRpb25zLnNjYWxlR3JpZExpbmVXaWR0aCA6IDAsXG5cdFx0XHRcdGdyaWRMaW5lQ29sb3IgOiAodGhpcy5vcHRpb25zLnNjYWxlU2hvd0dyaWRMaW5lcykgPyB0aGlzLm9wdGlvbnMuc2NhbGVHcmlkTGluZUNvbG9yIDogXCJyZ2JhKDAsMCwwLDApXCIsXG5cdFx0XHRcdHBhZGRpbmcgOiAodGhpcy5vcHRpb25zLnNob3dTY2FsZSkgPyAwIDogKHRoaXMub3B0aW9ucy5iYXJTaG93U3Ryb2tlKSA/IHRoaXMub3B0aW9ucy5iYXJTdHJva2VXaWR0aCA6IDAsXG5cdFx0XHRcdHNob3dMYWJlbHMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxzLFxuXHRcdFx0XHRkaXNwbGF5IDogdGhpcy5vcHRpb25zLnNob3dTY2FsZVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zY2FsZU92ZXJyaWRlKXtcblx0XHRcdFx0aGVscGVycy5leHRlbmQoc2NhbGVPcHRpb25zLCB7XG5cdFx0XHRcdFx0Y2FsY3VsYXRlWVJhbmdlOiBoZWxwZXJzLm5vb3AsXG5cdFx0XHRcdFx0c3RlcHM6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzLFxuXHRcdFx0XHRcdHN0ZXBWYWx1ZTogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoLFxuXHRcdFx0XHRcdG1pbjogdGhpcy5vcHRpb25zLnNjYWxlU3RhcnRWYWx1ZSxcblx0XHRcdFx0XHRtYXg6IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUgKyAodGhpcy5vcHRpb25zLnNjYWxlU3RlcHMgKiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwV2lkdGgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNjYWxlID0gbmV3IHRoaXMuU2NhbGVDbGFzcyhzY2FsZU9wdGlvbnMpO1xuXHRcdH0sXG5cdFx0YWRkRGF0YSA6IGZ1bmN0aW9uKHZhbHVlc0FycmF5LGxhYmVsKXtcblx0XHRcdC8vTWFwIHRoZSB2YWx1ZXMgYXJyYXkgZm9yIGVhY2ggb2YgdGhlIGRhdGFzZXRzXG5cdFx0XHRoZWxwZXJzLmVhY2godmFsdWVzQXJyYXksZnVuY3Rpb24odmFsdWUsZGF0YXNldEluZGV4KXtcblx0XHRcdFx0Ly9BZGQgYSBuZXcgcG9pbnQgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSwgcGFzc2luZyBhbnkgcmVxdWlyZWQgZGF0YSB0byBkcmF3LlxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uYmFycy5wdXNoKG5ldyB0aGlzLkJhckNsYXNzKHtcblx0XHRcdFx0XHR2YWx1ZSA6IHZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsIDogbGFiZWwsXG5cdFx0XHRcdFx0eDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJYKHRoaXMuZGF0YXNldHMubGVuZ3RoLCBkYXRhc2V0SW5kZXgsIHRoaXMuc2NhbGUudmFsdWVzQ291bnQrMSksXG5cdFx0XHRcdFx0eTogdGhpcy5zY2FsZS5lbmRQb2ludCxcblx0XHRcdFx0XHR3aWR0aCA6IHRoaXMuc2NhbGUuY2FsY3VsYXRlQmFyV2lkdGgodGhpcy5kYXRhc2V0cy5sZW5ndGgpLFxuXHRcdFx0XHRcdGJhc2UgOiB0aGlzLnNjYWxlLmVuZFBvaW50LFxuXHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogdGhpcy5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdLnN0cm9rZUNvbG9yLFxuXHRcdFx0XHRcdGZpbGxDb2xvciA6IHRoaXMuZGF0YXNldHNbZGF0YXNldEluZGV4XS5maWxsQ29sb3Jcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSx0aGlzKTtcblxuXHRcdFx0dGhpcy5zY2FsZS5hZGRYTGFiZWwobGFiZWwpO1xuXHRcdFx0Ly9UaGVuIHJlLXJlbmRlciB0aGUgY2hhcnQuXG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdH0sXG5cdFx0cmVtb3ZlRGF0YSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNjYWxlLnJlbW92ZVhMYWJlbCgpO1xuXHRcdFx0Ly9UaGVuIHJlLXJlbmRlciB0aGUgY2hhcnQuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cyxmdW5jdGlvbihkYXRhc2V0KXtcblx0XHRcdFx0ZGF0YXNldC5iYXJzLnNoaWZ0KCk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHR9LFxuXHRcdHJlZmxvdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLkJhckNsYXNzLnByb3RvdHlwZSx7XG5cdFx0XHRcdHk6IHRoaXMuc2NhbGUuZW5kUG9pbnQsXG5cdFx0XHRcdGJhc2UgOiB0aGlzLnNjYWxlLmVuZFBvaW50XG5cdFx0XHR9KTtcblx0XHRcdHZhciBuZXdTY2FsZVByb3BzID0gaGVscGVycy5leHRlbmQoe1xuXHRcdFx0XHRoZWlnaHQgOiB0aGlzLmNoYXJ0LmhlaWdodCxcblx0XHRcdFx0d2lkdGggOiB0aGlzLmNoYXJ0LndpZHRoXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2NhbGUudXBkYXRlKG5ld1NjYWxlUHJvcHMpO1xuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKGVhc2Upe1xuXHRcdFx0dmFyIGVhc2luZ0RlY2ltYWwgPSBlYXNlIHx8IDE7XG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cblx0XHRcdHZhciBjdHggPSB0aGlzLmNoYXJ0LmN0eDtcblxuXHRcdFx0dGhpcy5zY2FsZS5kcmF3KGVhc2luZ0RlY2ltYWwpO1xuXG5cdFx0XHQvL0RyYXcgYWxsIHRoZSBiYXJzIGZvciBlYWNoIGRhdGFzZXRcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQsZGF0YXNldEluZGV4KXtcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQuYmFycyxmdW5jdGlvbihiYXIsaW5kZXgpe1xuXHRcdFx0XHRcdGlmIChiYXIuaGFzVmFsdWUoKSl7XG5cdFx0XHRcdFx0XHRiYXIuYmFzZSA9IHRoaXMuc2NhbGUuZW5kUG9pbnQ7XG5cdFx0XHRcdFx0XHQvL1RyYW5zaXRpb24gdGhlbiBkcmF3XG5cdFx0XHRcdFx0XHRiYXIudHJhbnNpdGlvbih7XG5cdFx0XHRcdFx0XHRcdHggOiB0aGlzLnNjYWxlLmNhbGN1bGF0ZUJhclgodGhpcy5kYXRhc2V0cy5sZW5ndGgsIGRhdGFzZXRJbmRleCwgaW5kZXgpLFxuXHRcdFx0XHRcdFx0XHR5IDogdGhpcy5zY2FsZS5jYWxjdWxhdGVZKGJhci52YWx1ZSksXG5cdFx0XHRcdFx0XHRcdHdpZHRoIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVCYXJXaWR0aCh0aGlzLmRhdGFzZXRzLmxlbmd0aClcblx0XHRcdFx0XHRcdH0sIGVhc2luZ0RlY2ltYWwpLmRyYXcoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdH0sdGhpcyk7XG5cdFx0fVxuXHR9KTtcblxuXG59KS5jYWxsKHRoaXMpO1xuXG4oZnVuY3Rpb24oKXtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIHJvb3QgPSB0aGlzLFxuXHRcdENoYXJ0ID0gcm9vdC5DaGFydCxcblx0XHQvL0NhY2hlIGEgbG9jYWwgcmVmZXJlbmNlIHRvIENoYXJ0LmhlbHBlcnNcblx0XHRoZWxwZXJzID0gQ2hhcnQuaGVscGVycztcblxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHdlIHNob3VsZCBzaG93IGEgc3Ryb2tlIG9uIGVhY2ggc2VnbWVudFxuXHRcdHNlZ21lbnRTaG93U3Ryb2tlIDogdHJ1ZSxcblxuXHRcdC8vU3RyaW5nIC0gVGhlIGNvbG91ciBvZiBlYWNoIHNlZ21lbnQgc3Ryb2tlXG5cdFx0c2VnbWVudFN0cm9rZUNvbG9yIDogXCIjZmZmXCIsXG5cblx0XHQvL051bWJlciAtIFRoZSB3aWR0aCBvZiBlYWNoIHNlZ21lbnQgc3Ryb2tlXG5cdFx0c2VnbWVudFN0cm9rZVdpZHRoIDogMixcblxuXHRcdC8vVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGNoYXJ0IHRoYXQgd2UgY3V0IG91dCBvZiB0aGUgbWlkZGxlLlxuXHRcdHBlcmNlbnRhZ2VJbm5lckN1dG91dCA6IDUwLFxuXG5cdFx0Ly9OdW1iZXIgLSBBbW91bnQgb2YgYW5pbWF0aW9uIHN0ZXBzXG5cdFx0YW5pbWF0aW9uU3RlcHMgOiAxMDAsXG5cblx0XHQvL1N0cmluZyAtIEFuaW1hdGlvbiBlYXNpbmcgZWZmZWN0XG5cdFx0YW5pbWF0aW9uRWFzaW5nIDogXCJlYXNlT3V0Qm91bmNlXCIsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHdlIGFuaW1hdGUgdGhlIHJvdGF0aW9uIG9mIHRoZSBEb3VnaG51dFxuXHRcdGFuaW1hdGVSb3RhdGUgOiB0cnVlLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB3ZSBhbmltYXRlIHNjYWxpbmcgdGhlIERvdWdobnV0IGZyb20gdGhlIGNlbnRyZVxuXHRcdGFuaW1hdGVTY2FsZSA6IGZhbHNlLFxuXG5cdFx0Ly9TdHJpbmcgLSBBIGxlZ2VuZCB0ZW1wbGF0ZVxuXHRcdGxlZ2VuZFRlbXBsYXRlIDogXCI8dWwgY2xhc3M9XFxcIjwlPW5hbWUudG9Mb3dlckNhc2UoKSU+LWxlZ2VuZFxcXCI+PCUgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKXslPjxsaT48c3BhbiBzdHlsZT1cXFwiYmFja2dyb3VuZC1jb2xvcjo8JT1zZWdtZW50c1tpXS5maWxsQ29sb3IlPlxcXCI+PC9zcGFuPjwlaWYoc2VnbWVudHNbaV0ubGFiZWwpeyU+PCU9c2VnbWVudHNbaV0ubGFiZWwlPjwlfSU+PC9saT48JX0lPjwvdWw+XCJcblxuXHR9O1xuXG5cblx0Q2hhcnQuVHlwZS5leHRlbmQoe1xuXHRcdC8vUGFzc2luZyBpbiBhIG5hbWUgcmVnaXN0ZXJzIHRoaXMgY2hhcnQgaW4gdGhlIENoYXJ0IG5hbWVzcGFjZVxuXHRcdG5hbWU6IFwiRG91Z2hudXRcIixcblx0XHQvL1Byb3ZpZGluZyBhIGRlZmF1bHRzIHdpbGwgYWxzbyByZWdpc3RlciB0aGUgZGVhZnVsdHMgaW4gdGhlIGNoYXJ0IG5hbWVzcGFjZVxuXHRcdGRlZmF1bHRzIDogZGVmYXVsdENvbmZpZyxcblx0XHQvL0luaXRpYWxpemUgaXMgZmlyZWQgd2hlbiB0aGUgY2hhcnQgaXMgaW5pdGlhbGl6ZWQgLSBEYXRhIGlzIHBhc3NlZCBpbiBhcyBhIHBhcmFtZXRlclxuXHRcdC8vQ29uZmlnIGlzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkIGJ5IHRoZSBjb3JlIG9mIENoYXJ0LmpzLCBhbmQgaXMgYXZhaWxhYmxlIGF0IHRoaXMub3B0aW9uc1xuXHRcdGluaXRpYWxpemU6ICBmdW5jdGlvbihkYXRhKXtcblxuXHRcdFx0Ly9EZWNsYXJlIHNlZ21lbnRzIGFzIGEgc3RhdGljIHByb3BlcnR5IHRvIHByZXZlbnQgaW5oZXJpdGluZyBhY3Jvc3MgdGhlIENoYXJ0IHR5cGUgcHJvdG90eXBlXG5cdFx0XHR0aGlzLnNlZ21lbnRzID0gW107XG5cdFx0XHR0aGlzLm91dGVyUmFkaXVzID0gKGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLHRoaXMuY2hhcnQuaGVpZ2h0XSkgLVx0dGhpcy5vcHRpb25zLnNlZ21lbnRTdHJva2VXaWR0aC8yKS8yO1xuXG5cdFx0XHR0aGlzLlNlZ21lbnRBcmMgPSBDaGFydC5BcmMuZXh0ZW5kKHtcblx0XHRcdFx0Y3R4IDogdGhpcy5jaGFydC5jdHgsXG5cdFx0XHRcdHggOiB0aGlzLmNoYXJ0LndpZHRoLzIsXG5cdFx0XHRcdHkgOiB0aGlzLmNoYXJ0LmhlaWdodC8yXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9TZXQgdXAgdG9vbHRpcCBldmVudHMgb24gdGhlIGNoYXJ0XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLnNob3dUb29sdGlwcyl7XG5cdFx0XHRcdGhlbHBlcnMuYmluZEV2ZW50cyh0aGlzLCB0aGlzLm9wdGlvbnMudG9vbHRpcEV2ZW50cywgZnVuY3Rpb24oZXZ0KXtcblx0XHRcdFx0XHR2YXIgYWN0aXZlU2VnbWVudHMgPSAoZXZ0LnR5cGUgIT09ICdtb3VzZW91dCcpID8gdGhpcy5nZXRTZWdtZW50c0F0RXZlbnQoZXZ0KSA6IFtdO1xuXG5cdFx0XHRcdFx0aGVscGVycy5lYWNoKHRoaXMuc2VnbWVudHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdFx0XHRzZWdtZW50LnJlc3RvcmUoW1wiZmlsbENvbG9yXCJdKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2goYWN0aXZlU2VnbWVudHMsZnVuY3Rpb24oYWN0aXZlU2VnbWVudCl7XG5cdFx0XHRcdFx0XHRhY3RpdmVTZWdtZW50LmZpbGxDb2xvciA9IGFjdGl2ZVNlZ21lbnQuaGlnaGxpZ2h0Q29sb3I7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5zaG93VG9vbHRpcChhY3RpdmVTZWdtZW50cyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5jYWxjdWxhdGVUb3RhbChkYXRhKTtcblxuXHRcdFx0aGVscGVycy5lYWNoKGRhdGEsZnVuY3Rpb24oZGF0YXBvaW50LCBpbmRleCl7XG5cdFx0XHRcdHRoaXMuYWRkRGF0YShkYXRhcG9pbnQsIGluZGV4LCB0cnVlKTtcblx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRnZXRTZWdtZW50c0F0RXZlbnQgOiBmdW5jdGlvbihlKXtcblx0XHRcdHZhciBzZWdtZW50c0FycmF5ID0gW107XG5cblx0XHRcdHZhciBsb2NhdGlvbiA9IGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlKTtcblxuXHRcdFx0aGVscGVycy5lYWNoKHRoaXMuc2VnbWVudHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdGlmIChzZWdtZW50LmluUmFuZ2UobG9jYXRpb24ueCxsb2NhdGlvbi55KSkgc2VnbWVudHNBcnJheS5wdXNoKHNlZ21lbnQpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHJldHVybiBzZWdtZW50c0FycmF5O1xuXHRcdH0sXG5cdFx0YWRkRGF0YSA6IGZ1bmN0aW9uKHNlZ21lbnQsIGF0SW5kZXgsIHNpbGVudCl7XG5cdFx0XHR2YXIgaW5kZXggPSBhdEluZGV4IHx8IHRoaXMuc2VnbWVudHMubGVuZ3RoO1xuXHRcdFx0dGhpcy5zZWdtZW50cy5zcGxpY2UoaW5kZXgsIDAsIG5ldyB0aGlzLlNlZ21lbnRBcmMoe1xuXHRcdFx0XHR2YWx1ZSA6IHNlZ21lbnQudmFsdWUsXG5cdFx0XHRcdG91dGVyUmFkaXVzIDogKHRoaXMub3B0aW9ucy5hbmltYXRlU2NhbGUpID8gMCA6IHRoaXMub3V0ZXJSYWRpdXMsXG5cdFx0XHRcdGlubmVyUmFkaXVzIDogKHRoaXMub3B0aW9ucy5hbmltYXRlU2NhbGUpID8gMCA6ICh0aGlzLm91dGVyUmFkaXVzLzEwMCkgKiB0aGlzLm9wdGlvbnMucGVyY2VudGFnZUlubmVyQ3V0b3V0LFxuXHRcdFx0XHRmaWxsQ29sb3IgOiBzZWdtZW50LmNvbG9yLFxuXHRcdFx0XHRoaWdobGlnaHRDb2xvciA6IHNlZ21lbnQuaGlnaGxpZ2h0IHx8IHNlZ21lbnQuY29sb3IsXG5cdFx0XHRcdHNob3dTdHJva2UgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFNob3dTdHJva2UsXG5cdFx0XHRcdHN0cm9rZVdpZHRoIDogdGhpcy5vcHRpb25zLnNlZ21lbnRTdHJva2VXaWR0aCxcblx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFN0cm9rZUNvbG9yLFxuXHRcdFx0XHRzdGFydEFuZ2xlIDogTWF0aC5QSSAqIDEuNSxcblx0XHRcdFx0Y2lyY3VtZmVyZW5jZSA6ICh0aGlzLm9wdGlvbnMuYW5pbWF0ZVJvdGF0ZSkgPyAwIDogdGhpcy5jYWxjdWxhdGVDaXJjdW1mZXJlbmNlKHNlZ21lbnQudmFsdWUpLFxuXHRcdFx0XHRsYWJlbCA6IHNlZ21lbnQubGFiZWxcblx0XHRcdH0pKTtcblx0XHRcdGlmICghc2lsZW50KXtcblx0XHRcdFx0dGhpcy5yZWZsb3coKTtcblx0XHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UgOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gKE1hdGguUEkqMikqKE1hdGguYWJzKHZhbHVlKSAvIHRoaXMudG90YWwpO1xuXHRcdH0sXG5cdFx0Y2FsY3VsYXRlVG90YWwgOiBmdW5jdGlvbihkYXRhKXtcblx0XHRcdHRoaXMudG90YWwgPSAwO1xuXHRcdFx0aGVscGVycy5lYWNoKGRhdGEsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdHRoaXMudG90YWwgKz0gTWF0aC5hYnMoc2VnbWVudC52YWx1ZSk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuY2FsY3VsYXRlVG90YWwodGhpcy5zZWdtZW50cyk7XG5cblx0XHRcdC8vIFJlc2V0IGFueSBoaWdobGlnaHQgY29sb3VycyBiZWZvcmUgdXBkYXRpbmcuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5hY3RpdmVFbGVtZW50cywgZnVuY3Rpb24oYWN0aXZlRWxlbWVudCl7XG5cdFx0XHRcdGFjdGl2ZUVsZW1lbnQucmVzdG9yZShbJ2ZpbGxDb2xvciddKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5zZWdtZW50cyxmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0c2VnbWVudC5zYXZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblxuXHRcdHJlbW92ZURhdGE6IGZ1bmN0aW9uKGF0SW5kZXgpe1xuXHRcdFx0dmFyIGluZGV4VG9EZWxldGUgPSAoaGVscGVycy5pc051bWJlcihhdEluZGV4KSkgPyBhdEluZGV4IDogdGhpcy5zZWdtZW50cy5sZW5ndGgtMTtcblx0XHRcdHRoaXMuc2VnbWVudHMuc3BsaWNlKGluZGV4VG9EZWxldGUsIDEpO1xuXHRcdFx0dGhpcy5yZWZsb3coKTtcblx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0fSxcblxuXHRcdHJlZmxvdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLlNlZ21lbnRBcmMucHJvdG90eXBlLHtcblx0XHRcdFx0eCA6IHRoaXMuY2hhcnQud2lkdGgvMixcblx0XHRcdFx0eSA6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5vdXRlclJhZGl1cyA9IChoZWxwZXJzLm1pbihbdGhpcy5jaGFydC53aWR0aCx0aGlzLmNoYXJ0LmhlaWdodF0pIC1cdHRoaXMub3B0aW9ucy5zZWdtZW50U3Ryb2tlV2lkdGgvMikvMjtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLCBmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0c2VnbWVudC51cGRhdGUoe1xuXHRcdFx0XHRcdG91dGVyUmFkaXVzIDogdGhpcy5vdXRlclJhZGl1cyxcblx0XHRcdFx0XHRpbm5lclJhZGl1cyA6ICh0aGlzLm91dGVyUmFkaXVzLzEwMCkgKiB0aGlzLm9wdGlvbnMucGVyY2VudGFnZUlubmVyQ3V0b3V0XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fSxcblx0XHRkcmF3IDogZnVuY3Rpb24oZWFzZURlY2ltYWwpe1xuXHRcdFx0dmFyIGFuaW1EZWNpbWFsID0gKGVhc2VEZWNpbWFsKSA/IGVhc2VEZWNpbWFsIDogMTtcblx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLGZ1bmN0aW9uKHNlZ21lbnQsaW5kZXgpe1xuXHRcdFx0XHRzZWdtZW50LnRyYW5zaXRpb24oe1xuXHRcdFx0XHRcdGNpcmN1bWZlcmVuY2UgOiB0aGlzLmNhbGN1bGF0ZUNpcmN1bWZlcmVuY2Uoc2VnbWVudC52YWx1ZSksXG5cdFx0XHRcdFx0b3V0ZXJSYWRpdXMgOiB0aGlzLm91dGVyUmFkaXVzLFxuXHRcdFx0XHRcdGlubmVyUmFkaXVzIDogKHRoaXMub3V0ZXJSYWRpdXMvMTAwKSAqIHRoaXMub3B0aW9ucy5wZXJjZW50YWdlSW5uZXJDdXRvdXRcblx0XHRcdFx0fSxhbmltRGVjaW1hbCk7XG5cblx0XHRcdFx0c2VnbWVudC5lbmRBbmdsZSA9IHNlZ21lbnQuc3RhcnRBbmdsZSArIHNlZ21lbnQuY2lyY3VtZmVyZW5jZTtcblxuXHRcdFx0XHRzZWdtZW50LmRyYXcoKTtcblx0XHRcdFx0aWYgKGluZGV4ID09PSAwKXtcblx0XHRcdFx0XHRzZWdtZW50LnN0YXJ0QW5nbGUgPSBNYXRoLlBJICogMS41O1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgdG8gc2VlIGlmIGl0J3MgdGhlIGxhc3Qgc2VnbWVudCwgaWYgbm90IGdldCB0aGUgbmV4dCBhbmQgdXBkYXRlIHRoZSBzdGFydCBhbmdsZVxuXHRcdFx0XHRpZiAoaW5kZXggPCB0aGlzLnNlZ21lbnRzLmxlbmd0aC0xKXtcblx0XHRcdFx0XHR0aGlzLnNlZ21lbnRzW2luZGV4KzFdLnN0YXJ0QW5nbGUgPSBzZWdtZW50LmVuZEFuZ2xlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0fVxuXHR9KTtcblxuXHRDaGFydC50eXBlcy5Eb3VnaG51dC5leHRlbmQoe1xuXHRcdG5hbWUgOiBcIlBpZVwiLFxuXHRcdGRlZmF1bHRzIDogaGVscGVycy5tZXJnZShkZWZhdWx0Q29uZmlnLHtwZXJjZW50YWdlSW5uZXJDdXRvdXQgOiAwfSlcblx0fSk7XG5cbn0pLmNhbGwodGhpcyk7XG4oZnVuY3Rpb24oKXtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIHJvb3QgPSB0aGlzLFxuXHRcdENoYXJ0ID0gcm9vdC5DaGFydCxcblx0XHRoZWxwZXJzID0gQ2hhcnQuaGVscGVycztcblxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcblxuXHRcdC8vL0Jvb2xlYW4gLSBXaGV0aGVyIGdyaWQgbGluZXMgYXJlIHNob3duIGFjcm9zcyB0aGUgY2hhcnRcblx0XHRzY2FsZVNob3dHcmlkTGluZXMgOiB0cnVlLFxuXG5cdFx0Ly9TdHJpbmcgLSBDb2xvdXIgb2YgdGhlIGdyaWQgbGluZXNcblx0XHRzY2FsZUdyaWRMaW5lQ29sb3IgOiBcInJnYmEoMCwwLDAsLjA1KVwiLFxuXG5cdFx0Ly9OdW1iZXIgLSBXaWR0aCBvZiB0aGUgZ3JpZCBsaW5lc1xuXHRcdHNjYWxlR3JpZExpbmVXaWR0aCA6IDEsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgaG9yaXpvbnRhbCBsaW5lcyAoZXhjZXB0IFggYXhpcylcblx0XHRzY2FsZVNob3dIb3Jpem9udGFsTGluZXM6IHRydWUsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgdmVydGljYWwgbGluZXMgKGV4Y2VwdCBZIGF4aXMpXG5cdFx0c2NhbGVTaG93VmVydGljYWxMaW5lczogdHJ1ZSxcblxuXHRcdC8vQm9vbGVhbiAtIFdoZXRoZXIgdGhlIGxpbmUgaXMgY3VydmVkIGJldHdlZW4gcG9pbnRzXG5cdFx0YmV6aWVyQ3VydmUgOiB0cnVlLFxuXG5cdFx0Ly9OdW1iZXIgLSBUZW5zaW9uIG9mIHRoZSBiZXppZXIgY3VydmUgYmV0d2VlbiBwb2ludHNcblx0XHRiZXppZXJDdXJ2ZVRlbnNpb24gOiAwLjQsXG5cblx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgYSBkb3QgZm9yIGVhY2ggcG9pbnRcblx0XHRwb2ludERvdCA6IHRydWUsXG5cblx0XHQvL051bWJlciAtIFJhZGl1cyBvZiBlYWNoIHBvaW50IGRvdCBpbiBwaXhlbHNcblx0XHRwb2ludERvdFJhZGl1cyA6IDQsXG5cblx0XHQvL051bWJlciAtIFBpeGVsIHdpZHRoIG9mIHBvaW50IGRvdCBzdHJva2Vcblx0XHRwb2ludERvdFN0cm9rZVdpZHRoIDogMSxcblxuXHRcdC8vTnVtYmVyIC0gYW1vdW50IGV4dHJhIHRvIGFkZCB0byB0aGUgcmFkaXVzIHRvIGNhdGVyIGZvciBoaXQgZGV0ZWN0aW9uIG91dHNpZGUgdGhlIGRyYXduIHBvaW50XG5cdFx0cG9pbnRIaXREZXRlY3Rpb25SYWRpdXMgOiAyMCxcblxuXHRcdC8vQm9vbGVhbiAtIFdoZXRoZXIgdG8gc2hvdyBhIHN0cm9rZSBmb3IgZGF0YXNldHNcblx0XHRkYXRhc2V0U3Ryb2tlIDogdHJ1ZSxcblxuXHRcdC8vTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgZGF0YXNldCBzdHJva2Vcblx0XHRkYXRhc2V0U3Ryb2tlV2lkdGggOiAyLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBmaWxsIHRoZSBkYXRhc2V0IHdpdGggYSBjb2xvdXJcblx0XHRkYXRhc2V0RmlsbCA6IHRydWUsXG5cblx0XHQvL1N0cmluZyAtIEEgbGVnZW5kIHRlbXBsYXRlXG5cdFx0bGVnZW5kVGVtcGxhdGUgOiBcIjx1bCBjbGFzcz1cXFwiPCU9bmFtZS50b0xvd2VyQ2FzZSgpJT4tbGVnZW5kXFxcIj48JSBmb3IgKHZhciBpPTA7IGk8ZGF0YXNldHMubGVuZ3RoOyBpKyspeyU+PGxpPjxzcGFuIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWNvbG9yOjwlPWRhdGFzZXRzW2ldLnN0cm9rZUNvbG9yJT5cXFwiPjwvc3Bhbj48JWlmKGRhdGFzZXRzW2ldLmxhYmVsKXslPjwlPWRhdGFzZXRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPlwiXG5cblx0fTtcblxuXG5cdENoYXJ0LlR5cGUuZXh0ZW5kKHtcblx0XHRuYW1lOiBcIkxpbmVcIixcblx0XHRkZWZhdWx0cyA6IGRlZmF1bHRDb25maWcsXG5cdFx0aW5pdGlhbGl6ZTogIGZ1bmN0aW9uKGRhdGEpe1xuXHRcdFx0Ly9EZWNsYXJlIHRoZSBleHRlbnNpb24gb2YgdGhlIGRlZmF1bHQgcG9pbnQsIHRvIGNhdGVyIGZvciB0aGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG5cdFx0XHR0aGlzLlBvaW50Q2xhc3MgPSBDaGFydC5Qb2ludC5leHRlbmQoe1xuXHRcdFx0XHRzdHJva2VXaWR0aCA6IHRoaXMub3B0aW9ucy5wb2ludERvdFN0cm9rZVdpZHRoLFxuXHRcdFx0XHRyYWRpdXMgOiB0aGlzLm9wdGlvbnMucG9pbnREb3RSYWRpdXMsXG5cdFx0XHRcdGRpc3BsYXk6IHRoaXMub3B0aW9ucy5wb2ludERvdCxcblx0XHRcdFx0aGl0RGV0ZWN0aW9uUmFkaXVzIDogdGhpcy5vcHRpb25zLnBvaW50SGl0RGV0ZWN0aW9uUmFkaXVzLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0aW5SYW5nZSA6IGZ1bmN0aW9uKG1vdXNlWCl7XG5cdFx0XHRcdFx0cmV0dXJuIChNYXRoLnBvdyhtb3VzZVgtdGhpcy54LCAyKSA8IE1hdGgucG93KHRoaXMucmFkaXVzICsgdGhpcy5oaXREZXRlY3Rpb25SYWRpdXMsMikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kYXRhc2V0cyA9IFtdO1xuXG5cdFx0XHQvL1NldCB1cCB0b29sdGlwIGV2ZW50cyBvbiB0aGUgY2hhcnRcblx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBzKXtcblx0XHRcdFx0aGVscGVycy5iaW5kRXZlbnRzKHRoaXMsIHRoaXMub3B0aW9ucy50b29sdGlwRXZlbnRzLCBmdW5jdGlvbihldnQpe1xuXHRcdFx0XHRcdHZhciBhY3RpdmVQb2ludHMgPSAoZXZ0LnR5cGUgIT09ICdtb3VzZW91dCcpID8gdGhpcy5nZXRQb2ludHNBdEV2ZW50KGV2dCkgOiBbXTtcblx0XHRcdFx0XHR0aGlzLmVhY2hQb2ludHMoZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdFx0cG9pbnQucmVzdG9yZShbJ2ZpbGxDb2xvcicsICdzdHJva2VDb2xvciddKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2goYWN0aXZlUG9pbnRzLCBmdW5jdGlvbihhY3RpdmVQb2ludCl7XG5cdFx0XHRcdFx0XHRhY3RpdmVQb2ludC5maWxsQ29sb3IgPSBhY3RpdmVQb2ludC5oaWdobGlnaHRGaWxsO1xuXHRcdFx0XHRcdFx0YWN0aXZlUG9pbnQuc3Ryb2tlQ29sb3IgPSBhY3RpdmVQb2ludC5oaWdobGlnaHRTdHJva2U7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5zaG93VG9vbHRpcChhY3RpdmVQb2ludHMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9JdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgZGF0YXNldHMsIGFuZCBidWlsZCB0aGlzIGludG8gYSBwcm9wZXJ0eSBvZiB0aGUgY2hhcnRcblx0XHRcdGhlbHBlcnMuZWFjaChkYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXG5cdFx0XHRcdHZhciBkYXRhc2V0T2JqZWN0ID0ge1xuXHRcdFx0XHRcdGxhYmVsIDogZGF0YXNldC5sYWJlbCB8fCBudWxsLFxuXHRcdFx0XHRcdGZpbGxDb2xvciA6IGRhdGFzZXQuZmlsbENvbG9yLFxuXHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5zdHJva2VDb2xvcixcblx0XHRcdFx0XHRwb2ludENvbG9yIDogZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdHBvaW50U3Ryb2tlQ29sb3IgOiBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0cG9pbnRzIDogW11cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzLnB1c2goZGF0YXNldE9iamVjdCk7XG5cblxuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5kYXRhLGZ1bmN0aW9uKGRhdGFQb2ludCxpbmRleCl7XG5cdFx0XHRcdFx0Ly9BZGQgYSBuZXcgcG9pbnQgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSwgcGFzc2luZyBhbnkgcmVxdWlyZWQgZGF0YSB0byBkcmF3LlxuXHRcdFx0XHRcdGRhdGFzZXRPYmplY3QucG9pbnRzLnB1c2gobmV3IHRoaXMuUG9pbnRDbGFzcyh7XG5cdFx0XHRcdFx0XHR2YWx1ZSA6IGRhdGFQb2ludCxcblx0XHRcdFx0XHRcdGxhYmVsIDogZGF0YS5sYWJlbHNbaW5kZXhdLFxuXHRcdFx0XHRcdFx0ZGF0YXNldExhYmVsOiBkYXRhc2V0LmxhYmVsLFxuXHRcdFx0XHRcdFx0c3Ryb2tlQ29sb3IgOiBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0XHRmaWxsQ29sb3IgOiBkYXRhc2V0LnBvaW50Q29sb3IsXG5cdFx0XHRcdFx0XHRoaWdobGlnaHRGaWxsIDogZGF0YXNldC5wb2ludEhpZ2hsaWdodEZpbGwgfHwgZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdFx0aGlnaGxpZ2h0U3Ryb2tlIDogZGF0YXNldC5wb2ludEhpZ2hsaWdodFN0cm9rZSB8fCBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3Jcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdFx0dGhpcy5idWlsZFNjYWxlKGRhdGEubGFiZWxzKTtcblxuXG5cdFx0XHRcdHRoaXMuZWFjaFBvaW50cyhmdW5jdGlvbihwb2ludCwgaW5kZXgpe1xuXHRcdFx0XHRcdGhlbHBlcnMuZXh0ZW5kKHBvaW50LCB7XG5cdFx0XHRcdFx0XHR4OiB0aGlzLnNjYWxlLmNhbGN1bGF0ZVgoaW5kZXgpLFxuXHRcdFx0XHRcdFx0eTogdGhpcy5zY2FsZS5lbmRQb2ludFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHBvaW50LnNhdmUoKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cblx0XHRcdH0sdGhpcyk7XG5cblxuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9LFxuXHRcdHVwZGF0ZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNjYWxlLnVwZGF0ZSgpO1xuXHRcdFx0Ly8gUmVzZXQgYW55IGhpZ2hsaWdodCBjb2xvdXJzIGJlZm9yZSB1cGRhdGluZy5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmFjdGl2ZUVsZW1lbnRzLCBmdW5jdGlvbihhY3RpdmVFbGVtZW50KXtcblx0XHRcdFx0YWN0aXZlRWxlbWVudC5yZXN0b3JlKFsnZmlsbENvbG9yJywgJ3N0cm9rZUNvbG9yJ10pO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmVhY2hQb2ludHMoZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRwb2ludC5zYXZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRlYWNoUG9pbnRzIDogZnVuY3Rpb24oY2FsbGJhY2spe1xuXHRcdFx0aGVscGVycy5lYWNoKHRoaXMuZGF0YXNldHMsZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LnBvaW50cyxjYWxsYmFjayx0aGlzKTtcblx0XHRcdH0sdGhpcyk7XG5cdFx0fSxcblx0XHRnZXRQb2ludHNBdEV2ZW50IDogZnVuY3Rpb24oZSl7XG5cdFx0XHR2YXIgcG9pbnRzQXJyYXkgPSBbXSxcblx0XHRcdFx0ZXZlbnRQb3NpdGlvbiA9IGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlKTtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5wb2ludHMsZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdGlmIChwb2ludC5pblJhbmdlKGV2ZW50UG9zaXRpb24ueCxldmVudFBvc2l0aW9uLnkpKSBwb2ludHNBcnJheS5wdXNoKHBvaW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdFx0cmV0dXJuIHBvaW50c0FycmF5O1xuXHRcdH0sXG5cdFx0YnVpbGRTY2FsZSA6IGZ1bmN0aW9uKGxhYmVscyl7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHZhciBkYXRhVG90YWwgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0XHRcdHNlbGYuZWFjaFBvaW50cyhmdW5jdGlvbihwb2ludCl7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2gocG9pbnQudmFsdWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIHNjYWxlT3B0aW9ucyA9IHtcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmcgOiB0aGlzLm9wdGlvbnMuc2NhbGVMYWJlbCxcblx0XHRcdFx0aGVpZ2h0IDogdGhpcy5jaGFydC5oZWlnaHQsXG5cdFx0XHRcdHdpZHRoIDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0Y3R4IDogdGhpcy5jaGFydC5jdHgsXG5cdFx0XHRcdHRleHRDb2xvciA6IHRoaXMub3B0aW9ucy5zY2FsZUZvbnRDb2xvcixcblx0XHRcdFx0Zm9udFNpemUgOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udFN0eWxlIDogdGhpcy5vcHRpb25zLnNjYWxlRm9udFN0eWxlLFxuXHRcdFx0XHRmb250RmFtaWx5IDogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0dmFsdWVzQ291bnQgOiBsYWJlbHMubGVuZ3RoLFxuXHRcdFx0XHRiZWdpbkF0WmVybyA6IHRoaXMub3B0aW9ucy5zY2FsZUJlZ2luQXRaZXJvLFxuXHRcdFx0XHRpbnRlZ2Vyc09ubHkgOiB0aGlzLm9wdGlvbnMuc2NhbGVJbnRlZ2Vyc09ubHksXG5cdFx0XHRcdGNhbGN1bGF0ZVlSYW5nZSA6IGZ1bmN0aW9uKGN1cnJlbnRIZWlnaHQpe1xuXHRcdFx0XHRcdHZhciB1cGRhdGVkUmFuZ2VzID0gaGVscGVycy5jYWxjdWxhdGVTY2FsZVJhbmdlKFxuXHRcdFx0XHRcdFx0ZGF0YVRvdGFsKCksXG5cdFx0XHRcdFx0XHRjdXJyZW50SGVpZ2h0LFxuXHRcdFx0XHRcdFx0dGhpcy5mb250U2l6ZSxcblx0XHRcdFx0XHRcdHRoaXMuYmVnaW5BdFplcm8sXG5cdFx0XHRcdFx0XHR0aGlzLmludGVnZXJzT25seVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aGVscGVycy5leHRlbmQodGhpcywgdXBkYXRlZFJhbmdlcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHhMYWJlbHMgOiBsYWJlbHMsXG5cdFx0XHRcdGZvbnQgOiBoZWxwZXJzLmZvbnRTdHJpbmcodGhpcy5vcHRpb25zLnNjYWxlRm9udFNpemUsIHRoaXMub3B0aW9ucy5zY2FsZUZvbnRTdHlsZSwgdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSksXG5cdFx0XHRcdGxpbmVXaWR0aCA6IHRoaXMub3B0aW9ucy5zY2FsZUxpbmVXaWR0aCxcblx0XHRcdFx0bGluZUNvbG9yIDogdGhpcy5vcHRpb25zLnNjYWxlTGluZUNvbG9yLFxuXHRcdFx0XHRzaG93SG9yaXpvbnRhbExpbmVzIDogdGhpcy5vcHRpb25zLnNjYWxlU2hvd0hvcml6b250YWxMaW5lcyxcblx0XHRcdFx0c2hvd1ZlcnRpY2FsTGluZXMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93VmVydGljYWxMaW5lcyxcblx0XHRcdFx0Z3JpZExpbmVXaWR0aCA6ICh0aGlzLm9wdGlvbnMuc2NhbGVTaG93R3JpZExpbmVzKSA/IHRoaXMub3B0aW9ucy5zY2FsZUdyaWRMaW5lV2lkdGggOiAwLFxuXHRcdFx0XHRncmlkTGluZUNvbG9yIDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dHcmlkTGluZXMpID8gdGhpcy5vcHRpb25zLnNjYWxlR3JpZExpbmVDb2xvciA6IFwicmdiYSgwLDAsMCwwKVwiLFxuXHRcdFx0XHRwYWRkaW5nOiAodGhpcy5vcHRpb25zLnNob3dTY2FsZSkgPyAwIDogdGhpcy5vcHRpb25zLnBvaW50RG90UmFkaXVzICsgdGhpcy5vcHRpb25zLnBvaW50RG90U3Ryb2tlV2lkdGgsXG5cdFx0XHRcdHNob3dMYWJlbHMgOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxzLFxuXHRcdFx0XHRkaXNwbGF5IDogdGhpcy5vcHRpb25zLnNob3dTY2FsZVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zY2FsZU92ZXJyaWRlKXtcblx0XHRcdFx0aGVscGVycy5leHRlbmQoc2NhbGVPcHRpb25zLCB7XG5cdFx0XHRcdFx0Y2FsY3VsYXRlWVJhbmdlOiBoZWxwZXJzLm5vb3AsXG5cdFx0XHRcdFx0c3RlcHM6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzLFxuXHRcdFx0XHRcdHN0ZXBWYWx1ZTogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoLFxuXHRcdFx0XHRcdG1pbjogdGhpcy5vcHRpb25zLnNjYWxlU3RhcnRWYWx1ZSxcblx0XHRcdFx0XHRtYXg6IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUgKyAodGhpcy5vcHRpb25zLnNjYWxlU3RlcHMgKiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwV2lkdGgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cblx0XHRcdHRoaXMuc2NhbGUgPSBuZXcgQ2hhcnQuU2NhbGUoc2NhbGVPcHRpb25zKTtcblx0XHR9LFxuXHRcdGFkZERhdGEgOiBmdW5jdGlvbih2YWx1ZXNBcnJheSxsYWJlbCl7XG5cdFx0XHQvL01hcCB0aGUgdmFsdWVzIGFycmF5IGZvciBlYWNoIG9mIHRoZSBkYXRhc2V0c1xuXG5cdFx0XHRoZWxwZXJzLmVhY2godmFsdWVzQXJyYXksZnVuY3Rpb24odmFsdWUsZGF0YXNldEluZGV4KXtcblx0XHRcdFx0Ly9BZGQgYSBuZXcgcG9pbnQgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSwgcGFzc2luZyBhbnkgcmVxdWlyZWQgZGF0YSB0byBkcmF3LlxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRzLnB1c2gobmV3IHRoaXMuUG9pbnRDbGFzcyh7XG5cdFx0XHRcdFx0dmFsdWUgOiB2YWx1ZSxcblx0XHRcdFx0XHRsYWJlbCA6IGxhYmVsLFxuXHRcdFx0XHRcdHg6IHRoaXMuc2NhbGUuY2FsY3VsYXRlWCh0aGlzLnNjYWxlLnZhbHVlc0NvdW50KzEpLFxuXHRcdFx0XHRcdHk6IHRoaXMuc2NhbGUuZW5kUG9pbnQsXG5cdFx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRTdHJva2VDb2xvcixcblx0XHRcdFx0XHRmaWxsQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRDb2xvclxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR0aGlzLnNjYWxlLmFkZFhMYWJlbChsYWJlbCk7XG5cdFx0XHQvL1RoZW4gcmUtcmVuZGVyIHRoZSBjaGFydC5cblx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0fSxcblx0XHRyZW1vdmVEYXRhIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2NhbGUucmVtb3ZlWExhYmVsKCk7XG5cdFx0XHQvL1RoZW4gcmUtcmVuZGVyIHRoZSBjaGFydC5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRkYXRhc2V0LnBvaW50cy5zaGlmdCgpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHRoaXMudXBkYXRlKCk7XG5cdFx0fSxcblx0XHRyZWZsb3cgOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIG5ld1NjYWxlUHJvcHMgPSBoZWxwZXJzLmV4dGVuZCh7XG5cdFx0XHRcdGhlaWdodCA6IHRoaXMuY2hhcnQuaGVpZ2h0LFxuXHRcdFx0XHR3aWR0aCA6IHRoaXMuY2hhcnQud2lkdGhcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zY2FsZS51cGRhdGUobmV3U2NhbGVQcm9wcyk7XG5cdFx0fSxcblx0XHRkcmF3IDogZnVuY3Rpb24oZWFzZSl7XG5cdFx0XHR2YXIgZWFzaW5nRGVjaW1hbCA9IGVhc2UgfHwgMTtcblx0XHRcdHRoaXMuY2xlYXIoKTtcblxuXHRcdFx0dmFyIGN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuXG5cdFx0XHQvLyBTb21lIGhlbHBlciBtZXRob2RzIGZvciBnZXR0aW5nIHRoZSBuZXh0L3ByZXYgcG9pbnRzXG5cdFx0XHR2YXIgaGFzVmFsdWUgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgIT09IG51bGw7XG5cdFx0XHR9LFxuXHRcdFx0bmV4dFBvaW50ID0gZnVuY3Rpb24ocG9pbnQsIGNvbGxlY3Rpb24sIGluZGV4KXtcblx0XHRcdFx0cmV0dXJuIGhlbHBlcnMuZmluZE5leHRXaGVyZShjb2xsZWN0aW9uLCBoYXNWYWx1ZSwgaW5kZXgpIHx8IHBvaW50O1xuXHRcdFx0fSxcblx0XHRcdHByZXZpb3VzUG9pbnQgPSBmdW5jdGlvbihwb2ludCwgY29sbGVjdGlvbiwgaW5kZXgpe1xuXHRcdFx0XHRyZXR1cm4gaGVscGVycy5maW5kUHJldmlvdXNXaGVyZShjb2xsZWN0aW9uLCBoYXNWYWx1ZSwgaW5kZXgpIHx8IHBvaW50O1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5zY2FsZS5kcmF3KGVhc2luZ0RlY2ltYWwpO1xuXG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHR2YXIgcG9pbnRzV2l0aFZhbHVlcyA9IGhlbHBlcnMud2hlcmUoZGF0YXNldC5wb2ludHMsIGhhc1ZhbHVlKTtcblxuXHRcdFx0XHQvL1RyYW5zaXRpb24gZWFjaCBwb2ludCBmaXJzdCBzbyB0aGF0IHRoZSBsaW5lIGFuZCBwb2ludCBkcmF3aW5nIGlzbid0IG91dCBvZiBzeW5jXG5cdFx0XHRcdC8vV2UgY2FuIHVzZSB0aGlzIGV4dHJhIGxvb3AgdG8gY2FsY3VsYXRlIHRoZSBjb250cm9sIHBvaW50cyBvZiB0aGlzIGRhdGFzZXQgYWxzbyBpbiB0aGlzIGxvb3BcblxuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5wb2ludHMsIGZ1bmN0aW9uKHBvaW50LCBpbmRleCl7XG5cdFx0XHRcdFx0aWYgKHBvaW50Lmhhc1ZhbHVlKCkpe1xuXHRcdFx0XHRcdFx0cG9pbnQudHJhbnNpdGlvbih7XG5cdFx0XHRcdFx0XHRcdHkgOiB0aGlzLnNjYWxlLmNhbGN1bGF0ZVkocG9pbnQudmFsdWUpLFxuXHRcdFx0XHRcdFx0XHR4IDogdGhpcy5zY2FsZS5jYWxjdWxhdGVYKGluZGV4KVxuXHRcdFx0XHRcdFx0fSwgZWFzaW5nRGVjaW1hbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LHRoaXMpO1xuXG5cblx0XHRcdFx0Ly8gQ29udHJvbCBwb2ludHMgbmVlZCB0byBiZSBjYWxjdWxhdGVkIGluIGEgc2VwZXJhdGUgbG9vcCwgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cgdGhlIGN1cnJlbnQgeC95IG9mIHRoZSBwb2ludFxuXHRcdFx0XHQvLyBUaGlzIHdvdWxkIGNhdXNlIGlzc3VlcyB3aGVuIHRoZXJlIGlzIG5vIGFuaW1hdGlvbiwgYmVjYXVzZSB0aGUgeSBvZiB0aGUgbmV4dCBwb2ludCB3b3VsZCBiZSAwLCBzbyBiZXppZXJzIHdvdWxkIGJlIHNrZXdlZFxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25zLmJlemllckN1cnZlKXtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2gocG9pbnRzV2l0aFZhbHVlcywgZnVuY3Rpb24ocG9pbnQsIGluZGV4KXtcblx0XHRcdFx0XHRcdHZhciB0ZW5zaW9uID0gKGluZGV4ID4gMCAmJiBpbmRleCA8IHBvaW50c1dpdGhWYWx1ZXMubGVuZ3RoIC0gMSkgPyB0aGlzLm9wdGlvbnMuYmV6aWVyQ3VydmVUZW5zaW9uIDogMDtcblx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMgPSBoZWxwZXJzLnNwbGluZUN1cnZlKFxuXHRcdFx0XHRcdFx0XHRwcmV2aW91c1BvaW50KHBvaW50LCBwb2ludHNXaXRoVmFsdWVzLCBpbmRleCksXG5cdFx0XHRcdFx0XHRcdHBvaW50LFxuXHRcdFx0XHRcdFx0XHRuZXh0UG9pbnQocG9pbnQsIHBvaW50c1dpdGhWYWx1ZXMsIGluZGV4KSxcblx0XHRcdFx0XHRcdFx0dGVuc2lvblxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gUHJldmVudCB0aGUgYmV6aWVyIGdvaW5nIG91dHNpZGUgb2YgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwIHB1dGVyIGJlemllciBoYW5kbGVzIHRvIHRoZSB1cHBlci9sb3dlciBzY2FsZSBib3VuZHNcblx0XHRcdFx0XHRcdGlmIChwb2ludC5jb250cm9sUG9pbnRzLm91dGVyLnkgPiB0aGlzLnNjYWxlLmVuZFBvaW50KXtcblx0XHRcdFx0XHRcdFx0cG9pbnQuY29udHJvbFBvaW50cy5vdXRlci55ID0gdGhpcy5zY2FsZS5lbmRQb2ludDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHBvaW50LmNvbnRyb2xQb2ludHMub3V0ZXIueSA8IHRoaXMuc2NhbGUuc3RhcnRQb2ludCl7XG5cdFx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMub3V0ZXIueSA9IHRoaXMuc2NhbGUuc3RhcnRQb2ludDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gQ2FwIGlubmVyIGJlemllciBoYW5kbGVzIHRvIHRoZSB1cHBlci9sb3dlciBzY2FsZSBib3VuZHNcblx0XHRcdFx0XHRcdGlmIChwb2ludC5jb250cm9sUG9pbnRzLmlubmVyLnkgPiB0aGlzLnNjYWxlLmVuZFBvaW50KXtcblx0XHRcdFx0XHRcdFx0cG9pbnQuY29udHJvbFBvaW50cy5pbm5lci55ID0gdGhpcy5zY2FsZS5lbmRQb2ludDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHBvaW50LmNvbnRyb2xQb2ludHMuaW5uZXIueSA8IHRoaXMuc2NhbGUuc3RhcnRQb2ludCl7XG5cdFx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMuaW5uZXIueSA9IHRoaXMuc2NhbGUuc3RhcnRQb2ludDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LHRoaXMpO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHQvL0RyYXcgdGhlIGxpbmUgYmV0d2VlbiBhbGwgdGhlIHBvaW50c1xuXHRcdFx0XHRjdHgubGluZVdpZHRoID0gdGhpcy5vcHRpb25zLmRhdGFzZXRTdHJva2VXaWR0aDtcblx0XHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gZGF0YXNldC5zdHJva2VDb2xvcjtcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChwb2ludHNXaXRoVmFsdWVzLCBmdW5jdGlvbihwb2ludCwgaW5kZXgpe1xuXHRcdFx0XHRcdGlmIChpbmRleCA9PT0gMCl7XG5cdFx0XHRcdFx0XHRjdHgubW92ZVRvKHBvaW50LngsIHBvaW50LnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLmJlemllckN1cnZlKXtcblx0XHRcdFx0XHRcdFx0dmFyIHByZXZpb3VzID0gcHJldmlvdXNQb2ludChwb2ludCwgcG9pbnRzV2l0aFZhbHVlcywgaW5kZXgpO1xuXG5cdFx0XHRcdFx0XHRcdGN0eC5iZXppZXJDdXJ2ZVRvKFxuXHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzLmNvbnRyb2xQb2ludHMub3V0ZXIueCxcblx0XHRcdFx0XHRcdFx0XHRwcmV2aW91cy5jb250cm9sUG9pbnRzLm91dGVyLnksXG5cdFx0XHRcdFx0XHRcdFx0cG9pbnQuY29udHJvbFBvaW50cy5pbm5lci54LFxuXHRcdFx0XHRcdFx0XHRcdHBvaW50LmNvbnRyb2xQb2ludHMuaW5uZXIueSxcblx0XHRcdFx0XHRcdFx0XHRwb2ludC54LFxuXHRcdFx0XHRcdFx0XHRcdHBvaW50Lnlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnQueCxwb2ludC55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIHRoaXMpO1xuXG5cdFx0XHRcdGN0eC5zdHJva2UoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25zLmRhdGFzZXRGaWxsICYmIHBvaW50c1dpdGhWYWx1ZXMubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0Ly9Sb3VuZCBvZmYgdGhlIGxpbmUgYnkgZ29pbmcgdG8gdGhlIGJhc2Ugb2YgdGhlIGNoYXJ0LCBiYWNrIHRvIHRoZSBzdGFydCwgdGhlbiBmaWxsLlxuXHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnRzV2l0aFZhbHVlc1twb2ludHNXaXRoVmFsdWVzLmxlbmd0aCAtIDFdLngsIHRoaXMuc2NhbGUuZW5kUG9pbnQpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8ocG9pbnRzV2l0aFZhbHVlc1swXS54LCB0aGlzLnNjYWxlLmVuZFBvaW50KTtcblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gZGF0YXNldC5maWxsQ29sb3I7XG5cdFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5maWxsKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL05vdyBkcmF3IHRoZSBwb2ludHMgb3ZlciB0aGUgbGluZVxuXHRcdFx0XHQvL0EgbGl0dGxlIGluZWZmaWNpZW50IGRvdWJsZSBsb29waW5nLCBidXQgYmV0dGVyIHRoYW4gdGhlIGxpbmVcblx0XHRcdFx0Ly9sYWdnaW5nIGJlaGluZCB0aGUgcG9pbnQgcG9zaXRpb25zXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChwb2ludHNXaXRoVmFsdWVzLGZ1bmN0aW9uKHBvaW50KXtcblx0XHRcdFx0XHRwb2ludC5kcmF3KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSx0aGlzKTtcblx0XHR9XG5cdH0pO1xuXG5cbn0pLmNhbGwodGhpcyk7XG5cbihmdW5jdGlvbigpe1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgcm9vdCA9IHRoaXMsXG5cdFx0Q2hhcnQgPSByb290LkNoYXJ0LFxuXHRcdC8vQ2FjaGUgYSBsb2NhbCByZWZlcmVuY2UgdG8gQ2hhcnQuaGVscGVyc1xuXHRcdGhlbHBlcnMgPSBDaGFydC5oZWxwZXJzO1xuXG5cdHZhciBkZWZhdWx0Q29uZmlnID0ge1xuXHRcdC8vQm9vbGVhbiAtIFNob3cgYSBiYWNrZHJvcCB0byB0aGUgc2NhbGUgbGFiZWxcblx0XHRzY2FsZVNob3dMYWJlbEJhY2tkcm9wIDogdHJ1ZSxcblxuXHRcdC8vU3RyaW5nIC0gVGhlIGNvbG91ciBvZiB0aGUgbGFiZWwgYmFja2Ryb3Bcblx0XHRzY2FsZUJhY2tkcm9wQ29sb3IgOiBcInJnYmEoMjU1LDI1NSwyNTUsMC43NSlcIixcblxuXHRcdC8vIEJvb2xlYW4gLSBXaGV0aGVyIHRoZSBzY2FsZSBzaG91bGQgYmVnaW4gYXQgemVyb1xuXHRcdHNjYWxlQmVnaW5BdFplcm8gOiB0cnVlLFxuXG5cdFx0Ly9OdW1iZXIgLSBUaGUgYmFja2Ryb3AgcGFkZGluZyBhYm92ZSAmIGJlbG93IHRoZSBsYWJlbCBpbiBwaXhlbHNcblx0XHRzY2FsZUJhY2tkcm9wUGFkZGluZ1kgOiAyLFxuXG5cdFx0Ly9OdW1iZXIgLSBUaGUgYmFja2Ryb3AgcGFkZGluZyB0byB0aGUgc2lkZSBvZiB0aGUgbGFiZWwgaW4gcGl4ZWxzXG5cdFx0c2NhbGVCYWNrZHJvcFBhZGRpbmdYIDogMixcblxuXHRcdC8vQm9vbGVhbiAtIFNob3cgbGluZSBmb3IgZWFjaCB2YWx1ZSBpbiB0aGUgc2NhbGVcblx0XHRzY2FsZVNob3dMaW5lIDogdHJ1ZSxcblxuXHRcdC8vQm9vbGVhbiAtIFN0cm9rZSBhIGxpbmUgYXJvdW5kIGVhY2ggc2VnbWVudCBpbiB0aGUgY2hhcnRcblx0XHRzZWdtZW50U2hvd1N0cm9rZSA6IHRydWUsXG5cblx0XHQvL1N0cmluZyAtIFRoZSBjb2xvdXIgb2YgdGhlIHN0cm9rZSBvbiBlYWNoIHNlZ2VtZW50LlxuXHRcdHNlZ21lbnRTdHJva2VDb2xvciA6IFwiI2ZmZlwiLFxuXG5cdFx0Ly9OdW1iZXIgLSBUaGUgd2lkdGggb2YgdGhlIHN0cm9rZSB2YWx1ZSBpbiBwaXhlbHNcblx0XHRzZWdtZW50U3Ryb2tlV2lkdGggOiAyLFxuXG5cdFx0Ly9OdW1iZXIgLSBBbW91bnQgb2YgYW5pbWF0aW9uIHN0ZXBzXG5cdFx0YW5pbWF0aW9uU3RlcHMgOiAxMDAsXG5cblx0XHQvL1N0cmluZyAtIEFuaW1hdGlvbiBlYXNpbmcgZWZmZWN0LlxuXHRcdGFuaW1hdGlvbkVhc2luZyA6IFwiZWFzZU91dEJvdW5jZVwiLFxuXG5cdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBhbmltYXRlIHRoZSByb3RhdGlvbiBvZiB0aGUgY2hhcnRcblx0XHRhbmltYXRlUm90YXRlIDogdHJ1ZSxcblxuXHRcdC8vQm9vbGVhbiAtIFdoZXRoZXIgdG8gYW5pbWF0ZSBzY2FsaW5nIHRoZSBjaGFydCBmcm9tIHRoZSBjZW50cmVcblx0XHRhbmltYXRlU2NhbGUgOiBmYWxzZSxcblxuXHRcdC8vU3RyaW5nIC0gQSBsZWdlbmQgdGVtcGxhdGVcblx0XHRsZWdlbmRUZW1wbGF0ZSA6IFwiPHVsIGNsYXNzPVxcXCI8JT1uYW1lLnRvTG93ZXJDYXNlKCklPi1sZWdlbmRcXFwiPjwlIGZvciAodmFyIGk9MDsgaTxzZWdtZW50cy5sZW5ndGg7IGkrKyl7JT48bGk+PHNwYW4gc3R5bGU9XFxcImJhY2tncm91bmQtY29sb3I6PCU9c2VnbWVudHNbaV0uZmlsbENvbG9yJT5cXFwiPjwvc3Bhbj48JWlmKHNlZ21lbnRzW2ldLmxhYmVsKXslPjwlPXNlZ21lbnRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPlwiXG5cdH07XG5cblxuXHRDaGFydC5UeXBlLmV4dGVuZCh7XG5cdFx0Ly9QYXNzaW5nIGluIGEgbmFtZSByZWdpc3RlcnMgdGhpcyBjaGFydCBpbiB0aGUgQ2hhcnQgbmFtZXNwYWNlXG5cdFx0bmFtZTogXCJQb2xhckFyZWFcIixcblx0XHQvL1Byb3ZpZGluZyBhIGRlZmF1bHRzIHdpbGwgYWxzbyByZWdpc3RlciB0aGUgZGVhZnVsdHMgaW4gdGhlIGNoYXJ0IG5hbWVzcGFjZVxuXHRcdGRlZmF1bHRzIDogZGVmYXVsdENvbmZpZyxcblx0XHQvL0luaXRpYWxpemUgaXMgZmlyZWQgd2hlbiB0aGUgY2hhcnQgaXMgaW5pdGlhbGl6ZWQgLSBEYXRhIGlzIHBhc3NlZCBpbiBhcyBhIHBhcmFtZXRlclxuXHRcdC8vQ29uZmlnIGlzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkIGJ5IHRoZSBjb3JlIG9mIENoYXJ0LmpzLCBhbmQgaXMgYXZhaWxhYmxlIGF0IHRoaXMub3B0aW9uc1xuXHRcdGluaXRpYWxpemU6ICBmdW5jdGlvbihkYXRhKXtcblx0XHRcdHRoaXMuc2VnbWVudHMgPSBbXTtcblx0XHRcdC8vRGVjbGFyZSBzZWdtZW50IGNsYXNzIGFzIGEgY2hhcnQgaW5zdGFuY2Ugc3BlY2lmaWMgY2xhc3MsIHNvIGl0IGNhbiBzaGFyZSBwcm9wcyBmb3IgdGhpcyBpbnN0YW5jZVxuXHRcdFx0dGhpcy5TZWdtZW50QXJjID0gQ2hhcnQuQXJjLmV4dGVuZCh7XG5cdFx0XHRcdHNob3dTdHJva2UgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFNob3dTdHJva2UsXG5cdFx0XHRcdHN0cm9rZVdpZHRoIDogdGhpcy5vcHRpb25zLnNlZ21lbnRTdHJva2VXaWR0aCxcblx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLm9wdGlvbnMuc2VnbWVudFN0cm9rZUNvbG9yLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0aW5uZXJSYWRpdXMgOiAwLFxuXHRcdFx0XHR4IDogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHR5IDogdGhpcy5jaGFydC5oZWlnaHQvMlxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNjYWxlID0gbmV3IENoYXJ0LlJhZGlhbFNjYWxlKHtcblx0XHRcdFx0ZGlzcGxheTogdGhpcy5vcHRpb25zLnNob3dTY2FsZSxcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U3R5bGUsXG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250Q29sb3IsXG5cdFx0XHRcdHNob3dMYWJlbHM6IHRoaXMub3B0aW9ucy5zY2FsZVNob3dMYWJlbHMsXG5cdFx0XHRcdHNob3dMYWJlbEJhY2tkcm9wOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxCYWNrZHJvcCxcblx0XHRcdFx0YmFja2Ryb3BDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlQmFja2Ryb3BDb2xvcixcblx0XHRcdFx0YmFja2Ryb3BQYWRkaW5nWSA6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1ksXG5cdFx0XHRcdGJhY2tkcm9wUGFkZGluZ1g6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1gsXG5cdFx0XHRcdGxpbmVXaWR0aDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dMaW5lKSA/IHRoaXMub3B0aW9ucy5zY2FsZUxpbmVXaWR0aCA6IDAsXG5cdFx0XHRcdGxpbmVDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlTGluZUNvbG9yLFxuXHRcdFx0XHRsaW5lQXJjOiB0cnVlLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNoYXJ0LmhlaWdodCxcblx0XHRcdFx0eENlbnRlcjogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHR5Q2VudGVyOiB0aGlzLmNoYXJ0LmhlaWdodC8yLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmc6IHRoaXMub3B0aW9ucy5zY2FsZUxhYmVsLFxuXHRcdFx0XHR2YWx1ZXNDb3VudDogZGF0YS5sZW5ndGhcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZVNjYWxlUmFuZ2UoZGF0YSk7XG5cblx0XHRcdHRoaXMuc2NhbGUudXBkYXRlKCk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaChkYXRhLGZ1bmN0aW9uKHNlZ21lbnQsaW5kZXgpe1xuXHRcdFx0XHR0aGlzLmFkZERhdGEoc2VnbWVudCxpbmRleCx0cnVlKTtcblx0XHRcdH0sdGhpcyk7XG5cblx0XHRcdC8vU2V0IHVwIHRvb2x0aXAgZXZlbnRzIG9uIHRoZSBjaGFydFxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcHMpe1xuXHRcdFx0XHRoZWxwZXJzLmJpbmRFdmVudHModGhpcywgdGhpcy5vcHRpb25zLnRvb2x0aXBFdmVudHMsIGZ1bmN0aW9uKGV2dCl7XG5cdFx0XHRcdFx0dmFyIGFjdGl2ZVNlZ21lbnRzID0gKGV2dC50eXBlICE9PSAnbW91c2VvdXQnKSA/IHRoaXMuZ2V0U2VnbWVudHNBdEV2ZW50KGV2dCkgOiBbXTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5zZWdtZW50cyxmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0XHRcdHNlZ21lbnQucmVzdG9yZShbXCJmaWxsQ29sb3JcIl0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGhlbHBlcnMuZWFjaChhY3RpdmVTZWdtZW50cyxmdW5jdGlvbihhY3RpdmVTZWdtZW50KXtcblx0XHRcdFx0XHRcdGFjdGl2ZVNlZ21lbnQuZmlsbENvbG9yID0gYWN0aXZlU2VnbWVudC5oaWdobGlnaHRDb2xvcjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnNob3dUb29sdGlwKGFjdGl2ZVNlZ21lbnRzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRnZXRTZWdtZW50c0F0RXZlbnQgOiBmdW5jdGlvbihlKXtcblx0XHRcdHZhciBzZWdtZW50c0FycmF5ID0gW107XG5cblx0XHRcdHZhciBsb2NhdGlvbiA9IGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlKTtcblxuXHRcdFx0aGVscGVycy5lYWNoKHRoaXMuc2VnbWVudHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdGlmIChzZWdtZW50LmluUmFuZ2UobG9jYXRpb24ueCxsb2NhdGlvbi55KSkgc2VnbWVudHNBcnJheS5wdXNoKHNlZ21lbnQpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHJldHVybiBzZWdtZW50c0FycmF5O1xuXHRcdH0sXG5cdFx0YWRkRGF0YSA6IGZ1bmN0aW9uKHNlZ21lbnQsIGF0SW5kZXgsIHNpbGVudCl7XG5cdFx0XHR2YXIgaW5kZXggPSBhdEluZGV4IHx8IHRoaXMuc2VnbWVudHMubGVuZ3RoO1xuXG5cdFx0XHR0aGlzLnNlZ21lbnRzLnNwbGljZShpbmRleCwgMCwgbmV3IHRoaXMuU2VnbWVudEFyYyh7XG5cdFx0XHRcdGZpbGxDb2xvcjogc2VnbWVudC5jb2xvcixcblx0XHRcdFx0aGlnaGxpZ2h0Q29sb3I6IHNlZ21lbnQuaGlnaGxpZ2h0IHx8IHNlZ21lbnQuY29sb3IsXG5cdFx0XHRcdGxhYmVsOiBzZWdtZW50LmxhYmVsLFxuXHRcdFx0XHR2YWx1ZTogc2VnbWVudC52YWx1ZSxcblx0XHRcdFx0b3V0ZXJSYWRpdXM6ICh0aGlzLm9wdGlvbnMuYW5pbWF0ZVNjYWxlKSA/IDAgOiB0aGlzLnNjYWxlLmNhbGN1bGF0ZUNlbnRlck9mZnNldChzZWdtZW50LnZhbHVlKSxcblx0XHRcdFx0Y2lyY3VtZmVyZW5jZTogKHRoaXMub3B0aW9ucy5hbmltYXRlUm90YXRlKSA/IDAgOiB0aGlzLnNjYWxlLmdldENpcmN1bWZlcmVuY2UoKSxcblx0XHRcdFx0c3RhcnRBbmdsZTogTWF0aC5QSSAqIDEuNVxuXHRcdFx0fSkpO1xuXHRcdFx0aWYgKCFzaWxlbnQpe1xuXHRcdFx0XHR0aGlzLnJlZmxvdygpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oYXRJbmRleCl7XG5cdFx0XHR2YXIgaW5kZXhUb0RlbGV0ZSA9IChoZWxwZXJzLmlzTnVtYmVyKGF0SW5kZXgpKSA/IGF0SW5kZXggOiB0aGlzLnNlZ21lbnRzLmxlbmd0aC0xO1xuXHRcdFx0dGhpcy5zZWdtZW50cy5zcGxpY2UoaW5kZXhUb0RlbGV0ZSwgMSk7XG5cdFx0XHR0aGlzLnJlZmxvdygpO1xuXHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHR9LFxuXHRcdGNhbGN1bGF0ZVRvdGFsOiBmdW5jdGlvbihkYXRhKXtcblx0XHRcdHRoaXMudG90YWwgPSAwO1xuXHRcdFx0aGVscGVycy5lYWNoKGRhdGEsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdHRoaXMudG90YWwgKz0gc2VnbWVudC52YWx1ZTtcblx0XHRcdH0sdGhpcyk7XG5cdFx0XHR0aGlzLnNjYWxlLnZhbHVlc0NvdW50ID0gdGhpcy5zZWdtZW50cy5sZW5ndGg7XG5cdFx0fSxcblx0XHR1cGRhdGVTY2FsZVJhbmdlOiBmdW5jdGlvbihkYXRhcG9pbnRzKXtcblx0XHRcdHZhciB2YWx1ZXNBcnJheSA9IFtdO1xuXHRcdFx0aGVscGVycy5lYWNoKGRhdGFwb2ludHMsZnVuY3Rpb24oc2VnbWVudCl7XG5cdFx0XHRcdHZhbHVlc0FycmF5LnB1c2goc2VnbWVudC52YWx1ZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIHNjYWxlU2l6ZXMgPSAodGhpcy5vcHRpb25zLnNjYWxlT3ZlcnJpZGUpID9cblx0XHRcdFx0e1xuXHRcdFx0XHRcdHN0ZXBzOiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwcyxcblx0XHRcdFx0XHRzdGVwVmFsdWU6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBXaWR0aCxcblx0XHRcdFx0XHRtaW46IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUsXG5cdFx0XHRcdFx0bWF4OiB0aGlzLm9wdGlvbnMuc2NhbGVTdGFydFZhbHVlICsgKHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzICogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoKVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0aGVscGVycy5jYWxjdWxhdGVTY2FsZVJhbmdlKFxuXHRcdFx0XHRcdHZhbHVlc0FycmF5LFxuXHRcdFx0XHRcdGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLCB0aGlzLmNoYXJ0LmhlaWdodF0pLzIsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlRm9udFNpemUsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlQmVnaW5BdFplcm8sXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlSW50ZWdlcnNPbmx5XG5cdFx0XHRcdCk7XG5cblx0XHRcdGhlbHBlcnMuZXh0ZW5kKFxuXHRcdFx0XHR0aGlzLnNjYWxlLFxuXHRcdFx0XHRzY2FsZVNpemVzLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2l6ZTogaGVscGVycy5taW4oW3RoaXMuY2hhcnQud2lkdGgsIHRoaXMuY2hhcnQuaGVpZ2h0XSksXG5cdFx0XHRcdFx0eENlbnRlcjogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHRcdHlDZW50ZXI6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdFx0fVxuXHRcdFx0KTtcblxuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuY2FsY3VsYXRlVG90YWwodGhpcy5zZWdtZW50cyk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLGZ1bmN0aW9uKHNlZ21lbnQpe1xuXHRcdFx0XHRzZWdtZW50LnNhdmUoKTtcblx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnJlZmxvdygpO1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9LFxuXHRcdHJlZmxvdyA6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLlNlZ21lbnRBcmMucHJvdG90eXBlLHtcblx0XHRcdFx0eCA6IHRoaXMuY2hhcnQud2lkdGgvMixcblx0XHRcdFx0eSA6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cGRhdGVTY2FsZVJhbmdlKHRoaXMuc2VnbWVudHMpO1xuXHRcdFx0dGhpcy5zY2FsZS51cGRhdGUoKTtcblxuXHRcdFx0aGVscGVycy5leHRlbmQodGhpcy5zY2FsZSx7XG5cdFx0XHRcdHhDZW50ZXI6IHRoaXMuY2hhcnQud2lkdGgvMixcblx0XHRcdFx0eUNlbnRlcjogdGhpcy5jaGFydC5oZWlnaHQvMlxuXHRcdFx0fSk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLnNlZ21lbnRzLCBmdW5jdGlvbihzZWdtZW50KXtcblx0XHRcdFx0c2VnbWVudC51cGRhdGUoe1xuXHRcdFx0XHRcdG91dGVyUmFkaXVzIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVDZW50ZXJPZmZzZXQoc2VnbWVudC52YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9LCB0aGlzKTtcblxuXHRcdH0sXG5cdFx0ZHJhdyA6IGZ1bmN0aW9uKGVhc2Upe1xuXHRcdFx0dmFyIGVhc2luZ0RlY2ltYWwgPSBlYXNlIHx8IDE7XG5cdFx0XHQvL0NsZWFyICYgZHJhdyB0aGUgY2FudmFzXG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cdFx0XHRoZWxwZXJzLmVhY2godGhpcy5zZWdtZW50cyxmdW5jdGlvbihzZWdtZW50LCBpbmRleCl7XG5cdFx0XHRcdHNlZ21lbnQudHJhbnNpdGlvbih7XG5cdFx0XHRcdFx0Y2lyY3VtZmVyZW5jZSA6IHRoaXMuc2NhbGUuZ2V0Q2lyY3VtZmVyZW5jZSgpLFxuXHRcdFx0XHRcdG91dGVyUmFkaXVzIDogdGhpcy5zY2FsZS5jYWxjdWxhdGVDZW50ZXJPZmZzZXQoc2VnbWVudC52YWx1ZSlcblx0XHRcdFx0fSxlYXNpbmdEZWNpbWFsKTtcblxuXHRcdFx0XHRzZWdtZW50LmVuZEFuZ2xlID0gc2VnbWVudC5zdGFydEFuZ2xlICsgc2VnbWVudC5jaXJjdW1mZXJlbmNlO1xuXG5cdFx0XHRcdC8vIElmIHdlJ3ZlIHJlbW92ZWQgdGhlIGZpcnN0IHNlZ21lbnQgd2UgbmVlZCB0byBzZXQgdGhlIGZpcnN0IG9uZSB0b1xuXHRcdFx0XHQvLyBzdGFydCBhdCB0aGUgdG9wLlxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDApe1xuXHRcdFx0XHRcdHNlZ21lbnQuc3RhcnRBbmdsZSA9IE1hdGguUEkgKiAxLjU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvL0NoZWNrIHRvIHNlZSBpZiBpdCdzIHRoZSBsYXN0IHNlZ21lbnQsIGlmIG5vdCBnZXQgdGhlIG5leHQgYW5kIHVwZGF0ZSB0aGUgc3RhcnQgYW5nbGVcblx0XHRcdFx0aWYgKGluZGV4IDwgdGhpcy5zZWdtZW50cy5sZW5ndGggLSAxKXtcblx0XHRcdFx0XHR0aGlzLnNlZ21lbnRzW2luZGV4KzFdLnN0YXJ0QW5nbGUgPSBzZWdtZW50LmVuZEFuZ2xlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZ21lbnQuZHJhdygpO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR0aGlzLnNjYWxlLmRyYXcoKTtcblx0XHR9XG5cdH0pO1xuXG59KS5jYWxsKHRoaXMpO1xuKGZ1bmN0aW9uKCl7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciByb290ID0gdGhpcyxcblx0XHRDaGFydCA9IHJvb3QuQ2hhcnQsXG5cdFx0aGVscGVycyA9IENoYXJ0LmhlbHBlcnM7XG5cblxuXG5cdENoYXJ0LlR5cGUuZXh0ZW5kKHtcblx0XHRuYW1lOiBcIlJhZGFyXCIsXG5cdFx0ZGVmYXVsdHM6e1xuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IGxpbmVzIGZvciBlYWNoIHNjYWxlIHBvaW50XG5cdFx0XHRzY2FsZVNob3dMaW5lIDogdHJ1ZSxcblxuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB3ZSBzaG93IHRoZSBhbmdsZSBsaW5lcyBvdXQgb2YgdGhlIHJhZGFyXG5cdFx0XHRhbmdsZVNob3dMaW5lT3V0IDogdHJ1ZSxcblxuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBzaG93IGxhYmVscyBvbiB0aGUgc2NhbGVcblx0XHRcdHNjYWxlU2hvd0xhYmVscyA6IGZhbHNlLFxuXG5cdFx0XHQvLyBCb29sZWFuIC0gV2hldGhlciB0aGUgc2NhbGUgc2hvdWxkIGJlZ2luIGF0IHplcm9cblx0XHRcdHNjYWxlQmVnaW5BdFplcm8gOiB0cnVlLFxuXG5cdFx0XHQvL1N0cmluZyAtIENvbG91ciBvZiB0aGUgYW5nbGUgbGluZVxuXHRcdFx0YW5nbGVMaW5lQ29sb3IgOiBcInJnYmEoMCwwLDAsLjEpXCIsXG5cblx0XHRcdC8vTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgdGhlIGFuZ2xlIGxpbmVcblx0XHRcdGFuZ2xlTGluZVdpZHRoIDogMSxcblxuXHRcdFx0Ly9TdHJpbmcgLSBQb2ludCBsYWJlbCBmb250IGRlY2xhcmF0aW9uXG5cdFx0XHRwb2ludExhYmVsRm9udEZhbWlseSA6IFwiJ0FyaWFsJ1wiLFxuXG5cdFx0XHQvL1N0cmluZyAtIFBvaW50IGxhYmVsIGZvbnQgd2VpZ2h0XG5cdFx0XHRwb2ludExhYmVsRm9udFN0eWxlIDogXCJub3JtYWxcIixcblxuXHRcdFx0Ly9OdW1iZXIgLSBQb2ludCBsYWJlbCBmb250IHNpemUgaW4gcGl4ZWxzXG5cdFx0XHRwb2ludExhYmVsRm9udFNpemUgOiAxMCxcblxuXHRcdFx0Ly9TdHJpbmcgLSBQb2ludCBsYWJlbCBmb250IGNvbG91clxuXHRcdFx0cG9pbnRMYWJlbEZvbnRDb2xvciA6IFwiIzY2NlwiLFxuXG5cdFx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgYSBkb3QgZm9yIGVhY2ggcG9pbnRcblx0XHRcdHBvaW50RG90IDogdHJ1ZSxcblxuXHRcdFx0Ly9OdW1iZXIgLSBSYWRpdXMgb2YgZWFjaCBwb2ludCBkb3QgaW4gcGl4ZWxzXG5cdFx0XHRwb2ludERvdFJhZGl1cyA6IDMsXG5cblx0XHRcdC8vTnVtYmVyIC0gUGl4ZWwgd2lkdGggb2YgcG9pbnQgZG90IHN0cm9rZVxuXHRcdFx0cG9pbnREb3RTdHJva2VXaWR0aCA6IDEsXG5cblx0XHRcdC8vTnVtYmVyIC0gYW1vdW50IGV4dHJhIHRvIGFkZCB0byB0aGUgcmFkaXVzIHRvIGNhdGVyIGZvciBoaXQgZGV0ZWN0aW9uIG91dHNpZGUgdGhlIGRyYXduIHBvaW50XG5cdFx0XHRwb2ludEhpdERldGVjdGlvblJhZGl1cyA6IDIwLFxuXG5cdFx0XHQvL0Jvb2xlYW4gLSBXaGV0aGVyIHRvIHNob3cgYSBzdHJva2UgZm9yIGRhdGFzZXRzXG5cdFx0XHRkYXRhc2V0U3Ryb2tlIDogdHJ1ZSxcblxuXHRcdFx0Ly9OdW1iZXIgLSBQaXhlbCB3aWR0aCBvZiBkYXRhc2V0IHN0cm9rZVxuXHRcdFx0ZGF0YXNldFN0cm9rZVdpZHRoIDogMixcblxuXHRcdFx0Ly9Cb29sZWFuIC0gV2hldGhlciB0byBmaWxsIHRoZSBkYXRhc2V0IHdpdGggYSBjb2xvdXJcblx0XHRcdGRhdGFzZXRGaWxsIDogdHJ1ZSxcblxuXHRcdFx0Ly9TdHJpbmcgLSBBIGxlZ2VuZCB0ZW1wbGF0ZVxuXHRcdFx0bGVnZW5kVGVtcGxhdGUgOiBcIjx1bCBjbGFzcz1cXFwiPCU9bmFtZS50b0xvd2VyQ2FzZSgpJT4tbGVnZW5kXFxcIj48JSBmb3IgKHZhciBpPTA7IGk8ZGF0YXNldHMubGVuZ3RoOyBpKyspeyU+PGxpPjxzcGFuIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWNvbG9yOjwlPWRhdGFzZXRzW2ldLnN0cm9rZUNvbG9yJT5cXFwiPjwvc3Bhbj48JWlmKGRhdGFzZXRzW2ldLmxhYmVsKXslPjwlPWRhdGFzZXRzW2ldLmxhYmVsJT48JX0lPjwvbGk+PCV9JT48L3VsPlwiXG5cblx0XHR9LFxuXG5cdFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHR0aGlzLlBvaW50Q2xhc3MgPSBDaGFydC5Qb2ludC5leHRlbmQoe1xuXHRcdFx0XHRzdHJva2VXaWR0aCA6IHRoaXMub3B0aW9ucy5wb2ludERvdFN0cm9rZVdpZHRoLFxuXHRcdFx0XHRyYWRpdXMgOiB0aGlzLm9wdGlvbnMucG9pbnREb3RSYWRpdXMsXG5cdFx0XHRcdGRpc3BsYXk6IHRoaXMub3B0aW9ucy5wb2ludERvdCxcblx0XHRcdFx0aGl0RGV0ZWN0aW9uUmFkaXVzIDogdGhpcy5vcHRpb25zLnBvaW50SGl0RGV0ZWN0aW9uUmFkaXVzLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eFxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGF0YXNldHMgPSBbXTtcblxuXHRcdFx0dGhpcy5idWlsZFNjYWxlKGRhdGEpO1xuXG5cdFx0XHQvL1NldCB1cCB0b29sdGlwIGV2ZW50cyBvbiB0aGUgY2hhcnRcblx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc2hvd1Rvb2x0aXBzKXtcblx0XHRcdFx0aGVscGVycy5iaW5kRXZlbnRzKHRoaXMsIHRoaXMub3B0aW9ucy50b29sdGlwRXZlbnRzLCBmdW5jdGlvbihldnQpe1xuXHRcdFx0XHRcdHZhciBhY3RpdmVQb2ludHNDb2xsZWN0aW9uID0gKGV2dC50eXBlICE9PSAnbW91c2VvdXQnKSA/IHRoaXMuZ2V0UG9pbnRzQXRFdmVudChldnQpIDogW107XG5cblx0XHRcdFx0XHR0aGlzLmVhY2hQb2ludHMoZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdFx0cG9pbnQucmVzdG9yZShbJ2ZpbGxDb2xvcicsICdzdHJva2VDb2xvciddKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRoZWxwZXJzLmVhY2goYWN0aXZlUG9pbnRzQ29sbGVjdGlvbiwgZnVuY3Rpb24oYWN0aXZlUG9pbnQpe1xuXHRcdFx0XHRcdFx0YWN0aXZlUG9pbnQuZmlsbENvbG9yID0gYWN0aXZlUG9pbnQuaGlnaGxpZ2h0RmlsbDtcblx0XHRcdFx0XHRcdGFjdGl2ZVBvaW50LnN0cm9rZUNvbG9yID0gYWN0aXZlUG9pbnQuaGlnaGxpZ2h0U3Ryb2tlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5zaG93VG9vbHRpcChhY3RpdmVQb2ludHNDb2xsZWN0aW9uKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGRhdGFzZXRzLCBhbmQgYnVpbGQgdGhpcyBpbnRvIGEgcHJvcGVydHkgb2YgdGhlIGNoYXJ0XG5cdFx0XHRoZWxwZXJzLmVhY2goZGF0YS5kYXRhc2V0cyxmdW5jdGlvbihkYXRhc2V0KXtcblxuXHRcdFx0XHR2YXIgZGF0YXNldE9iamVjdCA9IHtcblx0XHRcdFx0XHRsYWJlbDogZGF0YXNldC5sYWJlbCB8fCBudWxsLFxuXHRcdFx0XHRcdGZpbGxDb2xvciA6IGRhdGFzZXQuZmlsbENvbG9yLFxuXHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5zdHJva2VDb2xvcixcblx0XHRcdFx0XHRwb2ludENvbG9yIDogZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdHBvaW50U3Ryb2tlQ29sb3IgOiBkYXRhc2V0LnBvaW50U3Ryb2tlQ29sb3IsXG5cdFx0XHRcdFx0cG9pbnRzIDogW11cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmRhdGFzZXRzLnB1c2goZGF0YXNldE9iamVjdCk7XG5cblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQuZGF0YSxmdW5jdGlvbihkYXRhUG9pbnQsaW5kZXgpe1xuXHRcdFx0XHRcdC8vQWRkIGEgbmV3IHBvaW50IGZvciBlYWNoIHBpZWNlIG9mIGRhdGEsIHBhc3NpbmcgYW55IHJlcXVpcmVkIGRhdGEgdG8gZHJhdy5cblx0XHRcdFx0XHR2YXIgcG9pbnRQb3NpdGlvbjtcblx0XHRcdFx0XHRpZiAoIXRoaXMuc2NhbGUuYW5pbWF0aW9uKXtcblx0XHRcdFx0XHRcdHBvaW50UG9zaXRpb24gPSB0aGlzLnNjYWxlLmdldFBvaW50UG9zaXRpb24oaW5kZXgsIHRoaXMuc2NhbGUuY2FsY3VsYXRlQ2VudGVyT2Zmc2V0KGRhdGFQb2ludCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhc2V0T2JqZWN0LnBvaW50cy5wdXNoKG5ldyB0aGlzLlBvaW50Q2xhc3Moe1xuXHRcdFx0XHRcdFx0dmFsdWUgOiBkYXRhUG9pbnQsXG5cdFx0XHRcdFx0XHRsYWJlbCA6IGRhdGEubGFiZWxzW2luZGV4XSxcblx0XHRcdFx0XHRcdGRhdGFzZXRMYWJlbDogZGF0YXNldC5sYWJlbCxcblx0XHRcdFx0XHRcdHg6ICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSA/IHRoaXMuc2NhbGUueENlbnRlciA6IHBvaW50UG9zaXRpb24ueCxcblx0XHRcdFx0XHRcdHk6ICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSA/IHRoaXMuc2NhbGUueUNlbnRlciA6IHBvaW50UG9zaXRpb24ueSxcblx0XHRcdFx0XHRcdHN0cm9rZUNvbG9yIDogZGF0YXNldC5wb2ludFN0cm9rZUNvbG9yLFxuXHRcdFx0XHRcdFx0ZmlsbENvbG9yIDogZGF0YXNldC5wb2ludENvbG9yLFxuXHRcdFx0XHRcdFx0aGlnaGxpZ2h0RmlsbCA6IGRhdGFzZXQucG9pbnRIaWdobGlnaHRGaWxsIHx8IGRhdGFzZXQucG9pbnRDb2xvcixcblx0XHRcdFx0XHRcdGhpZ2hsaWdodFN0cm9rZSA6IGRhdGFzZXQucG9pbnRIaWdobGlnaHRTdHJva2UgfHwgZGF0YXNldC5wb2ludFN0cm9rZUNvbG9yXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdH0sXG5cdFx0ZWFjaFBvaW50cyA6IGZ1bmN0aW9uKGNhbGxiYWNrKXtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldC5wb2ludHMsY2FsbGJhY2ssdGhpcyk7XG5cdFx0XHR9LHRoaXMpO1xuXHRcdH0sXG5cblx0XHRnZXRQb2ludHNBdEV2ZW50IDogZnVuY3Rpb24oZXZ0KXtcblx0XHRcdHZhciBtb3VzZVBvc2l0aW9uID0gaGVscGVycy5nZXRSZWxhdGl2ZVBvc2l0aW9uKGV2dCksXG5cdFx0XHRcdGZyb21DZW50ZXIgPSBoZWxwZXJzLmdldEFuZ2xlRnJvbVBvaW50KHtcblx0XHRcdFx0XHR4OiB0aGlzLnNjYWxlLnhDZW50ZXIsXG5cdFx0XHRcdFx0eTogdGhpcy5zY2FsZS55Q2VudGVyXG5cdFx0XHRcdH0sIG1vdXNlUG9zaXRpb24pO1xuXG5cdFx0XHR2YXIgYW5nbGVQZXJJbmRleCA9IChNYXRoLlBJICogMikgL3RoaXMuc2NhbGUudmFsdWVzQ291bnQsXG5cdFx0XHRcdHBvaW50SW5kZXggPSBNYXRoLnJvdW5kKChmcm9tQ2VudGVyLmFuZ2xlIC0gTWF0aC5QSSAqIDEuNSkgLyBhbmdsZVBlckluZGV4KSxcblx0XHRcdFx0YWN0aXZlUG9pbnRzQ29sbGVjdGlvbiA9IFtdO1xuXG5cdFx0XHQvLyBJZiB3ZSdyZSBhdCB0aGUgdG9wLCBtYWtlIHRoZSBwb2ludEluZGV4IDAgdG8gZ2V0IHRoZSBmaXJzdCBvZiB0aGUgYXJyYXkuXG5cdFx0XHRpZiAocG9pbnRJbmRleCA+PSB0aGlzLnNjYWxlLnZhbHVlc0NvdW50IHx8IHBvaW50SW5kZXggPCAwKXtcblx0XHRcdFx0cG9pbnRJbmRleCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmcm9tQ2VudGVyLmRpc3RhbmNlIDw9IHRoaXMuc2NhbGUuZHJhd2luZ0FyZWEpe1xuXHRcdFx0XHRoZWxwZXJzLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdFx0YWN0aXZlUG9pbnRzQ29sbGVjdGlvbi5wdXNoKGRhdGFzZXQucG9pbnRzW3BvaW50SW5kZXhdKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhY3RpdmVQb2ludHNDb2xsZWN0aW9uO1xuXHRcdH0sXG5cblx0XHRidWlsZFNjYWxlIDogZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHR0aGlzLnNjYWxlID0gbmV3IENoYXJ0LlJhZGlhbFNjYWxlKHtcblx0XHRcdFx0ZGlzcGxheTogdGhpcy5vcHRpb25zLnNob3dTY2FsZSxcblx0XHRcdFx0Zm9udFN0eWxlOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U3R5bGUsXG5cdFx0XHRcdGZvbnRTaXplOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250U2l6ZSxcblx0XHRcdFx0Zm9udEZhbWlseTogdGhpcy5vcHRpb25zLnNjYWxlRm9udEZhbWlseSxcblx0XHRcdFx0Zm9udENvbG9yOiB0aGlzLm9wdGlvbnMuc2NhbGVGb250Q29sb3IsXG5cdFx0XHRcdHNob3dMYWJlbHM6IHRoaXMub3B0aW9ucy5zY2FsZVNob3dMYWJlbHMsXG5cdFx0XHRcdHNob3dMYWJlbEJhY2tkcm9wOiB0aGlzLm9wdGlvbnMuc2NhbGVTaG93TGFiZWxCYWNrZHJvcCxcblx0XHRcdFx0YmFja2Ryb3BDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlQmFja2Ryb3BDb2xvcixcblx0XHRcdFx0YmFja2Ryb3BQYWRkaW5nWSA6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1ksXG5cdFx0XHRcdGJhY2tkcm9wUGFkZGluZ1g6IHRoaXMub3B0aW9ucy5zY2FsZUJhY2tkcm9wUGFkZGluZ1gsXG5cdFx0XHRcdGxpbmVXaWR0aDogKHRoaXMub3B0aW9ucy5zY2FsZVNob3dMaW5lKSA/IHRoaXMub3B0aW9ucy5zY2FsZUxpbmVXaWR0aCA6IDAsXG5cdFx0XHRcdGxpbmVDb2xvcjogdGhpcy5vcHRpb25zLnNjYWxlTGluZUNvbG9yLFxuXHRcdFx0XHRhbmdsZUxpbmVDb2xvciA6IHRoaXMub3B0aW9ucy5hbmdsZUxpbmVDb2xvcixcblx0XHRcdFx0YW5nbGVMaW5lV2lkdGggOiAodGhpcy5vcHRpb25zLmFuZ2xlU2hvd0xpbmVPdXQpID8gdGhpcy5vcHRpb25zLmFuZ2xlTGluZVdpZHRoIDogMCxcblx0XHRcdFx0Ly8gUG9pbnQgbGFiZWxzIGF0IHRoZSBlZGdlIG9mIGVhY2ggbGluZVxuXHRcdFx0XHRwb2ludExhYmVsRm9udENvbG9yIDogdGhpcy5vcHRpb25zLnBvaW50TGFiZWxGb250Q29sb3IsXG5cdFx0XHRcdHBvaW50TGFiZWxGb250U2l6ZSA6IHRoaXMub3B0aW9ucy5wb2ludExhYmVsRm9udFNpemUsXG5cdFx0XHRcdHBvaW50TGFiZWxGb250RmFtaWx5IDogdGhpcy5vcHRpb25zLnBvaW50TGFiZWxGb250RmFtaWx5LFxuXHRcdFx0XHRwb2ludExhYmVsRm9udFN0eWxlIDogdGhpcy5vcHRpb25zLnBvaW50TGFiZWxGb250U3R5bGUsXG5cdFx0XHRcdGhlaWdodCA6IHRoaXMuY2hhcnQuaGVpZ2h0LFxuXHRcdFx0XHR3aWR0aDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0eENlbnRlcjogdGhpcy5jaGFydC53aWR0aC8yLFxuXHRcdFx0XHR5Q2VudGVyOiB0aGlzLmNoYXJ0LmhlaWdodC8yLFxuXHRcdFx0XHRjdHggOiB0aGlzLmNoYXJ0LmN0eCxcblx0XHRcdFx0dGVtcGxhdGVTdHJpbmc6IHRoaXMub3B0aW9ucy5zY2FsZUxhYmVsLFxuXHRcdFx0XHRsYWJlbHM6IGRhdGEubGFiZWxzLFxuXHRcdFx0XHR2YWx1ZXNDb3VudDogZGF0YS5kYXRhc2V0c1swXS5kYXRhLmxlbmd0aFxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuc2NhbGUuc2V0U2NhbGVTaXplKCk7XG5cdFx0XHR0aGlzLnVwZGF0ZVNjYWxlUmFuZ2UoZGF0YS5kYXRhc2V0cyk7XG5cdFx0XHR0aGlzLnNjYWxlLmJ1aWxkWUxhYmVscygpO1xuXHRcdH0sXG5cdFx0dXBkYXRlU2NhbGVSYW5nZTogZnVuY3Rpb24oZGF0YXNldHMpe1xuXHRcdFx0dmFyIHZhbHVlc0FycmF5ID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB0b3RhbERhdGFBcnJheSA9IFtdO1xuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldHMsZnVuY3Rpb24oZGF0YXNldCl7XG5cdFx0XHRcdFx0aWYgKGRhdGFzZXQuZGF0YSl7XG5cdFx0XHRcdFx0XHR0b3RhbERhdGFBcnJheSA9IHRvdGFsRGF0YUFycmF5LmNvbmNhdChkYXRhc2V0LmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LnBvaW50cywgZnVuY3Rpb24ocG9pbnQpe1xuXHRcdFx0XHRcdFx0XHR0b3RhbERhdGFBcnJheS5wdXNoKHBvaW50LnZhbHVlKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB0b3RhbERhdGFBcnJheTtcblx0XHRcdH0pKCk7XG5cblxuXHRcdFx0dmFyIHNjYWxlU2l6ZXMgPSAodGhpcy5vcHRpb25zLnNjYWxlT3ZlcnJpZGUpID9cblx0XHRcdFx0e1xuXHRcdFx0XHRcdHN0ZXBzOiB0aGlzLm9wdGlvbnMuc2NhbGVTdGVwcyxcblx0XHRcdFx0XHRzdGVwVmFsdWU6IHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBXaWR0aCxcblx0XHRcdFx0XHRtaW46IHRoaXMub3B0aW9ucy5zY2FsZVN0YXJ0VmFsdWUsXG5cdFx0XHRcdFx0bWF4OiB0aGlzLm9wdGlvbnMuc2NhbGVTdGFydFZhbHVlICsgKHRoaXMub3B0aW9ucy5zY2FsZVN0ZXBzICogdGhpcy5vcHRpb25zLnNjYWxlU3RlcFdpZHRoKVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0aGVscGVycy5jYWxjdWxhdGVTY2FsZVJhbmdlKFxuXHRcdFx0XHRcdHZhbHVlc0FycmF5LFxuXHRcdFx0XHRcdGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLCB0aGlzLmNoYXJ0LmhlaWdodF0pLzIsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlRm9udFNpemUsXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlQmVnaW5BdFplcm8sXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNjYWxlSW50ZWdlcnNPbmx5XG5cdFx0XHRcdCk7XG5cblx0XHRcdGhlbHBlcnMuZXh0ZW5kKFxuXHRcdFx0XHR0aGlzLnNjYWxlLFxuXHRcdFx0XHRzY2FsZVNpemVzXG5cdFx0XHQpO1xuXG5cdFx0fSxcblx0XHRhZGREYXRhIDogZnVuY3Rpb24odmFsdWVzQXJyYXksbGFiZWwpe1xuXHRcdFx0Ly9NYXAgdGhlIHZhbHVlcyBhcnJheSBmb3IgZWFjaCBvZiB0aGUgZGF0YXNldHNcblx0XHRcdHRoaXMuc2NhbGUudmFsdWVzQ291bnQrKztcblx0XHRcdGhlbHBlcnMuZWFjaCh2YWx1ZXNBcnJheSxmdW5jdGlvbih2YWx1ZSxkYXRhc2V0SW5kZXgpe1xuXHRcdFx0XHR2YXIgcG9pbnRQb3NpdGlvbiA9IHRoaXMuc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbih0aGlzLnNjYWxlLnZhbHVlc0NvdW50LCB0aGlzLnNjYWxlLmNhbGN1bGF0ZUNlbnRlck9mZnNldCh2YWx1ZSkpO1xuXHRcdFx0XHR0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRzLnB1c2gobmV3IHRoaXMuUG9pbnRDbGFzcyh7XG5cdFx0XHRcdFx0dmFsdWUgOiB2YWx1ZSxcblx0XHRcdFx0XHRsYWJlbCA6IGxhYmVsLFxuXHRcdFx0XHRcdHg6IHBvaW50UG9zaXRpb24ueCxcblx0XHRcdFx0XHR5OiBwb2ludFBvc2l0aW9uLnksXG5cdFx0XHRcdFx0c3Ryb2tlQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRTdHJva2VDb2xvcixcblx0XHRcdFx0XHRmaWxsQ29sb3IgOiB0aGlzLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ucG9pbnRDb2xvclxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9LHRoaXMpO1xuXG5cdFx0XHR0aGlzLnNjYWxlLmxhYmVscy5wdXNoKGxhYmVsKTtcblxuXHRcdFx0dGhpcy5yZWZsb3coKTtcblxuXHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHR9LFxuXHRcdHJlbW92ZURhdGEgOiBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zY2FsZS52YWx1ZXNDb3VudC0tO1xuXHRcdFx0dGhpcy5zY2FsZS5sYWJlbHMuc2hpZnQoKTtcblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXHRcdFx0XHRkYXRhc2V0LnBvaW50cy5zaGlmdCgpO1xuXHRcdFx0fSx0aGlzKTtcblx0XHRcdHRoaXMucmVmbG93KCk7XG5cdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdH0sXG5cdFx0dXBkYXRlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuZWFjaFBvaW50cyhmdW5jdGlvbihwb2ludCl7XG5cdFx0XHRcdHBvaW50LnNhdmUoKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5yZWZsb3coKTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fSxcblx0XHRyZWZsb3c6IGZ1bmN0aW9uKCl7XG5cdFx0XHRoZWxwZXJzLmV4dGVuZCh0aGlzLnNjYWxlLCB7XG5cdFx0XHRcdHdpZHRoIDogdGhpcy5jaGFydC53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNoYXJ0LmhlaWdodCxcblx0XHRcdFx0c2l6ZSA6IGhlbHBlcnMubWluKFt0aGlzLmNoYXJ0LndpZHRoLCB0aGlzLmNoYXJ0LmhlaWdodF0pLFxuXHRcdFx0XHR4Q2VudGVyOiB0aGlzLmNoYXJ0LndpZHRoLzIsXG5cdFx0XHRcdHlDZW50ZXI6IHRoaXMuY2hhcnQuaGVpZ2h0LzJcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cGRhdGVTY2FsZVJhbmdlKHRoaXMuZGF0YXNldHMpO1xuXHRcdFx0dGhpcy5zY2FsZS5zZXRTY2FsZVNpemUoKTtcblx0XHRcdHRoaXMuc2NhbGUuYnVpbGRZTGFiZWxzKCk7XG5cdFx0fSxcblx0XHRkcmF3IDogZnVuY3Rpb24oZWFzZSl7XG5cdFx0XHR2YXIgZWFzZURlY2ltYWwgPSBlYXNlIHx8IDEsXG5cdFx0XHRcdGN0eCA9IHRoaXMuY2hhcnQuY3R4O1xuXHRcdFx0dGhpcy5jbGVhcigpO1xuXHRcdFx0dGhpcy5zY2FsZS5kcmF3KCk7XG5cblx0XHRcdGhlbHBlcnMuZWFjaCh0aGlzLmRhdGFzZXRzLGZ1bmN0aW9uKGRhdGFzZXQpe1xuXG5cdFx0XHRcdC8vVHJhbnNpdGlvbiBlYWNoIHBvaW50IGZpcnN0IHNvIHRoYXQgdGhlIGxpbmUgYW5kIHBvaW50IGRyYXdpbmcgaXNuJ3Qgb3V0IG9mIHN5bmNcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQucG9pbnRzLGZ1bmN0aW9uKHBvaW50LGluZGV4KXtcblx0XHRcdFx0XHRpZiAocG9pbnQuaGFzVmFsdWUoKSl7XG5cdFx0XHRcdFx0XHRwb2ludC50cmFuc2l0aW9uKHRoaXMuc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpbmRleCwgdGhpcy5zY2FsZS5jYWxjdWxhdGVDZW50ZXJPZmZzZXQocG9pbnQudmFsdWUpKSwgZWFzZURlY2ltYWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSx0aGlzKTtcblxuXG5cblx0XHRcdFx0Ly9EcmF3IHRoZSBsaW5lIGJldHdlZW4gYWxsIHRoZSBwb2ludHNcblx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IHRoaXMub3B0aW9ucy5kYXRhc2V0U3Ryb2tlV2lkdGg7XG5cdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IGRhdGFzZXQuc3Ryb2tlQ29sb3I7XG5cdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQucG9pbnRzLGZ1bmN0aW9uKHBvaW50LGluZGV4KXtcblx0XHRcdFx0XHRpZiAoaW5kZXggPT09IDApe1xuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhwb2ludC54LHBvaW50LnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludC54LHBvaW50LnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSx0aGlzKTtcblx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRjdHguc3Ryb2tlKCk7XG5cblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGRhdGFzZXQuZmlsbENvbG9yO1xuXHRcdFx0XHRjdHguZmlsbCgpO1xuXG5cdFx0XHRcdC8vTm93IGRyYXcgdGhlIHBvaW50cyBvdmVyIHRoZSBsaW5lXG5cdFx0XHRcdC8vQSBsaXR0bGUgaW5lZmZpY2llbnQgZG91YmxlIGxvb3BpbmcsIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgbGluZVxuXHRcdFx0XHQvL2xhZ2dpbmcgYmVoaW5kIHRoZSBwb2ludCBwb3NpdGlvbnNcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQucG9pbnRzLGZ1bmN0aW9uKHBvaW50KXtcblx0XHRcdFx0XHRpZiAocG9pbnQuaGFzVmFsdWUoKSl7XG5cdFx0XHRcdFx0XHRwb2ludC5kcmF3KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0fSx0aGlzKTtcblxuXHRcdH1cblxuXHR9KTtcblxuXG5cblxuXG59KS5jYWxsKHRoaXMpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vdmVuZG9yL2FsbWFzYWVlZDIwMTAvYWRtaW5sdGUvYm93ZXJfY29tcG9uZW50cy9jaGFydC5qcy9DaGFydC5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n");
-
-/***/ })
-
-/******/ }); \ No newline at end of file
diff --git a/public/js/app.js b/public/js/app.js
deleted file mode 100755
index 15762ee..0000000
--- a/public/js/app.js
+++ /dev/null
@@ -1,416 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "/";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 12);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar bind = __webpack_require__(6);\nvar isBuffer = __webpack_require__(24);\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzPzcwNjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixTQUFTLEdBQUcsU0FBUztBQUM1QywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIGlzQnVmZmVyID0gcmVxdWlyZSgnaXMtYnVmZmVyJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHRba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzPzM2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUMiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n");
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nvar utils = __webpack_require__(0);\nvar normalizeHeaderName = __webpack_require__(26);\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(7);\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = __webpack_require__(7);\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzPzI4MjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IitDQUFBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFlBQVk7QUFDbkI7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2\n");
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzPzViNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n");
-
-/***/ }),
-/* 4 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global) {/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.3\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popper);\n//# sourceMappingURL=popper.js.map\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(1)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcG9wcGVyLmpzL2Rpc3QvZXNtL3BvcHBlci5qcz82NjBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxrQ0FBa0M7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsSUFBSTtBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFlBQVk7QUFDdkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiFcbiAqIEBmaWxlT3ZlcnZpZXcgS2lja2FzcyBsaWJyYXJ5IHRvIGNyZWF0ZSBhbmQgcGxhY2UgcG9wcGVycyBuZWFyIHRoZWlyIHJlZmVyZW5jZSBlbGVtZW50cy5cbiAqIEB2ZXJzaW9uIDEuMTQuM1xuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiBGZWRlcmljbyBaaXZvbG8gYW5kIGNvbnRyaWJ1dG9yc1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgbG9uZ2VyVGltZW91dEJyb3dzZXJzID0gWydFZGdlJywgJ1RyaWRlbnQnLCAnRmlyZWZveCddO1xudmFyIHRpbWVvdXREdXJhdGlvbiA9IDA7XG5mb3IgKHZhciBpID0gMDsgaSA8IGxvbmdlclRpbWVvdXRCcm93c2Vycy5sZW5ndGg7IGkgKz0gMSkge1xuICBpZiAoaXNCcm93c2VyICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihsb25nZXJUaW1lb3V0QnJvd3NlcnNbaV0pID49IDApIHtcbiAgICB0aW1lb3V0RHVyYXRpb24gPSAxO1xuICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pY3JvdGFza0RlYm91bmNlKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgd2luZG93LlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGVkID0gZmFsc2U7XG4gICAgICBmbigpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmbigpO1xuICAgICAgfSwgdGltZW91dER1cmF0aW9uKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBzdXBwb3J0c01pY3JvVGFza3MgPSBpc0Jyb3dzZXIgJiYgd2luZG93LlByb21pc2U7XG5cbi8qKlxuKiBDcmVhdGUgYSBkZWJvdW5jZWQgdmVyc2lvbiBvZiBhIG1ldGhvZCwgdGhhdCdzIGFzeW5jaHJvbm91c2x5IGRlZmVycmVkXG4qIGJ1dCBjYWxsZWQgaW4gdGhlIG1pbmltdW0gdGltZSBwb3NzaWJsZS5cbipcbiogQG1ldGhvZFxuKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4qIEBhcmd1bWVudCB7RnVuY3Rpb259IGZuXG4qIEByZXR1cm5zIHtGdW5jdGlvbn1cbiovXG52YXIgZGVib3VuY2UgPSBzdXBwb3J0c01pY3JvVGFza3MgPyBtaWNyb3Rhc2tEZWJvdW5jZSA6IHRhc2tEZWJvdW5jZTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBbnl9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICB2YXIgZ2V0VHlwZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIEdldCBDU1MgY29tcHV0ZWQgcHJvcGVydHkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbnZhciBpc0lFMTEgPSBpc0Jyb3dzZXIgJiYgISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgaXNJRTEwID0gaXNCcm93c2VyICYmIC9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB2ZXJzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNJRVxuICovXG5mdW5jdGlvbiBpc0lFKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDExKSB7XG4gICAgcmV0dXJuIGlzSUUxMTtcbiAgfVxuICBpZiAodmVyc2lvbiA9PT0gMTApIHtcbiAgICByZXR1cm4gaXNJRTEwO1xuICB9XG4gIHJldHVybiBpc0lFMTEgfHwgaXNJRTEwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub09mZnNldFBhcmVudCA9IGlzSUUoMTApID8gZG9jdW1lbnQuYm9keSA6IG51bGw7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAvLyBTa2lwIGhpZGRlbiBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGFuIG9mZnNldFBhcmVudFxuICB3aGlsZSAob2Zmc2V0UGFyZW50ID09PSBub09mZnNldFBhcmVudCAmJiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgIG9mZnNldFBhcmVudCA9IChlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpLm9mZnNldFBhcmVudDtcbiAgfVxuXG4gIHZhciBub2RlTmFtZSA9IG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQubm9kZU5hbWU7XG5cbiAgaWYgKCFub2RlTmFtZSB8fCBub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZWxlbWVudCA/IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyAub2Zmc2V0UGFyZW50IHdpbGwgcmV0dXJuIHRoZSBjbG9zZXN0IFREIG9yIFRBQkxFIGluIGNhc2VcbiAgLy8gbm8gb2Zmc2V0UGFyZW50IGlzIHByZXNlbnQsIEkgaGF0ZSB0aGlzIGpvYi4uLlxuICBpZiAoWydURCcsICdUQUJMRSddLmluZGV4T2Yob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAhPT0gLTEgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudDtcbn1cblxuZnVuY3Rpb24gaXNPZmZzZXRDb250YWluZXIoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ0hUTUwnIHx8IGdldE9mZnNldFBhcmVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBub2RlIChkb2N1bWVudCwgc2hhZG93RE9NIHJvb3QpIG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtFbGVtZW50fSByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Um9vdChub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBIZXJlIHdlIG1ha2Ugc3VyZSB0byBnaXZlIGFzIFwic3RhcnRcIiB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIGZpcnN0IGluIHRoZSBET01cbiAgdmFyIG9yZGVyID0gZWxlbWVudDEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudDIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIHZhciBzdGFydCA9IG9yZGVyID8gZWxlbWVudDEgOiBlbGVtZW50MjtcbiAgdmFyIGVuZCA9IG9yZGVyID8gZWxlbWVudDIgOiBlbGVtZW50MTtcblxuICAvLyBHZXQgY29tbW9uIGFuY2VzdG9yIGNvbnRhaW5lclxuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydCwgMCk7XG4gIHJhbmdlLnNldEVuZChlbmQsIDApO1xuICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuICAvLyBCb3RoIG5vZGVzIGFyZSBpbnNpZGUgI2RvY3VtZW50XG5cbiAgaWYgKGVsZW1lbnQxICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJiBlbGVtZW50MiAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgfHwgc3RhcnQuY29udGFpbnMoZW5kKSkge1xuICAgIGlmIChpc09mZnNldENvbnRhaW5lcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgfVxuXG4gIC8vIG9uZSBvZiB0aGUgbm9kZXMgaXMgaW5zaWRlIHNoYWRvd0RPTSwgZmluZCB3aGljaCBvbmVcbiAgdmFyIGVsZW1lbnQxcm9vdCA9IGdldFJvb3QoZWxlbWVudDEpO1xuICBpZiAoZWxlbWVudDFyb290Lmhvc3QpIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MXJvb3QuaG9zdCwgZWxlbWVudDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBnZXRSb290KGVsZW1lbnQyKS5ob3N0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBpbiB0aGUgZ2l2ZW4gc2lkZSAodG9wIGFuZCBsZWZ0KVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gc2lkZSBgdG9wYCBvciBgbGVmdGBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFtb3VudCBvZiBzY3JvbGxlZCBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsKGVsZW1lbnQpIHtcbiAgdmFyIHNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd0b3AnO1xuXG4gIHZhciB1cHBlclNpZGUgPSBzaWRlID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBodG1sO1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50W3VwcGVyU2lkZV07XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFt1cHBlclNpZGVdO1xufVxuXG4vKlxuICogU3VtIG9yIHN1YnRyYWN0IHRoZSBlbGVtZW50IHNjcm9sbCB2YWx1ZXMgKGxlZnQgYW5kIHRvcCkgZnJvbSBhIGdpdmVuIHJlY3Qgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCAtIFJlY3Qgb2JqZWN0IHlvdSB3YW50IHRvIGNoYW5nZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHN1YnRyYWN0IC0gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc3VidHJhY3QgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjdCAtIFRoZSBtb2RpZmllciByZWN0IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmNsdWRlU2Nyb2xsKHJlY3QsIGVsZW1lbnQpIHtcbiAgdmFyIHN1YnRyYWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgdmFyIG1vZGlmaWVyID0gc3VidHJhY3QgPyAtMSA6IDE7XG4gIHJlY3QudG9wICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJldHVybiByZWN0O1xufVxuXG4vKlxuICogSGVscGVyIHRvIGRldGVjdCBib3JkZXJzIG9mIGEgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcbiAqIFJlc3VsdCBvZiBgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5YCBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgLSBgeGAgb3IgYHlgXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGJvcmRlcnMgLSBUaGUgYm9yZGVycyBzaXplIG9mIHRoZSBnaXZlbiBheGlzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCBheGlzKSB7XG4gIHZhciBzaWRlQSA9IGF4aXMgPT09ICd4JyA/ICdMZWZ0JyA6ICdUb3AnO1xuICB2YXIgc2lkZUIgPSBzaWRlQSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdCb3R0b20nO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10sIDEwKSArIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXSwgMTApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IGh0bWxbJ29mZnNldCcgKyBheGlzXSArIGNvbXB1dGVkU3R5bGVbJ21hcmdpbicgKyAoYXhpcyA9PT0gJ0hlaWdodCcgPyAnVG9wJyA6ICdMZWZ0JyldICsgY29tcHV0ZWRTdHlsZVsnbWFyZ2luJyArIChheGlzID09PSAnSGVpZ2h0JyA/ICdCb3R0b20nIDogJ1JpZ2h0JyldIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKCkge1xuICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gIHZhciBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgY29tcHV0ZWRTdHlsZSA9IGlzSUUoMTApICYmIGdldENvbXB1dGVkU3R5bGUoaHRtbCk7XG5cbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IGdldFNpemUoJ0hlaWdodCcsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpLFxuICAgIHdpZHRoOiBnZXRTaXplKCdXaWR0aCcsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpXG4gIH07XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cblxuXG5cblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuLyoqXG4gKiBHaXZlbiBlbGVtZW50IG9mZnNldHMsIGdlbmVyYXRlIGFuIG91dHB1dCBzaW1pbGFyIHRvIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IG9mZnNldHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IENsaWVudFJlY3QgbGlrZSBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdChvZmZzZXRzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb2Zmc2V0cywge1xuICAgIHJpZ2h0OiBvZmZzZXRzLmxlZnQgKyBvZmZzZXRzLndpZHRoLFxuICAgIGJvdHRvbTogb2Zmc2V0cy50b3AgKyBvZmZzZXRzLmhlaWdodFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYm91bmRpbmcgY2xpZW50IHJlY3Qgb2YgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7T2JqZWN0fSBjbGllbnQgcmVjdFxuICovXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IHt9O1xuXG4gIC8vIElFMTAgMTAgRklYOiBQbGVhc2UsIGRvbid0IGFzaywgdGhlIGVsZW1lbnQgaXNuJ3RcbiAgLy8gY29uc2lkZXJlZCBpbiBET00gaW4gc29tZSBjaXJjdW1zdGFuY2VzLi4uXG4gIC8vIFRoaXMgaXNuJ3QgcmVwcm9kdWNpYmxlIGluIElFMTAgY29tcGF0aWJpbGl0eSBtb2RlIG9mIElFMTFcbiAgdHJ5IHtcbiAgICBpZiAoaXNJRSgxMCkpIHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICAgICAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wO1xuICAgICAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQ7XG4gICAgICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHdpZHRoOiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LFxuICAgIGhlaWdodDogcmVjdC5ib3R0b20gLSByZWN0LnRvcFxuICB9O1xuXG4gIC8vIHN1YnRyYWN0IHNjcm9sbGJhciBzaXplIGZyb20gc2l6ZXNcbiAgdmFyIHNpemVzID0gZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0hUTUwnID8gZ2V0V2luZG93U2l6ZXMoKSA6IHt9O1xuICB2YXIgd2lkdGggPSBzaXplcy53aWR0aCB8fCBlbGVtZW50LmNsaWVudFdpZHRoIHx8IHJlc3VsdC5yaWdodCAtIHJlc3VsdC5sZWZ0O1xuICB2YXIgaGVpZ2h0ID0gc2l6ZXMuaGVpZ2h0IHx8IGVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IHJlc3VsdC5ib3R0b20gLSByZXN1bHQudG9wO1xuXG4gIHZhciBob3JpelNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0V2lkdGggLSB3aWR0aDtcbiAgdmFyIHZlcnRTY3JvbGxiYXIgPSBlbGVtZW50Lm9mZnNldEhlaWdodCAtIGhlaWdodDtcblxuICAvLyBpZiBhbiBoeXBvdGhldGljYWwgc2Nyb2xsYmFyIGlzIGRldGVjdGVkLCB3ZSBtdXN0IGJlIHN1cmUgaXQncyBub3QgYSBgYm9yZGVyYFxuICAvLyB3ZSBtYWtlIHRoaXMgY2hlY2sgY29uZGl0aW9uYWwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAgaWYgKGhvcml6U2Nyb2xsYmFyIHx8IHZlcnRTY3JvbGxiYXIpIHtcbiAgICB2YXIgc3R5bGVzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpO1xuICAgIGhvcml6U2Nyb2xsYmFyIC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3gnKTtcbiAgICB2ZXJ0U2Nyb2xsYmFyIC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3knKTtcblxuICAgIHJlc3VsdC53aWR0aCAtPSBob3JpelNjcm9sbGJhcjtcbiAgICByZXN1bHQuaGVpZ2h0IC09IHZlcnRTY3JvbGxiYXI7XG4gIH1cblxuICByZXR1cm4gZ2V0Q2xpZW50UmVjdChyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoY2hpbGRyZW4sIHBhcmVudCkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIGlzSUUxMCA9IGlzSUUoMTApO1xuICB2YXIgaXNIVE1MID0gcGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCc7XG4gIHZhciBjaGlsZHJlblJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoY2hpbGRyZW4pO1xuICB2YXIgcGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChwYXJlbnQpO1xuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGNoaWxkcmVuKTtcblxuICB2YXIgc3R5bGVzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KHBhcmVudCk7XG4gIHZhciBib3JkZXJUb3BXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlclRvcFdpZHRoLCAxMCk7XG4gIHZhciBib3JkZXJMZWZ0V2lkdGggPSBwYXJzZUZsb2F0KHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGgsIDEwKTtcblxuICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgcGFyZW50IGlzIGZpeGVkLCB3ZSBtdXN0IGlnbm9yZSBuZWdhdGl2ZSBzY3JvbGwgaW4gb2Zmc2V0IGNhbGNcbiAgaWYgKGZpeGVkUG9zaXRpb24gJiYgcGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICBwYXJlbnRSZWN0LnRvcCA9IE1hdGgubWF4KHBhcmVudFJlY3QudG9wLCAwKTtcbiAgICBwYXJlbnRSZWN0LmxlZnQgPSBNYXRoLm1heChwYXJlbnRSZWN0LmxlZnQsIDApO1xuICB9XG4gIHZhciBvZmZzZXRzID0gZ2V0Q2xpZW50UmVjdCh7XG4gICAgdG9wOiBjaGlsZHJlblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSBib3JkZXJUb3BXaWR0aCxcbiAgICBsZWZ0OiBjaGlsZHJlblJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCAtIGJvcmRlckxlZnRXaWR0aCxcbiAgICB3aWR0aDogY2hpbGRyZW5SZWN0LndpZHRoLFxuICAgIGhlaWdodDogY2hpbGRyZW5SZWN0LmhlaWdodFxuICB9KTtcbiAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSAwO1xuICBvZmZzZXRzLm1hcmdpbkxlZnQgPSAwO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoIWlzSUUxMCAmJiBpc0hUTUwpIHtcbiAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wLCAxMCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0LCAxMCk7XG5cbiAgICBvZmZzZXRzLnRvcCAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmJvdHRvbSAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmxlZnQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcbiAgICBvZmZzZXRzLnJpZ2h0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG5cbiAgICAvLyBBdHRhY2ggbWFyZ2luVG9wIGFuZCBtYXJnaW5MZWZ0IGJlY2F1c2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdlIG1heSBuZWVkIHRoZW1cbiAgICBvZmZzZXRzLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0O1xuICB9XG5cbiAgaWYgKGlzSUUxMCAmJiAhZml4ZWRQb3NpdGlvbiA/IHBhcmVudC5jb250YWlucyhzY3JvbGxQYXJlbnQpIDogcGFyZW50ID09PSBzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50Lm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICBvZmZzZXRzID0gaW5jbHVkZVNjcm9sbChvZmZzZXRzLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShlbGVtZW50KSB7XG4gIHZhciBleGNsdWRlU2Nyb2xsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciByZWxhdGl2ZU9mZnNldCA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShlbGVtZW50LCBodG1sKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoaHRtbC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChodG1sLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuXG4gIHZhciBzY3JvbGxUb3AgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sKSA6IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCwgJ2xlZnQnKSA6IDA7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB0b3A6IHNjcm9sbFRvcCAtIHJlbGF0aXZlT2Zmc2V0LnRvcCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpblRvcCxcbiAgICBsZWZ0OiBzY3JvbGxMZWZ0IC0gcmVsYXRpdmVPZmZzZXQubGVmdCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpbkxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3Qob2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gKi9cbmZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZChnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgcGFyZW50IG9mIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0cmFuc2Zvcm1lZCBwcm9wZXJ0eSBkZWZpbmVkXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBmaXJzdCB0cmFuc2Zvcm1lZCBwYXJlbnQgb3IgZG9jdW1lbnRFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50RWxlbWVudCB8fCBpc0lFKCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBlbCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGVsICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScpIHtcbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLyoqXG4gKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZVxuICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICogQHBhcmFtIHtCb29sZWFufSBmaXhlZFBvc2l0aW9uIC0gSXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG5cbiAgdmFyIGJvdW5kYXJpZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocmVmZXJlbmNlKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gYm91bmRhcmllc0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoYm91bmRhcmllc05vZGUsIG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG5cbiAgICAvLyBJbiBjYXNlIG9mIEhUTUwsIHdlIG5lZWQgYSBkaWZmZXJlbnQgY29tcHV0YXRpb25cbiAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdIVE1MJyAmJiAhaXNGaXhlZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICB2YXIgX2dldFdpbmRvd1NpemVzID0gZ2V0V2luZG93U2l6ZXMoKSxcbiAgICAgICAgICBoZWlnaHQgPSBfZ2V0V2luZG93U2l6ZXMuaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoID0gX2dldFdpbmRvd1NpemVzLndpZHRoO1xuXG4gICAgICBib3VuZGFyaWVzLnRvcCArPSBvZmZzZXRzLnRvcCAtIG9mZnNldHMubWFyZ2luVG9wO1xuICAgICAgYm91bmRhcmllcy5ib3R0b20gPSBoZWlnaHQgKyBvZmZzZXRzLnRvcDtcbiAgICAgIGJvdW5kYXJpZXMubGVmdCArPSBvZmZzZXRzLmxlZnQgLSBvZmZzZXRzLm1hcmdpbkxlZnQ7XG4gICAgICBib3VuZGFyaWVzLnJpZ2h0ID0gd2lkdGggKyBvZmZzZXRzLmxlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBhbGwgdGhlIG90aGVyIERPTSBlbGVtZW50cywgdGhpcyBvbmUgaXMgZ29vZFxuICAgICAgYm91bmRhcmllcyA9IG9mZnNldHM7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHBhZGRpbmdzXG4gIGJvdW5kYXJpZXMubGVmdCArPSBwYWRkaW5nO1xuICBib3VuZGFyaWVzLnRvcCArPSBwYWRkaW5nO1xuICBib3VuZGFyaWVzLnJpZ2h0IC09IHBhZGRpbmc7XG4gIGJvdW5kYXJpZXMuYm90dG9tIC09IHBhZGRpbmc7XG5cbiAgcmV0dXJuIGJvdW5kYXJpZXM7XG59XG5cbmZ1bmN0aW9uIGdldEFyZWEoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHdpZHRoICogaGVpZ2h0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGBhdXRvYCBwbGFjZW1lbnQgdG8gdGhlIHBsYWNlbWVudCB3aXRoIG1vcmVcbiAqIGF2YWlsYWJsZSBzcGFjZS5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHBsYWNlbWVudCwgcmVmUmVjdCwgcG9wcGVyLCByZWZlcmVuY2UsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuXG4gIGlmIChwbGFjZW1lbnQuaW5kZXhPZignYXV0bycpID09PSAtMSkge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcblxuICB2YXIgcmVjdHMgPSB7XG4gICAgdG9wOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcFxuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLnJpZ2h0IC0gcmVmUmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuYm90dG9tIC0gcmVmUmVjdC5ib3R0b21cbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgIHdpZHRoOiByZWZSZWN0LmxlZnQgLSBib3VuZGFyaWVzLmxlZnQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfVxuICB9O1xuXG4gIHZhciBzb3J0ZWRBcmVhcyA9IE9iamVjdC5rZXlzKHJlY3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGtleVxuICAgIH0sIHJlY3RzW2tleV0sIHtcbiAgICAgIGFyZWE6IGdldEFyZWEocmVjdHNba2V5XSlcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG4gIH0pO1xuXG4gIHZhciBmaWx0ZXJlZEFyZWFzID0gc29ydGVkQXJlYXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgcmV0dXJuIHdpZHRoID49IHBvcHBlci5jbGllbnRXaWR0aCAmJiBoZWlnaHQgPj0gcG9wcGVyLmNsaWVudEhlaWdodDtcbiAgfSk7XG5cbiAgdmFyIGNvbXB1dGVkUGxhY2VtZW50ID0gZmlsdGVyZWRBcmVhcy5sZW5ndGggPiAwID8gZmlsdGVyZWRBcmVhc1swXS5rZXkgOiBzb3J0ZWRBcmVhc1swXS5rZXk7XG5cbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIHJldHVybiBjb21wdXRlZFBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGZpeGVkUG9zaXRpb24gLSBpcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB2YXIgY29tbW9uT2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuICByZXR1cm4gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKHJlZmVyZW5jZSwgY29tbW9uT2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgdmFyIHN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciB4ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSk7XG4gIHZhciB5ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5SaWdodCk7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LFxuICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiAtIENTUyBwb3NpdGlvbiB0aGUgUG9wcGVyIHdpbGwgZ2V0IGFwcGxpZWRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHMgLSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlbWVudCAtIG9uZSBvZiB0aGUgdmFsaWQgcGxhY2VtZW50IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBvcHBlck9mZnNldHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRQb3BwZXJPZmZzZXRzKHBvcHBlciwgcmVmZXJlbmNlT2Zmc2V0cywgcGxhY2VtZW50KSB7XG4gIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIC8vIEdldCBwb3BwZXIgbm9kZSBzaXplc1xuICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAvLyBBZGQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gIHZhciBwb3BwZXJPZmZzZXRzID0ge1xuICAgIHdpZHRoOiBwb3BwZXJSZWN0LndpZHRoLFxuICAgIGhlaWdodDogcG9wcGVyUmVjdC5oZWlnaHRcbiAgfTtcblxuICAvLyBkZXBlbmRpbmcgYnkgdGhlIHBvcHBlciBwbGFjZW1lbnQgd2UgaGF2ZSB0byBjb21wdXRlIGl0cyBvZmZzZXRzIHNsaWdodGx5IGRpZmZlcmVudGx5XG4gIHZhciBpc0hvcml6ID0gWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIG1haW5TaWRlID0gaXNIb3JpeiA/ICd0b3AnIDogJ2xlZnQnO1xuICB2YXIgc2Vjb25kYXJ5U2lkZSA9IGlzSG9yaXogPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNlY29uZGFyeU1lYXN1cmVtZW50ID0gIWlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgcG9wcGVyT2Zmc2V0c1ttYWluU2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW21haW5TaWRlXSArIHJlZmVyZW5jZU9mZnNldHNbbWVhc3VyZW1lbnRdIC8gMiAtIHBvcHBlclJlY3RbbWVhc3VyZW1lbnRdIC8gMjtcbiAgaWYgKHBsYWNlbWVudCA9PT0gc2Vjb25kYXJ5U2lkZSkge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW3NlY29uZGFyeVNpZGVdIC0gcG9wcGVyUmVjdFtzZWNvbmRhcnlNZWFzdXJlbWVudF07XG4gIH0gZWxzZSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoc2Vjb25kYXJ5U2lkZSldO1xuICB9XG5cbiAgcmV0dXJuIHBvcHBlck9mZnNldHM7XG59XG5cbi8qKlxuICogTWltaWNzIHRoZSBgZmluZGAgbWV0aG9kIG9mIEFycmF5XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmQoYXJyLCBjaGVjaykge1xuICAvLyB1c2UgbmF0aXZlIGZpbmQgaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIHJldHVybiBhcnIuZmluZChjaGVjayk7XG4gIH1cblxuICAvLyB1c2UgYGZpbHRlcmAgdG8gb2J0YWluIHRoZSBzYW1lIGJlaGF2aW9yIG9mIGBmaW5kYFxuICByZXR1cm4gYXJyLmZpbHRlcihjaGVjaylbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleChtb2RpZmllcnMsICduYW1lJywgZW5kcykpO1xuXG4gIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKG1vZGlmaWVyWydmdW5jdGlvbiddKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdgbW9kaWZpZXIuZnVuY3Rpb25gIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbW9kaWZpZXIuZm5gIScpO1xuICAgIH1cbiAgICB2YXIgZm4gPSBtb2RpZmllclsnZnVuY3Rpb24nXSB8fCBtb2RpZmllci5mbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAobW9kaWZpZXIuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gb2Zmc2V0cyB0byBtYWtlIHRoZW0gYSBjb21wbGV0ZSBjbGllbnRSZWN0IG9iamVjdFxuICAgICAgLy8gd2UgZG8gdGhpcyBiZWZvcmUgZWFjaCBtb2RpZmllciB0byBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIG9uZSBkb2Vzbid0XG4gICAgICAvLyBtZXNzIHdpdGggdGhlc2UgdmFsdWVzXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UpO1xuXG4gICAgICBkYXRhID0gZm4oZGF0YSwgbW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlciwgY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0cyBhbmQgYXBwbHlpbmdcbiAqIHRoZSBuZXcgc3R5bGUuPGJyIC8+XG4gKiBQcmVmZXIgYHNjaGVkdWxlVXBkYXRlYCBvdmVyIGB1cGRhdGVgIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyBpZiBwb3BwZXIgaXMgZGVzdHJveWVkLCBkb24ndCBwZXJmb3JtIGFueSBmdXJ0aGVyIHVwZGF0ZVxuICBpZiAodGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0ge1xuICAgIGluc3RhbmNlOiB0aGlzLFxuICAgIHN0eWxlczoge30sXG4gICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICAgIG9mZnNldHM6IHt9XG4gIH07XG5cbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRoaXMuc3RhdGUsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7XG5cbiAgLy8gc3RvcmUgdGhlIGNvbXB1dGVkIHBsYWNlbWVudCBpbnNpZGUgYG9yaWdpbmFsUGxhY2VtZW50YFxuICBkYXRhLm9yaWdpbmFsUGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgZGF0YS5wb3NpdGlvbkZpeGVkID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQ7XG5cbiAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldFBvcHBlck9mZnNldHModGhpcy5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlLCBkZXBlbmRpbmcgb24gdGhlIHZlbmRvciBwcmVmaXgpXG4gKi9cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4ZXMgPSBbZmFsc2UsICdtcycsICdXZWJraXQnLCAnTW96JywgJ08nXTtcbiAgdmFyIHVwcGVyUHJvcCA9IHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIERlc3Ryb3kgdGhlIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkZXN0cm95KCkge1xuICB0aGlzLnN0YXRlLmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuICAvLyB0b3VjaCBET00gb25seSBpZiBgYXBwbHlTdHlsZWAgbW9kaWZpZXIgaXMgZW5hYmxlZFxuICBpZiAoaXNNb2RpZmllckVuYWJsZWQodGhpcy5tb2RpZmllcnMsICdhcHBseVN0eWxlJykpIHtcbiAgICB0aGlzLnBvcHBlci5yZW1vdmVBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50Jyk7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS50b3AgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUucmlnaHQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5ib3R0b20gPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGVbZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKV0gPSAnJztcbiAgfVxuXG4gIHRoaXMuZGlzYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgLy8gcmVtb3ZlIHRoZSBwb3BwZXIgaWYgdXNlciBleHBsaWNpdHkgYXNrZWQgZm9yIHRoZSBkZWxldGlvbiBvbiBkZXN0cm95XG4gIC8vIGRvIG5vdCB1c2UgYHJlbW92ZWAgYmVjYXVzZSBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBpdFxuICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZU9uRGVzdHJveSkge1xuICAgIHRoaXMucG9wcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3BwZXIpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2luZG93IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7V2luZG93fVxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coZWxlbWVudCkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogd2luZG93O1xufVxuXG5mdW5jdGlvbiBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsUGFyZW50LCBldmVudCwgY2FsbGJhY2ssIHNjcm9sbFBhcmVudHMpIHtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudC5ub2RlTmFtZSA9PT0gJ0JPRFknO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gc2Nyb2xsUGFyZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiBzY3JvbGxQYXJlbnQ7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIGlmICghaXNCb2R5KSB7XG4gICAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKGdldFNjcm9sbFBhcmVudCh0YXJnZXQucGFyZW50Tm9kZSksIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cyk7XG4gIH1cbiAgc2Nyb2xsUGFyZW50cy5wdXNoKHRhcmdldCk7XG59XG5cbi8qKlxuICogU2V0dXAgbmVlZGVkIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXR1cEV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgb3B0aW9ucywgc3RhdGUsIHVwZGF0ZUJvdW5kKSB7XG4gIC8vIFJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgc3RhdGUudXBkYXRlQm91bmQgPSB1cGRhdGVCb3VuZDtcbiAgZ2V0V2luZG93KHJlZmVyZW5jZSkuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyBTY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgdmFyIHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxQYXJlbnQocmVmZXJlbmNlKTtcbiAgYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCwgc3RhdGUuc2Nyb2xsUGFyZW50cyk7XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBzY3JvbGxFbGVtZW50O1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gdHJ1ZTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCBhZGQgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHN0YXJ0IHJlY2FsY3VsYXRpbmdcbiAqIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIgZWxlbWVudCB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHNldHVwRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucywgdGhpcy5zdGF0ZSwgdGhpcy5zY2hlZHVsZVVwZGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZSwgc3RhdGUpIHtcbiAgLy8gUmVtb3ZlIHJlc2l6ZSBldmVudCBsaXN0ZW5lciBvbiB3aW5kb3dcbiAgZ2V0V2luZG93KHJlZmVyZW5jZSkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3RhdGUudXBkYXRlQm91bmQpO1xuXG4gIC8vIFJlbW92ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gc2Nyb2xsIHBhcmVudHNcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc3RhdGUudXBkYXRlQm91bmQpO1xuICB9KTtcblxuICAvLyBSZXNldCBzdGF0ZVxuICBzdGF0ZS51cGRhdGVCb3VuZCA9IG51bGw7XG4gIHN0YXRlLnNjcm9sbFBhcmVudHMgPSBbXTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IG51bGw7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIEl0IHdpbGwgcmVtb3ZlIHJlc2l6ZS9zY3JvbGwgZXZlbnRzIGFuZCB3b24ndCByZWNhbGN1bGF0ZSBwb3BwZXIgcG9zaXRpb25cbiAqIHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLiBJdCBhbHNvIHdvbid0IHRyaWdnZXIgb25VcGRhdGUgY2FsbGJhY2sgYW55bW9yZSxcbiAqIHVubGVzcyB5b3UgY2FsbCBgdXBkYXRlYCBtZXRob2QgbWFudWFsbHkuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRpc2FibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCkge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2NoZWR1bGVVcGRhdGUpO1xuICAgIHRoaXMuc3RhdGUgPSByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5zdGF0ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyBpZiBhIGdpdmVuIGlucHV0IGlzIGEgbnVtYmVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0geyp9IGlucHV0IHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc051bWVyaWMobikge1xuICByZXR1cm4gbiAhPT0gJycgJiYgIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgc3R5bGUgdG8gdGhlIGdpdmVuIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhcHBseSB0aGUgc3R5bGUgdG9cbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXNcbiAqIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNldFN0eWxlcyhlbGVtZW50LCBzdHlsZXMpIHtcbiAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgdmFyIHVuaXQgPSAnJztcbiAgICAvLyBhZGQgdW5pdCBpZiB0aGUgdmFsdWUgaXMgbnVtZXJpYyBhbmQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAgICBpZiAoWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uaW5kZXhPZihwcm9wKSAhPT0gLTEgJiYgaXNOdW1lcmljKHN0eWxlc1twcm9wXSkpIHtcbiAgICAgIHVuaXQgPSAncHgnO1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gc3R5bGVzW3Byb3BdICsgdW5pdDtcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIGF0dHJpYnV0ZXMgdG9cbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXNcbiAqIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1twcm9wXTtcbiAgICBpZiAodmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLnN0eWxlcyAtIExpc3Qgb2Ygc3R5bGUgcHJvcGVydGllcyAtIHZhbHVlcyB0byBhcHBseSB0byBwb3BwZXIgZWxlbWVudFxuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEuYXR0cmlidXRlcyAtIExpc3Qgb2YgYXR0cmlidXRlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIGRhdGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZGF0YSkge1xuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5zdHlsZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyBpbiB0aGlzIHdheSB3ZSBjYW4gbWFrZSB0aGUgM3JkIHBhcnR5IG1vZGlmaWVycyBhZGQgY3VzdG9tIHN0eWxlcyB0byBpdFxuICAvLyBCZSBhd2FyZSwgbW9kaWZpZXJzIGNvdWxkIG92ZXJyaWRlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhlIHByZXZpb3VzXG4gIC8vIGxpbmVzIG9mIHRoaXMgbW9kaWZpZXIhXG4gIHNldFN0eWxlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5zdHlsZXMpO1xuXG4gIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLmF0dHJpYnV0ZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAvLyB0aGV5IHdpbGwgYmUgc2V0IGFzIEhUTUwgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuICBzZXRBdHRyaWJ1dGVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmF0dHJpYnV0ZXMpO1xuXG4gIC8vIGlmIGFycm93RWxlbWVudCBpcyBkZWZpbmVkIGFuZCBhcnJvd1N0eWxlcyBoYXMgc29tZSBwcm9wZXJ0aWVzXG4gIGlmIChkYXRhLmFycm93RWxlbWVudCAmJiBPYmplY3Qua2V5cyhkYXRhLmFycm93U3R5bGVzKS5sZW5ndGgpIHtcbiAgICBzZXRTdHlsZXMoZGF0YS5hcnJvd0VsZW1lbnQsIGRhdGEuYXJyb3dTdHlsZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogU2V0IHRoZSB4LXBsYWNlbWVudCBhdHRyaWJ1dGUgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSBiZWNhdXNlIGl0IGNvdWxkIGJlIHVzZWRcbiAqIHRvIGFkZCBtYXJnaW5zIHRvIHRoZSBwb3BwZXIgbWFyZ2lucyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIHRvIGdldCB0aGVcbiAqIGNvcnJlY3QgcG9wcGVyIG9mZnNldHMuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHBvcHBlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGFzIHBvcHBlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQb3BwZXIuanMgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlT25Mb2FkKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIHN0YXRlKSB7XG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICB2YXIgcmVmZXJlbmNlT2Zmc2V0cyA9IGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB2YXIgcGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQob3B0aW9ucy5wbGFjZW1lbnQsIHJlZmVyZW5jZU9mZnNldHMsIHBvcHBlciwgcmVmZXJlbmNlLCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCBvcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO1xuXG4gIHBvcHBlci5zZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JywgcGxhY2VtZW50KTtcblxuICAvLyBBcHBseSBgcG9zaXRpb25gIHRvIHBvcHBlciBiZWZvcmUgYW55dGhpbmcgZWxzZSBiZWNhdXNlXG4gIC8vIHdpdGhvdXQgdGhlIHBvc2l0aW9uIGFwcGxpZWQgd2UgY2FuJ3QgZ3VhcmFudGVlIGNvcnJlY3QgY29tcHV0YXRpb25zXG4gIHNldFN0eWxlcyhwb3BwZXIsIHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb25GaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBjb21wdXRlU3R5bGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgeCA9IG9wdGlvbnMueCxcbiAgICAgIHkgPSBvcHRpb25zLnk7XG4gIHZhciBwb3BwZXIgPSBkYXRhLm9mZnNldHMucG9wcGVyO1xuXG4gIC8vIFJlbW92ZSB0aGlzIGxlZ2FjeSBzdXBwb3J0IGluIFBvcHBlci5qcyB2MlxuXG4gIHZhciBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ2FwcGx5U3R5bGUnO1xuICB9KS5ncHVBY2NlbGVyYXRpb247XG4gIGlmIChsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGdwdUFjY2VsZXJhdGlvbmAgb3B0aW9uIG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFBvcHBlci5qcyEnKTtcbiAgfVxuICB2YXIgZ3B1QWNjZWxlcmF0aW9uID0gbGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uICE9PSB1bmRlZmluZWQgPyBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gOiBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbjtcblxuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIG9mZnNldFBhcmVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcblxuICAvLyBTdHlsZXNcbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBwb3NpdGlvbjogcG9wcGVyLnBvc2l0aW9uXG4gIH07XG5cbiAgLy8gQXZvaWQgYmx1cnJ5IHRleHQgYnkgdXNpbmcgZnVsbCBwaXhlbCBpbnRlZ2Vycy5cbiAgLy8gRm9yIHBpeGVsLXBlcmZlY3QgcG9zaXRpb25pbmcsIHRvcC9ib3R0b20gcHJlZmVycyByb3VuZGVkXG4gIC8vIHZhbHVlcywgd2hpbGUgbGVmdC9yaWdodCBwcmVmZXJzIGZsb29yZWQgdmFsdWVzLlxuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICBsZWZ0OiBNYXRoLmZsb29yKHBvcHBlci5sZWZ0KSxcbiAgICB0b3A6IE1hdGgucm91bmQocG9wcGVyLnRvcCksXG4gICAgYm90dG9tOiBNYXRoLnJvdW5kKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBNYXRoLmZsb29yKHBvcHBlci5yaWdodClcbiAgfTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICB0b3AgPSAtb2Zmc2V0UGFyZW50UmVjdC5oZWlnaHQgKyBvZmZzZXRzLmJvdHRvbTtcbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBsZWZ0ID0gLW9mZnNldFBhcmVudFJlY3Qud2lkdGggKyBvZmZzZXRzLnJpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGxlZnQgPSBvZmZzZXRzLmxlZnQ7XG4gIH1cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbiAmJiBwcmVmaXhlZFByb3BlcnR5KSB7XG4gICAgc3R5bGVzW3ByZWZpeGVkUHJvcGVydHldID0gJ3RyYW5zbGF0ZTNkKCcgKyBsZWZ0ICsgJ3B4LCAnICsgdG9wICsgJ3B4LCAwKSc7XG4gICAgc3R5bGVzW3NpZGVBXSA9IDA7XG4gICAgc3R5bGVzW3NpZGVCXSA9IDA7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGh3ZXJpc2UsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYHRvcGAsIGBsZWZ0YCwgYGJvdHRvbWAgYW5kIGByaWdodGAgcHJvcGVydGllc1xuICAgIHZhciBpbnZlcnRUb3AgPSBzaWRlQSA9PT0gJ2JvdHRvbScgPyAtMSA6IDE7XG4gICAgdmFyIGludmVydExlZnQgPSBzaWRlQiA9PT0gJ3JpZ2h0JyA/IC0xIDogMTtcbiAgICBzdHlsZXNbc2lkZUFdID0gdG9wICogaW52ZXJ0VG9wO1xuICAgIHN0eWxlc1tzaWRlQl0gPSBsZWZ0ICogaW52ZXJ0TGVmdDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9IHNpZGVBICsgJywgJyArIHNpZGVCO1xuICB9XG5cbiAgLy8gQXR0cmlidXRlc1xuICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAneC1wbGFjZW1lbnQnOiBkYXRhLnBsYWNlbWVudFxuICB9O1xuXG4gIC8vIFVwZGF0ZSBgZGF0YWAgYXR0cmlidXRlcywgc3R5bGVzIGFuZCBhcnJvd1N0eWxlc1xuICBkYXRhLmF0dHJpYnV0ZXMgPSBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlcywgZGF0YS5hdHRyaWJ1dGVzKTtcbiAgZGF0YS5zdHlsZXMgPSBfZXh0ZW5kcyh7fSwgc3R5bGVzLCBkYXRhLnN0eWxlcyk7XG4gIGRhdGEuYXJyb3dTdHlsZXMgPSBfZXh0ZW5kcyh7fSwgZGF0YS5vZmZzZXRzLmFycm93LCBkYXRhLmFycm93U3R5bGVzKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdXNlZCB0byBrbm93IGlmIHRoZSBnaXZlbiBtb2RpZmllciBkZXBlbmRzIGZyb20gYW5vdGhlciBvbmUuPGJyIC8+XG4gKiBJdCBjaGVja3MgaWYgdGhlIG5lZWRlZCBtb2RpZmllciBpcyBsaXN0ZWQgYW5kIGVuYWJsZWQuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0FycmF5fSBtb2RpZmllcnMgLSBsaXN0IG9mIG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RpbmdOYW1lIC0gbmFtZSBvZiByZXF1ZXN0aW5nIG1vZGlmaWVyXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGVkTmFtZSAtIG5hbWUgb2YgcmVxdWVzdGVkIG1vZGlmaWVyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNNb2RpZmllclJlcXVpcmVkKG1vZGlmaWVycywgcmVxdWVzdGluZ05hbWUsIHJlcXVlc3RlZE5hbWUpIHtcbiAgdmFyIHJlcXVlc3RpbmcgPSBmaW5kKG1vZGlmaWVycywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZTtcbiAgICByZXR1cm4gbmFtZSA9PT0gcmVxdWVzdGluZ05hbWU7XG4gIH0pO1xuXG4gIHZhciBpc1JlcXVpcmVkID0gISFyZXF1ZXN0aW5nICYmIG1vZGlmaWVycy5zb21lKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSByZXF1ZXN0ZWROYW1lICYmIG1vZGlmaWVyLmVuYWJsZWQgJiYgbW9kaWZpZXIub3JkZXIgPCByZXF1ZXN0aW5nLm9yZGVyO1xuICB9KTtcblxuICBpZiAoIWlzUmVxdWlyZWQpIHtcbiAgICB2YXIgX3JlcXVlc3RpbmcgPSAnYCcgKyByZXF1ZXN0aW5nTmFtZSArICdgJztcbiAgICB2YXIgcmVxdWVzdGVkID0gJ2AnICsgcmVxdWVzdGVkTmFtZSArICdgJztcbiAgICBjb25zb2xlLndhcm4ocmVxdWVzdGVkICsgJyBtb2RpZmllciBpcyByZXF1aXJlZCBieSAnICsgX3JlcXVlc3RpbmcgKyAnIG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgJyArIF9yZXF1ZXN0aW5nICsgJyEnKTtcbiAgfVxuICByZXR1cm4gaXNSZXF1aXJlZDtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGFycm93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIF9kYXRhJG9mZnNldHMkYXJyb3c7XG5cbiAgLy8gYXJyb3cgZGVwZW5kcyBvbiBrZWVwVG9nZXRoZXIgaW4gb3JkZXIgdG8gd29ya1xuICBpZiAoIWlzTW9kaWZpZXJSZXF1aXJlZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgJ2Fycm93JywgJ2tlZXBUb2dldGhlcicpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYXJyb3dFbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50O1xuXG4gIC8vIGlmIGFycm93RWxlbWVudCBpcyBhIHN0cmluZywgc3VwcG9zZSBpdCdzIGEgQ1NTIHNlbGVjdG9yXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IGRhdGEuaW5zdGFuY2UucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIC8vIGlmIGFycm93RWxlbWVudCBpcyBub3QgZm91bmQsIGRvbid0IHJ1biB0aGUgbW9kaWZpZXJcbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHRoZSBhcnJvd0VsZW1lbnQgaXNuJ3QgYSBxdWVyeSBzZWxlY3RvciB3ZSBtdXN0IGNoZWNrIHRoYXQgdGhlXG4gICAgLy8gcHJvdmlkZWQgRE9NIG5vZGUgaXMgY2hpbGQgb2YgaXRzIHBvcHBlciBub2RlXG4gICAgaWYgKCFkYXRhLmluc3RhbmNlLnBvcHBlci5jb250YWlucyhhcnJvd0VsZW1lbnQpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGBhcnJvdy5lbGVtZW50YCBtdXN0IGJlIGNoaWxkIG9mIGl0cyBwb3BwZXIgZWxlbWVudCEnKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2lkZUNhcGl0YWxpemVkID0gaXNWZXJ0aWNhbCA/ICdUb3AnIDogJ0xlZnQnO1xuICB2YXIgc2lkZSA9IHNpZGVDYXBpdGFsaXplZC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgYWx0U2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gIHZhciBhcnJvd0VsZW1lbnRTaXplID0gZ2V0T3V0ZXJTaXplcyhhcnJvd0VsZW1lbnQpW2xlbl07XG5cbiAgLy9cbiAgLy8gZXh0ZW5kcyBrZWVwVG9nZXRoZXIgYmVoYXZpb3IgbWFraW5nIHN1cmUgdGhlIHBvcHBlciBhbmQgaXRzXG4gIC8vIHJlZmVyZW5jZSBoYXZlIGVub3VnaCBwaXhlbHMgaW4gY29uanVjdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0sIDEwKTtcbiAgdmFyIHBvcHBlckJvcmRlclNpZGUgPSBwYXJzZUZsb2F0KGNzc1snYm9yZGVyJyArIHNpZGVDYXBpdGFsaXplZCArICdXaWR0aCddLCAxMCk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIHNpZGUsIE1hdGgucm91bmQoc2lkZVZhbHVlKSksIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIGFsdFNpZGUsICcnKSwgX2RhdGEkb2Zmc2V0cyRhcnJvdyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgdmFyaWF0aW9uIG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudCB2YXJpYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKSB7XG4gIGlmICh2YXJpYXRpb24gPT09ICdlbmQnKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH0gZWxzZSBpZiAodmFyaWF0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9XG4gIHJldHVybiB2YXJpYXRpb247XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY2NlcHRlZCBwbGFjZW1lbnRzIHRvIHVzZSBhcyB2YWx1ZXMgb2YgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbi48YnIgLz5cbiAqIFZhbGlkIHBsYWNlbWVudHMgYXJlOlxuICogLSBgYXV0b2BcbiAqIC0gYHRvcGBcbiAqIC0gYHJpZ2h0YFxuICogLSBgYm90dG9tYFxuICogLSBgbGVmdGBcbiAqXG4gKiBFYWNoIHBsYWNlbWVudCBjYW4gaGF2ZSBhIHZhcmlhdGlvbiBmcm9tIHRoaXMgbGlzdDpcbiAqIC0gYC1zdGFydGBcbiAqIC0gYC1lbmRgXG4gKlxuICogVmFyaWF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgZWFzaWx5IGlmIHlvdSB0aGluayBvZiB0aGVtIGFzIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gKiB3cml0dGVuIGxhbmd1YWdlcy4gSG9yaXpvbnRhbGx5IChgdG9wYCBhbmQgYGJvdHRvbWApLCBgc3RhcnRgIGlzIGxlZnQgYW5kIGBlbmRgXG4gKiBpcyByaWdodC48YnIgLz5cbiAqIFZlcnRpY2FsbHkgKGBsZWZ0YCBhbmQgYHJpZ2h0YCksIGBzdGFydGAgaXMgdG9wIGFuZCBgZW5kYCBpcyBib3R0b20uXG4gKlxuICogU29tZSB2YWxpZCBleGFtcGxlcyBhcmU6XG4gKiAtIGB0b3AtZW5kYCAob24gdG9wIG9mIHJlZmVyZW5jZSwgcmlnaHQgYWxpZ25lZClcbiAqIC0gYHJpZ2h0LXN0YXJ0YCAob24gcmlnaHQgb2YgcmVmZXJlbmNlLCB0b3AgYWxpZ25lZClcbiAqIC0gYGJvdHRvbWAgKG9uIGJvdHRvbSwgY2VudGVyZWQpXG4gKiAtIGBhdXRvLXJpZ2h0YCAob24gdGhlIHNpZGUgd2l0aCBtb3JlIHNwYWNlIGF2YWlsYWJsZSwgYWxpZ25tZW50IGRlcGVuZHMgYnkgcGxhY2VtZW50KVxuICpcbiAqIEBzdGF0aWNcbiAqIEB0eXBlIHtBcnJheX1cbiAqIEBlbnVtIHtTdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZXRob2QgcGxhY2VtZW50c1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgcGxhY2VtZW50cyA9IFsnYXV0by1zdGFydCcsICdhdXRvJywgJ2F1dG8tZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnLCAndG9wLWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICdyaWdodC1lbmQnLCAnYm90dG9tLWVuZCcsICdib3R0b20nLCAnYm90dG9tLXN0YXJ0JywgJ2xlZnQtZW5kJywgJ2xlZnQnLCAnbGVmdC1zdGFydCddO1xuXG4vLyBHZXQgcmlkIG9mIGBhdXRvYCBgYXV0by1zdGFydGAgYW5kIGBhdXRvLWVuZGBcbnZhciB2YWxpZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLnNsaWNlKDMpO1xuXG4vKipcbiAqIEdpdmVuIGFuIGluaXRpYWwgcGxhY2VtZW50LCByZXR1cm5zIGFsbCB0aGUgc3Vic2VxdWVudCBwbGFjZW1lbnRzXG4gKiBjbG9ja3dpc2UgKG9yIGNvdW50ZXItY2xvY2t3aXNlKS5cbiAqXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IC0gQSB2YWxpZCBwbGFjZW1lbnQgKGl0IGFjY2VwdHMgdmFyaWF0aW9ucylcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gY291bnRlciAtIFNldCB0byB0cnVlIHRvIHdhbGsgdGhlIHBsYWNlbWVudHMgY291bnRlcmNsb2Nrd2lzZVxuICogQHJldHVybnMge0FycmF5fSBwbGFjZW1lbnRzIGluY2x1ZGluZyB0aGVpciB2YXJpYXRpb25zXG4gKi9cbmZ1bmN0aW9uIGNsb2Nrd2lzZShwbGFjZW1lbnQpIHtcbiAgdmFyIGNvdW50ZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBpbmRleCA9IHZhbGlkUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCk7XG4gIHZhciBhcnIgPSB2YWxpZFBsYWNlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5jb25jYXQodmFsaWRQbGFjZW1lbnRzLnNsaWNlKDAsIGluZGV4KSk7XG4gIHJldHVybiBjb3VudGVyID8gYXJyLnJldmVyc2UoKSA6IGFycjtcbn1cblxudmFyIEJFSEFWSU9SUyA9IHtcbiAgRkxJUDogJ2ZsaXAnLFxuICBDTE9DS1dJU0U6ICdjbG9ja3dpc2UnLFxuICBDT1VOVEVSQ0xPQ0tXSVNFOiAnY291bnRlcmNsb2Nrd2lzZSdcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBmbGlwKGRhdGEsIG9wdGlvbnMpIHtcbiAgLy8gaWYgYGlubmVyYCBtb2RpZmllciBpcyBlbmFibGVkLCB3ZSBjYW4ndCB1c2UgdGhlIGBmbGlwYCBtb2RpZmllclxuICBpZiAoaXNNb2RpZmllckVuYWJsZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdpbm5lcicpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoZGF0YS5mbGlwcGVkICYmIGRhdGEucGxhY2VtZW50ID09PSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50KSB7XG4gICAgLy8gc2VlbXMgbGlrZSBmbGlwIGlzIHRyeWluZyB0byBsb29wLCBwcm9iYWJseSB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2Ugb24gYW55IG9mIHRoZSBmbGlwcGFibGUgc2lkZXNcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBib3VuZGFyaWVzID0gZ2V0Qm91bmRhcmllcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5pbnN0YW5jZS5yZWZlcmVuY2UsIG9wdGlvbnMucGFkZGluZywgb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCwgZGF0YS5wb3NpdGlvbkZpeGVkKTtcblxuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMV0gfHwgJyc7XG5cbiAgdmFyIGZsaXBPcmRlciA9IFtdO1xuXG4gIHN3aXRjaCAob3B0aW9ucy5iZWhhdmlvcikge1xuICAgIGNhc2UgQkVIQVZJT1JTLkZMSVA6XG4gICAgICBmbGlwT3JkZXIgPSBbcGxhY2VtZW50LCBwbGFjZW1lbnRPcHBvc2l0ZV07XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DTE9DS1dJU0U6XG4gICAgICBmbGlwT3JkZXIgPSBjbG9ja3dpc2UocGxhY2VtZW50KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNPVU5URVJDTE9DS1dJU0U6XG4gICAgICBmbGlwT3JkZXIgPSBjbG9ja3dpc2UocGxhY2VtZW50LCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmbGlwT3JkZXIgPSBvcHRpb25zLmJlaGF2aW9yO1xuICB9XG5cbiAgZmxpcE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKHN0ZXAsIGluZGV4KSB7XG4gICAgaWYgKHBsYWNlbWVudCAhPT0gc3RlcCB8fCBmbGlwT3JkZXIubGVuZ3RoID09PSBpbmRleCArIDEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gICAgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIHBvcHBlck9mZnNldHMgPSBkYXRhLm9mZnNldHMucG9wcGVyO1xuICAgIHZhciByZWZPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcblxuICAgIC8vIHVzaW5nIGZsb29yIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBvZmZzZXRzIG1heSBjb250YWluIGRlY2ltYWxzIHdlIGFyZSBub3QgZ29pbmcgdG8gY29uc2lkZXIgaGVyZVxuICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgdmFyIG92ZXJsYXBzUmVmID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihyZWZPZmZzZXRzLmxlZnQpIHx8IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IocmVmT2Zmc2V0cy5yaWdodCkgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihyZWZPZmZzZXRzLnRvcCkgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihyZWZPZmZzZXRzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzTGVmdCA9IGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihib3VuZGFyaWVzLmxlZnQpO1xuICAgIHZhciBvdmVyZmxvd3NSaWdodCA9IGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IoYm91bmRhcmllcy5yaWdodCk7XG4gICAgdmFyIG92ZXJmbG93c1RvcCA9IGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKGJvdW5kYXJpZXMudG9wKTtcbiAgICB2YXIgb3ZlcmZsb3dzQm90dG9tID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IoYm91bmRhcmllcy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0JvdW5kYXJpZXMgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyAmJiBvdmVyZmxvd3NSaWdodCB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIG92ZXJmbG93c1RvcCB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIG92ZXJmbG93c0JvdHRvbTtcblxuICAgIC8vIGZsaXAgdGhlIHZhcmlhdGlvbiBpZiByZXF1aXJlZFxuICAgIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbiA9ICEhb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyAmJiAoaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c1RvcCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c0JvdHRvbSk7XG5cbiAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcyB8fCBmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAvLyB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG5cbiAgICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgICB2YXJpYXRpb24gPSBnZXRPcHBvc2l0ZVZhcmlhdGlvbih2YXJpYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnBsYWNlbWVudCA9IHBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG5cbiAgICAgIC8vIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGBwb3NpdGlvbmAsIHdlIHdhbnQgdG8gcHJlc2VydmUgaXQgYWxvbmcgd2l0aFxuICAgICAgLy8gYW55IGFkZGl0aW9uYWwgcHJvcGVydHkgd2UgbWF5IGFkZCBpbiB0aGUgZnV0dXJlXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0pLFxuICAgICAgZW5kOiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW21lYXN1cmVtZW50XSAtIHBvcHBlclttZWFzdXJlbWVudF0pXG4gICAgfTtcblxuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0bGVzcywgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzXG4gICAqIC0gYCVgIG9yIGAlcmAsIHBlcmNlbnRhZ2UgcmVsYXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAgICogLSBgJXBgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHBvcHBlciBlbGVtZW50XG4gICAqIC0gYHZ3YCwgQ1NTIHZpZXdwb3J0IHdpZHRoIHVuaXRcbiAgICogLSBgdmhgLCBDU1Mgdmlld3BvcnQgaGVpZ2h0IHVuaXRcbiAgICpcbiAgICogRm9yIGxlbmd0aCBpcyBpbnRlbmRlZCB0aGUgbWFpbiBheGlzIHJlbGF0aXZlIHRvIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlci48YnIgLz5cbiAgICogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBwbGFjZW1lbnQgaXMgYHRvcGAgb3IgYGJvdHRvbWAsIHRoZSBsZW5ndGggd2lsbCBiZSB0aGVcbiAgICogYHdpZHRoYC4gSW4gY2FzZSBvZiBgbGVmdGAgb3IgYHJpZ2h0YCwgaXQgd2lsbCBiZSB0aGUgaGVpZ2h0LlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gTW9yZSBvbiB0aGlzIFtyZWFkaW5nIHRoaXMgaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9GZXpWcmFzdGEvcG9wcGVyLmpzL2lzc3Vlcy8zNzMpXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEFuIHNjZW5hcmlvIGV4aXN0cyB3aGVyZSB0aGUgcmVmZXJlbmNlIGl0c2VsZiBpcyBub3Qgd2l0aGluIHRoZSBib3VuZGFyaWVzLjxiciAvPlxuICAgKiBXZSBjYW4gc2F5IGl0IGhhcyBcImVzY2FwZWQgdGhlIGJvdW5kYXJpZXNcIiDigJQgb3IganVzdCBcImVzY2FwZWRcIi48YnIgLz5cbiAgICogSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHBvcHBlciBzaG91bGQgZWl0aGVyOlxuICAgKlxuICAgKiAtIGRldGFjaCBmcm9tIHRoZSByZWZlcmVuY2UgYW5kIHJlbWFpbiBcInRyYXBwZWRcIiBpbiB0aGUgYm91bmRhcmllcywgb3JcbiAgICogLSBpZiBpdCBzaG91bGQgaWdub3JlIHRoZSBib3VuZGFyeSBhbmQgXCJlc2NhcGUgd2l0aCBpdHMgcmVmZXJlbmNlXCJcbiAgICpcbiAgICogV2hlbiBgZXNjYXBlV2l0aFJlZmVyZW5jZWAgaXMgc2V0IHRvYHRydWVgIGFuZCByZWZlcmVuY2UgaXMgY29tcGxldGVseVxuICAgKiBvdXRzaWRlIGl0cyBib3VuZGFyaWVzLCB0aGUgcG9wcGVyIHdpbGwgb3ZlcmZsb3cgKG9yIGNvbXBsZXRlbHkgbGVhdmUpXG4gICAqIHRoZSBib3VuZGFyaWVzIGluIG9yZGVyIHRvIHJlbWFpbiBhdHRhY2hlZCB0byB0aGUgZWRnZSBvZiB0aGUgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTMwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogcHJldmVudE92ZXJmbG93LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtBcnJheX0gW3ByaW9yaXR5PVsnbGVmdCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ11dXG4gICAgICogUG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoZXNlIHByaW9yaXRpZXMgYnkgZGVmYXVsdCxcbiAgICAgKiB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcHJpb3JpdHk6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogQW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzXG4gICAgICogYW5kIHRoZSBwb3BwZXIgdGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgaGFzIGFsd2F5cyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLCBjYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNob3RoZXJzXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXhwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gYXNzdXJlIGl0IHRvIHBvaW50IHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcywgeW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVjdGlvbiBhcmUgbmVlZGVkLlxuICAgKlxuICAgKiBJdCBoYXMgbm8gZWZmZWN0IGlmIG5vIGBhcnJvd0VsZW1lbnRgIGlzIHByb3ZpZGVkLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgYXJyb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA1MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcnJvdyxcbiAgICAvKiogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gZWxlbWVudD0nW3gtYXJyb3ddJyAtIFNlbGVjdG9yIG9yIG5vZGUgdXNlZCBhcyBhcnJvdyAqL1xuICAgIGVsZW1lbnQ6ICdbeC1hcnJvd10nXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gZmxpcCB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50IHdoZW4gaXQgc3RhcnRzIHRvIG92ZXJsYXAgaXRzXG4gICAqIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAqXG4gICAqICoqTk9URToqKiB0aGlzIG1vZGlmaWVyIHdpbGwgaW50ZXJydXB0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZSBhbmQgd2lsbFxuICAgKiByZXN0YXJ0IGl0IGlmIGl0IGRldGVjdHMgdGhlIG5lZWQgdG8gZmxpcCB0aGUgcGxhY2VtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgZmxpcDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj02MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDYwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGZsaXAsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xBcnJheX0gYmVoYXZpb3I9J2ZsaXAnXG4gICAgICogVGhlIGJlaGF2aW9yIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3BwZXIncyBwbGFjZW1lbnQuIEl0IGNhbiBiZSBvbmUgb2ZcbiAgICAgKiBgZmxpcGAsIGBjbG9ja3dpc2VgLCBgY291bnRlcmNsb2Nrd2lzZWAgb3IgYW4gYXJyYXkgd2l0aCBhIGxpc3Qgb2YgdmFsaWRcbiAgICAgKiBwbGFjZW1lbnRzICh3aXRoIG9wdGlvbmFsIHZhcmlhdGlvbnMpLlxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLFxuICAgICAqIHRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBrZWVwVG9nZXRoZXIgaXMgZW5hYmxlZClcbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2UgdGhlIHBvcHBlciBmbG93IHRvd2FyZCB0aGUgaW5uZXIgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRoaXMgbW9kaWZpZXIgaXMgZGlzYWJsZWQsIHRoZSBwb3BwZXIgd2lsbCBiZSBwbGFjZWQgb3V0c2lkZVxuICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBpbm5lcjoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj03MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDcwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9ZmFsc2UgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaW5uZXJcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBoaWRlIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGVcbiAgICogcG9wcGVyIGJvdW5kYXJpZXMuIEl0IHdpbGwgc2V0IGEgYHgtb3V0LW9mLWJvdW5kYXJpZXNgIGF0dHJpYnV0ZSB3aGljaCBjYW5cbiAgICogYmUgdXNlZCB0byBoaWRlIHdpdGggYSBDU1Mgc2VsZWN0b3IgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgaXNcbiAgICogb3V0IG9mIGJvdW5kYXJpZXMuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGhpZGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBoaWRlXG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBzdHlsZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyIGVsZW1lbnQgdG8gZ2V0c1xuICAgKiBwcm9wZXJseSBwb3NpdGlvbmVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtb2RpZmllciB3aWxsIG5vdCB0b3VjaCB0aGUgRE9NLCBpdCBqdXN0IHByZXBhcmVzIHRoZSBzdHlsZXNcbiAgICogc28gdGhhdCBgYXBwbHlTdHlsZWAgbW9kaWZpZXIgY2FuIGFwcGx5IGl0LiBUaGlzIHNlcGFyYXRpb24gaXMgdXNlZnVsXG4gICAqIGluIGNhc2UgeW91IG5lZWQgdG8gcmVwbGFjZSBgYXBwbHlTdHlsZWAgd2l0aCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogVGhpcyBtb2RpZmllciBoYXMgYDg1MGAgYXMgYG9yZGVyYCB2YWx1ZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAqIHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgUG9wcGVyLmpzLiBFeHBlY3QgdGhlIG1vZGlmaWVycyBvcmRlcmluZyBtZXRob2RcbiAgICogdG8gY2hhbmdlIGluIGZ1dHVyZSBtYWpvciB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGNvbXB1dGVTdHlsZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04NTAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDg1MCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGNvbXB1dGVTdHlsZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM2QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtzdHJpbmd9IFt4PSdib3R0b20nXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWCBheGlzIChgYm90dG9tYCBvciBgdG9wYCkuIEFLQSBYIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYGJvdHRvbWBcbiAgICAgKi9cbiAgICB4OiAnYm90dG9tJyxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nbGVmdCddXG4gICAgICogV2hlcmUgdG8gYW5jaG9yIHRoZSBZIGF4aXMgKGBsZWZ0YCBvciBgcmlnaHRgKS4gQUtBIFkgb2Zmc2V0IG9yaWdpbi5cbiAgICAgKiBDaGFuZ2UgdGhpcyBpZiB5b3VyIHBvcHBlciBzaG91bGQgZ3JvdyBpbiBhIGRpcmVjdGlvbiBkaWZmZXJlbnQgZnJvbSBgcmlnaHRgXG4gICAgICovXG4gICAgeTogJ3JpZ2h0J1xuICB9LFxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjb21wdXRlZCBzdHlsZXMgdG8gdGhlIHBvcHBlciBlbGVtZW50LlxuICAgKlxuICAgKiBBbGwgdGhlIERPTSBtYW5pcHVsYXRpb25zIGFyZSBsaW1pdGVkIHRvIHRoaXMgbW9kaWZpZXIuIFRoaXMgaXMgdXNlZnVsIGluIGNhc2VcbiAgICogeW91IHdhbnQgdG8gaW50ZWdyYXRlIFBvcHBlci5qcyBpbnNpZGUgYSBmcmFtZXdvcmsgb3IgdmlldyBsaWJyYXJ5IGFuZCB5b3VcbiAgICogd2FudCB0byBkZWxlZ2F0ZSBhbGwgdGhlIERPTSBtYW5pcHVsYXRpb25zIHRvIGl0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgaWYgeW91IGRpc2FibGUgdGhpcyBtb2RpZmllciwgeW91IG11c3QgbWFrZSBzdXJlIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiBoYXMgaXRzIHBvc2l0aW9uIHNldCB0byBgYWJzb2x1dGVgIGJlZm9yZSBQb3BwZXIuanMgY2FuIGRvIGl0cyB3b3JrIVxuICAgKlxuICAgKiBKdXN0IGRpc2FibGUgdGhpcyBtb2RpZmllciBhbmQgZGVmaW5lIHlvdSBvd24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBhcHBseVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTkwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogOTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXBwbHlTdHlsZSxcbiAgICAvKiogQHByb3Age0Z1bmN0aW9ufSAqL1xuICAgIG9uTG9hZDogYXBwbHlTdHlsZU9uTG9hZCxcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuMTAuMCwgdGhlIHByb3BlcnR5IG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyXG4gICAgICogQHByb3Age0Jvb2xlYW59IGdwdUFjY2VsZXJhdGlvbj10cnVlXG4gICAgICogSWYgdHJ1ZSwgaXQgdXNlcyB0aGUgQ1NTIDNkIHRyYW5zZm9ybWF0aW9uIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIuXG4gICAgICogT3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgYHRvcGAgYW5kIGBsZWZ0YCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdW5kZWZpbmVkXG4gIH1cbn07XG5cbi8qKlxuICogVGhlIGBkYXRhT2JqZWN0YCBpcyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIGluZm9ybWF0aW9ucyB1c2VkIGJ5IFBvcHBlci5qc1xuICogdGhpcyBvYmplY3QgZ2V0IHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXIuXG4gKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fSBkYXRhLmFycm93RWxlbWVudCBOb2RlIHVzZWQgYXMgYXJyb3cgYnkgYXJyb3cgbW9kaWZpZXJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLnN0eWxlcyBBbnkgQ1NTIHByb3BlcnR5IGRlZmluZWQgaGVyZSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlciwgaXQgZXhwZWN0cyB0aGUgSmF2YVNjcmlwdCBub21lbmNsYXR1cmUgKGVnLiBgbWFyZ2luQm90dG9tYClcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmFycm93U3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyIGFycm93LCBpdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYm91bmRhcmllcyBPZmZzZXRzIG9mIHRoZSBwb3BwZXIgYm91bmRhcmllc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cyBUaGUgbWVhc3VyZW1lbnRzIG9mIHBvcHBlciwgcmVmZXJlbmNlIGFuZCBhcnJvdyBlbGVtZW50cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucG9wcGVyIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgYHRvcGAsIGBsZWZ0YCwgYHdpZHRoYCwgYGhlaWdodGAgdmFsdWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLmFycm93XSBgdG9wYCBhbmQgYGxlZnRgIG9mZnNldHMsIG9ubHkgb25lIG9mIHRoZW0gd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSAwXG4gKi9cblxuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgcHJvdmlkZWQgdG8gUG9wcGVyLmpzIGNvbnN0cnVjdG9yLjxiciAvPlxuICogVGhlc2UgY2FuIGJlIG92ZXJyaWRlbiB1c2luZyB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IG9mIFBvcHBlci5qcy48YnIgLz5cbiAqIFRvIG92ZXJyaWRlIGFuIG9wdGlvbiwgc2ltcGx5IHBhc3MgYXMgM3JkIGFyZ3VtZW50IGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lXG4gKiBzdHJ1Y3R1cmUgb2YgdGhpcyBvYmplY3QsIGV4YW1wbGU6XG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmLCBwb3AsIHtcbiAqICAgbW9kaWZpZXJzOiB7XG4gKiAgICAgcHJldmVudE92ZXJmbG93OiB7IGVuYWJsZWQ6IGZhbHNlIH1cbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogQHR5cGUge09iamVjdH1cbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIERlZmF1bHRzID0ge1xuICAvKipcbiAgICogUG9wcGVyJ3MgcGxhY2VtZW50XG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkXG4gICAqIEBwcm9wIHtCb29sZWFufSBldmVudHNFbmFibGVkPXRydWVcbiAgICovXG4gIGV2ZW50c0VuYWJsZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlblxuICAgKiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICogQHByb3Age0Jvb2xlYW59IHJlbW92ZU9uRGVzdHJveT1mYWxzZVxuICAgKi9cbiAgcmVtb3ZlT25EZXN0cm95OiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyBjcmVhdGVkLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvbkNyZWF0ZX1cbiAgICovXG4gIG9uQ3JlYXRlOiBmdW5jdGlvbiBvbkNyZWF0ZSgpIHt9LFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgcG9wcGVyIGlzIHVwZGF0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IGNhbGxlZFxuICAgKiBvbiB0aGUgaW5pdGlhbGl6YXRpb24vY3JlYXRpb24gb2YgdGhlIHBvcHBlciwgYnV0IG9ubHkgb24gc3Vic2VxdWVudFxuICAgKiB1cGRhdGVzLjxiciAvPlxuICAgKiBCeSBkZWZhdWx0LCBpcyBzZXQgdG8gbm8tb3AuPGJyIC8+XG4gICAqIEFjY2VzcyBQb3BwZXIuanMgaW5zdGFuY2Ugd2l0aCBgZGF0YS5pbnN0YW5jZWAuXG4gICAqIEBwcm9wIHtvblVwZGF0ZX1cbiAgICovXG4gIG9uVXBkYXRlOiBmdW5jdGlvbiBvblVwZGF0ZSgpIHt9LFxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG1vZGlmaWVycyB1c2VkIHRvIG1vZGlmeSB0aGUgb2Zmc2V0cyBiZWZvcmUgdGhleSBhcmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLlxuICAgKiBUaGV5IHByb3ZpZGUgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0aWVzIG9mIFBvcHBlci5qc1xuICAgKiBAcHJvcCB7bW9kaWZpZXJzfVxuICAgKi9cbiAgbW9kaWZpZXJzOiBtb2RpZmllcnNcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIG9uQ3JlYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBvblVwZGF0ZVxuICogQHBhcmFtIHtkYXRhT2JqZWN0fSBkYXRhXG4gKi9cblxuLy8gVXRpbHNcbi8vIE1ldGhvZHNcbnZhciBQb3BwZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqIEBjbGFzcyBQb3BwZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGFzIHBvcHBlci5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBZb3VyIGN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4gW0RlZmF1bHRzXSgjZGVmYXVsdHMpXG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2UgLSBUaGUgZ2VuZXJhdGVkIFBvcHBlci5qcyBpbnN0YW5jZVxuICAgKi9cbiAgZnVuY3Rpb24gUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBQb3BwZXIpO1xuXG4gICAgdGhpcy5zY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudXBkYXRlKTtcbiAgICB9O1xuXG4gICAgLy8gbWFrZSB1cGRhdGUoKSBkZWJvdW5jZWQsIHNvIHRoYXQgaXQgb25seSBydW5zIGF0IG1vc3Qgb25jZS1wZXItdGlja1xuICAgIHRoaXMudXBkYXRlID0gZGVib3VuY2UodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgICAvLyB3aXRoIHt9IHdlIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgb3B0aW9ucyBpbnNpZGUgaXRcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgIC8vIGluaXQgc3RhdGVcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNEZXN0cm95ZWQ6IGZhbHNlLFxuICAgICAgaXNDcmVhdGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFBhcmVudHM6IFtdXG4gICAgfTtcblxuICAgIC8vIGdldCByZWZlcmVuY2UgYW5kIHBvcHBlciBlbGVtZW50cyAoYWxsb3cgalF1ZXJ5IHdyYXBwZXJzKVxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlICYmIHJlZmVyZW5jZS5qcXVlcnkgPyByZWZlcmVuY2VbMF0gOiByZWZlcmVuY2U7XG4gICAgdGhpcy5wb3BwZXIgPSBwb3BwZXIgJiYgcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcblxuICAgIC8vIERlZXAgbWVyZ2UgbW9kaWZpZXJzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnMubW9kaWZpZXJzID0ge307XG4gICAgT2JqZWN0LmtleXMoX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgX3RoaXMub3B0aW9ucy5tb2RpZmllcnNbbmFtZV0gPSBfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVyc1tuYW1lXSB8fCB7fSwgb3B0aW9ucy5tb2RpZmllcnMgPyBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA6IHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZmFjdG9yaW5nIG1vZGlmaWVycycgbGlzdCAoT2JqZWN0ID0+IEFycmF5KVxuICAgIHRoaXMubW9kaWZpZXJzID0gT2JqZWN0LmtleXModGhpcy5vcHRpb25zLm1vZGlmaWVycykubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9LCBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSk7XG4gICAgfSlcbiAgICAvLyBzb3J0IHRoZSBtb2RpZmllcnMgYnkgb3JkZXJcbiAgICAuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyO1xuICAgIH0pO1xuXG4gICAgLy8gbW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSB3aGVuIFBvcHBlci5qcyBnZXQgaW5pdGVkXG4gICAgLy8gc3VjaCBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIG9mIGl0cyBtb2RpZmllclxuICAgIC8vIHRoZXkgY291bGQgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9wdGlvbnMgY29uZmlndXJhdGlvblxuICAgIC8vIEJFIEFXQVJFOiBkb24ndCBhZGQgb3B0aW9ucyB0byBgb3B0aW9ucy5tb2RpZmllcnMubmFtZWAgYnV0IHRvIGBtb2RpZmllck9wdGlvbnNgIVxuICAgIHRoaXMubW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyT3B0aW9ucykge1xuICAgICAgaWYgKG1vZGlmaWVyT3B0aW9ucy5lbmFibGVkICYmIGlzRnVuY3Rpb24obW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgICAgbW9kaWZpZXJPcHRpb25zLm9uTG9hZChfdGhpcy5yZWZlcmVuY2UsIF90aGlzLnBvcHBlciwgX3RoaXMub3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBfdGhpcy5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmaXJlIHRoZSBmaXJzdCB1cGRhdGUgdG8gcG9zaXRpb24gdGhlIHBvcHBlciBpbiB0aGUgcmlnaHQgcGxhY2VcbiAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgICBpZiAoZXZlbnRzRW5hYmxlZCkge1xuICAgICAgLy8gc2V0dXAgZXZlbnQgbGlzdGVuZXJzLCB0aGV5IHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0ZSB0aGUgcG9zaXRpb24gaW4gc3BlY2lmaWMgc2l0dWF0aW9uc1xuICAgICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGV2ZW50c0VuYWJsZWQ7XG4gIH1cblxuICAvLyBXZSBjYW4ndCB1c2UgY2xhc3MgcHJvcGVydGllcyBiZWNhdXNlIHRoZXkgZG9uJ3QgZ2V0IGxpc3RlZCBpbiB0aGVcbiAgLy8gY2xhc3MgcHJvdG90eXBlIGFuZCBicmVhayBzdHVmZiBsaWtlIFNpbm9uIHN0dWJzXG5cblxuICBjcmVhdGVDbGFzcyhQb3BwZXIsIFt7XG4gICAga2V5OiAndXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlJCQxKCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Rlc3Ryb3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95JCQxKCkge1xuICAgICAgcmV0dXJuIGRlc3Ryb3kuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdlbmFibGVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGVuYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGlzYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGRpc2FibGVFdmVudExpc3RlbmVycy5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlIGFuIHVwZGF0ZSwgaXQgd2lsbCBydW4gb24gdGhlIG5leHQgVUkgdXBkYXRlIGF2YWlsYWJsZVxuICAgICAqIEBtZXRob2Qgc2NoZWR1bGVVcGRhdGVcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIHVzZWZ1bCB3aGVuIHdyaXRpbmcgY3VzdG9tIG1vZGlmaWVycy5cbiAgICAgKiBTdGFydGluZyBmcm9tIHZlcnNpb24gMS43LCB0aGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgb25seSBpZiB5b3VcbiAgICAgKiBpbmNsdWRlIGBwb3BwZXItdXRpbHMuanNgIGJlZm9yZSBgcG9wcGVyLmpzYC5cbiAgICAgKlxuICAgICAqICoqREVQUkVDQVRJT04qKjogVGhpcyB3YXkgdG8gYWNjZXNzIFBvcHBlclV0aWxzIGlzIGRlcHJlY2F0ZWRcbiAgICAgKiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHYyISBVc2UgdGhlIFBvcHBlclV0aWxzIG1vZHVsZSBkaXJlY3RseSBpbnN0ZWFkLlxuICAgICAqIER1ZSB0byB0aGUgaGlnaCBpbnN0YWJpbGl0eSBvZiB0aGUgbWV0aG9kcyBjb250YWluZWQgaW4gVXRpbHMsIHdlIGNhbid0XG4gICAgICogZ3VhcmFudGVlIHRoZW0gdG8gZm9sbG93IHNlbXZlci4gVXNlIHRoZW0gYXQgeW91ciBvd24gcmlzayFcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS44XG4gICAgICogQG1lbWJlciBVdGlsc1xuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKi9cblxuICB9XSk7XG4gIHJldHVybiBQb3BwZXI7XG59KCk7XG5cbi8qKlxuICogVGhlIGByZWZlcmVuY2VPYmplY3RgIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGFuIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggUG9wcGVyLmpzXG4gKiBhbmQgbGV0cyB5b3UgdXNlIGl0IGFzIHJlcGxhY2VtZW50IG9mIGEgcmVhbCBET00gbm9kZS48YnIgLz5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIHBvc2l0aW9uIGEgcG9wcGVyIHJlbGF0aXZlbHkgdG8gYSBzZXQgb2YgY29vcmRpbmF0ZXNcbiAqIGluIGNhc2UgeW91IGRvbid0IGhhdmUgYSBET00gbm9kZSB0byB1c2UgYXMgcmVmZXJlbmNlLlxuICpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWZlcmVuY2VPYmplY3QsIHBvcHBlck5vZGUpO1xuICogYGBgXG4gKlxuICogTkI6IFRoaXMgZmVhdHVyZSBpc24ndCBzdXBwb3J0ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTBcbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBEZWZhdWx0cztcblxuZXhwb3J0IGRlZmF1bHQgUG9wcGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9wcGVyLmpzLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcG9wcGVyLmpzL2Rpc3QvZXNtL3BvcHBlci5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4\n");
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzP2VlZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsWUFBWTs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxZQUFZO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQSxnQkFBZ0IsSUFBSTs7QUFFcEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWU7O0FBRWYsU0FBUzs7QUFFVDtBQUNBLFFBQVEsaUNBQWlDO0FBQ3pDLFFBQVEsb0JBQW9CO0FBQzVCLFFBQVEsc0NBQXNDO0FBQzlDLFFBQVE7QUFDUixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYSxFQUFFO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLFVBQVU7QUFDM0Usc0NBQXNDLDJCQUEyQjtBQUNqRTtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxVQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsY0FBYztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFlBQVksdUVBQXVFO0FBQ25GO0FBQ0E7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLFFBQVEsR0FBRztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOzs7O0FBSUE7O0FBRUE7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBOztBQUVBLGNBQWMsU0FBUztBQUN2QjtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsT0FBTztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCLDBCQUEwQix3QkFBd0I7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsY0FBYztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QyxzQ0FBc0M7QUFDOUUsb0NBQW9DLHVDQUF1QztBQUMzRSxvQ0FBb0Msc0NBQXNDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsT0FBTztBQUNQO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXOztBQUVYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEMscUNBQXFDO0FBQ3JDLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7OztBQUtBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsU0FBUztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGFBQWE7QUFDcEMsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsU0FBUztBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsZ0JBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGOztBQUVBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsZ0JBQWdCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXOztBQUVYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBOztBQUVBLGNBQWMsc0JBQXNCO0FBQ3BDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGNBQWM7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1REFBdUQ7QUFDOUU7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxjQUFjO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsK0JBQStCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMscUNBQXFDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUEsU0FBUyw4QkFBOEI7QUFDdkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFlBQVksT0FBTztBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsV0FBVztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7Ozs7QUFJQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLGNBQWMsV0FBVztBQUN4RSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBLHNCQUFzQixjQUFjLHNCQUFzQixnQkFBZ0I7QUFDMUUsZ0JBQWdCLFdBQVcsWUFBWTtBQUN2QyxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixDQUFDOzs7QUFHRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtEQUErRDtBQUMzRTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTzs7QUFFZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQSxVQUFVLE9BQU87QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxRQUFRLE9BQU87QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0JBQWdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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R0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBLGlDQUFpQztBQUNqQztBQUNBOztBQUVBLElBQUk7QUFDSjs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7OztBQUdBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBSztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDs7QUFFQSxXQUFXO0FBQ1gsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLHNCQUFzQjtBQUN0QiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLHlCQUF5QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHFEQUFxRDtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0EsY0FBYyxzREFBc0Q7QUFDcEU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQSxjQUFjLG1DQUFtQztBQUNqRCxlQUFlLDZEQUE2RDtBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTtBQUNGLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUFBO0FBQ0Y7Ozs7O0FBS0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBLENBQUMiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My4zLjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE4LTAxLTIwVDE3OjI0WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7XG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cbiAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcbiAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuICAgICAgLy8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIjtcbiAgfTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBkb2MsIG5vZGUgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblx0XHRcdFx0aWYgKCBub2RlWyBpIF0gKSB7XG5cdFx0XHRcdFx0c2NyaXB0WyBpIF0gPSBub2RlWyBpIF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjMuMVwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG5cdHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSApIHtcblx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBBcnJheS5pc0FycmF5KCBzcmMgKSA/IHNyYyA6IFtdO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy82MTI1XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHRcblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUgKSB7XG5cdFx0RE9NRXZhbCggY29kZSApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy4zXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNi0wOC0wOFxuICovXG4oZnVuY3Rpb24oIHdpbmRvdyApIHtcblxudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaF9uYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXG5cdHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCBcIj1cIiArIHdoaXRlc3BhY2UgKyBcIiooW15cXFxcXSdcXFwiXSo/KVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsIFwiZ1wiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRcdGVzY2FwZWQgOlxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRkaXNhYmxlZEFuY2VzdG9yID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIChcImZvcm1cIiBpbiBlbGVtIHx8IFwibGFiZWxcIiBpbiBlbGVtKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXG5cdFx0XHRcdC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudFxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZVxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PThcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0fSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbaV0gPSBcIiNcIiArIG5pZCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGRpc2FibGVkQW5jZXN0b3IoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHQvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0XG5cdC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKVxuXHR2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblx0cmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gXCJIVE1MXCIgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0aWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXG5cdFx0KHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkge1xuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkXG5cdGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsIFwiPSckMSddXCIgKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IWNvbXBpbGVyQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgaWYgKCBub2RlTmFtZSggZWxlbSwgXCJpZnJhbWVcIiApICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG4gICAgICAgIC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuICAgICAgICAvLyBkb24ndCBzdXBwb3J0IGl0LlxuICAgICAgICBpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSspL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5zID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggY29udGFpbnMgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcbn0gKSgpO1xudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2Uocylcblx0XHRcdFx0Ly8gYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGZvY3VzOiB7XG5cblx0XHRcdC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNpblwiXG5cdFx0fSxcblx0XHRibHVyOiB7XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHtcblx0XHRcdFx0XHR0aGlzLmJsdXIoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNvdXRcIlxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHRcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIHRoaXMuY2xpY2sgJiYgbm9kZU5hbWUoIHRoaXMsIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBkb24ndCBmaXJlIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBldmVudC50YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMzIyOVxuXHRyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopW14+XSopXFwvPi9naSxcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMgKTtcblx0XHRwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XG5cdFx0XHRwZGF0YUN1ci5ldmVudHMgPSB7fTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgZG9jLCBub2RlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIG5vZGUub3duZXJEb2N1bWVudCwgbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICk7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMzYgfHwgXCJhYnNvbHV0ZVwiO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH0sXG5cblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlO1xuXG4vLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBTaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZFxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwcm9wZXJ0eSBtYXBwZWQgYWxvbmcgd2hhdCBqUXVlcnkuY3NzUHJvcHMgc3VnZ2VzdHMgb3IgdG9cbi8vIGEgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5LlxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIHJldCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdO1xuXHRpZiAoICFyZXQgKSB7XG5cdFx0cmV0ID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG5cdH1cblx0cmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblx0XHQpICk7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3g7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcblx0Ly8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2lsZW50bHkgZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZVxuXHR2YWx1ZUlzQm9yZGVyQm94ID0gdmFsdWVJc0JvcmRlckJveCAmJlxuXHRcdCggc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IHZhbCA9PT0gZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gKTtcblxuXHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0aWYgKCB2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSB7XG5cblx0XHR2YWwgPSBlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF07XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgcHJvdmlkZSBib3JkZXItYm94IHZhbHVlc1xuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlO1xuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSAmJiBib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgPT09IHN0eWxlcy5wb3NpdGlvbiApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IERhdGUubm93KCk7XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9IClcblx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApXG5cdFx0Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXHRcdFwidGhyb3dzXCI6IHRydWVcblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKS5wcm9wKCB7XG5cdFx0XHRcdFx0Y2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LFxuXHRcdFx0XHRcdHNyYzogcy51cmxcblx0XHRcdFx0fSApLm9uKFxuXHRcdFx0XHRcdFwibG9hZCBlcnJvclwiLFxuXHRcdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoICFub0dsb2JhbCApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n");
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz8yNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6\n");
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\nvar settle = __webpack_require__(27);\nvar buildURL = __webpack_require__(29);\nvar parseHeaders = __webpack_require__(30);\nvar isURLSameOrigin = __webpack_require__(31);\nvar createError = __webpack_require__(8);\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(32);\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (\"development\" !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = __webpack_require__(33);\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz9lYzZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgYnRvYSA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYnRvYSAmJiB3aW5kb3cuYnRvYS5iaW5kKHdpbmRvdykpIHx8IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idG9hJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIGxvYWRFdmVudCA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xuICAgIHZhciB4RG9tYWluID0gZmFsc2U7XG5cbiAgICAvLyBGb3IgSUUgOC85IENPUlMgc3VwcG9ydFxuICAgIC8vIE9ubHkgc3VwcG9ydHMgUE9TVCBhbmQgR0VUIGNhbGxzIGFuZCBkb2Vzbid0IHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgLy8gRE9OJ1QgZG8gdGhpcyBmb3IgdGVzdGluZyBiL2MgWE1MSHR0cFJlcXVlc3QgaXMgbW9ja2VkLCBub3QgWERvbWFpblJlcXVlc3QuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgd2luZG93LlhEb21haW5SZXF1ZXN0ICYmICEoJ3dpdGhDcmVkZW50aWFscycgaW4gcmVxdWVzdCkgJiZcbiAgICAgICAgIWlzVVJMU2FtZU9yaWdpbihjb25maWcudXJsKSkge1xuICAgICAgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWERvbWFpblJlcXVlc3QoKTtcbiAgICAgIGxvYWRFdmVudCA9ICdvbmxvYWQnO1xuICAgICAgeERvbWFpbiA9IHRydWU7XG4gICAgICByZXF1ZXN0Lm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiBoYW5kbGVQcm9ncmVzcygpIHt9O1xuICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge307XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdFtsb2FkRXZlbnRdID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCB8fCAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0ICYmICF4RG9tYWluKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAvLyBJRSBzZW5kcyAxMjIzIGluc3RlYWQgb2YgMjA0IChodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzIwMSlcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1cyA9PT0gMTIyMyA/ICdObyBDb250ZW50JyA6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgdmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xuXG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oY29uZmlnLnVybCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLndpdGhDcmVkZW50aWFscykge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBFeHBlY3RlZCBET01FeGNlcHRpb24gdGhyb3duIGJ5IGJyb3dzZXJzIG5vdCBjb21wYXRpYmxlIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIuXG4gICAgICAgIC8vIEJ1dCwgdGhpcyBjYW4gYmUgc3VwcHJlc3NlZCBmb3IgJ2pzb24nIHR5cGUgYXMgaXQgY2FuIGJlIHBhcnNlZCBieSBkZWZhdWx0ICd0cmFuc2Zvcm1SZXNwb25zZScgZnVuY3Rpb24uXG4gICAgICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjYW5jZWwpO1xuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7\n");
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar enhanceError = __webpack_require__(28);\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanM/MTZkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8\n");
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9hNDFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzXG4vLyBtb2R1bGUgaWQgPSA5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9\n");
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanM/NzU1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzXG4vLyBtb2R1bGUgaWQgPSAxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10\n");
-
-/***/ }),
-/* 11 */,
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(13);
-__webpack_require__(44);
-module.exports = __webpack_require__(45);
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It is a great starting point when\n * building robust, powerful web applications using Vue and Laravel.\n */\n\nwindow.openpgp = __webpack_require__(14);\nwindow.Vue = __webpack_require__(15);\n__webpack_require__(18);\n__webpack_require__(89);\n__webpack_require__(41);\n__webpack_require__(42);\n__webpack_require__(43);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcz9iMTVmIl0sIm5hbWVzIjpbIndpbmRvdyIsIm9wZW5wZ3AiLCJyZXF1aXJlIiwiVnVlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FBTUFBLE9BQU9DLE9BQVAsR0FBaUIsbUJBQUFDLENBQVEsRUFBUixDQUFqQjtBQUNBRixPQUFPRyxHQUFQLEdBQWEsbUJBQUFELENBQVEsRUFBUixDQUFiO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVI7QUFDQSxtQkFBQUEsQ0FBUSxFQUFSO0FBQ0EsbUJBQUFBLENBQVEsRUFBUjtBQUNBLG1CQUFBQSxDQUFRLEVBQVIiLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpcnN0IHdlIHdpbGwgbG9hZCBhbGwgb2YgdGhpcyBwcm9qZWN0J3MgSmF2YVNjcmlwdCBkZXBlbmRlbmNpZXMgd2hpY2hcbiAqIGluY2x1ZGVzIFZ1ZSBhbmQgb3RoZXIgbGlicmFyaWVzLiBJdCBpcyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IHdoZW5cbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXG4gKi9cblxud2luZG93Lm9wZW5wZ3AgPSByZXF1aXJlKCdvcGVucGdwJyk7XG53aW5kb3cuVnVlID0gcmVxdWlyZSgndnVlJyk7XG5yZXF1aXJlKCcuL2Jvb3RzdHJhcCcpO1xucmVxdWlyZSgnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvanMvYWxsJyk7XG5yZXF1aXJlKCcuL3NldHVwJyk7XG5yZXF1aXJlKCcuL3Byb2ZpbGUnKTtcbnJlcXVpcmUoJy4vY2hhdCcpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9hc3NldHMvanMvYXBwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///13\n");
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/* WEBPACK VAR INJECTION */(function(global) {var require;var require;(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.openpgp = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){\n'use strict';\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ea_lib = _dereq_('email-addresses');\n\nexports.parse = function parse(line, startAt) {\n if (!line) throw 'Nothing to parse';\n\n line = line.trim();\n\n var addr = ea_lib({\n input: line,\n rfc6532: true, // unicode\n partial: false, // return failed parses\n simple: false, // simple AST\n strict: false, // turn off obs- features in the rfc\n rejectTLD: false, // domains require a \".\"\n startAt: startAt || null\n });\n\n if (!addr) throw 'No results';\n\n // console.log(\"Parsed to: \", require('util').inspect(addr, {depth: 10, colors: true}));\n\n return addr.addresses.map(map_addresses);\n};\n\nfunction map_addresses(adr) {\n if (adr.type === 'group') {\n return new Group(adr.name, adr.addresses.map(map_addresses));\n }\n var comments = void 0;\n if (adr.parts.comments) {\n comments = adr.parts.comments.map(function (c) {\n return c.tokens.trim();\n }).join(' ').trim();\n // if (comments.length) {\n // comments = '(' + comments + ')';\n // }\n }\n var l = adr.local;\n if (!adr.name && /:/.test(l)) l = '\"' + l + '\"';\n return new Address(adr.name, l + '@' + adr.domain, comments);\n}\n\nexports.parseFrom = function (line) {\n return exports.parse(line, 'from');\n};\n\nexports.parseSender = function (line) {\n return exports.parse(line, 'sender');\n};\n\nexports.parseReplyTo = function (line) {\n return exports.parse(line, 'reply-to');\n};\n\nvar Group = function () {\n function Group(display_name, addresses) {\n (0, _classCallCheck3.default)(this, Group);\n\n this.phrase = display_name;\n this.addresses = addresses;\n }\n\n (0, _createClass3.default)(Group, [{\n key: 'format',\n value: function format() {\n return this.phrase + \":\" + this.addresses.map(function (a) {\n return a.format();\n }).join(',');\n }\n }, {\n key: 'name',\n value: function name() {\n var phrase = this.phrase;\n\n if (!(phrase && phrase.length)) {\n phrase = this.comment;\n }\n\n var name = _extract_name(phrase);\n return name;\n }\n }]);\n return Group;\n}();\n\nvar Address = function () {\n function Address(phrase, address, comment) {\n (0, _classCallCheck3.default)(this, Address);\n\n this.phrase = phrase || '';\n this.address = address || '';\n this.comment = comment || '';\n }\n\n (0, _createClass3.default)(Address, [{\n key: 'host',\n value: function host() {\n var match = /.*@(.*)$/.exec(this.address);\n if (!match) return null;\n return match[1];\n }\n }, {\n key: 'user',\n value: function user() {\n var match = /^(.*)@/.exec(this.address);\n if (!match) return null;\n return match[1];\n }\n }, {\n key: 'format',\n value: function format() {\n var phrase = this.phrase;\n var email = this.address;\n var comment = this.comment;\n\n var addr = [];\n var atext = new RegExp('^[\\\\-\\\\w !#$%&\\'*+/=?^`{|}~]+$');\n\n if (phrase && phrase.length) {\n addr.push(atext.test(phrase.trim()) ? phrase : _quote_no_esc(phrase) ? phrase : '\"' + phrase + '\"');\n\n if (email && email.length) {\n addr.push(\"<\" + email + \">\");\n }\n } else if (email && email.length) {\n addr.push(email);\n }\n\n if (comment && /\\S/.test(comment)) {\n comment = comment.replace(/^\\s*\\(?/, '(').replace(/\\)?\\s*$/, ')');\n }\n\n if (comment && comment.length) {\n addr.push(comment);\n }\n\n return addr.join(' ');\n }\n }, {\n key: 'name',\n value: function name() {\n var phrase = this.phrase;\n var addr = this.address;\n\n if (!(phrase && phrase.length)) {\n phrase = this.comment;\n }\n\n var name = _extract_name(phrase);\n\n // first.last@domain address\n if (name === '') {\n var match = /([^%.@_]+([._][^%.@_]+)+)[@%]/.exec(addr);\n if (match) {\n name = match[1].replace(/[._]+/g, ' ');\n name = _extract_name(name);\n }\n }\n\n if (name === '' && /\\/g=/i.test(addr)) {\n // X400 style address\n var _match = /\\/g=([^/]*)/i.exec(addr);\n var f = _match[1];\n _match = /\\/s=([^/]*)/i.exec(addr);\n var l = _match[1];\n name = _extract_name(f + \" \" + l);\n }\n\n return name;\n }\n }]);\n return Address;\n}();\n\nexports.Address = Address;\n\n// This is because JS regexps have no equivalent of\n// zero-width negative look-behind assertion for: /(?<!\\\\)\"/\nfunction _quote_no_esc(str) {\n if (/^\"/.test(str)) return true;\n var match = void 0;\n while (match = /^[\\s\\S]*?([\\s\\S])\"/.exec(str)) {\n if (match[1] !== '\\\\') {\n return true;\n }\n str = str.substr(match[0].length);\n }\n return false;\n}\n\nexports.isAllLower = function (string) {\n return string === string.toLowerCase();\n};\n\nexports.isAllUpper = function (string) {\n return string === string.toUpperCase();\n};\n\nexports.nameCase = function (string) {\n\n return string.toLowerCase().replace(/\\b(\\w+)/g, function (_, d1) {\n // Set the case of the name to first char upper rest lower\n return d1.charAt(0).toUpperCase() + d1.slice(1);\n }).replace(/\\bMc(\\w)/gi, function (_, d1) {\n // Scottish names such as 'McLeod'\n return 'Mc' + d1.toUpperCase();\n }).replace(/\\bo'(\\w)/gi, function (_, d1) {\n // Irish names such as 'O'Malley, O'Reilly'\n return 'O\\'' + d1.toUpperCase();\n }).replace(/\\b(x*(ix)?v*(iv)?i*)\\b/ig, function (_, d1) {\n // Roman numerals, eg 'Level III Support'\n return d1.toUpperCase();\n });\n};\n\n// given a comment, attempt to extract a person's name\nfunction _extract_name(name) {\n // Using encodings, too hard. See Mail::Message::Field::Full.\n if (/=?.*?\\?=/.test(name)) return '';\n\n // trim whitespace\n name = name.trim();\n name = name.replace(/\\s+/, ' ');\n\n // Disregard numeric names (e.g. 123456.1234@compuserve.com)\n if (/^[\\d ]+$/.test(name)) return '';\n\n name = name.replace(/^\\((.*)\\)$/, '$1') // remove outermost parenthesis\n .replace(/^\"(.*)\"$/, '$1') // remove outer quotation marks\n .replace(/\\(.*?\\)/g, '') // remove minimal embedded comments\n .replace(/\\\\/g, '') // remove all escapes\n .replace(/^\"(.*)\"$/, '$1') // remove internal quotation marks\n .replace(/^([^\\s]+) ?, ?(.*)$/, '$2 $1') // reverse \"Last, First M.\" if applicable\n .replace(/,.*/, '');\n\n // Change casing only when the name contains only upper or only\n // lower cased characters.\n if (exports.isAllUpper(name) || exports.isAllLower(name)) {\n // console.log(\"Changing case of: \" + name);\n name = exports.nameCase(name);\n // console.log(\"Now: \" + name);\n }\n\n // some cleanup\n name = name.replace(/\\[[^\\]]*\\]/g, '').replace(/(^[\\s'\"]+|[\\s'\"]+$)/g, '').replace(/\\s{2,}/g, ' ');\n\n return name;\n}\n\n},{\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"email-addresses\":283}],2:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * @file {@link http://asmjs.org Asm.js} implementation of the {@link https://en.wikipedia.org/wiki/Advanced_Encryption_Standard Advanced Encryption Standard}.\n * @author Artem S Vybornov <vybornov@gmail.com>\n * @license MIT\n */\nvar AES_asm = exports.AES_asm = function () {\n \"use strict\";\n\n /**\n * Galois Field stuff init flag\n */\n\n var ginit_done = false;\n\n /**\n * Galois Field exponentiation and logarithm tables for 3 (the generator)\n */\n var gexp3, glog3;\n\n /**\n * Init Galois Field tables\n */\n function ginit() {\n gexp3 = [], glog3 = [];\n\n var a = 1,\n c,\n d;\n for (c = 0; c < 255; c++) {\n gexp3[c] = a;\n\n // Multiply by three\n d = a & 0x80, a <<= 1, a &= 255;\n if (d === 0x80) a ^= 0x1b;\n a ^= gexp3[c];\n\n // Set the log table value\n glog3[gexp3[c]] = c;\n }\n gexp3[255] = gexp3[0];\n glog3[0] = 0;\n\n ginit_done = true;\n }\n\n /**\n * Galois Field multiplication\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\n function gmul(a, b) {\n var c = gexp3[(glog3[a] + glog3[b]) % 255];\n if (a === 0 || b === 0) c = 0;\n return c;\n }\n\n /**\n * Galois Field reciprocal\n * @param {number} a\n * @return {number}\n */\n function ginv(a) {\n var i = gexp3[255 - glog3[a]];\n if (a === 0) i = 0;\n return i;\n }\n\n /**\n * AES stuff init flag\n */\n var aes_init_done = false;\n\n /**\n * Encryption, Decryption, S-Box and KeyTransform tables\n *\n * @type {number[]}\n */\n var aes_sbox;\n\n /**\n * @type {number[]}\n */\n var aes_sinv;\n\n /**\n * @type {number[][]}\n */\n var aes_enc;\n\n /**\n * @type {number[][]}\n */\n var aes_dec;\n\n /**\n * Init AES tables\n */\n function aes_init() {\n if (!ginit_done) ginit();\n\n // Calculates AES S-Box value\n function _s(a) {\n var c, s, x;\n s = x = ginv(a);\n for (c = 0; c < 4; c++) {\n s = (s << 1 | s >>> 7) & 255;\n x ^= s;\n }\n x ^= 99;\n return x;\n }\n\n // Tables\n aes_sbox = [], aes_sinv = [], aes_enc = [[], [], [], []], aes_dec = [[], [], [], []];\n\n for (var i = 0; i < 256; i++) {\n var s = _s(i);\n\n // S-Box and its inverse\n aes_sbox[i] = s;\n aes_sinv[s] = i;\n\n // Ecryption and Decryption tables\n aes_enc[0][i] = gmul(2, s) << 24 | s << 16 | s << 8 | gmul(3, s);\n aes_dec[0][s] = gmul(14, i) << 24 | gmul(9, i) << 16 | gmul(13, i) << 8 | gmul(11, i);\n // Rotate tables\n for (var t = 1; t < 4; t++) {\n aes_enc[t][i] = aes_enc[t - 1][i] >>> 8 | aes_enc[t - 1][i] << 24;\n aes_dec[t][s] = aes_dec[t - 1][s] >>> 8 | aes_dec[t - 1][s] << 24;\n }\n }\n }\n\n /**\n * Asm.js module constructor.\n *\n * <p>\n * Heap buffer layout by offset:\n * <pre>\n * 0x0000 encryption key schedule\n * 0x0400 decryption key schedule\n * 0x0800 sbox\n * 0x0c00 inv sbox\n * 0x1000 encryption tables\n * 0x2000 decryption tables\n * 0x3000 reserved (future GCM multiplication lookup table)\n * 0x4000 data\n * </pre>\n * Don't touch anything before <code>0x400</code>.\n * </p>\n *\n * @alias AES_asm\n * @class\n * @param {Object} foreign - <i>ignored</i>\n * @param {ArrayBuffer} buffer - heap buffer to link with\n */\n var wrapper = function wrapper(foreign, buffer) {\n // Init AES stuff for the first time\n if (!aes_init_done) aes_init();\n\n // Fill up AES tables\n var heap = new Uint32Array(buffer);\n heap.set(aes_sbox, 0x0800 >> 2);\n heap.set(aes_sinv, 0x0c00 >> 2);\n for (var i = 0; i < 4; i++) {\n heap.set(aes_enc[i], 0x1000 + 0x400 * i >> 2);\n heap.set(aes_dec[i], 0x2000 + 0x400 * i >> 2);\n }\n\n /**\n * Calculate AES key schedules.\n * @instance\n * @memberof AES_asm\n * @param {number} ks - key size, 4/6/8 (for 128/192/256-bit key correspondingly)\n * @param {number} k0 - key vector components\n * @param {number} k1 - key vector components\n * @param {number} k2 - key vector components\n * @param {number} k3 - key vector components\n * @param {number} k4 - key vector components\n * @param {number} k5 - key vector components\n * @param {number} k6 - key vector components\n * @param {number} k7 - key vector components\n */\n function set_key(ks, k0, k1, k2, k3, k4, k5, k6, k7) {\n var ekeys = heap.subarray(0x000, 60),\n dkeys = heap.subarray(0x100, 0x100 + 60);\n\n // Encryption key schedule\n ekeys.set([k0, k1, k2, k3, k4, k5, k6, k7]);\n for (var i = ks, rcon = 1; i < 4 * ks + 28; i++) {\n var k = ekeys[i - 1];\n if (i % ks === 0 || ks === 8 && i % ks === 4) {\n k = aes_sbox[k >>> 24] << 24 ^ aes_sbox[k >>> 16 & 255] << 16 ^ aes_sbox[k >>> 8 & 255] << 8 ^ aes_sbox[k & 255];\n }\n if (i % ks === 0) {\n k = k << 8 ^ k >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon & 0x80 ? 0x1b : 0);\n }\n ekeys[i] = ekeys[i - ks] ^ k;\n }\n\n // Decryption key schedule\n for (var j = 0; j < i; j += 4) {\n for (var jj = 0; jj < 4; jj++) {\n var k = ekeys[i - (4 + j) + (4 - jj) % 4];\n if (j < 4 || j >= i - 4) {\n dkeys[j + jj] = k;\n } else {\n dkeys[j + jj] = aes_dec[0][aes_sbox[k >>> 24]] ^ aes_dec[1][aes_sbox[k >>> 16 & 255]] ^ aes_dec[2][aes_sbox[k >>> 8 & 255]] ^ aes_dec[3][aes_sbox[k & 255]];\n }\n }\n }\n\n // Set rounds number\n asm.set_rounds(ks + 5);\n }\n\n // create library object with necessary properties\n var stdlib = { Uint8Array: Uint8Array, Uint32Array: Uint32Array };\n\n var asm = function (stdlib, foreign, buffer) {\n \"use asm\";\n\n var S0 = 0,\n S1 = 0,\n S2 = 0,\n S3 = 0,\n I0 = 0,\n I1 = 0,\n I2 = 0,\n I3 = 0,\n N0 = 0,\n N1 = 0,\n N2 = 0,\n N3 = 0,\n M0 = 0,\n M1 = 0,\n M2 = 0,\n M3 = 0,\n H0 = 0,\n H1 = 0,\n H2 = 0,\n H3 = 0,\n R = 0;\n\n var HEAP = new stdlib.Uint32Array(buffer),\n DATA = new stdlib.Uint8Array(buffer);\n\n /**\n * AES core\n * @param {number} k - precomputed key schedule offset\n * @param {number} s - precomputed sbox table offset\n * @param {number} t - precomputed round table offset\n * @param {number} r - number of inner rounds to perform\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _core(k, s, t, r, x0, x1, x2, x3) {\n k = k | 0;\n s = s | 0;\n t = t | 0;\n r = r | 0;\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t1 = 0,\n t2 = 0,\n t3 = 0,\n y0 = 0,\n y1 = 0,\n y2 = 0,\n y3 = 0,\n i = 0;\n\n t1 = t | 0x400, t2 = t | 0x800, t3 = t | 0xc00;\n\n // round 0\n x0 = x0 ^ HEAP[(k | 0) >> 2], x1 = x1 ^ HEAP[(k | 4) >> 2], x2 = x2 ^ HEAP[(k | 8) >> 2], x3 = x3 ^ HEAP[(k | 12) >> 2];\n\n // round 1..r\n for (i = 16; (i | 0) <= r << 4; i = i + 16 | 0) {\n y0 = HEAP[(t | x0 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x1 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x2 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x3 << 2 & 1020) >> 2] ^ HEAP[(k | i | 0) >> 2], y1 = HEAP[(t | x1 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x2 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x3 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x0 << 2 & 1020) >> 2] ^ HEAP[(k | i | 4) >> 2], y2 = HEAP[(t | x2 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x3 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x0 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x1 << 2 & 1020) >> 2] ^ HEAP[(k | i | 8) >> 2], y3 = HEAP[(t | x3 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x0 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x1 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x2 << 2 & 1020) >> 2] ^ HEAP[(k | i | 12) >> 2];\n x0 = y0, x1 = y1, x2 = y2, x3 = y3;\n }\n\n // final round\n S0 = HEAP[(s | x0 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x1 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x2 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x3 << 2 & 1020) >> 2] ^ HEAP[(k | i | 0) >> 2], S1 = HEAP[(s | x1 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x2 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x3 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x0 << 2 & 1020) >> 2] ^ HEAP[(k | i | 4) >> 2], S2 = HEAP[(s | x2 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x3 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x0 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x1 << 2 & 1020) >> 2] ^ HEAP[(k | i | 8) >> 2], S3 = HEAP[(s | x3 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x0 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x1 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x2 << 2 & 1020) >> 2] ^ HEAP[(k | i | 12) >> 2];\n }\n\n /**\n * ECB mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ecb_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, x0, x1, x2, x3);\n }\n\n /**\n * ECB mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ecb_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t = 0;\n\n _core(0x0400, 0x0c00, 0x2000, R, x0, x3, x2, x1);\n\n t = S1, S1 = S3, S3 = t;\n }\n\n /**\n * CBC mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cbc_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0 ^ x0, I1 ^ x1, I2 ^ x2, I3 ^ x3);\n\n I0 = S0, I1 = S1, I2 = S2, I3 = S3;\n }\n\n /**\n * CBC mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cbc_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t = 0;\n\n _core(0x0400, 0x0c00, 0x2000, R, x0, x3, x2, x1);\n\n t = S1, S1 = S3, S3 = t;\n\n S0 = S0 ^ I0, S1 = S1 ^ I1, S2 = S2 ^ I2, S3 = S3 ^ I3;\n\n I0 = x0, I1 = x1, I2 = x2, I3 = x3;\n }\n\n /**\n * CFB mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cfb_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0, I1, I2, I3);\n\n I0 = S0 = S0 ^ x0, I1 = S1 = S1 ^ x1, I2 = S2 = S2 ^ x2, I3 = S3 = S3 ^ x3;\n }\n\n /**\n * CFB mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cfb_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0, I1, I2, I3);\n\n S0 = S0 ^ x0, S1 = S1 ^ x1, S2 = S2 ^ x2, S3 = S3 ^ x3;\n\n I0 = x0, I1 = x1, I2 = x2, I3 = x3;\n }\n\n /**\n * OFB mode encryption / decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ofb(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0, I1, I2, I3);\n\n I0 = S0, I1 = S1, I2 = S2, I3 = S3;\n\n S0 = S0 ^ x0, S1 = S1 ^ x1, S2 = S2 ^ x2, S3 = S3 ^ x3;\n }\n\n /**\n * CTR mode encryption / decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ctr(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, N0, N1, N2, N3);\n\n N3 = ~M3 & N3 | M3 & N3 + 1;\n N2 = ~M2 & N2 | M2 & N2 + ((N3 | 0) == 0);\n N1 = ~M1 & N1 | M1 & N1 + ((N2 | 0) == 0);\n N0 = ~M0 & N0 | M0 & N0 + ((N1 | 0) == 0);\n\n S0 = S0 ^ x0;\n S1 = S1 ^ x1;\n S2 = S2 ^ x2;\n S3 = S3 ^ x3;\n }\n\n /**\n * GCM mode MAC calculation\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _gcm_mac(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var y0 = 0,\n y1 = 0,\n y2 = 0,\n y3 = 0,\n z0 = 0,\n z1 = 0,\n z2 = 0,\n z3 = 0,\n i = 0,\n c = 0;\n\n x0 = x0 ^ I0, x1 = x1 ^ I1, x2 = x2 ^ I2, x3 = x3 ^ I3;\n\n y0 = H0 | 0, y1 = H1 | 0, y2 = H2 | 0, y3 = H3 | 0;\n\n for (; (i | 0) < 128; i = i + 1 | 0) {\n if (y0 >>> 31) {\n z0 = z0 ^ x0, z1 = z1 ^ x1, z2 = z2 ^ x2, z3 = z3 ^ x3;\n }\n\n y0 = y0 << 1 | y1 >>> 31, y1 = y1 << 1 | y2 >>> 31, y2 = y2 << 1 | y3 >>> 31, y3 = y3 << 1;\n\n c = x3 & 1;\n\n x3 = x3 >>> 1 | x2 << 31, x2 = x2 >>> 1 | x1 << 31, x1 = x1 >>> 1 | x0 << 31, x0 = x0 >>> 1;\n\n if (c) x0 = x0 ^ 0xe1000000;\n }\n\n I0 = z0, I1 = z1, I2 = z2, I3 = z3;\n }\n\n /**\n * Set the internal rounds number.\n * @instance\n * @memberof AES_asm\n * @param {number} r - number if inner AES rounds\n */\n function set_rounds(r) {\n r = r | 0;\n R = r;\n }\n\n /**\n * Populate the internal state of the module.\n * @instance\n * @memberof AES_asm\n * @param {number} s0 - state vector\n * @param {number} s1 - state vector\n * @param {number} s2 - state vector\n * @param {number} s3 - state vector\n */\n function set_state(s0, s1, s2, s3) {\n s0 = s0 | 0;\n s1 = s1 | 0;\n s2 = s2 | 0;\n s3 = s3 | 0;\n\n S0 = s0, S1 = s1, S2 = s2, S3 = s3;\n }\n\n /**\n * Populate the internal iv of the module.\n * @instance\n * @memberof AES_asm\n * @param {number} i0 - iv vector\n * @param {number} i1 - iv vector\n * @param {number} i2 - iv vector\n * @param {number} i3 - iv vector\n */\n function set_iv(i0, i1, i2, i3) {\n i0 = i0 | 0;\n i1 = i1 | 0;\n i2 = i2 | 0;\n i3 = i3 | 0;\n\n I0 = i0, I1 = i1, I2 = i2, I3 = i3;\n }\n\n /**\n * Set nonce for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} n0 - nonce vector\n * @param {number} n1 - nonce vector\n * @param {number} n2 - nonce vector\n * @param {number} n3 - nonce vector\n */\n function set_nonce(n0, n1, n2, n3) {\n n0 = n0 | 0;\n n1 = n1 | 0;\n n2 = n2 | 0;\n n3 = n3 | 0;\n\n N0 = n0, N1 = n1, N2 = n2, N3 = n3;\n }\n\n /**\n * Set counter mask for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} m0 - counter mask vector\n * @param {number} m1 - counter mask vector\n * @param {number} m2 - counter mask vector\n * @param {number} m3 - counter mask vector\n */\n function set_mask(m0, m1, m2, m3) {\n m0 = m0 | 0;\n m1 = m1 | 0;\n m2 = m2 | 0;\n m3 = m3 | 0;\n\n M0 = m0, M1 = m1, M2 = m2, M3 = m3;\n }\n\n /**\n * Set counter for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} c0 - counter vector\n * @param {number} c1 - counter vector\n * @param {number} c2 - counter vector\n * @param {number} c3 - counter vector\n */\n function set_counter(c0, c1, c2, c3) {\n c0 = c0 | 0;\n c1 = c1 | 0;\n c2 = c2 | 0;\n c3 = c3 | 0;\n\n N3 = ~M3 & N3 | M3 & c3, N2 = ~M2 & N2 | M2 & c2, N1 = ~M1 & N1 | M1 & c1, N0 = ~M0 & N0 | M0 & c0;\n }\n\n /**\n * Store the internal state vector into the heap.\n * @instance\n * @memberof AES_asm\n * @param {number} pos - offset where to put the data\n * @return {number} The number of bytes have been written into the heap, always 16.\n */\n function get_state(pos) {\n pos = pos | 0;\n\n if (pos & 15) return -1;\n\n DATA[pos | 0] = S0 >>> 24, DATA[pos | 1] = S0 >>> 16 & 255, DATA[pos | 2] = S0 >>> 8 & 255, DATA[pos | 3] = S0 & 255, DATA[pos | 4] = S1 >>> 24, DATA[pos | 5] = S1 >>> 16 & 255, DATA[pos | 6] = S1 >>> 8 & 255, DATA[pos | 7] = S1 & 255, DATA[pos | 8] = S2 >>> 24, DATA[pos | 9] = S2 >>> 16 & 255, DATA[pos | 10] = S2 >>> 8 & 255, DATA[pos | 11] = S2 & 255, DATA[pos | 12] = S3 >>> 24, DATA[pos | 13] = S3 >>> 16 & 255, DATA[pos | 14] = S3 >>> 8 & 255, DATA[pos | 15] = S3 & 255;\n\n return 16;\n }\n\n /**\n * Store the internal iv vector into the heap.\n * @instance\n * @memberof AES_asm\n * @param {number} pos - offset where to put the data\n * @return {number} The number of bytes have been written into the heap, always 16.\n */\n function get_iv(pos) {\n pos = pos | 0;\n\n if (pos & 15) return -1;\n\n DATA[pos | 0] = I0 >>> 24, DATA[pos | 1] = I0 >>> 16 & 255, DATA[pos | 2] = I0 >>> 8 & 255, DATA[pos | 3] = I0 & 255, DATA[pos | 4] = I1 >>> 24, DATA[pos | 5] = I1 >>> 16 & 255, DATA[pos | 6] = I1 >>> 8 & 255, DATA[pos | 7] = I1 & 255, DATA[pos | 8] = I2 >>> 24, DATA[pos | 9] = I2 >>> 16 & 255, DATA[pos | 10] = I2 >>> 8 & 255, DATA[pos | 11] = I2 & 255, DATA[pos | 12] = I3 >>> 24, DATA[pos | 13] = I3 >>> 16 & 255, DATA[pos | 14] = I3 >>> 8 & 255, DATA[pos | 15] = I3 & 255;\n\n return 16;\n }\n\n /**\n * GCM initialization.\n * @instance\n * @memberof AES_asm\n */\n function gcm_init() {\n _ecb_enc(0, 0, 0, 0);\n H0 = S0, H1 = S1, H2 = S2, H3 = S3;\n }\n\n /**\n * Perform ciphering operation on the supplied data.\n * @instance\n * @memberof AES_asm\n * @param {number} mode - block cipher mode (see {@link AES_asm} mode constants)\n * @param {number} pos - offset of the data being processed\n * @param {number} len - length of the data being processed\n * @return {number} Actual amount of data have been processed.\n */\n function cipher(mode, pos, len) {\n mode = mode | 0;\n pos = pos | 0;\n len = len | 0;\n\n var ret = 0;\n\n if (pos & 15) return -1;\n\n while ((len | 0) >= 16) {\n _cipher_modes[mode & 7](DATA[pos | 0] << 24 | DATA[pos | 1] << 16 | DATA[pos | 2] << 8 | DATA[pos | 3], DATA[pos | 4] << 24 | DATA[pos | 5] << 16 | DATA[pos | 6] << 8 | DATA[pos | 7], DATA[pos | 8] << 24 | DATA[pos | 9] << 16 | DATA[pos | 10] << 8 | DATA[pos | 11], DATA[pos | 12] << 24 | DATA[pos | 13] << 16 | DATA[pos | 14] << 8 | DATA[pos | 15]);\n\n DATA[pos | 0] = S0 >>> 24, DATA[pos | 1] = S0 >>> 16 & 255, DATA[pos | 2] = S0 >>> 8 & 255, DATA[pos | 3] = S0 & 255, DATA[pos | 4] = S1 >>> 24, DATA[pos | 5] = S1 >>> 16 & 255, DATA[pos | 6] = S1 >>> 8 & 255, DATA[pos | 7] = S1 & 255, DATA[pos | 8] = S2 >>> 24, DATA[pos | 9] = S2 >>> 16 & 255, DATA[pos | 10] = S2 >>> 8 & 255, DATA[pos | 11] = S2 & 255, DATA[pos | 12] = S3 >>> 24, DATA[pos | 13] = S3 >>> 16 & 255, DATA[pos | 14] = S3 >>> 8 & 255, DATA[pos | 15] = S3 & 255;\n\n ret = ret + 16 | 0, pos = pos + 16 | 0, len = len - 16 | 0;\n }\n\n return ret | 0;\n }\n\n /**\n * Calculates MAC of the supplied data.\n * @instance\n * @memberof AES_asm\n * @param {number} mode - block cipher mode (see {@link AES_asm} mode constants)\n * @param {number} pos - offset of the data being processed\n * @param {number} len - length of the data being processed\n * @return {number} Actual amount of data have been processed.\n */\n function mac(mode, pos, len) {\n mode = mode | 0;\n pos = pos | 0;\n len = len | 0;\n\n var ret = 0;\n\n if (pos & 15) return -1;\n\n while ((len | 0) >= 16) {\n _mac_modes[mode & 1](DATA[pos | 0] << 24 | DATA[pos | 1] << 16 | DATA[pos | 2] << 8 | DATA[pos | 3], DATA[pos | 4] << 24 | DATA[pos | 5] << 16 | DATA[pos | 6] << 8 | DATA[pos | 7], DATA[pos | 8] << 24 | DATA[pos | 9] << 16 | DATA[pos | 10] << 8 | DATA[pos | 11], DATA[pos | 12] << 24 | DATA[pos | 13] << 16 | DATA[pos | 14] << 8 | DATA[pos | 15]);\n\n ret = ret + 16 | 0, pos = pos + 16 | 0, len = len - 16 | 0;\n }\n\n return ret | 0;\n }\n\n /**\n * AES cipher modes table (virual methods)\n */\n var _cipher_modes = [_ecb_enc, _ecb_dec, _cbc_enc, _cbc_dec, _cfb_enc, _cfb_dec, _ofb, _ctr];\n\n /**\n * AES MAC modes table (virual methods)\n */\n var _mac_modes = [_cbc_enc, _gcm_mac];\n\n /**\n * Asm.js module exports\n */\n return {\n set_rounds: set_rounds,\n set_state: set_state,\n set_iv: set_iv,\n set_nonce: set_nonce,\n set_mask: set_mask,\n set_counter: set_counter,\n get_state: get_state,\n get_iv: get_iv,\n gcm_init: gcm_init,\n cipher: cipher,\n mac: mac\n };\n }(stdlib, foreign, buffer);\n\n asm.set_key = set_key;\n\n return asm;\n };\n\n /**\n * AES enciphering mode constants\n * @enum {number}\n * @const\n */\n wrapper.ENC = {\n ECB: 0,\n CBC: 2,\n CFB: 4,\n OFB: 6,\n CTR: 7\n },\n\n /**\n * AES deciphering mode constants\n * @enum {number}\n * @const\n */\n wrapper.DEC = {\n ECB: 1,\n CBC: 3,\n CFB: 5,\n OFB: 6,\n CTR: 7\n },\n\n /**\n * AES MAC mode constants\n * @enum {number}\n * @const\n */\n wrapper.MAC = {\n CBC: 0,\n GCM: 1\n };\n\n /**\n * Heap data offset\n * @type {number}\n * @const\n */\n wrapper.HEAP_DATA = 0x4000;\n\n return wrapper;\n}();\n\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES = undefined;\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _aes = _dereq_('./aes.asm');\n\nvar _utils = _dereq_('../utils');\n\nvar _errors = _dereq_('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES = exports.AES = function () {\n function AES(key, iv, padding, heap, asm) {\n (0, _classCallCheck3.default)(this, AES);\n\n this.nonce = null;\n this.counter = 0;\n this.counterSize = 0;\n\n this.heap = (0, _utils._heap_init)(Uint8Array, heap).subarray(_aes.AES_asm.HEAP_DATA);\n this.asm = asm || (0, _aes.AES_asm)(null, this.heap.buffer);\n this.mode = null;\n this.key = null;\n\n this.AES_reset(key, iv, padding);\n }\n\n /**\n * @param {Uint8Array} key\n */\n\n\n (0, _createClass3.default)(AES, [{\n key: 'AES_set_key',\n value: function AES_set_key(key) {\n if (key !== undefined) {\n if (!(0, _utils.is_bytes)(key)) {\n throw new TypeError('unexpected key type');\n }\n\n var keylen = key.length;\n if (keylen !== 16 && keylen !== 24 && keylen !== 32) throw new _errors.IllegalArgumentError('illegal key size');\n\n var keyview = new DataView(key.buffer, key.byteOffset, key.byteLength);\n this.asm.set_key(keylen >> 2, keyview.getUint32(0), keyview.getUint32(4), keyview.getUint32(8), keyview.getUint32(12), keylen > 16 ? keyview.getUint32(16) : 0, keylen > 16 ? keyview.getUint32(20) : 0, keylen > 24 ? keyview.getUint32(24) : 0, keylen > 24 ? keyview.getUint32(28) : 0);\n\n this.key = key;\n } else if (!this.key) {\n throw new Error('key is required');\n }\n }\n\n /**\n * This should be mixin instead of inheritance\n *\n * @param {Uint8Array} nonce\n * @param {number} [counter]\n * @param {number} [size]\n */\n\n }, {\n key: 'AES_CTR_set_options',\n value: function AES_CTR_set_options(nonce, counter, size) {\n if (size !== undefined) {\n if (size < 8 || size > 48) throw new _errors.IllegalArgumentError('illegal counter size');\n\n this.counterSize = size;\n\n var mask = Math.pow(2, size) - 1;\n this.asm.set_mask(0, 0, mask / 0x100000000 | 0, mask | 0);\n } else {\n this.counterSize = size = 48;\n this.asm.set_mask(0, 0, 0xffff, 0xffffffff);\n }\n\n if (nonce !== undefined) {\n if (!(0, _utils.is_bytes)(nonce)) {\n throw new TypeError('unexpected nonce type');\n }\n\n var len = nonce.length;\n if (!len || len > 16) throw new _errors.IllegalArgumentError('illegal nonce size');\n\n this.nonce = nonce;\n\n var view = new DataView(new ArrayBuffer(16));\n new Uint8Array(view.buffer).set(nonce);\n\n this.asm.set_nonce(view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12));\n } else {\n throw new Error('nonce is required');\n }\n\n if (counter !== undefined) {\n if (!(0, _utils.is_number)(counter)) throw new TypeError('unexpected counter type');\n\n if (counter < 0 || counter >= Math.pow(2, size)) throw new _errors.IllegalArgumentError('illegal counter value');\n\n this.counter = counter;\n\n this.asm.set_counter(0, 0, counter / 0x100000000 | 0, counter | 0);\n } else {\n this.counter = 0;\n }\n }\n\n /**\n * @param {Uint8Array} iv\n */\n\n }, {\n key: 'AES_set_iv',\n value: function AES_set_iv(iv) {\n if (iv !== undefined) {\n if (!(0, _utils.is_bytes)(iv)) {\n throw new TypeError('unexpected iv type');\n }\n\n if (iv.length !== 16) throw new _errors.IllegalArgumentError('illegal iv size');\n\n var ivview = new DataView(iv.buffer, iv.byteOffset, iv.byteLength);\n\n this.iv = iv;\n this.asm.set_iv(ivview.getUint32(0), ivview.getUint32(4), ivview.getUint32(8), ivview.getUint32(12));\n } else {\n this.iv = null;\n this.asm.set_iv(0, 0, 0, 0);\n }\n }\n\n /**\n * @param {boolean} padding\n */\n\n }, {\n key: 'AES_set_padding',\n value: function AES_set_padding(padding) {\n if (padding !== undefined) {\n this.padding = !!padding;\n } else {\n this.padding = true;\n }\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {boolean} [padding]\n */\n\n }, {\n key: 'AES_reset',\n value: function AES_reset(key, iv, padding) {\n this.result = null;\n this.pos = 0;\n this.len = 0;\n\n this.AES_set_key(key);\n this.AES_set_iv(iv);\n this.AES_set_padding(padding);\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Encrypt_process',\n value: function AES_Encrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.ENC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n dpos = 0,\n dlen = data.length || 0,\n rpos = 0,\n rlen = len + dlen & -16,\n wlen = 0;\n\n var result = new Uint8Array(rlen);\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.cipher(amode, hpos + pos, len);\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n rpos += wlen;\n\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n } else {\n pos = 0;\n len = 0;\n }\n }\n\n this.result = result;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Encrypt_finish',\n value: function AES_Encrypt_finish(data) {\n var presult = null,\n prlen = 0;\n\n if (data !== undefined) {\n presult = this.AES_Encrypt_process(data).result;\n prlen = presult.length;\n }\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.ENC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n plen = 16 - len % 16,\n rlen = len;\n\n if (this.hasOwnProperty('padding')) {\n if (this.padding) {\n for (var p = 0; p < plen; ++p) {\n heap[pos + len + p] = plen;\n }len += plen;\n rlen = len;\n } else if (len % 16) {\n throw new _errors.IllegalArgumentError('data length must be a multiple of the block size');\n }\n } else {\n len += plen;\n }\n\n var result = new Uint8Array(prlen + rlen);\n\n if (prlen) result.set(presult);\n\n if (len) asm.cipher(amode, hpos + pos, len);\n\n if (rlen) result.set(heap.subarray(pos, pos + rlen), prlen);\n\n this.result = result;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Decrypt_process',\n value: function AES_Decrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.DEC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n dpos = 0,\n dlen = data.length || 0,\n rpos = 0,\n rlen = len + dlen & -16,\n plen = 0,\n wlen = 0;\n\n if (this.padding) {\n plen = len + dlen - rlen || 16;\n rlen -= plen;\n }\n\n var result = new Uint8Array(rlen);\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.cipher(amode, hpos + pos, len - (!dlen ? plen : 0));\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n rpos += wlen;\n\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n } else {\n pos = 0;\n len = 0;\n }\n }\n\n this.result = result;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Decrypt_finish',\n value: function AES_Decrypt_finish(data) {\n var presult = null,\n prlen = 0;\n\n if (data !== undefined) {\n presult = this.AES_Decrypt_process(data).result;\n prlen = presult.length;\n }\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.DEC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n rlen = len;\n\n if (len > 0) {\n if (len % 16) {\n if (this.hasOwnProperty('padding')) {\n throw new _errors.IllegalArgumentError('data length must be a multiple of the block size');\n } else {\n len += 16 - len % 16;\n }\n }\n\n asm.cipher(amode, hpos + pos, len);\n\n if (this.hasOwnProperty('padding') && this.padding) {\n var pad = heap[pos + rlen - 1];\n if (pad < 1 || pad > 16 || pad > rlen) throw new _errors.SecurityError('bad padding');\n\n var pcheck = 0;\n for (var i = pad; i > 1; i--) {\n pcheck |= pad ^ heap[pos + rlen - i];\n }if (pcheck) throw new _errors.SecurityError('bad padding');\n\n rlen -= pad;\n }\n }\n\n var result = new Uint8Array(prlen + rlen);\n\n if (prlen > 0) {\n result.set(presult);\n }\n\n if (rlen > 0) {\n result.set(heap.subarray(pos, pos + rlen), prlen);\n }\n\n this.result = result;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n }]);\n return AES;\n}();\n\n},{\"../errors\":14,\"../utils\":19,\"./aes.asm\":2,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37}],4:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CBC_Decrypt = exports.AES_CBC_Encrypt = exports.AES_CBC = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES_CBC = exports.AES_CBC = function (_AES) {\n (0, _inherits3.default)(AES_CBC, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {boolean} [padding=true]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CBC(key) {\n var iv = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var heap = arguments[3];\n var asm = arguments[4];\n (0, _classCallCheck3.default)(this, AES_CBC);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_CBC.__proto__ || (0, _getPrototypeOf2.default)(AES_CBC)).call(this, key, iv, padding, heap, asm));\n\n _this.mode = 'CBC';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n (0, _createClass3.default)(AES_CBC, [{\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CBC;\n}(_aes.AES); /**\n * Cipher Block Chaining Mode (CBC)\n */\n\n\nvar AES_CBC_Encrypt = exports.AES_CBC_Encrypt = function (_AES_CBC) {\n (0, _inherits3.default)(AES_CBC_Encrypt, _AES_CBC);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {boolean} [padding=true]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CBC_Encrypt(key, iv, padding, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CBC_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CBC_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CBC_Encrypt)).call(this, key, iv, padding, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_CBC_Encrypt}\n */\n\n\n (0, _createClass3.default)(AES_CBC_Encrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Encrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Encrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CBC_Encrypt;\n}(AES_CBC);\n\nvar AES_CBC_Decrypt = exports.AES_CBC_Decrypt = function (_AES_CBC2) {\n (0, _inherits3.default)(AES_CBC_Decrypt, _AES_CBC2);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {boolean} [padding=true]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CBC_Decrypt(key, iv, padding, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CBC_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CBC_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CBC_Decrypt)).call(this, key, iv, padding, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_CBC_Decrypt}\n */\n\n\n (0, _createClass3.default)(AES_CBC_Decrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Decrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Decrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Decrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CBC_Decrypt;\n}(AES_CBC);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],5:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CBC_Decrypt = exports.AES_CBC_Encrypt = exports.AES_CBC = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _cbc = _dereq_('./cbc');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {boolean} [padding]\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\nfunction AES_CBC_encrypt_bytes(data, key, padding, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cbc.AES_CBC(key, iv, padding, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {boolean} [padding]\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\nfunction AES_CBC_decrypt_bytes(data, key, padding, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cbc.AES_CBC(key, iv, padding, _exports._AES_heap_instance, _exports._AES_asm_instance).decrypt(data).result;\n}\n\n_cbc.AES_CBC.encrypt = AES_CBC_encrypt_bytes;\n_cbc.AES_CBC.decrypt = AES_CBC_decrypt_bytes;\n\nexports.AES_CBC = _cbc.AES_CBC;\nexports.AES_CBC_Encrypt = _cbc.AES_CBC_Encrypt;\nexports.AES_CBC_Decrypt = _cbc.AES_CBC_Decrypt;\n\n},{\"../exports\":11,\"./cbc\":4}],6:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CFB_Decrypt = exports.AES_CFB_Encrypt = exports.AES_CFB = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES_CFB = exports.AES_CFB = function (_AES) {\n (0, _inherits3.default)(AES_CFB, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CFB(key, iv, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CFB);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_CFB.__proto__ || (0, _getPrototypeOf2.default)(AES_CFB)).call(this, key, iv, true, heap, asm));\n\n delete _this.padding;\n\n _this.mode = 'CFB';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n (0, _createClass3.default)(AES_CFB, [{\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CFB;\n}(_aes.AES); /**\n * Cipher Feedback Mode (CFB)\n */\n\nvar AES_CFB_Encrypt = exports.AES_CFB_Encrypt = function (_AES_CFB) {\n (0, _inherits3.default)(AES_CFB_Encrypt, _AES_CFB);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CFB_Encrypt(key, iv, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CFB_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CFB_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CFB_Encrypt)).call(this, key, iv, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {boolean} [padding]\n * @returns {AES_CFB_Encrypt}\n */\n\n\n (0, _createClass3.default)(AES_CFB_Encrypt, [{\n key: 'reset',\n value: function reset(key, iv, padding) {\n return this.AES_reset(key, iv, padding);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Encrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Encrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CFB_Encrypt;\n}(AES_CFB);\n\nvar AES_CFB_Decrypt = exports.AES_CFB_Decrypt = function (_AES_CFB2) {\n (0, _inherits3.default)(AES_CFB_Decrypt, _AES_CFB2);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CFB_Decrypt(key, iv, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CFB_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CFB_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CFB_Decrypt)).call(this, key, iv, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {boolean} [padding]\n * @returns {AES_CFB_Decrypt}\n */\n\n\n (0, _createClass3.default)(AES_CFB_Decrypt, [{\n key: 'reset',\n value: function reset(key, iv, padding) {\n return this.AES_reset(key, iv, padding);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Decrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Decrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Decrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CFB_Decrypt;\n}(AES_CFB);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],7:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CFB_Decrypt = exports.AES_CFB_Encrypt = exports.AES_CFB = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _cfb = _dereq_('./cfb');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\n/**\n * AES-CFB exports\n */\n\nfunction AES_CFB_encrypt_bytes(data, key, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cfb.AES_CFB(key, iv, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\nfunction AES_CFB_decrypt_bytes(data, key, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cfb.AES_CFB(key, iv, _exports._AES_heap_instance, _exports._AES_asm_instance).decrypt(data).result;\n}\n\n_cfb.AES_CFB.encrypt = AES_CFB_encrypt_bytes;\n_cfb.AES_CFB.decrypt = AES_CFB_decrypt_bytes;\n\nexports.AES_CFB = _cfb.AES_CFB;\nexports.AES_CFB_Encrypt = _cfb.AES_CFB_Encrypt;\nexports.AES_CFB_Decrypt = _cfb.AES_CFB_Decrypt;\n\n},{\"../exports\":11,\"./cfb\":6}],8:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CTR_Crypt = exports.AES_CTR = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES_CTR = exports.AES_CTR = function (_AES) {\n (0, _inherits3.default)(AES_CTR, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CTR(key, nonce, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CTR);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_CTR.__proto__ || (0, _getPrototypeOf2.default)(AES_CTR)).call(this, key, undefined, undefined, heap, asm));\n\n _this.reset(key, nonce);\n\n _this.AES_CTR_set_options(nonce);\n delete _this.padding;\n\n _this.mode = 'CTR';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {number} [counter]\n * @param {number} [counterSize]\n * @returns {AES_CTR}\n */\n\n\n (0, _createClass3.default)(AES_CTR, [{\n key: 'reset',\n value: function reset(key, nonce, counter, counterSize) {\n this.AES_reset(key, undefined, undefined);\n\n this.AES_CTR_set_options(nonce, counter, counterSize);\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR}\n */\n\n }, {\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR}\n */\n\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CTR;\n}(_aes.AES); /**\n * Counter Mode (CTR)\n */\n\nvar AES_CTR_Crypt = exports.AES_CTR_Crypt = function (_AES_CTR) {\n (0, _inherits3.default)(AES_CTR_Crypt, _AES_CTR);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CTR_Crypt(key, nonce, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CTR_Crypt);\n\n var _this2 = (0, _possibleConstructorReturn3.default)(this, (AES_CTR_Crypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CTR_Crypt)).call(this, key, nonce, heap, asm));\n\n _this2.BLOCK_SIZE = 16;\n return _this2;\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {number} [counter]\n * @param {number} [counterSize]\n * @returns {AES_CTR_Crypt}\n */\n\n\n (0, _createClass3.default)(AES_CTR_Crypt, [{\n key: 'reset',\n value: function reset(key, nonce, counter, counterSize) {\n this.AES_reset(key, undefined, undefined);\n\n this.AES_CTR_set_options(nonce, counter, counterSize);\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR_Crypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR_Crypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CTR_Crypt;\n}(AES_CTR);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],9:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CTR = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _ctr = _dereq_('./ctr');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @returns {Uint8Array}\n */\n/**\n * AES-CTR exports\n */\n\nfunction AES_CTR_crypt_bytes(data, key, nonce) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n if (nonce === undefined) throw new SyntaxError('nonce required');\n return new _ctr.AES_CTR(key, nonce, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n_ctr.AES_CTR.encrypt = AES_CTR_crypt_bytes;\n_ctr.AES_CTR.decrypt = AES_CTR_crypt_bytes;\n\nexports.AES_CTR = _ctr.AES_CTR;\n\n},{\"../exports\":11,\"./ctr\":8}],10:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_ECB_Decrypt = exports.AES_ECB_Encrypt = exports.AES_ECB = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Electronic Code Book Mode (ECB)\n */\nvar AES_ECB = exports.AES_ECB = function (_AES) {\n (0, _inherits3.default)(AES_ECB, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_ECB(key, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_ECB);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_ECB.__proto__ || (0, _getPrototypeOf2.default)(AES_ECB)).call(this, key, undefined, false, heap, asm));\n\n _this.mode = 'ECB';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n (0, _createClass3.default)(AES_ECB, [{\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_ECB;\n}(_aes.AES);\n\nvar AES_ECB_Encrypt = exports.AES_ECB_Encrypt = function (_AES_ECB) {\n (0, _inherits3.default)(AES_ECB_Encrypt, _AES_ECB);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_ECB_Encrypt(key, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_ECB_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_ECB_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_ECB_Encrypt)).call(this, key, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_ECB_Encrypt}\n */\n\n\n (0, _createClass3.default)(AES_ECB_Encrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Encrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Encrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_ECB_Encrypt;\n}(AES_ECB);\n\nvar AES_ECB_Decrypt = exports.AES_ECB_Decrypt = function (_AES_ECB2) {\n (0, _inherits3.default)(AES_ECB_Decrypt, _AES_ECB2);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_ECB_Decrypt(key, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_ECB_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_ECB_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_ECB_Decrypt)).call(this, key, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_ECB_Decrypt}\n */\n\n\n (0, _createClass3.default)(AES_ECB_Decrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Decrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Decrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Decrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_ECB_Decrypt;\n}(AES_ECB);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],11:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports._AES_asm_instance = exports._AES_heap_instance = undefined;\n\nvar _aes = _dereq_('./aes.asm');\n\nvar _AES_heap_instance = exports._AES_heap_instance = new Uint8Array(0x100000); // 1MB\n// shared asm.js module and heap\nvar _AES_asm_instance = exports._AES_asm_instance = (0, _aes.AES_asm)(null, _AES_heap_instance.buffer);\n\n},{\"./aes.asm\":2}],12:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_GCM_Decrypt = exports.AES_GCM_Encrypt = exports.AES_GCM = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _gcm = _dereq_('./gcm');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [adata]\n * @param {number} [tagSize]\n * @return {Uint8Array}\n */\n/**\n * AES-GCM exports\n */\n\nfunction AES_GCM_encrypt_bytes(data, key, nonce, adata, tagSize) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n if (nonce === undefined) throw new SyntaxError('nonce required');\n return new _gcm.AES_GCM(key, nonce, adata, tagSize, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [adata]\n * @param {number} [tagSize]\n * @return {Uint8Array}\n */\nfunction AES_GCM_decrypt_bytes(data, key, nonce, adata, tagSize) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n if (nonce === undefined) throw new SyntaxError('nonce required');\n return new _gcm.AES_GCM(key, nonce, adata, tagSize, _exports._AES_heap_instance, _exports._AES_asm_instance).decrypt(data).result;\n}\n\n_gcm.AES_GCM.encrypt = AES_GCM_encrypt_bytes;\n_gcm.AES_GCM.decrypt = AES_GCM_decrypt_bytes;\n\nexports.AES_GCM = _gcm.AES_GCM;\nexports.AES_GCM_Encrypt = _gcm.AES_GCM_Encrypt;\nexports.AES_GCM_Decrypt = _gcm.AES_GCM_Decrypt;\n\n},{\"../exports\":11,\"./gcm\":13}],13:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_GCM_Decrypt = exports.AES_GCM_Encrypt = exports.AES_GCM = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _errors = _dereq_('../../errors');\n\nvar _utils = _dereq_('../../utils');\n\nvar _aes = _dereq_('../aes');\n\nvar _aes2 = _dereq_('../aes.asm');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Galois/Counter mode\n */\n\nvar _AES_GCM_data_maxLength = 68719476704; // 2^36 - 2^5\n\nvar AES_GCM = exports.AES_GCM = function (_AES) {\n (0, _inherits3.default)(AES_GCM, _AES);\n\n function AES_GCM(key, nonce, adata, tagSize, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_GCM);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_GCM.__proto__ || (0, _getPrototypeOf2.default)(AES_GCM)).call(this, key, undefined, false, heap, asm));\n\n _this.nonce = null;\n _this.adata = null;\n _this.iv = null;\n _this.counter = 1;\n _this.tagSize = 16;\n _this.mode = 'GCM';\n _this.BLOCK_SIZE = 16;\n\n _this.reset(key, tagSize, nonce, adata);\n return _this;\n }\n\n (0, _createClass3.default)(AES_GCM, [{\n key: 'reset',\n value: function reset(key, tagSize, nonce, adata) {\n return this.AES_GCM_reset(key, tagSize, nonce, adata);\n }\n }, {\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_GCM_encrypt(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_GCM_decrypt(data);\n }\n }, {\n key: 'AES_GCM_Encrypt_process',\n value: function AES_GCM_Encrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var dpos = 0,\n dlen = data.length || 0,\n asm = this.asm,\n heap = this.heap,\n counter = this.counter,\n pos = this.pos,\n len = this.len,\n rpos = 0,\n rlen = len + dlen & -16,\n wlen = 0;\n\n if ((counter - 1 << 4) + len + dlen > _AES_GCM_data_maxLength) throw new RangeError('counter overflow');\n\n var result = new Uint8Array(rlen);\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA + pos, len);\n wlen = asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, wlen);\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n counter += wlen >>> 4;\n rpos += wlen;\n\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n } else {\n pos = 0;\n len = 0;\n }\n }\n\n this.result = result;\n this.counter = counter;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n }, {\n key: 'AES_GCM_Encrypt_finish',\n value: function AES_GCM_Encrypt_finish() {\n var asm = this.asm,\n heap = this.heap,\n counter = this.counter,\n tagSize = this.tagSize,\n adata = this.adata,\n pos = this.pos,\n len = this.len;\n\n var result = new Uint8Array(len + tagSize);\n\n asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA + pos, len + 15 & -16);\n if (len) result.set(heap.subarray(pos, pos + len));\n\n for (var i = len; i & 15; i++) {\n heap[pos + i] = 0;\n }asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, i);\n\n var alen = adata !== null ? adata.length : 0,\n clen = (counter - 1 << 4) + len;\n heap[0] = heap[1] = heap[2] = 0, heap[3] = alen >>> 29, heap[4] = alen >>> 21, heap[5] = alen >>> 13 & 255, heap[6] = alen >>> 5 & 255, heap[7] = alen << 3 & 255, heap[8] = heap[9] = heap[10] = 0, heap[11] = clen >>> 29, heap[12] = clen >>> 21 & 255, heap[13] = clen >>> 13 & 255, heap[14] = clen >>> 5 & 255, heap[15] = clen << 3 & 255;\n asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, 16);\n asm.get_iv(_aes2.AES_asm.HEAP_DATA);\n\n asm.set_counter(0, 0, 0, this.gamma0);\n asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA, 16);\n result.set(heap.subarray(0, tagSize), len);\n\n this.result = result;\n this.counter = 1;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n }, {\n key: 'AES_GCM_Decrypt_process',\n value: function AES_GCM_Decrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var dpos = 0,\n dlen = data.length || 0,\n asm = this.asm,\n heap = this.heap,\n counter = this.counter,\n tagSize = this.tagSize,\n pos = this.pos,\n len = this.len,\n rpos = 0,\n rlen = len + dlen > tagSize ? len + dlen - tagSize & -16 : 0,\n tlen = len + dlen - rlen,\n wlen = 0;\n\n if ((counter - 1 << 4) + len + dlen > _AES_GCM_data_maxLength) throw new RangeError('counter overflow');\n\n var result = new Uint8Array(rlen);\n\n while (dlen > tlen) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen - tlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, wlen);\n wlen = asm.cipher(_aes2.AES_asm.DEC.CTR, _aes2.AES_asm.HEAP_DATA + pos, wlen);\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n counter += wlen >>> 4;\n rpos += wlen;\n\n pos = 0;\n len = 0;\n }\n\n if (dlen > 0) {\n len += (0, _utils._heap_write)(heap, 0, data, dpos, dlen);\n }\n\n this.result = result;\n this.counter = counter;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n }, {\n key: 'AES_GCM_Decrypt_finish',\n value: function AES_GCM_Decrypt_finish() {\n var asm = this.asm,\n heap = this.heap,\n tagSize = this.tagSize,\n adata = this.adata,\n counter = this.counter,\n pos = this.pos,\n len = this.len,\n rlen = len - tagSize,\n wlen = 0;\n\n if (len < tagSize) throw new _errors.IllegalStateError('authentication tag not found');\n\n var result = new Uint8Array(rlen),\n atag = new Uint8Array(heap.subarray(pos + rlen, pos + len));\n\n for (var i = rlen; i & 15; i++) {\n heap[pos + i] = 0;\n }wlen = asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, i);\n wlen = asm.cipher(_aes2.AES_asm.DEC.CTR, _aes2.AES_asm.HEAP_DATA + pos, i);\n if (rlen) result.set(heap.subarray(pos, pos + rlen));\n\n var alen = adata !== null ? adata.length : 0,\n clen = (counter - 1 << 4) + len - tagSize;\n heap[0] = heap[1] = heap[2] = 0, heap[3] = alen >>> 29, heap[4] = alen >>> 21, heap[5] = alen >>> 13 & 255, heap[6] = alen >>> 5 & 255, heap[7] = alen << 3 & 255, heap[8] = heap[9] = heap[10] = 0, heap[11] = clen >>> 29, heap[12] = clen >>> 21 & 255, heap[13] = clen >>> 13 & 255, heap[14] = clen >>> 5 & 255, heap[15] = clen << 3 & 255;\n asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, 16);\n asm.get_iv(_aes2.AES_asm.HEAP_DATA);\n\n asm.set_counter(0, 0, 0, this.gamma0);\n asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA, 16);\n\n var acheck = 0;\n for (var i = 0; i < tagSize; ++i) {\n acheck |= atag[i] ^ heap[i];\n }if (acheck) throw new _errors.SecurityError('data integrity check failed');\n\n this.result = result;\n this.counter = 1;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n }, {\n key: 'AES_GCM_decrypt',\n value: function AES_GCM_decrypt(data) {\n var result1 = this.AES_GCM_Decrypt_process(data).result;\n var result2 = this.AES_GCM_Decrypt_finish().result;\n\n var result = new Uint8Array(result1.length + result2.length);\n if (result1.length) result.set(result1);\n if (result2.length) result.set(result2, result1.length);\n this.result = result;\n\n return this;\n }\n }, {\n key: 'AES_GCM_encrypt',\n value: function AES_GCM_encrypt(data) {\n var result1 = this.AES_GCM_Encrypt_process(data).result;\n var result2 = this.AES_GCM_Encrypt_finish().result;\n\n var result = new Uint8Array(result1.length + result2.length);\n if (result1.length) result.set(result1);\n if (result2.length) result.set(result2, result1.length);\n this.result = result;\n\n return this;\n }\n }, {\n key: 'AES_GCM_reset',\n value: function AES_GCM_reset(key, tagSize, nonce, adata, counter, iv) {\n this.AES_reset(key, undefined, false);\n\n var asm = this.asm;\n var heap = this.heap;\n\n asm.gcm_init();\n\n var tagSize = tagSize;\n if (tagSize !== undefined) {\n if (!(0, _utils.is_number)(tagSize)) throw new TypeError('tagSize must be a number');\n\n if (tagSize < 4 || tagSize > 16) throw new _errors.IllegalArgumentError('illegal tagSize value');\n\n this.tagSize = tagSize;\n } else {\n this.tagSize = 16;\n }\n\n if (nonce !== undefined) {\n if (!(0, _utils.is_bytes)(nonce)) {\n throw new TypeError('unexpected nonce type');\n }\n\n this.nonce = nonce;\n\n var noncelen = nonce.length || 0,\n noncebuf = new Uint8Array(16);\n if (noncelen !== 12) {\n this._gcm_mac_process(nonce);\n\n heap[0] = heap[1] = heap[2] = heap[3] = heap[4] = heap[5] = heap[6] = heap[7] = heap[8] = heap[9] = heap[10] = 0, heap[11] = noncelen >>> 29, heap[12] = noncelen >>> 21 & 255, heap[13] = noncelen >>> 13 & 255, heap[14] = noncelen >>> 5 & 255, heap[15] = noncelen << 3 & 255;\n asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, 16);\n\n asm.get_iv(_aes2.AES_asm.HEAP_DATA);\n asm.set_iv();\n\n noncebuf.set(heap.subarray(0, 16));\n } else {\n noncebuf.set(nonce);\n noncebuf[15] = 1;\n }\n\n var nonceview = new DataView(noncebuf.buffer);\n this.gamma0 = nonceview.getUint32(12);\n\n asm.set_nonce(nonceview.getUint32(0), nonceview.getUint32(4), nonceview.getUint32(8), 0);\n asm.set_mask(0, 0, 0, 0xffffffff);\n } else {\n throw new Error('nonce is required');\n }\n\n if (adata !== undefined && adata !== null) {\n if (!(0, _utils.is_bytes)(adata)) {\n throw new TypeError('unexpected adata type');\n }\n\n if (adata.length > _AES_GCM_data_maxLength) throw new _errors.IllegalArgumentError('illegal adata length');\n\n if (adata.length) {\n this.adata = adata;\n this._gcm_mac_process(adata);\n } else {\n this.adata = null;\n }\n } else {\n this.adata = null;\n }\n\n if (counter !== undefined) {\n if (!(0, _utils.is_number)(counter)) throw new TypeError('counter must be a number');\n\n if (counter < 1 || counter > 0xffffffff) throw new RangeError('counter must be a positive 32-bit integer');\n\n this.counter = counter;\n asm.set_counter(0, 0, 0, this.gamma0 + counter | 0);\n } else {\n this.counter = 1;\n asm.set_counter(0, 0, 0, this.gamma0 + 1 | 0);\n }\n\n if (iv !== undefined) {\n if (!(0, _utils.is_number)(iv)) throw new TypeError('iv must be a number');\n\n this.iv = iv;\n\n this.AES_set_iv(iv);\n }\n\n return this;\n }\n }, {\n key: '_gcm_mac_process',\n value: function _gcm_mac_process(data) {\n var heap = this.heap,\n asm = this.asm,\n dpos = 0,\n dlen = data.length || 0,\n wlen = 0;\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, 0, data, dpos, dlen);\n dpos += wlen;\n dlen -= wlen;\n\n while (wlen & 15) {\n heap[wlen++] = 0;\n }asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, wlen);\n }\n }\n }]);\n return AES_GCM;\n}(_aes.AES);\n\nvar AES_GCM_Encrypt = exports.AES_GCM_Encrypt = function (_AES_GCM) {\n (0, _inherits3.default)(AES_GCM_Encrypt, _AES_GCM);\n\n function AES_GCM_Encrypt(key, nonce, adata, tagSize, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_GCM_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_GCM_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_GCM_Encrypt)).call(this, key, nonce, adata, tagSize, heap, asm));\n }\n\n (0, _createClass3.default)(AES_GCM_Encrypt, [{\n key: 'process',\n value: function process(data) {\n return this.AES_GCM_Encrypt_process(data);\n }\n }, {\n key: 'finish',\n value: function finish() {\n return this.AES_GCM_Encrypt_finish();\n }\n }]);\n return AES_GCM_Encrypt;\n}(AES_GCM);\n\nvar AES_GCM_Decrypt = exports.AES_GCM_Decrypt = function (_AES_GCM2) {\n (0, _inherits3.default)(AES_GCM_Decrypt, _AES_GCM2);\n\n function AES_GCM_Decrypt(key, nonce, adata, tagSize, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_GCM_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_GCM_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_GCM_Decrypt)).call(this, key, nonce, adata, tagSize, heap, asm));\n }\n\n (0, _createClass3.default)(AES_GCM_Decrypt, [{\n key: 'process',\n value: function process(data) {\n return this.AES_GCM_Decrypt_process(data);\n }\n }, {\n key: 'finish',\n value: function finish() {\n return this.AES_GCM_Decrypt_finish();\n }\n }]);\n return AES_GCM_Decrypt;\n}(AES_GCM);\n\n},{\"../../errors\":14,\"../../utils\":19,\"../aes\":3,\"../aes.asm\":2,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],14:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _create = _dereq_('babel-runtime/core-js/object/create');\n\nvar _create2 = _interopRequireDefault(_create);\n\nexports.IllegalStateError = IllegalStateError;\nexports.IllegalArgumentError = IllegalArgumentError;\nexports.SecurityError = SecurityError;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction IllegalStateError() {\n var err = Error.apply(this, arguments);\n this.message = err.message, this.stack = err.stack;\n}\nIllegalStateError.prototype = (0, _create2.default)(Error.prototype, { name: { value: 'IllegalStateError' } });\n\nfunction IllegalArgumentError() {\n var err = Error.apply(this, arguments);\n this.message = err.message, this.stack = err.stack;\n}\nIllegalArgumentError.prototype = (0, _create2.default)(Error.prototype, { name: { value: 'IllegalArgumentError' } });\n\nfunction SecurityError() {\n var err = Error.apply(this, arguments);\n this.message = err.message, this.stack = err.stack;\n}\nSecurityError.prototype = (0, _create2.default)(Error.prototype, { name: { value: 'SecurityError' } });\n\n},{\"babel-runtime/core-js/object/create\":25}],15:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hash_reset = hash_reset;\nexports.hash_process = hash_process;\nexports.hash_finish = hash_finish;\n\nvar _utils = _dereq_('../utils');\n\nvar _errors = _dereq_('../errors');\n\nfunction hash_reset() {\n this.result = null;\n this.pos = 0;\n this.len = 0;\n\n this.asm.reset();\n\n return this;\n}\n\nfunction hash_process(data) {\n if (this.result !== null) throw new _errors.IllegalStateError('state must be reset before processing new data');\n\n if ((0, _utils.is_string)(data)) data = (0, _utils.string_to_bytes)(data);\n\n if ((0, _utils.is_buffer)(data)) data = new Uint8Array(data);\n\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var asm = this.asm,\n heap = this.heap,\n hpos = this.pos,\n hlen = this.len,\n dpos = 0,\n dlen = data.length,\n wlen = 0;\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, hpos + hlen, data, dpos, dlen);\n hlen += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.process(hpos, hlen);\n\n hpos += wlen;\n hlen -= wlen;\n\n if (!hlen) hpos = 0;\n }\n\n this.pos = hpos;\n this.len = hlen;\n\n return this;\n}\n\nfunction hash_finish() {\n if (this.result !== null) throw new _errors.IllegalStateError('state must be reset before processing new data');\n\n this.asm.finish(this.pos, this.len, 0);\n\n this.result = new Uint8Array(this.HASH_SIZE);\n this.result.set(this.heap.subarray(0, this.HASH_SIZE));\n\n this.pos = 0;\n this.len = 0;\n\n return this;\n}\n\n},{\"../errors\":14,\"../utils\":19}],16:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SHA256 = undefined;\n\nvar _sha = _dereq_('./sha256');\n\nvar _utils = _dereq_('../../utils');\n\n/**\n * SHA256 exports\n */\n\nfunction sha256_bytes(data) {\n if (data === undefined) throw new SyntaxError('data required');\n return (0, _sha.get_sha256_instance)().reset().process(data).finish().result;\n}\n\nfunction sha256_hex(data) {\n var result = sha256_bytes(data);\n return (0, _utils.bytes_to_hex)(result);\n}\n\nfunction sha256_base64(data) {\n var result = sha256_bytes(data);\n return (0, _utils.bytes_to_base64)(result);\n}\n\nvar SHA256 = exports.SHA256 = _sha.sha256_constructor;\nSHA256.bytes = sha256_bytes;\nSHA256.hex = sha256_hex;\nSHA256.base64 = sha256_base64;\n\n},{\"../../utils\":19,\"./sha256\":18}],17:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.sha256_asm = sha256_asm;\nfunction sha256_asm(stdlib, foreign, buffer) {\n \"use asm\";\n\n // SHA256 state\n\n var H0 = 0,\n H1 = 0,\n H2 = 0,\n H3 = 0,\n H4 = 0,\n H5 = 0,\n H6 = 0,\n H7 = 0,\n TOTAL0 = 0,\n TOTAL1 = 0;\n\n // HMAC state\n var I0 = 0,\n I1 = 0,\n I2 = 0,\n I3 = 0,\n I4 = 0,\n I5 = 0,\n I6 = 0,\n I7 = 0,\n O0 = 0,\n O1 = 0,\n O2 = 0,\n O3 = 0,\n O4 = 0,\n O5 = 0,\n O6 = 0,\n O7 = 0;\n\n // I/O buffer\n var HEAP = new stdlib.Uint8Array(buffer);\n\n function _core(w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15) {\n w0 = w0 | 0;\n w1 = w1 | 0;\n w2 = w2 | 0;\n w3 = w3 | 0;\n w4 = w4 | 0;\n w5 = w5 | 0;\n w6 = w6 | 0;\n w7 = w7 | 0;\n w8 = w8 | 0;\n w9 = w9 | 0;\n w10 = w10 | 0;\n w11 = w11 | 0;\n w12 = w12 | 0;\n w13 = w13 | 0;\n w14 = w14 | 0;\n w15 = w15 | 0;\n\n var a = 0,\n b = 0,\n c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n\n a = H0;\n b = H1;\n c = H2;\n d = H3;\n e = H4;\n f = H5;\n g = H6;\n h = H7;\n\n // 0\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x428a2f98 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 1\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x71374491 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 2\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0xb5c0fbcf | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 3\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0xe9b5dba5 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 4\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x3956c25b | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 5\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x59f111f1 | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 6\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x923f82a4 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 7\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0xab1c5ed5 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 8\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0xd807aa98 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 9\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x12835b01 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 10\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x243185be | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 11\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x550c7dc3 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 12\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x72be5d74 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 13\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x80deb1fe | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 14\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x9bdc06a7 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 15\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0xc19bf174 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 16\n w0 = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0xe49b69c1 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 17\n w1 = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0xefbe4786 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 18\n w2 = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x0fc19dc6 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 19\n w3 = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x240ca1cc | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 20\n w4 = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x2de92c6f | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 21\n w5 = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x4a7484aa | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 22\n w6 = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x5cb0a9dc | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 23\n w7 = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x76f988da | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 24\n w8 = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x983e5152 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 25\n w9 = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0xa831c66d | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 26\n w10 = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0xb00327c8 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 27\n w11 = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0xbf597fc7 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 28\n w12 = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0xc6e00bf3 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 29\n w13 = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0xd5a79147 | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 30\n w14 = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x06ca6351 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 31\n w15 = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x14292967 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 32\n w0 = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x27b70a85 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 33\n w1 = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x2e1b2138 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 34\n w2 = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x4d2c6dfc | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 35\n w3 = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x53380d13 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 36\n w4 = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x650a7354 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 37\n w5 = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x766a0abb | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 38\n w6 = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x81c2c92e | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 39\n w7 = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x92722c85 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 40\n w8 = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0xa2bfe8a1 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 41\n w9 = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0xa81a664b | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 42\n w10 = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0xc24b8b70 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 43\n w11 = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0xc76c51a3 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 44\n w12 = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0xd192e819 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 45\n w13 = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0xd6990624 | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 46\n w14 = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0xf40e3585 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 47\n w15 = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x106aa070 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 48\n w0 = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x19a4c116 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 49\n w1 = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x1e376c08 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 50\n w2 = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x2748774c | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 51\n w3 = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x34b0bcb5 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 52\n w4 = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x391c0cb3 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 53\n w5 = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x4ed8aa4a | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 54\n w6 = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x5b9cca4f | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 55\n w7 = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x682e6ff3 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 56\n w8 = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x748f82ee | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 57\n w9 = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x78a5636f | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 58\n w10 = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x84c87814 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 59\n w11 = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x8cc70208 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 60\n w12 = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x90befffa | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 61\n w13 = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0xa4506ceb | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 62\n w14 = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0xbef9a3f7 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 63\n w15 = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0xc67178f2 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n H0 = H0 + a | 0;\n H1 = H1 + b | 0;\n H2 = H2 + c | 0;\n H3 = H3 + d | 0;\n H4 = H4 + e | 0;\n H5 = H5 + f | 0;\n H6 = H6 + g | 0;\n H7 = H7 + h | 0;\n }\n\n function _core_heap(offset) {\n offset = offset | 0;\n\n _core(HEAP[offset | 0] << 24 | HEAP[offset | 1] << 16 | HEAP[offset | 2] << 8 | HEAP[offset | 3], HEAP[offset | 4] << 24 | HEAP[offset | 5] << 16 | HEAP[offset | 6] << 8 | HEAP[offset | 7], HEAP[offset | 8] << 24 | HEAP[offset | 9] << 16 | HEAP[offset | 10] << 8 | HEAP[offset | 11], HEAP[offset | 12] << 24 | HEAP[offset | 13] << 16 | HEAP[offset | 14] << 8 | HEAP[offset | 15], HEAP[offset | 16] << 24 | HEAP[offset | 17] << 16 | HEAP[offset | 18] << 8 | HEAP[offset | 19], HEAP[offset | 20] << 24 | HEAP[offset | 21] << 16 | HEAP[offset | 22] << 8 | HEAP[offset | 23], HEAP[offset | 24] << 24 | HEAP[offset | 25] << 16 | HEAP[offset | 26] << 8 | HEAP[offset | 27], HEAP[offset | 28] << 24 | HEAP[offset | 29] << 16 | HEAP[offset | 30] << 8 | HEAP[offset | 31], HEAP[offset | 32] << 24 | HEAP[offset | 33] << 16 | HEAP[offset | 34] << 8 | HEAP[offset | 35], HEAP[offset | 36] << 24 | HEAP[offset | 37] << 16 | HEAP[offset | 38] << 8 | HEAP[offset | 39], HEAP[offset | 40] << 24 | HEAP[offset | 41] << 16 | HEAP[offset | 42] << 8 | HEAP[offset | 43], HEAP[offset | 44] << 24 | HEAP[offset | 45] << 16 | HEAP[offset | 46] << 8 | HEAP[offset | 47], HEAP[offset | 48] << 24 | HEAP[offset | 49] << 16 | HEAP[offset | 50] << 8 | HEAP[offset | 51], HEAP[offset | 52] << 24 | HEAP[offset | 53] << 16 | HEAP[offset | 54] << 8 | HEAP[offset | 55], HEAP[offset | 56] << 24 | HEAP[offset | 57] << 16 | HEAP[offset | 58] << 8 | HEAP[offset | 59], HEAP[offset | 60] << 24 | HEAP[offset | 61] << 16 | HEAP[offset | 62] << 8 | HEAP[offset | 63]);\n }\n\n // offset — multiple of 32\n function _state_to_heap(output) {\n output = output | 0;\n\n HEAP[output | 0] = H0 >>> 24;\n HEAP[output | 1] = H0 >>> 16 & 255;\n HEAP[output | 2] = H0 >>> 8 & 255;\n HEAP[output | 3] = H0 & 255;\n HEAP[output | 4] = H1 >>> 24;\n HEAP[output | 5] = H1 >>> 16 & 255;\n HEAP[output | 6] = H1 >>> 8 & 255;\n HEAP[output | 7] = H1 & 255;\n HEAP[output | 8] = H2 >>> 24;\n HEAP[output | 9] = H2 >>> 16 & 255;\n HEAP[output | 10] = H2 >>> 8 & 255;\n HEAP[output | 11] = H2 & 255;\n HEAP[output | 12] = H3 >>> 24;\n HEAP[output | 13] = H3 >>> 16 & 255;\n HEAP[output | 14] = H3 >>> 8 & 255;\n HEAP[output | 15] = H3 & 255;\n HEAP[output | 16] = H4 >>> 24;\n HEAP[output | 17] = H4 >>> 16 & 255;\n HEAP[output | 18] = H4 >>> 8 & 255;\n HEAP[output | 19] = H4 & 255;\n HEAP[output | 20] = H5 >>> 24;\n HEAP[output | 21] = H5 >>> 16 & 255;\n HEAP[output | 22] = H5 >>> 8 & 255;\n HEAP[output | 23] = H5 & 255;\n HEAP[output | 24] = H6 >>> 24;\n HEAP[output | 25] = H6 >>> 16 & 255;\n HEAP[output | 26] = H6 >>> 8 & 255;\n HEAP[output | 27] = H6 & 255;\n HEAP[output | 28] = H7 >>> 24;\n HEAP[output | 29] = H7 >>> 16 & 255;\n HEAP[output | 30] = H7 >>> 8 & 255;\n HEAP[output | 31] = H7 & 255;\n }\n\n function reset() {\n H0 = 0x6a09e667;\n H1 = 0xbb67ae85;\n H2 = 0x3c6ef372;\n H3 = 0xa54ff53a;\n H4 = 0x510e527f;\n H5 = 0x9b05688c;\n H6 = 0x1f83d9ab;\n H7 = 0x5be0cd19;\n TOTAL0 = TOTAL1 = 0;\n }\n\n function init(h0, h1, h2, h3, h4, h5, h6, h7, total0, total1) {\n h0 = h0 | 0;\n h1 = h1 | 0;\n h2 = h2 | 0;\n h3 = h3 | 0;\n h4 = h4 | 0;\n h5 = h5 | 0;\n h6 = h6 | 0;\n h7 = h7 | 0;\n total0 = total0 | 0;\n total1 = total1 | 0;\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n H5 = h5;\n H6 = h6;\n H7 = h7;\n TOTAL0 = total0;\n TOTAL1 = total1;\n }\n\n // offset — multiple of 64\n function process(offset, length) {\n offset = offset | 0;\n length = length | 0;\n\n var hashed = 0;\n\n if (offset & 63) return -1;\n\n while ((length | 0) >= 64) {\n _core_heap(offset);\n\n offset = offset + 64 | 0;\n length = length - 64 | 0;\n\n hashed = hashed + 64 | 0;\n }\n\n TOTAL0 = TOTAL0 + hashed | 0;\n if (TOTAL0 >>> 0 < hashed >>> 0) TOTAL1 = TOTAL1 + 1 | 0;\n\n return hashed | 0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function finish(offset, length, output) {\n offset = offset | 0;\n length = length | 0;\n output = output | 0;\n\n var hashed = 0,\n i = 0;\n\n if (offset & 63) return -1;\n\n if (~output) if (output & 31) return -1;\n\n if ((length | 0) >= 64) {\n hashed = process(offset, length) | 0;\n if ((hashed | 0) == -1) return -1;\n\n offset = offset + hashed | 0;\n length = length - hashed | 0;\n }\n\n hashed = hashed + length | 0;\n TOTAL0 = TOTAL0 + length | 0;\n if (TOTAL0 >>> 0 < length >>> 0) TOTAL1 = TOTAL1 + 1 | 0;\n\n HEAP[offset | length] = 0x80;\n\n if ((length | 0) >= 56) {\n for (i = length + 1 | 0; (i | 0) < 64; i = i + 1 | 0) {\n HEAP[offset | i] = 0x00;\n }_core_heap(offset);\n\n length = 0;\n\n HEAP[offset | 0] = 0;\n }\n\n for (i = length + 1 | 0; (i | 0) < 59; i = i + 1 | 0) {\n HEAP[offset | i] = 0;\n }HEAP[offset | 56] = TOTAL1 >>> 21 & 255;\n HEAP[offset | 57] = TOTAL1 >>> 13 & 255;\n HEAP[offset | 58] = TOTAL1 >>> 5 & 255;\n HEAP[offset | 59] = TOTAL1 << 3 & 255 | TOTAL0 >>> 29;\n HEAP[offset | 60] = TOTAL0 >>> 21 & 255;\n HEAP[offset | 61] = TOTAL0 >>> 13 & 255;\n HEAP[offset | 62] = TOTAL0 >>> 5 & 255;\n HEAP[offset | 63] = TOTAL0 << 3 & 255;\n _core_heap(offset);\n\n if (~output) _state_to_heap(output);\n\n return hashed | 0;\n }\n\n function hmac_reset() {\n H0 = I0;\n H1 = I1;\n H2 = I2;\n H3 = I3;\n H4 = I4;\n H5 = I5;\n H6 = I6;\n H7 = I7;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function _hmac_opad() {\n H0 = O0;\n H1 = O1;\n H2 = O2;\n H3 = O3;\n H4 = O4;\n H5 = O5;\n H6 = O6;\n H7 = O7;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function hmac_init(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) {\n p0 = p0 | 0;\n p1 = p1 | 0;\n p2 = p2 | 0;\n p3 = p3 | 0;\n p4 = p4 | 0;\n p5 = p5 | 0;\n p6 = p6 | 0;\n p7 = p7 | 0;\n p8 = p8 | 0;\n p9 = p9 | 0;\n p10 = p10 | 0;\n p11 = p11 | 0;\n p12 = p12 | 0;\n p13 = p13 | 0;\n p14 = p14 | 0;\n p15 = p15 | 0;\n\n // opad\n reset();\n _core(p0 ^ 0x5c5c5c5c, p1 ^ 0x5c5c5c5c, p2 ^ 0x5c5c5c5c, p3 ^ 0x5c5c5c5c, p4 ^ 0x5c5c5c5c, p5 ^ 0x5c5c5c5c, p6 ^ 0x5c5c5c5c, p7 ^ 0x5c5c5c5c, p8 ^ 0x5c5c5c5c, p9 ^ 0x5c5c5c5c, p10 ^ 0x5c5c5c5c, p11 ^ 0x5c5c5c5c, p12 ^ 0x5c5c5c5c, p13 ^ 0x5c5c5c5c, p14 ^ 0x5c5c5c5c, p15 ^ 0x5c5c5c5c);\n O0 = H0;\n O1 = H1;\n O2 = H2;\n O3 = H3;\n O4 = H4;\n O5 = H5;\n O6 = H6;\n O7 = H7;\n\n // ipad\n reset();\n _core(p0 ^ 0x36363636, p1 ^ 0x36363636, p2 ^ 0x36363636, p3 ^ 0x36363636, p4 ^ 0x36363636, p5 ^ 0x36363636, p6 ^ 0x36363636, p7 ^ 0x36363636, p8 ^ 0x36363636, p9 ^ 0x36363636, p10 ^ 0x36363636, p11 ^ 0x36363636, p12 ^ 0x36363636, p13 ^ 0x36363636, p14 ^ 0x36363636, p15 ^ 0x36363636);\n I0 = H0;\n I1 = H1;\n I2 = H2;\n I3 = H3;\n I4 = H4;\n I5 = H5;\n I6 = H6;\n I7 = H7;\n\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function hmac_finish(offset, length, output) {\n offset = offset | 0;\n length = length | 0;\n output = output | 0;\n\n var t0 = 0,\n t1 = 0,\n t2 = 0,\n t3 = 0,\n t4 = 0,\n t5 = 0,\n t6 = 0,\n t7 = 0,\n hashed = 0;\n\n if (offset & 63) return -1;\n\n if (~output) if (output & 31) return -1;\n\n hashed = finish(offset, length, -1) | 0;\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n _hmac_opad();\n _core(t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768);\n\n if (~output) _state_to_heap(output);\n\n return hashed | 0;\n }\n\n // salt is assumed to be already processed\n // offset — multiple of 64\n // output — multiple of 32\n function pbkdf2_generate_block(offset, length, block, count, output) {\n offset = offset | 0;\n length = length | 0;\n block = block | 0;\n count = count | 0;\n output = output | 0;\n\n var h0 = 0,\n h1 = 0,\n h2 = 0,\n h3 = 0,\n h4 = 0,\n h5 = 0,\n h6 = 0,\n h7 = 0,\n t0 = 0,\n t1 = 0,\n t2 = 0,\n t3 = 0,\n t4 = 0,\n t5 = 0,\n t6 = 0,\n t7 = 0;\n\n if (offset & 63) return -1;\n\n if (~output) if (output & 31) return -1;\n\n // pad block number into heap\n // FIXME probable OOB write\n HEAP[offset + length | 0] = block >>> 24;\n HEAP[offset + length + 1 | 0] = block >>> 16 & 255;\n HEAP[offset + length + 2 | 0] = block >>> 8 & 255;\n HEAP[offset + length + 3 | 0] = block & 255;\n\n // finish first iteration\n hmac_finish(offset, length + 4 | 0, -1) | 0;\n h0 = t0 = H0, h1 = t1 = H1, h2 = t2 = H2, h3 = t3 = H3, h4 = t4 = H4, h5 = t5 = H5, h6 = t6 = H6, h7 = t7 = H7;\n count = count - 1 | 0;\n\n // perform the rest iterations\n while ((count | 0) > 0) {\n hmac_reset();\n _core(t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768);\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n _hmac_opad();\n _core(t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768);\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n h0 = h0 ^ H0;\n h1 = h1 ^ H1;\n h2 = h2 ^ H2;\n h3 = h3 ^ H3;\n h4 = h4 ^ H4;\n h5 = h5 ^ H5;\n h6 = h6 ^ H6;\n h7 = h7 ^ H7;\n\n count = count - 1 | 0;\n }\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n H5 = h5;\n H6 = h6;\n H7 = h7;\n\n if (~output) _state_to_heap(output);\n\n return 0;\n }\n\n return {\n // SHA256\n reset: reset,\n init: init,\n process: process,\n finish: finish,\n\n // HMAC-SHA256\n hmac_reset: hmac_reset,\n hmac_init: hmac_init,\n hmac_finish: hmac_finish,\n\n // PBKDF2-HMAC-SHA256\n pbkdf2_generate_block: pbkdf2_generate_block\n };\n}\n\n},{}],18:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports._sha256_hash_size = exports._sha256_block_size = undefined;\nexports.sha256_constructor = sha256_constructor;\nexports.get_sha256_instance = get_sha256_instance;\n\nvar _sha = _dereq_('./sha256.asm');\n\nvar _hash = _dereq_('../hash');\n\nvar _utils = _dereq_('../../utils');\n\nvar _sha256_block_size = exports._sha256_block_size = 64;\nvar _sha256_hash_size = exports._sha256_hash_size = 32;\n\nfunction sha256_constructor(options) {\n options = options || {};\n\n this.heap = (0, _utils._heap_init)(Uint8Array, options.heap);\n this.asm = options.asm || (0, _sha.sha256_asm)({ Uint8Array: Uint8Array }, null, this.heap.buffer);\n\n this.BLOCK_SIZE = _sha256_block_size;\n this.HASH_SIZE = _sha256_hash_size;\n\n this.reset();\n}\n\nsha256_constructor.BLOCK_SIZE = _sha256_block_size;\nsha256_constructor.HASH_SIZE = _sha256_hash_size;\nsha256_constructor.NAME = 'sha256';\n\nvar sha256_prototype = sha256_constructor.prototype;\nsha256_prototype.reset = _hash.hash_reset;\nsha256_prototype.process = _hash.hash_process;\nsha256_prototype.finish = _hash.hash_finish;\n\nvar sha256_instance = null;\n\nfunction get_sha256_instance() {\n if (sha256_instance === null) sha256_instance = new sha256_constructor({ heapSize: 0x100000 });\n return sha256_instance;\n}\n\n},{\"../../utils\":19,\"../hash\":15,\"./sha256.asm\":17}],19:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.string_to_bytes = string_to_bytes;\nexports.hex_to_bytes = hex_to_bytes;\nexports.base64_to_bytes = base64_to_bytes;\nexports.bytes_to_string = bytes_to_string;\nexports.bytes_to_hex = bytes_to_hex;\nexports.bytes_to_base64 = bytes_to_base64;\nexports.pow2_ceil = pow2_ceil;\nexports.is_number = is_number;\nexports.is_string = is_string;\nexports.is_buffer = is_buffer;\nexports.is_bytes = is_bytes;\nexports.is_typed_array = is_typed_array;\nexports._heap_init = _heap_init;\nexports._heap_write = _heap_write;\nvar FloatArray = exports.FloatArray = typeof Float64Array !== 'undefined' ? Float64Array : Float32Array; // make PhantomJS happy\n\n/**\n * @param {string} str\n * @param {boolean} [utf8]\n * @return {Uint8Array}\n */\nfunction string_to_bytes(str, utf8) {\n utf8 = !!utf8;\n\n var len = str.length,\n bytes = new Uint8Array(utf8 ? 4 * len : len);\n\n for (var i = 0, j = 0; i < len; i++) {\n var c = str.charCodeAt(i);\n\n if (utf8 && 0xd800 <= c && c <= 0xdbff) {\n if (++i >= len) throw new Error('Malformed string, low surrogate expected at position ' + i);\n c = (c ^ 0xd800) << 10 | 0x10000 | str.charCodeAt(i) ^ 0xdc00;\n } else if (!utf8 && c >>> 8) {\n throw new Error('Wide characters are not allowed.');\n }\n\n if (!utf8 || c <= 0x7f) {\n bytes[j++] = c;\n } else if (c <= 0x7ff) {\n bytes[j++] = 0xc0 | c >> 6;\n bytes[j++] = 0x80 | c & 0x3f;\n } else if (c <= 0xffff) {\n bytes[j++] = 0xe0 | c >> 12;\n bytes[j++] = 0x80 | c >> 6 & 0x3f;\n bytes[j++] = 0x80 | c & 0x3f;\n } else {\n bytes[j++] = 0xf0 | c >> 18;\n bytes[j++] = 0x80 | c >> 12 & 0x3f;\n bytes[j++] = 0x80 | c >> 6 & 0x3f;\n bytes[j++] = 0x80 | c & 0x3f;\n }\n }\n\n return bytes.subarray(0, j);\n}\n\nfunction hex_to_bytes(str) {\n var len = str.length;\n if (len & 1) {\n str = '0' + str;\n len++;\n }\n var bytes = new Uint8Array(len >> 1);\n for (var i = 0; i < len; i += 2) {\n bytes[i >> 1] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n}\n\nfunction base64_to_bytes(str) {\n return string_to_bytes(atob(str));\n}\n\nfunction bytes_to_string(bytes, utf8) {\n utf8 = !!utf8;\n\n var len = bytes.length,\n chars = new Array(len);\n\n for (var i = 0, j = 0; i < len; i++) {\n var b = bytes[i];\n if (!utf8 || b < 128) {\n chars[j++] = b;\n } else if (b >= 192 && b < 224 && i + 1 < len) {\n chars[j++] = (b & 0x1f) << 6 | bytes[++i] & 0x3f;\n } else if (b >= 224 && b < 240 && i + 2 < len) {\n chars[j++] = (b & 0xf) << 12 | (bytes[++i] & 0x3f) << 6 | bytes[++i] & 0x3f;\n } else if (b >= 240 && b < 248 && i + 3 < len) {\n var c = (b & 7) << 18 | (bytes[++i] & 0x3f) << 12 | (bytes[++i] & 0x3f) << 6 | bytes[++i] & 0x3f;\n if (c <= 0xffff) {\n chars[j++] = c;\n } else {\n c ^= 0x10000;\n chars[j++] = 0xd800 | c >> 10;\n chars[j++] = 0xdc00 | c & 0x3ff;\n }\n } else {\n throw new Error('Malformed UTF8 character at byte offset ' + i);\n }\n }\n\n var str = '',\n bs = 16384;\n for (var i = 0; i < j; i += bs) {\n str += String.fromCharCode.apply(String, chars.slice(i, i + bs <= j ? i + bs : j));\n }\n\n return str;\n}\n\nfunction bytes_to_hex(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var h = (arr[i] & 0xff).toString(16);\n if (h.length < 2) str += '0';\n str += h;\n }\n return str;\n}\n\nfunction bytes_to_base64(arr) {\n return btoa(bytes_to_string(arr));\n}\n\nfunction pow2_ceil(a) {\n a -= 1;\n a |= a >>> 1;\n a |= a >>> 2;\n a |= a >>> 4;\n a |= a >>> 8;\n a |= a >>> 16;\n a += 1;\n return a;\n}\n\nfunction is_number(a) {\n return typeof a === 'number';\n}\n\nfunction is_string(a) {\n return typeof a === 'string';\n}\n\nfunction is_buffer(a) {\n return a instanceof ArrayBuffer;\n}\n\nfunction is_bytes(a) {\n return a instanceof Uint8Array;\n}\n\nfunction is_typed_array(a) {\n return a instanceof Int8Array || a instanceof Uint8Array || a instanceof Int16Array || a instanceof Uint16Array || a instanceof Int32Array || a instanceof Uint32Array || a instanceof Float32Array || a instanceof Float64Array;\n}\n\nfunction _heap_init(constructor, heap, heapSize) {\n var size = heap ? heap.byteLength : heapSize || 65536;\n\n if (size & 0xfff || size <= 0) throw new Error('heap size must be a positive integer and a multiple of 4096');\n\n heap = heap || new constructor(new ArrayBuffer(size));\n\n return heap;\n}\n\nfunction _heap_write(heap, hpos, data, dpos, dlen) {\n var hlen = heap.length - hpos,\n wlen = hlen < dlen ? hlen : dlen;\n\n heap.set(data.subarray(dpos, dpos + wlen), hpos);\n\n return wlen;\n}\n\n},{}],20:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/array/from\"), __esModule: true };\n},{\"core-js/library/fn/array/from\":56}],21:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/get-iterator\"), __esModule: true };\n},{\"core-js/library/fn/get-iterator\":57}],22:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/is-iterable\"), __esModule: true };\n},{\"core-js/library/fn/is-iterable\":58}],23:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/json/stringify\"), __esModule: true };\n},{\"core-js/library/fn/json/stringify\":59}],24:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/assign\"), __esModule: true };\n},{\"core-js/library/fn/object/assign\":60}],25:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/create\"), __esModule: true };\n},{\"core-js/library/fn/object/create\":61}],26:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/define-property\"), __esModule: true };\n},{\"core-js/library/fn/object/define-property\":62}],27:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/entries\"), __esModule: true };\n},{\"core-js/library/fn/object/entries\":63}],28:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/freeze\"), __esModule: true };\n},{\"core-js/library/fn/object/freeze\":64}],29:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };\n},{\"core-js/library/fn/object/get-prototype-of\":65}],30:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };\n},{\"core-js/library/fn/object/set-prototype-of\":66}],31:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/values\"), __esModule: true };\n},{\"core-js/library/fn/object/values\":67}],32:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/promise\"), __esModule: true };\n},{\"core-js/library/fn/promise\":68}],33:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/symbol\"), __esModule: true };\n},{\"core-js/library/fn/symbol\":69}],34:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/symbol/iterator\"), __esModule: true };\n},{\"core-js/library/fn/symbol/iterator\":70}],35:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _promise = _dereq_(\"../core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new _promise2.default(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return _promise2.default.resolve(value).then(function (value) {\n step(\"next\", value);\n }, function (err) {\n step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};\n},{\"../core-js/promise\":32}],36:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n},{}],37:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = _dereq_(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n},{\"../core-js/object/define-property\":26}],38:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = _dereq_(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = _dereq_(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = _dereq_(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n }\n\n subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n},{\"../core-js/object/create\":25,\"../core-js/object/set-prototype-of\":30,\"../helpers/typeof\":41}],39:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = _dereq_(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n},{\"../helpers/typeof\":41}],40:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = _dereq_(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = _dereq_(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if ((0, _isIterable3.default)(Object(arr))) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n},{\"../core-js/get-iterator\":21,\"../core-js/is-iterable\":22}],41:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = _dereq_(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = _dereq_(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n},{\"../core-js/symbol\":33,\"../core-js/symbol/iterator\":34}],42:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"regenerator-runtime\");\n\n},{\"regenerator-runtime\":318}],43:[function(_dereq_,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr((len * 3 / 4) - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0; i < l; i += 4) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n\n},{}],44:[function(_dereq_,module,exports){\n(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = _dereq_('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":46}],45:[function(_dereq_,module,exports){\nvar r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = _dereq_('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n\n},{\"crypto\":\"crypto\"}],46:[function(_dereq_,module,exports){\n\n},{}],47:[function(_dereq_,module,exports){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = _dereq_('base64-js')\nvar ieee754 = _dereq_('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('Invalid typed array length')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (isArrayBuffer(value)) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n return fromObject(value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj) {\n if (isArrayBufferView(obj) || 'length' in obj) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (isArrayBufferView(string) || isArrayBuffer(string)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : new Buffer(val, encoding)\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check\n// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166\nfunction isArrayBuffer (obj) {\n return obj instanceof ArrayBuffer ||\n (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&\n typeof obj.byteLength === 'number')\n}\n\n// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`\nfunction isArrayBufferView (obj) {\n return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)\n}\n\nfunction numberIsNaN (obj) {\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n},{\"base64-js\":43,\"ieee754\":297}],48:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.array.fill');\nmodule.exports = _dereq_('../../modules/_core').Array.fill;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.array.fill\":251}],49:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.array.find');\nmodule.exports = _dereq_('../../modules/_core').Array.find;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.array.find\":252}],50:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.string.iterator');\n_dereq_('../../modules/es6.array.from');\nmodule.exports = _dereq_('../../modules/_core').Array.from;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.array.from\":253,\"../../modules/es6.string.iterator\":258}],51:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.assign');\nmodule.exports = _dereq_('../../modules/_core').Object.assign;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.object.assign\":255}],52:[function(_dereq_,module,exports){\n_dereq_('../modules/es6.object.to-string');\n_dereq_('../modules/es6.string.iterator');\n_dereq_('../modules/web.dom.iterable');\n_dereq_('../modules/es6.promise');\n_dereq_('../modules/es7.promise.finally');\n_dereq_('../modules/es7.promise.try');\nmodule.exports = _dereq_('../modules/_core').Promise;\n\n},{\"../modules/_core\":180,\"../modules/es6.object.to-string\":256,\"../modules/es6.promise\":257,\"../modules/es6.string.iterator\":258,\"../modules/es7.promise.finally\":262,\"../modules/es7.promise.try\":263,\"../modules/web.dom.iterable\":266}],53:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.string.repeat');\nmodule.exports = _dereq_('../../modules/_core').String.repeat;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.string.repeat\":259}],54:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.symbol');\n_dereq_('../../modules/es6.object.to-string');\n_dereq_('../../modules/es7.symbol.async-iterator');\n_dereq_('../../modules/es7.symbol.observable');\nmodule.exports = _dereq_('../../modules/_core').Symbol;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.object.to-string\":256,\"../../modules/es6.symbol\":260,\"../../modules/es7.symbol.async-iterator\":264,\"../../modules/es7.symbol.observable\":265}],55:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.typed.uint8-array');\nmodule.exports = _dereq_('../../modules/_core').Uint8Array;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.typed.uint8-array\":261}],56:[function(_dereq_,module,exports){\narguments[4][50][0].apply(exports,arguments)\n},{\"../../modules/_core\":78,\"../../modules/es6.array.from\":149,\"../../modules/es6.string.iterator\":159,\"dup\":50}],57:[function(_dereq_,module,exports){\n_dereq_('../modules/web.dom.iterable');\n_dereq_('../modules/es6.string.iterator');\nmodule.exports = _dereq_('../modules/core.get-iterator');\n\n},{\"../modules/core.get-iterator\":147,\"../modules/es6.string.iterator\":159,\"../modules/web.dom.iterable\":167}],58:[function(_dereq_,module,exports){\n_dereq_('../modules/web.dom.iterable');\n_dereq_('../modules/es6.string.iterator');\nmodule.exports = _dereq_('../modules/core.is-iterable');\n\n},{\"../modules/core.is-iterable\":148,\"../modules/es6.string.iterator\":159,\"../modules/web.dom.iterable\":167}],59:[function(_dereq_,module,exports){\nvar core = _dereq_('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n\n},{\"../../modules/_core\":78}],60:[function(_dereq_,module,exports){\narguments[4][51][0].apply(exports,arguments)\n},{\"../../modules/_core\":78,\"../../modules/es6.object.assign\":151,\"dup\":51}],61:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.create');\nvar $Object = _dereq_('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.create\":152}],62:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.define-property');\nvar $Object = _dereq_('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.define-property\":153}],63:[function(_dereq_,module,exports){\n_dereq_('../../modules/es7.object.entries');\nmodule.exports = _dereq_('../../modules/_core').Object.entries;\n\n},{\"../../modules/_core\":78,\"../../modules/es7.object.entries\":161}],64:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.freeze');\nmodule.exports = _dereq_('../../modules/_core').Object.freeze;\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.freeze\":154}],65:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.get-prototype-of');\nmodule.exports = _dereq_('../../modules/_core').Object.getPrototypeOf;\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.get-prototype-of\":155}],66:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.set-prototype-of');\nmodule.exports = _dereq_('../../modules/_core').Object.setPrototypeOf;\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.set-prototype-of\":156}],67:[function(_dereq_,module,exports){\n_dereq_('../../modules/es7.object.values');\nmodule.exports = _dereq_('../../modules/_core').Object.values;\n\n},{\"../../modules/_core\":78,\"../../modules/es7.object.values\":162}],68:[function(_dereq_,module,exports){\narguments[4][52][0].apply(exports,arguments)\n},{\"../modules/_core\":78,\"../modules/es6.object.to-string\":157,\"../modules/es6.promise\":158,\"../modules/es6.string.iterator\":159,\"../modules/es7.promise.finally\":163,\"../modules/es7.promise.try\":164,\"../modules/web.dom.iterable\":167,\"dup\":52}],69:[function(_dereq_,module,exports){\narguments[4][54][0].apply(exports,arguments)\n},{\"../../modules/_core\":78,\"../../modules/es6.object.to-string\":157,\"../../modules/es6.symbol\":160,\"../../modules/es7.symbol.async-iterator\":165,\"../../modules/es7.symbol.observable\":166,\"dup\":54}],70:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.string.iterator');\n_dereq_('../../modules/web.dom.iterable');\nmodule.exports = _dereq_('../../modules/_wks-ext').f('iterator');\n\n},{\"../../modules/_wks-ext\":144,\"../../modules/es6.string.iterator\":159,\"../../modules/web.dom.iterable\":167}],71:[function(_dereq_,module,exports){\nmodule.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n},{}],72:[function(_dereq_,module,exports){\nmodule.exports = function () { /* empty */ };\n\n},{}],73:[function(_dereq_,module,exports){\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n},{}],74:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n},{\"./_is-object\":98}],75:[function(_dereq_,module,exports){\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = _dereq_('./_to-iobject');\nvar toLength = _dereq_('./_to-length');\nvar toAbsoluteIndex = _dereq_('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n},{\"./_to-absolute-index\":136,\"./_to-iobject\":138,\"./_to-length\":139}],76:[function(_dereq_,module,exports){\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = _dereq_('./_cof');\nvar TAG = _dereq_('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n},{\"./_cof\":77,\"./_wks\":145}],77:[function(_dereq_,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n},{}],78:[function(_dereq_,module,exports){\nvar core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n},{}],79:[function(_dereq_,module,exports){\n'use strict';\nvar $defineProperty = _dereq_('./_object-dp');\nvar createDesc = _dereq_('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n},{\"./_object-dp\":111,\"./_property-desc\":125}],80:[function(_dereq_,module,exports){\n// optional / simple context binding\nvar aFunction = _dereq_('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n},{\"./_a-function\":71}],81:[function(_dereq_,module,exports){\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n},{}],82:[function(_dereq_,module,exports){\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !_dereq_('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n},{\"./_fails\":87}],83:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./_is-object');\nvar document = _dereq_('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n},{\"./_global\":89,\"./_is-object\":98}],84:[function(_dereq_,module,exports){\n// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n},{}],85:[function(_dereq_,module,exports){\n// all enumerable object keys, includes symbols\nvar getKeys = _dereq_('./_object-keys');\nvar gOPS = _dereq_('./_object-gops');\nvar pIE = _dereq_('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n},{\"./_object-gops\":116,\"./_object-keys\":119,\"./_object-pie\":120}],86:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar ctx = _dereq_('./_ctx');\nvar hide = _dereq_('./_hide');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n},{\"./_core\":78,\"./_ctx\":80,\"./_global\":89,\"./_hide\":91}],87:[function(_dereq_,module,exports){\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n},{}],88:[function(_dereq_,module,exports){\nvar ctx = _dereq_('./_ctx');\nvar call = _dereq_('./_iter-call');\nvar isArrayIter = _dereq_('./_is-array-iter');\nvar anObject = _dereq_('./_an-object');\nvar toLength = _dereq_('./_to-length');\nvar getIterFn = _dereq_('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n},{\"./_an-object\":74,\"./_ctx\":80,\"./_is-array-iter\":96,\"./_iter-call\":99,\"./_to-length\":139,\"./core.get-iterator-method\":146}],89:[function(_dereq_,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n},{}],90:[function(_dereq_,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n},{}],91:[function(_dereq_,module,exports){\nvar dP = _dereq_('./_object-dp');\nvar createDesc = _dereq_('./_property-desc');\nmodule.exports = _dereq_('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n},{\"./_descriptors\":82,\"./_object-dp\":111,\"./_property-desc\":125}],92:[function(_dereq_,module,exports){\nvar document = _dereq_('./_global').document;\nmodule.exports = document && document.documentElement;\n\n},{\"./_global\":89}],93:[function(_dereq_,module,exports){\nmodule.exports = !_dereq_('./_descriptors') && !_dereq_('./_fails')(function () {\n return Object.defineProperty(_dereq_('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n},{\"./_descriptors\":82,\"./_dom-create\":83,\"./_fails\":87}],94:[function(_dereq_,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n},{}],95:[function(_dereq_,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = _dereq_('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n},{\"./_cof\":77}],96:[function(_dereq_,module,exports){\n// check on default Array iterator\nvar Iterators = _dereq_('./_iterators');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n},{\"./_iterators\":104,\"./_wks\":145}],97:[function(_dereq_,module,exports){\n// 7.2.2 IsArray(argument)\nvar cof = _dereq_('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n},{\"./_cof\":77}],98:[function(_dereq_,module,exports){\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n},{}],99:[function(_dereq_,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = _dereq_('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n\n},{\"./_an-object\":74}],100:[function(_dereq_,module,exports){\n'use strict';\nvar create = _dereq_('./_object-create');\nvar descriptor = _dereq_('./_property-desc');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_dereq_('./_hide')(IteratorPrototype, _dereq_('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n},{\"./_hide\":91,\"./_object-create\":110,\"./_property-desc\":125,\"./_set-to-string-tag\":130,\"./_wks\":145}],101:[function(_dereq_,module,exports){\n'use strict';\nvar LIBRARY = _dereq_('./_library');\nvar $export = _dereq_('./_export');\nvar redefine = _dereq_('./_redefine');\nvar hide = _dereq_('./_hide');\nvar has = _dereq_('./_has');\nvar Iterators = _dereq_('./_iterators');\nvar $iterCreate = _dereq_('./_iter-create');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar getPrototypeOf = _dereq_('./_object-gpo');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n},{\"./_export\":86,\"./_has\":90,\"./_hide\":91,\"./_iter-create\":100,\"./_iterators\":104,\"./_library\":105,\"./_object-gpo\":117,\"./_redefine\":127,\"./_set-to-string-tag\":130,\"./_wks\":145}],102:[function(_dereq_,module,exports){\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n},{\"./_wks\":145}],103:[function(_dereq_,module,exports){\nmodule.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n},{}],104:[function(_dereq_,module,exports){\nmodule.exports = {};\n\n},{}],105:[function(_dereq_,module,exports){\nmodule.exports = true;\n\n},{}],106:[function(_dereq_,module,exports){\nvar META = _dereq_('./_uid')('meta');\nvar isObject = _dereq_('./_is-object');\nvar has = _dereq_('./_has');\nvar setDesc = _dereq_('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !_dereq_('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n},{\"./_fails\":87,\"./_has\":90,\"./_is-object\":98,\"./_object-dp\":111,\"./_uid\":142}],107:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar macrotask = _dereq_('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = _dereq_('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n},{\"./_cof\":77,\"./_global\":89,\"./_task\":135}],108:[function(_dereq_,module,exports){\n'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = _dereq_('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n},{\"./_a-function\":71}],109:[function(_dereq_,module,exports){\n'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = _dereq_('./_object-keys');\nvar gOPS = _dereq_('./_object-gops');\nvar pIE = _dereq_('./_object-pie');\nvar toObject = _dereq_('./_to-object');\nvar IObject = _dereq_('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || _dereq_('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n},{\"./_fails\":87,\"./_iobject\":95,\"./_object-gops\":116,\"./_object-keys\":119,\"./_object-pie\":120,\"./_to-object\":140}],110:[function(_dereq_,module,exports){\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = _dereq_('./_an-object');\nvar dPs = _dereq_('./_object-dps');\nvar enumBugKeys = _dereq_('./_enum-bug-keys');\nvar IE_PROTO = _dereq_('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _dereq_('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _dereq_('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n},{\"./_an-object\":74,\"./_dom-create\":83,\"./_enum-bug-keys\":84,\"./_html\":92,\"./_object-dps\":112,\"./_shared-key\":131}],111:[function(_dereq_,module,exports){\nvar anObject = _dereq_('./_an-object');\nvar IE8_DOM_DEFINE = _dereq_('./_ie8-dom-define');\nvar toPrimitive = _dereq_('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = _dereq_('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n},{\"./_an-object\":74,\"./_descriptors\":82,\"./_ie8-dom-define\":93,\"./_to-primitive\":141}],112:[function(_dereq_,module,exports){\nvar dP = _dereq_('./_object-dp');\nvar anObject = _dereq_('./_an-object');\nvar getKeys = _dereq_('./_object-keys');\n\nmodule.exports = _dereq_('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n},{\"./_an-object\":74,\"./_descriptors\":82,\"./_object-dp\":111,\"./_object-keys\":119}],113:[function(_dereq_,module,exports){\nvar pIE = _dereq_('./_object-pie');\nvar createDesc = _dereq_('./_property-desc');\nvar toIObject = _dereq_('./_to-iobject');\nvar toPrimitive = _dereq_('./_to-primitive');\nvar has = _dereq_('./_has');\nvar IE8_DOM_DEFINE = _dereq_('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = _dereq_('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n},{\"./_descriptors\":82,\"./_has\":90,\"./_ie8-dom-define\":93,\"./_object-pie\":120,\"./_property-desc\":125,\"./_to-iobject\":138,\"./_to-primitive\":141}],114:[function(_dereq_,module,exports){\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = _dereq_('./_to-iobject');\nvar gOPN = _dereq_('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n},{\"./_object-gopn\":115,\"./_to-iobject\":138}],115:[function(_dereq_,module,exports){\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = _dereq_('./_object-keys-internal');\nvar hiddenKeys = _dereq_('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n},{\"./_enum-bug-keys\":84,\"./_object-keys-internal\":118}],116:[function(_dereq_,module,exports){\nexports.f = Object.getOwnPropertySymbols;\n\n},{}],117:[function(_dereq_,module,exports){\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = _dereq_('./_has');\nvar toObject = _dereq_('./_to-object');\nvar IE_PROTO = _dereq_('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n},{\"./_has\":90,\"./_shared-key\":131,\"./_to-object\":140}],118:[function(_dereq_,module,exports){\nvar has = _dereq_('./_has');\nvar toIObject = _dereq_('./_to-iobject');\nvar arrayIndexOf = _dereq_('./_array-includes')(false);\nvar IE_PROTO = _dereq_('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n},{\"./_array-includes\":75,\"./_has\":90,\"./_shared-key\":131,\"./_to-iobject\":138}],119:[function(_dereq_,module,exports){\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = _dereq_('./_object-keys-internal');\nvar enumBugKeys = _dereq_('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n},{\"./_enum-bug-keys\":84,\"./_object-keys-internal\":118}],120:[function(_dereq_,module,exports){\nexports.f = {}.propertyIsEnumerable;\n\n},{}],121:[function(_dereq_,module,exports){\n// most Object methods by ES6 should accept primitives\nvar $export = _dereq_('./_export');\nvar core = _dereq_('./_core');\nvar fails = _dereq_('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n},{\"./_core\":78,\"./_export\":86,\"./_fails\":87}],122:[function(_dereq_,module,exports){\nvar getKeys = _dereq_('./_object-keys');\nvar toIObject = _dereq_('./_to-iobject');\nvar isEnum = _dereq_('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n},{\"./_object-keys\":119,\"./_object-pie\":120,\"./_to-iobject\":138}],123:[function(_dereq_,module,exports){\nmodule.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n},{}],124:[function(_dereq_,module,exports){\nvar anObject = _dereq_('./_an-object');\nvar isObject = _dereq_('./_is-object');\nvar newPromiseCapability = _dereq_('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n},{\"./_an-object\":74,\"./_is-object\":98,\"./_new-promise-capability\":108}],125:[function(_dereq_,module,exports){\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n},{}],126:[function(_dereq_,module,exports){\nvar hide = _dereq_('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n\n},{\"./_hide\":91}],127:[function(_dereq_,module,exports){\nmodule.exports = _dereq_('./_hide');\n\n},{\"./_hide\":91}],128:[function(_dereq_,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = _dereq_('./_is-object');\nvar anObject = _dereq_('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = _dereq_('./_ctx')(Function.call, _dereq_('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n},{\"./_an-object\":74,\"./_ctx\":80,\"./_is-object\":98,\"./_object-gopd\":113}],129:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar dP = _dereq_('./_object-dp');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar SPECIES = _dereq_('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n},{\"./_core\":78,\"./_descriptors\":82,\"./_global\":89,\"./_object-dp\":111,\"./_wks\":145}],130:[function(_dereq_,module,exports){\nvar def = _dereq_('./_object-dp').f;\nvar has = _dereq_('./_has');\nvar TAG = _dereq_('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n},{\"./_has\":90,\"./_object-dp\":111,\"./_wks\":145}],131:[function(_dereq_,module,exports){\nvar shared = _dereq_('./_shared')('keys');\nvar uid = _dereq_('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n},{\"./_shared\":132,\"./_uid\":142}],132:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n\n},{\"./_global\":89}],133:[function(_dereq_,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = _dereq_('./_an-object');\nvar aFunction = _dereq_('./_a-function');\nvar SPECIES = _dereq_('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n},{\"./_a-function\":71,\"./_an-object\":74,\"./_wks\":145}],134:[function(_dereq_,module,exports){\nvar toInteger = _dereq_('./_to-integer');\nvar defined = _dereq_('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n},{\"./_defined\":81,\"./_to-integer\":137}],135:[function(_dereq_,module,exports){\nvar ctx = _dereq_('./_ctx');\nvar invoke = _dereq_('./_invoke');\nvar html = _dereq_('./_html');\nvar cel = _dereq_('./_dom-create');\nvar global = _dereq_('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (_dereq_('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n},{\"./_cof\":77,\"./_ctx\":80,\"./_dom-create\":83,\"./_global\":89,\"./_html\":92,\"./_invoke\":94}],136:[function(_dereq_,module,exports){\nvar toInteger = _dereq_('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n},{\"./_to-integer\":137}],137:[function(_dereq_,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n},{}],138:[function(_dereq_,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = _dereq_('./_iobject');\nvar defined = _dereq_('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n},{\"./_defined\":81,\"./_iobject\":95}],139:[function(_dereq_,module,exports){\n// 7.1.15 ToLength\nvar toInteger = _dereq_('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n},{\"./_to-integer\":137}],140:[function(_dereq_,module,exports){\n// 7.1.13 ToObject(argument)\nvar defined = _dereq_('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n},{\"./_defined\":81}],141:[function(_dereq_,module,exports){\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = _dereq_('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n},{\"./_is-object\":98}],142:[function(_dereq_,module,exports){\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n},{}],143:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar LIBRARY = _dereq_('./_library');\nvar wksExt = _dereq_('./_wks-ext');\nvar defineProperty = _dereq_('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n},{\"./_core\":78,\"./_global\":89,\"./_library\":105,\"./_object-dp\":111,\"./_wks-ext\":144}],144:[function(_dereq_,module,exports){\nexports.f = _dereq_('./_wks');\n\n},{\"./_wks\":145}],145:[function(_dereq_,module,exports){\nvar store = _dereq_('./_shared')('wks');\nvar uid = _dereq_('./_uid');\nvar Symbol = _dereq_('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n},{\"./_global\":89,\"./_shared\":132,\"./_uid\":142}],146:[function(_dereq_,module,exports){\nvar classof = _dereq_('./_classof');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar Iterators = _dereq_('./_iterators');\nmodule.exports = _dereq_('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n},{\"./_classof\":76,\"./_core\":78,\"./_iterators\":104,\"./_wks\":145}],147:[function(_dereq_,module,exports){\nvar anObject = _dereq_('./_an-object');\nvar get = _dereq_('./core.get-iterator-method');\nmodule.exports = _dereq_('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n\n},{\"./_an-object\":74,\"./_core\":78,\"./core.get-iterator-method\":146}],148:[function(_dereq_,module,exports){\nvar classof = _dereq_('./_classof');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar Iterators = _dereq_('./_iterators');\nmodule.exports = _dereq_('./_core').isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || Iterators.hasOwnProperty(classof(O));\n};\n\n},{\"./_classof\":76,\"./_core\":78,\"./_iterators\":104,\"./_wks\":145}],149:[function(_dereq_,module,exports){\n'use strict';\nvar ctx = _dereq_('./_ctx');\nvar $export = _dereq_('./_export');\nvar toObject = _dereq_('./_to-object');\nvar call = _dereq_('./_iter-call');\nvar isArrayIter = _dereq_('./_is-array-iter');\nvar toLength = _dereq_('./_to-length');\nvar createProperty = _dereq_('./_create-property');\nvar getIterFn = _dereq_('./core.get-iterator-method');\n\n$export($export.S + $export.F * !_dereq_('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n},{\"./_create-property\":79,\"./_ctx\":80,\"./_export\":86,\"./_is-array-iter\":96,\"./_iter-call\":99,\"./_iter-detect\":102,\"./_to-length\":139,\"./_to-object\":140,\"./core.get-iterator-method\":146}],150:[function(_dereq_,module,exports){\n'use strict';\nvar addToUnscopables = _dereq_('./_add-to-unscopables');\nvar step = _dereq_('./_iter-step');\nvar Iterators = _dereq_('./_iterators');\nvar toIObject = _dereq_('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = _dereq_('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n},{\"./_add-to-unscopables\":72,\"./_iter-define\":101,\"./_iter-step\":103,\"./_iterators\":104,\"./_to-iobject\":138}],151:[function(_dereq_,module,exports){\n// 19.1.3.1 Object.assign(target, source)\nvar $export = _dereq_('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: _dereq_('./_object-assign') });\n\n},{\"./_export\":86,\"./_object-assign\":109}],152:[function(_dereq_,module,exports){\nvar $export = _dereq_('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: _dereq_('./_object-create') });\n\n},{\"./_export\":86,\"./_object-create\":110}],153:[function(_dereq_,module,exports){\nvar $export = _dereq_('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !_dereq_('./_descriptors'), 'Object', { defineProperty: _dereq_('./_object-dp').f });\n\n},{\"./_descriptors\":82,\"./_export\":86,\"./_object-dp\":111}],154:[function(_dereq_,module,exports){\n// 19.1.2.5 Object.freeze(O)\nvar isObject = _dereq_('./_is-object');\nvar meta = _dereq_('./_meta').onFreeze;\n\n_dereq_('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n},{\"./_is-object\":98,\"./_meta\":106,\"./_object-sap\":121}],155:[function(_dereq_,module,exports){\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = _dereq_('./_to-object');\nvar $getPrototypeOf = _dereq_('./_object-gpo');\n\n_dereq_('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n\n},{\"./_object-gpo\":117,\"./_object-sap\":121,\"./_to-object\":140}],156:[function(_dereq_,module,exports){\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = _dereq_('./_export');\n$export($export.S, 'Object', { setPrototypeOf: _dereq_('./_set-proto').set });\n\n},{\"./_export\":86,\"./_set-proto\":128}],157:[function(_dereq_,module,exports){\narguments[4][46][0].apply(exports,arguments)\n},{\"dup\":46}],158:[function(_dereq_,module,exports){\n'use strict';\nvar LIBRARY = _dereq_('./_library');\nvar global = _dereq_('./_global');\nvar ctx = _dereq_('./_ctx');\nvar classof = _dereq_('./_classof');\nvar $export = _dereq_('./_export');\nvar isObject = _dereq_('./_is-object');\nvar aFunction = _dereq_('./_a-function');\nvar anInstance = _dereq_('./_an-instance');\nvar forOf = _dereq_('./_for-of');\nvar speciesConstructor = _dereq_('./_species-constructor');\nvar task = _dereq_('./_task').set;\nvar microtask = _dereq_('./_microtask')();\nvar newPromiseCapabilityModule = _dereq_('./_new-promise-capability');\nvar perform = _dereq_('./_perform');\nvar promiseResolve = _dereq_('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[_dereq_('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = _dereq_('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n_dereq_('./_set-to-string-tag')($Promise, PROMISE);\n_dereq_('./_set-species')(PROMISE);\nWrapper = _dereq_('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && _dereq_('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n},{\"./_a-function\":71,\"./_an-instance\":73,\"./_classof\":76,\"./_core\":78,\"./_ctx\":80,\"./_export\":86,\"./_for-of\":88,\"./_global\":89,\"./_is-object\":98,\"./_iter-detect\":102,\"./_library\":105,\"./_microtask\":107,\"./_new-promise-capability\":108,\"./_perform\":123,\"./_promise-resolve\":124,\"./_redefine-all\":126,\"./_set-species\":129,\"./_set-to-string-tag\":130,\"./_species-constructor\":133,\"./_task\":135,\"./_wks\":145}],159:[function(_dereq_,module,exports){\n'use strict';\nvar $at = _dereq_('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_dereq_('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n},{\"./_iter-define\":101,\"./_string-at\":134}],160:[function(_dereq_,module,exports){\n'use strict';\n// ECMAScript 6 symbols shim\nvar global = _dereq_('./_global');\nvar has = _dereq_('./_has');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar $export = _dereq_('./_export');\nvar redefine = _dereq_('./_redefine');\nvar META = _dereq_('./_meta').KEY;\nvar $fails = _dereq_('./_fails');\nvar shared = _dereq_('./_shared');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar uid = _dereq_('./_uid');\nvar wks = _dereq_('./_wks');\nvar wksExt = _dereq_('./_wks-ext');\nvar wksDefine = _dereq_('./_wks-define');\nvar enumKeys = _dereq_('./_enum-keys');\nvar isArray = _dereq_('./_is-array');\nvar anObject = _dereq_('./_an-object');\nvar isObject = _dereq_('./_is-object');\nvar toIObject = _dereq_('./_to-iobject');\nvar toPrimitive = _dereq_('./_to-primitive');\nvar createDesc = _dereq_('./_property-desc');\nvar _create = _dereq_('./_object-create');\nvar gOPNExt = _dereq_('./_object-gopn-ext');\nvar $GOPD = _dereq_('./_object-gopd');\nvar $DP = _dereq_('./_object-dp');\nvar $keys = _dereq_('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n _dereq_('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n _dereq_('./_object-pie').f = $propertyIsEnumerable;\n _dereq_('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !_dereq_('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || _dereq_('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n},{\"./_an-object\":74,\"./_descriptors\":82,\"./_enum-keys\":85,\"./_export\":86,\"./_fails\":87,\"./_global\":89,\"./_has\":90,\"./_hide\":91,\"./_is-array\":97,\"./_is-object\":98,\"./_library\":105,\"./_meta\":106,\"./_object-create\":110,\"./_object-dp\":111,\"./_object-gopd\":113,\"./_object-gopn\":115,\"./_object-gopn-ext\":114,\"./_object-gops\":116,\"./_object-keys\":119,\"./_object-pie\":120,\"./_property-desc\":125,\"./_redefine\":127,\"./_set-to-string-tag\":130,\"./_shared\":132,\"./_to-iobject\":138,\"./_to-primitive\":141,\"./_uid\":142,\"./_wks\":145,\"./_wks-define\":143,\"./_wks-ext\":144}],161:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = _dereq_('./_export');\nvar $entries = _dereq_('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n},{\"./_export\":86,\"./_object-to-array\":122}],162:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = _dereq_('./_export');\nvar $values = _dereq_('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n},{\"./_export\":86,\"./_object-to-array\":122}],163:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = _dereq_('./_export');\nvar core = _dereq_('./_core');\nvar global = _dereq_('./_global');\nvar speciesConstructor = _dereq_('./_species-constructor');\nvar promiseResolve = _dereq_('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n},{\"./_core\":78,\"./_export\":86,\"./_global\":89,\"./_promise-resolve\":124,\"./_species-constructor\":133}],164:[function(_dereq_,module,exports){\n'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = _dereq_('./_export');\nvar newPromiseCapability = _dereq_('./_new-promise-capability');\nvar perform = _dereq_('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\n},{\"./_export\":86,\"./_new-promise-capability\":108,\"./_perform\":123}],165:[function(_dereq_,module,exports){\n_dereq_('./_wks-define')('asyncIterator');\n\n},{\"./_wks-define\":143}],166:[function(_dereq_,module,exports){\n_dereq_('./_wks-define')('observable');\n\n},{\"./_wks-define\":143}],167:[function(_dereq_,module,exports){\n_dereq_('./es6.array.iterator');\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar Iterators = _dereq_('./_iterators');\nvar TO_STRING_TAG = _dereq_('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n\n},{\"./_global\":89,\"./_hide\":91,\"./_iterators\":104,\"./_wks\":145,\"./es6.array.iterator\":150}],168:[function(_dereq_,module,exports){\narguments[4][71][0].apply(exports,arguments)\n},{\"dup\":71}],169:[function(_dereq_,module,exports){\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = _dereq_('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) _dereq_('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n},{\"./_hide\":193,\"./_wks\":249}],170:[function(_dereq_,module,exports){\narguments[4][73][0].apply(exports,arguments)\n},{\"dup\":73}],171:[function(_dereq_,module,exports){\narguments[4][74][0].apply(exports,arguments)\n},{\"./_is-object\":200,\"dup\":74}],172:[function(_dereq_,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = _dereq_('./_to-object');\nvar toAbsoluteIndex = _dereq_('./_to-absolute-index');\nvar toLength = _dereq_('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n},{\"./_to-absolute-index\":236,\"./_to-length\":240,\"./_to-object\":241}],173:[function(_dereq_,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = _dereq_('./_to-object');\nvar toAbsoluteIndex = _dereq_('./_to-absolute-index');\nvar toLength = _dereq_('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n},{\"./_to-absolute-index\":236,\"./_to-length\":240,\"./_to-object\":241}],174:[function(_dereq_,module,exports){\narguments[4][75][0].apply(exports,arguments)\n},{\"./_to-absolute-index\":236,\"./_to-iobject\":239,\"./_to-length\":240,\"dup\":75}],175:[function(_dereq_,module,exports){\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = _dereq_('./_ctx');\nvar IObject = _dereq_('./_iobject');\nvar toObject = _dereq_('./_to-object');\nvar toLength = _dereq_('./_to-length');\nvar asc = _dereq_('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n},{\"./_array-species-create\":177,\"./_ctx\":182,\"./_iobject\":197,\"./_to-length\":240,\"./_to-object\":241}],176:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./_is-object');\nvar isArray = _dereq_('./_is-array');\nvar SPECIES = _dereq_('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n},{\"./_is-array\":199,\"./_is-object\":200,\"./_wks\":249}],177:[function(_dereq_,module,exports){\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = _dereq_('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n},{\"./_array-species-constructor\":176}],178:[function(_dereq_,module,exports){\narguments[4][76][0].apply(exports,arguments)\n},{\"./_cof\":179,\"./_wks\":249,\"dup\":76}],179:[function(_dereq_,module,exports){\narguments[4][77][0].apply(exports,arguments)\n},{\"dup\":77}],180:[function(_dereq_,module,exports){\narguments[4][78][0].apply(exports,arguments)\n},{\"dup\":78}],181:[function(_dereq_,module,exports){\narguments[4][79][0].apply(exports,arguments)\n},{\"./_object-dp\":213,\"./_property-desc\":225,\"dup\":79}],182:[function(_dereq_,module,exports){\narguments[4][80][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"dup\":80}],183:[function(_dereq_,module,exports){\narguments[4][81][0].apply(exports,arguments)\n},{\"dup\":81}],184:[function(_dereq_,module,exports){\narguments[4][82][0].apply(exports,arguments)\n},{\"./_fails\":189,\"dup\":82}],185:[function(_dereq_,module,exports){\narguments[4][83][0].apply(exports,arguments)\n},{\"./_global\":191,\"./_is-object\":200,\"dup\":83}],186:[function(_dereq_,module,exports){\narguments[4][84][0].apply(exports,arguments)\n},{\"dup\":84}],187:[function(_dereq_,module,exports){\narguments[4][85][0].apply(exports,arguments)\n},{\"./_object-gops\":218,\"./_object-keys\":221,\"./_object-pie\":222,\"dup\":85}],188:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar hide = _dereq_('./_hide');\nvar redefine = _dereq_('./_redefine');\nvar ctx = _dereq_('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n},{\"./_core\":180,\"./_ctx\":182,\"./_global\":191,\"./_hide\":193,\"./_redefine\":227}],189:[function(_dereq_,module,exports){\narguments[4][87][0].apply(exports,arguments)\n},{\"dup\":87}],190:[function(_dereq_,module,exports){\narguments[4][88][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_ctx\":182,\"./_is-array-iter\":198,\"./_iter-call\":201,\"./_to-length\":240,\"./core.get-iterator-method\":250,\"dup\":88}],191:[function(_dereq_,module,exports){\narguments[4][89][0].apply(exports,arguments)\n},{\"dup\":89}],192:[function(_dereq_,module,exports){\narguments[4][90][0].apply(exports,arguments)\n},{\"dup\":90}],193:[function(_dereq_,module,exports){\narguments[4][91][0].apply(exports,arguments)\n},{\"./_descriptors\":184,\"./_object-dp\":213,\"./_property-desc\":225,\"dup\":91}],194:[function(_dereq_,module,exports){\narguments[4][92][0].apply(exports,arguments)\n},{\"./_global\":191,\"dup\":92}],195:[function(_dereq_,module,exports){\narguments[4][93][0].apply(exports,arguments)\n},{\"./_descriptors\":184,\"./_dom-create\":185,\"./_fails\":189,\"dup\":93}],196:[function(_dereq_,module,exports){\narguments[4][94][0].apply(exports,arguments)\n},{\"dup\":94}],197:[function(_dereq_,module,exports){\narguments[4][95][0].apply(exports,arguments)\n},{\"./_cof\":179,\"dup\":95}],198:[function(_dereq_,module,exports){\narguments[4][96][0].apply(exports,arguments)\n},{\"./_iterators\":206,\"./_wks\":249,\"dup\":96}],199:[function(_dereq_,module,exports){\narguments[4][97][0].apply(exports,arguments)\n},{\"./_cof\":179,\"dup\":97}],200:[function(_dereq_,module,exports){\narguments[4][98][0].apply(exports,arguments)\n},{\"dup\":98}],201:[function(_dereq_,module,exports){\narguments[4][99][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"dup\":99}],202:[function(_dereq_,module,exports){\narguments[4][100][0].apply(exports,arguments)\n},{\"./_hide\":193,\"./_object-create\":212,\"./_property-desc\":225,\"./_set-to-string-tag\":229,\"./_wks\":249,\"dup\":100}],203:[function(_dereq_,module,exports){\narguments[4][101][0].apply(exports,arguments)\n},{\"./_export\":188,\"./_has\":192,\"./_hide\":193,\"./_iter-create\":202,\"./_iterators\":206,\"./_library\":207,\"./_object-gpo\":219,\"./_redefine\":227,\"./_set-to-string-tag\":229,\"./_wks\":249,\"dup\":101}],204:[function(_dereq_,module,exports){\narguments[4][102][0].apply(exports,arguments)\n},{\"./_wks\":249,\"dup\":102}],205:[function(_dereq_,module,exports){\narguments[4][103][0].apply(exports,arguments)\n},{\"dup\":103}],206:[function(_dereq_,module,exports){\narguments[4][104][0].apply(exports,arguments)\n},{\"dup\":104}],207:[function(_dereq_,module,exports){\nmodule.exports = false;\n\n},{}],208:[function(_dereq_,module,exports){\narguments[4][106][0].apply(exports,arguments)\n},{\"./_fails\":189,\"./_has\":192,\"./_is-object\":200,\"./_object-dp\":213,\"./_uid\":246,\"dup\":106}],209:[function(_dereq_,module,exports){\narguments[4][107][0].apply(exports,arguments)\n},{\"./_cof\":179,\"./_global\":191,\"./_task\":235,\"dup\":107}],210:[function(_dereq_,module,exports){\narguments[4][108][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"dup\":108}],211:[function(_dereq_,module,exports){\narguments[4][109][0].apply(exports,arguments)\n},{\"./_fails\":189,\"./_iobject\":197,\"./_object-gops\":218,\"./_object-keys\":221,\"./_object-pie\":222,\"./_to-object\":241,\"dup\":109}],212:[function(_dereq_,module,exports){\narguments[4][110][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_dom-create\":185,\"./_enum-bug-keys\":186,\"./_html\":194,\"./_object-dps\":214,\"./_shared-key\":230,\"dup\":110}],213:[function(_dereq_,module,exports){\narguments[4][111][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_descriptors\":184,\"./_ie8-dom-define\":195,\"./_to-primitive\":242,\"dup\":111}],214:[function(_dereq_,module,exports){\narguments[4][112][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_descriptors\":184,\"./_object-dp\":213,\"./_object-keys\":221,\"dup\":112}],215:[function(_dereq_,module,exports){\narguments[4][113][0].apply(exports,arguments)\n},{\"./_descriptors\":184,\"./_has\":192,\"./_ie8-dom-define\":195,\"./_object-pie\":222,\"./_property-desc\":225,\"./_to-iobject\":239,\"./_to-primitive\":242,\"dup\":113}],216:[function(_dereq_,module,exports){\narguments[4][114][0].apply(exports,arguments)\n},{\"./_object-gopn\":217,\"./_to-iobject\":239,\"dup\":114}],217:[function(_dereq_,module,exports){\narguments[4][115][0].apply(exports,arguments)\n},{\"./_enum-bug-keys\":186,\"./_object-keys-internal\":220,\"dup\":115}],218:[function(_dereq_,module,exports){\narguments[4][116][0].apply(exports,arguments)\n},{\"dup\":116}],219:[function(_dereq_,module,exports){\narguments[4][117][0].apply(exports,arguments)\n},{\"./_has\":192,\"./_shared-key\":230,\"./_to-object\":241,\"dup\":117}],220:[function(_dereq_,module,exports){\narguments[4][118][0].apply(exports,arguments)\n},{\"./_array-includes\":174,\"./_has\":192,\"./_shared-key\":230,\"./_to-iobject\":239,\"dup\":118}],221:[function(_dereq_,module,exports){\narguments[4][119][0].apply(exports,arguments)\n},{\"./_enum-bug-keys\":186,\"./_object-keys-internal\":220,\"dup\":119}],222:[function(_dereq_,module,exports){\narguments[4][120][0].apply(exports,arguments)\n},{\"dup\":120}],223:[function(_dereq_,module,exports){\narguments[4][123][0].apply(exports,arguments)\n},{\"dup\":123}],224:[function(_dereq_,module,exports){\narguments[4][124][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_is-object\":200,\"./_new-promise-capability\":210,\"dup\":124}],225:[function(_dereq_,module,exports){\narguments[4][125][0].apply(exports,arguments)\n},{\"dup\":125}],226:[function(_dereq_,module,exports){\nvar redefine = _dereq_('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n\n},{\"./_redefine\":227}],227:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar has = _dereq_('./_has');\nvar SRC = _dereq_('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n_dereq_('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n},{\"./_core\":180,\"./_global\":191,\"./_has\":192,\"./_hide\":193,\"./_uid\":246}],228:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_('./_global');\nvar dP = _dereq_('./_object-dp');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar SPECIES = _dereq_('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n},{\"./_descriptors\":184,\"./_global\":191,\"./_object-dp\":213,\"./_wks\":249}],229:[function(_dereq_,module,exports){\narguments[4][130][0].apply(exports,arguments)\n},{\"./_has\":192,\"./_object-dp\":213,\"./_wks\":249,\"dup\":130}],230:[function(_dereq_,module,exports){\narguments[4][131][0].apply(exports,arguments)\n},{\"./_shared\":231,\"./_uid\":246,\"dup\":131}],231:[function(_dereq_,module,exports){\narguments[4][132][0].apply(exports,arguments)\n},{\"./_global\":191,\"dup\":132}],232:[function(_dereq_,module,exports){\narguments[4][133][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"./_an-object\":171,\"./_wks\":249,\"dup\":133}],233:[function(_dereq_,module,exports){\narguments[4][134][0].apply(exports,arguments)\n},{\"./_defined\":183,\"./_to-integer\":238,\"dup\":134}],234:[function(_dereq_,module,exports){\n'use strict';\nvar toInteger = _dereq_('./_to-integer');\nvar defined = _dereq_('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n\n},{\"./_defined\":183,\"./_to-integer\":238}],235:[function(_dereq_,module,exports){\narguments[4][135][0].apply(exports,arguments)\n},{\"./_cof\":179,\"./_ctx\":182,\"./_dom-create\":185,\"./_global\":191,\"./_html\":194,\"./_invoke\":196,\"dup\":135}],236:[function(_dereq_,module,exports){\narguments[4][136][0].apply(exports,arguments)\n},{\"./_to-integer\":238,\"dup\":136}],237:[function(_dereq_,module,exports){\n// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = _dereq_('./_to-integer');\nvar toLength = _dereq_('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n\n},{\"./_to-integer\":238,\"./_to-length\":240}],238:[function(_dereq_,module,exports){\narguments[4][137][0].apply(exports,arguments)\n},{\"dup\":137}],239:[function(_dereq_,module,exports){\narguments[4][138][0].apply(exports,arguments)\n},{\"./_defined\":183,\"./_iobject\":197,\"dup\":138}],240:[function(_dereq_,module,exports){\narguments[4][139][0].apply(exports,arguments)\n},{\"./_to-integer\":238,\"dup\":139}],241:[function(_dereq_,module,exports){\narguments[4][140][0].apply(exports,arguments)\n},{\"./_defined\":183,\"dup\":140}],242:[function(_dereq_,module,exports){\narguments[4][141][0].apply(exports,arguments)\n},{\"./_is-object\":200,\"dup\":141}],243:[function(_dereq_,module,exports){\n'use strict';\nif (_dereq_('./_descriptors')) {\n var LIBRARY = _dereq_('./_library');\n var global = _dereq_('./_global');\n var fails = _dereq_('./_fails');\n var $export = _dereq_('./_export');\n var $typed = _dereq_('./_typed');\n var $buffer = _dereq_('./_typed-buffer');\n var ctx = _dereq_('./_ctx');\n var anInstance = _dereq_('./_an-instance');\n var propertyDesc = _dereq_('./_property-desc');\n var hide = _dereq_('./_hide');\n var redefineAll = _dereq_('./_redefine-all');\n var toInteger = _dereq_('./_to-integer');\n var toLength = _dereq_('./_to-length');\n var toIndex = _dereq_('./_to-index');\n var toAbsoluteIndex = _dereq_('./_to-absolute-index');\n var toPrimitive = _dereq_('./_to-primitive');\n var has = _dereq_('./_has');\n var classof = _dereq_('./_classof');\n var isObject = _dereq_('./_is-object');\n var toObject = _dereq_('./_to-object');\n var isArrayIter = _dereq_('./_is-array-iter');\n var create = _dereq_('./_object-create');\n var getPrototypeOf = _dereq_('./_object-gpo');\n var gOPN = _dereq_('./_object-gopn').f;\n var getIterFn = _dereq_('./core.get-iterator-method');\n var uid = _dereq_('./_uid');\n var wks = _dereq_('./_wks');\n var createArrayMethod = _dereq_('./_array-methods');\n var createArrayIncludes = _dereq_('./_array-includes');\n var speciesConstructor = _dereq_('./_species-constructor');\n var ArrayIterators = _dereq_('./es6.array.iterator');\n var Iterators = _dereq_('./_iterators');\n var $iterDetect = _dereq_('./_iter-detect');\n var setSpecies = _dereq_('./_set-species');\n var arrayFill = _dereq_('./_array-fill');\n var arrayCopyWithin = _dereq_('./_array-copy-within');\n var $DP = _dereq_('./_object-dp');\n var $GOPD = _dereq_('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n\n},{\"./_an-instance\":170,\"./_array-copy-within\":172,\"./_array-fill\":173,\"./_array-includes\":174,\"./_array-methods\":175,\"./_classof\":178,\"./_ctx\":182,\"./_descriptors\":184,\"./_export\":188,\"./_fails\":189,\"./_global\":191,\"./_has\":192,\"./_hide\":193,\"./_is-array-iter\":198,\"./_is-object\":200,\"./_iter-detect\":204,\"./_iterators\":206,\"./_library\":207,\"./_object-create\":212,\"./_object-dp\":213,\"./_object-gopd\":215,\"./_object-gopn\":217,\"./_object-gpo\":219,\"./_property-desc\":225,\"./_redefine-all\":226,\"./_set-species\":228,\"./_species-constructor\":232,\"./_to-absolute-index\":236,\"./_to-index\":237,\"./_to-integer\":238,\"./_to-length\":240,\"./_to-object\":241,\"./_to-primitive\":242,\"./_typed\":245,\"./_typed-buffer\":244,\"./_uid\":246,\"./_wks\":249,\"./core.get-iterator-method\":250,\"./es6.array.iterator\":254}],244:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_('./_global');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar LIBRARY = _dereq_('./_library');\nvar $typed = _dereq_('./_typed');\nvar hide = _dereq_('./_hide');\nvar redefineAll = _dereq_('./_redefine-all');\nvar fails = _dereq_('./_fails');\nvar anInstance = _dereq_('./_an-instance');\nvar toInteger = _dereq_('./_to-integer');\nvar toLength = _dereq_('./_to-length');\nvar toIndex = _dereq_('./_to-index');\nvar gOPN = _dereq_('./_object-gopn').f;\nvar dP = _dereq_('./_object-dp').f;\nvar arrayFill = _dereq_('./_array-fill');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n\n},{\"./_an-instance\":170,\"./_array-fill\":173,\"./_descriptors\":184,\"./_fails\":189,\"./_global\":191,\"./_hide\":193,\"./_library\":207,\"./_object-dp\":213,\"./_object-gopn\":217,\"./_redefine-all\":226,\"./_set-to-string-tag\":229,\"./_to-index\":237,\"./_to-integer\":238,\"./_to-length\":240,\"./_typed\":245}],245:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar uid = _dereq_('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n\n},{\"./_global\":191,\"./_hide\":193,\"./_uid\":246}],246:[function(_dereq_,module,exports){\narguments[4][142][0].apply(exports,arguments)\n},{\"dup\":142}],247:[function(_dereq_,module,exports){\narguments[4][143][0].apply(exports,arguments)\n},{\"./_core\":180,\"./_global\":191,\"./_library\":207,\"./_object-dp\":213,\"./_wks-ext\":248,\"dup\":143}],248:[function(_dereq_,module,exports){\narguments[4][144][0].apply(exports,arguments)\n},{\"./_wks\":249,\"dup\":144}],249:[function(_dereq_,module,exports){\narguments[4][145][0].apply(exports,arguments)\n},{\"./_global\":191,\"./_shared\":231,\"./_uid\":246,\"dup\":145}],250:[function(_dereq_,module,exports){\narguments[4][146][0].apply(exports,arguments)\n},{\"./_classof\":178,\"./_core\":180,\"./_iterators\":206,\"./_wks\":249,\"dup\":146}],251:[function(_dereq_,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = _dereq_('./_export');\n\n$export($export.P, 'Array', { fill: _dereq_('./_array-fill') });\n\n_dereq_('./_add-to-unscopables')('fill');\n\n},{\"./_add-to-unscopables\":169,\"./_array-fill\":173,\"./_export\":188}],252:[function(_dereq_,module,exports){\n'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = _dereq_('./_export');\nvar $find = _dereq_('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_dereq_('./_add-to-unscopables')(KEY);\n\n},{\"./_add-to-unscopables\":169,\"./_array-methods\":175,\"./_export\":188}],253:[function(_dereq_,module,exports){\narguments[4][149][0].apply(exports,arguments)\n},{\"./_create-property\":181,\"./_ctx\":182,\"./_export\":188,\"./_is-array-iter\":198,\"./_iter-call\":201,\"./_iter-detect\":204,\"./_to-length\":240,\"./_to-object\":241,\"./core.get-iterator-method\":250,\"dup\":149}],254:[function(_dereq_,module,exports){\narguments[4][150][0].apply(exports,arguments)\n},{\"./_add-to-unscopables\":169,\"./_iter-define\":203,\"./_iter-step\":205,\"./_iterators\":206,\"./_to-iobject\":239,\"dup\":150}],255:[function(_dereq_,module,exports){\narguments[4][151][0].apply(exports,arguments)\n},{\"./_export\":188,\"./_object-assign\":211,\"dup\":151}],256:[function(_dereq_,module,exports){\n'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = _dereq_('./_classof');\nvar test = {};\ntest[_dereq_('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n _dereq_('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n\n},{\"./_classof\":178,\"./_redefine\":227,\"./_wks\":249}],257:[function(_dereq_,module,exports){\narguments[4][158][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"./_an-instance\":170,\"./_classof\":178,\"./_core\":180,\"./_ctx\":182,\"./_export\":188,\"./_for-of\":190,\"./_global\":191,\"./_is-object\":200,\"./_iter-detect\":204,\"./_library\":207,\"./_microtask\":209,\"./_new-promise-capability\":210,\"./_perform\":223,\"./_promise-resolve\":224,\"./_redefine-all\":226,\"./_set-species\":228,\"./_set-to-string-tag\":229,\"./_species-constructor\":232,\"./_task\":235,\"./_wks\":249,\"dup\":158}],258:[function(_dereq_,module,exports){\narguments[4][159][0].apply(exports,arguments)\n},{\"./_iter-define\":203,\"./_string-at\":233,\"dup\":159}],259:[function(_dereq_,module,exports){\nvar $export = _dereq_('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: _dereq_('./_string-repeat')\n});\n\n},{\"./_export\":188,\"./_string-repeat\":234}],260:[function(_dereq_,module,exports){\narguments[4][160][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_descriptors\":184,\"./_enum-keys\":187,\"./_export\":188,\"./_fails\":189,\"./_global\":191,\"./_has\":192,\"./_hide\":193,\"./_is-array\":199,\"./_is-object\":200,\"./_library\":207,\"./_meta\":208,\"./_object-create\":212,\"./_object-dp\":213,\"./_object-gopd\":215,\"./_object-gopn\":217,\"./_object-gopn-ext\":216,\"./_object-gops\":218,\"./_object-keys\":221,\"./_object-pie\":222,\"./_property-desc\":225,\"./_redefine\":227,\"./_set-to-string-tag\":229,\"./_shared\":231,\"./_to-iobject\":239,\"./_to-primitive\":242,\"./_uid\":246,\"./_wks\":249,\"./_wks-define\":247,\"./_wks-ext\":248,\"dup\":160}],261:[function(_dereq_,module,exports){\n_dereq_('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"./_typed-array\":243}],262:[function(_dereq_,module,exports){\narguments[4][163][0].apply(exports,arguments)\n},{\"./_core\":180,\"./_export\":188,\"./_global\":191,\"./_promise-resolve\":224,\"./_species-constructor\":232,\"dup\":163}],263:[function(_dereq_,module,exports){\narguments[4][164][0].apply(exports,arguments)\n},{\"./_export\":188,\"./_new-promise-capability\":210,\"./_perform\":223,\"dup\":164}],264:[function(_dereq_,module,exports){\narguments[4][165][0].apply(exports,arguments)\n},{\"./_wks-define\":247,\"dup\":165}],265:[function(_dereq_,module,exports){\narguments[4][166][0].apply(exports,arguments)\n},{\"./_wks-define\":247,\"dup\":166}],266:[function(_dereq_,module,exports){\nvar $iterators = _dereq_('./es6.array.iterator');\nvar getKeys = _dereq_('./_object-keys');\nvar redefine = _dereq_('./_redefine');\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar Iterators = _dereq_('./_iterators');\nvar wks = _dereq_('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n\n},{\"./_global\":191,\"./_hide\":193,\"./_iterators\":206,\"./_object-keys\":221,\"./_redefine\":227,\"./_wks\":249,\"./es6.array.iterator\":254}],267:[function(_dereq_,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = _dereq_('../package.json').version;\nelliptic.utils = _dereq_('./elliptic/utils');\nelliptic.rand = _dereq_('brorand');\nelliptic.curve = _dereq_('./elliptic/curve');\nelliptic.curves = _dereq_('./elliptic/curves');\n\n// Protocols\nelliptic.ec = _dereq_('./elliptic/ec');\nelliptic.eddsa = _dereq_('./elliptic/eddsa');\n\n},{\"../package.json\":282,\"./elliptic/curve\":270,\"./elliptic/curves\":273,\"./elliptic/ec\":274,\"./elliptic/eddsa\":277,\"./elliptic/utils\":281,\"brorand\":45}],268:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n\n},{\"../../elliptic\":267,\"bn.js\":44}],269:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = _dereq_('../curve');\nvar elliptic = _dereq_('../../elliptic');\nvar BN = _dereq_('bn.js');\nvar inherits = _dereq_('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n\n},{\"../../elliptic\":267,\"../curve\":270,\"bn.js\":44,\"inherits\":298}],270:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = _dereq_('./base');\ncurve.short = _dereq_('./short');\ncurve.mont = _dereq_('./mont');\ncurve.edwards = _dereq_('./edwards');\n\n},{\"./base\":268,\"./edwards\":269,\"./mont\":271,\"./short\":272}],271:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = _dereq_('../curve');\nvar BN = _dereq_('bn.js');\nvar inherits = _dereq_('inherits');\nvar Base = curve.base;\n\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n // Note: this implementation is according to the original paper\n // by P. Montgomery, NOT the one by D. J. Bernstein.\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n var bytes = utils.toArray(bytes, enc);\n\n // TODO Curve448\n // Montgomery curve points must be represented in the compressed format\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (bytes.length === 33 && bytes[0] === 0x40)\n bytes = bytes.slice(1, 33).reverse(); // point must be little-endian\n if (bytes.length !== 32)\n throw new Error('Unknown point compression format');\n return this.point(bytes, 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n\n // Note: the output should always be little-endian\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (compact) {\n return [ 0x40 ].concat(this.getX().toArray('le', len));\n } else {\n return this.getX().toArray('be', len);\n }\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n\n},{\"../../elliptic\":267,\"../curve\":270,\"bn.js\":44,\"inherits\":298}],272:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = _dereq_('../curve');\nvar elliptic = _dereq_('../../elliptic');\nvar BN = _dereq_('bn.js');\nvar inherits = _dereq_('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\n},{\"../../elliptic\":267,\"../curve\":270,\"bn.js\":44,\"inherits\":298}],273:[function(_dereq_,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = _dereq_('hash.js');\nvar elliptic = _dereq_('../elliptic');\n\nvar assert = elliptic.utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new elliptic.curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new elliptic.curve.edwards(options);\n else if (options.type === 'mont')\n this.curve = new elliptic.curve.mont(options);\n else throw new Error('Unknown curve type.');\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, n*G != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\n// https://tools.ietf.org/html/rfc7748#section-4.1\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n cofactor: '8',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n cofactor: '8',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.4\ndefineCurve('brainpoolP256r1', {\n type: 'short',\n prime: null,\n p: 'A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 2013481D 1F6E5377',\n a: '7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C E94A4B44 F330B5D9',\n b: '26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 6BCCDC18 FF8C07B6',\n n: 'A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 901E0E82 974856A7',\n hash: hash.sha256, // or 384, or 512\n gRed: false,\n g: [\n '8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262',\n '547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.6\ndefineCurve('brainpoolP384r1', {\n type: 'short',\n prime: null,\n p: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 12B1DA19 7FB71123' +\n 'ACD3A729 901D1A71 87470013 3107EC53',\n a: '7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 139165EF BA91F90F' +\n '8AA5814A 503AD4EB 04A8C7DD 22CE2826',\n b: '04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 2E880EA5 3EEB62D5' +\n '7CB43902 95DBC994 3AB78696 FA504C11',\n n: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 1F166E6C AC0425A7' +\n 'CF3AB6AF 6B7FC310 3B883202 E9046565',\n hash: hash.sha384, // or 512\n gRed: false,\n g: [\n '1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10' +\n 'E8E826E03436D646AAEF87B2E247D4AF1E',\n '8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129' +\n '280E4646217791811142820341263C5315'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.7\ndefineCurve('brainpoolP512r1', {\n type: 'short',\n prime: null,\n p: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330871' +\n '7D4D9B00 9BC66842 AECDA12A E6A380E6 2881FF2F 2D82C685 28AA6056 583A48F3',\n a: '7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 A83441CA EA9863BC' +\n '2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA',\n b: '3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7' +\n '2BF2C7B9 E7C1AC4D 77FC94CA DC083E67 984050B7 5EBAE5DD 2809BD63 8016F723',\n n: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330870' +\n '553E5C41 4CA92619 41866119 7FAC1047 1DB1D381 085DDADD B5879682 9CA90069',\n hash: hash.sha512,\n gRed: false,\n g: [\n '81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D009' +\n '8EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822',\n '7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F81' +\n '11B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892'\n ]\n});\n\n// https://en.bitcoin.it/wiki/Secp256k1\nvar pre;\ntry {\n pre = _dereq_('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n\n},{\"../elliptic\":267,\"./precomputed/secp256k1\":280,\"hash.js\":284}],274:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar HmacDRBG = _dereq_('hmac-drbg');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = _dereq_('./key');\nvar Signature = _dereq_('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = elliptic.curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof elliptic.curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n // Key generation for curve25519 is simpler\n if (this.curve.type === 'mont') {\n var priv = new BN(drbg.generate(32));\n return this.keyFromPrivate(priv);\n }\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../../elliptic\":267,\"./key\":275,\"./signature\":276,\"bn.js\":44,\"hmac-drbg\":296}],275:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\n// TODO: should not validate for X25519\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc, compact) {\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // For Curve25519/Curve448 we have a specific procedure.\n // TODO Curve448\n if (this.ec.curve.type === 'mont') {\n var one = this.ec.curve.one;\n var mask = one.ushln(255 - 3).sub(one).ushln(3);\n this.priv = this.priv.or(one.ushln(255 - 1));\n this.priv = this.priv.and(mask);\n } else\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n var x = pub.mul(this.priv).getX();\n var len = x.byteLength();\n\n // Note: this is not ideal, but the RFC's are unclear\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (this.ec.curve.type === 'mont') {\n return x.toArray('le', len);\n } else {\n return x.toArray('be', len);\n }\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../../elliptic\":267,\"bn.js\":44}],276:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\n\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n\n},{\"../../elliptic\":267,\"bn.js\":44}],277:[function(_dereq_,module,exports){\n'use strict';\n\nvar hash = _dereq_('hash.js');\nvar HmacDRBG = _dereq_('hmac-drbg');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = _dereq_('./key');\nvar Signature = _dereq_('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n var curve = elliptic.curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.curve.n.toArray()\n });\n\n return this.keyFromSecret(drbg.generate(32));\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n\n},{\"../../elliptic\":267,\"./key\":278,\"./signature\":279,\"hash.js\":284,\"hmac-drbg\":296}],278:[function(_dereq_,module,exports){\n'use strict';\n\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n if (params.hasOwnProperty('secret'))\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else {\n this._pubBytes = parseBytes(params.pub);\n if (this._pubBytes && this._pubBytes.length === 33 &&\n this._pubBytes[0] === 0x40)\n this._pubBytes = this._pubBytes.slice(1, 33);\n if (this._pubBytes && this._pubBytes.length !== 32)\n throw new Error('Unknown point compression format');\n }\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n // https://tools.ietf.org/html/rfc8032#section-5.1.5\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc, compact) {\n return utils.encode((compact ? [ 0x40 ] : []).concat(this.pubBytes()), enc);\n};\n\nmodule.exports = KeyPair;\n\n},{\"../../elliptic\":267}],279:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n\n},{\"../../elliptic\":267,\"bn.js\":44}],280:[function(_dereq_,module,exports){\nmodule.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n\n},{}],281:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = _dereq_('bn.js');\nvar minAssert = _dereq_('minimalistic-assert');\nvar minUtils = _dereq_('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":44,\"minimalistic-assert\":299,\"minimalistic-crypto-utils\":300}],282:[function(_dereq_,module,exports){\nmodule.exports={\n \"_args\": [\n [\n \"github:openpgpjs/elliptic\",\n \"/Users/sunny/Desktop/Protonmail/openpgpjs\"\n ]\n ],\n \"_from\": \"github:openpgpjs/elliptic\",\n \"_id\": \"elliptic@github:openpgpjs/elliptic#e187e706e11fa51bcd20e46e5119054be4e2a4a6\",\n \"_inBundle\": false,\n \"_integrity\": \"\",\n \"_location\": \"/elliptic\",\n \"_phantomChildren\": {},\n \"_requested\": {\n \"type\": \"git\",\n \"raw\": \"github:openpgpjs/elliptic\",\n \"rawSpec\": \"github:openpgpjs/elliptic\",\n \"saveSpec\": \"github:openpgpjs/elliptic\",\n \"fetchSpec\": null,\n \"gitCommittish\": null\n },\n \"_requiredBy\": [\n \"/\"\n ],\n \"_resolved\": \"github:openpgpjs/elliptic#e187e706e11fa51bcd20e46e5119054be4e2a4a6\",\n \"_spec\": \"github:openpgpjs/elliptic\",\n \"_where\": \"/Users/sunny/Desktop/Protonmail/openpgpjs\",\n \"author\": {\n \"name\": \"Fedor Indutny\",\n \"email\": \"fedor@indutny.com\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/indutny/elliptic/issues\"\n },\n \"dependencies\": {\n \"bn.js\": \"^4.4.0\",\n \"brorand\": \"^1.0.1\",\n \"hash.js\": \"^1.0.0\",\n \"hmac-drbg\": \"^1.0.0\",\n \"inherits\": \"^2.0.1\",\n \"minimalistic-assert\": \"^1.0.0\",\n \"minimalistic-crypto-utils\": \"^1.0.0\"\n },\n \"description\": \"EC cryptography\",\n \"devDependencies\": {\n \"brfs\": \"^1.4.3\",\n \"coveralls\": \"^2.11.3\",\n \"grunt\": \"^0.4.5\",\n \"grunt-browserify\": \"^5.0.0\",\n \"grunt-cli\": \"^1.2.0\",\n \"grunt-contrib-connect\": \"^1.0.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"^1.0.1\",\n \"grunt-mocha-istanbul\": \"^3.0.1\",\n \"grunt-saucelabs\": \"^8.6.2\",\n \"istanbul\": \"^0.4.2\",\n \"jscs\": \"^2.9.0\",\n \"jshint\": \"^2.6.0\",\n \"mocha\": \"^2.1.0\"\n },\n \"files\": [\n \"lib\"\n ],\n \"homepage\": \"https://github.com/indutny/elliptic\",\n \"keywords\": [\n \"EC\",\n \"Elliptic\",\n \"curve\",\n \"Cryptography\"\n ],\n \"license\": \"MIT\",\n \"main\": \"lib/elliptic.js\",\n \"name\": \"elliptic\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n },\n \"scripts\": {\n \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n \"lint\": \"npm run jscs && npm run jshint\",\n \"test\": \"npm run lint && npm run unit\",\n \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n \"version\": \"grunt dist && git add dist/\"\n },\n \"version\": \"6.4.0\"\n}\n\n},{}],283:[function(_dereq_,module,exports){\n\n// email-addresses.js - RFC 5322 email address parser\n// v 3.0.1\n//\n// http://tools.ietf.org/html/rfc5322\n//\n// This library does not validate email addresses.\n// emailAddresses attempts to parse addresses using the (fairly liberal)\n// grammar specified in RFC 5322.\n//\n// email-addresses returns {\n// ast: <an abstract syntax tree based on rfc5322>,\n// addresses: [{\n// node: <node in ast for this address>,\n// name: <display-name>,\n// address: <addr-spec>,\n// local: <local-part>,\n// domain: <domain>\n// }, ...]\n// }\n//\n// emailAddresses.parseOneAddress and emailAddresses.parseAddressList\n// work as you might expect. Try it out.\n//\n// Many thanks to Dominic Sayers and his documentation on the is_email function,\n// http://code.google.com/p/isemail/ , which helped greatly in writing this parser.\n\n(function (global) {\n\"use strict\";\n\nfunction parse5322(opts) {\n\n // tokenizing functions\n\n function inStr() { return pos < len; }\n function curTok() { return parseString[pos]; }\n function getPos() { return pos; }\n function setPos(i) { pos = i; }\n function nextTok() { pos += 1; }\n function initialize() {\n pos = 0;\n len = parseString.length;\n }\n\n // parser helper functions\n\n function o(name, value) {\n return {\n name: name,\n tokens: value || \"\",\n semantic: value || \"\",\n children: []\n };\n }\n\n function wrap(name, ast) {\n var n;\n if (ast === null) { return null; }\n n = o(name);\n n.tokens = ast.tokens;\n n.semantic = ast.semantic;\n n.children.push(ast);\n return n;\n }\n\n function add(parent, child) {\n if (child !== null) {\n parent.tokens += child.tokens;\n parent.semantic += child.semantic;\n }\n parent.children.push(child);\n return parent;\n }\n\n function compareToken(fxnCompare) {\n var tok;\n if (!inStr()) { return null; }\n tok = curTok();\n if (fxnCompare(tok)) {\n nextTok();\n return o('token', tok);\n }\n return null;\n }\n\n function literal(lit) {\n return function literalFunc() {\n return wrap('literal', compareToken(function (tok) {\n return tok === lit;\n }));\n };\n }\n\n function and() {\n var args = arguments;\n return function andFunc() {\n var i, s, result, start;\n start = getPos();\n s = o('and');\n for (i = 0; i < args.length; i += 1) {\n result = args[i]();\n if (result === null) {\n setPos(start);\n return null;\n }\n add(s, result);\n }\n return s;\n };\n }\n\n function or() {\n var args = arguments;\n return function orFunc() {\n var i, result, start;\n start = getPos();\n for (i = 0; i < args.length; i += 1) {\n result = args[i]();\n if (result !== null) {\n return result;\n }\n setPos(start);\n }\n return null;\n };\n }\n\n function opt(prod) {\n return function optFunc() {\n var result, start;\n start = getPos();\n result = prod();\n if (result !== null) {\n return result;\n }\n else {\n setPos(start);\n return o('opt');\n }\n };\n }\n\n function invis(prod) {\n return function invisFunc() {\n var result = prod();\n if (result !== null) {\n result.semantic = \"\";\n }\n return result;\n };\n }\n\n function colwsp(prod) {\n return function collapseSemanticWhitespace() {\n var result = prod();\n if (result !== null && result.semantic.length > 0) {\n result.semantic = \" \";\n }\n return result;\n };\n }\n\n function star(prod, minimum) {\n return function starFunc() {\n var s, result, count, start, min;\n start = getPos();\n s = o('star');\n count = 0;\n min = minimum === undefined ? 0 : minimum;\n while ((result = prod()) !== null) {\n count = count + 1;\n add(s, result);\n }\n if (count >= min) {\n return s;\n }\n else {\n setPos(start);\n return null;\n }\n };\n }\n\n // One expects names to get normalized like this:\n // \" First Last \" -> \"First Last\"\n // \"First Last\" -> \"First Last\"\n // \"First Last\" -> \"First Last\"\n function collapseWhitespace(s) {\n return s.replace(/([ \\t]|\\r\\n)+/g, ' ').replace(/^\\s*/, '').replace(/\\s*$/, '');\n }\n\n // UTF-8 pseudo-production (RFC 6532)\n // RFC 6532 extends RFC 5322 productions to include UTF-8\n // using the following productions:\n // UTF8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4\n // UTF8-2 = <Defined in Section 4 of RFC3629>\n // UTF8-3 = <Defined in Section 4 of RFC3629>\n // UTF8-4 = <Defined in Section 4 of RFC3629>\n //\n // For reference, the extended RFC 5322 productions are:\n // VCHAR =/ UTF8-non-ascii\n // ctext =/ UTF8-non-ascii\n // atext =/ UTF8-non-ascii\n // qtext =/ UTF8-non-ascii\n // dtext =/ UTF8-non-ascii\n function isUTF8NonAscii(tok) {\n // In JavaScript, we just deal directly with Unicode code points,\n // so we aren't checking individual bytes for UTF-8 encoding.\n // Just check that the character is non-ascii.\n return tok.charCodeAt(0) >= 128;\n }\n\n\n // common productions (RFC 5234)\n // http://tools.ietf.org/html/rfc5234\n // B.1. Core Rules\n\n // CR = %x0D\n // ; carriage return\n function cr() { return wrap('cr', literal('\\r')()); }\n\n // CRLF = CR LF\n // ; Internet standard newline\n function crlf() { return wrap('crlf', and(cr, lf)()); }\n\n // DQUOTE = %x22\n // ; \" (Double Quote)\n function dquote() { return wrap('dquote', literal('\"')()); }\n\n // HTAB = %x09\n // ; horizontal tab\n function htab() { return wrap('htab', literal('\\t')()); }\n\n // LF = %x0A\n // ; linefeed\n function lf() { return wrap('lf', literal('\\n')()); }\n\n // SP = %x20\n function sp() { return wrap('sp', literal(' ')()); }\n\n // VCHAR = %x21-7E\n // ; visible (printing) characters\n function vchar() {\n return wrap('vchar', compareToken(function vcharFunc(tok) {\n var code = tok.charCodeAt(0);\n var accept = (0x21 <= code && code <= 0x7E);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n }));\n }\n\n // WSP = SP / HTAB\n // ; white space\n function wsp() { return wrap('wsp', or(sp, htab)()); }\n\n\n // email productions (RFC 5322)\n // http://tools.ietf.org/html/rfc5322\n // 3.2.1. Quoted characters\n\n // quoted-pair = (\"\\\" (VCHAR / WSP)) / obs-qp\n function quotedPair() {\n var qp = wrap('quoted-pair',\n or(\n and(literal('\\\\'), or(vchar, wsp)),\n obsQP\n )());\n if (qp === null) { return null; }\n // a quoted pair will be two characters, and the \"\\\" character\n // should be semantically \"invisible\" (RFC 5322 3.2.1)\n qp.semantic = qp.semantic[1];\n return qp;\n }\n\n // 3.2.2. Folding White Space and Comments\n\n // FWS = ([*WSP CRLF] 1*WSP) / obs-FWS\n function fws() {\n return wrap('fws', or(\n obsFws,\n and(\n opt(and(\n star(wsp),\n invis(crlf)\n )),\n star(wsp, 1)\n )\n )());\n }\n\n // ctext = %d33-39 / ; Printable US-ASCII\n // %d42-91 / ; characters not including\n // %d93-126 / ; \"(\", \")\", or \"\\\"\n // obs-ctext\n function ctext() {\n return wrap('ctext', or(\n function ctextFunc1() {\n return compareToken(function ctextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 <= code && code <= 39) ||\n (42 <= code && code <= 91) ||\n (93 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsCtext\n )());\n }\n\n // ccontent = ctext / quoted-pair / comment\n function ccontent() {\n return wrap('ccontent', or(ctext, quotedPair, comment)());\n }\n\n // comment = \"(\" *([FWS] ccontent) [FWS] \")\"\n function comment() {\n return wrap('comment', and(\n literal('('),\n star(and(opt(fws), ccontent)),\n opt(fws),\n literal(')')\n )());\n }\n\n // CFWS = (1*([FWS] comment) [FWS]) / FWS\n function cfws() {\n return wrap('cfws', or(\n and(\n star(\n and(opt(fws), comment),\n 1\n ),\n opt(fws)\n ),\n fws\n )());\n }\n\n // 3.2.3. Atom\n\n //atext = ALPHA / DIGIT / ; Printable US-ASCII\n // \"!\" / \"#\" / ; characters not including\n // \"$\" / \"%\" / ; specials. Used for atoms.\n // \"&\" / \"'\" /\n // \"*\" / \"+\" /\n // \"-\" / \"/\" /\n // \"=\" / \"?\" /\n // \"^\" / \"_\" /\n // \"`\" / \"{\" /\n // \"|\" / \"}\" /\n // \"~\"\n function atext() {\n return wrap('atext', compareToken(function atextFunc(tok) {\n var accept =\n ('a' <= tok && tok <= 'z') ||\n ('A' <= tok && tok <= 'Z') ||\n ('0' <= tok && tok <= '9') ||\n (['!', '#', '$', '%', '&', '\\'', '*', '+', '-', '/',\n '=', '?', '^', '_', '`', '{', '|', '}', '~'].indexOf(tok) >= 0);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n }));\n }\n\n // atom = [CFWS] 1*atext [CFWS]\n function atom() {\n return wrap('atom', and(colwsp(opt(cfws)), star(atext, 1), colwsp(opt(cfws)))());\n }\n\n // dot-atom-text = 1*atext *(\".\" 1*atext)\n function dotAtomText() {\n var s, maybeText;\n s = wrap('dot-atom-text', star(atext, 1)());\n if (s === null) { return s; }\n maybeText = star(and(literal('.'), star(atext, 1)))();\n if (maybeText !== null) {\n add(s, maybeText);\n }\n return s;\n }\n\n // dot-atom = [CFWS] dot-atom-text [CFWS]\n function dotAtom() {\n return wrap('dot-atom', and(invis(opt(cfws)), dotAtomText, invis(opt(cfws)))());\n }\n\n // 3.2.4. Quoted Strings\n\n // qtext = %d33 / ; Printable US-ASCII\n // %d35-91 / ; characters not including\n // %d93-126 / ; \"\\\" or the quote character\n // obs-qtext\n function qtext() {\n return wrap('qtext', or(\n function qtextFunc1() {\n return compareToken(function qtextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 === code) ||\n (35 <= code && code <= 91) ||\n (93 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsQtext\n )());\n }\n\n // qcontent = qtext / quoted-pair\n function qcontent() {\n return wrap('qcontent', or(qtext, quotedPair)());\n }\n\n // quoted-string = [CFWS]\n // DQUOTE *([FWS] qcontent) [FWS] DQUOTE\n // [CFWS]\n function quotedString() {\n return wrap('quoted-string', and(\n invis(opt(cfws)),\n invis(dquote), star(and(opt(colwsp(fws)), qcontent)), opt(invis(fws)), invis(dquote),\n invis(opt(cfws))\n )());\n }\n\n // 3.2.5 Miscellaneous Tokens\n\n // word = atom / quoted-string\n function word() {\n return wrap('word', or(atom, quotedString)());\n }\n\n // phrase = 1*word / obs-phrase\n function phrase() {\n return wrap('phrase', or(obsPhrase, star(word, 1))());\n }\n\n // 3.4. Address Specification\n // address = mailbox / group\n function address() {\n return wrap('address', or(mailbox, group)());\n }\n\n // mailbox = name-addr / addr-spec\n function mailbox() {\n return wrap('mailbox', or(nameAddr, addrSpec)());\n }\n\n // name-addr = [display-name] angle-addr\n function nameAddr() {\n return wrap('name-addr', and(opt(displayName), angleAddr)());\n }\n\n // angle-addr = [CFWS] \"<\" addr-spec \">\" [CFWS] /\n // obs-angle-addr\n function angleAddr() {\n return wrap('angle-addr', or(\n and(\n invis(opt(cfws)),\n literal('<'),\n addrSpec,\n literal('>'),\n invis(opt(cfws))\n ),\n obsAngleAddr\n )());\n }\n\n // group = display-name \":\" [group-list] \";\" [CFWS]\n function group() {\n return wrap('group', and(\n displayName,\n literal(':'),\n opt(groupList),\n literal(';'),\n invis(opt(cfws))\n )());\n }\n\n // display-name = phrase\n function displayName() {\n return wrap('display-name', function phraseFixedSemantic() {\n var result = phrase();\n if (result !== null) {\n result.semantic = collapseWhitespace(result.semantic);\n }\n return result;\n }());\n }\n\n // mailbox-list = (mailbox *(\",\" mailbox)) / obs-mbox-list\n function mailboxList() {\n return wrap('mailbox-list', or(\n and(\n mailbox,\n star(and(literal(','), mailbox))\n ),\n obsMboxList\n )());\n }\n\n // address-list = (address *(\",\" address)) / obs-addr-list\n function addressList() {\n return wrap('address-list', or(\n and(\n address,\n star(and(literal(','), address))\n ),\n obsAddrList\n )());\n }\n\n // group-list = mailbox-list / CFWS / obs-group-list\n function groupList() {\n return wrap('group-list', or(\n mailboxList,\n invis(cfws),\n obsGroupList\n )());\n }\n\n // 3.4.1 Addr-Spec Specification\n\n // local-part = dot-atom / quoted-string / obs-local-part\n function localPart() {\n // note: quoted-string, dotAtom are proper subsets of obs-local-part\n // so we really just have to look for obsLocalPart, if we don't care about the exact parse tree\n return wrap('local-part', or(obsLocalPart, dotAtom, quotedString)());\n }\n\n // dtext = %d33-90 / ; Printable US-ASCII\n // %d94-126 / ; characters not including\n // obs-dtext ; \"[\", \"]\", or \"\\\"\n function dtext() {\n return wrap('dtext', or(\n function dtextFunc1() {\n return compareToken(function dtextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 <= code && code <= 90) ||\n (94 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsDtext\n )()\n );\n }\n\n // domain-literal = [CFWS] \"[\" *([FWS] dtext) [FWS] \"]\" [CFWS]\n function domainLiteral() {\n return wrap('domain-literal', and(\n invis(opt(cfws)),\n literal('['),\n star(and(opt(fws), dtext)),\n opt(fws),\n literal(']'),\n invis(opt(cfws))\n )());\n }\n\n // domain = dot-atom / domain-literal / obs-domain\n function domain() {\n return wrap('domain', function domainCheckTLD() {\n var result = or(obsDomain, dotAtom, domainLiteral)();\n if (opts.rejectTLD) {\n if (result.semantic.indexOf('.') < 0) {\n return null;\n }\n }\n // strip all whitespace from domains\n if (result) {\n result.semantic = result.semantic.replace(/\\s+/g, '');\n }\n return result;\n }());\n }\n\n // addr-spec = local-part \"@\" domain\n function addrSpec() {\n return wrap('addr-spec', and(\n localPart, literal('@'), domain\n )());\n }\n\n // 3.6.2 Originator Fields\n // Below we only parse the field body, not the name of the field\n // like \"From:\", \"Sender:\", or \"Reply-To:\". Other libraries that\n // parse email headers can parse those and defer to these productions\n // for the \"RFC 5322\" part.\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // from = \"From:\" (mailbox-list / address-list) CRLF\n function fromSpec() {\n return wrap('from', or(\n mailboxList,\n addressList\n )());\n }\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // sender = \"Sender:\" (mailbox / address) CRLF\n function senderSpec() {\n return wrap('sender', or(\n mailbox,\n address\n )());\n }\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // reply-to = \"Reply-To:\" address-list CRLF\n function replyToSpec() {\n return wrap('reply-to', addressList());\n }\n\n // 4.1. Miscellaneous Obsolete Tokens\n\n // obs-NO-WS-CTL = %d1-8 / ; US-ASCII control\n // %d11 / ; characters that do not\n // %d12 / ; include the carriage\n // %d14-31 / ; return, line feed, and\n // %d127 ; white space characters\n function obsNoWsCtl() {\n return opts.strict ? null : wrap('obs-NO-WS-CTL', compareToken(function (tok) {\n var code = tok.charCodeAt(0);\n return ((1 <= code && code <= 8) ||\n (11 === code || 12 === code) ||\n (14 <= code && code <= 31) ||\n (127 === code));\n }));\n }\n\n // obs-ctext = obs-NO-WS-CTL\n function obsCtext() { return opts.strict ? null : wrap('obs-ctext', obsNoWsCtl()); }\n\n // obs-qtext = obs-NO-WS-CTL\n function obsQtext() { return opts.strict ? null : wrap('obs-qtext', obsNoWsCtl()); }\n\n // obs-qp = \"\\\" (%d0 / obs-NO-WS-CTL / LF / CR)\n function obsQP() {\n return opts.strict ? null : wrap('obs-qp', and(\n literal('\\\\'),\n or(literal('\\0'), obsNoWsCtl, lf, cr)\n )());\n }\n\n // obs-phrase = word *(word / \".\" / CFWS)\n function obsPhrase() {\n return opts.strict ? null : wrap('obs-phrase', and(\n word,\n star(or(word, literal('.'), colwsp(cfws)))\n )());\n }\n\n // 4.2. Obsolete Folding White Space\n\n // NOTE: read the errata http://www.rfc-editor.org/errata_search.php?rfc=5322&eid=1908\n // obs-FWS = 1*([CRLF] WSP)\n function obsFws() {\n return opts.strict ? null : wrap('obs-FWS', star(\n and(invis(opt(crlf)), wsp),\n 1\n )());\n }\n\n // 4.4. Obsolete Addressing\n\n // obs-angle-addr = [CFWS] \"<\" obs-route addr-spec \">\" [CFWS]\n function obsAngleAddr() {\n return opts.strict ? null : wrap('obs-angle-addr', and(\n invis(opt(cfws)),\n literal('<'),\n obsRoute,\n addrSpec,\n literal('>'),\n invis(opt(cfws))\n )());\n }\n\n // obs-route = obs-domain-list \":\"\n function obsRoute() {\n return opts.strict ? null : wrap('obs-route', and(\n obsDomainList,\n literal(':')\n )());\n }\n\n // obs-domain-list = *(CFWS / \",\") \"@\" domain\n // *(\",\" [CFWS] [\"@\" domain])\n function obsDomainList() {\n return opts.strict ? null : wrap('obs-domain-list', and(\n star(or(invis(cfws), literal(','))),\n literal('@'),\n domain,\n star(and(\n literal(','),\n invis(opt(cfws)),\n opt(and(literal('@'), domain))\n ))\n )());\n }\n\n // obs-mbox-list = *([CFWS] \",\") mailbox *(\",\" [mailbox / CFWS])\n function obsMboxList() {\n return opts.strict ? null : wrap('obs-mbox-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n )),\n mailbox,\n star(and(\n literal(','),\n opt(and(\n mailbox,\n invis(cfws)\n ))\n ))\n )());\n }\n\n // obs-addr-list = *([CFWS] \",\") address *(\",\" [address / CFWS])\n function obsAddrList() {\n return opts.strict ? null : wrap('obs-addr-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n )),\n address,\n star(and(\n literal(','),\n opt(and(\n address,\n invis(cfws)\n ))\n ))\n )());\n }\n\n // obs-group-list = 1*([CFWS] \",\") [CFWS]\n function obsGroupList() {\n return opts.strict ? null : wrap('obs-group-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n ), 1),\n invis(opt(cfws))\n )());\n }\n\n // obs-local-part = word *(\".\" word)\n function obsLocalPart() {\n return opts.strict ? null : wrap('obs-local-part', and(word, star(and(literal('.'), word)))());\n }\n\n // obs-domain = atom *(\".\" atom)\n function obsDomain() {\n return opts.strict ? null : wrap('obs-domain', and(atom, star(and(literal('.'), atom)))());\n }\n\n // obs-dtext = obs-NO-WS-CTL / quoted-pair\n function obsDtext() {\n return opts.strict ? null : wrap('obs-dtext', or(obsNoWsCtl, quotedPair)());\n }\n\n /////////////////////////////////////////////////////\n\n // ast analysis\n\n function findNode(name, root) {\n var i, stack, node;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name === name) {\n return node;\n }\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n return null;\n }\n\n function findAllNodes(name, root) {\n var i, stack, node, result;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n result = [];\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name === name) {\n result.push(node);\n }\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n return result;\n }\n\n function findAllNodesNoChildren(names, root) {\n var i, stack, node, result, namesLookup;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n result = [];\n namesLookup = {};\n for (i = 0; i < names.length; i += 1) {\n namesLookup[names[i]] = true;\n }\n\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name in namesLookup) {\n result.push(node);\n // don't look at children (hence findAllNodesNoChildren)\n } else {\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n }\n return result;\n }\n\n function giveResult(ast) {\n var addresses, groupsAndMailboxes, i, groupOrMailbox, result;\n if (ast === null) {\n return null;\n }\n addresses = [];\n\n // An address is a 'group' (i.e. a list of mailboxes) or a 'mailbox'.\n groupsAndMailboxes = findAllNodesNoChildren(['group', 'mailbox'], ast);\n for (i = 0; i < groupsAndMailboxes.length; i += 1) {\n groupOrMailbox = groupsAndMailboxes[i];\n if (groupOrMailbox.name === 'group') {\n addresses.push(giveResultGroup(groupOrMailbox));\n } else if (groupOrMailbox.name === 'mailbox') {\n addresses.push(giveResultMailbox(groupOrMailbox));\n }\n }\n\n result = {\n ast: ast,\n addresses: addresses,\n };\n if (opts.simple) {\n result = simplifyResult(result);\n }\n if (opts.oneResult) {\n return oneResult(result);\n }\n if (opts.simple) {\n return result && result.addresses;\n } else {\n return result;\n }\n }\n\n function giveResultGroup(group) {\n var i;\n var groupName = findNode('display-name', group);\n var groupResultMailboxes = [];\n var mailboxes = findAllNodesNoChildren(['mailbox'], group);\n for (i = 0; i < mailboxes.length; i += 1) {\n groupResultMailboxes.push(giveResultMailbox(mailboxes[i]));\n }\n return {\n node: group,\n parts: {\n name: groupName,\n },\n type: group.name, // 'group'\n name: grabSemantic(groupName),\n addresses: groupResultMailboxes,\n };\n }\n\n function giveResultMailbox(mailbox) {\n var name = findNode('display-name', mailbox);\n var aspec = findNode('addr-spec', mailbox);\n var comments = findAllNodes('cfws', mailbox);\n\n var local = findNode('local-part', aspec);\n var domain = findNode('domain', aspec);\n return {\n node: mailbox,\n parts: {\n name: name,\n address: aspec,\n local: local,\n domain: domain,\n comments: comments\n },\n type: mailbox.name, // 'mailbox'\n name: grabSemantic(name),\n address: grabSemantic(aspec),\n local: grabSemantic(local),\n domain: grabSemantic(domain),\n groupName: grabSemantic(mailbox.groupName),\n };\n }\n\n function grabSemantic(n) {\n return n !== null && n !== undefined ? n.semantic : null;\n }\n\n function simplifyResult(result) {\n var i;\n if (result && result.addresses) {\n for (i = 0; i < result.addresses.length; i += 1) {\n delete result.addresses[i].node;\n }\n }\n return result;\n }\n\n function oneResult(result) {\n if (!result) { return null; }\n if (!opts.partial && result.addresses.length > 1) { return null; }\n return result.addresses && result.addresses[0];\n }\n\n /////////////////////////////////////////////////////\n\n var parseString, pos, len, parsed, startProduction;\n\n opts = handleOpts(opts, {});\n if (opts === null) { return null; }\n\n parseString = opts.input;\n\n startProduction = {\n 'address': address,\n 'address-list': addressList,\n 'angle-addr': angleAddr,\n 'from': fromSpec,\n 'group': group,\n 'mailbox': mailbox,\n 'mailbox-list': mailboxList,\n 'reply-to': replyToSpec,\n 'sender': senderSpec,\n }[opts.startAt] || addressList;\n\n if (!opts.strict) {\n initialize();\n opts.strict = true;\n parsed = startProduction(parseString);\n if (opts.partial || !inStr()) {\n return giveResult(parsed);\n }\n opts.strict = false;\n }\n\n initialize();\n parsed = startProduction(parseString);\n if (!opts.partial && inStr()) { return null; }\n return giveResult(parsed);\n}\n\nfunction parseOneAddressSimple(opts) {\n return parse5322(handleOpts(opts, {\n oneResult: true,\n rfc6532: true,\n simple: true,\n startAt: 'address-list',\n }));\n}\n\nfunction parseAddressListSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'address-list',\n }));\n}\n\nfunction parseFromSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'from',\n }));\n}\n\nfunction parseSenderSimple(opts) {\n return parse5322(handleOpts(opts, {\n oneResult: true,\n rfc6532: true,\n simple: true,\n startAt: 'sender',\n }));\n}\n\nfunction parseReplyToSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'reply-to',\n }));\n}\n\nfunction handleOpts(opts, defs) {\n function isString(str) {\n return Object.prototype.toString.call(str) === '[object String]';\n }\n\n function isObject(o) {\n return o === Object(o);\n }\n\n function isNullUndef(o) {\n return o === null || o === undefined;\n }\n\n var defaults, o;\n\n if (isString(opts)) {\n opts = { input: opts };\n } else if (!isObject(opts)) {\n return null;\n }\n\n if (!isString(opts.input)) { return null; }\n if (!defs) { return null; }\n\n defaults = {\n oneResult: false,\n partial: false,\n rejectTLD: false,\n rfc6532: false,\n simple: false,\n startAt: 'address-list',\n strict: false,\n };\n\n for (o in defaults) {\n if (isNullUndef(opts[o])) {\n opts[o] = !isNullUndef(defs[o]) ? defs[o] : defaults[o];\n }\n }\n return opts;\n}\n\nparse5322.parseOneAddress = parseOneAddressSimple;\nparse5322.parseAddressList = parseAddressListSimple;\nparse5322.parseFrom = parseFromSimple;\nparse5322.parseSender = parseSenderSimple;\nparse5322.parseReplyTo = parseReplyToSimple;\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = parse5322;\n} else {\n global.emailAddresses = parse5322;\n}\n\n}(this));\n\n},{}],284:[function(_dereq_,module,exports){\nvar hash = exports;\n\nhash.utils = _dereq_('./hash/utils');\nhash.common = _dereq_('./hash/common');\nhash.sha = _dereq_('./hash/sha');\nhash.ripemd = _dereq_('./hash/ripemd');\nhash.hmac = _dereq_('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":285,\"./hash/hmac\":286,\"./hash/ripemd\":287,\"./hash/sha\":288,\"./hash/utils\":295}],285:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar assert = _dereq_('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n\n},{\"./utils\":295,\"minimalistic-assert\":299}],286:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar assert = _dereq_('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n\n},{\"./utils\":295,\"minimalistic-assert\":299}],287:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar common = _dereq_('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n\n},{\"./common\":285,\"./utils\":295}],288:[function(_dereq_,module,exports){\n'use strict';\n\nexports.sha1 = _dereq_('./sha/1');\nexports.sha224 = _dereq_('./sha/224');\nexports.sha256 = _dereq_('./sha/256');\nexports.sha384 = _dereq_('./sha/384');\nexports.sha512 = _dereq_('./sha/512');\n\n},{\"./sha/1\":289,\"./sha/224\":290,\"./sha/256\":291,\"./sha/384\":292,\"./sha/512\":293}],289:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar common = _dereq_('../common');\nvar shaCommon = _dereq_('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":285,\"../utils\":295,\"./common\":294}],290:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar SHA256 = _dereq_('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n\n},{\"../utils\":295,\"./256\":291}],291:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar common = _dereq_('../common');\nvar shaCommon = _dereq_('./common');\nvar assert = _dereq_('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":285,\"../utils\":295,\"./common\":294,\"minimalistic-assert\":299}],292:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\n\nvar SHA512 = _dereq_('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n\n},{\"../utils\":295,\"./512\":293}],293:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar common = _dereq_('../common');\nvar assert = _dereq_('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\n},{\"../common\":285,\"../utils\":295,\"minimalistic-assert\":299}],294:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":295}],295:[function(_dereq_,module,exports){\n'use strict';\n\nvar assert = _dereq_('minimalistic-assert');\nvar inherits = _dereq_('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":298,\"minimalistic-assert\":299}],296:[function(_dereq_,module,exports){\n'use strict';\n\nvar hash = _dereq_('hash.js');\nvar utils = _dereq_('minimalistic-crypto-utils');\nvar assert = _dereq_('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n\n},{\"hash.js\":284,\"minimalistic-assert\":299,\"minimalistic-crypto-utils\":300}],297:[function(_dereq_,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n},{}],298:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],299:[function(_dereq_,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],300:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n\n},{}],301:[function(_dereq_,module,exports){\n// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = _dereq_('./lib/utils/common').assign;\n\nvar deflate = _dereq_('./lib/deflate');\nvar inflate = _dereq_('./lib/inflate');\nvar constants = _dereq_('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n\n},{\"./lib/deflate\":302,\"./lib/inflate\":303,\"./lib/utils/common\":304,\"./lib/zlib/constants\":307}],302:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_deflate = _dereq_('./zlib/deflate');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar msg = _dereq_('./zlib/messages');\nvar ZStream = _dereq_('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n\n},{\"./utils/common\":304,\"./utils/strings\":305,\"./zlib/deflate\":309,\"./zlib/messages\":314,\"./zlib/zstream\":316}],303:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_inflate = _dereq_('./zlib/inflate');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar c = _dereq_('./zlib/constants');\nvar msg = _dereq_('./zlib/messages');\nvar ZStream = _dereq_('./zlib/zstream');\nvar GZheader = _dereq_('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n var dict;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n // Convert data if needed\n if (typeof dictionary === 'string') {\n dict = strings.string2buf(dictionary);\n } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(dictionary);\n } else {\n dict = dictionary;\n }\n\n status = zlib_inflate.inflateSetDictionary(this.strm, dict);\n\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n\n},{\"./utils/common\":304,\"./utils/strings\":305,\"./zlib/constants\":307,\"./zlib/gzheader\":310,\"./zlib/inflate\":312,\"./zlib/messages\":314,\"./zlib/zstream\":316}],304:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n\n},{}],305:[function(_dereq_,module,exports){\n// String encode/decode helpers\n'use strict';\n\n\nvar utils = _dereq_('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n},{\"./common\":304}],306:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n},{}],307:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n},{}],308:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n},{}],309:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\nvar trees = _dereq_('./trees');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar msg = _dereq_('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n},{\"../utils/common\":304,\"./adler32\":306,\"./crc32\":308,\"./messages\":314,\"./trees\":315}],310:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n\n},{}],311:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n},{}],312:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar inflate_fast = _dereq_('./inffast');\nvar inflate_table = _dereq_('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n},{\"../utils/common\":304,\"./adler32\":306,\"./crc32\":308,\"./inffast\":311,\"./inftrees\":313}],313:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n},{\"../utils/common\":304}],314:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n},{}],315:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n},{\"../utils/common\":304}],316:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n},{}],317:[function(_dereq_,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],318:[function(_dereq_,module,exports){\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() { return this })() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = _dereq_(\"./runtime\");\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n\n},{\"./runtime\":319}],319:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() { return this })() || Function(\"return this\")()\n);\n\n},{}],320:[function(_dereq_,module,exports){\n(function (global){\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Rusha = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],2:[function(_dereq_,module,exports){\n(function (global){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = str.charCodeAt(start + 3);\n case 1:\n H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n case 2:\n H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n case 3:\n H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n case 2:\n H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n case 1:\n H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = buf[start + 3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[start];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[start + j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[start + j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[start + j];\n }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n switch (om) {\n case 0:\n H8[off] = buf[3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[0];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[j];\n }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n if (typeof data === 'string') {\n return convStr(data, H8, H32, start, len, off);\n }\n if (data instanceof Array) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (global.Buffer && global.Buffer.isBuffer(data)) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (data instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n }\n if (data.buffer instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n }\n if (data instanceof Blob) {\n return convBlob(data, H8, H32, start, len, off);\n }\n throw new Error('Unsupported data type.');\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$1186, foreign$1187, heap$1188) {\n 'use asm';\n var H$1189 = new stdlib$1186.Int32Array(heap$1188);\n function hash$1190(k$1191, x$1192) {\n // k in bytes\n k$1191 = k$1191 | 0;\n x$1192 = x$1192 | 0;\n var i$1193 = 0, j$1194 = 0, y0$1195 = 0, z0$1196 = 0, y1$1197 = 0, z1$1198 = 0, y2$1199 = 0, z2$1200 = 0, y3$1201 = 0, z3$1202 = 0, y4$1203 = 0, z4$1204 = 0, t0$1205 = 0, t1$1206 = 0;\n y0$1195 = H$1189[x$1192 + 320 >> 2] | 0;\n y1$1197 = H$1189[x$1192 + 324 >> 2] | 0;\n y2$1199 = H$1189[x$1192 + 328 >> 2] | 0;\n y3$1201 = H$1189[x$1192 + 332 >> 2] | 0;\n y4$1203 = H$1189[x$1192 + 336 >> 2] | 0;\n for (i$1193 = 0; (i$1193 | 0) < (k$1191 | 0); i$1193 = i$1193 + 64 | 0) {\n z0$1196 = y0$1195;\n z1$1198 = y1$1197;\n z2$1200 = y2$1199;\n z3$1202 = y3$1201;\n z4$1204 = y4$1203;\n for (j$1194 = 0; (j$1194 | 0) < 64; j$1194 = j$1194 + 4 | 0) {\n t1$1206 = H$1189[i$1193 + j$1194 >> 2] | 0;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 & y2$1199 | ~y1$1197 & y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) + 1518500249 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[k$1191 + j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 64 | 0; (j$1194 | 0) < (k$1191 + 80 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 & y2$1199 | ~y1$1197 & y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) + 1518500249 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 80 | 0; (j$1194 | 0) < (k$1191 + 160 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 ^ y2$1199 ^ y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) + 1859775393 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 160 | 0; (j$1194 | 0) < (k$1191 + 240 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 & y2$1199 | y1$1197 & y3$1201 | y2$1199 & y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) - 1894007588 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 240 | 0; (j$1194 | 0) < (k$1191 + 320 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 ^ y2$1199 ^ y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) - 899497514 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n y0$1195 = y0$1195 + z0$1196 | 0;\n y1$1197 = y1$1197 + z1$1198 | 0;\n y2$1199 = y2$1199 + z2$1200 | 0;\n y3$1201 = y3$1201 + z3$1202 | 0;\n y4$1203 = y4$1203 + z4$1204 | 0;\n }\n H$1189[x$1192 + 320 >> 2] = y0$1195;\n H$1189[x$1192 + 324 >> 2] = y1$1197;\n H$1189[x$1192 + 328 >> 2] = y2$1199;\n H$1189[x$1192 + 332 >> 2] = y3$1201;\n H$1189[x$1192 + 336 >> 2] = y4$1203;\n }\n return { hash: hash$1190 };\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Rusha = _dereq_('./rusha');\n\nvar _require = _dereq_('./utils'),\n toHex = _require.toHex;\n\nvar Hash = function () {\n function Hash() {\n _classCallCheck(this, Hash);\n\n this._rusha = new Rusha();\n this._rusha.resetState();\n }\n\n Hash.prototype.update = function update(data) {\n this._rusha.append(data);\n return this;\n };\n\n Hash.prototype.digest = function digest(encoding) {\n var digest = this._rusha.rawEnd().buffer;\n if (!encoding) {\n return digest;\n }\n if (encoding === 'hex') {\n return toHex(digest);\n }\n throw new Error('unsupported digest encoding');\n };\n\n return Hash;\n}();\n\nmodule.exports = function () {\n return new Hash();\n};\n\n},{\"./rusha\":6,\"./utils\":7}],5:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nvar webworkify = _dereq_('webworkify');\n\nvar Rusha = _dereq_('./rusha');\nvar createHash = _dereq_('./hash');\nvar runWorker = _dereq_('./worker');\n\nvar _require = _dereq_('./utils'),\n isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n var worker = webworkify(_dereq_('./worker'));\n var terminate = worker.terminate;\n worker.terminate = function () {\n URL.revokeObjectURL(worker.objectURL);\n terminate.call(worker);\n };\n return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n},{\"./hash\":4,\"./rusha\":6,\"./utils\":7,\"./worker\":8,\"webworkify\":1}],6:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RushaCore = _dereq_('./core.sjs');\n\nvar _require = _dereq_('./utils'),\n toHex = _require.toHex,\n ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = _dereq_('./conv');\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n for (len += 9; len % 64 > 0; len += 1) {}\n return len;\n};\n\nvar padZeroes = function (bin, len) {\n var h8 = new Uint8Array(bin.buffer);\n var om = len % 4,\n align = len - om;\n switch (om) {\n case 0:\n h8[align + 3] = 0;\n case 1:\n h8[align + 2] = 0;\n case 2:\n h8[align + 1] = 0;\n case 3:\n h8[align + 0] = 0;\n }\n for (var i = (len >> 2) + 1; i < bin.length; i++) {\n bin[i] = 0;\n }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n // To support msgLen >= 2 GiB, use a float division when computing the\n // high 32-bits of the big-endian message length in bits.\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n var out = new Int32Array(5);\n var arr = new DataView(out.buffer);\n arr.setInt32(0, io[0], false);\n arr.setInt32(4, io[1], false);\n arr.setInt32(8, io[2], false);\n arr.setInt32(12, io[3], false);\n arr.setInt32(16, io[4], false);\n return out;\n};\n\nvar Rusha = function () {\n function Rusha(chunkSize) {\n _classCallCheck(this, Rusha);\n\n chunkSize = chunkSize || 64 * 1024;\n if (chunkSize % 64 > 0) {\n throw new Error('Chunk size must be a multiple of 128 bit');\n }\n this._offset = 0;\n this._maxChunkLen = chunkSize;\n this._padMaxChunkLen = padlen(chunkSize);\n // The size of the heap is the sum of:\n // 1. The padded input message size\n // 2. The extended space the algorithm needs (320 byte)\n // 3. The 160 bit state the algoritm uses\n this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n this._h32 = new Int32Array(this._heap);\n this._h8 = new Int8Array(this._heap);\n this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n }\n\n Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n this._offset = 0;\n var io = new Int32Array(heap, padMsgLen + 320, 5);\n io[0] = 1732584193;\n io[1] = -271733879;\n io[2] = -1732584194;\n io[3] = 271733878;\n io[4] = -1009589776;\n };\n\n Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n var padChunkLen = padlen(chunkLen);\n var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n padZeroes(view, chunkLen);\n padData(view, chunkLen, msgLen);\n return padChunkLen;\n };\n\n Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n };\n\n Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n var padChunkLen = chunkLen;\n this._write(data, chunkOffset, chunkLen);\n if (finalize) {\n padChunkLen = this._padChunk(chunkLen, msgLen);\n }\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n };\n\n Rusha.prototype.rawDigest = function rawDigest(str) {\n var msgLen = str.byteLength || str.length || str.size || 0;\n this._initState(this._heap, this._padMaxChunkLen);\n var chunkOffset = 0,\n chunkLen = this._maxChunkLen;\n for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n }\n this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n return getRawDigest(this._heap, this._padMaxChunkLen);\n };\n\n Rusha.prototype.digest = function digest(str) {\n return toHex(this.rawDigest(str).buffer);\n };\n\n Rusha.prototype.digestFromString = function digestFromString(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.resetState = function resetState() {\n this._initState(this._heap, this._padMaxChunkLen);\n return this;\n };\n\n Rusha.prototype.append = function append(chunk) {\n var chunkOffset = 0;\n var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n var turnOffset = this._offset % this._maxChunkLen;\n var inputLen = void 0;\n\n this._offset += chunkLen;\n while (chunkOffset < chunkLen) {\n inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n this._write(chunk, chunkOffset, inputLen, turnOffset);\n turnOffset += inputLen;\n chunkOffset += inputLen;\n if (turnOffset === this._maxChunkLen) {\n this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n turnOffset = 0;\n }\n }\n return this;\n };\n\n Rusha.prototype.getState = function getState() {\n var turnOffset = this._offset % this._maxChunkLen;\n var heap = void 0;\n if (!turnOffset) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n } else {\n heap = this._heap.slice(0);\n }\n return {\n offset: this._offset,\n heap: heap\n };\n };\n\n Rusha.prototype.setState = function setState(state) {\n this._offset = state.offset;\n if (state.heap.byteLength === 20) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n io.set(new Int32Array(state.heap));\n } else {\n this._h32.set(new Int32Array(state.heap));\n }\n return this;\n };\n\n Rusha.prototype.rawEnd = function rawEnd() {\n var msgLen = this._offset;\n var chunkLen = msgLen % this._maxChunkLen;\n var padChunkLen = this._padChunk(chunkLen, msgLen);\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n var result = getRawDigest(this._heap, this._padMaxChunkLen);\n this._initState(this._heap, this._padMaxChunkLen);\n return result;\n };\n\n Rusha.prototype.end = function end() {\n return toHex(this.rawEnd().buffer);\n };\n\n return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n},{\"./conv\":2,\"./core.sjs\":3,\"./utils\":7}],7:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n var binarray = new Uint8Array(arrayBuffer);\n var res = new Array(arrayBuffer.byteLength);\n for (var _i = 0; _i < res.length; _i++) {\n res[_i] = precomputedHex[binarray[_i]];\n }\n return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n // The asm.js spec says:\n // The heap object's byteLength must be either\n // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n // Also, byteLengths smaller than 2^16 are deprecated.\n var p = 0;\n // If v is smaller than 2^16, the smallest possible solution\n // is 2^16.\n if (v <= 65536) return 65536;\n // If v < 2^24, we round up to 2^n,\n // otherwise we round up to 2^24 * n.\n if (v < 16777216) {\n for (p = 1; p < v; p = p << 1) {}\n } else {\n for (p = 16777216; p < v; p += 16777216) {}\n }\n return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n // Detects whether we run inside a dedicated worker or not.\n //\n // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n // has a bug where it only supports `WorkerGlobalScope`.\n //\n // Therefore, we consider us as running inside a dedicated worker\n // when we are running inside a worker, but not in a shared or service worker.\n //\n // When new types of workers are introduced, we will need to adjust this code.\n return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n},{}],8:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n var Rusha = _dereq_('./rusha');\n\n var hashData = function (hasher, data, cb) {\n try {\n return cb(null, hasher.digest(data));\n } catch (e) {\n return cb(e);\n }\n };\n\n var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n var reader = new self.FileReader();\n reader.onloadend = function onloadend() {\n if (reader.error) {\n return cb(reader.error);\n }\n var buffer = reader.result;\n readTotal += reader.result.byteLength;\n try {\n hasher.append(buffer);\n } catch (e) {\n cb(e);\n return;\n }\n if (readTotal < file.size) {\n hashFile(hasher, readTotal, blockSize, file, cb);\n } else {\n cb(null, hasher.end());\n }\n };\n reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n };\n\n var workerBehaviourEnabled = true;\n\n self.onmessage = function (event) {\n if (!workerBehaviourEnabled) {\n return;\n }\n\n var data = event.data.data,\n file = event.data.file,\n id = event.data.id;\n if (typeof id === 'undefined') return;\n if (!file && !data) return;\n var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n var hasher = new Rusha(blockSize);\n hasher.resetState();\n var done = function (err, hash) {\n if (!err) {\n self.postMessage({ id: id, hash: hash });\n } else {\n self.postMessage({ id: id, error: err.name });\n }\n };\n if (data) hashData(hasher, data, done);\n if (file) hashFile(hasher, 0, blockSize, file, done);\n };\n\n return function () {\n workerBehaviourEnabled = false;\n };\n};\n\n},{\"./rusha\":6}]},{},[5])(5)\n});\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],321:[function(_dereq_,module,exports){\n(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n},{}],322:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nexports.CleartextMessage = CleartextMessage;\nexports.readArmored = readArmored;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _signature = _dereq_('./signature');\n\nvar _message = _dereq_('./message');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP cleartext signed message.\n * See {@link https://tools.ietf.org/html/rfc4880#section-7}\n * @param {String} text The cleartext of the signed message\n * @param {module:signature.Signature} signature The detached signature or an empty signature for unsigned messages\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires enums\n * @requires util\n * @requires packet\n * @requires signature\n * @module cleartext\n */\n\nfunction CleartextMessage(text, signature) {\n if (!(this instanceof CleartextMessage)) {\n return new CleartextMessage(text, signature);\n }\n // normalize EOL to canonical form <CR><LF>\n this.text = _util2.default.canonicalizeEOL(_util2.default.removeTrailingSpaces(text));\n if (signature && !(signature instanceof _signature.Signature)) {\n throw new Error('Invalid signature input');\n }\n this.signature = signature || new _signature.Signature(new _packet2.default.List());\n}\n\n/**\n * Returns the key IDs of the keys that signed the cleartext message\n * @returns {Array<module:type/keyid>} array of keyid objects\n */\nCleartextMessage.prototype.getSigningKeyIds = function () {\n var keyIds = [];\n var signatureList = this.signature.packets;\n signatureList.forEach(function (packet) {\n keyIds.push(packet.issuerKeyId);\n });\n return keyIds;\n};\n\n/**\n * Sign the cleartext message\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature\n * @param {Date} date (optional) The creation time of the signature that should be created\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:cleartext.CleartextMessage>} new cleartext message with signed content\n * @async\n */\nCleartextMessage.prototype.sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(privateKeys) {\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = CleartextMessage;\n _context.t1 = this.text;\n _context.next = 4;\n return this.signDetached(privateKeys, signature, date, userId);\n\n case 4:\n _context.t2 = _context.sent;\n return _context.abrupt('return', new _context.t0(_context.t1, _context.t2));\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Sign the cleartext message\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature\n * @param {Date} date (optional) The creation time of the signature that should be created\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:signature.Signature>} new detached signature of message content\n * @async\n */\nCleartextMessage.prototype.signDetached = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(privateKeys) {\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var literalDataPacket;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n literalDataPacket = new _packet2.default.Literal();\n\n literalDataPacket.setText(this.text);\n\n _context2.t0 = _signature.Signature;\n _context2.next = 5;\n return (0, _message.createSignaturePackets)(literalDataPacket, privateKeys, signature, date, userId);\n\n case 5:\n _context2.t1 = _context2.sent;\n return _context2.abrupt('return', new _context2.t0(_context2.t1));\n\n case 7:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x5) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Verify signatures of cleartext signed message\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date (optional) Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<{keyid: module:type/keyid, valid: Boolean}>>} list of signer's keyid and validity of signature\n * @async\n */\nCleartextMessage.prototype.verify = function (keys) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n return this.verifyDetached(this.signature, keys, date);\n};\n\n/**\n * Verify signatures of cleartext signed message\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date (optional) Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<{keyid: module:type/keyid, valid: Boolean}>>} list of signer's keyid and validity of signature\n * @async\n */\nCleartextMessage.prototype.verifyDetached = function (signature, keys) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n var signatureList = signature.packets;\n var literalDataPacket = new _packet2.default.Literal();\n // we assume that cleartext signature is generated based on UTF8 cleartext\n literalDataPacket.setText(this.text);\n return (0, _message.createVerificationObjects)(signatureList, [literalDataPacket], keys, date);\n};\n\n/**\n * Get cleartext\n * @returns {String} cleartext of message\n */\nCleartextMessage.prototype.getText = function () {\n // normalize end of line to \\n\n return _util2.default.nativeEOL(this.text);\n};\n\n/**\n * Returns ASCII armored text of cleartext signed message\n * @returns {String} ASCII armor\n */\nCleartextMessage.prototype.armor = function () {\n var hashes = this.signature.packets.map(function (packet) {\n return _enums2.default.read(_enums2.default.hash, packet.hashAlgorithm).toUpperCase();\n });\n hashes = hashes.filter(function (item, i, ar) {\n return ar.indexOf(item) === i;\n });\n var body = {\n hash: hashes.join(),\n text: this.text,\n data: this.signature.packets.write()\n };\n return _armor2.default.encode(_enums2.default.armor.signed, body);\n};\n\n/**\n * reads an OpenPGP cleartext signed message and returns a CleartextMessage object\n * @param {String} armoredText text to be parsed\n * @returns {module:cleartext.CleartextMessage} new cleartext message object\n * @static\n */\nfunction readArmored(armoredText) {\n var input = _armor2.default.decode(armoredText);\n if (input.type !== _enums2.default.armor.signed) {\n throw new Error('No cleartext signed message.');\n }\n var packetlist = new _packet2.default.List();\n packetlist.read(input.data);\n verifyHeaders(input.headers, packetlist);\n var signature = new _signature.Signature(packetlist);\n return new CleartextMessage(input.text, signature);\n}\n\n/**\n * Compare hash algorithm specified in the armor header with signatures\n * @param {Array<String>} headers Armor headers\n * @param {module:packet.List} packetlist The packetlist with signature packets\n * @private\n */\nfunction verifyHeaders(headers, packetlist) {\n var checkHashAlgos = function checkHashAlgos(hashAlgos) {\n var check = function check(packet) {\n return function (algo) {\n return packet.hashAlgorithm === algo;\n };\n };\n\n for (var i = 0; i < packetlist.length; i++) {\n if (packetlist[i].tag === _enums2.default.packet.signature && !hashAlgos.some(check(packetlist[i]))) {\n return false;\n }\n }\n return true;\n };\n\n var oneHeader = null;\n var hashAlgos = [];\n headers.forEach(function (header) {\n oneHeader = header.match(/Hash: (.+)/); // get header value\n if (oneHeader) {\n oneHeader = oneHeader[1].replace(/\\s/g, ''); // remove whitespace\n oneHeader = oneHeader.split(',');\n oneHeader = oneHeader.map(function (hash) {\n hash = hash.toLowerCase();\n try {\n return _enums2.default.write(_enums2.default.hash, hash);\n } catch (e) {\n throw new Error('Unknown hash algorithm in armor header: ' + hash);\n }\n });\n hashAlgos = hashAlgos.concat(oneHeader);\n } else {\n throw new Error('Only \"Hash\" header allowed in cleartext signed message');\n }\n });\n\n if (!hashAlgos.length && !checkHashAlgos([_enums2.default.hash.md5])) {\n throw new Error('If no \"Hash\" header in cleartext signed message, then only MD5 signatures allowed');\n } else if (hashAlgos.length && !checkHashAlgos(hashAlgos)) {\n throw new Error('Hash algorithm mismatch in armor header and signature');\n }\n}\n\n},{\"./encoding/armor\":357,\"./enums\":359,\"./message\":366,\"./packet\":371,\"./signature\":391,\"./util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],323:[function(_dereq_,module,exports){\n(function (process,Buffer){\n\"use strict\";\n\nvar _typeof2 = _dereq_(\"babel-runtime/helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _create = _dereq_(\"babel-runtime/core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _freeze = _dereq_(\"babel-runtime/core-js/object/freeze\");\n\nvar _freeze2 = _interopRequireDefault(_freeze);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar freeze, Stream, BitStream, Util, BWT, CRC32, HuffmanAllocator, Bzip2;freeze = function () {\n return _freeze2.default ? _freeze2.default : function (e) {\n return e;\n };\n}(), Stream = function (e) {\n var t = function t() {};return t.prototype.readByte = function () {\n var e = [0];return 0 === this.read(e, 0, 1) ? (this._eof = !0, -1) : e[0];\n }, t.prototype.read = function (e, t, r) {\n for (var n, i = 0; i < r;) {\n if (-1 === (n = this.readByte())) {\n this._eof = !0;break;\n }e[t + i++] = n;\n }return i;\n }, t.prototype.eof = function () {\n return !!this._eof;\n }, t.prototype.seek = function (e) {\n throw new Error(\"Stream is not seekable.\");\n }, t.prototype.tell = function () {\n throw new Error(\"Stream is not seekable.\");\n }, t.prototype.writeByte = function (e) {\n var t = [e];this.write(t, 0, 1);\n }, t.prototype.write = function (e, t, r) {\n var n;for (n = 0; n < r; n++) {\n this.writeByte(e[t + n]);\n }return r;\n }, t.prototype.flush = function () {}, t.EOF = -1, e(t);\n}(freeze), BitStream = function (e) {\n var t = function t(_t) {\n (function () {\n var r = 256;this.readBit = function () {\n if (0 == (255 & r)) {\n var n = _t.readByte();if (n === e.EOF) return this._eof = !0, n;r = n << 1 | 1;\n }var i = 256 & r ? 1 : 0;return r <<= 1, i;\n }, this.seekBit = function (e) {\n var t = e >>> 3,\n r = e - 8 * t;this.seek(t), this._eof = !1, this.readBits(r);\n }, this.tellBit = function () {\n for (var e = 8 * _t.tell(), n = r; 0 != (255 & n);) {\n e--, n <<= 1;\n }return e;\n }, this.readByte = function () {\n return 0 == (255 & r) ? _t.readByte() : this.readBits(8);\n }, this.seek = function (e) {\n _t.seek(e), r = 256;\n };\n }).call(this), function () {\n var e = 1;this.writeBit = function (r) {\n e <<= 1, r && (e |= 1), 256 & e && (_t.writeByte(255 & e), e = 1);\n }, this.writeByte = function (r) {\n 1 === e ? _t.writeByte(r) : _t.writeBits(8, r);\n }, this.flush = function () {\n for (; 1 !== e;) {\n this.writeBit(0);\n }_t.flush && _t.flush();\n };\n }.call(this);\n };return t.EOF = e.EOF, t.prototype = (0, _create2.default)(e.prototype), t.prototype.readBits = function (e) {\n var t,\n r = 0;if (e > 31) return (r = 65536 * this.readBits(e - 16)) + this.readBits(16);for (t = 0; t < e; t++) {\n r <<= 1, this.readBit() > 0 && r++;\n }return r;\n }, t.prototype.writeBits = function (e, t) {\n if (e > 32) {\n var r = 65535 & t,\n n = (t - r) / 65536;return this.writeBits(e - 16, n), void this.writeBits(16, r);\n }var i;for (i = e - 1; i >= 0; i--) {\n this.writeBit(t >>> i & 1);\n }\n }, t;\n}(Stream), Util = function (e, t) {\n var r = (0, _create2.default)(null),\n n = t.EOF;r.coerceInputStream = function (e, r) {\n if (\"readByte\" in e) {\n if (r && !(\"read\" in e)) {\n var i = e;e = new t(), e.readByte = function () {\n var e = i.readByte();return e === n && (this._eof = !0), e;\n }, \"size\" in i && (e.size = i.size), \"seek\" in i && (e.seek = function (e) {\n i.seek(e), this._eof = !1;\n }), \"tell\" in i && (e.tell = i.tell.bind(i));\n }\n } else {\n var o = e;e = new t(), e.size = o.length, e.pos = 0, e.readByte = function () {\n return this.pos >= this.size ? n : o[this.pos++];\n }, e.read = function (e, t, r) {\n for (var n = 0; n < r && this.pos < o.length;) {\n e[t++] = o[this.pos++], n++;\n }return n;\n }, e.seek = function (e) {\n this.pos = e;\n }, e.tell = function () {\n return this.pos;\n }, e.eof = function () {\n return this.pos >= o.length;\n };\n }return e;\n };var i = function i(e, t) {\n this.buffer = e, this.resizeOk = t, this.pos = 0;\n };i.prototype = (0, _create2.default)(t.prototype), i.prototype.writeByte = function (e) {\n if (this.resizeOk && this.pos >= this.buffer.length) {\n var t = r.makeU8Buffer(2 * this.buffer.length);t.set(this.buffer), this.buffer = t;\n }this.buffer[this.pos++] = e;\n }, i.prototype.getBuffer = function () {\n if (this.pos !== this.buffer.length) {\n if (!this.resizeOk) throw new TypeError(\"outputsize does not match decoded input\");var e = r.makeU8Buffer(this.pos);e.set(this.buffer.subarray(0, this.pos)), this.buffer = e;\n }return this.buffer;\n }, r.coerceOutputStream = function (e, t) {\n var n = { stream: e, retval: e };if (e) {\n if (\"object\" == (typeof e === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(e)) && \"writeByte\" in e) return n;\"number\" == typeof t ? (console.assert(t >= 0), n.stream = new i(r.makeU8Buffer(t), !1)) : n.stream = new i(e, !1);\n } else n.stream = new i(r.makeU8Buffer(16384), !0);return Object.defineProperty(n, \"retval\", { get: n.stream.getBuffer.bind(n.stream) }), n;\n }, r.compressFileHelper = function (e, t, n) {\n return function (i, o, f) {\n i = r.coerceInputStream(i);var a = r.coerceOutputStream(o, o);o = a.stream;var u;for (u = 0; u < e.length; u++) {\n o.writeByte(e.charCodeAt(u));\n }var s;if (s = \"size\" in i && i.size >= 0 ? i.size : -1, n) {\n var c = r.coerceOutputStream([]);for (r.writeUnsignedNumber(c.stream, s + 1), c = c.retval, u = 0; u < c.length - 1; u++) {\n o.writeByte(c[u]);\n }n = c[c.length - 1];\n } else r.writeUnsignedNumber(o, s + 1);return t(i, o, s, f, n), a.retval;\n };\n }, r.decompressFileHelper = function (e, t) {\n return function (n, i) {\n n = r.coerceInputStream(n);var o;for (o = 0; o < e.length; o++) {\n if (e.charCodeAt(o) !== n.readByte()) throw new Error(\"Bad magic\");\n }var f = r.readUnsignedNumber(n) - 1,\n a = r.coerceOutputStream(i, f);return i = a.stream, t(n, i, f), a.retval;\n };\n }, r.compressWithModel = function (e, t, r) {\n for (var i = 0; i !== t;) {\n var o = e.readByte();if (o === n) {\n r.encode(256);break;\n }r.encode(o), i++;\n }\n }, r.decompressWithModel = function (e, t, r) {\n for (var n = 0; n !== t;) {\n var i = r.decode();if (256 === i) break;e.writeByte(i), n++;\n }\n }, r.writeUnsignedNumber = function (e, t) {\n console.assert(t >= 0);var r,\n n = [];do {\n n.push(127 & t), t = Math.floor(t / 128);\n } while (0 !== t);for (n[0] |= 128, r = n.length - 1; r >= 0; r--) {\n e.writeByte(n[r]);\n }return e;\n }, r.readUnsignedNumber = function (e) {\n for (var t, r = 0;;) {\n if (128 & (t = e.readByte())) {\n r += 127 & t;break;\n }r = 128 * (r + t);\n }return r;\n };var o = function o(e) {\n for (var t = 0, r = e.length; t < r; t++) {\n e[t] = 0;\n }return e;\n },\n f = function f(e) {\n return o(new Array(e));\n },\n a = function a(e) {\n return e;\n };\"undefined\" != typeof process && Array.prototype.some.call(new Uint32Array(128), function (e) {\n return 0 !== e;\n }) && (a = o), r.makeU8Buffer = \"undefined\" != typeof Uint8Array ? function (e) {\n return a(new Uint8Array(e));\n } : \"undefined\" != typeof Buffer ? function (e) {\n var t = new Buffer(e);return t.fill(0), t;\n } : f, r.makeU16Buffer = \"undefined\" != typeof Uint16Array ? function (e) {\n return a(new Uint16Array(e));\n } : f, r.makeU32Buffer = \"undefined\" != typeof Uint32Array ? function (e) {\n return a(new Uint32Array(e));\n } : f, r.makeS32Buffer = \"undefined\" != typeof Int32Array ? function (e) {\n return a(new Int32Array(e));\n } : f, r.arraycopy = function (e, t) {\n console.assert(e.length >= t.length);for (var r = 0, n = t.length; r < n; r++) {\n e[r] = t[r];\n }return e;\n };var u = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8];console.assert(256 === u.length);var s = r.fls = function (e) {\n return console.assert(e >= 0), e > 4294967295 ? 32 + s(Math.floor(e / 4294967296)) : 0 != (4294901760 & e) ? 0 != (4278190080 & e) ? 24 + u[e >>> 24 & 255] : 16 + u[e >>> 16] : 0 != (65280 & e) ? 8 + u[e >>> 8] : u[e];\n };return r.log2c = function (e) {\n return 0 === e ? -1 : s(e - 1);\n }, e(r);\n}(freeze, Stream), BWT = function (e, t) {\n var r = console.assert.bind(console),\n n = function n(e, t, r, _n) {\n var i;for (i = 0; i < _n; i++) {\n t[i] = 0;\n }for (i = 0; i < r; i++) {\n t[e[i]]++;\n }\n },\n i = function i(e, t, r, n) {\n var i,\n o = 0;if (n) for (i = 0; i < r; i++) {\n o += e[i], t[i] = o;\n } else for (i = 0; i < r; i++) {\n o += e[i], t[i] = o - e[i];\n }\n },\n o = function o(e, t, _o, f, a, u) {\n var s, c, h, l, d;for (_o === f && n(e, _o, a, u), i(_o, f, u, !1), h = a - 1, s = f[d = e[h]], h--, t[s++] = e[h] < d ? ~h : h, c = 0; c < a; c++) {\n (h = t[c]) > 0 ? (r(e[h] >= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(c < s), h--, t[s++] = e[h] < d ? ~h : h, t[c] = 0) : h < 0 && (t[c] = ~h);\n }for (_o === f && n(e, _o, a, u), i(_o, f, u, 1), c = a - 1, s = f[d = 0]; c >= 0; c--) {\n (h = t[c]) > 0 && (r(e[h] <= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(s <= c), h--, t[--s] = e[h] > d ? ~(h + 1) : h, t[c] = 0);\n }\n },\n f = function f(e, t, n, i) {\n var o, f, a, u, s, c, h, l, d, B;for (r(n > 0), o = 0; (a = t[o]) < 0; o++) {\n t[o] = ~a, r(o + 1 < n);\n }if (o < i) for (f = o, o++; r(o < n), !((a = t[o]) < 0 && (t[f++] = ~a, t[o] = 0, f === i)); o++) {}l = e[o = f = n - 1];do {\n d = l;\n } while (--o >= 0 && (l = e[o]) >= d);for (; o >= 0;) {\n do {\n d = l;\n } while (--o >= 0 && (l = e[o]) <= d);if (o >= 0) {\n t[i + (o + 1 >>> 1)] = f - o, f = o + 1;do {\n d = l;\n } while (--o >= 0 && (l = e[o]) >= d);\n }\n }for (o = 0, h = 0, u = n, c = 0; o < i; o++) {\n if (a = t[o], s = t[i + (a >>> 1)], B = !0, s === c && u + s < n) {\n for (f = 0; f < s && e[a + f] === e[u + f];) {\n f++;\n }f === s && (B = !1);\n }B && (h++, u = a, c = s), t[i + (a >>> 1)] = h;\n }return h;\n },\n a = function a(e, t, o, f, _a, u) {\n var s, c, h, l, d;for (o === f && n(e, o, _a, u), i(o, f, u, !1), h = _a - 1, s = f[d = e[h]], t[s++] = h > 0 && e[h - 1] < d ? ~h : h, c = 0; c < _a; c++) {\n h = t[c], t[c] = ~h, h > 0 && (h--, r(e[h] >= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(c < s), t[s++] = h > 0 && e[h - 1] < d ? ~h : h);\n }for (o === f && n(e, o, _a, u), i(o, f, u, !0), c = _a - 1, s = f[d = 0]; c >= 0; c--) {\n (h = t[c]) > 0 ? (h--, r(e[h] <= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(s <= c), t[--s] = 0 === h || e[h - 1] > d ? ~h : h) : t[c] = ~h;\n }\n },\n u = function u(e, t, o, f, a, _u) {\n var s,\n c,\n h,\n l,\n d,\n B = -1;for (o === f && n(e, o, a, _u), i(o, f, _u, !1), h = a - 1, s = f[d = e[h]], t[s++] = h > 0 && e[h - 1] < d ? ~h : h, c = 0; c < a; c++) {\n (h = t[c]) > 0 ? (h--, r(e[h] >= e[h + 1]), t[c] = ~(l = e[h]), l !== d && (f[d] = s, s = f[d = l]), r(c < s), t[s++] = h > 0 && e[h - 1] < d ? ~h : h) : 0 !== h && (t[c] = ~h);\n }for (o === f && n(e, o, a, _u), i(o, f, _u, !0), c = a - 1, s = f[d = 0]; c >= 0; c--) {\n (h = t[c]) > 0 ? (h--, r(e[h] <= e[h + 1]), t[c] = l = e[h], l !== d && (f[d] = s, s = f[d = l]), r(s <= c), t[--s] = h > 0 && e[h - 1] > d ? ~e[h - 1] : h) : 0 !== h ? t[c] = ~h : B = c;\n }return B;\n },\n s = function s(e, c, h, l, d, B) {\n var p,\n v,\n m,\n w,\n E,\n g,\n _,\n b,\n y,\n R,\n C,\n k,\n T,\n O = 0,\n S = 0;for (d <= 256 ? (p = t.makeS32Buffer(d), d <= h ? (v = c.subarray(l + h - d), S = 1) : (v = t.makeS32Buffer(d), S = 3)) : d <= h ? (p = c.subarray(l + h - d), d <= h - d ? (v = c.subarray(l + h - 2 * d), S = 0) : d <= 1024 ? (v = t.makeS32Buffer(d), S = 2) : (v = p, S = 8)) : (p = v = t.makeS32Buffer(d), S = 12), n(e, p, l, d), i(p, v, d, !0), w = 0; w < l; w++) {\n c[w] = 0;\n }g = -1, w = l - 1, E = l, _ = 0, k = e[l - 1];do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);for (; w >= 0;) {\n do {\n T = k;\n } while (--w >= 0 && (k = e[w]) <= T);if (w >= 0) {\n g >= 0 && (c[g] = E), g = --v[T], E = w, ++_;do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);\n }\n }if (_ > 1 ? (o(e, c, p, v, l, d), R = f(e, c, l, _)) : 1 === _ ? (c[g] = E + 1, R = 1) : R = 0, R < _) {\n for (0 != (4 & S) && (p = null, v = null), 0 != (2 & S) && (v = null), C = l + h - 2 * _, 0 == (13 & S) && (d + R <= C ? C -= d : S |= 8), r(l >>> 1 <= C + _), w = _ + (l >>> 1) - 1, E = 2 * _ + C - 1; _ <= w; w--) {\n 0 !== c[w] && (c[E--] = c[w] - 1);\n }m = c.subarray(_ + C), s(m, c, C, _, R, !1), m = null, w = l - 1, E = 2 * _ - 1, k = e[l - 1];do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);for (; w >= 0;) {\n do {\n T = k;\n } while (--w >= 0 && (k = e[w]) <= T);if (w >= 0) {\n c[E--] = w + 1;do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);\n }\n }for (w = 0; w < _; w++) {\n c[w] = c[_ + c[w]];\n }0 != (4 & S) && (p = v = t.makeS32Buffer(d)), 0 != (2 & S) && (v = t.makeS32Buffer(d));\n }if (0 != (8 & S) && n(e, p, l, d), _ > 1) {\n i(p, v, d, !0), w = _ - 1, E = l, b = c[_ - 1], T = e[b];do {\n for (y = v[k = T]; y < E;) {\n c[--E] = 0;\n }do {\n if (c[--E] = b, --w < 0) break;b = c[w];\n } while ((T = e[b]) === k);\n } while (w >= 0);for (; E > 0;) {\n c[--E] = 0;\n }\n }return B ? O = u(e, c, p, v, l, d) : a(e, c, p, v, l, d), p = null, v = null, O;\n },\n c = (0, _create2.default)(null);return c.suffixsort = function (e, t, n, i) {\n if (r(e && t && e.length >= n && t.length >= n), n <= 1) return 1 === n && (t[0] = 0), 0;if (!i) if (1 === e.BYTES_PER_ELEMENT) i = 256;else {\n if (2 !== e.BYTES_PER_ELEMENT) throw new Error(\"Need to specify alphabetSize\");i = 65536;\n }return r(i > 0), e.BYTES_PER_ELEMENT && r(i <= 1 << 8 * e.BYTES_PER_ELEMENT), s(e, t, 0, n, i, !1);\n }, c.bwtransform = function (e, t, n, i, o) {\n var f, a;if (r(e && t && n), r(e.length >= i && t.length >= i && n.length >= i), i <= 1) return 1 === i && (t[0] = e[0]), i;if (!o) if (1 === e.BYTES_PER_ELEMENT) o = 256;else {\n if (2 !== e.BYTES_PER_ELEMENT) throw new Error(\"Need to specify alphabetSize\");o = 65536;\n }for (r(o > 0), e.BYTES_PER_ELEMENT && r(o <= 1 << 8 * e.BYTES_PER_ELEMENT), a = s(e, n, 0, i, o, !0), t[0] = e[i - 1], f = 0; f < a; f++) {\n t[f + 1] = n[f];\n }for (f += 1; f < i; f++) {\n t[f] = n[f];\n }return a + 1;\n }, c.unbwtransform = function (e, r, n, i, o) {\n var f,\n a,\n u = t.makeU32Buffer(256);for (f = 0; f < 256; f++) {\n u[f] = 0;\n }for (f = 0; f < i; f++) {\n n[f] = u[e[f]]++;\n }for (f = 0, a = 0; f < 256; f++) {\n a += u[f], u[f] = a - u[f];\n }for (f = i - 1, a = 0; f >= 0; f--) {\n a = n[a] + u[r[f] = e[a]], a += a < o ? 1 : 0;\n }u = null;\n }, c.bwtransform2 = function (e, n, i, o) {\n var f,\n a,\n u = 0;if (r(e && n), r(e.length >= i && n.length >= i), i <= 1) return 1 === i && (n[0] = e[0]), 0;if (!o) if (1 === e.BYTES_PER_ELEMENT) o = 256;else {\n if (2 !== e.BYTES_PER_ELEMENT) throw new Error(\"Need to specify alphabetSize\");o = 65536;\n }r(o > 0), e.BYTES_PER_ELEMENT && r(o <= 1 << 8 * e.BYTES_PER_ELEMENT);var c;if ((c = e.length >= 2 * i ? e : o <= 256 ? t.makeU8Buffer(2 * i) : o <= 65536 ? t.makeU16Buffer(2 * i) : t.makeU32Buffer(2 * i)) !== e) for (f = 0; f < i; f++) {\n c[f] = e[f];\n }for (f = 0; f < i; f++) {\n c[i + f] = c[f];\n }var h = t.makeS32Buffer(2 * i);for (s(c, h, 0, 2 * i, o, !1), f = 0, a = 0; f < 2 * i; f++) {\n var l = h[f];l < i && (0 === l && (u = a), --l < 0 && (l = i - 1), n[a++] = e[l]);\n }return r(a === i), u;\n }, e(c);\n}(freeze, Util), CRC32 = function (e) {\n var t = e.arraycopy(e.makeU32Buffer(256), [0, 79764919, 159529838, 222504665, 319059676, 398814059, 445009330, 507990021, 638119352, 583659535, 797628118, 726387553, 890018660, 835552979, 1015980042, 944750013, 1276238704, 1221641927, 1167319070, 1095957929, 1595256236, 1540665371, 1452775106, 1381403509, 1780037320, 1859660671, 1671105958, 1733955601, 2031960084, 2111593891, 1889500026, 1952343757, 2552477408, 2632100695, 2443283854, 2506133561, 2334638140, 2414271883, 2191915858, 2254759653, 3190512472, 3135915759, 3081330742, 3009969537, 2905550212, 2850959411, 2762807018, 2691435357, 3560074640, 3505614887, 3719321342, 3648080713, 3342211916, 3287746299, 3467911202, 3396681109, 4063920168, 4143685023, 4223187782, 4286162673, 3779000052, 3858754371, 3904687514, 3967668269, 881225847, 809987520, 1023691545, 969234094, 662832811, 591600412, 771767749, 717299826, 311336399, 374308984, 453813921, 533576470, 25881363, 88864420, 134795389, 214552010, 2023205639, 2086057648, 1897238633, 1976864222, 1804852699, 1867694188, 1645340341, 1724971778, 1587496639, 1516133128, 1461550545, 1406951526, 1302016099, 1230646740, 1142491917, 1087903418, 2896545431, 2825181984, 2770861561, 2716262478, 3215044683, 3143675388, 3055782693, 3001194130, 2326604591, 2389456536, 2200899649, 2280525302, 2578013683, 2640855108, 2418763421, 2498394922, 3769900519, 3832873040, 3912640137, 3992402750, 4088425275, 4151408268, 4197601365, 4277358050, 3334271071, 3263032808, 3476998961, 3422541446, 3585640067, 3514407732, 3694837229, 3640369242, 1762451694, 1842216281, 1619975040, 1682949687, 2047383090, 2127137669, 1938468188, 2001449195, 1325665622, 1271206113, 1183200824, 1111960463, 1543535498, 1489069629, 1434599652, 1363369299, 622672798, 568075817, 748617968, 677256519, 907627842, 853037301, 1067152940, 995781531, 51762726, 131386257, 177728840, 240578815, 269590778, 349224269, 429104020, 491947555, 4046411278, 4126034873, 4172115296, 4234965207, 3794477266, 3874110821, 3953728444, 4016571915, 3609705398, 3555108353, 3735388376, 3664026991, 3290680682, 3236090077, 3449943556, 3378572211, 3174993278, 3120533705, 3032266256, 2961025959, 2923101090, 2868635157, 2813903052, 2742672763, 2604032198, 2683796849, 2461293480, 2524268063, 2284983834, 2364738477, 2175806836, 2238787779, 1569362073, 1498123566, 1409854455, 1355396672, 1317987909, 1246755826, 1192025387, 1137557660, 2072149281, 2135122070, 1912620623, 1992383480, 1753615357, 1816598090, 1627664531, 1707420964, 295390185, 358241886, 404320391, 483945776, 43990325, 106832002, 186451547, 266083308, 932423249, 861060070, 1041341759, 986742920, 613929101, 542559546, 756411363, 701822548, 3316196985, 3244833742, 3425377559, 3370778784, 3601682597, 3530312978, 3744426955, 3689838204, 3819031489, 3881883254, 3928223919, 4007849240, 4037393693, 4100235434, 4180117107, 4259748804, 2310601993, 2373574846, 2151335527, 2231098320, 2596047829, 2659030626, 2470359227, 2550115596, 2947551409, 2876312838, 2788305887, 2733848168, 3165939309, 3094707162, 3040238851, 2985771188]);return function () {\n var e = 4294967295;this.getCRC = function () {\n return ~e >>> 0;\n }, this.updateCRC = function (r) {\n e = e << 8 ^ t[255 & (e >>> 24 ^ r)];\n }, this.updateCRCRun = function (r, n) {\n for (; n-- > 0;) {\n e = e << 8 ^ t[255 & (e >>> 24 ^ r)];\n }\n };\n };\n}(Util), HuffmanAllocator = function (e, t) {\n var r = function r(e, t, _r) {\n for (var n = e.length, i = t, o = e.length - 2; t >= _r && e[t] % n > i;) {\n o = t, t -= i - t + 1;\n }for (t = Math.max(_r - 1, t); o > t + 1;) {\n var f = t + o >> 1;e[f] % n > i ? o = f : t = f;\n }return o;\n },\n n = function n(e) {\n var t = e.length;e[0] += e[1];var r, n, i, o;for (r = 0, n = 1, i = 2; n < t - 1; n++) {\n i >= t || e[r] < e[i] ? (o = e[r], e[r++] = n) : o = e[i++], i >= t || r < n && e[r] < e[i] ? (o += e[r], e[r++] = n + t) : o += e[i++], e[n] = o;\n }\n },\n i = function i(e, t) {\n var n,\n i = e.length - 2;for (n = 1; n < t - 1 && i > 1; n++) {\n i = r(e, i - 1, 0);\n }return i;\n },\n o = function o(e) {\n var t,\n n,\n i,\n o,\n f = e.length - 2,\n a = e.length - 1;for (t = 1, n = 2; n > 0; t++) {\n for (i = f, f = r(e, i - 1, 0), o = n - (i - f); o > 0; o--) {\n e[a--] = t;\n }n = i - f << 1;\n }\n },\n f = function f(e, t, n) {\n var i,\n o,\n f,\n a,\n u = e.length - 2,\n s = e.length - 1,\n c = 1 == n ? 2 : 1,\n h = 1 == n ? t - 2 : t;for (i = c << 1; i > 0; c++) {\n for (o = u, u = u <= t ? u : r(e, o - 1, t), f = 0, c >= n ? f = Math.min(h, 1 << c - n) : c == n - 1 && (f = 1, e[u] == o && u++), a = i - (o - u + f); a > 0; a--) {\n e[s--] = c;\n }h -= f, i = o - u + f << 1;\n }\n };return e({ allocateHuffmanCodeLengths: function allocateHuffmanCodeLengths(e, r) {\n switch (e.length) {case 2:\n e[1] = 1;case 1:\n return void (e[0] = 1);}n(e);var a = i(e, r);if (e[0] % e.length >= a) o(e);else {\n var u = r - t.fls(a - 1);f(e, a, u);\n }\n } });\n}(freeze, Util), Bzip2 = function (e, t, r, n, i, o, f) {\n var a = o.EOF,\n u = function u(e, t) {\n var r,\n n = e[t];for (r = t; r > 0; r--) {\n e[r] = e[r - 1];\n }return e[0] = n, n;\n },\n s = { OK: 0, LAST_BLOCK: -1, NOT_BZIP_DATA: -2, UNEXPECTED_INPUT_EOF: -3, UNEXPECTED_OUTPUT_EOF: -4, DATA_ERROR: -5, OUT_OF_MEMORY: -6, OBSOLETE_INPUT: -7, END_OF_BLOCK: -8 },\n c = {};c[s.LAST_BLOCK] = \"Bad file checksum\", c[s.NOT_BZIP_DATA] = \"Not bzip data\", c[s.UNEXPECTED_INPUT_EOF] = \"Unexpected input EOF\", c[s.UNEXPECTED_OUTPUT_EOF] = \"Unexpected output EOF\", c[s.DATA_ERROR] = \"Data error\", c[s.OUT_OF_MEMORY] = \"Out of memory\", c[s.OBSOLETE_INPUT] = \"Obsolete (pre 0.9.5) bzip format not supported.\";var h = function h(e, t) {\n var r = c[e] || \"unknown error\";t && (r += \": \" + t);var n = new TypeError(r);throw n.errorCode = e, n;\n },\n l = function l(e, t) {\n this.writePos = this.writeCurrent = this.writeCount = 0, this._start_bunzip(e, t);\n };l.prototype._init_block = function () {\n return this._get_next_block() ? (this.blockCRC = new n(), !0) : (this.writeCount = -1, !1);\n }, l.prototype._start_bunzip = function (e, r) {\n var n = f.makeU8Buffer(4);4 === e.read(n, 0, 4) && \"BZh\" === String.fromCharCode(n[0], n[1], n[2]) || h(s.NOT_BZIP_DATA, \"bad magic\");var i = n[3] - 48;(i < 1 || i > 9) && h(s.NOT_BZIP_DATA, \"level out of range\"), this.reader = new t(e), this.dbufSize = 1e5 * i, this.nextoutput = 0, this.outputStream = r, this.streamCRC = 0;\n }, l.prototype._get_next_block = function () {\n var e,\n t,\n r,\n n = this.reader,\n i = n.readBits(48);if (25779555029136 === i) return !1;54156738319193 !== i && h(s.NOT_BZIP_DATA), this.targetBlockCRC = n.readBits(32), this.streamCRC = (this.targetBlockCRC ^ (this.streamCRC << 1 | this.streamCRC >>> 31)) >>> 0, n.readBits(1) && h(s.OBSOLETE_INPUT);var o = n.readBits(24);o > this.dbufSize && h(s.DATA_ERROR, \"initial position out of bounds\");var a = n.readBits(16),\n c = f.makeU8Buffer(256),\n l = 0;for (e = 0; e < 16; e++) {\n if (a & 1 << 15 - e) {\n var d = 16 * e;for (r = n.readBits(16), t = 0; t < 16; t++) {\n r & 1 << 15 - t && (c[l++] = d + t);\n }\n }\n }var B = n.readBits(3);(B < 2 || B > 6) && h(s.DATA_ERROR);var p = n.readBits(15);0 === p && h(s.DATA_ERROR);var v = f.makeU8Buffer(256);for (e = 0; e < B; e++) {\n v[e] = e;\n }var m = f.makeU8Buffer(p);for (e = 0; e < p; e++) {\n for (t = 0; n.readBits(1); t++) {\n t >= B && h(s.DATA_ERROR);\n }m[e] = u(v, t);\n }var w,\n E = l + 2,\n g = [];for (t = 0; t < B; t++) {\n var _ = f.makeU8Buffer(E),\n b = f.makeU16Buffer(21);for (a = n.readBits(5), e = 0; e < E; e++) {\n for (; (a < 1 || a > 20) && h(s.DATA_ERROR), n.readBits(1);) {\n n.readBits(1) ? a-- : a++;\n }_[e] = a;\n }var y, R;for (y = R = _[0], e = 1; e < E; e++) {\n _[e] > R ? R = _[e] : _[e] < y && (y = _[e]);\n }w = {}, g.push(w), w.permute = f.makeU16Buffer(258), w.limit = f.makeU32Buffer(22), w.base = f.makeU32Buffer(21), w.minLen = y, w.maxLen = R;var C = 0;for (e = y; e <= R; e++) {\n for (b[e] = w.limit[e] = 0, a = 0; a < E; a++) {\n _[a] === e && (w.permute[C++] = a);\n }\n }for (e = 0; e < E; e++) {\n b[_[e]]++;\n }for (C = a = 0, e = y; e < R; e++) {\n C += b[e], w.limit[e] = C - 1, C <<= 1, a += b[e], w.base[e + 1] = C - a;\n }w.limit[R + 1] = Number.MAX_VALUE, w.limit[R] = C + b[R] - 1, w.base[y] = 0;\n }var k = f.makeU32Buffer(256);for (e = 0; e < 256; e++) {\n v[e] = e;\n }var T,\n O = 0,\n S = 0,\n U = 0,\n A = this.dbuf = f.makeU32Buffer(this.dbufSize);for (E = 0;;) {\n for (E-- || (E = 49, U >= p && h(s.DATA_ERROR), w = g[m[U++]]), e = w.minLen, t = n.readBits(e); e > w.maxLen && h(s.DATA_ERROR), !(t <= w.limit[e]); e++) {\n t = t << 1 | n.readBits(1);\n }t -= w.base[e], (t < 0 || t >= 258) && h(s.DATA_ERROR);var z = w.permute[t];if (0 !== z && 1 !== z) {\n if (O) for (O = 0, S + a > this.dbufSize && h(s.DATA_ERROR), T = c[v[0]], k[T] += a; a--;) {\n A[S++] = T;\n }if (z > l) break;S >= this.dbufSize && h(s.DATA_ERROR), e = z - 1, T = u(v, e), T = c[T], k[T]++, A[S++] = T;\n } else O || (O = 1, a = 0), a += 0 === z ? O : 2 * O, O <<= 1;\n }for ((o < 0 || o >= S) && h(s.DATA_ERROR), t = 0, e = 0; e < 256; e++) {\n r = t + k[e], k[e] = t, t = r;\n }for (e = 0; e < S; e++) {\n T = 255 & A[e], A[k[T]] |= e << 8, k[T]++;\n }var N = 0,\n L = 0,\n P = 0;return S && (N = A[o], L = 255 & N, N >>= 8, P = -1), this.writePos = N, this.writeCurrent = L, this.writeCount = S, this.writeRun = P, !0;\n }, l.prototype._read_bunzip = function (e, t) {\n var r, n, i;if (this.writeCount < 0) return 0;for (var o = this.dbuf, f = this.writePos, a = this.writeCurrent, u = this.writeCount, c = (this.outputsize, this.writeRun); u;) {\n for (u--, n = a, f = o[f], a = 255 & f, f >>= 8, 3 == c++ ? (r = a, i = n, a = -1) : (r = 1, i = a), this.blockCRC.updateCRCRun(i, r); r--;) {\n this.outputStream.writeByte(i), this.nextoutput++;\n }a != n && (c = 0);\n }return this.writeCount = u, this.blockCRC.getCRC() !== this.targetBlockCRC && h(s.DATA_ERROR, \"Bad block CRC (got \" + this.blockCRC.getCRC().toString(16) + \" expected \" + this.targetBlockCRC.toString(16) + \")\"), this.nextoutput;\n }, l.Err = s, l.decode = function (e, t, r) {\n for (var n = f.coerceInputStream(e), i = f.coerceOutputStream(t, t), o = i.stream, a = new l(n, o);;) {\n if (\"eof\" in n && n.eof()) break;if (a._init_block()) a._read_bunzip();else {\n var u = a.reader.readBits(32);if (u !== a.streamCRC && h(s.DATA_ERROR, \"Bad stream CRC (got \" + a.streamCRC.toString(16) + \" expected \" + u.toString(16) + \")\"), !(r && \"eof\" in n) || n.eof()) break;a._start_bunzip(n, o);\n }\n }return i.retval;\n }, l.decodeBlock = function (e, t, r) {\n var i = f.coerceInputStream(e),\n o = f.coerceOutputStream(r, r),\n a = o.stream,\n u = new l(i, a);return u.reader.seekBit(t), u._get_next_block() && (u.blockCRC = new n(), u.writeCopies = 0, u._read_bunzip()), o.retval;\n }, l.table = function (e, t, r) {\n var n = new o();n.delegate = f.coerceInputStream(e), n.pos = 0, n.readByte = function () {\n return this.pos++, this.delegate.readByte();\n }, n.tell = function () {\n return this.pos;\n }, n.delegate.eof && (n.eof = n.delegate.eof.bind(n.delegate));var i = new o();i.pos = 0, i.writeByte = function () {\n this.pos++;\n };for (var a = new l(n, i), u = a.dbufSize;;) {\n if (\"eof\" in n && n.eof()) break;var s = a.reader.tellBit();if (a._init_block()) {\n var c = i.pos;a._read_bunzip(), t(s, i.pos - c);\n } else {\n a.reader.readBits(32);if (!(r && \"eof\" in n) || n.eof()) break;a._start_bunzip(n, i), console.assert(a.dbufSize === u, \"shouldn't change block size within multistream file\");\n }\n }\n };var d = function d(e, t) {\n var r,\n n = [];for (r = 0; r < t; r++) {\n n[r] = e[r] << 9 | r;\n }n.sort(function (e, t) {\n return e - t;\n });var o = n.map(function (e) {\n return e >>> 9;\n });for (i.allocateHuffmanCodeLengths(o, 20), this.codeLengths = f.makeU8Buffer(t), r = 0; r < t; r++) {\n var a = 511 & n[r];this.codeLengths[a] = o[r];\n }\n };d.prototype.computeCanonical = function () {\n var e,\n t = this.codeLengths.length,\n r = [];for (e = 0; e < t; e++) {\n r[e] = this.codeLengths[e] << 9 | e;\n }r.sort(function (e, t) {\n return e - t;\n }), this.code = f.makeU32Buffer(t);var n = 0,\n i = 0;for (e = 0; e < t; e++) {\n var o = r[e] >>> 9,\n a = 511 & r[e];console.assert(i <= o), n <<= o - i, this.code[a] = n++, i = o;\n }\n }, d.prototype.cost = function (e, t, r) {\n var n,\n i = 0;for (n = 0; n < r; n++) {\n i += this.codeLengths[e[t + n]];\n }return i;\n }, d.prototype.emit = function (e) {\n var t,\n r = this.codeLengths[0];for (e.writeBits(5, r), t = 0; t < this.codeLengths.length; t++) {\n var n,\n i,\n o = this.codeLengths[t];for (console.assert(o > 0 && o <= 20), r < o ? (n = 2, i = o - r) : (n = 3, i = r - o); i-- > 0;) {\n e.writeBits(2, n);\n }e.writeBit(0), r = o;\n }\n }, d.prototype.encode = function (e, t) {\n e.writeBits(this.codeLengths[t], this.code[t]);\n };var B = function B(e, t, r, n) {\n for (var i = 0, o = -1, f = 0; i < r && !(4 === f && (t[i++] = 0, i >= r));) {\n var u = e.readByte();if (u === a) break;if (n.updateCRC(u), u !== o) o = u, f = 1;else if (++f > 4) {\n if (f < 256) {\n t[i - 1]++;continue;\n }f = 1;\n }t[i++] = u;\n }return i;\n },\n p = function p(e, t, r) {\n var n, i, o;for (n = 0, o = 0; n < r.length; n += 50) {\n var f = Math.min(50, r.length - n),\n a = 0,\n u = t[0].cost(r, n, f);for (i = 1; i < t.length; i++) {\n var s = t[i].cost(r, n, f);s < u && (a = i, u = s);\n }e[o++] = a;\n }\n },\n v = function v(e, t, r, n, i) {\n for (var o, f, a, u = []; e.length < t;) {\n for (p(n, e, r), o = 0; o < e.length; o++) {\n u[o] = 0;\n }for (o = 0; o < n.length; o++) {\n u[n[o]]++;\n }var s = u.indexOf(Math.max.apply(Math, u)),\n c = [];for (o = 0, f = 0; o < n.length; o++) {\n if (n[o] === s) {\n var h = 50 * o,\n l = Math.min(h + 50, r.length);c.push({ index: o, cost: e[s].cost(r, h, l - h) });\n }\n }for (c.sort(function (e, t) {\n return e.cost - t.cost;\n }), o = c.length >>> 1; o < c.length; o++) {\n n[c[o].index] = e.length;\n }e.push(null);var B,\n v = [];for (o = 0; o < e.length; o++) {\n for (B = v[o] = [], f = 0; f < i; f++) {\n B[f] = 0;\n }\n }for (o = 0, f = 0; o < r.length;) {\n for (B = v[n[f++]], a = 0; a < 50 && o < r.length; a++) {\n B[r[o++]]++;\n }\n }for (o = 0; o < e.length; o++) {\n e[o] = new d(v[o], i);\n }\n }\n },\n m = function m(e, t, n) {\n var i,\n o,\n a,\n s,\n c = f.makeU8Buffer(t),\n h = r.bwtransform2(e, c, t, 256);n.writeBit(0), n.writeBits(24, h);var l = [],\n B = [];for (o = 0; o < t; o++) {\n i = e[o], l[i] = !0, B[i >>> 4] = !0;\n }for (o = 0; o < 16; o++) {\n n.writeBit(!!B[o]);\n }for (o = 0; o < 16; o++) {\n if (B[o]) for (a = 0; a < 16; a++) {\n n.writeBit(!!l[o << 4 | a]);\n }\n }var m = 0;for (o = 0; o < 256; o++) {\n l[o] && m++;\n }var w = f.makeU16Buffer(t + 1),\n E = m + 1,\n g = [];for (o = 0; o <= E; o++) {\n g[o] = 0;\n }var _ = f.makeU8Buffer(m);for (o = 0, a = 0; o < 256; o++) {\n l[o] && (_[a++] = o);\n }l = null, B = null;var b = 0,\n y = 0,\n R = function R(e) {\n w[b++] = e, g[e]++;\n },\n C = function C() {\n for (; 0 !== y;) {\n 1 & y ? (R(0), y -= 1) : (R(1), y -= 2), y >>>= 1;\n }\n };for (o = 0; o < c.length; o++) {\n for (i = c[o], a = 0; a < m && _[a] !== i; a++) {}console.assert(a !== m), u(_, a), 0 === a ? y++ : (C(), R(a + 1), y = 0);\n }C(), R(E), w = w.subarray(0, b);var k,\n T = [];for (k = b >= 2400 ? 6 : b >= 1200 ? 5 : b >= 600 ? 4 : b >= 200 ? 3 : 2, T.push(new d(g, E + 1)), o = 0; o <= E; o++) {\n g[o] = 1;\n }T.push(new d(g, E + 1)), g = null;var O = f.makeU8Buffer(Math.ceil(b / 50));for (v(T, k, w, O, E + 1), p(O, T, w), console.assert(T.length >= 2 && T.length <= 6), n.writeBits(3, T.length), n.writeBits(15, O.length), o = 0; o < T.length; o++) {\n _[o] = o;\n }for (o = 0; o < O.length; o++) {\n var S = O[o];for (a = 0; a < T.length && _[a] !== S; a++) {}for (console.assert(a < T.length), u(_, a); a > 0; a--) {\n n.writeBit(1);\n }n.writeBit(0);\n }for (o = 0; o < T.length; o++) {\n T[o].emit(n), T[o].computeCanonical();\n }for (o = 0, s = 0; o < b;) {\n var U = T[O[s++]];for (a = 0; a < 50 && o < b; a++) {\n U.encode(n, w[o++]);\n }\n }\n },\n w = (0, _create2.default)(null);return w.compressFile = function (e, r, i) {\n e = f.coerceInputStream(e);var o = f.coerceOutputStream(r, r);r = new t(o.stream);var a = 9;if (\"number\" == typeof i && (a = i), a < 1 || a > 9) throw new Error(\"Invalid block size multiplier\");var u = 1e5 * a;u -= 19, r.writeByte(\"B\".charCodeAt(0)), r.writeByte(\"Z\".charCodeAt(0)), r.writeByte(\"h\".charCodeAt(0)), r.writeByte(\"0\".charCodeAt(0) + a);var s,\n c = f.makeU8Buffer(u),\n h = 0;do {\n var l = new n();s = B(e, c, u, l), s > 0 && (h = ((h << 1 | h >>> 31) ^ l.getCRC()) >>> 0, r.writeBits(48, 54156738319193), r.writeBits(32, l.getCRC()), m(c, s, r));\n } while (s === u);return r.writeBits(48, 25779555029136), r.writeBits(32, h), r.flush(), o.retval;\n }, w.decompressFile = l.decode, w.decompressBlock = l.decodeBlock, w.table = l.table, w;\n}(0, BitStream, BWT, CRC32, HuffmanAllocator, Stream, Util), module.exports = Bzip2;\n\n}).call(this,_dereq_('_process'),_dereq_(\"buffer\").Buffer)\n},{\"_process\":317,\"babel-runtime/core-js/object/create\":25,\"babel-runtime/core-js/object/freeze\":28,\"babel-runtime/helpers/typeof\":41,\"buffer\":47}],324:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_(\"../enums\");\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n /**\n * @memberof module:config\n * @property {Integer} prefer_hash_algorithm Default hash algorithm {@link module:enums.hash}\n */\n prefer_hash_algorithm: _enums2.default.hash.sha256,\n /**\n * @memberof module:config\n * @property {Integer} encryption_cipher Default encryption cipher {@link module:enums.symmetric}\n */\n encryption_cipher: _enums2.default.symmetric.aes256,\n /**\n * @memberof module:config\n * @property {Integer} compression Default compression algorithm {@link module:enums.compression}\n */\n compression: _enums2.default.compression.uncompressed,\n /**\n * @memberof module:config\n * @property {Integer} deflate_level Default zip/zlib compression level, between 1 and 9\n */\n deflate_level: 6,\n\n /**\n * Use Authenticated Encryption with Additional Data (AEAD) protection for symmetric encryption.\n * **NOT INTEROPERABLE WITH OTHER OPENPGP IMPLEMENTATIONS**\n * **FUTURE OPENPGP.JS VERSIONS MAY BREAK COMPATIBILITY WHEN USING THIS OPTION**\n * @memberof module:config\n * @property {Boolean} aead_protect\n */\n aead_protect: false,\n /**\n * Use Authenticated Encryption with Additional Data (AEAD) protection for symmetric encryption.\n * 0 means we implement a variant of {@link https://tools.ietf.org/html/draft-ford-openpgp-format-00|this IETF draft}.\n * 4 means we implement {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04|RFC4880bis-04}.\n * Note that this determines how AEAD packets are parsed even when aead_protect is set to false\n * @memberof module:config\n * @property {Integer} aead_protect_version\n */\n aead_protect_version: 4,\n /**\n * Default Authenticated Encryption with Additional Data (AEAD) encryption mode\n * Only has an effect when aead_protect is set to true.\n * @memberof module:config\n * @property {Integer} aead_mode Default AEAD mode {@link module:enums.aead}\n */\n aead_mode: _enums2.default.aead.eax,\n /**\n * Chunk Size Byte for Authenticated Encryption with Additional Data (AEAD) mode\n * Only has an effect when aead_protect is set to true.\n * Must be an integer value from 0 to 56.\n * @memberof module:config\n * @property {Integer} aead_chunk_size_byte\n */\n aead_chunk_size_byte: 12,\n /**\n * {@link https://tools.ietf.org/html/rfc4880#section-3.7.1.3|RFC4880 3.7.1.3}:\n * Iteration Count Byte for S2K (String to Key)\n * @memberof module:config\n * @property {Integer} s2k_iteration_count_byte\n */\n s2k_iteration_count_byte: 96,\n /** Use integrity protection for symmetric encryption\n * @memberof module:config\n * @property {Boolean} integrity_protect\n */\n integrity_protect: true,\n /**\n * @memberof module:config\n * @property {Boolean} ignore_mdc_error Fail on decrypt if message is not integrity protected\n */\n ignore_mdc_error: false,\n /**\n * @memberof module:config\n * @property {Boolean} checksum_required Do not throw error when armor is missing a checksum\n */\n checksum_required: false,\n /**\n * @memberof module:config\n * @property {Boolean} rsa_blinding\n */\n rsa_blinding: true,\n /**\n * Work-around for rare GPG decryption bug when encrypting with multiple passwords.\n * **Slower and slightly less secure**\n * @memberof module:config\n * @property {Boolean} password_collision_check\n */\n password_collision_check: false,\n /**\n * @memberof module:config\n * @property {Boolean} revocations_expire If true, expired revocation signatures are ignored\n */\n revocations_expire: false,\n\n /**\n * @memberof module:config\n * @property {Boolean} use_native Use native Node.js crypto/zlib and WebCrypto APIs when available\n */\n use_native: true,\n /**\n * @memberof module:config\n * @property {Boolean} Use transferable objects between the Web Worker and main thread\n */\n zero_copy: false,\n /**\n * @memberof module:config\n * @property {Boolean} debug If enabled, debug messages will be printed\n */\n debug: false,\n /**\n * @memberof module:config\n * @property {Boolean} tolerant Ignore unsupported/unrecognizable packets instead of throwing an error\n */\n tolerant: true,\n\n /**\n * @memberof module:config\n * @property {Boolean} show_version Whether to include {@link module:config/config.versionstring} in armored messages\n */\n show_version: true,\n /**\n * @memberof module:config\n * @property {Boolean} show_comment Whether to include {@link module:config/config.commentstring} in armored messages\n */\n show_comment: true,\n /**\n * @memberof module:config\n * @property {String} versionstring A version string to be included in armored messages\n */\n versionstring: \"OpenPGP.js v3.0.13\",\n /**\n * @memberof module:config\n * @property {String} commentstring A comment string to be included in armored messages\n */\n commentstring: \"https://openpgpjs.org\",\n\n /**\n * @memberof module:config\n * @property {String} keyserver\n */\n keyserver: \"https://keyserver.ubuntu.com\",\n /**\n * @memberof module:config\n * @property {String} node_store\n */\n node_store: \"./openpgp.store\",\n /**\n * Max userid string length (used for parsing)\n * @memberof module:config\n * @property {Integer} max_userid_length\n */\n max_userid_length: 1024 * 5\n}; // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Global configuration values.\n * @requires enums\n */\n\n},{\"../enums\":359}],325:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _config = _dereq_('./config.js');\n\nObject.defineProperty(exports, 'default', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_config).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n},{\"./config.js\":324}],326:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of RFC 3394 AES Key Wrap & Key Unwrap funcions\n * @see module:crypto/public_key/elliptic/ecdh\n * @requires crypto/cipher\n * @requires util\n * @module crypto/aes_kw\n */\n\nfunction wrap(key, data) {\n var aes = new _cipher2.default[\"aes\" + key.length * 8](key);\n var IV = new Uint32Array([0xA6A6A6A6, 0xA6A6A6A6]);\n var P = unpack(data);\n var A = IV;\n var R = P;\n var n = P.length / 2;\n var t = new Uint32Array([0, 0]);\n var B = new Uint32Array(4);\n for (var j = 0; j <= 5; ++j) {\n for (var i = 0; i < n; ++i) {\n t[1] = n * j + (1 + i);\n // B = A\n B[0] = A[0];\n B[1] = A[1];\n // B = A || R[i]\n B[2] = R[2 * i];\n B[3] = R[2 * i + 1];\n // B = AES(K, B)\n B = unpack(aes.encrypt(pack(B)));\n // A = MSB(64, B) ^ t\n A = B.subarray(0, 2);\n A[0] ^= t[0];\n A[1] ^= t[1];\n // R[i] = LSB(64, B)\n R[2 * i] = B[2];\n R[2 * i + 1] = B[3];\n }\n }\n return pack(A, R);\n}\n\nfunction unwrap(key, data) {\n var aes = new _cipher2.default[\"aes\" + key.length * 8](key);\n var IV = new Uint32Array([0xA6A6A6A6, 0xA6A6A6A6]);\n var C = unpack(data);\n var A = C.subarray(0, 2);\n var R = C.subarray(2);\n var n = C.length / 2 - 1;\n var t = new Uint32Array([0, 0]);\n var B = new Uint32Array(4);\n for (var j = 5; j >= 0; --j) {\n for (var i = n - 1; i >= 0; --i) {\n t[1] = n * j + (i + 1);\n // B = A ^ t\n B[0] = A[0] ^ t[0];\n B[1] = A[1] ^ t[1];\n // B = (A ^ t) || R[i]\n B[2] = R[2 * i];\n B[3] = R[2 * i + 1];\n // B = AES-1(B)\n B = unpack(aes.decrypt(pack(B)));\n // A = MSB(64, B)\n A = B.subarray(0, 2);\n // R[i] = LSB(64, B)\n R[2 * i] = B[2];\n R[2 * i + 1] = B[3];\n }\n }\n if (A[0] === IV[0] && A[1] === IV[1]) {\n return pack(R);\n }\n throw new Error(\"Key Data Integrity failed\");\n}\n\nfunction createArrayBuffer(data) {\n if (_util2.default.isString(data)) {\n var length = data.length;\n\n var buffer = new ArrayBuffer(length);\n var view = new Uint8Array(buffer);\n for (var j = 0; j < length; ++j) {\n view[j] = data.charCodeAt(j);\n }\n return buffer;\n }\n return new Uint8Array(data).buffer;\n}\n\nfunction unpack(data) {\n var length = data.length;\n\n var buffer = createArrayBuffer(data);\n var view = new DataView(buffer);\n var arr = new Uint32Array(length / 4);\n for (var i = 0; i < length / 4; ++i) {\n arr[i] = view.getUint32(4 * i);\n }\n return arr;\n}\n\nfunction pack() {\n var length = 0;\n for (var k = 0; k < arguments.length; ++k) {\n length += 4 * arguments[k].length;\n }\n var buffer = new ArrayBuffer(length);\n var view = new DataView(buffer);\n var offset = 0;\n for (var i = 0; i < arguments.length; ++i) {\n for (var j = 0; j < arguments[i].length; ++j) {\n view.setUint32(offset + 4 * j, arguments[i][j]);\n }\n offset += 4 * arguments[i].length;\n }\n return new Uint8Array(buffer);\n}\n\nexports.default = {\n /**\n * AES key wrap\n * @function\n * @param {String} key\n * @param {String} data\n * @returns {Uint8Array}\n */\n wrap: wrap,\n /**\n * AES key unwrap\n * @function\n * @param {String} key\n * @param {String} data\n * @returns {Uint8Array}\n * @throws {Error}\n */\n unwrap: unwrap\n};\n\n},{\"../util\":398,\"./cipher\":332}],327:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n\n /**\n * This function encrypts a given plaintext with the specified prefixrandom\n * using the specified blockcipher\n * @param {Uint8Array} prefixrandom random bytes of block_size length\n * to be used in prefixing the data\n * @param {String} cipherfn the algorithm cipher class to encrypt\n * data in one block_size encryption, {@link module:crypto/cipher}.\n * @param {Uint8Array} plaintext data to be encrypted\n * @param {Uint8Array} key key to be used to encrypt the plaintext.\n * This will be passed to the cipherfn\n * @param {Boolean} resync a boolean value specifying if a resync of the\n * IV should be used or not. The encrypteddatapacket uses the\n * \"old\" style with a resync. Encryption within an\n * encryptedintegrityprotecteddata packet is not resyncing the IV.\n * @returns {Uint8Array} encrypted data\n */\n encrypt: function encrypt(prefixrandom, cipherfn, plaintext, key, resync) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var FR = new Uint8Array(block_size);\n var FRE = new Uint8Array(block_size);\n\n var new_prefix = new Uint8Array(prefixrandom.length + 2);\n new_prefix.set(prefixrandom);\n new_prefix[prefixrandom.length] = prefixrandom[block_size - 2];\n new_prefix[prefixrandom.length + 1] = prefixrandom[block_size - 1];\n prefixrandom = new_prefix;\n\n var ciphertext = new Uint8Array(plaintext.length + 2 + block_size * 2);\n var i = void 0;\n var n = void 0;\n var begin = void 0;\n var offset = resync ? 0 : 2;\n\n // 1. The feedback register (FR) is set to the IV, which is all zeros.\n for (i = 0; i < block_size; i++) {\n FR[i] = 0;\n }\n\n // 2. FR is encrypted to produce FRE (FR Encrypted). This is the\n // encryption of an all-zero value.\n FRE = cipherfn.encrypt(FR);\n // 3. FRE is xored with the first BS octets of random data prefixed to\n // the plaintext to produce C[1] through C[BS], the first BS octets\n // of ciphertext.\n for (i = 0; i < block_size; i++) {\n ciphertext[i] = FRE[i] ^ prefixrandom[i];\n }\n\n // 4. FR is loaded with C[1] through C[BS].\n FR.set(ciphertext.subarray(0, block_size));\n\n // 5. FR is encrypted to produce FRE, the encryption of the first BS\n // octets of ciphertext.\n FRE = cipherfn.encrypt(FR);\n\n // 6. The left two octets of FRE get xored with the next two octets of\n // data that were prefixed to the plaintext. This produces C[BS+1]\n // and C[BS+2], the next two octets of ciphertext.\n ciphertext[block_size] = FRE[0] ^ prefixrandom[block_size];\n ciphertext[block_size + 1] = FRE[1] ^ prefixrandom[block_size + 1];\n\n if (resync) {\n // 7. (The resync step) FR is loaded with C[3] through C[BS+2].\n FR.set(ciphertext.subarray(2, block_size + 2));\n } else {\n FR.set(ciphertext.subarray(0, block_size));\n }\n // 8. FR is encrypted to produce FRE.\n FRE = cipherfn.encrypt(FR);\n\n // 9. FRE is xored with the first BS octets of the given plaintext, now\n // that we have finished encrypting the BS+2 octets of prefixed\n // data. This produces C[BS+3] through C[BS+(BS+2)], the next BS\n // octets of ciphertext.\n for (i = 0; i < block_size; i++) {\n ciphertext[block_size + 2 + i] = FRE[i + offset] ^ plaintext[i];\n }\n for (n = block_size; n < plaintext.length + offset; n += block_size) {\n // 10. FR is loaded with C[BS+3] to C[BS + (BS+2)] (which is C11-C18 for\n // an 8-octet block).\n begin = n + 2 - offset;\n FR.set(ciphertext.subarray(begin, begin + block_size));\n\n // 11. FR is encrypted to produce FRE.\n FRE = cipherfn.encrypt(FR);\n\n // 12. FRE is xored with the next BS octets of plaintext, to produce\n // the next BS octets of ciphertext. These are loaded into FR, and\n // the process is repeated until the plaintext is used up.\n for (i = 0; i < block_size; i++) {\n ciphertext[block_size + begin + i] = FRE[i] ^ plaintext[n + i - offset];\n }\n }\n\n ciphertext = ciphertext.subarray(0, plaintext.length + 2 + block_size);\n return ciphertext;\n },\n\n /**\n * Decrypts the prefixed data for the Modification Detection Code (MDC) computation\n * @param {String} cipherfn.encrypt Cipher function to use,\n * @see module:crypto/cipher.\n * @param {Uint8Array} key Uint8Array representation of key to be used to check the mdc\n * This will be passed to the cipherfn\n * @param {Uint8Array} ciphertext The encrypted data\n * @returns {Uint8Array} plaintext Data of D(ciphertext) with blocksize length +2\n */\n mdc: function mdc(cipherfn, key, ciphertext) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var iblock = new Uint8Array(block_size);\n var ablock = new Uint8Array(block_size);\n var i = void 0;\n\n // initialisation vector\n for (i = 0; i < block_size; i++) {\n iblock[i] = 0;\n }\n\n iblock = cipherfn.encrypt(iblock);\n for (i = 0; i < block_size; i++) {\n ablock[i] = ciphertext[i];\n iblock[i] ^= ablock[i];\n }\n\n ablock = cipherfn.encrypt(ablock);\n\n var result = new Uint8Array(iblock.length + 2);\n result.set(iblock);\n result[iblock.length] = ablock[0] ^ ciphertext[block_size];\n result[iblock.length + 1] = ablock[1] ^ ciphertext[block_size + 1];\n return result;\n },\n\n /**\n * This function decrypts a given ciphertext using the specified blockcipher\n * @param {String} cipherfn the algorithm cipher class to decrypt\n * data in one block_size encryption, {@link module:crypto/cipher}.\n * @param {Uint8Array} key Uint8Array representation of key to be used to decrypt the ciphertext.\n * This will be passed to the cipherfn\n * @param {Uint8Array} ciphertext to be decrypted\n * @param {Boolean} resync a boolean value specifying if a resync of the\n * IV should be used or not. The encrypteddatapacket uses the\n * \"old\" style with a resync. Decryption within an\n * encryptedintegrityprotecteddata packet is not resyncing the IV.\n * @returns {Uint8Array} the plaintext data\n */\n decrypt: function decrypt(cipherfn, key, ciphertext, resync) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var iblock = new Uint8Array(block_size);\n var ablock = new Uint8Array(block_size);\n\n var i = void 0;\n var j = void 0;\n var n = void 0;\n var text = new Uint8Array(ciphertext.length - block_size);\n\n // initialisation vector\n for (i = 0; i < block_size; i++) {\n iblock[i] = 0;\n }\n\n iblock = cipherfn.encrypt(iblock);\n for (i = 0; i < block_size; i++) {\n ablock[i] = ciphertext[i];\n iblock[i] ^= ablock[i];\n }\n\n ablock = cipherfn.encrypt(ablock);\n\n // test check octets\n if (iblock[block_size - 2] !== (ablock[0] ^ ciphertext[block_size]) || iblock[block_size - 1] !== (ablock[1] ^ ciphertext[block_size + 1])) {\n throw new Error('CFB decrypt: invalid key');\n }\n\n /* RFC4880: Tag 18 and Resync:\n * [...] Unlike the Symmetrically Encrypted Data Packet, no\n * special CFB resynchronization is done after encrypting this prefix\n * data. See \"OpenPGP CFB Mode\" below for more details.\n */\n\n j = 0;\n if (resync) {\n for (i = 0; i < block_size; i++) {\n iblock[i] = ciphertext[i + 2];\n }\n for (n = block_size + 2; n < ciphertext.length; n += block_size) {\n ablock = cipherfn.encrypt(iblock);\n\n for (i = 0; i < block_size && i + n < ciphertext.length; i++) {\n iblock[i] = ciphertext[n + i];\n if (j < text.length) {\n text[j] = ablock[i] ^ iblock[i];\n j++;\n }\n }\n }\n } else {\n for (i = 0; i < block_size; i++) {\n iblock[i] = ciphertext[i];\n }\n for (n = block_size; n < ciphertext.length; n += block_size) {\n ablock = cipherfn.encrypt(iblock);\n for (i = 0; i < block_size && i + n < ciphertext.length; i++) {\n iblock[i] = ciphertext[n + i];\n if (j < text.length) {\n text[j] = ablock[i] ^ iblock[i];\n j++;\n }\n }\n }\n }\n\n n = resync ? 0 : 2;\n\n text = text.subarray(n, ciphertext.length - block_size - 2 + n);\n\n return text;\n },\n\n normalEncrypt: function normalEncrypt(cipherfn, key, plaintext, iv) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var blocki = new Uint8Array(block_size);\n var blockc = new Uint8Array(block_size);\n var pos = 0;\n var cyphertext = new Uint8Array(plaintext.length);\n var i = void 0;\n var j = 0;\n\n if (iv === null) {\n for (i = 0; i < block_size; i++) {\n blockc[i] = 0;\n }\n } else {\n for (i = 0; i < block_size; i++) {\n blockc[i] = iv[i];\n }\n }\n while (plaintext.length > block_size * pos) {\n var encblock = cipherfn.encrypt(blockc);\n blocki = plaintext.subarray(pos * block_size, pos * block_size + block_size);\n for (i = 0; i < blocki.length; i++) {\n blockc[i] = blocki[i] ^ encblock[i];\n cyphertext[j++] = blockc[i];\n }\n pos++;\n }\n return cyphertext;\n },\n\n normalDecrypt: function normalDecrypt(cipherfn, key, ciphertext, iv) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var blockp = void 0;\n var pos = 0;\n var plaintext = new Uint8Array(ciphertext.length);\n var offset = 0;\n var i = void 0;\n var j = 0;\n\n if (iv === null) {\n blockp = new Uint8Array(block_size);\n for (i = 0; i < block_size; i++) {\n blockp[i] = 0;\n }\n } else {\n blockp = iv.subarray(0, block_size);\n }\n while (ciphertext.length > block_size * pos) {\n var decblock = cipherfn.encrypt(blockp);\n blockp = ciphertext.subarray(pos * block_size + offset, pos * block_size + block_size + offset);\n for (i = 0; i < blockp.length; i++) {\n plaintext[j++] = blockp[i] ^ decblock[i];\n }\n pos++;\n }\n\n return plaintext;\n }\n}; // Modified by ProtonTech AG\n\n// Modified by Recurity Labs GmbH\n\n// modified version of https://www.hanewin.net/encrypt/PGdecode.js:\n\n/* OpenPGP encryption using RSA/AES\n * Copyright 2005-2006 Herbert Hanewinkel, www.haneWIN.de\n * version 2.0, check www.haneWIN.de for the latest version\n\n * This software is provided as-is, without express or implied warranty.\n * Permission to use, copy, modify, distribute or sell this software, with or\n * without fee, for any purpose and by any individual or organization, is hereby\n * granted, provided that the above copyright notice and this paragraph appear\n * in all copies. Distribution as a part of an application or binary must\n * include the above copyright notice in the documentation and/or other\n * materials provided with the application or distribution.\n */\n\n/**\n * @requires crypto/cipher\n * @module crypto/cfb\n */\n\n},{\"./cipher\":332}],328:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/exports');\n\nvar _ecb = _dereq_('asmcrypto.js/src/aes/ecb/ecb');\n\n// TODO use webCrypto or nodeCrypto when possible.\n/**\n * @requires asmcrypto.js\n */\n\nfunction aes(length) {\n var C = function C(key) {\n var aes_ecb = new _ecb.AES_ECB(key, _exports._AES_heap_instance, _exports._AES_asm_instance);\n\n this.encrypt = function (block) {\n return aes_ecb.encrypt(block).result;\n };\n\n this.decrypt = function (block) {\n return aes_ecb.decrypt(block).result;\n };\n };\n\n C.blockSize = C.prototype.blockSize = 16;\n C.keySize = C.prototype.keySize = length / 8;\n\n return C;\n}\n\nexports.default = aes;\n\n},{\"asmcrypto.js/src/aes/ecb/ecb\":10,\"asmcrypto.js/src/aes/exports\":11}],329:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* Modified by Recurity Labs GmbH\n *\n * Originally written by nklein software (nklein.com)\n */\n\n/*\n * Javascript implementation based on Bruce Schneier's reference implementation.\n *\n *\n * The constructor doesn't do much of anything. It's just here\n * so we can start defining properties and methods and such.\n */\nfunction Blowfish() {}\n\n/*\n * Declare the block size so that protocols know what size\n * Initialization Vector (IV) they will need.\n */\nBlowfish.prototype.BLOCKSIZE = 8;\n\n/*\n * These are the default SBOXES.\n */\nBlowfish.prototype.SBOXES = [[0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a], [0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7], [0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0], [0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6]];\n\n//*\n//* This is the default PARRAY\n//*\nBlowfish.prototype.PARRAY = [0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b];\n\n//*\n//* This is the number of rounds the cipher will go\n//*\nBlowfish.prototype.NN = 16;\n\n//*\n//* This function is needed to get rid of problems\n//* with the high-bit getting set. If we don't do\n//* this, then sometimes ( aa & 0x00FFFFFFFF ) is not\n//* equal to ( bb & 0x00FFFFFFFF ) even when they\n//* agree bit-for-bit for the first 32 bits.\n//*\nBlowfish.prototype._clean = function (xx) {\n if (xx < 0) {\n var yy = xx & 0x7FFFFFFF;\n xx = yy + 0x80000000;\n }\n return xx;\n};\n\n//*\n//* This is the mixing function that uses the sboxes\n//*\nBlowfish.prototype._F = function (xx) {\n var yy = void 0;\n\n var dd = xx & 0x00FF;\n xx >>>= 8;\n var cc = xx & 0x00FF;\n xx >>>= 8;\n var bb = xx & 0x00FF;\n xx >>>= 8;\n var aa = xx & 0x00FF;\n\n yy = this.sboxes[0][aa] + this.sboxes[1][bb];\n yy ^= this.sboxes[2][cc];\n yy += this.sboxes[3][dd];\n\n return yy;\n};\n\n//*\n//* This method takes an array with two values, left and right\n//* and does NN rounds of Blowfish on them.\n//*\nBlowfish.prototype._encrypt_block = function (vals) {\n var dataL = vals[0];\n var dataR = vals[1];\n\n var ii = void 0;\n\n for (ii = 0; ii < this.NN; ++ii) {\n dataL ^= this.parray[ii];\n dataR = this._F(dataL) ^ dataR;\n\n var tmp = dataL;\n dataL = dataR;\n dataR = tmp;\n }\n\n dataL ^= this.parray[this.NN + 0];\n dataR ^= this.parray[this.NN + 1];\n\n vals[0] = this._clean(dataR);\n vals[1] = this._clean(dataL);\n};\n\n//*\n//* This method takes a vector of numbers and turns them\n//* into long words so that they can be processed by the\n//* real algorithm.\n//*\n//* Maybe I should make the real algorithm above take a vector\n//* instead. That will involve more looping, but it won't require\n//* the F() method to deconstruct the vector.\n//*\nBlowfish.prototype.encrypt_block = function (vector) {\n var ii = void 0;\n var vals = [0, 0];\n var off = this.BLOCKSIZE / 2;\n for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {\n vals[0] = vals[0] << 8 | vector[ii + 0] & 0x00FF;\n vals[1] = vals[1] << 8 | vector[ii + off] & 0x00FF;\n }\n\n this._encrypt_block(vals);\n\n var ret = [];\n for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {\n ret[ii + 0] = vals[0] >>> 24 - 8 * ii & 0x00FF;\n ret[ii + off] = vals[1] >>> 24 - 8 * ii & 0x00FF;\n // vals[ 0 ] = ( vals[ 0 ] >>> 8 );\n // vals[ 1 ] = ( vals[ 1 ] >>> 8 );\n }\n\n return ret;\n};\n\n//*\n//* This method takes an array with two values, left and right\n//* and undoes NN rounds of Blowfish on them.\n//*\nBlowfish.prototype._decrypt_block = function (vals) {\n var dataL = vals[0];\n var dataR = vals[1];\n\n var ii = void 0;\n\n for (ii = this.NN + 1; ii > 1; --ii) {\n dataL ^= this.parray[ii];\n dataR = this._F(dataL) ^ dataR;\n\n var tmp = dataL;\n dataL = dataR;\n dataR = tmp;\n }\n\n dataL ^= this.parray[1];\n dataR ^= this.parray[0];\n\n vals[0] = this._clean(dataR);\n vals[1] = this._clean(dataL);\n};\n\n//*\n//* This method takes a key array and initializes the\n//* sboxes and parray for this encryption.\n//*\nBlowfish.prototype.init = function (key) {\n var ii = void 0;\n var jj = 0;\n\n this.parray = [];\n for (ii = 0; ii < this.NN + 2; ++ii) {\n var data = 0x00000000;\n for (var kk = 0; kk < 4; ++kk) {\n data = data << 8 | key[jj] & 0x00FF;\n if (++jj >= key.length) {\n jj = 0;\n }\n }\n this.parray[ii] = this.PARRAY[ii] ^ data;\n }\n\n this.sboxes = [];\n for (ii = 0; ii < 4; ++ii) {\n this.sboxes[ii] = [];\n for (jj = 0; jj < 256; ++jj) {\n this.sboxes[ii][jj] = this.SBOXES[ii][jj];\n }\n }\n\n var vals = [0x00000000, 0x00000000];\n\n for (ii = 0; ii < this.NN + 2; ii += 2) {\n this._encrypt_block(vals);\n this.parray[ii + 0] = vals[0];\n this.parray[ii + 1] = vals[1];\n }\n\n for (ii = 0; ii < 4; ++ii) {\n for (jj = 0; jj < 256; jj += 2) {\n this._encrypt_block(vals);\n this.sboxes[ii][jj + 0] = vals[0];\n this.sboxes[ii][jj + 1] = vals[1];\n }\n }\n};\n\n// added by Recurity Labs\nfunction BF(key) {\n this.bf = new Blowfish();\n this.bf.init(key);\n\n this.encrypt = function (block) {\n return this.bf.encrypt_block(block);\n };\n}\n\nBF.keySize = BF.prototype.keySize = 16;\nBF.blockSize = BF.prototype.blockSize = 16;\n\nexports.default = BF;\n\n},{}],330:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Copyright 2010 pjacobs@xeekr.com . All rights reserved.\n\n// Modified by Recurity Labs GmbH\n\n// fixed/modified by Herbert Hanewinkel, www.haneWIN.de\n// check www.haneWIN.de for the latest version\n\n// cast5.js is a Javascript implementation of CAST-128, as defined in RFC 2144.\n// CAST-128 is a common OpenPGP cipher.\n\n\n// CAST5 constructor\n\nfunction OpenpgpSymencCast5() {\n this.BlockSize = 8;\n this.KeySize = 16;\n\n this.setKey = function (key) {\n this.masking = new Array(16);\n this.rotate = new Array(16);\n\n this.reset();\n\n if (key.length === this.KeySize) {\n this.keySchedule(key);\n } else {\n throw new Error('CAST-128: keys must be 16 bytes');\n }\n return true;\n };\n\n this.reset = function () {\n for (var i = 0; i < 16; i++) {\n this.masking[i] = 0;\n this.rotate[i] = 0;\n }\n };\n\n this.getBlockSize = function () {\n return this.BlockSize;\n };\n\n this.encrypt = function (src) {\n var dst = new Array(src.length);\n\n for (var i = 0; i < src.length; i += 8) {\n var l = src[i] << 24 | src[i + 1] << 16 | src[i + 2] << 8 | src[i + 3];\n var r = src[i + 4] << 24 | src[i + 5] << 16 | src[i + 6] << 8 | src[i + 7];\n var t = void 0;\n\n t = r;\n r = l ^ f1(r, this.masking[0], this.rotate[0]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[1], this.rotate[1]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[2], this.rotate[2]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[3], this.rotate[3]);\n l = t;\n\n t = r;\n r = l ^ f2(r, this.masking[4], this.rotate[4]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[5], this.rotate[5]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[6], this.rotate[6]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[7], this.rotate[7]);\n l = t;\n\n t = r;\n r = l ^ f3(r, this.masking[8], this.rotate[8]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[9], this.rotate[9]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[10], this.rotate[10]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[11], this.rotate[11]);\n l = t;\n\n t = r;\n r = l ^ f1(r, this.masking[12], this.rotate[12]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[13], this.rotate[13]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[14], this.rotate[14]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[15], this.rotate[15]);\n l = t;\n\n dst[i] = r >>> 24 & 255;\n dst[i + 1] = r >>> 16 & 255;\n dst[i + 2] = r >>> 8 & 255;\n dst[i + 3] = r & 255;\n dst[i + 4] = l >>> 24 & 255;\n dst[i + 5] = l >>> 16 & 255;\n dst[i + 6] = l >>> 8 & 255;\n dst[i + 7] = l & 255;\n }\n\n return dst;\n };\n\n this.decrypt = function (src) {\n var dst = new Array(src.length);\n\n for (var i = 0; i < src.length; i += 8) {\n var l = src[i] << 24 | src[i + 1] << 16 | src[i + 2] << 8 | src[i + 3];\n var r = src[i + 4] << 24 | src[i + 5] << 16 | src[i + 6] << 8 | src[i + 7];\n var t = void 0;\n\n t = r;\n r = l ^ f1(r, this.masking[15], this.rotate[15]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[14], this.rotate[14]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[13], this.rotate[13]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[12], this.rotate[12]);\n l = t;\n\n t = r;\n r = l ^ f3(r, this.masking[11], this.rotate[11]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[10], this.rotate[10]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[9], this.rotate[9]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[8], this.rotate[8]);\n l = t;\n\n t = r;\n r = l ^ f2(r, this.masking[7], this.rotate[7]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[6], this.rotate[6]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[5], this.rotate[5]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[4], this.rotate[4]);\n l = t;\n\n t = r;\n r = l ^ f1(r, this.masking[3], this.rotate[3]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[2], this.rotate[2]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[1], this.rotate[1]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[0], this.rotate[0]);\n l = t;\n\n dst[i] = r >>> 24 & 255;\n dst[i + 1] = r >>> 16 & 255;\n dst[i + 2] = r >>> 8 & 255;\n dst[i + 3] = r & 255;\n dst[i + 4] = l >>> 24 & 255;\n dst[i + 5] = l >> 16 & 255;\n dst[i + 6] = l >> 8 & 255;\n dst[i + 7] = l & 255;\n }\n\n return dst;\n };\n var scheduleA = new Array(4);\n\n scheduleA[0] = new Array(4);\n scheduleA[0][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 0x8];\n scheduleA[0][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];\n scheduleA[0][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];\n scheduleA[0][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];\n\n scheduleA[1] = new Array(4);\n scheduleA[1][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];\n scheduleA[1][1] = [1, 4, 0, 2, 1, 3, 16 + 2];\n scheduleA[1][2] = [2, 5, 7, 6, 5, 4, 16 + 1];\n scheduleA[1][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];\n\n scheduleA[2] = new Array(4);\n scheduleA[2][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 8];\n scheduleA[2][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];\n scheduleA[2][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];\n scheduleA[2][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];\n\n scheduleA[3] = new Array(4);\n scheduleA[3][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];\n scheduleA[3][1] = [1, 4, 0, 2, 1, 3, 16 + 2];\n scheduleA[3][2] = [2, 5, 7, 6, 5, 4, 16 + 1];\n scheduleA[3][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];\n\n var scheduleB = new Array(4);\n\n scheduleB[0] = new Array(4);\n scheduleB[0][0] = [16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2];\n scheduleB[0][1] = [16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6];\n scheduleB[0][2] = [16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9];\n scheduleB[0][3] = [16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc];\n\n scheduleB[1] = new Array(4);\n scheduleB[1][0] = [3, 2, 0xc, 0xd, 8];\n scheduleB[1][1] = [1, 0, 0xe, 0xf, 0xd];\n scheduleB[1][2] = [7, 6, 8, 9, 3];\n scheduleB[1][3] = [5, 4, 0xa, 0xb, 7];\n\n scheduleB[2] = new Array(4);\n scheduleB[2][0] = [16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9];\n scheduleB[2][1] = [16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc];\n scheduleB[2][2] = [16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2];\n scheduleB[2][3] = [16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6];\n\n scheduleB[3] = new Array(4);\n scheduleB[3][0] = [8, 9, 7, 6, 3];\n scheduleB[3][1] = [0xa, 0xb, 5, 4, 7];\n scheduleB[3][2] = [0xc, 0xd, 3, 2, 8];\n scheduleB[3][3] = [0xe, 0xf, 1, 0, 0xd];\n\n // changed 'in' to 'inn' (in javascript 'in' is a reserved word)\n this.keySchedule = function (inn) {\n var t = new Array(8);\n var k = new Array(32);\n\n var j = void 0;\n\n for (var i = 0; i < 4; i++) {\n j = i * 4;\n t[i] = inn[j] << 24 | inn[j + 1] << 16 | inn[j + 2] << 8 | inn[j + 3];\n }\n\n var x = [6, 7, 4, 5];\n var ki = 0;\n var w = void 0;\n\n for (var half = 0; half < 2; half++) {\n for (var round = 0; round < 4; round++) {\n for (j = 0; j < 4; j++) {\n var a = scheduleA[round][j];\n w = t[a[1]];\n\n w ^= sBox[4][t[a[2] >>> 2] >>> 24 - 8 * (a[2] & 3) & 0xff];\n w ^= sBox[5][t[a[3] >>> 2] >>> 24 - 8 * (a[3] & 3) & 0xff];\n w ^= sBox[6][t[a[4] >>> 2] >>> 24 - 8 * (a[4] & 3) & 0xff];\n w ^= sBox[7][t[a[5] >>> 2] >>> 24 - 8 * (a[5] & 3) & 0xff];\n w ^= sBox[x[j]][t[a[6] >>> 2] >>> 24 - 8 * (a[6] & 3) & 0xff];\n t[a[0]] = w;\n }\n\n for (j = 0; j < 4; j++) {\n var b = scheduleB[round][j];\n w = sBox[4][t[b[0] >>> 2] >>> 24 - 8 * (b[0] & 3) & 0xff];\n\n w ^= sBox[5][t[b[1] >>> 2] >>> 24 - 8 * (b[1] & 3) & 0xff];\n w ^= sBox[6][t[b[2] >>> 2] >>> 24 - 8 * (b[2] & 3) & 0xff];\n w ^= sBox[7][t[b[3] >>> 2] >>> 24 - 8 * (b[3] & 3) & 0xff];\n w ^= sBox[4 + j][t[b[4] >>> 2] >>> 24 - 8 * (b[4] & 3) & 0xff];\n k[ki] = w;\n ki++;\n }\n }\n }\n\n for (var _i = 0; _i < 16; _i++) {\n this.masking[_i] = k[_i];\n this.rotate[_i] = k[16 + _i] & 0x1f;\n }\n };\n\n // These are the three 'f' functions. See RFC 2144, section 2.2.\n\n function f1(d, m, r) {\n var t = m + d;\n var I = t << r | t >>> 32 - r;\n return (sBox[0][I >>> 24] ^ sBox[1][I >>> 16 & 255]) - sBox[2][I >>> 8 & 255] + sBox[3][I & 255];\n }\n\n function f2(d, m, r) {\n var t = m ^ d;\n var I = t << r | t >>> 32 - r;\n return sBox[0][I >>> 24] - sBox[1][I >>> 16 & 255] + sBox[2][I >>> 8 & 255] ^ sBox[3][I & 255];\n }\n\n function f3(d, m, r) {\n var t = m - d;\n var I = t << r | t >>> 32 - r;\n return (sBox[0][I >>> 24] + sBox[1][I >>> 16 & 255] ^ sBox[2][I >>> 8 & 255]) - sBox[3][I & 255];\n }\n\n var sBox = new Array(8);\n sBox[0] = [0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf];\n\n sBox[1] = [0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1];\n\n sBox[2] = [0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783];\n\n sBox[3] = [0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2];\n\n sBox[4] = [0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4];\n\n sBox[5] = [0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f];\n\n sBox[6] = [0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3];\n\n sBox[7] = [0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e];\n}\n\nfunction Cast5(key) {\n this.cast5 = new OpenpgpSymencCast5();\n this.cast5.setKey(key);\n\n this.encrypt = function (block) {\n return this.cast5.encrypt(block);\n };\n}\n\nCast5.blockSize = Cast5.prototype.blockSize = 8;\nCast5.keySize = Cast5.prototype.keySize = 16;\n\nexports.default = Cast5;\n\n},{}],331:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//Paul Tero, July 2001\n//http://www.tero.co.uk/des/\n//\n//Optimised for performance with large blocks by Michael Hayworth, November 2001\n//http://www.netdealing.com\n//\n// Modified by Recurity Labs GmbH\n\n//THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n//ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n//HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n//OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n//SUCH DAMAGE.\n\n//des\n//this takes the key, the message, and whether to encrypt or decrypt\n\nfunction des(keys, message, encrypt, mode, iv, padding) {\n //declaring this locally speeds things up a bit\n var spfunction1 = [0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400, 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000, 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4, 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404, 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400, 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004];\n var spfunction2 = [-0x7fef7fe0, -0x7fff8000, 0x8000, 0x108020, 0x100000, 0x20, -0x7fefffe0, -0x7fff7fe0, -0x7fffffe0, -0x7fef7fe0, -0x7fef8000, -0x80000000, -0x7fff8000, 0x100000, 0x20, -0x7fefffe0, 0x108000, 0x100020, -0x7fff7fe0, 0, -0x80000000, 0x8000, 0x108020, -0x7ff00000, 0x100020, -0x7fffffe0, 0, 0x108000, 0x8020, -0x7fef8000, -0x7ff00000, 0x8020, 0, 0x108020, -0x7fefffe0, 0x100000, -0x7fff7fe0, -0x7ff00000, -0x7fef8000, 0x8000, -0x7ff00000, -0x7fff8000, 0x20, -0x7fef7fe0, 0x108020, 0x20, 0x8000, -0x80000000, 0x8020, -0x7fef8000, 0x100000, -0x7fffffe0, 0x100020, -0x7fff7fe0, -0x7fffffe0, 0x100020, 0x108000, 0, -0x7fff8000, 0x8020, -0x80000000, -0x7fefffe0, -0x7fef7fe0, 0x108000];\n var spfunction3 = [0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008, 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000, 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000, 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0, 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208, 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200];\n var spfunction4 = [0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000, 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080, 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0, 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001, 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080];\n var spfunction5 = [0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000, 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000, 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100, 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100, 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100, 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0, 0x40080000, 0x2080100, 0x40000100];\n var spfunction6 = [0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000, 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010, 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000, 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000, 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000, 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010];\n var spfunction7 = [0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802, 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002, 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000, 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000, 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0, 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002];\n var spfunction8 = [0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000, 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000, 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040, 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000];\n\n //create the 16 or 48 subkeys we will need\n var m = 0;\n var i = void 0;\n var j = void 0;\n var temp = void 0;\n var right1 = void 0;\n var right2 = void 0;\n var left = void 0;\n var right = void 0;\n var looping = void 0;\n var cbcleft = void 0;\n var cbcleft2 = void 0;\n var cbcright = void 0;\n var cbcright2 = void 0;\n var endloop = void 0;\n var loopinc = void 0;\n var len = message.length;\n\n //set up the loops for single and triple des\n var iterations = keys.length === 32 ? 3 : 9; //single or triple des\n if (iterations === 3) {\n looping = encrypt ? [0, 32, 2] : [30, -2, -2];\n } else {\n looping = encrypt ? [0, 32, 2, 62, 30, -2, 64, 96, 2] : [94, 62, -2, 32, 64, 2, 30, -2, -2];\n }\n\n //pad the message depending on the padding parameter\n //only add padding if encrypting - note that you need to use the same padding option for both encrypt and decrypt\n if (encrypt) {\n message = des_addPadding(message, padding);\n len = message.length;\n }\n\n //store the result here\n var result = new Uint8Array(len);\n var k = 0;\n\n if (mode === 1) {\n //CBC mode\n cbcleft = iv[m++] << 24 | iv[m++] << 16 | iv[m++] << 8 | iv[m++];\n cbcright = iv[m++] << 24 | iv[m++] << 16 | iv[m++] << 8 | iv[m++];\n m = 0;\n }\n\n //loop through each 64 bit chunk of the message\n while (m < len) {\n left = message[m++] << 24 | message[m++] << 16 | message[m++] << 8 | message[m++];\n right = message[m++] << 24 | message[m++] << 16 | message[m++] << 8 | message[m++];\n\n //for Cipher Block Chaining mode, xor the message with the previous result\n if (mode === 1) {\n if (encrypt) {\n left ^= cbcleft;\n right ^= cbcright;\n } else {\n cbcleft2 = cbcleft;\n cbcright2 = cbcright;\n cbcleft = left;\n cbcright = right;\n }\n }\n\n //first each 64 but chunk of the message must be permuted according to IP\n temp = (left >>> 4 ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= temp << 4;\n temp = (left >>> 16 ^ right) & 0x0000ffff;\n right ^= temp;\n left ^= temp << 16;\n temp = (right >>> 2 ^ left) & 0x33333333;\n left ^= temp;\n right ^= temp << 2;\n temp = (right >>> 8 ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= temp << 8;\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n\n left = left << 1 | left >>> 31;\n right = right << 1 | right >>> 31;\n\n //do this either 1 or 3 times for each chunk of the message\n for (j = 0; j < iterations; j += 3) {\n endloop = looping[j + 1];\n loopinc = looping[j + 2];\n //now go through and perform the encryption or decryption\n for (i = looping[j]; i !== endloop; i += loopinc) {\n //for efficiency\n right1 = right ^ keys[i];\n right2 = (right >>> 4 | right << 28) ^ keys[i + 1];\n //the result is attained by passing these bytes through the S selection functions\n temp = left;\n left = right;\n right = temp ^ (spfunction2[right1 >>> 24 & 0x3f] | spfunction4[right1 >>> 16 & 0x3f] | spfunction6[right1 >>> 8 & 0x3f] | spfunction8[right1 & 0x3f] | spfunction1[right2 >>> 24 & 0x3f] | spfunction3[right2 >>> 16 & 0x3f] | spfunction5[right2 >>> 8 & 0x3f] | spfunction7[right2 & 0x3f]);\n }\n temp = left;\n left = right;\n right = temp; //unreverse left and right\n } //for either 1 or 3 iterations\n\n //move then each one bit to the right\n left = left >>> 1 | left << 31;\n right = right >>> 1 | right << 31;\n\n //now perform IP-1, which is IP in the opposite direction\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n temp = (right >>> 8 ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= temp << 8;\n temp = (right >>> 2 ^ left) & 0x33333333;\n left ^= temp;\n right ^= temp << 2;\n temp = (left >>> 16 ^ right) & 0x0000ffff;\n right ^= temp;\n left ^= temp << 16;\n temp = (left >>> 4 ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= temp << 4;\n\n //for Cipher Block Chaining mode, xor the message with the previous result\n if (mode === 1) {\n if (encrypt) {\n cbcleft = left;\n cbcright = right;\n } else {\n left ^= cbcleft2;\n right ^= cbcright2;\n }\n }\n\n result[k++] = left >>> 24;\n result[k++] = left >>> 16 & 0xff;\n result[k++] = left >>> 8 & 0xff;\n result[k++] = left & 0xff;\n result[k++] = right >>> 24;\n result[k++] = right >>> 16 & 0xff;\n result[k++] = right >>> 8 & 0xff;\n result[k++] = right & 0xff;\n } //for every 8 characters, or 64 bits in the message\n\n //only remove padding if decrypting - note that you need to use the same padding option for both encrypt and decrypt\n if (!encrypt) {\n result = des_removePadding(result, padding);\n }\n\n return result;\n} //end of des\n\n\n//des_createKeys\n//this takes as input a 64 bit key (even though only 56 bits are used)\n//as an array of 2 integers, and returns 16 48 bit keys\n\nfunction des_createKeys(key) {\n //declaring this locally speeds things up a bit\n var pc2bytes0 = [0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204, 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204];\n var pc2bytes1 = [0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100, 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101];\n var pc2bytes2 = [0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808];\n var pc2bytes3 = [0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000, 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000];\n var pc2bytes4 = [0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000, 0x41000, 0x1010, 0x41010];\n var pc2bytes5 = [0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420, 0x2000000, 0x2000400, 0x2000020, 0x2000420];\n var pc2bytes6 = [0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002];\n var pc2bytes7 = [0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000, 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800];\n var pc2bytes8 = [0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000, 0x2000002, 0x2040002, 0x2000002, 0x2040002];\n var pc2bytes9 = [0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408, 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408];\n var pc2bytes10 = [0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020, 0x102000, 0x102020, 0x102000, 0x102020];\n var pc2bytes11 = [0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000, 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200];\n var pc2bytes12 = [0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010, 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010];\n var pc2bytes13 = [0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105];\n\n //how many iterations (1 for des, 3 for triple des)\n var iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n //stores the return keys\n var keys = new Array(32 * iterations);\n //now define the left shifts which need to be done\n var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n //other variables\n var lefttemp = void 0;\n var righttemp = void 0;\n var m = 0;\n var n = 0;\n var temp = void 0;\n\n for (var j = 0; j < iterations; j++) {\n //either 1 or 3 iterations\n var left = key[m++] << 24 | key[m++] << 16 | key[m++] << 8 | key[m++];\n var right = key[m++] << 24 | key[m++] << 16 | key[m++] << 8 | key[m++];\n\n temp = (left >>> 4 ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= temp << 4;\n temp = (right >>> -16 ^ left) & 0x0000ffff;\n left ^= temp;\n right ^= temp << -16;\n temp = (left >>> 2 ^ right) & 0x33333333;\n right ^= temp;\n left ^= temp << 2;\n temp = (right >>> -16 ^ left) & 0x0000ffff;\n left ^= temp;\n right ^= temp << -16;\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n temp = (right >>> 8 ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= temp << 8;\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n\n //the right side needs to be shifted and to get the last four bits of the left side\n temp = left << 8 | right >>> 20 & 0x000000f0;\n //left needs to be put upside down\n left = right << 24 | right << 8 & 0xff0000 | right >>> 8 & 0xff00 | right >>> 24 & 0xf0;\n right = temp;\n\n //now go through and perform these shifts on the left and right keys\n for (var i = 0; i < shifts.length; i++) {\n //shift the keys either one or two bits to the left\n if (shifts[i]) {\n left = left << 2 | left >>> 26;\n right = right << 2 | right >>> 26;\n } else {\n left = left << 1 | left >>> 27;\n right = right << 1 | right >>> 27;\n }\n left &= -0xf;\n right &= -0xf;\n\n //now apply PC-2, in such a way that E is easier when encrypting or decrypting\n //this conversion will look like PC-2 except only the last 6 bits of each byte are used\n //rather than 48 consecutive bits and the order of lines will be according to\n //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7\n lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[left >>> 24 & 0xf] | pc2bytes2[left >>> 20 & 0xf] | pc2bytes3[left >>> 16 & 0xf] | pc2bytes4[left >>> 12 & 0xf] | pc2bytes5[left >>> 8 & 0xf] | pc2bytes6[left >>> 4 & 0xf];\n righttemp = pc2bytes7[right >>> 28] | pc2bytes8[right >>> 24 & 0xf] | pc2bytes9[right >>> 20 & 0xf] | pc2bytes10[right >>> 16 & 0xf] | pc2bytes11[right >>> 12 & 0xf] | pc2bytes12[right >>> 8 & 0xf] | pc2bytes13[right >>> 4 & 0xf];\n temp = (righttemp >>> 16 ^ lefttemp) & 0x0000ffff;\n keys[n++] = lefttemp ^ temp;\n keys[n++] = righttemp ^ temp << 16;\n }\n } //for each iterations\n //return the keys we've created\n return keys;\n} //end of des_createKeys\n\n\nfunction des_addPadding(message, padding) {\n var padLength = 8 - message.length % 8;\n\n var pad = void 0;\n if (padding === 2 && padLength < 8) {\n //pad the message with spaces\n pad = \" \".charCodeAt(0);\n } else if (padding === 1) {\n //PKCS7 padding\n pad = padLength;\n } else if (!padding && padLength < 8) {\n //pad the message out with null bytes\n pad = 0;\n } else if (padLength === 8) {\n return message;\n } else {\n throw new Error('des: invalid padding');\n }\n\n var paddedMessage = new Uint8Array(message.length + padLength);\n for (var i = 0; i < message.length; i++) {\n paddedMessage[i] = message[i];\n }\n for (var j = 0; j < padLength; j++) {\n paddedMessage[message.length + j] = pad;\n }\n\n return paddedMessage;\n}\n\nfunction des_removePadding(message, padding) {\n var padLength = null;\n var pad = void 0;\n if (padding === 2) {\n // space padded\n pad = \" \".charCodeAt(0);\n } else if (padding === 1) {\n // PKCS7\n padLength = message[message.length - 1];\n } else if (!padding) {\n // null padding\n pad = 0;\n } else {\n throw new Error('des: invalid padding');\n }\n\n if (!padLength) {\n padLength = 1;\n while (message[message.length - padLength] === pad) {\n padLength++;\n }\n padLength--;\n }\n\n return message.subarray(0, message.length - padLength);\n}\n\n// added by Recurity Labs\n\nfunction TripleDES(key) {\n this.key = [];\n\n for (var i = 0; i < 3; i++) {\n this.key.push(new Uint8Array(key.subarray(i * 8, i * 8 + 8)));\n }\n\n this.encrypt = function (block) {\n return des(des_createKeys(this.key[2]), des(des_createKeys(this.key[1]), des(des_createKeys(this.key[0]), block, true, 0, null, null), false, 0, null, null), true, 0, null, null);\n };\n}\n\nTripleDES.keySize = TripleDES.prototype.keySize = 24;\nTripleDES.blockSize = TripleDES.prototype.blockSize = 8;\n\n// This is \"original\" DES\n\nfunction DES(key) {\n this.key = key;\n\n this.encrypt = function (block, padding) {\n var keys = des_createKeys(this.key);\n return des(keys, block, true, 0, null, padding);\n };\n\n this.decrypt = function (block, padding) {\n var keys = des_createKeys(this.key);\n return des(keys, block, false, 0, null, padding);\n };\n}\n\nexports.default = { DES: DES, TripleDES: TripleDES };\n\n},{}],332:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _aes = _dereq_('./aes');\n\nvar _aes2 = _interopRequireDefault(_aes);\n\nvar _des = _dereq_('./des.js');\n\nvar _des2 = _interopRequireDefault(_des);\n\nvar _cast = _dereq_('./cast5');\n\nvar _cast2 = _interopRequireDefault(_cast);\n\nvar _twofish = _dereq_('./twofish');\n\nvar _twofish2 = _interopRequireDefault(_twofish);\n\nvar _blowfish = _dereq_('./blowfish');\n\nvar _blowfish2 = _interopRequireDefault(_blowfish);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n /**\n * AES-128 encryption and decryption (ID 7)\n * @function\n * @param {String} key 128-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n * @requires asmcrypto.js\n */\n aes128: (0, _aes2.default)(128),\n /**\n * AES-128 Block Cipher (ID 8)\n * @function\n * @param {String} key 192-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n * @requires asmcrypto.js\n */\n aes192: (0, _aes2.default)(192),\n /**\n * AES-128 Block Cipher (ID 9)\n * @function\n * @param {String} key 256-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n * @requires asmcrypto.js\n */\n aes256: (0, _aes2.default)(256),\n // Not in OpenPGP specifications\n des: _des2.default.DES,\n /**\n * Triple DES Block Cipher (ID 2)\n * @function\n * @param {String} key 192-bit key\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-67r2.pdf|NIST SP 800-67}\n * @returns {Object}\n */\n tripledes: _des2.default.TripleDES,\n /**\n * CAST-128 Block Cipher (ID 3)\n * @function\n * @param {String} key 128-bit key\n * @see {@link https://tools.ietf.org/html/rfc2144|The CAST-128 Encryption Algorithm}\n * @returns {Object}\n */\n cast5: _cast2.default,\n /**\n * Twofish Block Cipher (ID 10)\n * @function\n * @param {String} key 256-bit key\n * @see {@link https://tools.ietf.org/html/rfc4880#ref-TWOFISH|TWOFISH}\n * @returns {Object}\n */\n twofish: _twofish2.default,\n /**\n * Blowfish Block Cipher (ID 4)\n * @function\n * @param {String} key 128-bit key\n * @see {@link https://tools.ietf.org/html/rfc4880#ref-BLOWFISH|BLOWFISH}\n * @returns {Object}\n */\n blowfish: _blowfish2.default,\n /**\n * Not implemented\n * @function\n * @throws {Error}\n */\n idea: function idea() {\n throw new Error('IDEA symmetric-key algorithm not implemented');\n }\n}; /**\n * @fileoverview Symmetric cryptography functions\n * @requires crypto/cipher/aes\n * @requires crypto/cipher/des\n * @requires crypto/cipher/cast5\n * @requires crypto/cipher/twofish\n * @requires crypto/cipher/blowfish\n * @module crypto/cipher\n */\n\n},{\"./aes\":328,\"./blowfish\":329,\"./cast5\":330,\"./des.js\":331,\"./twofish\":333}],333:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _from = _dereq_(\"babel-runtime/core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable no-mixed-operators, no-fallthrough */\n\n/* Modified by Recurity Labs GmbH\n *\n * Cipher.js\n * A block-cipher algorithm implementation on JavaScript\n * See Cipher.readme.txt for further information.\n *\n * Copyright(c) 2009 Atsushi Oka [ http://oka.nu/ ]\n * This script file is distributed under the LGPL\n *\n * ACKNOWLEDGMENT\n *\n * The main subroutines are written by Michiel van Everdingen.\n *\n * Michiel van Everdingen\n * http://home.versatel.nl/MAvanEverdingen/index.html\n *\n * All rights for these routines are reserved to Michiel van Everdingen.\n *\n */\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n//Math\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nvar MAXINT = 0xFFFFFFFF;\n\nfunction rotw(w, n) {\n return (w << n | w >>> 32 - n) & MAXINT;\n}\n\nfunction getW(a, i) {\n return a[i] | a[i + 1] << 8 | a[i + 2] << 16 | a[i + 3] << 24;\n}\n\nfunction setW(a, i, w) {\n a.splice(i, 4, w & 0xFF, w >>> 8 & 0xFF, w >>> 16 & 0xFF, w >>> 24 & 0xFF);\n}\n\nfunction getB(x, n) {\n return x >>> n * 8 & 0xFF;\n}\n\n// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Twofish\n// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction createTwofish() {\n //\n var keyBytes = null;\n var dataBytes = null;\n var dataOffset = -1;\n // var dataLength = -1;\n // var idx2 = -1;\n //\n\n var tfsKey = [];\n var tfsM = [[], [], [], []];\n\n function tfsInit(key) {\n keyBytes = key;\n var i = void 0;\n var a = void 0;\n var b = void 0;\n var c = void 0;\n var d = void 0;\n var meKey = [];\n var moKey = [];\n var inKey = [];\n var kLen = void 0;\n var sKey = [];\n var f01 = void 0;\n var f5b = void 0;\n var fef = void 0;\n\n var q0 = [[8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4], [2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]];\n var q1 = [[14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13], [1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]];\n var q2 = [[11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1], [4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]];\n var q3 = [[13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10], [11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]];\n var ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15];\n var ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7];\n var q = [[], []];\n var m = [[], [], [], []];\n\n function ffm5b(x) {\n return x ^ x >> 2 ^ [0, 90, 180, 238][x & 3];\n }\n\n function ffmEf(x) {\n return x ^ x >> 1 ^ x >> 2 ^ [0, 238, 180, 90][x & 3];\n }\n\n function mdsRem(p, q) {\n var i = void 0;\n var t = void 0;\n var u = void 0;\n for (i = 0; i < 8; i++) {\n t = q >>> 24;\n q = q << 8 & MAXINT | p >>> 24;\n p = p << 8 & MAXINT;\n u = t << 1;\n if (t & 128) {\n u ^= 333;\n }\n q ^= t ^ u << 16;\n u ^= t >>> 1;\n if (t & 1) {\n u ^= 166;\n }\n q ^= u << 24 | u << 8;\n }\n return q;\n }\n\n function qp(n, x) {\n var a = x >> 4;\n var b = x & 15;\n var c = q0[n][a ^ b];\n var d = q1[n][ror4[b] ^ ashx[a]];\n return q3[n][ror4[d] ^ ashx[c]] << 4 | q2[n][c ^ d];\n }\n\n function hFun(x, key) {\n var a = getB(x, 0);\n var b = getB(x, 1);\n var c = getB(x, 2);\n var d = getB(x, 3);\n switch (kLen) {\n case 4:\n a = q[1][a] ^ getB(key[3], 0);\n b = q[0][b] ^ getB(key[3], 1);\n c = q[0][c] ^ getB(key[3], 2);\n d = q[1][d] ^ getB(key[3], 3);\n case 3:\n a = q[1][a] ^ getB(key[2], 0);\n b = q[1][b] ^ getB(key[2], 1);\n c = q[0][c] ^ getB(key[2], 2);\n d = q[0][d] ^ getB(key[2], 3);\n case 2:\n a = q[0][q[0][a] ^ getB(key[1], 0)] ^ getB(key[0], 0);\n b = q[0][q[1][b] ^ getB(key[1], 1)] ^ getB(key[0], 1);\n c = q[1][q[0][c] ^ getB(key[1], 2)] ^ getB(key[0], 2);\n d = q[1][q[1][d] ^ getB(key[1], 3)] ^ getB(key[0], 3);\n }\n return m[0][a] ^ m[1][b] ^ m[2][c] ^ m[3][d];\n }\n\n keyBytes = keyBytes.slice(0, 32);\n i = keyBytes.length;\n while (i !== 16 && i !== 24 && i !== 32) {\n keyBytes[i++] = 0;\n }\n\n for (i = 0; i < keyBytes.length; i += 4) {\n inKey[i >> 2] = getW(keyBytes, i);\n }\n for (i = 0; i < 256; i++) {\n q[0][i] = qp(0, i);\n q[1][i] = qp(1, i);\n }\n for (i = 0; i < 256; i++) {\n f01 = q[1][i];\n f5b = ffm5b(f01);\n fef = ffmEf(f01);\n m[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24);\n m[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24);\n f01 = q[0][i];\n f5b = ffm5b(f01);\n fef = ffmEf(f01);\n m[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24);\n m[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24);\n }\n\n kLen = inKey.length / 2;\n for (i = 0; i < kLen; i++) {\n a = inKey[i + i];\n meKey[i] = a;\n b = inKey[i + i + 1];\n moKey[i] = b;\n sKey[kLen - i - 1] = mdsRem(a, b);\n }\n for (i = 0; i < 40; i += 2) {\n a = 0x1010101 * i;\n b = a + 0x1010101;\n a = hFun(a, meKey);\n b = rotw(hFun(b, moKey), 8);\n tfsKey[i] = a + b & MAXINT;\n tfsKey[i + 1] = rotw(a + 2 * b, 9);\n }\n for (i = 0; i < 256; i++) {\n a = b = c = d = i;\n switch (kLen) {\n case 4:\n a = q[1][a] ^ getB(sKey[3], 0);\n b = q[0][b] ^ getB(sKey[3], 1);\n c = q[0][c] ^ getB(sKey[3], 2);\n d = q[1][d] ^ getB(sKey[3], 3);\n case 3:\n a = q[1][a] ^ getB(sKey[2], 0);\n b = q[1][b] ^ getB(sKey[2], 1);\n c = q[0][c] ^ getB(sKey[2], 2);\n d = q[0][d] ^ getB(sKey[2], 3);\n case 2:\n tfsM[0][i] = m[0][q[0][q[0][a] ^ getB(sKey[1], 0)] ^ getB(sKey[0], 0)];\n tfsM[1][i] = m[1][q[0][q[1][b] ^ getB(sKey[1], 1)] ^ getB(sKey[0], 1)];\n tfsM[2][i] = m[2][q[1][q[0][c] ^ getB(sKey[1], 2)] ^ getB(sKey[0], 2)];\n tfsM[3][i] = m[3][q[1][q[1][d] ^ getB(sKey[1], 3)] ^ getB(sKey[0], 3)];\n }\n }\n }\n\n function tfsG0(x) {\n return tfsM[0][getB(x, 0)] ^ tfsM[1][getB(x, 1)] ^ tfsM[2][getB(x, 2)] ^ tfsM[3][getB(x, 3)];\n }\n\n function tfsG1(x) {\n return tfsM[0][getB(x, 3)] ^ tfsM[1][getB(x, 0)] ^ tfsM[2][getB(x, 1)] ^ tfsM[3][getB(x, 2)];\n }\n\n function tfsFrnd(r, blk) {\n var a = tfsG0(blk[0]);\n var b = tfsG1(blk[1]);\n blk[2] = rotw(blk[2] ^ a + b + tfsKey[4 * r + 8] & MAXINT, 31);\n blk[3] = rotw(blk[3], 1) ^ a + 2 * b + tfsKey[4 * r + 9] & MAXINT;\n a = tfsG0(blk[2]);\n b = tfsG1(blk[3]);\n blk[0] = rotw(blk[0] ^ a + b + tfsKey[4 * r + 10] & MAXINT, 31);\n blk[1] = rotw(blk[1], 1) ^ a + 2 * b + tfsKey[4 * r + 11] & MAXINT;\n }\n\n function tfsIrnd(i, blk) {\n var a = tfsG0(blk[0]);\n var b = tfsG1(blk[1]);\n blk[2] = rotw(blk[2], 1) ^ a + b + tfsKey[4 * i + 10] & MAXINT;\n blk[3] = rotw(blk[3] ^ a + 2 * b + tfsKey[4 * i + 11] & MAXINT, 31);\n a = tfsG0(blk[2]);\n b = tfsG1(blk[3]);\n blk[0] = rotw(blk[0], 1) ^ a + b + tfsKey[4 * i + 8] & MAXINT;\n blk[1] = rotw(blk[1] ^ a + 2 * b + tfsKey[4 * i + 9] & MAXINT, 31);\n }\n\n function tfsClose() {\n tfsKey = [];\n tfsM = [[], [], [], []];\n }\n\n function tfsEncrypt(data, offset) {\n dataBytes = data;\n dataOffset = offset;\n var blk = [getW(dataBytes, dataOffset) ^ tfsKey[0], getW(dataBytes, dataOffset + 4) ^ tfsKey[1], getW(dataBytes, dataOffset + 8) ^ tfsKey[2], getW(dataBytes, dataOffset + 12) ^ tfsKey[3]];\n for (var j = 0; j < 8; j++) {\n tfsFrnd(j, blk);\n }\n setW(dataBytes, dataOffset, blk[2] ^ tfsKey[4]);\n setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[5]);\n setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[6]);\n setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[7]);\n dataOffset += 16;\n return dataBytes;\n }\n\n function tfsDecrypt(data, offset) {\n dataBytes = data;\n dataOffset = offset;\n var blk = [getW(dataBytes, dataOffset) ^ tfsKey[4], getW(dataBytes, dataOffset + 4) ^ tfsKey[5], getW(dataBytes, dataOffset + 8) ^ tfsKey[6], getW(dataBytes, dataOffset + 12) ^ tfsKey[7]];\n for (var j = 7; j >= 0; j--) {\n tfsIrnd(j, blk);\n }\n setW(dataBytes, dataOffset, blk[2] ^ tfsKey[0]);\n setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[1]);\n setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[2]);\n setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[3]);\n dataOffset += 16;\n }\n\n // added by Recurity Labs\n\n function tfsFinal() {\n return dataBytes;\n }\n\n return {\n name: \"twofish\",\n blocksize: 128 / 8,\n open: tfsInit,\n close: tfsClose,\n encrypt: tfsEncrypt,\n decrypt: tfsDecrypt,\n // added by Recurity Labs\n finalize: tfsFinal\n };\n}\n\n// added by Recurity Labs\n\nfunction TF(key) {\n this.tf = createTwofish();\n this.tf.open((0, _from2.default)(key), 0);\n\n this.encrypt = function (block) {\n return this.tf.encrypt((0, _from2.default)(block), 0);\n };\n}\n\nTF.keySize = TF.prototype.keySize = 32;\nTF.blockSize = TF.prototype.blockSize = 16;\n\nexports.default = TF;\n\n},{\"babel-runtime/core-js/array/from\":20}],334:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar CBC = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(key) {\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(_util2.default.getWebCrypto() && key.length !== 24)) {\n _context6.next = 5;\n break;\n }\n\n _context6.next = 3;\n return webCrypto.importKey('raw', key, { name: 'AES-CBC', length: key.length * 8 }, false, ['encrypt']);\n\n case 3:\n key = _context6.sent;\n return _context6.abrupt('return', function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(pt) {\n var ct;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return webCrypto.encrypt({ name: 'AES-CBC', iv: zeroBlock, length: blockLength * 8 }, key, pt);\n\n case 2:\n ct = _context3.sent;\n return _context3.abrupt('return', new Uint8Array(ct).subarray(0, ct.byteLength - blockLength));\n\n case 4:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4) {\n return _ref4.apply(this, arguments);\n };\n }());\n\n case 5:\n if (!_util2.default.getNodeCrypto()) {\n _context6.next = 8;\n break;\n }\n\n // Node crypto library\n key = new Buffer(key);\n return _context6.abrupt('return', function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(pt) {\n var en, ct;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n pt = new Buffer(pt);\n en = new nodeCrypto.createCipheriv('aes-' + key.length * 8 + '-cbc', key, zeroBlock);\n ct = en.update(pt);\n return _context4.abrupt('return', new Uint8Array(ct));\n\n case 4:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x5) {\n return _ref5.apply(this, arguments);\n };\n }());\n\n case 8:\n return _context6.abrupt('return', function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(pt) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n return _context5.abrupt('return', _exports.AES_CBC.encrypt(pt, key, false, zeroBlock));\n\n case 1:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function (_x6) {\n return _ref6.apply(this, arguments);\n };\n }());\n\n case 9:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function CBC(_x3) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/cbc/exports');\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview This module implements AES-CMAC on top of\n * native AES-CBC using either the WebCrypto API or Node.js' crypto API.\n * @requires asmcrypto.js\n * @requires util\n * @module crypto/cmac\n */\n\nvar webCrypto = _util2.default.getWebCrypto();\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\n/**\n * This implementation of CMAC is based on the description of OMAC in\n * http://web.cs.ucdavis.edu/~rogaway/papers/eax.pdf. As per that\n * document:\n *\n * We have made a small modification to the OMAC algorithm as it was\n * originally presented, changing one of its two constants.\n * Specifically, the constant 4 at line 85 was the constant 1/2 (the\n * multiplicative inverse of 2) in the original definition of OMAC [14].\n * The OMAC authors indicate that they will promulgate this modification\n * [15], which slightly simplifies implementations.\n */\n\nvar blockLength = 16;\n\n/**\n * xor `padding` into the end of `data`. This function implements \"the\n * operation xor→ [which] xors the shorter string into the end of longer\n * one\". Since data is always as least as long as padding, we can\n * simplify the implementation.\n * @param {Uint8Array} data\n * @param {Uint8Array} padding\n */\nfunction rightXorMut(data, padding) {\n var offset = data.length - blockLength;\n for (var i = 0; i < blockLength; i++) {\n data[i + offset] ^= padding[i];\n }\n return data;\n}\n\nfunction pad(data, padding, padding2) {\n // if |M| in {n, 2n, 3n, ...}\n if (data.length % blockLength === 0) {\n // then return M xor→ B,\n return rightXorMut(data, padding);\n }\n // else return (M || 10^(n−1−(|M| mod n))) xor→ P\n var padded = new Uint8Array(data.length + (blockLength - data.length % blockLength));\n padded.set(data);\n padded[data.length] = 128;\n return rightXorMut(padded, padding2);\n}\n\nvar zeroBlock = new Uint8Array(blockLength);\n\nexports.default = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(key) {\n var cbc, padding, padding2;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return CBC(key);\n\n case 2:\n cbc = _context2.sent;\n _context2.t0 = _util2.default;\n _context2.next = 6;\n return cbc(zeroBlock);\n\n case 6:\n _context2.t1 = _context2.sent;\n padding = _context2.t0.double.call(_context2.t0, _context2.t1);\n padding2 = _util2.default.double(padding);\n return _context2.abrupt('return', function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(data) {\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return cbc(pad(data, padding, padding2));\n\n case 2:\n _context.t0 = -blockLength;\n return _context.abrupt('return', _context.sent.subarray(_context.t0));\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n\n case 10:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function CMAC(_x) {\n return _ref.apply(this, arguments);\n }\n\n return CMAC;\n}();\n\n},{\"../util\":398,\"asmcrypto.js/src/aes/cbc/exports\":5,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],335:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _random = _dereq_('./random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _ecdh_symkey = _dereq_('../type/ecdh_symkey');\n\nvar _ecdh_symkey2 = _interopRequireDefault(_ecdh_symkey);\n\nvar _kdf_params = _dereq_('../type/kdf_params');\n\nvar _kdf_params2 = _interopRequireDefault(_kdf_params);\n\nvar _mpi = _dereq_('../type/mpi');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _oid = _dereq_('../type/oid');\n\nvar _oid2 = _interopRequireDefault(_oid);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// The GPG4Browsers crypto interface\n\n/**\n * @fileoverview Provides functions for asymmetric encryption and decryption as\n * well as key generation and parameter handling for all public-key cryptosystems.\n * @requires crypto/public_key\n * @requires crypto/cipher\n * @requires crypto/random\n * @requires type/ecdh_symkey\n * @requires type/kdf_params\n * @requires type/mpi\n * @requires type/oid\n * @requires enums\n * @module crypto/crypto\n */\n\nfunction constructParams(types, data) {\n return types.map(function (type, i) {\n if (data && data[i]) {\n return new type(data[i]);\n }\n return new type();\n });\n}\n\nexports.default = {\n /**\n * Encrypts data using specified algorithm and public key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1} for public key algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {Array<module:type/mpi|\n module:type/oid|\n module:type/kdf_params>} pub_params Algorithm-specific public key parameters\n * @param {module:type/mpi} data Data to be encrypted as MPI\n * @param {String} fingerprint Recipient fingerprint\n * @returns {Array<module:type/mpi|\n * module:type/ecdh_symkey>} encrypted session key parameters\n * @async\n */\n publicKeyEncrypt: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(algo, pub_params, data, fingerprint) {\n var types;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n types = this.getEncSessionKeyParamTypes(algo);\n return _context2.abrupt('return', (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n var m, n, e, res, _m, p, g, y, _res, oid, Q, kdf_params, _res2;\n\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = algo;\n _context.next = _context.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context.t0 === _enums2.default.publicKey.elgamal ? 10 : _context.t0 === _enums2.default.publicKey.ecdh ? 18 : 25;\n break;\n\n case 3:\n m = data.toBN();\n n = pub_params[0].toBN();\n e = pub_params[1].toBN();\n _context.next = 8;\n return _public_key2.default.rsa.encrypt(m, n, e);\n\n case 8:\n res = _context.sent;\n return _context.abrupt('return', constructParams(types, [res]));\n\n case 10:\n _m = data.toBN();\n p = pub_params[0].toBN();\n g = pub_params[1].toBN();\n y = pub_params[2].toBN();\n _context.next = 16;\n return _public_key2.default.elgamal.encrypt(_m, p, g, y);\n\n case 16:\n _res = _context.sent;\n return _context.abrupt('return', constructParams(types, [_res.c1, _res.c2]));\n\n case 18:\n oid = pub_params[0];\n Q = pub_params[1].toUint8Array();\n kdf_params = pub_params[2];\n _context.next = 23;\n return _public_key2.default.elliptic.ecdh.encrypt(oid, kdf_params.cipher, kdf_params.hash, data, Q, fingerprint);\n\n case 23:\n _res2 = _context.sent;\n return _context.abrupt('return', constructParams(types, [_res2.V, _res2.C]));\n\n case 25:\n return _context.abrupt('return', []);\n\n case 26:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }))());\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function publicKeyEncrypt(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n }\n\n return publicKeyEncrypt;\n }(),\n\n /**\n * Decrypts data using specified algorithm and private key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1} for public key algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {Array<module:type/mpi|\n module:type/oid|\n module:type/kdf_params>} key_params Algorithm-specific public, private key parameters\n * @param {Array<module:type/mpi|\n module:type/ecdh_symkey>}\n data_params encrypted session key parameters\n * @param {String} fingerprint Recipient fingerprint\n * @returns {module:type/mpi} An MPI containing the decrypted data\n * @async\n */\n publicKeyDecrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(algo, key_params, data_params, fingerprint) {\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.t0 = _mpi2.default;\n _context4.next = 3;\n return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {\n var c, n, e, d, p, q, u, c1, c2, _p, x, oid, kdf_params, V, C, _d;\n\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.t0 = algo;\n _context3.next = _context3.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context3.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context3.t0 === _enums2.default.publicKey.elgamal ? 11 : _context3.t0 === _enums2.default.publicKey.ecdh ? 16 : 22;\n break;\n\n case 3:\n c = data_params[0].toBN();\n n = key_params[0].toBN(); // n = pq\n\n e = key_params[1].toBN();\n d = key_params[2].toBN(); // de = 1 mod (p-1)(q-1)\n\n p = key_params[3].toBN();\n q = key_params[4].toBN();\n u = key_params[5].toBN(); // q^-1 mod p\n\n return _context3.abrupt('return', _public_key2.default.rsa.decrypt(c, n, e, d, p, q, u));\n\n case 11:\n c1 = data_params[0].toBN();\n c2 = data_params[1].toBN();\n _p = key_params[0].toBN();\n x = key_params[3].toBN();\n return _context3.abrupt('return', _public_key2.default.elgamal.decrypt(c1, c2, _p, x));\n\n case 16:\n oid = key_params[0];\n kdf_params = key_params[2];\n V = data_params[0].toUint8Array();\n C = data_params[1].data;\n _d = key_params[3].toUint8Array();\n return _context3.abrupt('return', _public_key2.default.elliptic.ecdh.decrypt(oid, kdf_params.cipher, kdf_params.hash, V, C, _d, fingerprint));\n\n case 22:\n throw new Error('Invalid public key encryption algorithm.');\n\n case 23:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }))();\n\n case 3:\n _context4.t1 = _context4.sent;\n return _context4.abrupt('return', new _context4.t0(_context4.t1));\n\n case 5:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function publicKeyDecrypt(_x5, _x6, _x7, _x8) {\n return _ref3.apply(this, arguments);\n }\n\n return publicKeyDecrypt;\n }(),\n\n /** Returns the types comprising the private key of an algorithm\n * @param {String} algo The public key algorithm\n * @returns {Array<String>} The array of types\n */\n getPrivKeyParamTypes: function getPrivKeyParamTypes(algo) {\n switch (algo) {\n // Algorithm-Specific Fields for RSA secret keys:\n // - multiprecision integer (MPI) of RSA secret exponent d.\n // - MPI of RSA secret prime value p.\n // - MPI of RSA secret prime value q (p < q).\n // - MPI of u, the multiplicative inverse of p, mod q.\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n case _enums2.default.publicKey.rsa_sign:\n return [_mpi2.default, _mpi2.default, _mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for Elgamal secret keys:\n // - MPI of Elgamal secret exponent x.\n case _enums2.default.publicKey.elgamal:\n return [_mpi2.default];\n // Algorithm-Specific Fields for DSA secret keys:\n // - MPI of DSA secret exponent x.\n case _enums2.default.publicKey.dsa:\n return [_mpi2.default];\n // Algorithm-Specific Fields for ECDSA or ECDH secret keys:\n // - MPI of an integer representing the secret key.\n case _enums2.default.publicKey.ecdh:\n case _enums2.default.publicKey.ecdsa:\n case _enums2.default.publicKey.eddsa:\n return [_mpi2.default];\n default:\n throw new Error('Invalid public key encryption algorithm.');\n }\n },\n\n /** Returns the types comprising the public key of an algorithm\n * @param {String} algo The public key algorithm\n * @returns {Array<String>} The array of types\n */\n getPubKeyParamTypes: function getPubKeyParamTypes(algo) {\n switch (algo) {\n // Algorithm-Specific Fields for RSA public keys:\n // - a multiprecision integer (MPI) of RSA public modulus n;\n // - an MPI of RSA public encryption exponent e.\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n case _enums2.default.publicKey.rsa_sign:\n return [_mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for Elgamal public keys:\n // - MPI of Elgamal prime p;\n // - MPI of Elgamal group generator g;\n // - MPI of Elgamal public key value y (= g**x mod p where x is secret).\n case _enums2.default.publicKey.elgamal:\n return [_mpi2.default, _mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for DSA public keys:\n // - MPI of DSA prime p;\n // - MPI of DSA group order q (q is a prime divisor of p-1);\n // - MPI of DSA group generator g;\n // - MPI of DSA public-key value y (= g**x mod p where x is secret).\n case _enums2.default.publicKey.dsa:\n return [_mpi2.default, _mpi2.default, _mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for ECDSA/EdDSA public keys:\n // - OID of curve;\n // - MPI of EC point representing public key.\n case _enums2.default.publicKey.ecdsa:\n case _enums2.default.publicKey.eddsa:\n return [_oid2.default, _mpi2.default];\n // Algorithm-Specific Fields for ECDH public keys:\n // - OID of curve;\n // - MPI of EC point representing public key.\n // - KDF: variable-length field containing KDF parameters.\n case _enums2.default.publicKey.ecdh:\n return [_oid2.default, _mpi2.default, _kdf_params2.default];\n default:\n throw new Error('Invalid public key encryption algorithm.');\n }\n },\n\n /** Returns the types comprising the encrypted session key of an algorithm\n * @param {String} algo The public key algorithm\n * @returns {Array<String>} The array of types\n */\n getEncSessionKeyParamTypes: function getEncSessionKeyParamTypes(algo) {\n switch (algo) {\n // Algorithm-Specific Fields for RSA encrypted session keys:\n // - MPI of RSA encrypted value m**e mod n.\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n return [_mpi2.default];\n\n // Algorithm-Specific Fields for Elgamal encrypted session keys:\n // - MPI of Elgamal value g**k mod p\n // - MPI of Elgamal value m * y**k mod p\n case _enums2.default.publicKey.elgamal:\n return [_mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for ECDH encrypted session keys:\n // - MPI containing the ephemeral key used to establish the shared secret\n // - ECDH Symmetric Key\n case _enums2.default.publicKey.ecdh:\n return [_mpi2.default, _ecdh_symkey2.default];\n default:\n throw new Error('Invalid public key encryption algorithm.');\n }\n },\n\n /** Generate algorithm-specific key parameters\n * @param {String} algo The public key algorithm\n * @param {Integer} bits Bit length for RSA keys\n * @param {module:type/oid} oid Object identifier for ECC keys\n * @returns {Array} The array of parameters\n * @async\n */\n generateParams: function generateParams(algo, bits, oid) {\n var types = [].concat(this.getPubKeyParamTypes(algo), this.getPrivKeyParamTypes(algo));\n switch (algo) {\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n case _enums2.default.publicKey.rsa_sign:\n {\n return _public_key2.default.rsa.generate(bits, \"10001\").then(function (keyObject) {\n return constructParams(types, [keyObject.n, keyObject.e, keyObject.d, keyObject.p, keyObject.q, keyObject.u]);\n });\n }\n case _enums2.default.publicKey.dsa:\n case _enums2.default.publicKey.elgamal:\n throw new Error('Unsupported algorithm for key generation.');\n case _enums2.default.publicKey.ecdsa:\n case _enums2.default.publicKey.eddsa:\n return _public_key2.default.elliptic.generate(oid).then(function (keyObject) {\n return constructParams(types, [keyObject.oid, keyObject.Q, keyObject.d]);\n });\n case _enums2.default.publicKey.ecdh:\n return _public_key2.default.elliptic.generate(oid).then(function (keyObject) {\n return constructParams(types, [keyObject.oid, keyObject.Q, [keyObject.hash, keyObject.cipher], keyObject.d]);\n });\n default:\n throw new Error('Invalid public key algorithm.');\n }\n },\n\n /**\n * Generates a random byte prefix for the specified algorithm\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} algo Symmetric encryption algorithm\n * @returns {Uint8Array} Random bytes with length equal to the block size of the cipher\n * @async\n */\n getPrefixRandom: function getPrefixRandom(algo) {\n return _random2.default.getRandomBytes(_cipher2.default[algo].blockSize);\n },\n\n /**\n * Generating a session key for the specified symmetric algorithm\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} algo Symmetric encryption algorithm\n * @returns {Uint8Array} Random bytes as a string to be used as a key\n * @async\n */\n generateSessionKey: function generateSessionKey(algo) {\n return _random2.default.getRandomBytes(_cipher2.default[algo].keySize);\n },\n\n constructParams: constructParams\n};\n\n},{\"../enums\":359,\"../type/ecdh_symkey\":392,\"../type/kdf_params\":393,\"../type/mpi\":395,\"../type/oid\":396,\"./cipher\":332,\"./public_key\":352,\"./random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],336:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar OMAC = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(key) {\n var cmac;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _cmac2.default)(key);\n\n case 2:\n cmac = _context.sent;\n return _context.abrupt('return', function (t, message) {\n return cmac(_util2.default.concatUint8Array([t, message]));\n });\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function OMAC(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\nvar CTR = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(key) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(_util2.default.getWebCrypto() && key.length !== 24)) {\n _context5.next = 5;\n break;\n }\n\n _context5.next = 3;\n return webCrypto.importKey('raw', key, { name: 'AES-CTR', length: key.length * 8 }, false, ['encrypt']);\n\n case 3:\n key = _context5.sent;\n return _context5.abrupt('return', function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(pt, iv) {\n var ct;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return webCrypto.encrypt({ name: 'AES-CTR', counter: iv, length: blockLength * 8 }, key, pt);\n\n case 2:\n ct = _context2.sent;\n return _context2.abrupt('return', new Uint8Array(ct));\n\n case 4:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref3.apply(this, arguments);\n };\n }());\n\n case 5:\n if (!_util2.default.getNodeCrypto()) {\n _context5.next = 8;\n break;\n }\n\n // Node crypto library\n key = new Buffer(key);\n return _context5.abrupt('return', function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(pt, iv) {\n var en, ct;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n pt = new Buffer(pt);\n iv = new Buffer(iv);\n en = new nodeCrypto.createCipheriv('aes-' + key.length * 8 + '-ctr', key, iv);\n ct = Buffer.concat([en.update(pt), en.final()]);\n return _context3.abrupt('return', new Uint8Array(ct));\n\n case 5:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x5, _x6) {\n return _ref4.apply(this, arguments);\n };\n }());\n\n case 8:\n return _context5.abrupt('return', function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(pt, iv) {\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n return _context4.abrupt('return', _exports.AES_CTR.encrypt(pt, key, iv));\n\n case 1:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x7, _x8) {\n return _ref5.apply(this, arguments);\n };\n }());\n\n case 9:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function CTR(_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Class to en/decrypt using EAX mode.\n * @param {String} cipher The symmetric cipher algorithm to use e.g. 'aes128'\n * @param {Uint8Array} key The encryption key\n */\n\n\nvar EAX = function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(cipher, key) {\n var _ref7, _ref8, omac, ctr;\n\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (!(cipher.substr(0, 3) !== 'aes')) {\n _context8.next = 2;\n break;\n }\n\n throw new Error('EAX mode supports only AES cipher');\n\n case 2:\n _context8.next = 4;\n return _promise2.default.all([OMAC(key), CTR(key)]);\n\n case 4:\n _ref7 = _context8.sent;\n _ref8 = (0, _slicedToArray3.default)(_ref7, 2);\n omac = _ref8[0];\n ctr = _ref8[1];\n return _context8.abrupt('return', {\n /**\n * Encrypt plaintext input.\n * @param {Uint8Array} plaintext The cleartext input to be encrypted\n * @param {Uint8Array} nonce The nonce (16 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext output\n */\n encrypt: function () {\n var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(plaintext, nonce, adata) {\n var _ref10, _ref11, omacNonce, omacAdata, ciphered, omacCiphered, tag, i;\n\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _promise2.default.all([omac(zero, nonce), omac(one, adata)]);\n\n case 2:\n _ref10 = _context6.sent;\n _ref11 = (0, _slicedToArray3.default)(_ref10, 2);\n omacNonce = _ref11[0];\n omacAdata = _ref11[1];\n _context6.next = 8;\n return ctr(plaintext, omacNonce);\n\n case 8:\n ciphered = _context6.sent;\n _context6.next = 11;\n return omac(two, ciphered);\n\n case 11:\n omacCiphered = _context6.sent;\n tag = omacCiphered; // Assumes that omac(*).length === tagLength.\n\n for (i = 0; i < tagLength; i++) {\n tag[i] ^= omacAdata[i] ^ omacNonce[i];\n }\n return _context6.abrupt('return', _util2.default.concatUint8Array([ciphered, tag]));\n\n case 15:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n function encrypt(_x11, _x12, _x13) {\n return _ref9.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * Decrypt ciphertext input.\n * @param {Uint8Array} ciphertext The ciphertext input to be decrypted\n * @param {Uint8Array} nonce The nonce (16 bytes)\n * @param {Uint8Array} adata Associated data to verify\n * @returns {Promise<Uint8Array>} The plaintext output\n */\n decrypt: function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ciphertext, nonce, adata) {\n var ciphered, ctTag, _ref13, _ref14, omacNonce, omacAdata, omacCiphered, tag, i, plaintext;\n\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(ciphertext.length < tagLength)) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('Invalid EAX ciphertext');\n\n case 2:\n ciphered = ciphertext.subarray(0, -tagLength);\n ctTag = ciphertext.subarray(-tagLength);\n _context7.next = 6;\n return _promise2.default.all([omac(zero, nonce), omac(one, adata), omac(two, ciphered)]);\n\n case 6:\n _ref13 = _context7.sent;\n _ref14 = (0, _slicedToArray3.default)(_ref13, 3);\n omacNonce = _ref14[0];\n omacAdata = _ref14[1];\n omacCiphered = _ref14[2];\n tag = omacCiphered; // Assumes that omac(*).length === tagLength.\n\n for (i = 0; i < tagLength; i++) {\n tag[i] ^= omacAdata[i] ^ omacNonce[i];\n }\n\n if (_util2.default.equalsUint8Array(ctTag, tag)) {\n _context7.next = 15;\n break;\n }\n\n throw new Error('Authentication tag mismatch');\n\n case 15:\n _context7.next = 17;\n return ctr(ciphered, omacNonce);\n\n case 17:\n plaintext = _context7.sent;\n return _context7.abrupt('return', plaintext);\n\n case 19:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n function decrypt(_x14, _x15, _x16) {\n return _ref12.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 9:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function EAX(_x9, _x10) {\n return _ref6.apply(this, arguments);\n };\n}();\n\n/**\n * Get EAX nonce as defined by {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.1|RFC4880bis-04, section 5.16.1}.\n * @param {Uint8Array} iv The initialization vector (16 bytes)\n * @param {Uint8Array} chunkIndex The chunk index (8 bytes)\n */\n\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/ctr/exports');\n\nvar _cmac = _dereq_('./cmac');\n\nvar _cmac2 = _interopRequireDefault(_cmac);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar webCrypto = _util2.default.getWebCrypto(); // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 ProtonTech AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements AES-EAX en/decryption on top of\n * native AES-CTR using either the WebCrypto API or Node.js' crypto API.\n * @requires asmcrypto.js\n * @requires crypto/cmac\n * @requires util\n * @module crypto/eax\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nvar blockLength = 16;\nvar ivLength = blockLength;\nvar tagLength = blockLength;\n\nvar zero = new Uint8Array(blockLength);\nvar one = new Uint8Array(blockLength);one[blockLength - 1] = 1;\nvar two = new Uint8Array(blockLength);two[blockLength - 1] = 2;\n\nEAX.getNonce = function (iv, chunkIndex) {\n var nonce = iv.slice();\n for (var i = 0; i < chunkIndex.length; i++) {\n nonce[8 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nEAX.blockLength = blockLength;\nEAX.ivLength = ivLength;\nEAX.tagLength = tagLength;\n\nexports.default = EAX;\n\n},{\"../util\":398,\"./cmac\":334,\"asmcrypto.js/src/aes/ctr/exports\":9,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/slicedToArray\":40,\"babel-runtime/regenerator\":42}],337:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Class to en/decrypt using GCM mode.\n * @param {String} cipher The symmetric cipher algorithm to use e.g. 'aes128'\n * @param {Uint8Array} key The encryption key\n */\nvar GCM = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(cipher, key) {\n var _key;\n\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(cipher.substr(0, 3) !== 'aes')) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('GCM mode supports only AES cipher');\n\n case 2:\n if (!(_util2.default.getWebCrypto() && key.length !== 24)) {\n _context7.next = 7;\n break;\n }\n\n _context7.next = 5;\n return webCrypto.importKey('raw', key, { name: ALGO }, false, ['encrypt', 'decrypt']);\n\n case 5:\n _key = _context7.sent;\n return _context7.abrupt('return', {\n encrypt: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(pt, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var ct;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (pt.length) {\n _context.next = 2;\n break;\n }\n\n return _context.abrupt('return', _exports.AES_GCM.encrypt(pt, key, iv, adata));\n\n case 2:\n _context.next = 4;\n return webCrypto.encrypt({ name: ALGO, iv: iv, additionalData: adata }, _key, pt);\n\n case 4:\n ct = _context.sent;\n return _context.abrupt('return', new Uint8Array(ct));\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function encrypt(_x3, _x4) {\n return _ref2.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n decrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ct, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var pt;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(ct.length === tagLength)) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt('return', _exports.AES_GCM.decrypt(ct, key, iv, adata));\n\n case 2:\n _context2.next = 4;\n return webCrypto.decrypt({ name: ALGO, iv: iv, additionalData: adata }, _key, ct);\n\n case 4:\n pt = _context2.sent;\n return _context2.abrupt('return', new Uint8Array(pt));\n\n case 6:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function decrypt(_x6, _x7) {\n return _ref3.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 7:\n if (!_util2.default.getNodeCrypto()) {\n _context7.next = 10;\n break;\n }\n\n // Node crypto library\n key = new Buffer(key);\n\n return _context7.abrupt('return', {\n encrypt: function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(pt, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var en, ct;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n pt = new Buffer(pt);\n iv = new Buffer(iv);\n adata = new Buffer(adata);\n en = new nodeCrypto.createCipheriv('aes-' + key.length * 8 + '-gcm', key, iv);\n\n en.setAAD(adata);\n ct = Buffer.concat([en.update(pt), en.final(), en.getAuthTag()]); // append auth tag to ciphertext\n\n return _context3.abrupt('return', new Uint8Array(ct));\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function encrypt(_x9, _x10) {\n return _ref4.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n decrypt: function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(ct, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var de, pt;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n ct = new Buffer(ct);\n iv = new Buffer(iv);\n adata = new Buffer(adata);\n de = new nodeCrypto.createDecipheriv('aes-' + key.length * 8 + '-gcm', key, iv);\n\n de.setAAD(adata);\n de.setAuthTag(ct.slice(ct.length - tagLength, ct.length)); // read auth tag at end of ciphertext\n pt = Buffer.concat([de.update(ct.slice(0, ct.length - tagLength)), de.final()]);\n return _context4.abrupt('return', new Uint8Array(pt));\n\n case 8:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function decrypt(_x12, _x13) {\n return _ref5.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 10:\n return _context7.abrupt('return', {\n encrypt: function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(pt, iv, adata) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n return _context5.abrupt('return', _exports.AES_GCM.encrypt(pt, key, iv, adata));\n\n case 1:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n function encrypt(_x15, _x16, _x17) {\n return _ref6.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n decrypt: function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ct, iv, adata) {\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n return _context6.abrupt('return', _exports.AES_GCM.decrypt(ct, key, iv, adata));\n\n case 1:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n function decrypt(_x18, _x19, _x20) {\n return _ref7.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 11:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function GCM(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Get GCM nonce. Note: this operation is not defined by the standard.\n * A future version of the standard may define GCM mode differently,\n * hopefully under a different ID (we use Private/Experimental algorithm\n * ID 100) so that we can maintain backwards compatibility.\n * @param {Uint8Array} iv The initialization vector (12 bytes)\n * @param {Uint8Array} chunkIndex The chunk index (8 bytes)\n */\n\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/gcm/exports');\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module wraps native AES-GCM en/decryption for both\n * the WebCrypto api as well as node.js' crypto api.\n * @requires asmcrypto.js\n * @requires util\n * @module crypto/gcm\n */\n\nvar webCrypto = _util2.default.getWebCrypto(); // no GCM support in IE11, Safari 9\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nvar blockLength = 16;\nvar ivLength = 12; // size of the IV in bytes\nvar tagLength = 16; // size of the tag in bytes\nvar ALGO = 'AES-GCM';GCM.getNonce = function (iv, chunkIndex) {\n var nonce = iv.slice();\n for (var i = 0; i < chunkIndex.length; i++) {\n nonce[4 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nGCM.blockLength = blockLength;\nGCM.ivLength = ivLength;\nGCM.tagLength = tagLength;\n\nexports.default = GCM;\n\n},{\"../util\":398,\"asmcrypto.js/src/aes/gcm/exports\":12,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],338:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rusha = _dereq_('rusha');\n\nvar _rusha2 = _interopRequireDefault(_rusha);\n\nvar _exports = _dereq_('asmcrypto.js/src/hash/sha256/exports');\n\nvar _ = _dereq_('hash.js/lib/hash/sha/224');\n\nvar _2 = _interopRequireDefault(_);\n\nvar _3 = _dereq_('hash.js/lib/hash/sha/384');\n\nvar _4 = _interopRequireDefault(_3);\n\nvar _5 = _dereq_('hash.js/lib/hash/sha/512');\n\nvar _6 = _interopRequireDefault(_5);\n\nvar _ripemd = _dereq_('hash.js/lib/hash/ripemd');\n\nvar _md = _dereq_('./md5');\n\nvar _md2 = _interopRequireDefault(_md);\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview Provides an interface to hashing functions available in Node.js or external libraries.\n * @see {@link https://github.com/srijs/rusha|Rusha}\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://github.com/indutny/hash.js|hash.js}\n * @requires rusha\n * @requires asmcrypto.js\n * @requires hash.js\n * @requires crypto/hash/md5\n * @requires util\n * @module crypto/hash\n */\n\nvar rusha = new _rusha2.default();\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nfunction node_hash(type) {\n return function (data) {\n var shasum = nodeCrypto.createHash(type);\n shasum.update(new Buffer(data));\n return new Uint8Array(shasum.digest());\n };\n}\n\nfunction hashjs_hash(hash) {\n return function (data) {\n return _util2.default.hex_to_Uint8Array(hash().update(data).digest('hex'));\n };\n}\n\nvar hash_fns = void 0;\nif (nodeCrypto) {\n // Use Node native crypto for all hash functions\n hash_fns = {\n md5: node_hash('md5'),\n sha1: node_hash('sha1'),\n sha224: node_hash('sha224'),\n sha256: node_hash('sha256'),\n sha384: node_hash('sha384'),\n sha512: node_hash('sha512'),\n ripemd: node_hash('ripemd160')\n };\n} else {\n // Use JS fallbacks\n hash_fns = {\n md5: _md2.default,\n sha1: function sha1(data) {\n return _util2.default.hex_to_Uint8Array(rusha.digest(data));\n },\n sha224: hashjs_hash(_2.default),\n sha256: _exports.SHA256.bytes,\n sha384: hashjs_hash(_4.default),\n // TODO, benchmark this vs asmCrypto's SHA512\n sha512: hashjs_hash(_6.default),\n ripemd: hashjs_hash(_ripemd.ripemd160)\n };\n}\n\nexports.default = {\n\n /** @see module:md5 */\n md5: hash_fns.md5,\n /** @see rusha */\n sha1: hash_fns.sha1,\n /** @see hash.js */\n sha224: hash_fns.sha224,\n /** @see asmCrypto */\n sha256: hash_fns.sha256,\n /** @see hash.js */\n sha384: hash_fns.sha384,\n /** @see hash.js */\n sha512: hash_fns.sha512,\n /** @see hash.js */\n ripemd: hash_fns.ripemd,\n\n /**\n * Create a hash on the specified data using the specified algorithm\n * @param {module:enums.hash} algo Hash algorithm type (see {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4})\n * @param {Uint8Array} data Data to be hashed\n * @returns {Uint8Array} hash value\n */\n digest: function digest(algo, data) {\n switch (algo) {\n case 1:\n // - MD5 [HAC]\n return this.md5(data);\n case 2:\n // - SHA-1 [FIPS180]\n return this.sha1(data);\n case 3:\n // - RIPE-MD/160 [HAC]\n return this.ripemd(data);\n case 8:\n // - SHA256 [FIPS180]\n return this.sha256(data);\n case 9:\n // - SHA384 [FIPS180]\n return this.sha384(data);\n case 10:\n // - SHA512 [FIPS180]\n return this.sha512(data);\n case 11:\n // - SHA224 [FIPS180]\n return this.sha224(data);\n default:\n throw new Error('Invalid hash function.');\n }\n },\n\n /**\n * Returns the hash size in bytes of the specified hash algorithm type\n * @param {module:enums.hash} algo Hash algorithm type (See {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4})\n * @returns {Integer} Size in bytes of the resulting hash\n */\n getHashByteLength: function getHashByteLength(algo) {\n switch (algo) {\n case 1:\n // - MD5 [HAC]\n return 16;\n case 2: // - SHA-1 [FIPS180]\n case 3:\n // - RIPE-MD/160 [HAC]\n return 20;\n case 8:\n // - SHA256 [FIPS180]\n return 32;\n case 9:\n // - SHA384 [FIPS180]\n return 48;\n case 10:\n // - SHA512 [FIPS180]\n return 64;\n case 11:\n // - SHA224 [FIPS180]\n return 28;\n default:\n throw new Error('Invalid hash algorithm.');\n }\n }\n};\n\n},{\"../../util\":398,\"./md5\":339,\"asmcrypto.js/src/hash/sha256/exports\":16,\"hash.js/lib/hash/ripemd\":287,\"hash.js/lib/hash/sha/224\":290,\"hash.js/lib/hash/sha/384\":292,\"hash.js/lib/hash/sha/512\":293,\"rusha\":320}],339:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// MD5 Digest\nfunction md5(entree) {\n var digest = md51(_util2.default.Uint8Array_to_str(entree));\n return _util2.default.hex_to_Uint8Array(hex(digest));\n} /**\n * A fast MD5 JavaScript implementation\n * Copyright (c) 2012 Joseph Myers\n * http://www.myersdaily.org/joseph/javascript/md5-text.html\n *\n * Permission to use, copy, modify, and distribute this software\n * and its documentation for any purposes and without\n * fee is hereby granted provided that this copyright notice\n * appears in all copies.\n *\n * Of course, this soft is provided \"as is\" without express or implied\n * warranty of any kind.\n */\n\n/**\n * @requires util\n */\n\nfunction md5cycle(x, k) {\n var a = x[0];\n var b = x[1];\n var c = x[2];\n var d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32(a << s | a >>> 32 - s, b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n var n = s.length;\n var state = [1732584193, -271733879, -1732584194, 271733878];\n var i = void 0;\n for (i = 64; i <= s.length; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < s.length; i++) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i++) {\n tail[i] = 0;\n }\n }\n tail[14] = n * 8;\n md5cycle(state, tail);\n return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n /* I figured global was faster. */\n var md5blks = [];\n var i = void 0; /* Andy King said do it this way. */\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n}\n\nvar hex_chr = '0123456789abcdef'.split('');\n\nfunction rhex(n) {\n var s = '';\n var j = 0;\n for (; j < 4; j++) {\n s += hex_chr[n >> j * 8 + 4 & 0x0F] + hex_chr[n >> j * 8 & 0x0F];\n }\n return s;\n}\n\nfunction hex(x) {\n for (var i = 0; i < x.length; i++) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n}\n\n/* this function is much faster,\nso if possible we use it. Some IEs\nare the only ones I know of that\nneed the idiotic second function,\ngenerated by an if clause. */\n\nfunction add32(a, b) {\n return a + b & 0xFFFFFFFF;\n}\n\nexports.default = md5;\n\n},{\"../../util\":398}],340:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _hash = _dereq_('./hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _cfb = _dereq_('./cfb');\n\nvar _cfb2 = _interopRequireDefault(_cfb);\n\nvar _gcm = _dereq_('./gcm');\n\nvar _gcm2 = _interopRequireDefault(_gcm);\n\nvar _eax = _dereq_('./eax');\n\nvar _eax2 = _interopRequireDefault(_eax);\n\nvar _ocb = _dereq_('./ocb');\n\nvar _ocb2 = _interopRequireDefault(_ocb);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _signature = _dereq_('./signature');\n\nvar _signature2 = _interopRequireDefault(_signature);\n\nvar _random = _dereq_('./random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _pkcs = _dereq_('./pkcs1');\n\nvar _pkcs2 = _interopRequireDefault(_pkcs);\n\nvar _pkcs3 = _dereq_('./pkcs5');\n\nvar _pkcs4 = _interopRequireDefault(_pkcs3);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _aes_kw = _dereq_('./aes_kw');\n\nvar _aes_kw2 = _interopRequireDefault(_aes_kw);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// TODO move cfb and gcm to cipher\nvar mod = {\n /** @see module:crypto/cipher */\n cipher: _cipher2.default,\n /** @see module:crypto/hash */\n hash: _hash2.default,\n /** @see module:crypto/cfb */\n cfb: _cfb2.default,\n /** @see module:crypto/gcm */\n gcm: _gcm2.default,\n experimental_gcm: _gcm2.default,\n /** @see module:crypto/eax */\n eax: _eax2.default,\n /** @see module:crypto/ocb */\n ocb: _ocb2.default,\n /** @see module:crypto/public_key */\n publicKey: _public_key2.default,\n /** @see module:crypto/signature */\n signature: _signature2.default,\n /** @see module:crypto/random */\n random: _random2.default,\n /** @see module:crypto/pkcs1 */\n pkcs1: _pkcs2.default,\n /** @see module:crypto/pkcs5 */\n pkcs5: _pkcs4.default,\n /** @see module:crypto/aes_kw */\n aes_kw: _aes_kw2.default\n}; /**\n * @fileoverview Provides access to all cryptographic primitives used in OpenPGP.js\n * @see module:crypto/crypto\n * @see module:crypto/signature\n * @see module:crypto/public_key\n * @see module:crypto/cipher\n * @see module:crypto/random\n * @see module:crypto/hash\n * @module crypto\n */\n\n(0, _assign2.default)(mod, _crypto2.default);\n\nexports.default = mod;\n\n},{\"./aes_kw\":326,\"./cfb\":327,\"./cipher\":332,\"./crypto\":335,\"./eax\":336,\"./gcm\":337,\"./hash\":338,\"./ocb\":341,\"./pkcs1\":342,\"./pkcs5\":343,\"./public_key\":352,\"./random\":355,\"./signature\":356,\"babel-runtime/core-js/object/assign\":24}],341:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Class to en/decrypt using OCB mode.\n * @param {String} cipher The symmetric cipher algorithm to use e.g. 'aes128'\n * @param {Uint8Array} key The encryption key\n */\nvar OCB = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(cipher, key) {\n var maxNtz, encipher, decipher, mask, constructKeyVariables, extendKeyVariables, hash, crypt;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n crypt = function crypt(fn, text, nonce, adata) {\n //\n // Consider P as a sequence of 128-bit blocks\n //\n var m = text.length / blockLength | 0;\n\n //\n // Key-dependent variables\n //\n extendKeyVariables(text, adata);\n\n //\n // Nonce-dependent and per-encryption variables\n //\n // Nonce = num2str(TAGLEN mod 128,7) || zeros(120-bitlen(N)) || 1 || N\n // Note: We assume here that tagLength mod 16 == 0.\n var paddedNonce = _util2.default.concatUint8Array([zeroBlock.subarray(0, ivLength - nonce.length), one, nonce]);\n // bottom = str2num(Nonce[123..128])\n var bottom = paddedNonce[blockLength - 1] & 63;\n // Ktop = ENCIPHER(K, Nonce[1..122] || zeros(6))\n paddedNonce[blockLength - 1] &= 192;\n var kTop = encipher(paddedNonce);\n // Stretch = Ktop || (Ktop[1..64] xor Ktop[9..72])\n var stretched = _util2.default.concatUint8Array([kTop, xor(kTop.subarray(0, 8), kTop.subarray(1, 9))]);\n // Offset_0 = Stretch[1+bottom..128+bottom]\n var offset = _util2.default.shiftRight(stretched.subarray(0 + (bottom >> 3), 17 + (bottom >> 3)), 8 - (bottom & 7)).subarray(1);\n // Checksum_0 = zeros(128)\n var checksum = new Uint8Array(blockLength);\n\n var ct = new Uint8Array(text.length + tagLength);\n\n //\n // Process any whole blocks\n //\n var i = void 0;\n var pos = 0;\n for (i = 0; i < m; i++) {\n // Offset_i = Offset_{i-1} xor L_{ntz(i)}\n xorMut(offset, mask[ntz(i + 1)]);\n // C_i = Offset_i xor ENCIPHER(K, P_i xor Offset_i)\n // P_i = Offset_i xor DECIPHER(K, C_i xor Offset_i)\n ct.set(xorMut(fn(xor(offset, text)), offset), pos);\n // Checksum_i = Checksum_{i-1} xor P_i\n xorMut(checksum, fn === encipher ? text : ct.subarray(pos));\n\n text = text.subarray(blockLength);\n pos += blockLength;\n }\n\n //\n // Process any final partial block and compute raw tag\n //\n if (text.length) {\n // Offset_* = Offset_m xor L_*\n xorMut(offset, mask.x);\n // Pad = ENCIPHER(K, Offset_*)\n var padding = encipher(offset);\n // C_* = P_* xor Pad[1..bitlen(P_*)]\n ct.set(xor(text, padding), pos);\n\n // Checksum_* = Checksum_m xor (P_* || 1 || new Uint8Array(127-bitlen(P_*)))\n var xorInput = new Uint8Array(blockLength);\n xorInput.set(fn === encipher ? text : ct.subarray(pos, -tagLength), 0);\n xorInput[text.length] = 128;\n xorMut(checksum, xorInput);\n pos += text.length;\n }\n // Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A)\n var tag = xorMut(encipher(xorMut(xorMut(checksum, offset), mask.$)), hash(adata));\n\n //\n // Assemble ciphertext\n //\n // C = C_1 || C_2 || ... || C_m || C_* || Tag[1..TAGLEN]\n ct.set(tag, pos);\n return ct;\n };\n\n hash = function hash(adata) {\n if (!adata.length) {\n // Fast path\n return zeroBlock;\n }\n\n //\n // Consider A as a sequence of 128-bit blocks\n //\n var m = adata.length / blockLength | 0;\n\n var offset = new Uint8Array(blockLength);\n var sum = new Uint8Array(blockLength);\n for (var i = 0; i < m; i++) {\n xorMut(offset, mask[ntz(i + 1)]);\n xorMut(sum, encipher(xor(offset, adata)));\n adata = adata.subarray(blockLength);\n }\n\n //\n // Process any final partial block; compute final hash value\n //\n if (adata.length) {\n xorMut(offset, mask.x);\n\n var cipherInput = new Uint8Array(blockLength);\n cipherInput.set(adata, 0);\n cipherInput[adata.length] = 128;\n xorMut(cipherInput, offset);\n\n xorMut(sum, encipher(cipherInput));\n }\n\n return sum;\n };\n\n extendKeyVariables = function extendKeyVariables(text, adata) {\n var newMaxNtz = _util2.default.nbits(Math.max(text.length, adata.length) / blockLength | 0) - 1;\n for (var i = maxNtz + 1; i <= newMaxNtz; i++) {\n mask[i] = _util2.default.double(mask[i - 1]);\n }\n maxNtz = newMaxNtz;\n };\n\n constructKeyVariables = function constructKeyVariables(cipher, key) {\n var aes = new _cipher2.default[cipher](key);\n encipher = aes.encrypt.bind(aes);\n decipher = aes.decrypt.bind(aes);\n\n var mask_x = encipher(zeroBlock);\n var mask_$ = _util2.default.double(mask_x);\n mask = [];\n mask[0] = _util2.default.double(mask_$);\n\n mask.x = mask_x;\n mask.$ = mask_$;\n };\n\n maxNtz = 0;\n encipher = void 0;\n decipher = void 0;\n mask = void 0;\n\n\n constructKeyVariables(cipher, key);\n\n /**\n * Encrypt/decrypt data.\n * @param {encipher|decipher} fn Encryption/decryption block cipher function\n * @param {Uint8Array} text The cleartext or ciphertext (without tag) input\n * @param {Uint8Array} nonce The nonce (15 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext or plaintext output, with tag appended in both cases\n */\n return _context3.abrupt('return', {\n /**\n * Encrypt plaintext input.\n * @param {Uint8Array} plaintext The cleartext input to be encrypted\n * @param {Uint8Array} nonce The nonce (15 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext output\n */\n encrypt: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(plaintext, nonce, adata) {\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n return _context.abrupt('return', crypt(encipher, plaintext, nonce, adata));\n\n case 1:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function encrypt(_x3, _x4, _x5) {\n return _ref2.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * Decrypt ciphertext input.\n * @param {Uint8Array} ciphertext The ciphertext input to be decrypted\n * @param {Uint8Array} nonce The nonce (15 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext output\n */\n decrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ciphertext, nonce, adata) {\n var tag, crypted;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(ciphertext.length < tagLength)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Invalid OCB ciphertext');\n\n case 2:\n tag = ciphertext.subarray(-tagLength);\n\n ciphertext = ciphertext.subarray(0, -tagLength);\n\n crypted = crypt(decipher, ciphertext, nonce, adata);\n // if (Tag[1..TAGLEN] == T)\n\n if (!_util2.default.equalsUint8Array(tag, crypted.subarray(-tagLength))) {\n _context2.next = 7;\n break;\n }\n\n return _context2.abrupt('return', crypted.subarray(0, -tagLength));\n\n case 7:\n throw new Error('Authentication tag mismatch');\n\n case 8:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function decrypt(_x6, _x7, _x8) {\n return _ref3.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 10:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function OCB(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Get OCB nonce as defined by {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.2|RFC4880bis-04, section 5.16.2}.\n * @param {Uint8Array} iv The initialization vector (15 bytes)\n * @param {Uint8Array} chunkIndex The chunk index (8 bytes)\n */\n\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 ProtonTech AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements AES-OCB en/decryption.\n * @requires crypto/cipher\n * @requires util\n * @module crypto/ocb\n */\n\nvar blockLength = 16;\nvar ivLength = 15;\n\n// https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.2:\n// While OCB [RFC7253] allows the authentication tag length to be of any\n// number up to 128 bits long, this document requires a fixed\n// authentication tag length of 128 bits (16 octets) for simplicity.\nvar tagLength = 16;\n\nfunction ntz(n) {\n var ntz = 0;\n for (var i = 1; (n & i) === 0; i <<= 1) {\n ntz++;\n }\n return ntz;\n}\n\nfunction xorMut(S, T) {\n for (var i = 0; i < S.length; i++) {\n S[i] ^= T[i];\n }\n return S;\n}\n\nfunction xor(S, T) {\n return xorMut(S.slice(), T);\n}\n\nvar zeroBlock = new Uint8Array(blockLength);\nvar one = new Uint8Array([1]);OCB.getNonce = function (iv, chunkIndex) {\n var nonce = iv.slice();\n for (var i = 0; i < chunkIndex.length; i++) {\n nonce[7 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nOCB.blockLength = blockLength;\nOCB.ivLength = ivLength;\nOCB.tagLength = tagLength;\n\nexports.default = OCB;\n\n},{\"../util\":398,\"./cipher\":332,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],342:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Create padding with secure random data\n * @private\n * @param {Integer} length Length of the padding in bytes\n * @returns {String} Padding as string\n * @async\n */\nvar getPkcs1Padding = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(length) {\n var result, randomBytes, i;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n result = '';\n\n case 1:\n if (!(result.length < length)) {\n _context.next = 8;\n break;\n }\n\n _context.next = 4;\n return _random2.default.getRandomBytes(length - result.length);\n\n case 4:\n randomBytes = _context.sent;\n\n for (i = 0; i < randomBytes.length; i++) {\n if (randomBytes[i] !== 0) {\n result += String.fromCharCode(randomBytes[i]);\n }\n }\n _context.next = 1;\n break;\n\n case 8:\n return _context.abrupt('return', result);\n\n case 9:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function getPkcs1Padding(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Create a EME-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.1|RFC 4880 13.1.1}\n * @param {String} M message to be encoded\n * @param {Integer} k the length in octets of the key modulus\n * @returns {Promise<String>} EME-PKCS1 padded message\n * @async\n */\n\n\nvar _random = _dereq_('./random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _hash = _dereq_('./hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** @namespace */\nvar eme = {};\n/** @namespace */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides EME-PKCS1-v1_5 encoding and decoding and EMSA-PKCS1-v1_5 encoding function\n * @see module:crypto/public_key/rsa\n * @see module:crypto/public_key/elliptic/ecdh\n * @see module:packet.PublicKeyEncryptedSessionKey\n * @requires crypto/random\n * @requires crypto/hash\n * @requires util\n * @module crypto/pkcs1\n */\n\nvar emsa = {};\n\n/**\n * ASN1 object identifiers for hashes\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.2}\n */\nvar hash_headers = [];\nhash_headers[1] = [0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10];\nhash_headers[2] = [0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14];\nhash_headers[3] = [0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14];\nhash_headers[8] = [0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20];\nhash_headers[9] = [0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30];\nhash_headers[10] = [0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40];\nhash_headers[11] = [0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x1C];eme.encode = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(M, k) {\n var mLen, PS;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n mLen = M.length;\n // length checking\n\n if (!(mLen > k - 11)) {\n _context2.next = 3;\n break;\n }\n\n throw new Error('Message too long');\n\n case 3:\n _context2.next = 5;\n return getPkcs1Padding(k - mLen - 3);\n\n case 5:\n PS = _context2.sent;\n return _context2.abrupt('return', String.fromCharCode(0) + String.fromCharCode(2) + PS + String.fromCharCode(0) + M);\n\n case 7:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Decode a EME-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.2|RFC 4880 13.1.2}\n * @param {String} EM encoded message, an octet string\n * @returns {String} message, an octet string\n */\neme.decode = function (EM) {\n // leading zeros truncated by bn.js\n if (EM.charCodeAt(0) !== 0) {\n EM = String.fromCharCode(0) + EM;\n }\n var firstOct = EM.charCodeAt(0);\n var secondOct = EM.charCodeAt(1);\n var i = 2;\n while (EM.charCodeAt(i) !== 0 && i < EM.length) {\n i++;\n }\n var psLen = i - 2;\n var separator = EM.charCodeAt(i++);\n if (firstOct === 0 && secondOct === 2 && psLen >= 8 && separator === 0) {\n return EM.substr(i);\n }\n throw new Error('Decryption error');\n};\n\n/**\n * Create a EMSA-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.3|RFC 4880 13.1.3}\n * @param {Integer} algo Hash algorithm type used\n * @param {String} M message to be encoded\n * @param {Integer} emLen intended length in octets of the encoded message\n * @returns {String} encoded message\n */\nemsa.encode = function (algo, M, emLen) {\n var i = void 0;\n // Apply the hash function to the message M to produce a hash value H\n var H = _util2.default.Uint8Array_to_str(_hash2.default.digest(algo, _util2.default.str_to_Uint8Array(M)));\n if (H.length !== _hash2.default.getHashByteLength(algo)) {\n throw new Error('Invalid hash length');\n }\n // produce an ASN.1 DER value for the hash function used.\n // Let T be the full hash prefix\n var T = '';\n for (i = 0; i < hash_headers[algo].length; i++) {\n T += String.fromCharCode(hash_headers[algo][i]);\n }\n // add hash value to prefix\n T += H;\n // and let tLen be the length in octets of T\n var tLen = T.length;\n if (emLen < tLen + 11) {\n throw new Error('Intended encoded message length too short');\n }\n // an octet string PS consisting of emLen - tLen - 3 octets with hexadecimal value 0xFF\n // The length of PS will be at least 8 octets\n var PS = '';\n for (i = 0; i < emLen - tLen - 3; i++) {\n PS += String.fromCharCode(0xff);\n }\n // Concatenate PS, the hash prefix T, and other padding to form the\n // encoded message EM as EM = 0x00 || 0x01 || PS || 0x00 || T.\n var EM = String.fromCharCode(0x00) + String.fromCharCode(0x01) + PS + String.fromCharCode(0x00) + T;\n return _util2.default.str_to_hex(EM);\n};\n\nexports.default = { eme: eme, emsa: emsa };\n\n},{\"../util\":398,\"./hash\":338,\"./random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],343:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions to add and remove PKCS5 padding\n * @see module:packet.PublicKeyEncryptedSessionKey\n * @module crypto/pkcs5\n */\n\n/**\n * Add pkcs5 padding to a text.\n * @param {String} msg Text to add padding\n * @returns {String} Text with padding added\n */\nfunction encode(msg) {\n var c = 8 - msg.length % 8;\n var padding = String.fromCharCode(c).repeat(c);\n return msg + padding;\n}\n\n/**\n * Remove pkcs5 padding from a string.\n * @param {String} msg Text to remove padding from\n * @returns {String} Text with padding removed\n */\nfunction decode(msg) {\n var len = msg.length;\n if (len > 0) {\n var c = msg.charCodeAt(len - 1);\n if (c >= 1 && c <= 8) {\n var provided = msg.substr(len - c);\n var computed = String.fromCharCode(c).repeat(c);\n if (provided === computed) {\n return msg.substr(0, len - c);\n }\n }\n }\n throw new Error('Invalid padding');\n}\n\nexports.default = { encode: encode, decode: decode };\n\n},{}],344:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _hash = _dereq_('../hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview A Digital signature algorithm implementation\n * @requires bn.js\n * @requires crypto/hash\n * @requires crypto/random\n * @requires util\n * @module crypto/public_key/dsa\n */\n\nvar one = new _bn2.default(1);\nvar zero = new _bn2.default(0);\n\n/*\n TODO regarding the hash function, read:\n https://tools.ietf.org/html/rfc4880#section-13.6\n https://tools.ietf.org/html/rfc4880#section-14\n*/\n\nexports.default = {\n /**\n * DSA Sign function\n * @param {Integer} hash_algo\n * @param {String} m\n * @param {BN} g\n * @param {BN} p\n * @param {BN} q\n * @param {BN} x\n * @returns {{ r: BN, s: BN }}\n * @async\n */\n sign: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(hash_algo, m, g, p, q, x) {\n var k, r, s, t, redp, redq, gred, xred, h;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n k = void 0;\n r = void 0;\n s = void 0;\n t = void 0;\n redp = new _bn2.default.red(p);\n redq = new _bn2.default.red(q);\n gred = g.toRed(redp);\n xred = x.toRed(redq);\n // If the output size of the chosen hash is larger than the number of\n // bits of q, the hash result is truncated to fit by taking the number\n // of leftmost bits equal to the number of bits of q. This (possibly\n // truncated) hash function result is treated as a number and used\n // directly in the DSA signature algorithm.\n\n h = new _bn2.default(_util2.default.getLeftNBits(_hash2.default.digest(hash_algo, m), q.bitLength())).toRed(redq);\n // FIPS-186-4, section 4.6:\n // The values of r and s shall be checked to determine if r = 0 or s = 0.\n // If either r = 0 or s = 0, a new value of k shall be generated, and the\n // signature shall be recalculated. It is extremely unlikely that r = 0\n // or s = 0 if signatures are generated properly.\n\n case 9:\n if (false) {\n _context.next = 23;\n break;\n }\n\n _context.next = 12;\n return _random2.default.getRandomBN(one, q);\n\n case 12:\n k = _context.sent;\n // returns in [1, q-1]\n r = gred.redPow(k).fromRed().toRed(redq); // (g**k mod p) mod q\n\n if (!(zero.cmp(r) === 0)) {\n _context.next = 16;\n break;\n }\n\n return _context.abrupt('continue', 9);\n\n case 16:\n t = h.redAdd(xred.redMul(r)); // H(m) + x*r mod q\n s = k.toRed(redq).redInvm().redMul(t); // k**-1 * (H(m) + x*r) mod q\n\n if (!(zero.cmp(s) === 0)) {\n _context.next = 20;\n break;\n }\n\n return _context.abrupt('continue', 9);\n\n case 20:\n return _context.abrupt('break', 23);\n\n case 23:\n return _context.abrupt('return', { r: r.toArrayLike(Uint8Array),\n s: s.toArrayLike(Uint8Array) });\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function sign(_x, _x2, _x3, _x4, _x5, _x6) {\n return _ref.apply(this, arguments);\n }\n\n return sign;\n }(),\n\n /**\n * DSA Verify function\n * @param {Integer} hash_algo\n * @param {BN} r\n * @param {BN} s\n * @param {String} m\n * @param {BN} g\n * @param {BN} p\n * @param {BN} q\n * @param {BN} y\n * @returns BN\n * @async\n */\n verify: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(hash_algo, r, s, m, g, p, q, y) {\n var redp, redq, h, w, u1, u2, t1, t2, v;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(zero.ucmp(r) >= 0 || r.ucmp(q) >= 0 || zero.ucmp(s) >= 0 || s.ucmp(q) >= 0)) {\n _context2.next = 3;\n break;\n }\n\n _util2.default.print_debug(\"invalid DSA Signature\");\n return _context2.abrupt('return', null);\n\n case 3:\n redp = new _bn2.default.red(p);\n redq = new _bn2.default.red(q);\n h = new _bn2.default(_util2.default.getLeftNBits(_hash2.default.digest(hash_algo, m), q.bitLength()));\n w = s.toRed(redq).redInvm(); // s**-1 mod q\n\n if (!(zero.cmp(w) === 0)) {\n _context2.next = 10;\n break;\n }\n\n _util2.default.print_debug(\"invalid DSA Signature\");\n return _context2.abrupt('return', null);\n\n case 10:\n u1 = h.toRed(redq).redMul(w); // H(m) * w mod q\n\n u2 = r.toRed(redq).redMul(w); // r * w mod q\n\n t1 = g.toRed(redp).redPow(u1.fromRed()); // g**u1 mod p\n\n t2 = y.toRed(redp).redPow(u2.fromRed()); // y**u2 mod p\n\n v = t1.redMul(t2).fromRed().mod(q); // (g**u1 * y**u2 mod p) mod q\n\n return _context2.abrupt('return', v.cmp(r) === 0);\n\n case 16:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function verify(_x7, _x8, _x9, _x10, _x11, _x12, _x13, _x14) {\n return _ref2.apply(this, arguments);\n }\n\n return verify;\n }()\n};\n\n},{\"../../util\":398,\"../hash\":338,\"../random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],345:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview ElGamal implementation\n * @requires bn.js\n * @requires crypto/random\n * @module crypto/public_key/elgamal\n */\n\nvar zero = new _bn2.default(0);\n\nexports.default = {\n /**\n * ElGamal Encryption function\n * @param {BN} m\n * @param {BN} p\n * @param {BN} g\n * @param {BN} y\n * @returns {{ c1: BN, c2: BN }}\n * @async\n */\n encrypt: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(m, p, g, y) {\n var redp, mred, gred, yred, k;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n redp = new _bn2.default.red(p);\n mred = m.toRed(redp);\n gred = g.toRed(redp);\n yred = y.toRed(redp);\n // See Section 11.5 here: https://crypto.stanford.edu/~dabo/cryptobook/BonehShoup_0_4.pdf\n\n _context.next = 6;\n return _random2.default.getRandomBN(zero, p);\n\n case 6:\n k = _context.sent;\n return _context.abrupt('return', {\n c1: gred.redPow(k).fromRed(),\n c2: yred.redPow(k).redMul(mred).fromRed()\n });\n\n case 8:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function encrypt(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * ElGamal Encryption function\n * @param {BN} c1\n * @param {BN} c2\n * @param {BN} p\n * @param {BN} x\n * @returns BN\n * @async\n */\n decrypt: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(c1, c2, p, x) {\n var redp, c1red, c2red;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n redp = new _bn2.default.red(p);\n c1red = c1.toRed(redp);\n c2red = c2.toRed(redp);\n return _context2.abrupt('return', c1red.redPow(x).redInvm().redMul(c2red).fromRed());\n\n case 4:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function decrypt(_x5, _x6, _x7, _x8) {\n return _ref2.apply(this, arguments);\n }\n\n return decrypt;\n }()\n};\n\n},{\"../random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],346:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getPreferredHashAlgo = exports.generate = exports.nodeCurves = exports.webCurves = exports.curves = undefined;\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar generate = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(curve) {\n var keyPair;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new Curve(curve);\n _context2.next = 3;\n return curve.genKeyPair();\n\n case 3:\n keyPair = _context2.sent;\n return _context2.abrupt('return', {\n oid: curve.oid,\n Q: new _bn2.default(keyPair.getPublic()),\n d: new _bn2.default(keyPair.getPrivate()),\n hash: curve.hash,\n cipher: curve.cipher\n });\n\n case 5:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function generate(_x) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nvar webGenKeyPair = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(name) {\n var webCryptoKey, privateKey, publicKey;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return webCrypto.generateKey({ name: \"ECDSA\", namedCurve: webCurves[name] }, true, [\"sign\", \"verify\"]);\n\n case 2:\n webCryptoKey = _context3.sent;\n _context3.next = 5;\n return webCrypto.exportKey(\"jwk\", webCryptoKey.privateKey);\n\n case 5:\n privateKey = _context3.sent;\n _context3.next = 8;\n return webCrypto.exportKey(\"jwk\", webCryptoKey.publicKey);\n\n case 8:\n publicKey = _context3.sent;\n return _context3.abrupt('return', {\n pub: {\n x: _util2.default.b64_to_Uint8Array(publicKey.x, true),\n y: _util2.default.b64_to_Uint8Array(publicKey.y, true)\n },\n priv: _util2.default.b64_to_Uint8Array(privateKey.d, true)\n });\n\n case 10:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function webGenKeyPair(_x2) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar nodeGenKeyPair = function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(name) {\n var ecdh;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n // Note: ECDSA and ECDH key generation is structurally equivalent\n ecdh = nodeCrypto.createECDH(nodeCurves[name]);\n _context4.next = 3;\n return ecdh.generateKeys();\n\n case 3:\n return _context4.abrupt('return', {\n pub: ecdh.getPublicKey().toJSON().data,\n priv: ecdh.getPrivateKey().toJSON().data\n });\n\n case 4:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function nodeGenKeyPair(_x3) {\n return _ref4.apply(this, arguments);\n };\n}();\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _elliptic = _dereq_('elliptic');\n\nvar _key = _dereq_('./key');\n\nvar _key2 = _interopRequireDefault(_key);\n\nvar _random = _dereq_('../../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _enums = _dereq_('../../../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _oid = _dereq_('../../../type/oid');\n\nvar _oid2 = _interopRequireDefault(_oid);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar webCrypto = _util2.default.getWebCrypto(); // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Wrapper of an instance of an Elliptic Curve\n * @requires bn.js\n * @requires elliptic\n * @requires crypto/public_key/elliptic/key\n * @requires crypto/random\n * @requires enums\n * @requires util\n * @requires type/oid\n * @module crypto/public_key/elliptic/curve\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\n\nvar webCurves = {\n 'p256': 'P-256',\n 'p384': 'P-384',\n 'p521': 'P-521'\n};\nvar knownCurves = nodeCrypto ? nodeCrypto.getCurves() : [];\nvar nodeCurves = nodeCrypto ? {\n secp256k1: knownCurves.includes('secp256k1') ? 'secp256k1' : undefined,\n p256: knownCurves.includes('prime256v1') ? 'prime256v1' : undefined,\n p384: knownCurves.includes('secp384r1') ? 'secp384r1' : undefined,\n p521: knownCurves.includes('secp521r1') ? 'secp521r1' : undefined,\n ed25519: knownCurves.includes('ED25519') ? 'ED25519' : undefined,\n curve25519: knownCurves.includes('X25519') ? 'X25519' : undefined,\n brainpoolP256r1: knownCurves.includes('brainpoolP256r1') ? 'brainpoolP256r1' : undefined,\n brainpoolP384r1: knownCurves.includes('brainpoolP384r1') ? 'brainpoolP384r1' : undefined,\n brainpoolP512r1: knownCurves.includes('brainpoolP512r1') ? 'brainpoolP512r1' : undefined\n} : {};\n\nvar curves = {\n p256: {\n oid: [0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: nodeCurves.p256,\n web: webCurves.p256,\n payloadSize: 32\n },\n p384: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha384,\n cipher: _enums2.default.symmetric.aes192,\n node: nodeCurves.p384,\n web: webCurves.p384,\n payloadSize: 48\n },\n p521: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha512,\n cipher: _enums2.default.symmetric.aes256,\n node: nodeCurves.p521,\n web: webCurves.p521,\n payloadSize: 66\n },\n secp256k1: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: nodeCurves.secp256k1\n },\n ed25519: {\n oid: [0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01],\n keyType: _enums2.default.publicKey.eddsa,\n hash: _enums2.default.hash.sha512,\n node: false // nodeCurves.ed25519 TODO\n },\n curve25519: {\n oid: [0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: false // nodeCurves.curve25519 TODO\n },\n brainpoolP256r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: nodeCurves.brainpoolP256r1\n },\n brainpoolP384r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha384,\n cipher: _enums2.default.symmetric.aes192,\n node: nodeCurves.brainpoolP384r1\n },\n brainpoolP512r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha512,\n cipher: _enums2.default.symmetric.aes256,\n node: nodeCurves.brainpoolP512r1\n }\n};\n\n/**\n * @constructor\n */\nfunction Curve(oid_or_name, params) {\n try {\n if (_util2.default.isArray(oid_or_name) || _util2.default.isUint8Array(oid_or_name)) {\n // by oid byte array\n oid_or_name = new _oid2.default(oid_or_name);\n }\n if (oid_or_name instanceof _oid2.default) {\n // by curve OID\n oid_or_name = oid_or_name.getName();\n }\n // by curve name or oid string\n this.name = _enums2.default.write(_enums2.default.curve, oid_or_name);\n } catch (err) {\n throw new Error('Not valid curve');\n }\n params = params || curves[this.name];\n\n this.keyType = params.keyType;\n switch (this.keyType) {\n case _enums2.default.publicKey.ecdsa:\n this.curve = new _elliptic.ec(this.name);\n break;\n case _enums2.default.publicKey.eddsa:\n this.curve = new _elliptic.eddsa(this.name);\n break;\n default:\n throw new Error('Unknown elliptic key type;');\n }\n\n this.oid = params.oid;\n this.hash = params.hash;\n this.cipher = params.cipher;\n this.node = params.node && curves[this.name];\n this.web = params.web && curves[this.name];\n this.payloadSize = params.payloadSize;\n}\n\nCurve.prototype.keyFromPrivate = function (priv) {\n // Not for ed25519\n return new _key2.default(this, { priv: priv });\n};\n\nCurve.prototype.keyFromSecret = function (secret) {\n // Only for ed25519\n return new _key2.default(this, { secret: secret });\n};\n\nCurve.prototype.keyFromPublic = function (pub) {\n return new _key2.default(this, { pub: pub });\n};\n\nCurve.prototype.genKeyPair = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n var keyPair, r, compact;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n keyPair = void 0;\n\n if (!(this.web && _util2.default.getWebCrypto())) {\n _context.next = 13;\n break;\n }\n\n _context.prev = 2;\n _context.next = 5;\n return webGenKeyPair(this.name);\n\n case 5:\n keyPair = _context.sent;\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context['catch'](2);\n\n _util2.default.print_debug(\"Browser did not support signing: \" + _context.t0.message);\n\n case 11:\n _context.next = 17;\n break;\n\n case 13:\n if (!(this.node && _util2.default.getNodeCrypto())) {\n _context.next = 17;\n break;\n }\n\n _context.next = 16;\n return nodeGenKeyPair(this.name);\n\n case 16:\n keyPair = _context.sent;\n\n case 17:\n if (!(!keyPair || !keyPair.priv)) {\n _context.next = 30;\n break;\n }\n\n _context.t1 = this.curve;\n _context.t2 = _util2.default;\n _context.next = 22;\n return _random2.default.getRandomBytes(32);\n\n case 22:\n _context.t3 = _context.sent;\n _context.t4 = _context.t2.Uint8Array_to_str.call(_context.t2, _context.t3);\n _context.t5 = {\n entropy: _context.t4\n };\n _context.next = 27;\n return _context.t1.genKeyPair.call(_context.t1, _context.t5);\n\n case 27:\n r = _context.sent;\n compact = this.curve.curve.type === 'edwards' || this.curve.curve.type === 'mont';\n\n if (this.keyType === _enums2.default.publicKey.eddsa) {\n keyPair = { secret: r.getSecret() };\n } else {\n keyPair = { pub: r.getPublic('array', compact), priv: r.getPrivate().toArray() };\n }\n\n case 30:\n return _context.abrupt('return', new _key2.default(this, keyPair));\n\n case 31:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[2, 8]]);\n}));\n\nfunction getPreferredHashAlgo(oid) {\n return curves[_enums2.default.write(_enums2.default.curve, oid.toHex())].hash;\n}\n\nexports.default = Curve;\nexports.curves = curves;\nexports.webCurves = webCurves;\nexports.nodeCurves = nodeCurves;\nexports.generate = generate;\nexports.getPreferredHashAlgo = getPreferredHashAlgo;\n\n},{\"../../../enums\":359,\"../../../type/oid\":396,\"../../../util\":398,\"../../random\":355,\"./key\":351,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44,\"elliptic\":267}],347:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Encrypt and wrap a session key\n *\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.symmetric} cipher_algo Symmetric cipher to use\n * @param {module:enums.hash} hash_algo Hash algorithm to use\n * @param {module:type/mpi} m Value derived from session key (RFC 6637)\n * @param {Uint8Array} Q Recipient public key\n * @param {String} fingerprint Recipient fingerprint\n * @returns {{V: BN, C: BN}} Returns ephemeral key and encoded session key\n * @async\n */\nvar encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(oid, cipher_algo, hash_algo, m, Q, fingerprint) {\n var curve, param, v, S, Z, C;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n curve = new _curves2.default(oid);\n param = buildEcdhParam(_enums2.default.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint);\n\n cipher_algo = _enums2.default.read(_enums2.default.symmetric, cipher_algo);\n _context.next = 5;\n return curve.genKeyPair();\n\n case 5:\n v = _context.sent;\n\n Q = curve.keyFromPublic(Q);\n S = v.derive(Q);\n Z = kdf(hash_algo, S, _cipher2.default[cipher_algo].keySize, param);\n C = _aes_kw2.default.wrap(Z, m.toString());\n return _context.abrupt('return', {\n V: new _bn2.default(v.getPublic()),\n C: C\n });\n\n case 11:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function encrypt(_x, _x2, _x3, _x4, _x5, _x6) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypt and unwrap the value derived from session key\n *\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.symmetric} cipher_algo Symmetric cipher to use\n * @param {module:enums.hash} hash_algo Hash algorithm to use\n * @param {BN} V Public part of ephemeral key\n * @param {Uint8Array} C Encrypted and wrapped value derived from session key\n * @param {Uint8Array} d Recipient private key\n * @param {String} fingerprint Recipient fingerprint\n * @returns {Uint8Array} Value derived from session\n * @async\n */\n\n\nvar decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(oid, cipher_algo, hash_algo, V, C, d, fingerprint) {\n var curve, param, S, Z;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new _curves2.default(oid);\n param = buildEcdhParam(_enums2.default.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint);\n\n cipher_algo = _enums2.default.read(_enums2.default.symmetric, cipher_algo);\n V = curve.keyFromPublic(V);\n d = curve.keyFromPrivate(d);\n S = d.derive(V);\n Z = kdf(hash_algo, S, _cipher2.default[cipher_algo].keySize, param);\n return _context2.abrupt('return', new _bn2.default(_aes_kw2.default.unwrap(Z, C)));\n\n case 8:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function decrypt(_x7, _x8, _x9, _x10, _x11, _x12, _x13) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nvar _aes_kw = _dereq_('../../aes_kw');\n\nvar _aes_kw2 = _interopRequireDefault(_aes_kw);\n\nvar _cipher = _dereq_('../../cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _hash = _dereq_('../../hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _kdf_params = _dereq_('../../../type/kdf_params');\n\nvar _kdf_params2 = _interopRequireDefault(_kdf_params);\n\nvar _enums = _dereq_('../../../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Build Param for ECDH algorithm (RFC 6637)\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Key encryption and decryption for RFC 6637 ECDH\n * @requires crypto/public_key/elliptic/curve\n * @requires crypto/aes_kw\n * @requires crypto/cipher\n * @requires crypto/hash\n * @requires type/kdf_params\n * @requires enums\n * @requires util\n * @module crypto/public_key/elliptic/ecdh\n */\n\nfunction buildEcdhParam(public_algo, oid, cipher_algo, hash_algo, fingerprint) {\n var kdf_params = new _kdf_params2.default([hash_algo, cipher_algo]);\n return _util2.default.concatUint8Array([oid.write(), new Uint8Array([public_algo]), kdf_params.write(), _util2.default.str_to_Uint8Array(\"Anonymous Sender \"), fingerprint.subarray(0, 20)]);\n}\n\n// Key Derivation Function (RFC 6637)\nfunction kdf(hash_algo, X, length, param) {\n return _hash2.default.digest(hash_algo, _util2.default.concatUint8Array([new Uint8Array([0, 0, 0, 1]), new Uint8Array(X), param])).subarray(0, length);\n}exports.default = { encrypt: encrypt, decrypt: decrypt };\n\n},{\"../../../enums\":359,\"../../../type/kdf_params\":393,\"../../../util\":398,\"../../aes_kw\":326,\"../../cipher\":332,\"../../hash\":338,\"./curves\":346,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],348:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Sign a message using the provided key\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used to sign\n * @param {Uint8Array} m Message to sign\n * @param {Uint8Array} d Private key used to sign the message\n * @returns {{r: Uint8Array,\n * s: Uint8Array}} Signature of the message\n * @async\n */\nvar sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(oid, hash_algo, m, d) {\n var curve, key, signature;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromPrivate(d);\n _context.next = 4;\n return key.sign(m, hash_algo);\n\n case 4:\n signature = _context.sent;\n return _context.abrupt('return', { r: signature.r.toArrayLike(Uint8Array),\n s: signature.s.toArrayLike(Uint8Array) });\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function sign(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies if a signature is valid for a message\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used in the signature\n * @param {{r: Uint8Array,\n s: Uint8Array}} signature Signature to verify\n * @param {Uint8Array} m Message to verify\n * @param {Uint8Array} Q Public key used to verify the message\n * @returns {Boolean}\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of ECDSA following RFC6637 for Openpgpjs\n * @requires crypto/public_key/elliptic/curve\n * @module crypto/public_key/elliptic/ecdsa\n */\n\nvar verify = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(oid, hash_algo, signature, m, Q) {\n var curve, key;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromPublic(Q);\n return _context2.abrupt('return', key.verify(m, signature, hash_algo));\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function verify(_x5, _x6, _x7, _x8, _x9) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { sign: sign, verify: verify };\n\n},{\"./curves\":346,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],349:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Sign a message using the provided key\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used to sign\n * @param {Uint8Array} m Message to sign\n * @param {Uint8Array} d Private key used to sign\n * @returns {{R: Uint8Array,\n * S: Uint8Array}} Signature of the message\n * @async\n */\nvar sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(oid, hash_algo, m, d) {\n var curve, key, signature;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromSecret(d);\n _context.next = 4;\n return key.sign(m, hash_algo);\n\n case 4:\n signature = _context.sent;\n return _context.abrupt('return', { R: new Uint8Array(signature.Rencoded()),\n S: new Uint8Array(signature.Sencoded()) });\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function sign(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies if a signature is valid for a message\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used in the signature\n * @param {{R: Uint8Array,\n S: Uint8Array}} signature Signature to verify the message\n * @param {Uint8Array} m Message to verify\n * @param {Uint8Array} Q Public key used to verify the message\n * @returns {Boolean}\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of EdDSA following RFC4880bis-03 for OpenPGP\n * @requires crypto/public_key/elliptic/curve\n * @module crypto/public_key/elliptic/eddsa\n */\n\nvar verify = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(oid, hash_algo, signature, m, Q) {\n var curve, key;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromPublic(Q);\n return _context2.abrupt('return', key.verify(m, signature, hash_algo));\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function verify(_x5, _x6, _x7, _x8, _x9) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { sign: sign, verify: verify };\n\n},{\"./curves\":346,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],350:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nvar _ecdsa = _dereq_('./ecdsa');\n\nvar _ecdsa2 = _interopRequireDefault(_ecdsa);\n\nvar _eddsa = _dereq_('./eddsa');\n\nvar _eddsa2 = _interopRequireDefault(_eddsa);\n\nvar _ecdh = _dereq_('./ecdh');\n\nvar _ecdh2 = _interopRequireDefault(_ecdh);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions to access Elliptic Curve Cryptography\n * @see module:crypto/public_key/elliptic/curve\n * @see module:crypto/public_key/elliptic/ecdh\n * @see module:crypto/public_key/elliptic/ecdsa\n * @see module:crypto/public_key/elliptic/eddsa\n * @module crypto/public_key/elliptic\n */\n\nexports.default = {\n Curve: _curves2.default, ecdh: _ecdh2.default, ecdsa: _ecdsa2.default, eddsa: _eddsa2.default, generate: _curves.generate, getPreferredHashAlgo: _curves.getPreferredHashAlgo\n};\n\n},{\"./curves\":346,\"./ecdh\":347,\"./ecdsa\":348,\"./eddsa\":349}],351:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nvar webSign = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(curve, hash_algo, message, keyPair) {\n var len, key, signature;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n len = curve.payloadSize;\n _context3.next = 3;\n return webCrypto.importKey(\"jwk\", {\n \"kty\": \"EC\",\n \"crv\": _curves.webCurves[curve.name],\n \"x\": _util2.default.Uint8Array_to_b64(new Uint8Array(keyPair.getPublic().getX().toArray('be', len)), true),\n \"y\": _util2.default.Uint8Array_to_b64(new Uint8Array(keyPair.getPublic().getY().toArray('be', len)), true),\n \"d\": _util2.default.Uint8Array_to_b64(new Uint8Array(keyPair.getPrivate().toArray('be', len)), true),\n \"use\": \"sig\",\n \"kid\": \"ECDSA Private Key\"\n }, {\n \"name\": \"ECDSA\",\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, curve.hash) }\n }, false, [\"sign\"]);\n\n case 3:\n key = _context3.sent;\n _context3.t0 = Uint8Array;\n _context3.next = 7;\n return webCrypto.sign({\n \"name\": 'ECDSA',\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, hash_algo) }\n }, key, message);\n\n case 7:\n _context3.t1 = _context3.sent;\n signature = new _context3.t0(_context3.t1);\n return _context3.abrupt('return', {\n r: new _bn2.default(signature.slice(0, len)),\n s: new _bn2.default(signature.slice(len, len << 1))\n });\n\n case 10:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function webSign(_x6, _x7, _x8, _x9) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar webVerify = function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(curve, hash_algo, _ref5, message, publicKey) {\n var r = _ref5.r,\n s = _ref5.s;\n var len, key, signature;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n len = curve.payloadSize;\n _context4.next = 3;\n return webCrypto.importKey(\"jwk\", {\n \"kty\": \"EC\",\n \"crv\": _curves.webCurves[curve.name],\n \"x\": _util2.default.Uint8Array_to_b64(new Uint8Array(publicKey.getX().toArray('be', len)), true),\n \"y\": _util2.default.Uint8Array_to_b64(new Uint8Array(publicKey.getY().toArray('be', len)), true),\n \"use\": \"sig\",\n \"kid\": \"ECDSA Public Key\"\n }, {\n \"name\": \"ECDSA\",\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, curve.hash) }\n }, false, [\"verify\"]);\n\n case 3:\n key = _context4.sent;\n signature = _util2.default.concatUint8Array([new Uint8Array(len - r.length), r, new Uint8Array(len - s.length), s]).buffer;\n return _context4.abrupt('return', webCrypto.verify({\n \"name\": 'ECDSA',\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, hash_algo) }\n }, key, signature, message));\n\n case 6:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function webVerify(_x10, _x11, _x12, _x13, _x14) {\n return _ref4.apply(this, arguments);\n };\n}();\n\nvar nodeSign = function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(curve, hash_algo, message, keyPair) {\n var sign, key;\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n sign = nodeCrypto.createSign(_enums2.default.read(_enums2.default.hash, hash_algo));\n\n sign.write(message);\n sign.end();\n\n key = ECPrivateKey.encode({\n version: 1,\n parameters: curve.oid,\n privateKey: keyPair.getPrivate().toArray(),\n publicKey: { unused: 0, data: keyPair.getPublic().encode() }\n }, 'pem', {\n label: 'EC PRIVATE KEY'\n });\n return _context5.abrupt('return', ECDSASignature.decode(sign.sign(key), 'der'));\n\n case 5:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function nodeSign(_x15, _x16, _x17, _x18) {\n return _ref6.apply(this, arguments);\n };\n}();\n\nvar nodeVerify = function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(curve, hash_algo, _ref8, message, publicKey) {\n var r = _ref8.r,\n s = _ref8.s;\n var verify, key, signature;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n verify = nodeCrypto.createVerify(_enums2.default.read(_enums2.default.hash, hash_algo));\n\n verify.write(message);\n verify.end();\n\n key = SubjectPublicKeyInfo.encode({\n algorithm: {\n algorithm: [1, 2, 840, 10045, 2, 1],\n parameters: curve.oid\n },\n subjectPublicKey: { unused: 0, data: publicKey.encode() }\n }, 'pem', {\n label: 'PUBLIC KEY'\n });\n signature = ECDSASignature.encode({\n r: new _bn2.default(r), s: new _bn2.default(s)\n }, 'der');\n _context6.prev = 5;\n return _context6.abrupt('return', verify.verify(key, signature));\n\n case 9:\n _context6.prev = 9;\n _context6.t0 = _context6['catch'](5);\n return _context6.abrupt('return', false);\n\n case 12:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this, [[5, 9]]);\n }));\n\n return function nodeVerify(_x19, _x20, _x21, _x22, _x23) {\n return _ref7.apply(this, arguments);\n };\n}();\n\n// Originally written by Owen Smith https://github.com/omsmith\n// Adapted on Feb 2018 from https://github.com/Brightspace/node-jwk-to-pem/\n\n/* eslint-disable no-invalid-this */\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _curves = _dereq_('./curves');\n\nvar _hash = _dereq_('../../hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _util = _dereq_('../../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _enums = _dereq_('../../../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar webCrypto = _util2.default.getWebCrypto(); // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Wrapper for a KeyPair of an Elliptic Curve\n * @requires bn.js\n * @requires crypto/public_key/elliptic/curves\n * @requires crypto/hash\n * @requires util\n * @requires enums\n * @requires asn1.js\n * @module crypto/public_key/elliptic/key\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\n\n/**\n * @constructor\n */\nfunction KeyPair(curve, options) {\n this.curve = curve;\n this.keyType = curve.curve.type === 'edwards' ? _enums2.default.publicKey.eddsa : _enums2.default.publicKey.ecdsa;\n this.keyPair = this.curve.curve.keyPair(options);\n}\n\nKeyPair.prototype.sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(message, hash_algo) {\n var signature, digest;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(this.curve.web && _util2.default.getWebCrypto())) {\n _context.next = 13;\n break;\n }\n\n _context.prev = 1;\n _context.next = 4;\n return webSign(this.curve, hash_algo, message, this.keyPair);\n\n case 4:\n signature = _context.sent;\n return _context.abrupt('return', signature);\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context['catch'](1);\n\n _util2.default.print_debug(\"Browser did not support signing: \" + _context.t0.message);\n\n case 11:\n _context.next = 15;\n break;\n\n case 13:\n if (!(this.curve.node && _util2.default.getNodeCrypto())) {\n _context.next = 15;\n break;\n }\n\n return _context.abrupt('return', nodeSign(this.curve, hash_algo, message, this.keyPair));\n\n case 15:\n digest = typeof hash_algo === 'undefined' ? message : _hash2.default.digest(hash_algo, message);\n return _context.abrupt('return', this.keyPair.sign(digest));\n\n case 17:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[1, 8]]);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\nKeyPair.prototype.verify = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(message, signature, hash_algo) {\n var result, digest;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(this.curve.web && _util2.default.getWebCrypto())) {\n _context2.next = 13;\n break;\n }\n\n _context2.prev = 1;\n _context2.next = 4;\n return webVerify(this.curve, hash_algo, signature, message, this.keyPair.getPublic());\n\n case 4:\n result = _context2.sent;\n return _context2.abrupt('return', result);\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n\n _util2.default.print_debug(\"Browser did not support signing: \" + _context2.t0.message);\n\n case 11:\n _context2.next = 15;\n break;\n\n case 13:\n if (!(this.curve.node && _util2.default.getNodeCrypto())) {\n _context2.next = 15;\n break;\n }\n\n return _context2.abrupt('return', nodeVerify(this.curve, hash_algo, signature, message, this.keyPair.getPublic()));\n\n case 15:\n digest = typeof hash_algo === 'undefined' ? message : _hash2.default.digest(hash_algo, message);\n return _context2.abrupt('return', this.keyPair.verify(digest, signature));\n\n case 17:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this, [[1, 8]]);\n }));\n\n return function (_x3, _x4, _x5) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nKeyPair.prototype.derive = function (pub) {\n if (this.keyType === _enums2.default.publicKey.eddsa) {\n throw new Error('Key can only be used for EdDSA');\n }\n return this.keyPair.derive(pub.keyPair.getPublic());\n};\n\nKeyPair.prototype.getPublic = function () {\n var compact = this.curve.curve.curve.type === 'edwards' || this.curve.curve.curve.type === 'mont';\n return this.keyPair.getPublic('array', compact);\n};\n\nKeyPair.prototype.getPrivate = function () {\n if (this.curve.keyType === _enums2.default.publicKey.eddsa) {\n return this.keyPair.getSecret();\n }\n return this.keyPair.getPrivate().toArray();\n};\n\nexports.default = KeyPair;\nvar asn1 = nodeCrypto ? _dereq_('asn1.js') : undefined;\n\nvar ECDSASignature = nodeCrypto ? asn1.define('ECDSASignature', function () {\n this.seq().obj(this.key('r').int(), this.key('s').int());\n}) : undefined;\n\nvar ECPrivateKey = nodeCrypto ? asn1.define('ECPrivateKey', function () {\n this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').explicit(0).optional().any(), this.key('publicKey').explicit(1).optional().bitstr());\n}) : undefined;\n\nvar AlgorithmIdentifier = nodeCrypto ? asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional().any());\n}) : undefined;\n\nvar SubjectPublicKeyInfo = nodeCrypto ? asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());\n}) : undefined;\n\n},{\"../../../enums\":359,\"../../../util\":398,\"../../hash\":338,\"./curves\":346,\"asn1.js\":\"asn1.js\",\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],352:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rsa = _dereq_('./rsa');\n\nvar _rsa2 = _interopRequireDefault(_rsa);\n\nvar _elgamal = _dereq_('./elgamal');\n\nvar _elgamal2 = _interopRequireDefault(_elgamal);\n\nvar _elliptic = _dereq_('./elliptic');\n\nvar _elliptic2 = _interopRequireDefault(_elliptic);\n\nvar _dsa = _dereq_('./dsa');\n\nvar _dsa2 = _interopRequireDefault(_dsa);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview Asymmetric cryptography functions\n * @requires crypto/public_key/dsa\n * @requires crypto/public_key/elgamal\n * @requires crypto/public_key/elliptic\n * @requires crypto/public_key/rsa\n * @module crypto/public_key\n */\n\nexports.default = {\n /** @see module:crypto/public_key/rsa */\n rsa: _rsa2.default,\n /** @see module:crypto/public_key/elgamal */\n elgamal: _elgamal2.default,\n /** @see module:crypto/public_key/elliptic */\n elliptic: _elliptic2.default,\n /** @see module:crypto/public_key/dsa */\n dsa: _dsa2.default\n};\n\n},{\"./dsa\":344,\"./elgamal\":345,\"./elliptic\":350,\"./rsa\":354}],353:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Probabilistic random number generator\n * @param {Integer} bits Bit length of the prime\n * @param {BN} e Optional RSA exponent to check against the prime\n * @param {Integer} k Optional number of iterations of Miller-Rabin test\n * @returns BN\n * @async\n */\nvar randomProbablePrime = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(bits, e, k) {\n var min, thirty, adds, n, i;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n min = new _bn2.default(1).shln(bits - 1);\n thirty = new _bn2.default(30);\n /*\n * We can avoid any multiples of 3 and 5 by looking at n mod 30\n * n mod 30 = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29\n * the next possible prime is mod 30:\n * 1 7 7 7 7 7 7 11 11 11 11 13 13 17 17 17 17 19 19 23 23 23 23 29 29 29 29 29 29 1\n */\n\n adds = [1, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 2];\n _context.next = 5;\n return _random2.default.getRandomBN(min, min.shln(1));\n\n case 5:\n n = _context.sent;\n i = n.mod(thirty).toNumber();\n\n case 7:\n n.iaddn(adds[i]);\n i = (i + adds[i]) % adds.length;\n // If reached the maximum, go back to the minimum.\n if (n.bitLength() > bits) {\n n = n.mod(min.shln(1)).iadd(min);\n i = n.mod(thirty).toNumber();\n }\n // eslint-disable-next-line no-await-in-loop\n\n case 10:\n _context.next = 12;\n return isProbablePrime(n, e, k);\n\n case 12:\n if (!_context.sent) {\n _context.next = 7;\n break;\n }\n\n case 13:\n return _context.abrupt('return', n);\n\n case 14:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function randomProbablePrime(_x, _x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Probabilistic primality testing\n * @param {BN} n Number to test\n * @param {BN} e Optional RSA exponent to check against the prime\n * @param {Integer} k Optional number of iterations of Miller-Rabin test\n * @returns {boolean}\n * @async\n */\n\n\nvar isProbablePrime = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(n, e, k) {\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(e && !n.subn(1).gcd(e).eqn(1))) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 2:\n if (divisionTest(n)) {\n _context2.next = 4;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 4:\n if (fermat(n)) {\n _context2.next = 6;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 6:\n _context2.next = 8;\n return millerRabin(n, k);\n\n case 8:\n if (_context2.sent) {\n _context2.next = 10;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 10:\n return _context2.abrupt('return', true);\n\n case 11:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function isProbablePrime(_x4, _x5, _x6) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Tests whether n is probably prime or not using Fermat's test with b = 2.\n * Fails if b^(n-1) mod n === 1.\n * @param {BN} n Number to test\n * @param {Integer} b Optional Fermat test base\n * @returns {boolean}\n */\n\n\n// Miller-Rabin - Miller Rabin algorithm for primality test\n// Copyright Fedor Indutny, 2014.\n//\n// This software is licensed under the MIT License.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// Adapted on Jan 2018 from version 4.0.1 at https://github.com/indutny/miller-rabin\n\n// Sample syntax for Fixed-Base Miller-Rabin:\n// millerRabin(n, k, () => new BN(small_primes[Math.random() * small_primes.length | 0]))\n\n/**\n * Tests whether n is probably prime or not using the Miller-Rabin test.\n * See HAC Remark 4.28.\n * @param {BN} n Number to test\n * @param {Integer} k Optional number of iterations of Miller-Rabin test\n * @param {Function} rand Optional function to generate potential witnesses\n * @returns {boolean}\n * @async\n */\nvar millerRabin = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(n, k, rand) {\n var len, red, rone, n1, rn1, s, d, a, x, i;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n len = n.bitLength();\n red = _bn2.default.mont(n);\n rone = new _bn2.default(1).toRed(red);\n\n\n if (!k) {\n k = Math.max(1, len / 48 | 0);\n }\n\n n1 = n.subn(1);\n rn1 = n1.toRed(red);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n\n s = 0;\n\n while (!n1.testn(s)) {\n s++;\n }\n d = n.shrn(s);\n\n case 9:\n if (!(k > 0)) {\n _context3.next = 37;\n break;\n }\n\n if (!rand) {\n _context3.next = 14;\n break;\n }\n\n _context3.t0 = rand();\n _context3.next = 17;\n break;\n\n case 14:\n _context3.next = 16;\n return _random2.default.getRandomBN(new _bn2.default(2), n1);\n\n case 16:\n _context3.t0 = _context3.sent;\n\n case 17:\n a = _context3.t0;\n x = a.toRed(red).redPow(d);\n\n if (!(x.eq(rone) || x.eq(rn1))) {\n _context3.next = 21;\n break;\n }\n\n return _context3.abrupt('continue', 34);\n\n case 21:\n i = void 0;\n i = 1;\n\n case 23:\n if (!(i < s)) {\n _context3.next = 32;\n break;\n }\n\n x = x.redSqr();\n\n if (!x.eq(rone)) {\n _context3.next = 27;\n break;\n }\n\n return _context3.abrupt('return', false);\n\n case 27:\n if (!x.eq(rn1)) {\n _context3.next = 29;\n break;\n }\n\n return _context3.abrupt('break', 32);\n\n case 29:\n i++;\n _context3.next = 23;\n break;\n\n case 32:\n if (!(i === s)) {\n _context3.next = 34;\n break;\n }\n\n return _context3.abrupt('return', false);\n\n case 34:\n k--;\n _context3.next = 9;\n break;\n\n case 37:\n return _context3.abrupt('return', true);\n\n case 38:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function millerRabin(_x7, _x8, _x9) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Algorithms for probabilistic random prime generation\n * @requires bn.js\n * @requires crypto/random\n * @module crypto/public_key/prime\n */\n\nexports.default = {\n randomProbablePrime: randomProbablePrime, isProbablePrime: isProbablePrime, fermat: fermat, millerRabin: millerRabin, divisionTest: divisionTest\n};\nfunction fermat(n, b) {\n b = b || new _bn2.default(2);\n return b.toRed(_bn2.default.mont(n)).redPow(n.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction divisionTest(n) {\n return small_primes.every(function (m) {\n return n.modn(m) !== 0;\n });\n}\n\n// https://github.com/gpg/libgcrypt/blob/master/cipher/primegen.c\nvar small_primes = [7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999];\n\n},{\"../random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],354:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _prime = _dereq_('./prime');\n\nvar _prime2 = _interopRequireDefault(_prime);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _config = _dereq_('../../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Helper for IE11 KeyOperation objects\nfunction promisifyIE11Op(keyObj, err) {\n if (typeof keyObj.then !== 'function') {\n // IE11 KeyOperation\n return new _promise2.default(function (resolve, reject) {\n keyObj.onerror = function () {\n reject(new Error(err));\n };\n keyObj.oncomplete = function (e) {\n resolve(e.target.result);\n };\n });\n }\n return keyObj;\n} // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview RSA implementation\n * @requires bn.js\n * @requires crypto/public_key/prime\n * @requires crypto/random\n * @requires config\n * @requires util\n * @module crypto/public_key/rsa\n */\n\nexports.default = {\n /** Create signature\n * @param {BN} m message\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @param {BN} d RSA private exponent\n * @returns {BN} RSA Signature\n * @async\n */\n sign: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(m, n, e, d) {\n var nred;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(n.cmp(m) <= 0)) {\n _context.next = 2;\n break;\n }\n\n throw new Error('Message size cannot exceed modulus size');\n\n case 2:\n nred = new _bn2.default.red(n);\n return _context.abrupt('return', m.toRed(nred).redPow(d).toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function sign(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n }\n\n return sign;\n }(),\n\n /**\n * Verify signature\n * @param {BN} s signature\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @returns {BN}\n * @async\n */\n verify: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(s, n, e) {\n var nred;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(n.cmp(s) <= 0)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Signature size cannot exceed modulus size');\n\n case 2:\n nred = new _bn2.default.red(n);\n return _context2.abrupt('return', s.toRed(nred).redPow(e).toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 4:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function verify(_x5, _x6, _x7) {\n return _ref2.apply(this, arguments);\n }\n\n return verify;\n }(),\n\n /**\n * Encrypt message\n * @param {BN} m message\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @returns {BN} RSA Ciphertext\n * @async\n */\n encrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(m, n, e) {\n var nred;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(n.cmp(m) <= 0)) {\n _context3.next = 2;\n break;\n }\n\n throw new Error('Message size cannot exceed modulus size');\n\n case 2:\n nred = new _bn2.default.red(n);\n return _context3.abrupt('return', m.toRed(nred).redPow(e).toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 4:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function encrypt(_x8, _x9, _x10) {\n return _ref3.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * Decrypt RSA message\n * @param {BN} m message\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @param {BN} d RSA private exponent\n * @param {BN} p RSA private prime p\n * @param {BN} q RSA private prime q\n * @param {BN} u RSA private inverse of prime q\n * @returns {BN} RSA Plaintext\n * @async\n */\n decrypt: function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(m, n, e, d, p, q, u) {\n var dq, dp, pred, qred, nred, blinder, unblinder, mp, mq, t, h, result;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(n.cmp(m) <= 0)) {\n _context4.next = 2;\n break;\n }\n\n throw new Error('Data too large.');\n\n case 2:\n dq = d.mod(q.subn(1)); // d mod (q-1)\n\n dp = d.mod(p.subn(1)); // d mod (p-1)\n\n pred = new _bn2.default.red(p);\n qred = new _bn2.default.red(q);\n nred = new _bn2.default.red(n);\n blinder = void 0;\n unblinder = void 0;\n\n if (!_config2.default.rsa_blinding) {\n _context4.next = 16;\n break;\n }\n\n _context4.next = 12;\n return _random2.default.getRandomBN(new _bn2.default(2), n);\n\n case 12:\n _context4.t0 = nred;\n unblinder = _context4.sent.toRed(_context4.t0);\n\n blinder = unblinder.redInvm().redPow(e);\n m = m.toRed(nred).redMul(blinder).fromRed();\n\n case 16:\n mp = m.toRed(pred).redPow(dp);\n mq = m.toRed(qred).redPow(dq);\n t = mq.redSub(mp.fromRed().toRed(qred));\n h = u.toRed(qred).redMul(t).fromRed();\n result = h.mul(p).add(mp).toRed(nred);\n\n\n if (_config2.default.rsa_blinding) {\n result = result.redMul(unblinder);\n }\n\n return _context4.abrupt('return', result.toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 23:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function decrypt(_x11, _x12, _x13, _x14, _x15, _x16, _x17) {\n return _ref4.apply(this, arguments);\n }\n\n return decrypt;\n }(),\n\n /**\n * Generate a new random private key B bits long with public exponent E.\n *\n * When possible, webCrypto is used. Otherwise, primes are generated using\n * 40 rounds of the Miller-Rabin probabilistic random prime generation algorithm.\n * @see module:crypto/public_key/prime\n * @param {Integer} B RSA bit length\n * @param {String} E RSA public exponent in hex string\n * @returns {{n: BN, e: BN, d: BN,\n * p: BN, q: BN, u: BN}} RSA public modulus, RSA public exponent, RSA private exponent,\n * RSA private prime p, RSA private prime q, u = q ** -1 mod p\n * @async\n */\n generate: function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(B, E) {\n var key, webCrypto, keyPair, keyGenOpt, jwk, p, q, _ref6, phi;\n\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n key = void 0;\n\n E = new _bn2.default(E, 16);\n webCrypto = _util2.default.getWebCryptoAll();\n\n // Native RSA keygen using Web Crypto\n\n if (!webCrypto) {\n _context5.next = 35;\n break;\n }\n\n keyPair = void 0;\n keyGenOpt = void 0;\n\n if (!(window.crypto && window.crypto.subtle || window.msCrypto)) {\n _context5.next = 14;\n break;\n }\n\n // current standard spec\n keyGenOpt = {\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: B, // the specified keysize in bits\n publicExponent: E.toArrayLike(Uint8Array), // take three bytes (max 65537) for exponent\n hash: {\n name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify'\n }\n };\n keyPair = webCrypto.generateKey(keyGenOpt, true, ['sign', 'verify']);\n _context5.next = 11;\n return promisifyIE11Op(keyPair, 'Error generating RSA key pair.');\n\n case 11:\n keyPair = _context5.sent;\n _context5.next = 22;\n break;\n\n case 14:\n if (!(window.crypto && window.crypto.webkitSubtle)) {\n _context5.next = 21;\n break;\n }\n\n // outdated spec implemented by old Webkit\n keyGenOpt = {\n name: 'RSA-OAEP',\n modulusLength: B, // the specified keysize in bits\n publicExponent: E.toArrayLike(Uint8Array), // take three bytes (max 65537) for exponent\n hash: {\n name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify'\n }\n };\n _context5.next = 18;\n return webCrypto.generateKey(keyGenOpt, true, ['encrypt', 'decrypt']);\n\n case 18:\n keyPair = _context5.sent;\n _context5.next = 22;\n break;\n\n case 21:\n throw new Error('Unknown WebCrypto implementation');\n\n case 22:\n\n // export the generated keys as JsonWebKey (JWK)\n // https://tools.ietf.org/html/draft-ietf-jose-json-web-key-33\n jwk = webCrypto.exportKey('jwk', keyPair.privateKey);\n _context5.next = 25;\n return promisifyIE11Op(jwk, 'Error exporting RSA key pair.');\n\n case 25:\n jwk = _context5.sent;\n\n\n // parse raw ArrayBuffer bytes to jwk/json (WebKit/Safari/IE11 quirk)\n if (jwk instanceof ArrayBuffer) {\n jwk = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(jwk)));\n }\n\n // map JWK parameters to BN\n key = {};\n key.n = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.n));\n key.e = E;\n key.d = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.d));\n key.p = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.p));\n key.q = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.q));\n key.u = key.p.invm(key.q);\n return _context5.abrupt('return', key);\n\n case 35:\n _context5.next = 37;\n return _prime2.default.randomProbablePrime(B - (B >> 1), E, 40);\n\n case 37:\n p = _context5.sent;\n _context5.next = 40;\n return _prime2.default.randomProbablePrime(B >> 1, E, 40);\n\n case 40:\n q = _context5.sent;\n\n\n if (p.cmp(q) < 0) {\n _ref6 = [q, p];\n p = _ref6[0];\n q = _ref6[1];\n }\n\n phi = p.subn(1).mul(q.subn(1));\n return _context5.abrupt('return', {\n n: p.mul(q),\n e: E,\n d: E.invm(phi),\n p: p,\n q: q,\n // dp: d.mod(p.subn(1)),\n // dq: d.mod(q.subn(1)),\n u: p.invm(q)\n });\n\n case 44:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n function generate(_x18, _x19) {\n return _ref5.apply(this, arguments);\n }\n\n return generate;\n }(),\n\n prime: _prime2.default\n};\n\n},{\"../../config\":325,\"../../util\":398,\"../random\":355,\"./prime\":353,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],355:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _typeof2 = _dereq_('babel-runtime/helpers/typeof');\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Do not use util.getNodeCrypto because we need this regardless of use_native setting\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// The GPG4Browsers crypto interface\n\n/**\n * @fileoverview Provides tools for retrieving secure randomness from browsers or Node.js\n * @requires bn.js\n * @requires util\n * @module crypto/random\n */\n\nvar nodeCrypto = _util2.default.detectNode() && _dereq_('crypto');\n\nexports.default = {\n /**\n * Retrieve secure random byte array of the specified length\n * @param {Integer} length Length in bytes to generate\n * @returns {Uint8Array} Random byte array\n * @async\n */\n getRandomBytes: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(length) {\n var buf, bytes;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n buf = new Uint8Array(length);\n\n if (!(typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues)) {\n _context.next = 5;\n break;\n }\n\n window.crypto.getRandomValues(buf);\n _context.next = 20;\n break;\n\n case 5:\n if (!(typeof window !== 'undefined' && (0, _typeof3.default)(window.msCrypto) === 'object' && typeof window.msCrypto.getRandomValues === 'function')) {\n _context.next = 9;\n break;\n }\n\n window.msCrypto.getRandomValues(buf);\n _context.next = 20;\n break;\n\n case 9:\n if (!nodeCrypto) {\n _context.next = 14;\n break;\n }\n\n bytes = nodeCrypto.randomBytes(buf.length);\n\n buf.set(bytes);\n _context.next = 20;\n break;\n\n case 14:\n if (!this.randomBuffer.buffer) {\n _context.next = 19;\n break;\n }\n\n _context.next = 17;\n return this.randomBuffer.get(buf);\n\n case 17:\n _context.next = 20;\n break;\n\n case 19:\n throw new Error('No secure random number generator available.');\n\n case 20:\n return _context.abrupt('return', buf);\n\n case 21:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function getRandomBytes(_x) {\n return _ref.apply(this, arguments);\n }\n\n return getRandomBytes;\n }(),\n\n /**\n * Create a secure random MPI that is greater than or equal to min and less than max.\n * @param {module:type/mpi} min Lower bound, included\n * @param {module:type/mpi} max Upper bound, excluded\n * @returns {module:BN} Random MPI\n * @async\n */\n getRandomBN: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(min, max) {\n var modulus, bytes, r;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(max.cmp(min) <= 0)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Illegal parameter value: max <= min');\n\n case 2:\n modulus = max.sub(min);\n bytes = modulus.byteLength();\n\n // Using a while loop is necessary to avoid bias introduced by the mod operation.\n // However, we request 64 extra random bits so that the bias is negligible.\n // Section B.1.1 here: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf\n\n _context2.t0 = _bn2.default;\n _context2.next = 7;\n return this.getRandomBytes(bytes + 8);\n\n case 7:\n _context2.t1 = _context2.sent;\n r = new _context2.t0(_context2.t1);\n return _context2.abrupt('return', r.mod(modulus).add(min));\n\n case 10:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function getRandomBN(_x2, _x3) {\n return _ref2.apply(this, arguments);\n }\n\n return getRandomBN;\n }(),\n\n randomBuffer: new RandomBuffer()\n};\n\n/**\n * Buffer for secure random numbers\n */\n\nfunction RandomBuffer() {\n this.buffer = null;\n this.size = null;\n this.callback = null;\n}\n\n/**\n * Initialize buffer\n * @param {Integer} size size of buffer\n */\nRandomBuffer.prototype.init = function (size, callback) {\n this.buffer = new Uint8Array(size);\n this.size = 0;\n this.callback = callback;\n};\n\n/**\n * Concat array of secure random numbers to buffer\n * @param {Uint8Array} buf\n */\nRandomBuffer.prototype.set = function (buf) {\n if (!this.buffer) {\n throw new Error('RandomBuffer is not initialized');\n }\n if (!(buf instanceof Uint8Array)) {\n throw new Error('Invalid type: buf not an Uint8Array');\n }\n var freeSpace = this.buffer.length - this.size;\n if (buf.length > freeSpace) {\n buf = buf.subarray(0, freeSpace);\n }\n // set buf with offset old size of buffer\n this.buffer.set(buf, this.size);\n this.size += buf.length;\n};\n\n/**\n * Take numbers out of buffer and copy to array\n * @param {Uint8Array} buf the destination array\n */\nRandomBuffer.prototype.get = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(buf) {\n var i;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (this.buffer) {\n _context3.next = 2;\n break;\n }\n\n throw new Error('RandomBuffer is not initialized');\n\n case 2:\n if (buf instanceof Uint8Array) {\n _context3.next = 4;\n break;\n }\n\n throw new Error('Invalid type: buf not an Uint8Array');\n\n case 4:\n if (!(this.size < buf.length)) {\n _context3.next = 10;\n break;\n }\n\n if (this.callback) {\n _context3.next = 7;\n break;\n }\n\n throw new Error('Random number buffer depleted');\n\n case 7:\n _context3.next = 9;\n return this.callback();\n\n case 9:\n return _context3.abrupt('return', this.get(buf));\n\n case 10:\n for (i = 0; i < buf.length; i++) {\n buf[i] = this.buffer[--this.size];\n // clear buffer value\n this.buffer[this.size] = 0;\n }\n\n case 11:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n},{\"../util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/typeof\":41,\"babel-runtime/regenerator\":42,\"bn.js\":44,\"crypto\":\"crypto\"}],356:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _from = _dereq_('babel-runtime/core-js/array/from');\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _pkcs = _dereq_('./pkcs1');\n\nvar _pkcs2 = _interopRequireDefault(_pkcs);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n /**\n * Verifies the signature provided for data using specified algorithms and public key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * and {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4}\n * for public key and hash algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {module:enums.hash} hash_algo Hash algorithm\n * @param {Array<module:type/mpi>} msg_MPIs Algorithm-specific signature parameters\n * @param {Array<module:type/mpi>} pub_MPIs Algorithm-specific public key parameters\n * @param {Uint8Array} data Data for which the signature was created\n * @returns {Boolean} True if signature is valid\n * @async\n */\n verify: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(algo, hash_algo, msg_MPIs, pub_MPIs, data) {\n var m, n, e, EM, EM2, r, s, p, q, g, y, oid, signature, Q, _oid, _signature, _Q;\n\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = algo;\n _context.next = _context.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context.t0 === _enums2.default.publicKey.rsa_sign ? 3 : _context.t0 === _enums2.default.publicKey.dsa ? 11 : _context.t0 === _enums2.default.publicKey.ecdsa ? 18 : _context.t0 === _enums2.default.publicKey.eddsa ? 22 : 26;\n break;\n\n case 3:\n m = msg_MPIs[0].toBN();\n n = pub_MPIs[0].toBN();\n e = pub_MPIs[1].toBN();\n _context.next = 8;\n return _public_key2.default.rsa.verify(m, n, e);\n\n case 8:\n EM = _context.sent;\n EM2 = _pkcs2.default.emsa.encode(hash_algo, _util2.default.Uint8Array_to_str(data), n.byteLength());\n return _context.abrupt('return', _util2.default.Uint8Array_to_hex(EM) === EM2);\n\n case 11:\n r = msg_MPIs[0].toBN();\n s = msg_MPIs[1].toBN();\n p = pub_MPIs[0].toBN();\n q = pub_MPIs[1].toBN();\n g = pub_MPIs[2].toBN();\n y = pub_MPIs[3].toBN();\n return _context.abrupt('return', _public_key2.default.dsa.verify(hash_algo, r, s, data, g, p, q, y));\n\n case 18:\n oid = pub_MPIs[0];\n signature = { r: msg_MPIs[0].toUint8Array(), s: msg_MPIs[1].toUint8Array() };\n Q = pub_MPIs[1].toUint8Array();\n return _context.abrupt('return', _public_key2.default.elliptic.ecdsa.verify(oid, hash_algo, signature, data, Q));\n\n case 22:\n _oid = pub_MPIs[0];\n // TODO refactor elliptic to accept Uint8Array\n // EdDSA signature params are expected in little-endian format\n\n _signature = { R: (0, _from2.default)(msg_MPIs[0].toUint8Array('le', 32)),\n S: (0, _from2.default)(msg_MPIs[1].toUint8Array('le', 32)) };\n _Q = (0, _from2.default)(pub_MPIs[1].toUint8Array('be', 33));\n return _context.abrupt('return', _public_key2.default.elliptic.eddsa.verify(_oid, hash_algo, _signature, data, _Q));\n\n case 26:\n throw new Error('Invalid signature algorithm.');\n\n case 27:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function verify(_x, _x2, _x3, _x4, _x5) {\n return _ref.apply(this, arguments);\n }\n\n return verify;\n }(),\n\n /**\n * Creates a signature on data using specified algorithms and private key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * and {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4}\n * for public key and hash algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {module:enums.hash} hash_algo Hash algorithm\n * @param {Array<module:type/mpi>} key_params Algorithm-specific public and private key parameters\n * @param {Uint8Array} data Data to be signed\n * @returns {Uint8Array} Signature\n * @async\n */\n sign: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(algo, hash_algo, key_params, data) {\n var n, e, d, m, signature, p, q, g, x, _signature2, oid, _d, _signature3, _oid2, _d2, _signature4;\n\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.t0 = algo;\n _context2.next = _context2.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context2.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context2.t0 === _enums2.default.publicKey.rsa_sign ? 3 : _context2.t0 === _enums2.default.publicKey.dsa ? 12 : _context2.t0 === _enums2.default.publicKey.elgamal ? 20 : _context2.t0 === _enums2.default.publicKey.ecdsa ? 21 : _context2.t0 === _enums2.default.publicKey.eddsa ? 27 : 33;\n break;\n\n case 3:\n n = key_params[0].toBN();\n e = key_params[1].toBN();\n d = key_params[2].toBN();\n\n data = _util2.default.Uint8Array_to_str(data);\n m = new _bn2.default(_pkcs2.default.emsa.encode(hash_algo, data, n.byteLength()), 16);\n _context2.next = 10;\n return _public_key2.default.rsa.sign(m, n, e, d);\n\n case 10:\n signature = _context2.sent;\n return _context2.abrupt('return', _util2.default.Uint8Array_to_MPI(signature));\n\n case 12:\n p = key_params[0].toBN();\n q = key_params[1].toBN();\n g = key_params[2].toBN();\n x = key_params[4].toBN();\n _context2.next = 18;\n return _public_key2.default.dsa.sign(hash_algo, data, g, p, q, x);\n\n case 18:\n _signature2 = _context2.sent;\n return _context2.abrupt('return', _util2.default.concatUint8Array([_util2.default.Uint8Array_to_MPI(_signature2.r), _util2.default.Uint8Array_to_MPI(_signature2.s)]));\n\n case 20:\n throw new Error('Signing with Elgamal is not defined in the OpenPGP standard.');\n\n case 21:\n oid = key_params[0];\n _d = key_params[2].toUint8Array();\n _context2.next = 25;\n return _public_key2.default.elliptic.ecdsa.sign(oid, hash_algo, data, _d);\n\n case 25:\n _signature3 = _context2.sent;\n return _context2.abrupt('return', _util2.default.concatUint8Array([_util2.default.Uint8Array_to_MPI(_signature3.r), _util2.default.Uint8Array_to_MPI(_signature3.s)]));\n\n case 27:\n _oid2 = key_params[0];\n _d2 = (0, _from2.default)(key_params[2].toUint8Array('be', 32));\n _context2.next = 31;\n return _public_key2.default.elliptic.eddsa.sign(_oid2, hash_algo, data, _d2);\n\n case 31:\n _signature4 = _context2.sent;\n return _context2.abrupt('return', _util2.default.concatUint8Array([_util2.default.Uint8Array_to_MPI(_signature4.R), _util2.default.Uint8Array_to_MPI(_signature4.S)]));\n\n case 33:\n throw new Error('Invalid signature algorithm.');\n\n case 34:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function sign(_x6, _x7, _x8, _x9) {\n return _ref2.apply(this, arguments);\n }\n\n return sign;\n }()\n}; /**\n * @fileoverview Provides functions for asymmetric signing and signature verification\n * @requires bn.js\n * @requires crypto/public_key\n * @requires crypto/pkcs1\n * @requires enums\n * @requires util\n * @module crypto/signature\n */\n\n},{\"../enums\":359,\"../util\":398,\"./pkcs1\":342,\"./public_key\":352,\"babel-runtime/core-js/array/from\":20,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],357:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _base = _dereq_('./base64.js');\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Finds out which Ascii Armoring type is used. Throws error if unknown type.\n * @private\n * @param {String} text [String] ascii armored text\n * @returns {Integer} 0 = MESSAGE PART n of m\n * 1 = MESSAGE PART n\n * 2 = SIGNED MESSAGE\n * 3 = PGP MESSAGE\n * 4 = PUBLIC KEY BLOCK\n * 5 = PRIVATE KEY BLOCK\n * 6 = SIGNATURE\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/base64\n * @requires enums\n * @requires config\n * @requires util\n * @module encoding/armor\n */\n\nfunction getType(text) {\n var reHeader = /^-----BEGIN PGP (MESSAGE, PART \\d+\\/\\d+|MESSAGE, PART \\d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$\\n/m;\n\n var header = text.match(reHeader);\n\n if (!header) {\n throw new Error('Unknown ASCII armor type');\n }\n\n // BEGIN PGP MESSAGE, PART X/Y\n // Used for multi-part messages, where the armor is split amongst Y\n // parts, and this is the Xth part out of Y.\n if (/MESSAGE, PART \\d+\\/\\d+/.test(header[1])) {\n return _enums2.default.armor.multipart_section;\n } else\n // BEGIN PGP MESSAGE, PART X\n // Used for multi-part messages, where this is the Xth part of an\n // unspecified number of parts. Requires the MESSAGE-ID Armor\n // Header to be used.\n if (/MESSAGE, PART \\d+/.test(header[1])) {\n return _enums2.default.armor.multipart_last;\n } else\n // BEGIN PGP SIGNED MESSAGE\n if (/SIGNED MESSAGE/.test(header[1])) {\n return _enums2.default.armor.signed;\n } else\n // BEGIN PGP MESSAGE\n // Used for signed, encrypted, or compressed files.\n if (/MESSAGE/.test(header[1])) {\n return _enums2.default.armor.message;\n } else\n // BEGIN PGP PUBLIC KEY BLOCK\n // Used for armoring public keys.\n if (/PUBLIC KEY BLOCK/.test(header[1])) {\n return _enums2.default.armor.public_key;\n } else\n // BEGIN PGP PRIVATE KEY BLOCK\n // Used for armoring private keys.\n if (/PRIVATE KEY BLOCK/.test(header[1])) {\n return _enums2.default.armor.private_key;\n } else\n // BEGIN PGP SIGNATURE\n // Used for detached signatures, OpenPGP/MIME signatures, and\n // cleartext signatures. Note that PGP 2.x uses BEGIN PGP MESSAGE\n // for detached signatures.\n if (/SIGNATURE/.test(header[1])) {\n return _enums2.default.armor.signature;\n }\n}\n\n/**\n * Add additional information to the armor version of an OpenPGP binary\n * packet block.\n * @author Alex\n * @version 2011-12-16\n * @param {String} customComment (optional) additional comment to add to the armored string\n * @returns {String} The header information\n */\nfunction addheader(customComment) {\n var result = \"\";\n if (_config2.default.show_version) {\n result += \"Version: \" + _config2.default.versionstring + '\\r\\n';\n }\n if (_config2.default.show_comment) {\n result += \"Comment: \" + _config2.default.commentstring + '\\r\\n';\n }\n if (customComment) {\n result += \"Comment: \" + customComment + '\\r\\n';\n }\n result += '\\r\\n';\n return result;\n}\n\n/**\n * Calculates a checksum over the given data and returns it base64 encoded\n * @param {String} data Data to create a CRC-24 checksum for\n * @returns {String} Base64 encoded checksum\n */\nfunction getCheckSum(data) {\n var c = createcrc24(data);\n var bytes = new Uint8Array([c >> 16, c >> 8 & 0xFF, c & 0xFF]);\n return _base2.default.encode(bytes);\n}\n\n/**\n * Calculates the checksum over the given data and compares it with the\n * given base64 encoded checksum\n * @param {String} data Data to create a CRC-24 checksum for\n * @param {String} checksum Base64 encoded checksum\n * @returns {Boolean} True if the given checksum is correct; otherwise false\n */\nfunction verifyCheckSum(data, checksum) {\n var c = getCheckSum(data);\n var d = checksum;\n return c[0] === d[0] && c[1] === d[1] && c[2] === d[2] && c[3] === d[3];\n}\n/**\n * Internal function to calculate a CRC-24 checksum over a given string (data)\n * @param {String} data Data to create a CRC-24 checksum for\n * @returns {Integer} The CRC-24 checksum as number\n */\nvar crc_table = [0x00000000, 0x00864cfb, 0x018ad50d, 0x010c99f6, 0x0393e6e1, 0x0315aa1a, 0x021933ec, 0x029f7f17, 0x07a18139, 0x0727cdc2, 0x062b5434, 0x06ad18cf, 0x043267d8, 0x04b42b23, 0x05b8b2d5, 0x053efe2e, 0x0fc54e89, 0x0f430272, 0x0e4f9b84, 0x0ec9d77f, 0x0c56a868, 0x0cd0e493, 0x0ddc7d65, 0x0d5a319e, 0x0864cfb0, 0x08e2834b, 0x09ee1abd, 0x09685646, 0x0bf72951, 0x0b7165aa, 0x0a7dfc5c, 0x0afbb0a7, 0x1f0cd1e9, 0x1f8a9d12, 0x1e8604e4, 0x1e00481f, 0x1c9f3708, 0x1c197bf3, 0x1d15e205, 0x1d93aefe, 0x18ad50d0, 0x182b1c2b, 0x192785dd, 0x19a1c926, 0x1b3eb631, 0x1bb8faca, 0x1ab4633c, 0x1a322fc7, 0x10c99f60, 0x104fd39b, 0x11434a6d, 0x11c50696, 0x135a7981, 0x13dc357a, 0x12d0ac8c, 0x1256e077, 0x17681e59, 0x17ee52a2, 0x16e2cb54, 0x166487af, 0x14fbf8b8, 0x147db443, 0x15712db5, 0x15f7614e, 0x3e19a3d2, 0x3e9fef29, 0x3f9376df, 0x3f153a24, 0x3d8a4533, 0x3d0c09c8, 0x3c00903e, 0x3c86dcc5, 0x39b822eb, 0x393e6e10, 0x3832f7e6, 0x38b4bb1d, 0x3a2bc40a, 0x3aad88f1, 0x3ba11107, 0x3b275dfc, 0x31dced5b, 0x315aa1a0, 0x30563856, 0x30d074ad, 0x324f0bba, 0x32c94741, 0x33c5deb7, 0x3343924c, 0x367d6c62, 0x36fb2099, 0x37f7b96f, 0x3771f594, 0x35ee8a83, 0x3568c678, 0x34645f8e, 0x34e21375, 0x2115723b, 0x21933ec0, 0x209fa736, 0x2019ebcd, 0x228694da, 0x2200d821, 0x230c41d7, 0x238a0d2c, 0x26b4f302, 0x2632bff9, 0x273e260f, 0x27b86af4, 0x252715e3, 0x25a15918, 0x24adc0ee, 0x242b8c15, 0x2ed03cb2, 0x2e567049, 0x2f5ae9bf, 0x2fdca544, 0x2d43da53, 0x2dc596a8, 0x2cc90f5e, 0x2c4f43a5, 0x2971bd8b, 0x29f7f170, 0x28fb6886, 0x287d247d, 0x2ae25b6a, 0x2a641791, 0x2b688e67, 0x2beec29c, 0x7c3347a4, 0x7cb50b5f, 0x7db992a9, 0x7d3fde52, 0x7fa0a145, 0x7f26edbe, 0x7e2a7448, 0x7eac38b3, 0x7b92c69d, 0x7b148a66, 0x7a181390, 0x7a9e5f6b, 0x7801207c, 0x78876c87, 0x798bf571, 0x790db98a, 0x73f6092d, 0x737045d6, 0x727cdc20, 0x72fa90db, 0x7065efcc, 0x70e3a337, 0x71ef3ac1, 0x7169763a, 0x74578814, 0x74d1c4ef, 0x75dd5d19, 0x755b11e2, 0x77c46ef5, 0x7742220e, 0x764ebbf8, 0x76c8f703, 0x633f964d, 0x63b9dab6, 0x62b54340, 0x62330fbb, 0x60ac70ac, 0x602a3c57, 0x6126a5a1, 0x61a0e95a, 0x649e1774, 0x64185b8f, 0x6514c279, 0x65928e82, 0x670df195, 0x678bbd6e, 0x66872498, 0x66016863, 0x6cfad8c4, 0x6c7c943f, 0x6d700dc9, 0x6df64132, 0x6f693e25, 0x6fef72de, 0x6ee3eb28, 0x6e65a7d3, 0x6b5b59fd, 0x6bdd1506, 0x6ad18cf0, 0x6a57c00b, 0x68c8bf1c, 0x684ef3e7, 0x69426a11, 0x69c426ea, 0x422ae476, 0x42aca88d, 0x43a0317b, 0x43267d80, 0x41b90297, 0x413f4e6c, 0x4033d79a, 0x40b59b61, 0x458b654f, 0x450d29b4, 0x4401b042, 0x4487fcb9, 0x461883ae, 0x469ecf55, 0x479256a3, 0x47141a58, 0x4defaaff, 0x4d69e604, 0x4c657ff2, 0x4ce33309, 0x4e7c4c1e, 0x4efa00e5, 0x4ff69913, 0x4f70d5e8, 0x4a4e2bc6, 0x4ac8673d, 0x4bc4fecb, 0x4b42b230, 0x49ddcd27, 0x495b81dc, 0x4857182a, 0x48d154d1, 0x5d26359f, 0x5da07964, 0x5cace092, 0x5c2aac69, 0x5eb5d37e, 0x5e339f85, 0x5f3f0673, 0x5fb94a88, 0x5a87b4a6, 0x5a01f85d, 0x5b0d61ab, 0x5b8b2d50, 0x59145247, 0x59921ebc, 0x589e874a, 0x5818cbb1, 0x52e37b16, 0x526537ed, 0x5369ae1b, 0x53efe2e0, 0x51709df7, 0x51f6d10c, 0x50fa48fa, 0x507c0401, 0x5542fa2f, 0x55c4b6d4, 0x54c82f22, 0x544e63d9, 0x56d11cce, 0x56575035, 0x575bc9c3, 0x57dd8538];\n\nfunction createcrc24(input) {\n var crc = 0xB704CE;\n\n for (var index = 0; index < input.length; index++) {\n crc = crc << 8 ^ crc_table[(crc >> 16 ^ input[index]) & 0xff];\n }\n return crc & 0xffffff;\n}\n\n/**\n * Splits a message into two parts, the headers and the body. This is an internal function\n * @param {String} text OpenPGP armored message part\n * @returns {Object} An object with attribute \"headers\" containing the headers\n * and an attribute \"body\" containing the body.\n */\nfunction splitHeaders(text) {\n // empty line with whitespace characters\n var reEmptyLine = /^[ \\f\\r\\t\\u00a0\\u2000-\\u200a\\u202f\\u205f\\u3000]*\\n/m;\n var headers = '';\n var body = text;\n\n var matchResult = reEmptyLine.exec(text);\n\n if (matchResult !== null) {\n headers = text.slice(0, matchResult.index);\n body = text.slice(matchResult.index + matchResult[0].length);\n } else {\n throw new Error('Mandatory blank line missing between armor headers and armor data');\n }\n\n headers = headers.split('\\n');\n // remove empty entry\n headers.pop();\n\n return { headers: headers, body: body };\n}\n\n/**\n * Verify armored headers. RFC4880, section 6.3: \"OpenPGP should consider improperly formatted\n * Armor Headers to be corruption of the ASCII Armor.\"\n * @private\n * @param {Array<String>} headers Armor headers\n */\nfunction verifyHeaders(headers) {\n for (var i = 0; i < headers.length; i++) {\n if (!/^([^\\s:]|[^\\s:][^:]*[^\\s:]): .+$/.test(headers[i])) {\n throw new Error('Improperly formatted armor header: ' + headers[i]);\n }\n if (!/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(headers[i])) {\n _util2.default.print_debug_error(new Error('Unknown header: ' + headers[i]));\n }\n }\n}\n\n/**\n * Splits a message into two parts, the body and the checksum. This is an internal function\n * @param {String} text OpenPGP armored message part\n * @returns {Object} An object with attribute \"body\" containing the body\n * and an attribute \"checksum\" containing the checksum.\n */\nfunction splitChecksum(text) {\n text = text.trim();\n var body = text;\n var checksum = \"\";\n\n var lastEquals = text.lastIndexOf(\"=\");\n\n if (lastEquals >= 0 && lastEquals !== text.length - 1) {\n // '=' as the last char means no checksum\n body = text.slice(0, lastEquals);\n checksum = text.slice(lastEquals + 1).substr(0, 4);\n }\n\n return { body: body, checksum: checksum };\n}\n\n/**\n * DeArmor an OpenPGP armored message; verify the checksum and return\n * the encoded bytes\n * @param {String} text OpenPGP armored message\n * @returns {Object} An object with attribute \"text\" containing the message text,\n * an attribute \"data\" containing the bytes and \"type\" for the ASCII armor type\n * @static\n */\nfunction dearmor(text) {\n var reSplit = /^-----[^-]+-----$\\n/m;\n\n // trim string and remove trailing whitespace at end of lines\n text = text.trim().replace(/[\\t\\r ]+\\n/g, '\\n');\n\n var type = getType(text);\n\n text = text + \"\\n\";\n var splittext = text.split(reSplit);\n\n // IE has a bug in split with a re. If the pattern matches the beginning of the\n // string it doesn't create an empty array element 0. So we need to detect this\n // so we know the index of the data we are interested in.\n var indexBase = 1;\n\n var result = void 0;\n var checksum = void 0;\n var msg = void 0;\n\n if (text.search(reSplit) !== splittext[0].length) {\n indexBase = 0;\n }\n\n if (type !== 2) {\n msg = splitHeaders(splittext[indexBase]);\n var msg_sum = splitChecksum(msg.body);\n\n result = {\n data: _base2.default.decode(msg_sum.body),\n headers: msg.headers,\n type: type\n };\n\n checksum = msg_sum.checksum;\n } else {\n // Reverse dash-escaping for msg\n msg = splitHeaders(splittext[indexBase].replace(/^- /mg, ''));\n var sig = splitHeaders(splittext[indexBase + 1].replace(/^- /mg, ''));\n verifyHeaders(sig.headers);\n var sig_sum = splitChecksum(sig.body);\n\n result = {\n text: msg.body.replace(/\\n$/, '').replace(/\\n/g, \"\\r\\n\"),\n data: _base2.default.decode(sig_sum.body),\n headers: msg.headers,\n type: type\n };\n\n checksum = sig_sum.checksum;\n }\n\n if (!verifyCheckSum(result.data, checksum) && (checksum || _config2.default.checksum_required)) {\n // will NOT throw error if checksum is empty AND checksum is not required (GPG compatibility)\n throw new Error(\"Ascii armor integrity check on message failed: '\" + checksum + \"' should be '\" + getCheckSum(result.data) + \"'\");\n }\n\n verifyHeaders(result.headers);\n\n return result;\n}\n\n/**\n * Armor an OpenPGP binary packet block\n * @param {Integer} messagetype type of the message\n * @param body\n * @param {Integer} partindex\n * @param {Integer} parttotal\n * @param {String} customComment (optional) additional comment to add to the armored string\n * @returns {String} Armored text\n * @static\n */\nfunction armor(messagetype, body, partindex, parttotal, customComment) {\n var result = [];\n switch (messagetype) {\n case _enums2.default.armor.multipart_section:\n result.push(\"-----BEGIN PGP MESSAGE, PART \" + partindex + \"/\" + parttotal + \"-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP MESSAGE, PART \" + partindex + \"/\" + parttotal + \"-----\\r\\n\");\n break;\n case _enums2.default.armor.multipart_last:\n result.push(\"-----BEGIN PGP MESSAGE, PART \" + partindex + \"-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP MESSAGE, PART \" + partindex + \"-----\\r\\n\");\n break;\n case _enums2.default.armor.signed:\n result.push(\"\\r\\n-----BEGIN PGP SIGNED MESSAGE-----\\r\\n\");\n result.push(\"Hash: \" + body.hash + \"\\r\\n\\r\\n\");\n result.push(body.text.replace(/^-/mg, \"- -\"));\n result.push(\"\\r\\n-----BEGIN PGP SIGNATURE-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body.data));\n result.push(\"\\r\\n=\" + getCheckSum(body.data) + \"\\r\\n\");\n result.push(\"-----END PGP SIGNATURE-----\\r\\n\");\n break;\n case _enums2.default.armor.message:\n result.push(\"-----BEGIN PGP MESSAGE-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP MESSAGE-----\\r\\n\");\n break;\n case _enums2.default.armor.public_key:\n result.push(\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP PUBLIC KEY BLOCK-----\\r\\n\\r\\n\");\n break;\n case _enums2.default.armor.private_key:\n result.push(\"-----BEGIN PGP PRIVATE KEY BLOCK-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP PRIVATE KEY BLOCK-----\\r\\n\");\n break;\n case _enums2.default.armor.signature:\n result.push(\"-----BEGIN PGP SIGNATURE-----\\r\\n\");\n result.push(addheader(customComment));\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP SIGNATURE-----\\r\\n\");\n break;\n }\n\n return result.join('');\n}\n\nexports.default = {\n encode: armor,\n decode: dearmor\n};\n\n},{\"../config\":325,\"../enums.js\":359,\"../util\":398,\"./base64.js\":358}],358:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* OpenPGP radix-64/base64 string encoding/decoding\n * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de\n * version 1.0, check www.haneWIN.de for the latest version\n *\n * This software is provided as-is, without express or implied warranty.\n * Permission to use, copy, modify, distribute or sell this software, with or\n * without fee, for any purpose and by any individual or organization, is hereby\n * granted, provided that the above copyright notice and this paragraph appear\n * in all copies. Distribution as a part of an application or binary must\n * include the above copyright notice in the documentation and/or other materials\n * provided with the application or distribution.\n */\n\n/**\n * @module encoding/base64\n */\n\nvar b64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Standard radix-64\nvar b64u = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; // URL-safe radix-64\n\n/**\n * Convert binary array to radix-64\n * @param {Uint8Array} t Uint8Array to convert\n * @param {bool} u if true, output is URL-safe\n * @returns {string} radix-64 version of input string\n * @static\n */\nfunction s2r(t) {\n var u = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // TODO check btoa alternative\n var b64 = u ? b64u : b64s;\n var a = void 0;\n var c = void 0;\n var n = void 0;\n var r = [];\n var l = 0;\n var s = 0;\n var tl = t.length;\n\n for (n = 0; n < tl; n++) {\n c = t[n];\n if (s === 0) {\n r.push(b64.charAt(c >> 2 & 63));\n a = (c & 3) << 4;\n } else if (s === 1) {\n r.push(b64.charAt(a | c >> 4 & 15));\n a = (c & 15) << 2;\n } else if (s === 2) {\n r.push(b64.charAt(a | c >> 6 & 3));\n l += 1;\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n r.push(b64.charAt(c & 63));\n }\n l += 1;\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n\n s += 1;\n if (s === 3) {\n s = 0;\n }\n }\n if (s > 0) {\n r.push(b64.charAt(a));\n l += 1;\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n if (!u) {\n r.push('=');\n l += 1;\n }\n }\n if (s === 1 && !u) {\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n r.push('=');\n }\n return r.join('');\n}\n\n/**\n * Convert radix-64 to binary array\n * @param {String} t radix-64 string to convert\n * @param {bool} u if true, input is interpreted as URL-safe\n * @returns {Uint8Array} binary array version of input string\n * @static\n */\nfunction r2s(t, u) {\n // TODO check atob alternative\n var b64 = u ? b64u : b64s;\n var c = void 0;\n var n = void 0;\n var r = [];\n var s = 0;\n var a = 0;\n var tl = t.length;\n\n for (n = 0; n < tl; n++) {\n c = b64.indexOf(t.charAt(n));\n if (c >= 0) {\n if (s) {\n r.push(a | c >> 6 - s & 255);\n }\n s = s + 2 & 7;\n a = c << s & 255;\n }\n }\n return new Uint8Array(r);\n}\n\nexports.default = {\n encode: s2r,\n decode: r2s\n};\n\n},{}],359:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_(\"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _entries = _dereq_(\"babel-runtime/core-js/object/entries\");\n\nvar _entries2 = _interopRequireDefault(_entries);\n\nvar _symbol = _dereq_(\"babel-runtime/core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @module enums\n */\n\nvar byValue = (0, _symbol2.default)('byValue');\n\nexports.default = {\n\n /** Maps curve names under various standards to one\n * @see {@link https://wiki.gnupg.org/ECC|ECC - GnuPG wiki}\n * @enum {String}\n * @readonly\n */\n curve: {\n /** NIST P-256 Curve */\n \"p256\": \"p256\",\n \"P-256\": \"p256\",\n \"secp256r1\": \"p256\",\n \"prime256v1\": \"p256\",\n \"1.2.840.10045.3.1.7\": \"p256\",\n \"2a8648ce3d030107\": \"p256\",\n \"2A8648CE3D030107\": \"p256\",\n\n /** NIST P-384 Curve */\n \"p384\": \"p384\",\n \"P-384\": \"p384\",\n \"secp384r1\": \"p384\",\n \"1.3.132.0.34\": \"p384\",\n \"2b81040022\": \"p384\",\n \"2B81040022\": \"p384\",\n\n /** NIST P-521 Curve */\n \"p521\": \"p521\",\n \"P-521\": \"p521\",\n \"secp521r1\": \"p521\",\n \"1.3.132.0.35\": \"p521\",\n \"2b81040023\": \"p521\",\n \"2B81040023\": \"p521\",\n\n /** SECG SECP256k1 Curve */\n \"secp256k1\": \"secp256k1\",\n \"1.3.132.0.10\": \"secp256k1\",\n \"2b8104000a\": \"secp256k1\",\n \"2B8104000A\": \"secp256k1\",\n\n /** Ed25519 */\n \"ED25519\": \"ed25519\",\n \"ed25519\": \"ed25519\",\n \"Ed25519\": \"ed25519\",\n \"1.3.6.1.4.1.11591.15.1\": \"ed25519\",\n \"2b06010401da470f01\": \"ed25519\",\n \"2B06010401DA470F01\": \"ed25519\",\n\n /** Curve25519 */\n \"X25519\": \"curve25519\",\n \"cv25519\": \"curve25519\",\n \"curve25519\": \"curve25519\",\n \"Curve25519\": \"curve25519\",\n \"1.3.6.1.4.1.3029.1.5.1\": \"curve25519\",\n \"2b060104019755010501\": \"curve25519\",\n \"2B060104019755010501\": \"curve25519\",\n\n /** BrainpoolP256r1 Curve */\n \"brainpoolP256r1\": \"brainpoolP256r1\",\n \"1.3.36.3.3.2.8.1.1.7\": \"brainpoolP256r1\",\n \"2b2403030208010107\": \"brainpoolP256r1\",\n \"2B2403030208010107\": \"brainpoolP256r1\",\n\n /** BrainpoolP384r1 Curve */\n \"brainpoolP384r1\": \"brainpoolP384r1\",\n \"1.3.36.3.3.2.8.1.1.11\": \"brainpoolP384r1\",\n \"2b240303020801010b\": \"brainpoolP384r1\",\n \"2B240303020801010B\": \"brainpoolP384r1\",\n\n /** BrainpoolP512r1 Curve */\n \"brainpoolP512r1\": \"brainpoolP512r1\",\n \"1.3.36.3.3.2.8.1.1.13\": \"brainpoolP512r1\",\n \"2b240303020801010d\": \"brainpoolP512r1\",\n \"2B240303020801010D\": \"brainpoolP512r1\"\n },\n\n /** A string to key specifier type\n * @enum {Integer}\n * @readonly\n */\n s2k: {\n simple: 0,\n salted: 1,\n iterated: 3,\n gnu: 101\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-9.1|RFC4880bis-04, section 9.1}\n * @enum {Integer}\n * @readonly\n */\n publicKey: {\n /** RSA (Encrypt or Sign) [HAC] */\n rsa_encrypt_sign: 1,\n /** RSA (Encrypt only) [HAC] */\n rsa_encrypt: 2,\n /** RSA (Sign only) [HAC] */\n rsa_sign: 3,\n /** Elgamal (Encrypt only) [ELGAMAL] [HAC] */\n elgamal: 16,\n /** DSA (Sign only) [FIPS186] [HAC] */\n dsa: 17,\n /** ECDH (Encrypt only) [RFC6637] */\n ecdh: 18,\n /** ECDSA (Sign only) [RFC6637] */\n ecdsa: 19,\n /** EdDSA (Sign only)\n * [{@link https://tools.ietf.org/html/draft-koch-eddsa-for-openpgp-04|Draft RFC}] */\n eddsa: 22,\n /** Reserved for AEDH */\n aedh: 23,\n /** Reserved for AEDSA */\n aedsa: 24\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC4880, section 9.2}\n * @enum {Integer}\n * @readonly\n */\n symmetric: {\n plaintext: 0,\n /** Not implemented! */\n idea: 1,\n tripledes: 2,\n cast5: 3,\n blowfish: 4,\n aes128: 7,\n aes192: 8,\n aes256: 9,\n twofish: 10\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.3|RFC4880, section 9.3}\n * @enum {Integer}\n * @readonly\n */\n compression: {\n uncompressed: 0,\n /** RFC1951 */\n zip: 1,\n /** RFC1950 */\n zlib: 2,\n bzip2: 3\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC4880, section 9.4}\n * @enum {Integer}\n * @readonly\n */\n hash: {\n md5: 1,\n sha1: 2,\n ripemd: 3,\n sha256: 8,\n sha384: 9,\n sha512: 10,\n sha224: 11\n },\n\n /** A list of hash names as accepted by webCrypto functions.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest|Parameters, algo}\n * @enum {String}\n */\n webHash: {\n 'SHA-1': 2,\n 'SHA-256': 8,\n 'SHA-384': 9,\n 'SHA-512': 10\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-9.6|RFC4880bis-04, section 9.6}\n * @enum {Integer}\n * @readonly\n */\n aead: {\n eax: 1,\n ocb: 2,\n experimental_gcm: 100 // Private algorithm\n },\n\n /** A list of packet types and numeric tags associated with them.\n * @enum {Integer}\n * @readonly\n */\n packet: {\n publicKeyEncryptedSessionKey: 1,\n signature: 2,\n symEncryptedSessionKey: 3,\n onePassSignature: 4,\n secretKey: 5,\n publicKey: 6,\n secretSubkey: 7,\n compressed: 8,\n symmetricallyEncrypted: 9,\n marker: 10,\n literal: 11,\n trust: 12,\n userid: 13,\n publicSubkey: 14,\n userAttribute: 17,\n symEncryptedIntegrityProtected: 18,\n modificationDetectionCode: 19,\n symEncryptedAEADProtected: 20 // see IETF draft: https://tools.ietf.org/html/draft-ford-openpgp-format-00#section-2.1\n },\n\n /** Data types in the literal packet\n * @enum {Integer}\n * @readonly\n */\n literal: {\n /** Binary data 'b' */\n binary: 'b'.charCodeAt(),\n /** Text data 't' */\n text: 't'.charCodeAt(),\n /** Utf8 data 'u' */\n utf8: 'u'.charCodeAt(),\n /** MIME message body part 'm' */\n mime: 'm'.charCodeAt()\n },\n\n /** One pass signature packet type\n * @enum {Integer}\n * @readonly\n */\n signature: {\n /** 0x00: Signature of a binary document. */\n binary: 0,\n /** 0x01: Signature of a canonical text document.\n *\n * Canonicalyzing the document by converting line endings. */\n text: 1,\n /** 0x02: Standalone signature.\n *\n * This signature is a signature of only its own subpacket contents.\n * It is calculated identically to a signature over a zero-lengh\n * binary document. Note that it doesn't make sense to have a V3\n * standalone signature. */\n standalone: 2,\n /** 0x10: Generic certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification does not make any particular\n * assertion as to how well the certifier has checked that the owner\n * of the key is in fact the person described by the User ID. */\n cert_generic: 16,\n /** 0x11: Persona certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has not done any verification of\n * the claim that the owner of this key is the User ID specified. */\n cert_persona: 17,\n /** 0x12: Casual certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has done some casual\n * verification of the claim of identity. */\n cert_casual: 18,\n /** 0x13: Positive certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has done substantial\n * verification of the claim of identity.\n *\n * Most OpenPGP implementations make their \"key signatures\" as 0x10\n * certifications. Some implementations can issue 0x11-0x13\n * certifications, but few differentiate between the types. */\n cert_positive: 19,\n /** 0x30: Certification revocation signature\n *\n * This signature revokes an earlier User ID certification signature\n * (signature class 0x10 through 0x13) or direct-key signature\n * (0x1F). It should be issued by the same key that issued the\n * revoked signature or an authorized revocation key. The signature\n * is computed over the same data as the certificate that it\n * revokes, and should have a later creation date than that\n * certificate. */\n cert_revocation: 48,\n /** 0x18: Subkey Binding Signature\n *\n * This signature is a statement by the top-level signing key that\n * indicates that it owns the subkey. This signature is calculated\n * directly on the primary key and subkey, and not on any User ID or\n * other packets. A signature that binds a signing subkey MUST have\n * an Embedded Signature subpacket in this binding signature that\n * contains a 0x19 signature made by the signing subkey on the\n * primary key and subkey. */\n subkey_binding: 24,\n /** 0x19: Primary Key Binding Signature\n *\n * This signature is a statement by a signing subkey, indicating\n * that it is owned by the primary key and subkey. This signature\n * is calculated the same way as a 0x18 signature: directly on the\n * primary key and subkey, and not on any User ID or other packets.\n *\n * When a signature is made over a key, the hash data starts with the\n * octet 0x99, followed by a two-octet length of the key, and then body\n * of the key packet. (Note that this is an old-style packet header for\n * a key packet with two-octet length.) A subkey binding signature\n * (type 0x18) or primary key binding signature (type 0x19) then hashes\n * the subkey using the same format as the main key (also using 0x99 as\n * the first octet). */\n key_binding: 25,\n /** 0x1F: Signature directly on a key\n *\n * This signature is calculated directly on a key. It binds the\n * information in the Signature subpackets to the key, and is\n * appropriate to be used for subpackets that provide information\n * about the key, such as the Revocation Key subpacket. It is also\n * appropriate for statements that non-self certifiers want to make\n * about the key itself, rather than the binding between a key and a\n * name. */\n key: 31,\n /** 0x20: Key revocation signature\n *\n * The signature is calculated directly on the key being revoked. A\n * revoked key is not to be used. Only revocation signatures by the\n * key being revoked, or by an authorized revocation key, should be\n * considered valid revocation signatures.a */\n key_revocation: 32,\n /** 0x28: Subkey revocation signature\n *\n * The signature is calculated directly on the subkey being revoked.\n * A revoked subkey is not to be used. Only revocation signatures\n * by the top-level signature key that is bound to this subkey, or\n * by an authorized revocation key, should be considered valid\n * revocation signatures.\n *\n * Key revocation signatures (types 0x20 and 0x28)\n * hash only the key being revoked. */\n subkey_revocation: 40,\n /** 0x40: Timestamp signature.\n * This signature is only meaningful for the timestamp contained in\n * it. */\n timestamp: 64,\n /** 0x50: Third-Party Confirmation signature.\n *\n * This signature is a signature over some other OpenPGP Signature\n * packet(s). It is analogous to a notary seal on the signed data.\n * A third-party signature SHOULD include Signature Target\n * subpacket(s) to give easy identification. Note that we really do\n * mean SHOULD. There are plausible uses for this (such as a blind\n * party that only sees the signature, not the key or source\n * document) that cannot include a target subpacket. */\n third_party: 80\n },\n\n /** Signature subpacket type\n * @enum {Integer}\n * @readonly\n */\n signatureSubpacket: {\n signature_creation_time: 2,\n signature_expiration_time: 3,\n exportable_certification: 4,\n trust_signature: 5,\n regular_expression: 6,\n revocable: 7,\n key_expiration_time: 9,\n placeholder_backwards_compatibility: 10,\n preferred_symmetric_algorithms: 11,\n revocation_key: 12,\n issuer: 16,\n notation_data: 20,\n preferred_hash_algorithms: 21,\n preferred_compression_algorithms: 22,\n key_server_preferences: 23,\n preferred_key_server: 24,\n primary_user_id: 25,\n policy_uri: 26,\n key_flags: 27,\n signers_user_id: 28,\n reason_for_revocation: 29,\n features: 30,\n signature_target: 31,\n embedded_signature: 32,\n issuer_fingerprint: 33,\n preferred_aead_algorithms: 34\n },\n\n /** Key flags\n * @enum {Integer}\n * @readonly\n */\n keyFlags: {\n /** 0x01 - This key may be used to certify other keys. */\n certify_keys: 1,\n /** 0x02 - This key may be used to sign data. */\n sign_data: 2,\n /** 0x04 - This key may be used to encrypt communications. */\n encrypt_communication: 4,\n /** 0x08 - This key may be used to encrypt storage. */\n encrypt_storage: 8,\n /** 0x10 - The private component of this key may have been split\n * by a secret-sharing mechanism. */\n split_private_key: 16,\n /** 0x20 - This key may be used for authentication. */\n authentication: 32,\n /** 0x80 - The private component of this key may be in the\n * possession of more than one person. */\n shared_private_key: 128\n },\n\n /** Key status\n * @enum {Integer}\n * @readonly\n */\n keyStatus: {\n invalid: 0,\n expired: 1,\n revoked: 2,\n valid: 3,\n no_self_cert: 4\n },\n\n /** Armor type\n * @enum {Integer}\n * @readonly\n */\n armor: {\n multipart_section: 0,\n multipart_last: 1,\n signed: 2,\n message: 3,\n public_key: 4,\n private_key: 5,\n signature: 6\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.23|RFC4880, section 5.2.3.23}\n * @enum {Integer}\n * @readonly\n */\n reasonForRevocation: {\n /** No reason specified (key revocations or cert revocations) */\n no_reason: 0,\n /** Key is superseded (key revocations) */\n key_superseded: 1,\n /** Key material has been compromised (key revocations) */\n key_compromised: 2,\n /** Key is retired and no longer used (key revocations) */\n key_retired: 3,\n /** User ID information is no longer valid (cert revocations) */\n userid_invalid: 32\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.2.3.25|RFC4880bis-04, section 5.2.3.25}\n * @enum {Integer}\n * @readonly\n */\n features: {\n /** 0x01 - Modification Detection (packets 18 and 19) */\n modification_detection: 1,\n /** 0x02 - AEAD Encrypted Data Packet (packet 20) and version 5\n * Symmetric-Key Encrypted Session Key Packets (packet 3) */\n aead: 2,\n /** 0x04 - Version 5 Public-Key Packet format and corresponding new\n * fingerprint format */\n v5_keys: 4\n },\n\n /** Asserts validity and converts from string/integer to integer. */\n write: function write(type, e) {\n if (typeof e === 'number') {\n e = this.read(type, e);\n }\n\n if (type[e] !== undefined) {\n return type[e];\n }\n\n throw new Error('Invalid enum value.');\n },\n\n /** Converts from an integer to string. */\n read: function read(type, e) {\n if (!type[byValue]) {\n type[byValue] = [];\n (0, _entries2.default)(type).forEach(function (_ref) {\n var _ref2 = (0, _slicedToArray3.default)(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n type[byValue][value] = key;\n });\n }\n\n if (type[byValue][e] !== undefined) {\n return type[byValue][e];\n }\n\n throw new Error('Invalid enum value.');\n }\n\n};\n\n},{\"babel-runtime/core-js/object/entries\":27,\"babel-runtime/core-js/symbol\":33,\"babel-runtime/helpers/slicedToArray\":40}],360:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initialize the HKP client and configure it with the key server url and fetch function.\n * @constructor\n * @param {String} keyServerBaseUrl (optional) The HKP key server base url including\n * the protocol to use e.g. https://pgp.mit.edu\n */\nfunction HKP(keyServerBaseUrl) {\n this._baseUrl = keyServerBaseUrl || _config2.default.keyserver;\n this._fetch = typeof window !== 'undefined' ? window.fetch : _dereq_('node-fetch');\n}\n\n/**\n * Search for a public key on the key server either by key ID or part of the user ID.\n * @param {String} options.keyID The long public key ID.\n * @param {String} options.query This can be any part of the key user ID such as name\n * or email address.\n * @returns {Promise<String>} The ascii armored public key.\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This class implements a client for the OpenPGP HTTP Keyserver Protocol (HKP)\n * in order to lookup and upload keys on standard public key servers.\n * @module hkp\n */\n\nHKP.prototype.lookup = function (options) {\n var uri = this._baseUrl + '/pks/lookup?op=get&options=mr&search=';\n var fetch = this._fetch;\n\n if (options.keyId) {\n uri += '0x' + encodeURIComponent(options.keyId);\n } else if (options.query) {\n uri += encodeURIComponent(options.query);\n } else {\n throw new Error('You must provide a query parameter!');\n }\n\n return fetch(uri).then(function (response) {\n if (response.status === 200) {\n return response.text();\n }\n }).then(function (publicKeyArmored) {\n if (!publicKeyArmored || publicKeyArmored.indexOf('-----END PGP PUBLIC KEY BLOCK-----') < 0) {\n return;\n }\n return publicKeyArmored.trim();\n });\n};\n\n/**\n * Upload a public key to the server.\n * @param {String} publicKeyArmored An ascii armored public key to be uploaded.\n * @returns {Promise}\n * @async\n */\nHKP.prototype.upload = function (publicKeyArmored) {\n var uri = this._baseUrl + '/pks/add';\n var fetch = this._fetch;\n\n return fetch(uri, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: 'keytext=' + encodeURIComponent(publicKeyArmored)\n });\n};\n\nexports.default = HKP;\n\n},{\"./config\":325,\"node-fetch\":\"node-fetch\"}],361:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.WKD = exports.HKP = exports.AsyncProxy = exports.Keyring = exports.crypto = exports.config = exports.enums = exports.armor = exports.OID = exports.KDFParams = exports.ECDHSymmetricKey = exports.Keyid = exports.S2K = exports.MPI = exports.packet = exports.util = exports.cleartext = exports.message = exports.signature = exports.key = exports.destroyWorker = exports.getWorker = exports.initWorker = exports.decryptSessionKeys = exports.encryptSessionKey = exports.decryptKey = exports.revokeKey = exports.reformatKey = exports.generateKey = exports.verify = exports.sign = exports.decrypt = exports.encrypt = undefined;\n\nvar _openpgp = _dereq_('./openpgp');\n\nObject.defineProperty(exports, 'encrypt', {\n enumerable: true,\n get: function get() {\n return _openpgp.encrypt;\n }\n});\nObject.defineProperty(exports, 'decrypt', {\n enumerable: true,\n get: function get() {\n return _openpgp.decrypt;\n }\n});\nObject.defineProperty(exports, 'sign', {\n enumerable: true,\n get: function get() {\n return _openpgp.sign;\n }\n});\nObject.defineProperty(exports, 'verify', {\n enumerable: true,\n get: function get() {\n return _openpgp.verify;\n }\n});\nObject.defineProperty(exports, 'generateKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.generateKey;\n }\n});\nObject.defineProperty(exports, 'reformatKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.reformatKey;\n }\n});\nObject.defineProperty(exports, 'revokeKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.revokeKey;\n }\n});\nObject.defineProperty(exports, 'decryptKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.decryptKey;\n }\n});\nObject.defineProperty(exports, 'encryptSessionKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.encryptSessionKey;\n }\n});\nObject.defineProperty(exports, 'decryptSessionKeys', {\n enumerable: true,\n get: function get() {\n return _openpgp.decryptSessionKeys;\n }\n});\nObject.defineProperty(exports, 'initWorker', {\n enumerable: true,\n get: function get() {\n return _openpgp.initWorker;\n }\n});\nObject.defineProperty(exports, 'getWorker', {\n enumerable: true,\n get: function get() {\n return _openpgp.getWorker;\n }\n});\nObject.defineProperty(exports, 'destroyWorker', {\n enumerable: true,\n get: function get() {\n return _openpgp.destroyWorker;\n }\n});\n\nvar _util = _dereq_('./util');\n\nObject.defineProperty(exports, 'util', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_util).default;\n }\n});\n\nvar _packet = _dereq_('./packet');\n\nObject.defineProperty(exports, 'packet', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_packet).default;\n }\n});\n\nvar _mpi = _dereq_('./type/mpi');\n\nObject.defineProperty(exports, 'MPI', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_mpi).default;\n }\n});\n\nvar _s2k = _dereq_('./type/s2k');\n\nObject.defineProperty(exports, 'S2K', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_s2k).default;\n }\n});\n\nvar _keyid = _dereq_('./type/keyid');\n\nObject.defineProperty(exports, 'Keyid', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_keyid).default;\n }\n});\n\nvar _ecdh_symkey = _dereq_('./type/ecdh_symkey');\n\nObject.defineProperty(exports, 'ECDHSymmetricKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_ecdh_symkey).default;\n }\n});\n\nvar _kdf_params = _dereq_('./type/kdf_params');\n\nObject.defineProperty(exports, 'KDFParams', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_kdf_params).default;\n }\n});\n\nvar _oid = _dereq_('./type/oid');\n\nObject.defineProperty(exports, 'OID', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_oid).default;\n }\n});\n\nvar _armor = _dereq_('./encoding/armor');\n\nObject.defineProperty(exports, 'armor', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_armor).default;\n }\n});\n\nvar _enums = _dereq_('./enums');\n\nObject.defineProperty(exports, 'enums', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_enums).default;\n }\n});\n\nvar _config = _dereq_('./config/config');\n\nObject.defineProperty(exports, 'config', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_config).default;\n }\n});\n\nvar _crypto = _dereq_('./crypto');\n\nObject.defineProperty(exports, 'crypto', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_crypto).default;\n }\n});\n\nvar _keyring = _dereq_('./keyring');\n\nObject.defineProperty(exports, 'Keyring', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_keyring).default;\n }\n});\n\nvar _async_proxy = _dereq_('./worker/async_proxy');\n\nObject.defineProperty(exports, 'AsyncProxy', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_async_proxy).default;\n }\n});\n\nvar _hkp = _dereq_('./hkp');\n\nObject.defineProperty(exports, 'HKP', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_hkp).default;\n }\n});\n\nvar _wkd = _dereq_('./wkd');\n\nObject.defineProperty(exports, 'WKD', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_wkd).default;\n }\n});\n\nvar openpgp = _interopRequireWildcard(_openpgp);\n\nvar _key = _dereq_('./key');\n\nvar keyMod = _interopRequireWildcard(_key);\n\nvar _signature = _dereq_('./signature');\n\nvar signatureMod = _interopRequireWildcard(_signature);\n\nvar _message = _dereq_('./message');\n\nvar messageMod = _interopRequireWildcard(_message);\n\nvar _cleartext = _dereq_('./cleartext');\n\nvar cleartextMod = _interopRequireWildcard(_cleartext);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = openpgp;\n\n/**\n * Export each high level api function separately.\n * Usage:\n *\n * import { encryptMessage } from 'openpgp.js'\n * encryptMessage(keys, text)\n */\n/* eslint-disable import/newline-after-import, import/first */\n\n/**\n * Export high level api as default.\n * Usage:\n *\n * import openpgp from 'openpgp.js'\n * openpgp.encryptMessage(keys, text)\n */\n\n\n/**\n * @see module:key\n * @name module:openpgp.key\n */\n\nvar key = exports.key = keyMod;\n\n/**\n * @see module:signature\n * @name module:openpgp.signature\n */\nvar signature = exports.signature = signatureMod;\n\n/**\n * @see module:message\n * @name module:openpgp.message\n */\nvar message = exports.message = messageMod;\n\n/**\n * @see module:cleartext\n * @name module:openpgp.cleartext\n */\nvar cleartext = exports.cleartext = cleartextMod;\n\n/**\n * @see module:util\n * @name module:openpgp.util\n */\n\n},{\"./cleartext\":322,\"./config/config\":324,\"./crypto\":340,\"./encoding/armor\":357,\"./enums\":359,\"./hkp\":360,\"./key\":362,\"./keyring\":363,\"./message\":366,\"./openpgp\":367,\"./packet\":371,\"./signature\":391,\"./type/ecdh_symkey\":392,\"./type/kdf_params\":393,\"./type/keyid\":394,\"./type/mpi\":395,\"./type/oid\":396,\"./type/s2k\":397,\"./util\":398,\"./wkd\":399,\"./worker/async_proxy\":400}],362:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isAeadSupported = exports.getPreferredAlgo = exports.getPreferredHashAlgo = exports.reformat = exports.generate = exports.createSignaturePacket = undefined;\n\nvar _values = _dereq_('babel-runtime/core-js/object/values');\n\nvar _values2 = _interopRequireDefault(_values);\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Merges signatures from source[attr] to dest[attr]\n * @private\n * @param {Object} source\n * @param {Object} dest\n * @param {String} attr\n * @param {Function} checkFn optional, signature only merged if true\n */\nvar mergeSignatures = function () {\n var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18(source, dest, attr, checkFn) {\n return _regenerator2.default.wrap(function _callee18$(_context18) {\n while (1) {\n switch (_context18.prev = _context18.next) {\n case 0:\n source = source[attr];\n\n if (!source) {\n _context18.next = 8;\n break;\n }\n\n if (dest[attr].length) {\n _context18.next = 6;\n break;\n }\n\n dest[attr] = source;\n _context18.next = 8;\n break;\n\n case 6:\n _context18.next = 8;\n return _promise2.default.all(source.map(function () {\n var _ref20 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(sourceSig) {\n return _regenerator2.default.wrap(function _callee17$(_context17) {\n while (1) {\n switch (_context17.prev = _context17.next) {\n case 0:\n _context17.t1 = !sourceSig.isExpired();\n\n if (!_context17.t1) {\n _context17.next = 8;\n break;\n }\n\n _context17.t2 = !checkFn;\n\n if (_context17.t2) {\n _context17.next = 7;\n break;\n }\n\n _context17.next = 6;\n return checkFn(sourceSig);\n\n case 6:\n _context17.t2 = _context17.sent;\n\n case 7:\n _context17.t1 = _context17.t2;\n\n case 8:\n _context17.t0 = _context17.t1;\n\n if (!_context17.t0) {\n _context17.next = 11;\n break;\n }\n\n _context17.t0 = !dest[attr].some(function (destSig) {\n return _util2.default.equalsUint8Array(destSig.signature, sourceSig.signature);\n });\n\n case 11:\n if (!_context17.t0) {\n _context17.next = 13;\n break;\n }\n\n dest[attr].push(sourceSig);\n\n case 13:\n case 'end':\n return _context17.stop();\n }\n }\n }, _callee17, this);\n }));\n\n return function (_x36) {\n return _ref20.apply(this, arguments);\n };\n }()));\n\n case 8:\n case 'end':\n return _context18.stop();\n }\n }\n }, _callee18, this);\n }));\n\n return function mergeSignatures(_x32, _x33, _x34, _x35) {\n return _ref19.apply(this, arguments);\n };\n}();\n\n/**\n * Revokes the key\n * @param {Object} reasonForRevocation optional, object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n * @param {String} reasonForRevocation.string optional, string explaining the reason for revocation\n * @param {Date} date optional, override the creationtime of the revocation signature\n * @return {module:key~Key} new key with revocation signature\n */\n\n\n/**\n * Create signature packet\n * @param {Object} dataToSign Contains packets to be signed\n * @param {module:packet.SecretKey|\n * module:packet.SecretSubkey} signingKeyPacket secret key packet for signing\n * @param {Object} signatureProperties (optional) properties to write on the signature packet before signing\n * @param {Date} date (optional) override the creationtime of the signature\n * @param {Object} userId (optional) user ID\n * @return {module:packet/signature} signature packet\n */\nvar createSignaturePacket = exports.createSignaturePacket = function () {\n var _ref34 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee29(dataToSign, privateKey, signingKeyPacket, signatureProperties, date, userId) {\n var signaturePacket;\n return _regenerator2.default.wrap(function _callee29$(_context29) {\n while (1) {\n switch (_context29.prev = _context29.next) {\n case 0:\n if (signingKeyPacket.isDecrypted) {\n _context29.next = 2;\n break;\n }\n\n throw new Error('Private key is not decrypted.');\n\n case 2:\n signaturePacket = new _packet2.default.Signature(date);\n\n (0, _assign2.default)(signaturePacket, signatureProperties);\n signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;\n _context29.next = 7;\n return getPreferredHashAlgo(privateKey, signingKeyPacket, date, userId);\n\n case 7:\n signaturePacket.hashAlgorithm = _context29.sent;\n _context29.next = 10;\n return signaturePacket.sign(signingKeyPacket, dataToSign);\n\n case 10:\n return _context29.abrupt('return', signaturePacket);\n\n case 11:\n case 'end':\n return _context29.stop();\n }\n }\n }, _callee29, this);\n }));\n\n return function createSignaturePacket(_x52, _x53, _x54, _x55, _x56, _x57) {\n return _ref34.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies the user certificate\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {module:packet.Signature} certificate A certificate of this user\n * @param {Array<module:key.Key>} keys Array of keys to verify certificate signatures\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<module:enums.keyStatus>} status of the certificate\n * @async\n */\n\n\n/**\n * Generates a new OpenPGP key. Supports RSA and ECC keys.\n * Primary and subkey will be of same type.\n * @param {module:enums.publicKey} [options.keyType=module:enums.publicKey.rsa_encrypt_sign]\n * To indicate what type of key to make.\n * RSA is 1. See {@link https://tools.ietf.org/html/rfc4880#section-9.1}\n * @param {Integer} options.numBits number of bits for the key creation.\n * @param {String|Array<String>} options.userIds\n * Assumes already in form of \"User Name <username@email.com>\"\n * If array is used, the first userId is set as primary user Id\n * @param {String} options.passphrase The passphrase used to encrypt the resulting private key\n * @param {Number} [options.keyExpirationTime=0]\n * The number of seconds after the key creation time that the key expires\n * @param {String} curve (optional) elliptic curve for ECC keys\n * @param {Date} date Override the creation date of the key and the key signatures\n * @param {Array<Object>} subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * sign parameter defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @returns {Promise<module:key.Key>}\n * @async\n * @static\n */\nvar generate = exports.generate = function () {\n var _ref49 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee45(options) {\n var generateSecretKey = function () {\n var _ref50 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee43(options) {\n var secretKeyPacket;\n return _regenerator2.default.wrap(function _callee43$(_context43) {\n while (1) {\n switch (_context43.prev = _context43.next) {\n case 0:\n secretKeyPacket = new _packet2.default.SecretKey(options.date);\n\n secretKeyPacket.packets = null;\n secretKeyPacket.algorithm = _enums2.default.read(_enums2.default.publicKey, options.algorithm);\n _context43.next = 5;\n return secretKeyPacket.generate(options.numBits, options.curve);\n\n case 5:\n return _context43.abrupt('return', secretKeyPacket);\n\n case 6:\n case 'end':\n return _context43.stop();\n }\n }\n }, _callee43, this);\n }));\n\n return function generateSecretKey(_x86) {\n return _ref50.apply(this, arguments);\n };\n }();\n\n var generateSecretSubkey = function () {\n var _ref51 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee44(options) {\n var secretSubkeyPacket;\n return _regenerator2.default.wrap(function _callee44$(_context44) {\n while (1) {\n switch (_context44.prev = _context44.next) {\n case 0:\n secretSubkeyPacket = new _packet2.default.SecretSubkey(options.date);\n\n secretSubkeyPacket.packets = null;\n secretSubkeyPacket.algorithm = _enums2.default.read(_enums2.default.publicKey, options.algorithm);\n _context44.next = 5;\n return secretSubkeyPacket.generate(options.numBits, options.curve);\n\n case 5:\n return _context44.abrupt('return', secretSubkeyPacket);\n\n case 6:\n case 'end':\n return _context44.stop();\n }\n }\n }, _callee44, this);\n }));\n\n return function generateSecretSubkey(_x87) {\n return _ref51.apply(this, arguments);\n };\n }();\n\n var promises, sanitizeKeyOptions;\n return _regenerator2.default.wrap(function _callee45$(_context45) {\n while (1) {\n switch (_context45.prev = _context45.next) {\n case 0:\n sanitizeKeyOptions = function sanitizeKeyOptions(options) {\n var subkeyDefaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n options.curve = options.curve || subkeyDefaults.curve;\n options.numBits = options.numBits || subkeyDefaults.numBits;\n options.keyExpirationTime = options.keyExpirationTime !== undefined ? options.keyExpirationTime : subkeyDefaults.keyExpirationTime;\n options.passphrase = _util2.default.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n options.date = options.date || subkeyDefaults.date;\n\n options.sign = options.sign || false;\n\n if (options.curve) {\n try {\n options.curve = _enums2.default.write(_enums2.default.curve, options.curve);\n } catch (e) {\n throw new Error('Not valid curve.');\n }\n if (options.curve === _enums2.default.curve.ed25519 || options.curve === _enums2.default.curve.curve25519) {\n if (options.sign) {\n options.algorithm = _enums2.default.publicKey.eddsa;\n options.curve = _enums2.default.curve.ed25519;\n } else {\n options.algorithm = _enums2.default.publicKey.ecdh;\n options.curve = _enums2.default.curve.curve25519;\n }\n } else {\n if (options.sign) {\n options.algorithm = _enums2.default.publicKey.ecdsa;\n } else {\n options.algorithm = _enums2.default.publicKey.ecdh;\n }\n }\n } else if (options.numBits) {\n options.algorithm = _enums2.default.publicKey.rsa_encrypt_sign;\n } else {\n throw new Error('Unrecognized key type');\n }\n return options;\n };\n\n options.sign = true; // primary key is always a signing key\n options = sanitizeKeyOptions(options);\n options.subkeys = options.subkeys.map(function (subkey, index) {\n return sanitizeKeyOptions(options.subkeys[index], options);\n });\n\n promises = [generateSecretKey(options)];\n\n promises = promises.concat(options.subkeys.map(generateSecretSubkey));\n return _context45.abrupt('return', _promise2.default.all(promises).then(function (packets) {\n return wrapKeyObject(packets[0], packets.slice(1), options);\n }));\n\n case 7:\n case 'end':\n return _context45.stop();\n }\n }\n }, _callee45, this);\n }));\n\n return function generate(_x84) {\n return _ref49.apply(this, arguments);\n };\n}();\n\n/**\n * Reformats and signs an OpenPGP key with a given User ID. Currently only supports RSA keys.\n * @param {module:key.Key} options.privateKey The private key to reformat\n * @param {module:enums.publicKey} [options.keyType=module:enums.publicKey.rsa_encrypt_sign]\n * @param {String|Array<String>} options.userIds\n * Assumes already in form of \"User Name <username@email.com>\"\n * If array is used, the first userId is set as primary user Id\n * @param {String} options.passphrase The passphrase used to encrypt the resulting private key\n * @param {Number} [options.keyExpirationTime=0]\n * The number of seconds after the key creation time that the key expires\n * @param {Date} date Override the creation date of the key and the key signatures\n * @param {Array<Object>} subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n *\n * @param {Boolean} [options.revoked=false] Whether the key should include a revocation signature\n * @returns {Promise<module:key.Key>}\n * @async\n * @static\n */\n\n\nvar reformat = exports.reformat = function () {\n var _ref52 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee46(options) {\n var isDecrypted, packetlist, secretKeyPacket, secretSubkeyPackets, i, sanitizeKeyOptions;\n return _regenerator2.default.wrap(function _callee46$(_context46) {\n while (1) {\n switch (_context46.prev = _context46.next) {\n case 0:\n sanitizeKeyOptions = function sanitizeKeyOptions(options) {\n var subkeyDefaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n options.keyExpirationTime = options.keyExpirationTime || subkeyDefaults.keyExpirationTime;\n options.passphrase = _util2.default.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n options.date = options.date || subkeyDefaults.date;\n\n return options;\n };\n\n options = sanitizeKeyOptions(options);\n\n _context46.prev = 2;\n isDecrypted = options.privateKey.getKeyPackets().every(function (keyPacket) {\n return keyPacket.isDecrypted;\n });\n\n if (isDecrypted) {\n _context46.next = 7;\n break;\n }\n\n _context46.next = 7;\n return options.privateKey.decrypt();\n\n case 7:\n _context46.next = 12;\n break;\n\n case 9:\n _context46.prev = 9;\n _context46.t0 = _context46['catch'](2);\n throw new Error('Key not decrypted');\n\n case 12:\n packetlist = options.privateKey.toPacketlist();\n secretKeyPacket = void 0;\n secretSubkeyPackets = [];\n\n for (i = 0; i < packetlist.length; i++) {\n if (packetlist[i].tag === _enums2.default.packet.secretKey) {\n secretKeyPacket = packetlist[i];\n } else if (packetlist[i].tag === _enums2.default.packet.secretSubkey) {\n secretSubkeyPackets.push(packetlist[i]);\n }\n }\n\n if (secretKeyPacket) {\n _context46.next = 18;\n break;\n }\n\n throw new Error('Key does not contain a secret key packet');\n\n case 18:\n\n if (!options.subkeys) {\n options.subkeys = secretSubkeyPackets.map(function () {\n return {};\n });\n }\n\n if (!(options.subkeys.length !== secretSubkeyPackets.length)) {\n _context46.next = 21;\n break;\n }\n\n throw new Error('Number of subkey options does not match number of subkeys');\n\n case 21:\n\n options.subkeys = options.subkeys.map(function (subkey, index) {\n return sanitizeKeyOptions(options.subkeys[index], options);\n });\n\n return _context46.abrupt('return', wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options));\n\n case 23:\n case 'end':\n return _context46.stop();\n }\n }\n }, _callee46, this, [[2, 9]]);\n }));\n\n return function reformat(_x88) {\n return _ref52.apply(this, arguments);\n };\n}();\n\nvar wrapKeyObject = function () {\n var _ref53 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee51(secretKeyPacket, secretSubkeyPackets, options) {\n var packetlist, dataToSign;\n return _regenerator2.default.wrap(function _callee51$(_context51) {\n while (1) {\n switch (_context51.prev = _context51.next) {\n case 0:\n if (!options.passphrase) {\n _context51.next = 3;\n break;\n }\n\n _context51.next = 3;\n return secretKeyPacket.encrypt(options.passphrase);\n\n case 3:\n _context51.next = 5;\n return _promise2.default.all(secretSubkeyPackets.map(function () {\n var _ref54 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee47(secretSubkeyPacket, index) {\n var subkeyPassphrase;\n return _regenerator2.default.wrap(function _callee47$(_context47) {\n while (1) {\n switch (_context47.prev = _context47.next) {\n case 0:\n subkeyPassphrase = options.subkeys[index].passphrase;\n\n if (!subkeyPassphrase) {\n _context47.next = 4;\n break;\n }\n\n _context47.next = 4;\n return secretSubkeyPacket.encrypt(subkeyPassphrase);\n\n case 4:\n case 'end':\n return _context47.stop();\n }\n }\n }, _callee47, this);\n }));\n\n return function (_x93, _x94) {\n return _ref54.apply(this, arguments);\n };\n }()));\n\n case 5:\n packetlist = new _packet2.default.List();\n\n\n packetlist.push(secretKeyPacket);\n\n _context51.next = 9;\n return _promise2.default.all(options.userIds.map(function () {\n var _ref55 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee48(userId, index) {\n var userIdPacket, dataToSign, signaturePacket;\n return _regenerator2.default.wrap(function _callee48$(_context48) {\n while (1) {\n switch (_context48.prev = _context48.next) {\n case 0:\n userIdPacket = new _packet2.default.Userid();\n\n userIdPacket.format(userId);\n\n dataToSign = {};\n\n dataToSign.userid = userIdPacket;\n dataToSign.key = secretKeyPacket;\n signaturePacket = new _packet2.default.Signature(options.date);\n\n signaturePacket.signatureType = _enums2.default.signature.cert_generic;\n signaturePacket.publicKeyAlgorithm = secretKeyPacket.algorithm;\n _context48.next = 10;\n return getPreferredHashAlgo(null, secretKeyPacket);\n\n case 10:\n signaturePacket.hashAlgorithm = _context48.sent;\n\n signaturePacket.keyFlags = [_enums2.default.keyFlags.certify_keys | _enums2.default.keyFlags.sign_data];\n signaturePacket.preferredSymmetricAlgorithms = [];\n // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support)\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes256);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes128);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes192);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.cast5);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.tripledes);\n if (_config2.default.aead_protect && _config2.default.aead_protect_version === 4) {\n signaturePacket.preferredAeadAlgorithms = [];\n signaturePacket.preferredAeadAlgorithms.push(_enums2.default.aead.eax);\n signaturePacket.preferredAeadAlgorithms.push(_enums2.default.aead.ocb);\n }\n signaturePacket.preferredHashAlgorithms = [];\n // prefer fast asm.js implementations (SHA-256). SHA-1 will not be secure much longer...move to bottom of list\n signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha256);\n signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha512);\n signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha1);\n signaturePacket.preferredCompressionAlgorithms = [];\n signaturePacket.preferredCompressionAlgorithms.push(_enums2.default.compression.zlib);\n signaturePacket.preferredCompressionAlgorithms.push(_enums2.default.compression.zip);\n if (index === 0) {\n signaturePacket.isPrimaryUserID = true;\n }\n if (_config2.default.integrity_protect) {\n signaturePacket.features = [0];\n signaturePacket.features[0] |= _enums2.default.features.modification_detection;\n }\n if (_config2.default.aead_protect && _config2.default.aead_protect_version === 4) {\n signaturePacket.features || (signaturePacket.features = [0]);\n signaturePacket.features[0] |= _enums2.default.features.aead;\n signaturePacket.features[0] |= _enums2.default.features.v5_keys;\n }\n if (options.keyExpirationTime > 0) {\n signaturePacket.keyExpirationTime = options.keyExpirationTime;\n signaturePacket.keyNeverExpires = false;\n }\n _context48.next = 32;\n return signaturePacket.sign(secretKeyPacket, dataToSign);\n\n case 32:\n return _context48.abrupt('return', { userIdPacket: userIdPacket, signaturePacket: signaturePacket });\n\n case 33:\n case 'end':\n return _context48.stop();\n }\n }\n }, _callee48, this);\n }));\n\n return function (_x95, _x96) {\n return _ref55.apply(this, arguments);\n };\n }())).then(function (list) {\n list.forEach(function (_ref56) {\n var userIdPacket = _ref56.userIdPacket,\n signaturePacket = _ref56.signaturePacket;\n\n packetlist.push(userIdPacket);\n packetlist.push(signaturePacket);\n });\n });\n\n case 9:\n _context51.next = 11;\n return _promise2.default.all(secretSubkeyPackets.map(function () {\n var _ref57 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee49(secretSubkeyPacket, index) {\n var subkeyOptions, dataToSign, subkeySignaturePacket;\n return _regenerator2.default.wrap(function _callee49$(_context49) {\n while (1) {\n switch (_context49.prev = _context49.next) {\n case 0:\n subkeyOptions = options.subkeys[index];\n dataToSign = {};\n\n dataToSign.key = secretKeyPacket;\n dataToSign.bind = secretSubkeyPacket;\n subkeySignaturePacket = new _packet2.default.Signature(subkeyOptions.date);\n\n subkeySignaturePacket.signatureType = _enums2.default.signature.subkey_binding;\n subkeySignaturePacket.publicKeyAlgorithm = secretKeyPacket.algorithm;\n _context49.next = 9;\n return getPreferredHashAlgo(null, secretSubkeyPacket);\n\n case 9:\n subkeySignaturePacket.hashAlgorithm = _context49.sent;\n\n subkeySignaturePacket.keyFlags = subkeyOptions.sign ? _enums2.default.keyFlags.sign_data : [_enums2.default.keyFlags.encrypt_communication | _enums2.default.keyFlags.encrypt_storage];\n if (subkeyOptions.keyExpirationTime > 0) {\n subkeySignaturePacket.keyExpirationTime = subkeyOptions.keyExpirationTime;\n subkeySignaturePacket.keyNeverExpires = false;\n }\n _context49.next = 14;\n return subkeySignaturePacket.sign(secretKeyPacket, dataToSign);\n\n case 14:\n return _context49.abrupt('return', { secretSubkeyPacket: secretSubkeyPacket, subkeySignaturePacket: subkeySignaturePacket });\n\n case 15:\n case 'end':\n return _context49.stop();\n }\n }\n }, _callee49, this);\n }));\n\n return function (_x97, _x98) {\n return _ref57.apply(this, arguments);\n };\n }())).then(function (packets) {\n packets.forEach(function (_ref58) {\n var secretSubkeyPacket = _ref58.secretSubkeyPacket,\n subkeySignaturePacket = _ref58.subkeySignaturePacket;\n\n packetlist.push(secretSubkeyPacket);\n packetlist.push(subkeySignaturePacket);\n });\n });\n\n case 11:\n\n // Add revocation signature packet for creating a revocation certificate.\n // This packet should be removed before returning the key.\n dataToSign = { key: secretKeyPacket };\n _context51.t0 = packetlist;\n _context51.next = 15;\n return createSignaturePacket(dataToSign, null, secretKeyPacket, {\n signatureType: _enums2.default.signature.key_revocation,\n reasonForRevocationFlag: _enums2.default.reasonForRevocation.no_reason,\n reasonForRevocationString: ''\n }, options.date);\n\n case 15:\n _context51.t1 = _context51.sent;\n\n _context51.t0.push.call(_context51.t0, _context51.t1);\n\n // set passphrase protection\n if (options.passphrase) {\n secretKeyPacket.clearPrivateParams();\n }\n\n _context51.next = 20;\n return _promise2.default.all(secretSubkeyPackets.map(function () {\n var _ref59 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee50(secretSubkeyPacket, index) {\n var subkeyPassphrase;\n return _regenerator2.default.wrap(function _callee50$(_context50) {\n while (1) {\n switch (_context50.prev = _context50.next) {\n case 0:\n subkeyPassphrase = options.subkeys[index].passphrase;\n\n if (subkeyPassphrase) {\n secretSubkeyPacket.clearPrivateParams();\n }\n\n case 2:\n case 'end':\n return _context50.stop();\n }\n }\n }, _callee50, this);\n }));\n\n return function (_x99, _x100) {\n return _ref59.apply(this, arguments);\n };\n }()));\n\n case 20:\n return _context51.abrupt('return', new Key(packetlist));\n\n case 21:\n case 'end':\n return _context51.stop();\n }\n }\n }, _callee51, this);\n }));\n\n return function wrapKeyObject(_x90, _x91, _x92) {\n return _ref53.apply(this, arguments);\n };\n}();\n\n/**\n * Checks if a given certificate or binding signature is revoked\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Object} dataToVerify The data to check\n * @param {Array<module:packet.Signature>} revocations The revocation signatures to check\n * @param {module:packet.Signature} signature The certificate or signature to check\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key packet to check the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the signature revokes the data\n * @async\n */\n\n\nvar isDataRevoked = function () {\n var _ref60 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee53(primaryKey, dataToVerify, revocations, signature, key) {\n var date = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new Date();\n var normDate, revocationKeyIds;\n return _regenerator2.default.wrap(function _callee53$(_context53) {\n while (1) {\n switch (_context53.prev = _context53.next) {\n case 0:\n key = key || primaryKey;\n normDate = _util2.default.normalizeDate(date);\n revocationKeyIds = [];\n _context53.next = 5;\n return _promise2.default.all(revocations.map(function () {\n var _ref61 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee52(revocationSignature) {\n return _regenerator2.default.wrap(function _callee52$(_context52) {\n while (1) {\n switch (_context52.prev = _context52.next) {\n case 0:\n _context52.t0 = !(_config2.default.revocations_expire && revocationSignature.isExpired(normDate));\n\n if (!_context52.t0) {\n _context52.next = 8;\n break;\n }\n\n _context52.t1 = revocationSignature.verified;\n\n if (_context52.t1) {\n _context52.next = 7;\n break;\n }\n\n _context52.next = 6;\n return revocationSignature.verify(key, dataToVerify);\n\n case 6:\n _context52.t1 = _context52.sent;\n\n case 7:\n _context52.t0 = _context52.t1;\n\n case 8:\n if (!_context52.t0) {\n _context52.next = 11;\n break;\n }\n\n // TODO get an identifier of the revoked object instead\n revocationKeyIds.push(revocationSignature.issuerKeyId);\n return _context52.abrupt('return', true);\n\n case 11:\n return _context52.abrupt('return', false);\n\n case 12:\n case 'end':\n return _context52.stop();\n }\n }\n }, _callee52, this);\n }));\n\n return function (_x107) {\n return _ref61.apply(this, arguments);\n };\n }()));\n\n case 5:\n if (!signature) {\n _context53.next = 8;\n break;\n }\n\n signature.revoked = revocationKeyIds.some(function (keyId) {\n return keyId.equals(signature.issuerKeyId);\n }) ? true : signature.revoked;\n return _context53.abrupt('return', signature.revoked);\n\n case 8:\n return _context53.abrupt('return', revocationKeyIds.length > 0);\n\n case 9:\n case 'end':\n return _context53.stop();\n }\n }\n }, _callee53, this);\n }));\n\n return function isDataRevoked(_x101, _x102, _x103, _x104, _x105) {\n return _ref60.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the preferred signature hash algorithm of a key\n * @param {module:key.Key} key (optional) the key to get preferences from\n * @param {module:packet.SecretKey|module:packet.SecretSubkey} keyPacket key packet used for signing\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID\n * @returns {Promise<String>}\n * @async\n */\nvar getPreferredHashAlgo = exports.getPreferredHashAlgo = function () {\n var _ref62 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee54(key, keyPacket) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n var hash_algo, pref_algo, primaryUser, _primaryUser$selfCert;\n\n return _regenerator2.default.wrap(function _callee54$(_context54) {\n while (1) {\n switch (_context54.prev = _context54.next) {\n case 0:\n hash_algo = _config2.default.prefer_hash_algorithm;\n pref_algo = hash_algo;\n\n if (!(key instanceof Key)) {\n _context54.next = 7;\n break;\n }\n\n _context54.next = 5;\n return key.getPrimaryUser(date, userId);\n\n case 5:\n primaryUser = _context54.sent;\n\n if (primaryUser && primaryUser.selfCertification.preferredHashAlgorithms) {\n _primaryUser$selfCert = (0, _slicedToArray3.default)(primaryUser.selfCertification.preferredHashAlgorithms, 1);\n pref_algo = _primaryUser$selfCert[0];\n\n hash_algo = _crypto2.default.hash.getHashByteLength(hash_algo) <= _crypto2.default.hash.getHashByteLength(pref_algo) ? pref_algo : hash_algo;\n }\n\n case 7:\n switch ((0, _getPrototypeOf2.default)(keyPacket)) {\n case _packet2.default.SecretKey.prototype:\n case _packet2.default.PublicKey.prototype:\n case _packet2.default.SecretSubkey.prototype:\n case _packet2.default.PublicSubkey.prototype:\n switch (keyPacket.algorithm) {\n case 'ecdh':\n case 'ecdsa':\n case 'eddsa':\n pref_algo = _crypto2.default.publicKey.elliptic.getPreferredHashAlgo(keyPacket.params[0]);\n }\n }\n return _context54.abrupt('return', _crypto2.default.hash.getHashByteLength(hash_algo) <= _crypto2.default.hash.getHashByteLength(pref_algo) ? pref_algo : hash_algo);\n\n case 9:\n case 'end':\n return _context54.stop();\n }\n }\n }, _callee54, this);\n }));\n\n return function getPreferredHashAlgo(_x109, _x110) {\n return _ref62.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the preferred symmetric/aead algorithm for a set of keys\n * @param {symmetric|aead} type Type of preference to return\n * @param {Array<module:key.Key>} keys Set of keys\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID\n * @returns {Promise<module:enums.symmetric>} Preferred symmetric algorithm\n * @async\n */\n\n\nvar getPreferredAlgo = exports.getPreferredAlgo = function () {\n var _ref63 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee56(type, keys) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var prefProperty, defaultAlgo, prioMap, prefAlgo;\n return _regenerator2.default.wrap(function _callee56$(_context56) {\n while (1) {\n switch (_context56.prev = _context56.next) {\n case 0:\n prefProperty = type === 'symmetric' ? 'preferredSymmetricAlgorithms' : 'preferredAeadAlgorithms';\n defaultAlgo = type === 'symmetric' ? _config2.default.encryption_cipher : _config2.default.aead_mode;\n prioMap = {};\n _context56.next = 5;\n return _promise2.default.all(keys.map(function () {\n var _ref64 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee55(key) {\n var primaryUser;\n return _regenerator2.default.wrap(function _callee55$(_context55) {\n while (1) {\n switch (_context55.prev = _context55.next) {\n case 0:\n _context55.next = 2;\n return key.getPrimaryUser(date, userId);\n\n case 2:\n primaryUser = _context55.sent;\n\n if (!(!primaryUser || !primaryUser.selfCertification[prefProperty])) {\n _context55.next = 5;\n break;\n }\n\n return _context55.abrupt('return', defaultAlgo);\n\n case 5:\n primaryUser.selfCertification[prefProperty].forEach(function (algo, index) {\n var entry = prioMap[algo] || (prioMap[algo] = { prio: 0, count: 0, algo: algo });\n entry.prio += 64 >> index;\n entry.count++;\n });\n\n case 6:\n case 'end':\n return _context55.stop();\n }\n }\n }, _callee55, this);\n }));\n\n return function (_x117) {\n return _ref64.apply(this, arguments);\n };\n }()));\n\n case 5:\n prefAlgo = { prio: 0, algo: defaultAlgo };\n\n (0, _values2.default)(prioMap).forEach(function (_ref65) {\n var prio = _ref65.prio,\n count = _ref65.count,\n algo = _ref65.algo;\n\n try {\n if (algo !== _enums2.default[type].plaintext && algo !== _enums2.default[type].idea && // not implemented\n _enums2.default.read(_enums2.default[type], algo) && // known algorithm\n count === keys.length && // available for all keys\n prio > prefAlgo.prio) {\n prefAlgo = prioMap[algo];\n }\n } catch (e) {}\n });\n return _context56.abrupt('return', prefAlgo.algo);\n\n case 8:\n case 'end':\n return _context56.stop();\n }\n }\n }, _callee56, this);\n }));\n\n return function getPreferredAlgo(_x113, _x114) {\n return _ref63.apply(this, arguments);\n };\n}();\n\n/**\n * Returns whether aead is supported by all keys in the set\n * @param {Array<module:key.Key>} keys Set of keys\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Promise<Boolean>}\n * @async\n */\n\n\nvar isAeadSupported = exports.isAeadSupported = function () {\n var _ref66 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee58(keys) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var supported;\n return _regenerator2.default.wrap(function _callee58$(_context58) {\n while (1) {\n switch (_context58.prev = _context58.next) {\n case 0:\n supported = true;\n // TODO replace when Promise.some or Promise.any are implemented\n\n _context58.next = 3;\n return _promise2.default.all(keys.map(function () {\n var _ref67 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee57(key) {\n var primaryUser;\n return _regenerator2.default.wrap(function _callee57$(_context57) {\n while (1) {\n switch (_context57.prev = _context57.next) {\n case 0:\n _context57.next = 2;\n return key.getPrimaryUser(date, userId);\n\n case 2:\n primaryUser = _context57.sent;\n\n if (!primaryUser || !primaryUser.selfCertification.features || !(primaryUser.selfCertification.features[0] & _enums2.default.features.aead)) {\n supported = false;\n }\n\n case 4:\n case 'end':\n return _context57.stop();\n }\n }\n }, _callee57, this);\n }));\n\n return function (_x121) {\n return _ref67.apply(this, arguments);\n };\n }()));\n\n case 3:\n return _context58.abrupt('return', supported);\n\n case 4:\n case 'end':\n return _context58.stop();\n }\n }\n }, _callee58, this);\n }));\n\n return function isAeadSupported(_x118) {\n return _ref66.apply(this, arguments);\n };\n}();\n\nexports.Key = Key;\nexports.read = read;\nexports.readArmored = readArmored;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP key. Must contain a primary key.\n * Can contain additional subkeys, signatures, user ids, user attributes.\n * @param {module:packet.List} packetlist The packets that form this key\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires crypto\n * @requires packet\n * @requires config\n * @requires enums\n * @requires util\n * @module key\n */\n\nfunction Key(packetlist) {\n if (!(this instanceof Key)) {\n return new Key(packetlist);\n }\n // same data as in packetlist but in structured form\n this.primaryKey = null;\n this.revocationSignatures = [];\n this.directSignatures = [];\n this.users = [];\n this.subKeys = [];\n this.packetlist2structure(packetlist);\n if (!this.primaryKey || !this.users.length) {\n throw new Error('Invalid key: need at least key and user ID packet');\n }\n}\n\n/**\n * Transforms packetlist to structured key data\n * @param {module:packet.List} packetlist The packets that form a key\n */\nKey.prototype.packetlist2structure = function (packetlist) {\n var user = void 0;\n var primaryKeyId = void 0;\n var subKey = void 0;\n for (var i = 0; i < packetlist.length; i++) {\n switch (packetlist[i].tag) {\n case _enums2.default.packet.publicKey:\n case _enums2.default.packet.secretKey:\n this.primaryKey = packetlist[i];\n primaryKeyId = this.primaryKey.getKeyId();\n break;\n case _enums2.default.packet.userid:\n case _enums2.default.packet.userAttribute:\n user = new User(packetlist[i]);\n this.users.push(user);\n break;\n case _enums2.default.packet.publicSubkey:\n case _enums2.default.packet.secretSubkey:\n user = null;\n subKey = new SubKey(packetlist[i]);\n this.subKeys.push(subKey);\n break;\n case _enums2.default.packet.signature:\n switch (packetlist[i].signatureType) {\n case _enums2.default.signature.cert_generic:\n case _enums2.default.signature.cert_persona:\n case _enums2.default.signature.cert_casual:\n case _enums2.default.signature.cert_positive:\n if (!user) {\n _util2.default.print_debug('Dropping certification signatures without preceding user packet');\n continue;\n }\n if (packetlist[i].issuerKeyId.equals(primaryKeyId)) {\n user.selfCertifications.push(packetlist[i]);\n } else {\n user.otherCertifications.push(packetlist[i]);\n }\n break;\n case _enums2.default.signature.cert_revocation:\n if (user) {\n user.revocationSignatures.push(packetlist[i]);\n } else {\n this.directSignatures.push(packetlist[i]);\n }\n break;\n case _enums2.default.signature.key:\n this.directSignatures.push(packetlist[i]);\n break;\n case _enums2.default.signature.subkey_binding:\n if (!subKey) {\n _util2.default.print_debug('Dropping subkey binding signature without preceding subkey packet');\n continue;\n }\n subKey.bindingSignatures.push(packetlist[i]);\n break;\n case _enums2.default.signature.key_revocation:\n this.revocationSignatures.push(packetlist[i]);\n break;\n case _enums2.default.signature.subkey_revocation:\n if (!subKey) {\n _util2.default.print_debug('Dropping subkey revocation signature without preceding subkey packet');\n continue;\n }\n subKey.revocationSignatures.push(packetlist[i]);\n break;\n }\n break;\n }\n }\n};\n\n/**\n * Transforms structured key data to packetlist\n * @returns {module:packet.List} The packets that form a key\n */\nKey.prototype.toPacketlist = function () {\n var packetlist = new _packet2.default.List();\n packetlist.push(this.primaryKey);\n packetlist.concat(this.revocationSignatures);\n packetlist.concat(this.directSignatures);\n this.users.map(function (user) {\n return packetlist.concat(user.toPacketlist());\n });\n this.subKeys.map(function (subKey) {\n return packetlist.concat(subKey.toPacketlist());\n });\n return packetlist;\n};\n\n/**\n * Returns packetlist containing all public or private subkey packets matching keyId;\n * If keyId is not present, returns all subkey packets.\n * @param {type/keyid} keyId\n * @returns {module:packet.List}\n */\nKey.prototype.getSubkeyPackets = function () {\n var keyId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n var packets = new _packet2.default.List();\n this.subKeys.forEach(function (subKey) {\n if (!keyId || subKey.subKey.getKeyId().equals(keyId, true)) {\n packets.push(subKey.subKey);\n }\n });\n return packets;\n};\n\n/**\n * Returns a packetlist containing all public or private key packets matching keyId.\n * If keyId is not present, returns all key packets starting with the primary key.\n * @param {type/keyid} keyId\n * @returns {module:packet.List}\n */\nKey.prototype.getKeyPackets = function () {\n var keyId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n var packets = new _packet2.default.List();\n if (!keyId || this.primaryKey.getKeyId().equals(keyId, true)) {\n packets.push(this.primaryKey);\n }\n packets.concat(this.getSubkeyPackets(keyId));\n return packets;\n};\n\n/**\n * Returns key IDs of all key packets\n * @returns {Array<module:type/keyid>}\n */\nKey.prototype.getKeyIds = function () {\n return this.getKeyPackets().map(function (keyPacket) {\n return keyPacket.getKeyId();\n });\n};\n\n/**\n * Returns userids\n * @returns {Array<string>} array of userids\n */\nKey.prototype.getUserIds = function () {\n return this.users.map(function (user) {\n return user.userId ? _util2.default.encode_utf8(user.userId.userid) : null;\n }).filter(function (userid) {\n return userid !== null;\n });\n};\n\n/**\n * Returns true if this is a public key\n * @returns {Boolean}\n */\nKey.prototype.isPublic = function () {\n return this.primaryKey.tag === _enums2.default.packet.publicKey;\n};\n\n/**\n * Returns true if this is a private key\n * @returns {Boolean}\n */\nKey.prototype.isPrivate = function () {\n return this.primaryKey.tag === _enums2.default.packet.secretKey;\n};\n\n/**\n * Returns key as public key (shallow copy)\n * @returns {module:key.Key} new public Key\n */\nKey.prototype.toPublic = function () {\n var packetlist = new _packet2.default.List();\n var keyPackets = this.toPacketlist();\n var bytes = void 0;\n var pubKeyPacket = void 0;\n var pubSubkeyPacket = void 0;\n for (var i = 0; i < keyPackets.length; i++) {\n switch (keyPackets[i].tag) {\n case _enums2.default.packet.secretKey:\n bytes = keyPackets[i].writePublicKey();\n pubKeyPacket = new _packet2.default.PublicKey();\n pubKeyPacket.read(bytes);\n packetlist.push(pubKeyPacket);\n break;\n case _enums2.default.packet.secretSubkey:\n bytes = keyPackets[i].writePublicKey();\n pubSubkeyPacket = new _packet2.default.PublicSubkey();\n pubSubkeyPacket.read(bytes);\n packetlist.push(pubSubkeyPacket);\n break;\n default:\n packetlist.push(keyPackets[i]);\n }\n }\n return new Key(packetlist);\n};\n\n/**\n * Returns ASCII armored text of key\n * @returns {String} ASCII armor\n */\nKey.prototype.armor = function () {\n var type = this.isPublic() ? _enums2.default.armor.public_key : _enums2.default.armor.private_key;\n return _armor2.default.encode(type, this.toPacketlist().write());\n};\n\n/**\n * Returns the signature that has the latest creation date, while ignoring signatures created in the future.\n * @param {Array<module:packet.Signature>} signatures List of signatures\n * @param {Date} date Use the given date instead of the current time\n * @returns {module:packet.Signature} The latest signature\n */\nfunction getLatestSignature(signatures) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n var signature = signatures[0];\n for (var i = 1; i < signatures.length; i++) {\n if (signatures[i].created >= signature.created && (signatures[i].created <= date || date === null)) {\n signature = signatures[i];\n }\n }\n return signature;\n}\n\nfunction isValidSigningKeyPacket(keyPacket, signature) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n return keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.rsa_encrypt) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.elgamal) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.ecdh) && (!signature.keyFlags || (signature.keyFlags[0] & _enums2.default.keyFlags.sign_data) !== 0) && signature.verified && !signature.revoked && !signature.isExpired(date) && !isDataExpired(keyPacket, signature, date);\n}\n\n/**\n * Returns first key packet or key packet by given keyId that is available for signing and verification\n * @param {module:type/keyid} keyId, optional\n * @param {Date} date use the given date for verification instead of the current time\n * @param {Object} userId, optional user ID\n * @returns {Promise<module:packet.SecretSubkey|\n * module:packet.SecretKey|null>} key packet or null if no signing key has been found\n * @async\n */\nKey.prototype.getSigningKeyPacket = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n var keyId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var primaryKey, i, bindingSignature, primaryUser;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n primaryKey = this.primaryKey;\n _context.next = 3;\n return this.verifyPrimaryKey(date, userId);\n\n case 3:\n _context.t0 = _context.sent;\n _context.t1 = _enums2.default.keyStatus.valid;\n\n if (!(_context.t0 === _context.t1)) {\n _context.next = 25;\n break;\n }\n\n i = 0;\n\n case 7:\n if (!(i < this.subKeys.length)) {\n _context.next = 20;\n break;\n }\n\n if (!(!keyId || this.subKeys[i].subKey.getKeyId().equals(keyId))) {\n _context.next = 17;\n break;\n }\n\n _context.next = 11;\n return this.subKeys[i].verify(primaryKey, date);\n\n case 11:\n _context.t2 = _context.sent;\n _context.t3 = _enums2.default.keyStatus.valid;\n\n if (!(_context.t2 === _context.t3)) {\n _context.next = 17;\n break;\n }\n\n bindingSignature = getLatestSignature(this.subKeys[i].bindingSignatures, date);\n\n if (!isValidSigningKeyPacket(this.subKeys[i].subKey, bindingSignature, date)) {\n _context.next = 17;\n break;\n }\n\n return _context.abrupt('return', this.subKeys[i].subKey);\n\n case 17:\n i++;\n _context.next = 7;\n break;\n\n case 20:\n _context.next = 22;\n return this.getPrimaryUser(date, userId);\n\n case 22:\n primaryUser = _context.sent;\n\n if (!(primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) && isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, date))) {\n _context.next = 25;\n break;\n }\n\n return _context.abrupt('return', primaryKey);\n\n case 25:\n return _context.abrupt('return', null);\n\n case 26:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function () {\n return _ref.apply(this, arguments);\n };\n}();\n\nfunction isValidEncryptionKeyPacket(keyPacket, signature) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n return keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.dsa) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.rsa_sign) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.ecdsa) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.eddsa) && (!signature.keyFlags || (signature.keyFlags[0] & _enums2.default.keyFlags.encrypt_communication) !== 0 || (signature.keyFlags[0] & _enums2.default.keyFlags.encrypt_storage) !== 0) && signature.verified && !signature.revoked && !signature.isExpired(date) && !isDataExpired(keyPacket, signature, date);\n}\n\n/**\n * Returns first key packet or key packet by given keyId that is available for encryption or decryption\n * @param {module:type/keyid} keyId, optional\n * @param {Date} date, optional\n * @param {String} userId, optional\n * @returns {Promise<module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.SecretKey|\n * module:packet.PublicKey|null>} key packet or null if no encryption key has been found\n * @async\n */\nKey.prototype.getEncryptionKeyPacket = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(keyId) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var primaryKey, i, bindingSignature, primaryUser;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n primaryKey = this.primaryKey;\n _context2.next = 3;\n return this.verifyPrimaryKey(date, userId);\n\n case 3:\n _context2.t0 = _context2.sent;\n _context2.t1 = _enums2.default.keyStatus.valid;\n\n if (!(_context2.t0 === _context2.t1)) {\n _context2.next = 25;\n break;\n }\n\n i = 0;\n\n case 7:\n if (!(i < this.subKeys.length)) {\n _context2.next = 20;\n break;\n }\n\n if (!(!keyId || this.subKeys[i].subKey.getKeyId().equals(keyId))) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 11;\n return this.subKeys[i].verify(primaryKey, date);\n\n case 11:\n _context2.t2 = _context2.sent;\n _context2.t3 = _enums2.default.keyStatus.valid;\n\n if (!(_context2.t2 === _context2.t3)) {\n _context2.next = 17;\n break;\n }\n\n bindingSignature = getLatestSignature(this.subKeys[i].bindingSignatures, date);\n\n if (!isValidEncryptionKeyPacket(this.subKeys[i].subKey, bindingSignature, date)) {\n _context2.next = 17;\n break;\n }\n\n return _context2.abrupt('return', this.subKeys[i].subKey);\n\n case 17:\n i++;\n _context2.next = 7;\n break;\n\n case 20:\n _context2.next = 22;\n return this.getPrimaryUser(date, userId);\n\n case 22:\n primaryUser = _context2.sent;\n\n if (!(primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) && isValidEncryptionKeyPacket(primaryKey, primaryUser.selfCertification, date))) {\n _context2.next = 25;\n break;\n }\n\n return _context2.abrupt('return', primaryKey);\n\n case 25:\n return _context2.abrupt('return', null);\n\n case 26:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x9) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypts all secret key and subkey packets matching keyId\n * @param {String|Array<String>} passphrases - if multiple passphrases, then should be in same order as packets each should encrypt\n * @param {module:type/keyid} keyId\n * @returns {Promise<Array<module:packet.SecretKey|module:packet.SecretSubkey>>}\n * @async\n */\nKey.prototype.encrypt = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(passphrases) {\n var keyId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var keyPackets;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (this.isPrivate()) {\n _context4.next = 2;\n break;\n }\n\n throw new Error(\"Nothing to encrypt in a public key\");\n\n case 2:\n keyPackets = this.getKeyPackets(keyId);\n\n passphrases = _util2.default.isArray(passphrases) ? passphrases : new Array(keyPackets.length).fill(passphrases);\n\n if (!(passphrases.length !== keyPackets.length)) {\n _context4.next = 6;\n break;\n }\n\n throw new Error(\"Invalid number of passphrases for key\");\n\n case 6:\n return _context4.abrupt('return', _promise2.default.all(keyPackets.map(function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(keyPacket, i) {\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return keyPacket.encrypt(passphrases[i]);\n\n case 2:\n _context3.next = 4;\n return keyPacket.clearPrivateParams();\n\n case 4:\n return _context3.abrupt('return', keyPacket);\n\n case 5:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x14, _x15) {\n return _ref4.apply(this, arguments);\n };\n }())));\n\n case 7:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x12) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypts all secret key and subkey packets matching keyId\n * @param {String|Array<String>} passphrases\n * @param {module:type/keyid} keyId\n * @returns {Promise<Boolean>} true if all matching key and subkey packets decrypted successfully\n * @async\n */\nKey.prototype.decrypt = function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(passphrases) {\n var keyId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var results;\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (this.isPrivate()) {\n _context7.next = 2;\n break;\n }\n\n throw new Error(\"Nothing to decrypt in a public key\");\n\n case 2:\n passphrases = _util2.default.isArray(passphrases) ? passphrases : [passphrases];\n\n _context7.next = 5;\n return _promise2.default.all(this.getKeyPackets(keyId).map(function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(keyPacket) {\n var decrypted, error;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n decrypted = false;\n error = null;\n _context6.next = 4;\n return _promise2.default.all(passphrases.map(function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(passphrase) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n _context5.prev = 0;\n _context5.next = 3;\n return keyPacket.decrypt(passphrase);\n\n case 3:\n decrypted = true;\n _context5.next = 9;\n break;\n\n case 6:\n _context5.prev = 6;\n _context5.t0 = _context5['catch'](0);\n\n error = _context5.t0;\n\n case 9:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this, [[0, 6]]);\n }));\n\n return function (_x19) {\n return _ref7.apply(this, arguments);\n };\n }()));\n\n case 4:\n if (decrypted) {\n _context6.next = 6;\n break;\n }\n\n throw error;\n\n case 6:\n return _context6.abrupt('return', decrypted);\n\n case 7:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function (_x18) {\n return _ref6.apply(this, arguments);\n };\n }()));\n\n case 5:\n results = _context7.sent;\n return _context7.abrupt('return', results.every(function (result) {\n return result === true;\n }));\n\n case 7:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x16) {\n return _ref5.apply(this, arguments);\n };\n}();\n\n/**\n * Checks if a signature on a key is revoked\n * @param {module:packet.SecretKey|\n * @param {module:packet.Signature} signature The signature to verify\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key to verify the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the certificate is revoked\n * @async\n */\nKey.prototype.isRevoked = function () {\n var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(signature, key) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n return _context8.abrupt('return', isDataRevoked(this.primaryKey, { key: this.primaryKey }, this.revocationSignatures, signature, key, date));\n\n case 1:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x20, _x21) {\n return _ref8.apply(this, arguments);\n };\n}();\n\n/**\n * Verify primary key. Checks for revocation signatures, expiration time\n * and valid self signature\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID\n * @returns {Promise<module:enums.keyStatus>} The status of the primary key\n * @async\n */\nKey.prototype.verifyPrimaryKey = function () {\n var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n var userId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var primaryKey, _ref10, user, selfCertification;\n\n return _regenerator2.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n primaryKey = this.primaryKey;\n // check for key revocation signatures\n\n _context9.next = 3;\n return this.isRevoked(null, null, date);\n\n case 3:\n if (!_context9.sent) {\n _context9.next = 5;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 5:\n if (this.users.some(function (user) {\n return user.userId && user.selfCertifications.length;\n })) {\n _context9.next = 7;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.no_self_cert);\n\n case 7:\n _context9.next = 9;\n return this.getPrimaryUser(date, userId);\n\n case 9:\n _context9.t0 = _context9.sent;\n\n if (_context9.t0) {\n _context9.next = 12;\n break;\n }\n\n _context9.t0 = {};\n\n case 12:\n _ref10 = _context9.t0;\n user = _ref10.user;\n selfCertification = _ref10.selfCertification;\n\n if (user) {\n _context9.next = 17;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 17:\n if (!isDataExpired(primaryKey, selfCertification, date)) {\n _context9.next = 19;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 19:\n return _context9.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 20:\n case 'end':\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function () {\n return _ref9.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the expiration time of the primary key or Infinity if key does not expire\n * @returns {Promise<Date>}\n * @async\n */\nKey.prototype.getExpirationTime = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10() {\n var primaryUser, selfCert, keyExpiry, sigExpiry;\n return _regenerator2.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (!(this.primaryKey.version === 3)) {\n _context10.next = 2;\n break;\n }\n\n return _context10.abrupt('return', getExpirationTime(this.primaryKey));\n\n case 2:\n if (!(this.primaryKey.version >= 4)) {\n _context10.next = 10;\n break;\n }\n\n _context10.next = 5;\n return this.getPrimaryUser(null);\n\n case 5:\n primaryUser = _context10.sent;\n selfCert = primaryUser.selfCertification;\n keyExpiry = getExpirationTime(this.primaryKey, selfCert);\n sigExpiry = selfCert.getExpirationTime();\n return _context10.abrupt('return', keyExpiry < sigExpiry ? keyExpiry : sigExpiry);\n\n case 10:\n case 'end':\n return _context10.stop();\n }\n }\n }, _callee10, this);\n}));\n\n/**\n * Returns primary user and most significant (latest valid) self signature\n * - if multiple primary users exist, returns the one with the latest self signature\n * - otherwise, returns the user with the latest self signature\n * @param {Date} date use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID to get instead of the primary user, if it exists\n * @returns {Promise<{user: module:key.User,\n * selfCertification: module:packet.Signature}>} The primary user and the self signature\n * @async\n */\nKey.prototype.getPrimaryUser = function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n var userId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var users, primaryUser, user, cert, primaryKey, dataToVerify;\n return _regenerator2.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n users = this.users.map(function (user, index) {\n var selfCertification = getLatestSignature(user.selfCertifications, date);\n return { index: index, user: user, selfCertification: selfCertification };\n }).filter(function (_ref13) {\n var user = _ref13.user,\n selfCertification = _ref13.selfCertification;\n\n return user.userId && selfCertification && (userId.name === undefined || user.userId.name === userId.name) && (userId.email === undefined || user.userId.email === userId.email) && (userId.comment === undefined || user.userId.comment === userId.comment);\n });\n\n if (users.length) {\n _context11.next = 5;\n break;\n }\n\n if (!(userId.name !== undefined || userId.email !== undefined || userId.comment !== undefined)) {\n _context11.next = 4;\n break;\n }\n\n throw new Error('Could not find user that matches that user ID');\n\n case 4:\n return _context11.abrupt('return', null);\n\n case 5:\n // sort by primary user flag and signature creation time\n primaryUser = users.sort(function (a, b) {\n var A = a.selfCertification;\n var B = b.selfCertification;\n return A.isPrimaryUserID - B.isPrimaryUserID || A.created - B.created;\n }).pop();\n user = primaryUser.user, cert = primaryUser.selfCertification;\n primaryKey = this.primaryKey;\n dataToVerify = { userid: user.userId, key: primaryKey };\n // skip if certificates is invalid, revoked, or expired\n // eslint-disable-next-line no-await-in-loop\n\n _context11.t0 = cert.verified;\n\n if (_context11.t0) {\n _context11.next = 14;\n break;\n }\n\n _context11.next = 13;\n return cert.verify(primaryKey, dataToVerify);\n\n case 13:\n _context11.t0 = _context11.sent;\n\n case 14:\n if (_context11.t0) {\n _context11.next = 16;\n break;\n }\n\n return _context11.abrupt('return', null);\n\n case 16:\n _context11.t1 = cert.revoked;\n\n if (_context11.t1) {\n _context11.next = 21;\n break;\n }\n\n _context11.next = 20;\n return user.isRevoked(primaryKey, cert, null, date);\n\n case 20:\n _context11.t1 = _context11.sent;\n\n case 21:\n if (!_context11.t1) {\n _context11.next = 23;\n break;\n }\n\n return _context11.abrupt('return', null);\n\n case 23:\n if (!cert.isExpired(date)) {\n _context11.next = 25;\n break;\n }\n\n return _context11.abrupt('return', null);\n\n case 25:\n return _context11.abrupt('return', primaryUser);\n\n case 26:\n case 'end':\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function () {\n return _ref12.apply(this, arguments);\n };\n}();\n\n/**\n * Update key with new components from specified key with same key ID:\n * users, subkeys, certificates are merged into the destination key,\n * duplicates and expired signatures are ignored.\n *\n * If the specified key is a private key and the destination key is public,\n * the destination key is transformed to a private key.\n * @param {module:key.Key} key Source key to merge\n */\nKey.prototype.update = function () {\n var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(key) {\n var _this = this;\n\n var equal;\n return _regenerator2.default.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n _context16.next = 2;\n return key.verifyPrimaryKey();\n\n case 2:\n _context16.t0 = _context16.sent;\n _context16.t1 = _enums2.default.keyStatus.invalid;\n\n if (!(_context16.t0 === _context16.t1)) {\n _context16.next = 6;\n break;\n }\n\n return _context16.abrupt('return');\n\n case 6:\n if (!(this.primaryKey.getFingerprint() !== key.primaryKey.getFingerprint())) {\n _context16.next = 8;\n break;\n }\n\n throw new Error('Key update method: fingerprints of keys not equal');\n\n case 8:\n if (!(this.isPublic() && key.isPrivate())) {\n _context16.next = 13;\n break;\n }\n\n // check for equal subkey packets\n equal = this.subKeys.length === key.subKeys.length && this.subKeys.every(function (destSubKey) {\n return key.subKeys.some(function (srcSubKey) {\n return destSubKey.subKey.getFingerprint() === srcSubKey.subKey.getFingerprint();\n });\n });\n\n if (equal) {\n _context16.next = 12;\n break;\n }\n\n throw new Error('Cannot update public key with private key if subkey mismatch');\n\n case 12:\n this.primaryKey = key.primaryKey;\n\n case 13:\n _context16.next = 15;\n return mergeSignatures(key, this, 'revocationSignatures', function (srcRevSig) {\n return isDataRevoked(_this.primaryKey, _this, [srcRevSig], null, key.primaryKey);\n });\n\n case 15:\n _context16.next = 17;\n return mergeSignatures(key, this, 'directSignatures');\n\n case 17:\n _context16.next = 19;\n return _promise2.default.all(key.users.map(function () {\n var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(srcUser) {\n var found;\n return _regenerator2.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n found = false;\n _context13.next = 3;\n return _promise2.default.all(_this.users.map(function () {\n var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(dstUser) {\n return _regenerator2.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (!(srcUser.userId && dstUser.userId && srcUser.userId.userid === dstUser.userId.userid || srcUser.userAttribute && srcUser.userAttribute.equals(dstUser.userAttribute))) {\n _context12.next = 4;\n break;\n }\n\n _context12.next = 3;\n return dstUser.update(srcUser, _this.primaryKey);\n\n case 3:\n found = true;\n\n case 4:\n case 'end':\n return _context12.stop();\n }\n }\n }, _callee12, _this);\n }));\n\n return function (_x29) {\n return _ref16.apply(this, arguments);\n };\n }()));\n\n case 3:\n if (!found) {\n _this.users.push(srcUser);\n }\n\n case 4:\n case 'end':\n return _context13.stop();\n }\n }\n }, _callee13, _this);\n }));\n\n return function (_x28) {\n return _ref15.apply(this, arguments);\n };\n }()));\n\n case 19:\n _context16.next = 21;\n return _promise2.default.all(key.subKeys.map(function () {\n var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(srcSubKey) {\n var found;\n return _regenerator2.default.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n found = false;\n _context15.next = 3;\n return _promise2.default.all(_this.subKeys.map(function () {\n var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(dstSubKey) {\n return _regenerator2.default.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n if (!(srcSubKey.subKey.getFingerprint() === dstSubKey.subKey.getFingerprint())) {\n _context14.next = 4;\n break;\n }\n\n _context14.next = 3;\n return dstSubKey.update(srcSubKey, _this.primaryKey);\n\n case 3:\n found = true;\n\n case 4:\n case 'end':\n return _context14.stop();\n }\n }\n }, _callee14, _this);\n }));\n\n return function (_x31) {\n return _ref18.apply(this, arguments);\n };\n }()));\n\n case 3:\n if (!found) {\n _this.subKeys.push(srcSubKey);\n }\n\n case 4:\n case 'end':\n return _context15.stop();\n }\n }\n }, _callee15, _this);\n }));\n\n return function (_x30) {\n return _ref17.apply(this, arguments);\n };\n }()));\n\n case 21:\n case 'end':\n return _context16.stop();\n }\n }\n }, _callee16, this);\n }));\n\n return function (_x27) {\n return _ref14.apply(this, arguments);\n };\n}();Key.prototype.revoke = function () {\n var _ref21 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19() {\n var _ref22 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref22$flag = _ref22.flag,\n reasonForRevocationFlag = _ref22$flag === undefined ? _enums2.default.reasonForRevocation.no_reason : _ref22$flag,\n _ref22$string = _ref22.string,\n reasonForRevocationString = _ref22$string === undefined ? '' : _ref22$string;\n\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var dataToSign, key;\n return _regenerator2.default.wrap(function _callee19$(_context19) {\n while (1) {\n switch (_context19.prev = _context19.next) {\n case 0:\n if (!this.isPublic()) {\n _context19.next = 2;\n break;\n }\n\n throw new Error('Need private key for revoking');\n\n case 2:\n dataToSign = { key: this.primaryKey };\n key = new Key(this.toPacketlist());\n _context19.t0 = key.revocationSignatures;\n _context19.next = 7;\n return createSignaturePacket(dataToSign, null, this.primaryKey, {\n signatureType: _enums2.default.signature.key_revocation,\n reasonForRevocationFlag: _enums2.default.write(_enums2.default.reasonForRevocation, reasonForRevocationFlag),\n reasonForRevocationString: reasonForRevocationString\n }, date);\n\n case 7:\n _context19.t1 = _context19.sent;\n\n _context19.t0.push.call(_context19.t0, _context19.t1);\n\n return _context19.abrupt('return', key);\n\n case 10:\n case 'end':\n return _context19.stop();\n }\n }\n }, _callee19, this);\n }));\n\n return function () {\n return _ref21.apply(this, arguments);\n };\n}();\n\n/**\n * Get revocation certificate from a revoked key.\n * (To get a revocation certificate for an unrevoked key, call revoke() first.)\n * @return {String} armored revocation certificate\n */\nKey.prototype.getRevocationCertificate = function () {\n if (this.revocationSignatures.length) {\n var packetlist = new _packet2.default.List();\n packetlist.push(getLatestSignature(this.revocationSignatures));\n return _armor2.default.encode(_enums2.default.armor.public_key, packetlist.write(), null, null, 'This is a revocation certificate');\n }\n};\n\n/**\n * Applies a revocation certificate to a key\n * This adds the first signature packet in the armored text to the key,\n * if it is a valid revocation signature.\n * @param {String} revocationCertificate armored revocation certificate\n * @return {module:key~Key} new revoked key\n */\nKey.prototype.applyRevocationCertificate = function () {\n var _ref23 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee20(revocationCertificate) {\n var input, packetlist, revocationSignature, key;\n return _regenerator2.default.wrap(function _callee20$(_context20) {\n while (1) {\n switch (_context20.prev = _context20.next) {\n case 0:\n input = _armor2.default.decode(revocationCertificate);\n packetlist = new _packet2.default.List();\n\n packetlist.read(input.data);\n revocationSignature = packetlist.findPacket(_enums2.default.packet.signature);\n\n if (!(!revocationSignature || revocationSignature.signatureType !== _enums2.default.signature.key_revocation)) {\n _context20.next = 6;\n break;\n }\n\n throw new Error('Could not find revocation signature packet');\n\n case 6:\n if (revocationSignature.issuerKeyId.equals(this.primaryKey.getKeyId())) {\n _context20.next = 8;\n break;\n }\n\n throw new Error('Revocation signature does not match key');\n\n case 8:\n if (!revocationSignature.isExpired()) {\n _context20.next = 10;\n break;\n }\n\n throw new Error('Revocation signature is expired');\n\n case 10:\n _context20.next = 12;\n return revocationSignature.verify(this.primaryKey, { key: this.primaryKey });\n\n case 12:\n if (_context20.sent) {\n _context20.next = 14;\n break;\n }\n\n throw new Error('Could not verify revocation signature');\n\n case 14:\n key = new Key(this.toPacketlist());\n\n key.revocationSignatures.push(revocationSignature);\n return _context20.abrupt('return', key);\n\n case 17:\n case 'end':\n return _context20.stop();\n }\n }\n }, _callee20, this);\n }));\n\n return function (_x39) {\n return _ref23.apply(this, arguments);\n };\n}();\n\n/**\n * Signs primary user of key\n * @param {Array<module:key.Key>} privateKey decrypted private keys for signing\n * @returns {Promise<module:key.Key>} new public key with new certificate signature\n * @async\n */\nKey.prototype.signPrimaryUser = function () {\n var _ref24 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee21(privateKeys) {\n var _ref25, index, user, userSign, key;\n\n return _regenerator2.default.wrap(function _callee21$(_context21) {\n while (1) {\n switch (_context21.prev = _context21.next) {\n case 0:\n _context21.next = 2;\n return this.getPrimaryUser();\n\n case 2:\n _context21.t0 = _context21.sent;\n\n if (_context21.t0) {\n _context21.next = 5;\n break;\n }\n\n _context21.t0 = {};\n\n case 5:\n _ref25 = _context21.t0;\n index = _ref25.index;\n user = _ref25.user;\n\n if (user) {\n _context21.next = 10;\n break;\n }\n\n throw new Error('Could not find primary user');\n\n case 10:\n _context21.next = 12;\n return user.sign(this.primaryKey, privateKeys);\n\n case 12:\n userSign = _context21.sent;\n key = new Key(this.toPacketlist());\n\n key.users[index] = userSign;\n return _context21.abrupt('return', key);\n\n case 16:\n case 'end':\n return _context21.stop();\n }\n }\n }, _callee21, this);\n }));\n\n return function (_x40) {\n return _ref24.apply(this, arguments);\n };\n}();\n\n/**\n * Signs all users of key\n * @param {Array<module:key.Key>} privateKeys decrypted private keys for signing\n * @returns {Promise<module:key.Key>} new public key with new certificate signature\n * @async\n */\nKey.prototype.signAllUsers = function () {\n var _ref26 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee22(privateKeys) {\n var that, key;\n return _regenerator2.default.wrap(function _callee22$(_context22) {\n while (1) {\n switch (_context22.prev = _context22.next) {\n case 0:\n that = this;\n key = new Key(this.toPacketlist());\n _context22.next = 4;\n return _promise2.default.all(this.users.map(function (user) {\n return user.sign(that.primaryKey, privateKeys);\n }));\n\n case 4:\n key.users = _context22.sent;\n return _context22.abrupt('return', key);\n\n case 6:\n case 'end':\n return _context22.stop();\n }\n }\n }, _callee22, this);\n }));\n\n return function (_x41) {\n return _ref26.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies primary user of key\n * - if no arguments are given, verifies the self certificates;\n * - otherwise, verifies all certificates signed with given keys.\n * @param {Array<module:key.Key>} keys array of keys to verify certificate signatures\n * @returns {Promise<Array<{keyid: module:type/keyid,\n * valid: Boolean}>>} List of signer's keyid and validity of signature\n * @async\n */\nKey.prototype.verifyPrimaryUser = function () {\n var _ref27 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee23(keys) {\n var primaryKey, _ref28, user, results;\n\n return _regenerator2.default.wrap(function _callee23$(_context23) {\n while (1) {\n switch (_context23.prev = _context23.next) {\n case 0:\n primaryKey = this.primaryKey;\n _context23.next = 3;\n return this.getPrimaryUser();\n\n case 3:\n _context23.t0 = _context23.sent;\n\n if (_context23.t0) {\n _context23.next = 6;\n break;\n }\n\n _context23.t0 = {};\n\n case 6:\n _ref28 = _context23.t0;\n user = _ref28.user;\n\n if (user) {\n _context23.next = 10;\n break;\n }\n\n throw new Error('Could not find primary user');\n\n case 10:\n if (!keys) {\n _context23.next = 16;\n break;\n }\n\n _context23.next = 13;\n return user.verifyAllCertifications(primaryKey, keys);\n\n case 13:\n _context23.t1 = _context23.sent;\n _context23.next = 24;\n break;\n\n case 16:\n _context23.t2 = primaryKey.keyid;\n _context23.next = 19;\n return user.verify(primaryKey);\n\n case 19:\n _context23.t3 = _context23.sent;\n _context23.t4 = _enums2.default.keyStatus.valid;\n _context23.t5 = _context23.t3 === _context23.t4;\n _context23.t6 = {\n keyid: _context23.t2,\n valid: _context23.t5\n };\n _context23.t1 = [_context23.t6];\n\n case 24:\n results = _context23.t1;\n return _context23.abrupt('return', results);\n\n case 26:\n case 'end':\n return _context23.stop();\n }\n }\n }, _callee23, this);\n }));\n\n return function (_x42) {\n return _ref27.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies all users of key\n * - if no arguments are given, verifies the self certificates;\n * - otherwise, verifies all certificates signed with given keys.\n * @param {Array<module:key.Key>} keys array of keys to verify certificate signatures\n * @returns {Promise<Array<{userid: String,\n * keyid: module:type/keyid,\n * valid: Boolean}>>} list of userid, signer's keyid and validity of signature\n * @async\n */\nKey.prototype.verifyAllUsers = function () {\n var _ref29 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee25(keys) {\n var results, primaryKey;\n return _regenerator2.default.wrap(function _callee25$(_context25) {\n while (1) {\n switch (_context25.prev = _context25.next) {\n case 0:\n results = [];\n primaryKey = this.primaryKey;\n _context25.next = 4;\n return _promise2.default.all(this.users.map(function () {\n var _ref30 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee24(user) {\n var signatures;\n return _regenerator2.default.wrap(function _callee24$(_context24) {\n while (1) {\n switch (_context24.prev = _context24.next) {\n case 0:\n if (!keys) {\n _context24.next = 6;\n break;\n }\n\n _context24.next = 3;\n return user.verifyAllCertifications(primaryKey, keys);\n\n case 3:\n _context24.t0 = _context24.sent;\n _context24.next = 14;\n break;\n\n case 6:\n _context24.t1 = primaryKey.keyid;\n _context24.next = 9;\n return user.verify(primaryKey);\n\n case 9:\n _context24.t2 = _context24.sent;\n _context24.t3 = _enums2.default.keyStatus.valid;\n _context24.t4 = _context24.t2 === _context24.t3;\n _context24.t5 = {\n keyid: _context24.t1,\n valid: _context24.t4\n };\n _context24.t0 = [_context24.t5];\n\n case 14:\n signatures = _context24.t0;\n\n signatures.forEach(function (signature) {\n results.push({\n userid: user.userId.userid,\n keyid: signature.keyid,\n valid: signature.valid\n });\n });\n\n case 16:\n case 'end':\n return _context24.stop();\n }\n }\n }, _callee24, this);\n }));\n\n return function (_x44) {\n return _ref30.apply(this, arguments);\n };\n }()));\n\n case 4:\n return _context25.abrupt('return', results);\n\n case 5:\n case 'end':\n return _context25.stop();\n }\n }\n }, _callee25, this);\n }));\n\n return function (_x43) {\n return _ref29.apply(this, arguments);\n };\n}();\n\n/**\n * @class\n * @classdesc Class that represents an user ID or attribute packet and the relevant signatures.\n */\nfunction User(userPacket) {\n if (!(this instanceof User)) {\n return new User(userPacket);\n }\n this.userId = userPacket.tag === _enums2.default.packet.userid ? userPacket : null;\n this.userAttribute = userPacket.tag === _enums2.default.packet.userAttribute ? userPacket : null;\n this.selfCertifications = [];\n this.otherCertifications = [];\n this.revocationSignatures = [];\n}\n\n/**\n * Transforms structured user data to packetlist\n * @returns {module:packet.List}\n */\nUser.prototype.toPacketlist = function () {\n var packetlist = new _packet2.default.List();\n packetlist.push(this.userId || this.userAttribute);\n packetlist.concat(this.revocationSignatures);\n packetlist.concat(this.selfCertifications);\n packetlist.concat(this.otherCertifications);\n return packetlist;\n};\n\n/**\n * Signs user\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Array<module:key.Key>} privateKeys Decrypted private keys for signing\n * @returns {Promise<module:key.Key>} New user with new certificate signatures\n * @async\n */\nUser.prototype.sign = function () {\n var _ref31 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee27(primaryKey, privateKeys) {\n var dataToSign, user;\n return _regenerator2.default.wrap(function _callee27$(_context27) {\n while (1) {\n switch (_context27.prev = _context27.next) {\n case 0:\n dataToSign = { userid: this.userId || this.userAttribute, key: primaryKey };\n user = new User(dataToSign.userid);\n _context27.next = 4;\n return _promise2.default.all(privateKeys.map(function () {\n var _ref32 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee26(privateKey) {\n var signingKeyPacket;\n return _regenerator2.default.wrap(function _callee26$(_context26) {\n while (1) {\n switch (_context26.prev = _context26.next) {\n case 0:\n if (!privateKey.isPublic()) {\n _context26.next = 2;\n break;\n }\n\n throw new Error('Need private key for signing');\n\n case 2:\n if (!(privateKey.primaryKey.getFingerprint() === primaryKey.getFingerprint())) {\n _context26.next = 4;\n break;\n }\n\n throw new Error('Not implemented for self signing');\n\n case 4:\n _context26.next = 6;\n return privateKey.getSigningKeyPacket();\n\n case 6:\n signingKeyPacket = _context26.sent;\n\n if (signingKeyPacket) {\n _context26.next = 9;\n break;\n }\n\n throw new Error('Could not find valid signing key packet in key ' + privateKey.primaryKey.getKeyId().toHex());\n\n case 9:\n if (signingKeyPacket.isDecrypted) {\n _context26.next = 11;\n break;\n }\n\n throw new Error('Private key is not decrypted.');\n\n case 11:\n return _context26.abrupt('return', createSignaturePacket(dataToSign, privateKey, signingKeyPacket, {\n // Most OpenPGP implementations use generic certification (0x10)\n signatureType: _enums2.default.signature.cert_generic,\n keyFlags: [_enums2.default.keyFlags.certify_keys | _enums2.default.keyFlags.sign_data]\n }));\n\n case 12:\n case 'end':\n return _context26.stop();\n }\n }\n }, _callee26, this);\n }));\n\n return function (_x47) {\n return _ref32.apply(this, arguments);\n };\n }()));\n\n case 4:\n user.otherCertifications = _context27.sent;\n _context27.next = 7;\n return user.update(this, primaryKey);\n\n case 7:\n return _context27.abrupt('return', user);\n\n case 8:\n case 'end':\n return _context27.stop();\n }\n }\n }, _callee27, this);\n }));\n\n return function (_x45, _x46) {\n return _ref31.apply(this, arguments);\n };\n}();\n\n/**\n * Checks if a given certificate of the user is revoked\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {module:packet.Signature} certificate The certificate to verify\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key to verify the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the certificate is revoked\n * @async\n */\nUser.prototype.isRevoked = function () {\n var _ref33 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee28(primaryKey, certificate, key) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n return _regenerator2.default.wrap(function _callee28$(_context28) {\n while (1) {\n switch (_context28.prev = _context28.next) {\n case 0:\n return _context28.abrupt('return', isDataRevoked(primaryKey, {\n key: primaryKey,\n userid: this.userId || this.userAttribute\n }, this.revocationSignatures, certificate, key, date));\n\n case 1:\n case 'end':\n return _context28.stop();\n }\n }\n }, _callee28, this);\n }));\n\n return function (_x48, _x49, _x50) {\n return _ref33.apply(this, arguments);\n };\n}();User.prototype.verifyCertificate = function () {\n var _ref35 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee31(primaryKey, certificate, keys) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n var that, keyid, dataToVerify, results;\n return _regenerator2.default.wrap(function _callee31$(_context31) {\n while (1) {\n switch (_context31.prev = _context31.next) {\n case 0:\n that = this;\n keyid = certificate.issuerKeyId;\n dataToVerify = { userid: this.userId || this.userAttribute, key: primaryKey };\n _context31.next = 5;\n return _promise2.default.all(keys.map(function () {\n var _ref36 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee30(key) {\n var keyPacket;\n return _regenerator2.default.wrap(function _callee30$(_context30) {\n while (1) {\n switch (_context30.prev = _context30.next) {\n case 0:\n if (key.getKeyIds().some(function (id) {\n return id.equals(keyid);\n })) {\n _context30.next = 2;\n break;\n }\n\n return _context30.abrupt('return');\n\n case 2:\n _context30.next = 4;\n return key.getSigningKeyPacket(keyid, date);\n\n case 4:\n keyPacket = _context30.sent;\n _context30.t0 = certificate.revoked;\n\n if (_context30.t0) {\n _context30.next = 10;\n break;\n }\n\n _context30.next = 9;\n return that.isRevoked(primaryKey, certificate, keyPacket);\n\n case 9:\n _context30.t0 = _context30.sent;\n\n case 10:\n if (!_context30.t0) {\n _context30.next = 12;\n break;\n }\n\n return _context30.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 12:\n _context30.t1 = certificate.verified;\n\n if (_context30.t1) {\n _context30.next = 17;\n break;\n }\n\n _context30.next = 16;\n return certificate.verify(keyPacket, dataToVerify);\n\n case 16:\n _context30.t1 = _context30.sent;\n\n case 17:\n if (_context30.t1) {\n _context30.next = 19;\n break;\n }\n\n return _context30.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 19:\n if (!certificate.isExpired()) {\n _context30.next = 21;\n break;\n }\n\n return _context30.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 21:\n return _context30.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 22:\n case 'end':\n return _context30.stop();\n }\n }\n }, _callee30, this);\n }));\n\n return function (_x62) {\n return _ref36.apply(this, arguments);\n };\n }()));\n\n case 5:\n results = _context31.sent;\n return _context31.abrupt('return', results.find(function (result) {\n return result !== undefined;\n }));\n\n case 7:\n case 'end':\n return _context31.stop();\n }\n }\n }, _callee31, this);\n }));\n\n return function (_x58, _x59, _x60) {\n return _ref35.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies all user certificates\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Array<module:key.Key>} keys Array of keys to verify certificate signatures\n * @returns {Promise<Array<{keyid: module:type/keyid,\n * valid: Boolean}>>} List of signer's keyid and validity of signature\n * @async\n */\nUser.prototype.verifyAllCertifications = function () {\n var _ref37 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee33(primaryKey, keys) {\n var that, certifications;\n return _regenerator2.default.wrap(function _callee33$(_context33) {\n while (1) {\n switch (_context33.prev = _context33.next) {\n case 0:\n that = this;\n certifications = this.selfCertifications.concat(this.otherCertifications);\n return _context33.abrupt('return', _promise2.default.all(certifications.map(function () {\n var _ref38 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee32(certification) {\n var status;\n return _regenerator2.default.wrap(function _callee32$(_context32) {\n while (1) {\n switch (_context32.prev = _context32.next) {\n case 0:\n _context32.next = 2;\n return that.verifyCertificate(primaryKey, certification, keys);\n\n case 2:\n status = _context32.sent;\n return _context32.abrupt('return', {\n keyid: certification.issuerKeyId,\n valid: status === undefined ? null : status === _enums2.default.keyStatus.valid\n });\n\n case 4:\n case 'end':\n return _context32.stop();\n }\n }\n }, _callee32, this);\n }));\n\n return function (_x65) {\n return _ref38.apply(this, arguments);\n };\n }())));\n\n case 3:\n case 'end':\n return _context33.stop();\n }\n }\n }, _callee33, this);\n }));\n\n return function (_x63, _x64) {\n return _ref37.apply(this, arguments);\n };\n}();\n\n/**\n * Verify User. Checks for existence of self signatures, revocation signatures\n * and validity of self signature\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @returns {Promise<module:enums.keyStatus>} Status of user\n * @async\n */\nUser.prototype.verify = function () {\n var _ref39 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee35(primaryKey) {\n var that, dataToVerify, results;\n return _regenerator2.default.wrap(function _callee35$(_context35) {\n while (1) {\n switch (_context35.prev = _context35.next) {\n case 0:\n if (this.selfCertifications.length) {\n _context35.next = 2;\n break;\n }\n\n return _context35.abrupt('return', _enums2.default.keyStatus.no_self_cert);\n\n case 2:\n that = this;\n dataToVerify = { userid: this.userId || this.userAttribute, key: primaryKey };\n // TODO replace when Promise.some or Promise.any are implemented\n\n _context35.t0 = [_enums2.default.keyStatus.invalid];\n _context35.next = 7;\n return _promise2.default.all(this.selfCertifications.map(function () {\n var _ref40 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee34(selfCertification) {\n return _regenerator2.default.wrap(function _callee34$(_context34) {\n while (1) {\n switch (_context34.prev = _context34.next) {\n case 0:\n _context34.t0 = selfCertification.revoked;\n\n if (_context34.t0) {\n _context34.next = 5;\n break;\n }\n\n _context34.next = 4;\n return that.isRevoked(primaryKey, selfCertification);\n\n case 4:\n _context34.t0 = _context34.sent;\n\n case 5:\n if (!_context34.t0) {\n _context34.next = 7;\n break;\n }\n\n return _context34.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 7:\n _context34.t1 = selfCertification.verified;\n\n if (_context34.t1) {\n _context34.next = 12;\n break;\n }\n\n _context34.next = 11;\n return selfCertification.verify(primaryKey, dataToVerify);\n\n case 11:\n _context34.t1 = _context34.sent;\n\n case 12:\n if (_context34.t1) {\n _context34.next = 14;\n break;\n }\n\n return _context34.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 14:\n if (!selfCertification.isExpired()) {\n _context34.next = 16;\n break;\n }\n\n return _context34.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 16:\n return _context34.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 17:\n case 'end':\n return _context34.stop();\n }\n }\n }, _callee34, this);\n }));\n\n return function (_x67) {\n return _ref40.apply(this, arguments);\n };\n }()));\n\n case 7:\n _context35.t1 = _context35.sent;\n results = _context35.t0.concat.call(_context35.t0, _context35.t1);\n return _context35.abrupt('return', results.some(function (status) {\n return status === _enums2.default.keyStatus.valid;\n }) ? _enums2.default.keyStatus.valid : results.pop());\n\n case 10:\n case 'end':\n return _context35.stop();\n }\n }\n }, _callee35, this);\n }));\n\n return function (_x66) {\n return _ref39.apply(this, arguments);\n };\n}();\n\n/**\n * Update user with new components from specified user\n * @param {module:key.User} user Source user to merge\n * @param {module:packet.SecretKey|\n * module:packet.SecretSubkey} primaryKey primary key used for validation\n */\nUser.prototype.update = function () {\n var _ref41 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee37(user, primaryKey) {\n var dataToVerify;\n return _regenerator2.default.wrap(function _callee37$(_context37) {\n while (1) {\n switch (_context37.prev = _context37.next) {\n case 0:\n dataToVerify = { userid: this.userId || this.userAttribute, key: primaryKey };\n // self signatures\n\n _context37.next = 3;\n return mergeSignatures(user, this, 'selfCertifications', function () {\n var _ref42 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee36(srcSelfSig) {\n return _regenerator2.default.wrap(function _callee36$(_context36) {\n while (1) {\n switch (_context36.prev = _context36.next) {\n case 0:\n return _context36.abrupt('return', srcSelfSig.verified || srcSelfSig.verify(primaryKey, dataToVerify));\n\n case 1:\n case 'end':\n return _context36.stop();\n }\n }\n }, _callee36, this);\n }));\n\n return function (_x70) {\n return _ref42.apply(this, arguments);\n };\n }());\n\n case 3:\n _context37.next = 5;\n return mergeSignatures(user, this, 'otherCertifications');\n\n case 5:\n _context37.next = 7;\n return mergeSignatures(user, this, 'revocationSignatures', function (srcRevSig) {\n return isDataRevoked(primaryKey, dataToVerify, [srcRevSig]);\n });\n\n case 7:\n case 'end':\n return _context37.stop();\n }\n }\n }, _callee37, this);\n }));\n\n return function (_x68, _x69) {\n return _ref41.apply(this, arguments);\n };\n}();\n\n/**\n * @class\n * @classdesc Class that represents a subkey packet and the relevant signatures.\n */\nfunction SubKey(subKeyPacket) {\n if (!(this instanceof SubKey)) {\n return new SubKey(subKeyPacket);\n }\n this.subKey = subKeyPacket;\n this.bindingSignatures = [];\n this.revocationSignatures = [];\n}\n\n/**\n * Transforms structured subkey data to packetlist\n * @returns {module:packet.List}\n */\nSubKey.prototype.toPacketlist = function () {\n var packetlist = new _packet2.default.List();\n packetlist.push(this.subKey);\n packetlist.concat(this.revocationSignatures);\n packetlist.concat(this.bindingSignatures);\n return packetlist;\n};\n\n/**\n * Checks if a binding signature of a subkey is revoked\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {module:packet.Signature} signature The binding signature to verify\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key to verify the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the binding signature is revoked\n * @async\n */\nSubKey.prototype.isRevoked = function () {\n var _ref43 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee38(primaryKey, signature, key) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n return _regenerator2.default.wrap(function _callee38$(_context38) {\n while (1) {\n switch (_context38.prev = _context38.next) {\n case 0:\n return _context38.abrupt('return', isDataRevoked(primaryKey, {\n key: primaryKey,\n bind: this.subKey\n }, this.revocationSignatures, signature, key, date));\n\n case 1:\n case 'end':\n return _context38.stop();\n }\n }\n }, _callee38, this);\n }));\n\n return function (_x71, _x72, _x73) {\n return _ref43.apply(this, arguments);\n };\n}();\n\n/**\n * Verify subkey. Checks for revocation signatures, expiration time\n * and valid binding signature\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<module:enums.keyStatus>} The status of the subkey\n * @async\n */\nSubKey.prototype.verify = function () {\n var _ref44 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee39(primaryKey) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var that, dataToVerify, bindingSignature;\n return _regenerator2.default.wrap(function _callee39$(_context39) {\n while (1) {\n switch (_context39.prev = _context39.next) {\n case 0:\n that = this;\n dataToVerify = { key: primaryKey, bind: this.subKey };\n // check for V3 expiration time\n\n if (!(this.subKey.version === 3 && isDataExpired(this.subKey, null, date))) {\n _context39.next = 4;\n break;\n }\n\n return _context39.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 4:\n // check subkey binding signatures\n bindingSignature = getLatestSignature(this.bindingSignatures, date);\n // check binding signature is verified\n\n _context39.t0 = bindingSignature.verified;\n\n if (_context39.t0) {\n _context39.next = 10;\n break;\n }\n\n _context39.next = 9;\n return bindingSignature.verify(primaryKey, dataToVerify);\n\n case 9:\n _context39.t0 = _context39.sent;\n\n case 10:\n if (_context39.t0) {\n _context39.next = 12;\n break;\n }\n\n return _context39.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 12:\n _context39.t1 = bindingSignature.revoked;\n\n if (_context39.t1) {\n _context39.next = 17;\n break;\n }\n\n _context39.next = 16;\n return that.isRevoked(primaryKey, bindingSignature, null, date);\n\n case 16:\n _context39.t1 = _context39.sent;\n\n case 17:\n if (!_context39.t1) {\n _context39.next = 19;\n break;\n }\n\n return _context39.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 19:\n if (!bindingSignature.isExpired(date)) {\n _context39.next = 21;\n break;\n }\n\n return _context39.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 21:\n return _context39.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 22:\n case 'end':\n return _context39.stop();\n }\n }\n }, _callee39, this);\n }));\n\n return function (_x75) {\n return _ref44.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the expiration time of the subkey or Infinity if key does not expire\n * @param {Date} date Use the given date instead of the current time\n * @returns {Date}\n */\nSubKey.prototype.getExpirationTime = function () {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n var bindingSignature = getLatestSignature(this.bindingSignatures, date);\n var keyExpiry = getExpirationTime(this.subKey, bindingSignature);\n var sigExpiry = bindingSignature.getExpirationTime();\n return keyExpiry < sigExpiry ? keyExpiry : sigExpiry;\n};\n\n/**\n * Update subkey with new components from specified subkey\n * @param {module:key.SubKey} subKey Source subkey to merge\n * @param {module:packet.SecretKey|\n module:packet.SecretSubkey} primaryKey primary key used for validation\n */\nSubKey.prototype.update = function () {\n var _ref45 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee41(subKey, primaryKey) {\n var that, dataToVerify;\n return _regenerator2.default.wrap(function _callee41$(_context41) {\n while (1) {\n switch (_context41.prev = _context41.next) {\n case 0:\n _context41.next = 2;\n return subKey.verify(primaryKey);\n\n case 2:\n _context41.t0 = _context41.sent;\n _context41.t1 = _enums2.default.keyStatus.invalid;\n\n if (!(_context41.t0 === _context41.t1)) {\n _context41.next = 6;\n break;\n }\n\n return _context41.abrupt('return');\n\n case 6:\n if (!(this.subKey.getFingerprint() !== subKey.subKey.getFingerprint())) {\n _context41.next = 8;\n break;\n }\n\n throw new Error('SubKey update method: fingerprints of subkeys not equal');\n\n case 8:\n // key packet\n if (this.subKey.tag === _enums2.default.packet.publicSubkey && subKey.subKey.tag === _enums2.default.packet.secretSubkey) {\n this.subKey = subKey.subKey;\n }\n // update missing binding signatures\n that = this;\n dataToVerify = { key: primaryKey, bind: that.subKey };\n _context41.next = 13;\n return mergeSignatures(subKey, this, 'bindingSignatures', function () {\n var _ref46 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee40(srcBindSig) {\n var i;\n return _regenerator2.default.wrap(function _callee40$(_context40) {\n while (1) {\n switch (_context40.prev = _context40.next) {\n case 0:\n _context40.t0 = srcBindSig.verified;\n\n if (_context40.t0) {\n _context40.next = 5;\n break;\n }\n\n _context40.next = 4;\n return srcBindSig.verify(primaryKey, dataToVerify);\n\n case 4:\n _context40.t0 = _context40.sent;\n\n case 5:\n if (_context40.t0) {\n _context40.next = 7;\n break;\n }\n\n return _context40.abrupt('return', false);\n\n case 7:\n i = 0;\n\n case 8:\n if (!(i < that.bindingSignatures.length)) {\n _context40.next = 16;\n break;\n }\n\n if (!that.bindingSignatures[i].issuerKeyId.equals(srcBindSig.issuerKeyId)) {\n _context40.next = 13;\n break;\n }\n\n if (!(srcBindSig.created < that.bindingSignatures[i].created)) {\n _context40.next = 13;\n break;\n }\n\n that.bindingSignatures[i] = srcBindSig;\n return _context40.abrupt('return', false);\n\n case 13:\n i++;\n _context40.next = 8;\n break;\n\n case 16:\n return _context40.abrupt('return', true);\n\n case 17:\n case 'end':\n return _context40.stop();\n }\n }\n }, _callee40, this);\n }));\n\n return function (_x80) {\n return _ref46.apply(this, arguments);\n };\n }());\n\n case 13:\n _context41.next = 15;\n return mergeSignatures(subKey, this, 'revocationSignatures', function (srcRevSig) {\n return isDataRevoked(primaryKey, dataToVerify, [srcRevSig]);\n });\n\n case 15:\n case 'end':\n return _context41.stop();\n }\n }\n }, _callee41, this);\n }));\n\n return function (_x78, _x79) {\n return _ref45.apply(this, arguments);\n };\n}();\n\n/**\n * Revokes the subkey\n * @param {module:packet.SecretKey} primaryKey decrypted private primary key for revocation\n * @param {Object} reasonForRevocation optional, object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n * @param {String} reasonForRevocation.string optional, string explaining the reason for revocation\n * @param {Date} date optional, override the creationtime of the revocation signature\n * @return {module:key~SubKey} new subkey with revocation signature\n */\nSubKey.prototype.revoke = function () {\n var _ref47 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee42(primaryKey) {\n var _ref48 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref48$flag = _ref48.flag,\n reasonForRevocationFlag = _ref48$flag === undefined ? _enums2.default.reasonForRevocation.no_reason : _ref48$flag,\n _ref48$string = _ref48.string,\n reasonForRevocationString = _ref48$string === undefined ? '' : _ref48$string;\n\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var dataToSign, subKey;\n return _regenerator2.default.wrap(function _callee42$(_context42) {\n while (1) {\n switch (_context42.prev = _context42.next) {\n case 0:\n dataToSign = { key: primaryKey, bind: this.subKey };\n subKey = new SubKey(this.subKey);\n _context42.t0 = subKey.revocationSignatures;\n _context42.next = 5;\n return createSignaturePacket(dataToSign, null, primaryKey, {\n signatureType: _enums2.default.signature.subkey_revocation,\n reasonForRevocationFlag: _enums2.default.write(_enums2.default.reasonForRevocation, reasonForRevocationFlag),\n reasonForRevocationString: reasonForRevocationString\n }, date);\n\n case 5:\n _context42.t1 = _context42.sent;\n\n _context42.t0.push.call(_context42.t0, _context42.t1);\n\n _context42.next = 9;\n return subKey.update(this, primaryKey);\n\n case 9:\n return _context42.abrupt('return', subKey);\n\n case 10:\n case 'end':\n return _context42.stop();\n }\n }\n }, _callee42, this);\n }));\n\n return function (_x81) {\n return _ref47.apply(this, arguments);\n };\n}();\n\n/**\n * Reads an unarmored OpenPGP key list and returns one or multiple key objects\n * @param {Uint8Array} data to be parsed\n * @returns {{keys: Array<module:key.Key>,\n * err: (Array<Error>|null)}} result object with key and error arrays\n * @static\n */\nfunction read(data) {\n var result = {};\n result.keys = [];\n try {\n var packetlist = new _packet2.default.List();\n packetlist.read(data);\n var keyIndex = packetlist.indexOfTag(_enums2.default.packet.publicKey, _enums2.default.packet.secretKey);\n if (keyIndex.length === 0) {\n throw new Error('No key packet found');\n }\n for (var i = 0; i < keyIndex.length; i++) {\n var oneKeyList = packetlist.slice(keyIndex[i], keyIndex[i + 1]);\n try {\n var newKey = new Key(oneKeyList);\n result.keys.push(newKey);\n } catch (e) {\n result.err = result.err || [];\n result.err.push(e);\n }\n }\n } catch (e) {\n result.err = result.err || [];\n result.err.push(e);\n }\n return result;\n}\n\n/**\n * Reads an OpenPGP armored text and returns one or multiple key objects\n * @param {String} armoredText text to be parsed\n * @returns {{keys: Array<module:key.Key>,\n * err: (Array<Error>|null)}} result object with key and error arrays\n * @static\n */\nfunction readArmored(armoredText) {\n try {\n var input = _armor2.default.decode(armoredText);\n if (!(input.type === _enums2.default.armor.public_key || input.type === _enums2.default.armor.private_key)) {\n throw new Error('Armored text not of type key');\n }\n return read(input.data);\n } catch (e) {\n var result = { keys: [], err: [] };\n result.err.push(e);\n return result;\n }\n}\n\nfunction isDataExpired(keyPacket, signature) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n var normDate = _util2.default.normalizeDate(date);\n if (normDate !== null) {\n var expirationTime = getExpirationTime(keyPacket, signature);\n return !(keyPacket.created <= normDate && normDate < expirationTime) || signature && signature.isExpired(date);\n }\n return false;\n}\n\nfunction getExpirationTime(keyPacket, signature) {\n var expirationTime = void 0;\n // check V3 expiration time\n if (keyPacket.version === 3 && keyPacket.expirationTimeV3 !== 0) {\n expirationTime = keyPacket.created.getTime() + keyPacket.expirationTimeV3 * 24 * 3600 * 1000;\n }\n // check V4 expiration time\n if (keyPacket.version >= 4 && signature.keyNeverExpires === false) {\n expirationTime = keyPacket.created.getTime() + signature.keyExpirationTime * 1000;\n }\n return expirationTime ? new Date(expirationTime) : Infinity;\n}\n\n},{\"./config\":325,\"./crypto\":340,\"./encoding/armor\":357,\"./enums\":359,\"./packet\":371,\"./util\":398,\"babel-runtime/core-js/object/assign\":24,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/core-js/object/values\":31,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/slicedToArray\":40,\"babel-runtime/regenerator\":42}],363:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _keyring = _dereq_('./keyring.js');\n\nvar _keyring2 = _interopRequireDefault(_keyring);\n\nvar _localstore = _dereq_('./localstore.js');\n\nvar _localstore2 = _interopRequireDefault(_localstore);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview Functions dealing with storage of the keyring.\n * @see module:keyring/keyring\n * @see module:keyring/localstore\n * @module keyring\n */\n_keyring2.default.localstore = _localstore2.default;\n\nexports.default = _keyring2.default;\n\n},{\"./keyring.js\":364,\"./localstore.js\":365}],364:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _key = _dereq_('../key');\n\nvar _localstore = _dereq_('./localstore');\n\nvar _localstore2 = _interopRequireDefault(_localstore);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initialization routine for the keyring.\n * This method reads the keyring from HTML5 local storage and initializes this instance.\n * @constructor\n * @param {keyring/localstore} [storeHandler] class implementing loadPublic(), loadPrivate(), storePublic(), and storePrivate() methods\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides the Keyring class\n * @requires key\n * @requires keyring/localstore\n * @module keyring/keyring\n */\n\nfunction Keyring(storeHandler) {\n this.storeHandler = storeHandler || new _localstore2.default();\n this.publicKeys = new KeyArray(this.storeHandler.loadPublic());\n this.privateKeys = new KeyArray(this.storeHandler.loadPrivate());\n}\n\n/**\n * Calls the storeHandler to save the keys\n */\nKeyring.prototype.store = function () {\n this.storeHandler.storePublic(this.publicKeys.keys);\n this.storeHandler.storePrivate(this.privateKeys.keys);\n};\n\n/**\n * Clear the keyring - erase all the keys\n */\nKeyring.prototype.clear = function () {\n this.publicKeys.keys = [];\n this.privateKeys.keys = [];\n};\n\n/**\n * Searches the keyring for keys having the specified key id\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @param {Boolean} deep if true search also in subkeys\n * @returns {Array<module:key.Key>|null} keys found or null\n */\nKeyring.prototype.getKeysForId = function (keyId, deep) {\n var result = [];\n result = result.concat(this.publicKeys.getForId(keyId, deep) || []);\n result = result.concat(this.privateKeys.getForId(keyId, deep) || []);\n return result.length ? result : null;\n};\n\n/**\n * Removes keys having the specified key id from the keyring\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @returns {Array<module:key.Key>|null} keys found or null\n */\nKeyring.prototype.removeKeysForId = function (keyId) {\n var result = [];\n result = result.concat(this.publicKeys.removeForId(keyId) || []);\n result = result.concat(this.privateKeys.removeForId(keyId) || []);\n return result.length ? result : null;\n};\n\n/**\n * Get all public and private keys\n * @returns {Array<module:key.Key>} all keys\n */\nKeyring.prototype.getAllKeys = function () {\n return this.publicKeys.keys.concat(this.privateKeys.keys);\n};\n\n/**\n * Array of keys\n * @param {Array<module:key.Key>} keys The keys to store in this array\n */\nfunction KeyArray(keys) {\n this.keys = keys;\n}\n\n/**\n * Searches all keys in the KeyArray matching the address or address part of the user ids\n * @param {String} email email address to search for\n * @returns {Array<module:key.Key>} The public keys associated with provided email address.\n */\nKeyArray.prototype.getForAddress = function (email) {\n var results = [];\n for (var i = 0; i < this.keys.length; i++) {\n if (emailCheck(email, this.keys[i])) {\n results.push(this.keys[i]);\n }\n }\n return results;\n};\n\n/**\n * Checks a key to see if it matches the specified email address\n * @private\n * @param {String} email email address to search for\n * @param {module:key.Key} key The key to be checked.\n * @returns {Boolean} True if the email address is defined in the specified key\n */\nfunction emailCheck(email, key) {\n email = email.toLowerCase();\n // escape email before using in regular expression\n var emailEsc = email.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n var emailRegex = new RegExp('<' + emailEsc + '>');\n var userIds = key.getUserIds();\n for (var i = 0; i < userIds.length; i++) {\n var userId = userIds[i].toLowerCase();\n if (email === userId || emailRegex.test(userId)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Checks a key to see if it matches the specified keyid\n * @private\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @param {module:packet.SecretKey|public_key|public_subkey|secret_subkey} keypacket The keypacket to be checked\n * @returns {Boolean} True if keypacket has the specified keyid\n */\nfunction keyIdCheck(keyId, keypacket) {\n if (keyId.length === 16) {\n return keyId === keypacket.getKeyId().toHex();\n }\n return keyId === keypacket.getFingerprint();\n}\n\n/**\n * Searches the KeyArray for a key having the specified key id\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @param {Boolean} deep if true search also in subkeys\n * @returns {module:key.Key|null} key found or null\n */\nKeyArray.prototype.getForId = function (keyId, deep) {\n for (var i = 0; i < this.keys.length; i++) {\n if (keyIdCheck(keyId, this.keys[i].primaryKey)) {\n return this.keys[i];\n }\n if (deep && this.keys[i].subKeys.length) {\n for (var j = 0; j < this.keys[i].subKeys.length; j++) {\n if (keyIdCheck(keyId, this.keys[i].subKeys[j].subKey)) {\n return this.keys[i];\n }\n }\n }\n }\n return null;\n};\n\n/**\n * Imports a key from an ascii armored message\n * @param {String} armored message to read the keys/key from\n * @returns {Promise<Array<Error>|null>} array of error objects or null\n * @async\n */\nKeyArray.prototype.importKey = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(armored) {\n var imported, i, key, keyidHex, keyFound;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n imported = (0, _key.readArmored)(armored);\n i = 0;\n\n case 2:\n if (!(i < imported.keys.length)) {\n _context.next = 15;\n break;\n }\n\n key = imported.keys[i];\n // check if key already in key array\n\n keyidHex = key.primaryKey.getKeyId().toHex();\n keyFound = this.getForId(keyidHex);\n\n if (!keyFound) {\n _context.next = 11;\n break;\n }\n\n _context.next = 9;\n return keyFound.update(key);\n\n case 9:\n _context.next = 12;\n break;\n\n case 11:\n this.push(key);\n\n case 12:\n i++;\n _context.next = 2;\n break;\n\n case 15:\n return _context.abrupt('return', imported.err ? imported.err : null);\n\n case 16:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Add key to KeyArray\n * @param {module:key.Key} key The key that will be added to the keyring\n * @returns {Number} The new length of the KeyArray\n */\nKeyArray.prototype.push = function (key) {\n return this.keys.push(key);\n};\n\n/**\n * Removes a key with the specified keyid from the keyring\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @returns {module:key.Key|null} The key object which has been removed or null\n */\nKeyArray.prototype.removeForId = function (keyId) {\n for (var i = 0; i < this.keys.length; i++) {\n if (keyIdCheck(keyId, this.keys[i].primaryKey)) {\n return this.keys.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexports.default = Keyring;\n\n},{\"../key\":362,\"./localstore\":365,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],365:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _stringify = _dereq_('babel-runtime/core-js/json/stringify');\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _key = _dereq_('../key');\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The class that deals with storage of the keyring.\n * Currently the only option is to use HTML5 local storage.\n * @constructor\n * @param {String} prefix prefix for itemnames in localstore\n */\nfunction LocalStore(prefix) {\n prefix = prefix || 'openpgp-';\n this.publicKeysItem = prefix + this.publicKeysItem;\n this.privateKeysItem = prefix + this.privateKeysItem;\n if (typeof window !== 'undefined' && window.localStorage) {\n this.storage = window.localStorage;\n } else {\n this.storage = new (_dereq_('node-localstorage').LocalStorage)(_config2.default.node_store);\n }\n}\n\n/*\n * Declare the localstore itemnames\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides the LocalStore class\n * @requires config\n * @requires key\n * @requires util\n * @module keyring/localstore\n */\n\nLocalStore.prototype.publicKeysItem = 'public-keys';\nLocalStore.prototype.privateKeysItem = 'private-keys';\n\n/**\n * Load the public keys from HTML5 local storage.\n * @returns {Array<module:key.Key>} array of keys retrieved from localstore\n */\nLocalStore.prototype.loadPublic = function () {\n return loadKeys(this.storage, this.publicKeysItem);\n};\n\n/**\n * Load the private keys from HTML5 local storage.\n * @returns {Array<module:key.Key>} array of keys retrieved from localstore\n */\nLocalStore.prototype.loadPrivate = function () {\n return loadKeys(this.storage, this.privateKeysItem);\n};\n\nfunction loadKeys(storage, itemname) {\n var armoredKeys = JSON.parse(storage.getItem(itemname));\n var keys = [];\n if (armoredKeys !== null && armoredKeys.length !== 0) {\n var key = void 0;\n for (var i = 0; i < armoredKeys.length; i++) {\n key = (0, _key.readArmored)(armoredKeys[i]);\n if (!key.err) {\n keys.push(key.keys[0]);\n } else {\n _util2.default.print_debug(\"Error reading armored key from keyring index: \" + i);\n }\n }\n }\n return keys;\n}\n\n/**\n * Saves the current state of the public keys to HTML5 local storage.\n * The key array gets stringified using JSON\n * @param {Array<module:key.Key>} keys array of keys to save in localstore\n */\nLocalStore.prototype.storePublic = function (keys) {\n storeKeys(this.storage, this.publicKeysItem, keys);\n};\n\n/**\n * Saves the current state of the private keys to HTML5 local storage.\n * The key array gets stringified using JSON\n * @param {Array<module:key.Key>} keys array of keys to save in localstore\n */\nLocalStore.prototype.storePrivate = function (keys) {\n storeKeys(this.storage, this.privateKeysItem, keys);\n};\n\nfunction storeKeys(storage, itemname, keys) {\n var armoredKeys = [];\n if (keys.length) {\n for (var i = 0; i < keys.length; i++) {\n armoredKeys.push(keys[i].armor());\n }\n storage.setItem(itemname, (0, _stringify2.default)(armoredKeys));\n } else {\n storage.removeItem(itemname);\n }\n}\n\nexports.default = LocalStore;\n\n},{\"../config\":325,\"../key\":362,\"../util\":398,\"babel-runtime/core-js/json/stringify\":23,\"node-localstorage\":\"node-localstorage\"}],366:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createVerificationObjects = exports.createSignaturePackets = exports.encryptSessionKey = undefined;\n\nvar _from = _dereq_('babel-runtime/core-js/array/from');\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Encrypt a session key either with public keys, passwords, or both at once.\n * @param {Uint8Array} sessionKey session key for encryption\n * @param {String} symAlgo session key algorithm\n * @param {String} aeadAlgo (optional) aead algorithm, e.g. 'eax' or 'ocb'\n * @param {Array<Key>} publicKeys (optional) public key(s) for message encryption\n * @param {Array<String>} passwords (optional) for message encryption\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the date\n * @param {Object} userId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' }\n * @returns {Promise<Message>} new message with encrypted content\n * @async\n */\nvar encryptSessionKey = exports.encryptSessionKey = function () {\n var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(sessionKey, symAlgo, aeadAlgo, publicKeys, passwords) {\n var wildcard = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var date = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new Date();\n var userId = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : {};\n\n var packetlist, results, testDecrypt, sum, encryptPassword, _results;\n\n return _regenerator2.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n packetlist = new _packet2.default.List();\n\n if (!publicKeys) {\n _context11.next = 6;\n break;\n }\n\n _context11.next = 4;\n return _promise2.default.all(publicKeys.map(function () {\n var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(publicKey) {\n var encryptionKeyPacket, pkESKeyPacket;\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n _context8.next = 2;\n return publicKey.getEncryptionKeyPacket(undefined, date, userId);\n\n case 2:\n encryptionKeyPacket = _context8.sent;\n\n if (encryptionKeyPacket) {\n _context8.next = 5;\n break;\n }\n\n throw new Error('Could not find valid key packet for encryption in key ' + publicKey.primaryKey.getKeyId().toHex());\n\n case 5:\n pkESKeyPacket = new _packet2.default.PublicKeyEncryptedSessionKey();\n\n pkESKeyPacket.publicKeyId = wildcard ? _keyid2.default.wildcard() : encryptionKeyPacket.getKeyId();\n pkESKeyPacket.publicKeyAlgorithm = encryptionKeyPacket.algorithm;\n pkESKeyPacket.sessionKey = sessionKey;\n pkESKeyPacket.sessionKeyAlgorithm = symAlgo;\n _context8.next = 12;\n return pkESKeyPacket.encrypt(encryptionKeyPacket);\n\n case 12:\n delete pkESKeyPacket.sessionKey; // delete plaintext session key after encryption\n return _context8.abrupt('return', pkESKeyPacket);\n\n case 14:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x24) {\n return _ref9.apply(this, arguments);\n };\n }()));\n\n case 4:\n results = _context11.sent;\n\n packetlist.concat(results);\n\n case 6:\n if (!passwords) {\n _context11.next = 14;\n break;\n }\n\n testDecrypt = function () {\n var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(keyPacket, password) {\n return _regenerator2.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n _context9.prev = 0;\n _context9.next = 3;\n return keyPacket.decrypt(password);\n\n case 3:\n return _context9.abrupt('return', 1);\n\n case 6:\n _context9.prev = 6;\n _context9.t0 = _context9['catch'](0);\n return _context9.abrupt('return', 0);\n\n case 9:\n case 'end':\n return _context9.stop();\n }\n }\n }, _callee9, this, [[0, 6]]);\n }));\n\n return function testDecrypt(_x25, _x26) {\n return _ref10.apply(this, arguments);\n };\n }();\n\n sum = function sum(accumulator, currentValue) {\n return accumulator + currentValue;\n };\n\n encryptPassword = function () {\n var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(sessionKey, symAlgo, aeadAlgo, password) {\n var symEncryptedSessionKeyPacket, _results2;\n\n return _regenerator2.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n symEncryptedSessionKeyPacket = new _packet2.default.SymEncryptedSessionKey();\n\n symEncryptedSessionKeyPacket.sessionKey = sessionKey;\n symEncryptedSessionKeyPacket.sessionKeyAlgorithm = symAlgo;\n if (aeadAlgo) {\n symEncryptedSessionKeyPacket.aeadAlgorithm = aeadAlgo;\n }\n _context10.next = 6;\n return symEncryptedSessionKeyPacket.encrypt(password);\n\n case 6:\n if (!_config2.default.password_collision_check) {\n _context10.next = 12;\n break;\n }\n\n _context10.next = 9;\n return _promise2.default.all(passwords.map(function (pwd) {\n return testDecrypt(symEncryptedSessionKeyPacket, pwd);\n }));\n\n case 9:\n _results2 = _context10.sent;\n\n if (!(_results2.reduce(sum) !== 1)) {\n _context10.next = 12;\n break;\n }\n\n return _context10.abrupt('return', encryptPassword(sessionKey, symAlgo, password));\n\n case 12:\n\n delete symEncryptedSessionKeyPacket.sessionKey; // delete plaintext session key after encryption\n return _context10.abrupt('return', symEncryptedSessionKeyPacket);\n\n case 14:\n case 'end':\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n\n return function encryptPassword(_x27, _x28, _x29, _x30) {\n return _ref11.apply(this, arguments);\n };\n }();\n\n _context11.next = 12;\n return _promise2.default.all(passwords.map(function (pwd) {\n return encryptPassword(sessionKey, symAlgo, aeadAlgo, pwd);\n }));\n\n case 12:\n _results = _context11.sent;\n\n packetlist.concat(_results);\n\n case 14:\n return _context11.abrupt('return', new Message(packetlist));\n\n case 15:\n case 'end':\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function encryptSessionKey(_x16, _x17, _x18, _x19, _x20) {\n return _ref8.apply(this, arguments);\n };\n}();\n\n/**\n * Sign the message (the literal data packet of the message)\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature to add to the message\n * @param {Date} date (optional) override the creation time of the signature\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<Message>} new message with signed content\n * @async\n */\n\n\n/**\n * Create signature packets for the message\n * @param {module:packet.Literal} literalDataPacket the literal data packet to sign\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature to append\n * @param {Date} date (optional) override the creationtime of the signature\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:packet.List>} list of signature packets\n * @async\n */\nvar createSignaturePackets = exports.createSignaturePackets = function () {\n var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(literalDataPacket, privateKeys) {\n var signature = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var _this = this;\n\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n var userId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var packetlist, signatureType, existingSigPacketlist;\n return _regenerator2.default.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n packetlist = new _packet2.default.List();\n\n // If data packet was created from Uint8Array, use binary, otherwise use text\n\n signatureType = literalDataPacket.text === null ? _enums2.default.signature.binary : _enums2.default.signature.text;\n _context16.next = 4;\n return _promise2.default.all(privateKeys.map(function () {\n var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(privateKey) {\n var signingKeyPacket;\n return _regenerator2.default.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n if (!privateKey.isPublic()) {\n _context15.next = 2;\n break;\n }\n\n throw new Error('Need private key for signing');\n\n case 2:\n _context15.next = 4;\n return privateKey.getSigningKeyPacket(undefined, date, userId);\n\n case 4:\n signingKeyPacket = _context15.sent;\n\n if (signingKeyPacket) {\n _context15.next = 7;\n break;\n }\n\n throw new Error('Could not find valid signing key packet in key ' + privateKey.primaryKey.getKeyId().toHex());\n\n case 7:\n return _context15.abrupt('return', (0, _key.createSignaturePacket)(literalDataPacket, privateKey, signingKeyPacket, { signatureType: signatureType }, date, userId));\n\n case 8:\n case 'end':\n return _context15.stop();\n }\n }\n }, _callee15, _this);\n }));\n\n return function (_x46) {\n return _ref16.apply(this, arguments);\n };\n }())).then(function (signatureList) {\n signatureList.forEach(function (signaturePacket) {\n return packetlist.push(signaturePacket);\n });\n });\n\n case 4:\n\n if (signature) {\n existingSigPacketlist = signature.packets.filterByTag(_enums2.default.packet.signature);\n\n packetlist.concat(existingSigPacketlist);\n }\n return _context16.abrupt('return', packetlist);\n\n case 6:\n case 'end':\n return _context16.stop();\n }\n }\n }, _callee16, this);\n }));\n\n return function createSignaturePackets(_x41, _x42) {\n return _ref15.apply(this, arguments);\n };\n}();\n\n/**\n * Verify message signatures\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date (optional) Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<({keyid: module:type/keyid, valid: Boolean})>>} list of signer's keyid and validity of signature\n * @async\n */\n\n\n/**\n * Create list of objects containing signer's keyid and validity of signature\n * @param {Array<module:packet.Signature>} signatureList array of signature packets\n * @param {Array<module:packet.Literal>} literalDataList array of literal data packets\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date Verify the signature against the given date,\n * i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<{keyid: module:type/keyid,\n * valid: Boolean}>>} list of signer's keyid and validity of signature\n * @async\n */\nvar createVerificationObjects = exports.createVerificationObjects = function () {\n var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19(signatureList, literalDataList, keys) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n return _regenerator2.default.wrap(function _callee19$(_context19) {\n while (1) {\n switch (_context19.prev = _context19.next) {\n case 0:\n return _context19.abrupt('return', _promise2.default.all(signatureList.map(function () {\n var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18(signature) {\n var keyPacket, verifiedSig, packetlist;\n return _regenerator2.default.wrap(function _callee18$(_context18) {\n while (1) {\n switch (_context18.prev = _context18.next) {\n case 0:\n keyPacket = null;\n _context18.next = 3;\n return _promise2.default.all(keys.map(function () {\n var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(key) {\n var result;\n return _regenerator2.default.wrap(function _callee17$(_context17) {\n while (1) {\n switch (_context17.prev = _context17.next) {\n case 0:\n _context17.next = 2;\n return key.getSigningKeyPacket(signature.issuerKeyId, date);\n\n case 2:\n result = _context17.sent;\n\n if (result) {\n keyPacket = result;\n }\n\n case 4:\n case 'end':\n return _context17.stop();\n }\n }\n }, _callee17, this);\n }));\n\n return function (_x54) {\n return _ref19.apply(this, arguments);\n };\n }()));\n\n case 3:\n _context18.t0 = signature.issuerKeyId;\n\n if (!keyPacket) {\n _context18.next = 10;\n break;\n }\n\n _context18.next = 7;\n return signature.verify(keyPacket, literalDataList[0]);\n\n case 7:\n _context18.t1 = _context18.sent;\n _context18.next = 11;\n break;\n\n case 10:\n _context18.t1 = null;\n\n case 11:\n _context18.t2 = _context18.t1;\n verifiedSig = {\n keyid: _context18.t0,\n valid: _context18.t2\n };\n packetlist = new _packet2.default.List();\n\n packetlist.push(signature);\n verifiedSig.signature = new _signature.Signature(packetlist);\n\n return _context18.abrupt('return', verifiedSig);\n\n case 17:\n case 'end':\n return _context18.stop();\n }\n }\n }, _callee18, this);\n }));\n\n return function (_x53) {\n return _ref18.apply(this, arguments);\n };\n }())));\n\n case 1:\n case 'end':\n return _context19.stop();\n }\n }\n }, _callee19, this);\n }));\n\n return function createVerificationObjects(_x49, _x50, _x51) {\n return _ref17.apply(this, arguments);\n };\n}();\n\n/**\n * Unwrap compressed message\n * @returns {module:message.Message} message Content of compressed message\n */\n\n\nexports.Message = Message;\nexports.readArmored = readArmored;\nexports.read = read;\nexports.fromText = fromText;\nexports.fromBinary = fromBinary;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _keyid = _dereq_('./type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _signature = _dereq_('./signature');\n\nvar _key = _dereq_('./key');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP message.\n * Can be an encrypted message, signed message, compressed message or literal message\n * @param {module:packet.List} packetlist The packets that form this message\n * See {@link https://tools.ietf.org/html/rfc4880#section-11.3}\n */\n\nfunction Message(packetlist) {\n if (!(this instanceof Message)) {\n return new Message(packetlist);\n }\n this.packets = packetlist || new _packet2.default.List();\n}\n\n/**\n * Returns the key IDs of the keys to which the session key is encrypted\n * @returns {Array<module:type/keyid>} array of keyid objects\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires type/keyid\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n * @requires packet\n * @requires signature\n * @requires key\n * @module message\n */\n\nMessage.prototype.getEncryptionKeyIds = function () {\n var keyIds = [];\n var pkESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.publicKeyEncryptedSessionKey);\n pkESKeyPacketlist.forEach(function (packet) {\n keyIds.push(packet.publicKeyId);\n });\n return keyIds;\n};\n\n/**\n * Returns the key IDs of the keys that signed the message\n * @returns {Array<module:type/keyid>} array of keyid objects\n */\nMessage.prototype.getSigningKeyIds = function () {\n var keyIds = [];\n var msg = this.unwrapCompressed();\n // search for one pass signatures\n var onePassSigList = msg.packets.filterByTag(_enums2.default.packet.onePassSignature);\n onePassSigList.forEach(function (packet) {\n keyIds.push(packet.signingKeyId);\n });\n // if nothing found look for signature packets\n if (!keyIds.length) {\n var signatureList = msg.packets.filterByTag(_enums2.default.packet.signature);\n signatureList.forEach(function (packet) {\n keyIds.push(packet.issuerKeyId);\n });\n }\n return keyIds;\n};\n\n/**\n * Decrypt the message. Either a private key, a session key, or a password must be specified.\n * @param {Array<Key>} privateKeys (optional) private keys with decrypted secret data\n * @param {Array<String>} passwords (optional) passwords used to decrypt\n * @param {Array<Object>} sessionKeys (optional) session keys in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n * @returns {Promise<Message>} new message with decrypted content\n * @async\n */\nMessage.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(privateKeys, passwords, sessionKeys) {\n var keyObjs, symEncryptedPacketlist, symEncryptedPacket, exception, i, resultMsg;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = sessionKeys;\n\n if (_context.t0) {\n _context.next = 5;\n break;\n }\n\n _context.next = 4;\n return this.decryptSessionKeys(privateKeys, passwords);\n\n case 4:\n _context.t0 = _context.sent;\n\n case 5:\n keyObjs = _context.t0;\n symEncryptedPacketlist = this.packets.filterByTag(_enums2.default.packet.symmetricallyEncrypted, _enums2.default.packet.symEncryptedIntegrityProtected, _enums2.default.packet.symEncryptedAEADProtected);\n\n if (!(symEncryptedPacketlist.length === 0)) {\n _context.next = 9;\n break;\n }\n\n return _context.abrupt('return', this);\n\n case 9:\n symEncryptedPacket = symEncryptedPacketlist[0];\n exception = null;\n i = 0;\n\n case 12:\n if (!(i < keyObjs.length)) {\n _context.next = 27;\n break;\n }\n\n if (!(!keyObjs[i] || !_util2.default.isUint8Array(keyObjs[i].data) || !_util2.default.isString(keyObjs[i].algorithm))) {\n _context.next = 15;\n break;\n }\n\n throw new Error('Invalid session key for decryption.');\n\n case 15:\n _context.prev = 15;\n _context.next = 18;\n return symEncryptedPacket.decrypt(keyObjs[i].algorithm, keyObjs[i].data);\n\n case 18:\n return _context.abrupt('break', 27);\n\n case 21:\n _context.prev = 21;\n _context.t1 = _context['catch'](15);\n\n exception = _context.t1;\n\n case 24:\n i++;\n _context.next = 12;\n break;\n\n case 27:\n if (!(!symEncryptedPacket.packets || !symEncryptedPacket.packets.length)) {\n _context.next = 29;\n break;\n }\n\n throw exception || new Error('Decryption failed.');\n\n case 29:\n resultMsg = new Message(symEncryptedPacket.packets);\n\n symEncryptedPacket.packets = new _packet2.default.List(); // remove packets after decryption\n\n return _context.abrupt('return', resultMsg);\n\n case 32:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[15, 21]]);\n }));\n\n return function (_x, _x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypt encrypted session keys either with private keys or passwords.\n * @param {Array<Key>} privateKeys (optional) private keys with decrypted secret data\n * @param {Array<String>} passwords (optional) passwords used to decrypt\n * @returns {Promise<Array<{ data: Uint8Array,\n algorithm: String }>>} array of object with potential sessionKey, algorithm pairs\n * @async\n */\nMessage.prototype.decryptSessionKeys = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(privateKeys, passwords) {\n var keyPackets, symESKeyPacketlist, pkESKeyPacketlist, seen;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n keyPackets = [];\n\n if (!passwords) {\n _context6.next = 9;\n break;\n }\n\n symESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.symEncryptedSessionKey);\n\n if (symESKeyPacketlist) {\n _context6.next = 5;\n break;\n }\n\n throw new Error('No symmetrically encrypted session key packet found.');\n\n case 5:\n _context6.next = 7;\n return _promise2.default.all(symESKeyPacketlist.map(function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(keyPacket) {\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _promise2.default.all(passwords.map(function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(password) {\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.prev = 0;\n _context2.next = 3;\n return keyPacket.decrypt(password);\n\n case 3:\n keyPackets.push(keyPacket);\n _context2.next = 9;\n break;\n\n case 6:\n _context2.prev = 6;\n _context2.t0 = _context2['catch'](0);\n\n _util2.default.print_debug_error(_context2.t0);\n\n case 9:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this, [[0, 6]]);\n }));\n\n return function (_x7) {\n return _ref4.apply(this, arguments);\n };\n }()));\n\n case 2:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x6) {\n return _ref3.apply(this, arguments);\n };\n }()));\n\n case 7:\n _context6.next = 18;\n break;\n\n case 9:\n if (!privateKeys) {\n _context6.next = 17;\n break;\n }\n\n pkESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.publicKeyEncryptedSessionKey);\n\n if (pkESKeyPacketlist) {\n _context6.next = 13;\n break;\n }\n\n throw new Error('No public key encrypted session key packet found.');\n\n case 13:\n _context6.next = 15;\n return _promise2.default.all(pkESKeyPacketlist.map(function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(keyPacket) {\n var privateKeyPackets;\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n // TODO improve this\n privateKeyPackets = privateKeys.reduce(function (acc, privateKey) {\n return acc.concat(privateKey.getKeyPackets(keyPacket.publicKeyId));\n }, new _packet2.default.List());\n _context5.next = 3;\n return _promise2.default.all(privateKeyPackets.map(function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(privateKeyPacket) {\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (privateKeyPacket) {\n _context4.next = 2;\n break;\n }\n\n return _context4.abrupt('return');\n\n case 2:\n if (privateKeyPacket.isDecrypted) {\n _context4.next = 4;\n break;\n }\n\n throw new Error('Private key is not decrypted.');\n\n case 4:\n _context4.prev = 4;\n _context4.next = 7;\n return keyPacket.decrypt(privateKeyPacket);\n\n case 7:\n keyPackets.push(keyPacket);\n _context4.next = 13;\n break;\n\n case 10:\n _context4.prev = 10;\n _context4.t0 = _context4['catch'](4);\n\n _util2.default.print_debug_error(_context4.t0);\n\n case 13:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this, [[4, 10]]);\n }));\n\n return function (_x9) {\n return _ref6.apply(this, arguments);\n };\n }()));\n\n case 3:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function (_x8) {\n return _ref5.apply(this, arguments);\n };\n }()));\n\n case 15:\n _context6.next = 18;\n break;\n\n case 17:\n throw new Error('No key or password specified.');\n\n case 18:\n if (!keyPackets.length) {\n _context6.next = 21;\n break;\n }\n\n // Return only unique session keys\n if (keyPackets.length > 1) {\n seen = {};\n\n keyPackets = keyPackets.filter(function (item) {\n var k = item.sessionKeyAlgorithm + _util2.default.Uint8Array_to_str(item.sessionKey);\n if (seen.hasOwnProperty(k)) {\n return false;\n }\n seen[k] = true;\n return true;\n });\n }\n\n return _context6.abrupt('return', keyPackets.map(function (packet) {\n return { data: packet.sessionKey, algorithm: packet.sessionKeyAlgorithm };\n }));\n\n case 21:\n throw new Error('Session key decryption failed.');\n\n case 22:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function (_x4, _x5) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Get literal data that is the body of the message\n * @returns {(Uint8Array|null)} literal body of the message as Uint8Array\n */\nMessage.prototype.getLiteralData = function () {\n var literal = this.packets.findPacket(_enums2.default.packet.literal);\n return literal && literal.getBytes() || null;\n};\n\n/**\n * Get filename from literal data packet\n * @returns {(String|null)} filename of literal data packet as string\n */\nMessage.prototype.getFilename = function () {\n var literal = this.packets.findPacket(_enums2.default.packet.literal);\n return literal && literal.getFilename() || null;\n};\n\n/**\n * Get literal data as text\n * @returns {(String|null)} literal body of the message interpreted as text\n */\nMessage.prototype.getText = function () {\n var literal = this.packets.findPacket(_enums2.default.packet.literal);\n if (literal) {\n return literal.getText();\n }\n return null;\n};\n\n/**\n * Encrypt the message either with public keys, passwords, or both at once.\n * @param {Array<Key>} keys (optional) public key(s) for message encryption\n * @param {Array<String>} passwords (optional) password(s) for message encryption\n * @param {Object} sessionKey (optional) session key in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the creation date of the literal package\n * @param {Object} userId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' }\n * @returns {Promise<Message>} new message with encrypted content\n * @async\n */\nMessage.prototype.encrypt = function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(keys, passwords, sessionKey) {\n var wildcard = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var date = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Date();\n var userId = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var symAlgo, aeadAlgo, symEncryptedPacket, msg;\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n symAlgo = void 0;\n aeadAlgo = void 0;\n symEncryptedPacket = void 0;\n\n if (!sessionKey) {\n _context7.next = 11;\n break;\n }\n\n if (!(!_util2.default.isUint8Array(sessionKey.data) || !_util2.default.isString(sessionKey.algorithm))) {\n _context7.next = 6;\n break;\n }\n\n throw new Error('Invalid session key for encryption.');\n\n case 6:\n symAlgo = sessionKey.algorithm;\n aeadAlgo = sessionKey.aeadAlgorithm;\n sessionKey = sessionKey.data;\n _context7.next = 38;\n break;\n\n case 11:\n if (!(keys && keys.length)) {\n _context7.next = 32;\n break;\n }\n\n _context7.t0 = _enums2.default;\n _context7.t1 = _enums2.default.symmetric;\n _context7.next = 16;\n return (0, _key.getPreferredAlgo)('symmetric', keys, date, userId);\n\n case 16:\n _context7.t2 = _context7.sent;\n symAlgo = _context7.t0.read.call(_context7.t0, _context7.t1, _context7.t2);\n _context7.t3 = _config2.default.aead_protect && _config2.default.aead_protect_version === 4;\n\n if (!_context7.t3) {\n _context7.next = 23;\n break;\n }\n\n _context7.next = 22;\n return (0, _key.isAeadSupported)(keys, date, userId);\n\n case 22:\n _context7.t3 = _context7.sent;\n\n case 23:\n if (!_context7.t3) {\n _context7.next = 30;\n break;\n }\n\n _context7.t4 = _enums2.default;\n _context7.t5 = _enums2.default.aead;\n _context7.next = 28;\n return (0, _key.getPreferredAlgo)('aead', keys, date, userId);\n\n case 28:\n _context7.t6 = _context7.sent;\n aeadAlgo = _context7.t4.read.call(_context7.t4, _context7.t5, _context7.t6);\n\n case 30:\n _context7.next = 38;\n break;\n\n case 32:\n if (!(passwords && passwords.length)) {\n _context7.next = 37;\n break;\n }\n\n symAlgo = _enums2.default.read(_enums2.default.symmetric, _config2.default.encryption_cipher);\n aeadAlgo = _enums2.default.read(_enums2.default.aead, _config2.default.aead_mode);\n _context7.next = 38;\n break;\n\n case 37:\n throw new Error('No keys, passwords, or session key provided.');\n\n case 38:\n if (sessionKey) {\n _context7.next = 42;\n break;\n }\n\n _context7.next = 41;\n return _crypto2.default.generateSessionKey(symAlgo);\n\n case 41:\n sessionKey = _context7.sent;\n\n case 42:\n _context7.next = 44;\n return encryptSessionKey(sessionKey, symAlgo, aeadAlgo, keys, passwords, wildcard, date, userId);\n\n case 44:\n msg = _context7.sent;\n\n\n if (_config2.default.aead_protect && (_config2.default.aead_protect_version !== 4 || aeadAlgo)) {\n symEncryptedPacket = new _packet2.default.SymEncryptedAEADProtected();\n symEncryptedPacket.aeadAlgorithm = aeadAlgo;\n } else if (_config2.default.integrity_protect) {\n symEncryptedPacket = new _packet2.default.SymEncryptedIntegrityProtected();\n } else {\n symEncryptedPacket = new _packet2.default.SymmetricallyEncrypted();\n }\n symEncryptedPacket.packets = this.packets;\n\n _context7.next = 49;\n return symEncryptedPacket.encrypt(symAlgo, sessionKey);\n\n case 49:\n\n msg.packets.push(symEncryptedPacket);\n symEncryptedPacket.packets = new _packet2.default.List(); // remove packets after encryption\n return _context7.abrupt('return', {\n message: msg,\n sessionKey: {\n data: sessionKey,\n algorithm: symAlgo,\n aeadAlgorithm: aeadAlgo\n }\n });\n\n case 52:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x10, _x11, _x12) {\n return _ref7.apply(this, arguments);\n };\n}();Message.prototype.sign = function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13() {\n var privateKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var packetlist, literalDataPacket, i, existingSigPacketlist, signatureType, signaturePacket, onePassSig;\n return _regenerator2.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n packetlist = new _packet2.default.List();\n literalDataPacket = this.packets.findPacket(_enums2.default.packet.literal);\n\n if (literalDataPacket) {\n _context13.next = 4;\n break;\n }\n\n throw new Error('No literal data packet to sign.');\n\n case 4:\n i = void 0;\n existingSigPacketlist = void 0;\n // If data packet was created from Uint8Array, use binary, otherwise use text\n\n signatureType = literalDataPacket.text === null ? _enums2.default.signature.binary : _enums2.default.signature.text;\n\n\n if (signature) {\n existingSigPacketlist = signature.packets.filterByTag(_enums2.default.packet.signature);\n for (i = existingSigPacketlist.length - 1; i >= 0; i--) {\n signaturePacket = existingSigPacketlist[i];\n onePassSig = new _packet2.default.OnePassSignature();\n\n onePassSig.type = signatureType;\n onePassSig.hashAlgorithm = signaturePacket.hashAlgorithm;\n onePassSig.publicKeyAlgorithm = signaturePacket.publicKeyAlgorithm;\n onePassSig.signingKeyId = signaturePacket.issuerKeyId;\n if (!privateKeys.length && i === 0) {\n onePassSig.flags = 1;\n }\n packetlist.push(onePassSig);\n }\n }\n\n _context13.next = 10;\n return _promise2.default.all((0, _from2.default)(privateKeys).reverse().map(function () {\n var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(privateKey, i) {\n var signingKeyPacket, onePassSig;\n return _regenerator2.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (!privateKey.isPublic()) {\n _context12.next = 2;\n break;\n }\n\n throw new Error('Need private key for signing');\n\n case 2:\n _context12.next = 4;\n return privateKey.getSigningKeyPacket(undefined, date, userId);\n\n case 4:\n signingKeyPacket = _context12.sent;\n\n if (signingKeyPacket) {\n _context12.next = 7;\n break;\n }\n\n throw new Error('Could not find valid key packet for signing in key ' + privateKey.primaryKey.getKeyId().toHex());\n\n case 7:\n onePassSig = new _packet2.default.OnePassSignature();\n\n onePassSig.type = signatureType;\n _context12.next = 11;\n return (0, _key.getPreferredHashAlgo)(privateKey, signingKeyPacket, date, userId);\n\n case 11:\n onePassSig.hashAlgorithm = _context12.sent;\n\n onePassSig.publicKeyAlgorithm = signingKeyPacket.algorithm;\n onePassSig.signingKeyId = signingKeyPacket.getKeyId();\n if (i === privateKeys.length - 1) {\n onePassSig.flags = 1;\n }\n return _context12.abrupt('return', onePassSig);\n\n case 16:\n case 'end':\n return _context12.stop();\n }\n }\n }, _callee12, this);\n }));\n\n return function (_x35, _x36) {\n return _ref13.apply(this, arguments);\n };\n }())).then(function (onePassSignatureList) {\n onePassSignatureList.forEach(function (onePassSig) {\n return packetlist.push(onePassSig);\n });\n });\n\n case 10:\n\n packetlist.push(literalDataPacket);\n _context13.t0 = packetlist;\n _context13.next = 14;\n return createSignaturePackets(literalDataPacket, privateKeys, signature, date);\n\n case 14:\n _context13.t1 = _context13.sent;\n\n _context13.t0.concat.call(_context13.t0, _context13.t1);\n\n return _context13.abrupt('return', new Message(packetlist));\n\n case 17:\n case 'end':\n return _context13.stop();\n }\n }\n }, _callee13, this);\n }));\n\n return function () {\n return _ref12.apply(this, arguments);\n };\n}();\n\n/**\n * Compresses the message (the literal and -if signed- signature data packets of the message)\n * @param {module:enums.compression} compression compression algorithm to be used\n * @returns {module:message.Message} new message with compressed content\n */\nMessage.prototype.compress = function (compression) {\n if (compression === _enums2.default.compression.uncompressed) {\n return this;\n }\n\n var compressed = new _packet2.default.Compressed();\n compressed.packets = this.packets;\n compressed.algorithm = _enums2.default.read(_enums2.default.compression, compression);\n\n var packetList = new _packet2.default.List();\n packetList.push(compressed);\n\n return new Message(packetList);\n};\n\n/**\n * Create a detached signature for the message (the literal data packet of the message)\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature\n * @param {Date} date (optional) override the creation time of the signature\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:signature.Signature>} new detached signature of message content\n * @async\n */\nMessage.prototype.signDetached = function () {\n var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14() {\n var privateKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var literalDataPacket;\n return _regenerator2.default.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n literalDataPacket = this.packets.findPacket(_enums2.default.packet.literal);\n\n if (literalDataPacket) {\n _context14.next = 3;\n break;\n }\n\n throw new Error('No literal data packet to sign.');\n\n case 3:\n _context14.t0 = _signature.Signature;\n _context14.next = 6;\n return createSignaturePackets(literalDataPacket, privateKeys, signature, date, userId);\n\n case 6:\n _context14.t1 = _context14.sent;\n return _context14.abrupt('return', new _context14.t0(_context14.t1));\n\n case 8:\n case 'end':\n return _context14.stop();\n }\n }\n }, _callee14, this);\n }));\n\n return function () {\n return _ref14.apply(this, arguments);\n };\n}();Message.prototype.verify = function (keys) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n var msg = this.unwrapCompressed();\n var literalDataList = msg.packets.filterByTag(_enums2.default.packet.literal);\n if (literalDataList.length !== 1) {\n throw new Error('Can only verify message with one literal data packet.');\n }\n var signatureList = msg.packets.filterByTag(_enums2.default.packet.signature);\n return createVerificationObjects(signatureList, literalDataList, keys, date);\n};\n\n/**\n * Verify detached message signature\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Signature} signature\n * @param {Date} date Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<({keyid: module:type/keyid, valid: Boolean})>>} list of signer's keyid and validity of signature\n * @async\n */\nMessage.prototype.verifyDetached = function (signature, keys) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n var msg = this.unwrapCompressed();\n var literalDataList = msg.packets.filterByTag(_enums2.default.packet.literal);\n if (literalDataList.length !== 1) {\n throw new Error('Can only verify message with one literal data packet.');\n }\n var signatureList = signature.packets;\n return createVerificationObjects(signatureList, literalDataList, keys, date);\n};Message.prototype.unwrapCompressed = function () {\n var compressed = this.packets.filterByTag(_enums2.default.packet.compressed);\n if (compressed.length) {\n return new Message(compressed[0].packets);\n }\n return this;\n};\n\n/**\n * Append signature to unencrypted message object\n * @param {String|Uint8Array} detachedSignature The detached ASCII-armored or Uint8Array PGP signature\n */\nMessage.prototype.appendSignature = function (detachedSignature) {\n this.packets.read(_util2.default.isUint8Array(detachedSignature) ? detachedSignature : _armor2.default.decode(detachedSignature).data);\n};\n\n/**\n * Returns ASCII armored text of message\n * @returns {String} ASCII armor\n */\nMessage.prototype.armor = function () {\n return _armor2.default.encode(_enums2.default.armor.message, this.packets.write());\n};\n\n/**\n * reads an OpenPGP armored message and returns a message object\n * @param {String} armoredText text to be parsed\n * @returns {module:message.Message} new message object\n * @static\n */\nfunction readArmored(armoredText) {\n //TODO how do we want to handle bad text? Exception throwing\n //TODO don't accept non-message armored texts\n var input = _armor2.default.decode(armoredText).data;\n return read(input);\n}\n\n/**\n * reads an OpenPGP message as byte array and returns a message object\n * @param {Uint8Array} input binary message\n * @returns {Message} new message object\n * @static\n */\nfunction read(input) {\n var packetlist = new _packet2.default.List();\n packetlist.read(input);\n return new Message(packetlist);\n}\n\n/**\n * creates new message object from text\n * @param {String} text\n * @param {String} filename (optional)\n * @param {Date} date (optional)\n * @param {utf8|binary|text|mime} type (optional) data packet type\n * @returns {module:message.Message} new message object\n * @static\n */\nfunction fromText(text, filename) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'utf8';\n\n var literalDataPacket = new _packet2.default.Literal(date);\n // text will be converted to UTF8\n literalDataPacket.setText(text, type);\n if (filename !== undefined) {\n literalDataPacket.setFilename(filename);\n }\n var literalDataPacketlist = new _packet2.default.List();\n literalDataPacketlist.push(literalDataPacket);\n return new Message(literalDataPacketlist);\n}\n\n/**\n * creates new message object from binary data\n * @param {Uint8Array} bytes\n * @param {String} filename (optional)\n * @param {Date} date (optional)\n * @param {utf8|binary|text|mime} type (optional) data packet type\n * @returns {module:message.Message} new message object\n * @static\n */\nfunction fromBinary(bytes, filename) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'binary';\n\n if (!_util2.default.isUint8Array(bytes)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n var literalDataPacket = new _packet2.default.Literal(date);\n literalDataPacket.setBytes(bytes, type);\n if (filename !== undefined) {\n literalDataPacket.setFilename(filename);\n }\n var literalDataPacketlist = new _packet2.default.List();\n literalDataPacketlist.push(literalDataPacket);\n return new Message(literalDataPacketlist);\n}\n\n},{\"./config\":325,\"./crypto\":340,\"./encoding/armor\":357,\"./enums\":359,\"./key\":362,\"./packet\":371,\"./signature\":391,\"./type/keyid\":394,\"./util\":398,\"babel-runtime/core-js/array/from\":20,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],367:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nexports.initWorker = initWorker;\nexports.getWorker = getWorker;\nexports.destroyWorker = destroyWorker;\nexports.generateKey = generateKey;\nexports.reformatKey = reformatKey;\nexports.revokeKey = revokeKey;\nexports.decryptKey = decryptKey;\nexports.encryptKey = encryptKey;\nexports.encrypt = encrypt;\nexports.decrypt = decrypt;\nexports.sign = sign;\nexports.verify = verify;\nexports.encryptSessionKey = encryptSessionKey;\nexports.decryptSessionKeys = decryptSessionKeys;\n\nvar _message = _dereq_('./message');\n\nvar messageLib = _interopRequireWildcard(_message);\n\nvar _cleartext = _dereq_('./cleartext');\n\nvar _key = _dereq_('./key');\n\nvar _config = _dereq_('./config/config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _async_proxy = _dereq_('./worker/async_proxy');\n\nvar _async_proxy2 = _interopRequireDefault(_async_proxy);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Old browser polyfills\nif (typeof window !== 'undefined') {\n _dereq_('./polyfills');\n}\n\n//////////////////////////\n// //\n// Web Worker setup //\n// //\n//////////////////////////\n\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview The openpgp base module should provide all of the functionality\n * to consume the openpgp.js library. All additional classes are documented\n * for extending and developing on top of the base library.\n * @requires message\n * @requires cleartext\n * @requires key\n * @requires config\n * @requires enums\n * @requires util\n * @requires polyfills\n * @requires worker/async_proxy\n * @module openpgp\n */\n\n// This file intentionally has two separate file overviews so that\n// a reference to this module appears at the end of doc/index.html.\n\n/**\n * @fileoverview To view the full API documentation, start from\n * {@link module:openpgp}\n */\n\nvar asyncProxy = void 0; // instance of the asyncproxy\n\n/**\n * Set the path for the web worker script and create an instance of the async proxy\n * @param {String} path relative path to the worker scripts, default: 'openpgp.worker.js'\n * @param {Number} n number of workers to initialize\n * @param {Array<Object>} workers alternative to path parameter: web workers initialized with 'openpgp.worker.js'\n */\nfunction initWorker() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$path = _ref.path,\n path = _ref$path === undefined ? 'openpgp.worker.js' : _ref$path,\n _ref$n = _ref.n,\n n = _ref$n === undefined ? 1 : _ref$n,\n _ref$workers = _ref.workers,\n workers = _ref$workers === undefined ? [] : _ref$workers;\n\n if (workers.length || typeof window !== 'undefined' && window.Worker) {\n asyncProxy = new _async_proxy2.default({ path: path, n: n, workers: workers, config: _config2.default });\n return true;\n }\n}\n\n/**\n * Returns a reference to the async proxy if the worker was initialized with openpgp.initWorker()\n * @returns {module:worker/async_proxy.AsyncProxy|null} the async proxy or null if not initialized\n */\nfunction getWorker() {\n return asyncProxy;\n}\n\n/**\n * Cleanup the current instance of the web worker.\n */\nfunction destroyWorker() {\n asyncProxy = undefined;\n}\n\n//////////////////////\n// //\n// Key handling //\n// //\n//////////////////////\n\n\n/**\n * Generates a new OpenPGP key pair. Supports RSA and ECC keys. Primary and subkey will be of same type.\n * @param {Array<Object>} userIds array of user IDs e.g. [{ name:'Phil Zimmermann', email:'phil@openpgp.org' }]\n * @param {String} passphrase (optional) The passphrase used to encrypt the resulting private key\n * @param {Number} numBits (optional) number of bits for RSA keys: 2048 or 4096.\n * @param {Number} keyExpirationTime (optional) The number of seconds after the key creation time that the key expires\n * @param {String} curve (optional) elliptic curve for ECC keys:\n * curve25519, p256, p384, p521, secp256k1,\n * brainpoolP256r1, brainpoolP384r1, or brainpoolP512r1.\n * @param {Date} date (optional) override the creation date of the key and the key signatures\n * @param {Array<Object>} subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * sign parameter defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @returns {Promise<Object>} The generated key object in the form:\n * { key:Key, privateKeyArmored:String, publicKeyArmored:String, revocationCertificate:String }\n * @async\n * @static\n */\n\nfunction generateKey(_ref2) {\n var _ref2$userIds = _ref2.userIds,\n userIds = _ref2$userIds === undefined ? [] : _ref2$userIds,\n _ref2$passphrase = _ref2.passphrase,\n passphrase = _ref2$passphrase === undefined ? \"\" : _ref2$passphrase,\n _ref2$numBits = _ref2.numBits,\n numBits = _ref2$numBits === undefined ? 2048 : _ref2$numBits,\n _ref2$keyExpirationTi = _ref2.keyExpirationTime,\n keyExpirationTime = _ref2$keyExpirationTi === undefined ? 0 : _ref2$keyExpirationTi,\n _ref2$curve = _ref2.curve,\n curve = _ref2$curve === undefined ? \"\" : _ref2$curve,\n _ref2$date = _ref2.date,\n date = _ref2$date === undefined ? new Date() : _ref2$date,\n _ref2$subkeys = _ref2.subkeys,\n subkeys = _ref2$subkeys === undefined ? [{}] : _ref2$subkeys;\n\n userIds = toArray(userIds);\n var options = { userIds: userIds, passphrase: passphrase, numBits: numBits, keyExpirationTime: keyExpirationTime, curve: curve, date: date, subkeys: subkeys };\n if (_util2.default.getWebCryptoAll() && numBits < 2048) {\n throw new Error('numBits should be 2048 or 4096, found: ' + numBits);\n }\n\n if (!_util2.default.getWebCryptoAll() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('generateKey', options);\n }\n\n return (0, _key.generate)(options).then(function (key) {\n var revocationCertificate = key.getRevocationCertificate();\n key.revocationSignatures = [];\n\n return {\n\n key: key,\n privateKeyArmored: key.armor(),\n publicKeyArmored: key.toPublic().armor(),\n revocationCertificate: revocationCertificate\n\n };\n }).catch(onError.bind(null, 'Error generating keypair'));\n}\n\n/**\n * Reformats signature packets for a key and rewraps key object.\n * @param {Key} privateKey private key to reformat\n * @param {Array<Object>} userIds array of user IDs e.g. [{ name:'Phil Zimmermann', email:'phil@openpgp.org' }]\n * @param {String} passphrase (optional) The passphrase used to encrypt the resulting private key\n * @param {Number} keyExpirationTime (optional) The number of seconds after the key creation time that the key expires\n * @param {Boolean} revocationCertificate (optional) Whether the returned object should include a revocation certificate to revoke the public key\n * @returns {Promise<Object>} The generated key object in the form:\n * { key:Key, privateKeyArmored:String, publicKeyArmored:String, revocationCertificate:String }\n * @async\n * @static\n */\nfunction reformatKey(_ref3) {\n var privateKey = _ref3.privateKey,\n _ref3$userIds = _ref3.userIds,\n userIds = _ref3$userIds === undefined ? [] : _ref3$userIds,\n _ref3$passphrase = _ref3.passphrase,\n passphrase = _ref3$passphrase === undefined ? \"\" : _ref3$passphrase,\n _ref3$keyExpirationTi = _ref3.keyExpirationTime,\n keyExpirationTime = _ref3$keyExpirationTi === undefined ? 0 : _ref3$keyExpirationTi,\n date = _ref3.date,\n _ref3$revocationCerti = _ref3.revocationCertificate,\n revocationCertificate = _ref3$revocationCerti === undefined ? true : _ref3$revocationCerti;\n\n userIds = toArray(userIds);\n var options = { privateKey: privateKey, userIds: userIds, passphrase: passphrase, keyExpirationTime: keyExpirationTime, date: date, revocationCertificate: revocationCertificate };\n if (asyncProxy) {\n return asyncProxy.delegate('reformatKey', options);\n }\n\n options.revoked = options.revocationCertificate;\n\n return (0, _key.reformat)(options).then(function (key) {\n var revocationCertificate = key.getRevocationCertificate();\n key.revocationSignatures = [];\n\n return {\n\n key: key,\n privateKeyArmored: key.armor(),\n publicKeyArmored: key.toPublic().armor(),\n revocationCertificate: revocationCertificate\n\n };\n }).catch(onError.bind(null, 'Error reformatting keypair'));\n}\n\n/**\n * Revokes a key. Requires either a private key or a revocation certificate.\n * If a revocation certificate is passed, the reasonForRevocation parameters will be ignored.\n * @param {Key} key (optional) public or private key to revoke\n * @param {String} revocationCertificate (optional) revocation certificate to revoke the key with\n * @param {Object} reasonForRevocation (optional) object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} reasonForRevocation.flag (optional) flag indicating the reason for revocation\n * @param {String} reasonForRevocation.string (optional) string explaining the reason for revocation\n * @return {Promise<Object>} The revoked key object in the form:\n * { privateKey:Key, privateKeyArmored:String, publicKey:Key, publicKeyArmored:String }\n * (if private key is passed) or { publicKey:Key, publicKeyArmored:String } (otherwise)\n * @static\n */\nfunction revokeKey() {\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n key = _ref4.key,\n revocationCertificate = _ref4.revocationCertificate,\n reasonForRevocation = _ref4.reasonForRevocation;\n\n var options = {\n key: key, revocationCertificate: revocationCertificate, reasonForRevocation: reasonForRevocation\n };\n\n if (!_util2.default.getWebCryptoAll() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('revokeKey', options);\n }\n\n return _promise2.default.resolve().then(function () {\n if (revocationCertificate) {\n return key.applyRevocationCertificate(revocationCertificate);\n } else {\n return key.revoke(reasonForRevocation);\n }\n }).then(function (key) {\n if (key.isPrivate()) {\n var publicKey = key.toPublic();\n return {\n privateKey: key,\n privateKeyArmored: key.armor(),\n publicKey: publicKey,\n publicKeyArmored: publicKey.armor()\n };\n }\n return {\n publicKey: key,\n publicKeyArmored: key.armor()\n };\n }).catch(onError.bind(null, 'Error revoking key'));\n}\n\n/**\n * Unlock a private key with your passphrase.\n * @param {Key} privateKey the private key that is to be decrypted\n * @param {String|Array<String>} passphrase the user's passphrase(s) chosen during key generation\n * @returns {Promise<Object>} the unlocked key object in the form: { key:Key }\n * @async\n */\nfunction decryptKey(_ref5) {\n var privateKey = _ref5.privateKey,\n passphrase = _ref5.passphrase;\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('decryptKey', { privateKey: privateKey, passphrase: passphrase });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return privateKey.decrypt(passphrase);\n\n case 2:\n return _context.abrupt('return', {\n key: privateKey\n });\n\n case 3:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }))).catch(onError.bind(null, 'Error decrypting private key'));\n}\n\n/**\n * Lock a private key with your passphrase.\n * @param {Key} privateKey the private key that is to be decrypted\n * @param {String|Array<String>} passphrase the user's passphrase(s) chosen during key generation\n * @returns {Promise<Object>} the locked key object in the form: { key:Key }\n * @async\n */\nfunction encryptKey(_ref7) {\n var privateKey = _ref7.privateKey,\n passphrase = _ref7.passphrase;\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('encryptKey', { privateKey: privateKey, passphrase: passphrase });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return privateKey.encrypt(passphrase);\n\n case 2:\n return _context2.abrupt('return', {\n key: privateKey\n });\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }))).catch(onError.bind(null, 'Error decrypting private key'));\n}\n\n///////////////////////////////////////////\n// //\n// Message encryption and decryption //\n// //\n///////////////////////////////////////////\n\n\n/**\n * Encrypts message text/data with public keys, passwords or both at once. At least either public keys or passwords\n * must be specified. If private keys are specified, those will be used to sign the message.\n * @param {String|Uint8Array} data text/data to be encrypted as JavaScript binary string or Uint8Array\n * @param {utf8|binary|text|mime} dataType (optional) data packet type\n * @param {Key|Array<Key>} publicKeys (optional) array of keys or single key, used to encrypt the message\n * @param {Key|Array<Key>} privateKeys (optional) private keys for signing. If omitted message will not be signed\n * @param {String|Array<String>} passwords (optional) array of passwords or a single password to encrypt the message\n * @param {Object} sessionKey (optional) session key in the form: { data:Uint8Array, algorithm:String }\n * @param {String} filename (optional) a filename for the literal data packet\n * @param {module:enums.compression} compression (optional) which compression algorithm to compress the message with, defaults to what is specified in config\n * @param {Boolean} armor (optional) if the return values should be ascii armored or the message/signature objects\n * @param {Boolean} detached (optional) if the signature should be detached (if true, signature will be added to returned object)\n * @param {Signature} signature (optional) a detached signature to add to the encrypted message\n * @param {Boolean} returnSessionKey (optional) if the unencrypted session key should be added to returned object\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the creation date of the message and the message signature\n * @param {Object} fromUserId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @param {Object} toUserId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' }\n * @returns {Promise<Object>} encrypted (and optionally signed message) in the form:\n * {data: ASCII armored message if 'armor' is true,\n * message: full Message object if 'armor' is false, signature: detached signature if 'detached' is true}\n * @async\n * @static\n */\nfunction encrypt(_ref9) {\n var data = _ref9.data,\n dataType = _ref9.dataType,\n publicKeys = _ref9.publicKeys,\n privateKeys = _ref9.privateKeys,\n passwords = _ref9.passwords,\n sessionKey = _ref9.sessionKey,\n filename = _ref9.filename,\n _ref9$compression = _ref9.compression,\n compression = _ref9$compression === undefined ? _config2.default.compression : _ref9$compression,\n _ref9$armor = _ref9.armor,\n armor = _ref9$armor === undefined ? true : _ref9$armor,\n _ref9$detached = _ref9.detached,\n detached = _ref9$detached === undefined ? false : _ref9$detached,\n _ref9$signature = _ref9.signature,\n signature = _ref9$signature === undefined ? null : _ref9$signature,\n _ref9$returnSessionKe = _ref9.returnSessionKey,\n returnSessionKey = _ref9$returnSessionKe === undefined ? false : _ref9$returnSessionKe,\n _ref9$wildcard = _ref9.wildcard,\n wildcard = _ref9$wildcard === undefined ? false : _ref9$wildcard,\n _ref9$date = _ref9.date,\n date = _ref9$date === undefined ? new Date() : _ref9$date,\n _ref9$fromUserId = _ref9.fromUserId,\n fromUserId = _ref9$fromUserId === undefined ? {} : _ref9$fromUserId,\n _ref9$toUserId = _ref9.toUserId,\n toUserId = _ref9$toUserId === undefined ? {} : _ref9$toUserId;\n\n checkData(data);publicKeys = toArray(publicKeys);privateKeys = toArray(privateKeys);passwords = toArray(passwords);\n\n if (!nativeAEAD() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('encrypt', { data: data, dataType: dataType, publicKeys: publicKeys, privateKeys: privateKeys, passwords: passwords, sessionKey: sessionKey, filename: filename, compression: compression, armor: armor, detached: detached, signature: signature, returnSessionKey: returnSessionKey, wildcard: wildcard, date: date, fromUserId: fromUserId, toUserId: toUserId });\n }\n var result = {};\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {\n var message, detachedSignature;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n message = createMessage(data, filename, date, dataType);\n\n if (!privateKeys) {\n privateKeys = [];\n }\n\n if (!(privateKeys.length || signature)) {\n _context3.next = 13;\n break;\n }\n\n if (!detached) {\n _context3.next = 10;\n break;\n }\n\n _context3.next = 6;\n return message.signDetached(privateKeys, signature, date, fromUserId);\n\n case 6:\n detachedSignature = _context3.sent;\n\n result.signature = armor ? detachedSignature.armor() : detachedSignature;\n _context3.next = 13;\n break;\n\n case 10:\n _context3.next = 12;\n return message.sign(privateKeys, signature, date, fromUserId);\n\n case 12:\n message = _context3.sent;\n\n case 13:\n message = message.compress(compression);\n return _context3.abrupt('return', message.encrypt(publicKeys, passwords, sessionKey, wildcard, date, toUserId));\n\n case 15:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }))).then(function (encrypted) {\n if (armor) {\n result.data = encrypted.message.armor();\n } else {\n result.message = encrypted.message;\n }\n if (returnSessionKey) {\n result.sessionKey = encrypted.sessionKey;\n }\n return result;\n }).catch(onError.bind(null, 'Error encrypting message'));\n}\n\n/**\n * Decrypts a message with the user's private key, a session key or a password. Either a private key,\n * a session key or a password must be specified.\n * @param {Message} message the message object with the encrypted data\n * @param {Key|Array<Key>} privateKeys (optional) private keys with decrypted secret key data or session key\n * @param {String|Array<String>} passwords (optional) passwords to decrypt the message\n * @param {Object|Array<Object>} sessionKeys (optional) session keys in the form: { data:Uint8Array, algorithm:String }\n * @param {Key|Array<Key>} publicKeys (optional) array of public keys or single key, to verify signatures\n * @param {String} format (optional) return data format either as 'utf8' or 'binary'\n * @param {Signature} signature (optional) detached signature for verification\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Promise<Object>} decrypted and verified message in the form:\n * { data:Uint8Array|String, filename:String, signatures:[{ keyid:String, valid:Boolean }] }\n * @async\n * @static\n */\nfunction decrypt(_ref11) {\n var message = _ref11.message,\n privateKeys = _ref11.privateKeys,\n passwords = _ref11.passwords,\n sessionKeys = _ref11.sessionKeys,\n publicKeys = _ref11.publicKeys,\n _ref11$format = _ref11.format,\n format = _ref11$format === undefined ? 'utf8' : _ref11$format,\n _ref11$signature = _ref11.signature,\n signature = _ref11$signature === undefined ? null : _ref11$signature,\n _ref11$date = _ref11.date,\n date = _ref11$date === undefined ? new Date() : _ref11$date;\n\n checkMessage(message);publicKeys = toArray(publicKeys);privateKeys = toArray(privateKeys);passwords = toArray(passwords);sessionKeys = toArray(sessionKeys);\n\n if (!nativeAEAD() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('decrypt', { message: message, privateKeys: privateKeys, passwords: passwords, sessionKeys: sessionKeys, publicKeys: publicKeys, format: format, signature: signature, date: date });\n }\n\n return message.decrypt(privateKeys, passwords, sessionKeys).then(function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(message) {\n var result;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n result = parseMessage(message, format);\n\n\n if (!publicKeys) {\n publicKeys = [];\n }\n\n if (!signature) {\n _context4.next = 8;\n break;\n }\n\n _context4.next = 5;\n return message.verifyDetached(signature, publicKeys, date);\n\n case 5:\n _context4.t0 = _context4.sent;\n _context4.next = 11;\n break;\n\n case 8:\n _context4.next = 10;\n return message.verify(publicKeys, date);\n\n case 10:\n _context4.t0 = _context4.sent;\n\n case 11:\n result.signatures = _context4.t0;\n return _context4.abrupt('return', result);\n\n case 13:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x3) {\n return _ref12.apply(this, arguments);\n };\n }()).catch(onError.bind(null, 'Error decrypting message'));\n}\n\n//////////////////////////////////////////\n// //\n// Message signing and verification //\n// //\n//////////////////////////////////////////\n\n\n/**\n * Signs a cleartext message.\n * @param {String | Uint8Array} data cleartext input to be signed\n * @param {utf8|binary|text|mime} dataType (optional) data packet type\n * @param {Key|Array<Key>} privateKeys array of keys or single key with decrypted secret key data to sign cleartext\n * @param {Boolean} armor (optional) if the return value should be ascii armored or the message object\n * @param {Boolean} detached (optional) if the return value should contain a detached signature\n * @param {Date} date (optional) override the creation date signature\n * @param {Object} fromUserId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<Object>} signed cleartext in the form:\n * {data: ASCII armored message if 'armor' is true,\n * message: full Message object if 'armor' is false, signature: detached signature if 'detached' is true}\n * @async\n * @static\n */\nfunction sign(_ref13) {\n var data = _ref13.data,\n dataType = _ref13.dataType,\n privateKeys = _ref13.privateKeys,\n _ref13$armor = _ref13.armor,\n armor = _ref13$armor === undefined ? true : _ref13$armor,\n _ref13$detached = _ref13.detached,\n detached = _ref13$detached === undefined ? false : _ref13$detached,\n _ref13$date = _ref13.date,\n date = _ref13$date === undefined ? new Date() : _ref13$date,\n _ref13$fromUserId = _ref13.fromUserId,\n fromUserId = _ref13$fromUserId === undefined ? {} : _ref13$fromUserId;\n\n checkData(data);\n privateKeys = toArray(privateKeys);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('sign', {\n data: data, dataType: dataType, privateKeys: privateKeys, armor: armor, detached: detached, date: date, fromUserId: fromUserId\n });\n }\n\n var result = {};\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {\n var message, signature;\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n message = _util2.default.isString(data) ? new _cleartext.CleartextMessage(data) : messageLib.fromBinary(data, dataType);\n\n if (!detached) {\n _context5.next = 8;\n break;\n }\n\n _context5.next = 4;\n return message.signDetached(privateKeys, undefined, date, fromUserId);\n\n case 4:\n signature = _context5.sent;\n\n result.signature = armor ? signature.armor() : signature;\n _context5.next = 12;\n break;\n\n case 8:\n _context5.next = 10;\n return message.sign(privateKeys, undefined, date, fromUserId);\n\n case 10:\n message = _context5.sent;\n\n if (armor) {\n result.data = message.armor();\n } else {\n result.message = message;\n }\n\n case 12:\n return _context5.abrupt('return', result);\n\n case 13:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }))).catch(onError.bind(null, 'Error signing cleartext message'));\n}\n\n/**\n * Verifies signatures of cleartext signed message\n * @param {Key|Array<Key>} publicKeys array of publicKeys or single key, to verify signatures\n * @param {CleartextMessage} message cleartext message object with signatures\n * @param {Signature} signature (optional) detached signature for verification\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Promise<Object>} cleartext with status of verified signatures in the form of:\n * { data:String, signatures: [{ keyid:String, valid:Boolean }] }\n * @async\n * @static\n */\nfunction verify(_ref15) {\n var message = _ref15.message,\n publicKeys = _ref15.publicKeys,\n _ref15$signature = _ref15.signature,\n signature = _ref15$signature === undefined ? null : _ref15$signature,\n _ref15$date = _ref15.date,\n date = _ref15$date === undefined ? new Date() : _ref15$date;\n\n checkCleartextOrMessage(message);\n publicKeys = toArray(publicKeys);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('verify', { message: message, publicKeys: publicKeys, signature: signature, date: date });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6() {\n var result;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n result = {};\n\n result.data = message instanceof _cleartext.CleartextMessage ? message.getText() : message.getLiteralData();\n\n if (!signature) {\n _context6.next = 8;\n break;\n }\n\n _context6.next = 5;\n return message.verifyDetached(signature, publicKeys, date);\n\n case 5:\n _context6.t0 = _context6.sent;\n _context6.next = 11;\n break;\n\n case 8:\n _context6.next = 10;\n return message.verify(publicKeys, date);\n\n case 10:\n _context6.t0 = _context6.sent;\n\n case 11:\n result.signatures = _context6.t0;\n return _context6.abrupt('return', result);\n\n case 13:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }))).catch(onError.bind(null, 'Error verifying cleartext signed message'));\n}\n\n///////////////////////////////////////////////\n// //\n// Session key encryption and decryption //\n// //\n///////////////////////////////////////////////\n\n\n/**\n * Encrypt a symmetric session key with public keys, passwords, or both at once. At least either public keys\n * or passwords must be specified.\n * @param {Uint8Array} data the session key to be encrypted e.g. 16 random bytes (for aes128)\n * @param {String} algorithm algorithm of the symmetric session key e.g. 'aes128' or 'aes256'\n * @param {String} aeadAlgorithm (optional) aead algorithm, e.g. 'eax' or 'ocb'\n * @param {Key|Array<Key>} publicKeys (optional) array of public keys or single key, used to encrypt the key\n * @param {String|Array<String>} passwords (optional) passwords for the message\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the date\n * @param {Object} toUserId (optional) user ID to encrypt for, e.g. { name:'Phil Zimmermann', email:'phil@openpgp.org' }\n * @returns {Promise<Message>} the encrypted session key packets contained in a message object\n * @async\n * @static\n */\nfunction encryptSessionKey(_ref17) {\n var data = _ref17.data,\n algorithm = _ref17.algorithm,\n aeadAlgorithm = _ref17.aeadAlgorithm,\n publicKeys = _ref17.publicKeys,\n passwords = _ref17.passwords,\n _ref17$wildcard = _ref17.wildcard,\n wildcard = _ref17$wildcard === undefined ? false : _ref17$wildcard,\n _ref17$date = _ref17.date,\n date = _ref17$date === undefined ? new Date() : _ref17$date,\n _ref17$toUserId = _ref17.toUserId,\n toUserId = _ref17$toUserId === undefined ? {} : _ref17$toUserId;\n\n checkBinary(data);checkString(algorithm, 'algorithm');publicKeys = toArray(publicKeys);passwords = toArray(passwords);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('encryptSessionKey', { data: data, algorithm: algorithm, aeadAlgorithm: aeadAlgorithm, publicKeys: publicKeys, passwords: passwords, wildcard: wildcard, date: date, toUserId: toUserId });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7() {\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _context7.next = 2;\n return messageLib.encryptSessionKey(data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard, date, toUserId);\n\n case 2:\n _context7.t0 = _context7.sent;\n return _context7.abrupt('return', {\n message: _context7.t0\n });\n\n case 4:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }))).catch(onError.bind(null, 'Error encrypting session key'));\n}\n\n/**\n * Decrypt symmetric session keys with a private key or password. Either a private key or\n * a password must be specified.\n * @param {Message} message a message object containing the encrypted session key packets\n * @param {Key|Array<Key>} privateKeys (optional) private keys with decrypted secret key data\n * @param {String|Array<String>} passwords (optional) passwords to decrypt the session key\n * @returns {Promise<Object|undefined>} Array of decrypted session key, algorithm pairs in form:\n * { data:Uint8Array, algorithm:String }\n * or 'undefined' if no key packets found\n * @async\n * @static\n */\nfunction decryptSessionKeys(_ref19) {\n var message = _ref19.message,\n privateKeys = _ref19.privateKeys,\n passwords = _ref19.passwords;\n\n checkMessage(message);privateKeys = toArray(privateKeys);passwords = toArray(passwords);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('decryptSessionKeys', { message: message, privateKeys: privateKeys, passwords: passwords });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8() {\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n return _context8.abrupt('return', message.decryptSessionKeys(privateKeys, passwords));\n\n case 1:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }))).catch(onError.bind(null, 'Error decrypting session keys'));\n}\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\n/**\n * Input validation\n */\nfunction checkString(data, name) {\n if (!_util2.default.isString(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type String');\n }\n}\nfunction checkBinary(data, name) {\n if (!_util2.default.isUint8Array(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type Uint8Array');\n }\n}\nfunction checkData(data, name) {\n if (!_util2.default.isUint8Array(data) && !_util2.default.isString(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type String or Uint8Array');\n }\n}\nfunction checkMessage(message) {\n if (!(message instanceof messageLib.Message)) {\n throw new Error('Parameter [message] needs to be of type Message');\n }\n}\nfunction checkCleartextOrMessage(message) {\n if (!(message instanceof _cleartext.CleartextMessage) && !(message instanceof messageLib.Message)) {\n throw new Error('Parameter [message] needs to be of type Message or CleartextMessage');\n }\n}\n\n/**\n * Normalize parameter to an array if it is not undefined.\n * @param {Object} param the parameter to be normalized\n * @returns {Array<Object>|undefined} the resulting array or undefined\n */\nfunction toArray(param) {\n if (param && !_util2.default.isArray(param)) {\n param = [param];\n }\n return param;\n}\n\n/**\n * Creates a message obejct either from a Uint8Array or a string.\n * @param {String|Uint8Array} data the payload for the message\n * @param {String} filename the literal data packet's filename\n * @param {Date} date the creation date of the package\n * @param {utf8|binary|text|mime} type (optional) data packet type\n * @returns {Message} a message object\n */\nfunction createMessage(data, filename) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var type = arguments[3];\n\n var msg = void 0;\n if (_util2.default.isUint8Array(data)) {\n msg = messageLib.fromBinary(data, filename, date, type);\n } else if (_util2.default.isString(data)) {\n msg = messageLib.fromText(data, filename, date, type);\n } else {\n throw new Error('Data must be of type String or Uint8Array');\n }\n return msg;\n}\n\n/**\n * Parse the message given a certain format.\n * @param {Message} message the message object to be parse\n * @param {String} format the output format e.g. 'utf8' or 'binary'\n * @returns {Object} the parse data in the respective format\n */\nfunction parseMessage(message, format) {\n if (format === 'binary') {\n return {\n data: message.getLiteralData(),\n filename: message.getFilename()\n };\n } else if (format === 'utf8') {\n return {\n data: message.getText(),\n filename: message.getFilename()\n };\n }\n throw new Error('Invalid format');\n}\n\n/**\n * Global error handler that logs the stack trace and rethrows a high lvl error message.\n * @param {String} message A human readable high level error Message\n * @param {Error} error The internal error that caused the failure\n */\nfunction onError(message, error) {\n // log the stack trace\n _util2.default.print_debug_error(error);\n\n // update error message\n try {\n error.message = message + ': ' + error.message;\n } catch (e) {}\n\n throw error;\n}\n\n/**\n * Check for native AEAD support and configuration by the user. Only\n * browsers that implement the current WebCrypto specification support\n * native GCM. Native EAX is built on CTR and CBC, which current\n * browsers support. OCB and CFB are not natively supported.\n * @returns {Boolean} If authenticated encryption should be used\n */\nfunction nativeAEAD() {\n return _config2.default.aead_protect && ((_config2.default.aead_protect_version !== 4 || _config2.default.aead_mode === _enums2.default.aead.experimental_gcm) && _util2.default.getWebCrypto() || _config2.default.aead_protect_version === 4 && _config2.default.aead_mode === _enums2.default.aead.eax && _util2.default.getWebCrypto());\n}\n\n},{\"./cleartext\":322,\"./config/config\":324,\"./enums\":359,\"./key\":362,\"./message\":366,\"./polyfills\":390,\"./util\":398,\"./worker/async_proxy\":400,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],368:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Trust = exports.Signature = exports.SecretSubkey = exports.Userid = exports.SecretKey = exports.OnePassSignature = exports.UserAttribute = exports.PublicSubkey = exports.Marker = exports.SymmetricallyEncrypted = exports.PublicKey = exports.Literal = exports.SymEncryptedSessionKey = exports.PublicKeyEncryptedSessionKey = exports.SymEncryptedAEADProtected = exports.SymEncryptedIntegrityProtected = exports.Compressed = undefined;\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _compressed = _dereq_('./compressed.js');\n\nObject.defineProperty(exports, 'Compressed', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_compressed).default;\n }\n});\n\nvar _sym_encrypted_integrity_protected = _dereq_('./sym_encrypted_integrity_protected.js');\n\nObject.defineProperty(exports, 'SymEncryptedIntegrityProtected', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sym_encrypted_integrity_protected).default;\n }\n});\n\nvar _sym_encrypted_aead_protected = _dereq_('./sym_encrypted_aead_protected.js');\n\nObject.defineProperty(exports, 'SymEncryptedAEADProtected', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sym_encrypted_aead_protected).default;\n }\n});\n\nvar _public_key_encrypted_session_key = _dereq_('./public_key_encrypted_session_key.js');\n\nObject.defineProperty(exports, 'PublicKeyEncryptedSessionKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_public_key_encrypted_session_key).default;\n }\n});\n\nvar _sym_encrypted_session_key = _dereq_('./sym_encrypted_session_key.js');\n\nObject.defineProperty(exports, 'SymEncryptedSessionKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sym_encrypted_session_key).default;\n }\n});\n\nvar _literal = _dereq_('./literal.js');\n\nObject.defineProperty(exports, 'Literal', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_literal).default;\n }\n});\n\nvar _public_key = _dereq_('./public_key.js');\n\nObject.defineProperty(exports, 'PublicKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_public_key).default;\n }\n});\n\nvar _symmetrically_encrypted = _dereq_('./symmetrically_encrypted.js');\n\nObject.defineProperty(exports, 'SymmetricallyEncrypted', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_symmetrically_encrypted).default;\n }\n});\n\nvar _marker = _dereq_('./marker.js');\n\nObject.defineProperty(exports, 'Marker', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_marker).default;\n }\n});\n\nvar _public_subkey = _dereq_('./public_subkey.js');\n\nObject.defineProperty(exports, 'PublicSubkey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_public_subkey).default;\n }\n});\n\nvar _user_attribute = _dereq_('./user_attribute.js');\n\nObject.defineProperty(exports, 'UserAttribute', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_user_attribute).default;\n }\n});\n\nvar _one_pass_signature = _dereq_('./one_pass_signature.js');\n\nObject.defineProperty(exports, 'OnePassSignature', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_one_pass_signature).default;\n }\n});\n\nvar _secret_key = _dereq_('./secret_key.js');\n\nObject.defineProperty(exports, 'SecretKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_secret_key).default;\n }\n});\n\nvar _userid = _dereq_('./userid.js');\n\nObject.defineProperty(exports, 'Userid', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_userid).default;\n }\n});\n\nvar _secret_subkey = _dereq_('./secret_subkey.js');\n\nObject.defineProperty(exports, 'SecretSubkey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_secret_subkey).default;\n }\n});\n\nvar _signature = _dereq_('./signature.js');\n\nObject.defineProperty(exports, 'Signature', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_signature).default;\n }\n});\n\nvar _trust = _dereq_('./trust.js');\n\nObject.defineProperty(exports, 'Trust', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_trust).default;\n }\n});\nexports.newPacketFromTag = newPacketFromTag;\nexports.fromStructuredClone = fromStructuredClone;\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _all_packets = _dereq_('./all_packets.js');\n\nvar packets = _interopRequireWildcard(_all_packets);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Allocate a new packet\n * @function newPacketFromTag\n * @memberof module:packet\n * @param {String} tag property name from {@link module:enums.packet}\n * @returns {Object} new packet object with type based on tag\n */\nfunction newPacketFromTag(tag) {\n return new packets[packetClassFromTagName(tag)]();\n}\n\n/**\n * Allocate a new packet from structured packet clone\n * @see {@link https://w3c.github.io/html/infrastructure.html#safe-passing-of-structured-data}\n * @function fromStructuredClone\n * @memberof module:packet\n * @param {Object} packetClone packet clone\n * @returns {Object} new packet object with data from packet clone\n */\nfunction fromStructuredClone(packetClone) {\n var tagName = _enums2.default.read(_enums2.default.packet, packetClone.tag);\n var packet = newPacketFromTag(tagName);\n (0, _assign2.default)(packet, packetClone);\n if (packet.postCloneTypeFix) {\n packet.postCloneTypeFix();\n }\n return packet;\n}\n\n/**\n * Convert tag name to class name\n * @param {String} tag property name from {@link module:enums.packet}\n * @returns {String}\n * @private\n */\nfunction packetClassFromTagName(tag) {\n return tag.substr(0, 1).toUpperCase() + tag.substr(1);\n}\n\n},{\"../enums.js\":359,\"./all_packets.js\":368,\"./compressed.js\":370,\"./literal.js\":372,\"./marker.js\":373,\"./one_pass_signature.js\":374,\"./public_key.js\":377,\"./public_key_encrypted_session_key.js\":378,\"./public_subkey.js\":379,\"./secret_key.js\":380,\"./secret_subkey.js\":381,\"./signature.js\":382,\"./sym_encrypted_aead_protected.js\":383,\"./sym_encrypted_integrity_protected.js\":384,\"./sym_encrypted_session_key.js\":385,\"./symmetrically_encrypted.js\":386,\"./trust.js\":387,\"./user_attribute.js\":388,\"./userid.js\":389,\"babel-runtime/core-js/object/assign\":24}],369:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.clonePackets = clonePackets;\nexports.parseClonedPackets = parseClonedPackets;\n\nvar _key = _dereq_('../key');\n\nvar _message = _dereq_('../message');\n\nvar _cleartext = _dereq_('../cleartext');\n\nvar _signature = _dereq_('../signature');\n\nvar _packetlist = _dereq_('./packetlist');\n\nvar _packetlist2 = _interopRequireDefault(_packetlist);\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//////////////////////////////\n// //\n// List --> Clone //\n// //\n//////////////////////////////\n\n\n/**\n * Create a packetlist from the correspoding object types.\n * @param {Object} options the object passed to and from the web worker\n * @returns {Object} a mutated version of the options optject\n */\nfunction clonePackets(options) {\n if (options.publicKeys) {\n options.publicKeys = options.publicKeys.map(function (key) {\n return key.toPacketlist();\n });\n }\n if (options.privateKeys) {\n options.privateKeys = options.privateKeys.map(function (key) {\n return key.toPacketlist();\n });\n }\n if (options.privateKey) {\n options.privateKey = options.privateKey.toPacketlist();\n }\n if (options.key) {\n options.key = options.key.toPacketlist();\n }\n if (options.message) {\n //could be either a Message or CleartextMessage object\n if (options.message instanceof _message.Message) {\n options.message = options.message.packets;\n } else if (options.message instanceof _cleartext.CleartextMessage) {\n options.message = { text: options.message.text, signature: options.message.signature.packets };\n }\n }\n if (options.signature && options.signature instanceof _signature.Signature) {\n options.signature = options.signature.packets;\n }\n if (options.signatures) {\n options.signatures = options.signatures.map(function (sig) {\n return verificationObjectToClone(sig);\n });\n }\n return options;\n} // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements packet list cloning required to\n * pass certain object types between the web worker and main thread using\n * the structured cloning algorithm.\n * @module packet/clone\n */\n\nfunction verificationObjectToClone(verObject) {\n verObject.signature = verObject.signature.packets;\n return verObject;\n}\n\n//////////////////////////////\n// //\n// Clone --> List //\n// //\n//////////////////////////////\n\n\n/**\n * Creates an object with the correct prototype from a corresponding packetlist.\n * @param {Object} options the object passed to and from the web worker\n * @param {String} method the public api function name to be delegated to the worker\n * @returns {Object} a mutated version of the options optject\n */\nfunction parseClonedPackets(options) {\n if (options.publicKeys) {\n options.publicKeys = options.publicKeys.map(packetlistCloneToKey);\n }\n if (options.privateKeys) {\n options.privateKeys = options.privateKeys.map(packetlistCloneToKey);\n }\n if (options.privateKey) {\n options.privateKey = packetlistCloneToKey(options.privateKey);\n }\n if (options.key) {\n options.key = packetlistCloneToKey(options.key);\n }\n if (options.message && options.message.signature) {\n options.message = packetlistCloneToCleartextMessage(options.message);\n } else if (options.message) {\n options.message = packetlistCloneToMessage(options.message);\n }\n if (options.signatures) {\n options.signatures = options.signatures.map(packetlistCloneToSignatures);\n }\n if (options.signature) {\n options.signature = packetlistCloneToSignature(options.signature);\n }\n return options;\n}\n\nfunction packetlistCloneToKey(clone) {\n var packetlist = _packetlist2.default.fromStructuredClone(clone);\n return new _key.Key(packetlist);\n}\n\nfunction packetlistCloneToMessage(clone) {\n var packetlist = _packetlist2.default.fromStructuredClone(clone);\n return new _message.Message(packetlist);\n}\n\nfunction packetlistCloneToCleartextMessage(clone) {\n var packetlist = _packetlist2.default.fromStructuredClone(clone.signature);\n return new _cleartext.CleartextMessage(clone.text, new _signature.Signature(packetlist));\n}\n\n//verification objects\nfunction packetlistCloneToSignatures(clone) {\n clone.keyid = _keyid2.default.fromClone(clone.keyid);\n clone.signature = new _signature.Signature(clone.signature);\n return clone;\n}\n\nfunction packetlistCloneToSignature(clone) {\n if (_util2.default.isString(clone)) {\n //signature is armored\n return clone;\n }\n var packetlist = _packetlist2.default.fromStructuredClone(clone);\n return new _signature.Signature(packetlist);\n}\n\n},{\"../cleartext\":322,\"../key\":362,\"../message\":366,\"../signature\":391,\"../type/keyid\":394,\"../util\":398,\"./packetlist\":376}],370:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _pako = _dereq_('pako');\n\nvar _pako2 = _interopRequireDefault(_pako);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _bzip2Build = _dereq_('../compression/bzip2.build.js');\n\nvar _bzip2Build2 = _interopRequireDefault(_bzip2Build);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Compressed Data Packet (Tag 8)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.6|RFC4880 5.6}:\n * The Compressed Data packet contains compressed data. Typically,\n * this packet is found as the contents of an encrypted packet, or following\n * a Signature or One-Pass Signature packet, and contains a literal data packet.\n * @memberof module:packet\n * @constructor\n */\nfunction Compressed() {\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.compressed;\n /**\n * List of packets\n * @type {module:packet.List}\n */\n this.packets = null;\n /**\n * Compression algorithm\n * @type {compression}\n */\n this.algorithm = 'zip';\n\n /**\n * Compressed packet data\n * @type {String}\n */\n this.compressed = null;\n}\n\n/**\n * Parsing function for the packet.\n * @param {String} bytes Payload of a tag 8 packet\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires pako\n * @requires config\n * @requires enums\n * @requires util\n * @requires compression/bzip2\n */\n\nCompressed.prototype.read = function (bytes) {\n // One octet that gives the algorithm used to compress the packet.\n this.algorithm = _enums2.default.read(_enums2.default.compression, bytes[0]);\n\n // Compressed data, which makes up the remainder of the packet.\n this.compressed = bytes.subarray(1, bytes.length);\n\n this.decompress();\n};\n\n/**\n * Return the compressed packet.\n * @returns {String} binary compressed packet\n */\nCompressed.prototype.write = function () {\n if (this.compressed === null) {\n this.compress();\n }\n\n return _util2.default.concatUint8Array([new Uint8Array([_enums2.default.write(_enums2.default.compression, this.algorithm)]), this.compressed]);\n};\n\n/**\n * Decompression method for decompressing the compressed data\n * read by read_packet\n */\nCompressed.prototype.decompress = function () {\n\n if (!decompress_fns[this.algorithm]) {\n throw new Error(\"Compression algorithm unknown :\" + this.algorithm);\n }\n\n this.packets.read(decompress_fns[this.algorithm](this.compressed));\n};\n\n/**\n * Compress the packet data (member decompressedData)\n */\nCompressed.prototype.compress = function () {\n\n if (!compress_fns[this.algorithm]) {\n throw new Error(\"Compression algorithm unknown :\" + this.algorithm);\n }\n\n this.compressed = compress_fns[this.algorithm](this.packets.write());\n};\n\nexports.default = Compressed;\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nvar nodeZlib = _util2.default.getNodeZlib();\n\nfunction node_zlib(func) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return function (data) {\n return func(data, options);\n };\n}\n\nfunction pako_zlib(constructor) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return function (data) {\n var obj = new constructor(options);\n obj.push(data, true);\n return obj.result;\n };\n}\n\nvar compress_fns = void 0;\nvar decompress_fns = void 0;\nif (nodeZlib) {\n // Use Node native zlib for DEFLATE compression/decompression\n compress_fns = {\n // eslint-disable-next-line no-sync\n zip: node_zlib(nodeZlib.deflateRawSync, { level: _config2.default.deflate_level }),\n // eslint-disable-next-line no-sync\n zlib: node_zlib(nodeZlib.deflateSync, { level: _config2.default.deflate_level }),\n bzip2: _bzip2Build2.default.compressFile\n };\n\n decompress_fns = {\n // eslint-disable-next-line no-sync\n zip: node_zlib(nodeZlib.inflateRawSync),\n // eslint-disable-next-line no-sync\n zlib: node_zlib(nodeZlib.inflateSync),\n bzip2: _bzip2Build2.default.decompressFile\n };\n} else {\n // Use JS fallbacks\n compress_fns = {\n zip: pako_zlib(_pako2.default.Deflate, { raw: true, level: _config2.default.deflate_level }),\n zlib: pako_zlib(_pako2.default.Deflate, { level: _config2.default.deflate_level }),\n bzip2: _bzip2Build2.default.compressFile\n };\n\n decompress_fns = {\n zip: pako_zlib(_pako2.default.Inflate, { raw: true }),\n zlib: pako_zlib(_pako2.default.Inflate),\n bzip2: _bzip2Build2.default.decompressFile\n };\n}\n\n},{\"../compression/bzip2.build.js\":323,\"../config\":325,\"../enums\":359,\"../util\":398,\"pako\":301}],371:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _all_packets = _dereq_('./all_packets');\n\nvar packets = _interopRequireWildcard(_all_packets);\n\nvar _clone = _dereq_('./clone');\n\nvar clone = _interopRequireWildcard(_clone);\n\nvar _packetlist = _dereq_('./packetlist');\n\nvar _packetlist2 = _interopRequireDefault(_packetlist);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mod = {\n List: _packetlist2.default,\n clone: clone\n}; /**\n * @fileoverview OpenPGP packet types\n * @see module:packet/all_packets\n * @see module:packet/clone\n * @see module:packet.List\n * @module packet\n */\n\n(0, _assign2.default)(mod, packets);\n\nexports.default = mod;\n\n},{\"./all_packets\":368,\"./clone\":369,\"./packetlist\":376,\"babel-runtime/core-js/object/assign\":24}],372:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Literal Data Packet (Tag 11)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.9|RFC4880 5.9}:\n * A Literal Data packet contains the body of a message; data that is not to be\n * further interpreted.\n * @param {Date} date the creation date of the literal package\n * @memberof module:packet\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires enums\n * @requires util\n */\n\nfunction Literal() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n this.tag = _enums2.default.packet.literal;\n this.format = 'utf8'; // default format for literal data packets\n this.date = _util2.default.normalizeDate(date);\n this.text = null; // textual data representation\n this.data = null; // literal data representation\n this.filename = 'msg.txt';\n}\n\n/**\n * Set the packet data to a javascript native string, end of line\n * will be normalized to \\r\\n and by default text is converted to UTF8\n * @param {String} text Any native javascript string\n * @param {utf8|binary|text|mime} format (optional) The format of the string of bytes\n */\nLiteral.prototype.setText = function (text) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utf8';\n\n this.format = format;\n this.text = text;\n this.data = null;\n};\n\n/**\n * Returns literal data packets as native JavaScript string\n * with normalized end of line to \\n\n * @returns {String} literal data as text\n */\nLiteral.prototype.getText = function () {\n if (this.text !== null) {\n return this.text;\n }\n // decode UTF8\n var text = _util2.default.decode_utf8(_util2.default.Uint8Array_to_str(this.data));\n // normalize EOL to \\n\n this.text = _util2.default.nativeEOL(text);\n return this.text;\n};\n\n/**\n * Set the packet data to value represented by the provided string of bytes.\n * @param {Uint8Array} bytes The string of bytes\n * @param {utf8|binary|text|mime} format The format of the string of bytes\n */\nLiteral.prototype.setBytes = function (bytes, format) {\n this.format = format;\n this.data = bytes;\n this.text = null;\n};\n\n/**\n * Get the byte sequence representing the literal packet data\n * @returns {Uint8Array} A sequence of bytes\n */\nLiteral.prototype.getBytes = function () {\n var textMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.data !== null) {\n return this.data;\n }\n\n if (textMode) {\n // normalize EOL to \\r\\n and UTF-8 encode\n this.data = _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(_util2.default.canonicalizeEOL(this.text)));\n } else {\n this.data = _util2.default.str_to_Uint8Array(this.text);\n }\n return this.data;\n};\n\n/**\n * Sets the filename of the literal packet data\n * @param {String} filename Any native javascript string\n */\nLiteral.prototype.setFilename = function (filename) {\n this.filename = filename;\n};\n\n/**\n * Get the filename of the literal packet data\n * @returns {String} filename\n */\nLiteral.prototype.getFilename = function () {\n return this.filename;\n};\n\n/**\n * Parsing function for a literal data packet (tag 11).\n *\n * @param {Uint8Array} input Payload of a tag 11 packet\n * @returns {module:packet.Literal} object representation\n */\nLiteral.prototype.read = function (bytes) {\n // - A one-octet field that describes how the data is formatted.\n var format = _enums2.default.read(_enums2.default.literal, bytes[0]);\n\n var filename_len = bytes[1];\n this.filename = _util2.default.decode_utf8(_util2.default.Uint8Array_to_str(bytes.subarray(2, 2 + filename_len)));\n\n this.date = _util2.default.readDate(bytes.subarray(2 + filename_len, 2 + filename_len + 4));\n\n var data = bytes.subarray(6 + filename_len, bytes.length);\n\n this.setBytes(data, format);\n};\n\n/**\n * Creates a string representation of the packet\n *\n * @returns {Uint8Array} Uint8Array representation of the packet\n */\nLiteral.prototype.write = function () {\n var filename = _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(this.filename));\n var filename_length = new Uint8Array([filename.length]);\n\n var format = new Uint8Array([_enums2.default.write(_enums2.default.literal, this.format)]);\n var date = _util2.default.writeDate(this.date);\n var data = this.getBytes(format !== 'binary');\n\n return _util2.default.concatUint8Array([format, filename_length, filename, date, data]);\n};\n\nexports.default = Literal;\n\n},{\"../enums\":359,\"../util\":398}],373:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the strange \"Marker packet\" (Tag 10)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.8|RFC4880 5.8}:\n * An experimental version of PGP used this packet as the Literal\n * packet, but no released version of PGP generated Literal packets with this\n * tag. With PGP 5.x, this packet has been reassigned and is reserved for use as\n * the Marker packet.\n *\n * Such a packet MUST be ignored when received.\n * @memberof module:packet\n * @constructor\n */\nfunction Marker() {\n this.tag = _enums2.default.packet.marker;\n}\n\n/**\n * Parsing function for a literal data packet (tag 10).\n *\n * @param {String} input Payload of a tag 10 packet\n * @param {Integer} position\n * Position to start reading from the input string\n * @param {Integer} len\n * Length of the packet or the remaining length of\n * input at position\n * @returns {module:packet.Marker} Object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires enums\n */\n\nMarker.prototype.read = function (bytes) {\n if (bytes[0] === 0x50 && // P\n bytes[1] === 0x47 && // G\n bytes[2] === 0x50) {\n // P\n return true;\n }\n // marker packet does not contain \"PGP\"\n return false;\n};\n\nexports.default = Marker;\n\n},{\"../enums\":359}],374:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the One-Pass Signature Packets (Tag 4)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.4|RFC4880 5.4}:\n * The One-Pass Signature packet precedes the signed data and contains\n * enough information to allow the receiver to begin calculating any\n * hashes needed to verify the signature. It allows the Signature\n * packet to be placed at the end of the message, so that the signer\n * can compute the entire signed message in one pass.\n * @memberof module:packet\n * @constructor\n */\nfunction OnePassSignature() {\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.onePassSignature;\n /** A one-octet version number. The current version is 3. */\n this.version = null;\n /**\n * A one-octet signature type.\n * Signature types are described in\n * {@link https://tools.ietf.org/html/rfc4880#section-5.2.1|RFC4880 Section 5.2.1}.\n */\n this.type = null;\n /**\n * A one-octet number describing the hash algorithm used.\n * @see {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC4880 9.4}\n */\n this.hashAlgorithm = null;\n /**\n * A one-octet number describing the public-key algorithm used.\n * @see {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC4880 9.1}\n */\n this.publicKeyAlgorithm = null;\n /** An eight-octet number holding the Key ID of the signing key. */\n this.signingKeyId = null;\n /**\n * A one-octet number holding a flag showing whether the signature is nested.\n * A zero value indicates that the next packet is another One-Pass Signature packet\n * that describes another signature to be applied to the same message data.\n */\n this.flags = null;\n}\n\n/**\n * parsing function for a one-pass signature packet (tag 4).\n * @param {Uint8Array} bytes payload of a tag 4 packet\n * @returns {module:packet.OnePassSignature} object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/keyid\n * @requires enums\n * @requires util\n*/\n\nOnePassSignature.prototype.read = function (bytes) {\n var mypos = 0;\n // A one-octet version number. The current version is 3.\n this.version = bytes[mypos++];\n\n // A one-octet signature type. Signature types are described in\n // Section 5.2.1.\n this.type = _enums2.default.read(_enums2.default.signature, bytes[mypos++]);\n\n // A one-octet number describing the hash algorithm used.\n this.hashAlgorithm = _enums2.default.read(_enums2.default.hash, bytes[mypos++]);\n\n // A one-octet number describing the public-key algorithm used.\n this.publicKeyAlgorithm = _enums2.default.read(_enums2.default.publicKey, bytes[mypos++]);\n\n // An eight-octet number holding the Key ID of the signing key.\n this.signingKeyId = new _keyid2.default();\n this.signingKeyId.read(bytes.subarray(mypos, mypos + 8));\n mypos += 8;\n\n // A one-octet number holding a flag showing whether the signature\n // is nested. A zero value indicates that the next packet is\n // another One-Pass Signature packet that describes another\n // signature to be applied to the same message data.\n this.flags = bytes[mypos++];\n return this;\n};\n\n/**\n * creates a string representation of a one-pass signature packet\n * @returns {Uint8Array} a Uint8Array representation of a one-pass signature packet\n */\nOnePassSignature.prototype.write = function () {\n var start = new Uint8Array([3, _enums2.default.write(_enums2.default.signature, this.type), _enums2.default.write(_enums2.default.hash, this.hashAlgorithm), _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm)]);\n\n var end = new Uint8Array([this.flags]);\n\n return _util2.default.concatUint8Array([start, this.signingKeyId.write(), end]);\n};\n\n/**\n * Fix custom types after cloning\n */\nOnePassSignature.prototype.postCloneTypeFix = function () {\n this.signingKeyId = _keyid2.default.fromClone(this.signingKeyId);\n};\n\nexports.default = OnePassSignature;\n\n},{\"../enums\":359,\"../type/keyid\":394,\"../util\":398}],375:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_(\"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _util = _dereq_(\"../util\");\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n readSimpleLength: function readSimpleLength(bytes) {\n var len = 0;\n var offset = void 0;\n var type = bytes[0];\n\n if (type < 192) {\n var _bytes = (0, _slicedToArray3.default)(bytes, 1);\n\n len = _bytes[0];\n\n offset = 1;\n } else if (type < 255) {\n len = (bytes[0] - 192 << 8) + bytes[1] + 192;\n offset = 2;\n } else if (type === 255) {\n len = _util2.default.readNumber(bytes.subarray(1, 1 + 4));\n offset = 5;\n }\n\n return {\n len: len,\n offset: offset\n };\n },\n\n /**\n * Encodes a given integer of length to the openpgp length specifier to a\n * string\n *\n * @param {Integer} length The length to encode\n * @returns {Uint8Array} String with openpgp length representation\n */\n writeSimpleLength: function writeSimpleLength(length) {\n if (length < 192) {\n return new Uint8Array([length]);\n } else if (length > 191 && length < 8384) {\n /*\n * let a = (total data packet length) - 192 let bc = two octet\n * representation of a let d = b + 192\n */\n return new Uint8Array([(length - 192 >> 8) + 192, length - 192 & 0xFF]);\n }\n return _util2.default.concatUint8Array([new Uint8Array([255]), _util2.default.writeNumber(length, 4)]);\n },\n\n /**\n * Writes a packet header version 4 with the given tag_type and length to a\n * string\n *\n * @param {Integer} tag_type Tag type\n * @param {Integer} length Length of the payload\n * @returns {String} String of the header\n */\n writeHeader: function writeHeader(tag_type, length) {\n /* we're only generating v4 packet headers here */\n return _util2.default.concatUint8Array([new Uint8Array([0xC0 | tag_type]), this.writeSimpleLength(length)]);\n },\n\n /**\n * Writes a packet header Version 3 with the given tag_type and length to a\n * string\n *\n * @param {Integer} tag_type Tag type\n * @param {Integer} length Length of the payload\n * @returns {String} String of the header\n */\n writeOldHeader: function writeOldHeader(tag_type, length) {\n if (length < 256) {\n return new Uint8Array([0x80 | tag_type << 2, length]);\n } else if (length < 65536) {\n return _util2.default.concatUint8Array([new Uint8Array([0x80 | tag_type << 2 | 1]), _util2.default.writeNumber(length, 2)]);\n }\n return _util2.default.concatUint8Array([new Uint8Array([0x80 | tag_type << 2 | 2]), _util2.default.writeNumber(length, 4)]);\n },\n\n /**\n * Generic static Packet Parser function\n *\n * @param {String} input Input stream as string\n * @param {integer} position Position to start parsing\n * @param {integer} len Length of the input from position on\n * @returns {Object} Returns a parsed module:packet/packet\n */\n read: function read(input, position, len) {\n // some sanity checks\n if (input === null || input.length <= position || input.subarray(position, input.length).length < 2 || (input[position] & 0x80) === 0) {\n throw new Error(\"Error during parsing. This message / key probably does not conform to a valid OpenPGP format.\");\n }\n var mypos = position;\n var tag = -1;\n var format = -1;\n var packet_length = void 0;\n\n format = 0; // 0 = old format; 1 = new format\n if ((input[mypos] & 0x40) !== 0) {\n format = 1;\n }\n\n var packet_length_type = void 0;\n if (format) {\n // new format header\n tag = input[mypos] & 0x3F; // bit 5-0\n } else {\n // old format header\n tag = (input[mypos] & 0x3F) >> 2; // bit 5-2\n packet_length_type = input[mypos] & 0x03; // bit 1-0\n }\n\n // header octet parsing done\n mypos++;\n\n // parsed length from length field\n var bodydata = null;\n\n // used for partial body lengths\n var real_packet_length = -1;\n if (!format) {\n // 4.2.1. Old Format Packet Lengths\n switch (packet_length_type) {\n case 0:\n // The packet has a one-octet length. The header is 2 octets\n // long.\n packet_length = input[mypos++];\n break;\n case 1:\n // The packet has a two-octet length. The header is 3 octets\n // long.\n packet_length = input[mypos++] << 8 | input[mypos++];\n break;\n case 2:\n // The packet has a four-octet length. The header is 5\n // octets long.\n packet_length = input[mypos++] << 24 | input[mypos++] << 16 | input[mypos++] << 8 | input[mypos++];\n break;\n default:\n // 3 - The packet is of indeterminate length. The header is 1\n // octet long, and the implementation must determine how long\n // the packet is. If the packet is in a file, this means that\n // the packet extends until the end of the file. In general,\n // an implementation SHOULD NOT use indeterminate-length\n // packets except where the end of the data will be clear\n // from the context, and even then it is better to use a\n // definite length, or a new format header. The new format\n // headers described below have a mechanism for precisely\n // encoding data of indeterminate length.\n packet_length = len;\n break;\n }\n } else {\n // 4.2.2. New Format Packet Lengths\n // 4.2.2.1. One-Octet Lengths\n if (input[mypos] < 192) {\n packet_length = input[mypos++];\n // 4.2.2.2. Two-Octet Lengths\n } else if (input[mypos] >= 192 && input[mypos] < 224) {\n packet_length = (input[mypos++] - 192 << 8) + input[mypos++] + 192;\n // 4.2.2.4. Partial Body Lengths\n } else if (input[mypos] > 223 && input[mypos] < 255) {\n packet_length = 1 << (input[mypos++] & 0x1F);\n // EEEK, we're reading the full data here...\n var mypos2 = mypos + packet_length;\n bodydata = [input.subarray(mypos, mypos + packet_length)];\n var tmplen = void 0;\n while (true) {\n if (input[mypos2] < 192) {\n tmplen = input[mypos2++];\n packet_length += tmplen;\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n mypos2 += tmplen;\n break;\n } else if (input[mypos2] >= 192 && input[mypos2] < 224) {\n tmplen = (input[mypos2++] - 192 << 8) + input[mypos2++] + 192;\n packet_length += tmplen;\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n mypos2 += tmplen;\n break;\n } else if (input[mypos2] > 223 && input[mypos2] < 255) {\n tmplen = 1 << (input[mypos2++] & 0x1F);\n packet_length += tmplen;\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n mypos2 += tmplen;\n } else {\n mypos2++;\n tmplen = input[mypos2++] << 24 | input[mypos2++] << 16 | input[mypos2++] << 8 | input[mypos2++];\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n packet_length += tmplen;\n mypos2 += tmplen;\n break;\n }\n }\n real_packet_length = mypos2 - mypos;\n // 4.2.2.3. Five-Octet Lengths\n } else {\n mypos++;\n packet_length = input[mypos++] << 24 | input[mypos++] << 16 | input[mypos++] << 8 | input[mypos++];\n }\n }\n\n // if there was'nt a partial body length: use the specified\n // packet_length\n if (real_packet_length === -1) {\n real_packet_length = packet_length;\n }\n\n if (bodydata === null) {\n bodydata = input.subarray(mypos, mypos + real_packet_length);\n } else if (bodydata instanceof Array) {\n bodydata = _util2.default.concatUint8Array(bodydata);\n }\n\n return {\n tag: tag,\n packet: bodydata,\n offset: mypos + real_packet_length\n };\n }\n}; // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions for reading and writing packets\n * @requires enums\n * @requires util\n * @module packet/packet\n */\n\n},{\"../util\":398,\"babel-runtime/helpers/slicedToArray\":40}],376:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _all_packets = _dereq_('./all_packets');\n\nvar packets = _interopRequireWildcard(_all_packets);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * This class represents a list of openpgp packets.\n * Take care when iterating over it - the packets themselves\n * are stored as numerical indices.\n * @memberof module:packet\n * @constructor\n */\nfunction List() {\n /**\n * The number of packets contained within the list.\n * @readonly\n * @type {Integer}\n */\n this.length = 0;\n}\n\n/**\n * Reads a stream of binary data and interprents it as a list of packets.\n * @param {Uint8Array} A Uint8Array of bytes.\n */\n/* eslint-disable callback-return */\n/**\n * @requires packet/all_packets\n * @requires packet/packet\n * @requires config\n * @requires enums\n * @requires util\n */\n\nList.prototype.read = function (bytes) {\n var i = 0;\n\n while (i < bytes.length) {\n var parsed = _packet2.default.read(bytes, i, bytes.length - i);\n i = parsed.offset;\n\n var pushed = false;\n try {\n var tag = _enums2.default.read(_enums2.default.packet, parsed.tag);\n var packet = packets.newPacketFromTag(tag);\n this.push(packet);\n pushed = true;\n packet.read(parsed.packet);\n } catch (e) {\n if (!_config2.default.tolerant || parsed.tag === _enums2.default.packet.symmetricallyEncrypted || parsed.tag === _enums2.default.packet.literal || parsed.tag === _enums2.default.packet.compressed) {\n throw e;\n }\n _util2.default.print_debug_error(e);\n if (pushed) {\n this.pop(); // drop unsupported packet\n }\n }\n }\n};\n\n/**\n * Creates a binary representation of openpgp objects contained within the\n * class instance.\n * @returns {Uint8Array} A Uint8Array containing valid openpgp packets.\n */\nList.prototype.write = function () {\n var arr = [];\n\n for (var i = 0; i < this.length; i++) {\n var packetbytes = this[i].write();\n arr.push(_packet2.default.writeHeader(this[i].tag, packetbytes.length));\n arr.push(packetbytes);\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Adds a packet to the list. This is the only supported method of doing so;\n * writing to packetlist[i] directly will result in an error.\n * @param {Object} packet Packet to push\n */\nList.prototype.push = function (packet) {\n if (!packet) {\n return;\n }\n\n packet.packets = packet.packets || new List();\n\n this[this.length] = packet;\n this.length++;\n};\n\n/**\n * Remove a packet from the list and return it.\n * @returns {Object} The packet that was removed\n */\nList.prototype.pop = function () {\n if (this.length === 0) {\n return;\n }\n\n var packet = this[this.length - 1];\n delete this[this.length - 1];\n this.length--;\n\n return packet;\n};\n\n/**\n * Creates a new PacketList with all packets that pass the test implemented by the provided function.\n */\nList.prototype.filter = function (callback) {\n var filtered = new List();\n\n for (var i = 0; i < this.length; i++) {\n if (callback(this[i], i, this)) {\n filtered.push(this[i]);\n }\n }\n\n return filtered;\n};\n\n/**\n * Creates a new PacketList with all packets from the given types\n */\nList.prototype.filterByTag = function () {\n var filtered = new List();\n\n var handle = function handle(tag) {\n return function (packetType) {\n return tag === packetType;\n };\n };\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n for (var i = 0; i < this.length; i++) {\n if (args.some(handle(this[i].tag))) {\n filtered.push(this[i]);\n }\n }\n\n return filtered;\n};\n\n/**\n * Executes the provided callback once for each element\n */\nList.prototype.forEach = function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback(this[i], i, this);\n }\n};\n\n/**\n * Returns an array containing return values of callback\n * on each element\n */\nList.prototype.map = function (callback) {\n var packetArray = [];\n\n for (var i = 0; i < this.length; i++) {\n packetArray.push(callback(this[i], i, this));\n }\n\n return packetArray;\n};\n\n/**\n * Executes the callback function once for each element\n * until it finds one where callback returns a truthy value\n * @param {Function} callback\n * @returns {Promise<Boolean>}\n * @async\n */\nList.prototype.some = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(callback) {\n var i;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n i = 0;\n\n case 1:\n if (!(i < this.length)) {\n _context.next = 9;\n break;\n }\n\n _context.next = 4;\n return callback(this[i], i, this);\n\n case 4:\n if (!_context.sent) {\n _context.next = 6;\n break;\n }\n\n return _context.abrupt('return', true);\n\n case 6:\n i++;\n _context.next = 1;\n break;\n\n case 9:\n return _context.abrupt('return', false);\n\n case 10:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Executes the callback function once for each element,\n * returns true if all callbacks returns a truthy value\n */\nList.prototype.every = function (callback) {\n for (var i = 0; i < this.length; i++) {\n if (!callback(this[i], i, this)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Traverses packet tree and returns first matching packet\n * @param {module:enums.packet} type The packet type\n * @returns {module:packet/packet|null}\n */\nList.prototype.findPacket = function (type) {\n var packetlist = this.filterByTag(type);\n if (packetlist.length) {\n return packetlist[0];\n }\n var found = null;\n for (var i = 0; i < this.length; i++) {\n if (this[i].packets.length) {\n found = this[i].packets.findPacket(type);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n};\n\n/**\n * Returns array of found indices by tag\n */\nList.prototype.indexOfTag = function () {\n var tagIndex = [];\n var that = this;\n\n var handle = function handle(tag) {\n return function (packetType) {\n return tag === packetType;\n };\n };\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n for (var i = 0; i < this.length; i++) {\n if (args.some(handle(that[i].tag))) {\n tagIndex.push(i);\n }\n }\n return tagIndex;\n};\n\n/**\n * Returns slice of packetlist\n */\nList.prototype.slice = function (begin, end) {\n if (!end) {\n end = this.length;\n }\n var part = new List();\n for (var i = begin; i < end; i++) {\n part.push(this[i]);\n }\n return part;\n};\n\n/**\n * Concatenates packetlist or array of packets\n */\nList.prototype.concat = function (packetlist) {\n if (packetlist) {\n for (var i = 0; i < packetlist.length; i++) {\n this.push(packetlist[i]);\n }\n }\n return this;\n};\n\n/**\n * Allocate a new packetlist from structured packetlist clone\n * See {@link https://w3c.github.io/html/infrastructure.html#safe-passing-of-structured-data}\n * @param {Object} packetClone packetlist clone\n * @returns {Object} new packetlist object with data from packetlist clone\n */\nList.fromStructuredClone = function (packetlistClone) {\n var packetlist = new List();\n for (var i = 0; i < packetlistClone.length; i++) {\n packetlist.push(packets.fromStructuredClone(packetlistClone[i]));\n if (packetlist[i].packets.length !== 0) {\n packetlist[i].packets = this.fromStructuredClone(packetlist[i].packets);\n } else {\n packetlist[i].packets = new List();\n }\n }\n return packetlist;\n};\n\nexports.default = List;\n\n},{\"../config\":325,\"../enums\":359,\"../util\":398,\"./all_packets\":368,\"./packet\":375,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],377:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _mpi = _dereq_('../type/mpi');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Key Material Packet (Tag 5,6,7,14)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.5|RFC4480 5.5}:\n * A key material packet contains all the information about a public or\n * private key. There are four variants of this packet type, and two\n * major versions.\n *\n * A Public-Key packet starts a series of packets that forms an OpenPGP\n * key (sometimes called an OpenPGP certificate).\n * @memberof module:packet\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/keyid\n * @requires type/mpi\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nfunction PublicKey() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.publicKey;\n /**\n * Packet version\n * @type {Integer}\n */\n this.version = _config2.default.aead_protect && _config2.default.aead_protect_version === 4 ? 5 : 4;\n /**\n * Key creation date.\n * @type {Date}\n */\n this.created = _util2.default.normalizeDate(date);\n /**\n * Algorithm specific params\n * @type {Array<Object>}\n */\n this.params = [];\n /**\n * Time until expiration in days (V3 only)\n * @type {Integer}\n */\n this.expirationTimeV3 = 0;\n /**\n * Fingerprint in lowercase hex\n * @type {String}\n */\n this.fingerprint = null;\n /**\n * Keyid\n * @type {module:type/keyid}\n */\n this.keyid = null;\n}\n\n/**\n * Internal Parser for public keys as specified in {@link https://tools.ietf.org/html/rfc4880#section-5.5.2|RFC 4880 section 5.5.2 Public-Key Packet Formats}\n * called by read_tag&lt;num&gt;\n * @param {Uint8Array} bytes Input array to read the packet from\n * @returns {Object} This object with attributes set by the parser\n */\nPublicKey.prototype.read = function (bytes) {\n var pos = 0;\n // A one-octet version number (3, 4 or 5).\n this.version = bytes[pos++];\n\n if (this.version === 3 || this.version === 4 || this.version === 5) {\n // - A four-octet number denoting the time that the key was created.\n this.created = _util2.default.readDate(bytes.subarray(pos, pos + 4));\n pos += 4;\n\n if (this.version === 3) {\n // - A two-octet number denoting the time in days that this key is\n // valid. If this number is zero, then it does not expire.\n this.expirationTimeV3 = _util2.default.readNumber(bytes.subarray(pos, pos + 2));\n pos += 2;\n }\n\n // - A one-octet number denoting the public-key algorithm of this key.\n this.algorithm = _enums2.default.read(_enums2.default.publicKey, bytes[pos++]);\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n\n if (this.version === 5) {\n // - A four-octet scalar octet count for the following key material.\n pos += 4;\n }\n\n // - A series of values comprising the key material. This is\n // algorithm-specific and described in section XXXX.\n var types = _crypto2.default.getPubKeyParamTypes(algo);\n this.params = _crypto2.default.constructParams(types);\n\n for (var i = 0; i < types.length && pos < bytes.length; i++) {\n pos += this.params[i].read(bytes.subarray(pos, bytes.length));\n if (pos > bytes.length) {\n throw new Error('Error reading MPI @:' + pos);\n }\n }\n\n return pos;\n }\n throw new Error('Version ' + this.version + ' of the key packet is unsupported.');\n};\n\n/**\n * Alias of read()\n * @see module:packet.PublicKey#read\n */\nPublicKey.prototype.readPublicKey = PublicKey.prototype.read;\n\n/**\n * Same as write_private_key, but has less information because of\n * public key.\n * @returns {Uint8Array} OpenPGP packet body contents,\n */\nPublicKey.prototype.write = function () {\n var arr = [];\n // Version\n arr.push(new Uint8Array([this.version]));\n arr.push(_util2.default.writeDate(this.created));\n if (this.version === 3) {\n arr.push(_util2.default.writeNumber(this.expirationTimeV3, 2));\n }\n // A one-octet number denoting the public-key algorithm of this key\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n arr.push(new Uint8Array([algo]));\n\n var paramCount = _crypto2.default.getPubKeyParamTypes(algo).length;\n var params = _util2.default.concatUint8Array(this.params.slice(0, paramCount).map(function (param) {\n return param.write();\n }));\n if (this.version === 5) {\n // A four-octet scalar octet count for the following key material\n arr.push(_util2.default.writeNumber(params.length, 4));\n }\n // Algorithm-specific params\n arr.push(params);\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Alias of write()\n * @see module:packet.PublicKey#write\n */\nPublicKey.prototype.writePublicKey = PublicKey.prototype.write;\n\n/**\n * Write an old version packet - it's used by some of the internal routines.\n */\nPublicKey.prototype.writeOld = function () {\n var bytes = this.writePublicKey();\n\n return _util2.default.concatUint8Array([new Uint8Array([0x99]), _util2.default.writeNumber(bytes.length, 2), bytes]);\n};\n\n/**\n * Calculates the key id of the key\n * @returns {String} A 8 byte key id\n */\nPublicKey.prototype.getKeyId = function () {\n if (this.keyid) {\n return this.keyid;\n }\n this.keyid = new _keyid2.default();\n if (this.version === 5) {\n this.keyid.read(_util2.default.hex_to_Uint8Array(this.getFingerprint()).subarray(0, 8));\n } else if (this.version === 4) {\n this.keyid.read(_util2.default.hex_to_Uint8Array(this.getFingerprint()).subarray(12, 20));\n } else if (this.version === 3) {\n var arr = this.params[0].write();\n this.keyid.read(arr.subarray(arr.length - 8, arr.length));\n }\n return this.keyid;\n};\n\n/**\n * Calculates the fingerprint of the key\n * @returns {Uint8Array} A Uint8Array containing the fingerprint\n */\nPublicKey.prototype.getFingerprintBytes = function () {\n if (this.fingerprint) {\n return this.fingerprint;\n }\n var toHash = void 0;\n if (this.version === 5) {\n var bytes = this.writePublicKey();\n toHash = _util2.default.concatUint8Array([new Uint8Array([0x9A]), _util2.default.writeNumber(bytes.length, 4), bytes]);\n this.fingerprint = _crypto2.default.hash.sha256(toHash);\n } else if (this.version === 4) {\n toHash = this.writeOld();\n this.fingerprint = _crypto2.default.hash.sha1(toHash);\n } else if (this.version === 3) {\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n var paramCount = _crypto2.default.getPubKeyParamTypes(algo).length;\n toHash = '';\n for (var i = 0; i < paramCount; i++) {\n toHash += this.params[i].toString();\n }\n this.fingerprint = _crypto2.default.hash.md5(_util2.default.str_to_Uint8Array(toHash));\n }\n return this.fingerprint;\n};\n\n/**\n * Calculates the fingerprint of the key\n * @returns {String} A string containing the fingerprint in lowercase hex\n */\nPublicKey.prototype.getFingerprint = function () {\n return _util2.default.Uint8Array_to_hex(this.getFingerprintBytes());\n};\n\n/**\n * Returns algorithm information\n * @returns {Promise<Object>} An object of the form {algorithm: String, bits:int, curve:String}\n */\nPublicKey.prototype.getAlgorithmInfo = function () {\n var result = {};\n result.algorithm = this.algorithm;\n if (this.params[0] instanceof _mpi2.default) {\n result.bits = this.params[0].byteLength() * 8;\n } else {\n result.curve = this.params[0].getName();\n }\n return result;\n};\n\n/**\n * Fix custom types after cloning\n */\nPublicKey.prototype.postCloneTypeFix = function () {\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n var types = _crypto2.default.getPubKeyParamTypes(algo);\n for (var i = 0; i < types.length; i++) {\n var param = this.params[i];\n this.params[i] = types[i].fromClone(param);\n }\n if (this.keyid) {\n this.keyid = _keyid2.default.fromClone(this.keyid);\n }\n};\n\nexports.default = PublicKey;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"../type/keyid\":394,\"../type/mpi\":395,\"../util\":398}],378:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _mpi = _dereq_('../type/mpi');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Public-Key Encrypted Session Key Packets (Tag 1)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.1|RFC4880 5.1}:\n * A Public-Key Encrypted Session Key packet holds the session key\n * used to encrypt a message. Zero or more Public-Key Encrypted Session Key\n * packets and/or Symmetric-Key Encrypted Session Key packets may precede a\n * Symmetrically Encrypted Data Packet, which holds an encrypted message. The\n * message is encrypted with the session key, and the session key is itself\n * encrypted and stored in the Encrypted Session Key packet(s). The\n * Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted\n * Session Key packet for each OpenPGP key to which the message is encrypted.\n * The recipient of the message finds a session key that is encrypted to their\n * public key, decrypts the session key, and then uses the session key to\n * decrypt the message.\n * @memberof module:packet\n * @constructor\n */\nfunction PublicKeyEncryptedSessionKey() {\n this.tag = _enums2.default.packet.publicKeyEncryptedSessionKey;\n this.version = 3;\n\n this.publicKeyId = new _keyid2.default();\n this.sessionKey = null;\n\n /** @type {Array<module:type/mpi>} */\n this.encrypted = [];\n}\n\n/**\n * Parsing function for a publickey encrypted session key packet (tag 1).\n *\n * @param {Uint8Array} input Payload of a tag 1 packet\n * @param {Integer} position Position to start reading from the input string\n * @param {Integer} len Length of the packet or the remaining length of\n * input at position\n * @returns {module:packet.PublicKeyEncryptedSessionKey} Object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/keyid\n * @requires type/mpi\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nPublicKeyEncryptedSessionKey.prototype.read = function (bytes) {\n this.version = bytes[0];\n this.publicKeyId.read(bytes.subarray(1, bytes.length));\n this.publicKeyAlgorithm = _enums2.default.read(_enums2.default.publicKey, bytes[9]);\n\n var i = 10;\n\n var algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n var types = _crypto2.default.getEncSessionKeyParamTypes(algo);\n this.encrypted = _crypto2.default.constructParams(types);\n\n for (var j = 0; j < types.length; j++) {\n i += this.encrypted[j].read(bytes.subarray(i, bytes.length));\n }\n};\n\n/**\n * Create a string representation of a tag 1 packet\n *\n * @returns {Uint8Array} The Uint8Array representation\n */\nPublicKeyEncryptedSessionKey.prototype.write = function () {\n var arr = [new Uint8Array([this.version]), this.publicKeyId.write(), new Uint8Array([_enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm)])];\n\n for (var i = 0; i < this.encrypted.length; i++) {\n arr.push(this.encrypted[i].write());\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Encrypt session key packet\n * @param {module:packet.PublicKey} key Public key\n * @returns {Promise<Boolean>}\n * @async\n */\nPublicKeyEncryptedSessionKey.prototype.encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(key) {\n var data, checksum, toEncrypt, algo;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n data = String.fromCharCode(_enums2.default.write(_enums2.default.symmetric, this.sessionKeyAlgorithm));\n\n\n data += _util2.default.Uint8Array_to_str(this.sessionKey);\n checksum = _util2.default.calc_checksum(this.sessionKey);\n\n data += _util2.default.Uint8Array_to_str(_util2.default.writeNumber(checksum, 2));\n\n toEncrypt = void 0;\n algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n\n if (!(algo === _enums2.default.publicKey.ecdh)) {\n _context.next = 10;\n break;\n }\n\n toEncrypt = new _mpi2.default(_crypto2.default.pkcs5.encode(data));\n _context.next = 15;\n break;\n\n case 10:\n _context.t0 = _mpi2.default;\n _context.next = 13;\n return _crypto2.default.pkcs1.eme.encode(data, key.params[0].byteLength());\n\n case 13:\n _context.t1 = _context.sent;\n toEncrypt = new _context.t0(_context.t1);\n\n case 15:\n _context.next = 17;\n return _crypto2.default.publicKeyEncrypt(algo, key.params, toEncrypt, key.getFingerprintBytes());\n\n case 17:\n this.encrypted = _context.sent;\n return _context.abrupt('return', true);\n\n case 19:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypts the session key (only for public key encrypted session key\n * packets (tag 1)\n *\n * @param {module:packet.SecretKey} key\n * Private key with secret params unlocked\n * @returns {Promise<Boolean>}\n * @async\n */\nPublicKeyEncryptedSessionKey.prototype.decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(key) {\n var algo, result, checksum, decoded;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n _context2.next = 3;\n return _crypto2.default.publicKeyDecrypt(algo, key.params, this.encrypted, key.getFingerprintBytes());\n\n case 3:\n result = _context2.sent;\n checksum = void 0;\n decoded = void 0;\n\n if (algo === _enums2.default.publicKey.ecdh) {\n decoded = _crypto2.default.pkcs5.decode(result.toString());\n checksum = _util2.default.readNumber(_util2.default.str_to_Uint8Array(decoded.substr(decoded.length - 2)));\n } else {\n decoded = _crypto2.default.pkcs1.eme.decode(result.toString());\n checksum = _util2.default.readNumber(result.toUint8Array().slice(result.byteLength() - 2));\n }\n\n key = _util2.default.str_to_Uint8Array(decoded.substring(1, decoded.length - 2));\n\n if (!(checksum !== _util2.default.calc_checksum(key))) {\n _context2.next = 12;\n break;\n }\n\n throw new Error('Checksum mismatch');\n\n case 12:\n this.sessionKey = key;\n this.sessionKeyAlgorithm = _enums2.default.read(_enums2.default.symmetric, decoded.charCodeAt(0));\n\n case 14:\n return _context2.abrupt('return', true);\n\n case 15:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Fix custom types after cloning\n */\nPublicKeyEncryptedSessionKey.prototype.postCloneTypeFix = function () {\n this.publicKeyId = _keyid2.default.fromClone(this.publicKeyId);\n var algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n var types = _crypto2.default.getEncSessionKeyParamTypes(algo);\n for (var i = 0; i < this.encrypted.length; i++) {\n this.encrypted[i] = types[i].fromClone(this.encrypted[i]);\n }\n};\n\nexports.default = PublicKeyEncryptedSessionKey;\n\n},{\"../crypto\":340,\"../enums\":359,\"../type/keyid\":394,\"../type/mpi\":395,\"../util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],379:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * A Public-Subkey packet (tag 14) has exactly the same format as a\n * Public-Key packet, but denotes a subkey. One or more subkeys may be\n * associated with a top-level key. By convention, the top-level key\n * provides signature services, and the subkeys provide encryption\n * services.\n * @memberof module:packet\n * @constructor\n * @extends module:packet.PublicKey\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/public_key\n * @requires enums\n */\n\nfunction PublicSubkey() {\n _public_key2.default.call(this);\n this.tag = _enums2.default.packet.publicSubkey;\n}\n\nPublicSubkey.prototype = new _public_key2.default();\nPublicSubkey.prototype.constructor = PublicSubkey;\n\nexports.default = PublicSubkey;\n\n},{\"../enums\":359,\"./public_key\":377}],380:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _keyid = _dereq_('../type/keyid.js');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _s2k = _dereq_('../type/s2k');\n\nvar _s2k2 = _interopRequireDefault(_s2k);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * A Secret-Key packet contains all the information that is found in a\n * Public-Key packet, including the public-key material, but also\n * includes the secret-key material after all the public-key fields.\n * @memberof module:packet\n * @constructor\n * @extends module:packet.PublicKey\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/public_key\n * @requires type/keyid\n * @requires type/s2k\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nfunction SecretKey() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n _public_key2.default.call(this, date);\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.secretKey;\n /**\n * Encrypted secret-key data\n */\n this.encrypted = null;\n /**\n * Indicator if secret-key data is available in decrypted form\n */\n this.isDecrypted = false;\n}\n\nSecretKey.prototype = new _public_key2.default();\nSecretKey.prototype.constructor = SecretKey;\n\nfunction get_hash_len(hash) {\n if (hash === 'sha1') {\n return 20;\n }\n return 2;\n}\n\nfunction get_hash_fn(hash) {\n if (hash === 'sha1') {\n return _crypto2.default.hash.sha1;\n }\n return function (c) {\n return _util2.default.writeNumber(_util2.default.calc_checksum(c), 2);\n };\n}\n\n// Helper function\n\nfunction parse_cleartext_params(hash_algorithm, cleartext, algorithm) {\n if (hash_algorithm) {\n var hashlen = get_hash_len(hash_algorithm);\n var hashfn = get_hash_fn(hash_algorithm);\n\n var hashtext = _util2.default.Uint8Array_to_str(cleartext.subarray(cleartext.length - hashlen, cleartext.length));\n cleartext = cleartext.subarray(0, cleartext.length - hashlen);\n var hash = _util2.default.Uint8Array_to_str(hashfn(cleartext));\n\n if (hash !== hashtext) {\n throw new Error(\"Incorrect key passphrase\");\n }\n }\n\n var algo = _enums2.default.write(_enums2.default.publicKey, algorithm);\n var types = _crypto2.default.getPrivKeyParamTypes(algo);\n var params = _crypto2.default.constructParams(types);\n var p = 0;\n\n for (var i = 0; i < types.length && p < cleartext.length; i++) {\n p += params[i].read(cleartext.subarray(p, cleartext.length));\n if (p > cleartext.length) {\n throw new Error('Error reading param @:' + p);\n }\n }\n\n return params;\n}\n\nfunction write_cleartext_params(hash_algorithm, algorithm, params) {\n var arr = [];\n var algo = _enums2.default.write(_enums2.default.publicKey, algorithm);\n var numPublicParams = _crypto2.default.getPubKeyParamTypes(algo).length;\n\n for (var i = numPublicParams; i < params.length; i++) {\n arr.push(params[i].write());\n }\n\n var bytes = _util2.default.concatUint8Array(arr);\n\n if (hash_algorithm) {\n var hash = get_hash_fn(hash_algorithm)(bytes);\n\n return _util2.default.concatUint8Array([bytes, hash]);\n }\n\n return bytes;\n}\n\n// 5.5.3. Secret-Key Packet Formats\n\n/**\n * Internal parser for private keys as specified in\n * {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.5.3|RFC4880bis-04 section 5.5.3}\n * @param {String} bytes Input string to read the packet from\n */\nSecretKey.prototype.read = function (bytes) {\n // - A Public-Key or Public-Subkey packet, as described above.\n var len = this.readPublicKey(bytes);\n\n bytes = bytes.subarray(len, bytes.length);\n\n // - One octet indicating string-to-key usage conventions. Zero\n // indicates that the secret-key data is not encrypted. 255 or 254\n // indicates that a string-to-key specifier is being given. Any\n // other value is a symmetric-key encryption algorithm identifier.\n var isEncrypted = bytes[0];\n\n if (isEncrypted) {\n this.encrypted = bytes;\n } else {\n // - Plain or encrypted multiprecision integers comprising the secret\n // key data. These algorithm-specific fields are as described\n // below.\n var privParams = parse_cleartext_params('mod', bytes.subarray(1, bytes.length), this.algorithm);\n this.params = this.params.concat(privParams);\n this.isDecrypted = true;\n }\n};\n\n/**\n * Creates an OpenPGP key packet for the given key.\n * @returns {String} A string of bytes containing the secret key OpenPGP packet\n */\nSecretKey.prototype.write = function () {\n var arr = [this.writePublicKey()];\n\n if (!this.encrypted) {\n arr.push(new Uint8Array([0]));\n arr.push(write_cleartext_params('mod', this.algorithm, this.params));\n } else {\n arr.push(this.encrypted);\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Encrypt the payload. By default, we use aes256 and iterated, salted string\n * to key specifier. If the key is in a decrypted state (isDecrypted === true)\n * and the passphrase is empty or undefined, the key will be set as not encrypted.\n * This can be used to remove passphrase protection after calling decrypt().\n * @param {String} passphrase\n * @returns {Promise<Boolean>}\n * @async\n */\nSecretKey.prototype.encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(passphrase) {\n var s2k, symmetric, hash, cleartext, key, blockLen, iv, arr, aead, optionalFields, mode, modeInstance, encrypted;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(this.isDecrypted && !passphrase)) {\n _context.next = 5;\n break;\n }\n\n this.encrypted = null;\n return _context.abrupt('return', false);\n\n case 5:\n if (passphrase) {\n _context.next = 7;\n break;\n }\n\n throw new Error('The key must be decrypted before removing passphrase protection.');\n\n case 7:\n s2k = new _s2k2.default();\n _context.next = 10;\n return _crypto2.default.random.getRandomBytes(8);\n\n case 10:\n s2k.salt = _context.sent;\n symmetric = 'aes256';\n hash = this.version === 5 ? null : 'sha1';\n cleartext = write_cleartext_params(hash, this.algorithm, this.params);\n key = produceEncryptionKey(s2k, passphrase, symmetric);\n blockLen = _crypto2.default.cipher[symmetric].blockSize;\n _context.next = 18;\n return _crypto2.default.random.getRandomBytes(blockLen);\n\n case 18:\n iv = _context.sent;\n arr = void 0;\n\n if (!(this.version === 5)) {\n _context.next = 36;\n break;\n }\n\n aead = 'eax';\n optionalFields = _util2.default.concatUint8Array([new Uint8Array([_enums2.default.write(_enums2.default.symmetric, symmetric), _enums2.default.write(_enums2.default.aead, aead)]), s2k.write(), iv]);\n\n arr = [new Uint8Array([253, optionalFields.length])];\n arr.push(optionalFields);\n mode = _crypto2.default[aead];\n _context.next = 28;\n return mode(symmetric, key);\n\n case 28:\n modeInstance = _context.sent;\n _context.next = 31;\n return modeInstance.encrypt(cleartext, iv.subarray(0, mode.ivLength), new Uint8Array());\n\n case 31:\n encrypted = _context.sent;\n\n arr.push(_util2.default.writeNumber(encrypted.length, 4));\n arr.push(encrypted);\n _context.next = 40;\n break;\n\n case 36:\n arr = [new Uint8Array([254, _enums2.default.write(_enums2.default.symmetric, symmetric)])];\n arr.push(s2k.write());\n arr.push(iv);\n arr.push(_crypto2.default.cfb.normalEncrypt(symmetric, key, cleartext, iv));\n\n case 40:\n\n this.encrypted = _util2.default.concatUint8Array(arr);\n return _context.abrupt('return', true);\n\n case 42:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\nfunction produceEncryptionKey(s2k, passphrase, algorithm) {\n return s2k.produce_key(passphrase, _crypto2.default.cipher[algorithm].keySize);\n}\n\n/**\n * Decrypts the private key params which are needed to use the key.\n * {@link module:packet.SecretKey.isDecrypted} should be false, as\n * otherwise calls to this function will throw an error.\n * @param {String} passphrase The passphrase for this private key as string\n * @returns {Promise<Boolean>}\n * @async\n */\nSecretKey.prototype.decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(passphrase) {\n var i, symmetric, aead, key, s2k_usage, s2k, iv, ciphertext, cleartext, mode, modeInstance, hash, privParams;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!this.isDecrypted) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Key packet is already decrypted.');\n\n case 2:\n i = 0;\n symmetric = void 0;\n aead = void 0;\n key = void 0;\n s2k_usage = this.encrypted[i++];\n\n // - Only for a version 5 packet, a one-octet scalar octet count of\n // the next 4 optional fields.\n\n if (this.version === 5) {\n i++;\n }\n\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // one-octet symmetric encryption algorithm.\n if (s2k_usage === 255 || s2k_usage === 254 || s2k_usage === 253) {\n symmetric = this.encrypted[i++];\n symmetric = _enums2.default.read(_enums2.default.symmetric, symmetric);\n\n // - [Optional] If string-to-key usage octet was 253, a one-octet\n // AEAD algorithm.\n if (s2k_usage === 253) {\n aead = this.encrypted[i++];\n aead = _enums2.default.read(_enums2.default.aead, aead);\n }\n\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // string-to-key specifier. The length of the string-to-key\n // specifier is implied by its type, as described above.\n s2k = new _s2k2.default();\n\n i += s2k.read(this.encrypted.subarray(i, this.encrypted.length));\n\n key = produceEncryptionKey(s2k, passphrase, symmetric);\n } else {\n symmetric = s2k_usage;\n symmetric = _enums2.default.read(_enums2.default.symmetric, symmetric);\n key = _crypto2.default.hash.md5(passphrase);\n }\n\n // - [Optional] If secret data is encrypted (string-to-key usage octet\n // not zero), an Initial Vector (IV) of the same length as the\n // cipher's block size.\n iv = this.encrypted.subarray(i, i + _crypto2.default.cipher[symmetric].blockSize);\n\n\n i += iv.length;\n\n // - Only for a version 5 packet, a four-octet scalar octet count for\n // the following key material.\n if (this.version === 5) {\n i += 4;\n }\n\n ciphertext = this.encrypted.subarray(i, this.encrypted.length);\n cleartext = void 0;\n\n if (!aead) {\n _context2.next = 31;\n break;\n }\n\n mode = _crypto2.default[aead];\n _context2.prev = 16;\n _context2.next = 19;\n return mode(symmetric, key);\n\n case 19:\n modeInstance = _context2.sent;\n _context2.next = 22;\n return modeInstance.decrypt(ciphertext, iv.subarray(0, mode.ivLength), new Uint8Array());\n\n case 22:\n cleartext = _context2.sent;\n _context2.next = 29;\n break;\n\n case 25:\n _context2.prev = 25;\n _context2.t0 = _context2['catch'](16);\n\n if (!(_context2.t0.message === 'Authentication tag mismatch')) {\n _context2.next = 29;\n break;\n }\n\n throw new Error('Incorrect key passphrase: ' + _context2.t0.message);\n\n case 29:\n _context2.next = 32;\n break;\n\n case 31:\n cleartext = _crypto2.default.cfb.normalDecrypt(symmetric, key, ciphertext, iv);\n\n case 32:\n hash = s2k_usage === 253 ? null : s2k_usage === 254 ? 'sha1' : 'mod';\n privParams = parse_cleartext_params(hash, cleartext, this.algorithm);\n\n this.params = this.params.concat(privParams);\n this.isDecrypted = true;\n this.encrypted = null;\n\n return _context2.abrupt('return', true);\n\n case 38:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this, [[16, 25]]);\n }));\n\n return function (_x3) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nSecretKey.prototype.generate = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(bits, curve) {\n var algo;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n _context3.next = 3;\n return _crypto2.default.generateParams(algo, bits, curve);\n\n case 3:\n this.params = _context3.sent;\n\n this.isDecrypted = true;\n\n case 5:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4, _x5) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n/**\n * Clear private params, return to initial state\n */\nSecretKey.prototype.clearPrivateParams = function () {\n if (!this.encrypted) {\n throw new Error('If secret key is not encrypted, clearing private params is irreversible.');\n }\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n this.params = this.params.slice(0, _crypto2.default.getPubKeyParamTypes(algo).length);\n this.isDecrypted = false;\n};\n\n/**\n * Fix custom types after cloning\n */\nSecretKey.prototype.postCloneTypeFix = function () {\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n var types = [].concat(_crypto2.default.getPubKeyParamTypes(algo), _crypto2.default.getPrivKeyParamTypes(algo));\n for (var i = 0; i < this.params.length; i++) {\n var param = this.params[i];\n this.params[i] = types[i].fromClone(param);\n }\n if (this.keyid) {\n this.keyid = _keyid2.default.fromClone(this.keyid);\n }\n};\n\nexports.default = SecretKey;\n\n},{\"../crypto\":340,\"../enums\":359,\"../type/keyid.js\":394,\"../type/s2k\":397,\"../util\":398,\"./public_key\":377,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],381:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _secret_key = _dereq_('./secret_key');\n\nvar _secret_key2 = _interopRequireDefault(_secret_key);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * A Secret-Subkey packet (tag 7) is the subkey analog of the Secret\n * Key packet and has exactly the same format.\n * @memberof module:packet\n * @constructor\n * @extends module:packet.SecretKey\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/secret_key\n * @requires enums\n */\n\nfunction SecretSubkey() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n _secret_key2.default.call(this, date);\n this.tag = _enums2.default.packet.secretSubkey;\n}\n\nSecretSubkey.prototype = new _secret_key2.default();\nSecretSubkey.prototype.constructor = SecretSubkey;\n\nexports.default = SecretSubkey;\n\n},{\"../enums\":359,\"./secret_key\":380}],382:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _entries = _dereq_('babel-runtime/core-js/object/entries');\n\nvar _entries2 = _interopRequireDefault(_entries);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _packet2 = _dereq_('./packet');\n\nvar _packet3 = _interopRequireDefault(_packet2);\n\nvar _keyid = _dereq_('../type/keyid.js');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _mpi = _dereq_('../type/mpi.js');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Signature Packet (Tag 2)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.2|RFC4480 5.2}:\n * A Signature packet describes a binding between some public key and\n * some data. The most common signatures are a signature of a file or a\n * block of text, and a signature that is a certification of a User ID.\n * @memberof module:packet\n * @constructor\n * @param {Date} date the creation date of the signature\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/packet\n * @requires type/keyid\n * @requires type/mpi\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nfunction Signature() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n this.tag = _enums2.default.packet.signature;\n this.version = 4;\n this.signatureType = null;\n this.hashAlgorithm = null;\n this.publicKeyAlgorithm = null;\n\n this.signatureData = null;\n this.unhashedSubpackets = null;\n this.signedHashValue = null;\n\n this.created = _util2.default.normalizeDate(date);\n this.signatureExpirationTime = null;\n this.signatureNeverExpires = true;\n this.exportable = null;\n this.trustLevel = null;\n this.trustAmount = null;\n this.regularExpression = null;\n this.revocable = null;\n this.keyExpirationTime = null;\n this.keyNeverExpires = null;\n this.preferredSymmetricAlgorithms = null;\n this.revocationKeyClass = null;\n this.revocationKeyAlgorithm = null;\n this.revocationKeyFingerprint = null;\n this.issuerKeyId = new _keyid2.default();\n this.notation = null;\n this.preferredHashAlgorithms = null;\n this.preferredCompressionAlgorithms = null;\n this.keyServerPreferences = null;\n this.preferredKeyServer = null;\n this.isPrimaryUserID = null;\n this.policyURI = null;\n this.keyFlags = null;\n this.signersUserId = null;\n this.reasonForRevocationFlag = null;\n this.reasonForRevocationString = null;\n this.features = null;\n this.signatureTargetPublicKeyAlgorithm = null;\n this.signatureTargetHashAlgorithm = null;\n this.signatureTargetHash = null;\n this.embeddedSignature = null;\n this.issuerKeyVersion = null;\n this.issuerFingerprint = null;\n this.preferredAeadAlgorithms = null;\n\n this.verified = null;\n this.revoked = null;\n}\n\n/**\n * parsing function for a signature packet (tag 2).\n * @param {String} bytes payload of a tag 2 packet\n * @param {Integer} position position to start reading from the bytes string\n * @param {Integer} len length of the packet or the remaining length of bytes at position\n * @returns {module:packet.Signature} object representation\n */\nSignature.prototype.read = function (bytes) {\n var _this = this;\n\n var i = 0;\n this.version = bytes[i++];\n\n var subpackets = function subpackets(bytes) {\n // Two-octet scalar octet count for following subpacket data.\n var subpacket_length = _util2.default.readNumber(bytes.subarray(0, 2));\n\n var i = 2;\n\n // subpacket data set (zero or more subpackets)\n while (i < 2 + subpacket_length) {\n var len = _packet3.default.readSimpleLength(bytes.subarray(i, bytes.length));\n i += len.offset;\n\n _this.read_sub_packet(bytes.subarray(i, i + len.len));\n\n i += len.len;\n }\n\n return i;\n };\n\n // switch on version (3 and 4)\n switch (this.version) {\n case 3:\n {\n // One-octet length of following hashed material. MUST be 5.\n if (bytes[i++] !== 5) {\n _util2.default.print_debug(\"packet/signature.js\\n\" + 'invalid One-octet length of following hashed material.' + 'MUST be 5. @:' + (i - 1));\n }\n\n var sigpos = i;\n // One-octet signature type.\n this.signatureType = bytes[i++];\n\n // Four-octet creation time.\n this.created = _util2.default.readDate(bytes.subarray(i, i + 4));\n i += 4;\n\n // storing data appended to data which gets verified\n this.signatureData = bytes.subarray(sigpos, i);\n\n // Eight-octet Key ID of signer.\n this.issuerKeyId.read(bytes.subarray(i, i + 8));\n i += 8;\n\n // One-octet public-key algorithm.\n this.publicKeyAlgorithm = bytes[i++];\n\n // One-octet hash algorithm.\n this.hashAlgorithm = bytes[i++];\n break;\n }\n case 4:\n {\n this.signatureType = bytes[i++];\n this.publicKeyAlgorithm = bytes[i++];\n this.hashAlgorithm = bytes[i++];\n\n // hashed subpackets\n i += subpackets(bytes.subarray(i, bytes.length), true);\n\n // A V4 signature hashes the packet body\n // starting from its first field, the version number, through the end\n // of the hashed subpacket data. Thus, the fields hashed are the\n // signature version, the signature type, the public-key algorithm, the\n // hash algorithm, the hashed subpacket length, and the hashed\n // subpacket body.\n this.signatureData = bytes.subarray(0, i);\n var sigDataLength = i;\n\n // unhashed subpackets\n i += subpackets(bytes.subarray(i, bytes.length), false);\n this.unhashedSubpackets = bytes.subarray(sigDataLength, i);\n\n break;\n }\n default:\n throw new Error('Version ' + this.version + ' of the signature is unsupported.');\n }\n\n // Two-octet field holding left 16 bits of signed hash value.\n this.signedHashValue = bytes.subarray(i, i + 2);\n i += 2;\n\n this.signature = bytes.subarray(i, bytes.length);\n};\n\nSignature.prototype.write = function () {\n var arr = [];\n switch (this.version) {\n case 3:\n arr.push(new Uint8Array([3, 5])); // version, One-octet length of following hashed material. MUST be 5\n arr.push(new Uint8Array([this.signatureType]));\n arr.push(_util2.default.writeDate(this.created));\n arr.push(this.issuerKeyId.write());\n arr.push(new Uint8Array([_enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm), _enums2.default.write(_enums2.default.hash, this.hashAlgorithm)]));\n break;\n case 4:\n arr.push(this.signatureData);\n arr.push(this.unhashedSubpackets ? this.unhashedSubpackets : _util2.default.writeNumber(0, 2));\n break;\n }\n arr.push(this.signedHashValue);\n arr.push(this.signature);\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Signs provided data. This needs to be done prior to serialization.\n * @param {module:packet.SecretKey} key private key used to sign the message.\n * @param {Object} data Contains packets to be signed.\n * @returns {Promise<Boolean>}\n * @async\n */\nSignature.prototype.sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(key, data) {\n var signatureType, publicKeyAlgorithm, hashAlgorithm, arr, trailer, toHash, hash;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n signatureType = _enums2.default.write(_enums2.default.signature, this.signatureType);\n publicKeyAlgorithm = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n hashAlgorithm = _enums2.default.write(_enums2.default.hash, this.hashAlgorithm);\n arr = [new Uint8Array([4, signatureType, publicKeyAlgorithm, hashAlgorithm])];\n\n\n if (key.version === 5) {\n // We could also generate this subpacket for version 4 keys, but for\n // now we don't.\n this.issuerKeyVersion = key.version;\n this.issuerFingerprint = key.getFingerprintBytes();\n }\n\n this.issuerKeyId = key.getKeyId();\n\n // Add hashed subpackets\n arr.push(this.write_all_sub_packets());\n\n this.signatureData = _util2.default.concatUint8Array(arr);\n\n trailer = this.calculateTrailer();\n toHash = null;\n _context.t0 = this.version;\n _context.next = _context.t0 === 3 ? 13 : _context.t0 === 4 ? 15 : 17;\n break;\n\n case 13:\n toHash = _util2.default.concatUint8Array([this.toSign(signatureType, data), new Uint8Array([signatureType]), _util2.default.writeDate(this.created)]);\n return _context.abrupt('break', 18);\n\n case 15:\n toHash = _util2.default.concatUint8Array([this.toSign(signatureType, data), this.signatureData, trailer]);\n return _context.abrupt('break', 18);\n\n case 17:\n throw new Error('Version ' + this.version + ' of the signature is unsupported.');\n\n case 18:\n hash = _crypto2.default.hash.digest(hashAlgorithm, toHash);\n\n\n this.signedHashValue = hash.subarray(0, 2);\n\n _context.next = 22;\n return _crypto2.default.signature.sign(publicKeyAlgorithm, hashAlgorithm, key.params, toHash);\n\n case 22:\n this.signature = _context.sent;\n return _context.abrupt('return', true);\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Creates string of bytes with all subpacket data\n * @returns {String} a string-representation of a all subpacket data\n */\nSignature.prototype.write_all_sub_packets = function () {\n var sub = _enums2.default.signatureSubpacket;\n var arr = [];\n var bytes = void 0;\n if (this.created !== null) {\n arr.push(write_sub_packet(sub.signature_creation_time, _util2.default.writeDate(this.created)));\n }\n if (this.signatureExpirationTime !== null) {\n arr.push(write_sub_packet(sub.signature_expiration_time, _util2.default.writeNumber(this.signatureExpirationTime, 4)));\n }\n if (this.exportable !== null) {\n arr.push(write_sub_packet(sub.exportable_certification, new Uint8Array([this.exportable ? 1 : 0])));\n }\n if (this.trustLevel !== null) {\n bytes = new Uint8Array([this.trustLevel, this.trustAmount]);\n arr.push(write_sub_packet(sub.trust_signature, bytes));\n }\n if (this.regularExpression !== null) {\n arr.push(write_sub_packet(sub.regular_expression, this.regularExpression));\n }\n if (this.revocable !== null) {\n arr.push(write_sub_packet(sub.revocable, new Uint8Array([this.revocable ? 1 : 0])));\n }\n if (this.keyExpirationTime !== null) {\n arr.push(write_sub_packet(sub.key_expiration_time, _util2.default.writeNumber(this.keyExpirationTime, 4)));\n }\n if (this.preferredSymmetricAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredSymmetricAlgorithms));\n arr.push(write_sub_packet(sub.preferred_symmetric_algorithms, bytes));\n }\n if (this.revocationKeyClass !== null) {\n bytes = new Uint8Array([this.revocationKeyClass, this.revocationKeyAlgorithm]);\n bytes = _util2.default.concatUint8Array([bytes, this.revocationKeyFingerprint]);\n arr.push(write_sub_packet(sub.revocation_key, bytes));\n }\n if (!this.issuerKeyId.isNull() && this.issuerKeyVersion !== 5) {\n // If the version of [the] key is greater than 4, this subpacket\n // MUST NOT be included in the signature.\n arr.push(write_sub_packet(sub.issuer, this.issuerKeyId.write()));\n }\n if (this.notation !== null) {\n (0, _entries2.default)(this.notation).forEach(function (_ref2) {\n var _ref3 = (0, _slicedToArray3.default)(_ref2, 2),\n name = _ref3[0],\n value = _ref3[1];\n\n bytes = [new Uint8Array([0x80, 0, 0, 0])];\n // 2 octets of name length\n bytes.push(_util2.default.writeNumber(name.length, 2));\n // 2 octets of value length\n bytes.push(_util2.default.writeNumber(value.length, 2));\n bytes.push(_util2.default.str_to_Uint8Array(name + value));\n bytes = _util2.default.concatUint8Array(bytes);\n arr.push(write_sub_packet(sub.notation_data, bytes));\n });\n }\n if (this.preferredHashAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredHashAlgorithms));\n arr.push(write_sub_packet(sub.preferred_hash_algorithms, bytes));\n }\n if (this.preferredCompressionAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredCompressionAlgorithms));\n arr.push(write_sub_packet(sub.preferred_compression_algorithms, bytes));\n }\n if (this.keyServerPreferences !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.keyServerPreferences));\n arr.push(write_sub_packet(sub.key_server_preferences, bytes));\n }\n if (this.preferredKeyServer !== null) {\n arr.push(write_sub_packet(sub.preferred_key_server, _util2.default.str_to_Uint8Array(this.preferredKeyServer)));\n }\n if (this.isPrimaryUserID !== null) {\n arr.push(write_sub_packet(sub.primary_user_id, new Uint8Array([this.isPrimaryUserID ? 1 : 0])));\n }\n if (this.policyURI !== null) {\n arr.push(write_sub_packet(sub.policy_uri, _util2.default.str_to_Uint8Array(this.policyURI)));\n }\n if (this.keyFlags !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.keyFlags));\n arr.push(write_sub_packet(sub.key_flags, bytes));\n }\n if (this.signersUserId !== null) {\n arr.push(write_sub_packet(sub.signers_user_id, _util2.default.str_to_Uint8Array(this.signersUserId)));\n }\n if (this.reasonForRevocationFlag !== null) {\n bytes = _util2.default.str_to_Uint8Array(String.fromCharCode(this.reasonForRevocationFlag) + this.reasonForRevocationString);\n arr.push(write_sub_packet(sub.reason_for_revocation, bytes));\n }\n if (this.features !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.features));\n arr.push(write_sub_packet(sub.features, bytes));\n }\n if (this.signatureTargetPublicKeyAlgorithm !== null) {\n bytes = [new Uint8Array([this.signatureTargetPublicKeyAlgorithm, this.signatureTargetHashAlgorithm])];\n bytes.push(_util2.default.str_to_Uint8Array(this.signatureTargetHash));\n bytes = _util2.default.concatUint8Array(bytes);\n arr.push(write_sub_packet(sub.signature_target, bytes));\n }\n if (this.embeddedSignature !== null) {\n arr.push(write_sub_packet(sub.embedded_signature, this.embeddedSignature.write()));\n }\n if (this.issuerFingerprint !== null) {\n bytes = [new Uint8Array([this.issuerKeyVersion]), this.issuerFingerprint];\n bytes = _util2.default.concatUint8Array(bytes);\n arr.push(write_sub_packet(sub.issuer_fingerprint, bytes));\n }\n if (this.preferredAeadAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredAeadAlgorithms));\n arr.push(write_sub_packet(sub.preferred_aead_algorithms, bytes));\n }\n\n var result = _util2.default.concatUint8Array(arr);\n var length = _util2.default.writeNumber(result.length, 2);\n\n return _util2.default.concatUint8Array([length, result]);\n};\n\n/**\n * Creates a string representation of a sub signature packet\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.1|RFC4880 5.2.3.1}\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.2|RFC4880 5.2.3.2}\n * @param {Integer} type subpacket signature type.\n * @param {String} data data to be included\n * @returns {String} a string-representation of a sub signature packet\n * @private\n */\nfunction write_sub_packet(type, data) {\n var arr = [];\n arr.push(_packet3.default.writeSimpleLength(data.length + 1));\n arr.push(new Uint8Array([type]));\n arr.push(data);\n return _util2.default.concatUint8Array(arr);\n}\n\n// V4 signature sub packets\n\nSignature.prototype.read_sub_packet = function (bytes) {\n var _this2 = this;\n\n var mypos = 0;\n\n var read_array = function read_array(prop, bytes) {\n _this2[prop] = [];\n\n for (var i = 0; i < bytes.length; i++) {\n _this2[prop].push(bytes[i]);\n }\n };\n\n // The leftwost bit denotes a \"critical\" packet, but we ignore it.\n var type = bytes[mypos++] & 0x7F;\n var seconds = void 0;\n\n // subpacket type\n switch (type) {\n case 2:\n // Signature Creation Time\n this.created = _util2.default.readDate(bytes.subarray(mypos, bytes.length));\n break;\n case 3:\n // Signature Expiration Time in seconds\n seconds = _util2.default.readNumber(bytes.subarray(mypos, bytes.length));\n\n this.signatureNeverExpires = seconds === 0;\n this.signatureExpirationTime = seconds;\n\n break;\n case 4:\n // Exportable Certification\n this.exportable = bytes[mypos++] === 1;\n break;\n case 5:\n // Trust Signature\n this.trustLevel = bytes[mypos++];\n this.trustAmount = bytes[mypos++];\n break;\n case 6:\n // Regular Expression\n this.regularExpression = bytes[mypos];\n break;\n case 7:\n // Revocable\n this.revocable = bytes[mypos++] === 1;\n break;\n case 9:\n // Key Expiration Time in seconds\n seconds = _util2.default.readNumber(bytes.subarray(mypos, bytes.length));\n\n this.keyExpirationTime = seconds;\n this.keyNeverExpires = seconds === 0;\n\n break;\n case 11:\n // Preferred Symmetric Algorithms\n read_array('preferredSymmetricAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n case 12:\n // Revocation Key\n // (1 octet of class, 1 octet of public-key algorithm ID, 20\n // octets of\n // fingerprint)\n this.revocationKeyClass = bytes[mypos++];\n this.revocationKeyAlgorithm = bytes[mypos++];\n this.revocationKeyFingerprint = bytes.subarray(mypos, mypos + 20);\n break;\n\n case 16:\n // Issuer\n this.issuerKeyId.read(bytes.subarray(mypos, bytes.length));\n break;\n\n case 20:\n // Notation Data\n // We don't know how to handle anything but a text flagged data.\n if (bytes[mypos] === 0x80) {\n // We extract key/value tuple from the byte stream.\n mypos += 4;\n var m = _util2.default.readNumber(bytes.subarray(mypos, mypos + 2));\n mypos += 2;\n var n = _util2.default.readNumber(bytes.subarray(mypos, mypos + 2));\n mypos += 2;\n\n var name = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, mypos + m));\n var value = _util2.default.Uint8Array_to_str(bytes.subarray(mypos + m, mypos + m + n));\n\n this.notation = this.notation || {};\n this.notation[name] = value;\n } else {\n _util2.default.print_debug(\"Unsupported notation flag \" + bytes[mypos]);\n }\n break;\n case 21:\n // Preferred Hash Algorithms\n read_array('preferredHashAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n case 22:\n // Preferred Compression Algorithms\n read_array('preferredCompressionAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n case 23:\n // Key Server Preferences\n read_array('keyServerPreferences', bytes.subarray(mypos, bytes.length));\n break;\n case 24:\n // Preferred Key Server\n this.preferredKeyServer = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 25:\n // Primary User ID\n this.isPrimaryUserID = bytes[mypos++] !== 0;\n break;\n case 26:\n // Policy URI\n this.policyURI = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 27:\n // Key Flags\n read_array('keyFlags', bytes.subarray(mypos, bytes.length));\n break;\n case 28:\n // Signer's User ID\n this.signersUserId = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 29:\n // Reason for Revocation\n this.reasonForRevocationFlag = bytes[mypos++];\n this.reasonForRevocationString = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 30:\n // Features\n read_array('features', bytes.subarray(mypos, bytes.length));\n break;\n case 31:\n {\n // Signature Target\n // (1 octet public-key algorithm, 1 octet hash algorithm, N octets hash)\n this.signatureTargetPublicKeyAlgorithm = bytes[mypos++];\n this.signatureTargetHashAlgorithm = bytes[mypos++];\n\n var len = _crypto2.default.getHashByteLength(this.signatureTargetHashAlgorithm);\n\n this.signatureTargetHash = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, mypos + len));\n break;\n }\n case 32:\n // Embedded Signature\n this.embeddedSignature = new Signature();\n this.embeddedSignature.read(bytes.subarray(mypos, bytes.length));\n break;\n case 33:\n // Issuer Fingerprint\n this.issuerKeyVersion = bytes[mypos++];\n this.issuerFingerprint = bytes.subarray(mypos, bytes.length);\n if (this.issuerKeyVersion === 5) {\n this.issuerKeyId.read(this.issuerFingerprint);\n } else {\n this.issuerKeyId.read(this.issuerFingerprint.subarray(-8));\n }\n break;\n case 34:\n // Preferred AEAD Algorithms\n read_array.call(this, 'preferredAeadAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n default:\n _util2.default.print_debug(\"Unknown signature subpacket type \" + type + \" @:\" + mypos);\n }\n};\n\n// Produces data to produce signature on\nSignature.prototype.toSign = function (type, data) {\n var t = _enums2.default.signature;\n\n switch (type) {\n case t.binary:\n return data.getBytes();\n\n case t.text:\n {\n var text = data.getText();\n // normalize EOL to \\r\\n\n text = _util2.default.canonicalizeEOL(text);\n // encode UTF8\n return _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(text));\n }\n case t.standalone:\n return new Uint8Array(0);\n\n case t.cert_generic:\n case t.cert_persona:\n case t.cert_casual:\n case t.cert_positive:\n case t.cert_revocation:\n {\n var _packet = void 0;\n var tag = void 0;\n\n if (data.userid !== undefined) {\n tag = 0xB4;\n _packet = data.userid;\n } else if (data.userattribute !== undefined) {\n tag = 0xD1;\n _packet = data.userattribute;\n } else {\n throw new Error('Either a userid or userattribute packet needs to be ' + 'supplied for certification.');\n }\n\n var bytes = _packet.write();\n\n if (this.version === 4) {\n return _util2.default.concatUint8Array([this.toSign(t.key, data), new Uint8Array([tag]), _util2.default.writeNumber(bytes.length, 4), bytes]);\n } else if (this.version === 3) {\n return _util2.default.concatUint8Array([this.toSign(t.key, data), bytes]);\n }\n break;\n }\n case t.subkey_binding:\n case t.subkey_revocation:\n case t.key_binding:\n return _util2.default.concatUint8Array([this.toSign(t.key, data), this.toSign(t.key, {\n key: data.bind\n })]);\n\n case t.key:\n if (data.key === undefined) {\n throw new Error('Key packet is required for this signature.');\n }\n return data.key.writeOld();\n\n case t.key_revocation:\n return this.toSign(t.key, data);\n case t.timestamp:\n return new Uint8Array(0);\n case t.third_party:\n throw new Error('Not implemented');\n default:\n throw new Error('Unknown signature type.');\n }\n};\n\nSignature.prototype.calculateTrailer = function () {\n // calculating the trailer\n // V3 signatures don't have a trailer\n if (this.version === 3) {\n return new Uint8Array(0);\n }\n var first = new Uint8Array([4, 0xFF]); //Version, ?\n return _util2.default.concatUint8Array([first, _util2.default.writeNumber(this.signatureData.length, 4)]);\n};\n\n/**\n * verifys the signature packet. Note: not signature types are implemented\n * @param {String|Object} data data which on the signature applies\n * @param {module:packet.PublicSubkey|module:packet.PublicKey|\n * module:packet.SecretSubkey|module:packet.SecretKey} key the public key to verify the signature\n * @returns {Promise<Boolean>} True if message is verified, else false.\n * @async\n */\nSignature.prototype.verify = function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(key, data) {\n var signatureType, publicKeyAlgorithm, hashAlgorithm, bytes, trailer, mpicount, endian, mpi, i, j;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n signatureType = _enums2.default.write(_enums2.default.signature, this.signatureType);\n publicKeyAlgorithm = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n hashAlgorithm = _enums2.default.write(_enums2.default.hash, this.hashAlgorithm);\n bytes = this.toSign(signatureType, data);\n trailer = this.calculateTrailer();\n mpicount = 0;\n // Algorithm-Specific Fields for RSA signatures:\n // - multiprecision number (MPI) of RSA signature value m**d mod n.\n\n if (publicKeyAlgorithm > 0 && publicKeyAlgorithm < 4) {\n mpicount = 1;\n\n // Algorithm-Specific Fields for DSA, ECDSA, and EdDSA signatures:\n // - MPI of DSA value r.\n // - MPI of DSA value s.\n } else if (publicKeyAlgorithm === _enums2.default.publicKey.dsa || publicKeyAlgorithm === _enums2.default.publicKey.ecdsa || publicKeyAlgorithm === _enums2.default.publicKey.eddsa) {\n mpicount = 2;\n }\n\n // EdDSA signature parameters are encoded in little-endian format\n // https://tools.ietf.org/html/rfc8032#section-5.1.2\n endian = publicKeyAlgorithm === _enums2.default.publicKey.eddsa ? 'le' : 'be';\n mpi = [];\n i = 0;\n\n for (j = 0; j < mpicount; j++) {\n mpi[j] = new _mpi2.default();\n i += mpi[j].read(this.signature.subarray(i, this.signature.length), endian);\n }\n\n _context2.next = 13;\n return _crypto2.default.signature.verify(publicKeyAlgorithm, hashAlgorithm, mpi, key.params, _util2.default.concatUint8Array([bytes, this.signatureData, trailer]));\n\n case 13:\n this.verified = _context2.sent;\n return _context2.abrupt('return', this.verified);\n\n case 15:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x4, _x5) {\n return _ref4.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies signature expiration date\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Boolean} true if expired\n */\nSignature.prototype.isExpired = function () {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n var normDate = _util2.default.normalizeDate(date);\n if (normDate !== null) {\n var expirationTime = this.getExpirationTime();\n return !(this.created <= normDate && normDate < expirationTime);\n }\n return false;\n};\n\n/**\n * Returns the expiration time of the signature or Infinity if signature does not expire\n * @returns {Date} expiration time\n */\nSignature.prototype.getExpirationTime = function () {\n return !this.signatureNeverExpires ? new Date(this.created.getTime() + this.signatureExpirationTime * 1000) : Infinity;\n};\n\n/**\n * Fix custom types after cloning\n */\nSignature.prototype.postCloneTypeFix = function () {\n this.issuerKeyId = _keyid2.default.fromClone(this.issuerKeyId);\n};\n\nexports.default = Signature;\n\n},{\"../crypto\":340,\"../enums\":359,\"../type/keyid.js\":394,\"../type/mpi.js\":395,\"../util\":398,\"./packet\":375,\"babel-runtime/core-js/object/entries\":27,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/slicedToArray\":40,\"babel-runtime/regenerator\":42}],383:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nvar VERSION = 1; // A one-octet version number of the data packet.\n\n/**\n * Implementation of the Symmetrically Encrypted Authenticated Encryption with\n * Additional Data (AEAD) Protected Data Packet\n *\n * {@link https://tools.ietf.org/html/draft-ford-openpgp-format-00#section-2.1}:\n * AEAD Protected Data Packet\n * @memberof module:packet\n * @constructor\n */\nfunction SymEncryptedAEADProtected() {\n this.tag = _enums2.default.packet.symEncryptedAEADProtected;\n this.version = VERSION;\n this.cipherAlgo = null;\n this.aeadAlgorithm = 'eax';\n this.aeadAlgo = null;\n this.chunkSizeByte = null;\n this.iv = null;\n this.encrypted = null;\n this.packets = null;\n}\n\nexports.default = SymEncryptedAEADProtected;\n\n/**\n * Parse an encrypted payload of bytes in the order: version, IV, ciphertext (see specification)\n */\n\nSymEncryptedAEADProtected.prototype.read = function (bytes) {\n var offset = 0;\n if (bytes[offset] !== VERSION) {\n // The only currently defined value is 1.\n throw new Error('Invalid packet version.');\n }\n offset++;\n if (_config2.default.aead_protect_version === 4) {\n this.cipherAlgo = bytes[offset++];\n this.aeadAlgo = bytes[offset++];\n this.chunkSizeByte = bytes[offset++];\n } else {\n this.aeadAlgo = _enums2.default.aead.experimental_gcm;\n }\n var mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n this.iv = bytes.subarray(offset, mode.ivLength + offset);\n offset += mode.ivLength;\n this.encrypted = bytes.subarray(offset, bytes.length);\n};\n\n/**\n * Write the encrypted payload of bytes in the order: version, IV, ciphertext (see specification)\n * @returns {Uint8Array} The encrypted payload\n */\nSymEncryptedAEADProtected.prototype.write = function () {\n if (_config2.default.aead_protect_version === 4) {\n return _util2.default.concatUint8Array([new Uint8Array([this.version, this.cipherAlgo, this.aeadAlgo, this.chunkSizeByte]), this.iv, this.encrypted]);\n }\n return _util2.default.concatUint8Array([new Uint8Array([this.version]), this.iv, this.encrypted]);\n};\n\n/**\n * Decrypt the encrypted payload.\n * @param {String} sessionKeyAlgorithm The session key's cipher algorithm e.g. 'aes128'\n * @param {Uint8Array} key The session key used to encrypt the payload\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedAEADProtected.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(sessionKeyAlgorithm, key) {\n var mode, data, authTag;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n\n if (!(_config2.default.aead_protect_version === 4)) {\n _context.next = 11;\n break;\n }\n\n data = this.encrypted.subarray(0, -mode.tagLength);\n authTag = this.encrypted.subarray(-mode.tagLength);\n _context.t0 = this.packets;\n _context.next = 7;\n return this.crypt('decrypt', key, data, authTag);\n\n case 7:\n _context.t1 = _context.sent;\n\n _context.t0.read.call(_context.t0, _context.t1);\n\n _context.next = 17;\n break;\n\n case 11:\n this.cipherAlgo = _enums2.default.write(_enums2.default.symmetric, sessionKeyAlgorithm);\n _context.t2 = this.packets;\n _context.next = 15;\n return this.crypt('decrypt', key, this.encrypted);\n\n case 15:\n _context.t3 = _context.sent;\n\n _context.t2.read.call(_context.t2, _context.t3);\n\n case 17:\n return _context.abrupt('return', true);\n\n case 18:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypt the packet list payload.\n * @param {String} sessionKeyAlgorithm The session key's cipher algorithm e.g. 'aes128'\n * @param {Uint8Array} key The session key used to encrypt the payload\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedAEADProtected.prototype.encrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(sessionKeyAlgorithm, key) {\n var mode, data;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n this.cipherAlgo = _enums2.default.write(_enums2.default.symmetric, sessionKeyAlgorithm);\n this.aeadAlgo = _config2.default.aead_protect_version === 4 ? _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm) : _enums2.default.aead.experimental_gcm;\n mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n _context2.next = 5;\n return _crypto2.default.random.getRandomBytes(mode.ivLength);\n\n case 5:\n this.iv = _context2.sent;\n // generate new random IV\n this.chunkSizeByte = _config2.default.aead_chunk_size_byte;\n data = this.packets.write();\n _context2.next = 10;\n return this.crypt('encrypt', key, data, data.subarray(0, 0));\n\n case 10:\n this.encrypted = _context2.sent;\n\n case 11:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * En/decrypt the payload.\n * @param {encrypt|decrypt} fn Whether to encrypt or decrypt\n * @param {Uint8Array} key The session key used to en/decrypt the payload\n * @param {Uint8Array} data The data to en/decrypt\n * @param {Uint8Array} finalChunk For encryption: empty final chunk; for decryption: final authentication tag\n * @returns {Promise<Uint8Array>}\n * @async\n */\nSymEncryptedAEADProtected.prototype.crypt = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(fn, key, data, finalChunk) {\n var cipher, mode, modeInstance, tagLengthIfDecrypting, chunkSize, adataBuffer, adataArray, adataTagArray, adataView, chunkIndexArray, cryptedPromises, chunkIndex;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n cipher = _enums2.default.read(_enums2.default.symmetric, this.cipherAlgo);\n mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n _context3.next = 4;\n return mode(cipher, key);\n\n case 4:\n modeInstance = _context3.sent;\n\n if (!(_config2.default.aead_protect_version === 4)) {\n _context3.next = 25;\n break;\n }\n\n tagLengthIfDecrypting = fn === 'decrypt' ? mode.tagLength : 0;\n chunkSize = Math.pow(2, this.chunkSizeByte + 6) + tagLengthIfDecrypting; // ((uint64_t)1 << (c + 6))\n\n adataBuffer = new ArrayBuffer(21);\n adataArray = new Uint8Array(adataBuffer, 0, 13);\n adataTagArray = new Uint8Array(adataBuffer);\n adataView = new DataView(adataBuffer);\n chunkIndexArray = new Uint8Array(adataBuffer, 5, 8);\n\n adataArray.set([0xC0 | this.tag, this.version, this.cipherAlgo, this.aeadAlgo, this.chunkSizeByte], 0);\n adataView.setInt32(13 + 4, data.length - tagLengthIfDecrypting * Math.ceil(data.length / chunkSize)); // Should be setInt64(13, ...)\n cryptedPromises = [];\n\n for (chunkIndex = 0; chunkIndex === 0 || data.length;) {\n cryptedPromises.push(modeInstance[fn](data.subarray(0, chunkSize), mode.getNonce(this.iv, chunkIndexArray), adataArray));\n // We take a chunk of data, en/decrypt it, and shift `data` to the\n // next chunk.\n data = data.subarray(chunkSize);\n adataView.setInt32(5 + 4, ++chunkIndex); // Should be setInt64(5, ...)\n }\n // After the final chunk, we either encrypt a final, empty data\n // chunk to get the final authentication tag or validate that final\n // authentication tag.\n cryptedPromises.push(modeInstance[fn](finalChunk, mode.getNonce(this.iv, chunkIndexArray), adataTagArray));\n _context3.t0 = _util2.default;\n _context3.next = 21;\n return _promise2.default.all(cryptedPromises);\n\n case 21:\n _context3.t1 = _context3.sent;\n return _context3.abrupt('return', _context3.t0.concatUint8Array.call(_context3.t0, _context3.t1));\n\n case 25:\n return _context3.abrupt('return', modeInstance[fn](data, this.iv));\n\n case 26:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x5, _x6, _x7, _x8) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"../util\":398,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],384:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/cfb/exports');\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires asmcrypto.js\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nvar VERSION = 1; // A one-octet version number of the data packet.\n\n/**\n * Implementation of the Sym. Encrypted Integrity Protected Data Packet (Tag 18)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.13|RFC4880 5.13}:\n * The Symmetrically Encrypted Integrity Protected Data packet is\n * a variant of the Symmetrically Encrypted Data packet. It is a new feature\n * created for OpenPGP that addresses the problem of detecting a modification to\n * encrypted data. It is used in combination with a Modification Detection Code\n * packet.\n * @memberof module:packet\n * @constructor\n */\nfunction SymEncryptedIntegrityProtected() {\n this.tag = _enums2.default.packet.symEncryptedIntegrityProtected;\n this.version = VERSION;\n /** The encrypted payload. */\n this.encrypted = null; // string\n /**\n * If after decrypting the packet this is set to true,\n * a modification has been detected and thus the contents\n * should be discarded.\n * @type {Boolean}\n */\n this.modification = false;\n this.packets = null;\n}\n\nSymEncryptedIntegrityProtected.prototype.read = function (bytes) {\n // - A one-octet version number. The only currently defined value is 1.\n if (bytes[0] !== VERSION) {\n throw new Error('Invalid packet version.');\n }\n\n // - Encrypted data, the output of the selected symmetric-key cipher\n // operating in Cipher Feedback mode with shift amount equal to the\n // block size of the cipher (CFB-n where n is the block size).\n this.encrypted = bytes.subarray(1, bytes.length);\n};\n\nSymEncryptedIntegrityProtected.prototype.write = function () {\n return _util2.default.concatUint8Array([new Uint8Array([VERSION]), this.encrypted]);\n};\n\n/**\n * Encrypt the payload in the packet.\n * @param {String} sessionKeyAlgorithm The selected symmetric encryption algorithm to be used e.g. 'aes128'\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedIntegrityProtected.prototype.encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(sessionKeyAlgorithm, key) {\n var bytes, prefixrandom, repeat, prefix, mdc, tohash, hash;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n bytes = this.packets.write();\n _context.next = 3;\n return _crypto2.default.getPrefixRandom(sessionKeyAlgorithm);\n\n case 3:\n prefixrandom = _context.sent;\n repeat = new Uint8Array([prefixrandom[prefixrandom.length - 2], prefixrandom[prefixrandom.length - 1]]);\n prefix = _util2.default.concatUint8Array([prefixrandom, repeat]);\n mdc = new Uint8Array([0xD3, 0x14]); // modification detection code packet\n\n tohash = _util2.default.concatUint8Array([bytes, mdc]);\n hash = _crypto2.default.hash.sha1(_util2.default.concatUint8Array([prefix, tohash]));\n\n tohash = _util2.default.concatUint8Array([tohash, hash]);\n\n if (sessionKeyAlgorithm.substr(0, 3) === 'aes') {\n // AES optimizations. Native code for node, asmCrypto for browser.\n this.encrypted = aesEncrypt(sessionKeyAlgorithm, prefix, tohash, key);\n } else {\n this.encrypted = _crypto2.default.cfb.encrypt(prefixrandom, sessionKeyAlgorithm, tohash, key, false);\n this.encrypted = this.encrypted.subarray(0, prefix.length + tohash.length);\n }\n return _context.abrupt('return', true);\n\n case 12:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypts the encrypted data contained in the packet.\n * @param {String} sessionKeyAlgorithm The selected symmetric encryption algorithm to be used e.g. 'aes128'\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedIntegrityProtected.prototype.decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(sessionKeyAlgorithm, key) {\n var decrypted, prefix, bytes, tohash, mdc;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n decrypted = void 0;\n\n if (sessionKeyAlgorithm.substr(0, 3) === 'aes') {\n // AES optimizations. Native code for node, asmCrypto for browser.\n decrypted = aesDecrypt(sessionKeyAlgorithm, this.encrypted, key);\n } else {\n decrypted = _crypto2.default.cfb.decrypt(sessionKeyAlgorithm, key, this.encrypted, false);\n }\n\n // there must be a modification detection code packet as the\n // last packet and everything gets hashed except the hash itself\n prefix = _crypto2.default.cfb.mdc(sessionKeyAlgorithm, key, this.encrypted);\n bytes = decrypted.subarray(0, decrypted.length - 20);\n tohash = _util2.default.concatUint8Array([prefix, bytes]);\n\n this.hash = _util2.default.Uint8Array_to_str(_crypto2.default.hash.sha1(tohash));\n mdc = _util2.default.Uint8Array_to_str(decrypted.subarray(decrypted.length - 20, decrypted.length));\n\n if (!(this.hash !== mdc)) {\n _context2.next = 11;\n break;\n }\n\n throw new Error('Modification detected.');\n\n case 11:\n this.packets.read(decrypted.subarray(0, decrypted.length - 22));\n\n case 12:\n return _context2.abrupt('return', true);\n\n case 13:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nexports.default = SymEncryptedIntegrityProtected;\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nfunction aesEncrypt(algo, prefix, pt, key) {\n if (nodeCrypto) {\n // Node crypto library.\n return nodeEncrypt(algo, prefix, pt, key);\n } // asm.js fallback\n return _exports.AES_CFB.encrypt(_util2.default.concatUint8Array([prefix, pt]), key);\n}\n\nfunction aesDecrypt(algo, ct, key) {\n var pt = void 0;\n if (nodeCrypto) {\n // Node crypto library.\n pt = nodeDecrypt(algo, ct, key);\n } else {\n // asm.js fallback\n pt = _exports.AES_CFB.decrypt(ct, key);\n }\n return pt.subarray(_crypto2.default.cipher[algo].blockSize + 2, pt.length); // Remove random prefix\n}\n\nfunction nodeEncrypt(algo, prefix, pt, key) {\n key = new Buffer(key);\n var iv = new Buffer(new Uint8Array(_crypto2.default.cipher[algo].blockSize));\n var cipherObj = new nodeCrypto.createCipheriv('aes-' + algo.substr(3, 3) + '-cfb', key, iv);\n var ct = cipherObj.update(new Buffer(_util2.default.concatUint8Array([prefix, pt])));\n return new Uint8Array(ct);\n}\n\nfunction nodeDecrypt(algo, ct, key) {\n ct = new Buffer(ct);\n key = new Buffer(key);\n var iv = new Buffer(new Uint8Array(_crypto2.default.cipher[algo].blockSize));\n var decipherObj = new nodeCrypto.createDecipheriv('aes-' + algo.substr(3, 3) + '-cfb', key, iv);\n var pt = decipherObj.update(ct);\n return new Uint8Array(pt);\n}\n\n},{\"../crypto\":340,\"../enums\":359,\"../util\":398,\"asmcrypto.js/src/aes/cfb/exports\":7,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],385:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _s2k = _dereq_('../type/s2k');\n\nvar _s2k2 = _interopRequireDefault(_s2k);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Public-Key Encrypted Session Key Packets (Tag 1)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.1|RFC4880 5.1}:\n * A Public-Key Encrypted Session Key packet holds the session key\n * used to encrypt a message. Zero or more Public-Key Encrypted Session Key\n * packets and/or Symmetric-Key Encrypted Session Key packets may precede a\n * Symmetrically Encrypted Data Packet, which holds an encrypted message. The\n * message is encrypted with the session key, and the session key is itself\n * encrypted and stored in the Encrypted Session Key packet(s). The\n * Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted\n * Session Key packet for each OpenPGP key to which the message is encrypted.\n * The recipient of the message finds a session key that is encrypted to their\n * public key, decrypts the session key, and then uses the session key to\n * decrypt the message.\n * @memberof module:packet\n * @constructor\n */\nfunction SymEncryptedSessionKey() {\n this.tag = _enums2.default.packet.symEncryptedSessionKey;\n this.version = _config2.default.aead_protect && _config2.default.aead_protect_version === 4 ? 5 : 4;\n this.sessionKey = null;\n this.sessionKeyEncryptionAlgorithm = null;\n this.sessionKeyAlgorithm = 'aes256';\n this.aeadAlgorithm = _enums2.default.read(_enums2.default.aead, _config2.default.aead_mode);\n this.encrypted = null;\n this.s2k = null;\n this.iv = null;\n}\n\n/**\n * Parsing function for a symmetric encrypted session key packet (tag 3).\n *\n * @param {Uint8Array} input Payload of a tag 1 packet\n * @param {Integer} position Position to start reading from the input string\n * @param {Integer} len\n * Length of the packet or the remaining length of\n * input at position\n * @returns {module:packet.SymEncryptedSessionKey} Object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/s2k\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nSymEncryptedSessionKey.prototype.read = function (bytes) {\n var offset = 0;\n\n // A one-octet version number. The only currently defined version is 4.\n this.version = bytes[offset++];\n\n // A one-octet number describing the symmetric algorithm used.\n var algo = _enums2.default.read(_enums2.default.symmetric, bytes[offset++]);\n\n if (this.version === 5) {\n // A one-octet AEAD algorithm.\n this.aeadAlgorithm = _enums2.default.read(_enums2.default.aead, bytes[offset++]);\n }\n\n // A string-to-key (S2K) specifier, length as defined above.\n this.s2k = new _s2k2.default();\n offset += this.s2k.read(bytes.subarray(offset, bytes.length));\n\n if (this.version === 5) {\n var mode = _crypto2.default[this.aeadAlgorithm];\n\n // A starting initialization vector of size specified by the AEAD\n // algorithm.\n this.iv = bytes.subarray(offset, offset += mode.ivLength);\n }\n\n // The encrypted session key itself, which is decrypted with the\n // string-to-key object. This is optional in version 4.\n if (this.version === 5 || offset < bytes.length) {\n this.encrypted = bytes.subarray(offset, bytes.length);\n this.sessionKeyEncryptionAlgorithm = algo;\n } else {\n this.sessionKeyAlgorithm = algo;\n }\n};\n\nSymEncryptedSessionKey.prototype.write = function () {\n var algo = this.encrypted === null ? this.sessionKeyAlgorithm : this.sessionKeyEncryptionAlgorithm;\n\n var bytes = void 0;\n\n if (this.version === 5) {\n bytes = _util2.default.concatUint8Array([new Uint8Array([this.version, _enums2.default.write(_enums2.default.symmetric, algo), _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm)]), this.s2k.write(), this.iv, this.encrypted]);\n } else {\n bytes = _util2.default.concatUint8Array([new Uint8Array([this.version, _enums2.default.write(_enums2.default.symmetric, algo)]), this.s2k.write()]);\n\n if (this.encrypted !== null) {\n bytes = _util2.default.concatUint8Array([bytes, this.encrypted]);\n }\n }\n\n return bytes;\n};\n\n/**\n * Decrypts the session key\n * @param {String} passphrase The passphrase in string form\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedSessionKey.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(passphrase) {\n var algo, length, key, mode, adata, modeInstance, decrypted;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n algo = this.sessionKeyEncryptionAlgorithm !== null ? this.sessionKeyEncryptionAlgorithm : this.sessionKeyAlgorithm;\n length = _crypto2.default.cipher[algo].keySize;\n key = this.s2k.produce_key(passphrase, length);\n\n if (!(this.version === 5)) {\n _context.next = 14;\n break;\n }\n\n mode = _crypto2.default[this.aeadAlgorithm];\n adata = new Uint8Array([0xC0 | this.tag, this.version, _enums2.default.write(_enums2.default.symmetric, this.sessionKeyEncryptionAlgorithm), _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm)]);\n _context.next = 8;\n return mode(algo, key);\n\n case 8:\n modeInstance = _context.sent;\n _context.next = 11;\n return modeInstance.decrypt(this.encrypted, this.iv, adata);\n\n case 11:\n this.sessionKey = _context.sent;\n _context.next = 15;\n break;\n\n case 14:\n if (this.encrypted !== null) {\n decrypted = _crypto2.default.cfb.normalDecrypt(algo, key, this.encrypted, null);\n\n\n this.sessionKeyAlgorithm = _enums2.default.read(_enums2.default.symmetric, decrypted[0]);\n this.sessionKey = decrypted.subarray(1, decrypted.length);\n } else {\n this.sessionKey = key;\n }\n\n case 15:\n return _context.abrupt('return', true);\n\n case 16:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypts the session key\n * @param {String} passphrase The passphrase in string form\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedSessionKey.prototype.encrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(passphrase) {\n var algo, length, key, mode, adata, modeInstance, algo_enum, private_key;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n algo = this.sessionKeyEncryptionAlgorithm !== null ? this.sessionKeyEncryptionAlgorithm : this.sessionKeyAlgorithm;\n\n\n this.sessionKeyEncryptionAlgorithm = algo;\n\n this.s2k = new _s2k2.default();\n _context2.next = 5;\n return _crypto2.default.random.getRandomBytes(8);\n\n case 5:\n this.s2k.salt = _context2.sent;\n length = _crypto2.default.cipher[algo].keySize;\n key = this.s2k.produce_key(passphrase, length);\n\n if (!(this.sessionKey === null)) {\n _context2.next = 12;\n break;\n }\n\n _context2.next = 11;\n return _crypto2.default.generateSessionKey(this.sessionKeyAlgorithm);\n\n case 11:\n this.sessionKey = _context2.sent;\n\n case 12:\n if (!(this.version === 5)) {\n _context2.next = 26;\n break;\n }\n\n mode = _crypto2.default[this.aeadAlgorithm];\n _context2.next = 16;\n return _crypto2.default.random.getRandomBytes(mode.ivLength);\n\n case 16:\n this.iv = _context2.sent;\n // generate new random IV\n adata = new Uint8Array([0xC0 | this.tag, this.version, _enums2.default.write(_enums2.default.symmetric, this.sessionKeyEncryptionAlgorithm), _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm)]);\n _context2.next = 20;\n return mode(algo, key);\n\n case 20:\n modeInstance = _context2.sent;\n _context2.next = 23;\n return modeInstance.encrypt(this.sessionKey, this.iv, adata);\n\n case 23:\n this.encrypted = _context2.sent;\n _context2.next = 29;\n break;\n\n case 26:\n algo_enum = new Uint8Array([_enums2.default.write(_enums2.default.symmetric, this.sessionKeyAlgorithm)]);\n private_key = _util2.default.concatUint8Array([algo_enum, this.sessionKey]);\n\n this.encrypted = _crypto2.default.cfb.normalEncrypt(algo, key, private_key, null);\n\n case 29:\n return _context2.abrupt('return', true);\n\n case 30:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Fix custom types after cloning\n */\nSymEncryptedSessionKey.prototype.postCloneTypeFix = function () {\n this.s2k = _s2k2.default.fromClone(this.s2k);\n};\n\nexports.default = SymEncryptedSessionKey;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"../type/s2k\":397,\"../util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],386:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Symmetrically Encrypted Data Packet (Tag 9)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.7|RFC4880 5.7}:\n * The Symmetrically Encrypted Data packet contains data encrypted with a\n * symmetric-key algorithm. When it has been decrypted, it contains other\n * packets (usually a literal data packet or compressed data packet, but in\n * theory other Symmetrically Encrypted Data packets or sequences of packets\n * that form whole OpenPGP messages).\n * @memberof module:packet\n * @constructor\n */\nfunction SymmetricallyEncrypted() {\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.symmetricallyEncrypted;\n /**\n * Encrypted secret-key data\n */\n this.encrypted = null;\n /**\n * Decrypted packets contained within.\n * @type {module:packet.List}\n */\n this.packets = null;\n /**\n * When true, decrypt fails if message is not integrity protected\n * @see module:config.ignore_mdc_error\n */\n this.ignore_mdc_error = _config2.default.ignore_mdc_error;\n} // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires config\n * @requires crypto\n * @requires enums\n */\n\nSymmetricallyEncrypted.prototype.read = function (bytes) {\n this.encrypted = bytes;\n};\n\nSymmetricallyEncrypted.prototype.write = function () {\n return this.encrypted;\n};\n\n/**\n * Decrypt the symmetrically-encrypted packet data\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} sessionKeyAlgorithm Symmetric key algorithm to use\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymmetricallyEncrypted.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(sessionKeyAlgorithm, key) {\n var decrypted;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n decrypted = _crypto2.default.cfb.decrypt(sessionKeyAlgorithm, key, this.encrypted, true);\n // If MDC errors are not being ignored, all missing MDC packets in symmetrically encrypted data should throw an error\n\n if (this.ignore_mdc_error) {\n _context.next = 3;\n break;\n }\n\n throw new Error('Decryption failed due to missing MDC.');\n\n case 3:\n this.packets.read(decrypted);\n\n return _context.abrupt('return', true);\n\n case 5:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypt the symmetrically-encrypted packet data\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} sessionKeyAlgorithm Symmetric key algorithm to use\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymmetricallyEncrypted.prototype.encrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(algo, key) {\n var data;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n data = this.packets.write();\n _context2.t0 = _crypto2.default.cfb;\n _context2.next = 4;\n return _crypto2.default.getPrefixRandom(algo);\n\n case 4:\n _context2.t1 = _context2.sent;\n _context2.t2 = algo;\n _context2.t3 = data;\n _context2.t4 = key;\n this.encrypted = _context2.t0.encrypt.call(_context2.t0, _context2.t1, _context2.t2, _context2.t3, _context2.t4, true);\n return _context2.abrupt('return', true);\n\n case 10:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nexports.default = SymmetricallyEncrypted;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],387:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Trust Packet (Tag 12)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.10|RFC4880 5.10}:\n * The Trust packet is used only within keyrings and is not normally\n * exported. Trust packets contain data that record the user's\n * specifications of which key holders are trustworthy introducers,\n * along with other information that implementing software uses for\n * trust information. The format of Trust packets is defined by a given\n * implementation.\n *\n * Trust packets SHOULD NOT be emitted to output streams that are\n * transferred to other users, and they SHOULD be ignored on any input\n * other than local keyring files.\n * @memberof module:packet\n * @constructor\n */\nfunction Trust() {\n this.tag = _enums2.default.packet.trust;\n}\n\n/**\n * Parsing function for a trust packet (tag 12).\n * Currently not implemented as we ignore trust packets\n * @param {String} byptes payload of a tag 12 packet\n */\n/**\n * @requires enums\n */\n\nTrust.prototype.read = function () {}; // TODO\n\nexports.default = Trust;\n\n},{\"../enums\":359}],388:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the User Attribute Packet (Tag 17)\n *\n * The User Attribute packet is a variation of the User ID packet. It\n * is capable of storing more types of data than the User ID packet,\n * which is limited to text. Like the User ID packet, a User Attribute\n * packet may be certified by the key owner (\"self-signed\") or any other\n * key owner who cares to certify it. Except as noted, a User Attribute\n * packet may be used anywhere that a User ID packet may be used.\n *\n * While User Attribute packets are not a required part of the OpenPGP\n * standard, implementations SHOULD provide at least enough\n * compatibility to properly handle a certification signature on the\n * User Attribute packet. A simple way to do this is by treating the\n * User Attribute packet as a User ID packet with opaque contents, but\n * an implementation may use any method desired.\n * @memberof module:packet\n * @constructor\n */\nfunction UserAttribute() {\n this.tag = _enums2.default.packet.userAttribute;\n this.attributes = [];\n}\n\n/**\n * parsing function for a user attribute packet (tag 17).\n * @param {Uint8Array} input payload of a tag 17 packet\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet\n * @requires enums\n * @requires util\n */\n\nUserAttribute.prototype.read = function (bytes) {\n var i = 0;\n while (i < bytes.length) {\n var len = _packet2.default.readSimpleLength(bytes.subarray(i, bytes.length));\n i += len.offset;\n\n this.attributes.push(_util2.default.Uint8Array_to_str(bytes.subarray(i, i + len.len)));\n i += len.len;\n }\n};\n\n/**\n * Creates a binary representation of the user attribute packet\n * @returns {Uint8Array} string representation\n */\nUserAttribute.prototype.write = function () {\n var arr = [];\n for (var i = 0; i < this.attributes.length; i++) {\n arr.push(_packet2.default.writeSimpleLength(this.attributes[i].length));\n arr.push(_util2.default.str_to_Uint8Array(this.attributes[i]));\n }\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Compare for equality\n * @param {module:packet.UserAttribute} usrAttr\n * @returns {Boolean} true if equal\n */\nUserAttribute.prototype.equals = function (usrAttr) {\n if (!usrAttr || !(usrAttr instanceof UserAttribute)) {\n return false;\n }\n return this.attributes.every(function (attr, index) {\n return attr === usrAttr.attributes[index];\n });\n};\n\nexports.default = UserAttribute;\n\n},{\"../enums\":359,\"../util\":398,\"./packet\":375}],389:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the User ID Packet (Tag 13)\n *\n * A User ID packet consists of UTF-8 text that is intended to represent\n * the name and email address of the key holder. By convention, it\n * includes an RFC 2822 [RFC2822] mail name-addr, but there are no\n * restrictions on its content. The packet length in the header\n * specifies the length of the User ID.\n * @memberof module:packet\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires enums\n * @requires util\n */\n\nfunction Userid() {\n this.tag = _enums2.default.packet.userid;\n /** A string containing the user id. Usually in the form\n * John Doe <john@example.com>\n * @type {String}\n */\n this.userid = '';\n\n this.name = '';\n this.email = '';\n this.comment = '';\n}\n\n/**\n * Parsing function for a user id packet (tag 13).\n * @param {Uint8Array} input payload of a tag 13 packet\n */\nUserid.prototype.read = function (bytes) {\n this.parse(_util2.default.decode_utf8(_util2.default.Uint8Array_to_str(bytes)));\n};\n\n/**\n * Parse userid string, e.g. 'John Doe <john@example.com>'\n */\nUserid.prototype.parse = function (userid) {\n try {\n (0, _assign2.default)(this, _util2.default.parseUserId(userid));\n } catch (e) {}\n this.userid = userid;\n};\n\n/**\n * Creates a binary representation of the user id packet\n * @returns {Uint8Array} binary representation\n */\nUserid.prototype.write = function () {\n return _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(this.userid));\n};\n\n/**\n * Set userid string from object, e.g. { name:'Phil Zimmermann', email:'phil@openpgp.org' }\n */\nUserid.prototype.format = function (userid) {\n if (_util2.default.isString(userid)) {\n userid = _util2.default.parseUserId(userid);\n }\n (0, _assign2.default)(this, userid);\n this.userid = _util2.default.formatUserId(userid);\n};\n\nexports.default = Userid;\n\n},{\"../enums\":359,\"../util\":398,\"babel-runtime/core-js/object/assign\":24}],390:[function(_dereq_,module,exports){\n'use strict';\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _symbol = _dereq_('babel-runtime/core-js/symbol');\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _from = _dereq_('babel-runtime/core-js/array/from');\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable import/no-extraneous-dependencies */\n// Old browser polyfills\n// All are listed as dev dependencies because Node does not need them\n// and for browser babel will take care of it\n\nif (typeof window.fetch === 'undefined') {\n _dereq_('whatwg-fetch');\n}\nif (typeof Array.prototype.fill === 'undefined') {\n _dereq_('core-js/fn/array/fill');\n}\nif (typeof Array.prototype.find === 'undefined') {\n _dereq_('core-js/fn/array/find');\n}\nif (typeof _from2.default === 'undefined') {\n _dereq_('core-js/fn/array/from');\n}\n\n// No if-statement on Promise because of IE11. Otherwise Promise is undefined in the service worker.\n_dereq_('core-js/fn/promise');\n\nif (typeof Uint8Array.from === 'undefined') {\n _dereq_('core-js/fn/typed/uint8-array');\n}\nif (typeof String.prototype.repeat === 'undefined') {\n _dereq_('core-js/fn/string/repeat');\n}\nif (typeof _symbol2.default === 'undefined') {\n _dereq_('core-js/fn/symbol');\n}\nif (typeof _assign2.default === 'undefined') {\n _dereq_('core-js/fn/object/assign');\n}\n\n},{\"babel-runtime/core-js/array/from\":20,\"babel-runtime/core-js/object/assign\":24,\"babel-runtime/core-js/symbol\":33,\"core-js/fn/array/fill\":48,\"core-js/fn/array/find\":49,\"core-js/fn/array/from\":50,\"core-js/fn/object/assign\":51,\"core-js/fn/promise\":52,\"core-js/fn/string/repeat\":53,\"core-js/fn/symbol\":54,\"core-js/fn/typed/uint8-array\":55,\"whatwg-fetch\":321}],391:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Signature = Signature;\nexports.readArmored = readArmored;\nexports.read = read;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP signature.\n * @param {module:packet.List} packetlist The signature packets\n */\nfunction Signature(packetlist) {\n if (!(this instanceof Signature)) {\n return new Signature(packetlist);\n }\n this.packets = packetlist || new _packet2.default.List();\n}\n\n/**\n * Returns ASCII armored text of signature\n * @returns {String} ASCII armor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires packet\n * @requires enums\n * @module signature\n */\n\nSignature.prototype.armor = function () {\n return _armor2.default.encode(_enums2.default.armor.signature, this.packets.write());\n};\n\n/**\n * reads an OpenPGP armored signature and returns a signature object\n * @param {String} armoredText text to be parsed\n * @returns {Signature} new signature object\n * @static\n */\nfunction readArmored(armoredText) {\n var input = _armor2.default.decode(armoredText).data;\n return read(input);\n}\n\n/**\n * reads an OpenPGP signature as byte array and returns a signature object\n * @param {Uint8Array} input binary signature\n * @returns {Signature} new signature object\n * @static\n */\nfunction read(input) {\n var packetlist = new _packet2.default.List();\n packetlist.read(input);\n return new Signature(packetlist);\n}\n\n},{\"./encoding/armor\":357,\"./enums\":359,\"./packet\":371}],392:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\nfunction ECDHSymmetricKey(data) {\n if (typeof data === 'undefined') {\n data = new Uint8Array([]);\n } else if (_util2.default.isString(data)) {\n data = _util2.default.str_to_Uint8Array(data);\n } else {\n data = new Uint8Array(data);\n }\n this.data = data;\n}\n\n/**\n * Read an ECDHSymmetricKey from an Uint8Array\n * @param {Uint8Array} input Where to read the encoded symmetric key from\n * @returns {Number} Number of read bytes\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Encoded symmetric key for ECDH\n *\n * @requires util\n * @module type/ecdh_symkey\n */\n\nECDHSymmetricKey.prototype.read = function (input) {\n if (input.length >= 1) {\n var length = input[0];\n if (input.length >= 1 + length) {\n this.data = input.subarray(1, 1 + length);\n return 1 + this.data.length;\n }\n }\n throw new Error('Invalid symmetric key');\n};\n\n/**\n * Write an ECDHSymmetricKey as an Uint8Array\n * @returns {Uint8Array} An array containing the value\n */\nECDHSymmetricKey.prototype.write = function () {\n return _util2.default.concatUint8Array([new Uint8Array([this.data.length]), this.data]);\n};\n\nECDHSymmetricKey.fromClone = function (clone) {\n return new ECDHSymmetricKey(clone.data);\n};\n\nexports.default = ECDHSymmetricKey;\n\n},{\"../util\":398}],393:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n * @param {enums.hash} hash Hash algorithm\n * @param {enums.symmetric} cipher Symmetric algorithm\n */\nfunction KDFParams(data) {\n if (data && data.length === 2) {\n this.hash = data[0];\n this.cipher = data[1];\n } else {\n this.hash = _enums2.default.hash.sha1;\n this.cipher = _enums2.default.symmetric.aes128;\n }\n}\n\n/**\n * Read KDFParams from an Uint8Array\n * @param {Uint8Array} input Where to read the KDFParams from\n * @returns {Number} Number of read bytes\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of type KDF parameters\n *\n * {@link https://tools.ietf.org/html/rfc6637#section-7|RFC 6637 7}:\n * A key derivation function (KDF) is necessary to implement the EC\n * encryption. The Concatenation Key Derivation Function (Approved\n * Alternative 1) [NIST-SP800-56A] with the KDF hash function that is\n * SHA2-256 [FIPS-180-3] or stronger is REQUIRED.\n * @requires enums\n * @module type/kdf_params\n */\n\nKDFParams.prototype.read = function (input) {\n if (input.length < 4 || input[0] !== 3 || input[1] !== 1) {\n throw new Error('Cannot read KDFParams');\n }\n this.hash = input[2];\n this.cipher = input[3];\n return 4;\n};\n\n/**\n * Write KDFParams to an Uint8Array\n * @returns {Uint8Array} Array with the KDFParams value\n */\nKDFParams.prototype.write = function () {\n return new Uint8Array([3, 1, this.hash, this.cipher]);\n};\n\nKDFParams.fromClone = function (clone) {\n return new KDFParams([clone.hash, clone.cipher]);\n};\n\nexports.default = KDFParams;\n\n},{\"../enums.js\":359}],394:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../util.js');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\nfunction Keyid() {\n this.bytes = '';\n}\n\n/**\n * Parsing method for a key id\n * @param {Uint8Array} input Input to read the key id from\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of type key id\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-3.3|RFC4880 3.3}:\n * A Key ID is an eight-octet scalar that identifies a key.\n * Implementations SHOULD NOT assume that Key IDs are unique. The\n * section \"Enhanced Key Formats\" below describes how Key IDs are\n * formed.\n * @requires util\n * @module type/keyid\n */\n\nKeyid.prototype.read = function (bytes) {\n this.bytes = _util2.default.Uint8Array_to_str(bytes.subarray(0, 8));\n};\n\nKeyid.prototype.write = function () {\n return _util2.default.str_to_Uint8Array(this.bytes);\n};\n\nKeyid.prototype.toHex = function () {\n return _util2.default.str_to_hex(this.bytes);\n};\n\n/**\n * Checks equality of Key ID's\n * @param {Keyid} keyid\n * @param {Boolean} matchWildcard Indicates whether to check if either keyid is a wildcard\n */\nKeyid.prototype.equals = function (keyid) {\n var matchWildcard = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return matchWildcard && (keyid.isWildcard() || this.isWildcard()) || this.bytes === keyid.bytes;\n};\n\nKeyid.prototype.isNull = function () {\n return this.bytes === '';\n};\n\nKeyid.prototype.isWildcard = function () {\n return (/^0+$/.test(this.toHex())\n );\n};\n\nKeyid.mapToHex = function (keyId) {\n return keyId.toHex();\n};\n\nKeyid.fromClone = function (clone) {\n var keyid = new Keyid();\n keyid.bytes = clone.bytes;\n return keyid;\n};\n\nKeyid.fromId = function (hex) {\n var keyid = new Keyid();\n keyid.read(_util2.default.hex_to_Uint8Array(hex));\n return keyid;\n};\n\nKeyid.wildcard = function () {\n var keyid = new Keyid();\n keyid.read(new Uint8Array(8));\n return keyid;\n};\n\nexports.default = Keyid;\n\n},{\"../util.js\":398}],395:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// Hint: We hold our MPIs as an array of octets in big endian format preceding a two\n// octet scalar: MPI: [a,b,c,d,e,f]\n// - MPI size: (a << 8) | b\n// - MPI = c | d << 8 | e << ((MPI.length -2)*8) | f ((MPI.length -2)*8)\n\n/**\n * Implementation of type MPI ({@link https://tools.ietf.org/html/rfc4880#section-3.2|RFC4880 3.2})\n * Multiprecision integers (also called MPIs) are unsigned integers used\n * to hold large integers such as the ones used in cryptographic\n * calculations.\n * An MPI consists of two pieces: a two-octet scalar that is the length\n * of the MPI in bits followed by a string of octets that contain the\n * actual integer.\n * @requires bn.js\n * @requires util\n * @module type/mpi\n */\n\nfunction MPI(data) {\n /** An implementation dependent integer */\n if (data instanceof MPI) {\n this.data = data.data;\n } else if (_bn2.default.isBN(data)) {\n this.fromBN(data);\n } else if (_util2.default.isUint8Array(data)) {\n this.fromUint8Array(data);\n } else if (_util2.default.isString(data)) {\n this.fromString(data);\n } else {\n this.data = null;\n }\n}\n\n/**\n * Parsing function for a MPI ({@link https://tools.ietf.org/html/rfc4880#section-3.2|RFC 4880 3.2}).\n * @param {Uint8Array} input Payload of MPI data\n * @param {String} endian Endianness of the data; 'be' for big-endian or 'le' for little-endian\n * @returns {Integer} Length of data read\n */\nMPI.prototype.read = function (bytes) {\n var endian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'be';\n\n if (_util2.default.isString(bytes)) {\n bytes = _util2.default.str_to_Uint8Array(bytes);\n }\n\n var bits = bytes[0] << 8 | bytes[1];\n var bytelen = bits + 7 >>> 3;\n var payload = bytes.subarray(2, 2 + bytelen);\n\n this.fromUint8Array(payload, endian);\n\n return 2 + bytelen;\n};\n\n/**\n * Converts the mpi object to a bytes as specified in\n * {@link https://tools.ietf.org/html/rfc4880#section-3.2|RFC4880 3.2}\n * @param {String} endian Endianness of the payload; 'be' for big-endian or 'le' for little-endian\n * @param {Integer} length Length of the data part of the MPI\n * @returns {Uint8Aray} mpi Byte representation\n */\nMPI.prototype.write = function (endian, length) {\n return _util2.default.Uint8Array_to_MPI(this.toUint8Array(endian, length));\n};\n\nMPI.prototype.bitLength = function () {\n return (this.data.length - 1) * 8 + _util2.default.nbits(this.data[0]);\n};\n\nMPI.prototype.byteLength = function () {\n return this.data.length;\n};\n\nMPI.prototype.toUint8Array = function (endian, length) {\n endian = endian || 'be';\n length = length || this.data.length;\n\n var payload = new Uint8Array(length);\n var start = length - this.data.length;\n if (start < 0) {\n throw new Error('Payload is too large.');\n }\n\n payload.set(this.data, start);\n if (endian === 'le') {\n payload.reverse();\n }\n\n return payload;\n};\n\nMPI.prototype.fromUint8Array = function (bytes) {\n var endian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'be';\n\n this.data = new Uint8Array(bytes.length);\n this.data.set(bytes);\n\n if (endian === 'le') {\n this.data.reverse();\n }\n};\n\nMPI.prototype.toString = function () {\n return _util2.default.Uint8Array_to_str(this.toUint8Array());\n};\n\nMPI.prototype.fromString = function (str) {\n var endian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'be';\n\n this.fromUint8Array(_util2.default.str_to_Uint8Array(str), endian);\n};\n\nMPI.prototype.toBN = function () {\n return new _bn2.default(this.toUint8Array());\n};\n\nMPI.prototype.fromBN = function (bn) {\n this.data = bn.toArrayLike(Uint8Array);\n};\n\nMPI.fromClone = function (clone) {\n return new MPI(clone.data);\n};\n\nexports.default = MPI;\n\n},{\"../util\":398,\"bn.js\":44}],396:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Wrapper to an OID value\n *\n * {@link https://tools.ietf.org/html/rfc6637#section-11|RFC6637, section 11}:\n * The sequence of octets in the third column is the result of applying\n * the Distinguished Encoding Rules (DER) to the ASN.1 Object Identifier\n * with subsequent truncation. The truncation removes the two fields of\n * encoded Object Identifier. The first omitted field is one octet\n * representing the Object Identifier tag, and the second omitted field\n * is the length of the Object Identifier body. For example, the\n * complete ASN.1 DER encoding for the NIST P-256 curve OID is \"06 08 2A\n * 86 48 CE 3D 03 01 07\", from which the first entry in the table above\n * is constructed by omitting the first two octets. Only the truncated\n * sequence of octets is the valid representation of a curve OID.\n * @requires util\n * @requires enums\n * @module type/oid\n */\n\nfunction OID(oid) {\n if (oid instanceof OID) {\n this.oid = oid.oid;\n } else if (_util2.default.isArray(oid) || _util2.default.isUint8Array(oid)) {\n oid = new Uint8Array(oid);\n if (oid[0] === 0x06) {\n // DER encoded oid byte array\n if (oid[1] !== oid.length - 2) {\n throw new Error('Length mismatch in DER encoded oid');\n }\n oid = oid.subarray(2);\n }\n this.oid = oid;\n } else {\n this.oid = '';\n }\n}\n\n/**\n * Method to read an OID object\n * @param {Uint8Array} input Where to read the OID from\n * @returns {Number} Number of read bytes\n */\nOID.prototype.read = function (input) {\n if (input.length >= 1) {\n var length = input[0];\n if (input.length >= 1 + length) {\n this.oid = input.subarray(1, 1 + length);\n return 1 + this.oid.length;\n }\n }\n throw new Error('Invalid oid');\n};\n\n/**\n * Serialize an OID object\n * @returns {Uint8Array} Array with the serialized value the OID\n */\nOID.prototype.write = function () {\n return _util2.default.concatUint8Array([new Uint8Array([this.oid.length]), this.oid]);\n};\n\n/**\n * Serialize an OID object as a hex string\n * @returns {string} String with the hex value of the OID\n */\nOID.prototype.toHex = function () {\n return _util2.default.Uint8Array_to_hex(this.oid);\n};\n\n/**\n * If a known curve object identifier, return the canonical name of the curve\n * @returns {string} String with the canonical name of the curve\n */\nOID.prototype.getName = function () {\n var hex = this.toHex();\n if (_enums2.default.curve[hex]) {\n return _enums2.default.write(_enums2.default.curve, hex);\n } else {\n throw new Error('Unknown curve object identifier.');\n }\n};\n\nOID.fromClone = function (clone) {\n return new OID(clone.oid);\n};\n\nexports.default = OID;\n\n},{\"../enums\":359,\"../util\":398}],397:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util.js');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of the String-to-key specifier\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-3.7|RFC4880 3.7}:\n * String-to-key (S2K) specifiers are used to convert passphrase strings\n * into symmetric-key encryption/decryption keys. They are used in two\n * places, currently: to encrypt the secret part of private keys in the\n * private keyring, and to convert passphrases to encryption keys for\n * symmetrically encrypted messages.\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n * @module type/s2k\n */\n\nfunction S2K() {\n /** @type {module:enums.hash} */\n this.algorithm = 'sha256';\n /** @type {module:enums.s2k} */\n this.type = 'iterated';\n /** @type {Integer} */\n this.c = _config2.default.s2k_iteration_count_byte;\n /** Eight bytes of salt in a binary string.\n * @type {String}\n */\n this.salt = null;\n}\n\nS2K.prototype.get_count = function () {\n // Exponent bias, defined in RFC4880\n var expbias = 6;\n\n return 16 + (this.c & 15) << (this.c >> 4) + expbias;\n};\n\n/**\n * Parsing function for a string-to-key specifier ({@link https://tools.ietf.org/html/rfc4880#section-3.7|RFC 4880 3.7}).\n * @param {String} input Payload of string-to-key specifier\n * @returns {Integer} Actual length of the object\n */\nS2K.prototype.read = function (bytes) {\n var i = 0;\n this.type = _enums2.default.read(_enums2.default.s2k, bytes[i++]);\n this.algorithm = _enums2.default.read(_enums2.default.hash, bytes[i++]);\n\n switch (this.type) {\n case 'simple':\n break;\n\n case 'salted':\n this.salt = bytes.subarray(i, i + 8);\n i += 8;\n break;\n\n case 'iterated':\n this.salt = bytes.subarray(i, i + 8);\n i += 8;\n\n // Octet 10: count, a one-octet, coded value\n this.c = bytes[i++];\n break;\n\n case 'gnu':\n if (_util2.default.Uint8Array_to_str(bytes.subarray(i, 3)) === \"GNU\") {\n i += 3; // GNU\n var gnuExtType = 1000 + bytes[i++];\n if (gnuExtType === 1001) {\n this.type = gnuExtType;\n // GnuPG extension mode 1001 -- don't write secret key at all\n } else {\n throw new Error(\"Unknown s2k gnu protection mode.\");\n }\n } else {\n throw new Error(\"Unknown s2k type.\");\n }\n break;\n\n default:\n throw new Error(\"Unknown s2k type.\");\n }\n\n return i;\n};\n\n/**\n * Serializes s2k information\n * @returns {Uint8Array} binary representation of s2k\n */\nS2K.prototype.write = function () {\n var arr = [new Uint8Array([_enums2.default.write(_enums2.default.s2k, this.type), _enums2.default.write(_enums2.default.hash, this.algorithm)])];\n\n switch (this.type) {\n case 'simple':\n break;\n case 'salted':\n arr.push(this.salt);\n break;\n case 'iterated':\n arr.push(this.salt);\n arr.push(new Uint8Array([this.c]));\n break;\n case 'gnu':\n throw new Error(\"GNU s2k type not supported.\");\n default:\n throw new Error(\"Unknown s2k type.\");\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Produces a key using the specified passphrase and the defined\n * hashAlgorithm\n * @param {String} passphrase Passphrase containing user input\n * @returns {Uint8Array} Produced key with a length corresponding to\n * hashAlgorithm hash length\n */\nS2K.prototype.produce_key = function (passphrase, numBytes) {\n passphrase = _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(passphrase));\n\n function round(prefix, s2k) {\n var algorithm = _enums2.default.write(_enums2.default.hash, s2k.algorithm);\n\n switch (s2k.type) {\n case 'simple':\n return _crypto2.default.hash.digest(algorithm, _util2.default.concatUint8Array([prefix, passphrase]));\n\n case 'salted':\n return _crypto2.default.hash.digest(algorithm, _util2.default.concatUint8Array([prefix, s2k.salt, passphrase]));\n\n case 'iterated':\n {\n var count = s2k.get_count();\n var data = _util2.default.concatUint8Array([s2k.salt, passphrase]);\n var isp = new Array(Math.ceil(count / data.length));\n\n isp = _util2.default.concatUint8Array(isp.fill(data));\n\n if (isp.length > count) {\n isp = isp.subarray(0, count);\n }\n\n return _crypto2.default.hash.digest(algorithm, _util2.default.concatUint8Array([prefix, isp]));\n }\n case 'gnu':\n throw new Error(\"GNU s2k type not supported.\");\n\n default:\n throw new Error(\"Unknown s2k type.\");\n }\n }\n\n var arr = [];\n var rlength = 0;\n var prefix = new Uint8Array(numBytes);\n\n for (var _i = 0; _i < numBytes; _i++) {\n prefix[_i] = 0;\n }\n\n var i = 0;\n while (rlength < numBytes) {\n var result = round(prefix.subarray(0, i), this);\n arr.push(result);\n rlength += result.length;\n i++;\n }\n\n return _util2.default.concatUint8Array(arr).subarray(0, numBytes);\n};\n\nS2K.fromClone = function (clone) {\n var s2k = new S2K();\n s2k.algorithm = clone.algorithm;\n s2k.type = clone.type;\n s2k.c = clone.c;\n s2k.salt = clone.salt;\n return s2k;\n};\n\nexports.default = S2K;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums.js\":359,\"../util.js\":398}],398:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _values = _dereq_('babel-runtime/core-js/object/values');\n\nvar _values2 = _interopRequireDefault(_values);\n\nvar _addressRfc = _dereq_('address-rfc2822');\n\nvar _addressRfc2 = _interopRequireDefault(_addressRfc);\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _base = _dereq_('./encoding/base64');\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/* eslint-disable no-console */\n\n/**\n * This object contains utility functions\n * @requires address-rfc2822\n * @requires config\n * @requires encoding/base64\n * @module util\n */\n\nvar isIE11 = typeof navigator !== 'undefined' && !!navigator.userAgent.match(/Trident\\/7\\.0.*rv:([0-9.]+).*\\).*Gecko$/); // re-import module to access util functions\nexports.default = {\n isString: function isString(data) {\n return typeof data === 'string' || String.prototype.isPrototypeOf(data);\n },\n\n isArray: function isArray(data) {\n return Array.prototype.isPrototypeOf(data);\n },\n\n isUint8Array: function isUint8Array(data) {\n return Uint8Array.prototype.isPrototypeOf(data);\n },\n\n /**\n * Get transferable objects to pass buffers with zero copy (similar to \"pass by reference\" in C++)\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage\n * @param {Object} obj the options object to be passed to the web worker\n * @returns {Array<ArrayBuffer>} an array of binary data to be passed\n */\n getTransferables: function getTransferables(obj) {\n // Internet Explorer does not support Transferable objects.\n if (isIE11) {\n return undefined;\n }\n if (_config2.default.zero_copy && Object.prototype.isPrototypeOf(obj)) {\n var transferables = [];\n _util2.default.collectBuffers(obj, transferables);\n return transferables.length ? transferables : undefined;\n }\n },\n\n collectBuffers: function collectBuffers(obj, collection) {\n if (!obj) {\n return;\n }\n if (_util2.default.isUint8Array(obj) && collection.indexOf(obj.buffer) === -1) {\n collection.push(obj.buffer);\n return;\n }\n if (Object.prototype.isPrototypeOf(obj)) {\n (0, _values2.default)(obj).forEach(function (value) {\n // recursively search all children\n _util2.default.collectBuffers(value, collection);\n });\n }\n },\n\n readNumber: function readNumber(bytes) {\n var n = 0;\n for (var i = 0; i < bytes.length; i++) {\n n += Math.pow(256, i) * bytes[bytes.length - 1 - i];\n }\n return n;\n },\n\n writeNumber: function writeNumber(n, bytes) {\n var b = new Uint8Array(bytes);\n for (var i = 0; i < bytes; i++) {\n b[i] = n >> 8 * (bytes - i - 1) & 0xFF;\n }\n\n return b;\n },\n\n readDate: function readDate(bytes) {\n var n = _util2.default.readNumber(bytes);\n var d = new Date(n * 1000);\n return d;\n },\n\n writeDate: function writeDate(time) {\n var numeric = Math.floor(time.getTime() / 1000);\n\n return _util2.default.writeNumber(numeric, 4);\n },\n\n normalizeDate: function normalizeDate() {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n\n return time === null ? time : new Date(Math.floor(+time / 1000) * 1000);\n },\n\n /**\n * Create hex string from a binary\n * @param {String} str String to convert\n * @returns {String} String containing the hexadecimal values\n */\n str_to_hex: function str_to_hex(str) {\n if (str === null) {\n return \"\";\n }\n var r = [];\n var e = str.length;\n var c = 0;\n var h = void 0;\n while (c < e) {\n h = str.charCodeAt(c++).toString(16);\n while (h.length < 2) {\n h = \"0\" + h;\n }\n r.push(\"\" + h);\n }\n return r.join('');\n },\n\n /**\n * Create binary string from a hex encoded string\n * @param {String} str Hex string to convert\n * @returns {String}\n */\n hex_to_str: function hex_to_str(hex) {\n var str = '';\n for (var i = 0; i < hex.length; i += 2) {\n str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));\n }\n return str;\n },\n\n /**\n * Convert a Uint8Array to an MPI-formatted Uint8Array.\n * Note: the output is **not** an MPI object.\n * @see {@link module:type/mpi/MPI.fromUint8Array}\n * @see {@link module:type/mpi/MPI.toUint8Array}\n * @param {Uint8Array} bin An array of 8-bit integers to convert\n * @returns {Uint8Array} MPI-formatted Uint8Array\n */\n Uint8Array_to_MPI: function Uint8Array_to_MPI(bin) {\n var size = (bin.length - 1) * 8 + _util2.default.nbits(bin[0]);\n var prefix = Uint8Array.from([(size & 0xFF00) >> 8, size & 0xFF]);\n return _util2.default.concatUint8Array([prefix, bin]);\n },\n\n /**\n * Convert a Base-64 encoded string an array of 8-bit integer\n *\n * Note: accepts both Radix-64 and URL-safe strings\n * @param {String} base64 Base-64 encoded string to convert\n * @returns {Uint8Array} An array of 8-bit integers\n */\n b64_to_Uint8Array: function b64_to_Uint8Array(base64) {\n return _base2.default.decode(base64.replace(/-/g, '+').replace(/_/g, '/'));\n },\n\n /**\n * Convert an array of 8-bit integer to a Base-64 encoded string\n * @param {Uint8Array} bytes An array of 8-bit integers to convert\n * @param {bool} url If true, output is URL-safe\n * @returns {String} Base-64 encoded string\n */\n Uint8Array_to_b64: function Uint8Array_to_b64(bytes, url) {\n return _base2.default.encode(bytes, url).replace(/(\\n)/g, '');\n },\n\n /**\n * Convert a hex string to an array of 8-bit integers\n * @param {String} hex A hex string to convert\n * @returns {Uint8Array} An array of 8-bit integers\n */\n hex_to_Uint8Array: function hex_to_Uint8Array(hex) {\n var result = new Uint8Array(hex.length >> 1);\n for (var k = 0; k < hex.length >> 1; k++) {\n result[k] = parseInt(hex.substr(k << 1, 2), 16);\n }\n return result;\n },\n\n /**\n * Convert an array of 8-bit integers to a hex string\n * @param {Uint8Array} bytes Array of 8-bit integers to convert\n * @returns {String} Hexadecimal representation of the array\n */\n Uint8Array_to_hex: function Uint8Array_to_hex(bytes) {\n var r = [];\n var e = bytes.length;\n var c = 0;\n var h = void 0;\n while (c < e) {\n h = bytes[c++].toString(16);\n while (h.length < 2) {\n h = \"0\" + h;\n }\n r.push(\"\" + h);\n }\n return r.join('');\n },\n\n /**\n * Convert a string to an array of 8-bit integers\n * @param {String} str String to convert\n * @returns {Uint8Array} An array of 8-bit integers\n */\n str_to_Uint8Array: function str_to_Uint8Array(str) {\n if (!_util2.default.isString(str)) {\n throw new Error('str_to_Uint8Array: Data must be in the form of a string');\n }\n\n var result = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n result[i] = str.charCodeAt(i);\n }\n return result;\n },\n\n /**\n * Convert an array of 8-bit integers to a string\n * @param {Uint8Array} bytes An array of 8-bit integers to convert\n * @returns {String} String representation of the array\n */\n Uint8Array_to_str: function Uint8Array_to_str(bytes) {\n bytes = new Uint8Array(bytes);\n var result = [];\n var bs = 1 << 14;\n var j = bytes.length;\n\n for (var i = 0; i < j; i += bs) {\n result.push(String.fromCharCode.apply(String, bytes.subarray(i, i + bs < j ? i + bs : j)));\n }\n return result.join('');\n },\n\n /**\n * Convert a native javascript string to a string of utf8 bytes\n * @param {String} str The string to convert\n * @returns {String} A valid squence of utf8 bytes\n */\n encode_utf8: function encode_utf8(str) {\n return unescape(encodeURIComponent(str));\n },\n\n /**\n * Convert a string of utf8 bytes to a native javascript string\n * @param {String} utf8 A valid squence of utf8 bytes\n * @returns {String} A native javascript string\n */\n decode_utf8: function decode_utf8(utf8) {\n if (typeof utf8 !== 'string') {\n throw new Error('Parameter \"utf8\" is not of type string');\n }\n try {\n return decodeURIComponent(escape(utf8));\n } catch (e) {\n return utf8;\n }\n },\n\n /**\n * Concat Uint8arrays\n * @param {Array<Uint8array>} Array of Uint8Arrays to concatenate\n * @returns {Uint8array} Concatenated array\n */\n concatUint8Array: function concatUint8Array(arrays) {\n var totalLength = 0;\n for (var i = 0; i < arrays.length; i++) {\n if (!_util2.default.isUint8Array(arrays[i])) {\n throw new Error('concatUint8Array: Data must be in the form of a Uint8Array');\n }\n\n totalLength += arrays[i].length;\n }\n\n var result = new Uint8Array(totalLength);\n var pos = 0;\n arrays.forEach(function (element) {\n result.set(element, pos);\n pos += element.length;\n });\n\n return result;\n },\n\n /**\n * Deep copy Uint8Array\n * @param {Uint8Array} Array to copy\n * @returns {Uint8Array} new Uint8Array\n */\n copyUint8Array: function copyUint8Array(array) {\n if (!_util2.default.isUint8Array(array)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n var copy = new Uint8Array(array.length);\n copy.set(array);\n return copy;\n },\n\n /**\n * Check Uint8Array equality\n * @param {Uint8Array} first array\n * @param {Uint8Array} second array\n * @returns {Boolean} equality\n */\n equalsUint8Array: function equalsUint8Array(array1, array2) {\n if (!_util2.default.isUint8Array(array1) || !_util2.default.isUint8Array(array2)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (var i = 0; i < array1.length; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Calculates a 16bit sum of a Uint8Array by adding each character\n * codes modulus 65535\n * @param {Uint8Array} Uint8Array to create a sum of\n * @returns {Integer} An integer containing the sum of all character\n * codes % 65535\n */\n calc_checksum: function calc_checksum(text) {\n var checksum = {\n s: 0,\n add: function add(sadd) {\n this.s = (this.s + sadd) % 65536;\n }\n };\n for (var i = 0; i < text.length; i++) {\n checksum.add(text[i]);\n }\n return checksum.s;\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * @param {String} str String of the debug message\n */\n print_debug: function print_debug(str) {\n if (_config2.default.debug) {\n console.log(str);\n }\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * Different than print_debug because will call Uint8Array_to_hex iff necessary.\n * @param {String} str String of the debug message\n */\n print_debug_hexarray_dump: function print_debug_hexarray_dump(str, arrToHex) {\n if (_config2.default.debug) {\n str += ': ' + _util2.default.Uint8Array_to_hex(arrToHex);\n console.log(str);\n }\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * Different than print_debug because will call str_to_hex iff necessary.\n * @param {String} str String of the debug message\n */\n print_debug_hexstr_dump: function print_debug_hexstr_dump(str, strToHex) {\n if (_config2.default.debug) {\n str += _util2.default.str_to_hex(strToHex);\n console.log(str);\n }\n },\n\n /**\n * Helper function to print a debug error. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * @param {String} str String of the debug message\n */\n print_debug_error: function print_debug_error(error) {\n if (_config2.default.debug) {\n console.error(error);\n }\n },\n\n getLeftNBits: function getLeftNBits(array, bitcount) {\n var rest = bitcount % 8;\n if (rest === 0) {\n return array.subarray(0, bitcount / 8);\n }\n var bytes = (bitcount - rest) / 8 + 1;\n var result = array.subarray(0, bytes);\n return _util2.default.shiftRight(result, 8 - rest); // +String.fromCharCode(string.charCodeAt(bytes -1) << (8-rest) & 0xFF);\n },\n\n // returns bit length of the integer x\n nbits: function nbits(x) {\n var r = 1;\n var t = x >>> 16;\n if (t !== 0) {\n x = t;\n r += 16;\n }\n t = x >> 8;\n if (t !== 0) {\n x = t;\n r += 8;\n }\n t = x >> 4;\n if (t !== 0) {\n x = t;\n r += 4;\n }\n t = x >> 2;\n if (t !== 0) {\n x = t;\n r += 2;\n }\n t = x >> 1;\n if (t !== 0) {\n x = t;\n r += 1;\n }\n return r;\n },\n\n /**\n * If S[1] == 0, then double(S) == (S[2..128] || 0);\n * otherwise, double(S) == (S[2..128] || 0) xor\n * (zeros(120) || 10000111).\n *\n * Both OCB and EAX (through CMAC) require this function to be constant-time.\n *\n * @param {Uint8Array} data\n */\n double: function double(data) {\n var double = new Uint8Array(data.length);\n var last = data.length - 1;\n for (var i = 0; i < last; i++) {\n double[i] = data[i] << 1 ^ data[i + 1] >> 7;\n }\n double[last] = data[last] << 1 ^ (data[0] >> 7) * 0x87;\n return double;\n },\n\n /**\n * Shift a Uint8Array to the right by n bits\n * @param {Uint8Array} array The array to shift\n * @param {Integer} bits Amount of bits to shift (MUST be smaller\n * than 8)\n * @returns {String} Resulting array.\n */\n shiftRight: function shiftRight(array, bits) {\n if (bits) {\n for (var i = array.length - 1; i >= 0; i--) {\n array[i] >>= bits;\n if (i > 0) {\n array[i] |= array[i - 1] << 8 - bits;\n }\n }\n }\n return array;\n },\n\n /**\n * Get native Web Cryptography api, only the current version of the spec.\n * The default configuration is to use the api when available. But it can\n * be deactivated with config.use_native\n * @returns {Object} The SubtleCrypto api or 'undefined'\n */\n getWebCrypto: function getWebCrypto() {\n if (!_config2.default.use_native) {\n return;\n }\n\n return typeof window !== 'undefined' && window.crypto && window.crypto.subtle;\n },\n\n /**\n * Get native Web Cryptography api for all browsers, including legacy\n * implementations of the spec e.g IE11 and Safari 8/9. The default\n * configuration is to use the api when available. But it can be deactivated\n * with config.use_native\n * @returns {Object} The SubtleCrypto api or 'undefined'\n */\n getWebCryptoAll: function getWebCryptoAll() {\n if (!_config2.default.use_native) {\n return;\n }\n\n if (typeof window !== 'undefined') {\n if (window.crypto) {\n return window.crypto.subtle || window.crypto.webkitSubtle;\n }\n if (window.msCrypto) {\n return window.msCrypto.subtle;\n }\n }\n },\n\n /**\n * Detect Node.js runtime.\n */\n detectNode: function detectNode() {\n return typeof window === 'undefined';\n },\n\n /**\n * Get native Node.js crypto api. The default configuration is to use\n * the api when available. But it can also be deactivated with config.use_native\n * @returns {Object} The crypto module or 'undefined'\n */\n getNodeCrypto: function getNodeCrypto() {\n if (!_util2.default.detectNode() || !_config2.default.use_native) {\n return;\n }\n\n return _dereq_('crypto');\n },\n\n /**\n * Get native Node.js Buffer constructor. This should be used since\n * Buffer is not available under browserify.\n * @returns {Function} The Buffer constructor or 'undefined'\n */\n getNodeBuffer: function getNodeBuffer() {\n if (!_util2.default.detectNode()) {\n return;\n }\n\n // This \"hack\" allows us to access the native node buffer module.\n // otherwise, it gets replaced with the browserified version\n // eslint-disable-next-line no-useless-concat, import/no-dynamic-require\n return _dereq_('buf' + 'fer').Buffer;\n },\n\n getNodeZlib: function getNodeZlib() {\n if (!_util2.default.detectNode() || !_config2.default.use_native) {\n return;\n }\n\n return _dereq_('zlib');\n },\n\n isEmailAddress: function isEmailAddress(data) {\n if (!_util2.default.isString(data)) {\n return false;\n }\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+([a-zA-Z]{2,}|xn--[a-zA-Z\\-0-9]+)))$/;\n return re.test(data);\n },\n\n /**\n * Format user id for internal use.\n */\n formatUserId: function formatUserId(id) {\n // name and email address can be empty but must be of the correct type\n if (id.name && !_util2.default.isString(id.name) || id.email && !_util2.default.isEmailAddress(id.email)) {\n throw new Error('Invalid user id format');\n }\n return new _addressRfc2.default.Address(id.name, id.email, id.comment).format();\n },\n\n /**\n * Parse user id.\n */\n parseUserId: function parseUserId(userid) {\n if (userid.length > _config2.default.max_userid_length) {\n throw new Error('User id string is too long');\n }\n try {\n var _rfc2822$parse = _addressRfc2.default.parse(userid),\n _rfc2822$parse2 = (0, _slicedToArray3.default)(_rfc2822$parse, 1),\n _rfc2822$parse2$ = _rfc2822$parse2[0],\n name = _rfc2822$parse2$.phrase,\n email = _rfc2822$parse2$.address,\n comment = _rfc2822$parse2$.comment;\n\n return { name: name, email: email, comment: comment.replace(/^\\(|\\)$/g, '') };\n } catch (e) {\n throw new Error('Invalid user id format');\n }\n },\n\n /**\n * Normalize line endings to \\r\\n\n */\n canonicalizeEOL: function canonicalizeEOL(text) {\n return text.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\").replace(/\\n/g, \"\\r\\n\");\n },\n\n /**\n * Convert line endings from canonicalized \\r\\n to native \\n\n */\n nativeEOL: function nativeEOL(text) {\n return text.replace(/\\r\\n/g, \"\\n\");\n },\n\n /**\n * Remove trailing spaces and tabs from each line\n */\n removeTrailingSpaces: function removeTrailingSpaces(text) {\n return text.replace(/[ \\t]+$/mg, \"\");\n },\n\n /**\n * Encode input buffer using Z-Base32 encoding.\n * See: https://tools.ietf.org/html/rfc6189#section-5.1.6\n *\n * @param {Uint8Array} data The binary data to encode\n * @returns {String} Binary data encoded using Z-Base32\n */\n encodeZBase32: function encodeZBase32(data) {\n if (data.length === 0) {\n return \"\";\n }\n var ALPHABET = \"ybndrfg8ejkmcpqxot1uwisza345h769\";\n var SHIFT = 5;\n var MASK = 31;\n var buffer = data[0];\n var index = 1;\n var bitsLeft = 8;\n var result = '';\n while (bitsLeft > 0 || index < data.length) {\n if (bitsLeft < SHIFT) {\n if (index < data.length) {\n buffer <<= 8;\n buffer |= data[index++] & 0xff;\n bitsLeft += 8;\n } else {\n var pad = SHIFT - bitsLeft;\n buffer <<= pad;\n bitsLeft += pad;\n }\n }\n bitsLeft -= SHIFT;\n result += ALPHABET[MASK & buffer >> bitsLeft];\n }\n return result;\n }\n};\n\n},{\"./config\":325,\"./encoding/base64\":358,\"./util\":398,\"address-rfc2822\":1,\"babel-runtime/core-js/object/values\":31,\"babel-runtime/helpers/slicedToArray\":40,\"crypto\":\"crypto\",\"zlib\":\"zlib\"}],399:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _key = _dereq_('./key');\n\nvar keyMod = _interopRequireWildcard(_key);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initialize the WKD client\n * @constructor\n */\nfunction WKD() {\n this._fetch = typeof window !== 'undefined' ? window.fetch : _dereq_('node-fetch');\n}\n\n/**\n * Search for a public key using Web Key Directory protocol.\n * @param {String} options.email User's email.\n * @param {Boolean} options.rawBytes Returns Uint8Array instead of parsed key.\n * @returns {Promise<Uint8Array|\n * {keys: Array<module:key.Key>,\n * err: (Array<Error>|null)}>} The public key.\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Wiktor Kwapisiewicz\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This class implements a client for the Web Key Directory (wkd) protocol\n * in order to lookup keys on designated servers.\n * See: https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/\n * @module wkd\n */\n\nWKD.prototype.lookup = function (options) {\n var fetch = this._fetch;\n\n if (!options.email) {\n throw new Error('You must provide an email parameter!');\n }\n\n if (!_util2.default.isEmailAddress(options.email)) {\n throw new Error('Invalid e-mail address.');\n }\n\n var _$exec = /(.*)@(.*)/.exec(options.email),\n _$exec2 = (0, _slicedToArray3.default)(_$exec, 3),\n localPart = _$exec2[1],\n domain = _$exec2[2];\n\n var localEncoded = _util2.default.encodeZBase32(_crypto2.default.hash.sha1(_util2.default.str_to_Uint8Array(localPart.toLowerCase())));\n\n var url = 'https://' + domain + '/.well-known/openpgpkey/hu/' + localEncoded;\n\n return fetch(url).then(function (response) {\n if (response.status === 200) {\n return response.arrayBuffer();\n }\n }).then(function (publicKey) {\n if (publicKey) {\n var rawBytes = new Uint8Array(publicKey);\n if (options.rawBytes) {\n return rawBytes;\n }\n return keyMod.read(rawBytes);\n }\n });\n};\n\nexports.default = WKD;\n\n},{\"./crypto\":340,\"./key\":362,\"./util\":398,\"babel-runtime/helpers/slicedToArray\":40,\"node-fetch\":\"node-fetch\"}],400:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _util = _dereq_('../util.js');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _packet = _dereq_('../packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initializes a new proxy and loads the web worker\n * @param {String} path The path to the worker or 'openpgp.worker.js' by default\n * @param {Number} n number of workers to initialize if path given\n * @param {Object} config config The worker configuration\n * @param {Array<Object>} worker alternative to path parameter: web worker initialized with 'openpgp.worker.js'\n * @constructor\n */\nfunction AsyncProxy() {\n var _this = this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$path = _ref.path,\n path = _ref$path === undefined ? 'openpgp.worker.js' : _ref$path,\n _ref$n = _ref.n,\n n = _ref$n === undefined ? 1 : _ref$n,\n _ref$workers = _ref.workers,\n workers = _ref$workers === undefined ? [] : _ref$workers,\n config = _ref.config;\n\n /**\n * Message handling\n */\n var handleMessage = function handleMessage(workerId) {\n return function (event) {\n var msg = event.data;\n switch (msg.event) {\n case 'method-return':\n if (msg.err) {\n // fail\n var err = new Error(msg.err);\n // add worker stack\n err.workerStack = msg.stack;\n _this.tasks[msg.id].reject(err);\n } else {\n // success\n _this.tasks[msg.id].resolve(msg.data);\n }\n delete _this.tasks[msg.id];\n _this.workers[workerId].requests--;\n break;\n case 'request-seed':\n _this.seedRandom(workerId, msg.amount);\n break;\n default:\n throw new Error('Unknown Worker Event.');\n }\n };\n };\n\n if (workers.length) {\n this.workers = workers;\n } else {\n this.workers = [];\n while (this.workers.length < n) {\n this.workers.push(new Worker(path));\n }\n }\n\n var workerId = 0;\n this.workers.forEach(function (worker) {\n worker.requests = 0;\n worker.onmessage = handleMessage(workerId++);\n worker.onerror = function (e) {\n throw new Error('Unhandled error in openpgp worker: ' + e.message + ' (' + e.filename + ':' + e.lineno + ')');\n };\n\n if (config) {\n worker.postMessage({ event: 'configure', config: config });\n }\n });\n\n // Cannot rely on task order being maintained, use object keyed by request ID to track tasks\n this.tasks = {};\n this.currentID = 0;\n}\n\n/**\n * Get new request ID\n * @returns {integer} New unique request ID\n*/\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides functions for maintaining browser workers\n * @see module:openpgp.initWorker\n * @see module:openpgp.getWorker\n * @see module:openpgp.destroyWorker\n * @see module:worker/worker\n * @requires util\n * @requires crypto\n * @requires packet\n * @module worker/async_proxy\n */\n\nAsyncProxy.prototype.getID = function () {\n return this.currentID++;\n};\n\n/**\n * Send message to worker with random data\n * @param {Integer} size Number of bytes to send\n * @async\n */\nAsyncProxy.prototype.seedRandom = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(workerId, size) {\n var buf;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _crypto2.default.random.getRandomBytes(size);\n\n case 2:\n buf = _context.sent;\n\n this.workers[workerId].postMessage({ event: 'seed-random', buf: buf }, _util2.default.getTransferables(buf));\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Terminates the workers\n */\nAsyncProxy.prototype.terminate = function () {\n this.workers.forEach(function (worker) {\n worker.terminate();\n });\n};\n\n/**\n * Generic proxy function that handles all commands from the public api.\n * @param {String} method the public api function to be delegated to the worker thread\n * @param {Object} options the api function's options\n * @returns {Promise} see the corresponding public api functions for their return types\n * @async\n */\nAsyncProxy.prototype.delegate = function (method, options) {\n var _this2 = this;\n\n var id = this.getID();\n var requests = this.workers.map(function (worker) {\n return worker.requests;\n });\n var minRequests = Math.min(requests);\n var workerId = 0;\n for (; workerId < this.workers.length; workerId++) {\n if (this.workers[workerId].requests === minRequests) {\n break;\n }\n }\n\n return new _promise2.default(function (_resolve, reject) {\n // clone packets (for web worker structured cloning algorithm)\n _this2.workers[workerId].postMessage({ id: id, event: method, options: _packet2.default.clone.clonePackets(options) }, _util2.default.getTransferables(options));\n _this2.workers[workerId].requests++;\n\n // remember to handle parsing cloned packets from worker\n _this2.tasks[id] = { resolve: function resolve(data) {\n return _resolve(_packet2.default.clone.parseClonedPackets(data, method));\n }, reject: reject };\n });\n};\n\nexports.default = AsyncProxy;\n\n},{\"../crypto\":340,\"../packet\":371,\"../util.js\":398,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}]},{},[361])(361)\n});\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb3BlbnBncC9kaXN0L29wZW5wZ3AuanM/NjhjNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiMERBQUEseUJBQWEsU0FBMkQsbUJBQW1CLGdEQUFnRCxhQUFhLEtBQUssTUFBTSxnQ0FBZ0MsU0FBUyxxQ0FBcUMsU0FBUyxtQ0FBbUMsT0FBTyxLQUFLLE9BQU8saUJBQWlCLGFBQWEsMEJBQTBCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLFVBQVUsVUFBVSwwQ0FBMEMsOEJBQXdCLG9CQUFvQiw4Q0FBOEMsa0NBQWtDLFlBQVksWUFBWSxtQ0FBbUMsaUJBQWlCLGVBQWUsc0JBQXNCLG9CQUFvQixrREFBa0QsV0FBVyxZQUFZLFNBQVMsU0FBUyxLQUFLO0FBQzV6Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxpRUFBaUUsd0JBQXdCOztBQUV6RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsY0FBYyxlQUFlO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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RUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsUUFBUTtBQUMvQjtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixhQUFhO0FBQ2xDO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQSxhQUFhOztBQUViOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0QseUJBQXlCOztBQUUzRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMEVBQTBFLHFCQUFxQjtBQUMvRjtBQUNBOztBQUVBLENBQUMsRUFBRSxnREFBZ0Q7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQyxVQUFVO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBOztBQUVBLGlCQUFpQixhQUFhO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUIsYUFBYTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsV0FBVztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELFdBQVc7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLCtDQUErQztBQUNsRTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxxQkFBcUIsc0NBQXNDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSx5QkFBeUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGNBQWM7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyxRQUFRO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIsbUNBQW1DO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixtQ0FBbUM7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw2QkFBNkIsbUNBQW1DO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLG1DQUFtQztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyxRQUFRO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLFFBQVE7QUFDcEM7QUFDQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxDQUFDLEVBQUUsWUFBWTtBQUNmOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxDQUFDLEVBQUUsa0JBQWtCOztBQUVyQixDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtREFBbUQ7QUFDeEU7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7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Q0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsV0FBVztBQUM1QixtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLGdDQUFnQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDhEQUE4RDtBQUNqRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEVBQUUsd0RBQXdEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmLHVDQUF1QztBQUN2QyxlQUFlOztBQUVmLHFCQUFxQixpQkFBaUI7QUFDdEM7O0FBRUEsK0JBQStCLFFBQVE7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDhEQUE4RDtBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLGVBQWU7QUFDcEIsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEVBQUUsOERBQThEO0FBQ2pFOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELENBQUMsRUFBRSw4REFBOEQ7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsb0JBQW9CLE1BQU07QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLDJDQUEyQztBQUNyRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSw4RUFBOEU7QUFDakY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVosVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSxnQ0FBZ0M7QUFDbkM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsY0FBYztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSxnQ0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxDQUFDLEVBQUUscUVBQXFFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdEQUFnRDtBQUNoRCxnREFBZ0Q7QUFDaEQsZ0RBQWdEO0FBQ2hELGdEQUFnRDtBQUNoRCxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSx5QkFBeUIsNkRBQTZEOztBQUV0RjtBQUNBLHlCQUF5Qiw2REFBNkQ7O0FBRXRGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDhDQUE4QztBQUNqRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsQ0FBQyxFQUFFLDJCQUEyQjtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0EsUUFBUSxjQUFjO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSx3RUFBd0U7QUFDM0U7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEVBQUUsMkJBQTJCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBLFFBQVEsY0FBYztBQUN0Qiw4Q0FBOEM7QUFDOUM7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSwwQkFBMEI7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsY0FBYztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSx5REFBeUQ7QUFDNUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLGVBQWU7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGdCQUFnQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBLEdBQUc7QUFDSCxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixnQkFBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLHlDQUF5QztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSx3RUFBd0U7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVzs7QUFFbkI7QUFDQTtBQUNBO0FBQ0EsUUFBUSxXQUFXOztBQUVuQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxXQUFXOztBQUVuQjtBQUNBO0FBQ0EsUUFBUSxVQUFVOztBQUVsQjtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7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QUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUJBQXFCLHlDQUF5Qzs7QUFFOUQ7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEVBQUUsMkdBQTJHO0FBQzlHOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsVUFBVTtBQUM3QztBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EscUJBQXFCLDhCQUE4QjtB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OztBQUV0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsMEJBQTBCOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsdUJBQXVCO0FBQ3BEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QyxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0EscUJBQXFCLGNBQWM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEVBQUUsZ0JBQWdCO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIscUJBQXFCO0FBQy9DLE9BQU87QUFDUCwwQkFBMEIsMEJBQTBCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHO0FBQ3BCLENBQUM7QUFDRCxDQUFDLHFJQUFxSTtBQUN0SSxDQUFDLEdBQUc7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFD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OztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLFVBQVU7QUFDaEMseUJBQXlCLFdBQVc7QUFDcEMsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLCtCQUErQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZUFBZTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0EsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUI7O0FBRW5CLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixXQUFXO0FBQ1gsV0FBVztBQUNYLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsV0FBVztBQUNYLFdBQVc7QUFDWCxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLFdBQVc7QUFDWCxXQUFXO0FBQ1gsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsV0FBVztBQUNYLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLFdBQVc7QUFDWCxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixXQUFXO0FBQ1gsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsV0FBVztBQUNYLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDBFQUEwRTtBQUM3RTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsYUFBYSxrQkFBa0IsZ0NBQWdDLG1FQUFtRTtBQUNsSSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSw4TUFBOE07QUFDak47O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtB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QTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxDQUFDLEVBQUUsbUxBQW1MO0FBQ3RMOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSx5REFBeUQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLEdBQUc7QUFDZCxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLEVBQUUsc0dBQXNHO0FBQ3pHOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLEdBQUc7QUFDaEIsYUFBYSxHQUFHO0FBQ2hCLGFBQWEsR0FBRztBQUNoQixhQUFhLEdBQUc7QUFDaEIsZUFBZSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsYUFBYSxHQUFHO0FBQ2hCLGFBQWEsR0FBRztBQUNoQixhQUFhLEdBQUc7QUFDaEIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsYUFBYSxHQUFHO0FBQ2hCLGFBQWEsR0FBRztBQUNoQixhQUFhLEdBQUc7QUFDaEIsZUFBZSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsYUFBYSxHQUFHO0FBQ2hCLGFBQWEsR0FBRztBQUNoQixhQUFhLEdBQUc7QUFDaEIsYUFBYSxHQUFHO0FBQ2hCLGFBQWEsR0FBRztBQUNoQixhQUFhLEdBQUc7QUFDaEIsYUFBYSxHQUFHO0FBQ2hCLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9DQUFvQzs7QUFFcEMsb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQixnQkFBZ0I7QUFDaEIscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDJMQUEyTDtBQUM5TDs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0IsYUFBYSxnQkFBZ0I7QUFDN0IsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsT0FBTztBQUNQLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDRFQUE0RTtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxPQUFPO0FBQ1AsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxPQUFPO0FBQ1AsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsT0FBTztBQUNQLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxNQUFNO0FBQ04sWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsT0FBTztBQUNQLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsT0FBTztBQUNQLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsT0FBTztBQUNQLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUscUhBQXFIO0FBQ3hIOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pELEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSxDQUFDLEVBQUUseUNBQXlDO0FBQzVDOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FB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O0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxhQUFhOztBQUViOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0REFBNEQsK0RBQStEOztBQUUzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGVBQWU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQSx3REFBd0QsUUFBUTtBQUNoRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsYUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksMENBQTBDO0FBQzlDO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsb0xBQW9MO0FBQ3ZMOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsa0NBQWtDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtFQUFrRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVM7QUFDVCxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0RBQWdELGlDQUFpQzs7QUFFakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLFFBQVEsZ0NBQWdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsK0VBQStFO0FBQ3pIOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0EsT0FBTztBQUNQLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSxDQUFDLEVBQUUsK0pBQStKLEVBQUUsR0FBRztBQUN2SyxDQUFDIiwiZmlsZSI6IjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09XCJvYmplY3RcIiYmdHlwZW9mIG1vZHVsZSE9PVwidW5kZWZpbmVkXCIpe21vZHVsZS5leHBvcnRzPWYoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT1cImZ1bmN0aW9uXCImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT1cInVuZGVmaW5lZFwiKXtnPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT1cInVuZGVmaW5lZFwiKXtnPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxmIT09XCJ1bmRlZmluZWRcIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcub3BlbnBncCA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkoezE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGVhX2xpYiA9IF9kZXJlcV8oJ2VtYWlsLWFkZHJlc3NlcycpO1xuXG5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UobGluZSwgc3RhcnRBdCkge1xuICAgIGlmICghbGluZSkgdGhyb3cgJ05vdGhpbmcgdG8gcGFyc2UnO1xuXG4gICAgbGluZSA9IGxpbmUudHJpbSgpO1xuXG4gICAgdmFyIGFkZHIgPSBlYV9saWIoe1xuICAgICAgICBpbnB1dDogbGluZSxcbiAgICAgICAgcmZjNjUzMjogdHJ1ZSwgLy8gdW5pY29kZVxuICAgICAgICBwYXJ0aWFsOiBmYWxzZSwgLy8gcmV0dXJuIGZhaWxlZCBwYXJzZXNcbiAgICAgICAgc2ltcGxlOiBmYWxzZSwgLy8gc2ltcGxlIEFTVFxuICAgICAgICBzdHJpY3Q6IGZhbHNlLCAvLyB0dXJuIG9mZiBvYnMtIGZlYXR1cmVzIGluIHRoZSByZmNcbiAgICAgICAgcmVqZWN0VExEOiBmYWxzZSwgLy8gZG9tYWlucyByZXF1aXJlIGEgXCIuXCJcbiAgICAgICAgc3RhcnRBdDogc3RhcnRBdCB8fCBudWxsXG4gICAgfSk7XG5cbiAgICBpZiAoIWFkZHIpIHRocm93ICdObyByZXN1bHRzJztcblxuICAgIC8vIGNvbnNvbGUubG9nKFwiUGFyc2VkIHRvOiBcIiwgcmVxdWlyZSgndXRpbCcpLmluc3BlY3QoYWRkciwge2RlcHRoOiAxMCwgY29sb3JzOiB0cnVlfSkpO1xuXG4gICAgcmV0dXJuIGFkZHIuYWRkcmVzc2VzLm1hcChtYXBfYWRkcmVzc2VzKTtcbn07XG5cbmZ1bmN0aW9uIG1hcF9hZGRyZXNzZXMoYWRyKSB7XG4gICAgaWYgKGFkci50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHJldHVybiBuZXcgR3JvdXAoYWRyLm5hbWUsIGFkci5hZGRyZXNzZXMubWFwKG1hcF9hZGRyZXNzZXMpKTtcbiAgICB9XG4gICAgdmFyIGNvbW1lbnRzID0gdm9pZCAwO1xuICAgIGlmIChhZHIucGFydHMuY29tbWVudHMpIHtcbiAgICAgICAgY29tbWVudHMgPSBhZHIucGFydHMuY29tbWVudHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICByZXR1cm4gYy50b2tlbnMudHJpbSgpO1xuICAgICAgICB9KS5qb2luKCcgJykudHJpbSgpO1xuICAgICAgICAvLyBpZiAoY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8vICAgICBjb21tZW50cyA9ICcoJyArIGNvbW1lbnRzICsgJyknO1xuICAgICAgICAvLyB9XG4gICAgfVxuICAgIHZhciBsID0gYWRyLmxvY2FsO1xuICAgIGlmICghYWRyLm5hbWUgJiYgLzovLnRlc3QobCkpIGwgPSAnXCInICsgbCArICdcIic7XG4gICAgcmV0dXJuIG5ldyBBZGRyZXNzKGFkci5uYW1lLCBsICsgJ0AnICsgYWRyLmRvbWFpbiwgY29tbWVudHMpO1xufVxuXG5leHBvcnRzLnBhcnNlRnJvbSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMucGFyc2UobGluZSwgJ2Zyb20nKTtcbn07XG5cbmV4cG9ydHMucGFyc2VTZW5kZXIgPSBmdW5jdGlvbiAobGluZSkge1xuICAgIHJldHVybiBleHBvcnRzLnBhcnNlKGxpbmUsICdzZW5kZXInKTtcbn07XG5cbmV4cG9ydHMucGFyc2VSZXBseVRvID0gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5wYXJzZShsaW5lLCAncmVwbHktdG8nKTtcbn07XG5cbnZhciBHcm91cCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHcm91cChkaXNwbGF5X25hbWUsIGFkZHJlc3Nlcykge1xuICAgICAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBHcm91cCk7XG5cbiAgICAgICAgdGhpcy5waHJhc2UgPSBkaXNwbGF5X25hbWU7XG4gICAgICAgIHRoaXMuYWRkcmVzc2VzID0gYWRkcmVzc2VzO1xuICAgIH1cblxuICAgICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEdyb3VwLCBbe1xuICAgICAgICBrZXk6ICdmb3JtYXQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGhyYXNlICsgXCI6XCIgKyB0aGlzLmFkZHJlc3Nlcy5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5mb3JtYXQoKTtcbiAgICAgICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBuYW1lKCkge1xuICAgICAgICAgICAgdmFyIHBocmFzZSA9IHRoaXMucGhyYXNlO1xuXG4gICAgICAgICAgICBpZiAoIShwaHJhc2UgJiYgcGhyYXNlLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBwaHJhc2UgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuYW1lID0gX2V4dHJhY3RfbmFtZShwaHJhc2UpO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cbiAgICB9XSk7XG4gICAgcmV0dXJuIEdyb3VwO1xufSgpO1xuXG52YXIgQWRkcmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBZGRyZXNzKHBocmFzZSwgYWRkcmVzcywgY29tbWVudCkge1xuICAgICAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBBZGRyZXNzKTtcblxuICAgICAgICB0aGlzLnBocmFzZSA9IHBocmFzZSB8fCAnJztcbiAgICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcyB8fCAnJztcbiAgICAgICAgdGhpcy5jb21tZW50ID0gY29tbWVudCB8fCAnJztcbiAgICB9XG5cbiAgICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShBZGRyZXNzLCBbe1xuICAgICAgICBrZXk6ICdob3N0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhvc3QoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSAvLipAKC4qKSQvLmV4ZWModGhpcy5hZGRyZXNzKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICd1c2VyJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVzZXIoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXiguKilALy5leGVjKHRoaXMuYWRkcmVzcyk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnZm9ybWF0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdCgpIHtcbiAgICAgICAgICAgIHZhciBwaHJhc2UgPSB0aGlzLnBocmFzZTtcbiAgICAgICAgICAgIHZhciBlbWFpbCA9IHRoaXMuYWRkcmVzcztcbiAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5jb21tZW50O1xuXG4gICAgICAgICAgICB2YXIgYWRkciA9IFtdO1xuICAgICAgICAgICAgdmFyIGF0ZXh0ID0gbmV3IFJlZ0V4cCgnXltcXFxcLVxcXFx3ICEjJCUmXFwnKisvPT9eYHt8fX5dKyQnKTtcblxuICAgICAgICAgICAgaWYgKHBocmFzZSAmJiBwaHJhc2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYWRkci5wdXNoKGF0ZXh0LnRlc3QocGhyYXNlLnRyaW0oKSkgPyBwaHJhc2UgOiBfcXVvdGVfbm9fZXNjKHBocmFzZSkgPyBwaHJhc2UgOiAnXCInICsgcGhyYXNlICsgJ1wiJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZW1haWwgJiYgZW1haWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZHIucHVzaChcIjxcIiArIGVtYWlsICsgXCI+XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW1haWwgJiYgZW1haWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYWRkci5wdXNoKGVtYWlsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbW1lbnQgJiYgL1xcUy8udGVzdChjb21tZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50LnJlcGxhY2UoL15cXHMqXFwoPy8sICcoJykucmVwbGFjZSgvXFwpP1xccyokLywgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbW1lbnQgJiYgY29tbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhZGRyLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhZGRyLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBuYW1lKCkge1xuICAgICAgICAgICAgdmFyIHBocmFzZSA9IHRoaXMucGhyYXNlO1xuICAgICAgICAgICAgdmFyIGFkZHIgPSB0aGlzLmFkZHJlc3M7XG5cbiAgICAgICAgICAgIGlmICghKHBocmFzZSAmJiBwaHJhc2UubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHBocmFzZSA9IHRoaXMuY29tbWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5hbWUgPSBfZXh0cmFjdF9uYW1lKHBocmFzZSk7XG5cbiAgICAgICAgICAgIC8vIGZpcnN0Lmxhc3RAZG9tYWluIGFkZHJlc3NcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IC8oW14lLkBfXSsoWy5fXVteJS5AX10rKSspW0AlXS8uZXhlYyhhZGRyKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG1hdGNoWzFdLnJlcGxhY2UoL1suX10rL2csICcgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBfZXh0cmFjdF9uYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICcnICYmIC9cXC9nPS9pLnRlc3QoYWRkcikpIHtcbiAgICAgICAgICAgICAgICAvLyBYNDAwIHN0eWxlIGFkZHJlc3NcbiAgICAgICAgICAgICAgICB2YXIgX21hdGNoID0gL1xcL2c9KFteL10qKS9pLmV4ZWMoYWRkcik7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBfbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgX21hdGNoID0gL1xcL3M9KFteL10qKS9pLmV4ZWMoYWRkcik7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBfbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgbmFtZSA9IF9leHRyYWN0X25hbWUoZiArIFwiIFwiICsgbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgfV0pO1xuICAgIHJldHVybiBBZGRyZXNzO1xufSgpO1xuXG5leHBvcnRzLkFkZHJlc3MgPSBBZGRyZXNzO1xuXG4vLyBUaGlzIGlzIGJlY2F1c2UgSlMgcmVnZXhwcyBoYXZlIG5vIGVxdWl2YWxlbnQgb2Zcbi8vIHplcm8td2lkdGggbmVnYXRpdmUgbG9vay1iZWhpbmQgYXNzZXJ0aW9uIGZvcjogLyg/PCFcXFxcKVwiL1xuZnVuY3Rpb24gX3F1b3RlX25vX2VzYyhzdHIpIHtcbiAgICBpZiAoL15cIi8udGVzdChzdHIpKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgbWF0Y2ggPSB2b2lkIDA7XG4gICAgd2hpbGUgKG1hdGNoID0gL15bXFxzXFxTXSo/KFtcXHNcXFNdKVwiLy5leGVjKHN0cikpIHtcbiAgICAgICAgaWYgKG1hdGNoWzFdICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnRzLmlzQWxsTG93ZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZyA9PT0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5leHBvcnRzLmlzQWxsVXBwZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZyA9PT0gc3RyaW5nLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5leHBvcnRzLm5hbWVDYXNlID0gZnVuY3Rpb24gKHN0cmluZykge1xuXG4gICAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcYihcXHcrKS9nLCBmdW5jdGlvbiAoXywgZDEpIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjYXNlIG9mIHRoZSBuYW1lIHRvIGZpcnN0IGNoYXIgdXBwZXIgcmVzdCBsb3dlclxuICAgICAgICByZXR1cm4gZDEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBkMS5zbGljZSgxKTtcbiAgICB9KS5yZXBsYWNlKC9cXGJNYyhcXHcpL2dpLCBmdW5jdGlvbiAoXywgZDEpIHtcbiAgICAgICAgLy8gU2NvdHRpc2ggbmFtZXMgc3VjaCBhcyAnTWNMZW9kJ1xuICAgICAgICByZXR1cm4gJ01jJyArIGQxLnRvVXBwZXJDYXNlKCk7XG4gICAgfSkucmVwbGFjZSgvXFxibycoXFx3KS9naSwgZnVuY3Rpb24gKF8sIGQxKSB7XG4gICAgICAgIC8vIElyaXNoIG5hbWVzIHN1Y2ggYXMgJ08nTWFsbGV5LCBPJ1JlaWxseSdcbiAgICAgICAgcmV0dXJuICdPXFwnJyArIGQxLnRvVXBwZXJDYXNlKCk7XG4gICAgfSkucmVwbGFjZSgvXFxiKHgqKGl4KT92Kihpdik/aSopXFxiL2lnLCBmdW5jdGlvbiAoXywgZDEpIHtcbiAgICAgICAgLy8gUm9tYW4gbnVtZXJhbHMsIGVnICdMZXZlbCBJSUkgU3VwcG9ydCdcbiAgICAgICAgcmV0dXJuIGQxLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG59O1xuXG4vLyBnaXZlbiBhIGNvbW1lbnQsIGF0dGVtcHQgdG8gZXh0cmFjdCBhIHBlcnNvbidzIG5hbWVcbmZ1bmN0aW9uIF9leHRyYWN0X25hbWUobmFtZSkge1xuICAgIC8vIFVzaW5nIGVuY29kaW5ncywgdG9vIGhhcmQuIFNlZSBNYWlsOjpNZXNzYWdlOjpGaWVsZDo6RnVsbC5cbiAgICBpZiAoLz0/Lio/XFw/PS8udGVzdChuYW1lKSkgcmV0dXJuICcnO1xuXG4gICAgLy8gdHJpbSB3aGl0ZXNwYWNlXG4gICAgbmFtZSA9IG5hbWUudHJpbSgpO1xuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1xccysvLCAnICcpO1xuXG4gICAgLy8gRGlzcmVnYXJkIG51bWVyaWMgbmFtZXMgKGUuZy4gMTIzNDU2LjEyMzRAY29tcHVzZXJ2ZS5jb20pXG4gICAgaWYgKC9eW1xcZCBdKyQvLnRlc3QobmFtZSkpIHJldHVybiAnJztcblxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL15cXCgoLiopXFwpJC8sICckMScpIC8vIHJlbW92ZSBvdXRlcm1vc3QgcGFyZW50aGVzaXNcbiAgICAucmVwbGFjZSgvXlwiKC4qKVwiJC8sICckMScpIC8vIHJlbW92ZSBvdXRlciBxdW90YXRpb24gbWFya3NcbiAgICAucmVwbGFjZSgvXFwoLio/XFwpL2csICcnKSAvLyByZW1vdmUgbWluaW1hbCBlbWJlZGRlZCBjb21tZW50c1xuICAgIC5yZXBsYWNlKC9cXFxcL2csICcnKSAvLyByZW1vdmUgYWxsIGVzY2FwZXNcbiAgICAucmVwbGFjZSgvXlwiKC4qKVwiJC8sICckMScpIC8vIHJlbW92ZSBpbnRlcm5hbCBxdW90YXRpb24gbWFya3NcbiAgICAucmVwbGFjZSgvXihbXlxcc10rKSA/LCA/KC4qKSQvLCAnJDIgJDEnKSAvLyByZXZlcnNlIFwiTGFzdCwgRmlyc3QgTS5cIiBpZiBhcHBsaWNhYmxlXG4gICAgLnJlcGxhY2UoLywuKi8sICcnKTtcblxuICAgIC8vIENoYW5nZSBjYXNpbmcgb25seSB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIG9ubHkgdXBwZXIgb3Igb25seVxuICAgIC8vIGxvd2VyIGNhc2VkIGNoYXJhY3RlcnMuXG4gICAgaWYgKGV4cG9ydHMuaXNBbGxVcHBlcihuYW1lKSB8fCBleHBvcnRzLmlzQWxsTG93ZXIobmFtZSkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJDaGFuZ2luZyBjYXNlIG9mOiBcIiArIG5hbWUpO1xuICAgICAgICBuYW1lID0gZXhwb3J0cy5uYW1lQ2FzZShuYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJOb3c6IFwiICsgbmFtZSk7XG4gICAgfVxuXG4gICAgLy8gc29tZSBjbGVhbnVwXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXFxbW15cXF1dKlxcXS9nLCAnJykucmVwbGFjZSgvKF5bXFxzJ1wiXSt8W1xccydcIl0rJCkvZywgJycpLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKTtcblxuICAgIHJldHVybiBuYW1lO1xufVxuXG59LHtcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiOjM2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCI6MzcsXCJlbWFpbC1hZGRyZXNzZXNcIjoyODN9XSwyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyoqXG4gKiBAZmlsZSB7QGxpbmsgaHR0cDovL2FzbWpzLm9yZyBBc20uanN9IGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWR2YW5jZWRfRW5jcnlwdGlvbl9TdGFuZGFyZCBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkfS5cbiAqIEBhdXRob3IgQXJ0ZW0gUyBWeWJvcm5vdiA8dnlib3Jub3ZAZ21haWwuY29tPlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbnZhciBBRVNfYXNtID0gZXhwb3J0cy5BRVNfYXNtID0gZnVuY3Rpb24gKCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICAvKipcbiAgICogR2Fsb2lzIEZpZWxkIHN0dWZmIGluaXQgZmxhZ1xuICAgKi9cblxuICB2YXIgZ2luaXRfZG9uZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBHYWxvaXMgRmllbGQgZXhwb25lbnRpYXRpb24gYW5kIGxvZ2FyaXRobSB0YWJsZXMgZm9yIDMgKHRoZSBnZW5lcmF0b3IpXG4gICAqL1xuICB2YXIgZ2V4cDMsIGdsb2czO1xuXG4gIC8qKlxuICAgKiBJbml0IEdhbG9pcyBGaWVsZCB0YWJsZXNcbiAgICovXG4gIGZ1bmN0aW9uIGdpbml0KCkge1xuICAgIGdleHAzID0gW10sIGdsb2czID0gW107XG5cbiAgICB2YXIgYSA9IDEsXG4gICAgICAgIGMsXG4gICAgICAgIGQ7XG4gICAgZm9yIChjID0gMDsgYyA8IDI1NTsgYysrKSB7XG4gICAgICBnZXhwM1tjXSA9IGE7XG5cbiAgICAgIC8vIE11bHRpcGx5IGJ5IHRocmVlXG4gICAgICBkID0gYSAmIDB4ODAsIGEgPDw9IDEsIGEgJj0gMjU1O1xuICAgICAgaWYgKGQgPT09IDB4ODApIGEgXj0gMHgxYjtcbiAgICAgIGEgXj0gZ2V4cDNbY107XG5cbiAgICAgIC8vIFNldCB0aGUgbG9nIHRhYmxlIHZhbHVlXG4gICAgICBnbG9nM1tnZXhwM1tjXV0gPSBjO1xuICAgIH1cbiAgICBnZXhwM1syNTVdID0gZ2V4cDNbMF07XG4gICAgZ2xvZzNbMF0gPSAwO1xuXG4gICAgZ2luaXRfZG9uZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2Fsb2lzIEZpZWxkIG11bHRpcGxpY2F0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGdtdWwoYSwgYikge1xuICAgIHZhciBjID0gZ2V4cDNbKGdsb2czW2FdICsgZ2xvZzNbYl0pICUgMjU1XTtcbiAgICBpZiAoYSA9PT0gMCB8fCBiID09PSAwKSBjID0gMDtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHYWxvaXMgRmllbGQgcmVjaXByb2NhbFxuICAgKiBAcGFyYW0ge251bWJlcn0gYVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBnaW52KGEpIHtcbiAgICB2YXIgaSA9IGdleHAzWzI1NSAtIGdsb2czW2FdXTtcbiAgICBpZiAoYSA9PT0gMCkgaSA9IDA7XG4gICAgcmV0dXJuIGk7XG4gIH1cblxuICAvKipcbiAgICogQUVTIHN0dWZmIGluaXQgZmxhZ1xuICAgKi9cbiAgdmFyIGFlc19pbml0X2RvbmUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW5jcnlwdGlvbiwgRGVjcnlwdGlvbiwgUy1Cb3ggYW5kIEtleVRyYW5zZm9ybSB0YWJsZXNcbiAgICpcbiAgICogQHR5cGUge251bWJlcltdfVxuICAgKi9cbiAgdmFyIGFlc19zYm94O1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyW119XG4gICAqL1xuICB2YXIgYWVzX3NpbnY7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtudW1iZXJbXVtdfVxuICAgKi9cbiAgdmFyIGFlc19lbmM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtudW1iZXJbXVtdfVxuICAgKi9cbiAgdmFyIGFlc19kZWM7XG5cbiAgLyoqXG4gICAqIEluaXQgQUVTIHRhYmxlc1xuICAgKi9cbiAgZnVuY3Rpb24gYWVzX2luaXQoKSB7XG4gICAgaWYgKCFnaW5pdF9kb25lKSBnaW5pdCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlcyBBRVMgUy1Cb3ggdmFsdWVcbiAgICBmdW5jdGlvbiBfcyhhKSB7XG4gICAgICB2YXIgYywgcywgeDtcbiAgICAgIHMgPSB4ID0gZ2ludihhKTtcbiAgICAgIGZvciAoYyA9IDA7IGMgPCA0OyBjKyspIHtcbiAgICAgICAgcyA9IChzIDw8IDEgfCBzID4+PiA3KSAmIDI1NTtcbiAgICAgICAgeCBePSBzO1xuICAgICAgfVxuICAgICAgeCBePSA5OTtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIFRhYmxlc1xuICAgIGFlc19zYm94ID0gW10sIGFlc19zaW52ID0gW10sIGFlc19lbmMgPSBbW10sIFtdLCBbXSwgW11dLCBhZXNfZGVjID0gW1tdLCBbXSwgW10sIFtdXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIHZhciBzID0gX3MoaSk7XG5cbiAgICAgIC8vIFMtQm94IGFuZCBpdHMgaW52ZXJzZVxuICAgICAgYWVzX3Nib3hbaV0gPSBzO1xuICAgICAgYWVzX3NpbnZbc10gPSBpO1xuXG4gICAgICAvLyBFY3J5cHRpb24gYW5kIERlY3J5cHRpb24gdGFibGVzXG4gICAgICBhZXNfZW5jWzBdW2ldID0gZ211bCgyLCBzKSA8PCAyNCB8IHMgPDwgMTYgfCBzIDw8IDggfCBnbXVsKDMsIHMpO1xuICAgICAgYWVzX2RlY1swXVtzXSA9IGdtdWwoMTQsIGkpIDw8IDI0IHwgZ211bCg5LCBpKSA8PCAxNiB8IGdtdWwoMTMsIGkpIDw8IDggfCBnbXVsKDExLCBpKTtcbiAgICAgIC8vIFJvdGF0ZSB0YWJsZXNcbiAgICAgIGZvciAodmFyIHQgPSAxOyB0IDwgNDsgdCsrKSB7XG4gICAgICAgIGFlc19lbmNbdF1baV0gPSBhZXNfZW5jW3QgLSAxXVtpXSA+Pj4gOCB8IGFlc19lbmNbdCAtIDFdW2ldIDw8IDI0O1xuICAgICAgICBhZXNfZGVjW3RdW3NdID0gYWVzX2RlY1t0IC0gMV1bc10gPj4+IDggfCBhZXNfZGVjW3QgLSAxXVtzXSA8PCAyNDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNtLmpzIG1vZHVsZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogPHA+XG4gICAqIEhlYXAgYnVmZmVyIGxheW91dCBieSBvZmZzZXQ6XG4gICAqIDxwcmU+XG4gICAqIDB4MDAwMCAgIGVuY3J5cHRpb24ga2V5IHNjaGVkdWxlXG4gICAqIDB4MDQwMCAgIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlXG4gICAqIDB4MDgwMCAgIHNib3hcbiAgICogMHgwYzAwICAgaW52IHNib3hcbiAgICogMHgxMDAwICAgZW5jcnlwdGlvbiB0YWJsZXNcbiAgICogMHgyMDAwICAgZGVjcnlwdGlvbiB0YWJsZXNcbiAgICogMHgzMDAwICAgcmVzZXJ2ZWQgKGZ1dHVyZSBHQ00gbXVsdGlwbGljYXRpb24gbG9va3VwIHRhYmxlKVxuICAgKiAweDQwMDAgICBkYXRhXG4gICAqIDwvcHJlPlxuICAgKiBEb24ndCB0b3VjaCBhbnl0aGluZyBiZWZvcmUgPGNvZGU+MHg0MDA8L2NvZGU+LlxuICAgKiA8L3A+XG4gICAqXG4gICAqIEBhbGlhcyBBRVNfYXNtXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge09iamVjdH0gZm9yZWlnbiAtIDxpPmlnbm9yZWQ8L2k+XG4gICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlciAtIGhlYXAgYnVmZmVyIHRvIGxpbmsgd2l0aFxuICAgKi9cbiAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbiB3cmFwcGVyKGZvcmVpZ24sIGJ1ZmZlcikge1xuICAgIC8vIEluaXQgQUVTIHN0dWZmIGZvciB0aGUgZmlyc3QgdGltZVxuICAgIGlmICghYWVzX2luaXRfZG9uZSkgYWVzX2luaXQoKTtcblxuICAgIC8vIEZpbGwgdXAgQUVTIHRhYmxlc1xuICAgIHZhciBoZWFwID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgaGVhcC5zZXQoYWVzX3Nib3gsIDB4MDgwMCA+PiAyKTtcbiAgICBoZWFwLnNldChhZXNfc2ludiwgMHgwYzAwID4+IDIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICBoZWFwLnNldChhZXNfZW5jW2ldLCAweDEwMDAgKyAweDQwMCAqIGkgPj4gMik7XG4gICAgICBoZWFwLnNldChhZXNfZGVjW2ldLCAweDIwMDAgKyAweDQwMCAqIGkgPj4gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIEFFUyBrZXkgc2NoZWR1bGVzLlxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtzIC0ga2V5IHNpemUsIDQvNi84IChmb3IgMTI4LzE5Mi8yNTYtYml0IGtleSBjb3JyZXNwb25kaW5nbHkpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGswIC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGsxIC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGsyIC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGszIC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGs0IC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGs1IC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGs2IC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGs3IC0ga2V5IHZlY3RvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0X2tleShrcywgazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3KSB7XG4gICAgICB2YXIgZWtleXMgPSBoZWFwLnN1YmFycmF5KDB4MDAwLCA2MCksXG4gICAgICAgICAgZGtleXMgPSBoZWFwLnN1YmFycmF5KDB4MTAwLCAweDEwMCArIDYwKTtcblxuICAgICAgLy8gRW5jcnlwdGlvbiBrZXkgc2NoZWR1bGVcbiAgICAgIGVrZXlzLnNldChbazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3XSk7XG4gICAgICBmb3IgKHZhciBpID0ga3MsIHJjb24gPSAxOyBpIDwgNCAqIGtzICsgMjg7IGkrKykge1xuICAgICAgICB2YXIgayA9IGVrZXlzW2kgLSAxXTtcbiAgICAgICAgaWYgKGkgJSBrcyA9PT0gMCB8fCBrcyA9PT0gOCAmJiBpICUga3MgPT09IDQpIHtcbiAgICAgICAgICBrID0gYWVzX3Nib3hbayA+Pj4gMjRdIDw8IDI0IF4gYWVzX3Nib3hbayA+Pj4gMTYgJiAyNTVdIDw8IDE2IF4gYWVzX3Nib3hbayA+Pj4gOCAmIDI1NV0gPDwgOCBeIGFlc19zYm94W2sgJiAyNTVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICUga3MgPT09IDApIHtcbiAgICAgICAgICBrID0gayA8PCA4IF4gayA+Pj4gMjQgXiByY29uIDw8IDI0O1xuICAgICAgICAgIHJjb24gPSByY29uIDw8IDEgXiAocmNvbiAmIDB4ODAgPyAweDFiIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWtleXNbaV0gPSBla2V5c1tpIC0ga3NdIF4gaztcbiAgICAgIH1cblxuICAgICAgLy8gRGVjcnlwdGlvbiBrZXkgc2NoZWR1bGVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaTsgaiArPSA0KSB7XG4gICAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCA0OyBqaisrKSB7XG4gICAgICAgICAgdmFyIGsgPSBla2V5c1tpIC0gKDQgKyBqKSArICg0IC0gamopICUgNF07XG4gICAgICAgICAgaWYgKGogPCA0IHx8IGogPj0gaSAtIDQpIHtcbiAgICAgICAgICAgIGRrZXlzW2ogKyBqal0gPSBrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBka2V5c1tqICsgampdID0gYWVzX2RlY1swXVthZXNfc2JveFtrID4+PiAyNF1dIF4gYWVzX2RlY1sxXVthZXNfc2JveFtrID4+PiAxNiAmIDI1NV1dIF4gYWVzX2RlY1syXVthZXNfc2JveFtrID4+PiA4ICYgMjU1XV0gXiBhZXNfZGVjWzNdW2Flc19zYm94W2sgJiAyNTVdXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHJvdW5kcyBudW1iZXJcbiAgICAgIGFzbS5zZXRfcm91bmRzKGtzICsgNSk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGxpYnJhcnkgb2JqZWN0IHdpdGggbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAgICB2YXIgc3RkbGliID0geyBVaW50OEFycmF5OiBVaW50OEFycmF5LCBVaW50MzJBcnJheTogVWludDMyQXJyYXkgfTtcblxuICAgIHZhciBhc20gPSBmdW5jdGlvbiAoc3RkbGliLCBmb3JlaWduLCBidWZmZXIpIHtcbiAgICAgIFwidXNlIGFzbVwiO1xuXG4gICAgICB2YXIgUzAgPSAwLFxuICAgICAgICAgIFMxID0gMCxcbiAgICAgICAgICBTMiA9IDAsXG4gICAgICAgICAgUzMgPSAwLFxuICAgICAgICAgIEkwID0gMCxcbiAgICAgICAgICBJMSA9IDAsXG4gICAgICAgICAgSTIgPSAwLFxuICAgICAgICAgIEkzID0gMCxcbiAgICAgICAgICBOMCA9IDAsXG4gICAgICAgICAgTjEgPSAwLFxuICAgICAgICAgIE4yID0gMCxcbiAgICAgICAgICBOMyA9IDAsXG4gICAgICAgICAgTTAgPSAwLFxuICAgICAgICAgIE0xID0gMCxcbiAgICAgICAgICBNMiA9IDAsXG4gICAgICAgICAgTTMgPSAwLFxuICAgICAgICAgIEgwID0gMCxcbiAgICAgICAgICBIMSA9IDAsXG4gICAgICAgICAgSDIgPSAwLFxuICAgICAgICAgIEgzID0gMCxcbiAgICAgICAgICBSID0gMDtcblxuICAgICAgdmFyIEhFQVAgPSBuZXcgc3RkbGliLlVpbnQzMkFycmF5KGJ1ZmZlciksXG4gICAgICAgICAgREFUQSA9IG5ldyBzdGRsaWIuVWludDhBcnJheShidWZmZXIpO1xuXG4gICAgICAvKipcbiAgICAgICAqIEFFUyBjb3JlXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gayAtIHByZWNvbXB1dGVkIGtleSBzY2hlZHVsZSBvZmZzZXRcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzIC0gcHJlY29tcHV0ZWQgc2JveCB0YWJsZSBvZmZzZXRcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gcHJlY29tcHV0ZWQgcm91bmQgdGFibGUgb2Zmc2V0XG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIG51bWJlciBvZiBpbm5lciByb3VuZHMgdG8gcGVyZm9ybVxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgwIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgzIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gX2NvcmUoaywgcywgdCwgciwgeDAsIHgxLCB4MiwgeDMpIHtcbiAgICAgICAgayA9IGsgfCAwO1xuICAgICAgICBzID0gcyB8IDA7XG4gICAgICAgIHQgPSB0IHwgMDtcbiAgICAgICAgciA9IHIgfCAwO1xuICAgICAgICB4MCA9IHgwIHwgMDtcbiAgICAgICAgeDEgPSB4MSB8IDA7XG4gICAgICAgIHgyID0geDIgfCAwO1xuICAgICAgICB4MyA9IHgzIHwgMDtcblxuICAgICAgICB2YXIgdDEgPSAwLFxuICAgICAgICAgICAgdDIgPSAwLFxuICAgICAgICAgICAgdDMgPSAwLFxuICAgICAgICAgICAgeTAgPSAwLFxuICAgICAgICAgICAgeTEgPSAwLFxuICAgICAgICAgICAgeTIgPSAwLFxuICAgICAgICAgICAgeTMgPSAwLFxuICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgdDEgPSB0IHwgMHg0MDAsIHQyID0gdCB8IDB4ODAwLCB0MyA9IHQgfCAweGMwMDtcblxuICAgICAgICAvLyByb3VuZCAwXG4gICAgICAgIHgwID0geDAgXiBIRUFQWyhrIHwgMCkgPj4gMl0sIHgxID0geDEgXiBIRUFQWyhrIHwgNCkgPj4gMl0sIHgyID0geDIgXiBIRUFQWyhrIHwgOCkgPj4gMl0sIHgzID0geDMgXiBIRUFQWyhrIHwgMTIpID4+IDJdO1xuXG4gICAgICAgIC8vIHJvdW5kIDEuLnJcbiAgICAgICAgZm9yIChpID0gMTY7IChpIHwgMCkgPD0gciA8PCA0OyBpID0gaSArIDE2IHwgMCkge1xuICAgICAgICAgIHkwID0gSEVBUFsodCB8IHgwID4+IDIyICYgMTAyMCkgPj4gMl0gXiBIRUFQWyh0MSB8IHgxID4+IDE0ICYgMTAyMCkgPj4gMl0gXiBIRUFQWyh0MiB8IHgyID4+IDYgJiAxMDIwKSA+PiAyXSBeIEhFQVBbKHQzIHwgeDMgPDwgMiAmIDEwMjApID4+IDJdIF4gSEVBUFsoayB8IGkgfCAwKSA+PiAyXSwgeTEgPSBIRUFQWyh0IHwgeDEgPj4gMjIgJiAxMDIwKSA+PiAyXSBeIEhFQVBbKHQxIHwgeDIgPj4gMTQgJiAxMDIwKSA+PiAyXSBeIEhFQVBbKHQyIHwgeDMgPj4gNiAmIDEwMjApID4+IDJdIF4gSEVBUFsodDMgfCB4MCA8PCAyICYgMTAyMCkgPj4gMl0gXiBIRUFQWyhrIHwgaSB8IDQpID4+IDJdLCB5MiA9IEhFQVBbKHQgfCB4MiA+PiAyMiAmIDEwMjApID4+IDJdIF4gSEVBUFsodDEgfCB4MyA+PiAxNCAmIDEwMjApID4+IDJdIF4gSEVBUFsodDIgfCB4MCA+PiA2ICYgMTAyMCkgPj4gMl0gXiBIRUFQWyh0MyB8IHgxIDw8IDIgJiAxMDIwKSA+PiAyXSBeIEhFQVBbKGsgfCBpIHwgOCkgPj4gMl0sIHkzID0gSEVBUFsodCB8IHgzID4+IDIyICYgMTAyMCkgPj4gMl0gXiBIRUFQWyh0MSB8IHgwID4+IDE0ICYgMTAyMCkgPj4gMl0gXiBIRUFQWyh0MiB8IHgxID4+IDYgJiAxMDIwKSA+PiAyXSBeIEhFQVBbKHQzIHwgeDIgPDwgMiAmIDEwMjApID4+IDJdIF4gSEVBUFsoayB8IGkgfCAxMikgPj4gMl07XG4gICAgICAgICAgeDAgPSB5MCwgeDEgPSB5MSwgeDIgPSB5MiwgeDMgPSB5MztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmFsIHJvdW5kXG4gICAgICAgIFMwID0gSEVBUFsocyB8IHgwID4+IDIyICYgMTAyMCkgPj4gMl0gPDwgMjQgXiBIRUFQWyhzIHwgeDEgPj4gMTQgJiAxMDIwKSA+PiAyXSA8PCAxNiBeIEhFQVBbKHMgfCB4MiA+PiA2ICYgMTAyMCkgPj4gMl0gPDwgOCBeIEhFQVBbKHMgfCB4MyA8PCAyICYgMTAyMCkgPj4gMl0gXiBIRUFQWyhrIHwgaSB8IDApID4+IDJdLCBTMSA9IEhFQVBbKHMgfCB4MSA+PiAyMiAmIDEwMjApID4+IDJdIDw8IDI0IF4gSEVBUFsocyB8IHgyID4+IDE0ICYgMTAyMCkgPj4gMl0gPDwgMTYgXiBIRUFQWyhzIHwgeDMgPj4gNiAmIDEwMjApID4+IDJdIDw8IDggXiBIRUFQWyhzIHwgeDAgPDwgMiAmIDEwMjApID4+IDJdIF4gSEVBUFsoayB8IGkgfCA0KSA+PiAyXSwgUzIgPSBIRUFQWyhzIHwgeDIgPj4gMjIgJiAxMDIwKSA+PiAyXSA8PCAyNCBeIEhFQVBbKHMgfCB4MyA+PiAxNCAmIDEwMjApID4+IDJdIDw8IDE2IF4gSEVBUFsocyB8IHgwID4+IDYgJiAxMDIwKSA+PiAyXSA8PCA4IF4gSEVBUFsocyB8IHgxIDw8IDIgJiAxMDIwKSA+PiAyXSBeIEhFQVBbKGsgfCBpIHwgOCkgPj4gMl0sIFMzID0gSEVBUFsocyB8IHgzID4+IDIyICYgMTAyMCkgPj4gMl0gPDwgMjQgXiBIRUFQWyhzIHwgeDAgPj4gMTQgJiAxMDIwKSA+PiAyXSA8PCAxNiBeIEhFQVBbKHMgfCB4MSA+PiA2ICYgMTAyMCkgPj4gMl0gPDwgOCBeIEhFQVBbKHMgfCB4MiA8PCAyICYgMTAyMCkgPj4gMl0gXiBIRUFQWyhrIHwgaSB8IDEyKSA+PiAyXTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBFQ0IgbW9kZSBlbmNyeXB0aW9uXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDMgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBfZWNiX2VuYyh4MCwgeDEsIHgyLCB4Mykge1xuICAgICAgICB4MCA9IHgwIHwgMDtcbiAgICAgICAgeDEgPSB4MSB8IDA7XG4gICAgICAgIHgyID0geDIgfCAwO1xuICAgICAgICB4MyA9IHgzIHwgMDtcblxuICAgICAgICBfY29yZSgweDAwMDAsIDB4MDgwMCwgMHgxMDAwLCBSLCB4MCwgeDEsIHgyLCB4Myk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogRUNCIG1vZGUgZGVjcnlwdGlvblxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgwIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgzIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gX2VjYl9kZWMoeDAsIHgxLCB4MiwgeDMpIHtcbiAgICAgICAgeDAgPSB4MCB8IDA7XG4gICAgICAgIHgxID0geDEgfCAwO1xuICAgICAgICB4MiA9IHgyIHwgMDtcbiAgICAgICAgeDMgPSB4MyB8IDA7XG5cbiAgICAgICAgdmFyIHQgPSAwO1xuXG4gICAgICAgIF9jb3JlKDB4MDQwMCwgMHgwYzAwLCAweDIwMDAsIFIsIHgwLCB4MywgeDIsIHgxKTtcblxuICAgICAgICB0ID0gUzEsIFMxID0gUzMsIFMzID0gdDtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBDQkMgbW9kZSBlbmNyeXB0aW9uXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDMgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBfY2JjX2VuYyh4MCwgeDEsIHgyLCB4Mykge1xuICAgICAgICB4MCA9IHgwIHwgMDtcbiAgICAgICAgeDEgPSB4MSB8IDA7XG4gICAgICAgIHgyID0geDIgfCAwO1xuICAgICAgICB4MyA9IHgzIHwgMDtcblxuICAgICAgICBfY29yZSgweDAwMDAsIDB4MDgwMCwgMHgxMDAwLCBSLCBJMCBeIHgwLCBJMSBeIHgxLCBJMiBeIHgyLCBJMyBeIHgzKTtcblxuICAgICAgICBJMCA9IFMwLCBJMSA9IFMxLCBJMiA9IFMyLCBJMyA9IFMzO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIENCQyBtb2RlIGRlY3J5cHRpb25cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MCAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDEgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MyAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIF9jYmNfZGVjKHgwLCB4MSwgeDIsIHgzKSB7XG4gICAgICAgIHgwID0geDAgfCAwO1xuICAgICAgICB4MSA9IHgxIHwgMDtcbiAgICAgICAgeDIgPSB4MiB8IDA7XG4gICAgICAgIHgzID0geDMgfCAwO1xuXG4gICAgICAgIHZhciB0ID0gMDtcblxuICAgICAgICBfY29yZSgweDA0MDAsIDB4MGMwMCwgMHgyMDAwLCBSLCB4MCwgeDMsIHgyLCB4MSk7XG5cbiAgICAgICAgdCA9IFMxLCBTMSA9IFMzLCBTMyA9IHQ7XG5cbiAgICAgICAgUzAgPSBTMCBeIEkwLCBTMSA9IFMxIF4gSTEsIFMyID0gUzIgXiBJMiwgUzMgPSBTMyBeIEkzO1xuXG4gICAgICAgIEkwID0geDAsIEkxID0geDEsIEkyID0geDIsIEkzID0geDM7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQ0ZCIG1vZGUgZW5jcnlwdGlvblxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgwIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgzIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gX2NmYl9lbmMoeDAsIHgxLCB4MiwgeDMpIHtcbiAgICAgICAgeDAgPSB4MCB8IDA7XG4gICAgICAgIHgxID0geDEgfCAwO1xuICAgICAgICB4MiA9IHgyIHwgMDtcbiAgICAgICAgeDMgPSB4MyB8IDA7XG5cbiAgICAgICAgX2NvcmUoMHgwMDAwLCAweDA4MDAsIDB4MTAwMCwgUiwgSTAsIEkxLCBJMiwgSTMpO1xuXG4gICAgICAgIEkwID0gUzAgPSBTMCBeIHgwLCBJMSA9IFMxID0gUzEgXiB4MSwgSTIgPSBTMiA9IFMyIF4geDIsIEkzID0gUzMgPSBTMyBeIHgzO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIENGQiBtb2RlIGRlY3J5cHRpb25cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MCAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDEgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MyAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIF9jZmJfZGVjKHgwLCB4MSwgeDIsIHgzKSB7XG4gICAgICAgIHgwID0geDAgfCAwO1xuICAgICAgICB4MSA9IHgxIHwgMDtcbiAgICAgICAgeDIgPSB4MiB8IDA7XG4gICAgICAgIHgzID0geDMgfCAwO1xuXG4gICAgICAgIF9jb3JlKDB4MDAwMCwgMHgwODAwLCAweDEwMDAsIFIsIEkwLCBJMSwgSTIsIEkzKTtcblxuICAgICAgICBTMCA9IFMwIF4geDAsIFMxID0gUzEgXiB4MSwgUzIgPSBTMiBeIHgyLCBTMyA9IFMzIF4geDM7XG5cbiAgICAgICAgSTAgPSB4MCwgSTEgPSB4MSwgSTIgPSB4MiwgSTMgPSB4MztcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBPRkIgbW9kZSBlbmNyeXB0aW9uIC8gZGVjcnlwdGlvblxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgwIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgzIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gX29mYih4MCwgeDEsIHgyLCB4Mykge1xuICAgICAgICB4MCA9IHgwIHwgMDtcbiAgICAgICAgeDEgPSB4MSB8IDA7XG4gICAgICAgIHgyID0geDIgfCAwO1xuICAgICAgICB4MyA9IHgzIHwgMDtcblxuICAgICAgICBfY29yZSgweDAwMDAsIDB4MDgwMCwgMHgxMDAwLCBSLCBJMCwgSTEsIEkyLCBJMyk7XG5cbiAgICAgICAgSTAgPSBTMCwgSTEgPSBTMSwgSTIgPSBTMiwgSTMgPSBTMztcblxuICAgICAgICBTMCA9IFMwIF4geDAsIFMxID0gUzEgXiB4MSwgUzIgPSBTMiBeIHgyLCBTMyA9IFMzIF4geDM7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQ1RSIG1vZGUgZW5jcnlwdGlvbiAvIGRlY3J5cHRpb25cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MCAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDEgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MyAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIF9jdHIoeDAsIHgxLCB4MiwgeDMpIHtcbiAgICAgICAgeDAgPSB4MCB8IDA7XG4gICAgICAgIHgxID0geDEgfCAwO1xuICAgICAgICB4MiA9IHgyIHwgMDtcbiAgICAgICAgeDMgPSB4MyB8IDA7XG5cbiAgICAgICAgX2NvcmUoMHgwMDAwLCAweDA4MDAsIDB4MTAwMCwgUiwgTjAsIE4xLCBOMiwgTjMpO1xuXG4gICAgICAgIE4zID0gfk0zICYgTjMgfCBNMyAmIE4zICsgMTtcbiAgICAgICAgTjIgPSB+TTIgJiBOMiB8IE0yICYgTjIgKyAoKE4zIHwgMCkgPT0gMCk7XG4gICAgICAgIE4xID0gfk0xICYgTjEgfCBNMSAmIE4xICsgKChOMiB8IDApID09IDApO1xuICAgICAgICBOMCA9IH5NMCAmIE4wIHwgTTAgJiBOMCArICgoTjEgfCAwKSA9PSAwKTtcblxuICAgICAgICBTMCA9IFMwIF4geDA7XG4gICAgICAgIFMxID0gUzEgXiB4MTtcbiAgICAgICAgUzIgPSBTMiBeIHgyO1xuICAgICAgICBTMyA9IFMzIF4geDM7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogR0NNIG1vZGUgTUFDIGNhbGN1bGF0aW9uXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gMTI4LWJpdCBpbnB1dCBibG9jayB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MiAtIDEyOC1iaXQgaW5wdXQgYmxvY2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geDMgLSAxMjgtYml0IGlucHV0IGJsb2NrIHZlY3RvclxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBfZ2NtX21hYyh4MCwgeDEsIHgyLCB4Mykge1xuICAgICAgICB4MCA9IHgwIHwgMDtcbiAgICAgICAgeDEgPSB4MSB8IDA7XG4gICAgICAgIHgyID0geDIgfCAwO1xuICAgICAgICB4MyA9IHgzIHwgMDtcblxuICAgICAgICB2YXIgeTAgPSAwLFxuICAgICAgICAgICAgeTEgPSAwLFxuICAgICAgICAgICAgeTIgPSAwLFxuICAgICAgICAgICAgeTMgPSAwLFxuICAgICAgICAgICAgejAgPSAwLFxuICAgICAgICAgICAgejEgPSAwLFxuICAgICAgICAgICAgejIgPSAwLFxuICAgICAgICAgICAgejMgPSAwLFxuICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICBjID0gMDtcblxuICAgICAgICB4MCA9IHgwIF4gSTAsIHgxID0geDEgXiBJMSwgeDIgPSB4MiBeIEkyLCB4MyA9IHgzIF4gSTM7XG5cbiAgICAgICAgeTAgPSBIMCB8IDAsIHkxID0gSDEgfCAwLCB5MiA9IEgyIHwgMCwgeTMgPSBIMyB8IDA7XG5cbiAgICAgICAgZm9yICg7IChpIHwgMCkgPCAxMjg7IGkgPSBpICsgMSB8IDApIHtcbiAgICAgICAgICBpZiAoeTAgPj4+IDMxKSB7XG4gICAgICAgICAgICB6MCA9IHowIF4geDAsIHoxID0gejEgXiB4MSwgejIgPSB6MiBeIHgyLCB6MyA9IHozIF4geDM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeTAgPSB5MCA8PCAxIHwgeTEgPj4+IDMxLCB5MSA9IHkxIDw8IDEgfCB5MiA+Pj4gMzEsIHkyID0geTIgPDwgMSB8IHkzID4+PiAzMSwgeTMgPSB5MyA8PCAxO1xuXG4gICAgICAgICAgYyA9IHgzICYgMTtcblxuICAgICAgICAgIHgzID0geDMgPj4+IDEgfCB4MiA8PCAzMSwgeDIgPSB4MiA+Pj4gMSB8IHgxIDw8IDMxLCB4MSA9IHgxID4+PiAxIHwgeDAgPDwgMzEsIHgwID0geDAgPj4+IDE7XG5cbiAgICAgICAgICBpZiAoYykgeDAgPSB4MCBeIDB4ZTEwMDAwMDA7XG4gICAgICAgIH1cblxuICAgICAgICBJMCA9IHowLCBJMSA9IHoxLCBJMiA9IHoyLCBJMyA9IHozO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFNldCB0aGUgaW50ZXJuYWwgcm91bmRzIG51bWJlci5cbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1lbWJlcm9mIEFFU19hc21cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSByIC0gbnVtYmVyIGlmIGlubmVyIEFFUyByb3VuZHNcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gc2V0X3JvdW5kcyhyKSB7XG4gICAgICAgIHIgPSByIHwgMDtcbiAgICAgICAgUiA9IHI7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9wdWxhdGUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBtb2R1bGUuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gczAgLSBzdGF0ZSB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzMSAtIHN0YXRlIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHMyIC0gc3RhdGUgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gczMgLSBzdGF0ZSB2ZWN0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gc2V0X3N0YXRlKHMwLCBzMSwgczIsIHMzKSB7XG4gICAgICAgIHMwID0gczAgfCAwO1xuICAgICAgICBzMSA9IHMxIHwgMDtcbiAgICAgICAgczIgPSBzMiB8IDA7XG4gICAgICAgIHMzID0gczMgfCAwO1xuXG4gICAgICAgIFMwID0gczAsIFMxID0gczEsIFMyID0gczIsIFMzID0gczM7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9wdWxhdGUgdGhlIGludGVybmFsIGl2IG9mIHRoZSBtb2R1bGUuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gaTAgLSBpdiB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpMSAtIGl2IHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGkyIC0gaXYgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gaTMgLSBpdiB2ZWN0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gc2V0X2l2KGkwLCBpMSwgaTIsIGkzKSB7XG4gICAgICAgIGkwID0gaTAgfCAwO1xuICAgICAgICBpMSA9IGkxIHwgMDtcbiAgICAgICAgaTIgPSBpMiB8IDA7XG4gICAgICAgIGkzID0gaTMgfCAwO1xuXG4gICAgICAgIEkwID0gaTAsIEkxID0gaTEsIEkyID0gaTIsIEkzID0gaTM7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0IG5vbmNlIGZvciBDVFItZmFtaWx5IG1vZGVzLlxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWVtYmVyb2YgQUVTX2FzbVxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4wIC0gbm9uY2UgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbjEgLSBub25jZSB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuMiAtIG5vbmNlIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4zIC0gbm9uY2UgdmVjdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHNldF9ub25jZShuMCwgbjEsIG4yLCBuMykge1xuICAgICAgICBuMCA9IG4wIHwgMDtcbiAgICAgICAgbjEgPSBuMSB8IDA7XG4gICAgICAgIG4yID0gbjIgfCAwO1xuICAgICAgICBuMyA9IG4zIHwgMDtcblxuICAgICAgICBOMCA9IG4wLCBOMSA9IG4xLCBOMiA9IG4yLCBOMyA9IG4zO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFNldCBjb3VudGVyIG1hc2sgZm9yIENUUi1mYW1pbHkgbW9kZXMuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbTAgLSBjb3VudGVyIG1hc2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbTEgLSBjb3VudGVyIG1hc2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbTIgLSBjb3VudGVyIG1hc2sgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbTMgLSBjb3VudGVyIG1hc2sgdmVjdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHNldF9tYXNrKG0wLCBtMSwgbTIsIG0zKSB7XG4gICAgICAgIG0wID0gbTAgfCAwO1xuICAgICAgICBtMSA9IG0xIHwgMDtcbiAgICAgICAgbTIgPSBtMiB8IDA7XG4gICAgICAgIG0zID0gbTMgfCAwO1xuXG4gICAgICAgIE0wID0gbTAsIE0xID0gbTEsIE0yID0gbTIsIE0zID0gbTM7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0IGNvdW50ZXIgZm9yIENUUi1mYW1pbHkgbW9kZXMuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gYzAgLSBjb3VudGVyIHZlY3RvclxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGMxIC0gY291bnRlciB2ZWN0b3JcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjMiAtIGNvdW50ZXIgdmVjdG9yXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gYzMgLSBjb3VudGVyIHZlY3RvclxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBzZXRfY291bnRlcihjMCwgYzEsIGMyLCBjMykge1xuICAgICAgICBjMCA9IGMwIHwgMDtcbiAgICAgICAgYzEgPSBjMSB8IDA7XG4gICAgICAgIGMyID0gYzIgfCAwO1xuICAgICAgICBjMyA9IGMzIHwgMDtcblxuICAgICAgICBOMyA9IH5NMyAmIE4zIHwgTTMgJiBjMywgTjIgPSB+TTIgJiBOMiB8IE0yICYgYzIsIE4xID0gfk0xICYgTjEgfCBNMSAmIGMxLCBOMCA9IH5NMCAmIE4wIHwgTTAgJiBjMDtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBTdG9yZSB0aGUgaW50ZXJuYWwgc3RhdGUgdmVjdG9yIGludG8gdGhlIGhlYXAuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zIC0gb2Zmc2V0IHdoZXJlIHRvIHB1dCB0aGUgZGF0YVxuICAgICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGJ5dGVzIGhhdmUgYmVlbiB3cml0dGVuIGludG8gdGhlIGhlYXAsIGFsd2F5cyAxNi5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZ2V0X3N0YXRlKHBvcykge1xuICAgICAgICBwb3MgPSBwb3MgfCAwO1xuXG4gICAgICAgIGlmIChwb3MgJiAxNSkgcmV0dXJuIC0xO1xuXG4gICAgICAgIERBVEFbcG9zIHwgMF0gPSBTMCA+Pj4gMjQsIERBVEFbcG9zIHwgMV0gPSBTMCA+Pj4gMTYgJiAyNTUsIERBVEFbcG9zIHwgMl0gPSBTMCA+Pj4gOCAmIDI1NSwgREFUQVtwb3MgfCAzXSA9IFMwICYgMjU1LCBEQVRBW3BvcyB8IDRdID0gUzEgPj4+IDI0LCBEQVRBW3BvcyB8IDVdID0gUzEgPj4+IDE2ICYgMjU1LCBEQVRBW3BvcyB8IDZdID0gUzEgPj4+IDggJiAyNTUsIERBVEFbcG9zIHwgN10gPSBTMSAmIDI1NSwgREFUQVtwb3MgfCA4XSA9IFMyID4+PiAyNCwgREFUQVtwb3MgfCA5XSA9IFMyID4+PiAxNiAmIDI1NSwgREFUQVtwb3MgfCAxMF0gPSBTMiA+Pj4gOCAmIDI1NSwgREFUQVtwb3MgfCAxMV0gPSBTMiAmIDI1NSwgREFUQVtwb3MgfCAxMl0gPSBTMyA+Pj4gMjQsIERBVEFbcG9zIHwgMTNdID0gUzMgPj4+IDE2ICYgMjU1LCBEQVRBW3BvcyB8IDE0XSA9IFMzID4+PiA4ICYgMjU1LCBEQVRBW3BvcyB8IDE1XSA9IFMzICYgMjU1O1xuXG4gICAgICAgIHJldHVybiAxNjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBTdG9yZSB0aGUgaW50ZXJuYWwgaXYgdmVjdG9yIGludG8gdGhlIGhlYXAuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zIC0gb2Zmc2V0IHdoZXJlIHRvIHB1dCB0aGUgZGF0YVxuICAgICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGJ5dGVzIGhhdmUgYmVlbiB3cml0dGVuIGludG8gdGhlIGhlYXAsIGFsd2F5cyAxNi5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZ2V0X2l2KHBvcykge1xuICAgICAgICBwb3MgPSBwb3MgfCAwO1xuXG4gICAgICAgIGlmIChwb3MgJiAxNSkgcmV0dXJuIC0xO1xuXG4gICAgICAgIERBVEFbcG9zIHwgMF0gPSBJMCA+Pj4gMjQsIERBVEFbcG9zIHwgMV0gPSBJMCA+Pj4gMTYgJiAyNTUsIERBVEFbcG9zIHwgMl0gPSBJMCA+Pj4gOCAmIDI1NSwgREFUQVtwb3MgfCAzXSA9IEkwICYgMjU1LCBEQVRBW3BvcyB8IDRdID0gSTEgPj4+IDI0LCBEQVRBW3BvcyB8IDVdID0gSTEgPj4+IDE2ICYgMjU1LCBEQVRBW3BvcyB8IDZdID0gSTEgPj4+IDggJiAyNTUsIERBVEFbcG9zIHwgN10gPSBJMSAmIDI1NSwgREFUQVtwb3MgfCA4XSA9IEkyID4+PiAyNCwgREFUQVtwb3MgfCA5XSA9IEkyID4+PiAxNiAmIDI1NSwgREFUQVtwb3MgfCAxMF0gPSBJMiA+Pj4gOCAmIDI1NSwgREFUQVtwb3MgfCAxMV0gPSBJMiAmIDI1NSwgREFUQVtwb3MgfCAxMl0gPSBJMyA+Pj4gMjQsIERBVEFbcG9zIHwgMTNdID0gSTMgPj4+IDE2ICYgMjU1LCBEQVRBW3BvcyB8IDE0XSA9IEkzID4+PiA4ICYgMjU1LCBEQVRBW3BvcyB8IDE1XSA9IEkzICYgMjU1O1xuXG4gICAgICAgIHJldHVybiAxNjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBHQ00gaW5pdGlhbGl6YXRpb24uXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGdjbV9pbml0KCkge1xuICAgICAgICBfZWNiX2VuYygwLCAwLCAwLCAwKTtcbiAgICAgICAgSDAgPSBTMCwgSDEgPSBTMSwgSDIgPSBTMiwgSDMgPSBTMztcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBQZXJmb3JtIGNpcGhlcmluZyBvcGVyYXRpb24gb24gdGhlIHN1cHBsaWVkIGRhdGEuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbW9kZSAtIGJsb2NrIGNpcGhlciBtb2RlIChzZWUge0BsaW5rIEFFU19hc219IG1vZGUgY29uc3RhbnRzKVxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHBvcyAtIG9mZnNldCBvZiB0aGUgZGF0YSBiZWluZyBwcm9jZXNzZWRcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW4gLSBsZW5ndGggb2YgdGhlIGRhdGEgYmVpbmcgcHJvY2Vzc2VkXG4gICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEFjdHVhbCBhbW91bnQgb2YgZGF0YSBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBjaXBoZXIobW9kZSwgcG9zLCBsZW4pIHtcbiAgICAgICAgbW9kZSA9IG1vZGUgfCAwO1xuICAgICAgICBwb3MgPSBwb3MgfCAwO1xuICAgICAgICBsZW4gPSBsZW4gfCAwO1xuXG4gICAgICAgIHZhciByZXQgPSAwO1xuXG4gICAgICAgIGlmIChwb3MgJiAxNSkgcmV0dXJuIC0xO1xuXG4gICAgICAgIHdoaWxlICgobGVuIHwgMCkgPj0gMTYpIHtcbiAgICAgICAgICBfY2lwaGVyX21vZGVzW21vZGUgJiA3XShEQVRBW3BvcyB8IDBdIDw8IDI0IHwgREFUQVtwb3MgfCAxXSA8PCAxNiB8IERBVEFbcG9zIHwgMl0gPDwgOCB8IERBVEFbcG9zIHwgM10sIERBVEFbcG9zIHwgNF0gPDwgMjQgfCBEQVRBW3BvcyB8IDVdIDw8IDE2IHwgREFUQVtwb3MgfCA2XSA8PCA4IHwgREFUQVtwb3MgfCA3XSwgREFUQVtwb3MgfCA4XSA8PCAyNCB8IERBVEFbcG9zIHwgOV0gPDwgMTYgfCBEQVRBW3BvcyB8IDEwXSA8PCA4IHwgREFUQVtwb3MgfCAxMV0sIERBVEFbcG9zIHwgMTJdIDw8IDI0IHwgREFUQVtwb3MgfCAxM10gPDwgMTYgfCBEQVRBW3BvcyB8IDE0XSA8PCA4IHwgREFUQVtwb3MgfCAxNV0pO1xuXG4gICAgICAgICAgREFUQVtwb3MgfCAwXSA9IFMwID4+PiAyNCwgREFUQVtwb3MgfCAxXSA9IFMwID4+PiAxNiAmIDI1NSwgREFUQVtwb3MgfCAyXSA9IFMwID4+PiA4ICYgMjU1LCBEQVRBW3BvcyB8IDNdID0gUzAgJiAyNTUsIERBVEFbcG9zIHwgNF0gPSBTMSA+Pj4gMjQsIERBVEFbcG9zIHwgNV0gPSBTMSA+Pj4gMTYgJiAyNTUsIERBVEFbcG9zIHwgNl0gPSBTMSA+Pj4gOCAmIDI1NSwgREFUQVtwb3MgfCA3XSA9IFMxICYgMjU1LCBEQVRBW3BvcyB8IDhdID0gUzIgPj4+IDI0LCBEQVRBW3BvcyB8IDldID0gUzIgPj4+IDE2ICYgMjU1LCBEQVRBW3BvcyB8IDEwXSA9IFMyID4+PiA4ICYgMjU1LCBEQVRBW3BvcyB8IDExXSA9IFMyICYgMjU1LCBEQVRBW3BvcyB8IDEyXSA9IFMzID4+PiAyNCwgREFUQVtwb3MgfCAxM10gPSBTMyA+Pj4gMTYgJiAyNTUsIERBVEFbcG9zIHwgMTRdID0gUzMgPj4+IDggJiAyNTUsIERBVEFbcG9zIHwgMTVdID0gUzMgJiAyNTU7XG5cbiAgICAgICAgICByZXQgPSByZXQgKyAxNiB8IDAsIHBvcyA9IHBvcyArIDE2IHwgMCwgbGVuID0gbGVuIC0gMTYgfCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldCB8IDA7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQ2FsY3VsYXRlcyBNQUMgb2YgdGhlIHN1cHBsaWVkIGRhdGEuXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZW1iZXJvZiBBRVNfYXNtXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbW9kZSAtIGJsb2NrIGNpcGhlciBtb2RlIChzZWUge0BsaW5rIEFFU19hc219IG1vZGUgY29uc3RhbnRzKVxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHBvcyAtIG9mZnNldCBvZiB0aGUgZGF0YSBiZWluZyBwcm9jZXNzZWRcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW4gLSBsZW5ndGggb2YgdGhlIGRhdGEgYmVpbmcgcHJvY2Vzc2VkXG4gICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEFjdHVhbCBhbW91bnQgb2YgZGF0YSBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBtYWMobW9kZSwgcG9zLCBsZW4pIHtcbiAgICAgICAgbW9kZSA9IG1vZGUgfCAwO1xuICAgICAgICBwb3MgPSBwb3MgfCAwO1xuICAgICAgICBsZW4gPSBsZW4gfCAwO1xuXG4gICAgICAgIHZhciByZXQgPSAwO1xuXG4gICAgICAgIGlmIChwb3MgJiAxNSkgcmV0dXJuIC0xO1xuXG4gICAgICAgIHdoaWxlICgobGVuIHwgMCkgPj0gMTYpIHtcbiAgICAgICAgICBfbWFjX21vZGVzW21vZGUgJiAxXShEQVRBW3BvcyB8IDBdIDw8IDI0IHwgREFUQVtwb3MgfCAxXSA8PCAxNiB8IERBVEFbcG9zIHwgMl0gPDwgOCB8IERBVEFbcG9zIHwgM10sIERBVEFbcG9zIHwgNF0gPDwgMjQgfCBEQVRBW3BvcyB8IDVdIDw8IDE2IHwgREFUQVtwb3MgfCA2XSA8PCA4IHwgREFUQVtwb3MgfCA3XSwgREFUQVtwb3MgfCA4XSA8PCAyNCB8IERBVEFbcG9zIHwgOV0gPDwgMTYgfCBEQVRBW3BvcyB8IDEwXSA8PCA4IHwgREFUQVtwb3MgfCAxMV0sIERBVEFbcG9zIHwgMTJdIDw8IDI0IHwgREFUQVtwb3MgfCAxM10gPDwgMTYgfCBEQVRBW3BvcyB8IDE0XSA8PCA4IHwgREFUQVtwb3MgfCAxNV0pO1xuXG4gICAgICAgICAgcmV0ID0gcmV0ICsgMTYgfCAwLCBwb3MgPSBwb3MgKyAxNiB8IDAsIGxlbiA9IGxlbiAtIDE2IHwgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQgfCAwO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEFFUyBjaXBoZXIgbW9kZXMgdGFibGUgKHZpcnVhbCBtZXRob2RzKVxuICAgICAgICovXG4gICAgICB2YXIgX2NpcGhlcl9tb2RlcyA9IFtfZWNiX2VuYywgX2VjYl9kZWMsIF9jYmNfZW5jLCBfY2JjX2RlYywgX2NmYl9lbmMsIF9jZmJfZGVjLCBfb2ZiLCBfY3RyXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBBRVMgTUFDIG1vZGVzIHRhYmxlICh2aXJ1YWwgbWV0aG9kcylcbiAgICAgICAqL1xuICAgICAgdmFyIF9tYWNfbW9kZXMgPSBbX2NiY19lbmMsIF9nY21fbWFjXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBBc20uanMgbW9kdWxlIGV4cG9ydHNcbiAgICAgICAqL1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0X3JvdW5kczogc2V0X3JvdW5kcyxcbiAgICAgICAgc2V0X3N0YXRlOiBzZXRfc3RhdGUsXG4gICAgICAgIHNldF9pdjogc2V0X2l2LFxuICAgICAgICBzZXRfbm9uY2U6IHNldF9ub25jZSxcbiAgICAgICAgc2V0X21hc2s6IHNldF9tYXNrLFxuICAgICAgICBzZXRfY291bnRlcjogc2V0X2NvdW50ZXIsXG4gICAgICAgIGdldF9zdGF0ZTogZ2V0X3N0YXRlLFxuICAgICAgICBnZXRfaXY6IGdldF9pdixcbiAgICAgICAgZ2NtX2luaXQ6IGdjbV9pbml0LFxuICAgICAgICBjaXBoZXI6IGNpcGhlcixcbiAgICAgICAgbWFjOiBtYWNcbiAgICAgIH07XG4gICAgfShzdGRsaWIsIGZvcmVpZ24sIGJ1ZmZlcik7XG5cbiAgICBhc20uc2V0X2tleSA9IHNldF9rZXk7XG5cbiAgICByZXR1cm4gYXNtO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBRVMgZW5jaXBoZXJpbmcgbW9kZSBjb25zdGFudHNcbiAgICogQGVudW0ge251bWJlcn1cbiAgICogQGNvbnN0XG4gICAqL1xuICB3cmFwcGVyLkVOQyA9IHtcbiAgICBFQ0I6IDAsXG4gICAgQ0JDOiAyLFxuICAgIENGQjogNCxcbiAgICBPRkI6IDYsXG4gICAgQ1RSOiA3XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFFUyBkZWNpcGhlcmluZyBtb2RlIGNvbnN0YW50c1xuICAgKiBAZW51bSB7bnVtYmVyfVxuICAgKiBAY29uc3RcbiAgICovXG4gIHdyYXBwZXIuREVDID0ge1xuICAgIEVDQjogMSxcbiAgICBDQkM6IDMsXG4gICAgQ0ZCOiA1LFxuICAgIE9GQjogNixcbiAgICBDVFI6IDdcbiAgfSxcblxuICAvKipcbiAgICogQUVTIE1BQyBtb2RlIGNvbnN0YW50c1xuICAgKiBAZW51bSB7bnVtYmVyfVxuICAgKiBAY29uc3RcbiAgICovXG4gIHdyYXBwZXIuTUFDID0ge1xuICAgIENCQzogMCxcbiAgICBHQ006IDFcbiAgfTtcblxuICAvKipcbiAgICogSGVhcCBkYXRhIG9mZnNldFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAY29uc3RcbiAgICovXG4gIHdyYXBwZXIuSEVBUF9EQVRBID0gMHg0MDAwO1xuXG4gIHJldHVybiB3cmFwcGVyO1xufSgpO1xuXG59LHt9XSwzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTID0gdW5kZWZpbmVkO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9hZXMgPSBfZGVyZXFfKCcuL2Flcy5hc20nKTtcblxudmFyIF91dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzJyk7XG5cbnZhciBfZXJyb3JzID0gX2RlcmVxXygnLi4vZXJyb3JzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBBRVMgPSBleHBvcnRzLkFFUyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQUVTKGtleSwgaXYsIHBhZGRpbmcsIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFUyk7XG5cbiAgICB0aGlzLm5vbmNlID0gbnVsbDtcbiAgICB0aGlzLmNvdW50ZXIgPSAwO1xuICAgIHRoaXMuY291bnRlclNpemUgPSAwO1xuXG4gICAgdGhpcy5oZWFwID0gKDAsIF91dGlscy5faGVhcF9pbml0KShVaW50OEFycmF5LCBoZWFwKS5zdWJhcnJheShfYWVzLkFFU19hc20uSEVBUF9EQVRBKTtcbiAgICB0aGlzLmFzbSA9IGFzbSB8fCAoMCwgX2Flcy5BRVNfYXNtKShudWxsLCB0aGlzLmhlYXAuYnVmZmVyKTtcbiAgICB0aGlzLm1vZGUgPSBudWxsO1xuICAgIHRoaXMua2V5ID0gbnVsbDtcblxuICAgIHRoaXMuQUVTX3Jlc2V0KGtleSwgaXYsIHBhZGRpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTLCBbe1xuICAgIGtleTogJ0FFU19zZXRfa2V5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gQUVTX3NldF9rZXkoa2V5KSB7XG4gICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCEoMCwgX3V0aWxzLmlzX2J5dGVzKShrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5leHBlY3RlZCBrZXkgdHlwZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleWxlbiA9IGtleS5sZW5ndGg7XG4gICAgICAgIGlmIChrZXlsZW4gIT09IDE2ICYmIGtleWxlbiAhPT0gMjQgJiYga2V5bGVuICE9PSAzMikgdGhyb3cgbmV3IF9lcnJvcnMuSWxsZWdhbEFyZ3VtZW50RXJyb3IoJ2lsbGVnYWwga2V5IHNpemUnKTtcblxuICAgICAgICB2YXIga2V5dmlldyA9IG5ldyBEYXRhVmlldyhrZXkuYnVmZmVyLCBrZXkuYnl0ZU9mZnNldCwga2V5LmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLmFzbS5zZXRfa2V5KGtleWxlbiA+PiAyLCBrZXl2aWV3LmdldFVpbnQzMigwKSwga2V5dmlldy5nZXRVaW50MzIoNCksIGtleXZpZXcuZ2V0VWludDMyKDgpLCBrZXl2aWV3LmdldFVpbnQzMigxMiksIGtleWxlbiA+IDE2ID8ga2V5dmlldy5nZXRVaW50MzIoMTYpIDogMCwga2V5bGVuID4gMTYgPyBrZXl2aWV3LmdldFVpbnQzMigyMCkgOiAwLCBrZXlsZW4gPiAyNCA/IGtleXZpZXcuZ2V0VWludDMyKDI0KSA6IDAsIGtleWxlbiA+IDI0ID8ga2V5dmlldy5nZXRVaW50MzIoMjgpIDogMCk7XG5cbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleSBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIG1peGluIGluc3RlYWQgb2YgaW5oZXJpdGFuY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gbm9uY2VcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvdW50ZXJdXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplXVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdBRVNfQ1RSX3NldF9vcHRpb25zJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gQUVTX0NUUl9zZXRfb3B0aW9ucyhub25jZSwgY291bnRlciwgc2l6ZSkge1xuICAgICAgaWYgKHNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc2l6ZSA8IDggfHwgc2l6ZSA+IDQ4KSB0aHJvdyBuZXcgX2Vycm9ycy5JbGxlZ2FsQXJndW1lbnRFcnJvcignaWxsZWdhbCBjb3VudGVyIHNpemUnKTtcblxuICAgICAgICB0aGlzLmNvdW50ZXJTaXplID0gc2l6ZTtcblxuICAgICAgICB2YXIgbWFzayA9IE1hdGgucG93KDIsIHNpemUpIC0gMTtcbiAgICAgICAgdGhpcy5hc20uc2V0X21hc2soMCwgMCwgbWFzayAvIDB4MTAwMDAwMDAwIHwgMCwgbWFzayB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb3VudGVyU2l6ZSA9IHNpemUgPSA0ODtcbiAgICAgICAgdGhpcy5hc20uc2V0X21hc2soMCwgMCwgMHhmZmZmLCAweGZmZmZmZmZmKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCEoMCwgX3V0aWxzLmlzX2J5dGVzKShub25jZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIG5vbmNlIHR5cGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW4gPSBub25jZS5sZW5ndGg7XG4gICAgICAgIGlmICghbGVuIHx8IGxlbiA+IDE2KSB0aHJvdyBuZXcgX2Vycm9ycy5JbGxlZ2FsQXJndW1lbnRFcnJvcignaWxsZWdhbCBub25jZSBzaXplJyk7XG5cbiAgICAgICAgdGhpcy5ub25jZSA9IG5vbmNlO1xuXG4gICAgICAgIHZhciB2aWV3ID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxNikpO1xuICAgICAgICBuZXcgVWludDhBcnJheSh2aWV3LmJ1ZmZlcikuc2V0KG5vbmNlKTtcblxuICAgICAgICB0aGlzLmFzbS5zZXRfbm9uY2Uodmlldy5nZXRVaW50MzIoMCksIHZpZXcuZ2V0VWludDMyKDQpLCB2aWV3LmdldFVpbnQzMig4KSwgdmlldy5nZXRVaW50MzIoMTIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm9uY2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvdW50ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoISgwLCBfdXRpbHMuaXNfbnVtYmVyKShjb3VudGVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5leHBlY3RlZCBjb3VudGVyIHR5cGUnKTtcblxuICAgICAgICBpZiAoY291bnRlciA8IDAgfHwgY291bnRlciA+PSBNYXRoLnBvdygyLCBzaXplKSkgdGhyb3cgbmV3IF9lcnJvcnMuSWxsZWdhbEFyZ3VtZW50RXJyb3IoJ2lsbGVnYWwgY291bnRlciB2YWx1ZScpO1xuXG4gICAgICAgIHRoaXMuY291bnRlciA9IGNvdW50ZXI7XG5cbiAgICAgICAgdGhpcy5hc20uc2V0X2NvdW50ZXIoMCwgMCwgY291bnRlciAvIDB4MTAwMDAwMDAwIHwgMCwgY291bnRlciB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb3VudGVyID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGl2XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ0FFU19zZXRfaXYnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfc2V0X2l2KGl2KSB7XG4gICAgICBpZiAoaXYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoISgwLCBfdXRpbHMuaXNfYnl0ZXMpKGl2KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgaXYgdHlwZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl2Lmxlbmd0aCAhPT0gMTYpIHRocm93IG5ldyBfZXJyb3JzLklsbGVnYWxBcmd1bWVudEVycm9yKCdpbGxlZ2FsIGl2IHNpemUnKTtcblxuICAgICAgICB2YXIgaXZ2aWV3ID0gbmV3IERhdGFWaWV3KGl2LmJ1ZmZlciwgaXYuYnl0ZU9mZnNldCwgaXYuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgdGhpcy5pdiA9IGl2O1xuICAgICAgICB0aGlzLmFzbS5zZXRfaXYoaXZ2aWV3LmdldFVpbnQzMigwKSwgaXZ2aWV3LmdldFVpbnQzMig0KSwgaXZ2aWV3LmdldFVpbnQzMig4KSwgaXZ2aWV3LmdldFVpbnQzMigxMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdiA9IG51bGw7XG4gICAgICAgIHRoaXMuYXNtLnNldF9pdigwLCAwLCAwLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhZGRpbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnQUVTX3NldF9wYWRkaW5nJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gQUVTX3NldF9wYWRkaW5nKHBhZGRpbmcpIHtcbiAgICAgIGlmIChwYWRkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gISFwYWRkaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2l2XVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhZGRpbmddXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ0FFU19yZXNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIEFFU19yZXNldChrZXksIGl2LCBwYWRkaW5nKSB7XG4gICAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG4gICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICB0aGlzLmxlbiA9IDA7XG5cbiAgICAgIHRoaXMuQUVTX3NldF9rZXkoa2V5KTtcbiAgICAgIHRoaXMuQUVTX3NldF9pdihpdik7XG4gICAgICB0aGlzLkFFU19zZXRfcGFkZGluZyhwYWRkaW5nKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ0FFU19FbmNyeXB0X3Byb2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfRW5jcnlwdF9wcm9jZXNzKGRhdGEpIHtcbiAgICAgIGlmICghKDAsIF91dGlscy5pc19ieXRlcykoZGF0YSkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIGlzbid0IG9mIGV4cGVjdGVkIHR5cGVcIik7XG5cbiAgICAgIHZhciBhc20gPSB0aGlzLmFzbSxcbiAgICAgICAgICBoZWFwID0gdGhpcy5oZWFwLFxuICAgICAgICAgIGFtb2RlID0gX2Flcy5BRVNfYXNtLkVOQ1t0aGlzLm1vZGVdLFxuICAgICAgICAgIGhwb3MgPSBfYWVzLkFFU19hc20uSEVBUF9EQVRBLFxuICAgICAgICAgIHBvcyA9IHRoaXMucG9zLFxuICAgICAgICAgIGxlbiA9IHRoaXMubGVuLFxuICAgICAgICAgIGRwb3MgPSAwLFxuICAgICAgICAgIGRsZW4gPSBkYXRhLmxlbmd0aCB8fCAwLFxuICAgICAgICAgIHJwb3MgPSAwLFxuICAgICAgICAgIHJsZW4gPSBsZW4gKyBkbGVuICYgLTE2LFxuICAgICAgICAgIHdsZW4gPSAwO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocmxlbik7XG5cbiAgICAgIHdoaWxlIChkbGVuID4gMCkge1xuICAgICAgICB3bGVuID0gKDAsIF91dGlscy5faGVhcF93cml0ZSkoaGVhcCwgcG9zICsgbGVuLCBkYXRhLCBkcG9zLCBkbGVuKTtcbiAgICAgICAgbGVuICs9IHdsZW47XG4gICAgICAgIGRwb3MgKz0gd2xlbjtcbiAgICAgICAgZGxlbiAtPSB3bGVuO1xuXG4gICAgICAgIHdsZW4gPSBhc20uY2lwaGVyKGFtb2RlLCBocG9zICsgcG9zLCBsZW4pO1xuXG4gICAgICAgIGlmICh3bGVuKSByZXN1bHQuc2V0KGhlYXAuc3ViYXJyYXkocG9zLCBwb3MgKyB3bGVuKSwgcnBvcyk7XG4gICAgICAgIHJwb3MgKz0gd2xlbjtcblxuICAgICAgICBpZiAod2xlbiA8IGxlbikge1xuICAgICAgICAgIHBvcyArPSB3bGVuO1xuICAgICAgICAgIGxlbiAtPSB3bGVuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvcyA9IDA7XG4gICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHRoaXMucG9zID0gcG9zO1xuICAgICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdBRVNfRW5jcnlwdF9maW5pc2gnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfRW5jcnlwdF9maW5pc2goZGF0YSkge1xuICAgICAgdmFyIHByZXN1bHQgPSBudWxsLFxuICAgICAgICAgIHBybGVuID0gMDtcblxuICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmVzdWx0ID0gdGhpcy5BRVNfRW5jcnlwdF9wcm9jZXNzKGRhdGEpLnJlc3VsdDtcbiAgICAgICAgcHJsZW4gPSBwcmVzdWx0Lmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgdmFyIGFzbSA9IHRoaXMuYXNtLFxuICAgICAgICAgIGhlYXAgPSB0aGlzLmhlYXAsXG4gICAgICAgICAgYW1vZGUgPSBfYWVzLkFFU19hc20uRU5DW3RoaXMubW9kZV0sXG4gICAgICAgICAgaHBvcyA9IF9hZXMuQUVTX2FzbS5IRUFQX0RBVEEsXG4gICAgICAgICAgcG9zID0gdGhpcy5wb3MsXG4gICAgICAgICAgbGVuID0gdGhpcy5sZW4sXG4gICAgICAgICAgcGxlbiA9IDE2IC0gbGVuICUgMTYsXG4gICAgICAgICAgcmxlbiA9IGxlbjtcblxuICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ3BhZGRpbmcnKSkge1xuICAgICAgICBpZiAodGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwbGVuOyArK3ApIHtcbiAgICAgICAgICAgIGhlYXBbcG9zICsgbGVuICsgcF0gPSBwbGVuO1xuICAgICAgICAgIH1sZW4gKz0gcGxlbjtcbiAgICAgICAgICBybGVuID0gbGVuO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbiAlIDE2KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9lcnJvcnMuSWxsZWdhbEFyZ3VtZW50RXJyb3IoJ2RhdGEgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gKz0gcGxlbjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHBybGVuICsgcmxlbik7XG5cbiAgICAgIGlmIChwcmxlbikgcmVzdWx0LnNldChwcmVzdWx0KTtcblxuICAgICAgaWYgKGxlbikgYXNtLmNpcGhlcihhbW9kZSwgaHBvcyArIHBvcywgbGVuKTtcblxuICAgICAgaWYgKHJsZW4pIHJlc3VsdC5zZXQoaGVhcC5zdWJhcnJheShwb3MsIHBvcyArIHJsZW4pLCBwcmxlbik7XG5cbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgdGhpcy5sZW4gPSAwO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnQUVTX0RlY3J5cHRfcHJvY2VzcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIEFFU19EZWNyeXB0X3Byb2Nlc3MoZGF0YSkge1xuICAgICAgaWYgKCEoMCwgX3V0aWxzLmlzX2J5dGVzKShkYXRhKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZVwiKTtcblxuICAgICAgdmFyIGFzbSA9IHRoaXMuYXNtLFxuICAgICAgICAgIGhlYXAgPSB0aGlzLmhlYXAsXG4gICAgICAgICAgYW1vZGUgPSBfYWVzLkFFU19hc20uREVDW3RoaXMubW9kZV0sXG4gICAgICAgICAgaHBvcyA9IF9hZXMuQUVTX2FzbS5IRUFQX0RBVEEsXG4gICAgICAgICAgcG9zID0gdGhpcy5wb3MsXG4gICAgICAgICAgbGVuID0gdGhpcy5sZW4sXG4gICAgICAgICAgZHBvcyA9IDAsXG4gICAgICAgICAgZGxlbiA9IGRhdGEubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgcnBvcyA9IDAsXG4gICAgICAgICAgcmxlbiA9IGxlbiArIGRsZW4gJiAtMTYsXG4gICAgICAgICAgcGxlbiA9IDAsXG4gICAgICAgICAgd2xlbiA9IDA7XG5cbiAgICAgIGlmICh0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgcGxlbiA9IGxlbiArIGRsZW4gLSBybGVuIHx8IDE2O1xuICAgICAgICBybGVuIC09IHBsZW47XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShybGVuKTtcblxuICAgICAgd2hpbGUgKGRsZW4gPiAwKSB7XG4gICAgICAgIHdsZW4gPSAoMCwgX3V0aWxzLl9oZWFwX3dyaXRlKShoZWFwLCBwb3MgKyBsZW4sIGRhdGEsIGRwb3MsIGRsZW4pO1xuICAgICAgICBsZW4gKz0gd2xlbjtcbiAgICAgICAgZHBvcyArPSB3bGVuO1xuICAgICAgICBkbGVuIC09IHdsZW47XG5cbiAgICAgICAgd2xlbiA9IGFzbS5jaXBoZXIoYW1vZGUsIGhwb3MgKyBwb3MsIGxlbiAtICghZGxlbiA/IHBsZW4gOiAwKSk7XG5cbiAgICAgICAgaWYgKHdsZW4pIHJlc3VsdC5zZXQoaGVhcC5zdWJhcnJheShwb3MsIHBvcyArIHdsZW4pLCBycG9zKTtcbiAgICAgICAgcnBvcyArPSB3bGVuO1xuXG4gICAgICAgIGlmICh3bGVuIDwgbGVuKSB7XG4gICAgICAgICAgcG9zICs9IHdsZW47XG4gICAgICAgICAgbGVuIC09IHdsZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcG9zID0gMDtcbiAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgICB0aGlzLmxlbiA9IGxlbjtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ0FFU19EZWNyeXB0X2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIEFFU19EZWNyeXB0X2ZpbmlzaChkYXRhKSB7XG4gICAgICB2YXIgcHJlc3VsdCA9IG51bGwsXG4gICAgICAgICAgcHJsZW4gPSAwO1xuXG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByZXN1bHQgPSB0aGlzLkFFU19EZWNyeXB0X3Byb2Nlc3MoZGF0YSkucmVzdWx0O1xuICAgICAgICBwcmxlbiA9IHByZXN1bHQubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXNtID0gdGhpcy5hc20sXG4gICAgICAgICAgaGVhcCA9IHRoaXMuaGVhcCxcbiAgICAgICAgICBhbW9kZSA9IF9hZXMuQUVTX2FzbS5ERUNbdGhpcy5tb2RlXSxcbiAgICAgICAgICBocG9zID0gX2Flcy5BRVNfYXNtLkhFQVBfREFUQSxcbiAgICAgICAgICBwb3MgPSB0aGlzLnBvcyxcbiAgICAgICAgICBsZW4gPSB0aGlzLmxlbixcbiAgICAgICAgICBybGVuID0gbGVuO1xuXG4gICAgICBpZiAobGVuID4gMCkge1xuICAgICAgICBpZiAobGVuICUgMTYpIHtcbiAgICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSgncGFkZGluZycpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX2Vycm9ycy5JbGxlZ2FsQXJndW1lbnRFcnJvcignZGF0YSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbiArPSAxNiAtIGxlbiAlIDE2O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzbS5jaXBoZXIoYW1vZGUsIGhwb3MgKyBwb3MsIGxlbik7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ3BhZGRpbmcnKSAmJiB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB2YXIgcGFkID0gaGVhcFtwb3MgKyBybGVuIC0gMV07XG4gICAgICAgICAgaWYgKHBhZCA8IDEgfHwgcGFkID4gMTYgfHwgcGFkID4gcmxlbikgdGhyb3cgbmV3IF9lcnJvcnMuU2VjdXJpdHlFcnJvcignYmFkIHBhZGRpbmcnKTtcblxuICAgICAgICAgIHZhciBwY2hlY2sgPSAwO1xuICAgICAgICAgIGZvciAodmFyIGkgPSBwYWQ7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgICAgIHBjaGVjayB8PSBwYWQgXiBoZWFwW3BvcyArIHJsZW4gLSBpXTtcbiAgICAgICAgICB9aWYgKHBjaGVjaykgdGhyb3cgbmV3IF9lcnJvcnMuU2VjdXJpdHlFcnJvcignYmFkIHBhZGRpbmcnKTtcblxuICAgICAgICAgIHJsZW4gLT0gcGFkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShwcmxlbiArIHJsZW4pO1xuXG4gICAgICBpZiAocHJsZW4gPiAwKSB7XG4gICAgICAgIHJlc3VsdC5zZXQocHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChybGVuID4gMCkge1xuICAgICAgICByZXN1bHQuc2V0KGhlYXAuc3ViYXJyYXkocG9zLCBwb3MgKyBybGVuKSwgcHJsZW4pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgIHRoaXMubGVuID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVM7XG59KCk7XG5cbn0se1wiLi4vZXJyb3JzXCI6MTQsXCIuLi91dGlsc1wiOjE5LFwiLi9hZXMuYXNtXCI6MixcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiOjM2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCI6Mzd9XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTX0NCQ19EZWNyeXB0ID0gZXhwb3J0cy5BRVNfQ0JDX0VuY3J5cHQgPSBleHBvcnRzLkFFU19DQkMgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX2FlcyA9IF9kZXJlcV8oJy4uL2FlcycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgQUVTX0NCQyA9IGV4cG9ydHMuQUVTX0NCQyA9IGZ1bmN0aW9uIChfQUVTKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKEFFU19DQkMsIF9BRVMpO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtpdj1udWxsXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYWRkaW5nPXRydWVdXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2hlYXBdXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2FzbV1cbiAgICovXG4gIGZ1bmN0aW9uIEFFU19DQkMoa2V5KSB7XG4gICAgdmFyIGl2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgIHZhciBoZWFwID0gYXJndW1lbnRzWzNdO1xuICAgIHZhciBhc20gPSBhcmd1bWVudHNbNF07XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQUVTX0NCQyk7XG5cbiAgICB2YXIgX3RoaXMgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChBRVNfQ0JDLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShBRVNfQ0JDKSkuY2FsbCh0aGlzLCBrZXksIGl2LCBwYWRkaW5nLCBoZWFwLCBhc20pKTtcblxuICAgIF90aGlzLm1vZGUgPSAnQ0JDJztcbiAgICBfdGhpcy5CTE9DS19TSVpFID0gMTY7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0NCQywgW3tcbiAgICBrZXk6ICdlbmNyeXB0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5jcnlwdChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVjcnlwdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlY3J5cHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0RlY3J5cHRfZmluaXNoKGRhdGEpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQUVTX0NCQztcbn0oX2Flcy5BRVMpOyAvKipcbiAgICAgICAgICAgICAgKiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgTW9kZSAoQ0JDKVxuICAgICAgICAgICAgICAqL1xuXG5cbnZhciBBRVNfQ0JDX0VuY3J5cHQgPSBleHBvcnRzLkFFU19DQkNfRW5jcnlwdCA9IGZ1bmN0aW9uIChfQUVTX0NCQykge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBRVNfQ0JDX0VuY3J5cHQsIF9BRVNfQ0JDKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbaXY9bnVsbF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbcGFkZGluZz10cnVlXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtoZWFwXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFthc21dXG4gICAqL1xuICBmdW5jdGlvbiBBRVNfQ0JDX0VuY3J5cHQoa2V5LCBpdiwgcGFkZGluZywgaGVhcCwgYXNtKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQUVTX0NCQ19FbmNyeXB0KTtcbiAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0NCQ19FbmNyeXB0Ll9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShBRVNfQ0JDX0VuY3J5cHQpKS5jYWxsKHRoaXMsIGtleSwgaXYsIHBhZGRpbmcsIGhlYXAsIGFzbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm5zIHtBRVNfQ0JDX0VuY3J5cHR9XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0NCQ19FbmNyeXB0LCBbe1xuICAgIGtleTogJ3Jlc2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfcmVzZXQoa2V5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAgICAgKiBAcmV0dXJucyB7QUVTX0NCQ19FbmNyeXB0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9jZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2VzcyhkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9wcm9jZXNzKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ0JDX0VuY3J5cHR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmlzaChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVNfQ0JDX0VuY3J5cHQ7XG59KEFFU19DQkMpO1xuXG52YXIgQUVTX0NCQ19EZWNyeXB0ID0gZXhwb3J0cy5BRVNfQ0JDX0RlY3J5cHQgPSBmdW5jdGlvbiAoX0FFU19DQkMyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKEFFU19DQkNfRGVjcnlwdCwgX0FFU19DQkMyKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbaXY9bnVsbF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbcGFkZGluZz10cnVlXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtoZWFwXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFthc21dXG4gICAqL1xuICBmdW5jdGlvbiBBRVNfQ0JDX0RlY3J5cHQoa2V5LCBpdiwgcGFkZGluZywgaGVhcCwgYXNtKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQUVTX0NCQ19EZWNyeXB0KTtcbiAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0NCQ19EZWNyeXB0Ll9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShBRVNfQ0JDX0RlY3J5cHQpKS5jYWxsKHRoaXMsIGtleSwgaXYsIHBhZGRpbmcsIGhlYXAsIGFzbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm5zIHtBRVNfQ0JDX0RlY3J5cHR9XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0NCQ19EZWNyeXB0LCBbe1xuICAgIGtleTogJ3Jlc2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfcmVzZXQoa2V5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAgICAgKiBAcmV0dXJucyB7QUVTX0NCQ19EZWNyeXB0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9jZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2VzcyhkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRGVjcnlwdF9wcm9jZXNzKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ0JDX0RlY3J5cHR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmlzaChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRGVjcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVNfQ0JDX0RlY3J5cHQ7XG59KEFFU19DQkMpO1xuXG59LHtcIi4uL2Flc1wiOjMsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2ZcIjoyOSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiOjM2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCI6MzcsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIjozOCxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuXCI6Mzl9XSw1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTX0NCQ19EZWNyeXB0ID0gZXhwb3J0cy5BRVNfQ0JDX0VuY3J5cHQgPSBleHBvcnRzLkFFU19DQkMgPSB1bmRlZmluZWQ7XG5cbnZhciBfZXhwb3J0cyA9IF9kZXJlcV8oJy4uL2V4cG9ydHMnKTtcblxudmFyIF9jYmMgPSBfZGVyZXFfKCcuL2NiYycpO1xuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhZGRpbmddXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtpdl1cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICovXG5mdW5jdGlvbiBBRVNfQ0JDX2VuY3J5cHRfYnl0ZXMoZGF0YSwga2V5LCBwYWRkaW5nLCBpdikge1xuICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ2RhdGEgcmVxdWlyZWQnKTtcbiAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ2tleSByZXF1aXJlZCcpO1xuICByZXR1cm4gbmV3IF9jYmMuQUVTX0NCQyhrZXksIGl2LCBwYWRkaW5nLCBfZXhwb3J0cy5fQUVTX2hlYXBfaW5zdGFuY2UsIF9leHBvcnRzLl9BRVNfYXNtX2luc3RhbmNlKS5lbmNyeXB0KGRhdGEpLnJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwYWRkaW5nXVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBbaXZdXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAqL1xuZnVuY3Rpb24gQUVTX0NCQ19kZWNyeXB0X2J5dGVzKGRhdGEsIGtleSwgcGFkZGluZywgaXYpIHtcbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdkYXRhIHJlcXVpcmVkJyk7XG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdrZXkgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIG5ldyBfY2JjLkFFU19DQkMoa2V5LCBpdiwgcGFkZGluZywgX2V4cG9ydHMuX0FFU19oZWFwX2luc3RhbmNlLCBfZXhwb3J0cy5fQUVTX2FzbV9pbnN0YW5jZSkuZGVjcnlwdChkYXRhKS5yZXN1bHQ7XG59XG5cbl9jYmMuQUVTX0NCQy5lbmNyeXB0ID0gQUVTX0NCQ19lbmNyeXB0X2J5dGVzO1xuX2NiYy5BRVNfQ0JDLmRlY3J5cHQgPSBBRVNfQ0JDX2RlY3J5cHRfYnl0ZXM7XG5cbmV4cG9ydHMuQUVTX0NCQyA9IF9jYmMuQUVTX0NCQztcbmV4cG9ydHMuQUVTX0NCQ19FbmNyeXB0ID0gX2NiYy5BRVNfQ0JDX0VuY3J5cHQ7XG5leHBvcnRzLkFFU19DQkNfRGVjcnlwdCA9IF9jYmMuQUVTX0NCQ19EZWNyeXB0O1xuXG59LHtcIi4uL2V4cG9ydHNcIjoxMSxcIi4vY2JjXCI6NH1dLDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5BRVNfQ0ZCX0RlY3J5cHQgPSBleHBvcnRzLkFFU19DRkJfRW5jcnlwdCA9IGV4cG9ydHMuQUVTX0NGQiA9IHVuZGVmaW5lZDtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2luaGVyaXRzMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfYWVzID0gX2RlcmVxXygnLi4vYWVzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBBRVNfQ0ZCID0gZXhwb3J0cy5BRVNfQ0ZCID0gZnVuY3Rpb24gKF9BRVMpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoQUVTX0NGQiwgX0FFUyk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2l2XVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtoZWFwXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFthc21dXG4gICAqL1xuICBmdW5jdGlvbiBBRVNfQ0ZCKGtleSwgaXYsIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFU19DRkIpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0NGQi5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQUVTX0NGQikpLmNhbGwodGhpcywga2V5LCBpdiwgdHJ1ZSwgaGVhcCwgYXNtKSk7XG5cbiAgICBkZWxldGUgX3RoaXMucGFkZGluZztcblxuICAgIF90aGlzLm1vZGUgPSAnQ0ZCJztcbiAgICBfdGhpcy5CTE9DS19TSVpFID0gMTY7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0NGQiwgW3tcbiAgICBrZXk6ICdlbmNyeXB0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5jcnlwdChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVjcnlwdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlY3J5cHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0RlY3J5cHRfZmluaXNoKGRhdGEpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQUVTX0NGQjtcbn0oX2Flcy5BRVMpOyAvKipcbiAgICAgICAgICAgICAgKiBDaXBoZXIgRmVlZGJhY2sgTW9kZSAoQ0ZCKVxuICAgICAgICAgICAgICAqL1xuXG52YXIgQUVTX0NGQl9FbmNyeXB0ID0gZXhwb3J0cy5BRVNfQ0ZCX0VuY3J5cHQgPSBmdW5jdGlvbiAoX0FFU19DRkIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoQUVTX0NGQl9FbmNyeXB0LCBfQUVTX0NGQik7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2l2PW51bGxdXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2hlYXBdXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2FzbV1cbiAgICovXG4gIGZ1bmN0aW9uIEFFU19DRkJfRW5jcnlwdChrZXksIGl2LCBoZWFwLCBhc20pIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBBRVNfQ0ZCX0VuY3J5cHQpO1xuICAgIHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChBRVNfQ0ZCX0VuY3J5cHQuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKEFFU19DRkJfRW5jcnlwdCkpLmNhbGwodGhpcywga2V5LCBpdiwgaGVhcCwgYXNtKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbaXZdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhZGRpbmddXG4gICAqIEByZXR1cm5zIHtBRVNfQ0ZCX0VuY3J5cHR9XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0NGQl9FbmNyeXB0LCBbe1xuICAgIGtleTogJ3Jlc2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoa2V5LCBpdiwgcGFkZGluZykge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX3Jlc2V0KGtleSwgaXYsIHBhZGRpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ0ZCX0VuY3J5cHR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Byb2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9jZXNzKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19FbmNyeXB0X3Byb2Nlc3MoZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhXG4gICAgICogQHJldHVybnMge0FFU19DRkJfRW5jcnlwdH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZmluaXNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmluaXNoKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19FbmNyeXB0X2ZpbmlzaChkYXRhKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEFFU19DRkJfRW5jcnlwdDtcbn0oQUVTX0NGQik7XG5cbnZhciBBRVNfQ0ZCX0RlY3J5cHQgPSBleHBvcnRzLkFFU19DRkJfRGVjcnlwdCA9IGZ1bmN0aW9uIChfQUVTX0NGQjIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoQUVTX0NGQl9EZWNyeXB0LCBfQUVTX0NGQjIpO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtpdj1udWxsXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtoZWFwXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFthc21dXG4gICAqL1xuICBmdW5jdGlvbiBBRVNfQ0ZCX0RlY3J5cHQoa2V5LCBpdiwgaGVhcCwgYXNtKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQUVTX0NGQl9EZWNyeXB0KTtcbiAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0NGQl9EZWNyeXB0Ll9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShBRVNfQ0ZCX0RlY3J5cHQpKS5jYWxsKHRoaXMsIGtleSwgaXYsIGhlYXAsIGFzbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2l2XVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYWRkaW5nXVxuICAgKiBAcmV0dXJucyB7QUVTX0NGQl9EZWNyeXB0fVxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEFFU19DRkJfRGVjcnlwdCwgW3tcbiAgICBrZXk6ICdyZXNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KGtleSwgaXYsIHBhZGRpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19yZXNldChrZXksIGl2LCBwYWRkaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAgICAgKiBAcmV0dXJucyB7QUVTX0NGQl9EZWNyeXB0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9jZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2VzcyhkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRGVjcnlwdF9wcm9jZXNzKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ0ZCX0RlY3J5cHR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmlzaChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRGVjcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVNfQ0ZCX0RlY3J5cHQ7XG59KEFFU19DRkIpO1xuXG59LHtcIi4uL2Flc1wiOjMsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2ZcIjoyOSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiOjM2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCI6MzcsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIjozOCxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuXCI6Mzl9XSw3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTX0NGQl9EZWNyeXB0ID0gZXhwb3J0cy5BRVNfQ0ZCX0VuY3J5cHQgPSBleHBvcnRzLkFFU19DRkIgPSB1bmRlZmluZWQ7XG5cbnZhciBfZXhwb3J0cyA9IF9kZXJlcV8oJy4uL2V4cG9ydHMnKTtcblxudmFyIF9jZmIgPSBfZGVyZXFfKCcuL2NmYicpO1xuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gW2l2XVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gKi9cbi8qKlxuICogQUVTLUNGQiBleHBvcnRzXG4gKi9cblxuZnVuY3Rpb24gQUVTX0NGQl9lbmNyeXB0X2J5dGVzKGRhdGEsIGtleSwgaXYpIHtcbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdkYXRhIHJlcXVpcmVkJyk7XG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdrZXkgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIG5ldyBfY2ZiLkFFU19DRkIoa2V5LCBpdiwgX2V4cG9ydHMuX0FFU19oZWFwX2luc3RhbmNlLCBfZXhwb3J0cy5fQUVTX2FzbV9pbnN0YW5jZSkuZW5jcnlwdChkYXRhKS5yZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBbaXZdXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAqL1xuZnVuY3Rpb24gQUVTX0NGQl9kZWNyeXB0X2J5dGVzKGRhdGEsIGtleSwgaXYpIHtcbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdkYXRhIHJlcXVpcmVkJyk7XG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdrZXkgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIG5ldyBfY2ZiLkFFU19DRkIoa2V5LCBpdiwgX2V4cG9ydHMuX0FFU19oZWFwX2luc3RhbmNlLCBfZXhwb3J0cy5fQUVTX2FzbV9pbnN0YW5jZSkuZGVjcnlwdChkYXRhKS5yZXN1bHQ7XG59XG5cbl9jZmIuQUVTX0NGQi5lbmNyeXB0ID0gQUVTX0NGQl9lbmNyeXB0X2J5dGVzO1xuX2NmYi5BRVNfQ0ZCLmRlY3J5cHQgPSBBRVNfQ0ZCX2RlY3J5cHRfYnl0ZXM7XG5cbmV4cG9ydHMuQUVTX0NGQiA9IF9jZmIuQUVTX0NGQjtcbmV4cG9ydHMuQUVTX0NGQl9FbmNyeXB0ID0gX2NmYi5BRVNfQ0ZCX0VuY3J5cHQ7XG5leHBvcnRzLkFFU19DRkJfRGVjcnlwdCA9IF9jZmIuQUVTX0NGQl9EZWNyeXB0O1xuXG59LHtcIi4uL2V4cG9ydHNcIjoxMSxcIi4vY2ZiXCI6Nn1dLDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5BRVNfQ1RSX0NyeXB0ID0gZXhwb3J0cy5BRVNfQ1RSID0gdW5kZWZpbmVkO1xuXG52YXIgX2dldFByb3RvdHlwZU9mID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMik7XG5cbnZhciBfaW5oZXJpdHMyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxudmFyIF9hZXMgPSBfZGVyZXFfKCcuLi9hZXMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIEFFU19DVFIgPSBleHBvcnRzLkFFU19DVFIgPSBmdW5jdGlvbiAoX0FFUykge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBRVNfQ1RSLCBfQUVTKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBub25jZVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFtoZWFwXVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFthc21dXG4gICAqL1xuICBmdW5jdGlvbiBBRVNfQ1RSKGtleSwgbm9uY2UsIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFU19DVFIpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0NUUi5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQUVTX0NUUikpLmNhbGwodGhpcywga2V5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGVhcCwgYXNtKSk7XG5cbiAgICBfdGhpcy5yZXNldChrZXksIG5vbmNlKTtcblxuICAgIF90aGlzLkFFU19DVFJfc2V0X29wdGlvbnMobm9uY2UpO1xuICAgIGRlbGV0ZSBfdGhpcy5wYWRkaW5nO1xuXG4gICAgX3RoaXMubW9kZSA9ICdDVFInO1xuICAgIF90aGlzLkJMT0NLX1NJWkUgPSAxNjtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBub25jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvdW50ZXJdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRlclNpemVdXG4gICAqIEByZXR1cm5zIHtBRVNfQ1RSfVxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEFFU19DVFIsIFt7XG4gICAga2V5OiAncmVzZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldChrZXksIG5vbmNlLCBjb3VudGVyLCBjb3VudGVyU2l6ZSkge1xuICAgICAgdGhpcy5BRVNfcmVzZXQoa2V5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG5cbiAgICAgIHRoaXMuQUVTX0NUUl9zZXRfb3B0aW9ucyhub25jZSwgY291bnRlciwgY291bnRlclNpemUpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAgICAgKiBAcmV0dXJucyB7QUVTX0NUUn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZW5jcnlwdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuY3J5cHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0VuY3J5cHRfZmluaXNoKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ1RSfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkZWNyeXB0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVjcnlwdChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVNfQ1RSO1xufShfYWVzLkFFUyk7IC8qKlxuICAgICAgICAgICAgICAqIENvdW50ZXIgTW9kZSAoQ1RSKVxuICAgICAgICAgICAgICAqL1xuXG52YXIgQUVTX0NUUl9DcnlwdCA9IGV4cG9ydHMuQUVTX0NUUl9DcnlwdCA9IGZ1bmN0aW9uIChfQUVTX0NUUikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBRVNfQ1RSX0NyeXB0LCBfQUVTX0NUUik7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gbm9uY2VcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbaGVhcF1cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbYXNtXVxuICAgKi9cbiAgZnVuY3Rpb24gQUVTX0NUUl9DcnlwdChrZXksIG5vbmNlLCBoZWFwLCBhc20pIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBBRVNfQ1RSX0NyeXB0KTtcblxuICAgIHZhciBfdGhpczIgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChBRVNfQ1RSX0NyeXB0Ll9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShBRVNfQ1RSX0NyeXB0KSkuY2FsbCh0aGlzLCBrZXksIG5vbmNlLCBoZWFwLCBhc20pKTtcblxuICAgIF90aGlzMi5CTE9DS19TSVpFID0gMTY7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IG5vbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRlcl1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb3VudGVyU2l6ZV1cbiAgICogQHJldHVybnMge0FFU19DVFJfQ3J5cHR9XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0NUUl9DcnlwdCwgW3tcbiAgICBrZXk6ICdyZXNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KGtleSwgbm9uY2UsIGNvdW50ZXIsIGNvdW50ZXJTaXplKSB7XG4gICAgICB0aGlzLkFFU19yZXNldChrZXksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcblxuICAgICAgdGhpcy5BRVNfQ1RSX3NldF9vcHRpb25zKG5vbmNlLCBjb3VudGVyLCBjb3VudGVyU2l6ZSk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ1RSX0NyeXB0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9jZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2VzcyhkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9wcm9jZXNzKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfQ1RSX0NyeXB0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdmaW5pc2gnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5pc2goZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0VuY3J5cHRfZmluaXNoKGRhdGEpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQUVTX0NUUl9DcnlwdDtcbn0oQUVTX0NUUik7XG5cbn0se1wiLi4vYWVzXCI6MyxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZlwiOjI5LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCI6MzYsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIjozNyxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0c1wiOjM4LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIjozOX1dLDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5BRVNfQ1RSID0gdW5kZWZpbmVkO1xuXG52YXIgX2V4cG9ydHMgPSBfZGVyZXFfKCcuLi9leHBvcnRzJyk7XG5cbnZhciBfY3RyID0gX2RlcmVxXygnLi9jdHInKTtcblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IG5vbmNlXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAqL1xuLyoqXG4gKiBBRVMtQ1RSIGV4cG9ydHNcbiAqL1xuXG5mdW5jdGlvbiBBRVNfQ1RSX2NyeXB0X2J5dGVzKGRhdGEsIGtleSwgbm9uY2UpIHtcbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdkYXRhIHJlcXVpcmVkJyk7XG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdrZXkgcmVxdWlyZWQnKTtcbiAgaWYgKG5vbmNlID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBTeW50YXhFcnJvcignbm9uY2UgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIG5ldyBfY3RyLkFFU19DVFIoa2V5LCBub25jZSwgX2V4cG9ydHMuX0FFU19oZWFwX2luc3RhbmNlLCBfZXhwb3J0cy5fQUVTX2FzbV9pbnN0YW5jZSkuZW5jcnlwdChkYXRhKS5yZXN1bHQ7XG59XG5cbl9jdHIuQUVTX0NUUi5lbmNyeXB0ID0gQUVTX0NUUl9jcnlwdF9ieXRlcztcbl9jdHIuQUVTX0NUUi5kZWNyeXB0ID0gQUVTX0NUUl9jcnlwdF9ieXRlcztcblxuZXhwb3J0cy5BRVNfQ1RSID0gX2N0ci5BRVNfQ1RSO1xuXG59LHtcIi4uL2V4cG9ydHNcIjoxMSxcIi4vY3RyXCI6OH1dLDEwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTX0VDQl9EZWNyeXB0ID0gZXhwb3J0cy5BRVNfRUNCX0VuY3J5cHQgPSBleHBvcnRzLkFFU19FQ0IgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX2FlcyA9IF9kZXJlcV8oJy4uL2FlcycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEVsZWN0cm9uaWMgQ29kZSBCb29rIE1vZGUgKEVDQilcbiAqL1xudmFyIEFFU19FQ0IgPSBleHBvcnRzLkFFU19FQ0IgPSBmdW5jdGlvbiAoX0FFUykge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBRVNfRUNCLCBfQUVTKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbaGVhcF1cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbYXNtXVxuICAgKi9cbiAgZnVuY3Rpb24gQUVTX0VDQihrZXksIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFU19FQ0IpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0VDQi5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQUVTX0VDQikpLmNhbGwodGhpcywga2V5LCB1bmRlZmluZWQsIGZhbHNlLCBoZWFwLCBhc20pKTtcblxuICAgIF90aGlzLm1vZGUgPSAnRUNCJztcbiAgICBfdGhpcy5CTE9DS19TSVpFID0gMTY7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0VDQiwgW3tcbiAgICBrZXk6ICdlbmNyeXB0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5jcnlwdChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVjcnlwdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlY3J5cHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0RlY3J5cHRfZmluaXNoKGRhdGEpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQUVTX0VDQjtcbn0oX2Flcy5BRVMpO1xuXG52YXIgQUVTX0VDQl9FbmNyeXB0ID0gZXhwb3J0cy5BRVNfRUNCX0VuY3J5cHQgPSBmdW5jdGlvbiAoX0FFU19FQ0IpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoQUVTX0VDQl9FbmNyeXB0LCBfQUVTX0VDQik7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2hlYXBdXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW2FzbV1cbiAgICovXG4gIGZ1bmN0aW9uIEFFU19FQ0JfRW5jcnlwdChrZXksIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFU19FQ0JfRW5jcnlwdCk7XG4gICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKEFFU19FQ0JfRW5jcnlwdC5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQUVTX0VDQl9FbmNyeXB0KSkuY2FsbCh0aGlzLCBrZXksIGhlYXAsIGFzbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm5zIHtBRVNfRUNCX0VuY3J5cHR9XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0VDQl9FbmNyeXB0LCBbe1xuICAgIGtleTogJ3Jlc2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfcmVzZXQoa2V5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAgICAgKiBAcmV0dXJucyB7QUVTX0VDQl9FbmNyeXB0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9jZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvY2VzcyhkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9wcm9jZXNzKGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfRUNCX0VuY3J5cHR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmlzaChkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5BRVNfRW5jcnlwdF9maW5pc2goZGF0YSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVNfRUNCX0VuY3J5cHQ7XG59KEFFU19FQ0IpO1xuXG52YXIgQUVTX0VDQl9EZWNyeXB0ID0gZXhwb3J0cy5BRVNfRUNCX0RlY3J5cHQgPSBmdW5jdGlvbiAoX0FFU19FQ0IyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKEFFU19FQ0JfRGVjcnlwdCwgX0FFU19FQ0IyKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbaGVhcF1cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBbYXNtXVxuICAgKi9cbiAgZnVuY3Rpb24gQUVTX0VDQl9EZWNyeXB0KGtleSwgaGVhcCwgYXNtKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQUVTX0VDQl9EZWNyeXB0KTtcbiAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0VDQl9EZWNyeXB0Ll9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShBRVNfRUNCX0RlY3J5cHQpKS5jYWxsKHRoaXMsIGtleSwgaGVhcCwgYXNtKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHJldHVybnMge0FFU19FQ0JfRGVjcnlwdH1cbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShBRVNfRUNCX0RlY3J5cHQsIFt7XG4gICAga2V5OiAncmVzZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19yZXNldChrZXksIG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgICAqIEByZXR1cm5zIHtBRVNfRUNCX0RlY3J5cHR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Byb2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9jZXNzKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19EZWNyeXB0X3Byb2Nlc3MoZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhXG4gICAgICogQHJldHVybnMge0FFU19FQ0JfRGVjcnlwdH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZmluaXNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmluaXNoKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19EZWNyeXB0X2ZpbmlzaChkYXRhKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEFFU19FQ0JfRGVjcnlwdDtcbn0oQUVTX0VDQik7XG5cbn0se1wiLi4vYWVzXCI6MyxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZlwiOjI5LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCI6MzYsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIjozNyxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0c1wiOjM4LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIjozOX1dLDExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuX0FFU19hc21faW5zdGFuY2UgPSBleHBvcnRzLl9BRVNfaGVhcF9pbnN0YW5jZSA9IHVuZGVmaW5lZDtcblxudmFyIF9hZXMgPSBfZGVyZXFfKCcuL2Flcy5hc20nKTtcblxudmFyIF9BRVNfaGVhcF9pbnN0YW5jZSA9IGV4cG9ydHMuX0FFU19oZWFwX2luc3RhbmNlID0gbmV3IFVpbnQ4QXJyYXkoMHgxMDAwMDApOyAvLyAxTUJcbi8vIHNoYXJlZCBhc20uanMgbW9kdWxlIGFuZCBoZWFwXG52YXIgX0FFU19hc21faW5zdGFuY2UgPSBleHBvcnRzLl9BRVNfYXNtX2luc3RhbmNlID0gKDAsIF9hZXMuQUVTX2FzbSkobnVsbCwgX0FFU19oZWFwX2luc3RhbmNlLmJ1ZmZlcik7XG5cbn0se1wiLi9hZXMuYXNtXCI6Mn1dLDEyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTX0dDTV9EZWNyeXB0ID0gZXhwb3J0cy5BRVNfR0NNX0VuY3J5cHQgPSBleHBvcnRzLkFFU19HQ00gPSB1bmRlZmluZWQ7XG5cbnZhciBfZXhwb3J0cyA9IF9kZXJlcV8oJy4uL2V4cG9ydHMnKTtcblxudmFyIF9nY20gPSBfZGVyZXFfKCcuL2djbScpO1xuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gbm9uY2VcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gW2FkYXRhXVxuICogQHBhcmFtIHtudW1iZXJ9IFt0YWdTaXplXVxuICogQHJldHVybiB7VWludDhBcnJheX1cbiAqL1xuLyoqXG4gKiBBRVMtR0NNIGV4cG9ydHNcbiAqL1xuXG5mdW5jdGlvbiBBRVNfR0NNX2VuY3J5cHRfYnl0ZXMoZGF0YSwga2V5LCBub25jZSwgYWRhdGEsIHRhZ1NpemUpIHtcbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdkYXRhIHJlcXVpcmVkJyk7XG4gIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdrZXkgcmVxdWlyZWQnKTtcbiAgaWYgKG5vbmNlID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBTeW50YXhFcnJvcignbm9uY2UgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIG5ldyBfZ2NtLkFFU19HQ00oa2V5LCBub25jZSwgYWRhdGEsIHRhZ1NpemUsIF9leHBvcnRzLl9BRVNfaGVhcF9pbnN0YW5jZSwgX2V4cG9ydHMuX0FFU19hc21faW5zdGFuY2UpLmVuY3J5cHQoZGF0YSkucmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gbm9uY2VcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gW2FkYXRhXVxuICogQHBhcmFtIHtudW1iZXJ9IFt0YWdTaXplXVxuICogQHJldHVybiB7VWludDhBcnJheX1cbiAqL1xuZnVuY3Rpb24gQUVTX0dDTV9kZWNyeXB0X2J5dGVzKGRhdGEsIGtleSwgbm9uY2UsIGFkYXRhLCB0YWdTaXplKSB7XG4gIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBTeW50YXhFcnJvcignZGF0YSByZXF1aXJlZCcpO1xuICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBTeW50YXhFcnJvcigna2V5IHJlcXVpcmVkJyk7XG4gIGlmIChub25jZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ25vbmNlIHJlcXVpcmVkJyk7XG4gIHJldHVybiBuZXcgX2djbS5BRVNfR0NNKGtleSwgbm9uY2UsIGFkYXRhLCB0YWdTaXplLCBfZXhwb3J0cy5fQUVTX2hlYXBfaW5zdGFuY2UsIF9leHBvcnRzLl9BRVNfYXNtX2luc3RhbmNlKS5kZWNyeXB0KGRhdGEpLnJlc3VsdDtcbn1cblxuX2djbS5BRVNfR0NNLmVuY3J5cHQgPSBBRVNfR0NNX2VuY3J5cHRfYnl0ZXM7XG5fZ2NtLkFFU19HQ00uZGVjcnlwdCA9IEFFU19HQ01fZGVjcnlwdF9ieXRlcztcblxuZXhwb3J0cy5BRVNfR0NNID0gX2djbS5BRVNfR0NNO1xuZXhwb3J0cy5BRVNfR0NNX0VuY3J5cHQgPSBfZ2NtLkFFU19HQ01fRW5jcnlwdDtcbmV4cG9ydHMuQUVTX0dDTV9EZWNyeXB0ID0gX2djbS5BRVNfR0NNX0RlY3J5cHQ7XG5cbn0se1wiLi4vZXhwb3J0c1wiOjExLFwiLi9nY21cIjoxM31dLDEzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQUVTX0dDTV9EZWNyeXB0ID0gZXhwb3J0cy5BRVNfR0NNX0VuY3J5cHQgPSBleHBvcnRzLkFFU19HQ00gPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX2Vycm9ycyA9IF9kZXJlcV8oJy4uLy4uL2Vycm9ycycpO1xuXG52YXIgX3V0aWxzID0gX2RlcmVxXygnLi4vLi4vdXRpbHMnKTtcblxudmFyIF9hZXMgPSBfZGVyZXFfKCcuLi9hZXMnKTtcblxudmFyIF9hZXMyID0gX2RlcmVxXygnLi4vYWVzLmFzbScpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEdhbG9pcy9Db3VudGVyIG1vZGVcbiAqL1xuXG52YXIgX0FFU19HQ01fZGF0YV9tYXhMZW5ndGggPSA2ODcxOTQ3NjcwNDsgLy8gMl4zNiAtIDJeNVxuXG52YXIgQUVTX0dDTSA9IGV4cG9ydHMuQUVTX0dDTSA9IGZ1bmN0aW9uIChfQUVTKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKEFFU19HQ00sIF9BRVMpO1xuXG4gIGZ1bmN0aW9uIEFFU19HQ00oa2V5LCBub25jZSwgYWRhdGEsIHRhZ1NpemUsIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFU19HQ00pO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQUVTX0dDTS5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQUVTX0dDTSkpLmNhbGwodGhpcywga2V5LCB1bmRlZmluZWQsIGZhbHNlLCBoZWFwLCBhc20pKTtcblxuICAgIF90aGlzLm5vbmNlID0gbnVsbDtcbiAgICBfdGhpcy5hZGF0YSA9IG51bGw7XG4gICAgX3RoaXMuaXYgPSBudWxsO1xuICAgIF90aGlzLmNvdW50ZXIgPSAxO1xuICAgIF90aGlzLnRhZ1NpemUgPSAxNjtcbiAgICBfdGhpcy5tb2RlID0gJ0dDTSc7XG4gICAgX3RoaXMuQkxPQ0tfU0laRSA9IDE2O1xuXG4gICAgX3RoaXMucmVzZXQoa2V5LCB0YWdTaXplLCBub25jZSwgYWRhdGEpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEFFU19HQ00sIFt7XG4gICAga2V5OiAncmVzZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldChrZXksIHRhZ1NpemUsIG5vbmNlLCBhZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0dDTV9yZXNldChrZXksIHRhZ1NpemUsIG5vbmNlLCBhZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZW5jcnlwdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuY3J5cHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0dDTV9lbmNyeXB0KGRhdGEpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2RlY3J5cHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZWNyeXB0KGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19HQ01fZGVjcnlwdChkYXRhKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdBRVNfR0NNX0VuY3J5cHRfcHJvY2VzcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIEFFU19HQ01fRW5jcnlwdF9wcm9jZXNzKGRhdGEpIHtcbiAgICAgIGlmICghKDAsIF91dGlscy5pc19ieXRlcykoZGF0YSkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIGlzbid0IG9mIGV4cGVjdGVkIHR5cGVcIik7XG5cbiAgICAgIHZhciBkcG9zID0gMCxcbiAgICAgICAgICBkbGVuID0gZGF0YS5sZW5ndGggfHwgMCxcbiAgICAgICAgICBhc20gPSB0aGlzLmFzbSxcbiAgICAgICAgICBoZWFwID0gdGhpcy5oZWFwLFxuICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLmNvdW50ZXIsXG4gICAgICAgICAgcG9zID0gdGhpcy5wb3MsXG4gICAgICAgICAgbGVuID0gdGhpcy5sZW4sXG4gICAgICAgICAgcnBvcyA9IDAsXG4gICAgICAgICAgcmxlbiA9IGxlbiArIGRsZW4gJiAtMTYsXG4gICAgICAgICAgd2xlbiA9IDA7XG5cbiAgICAgIGlmICgoY291bnRlciAtIDEgPDwgNCkgKyBsZW4gKyBkbGVuID4gX0FFU19HQ01fZGF0YV9tYXhMZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdjb3VudGVyIG92ZXJmbG93Jyk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShybGVuKTtcblxuICAgICAgd2hpbGUgKGRsZW4gPiAwKSB7XG4gICAgICAgIHdsZW4gPSAoMCwgX3V0aWxzLl9oZWFwX3dyaXRlKShoZWFwLCBwb3MgKyBsZW4sIGRhdGEsIGRwb3MsIGRsZW4pO1xuICAgICAgICBsZW4gKz0gd2xlbjtcbiAgICAgICAgZHBvcyArPSB3bGVuO1xuICAgICAgICBkbGVuIC09IHdsZW47XG5cbiAgICAgICAgd2xlbiA9IGFzbS5jaXBoZXIoX2FlczIuQUVTX2FzbS5FTkMuQ1RSLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSArIHBvcywgbGVuKTtcbiAgICAgICAgd2xlbiA9IGFzbS5tYWMoX2FlczIuQUVTX2FzbS5NQUMuR0NNLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSArIHBvcywgd2xlbik7XG5cbiAgICAgICAgaWYgKHdsZW4pIHJlc3VsdC5zZXQoaGVhcC5zdWJhcnJheShwb3MsIHBvcyArIHdsZW4pLCBycG9zKTtcbiAgICAgICAgY291bnRlciArPSB3bGVuID4+PiA0O1xuICAgICAgICBycG9zICs9IHdsZW47XG5cbiAgICAgICAgaWYgKHdsZW4gPCBsZW4pIHtcbiAgICAgICAgICBwb3MgKz0gd2xlbjtcbiAgICAgICAgICBsZW4gLT0gd2xlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgIGxlbiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBjb3VudGVyO1xuICAgICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgICB0aGlzLmxlbiA9IGxlbjtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnQUVTX0dDTV9FbmNyeXB0X2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIEFFU19HQ01fRW5jcnlwdF9maW5pc2goKSB7XG4gICAgICB2YXIgYXNtID0gdGhpcy5hc20sXG4gICAgICAgICAgaGVhcCA9IHRoaXMuaGVhcCxcbiAgICAgICAgICBjb3VudGVyID0gdGhpcy5jb3VudGVyLFxuICAgICAgICAgIHRhZ1NpemUgPSB0aGlzLnRhZ1NpemUsXG4gICAgICAgICAgYWRhdGEgPSB0aGlzLmFkYXRhLFxuICAgICAgICAgIHBvcyA9IHRoaXMucG9zLFxuICAgICAgICAgIGxlbiA9IHRoaXMubGVuO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuICsgdGFnU2l6ZSk7XG5cbiAgICAgIGFzbS5jaXBoZXIoX2FlczIuQUVTX2FzbS5FTkMuQ1RSLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSArIHBvcywgbGVuICsgMTUgJiAtMTYpO1xuICAgICAgaWYgKGxlbikgcmVzdWx0LnNldChoZWFwLnN1YmFycmF5KHBvcywgcG9zICsgbGVuKSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSBsZW47IGkgJiAxNTsgaSsrKSB7XG4gICAgICAgIGhlYXBbcG9zICsgaV0gPSAwO1xuICAgICAgfWFzbS5tYWMoX2FlczIuQUVTX2FzbS5NQUMuR0NNLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSArIHBvcywgaSk7XG5cbiAgICAgIHZhciBhbGVuID0gYWRhdGEgIT09IG51bGwgPyBhZGF0YS5sZW5ndGggOiAwLFxuICAgICAgICAgIGNsZW4gPSAoY291bnRlciAtIDEgPDwgNCkgKyBsZW47XG4gICAgICBoZWFwWzBdID0gaGVhcFsxXSA9IGhlYXBbMl0gPSAwLCBoZWFwWzNdID0gYWxlbiA+Pj4gMjksIGhlYXBbNF0gPSBhbGVuID4+PiAyMSwgaGVhcFs1XSA9IGFsZW4gPj4+IDEzICYgMjU1LCBoZWFwWzZdID0gYWxlbiA+Pj4gNSAmIDI1NSwgaGVhcFs3XSA9IGFsZW4gPDwgMyAmIDI1NSwgaGVhcFs4XSA9IGhlYXBbOV0gPSBoZWFwWzEwXSA9IDAsIGhlYXBbMTFdID0gY2xlbiA+Pj4gMjksIGhlYXBbMTJdID0gY2xlbiA+Pj4gMjEgJiAyNTUsIGhlYXBbMTNdID0gY2xlbiA+Pj4gMTMgJiAyNTUsIGhlYXBbMTRdID0gY2xlbiA+Pj4gNSAmIDI1NSwgaGVhcFsxNV0gPSBjbGVuIDw8IDMgJiAyNTU7XG4gICAgICBhc20ubWFjKF9hZXMyLkFFU19hc20uTUFDLkdDTSwgX2FlczIuQUVTX2FzbS5IRUFQX0RBVEEsIDE2KTtcbiAgICAgIGFzbS5nZXRfaXYoX2FlczIuQUVTX2FzbS5IRUFQX0RBVEEpO1xuXG4gICAgICBhc20uc2V0X2NvdW50ZXIoMCwgMCwgMCwgdGhpcy5nYW1tYTApO1xuICAgICAgYXNtLmNpcGhlcihfYWVzMi5BRVNfYXNtLkVOQy5DVFIsIF9hZXMyLkFFU19hc20uSEVBUF9EQVRBLCAxNik7XG4gICAgICByZXN1bHQuc2V0KGhlYXAuc3ViYXJyYXkoMCwgdGFnU2l6ZSksIGxlbik7XG5cbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5jb3VudGVyID0gMTtcbiAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgIHRoaXMubGVuID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnQUVTX0dDTV9EZWNyeXB0X3Byb2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfR0NNX0RlY3J5cHRfcHJvY2VzcyhkYXRhKSB7XG4gICAgICBpZiAoISgwLCBfdXRpbHMuaXNfYnl0ZXMpKGRhdGEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBpc24ndCBvZiBleHBlY3RlZCB0eXBlXCIpO1xuXG4gICAgICB2YXIgZHBvcyA9IDAsXG4gICAgICAgICAgZGxlbiA9IGRhdGEubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgYXNtID0gdGhpcy5hc20sXG4gICAgICAgICAgaGVhcCA9IHRoaXMuaGVhcCxcbiAgICAgICAgICBjb3VudGVyID0gdGhpcy5jb3VudGVyLFxuICAgICAgICAgIHRhZ1NpemUgPSB0aGlzLnRhZ1NpemUsXG4gICAgICAgICAgcG9zID0gdGhpcy5wb3MsXG4gICAgICAgICAgbGVuID0gdGhpcy5sZW4sXG4gICAgICAgICAgcnBvcyA9IDAsXG4gICAgICAgICAgcmxlbiA9IGxlbiArIGRsZW4gPiB0YWdTaXplID8gbGVuICsgZGxlbiAtIHRhZ1NpemUgJiAtMTYgOiAwLFxuICAgICAgICAgIHRsZW4gPSBsZW4gKyBkbGVuIC0gcmxlbixcbiAgICAgICAgICB3bGVuID0gMDtcblxuICAgICAgaWYgKChjb3VudGVyIC0gMSA8PCA0KSArIGxlbiArIGRsZW4gPiBfQUVTX0dDTV9kYXRhX21heExlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2NvdW50ZXIgb3ZlcmZsb3cnKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHJsZW4pO1xuXG4gICAgICB3aGlsZSAoZGxlbiA+IHRsZW4pIHtcbiAgICAgICAgd2xlbiA9ICgwLCBfdXRpbHMuX2hlYXBfd3JpdGUpKGhlYXAsIHBvcyArIGxlbiwgZGF0YSwgZHBvcywgZGxlbiAtIHRsZW4pO1xuICAgICAgICBsZW4gKz0gd2xlbjtcbiAgICAgICAgZHBvcyArPSB3bGVuO1xuICAgICAgICBkbGVuIC09IHdsZW47XG5cbiAgICAgICAgd2xlbiA9IGFzbS5tYWMoX2FlczIuQUVTX2FzbS5NQUMuR0NNLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSArIHBvcywgd2xlbik7XG4gICAgICAgIHdsZW4gPSBhc20uY2lwaGVyKF9hZXMyLkFFU19hc20uREVDLkNUUiwgX2FlczIuQUVTX2FzbS5IRUFQX0RBVEEgKyBwb3MsIHdsZW4pO1xuXG4gICAgICAgIGlmICh3bGVuKSByZXN1bHQuc2V0KGhlYXAuc3ViYXJyYXkocG9zLCBwb3MgKyB3bGVuKSwgcnBvcyk7XG4gICAgICAgIGNvdW50ZXIgKz0gd2xlbiA+Pj4gNDtcbiAgICAgICAgcnBvcyArPSB3bGVuO1xuXG4gICAgICAgIHBvcyA9IDA7XG4gICAgICAgIGxlbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChkbGVuID4gMCkge1xuICAgICAgICBsZW4gKz0gKDAsIF91dGlscy5faGVhcF93cml0ZSkoaGVhcCwgMCwgZGF0YSwgZHBvcywgZGxlbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5jb3VudGVyID0gY291bnRlcjtcbiAgICAgIHRoaXMucG9zID0gcG9zO1xuICAgICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ0FFU19HQ01fRGVjcnlwdF9maW5pc2gnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfR0NNX0RlY3J5cHRfZmluaXNoKCkge1xuICAgICAgdmFyIGFzbSA9IHRoaXMuYXNtLFxuICAgICAgICAgIGhlYXAgPSB0aGlzLmhlYXAsXG4gICAgICAgICAgdGFnU2l6ZSA9IHRoaXMudGFnU2l6ZSxcbiAgICAgICAgICBhZGF0YSA9IHRoaXMuYWRhdGEsXG4gICAgICAgICAgY291bnRlciA9IHRoaXMuY291bnRlcixcbiAgICAgICAgICBwb3MgPSB0aGlzLnBvcyxcbiAgICAgICAgICBsZW4gPSB0aGlzLmxlbixcbiAgICAgICAgICBybGVuID0gbGVuIC0gdGFnU2l6ZSxcbiAgICAgICAgICB3bGVuID0gMDtcblxuICAgICAgaWYgKGxlbiA8IHRhZ1NpemUpIHRocm93IG5ldyBfZXJyb3JzLklsbGVnYWxTdGF0ZUVycm9yKCdhdXRoZW50aWNhdGlvbiB0YWcgbm90IGZvdW5kJyk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShybGVuKSxcbiAgICAgICAgICBhdGFnID0gbmV3IFVpbnQ4QXJyYXkoaGVhcC5zdWJhcnJheShwb3MgKyBybGVuLCBwb3MgKyBsZW4pKTtcblxuICAgICAgZm9yICh2YXIgaSA9IHJsZW47IGkgJiAxNTsgaSsrKSB7XG4gICAgICAgIGhlYXBbcG9zICsgaV0gPSAwO1xuICAgICAgfXdsZW4gPSBhc20ubWFjKF9hZXMyLkFFU19hc20uTUFDLkdDTSwgX2FlczIuQUVTX2FzbS5IRUFQX0RBVEEgKyBwb3MsIGkpO1xuICAgICAgd2xlbiA9IGFzbS5jaXBoZXIoX2FlczIuQUVTX2FzbS5ERUMuQ1RSLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSArIHBvcywgaSk7XG4gICAgICBpZiAocmxlbikgcmVzdWx0LnNldChoZWFwLnN1YmFycmF5KHBvcywgcG9zICsgcmxlbikpO1xuXG4gICAgICB2YXIgYWxlbiA9IGFkYXRhICE9PSBudWxsID8gYWRhdGEubGVuZ3RoIDogMCxcbiAgICAgICAgICBjbGVuID0gKGNvdW50ZXIgLSAxIDw8IDQpICsgbGVuIC0gdGFnU2l6ZTtcbiAgICAgIGhlYXBbMF0gPSBoZWFwWzFdID0gaGVhcFsyXSA9IDAsIGhlYXBbM10gPSBhbGVuID4+PiAyOSwgaGVhcFs0XSA9IGFsZW4gPj4+IDIxLCBoZWFwWzVdID0gYWxlbiA+Pj4gMTMgJiAyNTUsIGhlYXBbNl0gPSBhbGVuID4+PiA1ICYgMjU1LCBoZWFwWzddID0gYWxlbiA8PCAzICYgMjU1LCBoZWFwWzhdID0gaGVhcFs5XSA9IGhlYXBbMTBdID0gMCwgaGVhcFsxMV0gPSBjbGVuID4+PiAyOSwgaGVhcFsxMl0gPSBjbGVuID4+PiAyMSAmIDI1NSwgaGVhcFsxM10gPSBjbGVuID4+PiAxMyAmIDI1NSwgaGVhcFsxNF0gPSBjbGVuID4+PiA1ICYgMjU1LCBoZWFwWzE1XSA9IGNsZW4gPDwgMyAmIDI1NTtcbiAgICAgIGFzbS5tYWMoX2FlczIuQUVTX2FzbS5NQUMuR0NNLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSwgMTYpO1xuICAgICAgYXNtLmdldF9pdihfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSk7XG5cbiAgICAgIGFzbS5zZXRfY291bnRlcigwLCAwLCAwLCB0aGlzLmdhbW1hMCk7XG4gICAgICBhc20uY2lwaGVyKF9hZXMyLkFFU19hc20uRU5DLkNUUiwgX2FlczIuQUVTX2FzbS5IRUFQX0RBVEEsIDE2KTtcblxuICAgICAgdmFyIGFjaGVjayA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ1NpemU7ICsraSkge1xuICAgICAgICBhY2hlY2sgfD0gYXRhZ1tpXSBeIGhlYXBbaV07XG4gICAgICB9aWYgKGFjaGVjaykgdGhyb3cgbmV3IF9lcnJvcnMuU2VjdXJpdHlFcnJvcignZGF0YSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkJyk7XG5cbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5jb3VudGVyID0gMTtcbiAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgIHRoaXMubGVuID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnQUVTX0dDTV9kZWNyeXB0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gQUVTX0dDTV9kZWNyeXB0KGRhdGEpIHtcbiAgICAgIHZhciByZXN1bHQxID0gdGhpcy5BRVNfR0NNX0RlY3J5cHRfcHJvY2VzcyhkYXRhKS5yZXN1bHQ7XG4gICAgICB2YXIgcmVzdWx0MiA9IHRoaXMuQUVTX0dDTV9EZWNyeXB0X2ZpbmlzaCgpLnJlc3VsdDtcblxuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHJlc3VsdDEubGVuZ3RoICsgcmVzdWx0Mi5sZW5ndGgpO1xuICAgICAgaWYgKHJlc3VsdDEubGVuZ3RoKSByZXN1bHQuc2V0KHJlc3VsdDEpO1xuICAgICAgaWYgKHJlc3VsdDIubGVuZ3RoKSByZXN1bHQuc2V0KHJlc3VsdDIsIHJlc3VsdDEubGVuZ3RoKTtcbiAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdBRVNfR0NNX2VuY3J5cHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfR0NNX2VuY3J5cHQoZGF0YSkge1xuICAgICAgdmFyIHJlc3VsdDEgPSB0aGlzLkFFU19HQ01fRW5jcnlwdF9wcm9jZXNzKGRhdGEpLnJlc3VsdDtcbiAgICAgIHZhciByZXN1bHQyID0gdGhpcy5BRVNfR0NNX0VuY3J5cHRfZmluaXNoKCkucmVzdWx0O1xuXG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0MS5sZW5ndGggKyByZXN1bHQyLmxlbmd0aCk7XG4gICAgICBpZiAocmVzdWx0MS5sZW5ndGgpIHJlc3VsdC5zZXQocmVzdWx0MSk7XG4gICAgICBpZiAocmVzdWx0Mi5sZW5ndGgpIHJlc3VsdC5zZXQocmVzdWx0MiwgcmVzdWx0MS5sZW5ndGgpO1xuICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ0FFU19HQ01fcmVzZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBRVNfR0NNX3Jlc2V0KGtleSwgdGFnU2l6ZSwgbm9uY2UsIGFkYXRhLCBjb3VudGVyLCBpdikge1xuICAgICAgdGhpcy5BRVNfcmVzZXQoa2V5LCB1bmRlZmluZWQsIGZhbHNlKTtcblxuICAgICAgdmFyIGFzbSA9IHRoaXMuYXNtO1xuICAgICAgdmFyIGhlYXAgPSB0aGlzLmhlYXA7XG5cbiAgICAgIGFzbS5nY21faW5pdCgpO1xuXG4gICAgICB2YXIgdGFnU2l6ZSA9IHRhZ1NpemU7XG4gICAgICBpZiAodGFnU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghKDAsIF91dGlscy5pc19udW1iZXIpKHRhZ1NpemUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YWdTaXplIG11c3QgYmUgYSBudW1iZXInKTtcblxuICAgICAgICBpZiAodGFnU2l6ZSA8IDQgfHwgdGFnU2l6ZSA+IDE2KSB0aHJvdyBuZXcgX2Vycm9ycy5JbGxlZ2FsQXJndW1lbnRFcnJvcignaWxsZWdhbCB0YWdTaXplIHZhbHVlJyk7XG5cbiAgICAgICAgdGhpcy50YWdTaXplID0gdGFnU2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFnU2l6ZSA9IDE2O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoISgwLCBfdXRpbHMuaXNfYnl0ZXMpKG5vbmNlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgbm9uY2UgdHlwZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ub25jZSA9IG5vbmNlO1xuXG4gICAgICAgIHZhciBub25jZWxlbiA9IG5vbmNlLmxlbmd0aCB8fCAwLFxuICAgICAgICAgICAgbm9uY2VidWYgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgIGlmIChub25jZWxlbiAhPT0gMTIpIHtcbiAgICAgICAgICB0aGlzLl9nY21fbWFjX3Byb2Nlc3Mobm9uY2UpO1xuXG4gICAgICAgICAgaGVhcFswXSA9IGhlYXBbMV0gPSBoZWFwWzJdID0gaGVhcFszXSA9IGhlYXBbNF0gPSBoZWFwWzVdID0gaGVhcFs2XSA9IGhlYXBbN10gPSBoZWFwWzhdID0gaGVhcFs5XSA9IGhlYXBbMTBdID0gMCwgaGVhcFsxMV0gPSBub25jZWxlbiA+Pj4gMjksIGhlYXBbMTJdID0gbm9uY2VsZW4gPj4+IDIxICYgMjU1LCBoZWFwWzEzXSA9IG5vbmNlbGVuID4+PiAxMyAmIDI1NSwgaGVhcFsxNF0gPSBub25jZWxlbiA+Pj4gNSAmIDI1NSwgaGVhcFsxNV0gPSBub25jZWxlbiA8PCAzICYgMjU1O1xuICAgICAgICAgIGFzbS5tYWMoX2FlczIuQUVTX2FzbS5NQUMuR0NNLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSwgMTYpO1xuXG4gICAgICAgICAgYXNtLmdldF9pdihfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSk7XG4gICAgICAgICAgYXNtLnNldF9pdigpO1xuXG4gICAgICAgICAgbm9uY2VidWYuc2V0KGhlYXAuc3ViYXJyYXkoMCwgMTYpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub25jZWJ1Zi5zZXQobm9uY2UpO1xuICAgICAgICAgIG5vbmNlYnVmWzE1XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9uY2V2aWV3ID0gbmV3IERhdGFWaWV3KG5vbmNlYnVmLmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZ2FtbWEwID0gbm9uY2V2aWV3LmdldFVpbnQzMigxMik7XG5cbiAgICAgICAgYXNtLnNldF9ub25jZShub25jZXZpZXcuZ2V0VWludDMyKDApLCBub25jZXZpZXcuZ2V0VWludDMyKDQpLCBub25jZXZpZXcuZ2V0VWludDMyKDgpLCAwKTtcbiAgICAgICAgYXNtLnNldF9tYXNrKDAsIDAsIDAsIDB4ZmZmZmZmZmYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub25jZSBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWRhdGEgIT09IHVuZGVmaW5lZCAmJiBhZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISgwLCBfdXRpbHMuaXNfYnl0ZXMpKGFkYXRhKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgYWRhdGEgdHlwZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkYXRhLmxlbmd0aCA+IF9BRVNfR0NNX2RhdGFfbWF4TGVuZ3RoKSB0aHJvdyBuZXcgX2Vycm9ycy5JbGxlZ2FsQXJndW1lbnRFcnJvcignaWxsZWdhbCBhZGF0YSBsZW5ndGgnKTtcblxuICAgICAgICBpZiAoYWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5hZGF0YSA9IGFkYXRhO1xuICAgICAgICAgIHRoaXMuX2djbV9tYWNfcHJvY2VzcyhhZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGF0YSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRhdGEgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY291bnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghKDAsIF91dGlscy5pc19udW1iZXIpKGNvdW50ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb3VudGVyIG11c3QgYmUgYSBudW1iZXInKTtcblxuICAgICAgICBpZiAoY291bnRlciA8IDEgfHwgY291bnRlciA+IDB4ZmZmZmZmZmYpIHRocm93IG5ldyBSYW5nZUVycm9yKCdjb3VudGVyIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlcicpO1xuXG4gICAgICAgIHRoaXMuY291bnRlciA9IGNvdW50ZXI7XG4gICAgICAgIGFzbS5zZXRfY291bnRlcigwLCAwLCAwLCB0aGlzLmdhbW1hMCArIGNvdW50ZXIgfCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY291bnRlciA9IDE7XG4gICAgICAgIGFzbS5zZXRfY291bnRlcigwLCAwLCAwLCB0aGlzLmdhbW1hMCArIDEgfCAwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCEoMCwgX3V0aWxzLmlzX251bWJlcikoaXYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdiBtdXN0IGJlIGEgbnVtYmVyJyk7XG5cbiAgICAgICAgdGhpcy5pdiA9IGl2O1xuXG4gICAgICAgIHRoaXMuQUVTX3NldF9pdihpdik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19nY21fbWFjX3Byb2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2NtX21hY19wcm9jZXNzKGRhdGEpIHtcbiAgICAgIHZhciBoZWFwID0gdGhpcy5oZWFwLFxuICAgICAgICAgIGFzbSA9IHRoaXMuYXNtLFxuICAgICAgICAgIGRwb3MgPSAwLFxuICAgICAgICAgIGRsZW4gPSBkYXRhLmxlbmd0aCB8fCAwLFxuICAgICAgICAgIHdsZW4gPSAwO1xuXG4gICAgICB3aGlsZSAoZGxlbiA+IDApIHtcbiAgICAgICAgd2xlbiA9ICgwLCBfdXRpbHMuX2hlYXBfd3JpdGUpKGhlYXAsIDAsIGRhdGEsIGRwb3MsIGRsZW4pO1xuICAgICAgICBkcG9zICs9IHdsZW47XG4gICAgICAgIGRsZW4gLT0gd2xlbjtcblxuICAgICAgICB3aGlsZSAod2xlbiAmIDE1KSB7XG4gICAgICAgICAgaGVhcFt3bGVuKytdID0gMDtcbiAgICAgICAgfWFzbS5tYWMoX2FlczIuQUVTX2FzbS5NQUMuR0NNLCBfYWVzMi5BRVNfYXNtLkhFQVBfREFUQSwgd2xlbik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBBRVNfR0NNO1xufShfYWVzLkFFUyk7XG5cbnZhciBBRVNfR0NNX0VuY3J5cHQgPSBleHBvcnRzLkFFU19HQ01fRW5jcnlwdCA9IGZ1bmN0aW9uIChfQUVTX0dDTSkge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBRVNfR0NNX0VuY3J5cHQsIF9BRVNfR0NNKTtcblxuICBmdW5jdGlvbiBBRVNfR0NNX0VuY3J5cHQoa2V5LCBub25jZSwgYWRhdGEsIHRhZ1NpemUsIGhlYXAsIGFzbSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEFFU19HQ01fRW5jcnlwdCk7XG4gICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKEFFU19HQ01fRW5jcnlwdC5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQUVTX0dDTV9FbmNyeXB0KSkuY2FsbCh0aGlzLCBrZXksIG5vbmNlLCBhZGF0YSwgdGFnU2l6ZSwgaGVhcCwgYXNtKSk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShBRVNfR0NNX0VuY3J5cHQsIFt7XG4gICAga2V5OiAncHJvY2VzcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByb2Nlc3MoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0dDTV9FbmNyeXB0X3Byb2Nlc3MoZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZmluaXNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmluaXNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuQUVTX0dDTV9FbmNyeXB0X2ZpbmlzaCgpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQUVTX0dDTV9FbmNyeXB0O1xufShBRVNfR0NNKTtcblxudmFyIEFFU19HQ01fRGVjcnlwdCA9IGV4cG9ydHMuQUVTX0dDTV9EZWNyeXB0ID0gZnVuY3Rpb24gKF9BRVNfR0NNMikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBRVNfR0NNX0RlY3J5cHQsIF9BRVNfR0NNMik7XG5cbiAgZnVuY3Rpb24gQUVTX0dDTV9EZWNyeXB0KGtleSwgbm9uY2UsIGFkYXRhLCB0YWdTaXplLCBoZWFwLCBhc20pIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBBRVNfR0NNX0RlY3J5cHQpO1xuICAgIHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChBRVNfR0NNX0RlY3J5cHQuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKEFFU19HQ01fRGVjcnlwdCkpLmNhbGwodGhpcywga2V5LCBub25jZSwgYWRhdGEsIHRhZ1NpemUsIGhlYXAsIGFzbSkpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQUVTX0dDTV9EZWNyeXB0LCBbe1xuICAgIGtleTogJ3Byb2Nlc3MnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9jZXNzKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19HQ01fRGVjcnlwdF9wcm9jZXNzKGRhdGEpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZpbmlzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgIHJldHVybiB0aGlzLkFFU19HQ01fRGVjcnlwdF9maW5pc2goKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEFFU19HQ01fRGVjcnlwdDtcbn0oQUVTX0dDTSk7XG5cbn0se1wiLi4vLi4vZXJyb3JzXCI6MTQsXCIuLi8uLi91dGlsc1wiOjE5LFwiLi4vYWVzXCI6MyxcIi4uL2Flcy5hc21cIjoyLFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCI6MjksXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIjozNixcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiOjM3LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCI6MzgsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiOjM5fV0sMTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZSA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlJyk7XG5cbnZhciBfY3JlYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZSk7XG5cbmV4cG9ydHMuSWxsZWdhbFN0YXRlRXJyb3IgPSBJbGxlZ2FsU3RhdGVFcnJvcjtcbmV4cG9ydHMuSWxsZWdhbEFyZ3VtZW50RXJyb3IgPSBJbGxlZ2FsQXJndW1lbnRFcnJvcjtcbmV4cG9ydHMuU2VjdXJpdHlFcnJvciA9IFNlY3VyaXR5RXJyb3I7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIElsbGVnYWxTdGF0ZUVycm9yKCkge1xuICB2YXIgZXJyID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgdGhpcy5tZXNzYWdlID0gZXJyLm1lc3NhZ2UsIHRoaXMuc3RhY2sgPSBlcnIuc3RhY2s7XG59XG5JbGxlZ2FsU3RhdGVFcnJvci5wcm90b3R5cGUgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkoRXJyb3IucHJvdG90eXBlLCB7IG5hbWU6IHsgdmFsdWU6ICdJbGxlZ2FsU3RhdGVFcnJvcicgfSB9KTtcblxuZnVuY3Rpb24gSWxsZWdhbEFyZ3VtZW50RXJyb3IoKSB7XG4gIHZhciBlcnIgPSBFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLm1lc3NhZ2UgPSBlcnIubWVzc2FnZSwgdGhpcy5zdGFjayA9IGVyci5zdGFjaztcbn1cbklsbGVnYWxBcmd1bWVudEVycm9yLnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShFcnJvci5wcm90b3R5cGUsIHsgbmFtZTogeyB2YWx1ZTogJ0lsbGVnYWxBcmd1bWVudEVycm9yJyB9IH0pO1xuXG5mdW5jdGlvbiBTZWN1cml0eUVycm9yKCkge1xuICB2YXIgZXJyID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgdGhpcy5tZXNzYWdlID0gZXJyLm1lc3NhZ2UsIHRoaXMuc3RhY2sgPSBlcnIuc3RhY2s7XG59XG5TZWN1cml0eUVycm9yLnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShFcnJvci5wcm90b3R5cGUsIHsgbmFtZTogeyB2YWx1ZTogJ1NlY3VyaXR5RXJyb3InIH0gfSk7XG5cbn0se1wiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGVcIjoyNX1dLDE1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGFzaF9yZXNldCA9IGhhc2hfcmVzZXQ7XG5leHBvcnRzLmhhc2hfcHJvY2VzcyA9IGhhc2hfcHJvY2VzcztcbmV4cG9ydHMuaGFzaF9maW5pc2ggPSBoYXNoX2ZpbmlzaDtcblxudmFyIF91dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzJyk7XG5cbnZhciBfZXJyb3JzID0gX2RlcmVxXygnLi4vZXJyb3JzJyk7XG5cbmZ1bmN0aW9uIGhhc2hfcmVzZXQoKSB7XG4gIHRoaXMucmVzdWx0ID0gbnVsbDtcbiAgdGhpcy5wb3MgPSAwO1xuICB0aGlzLmxlbiA9IDA7XG5cbiAgdGhpcy5hc20ucmVzZXQoKTtcblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaGFzaF9wcm9jZXNzKGRhdGEpIHtcbiAgaWYgKHRoaXMucmVzdWx0ICE9PSBudWxsKSB0aHJvdyBuZXcgX2Vycm9ycy5JbGxlZ2FsU3RhdGVFcnJvcignc3RhdGUgbXVzdCBiZSByZXNldCBiZWZvcmUgcHJvY2Vzc2luZyBuZXcgZGF0YScpO1xuXG4gIGlmICgoMCwgX3V0aWxzLmlzX3N0cmluZykoZGF0YSkpIGRhdGEgPSAoMCwgX3V0aWxzLnN0cmluZ190b19ieXRlcykoZGF0YSk7XG5cbiAgaWYgKCgwLCBfdXRpbHMuaXNfYnVmZmVyKShkYXRhKSkgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuXG4gIGlmICghKDAsIF91dGlscy5pc19ieXRlcykoZGF0YSkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIGlzbid0IG9mIGV4cGVjdGVkIHR5cGVcIik7XG5cbiAgdmFyIGFzbSA9IHRoaXMuYXNtLFxuICAgICAgaGVhcCA9IHRoaXMuaGVhcCxcbiAgICAgIGhwb3MgPSB0aGlzLnBvcyxcbiAgICAgIGhsZW4gPSB0aGlzLmxlbixcbiAgICAgIGRwb3MgPSAwLFxuICAgICAgZGxlbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgd2xlbiA9IDA7XG5cbiAgd2hpbGUgKGRsZW4gPiAwKSB7XG4gICAgd2xlbiA9ICgwLCBfdXRpbHMuX2hlYXBfd3JpdGUpKGhlYXAsIGhwb3MgKyBobGVuLCBkYXRhLCBkcG9zLCBkbGVuKTtcbiAgICBobGVuICs9IHdsZW47XG4gICAgZHBvcyArPSB3bGVuO1xuICAgIGRsZW4gLT0gd2xlbjtcblxuICAgIHdsZW4gPSBhc20ucHJvY2VzcyhocG9zLCBobGVuKTtcblxuICAgIGhwb3MgKz0gd2xlbjtcbiAgICBobGVuIC09IHdsZW47XG5cbiAgICBpZiAoIWhsZW4pIGhwb3MgPSAwO1xuICB9XG5cbiAgdGhpcy5wb3MgPSBocG9zO1xuICB0aGlzLmxlbiA9IGhsZW47XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGhhc2hfZmluaXNoKCkge1xuICBpZiAodGhpcy5yZXN1bHQgIT09IG51bGwpIHRocm93IG5ldyBfZXJyb3JzLklsbGVnYWxTdGF0ZUVycm9yKCdzdGF0ZSBtdXN0IGJlIHJlc2V0IGJlZm9yZSBwcm9jZXNzaW5nIG5ldyBkYXRhJyk7XG5cbiAgdGhpcy5hc20uZmluaXNoKHRoaXMucG9zLCB0aGlzLmxlbiwgMCk7XG5cbiAgdGhpcy5yZXN1bHQgPSBuZXcgVWludDhBcnJheSh0aGlzLkhBU0hfU0laRSk7XG4gIHRoaXMucmVzdWx0LnNldCh0aGlzLmhlYXAuc3ViYXJyYXkoMCwgdGhpcy5IQVNIX1NJWkUpKTtcblxuICB0aGlzLnBvcyA9IDA7XG4gIHRoaXMubGVuID0gMDtcblxuICByZXR1cm4gdGhpcztcbn1cblxufSx7XCIuLi9lcnJvcnNcIjoxNCxcIi4uL3V0aWxzXCI6MTl9XSwxNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNIQTI1NiA9IHVuZGVmaW5lZDtcblxudmFyIF9zaGEgPSBfZGVyZXFfKCcuL3NoYTI1NicpO1xuXG52YXIgX3V0aWxzID0gX2RlcmVxXygnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBTSEEyNTYgZXhwb3J0c1xuICovXG5cbmZ1bmN0aW9uIHNoYTI1Nl9ieXRlcyhkYXRhKSB7XG4gIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBTeW50YXhFcnJvcignZGF0YSByZXF1aXJlZCcpO1xuICByZXR1cm4gKDAsIF9zaGEuZ2V0X3NoYTI1Nl9pbnN0YW5jZSkoKS5yZXNldCgpLnByb2Nlc3MoZGF0YSkuZmluaXNoKCkucmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzaGEyNTZfaGV4KGRhdGEpIHtcbiAgdmFyIHJlc3VsdCA9IHNoYTI1Nl9ieXRlcyhkYXRhKTtcbiAgcmV0dXJuICgwLCBfdXRpbHMuYnl0ZXNfdG9faGV4KShyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBzaGEyNTZfYmFzZTY0KGRhdGEpIHtcbiAgdmFyIHJlc3VsdCA9IHNoYTI1Nl9ieXRlcyhkYXRhKTtcbiAgcmV0dXJuICgwLCBfdXRpbHMuYnl0ZXNfdG9fYmFzZTY0KShyZXN1bHQpO1xufVxuXG52YXIgU0hBMjU2ID0gZXhwb3J0cy5TSEEyNTYgPSBfc2hhLnNoYTI1Nl9jb25zdHJ1Y3RvcjtcblNIQTI1Ni5ieXRlcyA9IHNoYTI1Nl9ieXRlcztcblNIQTI1Ni5oZXggPSBzaGEyNTZfaGV4O1xuU0hBMjU2LmJhc2U2NCA9IHNoYTI1Nl9iYXNlNjQ7XG5cbn0se1wiLi4vLi4vdXRpbHNcIjoxOSxcIi4vc2hhMjU2XCI6MTh9XSwxNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaGEyNTZfYXNtID0gc2hhMjU2X2FzbTtcbmZ1bmN0aW9uIHNoYTI1Nl9hc20oc3RkbGliLCBmb3JlaWduLCBidWZmZXIpIHtcbiAgICBcInVzZSBhc21cIjtcblxuICAgIC8vIFNIQTI1NiBzdGF0ZVxuXG4gICAgdmFyIEgwID0gMCxcbiAgICAgICAgSDEgPSAwLFxuICAgICAgICBIMiA9IDAsXG4gICAgICAgIEgzID0gMCxcbiAgICAgICAgSDQgPSAwLFxuICAgICAgICBINSA9IDAsXG4gICAgICAgIEg2ID0gMCxcbiAgICAgICAgSDcgPSAwLFxuICAgICAgICBUT1RBTDAgPSAwLFxuICAgICAgICBUT1RBTDEgPSAwO1xuXG4gICAgLy8gSE1BQyBzdGF0ZVxuICAgIHZhciBJMCA9IDAsXG4gICAgICAgIEkxID0gMCxcbiAgICAgICAgSTIgPSAwLFxuICAgICAgICBJMyA9IDAsXG4gICAgICAgIEk0ID0gMCxcbiAgICAgICAgSTUgPSAwLFxuICAgICAgICBJNiA9IDAsXG4gICAgICAgIEk3ID0gMCxcbiAgICAgICAgTzAgPSAwLFxuICAgICAgICBPMSA9IDAsXG4gICAgICAgIE8yID0gMCxcbiAgICAgICAgTzMgPSAwLFxuICAgICAgICBPNCA9IDAsXG4gICAgICAgIE81ID0gMCxcbiAgICAgICAgTzYgPSAwLFxuICAgICAgICBPNyA9IDA7XG5cbiAgICAvLyBJL08gYnVmZmVyXG4gICAgdmFyIEhFQVAgPSBuZXcgc3RkbGliLlVpbnQ4QXJyYXkoYnVmZmVyKTtcblxuICAgIGZ1bmN0aW9uIF9jb3JlKHcwLCB3MSwgdzIsIHczLCB3NCwgdzUsIHc2LCB3NywgdzgsIHc5LCB3MTAsIHcxMSwgdzEyLCB3MTMsIHcxNCwgdzE1KSB7XG4gICAgICAgIHcwID0gdzAgfCAwO1xuICAgICAgICB3MSA9IHcxIHwgMDtcbiAgICAgICAgdzIgPSB3MiB8IDA7XG4gICAgICAgIHczID0gdzMgfCAwO1xuICAgICAgICB3NCA9IHc0IHwgMDtcbiAgICAgICAgdzUgPSB3NSB8IDA7XG4gICAgICAgIHc2ID0gdzYgfCAwO1xuICAgICAgICB3NyA9IHc3IHwgMDtcbiAgICAgICAgdzggPSB3OCB8IDA7XG4gICAgICAgIHc5ID0gdzkgfCAwO1xuICAgICAgICB3MTAgPSB3MTAgfCAwO1xuICAgICAgICB3MTEgPSB3MTEgfCAwO1xuICAgICAgICB3MTIgPSB3MTIgfCAwO1xuICAgICAgICB3MTMgPSB3MTMgfCAwO1xuICAgICAgICB3MTQgPSB3MTQgfCAwO1xuICAgICAgICB3MTUgPSB3MTUgfCAwO1xuXG4gICAgICAgIHZhciBhID0gMCxcbiAgICAgICAgICAgIGIgPSAwLFxuICAgICAgICAgICAgYyA9IDAsXG4gICAgICAgICAgICBkID0gMCxcbiAgICAgICAgICAgIGUgPSAwLFxuICAgICAgICAgICAgZiA9IDAsXG4gICAgICAgICAgICBnID0gMCxcbiAgICAgICAgICAgIGggPSAwO1xuXG4gICAgICAgIGEgPSBIMDtcbiAgICAgICAgYiA9IEgxO1xuICAgICAgICBjID0gSDI7XG4gICAgICAgIGQgPSBIMztcbiAgICAgICAgZSA9IEg0O1xuICAgICAgICBmID0gSDU7XG4gICAgICAgIGcgPSBINjtcbiAgICAgICAgaCA9IEg3O1xuXG4gICAgICAgIC8vIDBcbiAgICAgICAgaCA9IHcwICsgaCArIChlID4+PiA2IF4gZSA+Pj4gMTEgXiBlID4+PiAyNSBeIGUgPDwgMjYgXiBlIDw8IDIxIF4gZSA8PCA3KSArIChnIF4gZSAmIChmIF4gZykpICsgMHg0MjhhMmY5OCB8IDA7XG4gICAgICAgIGQgPSBkICsgaCB8IDA7XG4gICAgICAgIGggPSBoICsgKGEgJiBiIF4gYyAmIChhIF4gYikpICsgKGEgPj4+IDIgXiBhID4+PiAxMyBeIGEgPj4+IDIyIF4gYSA8PCAzMCBeIGEgPDwgMTkgXiBhIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMVxuICAgICAgICBnID0gdzEgKyBnICsgKGQgPj4+IDYgXiBkID4+PiAxMSBeIGQgPj4+IDI1IF4gZCA8PCAyNiBeIGQgPDwgMjEgXiBkIDw8IDcpICsgKGYgXiBkICYgKGUgXiBmKSkgKyAweDcxMzc0NDkxIHwgMDtcbiAgICAgICAgYyA9IGMgKyBnIHwgMDtcbiAgICAgICAgZyA9IGcgKyAoaCAmIGEgXiBiICYgKGggXiBhKSkgKyAoaCA+Pj4gMiBeIGggPj4+IDEzIF4gaCA+Pj4gMjIgXiBoIDw8IDMwIF4gaCA8PCAxOSBeIGggPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAyXG4gICAgICAgIGYgPSB3MiArIGYgKyAoYyA+Pj4gNiBeIGMgPj4+IDExIF4gYyA+Pj4gMjUgXiBjIDw8IDI2IF4gYyA8PCAyMSBeIGMgPDwgNykgKyAoZSBeIGMgJiAoZCBeIGUpKSArIDB4YjVjMGZiY2YgfCAwO1xuICAgICAgICBiID0gYiArIGYgfCAwO1xuICAgICAgICBmID0gZiArIChnICYgaCBeIGEgJiAoZyBeIGgpKSArIChnID4+PiAyIF4gZyA+Pj4gMTMgXiBnID4+PiAyMiBeIGcgPDwgMzAgXiBnIDw8IDE5IF4gZyA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDNcbiAgICAgICAgZSA9IHczICsgZSArIChiID4+PiA2IF4gYiA+Pj4gMTEgXiBiID4+PiAyNSBeIGIgPDwgMjYgXiBiIDw8IDIxIF4gYiA8PCA3KSArIChkIF4gYiAmIChjIF4gZCkpICsgMHhlOWI1ZGJhNSB8IDA7XG4gICAgICAgIGEgPSBhICsgZSB8IDA7XG4gICAgICAgIGUgPSBlICsgKGYgJiBnIF4gaCAmIChmIF4gZykpICsgKGYgPj4+IDIgXiBmID4+PiAxMyBeIGYgPj4+IDIyIF4gZiA8PCAzMCBeIGYgPDwgMTkgXiBmIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNFxuICAgICAgICBkID0gdzQgKyBkICsgKGEgPj4+IDYgXiBhID4+PiAxMSBeIGEgPj4+IDI1IF4gYSA8PCAyNiBeIGEgPDwgMjEgXiBhIDw8IDcpICsgKGMgXiBhICYgKGIgXiBjKSkgKyAweDM5NTZjMjViIHwgMDtcbiAgICAgICAgaCA9IGggKyBkIHwgMDtcbiAgICAgICAgZCA9IGQgKyAoZSAmIGYgXiBnICYgKGUgXiBmKSkgKyAoZSA+Pj4gMiBeIGUgPj4+IDEzIF4gZSA+Pj4gMjIgXiBlIDw8IDMwIF4gZSA8PCAxOSBeIGUgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA1XG4gICAgICAgIGMgPSB3NSArIGMgKyAoaCA+Pj4gNiBeIGggPj4+IDExIF4gaCA+Pj4gMjUgXiBoIDw8IDI2IF4gaCA8PCAyMSBeIGggPDwgNykgKyAoYiBeIGggJiAoYSBeIGIpKSArIDB4NTlmMTExZjEgfCAwO1xuICAgICAgICBnID0gZyArIGMgfCAwO1xuICAgICAgICBjID0gYyArIChkICYgZSBeIGYgJiAoZCBeIGUpKSArIChkID4+PiAyIF4gZCA+Pj4gMTMgXiBkID4+PiAyMiBeIGQgPDwgMzAgXiBkIDw8IDE5IF4gZCA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDZcbiAgICAgICAgYiA9IHc2ICsgYiArIChnID4+PiA2IF4gZyA+Pj4gMTEgXiBnID4+PiAyNSBeIGcgPDwgMjYgXiBnIDw8IDIxIF4gZyA8PCA3KSArIChhIF4gZyAmIChoIF4gYSkpICsgMHg5MjNmODJhNCB8IDA7XG4gICAgICAgIGYgPSBmICsgYiB8IDA7XG4gICAgICAgIGIgPSBiICsgKGMgJiBkIF4gZSAmIChjIF4gZCkpICsgKGMgPj4+IDIgXiBjID4+PiAxMyBeIGMgPj4+IDIyIF4gYyA8PCAzMCBeIGMgPDwgMTkgXiBjIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gN1xuICAgICAgICBhID0gdzcgKyBhICsgKGYgPj4+IDYgXiBmID4+PiAxMSBeIGYgPj4+IDI1IF4gZiA8PCAyNiBeIGYgPDwgMjEgXiBmIDw8IDcpICsgKGggXiBmICYgKGcgXiBoKSkgKyAweGFiMWM1ZWQ1IHwgMDtcbiAgICAgICAgZSA9IGUgKyBhIHwgMDtcbiAgICAgICAgYSA9IGEgKyAoYiAmIGMgXiBkICYgKGIgXiBjKSkgKyAoYiA+Pj4gMiBeIGIgPj4+IDEzIF4gYiA+Pj4gMjIgXiBiIDw8IDMwIF4gYiA8PCAxOSBeIGIgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA4XG4gICAgICAgIGggPSB3OCArIGggKyAoZSA+Pj4gNiBeIGUgPj4+IDExIF4gZSA+Pj4gMjUgXiBlIDw8IDI2IF4gZSA8PCAyMSBeIGUgPDwgNykgKyAoZyBeIGUgJiAoZiBeIGcpKSArIDB4ZDgwN2FhOTggfCAwO1xuICAgICAgICBkID0gZCArIGggfCAwO1xuICAgICAgICBoID0gaCArIChhICYgYiBeIGMgJiAoYSBeIGIpKSArIChhID4+PiAyIF4gYSA+Pj4gMTMgXiBhID4+PiAyMiBeIGEgPDwgMzAgXiBhIDw8IDE5IF4gYSA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDlcbiAgICAgICAgZyA9IHc5ICsgZyArIChkID4+PiA2IF4gZCA+Pj4gMTEgXiBkID4+PiAyNSBeIGQgPDwgMjYgXiBkIDw8IDIxIF4gZCA8PCA3KSArIChmIF4gZCAmIChlIF4gZikpICsgMHgxMjgzNWIwMSB8IDA7XG4gICAgICAgIGMgPSBjICsgZyB8IDA7XG4gICAgICAgIGcgPSBnICsgKGggJiBhIF4gYiAmIChoIF4gYSkpICsgKGggPj4+IDIgXiBoID4+PiAxMyBeIGggPj4+IDIyIF4gaCA8PCAzMCBeIGggPDwgMTkgXiBoIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMTBcbiAgICAgICAgZiA9IHcxMCArIGYgKyAoYyA+Pj4gNiBeIGMgPj4+IDExIF4gYyA+Pj4gMjUgXiBjIDw8IDI2IF4gYyA8PCAyMSBeIGMgPDwgNykgKyAoZSBeIGMgJiAoZCBeIGUpKSArIDB4MjQzMTg1YmUgfCAwO1xuICAgICAgICBiID0gYiArIGYgfCAwO1xuICAgICAgICBmID0gZiArIChnICYgaCBeIGEgJiAoZyBeIGgpKSArIChnID4+PiAyIF4gZyA+Pj4gMTMgXiBnID4+PiAyMiBeIGcgPDwgMzAgXiBnIDw8IDE5IF4gZyA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDExXG4gICAgICAgIGUgPSB3MTEgKyBlICsgKGIgPj4+IDYgXiBiID4+PiAxMSBeIGIgPj4+IDI1IF4gYiA8PCAyNiBeIGIgPDwgMjEgXiBiIDw8IDcpICsgKGQgXiBiICYgKGMgXiBkKSkgKyAweDU1MGM3ZGMzIHwgMDtcbiAgICAgICAgYSA9IGEgKyBlIHwgMDtcbiAgICAgICAgZSA9IGUgKyAoZiAmIGcgXiBoICYgKGYgXiBnKSkgKyAoZiA+Pj4gMiBeIGYgPj4+IDEzIF4gZiA+Pj4gMjIgXiBmIDw8IDMwIF4gZiA8PCAxOSBeIGYgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAxMlxuICAgICAgICBkID0gdzEyICsgZCArIChhID4+PiA2IF4gYSA+Pj4gMTEgXiBhID4+PiAyNSBeIGEgPDwgMjYgXiBhIDw8IDIxIF4gYSA8PCA3KSArIChjIF4gYSAmIChiIF4gYykpICsgMHg3MmJlNWQ3NCB8IDA7XG4gICAgICAgIGggPSBoICsgZCB8IDA7XG4gICAgICAgIGQgPSBkICsgKGUgJiBmIF4gZyAmIChlIF4gZikpICsgKGUgPj4+IDIgXiBlID4+PiAxMyBeIGUgPj4+IDIyIF4gZSA8PCAzMCBeIGUgPDwgMTkgXiBlIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMTNcbiAgICAgICAgYyA9IHcxMyArIGMgKyAoaCA+Pj4gNiBeIGggPj4+IDExIF4gaCA+Pj4gMjUgXiBoIDw8IDI2IF4gaCA8PCAyMSBeIGggPDwgNykgKyAoYiBeIGggJiAoYSBeIGIpKSArIDB4ODBkZWIxZmUgfCAwO1xuICAgICAgICBnID0gZyArIGMgfCAwO1xuICAgICAgICBjID0gYyArIChkICYgZSBeIGYgJiAoZCBeIGUpKSArIChkID4+PiAyIF4gZCA+Pj4gMTMgXiBkID4+PiAyMiBeIGQgPDwgMzAgXiBkIDw8IDE5IF4gZCA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDE0XG4gICAgICAgIGIgPSB3MTQgKyBiICsgKGcgPj4+IDYgXiBnID4+PiAxMSBeIGcgPj4+IDI1IF4gZyA8PCAyNiBeIGcgPDwgMjEgXiBnIDw8IDcpICsgKGEgXiBnICYgKGggXiBhKSkgKyAweDliZGMwNmE3IHwgMDtcbiAgICAgICAgZiA9IGYgKyBiIHwgMDtcbiAgICAgICAgYiA9IGIgKyAoYyAmIGQgXiBlICYgKGMgXiBkKSkgKyAoYyA+Pj4gMiBeIGMgPj4+IDEzIF4gYyA+Pj4gMjIgXiBjIDw8IDMwIF4gYyA8PCAxOSBeIGMgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAxNVxuICAgICAgICBhID0gdzE1ICsgYSArIChmID4+PiA2IF4gZiA+Pj4gMTEgXiBmID4+PiAyNSBeIGYgPDwgMjYgXiBmIDw8IDIxIF4gZiA8PCA3KSArIChoIF4gZiAmIChnIF4gaCkpICsgMHhjMTliZjE3NCB8IDA7XG4gICAgICAgIGUgPSBlICsgYSB8IDA7XG4gICAgICAgIGEgPSBhICsgKGIgJiBjIF4gZCAmIChiIF4gYykpICsgKGIgPj4+IDIgXiBiID4+PiAxMyBeIGIgPj4+IDIyIF4gYiA8PCAzMCBeIGIgPDwgMTkgXiBiIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMTZcbiAgICAgICAgdzAgPSAodzEgPj4+IDcgXiB3MSA+Pj4gMTggXiB3MSA+Pj4gMyBeIHcxIDw8IDI1IF4gdzEgPDwgMTQpICsgKHcxNCA+Pj4gMTcgXiB3MTQgPj4+IDE5IF4gdzE0ID4+PiAxMCBeIHcxNCA8PCAxNSBeIHcxNCA8PCAxMykgKyB3MCArIHc5IHwgMDtcbiAgICAgICAgaCA9IHcwICsgaCArIChlID4+PiA2IF4gZSA+Pj4gMTEgXiBlID4+PiAyNSBeIGUgPDwgMjYgXiBlIDw8IDIxIF4gZSA8PCA3KSArIChnIF4gZSAmIChmIF4gZykpICsgMHhlNDliNjljMSB8IDA7XG4gICAgICAgIGQgPSBkICsgaCB8IDA7XG4gICAgICAgIGggPSBoICsgKGEgJiBiIF4gYyAmIChhIF4gYikpICsgKGEgPj4+IDIgXiBhID4+PiAxMyBeIGEgPj4+IDIyIF4gYSA8PCAzMCBeIGEgPDwgMTkgXiBhIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMTdcbiAgICAgICAgdzEgPSAodzIgPj4+IDcgXiB3MiA+Pj4gMTggXiB3MiA+Pj4gMyBeIHcyIDw8IDI1IF4gdzIgPDwgMTQpICsgKHcxNSA+Pj4gMTcgXiB3MTUgPj4+IDE5IF4gdzE1ID4+PiAxMCBeIHcxNSA8PCAxNSBeIHcxNSA8PCAxMykgKyB3MSArIHcxMCB8IDA7XG4gICAgICAgIGcgPSB3MSArIGcgKyAoZCA+Pj4gNiBeIGQgPj4+IDExIF4gZCA+Pj4gMjUgXiBkIDw8IDI2IF4gZCA8PCAyMSBeIGQgPDwgNykgKyAoZiBeIGQgJiAoZSBeIGYpKSArIDB4ZWZiZTQ3ODYgfCAwO1xuICAgICAgICBjID0gYyArIGcgfCAwO1xuICAgICAgICBnID0gZyArIChoICYgYSBeIGIgJiAoaCBeIGEpKSArIChoID4+PiAyIF4gaCA+Pj4gMTMgXiBoID4+PiAyMiBeIGggPDwgMzAgXiBoIDw8IDE5IF4gaCA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDE4XG4gICAgICAgIHcyID0gKHczID4+PiA3IF4gdzMgPj4+IDE4IF4gdzMgPj4+IDMgXiB3MyA8PCAyNSBeIHczIDw8IDE0KSArICh3MCA+Pj4gMTcgXiB3MCA+Pj4gMTkgXiB3MCA+Pj4gMTAgXiB3MCA8PCAxNSBeIHcwIDw8IDEzKSArIHcyICsgdzExIHwgMDtcbiAgICAgICAgZiA9IHcyICsgZiArIChjID4+PiA2IF4gYyA+Pj4gMTEgXiBjID4+PiAyNSBeIGMgPDwgMjYgXiBjIDw8IDIxIF4gYyA8PCA3KSArIChlIF4gYyAmIChkIF4gZSkpICsgMHgwZmMxOWRjNiB8IDA7XG4gICAgICAgIGIgPSBiICsgZiB8IDA7XG4gICAgICAgIGYgPSBmICsgKGcgJiBoIF4gYSAmIChnIF4gaCkpICsgKGcgPj4+IDIgXiBnID4+PiAxMyBeIGcgPj4+IDIyIF4gZyA8PCAzMCBeIGcgPDwgMTkgXiBnIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMTlcbiAgICAgICAgdzMgPSAodzQgPj4+IDcgXiB3NCA+Pj4gMTggXiB3NCA+Pj4gMyBeIHc0IDw8IDI1IF4gdzQgPDwgMTQpICsgKHcxID4+PiAxNyBeIHcxID4+PiAxOSBeIHcxID4+PiAxMCBeIHcxIDw8IDE1IF4gdzEgPDwgMTMpICsgdzMgKyB3MTIgfCAwO1xuICAgICAgICBlID0gdzMgKyBlICsgKGIgPj4+IDYgXiBiID4+PiAxMSBeIGIgPj4+IDI1IF4gYiA8PCAyNiBeIGIgPDwgMjEgXiBiIDw8IDcpICsgKGQgXiBiICYgKGMgXiBkKSkgKyAweDI0MGNhMWNjIHwgMDtcbiAgICAgICAgYSA9IGEgKyBlIHwgMDtcbiAgICAgICAgZSA9IGUgKyAoZiAmIGcgXiBoICYgKGYgXiBnKSkgKyAoZiA+Pj4gMiBeIGYgPj4+IDEzIF4gZiA+Pj4gMjIgXiBmIDw8IDMwIF4gZiA8PCAxOSBeIGYgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAyMFxuICAgICAgICB3NCA9ICh3NSA+Pj4gNyBeIHc1ID4+PiAxOCBeIHc1ID4+PiAzIF4gdzUgPDwgMjUgXiB3NSA8PCAxNCkgKyAodzIgPj4+IDE3IF4gdzIgPj4+IDE5IF4gdzIgPj4+IDEwIF4gdzIgPDwgMTUgXiB3MiA8PCAxMykgKyB3NCArIHcxMyB8IDA7XG4gICAgICAgIGQgPSB3NCArIGQgKyAoYSA+Pj4gNiBeIGEgPj4+IDExIF4gYSA+Pj4gMjUgXiBhIDw8IDI2IF4gYSA8PCAyMSBeIGEgPDwgNykgKyAoYyBeIGEgJiAoYiBeIGMpKSArIDB4MmRlOTJjNmYgfCAwO1xuICAgICAgICBoID0gaCArIGQgfCAwO1xuICAgICAgICBkID0gZCArIChlICYgZiBeIGcgJiAoZSBeIGYpKSArIChlID4+PiAyIF4gZSA+Pj4gMTMgXiBlID4+PiAyMiBeIGUgPDwgMzAgXiBlIDw8IDE5IF4gZSA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDIxXG4gICAgICAgIHc1ID0gKHc2ID4+PiA3IF4gdzYgPj4+IDE4IF4gdzYgPj4+IDMgXiB3NiA8PCAyNSBeIHc2IDw8IDE0KSArICh3MyA+Pj4gMTcgXiB3MyA+Pj4gMTkgXiB3MyA+Pj4gMTAgXiB3MyA8PCAxNSBeIHczIDw8IDEzKSArIHc1ICsgdzE0IHwgMDtcbiAgICAgICAgYyA9IHc1ICsgYyArIChoID4+PiA2IF4gaCA+Pj4gMTEgXiBoID4+PiAyNSBeIGggPDwgMjYgXiBoIDw8IDIxIF4gaCA8PCA3KSArIChiIF4gaCAmIChhIF4gYikpICsgMHg0YTc0ODRhYSB8IDA7XG4gICAgICAgIGcgPSBnICsgYyB8IDA7XG4gICAgICAgIGMgPSBjICsgKGQgJiBlIF4gZiAmIChkIF4gZSkpICsgKGQgPj4+IDIgXiBkID4+PiAxMyBeIGQgPj4+IDIyIF4gZCA8PCAzMCBeIGQgPDwgMTkgXiBkIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMjJcbiAgICAgICAgdzYgPSAodzcgPj4+IDcgXiB3NyA+Pj4gMTggXiB3NyA+Pj4gMyBeIHc3IDw8IDI1IF4gdzcgPDwgMTQpICsgKHc0ID4+PiAxNyBeIHc0ID4+PiAxOSBeIHc0ID4+PiAxMCBeIHc0IDw8IDE1IF4gdzQgPDwgMTMpICsgdzYgKyB3MTUgfCAwO1xuICAgICAgICBiID0gdzYgKyBiICsgKGcgPj4+IDYgXiBnID4+PiAxMSBeIGcgPj4+IDI1IF4gZyA8PCAyNiBeIGcgPDwgMjEgXiBnIDw8IDcpICsgKGEgXiBnICYgKGggXiBhKSkgKyAweDVjYjBhOWRjIHwgMDtcbiAgICAgICAgZiA9IGYgKyBiIHwgMDtcbiAgICAgICAgYiA9IGIgKyAoYyAmIGQgXiBlICYgKGMgXiBkKSkgKyAoYyA+Pj4gMiBeIGMgPj4+IDEzIF4gYyA+Pj4gMjIgXiBjIDw8IDMwIF4gYyA8PCAxOSBeIGMgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAyM1xuICAgICAgICB3NyA9ICh3OCA+Pj4gNyBeIHc4ID4+PiAxOCBeIHc4ID4+PiAzIF4gdzggPDwgMjUgXiB3OCA8PCAxNCkgKyAodzUgPj4+IDE3IF4gdzUgPj4+IDE5IF4gdzUgPj4+IDEwIF4gdzUgPDwgMTUgXiB3NSA8PCAxMykgKyB3NyArIHcwIHwgMDtcbiAgICAgICAgYSA9IHc3ICsgYSArIChmID4+PiA2IF4gZiA+Pj4gMTEgXiBmID4+PiAyNSBeIGYgPDwgMjYgXiBmIDw8IDIxIF4gZiA8PCA3KSArIChoIF4gZiAmIChnIF4gaCkpICsgMHg3NmY5ODhkYSB8IDA7XG4gICAgICAgIGUgPSBlICsgYSB8IDA7XG4gICAgICAgIGEgPSBhICsgKGIgJiBjIF4gZCAmIChiIF4gYykpICsgKGIgPj4+IDIgXiBiID4+PiAxMyBeIGIgPj4+IDIyIF4gYiA8PCAzMCBeIGIgPDwgMTkgXiBiIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMjRcbiAgICAgICAgdzggPSAodzkgPj4+IDcgXiB3OSA+Pj4gMTggXiB3OSA+Pj4gMyBeIHc5IDw8IDI1IF4gdzkgPDwgMTQpICsgKHc2ID4+PiAxNyBeIHc2ID4+PiAxOSBeIHc2ID4+PiAxMCBeIHc2IDw8IDE1IF4gdzYgPDwgMTMpICsgdzggKyB3MSB8IDA7XG4gICAgICAgIGggPSB3OCArIGggKyAoZSA+Pj4gNiBeIGUgPj4+IDExIF4gZSA+Pj4gMjUgXiBlIDw8IDI2IF4gZSA8PCAyMSBeIGUgPDwgNykgKyAoZyBeIGUgJiAoZiBeIGcpKSArIDB4OTgzZTUxNTIgfCAwO1xuICAgICAgICBkID0gZCArIGggfCAwO1xuICAgICAgICBoID0gaCArIChhICYgYiBeIGMgJiAoYSBeIGIpKSArIChhID4+PiAyIF4gYSA+Pj4gMTMgXiBhID4+PiAyMiBeIGEgPDwgMzAgXiBhIDw8IDE5IF4gYSA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDI1XG4gICAgICAgIHc5ID0gKHcxMCA+Pj4gNyBeIHcxMCA+Pj4gMTggXiB3MTAgPj4+IDMgXiB3MTAgPDwgMjUgXiB3MTAgPDwgMTQpICsgKHc3ID4+PiAxNyBeIHc3ID4+PiAxOSBeIHc3ID4+PiAxMCBeIHc3IDw8IDE1IF4gdzcgPDwgMTMpICsgdzkgKyB3MiB8IDA7XG4gICAgICAgIGcgPSB3OSArIGcgKyAoZCA+Pj4gNiBeIGQgPj4+IDExIF4gZCA+Pj4gMjUgXiBkIDw8IDI2IF4gZCA8PCAyMSBeIGQgPDwgNykgKyAoZiBeIGQgJiAoZSBeIGYpKSArIDB4YTgzMWM2NmQgfCAwO1xuICAgICAgICBjID0gYyArIGcgfCAwO1xuICAgICAgICBnID0gZyArIChoICYgYSBeIGIgJiAoaCBeIGEpKSArIChoID4+PiAyIF4gaCA+Pj4gMTMgXiBoID4+PiAyMiBeIGggPDwgMzAgXiBoIDw8IDE5IF4gaCA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDI2XG4gICAgICAgIHcxMCA9ICh3MTEgPj4+IDcgXiB3MTEgPj4+IDE4IF4gdzExID4+PiAzIF4gdzExIDw8IDI1IF4gdzExIDw8IDE0KSArICh3OCA+Pj4gMTcgXiB3OCA+Pj4gMTkgXiB3OCA+Pj4gMTAgXiB3OCA8PCAxNSBeIHc4IDw8IDEzKSArIHcxMCArIHczIHwgMDtcbiAgICAgICAgZiA9IHcxMCArIGYgKyAoYyA+Pj4gNiBeIGMgPj4+IDExIF4gYyA+Pj4gMjUgXiBjIDw8IDI2IF4gYyA8PCAyMSBeIGMgPDwgNykgKyAoZSBeIGMgJiAoZCBeIGUpKSArIDB4YjAwMzI3YzggfCAwO1xuICAgICAgICBiID0gYiArIGYgfCAwO1xuICAgICAgICBmID0gZiArIChnICYgaCBeIGEgJiAoZyBeIGgpKSArIChnID4+PiAyIF4gZyA+Pj4gMTMgXiBnID4+PiAyMiBeIGcgPDwgMzAgXiBnIDw8IDE5IF4gZyA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDI3XG4gICAgICAgIHcxMSA9ICh3MTIgPj4+IDcgXiB3MTIgPj4+IDE4IF4gdzEyID4+PiAzIF4gdzEyIDw8IDI1IF4gdzEyIDw8IDE0KSArICh3OSA+Pj4gMTcgXiB3OSA+Pj4gMTkgXiB3OSA+Pj4gMTAgXiB3OSA8PCAxNSBeIHc5IDw8IDEzKSArIHcxMSArIHc0IHwgMDtcbiAgICAgICAgZSA9IHcxMSArIGUgKyAoYiA+Pj4gNiBeIGIgPj4+IDExIF4gYiA+Pj4gMjUgXiBiIDw8IDI2IF4gYiA8PCAyMSBeIGIgPDwgNykgKyAoZCBeIGIgJiAoYyBeIGQpKSArIDB4YmY1OTdmYzcgfCAwO1xuICAgICAgICBhID0gYSArIGUgfCAwO1xuICAgICAgICBlID0gZSArIChmICYgZyBeIGggJiAoZiBeIGcpKSArIChmID4+PiAyIF4gZiA+Pj4gMTMgXiBmID4+PiAyMiBeIGYgPDwgMzAgXiBmIDw8IDE5IF4gZiA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDI4XG4gICAgICAgIHcxMiA9ICh3MTMgPj4+IDcgXiB3MTMgPj4+IDE4IF4gdzEzID4+PiAzIF4gdzEzIDw8IDI1IF4gdzEzIDw8IDE0KSArICh3MTAgPj4+IDE3IF4gdzEwID4+PiAxOSBeIHcxMCA+Pj4gMTAgXiB3MTAgPDwgMTUgXiB3MTAgPDwgMTMpICsgdzEyICsgdzUgfCAwO1xuICAgICAgICBkID0gdzEyICsgZCArIChhID4+PiA2IF4gYSA+Pj4gMTEgXiBhID4+PiAyNSBeIGEgPDwgMjYgXiBhIDw8IDIxIF4gYSA8PCA3KSArIChjIF4gYSAmIChiIF4gYykpICsgMHhjNmUwMGJmMyB8IDA7XG4gICAgICAgIGggPSBoICsgZCB8IDA7XG4gICAgICAgIGQgPSBkICsgKGUgJiBmIF4gZyAmIChlIF4gZikpICsgKGUgPj4+IDIgXiBlID4+PiAxMyBeIGUgPj4+IDIyIF4gZSA8PCAzMCBeIGUgPDwgMTkgXiBlIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMjlcbiAgICAgICAgdzEzID0gKHcxNCA+Pj4gNyBeIHcxNCA+Pj4gMTggXiB3MTQgPj4+IDMgXiB3MTQgPDwgMjUgXiB3MTQgPDwgMTQpICsgKHcxMSA+Pj4gMTcgXiB3MTEgPj4+IDE5IF4gdzExID4+PiAxMCBeIHcxMSA8PCAxNSBeIHcxMSA8PCAxMykgKyB3MTMgKyB3NiB8IDA7XG4gICAgICAgIGMgPSB3MTMgKyBjICsgKGggPj4+IDYgXiBoID4+PiAxMSBeIGggPj4+IDI1IF4gaCA8PCAyNiBeIGggPDwgMjEgXiBoIDw8IDcpICsgKGIgXiBoICYgKGEgXiBiKSkgKyAweGQ1YTc5MTQ3IHwgMDtcbiAgICAgICAgZyA9IGcgKyBjIHwgMDtcbiAgICAgICAgYyA9IGMgKyAoZCAmIGUgXiBmICYgKGQgXiBlKSkgKyAoZCA+Pj4gMiBeIGQgPj4+IDEzIF4gZCA+Pj4gMjIgXiBkIDw8IDMwIF4gZCA8PCAxOSBeIGQgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAzMFxuICAgICAgICB3MTQgPSAodzE1ID4+PiA3IF4gdzE1ID4+PiAxOCBeIHcxNSA+Pj4gMyBeIHcxNSA8PCAyNSBeIHcxNSA8PCAxNCkgKyAodzEyID4+PiAxNyBeIHcxMiA+Pj4gMTkgXiB3MTIgPj4+IDEwIF4gdzEyIDw8IDE1IF4gdzEyIDw8IDEzKSArIHcxNCArIHc3IHwgMDtcbiAgICAgICAgYiA9IHcxNCArIGIgKyAoZyA+Pj4gNiBeIGcgPj4+IDExIF4gZyA+Pj4gMjUgXiBnIDw8IDI2IF4gZyA8PCAyMSBeIGcgPDwgNykgKyAoYSBeIGcgJiAoaCBeIGEpKSArIDB4MDZjYTYzNTEgfCAwO1xuICAgICAgICBmID0gZiArIGIgfCAwO1xuICAgICAgICBiID0gYiArIChjICYgZCBeIGUgJiAoYyBeIGQpKSArIChjID4+PiAyIF4gYyA+Pj4gMTMgXiBjID4+PiAyMiBeIGMgPDwgMzAgXiBjIDw8IDE5IF4gYyA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDMxXG4gICAgICAgIHcxNSA9ICh3MCA+Pj4gNyBeIHcwID4+PiAxOCBeIHcwID4+PiAzIF4gdzAgPDwgMjUgXiB3MCA8PCAxNCkgKyAodzEzID4+PiAxNyBeIHcxMyA+Pj4gMTkgXiB3MTMgPj4+IDEwIF4gdzEzIDw8IDE1IF4gdzEzIDw8IDEzKSArIHcxNSArIHc4IHwgMDtcbiAgICAgICAgYSA9IHcxNSArIGEgKyAoZiA+Pj4gNiBeIGYgPj4+IDExIF4gZiA+Pj4gMjUgXiBmIDw8IDI2IF4gZiA8PCAyMSBeIGYgPDwgNykgKyAoaCBeIGYgJiAoZyBeIGgpKSArIDB4MTQyOTI5NjcgfCAwO1xuICAgICAgICBlID0gZSArIGEgfCAwO1xuICAgICAgICBhID0gYSArIChiICYgYyBeIGQgJiAoYiBeIGMpKSArIChiID4+PiAyIF4gYiA+Pj4gMTMgXiBiID4+PiAyMiBeIGIgPDwgMzAgXiBiIDw8IDE5IF4gYiA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDMyXG4gICAgICAgIHcwID0gKHcxID4+PiA3IF4gdzEgPj4+IDE4IF4gdzEgPj4+IDMgXiB3MSA8PCAyNSBeIHcxIDw8IDE0KSArICh3MTQgPj4+IDE3IF4gdzE0ID4+PiAxOSBeIHcxNCA+Pj4gMTAgXiB3MTQgPDwgMTUgXiB3MTQgPDwgMTMpICsgdzAgKyB3OSB8IDA7XG4gICAgICAgIGggPSB3MCArIGggKyAoZSA+Pj4gNiBeIGUgPj4+IDExIF4gZSA+Pj4gMjUgXiBlIDw8IDI2IF4gZSA8PCAyMSBeIGUgPDwgNykgKyAoZyBeIGUgJiAoZiBeIGcpKSArIDB4MjdiNzBhODUgfCAwO1xuICAgICAgICBkID0gZCArIGggfCAwO1xuICAgICAgICBoID0gaCArIChhICYgYiBeIGMgJiAoYSBeIGIpKSArIChhID4+PiAyIF4gYSA+Pj4gMTMgXiBhID4+PiAyMiBeIGEgPDwgMzAgXiBhIDw8IDE5IF4gYSA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDMzXG4gICAgICAgIHcxID0gKHcyID4+PiA3IF4gdzIgPj4+IDE4IF4gdzIgPj4+IDMgXiB3MiA8PCAyNSBeIHcyIDw8IDE0KSArICh3MTUgPj4+IDE3IF4gdzE1ID4+PiAxOSBeIHcxNSA+Pj4gMTAgXiB3MTUgPDwgMTUgXiB3MTUgPDwgMTMpICsgdzEgKyB3MTAgfCAwO1xuICAgICAgICBnID0gdzEgKyBnICsgKGQgPj4+IDYgXiBkID4+PiAxMSBeIGQgPj4+IDI1IF4gZCA8PCAyNiBeIGQgPDwgMjEgXiBkIDw8IDcpICsgKGYgXiBkICYgKGUgXiBmKSkgKyAweDJlMWIyMTM4IHwgMDtcbiAgICAgICAgYyA9IGMgKyBnIHwgMDtcbiAgICAgICAgZyA9IGcgKyAoaCAmIGEgXiBiICYgKGggXiBhKSkgKyAoaCA+Pj4gMiBeIGggPj4+IDEzIF4gaCA+Pj4gMjIgXiBoIDw8IDMwIF4gaCA8PCAxOSBeIGggPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAzNFxuICAgICAgICB3MiA9ICh3MyA+Pj4gNyBeIHczID4+PiAxOCBeIHczID4+PiAzIF4gdzMgPDwgMjUgXiB3MyA8PCAxNCkgKyAodzAgPj4+IDE3IF4gdzAgPj4+IDE5IF4gdzAgPj4+IDEwIF4gdzAgPDwgMTUgXiB3MCA8PCAxMykgKyB3MiArIHcxMSB8IDA7XG4gICAgICAgIGYgPSB3MiArIGYgKyAoYyA+Pj4gNiBeIGMgPj4+IDExIF4gYyA+Pj4gMjUgXiBjIDw8IDI2IF4gYyA8PCAyMSBeIGMgPDwgNykgKyAoZSBeIGMgJiAoZCBeIGUpKSArIDB4NGQyYzZkZmMgfCAwO1xuICAgICAgICBiID0gYiArIGYgfCAwO1xuICAgICAgICBmID0gZiArIChnICYgaCBeIGEgJiAoZyBeIGgpKSArIChnID4+PiAyIF4gZyA+Pj4gMTMgXiBnID4+PiAyMiBeIGcgPDwgMzAgXiBnIDw8IDE5IF4gZyA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDM1XG4gICAgICAgIHczID0gKHc0ID4+PiA3IF4gdzQgPj4+IDE4IF4gdzQgPj4+IDMgXiB3NCA8PCAyNSBeIHc0IDw8IDE0KSArICh3MSA+Pj4gMTcgXiB3MSA+Pj4gMTkgXiB3MSA+Pj4gMTAgXiB3MSA8PCAxNSBeIHcxIDw8IDEzKSArIHczICsgdzEyIHwgMDtcbiAgICAgICAgZSA9IHczICsgZSArIChiID4+PiA2IF4gYiA+Pj4gMTEgXiBiID4+PiAyNSBeIGIgPDwgMjYgXiBiIDw8IDIxIF4gYiA8PCA3KSArIChkIF4gYiAmIChjIF4gZCkpICsgMHg1MzM4MGQxMyB8IDA7XG4gICAgICAgIGEgPSBhICsgZSB8IDA7XG4gICAgICAgIGUgPSBlICsgKGYgJiBnIF4gaCAmIChmIF4gZykpICsgKGYgPj4+IDIgXiBmID4+PiAxMyBeIGYgPj4+IDIyIF4gZiA8PCAzMCBeIGYgPDwgMTkgXiBmIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMzZcbiAgICAgICAgdzQgPSAodzUgPj4+IDcgXiB3NSA+Pj4gMTggXiB3NSA+Pj4gMyBeIHc1IDw8IDI1IF4gdzUgPDwgMTQpICsgKHcyID4+PiAxNyBeIHcyID4+PiAxOSBeIHcyID4+PiAxMCBeIHcyIDw8IDE1IF4gdzIgPDwgMTMpICsgdzQgKyB3MTMgfCAwO1xuICAgICAgICBkID0gdzQgKyBkICsgKGEgPj4+IDYgXiBhID4+PiAxMSBeIGEgPj4+IDI1IF4gYSA8PCAyNiBeIGEgPDwgMjEgXiBhIDw8IDcpICsgKGMgXiBhICYgKGIgXiBjKSkgKyAweDY1MGE3MzU0IHwgMDtcbiAgICAgICAgaCA9IGggKyBkIHwgMDtcbiAgICAgICAgZCA9IGQgKyAoZSAmIGYgXiBnICYgKGUgXiBmKSkgKyAoZSA+Pj4gMiBeIGUgPj4+IDEzIF4gZSA+Pj4gMjIgXiBlIDw8IDMwIF4gZSA8PCAxOSBeIGUgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyAzN1xuICAgICAgICB3NSA9ICh3NiA+Pj4gNyBeIHc2ID4+PiAxOCBeIHc2ID4+PiAzIF4gdzYgPDwgMjUgXiB3NiA8PCAxNCkgKyAodzMgPj4+IDE3IF4gdzMgPj4+IDE5IF4gdzMgPj4+IDEwIF4gdzMgPDwgMTUgXiB3MyA8PCAxMykgKyB3NSArIHcxNCB8IDA7XG4gICAgICAgIGMgPSB3NSArIGMgKyAoaCA+Pj4gNiBeIGggPj4+IDExIF4gaCA+Pj4gMjUgXiBoIDw8IDI2IF4gaCA8PCAyMSBeIGggPDwgNykgKyAoYiBeIGggJiAoYSBeIGIpKSArIDB4NzY2YTBhYmIgfCAwO1xuICAgICAgICBnID0gZyArIGMgfCAwO1xuICAgICAgICBjID0gYyArIChkICYgZSBeIGYgJiAoZCBeIGUpKSArIChkID4+PiAyIF4gZCA+Pj4gMTMgXiBkID4+PiAyMiBeIGQgPDwgMzAgXiBkIDw8IDE5IF4gZCA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDM4XG4gICAgICAgIHc2ID0gKHc3ID4+PiA3IF4gdzcgPj4+IDE4IF4gdzcgPj4+IDMgXiB3NyA8PCAyNSBeIHc3IDw8IDE0KSArICh3NCA+Pj4gMTcgXiB3NCA+Pj4gMTkgXiB3NCA+Pj4gMTAgXiB3NCA8PCAxNSBeIHc0IDw8IDEzKSArIHc2ICsgdzE1IHwgMDtcbiAgICAgICAgYiA9IHc2ICsgYiArIChnID4+PiA2IF4gZyA+Pj4gMTEgXiBnID4+PiAyNSBeIGcgPDwgMjYgXiBnIDw8IDIxIF4gZyA8PCA3KSArIChhIF4gZyAmIChoIF4gYSkpICsgMHg4MWMyYzkyZSB8IDA7XG4gICAgICAgIGYgPSBmICsgYiB8IDA7XG4gICAgICAgIGIgPSBiICsgKGMgJiBkIF4gZSAmIChjIF4gZCkpICsgKGMgPj4+IDIgXiBjID4+PiAxMyBeIGMgPj4+IDIyIF4gYyA8PCAzMCBeIGMgPDwgMTkgXiBjIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gMzlcbiAgICAgICAgdzcgPSAodzggPj4+IDcgXiB3OCA+Pj4gMTggXiB3OCA+Pj4gMyBeIHc4IDw8IDI1IF4gdzggPDwgMTQpICsgKHc1ID4+PiAxNyBeIHc1ID4+PiAxOSBeIHc1ID4+PiAxMCBeIHc1IDw8IDE1IF4gdzUgPDwgMTMpICsgdzcgKyB3MCB8IDA7XG4gICAgICAgIGEgPSB3NyArIGEgKyAoZiA+Pj4gNiBeIGYgPj4+IDExIF4gZiA+Pj4gMjUgXiBmIDw8IDI2IF4gZiA8PCAyMSBeIGYgPDwgNykgKyAoaCBeIGYgJiAoZyBeIGgpKSArIDB4OTI3MjJjODUgfCAwO1xuICAgICAgICBlID0gZSArIGEgfCAwO1xuICAgICAgICBhID0gYSArIChiICYgYyBeIGQgJiAoYiBeIGMpKSArIChiID4+PiAyIF4gYiA+Pj4gMTMgXiBiID4+PiAyMiBeIGIgPDwgMzAgXiBiIDw8IDE5IF4gYiA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDQwXG4gICAgICAgIHc4ID0gKHc5ID4+PiA3IF4gdzkgPj4+IDE4IF4gdzkgPj4+IDMgXiB3OSA8PCAyNSBeIHc5IDw8IDE0KSArICh3NiA+Pj4gMTcgXiB3NiA+Pj4gMTkgXiB3NiA+Pj4gMTAgXiB3NiA8PCAxNSBeIHc2IDw8IDEzKSArIHc4ICsgdzEgfCAwO1xuICAgICAgICBoID0gdzggKyBoICsgKGUgPj4+IDYgXiBlID4+PiAxMSBeIGUgPj4+IDI1IF4gZSA8PCAyNiBeIGUgPDwgMjEgXiBlIDw8IDcpICsgKGcgXiBlICYgKGYgXiBnKSkgKyAweGEyYmZlOGExIHwgMDtcbiAgICAgICAgZCA9IGQgKyBoIHwgMDtcbiAgICAgICAgaCA9IGggKyAoYSAmIGIgXiBjICYgKGEgXiBiKSkgKyAoYSA+Pj4gMiBeIGEgPj4+IDEzIF4gYSA+Pj4gMjIgXiBhIDw8IDMwIF4gYSA8PCAxOSBeIGEgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0MVxuICAgICAgICB3OSA9ICh3MTAgPj4+IDcgXiB3MTAgPj4+IDE4IF4gdzEwID4+PiAzIF4gdzEwIDw8IDI1IF4gdzEwIDw8IDE0KSArICh3NyA+Pj4gMTcgXiB3NyA+Pj4gMTkgXiB3NyA+Pj4gMTAgXiB3NyA8PCAxNSBeIHc3IDw8IDEzKSArIHc5ICsgdzIgfCAwO1xuICAgICAgICBnID0gdzkgKyBnICsgKGQgPj4+IDYgXiBkID4+PiAxMSBeIGQgPj4+IDI1IF4gZCA8PCAyNiBeIGQgPDwgMjEgXiBkIDw8IDcpICsgKGYgXiBkICYgKGUgXiBmKSkgKyAweGE4MWE2NjRiIHwgMDtcbiAgICAgICAgYyA9IGMgKyBnIHwgMDtcbiAgICAgICAgZyA9IGcgKyAoaCAmIGEgXiBiICYgKGggXiBhKSkgKyAoaCA+Pj4gMiBeIGggPj4+IDEzIF4gaCA+Pj4gMjIgXiBoIDw8IDMwIF4gaCA8PCAxOSBeIGggPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0MlxuICAgICAgICB3MTAgPSAodzExID4+PiA3IF4gdzExID4+PiAxOCBeIHcxMSA+Pj4gMyBeIHcxMSA8PCAyNSBeIHcxMSA8PCAxNCkgKyAodzggPj4+IDE3IF4gdzggPj4+IDE5IF4gdzggPj4+IDEwIF4gdzggPDwgMTUgXiB3OCA8PCAxMykgKyB3MTAgKyB3MyB8IDA7XG4gICAgICAgIGYgPSB3MTAgKyBmICsgKGMgPj4+IDYgXiBjID4+PiAxMSBeIGMgPj4+IDI1IF4gYyA8PCAyNiBeIGMgPDwgMjEgXiBjIDw8IDcpICsgKGUgXiBjICYgKGQgXiBlKSkgKyAweGMyNGI4YjcwIHwgMDtcbiAgICAgICAgYiA9IGIgKyBmIHwgMDtcbiAgICAgICAgZiA9IGYgKyAoZyAmIGggXiBhICYgKGcgXiBoKSkgKyAoZyA+Pj4gMiBeIGcgPj4+IDEzIF4gZyA+Pj4gMjIgXiBnIDw8IDMwIF4gZyA8PCAxOSBeIGcgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0M1xuICAgICAgICB3MTEgPSAodzEyID4+PiA3IF4gdzEyID4+PiAxOCBeIHcxMiA+Pj4gMyBeIHcxMiA8PCAyNSBeIHcxMiA8PCAxNCkgKyAodzkgPj4+IDE3IF4gdzkgPj4+IDE5IF4gdzkgPj4+IDEwIF4gdzkgPDwgMTUgXiB3OSA8PCAxMykgKyB3MTEgKyB3NCB8IDA7XG4gICAgICAgIGUgPSB3MTEgKyBlICsgKGIgPj4+IDYgXiBiID4+PiAxMSBeIGIgPj4+IDI1IF4gYiA8PCAyNiBeIGIgPDwgMjEgXiBiIDw8IDcpICsgKGQgXiBiICYgKGMgXiBkKSkgKyAweGM3NmM1MWEzIHwgMDtcbiAgICAgICAgYSA9IGEgKyBlIHwgMDtcbiAgICAgICAgZSA9IGUgKyAoZiAmIGcgXiBoICYgKGYgXiBnKSkgKyAoZiA+Pj4gMiBeIGYgPj4+IDEzIF4gZiA+Pj4gMjIgXiBmIDw8IDMwIF4gZiA8PCAxOSBeIGYgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0NFxuICAgICAgICB3MTIgPSAodzEzID4+PiA3IF4gdzEzID4+PiAxOCBeIHcxMyA+Pj4gMyBeIHcxMyA8PCAyNSBeIHcxMyA8PCAxNCkgKyAodzEwID4+PiAxNyBeIHcxMCA+Pj4gMTkgXiB3MTAgPj4+IDEwIF4gdzEwIDw8IDE1IF4gdzEwIDw8IDEzKSArIHcxMiArIHc1IHwgMDtcbiAgICAgICAgZCA9IHcxMiArIGQgKyAoYSA+Pj4gNiBeIGEgPj4+IDExIF4gYSA+Pj4gMjUgXiBhIDw8IDI2IF4gYSA8PCAyMSBeIGEgPDwgNykgKyAoYyBeIGEgJiAoYiBeIGMpKSArIDB4ZDE5MmU4MTkgfCAwO1xuICAgICAgICBoID0gaCArIGQgfCAwO1xuICAgICAgICBkID0gZCArIChlICYgZiBeIGcgJiAoZSBeIGYpKSArIChlID4+PiAyIF4gZSA+Pj4gMTMgXiBlID4+PiAyMiBeIGUgPDwgMzAgXiBlIDw8IDE5IF4gZSA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDQ1XG4gICAgICAgIHcxMyA9ICh3MTQgPj4+IDcgXiB3MTQgPj4+IDE4IF4gdzE0ID4+PiAzIF4gdzE0IDw8IDI1IF4gdzE0IDw8IDE0KSArICh3MTEgPj4+IDE3IF4gdzExID4+PiAxOSBeIHcxMSA+Pj4gMTAgXiB3MTEgPDwgMTUgXiB3MTEgPDwgMTMpICsgdzEzICsgdzYgfCAwO1xuICAgICAgICBjID0gdzEzICsgYyArIChoID4+PiA2IF4gaCA+Pj4gMTEgXiBoID4+PiAyNSBeIGggPDwgMjYgXiBoIDw8IDIxIF4gaCA8PCA3KSArIChiIF4gaCAmIChhIF4gYikpICsgMHhkNjk5MDYyNCB8IDA7XG4gICAgICAgIGcgPSBnICsgYyB8IDA7XG4gICAgICAgIGMgPSBjICsgKGQgJiBlIF4gZiAmIChkIF4gZSkpICsgKGQgPj4+IDIgXiBkID4+PiAxMyBeIGQgPj4+IDIyIF4gZCA8PCAzMCBeIGQgPDwgMTkgXiBkIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNDZcbiAgICAgICAgdzE0ID0gKHcxNSA+Pj4gNyBeIHcxNSA+Pj4gMTggXiB3MTUgPj4+IDMgXiB3MTUgPDwgMjUgXiB3MTUgPDwgMTQpICsgKHcxMiA+Pj4gMTcgXiB3MTIgPj4+IDE5IF4gdzEyID4+PiAxMCBeIHcxMiA8PCAxNSBeIHcxMiA8PCAxMykgKyB3MTQgKyB3NyB8IDA7XG4gICAgICAgIGIgPSB3MTQgKyBiICsgKGcgPj4+IDYgXiBnID4+PiAxMSBeIGcgPj4+IDI1IF4gZyA8PCAyNiBeIGcgPDwgMjEgXiBnIDw8IDcpICsgKGEgXiBnICYgKGggXiBhKSkgKyAweGY0MGUzNTg1IHwgMDtcbiAgICAgICAgZiA9IGYgKyBiIHwgMDtcbiAgICAgICAgYiA9IGIgKyAoYyAmIGQgXiBlICYgKGMgXiBkKSkgKyAoYyA+Pj4gMiBeIGMgPj4+IDEzIF4gYyA+Pj4gMjIgXiBjIDw8IDMwIF4gYyA8PCAxOSBeIGMgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0N1xuICAgICAgICB3MTUgPSAodzAgPj4+IDcgXiB3MCA+Pj4gMTggXiB3MCA+Pj4gMyBeIHcwIDw8IDI1IF4gdzAgPDwgMTQpICsgKHcxMyA+Pj4gMTcgXiB3MTMgPj4+IDE5IF4gdzEzID4+PiAxMCBeIHcxMyA8PCAxNSBeIHcxMyA8PCAxMykgKyB3MTUgKyB3OCB8IDA7XG4gICAgICAgIGEgPSB3MTUgKyBhICsgKGYgPj4+IDYgXiBmID4+PiAxMSBeIGYgPj4+IDI1IF4gZiA8PCAyNiBeIGYgPDwgMjEgXiBmIDw8IDcpICsgKGggXiBmICYgKGcgXiBoKSkgKyAweDEwNmFhMDcwIHwgMDtcbiAgICAgICAgZSA9IGUgKyBhIHwgMDtcbiAgICAgICAgYSA9IGEgKyAoYiAmIGMgXiBkICYgKGIgXiBjKSkgKyAoYiA+Pj4gMiBeIGIgPj4+IDEzIF4gYiA+Pj4gMjIgXiBiIDw8IDMwIF4gYiA8PCAxOSBeIGIgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0OFxuICAgICAgICB3MCA9ICh3MSA+Pj4gNyBeIHcxID4+PiAxOCBeIHcxID4+PiAzIF4gdzEgPDwgMjUgXiB3MSA8PCAxNCkgKyAodzE0ID4+PiAxNyBeIHcxNCA+Pj4gMTkgXiB3MTQgPj4+IDEwIF4gdzE0IDw8IDE1IF4gdzE0IDw8IDEzKSArIHcwICsgdzkgfCAwO1xuICAgICAgICBoID0gdzAgKyBoICsgKGUgPj4+IDYgXiBlID4+PiAxMSBeIGUgPj4+IDI1IF4gZSA8PCAyNiBeIGUgPDwgMjEgXiBlIDw8IDcpICsgKGcgXiBlICYgKGYgXiBnKSkgKyAweDE5YTRjMTE2IHwgMDtcbiAgICAgICAgZCA9IGQgKyBoIHwgMDtcbiAgICAgICAgaCA9IGggKyAoYSAmIGIgXiBjICYgKGEgXiBiKSkgKyAoYSA+Pj4gMiBeIGEgPj4+IDEzIF4gYSA+Pj4gMjIgXiBhIDw8IDMwIF4gYSA8PCAxOSBeIGEgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA0OVxuICAgICAgICB3MSA9ICh3MiA+Pj4gNyBeIHcyID4+PiAxOCBeIHcyID4+PiAzIF4gdzIgPDwgMjUgXiB3MiA8PCAxNCkgKyAodzE1ID4+PiAxNyBeIHcxNSA+Pj4gMTkgXiB3MTUgPj4+IDEwIF4gdzE1IDw8IDE1IF4gdzE1IDw8IDEzKSArIHcxICsgdzEwIHwgMDtcbiAgICAgICAgZyA9IHcxICsgZyArIChkID4+PiA2IF4gZCA+Pj4gMTEgXiBkID4+PiAyNSBeIGQgPDwgMjYgXiBkIDw8IDIxIF4gZCA8PCA3KSArIChmIF4gZCAmIChlIF4gZikpICsgMHgxZTM3NmMwOCB8IDA7XG4gICAgICAgIGMgPSBjICsgZyB8IDA7XG4gICAgICAgIGcgPSBnICsgKGggJiBhIF4gYiAmIChoIF4gYSkpICsgKGggPj4+IDIgXiBoID4+PiAxMyBeIGggPj4+IDIyIF4gaCA8PCAzMCBeIGggPDwgMTkgXiBoIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNTBcbiAgICAgICAgdzIgPSAodzMgPj4+IDcgXiB3MyA+Pj4gMTggXiB3MyA+Pj4gMyBeIHczIDw8IDI1IF4gdzMgPDwgMTQpICsgKHcwID4+PiAxNyBeIHcwID4+PiAxOSBeIHcwID4+PiAxMCBeIHcwIDw8IDE1IF4gdzAgPDwgMTMpICsgdzIgKyB3MTEgfCAwO1xuICAgICAgICBmID0gdzIgKyBmICsgKGMgPj4+IDYgXiBjID4+PiAxMSBeIGMgPj4+IDI1IF4gYyA8PCAyNiBeIGMgPDwgMjEgXiBjIDw8IDcpICsgKGUgXiBjICYgKGQgXiBlKSkgKyAweDI3NDg3NzRjIHwgMDtcbiAgICAgICAgYiA9IGIgKyBmIHwgMDtcbiAgICAgICAgZiA9IGYgKyAoZyAmIGggXiBhICYgKGcgXiBoKSkgKyAoZyA+Pj4gMiBeIGcgPj4+IDEzIF4gZyA+Pj4gMjIgXiBnIDw8IDMwIF4gZyA8PCAxOSBeIGcgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA1MVxuICAgICAgICB3MyA9ICh3NCA+Pj4gNyBeIHc0ID4+PiAxOCBeIHc0ID4+PiAzIF4gdzQgPDwgMjUgXiB3NCA8PCAxNCkgKyAodzEgPj4+IDE3IF4gdzEgPj4+IDE5IF4gdzEgPj4+IDEwIF4gdzEgPDwgMTUgXiB3MSA8PCAxMykgKyB3MyArIHcxMiB8IDA7XG4gICAgICAgIGUgPSB3MyArIGUgKyAoYiA+Pj4gNiBeIGIgPj4+IDExIF4gYiA+Pj4gMjUgXiBiIDw8IDI2IF4gYiA8PCAyMSBeIGIgPDwgNykgKyAoZCBeIGIgJiAoYyBeIGQpKSArIDB4MzRiMGJjYjUgfCAwO1xuICAgICAgICBhID0gYSArIGUgfCAwO1xuICAgICAgICBlID0gZSArIChmICYgZyBeIGggJiAoZiBeIGcpKSArIChmID4+PiAyIF4gZiA+Pj4gMTMgXiBmID4+PiAyMiBeIGYgPDwgMzAgXiBmIDw8IDE5IF4gZiA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDUyXG4gICAgICAgIHc0ID0gKHc1ID4+PiA3IF4gdzUgPj4+IDE4IF4gdzUgPj4+IDMgXiB3NSA8PCAyNSBeIHc1IDw8IDE0KSArICh3MiA+Pj4gMTcgXiB3MiA+Pj4gMTkgXiB3MiA+Pj4gMTAgXiB3MiA8PCAxNSBeIHcyIDw8IDEzKSArIHc0ICsgdzEzIHwgMDtcbiAgICAgICAgZCA9IHc0ICsgZCArIChhID4+PiA2IF4gYSA+Pj4gMTEgXiBhID4+PiAyNSBeIGEgPDwgMjYgXiBhIDw8IDIxIF4gYSA8PCA3KSArIChjIF4gYSAmIChiIF4gYykpICsgMHgzOTFjMGNiMyB8IDA7XG4gICAgICAgIGggPSBoICsgZCB8IDA7XG4gICAgICAgIGQgPSBkICsgKGUgJiBmIF4gZyAmIChlIF4gZikpICsgKGUgPj4+IDIgXiBlID4+PiAxMyBeIGUgPj4+IDIyIF4gZSA8PCAzMCBeIGUgPDwgMTkgXiBlIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNTNcbiAgICAgICAgdzUgPSAodzYgPj4+IDcgXiB3NiA+Pj4gMTggXiB3NiA+Pj4gMyBeIHc2IDw8IDI1IF4gdzYgPDwgMTQpICsgKHczID4+PiAxNyBeIHczID4+PiAxOSBeIHczID4+PiAxMCBeIHczIDw8IDE1IF4gdzMgPDwgMTMpICsgdzUgKyB3MTQgfCAwO1xuICAgICAgICBjID0gdzUgKyBjICsgKGggPj4+IDYgXiBoID4+PiAxMSBeIGggPj4+IDI1IF4gaCA8PCAyNiBeIGggPDwgMjEgXiBoIDw8IDcpICsgKGIgXiBoICYgKGEgXiBiKSkgKyAweDRlZDhhYTRhIHwgMDtcbiAgICAgICAgZyA9IGcgKyBjIHwgMDtcbiAgICAgICAgYyA9IGMgKyAoZCAmIGUgXiBmICYgKGQgXiBlKSkgKyAoZCA+Pj4gMiBeIGQgPj4+IDEzIF4gZCA+Pj4gMjIgXiBkIDw8IDMwIF4gZCA8PCAxOSBeIGQgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA1NFxuICAgICAgICB3NiA9ICh3NyA+Pj4gNyBeIHc3ID4+PiAxOCBeIHc3ID4+PiAzIF4gdzcgPDwgMjUgXiB3NyA8PCAxNCkgKyAodzQgPj4+IDE3IF4gdzQgPj4+IDE5IF4gdzQgPj4+IDEwIF4gdzQgPDwgMTUgXiB3NCA8PCAxMykgKyB3NiArIHcxNSB8IDA7XG4gICAgICAgIGIgPSB3NiArIGIgKyAoZyA+Pj4gNiBeIGcgPj4+IDExIF4gZyA+Pj4gMjUgXiBnIDw8IDI2IF4gZyA8PCAyMSBeIGcgPDwgNykgKyAoYSBeIGcgJiAoaCBeIGEpKSArIDB4NWI5Y2NhNGYgfCAwO1xuICAgICAgICBmID0gZiArIGIgfCAwO1xuICAgICAgICBiID0gYiArIChjICYgZCBeIGUgJiAoYyBeIGQpKSArIChjID4+PiAyIF4gYyA+Pj4gMTMgXiBjID4+PiAyMiBeIGMgPDwgMzAgXiBjIDw8IDE5IF4gYyA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDU1XG4gICAgICAgIHc3ID0gKHc4ID4+PiA3IF4gdzggPj4+IDE4IF4gdzggPj4+IDMgXiB3OCA8PCAyNSBeIHc4IDw8IDE0KSArICh3NSA+Pj4gMTcgXiB3NSA+Pj4gMTkgXiB3NSA+Pj4gMTAgXiB3NSA8PCAxNSBeIHc1IDw8IDEzKSArIHc3ICsgdzAgfCAwO1xuICAgICAgICBhID0gdzcgKyBhICsgKGYgPj4+IDYgXiBmID4+PiAxMSBeIGYgPj4+IDI1IF4gZiA8PCAyNiBeIGYgPDwgMjEgXiBmIDw8IDcpICsgKGggXiBmICYgKGcgXiBoKSkgKyAweDY4MmU2ZmYzIHwgMDtcbiAgICAgICAgZSA9IGUgKyBhIHwgMDtcbiAgICAgICAgYSA9IGEgKyAoYiAmIGMgXiBkICYgKGIgXiBjKSkgKyAoYiA+Pj4gMiBeIGIgPj4+IDEzIF4gYiA+Pj4gMjIgXiBiIDw8IDMwIF4gYiA8PCAxOSBeIGIgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA1NlxuICAgICAgICB3OCA9ICh3OSA+Pj4gNyBeIHc5ID4+PiAxOCBeIHc5ID4+PiAzIF4gdzkgPDwgMjUgXiB3OSA8PCAxNCkgKyAodzYgPj4+IDE3IF4gdzYgPj4+IDE5IF4gdzYgPj4+IDEwIF4gdzYgPDwgMTUgXiB3NiA8PCAxMykgKyB3OCArIHcxIHwgMDtcbiAgICAgICAgaCA9IHc4ICsgaCArIChlID4+PiA2IF4gZSA+Pj4gMTEgXiBlID4+PiAyNSBeIGUgPDwgMjYgXiBlIDw8IDIxIF4gZSA8PCA3KSArIChnIF4gZSAmIChmIF4gZykpICsgMHg3NDhmODJlZSB8IDA7XG4gICAgICAgIGQgPSBkICsgaCB8IDA7XG4gICAgICAgIGggPSBoICsgKGEgJiBiIF4gYyAmIChhIF4gYikpICsgKGEgPj4+IDIgXiBhID4+PiAxMyBeIGEgPj4+IDIyIF4gYSA8PCAzMCBeIGEgPDwgMTkgXiBhIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNTdcbiAgICAgICAgdzkgPSAodzEwID4+PiA3IF4gdzEwID4+PiAxOCBeIHcxMCA+Pj4gMyBeIHcxMCA8PCAyNSBeIHcxMCA8PCAxNCkgKyAodzcgPj4+IDE3IF4gdzcgPj4+IDE5IF4gdzcgPj4+IDEwIF4gdzcgPDwgMTUgXiB3NyA8PCAxMykgKyB3OSArIHcyIHwgMDtcbiAgICAgICAgZyA9IHc5ICsgZyArIChkID4+PiA2IF4gZCA+Pj4gMTEgXiBkID4+PiAyNSBeIGQgPDwgMjYgXiBkIDw8IDIxIF4gZCA8PCA3KSArIChmIF4gZCAmIChlIF4gZikpICsgMHg3OGE1NjM2ZiB8IDA7XG4gICAgICAgIGMgPSBjICsgZyB8IDA7XG4gICAgICAgIGcgPSBnICsgKGggJiBhIF4gYiAmIChoIF4gYSkpICsgKGggPj4+IDIgXiBoID4+PiAxMyBeIGggPj4+IDIyIF4gaCA8PCAzMCBeIGggPDwgMTkgXiBoIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNThcbiAgICAgICAgdzEwID0gKHcxMSA+Pj4gNyBeIHcxMSA+Pj4gMTggXiB3MTEgPj4+IDMgXiB3MTEgPDwgMjUgXiB3MTEgPDwgMTQpICsgKHc4ID4+PiAxNyBeIHc4ID4+PiAxOSBeIHc4ID4+PiAxMCBeIHc4IDw8IDE1IF4gdzggPDwgMTMpICsgdzEwICsgdzMgfCAwO1xuICAgICAgICBmID0gdzEwICsgZiArIChjID4+PiA2IF4gYyA+Pj4gMTEgXiBjID4+PiAyNSBeIGMgPDwgMjYgXiBjIDw8IDIxIF4gYyA8PCA3KSArIChlIF4gYyAmIChkIF4gZSkpICsgMHg4NGM4NzgxNCB8IDA7XG4gICAgICAgIGIgPSBiICsgZiB8IDA7XG4gICAgICAgIGYgPSBmICsgKGcgJiBoIF4gYSAmIChnIF4gaCkpICsgKGcgPj4+IDIgXiBnID4+PiAxMyBeIGcgPj4+IDIyIF4gZyA8PCAzMCBeIGcgPDwgMTkgXiBnIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNTlcbiAgICAgICAgdzExID0gKHcxMiA+Pj4gNyBeIHcxMiA+Pj4gMTggXiB3MTIgPj4+IDMgXiB3MTIgPDwgMjUgXiB3MTIgPDwgMTQpICsgKHc5ID4+PiAxNyBeIHc5ID4+PiAxOSBeIHc5ID4+PiAxMCBeIHc5IDw8IDE1IF4gdzkgPDwgMTMpICsgdzExICsgdzQgfCAwO1xuICAgICAgICBlID0gdzExICsgZSArIChiID4+PiA2IF4gYiA+Pj4gMTEgXiBiID4+PiAyNSBeIGIgPDwgMjYgXiBiIDw8IDIxIF4gYiA8PCA3KSArIChkIF4gYiAmIChjIF4gZCkpICsgMHg4Y2M3MDIwOCB8IDA7XG4gICAgICAgIGEgPSBhICsgZSB8IDA7XG4gICAgICAgIGUgPSBlICsgKGYgJiBnIF4gaCAmIChmIF4gZykpICsgKGYgPj4+IDIgXiBmID4+PiAxMyBeIGYgPj4+IDIyIF4gZiA8PCAzMCBeIGYgPDwgMTkgXiBmIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNjBcbiAgICAgICAgdzEyID0gKHcxMyA+Pj4gNyBeIHcxMyA+Pj4gMTggXiB3MTMgPj4+IDMgXiB3MTMgPDwgMjUgXiB3MTMgPDwgMTQpICsgKHcxMCA+Pj4gMTcgXiB3MTAgPj4+IDE5IF4gdzEwID4+PiAxMCBeIHcxMCA8PCAxNSBeIHcxMCA8PCAxMykgKyB3MTIgKyB3NSB8IDA7XG4gICAgICAgIGQgPSB3MTIgKyBkICsgKGEgPj4+IDYgXiBhID4+PiAxMSBeIGEgPj4+IDI1IF4gYSA8PCAyNiBeIGEgPDwgMjEgXiBhIDw8IDcpICsgKGMgXiBhICYgKGIgXiBjKSkgKyAweDkwYmVmZmZhIHwgMDtcbiAgICAgICAgaCA9IGggKyBkIHwgMDtcbiAgICAgICAgZCA9IGQgKyAoZSAmIGYgXiBnICYgKGUgXiBmKSkgKyAoZSA+Pj4gMiBeIGUgPj4+IDEzIF4gZSA+Pj4gMjIgXiBlIDw8IDMwIF4gZSA8PCAxOSBeIGUgPDwgMTApIHwgMDtcblxuICAgICAgICAvLyA2MVxuICAgICAgICB3MTMgPSAodzE0ID4+PiA3IF4gdzE0ID4+PiAxOCBeIHcxNCA+Pj4gMyBeIHcxNCA8PCAyNSBeIHcxNCA8PCAxNCkgKyAodzExID4+PiAxNyBeIHcxMSA+Pj4gMTkgXiB3MTEgPj4+IDEwIF4gdzExIDw8IDE1IF4gdzExIDw8IDEzKSArIHcxMyArIHc2IHwgMDtcbiAgICAgICAgYyA9IHcxMyArIGMgKyAoaCA+Pj4gNiBeIGggPj4+IDExIF4gaCA+Pj4gMjUgXiBoIDw8IDI2IF4gaCA8PCAyMSBeIGggPDwgNykgKyAoYiBeIGggJiAoYSBeIGIpKSArIDB4YTQ1MDZjZWIgfCAwO1xuICAgICAgICBnID0gZyArIGMgfCAwO1xuICAgICAgICBjID0gYyArIChkICYgZSBeIGYgJiAoZCBeIGUpKSArIChkID4+PiAyIF4gZCA+Pj4gMTMgXiBkID4+PiAyMiBeIGQgPDwgMzAgXiBkIDw8IDE5IF4gZCA8PCAxMCkgfCAwO1xuXG4gICAgICAgIC8vIDYyXG4gICAgICAgIHcxNCA9ICh3MTUgPj4+IDcgXiB3MTUgPj4+IDE4IF4gdzE1ID4+PiAzIF4gdzE1IDw8IDI1IF4gdzE1IDw8IDE0KSArICh3MTIgPj4+IDE3IF4gdzEyID4+PiAxOSBeIHcxMiA+Pj4gMTAgXiB3MTIgPDwgMTUgXiB3MTIgPDwgMTMpICsgdzE0ICsgdzcgfCAwO1xuICAgICAgICBiID0gdzE0ICsgYiArIChnID4+PiA2IF4gZyA+Pj4gMTEgXiBnID4+PiAyNSBeIGcgPDwgMjYgXiBnIDw8IDIxIF4gZyA8PCA3KSArIChhIF4gZyAmIChoIF4gYSkpICsgMHhiZWY5YTNmNyB8IDA7XG4gICAgICAgIGYgPSBmICsgYiB8IDA7XG4gICAgICAgIGIgPSBiICsgKGMgJiBkIF4gZSAmIChjIF4gZCkpICsgKGMgPj4+IDIgXiBjID4+PiAxMyBeIGMgPj4+IDIyIF4gYyA8PCAzMCBeIGMgPDwgMTkgXiBjIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgLy8gNjNcbiAgICAgICAgdzE1ID0gKHcwID4+PiA3IF4gdzAgPj4+IDE4IF4gdzAgPj4+IDMgXiB3MCA8PCAyNSBeIHcwIDw8IDE0KSArICh3MTMgPj4+IDE3IF4gdzEzID4+PiAxOSBeIHcxMyA+Pj4gMTAgXiB3MTMgPDwgMTUgXiB3MTMgPDwgMTMpICsgdzE1ICsgdzggfCAwO1xuICAgICAgICBhID0gdzE1ICsgYSArIChmID4+PiA2IF4gZiA+Pj4gMTEgXiBmID4+PiAyNSBeIGYgPDwgMjYgXiBmIDw8IDIxIF4gZiA8PCA3KSArIChoIF4gZiAmIChnIF4gaCkpICsgMHhjNjcxNzhmMiB8IDA7XG4gICAgICAgIGUgPSBlICsgYSB8IDA7XG4gICAgICAgIGEgPSBhICsgKGIgJiBjIF4gZCAmIChiIF4gYykpICsgKGIgPj4+IDIgXiBiID4+PiAxMyBeIGIgPj4+IDIyIF4gYiA8PCAzMCBeIGIgPDwgMTkgXiBiIDw8IDEwKSB8IDA7XG5cbiAgICAgICAgSDAgPSBIMCArIGEgfCAwO1xuICAgICAgICBIMSA9IEgxICsgYiB8IDA7XG4gICAgICAgIEgyID0gSDIgKyBjIHwgMDtcbiAgICAgICAgSDMgPSBIMyArIGQgfCAwO1xuICAgICAgICBINCA9IEg0ICsgZSB8IDA7XG4gICAgICAgIEg1ID0gSDUgKyBmIHwgMDtcbiAgICAgICAgSDYgPSBINiArIGcgfCAwO1xuICAgICAgICBINyA9IEg3ICsgaCB8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NvcmVfaGVhcChvZmZzZXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMDtcblxuICAgICAgICBfY29yZShIRUFQW29mZnNldCB8IDBdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAxXSA8PCAxNiB8IEhFQVBbb2Zmc2V0IHwgMl0gPDwgOCB8IEhFQVBbb2Zmc2V0IHwgM10sIEhFQVBbb2Zmc2V0IHwgNF0gPDwgMjQgfCBIRUFQW29mZnNldCB8IDVdIDw8IDE2IHwgSEVBUFtvZmZzZXQgfCA2XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA3XSwgSEVBUFtvZmZzZXQgfCA4XSA8PCAyNCB8IEhFQVBbb2Zmc2V0IHwgOV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDEwXSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAxMV0sIEhFQVBbb2Zmc2V0IHwgMTJdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAxM10gPDwgMTYgfCBIRUFQW29mZnNldCB8IDE0XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAxNV0sIEhFQVBbb2Zmc2V0IHwgMTZdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAxN10gPDwgMTYgfCBIRUFQW29mZnNldCB8IDE4XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAxOV0sIEhFQVBbb2Zmc2V0IHwgMjBdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAyMV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDIyXSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAyM10sIEhFQVBbb2Zmc2V0IHwgMjRdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAyNV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDI2XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAyN10sIEhFQVBbb2Zmc2V0IHwgMjhdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAyOV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDMwXSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAzMV0sIEhFQVBbb2Zmc2V0IHwgMzJdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAzM10gPDwgMTYgfCBIRUFQW29mZnNldCB8IDM0XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAzNV0sIEhFQVBbb2Zmc2V0IHwgMzZdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCAzN10gPDwgMTYgfCBIRUFQW29mZnNldCB8IDM4XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCAzOV0sIEhFQVBbb2Zmc2V0IHwgNDBdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCA0MV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDQyXSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA0M10sIEhFQVBbb2Zmc2V0IHwgNDRdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCA0NV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDQ2XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA0N10sIEhFQVBbb2Zmc2V0IHwgNDhdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCA0OV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDUwXSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA1MV0sIEhFQVBbb2Zmc2V0IHwgNTJdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCA1M10gPDwgMTYgfCBIRUFQW29mZnNldCB8IDU0XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA1NV0sIEhFQVBbb2Zmc2V0IHwgNTZdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCA1N10gPDwgMTYgfCBIRUFQW29mZnNldCB8IDU4XSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA1OV0sIEhFQVBbb2Zmc2V0IHwgNjBdIDw8IDI0IHwgSEVBUFtvZmZzZXQgfCA2MV0gPDwgMTYgfCBIRUFQW29mZnNldCB8IDYyXSA8PCA4IHwgSEVBUFtvZmZzZXQgfCA2M10pO1xuICAgIH1cblxuICAgIC8vIG9mZnNldCDigJQgbXVsdGlwbGUgb2YgMzJcbiAgICBmdW5jdGlvbiBfc3RhdGVfdG9faGVhcChvdXRwdXQpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHwgMDtcblxuICAgICAgICBIRUFQW291dHB1dCB8IDBdID0gSDAgPj4+IDI0O1xuICAgICAgICBIRUFQW291dHB1dCB8IDFdID0gSDAgPj4+IDE2ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDJdID0gSDAgPj4+IDggJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgM10gPSBIMCAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCA0XSA9IEgxID4+PiAyNDtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCA1XSA9IEgxID4+PiAxNiAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCA2XSA9IEgxID4+PiA4ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDddID0gSDEgJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgOF0gPSBIMiA+Pj4gMjQ7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgOV0gPSBIMiA+Pj4gMTYgJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMTBdID0gSDIgPj4+IDggJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMTFdID0gSDIgJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMTJdID0gSDMgPj4+IDI0O1xuICAgICAgICBIRUFQW291dHB1dCB8IDEzXSA9IEgzID4+PiAxNiAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAxNF0gPSBIMyA+Pj4gOCAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAxNV0gPSBIMyAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAxNl0gPSBINCA+Pj4gMjQ7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMTddID0gSDQgPj4+IDE2ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDE4XSA9IEg0ID4+PiA4ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDE5XSA9IEg0ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDIwXSA9IEg1ID4+PiAyNDtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAyMV0gPSBINSA+Pj4gMTYgJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMjJdID0gSDUgPj4+IDggJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMjNdID0gSDUgJiAyNTU7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMjRdID0gSDYgPj4+IDI0O1xuICAgICAgICBIRUFQW291dHB1dCB8IDI1XSA9IEg2ID4+PiAxNiAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAyNl0gPSBINiA+Pj4gOCAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAyN10gPSBINiAmIDI1NTtcbiAgICAgICAgSEVBUFtvdXRwdXQgfCAyOF0gPSBINyA+Pj4gMjQ7XG4gICAgICAgIEhFQVBbb3V0cHV0IHwgMjldID0gSDcgPj4+IDE2ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDMwXSA9IEg3ID4+PiA4ICYgMjU1O1xuICAgICAgICBIRUFQW291dHB1dCB8IDMxXSA9IEg3ICYgMjU1O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICBIMCA9IDB4NmEwOWU2Njc7XG4gICAgICAgIEgxID0gMHhiYjY3YWU4NTtcbiAgICAgICAgSDIgPSAweDNjNmVmMzcyO1xuICAgICAgICBIMyA9IDB4YTU0ZmY1M2E7XG4gICAgICAgIEg0ID0gMHg1MTBlNTI3ZjtcbiAgICAgICAgSDUgPSAweDliMDU2ODhjO1xuICAgICAgICBINiA9IDB4MWY4M2Q5YWI7XG4gICAgICAgIEg3ID0gMHg1YmUwY2QxOTtcbiAgICAgICAgVE9UQUwwID0gVE9UQUwxID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0KGgwLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBoNywgdG90YWwwLCB0b3RhbDEpIHtcbiAgICAgICAgaDAgPSBoMCB8IDA7XG4gICAgICAgIGgxID0gaDEgfCAwO1xuICAgICAgICBoMiA9IGgyIHwgMDtcbiAgICAgICAgaDMgPSBoMyB8IDA7XG4gICAgICAgIGg0ID0gaDQgfCAwO1xuICAgICAgICBoNSA9IGg1IHwgMDtcbiAgICAgICAgaDYgPSBoNiB8IDA7XG4gICAgICAgIGg3ID0gaDcgfCAwO1xuICAgICAgICB0b3RhbDAgPSB0b3RhbDAgfCAwO1xuICAgICAgICB0b3RhbDEgPSB0b3RhbDEgfCAwO1xuXG4gICAgICAgIEgwID0gaDA7XG4gICAgICAgIEgxID0gaDE7XG4gICAgICAgIEgyID0gaDI7XG4gICAgICAgIEgzID0gaDM7XG4gICAgICAgIEg0ID0gaDQ7XG4gICAgICAgIEg1ID0gaDU7XG4gICAgICAgIEg2ID0gaDY7XG4gICAgICAgIEg3ID0gaDc7XG4gICAgICAgIFRPVEFMMCA9IHRvdGFsMDtcbiAgICAgICAgVE9UQUwxID0gdG90YWwxO1xuICAgIH1cblxuICAgIC8vIG9mZnNldCDigJQgbXVsdGlwbGUgb2YgNjRcbiAgICBmdW5jdGlvbiBwcm9jZXNzKG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8IDA7XG4gICAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDA7XG5cbiAgICAgICAgdmFyIGhhc2hlZCA9IDA7XG5cbiAgICAgICAgaWYgKG9mZnNldCAmIDYzKSByZXR1cm4gLTE7XG5cbiAgICAgICAgd2hpbGUgKChsZW5ndGggfCAwKSA+PSA2NCkge1xuICAgICAgICAgICAgX2NvcmVfaGVhcChvZmZzZXQpO1xuXG4gICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKyA2NCB8IDA7XG4gICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggLSA2NCB8IDA7XG5cbiAgICAgICAgICAgIGhhc2hlZCA9IGhhc2hlZCArIDY0IHwgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIFRPVEFMMCA9IFRPVEFMMCArIGhhc2hlZCB8IDA7XG4gICAgICAgIGlmIChUT1RBTDAgPj4+IDAgPCBoYXNoZWQgPj4+IDApIFRPVEFMMSA9IFRPVEFMMSArIDEgfCAwO1xuXG4gICAgICAgIHJldHVybiBoYXNoZWQgfCAwO1xuICAgIH1cblxuICAgIC8vIG9mZnNldCDigJQgbXVsdGlwbGUgb2YgNjRcbiAgICAvLyBvdXRwdXQg4oCUIG11bHRpcGxlIG9mIDMyXG4gICAgZnVuY3Rpb24gZmluaXNoKG9mZnNldCwgbGVuZ3RoLCBvdXRwdXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMDtcbiAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMDtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHwgMDtcblxuICAgICAgICB2YXIgaGFzaGVkID0gMCxcbiAgICAgICAgICAgIGkgPSAwO1xuXG4gICAgICAgIGlmIChvZmZzZXQgJiA2MykgcmV0dXJuIC0xO1xuXG4gICAgICAgIGlmICh+b3V0cHV0KSBpZiAob3V0cHV0ICYgMzEpIHJldHVybiAtMTtcblxuICAgICAgICBpZiAoKGxlbmd0aCB8IDApID49IDY0KSB7XG4gICAgICAgICAgICBoYXNoZWQgPSBwcm9jZXNzKG9mZnNldCwgbGVuZ3RoKSB8IDA7XG4gICAgICAgICAgICBpZiAoKGhhc2hlZCB8IDApID09IC0xKSByZXR1cm4gLTE7XG5cbiAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIGhhc2hlZCB8IDA7XG4gICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggLSBoYXNoZWQgfCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFzaGVkID0gaGFzaGVkICsgbGVuZ3RoIHwgMDtcbiAgICAgICAgVE9UQUwwID0gVE9UQUwwICsgbGVuZ3RoIHwgMDtcbiAgICAgICAgaWYgKFRPVEFMMCA+Pj4gMCA8IGxlbmd0aCA+Pj4gMCkgVE9UQUwxID0gVE9UQUwxICsgMSB8IDA7XG5cbiAgICAgICAgSEVBUFtvZmZzZXQgfCBsZW5ndGhdID0gMHg4MDtcblxuICAgICAgICBpZiAoKGxlbmd0aCB8IDApID49IDU2KSB7XG4gICAgICAgICAgICBmb3IgKGkgPSBsZW5ndGggKyAxIHwgMDsgKGkgfCAwKSA8IDY0OyBpID0gaSArIDEgfCAwKSB7XG4gICAgICAgICAgICAgICAgSEVBUFtvZmZzZXQgfCBpXSA9IDB4MDA7XG4gICAgICAgICAgICB9X2NvcmVfaGVhcChvZmZzZXQpO1xuXG4gICAgICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgICAgICAgICBIRUFQW29mZnNldCB8IDBdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IGxlbmd0aCArIDEgfCAwOyAoaSB8IDApIDwgNTk7IGkgPSBpICsgMSB8IDApIHtcbiAgICAgICAgICAgIEhFQVBbb2Zmc2V0IHwgaV0gPSAwO1xuICAgICAgICB9SEVBUFtvZmZzZXQgfCA1Nl0gPSBUT1RBTDEgPj4+IDIxICYgMjU1O1xuICAgICAgICBIRUFQW29mZnNldCB8IDU3XSA9IFRPVEFMMSA+Pj4gMTMgJiAyNTU7XG4gICAgICAgIEhFQVBbb2Zmc2V0IHwgNThdID0gVE9UQUwxID4+PiA1ICYgMjU1O1xuICAgICAgICBIRUFQW29mZnNldCB8IDU5XSA9IFRPVEFMMSA8PCAzICYgMjU1IHwgVE9UQUwwID4+PiAyOTtcbiAgICAgICAgSEVBUFtvZmZzZXQgfCA2MF0gPSBUT1RBTDAgPj4+IDIxICYgMjU1O1xuICAgICAgICBIRUFQW29mZnNldCB8IDYxXSA9IFRPVEFMMCA+Pj4gMTMgJiAyNTU7XG4gICAgICAgIEhFQVBbb2Zmc2V0IHwgNjJdID0gVE9UQUwwID4+PiA1ICYgMjU1O1xuICAgICAgICBIRUFQW29mZnNldCB8IDYzXSA9IFRPVEFMMCA8PCAzICYgMjU1O1xuICAgICAgICBfY29yZV9oZWFwKG9mZnNldCk7XG5cbiAgICAgICAgaWYgKH5vdXRwdXQpIF9zdGF0ZV90b19oZWFwKG91dHB1dCk7XG5cbiAgICAgICAgcmV0dXJuIGhhc2hlZCB8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaG1hY19yZXNldCgpIHtcbiAgICAgICAgSDAgPSBJMDtcbiAgICAgICAgSDEgPSBJMTtcbiAgICAgICAgSDIgPSBJMjtcbiAgICAgICAgSDMgPSBJMztcbiAgICAgICAgSDQgPSBJNDtcbiAgICAgICAgSDUgPSBJNTtcbiAgICAgICAgSDYgPSBJNjtcbiAgICAgICAgSDcgPSBJNztcbiAgICAgICAgVE9UQUwwID0gNjQ7XG4gICAgICAgIFRPVEFMMSA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2htYWNfb3BhZCgpIHtcbiAgICAgICAgSDAgPSBPMDtcbiAgICAgICAgSDEgPSBPMTtcbiAgICAgICAgSDIgPSBPMjtcbiAgICAgICAgSDMgPSBPMztcbiAgICAgICAgSDQgPSBPNDtcbiAgICAgICAgSDUgPSBPNTtcbiAgICAgICAgSDYgPSBPNjtcbiAgICAgICAgSDcgPSBPNztcbiAgICAgICAgVE9UQUwwID0gNjQ7XG4gICAgICAgIFRPVEFMMSA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaG1hY19pbml0KHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2LCBwNywgcDgsIHA5LCBwMTAsIHAxMSwgcDEyLCBwMTMsIHAxNCwgcDE1KSB7XG4gICAgICAgIHAwID0gcDAgfCAwO1xuICAgICAgICBwMSA9IHAxIHwgMDtcbiAgICAgICAgcDIgPSBwMiB8IDA7XG4gICAgICAgIHAzID0gcDMgfCAwO1xuICAgICAgICBwNCA9IHA0IHwgMDtcbiAgICAgICAgcDUgPSBwNSB8IDA7XG4gICAgICAgIHA2ID0gcDYgfCAwO1xuICAgICAgICBwNyA9IHA3IHwgMDtcbiAgICAgICAgcDggPSBwOCB8IDA7XG4gICAgICAgIHA5ID0gcDkgfCAwO1xuICAgICAgICBwMTAgPSBwMTAgfCAwO1xuICAgICAgICBwMTEgPSBwMTEgfCAwO1xuICAgICAgICBwMTIgPSBwMTIgfCAwO1xuICAgICAgICBwMTMgPSBwMTMgfCAwO1xuICAgICAgICBwMTQgPSBwMTQgfCAwO1xuICAgICAgICBwMTUgPSBwMTUgfCAwO1xuXG4gICAgICAgIC8vIG9wYWRcbiAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgX2NvcmUocDAgXiAweDVjNWM1YzVjLCBwMSBeIDB4NWM1YzVjNWMsIHAyIF4gMHg1YzVjNWM1YywgcDMgXiAweDVjNWM1YzVjLCBwNCBeIDB4NWM1YzVjNWMsIHA1IF4gMHg1YzVjNWM1YywgcDYgXiAweDVjNWM1YzVjLCBwNyBeIDB4NWM1YzVjNWMsIHA4IF4gMHg1YzVjNWM1YywgcDkgXiAweDVjNWM1YzVjLCBwMTAgXiAweDVjNWM1YzVjLCBwMTEgXiAweDVjNWM1YzVjLCBwMTIgXiAweDVjNWM1YzVjLCBwMTMgXiAweDVjNWM1YzVjLCBwMTQgXiAweDVjNWM1YzVjLCBwMTUgXiAweDVjNWM1YzVjKTtcbiAgICAgICAgTzAgPSBIMDtcbiAgICAgICAgTzEgPSBIMTtcbiAgICAgICAgTzIgPSBIMjtcbiAgICAgICAgTzMgPSBIMztcbiAgICAgICAgTzQgPSBINDtcbiAgICAgICAgTzUgPSBINTtcbiAgICAgICAgTzYgPSBINjtcbiAgICAgICAgTzcgPSBINztcblxuICAgICAgICAvLyBpcGFkXG4gICAgICAgIHJlc2V0KCk7XG4gICAgICAgIF9jb3JlKHAwIF4gMHgzNjM2MzYzNiwgcDEgXiAweDM2MzYzNjM2LCBwMiBeIDB4MzYzNjM2MzYsIHAzIF4gMHgzNjM2MzYzNiwgcDQgXiAweDM2MzYzNjM2LCBwNSBeIDB4MzYzNjM2MzYsIHA2IF4gMHgzNjM2MzYzNiwgcDcgXiAweDM2MzYzNjM2LCBwOCBeIDB4MzYzNjM2MzYsIHA5IF4gMHgzNjM2MzYzNiwgcDEwIF4gMHgzNjM2MzYzNiwgcDExIF4gMHgzNjM2MzYzNiwgcDEyIF4gMHgzNjM2MzYzNiwgcDEzIF4gMHgzNjM2MzYzNiwgcDE0IF4gMHgzNjM2MzYzNiwgcDE1IF4gMHgzNjM2MzYzNik7XG4gICAgICAgIEkwID0gSDA7XG4gICAgICAgIEkxID0gSDE7XG4gICAgICAgIEkyID0gSDI7XG4gICAgICAgIEkzID0gSDM7XG4gICAgICAgIEk0ID0gSDQ7XG4gICAgICAgIEk1ID0gSDU7XG4gICAgICAgIEk2ID0gSDY7XG4gICAgICAgIEk3ID0gSDc7XG5cbiAgICAgICAgVE9UQUwwID0gNjQ7XG4gICAgICAgIFRPVEFMMSA9IDA7XG4gICAgfVxuXG4gICAgLy8gb2Zmc2V0IOKAlCBtdWx0aXBsZSBvZiA2NFxuICAgIC8vIG91dHB1dCDigJQgbXVsdGlwbGUgb2YgMzJcbiAgICBmdW5jdGlvbiBobWFjX2ZpbmlzaChvZmZzZXQsIGxlbmd0aCwgb3V0cHV0KSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8IDA7XG4gICAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDA7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dCB8IDA7XG5cbiAgICAgICAgdmFyIHQwID0gMCxcbiAgICAgICAgICAgIHQxID0gMCxcbiAgICAgICAgICAgIHQyID0gMCxcbiAgICAgICAgICAgIHQzID0gMCxcbiAgICAgICAgICAgIHQ0ID0gMCxcbiAgICAgICAgICAgIHQ1ID0gMCxcbiAgICAgICAgICAgIHQ2ID0gMCxcbiAgICAgICAgICAgIHQ3ID0gMCxcbiAgICAgICAgICAgIGhhc2hlZCA9IDA7XG5cbiAgICAgICAgaWYgKG9mZnNldCAmIDYzKSByZXR1cm4gLTE7XG5cbiAgICAgICAgaWYgKH5vdXRwdXQpIGlmIChvdXRwdXQgJiAzMSkgcmV0dXJuIC0xO1xuXG4gICAgICAgIGhhc2hlZCA9IGZpbmlzaChvZmZzZXQsIGxlbmd0aCwgLTEpIHwgMDtcbiAgICAgICAgdDAgPSBIMCwgdDEgPSBIMSwgdDIgPSBIMiwgdDMgPSBIMywgdDQgPSBINCwgdDUgPSBINSwgdDYgPSBINiwgdDcgPSBINztcblxuICAgICAgICBfaG1hY19vcGFkKCk7XG4gICAgICAgIF9jb3JlKHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgMHg4MDAwMDAwMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzY4KTtcblxuICAgICAgICBpZiAofm91dHB1dCkgX3N0YXRlX3RvX2hlYXAob3V0cHV0KTtcblxuICAgICAgICByZXR1cm4gaGFzaGVkIHwgMDtcbiAgICB9XG5cbiAgICAvLyBzYWx0IGlzIGFzc3VtZWQgdG8gYmUgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAvLyBvZmZzZXQg4oCUIG11bHRpcGxlIG9mIDY0XG4gICAgLy8gb3V0cHV0IOKAlCBtdWx0aXBsZSBvZiAzMlxuICAgIGZ1bmN0aW9uIHBia2RmMl9nZW5lcmF0ZV9ibG9jayhvZmZzZXQsIGxlbmd0aCwgYmxvY2ssIGNvdW50LCBvdXRwdXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMDtcbiAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMDtcbiAgICAgICAgYmxvY2sgPSBibG9jayB8IDA7XG4gICAgICAgIGNvdW50ID0gY291bnQgfCAwO1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQgfCAwO1xuXG4gICAgICAgIHZhciBoMCA9IDAsXG4gICAgICAgICAgICBoMSA9IDAsXG4gICAgICAgICAgICBoMiA9IDAsXG4gICAgICAgICAgICBoMyA9IDAsXG4gICAgICAgICAgICBoNCA9IDAsXG4gICAgICAgICAgICBoNSA9IDAsXG4gICAgICAgICAgICBoNiA9IDAsXG4gICAgICAgICAgICBoNyA9IDAsXG4gICAgICAgICAgICB0MCA9IDAsXG4gICAgICAgICAgICB0MSA9IDAsXG4gICAgICAgICAgICB0MiA9IDAsXG4gICAgICAgICAgICB0MyA9IDAsXG4gICAgICAgICAgICB0NCA9IDAsXG4gICAgICAgICAgICB0NSA9IDAsXG4gICAgICAgICAgICB0NiA9IDAsXG4gICAgICAgICAgICB0NyA9IDA7XG5cbiAgICAgICAgaWYgKG9mZnNldCAmIDYzKSByZXR1cm4gLTE7XG5cbiAgICAgICAgaWYgKH5vdXRwdXQpIGlmIChvdXRwdXQgJiAzMSkgcmV0dXJuIC0xO1xuXG4gICAgICAgIC8vIHBhZCBibG9jayBudW1iZXIgaW50byBoZWFwXG4gICAgICAgIC8vIEZJWE1FIHByb2JhYmxlIE9PQiB3cml0ZVxuICAgICAgICBIRUFQW29mZnNldCArIGxlbmd0aCB8IDBdID0gYmxvY2sgPj4+IDI0O1xuICAgICAgICBIRUFQW29mZnNldCArIGxlbmd0aCArIDEgfCAwXSA9IGJsb2NrID4+PiAxNiAmIDI1NTtcbiAgICAgICAgSEVBUFtvZmZzZXQgKyBsZW5ndGggKyAyIHwgMF0gPSBibG9jayA+Pj4gOCAmIDI1NTtcbiAgICAgICAgSEVBUFtvZmZzZXQgKyBsZW5ndGggKyAzIHwgMF0gPSBibG9jayAmIDI1NTtcblxuICAgICAgICAvLyBmaW5pc2ggZmlyc3QgaXRlcmF0aW9uXG4gICAgICAgIGhtYWNfZmluaXNoKG9mZnNldCwgbGVuZ3RoICsgNCB8IDAsIC0xKSB8IDA7XG4gICAgICAgIGgwID0gdDAgPSBIMCwgaDEgPSB0MSA9IEgxLCBoMiA9IHQyID0gSDIsIGgzID0gdDMgPSBIMywgaDQgPSB0NCA9IEg0LCBoNSA9IHQ1ID0gSDUsIGg2ID0gdDYgPSBINiwgaDcgPSB0NyA9IEg3O1xuICAgICAgICBjb3VudCA9IGNvdW50IC0gMSB8IDA7XG5cbiAgICAgICAgLy8gcGVyZm9ybSB0aGUgcmVzdCBpdGVyYXRpb25zXG4gICAgICAgIHdoaWxlICgoY291bnQgfCAwKSA+IDApIHtcbiAgICAgICAgICAgIGhtYWNfcmVzZXQoKTtcbiAgICAgICAgICAgIF9jb3JlKHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgMHg4MDAwMDAwMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzY4KTtcbiAgICAgICAgICAgIHQwID0gSDAsIHQxID0gSDEsIHQyID0gSDIsIHQzID0gSDMsIHQ0ID0gSDQsIHQ1ID0gSDUsIHQ2ID0gSDYsIHQ3ID0gSDc7XG5cbiAgICAgICAgICAgIF9obWFjX29wYWQoKTtcbiAgICAgICAgICAgIF9jb3JlKHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgMHg4MDAwMDAwMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzY4KTtcbiAgICAgICAgICAgIHQwID0gSDAsIHQxID0gSDEsIHQyID0gSDIsIHQzID0gSDMsIHQ0ID0gSDQsIHQ1ID0gSDUsIHQ2ID0gSDYsIHQ3ID0gSDc7XG5cbiAgICAgICAgICAgIGgwID0gaDAgXiBIMDtcbiAgICAgICAgICAgIGgxID0gaDEgXiBIMTtcbiAgICAgICAgICAgIGgyID0gaDIgXiBIMjtcbiAgICAgICAgICAgIGgzID0gaDMgXiBIMztcbiAgICAgICAgICAgIGg0ID0gaDQgXiBINDtcbiAgICAgICAgICAgIGg1ID0gaDUgXiBINTtcbiAgICAgICAgICAgIGg2ID0gaDYgXiBINjtcbiAgICAgICAgICAgIGg3ID0gaDcgXiBINztcblxuICAgICAgICAgICAgY291bnQgPSBjb3VudCAtIDEgfCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgSDAgPSBoMDtcbiAgICAgICAgSDEgPSBoMTtcbiAgICAgICAgSDIgPSBoMjtcbiAgICAgICAgSDMgPSBoMztcbiAgICAgICAgSDQgPSBoNDtcbiAgICAgICAgSDUgPSBoNTtcbiAgICAgICAgSDYgPSBoNjtcbiAgICAgICAgSDcgPSBoNztcblxuICAgICAgICBpZiAofm91dHB1dCkgX3N0YXRlX3RvX2hlYXAob3V0cHV0KTtcblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBTSEEyNTZcbiAgICAgICAgcmVzZXQ6IHJlc2V0LFxuICAgICAgICBpbml0OiBpbml0LFxuICAgICAgICBwcm9jZXNzOiBwcm9jZXNzLFxuICAgICAgICBmaW5pc2g6IGZpbmlzaCxcblxuICAgICAgICAvLyBITUFDLVNIQTI1NlxuICAgICAgICBobWFjX3Jlc2V0OiBobWFjX3Jlc2V0LFxuICAgICAgICBobWFjX2luaXQ6IGhtYWNfaW5pdCxcbiAgICAgICAgaG1hY19maW5pc2g6IGhtYWNfZmluaXNoLFxuXG4gICAgICAgIC8vIFBCS0RGMi1ITUFDLVNIQTI1NlxuICAgICAgICBwYmtkZjJfZ2VuZXJhdGVfYmxvY2s6IHBia2RmMl9nZW5lcmF0ZV9ibG9ja1xuICAgIH07XG59XG5cbn0se31dLDE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuX3NoYTI1Nl9oYXNoX3NpemUgPSBleHBvcnRzLl9zaGEyNTZfYmxvY2tfc2l6ZSA9IHVuZGVmaW5lZDtcbmV4cG9ydHMuc2hhMjU2X2NvbnN0cnVjdG9yID0gc2hhMjU2X2NvbnN0cnVjdG9yO1xuZXhwb3J0cy5nZXRfc2hhMjU2X2luc3RhbmNlID0gZ2V0X3NoYTI1Nl9pbnN0YW5jZTtcblxudmFyIF9zaGEgPSBfZGVyZXFfKCcuL3NoYTI1Ni5hc20nKTtcblxudmFyIF9oYXNoID0gX2RlcmVxXygnLi4vaGFzaCcpO1xuXG52YXIgX3V0aWxzID0gX2RlcmVxXygnLi4vLi4vdXRpbHMnKTtcblxudmFyIF9zaGEyNTZfYmxvY2tfc2l6ZSA9IGV4cG9ydHMuX3NoYTI1Nl9ibG9ja19zaXplID0gNjQ7XG52YXIgX3NoYTI1Nl9oYXNoX3NpemUgPSBleHBvcnRzLl9zaGEyNTZfaGFzaF9zaXplID0gMzI7XG5cbmZ1bmN0aW9uIHNoYTI1Nl9jb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuaGVhcCA9ICgwLCBfdXRpbHMuX2hlYXBfaW5pdCkoVWludDhBcnJheSwgb3B0aW9ucy5oZWFwKTtcbiAgdGhpcy5hc20gPSBvcHRpb25zLmFzbSB8fCAoMCwgX3NoYS5zaGEyNTZfYXNtKSh7IFVpbnQ4QXJyYXk6IFVpbnQ4QXJyYXkgfSwgbnVsbCwgdGhpcy5oZWFwLmJ1ZmZlcik7XG5cbiAgdGhpcy5CTE9DS19TSVpFID0gX3NoYTI1Nl9ibG9ja19zaXplO1xuICB0aGlzLkhBU0hfU0laRSA9IF9zaGEyNTZfaGFzaF9zaXplO1xuXG4gIHRoaXMucmVzZXQoKTtcbn1cblxuc2hhMjU2X2NvbnN0cnVjdG9yLkJMT0NLX1NJWkUgPSBfc2hhMjU2X2Jsb2NrX3NpemU7XG5zaGEyNTZfY29uc3RydWN0b3IuSEFTSF9TSVpFID0gX3NoYTI1Nl9oYXNoX3NpemU7XG5zaGEyNTZfY29uc3RydWN0b3IuTkFNRSA9ICdzaGEyNTYnO1xuXG52YXIgc2hhMjU2X3Byb3RvdHlwZSA9IHNoYTI1Nl9jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5zaGEyNTZfcHJvdG90eXBlLnJlc2V0ID0gX2hhc2guaGFzaF9yZXNldDtcbnNoYTI1Nl9wcm90b3R5cGUucHJvY2VzcyA9IF9oYXNoLmhhc2hfcHJvY2VzcztcbnNoYTI1Nl9wcm90b3R5cGUuZmluaXNoID0gX2hhc2guaGFzaF9maW5pc2g7XG5cbnZhciBzaGEyNTZfaW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRfc2hhMjU2X2luc3RhbmNlKCkge1xuICBpZiAoc2hhMjU2X2luc3RhbmNlID09PSBudWxsKSBzaGEyNTZfaW5zdGFuY2UgPSBuZXcgc2hhMjU2X2NvbnN0cnVjdG9yKHsgaGVhcFNpemU6IDB4MTAwMDAwIH0pO1xuICByZXR1cm4gc2hhMjU2X2luc3RhbmNlO1xufVxuXG59LHtcIi4uLy4uL3V0aWxzXCI6MTksXCIuLi9oYXNoXCI6MTUsXCIuL3NoYTI1Ni5hc21cIjoxN31dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaW5nX3RvX2J5dGVzID0gc3RyaW5nX3RvX2J5dGVzO1xuZXhwb3J0cy5oZXhfdG9fYnl0ZXMgPSBoZXhfdG9fYnl0ZXM7XG5leHBvcnRzLmJhc2U2NF90b19ieXRlcyA9IGJhc2U2NF90b19ieXRlcztcbmV4cG9ydHMuYnl0ZXNfdG9fc3RyaW5nID0gYnl0ZXNfdG9fc3RyaW5nO1xuZXhwb3J0cy5ieXRlc190b19oZXggPSBieXRlc190b19oZXg7XG5leHBvcnRzLmJ5dGVzX3RvX2Jhc2U2NCA9IGJ5dGVzX3RvX2Jhc2U2NDtcbmV4cG9ydHMucG93Ml9jZWlsID0gcG93Ml9jZWlsO1xuZXhwb3J0cy5pc19udW1iZXIgPSBpc19udW1iZXI7XG5leHBvcnRzLmlzX3N0cmluZyA9IGlzX3N0cmluZztcbmV4cG9ydHMuaXNfYnVmZmVyID0gaXNfYnVmZmVyO1xuZXhwb3J0cy5pc19ieXRlcyA9IGlzX2J5dGVzO1xuZXhwb3J0cy5pc190eXBlZF9hcnJheSA9IGlzX3R5cGVkX2FycmF5O1xuZXhwb3J0cy5faGVhcF9pbml0ID0gX2hlYXBfaW5pdDtcbmV4cG9ydHMuX2hlYXBfd3JpdGUgPSBfaGVhcF93cml0ZTtcbnZhciBGbG9hdEFycmF5ID0gZXhwb3J0cy5GbG9hdEFycmF5ID0gdHlwZW9mIEZsb2F0NjRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBGbG9hdDY0QXJyYXkgOiBGbG9hdDMyQXJyYXk7IC8vIG1ha2UgUGhhbnRvbUpTIGhhcHB5XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtib29sZWFufSBbdXRmOF1cbiAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ190b19ieXRlcyhzdHIsIHV0ZjgpIHtcbiAgdXRmOCA9ICEhdXRmODtcblxuICB2YXIgbGVuID0gc3RyLmxlbmd0aCxcbiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodXRmOCA/IDQgKiBsZW4gOiBsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcblxuICAgIGlmICh1dGY4ICYmIDB4ZDgwMCA8PSBjICYmIGMgPD0gMHhkYmZmKSB7XG4gICAgICBpZiAoKytpID49IGxlbikgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgc3RyaW5nLCBsb3cgc3Vycm9nYXRlIGV4cGVjdGVkIGF0IHBvc2l0aW9uICcgKyBpKTtcbiAgICAgIGMgPSAoYyBeIDB4ZDgwMCkgPDwgMTAgfCAweDEwMDAwIHwgc3RyLmNoYXJDb2RlQXQoaSkgXiAweGRjMDA7XG4gICAgfSBlbHNlIGlmICghdXRmOCAmJiBjID4+PiA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dpZGUgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGY4IHx8IGMgPD0gMHg3Zikge1xuICAgICAgYnl0ZXNbaisrXSA9IGM7XG4gICAgfSBlbHNlIGlmIChjIDw9IDB4N2ZmKSB7XG4gICAgICBieXRlc1tqKytdID0gMHhjMCB8IGMgPj4gNjtcbiAgICAgIGJ5dGVzW2orK10gPSAweDgwIHwgYyAmIDB4M2Y7XG4gICAgfSBlbHNlIGlmIChjIDw9IDB4ZmZmZikge1xuICAgICAgYnl0ZXNbaisrXSA9IDB4ZTAgfCBjID4+IDEyO1xuICAgICAgYnl0ZXNbaisrXSA9IDB4ODAgfCBjID4+IDYgJiAweDNmO1xuICAgICAgYnl0ZXNbaisrXSA9IDB4ODAgfCBjICYgMHgzZjtcbiAgICB9IGVsc2Uge1xuICAgICAgYnl0ZXNbaisrXSA9IDB4ZjAgfCBjID4+IDE4O1xuICAgICAgYnl0ZXNbaisrXSA9IDB4ODAgfCBjID4+IDEyICYgMHgzZjtcbiAgICAgIGJ5dGVzW2orK10gPSAweDgwIHwgYyA+PiA2ICYgMHgzZjtcbiAgICAgIGJ5dGVzW2orK10gPSAweDgwIHwgYyAmIDB4M2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzLnN1YmFycmF5KDAsIGopO1xufVxuXG5mdW5jdGlvbiBoZXhfdG9fYnl0ZXMoc3RyKSB7XG4gIHZhciBsZW4gPSBzdHIubGVuZ3RoO1xuICBpZiAobGVuICYgMSkge1xuICAgIHN0ciA9ICcwJyArIHN0cjtcbiAgICBsZW4rKztcbiAgfVxuICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4gPj4gMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBieXRlc1tpID4+IDFdID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpLCAyKSwgMTYpO1xuICB9XG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYmFzZTY0X3RvX2J5dGVzKHN0cikge1xuICByZXR1cm4gc3RyaW5nX3RvX2J5dGVzKGF0b2Ioc3RyKSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzX3RvX3N0cmluZyhieXRlcywgdXRmOCkge1xuICB1dGY4ID0gISF1dGY4O1xuXG4gIHZhciBsZW4gPSBieXRlcy5sZW5ndGgsXG4gICAgICBjaGFycyA9IG5ldyBBcnJheShsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGIgPSBieXRlc1tpXTtcbiAgICBpZiAoIXV0ZjggfHwgYiA8IDEyOCkge1xuICAgICAgY2hhcnNbaisrXSA9IGI7XG4gICAgfSBlbHNlIGlmIChiID49IDE5MiAmJiBiIDwgMjI0ICYmIGkgKyAxIDwgbGVuKSB7XG4gICAgICBjaGFyc1tqKytdID0gKGIgJiAweDFmKSA8PCA2IHwgYnl0ZXNbKytpXSAmIDB4M2Y7XG4gICAgfSBlbHNlIGlmIChiID49IDIyNCAmJiBiIDwgMjQwICYmIGkgKyAyIDwgbGVuKSB7XG4gICAgICBjaGFyc1tqKytdID0gKGIgJiAweGYpIDw8IDEyIHwgKGJ5dGVzWysraV0gJiAweDNmKSA8PCA2IHwgYnl0ZXNbKytpXSAmIDB4M2Y7XG4gICAgfSBlbHNlIGlmIChiID49IDI0MCAmJiBiIDwgMjQ4ICYmIGkgKyAzIDwgbGVuKSB7XG4gICAgICB2YXIgYyA9IChiICYgNykgPDwgMTggfCAoYnl0ZXNbKytpXSAmIDB4M2YpIDw8IDEyIHwgKGJ5dGVzWysraV0gJiAweDNmKSA8PCA2IHwgYnl0ZXNbKytpXSAmIDB4M2Y7XG4gICAgICBpZiAoYyA8PSAweGZmZmYpIHtcbiAgICAgICAgY2hhcnNbaisrXSA9IGM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjIF49IDB4MTAwMDA7XG4gICAgICAgIGNoYXJzW2orK10gPSAweGQ4MDAgfCBjID4+IDEwO1xuICAgICAgICBjaGFyc1tqKytdID0gMHhkYzAwIHwgYyAmIDB4M2ZmO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEY4IGNoYXJhY3RlciBhdCBieXRlIG9mZnNldCAnICsgaSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ciA9ICcnLFxuICAgICAgYnMgPSAxNjM4NDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqOyBpICs9IGJzKSB7XG4gICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaGFycy5zbGljZShpLCBpICsgYnMgPD0gaiA/IGkgKyBicyA6IGopKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzX3RvX2hleChhcnIpIHtcbiAgdmFyIHN0ciA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBoID0gKGFycltpXSAmIDB4ZmYpLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaC5sZW5ndGggPCAyKSBzdHIgKz0gJzAnO1xuICAgIHN0ciArPSBoO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzX3RvX2Jhc2U2NChhcnIpIHtcbiAgcmV0dXJuIGJ0b2EoYnl0ZXNfdG9fc3RyaW5nKGFycikpO1xufVxuXG5mdW5jdGlvbiBwb3cyX2NlaWwoYSkge1xuICBhIC09IDE7XG4gIGEgfD0gYSA+Pj4gMTtcbiAgYSB8PSBhID4+PiAyO1xuICBhIHw9IGEgPj4+IDQ7XG4gIGEgfD0gYSA+Pj4gODtcbiAgYSB8PSBhID4+PiAxNjtcbiAgYSArPSAxO1xuICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gaXNfbnVtYmVyKGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBhID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNfc3RyaW5nKGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBhID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gaXNfYnVmZmVyKGEpIHtcbiAgcmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gaXNfYnl0ZXMoYSkge1xuICByZXR1cm4gYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7XG59XG5cbmZ1bmN0aW9uIGlzX3R5cGVkX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgfHwgYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgYSBpbnN0YW5jZW9mIEludDE2QXJyYXkgfHwgYSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8IGEgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8IGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fCBhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8IGEgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk7XG59XG5cbmZ1bmN0aW9uIF9oZWFwX2luaXQoY29uc3RydWN0b3IsIGhlYXAsIGhlYXBTaXplKSB7XG4gIHZhciBzaXplID0gaGVhcCA/IGhlYXAuYnl0ZUxlbmd0aCA6IGhlYXBTaXplIHx8IDY1NTM2O1xuXG4gIGlmIChzaXplICYgMHhmZmYgfHwgc2l6ZSA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2hlYXAgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBhbmQgYSBtdWx0aXBsZSBvZiA0MDk2Jyk7XG5cbiAgaGVhcCA9IGhlYXAgfHwgbmV3IGNvbnN0cnVjdG9yKG5ldyBBcnJheUJ1ZmZlcihzaXplKSk7XG5cbiAgcmV0dXJuIGhlYXA7XG59XG5cbmZ1bmN0aW9uIF9oZWFwX3dyaXRlKGhlYXAsIGhwb3MsIGRhdGEsIGRwb3MsIGRsZW4pIHtcbiAgdmFyIGhsZW4gPSBoZWFwLmxlbmd0aCAtIGhwb3MsXG4gICAgICB3bGVuID0gaGxlbiA8IGRsZW4gPyBobGVuIDogZGxlbjtcblxuICBoZWFwLnNldChkYXRhLnN1YmFycmF5KGRwb3MsIGRwb3MgKyB3bGVuKSwgaHBvcyk7XG5cbiAgcmV0dXJuIHdsZW47XG59XG5cbn0se31dLDIwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG59LHtcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCI6NTZ9XSwyMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9kZXJlcV8oXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG59LHtcImNvcmUtanMvbGlicmFyeS9mbi9nZXQtaXRlcmF0b3JcIjo1N31dLDIyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSx7XCJjb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGVcIjo1OH1dLDIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSx7XCJjb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnlcIjo1OX1dLDI0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG59LHtcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCI6NjB9XSwyNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9kZXJlcV8oXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSx7XCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiOjYxfV0sMjY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfZGVyZXFfKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcbn0se1wiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIjo2Mn1dLDI3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllc1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSx7XCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXNcIjo2M31dLDI4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZnJlZXplXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG59LHtcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZnJlZXplXCI6NjR9XSwyOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9kZXJlcV8oXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcbn0se1wiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCI6NjV9XSwzMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9kZXJlcV8oXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcbn0se1wiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCI6NjZ9XSwzMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9kZXJlcV8oXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlc1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSx7XCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlc1wiOjY3fV0sMzI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfZGVyZXFfKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcbn0se1wiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIjo2OH1dLDMzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX2RlcmVxXyhcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcbn0se1wiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiOjY5fV0sMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfZGVyZXFfKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSx7XCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCI6NzB9XSwzNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9wcm9taXNlID0gX2RlcmVxXyhcIi4uL2NvcmUtanMvcHJvbWlzZVwiKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2VuID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIHN0ZXAoa2V5LCBhcmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzdGVwKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RlcChcIm5leHRcIik7XG4gICAgfSk7XG4gIH07XG59O1xufSx7XCIuLi9jb3JlLWpzL3Byb21pc2VcIjozMn1dLDM2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcbn0se31dLDM3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gX2RlcmVxXyhcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xufSx7XCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIjoyNn1dLDM4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3NldFByb3RvdHlwZU9mID0gX2RlcmVxXyhcIi4uL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIik7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX2NyZWF0ZSA9IF9kZXJlcV8oXCIuLi9jb3JlLWpzL29iamVjdC9jcmVhdGVcIik7XG5cbnZhciBfY3JlYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZSk7XG5cbnZhciBfdHlwZW9mMiA9IF9kZXJlcV8oXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyAodHlwZW9mIHN1cGVyQ2xhc3MgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHN1cGVyQ2xhc3MpKSk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCA/ICgwLCBfc2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xufSx7XCIuLi9jb3JlLWpzL29iamVjdC9jcmVhdGVcIjoyNSxcIi4uL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIjozMCxcIi4uL2hlbHBlcnMvdHlwZW9mXCI6NDF9XSwzOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YyID0gX2RlcmVxXyhcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKCh0eXBlb2YgY2FsbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoY2FsbCkpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xufSx7XCIuLi9oZWxwZXJzL3R5cGVvZlwiOjQxfV0sNDA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXNJdGVyYWJsZTIgPSBfZGVyZXFfKFwiLi4vY29yZS1qcy9pcy1pdGVyYWJsZVwiKTtcblxudmFyIF9pc0l0ZXJhYmxlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzSXRlcmFibGUyKTtcblxudmFyIF9nZXRJdGVyYXRvcjIgPSBfZGVyZXFfKFwiLi4vY29yZS1qcy9nZXQtaXRlcmF0b3JcIik7XG5cbnZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SXRlcmF0b3IyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSAoMCwgX2dldEl0ZXJhdG9yMy5kZWZhdWx0KShhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXNJdGVyYWJsZTMuZGVmYXVsdCkoT2JqZWN0KGFycikpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7XG59LHtcIi4uL2NvcmUtanMvZ2V0LWl0ZXJhdG9yXCI6MjEsXCIuLi9jb3JlLWpzL2lzLWl0ZXJhYmxlXCI6MjJ9XSw0MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IF9kZXJlcV8oXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gX2RlcmVxXyhcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTtcbn0se1wiLi4vY29yZS1qcy9zeW1ib2xcIjozMyxcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCI6MzR9XSw0MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuXG59LHtcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIjozMTh9XSw0MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBwbGFjZUhvbGRlcnNDb3VudCAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuICAvLyBpZiB0aGVyZSBhcmUgdHdvIHBsYWNlaG9sZGVycywgdGhhbiB0aGUgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIGl0XG4gIC8vIHJlcHJlc2VudCBvbmUgYnl0ZVxuICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcbiAgLy8gdGhpcyBpcyBqdXN0IGEgY2hlYXAgaGFjayB0byBub3QgZG8gaW5kZXhPZiB0d2ljZVxuICByZXR1cm4gYjY0W2xlbiAtIDJdID09PSAnPScgPyAyIDogYjY0W2xlbiAtIDFdID09PSAnPScgPyAxIDogMFxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG4gIHJldHVybiAoYjY0Lmxlbmd0aCAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycigobGVuICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzKVxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgbCA9IHBsYWNlSG9sZGVycyA+IDAgPyBsZW4gLSA0IDogbGVuXG5cbiAgdmFyIEwgPSAwXG5cbiAgZm9yIChpID0gMDsgaSA8IGw7IGkgKz0gNCkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltMKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgb3V0cHV0ID0gJydcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDJdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz09J1xuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyAodWludDhbbGVuIC0gMV0pXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMTBdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPSdcbiAgfVxuXG4gIHBhcnRzLnB1c2gob3V0cHV0KVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuXG59LHt9XSw0NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVXRpbHNcbiAgZnVuY3Rpb24gYXNzZXJ0ICh2YWwsIG1zZykge1xuICAgIGlmICghdmFsKSB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG4gIH1cblxuICAvLyBDb3VsZCB1c2UgYGluaGVyaXRzYCBtb2R1bGUsIGJ1dCBkb24ndCB3YW50IHRvIG1vdmUgZnJvbSBzaW5nbGUgZmlsZVxuICAvLyBhcmNoaXRlY3R1cmUgeWV0LlxuICBmdW5jdGlvbiBpbmhlcml0cyAoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge307XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTtcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpO1xuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjtcbiAgfVxuXG4gIC8vIEJOXG5cbiAgZnVuY3Rpb24gQk4gKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKEJOLmlzQk4obnVtYmVyKSkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB0aGlzLndvcmRzID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBSZWR1Y3Rpb24gY29udGV4dFxuICAgIHRoaXMucmVkID0gbnVsbDtcblxuICAgIGlmIChudW1iZXIgIT09IG51bGwpIHtcbiAgICAgIGlmIChiYXNlID09PSAnbGUnIHx8IGJhc2UgPT09ICdiZScpIHtcbiAgICAgICAgZW5kaWFuID0gYmFzZTtcbiAgICAgICAgYmFzZSA9IDEwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbml0KG51bWJlciB8fCAwLCBiYXNlIHx8IDEwLCBlbmRpYW4gfHwgJ2JlJyk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gQk47XG4gIH0gZWxzZSB7XG4gICAgZXhwb3J0cy5CTiA9IEJOO1xuICB9XG5cbiAgQk4uQk4gPSBCTjtcbiAgQk4ud29yZFNpemUgPSAyNjtcblxuICB2YXIgQnVmZmVyO1xuICB0cnkge1xuICAgIEJ1ZmZlciA9IF9kZXJlcV8oJ2J1ZmZlcicpLkJ1ZmZlcjtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG5cbiAgQk4uaXNCTiA9IGZ1bmN0aW9uIGlzQk4gKG51bSkge1xuICAgIGlmIChudW0gaW5zdGFuY2VvZiBCTikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bSAhPT0gbnVsbCAmJiB0eXBlb2YgbnVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgbnVtLmNvbnN0cnVjdG9yLndvcmRTaXplID09PSBCTi53b3JkU2l6ZSAmJiBBcnJheS5pc0FycmF5KG51bS53b3Jkcyk7XG4gIH07XG5cbiAgQk4ubWF4ID0gZnVuY3Rpb24gbWF4IChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPiAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ubWluID0gZnVuY3Rpb24gbWluIChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPCAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdCAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlciwgYmFzZSwgZW5kaWFuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAnaGV4Jykge1xuICAgICAgYmFzZSA9IDE2O1xuICAgIH1cbiAgICBhc3NlcnQoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNik7XG5cbiAgICBudW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGlmIChudW1iZXJbMF0gPT09ICctJykge1xuICAgICAgc3RhcnQrKztcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gMTYpIHtcbiAgICAgIHRoaXMuX3BhcnNlSGV4KG51bWJlciwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJzZUJhc2UobnVtYmVyLCBiYXNlLCBzdGFydCk7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLnN0cmlwKCk7XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICB0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksIGJhc2UsIGVuZGlhbik7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyID0gZnVuY3Rpb24gX2luaXROdW1iZXIgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDB4NDAwMDAwMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFsgbnVtYmVyICYgMHgzZmZmZmZmIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPCAweDEwMDAwMDAwMDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobnVtYmVyIDwgMHgyMDAwMDAwMDAwMDAwMCk7IC8vIDIgXiA1MyAodW5zYWZlKVxuICAgICAgdGhpcy53b3JkcyA9IFtcbiAgICAgICAgbnVtYmVyICYgMHgzZmZmZmZmLFxuICAgICAgICAobnVtYmVyIC8gMHg0MDAwMDAwKSAmIDB4M2ZmZmZmZixcbiAgICAgICAgMVxuICAgICAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMztcbiAgICB9XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICAvLyBSZXZlcnNlIHRoZSBieXRlc1xuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXRBcnJheSA9IGZ1bmN0aW9uIF9pbml0QXJyYXkgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgLy8gUGVyaGFwcyBhIFVpbnQ4QXJyYXlcbiAgICBhc3NlcnQodHlwZW9mIG51bWJlci5sZW5ndGggPT09ICdudW1iZXInKTtcbiAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbChudW1iZXIubGVuZ3RoIC8gMyk7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICB2YXIgaiwgdztcbiAgICB2YXIgb2ZmID0gMDtcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMSwgaiA9IDA7IGkgPj0gMDsgaSAtPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgLSAxXSA8PCA4KSB8IChudW1iZXJbaSAtIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB3ID0gbnVtYmVyW2ldIHwgKG51bWJlcltpICsgMV0gPDwgOCkgfCAobnVtYmVyW2kgKyAyXSA8PCAxNik7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqICsgMV0gPSAodyA+Pj4gKDI2IC0gb2ZmKSkgJiAweDNmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyNDtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwYXJzZUhleCAoc3RyLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihzdHIubGVuZ3RoLCBlbmQpO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpIC0gNDg7XG5cbiAgICAgIHIgPDw9IDQ7XG5cbiAgICAgIC8vICdhJyAtICdmJ1xuICAgICAgaWYgKGMgPj0gNDkgJiYgYyA8PSA1NCkge1xuICAgICAgICByIHw9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnIC0gJ0YnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcgJiYgYyA8PSAyMikge1xuICAgICAgICByIHw9IGMgLSAxNyArIDB4YTtcblxuICAgICAgLy8gJzAnIC0gJzknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByIHw9IGMgJiAweGY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUhleCA9IGZ1bmN0aW9uIF9wYXJzZUhleCAobnVtYmVyLCBzdGFydCkge1xuICAgIC8vIENyZWF0ZSBwb3NzaWJseSBiaWdnZXIgYXJyYXkgdG8gZW5zdXJlIHRoYXQgaXQgZml0cyB0aGUgbnVtYmVyXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLmNlaWwoKG51bWJlci5sZW5ndGggLSBzdGFydCkgLyA2KTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIC8vIFNjYW4gMjQtYml0IGNodW5rcyBhbmQgYWRkIHRoZW0gdG8gdGhlIG51bWJlclxuICAgIHZhciBvZmYgPSAwO1xuICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSA2LCBqID0gMDsgaSA+PSBzdGFydDsgaSAtPSA2KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBpLCBpICsgNik7XG4gICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAvLyBOT1RFOiBgMHgzZmZmZmZgIGlzIGludGVudGlvbmFsIGhlcmUsIDI2Yml0cyBtYXggc2hpZnQgKyAyNGJpdCBoZXggbGltYlxuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgICAgb2ZmICs9IDI0O1xuICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgKyA2ICE9PSBzdGFydCkge1xuICAgICAgdyA9IHBhcnNlSGV4KG51bWJlciwgc3RhcnQsIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaiArIDFdIHw9IHcgPj4+ICgyNiAtIG9mZikgJiAweDNmZmZmZjtcbiAgICB9XG4gICAgdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlQmFzZSAoc3RyLCBzdGFydCwgZW5kLCBtdWwpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciAqPSBtdWw7XG5cbiAgICAgIC8vICdhJ1xuICAgICAgaWYgKGMgPj0gNDkpIHtcbiAgICAgICAgciArPSBjIC0gNDkgKyAweGE7XG5cbiAgICAgIC8vICdBJ1xuICAgICAgfSBlbHNlIGlmIChjID49IDE3KSB7XG4gICAgICAgIHIgKz0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgKz0gYztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlQmFzZSA9IGZ1bmN0aW9uIF9wYXJzZUJhc2UgKG51bWJlciwgYmFzZSwgc3RhcnQpIHtcbiAgICAvLyBJbml0aWFsaXplIGFzIHplcm9cbiAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgdGhpcy5sZW5ndGggPSAxO1xuXG4gICAgLy8gRmluZCBsZW5ndGggb2YgbGltYiBpbiBiYXNlXG4gICAgZm9yICh2YXIgbGltYkxlbiA9IDAsIGxpbWJQb3cgPSAxOyBsaW1iUG93IDw9IDB4M2ZmZmZmZjsgbGltYlBvdyAqPSBiYXNlKSB7XG4gICAgICBsaW1iTGVuKys7XG4gICAgfVxuICAgIGxpbWJMZW4tLTtcbiAgICBsaW1iUG93ID0gKGxpbWJQb3cgLyBiYXNlKSB8IDA7XG5cbiAgICB2YXIgdG90YWwgPSBudW1iZXIubGVuZ3RoIC0gc3RhcnQ7XG4gICAgdmFyIG1vZCA9IHRvdGFsICUgbGltYkxlbjtcbiAgICB2YXIgZW5kID0gTWF0aC5taW4odG90YWwsIHRvdGFsIC0gbW9kKSArIHN0YXJ0O1xuXG4gICAgdmFyIHdvcmQgPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBsaW1iTGVuKSB7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgaSArIGxpbWJMZW4sIGJhc2UpO1xuXG4gICAgICB0aGlzLmltdWxuKGxpbWJQb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2QgIT09IDApIHtcbiAgICAgIHZhciBwb3cgPSAxO1xuICAgICAgd29yZCA9IHBhcnNlQmFzZShudW1iZXIsIGksIG51bWJlci5sZW5ndGgsIGJhc2UpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbW9kOyBpKyspIHtcbiAgICAgICAgcG93ICo9IGJhc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW11bG4ocG93KTtcbiAgICAgIGlmICh0aGlzLndvcmRzWzBdICsgd29yZCA8IDB4NDAwMDAwMCkge1xuICAgICAgICB0aGlzLndvcmRzWzBdICs9IHdvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pYWRkbih3b3JkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkZXN0KSB7XG4gICAgZGVzdC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXN0LndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICB9XG4gICAgZGVzdC5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICBkZXN0Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICBkZXN0LnJlZCA9IHRoaXMucmVkO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICB2YXIgciA9IG5ldyBCTihudWxsKTtcbiAgICB0aGlzLmNvcHkocik7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbiBfZXhwYW5kIChzaXplKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFJlbW92ZSBsZWFkaW5nIGAwYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3RyaXAgPSBmdW5jdGlvbiBzdHJpcCAoKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoID4gMSAmJiB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fbm9ybVNpZ24gPSBmdW5jdGlvbiBfbm9ybVNpZ24gKCkge1xuICAgIC8vIC0wID0gMFxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICByZXR1cm4gKHRoaXMucmVkID8gJzxCTi1SOiAnIDogJzxCTjogJykgKyB0aGlzLnRvU3RyaW5nKDE2KSArICc+JztcbiAgfTtcblxuICAvKlxuXG4gIHZhciB6ZXJvcyA9IFtdO1xuICB2YXIgZ3JvdXBTaXplcyA9IFtdO1xuICB2YXIgZ3JvdXBCYXNlcyA9IFtdO1xuXG4gIHZhciBzID0gJyc7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBCTi53b3JkU2l6ZSkge1xuICAgIHplcm9zW2ldID0gcztcbiAgICBzICs9ICcwJztcbiAgfVxuICBncm91cFNpemVzWzBdID0gMDtcbiAgZ3JvdXBTaXplc1sxXSA9IDA7XG4gIGdyb3VwQmFzZXNbMF0gPSAwO1xuICBncm91cEJhc2VzWzFdID0gMDtcbiAgdmFyIGJhc2UgPSAyIC0gMTtcbiAgd2hpbGUgKCsrYmFzZSA8IDM2ICsgMSkge1xuICAgIHZhciBncm91cFNpemUgPSAwO1xuICAgIHZhciBncm91cEJhc2UgPSAxO1xuICAgIHdoaWxlIChncm91cEJhc2UgPCAoMSA8PCBCTi53b3JkU2l6ZSkgLyBiYXNlKSB7XG4gICAgICBncm91cEJhc2UgKj0gYmFzZTtcbiAgICAgIGdyb3VwU2l6ZSArPSAxO1xuICAgIH1cbiAgICBncm91cFNpemVzW2Jhc2VdID0gZ3JvdXBTaXplO1xuICAgIGdyb3VwQmFzZXNbYmFzZV0gPSBncm91cEJhc2U7XG4gIH1cblxuICAqL1xuXG4gIHZhciB6ZXJvcyA9IFtcbiAgICAnJyxcbiAgICAnMCcsXG4gICAgJzAwJyxcbiAgICAnMDAwJyxcbiAgICAnMDAwMCcsXG4gICAgJzAwMDAwJyxcbiAgICAnMDAwMDAwJyxcbiAgICAnMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcbiAgXTtcblxuICB2YXIgZ3JvdXBTaXplcyA9IFtcbiAgICAwLCAwLFxuICAgIDI1LCAxNiwgMTIsIDExLCAxMCwgOSwgOCxcbiAgICA4LCA3LCA3LCA3LCA3LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1XG4gIF07XG5cbiAgdmFyIGdyb3VwQmFzZXMgPSBbXG4gICAgMCwgMCxcbiAgICAzMzU1NDQzMiwgNDMwNDY3MjEsIDE2Nzc3MjE2LCA0ODgyODEyNSwgNjA0NjYxNzYsIDQwMzUzNjA3LCAxNjc3NzIxNixcbiAgICA0MzA0NjcyMSwgMTAwMDAwMDAsIDE5NDg3MTcxLCAzNTgzMTgwOCwgNjI3NDg1MTcsIDc1Mjk1MzYsIDExMzkwNjI1LFxuICAgIDE2Nzc3MjE2LCAyNDEzNzU2OSwgMzQwMTIyMjQsIDQ3MDQ1ODgxLCA2NDAwMDAwMCwgNDA4NDEwMSwgNTE1MzYzMixcbiAgICA2NDM2MzQzLCA3OTYyNjI0LCA5NzY1NjI1LCAxMTg4MTM3NiwgMTQzNDg5MDcsIDE3MjEwMzY4LCAyMDUxMTE0OSxcbiAgICAyNDMwMDAwMCwgMjg2MjkxNTEsIDMzNTU0NDMyLCAzOTEzNTM5MywgNDU0MzU0MjQsIDUyNTIxODc1LCA2MDQ2NjE3NlxuICBdO1xuXG4gIEJOLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChiYXNlLCBwYWRkaW5nKSB7XG4gICAgYmFzZSA9IGJhc2UgfHwgMTA7XG4gICAgcGFkZGluZyA9IHBhZGRpbmcgfCAwIHx8IDE7XG5cbiAgICB2YXIgb3V0O1xuICAgIGlmIChiYXNlID09PSAxNiB8fCBiYXNlID09PSAnaGV4Jykge1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgb2ZmID0gMDtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHcgPSB0aGlzLndvcmRzW2ldO1xuICAgICAgICB2YXIgd29yZCA9ICgoKHcgPDwgb2ZmKSB8IGNhcnJ5KSAmIDB4ZmZmZmZmKS50b1N0cmluZygxNik7XG4gICAgICAgIGNhcnJ5ID0gKHcgPj4+ICgyNCAtIG9mZikpICYgMHhmZmZmZmY7XG4gICAgICAgIGlmIChjYXJyeSAhPT0gMCB8fCBpICE9PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1s2IC0gd29yZC5sZW5ndGhdICsgd29yZCArIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgPSB3b3JkICsgb3V0O1xuICAgICAgICB9XG4gICAgICAgIG9mZiArPSAyO1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICAgIG91dCA9IGNhcnJ5LnRvU3RyaW5nKDE2KSArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KSB7XG4gICAgICAvLyB2YXIgZ3JvdXBTaXplID0gTWF0aC5mbG9vcihCTi53b3JkU2l6ZSAqIE1hdGguTE4yIC8gTWF0aC5sb2coYmFzZSkpO1xuICAgICAgdmFyIGdyb3VwU2l6ZSA9IGdyb3VwU2l6ZXNbYmFzZV07XG4gICAgICAvLyB2YXIgZ3JvdXBCYXNlID0gTWF0aC5wb3coYmFzZSwgZ3JvdXBTaXplKTtcbiAgICAgIHZhciBncm91cEJhc2UgPSBncm91cEJhc2VzW2Jhc2VdO1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgYyA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIGMubmVnYXRpdmUgPSAwO1xuICAgICAgd2hpbGUgKCFjLmlzWmVybygpKSB7XG4gICAgICAgIHZhciByID0gYy5tb2RuKGdyb3VwQmFzZSkudG9TdHJpbmcoYmFzZSk7XG4gICAgICAgIGMgPSBjLmlkaXZuKGdyb3VwQmFzZSk7XG5cbiAgICAgICAgaWYgKCFjLmlzWmVybygpKSB7XG4gICAgICAgICAgb3V0ID0gemVyb3NbZ3JvdXBTaXplIC0gci5sZW5ndGhdICsgciArIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgPSByICsgb3V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1plcm8oKSkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAob3V0Lmxlbmd0aCAlIHBhZGRpbmcgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJy0nICsgb3V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBhc3NlcnQoZmFsc2UsICdCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Jyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIgKCkge1xuICAgIHZhciByZXQgPSB0aGlzLndvcmRzWzBdO1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0ICs9IHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxlbmd0aCA9PT0gMyAmJiB0aGlzLndvcmRzWzJdID09PSAweDAxKSB7XG4gICAgICAvLyBOT1RFOiBhdCB0aGlzIHN0YWdlIGl0IGlzIGtub3duIHRoYXQgdGhlIHRvcCBiaXQgaXMgc2V0XG4gICAgICByZXQgKz0gMHgxMDAwMDAwMDAwMDAwMCArICh0aGlzLndvcmRzWzFdICogMHg0MDAwMDAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gMikge1xuICAgICAgYXNzZXJ0KGZhbHNlLCAnTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzJyk7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgPyAtcmV0IDogcmV0O1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKDE2KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiB0b0J1ZmZlciAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlciwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5TGlrZSA9IGZ1bmN0aW9uIHRvQXJyYXlMaWtlIChBcnJheVR5cGUsIGVuZGlhbiwgbGVuZ3RoKSB7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgoKTtcbiAgICB2YXIgcmVxTGVuZ3RoID0gbGVuZ3RoIHx8IE1hdGgubWF4KDEsIGJ5dGVMZW5ndGgpO1xuICAgIGFzc2VydChieXRlTGVuZ3RoIDw9IHJlcUxlbmd0aCwgJ2J5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgnKTtcbiAgICBhc3NlcnQocmVxTGVuZ3RoID4gMCwgJ1JlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCcpO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuICAgIHZhciBsaXR0bGVFbmRpYW4gPSBlbmRpYW4gPT09ICdsZSc7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKTtcblxuICAgIHZhciBiLCBpO1xuICAgIHZhciBxID0gdGhpcy5jbG9uZSgpO1xuICAgIGlmICghbGl0dGxlRW5kaWFuKSB7XG4gICAgICAvLyBBc3N1bWUgYmlnLWVuZGlhblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJlcUxlbmd0aCAtIGJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbcmVxTGVuZ3RoIC0gaSAtIDFdID0gYjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgIXEuaXNaZXJvKCk7IGkrKykge1xuICAgICAgICBiID0gcS5hbmRsbigweGZmKTtcbiAgICAgICAgcS5pdXNocm4oOCk7XG5cbiAgICAgICAgcmVzW2ldID0gYjtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByZXFMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgaWYgKE1hdGguY2x6MzIpIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHJldHVybiAzMiAtIE1hdGguY2x6MzIodyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHZhciB0ID0gdztcbiAgICAgIHZhciByID0gMDtcbiAgICAgIGlmICh0ID49IDB4MTAwMCkge1xuICAgICAgICByICs9IDEzO1xuICAgICAgICB0ID4+Pj0gMTM7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDQwKSB7XG4gICAgICAgIHIgKz0gNztcbiAgICAgICAgdCA+Pj49IDc7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDgpIHtcbiAgICAgICAgciArPSA0O1xuICAgICAgICB0ID4+Pj0gNDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4MDIpIHtcbiAgICAgICAgciArPSAyO1xuICAgICAgICB0ID4+Pj0gMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiByICsgdDtcbiAgICB9O1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl96ZXJvQml0cyA9IGZ1bmN0aW9uIF96ZXJvQml0cyAodykge1xuICAgIC8vIFNob3J0LWN1dFxuICAgIGlmICh3ID09PSAwKSByZXR1cm4gMjY7XG5cbiAgICB2YXIgdCA9IHc7XG4gICAgdmFyIHIgPSAwO1xuICAgIGlmICgodCAmIDB4MWZmZikgPT09IDApIHtcbiAgICAgIHIgKz0gMTM7XG4gICAgICB0ID4+Pj0gMTM7XG4gICAgfVxuICAgIGlmICgodCAmIDB4N2YpID09PSAwKSB7XG4gICAgICByICs9IDc7XG4gICAgICB0ID4+Pj0gNztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHhmKSA9PT0gMCkge1xuICAgICAgciArPSA0O1xuICAgICAgdCA+Pj49IDQ7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MykgPT09IDApIHtcbiAgICAgIHIgKz0gMjtcbiAgICAgIHQgPj4+PSAyO1xuICAgIH1cbiAgICBpZiAoKHQgJiAweDEpID09PSAwKSB7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIC8vIFJldHVybiBudW1iZXIgb2YgdXNlZCBiaXRzIGluIGEgQk5cbiAgQk4ucHJvdG90eXBlLmJpdExlbmd0aCA9IGZ1bmN0aW9uIGJpdExlbmd0aCAoKSB7XG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGhpID0gdGhpcy5fY291bnRCaXRzKHcpO1xuICAgIHJldHVybiAodGhpcy5sZW5ndGggLSAxKSAqIDI2ICsgaGk7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9CaXRBcnJheSAobnVtKSB7XG4gICAgdmFyIHcgPSBuZXcgQXJyYXkobnVtLmJpdExlbmd0aCgpKTtcblxuICAgIGZvciAodmFyIGJpdCA9IDA7IGJpdCA8IHcubGVuZ3RoOyBiaXQrKykge1xuICAgICAgdmFyIG9mZiA9IChiaXQgLyAyNikgfCAwO1xuICAgICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgICAgd1tiaXRdID0gKG51bS53b3Jkc1tvZmZdICYgKDEgPDwgd2JpdCkpID4+PiB3Yml0O1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0c1xuICBCTi5wcm90b3R5cGUuemVyb0JpdHMgPSBmdW5jdGlvbiB6ZXJvQml0cyAoKSB7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiAwO1xuXG4gICAgdmFyIHIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSB0aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtcbiAgICAgIHIgKz0gYjtcbiAgICAgIGlmIChiICE9PSAyNikgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoID0gZnVuY3Rpb24gYnl0ZUxlbmd0aCAoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpIC8gOCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvVHdvcyA9IGZ1bmN0aW9uIHRvVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tVHdvcyA9IGZ1bmN0aW9uIGZyb21Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLnRlc3RuKHdpZHRoIC0gMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiBpc05lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmUgIT09IDA7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5lZyA9IGZ1bmN0aW9uIGluZWcgKCkge1xuICAgIGlmICghdGhpcy5pc1plcm8oKSkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdW9yID0gZnVuY3Rpb24gaXVvciAobnVtKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbnVtLmxlbmd0aCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldIHwgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlvciA9IGZ1bmN0aW9uIGlvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVvcihudW0pO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pb3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVvciA9IGZ1bmN0aW9uIHVvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdWFuZCA9IGZ1bmN0aW9uIGl1YW5kIChudW0pIHtcbiAgICAvLyBiID0gbWluLWxlbmd0aChudW0sIHRoaXMpXG4gICAgdmFyIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXSAmIG51bS53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IGIubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFuZCA9IGZ1bmN0aW9uIGlhbmQgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1YW5kKG51bSk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYW5kKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51YW5kID0gZnVuY3Rpb24gdWFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdWFuZCh0aGlzKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1eG9yID0gZnVuY3Rpb24gaXV4b3IgKG51bSkge1xuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYTtcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldIF4gYi53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcyAhPT0gYSkge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5peG9yID0gZnVuY3Rpb24gaXhvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXV4b3IobnVtKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5peG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml4b3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnV4b3IgPSBmdW5jdGlvbiB1eG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1eG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1eG9yKHRoaXMpO1xuICB9O1xuXG4gIC8vIE5vdCBgYHRoaXNgYCB3aXRoIGBgd2lkdGhgYCBiaXR3aWR0aFxuICBCTi5wcm90b3R5cGUuaW5vdG4gPSBmdW5jdGlvbiBpbm90biAod2lkdGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyAmJiB3aWR0aCA+PSAwKTtcblxuICAgIHZhciBieXRlc05lZWRlZCA9IE1hdGguY2VpbCh3aWR0aCAvIDI2KSB8IDA7XG4gICAgdmFyIGJpdHNMZWZ0ID0gd2lkdGggJSAyNjtcblxuICAgIC8vIEV4dGVuZCB0aGUgYnVmZmVyIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgICB0aGlzLl9leHBhbmQoYnl0ZXNOZWVkZWQpO1xuXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgYnl0ZXNOZWVkZWQtLTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29tcGxldGUgd29yZHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHJlc2lkdWVcbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAoMHgzZmZmZmZmID4+ICgyNiAtIGJpdHNMZWZ0KSk7XG4gICAgfVxuXG4gICAgLy8gQW5kIHJlbW92ZSBsZWFkaW5nIHplcm9lc1xuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm5vdG4gPSBmdW5jdGlvbiBub3RuICh3aWR0aCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5vdG4od2lkdGgpO1xuICB9O1xuXG4gIC8vIFNldCBgYml0YCBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNldG4gPSBmdW5jdGlvbiBzZXRuIChiaXQsIHZhbCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyAmJiBiaXQgPj0gMCk7XG5cbiAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgIHRoaXMuX2V4cGFuZChvZmYgKyAxKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSB8ICgxIDw8IHdiaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzW29mZl0gPSB0aGlzLndvcmRzW29mZl0gJiB+KDEgPDwgd2JpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBBZGQgYG51bWAgdG8gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAobnVtKSB7XG4gICAgdmFyIHI7XG5cbiAgICAvLyBuZWdhdGl2ZSArIHBvc2l0aXZlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gcG9zaXRpdmUgKyBuZWdhdGl2ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByID0gdGhpcy5pc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHIuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhLCBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSByID4+PiAyNjtcbiAgICB9XG4gICAgZm9yICg7IGNhcnJ5ICE9PSAwICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAvLyBDb3B5IHRoZSByZXN0IG9mIHRoZSB3b3Jkc1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAobnVtKSB7XG4gICAgdmFyIHJlcztcbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwICYmIHRoaXMubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSB0aGlzLnN1YihudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlIF49IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAobnVtLm5lZ2F0aXZlID09PSAwICYmIHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgcmVzID0gbnVtLnN1Yih0aGlzKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGQobnVtKTtcblxuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYWRkKHRoaXMpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAobnVtKSB7XG4gICAgLy8gdGhpcyAtICgtbnVtKSA9IHRoaXMgKyBudW1cbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgdmFyIHIgPSB0aGlzLmlhZGQobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcblxuICAgIC8vIC10aGlzIC0gbnVtID0gLSh0aGlzICsgbnVtKVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGQobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgdmFyIGNtcCA9IHRoaXMuY21wKG51bSk7XG5cbiAgICAvLyBPcHRpbWl6YXRpb24gLSB6ZXJvaWZ5XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGEgPiBiXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGNtcCA+IDApIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSAtIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHIgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgaWYgKGNhcnJ5ID09PSAwICYmIGkgPCBhLmxlbmd0aCAmJiBhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSk7XG5cbiAgICBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBzbWFsbE11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgdmFyIGxlbiA9IChzZWxmLmxlbmd0aCArIG51bS5sZW5ndGgpIHwgMDtcbiAgICBvdXQubGVuZ3RoID0gbGVuO1xuICAgIGxlbiA9IChsZW4gLSAxKSB8IDA7XG5cbiAgICAvLyBQZWVsIG9uZSBpdGVyYXRpb24gKGNvbXBpbGVyIGNhbid0IGRvIGl0LCBiZWNhdXNlIG9mIGNvZGUgY29tcGxleGl0eSlcbiAgICB2YXIgYSA9IHNlbGYud29yZHNbMF0gfCAwO1xuICAgIHZhciBiID0gbnVtLndvcmRzWzBdIHwgMDtcbiAgICB2YXIgciA9IGEgKiBiO1xuXG4gICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICB2YXIgY2FycnkgPSAociAvIDB4NDAwMDAwMCkgfCAwO1xuICAgIG91dC53b3Jkc1swXSA9IGxvO1xuXG4gICAgZm9yICh2YXIgayA9IDE7IGsgPCBsZW47IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBjYXJyeSA+Pj4gMjY7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IChrIC0gaikgfCAwO1xuICAgICAgICBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIGIgPSBudW0ud29yZHNbal0gfCAwO1xuICAgICAgICByID0gYSAqIGIgKyByd29yZDtcbiAgICAgICAgbmNhcnJ5ICs9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkIHwgMDtcbiAgICAgIGNhcnJ5ID0gbmNhcnJ5IHwgMDtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBvdXQud29yZHNba10gPSBjYXJyeSB8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICAvLyBUT0RPKGluZHV0bnkpOiBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBvbWl0IGl0IGZvciB1c2VycyB3aG8gZG9uJ3QgbmVlZFxuICAvLyB0byB3b3JrIHdpdGggMjU2LWJpdCBudW1iZXJzLCBvdGhlcndpc2UgaXQgZ2l2ZXMgMjAlIGltcHJvdmVtZW50IGZvciAyNTYtYml0XG4gIC8vIG11bHRpcGxpY2F0aW9uIChsaWtlIGVsbGlwdGljIHNlY3AyNTZrMSkuXG4gIHZhciBjb21iMTBNdWxUbyA9IGZ1bmN0aW9uIGNvbWIxME11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBhID0gc2VsZi53b3JkcztcbiAgICB2YXIgYiA9IG51bS53b3JkcztcbiAgICB2YXIgbyA9IG91dC53b3JkcztcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIGxvO1xuICAgIHZhciBtaWQ7XG4gICAgdmFyIGhpO1xuICAgIHZhciBhMCA9IGFbMF0gfCAwO1xuICAgIHZhciBhbDAgPSBhMCAmIDB4MWZmZjtcbiAgICB2YXIgYWgwID0gYTAgPj4+IDEzO1xuICAgIHZhciBhMSA9IGFbMV0gfCAwO1xuICAgIHZhciBhbDEgPSBhMSAmIDB4MWZmZjtcbiAgICB2YXIgYWgxID0gYTEgPj4+IDEzO1xuICAgIHZhciBhMiA9IGFbMl0gfCAwO1xuICAgIHZhciBhbDIgPSBhMiAmIDB4MWZmZjtcbiAgICB2YXIgYWgyID0gYTIgPj4+IDEzO1xuICAgIHZhciBhMyA9IGFbM10gfCAwO1xuICAgIHZhciBhbDMgPSBhMyAmIDB4MWZmZjtcbiAgICB2YXIgYWgzID0gYTMgPj4+IDEzO1xuICAgIHZhciBhNCA9IGFbNF0gfCAwO1xuICAgIHZhciBhbDQgPSBhNCAmIDB4MWZmZjtcbiAgICB2YXIgYWg0ID0gYTQgPj4+IDEzO1xuICAgIHZhciBhNSA9IGFbNV0gfCAwO1xuICAgIHZhciBhbDUgPSBhNSAmIDB4MWZmZjtcbiAgICB2YXIgYWg1ID0gYTUgPj4+IDEzO1xuICAgIHZhciBhNiA9IGFbNl0gfCAwO1xuICAgIHZhciBhbDYgPSBhNiAmIDB4MWZmZjtcbiAgICB2YXIgYWg2ID0gYTYgPj4+IDEzO1xuICAgIHZhciBhNyA9IGFbN10gfCAwO1xuICAgIHZhciBhbDcgPSBhNyAmIDB4MWZmZjtcbiAgICB2YXIgYWg3ID0gYTcgPj4+IDEzO1xuICAgIHZhciBhOCA9IGFbOF0gfCAwO1xuICAgIHZhciBhbDggPSBhOCAmIDB4MWZmZjtcbiAgICB2YXIgYWg4ID0gYTggPj4+IDEzO1xuICAgIHZhciBhOSA9IGFbOV0gfCAwO1xuICAgIHZhciBhbDkgPSBhOSAmIDB4MWZmZjtcbiAgICB2YXIgYWg5ID0gYTkgPj4+IDEzO1xuICAgIHZhciBiMCA9IGJbMF0gfCAwO1xuICAgIHZhciBibDAgPSBiMCAmIDB4MWZmZjtcbiAgICB2YXIgYmgwID0gYjAgPj4+IDEzO1xuICAgIHZhciBiMSA9IGJbMV0gfCAwO1xuICAgIHZhciBibDEgPSBiMSAmIDB4MWZmZjtcbiAgICB2YXIgYmgxID0gYjEgPj4+IDEzO1xuICAgIHZhciBiMiA9IGJbMl0gfCAwO1xuICAgIHZhciBibDIgPSBiMiAmIDB4MWZmZjtcbiAgICB2YXIgYmgyID0gYjIgPj4+IDEzO1xuICAgIHZhciBiMyA9IGJbM10gfCAwO1xuICAgIHZhciBibDMgPSBiMyAmIDB4MWZmZjtcbiAgICB2YXIgYmgzID0gYjMgPj4+IDEzO1xuICAgIHZhciBiNCA9IGJbNF0gfCAwO1xuICAgIHZhciBibDQgPSBiNCAmIDB4MWZmZjtcbiAgICB2YXIgYmg0ID0gYjQgPj4+IDEzO1xuICAgIHZhciBiNSA9IGJbNV0gfCAwO1xuICAgIHZhciBibDUgPSBiNSAmIDB4MWZmZjtcbiAgICB2YXIgYmg1ID0gYjUgPj4+IDEzO1xuICAgIHZhciBiNiA9IGJbNl0gfCAwO1xuICAgIHZhciBibDYgPSBiNiAmIDB4MWZmZjtcbiAgICB2YXIgYmg2ID0gYjYgPj4+IDEzO1xuICAgIHZhciBiNyA9IGJbN10gfCAwO1xuICAgIHZhciBibDcgPSBiNyAmIDB4MWZmZjtcbiAgICB2YXIgYmg3ID0gYjcgPj4+IDEzO1xuICAgIHZhciBiOCA9IGJbOF0gfCAwO1xuICAgIHZhciBibDggPSBiOCAmIDB4MWZmZjtcbiAgICB2YXIgYmg4ID0gYjggPj4+IDEzO1xuICAgIHZhciBiOSA9IGJbOV0gfCAwO1xuICAgIHZhciBibDkgPSBiOSAmIDB4MWZmZjtcbiAgICB2YXIgYmg5ID0gYjkgPj4+IDEzO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0gc2VsZi5uZWdhdGl2ZSBeIG51bS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gMTk7XG4gICAgLyogayA9IDAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDAsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMCwgYmgwKTtcbiAgICB2YXIgdzAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcwID4+PiAyNikpIHwgMDtcbiAgICB3MCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDEsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDEpKSB8IDA7XG4gICAgdmFyIHcxID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MSA+Pj4gMjYpKSB8IDA7XG4gICAgdzEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAyICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwyLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDIsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDIsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMikpIHwgMDtcbiAgICB2YXIgdzIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcyID4+PiAyNikpIHwgMDtcbiAgICB3MiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDMsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMykpIHwgMDtcbiAgICB2YXIgdzMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHczID4+PiAyNikpIHwgMDtcbiAgICB3MyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDQsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDQpKSB8IDA7XG4gICAgdmFyIHc0ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NCA+Pj4gMjYpKSB8IDA7XG4gICAgdzQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA1ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw1LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDUsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDUsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNSkpIHwgMDtcbiAgICB2YXIgdzUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc1ID4+PiAyNikpIHwgMDtcbiAgICB3NSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDYsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNikpIHwgMDtcbiAgICB2YXIgdzYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc2ID4+PiAyNikpIHwgMDtcbiAgICB3NiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDcsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDcpKSB8IDA7XG4gICAgdmFyIHc3ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NyA+Pj4gMjYpKSB8IDA7XG4gICAgdzcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA4ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw4LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDgsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDgsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOCkpIHwgMDtcbiAgICB2YXIgdzggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc4ID4+PiAyNikpIHwgMDtcbiAgICB3OCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDkgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzkgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc5ID4+PiAyNikpIHwgMDtcbiAgICB3OSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEwICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDEpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEwID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTAgPj4+IDI2KSkgfCAwO1xuICAgIHcxMCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDExICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDIpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMik7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMikpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMik7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMSA+Pj4gMjYpKSB8IDA7XG4gICAgdzExICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgzKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwzKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgzKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEyID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTIgPj4+IDI2KSkgfCAwO1xuICAgIHcxMiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEzICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDQpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEzID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTMgPj4+IDI2KSkgfCAwO1xuICAgIHcxMyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE0ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDUpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE0ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg2KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw2KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg2KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE1ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTUgPj4+IDI2KSkgfCAwO1xuICAgIHcxNSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE2ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDcpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNyk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNykpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNyk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE2ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTYgPj4+IDI2KSkgfCAwO1xuICAgIHcxNiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE3ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDgpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoOCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsOCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoOCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNyA+Pj4gMjYpKSB8IDA7XG4gICAgdzE3ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg5KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw5KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg5KTtcbiAgICB2YXIgdzE4ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTggPj4+IDI2KSkgfCAwO1xuICAgIHcxOCAmPSAweDNmZmZmZmY7XG4gICAgb1swXSA9IHcwO1xuICAgIG9bMV0gPSB3MTtcbiAgICBvWzJdID0gdzI7XG4gICAgb1szXSA9IHczO1xuICAgIG9bNF0gPSB3NDtcbiAgICBvWzVdID0gdzU7XG4gICAgb1s2XSA9IHc2O1xuICAgIG9bN10gPSB3NztcbiAgICBvWzhdID0gdzg7XG4gICAgb1s5XSA9IHc5O1xuICAgIG9bMTBdID0gdzEwO1xuICAgIG9bMTFdID0gdzExO1xuICAgIG9bMTJdID0gdzEyO1xuICAgIG9bMTNdID0gdzEzO1xuICAgIG9bMTRdID0gdzE0O1xuICAgIG9bMTVdID0gdzE1O1xuICAgIG9bMTZdID0gdzE2O1xuICAgIG9bMTddID0gdzE3O1xuICAgIG9bMThdID0gdzE4O1xuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICBvWzE5XSA9IGM7XG4gICAgICBvdXQubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG5cbiAgLy8gUG9seWZpbGwgY29tYlxuICBpZiAoIU1hdGguaW11bCkge1xuICAgIGNvbWIxME11bFRvID0gc21hbGxNdWxUbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpZ011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aDtcblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgdmFyIGhuY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3V0Lmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBobmNhcnJ5O1xuICAgICAgaG5jYXJyeSA9IDA7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IGsgLSBqO1xuICAgICAgICB2YXIgYSA9IHNlbGYud29yZHNbaV0gfCAwO1xuICAgICAgICB2YXIgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHZhciByID0gYSAqIGI7XG5cbiAgICAgICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArICgociAvIDB4NDAwMDAwMCkgfCAwKSkgfCAwO1xuICAgICAgICBsbyA9IChsbyArIHJ3b3JkKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICAgIG5jYXJyeSA9IChuY2FycnkgKyAobG8gPj4+IDI2KSkgfCAwO1xuXG4gICAgICAgIGhuY2FycnkgKz0gbmNhcnJ5ID4+PiAyNjtcbiAgICAgICAgbmNhcnJ5ICY9IDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkO1xuICAgICAgY2FycnkgPSBuY2Fycnk7XG4gICAgICBuY2FycnkgPSBobmNhcnJ5O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQubGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtYm9NdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICB2YXIgZmZ0bSA9IG5ldyBGRlRNKCk7XG4gICAgcmV0dXJuIGZmdG0ubXVscChzZWxmLCBudW0sIG91dCk7XG4gIH1cblxuICBCTi5wcm90b3R5cGUubXVsVG8gPSBmdW5jdGlvbiBtdWxUbyAobnVtLCBvdXQpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCArIG51bS5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxMCAmJiBudW0ubGVuZ3RoID09PSAxMCkge1xuICAgICAgcmVzID0gY29tYjEwTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgNjMpIHtcbiAgICAgIHJlcyA9IHNtYWxsTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgMTAyNCkge1xuICAgICAgcmVzID0gYmlnTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIENvb2xleS1UdWtleSBhbGdvcml0aG0gZm9yIEZGVFxuICAvLyBzbGlnaHRseSByZXZpc2l0ZWQgdG8gcmVseSBvbiBsb29waW5nIGluc3RlYWQgb2YgcmVjdXJzaW9uXG5cbiAgZnVuY3Rpb24gRkZUTSAoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIEZGVE0ucHJvdG90eXBlLm1ha2VSQlQgPSBmdW5jdGlvbiBtYWtlUkJUIChOKSB7XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIGwgPSBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKSAtIDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHRbaV0gPSB0aGlzLnJldkJpbihpLCBsLCBOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGJpbmFyeS1yZXZlcnNlZCByZXByZXNlbnRhdGlvbiBvZiBgeGBcbiAgRkZUTS5wcm90b3R5cGUucmV2QmluID0gZnVuY3Rpb24gcmV2QmluICh4LCBsLCBOKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gTiAtIDEpIHJldHVybiB4O1xuXG4gICAgdmFyIHJiID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgcmIgfD0gKHggJiAxKSA8PCAobCAtIGkgLSAxKTtcbiAgICAgIHggPj49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJiO1xuICB9O1xuXG4gIC8vIFBlcmZvcm1zIFwidHdlZWRsaW5nXCIgcGhhc2UsIHRoZXJlZm9yZSAnZW11bGF0aW5nJ1xuICAvLyBiZWhhdmlvdXIgb2YgdGhlIHJlY3Vyc2l2ZSBhbGdvcml0aG1cbiAgRkZUTS5wcm90b3R5cGUucGVybXV0ZSA9IGZ1bmN0aW9uIHBlcm11dGUgKHJidCwgcndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcnR3c1tpXSA9IHJ3c1tyYnRbaV1dO1xuICAgICAgaXR3c1tpXSA9IGl3c1tyYnRbaV1dO1xuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiB0cmFuc2Zvcm0gKHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOLCByYnQpIHtcbiAgICB0aGlzLnBlcm11dGUocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTik7XG5cbiAgICBmb3IgKHZhciBzID0gMTsgcyA8IE47IHMgPDw9IDEpIHtcbiAgICAgIHZhciBsID0gcyA8PCAxO1xuXG4gICAgICB2YXIgcnR3ZGYgPSBNYXRoLmNvcygyICogTWF0aC5QSSAvIGwpO1xuICAgICAgdmFyIGl0d2RmID0gTWF0aC5zaW4oMiAqIE1hdGguUEkgLyBsKTtcblxuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBOOyBwICs9IGwpIHtcbiAgICAgICAgdmFyIHJ0d2RmXyA9IHJ0d2RmO1xuICAgICAgICB2YXIgaXR3ZGZfID0gaXR3ZGY7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzOyBqKyspIHtcbiAgICAgICAgICB2YXIgcmUgPSBydHdzW3AgKyBqXTtcbiAgICAgICAgICB2YXIgaWUgPSBpdHdzW3AgKyBqXTtcblxuICAgICAgICAgIHZhciBybyA9IHJ0d3NbcCArIGogKyBzXTtcbiAgICAgICAgICB2YXIgaW8gPSBpdHdzW3AgKyBqICsgc107XG5cbiAgICAgICAgICB2YXIgcnggPSBydHdkZl8gKiBybyAtIGl0d2RmXyAqIGlvO1xuXG4gICAgICAgICAgaW8gPSBydHdkZl8gKiBpbyArIGl0d2RmXyAqIHJvO1xuICAgICAgICAgIHJvID0gcng7XG5cbiAgICAgICAgICBydHdzW3AgKyBqXSA9IHJlICsgcm87XG4gICAgICAgICAgaXR3c1twICsgal0gPSBpZSArIGlvO1xuXG4gICAgICAgICAgcnR3c1twICsgaiArIHNdID0gcmUgLSBybztcbiAgICAgICAgICBpdHdzW3AgKyBqICsgc10gPSBpZSAtIGlvO1xuXG4gICAgICAgICAgLyoganNoaW50IG1heGRlcHRoIDogZmFsc2UgKi9cbiAgICAgICAgICBpZiAoaiAhPT0gbCkge1xuICAgICAgICAgICAgcnggPSBydHdkZiAqIHJ0d2RmXyAtIGl0d2RmICogaXR3ZGZfO1xuXG4gICAgICAgICAgICBpdHdkZl8gPSBydHdkZiAqIGl0d2RmXyArIGl0d2RmICogcnR3ZGZfO1xuICAgICAgICAgICAgcnR3ZGZfID0gcng7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiID0gZnVuY3Rpb24gZ3Vlc3NMZW4xM2IgKG4sIG0pIHtcbiAgICB2YXIgTiA9IE1hdGgubWF4KG0sIG4pIHwgMTtcbiAgICB2YXIgb2RkID0gTiAmIDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoTiA9IE4gLyAyIHwgMDsgTjsgTiA9IE4gPj4+IDEpIHtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gMSA8PCBpICsgMSArIG9kZDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb25qdWdhdGUgPSBmdW5jdGlvbiBjb25qdWdhdGUgKHJ3cywgaXdzLCBOKSB7XG4gICAgaWYgKE4gPD0gMSkgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdCA9IHJ3c1tpXTtcblxuICAgICAgcndzW2ldID0gcndzW04gLSBpIC0gMV07XG4gICAgICByd3NbTiAtIGkgLSAxXSA9IHQ7XG5cbiAgICAgIHQgPSBpd3NbaV07XG5cbiAgICAgIGl3c1tpXSA9IC1pd3NbTiAtIGkgLSAxXTtcbiAgICAgIGl3c1tOIC0gaSAtIDFdID0gLXQ7XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYiA9IGZ1bmN0aW9uIG5vcm1hbGl6ZTEzYiAod3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTiAvIDI7IGkrKykge1xuICAgICAgdmFyIHcgPSBNYXRoLnJvdW5kKHdzWzIgKiBpICsgMV0gLyBOKSAqIDB4MjAwMCArXG4gICAgICAgIE1hdGgucm91bmQod3NbMiAqIGldIC8gTikgK1xuICAgICAgICBjYXJyeTtcblxuICAgICAgd3NbaV0gPSB3ICYgMHgzZmZmZmZmO1xuXG4gICAgICBpZiAodyA8IDB4NDAwMDAwMCkge1xuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHcgLyAweDQwMDAwMDAgfCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3cztcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiID0gZnVuY3Rpb24gY29udmVydDEzYiAod3MsIGxlbiwgcndzLCBOKSB7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjYXJyeSA9IGNhcnJ5ICsgKHdzW2ldIHwgMCk7XG5cbiAgICAgIHJ3c1syICogaV0gPSBjYXJyeSAmIDB4MWZmZjsgY2FycnkgPSBjYXJyeSA+Pj4gMTM7XG4gICAgICByd3NbMiAqIGkgKyAxXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICB9XG5cbiAgICAvLyBQYWQgd2l0aCB6ZXJvZXNcbiAgICBmb3IgKGkgPSAyICogbGVuOyBpIDwgTjsgKytpKSB7XG4gICAgICByd3NbaV0gPSAwO1xuICAgIH1cblxuICAgIGFzc2VydChjYXJyeSA9PT0gMCk7XG4gICAgYXNzZXJ0KChjYXJyeSAmIH4weDFmZmYpID09PSAwKTtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5zdHViID0gZnVuY3Rpb24gc3R1YiAoTikge1xuICAgIHZhciBwaCA9IG5ldyBBcnJheShOKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcGhbaV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBwaDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5tdWxwID0gZnVuY3Rpb24gbXVscCAoeCwgeSwgb3V0KSB7XG4gICAgdmFyIE4gPSAyICogdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCwgeS5sZW5ndGgpO1xuXG4gICAgdmFyIHJidCA9IHRoaXMubWFrZVJCVChOKTtcblxuICAgIHZhciBfID0gdGhpcy5zdHViKE4pO1xuXG4gICAgdmFyIHJ3cyA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgcndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBucndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBucndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbml3c3QgPSBuZXcgQXJyYXkoTik7XG5cbiAgICB2YXIgcm13cyA9IG91dC53b3JkcztcbiAgICBybXdzLmxlbmd0aCA9IE47XG5cbiAgICB0aGlzLmNvbnZlcnQxM2IoeC53b3JkcywgeC5sZW5ndGgsIHJ3cywgTik7XG4gICAgdGhpcy5jb252ZXJ0MTNiKHkud29yZHMsIHkubGVuZ3RoLCBucndzLCBOKTtcblxuICAgIHRoaXMudHJhbnNmb3JtKHJ3cywgXywgcndzdCwgaXdzdCwgTiwgcmJ0KTtcbiAgICB0aGlzLnRyYW5zZm9ybShucndzLCBfLCBucndzdCwgbml3c3QsIE4sIHJidCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIHJ4ID0gcndzdFtpXSAqIG5yd3N0W2ldIC0gaXdzdFtpXSAqIG5pd3N0W2ldO1xuICAgICAgaXdzdFtpXSA9IHJ3c3RbaV0gKiBuaXdzdFtpXSArIGl3c3RbaV0gKiBucndzdFtpXTtcbiAgICAgIHJ3c3RbaV0gPSByeDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmp1Z2F0ZShyd3N0LCBpd3N0LCBOKTtcbiAgICB0aGlzLnRyYW5zZm9ybShyd3N0LCBpd3N0LCBybXdzLCBfLCBOLCByYnQpO1xuICAgIHRoaXMuY29uanVnYXRlKHJtd3MsIF8sIE4pO1xuICAgIHRoaXMubm9ybWFsaXplMTNiKHJtd3MsIE4pO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0geC5uZWdhdGl2ZSBeIHkubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHgubGVuZ3RoICsgeS5sZW5ndGg7XG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGB0aGlzYCBieSBgbnVtYFxuICBCTi5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLm11bFRvKG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBNdWx0aXBseSBlbXBsb3lpbmcgRkZUXG4gIEJOLnByb3RvdHlwZS5tdWxmID0gZnVuY3Rpb24gbXVsZiAobnVtKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCTihudWxsKTtcbiAgICBvdXQud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoKTtcbiAgICByZXR1cm4ganVtYm9NdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgTXVsdGlwbGljYXRpb25cbiAgQk4ucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSwgdGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmltdWxuID0gZnVuY3Rpb24gaW11bG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG5cbiAgICAvLyBDYXJyeVxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKiBudW07XG4gICAgICB2YXIgbG8gPSAodyAmIDB4M2ZmZmZmZikgKyAoY2FycnkgJiAweDNmZmZmZmYpO1xuICAgICAgY2FycnkgPj49IDI2O1xuICAgICAgY2FycnkgKz0gKHcgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgIC8vIE5PVEU6IGxvIGlzIDI3Yml0IG1heGltdW1cbiAgICAgIGNhcnJ5ICs9IGxvID4+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm11bG4gPSBmdW5jdGlvbiBtdWxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSk7XG4gIH07XG5cbiAgLy8gYHRoaXNgICogYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zcXIgPSBmdW5jdGlvbiBzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLm11bCh0aGlzKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyICgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSk7XG4gIH07XG5cbiAgLy8gTWF0aC5wb3coYHRoaXNgLCBgbnVtYClcbiAgQk4ucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyAobnVtKSB7XG4gICAgdmFyIHcgPSB0b0JpdEFycmF5KG51bSk7XG4gICAgaWYgKHcubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IEJOKDEpO1xuXG4gICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lc1xuICAgIHZhciByZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdy5sZW5ndGg7IGkrKywgcmVzID0gcmVzLnNxcigpKSB7XG4gICAgICBpZiAod1tpXSAhPT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCsraSA8IHcubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBxID0gcmVzLnNxcigpOyBpIDwgdy5sZW5ndGg7IGkrKywgcSA9IHEuc3FyKCkpIHtcbiAgICAgICAgaWYgKHdbaV0gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHJlcy5tdWwocSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBTaGlmdC1sZWZ0IGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdXNobG4gPSBmdW5jdGlvbiBpdXNobG4gKGJpdHMpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSAoYml0cyAtIHIpIC8gMjY7XG4gICAgdmFyIGNhcnJ5TWFzayA9ICgweDNmZmZmZmYgPj4+ICgyNiAtIHIpKSA8PCAoMjYgLSByKTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmV3Q2FycnkgPSB0aGlzLndvcmRzW2ldICYgY2FycnlNYXNrO1xuICAgICAgICB2YXIgYyA9ICgodGhpcy53b3Jkc1tpXSB8IDApIC0gbmV3Q2FycnkpIDw8IHI7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBjIHwgY2Fycnk7XG4gICAgICAgIGNhcnJ5ID0gbmV3Q2FycnkgPj4+ICgyNiAtIHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FycnkpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzICE9PSAwKSB7XG4gICAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIHNdID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sZW5ndGggKz0gcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hsbiA9IGZ1bmN0aW9uIGlzaGxuIChiaXRzKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hsbihiaXRzKTtcbiAgfTtcblxuICAvLyBTaGlmdC1yaWdodCBpbi1wbGFjZVxuICAvLyBOT1RFOiBgaGludGAgaXMgYSBsb3dlc3QgYml0IGJlZm9yZSB0cmFpbGluZyB6ZXJvZXNcbiAgLy8gTk9URTogaWYgYGV4dGVuZGVkYCBpcyBwcmVzZW50IC0gaXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZXN0cm95ZWQgYml0c1xuICBCTi5wcm90b3R5cGUuaXVzaHJuID0gZnVuY3Rpb24gaXVzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgaDtcbiAgICBpZiAoaGludCkge1xuICAgICAgaCA9IChoaW50IC0gKGhpbnQgJSAyNikpIC8gMjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gTWF0aC5taW4oKGJpdHMgLSByKSAvIDI2LCB0aGlzLmxlbmd0aCk7XG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgdmFyIG1hc2tlZFdvcmRzID0gZXh0ZW5kZWQ7XG5cbiAgICBoIC09IHM7XG4gICAgaCA9IE1hdGgubWF4KDAsIGgpO1xuXG4gICAgLy8gRXh0ZW5kZWQgbW9kZSwgY29weSBtYXNrZWQgcGFydFxuICAgIGlmIChtYXNrZWRXb3Jkcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgbWFza2VkV29yZHMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuICAgICAgbWFza2VkV29yZHMubGVuZ3RoID0gcztcbiAgICB9XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgLy8gTm8tb3AsIHdlIHNob3VsZCBub3QgbW92ZSBhbnl0aGluZyBhdCBhbGxcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gcykge1xuICAgICAgdGhpcy5sZW5ndGggLT0gcztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2kgKyBzXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiAoY2FycnkgIT09IDAgfHwgaSA+PSBoKTsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IChjYXJyeSA8PCAoMjYgLSByKSkgfCAod29yZCA+Pj4gcik7XG4gICAgICBjYXJyeSA9IHdvcmQgJiBtYXNrO1xuICAgIH1cblxuICAgIC8vIFB1c2ggY2FycmllZCBiaXRzIGFzIGEgbWFza1xuICAgIGlmIChtYXNrZWRXb3JkcyAmJiBjYXJyeSAhPT0gMCkge1xuICAgICAgbWFza2VkV29yZHMud29yZHNbbWFza2VkV29yZHMubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hybiA9IGZ1bmN0aW9uIGlzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIC8vIFRPRE8oaW5kdXRueSk6IGltcGxlbWVudCBtZVxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXNocm4oYml0cywgaGludCwgZXh0ZW5kZWQpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnRcbiAgQk4ucHJvdG90eXBlLnNobG4gPSBmdW5jdGlvbiBzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNobG4gPSBmdW5jdGlvbiB1c2hsbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0XG4gIEJOLnByb3RvdHlwZS5zaHJuID0gZnVuY3Rpb24gc2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVzaHJuID0gZnVuY3Rpb24gdXNocm4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKTtcbiAgfTtcblxuICAvLyBUZXN0IGlmIG4gYml0IGlzIHNldFxuICBCTi5wcm90b3R5cGUudGVzdG4gPSBmdW5jdGlvbiB0ZXN0biAoYml0KSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcbiAgICB2YXIgciA9IGJpdCAlIDI2O1xuICAgIHZhciBzID0gKGJpdCAtIHIpIC8gMjY7XG4gICAgdmFyIHEgPSAxIDw8IHI7XG5cbiAgICAvLyBGYXN0IGNhc2U6IGJpdCBpcyBtdWNoIGhpZ2hlciB0aGFuIGFsbCBleGlzdGluZyB3b3Jkc1xuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBiaXQgYW5kIHJldHVyblxuICAgIHZhciB3ID0gdGhpcy53b3Jkc1tzXTtcblxuICAgIHJldHVybiAhISh3ICYgcSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyIChpbi1wbGFjZSlcbiAgQk4ucHJvdG90eXBlLmltYXNrbiA9IGZ1bmN0aW9uIGltYXNrbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcblxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwLCAnaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzJyk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHMrKztcbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1pbihzLCB0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gJj0gbWFzaztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFJldHVybiBvbmx5IGxvd2VycyBiaXRzIG9mIG51bWJlclxuICBCTi5wcm90b3R5cGUubWFza24gPSBmdW5jdGlvbiBtYXNrbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpO1xuICB9O1xuXG4gIC8vIEFkZCBwbGFpbiBudW1iZXIgYG51bWAgdG8gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pYWRkbiA9IGZ1bmN0aW9uIGlhZGRuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pc3VibigtbnVtKTtcblxuICAgIC8vIFBvc3NpYmxlIHNpZ24gY2hhbmdlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiAodGhpcy53b3Jkc1swXSB8IDApIDwgbnVtKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gPSBudW0gLSAodGhpcy53b3Jkc1swXSB8IDApO1xuICAgICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pc3VibihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aG91dCBjaGVja3NcbiAgICByZXR1cm4gdGhpcy5faWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2lhZGRuID0gZnVuY3Rpb24gX2lhZGRuIChudW0pIHtcbiAgICB0aGlzLndvcmRzWzBdICs9IG51bTtcblxuICAgIC8vIENhcnJ5XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldID49IDB4NDAwMDAwMDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldIC09IDB4NDAwMDAwMDtcbiAgICAgIGlmIChpID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0rKztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSArIDEpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgcGxhaW4gbnVtYmVyIGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pc3VibiA9IGZ1bmN0aW9uIGlzdWJuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pYWRkbigtbnVtKTtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZG4obnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53b3Jkc1swXSAtPSBudW07XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA8IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAtdGhpcy53b3Jkc1swXTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYXJyeVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldIDwgMDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gKz0gMHg0MDAwMDAwO1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSAtPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFkZG4gPSBmdW5jdGlvbiBhZGRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnN1Ym4gPSBmdW5jdGlvbiBzdWJuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlhYnMgPSBmdW5jdGlvbiBpYWJzICgpIHtcbiAgICB0aGlzLm5lZ2F0aXZlID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5hYnMgPSBmdW5jdGlvbiBhYnMgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFicygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWwgPSBmdW5jdGlvbiBfaXNobG5zdWJtdWwgKG51bSwgbXVsLCBzaGlmdCkge1xuICAgIHZhciBsZW4gPSBudW0ubGVuZ3RoICsgc2hpZnQ7XG4gICAgdmFyIGk7XG5cbiAgICB0aGlzLl9leHBhbmQobGVuKTtcblxuICAgIHZhciB3O1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdyA9ICh0aGlzLndvcmRzW2kgKyBzaGlmdF0gfCAwKSArIGNhcnJ5O1xuICAgICAgdmFyIHJpZ2h0ID0gKG51bS53b3Jkc1tpXSB8IDApICogbXVsO1xuICAgICAgdyAtPSByaWdodCAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gKHcgPj4gMjYpIC0gKChyaWdodCAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGggLSBzaGlmdDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHcgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2kgKyBzaGlmdF0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSA9PT0gMCkgcmV0dXJuIHRoaXMuc3RyaXAoKTtcblxuICAgIC8vIFN1YnRyYWN0aW9uIG92ZXJmbG93XG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAtMSk7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gLSh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICB0aGlzLm5lZ2F0aXZlID0gMTtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl93b3JkRGl2ID0gZnVuY3Rpb24gX3dvcmREaXYgKG51bSwgbW9kZSkge1xuICAgIHZhciBzaGlmdCA9IHRoaXMubGVuZ3RoIC0gbnVtLmxlbmd0aDtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtO1xuXG4gICAgLy8gTm9ybWFsaXplXG4gICAgdmFyIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgdmFyIGJoaUJpdHMgPSB0aGlzLl9jb3VudEJpdHMoYmhpKTtcbiAgICBzaGlmdCA9IDI2IC0gYmhpQml0cztcbiAgICBpZiAoc2hpZnQgIT09IDApIHtcbiAgICAgIGIgPSBiLnVzaGxuKHNoaWZ0KTtcbiAgICAgIGEuaXVzaGxuKHNoaWZ0KTtcbiAgICAgIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBxdW90aWVudFxuICAgIHZhciBtID0gYS5sZW5ndGggLSBiLmxlbmd0aDtcbiAgICB2YXIgcTtcblxuICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgcSA9IG5ldyBCTihudWxsKTtcbiAgICAgIHEubGVuZ3RoID0gbSArIDE7XG4gICAgICBxLndvcmRzID0gbmV3IEFycmF5KHEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxLndvcmRzW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlmZiA9IGEuY2xvbmUoKS5faXNobG5zdWJtdWwoYiwgMSwgbSk7XG4gICAgaWYgKGRpZmYubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIGEgPSBkaWZmO1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1ttXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IG0gLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgdmFyIHFqID0gKGEud29yZHNbYi5sZW5ndGggKyBqXSB8IDApICogMHg0MDAwMDAwICtcbiAgICAgICAgKGEud29yZHNbYi5sZW5ndGggKyBqIC0gMV0gfCAwKTtcblxuICAgICAgLy8gTk9URTogKHFqIC8gYmhpKSBpcyAoMHgzZmZmZmZmICogMHg0MDAwMDAwICsgMHgzZmZmZmZmKSAvIDB4MjAwMDAwMCBtYXhcbiAgICAgIC8vICgweDdmZmZmZmYpXG4gICAgICBxaiA9IE1hdGgubWluKChxaiAvIGJoaSkgfCAwLCAweDNmZmZmZmYpO1xuXG4gICAgICBhLl9pc2hsbnN1Ym11bChiLCBxaiwgaik7XG4gICAgICB3aGlsZSAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBxai0tO1xuICAgICAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgYS5faXNobG5zdWJtdWwoYiwgMSwgaik7XG4gICAgICAgIGlmICghYS5pc1plcm8oKSkge1xuICAgICAgICAgIGEubmVnYXRpdmUgXj0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1tqXSA9IHFqO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocSkge1xuICAgICAgcS5zdHJpcCgpO1xuICAgIH1cbiAgICBhLnN0cmlwKCk7XG5cbiAgICAvLyBEZW5vcm1hbGl6ZVxuICAgIGlmIChtb2RlICE9PSAnZGl2JyAmJiBzaGlmdCAhPT0gMCkge1xuICAgICAgYS5pdXNocm4oc2hpZnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXY6IHEgfHwgbnVsbCxcbiAgICAgIG1vZDogYVxuICAgIH07XG4gIH07XG5cbiAgLy8gTk9URTogMSkgYG1vZGVgIGNhbiBiZSBzZXQgdG8gYG1vZGAgdG8gcmVxdWVzdCBtb2Qgb25seSxcbiAgLy8gICAgICAgdG8gYGRpdmAgdG8gcmVxdWVzdCBkaXYgb25seSwgb3IgYmUgYWJzZW50IHRvXG4gIC8vICAgICAgIHJlcXVlc3QgYm90aCBkaXYgJiBtb2RcbiAgLy8gICAgICAgMikgYHBvc2l0aXZlYCBpcyB0cnVlIGlmIHVuc2lnbmVkIG1vZCBpcyByZXF1ZXN0ZWRcbiAgQk4ucHJvdG90eXBlLmRpdm1vZCA9IGZ1bmN0aW9uIGRpdm1vZCAobnVtLCBtb2RlLCBwb3NpdGl2ZSkge1xuICAgIGFzc2VydCghbnVtLmlzWmVybygpKTtcblxuICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiBuZXcgQk4oMClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRpdiwgbW9kLCByZXM7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICByZXMgPSB0aGlzLm5lZygpLmRpdm1vZChudW0sIG1vZGUpO1xuXG4gICAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgICAgZGl2ID0gcmVzLmRpdi5uZWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaWFkZChudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IG1vZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IGRpdixcbiAgICAgICAgbW9kOiByZXMubW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgodGhpcy5uZWdhdGl2ZSAmIG51bS5uZWdhdGl2ZSkgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnZGl2Jykge1xuICAgICAgICBtb2QgPSByZXMubW9kLm5lZygpO1xuICAgICAgICBpZiAocG9zaXRpdmUgJiYgbW9kLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgICAgbW9kLmlzdWIobnVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHJlcy5kaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmUgYXQgdGhpcyBwb2ludFxuXG4gICAgLy8gU3RyaXAgYm90aCBudW1iZXJzIHRvIGFwcHJveGltYXRlIHNoaWZ0IHZhbHVlXG4gICAgaWYgKG51bS5sZW5ndGggPiB0aGlzLmxlbmd0aCB8fCB0aGlzLmNtcChudW0pIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBuZXcgQk4oMCksXG4gICAgICAgIG1vZDogdGhpc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWZXJ5IHNob3J0IHJlZHVjdGlvblxuICAgIGlmIChudW0ubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2RpdicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICAgIG1vZDogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSA9PT0gJ21vZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgIG1vZDogbmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fd29yZERpdihudW0sIG1vZGUpO1xuICB9O1xuXG4gIC8vIEZpbmQgYHRoaXNgIC8gYG51bWBcbiAgQk4ucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uIGRpdiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ2RpdicsIGZhbHNlKS5kaXY7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgJSBgbnVtYFxuICBCTi5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gbW9kIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnbW9kJywgZmFsc2UpLm1vZDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW1vZCA9IGZ1bmN0aW9uIHVtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCB0cnVlKS5tb2Q7XG4gIH07XG5cbiAgLy8gRmluZCBSb3VuZChgdGhpc2AgLyBgbnVtYClcbiAgQk4ucHJvdG90eXBlLmRpdlJvdW5kID0gZnVuY3Rpb24gZGl2Um91bmQgKG51bSkge1xuICAgIHZhciBkbSA9IHRoaXMuZGl2bW9kKG51bSk7XG5cbiAgICAvLyBGYXN0IGNhc2UgLSBleGFjdCBkaXZpc2lvblxuICAgIGlmIChkbS5tb2QuaXNaZXJvKCkpIHJldHVybiBkbS5kaXY7XG5cbiAgICB2YXIgbW9kID0gZG0uZGl2Lm5lZ2F0aXZlICE9PSAwID8gZG0ubW9kLmlzdWIobnVtKSA6IGRtLm1vZDtcblxuICAgIHZhciBoYWxmID0gbnVtLnVzaHJuKDEpO1xuICAgIHZhciByMiA9IG51bS5hbmRsbigxKTtcbiAgICB2YXIgY21wID0gbW9kLmNtcChoYWxmKTtcblxuICAgIC8vIFJvdW5kIGRvd25cbiAgICBpZiAoY21wIDwgMCB8fCByMiA9PT0gMSAmJiBjbXAgPT09IDApIHJldHVybiBkbS5kaXY7XG5cbiAgICAvLyBSb3VuZCB1cFxuICAgIHJldHVybiBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5kaXYuaXN1Ym4oMSkgOiBkbS5kaXYuaWFkZG4oMSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm1vZG4gPSBmdW5jdGlvbiBtb2RuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG4gICAgdmFyIHAgPSAoMSA8PCAyNikgJSBudW07XG5cbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYWNjID0gKHAgKiBhY2MgKyAodGhpcy53b3Jkc1tpXSB8IDApKSAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9O1xuXG4gIC8vIEluLXBsYWNlIGRpdmlzaW9uIGJ5IG51bWJlclxuICBCTi5wcm90b3R5cGUuaWRpdm4gPSBmdW5jdGlvbiBpZGl2biAobnVtKSB7XG4gICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYpO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHcgPSAodGhpcy53b3Jkc1tpXSB8IDApICsgY2FycnkgKiAweDQwMDAwMDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKHcgLyBudW0pIHwgMDtcbiAgICAgIGNhcnJ5ID0gdyAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5kaXZuID0gZnVuY3Rpb24gZGl2biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lZ2NkID0gZnVuY3Rpb24gZWdjZCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIHggPSB0aGlzO1xuICAgIHZhciB5ID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKHgubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHggPSB4LnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4LmNsb25lKCk7XG4gICAgfVxuXG4gICAgLy8gQSAqIHggKyBCICogeSA9IHhcbiAgICB2YXIgQSA9IG5ldyBCTigxKTtcbiAgICB2YXIgQiA9IG5ldyBCTigwKTtcblxuICAgIC8vIEMgKiB4ICsgRCAqIHkgPSB5XG4gICAgdmFyIEMgPSBuZXcgQk4oMCk7XG4gICAgdmFyIEQgPSBuZXcgQk4oMSk7XG5cbiAgICB2YXIgZyA9IDA7XG5cbiAgICB3aGlsZSAoeC5pc0V2ZW4oKSAmJiB5LmlzRXZlbigpKSB7XG4gICAgICB4Lml1c2hybigxKTtcbiAgICAgIHkuaXVzaHJuKDEpO1xuICAgICAgKytnO1xuICAgIH1cblxuICAgIHZhciB5cCA9IHkuY2xvbmUoKTtcbiAgICB2YXIgeHAgPSB4LmNsb25lKCk7XG5cbiAgICB3aGlsZSAoIXguaXNaZXJvKCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7ICh4LndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgeC5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEEuaXNPZGQoKSB8fCBCLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEEuaWFkZCh5cCk7XG4gICAgICAgICAgICBCLmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEEuaXVzaHJuKDEpO1xuICAgICAgICAgIEIuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7ICh5LndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgeS5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEMuaXNPZGQoKSB8fCBELmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEMuaWFkZCh5cCk7XG4gICAgICAgICAgICBELmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEMuaXVzaHJuKDEpO1xuICAgICAgICAgIEQuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh4LmNtcCh5KSA+PSAwKSB7XG4gICAgICAgIHguaXN1Yih5KTtcbiAgICAgICAgQS5pc3ViKEMpO1xuICAgICAgICBCLmlzdWIoRCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5LmlzdWIoeCk7XG4gICAgICAgIEMuaXN1YihBKTtcbiAgICAgICAgRC5pc3ViKEIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhOiBDLFxuICAgICAgYjogRCxcbiAgICAgIGdjZDogeS5pdXNobG4oZylcbiAgICB9O1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgcmVkdWNlZCBpbmNhcm5hdGlvbiBvZiB0aGUgYmluYXJ5IEVFQVxuICAvLyBhYm92ZSwgZGVzaWduYXRlZCB0byBpbnZlcnQgbWVtYmVycyBvZiB0aGVcbiAgLy8gX3ByaW1lXyBmaWVsZHMgRihwKSBhdCBhIG1heGltYWwgc3BlZWRcbiAgQk4ucHJvdG90eXBlLl9pbnZtcCA9IGZ1bmN0aW9uIF9pbnZtcCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIGEgPSB0aGlzO1xuICAgIHZhciBiID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKGEubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGEgPSBhLnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBhLmNsb25lKCk7XG4gICAgfVxuXG4gICAgdmFyIHgxID0gbmV3IEJOKDEpO1xuICAgIHZhciB4MiA9IG5ldyBCTigwKTtcblxuICAgIHZhciBkZWx0YSA9IGIuY2xvbmUoKTtcblxuICAgIHdoaWxlIChhLmNtcG4oMSkgPiAwICYmIGIuY21wbigxKSA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7IChhLndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgYS5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgxLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgxLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgxLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgam0gPSAxOyAoYi53b3Jkc1swXSAmIGptKSA9PT0gMCAmJiBqIDwgMjY7ICsraiwgam0gPDw9IDEpO1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIGIuaXVzaHJuKGopO1xuICAgICAgICB3aGlsZSAoai0tID4gMCkge1xuICAgICAgICAgIGlmICh4Mi5pc09kZCgpKSB7XG4gICAgICAgICAgICB4Mi5pYWRkKGRlbHRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4Mi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGEuY21wKGIpID49IDApIHtcbiAgICAgICAgYS5pc3ViKGIpO1xuICAgICAgICB4MS5pc3ViKHgyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIuaXN1YihhKTtcbiAgICAgICAgeDIuaXN1Yih4MSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlcztcbiAgICBpZiAoYS5jbXBuKDEpID09PSAwKSB7XG4gICAgICByZXMgPSB4MTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0geDI7XG4gICAgfVxuXG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ2NkID0gZnVuY3Rpb24gZ2NkIChudW0pIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIG51bS5hYnMoKTtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gdGhpcy5hYnMoKTtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtLmNsb25lKCk7XG4gICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgYi5uZWdhdGl2ZSA9IDA7XG5cbiAgICAvLyBSZW1vdmUgY29tbW9uIGZhY3RvciBvZiB0d29cbiAgICBmb3IgKHZhciBzaGlmdCA9IDA7IGEuaXNFdmVuKCkgJiYgYi5pc0V2ZW4oKTsgc2hpZnQrKykge1xuICAgICAgYS5pdXNocm4oMSk7XG4gICAgICBiLml1c2hybigxKTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoYS5pc0V2ZW4oKSkge1xuICAgICAgICBhLml1c2hybigxKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChiLmlzRXZlbigpKSB7XG4gICAgICAgIGIuaXVzaHJuKDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgciA9IGEuY21wKGIpO1xuICAgICAgaWYgKHIgPCAwKSB7XG4gICAgICAgIC8vIFN3YXAgYGFgIGFuZCBgYmAgdG8gbWFrZSBgYWAgYWx3YXlzIGJpZ2dlciB0aGFuIGBiYFxuICAgICAgICB2YXIgdCA9IGE7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gZWxzZSBpZiAociA9PT0gMCB8fCBiLmNtcG4oMSkgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGEuaXN1YihiKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIHJldHVybiBiLml1c2hsbihzaGlmdCk7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IG51bWJlciBpbiB0aGUgZmllbGQgRihudW0pXG4gIEJOLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4gKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkICgpIHtcbiAgICByZXR1cm4gKHRoaXMud29yZHNbMF0gJiAxKSA9PT0gMTtcbiAgfTtcblxuICAvLyBBbmQgZmlyc3Qgd29yZCBhbmQgbnVtXG4gIEJOLnByb3RvdHlwZS5hbmRsbiA9IGZ1bmN0aW9uIGFuZGxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy53b3Jkc1swXSAmIG51bTtcbiAgfTtcblxuICAvLyBJbmNyZW1lbnQgYXQgdGhlIGJpdCBwb3NpdGlvbiBpbi1saW5lXG4gIEJOLnByb3RvdHlwZS5iaW5jbiA9IGZ1bmN0aW9uIGJpbmNuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicpO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHtcbiAgICAgIHRoaXMuX2V4cGFuZChzICsgMSk7XG4gICAgICB0aGlzLndvcmRzW3NdIHw9IHE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgYml0IGFuZCBwcm9wYWdhdGUsIGlmIG5lZWRlZFxuICAgIHZhciBjYXJyeSA9IHE7XG4gICAgZm9yICh2YXIgaSA9IHM7IGNhcnJ5ICE9PSAwICYmIGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdyArPSBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+Pj4gMjY7XG4gICAgICB3ICY9IDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8gKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbXBuID0gZnVuY3Rpb24gY21wbiAobnVtKSB7XG4gICAgdmFyIG5lZ2F0aXZlID0gbnVtIDwgMDtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmICFuZWdhdGl2ZSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG5lZ2F0aXZlKSByZXR1cm4gMTtcblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIHZhciByZXM7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICAgIG51bSA9IC1udW07XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmLCAnTnVtYmVyIGlzIHRvbyBiaWcnKTtcblxuICAgICAgdmFyIHcgPSB0aGlzLndvcmRzWzBdIHwgMDtcbiAgICAgIHJlcyA9IHcgPT09IG51bSA/IDAgOiB3IDwgbnVtID8gLTEgOiAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29tcGFyZSB0d28gbnVtYmVycyBhbmQgcmV0dXJuOlxuICAvLyAxIC0gaWYgYHRoaXNgID4gYG51bWBcbiAgLy8gMCAtIGlmIGB0aGlzYCA9PSBgbnVtYFxuICAvLyAtMSAtIGlmIGB0aGlzYCA8IGBudW1gXG4gIEJOLnByb3RvdHlwZS5jbXAgPSBmdW5jdGlvbiBjbXAgKG51bSkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmIG51bS5uZWdhdGl2ZSA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIDE7XG5cbiAgICB2YXIgcmVzID0gdGhpcy51Y21wKG51bSk7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHJldHVybiAtcmVzIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFVuc2lnbmVkIGNvbXBhcmlzb25cbiAgQk4ucHJvdG90eXBlLnVjbXAgPSBmdW5jdGlvbiB1Y21wIChudW0pIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lIHNpZ25cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGEgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHZhciBiID0gbnVtLndvcmRzW2ldIHwgMDtcblxuICAgICAgaWYgKGEgPT09IGIpIGNvbnRpbnVlO1xuICAgICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJlcyA9IC0xO1xuICAgICAgfSBlbHNlIGlmIChhID4gYikge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0biA9IGZ1bmN0aW9uIGd0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndCA9IGZ1bmN0aW9uIGd0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RlbiA9IGZ1bmN0aW9uIGd0ZW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA+PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGUgPSBmdW5jdGlvbiBndGUgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0biA9IGZ1bmN0aW9uIGx0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAtMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHQgPSBmdW5jdGlvbiBsdCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdGVuID0gZnVuY3Rpb24gbHRlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pIDw9IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZSA9IGZ1bmN0aW9uIGx0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXFuID0gZnVuY3Rpb24gZXFuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAwO1xuICB9O1xuXG4gIC8vXG4gIC8vIEEgcmVkdWNlIGNvbnRleHQsIGNvdWxkIGJlIHVzaW5nIG1vbnRnb21lcnkgb3Igc29tZXRoaW5nIGJldHRlciwgZGVwZW5kaW5nXG4gIC8vIG9uIHRoZSBgbWAgaXRzZWxmLlxuICAvL1xuICBCTi5yZWQgPSBmdW5jdGlvbiByZWQgKG51bSkge1xuICAgIHJldHVybiBuZXcgUmVkKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvUmVkID0gZnVuY3Rpb24gdG9SZWQgKGN0eCkge1xuICAgIGFzc2VydCghdGhpcy5yZWQsICdBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIHJldHVybiBjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tUmVkID0gZnVuY3Rpb24gZnJvbVJlZCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAnZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2ZvcmNlUmVkID0gZnVuY3Rpb24gX2ZvcmNlUmVkIChjdHgpIHtcbiAgICB0aGlzLnJlZCA9IGN0eDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZm9yY2VSZWQgPSBmdW5jdGlvbiBmb3JjZVJlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VSZWQoY3R4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkQWRkID0gZnVuY3Rpb24gcmVkQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJQWRkID0gZnVuY3Rpb24gcmVkSUFkZCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaWFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTdWIgPSBmdW5jdGlvbiByZWRTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTdWIgPSBmdW5jdGlvbiByZWRJU3ViIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNobCA9IGZ1bmN0aW9uIHJlZFNobCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zaGwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkTXVsID0gZnVuY3Rpb24gcmVkTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElNdWwgPSBmdW5jdGlvbiByZWRJTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW11bCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTcXIgPSBmdW5jdGlvbiByZWRTcXIgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3FyKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJU3FyID0gZnVuY3Rpb24gcmVkSVNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaXNxcih0aGlzKTtcbiAgfTtcblxuICAvLyBTcXVhcmUgcm9vdCBvdmVyIHBcbiAgQk4ucHJvdG90eXBlLnJlZFNxcnQgPSBmdW5jdGlvbiByZWRTcXJ0ICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXJ0KHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJbnZtID0gZnVuY3Rpb24gcmVkSW52bSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW52bSh0aGlzKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgICUgYHJlZCBtb2R1bG9gXG4gIEJOLnByb3RvdHlwZS5yZWROZWcgPSBmdW5jdGlvbiByZWROZWcgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubmVnKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRQb3cgPSBmdW5jdGlvbiByZWRQb3cgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCAmJiAhbnVtLnJlZCwgJ3JlZFBvdyhub3JtYWxOdW0pJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnBvdyh0aGlzLCBudW0pO1xuICB9O1xuXG4gIC8vIFByaW1lIG51bWJlcnMgd2l0aCBlZmZpY2llbnQgcmVkdWN0aW9uXG4gIHZhciBwcmltZXMgPSB7XG4gICAgazI1NjogbnVsbCxcbiAgICBwMjI0OiBudWxsLFxuICAgIHAxOTI6IG51bGwsXG4gICAgcDI1NTE5OiBudWxsXG4gIH07XG5cbiAgLy8gUHNldWRvLU1lcnNlbm5lIHByaW1lXG4gIGZ1bmN0aW9uIE1QcmltZSAobmFtZSwgcCkge1xuICAgIC8vIFAgPSAyIF4gTiAtIEtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucCA9IG5ldyBCTihwLCAxNik7XG4gICAgdGhpcy5uID0gdGhpcy5wLmJpdExlbmd0aCgpO1xuICAgIHRoaXMuayA9IG5ldyBCTigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCk7XG5cbiAgICB0aGlzLnRtcCA9IHRoaXMuX3RtcCgpO1xuICB9XG5cbiAgTVByaW1lLnByb3RvdHlwZS5fdG1wID0gZnVuY3Rpb24gX3RtcCAoKSB7XG4gICAgdmFyIHRtcCA9IG5ldyBCTihudWxsKTtcbiAgICB0bXAud29yZHMgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubiAvIDEzKSk7XG4gICAgcmV0dXJuIHRtcDtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2UgPSBmdW5jdGlvbiBpcmVkdWNlIChudW0pIHtcbiAgICAvLyBBc3N1bWVzIHRoYXQgYG51bWAgaXMgbGVzcyB0aGFuIGBQXjJgXG4gICAgLy8gbnVtID0gSEkgKiAoMiBeIE4gLSBLKSArIEhJICogSyArIExPID0gSEkgKiBLICsgTE8gKG1vZCBQKVxuICAgIHZhciByID0gbnVtO1xuICAgIHZhciBybGVuO1xuXG4gICAgZG8ge1xuICAgICAgdGhpcy5zcGxpdChyLCB0aGlzLnRtcCk7XG4gICAgICByID0gdGhpcy5pbXVsSyhyKTtcbiAgICAgIHIgPSByLmlhZGQodGhpcy50bXApO1xuICAgICAgcmxlbiA9IHIuYml0TGVuZ3RoKCk7XG4gICAgfSB3aGlsZSAocmxlbiA+IHRoaXMubik7XG5cbiAgICB2YXIgY21wID0gcmxlbiA8IHRoaXMubiA/IC0xIDogci51Y21wKHRoaXMucCk7XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgci53b3Jkc1swXSA9IDA7XG4gICAgICByLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICByLmlzdWIodGhpcy5wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5zdHJpcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dCkge1xuICAgIGlucHV0Lml1c2hybih0aGlzLm4sIDAsIG91dCk7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICByZXR1cm4gbnVtLmltdWwodGhpcy5rKTtcbiAgfTtcblxuICBmdW5jdGlvbiBLMjU2ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnazI1NicsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnKTtcbiAgfVxuICBpbmhlcml0cyhLMjU2LCBNUHJpbWUpO1xuXG4gIEsyNTYucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQgKGlucHV0LCBvdXRwdXQpIHtcbiAgICAvLyAyNTYgPSA5ICogMjYgKyAyMlxuICAgIHZhciBtYXNrID0gMHgzZmZmZmY7XG5cbiAgICB2YXIgb3V0TGVuID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCA5KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dExlbjsgaSsrKSB7XG4gICAgICBvdXRwdXQud29yZHNbaV0gPSBpbnB1dC53b3Jkc1tpXTtcbiAgICB9XG4gICAgb3V0cHV0Lmxlbmd0aCA9IG91dExlbjtcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPD0gOSkge1xuICAgICAgaW5wdXQud29yZHNbMF0gPSAwO1xuICAgICAgaW5wdXQubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTaGlmdCBieSA5IGxpbWJzXG4gICAgdmFyIHByZXYgPSBpbnB1dC53b3Jkc1s5XTtcbiAgICBvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXSA9IHByZXYgJiBtYXNrO1xuXG4gICAgZm9yIChpID0gMTA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5leHQgPSBpbnB1dC53b3Jkc1tpXSB8IDA7XG4gICAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gKChuZXh0ICYgbWFzaykgPDwgNCkgfCAocHJldiA+Pj4gMjIpO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICAgIHByZXYgPj4+PSAyMjtcbiAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gcHJldjtcbiAgICBpZiAocHJldiA9PT0gMCAmJiBpbnB1dC5sZW5ndGggPiAxMCkge1xuICAgICAgaW5wdXQubGVuZ3RoIC09IDEwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gOTtcbiAgICB9XG4gIH07XG5cbiAgSzI1Ni5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgLy8gSyA9IDB4MTAwMDAwM2QxID0gWyAweDQwLCAweDNkMSBdXG4gICAgbnVtLndvcmRzW251bS5sZW5ndGhdID0gMDtcbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aCArIDFdID0gMDtcbiAgICBudW0ubGVuZ3RoICs9IDI7XG5cbiAgICAvLyBib3VuZGVkIGF0OiAweDQwICogMHgzZmZmZmZmICsgMHgzZDAgPSAweDEwMDAwMDM5MFxuICAgIHZhciBsbyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gbnVtLndvcmRzW2ldIHwgMDtcbiAgICAgIGxvICs9IHcgKiAweDNkMTtcbiAgICAgIG51bS53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgICAgbG8gPSB3ICogMHg0MCArICgobG8gLyAweDQwMDAwMDApIHwgMCk7XG4gICAgfVxuXG4gICAgLy8gRmFzdCBsZW5ndGggcmVkdWN0aW9uXG4gICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIGlmIChudW0ud29yZHNbbnVtLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICBmdW5jdGlvbiBQMjI0ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAncDIyNCcsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnKTtcbiAgfVxuICBpbmhlcml0cyhQMjI0LCBNUHJpbWUpO1xuXG4gIGZ1bmN0aW9uIFAxOTIgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMTkyJyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZicpO1xuICB9XG4gIGluaGVyaXRzKFAxOTIsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDI1NTE5ICgpIHtcbiAgICAvLyAyIF4gMjU1IC0gMTlcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnMjU1MTknLFxuICAgICAgJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnKTtcbiAgfVxuICBpbmhlcml0cyhQMjU1MTksIE1QcmltZSk7XG5cbiAgUDI1NTE5LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxM1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoaSA9IChudW0ud29yZHNbaV0gfCAwKSAqIDB4MTMgKyBjYXJyeTtcbiAgICAgIHZhciBsbyA9IGhpICYgMHgzZmZmZmZmO1xuICAgICAgaGkgPj4+PSAyNjtcblxuICAgICAgbnVtLndvcmRzW2ldID0gbG87XG4gICAgICBjYXJyeSA9IGhpO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuICAgIHJldHVybiBudW07XG4gIH07XG5cbiAgLy8gRXhwb3J0ZWQgbW9zdGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB1c2UgcGxhaW4gbmFtZSBpbnN0ZWFkXG4gIEJOLl9wcmltZSA9IGZ1bmN0aW9uIHByaW1lIChuYW1lKSB7XG4gICAgLy8gQ2FjaGVkIHZlcnNpb24gb2YgcHJpbWVcbiAgICBpZiAocHJpbWVzW25hbWVdKSByZXR1cm4gcHJpbWVzW25hbWVdO1xuXG4gICAgdmFyIHByaW1lO1xuICAgIGlmIChuYW1lID09PSAnazI1NicpIHtcbiAgICAgIHByaW1lID0gbmV3IEsyNTYoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjI0Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDIyNCgpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AxOTInKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMTkyKCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDI1NTE5Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDI1NTE5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltZSAnICsgbmFtZSk7XG4gICAgfVxuICAgIHByaW1lc1tuYW1lXSA9IHByaW1lO1xuXG4gICAgcmV0dXJuIHByaW1lO1xuICB9O1xuXG4gIC8vXG4gIC8vIEJhc2UgcmVkdWN0aW9uIGVuZ2luZVxuICAvL1xuICBmdW5jdGlvbiBSZWQgKG0pIHtcbiAgICBpZiAodHlwZW9mIG0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgcHJpbWUgPSBCTi5fcHJpbWUobSk7XG4gICAgICB0aGlzLm0gPSBwcmltZS5wO1xuICAgICAgdGhpcy5wcmltZSA9IHByaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobS5ndG4oMSksICdtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEnKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgICB0aGlzLnByaW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBSZWQucHJvdG90eXBlLl92ZXJpZnkxID0gZnVuY3Rpb24gX3ZlcmlmeTEgKGEpIHtcbiAgICBhc3NlcnQoYS5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgYXNzZXJ0KGEucmVkLCAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTIgPSBmdW5jdGlvbiBfdmVyaWZ5MiAoYSwgYikge1xuICAgIGFzc2VydCgoYS5uZWdhdGl2ZSB8IGIubmVnYXRpdmUpID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQgJiYgYS5yZWQgPT09IGIucmVkLFxuICAgICAgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmltb2QgPSBmdW5jdGlvbiBpbW9kIChhKSB7XG4gICAgaWYgKHRoaXMucHJpbWUpIHJldHVybiB0aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpO1xuICAgIHJldHVybiBhLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkge1xuICAgICAgcmV0dXJuIGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tLnN1YihhKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5zdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pc3ViKGIpO1xuICAgIGlmIChyZXMuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcy5pYWRkKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zaGwgPSBmdW5jdGlvbiBzaGwgKGEsIG51bSkge1xuICAgIHRoaXMuX3ZlcmlmeTEoYSk7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLnVzaGxuKG51bSkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuICAgIHJldHVybiB0aGlzLmltb2QoYS5pbXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLm11bChiKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3FyID0gZnVuY3Rpb24gaXNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLmltdWwoYSwgYS5jbG9uZSgpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLm11bChhLCBhKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbiBzcXJ0IChhKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkpIHJldHVybiBhLmNsb25lKCk7XG5cbiAgICB2YXIgbW9kMyA9IHRoaXMubS5hbmRsbigzKTtcbiAgICBhc3NlcnQobW9kMyAlIDIgPT09IDEpO1xuXG4gICAgLy8gRmFzdCBjYXNlXG4gICAgaWYgKG1vZDMgPT09IDMpIHtcbiAgICAgIHZhciBwb3cgPSB0aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO1xuICAgICAgcmV0dXJuIHRoaXMucG93KGEsIHBvdyk7XG4gICAgfVxuXG4gICAgLy8gVG9uZWxsaS1TaGFua3MgYWxnb3JpdGhtIChUb3RhbGx5IHVub3B0aW1pemVkIGFuZCBzbG93KVxuICAgIC8vXG4gICAgLy8gRmluZCBRIGFuZCBTLCB0aGF0IFEgKiAyIF4gUyA9IChQIC0gMSlcbiAgICB2YXIgcSA9IHRoaXMubS5zdWJuKDEpO1xuICAgIHZhciBzID0gMDtcbiAgICB3aGlsZSAoIXEuaXNaZXJvKCkgJiYgcS5hbmRsbigxKSA9PT0gMCkge1xuICAgICAgcysrO1xuICAgICAgcS5pdXNocm4oMSk7XG4gICAgfVxuICAgIGFzc2VydCghcS5pc1plcm8oKSk7XG5cbiAgICB2YXIgb25lID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHZhciBuT25lID0gb25lLnJlZE5lZygpO1xuXG4gICAgLy8gRmluZCBxdWFkcmF0aWMgbm9uLXJlc2lkdWVcbiAgICAvLyBOT1RFOiBNYXggaXMgc3VjaCBiZWNhdXNlIG9mIGdlbmVyYWxpemVkIFJpZW1hbm4gaHlwb3RoZXNpcy5cbiAgICB2YXIgbHBvdyA9IHRoaXMubS5zdWJuKDEpLml1c2hybigxKTtcbiAgICB2YXIgeiA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICB6ID0gbmV3IEJOKDIgKiB6ICogeikudG9SZWQodGhpcyk7XG5cbiAgICB3aGlsZSAodGhpcy5wb3coeiwgbHBvdykuY21wKG5PbmUpICE9PSAwKSB7XG4gICAgICB6LnJlZElBZGQobk9uZSk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSB0aGlzLnBvdyh6LCBxKTtcbiAgICB2YXIgciA9IHRoaXMucG93KGEsIHEuYWRkbigxKS5pdXNocm4oMSkpO1xuICAgIHZhciB0ID0gdGhpcy5wb3coYSwgcSk7XG4gICAgdmFyIG0gPSBzO1xuICAgIHdoaWxlICh0LmNtcChvbmUpICE9PSAwKSB7XG4gICAgICB2YXIgdG1wID0gdDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyB0bXAuY21wKG9uZSkgIT09IDA7IGkrKykge1xuICAgICAgICB0bXAgPSB0bXAucmVkU3FyKCk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoaSA8IG0pO1xuICAgICAgdmFyIGIgPSB0aGlzLnBvdyhjLCBuZXcgQk4oMSkuaXVzaGxuKG0gLSBpIC0gMSkpO1xuXG4gICAgICByID0gci5yZWRNdWwoYik7XG4gICAgICBjID0gYi5yZWRTcXIoKTtcbiAgICAgIHQgPSB0LnJlZE11bChjKTtcbiAgICAgIG0gPSBpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW52bSA9IGZ1bmN0aW9uIGludm0gKGEpIHtcbiAgICB2YXIgaW52ID0gYS5faW52bXAodGhpcy5tKTtcbiAgICBpZiAoaW52Lm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBpbnYubmVnYXRpdmUgPSAwO1xuICAgICAgcmV0dXJuIHRoaXMuaW1vZChpbnYpLnJlZE5lZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludik7XG4gICAgfVxuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChhLCBudW0pIHtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIGlmIChudW0uY21wbigxKSA9PT0gMCkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciB3aW5kb3dTaXplID0gNDtcbiAgICB2YXIgd25kID0gbmV3IEFycmF5KDEgPDwgd2luZG93U2l6ZSk7XG4gICAgd25kWzBdID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHduZFsxXSA9IGE7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCB3bmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHduZFtpXSA9IHRoaXMubXVsKHduZFtpIC0gMV0sIGEpO1xuICAgIH1cblxuICAgIHZhciByZXMgPSB3bmRbMF07XG4gICAgdmFyIGN1cnJlbnQgPSAwO1xuICAgIHZhciBjdXJyZW50TGVuID0gMDtcbiAgICB2YXIgc3RhcnQgPSBudW0uYml0TGVuZ3RoKCkgJSAyNjtcbiAgICBpZiAoc3RhcnQgPT09IDApIHtcbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgZm9yIChpID0gbnVtLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IG51bS53b3Jkc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSBzdGFydCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIHZhciBiaXQgPSAod29yZCA+PiBqKSAmIDE7XG4gICAgICAgIGlmIChyZXMgIT09IHduZFswXSkge1xuICAgICAgICAgIHJlcyA9IHRoaXMuc3FyKHJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0ID09PSAwICYmIGN1cnJlbnQgPT09IDApIHtcbiAgICAgICAgICBjdXJyZW50TGVuID0gMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQgPDw9IDE7XG4gICAgICAgIGN1cnJlbnQgfD0gYml0O1xuICAgICAgICBjdXJyZW50TGVuKys7XG4gICAgICAgIGlmIChjdXJyZW50TGVuICE9PSB3aW5kb3dTaXplICYmIChpICE9PSAwIHx8IGogIT09IDApKSBjb250aW51ZTtcblxuICAgICAgICByZXMgPSB0aGlzLm11bChyZXMsIHduZFtjdXJyZW50XSk7XG4gICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRUbyA9IGZ1bmN0aW9uIGNvbnZlcnRUbyAobnVtKSB7XG4gICAgdmFyIHIgPSBudW0udW1vZCh0aGlzLm0pO1xuXG4gICAgcmV0dXJuIHIgPT09IG51bSA/IHIuY2xvbmUoKSA6IHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgcmVzID0gbnVtLmNsb25lKCk7XG4gICAgcmVzLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvL1xuICAvLyBNb250Z29tZXJ5IG1ldGhvZCBlbmdpbmVcbiAgLy9cblxuICBCTi5tb250ID0gZnVuY3Rpb24gbW9udCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBNb250KG51bSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gTW9udCAobSkge1xuICAgIFJlZC5jYWxsKHRoaXMsIG0pO1xuXG4gICAgdGhpcy5zaGlmdCA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICBpZiAodGhpcy5zaGlmdCAlIDI2ICE9PSAwKSB7XG4gICAgICB0aGlzLnNoaWZ0ICs9IDI2IC0gKHRoaXMuc2hpZnQgJSAyNik7XG4gICAgfVxuXG4gICAgdGhpcy5yID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLnNoaWZ0KTtcbiAgICB0aGlzLnIyID0gdGhpcy5pbW9kKHRoaXMuci5zcXIoKSk7XG4gICAgdGhpcy5yaW52ID0gdGhpcy5yLl9pbnZtcCh0aGlzLm0pO1xuXG4gICAgdGhpcy5taW52ID0gdGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pO1xuICAgIHRoaXMubWludiA9IHRoaXMubWludi51bW9kKHRoaXMucik7XG4gICAgdGhpcy5taW52ID0gdGhpcy5yLnN1Yih0aGlzLm1pbnYpO1xuICB9XG4gIGluaGVyaXRzKE1vbnQsIFJlZCk7XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSk7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydEZyb20gPSBmdW5jdGlvbiBjb252ZXJ0RnJvbSAobnVtKSB7XG4gICAgdmFyIHIgPSB0aGlzLmltb2QobnVtLm11bCh0aGlzLnJpbnYpKTtcbiAgICByLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSB7XG4gICAgICBhLndvcmRzWzBdID0gMDtcbiAgICAgIGEubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIHZhciB0ID0gYS5pbXVsKGIpO1xuICAgIHZhciBjID0gdC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSk7XG4gICAgdmFyIHUgPSB0LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpO1xuICAgIHZhciByZXMgPSB1O1xuXG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTtcblxuICAgIHZhciB0ID0gYS5tdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIC8vIChBUileLTEgKiBSXjIgPSAoQV4tMSAqIFJeLTEpICogUl4yID0gQV4tMSAqIFJcbiAgICB2YXIgcmVzID0gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtcbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcbn0pKHR5cGVvZiBtb2R1bGUgPT09ICd1bmRlZmluZWQnIHx8IG1vZHVsZSwgdGhpcyk7XG5cbn0se1wiYnVmZmVyXCI6NDZ9XSw0NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByYW5kKGxlbikge1xuICBpZiAoIXIpXG4gICAgciA9IG5ldyBSYW5kKG51bGwpO1xuXG4gIHJldHVybiByLmdlbmVyYXRlKGxlbik7XG59O1xuXG5mdW5jdGlvbiBSYW5kKHJhbmQpIHtcbiAgdGhpcy5yYW5kID0gcmFuZDtcbn1cbm1vZHVsZS5leHBvcnRzLlJhbmQgPSBSYW5kO1xuXG5SYW5kLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKGxlbikge1xuICByZXR1cm4gdGhpcy5fcmFuZChsZW4pO1xufTtcblxuLy8gRW11bGF0ZSBjcnlwdG8gQVBJIHVzaW5nIHJhbmR5XG5SYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgaWYgKHRoaXMucmFuZC5nZXRCeXRlcylcbiAgICByZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKG4pO1xuXG4gIHZhciByZXMgPSBuZXcgVWludDhBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspXG4gICAgcmVzW2ldID0gdGhpcy5yYW5kLmdldEJ5dGUoKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmlmICh0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcpIHtcbiAgaWYgKHNlbGYuY3J5cHRvICYmIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIE1vZGVybiBicm93c2Vyc1xuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoc2VsZi5tc0NyeXB0byAmJiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIElFXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gIC8vIFNhZmFyaSdzIFdlYldvcmtlcnMgZG8gbm90IGhhdmUgYGNyeXB0b2BcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE9sZCBqdW5rXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH07XG4gIH1cbn0gZWxzZSB7XG4gIC8vIE5vZGUuanMgb3IgV2ViIHdvcmtlciB3aXRoIG5vIGNyeXB0byBzdXBwb3J0XG4gIHRyeSB7XG4gICAgdmFyIGNyeXB0byA9IF9kZXJlcV8oJ2NyeXB0bycpO1xuICAgIGlmICh0eXBlb2YgY3J5cHRvLnJhbmRvbUJ5dGVzICE9PSAnZnVuY3Rpb24nKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkJyk7XG5cbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMobik7XG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG5cbn0se1wiY3J5cHRvXCI6XCJjcnlwdG9cIn1dLDQ2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxufSx7fV0sNDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IF9kZXJlcV8oJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IF9kZXJlcV8oJ2llZWU3NTQnKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbnZhciBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoaXNBcnJheUJ1ZmZlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbkJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbkJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmIChpc0FycmF5QnVmZmVyVmlldyhvYmopIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoc3RyaW5nKSB8fCBpc0FycmF5QnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDApIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXJzIGZyb20gYW5vdGhlciBjb250ZXh0IChpLmUuIGFuIGlmcmFtZSkgZG8gbm90IHBhc3MgdGhlIGBpbnN0YW5jZW9mYCBjaGVja1xuLy8gYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdmFsaWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5QnVmZmVyJyAmJlxuICAgICAgdHlwZW9mIG9iai5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJylcbn1cblxuLy8gTm9kZSAwLjEwIHN1cHBvcnRzIGBBcnJheUJ1ZmZlcmAgYnV0IGxhY2tzIGBBcnJheUJ1ZmZlci5pc1ZpZXdgXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyAob2JqKSB7XG4gIHJldHVybiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KG9iailcbn1cblxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxufSx7XCJiYXNlNjQtanNcIjo0MyxcImllZWU3NTRcIjoyOTd9XSw0ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5maWxsO1xuXG59LHtcIi4uLy4uL21vZHVsZXMvX2NvcmVcIjoxODAsXCIuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsXCI6MjUxfV0sNDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZmluZDtcblxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6MTgwLFwiLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZmluZFwiOjI1Mn1dLDUwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xuX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZnJvbTtcblxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6MTgwLFwiLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbVwiOjI1MyxcIi4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvclwiOjI1OH1dLDUxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5hc3NpZ247XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjE4MCxcIi4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ25cIjoyNTV9XSw1MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5fZGVyZXFfKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbl9kZXJlcV8oJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xuX2RlcmVxXygnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xuX2RlcmVxXygnLi4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5fZGVyZXFfKCcuLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcblxufSx7XCIuLi9tb2R1bGVzL19jb3JlXCI6MTgwLFwiLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZ1wiOjI1NixcIi4uL21vZHVsZXMvZXM2LnByb21pc2VcIjoyNTcsXCIuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3JcIjoyNTgsXCIuLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHlcIjoyNjIsXCIuLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeVwiOjI2MyxcIi4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZVwiOjI2Nn1dLDUzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN0cmluZy5yZXBlYXQ7XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjE4MCxcIi4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXRcIjoyNTl9XSw1NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xuX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDtcblxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6MTgwLFwiLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZ1wiOjI1NixcIi4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbFwiOjI2MCxcIi4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvclwiOjI2NCxcIi4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlXCI6MjY1fV0sNTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9fY29yZScpLlVpbnQ4QXJyYXk7XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjE4MCxcIi4uLy4uL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5XCI6MjYxfV0sNTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzUwXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbVwiOjE0OSxcIi4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvclwiOjE1OSxcImR1cFwiOjUwfV0sNTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuX2RlcmVxXygnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5fZGVyZXFfKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpO1xuXG59LHtcIi4uL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3JcIjoxNDcsXCIuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3JcIjoxNTksXCIuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGVcIjoxNjd9XSw1ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbl9kZXJlcV8oJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUnKTtcblxufSx7XCIuLi9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGVcIjoxNDgsXCIuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3JcIjoxNTksXCIuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGVcIjoxNjd9XSw1OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgY29yZSA9IF9kZXJlcV8oJy4uLy4uL21vZHVsZXMvX2NvcmUnKTtcbnZhciAkSlNPTiA9IGNvcmUuSlNPTiB8fCAoY29yZS5KU09OID0geyBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5IH0pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gJEpTT04uc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmd1bWVudHMpO1xufTtcblxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6Nzh9XSw2MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bNTFdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6NzgsXCIuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduXCI6MTUxLFwiZHVwXCI6NTF9XSw2MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG52YXIgJE9iamVjdCA9IF9kZXJlcV8oJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiAkT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZVwiOjE1Mn1dLDYyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eVwiOjE1M31dLDYzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuZW50cmllcztcblxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6NzgsXCIuLi8uLi9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllc1wiOjE2MX1dLDY0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5mcmVlemU7XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZVwiOjE1NH1dLDY1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2ZcIjoxNTV9XSw2NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuXG59LHtcIi4uLy4uL21vZHVsZXMvX2NvcmVcIjo3OCxcIi4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mXCI6MTU2fV0sNjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuX2RlcmVxXygnLi4vLi4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LnZhbHVlcztcblxufSx7XCIuLi8uLi9tb2R1bGVzL19jb3JlXCI6NzgsXCIuLi8uLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzXCI6MTYyfV0sNjg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzUyXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZ1wiOjE1NyxcIi4uL21vZHVsZXMvZXM2LnByb21pc2VcIjoxNTgsXCIuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3JcIjoxNTksXCIuLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHlcIjoxNjMsXCIuLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeVwiOjE2NCxcIi4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZVwiOjE2NyxcImR1cFwiOjUyfV0sNjk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzU0XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi4vLi4vbW9kdWxlcy9fY29yZVwiOjc4LFwiLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZ1wiOjE1NyxcIi4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbFwiOjE2MCxcIi4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvclwiOjE2NSxcIi4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlXCI6MTY2LFwiZHVwXCI6NTR9XSw3MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbl9kZXJlcV8oJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignaXRlcmF0b3InKTtcblxufSx7XCIuLi8uLi9tb2R1bGVzL193a3MtZXh0XCI6MTQ0LFwiLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yXCI6MTU5LFwiLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlXCI6MTY3fV0sNzE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG59LHt9XSw3MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxufSx7fV0sNzM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG5cbn0se31dLDc0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBpc09iamVjdCA9IF9kZXJlcV8oJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxufSx7XCIuL19pcy1vYmplY3RcIjo5OH1dLDc1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gX2RlcmVxXygnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gX2RlcmVxXygnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX2RlcmVxXygnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG59LHtcIi4vX3RvLWFic29sdXRlLWluZGV4XCI6MTM2LFwiLi9fdG8taW9iamVjdFwiOjEzOCxcIi4vX3RvLWxlbmd0aFwiOjEzOX1dLDc2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gX2RlcmVxXygnLi9fY29mJyk7XG52YXIgVEFHID0gX2RlcmVxXygnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcblxufSx7XCIuL19jb2ZcIjo3NyxcIi4vX3drc1wiOjE0NX1dLDc3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcblxufSx7fV0sNzg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNS4zJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxufSx7fV0sNzk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSBfZGVyZXFfKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuXG59LHtcIi4vX29iamVjdC1kcFwiOjExMSxcIi4vX3Byb3BlcnR5LWRlc2NcIjoxMjV9XSw4MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSBfZGVyZXFfKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cbn0se1wiLi9fYS1mdW5jdGlvblwiOjcxfV0sODE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxufSx7fV0sODI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhX2RlcmVxXygnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG5cbn0se1wiLi9fZmFpbHNcIjo4N31dLDgzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBpc09iamVjdCA9IF9kZXJlcV8oJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gX2RlcmVxXygnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuXG59LHtcIi4vX2dsb2JhbFwiOjg5LFwiLi9faXMtb2JqZWN0XCI6OTh9XSw4NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcblxufSx7fV0sODU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gX2RlcmVxXygnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gX2RlcmVxXygnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSBfZGVyZXFfKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxufSx7XCIuL19vYmplY3QtZ29wc1wiOjExNixcIi4vX29iamVjdC1rZXlzXCI6MTE5LFwiLi9fb2JqZWN0LXBpZVwiOjEyMH1dLDg2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBnbG9iYWwgPSBfZGVyZXFfKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gX2RlcmVxXygnLi9fY29yZScpO1xudmFyIGN0eCA9IF9kZXJlcV8oJy4vX2N0eCcpO1xudmFyIGhpZGUgPSBfZGVyZXFfKCcuL19oaWRlJyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciBJU19XUkFQID0gdHlwZSAmICRleHBvcnQuVztcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGtleSwgb3duLCBvdXQ7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG93biAmJiBrZXkgaW4gZXhwb3J0cykgY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbiAoQykge1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEMpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDKCk7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmIChJU19QUk9UTykge1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmICh0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKSBoaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG59LHtcIi4vX2NvcmVcIjo3OCxcIi4vX2N0eFwiOjgwLFwiLi9fZ2xvYmFsXCI6ODksXCIuL19oaWRlXCI6OTF9XSw4NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbn0se31dLDg4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBjdHggPSBfZGVyZXFfKCcuL19jdHgnKTtcbnZhciBjYWxsID0gX2RlcmVxXygnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSBfZGVyZXFfKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSBfZGVyZXFfKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IF9kZXJlcV8oJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IF9kZXJlcV8oJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cbn0se1wiLi9fYW4tb2JqZWN0XCI6NzQsXCIuL19jdHhcIjo4MCxcIi4vX2lzLWFycmF5LWl0ZXJcIjo5NixcIi4vX2l0ZXItY2FsbFwiOjk5LFwiLi9fdG8tbGVuZ3RoXCI6MTM5LFwiLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2RcIjoxNDZ9XSw4OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbn0se31dLDkwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cbn0se31dLDkxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBkUCA9IF9kZXJlcV8oJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSBfZGVyZXFfKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxufSx7XCIuL19kZXNjcmlwdG9yc1wiOjgyLFwiLi9fb2JqZWN0LWRwXCI6MTExLFwiLi9fcHJvcGVydHktZGVzY1wiOjEyNX1dLDkyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBkb2N1bWVudCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbn0se1wiLi9fZ2xvYmFsXCI6ODl9XSw5MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9ICFfZGVyZXFfKCcuL19kZXNjcmlwdG9ycycpICYmICFfZGVyZXFfKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfZGVyZXFfKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG59LHtcIi4vX2Rlc2NyaXB0b3JzXCI6ODIsXCIuL19kb20tY3JlYXRlXCI6ODMsXCIuL19mYWlsc1wiOjg3fV0sOTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuXG59LHt9XSw5NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IF9kZXJlcV8oJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuXG59LHtcIi4vX2NvZlwiOjc3fV0sOTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IF9kZXJlcV8oJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gX2RlcmVxXygnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG5cbn0se1wiLi9faXRlcmF0b3JzXCI6MTA0LFwiLi9fd2tzXCI6MTQ1fV0sOTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSBfZGVyZXFfKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG5cbn0se1wiLi9fY29mXCI6Nzd9XSw5ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcblxufSx7fV0sOTk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gX2RlcmVxXygnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbn0se1wiLi9fYW4tb2JqZWN0XCI6NzR9XSwxMDA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IF9kZXJlcV8oJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gX2RlcmVxXygnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX2RlcmVxXygnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuX2RlcmVxXygnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCBfZGVyZXFfKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG5cbn0se1wiLi9faGlkZVwiOjkxLFwiLi9fb2JqZWN0LWNyZWF0ZVwiOjExMCxcIi4vX3Byb3BlcnR5LWRlc2NcIjoxMjUsXCIuL19zZXQtdG8tc3RyaW5nLXRhZ1wiOjEzMCxcIi4vX3drc1wiOjE0NX1dLDEwMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IF9kZXJlcV8oJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gX2RlcmVxXygnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSBfZGVyZXFfKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSBfZGVyZXFfKCcuL19oaWRlJyk7XG52YXIgaGFzID0gX2RlcmVxXygnLi9faGFzJyk7XG52YXIgSXRlcmF0b3JzID0gX2RlcmVxXygnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSBfZGVyZXFfKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX2RlcmVxXygnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IF9kZXJlcV8oJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IF9kZXJlcV8oJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICghQlVHR1kgJiYgJG5hdGl2ZSkgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuXG59LHtcIi4vX2V4cG9ydFwiOjg2LFwiLi9faGFzXCI6OTAsXCIuL19oaWRlXCI6OTEsXCIuL19pdGVyLWNyZWF0ZVwiOjEwMCxcIi4vX2l0ZXJhdG9yc1wiOjEwNCxcIi4vX2xpYnJhcnlcIjoxMDUsXCIuL19vYmplY3QtZ3BvXCI6MTE3LFwiLi9fcmVkZWZpbmVcIjoxMjcsXCIuL19zZXQtdG8tc3RyaW5nLXRhZ1wiOjEzMCxcIi4vX3drc1wiOjE0NX1dLDEwMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgSVRFUkFUT1IgPSBfZGVyZXFfKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuXG59LHtcIi4vX3drc1wiOjE0NX1dLDEwMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcblxufSx7fV0sMTA0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0ge307XG5cbn0se31dLDEwNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHRydWU7XG5cbn0se31dLDEwNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgTUVUQSA9IF9kZXJlcV8oJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSBfZGVyZXFfKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSBfZGVyZXFfKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gX2RlcmVxXygnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhX2RlcmVxXygnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbn0se1wiLi9fZmFpbHNcIjo4NyxcIi4vX2hhc1wiOjkwLFwiLi9faXMtb2JqZWN0XCI6OTgsXCIuL19vYmplY3QtZHBcIjoxMTEsXCIuL191aWRcIjoxNDJ9XSwxMDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IF9kZXJlcV8oJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IF9kZXJlcV8oJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuXG59LHtcIi4vX2NvZlwiOjc3LFwiLi9fZ2xvYmFsXCI6ODksXCIuL190YXNrXCI6MTM1fV0sMTA4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gX2RlcmVxXygnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcblxufSx7XCIuL19hLWZ1bmN0aW9uXCI6NzF9XSwxMDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgPSBfZGVyZXFfKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSBfZGVyZXFfKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IF9kZXJlcV8oJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IF9kZXJlcV8oJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSBfZGVyZXFfKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBfZGVyZXFfKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSBpZiAoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSkgVFtrZXldID0gU1trZXldO1xuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG5cbn0se1wiLi9fZmFpbHNcIjo4NyxcIi4vX2lvYmplY3RcIjo5NSxcIi4vX29iamVjdC1nb3BzXCI6MTE2LFwiLi9fb2JqZWN0LWtleXNcIjoxMTksXCIuL19vYmplY3QtcGllXCI6MTIwLFwiLi9fdG8tb2JqZWN0XCI6MTQwfV0sMTEwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gX2RlcmVxXygnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gX2RlcmVxXygnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gX2RlcmVxXygnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gX2RlcmVxXygnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IF9kZXJlcV8oJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgX2RlcmVxXygnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcblxufSx7XCIuL19hbi1vYmplY3RcIjo3NCxcIi4vX2RvbS1jcmVhdGVcIjo4MyxcIi4vX2VudW0tYnVnLWtleXNcIjo4NCxcIi4vX2h0bWxcIjo5MixcIi4vX29iamVjdC1kcHNcIjoxMTIsXCIuL19zaGFyZWQta2V5XCI6MTMxfV0sMTExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBhbk9iamVjdCA9IF9kZXJlcV8oJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gX2RlcmVxXygnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9kZXJlcV8oJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSBfZGVyZXFfKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG5cbn0se1wiLi9fYW4tb2JqZWN0XCI6NzQsXCIuL19kZXNjcmlwdG9yc1wiOjgyLFwiLi9faWU4LWRvbS1kZWZpbmVcIjo5MyxcIi4vX3RvLXByaW1pdGl2ZVwiOjE0MX1dLDExMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgZFAgPSBfZGVyZXFfKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IF9kZXJlcV8oJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSBfZGVyZXFfKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG5cbn0se1wiLi9fYW4tb2JqZWN0XCI6NzQsXCIuL19kZXNjcmlwdG9yc1wiOjgyLFwiLi9fb2JqZWN0LWRwXCI6MTExLFwiLi9fb2JqZWN0LWtleXNcIjoxMTl9XSwxMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIHBJRSA9IF9kZXJlcV8oJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gX2RlcmVxXygnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IF9kZXJlcV8oJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9kZXJlcV8oJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IF9kZXJlcV8oJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gX2RlcmVxXygnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gX2RlcmVxXygnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG5cbn0se1wiLi9fZGVzY3JpcHRvcnNcIjo4MixcIi4vX2hhc1wiOjkwLFwiLi9faWU4LWRvbS1kZWZpbmVcIjo5MyxcIi4vX29iamVjdC1waWVcIjoxMjAsXCIuL19wcm9wZXJ0eS1kZXNjXCI6MTI1LFwiLi9fdG8taW9iamVjdFwiOjEzOCxcIi4vX3RvLXByaW1pdGl2ZVwiOjE0MX1dLDExNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gX2RlcmVxXygnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSBfZGVyZXFfKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcblxufSx7XCIuL19vYmplY3QtZ29wblwiOjExNSxcIi4vX3RvLWlvYmplY3RcIjoxMzh9XSwxMTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gX2RlcmVxXygnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gX2RlcmVxXygnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcblxufSx7XCIuL19lbnVtLWJ1Zy1rZXlzXCI6ODQsXCIuL19vYmplY3Qta2V5cy1pbnRlcm5hbFwiOjExOH1dLDExNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG59LHt9XSwxMTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSBfZGVyZXFfKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IF9kZXJlcV8oJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gX2RlcmVxXygnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG5cbn0se1wiLi9faGFzXCI6OTAsXCIuL19zaGFyZWQta2V5XCI6MTMxLFwiLi9fdG8tb2JqZWN0XCI6MTQwfV0sMTE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBoYXMgPSBfZGVyZXFfKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSBfZGVyZXFfKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gX2RlcmVxXygnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSBfZGVyZXFfKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG59LHtcIi4vX2FycmF5LWluY2x1ZGVzXCI6NzUsXCIuL19oYXNcIjo5MCxcIi4vX3NoYXJlZC1rZXlcIjoxMzEsXCIuL190by1pb2JqZWN0XCI6MTM4fV0sMTE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gX2RlcmVxXygnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9kZXJlcV8oJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cbn0se1wiLi9fZW51bS1idWcta2V5c1wiOjg0LFwiLi9fb2JqZWN0LWtleXMtaW50ZXJuYWxcIjoxMTh9XSwxMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbn0se31dLDEyMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gX2RlcmVxXygnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IF9kZXJlcV8oJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IF9kZXJlcV8oJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcblxufSx7XCIuL19jb3JlXCI6NzgsXCIuL19leHBvcnRcIjo4NixcIi4vX2ZhaWxzXCI6ODd9XSwxMjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGdldEtleXMgPSBfZGVyZXFfKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IF9kZXJlcV8oJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSBfZGVyZXFfKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoTywga2V5ID0ga2V5c1tpKytdKSkge1xuICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcblxufSx7XCIuL19vYmplY3Qta2V5c1wiOjExOSxcIi4vX29iamVjdC1waWVcIjoxMjAsXCIuL190by1pb2JqZWN0XCI6MTM4fV0sMTIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG5cbn0se31dLDEyNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgYW5PYmplY3QgPSBfZGVyZXFfKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IF9kZXJlcV8oJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX2RlcmVxXygnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuXG59LHtcIi4vX2FuLW9iamVjdFwiOjc0LFwiLi9faXMtb2JqZWN0XCI6OTgsXCIuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5XCI6MTA4fV0sMTI1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG5cbn0se31dLDEyNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgaGlkZSA9IF9kZXJlcV8oJy4vX2hpZGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAoc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGhpZGUodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcblxufSx7XCIuL19oaWRlXCI6OTF9XSwxMjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSBfZGVyZXFfKCcuL19oaWRlJyk7XG5cbn0se1wiLi9faGlkZVwiOjkxfV0sMTI4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IF9kZXJlcV8oJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gX2RlcmVxXygnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gX2RlcmVxXygnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgX2RlcmVxXygnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcblxufSx7XCIuL19hbi1vYmplY3RcIjo3NCxcIi4vX2N0eFwiOjgwLFwiLi9faXMtb2JqZWN0XCI6OTgsXCIuL19vYmplY3QtZ29wZFwiOjExM31dLDEyOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gX2RlcmVxXygnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IF9kZXJlcV8oJy4vX2NvcmUnKTtcbnZhciBkUCA9IF9kZXJlcV8oJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gX2RlcmVxXygnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gX2RlcmVxXygnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rpb24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxufSx7XCIuL19jb3JlXCI6NzgsXCIuL19kZXNjcmlwdG9yc1wiOjgyLFwiLi9fZ2xvYmFsXCI6ODksXCIuL19vYmplY3QtZHBcIjoxMTEsXCIuL193a3NcIjoxNDV9XSwxMzA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGRlZiA9IF9kZXJlcV8oJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gX2RlcmVxXygnLi9faGFzJyk7XG52YXIgVEFHID0gX2RlcmVxXygnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG5cbn0se1wiLi9faGFzXCI6OTAsXCIuL19vYmplY3QtZHBcIjoxMTEsXCIuL193a3NcIjoxNDV9XSwxMzE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIHNoYXJlZCA9IF9kZXJlcV8oJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gX2RlcmVxXygnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG5cbn0se1wiLi9fc2hhcmVkXCI6MTMyLFwiLi9fdWlkXCI6MTQyfV0sMTMyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBnbG9iYWwgPSBfZGVyZXFfKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07XG5cbn0se1wiLi9fZ2xvYmFsXCI6ODl9XSwxMzM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSBfZGVyZXFfKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSBfZGVyZXFfKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IF9kZXJlcV8oJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuXG59LHtcIi4vX2EtZnVuY3Rpb25cIjo3MSxcIi4vX2FuLW9iamVjdFwiOjc0LFwiLi9fd2tzXCI6MTQ1fV0sMTM0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciB0b0ludGVnZXIgPSBfZGVyZXFfKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IF9kZXJlcV8oJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbn0se1wiLi9fZGVmaW5lZFwiOjgxLFwiLi9fdG8taW50ZWdlclwiOjEzN31dLDEzNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgY3R4ID0gX2RlcmVxXygnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gX2RlcmVxXygnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IF9kZXJlcV8oJy4vX2h0bWwnKTtcbnZhciBjZWwgPSBfZGVyZXFfKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gX2RlcmVxXygnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKF9kZXJlcV8oJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG5cbn0se1wiLi9fY29mXCI6NzcsXCIuL19jdHhcIjo4MCxcIi4vX2RvbS1jcmVhdGVcIjo4MyxcIi4vX2dsb2JhbFwiOjg5LFwiLi9faHRtbFwiOjkyLFwiLi9faW52b2tlXCI6OTR9XSwxMzY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIHRvSW50ZWdlciA9IF9kZXJlcV8oJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG5cbn0se1wiLi9fdG8taW50ZWdlclwiOjEzN31dLDEzNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcblxufSx7fV0sMTM4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSBfZGVyZXFfKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IF9kZXJlcV8oJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cbn0se1wiLi9fZGVmaW5lZFwiOjgxLFwiLi9faW9iamVjdFwiOjk1fV0sMTM5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IF9kZXJlcV8oJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuXG59LHtcIi4vX3RvLWludGVnZXJcIjoxMzd9XSwxNDA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSBfZGVyZXFfKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cbn0se1wiLi9fZGVmaW5lZFwiOjgxfV0sMTQxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gX2RlcmVxXygnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcblxufSx7XCIuL19pcy1vYmplY3RcIjo5OH1dLDE0MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcblxufSx7fV0sMTQzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBnbG9iYWwgPSBfZGVyZXFfKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gX2RlcmVxXygnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSBfZGVyZXFfKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gX2RlcmVxXygnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcblxufSx7XCIuL19jb3JlXCI6NzgsXCIuL19nbG9iYWxcIjo4OSxcIi4vX2xpYnJhcnlcIjoxMDUsXCIuL19vYmplY3QtZHBcIjoxMTEsXCIuL193a3MtZXh0XCI6MTQ0fV0sMTQ0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmV4cG9ydHMuZiA9IF9kZXJlcV8oJy4vX3drcycpO1xuXG59LHtcIi4vX3drc1wiOjE0NX1dLDE0NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgc3RvcmUgPSBfZGVyZXFfKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gX2RlcmVxXygnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gX2RlcmVxXygnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG5cbn0se1wiLi9fZ2xvYmFsXCI6ODksXCIuL19zaGFyZWRcIjoxMzIsXCIuL191aWRcIjoxNDJ9XSwxNDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGNsYXNzb2YgPSBfZGVyZXFfKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSBfZGVyZXFfKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSBfZGVyZXFfKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG5cbn0se1wiLi9fY2xhc3NvZlwiOjc2LFwiLi9fY29yZVwiOjc4LFwiLi9faXRlcmF0b3JzXCI6MTA0LFwiLi9fd2tzXCI6MTQ1fV0sMTQ3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBhbk9iamVjdCA9IF9kZXJlcV8oJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldCA9IF9kZXJlcV8oJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4vX2NvcmUnKS5nZXRJdGVyYXRvciA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXRlckZuID0gZ2V0KGl0KTtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xufTtcblxufSx7XCIuL19hbi1vYmplY3RcIjo3NCxcIi4vX2NvcmVcIjo3OCxcIi4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kXCI6MTQ2fV0sMTQ4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBjbGFzc29mID0gX2RlcmVxXygnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gX2RlcmVxXygnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gX2RlcmVxXygnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9kZXJlcV8oJy4vX2NvcmUnKS5pc0l0ZXJhYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBJdGVyYXRvcnMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihPKSk7XG59O1xuXG59LHtcIi4vX2NsYXNzb2ZcIjo3NixcIi4vX2NvcmVcIjo3OCxcIi4vX2l0ZXJhdG9yc1wiOjEwNCxcIi4vX3drc1wiOjE0NX1dLDE0OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gX2RlcmVxXygnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IF9kZXJlcV8oJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gX2RlcmVxXygnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IF9kZXJlcV8oJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gX2RlcmVxXygnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gX2RlcmVxXygnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfZGVyZXFfKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSBfZGVyZXFfKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFfZGVyZXFfKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG59LHtcIi4vX2NyZWF0ZS1wcm9wZXJ0eVwiOjc5LFwiLi9fY3R4XCI6ODAsXCIuL19leHBvcnRcIjo4NixcIi4vX2lzLWFycmF5LWl0ZXJcIjo5NixcIi4vX2l0ZXItY2FsbFwiOjk5LFwiLi9faXRlci1kZXRlY3RcIjoxMDIsXCIuL190by1sZW5ndGhcIjoxMzksXCIuL190by1vYmplY3RcIjoxNDAsXCIuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiOjE0Nn1dLDE1MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9kZXJlcV8oJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSBfZGVyZXFfKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSBfZGVyZXFfKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSBfZGVyZXFfKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXygnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG59LHtcIi4vX2FkZC10by11bnNjb3BhYmxlc1wiOjcyLFwiLi9faXRlci1kZWZpbmVcIjoxMDEsXCIuL19pdGVyLXN0ZXBcIjoxMDMsXCIuL19pdGVyYXRvcnNcIjoxMDQsXCIuL190by1pb2JqZWN0XCI6MTM4fV0sMTUxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IF9kZXJlcV8oJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiBfZGVyZXFfKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG5cbn0se1wiLi9fZXhwb3J0XCI6ODYsXCIuL19vYmplY3QtYXNzaWduXCI6MTA5fV0sMTUyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciAkZXhwb3J0ID0gX2RlcmVxXygnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IF9kZXJlcV8oJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcblxufSx7XCIuL19leHBvcnRcIjo4NixcIi4vX29iamVjdC1jcmVhdGVcIjoxMTB9XSwxNTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyICRleHBvcnQgPSBfZGVyZXFfKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFfZGVyZXFfKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogX2RlcmVxXygnLi9fb2JqZWN0LWRwJykuZiB9KTtcblxufSx7XCIuL19kZXNjcmlwdG9yc1wiOjgyLFwiLi9fZXhwb3J0XCI6ODYsXCIuL19vYmplY3QtZHBcIjoxMTF9XSwxNTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gX2RlcmVxXygnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IF9kZXJlcV8oJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxuX2RlcmVxXygnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuXG59LHtcIi4vX2lzLW9iamVjdFwiOjk4LFwiLi9fbWV0YVwiOjEwNixcIi4vX29iamVjdC1zYXBcIjoxMjF9XSwxNTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSBfZGVyZXFfKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSBfZGVyZXFfKCcuL19vYmplY3QtZ3BvJyk7XG5cbl9kZXJlcV8oJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuXG59LHtcIi4vX29iamVjdC1ncG9cIjoxMTcsXCIuL19vYmplY3Qtc2FwXCI6MTIxLFwiLi9fdG8tb2JqZWN0XCI6MTQwfV0sMTU2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IF9kZXJlcV8oJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiBfZGVyZXFfKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG5cbn0se1wiLi9fZXhwb3J0XCI6ODYsXCIuL19zZXQtcHJvdG9cIjoxMjh9XSwxNTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzQ2XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6NDZ9XSwxNTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSBfZGVyZXFfKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gX2RlcmVxXygnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gX2RlcmVxXygnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IF9kZXJlcV8oJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gX2RlcmVxXygnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSBfZGVyZXFfKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSBfZGVyZXFfKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IF9kZXJlcV8oJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSBfZGVyZXFfKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfZGVyZXFfKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IF9kZXJlcV8oJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gX2RlcmVxXygnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9kZXJlcV8oJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gX2RlcmVxXygnLi9fcGVyZm9ybScpO1xudmFyIHByb21pc2VSZXNvbHZlID0gX2RlcmVxXygnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW19kZXJlcV8oJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBfZGVyZXFfKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbl9kZXJlcV8oJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xuX2RlcmVxXygnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSBfZGVyZXFfKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgX2RlcmVxXygnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cbn0se1wiLi9fYS1mdW5jdGlvblwiOjcxLFwiLi9fYW4taW5zdGFuY2VcIjo3MyxcIi4vX2NsYXNzb2ZcIjo3NixcIi4vX2NvcmVcIjo3OCxcIi4vX2N0eFwiOjgwLFwiLi9fZXhwb3J0XCI6ODYsXCIuL19mb3Itb2ZcIjo4OCxcIi4vX2dsb2JhbFwiOjg5LFwiLi9faXMtb2JqZWN0XCI6OTgsXCIuL19pdGVyLWRldGVjdFwiOjEwMixcIi4vX2xpYnJhcnlcIjoxMDUsXCIuL19taWNyb3Rhc2tcIjoxMDcsXCIuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5XCI6MTA4LFwiLi9fcGVyZm9ybVwiOjEyMyxcIi4vX3Byb21pc2UtcmVzb2x2ZVwiOjEyNCxcIi4vX3JlZGVmaW5lLWFsbFwiOjEyNixcIi4vX3NldC1zcGVjaWVzXCI6MTI5LFwiLi9fc2V0LXRvLXN0cmluZy10YWdcIjoxMzAsXCIuL19zcGVjaWVzLWNvbnN0cnVjdG9yXCI6MTMzLFwiLi9fdGFza1wiOjEzNSxcIi4vX3drc1wiOjE0NX1dLDE1OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gX2RlcmVxXygnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbl9kZXJlcV8oJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcblxufSx7XCIuL19pdGVyLWRlZmluZVwiOjEwMSxcIi4vX3N0cmluZy1hdFwiOjEzNH1dLDE2MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gX2RlcmVxXygnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gX2RlcmVxXygnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSBfZGVyZXFfKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSBfZGVyZXFfKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IF9kZXJlcV8oJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IF9kZXJlcV8oJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gX2RlcmVxXygnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSBfZGVyZXFfKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9kZXJlcV8oJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gX2RlcmVxXygnLi9fdWlkJyk7XG52YXIgd2tzID0gX2RlcmVxXygnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gX2RlcmVxXygnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IF9kZXJlcV8oJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IF9kZXJlcV8oJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSBfZGVyZXFfKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gX2RlcmVxXygnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSBfZGVyZXFfKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSBfZGVyZXFfKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSBfZGVyZXFfKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gX2RlcmVxXygnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSBfZGVyZXFfKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IF9kZXJlcV8oJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gX2RlcmVxXygnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkRFAgPSBfZGVyZXFfKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IF9kZXJlcV8oJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgX2RlcmVxXygnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIF9kZXJlcV8oJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBfZGVyZXFfKCcuL19vYmplY3QtZ29wcycpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhX2RlcmVxXygnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgX2RlcmVxXygnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG59LHtcIi4vX2FuLW9iamVjdFwiOjc0LFwiLi9fZGVzY3JpcHRvcnNcIjo4MixcIi4vX2VudW0ta2V5c1wiOjg1LFwiLi9fZXhwb3J0XCI6ODYsXCIuL19mYWlsc1wiOjg3LFwiLi9fZ2xvYmFsXCI6ODksXCIuL19oYXNcIjo5MCxcIi4vX2hpZGVcIjo5MSxcIi4vX2lzLWFycmF5XCI6OTcsXCIuL19pcy1vYmplY3RcIjo5OCxcIi4vX2xpYnJhcnlcIjoxMDUsXCIuL19tZXRhXCI6MTA2LFwiLi9fb2JqZWN0LWNyZWF0ZVwiOjExMCxcIi4vX29iamVjdC1kcFwiOjExMSxcIi4vX29iamVjdC1nb3BkXCI6MTEzLFwiLi9fb2JqZWN0LWdvcG5cIjoxMTUsXCIuL19vYmplY3QtZ29wbi1leHRcIjoxMTQsXCIuL19vYmplY3QtZ29wc1wiOjExNixcIi4vX29iamVjdC1rZXlzXCI6MTE5LFwiLi9fb2JqZWN0LXBpZVwiOjEyMCxcIi4vX3Byb3BlcnR5LWRlc2NcIjoxMjUsXCIuL19yZWRlZmluZVwiOjEyNyxcIi4vX3NldC10by1zdHJpbmctdGFnXCI6MTMwLFwiLi9fc2hhcmVkXCI6MTMyLFwiLi9fdG8taW9iamVjdFwiOjEzOCxcIi4vX3RvLXByaW1pdGl2ZVwiOjE0MSxcIi4vX3VpZFwiOjE0MixcIi4vX3drc1wiOjE0NSxcIi4vX3drcy1kZWZpbmVcIjoxNDMsXCIuL193a3MtZXh0XCI6MTQ0fV0sMTYxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSBfZGVyZXFfKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IF9kZXJlcV8oJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuXG59LHtcIi4vX2V4cG9ydFwiOjg2LFwiLi9fb2JqZWN0LXRvLWFycmF5XCI6MTIyfV0sMTYyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSBfZGVyZXFfKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gX2RlcmVxXygnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuXG59LHtcIi4vX2V4cG9ydFwiOjg2LFwiLi9fb2JqZWN0LXRvLWFycmF5XCI6MTIyfV0sMTYzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSBfZGVyZXFfKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gX2RlcmVxXygnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9kZXJlcV8oJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IF9kZXJlcV8oJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcblxufSx7XCIuL19jb3JlXCI6NzgsXCIuL19leHBvcnRcIjo4NixcIi4vX2dsb2JhbFwiOjg5LFwiLi9fcHJvbWlzZS1yZXNvbHZlXCI6MTI0LFwiLi9fc3BlY2llcy1jb25zdHJ1Y3RvclwiOjEzM31dLDE2NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSBfZGVyZXFfKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IF9kZXJlcV8oJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gX2RlcmVxXygnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG5cbn0se1wiLi9fZXhwb3J0XCI6ODYsXCIuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5XCI6MTA4LFwiLi9fcGVyZm9ybVwiOjEyM31dLDE2NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5fZGVyZXFfKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcblxufSx7XCIuL193a3MtZGVmaW5lXCI6MTQzfV0sMTY2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbl9kZXJlcV8oJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuXG59LHtcIi4vX3drcy1kZWZpbmVcIjoxNDN9XSwxNjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuX2RlcmVxXygnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgPSBfZGVyZXFfKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gX2RlcmVxXygnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IF9kZXJlcV8oJy4vX2l0ZXJhdG9ycycpO1xudmFyIFRPX1NUUklOR19UQUcgPSBfZGVyZXFfKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxudmFyIERPTUl0ZXJhYmxlcyA9ICgnQ1NTUnVsZUxpc3QsQ1NTU3R5bGVEZWNsYXJhdGlvbixDU1NWYWx1ZUxpc3QsQ2xpZW50UmVjdExpc3QsRE9NUmVjdExpc3QsRE9NU3RyaW5nTGlzdCwnICtcbiAgJ0RPTVRva2VuTGlzdCxEYXRhVHJhbnNmZXJJdGVtTGlzdCxGaWxlTGlzdCxIVE1MQWxsQ29sbGVjdGlvbixIVE1MQ29sbGVjdGlvbixIVE1MRm9ybUVsZW1lbnQsSFRNTFNlbGVjdEVsZW1lbnQsJyArXG4gICdNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LCcgK1xuICAnU1ZHUGF0aFNlZ0xpc3QsU1ZHUG9pbnRMaXN0LFNWR1N0cmluZ0xpc3QsU1ZHVHJhbnNmb3JtTGlzdCxTb3VyY2VCdWZmZXJMaXN0LFN0eWxlU2hlZXRMaXN0LFRleHRUcmFja0N1ZUxpc3QsJyArXG4gICdUZXh0VHJhY2tMaXN0LFRvdWNoTGlzdCcpLnNwbGl0KCcsJyk7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgRE9NSXRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gRE9NSXRlcmFibGVzW2ldO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cblxufSx7XCIuL19nbG9iYWxcIjo4OSxcIi4vX2hpZGVcIjo5MSxcIi4vX2l0ZXJhdG9yc1wiOjEwNCxcIi4vX3drc1wiOjE0NSxcIi4vZXM2LmFycmF5Lml0ZXJhdG9yXCI6MTUwfV0sMTY4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVs3MV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcImR1cFwiOjcxfV0sMTY5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IF9kZXJlcV8oJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSBfZGVyZXFfKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG5cbn0se1wiLi9faGlkZVwiOjE5MyxcIi4vX3drc1wiOjI0OX1dLDE3MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bNzNdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjo3M31dLDE3MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bNzRdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19pcy1vYmplY3RcIjoyMDAsXCJkdXBcIjo3NH1dLDE3MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IF9kZXJlcV8oJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9kZXJlcV8oJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSBfZGVyZXFfKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcblxufSx7XCIuL190by1hYnNvbHV0ZS1pbmRleFwiOjIzNixcIi4vX3RvLWxlbmd0aFwiOjI0MCxcIi4vX3RvLW9iamVjdFwiOjI0MX1dLDE3MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IF9kZXJlcV8oJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9kZXJlcV8oJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSBfZGVyZXFfKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG59LHtcIi4vX3RvLWFic29sdXRlLWluZGV4XCI6MjM2LFwiLi9fdG8tbGVuZ3RoXCI6MjQwLFwiLi9fdG8tb2JqZWN0XCI6MjQxfV0sMTc0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVs3NV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX3RvLWFic29sdXRlLWluZGV4XCI6MjM2LFwiLi9fdG8taW9iamVjdFwiOjIzOSxcIi4vX3RvLWxlbmd0aFwiOjI0MCxcImR1cFwiOjc1fV0sMTc1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSBfZGVyZXFfKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gX2RlcmVxXygnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gX2RlcmVxXygnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSBfZGVyZXFfKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSBfZGVyZXFfKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuXG59LHtcIi4vX2FycmF5LXNwZWNpZXMtY3JlYXRlXCI6MTc3LFwiLi9fY3R4XCI6MTgyLFwiLi9faW9iamVjdFwiOjE5NyxcIi4vX3RvLWxlbmd0aFwiOjI0MCxcIi4vX3RvLW9iamVjdFwiOjI0MX1dLDE3NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgaXNPYmplY3QgPSBfZGVyZXFfKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gX2RlcmVxXygnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gX2RlcmVxXygnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcblxufSx7XCIuL19pcy1hcnJheVwiOjE5OSxcIi4vX2lzLW9iamVjdFwiOjIwMCxcIi4vX3drc1wiOjI0OX1dLDE3NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX2RlcmVxXygnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuXG59LHtcIi4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3JcIjoxNzZ9XSwxNzg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzc2XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fY29mXCI6MTc5LFwiLi9fd2tzXCI6MjQ5LFwiZHVwXCI6NzZ9XSwxNzk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzc3XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6Nzd9XSwxODA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzc4XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6Nzh9XSwxODE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzc5XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fb2JqZWN0LWRwXCI6MjEzLFwiLi9fcHJvcGVydHktZGVzY1wiOjIyNSxcImR1cFwiOjc5fV0sMTgyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVs4MF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2EtZnVuY3Rpb25cIjoxNjgsXCJkdXBcIjo4MH1dLDE4MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bODFdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjo4MX1dLDE4NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bODJdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19mYWlsc1wiOjE4OSxcImR1cFwiOjgyfV0sMTg1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVs4M11bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2dsb2JhbFwiOjE5MSxcIi4vX2lzLW9iamVjdFwiOjIwMCxcImR1cFwiOjgzfV0sMTg2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVs4NF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcImR1cFwiOjg0fV0sMTg3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVs4NV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX29iamVjdC1nb3BzXCI6MjE4LFwiLi9fb2JqZWN0LWtleXNcIjoyMjEsXCIuL19vYmplY3QtcGllXCI6MjIyLFwiZHVwXCI6ODV9XSwxODg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSBfZGVyZXFfKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IF9kZXJlcV8oJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IF9kZXJlcV8oJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gX2RlcmVxXygnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG59LHtcIi4vX2NvcmVcIjoxODAsXCIuL19jdHhcIjoxODIsXCIuL19nbG9iYWxcIjoxOTEsXCIuL19oaWRlXCI6MTkzLFwiLi9fcmVkZWZpbmVcIjoyMjd9XSwxODk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzg3XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6ODd9XSwxOTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzg4XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fYW4tb2JqZWN0XCI6MTcxLFwiLi9fY3R4XCI6MTgyLFwiLi9faXMtYXJyYXktaXRlclwiOjE5OCxcIi4vX2l0ZXItY2FsbFwiOjIwMSxcIi4vX3RvLWxlbmd0aFwiOjI0MCxcIi4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kXCI6MjUwLFwiZHVwXCI6ODh9XSwxOTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzg5XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6ODl9XSwxOTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzkwXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6OTB9XSwxOTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzkxXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fZGVzY3JpcHRvcnNcIjoxODQsXCIuL19vYmplY3QtZHBcIjoyMTMsXCIuL19wcm9wZXJ0eS1kZXNjXCI6MjI1LFwiZHVwXCI6OTF9XSwxOTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzkyXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fZ2xvYmFsXCI6MTkxLFwiZHVwXCI6OTJ9XSwxOTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzkzXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fZGVzY3JpcHRvcnNcIjoxODQsXCIuL19kb20tY3JlYXRlXCI6MTg1LFwiLi9fZmFpbHNcIjoxODksXCJkdXBcIjo5M31dLDE5NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bOTRdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjo5NH1dLDE5NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bOTVdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19jb2ZcIjoxNzksXCJkdXBcIjo5NX1dLDE5ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bOTZdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19pdGVyYXRvcnNcIjoyMDYsXCIuL193a3NcIjoyNDksXCJkdXBcIjo5Nn1dLDE5OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bOTddWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19jb2ZcIjoxNzksXCJkdXBcIjo5N31dLDIwMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bOThdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjo5OH1dLDIwMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bOTldWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19hbi1vYmplY3RcIjoxNzEsXCJkdXBcIjo5OX1dLDIwMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTAwXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9faGlkZVwiOjE5MyxcIi4vX29iamVjdC1jcmVhdGVcIjoyMTIsXCIuL19wcm9wZXJ0eS1kZXNjXCI6MjI1LFwiLi9fc2V0LXRvLXN0cmluZy10YWdcIjoyMjksXCIuL193a3NcIjoyNDksXCJkdXBcIjoxMDB9XSwyMDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEwMV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2V4cG9ydFwiOjE4OCxcIi4vX2hhc1wiOjE5MixcIi4vX2hpZGVcIjoxOTMsXCIuL19pdGVyLWNyZWF0ZVwiOjIwMixcIi4vX2l0ZXJhdG9yc1wiOjIwNixcIi4vX2xpYnJhcnlcIjoyMDcsXCIuL19vYmplY3QtZ3BvXCI6MjE5LFwiLi9fcmVkZWZpbmVcIjoyMjcsXCIuL19zZXQtdG8tc3RyaW5nLXRhZ1wiOjIyOSxcIi4vX3drc1wiOjI0OSxcImR1cFwiOjEwMX1dLDIwNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fd2tzXCI6MjQ5LFwiZHVwXCI6MTAyfV0sMjA1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMDNdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjoxMDN9XSwyMDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEwNF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcImR1cFwiOjEwNH1dLDIwNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG59LHt9XSwyMDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEwNl1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2ZhaWxzXCI6MTg5LFwiLi9faGFzXCI6MTkyLFwiLi9faXMtb2JqZWN0XCI6MjAwLFwiLi9fb2JqZWN0LWRwXCI6MjEzLFwiLi9fdWlkXCI6MjQ2LFwiZHVwXCI6MTA2fV0sMjA5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMDddWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19jb2ZcIjoxNzksXCIuL19nbG9iYWxcIjoxOTEsXCIuL190YXNrXCI6MjM1LFwiZHVwXCI6MTA3fV0sMjEwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMDhdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19hLWZ1bmN0aW9uXCI6MTY4LFwiZHVwXCI6MTA4fV0sMjExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMDldWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19mYWlsc1wiOjE4OSxcIi4vX2lvYmplY3RcIjoxOTcsXCIuL19vYmplY3QtZ29wc1wiOjIxOCxcIi4vX29iamVjdC1rZXlzXCI6MjIxLFwiLi9fb2JqZWN0LXBpZVwiOjIyMixcIi4vX3RvLW9iamVjdFwiOjI0MSxcImR1cFwiOjEwOX1dLDIxMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTEwXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fYW4tb2JqZWN0XCI6MTcxLFwiLi9fZG9tLWNyZWF0ZVwiOjE4NSxcIi4vX2VudW0tYnVnLWtleXNcIjoxODYsXCIuL19odG1sXCI6MTk0LFwiLi9fb2JqZWN0LWRwc1wiOjIxNCxcIi4vX3NoYXJlZC1rZXlcIjoyMzAsXCJkdXBcIjoxMTB9XSwyMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExMV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2FuLW9iamVjdFwiOjE3MSxcIi4vX2Rlc2NyaXB0b3JzXCI6MTg0LFwiLi9faWU4LWRvbS1kZWZpbmVcIjoxOTUsXCIuL190by1wcmltaXRpdmVcIjoyNDIsXCJkdXBcIjoxMTF9XSwyMTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExMl1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2FuLW9iamVjdFwiOjE3MSxcIi4vX2Rlc2NyaXB0b3JzXCI6MTg0LFwiLi9fb2JqZWN0LWRwXCI6MjEzLFwiLi9fb2JqZWN0LWtleXNcIjoyMjEsXCJkdXBcIjoxMTJ9XSwyMTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExM11bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2Rlc2NyaXB0b3JzXCI6MTg0LFwiLi9faGFzXCI6MTkyLFwiLi9faWU4LWRvbS1kZWZpbmVcIjoxOTUsXCIuL19vYmplY3QtcGllXCI6MjIyLFwiLi9fcHJvcGVydHktZGVzY1wiOjIyNSxcIi4vX3RvLWlvYmplY3RcIjoyMzksXCIuL190by1wcmltaXRpdmVcIjoyNDIsXCJkdXBcIjoxMTN9XSwyMTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExNF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX29iamVjdC1nb3BuXCI6MjE3LFwiLi9fdG8taW9iamVjdFwiOjIzOSxcImR1cFwiOjExNH1dLDIxNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTE1XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fZW51bS1idWcta2V5c1wiOjE4NixcIi4vX29iamVjdC1rZXlzLWludGVybmFsXCI6MjIwLFwiZHVwXCI6MTE1fV0sMjE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMTZdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjoxMTZ9XSwyMTk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExN11bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2hhc1wiOjE5MixcIi4vX3NoYXJlZC1rZXlcIjoyMzAsXCIuL190by1vYmplY3RcIjoyNDEsXCJkdXBcIjoxMTd9XSwyMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExOF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2FycmF5LWluY2x1ZGVzXCI6MTc0LFwiLi9faGFzXCI6MTkyLFwiLi9fc2hhcmVkLWtleVwiOjIzMCxcIi4vX3RvLWlvYmplY3RcIjoyMzksXCJkdXBcIjoxMTh9XSwyMjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzExOV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2VudW0tYnVnLWtleXNcIjoxODYsXCIuL19vYmplY3Qta2V5cy1pbnRlcm5hbFwiOjIyMCxcImR1cFwiOjExOX1dLDIyMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTIwXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiZHVwXCI6MTIwfV0sMjIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMjNdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCJkdXBcIjoxMjN9XSwyMjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEyNF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2FuLW9iamVjdFwiOjE3MSxcIi4vX2lzLW9iamVjdFwiOjIwMCxcIi4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHlcIjoyMTAsXCJkdXBcIjoxMjR9XSwyMjU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEyNV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcImR1cFwiOjEyNX1dLDIyNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgcmVkZWZpbmUgPSBfZGVyZXFfKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbn0se1wiLi9fcmVkZWZpbmVcIjoyMjd9XSwyMjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSBfZGVyZXFfKCcuL19oaWRlJyk7XG52YXIgaGFzID0gX2RlcmVxXygnLi9faGFzJyk7XG52YXIgU1JDID0gX2RlcmVxXygnLi9fdWlkJykoJ3NyYycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRnVuY3Rpb25bVE9fU1RSSU5HXTtcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbl9kZXJlcV8oJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuXG59LHtcIi4vX2NvcmVcIjoxODAsXCIuL19nbG9iYWxcIjoxOTEsXCIuL19oYXNcIjoxOTIsXCIuL19oaWRlXCI6MTkzLFwiLi9fdWlkXCI6MjQ2fV0sMjI4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSBfZGVyZXFfKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IF9kZXJlcV8oJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gX2RlcmVxXygnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gX2RlcmVxXygnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxufSx7XCIuL19kZXNjcmlwdG9yc1wiOjE4NCxcIi4vX2dsb2JhbFwiOjE5MSxcIi4vX29iamVjdC1kcFwiOjIxMyxcIi4vX3drc1wiOjI0OX1dLDIyOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTMwXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9faGFzXCI6MTkyLFwiLi9fb2JqZWN0LWRwXCI6MjEzLFwiLi9fd2tzXCI6MjQ5LFwiZHVwXCI6MTMwfV0sMjMwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMzFdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19zaGFyZWRcIjoyMzEsXCIuL191aWRcIjoyNDYsXCJkdXBcIjoxMzF9XSwyMzE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEzMl1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2dsb2JhbFwiOjE5MSxcImR1cFwiOjEzMn1dLDIzMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTMzXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fYS1mdW5jdGlvblwiOjE2OCxcIi4vX2FuLW9iamVjdFwiOjE3MSxcIi4vX3drc1wiOjI0OSxcImR1cFwiOjEzM31dLDIzMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTM0XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fZGVmaW5lZFwiOjE4MyxcIi4vX3RvLWludGVnZXJcIjoyMzgsXCJkdXBcIjoxMzR9XSwyMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IF9kZXJlcV8oJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gX2RlcmVxXygnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuXG59LHtcIi4vX2RlZmluZWRcIjoxODMsXCIuL190by1pbnRlZ2VyXCI6MjM4fV0sMjM1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxMzVdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19jb2ZcIjoxNzksXCIuL19jdHhcIjoxODIsXCIuL19kb20tY3JlYXRlXCI6MTg1LFwiLi9fZ2xvYmFsXCI6MTkxLFwiLi9faHRtbFwiOjE5NCxcIi4vX2ludm9rZVwiOjE5NixcImR1cFwiOjEzNX1dLDIzNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTM2XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fdG8taW50ZWdlclwiOjIzOCxcImR1cFwiOjEzNn1dLDIzNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gX2RlcmVxXygnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gX2RlcmVxXygnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXIoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGghJyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG59LHtcIi4vX3RvLWludGVnZXJcIjoyMzgsXCIuL190by1sZW5ndGhcIjoyNDB9XSwyMzg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEzN11bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcImR1cFwiOjEzN31dLDIzOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTM4XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fZGVmaW5lZFwiOjE4MyxcIi4vX2lvYmplY3RcIjoxOTcsXCJkdXBcIjoxMzh9XSwyNDA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzEzOV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX3RvLWludGVnZXJcIjoyMzgsXCJkdXBcIjoxMzl9XSwyNDE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE0MF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2RlZmluZWRcIjoxODMsXCJkdXBcIjoxNDB9XSwyNDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE0MV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2lzLW9iamVjdFwiOjIwMCxcImR1cFwiOjE0MX1dLDI0MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5pZiAoX2RlcmVxXygnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IF9kZXJlcV8oJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSBfZGVyZXFfKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IF9kZXJlcV8oJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gX2RlcmVxXygnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSBfZGVyZXFfKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IF9kZXJlcV8oJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IF9kZXJlcV8oJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSBfZGVyZXFfKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gX2RlcmVxXygnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSBfZGVyZXFfKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IF9kZXJlcV8oJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gX2RlcmVxXygnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gX2RlcmVxXygnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9kZXJlcV8oJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IF9kZXJlcV8oJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gX2RlcmVxXygnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gX2RlcmVxXygnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSBfZGVyZXFfKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gX2RlcmVxXygnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IF9kZXJlcV8oJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IF9kZXJlcV8oJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gX2RlcmVxXygnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IF9kZXJlcV8oJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IF9kZXJlcV8oJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSBfZGVyZXFfKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IF9kZXJlcV8oJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSBfZGVyZXFfKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gX2RlcmVxXygnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9kZXJlcV8oJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gX2RlcmVxXygnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IF9kZXJlcV8oJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSBfZGVyZXFfKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IF9kZXJlcV8oJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSBfZGVyZXFfKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSBfZGVyZXFfKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gX2RlcmVxXygnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IF9kZXJlcV8oJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG59LHtcIi4vX2FuLWluc3RhbmNlXCI6MTcwLFwiLi9fYXJyYXktY29weS13aXRoaW5cIjoxNzIsXCIuL19hcnJheS1maWxsXCI6MTczLFwiLi9fYXJyYXktaW5jbHVkZXNcIjoxNzQsXCIuL19hcnJheS1tZXRob2RzXCI6MTc1LFwiLi9fY2xhc3NvZlwiOjE3OCxcIi4vX2N0eFwiOjE4MixcIi4vX2Rlc2NyaXB0b3JzXCI6MTg0LFwiLi9fZXhwb3J0XCI6MTg4LFwiLi9fZmFpbHNcIjoxODksXCIuL19nbG9iYWxcIjoxOTEsXCIuL19oYXNcIjoxOTIsXCIuL19oaWRlXCI6MTkzLFwiLi9faXMtYXJyYXktaXRlclwiOjE5OCxcIi4vX2lzLW9iamVjdFwiOjIwMCxcIi4vX2l0ZXItZGV0ZWN0XCI6MjA0LFwiLi9faXRlcmF0b3JzXCI6MjA2LFwiLi9fbGlicmFyeVwiOjIwNyxcIi4vX29iamVjdC1jcmVhdGVcIjoyMTIsXCIuL19vYmplY3QtZHBcIjoyMTMsXCIuL19vYmplY3QtZ29wZFwiOjIxNSxcIi4vX29iamVjdC1nb3BuXCI6MjE3LFwiLi9fb2JqZWN0LWdwb1wiOjIxOSxcIi4vX3Byb3BlcnR5LWRlc2NcIjoyMjUsXCIuL19yZWRlZmluZS1hbGxcIjoyMjYsXCIuL19zZXQtc3BlY2llc1wiOjIyOCxcIi4vX3NwZWNpZXMtY29uc3RydWN0b3JcIjoyMzIsXCIuL190by1hYnNvbHV0ZS1pbmRleFwiOjIzNixcIi4vX3RvLWluZGV4XCI6MjM3LFwiLi9fdG8taW50ZWdlclwiOjIzOCxcIi4vX3RvLWxlbmd0aFwiOjI0MCxcIi4vX3RvLW9iamVjdFwiOjI0MSxcIi4vX3RvLXByaW1pdGl2ZVwiOjI0MixcIi4vX3R5cGVkXCI6MjQ1LFwiLi9fdHlwZWQtYnVmZmVyXCI6MjQ0LFwiLi9fdWlkXCI6MjQ2LFwiLi9fd2tzXCI6MjQ5LFwiLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2RcIjoyNTAsXCIuL2VzNi5hcnJheS5pdGVyYXRvclwiOjI1NH1dLDI0NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gX2RlcmVxXygnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSBfZGVyZXFfKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSBfZGVyZXFfKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gX2RlcmVxXygnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gX2RlcmVxXygnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gX2RlcmVxXygnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSBfZGVyZXFfKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSBfZGVyZXFfKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IF9kZXJlcV8oJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IF9kZXJlcV8oJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSBfZGVyZXFfKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSBfZGVyZXFfKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSBfZGVyZXFfKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IF9kZXJlcV8oJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9kZXJlcV8oJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcblxufSx7XCIuL19hbi1pbnN0YW5jZVwiOjE3MCxcIi4vX2FycmF5LWZpbGxcIjoxNzMsXCIuL19kZXNjcmlwdG9yc1wiOjE4NCxcIi4vX2ZhaWxzXCI6MTg5LFwiLi9fZ2xvYmFsXCI6MTkxLFwiLi9faGlkZVwiOjE5MyxcIi4vX2xpYnJhcnlcIjoyMDcsXCIuL19vYmplY3QtZHBcIjoyMTMsXCIuL19vYmplY3QtZ29wblwiOjIxNyxcIi4vX3JlZGVmaW5lLWFsbFwiOjIyNixcIi4vX3NldC10by1zdHJpbmctdGFnXCI6MjI5LFwiLi9fdG8taW5kZXhcIjoyMzcsXCIuL190by1pbnRlZ2VyXCI6MjM4LFwiLi9fdG8tbGVuZ3RoXCI6MjQwLFwiLi9fdHlwZWRcIjoyNDV9XSwyNDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSBfZGVyZXFfKCcuL19oaWRlJyk7XG52YXIgdWlkID0gX2RlcmVxXygnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuXG59LHtcIi4vX2dsb2JhbFwiOjE5MSxcIi4vX2hpZGVcIjoxOTMsXCIuL191aWRcIjoyNDZ9XSwyNDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE0Ml1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcImR1cFwiOjE0Mn1dLDI0NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTQzXVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fY29yZVwiOjE4MCxcIi4vX2dsb2JhbFwiOjE5MSxcIi4vX2xpYnJhcnlcIjoyMDcsXCIuL19vYmplY3QtZHBcIjoyMTMsXCIuL193a3MtZXh0XCI6MjQ4LFwiZHVwXCI6MTQzfV0sMjQ4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxNDRdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL193a3NcIjoyNDksXCJkdXBcIjoxNDR9XSwyNDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE0NV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2dsb2JhbFwiOjE5MSxcIi4vX3NoYXJlZFwiOjIzMSxcIi4vX3VpZFwiOjI0NixcImR1cFwiOjE0NX1dLDI1MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTQ2XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fY2xhc3NvZlwiOjE3OCxcIi4vX2NvcmVcIjoxODAsXCIuL19pdGVyYXRvcnNcIjoyMDYsXCIuL193a3NcIjoyNDksXCJkdXBcIjoxNDZ9XSwyNTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IF9kZXJlcV8oJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiBfZGVyZXFfKCcuL19hcnJheS1maWxsJykgfSk7XG5cbl9kZXJlcV8oJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG5cbn0se1wiLi9fYWRkLXRvLXVuc2NvcGFibGVzXCI6MTY5LFwiLi9fYXJyYXktZmlsbFwiOjE3MyxcIi4vX2V4cG9ydFwiOjE4OH1dLDI1MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IF9kZXJlcV8oJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gX2RlcmVxXygnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5fZGVyZXFfKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuXG59LHtcIi4vX2FkZC10by11bnNjb3BhYmxlc1wiOjE2OSxcIi4vX2FycmF5LW1ldGhvZHNcIjoxNzUsXCIuL19leHBvcnRcIjoxODh9XSwyNTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE0OV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2NyZWF0ZS1wcm9wZXJ0eVwiOjE4MSxcIi4vX2N0eFwiOjE4MixcIi4vX2V4cG9ydFwiOjE4OCxcIi4vX2lzLWFycmF5LWl0ZXJcIjoxOTgsXCIuL19pdGVyLWNhbGxcIjoyMDEsXCIuL19pdGVyLWRldGVjdFwiOjIwNCxcIi4vX3RvLWxlbmd0aFwiOjI0MCxcIi4vX3RvLW9iamVjdFwiOjI0MSxcIi4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kXCI6MjUwLFwiZHVwXCI6MTQ5fV0sMjU0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxNTBdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19hZGQtdG8tdW5zY29wYWJsZXNcIjoxNjksXCIuL19pdGVyLWRlZmluZVwiOjIwMyxcIi4vX2l0ZXItc3RlcFwiOjIwNSxcIi4vX2l0ZXJhdG9yc1wiOjIwNixcIi4vX3RvLWlvYmplY3RcIjoyMzksXCJkdXBcIjoxNTB9XSwyNTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE1MV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2V4cG9ydFwiOjE4OCxcIi4vX29iamVjdC1hc3NpZ25cIjoyMTEsXCJkdXBcIjoxNTF9XSwyNTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IF9kZXJlcV8oJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W19kZXJlcV8oJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIF9kZXJlcV8oJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cblxufSx7XCIuL19jbGFzc29mXCI6MTc4LFwiLi9fcmVkZWZpbmVcIjoyMjcsXCIuL193a3NcIjoyNDl9XSwyNTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE1OF1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2EtZnVuY3Rpb25cIjoxNjgsXCIuL19hbi1pbnN0YW5jZVwiOjE3MCxcIi4vX2NsYXNzb2ZcIjoxNzgsXCIuL19jb3JlXCI6MTgwLFwiLi9fY3R4XCI6MTgyLFwiLi9fZXhwb3J0XCI6MTg4LFwiLi9fZm9yLW9mXCI6MTkwLFwiLi9fZ2xvYmFsXCI6MTkxLFwiLi9faXMtb2JqZWN0XCI6MjAwLFwiLi9faXRlci1kZXRlY3RcIjoyMDQsXCIuL19saWJyYXJ5XCI6MjA3LFwiLi9fbWljcm90YXNrXCI6MjA5LFwiLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eVwiOjIxMCxcIi4vX3BlcmZvcm1cIjoyMjMsXCIuL19wcm9taXNlLXJlc29sdmVcIjoyMjQsXCIuL19yZWRlZmluZS1hbGxcIjoyMjYsXCIuL19zZXQtc3BlY2llc1wiOjIyOCxcIi4vX3NldC10by1zdHJpbmctdGFnXCI6MjI5LFwiLi9fc3BlY2llcy1jb25zdHJ1Y3RvclwiOjIzMixcIi4vX3Rhc2tcIjoyMzUsXCIuL193a3NcIjoyNDksXCJkdXBcIjoxNTh9XSwyNTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE1OV1bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2l0ZXItZGVmaW5lXCI6MjAzLFwiLi9fc3RyaW5nLWF0XCI6MjMzLFwiZHVwXCI6MTU5fV0sMjU5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciAkZXhwb3J0ID0gX2RlcmVxXygnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQoY291bnQpXG4gIHJlcGVhdDogX2RlcmVxXygnLi9fc3RyaW5nLXJlcGVhdCcpXG59KTtcblxufSx7XCIuL19leHBvcnRcIjoxODgsXCIuL19zdHJpbmctcmVwZWF0XCI6MjM0fV0sMjYwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxNjBdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19hbi1vYmplY3RcIjoxNzEsXCIuL19kZXNjcmlwdG9yc1wiOjE4NCxcIi4vX2VudW0ta2V5c1wiOjE4NyxcIi4vX2V4cG9ydFwiOjE4OCxcIi4vX2ZhaWxzXCI6MTg5LFwiLi9fZ2xvYmFsXCI6MTkxLFwiLi9faGFzXCI6MTkyLFwiLi9faGlkZVwiOjE5MyxcIi4vX2lzLWFycmF5XCI6MTk5LFwiLi9faXMtb2JqZWN0XCI6MjAwLFwiLi9fbGlicmFyeVwiOjIwNyxcIi4vX21ldGFcIjoyMDgsXCIuL19vYmplY3QtY3JlYXRlXCI6MjEyLFwiLi9fb2JqZWN0LWRwXCI6MjEzLFwiLi9fb2JqZWN0LWdvcGRcIjoyMTUsXCIuL19vYmplY3QtZ29wblwiOjIxNyxcIi4vX29iamVjdC1nb3BuLWV4dFwiOjIxNixcIi4vX29iamVjdC1nb3BzXCI6MjE4LFwiLi9fb2JqZWN0LWtleXNcIjoyMjEsXCIuL19vYmplY3QtcGllXCI6MjIyLFwiLi9fcHJvcGVydHktZGVzY1wiOjIyNSxcIi4vX3JlZGVmaW5lXCI6MjI3LFwiLi9fc2V0LXRvLXN0cmluZy10YWdcIjoyMjksXCIuL19zaGFyZWRcIjoyMzEsXCIuL190by1pb2JqZWN0XCI6MjM5LFwiLi9fdG8tcHJpbWl0aXZlXCI6MjQyLFwiLi9fdWlkXCI6MjQ2LFwiLi9fd2tzXCI6MjQ5LFwiLi9fd2tzLWRlZmluZVwiOjI0NyxcIi4vX3drcy1leHRcIjoyNDgsXCJkdXBcIjoxNjB9XSwyNjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuX2RlcmVxXygnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cbn0se1wiLi9fdHlwZWQtYXJyYXlcIjoyNDN9XSwyNjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuYXJndW1lbnRzWzRdWzE2M11bMF0uYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpXG59LHtcIi4vX2NvcmVcIjoxODAsXCIuL19leHBvcnRcIjoxODgsXCIuL19nbG9iYWxcIjoxOTEsXCIuL19wcm9taXNlLXJlc29sdmVcIjoyMjQsXCIuL19zcGVjaWVzLWNvbnN0cnVjdG9yXCI6MjMyLFwiZHVwXCI6MTYzfV0sMjYzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmFyZ3VtZW50c1s0XVsxNjRdWzBdLmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKVxufSx7XCIuL19leHBvcnRcIjoxODgsXCIuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5XCI6MjEwLFwiLi9fcGVyZm9ybVwiOjIyMyxcImR1cFwiOjE2NH1dLDI2NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTY1XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fd2tzLWRlZmluZVwiOjI0NyxcImR1cFwiOjE2NX1dLDI2NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5hcmd1bWVudHNbNF1bMTY2XVswXS5hcHBseShleHBvcnRzLGFyZ3VtZW50cylcbn0se1wiLi9fd2tzLWRlZmluZVwiOjI0NyxcImR1cFwiOjE2Nn1dLDI2NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgJGl0ZXJhdG9ycyA9IF9kZXJlcV8oJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IF9kZXJlcV8oJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSBfZGVyZXFfKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IF9kZXJlcV8oJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSBfZGVyZXFfKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gX2RlcmVxXygnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gX2RlcmVxXygnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cblxufSx7XCIuL19nbG9iYWxcIjoxOTEsXCIuL19oaWRlXCI6MTkzLFwiLi9faXRlcmF0b3JzXCI6MjA2LFwiLi9fb2JqZWN0LWtleXNcIjoyMjEsXCIuL19yZWRlZmluZVwiOjIyNyxcIi4vX3drc1wiOjI0OSxcIi4vZXM2LmFycmF5Lml0ZXJhdG9yXCI6MjU0fV0sMjY3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGVsbGlwdGljID0gZXhwb3J0cztcblxuZWxsaXB0aWMudmVyc2lvbiA9IF9kZXJlcV8oJy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG5lbGxpcHRpYy51dGlscyA9IF9kZXJlcV8oJy4vZWxsaXB0aWMvdXRpbHMnKTtcbmVsbGlwdGljLnJhbmQgPSBfZGVyZXFfKCdicm9yYW5kJyk7XG5lbGxpcHRpYy5jdXJ2ZSA9IF9kZXJlcV8oJy4vZWxsaXB0aWMvY3VydmUnKTtcbmVsbGlwdGljLmN1cnZlcyA9IF9kZXJlcV8oJy4vZWxsaXB0aWMvY3VydmVzJyk7XG5cbi8vIFByb3RvY29sc1xuZWxsaXB0aWMuZWMgPSBfZGVyZXFfKCcuL2VsbGlwdGljL2VjJyk7XG5lbGxpcHRpYy5lZGRzYSA9IF9kZXJlcV8oJy4vZWxsaXB0aWMvZWRkc2EnKTtcblxufSx7XCIuLi9wYWNrYWdlLmpzb25cIjoyODIsXCIuL2VsbGlwdGljL2N1cnZlXCI6MjcwLFwiLi9lbGxpcHRpYy9jdXJ2ZXNcIjoyNzMsXCIuL2VsbGlwdGljL2VjXCI6Mjc0LFwiLi9lbGxpcHRpYy9lZGRzYVwiOjI3NyxcIi4vZWxsaXB0aWMvdXRpbHNcIjoyODEsXCJicm9yYW5kXCI6NDV9XSwyNjg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSBfZGVyZXFfKCdibi5qcycpO1xudmFyIGVsbGlwdGljID0gX2RlcmVxXygnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGdldE5BRiA9IHV0aWxzLmdldE5BRjtcbnZhciBnZXRKU0YgPSB1dGlscy5nZXRKU0Y7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBCYXNlQ3VydmUodHlwZSwgY29uZikge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnAgPSBuZXcgQk4oY29uZi5wLCAxNik7XG5cbiAgLy8gVXNlIE1vbnRnb21lcnksIHdoZW4gdGhlcmUgaXMgbm8gZmFzdCByZWR1Y3Rpb24gZm9yIHRoZSBwcmltZVxuICB0aGlzLnJlZCA9IGNvbmYucHJpbWUgPyBCTi5yZWQoY29uZi5wcmltZSkgOiBCTi5tb250KHRoaXMucCk7XG5cbiAgLy8gVXNlZnVsIGZvciBtYW55IGN1cnZlc1xuICB0aGlzLnplcm8gPSBuZXcgQk4oMCkudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLm9uZSA9IG5ldyBCTigxKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMudHdvID0gbmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKTtcblxuICAvLyBDdXJ2ZSBjb25maWd1cmF0aW9uLCBvcHRpb25hbFxuICB0aGlzLm4gPSBjb25mLm4gJiYgbmV3IEJOKGNvbmYubiwgMTYpO1xuICB0aGlzLmcgPSBjb25mLmcgJiYgdGhpcy5wb2ludEZyb21KU09OKGNvbmYuZywgY29uZi5nUmVkKTtcblxuICAvLyBUZW1wb3JhcnkgYXJyYXlzXG4gIHRoaXMuX3duYWZUMSA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQyID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDMgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUNCA9IG5ldyBBcnJheSg0KTtcblxuICAvLyBHZW5lcmFsaXplZCBHcmVnIE1heHdlbGwncyB0cmlja1xuICB2YXIgYWRqdXN0Q291bnQgPSB0aGlzLm4gJiYgdGhpcy5wLmRpdih0aGlzLm4pO1xuICBpZiAoIWFkanVzdENvdW50IHx8IGFkanVzdENvdW50LmNtcG4oMTAwKSA+IDApIHtcbiAgICB0aGlzLnJlZE4gPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX21heHdlbGxUcmljayA9IHRydWU7XG4gICAgdGhpcy5yZWROID0gdGhpcy5uLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBCYXNlQ3VydmU7XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsID0gZnVuY3Rpb24gX2ZpeGVkTmFmTXVsKHAsIGspIHtcbiAgYXNzZXJ0KHAucHJlY29tcHV0ZWQpO1xuICB2YXIgZG91YmxlcyA9IHAuX2dldERvdWJsZXMoKTtcblxuICB2YXIgbmFmID0gZ2V0TkFGKGssIDEpO1xuICB2YXIgSSA9ICgxIDw8IChkb3VibGVzLnN0ZXAgKyAxKSkgLSAoZG91Ymxlcy5zdGVwICUgMiA9PT0gMCA/IDIgOiAxKTtcbiAgSSAvPSAzO1xuXG4gIC8vIFRyYW5zbGF0ZSBpbnRvIG1vcmUgd2luZG93ZWQgZm9ybVxuICB2YXIgcmVwciA9IFtdO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IG5hZi5sZW5ndGg7IGogKz0gZG91Ymxlcy5zdGVwKSB7XG4gICAgdmFyIG5hZlcgPSAwO1xuICAgIGZvciAodmFyIGsgPSBqICsgZG91Ymxlcy5zdGVwIC0gMTsgayA+PSBqOyBrLS0pXG4gICAgICBuYWZXID0gKG5hZlcgPDwgMSkgKyBuYWZba107XG4gICAgcmVwci5wdXNoKG5hZlcpO1xuICB9XG5cbiAgdmFyIGEgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgdmFyIGIgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgZm9yICh2YXIgaSA9IEk7IGkgPiAwOyBpLS0pIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcHIubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBuYWZXID0gcmVwcltqXTtcbiAgICAgIGlmIChuYWZXID09PSBpKVxuICAgICAgICBiID0gYi5taXhlZEFkZChkb3VibGVzLnBvaW50c1tqXSk7XG4gICAgICBlbHNlIGlmIChuYWZXID09PSAtaSlcbiAgICAgICAgYiA9IGIubWl4ZWRBZGQoZG91Ymxlcy5wb2ludHNbal0ubmVnKCkpO1xuICAgIH1cbiAgICBhID0gYS5hZGQoYik7XG4gIH1cbiAgcmV0dXJuIGEudG9QKCk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsID0gZnVuY3Rpb24gX3duYWZNdWwocCwgaykge1xuICB2YXIgdyA9IDQ7XG5cbiAgLy8gUHJlY29tcHV0ZSB3aW5kb3dcbiAgdmFyIG5hZlBvaW50cyA9IHAuX2dldE5BRlBvaW50cyh3KTtcbiAgdyA9IG5hZlBvaW50cy53bmQ7XG4gIHZhciB3bmQgPSBuYWZQb2ludHMucG9pbnRzO1xuXG4gIC8vIEdldCBOQUYgZm9ybVxuICB2YXIgbmFmID0gZ2V0TkFGKGssIHcpO1xuXG4gIC8vIEFkZCBgdGhpc2AqKE4rMSkgZm9yIGV2ZXJ5IHctTkFGIGluZGV4XG4gIHZhciBhY2MgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgZm9yICh2YXIgaSA9IG5hZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIC8vIENvdW50IHplcm9lc1xuICAgIGZvciAodmFyIGsgPSAwOyBpID49IDAgJiYgbmFmW2ldID09PSAwOyBpLS0pXG4gICAgICBrKys7XG4gICAgaWYgKGkgPj0gMClcbiAgICAgIGsrKztcbiAgICBhY2MgPSBhY2MuZGJscChrKTtcblxuICAgIGlmIChpIDwgMClcbiAgICAgIGJyZWFrO1xuICAgIHZhciB6ID0gbmFmW2ldO1xuICAgIGFzc2VydCh6ICE9PSAwKTtcbiAgICBpZiAocC50eXBlID09PSAnYWZmaW5lJykge1xuICAgICAgLy8gSiArLSBQXG4gICAgICBpZiAoeiA+IDApXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZCh3bmRbKHogLSAxKSA+PiAxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZCh3bmRbKC16IC0gMSkgPj4gMV0ubmVnKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKICstIEpcbiAgICAgIGlmICh6ID4gMClcbiAgICAgICAgYWNjID0gYWNjLmFkZCh3bmRbKHogLSAxKSA+PiAxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5hZGQod25kWygteiAtIDEpID4+IDFdLm5lZygpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHAudHlwZSA9PT0gJ2FmZmluZScgPyBhY2MudG9QKCkgOiBhY2M7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsQWRkID0gZnVuY3Rpb24gX3duYWZNdWxBZGQoZGVmVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYWNvYmlhblJlc3VsdCkge1xuICB2YXIgd25kV2lkdGggPSB0aGlzLl93bmFmVDE7XG4gIHZhciB3bmQgPSB0aGlzLl93bmFmVDI7XG4gIHZhciBuYWYgPSB0aGlzLl93bmFmVDM7XG5cbiAgLy8gRmlsbCBhbGwgYXJyYXlzXG4gIHZhciBtYXggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgdmFyIG5hZlBvaW50cyA9IHAuX2dldE5BRlBvaW50cyhkZWZXKTtcbiAgICB3bmRXaWR0aFtpXSA9IG5hZlBvaW50cy53bmQ7XG4gICAgd25kW2ldID0gbmFmUG9pbnRzLnBvaW50cztcbiAgfVxuXG4gIC8vIENvbWIgc21hbGwgd2luZG93IE5BRnNcbiAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMTsgaSAtPSAyKSB7XG4gICAgdmFyIGEgPSBpIC0gMTtcbiAgICB2YXIgYiA9IGk7XG4gICAgaWYgKHduZFdpZHRoW2FdICE9PSAxIHx8IHduZFdpZHRoW2JdICE9PSAxKSB7XG4gICAgICBuYWZbYV0gPSBnZXROQUYoY29lZmZzW2FdLCB3bmRXaWR0aFthXSk7XG4gICAgICBuYWZbYl0gPSBnZXROQUYoY29lZmZzW2JdLCB3bmRXaWR0aFtiXSk7XG4gICAgICBtYXggPSBNYXRoLm1heChuYWZbYV0ubGVuZ3RoLCBtYXgpO1xuICAgICAgbWF4ID0gTWF0aC5tYXgobmFmW2JdLmxlbmd0aCwgbWF4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjb21iID0gW1xuICAgICAgcG9pbnRzW2FdLCAvKiAxICovXG4gICAgICBudWxsLCAvKiAzICovXG4gICAgICBudWxsLCAvKiA1ICovXG4gICAgICBwb2ludHNbYl0gLyogNyAqL1xuICAgIF07XG5cbiAgICAvLyBUcnkgdG8gYXZvaWQgUHJvamVjdGl2ZSBwb2ludHMsIGlmIHBvc3NpYmxlXG4gICAgaWYgKHBvaW50c1thXS55LmNtcChwb2ludHNbYl0ueSkgPT09IDApIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0uYWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfSBlbHNlIGlmIChwb2ludHNbYV0ueS5jbXAocG9pbnRzW2JdLnkucmVkTmVnKCkpID09PSAwKSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLmFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gW1xuICAgICAgLTMsIC8qIC0xIC0xICovXG4gICAgICAtMSwgLyogLTEgMCAqL1xuICAgICAgLTUsIC8qIC0xIDEgKi9cbiAgICAgIC03LCAvKiAwIC0xICovXG4gICAgICAwLCAvKiAwIDAgKi9cbiAgICAgIDcsIC8qIDAgMSAqL1xuICAgICAgNSwgLyogMSAtMSAqL1xuICAgICAgMSwgLyogMSAwICovXG4gICAgICAzICAvKiAxIDEgKi9cbiAgICBdO1xuXG4gICAgdmFyIGpzZiA9IGdldEpTRihjb2VmZnNbYV0sIGNvZWZmc1tiXSk7XG4gICAgbWF4ID0gTWF0aC5tYXgoanNmWzBdLmxlbmd0aCwgbWF4KTtcbiAgICBuYWZbYV0gPSBuZXcgQXJyYXkobWF4KTtcbiAgICBuYWZbYl0gPSBuZXcgQXJyYXkobWF4KTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1heDsgaisrKSB7XG4gICAgICB2YXIgamEgPSBqc2ZbMF1bal0gfCAwO1xuICAgICAgdmFyIGpiID0ganNmWzFdW2pdIHwgMDtcblxuICAgICAgbmFmW2FdW2pdID0gaW5kZXhbKGphICsgMSkgKiAzICsgKGpiICsgMSldO1xuICAgICAgbmFmW2JdW2pdID0gMDtcbiAgICAgIHduZFthXSA9IGNvbWI7XG4gICAgfVxuICB9XG5cbiAgdmFyIGFjYyA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICB2YXIgdG1wID0gdGhpcy5fd25hZlQ0O1xuICBmb3IgKHZhciBpID0gbWF4OyBpID49IDA7IGktLSkge1xuICAgIHZhciBrID0gMDtcblxuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIHZhciB6ZXJvID0gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgdG1wW2pdID0gbmFmW2pdW2ldIHwgMDtcbiAgICAgICAgaWYgKHRtcFtqXSAhPT0gMClcbiAgICAgICAgICB6ZXJvID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXplcm8pXG4gICAgICAgIGJyZWFrO1xuICAgICAgaysrO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBpZiAoaSA+PSAwKVxuICAgICAgaysrO1xuICAgIGFjYyA9IGFjYy5kYmxwKGspO1xuICAgIGlmIChpIDwgMClcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgdmFyIHogPSB0bXBbal07XG4gICAgICB2YXIgcDtcbiAgICAgIGlmICh6ID09PSAwKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGVsc2UgaWYgKHogPiAwKVxuICAgICAgICBwID0gd25kW2pdWyh6IC0gMSkgPj4gMV07XG4gICAgICBlbHNlIGlmICh6IDwgMClcbiAgICAgICAgcCA9IHduZFtqXVsoLXogLSAxKSA+PiAxXS5uZWcoKTtcblxuICAgICAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZChwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLmFkZChwKTtcbiAgICB9XG4gIH1cbiAgLy8gWmVyb2lmeSByZWZlcmVuY2VzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgd25kW2ldID0gbnVsbDtcblxuICBpZiAoamFjb2JpYW5SZXN1bHQpXG4gICAgcmV0dXJuIGFjYztcbiAgZWxzZVxuICAgIHJldHVybiBhY2MudG9QKCk7XG59O1xuXG5mdW5jdGlvbiBCYXNlUG9pbnQoY3VydmUsIHR5cGUpIHtcbiAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnByZWNvbXB1dGVkID0gbnVsbDtcbn1cbkJhc2VDdXJ2ZS5CYXNlUG9pbnQgPSBCYXNlUG9pbnQ7XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSgvKm90aGVyKi8pIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICBieXRlcyA9IHV0aWxzLnRvQXJyYXkoYnl0ZXMsIGVuYyk7XG5cbiAgdmFyIGxlbiA9IHRoaXMucC5ieXRlTGVuZ3RoKCk7XG5cbiAgLy8gdW5jb21wcmVzc2VkLCBoeWJyaWQtb2RkLCBoeWJyaWQtZXZlblxuICBpZiAoKGJ5dGVzWzBdID09PSAweDA0IHx8IGJ5dGVzWzBdID09PSAweDA2IHx8IGJ5dGVzWzBdID09PSAweDA3KSAmJlxuICAgICAgYnl0ZXMubGVuZ3RoIC0gMSA9PT0gMiAqIGxlbikge1xuICAgIGlmIChieXRlc1swXSA9PT0gMHgwNilcbiAgICAgIGFzc2VydChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAlIDIgPT09IDApO1xuICAgIGVsc2UgaWYgKGJ5dGVzWzBdID09PSAweDA3KVxuICAgICAgYXNzZXJ0KGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICUgMiA9PT0gMSk7XG5cbiAgICB2YXIgcmVzID0gIHRoaXMucG9pbnQoYnl0ZXMuc2xpY2UoMSwgMSArIGxlbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLnNsaWNlKDEgKyBsZW4sIDEgKyAyICogbGVuKSk7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9IGVsc2UgaWYgKChieXRlc1swXSA9PT0gMHgwMiB8fCBieXRlc1swXSA9PT0gMHgwMykgJiZcbiAgICAgICAgICAgICAgYnl0ZXMubGVuZ3RoIC0gMSA9PT0gbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRGcm9tWChieXRlcy5zbGljZSgxLCAxICsgbGVuKSwgYnl0ZXNbMF0gPT09IDB4MDMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwb2ludCBmb3JtYXQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZCA9IGZ1bmN0aW9uIGVuY29kZUNvbXByZXNzZWQoZW5jKSB7XG4gIHJldHVybiB0aGlzLmVuY29kZShlbmMsIHRydWUpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZShjb21wYWN0KSB7XG4gIHZhciBsZW4gPSB0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpO1xuICB2YXIgeCA9IHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgbGVuKTtcblxuICBpZiAoY29tcGFjdClcbiAgICByZXR1cm4gWyB0aGlzLmdldFkoKS5pc0V2ZW4oKSA/IDB4MDIgOiAweDAzIF0uY29uY2F0KHgpO1xuXG4gIHJldHVybiBbIDB4MDQgXS5jb25jYXQoeCwgdGhpcy5nZXRZKCkudG9BcnJheSgnYmUnLCBsZW4pKSA7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShlbmMsIGNvbXBhY3QpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLl9lbmNvZGUoY29tcGFjdCksIGVuYyk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLnByZWNvbXB1dGUgPSBmdW5jdGlvbiBwcmVjb21wdXRlKHBvd2VyKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIHZhciBwcmVjb21wdXRlZCA9IHtcbiAgICBkb3VibGVzOiBudWxsLFxuICAgIG5hZjogbnVsbCxcbiAgICBiZXRhOiBudWxsXG4gIH07XG4gIHByZWNvbXB1dGVkLm5hZiA9IHRoaXMuX2dldE5BRlBvaW50cyg4KTtcbiAgcHJlY29tcHV0ZWQuZG91YmxlcyA9IHRoaXMuX2dldERvdWJsZXMoNCwgcG93ZXIpO1xuICBwcmVjb21wdXRlZC5iZXRhID0gdGhpcy5fZ2V0QmV0YSgpO1xuICB0aGlzLnByZWNvbXB1dGVkID0gcHJlY29tcHV0ZWQ7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9oYXNEb3VibGVzID0gZnVuY3Rpb24gX2hhc0RvdWJsZXMoaykge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBkb3VibGVzID0gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO1xuICBpZiAoIWRvdWJsZXMpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBkb3VibGVzLnBvaW50cy5sZW5ndGggPj0gTWF0aC5jZWlsKChrLmJpdExlbmd0aCgpICsgMSkgLyBkb3VibGVzLnN0ZXApO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0RG91YmxlcyA9IGZ1bmN0aW9uIF9nZXREb3VibGVzKHN0ZXAsIHBvd2VyKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkICYmIHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylcbiAgICByZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO1xuXG4gIHZhciBkb3VibGVzID0gWyB0aGlzIF07XG4gIHZhciBhY2MgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvd2VyOyBpICs9IHN0ZXApIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0ZXA7IGorKylcbiAgICAgIGFjYyA9IGFjYy5kYmwoKTtcbiAgICBkb3VibGVzLnB1c2goYWNjKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0ZXA6IHN0ZXAsXG4gICAgcG9pbnRzOiBkb3VibGVzXG4gIH07XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXROQUZQb2ludHMgPSBmdW5jdGlvbiBfZ2V0TkFGUG9pbnRzKHduZCkge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZCAmJiB0aGlzLnByZWNvbXB1dGVkLm5hZilcbiAgICByZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7XG5cbiAgdmFyIHJlcyA9IFsgdGhpcyBdO1xuICB2YXIgbWF4ID0gKDEgPDwgd25kKSAtIDE7XG4gIHZhciBkYmwgPSBtYXggPT09IDEgPyBudWxsIDogdGhpcy5kYmwoKTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXg7IGkrKylcbiAgICByZXNbaV0gPSByZXNbaSAtIDFdLmFkZChkYmwpO1xuICByZXR1cm4ge1xuICAgIHduZDogd25kLFxuICAgIHBvaW50czogcmVzXG4gIH07XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXRCZXRhID0gZnVuY3Rpb24gX2dldEJldGEoKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5kYmxwID0gZnVuY3Rpb24gZGJscChrKSB7XG4gIHZhciByID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrOyBpKyspXG4gICAgciA9IHIuZGJsKCk7XG4gIHJldHVybiByO1xufTtcblxufSx7XCIuLi8uLi9lbGxpcHRpY1wiOjI2NyxcImJuLmpzXCI6NDR9XSwyNjk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSBfZGVyZXFfKCcuLi9jdXJ2ZScpO1xudmFyIGVsbGlwdGljID0gX2RlcmVxXygnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciBCTiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSBfZGVyZXFfKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBFZHdhcmRzQ3VydmUoY29uZikge1xuICAvLyBOT1RFOiBJbXBvcnRhbnQgYXMgd2UgYXJlIGNyZWF0aW5nIHBvaW50IGluIEJhc2UuY2FsbCgpXG4gIHRoaXMudHdpc3RlZCA9IChjb25mLmEgfCAwKSAhPT0gMTtcbiAgdGhpcy5tT25lQSA9IHRoaXMudHdpc3RlZCAmJiAoY29uZi5hIHwgMCkgPT09IC0xO1xuICB0aGlzLmV4dGVuZGVkID0gdGhpcy5tT25lQTtcblxuICBCYXNlLmNhbGwodGhpcywgJ2Vkd2FyZHMnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudW1vZCh0aGlzLnJlZC5tKTtcbiAgdGhpcy5hID0gdGhpcy5hLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5jID0gbmV3IEJOKGNvbmYuYywgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5jMiA9IHRoaXMuYy5yZWRTcXIoKTtcbiAgdGhpcy5kID0gbmV3IEJOKGNvbmYuZCwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5kZCA9IHRoaXMuZC5yZWRBZGQodGhpcy5kKTtcblxuICBhc3NlcnQoIXRoaXMudHdpc3RlZCB8fCB0aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkgPT09IDApO1xuICB0aGlzLm9uZUMgPSAoY29uZi5jIHwgMCkgPT09IDE7XG59XG5pbmhlcml0cyhFZHdhcmRzQ3VydmUsIEJhc2UpO1xubW9kdWxlLmV4cG9ydHMgPSBFZHdhcmRzQ3VydmU7XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuX211bEEgPSBmdW5jdGlvbiBfbXVsQShudW0pIHtcbiAgaWYgKHRoaXMubU9uZUEpXG4gICAgcmV0dXJuIG51bS5yZWROZWcoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmEucmVkTXVsKG51bSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxDID0gZnVuY3Rpb24gX211bEMobnVtKSB7XG4gIGlmICh0aGlzLm9uZUMpXG4gICAgcmV0dXJuIG51bTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmMucmVkTXVsKG51bSk7XG59O1xuXG4vLyBKdXN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggU2hvcnQgY3VydmVcbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuanBvaW50ID0gZnVuY3Rpb24ganBvaW50KHgsIHksIHosIHQpIHtcbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSwgeiwgdCk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVggPSBmdW5jdGlvbiBwb2ludEZyb21YKHgsIG9kZCkge1xuICB4ID0gbmV3IEJOKHgsIDE2KTtcbiAgaWYgKCF4LnJlZClcbiAgICB4ID0geC50b1JlZCh0aGlzLnJlZCk7XG5cbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoeDIpKTtcbiAgdmFyIGxocyA9IHRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bCh4MikpO1xuXG4gIHZhciB5MiA9IHJocy5yZWRNdWwobGhzLnJlZEludm0oKSk7XG4gIHZhciB5ID0geTIucmVkU3FydCgpO1xuICBpZiAoeS5yZWRTcXIoKS5yZWRTdWIoeTIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIHZhciBpc09kZCA9IHkuZnJvbVJlZCgpLmlzT2RkKCk7XG4gIGlmIChvZGQgJiYgIWlzT2RkIHx8ICFvZGQgJiYgaXNPZGQpXG4gICAgeSA9IHkucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVkgPSBmdW5jdGlvbiBwb2ludEZyb21ZKHksIG9kZCkge1xuICB5ID0gbmV3IEJOKHksIDE2KTtcbiAgaWYgKCF5LnJlZClcbiAgICB5ID0geS50b1JlZCh0aGlzLnJlZCk7XG5cbiAgLy8geF4yID0gKHleMiAtIGNeMikgLyAoY14yIGQgeV4yIC0gYSlcbiAgdmFyIHkyID0geS5yZWRTcXIoKTtcbiAgdmFyIGxocyA9IHkyLnJlZFN1Yih0aGlzLmMyKTtcbiAgdmFyIHJocyA9IHkyLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKTtcbiAgdmFyIHgyID0gbGhzLnJlZE11bChyaHMucmVkSW52bSgpKTtcblxuICBpZiAoeDIuY21wKHRoaXMuemVybykgPT09IDApIHtcbiAgICBpZiAob2RkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLCB5KTtcbiAgfVxuXG4gIHZhciB4ID0geDIucmVkU3FydCgpO1xuICBpZiAoeC5yZWRTcXIoKS5yZWRTdWIoeDIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIGlmICh4LmZyb21SZWQoKS5pc09kZCgpICE9PSBvZGQpXG4gICAgeCA9IHgucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUocG9pbnQpIHtcbiAgaWYgKHBvaW50LmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdHJ1ZTtcblxuICAvLyBDdXJ2ZTogQSAqIFheMiArIFleMiA9IENeMiAqICgxICsgRCAqIFheMiAqIFleMilcbiAgcG9pbnQubm9ybWFsaXplKCk7XG5cbiAgdmFyIHgyID0gcG9pbnQueC5yZWRTcXIoKTtcbiAgdmFyIHkyID0gcG9pbnQueS5yZWRTcXIoKTtcbiAgdmFyIGxocyA9IHgyLnJlZE11bCh0aGlzLmEpLnJlZEFkZCh5Mik7XG4gIHZhciByaHMgPSB0aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bCh4MikucmVkTXVsKHkyKSkpO1xuXG4gIHJldHVybiBsaHMuY21wKHJocykgPT09IDA7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeSwgeiwgdCkge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAncHJvamVjdGl2ZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLnplcm87XG4gICAgdGhpcy55ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy50ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICAgIHRoaXMuek9uZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnkgPSBuZXcgQk4oeSwgMTYpO1xuICAgIHRoaXMueiA9IHogPyBuZXcgQk4oeiwgMTYpIDogdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy50ID0gdCAmJiBuZXcgQk4odCwgMTYpO1xuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnkucmVkKVxuICAgICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICh0aGlzLnQgJiYgIXRoaXMudC5yZWQpXG4gICAgICB0aGlzLnQgPSB0aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIHRoaXMuek9uZSA9IHRoaXMueiA9PT0gdGhpcy5jdXJ2ZS5vbmU7XG5cbiAgICAvLyBVc2UgZXh0ZW5kZWQgY29vcmRpbmF0ZXNcbiAgICBpZiAodGhpcy5jdXJ2ZS5leHRlbmRlZCAmJiAhdGhpcy50KSB7XG4gICAgICB0aGlzLnQgPSB0aGlzLngucmVkTXVsKHRoaXMueSk7XG4gICAgICBpZiAoIXRoaXMuek9uZSlcbiAgICAgICAgdGhpcy50ID0gdGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKTtcbiAgICB9XG4gIH1cbn1cbmluaGVyaXRzKFBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmopO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHksIHosIHQpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLCB4LCB5LCB6LCB0KTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaikge1xuICByZXR1cm4gbmV3IFBvaW50KGN1cnZlLCBvYmpbMF0sIG9ialsxXSwgb2JqWzJdKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMueC5jbXBuKDApID09PSAwICYmXG4gICAgKHRoaXMueS5jbXAodGhpcy56KSA9PT0gMCB8fFxuICAgICh0aGlzLnpPbmUgJiYgdGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpID09PSAwKSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2V4dERibCA9IGZ1bmN0aW9uIF9leHREYmwoKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLWV4dGVuZGVkLTEuaHRtbFxuICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA4LWh3Y2RcbiAgLy8gNE0gKyA0U1xuXG4gIC8vIEEgPSBYMV4yXG4gIHZhciBhID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBCID0gWTFeMlxuICB2YXIgYiA9IHRoaXMueS5yZWRTcXIoKTtcbiAgLy8gQyA9IDIgKiBaMV4yXG4gIHZhciBjID0gdGhpcy56LnJlZFNxcigpO1xuICBjID0gYy5yZWRJQWRkKGMpO1xuICAvLyBEID0gYSAqIEFcbiAgdmFyIGQgPSB0aGlzLmN1cnZlLl9tdWxBKGEpO1xuICAvLyBFID0gKFgxICsgWTEpXjIgLSBBIC0gQlxuICB2YXIgZSA9IHRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYik7XG4gIC8vIEcgPSBEICsgQlxuICB2YXIgZyA9IGQucmVkQWRkKGIpO1xuICAvLyBGID0gRyAtIENcbiAgdmFyIGYgPSBnLnJlZFN1YihjKTtcbiAgLy8gSCA9IEQgLSBCXG4gIHZhciBoID0gZC5yZWRTdWIoYik7XG4gIC8vIFgzID0gRSAqIEZcbiAgdmFyIG54ID0gZS5yZWRNdWwoZik7XG4gIC8vIFkzID0gRyAqIEhcbiAgdmFyIG55ID0gZy5yZWRNdWwoaCk7XG4gIC8vIFQzID0gRSAqIEhcbiAgdmFyIG50ID0gZS5yZWRNdWwoaCk7XG4gIC8vIFozID0gRiAqIEdcbiAgdmFyIG56ID0gZi5yZWRNdWwoZyk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnosIG50KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fcHJvakRibCA9IGZ1bmN0aW9uIF9wcm9qRGJsKCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1wcm9qZWN0aXZlLmh0bWxcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOC1iYmpscFxuICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA3LWJsXG4gIC8vIGFuZCBvdGhlcnNcbiAgLy8gR2VuZXJhbGx5IDNNICsgNFMgb3IgMk0gKyA0U1xuXG4gIC8vIEIgPSAoWDEgKyBZMSleMlxuICB2YXIgYiA9IHRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKTtcbiAgLy8gQyA9IFgxXjJcbiAgdmFyIGMgPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIEQgPSBZMV4yXG4gIHZhciBkID0gdGhpcy55LnJlZFNxcigpO1xuXG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIGlmICh0aGlzLmN1cnZlLnR3aXN0ZWQpIHtcbiAgICAvLyBFID0gYSAqIENcbiAgICB2YXIgZSA9IHRoaXMuY3VydmUuX211bEEoYyk7XG4gICAgLy8gRiA9IEUgKyBEXG4gICAgdmFyIGYgPSBlLnJlZEFkZChkKTtcbiAgICBpZiAodGhpcy56T25lKSB7XG4gICAgICAvLyBYMyA9IChCIC0gQyAtIEQpICogKEYgLSAyKVxuICAgICAgbnggPSBiLnJlZFN1YihjKS5yZWRTdWIoZCkucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSk7XG4gICAgICAvLyBZMyA9IEYgKiAoRSAtIEQpXG4gICAgICBueSA9IGYucmVkTXVsKGUucmVkU3ViKGQpKTtcbiAgICAgIC8vIFozID0gRl4yIC0gMiAqIEZcbiAgICAgIG56ID0gZi5yZWRTcXIoKS5yZWRTdWIoZikucmVkU3ViKGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIID0gWjFeMlxuICAgICAgdmFyIGggPSB0aGlzLnoucmVkU3FyKCk7XG4gICAgICAvLyBKID0gRiAtIDIgKiBIXG4gICAgICB2YXIgaiA9IGYucmVkU3ViKGgpLnJlZElTdWIoaCk7XG4gICAgICAvLyBYMyA9IChCLUMtRCkqSlxuICAgICAgbnggPSBiLnJlZFN1YihjKS5yZWRJU3ViKGQpLnJlZE11bChqKTtcbiAgICAgIC8vIFkzID0gRiAqIChFIC0gRClcbiAgICAgIG55ID0gZi5yZWRNdWwoZS5yZWRTdWIoZCkpO1xuICAgICAgLy8gWjMgPSBGICogSlxuICAgICAgbnogPSBmLnJlZE11bChqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRSA9IEMgKyBEXG4gICAgdmFyIGUgPSBjLnJlZEFkZChkKTtcbiAgICAvLyBIID0gKGMgKiBaMSleMlxuICAgIHZhciBoID0gdGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpO1xuICAgIC8vIEogPSBFIC0gMiAqIEhcbiAgICB2YXIgaiA9IGUucmVkU3ViKGgpLnJlZFN1YihoKTtcbiAgICAvLyBYMyA9IGMgKiAoQiAtIEUpICogSlxuICAgIG54ID0gdGhpcy5jdXJ2ZS5fbXVsQyhiLnJlZElTdWIoZSkpLnJlZE11bChqKTtcbiAgICAvLyBZMyA9IGMgKiBFICogKEMgLSBEKVxuICAgIG55ID0gdGhpcy5jdXJ2ZS5fbXVsQyhlKS5yZWRNdWwoYy5yZWRJU3ViKGQpKTtcbiAgICAvLyBaMyA9IEUgKiBKXG4gICAgbnogPSBlLnJlZE11bChqKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBEb3VibGUgaW4gZXh0ZW5kZWQgY29vcmRpbmF0ZXNcbiAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQpXG4gICAgcmV0dXJuIHRoaXMuX2V4dERibCgpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX3Byb2pEYmwoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZXh0QWRkID0gZnVuY3Rpb24gX2V4dEFkZChwKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLWV4dGVuZGVkLTEuaHRtbFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA4LWh3Y2QtM1xuICAvLyA4TVxuXG4gIC8vIEEgPSAoWTEgLSBYMSkgKiAoWTIgLSBYMilcbiAgdmFyIGEgPSB0aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHAueS5yZWRTdWIocC54KSk7XG4gIC8vIEIgPSAoWTEgKyBYMSkgKiAoWTIgKyBYMilcbiAgdmFyIGIgPSB0aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHAueS5yZWRBZGQocC54KSk7XG4gIC8vIEMgPSBUMSAqIGsgKiBUMlxuICB2YXIgYyA9IHRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHAudCk7XG4gIC8vIEQgPSBaMSAqIDIgKiBaMlxuICB2YXIgZCA9IHRoaXMuei5yZWRNdWwocC56LnJlZEFkZChwLnopKTtcbiAgLy8gRSA9IEIgLSBBXG4gIHZhciBlID0gYi5yZWRTdWIoYSk7XG4gIC8vIEYgPSBEIC0gQ1xuICB2YXIgZiA9IGQucmVkU3ViKGMpO1xuICAvLyBHID0gRCArIENcbiAgdmFyIGcgPSBkLnJlZEFkZChjKTtcbiAgLy8gSCA9IEIgKyBBXG4gIHZhciBoID0gYi5yZWRBZGQoYSk7XG4gIC8vIFgzID0gRSAqIEZcbiAgdmFyIG54ID0gZS5yZWRNdWwoZik7XG4gIC8vIFkzID0gRyAqIEhcbiAgdmFyIG55ID0gZy5yZWRNdWwoaCk7XG4gIC8vIFQzID0gRSAqIEhcbiAgdmFyIG50ID0gZS5yZWRNdWwoaCk7XG4gIC8vIFozID0gRiAqIEdcbiAgdmFyIG56ID0gZi5yZWRNdWwoZyk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnosIG50KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fcHJvakFkZCA9IGZ1bmN0aW9uIF9wcm9qQWRkKHApIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtcHJvamVjdGl2ZS5odG1sXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDgtYmJqbHBcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwNy1ibFxuICAvLyAxME0gKyAxU1xuXG4gIC8vIEEgPSBaMSAqIFoyXG4gIHZhciBhID0gdGhpcy56LnJlZE11bChwLnopO1xuICAvLyBCID0gQV4yXG4gIHZhciBiID0gYS5yZWRTcXIoKTtcbiAgLy8gQyA9IFgxICogWDJcbiAgdmFyIGMgPSB0aGlzLngucmVkTXVsKHAueCk7XG4gIC8vIEQgPSBZMSAqIFkyXG4gIHZhciBkID0gdGhpcy55LnJlZE11bChwLnkpO1xuICAvLyBFID0gZCAqIEMgKiBEXG4gIHZhciBlID0gdGhpcy5jdXJ2ZS5kLnJlZE11bChjKS5yZWRNdWwoZCk7XG4gIC8vIEYgPSBCIC0gRVxuICB2YXIgZiA9IGIucmVkU3ViKGUpO1xuICAvLyBHID0gQiArIEVcbiAgdmFyIGcgPSBiLnJlZEFkZChlKTtcbiAgLy8gWDMgPSBBICogRiAqICgoWDEgKyBZMSkgKiAoWDIgKyBZMikgLSBDIC0gRClcbiAgdmFyIHRtcCA9IHRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwocC54LnJlZEFkZChwLnkpKS5yZWRJU3ViKGMpLnJlZElTdWIoZCk7XG4gIHZhciBueCA9IGEucmVkTXVsKGYpLnJlZE11bCh0bXApO1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgaWYgKHRoaXMuY3VydmUudHdpc3RlZCkge1xuICAgIC8vIFkzID0gQSAqIEcgKiAoRCAtIGEgKiBDKVxuICAgIG55ID0gYS5yZWRNdWwoZykucmVkTXVsKGQucmVkU3ViKHRoaXMuY3VydmUuX211bEEoYykpKTtcbiAgICAvLyBaMyA9IEYgKiBHXG4gICAgbnogPSBmLnJlZE11bChnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBZMyA9IEEgKiBHICogKEQgLSBDKVxuICAgIG55ID0gYS5yZWRNdWwoZykucmVkTXVsKGQucmVkU3ViKGMpKTtcbiAgICAvLyBaMyA9IGMgKiBGICogR1xuICAgIG56ID0gdGhpcy5jdXJ2ZS5fbXVsQyhmKS5yZWRNdWwoZyk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKHApIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwO1xuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQpXG4gICAgcmV0dXJuIHRoaXMuX2V4dEFkZChwKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9wcm9qQWRkKHApO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bEFkZCA9IGZ1bmN0aW9uIG11bEFkZChrMSwgcCwgazIpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSwgWyB0aGlzLCBwIF0sIFsgazEsIGsyIF0sIDIsIGZhbHNlKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5qbXVsQWRkID0gZnVuY3Rpb24gam11bEFkZChrMSwgcCwgazIpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSwgWyB0aGlzLCBwIF0sIFsgazEsIGsyIF0sIDIsIHRydWUpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZSgpIHtcbiAgaWYgKHRoaXMuek9uZSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBOb3JtYWxpemUgY29vcmRpbmF0ZXNcbiAgdmFyIHppID0gdGhpcy56LnJlZEludm0oKTtcbiAgdGhpcy54ID0gdGhpcy54LnJlZE11bCh6aSk7XG4gIHRoaXMueSA9IHRoaXMueS5yZWRNdWwoemkpO1xuICBpZiAodGhpcy50KVxuICAgIHRoaXMudCA9IHRoaXMudC5yZWRNdWwoemkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgdGhpcy56T25lID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQgJiYgdGhpcy50LnJlZE5lZygpKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgdGhpcy5ub3JtYWxpemUoKTtcbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uIGdldFkoKSB7XG4gIHRoaXMubm9ybWFsaXplKCk7XG4gIHJldHVybiB0aGlzLnkuZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEob3RoZXIpIHtcbiAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICB0aGlzLmdldFgoKS5jbXAob3RoZXIuZ2V0WCgpKSA9PT0gMCAmJlxuICAgICAgICAgdGhpcy5nZXRZKCkuY21wKG90aGVyLmdldFkoKSkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXFYVG9QID0gZnVuY3Rpb24gZXFYVG9QKHgpIHtcbiAgdmFyIHJ4ID0geC50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7XG4gIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB2YXIgeGMgPSB4LmNsb25lKCk7XG4gIHZhciB0ID0gdGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopO1xuICBmb3IgKDs7KSB7XG4gICAgeGMuaWFkZCh0aGlzLmN1cnZlLm4pO1xuICAgIGlmICh4Yy5jbXAodGhpcy5jdXJ2ZS5wKSA+PSAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcngucmVkSUFkZCh0KTtcbiAgICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuLy8gQ29tcGF0aWJpbGl0eSB3aXRoIEJhc2VDdXJ2ZVxuUG9pbnQucHJvdG90eXBlLnRvUCA9IFBvaW50LnByb3RvdHlwZS5ub3JtYWxpemU7XG5Qb2ludC5wcm90b3R5cGUubWl4ZWRBZGQgPSBQb2ludC5wcm90b3R5cGUuYWRkO1xuXG59LHtcIi4uLy4uL2VsbGlwdGljXCI6MjY3LFwiLi4vY3VydmVcIjoyNzAsXCJibi5qc1wiOjQ0LFwiaW5oZXJpdHNcIjoyOTh9XSwyNzA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSBleHBvcnRzO1xuXG5jdXJ2ZS5iYXNlID0gX2RlcmVxXygnLi9iYXNlJyk7XG5jdXJ2ZS5zaG9ydCA9IF9kZXJlcV8oJy4vc2hvcnQnKTtcbmN1cnZlLm1vbnQgPSBfZGVyZXFfKCcuL21vbnQnKTtcbmN1cnZlLmVkd2FyZHMgPSBfZGVyZXFfKCcuL2Vkd2FyZHMnKTtcblxufSx7XCIuL2Jhc2VcIjoyNjgsXCIuL2Vkd2FyZHNcIjoyNjksXCIuL21vbnRcIjoyNzEsXCIuL3Nob3J0XCI6MjcyfV0sMjcxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gX2RlcmVxXygnLi4vY3VydmUnKTtcbnZhciBCTiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSBfZGVyZXFfKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgZWxsaXB0aWMgPSBfZGVyZXFfKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG5cbmZ1bmN0aW9uIE1vbnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnbW9udCcsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYiA9IG5ldyBCTihjb25mLmIsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuaTQgPSBuZXcgQk4oNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuICAvLyBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGFjY29yZGluZyB0byB0aGUgb3JpZ2luYWwgcGFwZXJcbiAgLy8gYnkgUC4gTW9udGdvbWVyeSwgTk9UIHRoZSBvbmUgYnkgRC4gSi4gQmVybnN0ZWluLlxuICB0aGlzLmEyNCA9IHRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKTtcbn1cbmluaGVyaXRzKE1vbnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IE1vbnRDdXJ2ZTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQubm9ybWFsaXplKCkueDtcbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHgyLnJlZE11bCh4KS5yZWRBZGQoeDIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh4KTtcbiAgdmFyIHkgPSByaHMucmVkU3FydCgpO1xuXG4gIHJldHVybiB5LnJlZFNxcigpLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHopIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUuemVybztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5Nb250Q3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICB2YXIgYnl0ZXMgPSB1dGlscy50b0FycmF5KGJ5dGVzLCBlbmMpO1xuXG4gIC8vIFRPRE8gQ3VydmU0NDhcbiAgLy8gTW9udGdvbWVyeSBjdXJ2ZSBwb2ludHMgbXVzdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgY29tcHJlc3NlZCBmb3JtYXRcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtb3BlbnBncC1yZmM0ODgwYmlzLTAyI2FwcGVuZGl4LUJcbiAgaWYgKGJ5dGVzLmxlbmd0aCA9PT0gMzMgJiYgYnl0ZXNbMF0gPT09IDB4NDApXG4gICAgYnl0ZXMgPSBieXRlcy5zbGljZSgxLCAzMykucmV2ZXJzZSgpOyAvLyBwb2ludCBtdXN0IGJlIGxpdHRsZS1lbmRpYW5cbiAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gMzIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHBvaW50IGNvbXByZXNzaW9uIGZvcm1hdCcpO1xuICByZXR1cm4gdGhpcy5wb2ludChieXRlcywgMSk7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoeCwgeikge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHopO1xufTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21KU09OID0gZnVuY3Rpb24gcG9pbnRGcm9tSlNPTihvYmopIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XG4gIC8vIE5vLW9wXG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIF9lbmNvZGUoY29tcGFjdCkge1xuICB2YXIgbGVuID0gdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKTtcblxuICAvLyBOb3RlOiB0aGUgb3V0cHV0IHNob3VsZCBhbHdheXMgYmUgbGl0dGxlLWVuZGlhblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vcGVucGdwLXJmYzQ4ODBiaXMtMDIjYXBwZW5kaXgtQlxuICBpZiAoY29tcGFjdCkge1xuICAgIHJldHVybiBbIDB4NDAgXS5jb25jYXQodGhpcy5nZXRYKCkudG9BcnJheSgnbGUnLCBsZW4pKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgnYmUnLCBsZW4pO1xuICB9XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0gfHwgY3VydmUub25lKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMuei5jbXBuKDApID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgLy8gaHR0cDovL2h5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1tb250Z29tLXh6Lmh0bWwjZG91YmxpbmctZGJsLTE5ODctbS0zXG4gIC8vIDJNICsgMlMgKyA0QVxuXG4gIC8vIEEgPSBYMSArIFoxXG4gIHZhciBhID0gdGhpcy54LnJlZEFkZCh0aGlzLnopO1xuICAvLyBBQSA9IEFeMlxuICB2YXIgYWEgPSBhLnJlZFNxcigpO1xuICAvLyBCID0gWDEgLSBaMVxuICB2YXIgYiA9IHRoaXMueC5yZWRTdWIodGhpcy56KTtcbiAgLy8gQkIgPSBCXjJcbiAgdmFyIGJiID0gYi5yZWRTcXIoKTtcbiAgLy8gQyA9IEFBIC0gQkJcbiAgdmFyIGMgPSBhYS5yZWRTdWIoYmIpO1xuICAvLyBYMyA9IEFBICogQkJcbiAgdmFyIG54ID0gYWEucmVkTXVsKGJiKTtcbiAgLy8gWjMgPSBDICogKEJCICsgQTI0ICogQylcbiAgdmFyIG56ID0gYy5yZWRNdWwoYmIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChjKSkpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUnKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kaWZmQWRkID0gZnVuY3Rpb24gZGlmZkFkZChwLCBkaWZmKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RpZmZhZGQtZGFkZC0xOTg3LW0tM1xuICAvLyA0TSArIDJTICsgNkFcblxuICAvLyBBID0gWDIgKyBaMlxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQiA9IFgyIC0gWjJcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEMgPSBYMyArIFozXG4gIHZhciBjID0gcC54LnJlZEFkZChwLnopO1xuICAvLyBEID0gWDMgLSBaM1xuICB2YXIgZCA9IHAueC5yZWRTdWIocC56KTtcbiAgLy8gREEgPSBEICogQVxuICB2YXIgZGEgPSBkLnJlZE11bChhKTtcbiAgLy8gQ0IgPSBDICogQlxuICB2YXIgY2IgPSBjLnJlZE11bChiKTtcbiAgLy8gWDUgPSBaMSAqIChEQSArIENCKV4yXG4gIHZhciBueCA9IGRpZmYuei5yZWRNdWwoZGEucmVkQWRkKGNiKS5yZWRTcXIoKSk7XG4gIC8vIFo1ID0gWDEgKiAoREEgLSBDQileMlxuICB2YXIgbnogPSBkaWZmLngucmVkTXVsKGRhLnJlZElTdWIoY2IpLnJlZFNxcigpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBrID0gbmV3IEJOKGssIDE2KTtcblxuICB2YXIgdCA9IGsuY2xvbmUoKTtcbiAgdmFyIGEgPSB0aGlzOyAvLyAoTiAvIDIpICogUSArIFFcbiAgdmFyIGIgPSB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpOyAvLyAoTiAvIDIpICogUVxuICB2YXIgYyA9IHRoaXM7IC8vIFFcblxuICBmb3IgKHZhciBiaXRzID0gW107IHQuY21wbigwKSAhPT0gMDsgdC5pdXNocm4oMSkpXG4gICAgYml0cy5wdXNoKHQuYW5kbG4oMSkpO1xuXG4gIGZvciAodmFyIGkgPSBiaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJpdHNbaV0gPT09IDApIHtcbiAgICAgIC8vIE4gKiBRICsgUSA9ICgoTiAvIDIpICogUSArIFEpKSArIChOIC8gMikgKiBRXG4gICAgICBhID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgPSAyICogKChOIC8gMikgKiBRICsgUSkpXG4gICAgICBiID0gYi5kYmwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTiAqIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSArICgoTiAvIDIpICogUSlcbiAgICAgIGIgPSBhLmRpZmZBZGQoYiwgYyk7XG4gICAgICAvLyBOICogUSArIFEgPSAyICogKChOIC8gMikgKiBRICsgUSlcbiAgICAgIGEgPSBhLmRibCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuanVtbEFkZCA9IGZ1bmN0aW9uIGp1bWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxufSx7XCIuLi8uLi9lbGxpcHRpY1wiOjI2NyxcIi4uL2N1cnZlXCI6MjcwLFwiYm4uanNcIjo0NCxcImluaGVyaXRzXCI6Mjk4fV0sMjcyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gX2RlcmVxXygnLi4vY3VydmUnKTtcbnZhciBlbGxpcHRpYyA9IF9kZXJlcV8oJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgQk4gPSBfZGVyZXFfKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gX2RlcmVxXygnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gU2hvcnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnc2hvcnQnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmIgPSBuZXcgQk4oY29uZi5iLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLnRpbnYgPSB0aGlzLnR3by5yZWRJbnZtKCk7XG5cbiAgdGhpcy56ZXJvQSA9IHRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSA9PT0gMDtcbiAgdGhpcy50aHJlZUEgPSB0aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpID09PSAwO1xuXG4gIC8vIElmIHRoZSBjdXJ2ZSBpcyBlbmRvbW9ycGhpYywgcHJlY2FsY3VsYXRlIGJldGEgYW5kIGxhbWJkYVxuICB0aGlzLmVuZG8gPSB0aGlzLl9nZXRFbmRvbW9ycGhpc20oY29uZik7XG4gIHRoaXMuX2VuZG9XbmFmVDEgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX2VuZG9XbmFmVDIgPSBuZXcgQXJyYXkoNCk7XG59XG5pbmhlcml0cyhTaG9ydEN1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gU2hvcnRDdXJ2ZTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbSA9IGZ1bmN0aW9uIF9nZXRFbmRvbW9ycGhpc20oY29uZikge1xuICAvLyBObyBlZmZpY2llbnQgZW5kb21vcnBoaXNtXG4gIGlmICghdGhpcy56ZXJvQSB8fCAhdGhpcy5nIHx8ICF0aGlzLm4gfHwgdGhpcy5wLm1vZG4oMykgIT09IDEpXG4gICAgcmV0dXJuO1xuXG4gIC8vIENvbXB1dGUgYmV0YSBhbmQgbGFtYmRhLCB0aGF0IGxhbWJkYSAqIFAgPSAoYmV0YSAqIFB4OyBQeSlcbiAgdmFyIGJldGE7XG4gIHZhciBsYW1iZGE7XG4gIGlmIChjb25mLmJldGEpIHtcbiAgICBiZXRhID0gbmV3IEJOKGNvbmYuYmV0YSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmV0YXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtcbiAgICAvLyBDaG9vc2UgdGhlIHNtYWxsZXN0IGJldGFcbiAgICBiZXRhID0gYmV0YXNbMF0uY21wKGJldGFzWzFdKSA8IDAgPyBiZXRhc1swXSA6IGJldGFzWzFdO1xuICAgIGJldGEgPSBiZXRhLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxuICBpZiAoY29uZi5sYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgQk4oY29uZi5sYW1iZGEsIDE2KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDaG9vc2UgdGhlIGxhbWJkYSB0aGF0IGlzIG1hdGNoaW5nIHNlbGVjdGVkIGJldGFcbiAgICB2YXIgbGFtYmRhcyA9IHRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pO1xuICAgIGlmICh0aGlzLmcubXVsKGxhbWJkYXNbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChiZXRhKSkgPT09IDApIHtcbiAgICAgIGxhbWJkYSA9IGxhbWJkYXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhbWJkYSA9IGxhbWJkYXNbMV07XG4gICAgICBhc3NlcnQodGhpcy5nLm11bChsYW1iZGEpLnguY21wKHRoaXMuZy54LnJlZE11bChiZXRhKSkgPT09IDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBiYXNpcyB2ZWN0b3JzLCB1c2VkIGZvciBiYWxhbmNlZCBsZW5ndGgtdHdvIHJlcHJlc2VudGF0aW9uXG4gIHZhciBiYXNpcztcbiAgaWYgKGNvbmYuYmFzaXMpIHtcbiAgICBiYXNpcyA9IGNvbmYuYmFzaXMubWFwKGZ1bmN0aW9uKHZlYykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYTogbmV3IEJOKHZlYy5hLCAxNiksXG4gICAgICAgIGI6IG5ldyBCTih2ZWMuYiwgMTYpXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJhc2lzID0gdGhpcy5fZ2V0RW5kb0Jhc2lzKGxhbWJkYSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJldGE6IGJldGEsXG4gICAgbGFtYmRhOiBsYW1iZGEsXG4gICAgYmFzaXM6IGJhc2lzXG4gIH07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzID0gZnVuY3Rpb24gX2dldEVuZG9Sb290cyhudW0pIHtcbiAgLy8gRmluZCByb290cyBvZiBmb3IgeF4yICsgeCArIDEgaW4gRlxuICAvLyBSb290ID0gKC0xICstIFNxcnQoLTMpKSAvIDJcbiAgLy9cbiAgdmFyIHJlZCA9IG51bSA9PT0gdGhpcy5wID8gdGhpcy5yZWQgOiBCTi5tb250KG51bSk7XG4gIHZhciB0aW52ID0gbmV3IEJOKDIpLnRvUmVkKHJlZCkucmVkSW52bSgpO1xuICB2YXIgbnRpbnYgPSB0aW52LnJlZE5lZygpO1xuXG4gIHZhciBzID0gbmV3IEJOKDMpLnRvUmVkKHJlZCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bCh0aW52KTtcblxuICB2YXIgbDEgPSBudGludi5yZWRBZGQocykuZnJvbVJlZCgpO1xuICB2YXIgbDIgPSBudGludi5yZWRTdWIocykuZnJvbVJlZCgpO1xuICByZXR1cm4gWyBsMSwgbDIgXTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvQmFzaXMgPSBmdW5jdGlvbiBfZ2V0RW5kb0Jhc2lzKGxhbWJkYSkge1xuICAvLyBhcHJ4U3FydCA+PSBzcXJ0KHRoaXMubilcbiAgdmFyIGFwcnhTcXJ0ID0gdGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpIC8gMikpO1xuXG4gIC8vIDMuNzRcbiAgLy8gUnVuIEVHQ0QsIHVudGlsIHIoTCArIDEpIDwgYXByeFNxcnRcbiAgdmFyIHUgPSBsYW1iZGE7XG4gIHZhciB2ID0gdGhpcy5uLmNsb25lKCk7XG4gIHZhciB4MSA9IG5ldyBCTigxKTtcbiAgdmFyIHkxID0gbmV3IEJOKDApO1xuICB2YXIgeDIgPSBuZXcgQk4oMCk7XG4gIHZhciB5MiA9IG5ldyBCTigxKTtcblxuICAvLyBOT1RFOiBhbGwgdmVjdG9ycyBhcmUgcm9vdHMgb2Y6IGEgKyBiICogbGFtYmRhID0gMCAobW9kIG4pXG4gIHZhciBhMDtcbiAgdmFyIGIwO1xuICAvLyBGaXJzdCB2ZWN0b3JcbiAgdmFyIGExO1xuICB2YXIgYjE7XG4gIC8vIFNlY29uZCB2ZWN0b3JcbiAgdmFyIGEyO1xuICB2YXIgYjI7XG5cbiAgdmFyIHByZXZSO1xuICB2YXIgaSA9IDA7XG4gIHZhciByO1xuICB2YXIgeDtcbiAgd2hpbGUgKHUuY21wbigwKSAhPT0gMCkge1xuICAgIHZhciBxID0gdi5kaXYodSk7XG4gICAgciA9IHYuc3ViKHEubXVsKHUpKTtcbiAgICB4ID0geDIuc3ViKHEubXVsKHgxKSk7XG4gICAgdmFyIHkgPSB5Mi5zdWIocS5tdWwoeTEpKTtcblxuICAgIGlmICghYTEgJiYgci5jbXAoYXByeFNxcnQpIDwgMCkge1xuICAgICAgYTAgPSBwcmV2Ui5uZWcoKTtcbiAgICAgIGIwID0geDE7XG4gICAgICBhMSA9IHIubmVnKCk7XG4gICAgICBiMSA9IHg7XG4gICAgfSBlbHNlIGlmIChhMSAmJiArK2kgPT09IDIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwcmV2UiA9IHI7XG5cbiAgICB2ID0gdTtcbiAgICB1ID0gcjtcbiAgICB4MiA9IHgxO1xuICAgIHgxID0geDtcbiAgICB5MiA9IHkxO1xuICAgIHkxID0geTtcbiAgfVxuICBhMiA9IHIubmVnKCk7XG4gIGIyID0geDtcblxuICB2YXIgbGVuMSA9IGExLnNxcigpLmFkZChiMS5zcXIoKSk7XG4gIHZhciBsZW4yID0gYTIuc3FyKCkuYWRkKGIyLnNxcigpKTtcbiAgaWYgKGxlbjIuY21wKGxlbjEpID49IDApIHtcbiAgICBhMiA9IGEwO1xuICAgIGIyID0gYjA7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgc2lnbnNcbiAgaWYgKGExLm5lZ2F0aXZlKSB7XG4gICAgYTEgPSBhMS5uZWcoKTtcbiAgICBiMSA9IGIxLm5lZygpO1xuICB9XG4gIGlmIChhMi5uZWdhdGl2ZSkge1xuICAgIGEyID0gYTIubmVnKCk7XG4gICAgYjIgPSBiMi5uZWcoKTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgeyBhOiBhMSwgYjogYjEgfSxcbiAgICB7IGE6IGEyLCBiOiBiMiB9XG4gIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1NwbGl0ID0gZnVuY3Rpb24gX2VuZG9TcGxpdChrKSB7XG4gIHZhciBiYXNpcyA9IHRoaXMuZW5kby5iYXNpcztcbiAgdmFyIHYxID0gYmFzaXNbMF07XG4gIHZhciB2MiA9IGJhc2lzWzFdO1xuXG4gIHZhciBjMSA9IHYyLmIubXVsKGspLmRpdlJvdW5kKHRoaXMubik7XG4gIHZhciBjMiA9IHYxLmIubmVnKCkubXVsKGspLmRpdlJvdW5kKHRoaXMubik7XG5cbiAgdmFyIHAxID0gYzEubXVsKHYxLmEpO1xuICB2YXIgcDIgPSBjMi5tdWwodjIuYSk7XG4gIHZhciBxMSA9IGMxLm11bCh2MS5iKTtcbiAgdmFyIHEyID0gYzIubXVsKHYyLmIpO1xuXG4gIC8vIENhbGN1bGF0ZSBhbnN3ZXJcbiAgdmFyIGsxID0gay5zdWIocDEpLnN1YihwMik7XG4gIHZhciBrMiA9IHExLmFkZChxMikubmVnKCk7XG4gIHJldHVybiB7IGsxOiBrMSwgazI6IGsyIH07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB5MiA9IHgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoeC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICAvLyBYWFggSXMgdGhlcmUgYW55IHdheSB0byB0ZWxsIGlmIHRoZSBudW1iZXIgaXMgb2RkIHdpdGhvdXQgY29udmVydGluZyBpdFxuICAvLyB0byBub24tcmVkIGZvcm0/XG4gIHZhciBpc09kZCA9IHkuZnJvbVJlZCgpLmlzT2RkKCk7XG4gIGlmIChvZGQgJiYgIWlzT2RkIHx8ICFvZGQgJiYgaXNPZGQpXG4gICAgeSA9IHkucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pbmYpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHggPSBwb2ludC54O1xuICB2YXIgeSA9IHBvaW50Lnk7XG5cbiAgdmFyIGF4ID0gdGhpcy5hLnJlZE11bCh4KTtcbiAgdmFyIHJocyA9IHgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoYXgpLnJlZElBZGQodGhpcy5iKTtcbiAgcmV0dXJuIHkucmVkU3FyKCkucmVkSVN1YihyaHMpLmNtcG4oMCkgPT09IDA7XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQgPVxuICAgIGZ1bmN0aW9uIF9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgamFjb2JpYW5SZXN1bHQpIHtcbiAgdmFyIG5wb2ludHMgPSB0aGlzLl9lbmRvV25hZlQxO1xuICB2YXIgbmNvZWZmcyA9IHRoaXMuX2VuZG9XbmFmVDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNwbGl0ID0gdGhpcy5fZW5kb1NwbGl0KGNvZWZmc1tpXSk7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgdmFyIGJldGEgPSBwLl9nZXRCZXRhKCk7XG5cbiAgICBpZiAoc3BsaXQuazEubmVnYXRpdmUpIHtcbiAgICAgIHNwbGl0LmsxLmluZWcoKTtcbiAgICAgIHAgPSBwLm5lZyh0cnVlKTtcbiAgICB9XG4gICAgaWYgKHNwbGl0LmsyLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMi5pbmVnKCk7XG4gICAgICBiZXRhID0gYmV0YS5uZWcodHJ1ZSk7XG4gICAgfVxuXG4gICAgbnBvaW50c1tpICogMl0gPSBwO1xuICAgIG5wb2ludHNbaSAqIDIgKyAxXSA9IGJldGE7XG4gICAgbmNvZWZmc1tpICogMl0gPSBzcGxpdC5rMTtcbiAgICBuY29lZmZzW2kgKiAyICsgMV0gPSBzcGxpdC5rMjtcbiAgfVxuICB2YXIgcmVzID0gdGhpcy5fd25hZk11bEFkZCgxLCBucG9pbnRzLCBuY29lZmZzLCBpICogMiwgamFjb2JpYW5SZXN1bHQpO1xuXG4gIC8vIENsZWFuLXVwIHJlZmVyZW5jZXMgdG8gcG9pbnRzIGFuZCBjb2VmZmljaWVudHNcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBpICogMjsgaisrKSB7XG4gICAgbnBvaW50c1tqXSA9IG51bGw7XG4gICAgbmNvZWZmc1tqXSA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB5LCBpc1JlZCkge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnYWZmaW5lJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSBudWxsO1xuICAgIHRoaXMueSA9IG51bGw7XG4gICAgdGhpcy5pbmYgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICAvLyBGb3JjZSByZWRnb21lcnkgcmVwcmVzZW50YXRpb24gd2hlbiBsb2FkaW5nIGZyb20gSlNPTlxuICAgIGlmIChpc1JlZCkge1xuICAgICAgdGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICAgIHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgfVxuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnkucmVkKVxuICAgICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLmluZiA9IGZhbHNlO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHksIGlzUmVkKSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgaXNSZWQpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqLCByZWQpIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaiwgcmVkKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZ2V0QmV0YSA9IGZ1bmN0aW9uIF9nZXRCZXRhKCkge1xuICBpZiAoIXRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm47XG5cbiAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gIGlmIChwcmUgJiYgcHJlLmJldGEpXG4gICAgcmV0dXJuIHByZS5iZXRhO1xuXG4gIHZhciBiZXRhID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSwgdGhpcy55KTtcbiAgaWYgKHByZSkge1xuICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmU7XG4gICAgdmFyIGVuZG9NdWwgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gY3VydmUucG9pbnQocC54LnJlZE11bChjdXJ2ZS5lbmRvLmJldGEpLCBwLnkpO1xuICAgIH07XG4gICAgcHJlLmJldGEgPSBiZXRhO1xuICAgIGJldGEucHJlY29tcHV0ZWQgPSB7XG4gICAgICBiZXRhOiBudWxsLFxuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChlbmRvTXVsKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJldGE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnkgXTtcblxuICByZXR1cm4gWyB0aGlzLngsIHRoaXMueSwgdGhpcy5wcmVjb21wdXRlZCAmJiB7XG4gICAgZG91YmxlczogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpXG4gICAgfSxcbiAgICBuYWY6IHRoaXMucHJlY29tcHV0ZWQubmFmICYmIHtcbiAgICAgIHduZDogdGhpcy5wcmVjb21wdXRlZC5uYWYud25kLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSlcbiAgICB9XG4gIH0gXTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaiwgcmVkKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJylcbiAgICBvYmogPSBKU09OLnBhcnNlKG9iaik7XG4gIHZhciByZXMgPSBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgaWYgKCFvYmpbMl0pXG4gICAgcmV0dXJuIHJlcztcblxuICBmdW5jdGlvbiBvYmoycG9pbnQob2JqKSB7XG4gICAgcmV0dXJuIGN1cnZlLnBvaW50KG9ialswXSwgb2JqWzFdLCByZWQpO1xuICB9XG5cbiAgdmFyIHByZSA9IG9ialsyXTtcbiAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgIGJldGE6IG51bGwsXG4gICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogWyByZXMgXS5jb25jYXQocHJlLmRvdWJsZXMucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH0sXG4gICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5uYWYucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgcmV0dXJuIHRoaXMuaW5mO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBQICsgUCA9IDJQXG4gIGlmICh0aGlzLmVxKHApKVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIC8vIFAgKyAoLVApID0gT1xuICBpZiAodGhpcy5uZWcoKS5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICAvLyBQICsgUSA9IE9cbiAgaWYgKHRoaXMueC5jbXAocC54KSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYyA9IHRoaXMueS5yZWRTdWIocC55KTtcbiAgaWYgKGMuY21wbigwKSAhPT0gMClcbiAgICBjID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihwLngpLnJlZEludm0oKSk7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIocC54KTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAyUCA9IE9cbiAgdmFyIHlzMSA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgaWYgKHlzMS5jbXBuKDApID09PSAwKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpO1xuXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuXG4gIHZhciB4MiA9IHRoaXMueC5yZWRTcXIoKTtcbiAgdmFyIGR5aW52ID0geXMxLnJlZEludm0oKTtcbiAgdmFyIGMgPSB4Mi5yZWRBZGQoeDIpLnJlZElBZGQoeDIpLnJlZElBZGQoYSkucmVkTXVsKGR5aW52KTtcblxuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uIGdldFkoKSB7XG4gIHJldHVybiB0aGlzLnkuZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIGsgPSBuZXcgQk4oaywgMTYpO1xuXG4gIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbIHRoaXMgXSwgWyBrIF0pO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwMiwgazIpIHtcbiAgdmFyIHBvaW50cyA9IFsgdGhpcywgcDIgXTtcbiAgdmFyIGNvZWZmcyA9IFsgazEsIGsyIF07XG4gIGlmICh0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHBvaW50cywgY29lZmZzKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIHBvaW50cywgY29lZmZzLCAyKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5qbXVsQWRkID0gZnVuY3Rpb24gam11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgdHJ1ZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMiwgdHJ1ZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIHJldHVybiB0aGlzID09PSBwIHx8XG4gICAgICAgICB0aGlzLmluZiA9PT0gcC5pbmYgJiZcbiAgICAgICAgICAgICAodGhpcy5pbmYgfHwgdGhpcy54LmNtcChwLngpID09PSAwICYmIHRoaXMueS5jbXAocC55KSA9PT0gMCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKF9wcmVjb21wdXRlKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsIHRoaXMueS5yZWROZWcoKSk7XG4gIGlmIChfcHJlY29tcHV0ZSAmJiB0aGlzLnByZWNvbXB1dGVkKSB7XG4gICAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gICAgdmFyIG5lZ2F0ZSA9IGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBwLm5lZygpO1xuICAgIH07XG4gICAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAobmVnYXRlKVxuICAgICAgfSxcbiAgICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgICAgcG9pbnRzOiBwcmUuZG91Ymxlcy5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KID0gZnVuY3Rpb24gdG9KKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuXG4gIHZhciByZXMgPSB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsIHRoaXMueSwgdGhpcy5jdXJ2ZS5vbmUpO1xuICByZXR1cm4gcmVzO1xufTtcblxuZnVuY3Rpb24gSlBvaW50KGN1cnZlLCB4LCB5LCB6KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdqYWNvYmlhbicpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnkgPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSBuZXcgQk4oMCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnkgPSBuZXcgQk4oeSwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gIH1cbiAgaWYgKCF0aGlzLngucmVkKVxuICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gIGlmICghdGhpcy55LnJlZClcbiAgICB0aGlzLnkgPSB0aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMuei5yZWQpXG4gICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcblxuICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xufVxuaW5oZXJpdHMoSlBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6KSB7XG4gIHJldHVybiBuZXcgSlBvaW50KHRoaXMsIHgsIHksIHopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50b1AgPSBmdW5jdGlvbiB0b1AoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgemludiA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHZhciB6aW52MiA9IHppbnYucmVkU3FyKCk7XG4gIHZhciBheCA9IHRoaXMueC5yZWRNdWwoemludjIpO1xuICB2YXIgYXkgPSB0aGlzLnkucmVkTXVsKHppbnYyKS5yZWRNdWwoemludik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQoYXgsIGF5KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCksIHRoaXMueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAxMk0gKyA0UyArIDdBXG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54LnJlZE11bChwejIpO1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55LnJlZE11bChwejIucmVkTXVsKHAueikpO1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyLnJlZE11bCh0aGlzLnopKTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChwLnopLnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gZnVuY3Rpb24gbWl4ZWRBZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwLnRvSigpO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gOE0gKyAzUyArIDdBXG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54O1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55O1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyKS5yZWRNdWwodGhpcy56KTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKHBvdykge1xuICBpZiAocG93ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG4gIGlmICghcG93KVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BIHx8IHRoaXMuY3VydmUudGhyZWVBKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG93OyBpKyspXG4gICAgICByID0gci5kYmwoKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8vIDFNICsgMlMgKyAxQSArIE4gKiAoNFMgKyA1TSArIDhBKVxuICAvLyBOID0gMSA9PiA2TSArIDZTICsgOUFcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG4gIHZhciB0aW52ID0gdGhpcy5jdXJ2ZS50aW52O1xuXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICAvLyBSZXVzZSByZXN1bHRzXG4gIHZhciBqeWQgPSBqeS5yZWRBZGQoankpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKSB7XG4gICAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICAgIHZhciBqeWQyID0ganlkLnJlZFNxcigpO1xuICAgIHZhciBqeWQ0ID0ganlkMi5yZWRTcXIoKTtcbiAgICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICAgIHZhciB0MSA9IGp4LnJlZE11bChqeWQyKTtcbiAgICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gICAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG4gICAgdmFyIGRueSA9IGMucmVkTXVsKHQyKTtcbiAgICBkbnkgPSBkbnkucmVkSUFkZChkbnkpLnJlZElTdWIoanlkNCk7XG4gICAgdmFyIG56ID0ganlkLnJlZE11bChqeik7XG4gICAgaWYgKGkgKyAxIDwgcG93KVxuICAgICAgano0ID0gano0LnJlZE11bChqeWQ0KTtcblxuICAgIGp4ID0gbng7XG4gICAganogPSBuejtcbiAgICBqeWQgPSBkbnk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoangsIGp5ZC5yZWRNdWwodGludiksIGp6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKHRoaXMuY3VydmUuemVyb0EpXG4gICAgcmV0dXJuIHRoaXMuX3plcm9EYmwoKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS50aHJlZUEpXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlRGJsKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fZGJsKCk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl96ZXJvRGJsID0gZnVuY3Rpb24gX3plcm9EYmwoKSB7XG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIC8vIFogPSAxXG4gIGlmICh0aGlzLnpPbmUpIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctbWRibC0yMDA3LWJsXG4gICAgLy8gMU0gKyA1UyArIDE0QVxuXG4gICAgLy8gWFggPSBYMV4yXG4gICAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAgIC8vIFlZID0gWTFeMlxuICAgIHZhciB5eSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBZWVlZID0gWVleMlxuICAgIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gICAgLy8gUyA9IDIgKiAoKFgxICsgWVkpXjIgLSBYWCAtIFlZWVkpXG4gICAgdmFyIHMgPSB0aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpO1xuICAgIHMgPSBzLnJlZElBZGQocyk7XG4gICAgLy8gTSA9IDMgKiBYWCArIGE7IGEgPSAwXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAgIC8vIFQgPSBNIF4gMiAtIDIqU1xuICAgIHZhciB0ID0gbS5yZWRTcXIoKS5yZWRJU3ViKHMpLnJlZElTdWIocyk7XG5cbiAgICAvLyA4ICogWVlZWVxuICAgIHZhciB5eXl5OCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG5cbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgbnkgPSBtLnJlZE11bChzLnJlZElTdWIodCkpLnJlZElTdWIoeXl5eTgpO1xuICAgIC8vIFozID0gMipZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMC5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOS1sXG4gICAgLy8gMk0gKyA1UyArIDEzQVxuXG4gICAgLy8gQSA9IFgxXjJcbiAgICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBCID0gWTFeMlxuICAgIHZhciBiID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIEMgPSBCXjJcbiAgICB2YXIgYyA9IGIucmVkU3FyKCk7XG4gICAgLy8gRCA9IDIgKiAoKFgxICsgQileMiAtIEEgLSBDKVxuICAgIHZhciBkID0gdGhpcy54LnJlZEFkZChiKS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYyk7XG4gICAgZCA9IGQucmVkSUFkZChkKTtcbiAgICAvLyBFID0gMyAqIEFcbiAgICB2YXIgZSA9IGEucmVkQWRkKGEpLnJlZElBZGQoYSk7XG4gICAgLy8gRiA9IEVeMlxuICAgIHZhciBmID0gZS5yZWRTcXIoKTtcblxuICAgIC8vIDggKiBDXG4gICAgdmFyIGM4ID0gYy5yZWRJQWRkKGMpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG4gICAgYzggPSBjOC5yZWRJQWRkKGM4KTtcblxuICAgIC8vIFgzID0gRiAtIDIgKiBEXG4gICAgbnggPSBmLnJlZElTdWIoZCkucmVkSVN1YihkKTtcbiAgICAvLyBZMyA9IEUgKiAoRCAtIFgzKSAtIDggKiBDXG4gICAgbnkgPSBlLnJlZE11bChkLnJlZElTdWIobngpKS5yZWRJU3ViKGM4KTtcbiAgICAvLyBaMyA9IDIgKiBZMSAqIFoxXG4gICAgbnogPSB0aGlzLnkucmVkTXVsKHRoaXMueik7XG4gICAgbnogPSBuei5yZWRJQWRkKG56KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuX3RocmVlRGJsID0gZnVuY3Rpb24gX3RocmVlRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0zLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNUFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKTtcbiAgICAvLyBUID0gTV4yIC0gMiAqIFNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuICAgIC8vIFgzID0gVFxuICAgIG54ID0gdDtcbiAgICAvLyBZMyA9IE0gKiAoUyAtIFQpIC0gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIgKiBZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sI2RvdWJsaW5nLWRibC0yMDAxLWJcbiAgICAvLyAzTSArIDVTXG5cbiAgICAvLyBkZWx0YSA9IFoxXjJcbiAgICB2YXIgZGVsdGEgPSB0aGlzLnoucmVkU3FyKCk7XG4gICAgLy8gZ2FtbWEgPSBZMV4yXG4gICAgdmFyIGdhbW1hID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIGJldGEgPSBYMSAqIGdhbW1hXG4gICAgdmFyIGJldGEgPSB0aGlzLngucmVkTXVsKGdhbW1hKTtcbiAgICAvLyBhbHBoYSA9IDMgKiAoWDEgLSBkZWx0YSkgKiAoWDEgKyBkZWx0YSlcbiAgICB2YXIgYWxwaGEgPSB0aGlzLngucmVkU3ViKGRlbHRhKS5yZWRNdWwodGhpcy54LnJlZEFkZChkZWx0YSkpO1xuICAgIGFscGhhID0gYWxwaGEucmVkQWRkKGFscGhhKS5yZWRJQWRkKGFscGhhKTtcbiAgICAvLyBYMyA9IGFscGhhXjIgLSA4ICogYmV0YVxuICAgIHZhciBiZXRhNCA9IGJldGEucmVkSUFkZChiZXRhKTtcbiAgICBiZXRhNCA9IGJldGE0LnJlZElBZGQoYmV0YTQpO1xuICAgIHZhciBiZXRhOCA9IGJldGE0LnJlZEFkZChiZXRhNCk7XG4gICAgbnggPSBhbHBoYS5yZWRTcXIoKS5yZWRJU3ViKGJldGE4KTtcbiAgICAvLyBaMyA9IChZMSArIFoxKV4yIC0gZ2FtbWEgLSBkZWx0YVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoZ2FtbWEpLnJlZElTdWIoZGVsdGEpO1xuICAgIC8vIFkzID0gYWxwaGEgKiAoNCAqIGJldGEgLSBYMykgLSA4ICogZ2FtbWFeMlxuICAgIHZhciBnZ2FtbWE4ID0gZ2FtbWEucmVkU3FyKCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgbnkgPSBhbHBoYS5yZWRNdWwoYmV0YTQucmVkSVN1YihueCkpLnJlZElTdWIoZ2dhbW1hOCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl9kYmwgPSBmdW5jdGlvbiBfZGJsKCkge1xuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICAvLyA0TSArIDZTICsgMTBBXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICB2YXIgangyID0gangucmVkU3FyKCk7XG4gIHZhciBqeTIgPSBqeS5yZWRTcXIoKTtcblxuICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICB2YXIganhkNCA9IGp4LnJlZEFkZChqeCk7XG4gIGp4ZDQgPSBqeGQ0LnJlZElBZGQoanhkNCk7XG4gIHZhciB0MSA9IGp4ZDQucmVkTXVsKGp5Mik7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0MS5yZWRBZGQodDEpKTtcbiAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG5cbiAgdmFyIGp5ZDggPSBqeTIucmVkU3FyKCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHQyKS5yZWRJU3ViKGp5ZDgpO1xuICB2YXIgbnogPSBqeS5yZWRBZGQoankpLnJlZE11bChqeik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50cnBsID0gZnVuY3Rpb24gdHJwbCgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTtcblxuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbCN0cmlwbGluZy10cGwtMjAwNy1ibFxuICAvLyA1TSArIDEwUyArIC4uLlxuXG4gIC8vIFhYID0gWDFeMlxuICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIFlZID0gWTFeMlxuICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIFpaID0gWjFeMlxuICB2YXIgenogPSB0aGlzLnoucmVkU3FyKCk7XG4gIC8vIFlZWVkgPSBZWV4yXG4gIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gIC8vIE0gPSAzICogWFggKyBhICogWloyOyBhID0gMFxuICB2YXIgbSA9IHh4LnJlZEFkZCh4eCkucmVkSUFkZCh4eCk7XG4gIC8vIE1NID0gTV4yXG4gIHZhciBtbSA9IG0ucmVkU3FyKCk7XG4gIC8vIEUgPSA2ICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKSAtIE1NXG4gIHZhciBlID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgZSA9IGUucmVkSUFkZChlKTtcbiAgZSA9IGUucmVkQWRkKGUpLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZElTdWIobW0pO1xuICAvLyBFRSA9IEVeMlxuICB2YXIgZWUgPSBlLnJlZFNxcigpO1xuICAvLyBUID0gMTYqWVlZWVxuICB2YXIgdCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgLy8gVSA9IChNICsgRSleMiAtIE1NIC0gRUUgLSBUXG4gIHZhciB1ID0gbS5yZWRJQWRkKGUpLnJlZFNxcigpLnJlZElTdWIobW0pLnJlZElTdWIoZWUpLnJlZElTdWIodCk7XG4gIC8vIFgzID0gNCAqIChYMSAqIEVFIC0gNCAqIFlZICogVSlcbiAgdmFyIHl5dTQgPSB5eS5yZWRNdWwodSk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHZhciBueCA9IHRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoeXl1NCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIC8vIFkzID0gOCAqIFkxICogKFUgKiAoVCAtIFUpIC0gRSAqIEVFKVxuICB2YXIgbnkgPSB0aGlzLnkucmVkTXVsKHUucmVkTXVsKHQucmVkSVN1Yih1KSkucmVkSVN1YihlLnJlZE11bChlZSkpKTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgLy8gWjMgPSAoWjEgKyBFKV4yIC0gWlogLSBFRVxuICB2YXIgbnogPSB0aGlzLnoucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIoenopLnJlZElTdWIoZWUpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGssIGtiYXNlKSB7XG4gIGsgPSBuZXcgQk4oaywga2Jhc2UpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKHApIHtcbiAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgcmV0dXJuIHRoaXMuZXEocC50b0ooKSk7XG5cbiAgaWYgKHRoaXMgPT09IHApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8geDEgKiB6Ml4yID09IHgyICogejFeMlxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIGlmICh0aGlzLngucmVkTXVsKHB6MikucmVkSVN1YihwLngucmVkTXVsKHoyKSkuY21wbigwKSAhPT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8geTEgKiB6Ml4zID09IHkyICogejFeM1xuICB2YXIgejMgPSB6Mi5yZWRNdWwodGhpcy56KTtcbiAgdmFyIHB6MyA9IHB6Mi5yZWRNdWwocC56KTtcbiAgcmV0dXJuIHRoaXMueS5yZWRNdWwocHozKS5yZWRJU3ViKHAueS5yZWRNdWwoejMpKS5jbXBuKDApID09PSAwO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcVhUb1AgPSBmdW5jdGlvbiBlcVhUb1AoeCkge1xuICB2YXIgenMgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh6cyk7XG4gIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB2YXIgeGMgPSB4LmNsb25lKCk7XG4gIHZhciB0ID0gdGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh6cyk7XG4gIGZvciAoOzspIHtcbiAgICB4Yy5pYWRkKHRoaXMuY3VydmUubik7XG4gICAgaWYgKHhjLmNtcCh0aGlzLmN1cnZlLnApID49IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByeC5yZWRJQWRkKHQpO1xuICAgIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgSlBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIEpQb2ludCB4OiAnICsgdGhpcy54LnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy56LmNtcG4oMCkgPT09IDA7XG59O1xuXG59LHtcIi4uLy4uL2VsbGlwdGljXCI6MjY3LFwiLi4vY3VydmVcIjoyNzAsXCJibi5qc1wiOjQ0LFwiaW5oZXJpdHNcIjoyOTh9XSwyNzM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmVzID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSBfZGVyZXFfKCdoYXNoLmpzJyk7XG52YXIgZWxsaXB0aWMgPSBfZGVyZXFfKCcuLi9lbGxpcHRpYycpO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBQcmVzZXRDdXJ2ZShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdzaG9ydCcpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5zaG9ydChvcHRpb25zKTtcbiAgZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnZWR3YXJkcycpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5lZHdhcmRzKG9wdGlvbnMpO1xuICBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdtb250JylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLm1vbnQob3B0aW9ucyk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGN1cnZlIHR5cGUuJyk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG5cbiAgYXNzZXJ0KHRoaXMuZy52YWxpZGF0ZSgpLCAnSW52YWxpZCBjdXJ2ZScpO1xuICBhc3NlcnQodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwgJ0ludmFsaWQgY3VydmUsIG4qRyAhPSBPJyk7XG59XG5jdXJ2ZXMuUHJlc2V0Q3VydmUgPSBQcmVzZXRDdXJ2ZTtcblxuZnVuY3Rpb24gZGVmaW5lQ3VydmUobmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjdXJ2ZSA9IG5ldyBQcmVzZXRDdXJ2ZShvcHRpb25zKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJ2ZXMsIG5hbWUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogY3VydmVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGN1cnZlO1xuICAgIH1cbiAgfSk7XG59XG5cbmRlZmluZUN1cnZlKCdwMTkyJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AxOTInLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTInLFxuICAgICcwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjI0Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AyMjQnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUnLFxuICBiOiAnYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEnLFxuICAgICdiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjU2Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiJyxcbiAgbjogJ2ZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2JyxcbiAgICAnNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDM4NCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMnLFxuICBiOiAnYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgJyArXG4gICAgICc1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZicsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSAnICtcbiAgICAgJ2Y0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczJyxcbiAgaGFzaDogaGFzaC5zaGEzODQsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2FhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4ICcgK1xuICAgICc1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNycsXG4gICAgJzM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwICcgK1xuICAgICcwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZidcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwNTIxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgJyArXG4gICAgICc5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAnICtcbiAgICAgJzNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwJyxcbiAgbjogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggJyArXG4gICAgICdmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOScsXG4gIGhhc2g6IGhhc2guc2hhNTEyLFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICcwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAnICtcbiAgICAnMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgJyArXG4gICAgJ2EyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2JyxcbiAgICAnMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgJyArXG4gICAgJzU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxICcgK1xuICAgICczZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCdcbiAgXVxufSk7XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NzQ4I3NlY3Rpb24tNC4xXG5kZWZpbmVDdXJ2ZSgnY3VydmUyNTUxOScsIHtcbiAgdHlwZTogJ21vbnQnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJzc2ZDA2JyxcbiAgYjogJzEnLFxuICBuOiAnMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCcsXG4gIGNvZmFjdG9yOiAnOCcsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc5J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ2VkMjU1MTknLCB7XG4gIHR5cGU6ICdlZHdhcmRzJyxcbiAgcHJpbWU6ICdwMjU1MTknLFxuICBwOiAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcsXG4gIGE6ICctMScsXG4gIGM6ICcxJyxcbiAgLy8gLTEyMTY2NSAqICgxMjE2NjZeKC0xKSkgKG1vZCBQKVxuICBkOiAnNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMycsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgY29mYWN0b3I6ICc4JyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEnLFxuICAgIC8vIDQvNVxuICAgICc2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4J1xuICBdXG59KTtcblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2Mzkjc2VjdGlvbi0zLjRcbmRlZmluZUN1cnZlKCdicmFpbnBvb2xQMjU2cjEnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnQTlGQjU3REIgQTFFRUE5QkMgM0U2NjBBOTAgOUQ4MzhENzIgNkUzQkY2MjMgRDUyNjIwMjggMjAxMzQ4MUQgMUY2RTUzNzcnLFxuICBhOiAnN0Q1QTA5NzUgRkMyQzMwNTcgRUVGNjc1MzAgNDE3QUZGRTcgRkI4MDU1QzEgMjZEQzVDNkMgRTk0QTRCNDQgRjMzMEI1RDknLFxuICBiOiAnMjZEQzVDNkMgRTk0QTRCNDQgRjMzMEI1RDkgQkJENzdDQkYgOTU4NDE2MjkgNUNGN0UxQ0UgNkJDQ0RDMTggRkY4QzA3QjYnLFxuICBuOiAnQTlGQjU3REIgQTFFRUE5QkMgM0U2NjBBOTAgOUQ4MzhENzEgOEMzOTdBQTMgQjU2MUE2RjcgOTAxRTBFODIgOTc0ODU2QTcnLFxuICBoYXNoOiBoYXNoLnNoYTI1NiwgLy8gb3IgMzg0LCBvciA1MTJcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnOEJEMkFFQjlDQjdFNTdDQjJDNEI0ODJGRkM4MUI3QUZCOURFMjdFMUUzQkQyM0MyM0E0NDUzQkQ5QUNFMzI2MicsXG4gICAgJzU0N0VGODM1QzNEQUM0RkQ5N0Y4NDYxQTE0NjExREM5QzI3NzQ1MTMyREVEOEU1NDVDMUQ1NEM3MkYwNDY5OTcnXG4gIF1cbn0pO1xuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTYzOSNzZWN0aW9uLTMuNlxuZGVmaW5lQ3VydmUoJ2JyYWlucG9vbFAzODRyMScsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICc4Q0I5MUU4MiBBMzM4NkQyOCAwRjVENkY3RSA1MEU2NDFERiAxNTJGNzEwOSBFRDU0NTZCNCAxMkIxREExOSA3RkI3MTEyMycgK1xuICAgICdBQ0QzQTcyOSA5MDFEMUE3MSA4NzQ3MDAxMyAzMTA3RUM1MycsXG4gIGE6ICc3QkMzODJDNiAzRDhDMTUwQyAzQzcyMDgwQSBDRTA1QUZBMCBDMkJFQTI4RSA0RkIyMjc4NyAxMzkxNjVFRiBCQTkxRjkwRicgK1xuICAgICc4QUE1ODE0QSA1MDNBRDRFQiAwNEE4QzdERCAyMkNFMjgyNicsXG4gIGI6ICcwNEE4QzdERCAyMkNFMjgyNiA4QjM5QjU1NCAxNkYwNDQ3QyAyRkI3N0RFMSAwN0RDRDJBNiAyRTg4MEVBNSAzRUVCNjJENScgK1xuICAgICc3Q0I0MzkwMiA5NURCQzk5NCAzQUI3ODY5NiBGQTUwNEMxMScsXG4gIG46ICc4Q0I5MUU4MiBBMzM4NkQyOCAwRjVENkY3RSA1MEU2NDFERiAxNTJGNzEwOSBFRDU0NTZCMyAxRjE2NkU2QyBBQzA0MjVBNycgK1xuICAgICdDRjNBQjZBRiA2QjdGQzMxMCAzQjg4MzIwMiBFOTA0NjU2NScsXG4gIGhhc2g6IGhhc2guc2hhMzg0LCAvLyBvciA1MTJcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMUQxQzY0RjA2OENGNDVGRkEyQTYzQTgxQjdDMTNGNkI4ODQ3QTNFNzdFRjE0RkUzREI3RkNBRkUwQ0JEMTAnICtcbiAgICAgICdFOEU4MjZFMDM0MzZENjQ2QUFFRjg3QjJFMjQ3RDRBRjFFJyxcbiAgICAnOEFCRTFENzUyMEY5QzJBNDVDQjFFQjhFOTVDRkQ1NTI2MkI3MEIyOUZFRUM1ODY0RTE5QzA1NEZGOTkxMjknICtcbiAgICAgICcyODBFNDY0NjIxNzc5MTgxMTE0MjgyMDM0MTI2M0M1MzE1J1xuICBdXG59KTtcblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2Mzkjc2VjdGlvbi0zLjdcbmRlZmluZUN1cnZlKCdicmFpbnBvb2xQNTEycjEnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnQUFERDlEQjggREJFOUM0OEIgM0ZENEU2QUUgMzNDOUZDMDcgQ0IzMDhEQjMgQjNDOUQyMEUgRDY2MzlDQ0EgNzAzMzA4NzEnICtcbiAgICAnN0Q0RDlCMDAgOUJDNjY4NDIgQUVDREExMkEgRTZBMzgwRTYgMjg4MUZGMkYgMkQ4MkM2ODUgMjhBQTYwNTYgNTgzQTQ4RjMnLFxuICBhOiAnNzgzMEEzMzEgOEI2MDNCODkgRTIzMjcxNDUgQUMyMzRDQzUgOTRDQkREOEQgM0RGOTE2MTAgQTgzNDQxQ0EgRUE5ODYzQkMnICtcbiAgICAnMkRFRDVENUEgQTgyNTNBQTEgMEEyRUYxQzkgOEI5QUM4QjUgN0YxMTE3QTcgMkJGMkM3QjkgRTdDMUFDNEQgNzdGQzk0Q0EnLFxuICBiOiAnM0RGOTE2MTAgQTgzNDQxQ0EgRUE5ODYzQkMgMkRFRDVENUEgQTgyNTNBQTEgMEEyRUYxQzkgOEI5QUM4QjUgN0YxMTE3QTcnICtcbiAgICAnMkJGMkM3QjkgRTdDMUFDNEQgNzdGQzk0Q0EgREMwODNFNjcgOTg0MDUwQjcgNUVCQUU1REQgMjgwOUJENjMgODAxNkY3MjMnLFxuICBuOiAnQUFERDlEQjggREJFOUM0OEIgM0ZENEU2QUUgMzNDOUZDMDcgQ0IzMDhEQjMgQjNDOUQyMEUgRDY2MzlDQ0EgNzAzMzA4NzAnICtcbiAgICAnNTUzRTVDNDEgNENBOTI2MTkgNDE4NjYxMTkgN0ZBQzEwNDcgMURCMUQzODEgMDg1RERBREQgQjU4Nzk2ODIgOUNBOTAwNjknLFxuICBoYXNoOiBoYXNoLnNoYTUxMixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnODFBRUU0QkREODJFRDk2NDVBMjEzMjJFOUM0QzZBOTM4NUVEOUY3MEI1RDkxNkMxQjQzQjYyRUVGNEQwMDknICtcbiAgICAgICc4RUZGM0IxRjc4RTJEMEQ0OEQ1MEQxNjg3QjkzQjk3RDVGN0M2RDUwNDc0MDZBNUU2ODhCMzUyMjA5QkNCOUY4MjInLFxuICAgICc3RERFMzg1RDU2NjMzMkVDQzBFQUJGQTlDRjc4MjJGREYyMDlGNzAwMjRBNTdCMUFBMDAwQzU1Qjg4MUY4MScgK1xuICAgICAgJzExQjJEQ0RFNDk0QTVGNDg1RTVCQ0E0QkQ4OEEyNzYzQUVEMUNBMkIyRkE4RjA1NDA2NzhDRDFFMEYzQUQ4MDg5MidcbiAgXVxufSk7XG5cbi8vIGh0dHBzOi8vZW4uYml0Y29pbi5pdC93aWtpL1NlY3AyNTZrMVxudmFyIHByZTtcbnRyeSB7XG4gIHByZSA9IF9kZXJlcV8oJy4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxJyk7XG59IGNhdGNoIChlKSB7XG4gIHByZSA9IHVuZGVmaW5lZDtcbn1cblxuZGVmaW5lQ3VydmUoJ3NlY3AyNTZrMScsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdrMjU2JyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmJyxcbiAgYTogJzAnLFxuICBiOiAnNycsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MScsXG4gIGg6ICcxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG5cbiAgLy8gUHJlY29tcHV0ZWQgZW5kb21vcnBoaXNtXG4gIGJldGE6ICc3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlJyxcbiAgbGFtYmRhOiAnNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MicsXG4gIGJhc2lzOiBbXG4gICAge1xuICAgICAgYTogJzMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1JyxcbiAgICAgIGI6ICctZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMnXG4gICAgfSxcbiAgICB7XG4gICAgICBhOiAnMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4JyxcbiAgICAgIGI6ICczMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSdcbiAgICB9XG4gIF0sXG5cbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCcsXG4gICAgJzQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgnLFxuICAgIHByZVxuICBdXG59KTtcblxufSx7XCIuLi9lbGxpcHRpY1wiOjI2NyxcIi4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxXCI6MjgwLFwiaGFzaC5qc1wiOjI4NH1dLDI3NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG52YXIgSG1hY0RSQkcgPSBfZGVyZXFfKCdobWFjLWRyYmcnKTtcbnZhciBlbGxpcHRpYyA9IF9kZXJlcV8oJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbnZhciBLZXlQYWlyID0gX2RlcmVxXygnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSBfZGVyZXFfKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFQyhvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFQykpXG4gICAgcmV0dXJuIG5ldyBFQyhvcHRpb25zKTtcblxuICAvLyBTaG9ydGN1dCBgZWxsaXB0aWMuZWMoY3VydmUtbmFtZSlgXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhc3NlcnQoZWxsaXB0aWMuY3VydmVzLmhhc093blByb3BlcnR5KG9wdGlvbnMpLCAnVW5rbm93biBjdXJ2ZSAnICsgb3B0aW9ucyk7XG5cbiAgICBvcHRpb25zID0gZWxsaXB0aWMuY3VydmVzW29wdGlvbnNdO1xuICB9XG5cbiAgLy8gU2hvcnRjdXQgZm9yIGBlbGxpcHRpYy5lYyhlbGxpcHRpYy5jdXJ2ZXMuY3VydmVOYW1lKWBcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBlbGxpcHRpYy5jdXJ2ZXMuUHJlc2V0Q3VydmUpXG4gICAgb3B0aW9ucyA9IHsgY3VydmU6IG9wdGlvbnMgfTtcblxuICB0aGlzLmN1cnZlID0gb3B0aW9ucy5jdXJ2ZS5jdXJ2ZTtcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLm5oID0gdGhpcy5uLnVzaHJuKDEpO1xuICB0aGlzLmcgPSB0aGlzLmN1cnZlLmc7XG5cbiAgLy8gUG9pbnQgb24gY3VydmVcbiAgdGhpcy5nID0gb3B0aW9ucy5jdXJ2ZS5nO1xuICB0aGlzLmcucHJlY29tcHV0ZShvcHRpb25zLmN1cnZlLm4uYml0TGVuZ3RoKCkgKyAxKTtcblxuICAvLyBIYXNoIGZ1bmN0aW9uIGZvciBEUkJHXG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaCB8fCBvcHRpb25zLmN1cnZlLmhhc2g7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEVDO1xuXG5FQy5wcm90b3R5cGUua2V5UGFpciA9IGZ1bmN0aW9uIGtleVBhaXIob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEtleVBhaXIodGhpcywgb3B0aW9ucyk7XG59O1xuXG5FQy5wcm90b3R5cGUua2V5RnJvbVByaXZhdGUgPSBmdW5jdGlvbiBrZXlGcm9tUHJpdmF0ZShwcml2LCBlbmMpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVByaXZhdGUodGhpcywgcHJpdiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5rZXlGcm9tUHVibGljID0gZnVuY3Rpb24ga2V5RnJvbVB1YmxpYyhwdWIsIGVuYykge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1YiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZW5LZXlQYWlyID0gZnVuY3Rpb24gZ2VuS2V5UGFpcihvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCcsXG4gICAgZW50cm9weTogb3B0aW9ucy5lbnRyb3B5IHx8IGVsbGlwdGljLnJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksXG4gICAgZW50cm9weUVuYzogb3B0aW9ucy5lbnRyb3B5ICYmIG9wdGlvbnMuZW50cm9weUVuYyB8fCAndXRmOCcsXG4gICAgbm9uY2U6IHRoaXMubi50b0FycmF5KClcbiAgfSk7XG5cbiAgLy8gS2V5IGdlbmVyYXRpb24gZm9yIGN1cnZlMjU1MTkgaXMgc2ltcGxlclxuICBpZiAodGhpcy5jdXJ2ZS50eXBlID09PSAnbW9udCcpIHtcbiAgICB2YXIgcHJpdiA9IG5ldyBCTihkcmJnLmdlbmVyYXRlKDMyKSk7XG4gICAgcmV0dXJuIHRoaXMua2V5RnJvbVByaXZhdGUocHJpdik7XG4gIH1cblxuICB2YXIgYnl0ZXMgPSB0aGlzLm4uYnl0ZUxlbmd0aCgpO1xuICB2YXIgbnMyID0gdGhpcy5uLnN1YihuZXcgQk4oMikpO1xuICBkbyB7XG4gICAgdmFyIHByaXYgPSBuZXcgQk4oZHJiZy5nZW5lcmF0ZShieXRlcykpO1xuICAgIGlmIChwcml2LmNtcChuczIpID4gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgcHJpdi5pYWRkbigxKTtcbiAgICByZXR1cm4gdGhpcy5rZXlGcm9tUHJpdmF0ZShwcml2KTtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59O1xuXG5FQy5wcm90b3R5cGUuX3RydW5jYXRlVG9OID0gZnVuY3Rpb24gdHJ1bmNhdGVUb04obXNnLCB0cnVuY09ubHkpIHtcbiAgdmFyIGRlbHRhID0gbXNnLmJ5dGVMZW5ndGgoKSAqIDggLSB0aGlzLm4uYml0TGVuZ3RoKCk7XG4gIGlmIChkZWx0YSA+IDApXG4gICAgbXNnID0gbXNnLnVzaHJuKGRlbHRhKTtcbiAgaWYgKCF0cnVuY09ubHkgJiYgbXNnLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIG1zZy5zdWIodGhpcy5uKTtcbiAgZWxzZVxuICAgIHJldHVybiBtc2c7XG59O1xuXG5FQy5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obXNnLCBrZXksIGVuYywgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGVuYyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cbiAgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7fTtcblxuICBrZXkgPSB0aGlzLmtleUZyb21Qcml2YXRlKGtleSwgZW5jKTtcbiAgbXNnID0gdGhpcy5fdHJ1bmNhdGVUb04obmV3IEJOKG1zZywgMTYpKTtcblxuICAvLyBaZXJvLWV4dGVuZCBrZXkgdG8gcHJvdmlkZSBlbm91Z2ggZW50cm9weVxuICB2YXIgYnl0ZXMgPSB0aGlzLm4uYnl0ZUxlbmd0aCgpO1xuICB2YXIgYmtleSA9IGtleS5nZXRQcml2YXRlKCkudG9BcnJheSgnYmUnLCBieXRlcyk7XG5cbiAgLy8gWmVyby1leHRlbmQgbm9uY2UgdG8gaGF2ZSB0aGUgc2FtZSBieXRlIHNpemUgYXMgTlxuICB2YXIgbm9uY2UgPSBtc2cudG9BcnJheSgnYmUnLCBieXRlcyk7XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgZW50cm9weTogYmtleSxcbiAgICBub25jZTogbm9uY2UsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCdcbiAgfSk7XG5cbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGdlbmVyYXRlXG4gIHZhciBuczEgPSB0aGlzLm4uc3ViKG5ldyBCTigxKSk7XG5cbiAgZm9yICh2YXIgaXRlciA9IDA7IHRydWU7IGl0ZXIrKykge1xuICAgIHZhciBrID0gb3B0aW9ucy5rID9cbiAgICAgICAgb3B0aW9ucy5rKGl0ZXIpIDpcbiAgICAgICAgbmV3IEJOKGRyYmcuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO1xuICAgIGsgPSB0aGlzLl90cnVuY2F0ZVRvTihrLCB0cnVlKTtcbiAgICBpZiAoay5jbXBuKDEpIDw9IDAgfHwgay5jbXAobnMxKSA+PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIga3AgPSB0aGlzLmcubXVsKGspO1xuICAgIGlmIChrcC5pc0luZmluaXR5KCkpXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBrcFggPSBrcC5nZXRYKCk7XG4gICAgdmFyIHIgPSBrcFgudW1vZCh0aGlzLm4pO1xuICAgIGlmIChyLmNtcG4oMCkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBzID0gay5pbnZtKHRoaXMubikubXVsKHIubXVsKGtleS5nZXRQcml2YXRlKCkpLmlhZGQobXNnKSk7XG4gICAgcyA9IHMudW1vZCh0aGlzLm4pO1xuICAgIGlmIChzLmNtcG4oMCkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciByZWNvdmVyeVBhcmFtID0gKGtwLmdldFkoKS5pc09kZCgpID8gMSA6IDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChrcFguY21wKHIpICE9PSAwID8gMiA6IDApO1xuXG4gICAgLy8gVXNlIGNvbXBsZW1lbnQgb2YgYHNgLCBpZiBpdCBpcyA+IGBuIC8gMmBcbiAgICBpZiAob3B0aW9ucy5jYW5vbmljYWwgJiYgcy5jbXAodGhpcy5uaCkgPiAwKSB7XG4gICAgICBzID0gdGhpcy5uLnN1YihzKTtcbiAgICAgIHJlY292ZXJ5UGFyYW0gXj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZSh7IHI6IHIsIHM6IHMsIHJlY292ZXJ5UGFyYW06IHJlY292ZXJ5UGFyYW0gfSk7XG4gIH1cbn07XG5cbkVDLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobXNnLCBzaWduYXR1cmUsIGtleSwgZW5jKSB7XG4gIG1zZyA9IHRoaXMuX3RydW5jYXRlVG9OKG5ldyBCTihtc2csIDE2KSk7XG4gIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhrZXksIGVuYyk7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCAnaGV4Jyk7XG5cbiAgLy8gUGVyZm9ybSBwcmltaXRpdmUgdmFsdWVzIHZhbGlkYXRpb25cbiAgdmFyIHIgPSBzaWduYXR1cmUucjtcbiAgdmFyIHMgPSBzaWduYXR1cmUucztcbiAgaWYgKHIuY21wbigxKSA8IDAgfHwgci5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHMuY21wbigxKSA8IDAgfHwgcy5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBWYWxpZGF0ZSBzaWduYXR1cmVcbiAgdmFyIHNpbnYgPSBzLmludm0odGhpcy5uKTtcbiAgdmFyIHUxID0gc2ludi5tdWwobXNnKS51bW9kKHRoaXMubik7XG4gIHZhciB1MiA9IHNpbnYubXVsKHIpLnVtb2QodGhpcy5uKTtcblxuICBpZiAoIXRoaXMuY3VydmUuX21heHdlbGxUcmljaykge1xuICAgIHZhciBwID0gdGhpcy5nLm11bEFkZCh1MSwga2V5LmdldFB1YmxpYygpLCB1Mik7XG4gICAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHAuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocikgPT09IDA7XG4gIH1cblxuICAvLyBOT1RFOiBHcmVnIE1heHdlbGwncyB0cmljaywgaW5zcGlyZWQgYnk6XG4gIC8vIGh0dHBzOi8vZ2l0LmlvL3ZhZDNLXG5cbiAgdmFyIHAgPSB0aGlzLmcuam11bEFkZCh1MSwga2V5LmdldFB1YmxpYygpLCB1Mik7XG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBgcC54YCBvZiBKYWNvYmlhbiBwb2ludCB3aXRoIGByYCxcbiAgLy8gdGhpcyB3aWxsIGRvIGBwLnggPT0gciAqIHAuel4yYCBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGBwLnhgIGJ5IHRoZVxuICAvLyBpbnZlcnNlIG9mIGBwLnpeMmBcbiAgcmV0dXJuIHAuZXFYVG9QKHIpO1xufTtcblxuRUMucHJvdG90eXBlLnJlY292ZXJQdWJLZXkgPSBmdW5jdGlvbihtc2csIHNpZ25hdHVyZSwgaiwgZW5jKSB7XG4gIGFzc2VydCgoMyAmIGopID09PSBqLCAnVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cycpO1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgZW5jKTtcblxuICB2YXIgbiA9IHRoaXMubjtcbiAgdmFyIGUgPSBuZXcgQk4obXNnKTtcbiAgdmFyIHIgPSBzaWduYXR1cmUucjtcbiAgdmFyIHMgPSBzaWduYXR1cmUucztcblxuICAvLyBBIHNldCBMU0Igc2lnbmlmaWVzIHRoYXQgdGhlIHktY29vcmRpbmF0ZSBpcyBvZGRcbiAgdmFyIGlzWU9kZCA9IGogJiAxO1xuICB2YXIgaXNTZWNvbmRLZXkgPSBqID4+IDE7XG4gIGlmIChyLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKSA+PSAwICYmIGlzU2Vjb25kS2V5KVxuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlJyk7XG5cbiAgLy8gMS4xLiBMZXQgeCA9IHIgKyBqbi5cbiAgaWYgKGlzU2Vjb25kS2V5KVxuICAgIHIgPSB0aGlzLmN1cnZlLnBvaW50RnJvbVgoci5hZGQodGhpcy5jdXJ2ZS5uKSwgaXNZT2RkKTtcbiAgZWxzZVxuICAgIHIgPSB0aGlzLmN1cnZlLnBvaW50RnJvbVgociwgaXNZT2RkKTtcblxuICB2YXIgckludiA9IHNpZ25hdHVyZS5yLmludm0obik7XG4gIHZhciBzMSA9IG4uc3ViKGUpLm11bChySW52KS51bW9kKG4pO1xuICB2YXIgczIgPSBzLm11bChySW52KS51bW9kKG4pO1xuXG4gIC8vIDEuNi4xIENvbXB1dGUgUSA9IHJeLTEgKHNSIC0gIGVHKVxuICAvLyAgICAgICAgICAgICAgIFEgPSByXi0xIChzUiArIC1lRylcbiAgcmV0dXJuIHRoaXMuZy5tdWxBZGQoczEsIHIsIHMyKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtID0gZnVuY3Rpb24oZSwgc2lnbmF0dXJlLCBRLCBlbmMpIHtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsIGVuYyk7XG4gIGlmIChzaWduYXR1cmUucmVjb3ZlcnlQYXJhbSAhPT0gbnVsbClcbiAgICByZXR1cm4gc2lnbmF0dXJlLnJlY292ZXJ5UGFyYW07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgUXByaW1lO1xuICAgIHRyeSB7XG4gICAgICBRcHJpbWUgPSB0aGlzLnJlY292ZXJQdWJLZXkoZSwgc2lnbmF0dXJlLCBpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoUXByaW1lLmVxKFEpKVxuICAgICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3InKTtcbn07XG5cbn0se1wiLi4vLi4vZWxsaXB0aWNcIjoyNjcsXCIuL2tleVwiOjI3NSxcIi4vc2lnbmF0dXJlXCI6Mjc2LFwiYm4uanNcIjo0NCxcImhtYWMtZHJiZ1wiOjI5Nn1dLDI3NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSBfZGVyZXFfKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBLZXlQYWlyKGVjLCBvcHRpb25zKSB7XG4gIHRoaXMuZWMgPSBlYztcbiAgdGhpcy5wcml2ID0gbnVsbDtcbiAgdGhpcy5wdWIgPSBudWxsO1xuXG4gIC8vIEtleVBhaXIoZWMsIHsgcHJpdjogLi4uLCBwdWI6IC4uLiB9KVxuICBpZiAob3B0aW9ucy5wcml2KVxuICAgIHRoaXMuX2ltcG9ydFByaXZhdGUob3B0aW9ucy5wcml2LCBvcHRpb25zLnByaXZFbmMpO1xuICBpZiAob3B0aW9ucy5wdWIpXG4gICAgdGhpcy5faW1wb3J0UHVibGljKG9wdGlvbnMucHViLCBvcHRpb25zLnB1YkVuYyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWMsIHB1YiwgZW5jKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHViOiBwdWIsXG4gICAgcHViRW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21Qcml2YXRlID0gZnVuY3Rpb24gZnJvbVByaXZhdGUoZWMsIHByaXYsIGVuYykge1xuICBpZiAocHJpdiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHByaXY7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHJpdjogcHJpdixcbiAgICBwcml2RW5jOiBlbmNcbiAgfSk7XG59O1xuXG4vLyBUT0RPOiBzaG91bGQgbm90IHZhbGlkYXRlIGZvciBYMjU1MTlcbktleVBhaXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIHZhciBwdWIgPSB0aGlzLmdldFB1YmxpYygpO1xuXG4gIGlmIChwdWIuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ0ludmFsaWQgcHVibGljIGtleScgfTtcbiAgaWYgKCFwdWIudmFsaWRhdGUoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50JyB9O1xuICBpZiAoIXB1Yi5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnUHVibGljIGtleSAqIE4gIT0gTycgfTtcblxuICByZXR1cm4geyByZXN1bHQ6IHRydWUsIHJlYXNvbjogbnVsbCB9O1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljID0gZnVuY3Rpb24gZ2V0UHVibGljKGVuYywgY29tcGFjdCkge1xuICBpZiAoIXRoaXMucHViKVxuICAgIHRoaXMucHViID0gdGhpcy5lYy5nLm11bCh0aGlzLnByaXYpO1xuXG4gIGlmICghZW5jKVxuICAgIHJldHVybiB0aGlzLnB1YjtcblxuICByZXR1cm4gdGhpcy5wdWIuZW5jb2RlKGVuYywgY29tcGFjdCk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQcml2YXRlID0gZnVuY3Rpb24gZ2V0UHJpdmF0ZShlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHRoaXMucHJpdi50b1N0cmluZygxNiwgMik7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5wcml2O1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGUgPSBmdW5jdGlvbiBfaW1wb3J0UHJpdmF0ZShrZXksIGVuYykge1xuICB0aGlzLnByaXYgPSBuZXcgQk4oa2V5LCBlbmMgfHwgMTYpO1xuXG4gIC8vIEZvciBDdXJ2ZTI1NTE5L0N1cnZlNDQ4IHdlIGhhdmUgYSBzcGVjaWZpYyBwcm9jZWR1cmUuXG4gIC8vIFRPRE8gQ3VydmU0NDhcbiAgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ21vbnQnKSB7XG4gICAgdmFyIG9uZSA9IHRoaXMuZWMuY3VydmUub25lO1xuICAgIHZhciBtYXNrID0gb25lLnVzaGxuKDI1NSAtIDMpLnN1YihvbmUpLnVzaGxuKDMpO1xuICAgIHRoaXMucHJpdiA9IHRoaXMucHJpdi5vcihvbmUudXNobG4oMjU1IC0gMSkpO1xuICAgIHRoaXMucHJpdiA9IHRoaXMucHJpdi5hbmQobWFzayk7XG4gIH0gZWxzZVxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBwcml2IHdvbid0IGJlIGJpZ2dlciB0aGFuIG4sIG90aGVyd2lzZSB3ZSBtYXkgZmFpbFxuICAgIC8vIGluIGZpeGVkIG11bHRpcGxpY2F0aW9uIG1ldGhvZFxuICAgIHRoaXMucHJpdiA9IHRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubik7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHVibGljID0gZnVuY3Rpb24gX2ltcG9ydFB1YmxpYyhrZXksIGVuYykge1xuICBpZiAoa2V5LnggfHwga2V5LnkpIHtcbiAgICAvLyBNb250Z29tZXJ5IHBvaW50cyBvbmx5IGhhdmUgYW4gYHhgIGNvb3JkaW5hdGUuXG4gICAgLy8gV2VpZXJzdHJhc3MvRWR3YXJkcyBwb2ludHMgb24gdGhlIG90aGVyIGhhbmQgaGF2ZSBib3RoIGB4YCBhbmRcbiAgICAvLyBgeWAgY29vcmRpbmF0ZXMuXG4gICAgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ21vbnQnKSB7XG4gICAgICBhc3NlcnQoa2V5LngsICdOZWVkIHggY29vcmRpbmF0ZScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnc2hvcnQnIHx8XG4gICAgICAgICAgICAgICB0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdlZHdhcmRzJykge1xuICAgICAgYXNzZXJ0KGtleS54ICYmIGtleS55LCAnTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZScpO1xuICAgIH1cbiAgICB0aGlzLnB1YiA9IHRoaXMuZWMuY3VydmUucG9pbnQoa2V5LngsIGtleS55KTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5wdWIgPSB0aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KGtleSwgZW5jKTtcbn07XG5cbi8vIEVDREhcbktleVBhaXIucHJvdG90eXBlLmRlcml2ZSA9IGZ1bmN0aW9uIGRlcml2ZShwdWIpIHtcbiAgdmFyIHggPSBwdWIubXVsKHRoaXMucHJpdikuZ2V0WCgpO1xuICB2YXIgbGVuID0geC5ieXRlTGVuZ3RoKCk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBub3QgaWRlYWwsIGJ1dCB0aGUgUkZDJ3MgYXJlIHVuY2xlYXJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtb3BlbnBncC1yZmM0ODgwYmlzLTAyI2FwcGVuZGl4LUJcbiAgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ21vbnQnKSB7XG4gICAgcmV0dXJuIHgudG9BcnJheSgnbGUnLCBsZW4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4LnRvQXJyYXkoJ2JlJywgbGVuKTtcbiAgfVxufTtcblxuLy8gRUNEU0FcbktleVBhaXIucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1zZywgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmVjLnNpZ24obXNnLCB0aGlzLCBlbmMsIG9wdGlvbnMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlKSB7XG4gIHJldHVybiB0aGlzLmVjLnZlcmlmeShtc2csIHNpZ25hdHVyZSwgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgcmV0dXJuICc8S2V5IHByaXY6ICcgKyAodGhpcy5wcml2ICYmIHRoaXMucHJpdi50b1N0cmluZygxNiwgMikpICtcbiAgICAgICAgICcgcHViOiAnICsgKHRoaXMucHViICYmIHRoaXMucHViLmluc3BlY3QoKSkgKyAnID4nO1xufTtcblxufSx7XCIuLi8uLi9lbGxpcHRpY1wiOjI2NyxcImJuLmpzXCI6NDR9XSwyNzY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSBfZGVyZXFfKCdibi5qcycpO1xuXG52YXIgZWxsaXB0aWMgPSBfZGVyZXFfKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBTaWduYXR1cmUob3B0aW9ucywgZW5jKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgU2lnbmF0dXJlKVxuICAgIHJldHVybiBvcHRpb25zO1xuXG4gIGlmICh0aGlzLl9pbXBvcnRERVIob3B0aW9ucywgZW5jKSlcbiAgICByZXR1cm47XG5cbiAgYXNzZXJ0KG9wdGlvbnMuciAmJiBvcHRpb25zLnMsICdTaWduYXR1cmUgd2l0aG91dCByIG9yIHMnKTtcbiAgdGhpcy5yID0gbmV3IEJOKG9wdGlvbnMuciwgMTYpO1xuICB0aGlzLnMgPSBuZXcgQk4ob3B0aW9ucy5zLCAxNik7XG4gIGlmIChvcHRpb25zLnJlY292ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZClcbiAgICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuICBlbHNlXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gb3B0aW9ucy5yZWNvdmVyeVBhcmFtO1xufVxubW9kdWxlLmV4cG9ydHMgPSBTaWduYXR1cmU7XG5cbmZ1bmN0aW9uIFBvc2l0aW9uKCkge1xuICB0aGlzLnBsYWNlID0gMDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVuZ3RoKGJ1ZiwgcCkge1xuICB2YXIgaW5pdGlhbCA9IGJ1ZltwLnBsYWNlKytdO1xuICBpZiAoIShpbml0aWFsICYgMHg4MCkpIHtcbiAgICByZXR1cm4gaW5pdGlhbDtcbiAgfVxuICB2YXIgb2N0ZXRMZW4gPSBpbml0aWFsICYgMHhmO1xuICB2YXIgdmFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDAsIG9mZiA9IHAucGxhY2U7IGkgPCBvY3RldExlbjsgaSsrLCBvZmYrKykge1xuICAgIHZhbCA8PD0gODtcbiAgICB2YWwgfD0gYnVmW29mZl07XG4gIH1cbiAgcC5wbGFjZSA9IG9mZjtcbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gcm1QYWRkaW5nKGJ1Zikge1xuICB2YXIgaSA9IDA7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCFidWZbaV0gJiYgIShidWZbaSArIDFdICYgMHg4MCkgJiYgaSA8IGxlbikge1xuICAgIGkrKztcbiAgfVxuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBidWY7XG4gIH1cbiAgcmV0dXJuIGJ1Zi5zbGljZShpKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS5faW1wb3J0REVSID0gZnVuY3Rpb24gX2ltcG9ydERFUihkYXRhLCBlbmMpIHtcbiAgZGF0YSA9IHV0aWxzLnRvQXJyYXkoZGF0YSwgZW5jKTtcbiAgdmFyIHAgPSBuZXcgUG9zaXRpb24oKTtcbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgzMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoKGxlbiArIHAucGxhY2UpICE9PSBkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBybGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICB2YXIgciA9IGRhdGEuc2xpY2UocC5wbGFjZSwgcmxlbiArIHAucGxhY2UpO1xuICBwLnBsYWNlICs9IHJsZW47XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNsZW4gPSBnZXRMZW5ndGgoZGF0YSwgcCk7XG4gIGlmIChkYXRhLmxlbmd0aCAhPT0gc2xlbiArIHAucGxhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHMgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHNsZW4gKyBwLnBsYWNlKTtcbiAgaWYgKHJbMF0gPT09IDAgJiYgKHJbMV0gJiAweDgwKSkge1xuICAgIHIgPSByLnNsaWNlKDEpO1xuICB9XG4gIGlmIChzWzBdID09PSAwICYmIChzWzFdICYgMHg4MCkpIHtcbiAgICBzID0gcy5zbGljZSgxKTtcbiAgfVxuXG4gIHRoaXMuciA9IG5ldyBCTihyKTtcbiAgdGhpcy5zID0gbmV3IEJOKHMpO1xuICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gY29uc3RydWN0TGVuZ3RoKGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPCAweDgwKSB7XG4gICAgYXJyLnB1c2gobGVuKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG9jdGV0cyA9IDEgKyAoTWF0aC5sb2cobGVuKSAvIE1hdGguTE4yID4+PiAzKTtcbiAgYXJyLnB1c2gob2N0ZXRzIHwgMHg4MCk7XG4gIHdoaWxlICgtLW9jdGV0cykge1xuICAgIGFyci5wdXNoKChsZW4gPj4+IChvY3RldHMgPDwgMykpICYgMHhmZik7XG4gIH1cbiAgYXJyLnB1c2gobGVuKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0RFUiA9IGZ1bmN0aW9uIHRvREVSKGVuYykge1xuICB2YXIgciA9IHRoaXMuci50b0FycmF5KCk7XG4gIHZhciBzID0gdGhpcy5zLnRvQXJyYXkoKTtcblxuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChyWzBdICYgMHg4MClcbiAgICByID0gWyAwIF0uY29uY2F0KHIpO1xuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChzWzBdICYgMHg4MClcbiAgICBzID0gWyAwIF0uY29uY2F0KHMpO1xuXG4gIHIgPSBybVBhZGRpbmcocik7XG4gIHMgPSBybVBhZGRpbmcocyk7XG5cbiAgd2hpbGUgKCFzWzBdICYmICEoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cbiAgdmFyIGFyciA9IFsgMHgwMiBdO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCByLmxlbmd0aCk7XG4gIGFyciA9IGFyci5jb25jYXQocik7XG4gIGFyci5wdXNoKDB4MDIpO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCBzLmxlbmd0aCk7XG4gIHZhciBiYWNrSGFsZiA9IGFyci5jb25jYXQocyk7XG4gIHZhciByZXMgPSBbIDB4MzAgXTtcbiAgY29uc3RydWN0TGVuZ3RoKHJlcywgYmFja0hhbGYubGVuZ3RoKTtcbiAgcmVzID0gcmVzLmNvbmNhdChiYWNrSGFsZik7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcblxufSx7XCIuLi8uLi9lbGxpcHRpY1wiOjI2NyxcImJuLmpzXCI6NDR9XSwyNzc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IF9kZXJlcV8oJ2hhc2guanMnKTtcbnZhciBIbWFjRFJCRyA9IF9kZXJlcV8oJ2htYWMtZHJiZycpO1xudmFyIGVsbGlwdGljID0gX2RlcmVxXygnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBLZXlQYWlyID0gX2RlcmVxXygnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSBfZGVyZXFfKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFRERTQShjdXJ2ZSkge1xuICBhc3NlcnQoY3VydmUgPT09ICdlZDI1NTE5JywgJ29ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXInKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUREU0EpKVxuICAgIHJldHVybiBuZXcgRUREU0EoY3VydmUpO1xuXG4gIHZhciBjdXJ2ZSA9IGVsbGlwdGljLmN1cnZlc1tjdXJ2ZV0uY3VydmU7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy5nID0gY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUoY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIHRoaXMucG9pbnRDbGFzcyA9IGN1cnZlLnBvaW50KCkuY29uc3RydWN0b3I7XG4gIHRoaXMuZW5jb2RpbmdMZW5ndGggPSBNYXRoLmNlaWwoY3VydmUubi5iaXRMZW5ndGgoKSAvIDgpO1xuICB0aGlzLmhhc2ggPSBoYXNoLnNoYTUxMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFRERTQTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBtZXNzYWdlIC0gbWVzc2FnZSBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xLZXlQYWlyfSBzZWNyZXQgLSBzZWNyZXQgYnl0ZXMgb3IgYSBrZXlwYWlyXG4qIEByZXR1cm5zIHtTaWduYXR1cmV9IC0gc2lnbmF0dXJlXG4qL1xuRUREU0EucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1lc3NhZ2UsIHNlY3JldCkge1xuICBtZXNzYWdlID0gcGFyc2VCeXRlcyhtZXNzYWdlKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVNlY3JldChzZWNyZXQpO1xuICB2YXIgciA9IHRoaXMuaGFzaEludChrZXkubWVzc2FnZVByZWZpeCgpLCBtZXNzYWdlKTtcbiAgdmFyIFIgPSB0aGlzLmcubXVsKHIpO1xuICB2YXIgUmVuY29kZWQgPSB0aGlzLmVuY29kZVBvaW50KFIpO1xuICB2YXIgc18gPSB0aGlzLmhhc2hJbnQoUmVuY29kZWQsIGtleS5wdWJCeXRlcygpLCBtZXNzYWdlKVxuICAgICAgICAgICAgICAgLm11bChrZXkucHJpdigpKTtcbiAgdmFyIFMgPSByLmFkZChzXykudW1vZCh0aGlzLmN1cnZlLm4pO1xuICByZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHsgUjogUiwgUzogUywgUmVuY29kZWQ6IFJlbmNvZGVkIH0pO1xufTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFNpZ25hdHVyZX0gc2lnIC0gc2lnIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFBvaW50fEtleVBhaXJ9IHB1YiAtIHB1YmxpYyBrZXlcbiogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBwdWJsaWMga2V5IG1hdGNoZXMgc2lnIG9mIG1lc3NhZ2VcbiovXG5FRERTQS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZywgcHViKSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICBzaWcgPSB0aGlzLm1ha2VTaWduYXR1cmUoc2lnKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhwdWIpO1xuICB2YXIgaCA9IHRoaXMuaGFzaEludChzaWcuUmVuY29kZWQoKSwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpO1xuICB2YXIgU0cgPSB0aGlzLmcubXVsKHNpZy5TKCkpO1xuICB2YXIgUnBsdXNBaCA9IHNpZy5SKCkuYWRkKGtleS5wdWIoKS5tdWwoaCkpO1xuICByZXR1cm4gUnBsdXNBaC5lcShTRyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQoKSB7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgIGhhc2gudXBkYXRlKGFyZ3VtZW50c1tpXSk7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoaGFzaC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleVBhaXIgPSBmdW5jdGlvbiBrZXlQYWlyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKHRoaXMsIG9wdGlvbnMpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1Yikge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1Yik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVNlY3JldCA9IGZ1bmN0aW9uIGtleUZyb21TZWNyZXQoc2VjcmV0KSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21TZWNyZXQodGhpcywgc2VjcmV0KTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5nZW5LZXlQYWlyID0gZnVuY3Rpb24gZ2VuS2V5UGFpcihvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCcsXG4gICAgZW50cm9weTogb3B0aW9ucy5lbnRyb3B5IHx8IGVsbGlwdGljLnJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksXG4gICAgZW50cm9weUVuYzogb3B0aW9ucy5lbnRyb3B5ICYmIG9wdGlvbnMuZW50cm9weUVuYyB8fCAndXRmOCcsXG4gICAgbm9uY2U6IHRoaXMuY3VydmUubi50b0FycmF5KClcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXMua2V5RnJvbVNlY3JldChkcmJnLmdlbmVyYXRlKDMyKSk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUubWFrZVNpZ25hdHVyZSA9IGZ1bmN0aW9uIG1ha2VTaWduYXR1cmUoc2lnKSB7XG4gIGlmIChzaWcgaW5zdGFuY2VvZiBTaWduYXR1cmUpXG4gICAgcmV0dXJuIHNpZztcbiAgcmV0dXJuIG5ldyBTaWduYXR1cmUodGhpcywgc2lnKTtcbn07XG5cbi8qKlxuKiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1qb3NlZnNzb24tZWRkc2EtZWQyNTUxOS0wMyNzZWN0aW9uLTUuMlxuKlxuKiBFRERTQSBkZWZpbmVzIG1ldGhvZHMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwb2ludHMgYW5kIGludGVnZXJzLiBUaGVzZSBhcmVcbiogaGVscGVyIGNvbnZlbmllbmNlIG1ldGhvZHMsIHRoYXQgcGFzcyBhbG9uZyB0byB1dGlsaXR5IGZ1bmN0aW9ucyBpbXBsaWVkXG4qIHBhcmFtZXRlcnMuXG4qXG4qL1xuRUREU0EucHJvdG90eXBlLmVuY29kZVBvaW50ID0gZnVuY3Rpb24gZW5jb2RlUG9pbnQocG9pbnQpIHtcbiAgdmFyIGVuYyA9IHBvaW50LmdldFkoKS50b0FycmF5KCdsZScsIHRoaXMuZW5jb2RpbmdMZW5ndGgpO1xuICBlbmNbdGhpcy5lbmNvZGluZ0xlbmd0aCAtIDFdIHw9IHBvaW50LmdldFgoKS5pc09kZCgpID8gMHg4MCA6IDA7XG4gIHJldHVybiBlbmM7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZGVjb2RlUG9pbnQgPSBmdW5jdGlvbiBkZWNvZGVQb2ludChieXRlcykge1xuICBieXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXMoYnl0ZXMpO1xuXG4gIHZhciBsYXN0SXggPSBieXRlcy5sZW5ndGggLSAxO1xuICB2YXIgbm9ybWVkID0gYnl0ZXMuc2xpY2UoMCwgbGFzdEl4KS5jb25jYXQoYnl0ZXNbbGFzdEl4XSAmIH4weDgwKTtcbiAgdmFyIHhJc09kZCA9IChieXRlc1tsYXN0SXhdICYgMHg4MCkgIT09IDA7XG5cbiAgdmFyIHkgPSB1dGlscy5pbnRGcm9tTEUobm9ybWVkKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWSh5LCB4SXNPZGQpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmVuY29kZUludCA9IGZ1bmN0aW9uIGVuY29kZUludChudW0pIHtcbiAgcmV0dXJuIG51bS50b0FycmF5KCdsZScsIHRoaXMuZW5jb2RpbmdMZW5ndGgpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmRlY29kZUludCA9IGZ1bmN0aW9uIGRlY29kZUludChieXRlcykge1xuICByZXR1cm4gdXRpbHMuaW50RnJvbUxFKGJ5dGVzKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5pc1BvaW50ID0gZnVuY3Rpb24gaXNQb2ludCh2YWwpIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzcztcbn07XG5cbn0se1wiLi4vLi4vZWxsaXB0aWNcIjoyNjcsXCIuL2tleVwiOjI3OCxcIi4vc2lnbmF0dXJlXCI6Mjc5LFwiaGFzaC5qc1wiOjI4NCxcImhtYWMtZHJiZ1wiOjI5Nn1dLDI3ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbGxpcHRpYyA9IF9kZXJlcV8oJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gaW5zdGFuY2VcbiogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIHB1YmxpYy9wcml2YXRlIGtleSBwYXJhbWV0ZXJzXG4qXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZT59IFtwYXJhbXMuc2VjcmV0XSAtIHNlY3JldCBzZWVkIGJ5dGVzXG4qIEBwYXJhbSB7UG9pbnR9IFtwYXJhbXMucHViXSAtIHB1YmxpYyBrZXkgcG9pbnQgKGFrYSBgQWAgaW4gZWRkc2EgdGVybXMpXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZT59IFtwYXJhbXMucHViXSAtIHB1YmxpYyBrZXkgcG9pbnQgZW5jb2RlZCBhcyBieXRlc1xuKlxuKi9cbmZ1bmN0aW9uIEtleVBhaXIoZWRkc2EsIHBhcmFtcykge1xuICB0aGlzLmVkZHNhID0gZWRkc2E7XG4gIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3NlY3JldCcpKVxuICAgIHRoaXMuX3NlY3JldCA9IHBhcnNlQnl0ZXMocGFyYW1zLnNlY3JldCk7XG4gIGlmIChlZGRzYS5pc1BvaW50KHBhcmFtcy5wdWIpKVxuICAgIHRoaXMuX3B1YiA9IHBhcmFtcy5wdWI7XG4gIGVsc2Uge1xuICAgIHRoaXMuX3B1YkJ5dGVzID0gcGFyc2VCeXRlcyhwYXJhbXMucHViKTtcbiAgICBpZiAodGhpcy5fcHViQnl0ZXMgJiYgdGhpcy5fcHViQnl0ZXMubGVuZ3RoID09PSAzMyAmJlxuICAgICAgICB0aGlzLl9wdWJCeXRlc1swXSA9PT0gMHg0MClcbiAgICAgIHRoaXMuX3B1YkJ5dGVzID0gdGhpcy5fcHViQnl0ZXMuc2xpY2UoMSwgMzMpO1xuICAgIGlmICh0aGlzLl9wdWJCeXRlcyAmJiB0aGlzLl9wdWJCeXRlcy5sZW5ndGggIT09IDMyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHBvaW50IGNvbXByZXNzaW9uIGZvcm1hdCcpO1xuICB9XG59XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWRkc2EsIHB1Yikge1xuICBpZiAocHViIGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHViO1xuICByZXR1cm4gbmV3IEtleVBhaXIoZWRkc2EsIHsgcHViOiBwdWIgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21TZWNyZXQgPSBmdW5jdGlvbiBmcm9tU2VjcmV0KGVkZHNhLCBzZWNyZXQpIHtcbiAgaWYgKHNlY3JldCBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHNlY3JldDtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVkZHNhLCB7IHNlY3JldDogc2VjcmV0IH0pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2VjcmV0ID0gZnVuY3Rpb24gc2VjcmV0KCkge1xuICByZXR1cm4gdGhpcy5fc2VjcmV0O1xufTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3B1YkJ5dGVzJywgZnVuY3Rpb24gcHViQnl0ZXMoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwdWInLCBmdW5jdGlvbiBwdWIoKSB7XG4gIGlmICh0aGlzLl9wdWJCeXRlcylcbiAgICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk7XG4gIHJldHVybiB0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHJpdkJ5dGVzJywgZnVuY3Rpb24gcHJpdkJ5dGVzKCkge1xuICB2YXIgZWRkc2EgPSB0aGlzLmVkZHNhO1xuICB2YXIgaGFzaCA9IHRoaXMuaGFzaCgpO1xuICB2YXIgbGFzdEl4ID0gZWRkc2EuZW5jb2RpbmdMZW5ndGggLSAxO1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MDMyI3NlY3Rpb24tNS4xLjVcbiAgdmFyIGEgPSBoYXNoLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbiAgYVswXSAmPSAyNDg7XG4gIGFbbGFzdEl4XSAmPSAxMjc7XG4gIGFbbGFzdEl4XSB8PSA2NDtcblxuICByZXR1cm4gYTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHJpdicsIGZ1bmN0aW9uIHByaXYoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAnaGFzaCcsIGZ1bmN0aW9uIGhhc2goKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ21lc3NhZ2VQcmVmaXgnLCBmdW5jdGlvbiBtZXNzYWdlUHJlZml4KCkge1xuICByZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCk7XG59KTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWVzc2FnZSkge1xuICBhc3NlcnQodGhpcy5fc2VjcmV0LCAnS2V5UGFpciBjYW4gb25seSB2ZXJpZnknKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2Euc2lnbihtZXNzYWdlLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlLCBzaWcpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KG1lc3NhZ2UsIHNpZywgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRTZWNyZXQgPSBmdW5jdGlvbiBnZXRTZWNyZXQoZW5jKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGlzIHB1YmxpYyBvbmx5Jyk7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5zZWNyZXQoKSwgZW5jKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhlbmMsIGNvbXBhY3QpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSgoY29tcGFjdCA/IFsgMHg0MCBdIDogW10pLmNvbmNhdCh0aGlzLnB1YkJ5dGVzKCkpLCBlbmMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlQYWlyO1xuXG59LHtcIi4uLy4uL2VsbGlwdGljXCI6MjY3fV0sMjc5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gX2RlcmVxXygnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IF9kZXJlcV8oJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gZWRkc2EgaW5zdGFuY2VcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58T2JqZWN0fSBzaWcgLVxuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPnxQb2ludH0gW3NpZy5SXSAtIFIgcG9pbnQgYXMgUG9pbnQgb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58Ym59IFtzaWcuU10gLSBTIHNjYWxhciBhcyBibiBvciBieXRlc1xuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPn0gW3NpZy5SZW5jb2RlZF0gLSBSIHBvaW50IGVuY29kZWRcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuU2VuY29kZWRdIC0gUyBzY2FsYXIgZW5jb2RlZFxuKi9cbmZ1bmN0aW9uIFNpZ25hdHVyZShlZGRzYSwgc2lnKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcblxuICBpZiAodHlwZW9mIHNpZyAhPT0gJ29iamVjdCcpXG4gICAgc2lnID0gcGFyc2VCeXRlcyhzaWcpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHNpZykpIHtcbiAgICBzaWcgPSB7XG4gICAgICBSOiBzaWcuc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpLFxuICAgICAgUzogc2lnLnNsaWNlKGVkZHNhLmVuY29kaW5nTGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBhc3NlcnQoc2lnLlIgJiYgc2lnLlMsICdTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMnKTtcblxuICBpZiAoZWRkc2EuaXNQb2ludChzaWcuUikpXG4gICAgdGhpcy5fUiA9IHNpZy5SO1xuICBpZiAoc2lnLlMgaW5zdGFuY2VvZiBCTilcbiAgICB0aGlzLl9TID0gc2lnLlM7XG5cbiAgdGhpcy5fUmVuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5SKSA/IHNpZy5SIDogc2lnLlJlbmNvZGVkO1xuICB0aGlzLl9TZW5jb2RlZCA9IEFycmF5LmlzQXJyYXkoc2lnLlMpID8gc2lnLlMgOiBzaWcuU2VuY29kZWQ7XG59XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1MnLCBmdW5jdGlvbiBTKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSJywgZnVuY3Rpb24gUigpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSZW5jb2RlZCcsIGZ1bmN0aW9uIFJlbmNvZGVkKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnU2VuY29kZWQnLCBmdW5jdGlvbiBTZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKTtcbn0pO1xuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKCkge1xuICByZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpO1xufTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0hleCA9IGZ1bmN0aW9uIHRvSGV4KCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMudG9CeXRlcygpLCAnaGV4JykudG9VcHBlckNhc2UoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuXG59LHtcIi4uLy4uL2VsbGlwdGljXCI6MjY3LFwiYm4uanNcIjo0NH1dLDI4MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZG91Ymxlczoge1xuICAgIHN0ZXA6IDQsXG4gICAgcG9pbnRzOiBbXG4gICAgICBbXG4gICAgICAgICdlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhJyxcbiAgICAgICAgJ2Y3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCcsXG4gICAgICAgICcxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzknLFxuICAgICAgICAnZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwJyxcbiAgICAgICAgJzRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjJyxcbiAgICAgICAgJzRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYScsXG4gICAgICAgICc5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEnLFxuICAgICAgICAnNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwJyxcbiAgICAgICAgJ2NkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCcsXG4gICAgICAgICc5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQnLFxuICAgICAgICAnZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxJyxcbiAgICAgICAgJzliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCcsXG4gICAgICAgICc1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDcnLFxuICAgICAgICAnMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyJyxcbiAgICAgICAgJzI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3JyxcbiAgICAgICAgJzdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCcsXG4gICAgICAgICc1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMnLFxuICAgICAgICAnN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEnLFxuICAgICAgICAnNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4JyxcbiAgICAgICAgJ2JjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCcsXG4gICAgICAgICc0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUnLFxuICAgICAgICAnN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0JyxcbiAgICAgICAgJzRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYycsXG4gICAgICAgICcxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYnLFxuICAgICAgICAnNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5JyxcbiAgICAgICAgJ2M5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MScsXG4gICAgICAgICc4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGInLFxuICAgICAgICAnZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzJyxcbiAgICAgICAgJzI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCcsXG4gICAgICAgICdlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2EzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAnLFxuICAgICAgICAnNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0JyxcbiAgICAgICAgJ2U1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhJyxcbiAgICAgICAgJzY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMScsXG4gICAgICAgICcxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUnLFxuICAgICAgICAnZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxJyxcbiAgICAgICAgJzJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZicsXG4gICAgICAgICc2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCcsXG4gICAgICAgICdkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQnLFxuICAgICAgICAnNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2JyxcbiAgICAgICAgJzM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QnLFxuICAgICAgICAnZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1JyxcbiAgICAgICAgJzlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NicsXG4gICAgICAgICc0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEnLFxuICAgICAgICAnMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMnLFxuICAgICAgICAnYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxJyxcbiAgICAgICAgJzFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZScsXG4gICAgICAgICc0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEnLFxuICAgICAgICAnYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzJyxcbiAgICAgICAgJ2JlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZicsXG4gICAgICAgICc0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTknLFxuICAgICAgICAnYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlJyxcbiAgICAgICAgJ2IzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOScsXG4gICAgICAgICc2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzInLFxuICAgICAgICAnODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzJyxcbiAgICAgICAgJzdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YycsXG4gICAgICAgICdjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEnLFxuICAgICAgICAnMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxJyxcbiAgICAgICAgJ2U4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MycsXG4gICAgICAgICdkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgnLFxuICAgICAgICAnMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiJyxcbiAgICAgICAgJzY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NicsXG4gICAgICAgICdkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYScsXG4gICAgICAgICc0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCcsXG4gICAgICAgICc2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODcnLFxuICAgICAgICAnN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlJyxcbiAgICAgICAgJ2VhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODInXG4gICAgICBdXG4gICAgXVxuICB9LFxuICBuYWY6IHtcbiAgICB3bmQ6IDcsXG4gICAgcG9pbnRzOiBbXG4gICAgICBbXG4gICAgICAgICdmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5JyxcbiAgICAgICAgJzM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCcsXG4gICAgICAgICdkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMnLFxuICAgICAgICAnNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlJyxcbiAgICAgICAgJ2NjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYicsXG4gICAgICAgICdkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgnLFxuICAgICAgICAnYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUnLFxuICAgICAgICAnNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0JyxcbiAgICAgICAgJzQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YycsXG4gICAgICAgICc4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUnLFxuICAgICAgICAnMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmJyxcbiAgICAgICAgJzJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0JyxcbiAgICAgICAgJzczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOScsXG4gICAgICAgICdhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGInLFxuICAgICAgICAnMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0JyxcbiAgICAgICAgJ2UwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNScsXG4gICAgICAgICdiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzknLFxuICAgICAgICAnMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QnLFxuICAgICAgICAnODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmJyxcbiAgICAgICAgJzFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYicsXG4gICAgICAgICdkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOScsXG4gICAgICAgICdlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MycsXG4gICAgICAgICc3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQnLFxuICAgICAgICAnOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwJyxcbiAgICAgICAgJ2UwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YicsXG4gICAgICAgICc1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDcnLFxuICAgICAgICAnY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxJyxcbiAgICAgICAgJ2NiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCcsXG4gICAgICAgICc0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUnLFxuICAgICAgICAnOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgnLFxuICAgICAgICAnNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgnLFxuICAgICAgICAnNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViJyxcbiAgICAgICAgJzNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZicsXG4gICAgICAgICc1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMnLFxuICAgICAgICAnZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhJyxcbiAgICAgICAgJ2UzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NScsXG4gICAgICAgICdmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEnLFxuICAgICAgICAnNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlJyxcbiAgICAgICAgJ2M1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCcsXG4gICAgICAgICdlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMnLFxuICAgICAgICAnMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5JyxcbiAgICAgICAgJ2U0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYicsXG4gICAgICAgICcxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EnLFxuICAgICAgICAnZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmJyxcbiAgICAgICAgJzhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCcsXG4gICAgICAgICc2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQnLFxuICAgICAgICAnZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjJyxcbiAgICAgICAgJ2Q1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCcsXG4gICAgICAgICdlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAnLFxuICAgICAgICAnYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMnLFxuICAgICAgICAnNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmJyxcbiAgICAgICAgJzk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzJyxcbiAgICAgICAgJzRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCcsXG4gICAgICAgICdmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYnLFxuICAgICAgICAnNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1JyxcbiAgICAgICAgJzhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNicsXG4gICAgICAgICc4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUnLFxuICAgICAgICAnNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5JyxcbiAgICAgICAgJ2Y2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxJyxcbiAgICAgICAgJ2YzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNScsXG4gICAgICAgICc0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUnLFxuICAgICAgICAnMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3JyxcbiAgICAgICAgJzRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxJyxcbiAgICAgICAgJzczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1JyxcbiAgICAgICAgJzM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NicsXG4gICAgICAgICdkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNicsXG4gICAgICAgICdlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUnLFxuICAgICAgICAnNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0JyxcbiAgICAgICAgJzYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxJyxcbiAgICAgICAgJzNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MScsXG4gICAgICAgICdiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MicsXG4gICAgICAgICdhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNScsXG4gICAgICAgICdjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2InLFxuICAgICAgICAnNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0JyxcbiAgICAgICAgJzMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZicsXG4gICAgICAgICc2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5JyxcbiAgICAgICAgJzJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NicsXG4gICAgICAgICdiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQnLFxuICAgICAgICAnOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhJyxcbiAgICAgICAgJ2IyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCcsXG4gICAgICAgICdiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTcnLFxuICAgICAgICAnNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMnLFxuICAgICAgICAnYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmJyxcbiAgICAgICAgJzIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4JyxcbiAgICAgICAgJzYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YScsXG4gICAgICAgICc0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEnLFxuICAgICAgICAnNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyJyxcbiAgICAgICAgJzc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYScsXG4gICAgICAgICdiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYnLFxuICAgICAgICAnOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2JyxcbiAgICAgICAgJzM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZScsXG4gICAgICAgICc2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQnLFxuICAgICAgICAnMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhJyxcbiAgICAgICAgJ2VjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OScsXG4gICAgICAgICdjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYnLFxuICAgICAgICAnZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjJyxcbiAgICAgICAgJzZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MicsXG4gICAgICAgICdmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEnLFxuICAgICAgICAnMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwJyxcbiAgICAgICAgJzVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCcsXG4gICAgICAgICc0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEnLFxuICAgICAgICAnY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzJyxcbiAgICAgICAgJ2MzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyJyxcbiAgICAgICAgJzZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MycsXG4gICAgICAgICdjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAnLFxuICAgICAgICAnOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgnLFxuICAgICAgICAnZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3JyxcbiAgICAgICAgJ2QzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCcsXG4gICAgICAgICdjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UnLFxuICAgICAgICAnNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkJyxcbiAgICAgICAgJ2NkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiJyxcbiAgICAgICAgJzI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZicsXG4gICAgICAgICdmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYnLFxuICAgICAgICAnNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3JyxcbiAgICAgICAgJzYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YScsXG4gICAgICAgICc3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2IwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMnLFxuICAgICAgICAnYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyJyxcbiAgICAgICAgJzRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYicsXG4gICAgICAgICdiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUnLFxuICAgICAgICAnYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3JyxcbiAgICAgICAgJzYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOScsXG4gICAgICAgICdjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMnLFxuICAgICAgICAnNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3JyxcbiAgICAgICAgJzcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2JyxcbiAgICAgICAgJ2VkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCcsXG4gICAgICAgICc5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEnLFxuICAgICAgICAnOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwJyxcbiAgICAgICAgJzQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjknXG4gICAgICBdXG4gICAgXVxuICB9XG59O1xuXG59LHt9XSwyODE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBleHBvcnRzO1xudmFyIEJOID0gX2RlcmVxXygnYm4uanMnKTtcbnZhciBtaW5Bc3NlcnQgPSBfZGVyZXFfKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG52YXIgbWluVXRpbHMgPSBfZGVyZXFfKCdtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzJyk7XG5cbnV0aWxzLmFzc2VydCA9IG1pbkFzc2VydDtcbnV0aWxzLnRvQXJyYXkgPSBtaW5VdGlscy50b0FycmF5O1xudXRpbHMuemVybzIgPSBtaW5VdGlscy56ZXJvMjtcbnV0aWxzLnRvSGV4ID0gbWluVXRpbHMudG9IZXg7XG51dGlscy5lbmNvZGUgPSBtaW5VdGlscy5lbmNvZGU7XG5cbi8vIFJlcHJlc2VudCBudW0gaW4gYSB3LU5BRiBmb3JtXG5mdW5jdGlvbiBnZXROQUYobnVtLCB3KSB7XG4gIHZhciBuYWYgPSBbXTtcbiAgdmFyIHdzID0gMSA8PCAodyArIDEpO1xuICB2YXIgayA9IG51bS5jbG9uZSgpO1xuICB3aGlsZSAoay5jbXBuKDEpID49IDApIHtcbiAgICB2YXIgejtcbiAgICBpZiAoay5pc09kZCgpKSB7XG4gICAgICB2YXIgbW9kID0gay5hbmRsbih3cyAtIDEpO1xuICAgICAgaWYgKG1vZCA+ICh3cyA+PiAxKSAtIDEpXG4gICAgICAgIHogPSAod3MgPj4gMSkgLSBtb2Q7XG4gICAgICBlbHNlXG4gICAgICAgIHogPSBtb2Q7XG4gICAgICBrLmlzdWJuKHopO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ID0gMDtcbiAgICB9XG4gICAgbmFmLnB1c2goeik7XG5cbiAgICAvLyBPcHRpbWl6YXRpb24sIHNoaWZ0IGJ5IHdvcmQgaWYgcG9zc2libGVcbiAgICB2YXIgc2hpZnQgPSAoay5jbXBuKDApICE9PSAwICYmIGsuYW5kbG4od3MgLSAxKSA9PT0gMCkgPyAodyArIDEpIDogMTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHNoaWZ0OyBpKyspXG4gICAgICBuYWYucHVzaCgwKTtcbiAgICBrLml1c2hybihzaGlmdCk7XG4gIH1cblxuICByZXR1cm4gbmFmO1xufVxudXRpbHMuZ2V0TkFGID0gZ2V0TkFGO1xuXG4vLyBSZXByZXNlbnQgazEsIGsyIGluIGEgSm9pbnQgU3BhcnNlIEZvcm1cbmZ1bmN0aW9uIGdldEpTRihrMSwgazIpIHtcbiAgdmFyIGpzZiA9IFtcbiAgICBbXSxcbiAgICBbXVxuICBdO1xuXG4gIGsxID0gazEuY2xvbmUoKTtcbiAgazIgPSBrMi5jbG9uZSgpO1xuICB2YXIgZDEgPSAwO1xuICB2YXIgZDIgPSAwO1xuICB3aGlsZSAoazEuY21wbigtZDEpID4gMCB8fCBrMi5jbXBuKC1kMikgPiAwKSB7XG5cbiAgICAvLyBGaXJzdCBwaGFzZVxuICAgIHZhciBtMTQgPSAoazEuYW5kbG4oMykgKyBkMSkgJiAzO1xuICAgIHZhciBtMjQgPSAoazIuYW5kbG4oMykgKyBkMikgJiAzO1xuICAgIGlmIChtMTQgPT09IDMpXG4gICAgICBtMTQgPSAtMTtcbiAgICBpZiAobTI0ID09PSAzKVxuICAgICAgbTI0ID0gLTE7XG4gICAgdmFyIHUxO1xuICAgIGlmICgobTE0ICYgMSkgPT09IDApIHtcbiAgICAgIHUxID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG04ID0gKGsxLmFuZGxuKDcpICsgZDEpICYgNztcbiAgICAgIGlmICgobTggPT09IDMgfHwgbTggPT09IDUpICYmIG0yNCA9PT0gMilcbiAgICAgICAgdTEgPSAtbTE0O1xuICAgICAgZWxzZVxuICAgICAgICB1MSA9IG0xNDtcbiAgICB9XG4gICAganNmWzBdLnB1c2godTEpO1xuXG4gICAgdmFyIHUyO1xuICAgIGlmICgobTI0ICYgMSkgPT09IDApIHtcbiAgICAgIHUyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG04ID0gKGsyLmFuZGxuKDcpICsgZDIpICYgNztcbiAgICAgIGlmICgobTggPT09IDMgfHwgbTggPT09IDUpICYmIG0xNCA9PT0gMilcbiAgICAgICAgdTIgPSAtbTI0O1xuICAgICAgZWxzZVxuICAgICAgICB1MiA9IG0yNDtcbiAgICB9XG4gICAganNmWzFdLnB1c2godTIpO1xuXG4gICAgLy8gU2Vjb25kIHBoYXNlXG4gICAgaWYgKDIgKiBkMSA9PT0gdTEgKyAxKVxuICAgICAgZDEgPSAxIC0gZDE7XG4gICAgaWYgKDIgKiBkMiA9PT0gdTIgKyAxKVxuICAgICAgZDIgPSAxIC0gZDI7XG4gICAgazEuaXVzaHJuKDEpO1xuICAgIGsyLml1c2hybigxKTtcbiAgfVxuXG4gIHJldHVybiBqc2Y7XG59XG51dGlscy5nZXRKU0YgPSBnZXRKU0Y7XG5cbmZ1bmN0aW9uIGNhY2hlZFByb3BlcnR5KG9iaiwgbmFtZSwgY29tcHV0ZXIpIHtcbiAgdmFyIGtleSA9ICdfJyArIG5hbWU7XG4gIG9iai5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpc1trZXldICE9PSB1bmRlZmluZWQgPyB0aGlzW2tleV0gOlxuICAgICAgICAgICB0aGlzW2tleV0gPSBjb21wdXRlci5jYWxsKHRoaXMpO1xuICB9O1xufVxudXRpbHMuY2FjaGVkUHJvcGVydHkgPSBjYWNoZWRQcm9wZXJ0eTtcblxuZnVuY3Rpb24gcGFyc2VCeXRlcyhieXRlcykge1xuICByZXR1cm4gdHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJyA/IHV0aWxzLnRvQXJyYXkoYnl0ZXMsICdoZXgnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXM7XG59XG51dGlscy5wYXJzZUJ5dGVzID0gcGFyc2VCeXRlcztcblxuZnVuY3Rpb24gaW50RnJvbUxFKGJ5dGVzKSB7XG4gIHJldHVybiBuZXcgQk4oYnl0ZXMsICdoZXgnLCAnbGUnKTtcbn1cbnV0aWxzLmludEZyb21MRSA9IGludEZyb21MRTtcblxuXG59LHtcImJuLmpzXCI6NDQsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6Mjk5LFwibWluaW1hbGlzdGljLWNyeXB0by11dGlsc1wiOjMwMH1dLDI4MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cz17XG4gIFwiX2FyZ3NcIjogW1xuICAgIFtcbiAgICAgIFwiZ2l0aHViOm9wZW5wZ3Bqcy9lbGxpcHRpY1wiLFxuICAgICAgXCIvVXNlcnMvc3VubnkvRGVza3RvcC9Qcm90b25tYWlsL29wZW5wZ3Bqc1wiXG4gICAgXVxuICBdLFxuICBcIl9mcm9tXCI6IFwiZ2l0aHViOm9wZW5wZ3Bqcy9lbGxpcHRpY1wiLFxuICBcIl9pZFwiOiBcImVsbGlwdGljQGdpdGh1YjpvcGVucGdwanMvZWxsaXB0aWMjZTE4N2U3MDZlMTFmYTUxYmNkMjBlNDZlNTExOTA1NGJlNGUyYTRhNlwiLFxuICBcIl9pbkJ1bmRsZVwiOiBmYWxzZSxcbiAgXCJfaW50ZWdyaXR5XCI6IFwiXCIsXG4gIFwiX2xvY2F0aW9uXCI6IFwiL2VsbGlwdGljXCIsXG4gIFwiX3BoYW50b21DaGlsZHJlblwiOiB7fSxcbiAgXCJfcmVxdWVzdGVkXCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInJhd1wiOiBcImdpdGh1YjpvcGVucGdwanMvZWxsaXB0aWNcIixcbiAgICBcInJhd1NwZWNcIjogXCJnaXRodWI6b3BlbnBncGpzL2VsbGlwdGljXCIsXG4gICAgXCJzYXZlU3BlY1wiOiBcImdpdGh1YjpvcGVucGdwanMvZWxsaXB0aWNcIixcbiAgICBcImZldGNoU3BlY1wiOiBudWxsLFxuICAgIFwiZ2l0Q29tbWl0dGlzaFwiOiBudWxsXG4gIH0sXG4gIFwiX3JlcXVpcmVkQnlcIjogW1xuICAgIFwiL1wiXG4gIF0sXG4gIFwiX3Jlc29sdmVkXCI6IFwiZ2l0aHViOm9wZW5wZ3Bqcy9lbGxpcHRpYyNlMTg3ZTcwNmUxMWZhNTFiY2QyMGU0NmU1MTE5MDU0YmU0ZTJhNGE2XCIsXG4gIFwiX3NwZWNcIjogXCJnaXRodWI6b3BlbnBncGpzL2VsbGlwdGljXCIsXG4gIFwiX3doZXJlXCI6IFwiL1VzZXJzL3N1bm55L0Rlc2t0b3AvUHJvdG9ubWFpbC9vcGVucGdwanNcIixcbiAgXCJhdXRob3JcIjoge1xuICAgIFwibmFtZVwiOiBcIkZlZG9yIEluZHV0bnlcIixcbiAgICBcImVtYWlsXCI6IFwiZmVkb3JAaW5kdXRueS5jb21cIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYm4uanNcIjogXCJeNC40LjBcIixcbiAgICBcImJyb3JhbmRcIjogXCJeMS4wLjFcIixcbiAgICBcImhhc2guanNcIjogXCJeMS4wLjBcIixcbiAgICBcImhtYWMtZHJiZ1wiOiBcIl4xLjAuMFwiLFxuICAgIFwiaW5oZXJpdHNcIjogXCJeMi4wLjFcIixcbiAgICBcIm1pbmltYWxpc3RpYy1hc3NlcnRcIjogXCJeMS4wLjBcIixcbiAgICBcIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHNcIjogXCJeMS4wLjBcIlxuICB9LFxuICBcImRlc2NyaXB0aW9uXCI6IFwiRUMgY3J5cHRvZ3JhcGh5XCIsXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyZnNcIjogXCJeMS40LjNcIixcbiAgICBcImNvdmVyYWxsc1wiOiBcIl4yLjExLjNcIixcbiAgICBcImdydW50XCI6IFwiXjAuNC41XCIsXG4gICAgXCJncnVudC1icm93c2VyaWZ5XCI6IFwiXjUuMC4wXCIsXG4gICAgXCJncnVudC1jbGlcIjogXCJeMS4yLjBcIixcbiAgICBcImdydW50LWNvbnRyaWItY29ubmVjdFwiOiBcIl4xLjAuMFwiLFxuICAgIFwiZ3J1bnQtY29udHJpYi1jb3B5XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJncnVudC1jb250cmliLXVnbGlmeVwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3J1bnQtbW9jaGEtaXN0YW5idWxcIjogXCJeMy4wLjFcIixcbiAgICBcImdydW50LXNhdWNlbGFic1wiOiBcIl44LjYuMlwiLFxuICAgIFwiaXN0YW5idWxcIjogXCJeMC40LjJcIixcbiAgICBcImpzY3NcIjogXCJeMi45LjBcIixcbiAgICBcImpzaGludFwiOiBcIl4yLjYuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4xLjBcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImxpYlwiXG4gIF0sXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpY1wiLFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcIkVDXCIsXG4gICAgXCJFbGxpcHRpY1wiLFxuICAgIFwiY3VydmVcIixcbiAgICBcIkNyeXB0b2dyYXBoeVwiXG4gIF0sXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcIm1haW5cIjogXCJsaWIvZWxsaXB0aWMuanNcIixcbiAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJqc2NzXCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwianNoaW50XCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwibGludFwiOiBcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIixcbiAgICBcInVuaXRcIjogXCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwidmVyc2lvblwiOiBcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjYuNC4wXCJcbn1cblxufSx7fV0sMjgzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxuLy8gZW1haWwtYWRkcmVzc2VzLmpzIC0gUkZDIDUzMjIgZW1haWwgYWRkcmVzcyBwYXJzZXJcbi8vIHYgMy4wLjFcbi8vXG4vLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MzIyXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGRvZXMgbm90IHZhbGlkYXRlIGVtYWlsIGFkZHJlc3Nlcy5cbi8vIGVtYWlsQWRkcmVzc2VzIGF0dGVtcHRzIHRvIHBhcnNlIGFkZHJlc3NlcyB1c2luZyB0aGUgKGZhaXJseSBsaWJlcmFsKVxuLy8gZ3JhbW1hciBzcGVjaWZpZWQgaW4gUkZDIDUzMjIuXG4vL1xuLy8gZW1haWwtYWRkcmVzc2VzIHJldHVybnMge1xuLy8gICAgIGFzdDogPGFuIGFic3RyYWN0IHN5bnRheCB0cmVlIGJhc2VkIG9uIHJmYzUzMjI+LFxuLy8gICAgIGFkZHJlc3NlczogW3tcbi8vICAgICAgICAgICAgbm9kZTogPG5vZGUgaW4gYXN0IGZvciB0aGlzIGFkZHJlc3M+LFxuLy8gICAgICAgICAgICBuYW1lOiA8ZGlzcGxheS1uYW1lPixcbi8vICAgICAgICAgICAgYWRkcmVzczogPGFkZHItc3BlYz4sXG4vLyAgICAgICAgICAgIGxvY2FsOiA8bG9jYWwtcGFydD4sXG4vLyAgICAgICAgICAgIGRvbWFpbjogPGRvbWFpbj5cbi8vICAgICAgICAgfSwgLi4uXVxuLy8gfVxuLy9cbi8vIGVtYWlsQWRkcmVzc2VzLnBhcnNlT25lQWRkcmVzcyBhbmQgZW1haWxBZGRyZXNzZXMucGFyc2VBZGRyZXNzTGlzdFxuLy8gd29yayBhcyB5b3UgbWlnaHQgZXhwZWN0LiBUcnkgaXQgb3V0LlxuLy9cbi8vIE1hbnkgdGhhbmtzIHRvIERvbWluaWMgU2F5ZXJzIGFuZCBoaXMgZG9jdW1lbnRhdGlvbiBvbiB0aGUgaXNfZW1haWwgZnVuY3Rpb24sXG4vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvaXNlbWFpbC8gLCB3aGljaCBoZWxwZWQgZ3JlYXRseSBpbiB3cml0aW5nIHRoaXMgcGFyc2VyLlxuXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIHBhcnNlNTMyMihvcHRzKSB7XG5cbiAgICAvLyB0b2tlbml6aW5nIGZ1bmN0aW9uc1xuXG4gICAgZnVuY3Rpb24gaW5TdHIoKSB7IHJldHVybiBwb3MgPCBsZW47IH1cbiAgICBmdW5jdGlvbiBjdXJUb2soKSB7IHJldHVybiBwYXJzZVN0cmluZ1twb3NdOyB9XG4gICAgZnVuY3Rpb24gZ2V0UG9zKCkgeyByZXR1cm4gcG9zOyB9XG4gICAgZnVuY3Rpb24gc2V0UG9zKGkpIHsgcG9zID0gaTsgfVxuICAgIGZ1bmN0aW9uIG5leHRUb2soKSB7IHBvcyArPSAxOyB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcG9zID0gMDtcbiAgICAgICAgbGVuID0gcGFyc2VTdHJpbmcubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIHBhcnNlciBoZWxwZXIgZnVuY3Rpb25zXG5cbiAgICBmdW5jdGlvbiBvKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdG9rZW5zOiB2YWx1ZSB8fCBcIlwiLFxuICAgICAgICAgICAgc2VtYW50aWM6IHZhbHVlIHx8IFwiXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwKG5hbWUsIGFzdCkge1xuICAgICAgICB2YXIgbjtcbiAgICAgICAgaWYgKGFzdCA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBuID0gbyhuYW1lKTtcbiAgICAgICAgbi50b2tlbnMgPSBhc3QudG9rZW5zO1xuICAgICAgICBuLnNlbWFudGljID0gYXN0LnNlbWFudGljO1xuICAgICAgICBuLmNoaWxkcmVuLnB1c2goYXN0KTtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkKHBhcmVudCwgY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXJlbnQudG9rZW5zICs9IGNoaWxkLnRva2VucztcbiAgICAgICAgICAgIHBhcmVudC5zZW1hbnRpYyArPSBjaGlsZC5zZW1hbnRpYztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcGFyZVRva2VuKGZ4bkNvbXBhcmUpIHtcbiAgICAgICAgdmFyIHRvaztcbiAgICAgICAgaWYgKCFpblN0cigpKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIHRvayA9IGN1clRvaygpO1xuICAgICAgICBpZiAoZnhuQ29tcGFyZSh0b2spKSB7XG4gICAgICAgICAgICBuZXh0VG9rKCk7XG4gICAgICAgICAgICByZXR1cm4gbygndG9rZW4nLCB0b2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpdGVyYWwobGl0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBsaXRlcmFsRnVuYygpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwKCdsaXRlcmFsJywgY29tcGFyZVRva2VuKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rID09PSBsaXQ7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYW5kKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFuZEZ1bmMoKSB7XG4gICAgICAgICAgICB2YXIgaSwgcywgcmVzdWx0LCBzdGFydDtcbiAgICAgICAgICAgIHN0YXJ0ID0gZ2V0UG9zKCk7XG4gICAgICAgICAgICBzID0gbygnYW5kJyk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3NbaV0oKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFBvcyhzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGQocywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9yKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9yRnVuYygpIHtcbiAgICAgICAgICAgIHZhciBpLCByZXN1bHQsIHN0YXJ0O1xuICAgICAgICAgICAgc3RhcnQgPSBnZXRQb3MoKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXJnc1tpXSgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0UG9zKHN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wdChwcm9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvcHRGdW5jKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgc3RhcnQ7XG4gICAgICAgICAgICBzdGFydCA9IGdldFBvcygpO1xuICAgICAgICAgICAgcmVzdWx0ID0gcHJvZCgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRQb3Moc3RhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvKCdvcHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZpcyhwcm9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnZpc0Z1bmMoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcHJvZCgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbHdzcChwcm9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjb2xsYXBzZVNlbWFudGljV2hpdGVzcGFjZSgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwcm9kKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdC5zZW1hbnRpYy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNlbWFudGljID0gXCIgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXIocHJvZCwgbWluaW11bSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gc3RhckZ1bmMoKSB7XG4gICAgICAgICAgICB2YXIgcywgcmVzdWx0LCBjb3VudCwgc3RhcnQsIG1pbjtcbiAgICAgICAgICAgIHN0YXJ0ID0gZ2V0UG9zKCk7XG4gICAgICAgICAgICBzID0gbygnc3RhcicpO1xuICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgICAgbWluID0gbWluaW11bSA9PT0gdW5kZWZpbmVkID8gMCA6IG1pbmltdW07XG4gICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHByb2QoKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgICAgICAgICAgICAgICBhZGQocywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3VudCA+PSBtaW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFBvcyhzdGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT25lIGV4cGVjdHMgbmFtZXMgdG8gZ2V0IG5vcm1hbGl6ZWQgbGlrZSB0aGlzOlxuICAgIC8vIFwiICBGaXJzdCAgTGFzdCBcIiAtPiBcIkZpcnN0IExhc3RcIlxuICAgIC8vIFwiRmlyc3QgTGFzdFwiIC0+IFwiRmlyc3QgTGFzdFwiXG4gICAgLy8gXCJGaXJzdCAgIExhc3RcIiAtPiBcIkZpcnN0IExhc3RcIlxuICAgIGZ1bmN0aW9uIGNvbGxhcHNlV2hpdGVzcGFjZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoLyhbIFxcdF18XFxyXFxuKSsvZywgJyAnKS5yZXBsYWNlKC9eXFxzKi8sICcnKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICAvLyBVVEYtOCBwc2V1ZG8tcHJvZHVjdGlvbiAoUkZDIDY1MzIpXG4gICAgLy8gUkZDIDY1MzIgZXh0ZW5kcyBSRkMgNTMyMiBwcm9kdWN0aW9ucyB0byBpbmNsdWRlIFVURi04XG4gICAgLy8gdXNpbmcgdGhlIGZvbGxvd2luZyBwcm9kdWN0aW9uczpcbiAgICAvLyBVVEY4LW5vbi1hc2NpaSAgPSAgIFVURjgtMiAvIFVURjgtMyAvIFVURjgtNFxuICAgIC8vIFVURjgtMiAgICAgICAgICA9ICAgPERlZmluZWQgaW4gU2VjdGlvbiA0IG9mIFJGQzM2Mjk+XG4gICAgLy8gVVRGOC0zICAgICAgICAgID0gICA8RGVmaW5lZCBpbiBTZWN0aW9uIDQgb2YgUkZDMzYyOT5cbiAgICAvLyBVVEY4LTQgICAgICAgICAgPSAgIDxEZWZpbmVkIGluIFNlY3Rpb24gNCBvZiBSRkMzNjI5PlxuICAgIC8vXG4gICAgLy8gRm9yIHJlZmVyZW5jZSwgdGhlIGV4dGVuZGVkIFJGQyA1MzIyIHByb2R1Y3Rpb25zIGFyZTpcbiAgICAvLyBWQ0hBUiAgID0vICBVVEY4LW5vbi1hc2NpaVxuICAgIC8vIGN0ZXh0ICAgPS8gIFVURjgtbm9uLWFzY2lpXG4gICAgLy8gYXRleHQgICA9LyAgVVRGOC1ub24tYXNjaWlcbiAgICAvLyBxdGV4dCAgID0vICBVVEY4LW5vbi1hc2NpaVxuICAgIC8vIGR0ZXh0ICAgPS8gIFVURjgtbm9uLWFzY2lpXG4gICAgZnVuY3Rpb24gaXNVVEY4Tm9uQXNjaWkodG9rKSB7XG4gICAgICAgIC8vIEluIEphdmFTY3JpcHQsIHdlIGp1c3QgZGVhbCBkaXJlY3RseSB3aXRoIFVuaWNvZGUgY29kZSBwb2ludHMsXG4gICAgICAgIC8vIHNvIHdlIGFyZW4ndCBjaGVja2luZyBpbmRpdmlkdWFsIGJ5dGVzIGZvciBVVEYtOCBlbmNvZGluZy5cbiAgICAgICAgLy8gSnVzdCBjaGVjayB0aGF0IHRoZSBjaGFyYWN0ZXIgaXMgbm9uLWFzY2lpLlxuICAgICAgICByZXR1cm4gdG9rLmNoYXJDb2RlQXQoMCkgPj0gMTI4O1xuICAgIH1cblxuXG4gICAgLy8gY29tbW9uIHByb2R1Y3Rpb25zIChSRkMgNTIzNClcbiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjM0XG4gICAgLy8gQi4xLiBDb3JlIFJ1bGVzXG5cbiAgICAvLyBDUiAgICAgICAgICAgICA9ICAleDBEXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgOyBjYXJyaWFnZSByZXR1cm5cbiAgICBmdW5jdGlvbiBjcigpIHsgcmV0dXJuIHdyYXAoJ2NyJywgbGl0ZXJhbCgnXFxyJykoKSk7IH1cblxuICAgIC8vIENSTEYgICAgICAgICAgID0gIENSIExGXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgOyBJbnRlcm5ldCBzdGFuZGFyZCBuZXdsaW5lXG4gICAgZnVuY3Rpb24gY3JsZigpIHsgcmV0dXJuIHdyYXAoJ2NybGYnLCBhbmQoY3IsIGxmKSgpKTsgfVxuXG4gICAgLy8gRFFVT1RFICAgICAgICAgPSAgJXgyMlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIDsgXCIgKERvdWJsZSBRdW90ZSlcbiAgICBmdW5jdGlvbiBkcXVvdGUoKSB7IHJldHVybiB3cmFwKCdkcXVvdGUnLCBsaXRlcmFsKCdcIicpKCkpOyB9XG5cbiAgICAvLyBIVEFCICAgICAgICAgICA9ICAleDA5XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgOyBob3Jpem9udGFsIHRhYlxuICAgIGZ1bmN0aW9uIGh0YWIoKSB7IHJldHVybiB3cmFwKCdodGFiJywgbGl0ZXJhbCgnXFx0JykoKSk7IH1cblxuICAgIC8vIExGICAgICAgICAgICAgID0gICV4MEFcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICA7IGxpbmVmZWVkXG4gICAgZnVuY3Rpb24gbGYoKSB7IHJldHVybiB3cmFwKCdsZicsIGxpdGVyYWwoJ1xcbicpKCkpOyB9XG5cbiAgICAvLyBTUCAgICAgICAgICAgICA9ICAleDIwXG4gICAgZnVuY3Rpb24gc3AoKSB7IHJldHVybiB3cmFwKCdzcCcsIGxpdGVyYWwoJyAnKSgpKTsgfVxuXG4gICAgLy8gVkNIQVIgICAgICAgICAgPSAgJXgyMS03RVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIDsgdmlzaWJsZSAocHJpbnRpbmcpIGNoYXJhY3RlcnNcbiAgICBmdW5jdGlvbiB2Y2hhcigpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ3ZjaGFyJywgY29tcGFyZVRva2VuKGZ1bmN0aW9uIHZjaGFyRnVuYyh0b2spIHtcbiAgICAgICAgICAgIHZhciBjb2RlID0gdG9rLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICB2YXIgYWNjZXB0ID0gKDB4MjEgPD0gY29kZSAmJiBjb2RlIDw9IDB4N0UpO1xuICAgICAgICAgICAgaWYgKG9wdHMucmZjNjUzMikge1xuICAgICAgICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdCB8fCBpc1VURjhOb25Bc2NpaSh0b2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vIFdTUCAgICAgICAgICAgID0gIFNQIC8gSFRBQlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIDsgd2hpdGUgc3BhY2VcbiAgICBmdW5jdGlvbiB3c3AoKSB7IHJldHVybiB3cmFwKCd3c3AnLCBvcihzcCwgaHRhYikoKSk7IH1cblxuXG4gICAgLy8gZW1haWwgcHJvZHVjdGlvbnMgKFJGQyA1MzIyKVxuICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUzMjJcbiAgICAvLyAzLjIuMS4gUXVvdGVkIGNoYXJhY3RlcnNcblxuICAgIC8vIHF1b3RlZC1wYWlyICAgICA9ICAgKFwiXFxcIiAoVkNIQVIgLyBXU1ApKSAvIG9icy1xcFxuICAgIGZ1bmN0aW9uIHF1b3RlZFBhaXIoKSB7XG4gICAgICAgIHZhciBxcCA9IHdyYXAoJ3F1b3RlZC1wYWlyJyxcbiAgICAgICAgb3IoXG4gICAgICAgICAgICBhbmQobGl0ZXJhbCgnXFxcXCcpLCBvcih2Y2hhciwgd3NwKSksXG4gICAgICAgICAgICBvYnNRUFxuICAgICAgICApKCkpO1xuICAgICAgICBpZiAocXAgPT09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICAgICAgLy8gYSBxdW90ZWQgcGFpciB3aWxsIGJlIHR3byBjaGFyYWN0ZXJzLCBhbmQgdGhlIFwiXFxcIiBjaGFyYWN0ZXJcbiAgICAgICAgLy8gc2hvdWxkIGJlIHNlbWFudGljYWxseSBcImludmlzaWJsZVwiIChSRkMgNTMyMiAzLjIuMSlcbiAgICAgICAgcXAuc2VtYW50aWMgPSBxcC5zZW1hbnRpY1sxXTtcbiAgICAgICAgcmV0dXJuIHFwO1xuICAgIH1cblxuICAgIC8vIDMuMi4yLiBGb2xkaW5nIFdoaXRlIFNwYWNlIGFuZCBDb21tZW50c1xuXG4gICAgLy8gRldTICAgICAgICAgICAgID0gICAoWypXU1AgQ1JMRl0gMSpXU1ApIC8gIG9icy1GV1NcbiAgICBmdW5jdGlvbiBmd3MoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdmd3MnLCBvcihcbiAgICAgICAgICAgIG9ic0Z3cyxcbiAgICAgICAgICAgIGFuZChcbiAgICAgICAgICAgICAgICBvcHQoYW5kKFxuICAgICAgICAgICAgICAgICAgICBzdGFyKHdzcCksXG4gICAgICAgICAgICAgICAgICAgIGludmlzKGNybGYpXG4gICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgc3Rhcih3c3AsIDEpXG4gICAgICAgICAgICApXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gY3RleHQgICAgICAgICAgID0gICAlZDMzLTM5IC8gICAgICAgICAgOyBQcmludGFibGUgVVMtQVNDSUlcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICVkNDItOTEgLyAgICAgICAgICA7ICBjaGFyYWN0ZXJzIG5vdCBpbmNsdWRpbmdcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICVkOTMtMTI2IC8gICAgICAgICA7ICBcIihcIiwgXCIpXCIsIG9yIFwiXFxcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgb2JzLWN0ZXh0XG4gICAgZnVuY3Rpb24gY3RleHQoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdjdGV4dCcsIG9yKFxuICAgICAgICAgICAgZnVuY3Rpb24gY3RleHRGdW5jMSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVRva2VuKGZ1bmN0aW9uIGN0ZXh0RnVuYzIodG9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gdG9rLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhY2NlcHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKDMzIDw9IGNvZGUgJiYgY29kZSA8PSAzOSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICg0MiA8PSBjb2RlICYmIGNvZGUgPD0gOTEpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoOTMgPD0gY29kZSAmJiBjb2RlIDw9IDEyNik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLnJmYzY1MzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdCB8fCBpc1VURjhOb25Bc2NpaSh0b2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JzQ3RleHRcbiAgICAgICAgKSgpKTtcbiAgICB9XG5cbiAgICAvLyBjY29udGVudCAgICAgICAgPSAgIGN0ZXh0IC8gcXVvdGVkLXBhaXIgLyBjb21tZW50XG4gICAgZnVuY3Rpb24gY2NvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdjY29udGVudCcsIG9yKGN0ZXh0LCBxdW90ZWRQYWlyLCBjb21tZW50KSgpKTtcbiAgICB9XG5cbiAgICAvLyBjb21tZW50ICAgICAgICAgPSAgIFwiKFwiICooW0ZXU10gY2NvbnRlbnQpIFtGV1NdIFwiKVwiXG4gICAgZnVuY3Rpb24gY29tbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2NvbW1lbnQnLCBhbmQoXG4gICAgICAgICAgICBsaXRlcmFsKCcoJyksXG4gICAgICAgICAgICBzdGFyKGFuZChvcHQoZndzKSwgY2NvbnRlbnQpKSxcbiAgICAgICAgICAgIG9wdChmd3MpLFxuICAgICAgICAgICAgbGl0ZXJhbCgnKScpXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gQ0ZXUyAgICAgICAgICAgID0gICAoMSooW0ZXU10gY29tbWVudCkgW0ZXU10pIC8gRldTXG4gICAgZnVuY3Rpb24gY2Z3cygpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2Nmd3MnLCBvcihcbiAgICAgICAgICAgIGFuZChcbiAgICAgICAgICAgICAgICBzdGFyKFxuICAgICAgICAgICAgICAgICAgICBhbmQob3B0KGZ3cyksIGNvbW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBvcHQoZndzKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZ3c1xuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vIDMuMi4zLiBBdG9tXG5cbiAgICAvL2F0ZXh0ICAgICAgICAgICA9ICAgQUxQSEEgLyBESUdJVCAvICAgIDsgUHJpbnRhYmxlIFVTLUFTQ0lJXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIFwiIVwiIC8gXCIjXCIgLyAgICAgICAgOyAgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIFwiJFwiIC8gXCIlXCIgLyAgICAgICAgOyAgc3BlY2lhbHMuICBVc2VkIGZvciBhdG9tcy5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXCImXCIgLyBcIidcIiAvXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIFwiKlwiIC8gXCIrXCIgL1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBcIi1cIiAvIFwiL1wiIC9cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXCI9XCIgLyBcIj9cIiAvXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIFwiXlwiIC8gXCJfXCIgL1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBcImBcIiAvIFwie1wiIC9cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXCJ8XCIgLyBcIn1cIiAvXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIFwiflwiXG4gICAgZnVuY3Rpb24gYXRleHQoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdhdGV4dCcsIGNvbXBhcmVUb2tlbihmdW5jdGlvbiBhdGV4dEZ1bmModG9rKSB7XG4gICAgICAgICAgICB2YXIgYWNjZXB0ID1cbiAgICAgICAgICAgICAgICAoJ2EnIDw9IHRvayAmJiB0b2sgPD0gJ3onKSB8fFxuICAgICAgICAgICAgICAgICgnQScgPD0gdG9rICYmIHRvayA8PSAnWicpIHx8XG4gICAgICAgICAgICAgICAgKCcwJyA8PSB0b2sgJiYgdG9rIDw9ICc5JykgfHxcbiAgICAgICAgICAgICAgICAoWychJywgJyMnLCAnJCcsICclJywgJyYnLCAnXFwnJywgJyonLCAnKycsICctJywgJy8nLFxuICAgICAgICAgICAgICAgICAgJz0nLCAnPycsICdeJywgJ18nLCAnYCcsICd7JywgJ3wnLCAnfScsICd+J10uaW5kZXhPZih0b2spID49IDApO1xuICAgICAgICAgICAgaWYgKG9wdHMucmZjNjUzMikge1xuICAgICAgICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdCB8fCBpc1VURjhOb25Bc2NpaSh0b2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vIGF0b20gICAgICAgICAgICA9ICAgW0NGV1NdIDEqYXRleHQgW0NGV1NdXG4gICAgZnVuY3Rpb24gYXRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2F0b20nLCBhbmQoY29sd3NwKG9wdChjZndzKSksIHN0YXIoYXRleHQsIDEpLCBjb2x3c3Aob3B0KGNmd3MpKSkoKSk7XG4gICAgfVxuXG4gICAgLy8gZG90LWF0b20tdGV4dCAgID0gICAxKmF0ZXh0ICooXCIuXCIgMSphdGV4dClcbiAgICBmdW5jdGlvbiBkb3RBdG9tVGV4dCgpIHtcbiAgICAgICAgdmFyIHMsIG1heWJlVGV4dDtcbiAgICAgICAgcyA9IHdyYXAoJ2RvdC1hdG9tLXRleHQnLCBzdGFyKGF0ZXh0LCAxKSgpKTtcbiAgICAgICAgaWYgKHMgPT09IG51bGwpIHsgcmV0dXJuIHM7IH1cbiAgICAgICAgbWF5YmVUZXh0ID0gc3RhcihhbmQobGl0ZXJhbCgnLicpLCBzdGFyKGF0ZXh0LCAxKSkpKCk7XG4gICAgICAgIGlmIChtYXliZVRleHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFkZChzLCBtYXliZVRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIC8vIGRvdC1hdG9tICAgICAgICA9ICAgW0NGV1NdIGRvdC1hdG9tLXRleHQgW0NGV1NdXG4gICAgZnVuY3Rpb24gZG90QXRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2RvdC1hdG9tJywgYW5kKGludmlzKG9wdChjZndzKSksIGRvdEF0b21UZXh0LCBpbnZpcyhvcHQoY2Z3cykpKSgpKTtcbiAgICB9XG5cbiAgICAvLyAzLjIuNC4gUXVvdGVkIFN0cmluZ3NcblxuICAgIC8vICBxdGV4dCAgICAgICAgICAgPSAgICVkMzMgLyAgICAgICAgICAgICA7IFByaW50YWJsZSBVUy1BU0NJSVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICVkMzUtOTEgLyAgICAgICAgICA7ICBjaGFyYWN0ZXJzIG5vdCBpbmNsdWRpbmdcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAlZDkzLTEyNiAvICAgICAgICAgOyAgXCJcXFwiIG9yIHRoZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBvYnMtcXRleHRcbiAgICBmdW5jdGlvbiBxdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ3F0ZXh0Jywgb3IoXG4gICAgICAgICAgICBmdW5jdGlvbiBxdGV4dEZ1bmMxKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlVG9rZW4oZnVuY3Rpb24gcXRleHRGdW5jMih0b2spIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0b2suY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VwdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoMzMgPT09IGNvZGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoMzUgPD0gY29kZSAmJiBjb2RlIDw9IDkxKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKDkzIDw9IGNvZGUgJiYgY29kZSA8PSAxMjYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5yZmM2NTMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQgPSBhY2NlcHQgfHwgaXNVVEY4Tm9uQXNjaWkodG9rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXB0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9ic1F0ZXh0XG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gcWNvbnRlbnQgICAgICAgID0gICBxdGV4dCAvIHF1b3RlZC1wYWlyXG4gICAgZnVuY3Rpb24gcWNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdxY29udGVudCcsIG9yKHF0ZXh0LCBxdW90ZWRQYWlyKSgpKTtcbiAgICB9XG5cbiAgICAvLyAgcXVvdGVkLXN0cmluZyAgID0gICBbQ0ZXU11cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBEUVVPVEUgKihbRldTXSBxY29udGVudCkgW0ZXU10gRFFVT1RFXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgW0NGV1NdXG4gICAgZnVuY3Rpb24gcXVvdGVkU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgncXVvdGVkLXN0cmluZycsIGFuZChcbiAgICAgICAgICAgIGludmlzKG9wdChjZndzKSksXG4gICAgICAgICAgICBpbnZpcyhkcXVvdGUpLCBzdGFyKGFuZChvcHQoY29sd3NwKGZ3cykpLCBxY29udGVudCkpLCBvcHQoaW52aXMoZndzKSksIGludmlzKGRxdW90ZSksXG4gICAgICAgICAgICBpbnZpcyhvcHQoY2Z3cykpXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gMy4yLjUgTWlzY2VsbGFuZW91cyBUb2tlbnNcblxuICAgIC8vIHdvcmQgICAgICAgICAgICA9ICAgYXRvbSAvIHF1b3RlZC1zdHJpbmdcbiAgICBmdW5jdGlvbiB3b3JkKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgnd29yZCcsIG9yKGF0b20sIHF1b3RlZFN0cmluZykoKSk7XG4gICAgfVxuXG4gICAgLy8gcGhyYXNlICAgICAgICAgID0gICAxKndvcmQgLyBvYnMtcGhyYXNlXG4gICAgZnVuY3Rpb24gcGhyYXNlKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgncGhyYXNlJywgb3Iob2JzUGhyYXNlLCBzdGFyKHdvcmQsIDEpKSgpKTtcbiAgICB9XG5cbiAgICAvLyAzLjQuIEFkZHJlc3MgU3BlY2lmaWNhdGlvblxuICAgIC8vICAgYWRkcmVzcyAgICAgICAgID0gICBtYWlsYm94IC8gZ3JvdXBcbiAgICBmdW5jdGlvbiBhZGRyZXNzKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgnYWRkcmVzcycsIG9yKG1haWxib3gsIGdyb3VwKSgpKTtcbiAgICB9XG5cbiAgICAvLyAgIG1haWxib3ggICAgICAgICA9ICAgbmFtZS1hZGRyIC8gYWRkci1zcGVjXG4gICAgZnVuY3Rpb24gbWFpbGJveCgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ21haWxib3gnLCBvcihuYW1lQWRkciwgYWRkclNwZWMpKCkpO1xuICAgIH1cblxuICAgIC8vICAgbmFtZS1hZGRyICAgICAgID0gICBbZGlzcGxheS1uYW1lXSBhbmdsZS1hZGRyXG4gICAgZnVuY3Rpb24gbmFtZUFkZHIoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCduYW1lLWFkZHInLCBhbmQob3B0KGRpc3BsYXlOYW1lKSwgYW5nbGVBZGRyKSgpKTtcbiAgICB9XG5cbiAgICAvLyAgIGFuZ2xlLWFkZHIgICAgICA9ICAgW0NGV1NdIFwiPFwiIGFkZHItc3BlYyBcIj5cIiBbQ0ZXU10gL1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBvYnMtYW5nbGUtYWRkclxuICAgIGZ1bmN0aW9uIGFuZ2xlQWRkcigpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2FuZ2xlLWFkZHInLCBvcihcbiAgICAgICAgICAgIGFuZChcbiAgICAgICAgICAgICAgICBpbnZpcyhvcHQoY2Z3cykpLFxuICAgICAgICAgICAgICAgIGxpdGVyYWwoJzwnKSxcbiAgICAgICAgICAgICAgICBhZGRyU3BlYyxcbiAgICAgICAgICAgICAgICBsaXRlcmFsKCc+JyksXG4gICAgICAgICAgICAgICAgaW52aXMob3B0KGNmd3MpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG9ic0FuZ2xlQWRkclxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vICAgZ3JvdXAgICAgICAgICAgID0gICBkaXNwbGF5LW5hbWUgXCI6XCIgW2dyb3VwLWxpc3RdIFwiO1wiIFtDRldTXVxuICAgIGZ1bmN0aW9uIGdyb3VwKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgnZ3JvdXAnLCBhbmQoXG4gICAgICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIGxpdGVyYWwoJzonKSxcbiAgICAgICAgICAgIG9wdChncm91cExpc3QpLFxuICAgICAgICAgICAgbGl0ZXJhbCgnOycpLFxuICAgICAgICAgICAgaW52aXMob3B0KGNmd3MpKVxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vICAgZGlzcGxheS1uYW1lICAgID0gICBwaHJhc2VcbiAgICBmdW5jdGlvbiBkaXNwbGF5TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2Rpc3BsYXktbmFtZScsIGZ1bmN0aW9uIHBocmFzZUZpeGVkU2VtYW50aWMoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGhyYXNlKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNlbWFudGljID0gY29sbGFwc2VXaGl0ZXNwYWNlKHJlc3VsdC5zZW1hbnRpYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KCkpO1xuICAgIH1cblxuICAgIC8vICAgbWFpbGJveC1saXN0ICAgID0gICAobWFpbGJveCAqKFwiLFwiIG1haWxib3gpKSAvIG9icy1tYm94LWxpc3RcbiAgICBmdW5jdGlvbiBtYWlsYm94TGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ21haWxib3gtbGlzdCcsIG9yKFxuICAgICAgICAgICAgYW5kKFxuICAgICAgICAgICAgICAgIG1haWxib3gsXG4gICAgICAgICAgICAgICAgc3RhcihhbmQobGl0ZXJhbCgnLCcpLCBtYWlsYm94KSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvYnNNYm94TGlzdFxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vICAgYWRkcmVzcy1saXN0ICAgID0gICAoYWRkcmVzcyAqKFwiLFwiIGFkZHJlc3MpKSAvIG9icy1hZGRyLWxpc3RcbiAgICBmdW5jdGlvbiBhZGRyZXNzTGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2FkZHJlc3MtbGlzdCcsIG9yKFxuICAgICAgICAgICAgYW5kKFxuICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgc3RhcihhbmQobGl0ZXJhbCgnLCcpLCBhZGRyZXNzKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvYnNBZGRyTGlzdFxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vICAgZ3JvdXAtbGlzdCAgICAgID0gICBtYWlsYm94LWxpc3QgLyBDRldTIC8gb2JzLWdyb3VwLWxpc3RcbiAgICBmdW5jdGlvbiBncm91cExpc3QoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdncm91cC1saXN0Jywgb3IoXG4gICAgICAgICAgICBtYWlsYm94TGlzdCxcbiAgICAgICAgICAgIGludmlzKGNmd3MpLFxuICAgICAgICAgICAgb2JzR3JvdXBMaXN0XG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gMy40LjEgQWRkci1TcGVjIFNwZWNpZmljYXRpb25cblxuICAgIC8vIGxvY2FsLXBhcnQgICAgICA9ICAgZG90LWF0b20gLyBxdW90ZWQtc3RyaW5nIC8gb2JzLWxvY2FsLXBhcnRcbiAgICBmdW5jdGlvbiBsb2NhbFBhcnQoKSB7XG4gICAgICAgIC8vIG5vdGU6IHF1b3RlZC1zdHJpbmcsIGRvdEF0b20gYXJlIHByb3BlciBzdWJzZXRzIG9mIG9icy1sb2NhbC1wYXJ0XG4gICAgICAgIC8vIHNvIHdlIHJlYWxseSBqdXN0IGhhdmUgdG8gbG9vayBmb3Igb2JzTG9jYWxQYXJ0LCBpZiB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBleGFjdCBwYXJzZSB0cmVlXG4gICAgICAgIHJldHVybiB3cmFwKCdsb2NhbC1wYXJ0Jywgb3Iob2JzTG9jYWxQYXJ0LCBkb3RBdG9tLCBxdW90ZWRTdHJpbmcpKCkpO1xuICAgIH1cblxuICAgIC8vICBkdGV4dCAgICAgICAgICAgPSAgICVkMzMtOTAgLyAgICAgICAgICA7IFByaW50YWJsZSBVUy1BU0NJSVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICVkOTQtMTI2IC8gICAgICAgICA7ICBjaGFyYWN0ZXJzIG5vdCBpbmNsdWRpbmdcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBvYnMtZHRleHQgICAgICAgICAgOyAgXCJbXCIsIFwiXVwiLCBvciBcIlxcXCJcbiAgICBmdW5jdGlvbiBkdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2R0ZXh0Jywgb3IoXG4gICAgICAgICAgICBmdW5jdGlvbiBkdGV4dEZ1bmMxKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlVG9rZW4oZnVuY3Rpb24gZHRleHRGdW5jMih0b2spIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0b2suY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VwdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoMzMgPD0gY29kZSAmJiBjb2RlIDw9IDkwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKDk0IDw9IGNvZGUgJiYgY29kZSA8PSAxMjYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5yZmM2NTMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQgPSBhY2NlcHQgfHwgaXNVVEY4Tm9uQXNjaWkodG9rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXB0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9ic0R0ZXh0XG4gICAgICAgICAgICApKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBkb21haW4tbGl0ZXJhbCAgPSAgIFtDRldTXSBcIltcIiAqKFtGV1NdIGR0ZXh0KSBbRldTXSBcIl1cIiBbQ0ZXU11cbiAgICBmdW5jdGlvbiBkb21haW5MaXRlcmFsKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgnZG9tYWluLWxpdGVyYWwnLCBhbmQoXG4gICAgICAgICAgICBpbnZpcyhvcHQoY2Z3cykpLFxuICAgICAgICAgICAgbGl0ZXJhbCgnWycpLFxuICAgICAgICAgICAgc3RhcihhbmQob3B0KGZ3cyksIGR0ZXh0KSksXG4gICAgICAgICAgICBvcHQoZndzKSxcbiAgICAgICAgICAgIGxpdGVyYWwoJ10nKSxcbiAgICAgICAgICAgIGludmlzKG9wdChjZndzKSlcbiAgICAgICAgKSgpKTtcbiAgICB9XG5cbiAgICAvLyBkb21haW4gICAgICAgICAgPSAgIGRvdC1hdG9tIC8gZG9tYWluLWxpdGVyYWwgLyBvYnMtZG9tYWluXG4gICAgZnVuY3Rpb24gZG9tYWluKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgnZG9tYWluJywgZnVuY3Rpb24gZG9tYWluQ2hlY2tUTEQoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3Iob2JzRG9tYWluLCBkb3RBdG9tLCBkb21haW5MaXRlcmFsKSgpO1xuICAgICAgICAgICAgaWYgKG9wdHMucmVqZWN0VExEKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zZW1hbnRpYy5pbmRleE9mKCcuJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmlwIGFsbCB3aGl0ZXNwYWNlIGZyb20gZG9tYWluc1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IHJlc3VsdC5zZW1hbnRpYy5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0oKSk7XG4gICAgfVxuXG4gICAgLy8gYWRkci1zcGVjICAgICAgID0gICBsb2NhbC1wYXJ0IFwiQFwiIGRvbWFpblxuICAgIGZ1bmN0aW9uIGFkZHJTcGVjKCkge1xuICAgICAgICByZXR1cm4gd3JhcCgnYWRkci1zcGVjJywgYW5kKFxuICAgICAgICAgICAgbG9jYWxQYXJ0LCBsaXRlcmFsKCdAJyksIGRvbWFpblxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vIDMuNi4yIE9yaWdpbmF0b3IgRmllbGRzXG4gICAgLy8gQmVsb3cgd2Ugb25seSBwYXJzZSB0aGUgZmllbGQgYm9keSwgbm90IHRoZSBuYW1lIG9mIHRoZSBmaWVsZFxuICAgIC8vIGxpa2UgXCJGcm9tOlwiLCBcIlNlbmRlcjpcIiwgb3IgXCJSZXBseS1UbzpcIi4gT3RoZXIgbGlicmFyaWVzIHRoYXRcbiAgICAvLyBwYXJzZSBlbWFpbCBoZWFkZXJzIGNhbiBwYXJzZSB0aG9zZSBhbmQgZGVmZXIgdG8gdGhlc2UgcHJvZHVjdGlvbnNcbiAgICAvLyBmb3IgdGhlIFwiUkZDIDUzMjJcIiBwYXJ0LlxuXG4gICAgLy8gUkZDIDY4NTQgMi4xLiBSZXBsYWNlbWVudCBvZiBSRkMgNTMyMiwgU2VjdGlvbiAzLjYuMi4gT3JpZ2luYXRvciBGaWVsZHNcbiAgICAvLyBmcm9tID0gXCJGcm9tOlwiIChtYWlsYm94LWxpc3QgLyBhZGRyZXNzLWxpc3QpIENSTEZcbiAgICBmdW5jdGlvbiBmcm9tU3BlYygpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ2Zyb20nLCBvcihcbiAgICAgICAgICAgIG1haWxib3hMaXN0LFxuICAgICAgICAgICAgYWRkcmVzc0xpc3RcbiAgICAgICAgKSgpKTtcbiAgICB9XG5cbiAgICAvLyBSRkMgNjg1NCAyLjEuIFJlcGxhY2VtZW50IG9mIFJGQyA1MzIyLCBTZWN0aW9uIDMuNi4yLiBPcmlnaW5hdG9yIEZpZWxkc1xuICAgIC8vIHNlbmRlciA9IFwiU2VuZGVyOlwiIChtYWlsYm94IC8gYWRkcmVzcykgQ1JMRlxuICAgIGZ1bmN0aW9uIHNlbmRlclNwZWMoKSB7XG4gICAgICAgIHJldHVybiB3cmFwKCdzZW5kZXInLCBvcihcbiAgICAgICAgICAgIG1haWxib3gsXG4gICAgICAgICAgICBhZGRyZXNzXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gUkZDIDY4NTQgMi4xLiBSZXBsYWNlbWVudCBvZiBSRkMgNTMyMiwgU2VjdGlvbiAzLjYuMi4gT3JpZ2luYXRvciBGaWVsZHNcbiAgICAvLyByZXBseS10byA9IFwiUmVwbHktVG86XCIgYWRkcmVzcy1saXN0IENSTEZcbiAgICBmdW5jdGlvbiByZXBseVRvU3BlYygpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoJ3JlcGx5LXRvJywgYWRkcmVzc0xpc3QoKSk7XG4gICAgfVxuXG4gICAgLy8gNC4xLiBNaXNjZWxsYW5lb3VzIE9ic29sZXRlIFRva2Vuc1xuXG4gICAgLy8gIG9icy1OTy1XUy1DVEwgICA9ICAgJWQxLTggLyAgICAgICAgICAgIDsgVVMtQVNDSUkgY29udHJvbFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICVkMTEgLyAgICAgICAgICAgICA7ICBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgJWQxMiAvICAgICAgICAgICAgIDsgIGluY2x1ZGUgdGhlIGNhcnJpYWdlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgJWQxNC0zMSAvICAgICAgICAgIDsgIHJldHVybiwgbGluZSBmZWVkLCBhbmRcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAlZDEyNyAgICAgICAgICAgICAgOyAgd2hpdGUgc3BhY2UgY2hhcmFjdGVyc1xuICAgIGZ1bmN0aW9uIG9ic05vV3NDdGwoKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnN0cmljdCA/IG51bGwgOiB3cmFwKCdvYnMtTk8tV1MtQ1RMJywgY29tcGFyZVRva2VuKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgIHZhciBjb2RlID0gdG9rLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICByZXR1cm4gKCgxIDw9IGNvZGUgJiYgY29kZSA8PSA4KSB8fFxuICAgICAgICAgICAgICAgICAgICAoMTEgPT09IGNvZGUgfHwgMTIgPT09IGNvZGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICgxNCA8PSBjb2RlICYmIGNvZGUgPD0gMzEpIHx8XG4gICAgICAgICAgICAgICAgICAgICgxMjcgPT09IGNvZGUpKTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vIG9icy1jdGV4dCAgICAgICA9ICAgb2JzLU5PLVdTLUNUTFxuICAgIGZ1bmN0aW9uIG9ic0N0ZXh0KCkgeyByZXR1cm4gb3B0cy5zdHJpY3QgPyBudWxsIDogd3JhcCgnb2JzLWN0ZXh0Jywgb2JzTm9Xc0N0bCgpKTsgfVxuXG4gICAgLy8gb2JzLXF0ZXh0ICAgICAgID0gICBvYnMtTk8tV1MtQ1RMXG4gICAgZnVuY3Rpb24gb2JzUXRleHQoKSB7IHJldHVybiBvcHRzLnN0cmljdCA/IG51bGwgOiB3cmFwKCdvYnMtcXRleHQnLCBvYnNOb1dzQ3RsKCkpOyB9XG5cbiAgICAvLyBvYnMtcXAgICAgICAgICAgPSAgIFwiXFxcIiAoJWQwIC8gb2JzLU5PLVdTLUNUTCAvIExGIC8gQ1IpXG4gICAgZnVuY3Rpb24gb2JzUVAoKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnN0cmljdCA/IG51bGwgOiB3cmFwKCdvYnMtcXAnLCBhbmQoXG4gICAgICAgICAgICBsaXRlcmFsKCdcXFxcJyksXG4gICAgICAgICAgICBvcihsaXRlcmFsKCdcXDAnKSwgb2JzTm9Xc0N0bCwgbGYsIGNyKVxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vIG9icy1waHJhc2UgICAgICA9ICAgd29yZCAqKHdvcmQgLyBcIi5cIiAvIENGV1MpXG4gICAgZnVuY3Rpb24gb2JzUGhyYXNlKCkge1xuICAgICAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBudWxsIDogd3JhcCgnb2JzLXBocmFzZScsIGFuZChcbiAgICAgICAgICAgIHdvcmQsXG4gICAgICAgICAgICBzdGFyKG9yKHdvcmQsIGxpdGVyYWwoJy4nKSwgY29sd3NwKGNmd3MpKSlcbiAgICAgICAgKSgpKTtcbiAgICB9XG5cbiAgICAvLyA0LjIuIE9ic29sZXRlIEZvbGRpbmcgV2hpdGUgU3BhY2VcblxuICAgIC8vIE5PVEU6IHJlYWQgdGhlIGVycmF0YSBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL2VycmF0YV9zZWFyY2gucGhwP3JmYz01MzIyJmVpZD0xOTA4XG4gICAgLy8gb2JzLUZXUyAgICAgICAgID0gICAxKihbQ1JMRl0gV1NQKVxuICAgIGZ1bmN0aW9uIG9ic0Z3cygpIHtcbiAgICAgICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gbnVsbCA6IHdyYXAoJ29icy1GV1MnLCBzdGFyKFxuICAgICAgICAgICAgYW5kKGludmlzKG9wdChjcmxmKSksIHdzcCksXG4gICAgICAgICAgICAxXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gNC40LiBPYnNvbGV0ZSBBZGRyZXNzaW5nXG5cbiAgICAvLyBvYnMtYW5nbGUtYWRkciAgPSAgIFtDRldTXSBcIjxcIiBvYnMtcm91dGUgYWRkci1zcGVjIFwiPlwiIFtDRldTXVxuICAgIGZ1bmN0aW9uIG9ic0FuZ2xlQWRkcigpIHtcbiAgICAgICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gbnVsbCA6IHdyYXAoJ29icy1hbmdsZS1hZGRyJywgYW5kKFxuICAgICAgICAgICAgaW52aXMob3B0KGNmd3MpKSxcbiAgICAgICAgICAgIGxpdGVyYWwoJzwnKSxcbiAgICAgICAgICAgIG9ic1JvdXRlLFxuICAgICAgICAgICAgYWRkclNwZWMsXG4gICAgICAgICAgICBsaXRlcmFsKCc+JyksXG4gICAgICAgICAgICBpbnZpcyhvcHQoY2Z3cykpXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gb2JzLXJvdXRlICAgICAgID0gICBvYnMtZG9tYWluLWxpc3QgXCI6XCJcbiAgICBmdW5jdGlvbiBvYnNSb3V0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gbnVsbCA6IHdyYXAoJ29icy1yb3V0ZScsIGFuZChcbiAgICAgICAgICAgIG9ic0RvbWFpbkxpc3QsXG4gICAgICAgICAgICBsaXRlcmFsKCc6JylcbiAgICAgICAgKSgpKTtcbiAgICB9XG5cbiAgICAvLyAgIG9icy1kb21haW4tbGlzdCA9ICAgKihDRldTIC8gXCIsXCIpIFwiQFwiIGRvbWFpblxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAqKFwiLFwiIFtDRldTXSBbXCJAXCIgZG9tYWluXSlcbiAgICBmdW5jdGlvbiBvYnNEb21haW5MaXN0KCkge1xuICAgICAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBudWxsIDogd3JhcCgnb2JzLWRvbWFpbi1saXN0JywgYW5kKFxuICAgICAgICAgICAgc3RhcihvcihpbnZpcyhjZndzKSwgbGl0ZXJhbCgnLCcpKSksXG4gICAgICAgICAgICBsaXRlcmFsKCdAJyksXG4gICAgICAgICAgICBkb21haW4sXG4gICAgICAgICAgICBzdGFyKGFuZChcbiAgICAgICAgICAgICAgICBsaXRlcmFsKCcsJyksXG4gICAgICAgICAgICAgICAgaW52aXMob3B0KGNmd3MpKSxcbiAgICAgICAgICAgICAgICBvcHQoYW5kKGxpdGVyYWwoJ0AnKSwgZG9tYWluKSlcbiAgICAgICAgICAgICkpXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gb2JzLW1ib3gtbGlzdCAgID0gICAqKFtDRldTXSBcIixcIikgbWFpbGJveCAqKFwiLFwiIFttYWlsYm94IC8gQ0ZXU10pXG4gICAgZnVuY3Rpb24gb2JzTWJveExpc3QoKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnN0cmljdCA/IG51bGwgOiB3cmFwKCdvYnMtbWJveC1saXN0JywgYW5kKFxuICAgICAgICAgICAgc3RhcihhbmQoXG4gICAgICAgICAgICAgICAgaW52aXMob3B0KGNmd3MpKSxcbiAgICAgICAgICAgICAgICBsaXRlcmFsKCcsJylcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgbWFpbGJveCxcbiAgICAgICAgICAgIHN0YXIoYW5kKFxuICAgICAgICAgICAgICAgIGxpdGVyYWwoJywnKSxcbiAgICAgICAgICAgICAgICBvcHQoYW5kKFxuICAgICAgICAgICAgICAgICAgICBtYWlsYm94LFxuICAgICAgICAgICAgICAgICAgICBpbnZpcyhjZndzKVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApKVxuICAgICAgICApKCkpO1xuICAgIH1cblxuICAgIC8vIG9icy1hZGRyLWxpc3QgICA9ICAgKihbQ0ZXU10gXCIsXCIpIGFkZHJlc3MgKihcIixcIiBbYWRkcmVzcyAvIENGV1NdKVxuICAgIGZ1bmN0aW9uIG9ic0FkZHJMaXN0KCkge1xuICAgICAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBudWxsIDogd3JhcCgnb2JzLWFkZHItbGlzdCcsIGFuZChcbiAgICAgICAgICAgIHN0YXIoYW5kKFxuICAgICAgICAgICAgICAgIGludmlzKG9wdChjZndzKSksXG4gICAgICAgICAgICAgICAgbGl0ZXJhbCgnLCcpXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBzdGFyKGFuZChcbiAgICAgICAgICAgICAgICBsaXRlcmFsKCcsJyksXG4gICAgICAgICAgICAgICAgb3B0KGFuZChcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgaW52aXMoY2Z3cylcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKSgpKTtcbiAgICB9XG5cbiAgICAvLyBvYnMtZ3JvdXAtbGlzdCAgPSAgIDEqKFtDRldTXSBcIixcIikgW0NGV1NdXG4gICAgZnVuY3Rpb24gb2JzR3JvdXBMaXN0KCkge1xuICAgICAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBudWxsIDogd3JhcCgnb2JzLWdyb3VwLWxpc3QnLCBhbmQoXG4gICAgICAgICAgICBzdGFyKGFuZChcbiAgICAgICAgICAgICAgICBpbnZpcyhvcHQoY2Z3cykpLFxuICAgICAgICAgICAgICAgIGxpdGVyYWwoJywnKVxuICAgICAgICAgICAgKSwgMSksXG4gICAgICAgICAgICBpbnZpcyhvcHQoY2Z3cykpXG4gICAgICAgICkoKSk7XG4gICAgfVxuXG4gICAgLy8gb2JzLWxvY2FsLXBhcnQgPSB3b3JkICooXCIuXCIgd29yZClcbiAgICBmdW5jdGlvbiBvYnNMb2NhbFBhcnQoKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnN0cmljdCA/IG51bGwgOiB3cmFwKCdvYnMtbG9jYWwtcGFydCcsIGFuZCh3b3JkLCBzdGFyKGFuZChsaXRlcmFsKCcuJyksIHdvcmQpKSkoKSk7XG4gICAgfVxuXG4gICAgLy8gb2JzLWRvbWFpbiAgICAgICA9IGF0b20gKihcIi5cIiBhdG9tKVxuICAgIGZ1bmN0aW9uIG9ic0RvbWFpbigpIHtcbiAgICAgICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gbnVsbCA6IHdyYXAoJ29icy1kb21haW4nLCBhbmQoYXRvbSwgc3RhcihhbmQobGl0ZXJhbCgnLicpLCBhdG9tKSkpKCkpO1xuICAgIH1cblxuICAgIC8vIG9icy1kdGV4dCAgICAgICA9ICAgb2JzLU5PLVdTLUNUTCAvIHF1b3RlZC1wYWlyXG4gICAgZnVuY3Rpb24gb2JzRHRleHQoKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnN0cmljdCA/IG51bGwgOiB3cmFwKCdvYnMtZHRleHQnLCBvcihvYnNOb1dzQ3RsLCBxdW90ZWRQYWlyKSgpKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLy8gYXN0IGFuYWx5c2lzXG5cbiAgICBmdW5jdGlvbiBmaW5kTm9kZShuYW1lLCByb290KSB7XG4gICAgICAgIHZhciBpLCBzdGFjaywgbm9kZTtcbiAgICAgICAgaWYgKHJvb3QgPT09IG51bGwgfHwgcm9vdCA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIHN0YWNrID0gW3Jvb3RdO1xuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpID0gbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobm9kZS5jaGlsZHJlbltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZEFsbE5vZGVzKG5hbWUsIHJvb3QpIHtcbiAgICAgICAgdmFyIGksIHN0YWNrLCBub2RlLCByZXN1bHQ7XG4gICAgICAgIGlmIChyb290ID09PSBudWxsIHx8IHJvb3QgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBzdGFjayA9IFtyb290XTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBub2RlID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBpZiAobm9kZS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSBub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChub2RlLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRBbGxOb2Rlc05vQ2hpbGRyZW4obmFtZXMsIHJvb3QpIHtcbiAgICAgICAgdmFyIGksIHN0YWNrLCBub2RlLCByZXN1bHQsIG5hbWVzTG9va3VwO1xuICAgICAgICBpZiAocm9vdCA9PT0gbnVsbCB8fCByb290ID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIG51bGw7IH1cbiAgICAgICAgc3RhY2sgPSBbcm9vdF07XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBuYW1lc0xvb2t1cCA9IHt9O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIG5hbWVzTG9va3VwW25hbWVzW2ldXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKG5vZGUubmFtZSBpbiBuYW1lc0xvb2t1cCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IGxvb2sgYXQgY2hpbGRyZW4gKGhlbmNlIGZpbmRBbGxOb2Rlc05vQ2hpbGRyZW4pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChub2RlLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnaXZlUmVzdWx0KGFzdCkge1xuICAgICAgICB2YXIgYWRkcmVzc2VzLCBncm91cHNBbmRNYWlsYm94ZXMsIGksIGdyb3VwT3JNYWlsYm94LCByZXN1bHQ7XG4gICAgICAgIGlmIChhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFkZHJlc3NlcyA9IFtdO1xuXG4gICAgICAgIC8vIEFuIGFkZHJlc3MgaXMgYSAnZ3JvdXAnIChpLmUuIGEgbGlzdCBvZiBtYWlsYm94ZXMpIG9yIGEgJ21haWxib3gnLlxuICAgICAgICBncm91cHNBbmRNYWlsYm94ZXMgPSBmaW5kQWxsTm9kZXNOb0NoaWxkcmVuKFsnZ3JvdXAnLCAnbWFpbGJveCddLCBhc3QpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgIGdyb3Vwc0FuZE1haWxib3hlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgZ3JvdXBPck1haWxib3ggPSBncm91cHNBbmRNYWlsYm94ZXNbaV07XG4gICAgICAgICAgICBpZiAoZ3JvdXBPck1haWxib3gubmFtZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy5wdXNoKGdpdmVSZXN1bHRHcm91cChncm91cE9yTWFpbGJveCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChncm91cE9yTWFpbGJveC5uYW1lID09PSAnbWFpbGJveCcpIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzZXMucHVzaChnaXZlUmVzdWx0TWFpbGJveChncm91cE9yTWFpbGJveCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgICBhZGRyZXNzZXM6IGFkZHJlc3NlcyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdHMuc2ltcGxlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBzaW1wbGlmeVJlc3VsdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLm9uZVJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uZVJlc3VsdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnNpbXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuYWRkcmVzc2VzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdpdmVSZXN1bHRHcm91cChncm91cCkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIGdyb3VwTmFtZSA9IGZpbmROb2RlKCdkaXNwbGF5LW5hbWUnLCBncm91cCk7XG4gICAgICAgIHZhciBncm91cFJlc3VsdE1haWxib3hlcyA9IFtdO1xuICAgICAgICB2YXIgbWFpbGJveGVzID0gZmluZEFsbE5vZGVzTm9DaGlsZHJlbihbJ21haWxib3gnXSwgZ3JvdXApO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWFpbGJveGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBncm91cFJlc3VsdE1haWxib3hlcy5wdXNoKGdpdmVSZXN1bHRNYWlsYm94KG1haWxib3hlc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlOiBncm91cCxcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IGdyb3VwLm5hbWUsIC8vICdncm91cCdcbiAgICAgICAgICAgIG5hbWU6IGdyYWJTZW1hbnRpYyhncm91cE5hbWUpLFxuICAgICAgICAgICAgYWRkcmVzc2VzOiBncm91cFJlc3VsdE1haWxib3hlcyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnaXZlUmVzdWx0TWFpbGJveChtYWlsYm94KSB7XG4gICAgICAgIHZhciBuYW1lID0gZmluZE5vZGUoJ2Rpc3BsYXktbmFtZScsIG1haWxib3gpO1xuICAgICAgICB2YXIgYXNwZWMgPSBmaW5kTm9kZSgnYWRkci1zcGVjJywgbWFpbGJveCk7XG4gICAgICAgIHZhciBjb21tZW50cyA9IGZpbmRBbGxOb2RlcygnY2Z3cycsIG1haWxib3gpO1xuXG4gICAgICAgIHZhciBsb2NhbCA9IGZpbmROb2RlKCdsb2NhbC1wYXJ0JywgYXNwZWMpO1xuICAgICAgICB2YXIgZG9tYWluID0gZmluZE5vZGUoJ2RvbWFpbicsIGFzcGVjKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG1haWxib3gsXG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgYWRkcmVzczogYXNwZWMsXG4gICAgICAgICAgICAgICAgbG9jYWw6IGxvY2FsLFxuICAgICAgICAgICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICAgICAgICAgIGNvbW1lbnRzOiBjb21tZW50c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IG1haWxib3gubmFtZSwgLy8gJ21haWxib3gnXG4gICAgICAgICAgICBuYW1lOiBncmFiU2VtYW50aWMobmFtZSksXG4gICAgICAgICAgICBhZGRyZXNzOiBncmFiU2VtYW50aWMoYXNwZWMpLFxuICAgICAgICAgICAgbG9jYWw6IGdyYWJTZW1hbnRpYyhsb2NhbCksXG4gICAgICAgICAgICBkb21haW46IGdyYWJTZW1hbnRpYyhkb21haW4pLFxuICAgICAgICAgICAgZ3JvdXBOYW1lOiBncmFiU2VtYW50aWMobWFpbGJveC5ncm91cE5hbWUpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdyYWJTZW1hbnRpYyhuKSB7XG4gICAgICAgIHJldHVybiBuICE9PSBudWxsICYmIG4gIT09IHVuZGVmaW5lZCA/IG4uc2VtYW50aWMgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNpbXBsaWZ5UmVzdWx0KHJlc3VsdCkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYWRkcmVzc2VzKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVzdWx0LmFkZHJlc3Nlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHQuYWRkcmVzc2VzW2ldLm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmVSZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIGlmICghcmVzdWx0KSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIGlmICghb3B0cy5wYXJ0aWFsICYmIHJlc3VsdC5hZGRyZXNzZXMubGVuZ3RoID4gMSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmFkZHJlc3NlcyAmJiByZXN1bHQuYWRkcmVzc2VzWzBdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcGFyc2VTdHJpbmcsIHBvcywgbGVuLCBwYXJzZWQsIHN0YXJ0UHJvZHVjdGlvbjtcblxuICAgIG9wdHMgPSBoYW5kbGVPcHRzKG9wdHMsIHt9KTtcbiAgICBpZiAob3B0cyA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgcGFyc2VTdHJpbmcgPSBvcHRzLmlucHV0O1xuXG4gICAgc3RhcnRQcm9kdWN0aW9uID0ge1xuICAgICAgICAnYWRkcmVzcyc6IGFkZHJlc3MsXG4gICAgICAgICdhZGRyZXNzLWxpc3QnOiBhZGRyZXNzTGlzdCxcbiAgICAgICAgJ2FuZ2xlLWFkZHInOiBhbmdsZUFkZHIsXG4gICAgICAgICdmcm9tJzogZnJvbVNwZWMsXG4gICAgICAgICdncm91cCc6IGdyb3VwLFxuICAgICAgICAnbWFpbGJveCc6IG1haWxib3gsXG4gICAgICAgICdtYWlsYm94LWxpc3QnOiBtYWlsYm94TGlzdCxcbiAgICAgICAgJ3JlcGx5LXRvJzogcmVwbHlUb1NwZWMsXG4gICAgICAgICdzZW5kZXInOiBzZW5kZXJTcGVjLFxuICAgIH1bb3B0cy5zdGFydEF0XSB8fCBhZGRyZXNzTGlzdDtcblxuICAgIGlmICghb3B0cy5zdHJpY3QpIHtcbiAgICAgICAgaW5pdGlhbGl6ZSgpO1xuICAgICAgICBvcHRzLnN0cmljdCA9IHRydWU7XG4gICAgICAgIHBhcnNlZCA9IHN0YXJ0UHJvZHVjdGlvbihwYXJzZVN0cmluZyk7XG4gICAgICAgIGlmIChvcHRzLnBhcnRpYWwgfHwgIWluU3RyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnaXZlUmVzdWx0KHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5zdHJpY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCk7XG4gICAgcGFyc2VkID0gc3RhcnRQcm9kdWN0aW9uKHBhcnNlU3RyaW5nKTtcbiAgICBpZiAoIW9wdHMucGFydGlhbCAmJiBpblN0cigpKSB7IHJldHVybiBudWxsOyB9XG4gICAgcmV0dXJuIGdpdmVSZXN1bHQocGFyc2VkKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VPbmVBZGRyZXNzU2ltcGxlKG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2U1MzIyKGhhbmRsZU9wdHMob3B0cywge1xuICAgICAgICBvbmVSZXN1bHQ6IHRydWUsXG4gICAgICAgIHJmYzY1MzI6IHRydWUsXG4gICAgICAgIHNpbXBsZTogdHJ1ZSxcbiAgICAgICAgc3RhcnRBdDogJ2FkZHJlc3MtbGlzdCcsXG4gICAgfSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFkZHJlc3NMaXN0U2ltcGxlKG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2U1MzIyKGhhbmRsZU9wdHMob3B0cywge1xuICAgICAgICByZmM2NTMyOiB0cnVlLFxuICAgICAgICBzaW1wbGU6IHRydWUsXG4gICAgICAgIHN0YXJ0QXQ6ICdhZGRyZXNzLWxpc3QnLFxuICAgIH0pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGcm9tU2ltcGxlKG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2U1MzIyKGhhbmRsZU9wdHMob3B0cywge1xuICAgICAgICByZmM2NTMyOiB0cnVlLFxuICAgICAgICBzaW1wbGU6IHRydWUsXG4gICAgICAgIHN0YXJ0QXQ6ICdmcm9tJyxcbiAgICB9KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2VuZGVyU2ltcGxlKG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2U1MzIyKGhhbmRsZU9wdHMob3B0cywge1xuICAgICAgICBvbmVSZXN1bHQ6IHRydWUsXG4gICAgICAgIHJmYzY1MzI6IHRydWUsXG4gICAgICAgIHNpbXBsZTogdHJ1ZSxcbiAgICAgICAgc3RhcnRBdDogJ3NlbmRlcicsXG4gICAgfSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5VG9TaW1wbGUob3B0cykge1xuICAgIHJldHVybiBwYXJzZTUzMjIoaGFuZGxlT3B0cyhvcHRzLCB7XG4gICAgICAgIHJmYzY1MzI6IHRydWUsXG4gICAgICAgIHNpbXBsZTogdHJ1ZSxcbiAgICAgICAgc3RhcnRBdDogJ3JlcGx5LXRvJyxcbiAgICB9KSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU9wdHMob3B0cywgZGVmcykge1xuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHN0cikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN0cikgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgICAgICAgcmV0dXJuIG8gPT09IE9iamVjdChvKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bGxVbmRlZihvKSB7XG4gICAgICAgIHJldHVybiBvID09PSBudWxsIHx8IG8gPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdHMsIG87XG5cbiAgICBpZiAoaXNTdHJpbmcob3B0cykpIHtcbiAgICAgICAgb3B0cyA9IHsgaW5wdXQ6IG9wdHMgfTtcbiAgICB9IGVsc2UgaWYgKCFpc09iamVjdChvcHRzKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIWlzU3RyaW5nKG9wdHMuaW5wdXQpKSB7IHJldHVybiBudWxsOyB9XG4gICAgaWYgKCFkZWZzKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgb25lUmVzdWx0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIHJlamVjdFRMRDogZmFsc2UsXG4gICAgICAgIHJmYzY1MzI6IGZhbHNlLFxuICAgICAgICBzaW1wbGU6IGZhbHNlLFxuICAgICAgICBzdGFydEF0OiAnYWRkcmVzcy1saXN0JyxcbiAgICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICB9O1xuXG4gICAgZm9yIChvIGluIGRlZmF1bHRzKSB7XG4gICAgICAgIGlmIChpc051bGxVbmRlZihvcHRzW29dKSkge1xuICAgICAgICAgICAgb3B0c1tvXSA9ICFpc051bGxVbmRlZihkZWZzW29dKSA/IGRlZnNbb10gOiBkZWZhdWx0c1tvXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cblxucGFyc2U1MzIyLnBhcnNlT25lQWRkcmVzcyA9IHBhcnNlT25lQWRkcmVzc1NpbXBsZTtcbnBhcnNlNTMyMi5wYXJzZUFkZHJlc3NMaXN0ID0gcGFyc2VBZGRyZXNzTGlzdFNpbXBsZTtcbnBhcnNlNTMyMi5wYXJzZUZyb20gPSBwYXJzZUZyb21TaW1wbGU7XG5wYXJzZTUzMjIucGFyc2VTZW5kZXIgPSBwYXJzZVNlbmRlclNpbXBsZTtcbnBhcnNlNTMyMi5wYXJzZVJlcGx5VG8gPSBwYXJzZVJlcGx5VG9TaW1wbGU7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXJzZTUzMjI7XG59IGVsc2Uge1xuICAgIGdsb2JhbC5lbWFpbEFkZHJlc3NlcyA9IHBhcnNlNTMyMjtcbn1cblxufSh0aGlzKSk7XG5cbn0se31dLDI4NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSBfZGVyZXFfKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gX2RlcmVxXygnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSBfZGVyZXFfKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IF9kZXJlcV8oJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IF9kZXJlcV8oJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG5cbn0se1wiLi9oYXNoL2NvbW1vblwiOjI4NSxcIi4vaGFzaC9obWFjXCI6Mjg2LFwiLi9oYXNoL3JpcGVtZFwiOjI4NyxcIi4vaGFzaC9zaGFcIjoyODgsXCIuL2hhc2gvdXRpbHNcIjoyOTV9XSwyODU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gX2RlcmVxXygnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxufSx7XCIuL3V0aWxzXCI6Mjk1LFwibWluaW1hbGlzdGljLWFzc2VydFwiOjI5OX1dLDI4NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSBfZGVyZXFfKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWMoaGFzaCwga2V5LCBlbmMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWMpKVxuICAgIHJldHVybiBuZXcgSG1hYyhoYXNoLCBrZXksIGVuYyk7XG4gIHRoaXMuSGFzaCA9IGhhc2g7XG4gIHRoaXMuYmxvY2tTaXplID0gaGFzaC5ibG9ja1NpemUgLyA4O1xuICB0aGlzLm91dFNpemUgPSBoYXNoLm91dFNpemUgLyA4O1xuICB0aGlzLmlubmVyID0gbnVsbDtcbiAgdGhpcy5vdXRlciA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCh1dGlscy50b0FycmF5KGtleSwgZW5jKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWM7XG5cbkhtYWMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChrZXkpIHtcbiAgLy8gU2hvcnRlbiBrZXksIGlmIG5lZWRlZFxuICBpZiAoa2V5Lmxlbmd0aCA+IHRoaXMuYmxvY2tTaXplKVxuICAgIGtleSA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KS5kaWdlc3QoKTtcbiAgYXNzZXJ0KGtleS5sZW5ndGggPD0gdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIEFkZCBwYWRkaW5nIHRvIGtleVxuICBmb3IgKHZhciBpID0ga2V5Lmxlbmd0aDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAga2V5LnB1c2goMCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHgzNjtcbiAgdGhpcy5pbm5lciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcblxuICAvLyAweDM2IF4gMHg1YyA9IDB4NmFcbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHg2YTtcbiAgdGhpcy5vdXRlciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcbn07XG5cbkhtYWMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICB0aGlzLmlubmVyLnVwZGF0ZShtc2csIGVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuSG1hYy5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKTtcbiAgcmV0dXJuIHRoaXMub3V0ZXIuZGlnZXN0KGVuYyk7XG59O1xuXG59LHtcIi4vdXRpbHNcIjoyOTUsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6Mjk5fV0sMjg3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpO1xudmFyIGNvbW1vbiA9IF9kZXJlcV8oJy4vY29tbW9uJyk7XG5cbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl8zID0gdXRpbHMuc3VtMzJfMztcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG5mdW5jdGlvbiBSSVBFTUQxNjAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSSVBFTUQxNjApKVxuICAgIHJldHVybiBuZXcgUklQRU1EMTYwKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5oID0gWyAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuZW5kaWFuID0gJ2xpdHRsZSc7XG59XG51dGlscy5pbmhlcml0cyhSSVBFTUQxNjAsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnJpcGVtZDE2MCA9IFJJUEVNRDE2MDtcblxuUklQRU1EMTYwLmJsb2NrU2l6ZSA9IDUxMjtcblJJUEVNRDE2MC5vdXRTaXplID0gMTYwO1xuUklQRU1EMTYwLmhtYWNTdHJlbmd0aCA9IDE5MjtcblJJUEVNRDE2MC5wYWRMZW5ndGggPSA2NDtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIEEgPSB0aGlzLmhbMF07XG4gIHZhciBCID0gdGhpcy5oWzFdO1xuICB2YXIgQyA9IHRoaXMuaFsyXTtcbiAgdmFyIEQgPSB0aGlzLmhbM107XG4gIHZhciBFID0gdGhpcy5oWzRdO1xuICB2YXIgQWggPSBBO1xuICB2YXIgQmggPSBCO1xuICB2YXIgQ2ggPSBDO1xuICB2YXIgRGggPSBEO1xuICB2YXIgRWggPSBFO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyBqKyspIHtcbiAgICB2YXIgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEEsIGYoaiwgQiwgQywgRCksIG1zZ1tyW2pdICsgc3RhcnRdLCBLKGopKSxcbiAgICAgICAgc1tqXSksXG4gICAgICBFKTtcbiAgICBBID0gRTtcbiAgICBFID0gRDtcbiAgICBEID0gcm90bDMyKEMsIDEwKTtcbiAgICBDID0gQjtcbiAgICBCID0gVDtcbiAgICBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQWgsIGYoNzkgLSBqLCBCaCwgQ2gsIERoKSwgbXNnW3JoW2pdICsgc3RhcnRdLCBLaChqKSksXG4gICAgICAgIHNoW2pdKSxcbiAgICAgIEVoKTtcbiAgICBBaCA9IEVoO1xuICAgIEVoID0gRGg7XG4gICAgRGggPSByb3RsMzIoQ2gsIDEwKTtcbiAgICBDaCA9IEJoO1xuICAgIEJoID0gVDtcbiAgfVxuICBUID0gc3VtMzJfMyh0aGlzLmhbMV0sIEMsIERoKTtcbiAgdGhpcy5oWzFdID0gc3VtMzJfMyh0aGlzLmhbMl0sIEQsIEVoKTtcbiAgdGhpcy5oWzJdID0gc3VtMzJfMyh0aGlzLmhbM10sIEUsIEFoKTtcbiAgdGhpcy5oWzNdID0gc3VtMzJfMyh0aGlzLmhbNF0sIEEsIEJoKTtcbiAgdGhpcy5oWzRdID0gc3VtMzJfMyh0aGlzLmhbMF0sIEIsIENoKTtcbiAgdGhpcy5oWzBdID0gVDtcbn07XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnbGl0dGxlJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdsaXR0bGUnKTtcbn07XG5cbmZ1bmN0aW9uIGYoaiwgeCwgeSwgeikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4geCBeIHkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAoeCAmIHkpIHwgKCh+eCkgJiB6KTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gKHggfCAofnkpKSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuICh4ICYgeikgfCAoeSAmICh+eikpO1xuICBlbHNlXG4gICAgcmV0dXJuIHggXiAoeSB8ICh+eikpO1xufVxuXG5mdW5jdGlvbiBLKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWE4Mjc5OTk7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmVkOWViYTE7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4OGYxYmJjZGM7XG4gIGVsc2VcbiAgICByZXR1cm4gMHhhOTUzZmQ0ZTtcbn1cblxuZnVuY3Rpb24gS2goaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHg1MGEyOGJlNjtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YzRkZDEyNDtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZDcwM2VmMztcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg3YTZkNzZlOTtcbiAgZWxzZVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xufVxuXG52YXIgciA9IFtcbiAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgNywgNCwgMTMsIDEsIDEwLCA2LCAxNSwgMywgMTIsIDAsIDksIDUsIDIsIDE0LCAxMSwgOCxcbiAgMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMixcbiAgMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMixcbiAgNCwgMCwgNSwgOSwgNywgMTIsIDIsIDEwLCAxNCwgMSwgMywgOCwgMTEsIDYsIDE1LCAxM1xuXTtcblxudmFyIHJoID0gW1xuICA1LCAxNCwgNywgMCwgOSwgMiwgMTEsIDQsIDEzLCA2LCAxNSwgOCwgMSwgMTAsIDMsIDEyLFxuICA2LCAxMSwgMywgNywgMCwgMTMsIDUsIDEwLCAxNCwgMTUsIDgsIDEyLCA0LCA5LCAxLCAyLFxuICAxNSwgNSwgMSwgMywgNywgMTQsIDYsIDksIDExLCA4LCAxMiwgMiwgMTAsIDAsIDQsIDEzLFxuICA4LCA2LCA0LCAxLCAzLCAxMSwgMTUsIDAsIDUsIDEyLCAyLCAxMywgOSwgNywgMTAsIDE0LFxuICAxMiwgMTUsIDEwLCA0LCAxLCA1LCA4LCA3LCA2LCAyLCAxMywgMTQsIDAsIDMsIDksIDExXG5dO1xuXG52YXIgcyA9IFtcbiAgMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4LFxuICA3LCA2LCA4LCAxMywgMTEsIDksIDcsIDE1LCA3LCAxMiwgMTUsIDksIDExLCA3LCAxMywgMTIsXG4gIDExLCAxMywgNiwgNywgMTQsIDksIDEzLCAxNSwgMTQsIDgsIDEzLCA2LCA1LCAxMiwgNywgNSxcbiAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyLFxuICA5LCAxNSwgNSwgMTEsIDYsIDgsIDEzLCAxMiwgNSwgMTIsIDEzLCAxNCwgMTEsIDgsIDUsIDZcbl07XG5cbnZhciBzaCA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl07XG5cbn0se1wiLi9jb21tb25cIjoyODUsXCIuL3V0aWxzXCI6Mjk1fV0sMjg4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gX2RlcmVxXygnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSBfZGVyZXFfKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gX2RlcmVxXygnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IF9kZXJlcV8oJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSBfZGVyZXFfKCcuL3NoYS81MTInKTtcblxufSx7XCIuL3NoYS8xXCI6Mjg5LFwiLi9zaGEvMjI0XCI6MjkwLFwiLi9zaGEvMjU2XCI6MjkxLFwiLi9zaGEvMzg0XCI6MjkyLFwiLi9zaGEvNTEyXCI6MjkzfV0sMjg5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSBfZGVyZXFfKCcuLi9jb21tb24nKTtcbnZhciBzaGFDb21tb24gPSBfZGVyZXFfKCcuL2NvbW1vbicpO1xuXG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgZnRfMSA9IHNoYUNvbW1vbi5mdF8xO1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGExX0sgPSBbXG4gIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsXG4gIDB4OEYxQkJDREMsIDB4Q0E2MkMxRDZcbl07XG5cbmZ1bmN0aW9uIFNIQTEoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEExKSlcbiAgICByZXR1cm4gbmV3IFNIQTEoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsXG4gICAgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoODApO1xufVxuXG51dGlscy5pbmhlcml0cyhTSEExLCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEExO1xuXG5TSEExLmJsb2NrU2l6ZSA9IDUxMjtcblNIQTEub3V0U2l6ZSA9IDE2MDtcblNIQTEuaG1hY1N0cmVuZ3RoID0gODA7XG5TSEExLnBhZExlbmd0aCA9IDY0O1xuXG5TSEExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG5cbiAgZm9yKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHJvdGwzMihXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdLCAxKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG5cbiAgZm9yIChpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IH5+KGkgLyAyMCk7XG4gICAgdmFyIHQgPSBzdW0zMl81KHJvdGwzMihhLCA1KSwgZnRfMShzLCBiLCBjLCBkKSwgZSwgV1tpXSwgc2hhMV9LW3NdKTtcbiAgICBlID0gZDtcbiAgICBkID0gYztcbiAgICBjID0gcm90bDMyKGIsIDMwKTtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG59O1xuXG5TSEExLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxufSx7XCIuLi9jb21tb25cIjoyODUsXCIuLi91dGlsc1wiOjI5NSxcIi4vY29tbW9uXCI6Mjk0fV0sMjkwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSBfZGVyZXFfKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG5cbn0se1wiLi4vdXRpbHNcIjoyOTUsXCIuLzI1NlwiOjI5MX1dLDI5MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gX2RlcmVxXygnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gX2RlcmVxXygnLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSBfZGVyZXFfKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGNoMzIgPSBzaGFDb21tb24uY2gzMjtcbnZhciBtYWozMiA9IHNoYUNvbW1vbi5tYWozMjtcbnZhciBzMF8yNTYgPSBzaGFDb21tb24uczBfMjU2O1xudmFyIHMxXzI1NiA9IHNoYUNvbW1vbi5zMV8yNTY7XG52YXIgZzBfMjU2ID0gc2hhQ29tbW9uLmcwXzI1NjtcbnZhciBnMV8yNTYgPSBzaGFDb21tb24uZzFfMjU2O1xuXG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTI1Nl9LID0gW1xuICAweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LFxuICAweDM5NTZjMjViLCAweDU5ZjExMWYxLCAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1LFxuICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLFxuICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LCAweDBmYzE5ZGM2LCAweDI0MGNhMWNjLFxuICAweDJkZTkyYzZmLCAweDRhNzQ4NGFhLCAweDVjYjBhOWRjLCAweDc2Zjk4OGRhLFxuICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LFxuICAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LCAweDA2Y2E2MzUxLCAweDE0MjkyOTY3LFxuICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLFxuICAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAweGEyYmZlOGExLCAweGE4MWE2NjRiLCAweGMyNGI4YjcwLCAweGM3NmM1MWEzLFxuICAweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwLFxuICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LFxuICAweDM5MWMwY2IzLCAweDRlZDhhYTRhLCAweDViOWNjYTRmLCAweDY4MmU2ZmYzLFxuICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LFxuICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG5dO1xuXG5mdW5jdGlvbiBTSEEyNTYoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyNTYpKVxuICAgIHJldHVybiBuZXcgU0hBMjU2KCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDZhMDllNjY3LCAweGJiNjdhZTg1LCAweDNjNmVmMzcyLCAweGE1NGZmNTNhLFxuICAgIDB4NTEwZTUyN2YsIDB4OWIwNTY4OGMsIDB4MWY4M2Q5YWIsIDB4NWJlMGNkMTlcbiAgXTtcbiAgdGhpcy5rID0gc2hhMjU2X0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg2NCk7XG59XG51dGlscy5pbmhlcml0cyhTSEEyNTYsIEJsb2NrSGFzaCk7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTI1NjtcblxuU0hBMjU2LmJsb2NrU2l6ZSA9IDUxMjtcblNIQTI1Ni5vdXRTaXplID0gMjU2O1xuU0hBMjU2LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTI1Ni5wYWRMZW5ndGggPSA2NDtcblxuU0hBMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gc3VtMzJfNChnMV8yNTYoV1tpIC0gMl0pLCBXW2kgLSA3XSwgZzBfMjU2KFdbaSAtIDE1XSksIFdbaSAtIDE2XSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuICB2YXIgZiA9IHRoaXMuaFs1XTtcbiAgdmFyIGcgPSB0aGlzLmhbNl07XG4gIHZhciBoID0gdGhpcy5oWzddO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIFQxID0gc3VtMzJfNShoLCBzMV8yNTYoZSksIGNoMzIoZSwgZiwgZyksIHRoaXMua1tpXSwgV1tpXSk7XG4gICAgdmFyIFQyID0gc3VtMzIoczBfMjU2KGEpLCBtYWozMihhLCBiLCBjKSk7XG4gICAgaCA9IGc7XG4gICAgZyA9IGY7XG4gICAgZiA9IGU7XG4gICAgZSA9IHN1bTMyKGQsIFQxKTtcbiAgICBkID0gYztcbiAgICBjID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gc3VtMzIoVDEsIFQyKTtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG4gIHRoaXMuaFs1XSA9IHN1bTMyKHRoaXMuaFs1XSwgZik7XG4gIHRoaXMuaFs2XSA9IHN1bTMyKHRoaXMuaFs2XSwgZyk7XG4gIHRoaXMuaFs3XSA9IHN1bTMyKHRoaXMuaFs3XSwgaCk7XG59O1xuXG5TSEEyNTYucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG59LHtcIi4uL2NvbW1vblwiOjI4NSxcIi4uL3V0aWxzXCI6Mjk1LFwiLi9jb21tb25cIjoyOTQsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6Mjk5fV0sMjkyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMnKTtcblxudmFyIFNIQTUxMiA9IF9kZXJlcV8oJy4vNTEyJyk7XG5cbmZ1bmN0aW9uIFNIQTM4NCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTM4NCkpXG4gICAgcmV0dXJuIG5ldyBTSEEzODQoKTtcblxuICBTSEE1MTIuY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4Y2JiYjlkNWQsIDB4YzEwNTllZDgsXG4gICAgMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyxcbiAgICAweDkxNTkwMTVhLCAweDMwNzBkZDE3LFxuICAgIDB4MTUyZmVjZDgsIDB4ZjcwZTU5MzksXG4gICAgMHg2NzMzMjY2NywgMHhmZmMwMGIzMSxcbiAgICAweDhlYjQ0YTg3LCAweDY4NTgxNTExLFxuICAgIDB4ZGIwYzJlMGQsIDB4NjRmOThmYTcsXG4gICAgMHg0N2I1NDgxZCwgMHhiZWZhNGZhNCBdO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMzg0LCBTSEE1MTIpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEzODQ7XG5cblNIQTM4NC5ibG9ja1NpemUgPSAxMDI0O1xuU0hBMzg0Lm91dFNpemUgPSAzODQ7XG5TSEEzODQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMzg0LnBhZExlbmd0aCA9IDEyODtcblxuU0hBMzg0LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmguc2xpY2UoMCwgMTIpLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwgMTIpLCAnYmlnJyk7XG59O1xuXG59LHtcIi4uL3V0aWxzXCI6Mjk1LFwiLi81MTJcIjoyOTN9XSwyOTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IF9kZXJlcV8oJy4uL2NvbW1vbicpO1xudmFyIGFzc2VydCA9IF9kZXJlcV8oJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxudmFyIHJvdHI2NF9oaSA9IHV0aWxzLnJvdHI2NF9oaTtcbnZhciByb3RyNjRfbG8gPSB1dGlscy5yb3RyNjRfbG87XG52YXIgc2hyNjRfaGkgPSB1dGlscy5zaHI2NF9oaTtcbnZhciBzaHI2NF9sbyA9IHV0aWxzLnNocjY0X2xvO1xudmFyIHN1bTY0ID0gdXRpbHMuc3VtNjQ7XG52YXIgc3VtNjRfaGkgPSB1dGlscy5zdW02NF9oaTtcbnZhciBzdW02NF9sbyA9IHV0aWxzLnN1bTY0X2xvO1xudmFyIHN1bTY0XzRfaGkgPSB1dGlscy5zdW02NF80X2hpO1xudmFyIHN1bTY0XzRfbG8gPSB1dGlscy5zdW02NF80X2xvO1xudmFyIHN1bTY0XzVfaGkgPSB1dGlscy5zdW02NF81X2hpO1xudmFyIHN1bTY0XzVfbG8gPSB1dGlscy5zdW02NF81X2xvO1xuXG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTUxMl9LID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG5mdW5jdGlvbiBTSEE1MTIoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEE1MTIpKVxuICAgIHJldHVybiBuZXcgU0hBNTEyKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDZhMDllNjY3LCAweGYzYmNjOTA4LFxuICAgIDB4YmI2N2FlODUsIDB4ODRjYWE3M2IsXG4gICAgMHgzYzZlZjM3MiwgMHhmZTk0ZjgyYixcbiAgICAweGE1NGZmNTNhLCAweDVmMWQzNmYxLFxuICAgIDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEsXG4gICAgMHg5YjA1Njg4YywgMHgyYjNlNmMxZixcbiAgICAweDFmODNkOWFiLCAweGZiNDFiZDZiLFxuICAgIDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkgXTtcbiAgdGhpcy5rID0gc2hhNTEyX0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSgxNjApO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBNTEyLCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEE1MTI7XG5cblNIQTUxMi5ibG9ja1NpemUgPSAxMDI0O1xuU0hBNTEyLm91dFNpemUgPSA1MTI7XG5TSEE1MTIuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBNTEyLnBhZExlbmd0aCA9IDEyODtcblxuU0hBNTEyLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrID0gZnVuY3Rpb24gX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIC8vIDMyIHggMzJiaXQgd29yZHNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gZzFfNTEyX2hpKFdbaSAtIDRdLCBXW2kgLSAzXSk7ICAvLyBpIC0gMlxuICAgIHZhciBjMF9sbyA9IGcxXzUxMl9sbyhXW2kgLSA0XSwgV1tpIC0gM10pO1xuICAgIHZhciBjMV9oaSA9IFdbaSAtIDE0XTsgIC8vIGkgLSA3XG4gICAgdmFyIGMxX2xvID0gV1tpIC0gMTNdO1xuICAgIHZhciBjMl9oaSA9IGcwXzUxMl9oaShXW2kgLSAzMF0sIFdbaSAtIDI5XSk7ICAvLyBpIC0gMTVcbiAgICB2YXIgYzJfbG8gPSBnMF81MTJfbG8oV1tpIC0gMzBdLCBXW2kgLSAyOV0pO1xuICAgIHZhciBjM19oaSA9IFdbaSAtIDMyXTsgIC8vIGkgLSAxNlxuICAgIHZhciBjM19sbyA9IFdbaSAtIDMxXTtcblxuICAgIFdbaV0gPSBzdW02NF80X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgICBXW2kgKyAxXSA9IHN1bTY0XzRfbG8oXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8pO1xuICB9XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdGhpcy5fcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpO1xuXG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIHZhciBhaCA9IHRoaXMuaFswXTtcbiAgdmFyIGFsID0gdGhpcy5oWzFdO1xuICB2YXIgYmggPSB0aGlzLmhbMl07XG4gIHZhciBibCA9IHRoaXMuaFszXTtcbiAgdmFyIGNoID0gdGhpcy5oWzRdO1xuICB2YXIgY2wgPSB0aGlzLmhbNV07XG4gIHZhciBkaCA9IHRoaXMuaFs2XTtcbiAgdmFyIGRsID0gdGhpcy5oWzddO1xuICB2YXIgZWggPSB0aGlzLmhbOF07XG4gIHZhciBlbCA9IHRoaXMuaFs5XTtcbiAgdmFyIGZoID0gdGhpcy5oWzEwXTtcbiAgdmFyIGZsID0gdGhpcy5oWzExXTtcbiAgdmFyIGdoID0gdGhpcy5oWzEyXTtcbiAgdmFyIGdsID0gdGhpcy5oWzEzXTtcbiAgdmFyIGhoID0gdGhpcy5oWzE0XTtcbiAgdmFyIGhsID0gdGhpcy5oWzE1XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBoaDtcbiAgICB2YXIgYzBfbG8gPSBobDtcbiAgICB2YXIgYzFfaGkgPSBzMV81MTJfaGkoZWgsIGVsKTtcbiAgICB2YXIgYzFfbG8gPSBzMV81MTJfbG8oZWgsIGVsKTtcbiAgICB2YXIgYzJfaGkgPSBjaDY0X2hpKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjMl9sbyA9IGNoNjRfbG8oZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMzX2hpID0gdGhpcy5rW2ldO1xuICAgIHZhciBjM19sbyA9IHRoaXMua1tpICsgMV07XG4gICAgdmFyIGM0X2hpID0gV1tpXTtcbiAgICB2YXIgYzRfbG8gPSBXW2kgKyAxXTtcblxuICAgIHZhciBUMV9oaSA9IHN1bTY0XzVfaGkoXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8sXG4gICAgICBjNF9oaSwgYzRfbG8pO1xuICAgIHZhciBUMV9sbyA9IHN1bTY0XzVfbG8oXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8sXG4gICAgICBjNF9oaSwgYzRfbG8pO1xuXG4gICAgYzBfaGkgPSBzMF81MTJfaGkoYWgsIGFsKTtcbiAgICBjMF9sbyA9IHMwXzUxMl9sbyhhaCwgYWwpO1xuICAgIGMxX2hpID0gbWFqNjRfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG4gICAgYzFfbG8gPSBtYWo2NF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcblxuICAgIHZhciBUMl9oaSA9IHN1bTY0X2hpKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcbiAgICB2YXIgVDJfbG8gPSBzdW02NF9sbyhjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG5cbiAgICBoaCA9IGdoO1xuICAgIGhsID0gZ2w7XG5cbiAgICBnaCA9IGZoO1xuICAgIGdsID0gZmw7XG5cbiAgICBmaCA9IGVoO1xuICAgIGZsID0gZWw7XG5cbiAgICBlaCA9IHN1bTY0X2hpKGRoLCBkbCwgVDFfaGksIFQxX2xvKTtcbiAgICBlbCA9IHN1bTY0X2xvKGRsLCBkbCwgVDFfaGksIFQxX2xvKTtcblxuICAgIGRoID0gY2g7XG4gICAgZGwgPSBjbDtcblxuICAgIGNoID0gYmg7XG4gICAgY2wgPSBibDtcblxuICAgIGJoID0gYWg7XG4gICAgYmwgPSBhbDtcblxuICAgIGFoID0gc3VtNjRfaGkoVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICAgIGFsID0gc3VtNjRfbG8oVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICB9XG5cbiAgc3VtNjQodGhpcy5oLCAwLCBhaCwgYWwpO1xuICBzdW02NCh0aGlzLmgsIDIsIGJoLCBibCk7XG4gIHN1bTY0KHRoaXMuaCwgNCwgY2gsIGNsKTtcbiAgc3VtNjQodGhpcy5oLCA2LCBkaCwgZGwpO1xuICBzdW02NCh0aGlzLmgsIDgsIGVoLCBlbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTAsIGZoLCBmbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTIsIGdoLCBnbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTQsIGhoLCBobCk7XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBjaDY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICgofnhoKSAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBjaDY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoKH54bCkgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoKSB7XG4gIHZhciByID0gKHhoICYgeWgpIF4gKHhoICYgemgpIF4gKHloICYgemgpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoeGwgJiB6bCkgXiAoeWwgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDgpO1xuICB2YXIgYzJfaGkgPSBzaHI2NF9oaSh4aCwgeGwsIDcpO1xuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcwXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDgpO1xuICB2YXIgYzJfbG8gPSBzaHI2NF9sbyh4aCwgeGwsIDcpO1xuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTkpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyOSk7ICAvLyA2MVxuICB2YXIgYzJfaGkgPSBzaHI2NF9oaSh4aCwgeGwsIDYpO1xuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTkpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCAyOSk7ICAvLyA2MVxuICB2YXIgYzJfbG8gPSBzaHI2NF9sbyh4aCwgeGwsIDYpO1xuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbn0se1wiLi4vY29tbW9uXCI6Mjg1LFwiLi4vdXRpbHNcIjoyOTUsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6Mjk5fV0sMjk0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMnKTtcbnZhciByb3RyMzIgPSB1dGlscy5yb3RyMzI7XG5cbmZ1bmN0aW9uIGZ0XzEocywgeCwgeSwgeikge1xuICBpZiAocyA9PT0gMClcbiAgICByZXR1cm4gY2gzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDEgfHwgcyA9PT0gMylcbiAgICByZXR1cm4gcDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMilcbiAgICByZXR1cm4gbWFqMzIoeCwgeSwgeik7XG59XG5leHBvcnRzLmZ0XzEgPSBmdF8xO1xuXG5mdW5jdGlvbiBjaDMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoKH54KSAmIHopO1xufVxuZXhwb3J0cy5jaDMyID0gY2gzMjtcblxuZnVuY3Rpb24gbWFqMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopO1xufVxuZXhwb3J0cy5tYWozMiA9IG1hajMyO1xuXG5mdW5jdGlvbiBwMzIoeCwgeSwgeikge1xuICByZXR1cm4geCBeIHkgXiB6O1xufVxuZXhwb3J0cy5wMzIgPSBwMzI7XG5cbmZ1bmN0aW9uIHMwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMikgXiByb3RyMzIoeCwgMTMpIF4gcm90cjMyKHgsIDIyKTtcbn1cbmV4cG9ydHMuczBfMjU2ID0gczBfMjU2O1xuXG5mdW5jdGlvbiBzMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDYpIF4gcm90cjMyKHgsIDExKSBeIHJvdHIzMih4LCAyNSk7XG59XG5leHBvcnRzLnMxXzI1NiA9IHMxXzI1NjtcblxuZnVuY3Rpb24gZzBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA3KSBeIHJvdHIzMih4LCAxOCkgXiAoeCA+Pj4gMyk7XG59XG5leHBvcnRzLmcwXzI1NiA9IGcwXzI1NjtcblxuZnVuY3Rpb24gZzFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAxNykgXiByb3RyMzIoeCwgMTkpIF4gKHggPj4+IDEwKTtcbn1cbmV4cG9ydHMuZzFfMjU2ID0gZzFfMjU2O1xuXG59LHtcIi4uL3V0aWxzXCI6Mjk1fV0sMjk1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IF9kZXJlcV8oJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IF9kZXJlcV8oJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gdG9BcnJheShtc2csIGVuYykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKVxuICAgIHJldHVybiBtc2cuc2xpY2UoKTtcbiAgaWYgKCFtc2cpXG4gICAgcmV0dXJuIFtdO1xuICB2YXIgcmVzID0gW107XG4gIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgIGlmICghZW5jKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaGkgPSBjID4+IDg7XG4gICAgICAgIHZhciBsbyA9IGMgJiAweGZmO1xuICAgICAgICBpZiAoaGkpXG4gICAgICAgICAgcmVzLnB1c2goaGksIGxvKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlcy5wdXNoKGxvKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvSGV4ID0gdG9IZXg7XG5cbmZ1bmN0aW9uIGh0b25sKHcpIHtcbiAgdmFyIHJlcyA9ICh3ID4+PiAyNCkgfFxuICAgICAgICAgICAgKCh3ID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICAgICAgICAgKCh3IDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAgICAgICAgICgodyAmIDB4ZmYpIDw8IDI0KTtcbiAgcmV0dXJuIHJlcyA+Pj4gMDtcbn1cbmV4cG9ydHMuaHRvbmwgPSBodG9ubDtcblxuZnVuY3Rpb24gdG9IZXgzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHcgPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2xpdHRsZScpXG4gICAgICB3ID0gaHRvbmwodyk7XG4gICAgcmVzICs9IHplcm84KHcudG9TdHJpbmcoMTYpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleDMyID0gdG9IZXgzMjtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gemVybzgod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDcpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA2KVxuICAgIHJldHVybiAnMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDUpXG4gICAgcmV0dXJuICcwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDQpXG4gICAgcmV0dXJuICcwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAzKVxuICAgIHJldHVybiAnMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuICcwMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzggPSB6ZXJvODtcblxuZnVuY3Rpb24gam9pbjMyKG1zZywgc3RhcnQsIGVuZCwgZW5kaWFuKSB7XG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcbiAgYXNzZXJ0KGxlbiAlIDQgPT09IDApO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IHN0YXJ0OyBpIDwgcmVzLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJylcbiAgICAgIHcgPSAobXNnW2tdIDw8IDI0KSB8IChtc2dbayArIDFdIDw8IDE2KSB8IChtc2dbayArIDJdIDw8IDgpIHwgbXNnW2sgKyAzXTtcbiAgICBlbHNlXG4gICAgICB3ID0gKG1zZ1trICsgM10gPDwgMjQpIHwgKG1zZ1trICsgMl0gPDwgMTYpIHwgKG1zZ1trICsgMV0gPDwgOCkgfCBtc2dba107XG4gICAgcmVzW2ldID0gdyA+Pj4gMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5qb2luMzIgPSBqb2luMzI7XG5cbmZ1bmN0aW9uIHNwbGl0MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShtc2cubGVuZ3RoICogNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIG0gPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICAgIHJlc1trXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDNdID0gbSAmIDB4ZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trICsgM10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2tdID0gbSAmIDB4ZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnNwbGl0MzIgPSBzcGxpdDMyO1xuXG5mdW5jdGlvbiByb3RyMzIodywgYikge1xuICByZXR1cm4gKHcgPj4+IGIpIHwgKHcgPDwgKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RyMzIgPSByb3RyMzI7XG5cbmZ1bmN0aW9uIHJvdGwzMih3LCBiKSB7XG4gIHJldHVybiAodyA8PCBiKSB8ICh3ID4+PiAoMzIgLSBiKSk7XG59XG5leHBvcnRzLnJvdGwzMiA9IHJvdGwzMjtcblxuZnVuY3Rpb24gc3VtMzIoYSwgYikge1xuICByZXR1cm4gKGEgKyBiKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzIgPSBzdW0zMjtcblxuZnVuY3Rpb24gc3VtMzJfMyhhLCBiLCBjKSB7XG4gIHJldHVybiAoYSArIGIgKyBjKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfMyA9IHN1bTMyXzM7XG5cbmZ1bmN0aW9uIHN1bTMyXzQoYSwgYiwgYywgZCkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl80ID0gc3VtMzJfNDtcblxuZnVuY3Rpb24gc3VtMzJfNShhLCBiLCBjLCBkLCBlKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCArIGUpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl81ID0gc3VtMzJfNTtcblxuZnVuY3Rpb24gc3VtNjQoYnVmLCBwb3MsIGFoLCBhbCkge1xuICB2YXIgYmggPSBidWZbcG9zXTtcbiAgdmFyIGJsID0gYnVmW3BvcyArIDFdO1xuXG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICBidWZbcG9zXSA9IGhpID4+PiAwO1xuICBidWZbcG9zICsgMV0gPSBsbztcbn1cbmV4cG9ydHMuc3VtNjQgPSBzdW02NDtcblxuZnVuY3Rpb24gc3VtNjRfaGkoYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfaGkgPSBzdW02NF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfbG8oYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gYWwgKyBibDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF9sbyA9IHN1bTY0X2xvO1xuXG5mdW5jdGlvbiBzdW02NF80X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzRfaGkgPSBzdW02NF80X2hpO1xuXG5mdW5jdGlvbiBzdW02NF80X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2xvID0gc3VtNjRfNF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNV9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBlbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZWwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGVoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNV9oaSA9IHN1bTY0XzVfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzVfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGwgKyBlbDtcblxuICByZXR1cm4gbG8gPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfbG8gPSBzdW02NF81X2xvO1xuXG5mdW5jdGlvbiByb3RyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWwgPDwgKDMyIC0gbnVtKSkgfCAoYWggPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfaGkgPSByb3RyNjRfaGk7XG5cbmZ1bmN0aW9uIHJvdHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnJvdHI2NF9sbyA9IHJvdHI2NF9sbztcblxuZnVuY3Rpb24gc2hyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgcmV0dXJuIGFoID4+PiBudW07XG59XG5leHBvcnRzLnNocjY0X2hpID0gc2hyNjRfaGk7XG5cbmZ1bmN0aW9uIHNocjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMuc2hyNjRfbG8gPSBzaHI2NF9sbztcblxufSx7XCJpbmhlcml0c1wiOjI5OCxcIm1pbmltYWxpc3RpYy1hc3NlcnRcIjoyOTl9XSwyOTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IF9kZXJlcV8oJ2hhc2guanMnKTtcbnZhciB1dGlscyA9IF9kZXJlcV8oJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcbnZhciBhc3NlcnQgPSBfZGVyZXFfKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWNEUkJHKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWNEUkJHKSlcbiAgICByZXR1cm4gbmV3IEhtYWNEUkJHKG9wdGlvbnMpO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG4gIHRoaXMucHJlZFJlc2lzdCA9ICEhb3B0aW9ucy5wcmVkUmVzaXN0O1xuXG4gIHRoaXMub3V0TGVuID0gdGhpcy5oYXNoLm91dFNpemU7XG4gIHRoaXMubWluRW50cm9weSA9IG9wdGlvbnMubWluRW50cm9weSB8fCB0aGlzLmhhc2guaG1hY1N0cmVuZ3RoO1xuXG4gIHRoaXMuX3Jlc2VlZCA9IG51bGw7XG4gIHRoaXMucmVzZWVkSW50ZXJ2YWwgPSBudWxsO1xuICB0aGlzLksgPSBudWxsO1xuICB0aGlzLlYgPSBudWxsO1xuXG4gIHZhciBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShvcHRpb25zLmVudHJvcHksIG9wdGlvbnMuZW50cm9weUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBub25jZSA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5ub25jZSwgb3B0aW9ucy5ub25jZUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBwZXJzID0gdXRpbHMudG9BcnJheShvcHRpb25zLnBlcnMsIG9wdGlvbnMucGVyc0VuYyB8fCAnaGV4Jyk7XG4gIGFzc2VydChlbnRyb3B5Lmxlbmd0aCA+PSAodGhpcy5taW5FbnRyb3B5IC8gOCksXG4gICAgICAgICAnTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAnICsgdGhpcy5taW5FbnRyb3B5ICsgJyBiaXRzJyk7XG4gIHRoaXMuX2luaXQoZW50cm9weSwgbm9uY2UsIHBlcnMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBIbWFjRFJCRztcblxuSG1hY0RSQkcucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChlbnRyb3B5LCBub25jZSwgcGVycykge1xuICB2YXIgc2VlZCA9IGVudHJvcHkuY29uY2F0KG5vbmNlKS5jb25jYXQocGVycyk7XG5cbiAgdGhpcy5LID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIHRoaXMuViA9IG5ldyBBcnJheSh0aGlzLm91dExlbiAvIDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuVi5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMuS1tpXSA9IDB4MDA7XG4gICAgdGhpcy5WW2ldID0gMHgwMTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZShzZWVkKTtcbiAgdGhpcy5fcmVzZWVkID0gMTtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IDB4MTAwMDAwMDAwMDAwMDsgIC8vIDJeNDhcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5faG1hYyA9IGZ1bmN0aW9uIGhtYWMoKSB7XG4gIHJldHVybiBuZXcgaGFzaC5obWFjKHRoaXMuaGFzaCwgdGhpcy5LKTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWQpIHtcbiAgdmFyIGttYWMgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAgIC51cGRhdGUoWyAweDAwIF0pO1xuICBpZiAoc2VlZClcbiAgICBrbWFjID0ga21hYy51cGRhdGUoc2VlZCk7XG4gIHRoaXMuSyA9IGttYWMuZGlnZXN0KCk7XG4gIHRoaXMuViA9IHRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKTtcbiAgaWYgKCFzZWVkKVxuICAgIHJldHVybjtcblxuICB0aGlzLksgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgIC51cGRhdGUodGhpcy5WKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDEgXSlcbiAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLnJlc2VlZCA9IGZ1bmN0aW9uIHJlc2VlZChlbnRyb3B5LCBlbnRyb3B5RW5jLCBhZGQsIGFkZEVuYykge1xuICAvLyBPcHRpb25hbCBlbnRyb3B5IGVuY1xuICBpZiAodHlwZW9mIGVudHJvcHlFbmMgIT09ICdzdHJpbmcnKSB7XG4gICAgYWRkRW5jID0gYWRkO1xuICAgIGFkZCA9IGVudHJvcHlFbmM7XG4gICAgZW50cm9weUVuYyA9IG51bGw7XG4gIH1cblxuICBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShlbnRyb3B5LCBlbnRyb3B5RW5jKTtcbiAgYWRkID0gdXRpbHMudG9BcnJheShhZGQsIGFkZEVuYyk7XG5cbiAgYXNzZXJ0KGVudHJvcHkubGVuZ3RoID49ICh0aGlzLm1pbkVudHJvcHkgLyA4KSxcbiAgICAgICAgICdOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICcgKyB0aGlzLm1pbkVudHJvcHkgKyAnIGJpdHMnKTtcblxuICB0aGlzLl91cGRhdGUoZW50cm9weS5jb25jYXQoYWRkIHx8IFtdKSk7XG4gIHRoaXMuX3Jlc2VlZCA9IDE7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShsZW4sIGVuYywgYWRkLCBhZGRFbmMpIHtcbiAgaWYgKHRoaXMuX3Jlc2VlZCA+IHRoaXMucmVzZWVkSW50ZXJ2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNlZWQgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBPcHRpb25hbCBlbmNvZGluZ1xuICBpZiAodHlwZW9mIGVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cblxuICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgaWYgKGFkZCkge1xuICAgIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMgfHwgJ2hleCcpO1xuICAgIHRoaXMuX3VwZGF0ZShhZGQpO1xuICB9XG5cbiAgdmFyIHRlbXAgPSBbXTtcbiAgd2hpbGUgKHRlbXAubGVuZ3RoIDwgbGVuKSB7XG4gICAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICAgIHRlbXAgPSB0ZW1wLmNvbmNhdCh0aGlzLlYpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRlbXAuc2xpY2UoMCwgbGVuKTtcbiAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIHRoaXMuX3Jlc2VlZCsrO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG5cbn0se1wiaGFzaC5qc1wiOjI4NCxcIm1pbmltYWxpc3RpYy1hc3NlcnRcIjoyOTksXCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzXCI6MzAwfV0sMjk3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG59LHt9XSwyOTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG5cbn0se31dLDI5OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGFzc2VydDtcblxuZnVuY3Rpb24gYXNzZXJ0KHZhbCwgbXNnKSB7XG4gIGlmICghdmFsKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbn1cblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWwobCwgciwgbXNnKSB7XG4gIGlmIChsICE9IHIpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAoJ0Fzc2VydGlvbiBmYWlsZWQ6ICcgKyBsICsgJyAhPSAnICsgcikpO1xufTtcblxufSx7fV0sMzAwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gZXhwb3J0cztcblxuZnVuY3Rpb24gdG9BcnJheShtc2csIGVuYykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKVxuICAgIHJldHVybiBtc2cuc2xpY2UoKTtcbiAgaWYgKCFtc2cpXG4gICAgcmV0dXJuIFtdO1xuICB2YXIgcmVzID0gW107XG4gIGlmICh0eXBlb2YgbXNnICE9PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgbXNnID0gbXNnLnJlcGxhY2UoL1teYS16MC05XSsvaWcsICcnKTtcbiAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgdmFyIGhpID0gYyA+PiA4O1xuICAgICAgdmFyIGxvID0gYyAmIDB4ZmY7XG4gICAgICBpZiAoaGkpXG4gICAgICAgIHJlcy5wdXNoKGhpLCBsbyk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlcy5wdXNoKGxvKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB6ZXJvMih3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxudXRpbHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9IZXggPSB0b0hleDtcblxudXRpbHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGFyciwgZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB0b0hleChhcnIpO1xuICBlbHNlXG4gICAgcmV0dXJuIGFycjtcbn07XG5cbn0se31dLDMwMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBUb3AgbGV2ZWwgZmlsZSBpcyBqdXN0IGEgbWl4aW4gb2Ygc3VibW9kdWxlcyAmIGNvbnN0YW50c1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduICAgID0gX2RlcmVxXygnLi9saWIvdXRpbHMvY29tbW9uJykuYXNzaWduO1xuXG52YXIgZGVmbGF0ZSAgID0gX2RlcmVxXygnLi9saWIvZGVmbGF0ZScpO1xudmFyIGluZmxhdGUgICA9IF9kZXJlcV8oJy4vbGliL2luZmxhdGUnKTtcbnZhciBjb25zdGFudHMgPSBfZGVyZXFfKCcuL2xpYi96bGliL2NvbnN0YW50cycpO1xuXG52YXIgcGFrbyA9IHt9O1xuXG5hc3NpZ24ocGFrbywgZGVmbGF0ZSwgaW5mbGF0ZSwgY29uc3RhbnRzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYWtvO1xuXG59LHtcIi4vbGliL2RlZmxhdGVcIjozMDIsXCIuL2xpYi9pbmZsYXRlXCI6MzAzLFwiLi9saWIvdXRpbHMvY29tbW9uXCI6MzA0LFwiLi9saWIvemxpYi9jb25zdGFudHNcIjozMDd9XSwzMDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB6bGliX2RlZmxhdGUgPSBfZGVyZXFfKCcuL3psaWIvZGVmbGF0ZScpO1xudmFyIHV0aWxzICAgICAgICA9IF9kZXJlcV8oJy4vdXRpbHMvY29tbW9uJyk7XG52YXIgc3RyaW5ncyAgICAgID0gX2RlcmVxXygnLi91dGlscy9zdHJpbmdzJyk7XG52YXIgbXNnICAgICAgICAgID0gX2RlcmVxXygnLi96bGliL21lc3NhZ2VzJyk7XG52YXIgWlN0cmVhbSAgICAgID0gX2RlcmVxXygnLi96bGliL3pzdHJlYW0nKTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyogUHVibGljIGNvbnN0YW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbnZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG5cbnZhciBaX09LICAgICAgICAgICAgPSAwO1xudmFyIFpfU1RSRUFNX0VORCAgICA9IDE7XG52YXIgWl9TWU5DX0ZMVVNIICAgID0gMjtcblxudmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xO1xuXG52YXIgWl9ERUZBVUxUX1NUUkFURUdZICAgID0gMDtcblxudmFyIFpfREVGTEFURUQgID0gODtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKipcbiAqIGNsYXNzIERlZmxhdGVcbiAqXG4gKiBHZW5lcmljIEpTLXN0eWxlIHdyYXBwZXIgZm9yIHpsaWIgY2FsbHMuIElmIHlvdSBkb24ndCBuZWVkXG4gKiBzdHJlYW1pbmcgYmVoYXZpb3VyIC0gdXNlIG1vcmUgc2ltcGxlIGZ1bmN0aW9uczogW1tkZWZsYXRlXV0sXG4gKiBbW2RlZmxhdGVSYXddXSBhbmQgW1tnemlwXV0uXG4gKiovXG5cbi8qIGludGVybmFsXG4gKiBEZWZsYXRlLmNodW5rcyAtPiBBcnJheVxuICpcbiAqIENodW5rcyBvZiBvdXRwdXQgZGF0YSwgaWYgW1tEZWZsYXRlI29uRGF0YV1dIG5vdCBvdmVycmlkZGVuLlxuICoqL1xuXG4vKipcbiAqIERlZmxhdGUucmVzdWx0IC0+IFVpbnQ4QXJyYXl8QXJyYXlcbiAqXG4gKiBDb21wcmVzc2VkIHJlc3VsdCwgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgW1tEZWZsYXRlI29uRGF0YV1dXG4gKiBhbmQgW1tEZWZsYXRlI29uRW5kXV0gaGFuZGxlcnMuIEZpbGxlZCBhZnRlciB5b3UgcHVzaCBsYXN0IGNodW5rXG4gKiAoY2FsbCBbW0RlZmxhdGUjcHVzaF1dIHdpdGggYFpfRklOSVNIYCAvIGB0cnVlYCBwYXJhbSkgIG9yIGlmIHlvdVxuICogcHVzaCBhIGNodW5rIHdpdGggZXhwbGljaXQgZmx1c2ggKGNhbGwgW1tEZWZsYXRlI3B1c2hdXSB3aXRoXG4gKiBgWl9TWU5DX0ZMVVNIYCBwYXJhbSkuXG4gKiovXG5cbi8qKlxuICogRGVmbGF0ZS5lcnIgLT4gTnVtYmVyXG4gKlxuICogRXJyb3IgY29kZSBhZnRlciBkZWZsYXRlIGZpbmlzaGVkLiAwIChaX09LKSBvbiBzdWNjZXNzLlxuICogWW91IHdpbGwgbm90IG5lZWQgaXQgaW4gcmVhbCBsaWZlLCBiZWNhdXNlIGRlZmxhdGUgZXJyb3JzXG4gKiBhcmUgcG9zc2libGUgb25seSBvbiB3cm9uZyBvcHRpb25zIG9yIGJhZCBgb25EYXRhYCAvIGBvbkVuZGBcbiAqIGN1c3RvbSBoYW5kbGVycy5cbiAqKi9cblxuLyoqXG4gKiBEZWZsYXRlLm1zZyAtPiBTdHJpbmdcbiAqXG4gKiBFcnJvciBtZXNzYWdlLCBpZiBbW0RlZmxhdGUuZXJyXV0gIT0gMFxuICoqL1xuXG5cbi8qKlxuICogbmV3IERlZmxhdGUob3B0aW9ucylcbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuXG4gKlxuICogQ3JlYXRlcyBuZXcgZGVmbGF0b3IgaW5zdGFuY2Ugd2l0aCBzcGVjaWZpZWQgcGFyYW1zLiBUaHJvd3MgZXhjZXB0aW9uXG4gKiBvbiBiYWQgcGFyYW1zLiBTdXBwb3J0ZWQgb3B0aW9uczpcbiAqXG4gKiAtIGBsZXZlbGBcbiAqIC0gYHdpbmRvd0JpdHNgXG4gKiAtIGBtZW1MZXZlbGBcbiAqIC0gYHN0cmF0ZWd5YFxuICogLSBgZGljdGlvbmFyeWBcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS5cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbnMsIGZvciBpbnRlcm5hbCBuZWVkczpcbiAqXG4gKiAtIGBjaHVua1NpemVgIC0gc2l6ZSBvZiBnZW5lcmF0ZWQgZGF0YSBjaHVua3MgKDE2SyBieSBkZWZhdWx0KVxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBkbyByYXcgZGVmbGF0ZVxuICogLSBgZ3ppcGAgKEJvb2xlYW4pIC0gY3JlYXRlIGd6aXAgd3JhcHBlclxuICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgXCJiaW5hcnkgc3RyaW5nXCJcbiAqICAgIChlYWNoIGNoYXIgY29kZSBbMC4uMjU1XSlcbiAqIC0gYGhlYWRlcmAgKE9iamVjdCkgLSBjdXN0b20gaGVhZGVyIGZvciBnemlwXG4gKiAgIC0gYHRleHRgIChCb29sZWFuKSAtIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHRcbiAqICAgLSBgdGltZWAgKE51bWJlcikgLSBtb2RpZmljYXRpb24gdGltZSwgdW5peCB0aW1lc3RhbXBcbiAqICAgLSBgb3NgIChOdW1iZXIpIC0gb3BlcmF0aW9uIHN5c3RlbSBjb2RlXG4gKiAgIC0gYGV4dHJhYCAoQXJyYXkpIC0gYXJyYXkgb2YgYnl0ZXMgd2l0aCBleHRyYSBkYXRhIChtYXggNjU1MzYpXG4gKiAgIC0gYG5hbWVgIChTdHJpbmcpIC0gZmlsZSBuYW1lIChiaW5hcnkgc3RyaW5nKVxuICogICAtIGBjb21tZW50YCAoU3RyaW5nKSAtIGNvbW1lbnQgKGJpbmFyeSBzdHJpbmcpXG4gKiAgIC0gYGhjcmNgIChCb29sZWFuKSAtIHRydWUgaWYgaGVhZGVyIGNyYyBzaG91bGQgYmUgYWRkZWRcbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgY2h1bmsxID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKVxuICogICAsIGNodW5rMiA9IFVpbnQ4QXJyYXkoWzEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5XSk7XG4gKlxuICogdmFyIGRlZmxhdGUgPSBuZXcgcGFrby5EZWZsYXRlKHsgbGV2ZWw6IDN9KTtcbiAqXG4gKiBkZWZsYXRlLnB1c2goY2h1bmsxLCBmYWxzZSk7XG4gKiBkZWZsYXRlLnB1c2goY2h1bmsyLCB0cnVlKTsgIC8vIHRydWUgLT4gbGFzdCBjaHVua1xuICpcbiAqIGlmIChkZWZsYXRlLmVycikgeyB0aHJvdyBuZXcgRXJyb3IoZGVmbGF0ZS5lcnIpOyB9XG4gKlxuICogY29uc29sZS5sb2coZGVmbGF0ZS5yZXN1bHQpO1xuICogYGBgXG4gKiovXG5mdW5jdGlvbiBEZWZsYXRlKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGUpKSByZXR1cm4gbmV3IERlZmxhdGUob3B0aW9ucyk7XG5cbiAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHtcbiAgICBsZXZlbDogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuICAgIG1ldGhvZDogWl9ERUZMQVRFRCxcbiAgICBjaHVua1NpemU6IDE2Mzg0LFxuICAgIHdpbmRvd0JpdHM6IDE1LFxuICAgIG1lbUxldmVsOiA4LFxuICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksXG4gICAgdG86ICcnXG4gIH0sIG9wdGlvbnMgfHwge30pO1xuXG4gIHZhciBvcHQgPSB0aGlzLm9wdGlvbnM7XG5cbiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID4gMCkpIHtcbiAgICBvcHQud2luZG93Qml0cyA9IC1vcHQud2luZG93Qml0cztcbiAgfVxuXG4gIGVsc2UgaWYgKG9wdC5nemlwICYmIChvcHQud2luZG93Qml0cyA+IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkge1xuICAgIG9wdC53aW5kb3dCaXRzICs9IDE2O1xuICB9XG5cbiAgdGhpcy5lcnIgICAgPSAwOyAgICAgIC8vIGVycm9yIGNvZGUsIGlmIGhhcHBlbnMgKDAgPSBaX09LKVxuICB0aGlzLm1zZyAgICA9ICcnOyAgICAgLy8gZXJyb3IgbWVzc2FnZVxuICB0aGlzLmVuZGVkICA9IGZhbHNlOyAgLy8gdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBvbkVuZCgpIGNhbGxzXG4gIHRoaXMuY2h1bmtzID0gW107ICAgICAvLyBjaHVua3Mgb2YgY29tcHJlc3NlZCBkYXRhXG5cbiAgdGhpcy5zdHJtID0gbmV3IFpTdHJlYW0oKTtcbiAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7XG5cbiAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIoXG4gICAgdGhpcy5zdHJtLFxuICAgIG9wdC5sZXZlbCxcbiAgICBvcHQubWV0aG9kLFxuICAgIG9wdC53aW5kb3dCaXRzLFxuICAgIG9wdC5tZW1MZXZlbCxcbiAgICBvcHQuc3RyYXRlZ3lcbiAgKTtcblxuICBpZiAoc3RhdHVzICE9PSBaX09LKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTtcbiAgfVxuXG4gIGlmIChvcHQuaGVhZGVyKSB7XG4gICAgemxpYl9kZWZsYXRlLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLCBvcHQuaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChvcHQuZGljdGlvbmFyeSkge1xuICAgIHZhciBkaWN0O1xuICAgIC8vIENvbnZlcnQgZGF0YSBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgd2UgbmVlZCB0byBjb21wcmVzcyB0ZXh0LCBjaGFuZ2UgZW5jb2RpbmcgdG8gdXRmOC5cbiAgICAgIGRpY3QgPSBzdHJpbmdzLnN0cmluZzJidWYob3B0LmRpY3Rpb25hcnkpO1xuICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcbiAgICAgIGRpY3QgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTtcbiAgICB9XG5cbiAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBkaWN0KTtcblxuICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRGVmbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhblxuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fEFycmF5QnVmZmVyfFN0cmluZyk6IGlucHV0IGRhdGEuIFN0cmluZ3Mgd2lsbCBiZVxuICogICBjb252ZXJ0ZWQgdG8gdXRmOCBieXRlIHNlcXVlbmNlLlxuICogLSBtb2RlIChOdW1iZXJ8Qm9vbGVhbik6IDAuLjYgZm9yIGNvcnJlc3BvbmRpbmcgWl9OT19GTFVTSC4uWl9UUkVFIG1vZGVzLlxuICogICBTZWUgY29uc3RhbnRzLiBTa2lwcGVkIG9yIGBmYWxzZWAgbWVhbnMgWl9OT19GTFVTSCwgYHRydWVgIG1lYW5zIFpfRklOSVNILlxuICpcbiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gZGVmbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtbRGVmbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoXG4gKiBuZXcgY29tcHJlc3NlZCBjaHVua3MuIFJldHVybnMgYHRydWVgIG9uIHN1Y2Nlc3MuIFRoZSBsYXN0IGRhdGEgYmxvY2sgbXVzdCBoYXZlXG4gKiBtb2RlIFpfRklOSVNIIChvciBgdHJ1ZWApLiBUaGF0IHdpbGwgZmx1c2ggaW50ZXJuYWwgcGVuZGluZyBidWZmZXJzIGFuZCBjYWxsXG4gKiBbW0RlZmxhdGUjb25FbmRdXS4gRm9yIGludGVyaW0gZXhwbGljaXQgZmx1c2hlcyAod2l0aG91dCBlbmRpbmcgdGhlIHN0cmVhbSkgeW91XG4gKiBjYW4gdXNlIG1vZGUgWl9TWU5DX0ZMVVNILCBrZWVwaW5nIHRoZSBjb21wcmVzc2lvbiBjb250ZXh0LlxuICpcbiAqIE9uIGZhaWwgY2FsbCBbW0RlZmxhdGUjb25FbmRdXSB3aXRoIGVycm9yIGNvZGUgYW5kIHJldHVybiBmYWxzZS5cbiAqXG4gKiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdG8gdXNlIGBVaW50OEFycmF5YCBvbiBpbnB1dCBmb3IgYmVzdCBzcGVlZCAob3V0cHV0XG4gKiBhcnJheSBmb3JtYXQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSkuIEFsc28sIGRvbid0IHNraXAgbGFzdCBwYXJhbSBhbmQgYWx3YXlzXG4gKiB1c2UgdGhlIHNhbWUgdHlwZSBpbiB5b3VyIGNvZGUgKGJvb2xlYW4gb3IgbnVtYmVyKS4gVGhhdCB3aWxsIGltcHJvdmUgSlMgc3BlZWQuXG4gKlxuICogRm9yIHJlZ3VsYXIgYEFycmF5YC1zIG1ha2Ugc3VyZSBhbGwgZWxlbWVudHMgYXJlIFswLi4yNTVdLlxuICpcbiAqICMjIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBwdXNoKGNodW5rLCBmYWxzZSk7IC8vIHB1c2ggb25lIG9mIGRhdGEgY2h1bmtzXG4gKiAuLi5cbiAqIHB1c2goY2h1bmssIHRydWUpOyAgLy8gcHVzaCBsYXN0IGNodW5rXG4gKiBgYGBcbiAqKi9cbkRlZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgbW9kZSkge1xuICB2YXIgc3RybSA9IHRoaXMuc3RybTtcbiAgdmFyIGNodW5rU2l6ZSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemU7XG4gIHZhciBzdGF0dXMsIF9tb2RlO1xuXG4gIGlmICh0aGlzLmVuZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIF9tb2RlID0gKG1vZGUgPT09IH5+bW9kZSkgPyBtb2RlIDogKChtb2RlID09PSB0cnVlKSA/IFpfRklOSVNIIDogWl9OT19GTFVTSCk7XG5cbiAgLy8gQ29udmVydCBkYXRhIGlmIG5lZWRlZFxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gSWYgd2UgbmVlZCB0byBjb21wcmVzcyB0ZXh0LCBjaGFuZ2UgZW5jb2RpbmcgdG8gdXRmOC5cbiAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKGRhdGEpO1xuICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcbiAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgc3RybS5pbnB1dCA9IGRhdGE7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gPSAwO1xuICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7XG5cbiAgZG8ge1xuICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpO1xuICAgICAgc3RybS5uZXh0X291dCA9IDA7XG4gICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTtcbiAgICB9XG4gICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGUoc3RybSwgX21vZGUpOyAgICAvKiBubyBiYWQgcmV0dXJuIHZhbHVlICovXG5cbiAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7XG4gICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7XG4gICAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IChzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gWl9GSU5JU0ggfHwgX21vZGUgPT09IFpfU1lOQ19GTFVTSCkpKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkRhdGEodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlICgoc3RybS5hdmFpbF9pbiA+IDAgfHwgc3RybS5hdmFpbF9vdXQgPT09IDApICYmIHN0YXR1cyAhPT0gWl9TVFJFQU1fRU5EKTtcblxuICAvLyBGaW5hbGl6ZSBvbiB0aGUgbGFzdCBjaHVuay5cbiAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkge1xuICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk7XG4gICAgdGhpcy5vbkVuZChzdGF0dXMpO1xuICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgIHJldHVybiBzdGF0dXMgPT09IFpfT0s7XG4gIH1cblxuICAvLyBjYWxsYmFjayBpbnRlcmltIHJlc3VsdHMgaWYgWl9TWU5DX0ZMVVNILlxuICBpZiAoX21vZGUgPT09IFpfU1lOQ19GTFVTSCkge1xuICAgIHRoaXMub25FbmQoWl9PSyk7XG4gICAgc3RybS5hdmFpbF9vdXQgPSAwO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKlxuICogRGVmbGF0ZSNvbkRhdGEoY2h1bmspIC0+IFZvaWRcbiAqIC0gY2h1bmsgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogb3V0cHV0IGRhdGEuIFR5cGUgb2YgYXJyYXkgZGVwZW5kc1xuICogICBvbiBqcyBlbmdpbmUgc3VwcG9ydC4gV2hlbiBzdHJpbmcgb3V0cHV0IHJlcXVlc3RlZCwgZWFjaCBjaHVua1xuICogICB3aWxsIGJlIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBzdG9yZXMgZGF0YSBibG9ja3MgaW4gYGNodW5rc1tdYCBwcm9wZXJ0eSBhbmQgZ2x1ZVxuICogdGhvc2UgaW4gYG9uRW5kYC4gT3ZlcnJpZGUgdGhpcyBoYW5kbGVyLCBpZiB5b3UgbmVlZCBhbm90aGVyIGJlaGF2aW91ci5cbiAqKi9cbkRlZmxhdGUucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTtcbn07XG5cblxuLyoqXG4gKiBEZWZsYXRlI29uRW5kKHN0YXR1cykgLT4gVm9pZFxuICogLSBzdGF0dXMgKE51bWJlcik6IGRlZmxhdGUgc3RhdHVzLiAwIChaX09LKSBvbiBzdWNjZXNzLFxuICogICBvdGhlciBpZiBub3QuXG4gKlxuICogQ2FsbGVkIG9uY2UgYWZ0ZXIgeW91IHRlbGwgZGVmbGF0ZSB0aGF0IHRoZSBpbnB1dCBzdHJlYW0gaXNcbiAqIGNvbXBsZXRlIChaX0ZJTklTSCkgb3Igc2hvdWxkIGJlIGZsdXNoZWQgKFpfU1lOQ19GTFVTSClcbiAqIG9yIGlmIGFuIGVycm9yIGhhcHBlbmVkLiBCeSBkZWZhdWx0IC0gam9pbiBjb2xsZWN0ZWQgY2h1bmtzLFxuICogZnJlZSBtZW1vcnkgYW5kIGZpbGwgYHJlc3VsdHNgIC8gYGVycmAgcHJvcGVydGllcy5cbiAqKi9cbkRlZmxhdGUucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICAvLyBPbiBzdWNjZXNzIC0gam9pblxuICBpZiAoc3RhdHVzID09PSBaX09LKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gdXRpbHMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7XG4gICAgfVxuICB9XG4gIHRoaXMuY2h1bmtzID0gW107XG4gIHRoaXMuZXJyID0gc3RhdHVzO1xuICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7XG59O1xuXG5cbi8qKlxuICogZGVmbGF0ZShkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy5cbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuXG4gKlxuICogQ29tcHJlc3MgYGRhdGFgIHdpdGggZGVmbGF0ZSBhbGdvcml0aG0gYW5kIGBvcHRpb25zYC5cbiAqXG4gKiBTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6XG4gKlxuICogLSBsZXZlbFxuICogLSB3aW5kb3dCaXRzXG4gKiAtIG1lbUxldmVsXG4gKiAtIHN0cmF0ZWd5XG4gKiAtIGRpY3Rpb25hcnlcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS5cbiAqXG4gKiBTdWdhciAob3B0aW9ucyk6XG4gKlxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBzYXkgdGhhdCB3ZSB3b3JrIHdpdGggcmF3IHN0cmVhbSwgaWYgeW91IGRvbid0IHdpc2ggdG8gc3BlY2lmeVxuICogICBuZWdhdGl2ZSB3aW5kb3dCaXRzIGltcGxpY2l0bHkuXG4gKiAtIGB0b2AgKFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSBcImJpbmFyeSBzdHJpbmdcIlxuICogICAgKGVhY2ggY2hhciBjb2RlIFswLi4yNTVdKVxuICpcbiAqICMjIyMjIEV4YW1wbGU6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBha28gPSByZXF1aXJlKCdwYWtvJylcbiAqICAgLCBkYXRhID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwYWtvLmRlZmxhdGUoZGF0YSkpO1xuICogYGBgXG4gKiovXG5mdW5jdGlvbiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpO1xuXG4gIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpO1xuXG4gIC8vIFRoYXQgd2lsbCBuZXZlciBoYXBwZW5zLCBpZiB5b3UgZG9uJ3QgY2hlYXQgd2l0aCBvcHRpb25zIDopXG4gIGlmIChkZWZsYXRvci5lcnIpIHsgdGhyb3cgZGVmbGF0b3IubXNnIHx8IG1zZ1tkZWZsYXRvci5lcnJdOyB9XG5cbiAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDtcbn1cblxuXG4vKipcbiAqIGRlZmxhdGVSYXcoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgZGVmbGF0ZSBvcHRpb25zLlxuICpcbiAqIFRoZSBzYW1lIGFzIFtbZGVmbGF0ZV1dLCBidXQgY3JlYXRlcyByYXcgZGF0YSwgd2l0aG91dCB3cmFwcGVyXG4gKiAoaGVhZGVyIGFuZCBhZGxlcjMyIGNyYykuXG4gKiovXG5mdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnJhdyA9IHRydWU7XG4gIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTtcbn1cblxuXG4vKipcbiAqIGd6aXAoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgZGVmbGF0ZSBvcHRpb25zLlxuICpcbiAqIFRoZSBzYW1lIGFzIFtbZGVmbGF0ZV1dLCBidXQgY3JlYXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkIG9mXG4gKiBkZWZsYXRlIG9uZS5cbiAqKi9cbmZ1bmN0aW9uIGd6aXAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuZ3ppcCA9IHRydWU7XG4gIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTtcbn1cblxuXG5leHBvcnRzLkRlZmxhdGUgPSBEZWZsYXRlO1xuZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTtcbmV4cG9ydHMuZGVmbGF0ZVJhdyA9IGRlZmxhdGVSYXc7XG5leHBvcnRzLmd6aXAgPSBnemlwO1xuXG59LHtcIi4vdXRpbHMvY29tbW9uXCI6MzA0LFwiLi91dGlscy9zdHJpbmdzXCI6MzA1LFwiLi96bGliL2RlZmxhdGVcIjozMDksXCIuL3psaWIvbWVzc2FnZXNcIjozMTQsXCIuL3psaWIvenN0cmVhbVwiOjMxNn1dLDMwMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cblxudmFyIHpsaWJfaW5mbGF0ZSA9IF9kZXJlcV8oJy4vemxpYi9pbmZsYXRlJyk7XG52YXIgdXRpbHMgICAgICAgID0gX2RlcmVxXygnLi91dGlscy9jb21tb24nKTtcbnZhciBzdHJpbmdzICAgICAgPSBfZGVyZXFfKCcuL3V0aWxzL3N0cmluZ3MnKTtcbnZhciBjICAgICAgICAgICAgPSBfZGVyZXFfKCcuL3psaWIvY29uc3RhbnRzJyk7XG52YXIgbXNnICAgICAgICAgID0gX2RlcmVxXygnLi96bGliL21lc3NhZ2VzJyk7XG52YXIgWlN0cmVhbSAgICAgID0gX2RlcmVxXygnLi96bGliL3pzdHJlYW0nKTtcbnZhciBHWmhlYWRlciAgICAgPSBfZGVyZXFfKCcuL3psaWIvZ3poZWFkZXInKTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBjbGFzcyBJbmZsYXRlXG4gKlxuICogR2VuZXJpYyBKUy1zdHlsZSB3cmFwcGVyIGZvciB6bGliIGNhbGxzLiBJZiB5b3UgZG9uJ3QgbmVlZFxuICogc3RyZWFtaW5nIGJlaGF2aW91ciAtIHVzZSBtb3JlIHNpbXBsZSBmdW5jdGlvbnM6IFtbaW5mbGF0ZV1dXG4gKiBhbmQgW1tpbmZsYXRlUmF3XV0uXG4gKiovXG5cbi8qIGludGVybmFsXG4gKiBpbmZsYXRlLmNodW5rcyAtPiBBcnJheVxuICpcbiAqIENodW5rcyBvZiBvdXRwdXQgZGF0YSwgaWYgW1tJbmZsYXRlI29uRGF0YV1dIG5vdCBvdmVycmlkZGVuLlxuICoqL1xuXG4vKipcbiAqIEluZmxhdGUucmVzdWx0IC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nXG4gKlxuICogVW5jb21wcmVzc2VkIHJlc3VsdCwgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgW1tJbmZsYXRlI29uRGF0YV1dXG4gKiBhbmQgW1tJbmZsYXRlI29uRW5kXV0gaGFuZGxlcnMuIEZpbGxlZCBhZnRlciB5b3UgcHVzaCBsYXN0IGNodW5rXG4gKiAoY2FsbCBbW0luZmxhdGUjcHVzaF1dIHdpdGggYFpfRklOSVNIYCAvIGB0cnVlYCBwYXJhbSkgb3IgaWYgeW91XG4gKiBwdXNoIGEgY2h1bmsgd2l0aCBleHBsaWNpdCBmbHVzaCAoY2FsbCBbW0luZmxhdGUjcHVzaF1dIHdpdGhcbiAqIGBaX1NZTkNfRkxVU0hgIHBhcmFtKS5cbiAqKi9cblxuLyoqXG4gKiBJbmZsYXRlLmVyciAtPiBOdW1iZXJcbiAqXG4gKiBFcnJvciBjb2RlIGFmdGVyIGluZmxhdGUgZmluaXNoZWQuIDAgKFpfT0spIG9uIHN1Y2Nlc3MuXG4gKiBTaG91bGQgYmUgY2hlY2tlZCBpZiBicm9rZW4gZGF0YSBwb3NzaWJsZS5cbiAqKi9cblxuLyoqXG4gKiBJbmZsYXRlLm1zZyAtPiBTdHJpbmdcbiAqXG4gKiBFcnJvciBtZXNzYWdlLCBpZiBbW0luZmxhdGUuZXJyXV0gIT0gMFxuICoqL1xuXG5cbi8qKlxuICogbmV3IEluZmxhdGUob3B0aW9ucylcbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuXG4gKlxuICogQ3JlYXRlcyBuZXcgaW5mbGF0b3IgaW5zdGFuY2Ugd2l0aCBzcGVjaWZpZWQgcGFyYW1zLiBUaHJvd3MgZXhjZXB0aW9uXG4gKiBvbiBiYWQgcGFyYW1zLiBTdXBwb3J0ZWQgb3B0aW9uczpcbiAqXG4gKiAtIGB3aW5kb3dCaXRzYFxuICogLSBgZGljdGlvbmFyeWBcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS5cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbnMsIGZvciBpbnRlcm5hbCBuZWVkczpcbiAqXG4gKiAtIGBjaHVua1NpemVgIC0gc2l6ZSBvZiBnZW5lcmF0ZWQgZGF0YSBjaHVua3MgKDE2SyBieSBkZWZhdWx0KVxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBkbyByYXcgaW5mbGF0ZVxuICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgY29udmVydGVkXG4gKiAgIGZyb20gdXRmOCB0byB1dGYxNiAoamF2YXNjcmlwdCkgc3RyaW5nLiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLFxuICogICBjaHVuayBsZW5ndGggY2FuIGRpZmZlciBmcm9tIGBjaHVua1NpemVgLCBkZXBlbmRpbmcgb24gY29udGVudC5cbiAqXG4gKiBCeSBkZWZhdWx0LCB3aGVuIG5vIG9wdGlvbnMgc2V0LCBhdXRvZGV0ZWN0IGRlZmxhdGUvZ3ppcCBkYXRhIGZvcm1hdCB2aWFcbiAqIHdyYXBwZXIgaGVhZGVyLlxuICpcbiAqICMjIyMjIEV4YW1wbGU6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBha28gPSByZXF1aXJlKCdwYWtvJylcbiAqICAgLCBjaHVuazEgPSBVaW50OEFycmF5KFsxLDIsMyw0LDUsNiw3LDgsOV0pXG4gKiAgICwgY2h1bmsyID0gVWludDhBcnJheShbMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTldKTtcbiAqXG4gKiB2YXIgaW5mbGF0ZSA9IG5ldyBwYWtvLkluZmxhdGUoeyBsZXZlbDogM30pO1xuICpcbiAqIGluZmxhdGUucHVzaChjaHVuazEsIGZhbHNlKTtcbiAqIGluZmxhdGUucHVzaChjaHVuazIsIHRydWUpOyAgLy8gdHJ1ZSAtPiBsYXN0IGNodW5rXG4gKlxuICogaWYgKGluZmxhdGUuZXJyKSB7IHRocm93IG5ldyBFcnJvcihpbmZsYXRlLmVycik7IH1cbiAqXG4gKiBjb25zb2xlLmxvZyhpbmZsYXRlLnJlc3VsdCk7XG4gKiBgYGBcbiAqKi9cbmZ1bmN0aW9uIEluZmxhdGUob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZSkpIHJldHVybiBuZXcgSW5mbGF0ZShvcHRpb25zKTtcblxuICB0aGlzLm9wdGlvbnMgPSB1dGlscy5hc3NpZ24oe1xuICAgIGNodW5rU2l6ZTogMTYzODQsXG4gICAgd2luZG93Qml0czogMCxcbiAgICB0bzogJydcbiAgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgdmFyIG9wdCA9IHRoaXMub3B0aW9ucztcblxuICAvLyBGb3JjZSB3aW5kb3cgc2l6ZSBmb3IgYHJhd2AgZGF0YSwgaWYgbm90IHNldCBkaXJlY3RseSxcbiAgLy8gYmVjYXVzZSB3ZSBoYXZlIG5vIGhlYWRlciBmb3IgYXV0b2RldGVjdC5cbiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkge1xuICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzO1xuICAgIGlmIChvcHQud2luZG93Qml0cyA9PT0gMCkgeyBvcHQud2luZG93Qml0cyA9IC0xNTsgfVxuICB9XG5cbiAgLy8gSWYgYHdpbmRvd0JpdHNgIG5vdCBkZWZpbmVkIChhbmQgbW9kZSBub3QgcmF3KSAtIHNldCBhdXRvZGV0ZWN0IGZsYWcgZm9yIGd6aXAvZGVmbGF0ZVxuICBpZiAoKG9wdC53aW5kb3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSAmJlxuICAgICAgIShvcHRpb25zICYmIG9wdGlvbnMud2luZG93Qml0cykpIHtcbiAgICBvcHQud2luZG93Qml0cyArPSAzMjtcbiAgfVxuXG4gIC8vIEd6aXAgaGVhZGVyIGhhcyBubyBpbmZvIGFib3V0IHdpbmRvd3Mgc2l6ZSwgd2UgY2FuIGRvIGF1dG9kZXRlY3Qgb25seVxuICAvLyBmb3IgZGVmbGF0ZS4gU28sIGlmIHdpbmRvdyBzaXplIG5vdCBzZXQsIGZvcmNlIGl0IHRvIG1heCB3aGVuIGd6aXAgcG9zc2libGVcbiAgaWYgKChvcHQud2luZG93Qml0cyA+IDE1KSAmJiAob3B0LndpbmRvd0JpdHMgPCA0OCkpIHtcbiAgICAvLyBiaXQgMyAoMTYpIC0+IGd6aXBwZWQgZGF0YVxuICAgIC8vIGJpdCA0ICgzMikgLT4gYXV0b2RldGVjdCBnemlwL2RlZmxhdGVcbiAgICBpZiAoKG9wdC53aW5kb3dCaXRzICYgMTUpID09PSAwKSB7XG4gICAgICBvcHQud2luZG93Qml0cyB8PSAxNTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmVyciAgICA9IDA7ICAgICAgLy8gZXJyb3IgY29kZSwgaWYgaGFwcGVucyAoMCA9IFpfT0spXG4gIHRoaXMubXNnICAgID0gJyc7ICAgICAvLyBlcnJvciBtZXNzYWdlXG4gIHRoaXMuZW5kZWQgID0gZmFsc2U7ICAvLyB1c2VkIHRvIGF2b2lkIG11bHRpcGxlIG9uRW5kKCkgY2FsbHNcbiAgdGhpcy5jaHVua3MgPSBbXTsgICAgIC8vIGNodW5rcyBvZiBjb21wcmVzc2VkIGRhdGFcblxuICB0aGlzLnN0cm0gICA9IG5ldyBaU3RyZWFtKCk7XG4gIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwO1xuXG4gIHZhciBzdGF0dXMgID0gemxpYl9pbmZsYXRlLmluZmxhdGVJbml0MihcbiAgICB0aGlzLnN0cm0sXG4gICAgb3B0LndpbmRvd0JpdHNcbiAgKTtcblxuICBpZiAoc3RhdHVzICE9PSBjLlpfT0spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pO1xuICB9XG5cbiAgdGhpcy5oZWFkZXIgPSBuZXcgR1poZWFkZXIoKTtcblxuICB6bGliX2luZmxhdGUuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sIHRoaXMuaGVhZGVyKTtcbn1cblxuLyoqXG4gKiBJbmZsYXRlI3B1c2goZGF0YVssIG1vZGVdKSAtPiBCb29sZWFuXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8QXJyYXlCdWZmZXJ8U3RyaW5nKTogaW5wdXQgZGF0YVxuICogLSBtb2RlIChOdW1iZXJ8Qm9vbGVhbik6IDAuLjYgZm9yIGNvcnJlc3BvbmRpbmcgWl9OT19GTFVTSC4uWl9UUkVFIG1vZGVzLlxuICogICBTZWUgY29uc3RhbnRzLiBTa2lwcGVkIG9yIGBmYWxzZWAgbWVhbnMgWl9OT19GTFVTSCwgYHRydWVgIG1lYW5zIFpfRklOSVNILlxuICpcbiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gaW5mbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtbSW5mbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoXG4gKiBuZXcgb3V0cHV0IGNodW5rcy4gUmV0dXJucyBgdHJ1ZWAgb24gc3VjY2Vzcy4gVGhlIGxhc3QgZGF0YSBibG9jayBtdXN0IGhhdmVcbiAqIG1vZGUgWl9GSU5JU0ggKG9yIGB0cnVlYCkuIFRoYXQgd2lsbCBmbHVzaCBpbnRlcm5hbCBwZW5kaW5nIGJ1ZmZlcnMgYW5kIGNhbGxcbiAqIFtbSW5mbGF0ZSNvbkVuZF1dLiBGb3IgaW50ZXJpbSBleHBsaWNpdCBmbHVzaGVzICh3aXRob3V0IGVuZGluZyB0aGUgc3RyZWFtKSB5b3VcbiAqIGNhbiB1c2UgbW9kZSBaX1NZTkNfRkxVU0gsIGtlZXBpbmcgdGhlIGRlY29tcHJlc3Npb24gY29udGV4dC5cbiAqXG4gKiBPbiBmYWlsIGNhbGwgW1tJbmZsYXRlI29uRW5kXV0gd2l0aCBlcnJvciBjb2RlIGFuZCByZXR1cm4gZmFsc2UuXG4gKlxuICogV2Ugc3Ryb25nbHkgcmVjb21tZW5kIHRvIHVzZSBgVWludDhBcnJheWAgb24gaW5wdXQgZm9yIGJlc3Qgc3BlZWQgKG91dHB1dFxuICogZm9ybWF0IGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkpLiBBbHNvLCBkb24ndCBza2lwIGxhc3QgcGFyYW0gYW5kIGFsd2F5c1xuICogdXNlIHRoZSBzYW1lIHR5cGUgaW4geW91ciBjb2RlIChib29sZWFuIG9yIG51bWJlcikuIFRoYXQgd2lsbCBpbXByb3ZlIEpTIHNwZWVkLlxuICpcbiAqIEZvciByZWd1bGFyIGBBcnJheWAtcyBtYWtlIHN1cmUgYWxsIGVsZW1lbnRzIGFyZSBbMC4uMjU1XS5cbiAqXG4gKiAjIyMjIyBFeGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogcHVzaChjaHVuaywgZmFsc2UpOyAvLyBwdXNoIG9uZSBvZiBkYXRhIGNodW5rc1xuICogLi4uXG4gKiBwdXNoKGNodW5rLCB0cnVlKTsgIC8vIHB1c2ggbGFzdCBjaHVua1xuICogYGBgXG4gKiovXG5JbmZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIG1vZGUpIHtcbiAgdmFyIHN0cm0gPSB0aGlzLnN0cm07XG4gIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplO1xuICB2YXIgZGljdGlvbmFyeSA9IHRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5O1xuICB2YXIgc3RhdHVzLCBfbW9kZTtcbiAgdmFyIG5leHRfb3V0X3V0ZjgsIHRhaWwsIHV0ZjhzdHI7XG4gIHZhciBkaWN0O1xuXG4gIC8vIEZsYWcgdG8gcHJvcGVybHkgcHJvY2VzcyBaX0JVRl9FUlJPUiBvbiB0ZXN0aW5nIGluZmxhdGUgY2FsbFxuICAvLyB3aGVuIHdlIGNoZWNrIHRoYXQgYWxsIG91dHB1dCBkYXRhIHdhcyBmbHVzaGVkLlxuICB2YXIgYWxsb3dCdWZFcnJvciA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLmVuZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICBfbW9kZSA9IChtb2RlID09PSB+fm1vZGUpID8gbW9kZSA6ICgobW9kZSA9PT0gdHJ1ZSkgPyBjLlpfRklOSVNIIDogYy5aX05PX0ZMVVNIKTtcblxuICAvLyBDb252ZXJ0IGRhdGEgaWYgbmVlZGVkXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBPbmx5IGJpbmFyeSBzdHJpbmdzIGNhbiBiZSBkZWNvbXByZXNzZWQgb24gcHJhY3RpY2VcbiAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5iaW5zdHJpbmcyYnVmKGRhdGEpO1xuICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcbiAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgc3RybS5pbnB1dCA9IGRhdGE7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gPSAwO1xuICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7XG5cbiAgZG8ge1xuICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpO1xuICAgICAgc3RybS5uZXh0X291dCA9IDA7XG4gICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTtcbiAgICB9XG5cbiAgICBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZShzdHJtLCBjLlpfTk9fRkxVU0gpOyAgICAvKiBubyBiYWQgcmV0dXJuIHZhbHVlICovXG5cbiAgICBpZiAoc3RhdHVzID09PSBjLlpfTkVFRF9ESUNUICYmIGRpY3Rpb25hcnkpIHtcbiAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBuZWVkZWRcbiAgICAgIGlmICh0eXBlb2YgZGljdGlvbmFyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGljdCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihkaWN0aW9uYXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChkaWN0aW9uYXJ5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuICAgICAgICBkaWN0ID0gbmV3IFVpbnQ4QXJyYXkoZGljdGlvbmFyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWN0ID0gZGljdGlvbmFyeTtcbiAgICAgIH1cblxuICAgICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZGljdCk7XG5cbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSBjLlpfQlVGX0VSUk9SICYmIGFsbG93QnVmRXJyb3IgPT09IHRydWUpIHtcbiAgICAgIHN0YXR1cyA9IGMuWl9PSztcbiAgICAgIGFsbG93QnVmRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IGMuWl9PSykge1xuICAgICAgdGhpcy5vbkVuZChzdGF0dXMpO1xuICAgICAgdGhpcy5lbmRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cm0ubmV4dF9vdXQpIHtcbiAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCB8fCBzdGF0dXMgPT09IGMuWl9TVFJFQU1fRU5EIHx8IChzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCB8fCBfbW9kZSA9PT0gYy5aX1NZTkNfRkxVU0gpKSkge1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgICBuZXh0X291dF91dGY4ID0gc3RyaW5ncy51dGY4Ym9yZGVyKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KTtcblxuICAgICAgICAgIHRhaWwgPSBzdHJtLm5leHRfb3V0IC0gbmV4dF9vdXRfdXRmODtcbiAgICAgICAgICB1dGY4c3RyID0gc3RyaW5ncy5idWYyc3RyaW5nKHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4KTtcblxuICAgICAgICAgIC8vIG1vdmUgdGFpbFxuICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSB0YWlsO1xuICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplIC0gdGFpbDtcbiAgICAgICAgICBpZiAodGFpbCkgeyB1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCwgc3RybS5vdXRwdXQsIG5leHRfb3V0X3V0ZjgsIHRhaWwsIDApOyB9XG5cbiAgICAgICAgICB0aGlzLm9uRGF0YSh1dGY4c3RyKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBubyBtb3JlIGlucHV0IGRhdGEsIHdlIHNob3VsZCBjaGVjayB0aGF0IGludGVybmFsIGluZmxhdGUgYnVmZmVyc1xuICAgIC8vIGFyZSBmbHVzaGVkLiBUaGUgb25seSB3YXkgdG8gZG8gaXQgd2hlbiBhdmFpbF9vdXQgPSAwIC0gcnVuIG9uZSBtb3JlXG4gICAgLy8gaW5mbGF0ZSBwYXNzLiBCdXQgaWYgb3V0cHV0IGRhdGEgbm90IGV4aXN0cywgaW5mbGF0ZSByZXR1cm4gWl9CVUZfRVJST1IuXG4gICAgLy8gSGVyZSB3ZSBzZXQgZmxhZyB0byBwcm9jZXNzIHRoaXMgZXJyb3IgcHJvcGVybHkuXG4gICAgLy9cbiAgICAvLyBOT1RFLiBEZWZsYXRlIGRvZXMgbm90IHJldHVybiBlcnJvciBpbiB0aGlzIGNhc2UgYW5kIGRvZXMgbm90IG5lZWRzIHN1Y2hcbiAgICAvLyBsb2dpYy5cbiAgICBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiBzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgYWxsb3dCdWZFcnJvciA9IHRydWU7XG4gICAgfVxuXG4gIH0gd2hpbGUgKChzdHJtLmF2YWlsX2luID4gMCB8fCBzdHJtLmF2YWlsX291dCA9PT0gMCkgJiYgc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCk7XG5cbiAgaWYgKHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQpIHtcbiAgICBfbW9kZSA9IGMuWl9GSU5JU0g7XG4gIH1cblxuICAvLyBGaW5hbGl6ZSBvbiB0aGUgbGFzdCBjaHVuay5cbiAgaWYgKF9tb2RlID09PSBjLlpfRklOSVNIKSB7XG4gICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTtcbiAgICB0aGlzLm9uRW5kKHN0YXR1cyk7XG4gICAgdGhpcy5lbmRlZCA9IHRydWU7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gYy5aX09LO1xuICB9XG5cbiAgLy8gY2FsbGJhY2sgaW50ZXJpbSByZXN1bHRzIGlmIFpfU1lOQ19GTFVTSC5cbiAgaWYgKF9tb2RlID09PSBjLlpfU1lOQ19GTFVTSCkge1xuICAgIHRoaXMub25FbmQoYy5aX09LKTtcbiAgICBzdHJtLmF2YWlsX291dCA9IDA7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqXG4gKiBJbmZsYXRlI29uRGF0YShjaHVuaykgLT4gVm9pZFxuICogLSBjaHVuayAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBvdXRwdXQgZGF0YS4gVHlwZSBvZiBhcnJheSBkZXBlbmRzXG4gKiAgIG9uIGpzIGVuZ2luZSBzdXBwb3J0LiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLCBlYWNoIGNodW5rXG4gKiAgIHdpbGwgYmUgc3RyaW5nLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHN0b3JlcyBkYXRhIGJsb2NrcyBpbiBgY2h1bmtzW11gIHByb3BlcnR5IGFuZCBnbHVlXG4gKiB0aG9zZSBpbiBgb25FbmRgLiBPdmVycmlkZSB0aGlzIGhhbmRsZXIsIGlmIHlvdSBuZWVkIGFub3RoZXIgYmVoYXZpb3VyLlxuICoqL1xuSW5mbGF0ZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xufTtcblxuXG4vKipcbiAqIEluZmxhdGUjb25FbmQoc3RhdHVzKSAtPiBWb2lkXG4gKiAtIHN0YXR1cyAoTnVtYmVyKTogaW5mbGF0ZSBzdGF0dXMuIDAgKFpfT0spIG9uIHN1Y2Nlc3MsXG4gKiAgIG90aGVyIGlmIG5vdC5cbiAqXG4gKiBDYWxsZWQgZWl0aGVyIGFmdGVyIHlvdSB0ZWxsIGluZmxhdGUgdGhhdCB0aGUgaW5wdXQgc3RyZWFtIGlzXG4gKiBjb21wbGV0ZSAoWl9GSU5JU0gpIG9yIHNob3VsZCBiZSBmbHVzaGVkIChaX1NZTkNfRkxVU0gpXG4gKiBvciBpZiBhbiBlcnJvciBoYXBwZW5lZC4gQnkgZGVmYXVsdCAtIGpvaW4gY29sbGVjdGVkIGNodW5rcyxcbiAqIGZyZWUgbWVtb3J5IGFuZCBmaWxsIGByZXN1bHRzYCAvIGBlcnJgIHByb3BlcnRpZXMuXG4gKiovXG5JbmZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgLy8gT24gc3VjY2VzcyAtIGpvaW5cbiAgaWYgKHN0YXR1cyA9PT0gYy5aX09LKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEdsdWUgJiBjb252ZXJ0IGhlcmUsIHVudGlsIHdlIHRlYWNoIHBha28gdG8gc2VuZFxuICAgICAgLy8gdXRmOCBhbGlnbmVkIHN0cmluZ3MgdG8gb25EYXRhXG4gICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNodW5rcyA9IFtdO1xuICB0aGlzLmVyciA9IHN0YXR1cztcbiAgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnO1xufTtcblxuXG4vKipcbiAqIGluZmxhdGUoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gZGVjb21wcmVzcy5cbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuXG4gKlxuICogRGVjb21wcmVzcyBgZGF0YWAgd2l0aCBpbmZsYXRlL3VuZ3ppcCBhbmQgYG9wdGlvbnNgLiBBdXRvZGV0ZWN0XG4gKiBmb3JtYXQgdmlhIHdyYXBwZXIgaGVhZGVyIGJ5IGRlZmF1bHQuIFRoYXQncyB3aHkgd2UgZG9uJ3QgcHJvdmlkZVxuICogc2VwYXJhdGUgYHVuZ3ppcGAgbWV0aG9kLlxuICpcbiAqIFN1cHBvcnRlZCBvcHRpb25zIGFyZTpcbiAqXG4gKiAtIHdpbmRvd0JpdHNcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBTdWdhciAob3B0aW9ucyk6XG4gKlxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBzYXkgdGhhdCB3ZSB3b3JrIHdpdGggcmF3IHN0cmVhbSwgaWYgeW91IGRvbid0IHdpc2ggdG8gc3BlY2lmeVxuICogICBuZWdhdGl2ZSB3aW5kb3dCaXRzIGltcGxpY2l0bHkuXG4gKiAtIGB0b2AgKFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSBjb252ZXJ0ZWRcbiAqICAgZnJvbSB1dGY4IHRvIHV0ZjE2IChqYXZhc2NyaXB0KSBzdHJpbmcuIFdoZW4gc3RyaW5nIG91dHB1dCByZXF1ZXN0ZWQsXG4gKiAgIGNodW5rIGxlbmd0aCBjYW4gZGlmZmVyIGZyb20gYGNodW5rU2l6ZWAsIGRlcGVuZGluZyBvbiBjb250ZW50LlxuICpcbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgaW5wdXQgPSBwYWtvLmRlZmxhdGUoWzEsMiwzLDQsNSw2LDcsOCw5XSlcbiAqICAgLCBvdXRwdXQ7XG4gKlxuICogdHJ5IHtcbiAqICAgb3V0cHV0ID0gcGFrby5pbmZsYXRlKGlucHV0KTtcbiAqIH0gY2F0Y2ggKGVycilcbiAqICAgY29uc29sZS5sb2coZXJyKTtcbiAqIH1cbiAqIGBgYFxuICoqL1xuZnVuY3Rpb24gaW5mbGF0ZShpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgaW5mbGF0b3IgPSBuZXcgSW5mbGF0ZShvcHRpb25zKTtcblxuICBpbmZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTtcblxuICAvLyBUaGF0IHdpbGwgbmV2ZXIgaGFwcGVucywgaWYgeW91IGRvbid0IGNoZWF0IHdpdGggb3B0aW9ucyA6KVxuICBpZiAoaW5mbGF0b3IuZXJyKSB7IHRocm93IGluZmxhdG9yLm1zZyB8fCBtc2dbaW5mbGF0b3IuZXJyXTsgfVxuXG4gIHJldHVybiBpbmZsYXRvci5yZXN1bHQ7XG59XG5cblxuLyoqXG4gKiBpbmZsYXRlUmF3KGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmdcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGRlY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLlxuICpcbiAqIFRoZSBzYW1lIGFzIFtbaW5mbGF0ZV1dLCBidXQgY3JlYXRlcyByYXcgZGF0YSwgd2l0aG91dCB3cmFwcGVyXG4gKiAoaGVhZGVyIGFuZCBhZGxlcjMyIGNyYykuXG4gKiovXG5mdW5jdGlvbiBpbmZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnJhdyA9IHRydWU7XG4gIHJldHVybiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKTtcbn1cblxuXG4vKipcbiAqIHVuZ3ppcChkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBkZWNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGluZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBKdXN0IHNob3J0Y3V0IHRvIFtbaW5mbGF0ZV1dLCBiZWNhdXNlIGl0IGF1dG9kZXRlY3RzIGZvcm1hdFxuICogYnkgaGVhZGVyLmNvbnRlbnQuIERvbmUgZm9yIGNvbnZlbmllbmNlLlxuICoqL1xuXG5cbmV4cG9ydHMuSW5mbGF0ZSA9IEluZmxhdGU7XG5leHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlO1xuZXhwb3J0cy5pbmZsYXRlUmF3ID0gaW5mbGF0ZVJhdztcbmV4cG9ydHMudW5nemlwICA9IGluZmxhdGU7XG5cbn0se1wiLi91dGlscy9jb21tb25cIjozMDQsXCIuL3V0aWxzL3N0cmluZ3NcIjozMDUsXCIuL3psaWIvY29uc3RhbnRzXCI6MzA3LFwiLi96bGliL2d6aGVhZGVyXCI6MzEwLFwiLi96bGliL2luZmxhdGVcIjozMTIsXCIuL3psaWIvbWVzc2FnZXNcIjozMTQsXCIuL3psaWIvenN0cmVhbVwiOjMxNn1dLDMwNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFRZUEVEX09LID0gICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyk7XG5cbmZ1bmN0aW9uIF9oYXMob2JqLCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG5cbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKG9iaiAvKmZyb20xLCBmcm9tMiwgZnJvbTMsIC4uLiovKSB7XG4gIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcbiAgICBpZiAoIXNvdXJjZSkgeyBjb250aW51ZTsgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNvdXJjZSArICdtdXN0IGJlIG5vbi1vYmplY3QnKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwIGluIHNvdXJjZSkge1xuICAgICAgaWYgKF9oYXMoc291cmNlLCBwKSkge1xuICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblxuLy8gcmVkdWNlIGJ1ZmZlciBzaXplLCBhdm9pZGluZyBtZW0gY29weVxuZXhwb3J0cy5zaHJpbmtCdWYgPSBmdW5jdGlvbiAoYnVmLCBzaXplKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSBzaXplKSB7IHJldHVybiBidWY7IH1cbiAgaWYgKGJ1Zi5zdWJhcnJheSkgeyByZXR1cm4gYnVmLnN1YmFycmF5KDAsIHNpemUpOyB9XG4gIGJ1Zi5sZW5ndGggPSBzaXplO1xuICByZXR1cm4gYnVmO1xufTtcblxuXG52YXIgZm5UeXBlZCA9IHtcbiAgYXJyYXlTZXQ6IGZ1bmN0aW9uIChkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2Zmcykge1xuICAgIGlmIChzcmMuc3ViYXJyYXkgJiYgZGVzdC5zdWJhcnJheSkge1xuICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLCBzcmNfb2ZmcyArIGxlbiksIGRlc3Rfb2Zmcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIG9yZGluYXJ5IGFycmF5XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldO1xuICAgIH1cbiAgfSxcbiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LlxuICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbiAoY2h1bmtzKSB7XG4gICAgdmFyIGksIGwsIGxlbiwgcG9zLCBjaHVuaywgcmVzdWx0O1xuXG4gICAgLy8gY2FsY3VsYXRlIGRhdGEgbGVuZ3RoXG4gICAgbGVuID0gMDtcbiAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgbGVuICs9IGNodW5rc1tpXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gam9pbiBjaHVua3NcbiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHBvcyA9IDA7XG4gICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNodW5rID0gY2h1bmtzW2ldO1xuICAgICAgcmVzdWx0LnNldChjaHVuaywgcG9zKTtcbiAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcblxudmFyIGZuVW50eXBlZCA9IHtcbiAgYXJyYXlTZXQ6IGZ1bmN0aW9uIChkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2Zmcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTtcbiAgICB9XG4gIH0sXG4gIC8vIEpvaW4gYXJyYXkgb2YgY2h1bmtzIHRvIHNpbmdsZSBhcnJheS5cbiAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24gKGNodW5rcykge1xuICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGNodW5rcyk7XG4gIH1cbn07XG5cblxuLy8gRW5hYmxlL0Rpc2FibGUgdHlwZWQgYXJyYXlzIHVzZSwgZm9yIHRlc3Rpbmdcbi8vXG5leHBvcnRzLnNldFR5cGVkID0gZnVuY3Rpb24gKG9uKSB7XG4gIGlmIChvbikge1xuICAgIGV4cG9ydHMuQnVmOCAgPSBVaW50OEFycmF5O1xuICAgIGV4cG9ydHMuQnVmMTYgPSBVaW50MTZBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjMyID0gSW50MzJBcnJheTtcbiAgICBleHBvcnRzLmFzc2lnbihleHBvcnRzLCBmblR5cGVkKTtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRzLkJ1ZjggID0gQXJyYXk7XG4gICAgZXhwb3J0cy5CdWYxNiA9IEFycmF5O1xuICAgIGV4cG9ydHMuQnVmMzIgPSBBcnJheTtcbiAgICBleHBvcnRzLmFzc2lnbihleHBvcnRzLCBmblVudHlwZWQpO1xuICB9XG59O1xuXG5leHBvcnRzLnNldFR5cGVkKFRZUEVEX09LKTtcblxufSx7fV0sMzA1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIFN0cmluZyBlbmNvZGUvZGVjb2RlIGhlbHBlcnNcbid1c2Ugc3RyaWN0JztcblxuXG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL2NvbW1vbicpO1xuXG5cbi8vIFF1aWNrIGNoZWNrIGlmIHdlIGNhbiB1c2UgZmFzdCBhcnJheSB0byBiaW4gc3RyaW5nIGNvbnZlcnNpb25cbi8vXG4vLyAtIGFwcGx5KEFycmF5KSBjYW4gZmFpbCBvbiBBbmRyb2lkIDIuMlxuLy8gLSBhcHBseShVaW50OEFycmF5KSBjYW4gZmFpbCBvbiBpT1MgNS4xIFNhZmFyaVxuLy9cbnZhciBTVFJfQVBQTFlfT0sgPSB0cnVlO1xudmFyIFNUUl9BUFBMWV9VSUFfT0sgPSB0cnVlO1xuXG50cnkgeyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIFsgMCBdKTsgfSBjYXRjaCAoX18pIHsgU1RSX0FQUExZX09LID0gZmFsc2U7IH1cbnRyeSB7IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpOyB9IGNhdGNoIChfXykgeyBTVFJfQVBQTFlfVUlBX09LID0gZmFsc2U7IH1cblxuXG4vLyBUYWJsZSB3aXRoIHV0ZjggbGVuZ3RocyAoY2FsY3VsYXRlZCBieSBmaXJzdCBieXRlIG9mIHNlcXVlbmNlKVxuLy8gTm90ZSwgdGhhdCA1ICYgNi1ieXRlIHZhbHVlcyBhbmQgc29tZSA0LWJ5dGUgdmFsdWVzIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlMsXG4vLyBiZWNhdXNlIG1heCBwb3NzaWJsZSBjb2RlcG9pbnQgaXMgMHgxMGZmZmZcbnZhciBfdXRmOGxlbiA9IG5ldyB1dGlscy5CdWY4KDI1Nik7XG5mb3IgKHZhciBxID0gMDsgcSA8IDI1NjsgcSsrKSB7XG4gIF91dGY4bGVuW3FdID0gKHEgPj0gMjUyID8gNiA6IHEgPj0gMjQ4ID8gNSA6IHEgPj0gMjQwID8gNCA6IHEgPj0gMjI0ID8gMyA6IHEgPj0gMTkyID8gMiA6IDEpO1xufVxuX3V0ZjhsZW5bMjU0XSA9IF91dGY4bGVuWzI1NF0gPSAxOyAvLyBJbnZhbGlkIHNlcXVlbmNlIHN0YXJ0XG5cblxuLy8gY29udmVydCBzdHJpbmcgdG8gYXJyYXkgKHR5cGVkLCB3aGVuIHBvc3NpYmxlKVxuZXhwb3J0cy5zdHJpbmcyYnVmID0gZnVuY3Rpb24gKHN0cikge1xuICB2YXIgYnVmLCBjLCBjMiwgbV9wb3MsIGksIHN0cl9sZW4gPSBzdHIubGVuZ3RoLCBidWZfbGVuID0gMDtcblxuICAvLyBjb3VudCBiaW5hcnkgc2l6ZVxuICBmb3IgKG1fcG9zID0gMDsgbV9wb3MgPCBzdHJfbGVuOyBtX3BvcysrKSB7XG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTtcbiAgICBpZiAoKGMgJiAweGZjMDApID09PSAweGQ4MDAgJiYgKG1fcG9zICsgMSA8IHN0cl9sZW4pKSB7XG4gICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7XG4gICAgICBpZiAoKGMyICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XG4gICAgICAgIGMgPSAweDEwMDAwICsgKChjIC0gMHhkODAwKSA8PCAxMCkgKyAoYzIgLSAweGRjMDApO1xuICAgICAgICBtX3BvcysrO1xuICAgICAgfVxuICAgIH1cbiAgICBidWZfbGVuICs9IGMgPCAweDgwID8gMSA6IGMgPCAweDgwMCA/IDIgOiBjIDwgMHgxMDAwMCA/IDMgOiA0O1xuICB9XG5cbiAgLy8gYWxsb2NhdGUgYnVmZmVyXG4gIGJ1ZiA9IG5ldyB1dGlscy5CdWY4KGJ1Zl9sZW4pO1xuXG4gIC8vIGNvbnZlcnRcbiAgZm9yIChpID0gMCwgbV9wb3MgPSAwOyBpIDwgYnVmX2xlbjsgbV9wb3MrKykge1xuICAgIGMgPSBzdHIuY2hhckNvZGVBdChtX3Bvcyk7XG4gICAgaWYgKChjICYgMHhmYzAwKSA9PT0gMHhkODAwICYmIChtX3BvcyArIDEgPCBzdHJfbGVuKSkge1xuICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpO1xuICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgPT09IDB4ZGMwMCkge1xuICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTtcbiAgICAgICAgbV9wb3MrKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAvKiBvbmUgYnl0ZSAqL1xuICAgICAgYnVmW2krK10gPSBjO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAvKiB0d28gYnl0ZXMgKi9cbiAgICAgIGJ1ZltpKytdID0gMHhDMCB8IChjID4+PiA2KTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgfSBlbHNlIGlmIChjIDwgMHgxMDAwMCkge1xuICAgICAgLyogdGhyZWUgYnl0ZXMgKi9cbiAgICAgIGJ1ZltpKytdID0gMHhFMCB8IChjID4+PiAxMik7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gNiAmIDB4M2YpO1xuICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgJiAweDNmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogZm91ciBieXRlcyAqL1xuICAgICAgYnVmW2krK10gPSAweGYwIHwgKGMgPj4+IDE4KTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiAxMiAmIDB4M2YpO1xuICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbi8vIEhlbHBlciAodXNlZCBpbiAyIHBsYWNlcylcbmZ1bmN0aW9uIGJ1ZjJiaW5zdHJpbmcoYnVmLCBsZW4pIHtcbiAgLy8gdXNlIGZhbGxiYWNrIGZvciBiaWcgYXJyYXlzIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93XG4gIGlmIChsZW4gPCA2NTUzNykge1xuICAgIGlmICgoYnVmLnN1YmFycmF5ICYmIFNUUl9BUFBMWV9VSUFfT0spIHx8ICghYnVmLnN1YmFycmF5ICYmIFNUUl9BUFBMWV9PSykpIHtcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0aWxzLnNocmlua0J1ZihidWYsIGxlbikpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG4vLyBDb252ZXJ0IGJ5dGUgYXJyYXkgdG8gYmluYXJ5IHN0cmluZ1xuZXhwb3J0cy5idWYyYmluc3RyaW5nID0gZnVuY3Rpb24gKGJ1Zikge1xuICByZXR1cm4gYnVmMmJpbnN0cmluZyhidWYsIGJ1Zi5sZW5ndGgpO1xufTtcblxuXG4vLyBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgKHR5cGVkLCB3aGVuIHBvc3NpYmxlKVxuZXhwb3J0cy5iaW5zdHJpbmcyYnVmID0gZnVuY3Rpb24gKHN0cikge1xuICB2YXIgYnVmID0gbmV3IHV0aWxzLkJ1Zjgoc3RyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBidWYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBidWZbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gYnVmO1xufTtcblxuXG4vLyBjb252ZXJ0IGFycmF5IHRvIHN0cmluZ1xuZXhwb3J0cy5idWYyc3RyaW5nID0gZnVuY3Rpb24gKGJ1ZiwgbWF4KSB7XG4gIHZhciBpLCBvdXQsIGMsIGNfbGVuO1xuICB2YXIgbGVuID0gbWF4IHx8IGJ1Zi5sZW5ndGg7XG5cbiAgLy8gUmVzZXJ2ZSBtYXggcG9zc2libGUgbGVuZ3RoICgyIHdvcmRzIHBlciBjaGFyKVxuICAvLyBOQjogYnkgdW5rbm93biByZWFzb25zLCBBcnJheSBpcyBzaWduaWZpY2FudGx5IGZhc3RlciBmb3JcbiAgLy8gICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkgdGhhbiBVaW50MTZBcnJheS5cbiAgdmFyIHV0ZjE2YnVmID0gbmV3IEFycmF5KGxlbiAqIDIpO1xuXG4gIGZvciAob3V0ID0gMCwgaSA9IDA7IGkgPCBsZW47KSB7XG4gICAgYyA9IGJ1ZltpKytdO1xuICAgIC8vIHF1aWNrIHByb2Nlc3MgYXNjaWlcbiAgICBpZiAoYyA8IDB4ODApIHsgdXRmMTZidWZbb3V0KytdID0gYzsgY29udGludWU7IH1cblxuICAgIGNfbGVuID0gX3V0ZjhsZW5bY107XG4gICAgLy8gc2tpcCA1ICYgNiBieXRlIGNvZGVzXG4gICAgaWYgKGNfbGVuID4gNCkgeyB1dGYxNmJ1ZltvdXQrK10gPSAweGZmZmQ7IGkgKz0gY19sZW4gLSAxOyBjb250aW51ZTsgfVxuXG4gICAgLy8gYXBwbHkgbWFzayBvbiBmaXJzdCBieXRlXG4gICAgYyAmPSBjX2xlbiA9PT0gMiA/IDB4MWYgOiBjX2xlbiA9PT0gMyA/IDB4MGYgOiAweDA3O1xuICAgIC8vIGpvaW4gdGhlIHJlc3RcbiAgICB3aGlsZSAoY19sZW4gPiAxICYmIGkgPCBsZW4pIHtcbiAgICAgIGMgPSAoYyA8PCA2KSB8IChidWZbaSsrXSAmIDB4M2YpO1xuICAgICAgY19sZW4tLTtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBzdHJpbmc/XG4gICAgaWYgKGNfbGVuID4gMSkgeyB1dGYxNmJ1ZltvdXQrK10gPSAweGZmZmQ7IGNvbnRpbnVlOyB9XG5cbiAgICBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgLT0gMHgxMDAwMDtcbiAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDB4ZDgwMCB8ICgoYyA+PiAxMCkgJiAweDNmZik7XG4gICAgICB1dGYxNmJ1ZltvdXQrK10gPSAweGRjMDAgfCAoYyAmIDB4M2ZmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTtcbn07XG5cblxuLy8gQ2FsY3VsYXRlIG1heCBwb3NzaWJsZSBwb3NpdGlvbiBpbiB1dGY4IGJ1ZmZlcixcbi8vIHRoYXQgd2lsbCBub3QgYnJlYWsgc2VxdWVuY2UuIElmIHRoYXQncyBub3QgcG9zc2libGVcbi8vIC0gKHZlcnkgc21hbGwgbGltaXRzKSByZXR1cm4gbWF4IHNpemUgYXMgaXMuXG4vL1xuLy8gYnVmW10gLSB1dGY4IGJ5dGVzIGFycmF5XG4vLyBtYXggICAtIGxlbmd0aCBsaW1pdCAobWFuZGF0b3J5KTtcbmV4cG9ydHMudXRmOGJvcmRlciA9IGZ1bmN0aW9uIChidWYsIG1heCkge1xuICB2YXIgcG9zO1xuXG4gIG1heCA9IG1heCB8fCBidWYubGVuZ3RoO1xuICBpZiAobWF4ID4gYnVmLmxlbmd0aCkgeyBtYXggPSBidWYubGVuZ3RoOyB9XG5cbiAgLy8gZ28gYmFjayBmcm9tIGxhc3QgcG9zaXRpb24sIHVudGlsIHN0YXJ0IG9mIHNlcXVlbmNlIGZvdW5kXG4gIHBvcyA9IG1heCAtIDE7XG4gIHdoaWxlIChwb3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAweEMwKSA9PT0gMHg4MCkgeyBwb3MtLTsgfVxuXG4gIC8vIFZlcnkgc21hbGwgYW5kIGJyb2tlbiBzZXF1ZW5jZSxcbiAgLy8gcmV0dXJuIG1heCwgYmVjYXVzZSB3ZSBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBhbnl3YXkuXG4gIGlmIChwb3MgPCAwKSB7IHJldHVybiBtYXg7IH1cblxuICAvLyBJZiB3ZSBjYW1lIHRvIHN0YXJ0IG9mIGJ1ZmZlciAtIHRoYXQgbWVhbnMgYnVmZmVyIGlzIHRvbyBzbWFsbCxcbiAgLy8gcmV0dXJuIG1heCB0b28uXG4gIGlmIChwb3MgPT09IDApIHsgcmV0dXJuIG1heDsgfVxuXG4gIHJldHVybiAocG9zICsgX3V0ZjhsZW5bYnVmW3Bvc11dID4gbWF4KSA/IHBvcyA6IG1heDtcbn07XG5cbn0se1wiLi9jb21tb25cIjozMDR9XSwzMDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBOb3RlOiBhZGxlcjMyIHRha2VzIDEyJSBmb3IgbGV2ZWwgMCBhbmQgMiUgZm9yIGxldmVsIDYuXG4vLyBJdCBpc24ndCB3b3J0aCBpdCB0byBtYWtlIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBhcyBpbiBvcmlnaW5hbC5cbi8vIFNtYWxsIHNpemUgaXMgcHJlZmVyYWJsZS5cblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG5mdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciBzMSA9IChhZGxlciAmIDB4ZmZmZikgfDAsXG4gICAgICBzMiA9ICgoYWRsZXIgPj4+IDE2KSAmIDB4ZmZmZikgfDAsXG4gICAgICBuID0gMDtcblxuICB3aGlsZSAobGVuICE9PSAwKSB7XG4gICAgLy8gU2V0IGxpbWl0IH4gdHdpY2UgbGVzcyB0aGFuIDU1NTIsIHRvIGtlZXBcbiAgICAvLyBzMiBpbiAzMS1iaXRzLCBiZWNhdXNlIHdlIGZvcmNlIHNpZ25lZCBpbnRzLlxuICAgIC8vIGluIG90aGVyIGNhc2UgJT0gd2lsbCBmYWlsLlxuICAgIG4gPSBsZW4gPiAyMDAwID8gMjAwMCA6IGxlbjtcbiAgICBsZW4gLT0gbjtcblxuICAgIGRvIHtcbiAgICAgIHMxID0gKHMxICsgYnVmW3BvcysrXSkgfDA7XG4gICAgICBzMiA9IChzMiArIHMxKSB8MDtcbiAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgczEgJT0gNjU1MjE7XG4gICAgczIgJT0gNjU1MjE7XG4gIH1cblxuICByZXR1cm4gKHMxIHwgKHMyIDw8IDE2KSkgfDA7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyO1xuXG59LHt9XSwzMDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbiAgWl9OT19GTFVTSDogICAgICAgICAwLFxuICBaX1BBUlRJQUxfRkxVU0g6ICAgIDEsXG4gIFpfU1lOQ19GTFVTSDogICAgICAgMixcbiAgWl9GVUxMX0ZMVVNIOiAgICAgICAzLFxuICBaX0ZJTklTSDogICAgICAgICAgIDQsXG4gIFpfQkxPQ0s6ICAgICAgICAgICAgNSxcbiAgWl9UUkVFUzogICAgICAgICAgICA2LFxuXG4gIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAgKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gICovXG4gIFpfT0s6ICAgICAgICAgICAgICAgMCxcbiAgWl9TVFJFQU1fRU5EOiAgICAgICAxLFxuICBaX05FRURfRElDVDogICAgICAgIDIsXG4gIFpfRVJSTk86ICAgICAgICAgICAtMSxcbiAgWl9TVFJFQU1fRVJST1I6ICAgIC0yLFxuICBaX0RBVEFfRVJST1I6ICAgICAgLTMsXG4gIC8vWl9NRU1fRVJST1I6ICAgICAtNCxcbiAgWl9CVUZfRVJST1I6ICAgICAgIC01LFxuICAvL1pfVkVSU0lPTl9FUlJPUjogLTYsXG5cbiAgLyogY29tcHJlc3Npb24gbGV2ZWxzICovXG4gIFpfTk9fQ09NUFJFU1NJT046ICAgICAgICAgMCxcbiAgWl9CRVNUX1NQRUVEOiAgICAgICAgICAgICAxLFxuICBaX0JFU1RfQ09NUFJFU1NJT046ICAgICAgIDksXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTjogICAtMSxcblxuXG4gIFpfRklMVEVSRUQ6ICAgICAgICAgICAgICAgMSxcbiAgWl9IVUZGTUFOX09OTFk6ICAgICAgICAgICAyLFxuICBaX1JMRTogICAgICAgICAgICAgICAgICAgIDMsXG4gIFpfRklYRUQ6ICAgICAgICAgICAgICAgICAgNCxcbiAgWl9ERUZBVUxUX1NUUkFURUdZOiAgICAgICAwLFxuXG4gIC8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbiAgWl9CSU5BUlk6ICAgICAgICAgICAgICAgICAwLFxuICBaX1RFWFQ6ICAgICAgICAgICAgICAgICAgIDEsXG4gIC8vWl9BU0NJSTogICAgICAgICAgICAgICAgMSwgLy8gPSBaX1RFWFQgKGRlcHJlY2F0ZWQpXG4gIFpfVU5LTk9XTjogICAgICAgICAgICAgICAgMixcblxuICAvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbiAgWl9ERUZMQVRFRDogICAgICAgICAgICAgICA4XG4gIC8vWl9OVUxMOiAgICAgICAgICAgICAgICAgbnVsbCAvLyBVc2UgLTEgb3IgbnVsbCBpbmxpbmUsIGRlcGVuZGluZyBvbiB2YXIgdHlwZVxufTtcblxufSx7fV0sMzA4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gTm90ZTogd2UgY2FuJ3QgZ2V0IHNpZ25pZmljYW50IHNwZWVkIGJvb3N0IGhlcmUuXG4vLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzXG4vLyBhbmQgYXJyYXkgdG9vbHMgZGVwZW5kZW5jaWVzLlxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbi8vIFVzZSBvcmRpbmFyeSBhcnJheSwgc2luY2UgdW50eXBlZCBtYWtlcyBubyBib29zdCBoZXJlXG5mdW5jdGlvbiBtYWtlVGFibGUoKSB7XG4gIHZhciBjLCB0YWJsZSA9IFtdO1xuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgMjU2OyBuKyspIHtcbiAgICBjID0gbjtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykge1xuICAgICAgYyA9ICgoYyAmIDEpID8gKDB4RURCODgzMjAgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcbiAgICB9XG4gICAgdGFibGVbbl0gPSBjO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vLyBDcmVhdGUgdGFibGUgb24gbG9hZC4gSnVzdCAyNTUgc2lnbmVkIGxvbmdzLiBOb3QgYSBwcm9ibGVtLlxudmFyIGNyY1RhYmxlID0gbWFrZVRhYmxlKCk7XG5cblxuZnVuY3Rpb24gY3JjMzIoY3JjLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciB0ID0gY3JjVGFibGUsXG4gICAgICBlbmQgPSBwb3MgKyBsZW47XG5cbiAgY3JjIF49IC0xO1xuXG4gIGZvciAodmFyIGkgPSBwb3M7IGkgPCBlbmQ7IGkrKykge1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdFsoY3JjIF4gYnVmW2ldKSAmIDB4RkZdO1xuICB9XG5cbiAgcmV0dXJuIChjcmMgXiAoLTEpKTsgLy8gPj4+IDA7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBjcmMzMjtcblxufSx7fV0sMzA5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG52YXIgdXRpbHMgICA9IF9kZXJlcV8oJy4uL3V0aWxzL2NvbW1vbicpO1xudmFyIHRyZWVzICAgPSBfZGVyZXFfKCcuL3RyZWVzJyk7XG52YXIgYWRsZXIzMiA9IF9kZXJlcV8oJy4vYWRsZXIzMicpO1xudmFyIGNyYzMyICAgPSBfZGVyZXFfKCcuL2NyYzMyJyk7XG52YXIgbXNnICAgICA9IF9kZXJlcV8oJy4vbWVzc2FnZXMnKTtcblxuLyogUHVibGljIGNvbnN0YW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxuLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqL1xudmFyIFpfTk9fRkxVU0ggICAgICA9IDA7XG52YXIgWl9QQVJUSUFMX0ZMVVNIID0gMTtcbi8vdmFyIFpfU1lOQ19GTFVTSCAgICA9IDI7XG52YXIgWl9GVUxMX0ZMVVNIICAgID0gMztcbnZhciBaX0ZJTklTSCAgICAgICAgPSA0O1xudmFyIFpfQkxPQ0sgICAgICAgICA9IDU7XG4vL3ZhciBaX1RSRUVTICAgICAgICAgPSA2O1xuXG5cbi8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy5cbiAqL1xudmFyIFpfT0sgICAgICAgICAgICA9IDA7XG52YXIgWl9TVFJFQU1fRU5EICAgID0gMTtcbi8vdmFyIFpfTkVFRF9ESUNUICAgICA9IDI7XG4vL3ZhciBaX0VSUk5PICAgICAgICAgPSAtMTtcbnZhciBaX1NUUkVBTV9FUlJPUiAgPSAtMjtcbnZhciBaX0RBVEFfRVJST1IgICAgPSAtMztcbi8vdmFyIFpfTUVNX0VSUk9SICAgICA9IC00O1xudmFyIFpfQlVGX0VSUk9SICAgICA9IC01O1xuLy92YXIgWl9WRVJTSU9OX0VSUk9SID0gLTY7XG5cblxuLyogY29tcHJlc3Npb24gbGV2ZWxzICovXG4vL3ZhciBaX05PX0NPTVBSRVNTSU9OICAgICAgPSAwO1xuLy92YXIgWl9CRVNUX1NQRUVEICAgICAgICAgID0gMTtcbi8vdmFyIFpfQkVTVF9DT01QUkVTU0lPTiAgICA9IDk7XG52YXIgWl9ERUZBVUxUX0NPTVBSRVNTSU9OID0gLTE7XG5cblxudmFyIFpfRklMVEVSRUQgICAgICAgICAgICA9IDE7XG52YXIgWl9IVUZGTUFOX09OTFkgICAgICAgID0gMjtcbnZhciBaX1JMRSAgICAgICAgICAgICAgICAgPSAzO1xudmFyIFpfRklYRUQgICAgICAgICAgICAgICA9IDQ7XG52YXIgWl9ERUZBVUxUX1NUUkFURUdZICAgID0gMDtcblxuLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqL1xuLy92YXIgWl9CSU5BUlkgICAgICAgICAgICAgID0gMDtcbi8vdmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7XG4vL3ZhciBaX0FTQ0lJICAgICAgICAgICAgICAgPSAxOyAvLyA9IFpfVEVYVFxudmFyIFpfVU5LTk9XTiAgICAgICAgICAgICA9IDI7XG5cblxuLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICovXG52YXIgWl9ERUZMQVRFRCAgPSA4O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbnZhciBNQVhfTUVNX0xFVkVMID0gOTtcbi8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqL1xudmFyIE1BWF9XQklUUyA9IDE1O1xuLyogMzJLIExaNzcgd2luZG93ICovXG52YXIgREVGX01FTV9MRVZFTCA9IDg7XG5cblxudmFyIExFTkdUSF9DT0RFUyAgPSAyOTtcbi8qIG51bWJlciBvZiBsZW5ndGggY29kZXMsIG5vdCBjb3VudGluZyB0aGUgc3BlY2lhbCBFTkRfQkxPQ0sgY29kZSAqL1xudmFyIExJVEVSQUxTICAgICAgPSAyNTY7XG4vKiBudW1iZXIgb2YgbGl0ZXJhbCBieXRlcyAwLi4yNTUgKi9cbnZhciBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG52YXIgRF9DT0RFUyAgICAgICA9IDMwO1xuLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovXG52YXIgQkxfQ09ERVMgICAgICA9IDE5O1xuLyogbnVtYmVyIG9mIGNvZGVzIHVzZWQgdG8gdHJhbnNmZXIgdGhlIGJpdCBsZW5ndGhzICovXG52YXIgSEVBUF9TSVpFICAgICA9IDIgKiBMX0NPREVTICsgMTtcbi8qIG1heGltdW0gaGVhcCBzaXplICovXG52YXIgTUFYX0JJVFMgID0gMTU7XG4vKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi9cblxudmFyIE1JTl9NQVRDSCA9IDM7XG52YXIgTUFYX01BVENIID0gMjU4O1xudmFyIE1JTl9MT09LQUhFQUQgPSAoTUFYX01BVENIICsgTUlOX01BVENIICsgMSk7XG5cbnZhciBQUkVTRVRfRElDVCA9IDB4MjA7XG5cbnZhciBJTklUX1NUQVRFID0gNDI7XG52YXIgRVhUUkFfU1RBVEUgPSA2OTtcbnZhciBOQU1FX1NUQVRFID0gNzM7XG52YXIgQ09NTUVOVF9TVEFURSA9IDkxO1xudmFyIEhDUkNfU1RBVEUgPSAxMDM7XG52YXIgQlVTWV9TVEFURSA9IDExMztcbnZhciBGSU5JU0hfU1RBVEUgPSA2NjY7XG5cbnZhciBCU19ORUVEX01PUkUgICAgICA9IDE7IC8qIGJsb2NrIG5vdCBjb21wbGV0ZWQsIG5lZWQgbW9yZSBpbnB1dCBvciBtb3JlIG91dHB1dCAqL1xudmFyIEJTX0JMT0NLX0RPTkUgICAgID0gMjsgLyogYmxvY2sgZmx1c2ggcGVyZm9ybWVkICovXG52YXIgQlNfRklOSVNIX1NUQVJURUQgPSAzOyAvKiBmaW5pc2ggc3RhcnRlZCwgbmVlZCBvbmx5IG1vcmUgb3V0cHV0IGF0IG5leHQgZGVmbGF0ZSAqL1xudmFyIEJTX0ZJTklTSF9ET05FICAgID0gNDsgLyogZmluaXNoIGRvbmUsIGFjY2VwdCBubyBtb3JlIGlucHV0IG9yIG91dHB1dCAqL1xuXG52YXIgT1NfQ09ERSA9IDB4MDM7IC8vIFVuaXggOikgLiBEb24ndCBkZXRlY3QsIHVzZSB0aGlzIGRlZmF1bHQuXG5cbmZ1bmN0aW9uIGVycihzdHJtLCBlcnJvckNvZGUpIHtcbiAgc3RybS5tc2cgPSBtc2dbZXJyb3JDb2RlXTtcbiAgcmV0dXJuIGVycm9yQ29kZTtcbn1cblxuZnVuY3Rpb24gcmFuayhmKSB7XG4gIHJldHVybiAoKGYpIDw8IDEpIC0gKChmKSA+IDQgPyA5IDogMCk7XG59XG5cbmZ1bmN0aW9uIHplcm8oYnVmKSB7IHZhciBsZW4gPSBidWYubGVuZ3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9zc2libGUuIEFsbCBkZWZsYXRlKCkgb3V0cHV0IGdvZXNcbiAqIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXRcbiAqIHRvIGF2b2lkIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5vdXRwdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGludG8gaXQuXG4gKiAoU2VlIGFsc28gcmVhZF9idWYoKSkuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoX3BlbmRpbmcoc3RybSkge1xuICB2YXIgcyA9IHN0cm0uc3RhdGU7XG5cbiAgLy9fdHJfZmx1c2hfYml0cyhzKTtcbiAgdmFyIGxlbiA9IHMucGVuZGluZztcbiAgaWYgKGxlbiA+IHN0cm0uYXZhaWxfb3V0KSB7XG4gICAgbGVuID0gc3RybS5hdmFpbF9vdXQ7XG4gIH1cbiAgaWYgKGxlbiA9PT0gMCkgeyByZXR1cm47IH1cblxuICB1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nX291dCwgbGVuLCBzdHJtLm5leHRfb3V0KTtcbiAgc3RybS5uZXh0X291dCArPSBsZW47XG4gIHMucGVuZGluZ19vdXQgKz0gbGVuO1xuICBzdHJtLnRvdGFsX291dCArPSBsZW47XG4gIHN0cm0uYXZhaWxfb3V0IC09IGxlbjtcbiAgcy5wZW5kaW5nIC09IGxlbjtcbiAgaWYgKHMucGVuZGluZyA9PT0gMCkge1xuICAgIHMucGVuZGluZ19vdXQgPSAwO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZmx1c2hfYmxvY2tfb25seShzLCBsYXN0KSB7XG4gIHRyZWVzLl90cl9mbHVzaF9ibG9jayhzLCAocy5ibG9ja19zdGFydCA+PSAwID8gcy5ibG9ja19zdGFydCA6IC0xKSwgcy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQsIGxhc3QpO1xuICBzLmJsb2NrX3N0YXJ0ID0gcy5zdHJzdGFydDtcbiAgZmx1c2hfcGVuZGluZyhzLnN0cm0pO1xufVxuXG5cbmZ1bmN0aW9uIHB1dF9ieXRlKHMsIGIpIHtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFB1dCBhIHNob3J0IGluIHRoZSBwZW5kaW5nIGJ1ZmZlci4gVGhlIDE2LWJpdCB2YWx1ZSBpcyBwdXQgaW4gTVNCIG9yZGVyLlxuICogSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHN0YXRlIGlzIGNvcnJlY3QgYW5kIHRoZXJlIGlzIGVub3VnaCByb29tIGluXG4gKiBwZW5kaW5nX2J1Zi5cbiAqL1xuZnVuY3Rpb24gcHV0U2hvcnRNU0IocywgYikge1xuLy8gIHB1dF9ieXRlKHMsIChCeXRlKShiID4+IDgpKTtcbi8vICBwdXRfYnl0ZShzLCAoQnl0ZSkoYiAmIDB4ZmYpKTtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAoYiA+Pj4gOCkgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGIgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmVhZCBhIG5ldyBidWZmZXIgZnJvbSB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0sIHVwZGF0ZSB0aGUgYWRsZXIzMlxuICogYW5kIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkLiAgQWxsIGRlZmxhdGUoKSBpbnB1dCBnb2VzIHRocm91Z2hcbiAqIHRoaXMgZnVuY3Rpb24gc28gc29tZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0IHRvIGF2b2lkXG4gKiBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+aW5wdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGZyb20gaXQuXG4gKiAoU2VlIGFsc28gZmx1c2hfcGVuZGluZygpKS5cbiAqL1xuZnVuY3Rpb24gcmVhZF9idWYoc3RybSwgYnVmLCBzdGFydCwgc2l6ZSkge1xuICB2YXIgbGVuID0gc3RybS5hdmFpbF9pbjtcblxuICBpZiAobGVuID4gc2l6ZSkgeyBsZW4gPSBzaXplOyB9XG4gIGlmIChsZW4gPT09IDApIHsgcmV0dXJuIDA7IH1cblxuICBzdHJtLmF2YWlsX2luIC09IGxlbjtcblxuICAvLyB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTtcbiAgdXRpbHMuYXJyYXlTZXQoYnVmLCBzdHJtLmlucHV0LCBzdHJtLm5leHRfaW4sIGxlbiwgc3RhcnQpO1xuICBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAxKSB7XG4gICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTtcbiAgfVxuXG4gIGVsc2UgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMikge1xuICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpO1xuICB9XG5cbiAgc3RybS5uZXh0X2luICs9IGxlbjtcbiAgc3RybS50b3RhbF9pbiArPSBsZW47XG5cbiAgcmV0dXJuIGxlbjtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNldCBtYXRjaF9zdGFydCB0byB0aGUgbG9uZ2VzdCBtYXRjaCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gc3RyaW5nIGFuZFxuICogcmV0dXJuIGl0cyBsZW5ndGguIE1hdGNoZXMgc2hvcnRlciBvciBlcXVhbCB0byBwcmV2X2xlbmd0aCBhcmUgZGlzY2FyZGVkLFxuICogaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFuZCBtYXRjaF9zdGFydCBpc1xuICogZ2FyYmFnZS5cbiAqIElOIGFzc2VydGlvbnM6IGN1cl9tYXRjaCBpcyB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiBmb3IgdGhlIGN1cnJlbnRcbiAqICAgc3RyaW5nIChzdHJzdGFydCkgYW5kIGl0cyBkaXN0YW5jZSBpcyA8PSBNQVhfRElTVCwgYW5kIHByZXZfbGVuZ3RoID49IDFcbiAqIE9VVCBhc3NlcnRpb246IHRoZSBtYXRjaCBsZW5ndGggaXMgbm90IGdyZWF0ZXIgdGhhbiBzLT5sb29rYWhlYWQuXG4gKi9cbmZ1bmN0aW9uIGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKSB7XG4gIHZhciBjaGFpbl9sZW5ndGggPSBzLm1heF9jaGFpbl9sZW5ndGg7ICAgICAgLyogbWF4IGhhc2ggY2hhaW4gbGVuZ3RoICovXG4gIHZhciBzY2FuID0gcy5zdHJzdGFydDsgLyogY3VycmVudCBzdHJpbmcgKi9cbiAgdmFyIG1hdGNoOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2hlZCBzdHJpbmcgKi9cbiAgdmFyIGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBtYXRjaCAqL1xuICB2YXIgYmVzdF9sZW4gPSBzLnByZXZfbGVuZ3RoOyAgICAgICAgICAgICAgLyogYmVzdCBtYXRjaCBsZW5ndGggc28gZmFyICovXG4gIHZhciBuaWNlX21hdGNoID0gcy5uaWNlX21hdGNoOyAgICAgICAgICAgICAvKiBzdG9wIGlmIG1hdGNoIGxvbmcgZW5vdWdoICovXG4gIHZhciBsaW1pdCA9IChzLnN0cnN0YXJ0ID4gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkpID9cbiAgICAgIHMuc3Ryc3RhcnQgLSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSA6IDAvKk5JTCovO1xuXG4gIHZhciBfd2luID0gcy53aW5kb3c7IC8vIHNob3J0Y3V0XG5cbiAgdmFyIHdtYXNrID0gcy53X21hc2s7XG4gIHZhciBwcmV2ICA9IHMucHJldjtcblxuICAvKiBTdG9wIHdoZW4gY3VyX21hdGNoIGJlY29tZXMgPD0gbGltaXQuIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLFxuICAgKiB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nIG9mIHdpbmRvdyBpbmRleCAwLlxuICAgKi9cblxuICB2YXIgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDtcbiAgdmFyIHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdO1xuICB2YXIgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTtcblxuICAvKiBUaGUgY29kZSBpcyBvcHRpbWl6ZWQgZm9yIEhBU0hfQklUUyA+PSA4IGFuZCBNQVhfTUFUQ0gtMiBtdWx0aXBsZSBvZiAxNi5cbiAgICogSXQgaXMgZWFzeSB0byBnZXQgcmlkIG9mIHRoaXMgb3B0aW1pemF0aW9uIGlmIG5lY2Vzc2FyeS5cbiAgICovXG4gIC8vIEFzc2VydChzLT5oYXNoX2JpdHMgPj0gOCAmJiBNQVhfTUFUQ0ggPT0gMjU4LCBcIkNvZGUgdG9vIGNsZXZlclwiKTtcblxuICAvKiBEbyBub3Qgd2FzdGUgdG9vIG11Y2ggdGltZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBnb29kIG1hdGNoOiAqL1xuICBpZiAocy5wcmV2X2xlbmd0aCA+PSBzLmdvb2RfbWF0Y2gpIHtcbiAgICBjaGFpbl9sZW5ndGggPj49IDI7XG4gIH1cbiAgLyogRG8gbm90IGxvb2sgZm9yIG1hdGNoZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0LiBUaGlzIGlzIG5lY2Vzc2FyeVxuICAgKiB0byBtYWtlIGRlZmxhdGUgZGV0ZXJtaW5pc3RpYy5cbiAgICovXG4gIGlmIChuaWNlX21hdGNoID4gcy5sb29rYWhlYWQpIHsgbmljZV9tYXRjaCA9IHMubG9va2FoZWFkOyB9XG5cbiAgLy8gQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUtTUlOX0xPT0tBSEVBRCwgXCJuZWVkIGxvb2thaGVhZFwiKTtcblxuICBkbyB7XG4gICAgLy8gQXNzZXJ0KGN1cl9tYXRjaCA8IHMtPnN0cnN0YXJ0LCBcIm5vIGZ1dHVyZVwiKTtcbiAgICBtYXRjaCA9IGN1cl9tYXRjaDtcblxuICAgIC8qIFNraXAgdG8gbmV4dCBtYXRjaCBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGNhbm5vdCBpbmNyZWFzZVxuICAgICAqIG9yIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDIuICBOb3RlIHRoYXQgdGhlIGNoZWNrcyBiZWxvd1xuICAgICAqIGZvciBpbnN1ZmZpY2llbnQgbG9va2FoZWFkIG9ubHkgb2NjdXIgb2NjYXNpb25hbGx5IGZvciBwZXJmb3JtYW5jZVxuICAgICAqIHJlYXNvbnMuICBUaGVyZWZvcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd2lsbCBiZSBhY2Nlc3NlZCwgYW5kXG4gICAgICogY29uZGl0aW9uYWwganVtcHMgd2lsbCBiZSBtYWRlIHRoYXQgZGVwZW5kIG9uIHRob3NlIHZhbHVlcy5cbiAgICAgKiBIb3dldmVyIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGlzIGxpbWl0ZWQgdG8gdGhlIGxvb2thaGVhZCwgc29cbiAgICAgKiB0aGUgb3V0cHV0IG9mIGRlZmxhdGUgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSB1bmluaXRpYWxpemVkIHZhbHVlcy5cbiAgICAgKi9cblxuICAgIGlmIChfd2luW21hdGNoICsgYmVzdF9sZW5dICAgICAhPT0gc2Nhbl9lbmQgIHx8XG4gICAgICAgIF93aW5bbWF0Y2ggKyBiZXN0X2xlbiAtIDFdICE9PSBzY2FuX2VuZDEgfHxcbiAgICAgICAgX3dpblttYXRjaF0gICAgICAgICAgICAgICAgIT09IF93aW5bc2Nhbl0gfHxcbiAgICAgICAgX3dpblsrK21hdGNoXSAgICAgICAgICAgICAgIT09IF93aW5bc2NhbiArIDFdKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKiBUaGUgY2hlY2sgYXQgYmVzdF9sZW4tMSBjYW4gYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IHdpbGwgYmUgbWFkZVxuICAgICAqIGFnYWluIGxhdGVyLiAoVGhpcyBoZXVyaXN0aWMgaXMgbm90IGFsd2F5cyBhIHdpbi4pXG4gICAgICogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjb21wYXJlIHNjYW5bMl0gYW5kIG1hdGNoWzJdIHNpbmNlIHRoZXlcbiAgICAgKiBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVzIG1hdGNoLCBnaXZlbiB0aGF0XG4gICAgICogdGhlIGhhc2gga2V5cyBhcmUgZXF1YWwgYW5kIHRoYXQgSEFTSF9CSVRTID49IDguXG4gICAgICovXG4gICAgc2NhbiArPSAyO1xuICAgIG1hdGNoKys7XG4gICAgLy8gQXNzZXJ0KCpzY2FuID09ICptYXRjaCwgXCJtYXRjaFsyXT9cIik7XG5cbiAgICAvKiBXZSBjaGVjayBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDh0aCBjb21wYXJpc29uO1xuICAgICAqIHRoZSAyNTZ0aCBjaGVjayB3aWxsIGJlIG1hZGUgYXQgc3Ryc3RhcnQrMjU4LlxuICAgICAqL1xuICAgIGRvIHtcbiAgICAgIC8qanNoaW50IG5vZW1wdHk6ZmFsc2UqL1xuICAgIH0gd2hpbGUgKF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTtcblxuICAgIC8vIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodW5zaWduZWQpKHMtPndpbmRvd19zaXplLTEpLCBcIndpbGQgc2NhblwiKTtcblxuICAgIGxlbiA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTtcbiAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIO1xuXG4gICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7XG4gICAgICBzLm1hdGNoX3N0YXJ0ID0gY3VyX21hdGNoO1xuICAgICAgYmVzdF9sZW4gPSBsZW47XG4gICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzY2FuX2VuZDEgID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTtcbiAgICAgIHNjYW5fZW5kICAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07XG4gICAgfVxuICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApO1xuXG4gIGlmIChiZXN0X2xlbiA8PSBzLmxvb2thaGVhZCkge1xuICAgIHJldHVybiBiZXN0X2xlbjtcbiAgfVxuICByZXR1cm4gcy5sb29rYWhlYWQ7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGaWxsIHRoZSB3aW5kb3cgd2hlbiB0aGUgbG9va2FoZWFkIGJlY29tZXMgaW5zdWZmaWNpZW50LlxuICogVXBkYXRlcyBzdHJzdGFydCBhbmQgbG9va2FoZWFkLlxuICpcbiAqIElOIGFzc2VydGlvbjogbG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRFxuICogT1VUIGFzc2VydGlvbnM6IHN0cnN0YXJ0IDw9IHdpbmRvd19zaXplLU1JTl9MT09LQUhFQURcbiAqICAgIEF0IGxlYXN0IG9uZSBieXRlIGhhcyBiZWVuIHJlYWQsIG9yIGF2YWlsX2luID09IDA7IHJlYWRzIGFyZVxuICogICAgcGVyZm9ybWVkIGZvciBhdCBsZWFzdCB0d28gYnl0ZXMgKHJlcXVpcmVkIGZvciB0aGUgemlwIHRyYW5zbGF0ZV9lb2xcbiAqICAgIG9wdGlvbiAtLSBub3Qgc3VwcG9ydGVkIGhlcmUpLlxuICovXG5mdW5jdGlvbiBmaWxsX3dpbmRvdyhzKSB7XG4gIHZhciBfd19zaXplID0gcy53X3NpemU7XG4gIHZhciBwLCBuLCBtLCBtb3JlLCBzdHI7XG5cbiAgLy9Bc3NlcnQocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCwgXCJhbHJlYWR5IGVub3VnaCBsb29rYWhlYWRcIik7XG5cbiAgZG8ge1xuICAgIG1vcmUgPSBzLndpbmRvd19zaXplIC0gcy5sb29rYWhlYWQgLSBzLnN0cnN0YXJ0O1xuXG4gICAgLy8gSlMgaW50cyBoYXZlIDMyIGJpdCwgYmxvY2sgYmVsb3cgbm90IG5lZWRlZFxuICAgIC8qIERlYWwgd2l0aCAhQCMkJSA2NEsgbGltaXQ6ICovXG4gICAgLy9pZiAoc2l6ZW9mKGludCkgPD0gMikge1xuICAgIC8vICAgIGlmIChtb3JlID09IDAgJiYgcy0+c3Ryc3RhcnQgPT0gMCAmJiBzLT5sb29rYWhlYWQgPT0gMCkge1xuICAgIC8vICAgICAgICBtb3JlID0gd3NpemU7XG4gICAgLy9cbiAgICAvLyAgfSBlbHNlIGlmIChtb3JlID09ICh1bnNpZ25lZCkoLTEpKSB7XG4gICAgLy8gICAgICAgIC8qIFZlcnkgdW5saWtlbHksIGJ1dCBwb3NzaWJsZSBvbiAxNiBiaXQgbWFjaGluZSBpZlxuICAgIC8vICAgICAgICAgKiBzdHJzdGFydCA9PSAwICYmIGxvb2thaGVhZCA9PSAxIChpbnB1dCBkb25lIGEgYnl0ZSBhdCB0aW1lKVxuICAgIC8vICAgICAgICAgKi9cbiAgICAvLyAgICAgICAgbW9yZS0tO1xuICAgIC8vICAgIH1cbiAgICAvL31cblxuXG4gICAgLyogSWYgdGhlIHdpbmRvdyBpcyBhbG1vc3QgZnVsbCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGxvb2thaGVhZCxcbiAgICAgKiBtb3ZlIHRoZSB1cHBlciBoYWxmIHRvIHRoZSBsb3dlciBvbmUgdG8gbWFrZSByb29tIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAqL1xuICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7XG5cbiAgICAgIHV0aWxzLmFycmF5U2V0KHMud2luZG93LCBzLndpbmRvdywgX3dfc2l6ZSwgX3dfc2l6ZSwgMCk7XG4gICAgICBzLm1hdGNoX3N0YXJ0IC09IF93X3NpemU7XG4gICAgICBzLnN0cnN0YXJ0IC09IF93X3NpemU7XG4gICAgICAvKiB3ZSBub3cgaGF2ZSBzdHJzdGFydCA+PSBNQVhfRElTVCAqL1xuICAgICAgcy5ibG9ja19zdGFydCAtPSBfd19zaXplO1xuXG4gICAgICAvKiBTbGlkZSB0aGUgaGFzaCB0YWJsZSAoY291bGQgYmUgYXZvaWRlZCB3aXRoIDMyIGJpdCB2YWx1ZXNcbiAgICAgICBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UpLiBXZSBzbGlkZSBldmVuIHdoZW4gbGV2ZWwgPT0gMFxuICAgICAgIHRvIGtlZXAgdGhlIGhhc2ggdGFibGUgY29uc2lzdGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZlbCA+IDBcbiAgICAgICBsYXRlci4gKFVzaW5nIGxldmVsIDAgcGVybWFuZW50bHkgaXMgbm90IGFuIG9wdGltYWwgdXNhZ2Ugb2ZcbiAgICAgICB6bGliLCBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoaXMgcGF0aG9sb2dpY2FsIGNhc2UuKVxuICAgICAgICovXG5cbiAgICAgIG4gPSBzLmhhc2hfc2l6ZTtcbiAgICAgIHAgPSBuO1xuICAgICAgZG8ge1xuICAgICAgICBtID0gcy5oZWFkWy0tcF07XG4gICAgICAgIHMuaGVhZFtwXSA9IChtID49IF93X3NpemUgPyBtIC0gX3dfc2l6ZSA6IDApO1xuICAgICAgfSB3aGlsZSAoLS1uKTtcblxuICAgICAgbiA9IF93X3NpemU7XG4gICAgICBwID0gbjtcbiAgICAgIGRvIHtcbiAgICAgICAgbSA9IHMucHJldlstLXBdO1xuICAgICAgICBzLnByZXZbcF0gPSAobSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwKTtcbiAgICAgICAgLyogSWYgbiBpcyBub3Qgb24gYW55IGhhc2ggY2hhaW4sIHByZXZbbl0gaXMgZ2FyYmFnZSBidXRcbiAgICAgICAgICogaXRzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgdXNlZC5cbiAgICAgICAgICovXG4gICAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgICBtb3JlICs9IF93X3NpemU7XG4gICAgfVxuICAgIGlmIChzLnN0cm0uYXZhaWxfaW4gPT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8qIElmIHRoZXJlIHdhcyBubyBzbGlkaW5nOlxuICAgICAqICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1JTl9MT09LQUhFQUQgLSAxICYmXG4gICAgICogICAgbW9yZSA9PSB3aW5kb3dfc2l6ZSAtIGxvb2thaGVhZCAtIHN0cnN0YXJ0XG4gICAgICogPT4gbW9yZSA+PSB3aW5kb3dfc2l6ZSAtIChNSU5fTE9PS0FIRUFELTEgKyBXU0laRSArIE1BWF9ESVNULTEpXG4gICAgICogPT4gbW9yZSA+PSB3aW5kb3dfc2l6ZSAtIDIqV1NJWkUgKyAyXG4gICAgICogSW4gdGhlIEJJR19NRU0gb3IgTU1BUCBjYXNlIChub3QgeWV0IHN1cHBvcnRlZCksXG4gICAgICogICB3aW5kb3dfc2l6ZSA9PSBpbnB1dF9zaXplICsgTUlOX0xPT0tBSEVBRCAgJiZcbiAgICAgKiAgIHN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIDw9IGlucHV0X3NpemUgPT4gbW9yZSA+PSBNSU5fTE9PS0FIRUFELlxuICAgICAqIE90aGVyd2lzZSwgd2luZG93X3NpemUgPT0gMipXU0laRSBzbyBtb3JlID49IDIuXG4gICAgICogSWYgdGhlcmUgd2FzIHNsaWRpbmcsIG1vcmUgPj0gV1NJWkUuIFNvIGluIGFsbCBjYXNlcywgbW9yZSA+PSAyLlxuICAgICAqL1xuICAgIC8vQXNzZXJ0KG1vcmUgPj0gMiwgXCJtb3JlIDwgMlwiKTtcbiAgICBuID0gcmVhZF9idWYocy5zdHJtLCBzLndpbmRvdywgcy5zdHJzdGFydCArIHMubG9va2FoZWFkLCBtb3JlKTtcbiAgICBzLmxvb2thaGVhZCArPSBuO1xuXG4gICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB2YWx1ZSBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgaW5wdXQ6ICovXG4gICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPj0gTUlOX01BVENIKSB7XG4gICAgICBzdHIgPSBzLnN0cnN0YXJ0IC0gcy5pbnNlcnQ7XG4gICAgICBzLmluc19oID0gcy53aW5kb3dbc3RyXTtcblxuICAgICAgLyogVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7ICovXG4gICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzdHIgKyAxXSkgJiBzLmhhc2hfbWFzaztcbi8vI2lmIE1JTl9NQVRDSCAhPSAzXG4vLyAgICAgICAgQ2FsbCB1cGRhdGVfaGFzaCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXNcbi8vI2VuZGlmXG4gICAgICB3aGlsZSAocy5pbnNlcnQpIHtcbiAgICAgICAgLyogVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOyAqL1xuICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzdHIgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcblxuICAgICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzdHI7XG4gICAgICAgIHN0cisrO1xuICAgICAgICBzLmluc2VydC0tO1xuICAgICAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA8IE1JTl9NQVRDSCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qIElmIHRoZSB3aG9sZSBpbnB1dCBoYXMgbGVzcyB0aGFuIE1JTl9NQVRDSCBieXRlcywgaW5zX2ggaXMgZ2FyYmFnZSxcbiAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuXG4gICAgICovXG5cbiAgfSB3aGlsZSAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIHMuc3RybS5hdmFpbF9pbiAhPT0gMCk7XG5cbiAgLyogSWYgdGhlIFdJTl9JTklUIGJ5dGVzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZGF0YSBoYXZlIG5ldmVyIGJlZW5cbiAgICogd3JpdHRlbiwgdGhlbiB6ZXJvIHRob3NlIGJ5dGVzIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayByZXBvcnRzIG9mXG4gICAqIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCAob3IgdW5pbml0aWFsaXNlZCBhcyBKdWxpYW4gd3JpdGVzKSBieXRlcyBieVxuICAgKiB0aGUgbG9uZ2VzdCBtYXRjaCByb3V0aW5lcy4gIFVwZGF0ZSB0aGUgaGlnaCB3YXRlciBtYXJrIGZvciB0aGUgbmV4dFxuICAgKiB0aW1lIHRocm91Z2ggaGVyZS4gIFdJTl9JTklUIGlzIHNldCB0byBNQVhfTUFUQ0ggc2luY2UgdGhlIGxvbmdlc3QgbWF0Y2hcbiAgICogcm91dGluZXMgYWxsb3cgc2Nhbm5pbmcgdG8gc3Ryc3RhcnQgKyBNQVhfTUFUQ0gsIGlnbm9yaW5nIGxvb2thaGVhZC5cbiAgICovXG4vLyAgaWYgKHMuaGlnaF93YXRlciA8IHMud2luZG93X3NpemUpIHtcbi8vICAgIHZhciBjdXJyID0gcy5zdHJzdGFydCArIHMubG9va2FoZWFkO1xuLy8gICAgdmFyIGluaXQgPSAwO1xuLy9cbi8vICAgIGlmIChzLmhpZ2hfd2F0ZXIgPCBjdXJyKSB7XG4vLyAgICAgIC8qIFByZXZpb3VzIGhpZ2ggd2F0ZXIgbWFyayBiZWxvdyBjdXJyZW50IGRhdGEgLS0gemVybyBXSU5fSU5JVFxuLy8gICAgICAgKiBieXRlcyBvciB1cCB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy5cbi8vICAgICAgICovXG4vLyAgICAgIGluaXQgPSBzLndpbmRvd19zaXplIC0gY3Vycjtcbi8vICAgICAgaWYgKGluaXQgPiBXSU5fSU5JVClcbi8vICAgICAgICBpbml0ID0gV0lOX0lOSVQ7XG4vLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIGN1cnIsICh1bnNpZ25lZClpbml0KTtcbi8vICAgICAgcy0+aGlnaF93YXRlciA9IGN1cnIgKyBpbml0O1xuLy8gICAgfVxuLy8gICAgZWxzZSBpZiAocy0+aGlnaF93YXRlciA8ICh1bGcpY3VyciArIFdJTl9JTklUKSB7XG4vLyAgICAgIC8qIEhpZ2ggd2F0ZXIgbWFyayBhdCBvciBhYm92ZSBjdXJyZW50IGRhdGEsIGJ1dCBiZWxvdyBjdXJyZW50IGRhdGFcbi8vICAgICAgICogcGx1cyBXSU5fSU5JVCAtLSB6ZXJvIG91dCB0byBjdXJyZW50IGRhdGEgcGx1cyBXSU5fSU5JVCwgb3IgdXBcbi8vICAgICAgICogdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuXG4vLyAgICAgICAqL1xuLy8gICAgICBpbml0ID0gKHVsZyljdXJyICsgV0lOX0lOSVQgLSBzLT5oaWdoX3dhdGVyO1xuLy8gICAgICBpZiAoaW5pdCA+IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcilcbi8vICAgICAgICBpbml0ID0gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyO1xuLy8gICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBzLT5oaWdoX3dhdGVyLCAodW5zaWduZWQpaW5pdCk7XG4vLyAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDtcbi8vICAgIH1cbi8vICB9XG4vL1xuLy8gIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCxcbi8vICAgIFwibm90IGVub3VnaCByb29tIGZvciBzZWFyY2hcIik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weSB3aXRob3V0IGNvbXByZXNzaW9uIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm5cbiAqIHRoZSBjdXJyZW50IGJsb2NrIHN0YXRlLlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkgc2luY2VcbiAqIHVuY29tcHJlc3NpYmxlIGRhdGEgaXMgcHJvYmFibHkgbm90IHVzZWZ1bC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkXG4gKiBvbmx5IGZvciB0aGUgbGV2ZWw9MCBjb21wcmVzc2lvbiBvcHRpb24uXG4gKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQgdG8gYXZvaWQgZXh0cmEgY29weWluZyBmcm9tXG4gKiB3aW5kb3cgdG8gcGVuZGluZ19idWYuXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7XG4gIC8qIFN0b3JlZCBibG9ja3MgYXJlIGxpbWl0ZWQgdG8gMHhmZmZmIGJ5dGVzLCBwZW5kaW5nX2J1ZiBpcyBsaW1pdGVkXG4gICAqIHRvIHBlbmRpbmdfYnVmX3NpemUsIGFuZCBlYWNoIHN0b3JlZCBibG9jayBoYXMgYSA1IGJ5dGUgaGVhZGVyOlxuICAgKi9cbiAgdmFyIG1heF9ibG9ja19zaXplID0gMHhmZmZmO1xuXG4gIGlmIChtYXhfYmxvY2tfc2l6ZSA+IHMucGVuZGluZ19idWZfc2l6ZSAtIDUpIHtcbiAgICBtYXhfYmxvY2tfc2l6ZSA9IHMucGVuZGluZ19idWZfc2l6ZSAtIDU7XG4gIH1cblxuICAvKiBDb3B5IGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSBpbnB1dCB0byBvdXRwdXQ6ICovXG4gIGZvciAoOzspIHtcbiAgICAvKiBGaWxsIHRoZSB3aW5kb3cgYXMgbXVjaCBhcyBwb3NzaWJsZTogKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPD0gMSkge1xuXG4gICAgICAvL0Fzc2VydChzLT5zdHJzdGFydCA8IHMtPndfc2l6ZStNQVhfRElTVChzKSB8fFxuICAgICAgLy8gIHMtPmJsb2NrX3N0YXJ0ID49IChsb25nKXMtPndfc2l6ZSwgXCJzbGlkZSB0b28gbGF0ZVwiKTtcbi8vICAgICAgaWYgKCEocy5zdHJzdGFydCA8IHMud19zaXplICsgKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgfHxcbi8vICAgICAgICBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplKSkge1xuLy8gICAgICAgIHRocm93ICBuZXcgRXJyb3IoXCJzbGlkZSB0b28gbGF0ZVwiKTtcbi8vICAgICAgfVxuXG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuXG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cbiAgICAvL0Fzc2VydChzLT5ibG9ja19zdGFydCA+PSAwTCwgXCJibG9jayBnb25lXCIpO1xuLy8gICAgaWYgKHMuYmxvY2tfc3RhcnQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJibG9jayBnb25lXCIpO1xuXG4gICAgcy5zdHJzdGFydCArPSBzLmxvb2thaGVhZDtcbiAgICBzLmxvb2thaGVhZCA9IDA7XG5cbiAgICAvKiBFbWl0IGEgc3RvcmVkIGJsb2NrIGlmIHBlbmRpbmdfYnVmIHdpbGwgYmUgZnVsbDogKi9cbiAgICB2YXIgbWF4X3N0YXJ0ID0gcy5ibG9ja19zdGFydCArIG1heF9ibG9ja19zaXplO1xuXG4gICAgaWYgKHMuc3Ryc3RhcnQgPT09IDAgfHwgcy5zdHJzdGFydCA+PSBtYXhfc3RhcnQpIHtcbiAgICAgIC8qIHN0cnN0YXJ0ID09IDAgaXMgcG9zc2libGUgd2hlbiB3cmFwYXJvdW5kIG9uIDE2LWJpdCBtYWNoaW5lICovXG4gICAgICBzLmxvb2thaGVhZCA9IHMuc3Ryc3RhcnQgLSBtYXhfc3RhcnQ7XG4gICAgICBzLnN0cnN0YXJ0ID0gbWF4X3N0YXJ0O1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cblxuXG4gICAgfVxuICAgIC8qIEZsdXNoIGlmIHdlIG1heSBoYXZlIHRvIHNsaWRlLCBvdGhlcndpc2UgYmxvY2tfc3RhcnQgbWF5IGJlY29tZVxuICAgICAqIG5lZ2F0aXZlIGFuZCB0aGUgZGF0YSB3aWxsIGJlIGdvbmU6XG4gICAgICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuXG4gIHMuaW5zZXJ0ID0gMDtcblxuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cblxuICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cblxuICByZXR1cm4gQlNfTkVFRF9NT1JFO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXByZXNzIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm4gdGhlIGN1cnJlbnRcbiAqIGJsb2NrIHN0YXRlLlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIGxhenkgZXZhbHVhdGlvbiBvZiBtYXRjaGVzIGFuZCBpbnNlcnRzXG4gKiBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBvbmx5IGZvciB1bm1hdGNoZWQgc3RyaW5ncyBvciBmb3Igc2hvcnRcbiAqIG1hdGNoZXMuIEl0IGlzIHVzZWQgb25seSBmb3IgdGhlIGZhc3QgY29tcHJlc3Npb24gb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9mYXN0KHMsIGZsdXNoKSB7XG4gIHZhciBoYXNoX2hlYWQ7ICAgICAgICAvKiBoZWFkIG9mIHRoZSBoYXNoIGNoYWluICovXG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0XG4gICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXNcbiAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2gsIHBsdXMgTUlOX01BVENIIGJ5dGVzIHRvIGluc2VydCB0aGVcbiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGVcbiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjpcbiAgICAgKi9cbiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLztcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgLyoqKi9cbiAgICB9XG5cbiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLlxuICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHdheXMgbWF0Y2hfbGVuZ3RoIDwgTUlOX01BVENIXG4gICAgICovXG4gICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgKChzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkKSA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkpIHtcbiAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nXG4gICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2hcbiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS5cbiAgICAgICAqL1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7XG4gICAgICAvKiBsb25nZXN0X21hdGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqL1xuICAgIH1cbiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7XG4gICAgICAvLyBjaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCk7IC8vIGZvciBkZWJ1ZyBvbmx5XG5cbiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7XG5cbiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoO1xuXG4gICAgICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoXG4gICAgICAgKiBpcyBub3QgdG9vIGxhcmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLlxuICAgICAgICovXG4gICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gcy5tYXhfbGF6eV9tYXRjaC8qbWF4X2luc2VydF9sZW5ndGgqLyAmJiBzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGgtLTsgLyogc3RyaW5nIGF0IHN0cnN0YXJ0IGFscmVhZHkgaW4gdGFibGUgKi9cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcbiAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgICAgIC8qKiovXG4gICAgICAgICAgLyogc3Ryc3RhcnQgbmV2ZXIgZXhjZWVkcyBXU0laRS1NQVhfTUFUQ0gsIHNvIHRoZXJlIGFyZVxuICAgICAgICAgICAqIGFsd2F5cyBNSU5fTUFUQ0ggYnl0ZXMgYWhlYWQuXG4gICAgICAgICAgICovXG4gICAgICAgIH0gd2hpbGUgKC0tcy5tYXRjaF9sZW5ndGggIT09IDApO1xuICAgICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICB9IGVsc2VcbiAgICAgIHtcbiAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgICAgICBzLmluc19oID0gcy53aW5kb3dbcy5zdHJzdGFydF07XG4gICAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMuaW5zX2gsIHMud2luZG93W3Muc3Ryc3RhcnQrMV0pOyAqL1xuICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgMV0pICYgcy5oYXNoX21hc2s7XG5cbi8vI2lmIE1JTl9NQVRDSCAhPSAzXG4vLyAgICAgICAgICAgICAgICBDYWxsIFVQREFURV9IQVNIKCkgTUlOX01BVENILTMgbW9yZSB0aW1lc1xuLy8jZW5kaWZcbiAgICAgICAgLyogSWYgbG9va2FoZWFkIDwgTUlOX01BVENILCBpbnNfaCBpcyBnYXJiYWdlLCBidXQgaXQgZG9lcyBub3RcbiAgICAgICAgICogbWF0dGVyIHNpbmNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhdCBuZXh0IGRlZmxhdGUgY2FsbC5cbiAgICAgICAgICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy53aW5kb3dbcy5zdHJzdGFydF0pKTtcbiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTtcblxuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICB9XG4gICAgaWYgKGJmbHVzaCkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cbiAgcy5pbnNlcnQgPSAoKHMuc3Ryc3RhcnQgPCAoTUlOX01BVENIIC0gMSkpID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDEpO1xuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMubGFzdF9saXQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2FtZSBhcyBhYm92ZSwgYnV0IGFjaGlldmVzIGJldHRlciBjb21wcmVzc2lvbi4gV2UgdXNlIGEgbGF6eVxuICogZXZhbHVhdGlvbiBmb3IgbWF0Y2hlczogYSBtYXRjaCBpcyBmaW5hbGx5IGFkb3B0ZWQgb25seSBpZiB0aGVyZSBpc1xuICogbm8gYmV0dGVyIG1hdGNoIGF0IHRoZSBuZXh0IHdpbmRvdyBwb3NpdGlvbi5cbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7XG4gIHZhciBoYXNoX2hlYWQ7ICAgICAgICAgIC8qIGhlYWQgb2YgaGFzaCBjaGFpbiAqL1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG5cbiAgdmFyIG1heF9pbnNlcnQ7XG5cbiAgLyogUHJvY2VzcyB0aGUgaW5wdXQgYmxvY2suICovXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbmV4dCBtYXRjaCwgcGx1cyBNSU5fTUFUQ0ggYnl0ZXMgdG8gaW5zZXJ0IHRoZVxuICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsgYnJlYWs7IH0gLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICB9XG5cbiAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlXG4gICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW46XG4gICAgICovXG4gICAgaGFzaF9oZWFkID0gMC8qTklMKi87XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcbiAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgIC8qKiovXG4gICAgfVxuXG4gICAgLyogRmluZCB0aGUgbG9uZ2VzdCBtYXRjaCwgZGlzY2FyZGluZyB0aG9zZSA8PSBwcmV2X2xlbmd0aC5cbiAgICAgKi9cbiAgICBzLnByZXZfbGVuZ3RoID0gcy5tYXRjaF9sZW5ndGg7XG4gICAgcy5wcmV2X21hdGNoID0gcy5tYXRjaF9zdGFydDtcbiAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG5cbiAgICBpZiAoaGFzaF9oZWFkICE9PSAwLypOSUwqLyAmJiBzLnByZXZfbGVuZ3RoIDwgcy5tYXhfbGF6eV9tYXRjaCAmJlxuICAgICAgICBzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkIDw9IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpLypNQVhfRElTVChzKSovKSB7XG4gICAgICAvKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZ1xuICAgICAgICogb2Ygd2luZG93IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoXG4gICAgICAgKiBvZiB0aGUgc3RyaW5nIHdpdGggaXRzZWxmIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQgZmlsZSkuXG4gICAgICAgKi9cbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpO1xuICAgICAgLyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi9cblxuICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoIDw9IDUgJiZcbiAgICAgICAgIChzLnN0cmF0ZWd5ID09PSBaX0ZJTFRFUkVEIHx8IChzLm1hdGNoX2xlbmd0aCA9PT0gTUlOX01BVENIICYmIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0ID4gNDA5Ni8qVE9PX0ZBUiovKSkpIHtcblxuICAgICAgICAvKiBJZiBwcmV2X21hdGNoIGlzIGFsc28gTUlOX01BVENILCBtYXRjaF9zdGFydCBpcyBnYXJiYWdlXG4gICAgICAgICAqIGJ1dCB3ZSB3aWxsIGlnbm9yZSB0aGUgY3VycmVudCBtYXRjaCBhbnl3YXkuXG4gICAgICAgICAqL1xuICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIElmIHRoZXJlIHdhcyBhIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBzdGVwIGFuZCB0aGUgY3VycmVudFxuICAgICAqIG1hdGNoIGlzIG5vdCBiZXR0ZXIsIG91dHB1dCB0aGUgcHJldmlvdXMgbWF0Y2g6XG4gICAgICovXG4gICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHtcbiAgICAgIG1heF9pbnNlcnQgPSBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQgLSBNSU5fTUFUQ0g7XG4gICAgICAvKiBEbyBub3QgaW5zZXJ0IHN0cmluZ3MgaW4gaGFzaCB0YWJsZSBiZXlvbmQgdGhpcy4gKi9cblxuICAgICAgLy9jaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LTEsIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCk7XG5cbiAgICAgIC8qKipfdHJfdGFsbHlfZGlzdChzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgIHMucHJldl9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7KioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENIKTtcbiAgICAgIC8qIEluc2VydCBpbiBoYXNoIHRhYmxlIGFsbCBzdHJpbmdzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIG1hdGNoLlxuICAgICAgICogc3Ryc3RhcnQtMSBhbmQgc3Ryc3RhcnQgYXJlIGFscmVhZHkgaW5zZXJ0ZWQuIElmIHRoZXJlIGlzIG5vdFxuICAgICAgICogZW5vdWdoIGxvb2thaGVhZCwgdGhlIGxhc3QgdHdvIHN0cmluZ3MgYXJlIG5vdCBpbnNlcnRlZCBpblxuICAgICAgICogdGhlIGhhc2ggdGFibGUuXG4gICAgICAgKi9cbiAgICAgIHMubG9va2FoZWFkIC09IHMucHJldl9sZW5ndGggLSAxO1xuICAgICAgcy5wcmV2X2xlbmd0aCAtPSAyO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoKytzLnN0cnN0YXJ0IDw9IG1heF9pbnNlcnQpIHtcbiAgICAgICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcbiAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgICAgIC8qKiovXG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7XG4gICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7XG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gICAgICBzLnN0cnN0YXJ0Kys7XG5cbiAgICAgIGlmIChiZmx1c2gpIHtcbiAgICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgICB9XG4gICAgICAgIC8qKiovXG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7XG4gICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHBvc2l0aW9uLCBvdXRwdXQgYVxuICAgICAgICogc2luZ2xlIGxpdGVyYWwuIElmIHRoZXJlIHdhcyBhIG1hdGNoIGJ1dCB0aGUgY3VycmVudCBtYXRjaFxuICAgICAgICogaXMgbG9uZ2VyLCB0cnVuY2F0ZSB0aGUgcHJldmlvdXMgbWF0Y2ggdG8gYSBzaW5nbGUgbGl0ZXJhbC5cbiAgICAgICAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTtcbiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydCAtIDFdKTtcblxuICAgICAgaWYgKGJmbHVzaCkge1xuICAgICAgICAvKioqIEZMVVNIX0JMT0NLX09OTFkocywgMCkgKioqL1xuICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgICAgLyoqKi9cbiAgICAgIH1cbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBUaGVyZSBpcyBubyBwcmV2aW91cyBtYXRjaCB0byBjb21wYXJlIHdpdGgsIHdhaXQgZm9yXG4gICAgICAgKiB0aGUgbmV4dCBzdGVwIHRvIGRlY2lkZS5cbiAgICAgICAqL1xuICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAxO1xuICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICB9XG4gIH1cbiAgLy9Bc3NlcnQgKGZsdXNoICE9IFpfTk9fRkxVU0gsIFwibm8gZmx1c2g/XCIpO1xuICBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHtcbiAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpO1xuICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdLCBiZmx1c2gpOyAqKiovXG4gICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7XG5cbiAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7XG4gIH1cbiAgcy5pbnNlcnQgPSBzLnN0cnN0YXJ0IDwgTUlOX01BVENIIC0gMSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0ggLSAxO1xuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMubGFzdF9saXQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cblxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZvciBaX1JMRSwgc2ltcGx5IGxvb2sgZm9yIHJ1bnMgb2YgYnl0ZXMsIGdlbmVyYXRlIG1hdGNoZXMgb25seSBvZiBkaXN0YW5jZVxuICogb25lLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS4gIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mXG4gKiBkZWZsYXRlIHN3aXRjaGVzIGF3YXkgZnJvbSBaX1JMRS4pXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfcmxlKHMsIGZsdXNoKSB7XG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG4gIHZhciBwcmV2OyAgICAgICAgICAgICAgLyogYnl0ZSBhdCBkaXN0YW5jZSBvbmUgdG8gbWF0Y2ggKi9cbiAgdmFyIHNjYW4sIHN0cmVuZDsgICAgICAvKiBzY2FuIGdvZXMgdXAgdG8gc3RyZW5kIGZvciBsZW5ndGggb2YgcnVuICovXG5cbiAgdmFyIF93aW4gPSBzLndpbmRvdztcblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0XG4gICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXNcbiAgICAgKiBmb3IgdGhlIGxvbmdlc3QgcnVuLCBwbHVzIG9uZSBmb3IgdGhlIHVucm9sbGVkIGxvb3AuXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsgYnJlYWs7IH0gLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICB9XG5cbiAgICAvKiBTZWUgaG93IG1hbnkgdGltZXMgdGhlIHByZXZpb3VzIGJ5dGUgcmVwZWF0cyAqL1xuICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIICYmIHMuc3Ryc3RhcnQgPiAwKSB7XG4gICAgICBzY2FuID0gcy5zdHJzdGFydCAtIDE7XG4gICAgICBwcmV2ID0gX3dpbltzY2FuXTtcbiAgICAgIGlmIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSkge1xuICAgICAgICBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgLypqc2hpbnQgbm9lbXB0eTpmYWxzZSovXG4gICAgICAgIH0gd2hpbGUgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgc2NhbiA8IHN0cmVuZCk7XG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUFYX01BVENIIC0gKHN0cmVuZCAtIHNjYW4pO1xuICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPiBzLmxvb2thaGVhZCkge1xuICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gcy5sb29rYWhlYWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgXCJ3aWxkIHNjYW5cIik7XG4gICAgfVxuXG4gICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqL1xuICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8vY2hlY2tfbWF0Y2gocywgcy5zdHJzdGFydCwgcy5zdHJzdGFydCAtIDEsIHMubWF0Y2hfbGVuZ3RoKTtcblxuICAgICAgLyoqKiBfdHJfdGFsbHlfZGlzdChzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTtcblxuICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICBzLnN0cnN0YXJ0ICs9IHMubWF0Y2hfbGVuZ3RoO1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0pKTtcbiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTtcblxuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICB9XG4gICAgaWYgKGJmbHVzaCkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cbiAgcy5pbnNlcnQgPSAwO1xuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMubGFzdF9saXQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRm9yIFpfSFVGRk1BTl9PTkxZLCBkbyBub3QgbG9vayBmb3IgbWF0Y2hlcy4gIERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuXG4gKiAoSXQgd2lsbCBiZSByZWdlbmVyYXRlZCBpZiB0aGlzIHJ1biBvZiBkZWZsYXRlIHN3aXRjaGVzIGF3YXkgZnJvbSBIdWZmbWFuLilcbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSB7XG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgbGl0ZXJhbCB0byB3cml0ZS4gKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7ICAgICAgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBPdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7XG4gICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTtcbiAgICBzLmxvb2thaGVhZC0tO1xuICAgIHMuc3Ryc3RhcnQrKztcbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9IDA7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuLyogVmFsdWVzIGZvciBtYXhfbGF6eV9tYXRjaCwgZ29vZF9tYXRjaCBhbmQgbWF4X2NoYWluX2xlbmd0aCwgZGVwZW5kaW5nIG9uXG4gKiB0aGUgZGVzaXJlZCBwYWNrIGxldmVsICgwLi45KS4gVGhlIHZhbHVlcyBnaXZlbiBiZWxvdyBoYXZlIGJlZW4gdHVuZWQgdG9cbiAqIGV4Y2x1ZGUgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBmb3IgcGF0aG9sb2dpY2FsIGZpbGVzLiBCZXR0ZXIgdmFsdWVzIG1heSBiZVxuICogZm91bmQgZm9yIHNwZWNpZmljIGZpbGVzLlxuICovXG5mdW5jdGlvbiBDb25maWcoZ29vZF9sZW5ndGgsIG1heF9sYXp5LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluLCBmdW5jKSB7XG4gIHRoaXMuZ29vZF9sZW5ndGggPSBnb29kX2xlbmd0aDtcbiAgdGhpcy5tYXhfbGF6eSA9IG1heF9sYXp5O1xuICB0aGlzLm5pY2VfbGVuZ3RoID0gbmljZV9sZW5ndGg7XG4gIHRoaXMubWF4X2NoYWluID0gbWF4X2NoYWluO1xuICB0aGlzLmZ1bmMgPSBmdW5jO1xufVxuXG52YXIgY29uZmlndXJhdGlvbl90YWJsZTtcblxuY29uZmlndXJhdGlvbl90YWJsZSA9IFtcbiAgLyogICAgICBnb29kIGxhenkgbmljZSBjaGFpbiAqL1xuICBuZXcgQ29uZmlnKDAsIDAsIDAsIDAsIGRlZmxhdGVfc3RvcmVkKSwgICAgICAgICAgLyogMCBzdG9yZSBvbmx5ICovXG4gIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgICAvKiAxIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovXG4gIG5ldyBDb25maWcoNCwgNSwgMTYsIDgsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAvKiAyICovXG4gIG5ldyBDb25maWcoNCwgNiwgMzIsIDMyLCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAvKiAzICovXG5cbiAgbmV3IENvbmZpZyg0LCA0LCAxNiwgMTYsIGRlZmxhdGVfc2xvdyksICAgICAgICAgIC8qIDQgbGF6eSBtYXRjaGVzICovXG4gIG5ldyBDb25maWcoOCwgMTYsIDMyLCAzMiwgZGVmbGF0ZV9zbG93KSwgICAgICAgICAvKiA1ICovXG4gIG5ldyBDb25maWcoOCwgMTYsIDEyOCwgMTI4LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAvKiA2ICovXG4gIG5ldyBDb25maWcoOCwgMzIsIDEyOCwgMjU2LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAvKiA3ICovXG4gIG5ldyBDb25maWcoMzIsIDEyOCwgMjU4LCAxMDI0LCBkZWZsYXRlX3Nsb3cpLCAgICAvKiA4ICovXG4gIG5ldyBDb25maWcoMzIsIDI1OCwgMjU4LCA0MDk2LCBkZWZsYXRlX3Nsb3cpICAgICAvKiA5IG1heCBjb21wcmVzc2lvbiAqL1xuXTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEluaXRpYWxpemUgdGhlIFwibG9uZ2VzdCBtYXRjaFwiIHJvdXRpbmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbVxuICovXG5mdW5jdGlvbiBsbV9pbml0KHMpIHtcbiAgcy53aW5kb3dfc2l6ZSA9IDIgKiBzLndfc2l6ZTtcblxuICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi9cbiAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuXG4gIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6XG4gICAqL1xuICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTtcbiAgcy5nb29kX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5nb29kX2xlbmd0aDtcbiAgcy5uaWNlX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5uaWNlX2xlbmd0aDtcbiAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47XG5cbiAgcy5zdHJzdGFydCA9IDA7XG4gIHMuYmxvY2tfc3RhcnQgPSAwO1xuICBzLmxvb2thaGVhZCA9IDA7XG4gIHMuaW5zZXJ0ID0gMDtcbiAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICBzLmluc19oID0gMDtcbn1cblxuXG5mdW5jdGlvbiBEZWZsYXRlU3RhdGUoKSB7XG4gIHRoaXMuc3RybSA9IG51bGw7ICAgICAgICAgICAgLyogcG9pbnRlciBiYWNrIHRvIHRoaXMgemxpYiBzdHJlYW0gKi9cbiAgdGhpcy5zdGF0dXMgPSAwOyAgICAgICAgICAgIC8qIGFzIHRoZSBuYW1lIGltcGxpZXMgKi9cbiAgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGw7ICAgICAgLyogb3V0cHV0IHN0aWxsIHBlbmRpbmcgKi9cbiAgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsgIC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi9cbiAgdGhpcy5wZW5kaW5nX291dCA9IDA7ICAgICAgIC8qIG5leHQgcGVuZGluZyBieXRlIHRvIG91dHB1dCB0byB0aGUgc3RyZWFtICovXG4gIHRoaXMucGVuZGluZyA9IDA7ICAgICAgICAgICAvKiBuYiBvZiBieXRlcyBpbiB0aGUgcGVuZGluZyBidWZmZXIgKi9cbiAgdGhpcy53cmFwID0gMDsgICAgICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi9cbiAgdGhpcy5nemhlYWQgPSBudWxsOyAgICAgICAgIC8qIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHRvIHdyaXRlICovXG4gIHRoaXMuZ3ppbmRleCA9IDA7ICAgICAgICAgICAvKiB3aGVyZSBpbiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCAqL1xuICB0aGlzLm1ldGhvZCA9IFpfREVGTEFURUQ7IC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovXG4gIHRoaXMubGFzdF9mbHVzaCA9IC0xOyAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi9cblxuICB0aGlzLndfc2l6ZSA9IDA7ICAvKiBMWjc3IHdpbmRvdyBzaXplICgzMksgYnkgZGVmYXVsdCkgKi9cbiAgdGhpcy53X2JpdHMgPSAwOyAgLyogbG9nMih3X3NpemUpICAoOC4uMTYpICovXG4gIHRoaXMud19tYXNrID0gMDsgIC8qIHdfc2l6ZSAtIDEgKi9cblxuICB0aGlzLndpbmRvdyA9IG51bGw7XG4gIC8qIFNsaWRpbmcgd2luZG93LiBJbnB1dCBieXRlcyBhcmUgcmVhZCBpbnRvIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgd2luZG93LFxuICAgKiBhbmQgbW92ZSB0byB0aGUgZmlyc3QgaGFsZiBsYXRlciB0byBrZWVwIGEgZGljdGlvbmFyeSBvZiBhdCBsZWFzdCB3U2l6ZVxuICAgKiBieXRlcy4gV2l0aCB0aGlzIG9yZ2FuaXphdGlvbiwgbWF0Y2hlcyBhcmUgbGltaXRlZCB0byBhIGRpc3RhbmNlIG9mXG4gICAqIHdTaXplLU1BWF9NQVRDSCBieXRlcywgYnV0IHRoaXMgZW5zdXJlcyB0aGF0IElPIGlzIGFsd2F5c1xuICAgKiBwZXJmb3JtZWQgd2l0aCBhIGxlbmd0aCBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZS5cbiAgICovXG5cbiAgdGhpcy53aW5kb3dfc2l6ZSA9IDA7XG4gIC8qIEFjdHVhbCBzaXplIG9mIHdpbmRvdzogMip3U2l6ZSwgZXhjZXB0IHdoZW4gdGhlIHVzZXIgaW5wdXQgYnVmZmVyXG4gICAqIGlzIGRpcmVjdGx5IHVzZWQgYXMgc2xpZGluZyB3aW5kb3cuXG4gICAqL1xuXG4gIHRoaXMucHJldiA9IG51bGw7XG4gIC8qIExpbmsgdG8gb2xkZXIgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGluZGV4LiBUbyBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzXG4gICAqIGFycmF5IHRvIDY0SywgdGhpcyBsaW5rIGlzIG1haW50YWluZWQgb25seSBmb3IgdGhlIGxhc3QgMzJLIHN0cmluZ3MuXG4gICAqIEFuIGluZGV4IGluIHRoaXMgYXJyYXkgaXMgdGh1cyBhIHdpbmRvdyBpbmRleCBtb2R1bG8gMzJLLlxuICAgKi9cblxuICB0aGlzLmhlYWQgPSBudWxsOyAgIC8qIEhlYWRzIG9mIHRoZSBoYXNoIGNoYWlucyBvciBOSUwuICovXG5cbiAgdGhpcy5pbnNfaCA9IDA7ICAgICAgIC8qIGhhc2ggaW5kZXggb2Ygc3RyaW5nIHRvIGJlIGluc2VydGVkICovXG4gIHRoaXMuaGFzaF9zaXplID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gaGFzaCB0YWJsZSAqL1xuICB0aGlzLmhhc2hfYml0cyA9IDA7ICAgLyogbG9nMihoYXNoX3NpemUpICovXG4gIHRoaXMuaGFzaF9tYXNrID0gMDsgICAvKiBoYXNoX3NpemUtMSAqL1xuXG4gIHRoaXMuaGFzaF9zaGlmdCA9IDA7XG4gIC8qIE51bWJlciBvZiBiaXRzIGJ5IHdoaWNoIGluc19oIG11c3QgYmUgc2hpZnRlZCBhdCBlYWNoIGlucHV0XG4gICAqIHN0ZXAuIEl0IG11c3QgYmUgc3VjaCB0aGF0IGFmdGVyIE1JTl9NQVRDSCBzdGVwcywgdGhlIG9sZGVzdFxuICAgKiBieXRlIG5vIGxvbmdlciB0YWtlcyBwYXJ0IGluIHRoZSBoYXNoIGtleSwgdGhhdCBpczpcbiAgICogICBoYXNoX3NoaWZ0ICogTUlOX01BVENIID49IGhhc2hfYml0c1xuICAgKi9cblxuICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgLyogV2luZG93IHBvc2l0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IGJsb2NrLiBHZXRzXG4gICAqIG5lZ2F0aXZlIHdoZW4gdGhlIHdpbmRvdyBpcyBtb3ZlZCBiYWNrd2FyZHMuXG4gICAqL1xuXG4gIHRoaXMubWF0Y2hfbGVuZ3RoID0gMDsgICAgICAvKiBsZW5ndGggb2YgYmVzdCBtYXRjaCAqL1xuICB0aGlzLnByZXZfbWF0Y2ggPSAwOyAgICAgICAgLyogcHJldmlvdXMgbWF0Y2ggKi9cbiAgdGhpcy5tYXRjaF9hdmFpbGFibGUgPSAwOyAgIC8qIHNldCBpZiBwcmV2aW91cyBtYXRjaCBleGlzdHMgKi9cbiAgdGhpcy5zdHJzdGFydCA9IDA7ICAgICAgICAgIC8qIHN0YXJ0IG9mIHN0cmluZyB0byBpbnNlcnQgKi9cbiAgdGhpcy5tYXRjaF9zdGFydCA9IDA7ICAgICAgIC8qIHN0YXJ0IG9mIG1hdGNoaW5nIHN0cmluZyAqL1xuICB0aGlzLmxvb2thaGVhZCA9IDA7ICAgICAgICAgLyogbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGFoZWFkIGluIHdpbmRvdyAqL1xuXG4gIHRoaXMucHJldl9sZW5ndGggPSAwO1xuICAvKiBMZW5ndGggb2YgdGhlIGJlc3QgbWF0Y2ggYXQgcHJldmlvdXMgc3RlcC4gTWF0Y2hlcyBub3QgZ3JlYXRlciB0aGFuIHRoaXNcbiAgICogYXJlIGRpc2NhcmRlZC4gVGhpcyBpcyB1c2VkIGluIHRoZSBsYXp5IG1hdGNoIGV2YWx1YXRpb24uXG4gICAqL1xuXG4gIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7XG4gIC8qIFRvIHNwZWVkIHVwIGRlZmxhdGlvbiwgaGFzaCBjaGFpbnMgYXJlIG5ldmVyIHNlYXJjaGVkIGJleW9uZCB0aGlzXG4gICAqIGxlbmd0aC4gIEEgaGlnaGVyIGxpbWl0IGltcHJvdmVzIGNvbXByZXNzaW9uIHJhdGlvIGJ1dCBkZWdyYWRlcyB0aGVcbiAgICogc3BlZWQuXG4gICAqL1xuXG4gIHRoaXMubWF4X2xhenlfbWF0Y2ggPSAwO1xuICAvKiBBdHRlbXB0IHRvIGZpbmQgYSBiZXR0ZXIgbWF0Y2ggb25seSB3aGVuIHRoZSBjdXJyZW50IG1hdGNoIGlzIHN0cmljdGx5XG4gICAqIHNtYWxsZXIgdGhhbiB0aGlzIHZhbHVlLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIG9ubHkgZm9yIGNvbXByZXNzaW9uXG4gICAqIGxldmVscyA+PSA0LlxuICAgKi9cbiAgLy8gVGhhdCdzIGFsaWFzIHRvIG1heF9sYXp5X21hdGNoLCBkb24ndCB1c2UgZGlyZWN0bHlcbiAgLy90aGlzLm1heF9pbnNlcnRfbGVuZ3RoID0gMDtcbiAgLyogSW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIG9ubHkgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBub3RcbiAgICogZ3JlYXRlciB0aGFuIHRoaXMgbGVuZ3RoLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLlxuICAgKiBtYXhfaW5zZXJ0X2xlbmd0aCBpcyB1c2VkIG9ubHkgZm9yIGNvbXByZXNzaW9uIGxldmVscyA8PSAzLlxuICAgKi9cblxuICB0aGlzLmxldmVsID0gMDsgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICgxLi45KSAqL1xuICB0aGlzLnN0cmF0ZWd5ID0gMDsgIC8qIGZhdm9yIG9yIGZvcmNlIEh1ZmZtYW4gY29kaW5nKi9cblxuICB0aGlzLmdvb2RfbWF0Y2ggPSAwO1xuICAvKiBVc2UgYSBmYXN0ZXIgc2VhcmNoIHdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGlzIGxvbmdlciB0aGFuIHRoaXMgKi9cblxuICB0aGlzLm5pY2VfbWF0Y2ggPSAwOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovXG5cbiAgICAgICAgICAgICAgLyogdXNlZCBieSB0cmVlcy5jOiAqL1xuXG4gIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi9cblxuICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9sdHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVyYWwgYW5kIGxlbmd0aCB0cmVlICovXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJlZSAqL1xuICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3RyZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi9cblxuICAvLyBVc2UgZmxhdCBhcnJheSBvZiBET1VCTEUgc2l6ZSwgd2l0aCBpbnRlcmxlYXZlZCBmYXRhLFxuICAvLyBiZWNhdXNlIEpTIGRvZXMgbm90IHN1cHBvcnQgZWZmZWN0aXZlXG4gIHRoaXMuZHluX2x0cmVlICA9IG5ldyB1dGlscy5CdWYxNihIRUFQX1NJWkUgKiAyKTtcbiAgdGhpcy5keW5fZHRyZWUgID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogRF9DT0RFUyArIDEpICogMik7XG4gIHRoaXMuYmxfdHJlZSAgICA9IG5ldyB1dGlscy5CdWYxNigoMiAqIEJMX0NPREVTICsgMSkgKiAyKTtcbiAgemVybyh0aGlzLmR5bl9sdHJlZSk7XG4gIHplcm8odGhpcy5keW5fZHRyZWUpO1xuICB6ZXJvKHRoaXMuYmxfdHJlZSk7XG5cbiAgdGhpcy5sX2Rlc2MgICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGxpdGVyYWwgdHJlZSAqL1xuICB0aGlzLmRfZGVzYyAgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgZGlzdGFuY2UgdHJlZSAqL1xuICB0aGlzLmJsX2Rlc2MgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgYml0IGxlbmd0aCB0cmVlICovXG5cbiAgLy91c2ggYmxfY291bnRbTUFYX0JJVFMrMV07XG4gIHRoaXMuYmxfY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYX0JJVFMgKyAxKTtcbiAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0cmVlICovXG5cbiAgLy9pbnQgaGVhcFsyKkxfQ09ERVMrMV07ICAgICAgLyogaGVhcCB1c2VkIHRvIGJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzICovXG4gIHRoaXMuaGVhcCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOyAgLyogaGVhcCB1c2VkIHRvIGJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzICovXG4gIHplcm8odGhpcy5oZWFwKTtcblxuICB0aGlzLmhlYXBfbGVuID0gMDsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhlYXAgKi9cbiAgdGhpcy5oZWFwX21heCA9IDA7ICAgICAgICAgICAgICAgLyogZWxlbWVudCBvZiBsYXJnZXN0IGZyZXF1ZW5jeSAqL1xuICAvKiBUaGUgc29ucyBvZiBoZWFwW25dIGFyZSBoZWFwWzIqbl0gYW5kIGhlYXBbMipuKzFdLiBoZWFwWzBdIGlzIG5vdCB1c2VkLlxuICAgKiBUaGUgc2FtZSBoZWFwIGFycmF5IGlzIHVzZWQgdG8gYnVpbGQgYWxsIHRyZWVzLlxuICAgKi9cblxuICB0aGlzLmRlcHRoID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7IC8vdWNoIGRlcHRoWzIqTF9DT0RFUysxXTtcbiAgemVybyh0aGlzLmRlcHRoKTtcbiAgLyogRGVwdGggb2YgZWFjaCBzdWJ0cmVlIHVzZWQgYXMgdGllIGJyZWFrZXIgZm9yIHRyZWVzIG9mIGVxdWFsIGZyZXF1ZW5jeVxuICAgKi9cblxuICB0aGlzLmxfYnVmID0gMDsgICAgICAgICAgLyogYnVmZmVyIGluZGV4IGZvciBsaXRlcmFscyBvciBsZW5ndGhzICovXG5cbiAgdGhpcy5saXRfYnVmc2l6ZSA9IDA7XG4gIC8qIFNpemUgb2YgbWF0Y2ggYnVmZmVyIGZvciBsaXRlcmFscy9sZW5ndGhzLiAgVGhlcmUgYXJlIDQgcmVhc29ucyBmb3JcbiAgICogbGltaXRpbmcgbGl0X2J1ZnNpemUgdG8gNjRLOlxuICAgKiAgIC0gZnJlcXVlbmNpZXMgY2FuIGJlIGtlcHQgaW4gMTYgYml0IGNvdW50ZXJzXG4gICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZpcnN0IGJsb2NrLCBhbGwgaW5wdXRcbiAgICogICAgIGRhdGEgaXMgc3RpbGwgaW4gdGhlIHdpbmRvdyBzbyB3ZSBjYW4gc3RpbGwgZW1pdCBhIHN0b3JlZCBibG9jayBldmVuXG4gICAqICAgICB3aGVuIGlucHV0IGNvbWVzIGZyb20gc3RhbmRhcmQgaW5wdXQuICAoVGhpcyBjYW4gYWxzbyBiZSBkb25lIGZvclxuICAgKiAgICAgYWxsIGJsb2NrcyBpZiBsaXRfYnVmc2l6ZSBpcyBub3QgZ3JlYXRlciB0aGFuIDMySy4pXG4gICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYSBmaWxlIHNtYWxsZXIgdGhhbiA2NEssIHdlIGNhblxuICAgKiAgICAgZXZlbiBlbWl0IGEgc3RvcmVkIGZpbGUgaW5zdGVhZCBvZiBhIHN0b3JlZCBibG9jayAoc2F2aW5nIDUgYnl0ZXMpLlxuICAgKiAgICAgVGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgZm9yIHppcCAobm90IGd6aXAgb3IgemxpYikuXG4gICAqICAgLSBjcmVhdGluZyBuZXcgSHVmZm1hbiB0cmVlcyBsZXNzIGZyZXF1ZW50bHkgbWF5IG5vdCBwcm92aWRlIGZhc3RcbiAgICogICAgIGFkYXB0YXRpb24gdG8gY2hhbmdlcyBpbiB0aGUgaW5wdXQgZGF0YSBzdGF0aXN0aWNzLiAoVGFrZSBmb3JcbiAgICogICAgIGV4YW1wbGUgYSBiaW5hcnkgZmlsZSB3aXRoIHBvb3JseSBjb21wcmVzc2libGUgY29kZSBmb2xsb3dlZCBieVxuICAgKiAgICAgYSBoaWdobHkgY29tcHJlc3NpYmxlIHN0cmluZyB0YWJsZS4pIFNtYWxsZXIgYnVmZmVyIHNpemVzIGdpdmVcbiAgICogICAgIGZhc3QgYWRhcHRhdGlvbiBidXQgaGF2ZSBvZiBjb3Vyc2UgdGhlIG92ZXJoZWFkIG9mIHRyYW5zbWl0dGluZ1xuICAgKiAgICAgdHJlZXMgbW9yZSBmcmVxdWVudGx5LlxuICAgKiAgIC0gSSBjYW4ndCBjb3VudCBhYm92ZSA0XG4gICAqL1xuXG4gIHRoaXMubGFzdF9saXQgPSAwOyAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi9cblxuICB0aGlzLmRfYnVmID0gMDtcbiAgLyogQnVmZmVyIGluZGV4IGZvciBkaXN0YW5jZXMuIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCBkX2J1ZiBhbmQgbF9idWYgaGF2ZVxuICAgKiB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMuIFRvIHVzZSBkaWZmZXJlbnQgbGVuZ3RocywgYW4gZXh0cmEgZmxhZ1xuICAgKiBhcnJheSB3b3VsZCBiZSBuZWNlc3NhcnkuXG4gICAqL1xuXG4gIHRoaXMub3B0X2xlbiA9IDA7ICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIG9wdGltYWwgdHJlZXMgKi9cbiAgdGhpcy5zdGF0aWNfbGVuID0gMDsgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovXG4gIHRoaXMubWF0Y2hlcyA9IDA7ICAgICAgIC8qIG51bWJlciBvZiBzdHJpbmcgbWF0Y2hlcyBpbiBjdXJyZW50IGJsb2NrICovXG4gIHRoaXMuaW5zZXJ0ID0gMDsgICAgICAgIC8qIGJ5dGVzIGF0IGVuZCBvZiB3aW5kb3cgbGVmdCB0byBpbnNlcnQgKi9cblxuXG4gIHRoaXMuYmlfYnVmID0gMDtcbiAgLyogT3V0cHV0IGJ1ZmZlci4gYml0cyBhcmUgaW5zZXJ0ZWQgc3RhcnRpbmcgYXQgdGhlIGJvdHRvbSAobGVhc3RcbiAgICogc2lnbmlmaWNhbnQgYml0cykuXG4gICAqL1xuICB0aGlzLmJpX3ZhbGlkID0gMDtcbiAgLyogTnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gYmlfYnVmLiAgQWxsIGJpdHMgYWJvdmUgdGhlIGxhc3QgdmFsaWQgYml0XG4gICAqIGFyZSBhbHdheXMgemVyby5cbiAgICovXG5cbiAgLy8gVXNlZCBmb3Igd2luZG93IG1lbW9yeSBpbml0LiBXZSBzYWZlbHkgaWdub3JlIGl0IGZvciBKUy4gVGhhdCBtYWtlc1xuICAvLyBzZW5zZSBvbmx5IGZvciBwb2ludGVycyBhbmQgbWVtb3J5IGNoZWNrIHRvb2xzLlxuICAvL3RoaXMuaGlnaF93YXRlciA9IDA7XG4gIC8qIEhpZ2ggd2F0ZXIgbWFyayBvZmZzZXQgaW4gd2luZG93IGZvciBpbml0aWFsaXplZCBieXRlcyAtLSBieXRlcyBhYm92ZVxuICAgKiB0aGlzIGFyZSBzZXQgdG8gemVybyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgd2FybmluZ3Mgd2hlblxuICAgKiBsb25nZXN0IG1hdGNoIHJvdXRpbmVzIGFjY2VzcyBieXRlcyBwYXN0IHRoZSBpbnB1dC4gIFRoaXMgaXMgdGhlblxuICAgKiB1cGRhdGVkIHRvIHRoZSBuZXcgaGlnaCB3YXRlciBtYXJrLlxuICAgKi9cbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pIHtcbiAgdmFyIHM7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7XG4gIH1cblxuICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSAwO1xuICBzdHJtLmRhdGFfdHlwZSA9IFpfVU5LTk9XTjtcblxuICBzID0gc3RybS5zdGF0ZTtcbiAgcy5wZW5kaW5nID0gMDtcbiAgcy5wZW5kaW5nX291dCA9IDA7XG5cbiAgaWYgKHMud3JhcCA8IDApIHtcbiAgICBzLndyYXAgPSAtcy53cmFwO1xuICAgIC8qIHdhcyBtYWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4uLCBaX0ZJTklTSCk7ICovXG4gIH1cbiAgcy5zdGF0dXMgPSAocy53cmFwID8gSU5JVF9TVEFURSA6IEJVU1lfU1RBVEUpO1xuICBzdHJtLmFkbGVyID0gKHMud3JhcCA9PT0gMikgP1xuICAgIDAgIC8vIGNyYzMyKDAsIFpfTlVMTCwgMClcbiAgOlxuICAgIDE7IC8vIGFkbGVyMzIoMCwgWl9OVUxMLCAwKVxuICBzLmxhc3RfZmx1c2ggPSBaX05PX0ZMVVNIO1xuICB0cmVlcy5fdHJfaW5pdChzKTtcbiAgcmV0dXJuIFpfT0s7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZVJlc2V0KHN0cm0pIHtcbiAgdmFyIHJldCA9IGRlZmxhdGVSZXNldEtlZXAoc3RybSk7XG4gIGlmIChyZXQgPT09IFpfT0spIHtcbiAgICBsbV9pbml0KHN0cm0uc3RhdGUpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7XG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgaWYgKHN0cm0uc3RhdGUud3JhcCAhPT0gMikgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkO1xuICByZXR1cm4gWl9PSztcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSB7XG4gIGlmICghc3RybSkgeyAvLyA9PT0gWl9OVUxMXG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG4gIHZhciB3cmFwID0gMTtcblxuICBpZiAobGV2ZWwgPT09IFpfREVGQVVMVF9DT01QUkVTU0lPTikge1xuICAgIGxldmVsID0gNjtcbiAgfVxuXG4gIGlmICh3aW5kb3dCaXRzIDwgMCkgeyAvKiBzdXBwcmVzcyB6bGliIHdyYXBwZXIgKi9cbiAgICB3cmFwID0gMDtcbiAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7XG4gIH1cblxuICBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHtcbiAgICB3cmFwID0gMjsgICAgICAgICAgIC8qIHdyaXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkICovXG4gICAgd2luZG93Qml0cyAtPSAxNjtcbiAgfVxuXG5cbiAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9PSBaX0RFRkxBVEVEIHx8XG4gICAgd2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHxcbiAgICBzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0ZJWEVEKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7XG4gIH1cblxuXG4gIGlmICh3aW5kb3dCaXRzID09PSA4KSB7XG4gICAgd2luZG93Qml0cyA9IDk7XG4gIH1cbiAgLyogdW50aWwgMjU2LWJ5dGUgd2luZG93IGJ1ZyBmaXhlZCAqL1xuXG4gIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpO1xuXG4gIHN0cm0uc3RhdGUgPSBzO1xuICBzLnN0cm0gPSBzdHJtO1xuXG4gIHMud3JhcCA9IHdyYXA7XG4gIHMuZ3poZWFkID0gbnVsbDtcbiAgcy53X2JpdHMgPSB3aW5kb3dCaXRzO1xuICBzLndfc2l6ZSA9IDEgPDwgcy53X2JpdHM7XG4gIHMud19tYXNrID0gcy53X3NpemUgLSAxO1xuXG4gIHMuaGFzaF9iaXRzID0gbWVtTGV2ZWwgKyA3O1xuICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7XG4gIHMuaGFzaF9tYXNrID0gcy5oYXNoX3NpemUgLSAxO1xuICBzLmhhc2hfc2hpZnQgPSB+figocy5oYXNoX2JpdHMgKyBNSU5fTUFUQ0ggLSAxKSAvIE1JTl9NQVRDSCk7XG5cbiAgcy53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSAqIDIpO1xuICBzLmhlYWQgPSBuZXcgdXRpbHMuQnVmMTYocy5oYXNoX3NpemUpO1xuICBzLnByZXYgPSBuZXcgdXRpbHMuQnVmMTYocy53X3NpemUpO1xuXG4gIC8vIERvbid0IG5lZWQgbWVtIGluaXQgbWFnaWMgZm9yIEpTLlxuICAvL3MuaGlnaF93YXRlciA9IDA7ICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqL1xuXG4gIHMubGl0X2J1ZnNpemUgPSAxIDw8IChtZW1MZXZlbCArIDYpOyAvKiAxNksgZWxlbWVudHMgYnkgZGVmYXVsdCAqL1xuXG4gIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0O1xuXG4gIC8vb3ZlcmxheSA9ICh1c2hmICopIFpBTExPQyhzdHJtLCBzLT5saXRfYnVmc2l6ZSwgc2l6ZW9mKHVzaCkrMik7XG4gIC8vcy0+cGVuZGluZ19idWYgPSAodWNoZiAqKSBvdmVybGF5O1xuICBzLnBlbmRpbmdfYnVmID0gbmV3IHV0aWxzLkJ1Zjgocy5wZW5kaW5nX2J1Zl9zaXplKTtcblxuICAvLyBJdCBpcyBvZmZzZXQgZnJvbSBgcy5wZW5kaW5nX2J1ZmAgKHNpemUgaXMgYHMubGl0X2J1ZnNpemUgKiAyYClcbiAgLy9zLT5kX2J1ZiA9IG92ZXJsYXkgKyBzLT5saXRfYnVmc2l6ZS9zaXplb2YodXNoKTtcbiAgcy5kX2J1ZiA9IDEgKiBzLmxpdF9idWZzaXplO1xuXG4gIC8vcy0+bF9idWYgPSBzLT5wZW5kaW5nX2J1ZiArICgxK3NpemVvZih1c2gpKSpzLT5saXRfYnVmc2l6ZTtcbiAgcy5sX2J1ZiA9ICgxICsgMikgKiBzLmxpdF9idWZzaXplO1xuXG4gIHMubGV2ZWwgPSBsZXZlbDtcbiAgcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICBzLm1ldGhvZCA9IG1ldGhvZDtcblxuICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pO1xufVxuXG5mdW5jdGlvbiBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkge1xuICByZXR1cm4gZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBaX0RFRkxBVEVELCBNQVhfV0JJVFMsIERFRl9NRU1fTEVWRUwsIFpfREVGQVVMVF9TVFJBVEVHWSk7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZShzdHJtLCBmbHVzaCkge1xuICB2YXIgb2xkX2ZsdXNoLCBzO1xuICB2YXIgYmVnLCB2YWw7IC8vIGZvciBnemlwIGhlYWRlciB3cml0ZSBvbmx5XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIHx8XG4gICAgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkge1xuICAgIHJldHVybiBzdHJtID8gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKSA6IFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgcyA9IHN0cm0uc3RhdGU7XG5cbiAgaWYgKCFzdHJtLm91dHB1dCB8fFxuICAgICAgKCFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHx8XG4gICAgICAocy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBmbHVzaCAhPT0gWl9GSU5JU0gpKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCAoc3RybS5hdmFpbF9vdXQgPT09IDApID8gWl9CVUZfRVJST1IgOiBaX1NUUkVBTV9FUlJPUik7XG4gIH1cblxuICBzLnN0cm0gPSBzdHJtOyAvKiBqdXN0IGluIGNhc2UgKi9cbiAgb2xkX2ZsdXNoID0gcy5sYXN0X2ZsdXNoO1xuICBzLmxhc3RfZmx1c2ggPSBmbHVzaDtcblxuICAvKiBXcml0ZSB0aGUgaGVhZGVyICovXG4gIGlmIChzLnN0YXR1cyA9PT0gSU5JVF9TVEFURSkge1xuXG4gICAgaWYgKHMud3JhcCA9PT0gMikgeyAvLyBHWklQIGhlYWRlclxuICAgICAgc3RybS5hZGxlciA9IDA7ICAvL2NyYzMyKDBMLCBaX05VTEwsIDApO1xuICAgICAgcHV0X2J5dGUocywgMzEpO1xuICAgICAgcHV0X2J5dGUocywgMTM5KTtcbiAgICAgIHB1dF9ieXRlKHMsIDgpO1xuICAgICAgaWYgKCFzLmd6aGVhZCkgeyAvLyBzLT5nemhlYWQgPT0gWl9OVUxMXG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOlxuICAgICAgICAgICAgICAgICAgICAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMiA/XG4gICAgICAgICAgICAgICAgICAgICA0IDogMCkpO1xuICAgICAgICBwdXRfYnl0ZShzLCBPU19DT0RFKTtcbiAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50ZXh0ID8gMSA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKHMuZ3poZWFkLmhjcmMgPyAyIDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICtcbiAgICAgICAgICAgICAgICAgICAgKCFzLmd6aGVhZC5uYW1lID8gMCA6IDgpICtcbiAgICAgICAgICAgICAgICAgICAgKCFzLmd6aGVhZC5jb21tZW50ID8gMCA6IDE2KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLnRpbWUgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gOCkgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMTYpICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50aW1lID4+IDI0KSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6XG4gICAgICAgICAgICAgICAgICAgIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID9cbiAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLm9zICYgMHhmZik7XG4gICAgICAgIGlmIChzLmd6aGVhZC5leHRyYSAmJiBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHtcbiAgICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYS5sZW5ndGggJiAweGZmKTtcbiAgICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDgpICYgMHhmZik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMpIHtcbiAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBzLmd6aW5kZXggPSAwO1xuICAgICAgICBzLnN0YXR1cyA9IEVYVFJBX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIC8vIERFRkxBVEUgaGVhZGVyXG4gICAge1xuICAgICAgdmFyIGhlYWRlciA9IChaX0RFRkxBVEVEICsgKChzLndfYml0cyAtIDgpIDw8IDQpKSA8PCA4O1xuICAgICAgdmFyIGxldmVsX2ZsYWdzID0gLTE7XG5cbiAgICAgIGlmIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyKSB7XG4gICAgICAgIGxldmVsX2ZsYWdzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocy5sZXZlbCA8IDYpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzLmxldmVsID09PSA2KSB7XG4gICAgICAgIGxldmVsX2ZsYWdzID0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsX2ZsYWdzID0gMztcbiAgICAgIH1cbiAgICAgIGhlYWRlciB8PSAobGV2ZWxfZmxhZ3MgPDwgNik7XG4gICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkgeyBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7IH1cbiAgICAgIGhlYWRlciArPSAzMSAtIChoZWFkZXIgJSAzMSk7XG5cbiAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICAgIHB1dFNob3J0TVNCKHMsIGhlYWRlcik7XG5cbiAgICAgIC8qIFNhdmUgdGhlIGFkbGVyMzIgb2YgdGhlIHByZXNldCBkaWN0aW9uYXJ5OiAqL1xuICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHtcbiAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciA+Pj4gMTYpO1xuICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyICYgMHhmZmZmKTtcbiAgICAgIH1cbiAgICAgIHN0cm0uYWRsZXIgPSAxOyAvLyBhZGxlcjMyKDBMLCBaX05VTEwsIDApO1xuICAgIH1cbiAgfVxuXG4vLyNpZmRlZiBHWklQXG4gIGlmIChzLnN0YXR1cyA9PT0gRVhUUkFfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQuZXh0cmEvKiAhPSBaX05VTEwqLykge1xuICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqL1xuXG4gICAgICB3aGlsZSAocy5nemluZGV4IDwgKHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmZmZikpIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgICAgIGJlZyA9IHMucGVuZGluZztcbiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYVtzLmd6aW5kZXhdICYgMHhmZik7XG4gICAgICAgIHMuZ3ppbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICB9XG4gICAgICBpZiAocy5nemluZGV4ID09PSBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHtcbiAgICAgICAgcy5nemluZGV4ID0gMDtcbiAgICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuc3RhdHVzID09PSBOQU1FX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLm5hbWUvKiAhPSBaX05VTEwqLykge1xuICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqL1xuICAgICAgLy9pbnQgdmFsO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7XG4gICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgICB2YWwgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEpTIHNwZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nXG4gICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5uYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAweGZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcHV0X2J5dGUocywgdmFsKTtcbiAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7XG5cbiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbCA9PT0gMCkge1xuICAgICAgICBzLmd6aW5kZXggPSAwO1xuICAgICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IENPTU1FTlRfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQuY29tbWVudC8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG4gICAgICAvL2ludCB2YWw7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgICAgIGJlZyA9IHMucGVuZGluZztcbiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICAgIHZhbCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgc3BlY2lmaWM6IGxpdHRsZSBtYWdpYyB0byBhZGQgemVybyB0ZXJtaW5hdG9yIHRvIGVuZCBvZiBzdHJpbmdcbiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gcy5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCB2YWwpO1xuICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTtcblxuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsID09PSAwKSB7XG4gICAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7XG4gICAgfVxuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gSENSQ19TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7XG4gICAgICBpZiAocy5wZW5kaW5nICsgMiA+IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgfVxuICAgICAgaWYgKHMucGVuZGluZyArIDIgPD0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gOCkgJiAweGZmKTtcbiAgICAgICAgc3RybS5hZGxlciA9IDA7IC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgfVxuICB9XG4vLyNlbmRpZlxuXG4gIC8qIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9zc2libGUgKi9cbiAgaWYgKHMucGVuZGluZyAhPT0gMCkge1xuICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAvKiBTaW5jZSBhdmFpbF9vdXQgaXMgMCwgZGVmbGF0ZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiB3aXRoXG4gICAgICAgKiBtb3JlIG91dHB1dCBzcGFjZSwgYnV0IHBvc3NpYmx5IHdpdGggYm90aCBwZW5kaW5nIGFuZFxuICAgICAgICogYXZhaWxfaW4gZXF1YWwgdG8gemVyby4gVGhlcmUgd29uJ3QgYmUgYW55dGhpbmcgdG8gZG8sXG4gICAgICAgKiBidXQgdGhpcyBpcyBub3QgYW4gZXJyb3Igc2l0dWF0aW9uIHNvIG1ha2Ugc3VyZSB3ZVxuICAgICAgICogcmV0dXJuIE9LIGluc3RlYWQgb2YgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCBvZiBkZWZsYXRlOlxuICAgICAgICovXG4gICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgIHJldHVybiBaX09LO1xuICAgIH1cblxuICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZG8gYW5kIGF2b2lkIGR1cGxpY2F0ZSBjb25zZWN1dGl2ZVxuICAgICAqIGZsdXNoZXMuIEZvciByZXBlYXRlZCBhbmQgdXNlbGVzcyBjYWxscyB3aXRoIFpfRklOSVNILCB3ZSBrZWVwXG4gICAgICogcmV0dXJuaW5nIFpfU1RSRUFNX0VORCBpbnN0ZWFkIG9mIFpfQlVGX0VSUk9SLlxuICAgICAqL1xuICB9IGVsc2UgaWYgKHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgcmFuayhmbHVzaCkgPD0gcmFuayhvbGRfZmx1c2gpICYmXG4gICAgZmx1c2ggIT09IFpfRklOSVNIKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7XG4gIH1cblxuICAvKiBVc2VyIG11c3Qgbm90IHByb3ZpZGUgbW9yZSBpbnB1dCBhZnRlciB0aGUgZmlyc3QgRklOSVNIOiAqL1xuICBpZiAocy5zdGF0dXMgPT09IEZJTklTSF9TVEFURSAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7XG4gIH1cblxuICAvKiBTdGFydCBhIG5ldyBibG9jayBvciBjb250aW51ZSB0aGUgY3VycmVudCBvbmUuXG4gICAqL1xuICBpZiAoc3RybS5hdmFpbF9pbiAhPT0gMCB8fCBzLmxvb2thaGVhZCAhPT0gMCB8fFxuICAgIChmbHVzaCAhPT0gWl9OT19GTFVTSCAmJiBzLnN0YXR1cyAhPT0gRklOSVNIX1NUQVRFKSkge1xuICAgIHZhciBic3RhdGUgPSAocy5zdHJhdGVneSA9PT0gWl9IVUZGTUFOX09OTFkpID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6XG4gICAgICAocy5zdHJhdGVneSA9PT0gWl9STEUgPyBkZWZsYXRlX3JsZShzLCBmbHVzaCkgOlxuICAgICAgICBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmZ1bmMocywgZmx1c2gpKTtcblxuICAgIGlmIChic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX0RPTkUpIHtcbiAgICAgIHMuc3RhdHVzID0gRklOSVNIX1NUQVRFO1xuICAgIH1cbiAgICBpZiAoYnN0YXRlID09PSBCU19ORUVEX01PUkUgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCkge1xuICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgICAvKiBhdm9pZCBCVUZfRVJST1IgbmV4dCBjYWxsLCBzZWUgYWJvdmUgKi9cbiAgICAgIH1cbiAgICAgIHJldHVybiBaX09LO1xuICAgICAgLyogSWYgZmx1c2ggIT0gWl9OT19GTFVTSCAmJiBhdmFpbF9vdXQgPT0gMCwgdGhlIG5leHQgY2FsbFxuICAgICAgICogb2YgZGVmbGF0ZSBzaG91bGQgdXNlIHRoZSBzYW1lIGZsdXNoIHBhcmFtZXRlciB0byBtYWtlIHN1cmVcbiAgICAgICAqIHRoYXQgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLiBTbyB3ZSBkb24ndCBoYXZlIHRvIG91dHB1dCBhblxuICAgICAgICogZW1wdHkgYmxvY2sgaGVyZSwgdGhpcyB3aWxsIGJlIGRvbmUgYXQgbmV4dCBjYWxsLiBUaGlzIGFsc29cbiAgICAgICAqIGVuc3VyZXMgdGhhdCBmb3IgYSB2ZXJ5IHNtYWxsIG91dHB1dCBidWZmZXIsIHdlIGVtaXQgYXQgbW9zdFxuICAgICAgICogb25lIGVtcHR5IGJsb2NrLlxuICAgICAgICovXG4gICAgfVxuICAgIGlmIChic3RhdGUgPT09IEJTX0JMT0NLX0RPTkUpIHtcbiAgICAgIGlmIChmbHVzaCA9PT0gWl9QQVJUSUFMX0ZMVVNIKSB7XG4gICAgICAgIHRyZWVzLl90cl9hbGlnbihzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGZsdXNoICE9PSBaX0JMT0NLKSB7IC8qIEZVTExfRkxVU0ggb3IgU1lOQ19GTFVTSCAqL1xuXG4gICAgICAgIHRyZWVzLl90cl9zdG9yZWRfYmxvY2socywgMCwgMCwgZmFsc2UpO1xuICAgICAgICAvKiBGb3IgYSBmdWxsIGZsdXNoLCB0aGlzIGVtcHR5IGJsb2NrIHdpbGwgYmUgcmVjb2duaXplZFxuICAgICAgICAgKiBhcyBhIHNwZWNpYWwgbWFya2VyIGJ5IGluZmxhdGVfc3luYygpLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGZsdXNoID09PSBaX0ZVTExfRkxVU0gpIHtcbiAgICAgICAgICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi8gICAgICAgICAgICAgLyogZm9yZ2V0IGhpc3RvcnkgKi9cbiAgICAgICAgICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7XG5cbiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwO1xuICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7XG4gICAgICAgICAgICBzLmluc2VydCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHMubGFzdF9mbHVzaCA9IC0xOyAvKiBhdm9pZCBCVUZfRVJST1IgYXQgbmV4dCBjYWxsLCBzZWUgYWJvdmUgKi9cbiAgICAgICAgcmV0dXJuIFpfT0s7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0KHN0cm0tPmF2YWlsX291dCA+IDAsIFwiYnVnMlwiKTtcbiAgLy9pZiAoc3RybS5hdmFpbF9vdXQgPD0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJidWcyXCIpO31cblxuICBpZiAoZmx1c2ggIT09IFpfRklOSVNIKSB7IHJldHVybiBaX09LOyB9XG4gIGlmIChzLndyYXAgPD0gMCkgeyByZXR1cm4gWl9TVFJFQU1fRU5EOyB9XG5cbiAgLyogV3JpdGUgdGhlIHRyYWlsZXIgKi9cbiAgaWYgKHMud3JhcCA9PT0gMikge1xuICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiA4KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDE2KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDI0KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiA4KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDE2KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDI0KSAmIDB4ZmYpO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTtcbiAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyICYgMHhmZmZmKTtcbiAgfVxuXG4gIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gIC8qIElmIGF2YWlsX291dCBpcyB6ZXJvLCB0aGUgYXBwbGljYXRpb24gd2lsbCBjYWxsIGRlZmxhdGUgYWdhaW5cbiAgICogdG8gZmx1c2ggdGhlIHJlc3QuXG4gICAqL1xuICBpZiAocy53cmFwID4gMCkgeyBzLndyYXAgPSAtcy53cmFwOyB9XG4gIC8qIHdyaXRlIHRoZSB0cmFpbGVyIG9ubHkgb25jZSEgKi9cbiAgcmV0dXJuIHMucGVuZGluZyAhPT0gMCA/IFpfT0sgOiBaX1NUUkVBTV9FTkQ7XG59XG5cbmZ1bmN0aW9uIGRlZmxhdGVFbmQoc3RybSkge1xuICB2YXIgc3RhdHVzO1xuXG4gIGlmICghc3RybS8qPT0gWl9OVUxMKi8gfHwgIXN0cm0uc3RhdGUvKj09IFpfTlVMTCovKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgc3RhdHVzID0gc3RybS5zdGF0ZS5zdGF0dXM7XG4gIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEVYVFJBX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBOQU1FX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBIQ1JDX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBCVVNZX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEVcbiAgKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7XG4gIH1cblxuICBzdHJtLnN0YXRlID0gbnVsbDtcblxuICByZXR1cm4gc3RhdHVzID09PSBCVVNZX1NUQVRFID8gZXJyKHN0cm0sIFpfREFUQV9FUlJPUikgOiBaX09LO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEluaXRpYWxpemVzIHRoZSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGVcbiAqIHNlcXVlbmNlIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC5cbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkge1xuICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoO1xuXG4gIHZhciBzO1xuICB2YXIgc3RyLCBuO1xuICB2YXIgd3JhcDtcbiAgdmFyIGF2YWlsO1xuICB2YXIgbmV4dDtcbiAgdmFyIGlucHV0O1xuICB2YXIgdG1wRGljdDtcblxuICBpZiAoIXN0cm0vKj09IFpfTlVMTCovIHx8ICFzdHJtLnN0YXRlLyo9PSBaX05VTEwqLykge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHMgPSBzdHJtLnN0YXRlO1xuICB3cmFwID0gcy53cmFwO1xuXG4gIGlmICh3cmFwID09PSAyIHx8ICh3cmFwID09PSAxICYmIHMuc3RhdHVzICE9PSBJTklUX1NUQVRFKSB8fCBzLmxvb2thaGVhZCkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIC8qIHdoZW4gdXNpbmcgemxpYiB3cmFwcGVycywgY29tcHV0ZSBBZGxlci0zMiBmb3IgcHJvdmlkZWQgZGljdGlvbmFyeSAqL1xuICBpZiAod3JhcCA9PT0gMSkge1xuICAgIC8qIGFkbGVyMzIoc3RybS0+YWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOyAqL1xuICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApO1xuICB9XG5cbiAgcy53cmFwID0gMDsgICAvKiBhdm9pZCBjb21wdXRpbmcgQWRsZXItMzIgaW4gcmVhZF9idWYgKi9cblxuICAvKiBpZiBkaWN0aW9uYXJ5IHdvdWxkIGZpbGwgd2luZG93LCBqdXN0IHJlcGxhY2UgdGhlIGhpc3RvcnkgKi9cbiAgaWYgKGRpY3RMZW5ndGggPj0gcy53X3NpemUpIHtcbiAgICBpZiAod3JhcCA9PT0gMCkgeyAgICAgICAgICAgIC8qIGFscmVhZHkgZW1wdHkgb3RoZXJ3aXNlICovXG4gICAgICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi9cbiAgICAgIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcbiAgICAgIHMuc3Ryc3RhcnQgPSAwO1xuICAgICAgcy5ibG9ja19zdGFydCA9IDA7XG4gICAgICBzLmluc2VydCA9IDA7XG4gICAgfVxuICAgIC8qIHVzZSB0aGUgdGFpbCAqL1xuICAgIC8vIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5LnNsaWNlKGRpY3RMZW5ndGggLSBzLndfc2l6ZSk7XG4gICAgdG1wRGljdCA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplKTtcbiAgICB1dGlscy5hcnJheVNldCh0bXBEaWN0LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoIC0gcy53X3NpemUsIHMud19zaXplLCAwKTtcbiAgICBkaWN0aW9uYXJ5ID0gdG1wRGljdDtcbiAgICBkaWN0TGVuZ3RoID0gcy53X3NpemU7XG4gIH1cbiAgLyogaW5zZXJ0IGRpY3Rpb25hcnkgaW50byB3aW5kb3cgYW5kIGhhc2ggKi9cbiAgYXZhaWwgPSBzdHJtLmF2YWlsX2luO1xuICBuZXh0ID0gc3RybS5uZXh0X2luO1xuICBpbnB1dCA9IHN0cm0uaW5wdXQ7XG4gIHN0cm0uYXZhaWxfaW4gPSBkaWN0TGVuZ3RoO1xuICBzdHJtLm5leHRfaW4gPSAwO1xuICBzdHJtLmlucHV0ID0gZGljdGlvbmFyeTtcbiAgZmlsbF93aW5kb3cocyk7XG4gIHdoaWxlIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICBzdHIgPSBzLnN0cnN0YXJ0O1xuICAgIG4gPSBzLmxvb2thaGVhZCAtIChNSU5fTUFUQ0ggLSAxKTtcbiAgICBkbyB7XG4gICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7ICovXG4gICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzdHIgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcblxuICAgICAgcy5wcmV2W3N0ciAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcblxuICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyO1xuICAgICAgc3RyKys7XG4gICAgfSB3aGlsZSAoLS1uKTtcbiAgICBzLnN0cnN0YXJ0ID0gc3RyO1xuICAgIHMubG9va2FoZWFkID0gTUlOX01BVENIIC0gMTtcbiAgICBmaWxsX3dpbmRvdyhzKTtcbiAgfVxuICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkO1xuICBzLmJsb2NrX3N0YXJ0ID0gcy5zdHJzdGFydDtcbiAgcy5pbnNlcnQgPSBzLmxvb2thaGVhZDtcbiAgcy5sb29rYWhlYWQgPSAwO1xuICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7XG4gIHN0cm0ubmV4dF9pbiA9IG5leHQ7XG4gIHN0cm0uaW5wdXQgPSBpbnB1dDtcbiAgc3RybS5hdmFpbF9pbiA9IGF2YWlsO1xuICBzLndyYXAgPSB3cmFwO1xuICByZXR1cm4gWl9PSztcbn1cblxuXG5leHBvcnRzLmRlZmxhdGVJbml0ID0gZGVmbGF0ZUluaXQ7XG5leHBvcnRzLmRlZmxhdGVJbml0MiA9IGRlZmxhdGVJbml0MjtcbmV4cG9ydHMuZGVmbGF0ZVJlc2V0ID0gZGVmbGF0ZVJlc2V0O1xuZXhwb3J0cy5kZWZsYXRlUmVzZXRLZWVwID0gZGVmbGF0ZVJlc2V0S2VlcDtcbmV4cG9ydHMuZGVmbGF0ZVNldEhlYWRlciA9IGRlZmxhdGVTZXRIZWFkZXI7XG5leHBvcnRzLmRlZmxhdGUgPSBkZWZsYXRlO1xuZXhwb3J0cy5kZWZsYXRlRW5kID0gZGVmbGF0ZUVuZDtcbmV4cG9ydHMuZGVmbGF0ZVNldERpY3Rpb25hcnkgPSBkZWZsYXRlU2V0RGljdGlvbmFyeTtcbmV4cG9ydHMuZGVmbGF0ZUluZm8gPSAncGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSc7XG5cbi8qIE5vdCBpbXBsZW1lbnRlZFxuZXhwb3J0cy5kZWZsYXRlQm91bmQgPSBkZWZsYXRlQm91bmQ7XG5leHBvcnRzLmRlZmxhdGVDb3B5ID0gZGVmbGF0ZUNvcHk7XG5leHBvcnRzLmRlZmxhdGVQYXJhbXMgPSBkZWZsYXRlUGFyYW1zO1xuZXhwb3J0cy5kZWZsYXRlUGVuZGluZyA9IGRlZmxhdGVQZW5kaW5nO1xuZXhwb3J0cy5kZWZsYXRlUHJpbWUgPSBkZWZsYXRlUHJpbWU7XG5leHBvcnRzLmRlZmxhdGVUdW5lID0gZGVmbGF0ZVR1bmU7XG4qL1xuXG59LHtcIi4uL3V0aWxzL2NvbW1vblwiOjMwNCxcIi4vYWRsZXIzMlwiOjMwNixcIi4vY3JjMzJcIjozMDgsXCIuL21lc3NhZ2VzXCI6MzE0LFwiLi90cmVlc1wiOjMxNX1dLDMxMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuZnVuY3Rpb24gR1poZWFkZXIoKSB7XG4gIC8qIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHQgKi9cbiAgdGhpcy50ZXh0ICAgICAgID0gMDtcbiAgLyogbW9kaWZpY2F0aW9uIHRpbWUgKi9cbiAgdGhpcy50aW1lICAgICAgID0gMDtcbiAgLyogZXh0cmEgZmxhZ3MgKG5vdCB1c2VkIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKi9cbiAgdGhpcy54ZmxhZ3MgICAgID0gMDtcbiAgLyogb3BlcmF0aW5nIHN5c3RlbSAqL1xuICB0aGlzLm9zICAgICAgICAgPSAwO1xuICAvKiBwb2ludGVyIHRvIGV4dHJhIGZpZWxkIG9yIFpfTlVMTCBpZiBub25lICovXG4gIHRoaXMuZXh0cmEgICAgICA9IG51bGw7XG4gIC8qIGV4dHJhIGZpZWxkIGxlbmd0aCAodmFsaWQgaWYgZXh0cmEgIT0gWl9OVUxMKSAqL1xuICB0aGlzLmV4dHJhX2xlbiAgPSAwOyAvLyBBY3R1YWxseSwgd2UgZG9uJ3QgbmVlZCBpdCBpbiBKUyxcbiAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGxlYXZlIGZvciBmZXcgY29kZSBtb2RpZmljYXRpb25zXG5cbiAgLy9cbiAgLy8gU2V0dXAgbGltaXRzIGlzIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSBpbiBqcyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeVxuICAvLyBmb3IgaW5mbGF0ZSB1c2UgY29uc3RhbnQgbGltaXQgaW4gNjU1MzYgYnl0ZXNcbiAgLy9cblxuICAvKiBzcGFjZSBhdCBleHRyYSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqL1xuICAvLyB0aGlzLmV4dHJhX21heCAgPSAwO1xuICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBmaWxlIG5hbWUgb3IgWl9OVUxMICovXG4gIHRoaXMubmFtZSAgICAgICA9ICcnO1xuICAvKiBzcGFjZSBhdCBuYW1lIChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovXG4gIC8vIHRoaXMubmFtZV9tYXggICA9IDA7XG4gIC8qIHBvaW50ZXIgdG8gemVyby10ZXJtaW5hdGVkIGNvbW1lbnQgb3IgWl9OVUxMICovXG4gIHRoaXMuY29tbWVudCAgICA9ICcnO1xuICAvKiBzcGFjZSBhdCBjb21tZW50IChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovXG4gIC8vIHRoaXMuY29tbV9tYXggICA9IDA7XG4gIC8qIHRydWUgaWYgdGhlcmUgd2FzIG9yIHdpbGwgYmUgYSBoZWFkZXIgY3JjICovXG4gIHRoaXMuaGNyYyAgICAgICA9IDA7XG4gIC8qIHRydWUgd2hlbiBkb25lIHJlYWRpbmcgZ3ppcCBoZWFkZXIgKG5vdCB1c2VkIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKi9cbiAgdGhpcy5kb25lICAgICAgID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gR1poZWFkZXI7XG5cbn0se31dLDMxMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuLy8gU2VlIHN0YXRlIGRlZnMgZnJvbSBpbmZsYXRlLmpzXG52YXIgQkFEID0gMzA7ICAgICAgIC8qIGdvdCBhIGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciBUWVBFID0gMTI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAqL1xuXG4vKlxuICAgRGVjb2RlIGxpdGVyYWwsIGxlbmd0aCwgYW5kIGRpc3RhbmNlIGNvZGVzIGFuZCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZ1xuICAgbGl0ZXJhbCBhbmQgbWF0Y2ggYnl0ZXMgdW50aWwgZWl0aGVyIG5vdCBlbm91Z2ggaW5wdXQgb3Igb3V0cHV0IGlzXG4gICBhdmFpbGFibGUsIGFuIGVuZC1vZi1ibG9jayBpcyBlbmNvdW50ZXJlZCwgb3IgYSBkYXRhIGVycm9yIGlzIGVuY291bnRlcmVkLlxuICAgV2hlbiBsYXJnZSBlbm91Z2ggaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBzdXBwbGllZCB0byBpbmZsYXRlKCksIGZvclxuICAgZXhhbXBsZSwgYSAxNksgaW5wdXQgYnVmZmVyIGFuZCBhIDY0SyBvdXRwdXQgYnVmZmVyLCBtb3JlIHRoYW4gOTUlIG9mIHRoZVxuICAgaW5mbGF0ZSBleGVjdXRpb24gdGltZSBpcyBzcGVudCBpbiB0aGlzIHJvdXRpbmUuXG5cbiAgIEVudHJ5IGFzc3VtcHRpb25zOlxuXG4gICAgICAgIHN0YXRlLm1vZGUgPT09IExFTlxuICAgICAgICBzdHJtLmF2YWlsX2luID49IDZcbiAgICAgICAgc3RybS5hdmFpbF9vdXQgPj0gMjU4XG4gICAgICAgIHN0YXJ0ID49IHN0cm0uYXZhaWxfb3V0XG4gICAgICAgIHN0YXRlLmJpdHMgPCA4XG5cbiAgIE9uIHJldHVybiwgc3RhdGUubW9kZSBpcyBvbmUgb2Y6XG5cbiAgICAgICAgTEVOIC0tIHJhbiBvdXQgb2YgZW5vdWdoIG91dHB1dCBzcGFjZSBvciBlbm91Z2ggYXZhaWxhYmxlIGlucHV0XG4gICAgICAgIFRZUEUgLS0gcmVhY2hlZCBlbmQgb2YgYmxvY2sgY29kZSwgaW5mbGF0ZSgpIHRvIGludGVycHJldCBuZXh0IGJsb2NrXG4gICAgICAgIEJBRCAtLSBlcnJvciBpbiBibG9jayBkYXRhXG5cbiAgIE5vdGVzOlxuXG4gICAgLSBUaGUgbWF4aW11bSBpbnB1dCBiaXRzIHVzZWQgYnkgYSBsZW5ndGgvZGlzdGFuY2UgcGFpciBpcyAxNSBiaXRzIGZvciB0aGVcbiAgICAgIGxlbmd0aCBjb2RlLCA1IGJpdHMgZm9yIHRoZSBsZW5ndGggZXh0cmEsIDE1IGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBjb2RlLFxuICAgICAgYW5kIDEzIGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBleHRyYS4gIFRoaXMgdG90YWxzIDQ4IGJpdHMsIG9yIHNpeCBieXRlcy5cbiAgICAgIFRoZXJlZm9yZSBpZiBzdHJtLmF2YWlsX2luID49IDYsIHRoZW4gdGhlcmUgaXMgZW5vdWdoIGlucHV0IHRvIGF2b2lkXG4gICAgICBjaGVja2luZyBmb3IgYXZhaWxhYmxlIGlucHV0IHdoaWxlIGRlY29kaW5nLlxuXG4gICAgLSBUaGUgbWF4aW11bSBieXRlcyB0aGF0IGEgc2luZ2xlIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGNhbiBvdXRwdXQgaXMgMjU4XG4gICAgICBieXRlcywgd2hpY2ggaXMgdGhlIG1heGltdW0gbGVuZ3RoIHRoYXQgY2FuIGJlIGNvZGVkLiAgaW5mbGF0ZV9mYXN0KClcbiAgICAgIHJlcXVpcmVzIHN0cm0uYXZhaWxfb3V0ID49IDI1OCBmb3IgZWFjaCBsb29wIHRvIGF2b2lkIGNoZWNraW5nIGZvclxuICAgICAgb3V0cHV0IHNwYWNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkge1xuICB2YXIgc3RhdGU7XG4gIHZhciBfaW47ICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmlucHV0ICovXG4gIHZhciBsYXN0OyAgICAgICAgICAgICAgICAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi9cbiAgdmFyIF9vdXQ7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0ub3V0cHV0ICovXG4gIHZhciBiZWc7ICAgICAgICAgICAgICAgICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0ub3V0cHV0ICovXG4gIHZhciBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi9cbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gIHZhciBkbWF4OyAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGRpc3RhbmNlIGZyb20gemxpYiBoZWFkZXIgKi9cbi8vI2VuZGlmXG4gIHZhciB3c2l6ZTsgICAgICAgICAgICAgICAgICAvKiB3aW5kb3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi9cbiAgdmFyIHdoYXZlOyAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi9cbiAgdmFyIHduZXh0OyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqL1xuICAvLyBVc2UgYHNfd2luZG93YCBpbnN0ZWFkIGB3aW5kb3dgLCBhdm9pZCBjb25mbGljdCB3aXRoIGluc3RydW1lbnRhdGlvbiB0b29sc1xuICB2YXIgc193aW5kb3c7ICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiB3c2l6ZSAhPSAwICovXG4gIHZhciBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmhvbGQgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uYml0cyAqL1xuICB2YXIgbGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5sZW5jb2RlICovXG4gIHZhciBkY29kZTsgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmRpc3Rjb2RlICovXG4gIHZhciBsbWFzazsgICAgICAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBsZW5ndGggY29kZXMgKi9cbiAgdmFyIGRtYXNrOyAgICAgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNvZGVzICovXG4gIHZhciBoZXJlOyAgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQgdGFibGUgZW50cnkgKi9cbiAgdmFyIG9wOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0aW9uLCBleHRyYSBiaXRzLCBvciAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2luZG93IGJ5dGVzIHRvIGNvcHkgKi9cbiAgdmFyIGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCwgdW51c2VkIGJ5dGVzICovXG4gIHZhciBkaXN0OyAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBkaXN0YW5jZSAqL1xuICB2YXIgZnJvbTsgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovXG4gIHZhciBmcm9tX3NvdXJjZTtcblxuXG4gIHZhciBpbnB1dCwgb3V0cHV0OyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG5cbiAgLyogY29weSBzdGF0ZSB0byBsb2NhbCB2YXJpYWJsZXMgKi9cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICAvL2hlcmUgPSBzdGF0ZS5oZXJlO1xuICBfaW4gPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7XG4gIF9vdXQgPSBzdHJtLm5leHRfb3V0O1xuICBvdXRwdXQgPSBzdHJtLm91dHB1dDtcbiAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTtcbiAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7XG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICBkbWF4ID0gc3RhdGUuZG1heDtcbi8vI2VuZGlmXG4gIHdzaXplID0gc3RhdGUud3NpemU7XG4gIHdoYXZlID0gc3RhdGUud2hhdmU7XG4gIHduZXh0ID0gc3RhdGUud25leHQ7XG4gIHNfd2luZG93ID0gc3RhdGUud2luZG93O1xuICBob2xkID0gc3RhdGUuaG9sZDtcbiAgYml0cyA9IHN0YXRlLmJpdHM7XG4gIGxjb2RlID0gc3RhdGUubGVuY29kZTtcbiAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTtcbiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7XG4gIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTtcblxuXG4gIC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxvY2sgb3Igbm90IGVub3VnaFxuICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqL1xuXG4gIHRvcDpcbiAgZG8ge1xuICAgIGlmIChiaXRzIDwgMTUpIHtcbiAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICBiaXRzICs9IDg7XG4gICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgYml0cyArPSA4O1xuICAgIH1cblxuICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdO1xuXG4gICAgZG9sZW46XG4gICAgZm9yICg7OykgeyAvLyBHb3RvIGVtdWxhdGlvblxuICAgICAgb3AgPSBoZXJlID4+PiAyNC8qaGVyZS5iaXRzKi87XG4gICAgICBob2xkID4+Pj0gb3A7XG4gICAgICBiaXRzIC09IG9wO1xuICAgICAgb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZi8qaGVyZS5vcCovO1xuICAgICAgaWYgKG9wID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovXG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqL1xuICAgICAgICBsZW4gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICBpZiAob3ApIHtcbiAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW4gKz0gaG9sZCAmICgoMSA8PCBvcCkgLSAxKTtcbiAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBsZW4pKTtcbiAgICAgICAgaWYgKGJpdHMgPCAxNSkge1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdO1xuXG4gICAgICAgIGRvZGlzdDpcbiAgICAgICAgZm9yICg7OykgeyAvLyBnb3RvIGVtdWxhdGlvblxuICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovO1xuICAgICAgICAgIGhvbGQgPj4+PSBvcDtcbiAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLztcblxuICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhc2UgKi9cbiAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkge1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpO1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBkaXN0KSk7XG4gICAgICAgICAgICBvcCA9IF9vdXQgLSBiZWc7ICAgICAgICAgICAgICAgIC8qIG1heCBkaXN0YW5jZSBpbiBvdXRwdXQgKi9cbiAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7ICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFjayBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgICAgICB9XG5cbi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYXVsdHMsXG4vLyBkb24ndCBlbmFibGUgaXQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5XG4vLyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlJcbi8vICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkge1xuLy8gICAgICAgICAgICAgICAgICBkbyB7XG4vLyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwO1xuLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7XG4vLyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRvcDtcbi8vICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlO1xuLy8gICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IDA7XG4vLyAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wID4gd2hhdmUpO1xuLy8gICAgICAgICAgICAgICAgaWYgKG9wID09PSAwKSB7XG4vLyAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDtcbi8vICAgICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4vLyAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTtcbi8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wO1xuLy8gICAgICAgICAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcm9tID0gMDsgLy8gd2luZG93IGluZGV4XG4gICAgICAgICAgICAgIGZyb21fc291cmNlID0gc193aW5kb3c7XG4gICAgICAgICAgICAgIGlmICh3bmV4dCA9PT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAqL1xuICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDtcbiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gd2luZG93ICovXG4gICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7XG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHduZXh0IDwgb3ApIHsgICAgICAvKiB3cmFwIGFyb3VuZCB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplICsgd25leHQgLSBvcDtcbiAgICAgICAgICAgICAgICBvcCAtPSB3bmV4dDtcbiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gZW5kIG9mIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSAwO1xuICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7ICAvKiBzb21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovXG4gICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7XG4gICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgICAgICAvKiByZXN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogY29udGlndW91cyBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHduZXh0IC0gb3A7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGxlbiAtPSAzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqL1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGxlbiAtPSAzO1xuICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTtcbiAgICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgeyAgICAgICAgICAvKiAybmQgbGV2ZWwgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICAgICAgaGVyZSA9IGRjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgICAgICBjb250aW51ZSBkb2Rpc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSBcImNvbnRpbnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7ICAgICAgICAgICAgICAvKiAybmQgbGV2ZWwgbGVuZ3RoIGNvZGUgKi9cbiAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgIGNvbnRpbnVlIGRvbGVuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAob3AgJiAzMikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1ibG9jayAqL1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xcblwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhayB0b3A7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWsgdG9wO1xuICAgICAgfVxuXG4gICAgICBicmVhazsgLy8gbmVlZCB0byBlbXVsYXRlIGdvdG8gdmlhIFwiY29udGludWVcIlxuICAgIH1cbiAgfSB3aGlsZSAoX2luIDwgbGFzdCAmJiBfb3V0IDwgZW5kKTtcblxuICAvKiByZXR1cm4gdW51c2VkIGJ5dGVzIChvbiBlbnRyeSwgYml0cyA8IDgsIHNvIGluIHdvbid0IGdvIHRvbyBmYXIgYmFjaykgKi9cbiAgbGVuID0gYml0cyA+PiAzO1xuICBfaW4gLT0gbGVuO1xuICBiaXRzIC09IGxlbiA8PCAzO1xuICBob2xkICY9ICgxIDw8IGJpdHMpIC0gMTtcblxuICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJldHVybiAqL1xuICBzdHJtLm5leHRfaW4gPSBfaW47XG4gIHN0cm0ubmV4dF9vdXQgPSBfb3V0O1xuICBzdHJtLmF2YWlsX2luID0gKF9pbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBfaW4pIDogNSAtIChfaW4gLSBsYXN0KSk7XG4gIHN0cm0uYXZhaWxfb3V0ID0gKF9vdXQgPCBlbmQgPyAyNTcgKyAoZW5kIC0gX291dCkgOiAyNTcgLSAoX291dCAtIGVuZCkpO1xuICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgc3RhdGUuYml0cyA9IGJpdHM7XG4gIHJldHVybjtcbn07XG5cbn0se31dLDMxMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxudmFyIHV0aWxzICAgICAgICAgPSBfZGVyZXFfKCcuLi91dGlscy9jb21tb24nKTtcbnZhciBhZGxlcjMyICAgICAgID0gX2RlcmVxXygnLi9hZGxlcjMyJyk7XG52YXIgY3JjMzIgICAgICAgICA9IF9kZXJlcV8oJy4vY3JjMzInKTtcbnZhciBpbmZsYXRlX2Zhc3QgID0gX2RlcmVxXygnLi9pbmZmYXN0Jyk7XG52YXIgaW5mbGF0ZV90YWJsZSA9IF9kZXJlcV8oJy4vaW5mdHJlZXMnKTtcblxudmFyIENPREVTID0gMDtcbnZhciBMRU5TID0gMTtcbnZhciBESVNUUyA9IDI7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbi8vdmFyIFpfTk9fRkxVU0ggICAgICA9IDA7XG4vL3ZhciBaX1BBUlRJQUxfRkxVU0ggPSAxO1xuLy92YXIgWl9TWU5DX0ZMVVNIICAgID0gMjtcbi8vdmFyIFpfRlVMTF9GTFVTSCAgICA9IDM7XG52YXIgWl9GSU5JU0ggICAgICAgID0gNDtcbnZhciBaX0JMT0NLICAgICAgICAgPSA1O1xudmFyIFpfVFJFRVMgICAgICAgICA9IDY7XG5cblxuLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlc1xuICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLlxuICovXG52YXIgWl9PSyAgICAgICAgICAgID0gMDtcbnZhciBaX1NUUkVBTV9FTkQgICAgPSAxO1xudmFyIFpfTkVFRF9ESUNUICAgICA9IDI7XG4vL3ZhciBaX0VSUk5PICAgICAgICAgPSAtMTtcbnZhciBaX1NUUkVBTV9FUlJPUiAgPSAtMjtcbnZhciBaX0RBVEFfRVJST1IgICAgPSAtMztcbnZhciBaX01FTV9FUlJPUiAgICAgPSAtNDtcbnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTtcbi8vdmFyIFpfVkVSU0lPTl9FUlJPUiA9IC02O1xuXG4vKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbnZhciBaX0RFRkxBVEVEICA9IDg7XG5cblxuLyogU1RBVEVTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxudmFyICAgIEhFQUQgPSAxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtYWdpYyBoZWFkZXIgKi9cbnZhciAgICBGTEFHUyA9IDI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgbWV0aG9kIGFuZCBmbGFncyAoZ3ppcCkgKi9cbnZhciAgICBUSU1FID0gMzsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbW9kaWZpY2F0aW9uIHRpbWUgKGd6aXApICovXG52YXIgICAgT1MgPSA0OyAgICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGZsYWdzIGFuZCBvcGVyYXRpbmcgc3lzdGVtIChnemlwKSAqL1xudmFyICAgIEVYTEVOID0gNTsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBsZW5ndGggKGd6aXApICovXG52YXIgICAgRVhUUkEgPSA2OyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGJ5dGVzIChnemlwKSAqL1xudmFyICAgIE5BTUUgPSA3OyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgZmlsZSBuYW1lIChnemlwKSAqL1xudmFyICAgIENPTU1FTlQgPSA4OyAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgY29tbWVudCAoZ3ppcCkgKi9cbnZhciAgICBIQ1JDID0gOTsgICAgICAgLyogaTogd2FpdGluZyBmb3IgaGVhZGVyIGNyYyAoZ3ppcCkgKi9cbnZhciAgICBESUNUSUQgPSAxMDsgICAgLyogaTogd2FpdGluZyBmb3IgZGljdGlvbmFyeSBjaGVjayB2YWx1ZSAqL1xudmFyICAgIERJQ1QgPSAxMTsgICAgICAvKiB3YWl0aW5nIGZvciBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgKi9cbnZhciAgICAgICAgVFlQRSA9IDEyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHR5cGUgYml0cywgaW5jbHVkaW5nIGxhc3QtZmxhZyBiaXQgKi9cbnZhciAgICAgICAgVFlQRURPID0gMTM7ICAgIC8qIGk6IHNhbWUsIGJ1dCBza2lwIGNoZWNrIHRvIGV4aXQgaW5mbGF0ZSBvbiBuZXcgYmxvY2sgKi9cbnZhciAgICAgICAgU1RPUkVEID0gMTQ7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovXG52YXIgICAgICAgIENPUFlfID0gMTU7ICAgICAvKiBpL286IHNhbWUgYXMgQ09QWSBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqL1xudmFyICAgICAgICBDT1BZID0gMTY7ICAgICAgLyogaS9vOiB3YWl0aW5nIGZvciBpbnB1dCBvciBvdXRwdXQgdG8gY29weSBzdG9yZWQgYmxvY2sgKi9cbnZhciAgICAgICAgVEFCTEUgPSAxNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqL1xudmFyICAgICAgICBMRU5MRU5TID0gMTg7ICAgLyogaTogd2FpdGluZyBmb3IgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovXG52YXIgICAgICAgIENPREVMRU5TID0gMTk7ICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0IGFuZCBkaXN0YW5jZSBjb2RlIGxlbmd0aHMgKi9cbnZhciAgICAgICAgICAgIExFTl8gPSAyMDsgICAgICAvKiBpOiBzYW1lIGFzIExFTiBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqL1xudmFyICAgICAgICAgICAgTEVOID0gMjE7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGxlbmd0aC9saXQvZW9iIGNvZGUgKi9cbnZhciAgICAgICAgICAgIExFTkVYVCA9IDIyOyAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGggZXh0cmEgYml0cyAqL1xudmFyICAgICAgICAgICAgRElTVCA9IDIzOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi9cbnZhciAgICAgICAgICAgIERJU1RFWFQgPSAyNDsgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBleHRyYSBiaXRzICovXG52YXIgICAgICAgICAgICBNQVRDSCA9IDI1OyAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIGNvcHkgc3RyaW5nICovXG52YXIgICAgICAgICAgICBMSVQgPSAyNjsgICAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIHdyaXRlIGxpdGVyYWwgKi9cbnZhciAgICBDSEVDSyA9IDI3OyAgICAgLyogaTogd2FpdGluZyBmb3IgMzItYml0IGNoZWNrIHZhbHVlICovXG52YXIgICAgTEVOR1RIID0gMjg7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBsZW5ndGggKGd6aXApICovXG52YXIgICAgRE9ORSA9IDI5OyAgICAgIC8qIGZpbmlzaGVkIGNoZWNrLCBkb25lIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgQkFEID0gMzA7ICAgICAgIC8qIGdvdCBhIGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciAgICBNRU0gPSAzMTsgICAgICAgLyogZ290IGFuIGluZmxhdGUoKSBtZW1vcnkgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciAgICBTWU5DID0gMzI7ICAgICAgLyogbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIGJ5dGVzIHRvIHJlc3RhcnQgaW5mbGF0ZSgpICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxuXG52YXIgRU5PVUdIX0xFTlMgPSA4NTI7XG52YXIgRU5PVUdIX0RJU1RTID0gNTkyO1xuLy92YXIgRU5PVUdIID0gIChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpO1xuXG52YXIgTUFYX1dCSVRTID0gMTU7XG4vKiAzMksgTFo3NyB3aW5kb3cgKi9cbnZhciBERUZfV0JJVFMgPSBNQVhfV0JJVFM7XG5cblxuZnVuY3Rpb24genN3YXAzMihxKSB7XG4gIHJldHVybiAgKCgocSA+Pj4gMjQpICYgMHhmZikgK1xuICAgICAgICAgICgocSA+Pj4gOCkgJiAweGZmMDApICtcbiAgICAgICAgICAoKHEgJiAweGZmMDApIDw8IDgpICtcbiAgICAgICAgICAoKHEgJiAweGZmKSA8PCAyNCkpO1xufVxuXG5cbmZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHtcbiAgdGhpcy5tb2RlID0gMDsgICAgICAgICAgICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi9cbiAgdGhpcy5sYXN0ID0gZmFsc2U7ICAgICAgICAgIC8qIHRydWUgaWYgcHJvY2Vzc2luZyBsYXN0IGJsb2NrICovXG4gIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovXG4gIHRoaXMuaGF2ZWRpY3QgPSBmYWxzZTsgICAgICAvKiB0cnVlIGlmIGRpY3Rpb25hcnkgcHJvdmlkZWQgKi9cbiAgdGhpcy5mbGFncyA9IDA7ICAgICAgICAgICAgIC8qIGd6aXAgaGVhZGVyIG1ldGhvZCBhbmQgZmxhZ3MgKDAgaWYgemxpYikgKi9cbiAgdGhpcy5kbWF4ID0gMDsgICAgICAgICAgICAgIC8qIHpsaWIgaGVhZGVyIG1heCBkaXN0YW5jZSAoSU5GTEFURV9TVFJJQ1QpICovXG4gIHRoaXMuY2hlY2sgPSAwOyAgICAgICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBjaGVjayB2YWx1ZSAqL1xuICB0aGlzLnRvdGFsID0gMDsgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2Ygb3V0cHV0IGNvdW50ICovXG4gIC8vIFRPRE86IG1heSBiZSB7fVxuICB0aGlzLmhlYWQgPSBudWxsOyAgICAgICAgICAgLyogd2hlcmUgdG8gc2F2ZSBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiAqL1xuXG4gIC8qIHNsaWRpbmcgd2luZG93ICovXG4gIHRoaXMud2JpdHMgPSAwOyAgICAgICAgICAgICAvKiBsb2cgYmFzZSAyIG9mIHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSAqL1xuICB0aGlzLndzaXplID0gMDsgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovXG4gIHRoaXMud2hhdmUgPSAwOyAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovXG4gIHRoaXMud25leHQgPSAwOyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi9cbiAgdGhpcy53aW5kb3cgPSBudWxsOyAgICAgICAgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgbmVlZGVkICovXG5cbiAgLyogYml0IGFjY3VtdWxhdG9yICovXG4gIHRoaXMuaG9sZCA9IDA7ICAgICAgICAgICAgICAvKiBpbnB1dCBiaXQgYWNjdW11bGF0b3IgKi9cbiAgdGhpcy5iaXRzID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIFwiaW5cIiAqL1xuXG4gIC8qIGZvciBzdHJpbmcgYW5kIHN0b3JlZCBibG9jayBjb3B5aW5nICovXG4gIHRoaXMubGVuZ3RoID0gMDsgICAgICAgICAgICAvKiBsaXRlcmFsIG9yIGxlbmd0aCBvZiBkYXRhIHRvIGNvcHkgKi9cbiAgdGhpcy5vZmZzZXQgPSAwOyAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgdG8gY29weSBzdHJpbmcgZnJvbSAqL1xuXG4gIC8qIGZvciB0YWJsZSBhbmQgY29kZSBkZWNvZGluZyAqL1xuICB0aGlzLmV4dHJhID0gMDsgICAgICAgICAgICAgLyogZXh0cmEgYml0cyBuZWVkZWQgKi9cblxuICAvKiBmaXhlZCBhbmQgZHluYW1pYyBjb2RlIHRhYmxlcyAqL1xuICB0aGlzLmxlbmNvZGUgPSBudWxsOyAgICAgICAgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29kZXMgKi9cbiAgdGhpcy5kaXN0Y29kZSA9IG51bGw7ICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzICovXG4gIHRoaXMubGVuYml0cyA9IDA7ICAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBsZW5jb2RlICovXG4gIHRoaXMuZGlzdGJpdHMgPSAwOyAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBkaXN0Y29kZSAqL1xuXG4gIC8qIGR5bmFtaWMgdGFibGUgYnVpbGRpbmcgKi9cbiAgdGhpcy5uY29kZSA9IDA7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi9cbiAgdGhpcy5ubGVuID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gIHRoaXMubmRpc3QgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG4gIHRoaXMuaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGhzIGluIGxlbnNbXSAqL1xuICB0aGlzLm5leHQgPSBudWxsOyAgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gY29kZXNbXSAqL1xuXG4gIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgY29kZSBsZW5ndGhzICovXG4gIHRoaXMud29yayA9IG5ldyB1dGlscy5CdWYxNigyODgpOyAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi9cblxuICAvKlxuICAgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHBvaW50ZXJzIGluIGpzLCB3ZSB1c2UgbGVuY29kZSBhbmQgZGlzdGNvZGUgZGlyZWN0bHlcbiAgIGFzIGJ1ZmZlcnMgc28gd2UgZG9uJ3QgbmVlZCBjb2Rlc1xuICAqL1xuICAvL3RoaXMuY29kZXMgPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIKTsgICAgICAgLyogc3BhY2UgZm9yIGNvZGUgdGFibGVzICovXG4gIHRoaXMubGVuZHluID0gbnVsbDsgICAgICAgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgZm9yIGxlbmd0aC9saXRlcmFsIGNvZGVzIChKUyBzcGVjaWZpYykgKi9cbiAgdGhpcy5kaXN0ZHluID0gbnVsbDsgICAgICAgICAgICAgLyogZHluYW1pYyB0YWJsZSBmb3IgZGlzdGFuY2UgY29kZXMgKEpTIHNwZWNpZmljKSAqL1xuICB0aGlzLnNhbmUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBpZiBmYWxzZSwgYWxsb3cgaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyICovXG4gIHRoaXMuYmFjayA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgYmFjayBvZiBsYXN0IHVucHJvY2Vzc2VkIGxlbmd0aC9saXQgKi9cbiAgdGhpcy53YXMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbCBsZW5ndGggb2YgbWF0Y2ggKi9cbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7XG4gIHZhciBzdGF0ZTtcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gc3RhdGUudG90YWwgPSAwO1xuICBzdHJtLm1zZyA9ICcnOyAvKlpfTlVMTCovXG4gIGlmIChzdGF0ZS53cmFwKSB7ICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi9cbiAgICBzdHJtLmFkbGVyID0gc3RhdGUud3JhcCAmIDE7XG4gIH1cbiAgc3RhdGUubW9kZSA9IEhFQUQ7XG4gIHN0YXRlLmxhc3QgPSAwO1xuICBzdGF0ZS5oYXZlZGljdCA9IDA7XG4gIHN0YXRlLmRtYXggPSAzMjc2ODtcbiAgc3RhdGUuaGVhZCA9IG51bGwvKlpfTlVMTCovO1xuICBzdGF0ZS5ob2xkID0gMDtcbiAgc3RhdGUuYml0cyA9IDA7XG4gIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUubmV4dCA9IHN0YXRlLmNvZGVzO1xuICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTtcbiAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9ESVNUUyk7XG5cbiAgc3RhdGUuc2FuZSA9IDE7XG4gIHN0YXRlLmJhY2sgPSAtMTtcbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiByZXNldFxcblwiKSk7XG4gIHJldHVybiBaX09LO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlUmVzZXQoc3RybSkge1xuICB2YXIgc3RhdGU7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIHN0YXRlLndzaXplID0gMDtcbiAgc3RhdGUud2hhdmUgPSAwO1xuICBzdGF0ZS53bmV4dCA9IDA7XG4gIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pO1xuXG59XG5cbmZ1bmN0aW9uIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykge1xuICB2YXIgd3JhcDtcbiAgdmFyIHN0YXRlO1xuXG4gIC8qIGdldCB0aGUgc3RhdGUgKi9cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG5cbiAgLyogZXh0cmFjdCB3cmFwIHJlcXVlc3QgZnJvbSB3aW5kb3dCaXRzIHBhcmFtZXRlciAqL1xuICBpZiAod2luZG93Qml0cyA8IDApIHtcbiAgICB3cmFwID0gMDtcbiAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7XG4gIH1cbiAgZWxzZSB7XG4gICAgd3JhcCA9ICh3aW5kb3dCaXRzID4+IDQpICsgMTtcbiAgICBpZiAod2luZG93Qml0cyA8IDQ4KSB7XG4gICAgICB3aW5kb3dCaXRzICY9IDE1O1xuICAgIH1cbiAgfVxuXG4gIC8qIHNldCBudW1iZXIgb2Ygd2luZG93IGJpdHMsIGZyZWUgd2luZG93IGlmIGRpZmZlcmVudCAqL1xuICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7XG4gICAgc3RhdGUud2luZG93ID0gbnVsbDtcbiAgfVxuXG4gIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmVzZXQgdGhlIHJlc3Qgb2YgaXQgKi9cbiAgc3RhdGUud3JhcCA9IHdyYXA7XG4gIHN0YXRlLndiaXRzID0gd2luZG93Qml0cztcbiAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIHtcbiAgdmFyIHJldDtcbiAgdmFyIHN0YXRlO1xuXG4gIGlmICghc3RybSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgLy9zdHJtLm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovXG5cbiAgc3RhdGUgPSBuZXcgSW5mbGF0ZVN0YXRlKCk7XG5cbiAgLy9pZiAoc3RhdGUgPT09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6IGFsbG9jYXRlZFxcblwiKSk7XG4gIHN0cm0uc3RhdGUgPSBzdGF0ZTtcbiAgc3RhdGUud2luZG93ID0gbnVsbC8qWl9OVUxMKi87XG4gIHJldCA9IGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cyk7XG4gIGlmIChyZXQgIT09IFpfT0spIHtcbiAgICBzdHJtLnN0YXRlID0gbnVsbC8qWl9OVUxMKi87XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUluaXQoc3RybSkge1xuICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7XG59XG5cblxuLypcbiBSZXR1cm4gc3RhdGUgd2l0aCBsZW5ndGggYW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXggc2l6ZXMgc2V0IHRvXG4gZml4ZWQgY29kZSBkZWNvZGluZy4gIE5vcm1hbGx5IHRoaXMgcmV0dXJucyBmaXhlZCB0YWJsZXMgZnJvbSBpbmZmaXhlZC5oLlxuIElmIEJVSUxERklYRUQgaXMgZGVmaW5lZCwgdGhlbiBpbnN0ZWFkIHRoaXMgcm91dGluZSBidWlsZHMgdGhlIHRhYmxlcyB0aGVcbiBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgcmV0dXJucyB0aG9zZSB0YWJsZXMgdGhlIGZpcnN0IHRpbWUgYW5kXG4gdGhlcmVhZnRlci4gIFRoaXMgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgY29kZSBieSBhYm91dCAySyBieXRlcywgaW5cbiBleGNoYW5nZSBmb3IgYSBsaXR0bGUgZXhlY3V0aW9uIHRpbWUuICBIb3dldmVyLCBCVUlMREZJWEVEIHNob3VsZCBub3QgYmVcbiB1c2VkIGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSByZXdyaXRpbmcgb2YgdGhlIHRhYmxlcyBhbmQgdmlyZ2luXG4gbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS5cbiAqL1xudmFyIHZpcmdpbiA9IHRydWU7XG5cbnZhciBsZW5maXgsIGRpc3RmaXg7IC8vIFdlIGhhdmUgbm8gcG9pbnRlcnMgaW4gSlMsIHNvIGtlZXAgdGFibGVzIHNlcGFyYXRlXG5cbmZ1bmN0aW9uIGZpeGVkdGFibGVzKHN0YXRlKSB7XG4gIC8qIGJ1aWxkIGZpeGVkIGh1ZmZtYW4gdGFibGVzIGlmIGZpcnN0IGNhbGwgKG1heSBub3QgYmUgdGhyZWFkIHNhZmUpICovXG4gIGlmICh2aXJnaW4pIHtcbiAgICB2YXIgc3ltO1xuXG4gICAgbGVuZml4ID0gbmV3IHV0aWxzLkJ1ZjMyKDUxMik7XG4gICAgZGlzdGZpeCA9IG5ldyB1dGlscy5CdWYzMigzMik7XG5cbiAgICAvKiBsaXRlcmFsL2xlbmd0aCB0YWJsZSAqL1xuICAgIHN5bSA9IDA7XG4gICAgd2hpbGUgKHN5bSA8IDE0NCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7IH1cbiAgICB3aGlsZSAoc3ltIDwgMjU2KSB7IHN0YXRlLmxlbnNbc3ltKytdID0gOTsgfVxuICAgIHdoaWxlIChzeW0gPCAyODApIHsgc3RhdGUubGVuc1tzeW0rK10gPSA3OyB9XG4gICAgd2hpbGUgKHN5bSA8IDI4OCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7IH1cblxuICAgIGluZmxhdGVfdGFibGUoTEVOUywgIHN0YXRlLmxlbnMsIDAsIDI4OCwgbGVuZml4LCAgIDAsIHN0YXRlLndvcmssIHsgYml0czogOSB9KTtcblxuICAgIC8qIGRpc3RhbmNlIHRhYmxlICovXG4gICAgc3ltID0gMDtcbiAgICB3aGlsZSAoc3ltIDwgMzIpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA1OyB9XG5cbiAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgICBkaXN0Zml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDUgfSk7XG5cbiAgICAvKiBkbyB0aGlzIGp1c3Qgb25jZSAqL1xuICAgIHZpcmdpbiA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGUubGVuY29kZSA9IGxlbmZpeDtcbiAgc3RhdGUubGVuYml0cyA9IDk7XG4gIHN0YXRlLmRpc3Rjb2RlID0gZGlzdGZpeDtcbiAgc3RhdGUuZGlzdGJpdHMgPSA1O1xufVxuXG5cbi8qXG4gVXBkYXRlIHRoZSB3aW5kb3cgd2l0aCB0aGUgbGFzdCB3c2l6ZSAobm9ybWFsbHkgMzJLKSBieXRlcyB3cml0dGVuIGJlZm9yZVxuIHJldHVybmluZy4gIElmIHdpbmRvdyBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiB3aGVuIGEgd2luZG93IGlzIGFscmVhZHkgaW4gdXNlLCBvciB3aGVuIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIGR1cmluZyB0aGlzXG4gaW5mbGF0ZSBjYWxsLCBidXQgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0gaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LlxuIEl0IGlzIGFsc28gY2FsbGVkIHRvIGNyZWF0ZSBhIHdpbmRvdyBmb3IgZGljdGlvbmFyeSBkYXRhIHdoZW4gYSBkaWN0aW9uYXJ5XG4gaXMgbG9hZGVkLlxuXG4gUHJvdmlkaW5nIG91dHB1dCBidWZmZXJzIGxhcmdlciB0aGFuIDMySyB0byBpbmZsYXRlKCkgc2hvdWxkIHByb3ZpZGUgYSBzcGVlZFxuIGFkdmFudGFnZSwgc2luY2Ugb25seSB0aGUgbGFzdCAzMksgb2Ygb3V0cHV0IGlzIGNvcGllZCB0byB0aGUgc2xpZGluZyB3aW5kb3dcbiB1cG9uIHJldHVybiBmcm9tIGluZmxhdGUoKSwgYW5kIHNpbmNlIGFsbCBkaXN0YW5jZXMgYWZ0ZXIgdGhlIGZpcnN0IDMySyBvZlxuIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rlci5cbiBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLlxuICovXG5mdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHtcbiAgdmFyIGRpc3Q7XG4gIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7XG5cbiAgLyogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHdpbmRvdyAqL1xuICBpZiAoc3RhdGUud2luZG93ID09PSBudWxsKSB7XG4gICAgc3RhdGUud3NpemUgPSAxIDw8IHN0YXRlLndiaXRzO1xuICAgIHN0YXRlLnduZXh0ID0gMDtcbiAgICBzdGF0ZS53aGF2ZSA9IDA7XG5cbiAgICBzdGF0ZS53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzdGF0ZS53c2l6ZSk7XG4gIH1cblxuICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi9cbiAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHtcbiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gc3RhdGUud3NpemUsIHN0YXRlLndzaXplLCAwKTtcbiAgICBzdGF0ZS53bmV4dCA9IDA7XG4gICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTtcbiAgfVxuICBlbHNlIHtcbiAgICBkaXN0ID0gc3RhdGUud3NpemUgLSBzdGF0ZS53bmV4dDtcbiAgICBpZiAoZGlzdCA+IGNvcHkpIHtcbiAgICAgIGRpc3QgPSBjb3B5O1xuICAgIH1cbiAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7XG4gICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIGNvcHksIGRpc3QsIHN0YXRlLnduZXh0KTtcbiAgICBjb3B5IC09IGRpc3Q7XG4gICAgaWYgKGNvcHkpIHtcbiAgICAgIC8vem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBjb3B5LCBjb3B5KTtcbiAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBjb3B5LCBjb3B5LCAwKTtcbiAgICAgIHN0YXRlLnduZXh0ID0gY29weTtcbiAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3RhdGUud25leHQgKz0gZGlzdDtcbiAgICAgIGlmIChzdGF0ZS53bmV4dCA9PT0gc3RhdGUud3NpemUpIHsgc3RhdGUud25leHQgPSAwOyB9XG4gICAgICBpZiAoc3RhdGUud2hhdmUgPCBzdGF0ZS53c2l6ZSkgeyBzdGF0ZS53aGF2ZSArPSBkaXN0OyB9XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7XG4gIHZhciBzdGF0ZTtcbiAgdmFyIGlucHV0LCBvdXRwdXQ7ICAgICAgICAgIC8vIGlucHV0L291dHB1dCBidWZmZXJzXG4gIHZhciBuZXh0OyAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGlucHV0IElOREVYICovXG4gIHZhciBwdXQ7ICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IG91dHB1dCBJTkRFWCAqL1xuICB2YXIgaGF2ZSwgbGVmdDsgICAgICAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi9cbiAgdmFyIGhvbGQ7ICAgICAgICAgICAgICAgICAgIC8qIGJpdCBidWZmZXIgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqL1xuICB2YXIgX2luLCBfb3V0OyAgICAgICAgICAgICAgLyogc2F2ZSBzdGFydGluZyBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqL1xuICB2YXIgY29weTsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovXG4gIHZhciBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi9cbiAgdmFyIGZyb21fc291cmNlO1xuICB2YXIgaGVyZSA9IDA7ICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqL1xuICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsgLy8gcGFrZWQgXCJoZXJlXCIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYylcbiAgLy92YXIgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovXG4gIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOyAvLyBwYWtlZCBcImxhc3RcIiBkZW5vcm1hbGl6ZWQgKEpTIHNwZWNpZmljKVxuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIHRvIGNvcHkgZm9yIHJlcGVhdHMsIGJpdHMgdG8gZHJvcCAqL1xuICB2YXIgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi9cbiAgdmFyIGhidWYgPSBuZXcgdXRpbHMuQnVmOCg0KTsgICAgLyogYnVmZmVyIGZvciBnemlwIGhlYWRlciBjcmMgY2FsY3VsYXRpb24gKi9cbiAgdmFyIG9wdHM7XG5cbiAgdmFyIG47IC8vIHRlbXBvcmFyeSB2YXIgZm9yIE5FRURfQklUU1xuXG4gIHZhciBvcmRlciA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqL1xuICAgIFsgMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNSBdO1xuXG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIHx8ICFzdHJtLm91dHB1dCB8fFxuICAgICAgKCFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoc3RhdGUubW9kZSA9PT0gVFlQRSkgeyBzdGF0ZS5tb2RlID0gVFlQRURPOyB9ICAgIC8qIHNraXAgY2hlY2sgKi9cblxuXG4gIC8vLS0tIExPQUQoKSAtLS1cbiAgcHV0ID0gc3RybS5uZXh0X291dDtcbiAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gIGxlZnQgPSBzdHJtLmF2YWlsX291dDtcbiAgbmV4dCA9IHN0cm0ubmV4dF9pbjtcbiAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICBoYXZlID0gc3RybS5hdmFpbF9pbjtcbiAgaG9sZCA9IHN0YXRlLmhvbGQ7XG4gIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICAvLy0tLVxuXG4gIF9pbiA9IGhhdmU7XG4gIF9vdXQgPSBsZWZ0O1xuICByZXQgPSBaX09LO1xuXG4gIGluZl9sZWF2ZTogLy8gZ290byBlbXVsYXRpb25cbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoc3RhdGUubW9kZSkge1xuICAgICAgY2FzZSBIRUFEOlxuICAgICAgICBpZiAoc3RhdGUud3JhcCA9PT0gMCkge1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpO1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmICgoc3RhdGUud3JhcCAmIDIpICYmIGhvbGQgPT09IDB4OGIxZikgeyAgLyogZ3ppcCBoZWFkZXIgKi9cbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IDAvKmNyYzMyKDBMLCBaX05VTEwsIDApKi87XG4gICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cblxuICAgICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBGTEFHUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5mbGFncyA9IDA7ICAgICAgICAgICAvKiBleHBlY3QgemxpYiBoZWFkZXIgKi9cbiAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShzdGF0ZS53cmFwICYgMSkgfHwgICAvKiBjaGVjayBpZiB6bGliIGhlYWRlciBhbGxvd2VkICovXG4gICAgICAgICAgKCgoaG9sZCAmIDB4ZmYpLypCSVRTKDgpKi8gPDwgOCkgKyAoaG9sZCA+PiA4KSkgJSAzMSkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2luY29ycmVjdCBoZWFkZXIgY2hlY2snO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChob2xkICYgMHgwZikvKkJJVFMoNCkqLyAhPT0gWl9ERUZMQVRFRCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDQpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSA0O1xuICAgICAgICBiaXRzIC09IDQ7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgbGVuID0gKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICsgODtcbiAgICAgICAgaWYgKHN0YXRlLndiaXRzID09PSAwKSB7XG4gICAgICAgICAgc3RhdGUud2JpdHMgPSBsZW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGVuID4gc3RhdGUud2JpdHMpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIHdpbmRvdyBzaXplJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmRtYXggPSAxIDw8IGxlbjtcbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIHpsaWIgaGVhZGVyIG9rXFxuXCIpKTtcbiAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMS8qYWRsZXIzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICBzdGF0ZS5tb2RlID0gaG9sZCAmIDB4MjAwID8gRElDVElEIDogVFlQRTtcbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGTEFHUzpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLmZsYWdzID0gaG9sZDtcbiAgICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDB4ZmYpICE9PSBaX0RFRkxBVEVEKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAndW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHhlMDAwKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAndW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0JztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC50ZXh0ID0gKChob2xkID4+IDgpICYgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubW9kZSA9IFRJTUU7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgVElNRTpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC50aW1lID0gaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAvLz09PSBDUkM0KHN0YXRlLmNoZWNrLCBob2xkKVxuICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgICBoYnVmWzJdID0gKGhvbGQgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlszXSA9IChob2xkID4+PiAyNCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDQsIDApO1xuICAgICAgICAgIC8vPT09XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBPUztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBPUzpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSAoaG9sZCAmIDB4ZmYpO1xuICAgICAgICAgIHN0YXRlLmhlYWQub3MgPSAoaG9sZCA+PiA4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gRVhMRU47XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRVhMRU46XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZDtcbiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9sZW4gPSBob2xkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgICBob2xkID0gMDtcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBudWxsLypaX05VTEwqLztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5tb2RlID0gRVhUUkE7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRVhUUkE6XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9XG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAoIXN0YXRlLmhlYWQuZXh0cmEpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgdW50eXBlZCBhcnJheSBmb3IgbW9yZSBjb252ZW5pZW50IHByb2Nlc3NpbmcgbGF0ZXJcbiAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbmV3IEFycmF5KHN0YXRlLmhlYWQuZXh0cmFfbGVuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB1dGlscy5hcnJheVNldChcbiAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICAgICAgLy8gZXh0cmEgZmllbGQgaXMgbGltaXRlZCB0byA2NTUzNiBieXRlc1xuICAgICAgICAgICAgICAgIC8vIC0gbm8gbmVlZCBmb3IgYWRkaXRpb25hbCBzaXplIGNoZWNrXG4gICAgICAgICAgICAgICAgY29weSxcbiAgICAgICAgICAgICAgICAvKmxlbiArIGNvcHkgPiBzdGF0ZS5oZWFkLmV4dHJhX21heCAtIGxlbiA/IHN0YXRlLmhlYWQuZXh0cmFfbWF4IDogY29weSwqL1xuICAgICAgICAgICAgICAgIGxlblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAvL3ptZW1jcHkoc3RhdGUuaGVhZC5leHRyYSArIGxlbiwgbmV4dCxcbiAgICAgICAgICAgICAgLy8gICAgICAgIGxlbiArIGNvcHkgPiBzdGF0ZS5oZWFkLmV4dHJhX21heCA/XG4gICAgICAgICAgICAgIC8vICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhX21heCAtIGxlbiA6IGNvcHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmxlbmd0aCA9IDA7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBOQU1FO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIE5BTUU6XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDgwMCkge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGNvcHkgPSAwO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8vIFRPRE86IDIgb3IgMSBieXRlcz9cbiAgICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdO1xuICAgICAgICAgICAgLyogdXNlIGNvbnN0YW50IGxpbWl0IGJlY2F1c2UgaW4ganMgd2Ugc2hvdWxkIG5vdCBwcmVhbGxvY2F0ZSBtZW1vcnkgKi9cbiAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJlxuICAgICAgICAgICAgICAgIChzdGF0ZS5sZW5ndGggPCA2NTUzNiAvKnN0YXRlLmhlYWQubmFtZV9tYXgqLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUuaGVhZC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC5uYW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQ09NTUVOVDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBDT01NRU5UOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDEwMDApIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTtcbiAgICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovXG4gICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiZcbiAgICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLmNvbW1fbWF4Ki8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTtcbiAgICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgICBpZiAobGVuKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIEhDUkM6XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS5jaGVjayAmIDB4ZmZmZikpIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2hlYWRlciBjcmMgbWlzbWF0Y2gnO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICAgIGhvbGQgPSAwO1xuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQuaGNyYyA9ICgoc3RhdGUuZmxhZ3MgPj4gOSkgJiAxKTtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRElDVElEOlxuICAgICAgICAvLz09PSBORUVEQklUUygzMik7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0genN3YXAzMihob2xkKTtcbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBESUNUO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIERJQ1Q6XG4gICAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkge1xuICAgICAgICAgIC8vLS0tIFJFU1RPUkUoKSAtLS1cbiAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0O1xuICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlO1xuICAgICAgICAgIHN0YXRlLmhvbGQgPSBob2xkO1xuICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzO1xuICAgICAgICAgIC8vLS0tXG4gICAgICAgICAgcmV0dXJuIFpfTkVFRF9ESUNUO1xuICAgICAgICB9XG4gICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDEvKmFkbGVyMzIoMEwsIFpfTlVMTCwgMCkqLztcbiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgVFlQRTpcbiAgICAgICAgaWYgKGZsdXNoID09PSBaX0JMT0NLIHx8IGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIFRZUEVETzpcbiAgICAgICAgaWYgKHN0YXRlLmxhc3QpIHtcbiAgICAgICAgICAvLy0tLSBCWVRFQklUUygpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3O1xuICAgICAgICAgIGJpdHMgLT0gYml0cyAmIDc7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBDSEVDSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLz09PSBORUVEQklUUygzKTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLmxhc3QgPSAoaG9sZCAmIDB4MDEpLypCSVRTKDEpKi87XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDEpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSAxO1xuICAgICAgICBiaXRzIC09IDE7XG4gICAgICAgIC8vLS0tLy9cblxuICAgICAgICBzd2l0Y2ggKChob2xkICYgMHgwMykvKkJJVFMoMikqLykge1xuICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlZCBibG9jayAqL1xuICAgICAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgc3RvcmVkIGJsb2NrJXNcXG5cIixcbiAgICAgICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gXCIgKGxhc3QpXCIgOiBcIlwiKSk7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gU1RPUkVEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgYmxvY2sgKi9cbiAgICAgICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTtcbiAgICAgICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgIGZpeGVkIGNvZGVzIGJsb2NrJXNcXG5cIixcbiAgICAgICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gXCIgKGxhc3QpXCIgOiBcIlwiKSk7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsgICAgICAgICAgICAgLyogZGVjb2RlIGNvZGVzICovXG4gICAgICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHtcbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICAgICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljIGJsb2NrICovXG4gICAgICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICBkeW5hbWljIGNvZGVzIGJsb2NrJXNcXG5cIixcbiAgICAgICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gXCIgKGxhc3QpXCIgOiBcIlwiKSk7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gVEFCTEU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJsb2NrIHR5cGUnO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBEUk9QQklUUygyKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gMjtcbiAgICAgICAgYml0cyAtPSAyO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVE9SRUQ6XG4gICAgICAgIC8vLS0tIEJZVEVCSVRTKCkgLS0tLy8gLyogZ28gdG8gYnl0ZSBib3VuZGFyeSAqL1xuICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7XG4gICAgICAgIGJpdHMgLT0gYml0cyAmIDc7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmICgoaG9sZCAmIDB4ZmZmZikgIT09ICgoaG9sZCA+Pj4gMTYpIF4gMHhmZmZmKSkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZCAmIDB4ZmZmZjtcbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBzdG9yZWQgbGVuZ3RoICV1XFxuXCIsXG4gICAgICAgIC8vICAgICAgICBzdGF0ZS5sZW5ndGgpKTtcbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBDT1BZXztcbiAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIENPUFlfOlxuICAgICAgICBzdGF0ZS5tb2RlID0gQ09QWTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBDT1BZOlxuICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgeyBjb3B5ID0gaGF2ZTsgfVxuICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfVxuICAgICAgICAgIGlmIChjb3B5ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIC8vLS0tIHptZW1jcHkocHV0LCBuZXh0LCBjb3B5KTsgLS0tXG4gICAgICAgICAgdXRpbHMuYXJyYXlTZXQob3V0cHV0LCBpbnB1dCwgbmV4dCwgY29weSwgcHV0KTtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgICBsZWZ0IC09IGNvcHk7XG4gICAgICAgICAgcHV0ICs9IGNvcHk7XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBzdG9yZWQgZW5kXFxuXCIpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUQUJMRTpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTQpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE0KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDB4MWYpLypCSVRTKDUpKi8gKyAyNTc7XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDUpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSA1O1xuICAgICAgICBiaXRzIC09IDU7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDB4MWYpLypCSVRTKDUpKi8gKyAxO1xuICAgICAgICAvLy0tLSBEUk9QQklUUyg1KSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gNTtcbiAgICAgICAgYml0cyAtPSA1O1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICsgNDtcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoNCkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDQ7XG4gICAgICAgIGJpdHMgLT0gNDtcbiAgICAgICAgLy8tLS0vL1xuLy8jaWZuZGVmIFBLWklQX0JVR19XT1JLQVJPVU5EXG4gICAgICAgIGlmIChzdGF0ZS5ubGVuID4gMjg2IHx8IHN0YXRlLm5kaXN0ID4gMzApIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICd0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICB0YWJsZSBzaXplcyBva1xcblwiKSk7XG4gICAgICAgIHN0YXRlLmhhdmUgPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU5MRU5TOlxuICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoMyk7XG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IChob2xkICYgMHgwNyk7Ly9CSVRTKDMpO1xuICAgICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IDM7XG4gICAgICAgICAgYml0cyAtPSAzO1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7XG4gICAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgICAgLy9zdGF0ZS5uZXh0ID0gc3RhdGUuY29kZXM7XG4gICAgICAgIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLm5leHQ7XG4gICAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZVxuICAgICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluO1xuICAgICAgICBzdGF0ZS5sZW5iaXRzID0gNztcblxuICAgICAgICBvcHRzID0geyBiaXRzOiBzdGF0ZS5sZW5iaXRzIH07XG4gICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLmxlbnMsIDAsIDE5LCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0cztcblxuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0JztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgY29kZSBsZW5ndGhzIG9rXFxuXCIpKTtcbiAgICAgICAgc3RhdGUuaGF2ZSA9IDA7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBDT0RFTEVOUztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBDT0RFTEVOUzpcbiAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHtcbiAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMSldOy8qQklUUyhzdGF0ZS5sZW5iaXRzKSovXG4gICAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgICAgaWYgKChoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoZXJlX3ZhbCA8IDE2KSB7XG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBoZXJlX3ZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaGVyZV92YWwgPT09IDE2KSB7XG4gICAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDIpO1xuICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMjtcbiAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgICAgaWYgKHN0YXRlLmhhdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0JztcbiAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdO1xuICAgICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgMHgwMyk7Ly9CSVRTKDIpO1xuICAgICAgICAgICAgICAvLy0tLSBEUk9QQklUUygyKSAtLS0vL1xuICAgICAgICAgICAgICBob2xkID4+Pj0gMjtcbiAgICAgICAgICAgICAgYml0cyAtPSAyO1xuICAgICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChoZXJlX3ZhbCA9PT0gMTcpIHtcbiAgICAgICAgICAgICAgLy89PT0gTkVFREJJVFMoaGVyZS5iaXRzICsgMyk7XG4gICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzO1xuICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgICBjb3B5ID0gMyArIChob2xkICYgMHgwNyk7Ly9CSVRTKDMpO1xuICAgICAgICAgICAgICAvLy0tLSBEUk9QQklUUygzKSAtLS0vL1xuICAgICAgICAgICAgICBob2xkID4+Pj0gMztcbiAgICAgICAgICAgICAgYml0cyAtPSAzO1xuICAgICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy89PT0gTkVFREJJVFMoaGVyZS5iaXRzICsgNyk7XG4gICAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyA3O1xuICAgICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgICBjb3B5ID0gMTEgKyAoaG9sZCAmIDB4N2YpOy8vQklUUyg3KTtcbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoNykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IDc7XG4gICAgICAgICAgICAgIGJpdHMgLT0gNztcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlLmhhdmUgKyBjb3B5ID4gc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7XG4gICAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYml0IGxlbmd0aCByZXBlYXQnO1xuICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjb3B5LS0pIHtcbiAgICAgICAgICAgICAgc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdID0gbGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGhhbmRsZSBlcnJvciBicmVha3MgaW4gd2hpbGUgKi9cbiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IEJBRCkgeyBicmVhazsgfVxuXG4gICAgICAgIC8qIGNoZWNrIGZvciBlbmQtb2YtYmxvY2sgY29kZSAoYmV0dGVyIGhhdmUgb25lKSAqL1xuICAgICAgICBpZiAoc3RhdGUubGVuc1syNTZdID09PSAwKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMgLS0gbm90ZTogZG8gbm90IGNoYW5nZSB0aGUgbGVuYml0cyBvciBkaXN0Yml0c1xuICAgICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oXG4gICAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi9cbiAgICAgICAgc3RhdGUubGVuYml0cyA9IDk7XG5cbiAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9O1xuICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLmxlbnMsIDAsIHN0YXRlLm5sZW4sIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpO1xuICAgICAgICAvLyBXZSBoYXZlIHNlcGFyYXRlIHRhYmxlcyAmIG5vIHBvaW50ZXJzLiAyIGNvbW1lbnRlZCBsaW5lcyBiZWxvdyBub3QgbmVlZGVkLlxuICAgICAgICAvLyBzdGF0ZS5uZXh0X2luZGV4ID0gb3B0cy50YWJsZV9pbmRleDtcbiAgICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0cztcbiAgICAgICAgLy8gc3RhdGUubGVuY29kZSA9IHN0YXRlLm5leHQ7XG5cbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmRpc3RiaXRzID0gNjtcbiAgICAgICAgLy9zdGF0ZS5kaXN0Y29kZS5jb3B5KHN0YXRlLmNvZGVzKTtcbiAgICAgICAgLy8gU3dpdGNoIHRvIHVzZSBkeW5hbWljIHRhYmxlXG4gICAgICAgIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5bjtcbiAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUuZGlzdGJpdHMgfTtcbiAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUubGVucywgc3RhdGUubmxlbiwgc3RhdGUubmRpc3QsIHN0YXRlLmRpc3Rjb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMudGFibGVfaW5kZXg7XG4gICAgICAgIHN0YXRlLmRpc3RiaXRzID0gb3B0cy5iaXRzO1xuICAgICAgICAvLyBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQ7XG5cbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2VzIHNldCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAnaW5mbGF0ZTogICAgICAgY29kZXMgb2tcXG4nKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMRU5fO1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgTEVOXzpcbiAgICAgICAgc3RhdGUubW9kZSA9IExFTjtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU46XG4gICAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHtcbiAgICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7XG4gICAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgICAgICAgICBzdGF0ZS5iaXRzID0gYml0cztcbiAgICAgICAgICAvLy0tLVxuICAgICAgICAgIGluZmxhdGVfZmFzdChzdHJtLCBfb3V0KTtcbiAgICAgICAgICAvLy0tLSBMT0FEKCkgLS0tXG4gICAgICAgICAgcHV0ID0gc3RybS5uZXh0X291dDtcbiAgICAgICAgICBvdXRwdXQgPSBzdHJtLm91dHB1dDtcbiAgICAgICAgICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7XG4gICAgICAgICAgbmV4dCA9IHN0cm0ubmV4dF9pbjtcbiAgICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7XG4gICAgICAgICAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47XG4gICAgICAgICAgaG9sZCA9IHN0YXRlLmhvbGQ7XG4gICAgICAgICAgYml0cyA9IHN0YXRlLmJpdHM7XG4gICAgICAgICAgLy8tLS1cblxuICAgICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7XG4gICAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmJhY2sgPSAwO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEpXTsgIC8qQklUUyhzdGF0ZS5sZW5iaXRzKSovXG4gICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgIGlmIChoZXJlX2JpdHMgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVyZV9vcCAmJiAoaGVyZV9vcCAmIDB4ZjApID09PSAwKSB7XG4gICAgICAgICAgbGFzdF9iaXRzID0gaGVyZV9iaXRzO1xuICAgICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wO1xuICAgICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbbGFzdF92YWwgK1xuICAgICAgICAgICAgICAgICAgICAoKGhvbGQgJiAoKDEgPDwgKGxhc3RfYml0cyArIGxhc3Rfb3ApKSAtIDEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldO1xuICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgIGlmICgobGFzdF9iaXRzICsgaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhsYXN0LmJpdHMpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0cztcbiAgICAgICAgICBiaXRzIC09IGxhc3RfYml0cztcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUuYmFjayArPSBsYXN0X2JpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5iYWNrICs9IGhlcmVfYml0cztcbiAgICAgICAgc3RhdGUubGVuZ3RoID0gaGVyZV92YWw7XG4gICAgICAgIGlmIChoZXJlX29wID09PSAwKSB7XG4gICAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIGhlcmUudmFsID49IDB4MjAgJiYgaGVyZS52YWwgPCAweDdmID9cbiAgICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgJyVjJ1xcblwiIDpcbiAgICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IExJVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVyZV9vcCAmIDMyKSB7XG4gICAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcXG5cIikpO1xuICAgICAgICAgIHN0YXRlLmJhY2sgPSAtMTtcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmV4dHJhID0gaGVyZV9vcCAmIDE1O1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVORVhUO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIExFTkVYVDpcbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoc3RhdGUuZXh0cmEpO1xuICAgICAgICAgIG4gPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICBzdGF0ZS5sZW5ndGggKz0gaG9sZCAmICgoMSA8PCBzdGF0ZS5leHRyYSkgLSAxKS8qQklUUyhzdGF0ZS5leHRyYSkqLztcbiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhzdGF0ZS5leHRyYSkgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBzdGF0ZS5sZW5ndGgpKTtcbiAgICAgICAgc3RhdGUud2FzID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICBzdGF0ZS5tb2RlID0gRElTVDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBESVNUOlxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaGVyZSA9IHN0YXRlLmRpc3Rjb2RlW2hvbGQgJiAoKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMSldOy8qQklUUyhzdGF0ZS5kaXN0Yml0cykqL1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoKGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICBpZiAoKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0cztcbiAgICAgICAgICBsYXN0X29wID0gaGVyZV9vcDtcbiAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsO1xuICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArXG4gICAgICAgICAgICAgICAgICAgICgoaG9sZCAmICgoMSA8PCAobGFzdF9iaXRzICsgbGFzdF9vcCkpIC0gMSkpLypCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApKi8gPj4gbGFzdF9iaXRzKV07XG4gICAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgICAgaWYgKChsYXN0X2JpdHMgKyBoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vLS0tIERST1BCSVRTKGxhc3QuYml0cykgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gbGFzdF9iaXRzO1xuICAgICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzO1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzO1xuICAgICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLm9mZnNldCA9IGhlcmVfdmFsO1xuICAgICAgICBzdGF0ZS5leHRyYSA9IChoZXJlX29wKSAmIDE1O1xuICAgICAgICBzdGF0ZS5tb2RlID0gRElTVEVYVDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBESVNURVhUOlxuICAgICAgICBpZiAoc3RhdGUuZXh0cmEpIHtcbiAgICAgICAgICAvLz09PSBORUVEQklUUyhzdGF0ZS5leHRyYSk7XG4gICAgICAgICAgbiA9IHN0YXRlLmV4dHJhO1xuICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIHN0YXRlLm9mZnNldCArPSBob2xkICYgKCgxIDw8IHN0YXRlLmV4dHJhKSAtIDEpLypCSVRTKHN0YXRlLmV4dHJhKSovO1xuICAgICAgICAgIC8vLS0tIERST1BCSVRTKHN0YXRlLmV4dHJhKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhO1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhO1xuICAgICAgICB9XG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gc3RhdGUuZG1heCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4vLyNlbmRpZlxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGRpc3RhbmNlICV1XFxuXCIsIHN0YXRlLm9mZnNldCkpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTUFUQ0g7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgTUFUQ0g6XG4gICAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBjb3B5ID0gX291dCAtIGxlZnQ7XG4gICAgICAgIGlmIChzdGF0ZS5vZmZzZXQgPiBjb3B5KSB7ICAgICAgICAgLyogY29weSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgIGNvcHkgPSBzdGF0ZS5vZmZzZXQgLSBjb3B5O1xuICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud2hhdmUpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7XG4gICAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJztcbiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4vLyAoISkgVGhpcyBibG9jayBpcyBkaXNhYmxlZCBpbiB6bGliIGRlZmF1bHRzLFxuLy8gZG9uJ3QgZW5hYmxlIGl0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eVxuLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSXG4vLyAgICAgICAgICBUcmFjZSgoc3RkZXJyLCBcImluZmxhdGUuYyB0b28gZmFyXFxuXCIpKTtcbi8vICAgICAgICAgIGNvcHkgLT0gc3RhdGUud2hhdmU7XG4vLyAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgeyBjb3B5ID0gc3RhdGUubGVuZ3RoOyB9XG4vLyAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsgY29weSA9IGxlZnQ7IH1cbi8vICAgICAgICAgIGxlZnQgLT0gY29weTtcbi8vICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuLy8gICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gMDtcbi8vICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7XG4vLyAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7IHN0YXRlLm1vZGUgPSBMRU47IH1cbi8vICAgICAgICAgIGJyZWFrO1xuLy8jZW5kaWZcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53bmV4dCkge1xuICAgICAgICAgICAgY29weSAtPSBzdGF0ZS53bmV4dDtcbiAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29weSA9IHN0YXRlLmxlbmd0aDsgfVxuICAgICAgICAgIGZyb21fc291cmNlID0gc3RhdGUud2luZG93O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICBmcm9tID0gcHV0IC0gc3RhdGUub2Zmc2V0O1xuICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4gICAgICAgIGxlZnQgLT0gY29weTtcbiAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTtcbiAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMSVQ6XG4gICAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBvdXRwdXRbcHV0KytdID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICBsZWZ0LS07XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMRU47XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDSEVDSzpcbiAgICAgICAgaWYgKHN0YXRlLndyYXApIHtcbiAgICAgICAgICAvLz09PSBORUVEQklUUygzMik7XG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAvLyBVc2UgJ3wnIGluc3RlYWQgb2YgJysnIHRvIG1ha2Ugc3VyZSB0aGF0IHJlc3VsdCBpcyBzaWduZWRcbiAgICAgICAgICAgIGhvbGQgfD0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgX291dCAtPSBsZWZ0O1xuICAgICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7XG4gICAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDtcbiAgICAgICAgICBpZiAoX291dCkge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID1cbiAgICAgICAgICAgICAgICAvKlVQREFURShzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki9cbiAgICAgICAgICAgICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCkpO1xuXG4gICAgICAgICAgfVxuICAgICAgICAgIF9vdXQgPSBsZWZ0O1xuICAgICAgICAgIC8vIE5COiBjcmMzMiBzdG9yZWQgYXMgc2lnbmVkIDMyLWJpdCBpbnQsIHpzd2FwMzIgcmV0dXJucyBzaWduZWQgdG9vXG4gICAgICAgICAgaWYgKChzdGF0ZS5mbGFncyA/IGhvbGQgOiB6c3dhcDMyKGhvbGQpKSAhPT0gc3RhdGUuY2hlY2spIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2luY29ycmVjdCBkYXRhIGNoZWNrJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgICBob2xkID0gMDtcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIGNoZWNrIG1hdGNoZXMgdHJhaWxlclxcblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU5HVEg6XG4gICAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpO1xuICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICBpZiAoaG9sZCAhPT0gKHN0YXRlLnRvdGFsICYgMHhmZmZmZmZmZikpIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2luY29ycmVjdCBsZW5ndGggY2hlY2snO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICAgIGhvbGQgPSAwO1xuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgbGVuZ3RoIG1hdGNoZXMgdHJhaWxlclxcblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubW9kZSA9IERPTkU7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRE9ORTpcbiAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EO1xuICAgICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgICBjYXNlIEJBRDpcbiAgICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SO1xuICAgICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgICBjYXNlIE1FTTpcbiAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAgICAgY2FzZSBTWU5DOlxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5mX2xlYXZlIDwtIGhlcmUgaXMgcmVhbCBwbGFjZSBmb3IgXCJnb3RvIGluZl9sZWF2ZVwiLCBlbXVsYXRlZCB2aWEgXCJicmVhayBpbmZfbGVhdmVcIlxuXG4gIC8qXG4gICAgIFJldHVybiBmcm9tIGluZmxhdGUoKSwgdXBkYXRpbmcgdGhlIHRvdGFsIGNvdW50cyBhbmQgdGhlIGNoZWNrIHZhbHVlLlxuICAgICBJZiB0aGVyZSB3YXMgbm8gcHJvZ3Jlc3MgZHVyaW5nIHRoZSBpbmZsYXRlKCkgY2FsbCwgcmV0dXJuIGEgYnVmZmVyXG4gICAgIGVycm9yLiAgQ2FsbCB1cGRhdGV3aW5kb3coKSB0byBjcmVhdGUgYW5kL29yIHVwZGF0ZSB0aGUgd2luZG93IHN0YXRlLlxuICAgICBOb3RlOiBhIG1lbW9yeSBlcnJvciBmcm9tIGluZmxhdGUoKSBpcyBub24tcmVjb3ZlcmFibGUuXG4gICAqL1xuXG4gIC8vLS0tIFJFU1RPUkUoKSAtLS1cbiAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0O1xuICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gIHN0YXRlLmJpdHMgPSBiaXRzO1xuICAvLy0tLVxuXG4gIGlmIChzdGF0ZS53c2l6ZSB8fCAoX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJlxuICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT09IFpfRklOSVNIKSkpIHtcbiAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0LCBfb3V0IC0gc3RybS5hdmFpbF9vdXQpKSB7XG4gICAgICBzdGF0ZS5tb2RlID0gTUVNO1xuICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAgIH1cbiAgfVxuICBfaW4gLT0gc3RybS5hdmFpbF9pbjtcbiAgX291dCAtPSBzdHJtLmF2YWlsX291dDtcbiAgc3RybS50b3RhbF9pbiArPSBfaW47XG4gIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7XG4gIHN0YXRlLnRvdGFsICs9IF9vdXQ7XG4gIGlmIChzdGF0ZS53cmFwICYmIF9vdXQpIHtcbiAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAvKlVQREFURShzdGF0ZS5jaGVjaywgc3RybS5uZXh0X291dCAtIF9vdXQsIF9vdXQpOyovXG4gICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkgOiBhZGxlcjMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KSk7XG4gIH1cbiAgc3RybS5kYXRhX3R5cGUgPSBzdGF0ZS5iaXRzICsgKHN0YXRlLmxhc3QgPyA2NCA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPT09IFRZUEUgPyAxMjggOiAwKSArXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBMRU5fIHx8IHN0YXRlLm1vZGUgPT09IENPUFlfID8gMjU2IDogMCk7XG4gIGlmICgoKF9pbiA9PT0gMCAmJiBfb3V0ID09PSAwKSB8fCBmbHVzaCA9PT0gWl9GSU5JU0gpICYmIHJldCA9PT0gWl9PSykge1xuICAgIHJldCA9IFpfQlVGX0VSUk9SO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVFbmQoc3RybSkge1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSAvKnx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCovKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgdmFyIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKHN0YXRlLndpbmRvdykge1xuICAgIHN0YXRlLndpbmRvdyA9IG51bGw7XG4gIH1cbiAgc3RybS5zdGF0ZSA9IG51bGw7XG4gIHJldHVybiBaX09LO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0sIGhlYWQpIHtcbiAgdmFyIHN0YXRlO1xuXG4gIC8qIGNoZWNrIHN0YXRlICovXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoKHN0YXRlLndyYXAgJiAyKSA9PT0gMCkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cblxuICAvKiBzYXZlIGhlYWRlciBzdHJ1Y3R1cmUgKi9cbiAgc3RhdGUuaGVhZCA9IGhlYWQ7XG4gIGhlYWQuZG9uZSA9IGZhbHNlO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkge1xuICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoO1xuXG4gIHZhciBzdGF0ZTtcbiAgdmFyIGRpY3RpZDtcbiAgdmFyIHJldDtcblxuICAvKiBjaGVjayBzdGF0ZSAqL1xuICBpZiAoIXN0cm0gLyogPT0gWl9OVUxMICovIHx8ICFzdHJtLnN0YXRlIC8qID09IFpfTlVMTCAqLykgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIGlmIChzdGF0ZS53cmFwICE9PSAwICYmIHN0YXRlLm1vZGUgIT09IERJQ1QpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi9cbiAgaWYgKHN0YXRlLm1vZGUgPT09IERJQ1QpIHtcbiAgICBkaWN0aWQgPSAxOyAvKiBhZGxlcjMyKDAsIG51bGwsIDApKi9cbiAgICAvKiBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7ICovXG4gICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApO1xuICAgIGlmIChkaWN0aWQgIT09IHN0YXRlLmNoZWNrKSB7XG4gICAgICByZXR1cm4gWl9EQVRBX0VSUk9SO1xuICAgIH1cbiAgfVxuICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZVxuICAgZXhpc3RpbmcgZGljdGlvbmFyeSBpZiBhcHByb3ByaWF0ZSAqL1xuICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgZGljdExlbmd0aCk7XG4gIGlmIChyZXQpIHtcbiAgICBzdGF0ZS5tb2RlID0gTUVNO1xuICAgIHJldHVybiBaX01FTV9FUlJPUjtcbiAgfVxuICBzdGF0ZS5oYXZlZGljdCA9IDE7XG4gIC8vIFRyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgZGljdGlvbmFyeSBzZXRcXG5cIikpO1xuICByZXR1cm4gWl9PSztcbn1cblxuZXhwb3J0cy5pbmZsYXRlUmVzZXQgPSBpbmZsYXRlUmVzZXQ7XG5leHBvcnRzLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyO1xuZXhwb3J0cy5pbmZsYXRlUmVzZXRLZWVwID0gaW5mbGF0ZVJlc2V0S2VlcDtcbmV4cG9ydHMuaW5mbGF0ZUluaXQgPSBpbmZsYXRlSW5pdDtcbmV4cG9ydHMuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyO1xuZXhwb3J0cy5pbmZsYXRlID0gaW5mbGF0ZTtcbmV4cG9ydHMuaW5mbGF0ZUVuZCA9IGluZmxhdGVFbmQ7XG5leHBvcnRzLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyO1xuZXhwb3J0cy5pbmZsYXRlU2V0RGljdGlvbmFyeSA9IGluZmxhdGVTZXREaWN0aW9uYXJ5O1xuZXhwb3J0cy5pbmZsYXRlSW5mbyA9ICdwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJztcblxuLyogTm90IGltcGxlbWVudGVkXG5leHBvcnRzLmluZmxhdGVDb3B5ID0gaW5mbGF0ZUNvcHk7XG5leHBvcnRzLmluZmxhdGVHZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZUdldERpY3Rpb25hcnk7XG5leHBvcnRzLmluZmxhdGVNYXJrID0gaW5mbGF0ZU1hcms7XG5leHBvcnRzLmluZmxhdGVQcmltZSA9IGluZmxhdGVQcmltZTtcbmV4cG9ydHMuaW5mbGF0ZVN5bmMgPSBpbmZsYXRlU3luYztcbmV4cG9ydHMuaW5mbGF0ZVN5bmNQb2ludCA9IGluZmxhdGVTeW5jUG9pbnQ7XG5leHBvcnRzLmluZmxhdGVVbmRlcm1pbmUgPSBpbmZsYXRlVW5kZXJtaW5lO1xuKi9cblxufSx7XCIuLi91dGlscy9jb21tb25cIjozMDQsXCIuL2FkbGVyMzJcIjozMDYsXCIuL2NyYzMyXCI6MzA4LFwiLi9pbmZmYXN0XCI6MzExLFwiLi9pbmZ0cmVlc1wiOjMxM31dLDMxMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMvY29tbW9uJyk7XG5cbnZhciBNQVhCSVRTID0gMTU7XG52YXIgRU5PVUdIX0xFTlMgPSA4NTI7XG52YXIgRU5PVUdIX0RJU1RTID0gNTkyO1xuLy92YXIgRU5PVUdIID0gKEVOT1VHSF9MRU5TK0VOT1VHSF9ESVNUUyk7XG5cbnZhciBDT0RFUyA9IDA7XG52YXIgTEVOUyA9IDE7XG52YXIgRElTVFMgPSAyO1xuXG52YXIgbGJhc2UgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovXG4gIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsXG4gIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwXG5dO1xuXG52YXIgbGV4dCA9IFsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovXG4gIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LFxuICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzIsIDc4XG5dO1xuXG52YXIgZGJhc2UgPSBbIC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGJhc2UgKi9cbiAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLFxuICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsXG4gIDgxOTMsIDEyMjg5LCAxNjM4NSwgMjQ1NzcsIDAsIDBcbl07XG5cbnZhciBkZXh0ID0gWyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBleHRyYSAqL1xuICAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxOCwgMTgsIDE5LCAxOSwgMjAsIDIwLCAyMSwgMjEsIDIyLCAyMixcbiAgMjMsIDIzLCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsXG4gIDI4LCAyOCwgMjksIDI5LCA2NCwgNjRcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV90YWJsZSh0eXBlLCBsZW5zLCBsZW5zX2luZGV4LCBjb2RlcywgdGFibGUsIHRhYmxlX2luZGV4LCB3b3JrLCBvcHRzKVxue1xuICB2YXIgYml0cyA9IG9wdHMuYml0cztcbiAgICAgIC8vaGVyZSA9IG9wdHMuaGVyZTsgLyogdGFibGUgZW50cnkgZm9yIGR1cGxpY2F0aW9uICovXG5cbiAgdmFyIGxlbiA9IDA7ICAgICAgICAgICAgICAgLyogYSBjb2RlJ3MgbGVuZ3RoIGluIGJpdHMgKi9cbiAgdmFyIHN5bSA9IDA7ICAgICAgICAgICAgICAgLyogaW5kZXggb2YgY29kZSBzeW1ib2xzICovXG4gIHZhciBtaW4gPSAwLCBtYXggPSAwOyAgICAgICAgICAvKiBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvZGUgbGVuZ3RocyAqL1xuICB2YXIgcm9vdCA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaW5kZXggYml0cyBmb3Igcm9vdCB0YWJsZSAqL1xuICB2YXIgY3VyciA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaW5kZXggYml0cyBmb3IgY3VycmVudCB0YWJsZSAqL1xuICB2YXIgZHJvcCA9IDA7ICAgICAgICAgICAgICAvKiBjb2RlIGJpdHMgdG8gZHJvcCBmb3Igc3ViLXRhYmxlICovXG4gIHZhciBsZWZ0ID0gMDsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHByZWZpeCBjb2RlcyBhdmFpbGFibGUgKi9cbiAgdmFyIHVzZWQgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBlbnRyaWVzIGluIHRhYmxlIHVzZWQgKi9cbiAgdmFyIGh1ZmYgPSAwOyAgICAgICAgICAgICAgLyogSHVmZm1hbiBjb2RlICovXG4gIHZhciBpbmNyOyAgICAgICAgICAgICAgLyogZm9yIGluY3JlbWVudGluZyBjb2RlLCBpbmRleCAqL1xuICB2YXIgZmlsbDsgICAgICAgICAgICAgIC8qIGluZGV4IGZvciByZXBsaWNhdGluZyBlbnRyaWVzICovXG4gIHZhciBsb3c7ICAgICAgICAgICAgICAgLyogbG93IGJpdHMgZm9yIGN1cnJlbnQgcm9vdCBlbnRyeSAqL1xuICB2YXIgbWFzazsgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGxvdyByb290IGJpdHMgKi9cbiAgdmFyIG5leHQ7ICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIHRhYmxlICovXG4gIHZhciBiYXNlID0gbnVsbDsgICAgIC8qIGJhc2UgdmFsdWUgdGFibGUgdG8gdXNlICovXG4gIHZhciBiYXNlX2luZGV4ID0gMDtcbi8vICB2YXIgc2hvZXh0cmE7ICAgIC8qIGV4dHJhIGJpdHMgdGFibGUgdG8gdXNlICovXG4gIHZhciBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB1c2UgYmFzZSBhbmQgZXh0cmEgZm9yIHN5bWJvbCA+IGVuZCAqL1xuICB2YXIgY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOyAvL1tNQVhCSVRTKzFdOyAgICAvKiBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGggKi9cbiAgdmFyIG9mZnMgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUyArIDEpOyAvL1tNQVhCSVRTKzFdOyAgICAgLyogb2Zmc2V0cyBpbiB0YWJsZSBmb3IgZWFjaCBsZW5ndGggKi9cbiAgdmFyIGV4dHJhID0gbnVsbDtcbiAgdmFyIGV4dHJhX2luZGV4ID0gMDtcblxuICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDtcblxuICAvKlxuICAgUHJvY2VzcyBhIHNldCBvZiBjb2RlIGxlbmd0aHMgdG8gY3JlYXRlIGEgY2Fub25pY2FsIEh1ZmZtYW4gY29kZS4gIFRoZVxuICAgY29kZSBsZW5ndGhzIGFyZSBsZW5zWzAuLmNvZGVzLTFdLiAgRWFjaCBsZW5ndGggY29ycmVzcG9uZHMgdG8gdGhlXG4gICBzeW1ib2xzIDAuLmNvZGVzLTEuICBUaGUgSHVmZm1hbiBjb2RlIGlzIGdlbmVyYXRlZCBieSBmaXJzdCBzb3J0aW5nIHRoZVxuICAgc3ltYm9scyBieSBsZW5ndGggZnJvbSBzaG9ydCB0byBsb25nLCBhbmQgcmV0YWluaW5nIHRoZSBzeW1ib2wgb3JkZXJcbiAgIGZvciBjb2RlcyB3aXRoIGVxdWFsIGxlbmd0aHMuICBUaGVuIHRoZSBjb2RlIHN0YXJ0cyB3aXRoIGFsbCB6ZXJvIGJpdHNcbiAgIGZvciB0aGUgZmlyc3QgY29kZSBvZiB0aGUgc2hvcnRlc3QgbGVuZ3RoLCBhbmQgdGhlIGNvZGVzIGFyZSBpbnRlZ2VyXG4gICBpbmNyZW1lbnRzIGZvciB0aGUgc2FtZSBsZW5ndGgsIGFuZCB6ZXJvcyBhcmUgYXBwZW5kZWQgYXMgdGhlIGxlbmd0aFxuICAgaW5jcmVhc2VzLiAgRm9yIHRoZSBkZWZsYXRlIGZvcm1hdCwgdGhlc2UgYml0cyBhcmUgc3RvcmVkIGJhY2t3YXJkc1xuICAgZnJvbSB0aGVpciBtb3JlIG5hdHVyYWwgaW50ZWdlciBpbmNyZW1lbnQgb3JkZXJpbmcsIGFuZCBzbyB3aGVuIHRoZVxuICAgZGVjb2RpbmcgdGFibGVzIGFyZSBidWlsdCBpbiB0aGUgbGFyZ2UgbG9vcCBiZWxvdywgdGhlIGludGVnZXIgY29kZXNcbiAgIGFyZSBpbmNyZW1lbnRlZCBiYWNrd2FyZHMuXG5cbiAgIFRoaXMgcm91dGluZSBhc3N1bWVzLCBidXQgZG9lcyBub3QgY2hlY2ssIHRoYXQgYWxsIG9mIHRoZSBlbnRyaWVzIGluXG4gICBsZW5zW10gYXJlIGluIHRoZSByYW5nZSAwLi5NQVhCSVRTLiAgVGhlIGNhbGxlciBtdXN0IGFzc3VyZSB0aGlzLlxuICAgMS4uTUFYQklUUyBpcyBpbnRlcnByZXRlZCBhcyB0aGF0IGNvZGUgbGVuZ3RoLiAgemVybyBtZWFucyB0aGF0IHRoYXRcbiAgIHN5bWJvbCBkb2VzIG5vdCBvY2N1ciBpbiB0aGlzIGNvZGUuXG5cbiAgIFRoZSBjb2RlcyBhcmUgc29ydGVkIGJ5IGNvbXB1dGluZyBhIGNvdW50IG9mIGNvZGVzIGZvciBlYWNoIGxlbmd0aCxcbiAgIGNyZWF0aW5nIGZyb20gdGhhdCBhIHRhYmxlIG9mIHN0YXJ0aW5nIGluZGljZXMgZm9yIGVhY2ggbGVuZ3RoIGluIHRoZVxuICAgc29ydGVkIHRhYmxlLCBhbmQgdGhlbiBlbnRlcmluZyB0aGUgc3ltYm9scyBpbiBvcmRlciBpbiB0aGUgc29ydGVkXG4gICB0YWJsZS4gIFRoZSBzb3J0ZWQgdGFibGUgaXMgd29ya1tdLCB3aXRoIHRoYXQgc3BhY2UgYmVpbmcgcHJvdmlkZWQgYnlcbiAgIHRoZSBjYWxsZXIuXG5cbiAgIFRoZSBsZW5ndGggY291bnRzIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3NlcyBhcyB3ZWxsLCBpLmUuIGZpbmRpbmdcbiAgIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGxlbmd0aCBjb2RlcywgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgYXJlIGFueVxuICAgY29kZXMgYXQgYWxsLCBjaGVja2luZyBmb3IgYSB2YWxpZCBzZXQgb2YgbGVuZ3RocywgYW5kIGxvb2tpbmcgYWhlYWRcbiAgIGF0IGxlbmd0aCBjb3VudHMgdG8gZGV0ZXJtaW5lIHN1Yi10YWJsZSBzaXplcyB3aGVuIGJ1aWxkaW5nIHRoZVxuICAgZGVjb2RpbmcgdGFibGVzLlxuICAgKi9cblxuICAvKiBhY2N1bXVsYXRlIGxlbmd0aHMgZm9yIGNvZGVzIChhc3N1bWVzIGxlbnNbXSBhbGwgaW4gMC4uTUFYQklUUykgKi9cbiAgZm9yIChsZW4gPSAwOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHtcbiAgICBjb3VudFtsZW5dID0gMDtcbiAgfVxuICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykge1xuICAgIGNvdW50W2xlbnNbbGVuc19pbmRleCArIHN5bV1dKys7XG4gIH1cblxuICAvKiBib3VuZCBjb2RlIGxlbmd0aHMsIGZvcmNlIHJvb3QgdG8gYmUgd2l0aGluIGNvZGUgbGVuZ3RocyAqL1xuICByb290ID0gYml0cztcbiAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHtcbiAgICBpZiAoY291bnRbbWF4XSAhPT0gMCkgeyBicmVhazsgfVxuICB9XG4gIGlmIChyb290ID4gbWF4KSB7XG4gICAgcm9vdCA9IG1heDtcbiAgfVxuICBpZiAobWF4ID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogbm8gc3ltYm9scyB0byBjb2RlIGF0IGFsbCAqL1xuICAgIC8vdGFibGUub3Bbb3B0cy50YWJsZV9pbmRleF0gPSA2NDsgIC8vaGVyZS5vcCA9ICh2YXIgY2hhcik2NDsgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqL1xuICAgIC8vdGFibGUuYml0c1tvcHRzLnRhYmxlX2luZGV4XSA9IDE7ICAgLy9oZXJlLmJpdHMgPSAodmFyIGNoYXIpMTtcbiAgICAvL3RhYmxlLnZhbFtvcHRzLnRhYmxlX2luZGV4KytdID0gMDsgICAvL2hlcmUudmFsID0gKHZhciBzaG9ydCkwO1xuICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gKDEgPDwgMjQpIHwgKDY0IDw8IDE2KSB8IDA7XG5cblxuICAgIC8vdGFibGUub3Bbb3B0cy50YWJsZV9pbmRleF0gPSA2NDtcbiAgICAvL3RhYmxlLmJpdHNbb3B0cy50YWJsZV9pbmRleF0gPSAxO1xuICAgIC8vdGFibGUudmFsW29wdHMudGFibGVfaW5kZXgrK10gPSAwO1xuICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gKDEgPDwgMjQpIHwgKDY0IDw8IDE2KSB8IDA7XG5cbiAgICBvcHRzLmJpdHMgPSAxO1xuICAgIHJldHVybiAwOyAgICAgLyogbm8gc3ltYm9scywgYnV0IHdhaXQgZm9yIGRlY29kaW5nIHRvIHJlcG9ydCBlcnJvciAqL1xuICB9XG4gIGZvciAobWluID0gMTsgbWluIDwgbWF4OyBtaW4rKykge1xuICAgIGlmIChjb3VudFttaW5dICE9PSAwKSB7IGJyZWFrOyB9XG4gIH1cbiAgaWYgKHJvb3QgPCBtaW4pIHtcbiAgICByb290ID0gbWluO1xuICB9XG5cbiAgLyogY2hlY2sgZm9yIGFuIG92ZXItc3Vic2NyaWJlZCBvciBpbmNvbXBsZXRlIHNldCBvZiBsZW5ndGhzICovXG4gIGxlZnQgPSAxO1xuICBmb3IgKGxlbiA9IDE7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykge1xuICAgIGxlZnQgPDw9IDE7XG4gICAgbGVmdCAtPSBjb3VudFtsZW5dO1xuICAgIGlmIChsZWZ0IDwgMCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gICAgICAgIC8qIG92ZXItc3Vic2NyaWJlZCAqL1xuICB9XG4gIGlmIChsZWZ0ID4gMCAmJiAodHlwZSA9PT0gQ09ERVMgfHwgbWF4ICE9PSAxKSkge1xuICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogaW5jb21wbGV0ZSBzZXQgKi9cbiAgfVxuXG4gIC8qIGdlbmVyYXRlIG9mZnNldHMgaW50byBzeW1ib2wgdGFibGUgZm9yIGVhY2ggbGVuZ3RoIGZvciBzb3J0aW5nICovXG4gIG9mZnNbMV0gPSAwO1xuICBmb3IgKGxlbiA9IDE7IGxlbiA8IE1BWEJJVFM7IGxlbisrKSB7XG4gICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07XG4gIH1cblxuICAvKiBzb3J0IHN5bWJvbHMgYnkgbGVuZ3RoLCBieSBzeW1ib2wgb3JkZXIgd2l0aGluIGVhY2ggbGVuZ3RoICovXG4gIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7XG4gICAgaWYgKGxlbnNbbGVuc19pbmRleCArIHN5bV0gIT09IDApIHtcbiAgICAgIHdvcmtbb2Zmc1tsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrXSA9IHN5bTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgQ3JlYXRlIGFuZCBmaWxsIGluIGRlY29kaW5nIHRhYmxlcy4gIEluIHRoaXMgbG9vcCwgdGhlIHRhYmxlIGJlaW5nXG4gICBmaWxsZWQgaXMgYXQgbmV4dCBhbmQgaGFzIGN1cnIgaW5kZXggYml0cy4gIFRoZSBjb2RlIGJlaW5nIHVzZWQgaXMgaHVmZlxuICAgd2l0aCBsZW5ndGggbGVuLiAgVGhhdCBjb2RlIGlzIGNvbnZlcnRlZCB0byBhbiBpbmRleCBieSBkcm9wcGluZyBkcm9wXG4gICBiaXRzIG9mZiBvZiB0aGUgYm90dG9tLiAgRm9yIGNvZGVzIHdoZXJlIGxlbiBpcyBsZXNzIHRoYW4gZHJvcCArIGN1cnIsXG4gICB0aG9zZSB0b3AgZHJvcCArIGN1cnIgLSBsZW4gYml0cyBhcmUgaW5jcmVtZW50ZWQgdGhyb3VnaCBhbGwgdmFsdWVzIHRvXG4gICBmaWxsIHRoZSB0YWJsZSB3aXRoIHJlcGxpY2F0ZWQgZW50cmllcy5cblxuICAgcm9vdCBpcyB0aGUgbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHRoZSByb290IHRhYmxlLiAgV2hlbiBsZW4gZXhjZWVkc1xuICAgcm9vdCwgc3ViLXRhYmxlcyBhcmUgY3JlYXRlZCBwb2ludGVkIHRvIGJ5IHRoZSByb290IGVudHJ5IHdpdGggYW4gaW5kZXhcbiAgIG9mIHRoZSBsb3cgcm9vdCBiaXRzIG9mIGh1ZmYuICBUaGlzIGlzIHNhdmVkIGluIGxvdyB0byBjaGVjayBmb3Igd2hlbiBhXG4gICBuZXcgc3ViLXRhYmxlIHNob3VsZCBiZSBzdGFydGVkLiAgZHJvcCBpcyB6ZXJvIHdoZW4gdGhlIHJvb3QgdGFibGUgaXNcbiAgIGJlaW5nIGZpbGxlZCwgYW5kIGRyb3AgaXMgcm9vdCB3aGVuIHN1Yi10YWJsZXMgYXJlIGJlaW5nIGZpbGxlZC5cblxuICAgV2hlbiBhIG5ldyBzdWItdGFibGUgaXMgbmVlZGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9vayBhaGVhZCBpbiB0aGVcbiAgIGNvZGUgbGVuZ3RocyB0byBkZXRlcm1pbmUgd2hhdCBzaXplIHN1Yi10YWJsZSBpcyBuZWVkZWQuICBUaGUgbGVuZ3RoXG4gICBjb3VudHMgYXJlIHVzZWQgZm9yIHRoaXMsIGFuZCBzbyBjb3VudFtdIGlzIGRlY3JlbWVudGVkIGFzIGNvZGVzIGFyZVxuICAgZW50ZXJlZCBpbiB0aGUgdGFibGVzLlxuXG4gICB1c2VkIGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IHRhYmxlIGVudHJpZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZVxuICAgcHJvdmlkZWQgKnRhYmxlIHNwYWNlLiAgSXQgaXMgY2hlY2tlZCBmb3IgTEVOUyBhbmQgRElTVCB0YWJsZXMgYWdhaW5zdFxuICAgdGhlIGNvbnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hhbmdlcyBpblxuICAgdGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplIGNvbnN0YW50cy4gIFNlZSB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaFxuICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbiAgIHN5bSBpbmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzIHdoZW5cbiAgIGFsbCBjb2RlcyBvZiBsZW5ndGggbWF4LCBpLmUuIGFsbCBjb2RlcywgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIFRoaXNcbiAgIHJvdXRpbmUgcGVybWl0cyBpbmNvbXBsZXRlIGNvZGVzLCBzbyBhbm90aGVyIGxvb3AgYWZ0ZXIgdGhpcyBvbmUgZmlsbHNcbiAgIGluIHRoZSByZXN0IG9mIHRoZSBkZWNvZGluZyB0YWJsZXMgd2l0aCBpbnZhbGlkIGNvZGUgbWFya2Vycy5cbiAgICovXG5cbiAgLyogc2V0IHVwIGZvciBjb2RlIHR5cGUgKi9cbiAgLy8gcG9vciBtYW4gb3B0aW1pemF0aW9uIC0gdXNlIGlmLWVsc2UgaW5zdGVhZCBvZiBzd2l0Y2gsXG4gIC8vIHRvIGF2b2lkIGRlb3B0cyBpbiBvbGQgdjhcbiAgaWYgKHR5cGUgPT09IENPREVTKSB7XG4gICAgYmFzZSA9IGV4dHJhID0gd29yazsgICAgLyogZHVtbXkgdmFsdWUtLW5vdCB1c2VkICovXG4gICAgZW5kID0gMTk7XG5cbiAgfSBlbHNlIGlmICh0eXBlID09PSBMRU5TKSB7XG4gICAgYmFzZSA9IGxiYXNlO1xuICAgIGJhc2VfaW5kZXggLT0gMjU3O1xuICAgIGV4dHJhID0gbGV4dDtcbiAgICBleHRyYV9pbmRleCAtPSAyNTc7XG4gICAgZW5kID0gMjU2O1xuXG4gIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBESVNUUyAqL1xuICAgIGJhc2UgPSBkYmFzZTtcbiAgICBleHRyYSA9IGRleHQ7XG4gICAgZW5kID0gLTE7XG4gIH1cblxuICAvKiBpbml0aWFsaXplIG9wdHMgZm9yIGxvb3AgKi9cbiAgaHVmZiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgKi9cbiAgc3ltID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgc3ltYm9sICovXG4gIGxlbiA9IG1pbjsgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIGxlbmd0aCAqL1xuICBuZXh0ID0gdGFibGVfaW5kZXg7ICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIHRvIGZpbGwgaW4gKi9cbiAgY3VyciA9IHJvb3Q7ICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgdGFibGUgaW5kZXggYml0cyAqL1xuICBkcm9wID0gMDsgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBiaXRzIHRvIGRyb3AgZnJvbSBjb2RlIGZvciBpbmRleCAqL1xuICBsb3cgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogdHJpZ2dlciBuZXcgc3ViLXRhYmxlIHdoZW4gbGVuID4gcm9vdCAqL1xuICB1c2VkID0gMSA8PCByb290OyAgICAgICAgICAvKiB1c2Ugcm9vdCB0YWJsZSBlbnRyaWVzICovXG4gIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovXG5cbiAgLyogY2hlY2sgYXZhaWxhYmxlIHRhYmxlIHNwYWNlICovXG4gIGlmICgodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8XG4gICAgKHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovXG4gIGZvciAoOzspIHtcbiAgICAvKiBjcmVhdGUgdGFibGUgZW50cnkgKi9cbiAgICBoZXJlX2JpdHMgPSBsZW4gLSBkcm9wO1xuICAgIGlmICh3b3JrW3N5bV0gPCBlbmQpIHtcbiAgICAgIGhlcmVfb3AgPSAwO1xuICAgICAgaGVyZV92YWwgPSB3b3JrW3N5bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHdvcmtbc3ltXSA+IGVuZCkge1xuICAgICAgaGVyZV9vcCA9IGV4dHJhW2V4dHJhX2luZGV4ICsgd29ya1tzeW1dXTtcbiAgICAgIGhlcmVfdmFsID0gYmFzZVtiYXNlX2luZGV4ICsgd29ya1tzeW1dXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBoZXJlX29wID0gMzIgKyA2NDsgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi9cbiAgICAgIGhlcmVfdmFsID0gMDtcbiAgICB9XG5cbiAgICAvKiByZXBsaWNhdGUgZm9yIHRob3NlIGluZGljZXMgd2l0aCBsb3cgbGVuIGJpdHMgZXF1YWwgdG8gaHVmZiAqL1xuICAgIGluY3IgPSAxIDw8IChsZW4gLSBkcm9wKTtcbiAgICBmaWxsID0gMSA8PCBjdXJyO1xuICAgIG1pbiA9IGZpbGw7ICAgICAgICAgICAgICAgICAvKiBzYXZlIG9mZnNldCB0byBuZXh0IHRhYmxlICovXG4gICAgZG8ge1xuICAgICAgZmlsbCAtPSBpbmNyO1xuICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSAoaGVyZV9iaXRzIDw8IDI0KSB8IChoZXJlX29wIDw8IDE2KSB8IGhlcmVfdmFsIHwwO1xuICAgIH0gd2hpbGUgKGZpbGwgIT09IDApO1xuXG4gICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi9cbiAgICBpbmNyID0gMSA8PCAobGVuIC0gMSk7XG4gICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7XG4gICAgICBpbmNyID4+PSAxO1xuICAgIH1cbiAgICBpZiAoaW5jciAhPT0gMCkge1xuICAgICAgaHVmZiAmPSBpbmNyIC0gMTtcbiAgICAgIGh1ZmYgKz0gaW5jcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaHVmZiA9IDA7XG4gICAgfVxuXG4gICAgLyogZ28gdG8gbmV4dCBzeW1ib2wsIHVwZGF0ZSBjb3VudCwgbGVuICovXG4gICAgc3ltKys7XG4gICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkge1xuICAgICAgaWYgKGxlbiA9PT0gbWF4KSB7IGJyZWFrOyB9XG4gICAgICBsZW4gPSBsZW5zW2xlbnNfaW5kZXggKyB3b3JrW3N5bV1dO1xuICAgIH1cblxuICAgIC8qIGNyZWF0ZSBuZXcgc3ViLXRhYmxlIGlmIG5lZWRlZCAqL1xuICAgIGlmIChsZW4gPiByb290ICYmIChodWZmICYgbWFzaykgIT09IGxvdykge1xuICAgICAgLyogaWYgZmlyc3QgdGltZSwgdHJhbnNpdGlvbiB0byBzdWItdGFibGVzICovXG4gICAgICBpZiAoZHJvcCA9PT0gMCkge1xuICAgICAgICBkcm9wID0gcm9vdDtcbiAgICAgIH1cblxuICAgICAgLyogaW5jcmVtZW50IHBhc3QgbGFzdCB0YWJsZSAqL1xuICAgICAgbmV4dCArPSBtaW47ICAgICAgICAgICAgLyogaGVyZSBtaW4gaXMgMSA8PCBjdXJyICovXG5cbiAgICAgIC8qIGRldGVybWluZSBsZW5ndGggb2YgbmV4dCB0YWJsZSAqL1xuICAgICAgY3VyciA9IGxlbiAtIGRyb3A7XG4gICAgICBsZWZ0ID0gMSA8PCBjdXJyO1xuICAgICAgd2hpbGUgKGN1cnIgKyBkcm9wIDwgbWF4KSB7XG4gICAgICAgIGxlZnQgLT0gY291bnRbY3VyciArIGRyb3BdO1xuICAgICAgICBpZiAobGVmdCA8PSAwKSB7IGJyZWFrOyB9XG4gICAgICAgIGN1cnIrKztcbiAgICAgICAgbGVmdCA8PD0gMTtcbiAgICAgIH1cblxuICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqL1xuICAgICAgdXNlZCArPSAxIDw8IGN1cnI7XG4gICAgICBpZiAoKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fFxuICAgICAgICAodHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8qIHBvaW50IGVudHJ5IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovXG4gICAgICBsb3cgPSBodWZmICYgbWFzaztcbiAgICAgIC8qdGFibGUub3BbbG93XSA9IGN1cnI7XG4gICAgICB0YWJsZS5iaXRzW2xvd10gPSByb290O1xuICAgICAgdGFibGUudmFsW2xvd10gPSBuZXh0IC0gb3B0cy50YWJsZV9pbmRleDsqL1xuICAgICAgdGFibGVbbG93XSA9IChyb290IDw8IDI0KSB8IChjdXJyIDw8IDE2KSB8IChuZXh0IC0gdGFibGVfaW5kZXgpIHwwO1xuICAgIH1cbiAgfVxuXG4gIC8qIGZpbGwgaW4gcmVtYWluaW5nIHRhYmxlIGVudHJ5IGlmIGNvZGUgaXMgaW5jb21wbGV0ZSAoZ3VhcmFudGVlZCB0byBoYXZlXG4gICBhdCBtb3N0IG9uZSByZW1haW5pbmcgZW50cnksIHNpbmNlIGlmIHRoZSBjb2RlIGlzIGluY29tcGxldGUsIHRoZVxuICAgbWF4aW11bSBjb2RlIGxlbmd0aCB0aGF0IHdhcyBhbGxvd2VkIHRvIGdldCB0aGlzIGZhciBpcyBvbmUgYml0KSAqL1xuICBpZiAoaHVmZiAhPT0gMCkge1xuICAgIC8vdGFibGUub3BbbmV4dCArIGh1ZmZdID0gNjQ7ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqL1xuICAgIC8vdGFibGUuYml0c1tuZXh0ICsgaHVmZl0gPSBsZW4gLSBkcm9wO1xuICAgIC8vdGFibGUudmFsW25leHQgKyBodWZmXSA9IDA7XG4gICAgdGFibGVbbmV4dCArIGh1ZmZdID0gKChsZW4gLSBkcm9wKSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwwO1xuICB9XG5cbiAgLyogc2V0IHJldHVybiBwYXJhbWV0ZXJzICovXG4gIC8vb3B0cy50YWJsZV9pbmRleCArPSB1c2VkO1xuICBvcHRzLmJpdHMgPSByb290O1xuICByZXR1cm4gMDtcbn07XG5cbn0se1wiLi4vdXRpbHMvY29tbW9uXCI6MzA0fV0sMzE0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgMjogICAgICAnbmVlZCBkaWN0aW9uYXJ5JywgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovXG4gIDE6ICAgICAgJ3N0cmVhbSBlbmQnLCAgICAgICAgICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqL1xuICAwOiAgICAgICcnLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi9cbiAgJy0xJzogICAnZmlsZSBlcnJvcicsICAgICAgICAgIC8qIFpfRVJSTk8gICAgICAgICAoLTEpICovXG4gICctMic6ICAgJ3N0cmVhbSBlcnJvcicsICAgICAgICAvKiBaX1NUUkVBTV9FUlJPUiAgKC0yKSAqL1xuICAnLTMnOiAgICdkYXRhIGVycm9yJywgICAgICAgICAgLyogWl9EQVRBX0VSUk9SICAgICgtMykgKi9cbiAgJy00JzogICAnaW5zdWZmaWNpZW50IG1lbW9yeScsIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovXG4gICctNSc6ICAgJ2J1ZmZlciBlcnJvcicsICAgICAgICAvKiBaX0JVRl9FUlJPUiAgICAgKC01KSAqL1xuICAnLTYnOiAgICdpbmNvbXBhdGlibGUgdmVyc2lvbicgLyogWl9WRVJTSU9OX0VSUk9SICgtNikgKi9cbn07XG5cbn0se31dLDMxNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMvY29tbW9uJyk7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8vdmFyIFpfRklMVEVSRUQgICAgICAgICAgPSAxO1xuLy92YXIgWl9IVUZGTUFOX09OTFkgICAgICA9IDI7XG4vL3ZhciBaX1JMRSAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xuLy92YXIgWl9ERUZBVUxUX1NUUkFURUdZICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbnZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwO1xudmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7XG4vL3ZhciBaX0FTQ0lJICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbmZ1bmN0aW9uIHplcm8oYnVmKSB7IHZhciBsZW4gPSBidWYubGVuZ3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfVxuXG4vLyBGcm9tIHp1dGlsLmhcblxudmFyIFNUT1JFRF9CTE9DSyA9IDA7XG52YXIgU1RBVElDX1RSRUVTID0gMTtcbnZhciBEWU5fVFJFRVMgICAgPSAyO1xuLyogVGhlIHRocmVlIGtpbmRzIG9mIGJsb2NrIHR5cGUgKi9cblxudmFyIE1JTl9NQVRDSCAgICA9IDM7XG52YXIgTUFYX01BVENIICAgID0gMjU4O1xuLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbWF0Y2ggbGVuZ3RocyAqL1xuXG4vLyBGcm9tIGRlZmxhdGUuaFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS5cbiAqL1xuXG52YXIgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG5cbnZhciBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cblxudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xuXG52YXIgSEVBUF9TSVpFICAgICA9IDIgKiBMX0NPREVTICsgMTtcbi8qIG1heGltdW0gaGVhcCBzaXplICovXG5cbnZhciBNQVhfQklUUyAgICAgID0gMTU7XG4vKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi9cblxudmFyIEJ1Zl9zaXplICAgICAgPSAxNjtcbi8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi9cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0YW50c1xuICovXG5cbnZhciBNQVhfQkxfQklUUyA9IDc7XG4vKiBCaXQgbGVuZ3RoIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQkxfQklUUyBiaXRzICovXG5cbnZhciBFTkRfQkxPQ0sgICA9IDI1Njtcbi8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi9cblxudmFyIFJFUF8zXzYgICAgID0gMTY7XG4vKiByZXBlYXQgcHJldmlvdXMgYml0IGxlbmd0aCAzLTYgdGltZXMgKDIgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzNfMTAgICA9IDE3O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMy0xMCB0aW1lcyAgKDMgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzExXzEzOCA9IDE4O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxuLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi9cbnZhciBleHRyYV9sYml0cyA9ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqL1xuICBbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXTtcblxudmFyIGV4dHJhX2RiaXRzID0gICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGRpc3RhbmNlIGNvZGUgKi9cbiAgWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdO1xuXG52YXIgZXh0cmFfYmxiaXRzID0gIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggYml0IGxlbmd0aCBjb2RlICovXG4gIFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XTtcblxudmFyIGJsX29yZGVyID1cbiAgWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO1xuLyogZXNsaW50LWVuYWJsZSBjb21tYS1zcGFjaW5nLGFycmF5LWJyYWNrZXQtc3BhY2luZyAqL1xuXG4vKiBUaGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcyBhcmUgc2VudCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nXG4gKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy5cbiAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuXG4gKi9cblxuLy8gV2UgcHJlLWZpbGwgYXJyYXlzIHdpdGggMCB0byBhdm9pZCB1bmluaXRpYWxpemVkIGdhcHNcblxudmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7IC8qIHNlZSBkZWZpbml0aW9uIG9mIGFycmF5IGRpc3RfY29kZSBiZWxvdyAqL1xuXG4vLyAhISEhIFVzZSBmbGF0IGFycmF5IGluc3RlYWQgb2Ygc3RydWN0dXJlLCBGcmVxID0gaSoyLCBMZW4gPSBpKjIrMVxudmFyIHN0YXRpY19sdHJlZSAgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpO1xuemVybyhzdGF0aWNfbHRyZWUpO1xuLyogVGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUuIFNpbmNlIHRoZSBiaXQgbGVuZ3RocyBhcmUgaW1wb3NlZCwgdGhlcmUgaXMgbm9cbiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyXG4gKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXRcbiAqIGJlbG93KS5cbiAqL1xuXG52YXIgc3RhdGljX2R0cmVlICA9IG5ldyBBcnJheShEX0NPREVTICogMik7XG56ZXJvKHN0YXRpY19kdHJlZSk7XG4vKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNlXG4gKiA1IGJpdHMuKVxuICovXG5cbnZhciBfZGlzdF9jb2RlICAgID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pO1xuemVybyhfZGlzdF9jb2RlKTtcbi8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXNcbiAqIDMgLi4gMjU4LCB0aGUgbGFzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHRvcCA4IGJpdHMgb2ZcbiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLlxuICovXG5cbnZhciBfbGVuZ3RoX2NvZGUgID0gbmV3IEFycmF5KE1BWF9NQVRDSCAtIE1JTl9NQVRDSCArIDEpO1xuemVybyhfbGVuZ3RoX2NvZGUpO1xuLyogbGVuZ3RoIGNvZGUgZm9yIGVhY2ggbm9ybWFsaXplZCBtYXRjaCBsZW5ndGggKDAgPT0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9sZW5ndGggICA9IG5ldyBBcnJheShMRU5HVEhfQ09ERVMpO1xuemVybyhiYXNlX2xlbmd0aCk7XG4vKiBGaXJzdCBub3JtYWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9kaXN0ICAgICA9IG5ldyBBcnJheShEX0NPREVTKTtcbnplcm8oYmFzZV9kaXN0KTtcbi8qIEZpcnN0IG5vcm1hbGl6ZWQgZGlzdGFuY2UgZm9yIGVhY2ggY29kZSAoMCA9IGRpc3RhbmNlIG9mIDEpICovXG5cblxuZnVuY3Rpb24gU3RhdGljVHJlZURlc2Moc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7XG5cbiAgdGhpcy5zdGF0aWNfdHJlZSAgPSBzdGF0aWNfdHJlZTsgIC8qIHN0YXRpYyB0cmVlIG9yIE5VTEwgKi9cbiAgdGhpcy5leHRyYV9iaXRzICAgPSBleHRyYV9iaXRzOyAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovXG4gIHRoaXMuZXh0cmFfYmFzZSAgID0gZXh0cmFfYmFzZTsgICAvKiBiYXNlIGluZGV4IGZvciBleHRyYV9iaXRzICovXG4gIHRoaXMuZWxlbXMgICAgICAgID0gZWxlbXM7ICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlICovXG4gIHRoaXMubWF4X2xlbmd0aCAgID0gbWF4X2xlbmd0aDsgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVzICovXG5cbiAgLy8gc2hvdyBpZiBgc3RhdGljX3RyZWVgIGhhcyBkYXRhIG9yIGR1bW15IC0gbmVlZGVkIGZvciBtb25vbW9ycGhpYyBvYmplY3RzXG4gIHRoaXMuaGFzX3N0cmVlICAgID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoO1xufVxuXG5cbnZhciBzdGF0aWNfbF9kZXNjO1xudmFyIHN0YXRpY19kX2Rlc2M7XG52YXIgc3RhdGljX2JsX2Rlc2M7XG5cblxuZnVuY3Rpb24gVHJlZURlc2MoZHluX3RyZWUsIHN0YXRfZGVzYykge1xuICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7ICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovXG4gIHRoaXMubWF4X2NvZGUgPSAwOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuICB0aGlzLnN0YXRfZGVzYyA9IHN0YXRfZGVzYzsgICAvKiB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdHJlZSAqL1xufVxuXG5cblxuZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHtcbiAgcmV0dXJuIGRpc3QgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYgKyAoZGlzdCA+Pj4gNyldO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogT3V0cHV0IGEgc2hvcnQgTFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uXG4gKiBJTiBhc3NlcnRpb246IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHBlbmRpbmdCdWYuXG4gKi9cbmZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodykgJiAweGZmKSk7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodXNoKSh3KSA+PiA4KSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodyA+Pj4gOCkgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuXG4gKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy5cbiAqL1xuZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPiAoQnVmX3NpemUgLSBsZW5ndGgpKSB7XG4gICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmO1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gICAgcy5iaV9idWYgPSB2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLmJpX3ZhbGlkKTtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplO1xuICB9IGVsc2Uge1xuICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7XG4gIHNlbmRfYml0cyhzLCB0cmVlW2MgKiAyXS8qLkNvZGUqLywgdHJlZVtjICogMiArIDFdLyouTGVuKi8pO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmV2ZXJzZSB0aGUgZmlyc3QgbGVuIGJpdHMgb2YgYSBjb2RlLCB1c2luZyBzdHJhaWdodGZvcndhcmQgY29kZSAoYSBmYXN0ZXJcbiAqIG1ldGhvZCB3b3VsZCB1c2UgYSB0YWJsZSlcbiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTVcbiAqL1xuZnVuY3Rpb24gYmlfcmV2ZXJzZShjb2RlLCBsZW4pIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGRvIHtcbiAgICByZXMgfD0gY29kZSAmIDE7XG4gICAgY29kZSA+Pj49IDE7XG4gICAgcmVzIDw8PSAxO1xuICB9IHdoaWxlICgtLWxlbiA+IDApO1xuICByZXR1cm4gcmVzID4+PiAxO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIsIGtlZXBpbmcgYXQgbW9zdCA3IGJpdHMgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGJpX2ZsdXNoKHMpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPT09IDE2KSB7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgICBzLmJpX2J1ZiA9IDA7XG4gICAgcy5iaV92YWxpZCA9IDA7XG5cbiAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID49IDgpIHtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmICYgMHhmZjtcbiAgICBzLmJpX2J1ZiA+Pj0gODtcbiAgICBzLmJpX3ZhbGlkIC09IDg7XG4gIH1cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgZm9yIGEgdHJlZSBhbmQgdXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoXG4gKiBmb3IgdGhlIGN1cnJlbnQgYmxvY2suXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZFxuICogICAgYWJvdmUgYXJlIHRoZSB0cmVlIG5vZGVzIHNvcnRlZCBieSBpbmNyZWFzaW5nIGZyZXF1ZW5jeS5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGQgbGVuIGlzIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoLCB0aGVcbiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC5cbiAqICAgICBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpcyBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXNcbiAqICAgICBub3QgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZ2VuX2JpdGxlbihzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgICAgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgICAgICAgID0gZGVzYy5keW5fdHJlZTtcbiAgdmFyIG1heF9jb2RlICAgICAgICA9IGRlc2MubWF4X2NvZGU7XG4gIHZhciBzdHJlZSAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGV4dHJhICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7XG4gIHZhciBiYXNlICAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlO1xuICB2YXIgbWF4X2xlbmd0aCAgICAgID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDtcbiAgdmFyIGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovXG4gIHZhciBuLCBtOyAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqL1xuICB2YXIgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi9cbiAgdmFyIGY7ICAgICAgICAgICAgICAvKiBmcmVxdWVuY3kgKi9cbiAgdmFyIG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqL1xuXG4gIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIHMuYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgLyogSW4gYSBmaXJzdCBwYXNzLCBjb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhzICh3aGljaCBtYXlcbiAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlIGJpdCBsZW5ndGggdHJlZSkuXG4gICAqL1xuICB0cmVlW3MuaGVhcFtzLmhlYXBfbWF4XSAqIDIgKyAxXS8qLkxlbiovID0gMDsgLyogcm9vdCBvZiB0aGUgaGVhcCAqL1xuXG4gIGZvciAoaCA9IHMuaGVhcF9tYXggKyAxOyBoIDwgSEVBUF9TSVpFOyBoKyspIHtcbiAgICBuID0gcy5oZWFwW2hdO1xuICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXS8qLkRhZCovICogMiArIDFdLyouTGVuKi8gKyAxO1xuICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkge1xuICAgICAgYml0cyA9IG1heF9sZW5ndGg7XG4gICAgICBvdmVyZmxvdysrO1xuICAgIH1cbiAgICB0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IGJpdHM7XG4gICAgLyogV2Ugb3ZlcndyaXRlIHRyZWVbbl0uRGFkIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQgKi9cblxuICAgIGlmIChuID4gbWF4X2NvZGUpIHsgY29udGludWU7IH0gLyogbm90IGEgbGVhZiBub2RlICovXG5cbiAgICBzLmJsX2NvdW50W2JpdHNdKys7XG4gICAgeGJpdHMgPSAwO1xuICAgIGlmIChuID49IGJhc2UpIHtcbiAgICAgIHhiaXRzID0gZXh0cmFbbiAtIGJhc2VdO1xuICAgIH1cbiAgICBmID0gdHJlZVtuICogMl0vKi5GcmVxKi87XG4gICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTtcbiAgICBpZiAoaGFzX3N0cmVlKSB7XG4gICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdLyouTGVuKi8gKyB4Yml0cyk7XG4gICAgfVxuICB9XG4gIGlmIChvdmVyZmxvdyA9PT0gMCkgeyByZXR1cm47IH1cblxuICAvLyBUcmFjZSgoc3RkZXJyLFwiXFxuYml0IGxlbmd0aCBvdmVyZmxvd1xcblwiKSk7XG4gIC8qIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSBvbiBvYmoyIGFuZCBwaWMgb2YgdGhlIENhbGdhcnkgY29ycHVzICovXG5cbiAgLyogRmluZCB0aGUgZmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi9cbiAgZG8ge1xuICAgIGJpdHMgPSBtYXhfbGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgeyBiaXRzLS07IH1cbiAgICBzLmJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICovXG4gICAgcy5ibF9jb3VudFtiaXRzICsgMV0gKz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqL1xuICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTtcbiAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLFxuICAgICAqIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCBibF9jb3VudFttYXhfbGVuZ3RoXVxuICAgICAqL1xuICAgIG92ZXJmbG93IC09IDI7XG4gIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7XG5cbiAgLyogTm93IHJlY29tcHV0ZSBhbGwgYml0IGxlbmd0aHMsIHNjYW5uaW5nIGluIGluY3JlYXNpbmcgZnJlcXVlbmN5LlxuICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlzIHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsXG4gICAqIGxlbmd0aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRha2VuXG4gICAqIGZyb20gJ2FyJyB3cml0dGVuIGJ5IEhhcnVoaWtvIE9rdW11cmEuKVxuICAgKi9cbiAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7XG4gICAgbiA9IHMuYmxfY291bnRbYml0c107XG4gICAgd2hpbGUgKG4gIT09IDApIHtcbiAgICAgIG0gPSBzLmhlYXBbLS1oXTtcbiAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsgY29udGludWU7IH1cbiAgICAgIGlmICh0cmVlW20gKiAyICsgMV0vKi5MZW4qLyAhPT0gYml0cykge1xuICAgICAgICAvLyBUcmFjZSgoc3RkZXJyLFwiY29kZSAlZCBiaXRzICVkLT4lZFxcblwiLCBtLCB0cmVlW21dLkxlbiwgYml0cykpO1xuICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0vKi5MZW4qLykgKiB0cmVlW20gKiAyXS8qLkZyZXEqLztcbiAgICAgICAgdHJlZVttICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgICAgfVxuICAgICAgbi0tO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogR2VuZXJhdGUgdGhlIGNvZGVzIGZvciBhIGdpdmVuIHRyZWUgYW5kIGJpdCBjb3VudHMgKHdoaWNoIG5lZWQgbm90IGJlXG4gKiBvcHRpbWFsKS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGFycmF5IGJsX2NvdW50IGNvbnRhaW5zIHRoZSBiaXQgbGVuZ3RoIHN0YXRpc3RpY3MgZm9yXG4gKiB0aGUgZ2l2ZW4gdHJlZSBhbmQgdGhlIGZpZWxkIGxlbiBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLlxuICogT1VUIGFzc2VydGlvbjogdGhlIGZpZWxkIGNvZGUgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cyBvZiBub25cbiAqICAgICB6ZXJvIGNvZGUgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KVxuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi9cbi8vICAgIGludCBtYXhfY29kZTsgICAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuLy8gICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqL1xue1xuICB2YXIgbmV4dF9jb2RlID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovXG4gIHZhciBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqL1xuICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi9cbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqL1xuXG4gIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlc1xuICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC5cbiAgICovXG4gIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSAoY29kZSArIGJsX2NvdW50W2JpdHMgLSAxXSkgPDwgMTtcbiAgfVxuICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlXG4gICAqIG11c3QgYmUgYWxsIG9uZXMuXG4gICAqL1xuICAvL0Fzc2VydCAoY29kZSArIGJsX2NvdW50W01BWF9CSVRTXS0xID09ICgxPDxNQVhfQklUUyktMSxcbiAgLy8gICAgICAgIFwiaW5jb25zaXN0ZW50IGJpdCBjb3VudHNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5nZW5fY29kZXM6IG1heF9jb2RlICVkIFwiLCBtYXhfY29kZSkpO1xuXG4gIGZvciAobiA9IDA7ICBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICB2YXIgbGVuID0gdHJlZVtuICogMiArIDFdLyouTGVuKi87XG4gICAgaWYgKGxlbiA9PT0gMCkgeyBjb250aW51ZTsgfVxuICAgIC8qIE5vdyByZXZlcnNlIHRoZSBiaXRzICovXG4gICAgdHJlZVtuICogMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7XG5cbiAgICAvL1RyYWNlY3YodHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsXCJcXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpIFwiLFxuICAgIC8vICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4dF9jb2RlW2xlbl0tMSkpO1xuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB2YXJpb3VzICdjb25zdGFudCcgdGFibGVzLlxuICovXG5mdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHtcbiAgdmFyIG47ICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqL1xuICB2YXIgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1ZSAqL1xuICB2YXIgY29kZTsgICAgIC8qIGNvZGUgdmFsdWUgKi9cbiAgdmFyIGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqL1xuICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTtcbiAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0cmVlICovXG5cbiAgLy8gZG8gY2hlY2sgaW4gX3RyX2luaXQoKVxuICAvL2lmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47XG5cbiAgLyogRm9yIHNvbWUgZW1iZWRkZWQgdGFyZ2V0cywgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IGluaXRpYWxpemVkOiAqL1xuLyojaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlNcbiAgc3RhdGljX2xfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19sdHJlZTtcbiAgc3RhdGljX2xfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfbGJpdHM7XG4gIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7XG4gIHN0YXRpY19kX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2RiaXRzO1xuICBzdGF0aWNfYmxfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfYmxiaXRzO1xuI2VuZGlmKi9cblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGxlbmd0aCAoMC4uMjU1KSAtPiBsZW5ndGggY29kZSAoMC4uMjgpICovXG4gIGxlbmd0aCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHtcbiAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfbGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAobGVuZ3RoID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogbGVuZ3RoICE9IDI1NlwiKTtcbiAgLyogTm90ZSB0aGF0IHRoZSBsZW5ndGggMjU1IChtYXRjaCBsZW5ndGggMjU4KSBjYW4gYmUgcmVwcmVzZW50ZWRcbiAgICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwgc28gd2VcbiAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVuY29kaW5nOlxuICAgKi9cbiAgX2xlbmd0aF9jb2RlW2xlbmd0aCAtIDFdID0gY29kZTtcblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBjb2RlICgwLi4yOSkgKi9cbiAgZGlzdCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgY29kZSsrKSB7XG4gICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTZcIik7XG4gIGRpc3QgPj49IDc7IC8qIGZyb20gbm93IG9uLCBhbGwgZGlzdGFuY2VzIGFyZSBkaXZpZGVkIGJ5IDEyOCAqL1xuICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNztcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgKGV4dHJhX2RiaXRzW2NvZGVdIC0gNykpOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyXCIpO1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi9cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7XG4gICAgYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgbiA9IDA7XG4gIHdoaWxlIChuIDw9IDE0Mykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI1NSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA5O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs5XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI3OSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA3O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs3XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI4Nykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0aGVtIGluIHRoZVxuICAgKiB0cmVlIGNvbnN0cnVjdGlvbiB0byBnZXQgYSBjYW5vbmljYWwgSHVmZm1hbiB0cmVlIChsb25nZXN0IGNvZGVcbiAgICogYWxsIG9uZXMpXG4gICAqL1xuICBnZW5fY29kZXMoc3RhdGljX2x0cmVlLCBMX0NPREVTICsgMSwgYmxfY291bnQpO1xuXG4gIC8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZSBpcyB0cml2aWFsOiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDU7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobiwgNSk7XG4gIH1cblxuICAvLyBOb3cgZGF0YSByZWFkeSBhbmQgd2UgY2FuIGluaXQgc3RhdGljIHRyZWVzXG4gIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMgKyAxLCBMX0NPREVTLCBNQVhfQklUUyk7XG4gIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFMpO1xuICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgICAgICAgICBCTF9DT0RFUywgTUFYX0JMX0JJVFMpO1xuXG4gIC8vc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIGEgbmV3IGJsb2NrLlxuICovXG5mdW5jdGlvbiBpbml0X2Jsb2NrKHMpIHtcbiAgdmFyIG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqL1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIHRyZWVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUzsgIG4rKykgeyBzLmR5bl9sdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG4gIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyAgbisrKSB7IHMuZHluX2R0cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsgcy5ibF90cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cblxuICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXS8qLkZyZXEqLyA9IDE7XG4gIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7XG4gIHMubGFzdF9saXQgPSBzLm1hdGNoZXMgPSAwO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5XG4gKi9cbmZ1bmN0aW9uIGJpX3dpbmR1cChzKVxue1xuICBpZiAocy5iaV92YWxpZCA+IDgpIHtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7XG4gICAgLy9wdXRfYnl0ZShzLCAoQnl0ZSlzLT5iaV9idWYpO1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWY7XG4gIH1cbiAgcy5iaV9idWYgPSAwO1xuICBzLmJpX3ZhbGlkID0gMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5IGEgc3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0c1xuICogb25lJ3MgY29tcGxlbWVudCBpZiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcilcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAgICAqYnVmOyAgICAvKiB0aGUgaW5wdXQgZGF0YSAqL1xuLy91bnNpZ25lZCBsZW47ICAgICAvKiBpdHMgbGVuZ3RoICovXG4vL2ludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqL1xue1xuICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovXG5cbiAgaWYgKGhlYWRlcikge1xuICAgIHB1dF9zaG9ydChzLCBsZW4pO1xuICAgIHB1dF9zaG9ydChzLCB+bGVuKTtcbiAgfVxuLy8gIHdoaWxlIChsZW4tLSkge1xuLy8gICAgcHV0X2J5dGUocywgKmJ1ZisrKTtcbi8vICB9XG4gIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTtcbiAgcy5wZW5kaW5nICs9IGxlbjtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wYXJlcyB0byBzdWJ0cmVlcywgdXNpbmcgdGhlIHRyZWUgZGVwdGggYXMgdGllIGJyZWFrZXIgd2hlblxuICogdGhlIHN1YnRyZWVzIGhhdmUgZXF1YWwgZnJlcXVlbmN5LiBUaGlzIG1pbmltaXplcyB0aGUgd29yc3QgY2FzZSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIHtcbiAgdmFyIF9uMiA9IG4gKiAyO1xuICB2YXIgX20yID0gbSAqIDI7XG4gIHJldHVybiAodHJlZVtfbjJdLyouRnJlcSovIDwgdHJlZVtfbTJdLyouRnJlcSovIHx8XG4gICAgICAgICAodHJlZVtfbjJdLyouRnJlcSovID09PSB0cmVlW19tMl0vKi5GcmVxKi8gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZXN0b3JlIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyBkb3duIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IG5vZGUgayxcbiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28gc29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nXG4gKiB3aGVuIHRoZSBoZWFwIHByb3BlcnR5IGlzIHJlLWVzdGFibGlzaGVkIChlYWNoIGZhdGhlciBzbWFsbGVyIHRoYW4gaXRzXG4gKiB0d28gc29ucykuXG4gKi9cbmZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBjdF9kYXRhICp0cmVlOyAgLyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqL1xuLy8gICAgaW50IGs7ICAgICAgICAgICAgICAgLyogbm9kZSB0byBtb3ZlIGRvd24gKi9cbntcbiAgdmFyIHYgPSBzLmhlYXBba107XG4gIHZhciBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqL1xuICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7XG4gICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi9cbiAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiZcbiAgICAgIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAqL1xuICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsgYnJlYWs7IH1cblxuICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qgc29uICovXG4gICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdO1xuICAgIGsgPSBqO1xuXG4gICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBzb24gb2YgayAqL1xuICAgIGogPDw9IDE7XG4gIH1cbiAgcy5oZWFwW2tdID0gdjtcbn1cblxuXG4vLyBpbmxpbmVkIG1hbnVhbGx5XG4vLyB2YXIgU01BTExFU1QgPSAxO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGJsb2NrIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgZ2l2ZW4gSHVmZm1hbiB0cmVlc1xuICovXG5mdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqL1xuLy8gICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbntcbiAgdmFyIGRpc3Q7ICAgICAgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqL1xuICB2YXIgbHggPSAwOyAgICAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi9cbiAgdmFyIGNvZGU7ICAgICAgICAgICAvKiB0aGUgY29kZSB0byBzZW5kICovXG4gIHZhciBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqL1xuXG4gIGlmIChzLmxhc3RfbGl0ICE9PSAwKSB7XG4gICAgZG8ge1xuICAgICAgZGlzdCA9IChzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDJdIDw8IDgpIHwgKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMiArIDFdKTtcbiAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdO1xuICAgICAgbHgrKztcblxuICAgICAgaWYgKGRpc3QgPT09IDApIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJlZSk7IC8qIHNlbmQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgICAgLy9UcmFjZWN2KGlzZ3JhcGgobGMpLCAoc3RkZXJyLFwiICclYycgXCIsIGxjKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdO1xuICAgICAgICBzZW5kX2NvZGUocywgY29kZSArIExJVEVSQUxTICsgMSwgbHRyZWUpOyAvKiBzZW5kIHRoZSBsZW5ndGggY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyogc2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgICBkaXN0LS07IC8qIGRpc3QgaXMgbm93IHRoZSBtYXRjaCBkaXN0YW5jZSAtIDEgKi9cbiAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTtcbiAgICAgICAgLy9Bc3NlcnQgKGNvZGUgPCBEX0NPREVTLCBcImJhZCBkX2NvZGVcIik7XG5cbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJhIGRpc3RhbmNlIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqL1xuXG4gICAgICAvKiBDaGVjayB0aGF0IHRoZSBvdmVybGF5IGJldHdlZW4gcGVuZGluZ19idWYgYW5kIGRfYnVmK2xfYnVmIGlzIG9rOiAqL1xuICAgICAgLy9Bc3NlcnQoKHVJbnQpKHMtPnBlbmRpbmcpIDwgcy0+bGl0X2J1ZnNpemUgKyAyKmx4LFxuICAgICAgLy8gICAgICAgXCJwZW5kaW5nQnVmIG92ZXJmbG93XCIpO1xuXG4gICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTtcbiAgfVxuXG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0cnVjdCBvbmUgSHVmZm1hbiB0cmVlIGFuZCBhc3NpZ25zIHRoZSBjb2RlIGJpdCBzdHJpbmdzIGFuZCBsZW5ndGhzLlxuICogVXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBibG9jay5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkIGZyZXEgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGRzIGxlbiBhbmQgY29kZSBhcmUgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhcbiAqICAgICBhbmQgY29ycmVzcG9uZGluZyBjb2RlLiBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpc1xuICogICAgIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcyBub3QgbnVsbC4gVGhlIGZpZWxkIG1heF9jb2RlIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgPSBkZXNjLmR5bl90cmVlO1xuICB2YXIgc3RyZWUgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGVsZW1zICAgID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7XG4gIHZhciBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVhcCBlbGVtZW50cyAqL1xuICB2YXIgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4gIHZhciBub2RlOyAgICAgICAgICAvKiBuZXcgbm9kZSBiZWluZyBjcmVhdGVkICovXG5cbiAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJlcXVlbnQgZWxlbWVudCBpblxuICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS5cbiAgICogaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHMuaGVhcF9sZW4gPSAwO1xuICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFO1xuXG4gIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7XG4gICAgaWYgKHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjtcbiAgICAgIHMuZGVwdGhbbl0gPSAwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiBUaGUgcGt6aXAgZm9ybWF0IHJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIGRpc3RhbmNlIGNvZGUgZXhpc3RzLFxuICAgKiBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgYml0IHNob3VsZCBiZSBzZW50IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmVcbiAgICogcG9zc2libGUgY29kZS4gU28gdG8gYXZvaWQgc3BlY2lhbCBjaGVja3MgbGF0ZXIgb24gd2UgZm9yY2UgYXQgbGVhc3RcbiAgICogdHdvIGNvZGVzIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeS5cbiAgICovXG4gIHdoaWxlIChzLmhlYXBfbGVuIDwgMikge1xuICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7XG4gICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSAxO1xuICAgIHMuZGVwdGhbbm9kZV0gPSAwO1xuICAgIHMub3B0X2xlbi0tO1xuXG4gICAgaWYgKGhhc19zdHJlZSkge1xuICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUgKiAyICsgMV0vKi5MZW4qLztcbiAgICB9XG4gICAgLyogbm9kZSBpcyAwIG9yIDEgc28gaXQgZG9lcyBub3QgaGF2ZSBleHRyYSBiaXRzICovXG4gIH1cbiAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlO1xuXG4gIC8qIFRoZSBlbGVtZW50cyBoZWFwW2hlYXBfbGVuLzIrMSAuLiBoZWFwX2xlbl0gYXJlIGxlYXZlcyBvZiB0aGUgdHJlZSxcbiAgICogZXN0YWJsaXNoIHN1Yi1oZWFwcyBvZiBpbmNyZWFzaW5nIGxlbmd0aHM6XG4gICAqL1xuICBmb3IgKG4gPSAocy5oZWFwX2xlbiA+PiAxLyppbnQgLzIqLyk7IG4gPj0gMTsgbi0tKSB7IHBxZG93bmhlYXAocywgdHJlZSwgbik7IH1cblxuICAvKiBDb25zdHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBieSByZXBlYXRlZGx5IGNvbWJpbmluZyB0aGUgbGVhc3QgdHdvXG4gICAqIGZyZXF1ZW50IG5vZGVzLlxuICAgKi9cbiAgbm9kZSA9IGVsZW1zOyAgICAgICAgICAgICAgLyogbmV4dCBpbnRlcm5hbCBub2RlIG9mIHRoZSB0cmVlICovXG4gIGRvIHtcbiAgICAvL3BxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2YgbGVhc3QgZnJlcXVlbmN5ICovXG4gICAgLyoqKiBwcXJlbW92ZSAqKiovXG4gICAgbiA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTtcbiAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEvKlNNQUxMRVNUKi8pO1xuICAgIC8qKiovXG5cbiAgICBtID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dOyAvKiBtID0gbm9kZSBvZiBuZXh0IGxlYXN0IGZyZXF1ZW5jeSAqL1xuXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBtO1xuXG4gICAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi9cbiAgICB0cmVlW25vZGUgKiAyXS8qLkZyZXEqLyA9IHRyZWVbbiAqIDJdLyouRnJlcSovICsgdHJlZVttICogMl0vKi5GcmVxKi87XG4gICAgcy5kZXB0aFtub2RlXSA9IChzLmRlcHRoW25dID49IHMuZGVwdGhbbV0gPyBzLmRlcHRoW25dIDogcy5kZXB0aFttXSkgKyAxO1xuICAgIHRyZWVbbiAqIDIgKyAxXS8qLkRhZCovID0gdHJlZVttICogMiArIDFdLyouRGFkKi8gPSBub2RlO1xuXG4gICAgLyogYW5kIGluc2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi9cbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBub2RlKys7XG4gICAgcHFkb3duaGVhcChzLCB0cmVlLCAxLypTTUFMTEVTVCovKTtcblxuICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpO1xuXG4gIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dO1xuXG4gIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQuIFdlIGNhbiBub3dcbiAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLlxuICAgKi9cbiAgZ2VuX2JpdGxlbihzLCBkZXNjKTtcblxuICAvKiBUaGUgZmllbGQgbGVuIGlzIG5vdyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGUgYml0IGNvZGVzICovXG4gIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgcy5ibF9jb3VudCk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTY2FuIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIHRvIGRldGVybWluZSB0aGUgZnJlcXVlbmNpZXMgb2YgdGhlIGNvZGVzXG4gKiBpbiB0aGUgYml0IGxlbmd0aCB0cmVlLlxuICovXG5mdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVkICovXG4vLyAgICBpbnQgbWF4X2NvZGU7ICAgIC8qIGFuZCBpdHMgbGFyZ2VzdCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xue1xuICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi9cbiAgdmFyIGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqL1xuXG4gIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi9cblxuICB2YXIgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJlbnQgY29kZSAqL1xuICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovXG4gIHZhciBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi9cblxuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG4gIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0vKi5MZW4qLyA9IDB4ZmZmZjsgLyogZ3VhcmQgKi9cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8gKz0gY291bnQ7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuXG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9XG4gICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdLyouRnJlcSovKys7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0vKi5GcmVxKi8rKztcblxuICAgIH0gZWxzZSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXS8qLkZyZXEqLysrO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuXG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNvZGVzIGluXG4gKiBibF90cmVlLlxuICovXG5mdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXS8qLkxlbiovOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovXG5cbiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi9cbiAgdmFyIG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqL1xuICB2YXIgbWluX2NvdW50ID0gNDsgICAgICAgICAvKiBtaW4gcmVwZWF0IGNvdW50ICovXG5cbiAgLyogdHJlZVttYXhfY29kZSsxXS5MZW4gPSAtMTsgKi8gIC8qIGd1YXJkIGFscmVhZHkgc2V0ICovXG4gIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgbWF4X2NvdW50ID0gMTM4O1xuICAgIG1pbl9jb3VudCA9IDM7XG4gIH1cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBkbyB7IHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7IH0gd2hpbGUgKC0tY291bnQgIT09IDApO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHtcbiAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgXCIgM182P1wiKTtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMik7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfMTFfMTM4LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuICAgIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIG1heF9jb3VudCA9IDY7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG1heF9jb3VudCA9IDc7XG4gICAgICBtaW5fY291bnQgPSA0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpblxuICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykge1xuICB2YXIgbWF4X2JsaW5kZXg7ICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTtcbiAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7XG5cbiAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZTogKi9cbiAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpO1xuICAvKiBvcHRfbGVuIG5vdyBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucywgZXhjZXB0XG4gICAqIHRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RocyBjb2RlcyBhbmQgdGhlIDUrNSs0IGJpdHMgZm9yIHRoZSBjb3VudHMuXG4gICAqL1xuXG4gIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdCBsZW5ndGggY29kZXMgdG8gc2VuZC4gVGhlIHBremlwIGZvcm1hdFxuICAgKiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5c1xuICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pXG4gICAqL1xuICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7XG4gICAgaWYgKHMuYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF0gKiAyICsgMV0vKi5MZW4qLyAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8qIFVwZGF0ZSBvcHRfbGVuIHRvIGluY2x1ZGUgdGhlIGJpdCBsZW5ndGggdHJlZSBhbmQgY291bnRzICovXG4gIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVsZFwiLFxuICAvLyAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpO1xuXG4gIHJldHVybiBtYXhfYmxpbmRleDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZVxuICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuXG4gKiBJTiBhc3NlcnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuXG4gKi9cbmZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGludCBsY29kZXMsIGRjb2RlcywgYmxjb2RlczsgLyogbnVtYmVyIG9mIGNvZGVzIGZvciBlYWNoIHRyZWUgKi9cbntcbiAgdmFyIHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqL1xuXG4gIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgXCJub3QgZW5vdWdoIGNvZGVzXCIpO1xuICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUyxcbiAgLy8gICAgICAgIFwidG9vIG1hbnkgY29kZXNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY291bnRzOiBcIikpO1xuICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsgLyogbm90ICsyNTUgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovXG4gIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCAgIDUpO1xuICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsICA0KTsgLyogbm90IC0zIGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7XG4gICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5ibCBjb2RlICUyZCBcIiwgYmxfb3JkZXJbcmFua10pKTtcbiAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLyouTGVuKi8sIDMpO1xuICB9XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgdHJlZTogc2VudCAlbGRcIiwgcy0+Yml0c19zZW50KSk7XG5cbiAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsgLyogbGl0ZXJhbCB0cmVlICovXG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxubGl0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6XG4gKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlXG4gKiAgICAgICBcImJsYWNrIGxpc3RcIiAoMC4uNiwgMTQuLjI1LCAyOC4uMzEpLlxuICogICAgYikgVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByaW50YWJsZSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJ3aGl0ZSBsaXN0XCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0sIDMyLi4yNTUpLlxuICogLSBCSU5BUlkgb3RoZXJ3aXNlLlxuICogLSBUaGUgZm9sbG93aW5nIHBhcnRpYWxseS1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgZm9ybSBhXG4gKiAgIFwiZ3JheSBsaXN0XCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobTpcbiAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHtcbiAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxhY2stbGlzdGVkIGJ5dGVzXG4gICAqIHNldCBiaXRzIDAuLjYsIDE0Li4yNSwgYW5kIDI4Li4zMVxuICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExXG4gICAqL1xuICB2YXIgYmxhY2tfbWFzayA9IDB4ZjNmZmMwN2Y7XG4gIHZhciBuO1xuXG4gIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoXCJibGFjay1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHtcbiAgICBpZiAoKGJsYWNrX21hc2sgJiAxKSAmJiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSkge1xuICAgICAgcmV0dXJuIFpfQklOQVJZO1xuICAgIH1cbiAgfVxuXG4gIC8qIENoZWNrIGZvciB0ZXh0dWFsIChcIndoaXRlLWxpc3RlZFwiKSBieXRlcy4gKi9cbiAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdLyouRnJlcSovICE9PSAwIHx8XG4gICAgICBzLmR5bl9sdHJlZVsxMyAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgcmV0dXJuIFpfVEVYVDtcbiAgfVxuICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHtcbiAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICByZXR1cm4gWl9URVhUO1xuICAgIH1cbiAgfVxuXG4gIC8qIFRoZXJlIGFyZSBubyBcImJsYWNrLWxpc3RlZFwiIG9yIFwid2hpdGUtbGlzdGVkXCIgYnl0ZXM6XG4gICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9sZXJhdGVkIChcImdyYXktbGlzdGVkXCIpIGJ5dGVzIG9ubHkuXG4gICAqL1xuICByZXR1cm4gWl9CSU5BUlk7XG59XG5cblxudmFyIHN0YXRpY19pbml0X2RvbmUgPSBmYWxzZTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB0cmVlIGRhdGEgc3RydWN0dXJlcyBmb3IgYSBuZXcgemxpYiBzdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIF90cl9pbml0KHMpXG57XG5cbiAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7XG4gICAgdHJfc3RhdGljX2luaXQoKTtcbiAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIHMubF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7XG4gIHMuZF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7XG4gIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTtcblxuICBzLmJpX2J1ZiA9IDA7XG4gIHMuYmlfdmFsaWQgPSAwO1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqL1xuICBpbml0X2Jsb2NrKHMpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHN0b3JlZCBibG9ja1xuICovXG5mdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jayAqL1xuLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi9cbi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqL1xue1xuICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovXG4gIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsgLyogd2l0aCBoZWFkZXIgKi9cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuXG4gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gX3RyX2FsaWduKHMpIHtcbiAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTtcbiAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTtcbiAgYmlfZmx1c2gocyk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWNcbiAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS5cbiAqL1xuZnVuY3Rpb24gX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovXG4vL3VsZyBzdG9yZWRfbGVuOyAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqL1xuLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovXG57XG4gIHZhciBvcHRfbGVuYiwgc3RhdGljX2xlbmI7ICAvKiBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGluIGJ5dGVzICovXG4gIHZhciBtYXhfYmxpbmRleCA9IDA7ICAgICAgICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogQnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgdW5sZXNzIGEgc3RvcmVkIGJsb2NrIGlzIGZvcmNlZCAqL1xuICBpZiAocy5sZXZlbCA+IDApIHtcblxuICAgIC8qIENoZWNrIGlmIHRoZSBmaWxlIGlzIGJpbmFyeSBvciB0ZXh0ICovXG4gICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikge1xuICAgICAgcy5zdHJtLmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7XG4gICAgfVxuXG4gICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICAgIGJ1aWxkX3RyZWUocywgcy5sX2Rlc2MpO1xuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbmxpdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG5cbiAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkXCIsIHMtPm9wdF9sZW4sXG4gICAgLy8gICAgICAgIHMtPnN0YXRpY19sZW4pKTtcbiAgICAvKiBBdCB0aGlzIHBvaW50LCBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGFyZSB0aGUgdG90YWwgYml0IGxlbmd0aHMgb2ZcbiAgICAgKiB0aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLlxuICAgICAqL1xuXG4gICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFib3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUgaW5kZXhcbiAgICAgKiBpbiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC5cbiAgICAgKi9cbiAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7XG5cbiAgICAvKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcuIENvbXB1dGUgdGhlIGJsb2NrIGxlbmd0aHMgaW4gYnl0ZXMuICovXG4gICAgb3B0X2xlbmIgPSAocy5vcHRfbGVuICsgMyArIDcpID4+PiAzO1xuICAgIHN0YXRpY19sZW5iID0gKHMuc3RhdGljX2xlbiArIDMgKyA3KSA+Pj4gMztcblxuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbm9wdCAlbHUoJWx1KSBzdGF0ICVsdSglbHUpIHN0b3JlZCAlbHUgbGl0ICV1IFwiLFxuICAgIC8vICAgICAgICBvcHRfbGVuYiwgcy0+b3B0X2xlbiwgc3RhdGljX2xlbmIsIHMtPnN0YXRpY19sZW4sIHN0b3JlZF9sZW4sXG4gICAgLy8gICAgICAgIHMtPmxhc3RfbGl0KSk7XG5cbiAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIHsgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYjsgfVxuXG4gIH0gZWxzZSB7XG4gICAgLy8gQXNzZXJ0KGJ1ZiAhPSAoY2hhciopMCwgXCJsb3N0IGJ1ZlwiKTtcbiAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iID0gc3RvcmVkX2xlbiArIDU7IC8qIGZvcmNlIGEgc3RvcmVkIGJsb2NrICovXG4gIH1cblxuICBpZiAoKHN0b3JlZF9sZW4gKyA0IDw9IG9wdF9sZW5iKSAmJiAoYnVmICE9PSAtMSkpIHtcbiAgICAvKiA0OiB0d28gd29yZHMgZm9yIHRoZSBsZW5ndGhzICovXG5cbiAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLlxuICAgICAqIE90aGVyd2lzZSB3ZSBjYW4ndCBoYXZlIHByb2Nlc3NlZCBtb3JlIHRoYW4gV1NJWkUgaW5wdXQgYnl0ZXMgc2luY2VcbiAgICAgKiB0aGUgbGFzdCBibG9jayBmbHVzaCwgYmVjYXVzZSBjb21wcmVzc2lvbiB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG9cbiAgICAgKiB0cmFuc2Zvcm0gYSBibG9jayBpbnRvIGEgc3RvcmVkIGJsb2NrLlxuICAgICAqL1xuICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTtcblxuICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7XG5cbiAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7XG5cbiAgfSBlbHNlIHtcbiAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpO1xuICB9XG4gIC8vIEFzc2VydCAocy0+Y29tcHJlc3NlZF9sZW4gPT0gcy0+Yml0c19zZW50LCBcImJhZCBjb21wcmVzc2VkIHNpemVcIik7XG4gIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBtYWRlIG1vZCAyXjMyLCBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gNTEyIE1CXG4gICAqIGFuZCB1TG9uZyBpbXBsZW1lbnRlZCBvbiAzMiBiaXRzLlxuICAgKi9cbiAgaW5pdF9ibG9jayhzKTtcblxuICBpZiAobGFzdCkge1xuICAgIGJpX3dpbmR1cChzKTtcbiAgfVxuICAvLyBUcmFjZXYoKHN0ZGVycixcIlxcbmNvbXBybGVuICVsdSglbHUpIFwiLCBzLT5jb21wcmVzc2VkX2xlbj4+MyxcbiAgLy8gICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNypsYXN0KSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2F2ZSB0aGUgbWF0Y2ggaW5mbyBhbmQgdGFsbHkgdGhlIGZyZXF1ZW5jeSBjb3VudHMuIFJldHVybiB0cnVlIGlmXG4gKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIF90cl90YWxseShzLCBkaXN0LCBsYylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB1bnNpZ25lZCBkaXN0OyAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi9cbi8vICAgIHVuc2lnbmVkIGxjOyAgICAvKiBtYXRjaCBsZW5ndGgtTUlOX01BVENIIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0PT0wKSAqL1xue1xuICAvL3ZhciBvdXRfbGVuZ3RoLCBpbl9sZW5ndGgsIGRjb2RlO1xuXG4gIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSAgICAgPSAoZGlzdCA+Pj4gOCkgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMiArIDFdID0gZGlzdCAmIDB4ZmY7XG5cbiAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDB4ZmY7XG4gIHMubGFzdF9saXQrKztcblxuICBpZiAoZGlzdCA9PT0gMCkge1xuICAgIC8qIGxjIGlzIHRoZSB1bm1hdGNoZWQgY2hhciAqL1xuICAgIHMuZHluX2x0cmVlW2xjICogMl0vKi5GcmVxKi8rKztcbiAgfSBlbHNlIHtcbiAgICBzLm1hdGNoZXMrKztcbiAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgZGlzdC0tOyAgICAgICAgICAgICAvKiBkaXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgLy9Bc3NlcnQoKHVzaClkaXN0IDwgKHVzaClNQVhfRElTVChzKSAmJlxuICAgIC8vICAgICAgICh1c2gpbGMgPD0gKHVzaCkoTUFYX01BVENILU1JTl9NQVRDSCkgJiZcbiAgICAvLyAgICAgICAodXNoKWRfY29kZShkaXN0KSA8ICh1c2gpRF9DT0RFUywgIFwiX3RyX3RhbGx5OiBiYWQgbWF0Y2hcIik7XG5cbiAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXSArIExJVEVSQUxTICsgMSkgKiAyXS8qLkZyZXEqLysrO1xuICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdLyouRnJlcSovKys7XG4gIH1cblxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhdWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcblxuLy8jaWZkZWYgVFJVTkNBVEVfQkxPQ0tcbi8vICAvKiBUcnkgdG8gZ3Vlc3MgaWYgaXQgaXMgcHJvZml0YWJsZSB0byBzdG9wIHRoZSBjdXJyZW50IGJsb2NrIGhlcmUgKi9cbi8vICBpZiAoKHMubGFzdF9saXQgJiAweDFmZmYpID09PSAwICYmIHMubGV2ZWwgPiAyKSB7XG4vLyAgICAvKiBDb21wdXRlIGFuIHVwcGVyIGJvdW5kIGZvciB0aGUgY29tcHJlc3NlZCBsZW5ndGggKi9cbi8vICAgIG91dF9sZW5ndGggPSBzLmxhc3RfbGl0Kjg7XG4vLyAgICBpbl9sZW5ndGggPSBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydDtcbi8vXG4vLyAgICBmb3IgKGRjb2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7XG4vLyAgICAgIG91dF9sZW5ndGggKz0gcy5keW5fZHRyZWVbZGNvZGUqMl0vKi5GcmVxKi8gKiAoNSArIGV4dHJhX2RiaXRzW2Rjb2RlXSk7XG4vLyAgICB9XG4vLyAgICBvdXRfbGVuZ3RoID4+Pj0gMztcbi8vICAgIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5sYXN0X2xpdCAldSwgaW4gJWxkLCBvdXQgfiVsZCglbGQlJSkgXCIsXG4vLyAgICAvLyAgICAgICBzLT5sYXN0X2xpdCwgaW5fbGVuZ3RoLCBvdXRfbGVuZ3RoLFxuLy8gICAgLy8gICAgICAgMTAwTCAtIG91dF9sZW5ndGgqMTAwTC9pbl9sZW5ndGgpKTtcbi8vICAgIGlmIChzLm1hdGNoZXMgPCAocy5sYXN0X2xpdD4+MSkvKmludCAvMiovICYmIG91dF9sZW5ndGggPCAoaW5fbGVuZ3RoPj4xKS8qaW50IC8yKi8pIHtcbi8vICAgICAgcmV0dXJuIHRydWU7XG4vLyAgICB9XG4vLyAgfVxuLy8jZW5kaWZcblxuICByZXR1cm4gKHMubGFzdF9saXQgPT09IHMubGl0X2J1ZnNpemUgLSAxKTtcbiAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSBiZWNhdXNlIG9mIHdyYXBhcm91bmQgYXQgNjRLXG4gICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQgYmVjYXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvXG4gICAqIDY0Sy0xIGJ5dGVzLlxuICAgKi9cbn1cblxuZXhwb3J0cy5fdHJfaW5pdCAgPSBfdHJfaW5pdDtcbmV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jayA9IF90cl9zdG9yZWRfYmxvY2s7XG5leHBvcnRzLl90cl9mbHVzaF9ibG9jayAgPSBfdHJfZmx1c2hfYmxvY2s7XG5leHBvcnRzLl90cl90YWxseSA9IF90cl90YWxseTtcbmV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduO1xuXG59LHtcIi4uL3V0aWxzL2NvbW1vblwiOjMwNH1dLDMxNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuZnVuY3Rpb24gWlN0cmVhbSgpIHtcbiAgLyogbmV4dCBpbnB1dCBieXRlICovXG4gIHRoaXMuaW5wdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG4gIHRoaXMubmV4dF9pbiA9IDA7XG4gIC8qIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgaW5wdXQgKi9cbiAgdGhpcy5hdmFpbF9pbiA9IDA7XG4gIC8qIHRvdGFsIG51bWJlciBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqL1xuICB0aGlzLnRvdGFsX2luID0gMDtcbiAgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovXG4gIHRoaXMub3V0cHV0ID0gbnVsbDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVyc1xuICB0aGlzLm5leHRfb3V0ID0gMDtcbiAgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgb3V0cHV0ICovXG4gIHRoaXMuYXZhaWxfb3V0ID0gMDtcbiAgLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi9cbiAgdGhpcy50b3RhbF9vdXQgPSAwO1xuICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi9cbiAgdGhpcy5tc2cgPSAnJy8qWl9OVUxMKi87XG4gIC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqL1xuICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgLyogYmVzdCBndWVzcyBhYm91dCB0aGUgZGF0YSB0eXBlOiBiaW5hcnkgb3IgdGV4dCAqL1xuICB0aGlzLmRhdGFfdHlwZSA9IDIvKlpfVU5LTk9XTiovO1xuICAvKiBhZGxlcjMyIHZhbHVlIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSAqL1xuICB0aGlzLmFkbGVyID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBaU3RyZWFtO1xuXG59LHt9XSwzMTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxufSx7fV0sMzE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIFRoaXMgbWV0aG9kIG9mIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBuZWVkcyB0byBiZVxuLy8ga2VwdCBpZGVudGljYWwgdG8gdGhlIHdheSBpdCBpcyBvYnRhaW5lZCBpbiBydW50aW1lLmpzXG52YXIgZyA9IChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMgfSkoKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG5cbi8vIFVzZSBgZ2V0T3duUHJvcGVydHlOYW1lc2AgYmVjYXVzZSBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgY2FsbGluZ1xuLy8gYGhhc093blByb3BlcnR5YCBvbiB0aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLlxudmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJlxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG5cbi8vIFNhdmUgdGhlIG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci5cbnZhciBvbGRSdW50aW1lID0gaGFkUnVudGltZSAmJiBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuLy8gRm9yY2UgcmVldmFsdXRhdGlvbiBvZiBydW50aW1lLmpzLlxuZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlcmVxXyhcIi4vcnVudGltZVwiKTtcblxuaWYgKGhhZFJ1bnRpbWUpIHtcbiAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcnVudGltZS5cbiAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBvbGRSdW50aW1lO1xufSBlbHNlIHtcbiAgLy8gUmVtb3ZlIHRoZSBnbG9iYWwgcHJvcGVydHkgYWRkZWQgYnkgcnVudGltZS5qcy5cbiAgdHJ5IHtcbiAgICBkZWxldGUgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbn0se1wiLi9ydW50aW1lXCI6MzE5fV0sMzE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gSW4gc2xvcHB5IG1vZGUsIHVuYm91bmQgYHRoaXNgIHJlZmVycyB0byB0aGUgZ2xvYmFsIG9iamVjdCwgZmFsbGJhY2sgdG9cbiAgLy8gRnVuY3Rpb24gY29uc3RydWN0b3IgaWYgd2UncmUgaW4gZ2xvYmFsIHN0cmljdCBtb2RlLiBUaGF0IGlzIHNhZGx5IGEgZm9ybVxuICAvLyBvZiBpbmRpcmVjdCBldmFsIHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5LlxuICAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpXG4pO1xuXG59LHt9XSwzMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09XCJvYmplY3RcIiYmdHlwZW9mIG1vZHVsZSE9PVwidW5kZWZpbmVkXCIpe21vZHVsZS5leHBvcnRzPWYoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT1cImZ1bmN0aW9uXCImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT1cInVuZGVmaW5lZFwiKXtnPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT1cInVuZGVmaW5lZFwiKXtnPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxmIT09XCJ1bmRlZmluZWRcIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcuUnVzaGEgPSBmKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIF9kZXJlcV89PVwiZnVuY3Rpb25cIiYmX2RlcmVxXztpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgX2RlcmVxXz09XCJmdW5jdGlvblwiJiZfZGVyZXFfO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgYnVuZGxlRm4gPSBhcmd1bWVudHNbM107XG52YXIgc291cmNlcyA9IGFyZ3VtZW50c1s0XTtcbnZhciBjYWNoZSA9IGFyZ3VtZW50c1s1XTtcblxudmFyIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgb3B0aW9ucykge1xuICAgIHZhciB3a2V5O1xuICAgIHZhciBjYWNoZUtleXMgPSBPYmplY3Qua2V5cyhjYWNoZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNhY2hlS2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGNhY2hlS2V5c1tpXTtcbiAgICAgICAgdmFyIGV4cCA9IGNhY2hlW2tleV0uZXhwb3J0cztcbiAgICAgICAgLy8gVXNpbmcgYmFiZWwgYXMgYSB0cmFuc3BpbGVyIHRvIHVzZSBlc21vZHVsZSwgdGhlIGV4cG9ydCB3aWxsIGFsd2F5c1xuICAgICAgICAvLyBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBleHBvcnQgYXMgYSBwcm9wZXJ0eSBvZiBpdC4gVG8gZW5zdXJlXG4gICAgICAgIC8vIHRoZSBleGlzdGluZyBhcGkgYW5kIGJhYmVsIGVzbW9kdWxlIGV4cG9ydHMgYXJlIGJvdGggc3VwcG9ydGVkIHdlXG4gICAgICAgIC8vIGNoZWNrIGZvciBib3RoXG4gICAgICAgIGlmIChleHAgPT09IGZuIHx8IGV4cCAmJiBleHAuZGVmYXVsdCA9PT0gZm4pIHtcbiAgICAgICAgICAgIHdrZXkgPSBrZXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghd2tleSkge1xuICAgICAgICB3a2V5ID0gTWF0aC5mbG9vcihNYXRoLnBvdygxNiwgOCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNik7XG4gICAgICAgIHZhciB3Y2FjaGUgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYWNoZUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gY2FjaGVLZXlzW2ldO1xuICAgICAgICAgICAgd2NhY2hlW2tleV0gPSBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlc1t3a2V5XSA9IFtcbiAgICAgICAgICAgICdmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsnICsgZm4gKyAnKHNlbGYpOyB9JyxcbiAgICAgICAgICAgIHdjYWNoZVxuICAgICAgICBdO1xuICAgIH1cbiAgICB2YXIgc2tleSA9IE1hdGguZmxvb3IoTWF0aC5wb3coMTYsIDgpICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuXG4gICAgdmFyIHNjYWNoZSA9IHt9OyBzY2FjaGVbd2tleV0gPSB3a2V5O1xuICAgIHNvdXJjZXNbc2tleV0gPSBbXG4gICAgICAgICdmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsnICtcbiAgICAgICAgICAgIC8vIHRyeSB0byBjYWxsIGRlZmF1bHQgaWYgZGVmaW5lZCB0byBhbHNvIHN1cHBvcnQgYmFiZWwgZXNtb2R1bGUgZXhwb3J0c1xuICAgICAgICAgICAgJ3ZhciBmID0gcmVxdWlyZSgnICsgc3RyaW5naWZ5KHdrZXkpICsgJyk7JyArXG4gICAgICAgICAgICAnKGYuZGVmYXVsdCA/IGYuZGVmYXVsdCA6IGYpKHNlbGYpOycgK1xuICAgICAgICAnfScsXG4gICAgICAgIHNjYWNoZVxuICAgIF07XG5cbiAgICB2YXIgd29ya2VyU291cmNlcyA9IHt9O1xuICAgIHJlc29sdmVTb3VyY2VzKHNrZXkpO1xuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVNvdXJjZXMoa2V5KSB7XG4gICAgICAgIHdvcmtlclNvdXJjZXNba2V5XSA9IHRydWU7XG5cbiAgICAgICAgZm9yICh2YXIgZGVwUGF0aCBpbiBzb3VyY2VzW2tleV1bMV0pIHtcbiAgICAgICAgICAgIHZhciBkZXBLZXkgPSBzb3VyY2VzW2tleV1bMV1bZGVwUGF0aF07XG4gICAgICAgICAgICBpZiAoIXdvcmtlclNvdXJjZXNbZGVwS2V5XSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVTb3VyY2VzKGRlcEtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3JjID0gJygnICsgYnVuZGxlRm4gKyAnKSh7J1xuICAgICAgICArIE9iamVjdC5rZXlzKHdvcmtlclNvdXJjZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5naWZ5KGtleSkgKyAnOlsnXG4gICAgICAgICAgICAgICAgKyBzb3VyY2VzW2tleV1bMF1cbiAgICAgICAgICAgICAgICArICcsJyArIHN0cmluZ2lmeShzb3VyY2VzW2tleV1bMV0pICsgJ10nXG4gICAgICAgICAgICA7XG4gICAgICAgIH0pLmpvaW4oJywnKVxuICAgICAgICArICd9LHt9LFsnICsgc3RyaW5naWZ5KHNrZXkpICsgJ10pJ1xuICAgIDtcblxuICAgIHZhciBVUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkwgfHwgd2luZG93Lm1velVSTCB8fCB3aW5kb3cubXNVUkw7XG5cbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtzcmNdLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYmFyZSkgeyByZXR1cm4gYmxvYjsgfVxuICAgIHZhciB3b3JrZXJVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybCk7XG4gICAgd29ya2VyLm9iamVjdFVSTCA9IHdvcmtlclVybDtcbiAgICByZXR1cm4gd29ya2VyO1xufTtcblxufSx7fV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG5cInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1lbnYgY29tbW9uanMsIGJyb3dzZXIgKi9cblxudmFyIHJlYWRlciA9IHZvaWQgMDtcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNlbGYuRmlsZVJlYWRlclN5bmMgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJlYWRlciA9IG5ldyBzZWxmLkZpbGVSZWFkZXJTeW5jKCk7XG59XG5cbi8vIENvbnZlcnQgYSBiaW5hcnkgc3RyaW5nIGFuZCB3cml0ZSBpdCB0byB0aGUgaGVhcC5cbi8vIEEgYmluYXJ5IHN0cmluZyBpcyBleHBlY3RlZCB0byBvbmx5IGNvbnRhaW4gY2hhciBjb2RlcyA8IDI1Ni5cbnZhciBjb252U3RyID0gZnVuY3Rpb24gKHN0ciwgSDgsIEgzMiwgc3RhcnQsIGxlbiwgb2ZmKSB7XG4gIHZhciBpID0gdm9pZCAwLFxuICAgICAgb20gPSBvZmYgJSA0LFxuICAgICAgbG0gPSAobGVuICsgb20pICUgNCxcbiAgICAgIGogPSBsZW4gLSBsbTtcbiAgc3dpdGNoIChvbSkge1xuICAgIGNhc2UgMDpcbiAgICAgIEg4W29mZl0gPSBzdHIuY2hhckNvZGVBdChzdGFydCArIDMpO1xuICAgIGNhc2UgMTpcbiAgICAgIEg4W29mZiArIDEgLSAob20gPDwgMSkgfCAwXSA9IHN0ci5jaGFyQ29kZUF0KHN0YXJ0ICsgMik7XG4gICAgY2FzZSAyOlxuICAgICAgSDhbb2ZmICsgMiAtIChvbSA8PCAxKSB8IDBdID0gc3RyLmNoYXJDb2RlQXQoc3RhcnQgKyAxKTtcbiAgICBjYXNlIDM6XG4gICAgICBIOFtvZmYgKyAzIC0gKG9tIDw8IDEpIHwgMF0gPSBzdHIuY2hhckNvZGVBdChzdGFydCk7XG4gIH1cbiAgaWYgKGxlbiA8IGxtICsgKDQgLSBvbSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChpID0gNCAtIG9tOyBpIDwgajsgaSA9IGkgKyA0IHwgMCkge1xuICAgIEgzMltvZmYgKyBpID4+IDJdID0gc3RyLmNoYXJDb2RlQXQoc3RhcnQgKyBpKSA8PCAyNCB8IHN0ci5jaGFyQ29kZUF0KHN0YXJ0ICsgaSArIDEpIDw8IDE2IHwgc3RyLmNoYXJDb2RlQXQoc3RhcnQgKyBpICsgMikgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KHN0YXJ0ICsgaSArIDMpO1xuICB9XG4gIHN3aXRjaCAobG0pIHtcbiAgICBjYXNlIDM6XG4gICAgICBIOFtvZmYgKyBqICsgMSB8IDBdID0gc3RyLmNoYXJDb2RlQXQoc3RhcnQgKyBqICsgMik7XG4gICAgY2FzZSAyOlxuICAgICAgSDhbb2ZmICsgaiArIDIgfCAwXSA9IHN0ci5jaGFyQ29kZUF0KHN0YXJ0ICsgaiArIDEpO1xuICAgIGNhc2UgMTpcbiAgICAgIEg4W29mZiArIGogKyAzIHwgMF0gPSBzdHIuY2hhckNvZGVBdChzdGFydCArIGopO1xuICB9XG59O1xuXG4vLyBDb252ZXJ0IGEgYnVmZmVyIG9yIGFycmF5IGFuZCB3cml0ZSBpdCB0byB0aGUgaGVhcC5cbi8vIFRoZSBidWZmZXIgb3IgYXJyYXkgaXMgZXhwZWN0ZWQgdG8gb25seSBjb250YWluIGVsZW1lbnRzIDwgMjU2LlxudmFyIGNvbnZCdWYgPSBmdW5jdGlvbiAoYnVmLCBIOCwgSDMyLCBzdGFydCwgbGVuLCBvZmYpIHtcbiAgdmFyIGkgPSB2b2lkIDAsXG4gICAgICBvbSA9IG9mZiAlIDQsXG4gICAgICBsbSA9IChsZW4gKyBvbSkgJSA0LFxuICAgICAgaiA9IGxlbiAtIGxtO1xuICBzd2l0Y2ggKG9tKSB7XG4gICAgY2FzZSAwOlxuICAgICAgSDhbb2ZmXSA9IGJ1ZltzdGFydCArIDNdO1xuICAgIGNhc2UgMTpcbiAgICAgIEg4W29mZiArIDEgLSAob20gPDwgMSkgfCAwXSA9IGJ1ZltzdGFydCArIDJdO1xuICAgIGNhc2UgMjpcbiAgICAgIEg4W29mZiArIDIgLSAob20gPDwgMSkgfCAwXSA9IGJ1ZltzdGFydCArIDFdO1xuICAgIGNhc2UgMzpcbiAgICAgIEg4W29mZiArIDMgLSAob20gPDwgMSkgfCAwXSA9IGJ1ZltzdGFydF07XG4gIH1cbiAgaWYgKGxlbiA8IGxtICsgKDQgLSBvbSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChpID0gNCAtIG9tOyBpIDwgajsgaSA9IGkgKyA0IHwgMCkge1xuICAgIEgzMltvZmYgKyBpID4+IDIgfCAwXSA9IGJ1ZltzdGFydCArIGldIDw8IDI0IHwgYnVmW3N0YXJ0ICsgaSArIDFdIDw8IDE2IHwgYnVmW3N0YXJ0ICsgaSArIDJdIDw8IDggfCBidWZbc3RhcnQgKyBpICsgM107XG4gIH1cbiAgc3dpdGNoIChsbSkge1xuICAgIGNhc2UgMzpcbiAgICAgIEg4W29mZiArIGogKyAxIHwgMF0gPSBidWZbc3RhcnQgKyBqICsgMl07XG4gICAgY2FzZSAyOlxuICAgICAgSDhbb2ZmICsgaiArIDIgfCAwXSA9IGJ1ZltzdGFydCArIGogKyAxXTtcbiAgICBjYXNlIDE6XG4gICAgICBIOFtvZmYgKyBqICsgMyB8IDBdID0gYnVmW3N0YXJ0ICsgal07XG4gIH1cbn07XG5cbnZhciBjb252QmxvYiA9IGZ1bmN0aW9uIChibG9iLCBIOCwgSDMyLCBzdGFydCwgbGVuLCBvZmYpIHtcbiAgdmFyIGkgPSB2b2lkIDAsXG4gICAgICBvbSA9IG9mZiAlIDQsXG4gICAgICBsbSA9IChsZW4gKyBvbSkgJSA0LFxuICAgICAgaiA9IGxlbiAtIGxtO1xuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkocmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2Iuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKSkpO1xuICBzd2l0Y2ggKG9tKSB7XG4gICAgY2FzZSAwOlxuICAgICAgSDhbb2ZmXSA9IGJ1ZlszXTtcbiAgICBjYXNlIDE6XG4gICAgICBIOFtvZmYgKyAxIC0gKG9tIDw8IDEpIHwgMF0gPSBidWZbMl07XG4gICAgY2FzZSAyOlxuICAgICAgSDhbb2ZmICsgMiAtIChvbSA8PCAxKSB8IDBdID0gYnVmWzFdO1xuICAgIGNhc2UgMzpcbiAgICAgIEg4W29mZiArIDMgLSAob20gPDwgMSkgfCAwXSA9IGJ1ZlswXTtcbiAgfVxuICBpZiAobGVuIDwgbG0gKyAoNCAtIG9tKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGkgPSA0IC0gb207IGkgPCBqOyBpID0gaSArIDQgfCAwKSB7XG4gICAgSDMyW29mZiArIGkgPj4gMiB8IDBdID0gYnVmW2ldIDw8IDI0IHwgYnVmW2kgKyAxXSA8PCAxNiB8IGJ1ZltpICsgMl0gPDwgOCB8IGJ1ZltpICsgM107XG4gIH1cbiAgc3dpdGNoIChsbSkge1xuICAgIGNhc2UgMzpcbiAgICAgIEg4W29mZiArIGogKyAxIHwgMF0gPSBidWZbaiArIDJdO1xuICAgIGNhc2UgMjpcbiAgICAgIEg4W29mZiArIGogKyAyIHwgMF0gPSBidWZbaiArIDFdO1xuICAgIGNhc2UgMTpcbiAgICAgIEg4W29mZiArIGogKyAzIHwgMF0gPSBidWZbal07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRhdGEsIEg4LCBIMzIsIHN0YXJ0LCBsZW4sIG9mZikge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGNvbnZTdHIoZGF0YSwgSDgsIEgzMiwgc3RhcnQsIGxlbiwgb2ZmKTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgcmV0dXJuIGNvbnZCdWYoZGF0YSwgSDgsIEgzMiwgc3RhcnQsIGxlbiwgb2ZmKTtcbiAgfVxuICBpZiAoZ2xvYmFsLkJ1ZmZlciAmJiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGNvbnZCdWYoZGF0YSwgSDgsIEgzMiwgc3RhcnQsIGxlbiwgb2ZmKTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGNvbnZCdWYobmV3IFVpbnQ4QXJyYXkoZGF0YSksIEg4LCBIMzIsIHN0YXJ0LCBsZW4sIG9mZik7XG4gIH1cbiAgaWYgKGRhdGEuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gY29udkJ1ZihuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpLCBIOCwgSDMyLCBzdGFydCwgbGVuLCBvZmYpO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiBjb252QmxvYihkYXRhLCBIOCwgSDMyLCBzdGFydCwgbGVuLCBvZmYpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YSB0eXBlLicpO1xufTtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHt9XSwzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0Jztcbi8vIFRoZSBsb3ctbGV2ZWwgUnVzaENvcmUgbW9kdWxlIHByb3ZpZGVzIHRoZSBoZWFydCBvZiBSdXNoYSxcbi8vIGEgaGlnaC1zcGVlZCBzaGExIGltcGxlbWVudGF0aW9uIHdvcmtpbmcgb24gYW4gSW50MzJBcnJheSBoZWFwLlxuLy8gQXQgZmlyc3QgZ2xhbmNlLCB0aGUgaW1wbGVtZW50YXRpb24gc2VlbXMgY29tcGxpY2F0ZWQsIGhvd2V2ZXJcbi8vIHdpdGggdGhlIFNIQTEgc3BlYyBhdCBoYW5kLCBpdCBpcyBvYnZpb3VzIHRoaXMgYWxtb3N0IGEgdGV4dGJvb2tcbi8vIGltcGxlbWVudGF0aW9uIHRoYXQgaGFzIGEgZmV3IGZ1bmN0aW9ucyBoYW5kLWlubGluZWQgYW5kIGEgZmV3IGxvb3BzXG4vLyBoYW5kLXVucm9sbGVkLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBSdXNoYUNvcmUoc3RkbGliJDExODYsIGZvcmVpZ24kMTE4NywgaGVhcCQxMTg4KSB7XG4gICAgJ3VzZSBhc20nO1xuICAgIHZhciBIJDExODkgPSBuZXcgc3RkbGliJDExODYuSW50MzJBcnJheShoZWFwJDExODgpO1xuICAgIGZ1bmN0aW9uIGhhc2gkMTE5MChrJDExOTEsIHgkMTE5Mikge1xuICAgICAgICAvLyBrIGluIGJ5dGVzXG4gICAgICAgIGskMTE5MSA9IGskMTE5MSB8IDA7XG4gICAgICAgIHgkMTE5MiA9IHgkMTE5MiB8IDA7XG4gICAgICAgIHZhciBpJDExOTMgPSAwLCBqJDExOTQgPSAwLCB5MCQxMTk1ID0gMCwgejAkMTE5NiA9IDAsIHkxJDExOTcgPSAwLCB6MSQxMTk4ID0gMCwgeTIkMTE5OSA9IDAsIHoyJDEyMDAgPSAwLCB5MyQxMjAxID0gMCwgejMkMTIwMiA9IDAsIHk0JDEyMDMgPSAwLCB6NCQxMjA0ID0gMCwgdDAkMTIwNSA9IDAsIHQxJDEyMDYgPSAwO1xuICAgICAgICB5MCQxMTk1ID0gSCQxMTg5W3gkMTE5MiArIDMyMCA+PiAyXSB8IDA7XG4gICAgICAgIHkxJDExOTcgPSBIJDExODlbeCQxMTkyICsgMzI0ID4+IDJdIHwgMDtcbiAgICAgICAgeTIkMTE5OSA9IEgkMTE4OVt4JDExOTIgKyAzMjggPj4gMl0gfCAwO1xuICAgICAgICB5MyQxMjAxID0gSCQxMTg5W3gkMTE5MiArIDMzMiA+PiAyXSB8IDA7XG4gICAgICAgIHk0JDEyMDMgPSBIJDExODlbeCQxMTkyICsgMzM2ID4+IDJdIHwgMDtcbiAgICAgICAgZm9yIChpJDExOTMgPSAwOyAoaSQxMTkzIHwgMCkgPCAoayQxMTkxIHwgMCk7IGkkMTE5MyA9IGkkMTE5MyArIDY0IHwgMCkge1xuICAgICAgICAgICAgejAkMTE5NiA9IHkwJDExOTU7XG4gICAgICAgICAgICB6MSQxMTk4ID0geTEkMTE5NztcbiAgICAgICAgICAgIHoyJDEyMDAgPSB5MiQxMTk5O1xuICAgICAgICAgICAgejMkMTIwMiA9IHkzJDEyMDE7XG4gICAgICAgICAgICB6NCQxMjA0ID0geTQkMTIwMztcbiAgICAgICAgICAgIGZvciAoaiQxMTk0ID0gMDsgKGokMTE5NCB8IDApIDwgNjQ7IGokMTE5NCA9IGokMTE5NCArIDQgfCAwKSB7XG4gICAgICAgICAgICAgICAgdDEkMTIwNiA9IEgkMTE4OVtpJDExOTMgKyBqJDExOTQgPj4gMl0gfCAwO1xuICAgICAgICAgICAgICAgIHQwJDEyMDUgPSAoKHkwJDExOTUgPDwgNSB8IHkwJDExOTUgPj4+IDI3KSArICh5MSQxMTk3ICYgeTIkMTE5OSB8IH55MSQxMTk3ICYgeTMkMTIwMSkgfCAwKSArICgodDEkMTIwNiArIHk0JDEyMDMgfCAwKSArIDE1MTg1MDAyNDkgfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgeTQkMTIwMyA9IHkzJDEyMDE7XG4gICAgICAgICAgICAgICAgeTMkMTIwMSA9IHkyJDExOTk7XG4gICAgICAgICAgICAgICAgeTIkMTE5OSA9IHkxJDExOTcgPDwgMzAgfCB5MSQxMTk3ID4+PiAyO1xuICAgICAgICAgICAgICAgIHkxJDExOTcgPSB5MCQxMTk1O1xuICAgICAgICAgICAgICAgIHkwJDExOTUgPSB0MCQxMjA1O1xuICAgICAgICAgICAgICAgIEgkMTE4OVtrJDExOTEgKyBqJDExOTQgPj4gMl0gPSB0MSQxMjA2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChqJDExOTQgPSBrJDExOTEgKyA2NCB8IDA7IChqJDExOTQgfCAwKSA8IChrJDExOTEgKyA4MCB8IDApOyBqJDExOTQgPSBqJDExOTQgKyA0IHwgMCkge1xuICAgICAgICAgICAgICAgIHQxJDEyMDYgPSAoSCQxMTg5W2okMTE5NCAtIDEyID4+IDJdIF4gSCQxMTg5W2okMTE5NCAtIDMyID4+IDJdIF4gSCQxMTg5W2okMTE5NCAtIDU2ID4+IDJdIF4gSCQxMTg5W2okMTE5NCAtIDY0ID4+IDJdKSA8PCAxIHwgKEgkMTE4OVtqJDExOTQgLSAxMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSAzMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA1NiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA2NCA+PiAyXSkgPj4+IDMxO1xuICAgICAgICAgICAgICAgIHQwJDEyMDUgPSAoKHkwJDExOTUgPDwgNSB8IHkwJDExOTUgPj4+IDI3KSArICh5MSQxMTk3ICYgeTIkMTE5OSB8IH55MSQxMTk3ICYgeTMkMTIwMSkgfCAwKSArICgodDEkMTIwNiArIHk0JDEyMDMgfCAwKSArIDE1MTg1MDAyNDkgfCAwKSB8IDA7XG4gICAgICAgICAgICAgICAgeTQkMTIwMyA9IHkzJDEyMDE7XG4gICAgICAgICAgICAgICAgeTMkMTIwMSA9IHkyJDExOTk7XG4gICAgICAgICAgICAgICAgeTIkMTE5OSA9IHkxJDExOTcgPDwgMzAgfCB5MSQxMTk3ID4+PiAyO1xuICAgICAgICAgICAgICAgIHkxJDExOTcgPSB5MCQxMTk1O1xuICAgICAgICAgICAgICAgIHkwJDExOTUgPSB0MCQxMjA1O1xuICAgICAgICAgICAgICAgIEgkMTE4OVtqJDExOTQgPj4gMl0gPSB0MSQxMjA2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChqJDExOTQgPSBrJDExOTEgKyA4MCB8IDA7IChqJDExOTQgfCAwKSA8IChrJDExOTEgKyAxNjAgfCAwKTsgaiQxMTk0ID0gaiQxMTk0ICsgNCB8IDApIHtcbiAgICAgICAgICAgICAgICB0MSQxMjA2ID0gKEgkMTE4OVtqJDExOTQgLSAxMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSAzMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA1NiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA2NCA+PiAyXSkgPDwgMSB8IChIJDExODlbaiQxMTk0IC0gMTIgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gMzIgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gNTYgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gNjQgPj4gMl0pID4+PiAzMTtcbiAgICAgICAgICAgICAgICB0MCQxMjA1ID0gKCh5MCQxMTk1IDw8IDUgfCB5MCQxMTk1ID4+PiAyNykgKyAoeTEkMTE5NyBeIHkyJDExOTkgXiB5MyQxMjAxKSB8IDApICsgKCh0MSQxMjA2ICsgeTQkMTIwMyB8IDApICsgMTg1OTc3NTM5MyB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICB5NCQxMjAzID0geTMkMTIwMTtcbiAgICAgICAgICAgICAgICB5MyQxMjAxID0geTIkMTE5OTtcbiAgICAgICAgICAgICAgICB5MiQxMTk5ID0geTEkMTE5NyA8PCAzMCB8IHkxJDExOTcgPj4+IDI7XG4gICAgICAgICAgICAgICAgeTEkMTE5NyA9IHkwJDExOTU7XG4gICAgICAgICAgICAgICAgeTAkMTE5NSA9IHQwJDEyMDU7XG4gICAgICAgICAgICAgICAgSCQxMTg5W2okMTE5NCA+PiAyXSA9IHQxJDEyMDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGokMTE5NCA9IGskMTE5MSArIDE2MCB8IDA7IChqJDExOTQgfCAwKSA8IChrJDExOTEgKyAyNDAgfCAwKTsgaiQxMTk0ID0gaiQxMTk0ICsgNCB8IDApIHtcbiAgICAgICAgICAgICAgICB0MSQxMjA2ID0gKEgkMTE4OVtqJDExOTQgLSAxMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSAzMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA1NiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA2NCA+PiAyXSkgPDwgMSB8IChIJDExODlbaiQxMTk0IC0gMTIgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gMzIgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gNTYgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gNjQgPj4gMl0pID4+PiAzMTtcbiAgICAgICAgICAgICAgICB0MCQxMjA1ID0gKCh5MCQxMTk1IDw8IDUgfCB5MCQxMTk1ID4+PiAyNykgKyAoeTEkMTE5NyAmIHkyJDExOTkgfCB5MSQxMTk3ICYgeTMkMTIwMSB8IHkyJDExOTkgJiB5MyQxMjAxKSB8IDApICsgKCh0MSQxMjA2ICsgeTQkMTIwMyB8IDApIC0gMTg5NDAwNzU4OCB8IDApIHwgMDtcbiAgICAgICAgICAgICAgICB5NCQxMjAzID0geTMkMTIwMTtcbiAgICAgICAgICAgICAgICB5MyQxMjAxID0geTIkMTE5OTtcbiAgICAgICAgICAgICAgICB5MiQxMTk5ID0geTEkMTE5NyA8PCAzMCB8IHkxJDExOTcgPj4+IDI7XG4gICAgICAgICAgICAgICAgeTEkMTE5NyA9IHkwJDExOTU7XG4gICAgICAgICAgICAgICAgeTAkMTE5NSA9IHQwJDEyMDU7XG4gICAgICAgICAgICAgICAgSCQxMTg5W2okMTE5NCA+PiAyXSA9IHQxJDEyMDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGokMTE5NCA9IGskMTE5MSArIDI0MCB8IDA7IChqJDExOTQgfCAwKSA8IChrJDExOTEgKyAzMjAgfCAwKTsgaiQxMTk0ID0gaiQxMTk0ICsgNCB8IDApIHtcbiAgICAgICAgICAgICAgICB0MSQxMjA2ID0gKEgkMTE4OVtqJDExOTQgLSAxMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSAzMiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA1NiA+PiAyXSBeIEgkMTE4OVtqJDExOTQgLSA2NCA+PiAyXSkgPDwgMSB8IChIJDExODlbaiQxMTk0IC0gMTIgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gMzIgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gNTYgPj4gMl0gXiBIJDExODlbaiQxMTk0IC0gNjQgPj4gMl0pID4+PiAzMTtcbiAgICAgICAgICAgICAgICB0MCQxMjA1ID0gKCh5MCQxMTk1IDw8IDUgfCB5MCQxMTk1ID4+PiAyNykgKyAoeTEkMTE5NyBeIHkyJDExOTkgXiB5MyQxMjAxKSB8IDApICsgKCh0MSQxMjA2ICsgeTQkMTIwMyB8IDApIC0gODk5NDk3NTE0IHwgMCkgfCAwO1xuICAgICAgICAgICAgICAgIHk0JDEyMDMgPSB5MyQxMjAxO1xuICAgICAgICAgICAgICAgIHkzJDEyMDEgPSB5MiQxMTk5O1xuICAgICAgICAgICAgICAgIHkyJDExOTkgPSB5MSQxMTk3IDw8IDMwIHwgeTEkMTE5NyA+Pj4gMjtcbiAgICAgICAgICAgICAgICB5MSQxMTk3ID0geTAkMTE5NTtcbiAgICAgICAgICAgICAgICB5MCQxMTk1ID0gdDAkMTIwNTtcbiAgICAgICAgICAgICAgICBIJDExODlbaiQxMTk0ID4+IDJdID0gdDEkMTIwNjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkwJDExOTUgPSB5MCQxMTk1ICsgejAkMTE5NiB8IDA7XG4gICAgICAgICAgICB5MSQxMTk3ID0geTEkMTE5NyArIHoxJDExOTggfCAwO1xuICAgICAgICAgICAgeTIkMTE5OSA9IHkyJDExOTkgKyB6MiQxMjAwIHwgMDtcbiAgICAgICAgICAgIHkzJDEyMDEgPSB5MyQxMjAxICsgejMkMTIwMiB8IDA7XG4gICAgICAgICAgICB5NCQxMjAzID0geTQkMTIwMyArIHo0JDEyMDQgfCAwO1xuICAgICAgICB9XG4gICAgICAgIEgkMTE4OVt4JDExOTIgKyAzMjAgPj4gMl0gPSB5MCQxMTk1O1xuICAgICAgICBIJDExODlbeCQxMTkyICsgMzI0ID4+IDJdID0geTEkMTE5NztcbiAgICAgICAgSCQxMTg5W3gkMTE5MiArIDMyOCA+PiAyXSA9IHkyJDExOTk7XG4gICAgICAgIEgkMTE4OVt4JDExOTIgKyAzMzIgPj4gMl0gPSB5MyQxMjAxO1xuICAgICAgICBIJDExODlbeCQxMTkyICsgMzM2ID4+IDJdID0geTQkMTIwMztcbiAgICB9XG4gICAgcmV0dXJuIHsgaGFzaDogaGFzaCQxMTkwIH07XG59O1xuXG59LHt9XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50LWVudiBjb21tb25qcywgYnJvd3NlciAqL1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgUnVzaGEgPSBfZGVyZXFfKCcuL3J1c2hhJyk7XG5cbnZhciBfcmVxdWlyZSA9IF9kZXJlcV8oJy4vdXRpbHMnKSxcbiAgICB0b0hleCA9IF9yZXF1aXJlLnRvSGV4O1xuXG52YXIgSGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSGFzaCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSGFzaCk7XG5cbiAgICB0aGlzLl9ydXNoYSA9IG5ldyBSdXNoYSgpO1xuICAgIHRoaXMuX3J1c2hhLnJlc2V0U3RhdGUoKTtcbiAgfVxuXG4gIEhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShkYXRhKSB7XG4gICAgdGhpcy5fcnVzaGEuYXBwZW5kKGRhdGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEhhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmNvZGluZykge1xuICAgIHZhciBkaWdlc3QgPSB0aGlzLl9ydXNoYS5yYXdFbmQoKS5idWZmZXI7XG4gICAgaWYgKCFlbmNvZGluZykge1xuICAgICAgcmV0dXJuIGRpZ2VzdDtcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nID09PSAnaGV4Jykge1xuICAgICAgcmV0dXJuIHRvSGV4KGRpZ2VzdCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgZGlnZXN0IGVuY29kaW5nJyk7XG4gIH07XG5cbiAgcmV0dXJuIEhhc2g7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IEhhc2goKTtcbn07XG5cbn0se1wiLi9ydXNoYVwiOjYsXCIuL3V0aWxzXCI6N31dLDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZW52IGNvbW1vbmpzLCBicm93c2VyICovXG5cbnZhciB3ZWJ3b3JraWZ5ID0gX2RlcmVxXygnd2Vid29ya2lmeScpO1xuXG52YXIgUnVzaGEgPSBfZGVyZXFfKCcuL3J1c2hhJyk7XG52YXIgY3JlYXRlSGFzaCA9IF9kZXJlcV8oJy4vaGFzaCcpO1xudmFyIHJ1bldvcmtlciA9IF9kZXJlcV8oJy4vd29ya2VyJyk7XG5cbnZhciBfcmVxdWlyZSA9IF9kZXJlcV8oJy4vdXRpbHMnKSxcbiAgICBpc0RlZGljYXRlZFdvcmtlclNjb3BlID0gX3JlcXVpcmUuaXNEZWRpY2F0ZWRXb3JrZXJTY29wZTtcblxudmFyIGlzUnVubmluZ0luRGVkaWNhdGVkV29ya2VyID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIGlzRGVkaWNhdGVkV29ya2VyU2NvcGUoc2VsZik7XG5cblJ1c2hhLmRpc2FibGVXb3JrZXJCZWhhdmlvdXIgPSBpc1J1bm5pbmdJbkRlZGljYXRlZFdvcmtlciA/IHJ1bldvcmtlcigpIDogZnVuY3Rpb24gKCkge307XG5cblJ1c2hhLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHdvcmtlciA9IHdlYndvcmtpZnkoX2RlcmVxXygnLi93b3JrZXInKSk7XG4gIHZhciB0ZXJtaW5hdGUgPSB3b3JrZXIudGVybWluYXRlO1xuICB3b3JrZXIudGVybWluYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwod29ya2VyLm9iamVjdFVSTCk7XG4gICAgdGVybWluYXRlLmNhbGwod29ya2VyKTtcbiAgfTtcbiAgcmV0dXJuIHdvcmtlcjtcbn07XG5cblJ1c2hhLmNyZWF0ZUhhc2ggPSBjcmVhdGVIYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJ1c2hhO1xuXG59LHtcIi4vaGFzaFwiOjQsXCIuL3J1c2hhXCI6NixcIi4vdXRpbHNcIjo3LFwiLi93b3JrZXJcIjo4LFwid2Vid29ya2lmeVwiOjF9XSw2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50LWVudiBjb21tb25qcywgYnJvd3NlciAqL1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgUnVzaGFDb3JlID0gX2RlcmVxXygnLi9jb3JlLnNqcycpO1xuXG52YXIgX3JlcXVpcmUgPSBfZGVyZXFfKCcuL3V0aWxzJyksXG4gICAgdG9IZXggPSBfcmVxdWlyZS50b0hleCxcbiAgICBjZWlsSGVhcFNpemUgPSBfcmVxdWlyZS5jZWlsSGVhcFNpemU7XG5cbnZhciBjb252ID0gX2RlcmVxXygnLi9jb252Jyk7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGJ1ZmZlciB0aGF0IHRoZSBzaGExIHJvdXRpbmUgdXNlc1xuLy8gaW5jbHVkaW5nIHRoZSBwYWRkaW5nLlxudmFyIHBhZGxlbiA9IGZ1bmN0aW9uIChsZW4pIHtcbiAgZm9yIChsZW4gKz0gOTsgbGVuICUgNjQgPiAwOyBsZW4gKz0gMSkge31cbiAgcmV0dXJuIGxlbjtcbn07XG5cbnZhciBwYWRaZXJvZXMgPSBmdW5jdGlvbiAoYmluLCBsZW4pIHtcbiAgdmFyIGg4ID0gbmV3IFVpbnQ4QXJyYXkoYmluLmJ1ZmZlcik7XG4gIHZhciBvbSA9IGxlbiAlIDQsXG4gICAgICBhbGlnbiA9IGxlbiAtIG9tO1xuICBzd2l0Y2ggKG9tKSB7XG4gICAgY2FzZSAwOlxuICAgICAgaDhbYWxpZ24gKyAzXSA9IDA7XG4gICAgY2FzZSAxOlxuICAgICAgaDhbYWxpZ24gKyAyXSA9IDA7XG4gICAgY2FzZSAyOlxuICAgICAgaDhbYWxpZ24gKyAxXSA9IDA7XG4gICAgY2FzZSAzOlxuICAgICAgaDhbYWxpZ24gKyAwXSA9IDA7XG4gIH1cbiAgZm9yICh2YXIgaSA9IChsZW4gPj4gMikgKyAxOyBpIDwgYmluLmxlbmd0aDsgaSsrKSB7XG4gICAgYmluW2ldID0gMDtcbiAgfVxufTtcblxudmFyIHBhZERhdGEgPSBmdW5jdGlvbiAoYmluLCBjaHVua0xlbiwgbXNnTGVuKSB7XG4gIGJpbltjaHVua0xlbiA+PiAyXSB8PSAweDgwIDw8IDI0IC0gKGNodW5rTGVuICUgNCA8PCAzKTtcbiAgLy8gVG8gc3VwcG9ydCBtc2dMZW4gPj0gMiBHaUIsIHVzZSBhIGZsb2F0IGRpdmlzaW9uIHdoZW4gY29tcHV0aW5nIHRoZVxuICAvLyBoaWdoIDMyLWJpdHMgb2YgdGhlIGJpZy1lbmRpYW4gbWVzc2FnZSBsZW5ndGggaW4gYml0cy5cbiAgYmluWygoY2h1bmtMZW4gPj4gMikgKyAyICYgfjB4MGYpICsgMTRdID0gbXNnTGVuIC8gKDEgPDwgMjkpIHwgMDtcbiAgYmluWygoY2h1bmtMZW4gPj4gMikgKyAyICYgfjB4MGYpICsgMTVdID0gbXNnTGVuIDw8IDM7XG59O1xuXG52YXIgZ2V0UmF3RGlnZXN0ID0gZnVuY3Rpb24gKGhlYXAsIHBhZE1heENodW5rTGVuKSB7XG4gIHZhciBpbyA9IG5ldyBJbnQzMkFycmF5KGhlYXAsIHBhZE1heENodW5rTGVuICsgMzIwLCA1KTtcbiAgdmFyIG91dCA9IG5ldyBJbnQzMkFycmF5KDUpO1xuICB2YXIgYXJyID0gbmV3IERhdGFWaWV3KG91dC5idWZmZXIpO1xuICBhcnIuc2V0SW50MzIoMCwgaW9bMF0sIGZhbHNlKTtcbiAgYXJyLnNldEludDMyKDQsIGlvWzFdLCBmYWxzZSk7XG4gIGFyci5zZXRJbnQzMig4LCBpb1syXSwgZmFsc2UpO1xuICBhcnIuc2V0SW50MzIoMTIsIGlvWzNdLCBmYWxzZSk7XG4gIGFyci5zZXRJbnQzMigxNiwgaW9bNF0sIGZhbHNlKTtcbiAgcmV0dXJuIG91dDtcbn07XG5cbnZhciBSdXNoYSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUnVzaGEoY2h1bmtTaXplKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJ1c2hhKTtcblxuICAgIGNodW5rU2l6ZSA9IGNodW5rU2l6ZSB8fCA2NCAqIDEwMjQ7XG4gICAgaWYgKGNodW5rU2l6ZSAlIDY0ID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHVuayBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxMjggYml0Jyk7XG4gICAgfVxuICAgIHRoaXMuX29mZnNldCA9IDA7XG4gICAgdGhpcy5fbWF4Q2h1bmtMZW4gPSBjaHVua1NpemU7XG4gICAgdGhpcy5fcGFkTWF4Q2h1bmtMZW4gPSBwYWRsZW4oY2h1bmtTaXplKTtcbiAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgaGVhcCBpcyB0aGUgc3VtIG9mOlxuICAgIC8vIDEuIFRoZSBwYWRkZWQgaW5wdXQgbWVzc2FnZSBzaXplXG4gICAgLy8gMi4gVGhlIGV4dGVuZGVkIHNwYWNlIHRoZSBhbGdvcml0aG0gbmVlZHMgKDMyMCBieXRlKVxuICAgIC8vIDMuIFRoZSAxNjAgYml0IHN0YXRlIHRoZSBhbGdvcml0bSB1c2VzXG4gICAgdGhpcy5faGVhcCA9IG5ldyBBcnJheUJ1ZmZlcihjZWlsSGVhcFNpemUodGhpcy5fcGFkTWF4Q2h1bmtMZW4gKyAzMjAgKyAyMCkpO1xuICAgIHRoaXMuX2gzMiA9IG5ldyBJbnQzMkFycmF5KHRoaXMuX2hlYXApO1xuICAgIHRoaXMuX2g4ID0gbmV3IEludDhBcnJheSh0aGlzLl9oZWFwKTtcbiAgICB0aGlzLl9jb3JlID0gbmV3IFJ1c2hhQ29yZSh7IEludDMyQXJyYXk6IEludDMyQXJyYXkgfSwge30sIHRoaXMuX2hlYXApO1xuICB9XG5cbiAgUnVzaGEucHJvdG90eXBlLl9pbml0U3RhdGUgPSBmdW5jdGlvbiBfaW5pdFN0YXRlKGhlYXAsIHBhZE1zZ0xlbikge1xuICAgIHRoaXMuX29mZnNldCA9IDA7XG4gICAgdmFyIGlvID0gbmV3IEludDMyQXJyYXkoaGVhcCwgcGFkTXNnTGVuICsgMzIwLCA1KTtcbiAgICBpb1swXSA9IDE3MzI1ODQxOTM7XG4gICAgaW9bMV0gPSAtMjcxNzMzODc5O1xuICAgIGlvWzJdID0gLTE3MzI1ODQxOTQ7XG4gICAgaW9bM10gPSAyNzE3MzM4Nzg7XG4gICAgaW9bNF0gPSAtMTAwOTU4OTc3NjtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuX3BhZENodW5rID0gZnVuY3Rpb24gX3BhZENodW5rKGNodW5rTGVuLCBtc2dMZW4pIHtcbiAgICB2YXIgcGFkQ2h1bmtMZW4gPSBwYWRsZW4oY2h1bmtMZW4pO1xuICAgIHZhciB2aWV3ID0gbmV3IEludDMyQXJyYXkodGhpcy5faGVhcCwgMCwgcGFkQ2h1bmtMZW4gPj4gMik7XG4gICAgcGFkWmVyb2VzKHZpZXcsIGNodW5rTGVuKTtcbiAgICBwYWREYXRhKHZpZXcsIGNodW5rTGVuLCBtc2dMZW4pO1xuICAgIHJldHVybiBwYWRDaHVua0xlbjtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlKGRhdGEsIGNodW5rT2Zmc2V0LCBjaHVua0xlbiwgb2ZmKSB7XG4gICAgY29udihkYXRhLCB0aGlzLl9oOCwgdGhpcy5faDMyLCBjaHVua09mZnNldCwgY2h1bmtMZW4sIG9mZiB8fCAwKTtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuX2NvcmVDYWxsID0gZnVuY3Rpb24gX2NvcmVDYWxsKGRhdGEsIGNodW5rT2Zmc2V0LCBjaHVua0xlbiwgbXNnTGVuLCBmaW5hbGl6ZSkge1xuICAgIHZhciBwYWRDaHVua0xlbiA9IGNodW5rTGVuO1xuICAgIHRoaXMuX3dyaXRlKGRhdGEsIGNodW5rT2Zmc2V0LCBjaHVua0xlbik7XG4gICAgaWYgKGZpbmFsaXplKSB7XG4gICAgICBwYWRDaHVua0xlbiA9IHRoaXMuX3BhZENodW5rKGNodW5rTGVuLCBtc2dMZW4pO1xuICAgIH1cbiAgICB0aGlzLl9jb3JlLmhhc2gocGFkQ2h1bmtMZW4sIHRoaXMuX3BhZE1heENodW5rTGVuKTtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUucmF3RGlnZXN0ID0gZnVuY3Rpb24gcmF3RGlnZXN0KHN0cikge1xuICAgIHZhciBtc2dMZW4gPSBzdHIuYnl0ZUxlbmd0aCB8fCBzdHIubGVuZ3RoIHx8IHN0ci5zaXplIHx8IDA7XG4gICAgdGhpcy5faW5pdFN0YXRlKHRoaXMuX2hlYXAsIHRoaXMuX3BhZE1heENodW5rTGVuKTtcbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAwLFxuICAgICAgICBjaHVua0xlbiA9IHRoaXMuX21heENodW5rTGVuO1xuICAgIGZvciAoY2h1bmtPZmZzZXQgPSAwOyBtc2dMZW4gPiBjaHVua09mZnNldCArIGNodW5rTGVuOyBjaHVua09mZnNldCArPSBjaHVua0xlbikge1xuICAgICAgdGhpcy5fY29yZUNhbGwoc3RyLCBjaHVua09mZnNldCwgY2h1bmtMZW4sIG1zZ0xlbiwgZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLl9jb3JlQ2FsbChzdHIsIGNodW5rT2Zmc2V0LCBtc2dMZW4gLSBjaHVua09mZnNldCwgbXNnTGVuLCB0cnVlKTtcbiAgICByZXR1cm4gZ2V0UmF3RGlnZXN0KHRoaXMuX2hlYXAsIHRoaXMuX3BhZE1heENodW5rTGVuKTtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KHN0cikge1xuICAgIHJldHVybiB0b0hleCh0aGlzLnJhd0RpZ2VzdChzdHIpLmJ1ZmZlcik7XG4gIH07XG5cbiAgUnVzaGEucHJvdG90eXBlLmRpZ2VzdEZyb21TdHJpbmcgPSBmdW5jdGlvbiBkaWdlc3RGcm9tU3RyaW5nKHN0cikge1xuICAgIHJldHVybiB0aGlzLmRpZ2VzdChzdHIpO1xuICB9O1xuXG4gIFJ1c2hhLnByb3RvdHlwZS5kaWdlc3RGcm9tQnVmZmVyID0gZnVuY3Rpb24gZGlnZXN0RnJvbUJ1ZmZlcihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3Qoc3RyKTtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuZGlnZXN0RnJvbUFycmF5QnVmZmVyID0gZnVuY3Rpb24gZGlnZXN0RnJvbUFycmF5QnVmZmVyKHN0cikge1xuICAgIHJldHVybiB0aGlzLmRpZ2VzdChzdHIpO1xuICB9O1xuXG4gIFJ1c2hhLnByb3RvdHlwZS5yZXNldFN0YXRlID0gZnVuY3Rpb24gcmVzZXRTdGF0ZSgpIHtcbiAgICB0aGlzLl9pbml0U3RhdGUodGhpcy5faGVhcCwgdGhpcy5fcGFkTWF4Q2h1bmtMZW4pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIFJ1c2hhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoY2h1bmspIHtcbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAwO1xuICAgIHZhciBjaHVua0xlbiA9IGNodW5rLmJ5dGVMZW5ndGggfHwgY2h1bmsubGVuZ3RoIHx8IGNodW5rLnNpemUgfHwgMDtcbiAgICB2YXIgdHVybk9mZnNldCA9IHRoaXMuX29mZnNldCAlIHRoaXMuX21heENodW5rTGVuO1xuICAgIHZhciBpbnB1dExlbiA9IHZvaWQgMDtcblxuICAgIHRoaXMuX29mZnNldCArPSBjaHVua0xlbjtcbiAgICB3aGlsZSAoY2h1bmtPZmZzZXQgPCBjaHVua0xlbikge1xuICAgICAgaW5wdXRMZW4gPSBNYXRoLm1pbihjaHVua0xlbiAtIGNodW5rT2Zmc2V0LCB0aGlzLl9tYXhDaHVua0xlbiAtIHR1cm5PZmZzZXQpO1xuICAgICAgdGhpcy5fd3JpdGUoY2h1bmssIGNodW5rT2Zmc2V0LCBpbnB1dExlbiwgdHVybk9mZnNldCk7XG4gICAgICB0dXJuT2Zmc2V0ICs9IGlucHV0TGVuO1xuICAgICAgY2h1bmtPZmZzZXQgKz0gaW5wdXRMZW47XG4gICAgICBpZiAodHVybk9mZnNldCA9PT0gdGhpcy5fbWF4Q2h1bmtMZW4pIHtcbiAgICAgICAgdGhpcy5fY29yZS5oYXNoKHRoaXMuX21heENodW5rTGVuLCB0aGlzLl9wYWRNYXhDaHVua0xlbik7XG4gICAgICAgIHR1cm5PZmZzZXQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuZ2V0U3RhdGUgPSBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICB2YXIgdHVybk9mZnNldCA9IHRoaXMuX29mZnNldCAlIHRoaXMuX21heENodW5rTGVuO1xuICAgIHZhciBoZWFwID0gdm9pZCAwO1xuICAgIGlmICghdHVybk9mZnNldCkge1xuICAgICAgdmFyIGlvID0gbmV3IEludDMyQXJyYXkodGhpcy5faGVhcCwgdGhpcy5fcGFkTWF4Q2h1bmtMZW4gKyAzMjAsIDUpO1xuICAgICAgaGVhcCA9IGlvLmJ1ZmZlci5zbGljZShpby5ieXRlT2Zmc2V0LCBpby5ieXRlT2Zmc2V0ICsgaW8uYnl0ZUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYXAgPSB0aGlzLl9oZWFwLnNsaWNlKDApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBoZWFwOiBoZWFwXG4gICAgfTtcbiAgfTtcblxuICBSdXNoYS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuX29mZnNldCA9IHN0YXRlLm9mZnNldDtcbiAgICBpZiAoc3RhdGUuaGVhcC5ieXRlTGVuZ3RoID09PSAyMCkge1xuICAgICAgdmFyIGlvID0gbmV3IEludDMyQXJyYXkodGhpcy5faGVhcCwgdGhpcy5fcGFkTWF4Q2h1bmtMZW4gKyAzMjAsIDUpO1xuICAgICAgaW8uc2V0KG5ldyBJbnQzMkFycmF5KHN0YXRlLmhlYXApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faDMyLnNldChuZXcgSW50MzJBcnJheShzdGF0ZS5oZWFwKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIFJ1c2hhLnByb3RvdHlwZS5yYXdFbmQgPSBmdW5jdGlvbiByYXdFbmQoKSB7XG4gICAgdmFyIG1zZ0xlbiA9IHRoaXMuX29mZnNldDtcbiAgICB2YXIgY2h1bmtMZW4gPSBtc2dMZW4gJSB0aGlzLl9tYXhDaHVua0xlbjtcbiAgICB2YXIgcGFkQ2h1bmtMZW4gPSB0aGlzLl9wYWRDaHVuayhjaHVua0xlbiwgbXNnTGVuKTtcbiAgICB0aGlzLl9jb3JlLmhhc2gocGFkQ2h1bmtMZW4sIHRoaXMuX3BhZE1heENodW5rTGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gZ2V0UmF3RGlnZXN0KHRoaXMuX2hlYXAsIHRoaXMuX3BhZE1heENodW5rTGVuKTtcbiAgICB0aGlzLl9pbml0U3RhdGUodGhpcy5faGVhcCwgdGhpcy5fcGFkTWF4Q2h1bmtMZW4pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUnVzaGEucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZCgpIHtcbiAgICByZXR1cm4gdG9IZXgodGhpcy5yYXdFbmQoKS5idWZmZXIpO1xuICB9O1xuXG4gIHJldHVybiBSdXNoYTtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSdXNoYTtcbm1vZHVsZS5leHBvcnRzLl9jb3JlID0gUnVzaGFDb3JlO1xuXG59LHtcIi4vY29udlwiOjIsXCIuL2NvcmUuc2pzXCI6MyxcIi4vdXRpbHNcIjo3fV0sNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1lbnYgY29tbW9uanMsIGJyb3dzZXIgKi9cblxuLy9cbi8vIHRvSGV4XG4vL1xuXG52YXIgcHJlY29tcHV0ZWRIZXggPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgcHJlY29tcHV0ZWRIZXhbaV0gPSAoaSA8IDB4MTAgPyAnMCcgOiAnJykgKyBpLnRvU3RyaW5nKDE2KTtcbn1cblxubW9kdWxlLmV4cG9ydHMudG9IZXggPSBmdW5jdGlvbiAoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIGJpbmFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcmVzLmxlbmd0aDsgX2krKykge1xuICAgIHJlc1tfaV0gPSBwcmVjb21wdXRlZEhleFtiaW5hcnJheVtfaV1dO1xuICB9XG4gIHJldHVybiByZXMuam9pbignJyk7XG59O1xuXG4vL1xuLy8gY2VpbEhlYXBTaXplXG4vL1xuXG5tb2R1bGUuZXhwb3J0cy5jZWlsSGVhcFNpemUgPSBmdW5jdGlvbiAodikge1xuICAvLyBUaGUgYXNtLmpzIHNwZWMgc2F5czpcbiAgLy8gVGhlIGhlYXAgb2JqZWN0J3MgYnl0ZUxlbmd0aCBtdXN0IGJlIGVpdGhlclxuICAvLyAyXm4gZm9yIG4gaW4gWzEyLCAyNCkgb3IgMl4yNCAqIG4gZm9yIG4g4omlIDEuXG4gIC8vIEFsc28sIGJ5dGVMZW5ndGhzIHNtYWxsZXIgdGhhbiAyXjE2IGFyZSBkZXByZWNhdGVkLlxuICB2YXIgcCA9IDA7XG4gIC8vIElmIHYgaXMgc21hbGxlciB0aGFuIDJeMTYsIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBzb2x1dGlvblxuICAvLyBpcyAyXjE2LlxuICBpZiAodiA8PSA2NTUzNikgcmV0dXJuIDY1NTM2O1xuICAvLyBJZiB2IDwgMl4yNCwgd2Ugcm91bmQgdXAgdG8gMl5uLFxuICAvLyBvdGhlcndpc2Ugd2Ugcm91bmQgdXAgdG8gMl4yNCAqIG4uXG4gIGlmICh2IDwgMTY3NzcyMTYpIHtcbiAgICBmb3IgKHAgPSAxOyBwIDwgdjsgcCA9IHAgPDwgMSkge31cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHAgPSAxNjc3NzIxNjsgcCA8IHY7IHAgKz0gMTY3NzcyMTYpIHt9XG4gIH1cbiAgcmV0dXJuIHA7XG59O1xuXG4vL1xuLy8gaXNEZWRpY2F0ZWRXb3JrZXJTY29wZVxuLy9cblxubW9kdWxlLmV4cG9ydHMuaXNEZWRpY2F0ZWRXb3JrZXJTY29wZSA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIHZhciBpc1J1bm5pbmdJbldvcmtlciA9ICdXb3JrZXJHbG9iYWxTY29wZScgaW4gc2VsZiAmJiBzZWxmIGluc3RhbmNlb2Ygc2VsZi5Xb3JrZXJHbG9iYWxTY29wZTtcbiAgdmFyIGlzUnVubmluZ0luU2hhcmVkV29ya2VyID0gJ1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlJyBpbiBzZWxmICYmIHNlbGYgaW5zdGFuY2VvZiBzZWxmLlNoYXJlZFdvcmtlckdsb2JhbFNjb3BlO1xuICB2YXIgaXNSdW5uaW5nSW5TZXJ2aWNlV29ya2VyID0gJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZScgaW4gc2VsZiAmJiBzZWxmIGluc3RhbmNlb2Ygc2VsZi5TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7XG5cbiAgLy8gRGV0ZWN0cyB3aGV0aGVyIHdlIHJ1biBpbnNpZGUgYSBkZWRpY2F0ZWQgd29ya2VyIG9yIG5vdC5cbiAgLy9cbiAgLy8gV2UgY2FuJ3QganVzdCBjaGVjayBmb3IgYERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlYCwgc2luY2UgSUUxMVxuICAvLyBoYXMgYSBidWcgd2hlcmUgaXQgb25seSBzdXBwb3J0cyBgV29ya2VyR2xvYmFsU2NvcGVgLlxuICAvL1xuICAvLyBUaGVyZWZvcmUsIHdlIGNvbnNpZGVyIHVzIGFzIHJ1bm5pbmcgaW5zaWRlIGEgZGVkaWNhdGVkIHdvcmtlclxuICAvLyB3aGVuIHdlIGFyZSBydW5uaW5nIGluc2lkZSBhIHdvcmtlciwgYnV0IG5vdCBpbiBhIHNoYXJlZCBvciBzZXJ2aWNlIHdvcmtlci5cbiAgLy9cbiAgLy8gV2hlbiBuZXcgdHlwZXMgb2Ygd29ya2VycyBhcmUgaW50cm9kdWNlZCwgd2Ugd2lsbCBuZWVkIHRvIGFkanVzdCB0aGlzIGNvZGUuXG4gIHJldHVybiBpc1J1bm5pbmdJbldvcmtlciAmJiAhaXNSdW5uaW5nSW5TaGFyZWRXb3JrZXIgJiYgIWlzUnVubmluZ0luU2VydmljZVdvcmtlcjtcbn07XG5cbn0se31dLDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZW52IGNvbW1vbmpzLCB3b3JrZXIgKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBSdXNoYSA9IF9kZXJlcV8oJy4vcnVzaGEnKTtcblxuICB2YXIgaGFzaERhdGEgPSBmdW5jdGlvbiAoaGFzaGVyLCBkYXRhLCBjYikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2IobnVsbCwgaGFzaGVyLmRpZ2VzdChkYXRhKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGNiKGUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgaGFzaEZpbGUgPSBmdW5jdGlvbiAoaGFzaGVyLCByZWFkVG90YWwsIGJsb2NrU2l6ZSwgZmlsZSwgY2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IHNlbGYuRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAocmVhZGVyLmVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYihyZWFkZXIuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdmFyIGJ1ZmZlciA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICByZWFkVG90YWwgKz0gcmVhZGVyLnJlc3VsdC5ieXRlTGVuZ3RoO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFzaGVyLmFwcGVuZChidWZmZXIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYihlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHJlYWRUb3RhbCA8IGZpbGUuc2l6ZSkge1xuICAgICAgICBoYXNoRmlsZShoYXNoZXIsIHJlYWRUb3RhbCwgYmxvY2tTaXplLCBmaWxlLCBjYik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYihudWxsLCBoYXNoZXIuZW5kKCkpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUuc2xpY2UocmVhZFRvdGFsLCByZWFkVG90YWwgKyBibG9ja1NpemUpKTtcbiAgfTtcblxuICB2YXIgd29ya2VyQmVoYXZpb3VyRW5hYmxlZCA9IHRydWU7XG5cbiAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoIXdvcmtlckJlaGF2aW91ckVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IGV2ZW50LmRhdGEuZGF0YSxcbiAgICAgICAgZmlsZSA9IGV2ZW50LmRhdGEuZmlsZSxcbiAgICAgICAgaWQgPSBldmVudC5kYXRhLmlkO1xuICAgIGlmICh0eXBlb2YgaWQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaWYgKCFmaWxlICYmICFkYXRhKSByZXR1cm47XG4gICAgdmFyIGJsb2NrU2l6ZSA9IGV2ZW50LmRhdGEuYmxvY2tTaXplIHx8IDQgKiAxMDI0ICogMTAyNDtcbiAgICB2YXIgaGFzaGVyID0gbmV3IFJ1c2hhKGJsb2NrU2l6ZSk7XG4gICAgaGFzaGVyLnJlc2V0U3RhdGUoKTtcbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uIChlcnIsIGhhc2gpIHtcbiAgICAgIGlmICghZXJyKSB7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBpZDogaWQsIGhhc2g6IGhhc2ggfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHsgaWQ6IGlkLCBlcnJvcjogZXJyLm5hbWUgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoZGF0YSkgaGFzaERhdGEoaGFzaGVyLCBkYXRhLCBkb25lKTtcbiAgICBpZiAoZmlsZSkgaGFzaEZpbGUoaGFzaGVyLCAwLCBibG9ja1NpemUsIGZpbGUsIGRvbmUpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgd29ya2VyQmVoYXZpb3VyRW5hYmxlZCA9IGZhbHNlO1xuICB9O1xufTtcblxufSx7XCIuL3J1c2hhXCI6Nn1dfSx7fSxbNV0pKDUpXG59KTtcbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7fV0sMzIxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbihzZWxmKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoc2VsZi5mZXRjaCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6ICdGaWxlUmVhZGVyJyBpbiBzZWxmICYmICdCbG9iJyBpbiBzZWxmICYmIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIHNlbGYsXG4gICAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gc2VsZlxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdXG5cbiAgICB2YXIgaXNEYXRhVmlldyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG4gICAgfVxuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID0gQXJyYXlCdWZmZXIuaXNWaWV3IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge31cblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgfSwgdGhpcylcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlKycsJyt2YWx1ZSA6IHZhbHVlXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgeyBpdGVtcy5wdXNoKG5hbWUpIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsgaXRlbXMucHVzaCh2YWx1ZSkgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKSB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICAgIH1cbiAgICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgICAgfVxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gY29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIHJldHVybiAobWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEpID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnb21pdCdcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSlcbiAgfVxuXG4gIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHsgYm9keTogdGhpcy5fYm9keUluaXQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGJvZHkudHJpbSgpLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgICByYXdIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgICB0aGlzLnN0YXR1cyA9ICdzdGF0dXMnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1cyA6IDIwMFxuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnc3RhdHVzVGV4dCcgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc3RhdHVzVGV4dCA6ICdPSydcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICAgIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9XG5cbiAgUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICB2YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9XG5cbiAgc2VsZi5IZWFkZXJzID0gSGVhZGVyc1xuICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZVxuXG4gIHNlbGYuZmV0Y2ggPSBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfVxuXG4gICAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSlcblxuICAgICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyICYmIHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgICB9KVxuICB9XG4gIHNlbGYuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyk7XG5cbn0se31dLDMyMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVnZW5lcmF0b3IgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yJyk7XG5cbnZhciBfcmVnZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3InKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jVG9HZW5lcmF0b3IyKTtcblxuZXhwb3J0cy5DbGVhcnRleHRNZXNzYWdlID0gQ2xlYXJ0ZXh0TWVzc2FnZTtcbmV4cG9ydHMucmVhZEFybW9yZWQgPSByZWFkQXJtb3JlZDtcblxudmFyIF9hcm1vciA9IF9kZXJlcV8oJy4vZW5jb2RpbmcvYXJtb3InKTtcblxudmFyIF9hcm1vcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hcm1vcik7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX3BhY2tldCA9IF9kZXJlcV8oJy4vcGFja2V0Jyk7XG5cbnZhciBfcGFja2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhY2tldCk7XG5cbnZhciBfc2lnbmF0dXJlID0gX2RlcmVxXygnLi9zaWduYXR1cmUnKTtcblxudmFyIF9tZXNzYWdlID0gX2RlcmVxXygnLi9tZXNzYWdlJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAY2xhc3NkZXNjIENsYXNzIHRoYXQgcmVwcmVzZW50cyBhbiBPcGVuUEdQIGNsZWFydGV4dCBzaWduZWQgbWVzc2FnZS5cbiAqIFNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi03fVxuICogQHBhcmFtICB7U3RyaW5nfSAgICAgICAgICAgdGV4dCAgICAgICBUaGUgY2xlYXJ0ZXh0IG9mIHRoZSBzaWduZWQgbWVzc2FnZVxuICogQHBhcmFtICB7bW9kdWxlOnNpZ25hdHVyZS5TaWduYXR1cmV9IHNpZ25hdHVyZSAgVGhlIGRldGFjaGVkIHNpZ25hdHVyZSBvciBhbiBlbXB0eSBzaWduYXR1cmUgZm9yIHVuc2lnbmVkIG1lc3NhZ2VzXG4gKi9cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQHJlcXVpcmVzIGVuY29kaW5nL2FybW9yXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAcmVxdWlyZXMgcGFja2V0XG4gKiBAcmVxdWlyZXMgc2lnbmF0dXJlXG4gKiBAbW9kdWxlIGNsZWFydGV4dFxuICovXG5cbmZ1bmN0aW9uIENsZWFydGV4dE1lc3NhZ2UodGV4dCwgc2lnbmF0dXJlKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDbGVhcnRleHRNZXNzYWdlKSkge1xuICAgIHJldHVybiBuZXcgQ2xlYXJ0ZXh0TWVzc2FnZSh0ZXh0LCBzaWduYXR1cmUpO1xuICB9XG4gIC8vIG5vcm1hbGl6ZSBFT0wgdG8gY2Fub25pY2FsIGZvcm0gPENSPjxMRj5cbiAgdGhpcy50ZXh0ID0gX3V0aWwyLmRlZmF1bHQuY2Fub25pY2FsaXplRU9MKF91dGlsMi5kZWZhdWx0LnJlbW92ZVRyYWlsaW5nU3BhY2VzKHRleHQpKTtcbiAgaWYgKHNpZ25hdHVyZSAmJiAhKHNpZ25hdHVyZSBpbnN0YW5jZW9mIF9zaWduYXR1cmUuU2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgaW5wdXQnKTtcbiAgfVxuICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZSB8fCBuZXcgX3NpZ25hdHVyZS5TaWduYXR1cmUobmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBrZXkgSURzIG9mIHRoZSBrZXlzIHRoYXQgc2lnbmVkIHRoZSBjbGVhcnRleHQgbWVzc2FnZVxuICogQHJldHVybnMge0FycmF5PG1vZHVsZTp0eXBlL2tleWlkPn0gYXJyYXkgb2Yga2V5aWQgb2JqZWN0c1xuICovXG5DbGVhcnRleHRNZXNzYWdlLnByb3RvdHlwZS5nZXRTaWduaW5nS2V5SWRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIga2V5SWRzID0gW107XG4gIHZhciBzaWduYXR1cmVMaXN0ID0gdGhpcy5zaWduYXR1cmUucGFja2V0cztcbiAgc2lnbmF0dXJlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgICBrZXlJZHMucHVzaChwYWNrZXQuaXNzdWVyS2V5SWQpO1xuICB9KTtcbiAgcmV0dXJuIGtleUlkcztcbn07XG5cbi8qKlxuICogU2lnbiB0aGUgY2xlYXJ0ZXh0IG1lc3NhZ2VcbiAqIEBwYXJhbSAge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gcHJpdmF0ZUtleXMgcHJpdmF0ZSBrZXlzIHdpdGggZGVjcnlwdGVkIHNlY3JldCBrZXkgZGF0YSBmb3Igc2lnbmluZ1xuICogQHBhcmFtICB7U2lnbmF0dXJlfSBzaWduYXR1cmUgICAgICAgICAgICAgKG9wdGlvbmFsKSBhbnkgZXhpc3RpbmcgZGV0YWNoZWQgc2lnbmF0dXJlXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIFRoZSBjcmVhdGlvbiB0aW1lIG9mIHRoZSBzaWduYXR1cmUgdGhhdCBzaG91bGQgYmUgY3JlYXRlZFxuICogQHBhcmFtICB7T2JqZWN0fSB1c2VySWQgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSB1c2VyIElEIHRvIHNpZ24gd2l0aCwgZS5nLiB7IG5hbWU6J1N0ZXZlIFNlbmRlcicsIGVtYWlsOidzdGV2ZUBvcGVucGdwLm9yZycgfVxuICogQHJldHVybnMge1Byb21pc2U8bW9kdWxlOmNsZWFydGV4dC5DbGVhcnRleHRNZXNzYWdlPn0gbmV3IGNsZWFydGV4dCBtZXNzYWdlIHdpdGggc2lnbmVkIGNvbnRlbnRcbiAqIEBhc3luY1xuICovXG5DbGVhcnRleHRNZXNzYWdlLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKHByaXZhdGVLZXlzKSB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcbiAgICB2YXIgdXNlcklkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dC50MCA9IENsZWFydGV4dE1lc3NhZ2U7XG4gICAgICAgICAgICBfY29udGV4dC50MSA9IHRoaXMudGV4dDtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbkRldGFjaGVkKHByaXZhdGVLZXlzLCBzaWduYXR1cmUsIGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBfY29udGV4dC50MiA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBuZXcgX2NvbnRleHQudDAoX2NvbnRleHQudDEsIF9jb250ZXh0LnQyKSk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFNpZ24gdGhlIGNsZWFydGV4dCBtZXNzYWdlXG4gKiBAcGFyYW0gIHtBcnJheTxtb2R1bGU6a2V5LktleT59IHByaXZhdGVLZXlzIHByaXZhdGUga2V5cyB3aXRoIGRlY3J5cHRlZCBzZWNyZXQga2V5IGRhdGEgZm9yIHNpZ25pbmdcbiAqIEBwYXJhbSAge1NpZ25hdHVyZX0gc2lnbmF0dXJlICAgICAgICAgICAgIChvcHRpb25hbCkgYW55IGV4aXN0aW5nIGRldGFjaGVkIHNpZ25hdHVyZVxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBUaGUgY3JlYXRpb24gdGltZSBvZiB0aGUgc2lnbmF0dXJlIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSAge09iamVjdH0gdXNlcklkICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlciBJRCB0byBzaWduIHdpdGgsIGUuZy4geyBuYW1lOidTdGV2ZSBTZW5kZXInLCBlbWFpbDonc3RldmVAb3BlbnBncC5vcmcnIH1cbiAqIEByZXR1cm5zIHtQcm9taXNlPG1vZHVsZTpzaWduYXR1cmUuU2lnbmF0dXJlPn0gICAgICBuZXcgZGV0YWNoZWQgc2lnbmF0dXJlIG9mIG1lc3NhZ2UgY29udGVudFxuICogQGFzeW5jXG4gKi9cbkNsZWFydGV4dE1lc3NhZ2UucHJvdG90eXBlLnNpZ25EZXRhY2hlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHByaXZhdGVLZXlzKSB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcbiAgICB2YXIgdXNlcklkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcbiAgICB2YXIgbGl0ZXJhbERhdGFQYWNrZXQ7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGxpdGVyYWxEYXRhUGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGl0ZXJhbCgpO1xuXG4gICAgICAgICAgICBsaXRlcmFsRGF0YVBhY2tldC5zZXRUZXh0KHRoaXMudGV4dCk7XG5cbiAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9zaWduYXR1cmUuU2lnbmF0dXJlO1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfbWVzc2FnZS5jcmVhdGVTaWduYXR1cmVQYWNrZXRzKShsaXRlcmFsRGF0YVBhY2tldCwgcHJpdmF0ZUtleXMsIHNpZ25hdHVyZSwgZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIF9jb250ZXh0Mi50MSA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIG5ldyBfY29udGV4dDIudDAoX2NvbnRleHQyLnQxKSk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDUpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBWZXJpZnkgc2lnbmF0dXJlcyBvZiBjbGVhcnRleHQgc2lnbmVkIG1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBrZXlzIGFycmF5IG9mIGtleXMgdG8gdmVyaWZ5IHNpZ25hdHVyZXNcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAob3B0aW9uYWwpIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIGdpdmVuIGRhdGUsIGkuZS4gY2hlY2sgc2lnbmF0dXJlIGNyZWF0aW9uIHRpbWUgPCBkYXRlIDwgZXhwaXJhdGlvbiB0aW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7a2V5aWQ6IG1vZHVsZTp0eXBlL2tleWlkLCB2YWxpZDogQm9vbGVhbn0+Pn0gbGlzdCBvZiBzaWduZXIncyBrZXlpZCBhbmQgdmFsaWRpdHkgb2Ygc2lnbmF0dXJlXG4gKiBAYXN5bmNcbiAqL1xuQ2xlYXJ0ZXh0TWVzc2FnZS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5ldyBEYXRlKCk7XG5cbiAgcmV0dXJuIHRoaXMudmVyaWZ5RGV0YWNoZWQodGhpcy5zaWduYXR1cmUsIGtleXMsIGRhdGUpO1xufTtcblxuLyoqXG4gKiBWZXJpZnkgc2lnbmF0dXJlcyBvZiBjbGVhcnRleHQgc2lnbmVkIG1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBrZXlzIGFycmF5IG9mIGtleXMgdG8gdmVyaWZ5IHNpZ25hdHVyZXNcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAob3B0aW9uYWwpIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIGdpdmVuIGRhdGUsIGkuZS4gY2hlY2sgc2lnbmF0dXJlIGNyZWF0aW9uIHRpbWUgPCBkYXRlIDwgZXhwaXJhdGlvbiB0aW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7a2V5aWQ6IG1vZHVsZTp0eXBlL2tleWlkLCB2YWxpZDogQm9vbGVhbn0+Pn0gbGlzdCBvZiBzaWduZXIncyBrZXlpZCBhbmQgdmFsaWRpdHkgb2Ygc2lnbmF0dXJlXG4gKiBAYXN5bmNcbiAqL1xuQ2xlYXJ0ZXh0TWVzc2FnZS5wcm90b3R5cGUudmVyaWZ5RGV0YWNoZWQgPSBmdW5jdGlvbiAoc2lnbmF0dXJlLCBrZXlzKSB7XG4gIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBuZXcgRGF0ZSgpO1xuXG4gIHZhciBzaWduYXR1cmVMaXN0ID0gc2lnbmF0dXJlLnBhY2tldHM7XG4gIHZhciBsaXRlcmFsRGF0YVBhY2tldCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0LkxpdGVyYWwoKTtcbiAgLy8gd2UgYXNzdW1lIHRoYXQgY2xlYXJ0ZXh0IHNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgYmFzZWQgb24gVVRGOCBjbGVhcnRleHRcbiAgbGl0ZXJhbERhdGFQYWNrZXQuc2V0VGV4dCh0aGlzLnRleHQpO1xuICByZXR1cm4gKDAsIF9tZXNzYWdlLmNyZWF0ZVZlcmlmaWNhdGlvbk9iamVjdHMpKHNpZ25hdHVyZUxpc3QsIFtsaXRlcmFsRGF0YVBhY2tldF0sIGtleXMsIGRhdGUpO1xufTtcblxuLyoqXG4gKiBHZXQgY2xlYXJ0ZXh0XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBjbGVhcnRleHQgb2YgbWVzc2FnZVxuICovXG5DbGVhcnRleHRNZXNzYWdlLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBub3JtYWxpemUgZW5kIG9mIGxpbmUgdG8gXFxuXG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5uYXRpdmVFT0wodGhpcy50ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBBU0NJSSBhcm1vcmVkIHRleHQgb2YgY2xlYXJ0ZXh0IHNpZ25lZCBtZXNzYWdlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBU0NJSSBhcm1vclxuICovXG5DbGVhcnRleHRNZXNzYWdlLnByb3RvdHlwZS5hcm1vciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhhc2hlcyA9IHRoaXMuc2lnbmF0dXJlLnBhY2tldHMubWFwKGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgICByZXR1cm4gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0Lmhhc2gsIHBhY2tldC5oYXNoQWxnb3JpdGhtKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbiAgaGFzaGVzID0gaGFzaGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSwgaSwgYXIpIHtcbiAgICByZXR1cm4gYXIuaW5kZXhPZihpdGVtKSA9PT0gaTtcbiAgfSk7XG4gIHZhciBib2R5ID0ge1xuICAgIGhhc2g6IGhhc2hlcy5qb2luKCksXG4gICAgdGV4dDogdGhpcy50ZXh0LFxuICAgIGRhdGE6IHRoaXMuc2lnbmF0dXJlLnBhY2tldHMud3JpdGUoKVxuICB9O1xuICByZXR1cm4gX2FybW9yMi5kZWZhdWx0LmVuY29kZShfZW51bXMyLmRlZmF1bHQuYXJtb3Iuc2lnbmVkLCBib2R5KTtcbn07XG5cbi8qKlxuICogcmVhZHMgYW4gT3BlblBHUCBjbGVhcnRleHQgc2lnbmVkIG1lc3NhZ2UgYW5kIHJldHVybnMgYSBDbGVhcnRleHRNZXNzYWdlIG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IGFybW9yZWRUZXh0IHRleHQgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7bW9kdWxlOmNsZWFydGV4dC5DbGVhcnRleHRNZXNzYWdlfSBuZXcgY2xlYXJ0ZXh0IG1lc3NhZ2Ugb2JqZWN0XG4gKiBAc3RhdGljXG4gKi9cbmZ1bmN0aW9uIHJlYWRBcm1vcmVkKGFybW9yZWRUZXh0KSB7XG4gIHZhciBpbnB1dCA9IF9hcm1vcjIuZGVmYXVsdC5kZWNvZGUoYXJtb3JlZFRleHQpO1xuICBpZiAoaW5wdXQudHlwZSAhPT0gX2VudW1zMi5kZWZhdWx0LmFybW9yLnNpZ25lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gY2xlYXJ0ZXh0IHNpZ25lZCBtZXNzYWdlLicpO1xuICB9XG4gIHZhciBwYWNrZXRsaXN0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xuICBwYWNrZXRsaXN0LnJlYWQoaW5wdXQuZGF0YSk7XG4gIHZlcmlmeUhlYWRlcnMoaW5wdXQuaGVhZGVycywgcGFja2V0bGlzdCk7XG4gIHZhciBzaWduYXR1cmUgPSBuZXcgX3NpZ25hdHVyZS5TaWduYXR1cmUocGFja2V0bGlzdCk7XG4gIHJldHVybiBuZXcgQ2xlYXJ0ZXh0TWVzc2FnZShpbnB1dC50ZXh0LCBzaWduYXR1cmUpO1xufVxuXG4vKipcbiAqIENvbXBhcmUgaGFzaCBhbGdvcml0aG0gc3BlY2lmaWVkIGluIHRoZSBhcm1vciBoZWFkZXIgd2l0aCBzaWduYXR1cmVzXG4gKiBAcGFyYW0gIHtBcnJheTxTdHJpbmc+fSBoZWFkZXJzICAgIEFybW9yIGhlYWRlcnNcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuTGlzdH0gcGFja2V0bGlzdCBUaGUgcGFja2V0bGlzdCB3aXRoIHNpZ25hdHVyZSBwYWNrZXRzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB2ZXJpZnlIZWFkZXJzKGhlYWRlcnMsIHBhY2tldGxpc3QpIHtcbiAgdmFyIGNoZWNrSGFzaEFsZ29zID0gZnVuY3Rpb24gY2hlY2tIYXNoQWxnb3MoaGFzaEFsZ29zKSB7XG4gICAgdmFyIGNoZWNrID0gZnVuY3Rpb24gY2hlY2socGFja2V0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGFsZ28pIHtcbiAgICAgICAgcmV0dXJuIHBhY2tldC5oYXNoQWxnb3JpdGhtID09PSBhbGdvO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWNrZXRsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFja2V0bGlzdFtpXS50YWcgPT09IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc2lnbmF0dXJlICYmICFoYXNoQWxnb3Muc29tZShjaGVjayhwYWNrZXRsaXN0W2ldKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICB2YXIgb25lSGVhZGVyID0gbnVsbDtcbiAgdmFyIGhhc2hBbGdvcyA9IFtdO1xuICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIG9uZUhlYWRlciA9IGhlYWRlci5tYXRjaCgvSGFzaDogKC4rKS8pOyAvLyBnZXQgaGVhZGVyIHZhbHVlXG4gICAgaWYgKG9uZUhlYWRlcikge1xuICAgICAgb25lSGVhZGVyID0gb25lSGVhZGVyWzFdLnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIHJlbW92ZSB3aGl0ZXNwYWNlXG4gICAgICBvbmVIZWFkZXIgPSBvbmVIZWFkZXIuc3BsaXQoJywnKTtcbiAgICAgIG9uZUhlYWRlciA9IG9uZUhlYWRlci5tYXAoZnVuY3Rpb24gKGhhc2gpIHtcbiAgICAgICAgaGFzaCA9IGhhc2gudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5oYXNoLCBoYXNoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBoYXNoIGFsZ29yaXRobSBpbiBhcm1vciBoZWFkZXI6ICcgKyBoYXNoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBoYXNoQWxnb3MgPSBoYXNoQWxnb3MuY29uY2F0KG9uZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBcIkhhc2hcIiBoZWFkZXIgYWxsb3dlZCBpbiBjbGVhcnRleHQgc2lnbmVkIG1lc3NhZ2UnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICghaGFzaEFsZ29zLmxlbmd0aCAmJiAhY2hlY2tIYXNoQWxnb3MoW19lbnVtczIuZGVmYXVsdC5oYXNoLm1kNV0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJZiBubyBcIkhhc2hcIiBoZWFkZXIgaW4gY2xlYXJ0ZXh0IHNpZ25lZCBtZXNzYWdlLCB0aGVuIG9ubHkgTUQ1IHNpZ25hdHVyZXMgYWxsb3dlZCcpO1xuICB9IGVsc2UgaWYgKGhhc2hBbGdvcy5sZW5ndGggJiYgIWNoZWNrSGFzaEFsZ29zKGhhc2hBbGdvcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggYWxnb3JpdGhtIG1pc21hdGNoIGluIGFybW9yIGhlYWRlciBhbmQgc2lnbmF0dXJlJyk7XG4gIH1cbn1cblxufSx7XCIuL2VuY29kaW5nL2FybW9yXCI6MzU3LFwiLi9lbnVtc1wiOjM1OSxcIi4vbWVzc2FnZVwiOjM2NixcIi4vcGFja2V0XCI6MzcxLFwiLi9zaWduYXR1cmVcIjozOTEsXCIuL3V0aWxcIjozOTgsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2VzcyxCdWZmZXIpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfdHlwZW9mMiA9IF9kZXJlcV8oXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxudmFyIF9jcmVhdGUgPSBfZGVyZXFfKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGVcIik7XG5cbnZhciBfY3JlYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZSk7XG5cbnZhciBfZnJlZXplID0gX2RlcmVxXyhcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZnJlZXplXCIpO1xuXG52YXIgX2ZyZWV6ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcmVlemUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZnJlZXplLCBTdHJlYW0sIEJpdFN0cmVhbSwgVXRpbCwgQldULCBDUkMzMiwgSHVmZm1hbkFsbG9jYXRvciwgQnppcDI7ZnJlZXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2ZyZWV6ZTIuZGVmYXVsdCA/IF9mcmVlemUyLmRlZmF1bHQgOiBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBlO1xuICB9O1xufSgpLCBTdHJlYW0gPSBmdW5jdGlvbiAoZSkge1xuICB2YXIgdCA9IGZ1bmN0aW9uIHQoKSB7fTtyZXR1cm4gdC5wcm90b3R5cGUucmVhZEJ5dGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUgPSBbMF07cmV0dXJuIDAgPT09IHRoaXMucmVhZChlLCAwLCAxKSA/ICh0aGlzLl9lb2YgPSAhMCwgLTEpIDogZVswXTtcbiAgfSwgdC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChlLCB0LCByKSB7XG4gICAgZm9yICh2YXIgbiwgaSA9IDA7IGkgPCByOykge1xuICAgICAgaWYgKC0xID09PSAobiA9IHRoaXMucmVhZEJ5dGUoKSkpIHtcbiAgICAgICAgdGhpcy5fZW9mID0gITA7YnJlYWs7XG4gICAgICB9ZVt0ICsgaSsrXSA9IG47XG4gICAgfXJldHVybiBpO1xuICB9LCB0LnByb3RvdHlwZS5lb2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fZW9mO1xuICB9LCB0LnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gaXMgbm90IHNlZWthYmxlLlwiKTtcbiAgfSwgdC5wcm90b3R5cGUudGVsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gaXMgbm90IHNlZWthYmxlLlwiKTtcbiAgfSwgdC5wcm90b3R5cGUud3JpdGVCeXRlID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgdCA9IFtlXTt0aGlzLndyaXRlKHQsIDAsIDEpO1xuICB9LCB0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChlLCB0LCByKSB7XG4gICAgdmFyIG47Zm9yIChuID0gMDsgbiA8IHI7IG4rKykge1xuICAgICAgdGhpcy53cml0ZUJ5dGUoZVt0ICsgbl0pO1xuICAgIH1yZXR1cm4gcjtcbiAgfSwgdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7fSwgdC5FT0YgPSAtMSwgZSh0KTtcbn0oZnJlZXplKSwgQml0U3RyZWFtID0gZnVuY3Rpb24gKGUpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbiB0KF90KSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByID0gMjU2O3RoaXMucmVhZEJpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKDAgPT0gKDI1NSAmIHIpKSB7XG4gICAgICAgICAgdmFyIG4gPSBfdC5yZWFkQnl0ZSgpO2lmIChuID09PSBlLkVPRikgcmV0dXJuIHRoaXMuX2VvZiA9ICEwLCBuO3IgPSBuIDw8IDEgfCAxO1xuICAgICAgICB9dmFyIGkgPSAyNTYgJiByID8gMSA6IDA7cmV0dXJuIHIgPDw9IDEsIGk7XG4gICAgICB9LCB0aGlzLnNlZWtCaXQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgdCA9IGUgPj4+IDMsXG4gICAgICAgICAgICByID0gZSAtIDggKiB0O3RoaXMuc2Vlayh0KSwgdGhpcy5fZW9mID0gITEsIHRoaXMucmVhZEJpdHMocik7XG4gICAgICB9LCB0aGlzLnRlbGxCaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGUgPSA4ICogX3QudGVsbCgpLCBuID0gcjsgMCAhPSAoMjU1ICYgbik7KSB7XG4gICAgICAgICAgZS0tLCBuIDw8PSAxO1xuICAgICAgICB9cmV0dXJuIGU7XG4gICAgICB9LCB0aGlzLnJlYWRCeXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gMCA9PSAoMjU1ICYgcikgPyBfdC5yZWFkQnl0ZSgpIDogdGhpcy5yZWFkQml0cyg4KTtcbiAgICAgIH0sIHRoaXMuc2VlayA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIF90LnNlZWsoZSksIHIgPSAyNTY7XG4gICAgICB9O1xuICAgIH0pLmNhbGwodGhpcyksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlID0gMTt0aGlzLndyaXRlQml0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgZSA8PD0gMSwgciAmJiAoZSB8PSAxKSwgMjU2ICYgZSAmJiAoX3Qud3JpdGVCeXRlKDI1NSAmIGUpLCBlID0gMSk7XG4gICAgICB9LCB0aGlzLndyaXRlQnl0ZSA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIDEgPT09IGUgPyBfdC53cml0ZUJ5dGUocikgOiBfdC53cml0ZUJpdHMoOCwgcik7XG4gICAgICB9LCB0aGlzLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKDsgMSAhPT0gZTspIHtcbiAgICAgICAgICB0aGlzLndyaXRlQml0KDApO1xuICAgICAgICB9X3QuZmx1c2ggJiYgX3QuZmx1c2goKTtcbiAgICAgIH07XG4gICAgfS5jYWxsKHRoaXMpO1xuICB9O3JldHVybiB0LkVPRiA9IGUuRU9GLCB0LnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShlLnByb3RvdHlwZSksIHQucHJvdG90eXBlLnJlYWRCaXRzID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgdCxcbiAgICAgICAgciA9IDA7aWYgKGUgPiAzMSkgcmV0dXJuIChyID0gNjU1MzYgKiB0aGlzLnJlYWRCaXRzKGUgLSAxNikpICsgdGhpcy5yZWFkQml0cygxNik7Zm9yICh0ID0gMDsgdCA8IGU7IHQrKykge1xuICAgICAgciA8PD0gMSwgdGhpcy5yZWFkQml0KCkgPiAwICYmIHIrKztcbiAgICB9cmV0dXJuIHI7XG4gIH0sIHQucHJvdG90eXBlLndyaXRlQml0cyA9IGZ1bmN0aW9uIChlLCB0KSB7XG4gICAgaWYgKGUgPiAzMikge1xuICAgICAgdmFyIHIgPSA2NTUzNSAmIHQsXG4gICAgICAgICAgbiA9ICh0IC0gcikgLyA2NTUzNjtyZXR1cm4gdGhpcy53cml0ZUJpdHMoZSAtIDE2LCBuKSwgdm9pZCB0aGlzLndyaXRlQml0cygxNiwgcik7XG4gICAgfXZhciBpO2ZvciAoaSA9IGUgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy53cml0ZUJpdCh0ID4+PiBpICYgMSk7XG4gICAgfVxuICB9LCB0O1xufShTdHJlYW0pLCBVdGlsID0gZnVuY3Rpb24gKGUsIHQpIHtcbiAgdmFyIHIgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkobnVsbCksXG4gICAgICBuID0gdC5FT0Y7ci5jb2VyY2VJbnB1dFN0cmVhbSA9IGZ1bmN0aW9uIChlLCByKSB7XG4gICAgaWYgKFwicmVhZEJ5dGVcIiBpbiBlKSB7XG4gICAgICBpZiAociAmJiAhKFwicmVhZFwiIGluIGUpKSB7XG4gICAgICAgIHZhciBpID0gZTtlID0gbmV3IHQoKSwgZS5yZWFkQnl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZSA9IGkucmVhZEJ5dGUoKTtyZXR1cm4gZSA9PT0gbiAmJiAodGhpcy5fZW9mID0gITApLCBlO1xuICAgICAgICB9LCBcInNpemVcIiBpbiBpICYmIChlLnNpemUgPSBpLnNpemUpLCBcInNlZWtcIiBpbiBpICYmIChlLnNlZWsgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGkuc2VlayhlKSwgdGhpcy5fZW9mID0gITE7XG4gICAgICAgIH0pLCBcInRlbGxcIiBpbiBpICYmIChlLnRlbGwgPSBpLnRlbGwuYmluZChpKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvID0gZTtlID0gbmV3IHQoKSwgZS5zaXplID0gby5sZW5ndGgsIGUucG9zID0gMCwgZS5yZWFkQnl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zID49IHRoaXMuc2l6ZSA/IG4gOiBvW3RoaXMucG9zKytdO1xuICAgICAgfSwgZS5yZWFkID0gZnVuY3Rpb24gKGUsIHQsIHIpIHtcbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCByICYmIHRoaXMucG9zIDwgby5sZW5ndGg7KSB7XG4gICAgICAgICAgZVt0KytdID0gb1t0aGlzLnBvcysrXSwgbisrO1xuICAgICAgICB9cmV0dXJuIG47XG4gICAgICB9LCBlLnNlZWsgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB0aGlzLnBvcyA9IGU7XG4gICAgICB9LCBlLnRlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvcztcbiAgICAgIH0sIGUuZW9mID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgPj0gby5sZW5ndGg7XG4gICAgICB9O1xuICAgIH1yZXR1cm4gZTtcbiAgfTt2YXIgaSA9IGZ1bmN0aW9uIGkoZSwgdCkge1xuICAgIHRoaXMuYnVmZmVyID0gZSwgdGhpcy5yZXNpemVPayA9IHQsIHRoaXMucG9zID0gMDtcbiAgfTtpLnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KSh0LnByb3RvdHlwZSksIGkucHJvdG90eXBlLndyaXRlQnl0ZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKHRoaXMucmVzaXplT2sgJiYgdGhpcy5wb3MgPj0gdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICB2YXIgdCA9IHIubWFrZVU4QnVmZmVyKDIgKiB0aGlzLmJ1ZmZlci5sZW5ndGgpO3Quc2V0KHRoaXMuYnVmZmVyKSwgdGhpcy5idWZmZXIgPSB0O1xuICAgIH10aGlzLmJ1ZmZlclt0aGlzLnBvcysrXSA9IGU7XG4gIH0sIGkucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wb3MgIT09IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLnJlc2l6ZU9rKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwib3V0cHV0c2l6ZSBkb2VzIG5vdCBtYXRjaCBkZWNvZGVkIGlucHV0XCIpO3ZhciBlID0gci5tYWtlVThCdWZmZXIodGhpcy5wb3MpO2Uuc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsIHRoaXMucG9zKSksIHRoaXMuYnVmZmVyID0gZTtcbiAgICB9cmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9LCByLmNvZXJjZU91dHB1dFN0cmVhbSA9IGZ1bmN0aW9uIChlLCB0KSB7XG4gICAgdmFyIG4gPSB7IHN0cmVhbTogZSwgcmV0dmFsOiBlIH07aWYgKGUpIHtcbiAgICAgIGlmIChcIm9iamVjdFwiID09ICh0eXBlb2YgZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoZSkpICYmIFwid3JpdGVCeXRlXCIgaW4gZSkgcmV0dXJuIG47XCJudW1iZXJcIiA9PSB0eXBlb2YgdCA/IChjb25zb2xlLmFzc2VydCh0ID49IDApLCBuLnN0cmVhbSA9IG5ldyBpKHIubWFrZVU4QnVmZmVyKHQpLCAhMSkpIDogbi5zdHJlYW0gPSBuZXcgaShlLCAhMSk7XG4gICAgfSBlbHNlIG4uc3RyZWFtID0gbmV3IGkoci5tYWtlVThCdWZmZXIoMTYzODQpLCAhMCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCBcInJldHZhbFwiLCB7IGdldDogbi5zdHJlYW0uZ2V0QnVmZmVyLmJpbmQobi5zdHJlYW0pIH0pLCBuO1xuICB9LCByLmNvbXByZXNzRmlsZUhlbHBlciA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBvLCBmKSB7XG4gICAgICBpID0gci5jb2VyY2VJbnB1dFN0cmVhbShpKTt2YXIgYSA9IHIuY29lcmNlT3V0cHV0U3RyZWFtKG8sIG8pO28gPSBhLnN0cmVhbTt2YXIgdTtmb3IgKHUgPSAwOyB1IDwgZS5sZW5ndGg7IHUrKykge1xuICAgICAgICBvLndyaXRlQnl0ZShlLmNoYXJDb2RlQXQodSkpO1xuICAgICAgfXZhciBzO2lmIChzID0gXCJzaXplXCIgaW4gaSAmJiBpLnNpemUgPj0gMCA/IGkuc2l6ZSA6IC0xLCBuKSB7XG4gICAgICAgIHZhciBjID0gci5jb2VyY2VPdXRwdXRTdHJlYW0oW10pO2ZvciAoci53cml0ZVVuc2lnbmVkTnVtYmVyKGMuc3RyZWFtLCBzICsgMSksIGMgPSBjLnJldHZhbCwgdSA9IDA7IHUgPCBjLmxlbmd0aCAtIDE7IHUrKykge1xuICAgICAgICAgIG8ud3JpdGVCeXRlKGNbdV0pO1xuICAgICAgICB9biA9IGNbYy5sZW5ndGggLSAxXTtcbiAgICAgIH0gZWxzZSByLndyaXRlVW5zaWduZWROdW1iZXIobywgcyArIDEpO3JldHVybiB0KGksIG8sIHMsIGYsIG4pLCBhLnJldHZhbDtcbiAgICB9O1xuICB9LCByLmRlY29tcHJlc3NGaWxlSGVscGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIG4gPSByLmNvZXJjZUlucHV0U3RyZWFtKG4pO3ZhciBvO2ZvciAobyA9IDA7IG8gPCBlLmxlbmd0aDsgbysrKSB7XG4gICAgICAgIGlmIChlLmNoYXJDb2RlQXQobykgIT09IG4ucmVhZEJ5dGUoKSkgdGhyb3cgbmV3IEVycm9yKFwiQmFkIG1hZ2ljXCIpO1xuICAgICAgfXZhciBmID0gci5yZWFkVW5zaWduZWROdW1iZXIobikgLSAxLFxuICAgICAgICAgIGEgPSByLmNvZXJjZU91dHB1dFN0cmVhbShpLCBmKTtyZXR1cm4gaSA9IGEuc3RyZWFtLCB0KG4sIGksIGYpLCBhLnJldHZhbDtcbiAgICB9O1xuICB9LCByLmNvbXByZXNzV2l0aE1vZGVsID0gZnVuY3Rpb24gKGUsIHQsIHIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSAhPT0gdDspIHtcbiAgICAgIHZhciBvID0gZS5yZWFkQnl0ZSgpO2lmIChvID09PSBuKSB7XG4gICAgICAgIHIuZW5jb2RlKDI1Nik7YnJlYWs7XG4gICAgICB9ci5lbmNvZGUobyksIGkrKztcbiAgICB9XG4gIH0sIHIuZGVjb21wcmVzc1dpdGhNb2RlbCA9IGZ1bmN0aW9uIChlLCB0LCByKSB7XG4gICAgZm9yICh2YXIgbiA9IDA7IG4gIT09IHQ7KSB7XG4gICAgICB2YXIgaSA9IHIuZGVjb2RlKCk7aWYgKDI1NiA9PT0gaSkgYnJlYWs7ZS53cml0ZUJ5dGUoaSksIG4rKztcbiAgICB9XG4gIH0sIHIud3JpdGVVbnNpZ25lZE51bWJlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG4gICAgY29uc29sZS5hc3NlcnQodCA+PSAwKTt2YXIgcixcbiAgICAgICAgbiA9IFtdO2RvIHtcbiAgICAgIG4ucHVzaCgxMjcgJiB0KSwgdCA9IE1hdGguZmxvb3IodCAvIDEyOCk7XG4gICAgfSB3aGlsZSAoMCAhPT0gdCk7Zm9yIChuWzBdIHw9IDEyOCwgciA9IG4ubGVuZ3RoIC0gMTsgciA+PSAwOyByLS0pIHtcbiAgICAgIGUud3JpdGVCeXRlKG5bcl0pO1xuICAgIH1yZXR1cm4gZTtcbiAgfSwgci5yZWFkVW5zaWduZWROdW1iZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgIGZvciAodmFyIHQsIHIgPSAwOzspIHtcbiAgICAgIGlmICgxMjggJiAodCA9IGUucmVhZEJ5dGUoKSkpIHtcbiAgICAgICAgciArPSAxMjcgJiB0O2JyZWFrO1xuICAgICAgfXIgPSAxMjggKiAociArIHQpO1xuICAgIH1yZXR1cm4gcjtcbiAgfTt2YXIgbyA9IGZ1bmN0aW9uIG8oZSkge1xuICAgIGZvciAodmFyIHQgPSAwLCByID0gZS5sZW5ndGg7IHQgPCByOyB0KyspIHtcbiAgICAgIGVbdF0gPSAwO1xuICAgIH1yZXR1cm4gZTtcbiAgfSxcbiAgICAgIGYgPSBmdW5jdGlvbiBmKGUpIHtcbiAgICByZXR1cm4gbyhuZXcgQXJyYXkoZSkpO1xuICB9LFxuICAgICAgYSA9IGZ1bmN0aW9uIGEoZSkge1xuICAgIHJldHVybiBlO1xuICB9O1widW5kZWZpbmVkXCIgIT0gdHlwZW9mIHByb2Nlc3MgJiYgQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChuZXcgVWludDMyQXJyYXkoMTI4KSwgZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gMCAhPT0gZTtcbiAgfSkgJiYgKGEgPSBvKSwgci5tYWtlVThCdWZmZXIgPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBVaW50OEFycmF5ID8gZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gYShuZXcgVWludDhBcnJheShlKSk7XG4gIH0gOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBCdWZmZXIgPyBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB0ID0gbmV3IEJ1ZmZlcihlKTtyZXR1cm4gdC5maWxsKDApLCB0O1xuICB9IDogZiwgci5tYWtlVTE2QnVmZmVyID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgVWludDE2QXJyYXkgPyBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBhKG5ldyBVaW50MTZBcnJheShlKSk7XG4gIH0gOiBmLCByLm1ha2VVMzJCdWZmZXIgPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBVaW50MzJBcnJheSA/IGZ1bmN0aW9uIChlKSB7XG4gICAgcmV0dXJuIGEobmV3IFVpbnQzMkFycmF5KGUpKTtcbiAgfSA6IGYsIHIubWFrZVMzMkJ1ZmZlciA9IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEludDMyQXJyYXkgPyBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBhKG5ldyBJbnQzMkFycmF5KGUpKTtcbiAgfSA6IGYsIHIuYXJyYXljb3B5ID0gZnVuY3Rpb24gKGUsIHQpIHtcbiAgICBjb25zb2xlLmFzc2VydChlLmxlbmd0aCA+PSB0Lmxlbmd0aCk7Zm9yICh2YXIgciA9IDAsIG4gPSB0Lmxlbmd0aDsgciA8IG47IHIrKykge1xuICAgICAgZVtyXSA9IHRbcl07XG4gICAgfXJldHVybiBlO1xuICB9O3ZhciB1ID0gWzAsIDEsIDIsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDhdO2NvbnNvbGUuYXNzZXJ0KDI1NiA9PT0gdS5sZW5ndGgpO3ZhciBzID0gci5mbHMgPSBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBjb25zb2xlLmFzc2VydChlID49IDApLCBlID4gNDI5NDk2NzI5NSA/IDMyICsgcyhNYXRoLmZsb29yKGUgLyA0Mjk0OTY3Mjk2KSkgOiAwICE9ICg0Mjk0OTAxNzYwICYgZSkgPyAwICE9ICg0Mjc4MTkwMDgwICYgZSkgPyAyNCArIHVbZSA+Pj4gMjQgJiAyNTVdIDogMTYgKyB1W2UgPj4+IDE2XSA6IDAgIT0gKDY1MjgwICYgZSkgPyA4ICsgdVtlID4+PiA4XSA6IHVbZV07XG4gIH07cmV0dXJuIHIubG9nMmMgPSBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiAwID09PSBlID8gLTEgOiBzKGUgLSAxKTtcbiAgfSwgZShyKTtcbn0oZnJlZXplLCBTdHJlYW0pLCBCV1QgPSBmdW5jdGlvbiAoZSwgdCkge1xuICB2YXIgciA9IGNvbnNvbGUuYXNzZXJ0LmJpbmQoY29uc29sZSksXG4gICAgICBuID0gZnVuY3Rpb24gbihlLCB0LCByLCBfbikge1xuICAgIHZhciBpO2ZvciAoaSA9IDA7IGkgPCBfbjsgaSsrKSB7XG4gICAgICB0W2ldID0gMDtcbiAgICB9Zm9yIChpID0gMDsgaSA8IHI7IGkrKykge1xuICAgICAgdFtlW2ldXSsrO1xuICAgIH1cbiAgfSxcbiAgICAgIGkgPSBmdW5jdGlvbiBpKGUsIHQsIHIsIG4pIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbyA9IDA7aWYgKG4pIGZvciAoaSA9IDA7IGkgPCByOyBpKyspIHtcbiAgICAgIG8gKz0gZVtpXSwgdFtpXSA9IG87XG4gICAgfSBlbHNlIGZvciAoaSA9IDA7IGkgPCByOyBpKyspIHtcbiAgICAgIG8gKz0gZVtpXSwgdFtpXSA9IG8gLSBlW2ldO1xuICAgIH1cbiAgfSxcbiAgICAgIG8gPSBmdW5jdGlvbiBvKGUsIHQsIF9vLCBmLCBhLCB1KSB7XG4gICAgdmFyIHMsIGMsIGgsIGwsIGQ7Zm9yIChfbyA9PT0gZiAmJiBuKGUsIF9vLCBhLCB1KSwgaShfbywgZiwgdSwgITEpLCBoID0gYSAtIDEsIHMgPSBmW2QgPSBlW2hdXSwgaC0tLCB0W3MrK10gPSBlW2hdIDwgZCA/IH5oIDogaCwgYyA9IDA7IGMgPCBhOyBjKyspIHtcbiAgICAgIChoID0gdFtjXSkgPiAwID8gKHIoZVtoXSA+PSBlW2ggKyAxXSksIChsID0gZVtoXSkgIT09IGQgJiYgKGZbZF0gPSBzLCBzID0gZltkID0gbF0pLCByKGMgPCBzKSwgaC0tLCB0W3MrK10gPSBlW2hdIDwgZCA/IH5oIDogaCwgdFtjXSA9IDApIDogaCA8IDAgJiYgKHRbY10gPSB+aCk7XG4gICAgfWZvciAoX28gPT09IGYgJiYgbihlLCBfbywgYSwgdSksIGkoX28sIGYsIHUsIDEpLCBjID0gYSAtIDEsIHMgPSBmW2QgPSAwXTsgYyA+PSAwOyBjLS0pIHtcbiAgICAgIChoID0gdFtjXSkgPiAwICYmIChyKGVbaF0gPD0gZVtoICsgMV0pLCAobCA9IGVbaF0pICE9PSBkICYmIChmW2RdID0gcywgcyA9IGZbZCA9IGxdKSwgcihzIDw9IGMpLCBoLS0sIHRbLS1zXSA9IGVbaF0gPiBkID8gfihoICsgMSkgOiBoLCB0W2NdID0gMCk7XG4gICAgfVxuICB9LFxuICAgICAgZiA9IGZ1bmN0aW9uIGYoZSwgdCwgbiwgaSkge1xuICAgIHZhciBvLCBmLCBhLCB1LCBzLCBjLCBoLCBsLCBkLCBCO2ZvciAocihuID4gMCksIG8gPSAwOyAoYSA9IHRbb10pIDwgMDsgbysrKSB7XG4gICAgICB0W29dID0gfmEsIHIobyArIDEgPCBuKTtcbiAgICB9aWYgKG8gPCBpKSBmb3IgKGYgPSBvLCBvKys7IHIobyA8IG4pLCAhKChhID0gdFtvXSkgPCAwICYmICh0W2YrK10gPSB+YSwgdFtvXSA9IDAsIGYgPT09IGkpKTsgbysrKSB7fWwgPSBlW28gPSBmID0gbiAtIDFdO2RvIHtcbiAgICAgIGQgPSBsO1xuICAgIH0gd2hpbGUgKC0tbyA+PSAwICYmIChsID0gZVtvXSkgPj0gZCk7Zm9yICg7IG8gPj0gMDspIHtcbiAgICAgIGRvIHtcbiAgICAgICAgZCA9IGw7XG4gICAgICB9IHdoaWxlICgtLW8gPj0gMCAmJiAobCA9IGVbb10pIDw9IGQpO2lmIChvID49IDApIHtcbiAgICAgICAgdFtpICsgKG8gKyAxID4+PiAxKV0gPSBmIC0gbywgZiA9IG8gKyAxO2RvIHtcbiAgICAgICAgICBkID0gbDtcbiAgICAgICAgfSB3aGlsZSAoLS1vID49IDAgJiYgKGwgPSBlW29dKSA+PSBkKTtcbiAgICAgIH1cbiAgICB9Zm9yIChvID0gMCwgaCA9IDAsIHUgPSBuLCBjID0gMDsgbyA8IGk7IG8rKykge1xuICAgICAgaWYgKGEgPSB0W29dLCBzID0gdFtpICsgKGEgPj4+IDEpXSwgQiA9ICEwLCBzID09PSBjICYmIHUgKyBzIDwgbikge1xuICAgICAgICBmb3IgKGYgPSAwOyBmIDwgcyAmJiBlW2EgKyBmXSA9PT0gZVt1ICsgZl07KSB7XG4gICAgICAgICAgZisrO1xuICAgICAgICB9ZiA9PT0gcyAmJiAoQiA9ICExKTtcbiAgICAgIH1CICYmIChoKyssIHUgPSBhLCBjID0gcyksIHRbaSArIChhID4+PiAxKV0gPSBoO1xuICAgIH1yZXR1cm4gaDtcbiAgfSxcbiAgICAgIGEgPSBmdW5jdGlvbiBhKGUsIHQsIG8sIGYsIF9hLCB1KSB7XG4gICAgdmFyIHMsIGMsIGgsIGwsIGQ7Zm9yIChvID09PSBmICYmIG4oZSwgbywgX2EsIHUpLCBpKG8sIGYsIHUsICExKSwgaCA9IF9hIC0gMSwgcyA9IGZbZCA9IGVbaF1dLCB0W3MrK10gPSBoID4gMCAmJiBlW2ggLSAxXSA8IGQgPyB+aCA6IGgsIGMgPSAwOyBjIDwgX2E7IGMrKykge1xuICAgICAgaCA9IHRbY10sIHRbY10gPSB+aCwgaCA+IDAgJiYgKGgtLSwgcihlW2hdID49IGVbaCArIDFdKSwgKGwgPSBlW2hdKSAhPT0gZCAmJiAoZltkXSA9IHMsIHMgPSBmW2QgPSBsXSksIHIoYyA8IHMpLCB0W3MrK10gPSBoID4gMCAmJiBlW2ggLSAxXSA8IGQgPyB+aCA6IGgpO1xuICAgIH1mb3IgKG8gPT09IGYgJiYgbihlLCBvLCBfYSwgdSksIGkobywgZiwgdSwgITApLCBjID0gX2EgLSAxLCBzID0gZltkID0gMF07IGMgPj0gMDsgYy0tKSB7XG4gICAgICAoaCA9IHRbY10pID4gMCA/IChoLS0sIHIoZVtoXSA8PSBlW2ggKyAxXSksIChsID0gZVtoXSkgIT09IGQgJiYgKGZbZF0gPSBzLCBzID0gZltkID0gbF0pLCByKHMgPD0gYyksIHRbLS1zXSA9IDAgPT09IGggfHwgZVtoIC0gMV0gPiBkID8gfmggOiBoKSA6IHRbY10gPSB+aDtcbiAgICB9XG4gIH0sXG4gICAgICB1ID0gZnVuY3Rpb24gdShlLCB0LCBvLCBmLCBhLCBfdSkge1xuICAgIHZhciBzLFxuICAgICAgICBjLFxuICAgICAgICBoLFxuICAgICAgICBsLFxuICAgICAgICBkLFxuICAgICAgICBCID0gLTE7Zm9yIChvID09PSBmICYmIG4oZSwgbywgYSwgX3UpLCBpKG8sIGYsIF91LCAhMSksIGggPSBhIC0gMSwgcyA9IGZbZCA9IGVbaF1dLCB0W3MrK10gPSBoID4gMCAmJiBlW2ggLSAxXSA8IGQgPyB+aCA6IGgsIGMgPSAwOyBjIDwgYTsgYysrKSB7XG4gICAgICAoaCA9IHRbY10pID4gMCA/IChoLS0sIHIoZVtoXSA+PSBlW2ggKyAxXSksIHRbY10gPSB+KGwgPSBlW2hdKSwgbCAhPT0gZCAmJiAoZltkXSA9IHMsIHMgPSBmW2QgPSBsXSksIHIoYyA8IHMpLCB0W3MrK10gPSBoID4gMCAmJiBlW2ggLSAxXSA8IGQgPyB+aCA6IGgpIDogMCAhPT0gaCAmJiAodFtjXSA9IH5oKTtcbiAgICB9Zm9yIChvID09PSBmICYmIG4oZSwgbywgYSwgX3UpLCBpKG8sIGYsIF91LCAhMCksIGMgPSBhIC0gMSwgcyA9IGZbZCA9IDBdOyBjID49IDA7IGMtLSkge1xuICAgICAgKGggPSB0W2NdKSA+IDAgPyAoaC0tLCByKGVbaF0gPD0gZVtoICsgMV0pLCB0W2NdID0gbCA9IGVbaF0sIGwgIT09IGQgJiYgKGZbZF0gPSBzLCBzID0gZltkID0gbF0pLCByKHMgPD0gYyksIHRbLS1zXSA9IGggPiAwICYmIGVbaCAtIDFdID4gZCA/IH5lW2ggLSAxXSA6IGgpIDogMCAhPT0gaCA/IHRbY10gPSB+aCA6IEIgPSBjO1xuICAgIH1yZXR1cm4gQjtcbiAgfSxcbiAgICAgIHMgPSBmdW5jdGlvbiBzKGUsIGMsIGgsIGwsIGQsIEIpIHtcbiAgICB2YXIgcCxcbiAgICAgICAgdixcbiAgICAgICAgbSxcbiAgICAgICAgdyxcbiAgICAgICAgRSxcbiAgICAgICAgZyxcbiAgICAgICAgXyxcbiAgICAgICAgYixcbiAgICAgICAgeSxcbiAgICAgICAgUixcbiAgICAgICAgQyxcbiAgICAgICAgayxcbiAgICAgICAgVCxcbiAgICAgICAgTyA9IDAsXG4gICAgICAgIFMgPSAwO2ZvciAoZCA8PSAyNTYgPyAocCA9IHQubWFrZVMzMkJ1ZmZlcihkKSwgZCA8PSBoID8gKHYgPSBjLnN1YmFycmF5KGwgKyBoIC0gZCksIFMgPSAxKSA6ICh2ID0gdC5tYWtlUzMyQnVmZmVyKGQpLCBTID0gMykpIDogZCA8PSBoID8gKHAgPSBjLnN1YmFycmF5KGwgKyBoIC0gZCksIGQgPD0gaCAtIGQgPyAodiA9IGMuc3ViYXJyYXkobCArIGggLSAyICogZCksIFMgPSAwKSA6IGQgPD0gMTAyNCA/ICh2ID0gdC5tYWtlUzMyQnVmZmVyKGQpLCBTID0gMikgOiAodiA9IHAsIFMgPSA4KSkgOiAocCA9IHYgPSB0Lm1ha2VTMzJCdWZmZXIoZCksIFMgPSAxMiksIG4oZSwgcCwgbCwgZCksIGkocCwgdiwgZCwgITApLCB3ID0gMDsgdyA8IGw7IHcrKykge1xuICAgICAgY1t3XSA9IDA7XG4gICAgfWcgPSAtMSwgdyA9IGwgLSAxLCBFID0gbCwgXyA9IDAsIGsgPSBlW2wgLSAxXTtkbyB7XG4gICAgICBUID0gaztcbiAgICB9IHdoaWxlICgtLXcgPj0gMCAmJiAoayA9IGVbd10pID49IFQpO2ZvciAoOyB3ID49IDA7KSB7XG4gICAgICBkbyB7XG4gICAgICAgIFQgPSBrO1xuICAgICAgfSB3aGlsZSAoLS13ID49IDAgJiYgKGsgPSBlW3ddKSA8PSBUKTtpZiAodyA+PSAwKSB7XG4gICAgICAgIGcgPj0gMCAmJiAoY1tnXSA9IEUpLCBnID0gLS12W1RdLCBFID0gdywgKytfO2RvIHtcbiAgICAgICAgICBUID0gaztcbiAgICAgICAgfSB3aGlsZSAoLS13ID49IDAgJiYgKGsgPSBlW3ddKSA+PSBUKTtcbiAgICAgIH1cbiAgICB9aWYgKF8gPiAxID8gKG8oZSwgYywgcCwgdiwgbCwgZCksIFIgPSBmKGUsIGMsIGwsIF8pKSA6IDEgPT09IF8gPyAoY1tnXSA9IEUgKyAxLCBSID0gMSkgOiBSID0gMCwgUiA8IF8pIHtcbiAgICAgIGZvciAoMCAhPSAoNCAmIFMpICYmIChwID0gbnVsbCwgdiA9IG51bGwpLCAwICE9ICgyICYgUykgJiYgKHYgPSBudWxsKSwgQyA9IGwgKyBoIC0gMiAqIF8sIDAgPT0gKDEzICYgUykgJiYgKGQgKyBSIDw9IEMgPyBDIC09IGQgOiBTIHw9IDgpLCByKGwgPj4+IDEgPD0gQyArIF8pLCB3ID0gXyArIChsID4+PiAxKSAtIDEsIEUgPSAyICogXyArIEMgLSAxOyBfIDw9IHc7IHctLSkge1xuICAgICAgICAwICE9PSBjW3ddICYmIChjW0UtLV0gPSBjW3ddIC0gMSk7XG4gICAgICB9bSA9IGMuc3ViYXJyYXkoXyArIEMpLCBzKG0sIGMsIEMsIF8sIFIsICExKSwgbSA9IG51bGwsIHcgPSBsIC0gMSwgRSA9IDIgKiBfIC0gMSwgayA9IGVbbCAtIDFdO2RvIHtcbiAgICAgICAgVCA9IGs7XG4gICAgICB9IHdoaWxlICgtLXcgPj0gMCAmJiAoayA9IGVbd10pID49IFQpO2ZvciAoOyB3ID49IDA7KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBUID0gaztcbiAgICAgICAgfSB3aGlsZSAoLS13ID49IDAgJiYgKGsgPSBlW3ddKSA8PSBUKTtpZiAodyA+PSAwKSB7XG4gICAgICAgICAgY1tFLS1dID0gdyArIDE7ZG8ge1xuICAgICAgICAgICAgVCA9IGs7XG4gICAgICAgICAgfSB3aGlsZSAoLS13ID49IDAgJiYgKGsgPSBlW3ddKSA+PSBUKTtcbiAgICAgICAgfVxuICAgICAgfWZvciAodyA9IDA7IHcgPCBfOyB3KyspIHtcbiAgICAgICAgY1t3XSA9IGNbXyArIGNbd11dO1xuICAgICAgfTAgIT0gKDQgJiBTKSAmJiAocCA9IHYgPSB0Lm1ha2VTMzJCdWZmZXIoZCkpLCAwICE9ICgyICYgUykgJiYgKHYgPSB0Lm1ha2VTMzJCdWZmZXIoZCkpO1xuICAgIH1pZiAoMCAhPSAoOCAmIFMpICYmIG4oZSwgcCwgbCwgZCksIF8gPiAxKSB7XG4gICAgICBpKHAsIHYsIGQsICEwKSwgdyA9IF8gLSAxLCBFID0gbCwgYiA9IGNbXyAtIDFdLCBUID0gZVtiXTtkbyB7XG4gICAgICAgIGZvciAoeSA9IHZbayA9IFRdOyB5IDwgRTspIHtcbiAgICAgICAgICBjWy0tRV0gPSAwO1xuICAgICAgICB9ZG8ge1xuICAgICAgICAgIGlmIChjWy0tRV0gPSBiLCAtLXcgPCAwKSBicmVhaztiID0gY1t3XTtcbiAgICAgICAgfSB3aGlsZSAoKFQgPSBlW2JdKSA9PT0gayk7XG4gICAgICB9IHdoaWxlICh3ID49IDApO2ZvciAoOyBFID4gMDspIHtcbiAgICAgICAgY1stLUVdID0gMDtcbiAgICAgIH1cbiAgICB9cmV0dXJuIEIgPyBPID0gdShlLCBjLCBwLCB2LCBsLCBkKSA6IGEoZSwgYywgcCwgdiwgbCwgZCksIHAgPSBudWxsLCB2ID0gbnVsbCwgTztcbiAgfSxcbiAgICAgIGMgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkobnVsbCk7cmV0dXJuIGMuc3VmZml4c29ydCA9IGZ1bmN0aW9uIChlLCB0LCBuLCBpKSB7XG4gICAgaWYgKHIoZSAmJiB0ICYmIGUubGVuZ3RoID49IG4gJiYgdC5sZW5ndGggPj0gbiksIG4gPD0gMSkgcmV0dXJuIDEgPT09IG4gJiYgKHRbMF0gPSAwKSwgMDtpZiAoIWkpIGlmICgxID09PSBlLkJZVEVTX1BFUl9FTEVNRU5UKSBpID0gMjU2O2Vsc2Uge1xuICAgICAgaWYgKDIgIT09IGUuQllURVNfUEVSX0VMRU1FTlQpIHRocm93IG5ldyBFcnJvcihcIk5lZWQgdG8gc3BlY2lmeSBhbHBoYWJldFNpemVcIik7aSA9IDY1NTM2O1xuICAgIH1yZXR1cm4gcihpID4gMCksIGUuQllURVNfUEVSX0VMRU1FTlQgJiYgcihpIDw9IDEgPDwgOCAqIGUuQllURVNfUEVSX0VMRU1FTlQpLCBzKGUsIHQsIDAsIG4sIGksICExKTtcbiAgfSwgYy5id3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChlLCB0LCBuLCBpLCBvKSB7XG4gICAgdmFyIGYsIGE7aWYgKHIoZSAmJiB0ICYmIG4pLCByKGUubGVuZ3RoID49IGkgJiYgdC5sZW5ndGggPj0gaSAmJiBuLmxlbmd0aCA+PSBpKSwgaSA8PSAxKSByZXR1cm4gMSA9PT0gaSAmJiAodFswXSA9IGVbMF0pLCBpO2lmICghbykgaWYgKDEgPT09IGUuQllURVNfUEVSX0VMRU1FTlQpIG8gPSAyNTY7ZWxzZSB7XG4gICAgICBpZiAoMiAhPT0gZS5CWVRFU19QRVJfRUxFTUVOVCkgdGhyb3cgbmV3IEVycm9yKFwiTmVlZCB0byBzcGVjaWZ5IGFscGhhYmV0U2l6ZVwiKTtvID0gNjU1MzY7XG4gICAgfWZvciAocihvID4gMCksIGUuQllURVNfUEVSX0VMRU1FTlQgJiYgcihvIDw9IDEgPDwgOCAqIGUuQllURVNfUEVSX0VMRU1FTlQpLCBhID0gcyhlLCBuLCAwLCBpLCBvLCAhMCksIHRbMF0gPSBlW2kgLSAxXSwgZiA9IDA7IGYgPCBhOyBmKyspIHtcbiAgICAgIHRbZiArIDFdID0gbltmXTtcbiAgICB9Zm9yIChmICs9IDE7IGYgPCBpOyBmKyspIHtcbiAgICAgIHRbZl0gPSBuW2ZdO1xuICAgIH1yZXR1cm4gYSArIDE7XG4gIH0sIGMudW5id3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChlLCByLCBuLCBpLCBvKSB7XG4gICAgdmFyIGYsXG4gICAgICAgIGEsXG4gICAgICAgIHUgPSB0Lm1ha2VVMzJCdWZmZXIoMjU2KTtmb3IgKGYgPSAwOyBmIDwgMjU2OyBmKyspIHtcbiAgICAgIHVbZl0gPSAwO1xuICAgIH1mb3IgKGYgPSAwOyBmIDwgaTsgZisrKSB7XG4gICAgICBuW2ZdID0gdVtlW2ZdXSsrO1xuICAgIH1mb3IgKGYgPSAwLCBhID0gMDsgZiA8IDI1NjsgZisrKSB7XG4gICAgICBhICs9IHVbZl0sIHVbZl0gPSBhIC0gdVtmXTtcbiAgICB9Zm9yIChmID0gaSAtIDEsIGEgPSAwOyBmID49IDA7IGYtLSkge1xuICAgICAgYSA9IG5bYV0gKyB1W3JbZl0gPSBlW2FdXSwgYSArPSBhIDwgbyA/IDEgOiAwO1xuICAgIH11ID0gbnVsbDtcbiAgfSwgYy5id3RyYW5zZm9ybTIgPSBmdW5jdGlvbiAoZSwgbiwgaSwgbykge1xuICAgIHZhciBmLFxuICAgICAgICBhLFxuICAgICAgICB1ID0gMDtpZiAocihlICYmIG4pLCByKGUubGVuZ3RoID49IGkgJiYgbi5sZW5ndGggPj0gaSksIGkgPD0gMSkgcmV0dXJuIDEgPT09IGkgJiYgKG5bMF0gPSBlWzBdKSwgMDtpZiAoIW8pIGlmICgxID09PSBlLkJZVEVTX1BFUl9FTEVNRU5UKSBvID0gMjU2O2Vsc2Uge1xuICAgICAgaWYgKDIgIT09IGUuQllURVNfUEVSX0VMRU1FTlQpIHRocm93IG5ldyBFcnJvcihcIk5lZWQgdG8gc3BlY2lmeSBhbHBoYWJldFNpemVcIik7byA9IDY1NTM2O1xuICAgIH1yKG8gPiAwKSwgZS5CWVRFU19QRVJfRUxFTUVOVCAmJiByKG8gPD0gMSA8PCA4ICogZS5CWVRFU19QRVJfRUxFTUVOVCk7dmFyIGM7aWYgKChjID0gZS5sZW5ndGggPj0gMiAqIGkgPyBlIDogbyA8PSAyNTYgPyB0Lm1ha2VVOEJ1ZmZlcigyICogaSkgOiBvIDw9IDY1NTM2ID8gdC5tYWtlVTE2QnVmZmVyKDIgKiBpKSA6IHQubWFrZVUzMkJ1ZmZlcigyICogaSkpICE9PSBlKSBmb3IgKGYgPSAwOyBmIDwgaTsgZisrKSB7XG4gICAgICBjW2ZdID0gZVtmXTtcbiAgICB9Zm9yIChmID0gMDsgZiA8IGk7IGYrKykge1xuICAgICAgY1tpICsgZl0gPSBjW2ZdO1xuICAgIH12YXIgaCA9IHQubWFrZVMzMkJ1ZmZlcigyICogaSk7Zm9yIChzKGMsIGgsIDAsIDIgKiBpLCBvLCAhMSksIGYgPSAwLCBhID0gMDsgZiA8IDIgKiBpOyBmKyspIHtcbiAgICAgIHZhciBsID0gaFtmXTtsIDwgaSAmJiAoMCA9PT0gbCAmJiAodSA9IGEpLCAtLWwgPCAwICYmIChsID0gaSAtIDEpLCBuW2ErK10gPSBlW2xdKTtcbiAgICB9cmV0dXJuIHIoYSA9PT0gaSksIHU7XG4gIH0sIGUoYyk7XG59KGZyZWV6ZSwgVXRpbCksIENSQzMyID0gZnVuY3Rpb24gKGUpIHtcbiAgdmFyIHQgPSBlLmFycmF5Y29weShlLm1ha2VVMzJCdWZmZXIoMjU2KSwgWzAsIDc5NzY0OTE5LCAxNTk1Mjk4MzgsIDIyMjUwNDY2NSwgMzE5MDU5Njc2LCAzOTg4MTQwNTksIDQ0NTAwOTMzMCwgNTA3OTkwMDIxLCA2MzgxMTkzNTIsIDU4MzY1OTUzNSwgNzk3NjI4MTE4LCA3MjYzODc1NTMsIDg5MDAxODY2MCwgODM1NTUyOTc5LCAxMDE1OTgwMDQyLCA5NDQ3NTAwMTMsIDEyNzYyMzg3MDQsIDEyMjE2NDE5MjcsIDExNjczMTkwNzAsIDEwOTU5NTc5MjksIDE1OTUyNTYyMzYsIDE1NDA2NjUzNzEsIDE0NTI3NzUxMDYsIDEzODE0MDM1MDksIDE3ODAwMzczMjAsIDE4NTk2NjA2NzEsIDE2NzExMDU5NTgsIDE3MzM5NTU2MDEsIDIwMzE5NjAwODQsIDIxMTE1OTM4OTEsIDE4ODk1MDAwMjYsIDE5NTIzNDM3NTcsIDI1NTI0Nzc0MDgsIDI2MzIxMDA2OTUsIDI0NDMyODM4NTQsIDI1MDYxMzM1NjEsIDIzMzQ2MzgxNDAsIDI0MTQyNzE4ODMsIDIxOTE5MTU4NTgsIDIyNTQ3NTk2NTMsIDMxOTA1MTI0NzIsIDMxMzU5MTU3NTksIDMwODEzMzA3NDIsIDMwMDk5Njk1MzcsIDI5MDU1NTAyMTIsIDI4NTA5NTk0MTEsIDI3NjI4MDcwMTgsIDI2OTE0MzUzNTcsIDM1NjAwNzQ2NDAsIDM1MDU2MTQ4ODcsIDM3MTkzMjEzNDIsIDM2NDgwODA3MTMsIDMzNDIyMTE5MTYsIDMyODc3NDYyOTksIDM0Njc5MTEyMDIsIDMzOTY2ODExMDksIDQwNjM5MjAxNjgsIDQxNDM2ODUwMjMsIDQyMjMxODc3ODIsIDQyODYxNjI2NzMsIDM3NzkwMDAwNTIsIDM4NTg3NTQzNzEsIDM5MDQ2ODc1MTQsIDM5Njc2NjgyNjksIDg4MTIyNTg0NywgODA5OTg3NTIwLCAxMDIzNjkxNTQ1LCA5NjkyMzQwOTQsIDY2MjgzMjgxMSwgNTkxNjAwNDEyLCA3NzE3Njc3NDksIDcxNzI5OTgyNiwgMzExMzM2Mzk5LCAzNzQzMDg5ODQsIDQ1MzgxMzkyMSwgNTMzNTc2NDcwLCAyNTg4MTM2MywgODg4NjQ0MjAsIDEzNDc5NTM4OSwgMjE0NTUyMDEwLCAyMDIzMjA1NjM5LCAyMDg2MDU3NjQ4LCAxODk3MjM4NjMzLCAxOTc2ODY0MjIyLCAxODA0ODUyNjk5LCAxODY3Njk0MTg4LCAxNjQ1MzQwMzQxLCAxNzI0OTcxNzc4LCAxNTg3NDk2NjM5LCAxNTE2MTMzMTI4LCAxNDYxNTUwNTQ1LCAxNDA2OTUxNTI2LCAxMzAyMDE2MDk5LCAxMjMwNjQ2NzQwLCAxMTQyNDkxOTE3LCAxMDg3OTAzNDE4LCAyODk2NTQ1NDMxLCAyODI1MTgxOTg0LCAyNzcwODYxNTYxLCAyNzE2MjYyNDc4LCAzMjE1MDQ0NjgzLCAzMTQzNjc1Mzg4LCAzMDU1NzgyNjkzLCAzMDAxMTk0MTMwLCAyMzI2NjA0NTkxLCAyMzg5NDU2NTM2LCAyMjAwODk5NjQ5LCAyMjgwNTI1MzAyLCAyNTc4MDEzNjgzLCAyNjQwODU1MTA4LCAyNDE4NzYzNDIxLCAyNDk4Mzk0OTIyLCAzNzY5OTAwNTE5LCAzODMyODczMDQwLCAzOTEyNjQwMTM3LCAzOTkyNDAyNzUwLCA0MDg4NDI1Mjc1LCA0MTUxNDA4MjY4LCA0MTk3NjAxMzY1LCA0Mjc3MzU4MDUwLCAzMzM0MjcxMDcxLCAzMjYzMDMyODA4LCAzNDc2OTk4OTYxLCAzNDIyNTQxNDQ2LCAzNTg1NjQwMDY3LCAzNTE0NDA3NzMyLCAzNjk0ODM3MjI5LCAzNjQwMzY5MjQyLCAxNzYyNDUxNjk0LCAxODQyMjE2MjgxLCAxNjE5OTc1MDQwLCAxNjgyOTQ5Njg3LCAyMDQ3MzgzMDkwLCAyMTI3MTM3NjY5LCAxOTM4NDY4MTg4LCAyMDAxNDQ5MTk1LCAxMzI1NjY1NjIyLCAxMjcxMjA2MTEzLCAxMTgzMjAwODI0LCAxMTExOTYwNDYzLCAxNTQzNTM1NDk4LCAxNDg5MDY5NjI5LCAxNDM0NTk5NjUyLCAxMzYzMzY5Mjk5LCA2MjI2NzI3OTgsIDU2ODA3NTgxNywgNzQ4NjE3OTY4LCA2NzcyNTY1MTksIDkwNzYyNzg0MiwgODUzMDM3MzAxLCAxMDY3MTUyOTQwLCA5OTU3ODE1MzEsIDUxNzYyNzI2LCAxMzEzODYyNTcsIDE3NzcyODg0MCwgMjQwNTc4ODE1LCAyNjk1OTA3NzgsIDM0OTIyNDI2OSwgNDI5MTA0MDIwLCA0OTE5NDc1NTUsIDQwNDY0MTEyNzgsIDQxMjYwMzQ4NzMsIDQxNzIxMTUyOTYsIDQyMzQ5NjUyMDcsIDM3OTQ0NzcyNjYsIDM4NzQxMTA4MjEsIDM5NTM3Mjg0NDQsIDQwMTY1NzE5MTUsIDM2MDk3MDUzOTgsIDM1NTUxMDgzNTMsIDM3MzUzODgzNzYsIDM2NjQwMjY5OTEsIDMyOTA2ODA2ODIsIDMyMzYwOTAwNzcsIDM0NDk5NDM1NTYsIDMzNzg1NzIyMTEsIDMxNzQ5OTMyNzgsIDMxMjA1MzM3MDUsIDMwMzIyNjYyNTYsIDI5NjEwMjU5NTksIDI5MjMxMDEwOTAsIDI4Njg2MzUxNTcsIDI4MTM5MDMwNTIsIDI3NDI2NzI3NjMsIDI2MDQwMzIxOTgsIDI2ODM3OTY4NDksIDI0NjEyOTM0ODAsIDI1MjQyNjgwNjMsIDIyODQ5ODM4MzQsIDIzNjQ3Mzg0NzcsIDIxNzU4MDY4MzYsIDIyMzg3ODc3NzksIDE1NjkzNjIwNzMsIDE0OTgxMjM1NjYsIDE0MDk4NTQ0NTUsIDEzNTUzOTY2NzIsIDEzMTc5ODc5MDksIDEyNDY3NTU4MjYsIDExOTIwMjUzODcsIDExMzc1NTc2NjAsIDIwNzIxNDkyODEsIDIxMzUxMjIwNzAsIDE5MTI2MjA2MjMsIDE5OTIzODM0ODAsIDE3NTM2MTUzNTcsIDE4MTY1OTgwOTAsIDE2Mjc2NjQ1MzEsIDE3MDc0MjA5NjQsIDI5NTM5MDE4NSwgMzU4MjQxODg2LCA0MDQzMjAzOTEsIDQ4Mzk0NTc3NiwgNDM5OTAzMjUsIDEwNjgzMjAwMiwgMTg2NDUxNTQ3LCAyNjYwODMzMDgsIDkzMjQyMzI0OSwgODYxMDYwMDcwLCAxMDQxMzQxNzU5LCA5ODY3NDI5MjAsIDYxMzkyOTEwMSwgNTQyNTU5NTQ2LCA3NTY0MTEzNjMsIDcwMTgyMjU0OCwgMzMxNjE5Njk4NSwgMzI0NDgzMzc0MiwgMzQyNTM3NzU1OSwgMzM3MDc3ODc4NCwgMzYwMTY4MjU5NywgMzUzMDMxMjk3OCwgMzc0NDQyNjk1NSwgMzY4OTgzODIwNCwgMzgxOTAzMTQ4OSwgMzg4MTg4MzI1NCwgMzkyODIyMzkxOSwgNDAwNzg0OTI0MCwgNDAzNzM5MzY5MywgNDEwMDIzNTQzNCwgNDE4MDExNzEwNywgNDI1OTc0ODgwNCwgMjMxMDYwMTk5MywgMjM3MzU3NDg0NiwgMjE1MTMzNTUyNywgMjIzMTA5ODMyMCwgMjU5NjA0NzgyOSwgMjY1OTAzMDYyNiwgMjQ3MDM1OTIyNywgMjU1MDExNTU5NiwgMjk0NzU1MTQwOSwgMjg3NjMxMjgzOCwgMjc4ODMwNTg4NywgMjczMzg0ODE2OCwgMzE2NTkzOTMwOSwgMzA5NDcwNzE2MiwgMzA0MDIzODg1MSwgMjk4NTc3MTE4OF0pO3JldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUgPSA0Mjk0OTY3Mjk1O3RoaXMuZ2V0Q1JDID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIH5lID4+PiAwO1xuICAgIH0sIHRoaXMudXBkYXRlQ1JDID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgIGUgPSBlIDw8IDggXiB0WzI1NSAmIChlID4+PiAyNCBeIHIpXTtcbiAgICB9LCB0aGlzLnVwZGF0ZUNSQ1J1biA9IGZ1bmN0aW9uIChyLCBuKSB7XG4gICAgICBmb3IgKDsgbi0tID4gMDspIHtcbiAgICAgICAgZSA9IGUgPDwgOCBeIHRbMjU1ICYgKGUgPj4+IDI0IF4gcildO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59KFV0aWwpLCBIdWZmbWFuQWxsb2NhdG9yID0gZnVuY3Rpb24gKGUsIHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbiByKGUsIHQsIF9yKSB7XG4gICAgZm9yICh2YXIgbiA9IGUubGVuZ3RoLCBpID0gdCwgbyA9IGUubGVuZ3RoIC0gMjsgdCA+PSBfciAmJiBlW3RdICUgbiA+IGk7KSB7XG4gICAgICBvID0gdCwgdCAtPSBpIC0gdCArIDE7XG4gICAgfWZvciAodCA9IE1hdGgubWF4KF9yIC0gMSwgdCk7IG8gPiB0ICsgMTspIHtcbiAgICAgIHZhciBmID0gdCArIG8gPj4gMTtlW2ZdICUgbiA+IGkgPyBvID0gZiA6IHQgPSBmO1xuICAgIH1yZXR1cm4gbztcbiAgfSxcbiAgICAgIG4gPSBmdW5jdGlvbiBuKGUpIHtcbiAgICB2YXIgdCA9IGUubGVuZ3RoO2VbMF0gKz0gZVsxXTt2YXIgciwgbiwgaSwgbztmb3IgKHIgPSAwLCBuID0gMSwgaSA9IDI7IG4gPCB0IC0gMTsgbisrKSB7XG4gICAgICBpID49IHQgfHwgZVtyXSA8IGVbaV0gPyAobyA9IGVbcl0sIGVbcisrXSA9IG4pIDogbyA9IGVbaSsrXSwgaSA+PSB0IHx8IHIgPCBuICYmIGVbcl0gPCBlW2ldID8gKG8gKz0gZVtyXSwgZVtyKytdID0gbiArIHQpIDogbyArPSBlW2krK10sIGVbbl0gPSBvO1xuICAgIH1cbiAgfSxcbiAgICAgIGkgPSBmdW5jdGlvbiBpKGUsIHQpIHtcbiAgICB2YXIgbixcbiAgICAgICAgaSA9IGUubGVuZ3RoIC0gMjtmb3IgKG4gPSAxOyBuIDwgdCAtIDEgJiYgaSA+IDE7IG4rKykge1xuICAgICAgaSA9IHIoZSwgaSAtIDEsIDApO1xuICAgIH1yZXR1cm4gaTtcbiAgfSxcbiAgICAgIG8gPSBmdW5jdGlvbiBvKGUpIHtcbiAgICB2YXIgdCxcbiAgICAgICAgbixcbiAgICAgICAgaSxcbiAgICAgICAgbyxcbiAgICAgICAgZiA9IGUubGVuZ3RoIC0gMixcbiAgICAgICAgYSA9IGUubGVuZ3RoIC0gMTtmb3IgKHQgPSAxLCBuID0gMjsgbiA+IDA7IHQrKykge1xuICAgICAgZm9yIChpID0gZiwgZiA9IHIoZSwgaSAtIDEsIDApLCBvID0gbiAtIChpIC0gZik7IG8gPiAwOyBvLS0pIHtcbiAgICAgICAgZVthLS1dID0gdDtcbiAgICAgIH1uID0gaSAtIGYgPDwgMTtcbiAgICB9XG4gIH0sXG4gICAgICBmID0gZnVuY3Rpb24gZihlLCB0LCBuKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG8sXG4gICAgICAgIGYsXG4gICAgICAgIGEsXG4gICAgICAgIHUgPSBlLmxlbmd0aCAtIDIsXG4gICAgICAgIHMgPSBlLmxlbmd0aCAtIDEsXG4gICAgICAgIGMgPSAxID09IG4gPyAyIDogMSxcbiAgICAgICAgaCA9IDEgPT0gbiA/IHQgLSAyIDogdDtmb3IgKGkgPSBjIDw8IDE7IGkgPiAwOyBjKyspIHtcbiAgICAgIGZvciAobyA9IHUsIHUgPSB1IDw9IHQgPyB1IDogcihlLCBvIC0gMSwgdCksIGYgPSAwLCBjID49IG4gPyBmID0gTWF0aC5taW4oaCwgMSA8PCBjIC0gbikgOiBjID09IG4gLSAxICYmIChmID0gMSwgZVt1XSA9PSBvICYmIHUrKyksIGEgPSBpIC0gKG8gLSB1ICsgZik7IGEgPiAwOyBhLS0pIHtcbiAgICAgICAgZVtzLS1dID0gYztcbiAgICAgIH1oIC09IGYsIGkgPSBvIC0gdSArIGYgPDwgMTtcbiAgICB9XG4gIH07cmV0dXJuIGUoeyBhbGxvY2F0ZUh1ZmZtYW5Db2RlTGVuZ3RoczogZnVuY3Rpb24gYWxsb2NhdGVIdWZmbWFuQ29kZUxlbmd0aHMoZSwgcikge1xuICAgICAgc3dpdGNoIChlLmxlbmd0aCkge2Nhc2UgMjpcbiAgICAgICAgICBlWzFdID0gMTtjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIHZvaWQgKGVbMF0gPSAxKTt9bihlKTt2YXIgYSA9IGkoZSwgcik7aWYgKGVbMF0gJSBlLmxlbmd0aCA+PSBhKSBvKGUpO2Vsc2Uge1xuICAgICAgICB2YXIgdSA9IHIgLSB0LmZscyhhIC0gMSk7ZihlLCBhLCB1KTtcbiAgICAgIH1cbiAgICB9IH0pO1xufShmcmVlemUsIFV0aWwpLCBCemlwMiA9IGZ1bmN0aW9uIChlLCB0LCByLCBuLCBpLCBvLCBmKSB7XG4gIHZhciBhID0gby5FT0YsXG4gICAgICB1ID0gZnVuY3Rpb24gdShlLCB0KSB7XG4gICAgdmFyIHIsXG4gICAgICAgIG4gPSBlW3RdO2ZvciAociA9IHQ7IHIgPiAwOyByLS0pIHtcbiAgICAgIGVbcl0gPSBlW3IgLSAxXTtcbiAgICB9cmV0dXJuIGVbMF0gPSBuLCBuO1xuICB9LFxuICAgICAgcyA9IHsgT0s6IDAsIExBU1RfQkxPQ0s6IC0xLCBOT1RfQlpJUF9EQVRBOiAtMiwgVU5FWFBFQ1RFRF9JTlBVVF9FT0Y6IC0zLCBVTkVYUEVDVEVEX09VVFBVVF9FT0Y6IC00LCBEQVRBX0VSUk9SOiAtNSwgT1VUX09GX01FTU9SWTogLTYsIE9CU09MRVRFX0lOUFVUOiAtNywgRU5EX09GX0JMT0NLOiAtOCB9LFxuICAgICAgYyA9IHt9O2Nbcy5MQVNUX0JMT0NLXSA9IFwiQmFkIGZpbGUgY2hlY2tzdW1cIiwgY1tzLk5PVF9CWklQX0RBVEFdID0gXCJOb3QgYnppcCBkYXRhXCIsIGNbcy5VTkVYUEVDVEVEX0lOUFVUX0VPRl0gPSBcIlVuZXhwZWN0ZWQgaW5wdXQgRU9GXCIsIGNbcy5VTkVYUEVDVEVEX09VVFBVVF9FT0ZdID0gXCJVbmV4cGVjdGVkIG91dHB1dCBFT0ZcIiwgY1tzLkRBVEFfRVJST1JdID0gXCJEYXRhIGVycm9yXCIsIGNbcy5PVVRfT0ZfTUVNT1JZXSA9IFwiT3V0IG9mIG1lbW9yeVwiLCBjW3MuT0JTT0xFVEVfSU5QVVRdID0gXCJPYnNvbGV0ZSAocHJlIDAuOS41KSBiemlwIGZvcm1hdCBub3Qgc3VwcG9ydGVkLlwiO3ZhciBoID0gZnVuY3Rpb24gaChlLCB0KSB7XG4gICAgdmFyIHIgPSBjW2VdIHx8IFwidW5rbm93biBlcnJvclwiO3QgJiYgKHIgKz0gXCI6IFwiICsgdCk7dmFyIG4gPSBuZXcgVHlwZUVycm9yKHIpO3Rocm93IG4uZXJyb3JDb2RlID0gZSwgbjtcbiAgfSxcbiAgICAgIGwgPSBmdW5jdGlvbiBsKGUsIHQpIHtcbiAgICB0aGlzLndyaXRlUG9zID0gdGhpcy53cml0ZUN1cnJlbnQgPSB0aGlzLndyaXRlQ291bnQgPSAwLCB0aGlzLl9zdGFydF9idW56aXAoZSwgdCk7XG4gIH07bC5wcm90b3R5cGUuX2luaXRfYmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldF9uZXh0X2Jsb2NrKCkgPyAodGhpcy5ibG9ja0NSQyA9IG5ldyBuKCksICEwKSA6ICh0aGlzLndyaXRlQ291bnQgPSAtMSwgITEpO1xuICB9LCBsLnByb3RvdHlwZS5fc3RhcnRfYnVuemlwID0gZnVuY3Rpb24gKGUsIHIpIHtcbiAgICB2YXIgbiA9IGYubWFrZVU4QnVmZmVyKDQpOzQgPT09IGUucmVhZChuLCAwLCA0KSAmJiBcIkJaaFwiID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKG5bMF0sIG5bMV0sIG5bMl0pIHx8IGgocy5OT1RfQlpJUF9EQVRBLCBcImJhZCBtYWdpY1wiKTt2YXIgaSA9IG5bM10gLSA0ODsoaSA8IDEgfHwgaSA+IDkpICYmIGgocy5OT1RfQlpJUF9EQVRBLCBcImxldmVsIG91dCBvZiByYW5nZVwiKSwgdGhpcy5yZWFkZXIgPSBuZXcgdChlKSwgdGhpcy5kYnVmU2l6ZSA9IDFlNSAqIGksIHRoaXMubmV4dG91dHB1dCA9IDAsIHRoaXMub3V0cHV0U3RyZWFtID0gciwgdGhpcy5zdHJlYW1DUkMgPSAwO1xuICB9LCBsLnByb3RvdHlwZS5fZ2V0X25leHRfYmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUsXG4gICAgICAgIHQsXG4gICAgICAgIHIsXG4gICAgICAgIG4gPSB0aGlzLnJlYWRlcixcbiAgICAgICAgaSA9IG4ucmVhZEJpdHMoNDgpO2lmICgyNTc3OTU1NTAyOTEzNiA9PT0gaSkgcmV0dXJuICExOzU0MTU2NzM4MzE5MTkzICE9PSBpICYmIGgocy5OT1RfQlpJUF9EQVRBKSwgdGhpcy50YXJnZXRCbG9ja0NSQyA9IG4ucmVhZEJpdHMoMzIpLCB0aGlzLnN0cmVhbUNSQyA9ICh0aGlzLnRhcmdldEJsb2NrQ1JDIF4gKHRoaXMuc3RyZWFtQ1JDIDw8IDEgfCB0aGlzLnN0cmVhbUNSQyA+Pj4gMzEpKSA+Pj4gMCwgbi5yZWFkQml0cygxKSAmJiBoKHMuT0JTT0xFVEVfSU5QVVQpO3ZhciBvID0gbi5yZWFkQml0cygyNCk7byA+IHRoaXMuZGJ1ZlNpemUgJiYgaChzLkRBVEFfRVJST1IsIFwiaW5pdGlhbCBwb3NpdGlvbiBvdXQgb2YgYm91bmRzXCIpO3ZhciBhID0gbi5yZWFkQml0cygxNiksXG4gICAgICAgIGMgPSBmLm1ha2VVOEJ1ZmZlcigyNTYpLFxuICAgICAgICBsID0gMDtmb3IgKGUgPSAwOyBlIDwgMTY7IGUrKykge1xuICAgICAgaWYgKGEgJiAxIDw8IDE1IC0gZSkge1xuICAgICAgICB2YXIgZCA9IDE2ICogZTtmb3IgKHIgPSBuLnJlYWRCaXRzKDE2KSwgdCA9IDA7IHQgPCAxNjsgdCsrKSB7XG4gICAgICAgICAgciAmIDEgPDwgMTUgLSB0ICYmIChjW2wrK10gPSBkICsgdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9dmFyIEIgPSBuLnJlYWRCaXRzKDMpOyhCIDwgMiB8fCBCID4gNikgJiYgaChzLkRBVEFfRVJST1IpO3ZhciBwID0gbi5yZWFkQml0cygxNSk7MCA9PT0gcCAmJiBoKHMuREFUQV9FUlJPUik7dmFyIHYgPSBmLm1ha2VVOEJ1ZmZlcigyNTYpO2ZvciAoZSA9IDA7IGUgPCBCOyBlKyspIHtcbiAgICAgIHZbZV0gPSBlO1xuICAgIH12YXIgbSA9IGYubWFrZVU4QnVmZmVyKHApO2ZvciAoZSA9IDA7IGUgPCBwOyBlKyspIHtcbiAgICAgIGZvciAodCA9IDA7IG4ucmVhZEJpdHMoMSk7IHQrKykge1xuICAgICAgICB0ID49IEIgJiYgaChzLkRBVEFfRVJST1IpO1xuICAgICAgfW1bZV0gPSB1KHYsIHQpO1xuICAgIH12YXIgdyxcbiAgICAgICAgRSA9IGwgKyAyLFxuICAgICAgICBnID0gW107Zm9yICh0ID0gMDsgdCA8IEI7IHQrKykge1xuICAgICAgdmFyIF8gPSBmLm1ha2VVOEJ1ZmZlcihFKSxcbiAgICAgICAgICBiID0gZi5tYWtlVTE2QnVmZmVyKDIxKTtmb3IgKGEgPSBuLnJlYWRCaXRzKDUpLCBlID0gMDsgZSA8IEU7IGUrKykge1xuICAgICAgICBmb3IgKDsgKGEgPCAxIHx8IGEgPiAyMCkgJiYgaChzLkRBVEFfRVJST1IpLCBuLnJlYWRCaXRzKDEpOykge1xuICAgICAgICAgIG4ucmVhZEJpdHMoMSkgPyBhLS0gOiBhKys7XG4gICAgICAgIH1fW2VdID0gYTtcbiAgICAgIH12YXIgeSwgUjtmb3IgKHkgPSBSID0gX1swXSwgZSA9IDE7IGUgPCBFOyBlKyspIHtcbiAgICAgICAgX1tlXSA+IFIgPyBSID0gX1tlXSA6IF9bZV0gPCB5ICYmICh5ID0gX1tlXSk7XG4gICAgICB9dyA9IHt9LCBnLnB1c2godyksIHcucGVybXV0ZSA9IGYubWFrZVUxNkJ1ZmZlcigyNTgpLCB3LmxpbWl0ID0gZi5tYWtlVTMyQnVmZmVyKDIyKSwgdy5iYXNlID0gZi5tYWtlVTMyQnVmZmVyKDIxKSwgdy5taW5MZW4gPSB5LCB3Lm1heExlbiA9IFI7dmFyIEMgPSAwO2ZvciAoZSA9IHk7IGUgPD0gUjsgZSsrKSB7XG4gICAgICAgIGZvciAoYltlXSA9IHcubGltaXRbZV0gPSAwLCBhID0gMDsgYSA8IEU7IGErKykge1xuICAgICAgICAgIF9bYV0gPT09IGUgJiYgKHcucGVybXV0ZVtDKytdID0gYSk7XG4gICAgICAgIH1cbiAgICAgIH1mb3IgKGUgPSAwOyBlIDwgRTsgZSsrKSB7XG4gICAgICAgIGJbX1tlXV0rKztcbiAgICAgIH1mb3IgKEMgPSBhID0gMCwgZSA9IHk7IGUgPCBSOyBlKyspIHtcbiAgICAgICAgQyArPSBiW2VdLCB3LmxpbWl0W2VdID0gQyAtIDEsIEMgPDw9IDEsIGEgKz0gYltlXSwgdy5iYXNlW2UgKyAxXSA9IEMgLSBhO1xuICAgICAgfXcubGltaXRbUiArIDFdID0gTnVtYmVyLk1BWF9WQUxVRSwgdy5saW1pdFtSXSA9IEMgKyBiW1JdIC0gMSwgdy5iYXNlW3ldID0gMDtcbiAgICB9dmFyIGsgPSBmLm1ha2VVMzJCdWZmZXIoMjU2KTtmb3IgKGUgPSAwOyBlIDwgMjU2OyBlKyspIHtcbiAgICAgIHZbZV0gPSBlO1xuICAgIH12YXIgVCxcbiAgICAgICAgTyA9IDAsXG4gICAgICAgIFMgPSAwLFxuICAgICAgICBVID0gMCxcbiAgICAgICAgQSA9IHRoaXMuZGJ1ZiA9IGYubWFrZVUzMkJ1ZmZlcih0aGlzLmRidWZTaXplKTtmb3IgKEUgPSAwOzspIHtcbiAgICAgIGZvciAoRS0tIHx8IChFID0gNDksIFUgPj0gcCAmJiBoKHMuREFUQV9FUlJPUiksIHcgPSBnW21bVSsrXV0pLCBlID0gdy5taW5MZW4sIHQgPSBuLnJlYWRCaXRzKGUpOyBlID4gdy5tYXhMZW4gJiYgaChzLkRBVEFfRVJST1IpLCAhKHQgPD0gdy5saW1pdFtlXSk7IGUrKykge1xuICAgICAgICB0ID0gdCA8PCAxIHwgbi5yZWFkQml0cygxKTtcbiAgICAgIH10IC09IHcuYmFzZVtlXSwgKHQgPCAwIHx8IHQgPj0gMjU4KSAmJiBoKHMuREFUQV9FUlJPUik7dmFyIHogPSB3LnBlcm11dGVbdF07aWYgKDAgIT09IHogJiYgMSAhPT0geikge1xuICAgICAgICBpZiAoTykgZm9yIChPID0gMCwgUyArIGEgPiB0aGlzLmRidWZTaXplICYmIGgocy5EQVRBX0VSUk9SKSwgVCA9IGNbdlswXV0sIGtbVF0gKz0gYTsgYS0tOykge1xuICAgICAgICAgIEFbUysrXSA9IFQ7XG4gICAgICAgIH1pZiAoeiA+IGwpIGJyZWFrO1MgPj0gdGhpcy5kYnVmU2l6ZSAmJiBoKHMuREFUQV9FUlJPUiksIGUgPSB6IC0gMSwgVCA9IHUodiwgZSksIFQgPSBjW1RdLCBrW1RdKyssIEFbUysrXSA9IFQ7XG4gICAgICB9IGVsc2UgTyB8fCAoTyA9IDEsIGEgPSAwKSwgYSArPSAwID09PSB6ID8gTyA6IDIgKiBPLCBPIDw8PSAxO1xuICAgIH1mb3IgKChvIDwgMCB8fCBvID49IFMpICYmIGgocy5EQVRBX0VSUk9SKSwgdCA9IDAsIGUgPSAwOyBlIDwgMjU2OyBlKyspIHtcbiAgICAgIHIgPSB0ICsga1tlXSwga1tlXSA9IHQsIHQgPSByO1xuICAgIH1mb3IgKGUgPSAwOyBlIDwgUzsgZSsrKSB7XG4gICAgICBUID0gMjU1ICYgQVtlXSwgQVtrW1RdXSB8PSBlIDw8IDgsIGtbVF0rKztcbiAgICB9dmFyIE4gPSAwLFxuICAgICAgICBMID0gMCxcbiAgICAgICAgUCA9IDA7cmV0dXJuIFMgJiYgKE4gPSBBW29dLCBMID0gMjU1ICYgTiwgTiA+Pj0gOCwgUCA9IC0xKSwgdGhpcy53cml0ZVBvcyA9IE4sIHRoaXMud3JpdGVDdXJyZW50ID0gTCwgdGhpcy53cml0ZUNvdW50ID0gUywgdGhpcy53cml0ZVJ1biA9IFAsICEwO1xuICB9LCBsLnByb3RvdHlwZS5fcmVhZF9idW56aXAgPSBmdW5jdGlvbiAoZSwgdCkge1xuICAgIHZhciByLCBuLCBpO2lmICh0aGlzLndyaXRlQ291bnQgPCAwKSByZXR1cm4gMDtmb3IgKHZhciBvID0gdGhpcy5kYnVmLCBmID0gdGhpcy53cml0ZVBvcywgYSA9IHRoaXMud3JpdGVDdXJyZW50LCB1ID0gdGhpcy53cml0ZUNvdW50LCBjID0gKHRoaXMub3V0cHV0c2l6ZSwgdGhpcy53cml0ZVJ1bik7IHU7KSB7XG4gICAgICBmb3IgKHUtLSwgbiA9IGEsIGYgPSBvW2ZdLCBhID0gMjU1ICYgZiwgZiA+Pj0gOCwgMyA9PSBjKysgPyAociA9IGEsIGkgPSBuLCBhID0gLTEpIDogKHIgPSAxLCBpID0gYSksIHRoaXMuYmxvY2tDUkMudXBkYXRlQ1JDUnVuKGksIHIpOyByLS07KSB7XG4gICAgICAgIHRoaXMub3V0cHV0U3RyZWFtLndyaXRlQnl0ZShpKSwgdGhpcy5uZXh0b3V0cHV0Kys7XG4gICAgICB9YSAhPSBuICYmIChjID0gMCk7XG4gICAgfXJldHVybiB0aGlzLndyaXRlQ291bnQgPSB1LCB0aGlzLmJsb2NrQ1JDLmdldENSQygpICE9PSB0aGlzLnRhcmdldEJsb2NrQ1JDICYmIGgocy5EQVRBX0VSUk9SLCBcIkJhZCBibG9jayBDUkMgKGdvdCBcIiArIHRoaXMuYmxvY2tDUkMuZ2V0Q1JDKCkudG9TdHJpbmcoMTYpICsgXCIgZXhwZWN0ZWQgXCIgKyB0aGlzLnRhcmdldEJsb2NrQ1JDLnRvU3RyaW5nKDE2KSArIFwiKVwiKSwgdGhpcy5uZXh0b3V0cHV0O1xuICB9LCBsLkVyciA9IHMsIGwuZGVjb2RlID0gZnVuY3Rpb24gKGUsIHQsIHIpIHtcbiAgICBmb3IgKHZhciBuID0gZi5jb2VyY2VJbnB1dFN0cmVhbShlKSwgaSA9IGYuY29lcmNlT3V0cHV0U3RyZWFtKHQsIHQpLCBvID0gaS5zdHJlYW0sIGEgPSBuZXcgbChuLCBvKTs7KSB7XG4gICAgICBpZiAoXCJlb2ZcIiBpbiBuICYmIG4uZW9mKCkpIGJyZWFrO2lmIChhLl9pbml0X2Jsb2NrKCkpIGEuX3JlYWRfYnVuemlwKCk7ZWxzZSB7XG4gICAgICAgIHZhciB1ID0gYS5yZWFkZXIucmVhZEJpdHMoMzIpO2lmICh1ICE9PSBhLnN0cmVhbUNSQyAmJiBoKHMuREFUQV9FUlJPUiwgXCJCYWQgc3RyZWFtIENSQyAoZ290IFwiICsgYS5zdHJlYW1DUkMudG9TdHJpbmcoMTYpICsgXCIgZXhwZWN0ZWQgXCIgKyB1LnRvU3RyaW5nKDE2KSArIFwiKVwiKSwgIShyICYmIFwiZW9mXCIgaW4gbikgfHwgbi5lb2YoKSkgYnJlYWs7YS5fc3RhcnRfYnVuemlwKG4sIG8pO1xuICAgICAgfVxuICAgIH1yZXR1cm4gaS5yZXR2YWw7XG4gIH0sIGwuZGVjb2RlQmxvY2sgPSBmdW5jdGlvbiAoZSwgdCwgcikge1xuICAgIHZhciBpID0gZi5jb2VyY2VJbnB1dFN0cmVhbShlKSxcbiAgICAgICAgbyA9IGYuY29lcmNlT3V0cHV0U3RyZWFtKHIsIHIpLFxuICAgICAgICBhID0gby5zdHJlYW0sXG4gICAgICAgIHUgPSBuZXcgbChpLCBhKTtyZXR1cm4gdS5yZWFkZXIuc2Vla0JpdCh0KSwgdS5fZ2V0X25leHRfYmxvY2soKSAmJiAodS5ibG9ja0NSQyA9IG5ldyBuKCksIHUud3JpdGVDb3BpZXMgPSAwLCB1Ll9yZWFkX2J1bnppcCgpKSwgby5yZXR2YWw7XG4gIH0sIGwudGFibGUgPSBmdW5jdGlvbiAoZSwgdCwgcikge1xuICAgIHZhciBuID0gbmV3IG8oKTtuLmRlbGVnYXRlID0gZi5jb2VyY2VJbnB1dFN0cmVhbShlKSwgbi5wb3MgPSAwLCBuLnJlYWRCeXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9zKyssIHRoaXMuZGVsZWdhdGUucmVhZEJ5dGUoKTtcbiAgICB9LCBuLnRlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3M7XG4gICAgfSwgbi5kZWxlZ2F0ZS5lb2YgJiYgKG4uZW9mID0gbi5kZWxlZ2F0ZS5lb2YuYmluZChuLmRlbGVnYXRlKSk7dmFyIGkgPSBuZXcgbygpO2kucG9zID0gMCwgaS53cml0ZUJ5dGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH07Zm9yICh2YXIgYSA9IG5ldyBsKG4sIGkpLCB1ID0gYS5kYnVmU2l6ZTs7KSB7XG4gICAgICBpZiAoXCJlb2ZcIiBpbiBuICYmIG4uZW9mKCkpIGJyZWFrO3ZhciBzID0gYS5yZWFkZXIudGVsbEJpdCgpO2lmIChhLl9pbml0X2Jsb2NrKCkpIHtcbiAgICAgICAgdmFyIGMgPSBpLnBvczthLl9yZWFkX2J1bnppcCgpLCB0KHMsIGkucG9zIC0gYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhLnJlYWRlci5yZWFkQml0cygzMik7aWYgKCEociAmJiBcImVvZlwiIGluIG4pIHx8IG4uZW9mKCkpIGJyZWFrO2EuX3N0YXJ0X2J1bnppcChuLCBpKSwgY29uc29sZS5hc3NlcnQoYS5kYnVmU2l6ZSA9PT0gdSwgXCJzaG91bGRuJ3QgY2hhbmdlIGJsb2NrIHNpemUgd2l0aGluIG11bHRpc3RyZWFtIGZpbGVcIik7XG4gICAgICB9XG4gICAgfVxuICB9O3ZhciBkID0gZnVuY3Rpb24gZChlLCB0KSB7XG4gICAgdmFyIHIsXG4gICAgICAgIG4gPSBbXTtmb3IgKHIgPSAwOyByIDwgdDsgcisrKSB7XG4gICAgICBuW3JdID0gZVtyXSA8PCA5IHwgcjtcbiAgICB9bi5zb3J0KGZ1bmN0aW9uIChlLCB0KSB7XG4gICAgICByZXR1cm4gZSAtIHQ7XG4gICAgfSk7dmFyIG8gPSBuLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIGUgPj4+IDk7XG4gICAgfSk7Zm9yIChpLmFsbG9jYXRlSHVmZm1hbkNvZGVMZW5ndGhzKG8sIDIwKSwgdGhpcy5jb2RlTGVuZ3RocyA9IGYubWFrZVU4QnVmZmVyKHQpLCByID0gMDsgciA8IHQ7IHIrKykge1xuICAgICAgdmFyIGEgPSA1MTEgJiBuW3JdO3RoaXMuY29kZUxlbmd0aHNbYV0gPSBvW3JdO1xuICAgIH1cbiAgfTtkLnByb3RvdHlwZS5jb21wdXRlQ2Fub25pY2FsID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlLFxuICAgICAgICB0ID0gdGhpcy5jb2RlTGVuZ3Rocy5sZW5ndGgsXG4gICAgICAgIHIgPSBbXTtmb3IgKGUgPSAwOyBlIDwgdDsgZSsrKSB7XG4gICAgICByW2VdID0gdGhpcy5jb2RlTGVuZ3Roc1tlXSA8PCA5IHwgZTtcbiAgICB9ci5zb3J0KGZ1bmN0aW9uIChlLCB0KSB7XG4gICAgICByZXR1cm4gZSAtIHQ7XG4gICAgfSksIHRoaXMuY29kZSA9IGYubWFrZVUzMkJ1ZmZlcih0KTt2YXIgbiA9IDAsXG4gICAgICAgIGkgPSAwO2ZvciAoZSA9IDA7IGUgPCB0OyBlKyspIHtcbiAgICAgIHZhciBvID0gcltlXSA+Pj4gOSxcbiAgICAgICAgICBhID0gNTExICYgcltlXTtjb25zb2xlLmFzc2VydChpIDw9IG8pLCBuIDw8PSBvIC0gaSwgdGhpcy5jb2RlW2FdID0gbisrLCBpID0gbztcbiAgICB9XG4gIH0sIGQucHJvdG90eXBlLmNvc3QgPSBmdW5jdGlvbiAoZSwgdCwgcikge1xuICAgIHZhciBuLFxuICAgICAgICBpID0gMDtmb3IgKG4gPSAwOyBuIDwgcjsgbisrKSB7XG4gICAgICBpICs9IHRoaXMuY29kZUxlbmd0aHNbZVt0ICsgbl1dO1xuICAgIH1yZXR1cm4gaTtcbiAgfSwgZC5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHQsXG4gICAgICAgIHIgPSB0aGlzLmNvZGVMZW5ndGhzWzBdO2ZvciAoZS53cml0ZUJpdHMoNSwgciksIHQgPSAwOyB0IDwgdGhpcy5jb2RlTGVuZ3Rocy5sZW5ndGg7IHQrKykge1xuICAgICAgdmFyIG4sXG4gICAgICAgICAgaSxcbiAgICAgICAgICBvID0gdGhpcy5jb2RlTGVuZ3Roc1t0XTtmb3IgKGNvbnNvbGUuYXNzZXJ0KG8gPiAwICYmIG8gPD0gMjApLCByIDwgbyA/IChuID0gMiwgaSA9IG8gLSByKSA6IChuID0gMywgaSA9IHIgLSBvKTsgaS0tID4gMDspIHtcbiAgICAgICAgZS53cml0ZUJpdHMoMiwgbik7XG4gICAgICB9ZS53cml0ZUJpdCgwKSwgciA9IG87XG4gICAgfVxuICB9LCBkLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiAoZSwgdCkge1xuICAgIGUud3JpdGVCaXRzKHRoaXMuY29kZUxlbmd0aHNbdF0sIHRoaXMuY29kZVt0XSk7XG4gIH07dmFyIEIgPSBmdW5jdGlvbiBCKGUsIHQsIHIsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbyA9IC0xLCBmID0gMDsgaSA8IHIgJiYgISg0ID09PSBmICYmICh0W2krK10gPSAwLCBpID49IHIpKTspIHtcbiAgICAgIHZhciB1ID0gZS5yZWFkQnl0ZSgpO2lmICh1ID09PSBhKSBicmVhaztpZiAobi51cGRhdGVDUkModSksIHUgIT09IG8pIG8gPSB1LCBmID0gMTtlbHNlIGlmICgrK2YgPiA0KSB7XG4gICAgICAgIGlmIChmIDwgMjU2KSB7XG4gICAgICAgICAgdFtpIC0gMV0rKztjb250aW51ZTtcbiAgICAgICAgfWYgPSAxO1xuICAgICAgfXRbaSsrXSA9IHU7XG4gICAgfXJldHVybiBpO1xuICB9LFxuICAgICAgcCA9IGZ1bmN0aW9uIHAoZSwgdCwgcikge1xuICAgIHZhciBuLCBpLCBvO2ZvciAobiA9IDAsIG8gPSAwOyBuIDwgci5sZW5ndGg7IG4gKz0gNTApIHtcbiAgICAgIHZhciBmID0gTWF0aC5taW4oNTAsIHIubGVuZ3RoIC0gbiksXG4gICAgICAgICAgYSA9IDAsXG4gICAgICAgICAgdSA9IHRbMF0uY29zdChyLCBuLCBmKTtmb3IgKGkgPSAxOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcyA9IHRbaV0uY29zdChyLCBuLCBmKTtzIDwgdSAmJiAoYSA9IGksIHUgPSBzKTtcbiAgICAgIH1lW28rK10gPSBhO1xuICAgIH1cbiAgfSxcbiAgICAgIHYgPSBmdW5jdGlvbiB2KGUsIHQsIHIsIG4sIGkpIHtcbiAgICBmb3IgKHZhciBvLCBmLCBhLCB1ID0gW107IGUubGVuZ3RoIDwgdDspIHtcbiAgICAgIGZvciAocChuLCBlLCByKSwgbyA9IDA7IG8gPCBlLmxlbmd0aDsgbysrKSB7XG4gICAgICAgIHVbb10gPSAwO1xuICAgICAgfWZvciAobyA9IDA7IG8gPCBuLmxlbmd0aDsgbysrKSB7XG4gICAgICAgIHVbbltvXV0rKztcbiAgICAgIH12YXIgcyA9IHUuaW5kZXhPZihNYXRoLm1heC5hcHBseShNYXRoLCB1KSksXG4gICAgICAgICAgYyA9IFtdO2ZvciAobyA9IDAsIGYgPSAwOyBvIDwgbi5sZW5ndGg7IG8rKykge1xuICAgICAgICBpZiAobltvXSA9PT0gcykge1xuICAgICAgICAgIHZhciBoID0gNTAgKiBvLFxuICAgICAgICAgICAgICBsID0gTWF0aC5taW4oaCArIDUwLCByLmxlbmd0aCk7Yy5wdXNoKHsgaW5kZXg6IG8sIGNvc3Q6IGVbc10uY29zdChyLCBoLCBsIC0gaCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH1mb3IgKGMuc29ydChmdW5jdGlvbiAoZSwgdCkge1xuICAgICAgICByZXR1cm4gZS5jb3N0IC0gdC5jb3N0O1xuICAgICAgfSksIG8gPSBjLmxlbmd0aCA+Pj4gMTsgbyA8IGMubGVuZ3RoOyBvKyspIHtcbiAgICAgICAgbltjW29dLmluZGV4XSA9IGUubGVuZ3RoO1xuICAgICAgfWUucHVzaChudWxsKTt2YXIgQixcbiAgICAgICAgICB2ID0gW107Zm9yIChvID0gMDsgbyA8IGUubGVuZ3RoOyBvKyspIHtcbiAgICAgICAgZm9yIChCID0gdltvXSA9IFtdLCBmID0gMDsgZiA8IGk7IGYrKykge1xuICAgICAgICAgIEJbZl0gPSAwO1xuICAgICAgICB9XG4gICAgICB9Zm9yIChvID0gMCwgZiA9IDA7IG8gPCByLmxlbmd0aDspIHtcbiAgICAgICAgZm9yIChCID0gdltuW2YrK11dLCBhID0gMDsgYSA8IDUwICYmIG8gPCByLmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgQltyW28rK11dKys7XG4gICAgICAgIH1cbiAgICAgIH1mb3IgKG8gPSAwOyBvIDwgZS5sZW5ndGg7IG8rKykge1xuICAgICAgICBlW29dID0gbmV3IGQodltvXSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAgICAgbSA9IGZ1bmN0aW9uIG0oZSwgdCwgbikge1xuICAgIHZhciBpLFxuICAgICAgICBvLFxuICAgICAgICBhLFxuICAgICAgICBzLFxuICAgICAgICBjID0gZi5tYWtlVThCdWZmZXIodCksXG4gICAgICAgIGggPSByLmJ3dHJhbnNmb3JtMihlLCBjLCB0LCAyNTYpO24ud3JpdGVCaXQoMCksIG4ud3JpdGVCaXRzKDI0LCBoKTt2YXIgbCA9IFtdLFxuICAgICAgICBCID0gW107Zm9yIChvID0gMDsgbyA8IHQ7IG8rKykge1xuICAgICAgaSA9IGVbb10sIGxbaV0gPSAhMCwgQltpID4+PiA0XSA9ICEwO1xuICAgIH1mb3IgKG8gPSAwOyBvIDwgMTY7IG8rKykge1xuICAgICAgbi53cml0ZUJpdCghIUJbb10pO1xuICAgIH1mb3IgKG8gPSAwOyBvIDwgMTY7IG8rKykge1xuICAgICAgaWYgKEJbb10pIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSB7XG4gICAgICAgIG4ud3JpdGVCaXQoISFsW28gPDwgNCB8IGFdKTtcbiAgICAgIH1cbiAgICB9dmFyIG0gPSAwO2ZvciAobyA9IDA7IG8gPCAyNTY7IG8rKykge1xuICAgICAgbFtvXSAmJiBtKys7XG4gICAgfXZhciB3ID0gZi5tYWtlVTE2QnVmZmVyKHQgKyAxKSxcbiAgICAgICAgRSA9IG0gKyAxLFxuICAgICAgICBnID0gW107Zm9yIChvID0gMDsgbyA8PSBFOyBvKyspIHtcbiAgICAgIGdbb10gPSAwO1xuICAgIH12YXIgXyA9IGYubWFrZVU4QnVmZmVyKG0pO2ZvciAobyA9IDAsIGEgPSAwOyBvIDwgMjU2OyBvKyspIHtcbiAgICAgIGxbb10gJiYgKF9bYSsrXSA9IG8pO1xuICAgIH1sID0gbnVsbCwgQiA9IG51bGw7dmFyIGIgPSAwLFxuICAgICAgICB5ID0gMCxcbiAgICAgICAgUiA9IGZ1bmN0aW9uIFIoZSkge1xuICAgICAgd1tiKytdID0gZSwgZ1tlXSsrO1xuICAgIH0sXG4gICAgICAgIEMgPSBmdW5jdGlvbiBDKCkge1xuICAgICAgZm9yICg7IDAgIT09IHk7KSB7XG4gICAgICAgIDEgJiB5ID8gKFIoMCksIHkgLT0gMSkgOiAoUigxKSwgeSAtPSAyKSwgeSA+Pj49IDE7XG4gICAgICB9XG4gICAgfTtmb3IgKG8gPSAwOyBvIDwgYy5sZW5ndGg7IG8rKykge1xuICAgICAgZm9yIChpID0gY1tvXSwgYSA9IDA7IGEgPCBtICYmIF9bYV0gIT09IGk7IGErKykge31jb25zb2xlLmFzc2VydChhICE9PSBtKSwgdShfLCBhKSwgMCA9PT0gYSA/IHkrKyA6IChDKCksIFIoYSArIDEpLCB5ID0gMCk7XG4gICAgfUMoKSwgUihFKSwgdyA9IHcuc3ViYXJyYXkoMCwgYik7dmFyIGssXG4gICAgICAgIFQgPSBbXTtmb3IgKGsgPSBiID49IDI0MDAgPyA2IDogYiA+PSAxMjAwID8gNSA6IGIgPj0gNjAwID8gNCA6IGIgPj0gMjAwID8gMyA6IDIsIFQucHVzaChuZXcgZChnLCBFICsgMSkpLCBvID0gMDsgbyA8PSBFOyBvKyspIHtcbiAgICAgIGdbb10gPSAxO1xuICAgIH1ULnB1c2gobmV3IGQoZywgRSArIDEpKSwgZyA9IG51bGw7dmFyIE8gPSBmLm1ha2VVOEJ1ZmZlcihNYXRoLmNlaWwoYiAvIDUwKSk7Zm9yICh2KFQsIGssIHcsIE8sIEUgKyAxKSwgcChPLCBULCB3KSwgY29uc29sZS5hc3NlcnQoVC5sZW5ndGggPj0gMiAmJiBULmxlbmd0aCA8PSA2KSwgbi53cml0ZUJpdHMoMywgVC5sZW5ndGgpLCBuLndyaXRlQml0cygxNSwgTy5sZW5ndGgpLCBvID0gMDsgbyA8IFQubGVuZ3RoOyBvKyspIHtcbiAgICAgIF9bb10gPSBvO1xuICAgIH1mb3IgKG8gPSAwOyBvIDwgTy5sZW5ndGg7IG8rKykge1xuICAgICAgdmFyIFMgPSBPW29dO2ZvciAoYSA9IDA7IGEgPCBULmxlbmd0aCAmJiBfW2FdICE9PSBTOyBhKyspIHt9Zm9yIChjb25zb2xlLmFzc2VydChhIDwgVC5sZW5ndGgpLCB1KF8sIGEpOyBhID4gMDsgYS0tKSB7XG4gICAgICAgIG4ud3JpdGVCaXQoMSk7XG4gICAgICB9bi53cml0ZUJpdCgwKTtcbiAgICB9Zm9yIChvID0gMDsgbyA8IFQubGVuZ3RoOyBvKyspIHtcbiAgICAgIFRbb10uZW1pdChuKSwgVFtvXS5jb21wdXRlQ2Fub25pY2FsKCk7XG4gICAgfWZvciAobyA9IDAsIHMgPSAwOyBvIDwgYjspIHtcbiAgICAgIHZhciBVID0gVFtPW3MrK11dO2ZvciAoYSA9IDA7IGEgPCA1MCAmJiBvIDwgYjsgYSsrKSB7XG4gICAgICAgIFUuZW5jb2RlKG4sIHdbbysrXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAgICAgdyA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShudWxsKTtyZXR1cm4gdy5jb21wcmVzc0ZpbGUgPSBmdW5jdGlvbiAoZSwgciwgaSkge1xuICAgIGUgPSBmLmNvZXJjZUlucHV0U3RyZWFtKGUpO3ZhciBvID0gZi5jb2VyY2VPdXRwdXRTdHJlYW0ociwgcik7ciA9IG5ldyB0KG8uc3RyZWFtKTt2YXIgYSA9IDk7aWYgKFwibnVtYmVyXCIgPT0gdHlwZW9mIGkgJiYgKGEgPSBpKSwgYSA8IDEgfHwgYSA+IDkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmxvY2sgc2l6ZSBtdWx0aXBsaWVyXCIpO3ZhciB1ID0gMWU1ICogYTt1IC09IDE5LCByLndyaXRlQnl0ZShcIkJcIi5jaGFyQ29kZUF0KDApKSwgci53cml0ZUJ5dGUoXCJaXCIuY2hhckNvZGVBdCgwKSksIHIud3JpdGVCeXRlKFwiaFwiLmNoYXJDb2RlQXQoMCkpLCByLndyaXRlQnl0ZShcIjBcIi5jaGFyQ29kZUF0KDApICsgYSk7dmFyIHMsXG4gICAgICAgIGMgPSBmLm1ha2VVOEJ1ZmZlcih1KSxcbiAgICAgICAgaCA9IDA7ZG8ge1xuICAgICAgdmFyIGwgPSBuZXcgbigpO3MgPSBCKGUsIGMsIHUsIGwpLCBzID4gMCAmJiAoaCA9ICgoaCA8PCAxIHwgaCA+Pj4gMzEpIF4gbC5nZXRDUkMoKSkgPj4+IDAsIHIud3JpdGVCaXRzKDQ4LCA1NDE1NjczODMxOTE5MyksIHIud3JpdGVCaXRzKDMyLCBsLmdldENSQygpKSwgbShjLCBzLCByKSk7XG4gICAgfSB3aGlsZSAocyA9PT0gdSk7cmV0dXJuIHIud3JpdGVCaXRzKDQ4LCAyNTc3OTU1NTAyOTEzNiksIHIud3JpdGVCaXRzKDMyLCBoKSwgci5mbHVzaCgpLCBvLnJldHZhbDtcbiAgfSwgdy5kZWNvbXByZXNzRmlsZSA9IGwuZGVjb2RlLCB3LmRlY29tcHJlc3NCbG9jayA9IGwuZGVjb2RlQmxvY2ssIHcudGFibGUgPSBsLnRhYmxlLCB3O1xufSgwLCBCaXRTdHJlYW0sIEJXVCwgQ1JDMzIsIEh1ZmZtYW5BbGxvY2F0b3IsIFN0cmVhbSwgVXRpbCksIG1vZHVsZS5leHBvcnRzID0gQnppcDI7XG5cbn0pLmNhbGwodGhpcyxfZGVyZXFfKCdfcHJvY2VzcycpLF9kZXJlcV8oXCJidWZmZXJcIikuQnVmZmVyKVxufSx7XCJfcHJvY2Vzc1wiOjMxNyxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlXCI6MjUsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2ZyZWV6ZVwiOjI4LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiOjQxLFwiYnVmZmVyXCI6NDd9XSwzMjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKFwiLi4vZW51bXNcIik7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0ludGVnZXJ9IHByZWZlcl9oYXNoX2FsZ29yaXRobSBEZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHtAbGluayBtb2R1bGU6ZW51bXMuaGFzaH1cbiAgICovXG4gIHByZWZlcl9oYXNoX2FsZ29yaXRobTogX2VudW1zMi5kZWZhdWx0Lmhhc2guc2hhMjU2LFxuICAvKipcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtJbnRlZ2VyfSBlbmNyeXB0aW9uX2NpcGhlciBEZWZhdWx0IGVuY3J5cHRpb24gY2lwaGVyIHtAbGluayBtb2R1bGU6ZW51bXMuc3ltbWV0cmljfVxuICAgKi9cbiAgZW5jcnlwdGlvbl9jaXBoZXI6IF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMuYWVzMjU2LFxuICAvKipcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtJbnRlZ2VyfSBjb21wcmVzc2lvbiBEZWZhdWx0IGNvbXByZXNzaW9uIGFsZ29yaXRobSB7QGxpbmsgbW9kdWxlOmVudW1zLmNvbXByZXNzaW9ufVxuICAgKi9cbiAgY29tcHJlc3Npb246IF9lbnVtczIuZGVmYXVsdC5jb21wcmVzc2lvbi51bmNvbXByZXNzZWQsXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0ludGVnZXJ9IGRlZmxhdGVfbGV2ZWwgRGVmYXVsdCB6aXAvemxpYiBjb21wcmVzc2lvbiBsZXZlbCwgYmV0d2VlbiAxIGFuZCA5XG4gICAqL1xuICBkZWZsYXRlX2xldmVsOiA2LFxuXG4gIC8qKlxuICAgKiBVc2UgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQWRkaXRpb25hbCBEYXRhIChBRUFEKSBwcm90ZWN0aW9uIGZvciBzeW1tZXRyaWMgZW5jcnlwdGlvbi5cbiAgICogKipOT1QgSU5URVJPUEVSQUJMRSBXSVRIIE9USEVSIE9QRU5QR1AgSU1QTEVNRU5UQVRJT05TKipcbiAgICogKipGVVRVUkUgT1BFTlBHUC5KUyBWRVJTSU9OUyBNQVkgQlJFQUsgQ09NUEFUSUJJTElUWSBXSEVOIFVTSU5HIFRISVMgT1BUSU9OKipcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBhZWFkX3Byb3RlY3RcbiAgICovXG4gIGFlYWRfcHJvdGVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBVc2UgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQWRkaXRpb25hbCBEYXRhIChBRUFEKSBwcm90ZWN0aW9uIGZvciBzeW1tZXRyaWMgZW5jcnlwdGlvbi5cbiAgICogMCBtZWFucyB3ZSBpbXBsZW1lbnQgYSB2YXJpYW50IG9mIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtZm9yZC1vcGVucGdwLWZvcm1hdC0wMHx0aGlzIElFVEYgZHJhZnR9LlxuICAgKiA0IG1lYW5zIHdlIGltcGxlbWVudCB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtb3BlbnBncC1yZmM0ODgwYmlzLTA0fFJGQzQ4ODBiaXMtMDR9LlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkZXRlcm1pbmVzIGhvdyBBRUFEIHBhY2tldHMgYXJlIHBhcnNlZCBldmVuIHdoZW4gYWVhZF9wcm90ZWN0IGlzIHNldCB0byBmYWxzZVxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0ludGVnZXJ9IGFlYWRfcHJvdGVjdF92ZXJzaW9uXG4gICAqL1xuICBhZWFkX3Byb3RlY3RfdmVyc2lvbjogNCxcbiAgLyoqXG4gICAqIERlZmF1bHQgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQWRkaXRpb25hbCBEYXRhIChBRUFEKSBlbmNyeXB0aW9uIG1vZGVcbiAgICogT25seSBoYXMgYW4gZWZmZWN0IHdoZW4gYWVhZF9wcm90ZWN0IGlzIHNldCB0byB0cnVlLlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0ludGVnZXJ9IGFlYWRfbW9kZSBEZWZhdWx0IEFFQUQgbW9kZSB7QGxpbmsgbW9kdWxlOmVudW1zLmFlYWR9XG4gICAqL1xuICBhZWFkX21vZGU6IF9lbnVtczIuZGVmYXVsdC5hZWFkLmVheCxcbiAgLyoqXG4gICAqIENodW5rIFNpemUgQnl0ZSBmb3IgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQWRkaXRpb25hbCBEYXRhIChBRUFEKSBtb2RlXG4gICAqIE9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIGFlYWRfcHJvdGVjdCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICogTXVzdCBiZSBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gMCB0byA1Ni5cbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtJbnRlZ2VyfSBhZWFkX2NodW5rX3NpemVfYnl0ZVxuICAgKi9cbiAgYWVhZF9jaHVua19zaXplX2J5dGU6IDEyLFxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tMy43LjEuM3xSRkM0ODgwIDMuNy4xLjN9OlxuICAgKiBJdGVyYXRpb24gQ291bnQgQnl0ZSBmb3IgUzJLIChTdHJpbmcgdG8gS2V5KVxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0ludGVnZXJ9IHMya19pdGVyYXRpb25fY291bnRfYnl0ZVxuICAgKi9cbiAgczJrX2l0ZXJhdGlvbl9jb3VudF9ieXRlOiA5NixcbiAgLyoqIFVzZSBpbnRlZ3JpdHkgcHJvdGVjdGlvbiBmb3Igc3ltbWV0cmljIGVuY3J5cHRpb25cbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpbnRlZ3JpdHlfcHJvdGVjdFxuICAgKi9cbiAgaW50ZWdyaXR5X3Byb3RlY3Q6IHRydWUsXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlnbm9yZV9tZGNfZXJyb3IgRmFpbCBvbiBkZWNyeXB0IGlmIG1lc3NhZ2UgaXMgbm90IGludGVncml0eSBwcm90ZWN0ZWRcbiAgICovXG4gIGlnbm9yZV9tZGNfZXJyb3I6IGZhbHNlLFxuICAvKipcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBjaGVja3N1bV9yZXF1aXJlZCBEbyBub3QgdGhyb3cgZXJyb3Igd2hlbiBhcm1vciBpcyBtaXNzaW5nIGEgY2hlY2tzdW1cbiAgICovXG4gIGNoZWNrc3VtX3JlcXVpcmVkOiBmYWxzZSxcbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBtb2R1bGU6Y29uZmlnXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcnNhX2JsaW5kaW5nXG4gICAqL1xuICByc2FfYmxpbmRpbmc6IHRydWUsXG4gIC8qKlxuICAgKiBXb3JrLWFyb3VuZCBmb3IgcmFyZSBHUEcgZGVjcnlwdGlvbiBidWcgd2hlbiBlbmNyeXB0aW5nIHdpdGggbXVsdGlwbGUgcGFzc3dvcmRzLlxuICAgKiAqKlNsb3dlciBhbmQgc2xpZ2h0bHkgbGVzcyBzZWN1cmUqKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IHBhc3N3b3JkX2NvbGxpc2lvbl9jaGVja1xuICAgKi9cbiAgcGFzc3dvcmRfY29sbGlzaW9uX2NoZWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBtb2R1bGU6Y29uZmlnXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmV2b2NhdGlvbnNfZXhwaXJlIElmIHRydWUsIGV4cGlyZWQgcmV2b2NhdGlvbiBzaWduYXR1cmVzIGFyZSBpZ25vcmVkXG4gICAqL1xuICByZXZvY2F0aW9uc19leHBpcmU6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IHVzZV9uYXRpdmUgVXNlIG5hdGl2ZSBOb2RlLmpzIGNyeXB0by96bGliIGFuZCBXZWJDcnlwdG8gQVBJcyB3aGVuIGF2YWlsYWJsZVxuICAgKi9cbiAgdXNlX25hdGl2ZTogdHJ1ZSxcbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBtb2R1bGU6Y29uZmlnXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gVXNlIHRyYW5zZmVyYWJsZSBvYmplY3RzIGJldHdlZW4gdGhlIFdlYiBXb3JrZXIgYW5kIG1haW4gdGhyZWFkXG4gICAqL1xuICB6ZXJvX2NvcHk6IGZhbHNlLFxuICAvKipcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBkZWJ1ZyBJZiBlbmFibGVkLCBkZWJ1ZyBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWRcbiAgICovXG4gIGRlYnVnOiBmYWxzZSxcbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBtb2R1bGU6Y29uZmlnXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gdG9sZXJhbnQgSWdub3JlIHVuc3VwcG9ydGVkL3VucmVjb2duaXphYmxlIHBhY2tldHMgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvclxuICAgKi9cbiAgdG9sZXJhbnQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBtb2R1bGU6Y29uZmlnXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2hvd192ZXJzaW9uIFdoZXRoZXIgdG8gaW5jbHVkZSB7QGxpbmsgbW9kdWxlOmNvbmZpZy9jb25maWcudmVyc2lvbnN0cmluZ30gaW4gYXJtb3JlZCBtZXNzYWdlc1xuICAgKi9cbiAgc2hvd192ZXJzaW9uOiB0cnVlLFxuICAvKipcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBzaG93X2NvbW1lbnQgV2hldGhlciB0byBpbmNsdWRlIHtAbGluayBtb2R1bGU6Y29uZmlnL2NvbmZpZy5jb21tZW50c3RyaW5nfSBpbiBhcm1vcmVkIG1lc3NhZ2VzXG4gICAqL1xuICBzaG93X2NvbW1lbnQ6IHRydWUsXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge1N0cmluZ30gdmVyc2lvbnN0cmluZyBBIHZlcnNpb24gc3RyaW5nIHRvIGJlIGluY2x1ZGVkIGluIGFybW9yZWQgbWVzc2FnZXNcbiAgICovXG4gIHZlcnNpb25zdHJpbmc6IFwiT3BlblBHUC5qcyB2My4wLjEzXCIsXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge1N0cmluZ30gY29tbWVudHN0cmluZyBBIGNvbW1lbnQgc3RyaW5nIHRvIGJlIGluY2x1ZGVkIGluIGFybW9yZWQgbWVzc2FnZXNcbiAgICovXG4gIGNvbW1lbnRzdHJpbmc6IFwiaHR0cHM6Ly9vcGVucGdwanMub3JnXCIsXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBtb2R1bGU6Y29uZmlnXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBrZXlzZXJ2ZXJcbiAgICovXG4gIGtleXNlcnZlcjogXCJodHRwczovL2tleXNlcnZlci51YnVudHUuY29tXCIsXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgbW9kdWxlOmNvbmZpZ1xuICAgKiBAcHJvcGVydHkge1N0cmluZ30gbm9kZV9zdG9yZVxuICAgKi9cbiAgbm9kZV9zdG9yZTogXCIuL29wZW5wZ3Auc3RvcmVcIixcbiAgLyoqXG4gICAqIE1heCB1c2VyaWQgc3RyaW5nIGxlbmd0aCAodXNlZCBmb3IgcGFyc2luZylcbiAgICogQG1lbWJlcm9mIG1vZHVsZTpjb25maWdcbiAgICogQHByb3BlcnR5IHtJbnRlZ2VyfSBtYXhfdXNlcmlkX2xlbmd0aFxuICAgKi9cbiAgbWF4X3VzZXJpZF9sZW5ndGg6IDEwMjQgKiA1XG59OyAvLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEdsb2JhbCBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAqIEByZXF1aXJlcyBlbnVtc1xuICovXG5cbn0se1wiLi4vZW51bXNcIjozNTl9XSwzMjU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NvbmZpZyA9IF9kZXJlcV8oJy4vY29uZmlnLmpzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZGVmYXVsdCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZykuZGVmYXVsdDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbn0se1wiLi9jb25maWcuanNcIjozMjR9XSwzMjY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NpcGhlciA9IF9kZXJlcV8oJy4vY2lwaGVyJyk7XG5cbnZhciBfY2lwaGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NpcGhlcik7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBPcGVuUEdQLmpzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBEZWNlbnRyYWxcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50YXRpb24gb2YgUkZDIDMzOTQgQUVTIEtleSBXcmFwICYgS2V5IFVud3JhcCBmdW5jaW9uc1xuICogQHNlZSBtb2R1bGU6Y3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvZWNkaFxuICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXJcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGNyeXB0by9hZXNfa3dcbiAqL1xuXG5mdW5jdGlvbiB3cmFwKGtleSwgZGF0YSkge1xuICB2YXIgYWVzID0gbmV3IF9jaXBoZXIyLmRlZmF1bHRbXCJhZXNcIiArIGtleS5sZW5ndGggKiA4XShrZXkpO1xuICB2YXIgSVYgPSBuZXcgVWludDMyQXJyYXkoWzB4QTZBNkE2QTYsIDB4QTZBNkE2QTZdKTtcbiAgdmFyIFAgPSB1bnBhY2soZGF0YSk7XG4gIHZhciBBID0gSVY7XG4gIHZhciBSID0gUDtcbiAgdmFyIG4gPSBQLmxlbmd0aCAvIDI7XG4gIHZhciB0ID0gbmV3IFVpbnQzMkFycmF5KFswLCAwXSk7XG4gIHZhciBCID0gbmV3IFVpbnQzMkFycmF5KDQpO1xuICBmb3IgKHZhciBqID0gMDsgaiA8PSA1OyArK2opIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdFsxXSA9IG4gKiBqICsgKDEgKyBpKTtcbiAgICAgIC8vIEIgPSBBXG4gICAgICBCWzBdID0gQVswXTtcbiAgICAgIEJbMV0gPSBBWzFdO1xuICAgICAgLy8gQiA9IEEgfHwgUltpXVxuICAgICAgQlsyXSA9IFJbMiAqIGldO1xuICAgICAgQlszXSA9IFJbMiAqIGkgKyAxXTtcbiAgICAgIC8vIEIgPSBBRVMoSywgQilcbiAgICAgIEIgPSB1bnBhY2soYWVzLmVuY3J5cHQocGFjayhCKSkpO1xuICAgICAgLy8gQSA9IE1TQig2NCwgQikgXiB0XG4gICAgICBBID0gQi5zdWJhcnJheSgwLCAyKTtcbiAgICAgIEFbMF0gXj0gdFswXTtcbiAgICAgIEFbMV0gXj0gdFsxXTtcbiAgICAgIC8vIFJbaV0gPSBMU0IoNjQsIEIpXG4gICAgICBSWzIgKiBpXSA9IEJbMl07XG4gICAgICBSWzIgKiBpICsgMV0gPSBCWzNdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFjayhBLCBSKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwKGtleSwgZGF0YSkge1xuICB2YXIgYWVzID0gbmV3IF9jaXBoZXIyLmRlZmF1bHRbXCJhZXNcIiArIGtleS5sZW5ndGggKiA4XShrZXkpO1xuICB2YXIgSVYgPSBuZXcgVWludDMyQXJyYXkoWzB4QTZBNkE2QTYsIDB4QTZBNkE2QTZdKTtcbiAgdmFyIEMgPSB1bnBhY2soZGF0YSk7XG4gIHZhciBBID0gQy5zdWJhcnJheSgwLCAyKTtcbiAgdmFyIFIgPSBDLnN1YmFycmF5KDIpO1xuICB2YXIgbiA9IEMubGVuZ3RoIC8gMiAtIDE7XG4gIHZhciB0ID0gbmV3IFVpbnQzMkFycmF5KFswLCAwXSk7XG4gIHZhciBCID0gbmV3IFVpbnQzMkFycmF5KDQpO1xuICBmb3IgKHZhciBqID0gNTsgaiA+PSAwOyAtLWopIHtcbiAgICBmb3IgKHZhciBpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0WzFdID0gbiAqIGogKyAoaSArIDEpO1xuICAgICAgLy8gQiA9IEEgXiB0XG4gICAgICBCWzBdID0gQVswXSBeIHRbMF07XG4gICAgICBCWzFdID0gQVsxXSBeIHRbMV07XG4gICAgICAvLyBCID0gKEEgXiB0KSB8fCBSW2ldXG4gICAgICBCWzJdID0gUlsyICogaV07XG4gICAgICBCWzNdID0gUlsyICogaSArIDFdO1xuICAgICAgLy8gQiA9IEFFUy0xKEIpXG4gICAgICBCID0gdW5wYWNrKGFlcy5kZWNyeXB0KHBhY2soQikpKTtcbiAgICAgIC8vIEEgPSBNU0IoNjQsIEIpXG4gICAgICBBID0gQi5zdWJhcnJheSgwLCAyKTtcbiAgICAgIC8vIFJbaV0gPSBMU0IoNjQsIEIpXG4gICAgICBSWzIgKiBpXSA9IEJbMl07XG4gICAgICBSWzIgKiBpICsgMV0gPSBCWzNdO1xuICAgIH1cbiAgfVxuICBpZiAoQVswXSA9PT0gSVZbMF0gJiYgQVsxXSA9PT0gSVZbMV0pIHtcbiAgICByZXR1cm4gcGFjayhSKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJLZXkgRGF0YSBJbnRlZ3JpdHkgZmFpbGVkXCIpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBcnJheUJ1ZmZlcihkYXRhKSB7XG4gIGlmIChfdXRpbDIuZGVmYXVsdC5pc1N0cmluZyhkYXRhKSkge1xuICAgIHZhciBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW5ndGg7ICsraikge1xuICAgICAgdmlld1tqXSA9IGRhdGEuY2hhckNvZGVBdChqKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSkuYnVmZmVyO1xufVxuXG5mdW5jdGlvbiB1bnBhY2soZGF0YSkge1xuICB2YXIgbGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgdmFyIGJ1ZmZlciA9IGNyZWF0ZUFycmF5QnVmZmVyKGRhdGEpO1xuICB2YXIgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xuICB2YXIgYXJyID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCAvIDQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAvIDQ7ICsraSkge1xuICAgIGFycltpXSA9IHZpZXcuZ2V0VWludDMyKDQgKiBpKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBwYWNrKCkge1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgayA9IDA7IGsgPCBhcmd1bWVudHMubGVuZ3RoOyArK2spIHtcbiAgICBsZW5ndGggKz0gNCAqIGFyZ3VtZW50c1trXS5sZW5ndGg7XG4gIH1cbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpO1xuICB2YXIgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7ICsraikge1xuICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0ICsgNCAqIGosIGFyZ3VtZW50c1tpXVtqXSk7XG4gICAgfVxuICAgIG9mZnNldCArPSA0ICogYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAvKipcbiAgICogQUVTIGtleSB3cmFwXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICAgKi9cbiAgd3JhcDogd3JhcCxcbiAgLyoqXG4gICAqIEFFUyBrZXkgdW53cmFwXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIHVud3JhcDogdW53cmFwXG59O1xuXG59LHtcIi4uL3V0aWxcIjozOTgsXCIuL2NpcGhlclwiOjMzMn1dLDMyNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY2lwaGVyID0gX2RlcmVxXygnLi9jaXBoZXInKTtcblxudmFyIF9jaXBoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2lwaGVyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGVuY3J5cHRzIGEgZ2l2ZW4gcGxhaW50ZXh0IHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXhyYW5kb21cbiAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBibG9ja2NpcGhlclxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHByZWZpeHJhbmRvbSByYW5kb20gYnl0ZXMgb2YgYmxvY2tfc2l6ZSBsZW5ndGhcbiAgICogIHRvIGJlIHVzZWQgaW4gcHJlZml4aW5nIHRoZSBkYXRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjaXBoZXJmbiB0aGUgYWxnb3JpdGhtIGNpcGhlciBjbGFzcyB0byBlbmNyeXB0XG4gICAqICBkYXRhIGluIG9uZSBibG9ja19zaXplIGVuY3J5cHRpb24sIHtAbGluayBtb2R1bGU6Y3J5cHRvL2NpcGhlcn0uXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gcGxhaW50ZXh0IGRhdGEgdG8gYmUgZW5jcnlwdGVkXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5IGtleSB0byBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIHBsYWludGV4dC5cbiAgICogVGhpcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2lwaGVyZm5cbiAgICogQHBhcmFtIHtCb29sZWFufSByZXN5bmMgYSBib29sZWFuIHZhbHVlIHNwZWNpZnlpbmcgaWYgYSByZXN5bmMgb2YgdGhlXG4gICAqICBJViBzaG91bGQgYmUgdXNlZCBvciBub3QuIFRoZSBlbmNyeXB0ZWRkYXRhcGFja2V0IHVzZXMgdGhlXG4gICAqICBcIm9sZFwiIHN0eWxlIHdpdGggYSByZXN5bmMuIEVuY3J5cHRpb24gd2l0aGluIGFuXG4gICAqICBlbmNyeXB0ZWRpbnRlZ3JpdHlwcm90ZWN0ZWRkYXRhIHBhY2tldCBpcyBub3QgcmVzeW5jaW5nIHRoZSBJVi5cbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IGVuY3J5cHRlZCBkYXRhXG4gICAqL1xuICBlbmNyeXB0OiBmdW5jdGlvbiBlbmNyeXB0KHByZWZpeHJhbmRvbSwgY2lwaGVyZm4sIHBsYWludGV4dCwga2V5LCByZXN5bmMpIHtcbiAgICBjaXBoZXJmbiA9IG5ldyBfY2lwaGVyMi5kZWZhdWx0W2NpcGhlcmZuXShrZXkpO1xuICAgIHZhciBibG9ja19zaXplID0gY2lwaGVyZm4uYmxvY2tTaXplO1xuXG4gICAgdmFyIEZSID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tfc2l6ZSk7XG4gICAgdmFyIEZSRSA9IG5ldyBVaW50OEFycmF5KGJsb2NrX3NpemUpO1xuXG4gICAgdmFyIG5ld19wcmVmaXggPSBuZXcgVWludDhBcnJheShwcmVmaXhyYW5kb20ubGVuZ3RoICsgMik7XG4gICAgbmV3X3ByZWZpeC5zZXQocHJlZml4cmFuZG9tKTtcbiAgICBuZXdfcHJlZml4W3ByZWZpeHJhbmRvbS5sZW5ndGhdID0gcHJlZml4cmFuZG9tW2Jsb2NrX3NpemUgLSAyXTtcbiAgICBuZXdfcHJlZml4W3ByZWZpeHJhbmRvbS5sZW5ndGggKyAxXSA9IHByZWZpeHJhbmRvbVtibG9ja19zaXplIC0gMV07XG4gICAgcHJlZml4cmFuZG9tID0gbmV3X3ByZWZpeDtcblxuICAgIHZhciBjaXBoZXJ0ZXh0ID0gbmV3IFVpbnQ4QXJyYXkocGxhaW50ZXh0Lmxlbmd0aCArIDIgKyBibG9ja19zaXplICogMik7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIG4gPSB2b2lkIDA7XG4gICAgdmFyIGJlZ2luID0gdm9pZCAwO1xuICAgIHZhciBvZmZzZXQgPSByZXN5bmMgPyAwIDogMjtcblxuICAgIC8vIDEuICBUaGUgZmVlZGJhY2sgcmVnaXN0ZXIgKEZSKSBpcyBzZXQgdG8gdGhlIElWLCB3aGljaCBpcyBhbGwgemVyb3MuXG4gICAgZm9yIChpID0gMDsgaSA8IGJsb2NrX3NpemU7IGkrKykge1xuICAgICAgRlJbaV0gPSAwO1xuICAgIH1cblxuICAgIC8vIDIuICBGUiBpcyBlbmNyeXB0ZWQgdG8gcHJvZHVjZSBGUkUgKEZSIEVuY3J5cHRlZCkuICBUaGlzIGlzIHRoZVxuICAgIC8vICAgICBlbmNyeXB0aW9uIG9mIGFuIGFsbC16ZXJvIHZhbHVlLlxuICAgIEZSRSA9IGNpcGhlcmZuLmVuY3J5cHQoRlIpO1xuICAgIC8vIDMuICBGUkUgaXMgeG9yZWQgd2l0aCB0aGUgZmlyc3QgQlMgb2N0ZXRzIG9mIHJhbmRvbSBkYXRhIHByZWZpeGVkIHRvXG4gICAgLy8gICAgIHRoZSBwbGFpbnRleHQgdG8gcHJvZHVjZSBDWzFdIHRocm91Z2ggQ1tCU10sIHRoZSBmaXJzdCBCUyBvY3RldHNcbiAgICAvLyAgICAgb2YgY2lwaGVydGV4dC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZTsgaSsrKSB7XG4gICAgICBjaXBoZXJ0ZXh0W2ldID0gRlJFW2ldIF4gcHJlZml4cmFuZG9tW2ldO1xuICAgIH1cblxuICAgIC8vIDQuICBGUiBpcyBsb2FkZWQgd2l0aCBDWzFdIHRocm91Z2ggQ1tCU10uXG4gICAgRlIuc2V0KGNpcGhlcnRleHQuc3ViYXJyYXkoMCwgYmxvY2tfc2l6ZSkpO1xuXG4gICAgLy8gNS4gIEZSIGlzIGVuY3J5cHRlZCB0byBwcm9kdWNlIEZSRSwgdGhlIGVuY3J5cHRpb24gb2YgdGhlIGZpcnN0IEJTXG4gICAgLy8gICAgIG9jdGV0cyBvZiBjaXBoZXJ0ZXh0LlxuICAgIEZSRSA9IGNpcGhlcmZuLmVuY3J5cHQoRlIpO1xuXG4gICAgLy8gNi4gIFRoZSBsZWZ0IHR3byBvY3RldHMgb2YgRlJFIGdldCB4b3JlZCB3aXRoIHRoZSBuZXh0IHR3byBvY3RldHMgb2ZcbiAgICAvLyAgICAgZGF0YSB0aGF0IHdlcmUgcHJlZml4ZWQgdG8gdGhlIHBsYWludGV4dC4gIFRoaXMgcHJvZHVjZXMgQ1tCUysxXVxuICAgIC8vICAgICBhbmQgQ1tCUysyXSwgdGhlIG5leHQgdHdvIG9jdGV0cyBvZiBjaXBoZXJ0ZXh0LlxuICAgIGNpcGhlcnRleHRbYmxvY2tfc2l6ZV0gPSBGUkVbMF0gXiBwcmVmaXhyYW5kb21bYmxvY2tfc2l6ZV07XG4gICAgY2lwaGVydGV4dFtibG9ja19zaXplICsgMV0gPSBGUkVbMV0gXiBwcmVmaXhyYW5kb21bYmxvY2tfc2l6ZSArIDFdO1xuXG4gICAgaWYgKHJlc3luYykge1xuICAgICAgLy8gNy4gIChUaGUgcmVzeW5jIHN0ZXApIEZSIGlzIGxvYWRlZCB3aXRoIENbM10gdGhyb3VnaCBDW0JTKzJdLlxuICAgICAgRlIuc2V0KGNpcGhlcnRleHQuc3ViYXJyYXkoMiwgYmxvY2tfc2l6ZSArIDIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgRlIuc2V0KGNpcGhlcnRleHQuc3ViYXJyYXkoMCwgYmxvY2tfc2l6ZSkpO1xuICAgIH1cbiAgICAvLyA4LiAgRlIgaXMgZW5jcnlwdGVkIHRvIHByb2R1Y2UgRlJFLlxuICAgIEZSRSA9IGNpcGhlcmZuLmVuY3J5cHQoRlIpO1xuXG4gICAgLy8gOS4gIEZSRSBpcyB4b3JlZCB3aXRoIHRoZSBmaXJzdCBCUyBvY3RldHMgb2YgdGhlIGdpdmVuIHBsYWludGV4dCwgbm93XG4gICAgLy8gICAgIHRoYXQgd2UgaGF2ZSBmaW5pc2hlZCBlbmNyeXB0aW5nIHRoZSBCUysyIG9jdGV0cyBvZiBwcmVmaXhlZFxuICAgIC8vICAgICBkYXRhLiAgVGhpcyBwcm9kdWNlcyBDW0JTKzNdIHRocm91Z2ggQ1tCUysoQlMrMildLCB0aGUgbmV4dCBCU1xuICAgIC8vICAgICBvY3RldHMgb2YgY2lwaGVydGV4dC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZTsgaSsrKSB7XG4gICAgICBjaXBoZXJ0ZXh0W2Jsb2NrX3NpemUgKyAyICsgaV0gPSBGUkVbaSArIG9mZnNldF0gXiBwbGFpbnRleHRbaV07XG4gICAgfVxuICAgIGZvciAobiA9IGJsb2NrX3NpemU7IG4gPCBwbGFpbnRleHQubGVuZ3RoICsgb2Zmc2V0OyBuICs9IGJsb2NrX3NpemUpIHtcbiAgICAgIC8vIDEwLiBGUiBpcyBsb2FkZWQgd2l0aCBDW0JTKzNdIHRvIENbQlMgKyAoQlMrMildICh3aGljaCBpcyBDMTEtQzE4IGZvclxuICAgICAgLy8gYW4gOC1vY3RldCBibG9jaykuXG4gICAgICBiZWdpbiA9IG4gKyAyIC0gb2Zmc2V0O1xuICAgICAgRlIuc2V0KGNpcGhlcnRleHQuc3ViYXJyYXkoYmVnaW4sIGJlZ2luICsgYmxvY2tfc2l6ZSkpO1xuXG4gICAgICAvLyAxMS4gRlIgaXMgZW5jcnlwdGVkIHRvIHByb2R1Y2UgRlJFLlxuICAgICAgRlJFID0gY2lwaGVyZm4uZW5jcnlwdChGUik7XG5cbiAgICAgIC8vIDEyLiBGUkUgaXMgeG9yZWQgd2l0aCB0aGUgbmV4dCBCUyBvY3RldHMgb2YgcGxhaW50ZXh0LCB0byBwcm9kdWNlXG4gICAgICAvLyB0aGUgbmV4dCBCUyBvY3RldHMgb2YgY2lwaGVydGV4dC4gIFRoZXNlIGFyZSBsb2FkZWQgaW50byBGUiwgYW5kXG4gICAgICAvLyB0aGUgcHJvY2VzcyBpcyByZXBlYXRlZCB1bnRpbCB0aGUgcGxhaW50ZXh0IGlzIHVzZWQgdXAuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZTsgaSsrKSB7XG4gICAgICAgIGNpcGhlcnRleHRbYmxvY2tfc2l6ZSArIGJlZ2luICsgaV0gPSBGUkVbaV0gXiBwbGFpbnRleHRbbiArIGkgLSBvZmZzZXRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNpcGhlcnRleHQgPSBjaXBoZXJ0ZXh0LnN1YmFycmF5KDAsIHBsYWludGV4dC5sZW5ndGggKyAyICsgYmxvY2tfc2l6ZSk7XG4gICAgcmV0dXJuIGNpcGhlcnRleHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlY3J5cHRzIHRoZSBwcmVmaXhlZCBkYXRhIGZvciB0aGUgTW9kaWZpY2F0aW9uIERldGVjdGlvbiBDb2RlIChNREMpIGNvbXB1dGF0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjaXBoZXJmbi5lbmNyeXB0IENpcGhlciBmdW5jdGlvbiB0byB1c2UsXG4gICAqICBAc2VlIG1vZHVsZTpjcnlwdG8vY2lwaGVyLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleSBVaW50OEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGtleSB0byBiZSB1c2VkIHRvIGNoZWNrIHRoZSBtZGNcbiAgICogVGhpcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2lwaGVyZm5cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBjaXBoZXJ0ZXh0IFRoZSBlbmNyeXB0ZWQgZGF0YVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gcGxhaW50ZXh0IERhdGEgb2YgRChjaXBoZXJ0ZXh0KSB3aXRoIGJsb2Nrc2l6ZSBsZW5ndGggKzJcbiAgICovXG4gIG1kYzogZnVuY3Rpb24gbWRjKGNpcGhlcmZuLCBrZXksIGNpcGhlcnRleHQpIHtcbiAgICBjaXBoZXJmbiA9IG5ldyBfY2lwaGVyMi5kZWZhdWx0W2NpcGhlcmZuXShrZXkpO1xuICAgIHZhciBibG9ja19zaXplID0gY2lwaGVyZm4uYmxvY2tTaXplO1xuXG4gICAgdmFyIGlibG9jayA9IG5ldyBVaW50OEFycmF5KGJsb2NrX3NpemUpO1xuICAgIHZhciBhYmxvY2sgPSBuZXcgVWludDhBcnJheShibG9ja19zaXplKTtcbiAgICB2YXIgaSA9IHZvaWQgMDtcblxuICAgIC8vIGluaXRpYWxpc2F0aW9uIHZlY3RvclxuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja19zaXplOyBpKyspIHtcbiAgICAgIGlibG9ja1tpXSA9IDA7XG4gICAgfVxuXG4gICAgaWJsb2NrID0gY2lwaGVyZm4uZW5jcnlwdChpYmxvY2spO1xuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja19zaXplOyBpKyspIHtcbiAgICAgIGFibG9ja1tpXSA9IGNpcGhlcnRleHRbaV07XG4gICAgICBpYmxvY2tbaV0gXj0gYWJsb2NrW2ldO1xuICAgIH1cblxuICAgIGFibG9jayA9IGNpcGhlcmZuLmVuY3J5cHQoYWJsb2NrKTtcblxuICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShpYmxvY2subGVuZ3RoICsgMik7XG4gICAgcmVzdWx0LnNldChpYmxvY2spO1xuICAgIHJlc3VsdFtpYmxvY2subGVuZ3RoXSA9IGFibG9ja1swXSBeIGNpcGhlcnRleHRbYmxvY2tfc2l6ZV07XG4gICAgcmVzdWx0W2libG9jay5sZW5ndGggKyAxXSA9IGFibG9ja1sxXSBeIGNpcGhlcnRleHRbYmxvY2tfc2l6ZSArIDFdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZGVjcnlwdHMgYSBnaXZlbiBjaXBoZXJ0ZXh0IHVzaW5nIHRoZSBzcGVjaWZpZWQgYmxvY2tjaXBoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNpcGhlcmZuIHRoZSBhbGdvcml0aG0gY2lwaGVyIGNsYXNzIHRvIGRlY3J5cHRcbiAgICogIGRhdGEgaW4gb25lIGJsb2NrX3NpemUgZW5jcnlwdGlvbiwge0BsaW5rIG1vZHVsZTpjcnlwdG8vY2lwaGVyfS5cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXkgVWludDhBcnJheSByZXByZXNlbnRhdGlvbiBvZiBrZXkgdG8gYmUgdXNlZCB0byBkZWNyeXB0IHRoZSBjaXBoZXJ0ZXh0LlxuICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjaXBoZXJmblxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGNpcGhlcnRleHQgdG8gYmUgZGVjcnlwdGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzeW5jIGEgYm9vbGVhbiB2YWx1ZSBzcGVjaWZ5aW5nIGlmIGEgcmVzeW5jIG9mIHRoZVxuICAgKiAgSVYgc2hvdWxkIGJlIHVzZWQgb3Igbm90LiBUaGUgZW5jcnlwdGVkZGF0YXBhY2tldCB1c2VzIHRoZVxuICAgKiAgXCJvbGRcIiBzdHlsZSB3aXRoIGEgcmVzeW5jLiBEZWNyeXB0aW9uIHdpdGhpbiBhblxuICAgKiAgZW5jcnlwdGVkaW50ZWdyaXR5cHJvdGVjdGVkZGF0YSBwYWNrZXQgaXMgbm90IHJlc3luY2luZyB0aGUgSVYuXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSB0aGUgcGxhaW50ZXh0IGRhdGFcbiAgICovXG4gIGRlY3J5cHQ6IGZ1bmN0aW9uIGRlY3J5cHQoY2lwaGVyZm4sIGtleSwgY2lwaGVydGV4dCwgcmVzeW5jKSB7XG4gICAgY2lwaGVyZm4gPSBuZXcgX2NpcGhlcjIuZGVmYXVsdFtjaXBoZXJmbl0oa2V5KTtcbiAgICB2YXIgYmxvY2tfc2l6ZSA9IGNpcGhlcmZuLmJsb2NrU2l6ZTtcblxuICAgIHZhciBpYmxvY2sgPSBuZXcgVWludDhBcnJheShibG9ja19zaXplKTtcbiAgICB2YXIgYWJsb2NrID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tfc2l6ZSk7XG5cbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaiA9IHZvaWQgMDtcbiAgICB2YXIgbiA9IHZvaWQgMDtcbiAgICB2YXIgdGV4dCA9IG5ldyBVaW50OEFycmF5KGNpcGhlcnRleHQubGVuZ3RoIC0gYmxvY2tfc2l6ZSk7XG5cbiAgICAvLyBpbml0aWFsaXNhdGlvbiB2ZWN0b3JcbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZTsgaSsrKSB7XG4gICAgICBpYmxvY2tbaV0gPSAwO1xuICAgIH1cblxuICAgIGlibG9jayA9IGNpcGhlcmZuLmVuY3J5cHQoaWJsb2NrKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZTsgaSsrKSB7XG4gICAgICBhYmxvY2tbaV0gPSBjaXBoZXJ0ZXh0W2ldO1xuICAgICAgaWJsb2NrW2ldIF49IGFibG9ja1tpXTtcbiAgICB9XG5cbiAgICBhYmxvY2sgPSBjaXBoZXJmbi5lbmNyeXB0KGFibG9jayk7XG5cbiAgICAvLyB0ZXN0IGNoZWNrIG9jdGV0c1xuICAgIGlmIChpYmxvY2tbYmxvY2tfc2l6ZSAtIDJdICE9PSAoYWJsb2NrWzBdIF4gY2lwaGVydGV4dFtibG9ja19zaXplXSkgfHwgaWJsb2NrW2Jsb2NrX3NpemUgLSAxXSAhPT0gKGFibG9ja1sxXSBeIGNpcGhlcnRleHRbYmxvY2tfc2l6ZSArIDFdKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDRkIgZGVjcnlwdDogaW52YWxpZCBrZXknKTtcbiAgICB9XG5cbiAgICAvKiAgUkZDNDg4MDogVGFnIDE4IGFuZCBSZXN5bmM6XG4gICAgICogIFsuLi5dIFVubGlrZSB0aGUgU3ltbWV0cmljYWxseSBFbmNyeXB0ZWQgRGF0YSBQYWNrZXQsIG5vXG4gICAgICogIHNwZWNpYWwgQ0ZCIHJlc3luY2hyb25pemF0aW9uIGlzIGRvbmUgYWZ0ZXIgZW5jcnlwdGluZyB0aGlzIHByZWZpeFxuICAgICAqICBkYXRhLiAgU2VlIFwiT3BlblBHUCBDRkIgTW9kZVwiIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAqL1xuXG4gICAgaiA9IDA7XG4gICAgaWYgKHJlc3luYykge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrX3NpemU7IGkrKykge1xuICAgICAgICBpYmxvY2tbaV0gPSBjaXBoZXJ0ZXh0W2kgKyAyXTtcbiAgICAgIH1cbiAgICAgIGZvciAobiA9IGJsb2NrX3NpemUgKyAyOyBuIDwgY2lwaGVydGV4dC5sZW5ndGg7IG4gKz0gYmxvY2tfc2l6ZSkge1xuICAgICAgICBhYmxvY2sgPSBjaXBoZXJmbi5lbmNyeXB0KGlibG9jayk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrX3NpemUgJiYgaSArIG4gPCBjaXBoZXJ0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWJsb2NrW2ldID0gY2lwaGVydGV4dFtuICsgaV07XG4gICAgICAgICAgaWYgKGogPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGV4dFtqXSA9IGFibG9ja1tpXSBeIGlibG9ja1tpXTtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrX3NpemU7IGkrKykge1xuICAgICAgICBpYmxvY2tbaV0gPSBjaXBoZXJ0ZXh0W2ldO1xuICAgICAgfVxuICAgICAgZm9yIChuID0gYmxvY2tfc2l6ZTsgbiA8IGNpcGhlcnRleHQubGVuZ3RoOyBuICs9IGJsb2NrX3NpemUpIHtcbiAgICAgICAgYWJsb2NrID0gY2lwaGVyZm4uZW5jcnlwdChpYmxvY2spO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZSAmJiBpICsgbiA8IGNpcGhlcnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpYmxvY2tbaV0gPSBjaXBoZXJ0ZXh0W24gKyBpXTtcbiAgICAgICAgICBpZiAoaiA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0ZXh0W2pdID0gYWJsb2NrW2ldIF4gaWJsb2NrW2ldO1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG4gPSByZXN5bmMgPyAwIDogMjtcblxuICAgIHRleHQgPSB0ZXh0LnN1YmFycmF5KG4sIGNpcGhlcnRleHQubGVuZ3RoIC0gYmxvY2tfc2l6ZSAtIDIgKyBuKTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9LFxuXG4gIG5vcm1hbEVuY3J5cHQ6IGZ1bmN0aW9uIG5vcm1hbEVuY3J5cHQoY2lwaGVyZm4sIGtleSwgcGxhaW50ZXh0LCBpdikge1xuICAgIGNpcGhlcmZuID0gbmV3IF9jaXBoZXIyLmRlZmF1bHRbY2lwaGVyZm5dKGtleSk7XG4gICAgdmFyIGJsb2NrX3NpemUgPSBjaXBoZXJmbi5ibG9ja1NpemU7XG5cbiAgICB2YXIgYmxvY2tpID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tfc2l6ZSk7XG4gICAgdmFyIGJsb2NrYyA9IG5ldyBVaW50OEFycmF5KGJsb2NrX3NpemUpO1xuICAgIHZhciBwb3MgPSAwO1xuICAgIHZhciBjeXBoZXJ0ZXh0ID0gbmV3IFVpbnQ4QXJyYXkocGxhaW50ZXh0Lmxlbmd0aCk7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGogPSAwO1xuXG4gICAgaWYgKGl2ID09PSBudWxsKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tfc2l6ZTsgaSsrKSB7XG4gICAgICAgIGJsb2NrY1tpXSA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja19zaXplOyBpKyspIHtcbiAgICAgICAgYmxvY2tjW2ldID0gaXZbaV07XG4gICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChwbGFpbnRleHQubGVuZ3RoID4gYmxvY2tfc2l6ZSAqIHBvcykge1xuICAgICAgdmFyIGVuY2Jsb2NrID0gY2lwaGVyZm4uZW5jcnlwdChibG9ja2MpO1xuICAgICAgYmxvY2tpID0gcGxhaW50ZXh0LnN1YmFycmF5KHBvcyAqIGJsb2NrX3NpemUsIHBvcyAqIGJsb2NrX3NpemUgKyBibG9ja19zaXplKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja2kubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYmxvY2tjW2ldID0gYmxvY2tpW2ldIF4gZW5jYmxvY2tbaV07XG4gICAgICAgIGN5cGhlcnRleHRbaisrXSA9IGJsb2NrY1tpXTtcbiAgICAgIH1cbiAgICAgIHBvcysrO1xuICAgIH1cbiAgICByZXR1cm4gY3lwaGVydGV4dDtcbiAgfSxcblxuICBub3JtYWxEZWNyeXB0OiBmdW5jdGlvbiBub3JtYWxEZWNyeXB0KGNpcGhlcmZuLCBrZXksIGNpcGhlcnRleHQsIGl2KSB7XG4gICAgY2lwaGVyZm4gPSBuZXcgX2NpcGhlcjIuZGVmYXVsdFtjaXBoZXJmbl0oa2V5KTtcbiAgICB2YXIgYmxvY2tfc2l6ZSA9IGNpcGhlcmZuLmJsb2NrU2l6ZTtcblxuICAgIHZhciBibG9ja3AgPSB2b2lkIDA7XG4gICAgdmFyIHBvcyA9IDA7XG4gICAgdmFyIHBsYWludGV4dCA9IG5ldyBVaW50OEFycmF5KGNpcGhlcnRleHQubGVuZ3RoKTtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaiA9IDA7XG5cbiAgICBpZiAoaXYgPT09IG51bGwpIHtcbiAgICAgIGJsb2NrcCA9IG5ldyBVaW50OEFycmF5KGJsb2NrX3NpemUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrX3NpemU7IGkrKykge1xuICAgICAgICBibG9ja3BbaV0gPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBibG9ja3AgPSBpdi5zdWJhcnJheSgwLCBibG9ja19zaXplKTtcbiAgICB9XG4gICAgd2hpbGUgKGNpcGhlcnRleHQubGVuZ3RoID4gYmxvY2tfc2l6ZSAqIHBvcykge1xuICAgICAgdmFyIGRlY2Jsb2NrID0gY2lwaGVyZm4uZW5jcnlwdChibG9ja3ApO1xuICAgICAgYmxvY2twID0gY2lwaGVydGV4dC5zdWJhcnJheShwb3MgKiBibG9ja19zaXplICsgb2Zmc2V0LCBwb3MgKiBibG9ja19zaXplICsgYmxvY2tfc2l6ZSArIG9mZnNldCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2twLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBsYWludGV4dFtqKytdID0gYmxvY2twW2ldIF4gZGVjYmxvY2tbaV07XG4gICAgICB9XG4gICAgICBwb3MrKztcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhaW50ZXh0O1xuICB9XG59OyAvLyBNb2RpZmllZCBieSBQcm90b25UZWNoIEFHXG5cbi8vIE1vZGlmaWVkIGJ5IFJlY3VyaXR5IExhYnMgR21iSFxuXG4vLyBtb2RpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vd3d3LmhhbmV3aW4ubmV0L2VuY3J5cHQvUEdkZWNvZGUuanM6XG5cbi8qIE9wZW5QR1AgZW5jcnlwdGlvbiB1c2luZyBSU0EvQUVTXG4gKiBDb3B5cmlnaHQgMjAwNS0yMDA2IEhlcmJlcnQgSGFuZXdpbmtlbCwgd3d3LmhhbmVXSU4uZGVcbiAqIHZlcnNpb24gMi4wLCBjaGVjayB3d3cuaGFuZVdJTi5kZSBmb3IgdGhlIGxhdGVzdCB2ZXJzaW9uXG5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMsIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBvciBzZWxsIHRoaXMgc29mdHdhcmUsIHdpdGggb3JcbiAqIHdpdGhvdXQgZmVlLCBmb3IgYW55IHB1cnBvc2UgYW5kIGJ5IGFueSBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiwgaXMgaGVyZWJ5XG4gKiBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXJcbiAqIGluIGFsbCBjb3BpZXMuIERpc3RyaWJ1dGlvbiBhcyBhIHBhcnQgb2YgYW4gYXBwbGljYXRpb24gb3IgYmluYXJ5IG11c3RcbiAqIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyXG4gKiBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgYXBwbGljYXRpb24gb3IgZGlzdHJpYnV0aW9uLlxuICovXG5cbi8qKlxuICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXJcbiAqIEBtb2R1bGUgY3J5cHRvL2NmYlxuICovXG5cbn0se1wiLi9jaXBoZXJcIjozMzJ9XSwzMjg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4cG9ydHMgPSBfZGVyZXFfKCdhc21jcnlwdG8uanMvc3JjL2Flcy9leHBvcnRzJyk7XG5cbnZhciBfZWNiID0gX2RlcmVxXygnYXNtY3J5cHRvLmpzL3NyYy9hZXMvZWNiL2VjYicpO1xuXG4vLyBUT0RPIHVzZSB3ZWJDcnlwdG8gb3Igbm9kZUNyeXB0byB3aGVuIHBvc3NpYmxlLlxuLyoqXG4gKiBAcmVxdWlyZXMgYXNtY3J5cHRvLmpzXG4gKi9cblxuZnVuY3Rpb24gYWVzKGxlbmd0aCkge1xuICB2YXIgQyA9IGZ1bmN0aW9uIEMoa2V5KSB7XG4gICAgdmFyIGFlc19lY2IgPSBuZXcgX2VjYi5BRVNfRUNCKGtleSwgX2V4cG9ydHMuX0FFU19oZWFwX2luc3RhbmNlLCBfZXhwb3J0cy5fQUVTX2FzbV9pbnN0YW5jZSk7XG5cbiAgICB0aGlzLmVuY3J5cHQgPSBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiBhZXNfZWNiLmVuY3J5cHQoYmxvY2spLnJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhpcy5kZWNyeXB0ID0gZnVuY3Rpb24gKGJsb2NrKSB7XG4gICAgICByZXR1cm4gYWVzX2VjYi5kZWNyeXB0KGJsb2NrKS5yZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICBDLmJsb2NrU2l6ZSA9IEMucHJvdG90eXBlLmJsb2NrU2l6ZSA9IDE2O1xuICBDLmtleVNpemUgPSBDLnByb3RvdHlwZS5rZXlTaXplID0gbGVuZ3RoIC8gODtcblxuICByZXR1cm4gQztcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gYWVzO1xuXG59LHtcImFzbWNyeXB0by5qcy9zcmMvYWVzL2VjYi9lY2JcIjoxMCxcImFzbWNyeXB0by5qcy9zcmMvYWVzL2V4cG9ydHNcIjoxMX1dLDMyOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIE1vZGlmaWVkIGJ5IFJlY3VyaXR5IExhYnMgR21iSFxuICpcbiAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBua2xlaW4gc29mdHdhcmUgKG5rbGVpbi5jb20pXG4gKi9cblxuLypcbiAqIEphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gQnJ1Y2UgU2NobmVpZXIncyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uXG4gKlxuICpcbiAqIFRoZSBjb25zdHJ1Y3RvciBkb2Vzbid0IGRvIG11Y2ggb2YgYW55dGhpbmcuICBJdCdzIGp1c3QgaGVyZVxuICogc28gd2UgY2FuIHN0YXJ0IGRlZmluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgYW5kIHN1Y2guXG4gKi9cbmZ1bmN0aW9uIEJsb3dmaXNoKCkge31cblxuLypcbiAqIERlY2xhcmUgdGhlIGJsb2NrIHNpemUgc28gdGhhdCBwcm90b2NvbHMga25vdyB3aGF0IHNpemVcbiAqIEluaXRpYWxpemF0aW9uIFZlY3RvciAoSVYpIHRoZXkgd2lsbCBuZWVkLlxuICovXG5CbG93ZmlzaC5wcm90b3R5cGUuQkxPQ0tTSVpFID0gODtcblxuLypcbiAqIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBTQk9YRVMuXG4gKi9cbkJsb3dmaXNoLnByb3RvdHlwZS5TQk9YRVMgPSBbWzB4ZDEzMTBiYTYsIDB4OThkZmI1YWMsIDB4MmZmZDcyZGIsIDB4ZDAxYWRmYjcsIDB4YjhlMWFmZWQsIDB4NmEyNjdlOTYsIDB4YmE3YzkwNDUsIDB4ZjEyYzdmOTksIDB4MjRhMTk5NDcsIDB4YjM5MTZjZjcsIDB4MDgwMWYyZTIsIDB4ODU4ZWZjMTYsIDB4NjM2OTIwZDgsIDB4NzE1NzRlNjksIDB4YTQ1OGZlYTMsIDB4ZjQ5MzNkN2UsIDB4MGQ5NTc0OGYsIDB4NzI4ZWI2NTgsIDB4NzE4YmNkNTgsIDB4ODIxNTRhZWUsIDB4N2I1NGE0MWQsIDB4YzI1YTU5YjUsIDB4OWMzMGQ1MzksIDB4MmFmMjYwMTMsIDB4YzVkMWIwMjMsIDB4Mjg2MDg1ZjAsIDB4Y2E0MTc5MTgsIDB4YjhkYjM4ZWYsIDB4OGU3OWRjYjAsIDB4NjAzYTE4MGUsIDB4NmM5ZTBlOGIsIDB4YjAxZThhM2UsIDB4ZDcxNTc3YzEsIDB4YmQzMTRiMjcsIDB4NzhhZjJmZGEsIDB4NTU2MDVjNjAsIDB4ZTY1NTI1ZjMsIDB4YWE1NWFiOTQsIDB4NTc0ODk4NjIsIDB4NjNlODE0NDAsIDB4NTVjYTM5NmEsIDB4MmFhYjEwYjYsIDB4YjRjYzVjMzQsIDB4MTE0MWU4Y2UsIDB4YTE1NDg2YWYsIDB4N2M3MmU5OTMsIDB4YjNlZTE0MTEsIDB4NjM2ZmJjMmEsIDB4MmJhOWM1NWQsIDB4NzQxODMxZjYsIDB4Y2U1YzNlMTYsIDB4OWI4NzkzMWUsIDB4YWZkNmJhMzMsIDB4NmMyNGNmNWMsIDB4N2EzMjUzODEsIDB4Mjg5NTg2NzcsIDB4M2I4ZjQ4OTgsIDB4NmI0YmI5YWYsIDB4YzRiZmU4MWIsIDB4NjYyODIxOTMsIDB4NjFkODA5Y2MsIDB4ZmIyMWE5OTEsIDB4NDg3Y2FjNjAsIDB4NWRlYzgwMzIsIDB4ZWY4NDVkNWQsIDB4ZTk4NTc1YjEsIDB4ZGMyNjIzMDIsIDB4ZWI2NTFiODgsIDB4MjM4OTNlODEsIDB4ZDM5NmFjYzUsIDB4MGY2ZDZmZjMsIDB4ODNmNDQyMzksIDB4MmUwYjQ0ODIsIDB4YTQ4NDIwMDQsIDB4NjljOGYwNGEsIDB4OWUxZjliNWUsIDB4MjFjNjY4NDIsIDB4ZjZlOTZjOWEsIDB4NjcwYzljNjEsIDB4YWJkMzg4ZjAsIDB4NmE1MWEwZDIsIDB4ZDg1NDJmNjgsIDB4OTYwZmE3MjgsIDB4YWI1MTMzYTMsIDB4NmVlZjBiNmMsIDB4MTM3YTNiZTQsIDB4YmEzYmYwNTAsIDB4N2VmYjJhOTgsIDB4YTFmMTY1MWQsIDB4MzlhZjAxNzYsIDB4NjZjYTU5M2UsIDB4ODI0MzBlODgsIDB4OGNlZTg2MTksIDB4NDU2ZjlmYjQsIDB4N2Q4NGE1YzMsIDB4M2I4YjVlYmUsIDB4ZTA2Zjc1ZDgsIDB4ODVjMTIwNzMsIDB4NDAxYTQ0OWYsIDB4NTZjMTZhYTYsIDB4NGVkM2FhNjIsIDB4MzYzZjc3MDYsIDB4MWJmZWRmNzIsIDB4NDI5YjAyM2QsIDB4MzdkMGQ3MjQsIDB4ZDAwYTEyNDgsIDB4ZGIwZmVhZDMsIDB4NDlmMWMwOWIsIDB4MDc1MzcyYzksIDB4ODA5OTFiN2IsIDB4MjVkNDc5ZDgsIDB4ZjZlOGRlZjcsIDB4ZTNmZTUwMWEsIDB4YjY3OTRjM2IsIDB4OTc2Y2UwYmQsIDB4MDRjMDA2YmEsIDB4YzFhOTRmYjYsIDB4NDA5ZjYwYzQsIDB4NWU1YzllYzIsIDB4MTk2YTI0NjMsIDB4NjhmYjZmYWYsIDB4M2U2YzUzYjUsIDB4MTMzOWIyZWIsIDB4M2I1MmVjNmYsIDB4NmRmYzUxMWYsIDB4OWIzMDk1MmMsIDB4Y2M4MTQ1NDQsIDB4YWY1ZWJkMDksIDB4YmVlM2QwMDQsIDB4ZGUzMzRhZmQsIDB4NjYwZjI4MDcsIDB4MTkyZTRiYjMsIDB4YzBjYmE4NTcsIDB4NDVjODc0MGYsIDB4ZDIwYjVmMzksIDB4YjlkM2ZiZGIsIDB4NTU3OWMwYmQsIDB4MWE2MDMyMGEsIDB4ZDZhMTAwYzYsIDB4NDAyYzcyNzksIDB4Njc5ZjI1ZmUsIDB4ZmIxZmEzY2MsIDB4OGVhNWU5ZjgsIDB4ZGIzMjIyZjgsIDB4M2M3NTE2ZGYsIDB4ZmQ2MTZiMTUsIDB4MmY1MDFlYzgsIDB4YWQwNTUyYWIsIDB4MzIzZGI1ZmEsIDB4ZmQyMzg3NjAsIDB4NTMzMTdiNDgsIDB4M2UwMGRmODIsIDB4OWU1YzU3YmIsIDB4Y2E2ZjhjYTAsIDB4MWE4NzU2MmUsIDB4ZGYxNzY5ZGIsIDB4ZDU0MmE4ZjYsIDB4Mjg3ZWZmYzMsIDB4YWM2NzMyYzYsIDB4OGM0ZjU1NzMsIDB4Njk1YjI3YjAsIDB4YmJjYTU4YzgsIDB4ZTFmZmEzNWQsIDB4YjhmMDExYTAsIDB4MTBmYTNkOTgsIDB4ZmQyMTgzYjgsIDB4NGFmY2I1NmMsIDB4MmRkMWQzNWIsIDB4OWE1M2U0NzksIDB4YjZmODQ1NjUsIDB4ZDI4ZTQ5YmMsIDB4NGJmYjk3OTAsIDB4ZTFkZGYyZGEsIDB4YTRjYjdlMzMsIDB4NjJmYjEzNDEsIDB4Y2VlNGM2ZTgsIDB4ZWYyMGNhZGEsIDB4MzY3NzRjMDEsIDB4ZDA3ZTllZmUsIDB4MmJmMTFmYjQsIDB4OTVkYmRhNGQsIDB4YWU5MDkxOTgsIDB4ZWFhZDhlNzEsIDB4NmI5M2Q1YTAsIDB4ZDA4ZWQxZDAsIDB4YWZjNzI1ZTAsIDB4OGUzYzViMmYsIDB4OGU3NTk0YjcsIDB4OGZmNmUyZmIsIDB4ZjIxMjJiNjQsIDB4ODg4OGI4MTIsIDB4OTAwZGYwMWMsIDB4NGZhZDVlYTAsIDB4Njg4ZmMzMWMsIDB4ZDFjZmYxOTEsIDB4YjNhOGMxYWQsIDB4MmYyZjIyMTgsIDB4YmUwZTE3NzcsIDB4ZWE3NTJkZmUsIDB4OGIwMjFmYTEsIDB4ZTVhMGNjMGYsIDB4YjU2Zjc0ZTgsIDB4MThhY2YzZDYsIDB4Y2U4OWUyOTksIDB4YjRhODRmZTAsIDB4ZmQxM2UwYjcsIDB4N2NjNDNiODEsIDB4ZDJhZGE4ZDksIDB4MTY1ZmEyNjYsIDB4ODA5NTc3MDUsIDB4OTNjYzczMTQsIDB4MjExYTE0NzcsIDB4ZTZhZDIwNjUsIDB4NzdiNWZhODYsIDB4Yzc1NDQyZjUsIDB4ZmI5ZDM1Y2YsIDB4ZWJjZGFmMGMsIDB4N2IzZTg5YTAsIDB4ZDY0MTFiZDMsIDB4YWUxZTdlNDksIDB4MDAyNTBlMmQsIDB4MjA3MWIzNWUsIDB4MjI2ODAwYmIsIDB4NTdiOGUwYWYsIDB4MjQ2NDM2OWIsIDB4ZjAwOWI5MWUsIDB4NTU2MzkxMWQsIDB4NTlkZmE2YWEsIDB4NzhjMTQzODksIDB4ZDk1YTUzN2YsIDB4MjA3ZDViYTIsIDB4MDJlNWI5YzUsIDB4ODMyNjAzNzYsIDB4NjI5NWNmYTksIDB4MTFjODE5NjgsIDB4NGU3MzRhNDEsIDB4YjM0NzJkY2EsIDB4N2IxNGE5NGEsIDB4MWI1MTAwNTIsIDB4OWE1MzI5MTUsIDB4ZDYwZjU3M2YsIDB4YmM5YmM2ZTQsIDB4MmI2MGE0NzYsIDB4ODFlNjc0MDAsIDB4MDhiYTZmYjUsIDB4NTcxYmU5MWYsIDB4ZjI5NmVjNmIsIDB4MmEwZGQ5MTUsIDB4YjY2MzY1MjEsIDB4ZTdiOWY5YjYsIDB4ZmYzNDA1MmUsIDB4YzU4NTU2NjQsIDB4NTNiMDJkNWQsIDB4YTk5ZjhmYTEsIDB4MDhiYTQ3OTksIDB4NmU4NTA3NmFdLCBbMHg0YjdhNzBlOSwgMHhiNWIzMjk0NCwgMHhkYjc1MDkyZSwgMHhjNDE5MjYyMywgMHhhZDZlYTZiMCwgMHg0OWE3ZGY3ZCwgMHg5Y2VlNjBiOCwgMHg4ZmVkYjI2NiwgMHhlY2FhOGM3MSwgMHg2OTlhMTdmZiwgMHg1NjY0NTI2YywgMHhjMmIxOWVlMSwgMHgxOTM2MDJhNSwgMHg3NTA5NGMyOSwgMHhhMDU5MTM0MCwgMHhlNDE4M2EzZSwgMHgzZjU0OTg5YSwgMHg1YjQyOWQ2NSwgMHg2YjhmZTRkNiwgMHg5OWY3M2ZkNiwgMHhhMWQyOWMwNywgMHhlZmU4MzBmNSwgMHg0ZDJkMzhlNiwgMHhmMDI1NWRjMSwgMHg0Y2RkMjA4NiwgMHg4NDcwZWIyNiwgMHg2MzgyZTljNiwgMHgwMjFlY2M1ZSwgMHgwOTY4NmIzZiwgMHgzZWJhZWZjOSwgMHgzYzk3MTgxNCwgMHg2YjZhNzBhMSwgMHg2ODdmMzU4NCwgMHg1MmEwZTI4NiwgMHhiNzljNTMwNSwgMHhhYTUwMDczNywgMHgzZTA3ODQxYywgMHg3ZmRlYWU1YywgMHg4ZTdkNDRlYywgMHg1NzE2ZjJiOCwgMHhiMDNhZGEzNywgMHhmMDUwMGMwZCwgMHhmMDFjMWYwNCwgMHgwMjAwYjNmZiwgMHhhZTBjZjUxYSwgMHgzY2I1NzRiMiwgMHgyNTgzN2E1OCwgMHhkYzA5MjFiZCwgMHhkMTkxMTNmOSwgMHg3Y2E5MmZmNiwgMHg5NDMyNDc3MywgMHgyMmY1NDcwMSwgMHgzYWU1ZTU4MSwgMHgzN2MyZGFkYywgMHhjOGI1NzYzNCwgMHg5YWYzZGRhNywgMHhhOTQ0NjE0NiwgMHgwZmQwMDMwZSwgMHhlY2M4YzczZSwgMHhhNDc1MWU0MSwgMHhlMjM4Y2Q5OSwgMHgzYmVhMGUyZiwgMHgzMjgwYmJhMSwgMHgxODNlYjMzMSwgMHg0ZTU0OGIzOCwgMHg0ZjZkYjkwOCwgMHg2ZjQyMGQwMywgMHhmNjBhMDRiZiwgMHgyY2I4MTI5MCwgMHgyNDk3N2M3OSwgMHg1Njc5YjA3MiwgMHhiY2FmODlhZiwgMHhkZTlhNzcxZiwgMHhkOTkzMDgxMCwgMHhiMzhiYWUxMiwgMHhkY2NmM2YyZSwgMHg1NTEyNzIxZiwgMHgyZTZiNzEyNCwgMHg1MDFhZGRlNiwgMHg5Zjg0Y2Q4NywgMHg3YTU4NDcxOCwgMHg3NDA4ZGExNywgMHhiYzlmOWFiYywgMHhlOTRiN2Q4YywgMHhlYzdhZWMzYSwgMHhkYjg1MWRmYSwgMHg2MzA5NDM2NiwgMHhjNDY0YzNkMiwgMHhlZjFjMTg0NywgMHgzMjE1ZDkwOCwgMHhkZDQzM2IzNywgMHgyNGMyYmExNiwgMHgxMmExNGQ0MywgMHgyYTY1YzQ1MSwgMHg1MDk0MDAwMiwgMHgxMzNhZTRkZCwgMHg3MWRmZjg5ZSwgMHgxMDMxNGU1NSwgMHg4MWFjNzdkNiwgMHg1ZjExMTk5YiwgMHgwNDM1NTZmMSwgMHhkN2EzYzc2YiwgMHgzYzExMTgzYiwgMHg1OTI0YTUwOSwgMHhmMjhmZTZlZCwgMHg5N2YxZmJmYSwgMHg5ZWJhYmYyYywgMHgxZTE1M2M2ZSwgMHg4NmUzNDU3MCwgMHhlYWU5NmZiMSwgMHg4NjBlNWUwYSwgMHg1YTNlMmFiMywgMHg3NzFmZTcxYywgMHg0ZTNkMDZmYSwgMHgyOTY1ZGNiOSwgMHg5OWU3MWQwZiwgMHg4MDNlODlkNiwgMHg1MjY2YzgyNSwgMHgyZTRjYzk3OCwgMHg5YzEwYjM2YSwgMHhjNjE1MGViYSwgMHg5NGUyZWE3OCwgMHhhNWZjM2M1MywgMHgxZTBhMmRmNCwgMHhmMmY3NGVhNywgMHgzNjFkMmIzZCwgMHgxOTM5MjYwZiwgMHgxOWMyNzk2MCwgMHg1MjIzYTcwOCwgMHhmNzEzMTJiNiwgMHhlYmFkZmU2ZSwgMHhlYWMzMWY2NiwgMHhlM2JjNDU5NSwgMHhhNjdiYzg4MywgMHhiMTdmMzdkMSwgMHgwMThjZmYyOCwgMHhjMzMyZGRlZiwgMHhiZTZjNWFhNSwgMHg2NTU4MjE4NSwgMHg2OGFiOTgwMiwgMHhlZWNlYTUwZiwgMHhkYjJmOTUzYiwgMHgyYWVmN2RhZCwgMHg1YjZlMmY4NCwgMHgxNTIxYjYyOCwgMHgyOTA3NjE3MCwgMHhlY2RkNDc3NSwgMHg2MTlmMTUxMCwgMHgxM2NjYTgzMCwgMHhlYjYxYmQ5NiwgMHgwMzM0ZmUxZSwgMHhhYTAzNjNjZiwgMHhiNTczNWM5MCwgMHg0YzcwYTIzOSwgMHhkNTllOWUwYiwgMHhjYmFhZGUxNCwgMHhlZWNjODZiYywgMHg2MDYyMmNhNywgMHg5Y2FiNWNhYiwgMHhiMmYzODQ2ZSwgMHg2NDhiMWVhZiwgMHgxOWJkZjBjYSwgMHhhMDIzNjliOSwgMHg2NTVhYmI1MCwgMHg0MDY4NWEzMiwgMHgzYzJhYjRiMywgMHgzMTllZTlkNSwgMHhjMDIxYjhmNywgMHg5YjU0MGIxOSwgMHg4NzVmYTA5OSwgMHg5NWY3OTk3ZSwgMHg2MjNkN2RhOCwgMHhmODM3ODg5YSwgMHg5N2UzMmQ3NywgMHgxMWVkOTM1ZiwgMHgxNjY4MTI4MSwgMHgwZTM1ODgyOSwgMHhjN2U2MWZkNiwgMHg5NmRlZGZhMSwgMHg3ODU4YmE5OSwgMHg1N2Y1ODRhNSwgMHgxYjIyNzI2MywgMHg5YjgzYzNmZiwgMHgxYWMyNDY5NiwgMHhjZGIzMGFlYiwgMHg1MzJlMzA1NCwgMHg4ZmQ5NDhlNCwgMHg2ZGJjMzEyOCwgMHg1OGViZjJlZiwgMHgzNGM2ZmZlYSwgMHhmZTI4ZWQ2MSwgMHhlZTdjM2M3MywgMHg1ZDRhMTRkOSwgMHhlODY0YjdlMywgMHg0MjEwNWQxNCwgMHgyMDNlMTNlMCwgMHg0NWVlZTJiNiwgMHhhM2FhYWJlYSwgMHhkYjZjNGYxNSwgMHhmYWNiNGZkMCwgMHhjNzQyZjQ0MiwgMHhlZjZhYmJiNSwgMHg2NTRmM2IxZCwgMHg0MWNkMjEwNSwgMHhkODFlNzk5ZSwgMHg4Njg1NGRjNywgMHhlNDRiNDc2YSwgMHgzZDgxNjI1MCwgMHhjZjYyYTFmMiwgMHg1YjhkMjY0NiwgMHhmYzg4ODNhMCwgMHhjMWM3YjZhMywgMHg3ZjE1MjRjMywgMHg2OWNiNzQ5MiwgMHg0Nzg0OGEwYiwgMHg1NjkyYjI4NSwgMHgwOTViYmYwMCwgMHhhZDE5NDg5ZCwgMHgxNDYyYjE3NCwgMHgyMzgyMGUwMCwgMHg1ODQyOGQyYSwgMHgwYzU1ZjVlYSwgMHgxZGFkZjQzZSwgMHgyMzNmNzA2MSwgMHgzMzcyZjA5MiwgMHg4ZDkzN2U0MSwgMHhkNjVmZWNmMSwgMHg2YzIyM2JkYiwgMHg3Y2RlMzc1OSwgMHhjYmVlNzQ2MCwgMHg0MDg1ZjJhNywgMHhjZTc3MzI2ZSwgMHhhNjA3ODA4NCwgMHgxOWY4NTA5ZSwgMHhlOGVmZDg1NSwgMHg2MWQ5OTczNSwgMHhhOTY5YTdhYSwgMHhjNTBjMDZjMiwgMHg1YTA0YWJmYywgMHg4MDBiY2FkYywgMHg5ZTQ0N2EyZSwgMHhjMzQ1MzQ4NCwgMHhmZGQ1NjcwNSwgMHgwZTFlOWVjOSwgMHhkYjczZGJkMywgMHgxMDU1ODhjZCwgMHg2NzVmZGE3OSwgMHhlMzY3NDM0MCwgMHhjNWM0MzQ2NSwgMHg3MTNlMzhkOCwgMHgzZDI4Zjg5ZSwgMHhmMTZkZmYyMCwgMHgxNTNlMjFlNywgMHg4ZmIwM2Q0YSwgMHhlNmUzOWYyYiwgMHhkYjgzYWRmN10sIFsweGU5M2Q1YTY4LCAweDk0ODE0MGY3LCAweGY2NGMyNjFjLCAweDk0NjkyOTM0LCAweDQxMTUyMGY3LCAweDc2MDJkNGY3LCAweGJjZjQ2YjJlLCAweGQ0YTIwMDY4LCAweGQ0MDgyNDcxLCAweDMzMjBmNDZhLCAweDQzYjdkNGI3LCAweDUwMDA2MWFmLCAweDFlMzlmNjJlLCAweDk3MjQ0NTQ2LCAweDE0MjE0Zjc0LCAweGJmOGI4ODQwLCAweDRkOTVmYzFkLCAweDk2YjU5MWFmLCAweDcwZjRkZGQzLCAweDY2YTAyZjQ1LCAweGJmYmMwOWVjLCAweDAzYmQ5Nzg1LCAweDdmYWM2ZGQwLCAweDMxY2I4NTA0LCAweDk2ZWIyN2IzLCAweDU1ZmQzOTQxLCAweGRhMjU0N2U2LCAweGFiY2EwYTlhLCAweDI4NTA3ODI1LCAweDUzMDQyOWY0LCAweDBhMmM4NmRhLCAweGU5YjY2ZGZiLCAweDY4ZGMxNDYyLCAweGQ3NDg2OTAwLCAweDY4MGVjMGE0LCAweDI3YTE4ZGVlLCAweDRmM2ZmZWEyLCAweGU4ODdhZDhjLCAweGI1OGNlMDA2LCAweDdhZjRkNmI2LCAweGFhY2UxZTdjLCAweGQzMzc1ZmVjLCAweGNlNzhhMzk5LCAweDQwNmIyYTQyLCAweDIwZmU5ZTM1LCAweGQ5ZjM4NWI5LCAweGVlMzlkN2FiLCAweDNiMTI0ZThiLCAweDFkYzlmYWY3LCAweDRiNmQxODU2LCAweDI2YTM2NjMxLCAweGVhZTM5N2IyLCAweDNhNmVmYTc0LCAweGRkNWI0MzMyLCAweDY4NDFlN2Y3LCAweGNhNzgyMGZiLCAweGZiMGFmNTRlLCAweGQ4ZmViMzk3LCAweDQ1NDA1NmFjLCAweGJhNDg5NTI3LCAweDU1NTMzYTNhLCAweDIwODM4ZDg3LCAweGZlNmJhOWI3LCAweGQwOTY5NTRiLCAweDU1YTg2N2JjLCAweGExMTU5YTU4LCAweGNjYTkyOTYzLCAweDk5ZTFkYjMzLCAweGE2MmE0YTU2LCAweDNmMzEyNWY5LCAweDVlZjQ3ZTFjLCAweDkwMjkzMTdjLCAweGZkZjhlODAyLCAweDA0MjcyZjcwLCAweDgwYmIxNTVjLCAweDA1MjgyY2UzLCAweDk1YzExNTQ4LCAweGU0YzY2ZDIyLCAweDQ4YzExMzNmLCAweGM3MGY4NmRjLCAweDA3ZjljOWVlLCAweDQxMDQxZjBmLCAweDQwNDc3OWE0LCAweDVkODg2ZTE3LCAweDMyNWY1MWViLCAweGQ1OWJjMGQxLCAweGYyYmNjMThmLCAweDQxMTEzNTY0LCAweDI1N2I3ODM0LCAweDYwMmE5YzYwLCAweGRmZjhlOGEzLCAweDFmNjM2YzFiLCAweDBlMTJiNGMyLCAweDAyZTEzMjllLCAweGFmNjY0ZmQxLCAweGNhZDE4MTE1LCAweDZiMjM5NWUwLCAweDMzM2U5MmUxLCAweDNiMjQwYjYyLCAweGVlYmViOTIyLCAweDg1YjJhMjBlLCAweGU2YmEwZDk5LCAweGRlNzIwYzhjLCAweDJkYTJmNzI4LCAweGQwMTI3ODQ1LCAweDk1Yjc5NGZkLCAweDY0N2QwODYyLCAweGU3Y2NmNWYwLCAweDU0NDlhMzZmLCAweDg3N2Q0OGZhLCAweGMzOWRmZDI3LCAweGYzM2U4ZDFlLCAweDBhNDc2MzQxLCAweDk5MmVmZjc0LCAweDNhNmY2ZWFiLCAweGY0ZjhmZDM3LCAweGE4MTJkYzYwLCAweGExZWJkZGY4LCAweDk5MWJlMTRjLCAweGRiNmU2YjBkLCAweGM2N2I1NTEwLCAweDZkNjcyYzM3LCAweDI3NjVkNDNiLCAweGRjZDBlODA0LCAweGYxMjkwZGM3LCAweGNjMDBmZmEzLCAweGI1MzkwZjkyLCAweDY5MGZlZDBiLCAweDY2N2I5ZmZiLCAweGNlZGI3ZDljLCAweGEwOTFjZjBiLCAweGQ5MTU1ZWEzLCAweGJiMTMyZjg4LCAweDUxNWJhZDI0LCAweDdiOTQ3OWJmLCAweDc2M2JkNmViLCAweDM3MzkyZWIzLCAweGNjMTE1OTc5LCAweDgwMjZlMjk3LCAweGY0MmUzMTJkLCAweDY4NDJhZGE3LCAweGM2NmEyYjNiLCAweDEyNzU0Y2NjLCAweDc4MmVmMTFjLCAweDZhMTI0MjM3LCAweGI3OTI1MWU3LCAweDA2YTFiYmU2LCAweDRiZmI2MzUwLCAweDFhNmIxMDE4LCAweDExY2FlZGZhLCAweDNkMjViZGQ4LCAweGUyZTFjM2M5LCAweDQ0NDIxNjU5LCAweDBhMTIxMzg2LCAweGQ5MGNlYzZlLCAweGQ1YWJlYTJhLCAweDY0YWY2NzRlLCAweGRhODZhODVmLCAweGJlYmZlOTg4LCAweDY0ZTRjM2ZlLCAweDlkYmM4MDU3LCAweGYwZjdjMDg2LCAweDYwNzg3YmY4LCAweDYwMDM2MDRkLCAweGQxZmQ4MzQ2LCAweGY2MzgxZmIwLCAweDc3NDVhZTA0LCAweGQ3MzZmY2NjLCAweDgzNDI2YjMzLCAweGYwMWVhYjcxLCAweGIwODA0MTg3LCAweDNjMDA1ZTVmLCAweDc3YTA1N2JlLCAweGJkZThhZTI0LCAweDU1NDY0Mjk5LCAweGJmNTgyZTYxLCAweDRlNThmNDhmLCAweGYyZGRmZGEyLCAweGY0NzRlZjM4LCAweDg3ODliZGMyLCAweDUzNjZmOWMzLCAweGM4YjM4ZTc0LCAweGI0NzVmMjU1LCAweDQ2ZmNkOWI5LCAweDdhZWIyNjYxLCAweDhiMWRkZjg0LCAweDg0NmEwZTc5LCAweDkxNWY5NWUyLCAweDQ2NmU1OThlLCAweDIwYjQ1NzcwLCAweDhjZDU1NTkxLCAweGM5MDJkZTRjLCAweGI5MGJhY2UxLCAweGJiODIwNWQwLCAweDExYTg2MjQ4LCAweDc1NzRhOTllLCAweGI3N2YxOWI2LCAweGUwYTlkYzA5LCAweDY2MmQwOWExLCAweGM0MzI0NjMzLCAweGU4NWExZjAyLCAweDA5ZjBiZThjLCAweDRhOTlhMDI1LCAweDFkNmVmZTEwLCAweDFhYjkzZDFkLCAweDBiYTVhNGRmLCAweGExODZmMjBmLCAweDI4NjhmMTY5LCAweGRjYjdkYTgzLCAweDU3MzkwNmZlLCAweGExZTJjZTliLCAweDRmY2Q3ZjUyLCAweDUwMTE1ZTAxLCAweGE3MDY4M2ZhLCAweGEwMDJiNWM0LCAweDBkZTZkMDI3LCAweDlhZjg4YzI3LCAweDc3M2Y4NjQxLCAweGMzNjA0YzA2LCAweDYxYTgwNmI1LCAweGYwMTc3YTI4LCAweGMwZjU4NmUwLCAweDAwNjA1OGFhLCAweDMwZGM3ZDYyLCAweDExZTY5ZWQ3LCAweDIzMzhlYTYzLCAweDUzYzJkZDk0LCAweGMyYzIxNjM0LCAweGJiY2JlZTU2LCAweDkwYmNiNmRlLCAweGViZmM3ZGExLCAweGNlNTkxZDc2LCAweDZmMDVlNDA5LCAweDRiN2MwMTg4LCAweDM5NzIwYTNkLCAweDdjOTI3YzI0LCAweDg2ZTM3MjVmLCAweDcyNGQ5ZGI5LCAweDFhYzE1YmI0LCAweGQzOWViOGZjLCAweGVkNTQ1NTc4LCAweDA4ZmNhNWI1LCAweGQ4M2Q3Y2QzLCAweDRkYWQwZmM0LCAweDFlNTBlZjVlLCAweGIxNjFlNmY4LCAweGEyODUxNGQ5LCAweDZjNTExMzNjLCAweDZmZDVjN2U3LCAweDU2ZTE0ZWM0LCAweDM2MmFiZmNlLCAweGRkYzZjODM3LCAweGQ3OWEzMjM0LCAweDkyNjM4MjEyLCAweDY3MGVmYThlLCAweDQwNjAwMGUwXSwgWzB4M2EzOWNlMzcsIDB4ZDNmYWY1Y2YsIDB4YWJjMjc3MzcsIDB4NWFjNTJkMWIsIDB4NWNiMDY3OWUsIDB4NGZhMzM3NDIsIDB4ZDM4MjI3NDAsIDB4OTliYzliYmUsIDB4ZDUxMThlOWQsIDB4YmYwZjczMTUsIDB4ZDYyZDFjN2UsIDB4YzcwMGM0N2IsIDB4Yjc4YzFiNmIsIDB4MjFhMTkwNDUsIDB4YjI2ZWIxYmUsIDB4NmEzNjZlYjQsIDB4NTc0OGFiMmYsIDB4YmM5NDZlNzksIDB4YzZhMzc2ZDIsIDB4NjU0OWMyYzgsIDB4NTMwZmY4ZWUsIDB4NDY4ZGRlN2QsIDB4ZDU3MzBhMWQsIDB4NGNkMDRkYzYsIDB4MjkzOWJiZGIsIDB4YTliYTQ2NTAsIDB4YWM5NTI2ZTgsIDB4YmU1ZWUzMDQsIDB4YTFmYWQ1ZjAsIDB4NmEyZDUxOWEsIDB4NjNlZjhjZTIsIDB4OWE4NmVlMjIsIDB4YzA4OWMyYjgsIDB4NDMyNDJlZjYsIDB4YTUxZTAzYWEsIDB4OWNmMmQwYTQsIDB4ODNjMDYxYmEsIDB4OWJlOTZhNGQsIDB4OGZlNTE1NTAsIDB4YmE2NDViZDYsIDB4MjgyNmEyZjksIDB4YTczYTNhZTEsIDB4NGJhOTk1ODYsIDB4ZWY1NTYyZTksIDB4YzcyZmVmZDMsIDB4Zjc1MmY3ZGEsIDB4M2YwNDZmNjksIDB4NzdmYTBhNTksIDB4ODBlNGE5MTUsIDB4ODdiMDg2MDEsIDB4OWIwOWU2YWQsIDB4M2IzZWU1OTMsIDB4ZTk5MGZkNWEsIDB4OWUzNGQ3OTcsIDB4MmNmMGI3ZDksIDB4MDIyYjhiNTEsIDB4OTZkNWFjM2EsIDB4MDE3ZGE2N2QsIDB4ZDFjZjNlZDYsIDB4N2M3ZDJkMjgsIDB4MWY5ZjI1Y2YsIDB4YWRmMmI4OWIsIDB4NWFkNmI0NzIsIDB4NWE4OGY1NGMsIDB4ZTAyOWFjNzEsIDB4ZTAxOWE1ZTYsIDB4NDdiMGFjZmQsIDB4ZWQ5M2ZhOWIsIDB4ZThkM2M0OGQsIDB4MjgzYjU3Y2MsIDB4ZjhkNTY2MjksIDB4NzkxMzJlMjgsIDB4Nzg1ZjAxOTEsIDB4ZWQ3NTYwNTUsIDB4Zjc5NjBlNDQsIDB4ZTNkMzVlOGMsIDB4MTUwNTZkZDQsIDB4ODhmNDZkYmEsIDB4MDNhMTYxMjUsIDB4MDU2NGYwYmQsIDB4YzNlYjllMTUsIDB4M2M5MDU3YTIsIDB4OTcyNzFhZWMsIDB4YTkzYTA3MmEsIDB4MWIzZjZkOWIsIDB4MWU2MzIxZjUsIDB4ZjU5YzY2ZmIsIDB4MjZkY2YzMTksIDB4NzUzM2Q5MjgsIDB4YjE1NWZkZjUsIDB4MDM1NjM0ODIsIDB4OGFiYTNjYmIsIDB4Mjg1MTc3MTEsIDB4YzIwYWQ5ZjgsIDB4YWJjYzUxNjcsIDB4Y2NhZDkyNWYsIDB4NGRlODE3NTEsIDB4MzgzMGRjOGUsIDB4Mzc5ZDU4NjIsIDB4OTMyMGY5OTEsIDB4ZWE3YTkwYzIsIDB4ZmIzZTdiY2UsIDB4NTEyMWNlNjQsIDB4Nzc0ZmJlMzIsIDB4YThiNmUzN2UsIDB4YzMyOTNkNDYsIDB4NDhkZTUzNjksIDB4NjQxM2U2ODAsIDB4YTJhZTA4MTAsIDB4ZGQ2ZGIyMjQsIDB4Njk4NTJkZmQsIDB4MDkwNzIxNjYsIDB4YjM5YTQ2MGEsIDB4NjQ0NWMwZGQsIDB4NTg2Y2RlY2YsIDB4MWMyMGM4YWUsIDB4NWJiZWY3ZGQsIDB4MWI1ODhkNDAsIDB4Y2NkMjAxN2YsIDB4NmJiNGUzYmIsIDB4ZGRhMjZhN2UsIDB4M2E1OWZmNDUsIDB4M2UzNTBhNDQsIDB4YmNiNGNkZDUsIDB4NzJlYWNlYTgsIDB4ZmE2NDg0YmIsIDB4OGQ2NjEyYWUsIDB4YmYzYzZmNDcsIDB4ZDI5YmU0NjMsIDB4NTQyZjVkOWUsIDB4YWVjMjc3MWIsIDB4ZjY0ZTYzNzAsIDB4NzQwZTBkOGQsIDB4ZTc1YjEzNTcsIDB4Zjg3MjE2NzEsIDB4YWY1MzdkNWQsIDB4NDA0MGNiMDgsIDB4NGViNGUyY2MsIDB4MzRkMjQ2NmEsIDB4MDExNWFmODQsIDB4ZTFiMDA0MjgsIDB4OTU5ODNhMWQsIDB4MDZiODlmYjQsIDB4Y2U2ZWEwNDgsIDB4NmYzZjNiODIsIDB4MzUyMGFiODIsIDB4MDExYTFkNGIsIDB4Mjc3MjI3ZjgsIDB4NjExNTYwYjEsIDB4ZTc5MzNmZGMsIDB4YmIzYTc5MmIsIDB4MzQ0NTI1YmQsIDB4YTA4ODM5ZTEsIDB4NTFjZTc5NGIsIDB4MmYzMmM5YjcsIDB4YTAxZmJhYzksIDB4ZTAxY2M4N2UsIDB4YmNjN2QxZjYsIDB4Y2YwMTExYzMsIDB4YTFlOGFhYzcsIDB4MWE5MDg3NDksIDB4ZDQ0ZmJkOWEsIDB4ZDBkYWRlY2IsIDB4ZDUwYWRhMzgsIDB4MDMzOWMzMmEsIDB4YzY5MTM2NjcsIDB4OGRmOTMxN2MsIDB4ZTBiMTJiNGYsIDB4Zjc5ZTU5YjcsIDB4NDNmNWJiM2EsIDB4ZjJkNTE5ZmYsIDB4MjdkOTQ1OWMsIDB4YmY5NzIyMmMsIDB4MTVlNmZjMmEsIDB4MGY5MWZjNzEsIDB4OWI5NDE1MjUsIDB4ZmFlNTkzNjEsIDB4Y2ViNjljZWIsIDB4YzJhODY0NTksIDB4MTJiYWE4ZDEsIDB4YjZjMTA3NWUsIDB4ZTMwNTZhMGMsIDB4MTBkMjUwNjUsIDB4Y2IwM2E0NDIsIDB4ZTBlYzZlMGUsIDB4MTY5OGRiM2IsIDB4NGM5OGEwYmUsIDB4MzI3OGU5NjQsIDB4OWYxZjk1MzIsIDB4ZTBkMzkyZGYsIDB4ZDNhMDM0MmIsIDB4ODk3MWYyMWUsIDB4MWIwYTc0NDEsIDB4NGJhMzM0OGMsIDB4YzViZTcxMjAsIDB4YzM3NjMyZDgsIDB4ZGYzNTlmOGQsIDB4OWI5OTJmMmUsIDB4ZTYwYjZmNDcsIDB4MGZlM2YxMWQsIDB4ZTU0Y2RhNTQsIDB4MWVkYWQ4OTEsIDB4Y2U2Mjc5Y2YsIDB4Y2QzZTdlNmYsIDB4MTYxOGIxNjYsIDB4ZmQyYzFkMDUsIDB4ODQ4ZmQyYzUsIDB4ZjZmYjIyOTksIDB4ZjUyM2YzNTcsIDB4YTYzMjc2MjMsIDB4OTNhODM1MzEsIDB4NTZjY2NkMDIsIDB4YWNmMDgxNjIsIDB4NWE3NWViYjUsIDB4NmUxNjM2OTcsIDB4ODhkMjczY2MsIDB4ZGU5NjYyOTIsIDB4ODFiOTQ5ZDAsIDB4NGM1MDkwMWIsIDB4NzFjNjU2MTQsIDB4ZTZjNmM3YmQsIDB4MzI3YTE0MGEsIDB4NDVlMWQwMDYsIDB4YzNmMjdiOWEsIDB4YzlhYTUzZmQsIDB4NjJhODBmMDAsIDB4YmIyNWJmZTIsIDB4MzViZGQyZjYsIDB4NzExMjY5MDUsIDB4YjIwNDAyMjIsIDB4YjZjYmNmN2MsIDB4Y2Q3NjljMmIsIDB4NTMxMTNlYzAsIDB4MTY0MGUzZDMsIDB4MzhhYmJkNjAsIDB4MjU0N2FkZjAsIDB4YmEzODIwOWMsIDB4Zjc0NmNlNzYsIDB4NzdhZmExYzUsIDB4MjA3NTYwNjAsIDB4ODVjYmZlNGUsIDB4OGFlODhkZDgsIDB4N2FhYWY5YjAsIDB4NGNmOWFhN2UsIDB4MTk0OGMyNWMsIDB4MDJmYjhhOGMsIDB4MDFjMzZhZTQsIDB4ZDZlYmUxZjksIDB4OTBkNGY4NjksIDB4YTY1Y2RlYTAsIDB4M2YwOTI1MmQsIDB4YzIwOGU2OWYsIDB4Yjc0ZTYxMzIsIDB4Y2U3N2UyNWIsIDB4NTc4ZmRmZTMsIDB4M2FjMzcyZTZdXTtcblxuLy8qXG4vLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBQQVJSQVlcbi8vKlxuQmxvd2Zpc2gucHJvdG90eXBlLlBBUlJBWSA9IFsweDI0M2Y2YTg4LCAweDg1YTMwOGQzLCAweDEzMTk4YTJlLCAweDAzNzA3MzQ0LCAweGE0MDkzODIyLCAweDI5OWYzMWQwLCAweDA4MmVmYTk4LCAweGVjNGU2Yzg5LCAweDQ1MjgyMWU2LCAweDM4ZDAxMzc3LCAweGJlNTQ2NmNmLCAweDM0ZTkwYzZjLCAweGMwYWMyOWI3LCAweGM5N2M1MGRkLCAweDNmODRkNWI1LCAweGI1NDcwOTE3LCAweDkyMTZkNWQ5LCAweDg5NzlmYjFiXTtcblxuLy8qXG4vLyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHJvdW5kcyB0aGUgY2lwaGVyIHdpbGwgZ29cbi8vKlxuQmxvd2Zpc2gucHJvdG90eXBlLk5OID0gMTY7XG5cbi8vKlxuLy8qIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIGdldCByaWQgb2YgcHJvYmxlbXNcbi8vKiB3aXRoIHRoZSBoaWdoLWJpdCBnZXR0aW5nIHNldC4gIElmIHdlIGRvbid0IGRvXG4vLyogdGhpcywgdGhlbiBzb21ldGltZXMgKCBhYSAmIDB4MDBGRkZGRkZGRiApIGlzIG5vdFxuLy8qIGVxdWFsIHRvICggYmIgJiAweDAwRkZGRkZGRkYgKSBldmVuIHdoZW4gdGhleVxuLy8qIGFncmVlIGJpdC1mb3ItYml0IGZvciB0aGUgZmlyc3QgMzIgYml0cy5cbi8vKlxuQmxvd2Zpc2gucHJvdG90eXBlLl9jbGVhbiA9IGZ1bmN0aW9uICh4eCkge1xuICBpZiAoeHggPCAwKSB7XG4gICAgdmFyIHl5ID0geHggJiAweDdGRkZGRkZGO1xuICAgIHh4ID0geXkgKyAweDgwMDAwMDAwO1xuICB9XG4gIHJldHVybiB4eDtcbn07XG5cbi8vKlxuLy8qIFRoaXMgaXMgdGhlIG1peGluZyBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIHNib3hlc1xuLy8qXG5CbG93ZmlzaC5wcm90b3R5cGUuX0YgPSBmdW5jdGlvbiAoeHgpIHtcbiAgdmFyIHl5ID0gdm9pZCAwO1xuXG4gIHZhciBkZCA9IHh4ICYgMHgwMEZGO1xuICB4eCA+Pj49IDg7XG4gIHZhciBjYyA9IHh4ICYgMHgwMEZGO1xuICB4eCA+Pj49IDg7XG4gIHZhciBiYiA9IHh4ICYgMHgwMEZGO1xuICB4eCA+Pj49IDg7XG4gIHZhciBhYSA9IHh4ICYgMHgwMEZGO1xuXG4gIHl5ID0gdGhpcy5zYm94ZXNbMF1bYWFdICsgdGhpcy5zYm94ZXNbMV1bYmJdO1xuICB5eSBePSB0aGlzLnNib3hlc1syXVtjY107XG4gIHl5ICs9IHRoaXMuc2JveGVzWzNdW2RkXTtcblxuICByZXR1cm4geXk7XG59O1xuXG4vLypcbi8vKiBUaGlzIG1ldGhvZCB0YWtlcyBhbiBhcnJheSB3aXRoIHR3byB2YWx1ZXMsIGxlZnQgYW5kIHJpZ2h0XG4vLyogYW5kIGRvZXMgTk4gcm91bmRzIG9mIEJsb3dmaXNoIG9uIHRoZW0uXG4vLypcbkJsb3dmaXNoLnByb3RvdHlwZS5fZW5jcnlwdF9ibG9jayA9IGZ1bmN0aW9uICh2YWxzKSB7XG4gIHZhciBkYXRhTCA9IHZhbHNbMF07XG4gIHZhciBkYXRhUiA9IHZhbHNbMV07XG5cbiAgdmFyIGlpID0gdm9pZCAwO1xuXG4gIGZvciAoaWkgPSAwOyBpaSA8IHRoaXMuTk47ICsraWkpIHtcbiAgICBkYXRhTCBePSB0aGlzLnBhcnJheVtpaV07XG4gICAgZGF0YVIgPSB0aGlzLl9GKGRhdGFMKSBeIGRhdGFSO1xuXG4gICAgdmFyIHRtcCA9IGRhdGFMO1xuICAgIGRhdGFMID0gZGF0YVI7XG4gICAgZGF0YVIgPSB0bXA7XG4gIH1cblxuICBkYXRhTCBePSB0aGlzLnBhcnJheVt0aGlzLk5OICsgMF07XG4gIGRhdGFSIF49IHRoaXMucGFycmF5W3RoaXMuTk4gKyAxXTtcblxuICB2YWxzWzBdID0gdGhpcy5fY2xlYW4oZGF0YVIpO1xuICB2YWxzWzFdID0gdGhpcy5fY2xlYW4oZGF0YUwpO1xufTtcblxuLy8qXG4vLyogVGhpcyBtZXRob2QgdGFrZXMgYSB2ZWN0b3Igb2YgbnVtYmVycyBhbmQgdHVybnMgdGhlbVxuLy8qIGludG8gbG9uZyB3b3JkcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHByb2Nlc3NlZCBieSB0aGVcbi8vKiByZWFsIGFsZ29yaXRobS5cbi8vKlxuLy8qIE1heWJlIEkgc2hvdWxkIG1ha2UgdGhlIHJlYWwgYWxnb3JpdGhtIGFib3ZlIHRha2UgYSB2ZWN0b3Jcbi8vKiBpbnN0ZWFkLiAgVGhhdCB3aWxsIGludm9sdmUgbW9yZSBsb29waW5nLCBidXQgaXQgd29uJ3QgcmVxdWlyZVxuLy8qIHRoZSBGKCkgbWV0aG9kIHRvIGRlY29uc3RydWN0IHRoZSB2ZWN0b3IuXG4vLypcbkJsb3dmaXNoLnByb3RvdHlwZS5lbmNyeXB0X2Jsb2NrID0gZnVuY3Rpb24gKHZlY3Rvcikge1xuICB2YXIgaWkgPSB2b2lkIDA7XG4gIHZhciB2YWxzID0gWzAsIDBdO1xuICB2YXIgb2ZmID0gdGhpcy5CTE9DS1NJWkUgLyAyO1xuICBmb3IgKGlpID0gMDsgaWkgPCB0aGlzLkJMT0NLU0laRSAvIDI7ICsraWkpIHtcbiAgICB2YWxzWzBdID0gdmFsc1swXSA8PCA4IHwgdmVjdG9yW2lpICsgMF0gJiAweDAwRkY7XG4gICAgdmFsc1sxXSA9IHZhbHNbMV0gPDwgOCB8IHZlY3RvcltpaSArIG9mZl0gJiAweDAwRkY7XG4gIH1cblxuICB0aGlzLl9lbmNyeXB0X2Jsb2NrKHZhbHMpO1xuXG4gIHZhciByZXQgPSBbXTtcbiAgZm9yIChpaSA9IDA7IGlpIDwgdGhpcy5CTE9DS1NJWkUgLyAyOyArK2lpKSB7XG4gICAgcmV0W2lpICsgMF0gPSB2YWxzWzBdID4+PiAyNCAtIDggKiBpaSAmIDB4MDBGRjtcbiAgICByZXRbaWkgKyBvZmZdID0gdmFsc1sxXSA+Pj4gMjQgLSA4ICogaWkgJiAweDAwRkY7XG4gICAgLy8gdmFsc1sgMCBdID0gKCB2YWxzWyAwIF0gPj4+IDggKTtcbiAgICAvLyB2YWxzWyAxIF0gPSAoIHZhbHNbIDEgXSA+Pj4gOCApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vKlxuLy8qIFRoaXMgbWV0aG9kIHRha2VzIGFuIGFycmF5IHdpdGggdHdvIHZhbHVlcywgbGVmdCBhbmQgcmlnaHRcbi8vKiBhbmQgdW5kb2VzIE5OIHJvdW5kcyBvZiBCbG93ZmlzaCBvbiB0aGVtLlxuLy8qXG5CbG93ZmlzaC5wcm90b3R5cGUuX2RlY3J5cHRfYmxvY2sgPSBmdW5jdGlvbiAodmFscykge1xuICB2YXIgZGF0YUwgPSB2YWxzWzBdO1xuICB2YXIgZGF0YVIgPSB2YWxzWzFdO1xuXG4gIHZhciBpaSA9IHZvaWQgMDtcblxuICBmb3IgKGlpID0gdGhpcy5OTiArIDE7IGlpID4gMTsgLS1paSkge1xuICAgIGRhdGFMIF49IHRoaXMucGFycmF5W2lpXTtcbiAgICBkYXRhUiA9IHRoaXMuX0YoZGF0YUwpIF4gZGF0YVI7XG5cbiAgICB2YXIgdG1wID0gZGF0YUw7XG4gICAgZGF0YUwgPSBkYXRhUjtcbiAgICBkYXRhUiA9IHRtcDtcbiAgfVxuXG4gIGRhdGFMIF49IHRoaXMucGFycmF5WzFdO1xuICBkYXRhUiBePSB0aGlzLnBhcnJheVswXTtcblxuICB2YWxzWzBdID0gdGhpcy5fY2xlYW4oZGF0YVIpO1xuICB2YWxzWzFdID0gdGhpcy5fY2xlYW4oZGF0YUwpO1xufTtcblxuLy8qXG4vLyogVGhpcyBtZXRob2QgdGFrZXMgYSBrZXkgYXJyYXkgYW5kIGluaXRpYWxpemVzIHRoZVxuLy8qIHNib3hlcyBhbmQgcGFycmF5IGZvciB0aGlzIGVuY3J5cHRpb24uXG4vLypcbkJsb3dmaXNoLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGtleSkge1xuICB2YXIgaWkgPSB2b2lkIDA7XG4gIHZhciBqaiA9IDA7XG5cbiAgdGhpcy5wYXJyYXkgPSBbXTtcbiAgZm9yIChpaSA9IDA7IGlpIDwgdGhpcy5OTiArIDI7ICsraWkpIHtcbiAgICB2YXIgZGF0YSA9IDB4MDAwMDAwMDA7XG4gICAgZm9yICh2YXIga2sgPSAwOyBrayA8IDQ7ICsra2spIHtcbiAgICAgIGRhdGEgPSBkYXRhIDw8IDggfCBrZXlbampdICYgMHgwMEZGO1xuICAgICAgaWYgKCsramogPj0ga2V5Lmxlbmd0aCkge1xuICAgICAgICBqaiA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFycmF5W2lpXSA9IHRoaXMuUEFSUkFZW2lpXSBeIGRhdGE7XG4gIH1cblxuICB0aGlzLnNib3hlcyA9IFtdO1xuICBmb3IgKGlpID0gMDsgaWkgPCA0OyArK2lpKSB7XG4gICAgdGhpcy5zYm94ZXNbaWldID0gW107XG4gICAgZm9yIChqaiA9IDA7IGpqIDwgMjU2OyArK2pqKSB7XG4gICAgICB0aGlzLnNib3hlc1tpaV1bampdID0gdGhpcy5TQk9YRVNbaWldW2pqXTtcbiAgICB9XG4gIH1cblxuICB2YXIgdmFscyA9IFsweDAwMDAwMDAwLCAweDAwMDAwMDAwXTtcblxuICBmb3IgKGlpID0gMDsgaWkgPCB0aGlzLk5OICsgMjsgaWkgKz0gMikge1xuICAgIHRoaXMuX2VuY3J5cHRfYmxvY2sodmFscyk7XG4gICAgdGhpcy5wYXJyYXlbaWkgKyAwXSA9IHZhbHNbMF07XG4gICAgdGhpcy5wYXJyYXlbaWkgKyAxXSA9IHZhbHNbMV07XG4gIH1cblxuICBmb3IgKGlpID0gMDsgaWkgPCA0OyArK2lpKSB7XG4gICAgZm9yIChqaiA9IDA7IGpqIDwgMjU2OyBqaiArPSAyKSB7XG4gICAgICB0aGlzLl9lbmNyeXB0X2Jsb2NrKHZhbHMpO1xuICAgICAgdGhpcy5zYm94ZXNbaWldW2pqICsgMF0gPSB2YWxzWzBdO1xuICAgICAgdGhpcy5zYm94ZXNbaWldW2pqICsgMV0gPSB2YWxzWzFdO1xuICAgIH1cbiAgfVxufTtcblxuLy8gYWRkZWQgYnkgUmVjdXJpdHkgTGFic1xuZnVuY3Rpb24gQkYoa2V5KSB7XG4gIHRoaXMuYmYgPSBuZXcgQmxvd2Zpc2goKTtcbiAgdGhpcy5iZi5pbml0KGtleSk7XG5cbiAgdGhpcy5lbmNyeXB0ID0gZnVuY3Rpb24gKGJsb2NrKSB7XG4gICAgcmV0dXJuIHRoaXMuYmYuZW5jcnlwdF9ibG9jayhibG9jayk7XG4gIH07XG59XG5cbkJGLmtleVNpemUgPSBCRi5wcm90b3R5cGUua2V5U2l6ZSA9IDE2O1xuQkYuYmxvY2tTaXplID0gQkYucHJvdG90eXBlLmJsb2NrU2l6ZSA9IDE2O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBCRjtcblxufSx7fV0sMzMwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlXG4vLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuXG5cbi8vIENvcHlyaWdodCAyMDEwIHBqYWNvYnNAeGVla3IuY29tIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuLy8gTW9kaWZpZWQgYnkgUmVjdXJpdHkgTGFicyBHbWJIXG5cbi8vIGZpeGVkL21vZGlmaWVkIGJ5IEhlcmJlcnQgSGFuZXdpbmtlbCwgd3d3LmhhbmVXSU4uZGVcbi8vIGNoZWNrIHd3dy5oYW5lV0lOLmRlIGZvciB0aGUgbGF0ZXN0IHZlcnNpb25cblxuLy8gY2FzdDUuanMgaXMgYSBKYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIENBU1QtMTI4LCBhcyBkZWZpbmVkIGluIFJGQyAyMTQ0LlxuLy8gQ0FTVC0xMjggaXMgYSBjb21tb24gT3BlblBHUCBjaXBoZXIuXG5cblxuLy8gQ0FTVDUgY29uc3RydWN0b3JcblxuZnVuY3Rpb24gT3BlbnBncFN5bWVuY0Nhc3Q1KCkge1xuICB0aGlzLkJsb2NrU2l6ZSA9IDg7XG4gIHRoaXMuS2V5U2l6ZSA9IDE2O1xuXG4gIHRoaXMuc2V0S2V5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHRoaXMubWFza2luZyA9IG5ldyBBcnJheSgxNik7XG4gICAgdGhpcy5yb3RhdGUgPSBuZXcgQXJyYXkoMTYpO1xuXG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgaWYgKGtleS5sZW5ndGggPT09IHRoaXMuS2V5U2l6ZSkge1xuICAgICAgdGhpcy5rZXlTY2hlZHVsZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NBU1QtMTI4OiBrZXlzIG11c3QgYmUgMTYgYnl0ZXMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHRoaXMubWFza2luZ1tpXSA9IDA7XG4gICAgICB0aGlzLnJvdGF0ZVtpXSA9IDA7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZ2V0QmxvY2tTaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLkJsb2NrU2l6ZTtcbiAgfTtcblxuICB0aGlzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc3JjKSB7XG4gICAgdmFyIGRzdCA9IG5ldyBBcnJheShzcmMubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSArPSA4KSB7XG4gICAgICB2YXIgbCA9IHNyY1tpXSA8PCAyNCB8IHNyY1tpICsgMV0gPDwgMTYgfCBzcmNbaSArIDJdIDw8IDggfCBzcmNbaSArIDNdO1xuICAgICAgdmFyIHIgPSBzcmNbaSArIDRdIDw8IDI0IHwgc3JjW2kgKyA1XSA8PCAxNiB8IHNyY1tpICsgNl0gPDwgOCB8IHNyY1tpICsgN107XG4gICAgICB2YXIgdCA9IHZvaWQgMDtcblxuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYxKHIsIHRoaXMubWFza2luZ1swXSwgdGhpcy5yb3RhdGVbMF0pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjIociwgdGhpcy5tYXNraW5nWzFdLCB0aGlzLnJvdGF0ZVsxXSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMyhyLCB0aGlzLm1hc2tpbmdbMl0sIHRoaXMucm90YXRlWzJdKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYxKHIsIHRoaXMubWFza2luZ1szXSwgdGhpcy5yb3RhdGVbM10pO1xuICAgICAgbCA9IHQ7XG5cbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMihyLCB0aGlzLm1hc2tpbmdbNF0sIHRoaXMucm90YXRlWzRdKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYzKHIsIHRoaXMubWFza2luZ1s1XSwgdGhpcy5yb3RhdGVbNV0pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjEociwgdGhpcy5tYXNraW5nWzZdLCB0aGlzLnJvdGF0ZVs2XSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMihyLCB0aGlzLm1hc2tpbmdbN10sIHRoaXMucm90YXRlWzddKTtcbiAgICAgIGwgPSB0O1xuXG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjMociwgdGhpcy5tYXNraW5nWzhdLCB0aGlzLnJvdGF0ZVs4XSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMShyLCB0aGlzLm1hc2tpbmdbOV0sIHRoaXMucm90YXRlWzldKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYyKHIsIHRoaXMubWFza2luZ1sxMF0sIHRoaXMucm90YXRlWzEwXSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMyhyLCB0aGlzLm1hc2tpbmdbMTFdLCB0aGlzLnJvdGF0ZVsxMV0pO1xuICAgICAgbCA9IHQ7XG5cbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMShyLCB0aGlzLm1hc2tpbmdbMTJdLCB0aGlzLnJvdGF0ZVsxMl0pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjIociwgdGhpcy5tYXNraW5nWzEzXSwgdGhpcy5yb3RhdGVbMTNdKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYzKHIsIHRoaXMubWFza2luZ1sxNF0sIHRoaXMucm90YXRlWzE0XSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMShyLCB0aGlzLm1hc2tpbmdbMTVdLCB0aGlzLnJvdGF0ZVsxNV0pO1xuICAgICAgbCA9IHQ7XG5cbiAgICAgIGRzdFtpXSA9IHIgPj4+IDI0ICYgMjU1O1xuICAgICAgZHN0W2kgKyAxXSA9IHIgPj4+IDE2ICYgMjU1O1xuICAgICAgZHN0W2kgKyAyXSA9IHIgPj4+IDggJiAyNTU7XG4gICAgICBkc3RbaSArIDNdID0gciAmIDI1NTtcbiAgICAgIGRzdFtpICsgNF0gPSBsID4+PiAyNCAmIDI1NTtcbiAgICAgIGRzdFtpICsgNV0gPSBsID4+PiAxNiAmIDI1NTtcbiAgICAgIGRzdFtpICsgNl0gPSBsID4+PiA4ICYgMjU1O1xuICAgICAgZHN0W2kgKyA3XSA9IGwgJiAyNTU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRzdDtcbiAgfTtcblxuICB0aGlzLmRlY3J5cHQgPSBmdW5jdGlvbiAoc3JjKSB7XG4gICAgdmFyIGRzdCA9IG5ldyBBcnJheShzcmMubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSArPSA4KSB7XG4gICAgICB2YXIgbCA9IHNyY1tpXSA8PCAyNCB8IHNyY1tpICsgMV0gPDwgMTYgfCBzcmNbaSArIDJdIDw8IDggfCBzcmNbaSArIDNdO1xuICAgICAgdmFyIHIgPSBzcmNbaSArIDRdIDw8IDI0IHwgc3JjW2kgKyA1XSA8PCAxNiB8IHNyY1tpICsgNl0gPDwgOCB8IHNyY1tpICsgN107XG4gICAgICB2YXIgdCA9IHZvaWQgMDtcblxuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYxKHIsIHRoaXMubWFza2luZ1sxNV0sIHRoaXMucm90YXRlWzE1XSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMyhyLCB0aGlzLm1hc2tpbmdbMTRdLCB0aGlzLnJvdGF0ZVsxNF0pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjIociwgdGhpcy5tYXNraW5nWzEzXSwgdGhpcy5yb3RhdGVbMTNdKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYxKHIsIHRoaXMubWFza2luZ1sxMl0sIHRoaXMucm90YXRlWzEyXSk7XG4gICAgICBsID0gdDtcblxuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYzKHIsIHRoaXMubWFza2luZ1sxMV0sIHRoaXMucm90YXRlWzExXSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMihyLCB0aGlzLm1hc2tpbmdbMTBdLCB0aGlzLnJvdGF0ZVsxMF0pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjEociwgdGhpcy5tYXNraW5nWzldLCB0aGlzLnJvdGF0ZVs5XSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMyhyLCB0aGlzLm1hc2tpbmdbOF0sIHRoaXMucm90YXRlWzhdKTtcbiAgICAgIGwgPSB0O1xuXG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjIociwgdGhpcy5tYXNraW5nWzddLCB0aGlzLnJvdGF0ZVs3XSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMShyLCB0aGlzLm1hc2tpbmdbNl0sIHRoaXMucm90YXRlWzZdKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYzKHIsIHRoaXMubWFza2luZ1s1XSwgdGhpcy5yb3RhdGVbNV0pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjIociwgdGhpcy5tYXNraW5nWzRdLCB0aGlzLnJvdGF0ZVs0XSk7XG4gICAgICBsID0gdDtcblxuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYxKHIsIHRoaXMubWFza2luZ1szXSwgdGhpcy5yb3RhdGVbM10pO1xuICAgICAgbCA9IHQ7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBsIF4gZjMociwgdGhpcy5tYXNraW5nWzJdLCB0aGlzLnJvdGF0ZVsyXSk7XG4gICAgICBsID0gdDtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IGwgXiBmMihyLCB0aGlzLm1hc2tpbmdbMV0sIHRoaXMucm90YXRlWzFdKTtcbiAgICAgIGwgPSB0O1xuICAgICAgdCA9IHI7XG4gICAgICByID0gbCBeIGYxKHIsIHRoaXMubWFza2luZ1swXSwgdGhpcy5yb3RhdGVbMF0pO1xuICAgICAgbCA9IHQ7XG5cbiAgICAgIGRzdFtpXSA9IHIgPj4+IDI0ICYgMjU1O1xuICAgICAgZHN0W2kgKyAxXSA9IHIgPj4+IDE2ICYgMjU1O1xuICAgICAgZHN0W2kgKyAyXSA9IHIgPj4+IDggJiAyNTU7XG4gICAgICBkc3RbaSArIDNdID0gciAmIDI1NTtcbiAgICAgIGRzdFtpICsgNF0gPSBsID4+PiAyNCAmIDI1NTtcbiAgICAgIGRzdFtpICsgNV0gPSBsID4+IDE2ICYgMjU1O1xuICAgICAgZHN0W2kgKyA2XSA9IGwgPj4gOCAmIDI1NTtcbiAgICAgIGRzdFtpICsgN10gPSBsICYgMjU1O1xuICAgIH1cblxuICAgIHJldHVybiBkc3Q7XG4gIH07XG4gIHZhciBzY2hlZHVsZUEgPSBuZXcgQXJyYXkoNCk7XG5cbiAgc2NoZWR1bGVBWzBdID0gbmV3IEFycmF5KDQpO1xuICBzY2hlZHVsZUFbMF1bMF0gPSBbNCwgMCwgMHhkLCAweGYsIDB4YywgMHhlLCAweDhdO1xuICBzY2hlZHVsZUFbMF1bMV0gPSBbNSwgMiwgMTYgKyAwLCAxNiArIDIsIDE2ICsgMSwgMTYgKyAzLCAweGFdO1xuICBzY2hlZHVsZUFbMF1bMl0gPSBbNiwgMywgMTYgKyA3LCAxNiArIDYsIDE2ICsgNSwgMTYgKyA0LCA5XTtcbiAgc2NoZWR1bGVBWzBdWzNdID0gWzcsIDEsIDE2ICsgMHhhLCAxNiArIDksIDE2ICsgMHhiLCAxNiArIDgsIDB4Yl07XG5cbiAgc2NoZWR1bGVBWzFdID0gbmV3IEFycmF5KDQpO1xuICBzY2hlZHVsZUFbMV1bMF0gPSBbMCwgNiwgMTYgKyA1LCAxNiArIDcsIDE2ICsgNCwgMTYgKyA2LCAxNiArIDBdO1xuICBzY2hlZHVsZUFbMV1bMV0gPSBbMSwgNCwgMCwgMiwgMSwgMywgMTYgKyAyXTtcbiAgc2NoZWR1bGVBWzFdWzJdID0gWzIsIDUsIDcsIDYsIDUsIDQsIDE2ICsgMV07XG4gIHNjaGVkdWxlQVsxXVszXSA9IFszLCA3LCAweGEsIDksIDB4YiwgOCwgMTYgKyAzXTtcblxuICBzY2hlZHVsZUFbMl0gPSBuZXcgQXJyYXkoNCk7XG4gIHNjaGVkdWxlQVsyXVswXSA9IFs0LCAwLCAweGQsIDB4ZiwgMHhjLCAweGUsIDhdO1xuICBzY2hlZHVsZUFbMl1bMV0gPSBbNSwgMiwgMTYgKyAwLCAxNiArIDIsIDE2ICsgMSwgMTYgKyAzLCAweGFdO1xuICBzY2hlZHVsZUFbMl1bMl0gPSBbNiwgMywgMTYgKyA3LCAxNiArIDYsIDE2ICsgNSwgMTYgKyA0LCA5XTtcbiAgc2NoZWR1bGVBWzJdWzNdID0gWzcsIDEsIDE2ICsgMHhhLCAxNiArIDksIDE2ICsgMHhiLCAxNiArIDgsIDB4Yl07XG5cbiAgc2NoZWR1bGVBWzNdID0gbmV3IEFycmF5KDQpO1xuICBzY2hlZHVsZUFbM11bMF0gPSBbMCwgNiwgMTYgKyA1LCAxNiArIDcsIDE2ICsgNCwgMTYgKyA2LCAxNiArIDBdO1xuICBzY2hlZHVsZUFbM11bMV0gPSBbMSwgNCwgMCwgMiwgMSwgMywgMTYgKyAyXTtcbiAgc2NoZWR1bGVBWzNdWzJdID0gWzIsIDUsIDcsIDYsIDUsIDQsIDE2ICsgMV07XG4gIHNjaGVkdWxlQVszXVszXSA9IFszLCA3LCAweGEsIDksIDB4YiwgOCwgMTYgKyAzXTtcblxuICB2YXIgc2NoZWR1bGVCID0gbmV3IEFycmF5KDQpO1xuXG4gIHNjaGVkdWxlQlswXSA9IG5ldyBBcnJheSg0KTtcbiAgc2NoZWR1bGVCWzBdWzBdID0gWzE2ICsgOCwgMTYgKyA5LCAxNiArIDcsIDE2ICsgNiwgMTYgKyAyXTtcbiAgc2NoZWR1bGVCWzBdWzFdID0gWzE2ICsgMHhhLCAxNiArIDB4YiwgMTYgKyA1LCAxNiArIDQsIDE2ICsgNl07XG4gIHNjaGVkdWxlQlswXVsyXSA9IFsxNiArIDB4YywgMTYgKyAweGQsIDE2ICsgMywgMTYgKyAyLCAxNiArIDldO1xuICBzY2hlZHVsZUJbMF1bM10gPSBbMTYgKyAweGUsIDE2ICsgMHhmLCAxNiArIDEsIDE2ICsgMCwgMTYgKyAweGNdO1xuXG4gIHNjaGVkdWxlQlsxXSA9IG5ldyBBcnJheSg0KTtcbiAgc2NoZWR1bGVCWzFdWzBdID0gWzMsIDIsIDB4YywgMHhkLCA4XTtcbiAgc2NoZWR1bGVCWzFdWzFdID0gWzEsIDAsIDB4ZSwgMHhmLCAweGRdO1xuICBzY2hlZHVsZUJbMV1bMl0gPSBbNywgNiwgOCwgOSwgM107XG4gIHNjaGVkdWxlQlsxXVszXSA9IFs1LCA0LCAweGEsIDB4YiwgN107XG5cbiAgc2NoZWR1bGVCWzJdID0gbmV3IEFycmF5KDQpO1xuICBzY2hlZHVsZUJbMl1bMF0gPSBbMTYgKyAzLCAxNiArIDIsIDE2ICsgMHhjLCAxNiArIDB4ZCwgMTYgKyA5XTtcbiAgc2NoZWR1bGVCWzJdWzFdID0gWzE2ICsgMSwgMTYgKyAwLCAxNiArIDB4ZSwgMTYgKyAweGYsIDE2ICsgMHhjXTtcbiAgc2NoZWR1bGVCWzJdWzJdID0gWzE2ICsgNywgMTYgKyA2LCAxNiArIDgsIDE2ICsgOSwgMTYgKyAyXTtcbiAgc2NoZWR1bGVCWzJdWzNdID0gWzE2ICsgNSwgMTYgKyA0LCAxNiArIDB4YSwgMTYgKyAweGIsIDE2ICsgNl07XG5cbiAgc2NoZWR1bGVCWzNdID0gbmV3IEFycmF5KDQpO1xuICBzY2hlZHVsZUJbM11bMF0gPSBbOCwgOSwgNywgNiwgM107XG4gIHNjaGVkdWxlQlszXVsxXSA9IFsweGEsIDB4YiwgNSwgNCwgN107XG4gIHNjaGVkdWxlQlszXVsyXSA9IFsweGMsIDB4ZCwgMywgMiwgOF07XG4gIHNjaGVkdWxlQlszXVszXSA9IFsweGUsIDB4ZiwgMSwgMCwgMHhkXTtcblxuICAvLyBjaGFuZ2VkICdpbicgdG8gJ2lubicgKGluIGphdmFzY3JpcHQgJ2luJyBpcyBhIHJlc2VydmVkIHdvcmQpXG4gIHRoaXMua2V5U2NoZWR1bGUgPSBmdW5jdGlvbiAoaW5uKSB7XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgdmFyIGsgPSBuZXcgQXJyYXkoMzIpO1xuXG4gICAgdmFyIGogPSB2b2lkIDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgaiA9IGkgKiA0O1xuICAgICAgdFtpXSA9IGlubltqXSA8PCAyNCB8IGlubltqICsgMV0gPDwgMTYgfCBpbm5baiArIDJdIDw8IDggfCBpbm5baiArIDNdO1xuICAgIH1cblxuICAgIHZhciB4ID0gWzYsIDcsIDQsIDVdO1xuICAgIHZhciBraSA9IDA7XG4gICAgdmFyIHcgPSB2b2lkIDA7XG5cbiAgICBmb3IgKHZhciBoYWxmID0gMDsgaGFsZiA8IDI7IGhhbGYrKykge1xuICAgICAgZm9yICh2YXIgcm91bmQgPSAwOyByb3VuZCA8IDQ7IHJvdW5kKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykge1xuICAgICAgICAgIHZhciBhID0gc2NoZWR1bGVBW3JvdW5kXVtqXTtcbiAgICAgICAgICB3ID0gdFthWzFdXTtcblxuICAgICAgICAgIHcgXj0gc0JveFs0XVt0W2FbMl0gPj4+IDJdID4+PiAyNCAtIDggKiAoYVsyXSAmIDMpICYgMHhmZl07XG4gICAgICAgICAgdyBePSBzQm94WzVdW3RbYVszXSA+Pj4gMl0gPj4+IDI0IC0gOCAqIChhWzNdICYgMykgJiAweGZmXTtcbiAgICAgICAgICB3IF49IHNCb3hbNl1bdFthWzRdID4+PiAyXSA+Pj4gMjQgLSA4ICogKGFbNF0gJiAzKSAmIDB4ZmZdO1xuICAgICAgICAgIHcgXj0gc0JveFs3XVt0W2FbNV0gPj4+IDJdID4+PiAyNCAtIDggKiAoYVs1XSAmIDMpICYgMHhmZl07XG4gICAgICAgICAgdyBePSBzQm94W3hbal1dW3RbYVs2XSA+Pj4gMl0gPj4+IDI0IC0gOCAqIChhWzZdICYgMykgJiAweGZmXTtcbiAgICAgICAgICB0W2FbMF1dID0gdztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICB2YXIgYiA9IHNjaGVkdWxlQltyb3VuZF1bal07XG4gICAgICAgICAgdyA9IHNCb3hbNF1bdFtiWzBdID4+PiAyXSA+Pj4gMjQgLSA4ICogKGJbMF0gJiAzKSAmIDB4ZmZdO1xuXG4gICAgICAgICAgdyBePSBzQm94WzVdW3RbYlsxXSA+Pj4gMl0gPj4+IDI0IC0gOCAqIChiWzFdICYgMykgJiAweGZmXTtcbiAgICAgICAgICB3IF49IHNCb3hbNl1bdFtiWzJdID4+PiAyXSA+Pj4gMjQgLSA4ICogKGJbMl0gJiAzKSAmIDB4ZmZdO1xuICAgICAgICAgIHcgXj0gc0JveFs3XVt0W2JbM10gPj4+IDJdID4+PiAyNCAtIDggKiAoYlszXSAmIDMpICYgMHhmZl07XG4gICAgICAgICAgdyBePSBzQm94WzQgKyBqXVt0W2JbNF0gPj4+IDJdID4+PiAyNCAtIDggKiAoYls0XSAmIDMpICYgMHhmZl07XG4gICAgICAgICAga1traV0gPSB3O1xuICAgICAgICAgIGtpKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgMTY7IF9pKyspIHtcbiAgICAgIHRoaXMubWFza2luZ1tfaV0gPSBrW19pXTtcbiAgICAgIHRoaXMucm90YXRlW19pXSA9IGtbMTYgKyBfaV0gJiAweDFmO1xuICAgIH1cbiAgfTtcblxuICAvLyBUaGVzZSBhcmUgdGhlIHRocmVlICdmJyBmdW5jdGlvbnMuIFNlZSBSRkMgMjE0NCwgc2VjdGlvbiAyLjIuXG5cbiAgZnVuY3Rpb24gZjEoZCwgbSwgcikge1xuICAgIHZhciB0ID0gbSArIGQ7XG4gICAgdmFyIEkgPSB0IDw8IHIgfCB0ID4+PiAzMiAtIHI7XG4gICAgcmV0dXJuIChzQm94WzBdW0kgPj4+IDI0XSBeIHNCb3hbMV1bSSA+Pj4gMTYgJiAyNTVdKSAtIHNCb3hbMl1bSSA+Pj4gOCAmIDI1NV0gKyBzQm94WzNdW0kgJiAyNTVdO1xuICB9XG5cbiAgZnVuY3Rpb24gZjIoZCwgbSwgcikge1xuICAgIHZhciB0ID0gbSBeIGQ7XG4gICAgdmFyIEkgPSB0IDw8IHIgfCB0ID4+PiAzMiAtIHI7XG4gICAgcmV0dXJuIHNCb3hbMF1bSSA+Pj4gMjRdIC0gc0JveFsxXVtJID4+PiAxNiAmIDI1NV0gKyBzQm94WzJdW0kgPj4+IDggJiAyNTVdIF4gc0JveFszXVtJICYgMjU1XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGYzKGQsIG0sIHIpIHtcbiAgICB2YXIgdCA9IG0gLSBkO1xuICAgIHZhciBJID0gdCA8PCByIHwgdCA+Pj4gMzIgLSByO1xuICAgIHJldHVybiAoc0JveFswXVtJID4+PiAyNF0gKyBzQm94WzFdW0kgPj4+IDE2ICYgMjU1XSBeIHNCb3hbMl1bSSA+Pj4gOCAmIDI1NV0pIC0gc0JveFszXVtJICYgMjU1XTtcbiAgfVxuXG4gIHZhciBzQm94ID0gbmV3IEFycmF5KDgpO1xuICBzQm94WzBdID0gWzB4MzBmYjQwZDQsIDB4OWZhMGZmMGIsIDB4NmJlY2NkMmYsIDB4M2YyNThjN2EsIDB4MWUyMTNmMmYsIDB4OWMwMDRkZDMsIDB4NjAwM2U1NDAsIDB4Y2Y5ZmM5NDksIDB4YmZkNGFmMjcsIDB4ODhiYmJkYjUsIDB4ZTIwMzQwOTAsIDB4OThkMDk2NzUsIDB4NmU2M2EwZTAsIDB4MTVjMzYxZDIsIDB4YzJlNzY2MWQsIDB4MjJkNGZmOGUsIDB4Mjg2ODNiNmYsIDB4YzA3ZmQwNTksIDB4ZmYyMzc5YzgsIDB4Nzc1ZjUwZTIsIDB4NDNjMzQwZDMsIDB4ZGYyZjg2NTYsIDB4ODg3Y2E0MWEsIDB4YTJkMmJkMmQsIDB4YTFjOWUwZDYsIDB4MzQ2YzQ4MTksIDB4NjFiNzZkODcsIDB4MjI1NDBmMmYsIDB4MmFiZTMyZTEsIDB4YWE1NDE2NmIsIDB4MjI1NjhlM2EsIDB4YTJkMzQxZDAsIDB4NjZkYjQwYzgsIDB4YTc4NDM5MmYsIDB4MDA0ZGZmMmYsIDB4MmRiOWQyZGUsIDB4OTc5NDNmYWMsIDB4NGE5N2MxZDgsIDB4NTI3NjQ0YjcsIDB4YjVmNDM3YTcsIDB4YjgyY2JhZWYsIDB4ZDc1MWQxNTksIDB4NmZmN2YwZWQsIDB4NWEwOTdhMWYsIDB4ODI3YjY4ZDAsIDB4OTBlY2Y1MmUsIDB4MjJiMGMwNTQsIDB4YmM4ZTU5MzUsIDB4NGI2ZDJmN2YsIDB4NTBiYjY0YTIsIDB4ZDI2NjQ5MTAsIDB4YmVlNTgxMmQsIDB4YjczMzIyOTAsIDB4ZTkzYjE1OWYsIDB4YjQ4ZWU0MTEsIDB4NGJmZjM0NWQsIDB4ZmQ0NWMyNDAsIDB4YWQzMTk3M2YsIDB4YzRmNmQwMmUsIDB4NTVmYzgxNjUsIDB4ZDViMWNhYWQsIDB4YTFhYzJkYWUsIDB4YTJkNGI3NmQsIDB4YzE5YjBjNTAsIDB4ODgyMjQwZjIsIDB4MGM2ZTRmMzgsIDB4YTRlNGJmZDcsIDB4NGY1YmEyNzIsIDB4NTY0YzFkMmYsIDB4YzU5YzUzMTksIDB4Yjk0OWUzNTQsIDB4YjA0NjY5ZmUsIDB4YjFiNmFiOGEsIDB4YzcxMzU4ZGQsIDB4NjM4NWM1NDUsIDB4MTEwZjkzNWQsIDB4NTc1MzhhZDUsIDB4NmEzOTA0OTMsIDB4ZTYzZDM3ZTAsIDB4MmE1NGY2YjMsIDB4M2E3ODdkNWYsIDB4NjI3NmEwYjUsIDB4MTlhNmZjZGYsIDB4N2E0MjIwNmEsIDB4MjlmOWQ0ZDUsIDB4ZjYxYjE4OTEsIDB4YmI3MjI3NWUsIDB4YWE1MDgxNjcsIDB4Mzg5MDEwOTEsIDB4YzZiNTA1ZWIsIDB4ODRjN2NiOGMsIDB4MmFkNzVhMGYsIDB4ODc0YTE0MjcsIDB4YTJkMTkzNmIsIDB4MmFkMjg2YWYsIDB4YWE1NmQyOTEsIDB4ZDc4OTQzNjAsIDB4NDI1Yzc1MGQsIDB4OTNiMzllMjYsIDB4MTg3MTg0YzksIDB4NmMwMGIzMmQsIDB4NzNlMmJiMTQsIDB4YTBiZWJjM2MsIDB4NTQ2MjM3NzksIDB4NjQ0NTllYWIsIDB4M2YzMjhiODIsIDB4NzcxOGNmODIsIDB4NTlhMmNlYTYsIDB4MDRlZTAwMmUsIDB4ODlmZTc4ZTYsIDB4M2ZhYjA5NTAsIDB4MzI1ZmY2YzIsIDB4ODEzODNmMDUsIDB4Njk2M2M1YzgsIDB4NzZjYjVhZDYsIDB4ZDQ5OTc0YzksIDB4Y2ExODBkY2YsIDB4MzgwNzgyZDUsIDB4YzdmYTVjZjYsIDB4OGFjMzE1MTEsIDB4MzVlNzllMTMsIDB4NDdkYTkxZDAsIDB4ZjQwZjkwODYsIDB4YTdlMjQxOWUsIDB4MzEzNjYyNDEsIDB4MDUxZWY0OTUsIDB4YWE1NzNiMDQsIDB4NGE4MDVkOGQsIDB4NTQ4MzAwZDAsIDB4MDAzMjJhM2MsIDB4YmY2NGNkZGYsIDB4YmE1N2E2OGUsIDB4NzVjNjM3MmIsIDB4NTBhZmQzNDEsIDB4YTdjMTMyNzUsIDB4OTE1YTBiZjUsIDB4NmI1NGJmYWIsIDB4MmIwYjE0MjYsIDB4YWI0Y2M5ZDcsIDB4NDQ5Y2NkODIsIDB4ZjdmYmYyNjUsIDB4YWI4NWM1ZjMsIDB4MWI1NWRiOTQsIDB4YWFkNGUzMjQsIDB4Y2ZhNGJkM2YsIDB4MmRlYWEzZTIsIDB4OWUyMDRkMDIsIDB4YzhiZDI1YWMsIDB4ZWFkZjU1YjMsIDB4ZDViZDllOTgsIDB4ZTMxMjMxYjIsIDB4MmFkNWFkNmMsIDB4OTU0MzI5ZGUsIDB4YWRiZTQ1MjgsIDB4ZDg3MTBmNjksIDB4YWE1MWM5MGYsIDB4YWE3ODZiZjYsIDB4MjI1MTNmMWUsIDB4YWE1MWE3OWIsIDB4MmFkMzQ0Y2MsIDB4N2I1YTQxZjAsIDB4ZDM3Y2ZiYWQsIDB4MWIwNjk1MDUsIDB4NDFlY2U0OTEsIDB4YjRjMzMyZTYsIDB4MDMyMjY4ZDQsIDB4Yzk2MDBhY2MsIDB4Y2UzODdlNmQsIDB4YmY2YmIxNmMsIDB4NmE3MGZiNzgsIDB4MGQwM2Q5YzksIDB4ZDRkZjM5ZGUsIDB4ZTAxMDYzZGEsIDB4NDczNmY0NjQsIDB4NWFkMzI4ZDgsIDB4YjM0N2NjOTYsIDB4NzViYjBmYzMsIDB4OTg1MTFiZmIsIDB4NGZmYmNjMzUsIDB4YjU4YmNmNmEsIDB4ZTExZjBhYmMsIDB4YmZjNWZlNGEsIDB4YTcwYWVjMTAsIDB4YWMzOTU3MGEsIDB4M2YwNDQ0MmYsIDB4NjE4OGIxNTMsIDB4ZTAzOTdhMmUsIDB4NTcyN2NiNzksIDB4OWNlYjQxOGYsIDB4MWNhY2Q2OGQsIDB4MmFkMzdjOTYsIDB4MDE3NWNiOWQsIDB4YzY5ZGZmMDksIDB4Yzc1YjY1ZjAsIDB4ZDlkYjQwZDgsIDB4ZWMwZTc3NzksIDB4NDc0NGVhZDQsIDB4YjExYzMyNzQsIDB4ZGQyNGNiOWUsIDB4N2UxYzU0YmQsIDB4ZjAxMTQ0ZjksIDB4ZDIyNDBlYjEsIDB4OTY3NWIzZmQsIDB4YTNhYzM3NTUsIDB4ZDQ3YzI3YWYsIDB4NTFjODVmNGQsIDB4NTY5MDc1OTYsIDB4YTViYjE1ZTYsIDB4NTgwMzA0ZjAsIDB4Y2EwNDJjZjEsIDB4MDExYTM3ZWEsIDB4OGRiZmFhZGIsIDB4MzViYTNlNGEsIDB4MzUyNmZmYTAsIDB4YzM3YjRkMDksIDB4YmMzMDZlZDksIDB4OThhNTI2NjYsIDB4NTY0OGY3MjUsIDB4ZmY1ZTU2OWQsIDB4MGNlZDYzZDAsIDB4N2M2M2IyY2YsIDB4NzAwYjQ1ZTEsIDB4ZDVlYTUwZjEsIDB4ODVhOTI4NzIsIDB4YWYxZmJkYTcsIDB4ZDQyMzQ4NzAsIDB4YTc4NzBiZjMsIDB4MmQzYjRkNzksIDB4NDJlMDQxOTgsIDB4MGNkMGVkZTcsIDB4MjY0NzBkYjgsIDB4Zjg4MTgxNGMsIDB4NDc0ZDZhZDcsIDB4N2MwYzVlNWMsIDB4ZDEyMzE5NTksIDB4MzgxYjcyOTgsIDB4ZjVkMmY0ZGIsIDB4YWI4Mzg2NTMsIDB4NmUyZjFlMjMsIDB4ODM3MTljOWUsIDB4YmQ5MWUwNDYsIDB4OWE1NjQ1NmUsIDB4ZGMzOTIwMGMsIDB4MjBjOGM1NzEsIDB4OTYyYmRhMWMsIDB4ZTFlNjk2ZmYsIDB4YjE0MWFiMDgsIDB4N2NjYTg5YjksIDB4MWE2OWU3ODMsIDB4MDJjYzQ4NDMsIDB4YTJmN2M1NzksIDB4NDI5ZWY0N2QsIDB4NDI3YjE2OWMsIDB4NWFjOWYwNDksIDB4ZGQ4ZjBmMDAsIDB4NWM4MTY1YmZdO1xuXG4gIHNCb3hbMV0gPSBbMHgxZjIwMTA5NCwgMHhlZjBiYTc1YiwgMHg2OWUzY2Y3ZSwgMHgzOTNmNDM4MCwgMHhmZTYxY2Y3YSwgMHhlZWM1MjA3YSwgMHg1NTg4OWM5NCwgMHg3MmZjMDY1MSwgMHhhZGE3ZWY3OSwgMHg0ZTFkNzIzNSwgMHhkNTVhNjNjZSwgMHhkZTA0MzZiYSwgMHg5OWM0MzBlZiwgMHg1ZjBjMDc5NCwgMHgxOGRjZGI3ZCwgMHhhMWQ2ZWZmMywgMHhhMGI1MmY3YiwgMHg1OWU4MzYwNSwgMHhlZTE1YjA5NCwgMHhlOWZmZDkwOSwgMHhkYzQ0MDA4NiwgMHhlZjk0NDQ1OSwgMHhiYTgzY2NiMywgMHhlMGMzY2RmYiwgMHhkMWRhNDE4MSwgMHgzYjA5MmFiMSwgMHhmOTk3ZjFjMSwgMHhhNWU2Y2Y3YiwgMHgwMTQyMGRkYiwgMHhlNGU3ZWY1YiwgMHgyNWExZmY0MSwgMHhlMTgwZjgwNiwgMHgxZmM0MTA4MCwgMHgxNzliZWU3YSwgMHhkMzdhYzZhOSwgMHhmZTU4MzBhNCwgMHg5OGRlOGI3ZiwgMHg3N2U4M2Y0ZSwgMHg3OTkyOTI2OSwgMHgyNGZhOWY3YiwgMHhlMTEzYzg1YiwgMHhhY2M0MDA4MywgMHhkNzUwMzUyNSwgMHhmN2VhNjE1ZiwgMHg2MjE0MzE1NCwgMHgwZDU1NGI2MywgMHg1ZDY4MTEyMSwgMHhjODY2YzM1OSwgMHgzZDYzY2Y3MywgMHhjZWUyMzRjMCwgMHhkNGQ4N2U4NywgMHg1YzY3MmIyMSwgMHgwNzFmNjE4MSwgMHgzOWY3NjI3ZiwgMHgzNjFlMzA4NCwgMHhlNGViNTczYiwgMHg2MDJmNjRhNCwgMHhkNjNhY2Q5YywgMHgxYmJjNDYzNSwgMHg5ZTgxMDMyZCwgMHgyNzAxZjUwYywgMHg5OTg0N2FiNCwgMHhhMGUzZGY3OSwgMHhiYTZjZjM4YywgMHgxMDg0MzA5NCwgMHgyNTM3YTk1ZSwgMHhmNDZmNmZmZSwgMHhhMWZmM2IxZiwgMHgyMDhjZmI2YSwgMHg4ZjQ1OGM3NCwgMHhkOWUwYTIyNywgMHg0ZWM3M2EzNCwgMHhmYzg4NGY2OSwgMHgzZTRkZThkZiwgMHhlZjBlMDA4OCwgMHgzNTU5NjQ4ZCwgMHg4YTQ1Mzg4YywgMHgxZDgwNDM2NiwgMHg3MjFkOWJmZCwgMHhhNTg2ODRiYiwgMHhlODI1NjMzMywgMHg4NDRlODIxMiwgMHgxMjhkODA5OCwgMHhmZWQzM2ZiNCwgMHhjZTI4MGFlMSwgMHgyN2UxOWJhNSwgMHhkNWE2YzI1MiwgMHhlNDk3NTRiZCwgMHhjNWQ2NTVkZCwgMHhlYjY2NzA2NCwgMHg3Nzg0MGI0ZCwgMHhhMWI2YTgwMSwgMHg4NGRiMjZhOSwgMHhlMGI1NjcxNCwgMHgyMWYwNDNiNywgMHhlNWQwNTg2MCwgMHg1NGYwMzA4NCwgMHgwNjZmZjQ3MiwgMHhhMzFhYTE1MywgMHhkYWRjNDc1NSwgMHhiNTYyNWRiZiwgMHg2ODU2MWJlNiwgMHg4M2NhNmI5NCwgMHgyZDZlZDIzYiwgMHhlY2NmMDFkYiwgMHhhNmQzZDBiYSwgMHhiNjgwM2Q1YywgMHhhZjc3YTcwOSwgMHgzM2I0YTM0YywgMHgzOTdiYzhkNiwgMHg1ZWUyMmI5NSwgMHg1ZjBlNTMwNCwgMHg4MWVkNmY2MSwgMHgyMGU3NDM2NCwgMHhiNDVlMTM3OCwgMHhkZTE4NjM5YiwgMHg4ODFjYTEyMiwgMHhiOTY3MjZkMSwgMHg4MDQ5YTdlOCwgMHgyMmI3ZGE3YiwgMHg1ZTU1MmQyNSwgMHg1MjcyZDIzNywgMHg3OWQyOTUxYywgMHhjNjBkODk0YywgMHg0ODhjYjQwMiwgMHgxYmE0ZmU1YiwgMHhhNGIwOWY2YiwgMHgxY2E4MTVjZiwgMHhhMjBjMzAwNSwgMHg4ODcxZGY2MywgMHhiOWRlMmZjYiwgMHgwY2M2YzllOSwgMHgwYmVlZmY1MywgMHhlMzIxNDUxNywgMHhiNDU0MjgzNSwgMHg5ZjYzMjkzYywgMHhlZTQxZTcyOSwgMHg2ZTFkMmQ3YywgMHg1MDA0NTI4NiwgMHgxZTY2ODVmMywgMHhmMzM0MDFjNiwgMHgzMGEyMmM5NSwgMHgzMWE3MDg1MCwgMHg2MDkzMGYxMywgMHg3M2Y5ODQxNywgMHhhMTI2OTg1OSwgMHhlYzY0NWM0NCwgMHg1MmM4NzdhOSwgMHhjZGZmMzNhNiwgMHhhMDJiMTc0MSwgMHg3Y2JhZDlhMiwgMHgyMTgwMDM2ZiwgMHg1MGQ5OWMwOCwgMHhjYjNmNDg2MSwgMHhjMjZiZDc2NSwgMHg2NGEzZjZhYiwgMHg4MDM0MjY3NiwgMHgyNWE3NWU3YiwgMHhlNGU2ZDFmYywgMHgyMGM3MTBlNiwgMHhjZGYwYjY4MCwgMHgxNzg0NGQzYiwgMHgzMWVlZjg0ZCwgMHg3ZTA4MjRlNCwgMHgyY2NiNDllYiwgMHg4NDZhM2JhZSwgMHg4ZmY3Nzg4OCwgMHhlZTVkNjBmNiwgMHg3YWY3NTY3MywgMHgyZmRkNWNkYiwgMHhhMTE2MzFjMSwgMHgzMGY2NmY0MywgMHhiM2ZhZWM1NCwgMHgxNTdmZDdmYSwgMHhlZjg1NzljYywgMHhkMTUyZGU1OCwgMHhkYjJmZmQ1ZSwgMHg4ZjMyY2UxOSwgMHgzMDZhZjk3YSwgMHgwMmYwM2VmOCwgMHg5OTMxOWFkNSwgMHhjMjQyZmEwZiwgMHhhN2UzZWJiMCwgMHhjNjhlNDkwNiwgMHhiOGRhMjMwYywgMHg4MDgyMzAyOCwgMHhkY2RlZjNjOCwgMHhkMzVmYjE3MSwgMHgwODhhMWJjOCwgMHhiZWMwYzU2MCwgMHg2MWEzYzllOCwgMHhiY2E4ZjU0ZCwgMHhjNzJmZWZmYSwgMHgyMjgyMmU5OSwgMHg4MmM1NzBiNCwgMHhkOGQ5NGU4OSwgMHg4YjFjMzRiYywgMHgzMDFlMTZlNiwgMHgyNzNiZTk3OSwgMHhiMGZmZWFhNiwgMHg2MWQ5YjhjNiwgMHgwMGIyNDg2OSwgMHhiN2ZmY2UzZiwgMHgwOGRjMjgzYiwgMHg0M2RhZjY1YSwgMHhmN2UxOTc5OCwgMHg3NjE5YjcyZiwgMHg4ZjFjOWJhNCwgMHhkYzg2MzdhMCwgMHgxNmE3ZDNiMSwgMHg5ZmMzOTNiNywgMHhhNzEzNmVlYiwgMHhjNmJjYzYzZSwgMHgxYTUxMzc0MiwgMHhlZjY4MjhiYywgMHg1MjAzNjVkNiwgMHgyZDZhNzdhYiwgMHgzNTI3ZWQ0YiwgMHg4MjFmZDIxNiwgMHgwOTVjNmUyZSwgMHhkYjkyZjJmYiwgMHg1ZWVhMjljYiwgMHgxNDU4OTJmNSwgMHg5MTU4NGY3ZiwgMHg1NDgzNjk3YiwgMHgyNjY3YThjYywgMHg4NTE5NjA0OCwgMHg4YzRiYWNlYSwgMHg4MzM4NjBkNCwgMHgwZDIzZTBmOSwgMHg2YzM4N2U4YSwgMHgwYWU2ZDI0OSwgMHhiMjg0NjAwYywgMHhkODM1NzMxZCwgMHhkY2IxYzY0NywgMHhhYzRjNTZlYSwgMHgzZWJkODFiMywgMHgyMzBlYWJiMCwgMHg2NDM4YmM4NywgMHhmMGI1YjFmYSwgMHg4ZjVlYTJiMywgMHhmYzE4NDY0MiwgMHgwYTAzNmI3YSwgMHg0ZmIwODliZCwgMHg2NDlkYTU4OSwgMHhhMzQ1NDE1ZSwgMHg1YzAzODMyMywgMHgzZTVkM2JiOSwgMHg0M2Q3OTU3MiwgMHg3ZTZkZDA3YywgMHgwNmRmZGYxZSwgMHg2YzZjYzRlZiwgMHg3MTYwYTUzOSwgMHg3M2JmYmU3MCwgMHg4Mzg3NzYwNSwgMHg0NTIzZWNmMV07XG5cbiAgc0JveFsyXSA9IFsweDhkZWZjMjQwLCAweDI1ZmE1ZDlmLCAweGViOTAzZGJmLCAweGU4MTBjOTA3LCAweDQ3NjA3ZmZmLCAweDM2OWZlNDRiLCAweDhjMWZjNjQ0LCAweGFlY2VjYTkwLCAweGJlYjFmOWJmLCAweGVlZmJjYWVhLCAweGU4Y2YxOTUwLCAweDUxZGYwN2FlLCAweDkyMGU4ODA2LCAweGYwYWQwNTQ4LCAweGUxM2M4ZDgzLCAweDkyNzAxMGQ1LCAweDExMTA3ZDlmLCAweDA3NjQ3ZGI5LCAweGIyZTNlNGQ0LCAweDNkNGYyODVlLCAweGI5YWZhODIwLCAweGZhZGU4MmUwLCAweGEwNjcyNjhiLCAweDgyNzI3OTJlLCAweDU1M2ZiMmMwLCAweDQ4OWFlMjJiLCAweGQ0ZWY5Nzk0LCAweDEyNWUzZmJjLCAweDIxZmZmY2VlLCAweDgyNWIxYmZkLCAweDkyNTVjNWVkLCAweDEyNTdhMjQwLCAweDRlMWE4MzAyLCAweGJhZTA3ZmZmLCAweDUyODI0NmU3LCAweDhlNTcxNDBlLCAweDMzNzNmN2JmLCAweDhjOWY4MTg4LCAweGE2ZmM0ZWU4LCAweGM5ODJiNWE1LCAweGE4YzAxZGI3LCAweDU3OWZjMjY0LCAweDY3MDk0ZjMxLCAweGYyYmQzZjVmLCAweDQwZmZmN2MxLCAweDFmYjc4ZGZjLCAweDhlNmJkMmMxLCAweDQzN2JlNTliLCAweDk5YjAzZGJmLCAweGI1ZGJjNjRiLCAweDYzOGRjMGU2LCAweDU1ODE5ZDk5LCAweGExOTdjODFjLCAweDRhMDEyZDZlLCAweGM1ODg0YTI4LCAweGNjYzM2ZjcxLCAweGI4NDNjMjEzLCAweDZjMDc0M2YxLCAweDgzMDk4OTNjLCAweDBmZWRkZDVmLCAweDJmN2ZlODUwLCAweGQ3YzA3ZjdlLCAweDAyNTA3ZmJmLCAweDVhZmI5YTA0LCAweGE3NDdkMmQwLCAweDE2NTExOTJlLCAweGFmNzBiZjNlLCAweDU4YzMxMzgwLCAweDVmOTgzMDJlLCAweDcyN2NjM2M0LCAweDBhMGZiNDAyLCAweDBmN2ZlZjgyLCAweDhjOTZmZGFkLCAweDVkMmMyYWFlLCAweDhlZTk5YTQ5LCAweDUwZGE4OGI4LCAweDg0MjdmNGEwLCAweDFlYWM1NzkwLCAweDc5NmZiNDQ5LCAweDgyNTJkYzE1LCAweGVmYmQ3ZDliLCAweGE2NzI1OTdkLCAweGFkYTg0MGQ4LCAweDQ1ZjU0NTA0LCAweGZhNWQ3NDAzLCAweGU4M2VjMzA1LCAweDRmOTE3NTFhLCAweDkyNTY2OWMyLCAweDIzZWZlOTQxLCAweGE5MDNmMTJlLCAweDYwMjcwZGYyLCAweDAyNzZlNGI2LCAweDk0ZmQ2NTc0LCAweDkyNzk4NWIyLCAweDgyNzZkYmNiLCAweDAyNzc4MTc2LCAweGY4YWY5MThkLCAweDRlNDhmNzllLCAweDhmNjE2ZGRmLCAweGUyOWQ4NDBlLCAweDg0MmY3ZDgzLCAweDM0MGNlNWM4LCAweDk2YmJiNjgyLCAweDkzYjRiMTQ4LCAweGVmMzAzY2FiLCAweDk4NGZhZjI4LCAweDc3OWZhZjliLCAweDkyZGM1NjBkLCAweDIyNGQxZTIwLCAweDg0MzdhYTg4LCAweDdkMjlkYzk2LCAweDI3NTZkM2RjLCAweDhiOTA3Y2VlLCAweGI1MWZkMjQwLCAweGU3YzA3Y2UzLCAweGU1NjZiNGExLCAweGMzZTk2MTVlLCAweDNjZjgyMDlkLCAweDYwOTRkMWUzLCAweGNkOWNhMzQxLCAweDVjNzY0NjBlLCAweDAwZWE5ODNiLCAweGQ0ZDY3ODgxLCAweGZkNDc1NzJjLCAweGY3NmNlZGQ5LCAweGJkYTgyMjljLCAweDEyN2RhZGFhLCAweDQzOGEwNzRlLCAweDFmOTdjMDkwLCAweDA4MWJkYjhhLCAweDkzYTA3ZWJlLCAweGI5MzhjYTE1LCAweDk3YjAzY2ZmLCAweDNkYzJjMGY4LCAweDhkMWFiMmVjLCAweDY0MzgwZTUxLCAweDY4Y2M3YmZiLCAweGQ5MGYyNzg4LCAweDEyNDkwMTgxLCAweDVkZTVmZmQ0LCAweGRkN2VmODZhLCAweDc2YTJlMjE0LCAweGI5YTQwMzY4LCAweDkyNWQ5NThmLCAweDRiMzlmZmZhLCAweGJhMzlhZWU5LCAweGE0ZmZkMzBiLCAweGZhZjc5MzNiLCAweDZkNDk4NjIzLCAweDE5M2NiY2ZhLCAweDI3NjI3NTQ1LCAweDgyNWNmNDdhLCAweDYxYmQ4YmEwLCAweGQxMWU0MmQxLCAweGNlYWQwNGY0LCAweDEyN2VhMzkyLCAweDEwNDI4ZGI3LCAweDgyNzJhOTcyLCAweDkyNzBjNGE4LCAweDEyN2RlNTBiLCAweDI4NWJhMWM4LCAweDNjNjJmNDRmLCAweDM1YzBlYWE1LCAweGU4MDVkMjMxLCAweDQyODkyOWZiLCAweGI0ZmNkZjgyLCAweDRmYjY2YTUzLCAweDBlN2RjMTViLCAweDFmMDgxZmFiLCAweDEwODYxOGFlLCAweGZjZmQwODZkLCAweGY5ZmYyODg5LCAweDY5NGJjYzExLCAweDIzNmE1Y2FlLCAweDEyZGVjYTRkLCAweDJjM2Y4Y2M1LCAweGQyZDAyZGZlLCAweGY4ZWY1ODk2LCAweGU0Y2Y1MmRhLCAweDk1MTU1YjY3LCAweDQ5NGE0ODhjLCAweGI5YjZhODBjLCAweDVjOGY4MmJjLCAweDg5ZDM2YjQ1LCAweDNhNjA5NDM3LCAweGVjMDBjOWE5LCAweDQ0NzE1MjUzLCAweDBhODc0YjQ5LCAweGQ3NzNiYzQwLCAweDdjMzQ2NzFjLCAweDAyNzE3ZWY2LCAweDRmZWI1NTM2LCAweGEyZDAyZmZmLCAweGQyYmY2MGM0LCAweGQ0M2YwM2MwLCAweDUwYjRlZjZkLCAweDA3NDc4Y2QxLCAweDAwNmUxODg4LCAweGEyZTUzZjU1LCAweGI5ZTZkNGJjLCAweGEyMDQ4MDE2LCAweDk3NTczODMzLCAweGQ3MjA3ZDY3LCAweGRlMGY4ZjNkLCAweDcyZjg3YjMzLCAweGFiY2M0ZjMzLCAweDc2ODhjNTVkLCAweDdiMDBhNmIwLCAweDk0N2IwMDAxLCAweDU3MDA3NWQyLCAweGY5YmI4OGY4LCAweDg5NDIwMTllLCAweDQyNjRhNWZmLCAweDg1NjMwMmUwLCAweDcyZGJkOTJiLCAweGVlOTcxYjY5LCAweDZlYTIyZmRlLCAweDVmMDhhZTJiLCAweGFmN2E2MTZkLCAweGU1Yzk4NzY3LCAweGNmMWZlYmQyLCAweDYxZWZjOGMyLCAweGYxYWMyNTcxLCAweGNjODIzOWMyLCAweDY3MjE0Y2I4LCAweGIxZTU4M2QxLCAweGI3ZGMzZTYyLCAweDdmMTBiZGNlLCAweGY5MGE1YzM4LCAweDBmZjA0NDNkLCAweDYwNmU2ZGM2LCAweDYwNTQzYTQ5LCAweDU3MjdjMTQ4LCAweDJiZTk4YTFkLCAweDhhYjQxNzM4LCAweDIwZTFiZTI0LCAweGFmOTZkYTBmLCAweDY4NDU4NDI1LCAweDk5ODMzYmU1LCAweDYwMGQ0NTdkLCAweDI4MmY5MzUwLCAweDgzMzRiMzYyLCAweGQ5MWQxMTIwLCAweDJiNmQ4ZGEwLCAweDY0MmIxZTMxLCAweDljMzA1YTAwLCAweDUyYmNlNjg4LCAweDFiMDM1ODhhLCAweGY3YmFlZmQ1LCAweDQxNDJlZDljLCAweGE0MzE1YzExLCAweDgzMzIzZWM1LCAweGRmZWY0NjM2LCAweGExMzNjNTAxLCAweGU5ZDM1MzFjLCAweGVlMzUzNzgzXTtcblxuICBzQm94WzNdID0gWzB4OWRiMzA0MjAsIDB4MWZiNmU5ZGUsIDB4YTdiZTdiZWYsIDB4ZDI3M2EyOTgsIDB4NGE0ZjdiZGIsIDB4NjRhZDhjNTcsIDB4ODU1MTA0NDMsIDB4ZmEwMjBlZDEsIDB4N2UyODdhZmYsIDB4ZTYwZmI2NjMsIDB4MDk1ZjM1YTEsIDB4NzllYmYxMjAsIDB4ZmQwNTlkNDMsIDB4NjQ5N2I3YjEsIDB4ZjM2NDFmNjMsIDB4MjQxZTRhZGYsIDB4MjgxNDdmNWYsIDB4NGZhMmI4Y2QsIDB4Yzk0MzAwNDAsIDB4MGNjMzIyMjAsIDB4ZmRkMzBiMzAsIDB4YzBhNTM3NGYsIDB4MWQyZDAwZDksIDB4MjQxNDdiMTUsIDB4ZWU0ZDExMWEsIDB4MGZjYTUxNjcsIDB4NzFmZjkwNGMsIDB4MmQxOTVmZmUsIDB4MWEwNTY0NWYsIDB4MGMxM2ZlZmUsIDB4MDgxYjA4Y2EsIDB4MDUxNzAxMjEsIDB4ODA1MzAxMDAsIDB4ZTgzZTVlZmUsIDB4YWM5YWY0ZjgsIDB4N2ZlNzI3MDEsIDB4ZDJiOGVlNWYsIDB4MDZkZjQyNjEsIDB4YmI5ZTliOGEsIDB4NzI5M2VhMjUsIDB4Y2U4NGZmZGYsIDB4ZjU3MTg4MDEsIDB4M2RkNjRiMDQsIDB4YTI2ZjI2M2IsIDB4N2VkNDg0MDAsIDB4NTQ3ZWViZTYsIDB4NDQ2ZDRjYTAsIDB4NmNmM2Q2ZjUsIDB4MjY0OWFiZGYsIDB4YWVhMGM3ZjUsIDB4MzYzMzhjYzEsIDB4NTAzZjdlOTMsIDB4ZDM3NzIwNjEsIDB4MTFiNjM4ZTEsIDB4NzI1MDBlMDMsIDB4ZjgwZWIyYmIsIDB4YWJlMDUwMmUsIDB4ZWM4ZDc3ZGUsIDB4NTc5NzFlODEsIDB4ZTE0ZjY3NDYsIDB4YzkzMzU0MDAsIDB4NjkyMDMxOGYsIDB4MDgxZGJiOTksIDB4ZmZjMzA0YTUsIDB4NGQzNTE4MDUsIDB4N2YzZDVjZTMsIDB4YTZjODY2YzYsIDB4NWQ1YmNjYTksIDB4ZGFlYzZmZWEsIDB4OWY5MjZmOTEsIDB4OWY0NjIyMmYsIDB4Mzk5MTQ2N2QsIDB4YTViZjZkOGUsIDB4MTE0M2M0NGYsIDB4NDM5NTgzMDIsIDB4ZDAyMTRlZWIsIDB4MDIyMDgzYjgsIDB4M2ZiNjE4MGMsIDB4MThmODkzMWUsIDB4MjgxNjU4ZTYsIDB4MjY0ODZlM2UsIDB4OGJkNzhhNzAsIDB4NzQ3N2U0YzEsIDB4YjUwNmUwN2MsIDB4ZjMyZDBhMjUsIDB4NzkwOThiMDIsIDB4ZTRlYWJiODEsIDB4MjgxMjNiMjMsIDB4NjlkZWFkMzgsIDB4MTU3NGNhMTYsIDB4ZGY4NzFiNjIsIDB4MjExYzQwYjcsIDB4YTUxYTllZjksIDB4MDAxNDM3N2IsIDB4MDQxZThhYzgsIDB4MDkxMTQwMDMsIDB4YmQ1OWU0ZDIsIDB4ZTNkMTU2ZDUsIDB4NGZlODc2ZDUsIDB4MmY5MWEzNDAsIDB4NTU3YmU4ZGUsIDB4MDBlYWU0YTcsIDB4MGNlNWMyZWMsIDB4NGRiNGJiYTYsIDB4ZTc1NmJkZmYsIDB4ZGQzMzY5YWMsIDB4ZWMxN2IwMzUsIDB4MDY1NzIzMjcsIDB4OTlhZmM4YjAsIDB4NTZjOGMzOTEsIDB4NmI2NTgxMWMsIDB4NWUxNDYxMTksIDB4NmU4NWNiNzUsIDB4YmUwN2MwMDIsIDB4YzIzMjU1NzcsIDB4ODkzZmY0ZWMsIDB4NWJiZmM5MmQsIDB4ZDBlYzNiMjUsIDB4Yjc4MDFhYjcsIDB4OGQ2ZDNiMjQsIDB4MjBjNzYzZWYsIDB4YzM2NmE1ZmMsIDB4OWMzODI4ODAsIDB4MGFjZTMyMDUsIDB4YWFjOTU0OGEsIDB4ZWNhMWQ3YzcsIDB4MDQxYWZhMzIsIDB4MWQxNjYyNWEsIDB4NjcwMTkwMmMsIDB4OWI3NTdhNTQsIDB4MzFkNDc3ZjcsIDB4OTEyNmIwMzEsIDB4MzZjYzZmZGIsIDB4YzcwYjhiNDYsIDB4ZDllNjZhNDgsIDB4NTZlNTVhNzksIDB4MDI2YTRjZWIsIDB4NTI0MzdlZmYsIDB4MmY4Zjc2YjQsIDB4MGRmOTgwYTUsIDB4ODY3NGNkZTMsIDB4ZWRkYTA0ZWIsIDB4MTdhOWJlMDQsIDB4MmMxOGY0ZGYsIDB4Yjc3NDdmOWQsIDB4YWIyYWY3YjQsIDB4ZWZjMzRkMjAsIDB4MmUwOTZiN2MsIDB4MTc0MWEyNTQsIDB4ZTViNmEwMzUsIDB4MjEzZDQyZjYsIDB4MmMxYzdjMjYsIDB4NjFjMmY1MGYsIDB4NjU1MmRhZjksIDB4ZDJjMjMxZjgsIDB4MjUxMzBmNjksIDB4ZDgxNjdmYTIsIDB4MDQxOGYyYzgsIDB4MDAxYTk2YTYsIDB4MGQxNTI2YWIsIDB4NjMzMTVjMjEsIDB4NWUwYTcyZWMsIDB4NDliYWZlZmQsIDB4MTg3OTA4ZDksIDB4OGQwZGJkODYsIDB4MzExMTcwYTcsIDB4M2U5YjY0MGMsIDB4Y2MzZTEwZDcsIDB4ZDVjYWQzYjYsIDB4MGNhZWMzODgsIDB4ZjczMDAxZTEsIDB4NmM3MjhhZmYsIDB4NzFlYWUyYTEsIDB4MWY5YWYzNmUsIDB4Y2ZjYmQxMmYsIDB4YzFkZTg0MTcsIDB4YWMwN2JlNmIsIDB4Y2I0NGExZDgsIDB4OGI5YjBmNTYsIDB4MDEzOTg4YzMsIDB4YjFjNTJmY2EsIDB4YjRiZTMxY2QsIDB4ZDg3ODI4MDYsIDB4MTJhM2E0ZTIsIDB4NmY3ZGU1MzIsIDB4NThmZDdlYjYsIDB4ZDAxZWU5MDAsIDB4MjRhZGZmYzIsIDB4ZjQ5OTBmYzUsIDB4OTcxMWFhYzUsIDB4MDAxZDdiOTUsIDB4ODJlNWU3ZDIsIDB4MTA5ODczZjYsIDB4MDA2MTMwOTYsIDB4YzMyZDk1MjEsIDB4YWRhMTIxZmYsIDB4Mjk5MDg0MTUsIDB4N2ZiYjk3N2YsIDB4YWY5ZWIzZGIsIDB4MjljOWVkMmEsIDB4NWNlMmE0NjUsIDB4YTczMGYzMmMsIDB4ZDBhYTNmZTgsIDB4OGE1Y2MwOTEsIDB4ZDQ5ZTJjZTcsIDB4MGNlNDU0YTksIDB4ZDYwYWNkODYsIDB4MDE1ZjE5MTksIDB4NzcwNzkxMDMsIDB4ZGVhMDNhZjYsIDB4NzhhODU2NWUsIDB4ZGVlMzU2ZGYsIDB4MjFmMDVjYmUsIDB4OGI3NWUzODcsIDB4YjNjNTA2NTEsIDB4YjhhNWMzZWYsIDB4ZDhlZWI2ZDIsIDB4ZTUyM2JlNzcsIDB4YzIxNTQ1MjksIDB4MmY2OWVmZGYsIDB4YWZlNjdhZmIsIDB4ZjQ3MGM0YjIsIDB4ZjNlMGViNWIsIDB4ZDZjYzk4NzYsIDB4MzllNDQ2MGMsIDB4MWZkYTg1MzgsIDB4MTk4NzgzMmYsIDB4Y2EwMDczNjcsIDB4YTk5MTQ0ZjgsIDB4Mjk2YjI5OWUsIDB4NDkyZmMyOTUsIDB4OTI2NmJlYWIsIDB4YjU2NzZlNjksIDB4OWJkM2RkZGEsIDB4ZGY3ZTA1MmYsIDB4ZGIyNTcwMWMsIDB4MWI1ZTUxZWUsIDB4ZjY1MzI0ZTYsIDB4NmFmY2UzNmMsIDB4MDMxNmNjMDQsIDB4ODY0NDIxM2UsIDB4YjdkYzU5ZDAsIDB4Nzk2NTI5MWYsIDB4Y2NkNmZkNDMsIDB4NDE4MjM5NzksIDB4OTMyYmNkZjYsIDB4YjY1N2MzNGQsIDB4NGVkZmQyODIsIDB4N2FlNTI5MGMsIDB4M2NiOTUzNmIsIDB4ODUxZTIwZmUsIDB4OTgzMzU1N2UsIDB4MTNlY2YwYjAsIDB4ZDNmZmIzNzIsIDB4M2Y4NWM1YzEsIDB4MGFlZjdlZDJdO1xuXG4gIHNCb3hbNF0gPSBbMHg3ZWM5MGMwNCwgMHgyYzZlNzRiOSwgMHg5YjBlNjZkZiwgMHhhNjMzNzkxMSwgMHhiODZhN2ZmZiwgMHgxZGQzNThmNSwgMHg0NGRkOWQ0NCwgMHgxNzMxMTY3ZiwgMHgwOGZiZjFmYSwgMHhlN2Y1MTFjYywgMHhkMjA1MWIwMCwgMHg3MzVhYmEwMCwgMHgyYWI3MjJkOCwgMHgzODYzODFjYiwgMHhhY2Y2MjQzYSwgMHg2OWJlZmQ3YSwgMHhlNmEyZTc3ZiwgMHhmMGM3MjBjZCwgMHhjNDQ5NDgxNiwgMHhjY2Y1YzE4MCwgMHgzODg1MTY0MCwgMHgxNWIwYTg0OCwgMHhlNjhiMThjYiwgMHg0Y2FhZGVmZiwgMHg1ZjQ4MGEwMSwgMHgwNDEyYjJhYSwgMHgyNTk4MTRmYywgMHg0MWQwZWZlMiwgMHg0ZTQwYjQ4ZCwgMHgyNDhlYjZmYiwgMHg4ZGJhMWNmZSwgMHg0MWE5OWIwMiwgMHgxYTU1MGEwNCwgMHhiYThmNjVjYiwgMHg3MjUxZjRlNywgMHg5NWE1MTcyNSwgMHhjMTA2ZWNkNywgMHg5N2E1OTgwYSwgMHhjNTM5YjlhYSwgMHg0ZDc5ZmU2YSwgMHhmMmYzZjc2MywgMHg2OGFmODA0MCwgMHhlZDBjOWU1NiwgMHgxMWI0OTU4YiwgMHhlMWViNWE4OCwgMHg4NzA5ZTZiMCwgMHhkN2UwNzE1NiwgMHg0ZTI5ZmVhNywgMHg2MzY2ZTUyZCwgMHgwMmQxYzAwMCwgMHhjNGFjOGUwNSwgMHg5Mzc3ZjU3MSwgMHgwYzA1MzcyYSwgMHg1Nzg1MzVmMiwgMHgyMjYxYmUwMiwgMHhkNjQyYTBjOSwgMHhkZjEzYTI4MCwgMHg3NGI1NWJkMiwgMHg2ODIxOTljMCwgMHhkNDIxZTVlYywgMHg1M2ZiM2NlOCwgMHhjOGFkZWRiMywgMHgyOGE4N2ZjOSwgMHgzZDk1OTk4MSwgMHg1YzFmZjkwMCwgMHhmZTM4ZDM5OSwgMHgwYzRlZmYwYiwgMHgwNjI0MDdlYSwgMHhhYTJmNGZiMSwgMHg0ZmI5Njk3NiwgMHg5MGM3OTUwNSwgMHhiMGE4YTc3NCwgMHhlZjU1YTFmZiwgMHhlNTljYTJjMiwgMHhhNmI2MmQyNywgMHhlNjZhNDI2MywgMHhkZjY1MDAxZiwgMHgwZWM1MDk2NiwgMHhkZmRkNTViYywgMHgyOWRlMDY1NSwgMHg5MTFlNzM5YSwgMHgxN2FmODk3NSwgMHgzMmM3OTExYywgMHg4OWY4OTQ2OCwgMHgwZDAxZTk4MCwgMHg1MjQ3NTVmNCwgMHgwM2I2M2NjOSwgMHgwY2M4NDRiMiwgMHhiY2YzZjBhYSwgMHg4N2FjMzZlOSwgMHhlNTNhNzQyNiwgMHgwMWIzZDgyYiwgMHgxYTllNzQ0OSwgMHg2NGVlMmQ3ZSwgMHhjZGRiYjFkYSwgMHgwMWM5NDkxMCwgMHhiODY4YmY4MCwgMHgwZDI2ZjNmZCwgMHg5MzQyZWRlNywgMHgwNGE1YzI4NCwgMHg2MzY3MzdiNiwgMHg1MGY1YjYxNiwgMHhmMjQ3NjZlMywgMHg4ZWNhMzZjMSwgMHgxMzZlMDVkYiwgMHhmZWYxODM5MSwgMHhmYjg4N2EzNywgMHhkNmU3ZjdkNCwgMHhjN2ZiN2RjOSwgMHgzMDYzZmNkZiwgMHhiNmY1ODlkZSwgMHhlYzI5NDFkYSwgMHgyNmU0NjY5NSwgMHhiNzU2NjQxOSwgMHhmNjU0ZWZjNSwgMHhkMDhkNThiNywgMHg0ODkyNTQwMSwgMHhjMWJhY2I3ZiwgMHhlNWZmNTUwZiwgMHhiNjA4MzA0OSwgMHg1YmI1ZDBlOCwgMHg4N2Q3MmU1YSwgMHhhYjZhNmVlMSwgMHgyMjNhNjZjZSwgMHhjNjJiZjNjZCwgMHg5ZTA4ODVmOSwgMHg2OGNiM2U0NywgMHgwODZjMDEwZiwgMHhhMjFkZTgyMCwgMHhkMThiNjlkZSwgMHhmM2Y2NTc3NywgMHhmYTAyYzNmNiwgMHg0MDdlZGFjMywgMHhjYmIzZDU1MCwgMHgxNzkzMDg0ZCwgMHhiMGQ3MGViYSwgMHgwYWIzNzhkNSwgMHhkOTUxZmIwYywgMHhkZWQ3ZGE1NiwgMHg0MTI0YmJlNCwgMHg5NGNhMGI1NiwgMHgwZjU3NTVkMSwgMHhlMGUxZTU2ZSwgMHg2MTg0YjViZSwgMHg1ODBhMjQ5ZiwgMHg5NGY3NGJjMCwgMHhlMzI3ODg4ZSwgMHg5ZjdiNTU2MSwgMHhjM2RjMDI4MCwgMHgwNTY4NzcxNSwgMHg2NDZjNmJkNywgMHg0NDkwNGRiMywgMHg2NmI0ZjBhMywgMHhjMGYxNjQ4YSwgMHg2OTdlZDVhZiwgMHg0OWU5MmZmNiwgMHgzMDllMzc0ZiwgMHgyY2I2MzU2YSwgMHg4NTgwODU3MywgMHg0OTkxZjg0MCwgMHg3NmYwYWUwMiwgMHgwODNiZTg0ZCwgMHgyODQyMWM5YSwgMHg0NDQ4OTQwNiwgMHg3MzZlNGNiOCwgMHhjMTA5MjkxMCwgMHg4YmM5NWZjNiwgMHg3ZDg2OWNmNCwgMHgxMzRmNjE2ZiwgMHgyZTc3MTE4ZCwgMHhiMzFiMmJlMSwgMHhhYTkwYjQ3MiwgMHgzY2E1ZDcxNywgMHg3ZDE2MWJiYSwgMHg5Y2FkOTAxMCwgMHhhZjQ2MmJhMiwgMHg5ZmU0NTlkMiwgMHg0NWQzNDU1OSwgMHhkOWYyZGExMywgMHhkYmM2NTQ4NywgMHhmM2U0Zjk0ZSwgMHgxNzZkNDg2ZiwgMHgwOTdjMTNlYSwgMHg2MzFkYTVjNywgMHg0NDVmNzM4MiwgMHgxNzU2ODNmNCwgMHhjZGM2NmE5NywgMHg3MGJlMDI4OCwgMHhiM2NkY2Y3MiwgMHg2ZTVkZDJmMywgMHgyMDkzNjA3OSwgMHg0NTliODBhNSwgMHhiZTYwZTJkYiwgMHhhOWMyMzEwMSwgMHhlYmE1MzE1YywgMHgyMjRlNDJmMiwgMHgxYzVjMTU3MiwgMHhmNjcyMWIyYywgMHgxYWQyZmZmMywgMHg4YzI1NDA0ZSwgMHgzMjRlZDcyZiwgMHg0MDY3YjdmZCwgMHgwNTIzMTM4ZSwgMHg1Y2EzYmM3OCwgMHhkYzBmZDY2ZSwgMHg3NTkyMjI4MywgMHg3ODRkNmIxNywgMHg1OGViYjE2ZSwgMHg0NDA5NGY4NSwgMHgzZjQ4MWQ4NywgMHhmY2ZlYWU3YiwgMHg3N2I1ZmY3NiwgMHg4YzIzMDJiZiwgMHhhYWY0NzU1NiwgMHg1ZjQ2YjAyYSwgMHgyYjA5MjgwMSwgMHgzZDM4ZjVmNywgMHgwY2E4MWYzNiwgMHg1MmFmNGE4YSwgMHg2NmQ1ZTdjMCwgMHhkZjNiMDg3NCwgMHg5NTA1NTExMCwgMHgxYjVhZDdhOCwgMHhmNjFlZDVhZCwgMHg2Y2Y2ZTQ3OSwgMHgyMDc1ODE4NCwgMHhkMGNlZmE2NSwgMHg4OGY3YmU1OCwgMHg0YTA0NjgyNiwgMHgwZmY2ZjhmMywgMHhhMDljN2Y3MCwgMHg1MzQ2YWJhMCwgMHg1Y2U5NmMyOCwgMHhlMTc2ZWRhMywgMHg2YmFjMzA3ZiwgMHgzNzY4MjlkMiwgMHg4NTM2MGZhOSwgMHgxN2UzZmUyYSwgMHgyNGI3OTc2NywgMHhmNWE5NmIyMCwgMHhkNmNkMjU5NSwgMHg2OGZmMWViZiwgMHg3NTU1NDQyYywgMHhmMTlmMDZiZSwgMHhmOWUwNjU5YSwgMHhlZWI5NDkxZCwgMHgzNDAxMDcxOCwgMHhiYjMwY2FiOCwgMHhlODIyZmUxNSwgMHg4ODU3MDk4MywgMHg3NTBlNjI0OSwgMHhkYTYyN2U1NSwgMHg1ZTc2ZmZhOCwgMHhiMTUzNDU0NiwgMHg2ZDQ3ZGUwOCwgMHhlZmU5ZTdkNF07XG5cbiAgc0JveFs1XSA9IFsweGY2ZmE4ZjlkLCAweDJjYWM2Y2UxLCAweDRjYTM0ODY3LCAweGUyMzM3ZjdjLCAweDk1ZGIwOGU3LCAweDAxNjg0M2I0LCAweGVjZWQ1Y2JjLCAweDMyNTU1M2FjLCAweGJmOWYwOTYwLCAweGRmYTFlMmVkLCAweDgzZjA1NzlkLCAweDYzZWQ4NmI5LCAweDFhYjZhNmI4LCAweGRlNWViZTM5LCAweGYzOGZmNzMyLCAweDg5ODliMTM4LCAweDMzZjE0OTYxLCAweGMwMTkzN2JkLCAweGY1MDZjNmRhLCAweGU0NjI1ZTdlLCAweGEzMDhlYTk5LCAweDRlMjNlMzNjLCAweDc5Y2JkN2NjLCAweDQ4YTE0MzY3LCAweGEzMTQ5NjE5LCAweGZlYzk0YmQ1LCAweGExMTQxNzRhLCAweGVhYTAxODY2LCAweGEwODRkYjJkLCAweDA5YTg0ODZmLCAweGE4ODg2MTRhLCAweDI5MDBhZjk4LCAweDAxNjY1OTkxLCAweGUxOTkyODYzLCAweGM4ZjMwYzYwLCAweDJlNzhlZjNjLCAweGQwZDUxOTMyLCAweGNmMGZlYzE0LCAweGY3Y2EwN2QyLCAweGQwYTgyMDcyLCAweGZkNDExOTdlLCAweDkzMDVhNmIwLCAweGU4NmJlM2RhLCAweDc0YmVkM2NkLCAweDM3MmRhNTNjLCAweDRjN2Y0NDQ4LCAweGRhYjVkNDQwLCAweDZkYmEwZWMzLCAweDA4MzkxOWE3LCAweDlmYmFlZWQ5LCAweDQ5ZGJjZmIwLCAweDRlNjcwYzUzLCAweDVjM2Q5YzAxLCAweDY0YmRiOTQxLCAweDJjMGU2MzZhLCAweGJhN2RkOWNkLCAweGVhNmY3Mzg4LCAweGU3MGJjNzYyLCAweDM1ZjI5YWRiLCAweDVjNGNkZDhkLCAweGYwZDQ4ZDhjLCAweGI4ODE1M2UyLCAweDA4YTE5ODY2LCAweDFhZTJlYWM4LCAweDI4NGNhZjg5LCAweGFhOTI4MjIzLCAweDkzMzRiZTUzLCAweDNiM2EyMWJmLCAweDE2NDM0YmUzLCAweDlhZWEzOTA2LCAweGVmZThjMzZlLCAweGY4OTBjZGQ5LCAweDgwMjI2ZGFlLCAweGMzNDBhNGEzLCAweGRmN2U5YzA5LCAweGE2OTRhODA3LCAweDViN2M1ZWNjLCAweDIyMWRiM2E2LCAweDlhNjlhMDJmLCAweDY4ODE4YTU0LCAweGNlYjIyOTZmLCAweDUzYzA4NDNhLCAweGZlODkzNjU1LCAweDI1YmZlNjhhLCAweGI0NjI4YWJjLCAweGNmMjIyZWJmLCAweDI1YWM2ZjQ4LCAweGE5YTk5Mzg3LCAweDUzYmRkYjY1LCAweGU3NmZmYmU3LCAweGU5NjdmZDc4LCAweDBiYTkzNTYzLCAweDhlMzQyYmMxLCAweGU4YTExYmU5LCAweDQ5ODA3NDBkLCAweGM4MDg3ZGZjLCAweDhkZTRiZjk5LCAweGExMTEwMWEwLCAweDdmZDM3OTc1LCAweGRhNWEyNmMwLCAweGU4MWY5OTRmLCAweDk1MjhjZDg5LCAweGZkMzM5ZmVkLCAweGI4NzgzNGJmLCAweDVmMDQ0NTZkLCAweDIyMjU4Njk4LCAweGM5YzRjODNiLCAweDJkYzE1NmJlLCAweDRmNjI4ZGFhLCAweDU3ZjU1ZWM1LCAweGUyMjIwYWJlLCAweGQyOTE2ZWJmLCAweDRlYzc1Yjk1LCAweDI0ZjJjM2MwLCAweDQyZDE1ZDk5LCAweGNkMGQ3ZmEwLCAweDdiNmUyN2ZmLCAweGE4ZGM4YWYwLCAweDczNDVjMTA2LCAweGY0MWUyMzJmLCAweDM1MTYyMzg2LCAweGU2ZWE4OTI2LCAweDMzMzNiMDk0LCAweDE1N2VjNmYyLCAweDM3MmI3NGFmLCAweDY5MjU3M2U0LCAweGU5YTlkODQ4LCAweGYzMTYwMjg5LCAweDNhNjJlZjFkLCAweGE3ODdlMjM4LCAweGYzYTVmNjc2LCAweDc0MzY0ODUzLCAweDIwOTUxMDYzLCAweDQ1NzY2OThkLCAweGI2ZmFkNDA3LCAweDU5MmFmOTUwLCAweDM2ZjczNTIzLCAweDRjZmI2ZTg3LCAweDdkYTRjZWMwLCAweDZjMTUyZGFhLCAweGNiMDM5NmE4LCAweGM1MGRmZTVkLCAweGZjZDcwN2FiLCAweDA5MjFjNDJmLCAweDg5ZGZmMGJiLCAweDVmZTJiZTc4LCAweDQ0OGY0ZjMzLCAweDc1NDYxM2M5LCAweDJiMDVkMDhkLCAweDQ4YjlkNTg1LCAweGRjMDQ5NDQxLCAweGM4MDk4ZjliLCAweDdkZWRlNzg2LCAweGMzOWEzMzczLCAweDQyNDEwMDA1LCAweDZhMDkxNzUxLCAweDBlZjNjOGE2LCAweDg5MDA3MmQ2LCAweDI4MjA3NjgyLCAweGE5YTlmN2JlLCAweGJmMzI2NzlkLCAweGQ0NWI1Yjc1LCAweGIzNTNmZDAwLCAweGNiYjBlMzU4LCAweDgzMGYyMjBhLCAweDFmOGZiMjE0LCAweGQzNzJjZjA4LCAweGNjM2M0YTEzLCAweDhjZjYzMTY2LCAweDA2MWM4N2JlLCAweDg4Yzk4Zjg4LCAweDYwNjJlMzk3LCAweDQ3Y2Y4ZTdhLCAweGI2Yzg1MjgzLCAweDNjYzJhY2ZiLCAweDNmYzA2OTc2LCAweDRlOGYwMjUyLCAweDY0ZDgzMTRkLCAweGRhMzg3MGUzLCAweDFlNjY1NDU5LCAweGMxMDkwOGYwLCAweDUxMzAyMWE1LCAweDZjNWI2OGI3LCAweDgyMmY4YWEwLCAweDMwMDdjZDNlLCAweDc0NzE5ZWVmLCAweGRjODcyNjgxLCAweDA3MzM0MGQ0LCAweDdlNDMyZmQ5LCAweDBjNWVjMjQxLCAweDg4MDkyODZjLCAweGY1OTJkODkxLCAweDA4YTkzMGY2LCAweDk1N2VmMzA1LCAweGI3ZmJmZmJkLCAweGMyNjZlOTZmLCAweDZmZTRhYzk4LCAweGIxNzNlY2MwLCAweGJjNjBiNDJhLCAweDk1MzQ5OGRhLCAweGZiYTFhZTEyLCAweDJkNGJkNzM2LCAweDBmMjVmYWFiLCAweGE0ZjNmY2ViLCAweGUyOTY5MTIzLCAweDI1N2YwYzNkLCAweDkzNDhhZjQ5LCAweDM2MTQwMGJjLCAweGU4ODE2ZjRhLCAweDM4MTRmMjAwLCAweGEzZjk0MDQzLCAweDljN2E1NGMyLCAweGJjNzA0ZjU3LCAweGRhNDFlN2Y5LCAweGMyNWFkMzNhLCAweDU0ZjRhMDg0LCAweGIxN2Y1NTA1LCAweDU5MzU3Y2JlLCAweGVkYmQxNWM4LCAweDdmOTdjNWFiLCAweGJhNWFjN2I1LCAweGI2ZjZkZWFmLCAweDNhNDc5YzNhLCAweDUzMDJkYTI1LCAweDY1M2Q3ZTZhLCAweDU0MjY4ZDQ5LCAweDUxYTQ3N2VhLCAweDUwMTdkNTViLCAweGQ3ZDI1ZDg4LCAweDQ0MTM2Yzc2LCAweDA0MDRhOGM4LCAweGI4ZTVhMTIxLCAweGI4MWE5MjhhLCAweDYwZWQ1ODY5LCAweDk3YzU1Yjk2LCAweGVhZWM5OTFiLCAweDI5OTM1OTEzLCAweDAxZmRiN2YxLCAweDA4OGU4ZGZhLCAweDlhYjZmNmY1LCAweDNiNGNiZjlmLCAweDRhNWRlM2FiLCAweGU2MDUxZDM1LCAweGEwZTFkODU1LCAweGQzNmI0Y2YxLCAweGY1NDRlZGViLCAweGIwZTkzNTI0LCAweGJlYmI4ZmJkLCAweGEyZDc2MmNmLCAweDQ5YzkyZjU0LCAweDM4YjVmMzMxLCAweDcxMjhhNDU0LCAweDQ4MzkyOTA1LCAweGE2NWIxZGI4LCAweDg1MWM5N2JkLCAweGQ2NzVjZjJmXTtcblxuICBzQm94WzZdID0gWzB4ODVlMDQwMTksIDB4MzMyYmY1NjcsIDB4NjYyZGJmZmYsIDB4Y2ZjNjU2OTMsIDB4MmE4ZDdmNmYsIDB4YWI5YmM5MTIsIDB4ZGU2MDA4YTEsIDB4MjAyOGRhMWYsIDB4MDIyN2JjZTcsIDB4NGQ2NDI5MTYsIDB4MThmYWMzMDAsIDB4NTBmMThiODIsIDB4MmNiMmNiMTEsIDB4YjIzMmU3NWMsIDB4NGIzNjk1ZjIsIDB4YjI4NzA3ZGUsIDB4YTA1ZmJjZjYsIDB4Y2Q0MTgxZTksIDB4ZTE1MDIxMGMsIDB4ZTI0ZWYxYmQsIDB4YjE2OGMzODEsIDB4ZmRlNGU3ODksIDB4NWM3OWIwZDgsIDB4MWU4YmZkNDMsIDB4NGQ0OTUwMDEsIDB4MzhiZTQzNDEsIDB4OTEzY2VlMWQsIDB4OTJhNzljM2YsIDB4MDg5NzY2YmUsIDB4YmFlZWFkZjQsIDB4MTI4NmJlY2YsIDB4YjZlYWNiMTksIDB4MjY2MGMyMDAsIDB4NzU2NWJkZTQsIDB4NjQyNDFmN2EsIDB4ODI0OGRjYTksIDB4YzNiM2FkNjYsIDB4MjgxMzYwODYsIDB4MGJkOGRmYTgsIDB4MzU2ZDFjZjIsIDB4MTA3Nzg5YmUsIDB4YjNiMmU5Y2UsIDB4MDUwMmFhOGYsIDB4MGJjMDM1MWUsIDB4MTY2YmY1MmEsIDB4ZWIxMmZmODIsIDB4ZTM0ODY5MTEsIDB4ZDM0ZDc1MTYsIDB4NGU3YjNhZmYsIDB4NWY0MzY3MWIsIDB4OWNmNmUwMzcsIDB4NDk4MWFjODMsIDB4MzM0MjY2Y2UsIDB4OGM5MzQxYjcsIDB4ZDBkODU0YzAsIDB4Y2IzYTZjODgsIDB4NDdiYzI4MjksIDB4NDcyNWJhMzcsIDB4YTY2YWQyMmIsIDB4N2FkNjFmMWUsIDB4MGM1Y2JhZmEsIDB4NDQzN2YxMDcsIDB4YjZlNzk5NjIsIDB4NDJkMmQ4MTYsIDB4MGE5NjEyODgsIDB4ZTFhNWMwNmUsIDB4MTM3NDllNjcsIDB4NzJmYzA4MWEsIDB4YjFkMTM5ZjcsIDB4Zjk1ODM3NDUsIDB4Y2YxOWRmNTgsIDB4YmVjM2Y3NTYsIDB4YzA2ZWJhMzAsIDB4MDcyMTFiMjQsIDB4NDVjMjg4MjksIDB4Yzk1ZTMxN2YsIDB4YmM4ZWM1MTEsIDB4MzhiYzQ2ZTksIDB4YzZlNmZhMTQsIDB4YmFlODU4NGEsIDB4YWQ0ZWJjNDYsIDB4NDY4ZjUwOGIsIDB4NzgyOTQzNWYsIDB4ZjEyNDE4M2IsIDB4ODIxZGJhOWYsIDB4YWZmNjBmZjQsIDB4ZWEyYzRlNmQsIDB4MTZlMzkyNjQsIDB4OTI1NDRhOGIsIDB4MDA5YjRmYzMsIDB4YWJhNjhjZWQsIDB4OWFjOTZmNzgsIDB4MDZhNWI3OWEsIDB4YjI4NTZlNmUsIDB4MWFlYzNjYTksIDB4YmU4Mzg2ODgsIDB4MGUwODA0ZTksIDB4NTVmMWJlNTYsIDB4ZTdlNTM2M2IsIDB4YjNhMWYyNWQsIDB4ZjdkZWJiODUsIDB4NjFmZTAzM2MsIDB4MTY3NDYyMzMsIDB4M2MwMzRjMjgsIDB4ZGE2ZDBjNzQsIDB4NzlhYWM1NmMsIDB4M2NlNGUxYWQsIDB4NTFmMGM4MDIsIDB4OThmOGYzNWEsIDB4MTYyNmE0OWYsIDB4ZWVkODJiMjksIDB4MWQzODJmZTMsIDB4MGM0ZmI5OWEsIDB4YmIzMjU3NzgsIDB4M2VjNmQ5N2IsIDB4NmU3N2E2YTksIDB4Y2I2NThiNWMsIDB4ZDQ1MjMwYzcsIDB4MmJkMTQwOGIsIDB4NjBjMDNlYjcsIDB4YjkwNjhkNzgsIDB4YTMzNzU0ZjQsIDB4ZjQzMGM4N2QsIDB4YzhhNzEzMDIsIDB4Yjk2ZDhjMzIsIDB4ZWJkNGU3YmUsIDB4YmU4YjlkMmQsIDB4Nzk3OWZiMDYsIDB4ZTcyMjUzMDgsIDB4OGI3NWNmNzcsIDB4MTFlZjhkYTQsIDB4ZTA4M2M4NTgsIDB4OGQ2Yjc4NmYsIDB4NWE2MzE3YTYsIDB4ZmE1Y2Y3YTAsIDB4NWRkYTAwMzMsIDB4ZjI4ZWJmYjAsIDB4ZjViOWMzMTAsIDB4YTBlYWMyODAsIDB4MDhiOTc2N2EsIDB4YTNkOWQyYjAsIDB4NzlkMzQyMTcsIDB4MDIxYTcxOGQsIDB4OWFjNjMzNmEsIDB4MjcxMWZkNjAsIDB4NDM4MDUwZTMsIDB4MDY5OTA4YTgsIDB4M2Q3ZmVkYzQsIDB4ODI2ZDJiZWYsIDB4NGVlYjg0NzYsIDB4NDg4ZGNmMjUsIDB4MzZjOWQ1NjYsIDB4MjhlNzRlNDEsIDB4YzI2MTBhY2EsIDB4M2Q0OWE5Y2YsIDB4YmFlM2I5ZGYsIDB4YjY1ZjhkZTYsIDB4OTJhZWFmNjQsIDB4M2FjN2Q1ZTYsIDB4OWVhODA1MDksIDB4ZjIyYjAxN2QsIDB4YTQxNzNmNzAsIDB4ZGQxZTE2YzMsIDB4MTVlMGQ3ZjksIDB4NTBiMWI4ODcsIDB4MmI5ZjRmZDUsIDB4NjI1YWJhODIsIDB4NmEwMTc5NjIsIDB4MmVjMDFiOWMsIDB4MTU0ODhhYTksIDB4ZDcxNmU3NDAsIDB4NDAwNTVhMmMsIDB4OTNkMjlhMjIsIDB4ZTMyZGJmOWEsIDB4MDU4NzQ1YjksIDB4MzQ1M2RjMWUsIDB4ZDY5OTI5NmUsIDB4NDk2Y2ZmNmYsIDB4MWM5ZjQ5ODYsIDB4ZGZlMmVkMDcsIDB4Yjg3MjQyZDEsIDB4MTlkZTdlYWUsIDB4MDUzZTU2MWEsIDB4MTVhZDZmOGMsIDB4NjY2MjZjMWMsIDB4NzE1NGMyNGMsIDB4ZWEwODJiMmEsIDB4OTNlYjI5MzksIDB4MTdkY2IwZjAsIDB4NThkNGYyYWUsIDB4OWVhMjk0ZmIsIDB4NTJjZjU2NGMsIDB4OTg4M2ZlNjYsIDB4MmVjNDA1ODEsIDB4NzYzOTUzYzMsIDB4MDFkNjY5MmUsIDB4ZDNhMGMxMDgsIDB4YTFlNzE2MGUsIDB4ZTRmMmRmYTYsIDB4NjkzZWQyODUsIDB4NzQ5MDQ2OTgsIDB4NGMyYjBlZGQsIDB4NGY3NTc2NTYsIDB4NWQzOTMzNzgsIDB4YTEzMjIzNGYsIDB4M2QzMjFjNWQsIDB4YzNmNWUxOTQsIDB4NGIyNjkzMDEsIDB4Yzc5ZjAyMmYsIDB4M2M5OTdlN2UsIDB4NWU0Zjk1MDQsIDB4M2ZmYWZiYmQsIDB4NzZmN2FkMGUsIDB4Mjk2NjkzZjQsIDB4M2QxZmNlNmYsIDB4YzYxZTQ1YmUsIDB4ZDNiNWFiMzQsIDB4ZjcyYmY5YjcsIDB4MWIwNDM0YzAsIDB4NGU3MmI1NjcsIDB4NTU5MmEzM2QsIDB4YjUyMjkzMDEsIDB4Y2ZkMmE4N2YsIDB4NjBhZWI3NjcsIDB4MTgxNDM4NmIsIDB4MzBiY2MzM2QsIDB4MzhhMGMwN2QsIDB4ZmQxNjA2ZjIsIDB4YzM2MzUxOWIsIDB4NTg5ZGQzOTAsIDB4NTQ3OWY4ZTYsIDB4MWNiOGQ2NDcsIDB4OTdmZDYxYTksIDB4ZWE3NzU5ZjQsIDB4MmQ1NzUzOWQsIDB4NTY5YTU4Y2YsIDB4ZTg0ZTYzYWQsIDB4NDYyZTFiNzgsIDB4NjU4MGY4N2UsIDB4ZjM4MTc5MTQsIDB4OTFkYTU1ZjQsIDB4NDBhMjMwZjMsIDB4ZDE5ODhmMzUsIDB4YjZlMzE4ZDIsIDB4M2ZmYTUwYmMsIDB4M2Q0MGYwMjEsIDB4YzNjMGJkYWUsIDB4NDk1OGMyNGMsIDB4NTE4ZjM2YjIsIDB4ODRiMWQzNzAsIDB4MGZlZGNlODMsIDB4ODc4ZGRhZGEsIDB4ZjJhMjc5YzcsIDB4OTRlMDFiZTgsIDB4OTA3MTZmNGIsIDB4OTU0YjhhYTNdO1xuXG4gIHNCb3hbN10gPSBbMHhlMjE2MzAwZCwgMHhiYmRkZmZmYywgMHhhN2ViZGFiZCwgMHgzNTY0ODA5NSwgMHg3Nzg5ZjhiNywgMHhlNmMxMTIxYiwgMHgwZTI0MTYwMCwgMHgwNTJjZThiNSwgMHgxMWE5Y2ZiMCwgMHhlNTk1MmYxMSwgMHhlY2U3OTkwYSwgMHg5Mzg2ZDE3NCwgMHgyYTQyOTMxYywgMHg3NmUzODExMSwgMHhiMTJkZWYzYSwgMHgzN2RkZGRmYywgMHhkZTlhZGViMSwgMHgwYTBjYzMyYywgMHhiZTE5NzAyOSwgMHg4NGEwMDk0MCwgMHhiYjI0M2EwZiwgMHhiNGQxMzdjZiwgMHhiNDRlNzlmMCwgMHgwNDllZWRmZCwgMHgwYjE1YTE1ZCwgMHg0ODBkMzE2OCwgMHg4YmJiZGU1YSwgMHg2NjlkZWQ0MiwgMHhjN2VjZTgzMSwgMHgzZjhmOTVlNywgMHg3MmRmMTkxYiwgMHg3NTgwMzMwZCwgMHg5NDA3NDI1MSwgMHg1YzdkY2RmYSwgMHhhYmJlNmQ2MywgMHhhYTQwMjE2NCwgMHhiMzAxZDQwYSwgMHgwMmU3ZDFjYSwgMHg1MzU3MWRhZSwgMHg3YTMxODJhMiwgMHgxMmE4ZGRlYywgMHhmZGFhMzM1ZCwgMHgxNzZmNDNlOCwgMHg3MWZiNDZkNCwgMHgzODEyOTAyMiwgMHhjZTk0OWFkNCwgMHhiODQ3NjlhZCwgMHg5NjViZDg2MiwgMHg4MmYzZDA1NSwgMHg2NmZiOTc2NywgMHgxNWI4MGI0ZSwgMHgxZDViNDdhMCwgMHg0Y2ZkZTA2ZiwgMHhjMjhlYzRiOCwgMHg1N2U4NzI2ZSwgMHg2NDdhNzhmYywgMHg5OTg2NWQ0NCwgMHg2MDhiZDU5MywgMHg2YzIwMGUwMywgMHgzOWRjNWZmNiwgMHg1ZDBiMDBhMywgMHhhZTYzYWZmMiwgMHg3ZThiZDYzMiwgMHg3MDEwOGMwYywgMHhiYmQzNTA0OSwgMHgyOTk4ZGYwNCwgMHg5ODBjZjQyYSwgMHg5YjZkZjQ5MSwgMHg5ZTdlZGQ1MywgMHgwNjkxODU0OCwgMHg1OGNiN2UwNywgMHgzYjc0ZWYyZSwgMHg1MjJmZmZiMSwgMHhkMjQ3MDhjYywgMHgxYzdlMjdjZCwgMHhhNGViMjE1YiwgMHgzY2YxZDJlMiwgMHgxOWI0N2EzOCwgMHg0MjRmNzYxOCwgMHgzNTg1NjAzOSwgMHg5ZDE3ZGVlNywgMHgyN2ViMzVlNiwgMHhjOWFmZjY3YiwgMHgzNmJhZjViOCwgMHgwOWM0NjdjZCwgMHhjMTg5MTBiMSwgMHhlMTFkYmY3YiwgMHgwNmNkMWFmOCwgMHg3MTcwYzYwOCwgMHgyZDVlMzM1NCwgMHhkNGRlNDk1YSwgMHg2NGM2ZDAwNiwgMHhiY2MwYzYyYywgMHgzZGQwMGRiMywgMHg3MDhmOGYzNCwgMHg3N2Q1MWI0MiwgMHgyNjRmNjIwZiwgMHgyNGI4ZDJiZiwgMHgxNWMxYjc5ZSwgMHg0NmE1MjU2NCwgMHhmOGQ3ZTU0ZSwgMHgzZTM3ODE2MCwgMHg3ODk1Y2RhNSwgMHg4NTljMTVhNSwgMHhlNjQ1OTc4OCwgMHhjMzdiYzc1ZiwgMHhkYjA3YmEwYywgMHgwNjc2YTNhYiwgMHg3ZjIyOWIxZSwgMHgzMTg0MmU3YiwgMHgyNDI1OWZkNywgMHhmOGJlZjQ3MiwgMHg4MzVmZmNiOCwgMHg2ZGY0YzFmMiwgMHg5NmY1YjE5NSwgMHhmZDBhZjBmYywgMHhiMGZlMTM0YywgMHhlMjUwNmQzZCwgMHg0ZjliMTJlYSwgMHhmMjE1ZjIyNSwgMHhhMjIzNzM2ZiwgMHg5ZmI0YzQyOCwgMHgyNWQwNDk3OSwgMHgzNGM3MTNmOCwgMHhjNDYxODE4NywgMHhlYTdhNmU5OCwgMHg3Y2QxNmVmYywgMHgxNDM2ODc2YywgMHhmMTU0NDEwNywgMHhiZWRlZWUxNCwgMHg1NmU5YWYyNywgMHhhMDRhYTQ0MSwgMHgzY2Y3Yzg5OSwgMHg5MmVjYmFlNiwgMHhkZDY3MDE2ZCwgMHgxNTE2ODJlYiwgMHhhODQyZWVkZiwgMHhmZGJhNjBiNCwgMHhmMTkwN2I3NSwgMHgyMGUzMDMwZiwgMHgyNGQ4YzI5ZSwgMHhlMTM5NjczYiwgMHhlZmE2M2ZiOCwgMHg3MTg3MzA1NCwgMHhiNmYyY2YzYiwgMHg5ZjMyNjQ0MiwgMHhjYjE1YTRjYywgMHhiMDFhNDUwNCwgMHhmMWU0N2Q4ZCwgMHg4NDRhMWJlNSwgMHhiYWU3ZGZkYywgMHg0MmNiZGE3MCwgMHhjZDdkYWUwYSwgMHg1N2U4NWI3YSwgMHhkNTNmNWFmNiwgMHgyMGNmNGQ4YywgMHhjZWE0ZDQyOCwgMHg3OWQxMzBhNCwgMHgzNDg2ZWJmYiwgMHgzM2QzY2RkYywgMHg3Nzg1M2I1MywgMHgzN2VmZmNiNSwgMHhjNTA2ODc3OCwgMHhlNTgwYjNlNiwgMHg0ZTY4YjhmNCwgMHhjNWM4YjM3ZSwgMHgwZDgwOWVhMiwgMHgzOThmZWI3YywgMHgxMzJhNGY5NCwgMHg0M2I3OTUwZSwgMHgyZmVlN2QxYywgMHgyMjM2MTNiZCwgMHhkZDA2Y2FhMiwgMHgzN2RmOTMyYiwgMHhjNDI0ODI4OSwgMHhhY2YzZWJjMywgMHg1NzE1ZjZiNywgMHhlZjM0NzhkZCwgMHhmMjY3NjE2ZiwgMHhjMTQ4Y2JlNCwgMHg5MDUyODE1ZSwgMHg1ZTQxMGZhYiwgMHhiNDhhMjQ2NSwgMHgyZWRhN2ZhNCwgMHhlODdiNDBlNCwgMHhlOThlYTA4NCwgMHg1ODg5ZTllMSwgMHhlZmQzOTBmYywgMHhkZDA3ZDM1YiwgMHhkYjQ4NTY5NCwgMHgzOGQ3ZTViMiwgMHg1NzcyMDEwMSwgMHg3MzBlZGViYywgMHg1YjY0MzExMywgMHg5NDkxN2U0ZiwgMHg1MDNjMmZiYSwgMHg2NDZmMTI4MiwgMHg3NTIzZDI0YSwgMHhlMDc3OTY5NSwgMHhmOWMxN2E4ZiwgMHg3YTViMjEyMSwgMHhkMTg3Yjg5NiwgMHgyOTI2M2E0ZCwgMHhiYTUxMGNkZiwgMHg4MWY0N2M5ZiwgMHhhZDExNjNlZCwgMHhlYTdiNTk2NSwgMHgxYTAwNzI2ZSwgMHgxMTQwMzA5MiwgMHgwMGRhNmQ3NywgMHg0YTBjZGQ2MSwgMHhhZDFmNDYwMywgMHg2MDViZGZiMCwgMHg5ZWVkYzM2NCwgMHgyMmViZTZhOCwgMHhjZWU3ZDI4YSwgMHhhMGU3MzZhMCwgMHg1NTY0YTZiOSwgMHgxMDg1MzIwOSwgMHhjN2ViOGYzNywgMHgyZGU3MDVjYSwgMHg4OTUxNTcwZiwgMHhkZjA5ODIyYiwgMHhiZDY5MWE2YywgMHhhYTEyZTRmMiwgMHg4NzQ1MWMwZiwgMHhlMGY2YTI3YSwgMHgzYWRhNDgxOSwgMHg0Y2YxNzY0ZiwgMHgwZDc3MWMyYiwgMHg2N2NkYjE1NiwgMHgzNTBkODM4NCwgMHg1OTM4ZmEwZiwgMHg0MjM5OWVmMywgMHgzNjk5N2IwNywgMHgwZTg0MDkzZCwgMHg0YWE5M2U2MSwgMHg4MzYwZDg3YiwgMHgxZmE5OGIwYywgMHgxMTQ5MzgyYywgMHhlOTc2MjVhNSwgMHgwNjE0ZDFiNywgMHgwZTI1MjQ0YiwgMHgwYzc2ODM0NywgMHg1ODllOGQ4MiwgMHgwZDIwNTlkMSwgMHhhNDY2YmIxZSwgMHhmOGRhMGE4MiwgMHgwNGYxOTEzMCwgMHhiYTZlNGVjMCwgMHg5OTI2NTE2NCwgMHgxZWU3MjMwZCwgMHg1MGIyYWQ4MCwgMHhlYWVlNjgwMSwgMHg4ZGIyYTI4MywgMHhlYThiZjU5ZV07XG59XG5cbmZ1bmN0aW9uIENhc3Q1KGtleSkge1xuICB0aGlzLmNhc3Q1ID0gbmV3IE9wZW5wZ3BTeW1lbmNDYXN0NSgpO1xuICB0aGlzLmNhc3Q1LnNldEtleShrZXkpO1xuXG4gIHRoaXMuZW5jcnlwdCA9IGZ1bmN0aW9uIChibG9jaykge1xuICAgIHJldHVybiB0aGlzLmNhc3Q1LmVuY3J5cHQoYmxvY2spO1xuICB9O1xufVxuXG5DYXN0NS5ibG9ja1NpemUgPSBDYXN0NS5wcm90b3R5cGUuYmxvY2tTaXplID0gODtcbkNhc3Q1LmtleVNpemUgPSBDYXN0NS5wcm90b3R5cGUua2V5U2l6ZSA9IDE2O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDYXN0NTtcblxufSx7fV0sMzMxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLy9QYXVsIFRlcm8sIEp1bHkgMjAwMVxuLy9odHRwOi8vd3d3LnRlcm8uY28udWsvZGVzL1xuLy9cbi8vT3B0aW1pc2VkIGZvciBwZXJmb3JtYW5jZSB3aXRoIGxhcmdlIGJsb2NrcyBieSBNaWNoYWVsIEhheXdvcnRoLCBOb3ZlbWJlciAyMDAxXG4vL2h0dHA6Ly93d3cubmV0ZGVhbGluZy5jb21cbi8vXG4vLyBNb2RpZmllZCBieSBSZWN1cml0eSBMYWJzIEdtYkhcblxuLy9USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkRcbi8vQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4vL0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4vL0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFXG4vL0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG4vL0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTXG4vL09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKVxuLy9IT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVFxuLy9MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZXG4vL09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Zcbi8vU1VDSCBEQU1BR0UuXG5cbi8vZGVzXG4vL3RoaXMgdGFrZXMgdGhlIGtleSwgdGhlIG1lc3NhZ2UsIGFuZCB3aGV0aGVyIHRvIGVuY3J5cHQgb3IgZGVjcnlwdFxuXG5mdW5jdGlvbiBkZXMoa2V5cywgbWVzc2FnZSwgZW5jcnlwdCwgbW9kZSwgaXYsIHBhZGRpbmcpIHtcbiAgLy9kZWNsYXJpbmcgdGhpcyBsb2NhbGx5IHNwZWVkcyB0aGluZ3MgdXAgYSBiaXRcbiAgdmFyIHNwZnVuY3Rpb24xID0gWzB4MTAxMDQwMCwgMCwgMHgxMDAwMCwgMHgxMDEwNDA0LCAweDEwMTAwMDQsIDB4MTA0MDQsIDB4NCwgMHgxMDAwMCwgMHg0MDAsIDB4MTAxMDQwMCwgMHgxMDEwNDA0LCAweDQwMCwgMHgxMDAwNDA0LCAweDEwMTAwMDQsIDB4MTAwMDAwMCwgMHg0LCAweDQwNCwgMHgxMDAwNDAwLCAweDEwMDA0MDAsIDB4MTA0MDAsIDB4MTA0MDAsIDB4MTAxMDAwMCwgMHgxMDEwMDAwLCAweDEwMDA0MDQsIDB4MTAwMDQsIDB4MTAwMDAwNCwgMHgxMDAwMDA0LCAweDEwMDA0LCAwLCAweDQwNCwgMHgxMDQwNCwgMHgxMDAwMDAwLCAweDEwMDAwLCAweDEwMTA0MDQsIDB4NCwgMHgxMDEwMDAwLCAweDEwMTA0MDAsIDB4MTAwMDAwMCwgMHgxMDAwMDAwLCAweDQwMCwgMHgxMDEwMDA0LCAweDEwMDAwLCAweDEwNDAwLCAweDEwMDAwMDQsIDB4NDAwLCAweDQsIDB4MTAwMDQwNCwgMHgxMDQwNCwgMHgxMDEwNDA0LCAweDEwMDA0LCAweDEwMTAwMDAsIDB4MTAwMDQwNCwgMHgxMDAwMDA0LCAweDQwNCwgMHgxMDQwNCwgMHgxMDEwNDAwLCAweDQwNCwgMHgxMDAwNDAwLCAweDEwMDA0MDAsIDAsIDB4MTAwMDQsIDB4MTA0MDAsIDAsIDB4MTAxMDAwNF07XG4gIHZhciBzcGZ1bmN0aW9uMiA9IFstMHg3ZmVmN2ZlMCwgLTB4N2ZmZjgwMDAsIDB4ODAwMCwgMHgxMDgwMjAsIDB4MTAwMDAwLCAweDIwLCAtMHg3ZmVmZmZlMCwgLTB4N2ZmZjdmZTAsIC0weDdmZmZmZmUwLCAtMHg3ZmVmN2ZlMCwgLTB4N2ZlZjgwMDAsIC0weDgwMDAwMDAwLCAtMHg3ZmZmODAwMCwgMHgxMDAwMDAsIDB4MjAsIC0weDdmZWZmZmUwLCAweDEwODAwMCwgMHgxMDAwMjAsIC0weDdmZmY3ZmUwLCAwLCAtMHg4MDAwMDAwMCwgMHg4MDAwLCAweDEwODAyMCwgLTB4N2ZmMDAwMDAsIDB4MTAwMDIwLCAtMHg3ZmZmZmZlMCwgMCwgMHgxMDgwMDAsIDB4ODAyMCwgLTB4N2ZlZjgwMDAsIC0weDdmZjAwMDAwLCAweDgwMjAsIDAsIDB4MTA4MDIwLCAtMHg3ZmVmZmZlMCwgMHgxMDAwMDAsIC0weDdmZmY3ZmUwLCAtMHg3ZmYwMDAwMCwgLTB4N2ZlZjgwMDAsIDB4ODAwMCwgLTB4N2ZmMDAwMDAsIC0weDdmZmY4MDAwLCAweDIwLCAtMHg3ZmVmN2ZlMCwgMHgxMDgwMjAsIDB4MjAsIDB4ODAwMCwgLTB4ODAwMDAwMDAsIDB4ODAyMCwgLTB4N2ZlZjgwMDAsIDB4MTAwMDAwLCAtMHg3ZmZmZmZlMCwgMHgxMDAwMjAsIC0weDdmZmY3ZmUwLCAtMHg3ZmZmZmZlMCwgMHgxMDAwMjAsIDB4MTA4MDAwLCAwLCAtMHg3ZmZmODAwMCwgMHg4MDIwLCAtMHg4MDAwMDAwMCwgLTB4N2ZlZmZmZTAsIC0weDdmZWY3ZmUwLCAweDEwODAwMF07XG4gIHZhciBzcGZ1bmN0aW9uMyA9IFsweDIwOCwgMHg4MDIwMjAwLCAwLCAweDgwMjAwMDgsIDB4ODAwMDIwMCwgMCwgMHgyMDIwOCwgMHg4MDAwMjAwLCAweDIwMDA4LCAweDgwMDAwMDgsIDB4ODAwMDAwOCwgMHgyMDAwMCwgMHg4MDIwMjA4LCAweDIwMDA4LCAweDgwMjAwMDAsIDB4MjA4LCAweDgwMDAwMDAsIDB4OCwgMHg4MDIwMjAwLCAweDIwMCwgMHgyMDIwMCwgMHg4MDIwMDAwLCAweDgwMjAwMDgsIDB4MjAyMDgsIDB4ODAwMDIwOCwgMHgyMDIwMCwgMHgyMDAwMCwgMHg4MDAwMjA4LCAweDgsIDB4ODAyMDIwOCwgMHgyMDAsIDB4ODAwMDAwMCwgMHg4MDIwMjAwLCAweDgwMDAwMDAsIDB4MjAwMDgsIDB4MjA4LCAweDIwMDAwLCAweDgwMjAyMDAsIDB4ODAwMDIwMCwgMCwgMHgyMDAsIDB4MjAwMDgsIDB4ODAyMDIwOCwgMHg4MDAwMjAwLCAweDgwMDAwMDgsIDB4MjAwLCAwLCAweDgwMjAwMDgsIDB4ODAwMDIwOCwgMHgyMDAwMCwgMHg4MDAwMDAwLCAweDgwMjAyMDgsIDB4OCwgMHgyMDIwOCwgMHgyMDIwMCwgMHg4MDAwMDA4LCAweDgwMjAwMDAsIDB4ODAwMDIwOCwgMHgyMDgsIDB4ODAyMDAwMCwgMHgyMDIwOCwgMHg4LCAweDgwMjAwMDgsIDB4MjAyMDBdO1xuICB2YXIgc3BmdW5jdGlvbjQgPSBbMHg4MDIwMDEsIDB4MjA4MSwgMHgyMDgxLCAweDgwLCAweDgwMjA4MCwgMHg4MDAwODEsIDB4ODAwMDAxLCAweDIwMDEsIDAsIDB4ODAyMDAwLCAweDgwMjAwMCwgMHg4MDIwODEsIDB4ODEsIDAsIDB4ODAwMDgwLCAweDgwMDAwMSwgMHgxLCAweDIwMDAsIDB4ODAwMDAwLCAweDgwMjAwMSwgMHg4MCwgMHg4MDAwMDAsIDB4MjAwMSwgMHgyMDgwLCAweDgwMDA4MSwgMHgxLCAweDIwODAsIDB4ODAwMDgwLCAweDIwMDAsIDB4ODAyMDgwLCAweDgwMjA4MSwgMHg4MSwgMHg4MDAwODAsIDB4ODAwMDAxLCAweDgwMjAwMCwgMHg4MDIwODEsIDB4ODEsIDAsIDAsIDB4ODAyMDAwLCAweDIwODAsIDB4ODAwMDgwLCAweDgwMDA4MSwgMHgxLCAweDgwMjAwMSwgMHgyMDgxLCAweDIwODEsIDB4ODAsIDB4ODAyMDgxLCAweDgxLCAweDEsIDB4MjAwMCwgMHg4MDAwMDEsIDB4MjAwMSwgMHg4MDIwODAsIDB4ODAwMDgxLCAweDIwMDEsIDB4MjA4MCwgMHg4MDAwMDAsIDB4ODAyMDAxLCAweDgwLCAweDgwMDAwMCwgMHgyMDAwLCAweDgwMjA4MF07XG4gIHZhciBzcGZ1bmN0aW9uNSA9IFsweDEwMCwgMHgyMDgwMTAwLCAweDIwODAwMDAsIDB4NDIwMDAxMDAsIDB4ODAwMDAsIDB4MTAwLCAweDQwMDAwMDAwLCAweDIwODAwMDAsIDB4NDAwODAxMDAsIDB4ODAwMDAsIDB4MjAwMDEwMCwgMHg0MDA4MDEwMCwgMHg0MjAwMDEwMCwgMHg0MjA4MDAwMCwgMHg4MDEwMCwgMHg0MDAwMDAwMCwgMHgyMDAwMDAwLCAweDQwMDgwMDAwLCAweDQwMDgwMDAwLCAwLCAweDQwMDAwMTAwLCAweDQyMDgwMTAwLCAweDQyMDgwMTAwLCAweDIwMDAxMDAsIDB4NDIwODAwMDAsIDB4NDAwMDAxMDAsIDAsIDB4NDIwMDAwMDAsIDB4MjA4MDEwMCwgMHgyMDAwMDAwLCAweDQyMDAwMDAwLCAweDgwMTAwLCAweDgwMDAwLCAweDQyMDAwMTAwLCAweDEwMCwgMHgyMDAwMDAwLCAweDQwMDAwMDAwLCAweDIwODAwMDAsIDB4NDIwMDAxMDAsIDB4NDAwODAxMDAsIDB4MjAwMDEwMCwgMHg0MDAwMDAwMCwgMHg0MjA4MDAwMCwgMHgyMDgwMTAwLCAweDQwMDgwMTAwLCAweDEwMCwgMHgyMDAwMDAwLCAweDQyMDgwMDAwLCAweDQyMDgwMTAwLCAweDgwMTAwLCAweDQyMDAwMDAwLCAweDQyMDgwMTAwLCAweDIwODAwMDAsIDAsIDB4NDAwODAwMDAsIDB4NDIwMDAwMDAsIDB4ODAxMDAsIDB4MjAwMDEwMCwgMHg0MDAwMDEwMCwgMHg4MDAwMCwgMCwgMHg0MDA4MDAwMCwgMHgyMDgwMTAwLCAweDQwMDAwMTAwXTtcbiAgdmFyIHNwZnVuY3Rpb242ID0gWzB4MjAwMDAwMTAsIDB4MjA0MDAwMDAsIDB4NDAwMCwgMHgyMDQwNDAxMCwgMHgyMDQwMDAwMCwgMHgxMCwgMHgyMDQwNDAxMCwgMHg0MDAwMDAsIDB4MjAwMDQwMDAsIDB4NDA0MDEwLCAweDQwMDAwMCwgMHgyMDAwMDAxMCwgMHg0MDAwMTAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4NDAxMCwgMCwgMHg0MDAwMTAsIDB4MjAwMDQwMTAsIDB4NDAwMCwgMHg0MDQwMDAsIDB4MjAwMDQwMTAsIDB4MTAsIDB4MjA0MDAwMTAsIDB4MjA0MDAwMTAsIDAsIDB4NDA0MDEwLCAweDIwNDA0MDAwLCAweDQwMTAsIDB4NDA0MDAwLCAweDIwNDA0MDAwLCAweDIwMDAwMDAwLCAweDIwMDA0MDAwLCAweDEwLCAweDIwNDAwMDEwLCAweDQwNDAwMCwgMHgyMDQwNDAxMCwgMHg0MDAwMDAsIDB4NDAxMCwgMHgyMDAwMDAxMCwgMHg0MDAwMDAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4NDAxMCwgMHgyMDAwMDAxMCwgMHgyMDQwNDAxMCwgMHg0MDQwMDAsIDB4MjA0MDAwMDAsIDB4NDA0MDEwLCAweDIwNDA0MDAwLCAwLCAweDIwNDAwMDEwLCAweDEwLCAweDQwMDAsIDB4MjA0MDAwMDAsIDB4NDA0MDEwLCAweDQwMDAsIDB4NDAwMDEwLCAweDIwMDA0MDEwLCAwLCAweDIwNDA0MDAwLCAweDIwMDAwMDAwLCAweDQwMDAxMCwgMHgyMDAwNDAxMF07XG4gIHZhciBzcGZ1bmN0aW9uNyA9IFsweDIwMDAwMCwgMHg0MjAwMDAyLCAweDQwMDA4MDIsIDAsIDB4ODAwLCAweDQwMDA4MDIsIDB4MjAwODAyLCAweDQyMDA4MDAsIDB4NDIwMDgwMiwgMHgyMDAwMDAsIDAsIDB4NDAwMDAwMiwgMHgyLCAweDQwMDAwMDAsIDB4NDIwMDAwMiwgMHg4MDIsIDB4NDAwMDgwMCwgMHgyMDA4MDIsIDB4MjAwMDAyLCAweDQwMDA4MDAsIDB4NDAwMDAwMiwgMHg0MjAwMDAwLCAweDQyMDA4MDAsIDB4MjAwMDAyLCAweDQyMDAwMDAsIDB4ODAwLCAweDgwMiwgMHg0MjAwODAyLCAweDIwMDgwMCwgMHgyLCAweDQwMDAwMDAsIDB4MjAwODAwLCAweDQwMDAwMDAsIDB4MjAwODAwLCAweDIwMDAwMCwgMHg0MDAwODAyLCAweDQwMDA4MDIsIDB4NDIwMDAwMiwgMHg0MjAwMDAyLCAweDIsIDB4MjAwMDAyLCAweDQwMDAwMDAsIDB4NDAwMDgwMCwgMHgyMDAwMDAsIDB4NDIwMDgwMCwgMHg4MDIsIDB4MjAwODAyLCAweDQyMDA4MDAsIDB4ODAyLCAweDQwMDAwMDIsIDB4NDIwMDgwMiwgMHg0MjAwMDAwLCAweDIwMDgwMCwgMCwgMHgyLCAweDQyMDA4MDIsIDAsIDB4MjAwODAyLCAweDQyMDAwMDAsIDB4ODAwLCAweDQwMDAwMDIsIDB4NDAwMDgwMCwgMHg4MDAsIDB4MjAwMDAyXTtcbiAgdmFyIHNwZnVuY3Rpb244ID0gWzB4MTAwMDEwNDAsIDB4MTAwMCwgMHg0MDAwMCwgMHgxMDA0MTA0MCwgMHgxMDAwMDAwMCwgMHgxMDAwMTA0MCwgMHg0MCwgMHgxMDAwMDAwMCwgMHg0MDA0MCwgMHgxMDA0MDAwMCwgMHgxMDA0MTA0MCwgMHg0MTAwMCwgMHgxMDA0MTAwMCwgMHg0MTA0MCwgMHgxMDAwLCAweDQwLCAweDEwMDQwMDAwLCAweDEwMDAwMDQwLCAweDEwMDAxMDAwLCAweDEwNDAsIDB4NDEwMDAsIDB4NDAwNDAsIDB4MTAwNDAwNDAsIDB4MTAwNDEwMDAsIDB4MTA0MCwgMCwgMCwgMHgxMDA0MDA0MCwgMHgxMDAwMDA0MCwgMHgxMDAwMTAwMCwgMHg0MTA0MCwgMHg0MDAwMCwgMHg0MTA0MCwgMHg0MDAwMCwgMHgxMDA0MTAwMCwgMHgxMDAwLCAweDQwLCAweDEwMDQwMDQwLCAweDEwMDAsIDB4NDEwNDAsIDB4MTAwMDEwMDAsIDB4NDAsIDB4MTAwMDAwNDAsIDB4MTAwNDAwMDAsIDB4MTAwNDAwNDAsIDB4MTAwMDAwMDAsIDB4NDAwMDAsIDB4MTAwMDEwNDAsIDAsIDB4MTAwNDEwNDAsIDB4NDAwNDAsIDB4MTAwMDAwNDAsIDB4MTAwNDAwMDAsIDB4MTAwMDEwMDAsIDB4MTAwMDEwNDAsIDAsIDB4MTAwNDEwNDAsIDB4NDEwMDAsIDB4NDEwMDAsIDB4MTA0MCwgMHgxMDQwLCAweDQwMDQwLCAweDEwMDAwMDAwLCAweDEwMDQxMDAwXTtcblxuICAvL2NyZWF0ZSB0aGUgMTYgb3IgNDggc3Via2V5cyB3ZSB3aWxsIG5lZWRcbiAgdmFyIG0gPSAwO1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgdmFyIGogPSB2b2lkIDA7XG4gIHZhciB0ZW1wID0gdm9pZCAwO1xuICB2YXIgcmlnaHQxID0gdm9pZCAwO1xuICB2YXIgcmlnaHQyID0gdm9pZCAwO1xuICB2YXIgbGVmdCA9IHZvaWQgMDtcbiAgdmFyIHJpZ2h0ID0gdm9pZCAwO1xuICB2YXIgbG9vcGluZyA9IHZvaWQgMDtcbiAgdmFyIGNiY2xlZnQgPSB2b2lkIDA7XG4gIHZhciBjYmNsZWZ0MiA9IHZvaWQgMDtcbiAgdmFyIGNiY3JpZ2h0ID0gdm9pZCAwO1xuICB2YXIgY2JjcmlnaHQyID0gdm9pZCAwO1xuICB2YXIgZW5kbG9vcCA9IHZvaWQgMDtcbiAgdmFyIGxvb3BpbmMgPSB2b2lkIDA7XG4gIHZhciBsZW4gPSBtZXNzYWdlLmxlbmd0aDtcblxuICAvL3NldCB1cCB0aGUgbG9vcHMgZm9yIHNpbmdsZSBhbmQgdHJpcGxlIGRlc1xuICB2YXIgaXRlcmF0aW9ucyA9IGtleXMubGVuZ3RoID09PSAzMiA/IDMgOiA5OyAvL3NpbmdsZSBvciB0cmlwbGUgZGVzXG4gIGlmIChpdGVyYXRpb25zID09PSAzKSB7XG4gICAgbG9vcGluZyA9IGVuY3J5cHQgPyBbMCwgMzIsIDJdIDogWzMwLCAtMiwgLTJdO1xuICB9IGVsc2Uge1xuICAgIGxvb3BpbmcgPSBlbmNyeXB0ID8gWzAsIDMyLCAyLCA2MiwgMzAsIC0yLCA2NCwgOTYsIDJdIDogWzk0LCA2MiwgLTIsIDMyLCA2NCwgMiwgMzAsIC0yLCAtMl07XG4gIH1cblxuICAvL3BhZCB0aGUgbWVzc2FnZSBkZXBlbmRpbmcgb24gdGhlIHBhZGRpbmcgcGFyYW1ldGVyXG4gIC8vb25seSBhZGQgcGFkZGluZyBpZiBlbmNyeXB0aW5nIC0gbm90ZSB0aGF0IHlvdSBuZWVkIHRvIHVzZSB0aGUgc2FtZSBwYWRkaW5nIG9wdGlvbiBmb3IgYm90aCBlbmNyeXB0IGFuZCBkZWNyeXB0XG4gIGlmIChlbmNyeXB0KSB7XG4gICAgbWVzc2FnZSA9IGRlc19hZGRQYWRkaW5nKG1lc3NhZ2UsIHBhZGRpbmcpO1xuICAgIGxlbiA9IG1lc3NhZ2UubGVuZ3RoO1xuICB9XG5cbiAgLy9zdG9yZSB0aGUgcmVzdWx0IGhlcmVcbiAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gIHZhciBrID0gMDtcblxuICBpZiAobW9kZSA9PT0gMSkge1xuICAgIC8vQ0JDIG1vZGVcbiAgICBjYmNsZWZ0ID0gaXZbbSsrXSA8PCAyNCB8IGl2W20rK10gPDwgMTYgfCBpdlttKytdIDw8IDggfCBpdlttKytdO1xuICAgIGNiY3JpZ2h0ID0gaXZbbSsrXSA8PCAyNCB8IGl2W20rK10gPDwgMTYgfCBpdlttKytdIDw8IDggfCBpdlttKytdO1xuICAgIG0gPSAwO1xuICB9XG5cbiAgLy9sb29wIHRocm91Z2ggZWFjaCA2NCBiaXQgY2h1bmsgb2YgdGhlIG1lc3NhZ2VcbiAgd2hpbGUgKG0gPCBsZW4pIHtcbiAgICBsZWZ0ID0gbWVzc2FnZVttKytdIDw8IDI0IHwgbWVzc2FnZVttKytdIDw8IDE2IHwgbWVzc2FnZVttKytdIDw8IDggfCBtZXNzYWdlW20rK107XG4gICAgcmlnaHQgPSBtZXNzYWdlW20rK10gPDwgMjQgfCBtZXNzYWdlW20rK10gPDwgMTYgfCBtZXNzYWdlW20rK10gPDwgOCB8IG1lc3NhZ2VbbSsrXTtcblxuICAgIC8vZm9yIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLCB4b3IgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcHJldmlvdXMgcmVzdWx0XG4gICAgaWYgKG1vZGUgPT09IDEpIHtcbiAgICAgIGlmIChlbmNyeXB0KSB7XG4gICAgICAgIGxlZnQgXj0gY2JjbGVmdDtcbiAgICAgICAgcmlnaHQgXj0gY2JjcmlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYmNsZWZ0MiA9IGNiY2xlZnQ7XG4gICAgICAgIGNiY3JpZ2h0MiA9IGNiY3JpZ2h0O1xuICAgICAgICBjYmNsZWZ0ID0gbGVmdDtcbiAgICAgICAgY2JjcmlnaHQgPSByaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL2ZpcnN0IGVhY2ggNjQgYnV0IGNodW5rIG9mIHRoZSBtZXNzYWdlIG11c3QgYmUgcGVybXV0ZWQgYWNjb3JkaW5nIHRvIElQXG4gICAgdGVtcCA9IChsZWZ0ID4+PiA0IF4gcmlnaHQpICYgMHgwZjBmMGYwZjtcbiAgICByaWdodCBePSB0ZW1wO1xuICAgIGxlZnQgXj0gdGVtcCA8PCA0O1xuICAgIHRlbXAgPSAobGVmdCA+Pj4gMTYgXiByaWdodCkgJiAweDAwMDBmZmZmO1xuICAgIHJpZ2h0IF49IHRlbXA7XG4gICAgbGVmdCBePSB0ZW1wIDw8IDE2O1xuICAgIHRlbXAgPSAocmlnaHQgPj4+IDIgXiBsZWZ0KSAmIDB4MzMzMzMzMzM7XG4gICAgbGVmdCBePSB0ZW1wO1xuICAgIHJpZ2h0IF49IHRlbXAgPDwgMjtcbiAgICB0ZW1wID0gKHJpZ2h0ID4+PiA4IF4gbGVmdCkgJiAweDAwZmYwMGZmO1xuICAgIGxlZnQgXj0gdGVtcDtcbiAgICByaWdodCBePSB0ZW1wIDw8IDg7XG4gICAgdGVtcCA9IChsZWZ0ID4+PiAxIF4gcmlnaHQpICYgMHg1NTU1NTU1NTtcbiAgICByaWdodCBePSB0ZW1wO1xuICAgIGxlZnQgXj0gdGVtcCA8PCAxO1xuXG4gICAgbGVmdCA9IGxlZnQgPDwgMSB8IGxlZnQgPj4+IDMxO1xuICAgIHJpZ2h0ID0gcmlnaHQgPDwgMSB8IHJpZ2h0ID4+PiAzMTtcblxuICAgIC8vZG8gdGhpcyBlaXRoZXIgMSBvciAzIHRpbWVzIGZvciBlYWNoIGNodW5rIG9mIHRoZSBtZXNzYWdlXG4gICAgZm9yIChqID0gMDsgaiA8IGl0ZXJhdGlvbnM7IGogKz0gMykge1xuICAgICAgZW5kbG9vcCA9IGxvb3BpbmdbaiArIDFdO1xuICAgICAgbG9vcGluYyA9IGxvb3BpbmdbaiArIDJdO1xuICAgICAgLy9ub3cgZ28gdGhyb3VnaCBhbmQgcGVyZm9ybSB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uXG4gICAgICBmb3IgKGkgPSBsb29waW5nW2pdOyBpICE9PSBlbmRsb29wOyBpICs9IGxvb3BpbmMpIHtcbiAgICAgICAgLy9mb3IgZWZmaWNpZW5jeVxuICAgICAgICByaWdodDEgPSByaWdodCBeIGtleXNbaV07XG4gICAgICAgIHJpZ2h0MiA9IChyaWdodCA+Pj4gNCB8IHJpZ2h0IDw8IDI4KSBeIGtleXNbaSArIDFdO1xuICAgICAgICAvL3RoZSByZXN1bHQgaXMgYXR0YWluZWQgYnkgcGFzc2luZyB0aGVzZSBieXRlcyB0aHJvdWdoIHRoZSBTIHNlbGVjdGlvbiBmdW5jdGlvbnNcbiAgICAgICAgdGVtcCA9IGxlZnQ7XG4gICAgICAgIGxlZnQgPSByaWdodDtcbiAgICAgICAgcmlnaHQgPSB0ZW1wIF4gKHNwZnVuY3Rpb24yW3JpZ2h0MSA+Pj4gMjQgJiAweDNmXSB8IHNwZnVuY3Rpb240W3JpZ2h0MSA+Pj4gMTYgJiAweDNmXSB8IHNwZnVuY3Rpb242W3JpZ2h0MSA+Pj4gOCAmIDB4M2ZdIHwgc3BmdW5jdGlvbjhbcmlnaHQxICYgMHgzZl0gfCBzcGZ1bmN0aW9uMVtyaWdodDIgPj4+IDI0ICYgMHgzZl0gfCBzcGZ1bmN0aW9uM1tyaWdodDIgPj4+IDE2ICYgMHgzZl0gfCBzcGZ1bmN0aW9uNVtyaWdodDIgPj4+IDggJiAweDNmXSB8IHNwZnVuY3Rpb243W3JpZ2h0MiAmIDB4M2ZdKTtcbiAgICAgIH1cbiAgICAgIHRlbXAgPSBsZWZ0O1xuICAgICAgbGVmdCA9IHJpZ2h0O1xuICAgICAgcmlnaHQgPSB0ZW1wOyAvL3VucmV2ZXJzZSBsZWZ0IGFuZCByaWdodFxuICAgIH0gLy9mb3IgZWl0aGVyIDEgb3IgMyBpdGVyYXRpb25zXG5cbiAgICAvL21vdmUgdGhlbiBlYWNoIG9uZSBiaXQgdG8gdGhlIHJpZ2h0XG4gICAgbGVmdCA9IGxlZnQgPj4+IDEgfCBsZWZ0IDw8IDMxO1xuICAgIHJpZ2h0ID0gcmlnaHQgPj4+IDEgfCByaWdodCA8PCAzMTtcblxuICAgIC8vbm93IHBlcmZvcm0gSVAtMSwgd2hpY2ggaXMgSVAgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvblxuICAgIHRlbXAgPSAobGVmdCA+Pj4gMSBeIHJpZ2h0KSAmIDB4NTU1NTU1NTU7XG4gICAgcmlnaHQgXj0gdGVtcDtcbiAgICBsZWZ0IF49IHRlbXAgPDwgMTtcbiAgICB0ZW1wID0gKHJpZ2h0ID4+PiA4IF4gbGVmdCkgJiAweDAwZmYwMGZmO1xuICAgIGxlZnQgXj0gdGVtcDtcbiAgICByaWdodCBePSB0ZW1wIDw8IDg7XG4gICAgdGVtcCA9IChyaWdodCA+Pj4gMiBeIGxlZnQpICYgMHgzMzMzMzMzMztcbiAgICBsZWZ0IF49IHRlbXA7XG4gICAgcmlnaHQgXj0gdGVtcCA8PCAyO1xuICAgIHRlbXAgPSAobGVmdCA+Pj4gMTYgXiByaWdodCkgJiAweDAwMDBmZmZmO1xuICAgIHJpZ2h0IF49IHRlbXA7XG4gICAgbGVmdCBePSB0ZW1wIDw8IDE2O1xuICAgIHRlbXAgPSAobGVmdCA+Pj4gNCBeIHJpZ2h0KSAmIDB4MGYwZjBmMGY7XG4gICAgcmlnaHQgXj0gdGVtcDtcbiAgICBsZWZ0IF49IHRlbXAgPDwgNDtcblxuICAgIC8vZm9yIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLCB4b3IgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcHJldmlvdXMgcmVzdWx0XG4gICAgaWYgKG1vZGUgPT09IDEpIHtcbiAgICAgIGlmIChlbmNyeXB0KSB7XG4gICAgICAgIGNiY2xlZnQgPSBsZWZ0O1xuICAgICAgICBjYmNyaWdodCA9IHJpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCBePSBjYmNsZWZ0MjtcbiAgICAgICAgcmlnaHQgXj0gY2JjcmlnaHQyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdFtrKytdID0gbGVmdCA+Pj4gMjQ7XG4gICAgcmVzdWx0W2srK10gPSBsZWZ0ID4+PiAxNiAmIDB4ZmY7XG4gICAgcmVzdWx0W2srK10gPSBsZWZ0ID4+PiA4ICYgMHhmZjtcbiAgICByZXN1bHRbaysrXSA9IGxlZnQgJiAweGZmO1xuICAgIHJlc3VsdFtrKytdID0gcmlnaHQgPj4+IDI0O1xuICAgIHJlc3VsdFtrKytdID0gcmlnaHQgPj4+IDE2ICYgMHhmZjtcbiAgICByZXN1bHRbaysrXSA9IHJpZ2h0ID4+PiA4ICYgMHhmZjtcbiAgICByZXN1bHRbaysrXSA9IHJpZ2h0ICYgMHhmZjtcbiAgfSAvL2ZvciBldmVyeSA4IGNoYXJhY3RlcnMsIG9yIDY0IGJpdHMgaW4gdGhlIG1lc3NhZ2VcblxuICAvL29ubHkgcmVtb3ZlIHBhZGRpbmcgaWYgZGVjcnlwdGluZyAtIG5vdGUgdGhhdCB5b3UgbmVlZCB0byB1c2UgdGhlIHNhbWUgcGFkZGluZyBvcHRpb24gZm9yIGJvdGggZW5jcnlwdCBhbmQgZGVjcnlwdFxuICBpZiAoIWVuY3J5cHQpIHtcbiAgICByZXN1bHQgPSBkZXNfcmVtb3ZlUGFkZGluZyhyZXN1bHQsIHBhZGRpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn0gLy9lbmQgb2YgZGVzXG5cblxuLy9kZXNfY3JlYXRlS2V5c1xuLy90aGlzIHRha2VzIGFzIGlucHV0IGEgNjQgYml0IGtleSAoZXZlbiB0aG91Z2ggb25seSA1NiBiaXRzIGFyZSB1c2VkKVxuLy9hcyBhbiBhcnJheSBvZiAyIGludGVnZXJzLCBhbmQgcmV0dXJucyAxNiA0OCBiaXQga2V5c1xuXG5mdW5jdGlvbiBkZXNfY3JlYXRlS2V5cyhrZXkpIHtcbiAgLy9kZWNsYXJpbmcgdGhpcyBsb2NhbGx5IHNwZWVkcyB0aGluZ3MgdXAgYSBiaXRcbiAgdmFyIHBjMmJ5dGVzMCA9IFswLCAweDQsIDB4MjAwMDAwMDAsIDB4MjAwMDAwMDQsIDB4MTAwMDAsIDB4MTAwMDQsIDB4MjAwMTAwMDAsIDB4MjAwMTAwMDQsIDB4MjAwLCAweDIwNCwgMHgyMDAwMDIwMCwgMHgyMDAwMDIwNCwgMHgxMDIwMCwgMHgxMDIwNCwgMHgyMDAxMDIwMCwgMHgyMDAxMDIwNF07XG4gIHZhciBwYzJieXRlczEgPSBbMCwgMHgxLCAweDEwMDAwMCwgMHgxMDAwMDEsIDB4NDAwMDAwMCwgMHg0MDAwMDAxLCAweDQxMDAwMDAsIDB4NDEwMDAwMSwgMHgxMDAsIDB4MTAxLCAweDEwMDEwMCwgMHgxMDAxMDEsIDB4NDAwMDEwMCwgMHg0MDAwMTAxLCAweDQxMDAxMDAsIDB4NDEwMDEwMV07XG4gIHZhciBwYzJieXRlczIgPSBbMCwgMHg4LCAweDgwMCwgMHg4MDgsIDB4MTAwMDAwMCwgMHgxMDAwMDA4LCAweDEwMDA4MDAsIDB4MTAwMDgwOCwgMCwgMHg4LCAweDgwMCwgMHg4MDgsIDB4MTAwMDAwMCwgMHgxMDAwMDA4LCAweDEwMDA4MDAsIDB4MTAwMDgwOF07XG4gIHZhciBwYzJieXRlczMgPSBbMCwgMHgyMDAwMDAsIDB4ODAwMDAwMCwgMHg4MjAwMDAwLCAweDIwMDAsIDB4MjAyMDAwLCAweDgwMDIwMDAsIDB4ODIwMjAwMCwgMHgyMDAwMCwgMHgyMjAwMDAsIDB4ODAyMDAwMCwgMHg4MjIwMDAwLCAweDIyMDAwLCAweDIyMjAwMCwgMHg4MDIyMDAwLCAweDgyMjIwMDBdO1xuICB2YXIgcGMyYnl0ZXM0ID0gWzAsIDB4NDAwMDAsIDB4MTAsIDB4NDAwMTAsIDAsIDB4NDAwMDAsIDB4MTAsIDB4NDAwMTAsIDB4MTAwMCwgMHg0MTAwMCwgMHgxMDEwLCAweDQxMDEwLCAweDEwMDAsIDB4NDEwMDAsIDB4MTAxMCwgMHg0MTAxMF07XG4gIHZhciBwYzJieXRlczUgPSBbMCwgMHg0MDAsIDB4MjAsIDB4NDIwLCAwLCAweDQwMCwgMHgyMCwgMHg0MjAsIDB4MjAwMDAwMCwgMHgyMDAwNDAwLCAweDIwMDAwMjAsIDB4MjAwMDQyMCwgMHgyMDAwMDAwLCAweDIwMDA0MDAsIDB4MjAwMDAyMCwgMHgyMDAwNDIwXTtcbiAgdmFyIHBjMmJ5dGVzNiA9IFswLCAweDEwMDAwMDAwLCAweDgwMDAwLCAweDEwMDgwMDAwLCAweDIsIDB4MTAwMDAwMDIsIDB4ODAwMDIsIDB4MTAwODAwMDIsIDAsIDB4MTAwMDAwMDAsIDB4ODAwMDAsIDB4MTAwODAwMDAsIDB4MiwgMHgxMDAwMDAwMiwgMHg4MDAwMiwgMHgxMDA4MDAwMl07XG4gIHZhciBwYzJieXRlczcgPSBbMCwgMHgxMDAwMCwgMHg4MDAsIDB4MTA4MDAsIDB4MjAwMDAwMDAsIDB4MjAwMTAwMDAsIDB4MjAwMDA4MDAsIDB4MjAwMTA4MDAsIDB4MjAwMDAsIDB4MzAwMDAsIDB4MjA4MDAsIDB4MzA4MDAsIDB4MjAwMjAwMDAsIDB4MjAwMzAwMDAsIDB4MjAwMjA4MDAsIDB4MjAwMzA4MDBdO1xuICB2YXIgcGMyYnl0ZXM4ID0gWzAsIDB4NDAwMDAsIDAsIDB4NDAwMDAsIDB4MiwgMHg0MDAwMiwgMHgyLCAweDQwMDAyLCAweDIwMDAwMDAsIDB4MjA0MDAwMCwgMHgyMDAwMDAwLCAweDIwNDAwMDAsIDB4MjAwMDAwMiwgMHgyMDQwMDAyLCAweDIwMDAwMDIsIDB4MjA0MDAwMl07XG4gIHZhciBwYzJieXRlczkgPSBbMCwgMHgxMDAwMDAwMCwgMHg4LCAweDEwMDAwMDA4LCAwLCAweDEwMDAwMDAwLCAweDgsIDB4MTAwMDAwMDgsIDB4NDAwLCAweDEwMDAwNDAwLCAweDQwOCwgMHgxMDAwMDQwOCwgMHg0MDAsIDB4MTAwMDA0MDAsIDB4NDA4LCAweDEwMDAwNDA4XTtcbiAgdmFyIHBjMmJ5dGVzMTAgPSBbMCwgMHgyMCwgMCwgMHgyMCwgMHgxMDAwMDAsIDB4MTAwMDIwLCAweDEwMDAwMCwgMHgxMDAwMjAsIDB4MjAwMCwgMHgyMDIwLCAweDIwMDAsIDB4MjAyMCwgMHgxMDIwMDAsIDB4MTAyMDIwLCAweDEwMjAwMCwgMHgxMDIwMjBdO1xuICB2YXIgcGMyYnl0ZXMxMSA9IFswLCAweDEwMDAwMDAsIDB4MjAwLCAweDEwMDAyMDAsIDB4MjAwMDAwLCAweDEyMDAwMDAsIDB4MjAwMjAwLCAweDEyMDAyMDAsIDB4NDAwMDAwMCwgMHg1MDAwMDAwLCAweDQwMDAyMDAsIDB4NTAwMDIwMCwgMHg0MjAwMDAwLCAweDUyMDAwMDAsIDB4NDIwMDIwMCwgMHg1MjAwMjAwXTtcbiAgdmFyIHBjMmJ5dGVzMTIgPSBbMCwgMHgxMDAwLCAweDgwMDAwMDAsIDB4ODAwMTAwMCwgMHg4MDAwMCwgMHg4MTAwMCwgMHg4MDgwMDAwLCAweDgwODEwMDAsIDB4MTAsIDB4MTAxMCwgMHg4MDAwMDEwLCAweDgwMDEwMTAsIDB4ODAwMTAsIDB4ODEwMTAsIDB4ODA4MDAxMCwgMHg4MDgxMDEwXTtcbiAgdmFyIHBjMmJ5dGVzMTMgPSBbMCwgMHg0LCAweDEwMCwgMHgxMDQsIDAsIDB4NCwgMHgxMDAsIDB4MTA0LCAweDEsIDB4NSwgMHgxMDEsIDB4MTA1LCAweDEsIDB4NSwgMHgxMDEsIDB4MTA1XTtcblxuICAvL2hvdyBtYW55IGl0ZXJhdGlvbnMgKDEgZm9yIGRlcywgMyBmb3IgdHJpcGxlIGRlcylcbiAgdmFyIGl0ZXJhdGlvbnMgPSBrZXkubGVuZ3RoID4gOCA/IDMgOiAxOyAvL2NoYW5nZWQgYnkgUGF1bCAxNi82LzIwMDcgdG8gdXNlIFRyaXBsZSBERVMgZm9yIDkrIGJ5dGUga2V5c1xuICAvL3N0b3JlcyB0aGUgcmV0dXJuIGtleXNcbiAgdmFyIGtleXMgPSBuZXcgQXJyYXkoMzIgKiBpdGVyYXRpb25zKTtcbiAgLy9ub3cgZGVmaW5lIHRoZSBsZWZ0IHNoaWZ0cyB3aGljaCBuZWVkIHRvIGJlIGRvbmVcbiAgdmFyIHNoaWZ0cyA9IFswLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwXTtcbiAgLy9vdGhlciB2YXJpYWJsZXNcbiAgdmFyIGxlZnR0ZW1wID0gdm9pZCAwO1xuICB2YXIgcmlnaHR0ZW1wID0gdm9pZCAwO1xuICB2YXIgbSA9IDA7XG4gIHZhciBuID0gMDtcbiAgdmFyIHRlbXAgPSB2b2lkIDA7XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVyYXRpb25zOyBqKyspIHtcbiAgICAvL2VpdGhlciAxIG9yIDMgaXRlcmF0aW9uc1xuICAgIHZhciBsZWZ0ID0ga2V5W20rK10gPDwgMjQgfCBrZXlbbSsrXSA8PCAxNiB8IGtleVttKytdIDw8IDggfCBrZXlbbSsrXTtcbiAgICB2YXIgcmlnaHQgPSBrZXlbbSsrXSA8PCAyNCB8IGtleVttKytdIDw8IDE2IHwga2V5W20rK10gPDwgOCB8IGtleVttKytdO1xuXG4gICAgdGVtcCA9IChsZWZ0ID4+PiA0IF4gcmlnaHQpICYgMHgwZjBmMGYwZjtcbiAgICByaWdodCBePSB0ZW1wO1xuICAgIGxlZnQgXj0gdGVtcCA8PCA0O1xuICAgIHRlbXAgPSAocmlnaHQgPj4+IC0xNiBeIGxlZnQpICYgMHgwMDAwZmZmZjtcbiAgICBsZWZ0IF49IHRlbXA7XG4gICAgcmlnaHQgXj0gdGVtcCA8PCAtMTY7XG4gICAgdGVtcCA9IChsZWZ0ID4+PiAyIF4gcmlnaHQpICYgMHgzMzMzMzMzMztcbiAgICByaWdodCBePSB0ZW1wO1xuICAgIGxlZnQgXj0gdGVtcCA8PCAyO1xuICAgIHRlbXAgPSAocmlnaHQgPj4+IC0xNiBeIGxlZnQpICYgMHgwMDAwZmZmZjtcbiAgICBsZWZ0IF49IHRlbXA7XG4gICAgcmlnaHQgXj0gdGVtcCA8PCAtMTY7XG4gICAgdGVtcCA9IChsZWZ0ID4+PiAxIF4gcmlnaHQpICYgMHg1NTU1NTU1NTtcbiAgICByaWdodCBePSB0ZW1wO1xuICAgIGxlZnQgXj0gdGVtcCA8PCAxO1xuICAgIHRlbXAgPSAocmlnaHQgPj4+IDggXiBsZWZ0KSAmIDB4MDBmZjAwZmY7XG4gICAgbGVmdCBePSB0ZW1wO1xuICAgIHJpZ2h0IF49IHRlbXAgPDwgODtcbiAgICB0ZW1wID0gKGxlZnQgPj4+IDEgXiByaWdodCkgJiAweDU1NTU1NTU1O1xuICAgIHJpZ2h0IF49IHRlbXA7XG4gICAgbGVmdCBePSB0ZW1wIDw8IDE7XG5cbiAgICAvL3RoZSByaWdodCBzaWRlIG5lZWRzIHRvIGJlIHNoaWZ0ZWQgYW5kIHRvIGdldCB0aGUgbGFzdCBmb3VyIGJpdHMgb2YgdGhlIGxlZnQgc2lkZVxuICAgIHRlbXAgPSBsZWZ0IDw8IDggfCByaWdodCA+Pj4gMjAgJiAweDAwMDAwMGYwO1xuICAgIC8vbGVmdCBuZWVkcyB0byBiZSBwdXQgdXBzaWRlIGRvd25cbiAgICBsZWZ0ID0gcmlnaHQgPDwgMjQgfCByaWdodCA8PCA4ICYgMHhmZjAwMDAgfCByaWdodCA+Pj4gOCAmIDB4ZmYwMCB8IHJpZ2h0ID4+PiAyNCAmIDB4ZjA7XG4gICAgcmlnaHQgPSB0ZW1wO1xuXG4gICAgLy9ub3cgZ28gdGhyb3VnaCBhbmQgcGVyZm9ybSB0aGVzZSBzaGlmdHMgb24gdGhlIGxlZnQgYW5kIHJpZ2h0IGtleXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoaWZ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgLy9zaGlmdCB0aGUga2V5cyBlaXRoZXIgb25lIG9yIHR3byBiaXRzIHRvIHRoZSBsZWZ0XG4gICAgICBpZiAoc2hpZnRzW2ldKSB7XG4gICAgICAgIGxlZnQgPSBsZWZ0IDw8IDIgfCBsZWZ0ID4+PiAyNjtcbiAgICAgICAgcmlnaHQgPSByaWdodCA8PCAyIHwgcmlnaHQgPj4+IDI2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGxlZnQgPDwgMSB8IGxlZnQgPj4+IDI3O1xuICAgICAgICByaWdodCA9IHJpZ2h0IDw8IDEgfCByaWdodCA+Pj4gMjc7XG4gICAgICB9XG4gICAgICBsZWZ0ICY9IC0weGY7XG4gICAgICByaWdodCAmPSAtMHhmO1xuXG4gICAgICAvL25vdyBhcHBseSBQQy0yLCBpbiBzdWNoIGEgd2F5IHRoYXQgRSBpcyBlYXNpZXIgd2hlbiBlbmNyeXB0aW5nIG9yIGRlY3J5cHRpbmdcbiAgICAgIC8vdGhpcyBjb252ZXJzaW9uIHdpbGwgbG9vayBsaWtlIFBDLTIgZXhjZXB0IG9ubHkgdGhlIGxhc3QgNiBiaXRzIG9mIGVhY2ggYnl0ZSBhcmUgdXNlZFxuICAgICAgLy9yYXRoZXIgdGhhbiA0OCBjb25zZWN1dGl2ZSBiaXRzIGFuZCB0aGUgb3JkZXIgb2YgbGluZXMgd2lsbCBiZSBhY2NvcmRpbmcgdG9cbiAgICAgIC8vaG93IHRoZSBTIHNlbGVjdGlvbiBmdW5jdGlvbnMgd2lsbCBiZSBhcHBsaWVkOiBTMiwgUzQsIFM2LCBTOCwgUzEsIFMzLCBTNSwgUzdcbiAgICAgIGxlZnR0ZW1wID0gcGMyYnl0ZXMwW2xlZnQgPj4+IDI4XSB8IHBjMmJ5dGVzMVtsZWZ0ID4+PiAyNCAmIDB4Zl0gfCBwYzJieXRlczJbbGVmdCA+Pj4gMjAgJiAweGZdIHwgcGMyYnl0ZXMzW2xlZnQgPj4+IDE2ICYgMHhmXSB8IHBjMmJ5dGVzNFtsZWZ0ID4+PiAxMiAmIDB4Zl0gfCBwYzJieXRlczVbbGVmdCA+Pj4gOCAmIDB4Zl0gfCBwYzJieXRlczZbbGVmdCA+Pj4gNCAmIDB4Zl07XG4gICAgICByaWdodHRlbXAgPSBwYzJieXRlczdbcmlnaHQgPj4+IDI4XSB8IHBjMmJ5dGVzOFtyaWdodCA+Pj4gMjQgJiAweGZdIHwgcGMyYnl0ZXM5W3JpZ2h0ID4+PiAyMCAmIDB4Zl0gfCBwYzJieXRlczEwW3JpZ2h0ID4+PiAxNiAmIDB4Zl0gfCBwYzJieXRlczExW3JpZ2h0ID4+PiAxMiAmIDB4Zl0gfCBwYzJieXRlczEyW3JpZ2h0ID4+PiA4ICYgMHhmXSB8IHBjMmJ5dGVzMTNbcmlnaHQgPj4+IDQgJiAweGZdO1xuICAgICAgdGVtcCA9IChyaWdodHRlbXAgPj4+IDE2IF4gbGVmdHRlbXApICYgMHgwMDAwZmZmZjtcbiAgICAgIGtleXNbbisrXSA9IGxlZnR0ZW1wIF4gdGVtcDtcbiAgICAgIGtleXNbbisrXSA9IHJpZ2h0dGVtcCBeIHRlbXAgPDwgMTY7XG4gICAgfVxuICB9IC8vZm9yIGVhY2ggaXRlcmF0aW9uc1xuICAvL3JldHVybiB0aGUga2V5cyB3ZSd2ZSBjcmVhdGVkXG4gIHJldHVybiBrZXlzO1xufSAvL2VuZCBvZiBkZXNfY3JlYXRlS2V5c1xuXG5cbmZ1bmN0aW9uIGRlc19hZGRQYWRkaW5nKG1lc3NhZ2UsIHBhZGRpbmcpIHtcbiAgdmFyIHBhZExlbmd0aCA9IDggLSBtZXNzYWdlLmxlbmd0aCAlIDg7XG5cbiAgdmFyIHBhZCA9IHZvaWQgMDtcbiAgaWYgKHBhZGRpbmcgPT09IDIgJiYgcGFkTGVuZ3RoIDwgOCkge1xuICAgIC8vcGFkIHRoZSBtZXNzYWdlIHdpdGggc3BhY2VzXG4gICAgcGFkID0gXCIgXCIuY2hhckNvZGVBdCgwKTtcbiAgfSBlbHNlIGlmIChwYWRkaW5nID09PSAxKSB7XG4gICAgLy9QS0NTNyBwYWRkaW5nXG4gICAgcGFkID0gcGFkTGVuZ3RoO1xuICB9IGVsc2UgaWYgKCFwYWRkaW5nICYmIHBhZExlbmd0aCA8IDgpIHtcbiAgICAvL3BhZCB0aGUgbWVzc2FnZSBvdXQgd2l0aCBudWxsIGJ5dGVzXG4gICAgcGFkID0gMDtcbiAgfSBlbHNlIGlmIChwYWRMZW5ndGggPT09IDgpIHtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlczogaW52YWxpZCBwYWRkaW5nJyk7XG4gIH1cblxuICB2YXIgcGFkZGVkTWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UubGVuZ3RoICsgcGFkTGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFkZGVkTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07XG4gIH1cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBwYWRMZW5ndGg7IGorKykge1xuICAgIHBhZGRlZE1lc3NhZ2VbbWVzc2FnZS5sZW5ndGggKyBqXSA9IHBhZDtcbiAgfVxuXG4gIHJldHVybiBwYWRkZWRNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBkZXNfcmVtb3ZlUGFkZGluZyhtZXNzYWdlLCBwYWRkaW5nKSB7XG4gIHZhciBwYWRMZW5ndGggPSBudWxsO1xuICB2YXIgcGFkID0gdm9pZCAwO1xuICBpZiAocGFkZGluZyA9PT0gMikge1xuICAgIC8vIHNwYWNlIHBhZGRlZFxuICAgIHBhZCA9IFwiIFwiLmNoYXJDb2RlQXQoMCk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMSkge1xuICAgIC8vIFBLQ1M3XG4gICAgcGFkTGVuZ3RoID0gbWVzc2FnZVttZXNzYWdlLmxlbmd0aCAtIDFdO1xuICB9IGVsc2UgaWYgKCFwYWRkaW5nKSB7XG4gICAgLy8gbnVsbCBwYWRkaW5nXG4gICAgcGFkID0gMDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlczogaW52YWxpZCBwYWRkaW5nJyk7XG4gIH1cblxuICBpZiAoIXBhZExlbmd0aCkge1xuICAgIHBhZExlbmd0aCA9IDE7XG4gICAgd2hpbGUgKG1lc3NhZ2VbbWVzc2FnZS5sZW5ndGggLSBwYWRMZW5ndGhdID09PSBwYWQpIHtcbiAgICAgIHBhZExlbmd0aCsrO1xuICAgIH1cbiAgICBwYWRMZW5ndGgtLTtcbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlLnN1YmFycmF5KDAsIG1lc3NhZ2UubGVuZ3RoIC0gcGFkTGVuZ3RoKTtcbn1cblxuLy8gYWRkZWQgYnkgUmVjdXJpdHkgTGFic1xuXG5mdW5jdGlvbiBUcmlwbGVERVMoa2V5KSB7XG4gIHRoaXMua2V5ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICB0aGlzLmtleS5wdXNoKG5ldyBVaW50OEFycmF5KGtleS5zdWJhcnJheShpICogOCwgaSAqIDggKyA4KSkpO1xuICB9XG5cbiAgdGhpcy5lbmNyeXB0ID0gZnVuY3Rpb24gKGJsb2NrKSB7XG4gICAgcmV0dXJuIGRlcyhkZXNfY3JlYXRlS2V5cyh0aGlzLmtleVsyXSksIGRlcyhkZXNfY3JlYXRlS2V5cyh0aGlzLmtleVsxXSksIGRlcyhkZXNfY3JlYXRlS2V5cyh0aGlzLmtleVswXSksIGJsb2NrLCB0cnVlLCAwLCBudWxsLCBudWxsKSwgZmFsc2UsIDAsIG51bGwsIG51bGwpLCB0cnVlLCAwLCBudWxsLCBudWxsKTtcbiAgfTtcbn1cblxuVHJpcGxlREVTLmtleVNpemUgPSBUcmlwbGVERVMucHJvdG90eXBlLmtleVNpemUgPSAyNDtcblRyaXBsZURFUy5ibG9ja1NpemUgPSBUcmlwbGVERVMucHJvdG90eXBlLmJsb2NrU2l6ZSA9IDg7XG5cbi8vIFRoaXMgaXMgXCJvcmlnaW5hbFwiIERFU1xuXG5mdW5jdGlvbiBERVMoa2V5KSB7XG4gIHRoaXMua2V5ID0ga2V5O1xuXG4gIHRoaXMuZW5jcnlwdCA9IGZ1bmN0aW9uIChibG9jaywgcGFkZGluZykge1xuICAgIHZhciBrZXlzID0gZGVzX2NyZWF0ZUtleXModGhpcy5rZXkpO1xuICAgIHJldHVybiBkZXMoa2V5cywgYmxvY2ssIHRydWUsIDAsIG51bGwsIHBhZGRpbmcpO1xuICB9O1xuXG4gIHRoaXMuZGVjcnlwdCA9IGZ1bmN0aW9uIChibG9jaywgcGFkZGluZykge1xuICAgIHZhciBrZXlzID0gZGVzX2NyZWF0ZUtleXModGhpcy5rZXkpO1xuICAgIHJldHVybiBkZXMoa2V5cywgYmxvY2ssIGZhbHNlLCAwLCBudWxsLCBwYWRkaW5nKTtcbiAgfTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0geyBERVM6IERFUywgVHJpcGxlREVTOiBUcmlwbGVERVMgfTtcblxufSx7fV0sMzMyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hZXMgPSBfZGVyZXFfKCcuL2FlcycpO1xuXG52YXIgX2FlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hZXMpO1xuXG52YXIgX2RlcyA9IF9kZXJlcV8oJy4vZGVzLmpzJyk7XG5cbnZhciBfZGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Rlcyk7XG5cbnZhciBfY2FzdCA9IF9kZXJlcV8oJy4vY2FzdDUnKTtcblxudmFyIF9jYXN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Nhc3QpO1xuXG52YXIgX3R3b2Zpc2ggPSBfZGVyZXFfKCcuL3R3b2Zpc2gnKTtcblxudmFyIF90d29maXNoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R3b2Zpc2gpO1xuXG52YXIgX2Jsb3dmaXNoID0gX2RlcmVxXygnLi9ibG93ZmlzaCcpO1xuXG52YXIgX2Jsb3dmaXNoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jsb3dmaXNoKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAvKipcbiAgICogQUVTLTEyOCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIChJRCA3KVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSAxMjgtYml0IGtleVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNtY3J5cHRvL2FzbWNyeXB0by5qc3xhc21DcnlwdG99XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk3L2ZpcHMtMTk3LnBkZnxOSVNUIEZJUFMtMTk3fVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKiBAcmVxdWlyZXMgYXNtY3J5cHRvLmpzXG4gICAqL1xuICBhZXMxMjg6ICgwLCBfYWVzMi5kZWZhdWx0KSgxMjgpLFxuICAvKipcbiAgICogQUVTLTEyOCBCbG9jayBDaXBoZXIgKElEIDgpXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IDE5Mi1iaXQga2V5XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc21jcnlwdG8vYXNtY3J5cHRvLmpzfGFzbUNyeXB0b31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTcvZmlwcy0xOTcucGRmfE5JU1QgRklQUy0xOTd9XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqIEByZXF1aXJlcyBhc21jcnlwdG8uanNcbiAgICovXG4gIGFlczE5MjogKDAsIF9hZXMyLmRlZmF1bHQpKDE5MiksXG4gIC8qKlxuICAgKiBBRVMtMTI4IEJsb2NrIENpcGhlciAoSUQgOSlcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgMjU2LWJpdCBrZXlcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzbWNyeXB0by9hc21jcnlwdG8uanN8YXNtQ3J5cHRvfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5Ny9maXBzLTE5Ny5wZGZ8TklTVCBGSVBTLTE5N31cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICogQHJlcXVpcmVzIGFzbWNyeXB0by5qc1xuICAgKi9cbiAgYWVzMjU2OiAoMCwgX2FlczIuZGVmYXVsdCkoMjU2KSxcbiAgLy8gTm90IGluIE9wZW5QR1Agc3BlY2lmaWNhdGlvbnNcbiAgZGVzOiBfZGVzMi5kZWZhdWx0LkRFUyxcbiAgLyoqXG4gICAqIFRyaXBsZSBERVMgQmxvY2sgQ2lwaGVyIChJRCAyKVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSAxOTItYml0IGtleVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL252bHB1YnMubmlzdC5nb3YvbmlzdHB1YnMvU3BlY2lhbFB1YmxpY2F0aW9ucy9OSVNULlNQLjgwMC02N3IyLnBkZnxOSVNUIFNQIDgwMC02N31cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIHRyaXBsZWRlczogX2RlczIuZGVmYXVsdC5UcmlwbGVERVMsXG4gIC8qKlxuICAgKiBDQVNULTEyOCBCbG9jayBDaXBoZXIgKElEIDMpXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IDEyOC1iaXQga2V5XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMTQ0fFRoZSBDQVNULTEyOCBFbmNyeXB0aW9uIEFsZ29yaXRobX1cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIGNhc3Q1OiBfY2FzdDIuZGVmYXVsdCxcbiAgLyoqXG4gICAqIFR3b2Zpc2ggQmxvY2sgQ2lwaGVyIChJRCAxMClcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgMjU2LWJpdCBrZXlcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjcmVmLVRXT0ZJU0h8VFdPRklTSH1cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIHR3b2Zpc2g6IF90d29maXNoMi5kZWZhdWx0LFxuICAvKipcbiAgICogQmxvd2Zpc2ggQmxvY2sgQ2lwaGVyIChJRCA0KVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSAxMjgtYml0IGtleVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNyZWYtQkxPV0ZJU0h8QkxPV0ZJU0h9XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICBibG93ZmlzaDogX2Jsb3dmaXNoMi5kZWZhdWx0LFxuICAvKipcbiAgICogTm90IGltcGxlbWVudGVkXG4gICAqIEBmdW5jdGlvblxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIGlkZWE6IGZ1bmN0aW9uIGlkZWEoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJREVBIHN5bW1ldHJpYy1rZXkgYWxnb3JpdGhtIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59OyAvKipcbiAgICAqIEBmaWxlb3ZlcnZpZXcgU3ltbWV0cmljIGNyeXB0b2dyYXBoeSBmdW5jdGlvbnNcbiAgICAqIEByZXF1aXJlcyBjcnlwdG8vY2lwaGVyL2Flc1xuICAgICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXIvZGVzXG4gICAgKiBAcmVxdWlyZXMgY3J5cHRvL2NpcGhlci9jYXN0NVxuICAgICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXIvdHdvZmlzaFxuICAgICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXIvYmxvd2Zpc2hcbiAgICAqIEBtb2R1bGUgY3J5cHRvL2NpcGhlclxuICAgICovXG5cbn0se1wiLi9hZXNcIjozMjgsXCIuL2Jsb3dmaXNoXCI6MzI5LFwiLi9jYXN0NVwiOjMzMCxcIi4vZGVzLmpzXCI6MzMxLFwiLi90d29maXNoXCI6MzMzfV0sMzMzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2Zyb20gPSBfZGVyZXFfKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb21cIik7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzLCBuby1mYWxsdGhyb3VnaCAqL1xuXG4vKiBNb2RpZmllZCBieSBSZWN1cml0eSBMYWJzIEdtYkhcbiAqXG4gKiBDaXBoZXIuanNcbiAqIEEgYmxvY2stY2lwaGVyIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiBvbiBKYXZhU2NyaXB0XG4gKiBTZWUgQ2lwaGVyLnJlYWRtZS50eHQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4gKlxuICogQ29weXJpZ2h0KGMpIDIwMDkgQXRzdXNoaSBPa2EgWyBodHRwOi8vb2thLm51LyBdXG4gKiBUaGlzIHNjcmlwdCBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMR1BMXG4gKlxuICogQUNLTk9XTEVER01FTlRcbiAqXG4gKiAgICAgVGhlIG1haW4gc3Vicm91dGluZXMgYXJlIHdyaXR0ZW4gYnkgTWljaGllbCB2YW4gRXZlcmRpbmdlbi5cbiAqXG4gKiAgICAgTWljaGllbCB2YW4gRXZlcmRpbmdlblxuICogICAgIGh0dHA6Ly9ob21lLnZlcnNhdGVsLm5sL01BdmFuRXZlcmRpbmdlbi9pbmRleC5odG1sXG4gKlxuICogICAgIEFsbCByaWdodHMgZm9yIHRoZXNlIHJvdXRpbmVzIGFyZSByZXNlcnZlZCB0byBNaWNoaWVsIHZhbiBFdmVyZGluZ2VuLlxuICpcbiAqL1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vTWF0aFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbnZhciBNQVhJTlQgPSAweEZGRkZGRkZGO1xuXG5mdW5jdGlvbiByb3R3KHcsIG4pIHtcbiAgcmV0dXJuICh3IDw8IG4gfCB3ID4+PiAzMiAtIG4pICYgTUFYSU5UO1xufVxuXG5mdW5jdGlvbiBnZXRXKGEsIGkpIHtcbiAgcmV0dXJuIGFbaV0gfCBhW2kgKyAxXSA8PCA4IHwgYVtpICsgMl0gPDwgMTYgfCBhW2kgKyAzXSA8PCAyNDtcbn1cblxuZnVuY3Rpb24gc2V0VyhhLCBpLCB3KSB7XG4gIGEuc3BsaWNlKGksIDQsIHcgJiAweEZGLCB3ID4+PiA4ICYgMHhGRiwgdyA+Pj4gMTYgJiAweEZGLCB3ID4+PiAyNCAmIDB4RkYpO1xufVxuXG5mdW5jdGlvbiBnZXRCKHgsIG4pIHtcbiAgcmV0dXJuIHggPj4+IG4gKiA4ICYgMHhGRjtcbn1cblxuLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVHdvZmlzaFxuLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVUd29maXNoKCkge1xuICAvL1xuICB2YXIga2V5Qnl0ZXMgPSBudWxsO1xuICB2YXIgZGF0YUJ5dGVzID0gbnVsbDtcbiAgdmFyIGRhdGFPZmZzZXQgPSAtMTtcbiAgLy8gdmFyIGRhdGFMZW5ndGggPSAtMTtcbiAgLy8gdmFyIGlkeDIgPSAtMTtcbiAgLy9cblxuICB2YXIgdGZzS2V5ID0gW107XG4gIHZhciB0ZnNNID0gW1tdLCBbXSwgW10sIFtdXTtcblxuICBmdW5jdGlvbiB0ZnNJbml0KGtleSkge1xuICAgIGtleUJ5dGVzID0ga2V5O1xuICAgIHZhciBpID0gdm9pZCAwO1xuICAgIHZhciBhID0gdm9pZCAwO1xuICAgIHZhciBiID0gdm9pZCAwO1xuICAgIHZhciBjID0gdm9pZCAwO1xuICAgIHZhciBkID0gdm9pZCAwO1xuICAgIHZhciBtZUtleSA9IFtdO1xuICAgIHZhciBtb0tleSA9IFtdO1xuICAgIHZhciBpbktleSA9IFtdO1xuICAgIHZhciBrTGVuID0gdm9pZCAwO1xuICAgIHZhciBzS2V5ID0gW107XG4gICAgdmFyIGYwMSA9IHZvaWQgMDtcbiAgICB2YXIgZjViID0gdm9pZCAwO1xuICAgIHZhciBmZWYgPSB2b2lkIDA7XG5cbiAgICB2YXIgcTAgPSBbWzgsIDEsIDcsIDEzLCA2LCAxNSwgMywgMiwgMCwgMTEsIDUsIDksIDE0LCAxMiwgMTAsIDRdLCBbMiwgOCwgMTEsIDEzLCAxNSwgNywgNiwgMTQsIDMsIDEsIDksIDQsIDAsIDEwLCAxMiwgNV1dO1xuICAgIHZhciBxMSA9IFtbMTQsIDEyLCAxMSwgOCwgMSwgMiwgMywgNSwgMTUsIDQsIDEwLCA2LCA3LCAwLCA5LCAxM10sIFsxLCAxNCwgMiwgMTEsIDQsIDEyLCAzLCA3LCA2LCAxMywgMTAsIDUsIDE1LCA5LCAwLCA4XV07XG4gICAgdmFyIHEyID0gW1sxMSwgMTAsIDUsIDE0LCA2LCAxMywgOSwgMCwgMTIsIDgsIDE1LCAzLCAyLCA0LCA3LCAxXSwgWzQsIDEyLCA3LCA1LCAxLCA2LCA5LCAxMCwgMCwgMTQsIDEzLCA4LCAyLCAxMSwgMywgMTVdXTtcbiAgICB2YXIgcTMgPSBbWzEzLCA3LCAxNSwgNCwgMSwgMiwgNiwgMTQsIDksIDExLCAzLCAwLCA4LCA1LCAxMiwgMTBdLCBbMTEsIDksIDUsIDEsIDEyLCAzLCAxMywgMTQsIDYsIDQsIDcsIDE1LCAyLCAwLCA4LCAxMF1dO1xuICAgIHZhciByb3I0ID0gWzAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTVdO1xuICAgIHZhciBhc2h4ID0gWzAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMiwgNSwgMTQsIDddO1xuICAgIHZhciBxID0gW1tdLCBbXV07XG4gICAgdmFyIG0gPSBbW10sIFtdLCBbXSwgW11dO1xuXG4gICAgZnVuY3Rpb24gZmZtNWIoeCkge1xuICAgICAgcmV0dXJuIHggXiB4ID4+IDIgXiBbMCwgOTAsIDE4MCwgMjM4XVt4ICYgM107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmZtRWYoeCkge1xuICAgICAgcmV0dXJuIHggXiB4ID4+IDEgXiB4ID4+IDIgXiBbMCwgMjM4LCAxODAsIDkwXVt4ICYgM107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWRzUmVtKHAsIHEpIHtcbiAgICAgIHZhciBpID0gdm9pZCAwO1xuICAgICAgdmFyIHQgPSB2b2lkIDA7XG4gICAgICB2YXIgdSA9IHZvaWQgMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgdCA9IHEgPj4+IDI0O1xuICAgICAgICBxID0gcSA8PCA4ICYgTUFYSU5UIHwgcCA+Pj4gMjQ7XG4gICAgICAgIHAgPSBwIDw8IDggJiBNQVhJTlQ7XG4gICAgICAgIHUgPSB0IDw8IDE7XG4gICAgICAgIGlmICh0ICYgMTI4KSB7XG4gICAgICAgICAgdSBePSAzMzM7XG4gICAgICAgIH1cbiAgICAgICAgcSBePSB0IF4gdSA8PCAxNjtcbiAgICAgICAgdSBePSB0ID4+PiAxO1xuICAgICAgICBpZiAodCAmIDEpIHtcbiAgICAgICAgICB1IF49IDE2NjtcbiAgICAgICAgfVxuICAgICAgICBxIF49IHUgPDwgMjQgfCB1IDw8IDg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxcChuLCB4KSB7XG4gICAgICB2YXIgYSA9IHggPj4gNDtcbiAgICAgIHZhciBiID0geCAmIDE1O1xuICAgICAgdmFyIGMgPSBxMFtuXVthIF4gYl07XG4gICAgICB2YXIgZCA9IHExW25dW3JvcjRbYl0gXiBhc2h4W2FdXTtcbiAgICAgIHJldHVybiBxM1tuXVtyb3I0W2RdIF4gYXNoeFtjXV0gPDwgNCB8IHEyW25dW2MgXiBkXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoRnVuKHgsIGtleSkge1xuICAgICAgdmFyIGEgPSBnZXRCKHgsIDApO1xuICAgICAgdmFyIGIgPSBnZXRCKHgsIDEpO1xuICAgICAgdmFyIGMgPSBnZXRCKHgsIDIpO1xuICAgICAgdmFyIGQgPSBnZXRCKHgsIDMpO1xuICAgICAgc3dpdGNoIChrTGVuKSB7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBhID0gcVsxXVthXSBeIGdldEIoa2V5WzNdLCAwKTtcbiAgICAgICAgICBiID0gcVswXVtiXSBeIGdldEIoa2V5WzNdLCAxKTtcbiAgICAgICAgICBjID0gcVswXVtjXSBeIGdldEIoa2V5WzNdLCAyKTtcbiAgICAgICAgICBkID0gcVsxXVtkXSBeIGdldEIoa2V5WzNdLCAzKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGEgPSBxWzFdW2FdIF4gZ2V0QihrZXlbMl0sIDApO1xuICAgICAgICAgIGIgPSBxWzFdW2JdIF4gZ2V0QihrZXlbMl0sIDEpO1xuICAgICAgICAgIGMgPSBxWzBdW2NdIF4gZ2V0QihrZXlbMl0sIDIpO1xuICAgICAgICAgIGQgPSBxWzBdW2RdIF4gZ2V0QihrZXlbMl0sIDMpO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgYSA9IHFbMF1bcVswXVthXSBeIGdldEIoa2V5WzFdLCAwKV0gXiBnZXRCKGtleVswXSwgMCk7XG4gICAgICAgICAgYiA9IHFbMF1bcVsxXVtiXSBeIGdldEIoa2V5WzFdLCAxKV0gXiBnZXRCKGtleVswXSwgMSk7XG4gICAgICAgICAgYyA9IHFbMV1bcVswXVtjXSBeIGdldEIoa2V5WzFdLCAyKV0gXiBnZXRCKGtleVswXSwgMik7XG4gICAgICAgICAgZCA9IHFbMV1bcVsxXVtkXSBeIGdldEIoa2V5WzFdLCAzKV0gXiBnZXRCKGtleVswXSwgMyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbVswXVthXSBeIG1bMV1bYl0gXiBtWzJdW2NdIF4gbVszXVtkXTtcbiAgICB9XG5cbiAgICBrZXlCeXRlcyA9IGtleUJ5dGVzLnNsaWNlKDAsIDMyKTtcbiAgICBpID0ga2V5Qnl0ZXMubGVuZ3RoO1xuICAgIHdoaWxlIChpICE9PSAxNiAmJiBpICE9PSAyNCAmJiBpICE9PSAzMikge1xuICAgICAga2V5Qnl0ZXNbaSsrXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGtleUJ5dGVzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBpbktleVtpID4+IDJdID0gZ2V0VyhrZXlCeXRlcywgaSk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcVswXVtpXSA9IHFwKDAsIGkpO1xuICAgICAgcVsxXVtpXSA9IHFwKDEsIGkpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIGYwMSA9IHFbMV1baV07XG4gICAgICBmNWIgPSBmZm01YihmMDEpO1xuICAgICAgZmVmID0gZmZtRWYoZjAxKTtcbiAgICAgIG1bMF1baV0gPSBmMDEgKyAoZjViIDw8IDgpICsgKGZlZiA8PCAxNikgKyAoZmVmIDw8IDI0KTtcbiAgICAgIG1bMl1baV0gPSBmNWIgKyAoZmVmIDw8IDgpICsgKGYwMSA8PCAxNikgKyAoZmVmIDw8IDI0KTtcbiAgICAgIGYwMSA9IHFbMF1baV07XG4gICAgICBmNWIgPSBmZm01YihmMDEpO1xuICAgICAgZmVmID0gZmZtRWYoZjAxKTtcbiAgICAgIG1bMV1baV0gPSBmZWYgKyAoZmVmIDw8IDgpICsgKGY1YiA8PCAxNikgKyAoZjAxIDw8IDI0KTtcbiAgICAgIG1bM11baV0gPSBmNWIgKyAoZjAxIDw8IDgpICsgKGZlZiA8PCAxNikgKyAoZjViIDw8IDI0KTtcbiAgICB9XG5cbiAgICBrTGVuID0gaW5LZXkubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwga0xlbjsgaSsrKSB7XG4gICAgICBhID0gaW5LZXlbaSArIGldO1xuICAgICAgbWVLZXlbaV0gPSBhO1xuICAgICAgYiA9IGluS2V5W2kgKyBpICsgMV07XG4gICAgICBtb0tleVtpXSA9IGI7XG4gICAgICBzS2V5W2tMZW4gLSBpIC0gMV0gPSBtZHNSZW0oYSwgYik7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCA0MDsgaSArPSAyKSB7XG4gICAgICBhID0gMHgxMDEwMTAxICogaTtcbiAgICAgIGIgPSBhICsgMHgxMDEwMTAxO1xuICAgICAgYSA9IGhGdW4oYSwgbWVLZXkpO1xuICAgICAgYiA9IHJvdHcoaEZ1bihiLCBtb0tleSksIDgpO1xuICAgICAgdGZzS2V5W2ldID0gYSArIGIgJiBNQVhJTlQ7XG4gICAgICB0ZnNLZXlbaSArIDFdID0gcm90dyhhICsgMiAqIGIsIDkpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIGEgPSBiID0gYyA9IGQgPSBpO1xuICAgICAgc3dpdGNoIChrTGVuKSB7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBhID0gcVsxXVthXSBeIGdldEIoc0tleVszXSwgMCk7XG4gICAgICAgICAgYiA9IHFbMF1bYl0gXiBnZXRCKHNLZXlbM10sIDEpO1xuICAgICAgICAgIGMgPSBxWzBdW2NdIF4gZ2V0QihzS2V5WzNdLCAyKTtcbiAgICAgICAgICBkID0gcVsxXVtkXSBeIGdldEIoc0tleVszXSwgMyk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBhID0gcVsxXVthXSBeIGdldEIoc0tleVsyXSwgMCk7XG4gICAgICAgICAgYiA9IHFbMV1bYl0gXiBnZXRCKHNLZXlbMl0sIDEpO1xuICAgICAgICAgIGMgPSBxWzBdW2NdIF4gZ2V0QihzS2V5WzJdLCAyKTtcbiAgICAgICAgICBkID0gcVswXVtkXSBeIGdldEIoc0tleVsyXSwgMyk7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0ZnNNWzBdW2ldID0gbVswXVtxWzBdW3FbMF1bYV0gXiBnZXRCKHNLZXlbMV0sIDApXSBeIGdldEIoc0tleVswXSwgMCldO1xuICAgICAgICAgIHRmc01bMV1baV0gPSBtWzFdW3FbMF1bcVsxXVtiXSBeIGdldEIoc0tleVsxXSwgMSldIF4gZ2V0QihzS2V5WzBdLCAxKV07XG4gICAgICAgICAgdGZzTVsyXVtpXSA9IG1bMl1bcVsxXVtxWzBdW2NdIF4gZ2V0QihzS2V5WzFdLCAyKV0gXiBnZXRCKHNLZXlbMF0sIDIpXTtcbiAgICAgICAgICB0ZnNNWzNdW2ldID0gbVszXVtxWzFdW3FbMV1bZF0gXiBnZXRCKHNLZXlbMV0sIDMpXSBeIGdldEIoc0tleVswXSwgMyldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRmc0cwKHgpIHtcbiAgICByZXR1cm4gdGZzTVswXVtnZXRCKHgsIDApXSBeIHRmc01bMV1bZ2V0Qih4LCAxKV0gXiB0ZnNNWzJdW2dldEIoeCwgMildIF4gdGZzTVszXVtnZXRCKHgsIDMpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRmc0cxKHgpIHtcbiAgICByZXR1cm4gdGZzTVswXVtnZXRCKHgsIDMpXSBeIHRmc01bMV1bZ2V0Qih4LCAwKV0gXiB0ZnNNWzJdW2dldEIoeCwgMSldIF4gdGZzTVszXVtnZXRCKHgsIDIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRmc0ZybmQociwgYmxrKSB7XG4gICAgdmFyIGEgPSB0ZnNHMChibGtbMF0pO1xuICAgIHZhciBiID0gdGZzRzEoYmxrWzFdKTtcbiAgICBibGtbMl0gPSByb3R3KGJsa1syXSBeIGEgKyBiICsgdGZzS2V5WzQgKiByICsgOF0gJiBNQVhJTlQsIDMxKTtcbiAgICBibGtbM10gPSByb3R3KGJsa1szXSwgMSkgXiBhICsgMiAqIGIgKyB0ZnNLZXlbNCAqIHIgKyA5XSAmIE1BWElOVDtcbiAgICBhID0gdGZzRzAoYmxrWzJdKTtcbiAgICBiID0gdGZzRzEoYmxrWzNdKTtcbiAgICBibGtbMF0gPSByb3R3KGJsa1swXSBeIGEgKyBiICsgdGZzS2V5WzQgKiByICsgMTBdICYgTUFYSU5ULCAzMSk7XG4gICAgYmxrWzFdID0gcm90dyhibGtbMV0sIDEpIF4gYSArIDIgKiBiICsgdGZzS2V5WzQgKiByICsgMTFdICYgTUFYSU5UO1xuICB9XG5cbiAgZnVuY3Rpb24gdGZzSXJuZChpLCBibGspIHtcbiAgICB2YXIgYSA9IHRmc0cwKGJsa1swXSk7XG4gICAgdmFyIGIgPSB0ZnNHMShibGtbMV0pO1xuICAgIGJsa1syXSA9IHJvdHcoYmxrWzJdLCAxKSBeIGEgKyBiICsgdGZzS2V5WzQgKiBpICsgMTBdICYgTUFYSU5UO1xuICAgIGJsa1szXSA9IHJvdHcoYmxrWzNdIF4gYSArIDIgKiBiICsgdGZzS2V5WzQgKiBpICsgMTFdICYgTUFYSU5ULCAzMSk7XG4gICAgYSA9IHRmc0cwKGJsa1syXSk7XG4gICAgYiA9IHRmc0cxKGJsa1szXSk7XG4gICAgYmxrWzBdID0gcm90dyhibGtbMF0sIDEpIF4gYSArIGIgKyB0ZnNLZXlbNCAqIGkgKyA4XSAmIE1BWElOVDtcbiAgICBibGtbMV0gPSByb3R3KGJsa1sxXSBeIGEgKyAyICogYiArIHRmc0tleVs0ICogaSArIDldICYgTUFYSU5ULCAzMSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZnNDbG9zZSgpIHtcbiAgICB0ZnNLZXkgPSBbXTtcbiAgICB0ZnNNID0gW1tdLCBbXSwgW10sIFtdXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRmc0VuY3J5cHQoZGF0YSwgb2Zmc2V0KSB7XG4gICAgZGF0YUJ5dGVzID0gZGF0YTtcbiAgICBkYXRhT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHZhciBibGsgPSBbZ2V0VyhkYXRhQnl0ZXMsIGRhdGFPZmZzZXQpIF4gdGZzS2V5WzBdLCBnZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDQpIF4gdGZzS2V5WzFdLCBnZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDgpIF4gdGZzS2V5WzJdLCBnZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDEyKSBeIHRmc0tleVszXV07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICAgIHRmc0ZybmQoaiwgYmxrKTtcbiAgICB9XG4gICAgc2V0VyhkYXRhQnl0ZXMsIGRhdGFPZmZzZXQsIGJsa1syXSBeIHRmc0tleVs0XSk7XG4gICAgc2V0VyhkYXRhQnl0ZXMsIGRhdGFPZmZzZXQgKyA0LCBibGtbM10gXiB0ZnNLZXlbNV0pO1xuICAgIHNldFcoZGF0YUJ5dGVzLCBkYXRhT2Zmc2V0ICsgOCwgYmxrWzBdIF4gdGZzS2V5WzZdKTtcbiAgICBzZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDEyLCBibGtbMV0gXiB0ZnNLZXlbN10pO1xuICAgIGRhdGFPZmZzZXQgKz0gMTY7XG4gICAgcmV0dXJuIGRhdGFCeXRlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRmc0RlY3J5cHQoZGF0YSwgb2Zmc2V0KSB7XG4gICAgZGF0YUJ5dGVzID0gZGF0YTtcbiAgICBkYXRhT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHZhciBibGsgPSBbZ2V0VyhkYXRhQnl0ZXMsIGRhdGFPZmZzZXQpIF4gdGZzS2V5WzRdLCBnZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDQpIF4gdGZzS2V5WzVdLCBnZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDgpIF4gdGZzS2V5WzZdLCBnZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDEyKSBeIHRmc0tleVs3XV07XG4gICAgZm9yICh2YXIgaiA9IDc7IGogPj0gMDsgai0tKSB7XG4gICAgICB0ZnNJcm5kKGosIGJsayk7XG4gICAgfVxuICAgIHNldFcoZGF0YUJ5dGVzLCBkYXRhT2Zmc2V0LCBibGtbMl0gXiB0ZnNLZXlbMF0pO1xuICAgIHNldFcoZGF0YUJ5dGVzLCBkYXRhT2Zmc2V0ICsgNCwgYmxrWzNdIF4gdGZzS2V5WzFdKTtcbiAgICBzZXRXKGRhdGFCeXRlcywgZGF0YU9mZnNldCArIDgsIGJsa1swXSBeIHRmc0tleVsyXSk7XG4gICAgc2V0VyhkYXRhQnl0ZXMsIGRhdGFPZmZzZXQgKyAxMiwgYmxrWzFdIF4gdGZzS2V5WzNdKTtcbiAgICBkYXRhT2Zmc2V0ICs9IDE2O1xuICB9XG5cbiAgLy8gYWRkZWQgYnkgUmVjdXJpdHkgTGFic1xuXG4gIGZ1bmN0aW9uIHRmc0ZpbmFsKCkge1xuICAgIHJldHVybiBkYXRhQnl0ZXM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidHdvZmlzaFwiLFxuICAgIGJsb2Nrc2l6ZTogMTI4IC8gOCxcbiAgICBvcGVuOiB0ZnNJbml0LFxuICAgIGNsb3NlOiB0ZnNDbG9zZSxcbiAgICBlbmNyeXB0OiB0ZnNFbmNyeXB0LFxuICAgIGRlY3J5cHQ6IHRmc0RlY3J5cHQsXG4gICAgLy8gYWRkZWQgYnkgUmVjdXJpdHkgTGFic1xuICAgIGZpbmFsaXplOiB0ZnNGaW5hbFxuICB9O1xufVxuXG4vLyBhZGRlZCBieSBSZWN1cml0eSBMYWJzXG5cbmZ1bmN0aW9uIFRGKGtleSkge1xuICB0aGlzLnRmID0gY3JlYXRlVHdvZmlzaCgpO1xuICB0aGlzLnRmLm9wZW4oKDAsIF9mcm9tMi5kZWZhdWx0KShrZXkpLCAwKTtcblxuICB0aGlzLmVuY3J5cHQgPSBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICByZXR1cm4gdGhpcy50Zi5lbmNyeXB0KCgwLCBfZnJvbTIuZGVmYXVsdCkoYmxvY2spLCAwKTtcbiAgfTtcbn1cblxuVEYua2V5U2l6ZSA9IFRGLnByb3RvdHlwZS5rZXlTaXplID0gMzI7XG5URi5ibG9ja1NpemUgPSBURi5wcm90b3R5cGUuYmxvY2tTaXplID0gMTY7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFRGO1xuXG59LHtcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tXCI6MjB9XSwzMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBDQkMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNihrZXkpIHtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0Nikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKCEoX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCkgJiYga2V5Lmxlbmd0aCAhPT0gMjQpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uaW1wb3J0S2V5KCdyYXcnLCBrZXksIHsgbmFtZTogJ0FFUy1DQkMnLCBsZW5ndGg6IGtleS5sZW5ndGggKiA4IH0sIGZhbHNlLCBbJ2VuY3J5cHQnXSk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBrZXkgPSBfY29udGV4dDYuc2VudDtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuYWJydXB0KCdyZXR1cm4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhwdCkge1xuICAgICAgICAgICAgICAgIHZhciBjdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkNyeXB0by5lbmNyeXB0KHsgbmFtZTogJ0FFUy1DQkMnLCBpdjogemVyb0Jsb2NrLCBsZW5ndGg6IGJsb2NrTGVuZ3RoICogOCB9LCBrZXksIHB0KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0ID0gX2NvbnRleHQzLnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywgbmV3IFVpbnQ4QXJyYXkoY3QpLnN1YmFycmF5KDAsIGN0LmJ5dGVMZW5ndGggLSBibG9ja0xlbmd0aCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUzLCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKCFfdXRpbDIuZGVmYXVsdC5nZXROb2RlQ3J5cHRvKCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA4O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTm9kZSBjcnlwdG8gbGlicmFyeVxuICAgICAgICAgICAga2V5ID0gbmV3IEJ1ZmZlcihrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5hYnJ1cHQoJ3JldHVybicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY1ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KHB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuLCBjdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBuZXcgQnVmZmVyKHB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuID0gbmV3IG5vZGVDcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0nICsga2V5Lmxlbmd0aCAqIDggKyAnLWNiYycsIGtleSwgemVyb0Jsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0ID0gZW4udXBkYXRlKHB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuYWJydXB0KCdyZXR1cm4nLCBuZXcgVWludDhBcnJheShjdCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU0LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY1LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpO1xuXG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5hYnJ1cHQoJ3JldHVybicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1KHB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1JChfY29udGV4dDUpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ1LnByZXYgPSBfY29udGV4dDUubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuYWJydXB0KCdyZXR1cm4nLCBfZXhwb3J0cy5BRVNfQ0JDLmVuY3J5cHQocHQsIGtleSwgZmFsc2UsIHplcm9CbG9jaykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU1LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpO1xuXG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU2LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBDQkMoX3gzKSB7XG4gICAgcmV0dXJuIF9yZWYzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBfZXhwb3J0cyA9IF9kZXJlcV8oJ2FzbWNyeXB0by5qcy9zcmMvYWVzL2NiYy9leHBvcnRzJyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBBRVMtQ01BQyBvbiB0b3Agb2ZcbiAqIG5hdGl2ZSBBRVMtQ0JDIHVzaW5nIGVpdGhlciB0aGUgV2ViQ3J5cHRvIEFQSSBvciBOb2RlLmpzJyBjcnlwdG8gQVBJLlxuICogQHJlcXVpcmVzIGFzbWNyeXB0by5qc1xuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUgY3J5cHRvL2NtYWNcbiAqL1xuXG52YXIgd2ViQ3J5cHRvID0gX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCk7XG52YXIgbm9kZUNyeXB0byA9IF91dGlsMi5kZWZhdWx0LmdldE5vZGVDcnlwdG8oKTtcbnZhciBCdWZmZXIgPSBfdXRpbDIuZGVmYXVsdC5nZXROb2RlQnVmZmVyKCk7XG5cbi8qKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBDTUFDIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiBvZiBPTUFDIGluXG4gKiBodHRwOi8vd2ViLmNzLnVjZGF2aXMuZWR1L35yb2dhd2F5L3BhcGVycy9lYXgucGRmLiBBcyBwZXIgdGhhdFxuICogZG9jdW1lbnQ6XG4gKlxuICogV2UgaGF2ZSBtYWRlIGEgc21hbGwgbW9kaWZpY2F0aW9uIHRvIHRoZSBPTUFDIGFsZ29yaXRobSBhcyBpdCB3YXNcbiAqIG9yaWdpbmFsbHkgcHJlc2VudGVkLCBjaGFuZ2luZyBvbmUgb2YgaXRzIHR3byBjb25zdGFudHMuXG4gKiBTcGVjaWZpY2FsbHksIHRoZSBjb25zdGFudCA0IGF0IGxpbmUgODUgd2FzIHRoZSBjb25zdGFudCAxLzIgKHRoZVxuICogbXVsdGlwbGljYXRpdmUgaW52ZXJzZSBvZiAyKSBpbiB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBvZiBPTUFDIFsxNF0uXG4gKiBUaGUgT01BQyBhdXRob3JzIGluZGljYXRlIHRoYXQgdGhleSB3aWxsIHByb211bGdhdGUgdGhpcyBtb2RpZmljYXRpb25cbiAqIFsxNV0sIHdoaWNoIHNsaWdodGx5IHNpbXBsaWZpZXMgaW1wbGVtZW50YXRpb25zLlxuICovXG5cbnZhciBibG9ja0xlbmd0aCA9IDE2O1xuXG4vKipcbiAqIHhvciBgcGFkZGluZ2AgaW50byB0aGUgZW5kIG9mIGBkYXRhYC4gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIFwidGhlXG4gKiBvcGVyYXRpb24geG9y4oaSIFt3aGljaF0geG9ycyB0aGUgc2hvcnRlciBzdHJpbmcgaW50byB0aGUgZW5kIG9mIGxvbmdlclxuICogb25lXCIuIFNpbmNlIGRhdGEgaXMgYWx3YXlzIGFzIGxlYXN0IGFzIGxvbmcgYXMgcGFkZGluZywgd2UgY2FuXG4gKiBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24uXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gcGFkZGluZ1xuICovXG5mdW5jdGlvbiByaWdodFhvck11dChkYXRhLCBwYWRkaW5nKSB7XG4gIHZhciBvZmZzZXQgPSBkYXRhLmxlbmd0aCAtIGJsb2NrTGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrTGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhW2kgKyBvZmZzZXRdIF49IHBhZGRpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHBhZChkYXRhLCBwYWRkaW5nLCBwYWRkaW5nMikge1xuICAvLyBpZiB8TXwgaW4ge24sIDJuLCAzbiwgLi4ufVxuICBpZiAoZGF0YS5sZW5ndGggJSBibG9ja0xlbmd0aCA9PT0gMCkge1xuICAgIC8vIHRoZW4gcmV0dXJuIE0geG9y4oaSIEIsXG4gICAgcmV0dXJuIHJpZ2h0WG9yTXV0KGRhdGEsIHBhZGRpbmcpO1xuICB9XG4gIC8vIGVsc2UgcmV0dXJuIChNIHx8IDEwXihu4oiSMeKIkih8TXwgbW9kIG4pKSkgeG9y4oaSIFBcbiAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KGRhdGEubGVuZ3RoICsgKGJsb2NrTGVuZ3RoIC0gZGF0YS5sZW5ndGggJSBibG9ja0xlbmd0aCkpO1xuICBwYWRkZWQuc2V0KGRhdGEpO1xuICBwYWRkZWRbZGF0YS5sZW5ndGhdID0gMTI4O1xuICByZXR1cm4gcmlnaHRYb3JNdXQocGFkZGVkLCBwYWRkaW5nMik7XG59XG5cbnZhciB6ZXJvQmxvY2sgPSBuZXcgVWludDhBcnJheShibG9ja0xlbmd0aCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoa2V5KSB7XG4gICAgdmFyIGNiYywgcGFkZGluZywgcGFkZGluZzI7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjtcbiAgICAgICAgICAgIHJldHVybiBDQkMoa2V5KTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNiYyA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQyLnQwID0gX3V0aWwyLmRlZmF1bHQ7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDY7XG4gICAgICAgICAgICByZXR1cm4gY2JjKHplcm9CbG9jayk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBfY29udGV4dDIudDEgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgIHBhZGRpbmcgPSBfY29udGV4dDIudDAuZG91YmxlLmNhbGwoX2NvbnRleHQyLnQwLCBfY29udGV4dDIudDEpO1xuICAgICAgICAgICAgcGFkZGluZzIgPSBfdXRpbDIuZGVmYXVsdC5kb3VibGUocGFkZGluZyk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2JjKHBhZChkYXRhLCBwYWRkaW5nLCBwYWRkaW5nMikpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQudDAgPSAtYmxvY2tMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBfY29udGV4dC5zZW50LnN1YmFycmF5KF9jb250ZXh0LnQwKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gIH0pKTtcblxuICBmdW5jdGlvbiBDTUFDKF94KSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBDTUFDO1xufSgpO1xuXG59LHtcIi4uL3V0aWxcIjozOTgsXCJhc21jcnlwdG8uanMvc3JjL2Flcy9jYmMvZXhwb3J0c1wiOjUsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzM1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX3B1YmxpY19rZXkgPSBfZGVyZXFfKCcuL3B1YmxpY19rZXknKTtcblxudmFyIF9wdWJsaWNfa2V5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3B1YmxpY19rZXkpO1xuXG52YXIgX2NpcGhlciA9IF9kZXJlcV8oJy4vY2lwaGVyJyk7XG5cbnZhciBfY2lwaGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NpcGhlcik7XG5cbnZhciBfcmFuZG9tID0gX2RlcmVxXygnLi9yYW5kb20nKTtcblxudmFyIF9yYW5kb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmFuZG9tKTtcblxudmFyIF9lY2RoX3N5bWtleSA9IF9kZXJlcV8oJy4uL3R5cGUvZWNkaF9zeW1rZXknKTtcblxudmFyIF9lY2RoX3N5bWtleTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lY2RoX3N5bWtleSk7XG5cbnZhciBfa2RmX3BhcmFtcyA9IF9kZXJlcV8oJy4uL3R5cGUva2RmX3BhcmFtcycpO1xuXG52YXIgX2tkZl9wYXJhbXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2RmX3BhcmFtcyk7XG5cbnZhciBfbXBpID0gX2RlcmVxXygnLi4vdHlwZS9tcGknKTtcblxudmFyIF9tcGkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbXBpKTtcblxudmFyIF9vaWQgPSBfZGVyZXFfKCcuLi90eXBlL29pZCcpO1xuXG52YXIgX29pZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vaWQpO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8vIFRoZSBHUEc0QnJvd3NlcnMgY3J5cHRvIGludGVyZmFjZVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUHJvdmlkZXMgZnVuY3Rpb25zIGZvciBhc3ltbWV0cmljIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gYXNcbiAqIHdlbGwgYXMga2V5IGdlbmVyYXRpb24gYW5kIHBhcmFtZXRlciBoYW5kbGluZyBmb3IgYWxsIHB1YmxpYy1rZXkgY3J5cHRvc3lzdGVtcy5cbiAqIEByZXF1aXJlcyBjcnlwdG8vcHVibGljX2tleVxuICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXJcbiAqIEByZXF1aXJlcyBjcnlwdG8vcmFuZG9tXG4gKiBAcmVxdWlyZXMgdHlwZS9lY2RoX3N5bWtleVxuICogQHJlcXVpcmVzIHR5cGUva2RmX3BhcmFtc1xuICogQHJlcXVpcmVzIHR5cGUvbXBpXG4gKiBAcmVxdWlyZXMgdHlwZS9vaWRcbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQG1vZHVsZSBjcnlwdG8vY3J5cHRvXG4gKi9cblxuZnVuY3Rpb24gY29uc3RydWN0UGFyYW1zKHR5cGVzLCBkYXRhKSB7XG4gIHJldHVybiB0eXBlcy5tYXAoZnVuY3Rpb24gKHR5cGUsIGkpIHtcbiAgICBpZiAoZGF0YSAmJiBkYXRhW2ldKSB7XG4gICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdHlwZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAvKipcbiAgICogRW5jcnlwdHMgZGF0YSB1c2luZyBzcGVjaWZpZWQgYWxnb3JpdGhtIGFuZCBwdWJsaWMga2V5IHBhcmFtZXRlcnMuXG4gICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi05LjF8UkZDIDQ4ODAgOS4xfSBmb3IgcHVibGljIGtleSBhbGdvcml0aG1zLlxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5wdWJsaWNLZXl9ICAgICAgICBhbGdvICAgICAgICBQdWJsaWMga2V5IGFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0FycmF5PG1vZHVsZTp0eXBlL21waXxcbiAgICAgICAgICAgICAgICAgICBtb2R1bGU6dHlwZS9vaWR8XG4gICAgICAgICAgICAgICAgICAgbW9kdWxlOnR5cGUva2RmX3BhcmFtcz59IHB1Yl9wYXJhbXMgIEFsZ29yaXRobS1zcGVjaWZpYyBwdWJsaWMga2V5IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHttb2R1bGU6dHlwZS9tcGl9ICAgICAgICAgICAgICAgZGF0YSAgICAgICAgRGF0YSB0byBiZSBlbmNyeXB0ZWQgYXMgTVBJXG4gICAqIEBwYXJhbSB7U3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50IFJlY2lwaWVudCBmaW5nZXJwcmludFxuICAgKiBAcmV0dXJucyB7QXJyYXk8bW9kdWxlOnR5cGUvbXBpfFxuICAgKiAgICAgICAgICAgICAgICAgbW9kdWxlOnR5cGUvZWNkaF9zeW1rZXk+fSAgICAgICAgICBlbmNyeXB0ZWQgc2Vzc2lvbiBrZXkgcGFyYW1ldGVyc1xuICAgKiBAYXN5bmNcbiAgICovXG4gIHB1YmxpY0tleUVuY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihhbGdvLCBwdWJfcGFyYW1zLCBkYXRhLCBmaW5nZXJwcmludCkge1xuICAgICAgdmFyIHR5cGVzO1xuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgdHlwZXMgPSB0aGlzLmdldEVuY1Nlc3Npb25LZXlQYXJhbVR5cGVzKGFsZ28pO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG0sIG4sIGUsIHJlcywgX20sIHAsIGcsIHksIF9yZXMsIG9pZCwgUSwga2RmX3BhcmFtcywgX3JlczI7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC50MCA9IGFsZ287XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gX2NvbnRleHQudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkucnNhX2VuY3J5cHQgPyAzIDogX2NvbnRleHQudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkucnNhX2VuY3J5cHRfc2lnbiA/IDMgOiBfY29udGV4dC50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lbGdhbWFsID8gMTAgOiBfY29udGV4dC50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lY2RoID8gMTggOiAyNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGRhdGEudG9CTigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHB1Yl9wYXJhbXNbMF0udG9CTigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHB1Yl9wYXJhbXNbMV0udG9CTigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3B1YmxpY19rZXkyLmRlZmF1bHQucnNhLmVuY3J5cHQobSwgbiwgZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgY29uc3RydWN0UGFyYW1zKHR5cGVzLCBbcmVzXSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9tID0gZGF0YS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gcHViX3BhcmFtc1swXS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gcHViX3BhcmFtc1sxXS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gcHViX3BhcmFtc1syXS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3B1YmxpY19rZXkyLmRlZmF1bHQuZWxnYW1hbC5lbmNyeXB0KF9tLCBwLCBnLCB5KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVzID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIGNvbnN0cnVjdFBhcmFtcyh0eXBlcywgW19yZXMuYzEsIF9yZXMuYzJdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgICAgICAgb2lkID0gcHViX3BhcmFtc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFEgPSBwdWJfcGFyYW1zWzFdLnRvVWludDhBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2RmX3BhcmFtcyA9IHB1Yl9wYXJhbXNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3B1YmxpY19rZXkyLmRlZmF1bHQuZWxsaXB0aWMuZWNkaC5lbmNyeXB0KG9pZCwga2RmX3BhcmFtcy5jaXBoZXIsIGtkZl9wYXJhbXMuaGFzaCwgZGF0YSwgUSwgZmluZ2VycHJpbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZXMyID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIGNvbnN0cnVjdFBhcmFtcyh0eXBlcywgW19yZXMyLlYsIF9yZXMyLkNdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgW10pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSkoKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgIH0pKTtcblxuICAgIGZ1bmN0aW9uIHB1YmxpY0tleUVuY3J5cHQoX3gsIF94MiwgX3gzLCBfeDQpIHtcbiAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1YmxpY0tleUVuY3J5cHQ7XG4gIH0oKSxcblxuICAvKipcbiAgICogRGVjcnlwdHMgZGF0YSB1c2luZyBzcGVjaWZpZWQgYWxnb3JpdGhtIGFuZCBwcml2YXRlIGtleSBwYXJhbWV0ZXJzLlxuICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS4xfFJGQyA0ODgwIDkuMX0gZm9yIHB1YmxpYyBrZXkgYWxnb3JpdGhtcy5cbiAgICogQHBhcmFtIHttb2R1bGU6ZW51bXMucHVibGljS2V5fSAgICAgICAgYWxnbyAgICAgICAgUHVibGljIGtleSBhbGdvcml0aG1cbiAgICogQHBhcmFtIHtBcnJheTxtb2R1bGU6dHlwZS9tcGl8XG4gICAgICAgICAgICAgICAgICAgbW9kdWxlOnR5cGUvb2lkfFxuICAgICAgICAgICAgICAgICAgIG1vZHVsZTp0eXBlL2tkZl9wYXJhbXM+fSBrZXlfcGFyYW1zICBBbGdvcml0aG0tc3BlY2lmaWMgcHVibGljLCBwcml2YXRlIGtleSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXk8bW9kdWxlOnR5cGUvbXBpfFxuICAgICAgICAgICAgICAgICAgIG1vZHVsZTp0eXBlL2VjZGhfc3lta2V5Pn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9wYXJhbXMgZW5jcnlwdGVkIHNlc3Npb24ga2V5IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgUmVjaXBpZW50IGZpbmdlcnByaW50XG4gICAqIEByZXR1cm5zIHttb2R1bGU6dHlwZS9tcGl9ICAgICAgICAgICAgICAgICAgICAgICAgIEFuIE1QSSBjb250YWluaW5nIHRoZSBkZWNyeXB0ZWQgZGF0YVxuICAgKiBAYXN5bmNcbiAgICovXG4gIHB1YmxpY0tleURlY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQoYWxnbywga2V5X3BhcmFtcywgZGF0YV9wYXJhbXMsIGZpbmdlcnByaW50KSB7XG4gICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBfY29udGV4dDQudDAgPSBfbXBpMi5kZWZhdWx0O1xuICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDM7XG4gICAgICAgICAgICAgIHJldHVybiAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGMsIG4sIGUsIGQsIHAsIHEsIHUsIGMxLCBjMiwgX3AsIHgsIG9pZCwga2RmX3BhcmFtcywgViwgQywgX2Q7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gYWxnbztcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gX2NvbnRleHQzLnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9lbmNyeXB0X3NpZ24gPyAzIDogX2NvbnRleHQzLnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9lbmNyeXB0ID8gMyA6IF9jb250ZXh0My50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lbGdhbWFsID8gMTEgOiBfY29udGV4dDMudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaCA/IDE2IDogMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBkYXRhX3BhcmFtc1swXS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0ga2V5X3BhcmFtc1swXS50b0JOKCk7IC8vIG4gPSBwcVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBlID0ga2V5X3BhcmFtc1sxXS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0ga2V5X3BhcmFtc1syXS50b0JOKCk7IC8vIGRlID0gMSBtb2QgKHAtMSkocS0xKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0ga2V5X3BhcmFtc1szXS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBxID0ga2V5X3BhcmFtc1s0XS50b0JOKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0ga2V5X3BhcmFtc1s1XS50b0JOKCk7IC8vIHFeLTEgbW9kIHBcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoJ3JldHVybicsIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LnJzYS5kZWNyeXB0KGMsIG4sIGUsIGQsIHAsIHEsIHUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGRhdGFfcGFyYW1zWzBdLnRvQk4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gZGF0YV9wYXJhbXNbMV0udG9CTigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3AgPSBrZXlfcGFyYW1zWzBdLnRvQk4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHggPSBrZXlfcGFyYW1zWzNdLnRvQk4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCdyZXR1cm4nLCBfcHVibGljX2tleTIuZGVmYXVsdC5lbGdhbWFsLmRlY3J5cHQoYzEsIGMyLCBfcCwgeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9pZCA9IGtleV9wYXJhbXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBrZGZfcGFyYW1zID0ga2V5X3BhcmFtc1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFYgPSBkYXRhX3BhcmFtc1swXS50b1VpbnQ4QXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBkYXRhX3BhcmFtc1sxXS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSBrZXlfcGFyYW1zWzNdLnRvVWludDhBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoJ3JldHVybicsIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmVsbGlwdGljLmVjZGguZGVjcnlwdChvaWQsIGtkZl9wYXJhbXMuY2lwaGVyLCBrZGZfcGFyYW1zLmhhc2gsIFYsIEMsIF9kLCBmaW5nZXJwcmludCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwdWJsaWMga2V5IGVuY3J5cHRpb24gYWxnb3JpdGhtLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMywgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKSgpO1xuXG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIF9jb250ZXh0NC50MSA9IF9jb250ZXh0NC5zZW50O1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdCgncmV0dXJuJywgbmV3IF9jb250ZXh0NC50MChfY29udGV4dDQudDEpKTtcblxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlNCwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gcHVibGljS2V5RGVjcnlwdChfeDUsIF94NiwgX3g3LCBfeDgpIHtcbiAgICAgIHJldHVybiBfcmVmMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBwdWJsaWNLZXlEZWNyeXB0O1xuICB9KCksXG5cbiAgLyoqIFJldHVybnMgdGhlIHR5cGVzIGNvbXByaXNpbmcgdGhlIHByaXZhdGUga2V5IG9mIGFuIGFsZ29yaXRobVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYWxnbyBUaGUgcHVibGljIGtleSBhbGdvcml0aG1cbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBhcnJheSBvZiB0eXBlc1xuICAgKi9cbiAgZ2V0UHJpdktleVBhcmFtVHlwZXM6IGZ1bmN0aW9uIGdldFByaXZLZXlQYXJhbVR5cGVzKGFsZ28pIHtcbiAgICBzd2l0Y2ggKGFsZ28pIHtcbiAgICAgIC8vICAgQWxnb3JpdGhtLVNwZWNpZmljIEZpZWxkcyBmb3IgUlNBIHNlY3JldCBrZXlzOlxuICAgICAgLy8gICAgICAgLSBtdWx0aXByZWNpc2lvbiBpbnRlZ2VyIChNUEkpIG9mIFJTQSBzZWNyZXQgZXhwb25lbnQgZC5cbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIFJTQSBzZWNyZXQgcHJpbWUgdmFsdWUgcC5cbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIFJTQSBzZWNyZXQgcHJpbWUgdmFsdWUgcSAocCA8IHEpLlxuICAgICAgLy8gICAgICAgLSBNUEkgb2YgdSwgdGhlIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgcCwgbW9kIHEuXG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkucnNhX2VuY3J5cHQ6XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkucnNhX2VuY3J5cHRfc2lnbjpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2Ffc2lnbjpcbiAgICAgICAgcmV0dXJuIFtfbXBpMi5kZWZhdWx0LCBfbXBpMi5kZWZhdWx0LCBfbXBpMi5kZWZhdWx0LCBfbXBpMi5kZWZhdWx0XTtcbiAgICAgIC8vICAgQWxnb3JpdGhtLVNwZWNpZmljIEZpZWxkcyBmb3IgRWxnYW1hbCBzZWNyZXQga2V5czpcbiAgICAgIC8vICAgICAgICAtIE1QSSBvZiBFbGdhbWFsIHNlY3JldCBleHBvbmVudCB4LlxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVsZ2FtYWw6XG4gICAgICAgIHJldHVybiBbX21waTIuZGVmYXVsdF07XG4gICAgICAvLyAgIEFsZ29yaXRobS1TcGVjaWZpYyBGaWVsZHMgZm9yIERTQSBzZWNyZXQga2V5czpcbiAgICAgIC8vICAgICAgLSBNUEkgb2YgRFNBIHNlY3JldCBleHBvbmVudCB4LlxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmRzYTpcbiAgICAgICAgcmV0dXJuIFtfbXBpMi5kZWZhdWx0XTtcbiAgICAgIC8vICAgQWxnb3JpdGhtLVNwZWNpZmljIEZpZWxkcyBmb3IgRUNEU0Egb3IgRUNESCBzZWNyZXQga2V5czpcbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQga2V5LlxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZGg6XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2E6XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWRkc2E6XG4gICAgICAgIHJldHVybiBbX21waTIuZGVmYXVsdF07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVibGljIGtleSBlbmNyeXB0aW9uIGFsZ29yaXRobS4nKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqIFJldHVybnMgdGhlIHR5cGVzIGNvbXByaXNpbmcgdGhlIHB1YmxpYyBrZXkgb2YgYW4gYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhbGdvIFRoZSBwdWJsaWMga2V5IGFsZ29yaXRobVxuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFycmF5IG9mIHR5cGVzXG4gICAqL1xuICBnZXRQdWJLZXlQYXJhbVR5cGVzOiBmdW5jdGlvbiBnZXRQdWJLZXlQYXJhbVR5cGVzKGFsZ28pIHtcbiAgICBzd2l0Y2ggKGFsZ28pIHtcbiAgICAgIC8vICAgQWxnb3JpdGhtLVNwZWNpZmljIEZpZWxkcyBmb3IgUlNBIHB1YmxpYyBrZXlzOlxuICAgICAgLy8gICAgICAgLSBhIG11bHRpcHJlY2lzaW9uIGludGVnZXIgKE1QSSkgb2YgUlNBIHB1YmxpYyBtb2R1bHVzIG47XG4gICAgICAvLyAgICAgICAtIGFuIE1QSSBvZiBSU0EgcHVibGljIGVuY3J5cHRpb24gZXhwb25lbnQgZS5cbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdDpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdF9zaWduOlxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9zaWduOlxuICAgICAgICByZXR1cm4gW19tcGkyLmRlZmF1bHQsIF9tcGkyLmRlZmF1bHRdO1xuICAgICAgLy8gICBBbGdvcml0aG0tU3BlY2lmaWMgRmllbGRzIGZvciBFbGdhbWFsIHB1YmxpYyBrZXlzOlxuICAgICAgLy8gICAgICAgLSBNUEkgb2YgRWxnYW1hbCBwcmltZSBwO1xuICAgICAgLy8gICAgICAgLSBNUEkgb2YgRWxnYW1hbCBncm91cCBnZW5lcmF0b3IgZztcbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIEVsZ2FtYWwgcHVibGljIGtleSB2YWx1ZSB5ICg9IGcqKnggbW9kIHAgd2hlcmUgeCAgaXMgc2VjcmV0KS5cbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lbGdhbWFsOlxuICAgICAgICByZXR1cm4gW19tcGkyLmRlZmF1bHQsIF9tcGkyLmRlZmF1bHQsIF9tcGkyLmRlZmF1bHRdO1xuICAgICAgLy8gICBBbGdvcml0aG0tU3BlY2lmaWMgRmllbGRzIGZvciBEU0EgcHVibGljIGtleXM6XG4gICAgICAvLyAgICAgICAtIE1QSSBvZiBEU0EgcHJpbWUgcDtcbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIERTQSBncm91cCBvcmRlciBxIChxIGlzIGEgcHJpbWUgZGl2aXNvciBvZiBwLTEpO1xuICAgICAgLy8gICAgICAgLSBNUEkgb2YgRFNBIGdyb3VwIGdlbmVyYXRvciBnO1xuICAgICAgLy8gICAgICAgLSBNUEkgb2YgRFNBIHB1YmxpYy1rZXkgdmFsdWUgeSAoPSBnKip4IG1vZCBwIHdoZXJlIHggIGlzIHNlY3JldCkuXG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZHNhOlxuICAgICAgICByZXR1cm4gW19tcGkyLmRlZmF1bHQsIF9tcGkyLmRlZmF1bHQsIF9tcGkyLmRlZmF1bHQsIF9tcGkyLmRlZmF1bHRdO1xuICAgICAgLy8gICBBbGdvcml0aG0tU3BlY2lmaWMgRmllbGRzIGZvciBFQ0RTQS9FZERTQSBwdWJsaWMga2V5czpcbiAgICAgIC8vICAgICAgIC0gT0lEIG9mIGN1cnZlO1xuICAgICAgLy8gICAgICAgLSBNUEkgb2YgRUMgcG9pbnQgcmVwcmVzZW50aW5nIHB1YmxpYyBrZXkuXG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2E6XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWRkc2E6XG4gICAgICAgIHJldHVybiBbX29pZDIuZGVmYXVsdCwgX21waTIuZGVmYXVsdF07XG4gICAgICAvLyAgIEFsZ29yaXRobS1TcGVjaWZpYyBGaWVsZHMgZm9yIEVDREggcHVibGljIGtleXM6XG4gICAgICAvLyAgICAgICAtIE9JRCBvZiBjdXJ2ZTtcbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIEVDIHBvaW50IHJlcHJlc2VudGluZyBwdWJsaWMga2V5LlxuICAgICAgLy8gICAgICAgLSBLREY6IHZhcmlhYmxlLWxlbmd0aCBmaWVsZCBjb250YWluaW5nIEtERiBwYXJhbWV0ZXJzLlxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZGg6XG4gICAgICAgIHJldHVybiBbX29pZDIuZGVmYXVsdCwgX21waTIuZGVmYXVsdCwgX2tkZl9wYXJhbXMyLmRlZmF1bHRdO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHB1YmxpYyBrZXkgZW5jcnlwdGlvbiBhbGdvcml0aG0uJyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKiBSZXR1cm5zIHRoZSB0eXBlcyBjb21wcmlzaW5nIHRoZSBlbmNyeXB0ZWQgc2Vzc2lvbiBrZXkgb2YgYW4gYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhbGdvIFRoZSBwdWJsaWMga2V5IGFsZ29yaXRobVxuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFycmF5IG9mIHR5cGVzXG4gICAqL1xuICBnZXRFbmNTZXNzaW9uS2V5UGFyYW1UeXBlczogZnVuY3Rpb24gZ2V0RW5jU2Vzc2lvbktleVBhcmFtVHlwZXMoYWxnbykge1xuICAgIHN3aXRjaCAoYWxnbykge1xuICAgICAgLy8gICBBbGdvcml0aG0tU3BlY2lmaWMgRmllbGRzIGZvciBSU0EgZW5jcnlwdGVkIHNlc3Npb24ga2V5czpcbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIFJTQSBlbmNyeXB0ZWQgdmFsdWUgbSoqZSBtb2Qgbi5cbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdDpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdF9zaWduOlxuICAgICAgICByZXR1cm4gW19tcGkyLmRlZmF1bHRdO1xuXG4gICAgICAvLyAgIEFsZ29yaXRobS1TcGVjaWZpYyBGaWVsZHMgZm9yIEVsZ2FtYWwgZW5jcnlwdGVkIHNlc3Npb24ga2V5czpcbiAgICAgIC8vICAgICAgIC0gTVBJIG9mIEVsZ2FtYWwgdmFsdWUgZyoqayBtb2QgcFxuICAgICAgLy8gICAgICAgLSBNUEkgb2YgRWxnYW1hbCB2YWx1ZSBtICogeSoqayBtb2QgcFxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVsZ2FtYWw6XG4gICAgICAgIHJldHVybiBbX21waTIuZGVmYXVsdCwgX21waTIuZGVmYXVsdF07XG4gICAgICAvLyAgIEFsZ29yaXRobS1TcGVjaWZpYyBGaWVsZHMgZm9yIEVDREggZW5jcnlwdGVkIHNlc3Npb24ga2V5czpcbiAgICAgIC8vICAgICAgIC0gTVBJIGNvbnRhaW5pbmcgdGhlIGVwaGVtZXJhbCBrZXkgdXNlZCB0byBlc3RhYmxpc2ggdGhlIHNoYXJlZCBzZWNyZXRcbiAgICAgIC8vICAgICAgIC0gRUNESCBTeW1tZXRyaWMgS2V5XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaDpcbiAgICAgICAgcmV0dXJuIFtfbXBpMi5kZWZhdWx0LCBfZWNkaF9zeW1rZXkyLmRlZmF1bHRdO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHB1YmxpYyBrZXkgZW5jcnlwdGlvbiBhbGdvcml0aG0uJyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKiBHZW5lcmF0ZSBhbGdvcml0aG0tc3BlY2lmaWMga2V5IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9ICAgICAgICAgIGFsZ28gVGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gICAgICAgICBiaXRzIEJpdCBsZW5ndGggZm9yIFJTQSBrZXlzXG4gICAqIEBwYXJhbSB7bW9kdWxlOnR5cGUvb2lkfSBvaWQgIE9iamVjdCBpZGVudGlmaWVyIGZvciBFQ0Mga2V5c1xuICAgKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICBUaGUgYXJyYXkgb2YgcGFyYW1ldGVyc1xuICAgKiBAYXN5bmNcbiAgICovXG4gIGdlbmVyYXRlUGFyYW1zOiBmdW5jdGlvbiBnZW5lcmF0ZVBhcmFtcyhhbGdvLCBiaXRzLCBvaWQpIHtcbiAgICB2YXIgdHlwZXMgPSBbXS5jb25jYXQodGhpcy5nZXRQdWJLZXlQYXJhbVR5cGVzKGFsZ28pLCB0aGlzLmdldFByaXZLZXlQYXJhbVR5cGVzKGFsZ28pKTtcbiAgICBzd2l0Y2ggKGFsZ28pIHtcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdDpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdF9zaWduOlxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9zaWduOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LnJzYS5nZW5lcmF0ZShiaXRzLCBcIjEwMDAxXCIpLnRoZW4oZnVuY3Rpb24gKGtleU9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFBhcmFtcyh0eXBlcywgW2tleU9iamVjdC5uLCBrZXlPYmplY3QuZSwga2V5T2JqZWN0LmQsIGtleU9iamVjdC5wLCBrZXlPYmplY3QucSwga2V5T2JqZWN0LnVdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmRzYTpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lbGdhbWFsOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3Iga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2E6XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWRkc2E6XG4gICAgICAgIHJldHVybiBfcHVibGljX2tleTIuZGVmYXVsdC5lbGxpcHRpYy5nZW5lcmF0ZShvaWQpLnRoZW4oZnVuY3Rpb24gKGtleU9iamVjdCkge1xuICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RQYXJhbXModHlwZXMsIFtrZXlPYmplY3Qub2lkLCBrZXlPYmplY3QuUSwga2V5T2JqZWN0LmRdKTtcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaDpcbiAgICAgICAgcmV0dXJuIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmVsbGlwdGljLmdlbmVyYXRlKG9pZCkudGhlbihmdW5jdGlvbiAoa2V5T2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFBhcmFtcyh0eXBlcywgW2tleU9iamVjdC5vaWQsIGtleU9iamVjdC5RLCBba2V5T2JqZWN0Lmhhc2gsIGtleU9iamVjdC5jaXBoZXJdLCBrZXlPYmplY3QuZF0pO1xuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwdWJsaWMga2V5IGFsZ29yaXRobS4nKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBieXRlIHByZWZpeCBmb3IgdGhlIHNwZWNpZmllZCBhbGdvcml0aG1cbiAgICogU2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTkuMnxSRkMgNDg4MCA5LjJ9IGZvciBhbGdvcml0aG1zLlxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5zeW1tZXRyaWN9IGFsZ28gU3ltbWV0cmljIGVuY3J5cHRpb24gYWxnb3JpdGhtXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSAgICAgICAgICAgICAgICBSYW5kb20gYnl0ZXMgd2l0aCBsZW5ndGggZXF1YWwgdG8gdGhlIGJsb2NrIHNpemUgb2YgdGhlIGNpcGhlclxuICAgKiBAYXN5bmNcbiAgICovXG4gIGdldFByZWZpeFJhbmRvbTogZnVuY3Rpb24gZ2V0UHJlZml4UmFuZG9tKGFsZ28pIHtcbiAgICByZXR1cm4gX3JhbmRvbTIuZGVmYXVsdC5nZXRSYW5kb21CeXRlcyhfY2lwaGVyMi5kZWZhdWx0W2FsZ29dLmJsb2NrU2l6ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRpbmcgYSBzZXNzaW9uIGtleSBmb3IgdGhlIHNwZWNpZmllZCBzeW1tZXRyaWMgYWxnb3JpdGhtXG4gICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi05LjJ8UkZDIDQ4ODAgOS4yfSBmb3IgYWxnb3JpdGhtcy5cbiAgICogQHBhcmFtIHttb2R1bGU6ZW51bXMuc3ltbWV0cmljfSBhbGdvIFN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsZ29yaXRobVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gICAgICAgICAgICAgICAgUmFuZG9tIGJ5dGVzIGFzIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBrZXlcbiAgICogQGFzeW5jXG4gICAqL1xuICBnZW5lcmF0ZVNlc3Npb25LZXk6IGZ1bmN0aW9uIGdlbmVyYXRlU2Vzc2lvbktleShhbGdvKSB7XG4gICAgcmV0dXJuIF9yYW5kb20yLmRlZmF1bHQuZ2V0UmFuZG9tQnl0ZXMoX2NpcGhlcjIuZGVmYXVsdFthbGdvXS5rZXlTaXplKTtcbiAgfSxcblxuICBjb25zdHJ1Y3RQYXJhbXM6IGNvbnN0cnVjdFBhcmFtc1xufTtcblxufSx7XCIuLi9lbnVtc1wiOjM1OSxcIi4uL3R5cGUvZWNkaF9zeW1rZXlcIjozOTIsXCIuLi90eXBlL2tkZl9wYXJhbXNcIjozOTMsXCIuLi90eXBlL21waVwiOjM5NSxcIi4uL3R5cGUvb2lkXCI6Mzk2LFwiLi9jaXBoZXJcIjozMzIsXCIuL3B1YmxpY19rZXlcIjozNTIsXCIuL3JhbmRvbVwiOjM1NSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDJ9XSwzMzY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3Byb21pc2UgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfc2xpY2VkVG9BcnJheTIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheScpO1xuXG52YXIgX3NsaWNlZFRvQXJyYXkzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2xpY2VkVG9BcnJheTIpO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBPTUFDID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKGtleSkge1xuICAgIHZhciBjbWFjO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfY21hYzIuZGVmYXVsdCkoa2V5KTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNtYWMgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgZnVuY3Rpb24gKHQsIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNtYWMoX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbdCwgbWVzc2FnZV0pKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gT01BQyhfeCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBDVFIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNShrZXkpIHtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKCEoX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCkgJiYga2V5Lmxlbmd0aCAhPT0gMjQpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uaW1wb3J0S2V5KCdyYXcnLCBrZXksIHsgbmFtZTogJ0FFUy1DVFInLCBsZW5ndGg6IGtleS5sZW5ndGggKiA4IH0sIGZhbHNlLCBbJ2VuY3J5cHQnXSk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBrZXkgPSBfY29udGV4dDUuc2VudDtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuYWJydXB0KCdyZXR1cm4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihwdCwgaXYpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3Q7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uZW5jcnlwdCh7IG5hbWU6ICdBRVMtQ1RSJywgY291bnRlcjogaXYsIGxlbmd0aDogYmxvY2tMZW5ndGggKiA4IH0sIGtleSwgcHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3QgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBuZXcgVWludDhBcnJheShjdCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzLCBfeDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSk7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBpZiAoIV91dGlsMi5kZWZhdWx0LmdldE5vZGVDcnlwdG8oKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb2RlIGNyeXB0byBsaWJyYXJ5XG4gICAgICAgICAgICBrZXkgPSBuZXcgQnVmZmVyKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LmFicnVwdCgncmV0dXJuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjQgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMocHQsIGl2KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuLCBjdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBuZXcgQnVmZmVyKHB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl2ID0gbmV3IEJ1ZmZlcihpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbiA9IG5ldyBub2RlQ3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtJyArIGtleS5sZW5ndGggKiA4ICsgJy1jdHInLCBrZXksIGl2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0ID0gQnVmZmVyLmNvbmNhdChbZW4udXBkYXRlKHB0KSwgZW4uZmluYWwoKV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoJ3JldHVybicsIG5ldyBVaW50OEFycmF5KGN0KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTMsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDUsIF94Nikge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuYWJydXB0KCdyZXR1cm4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNChwdCwgaXYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoJ3JldHVybicsIF9leHBvcnRzLkFFU19DVFIuZW5jcnlwdChwdCwga2V5LCBpdikpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU0LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g3LCBfeDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTUsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIENUUihfeDIpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBDbGFzcyB0byBlbi9kZWNyeXB0IHVzaW5nIEVBWCBtb2RlLlxuICogQHBhcmFtICB7U3RyaW5nfSAgICAgY2lwaGVyICAgICAgVGhlIHN5bW1ldHJpYyBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZSBlLmcuICdhZXMxMjgnXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSBrZXkgICAgICAgICBUaGUgZW5jcnlwdGlvbiBrZXlcbiAqL1xuXG5cbnZhciBFQVggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlOChjaXBoZXIsIGtleSkge1xuICAgIHZhciBfcmVmNywgX3JlZjgsIG9tYWMsIGN0cjtcblxuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlOCQoX2NvbnRleHQ4KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0OC5wcmV2ID0gX2NvbnRleHQ4Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBpZiAoIShjaXBoZXIuc3Vic3RyKDAsIDMpICE9PSAnYWVzJykpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSAyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFQVggbW9kZSBzdXBwb3J0cyBvbmx5IEFFUyBjaXBoZXInKTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gNDtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoW09NQUMoa2V5KSwgQ1RSKGtleSldKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIF9yZWY3ID0gX2NvbnRleHQ4LnNlbnQ7XG4gICAgICAgICAgICBfcmVmOCA9ICgwLCBfc2xpY2VkVG9BcnJheTMuZGVmYXVsdCkoX3JlZjcsIDIpO1xuICAgICAgICAgICAgb21hYyA9IF9yZWY4WzBdO1xuICAgICAgICAgICAgY3RyID0gX3JlZjhbMV07XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ4LmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogRW5jcnlwdCBwbGFpbnRleHQgaW5wdXQuXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IHBsYWludGV4dCAgIFRoZSBjbGVhcnRleHQgaW5wdXQgdG8gYmUgZW5jcnlwdGVkXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IG5vbmNlICAgICAgIFRoZSBub25jZSAoMTYgYnl0ZXMpXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGFkYXRhICAgICAgIEFzc29jaWF0ZWQgZGF0YSB0byBzaWduXG4gICAgICAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSAgICBUaGUgY2lwaGVydGV4dCBvdXRwdXRcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JlZjkgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYocGxhaW50ZXh0LCBub25jZSwgYWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBfcmVmMTAsIF9yZWYxMSwgb21hY05vbmNlLCBvbWFjQWRhdGEsIGNpcGhlcmVkLCBvbWFjQ2lwaGVyZWQsIHRhZywgaTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU2JChfY29udGV4dDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Ni5wcmV2ID0gX2NvbnRleHQ2Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKFtvbWFjKHplcm8sIG5vbmNlKSwgb21hYyhvbmUsIGFkYXRhKV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYxMCA9IF9jb250ZXh0Ni5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMTEgPSAoMCwgX3NsaWNlZFRvQXJyYXkzLmRlZmF1bHQpKF9yZWYxMCwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9tYWNOb25jZSA9IF9yZWYxMVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb21hY0FkYXRhID0gX3JlZjExWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHIocGxhaW50ZXh0LCBvbWFjTm9uY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcmVkID0gX2NvbnRleHQ2LnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbWFjKHR3bywgY2lwaGVyZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbWFjQ2lwaGVyZWQgPSBfY29udGV4dDYuc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gb21hY0NpcGhlcmVkOyAvLyBBc3N1bWVzIHRoYXQgb21hYygqKS5sZW5ndGggPT09IHRhZ0xlbmd0aC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFnTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdbaV0gXj0gb21hY0FkYXRhW2ldIF4gb21hY05vbmNlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuYWJydXB0KCdyZXR1cm4nLCBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtjaXBoZXJlZCwgdGFnXSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZW5jcnlwdChfeDExLCBfeDEyLCBfeDEzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jcnlwdDtcbiAgICAgICAgICAgICAgfSgpLFxuXG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBEZWNyeXB0IGNpcGhlcnRleHQgaW5wdXQuXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGNpcGhlcnRleHQgICBUaGUgY2lwaGVydGV4dCBpbnB1dCB0byBiZSBkZWNyeXB0ZWRcbiAgICAgICAgICAgICAgICogQHBhcmFtICB7VWludDhBcnJheX0gbm9uY2UgICAgICAgIFRoZSBub25jZSAoMTYgYnl0ZXMpXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGFkYXRhICAgICAgICBBc3NvY2lhdGVkIGRhdGEgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSAgICAgVGhlIHBsYWludGV4dCBvdXRwdXRcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JlZjEyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU3KGNpcGhlcnRleHQsIG5vbmNlLCBhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGNpcGhlcmVkLCBjdFRhZywgX3JlZjEzLCBfcmVmMTQsIG9tYWNOb25jZSwgb21hY0FkYXRhLCBvbWFjQ2lwaGVyZWQsIHRhZywgaSwgcGxhaW50ZXh0O1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTckKF9jb250ZXh0Nykge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaXBoZXJ0ZXh0Lmxlbmd0aCA8IHRhZ0xlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRUFYIGNpcGhlcnRleHQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJlZCA9IGNpcGhlcnRleHQuc3ViYXJyYXkoMCwgLXRhZ0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN0VGFnID0gY2lwaGVydGV4dC5zdWJhcnJheSgtdGFnTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKFtvbWFjKHplcm8sIG5vbmNlKSwgb21hYyhvbmUsIGFkYXRhKSwgb21hYyh0d28sIGNpcGhlcmVkKV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYxMyA9IF9jb250ZXh0Ny5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMTQgPSAoMCwgX3NsaWNlZFRvQXJyYXkzLmRlZmF1bHQpKF9yZWYxMywgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9tYWNOb25jZSA9IF9yZWYxNFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb21hY0FkYXRhID0gX3JlZjE0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbWFjQ2lwaGVyZWQgPSBfcmVmMTRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IG9tYWNDaXBoZXJlZDsgLy8gQXNzdW1lcyB0aGF0IG9tYWMoKikubGVuZ3RoID09PSB0YWdMZW5ndGguXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRhZ0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnW2ldIF49IG9tYWNBZGF0YVtpXSBeIG9tYWNOb25jZVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdXRpbDIuZGVmYXVsdC5lcXVhbHNVaW50OEFycmF5KGN0VGFnLCB0YWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gdGFnIG1pc21hdGNoJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHIoY2lwaGVyZWQsIG9tYWNOb25jZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWludGV4dCA9IF9jb250ZXh0Ny5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LmFicnVwdCgncmV0dXJuJywgcGxhaW50ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5cHQoX3gxNCwgX3gxNSwgX3gxNikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYxMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBkZWNyeXB0O1xuICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ4LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU4LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBFQVgoX3g5LCBfeDEwKSB7XG4gICAgcmV0dXJuIF9yZWY2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogR2V0IEVBWCBub25jZSBhcyBkZWZpbmVkIGJ5IHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vcGVucGdwLXJmYzQ4ODBiaXMtMDQjc2VjdGlvbi01LjE2LjF8UkZDNDg4MGJpcy0wNCwgc2VjdGlvbiA1LjE2LjF9LlxuICogQHBhcmFtICB7VWludDhBcnJheX0gaXYgICAgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKDE2IGJ5dGVzKVxuICogQHBhcmFtICB7VWludDhBcnJheX0gY2h1bmtJbmRleCAgIFRoZSBjaHVuayBpbmRleCAoOCBieXRlcylcbiAqL1xuXG5cbnZhciBfZXhwb3J0cyA9IF9kZXJlcV8oJ2FzbWNyeXB0by5qcy9zcmMvYWVzL2N0ci9leHBvcnRzJyk7XG5cbnZhciBfY21hYyA9IF9kZXJlcV8oJy4vY21hYycpO1xuXG52YXIgX2NtYWMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY21hYyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgd2ViQ3J5cHRvID0gX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCk7IC8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxOCBQcm90b25UZWNoIEFHXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoaXMgbW9kdWxlIGltcGxlbWVudHMgQUVTLUVBWCBlbi9kZWNyeXB0aW9uIG9uIHRvcCBvZlxuICogbmF0aXZlIEFFUy1DVFIgdXNpbmcgZWl0aGVyIHRoZSBXZWJDcnlwdG8gQVBJIG9yIE5vZGUuanMnIGNyeXB0byBBUEkuXG4gKiBAcmVxdWlyZXMgYXNtY3J5cHRvLmpzXG4gKiBAcmVxdWlyZXMgY3J5cHRvL2NtYWNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGNyeXB0by9lYXhcbiAqL1xuXG52YXIgbm9kZUNyeXB0byA9IF91dGlsMi5kZWZhdWx0LmdldE5vZGVDcnlwdG8oKTtcbnZhciBCdWZmZXIgPSBfdXRpbDIuZGVmYXVsdC5nZXROb2RlQnVmZmVyKCk7XG5cbnZhciBibG9ja0xlbmd0aCA9IDE2O1xudmFyIGl2TGVuZ3RoID0gYmxvY2tMZW5ndGg7XG52YXIgdGFnTGVuZ3RoID0gYmxvY2tMZW5ndGg7XG5cbnZhciB6ZXJvID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW5ndGgpO1xudmFyIG9uZSA9IG5ldyBVaW50OEFycmF5KGJsb2NrTGVuZ3RoKTtvbmVbYmxvY2tMZW5ndGggLSAxXSA9IDE7XG52YXIgdHdvID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW5ndGgpO3R3b1tibG9ja0xlbmd0aCAtIDFdID0gMjtcblxuRUFYLmdldE5vbmNlID0gZnVuY3Rpb24gKGl2LCBjaHVua0luZGV4KSB7XG4gIHZhciBub25jZSA9IGl2LnNsaWNlKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmtJbmRleC5sZW5ndGg7IGkrKykge1xuICAgIG5vbmNlWzggKyBpXSBePSBjaHVua0luZGV4W2ldO1xuICB9XG4gIHJldHVybiBub25jZTtcbn07XG5cbkVBWC5ibG9ja0xlbmd0aCA9IGJsb2NrTGVuZ3RoO1xuRUFYLml2TGVuZ3RoID0gaXZMZW5ndGg7XG5FQVgudGFnTGVuZ3RoID0gdGFnTGVuZ3RoO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBFQVg7XG5cbn0se1wiLi4vdXRpbFwiOjM5OCxcIi4vY21hY1wiOjMzNCxcImFzbWNyeXB0by5qcy9zcmMvYWVzL2N0ci9leHBvcnRzXCI6OSxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlXCI6MzIsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIjo0MCxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDMzNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVnZW5lcmF0b3IgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yJyk7XG5cbnZhciBfcmVnZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3InKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jVG9HZW5lcmF0b3IyKTtcblxuLyoqXG4gKiBDbGFzcyB0byBlbi9kZWNyeXB0IHVzaW5nIEdDTSBtb2RlLlxuICogQHBhcmFtICB7U3RyaW5nfSAgICAgY2lwaGVyICAgICAgVGhlIHN5bW1ldHJpYyBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZSBlLmcuICdhZXMxMjgnXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSBrZXkgICAgICAgICBUaGUgZW5jcnlwdGlvbiBrZXlcbiAqL1xudmFyIEdDTSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTcoY2lwaGVyLCBrZXkpIHtcbiAgICB2YXIgX2tleTtcblxuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNyQoX2NvbnRleHQ3KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Ny5wcmV2ID0gX2NvbnRleHQ3Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBpZiAoIShjaXBoZXIuc3Vic3RyKDAsIDMpICE9PSAnYWVzJykpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHQ00gbW9kZSBzdXBwb3J0cyBvbmx5IEFFUyBjaXBoZXInKTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICghKF91dGlsMi5kZWZhdWx0LmdldFdlYkNyeXB0bygpICYmIGtleS5sZW5ndGggIT09IDI0KSkge1xuICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDU7XG4gICAgICAgICAgICByZXR1cm4gd2ViQ3J5cHRvLmltcG9ydEtleSgncmF3Jywga2V5LCB7IG5hbWU6IEFMR08gfSwgZmFsc2UsIFsnZW5jcnlwdCcsICdkZWNyeXB0J10pO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgX2tleSA9IF9jb250ZXh0Ny5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5hYnJ1cHQoJ3JldHVybicsIHtcbiAgICAgICAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKHB0LCBpdikge1xuICAgICAgICAgICAgICAgICAgdmFyIGFkYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBuZXcgVWludDhBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgdmFyIGN0O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBfZXhwb3J0cy5BRVNfR0NNLmVuY3J5cHQocHQsIGtleSwgaXYsIGFkYXRhKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uZW5jcnlwdCh7IG5hbWU6IEFMR08sIGl2OiBpdiwgYWRkaXRpb25hbERhdGE6IGFkYXRhIH0sIF9rZXksIHB0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdCA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIG5ldyBVaW50OEFycmF5KGN0KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbmNyeXB0KF94MywgX3g0KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jcnlwdDtcbiAgICAgICAgICAgICAgfSgpLFxuXG4gICAgICAgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoY3QsIGl2KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgYWRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgICAgICAgICAgICB2YXIgcHQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjdC5sZW5ndGggPT09IHRhZ0xlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgX2V4cG9ydHMuQUVTX0dDTS5kZWNyeXB0KGN0LCBrZXksIGl2LCBhZGF0YSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkNyeXB0by5kZWNyeXB0KHsgbmFtZTogQUxHTywgaXY6IGl2LCBhZGRpdGlvbmFsRGF0YTogYWRhdGEgfSwgX2tleSwgY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHB0ID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBuZXcgVWludDhBcnJheShwdCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNyeXB0KF94NiwgX3g3KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjcnlwdDtcbiAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICghX3V0aWwyLmRlZmF1bHQuZ2V0Tm9kZUNyeXB0bygpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb2RlIGNyeXB0byBsaWJyYXJ5XG4gICAgICAgICAgICBrZXkgPSBuZXcgQnVmZmVyKGtleSk7XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuYWJydXB0KCdyZXR1cm4nLCB7XG4gICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JlZjQgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMocHQsIGl2KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgYWRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgICAgICAgICAgICB2YXIgZW4sIGN0O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBuZXcgQnVmZmVyKHB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXYgPSBuZXcgQnVmZmVyKGl2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhdGEgPSBuZXcgQnVmZmVyKGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW4gPSBuZXcgbm9kZUNyeXB0by5jcmVhdGVDaXBoZXJpdignYWVzLScgKyBrZXkubGVuZ3RoICogOCArICctZ2NtJywga2V5LCBpdik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW4uc2V0QUFEKGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3QgPSBCdWZmZXIuY29uY2F0KFtlbi51cGRhdGUocHQpLCBlbi5maW5hbCgpLCBlbi5nZXRBdXRoVGFnKCldKTsgLy8gYXBwZW5kIGF1dGggdGFnIHRvIGNpcGhlcnRleHRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywgbmV3IFVpbnQ4QXJyYXkoY3QpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZW5jcnlwdChfeDksIF94MTApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0O1xuICAgICAgICAgICAgICB9KCksXG5cbiAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfcmVmNSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNChjdCwgaXYpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBhZGF0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgIHZhciBkZSwgcHQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdCA9IG5ldyBCdWZmZXIoY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdiA9IG5ldyBCdWZmZXIoaXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhZGF0YSA9IG5ldyBCdWZmZXIoYWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZSA9IG5ldyBub2RlQ3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0nICsga2V5Lmxlbmd0aCAqIDggKyAnLWdjbScsIGtleSwgaXYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlLnNldEFBRChhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlLnNldEF1dGhUYWcoY3Quc2xpY2UoY3QubGVuZ3RoIC0gdGFnTGVuZ3RoLCBjdC5sZW5ndGgpKTsgLy8gcmVhZCBhdXRoIHRhZyBhdCBlbmQgb2YgY2lwaGVydGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwdCA9IEJ1ZmZlci5jb25jYXQoW2RlLnVwZGF0ZShjdC5zbGljZSgwLCBjdC5sZW5ndGggLSB0YWdMZW5ndGgpKSwgZGUuZmluYWwoKV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdCgncmV0dXJuJywgbmV3IFVpbnQ4QXJyYXkocHQpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjcnlwdChfeDEyLCBfeDEzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjcnlwdDtcbiAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9yZWY2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1KHB0LCBpdiwgYWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuYWJydXB0KCdyZXR1cm4nLCBfZXhwb3J0cy5BRVNfR0NNLmVuY3J5cHQocHQsIGtleSwgaXYsIGFkYXRhKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuY3J5cHQoX3gxNSwgX3gxNiwgX3gxNykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHQ7XG4gICAgICAgICAgICAgIH0oKSxcblxuICAgICAgICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9yZWY3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU2KGN0LCBpdiwgYWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNiQoX2NvbnRleHQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuYWJydXB0KCdyZXR1cm4nLCBfZXhwb3J0cy5BRVNfR0NNLmRlY3J5cHQoY3QsIGtleSwgaXYsIGFkYXRhKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTYsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5cHQoX3gxOCwgX3gxOSwgX3gyMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY3LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY3J5cHQ7XG4gICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU3LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBHQ00oX3gsIF94Mikge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogR2V0IEdDTSBub25jZS4gTm90ZTogdGhpcyBvcGVyYXRpb24gaXMgbm90IGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkLlxuICogQSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgbWF5IGRlZmluZSBHQ00gbW9kZSBkaWZmZXJlbnRseSxcbiAqIGhvcGVmdWxseSB1bmRlciBhIGRpZmZlcmVudCBJRCAod2UgdXNlIFByaXZhdGUvRXhwZXJpbWVudGFsIGFsZ29yaXRobVxuICogSUQgMTAwKSBzbyB0aGF0IHdlIGNhbiBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGl2ICAgICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yICgxMiBieXRlcylcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGNodW5rSW5kZXggICBUaGUgY2h1bmsgaW5kZXggKDggYnl0ZXMpXG4gKi9cblxuXG52YXIgX2V4cG9ydHMgPSBfZGVyZXFfKCdhc21jcnlwdG8uanMvc3JjL2Flcy9nY20vZXhwb3J0cycpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gT3BlblBHUC5qcyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDE2IFRhbmtyZWQgSGFzZVxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUaGlzIG1vZHVsZSB3cmFwcyBuYXRpdmUgQUVTLUdDTSBlbi9kZWNyeXB0aW9uIGZvciBib3RoXG4gKiB0aGUgV2ViQ3J5cHRvIGFwaSBhcyB3ZWxsIGFzIG5vZGUuanMnIGNyeXB0byBhcGkuXG4gKiBAcmVxdWlyZXMgYXNtY3J5cHRvLmpzXG4gKiBAcmVxdWlyZXMgdXRpbFxuICogQG1vZHVsZSBjcnlwdG8vZ2NtXG4gKi9cblxudmFyIHdlYkNyeXB0byA9IF91dGlsMi5kZWZhdWx0LmdldFdlYkNyeXB0bygpOyAvLyBubyBHQ00gc3VwcG9ydCBpbiBJRTExLCBTYWZhcmkgOVxudmFyIG5vZGVDcnlwdG8gPSBfdXRpbDIuZGVmYXVsdC5nZXROb2RlQ3J5cHRvKCk7XG52YXIgQnVmZmVyID0gX3V0aWwyLmRlZmF1bHQuZ2V0Tm9kZUJ1ZmZlcigpO1xuXG52YXIgYmxvY2tMZW5ndGggPSAxNjtcbnZhciBpdkxlbmd0aCA9IDEyOyAvLyBzaXplIG9mIHRoZSBJViBpbiBieXRlc1xudmFyIHRhZ0xlbmd0aCA9IDE2OyAvLyBzaXplIG9mIHRoZSB0YWcgaW4gYnl0ZXNcbnZhciBBTEdPID0gJ0FFUy1HQ00nO0dDTS5nZXROb25jZSA9IGZ1bmN0aW9uIChpdiwgY2h1bmtJbmRleCkge1xuICB2YXIgbm9uY2UgPSBpdi5zbGljZSgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICBub25jZVs0ICsgaV0gXj0gY2h1bmtJbmRleFtpXTtcbiAgfVxuICByZXR1cm4gbm9uY2U7XG59O1xuXG5HQ00uYmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDtcbkdDTS5pdkxlbmd0aCA9IGl2TGVuZ3RoO1xuR0NNLnRhZ0xlbmd0aCA9IHRhZ0xlbmd0aDtcblxuZXhwb3J0cy5kZWZhdWx0ID0gR0NNO1xuXG59LHtcIi4uL3V0aWxcIjozOTgsXCJhc21jcnlwdG8uanMvc3JjL2Flcy9nY20vZXhwb3J0c1wiOjEyLFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDMzODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcnVzaGEgPSBfZGVyZXFfKCdydXNoYScpO1xuXG52YXIgX3J1c2hhMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1c2hhKTtcblxudmFyIF9leHBvcnRzID0gX2RlcmVxXygnYXNtY3J5cHRvLmpzL3NyYy9oYXNoL3NoYTI1Ni9leHBvcnRzJyk7XG5cbnZhciBfID0gX2RlcmVxXygnaGFzaC5qcy9saWIvaGFzaC9zaGEvMjI0Jyk7XG5cbnZhciBfMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoXyk7XG5cbnZhciBfMyA9IF9kZXJlcV8oJ2hhc2guanMvbGliL2hhc2gvc2hhLzM4NCcpO1xuXG52YXIgXzQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF8zKTtcblxudmFyIF81ID0gX2RlcmVxXygnaGFzaC5qcy9saWIvaGFzaC9zaGEvNTEyJyk7XG5cbnZhciBfNiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoXzUpO1xuXG52YXIgX3JpcGVtZCA9IF9kZXJlcV8oJ2hhc2guanMvbGliL2hhc2gvcmlwZW1kJyk7XG5cbnZhciBfbWQgPSBfZGVyZXFfKCcuL21kNScpO1xuXG52YXIgX21kMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21kKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBQcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gaGFzaGluZyBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIE5vZGUuanMgb3IgZXh0ZXJuYWwgbGlicmFyaWVzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3NyaWpzL3J1c2hhfFJ1c2hhfVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzbWNyeXB0by9hc21jcnlwdG8uanN8YXNtQ3J5cHRvfVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvaGFzaC5qc3xoYXNoLmpzfVxuICogQHJlcXVpcmVzIHJ1c2hhXG4gKiBAcmVxdWlyZXMgYXNtY3J5cHRvLmpzXG4gKiBAcmVxdWlyZXMgaGFzaC5qc1xuICogQHJlcXVpcmVzIGNyeXB0by9oYXNoL21kNVxuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUgY3J5cHRvL2hhc2hcbiAqL1xuXG52YXIgcnVzaGEgPSBuZXcgX3J1c2hhMi5kZWZhdWx0KCk7XG52YXIgbm9kZUNyeXB0byA9IF91dGlsMi5kZWZhdWx0LmdldE5vZGVDcnlwdG8oKTtcbnZhciBCdWZmZXIgPSBfdXRpbDIuZGVmYXVsdC5nZXROb2RlQnVmZmVyKCk7XG5cbmZ1bmN0aW9uIG5vZGVfaGFzaCh0eXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBzaGFzdW0gPSBub2RlQ3J5cHRvLmNyZWF0ZUhhc2godHlwZSk7XG4gICAgc2hhc3VtLnVwZGF0ZShuZXcgQnVmZmVyKGRhdGEpKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2hhc3VtLmRpZ2VzdCgpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzaGpzX2hhc2goaGFzaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuaGV4X3RvX1VpbnQ4QXJyYXkoaGFzaCgpLnVwZGF0ZShkYXRhKS5kaWdlc3QoJ2hleCcpKTtcbiAgfTtcbn1cblxudmFyIGhhc2hfZm5zID0gdm9pZCAwO1xuaWYgKG5vZGVDcnlwdG8pIHtcbiAgLy8gVXNlIE5vZGUgbmF0aXZlIGNyeXB0byBmb3IgYWxsIGhhc2ggZnVuY3Rpb25zXG4gIGhhc2hfZm5zID0ge1xuICAgIG1kNTogbm9kZV9oYXNoKCdtZDUnKSxcbiAgICBzaGExOiBub2RlX2hhc2goJ3NoYTEnKSxcbiAgICBzaGEyMjQ6IG5vZGVfaGFzaCgnc2hhMjI0JyksXG4gICAgc2hhMjU2OiBub2RlX2hhc2goJ3NoYTI1NicpLFxuICAgIHNoYTM4NDogbm9kZV9oYXNoKCdzaGEzODQnKSxcbiAgICBzaGE1MTI6IG5vZGVfaGFzaCgnc2hhNTEyJyksXG4gICAgcmlwZW1kOiBub2RlX2hhc2goJ3JpcGVtZDE2MCcpXG4gIH07XG59IGVsc2Uge1xuICAvLyBVc2UgSlMgZmFsbGJhY2tzXG4gIGhhc2hfZm5zID0ge1xuICAgIG1kNTogX21kMi5kZWZhdWx0LFxuICAgIHNoYTE6IGZ1bmN0aW9uIHNoYTEoZGF0YSkge1xuICAgICAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmhleF90b19VaW50OEFycmF5KHJ1c2hhLmRpZ2VzdChkYXRhKSk7XG4gICAgfSxcbiAgICBzaGEyMjQ6IGhhc2hqc19oYXNoKF8yLmRlZmF1bHQpLFxuICAgIHNoYTI1NjogX2V4cG9ydHMuU0hBMjU2LmJ5dGVzLFxuICAgIHNoYTM4NDogaGFzaGpzX2hhc2goXzQuZGVmYXVsdCksXG4gICAgLy8gVE9ETywgYmVuY2htYXJrIHRoaXMgdnMgYXNtQ3J5cHRvJ3MgU0hBNTEyXG4gICAgc2hhNTEyOiBoYXNoanNfaGFzaChfNi5kZWZhdWx0KSxcbiAgICByaXBlbWQ6IGhhc2hqc19oYXNoKF9yaXBlbWQucmlwZW1kMTYwKVxuICB9O1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG5cbiAgLyoqIEBzZWUgbW9kdWxlOm1kNSAqL1xuICBtZDU6IGhhc2hfZm5zLm1kNSxcbiAgLyoqIEBzZWUgcnVzaGEgKi9cbiAgc2hhMTogaGFzaF9mbnMuc2hhMSxcbiAgLyoqIEBzZWUgaGFzaC5qcyAqL1xuICBzaGEyMjQ6IGhhc2hfZm5zLnNoYTIyNCxcbiAgLyoqIEBzZWUgYXNtQ3J5cHRvICovXG4gIHNoYTI1NjogaGFzaF9mbnMuc2hhMjU2LFxuICAvKiogQHNlZSBoYXNoLmpzICovXG4gIHNoYTM4NDogaGFzaF9mbnMuc2hhMzg0LFxuICAvKiogQHNlZSBoYXNoLmpzICovXG4gIHNoYTUxMjogaGFzaF9mbnMuc2hhNTEyLFxuICAvKiogQHNlZSBoYXNoLmpzICovXG4gIHJpcGVtZDogaGFzaF9mbnMucmlwZW1kLFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBoYXNoIG9uIHRoZSBzcGVjaWZpZWQgZGF0YSB1c2luZyB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobVxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5oYXNofSBhbGdvIEhhc2ggYWxnb3JpdGhtIHR5cGUgKHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi05LjR8UkZDIDQ4ODAgOS40fSlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhIERhdGEgdG8gYmUgaGFzaGVkXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBoYXNoIHZhbHVlXG4gICAqL1xuICBkaWdlc3Q6IGZ1bmN0aW9uIGRpZ2VzdChhbGdvLCBkYXRhKSB7XG4gICAgc3dpdGNoIChhbGdvKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIC8vIC0gTUQ1IFtIQUNdXG4gICAgICAgIHJldHVybiB0aGlzLm1kNShkYXRhKTtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gLSBTSEEtMSBbRklQUzE4MF1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhMShkYXRhKTtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgLy8gLSBSSVBFLU1ELzE2MCBbSEFDXVxuICAgICAgICByZXR1cm4gdGhpcy5yaXBlbWQoZGF0YSk7XG4gICAgICBjYXNlIDg6XG4gICAgICAgIC8vIC0gU0hBMjU2IFtGSVBTMTgwXVxuICAgICAgICByZXR1cm4gdGhpcy5zaGEyNTYoZGF0YSk7XG4gICAgICBjYXNlIDk6XG4gICAgICAgIC8vIC0gU0hBMzg0IFtGSVBTMTgwXVxuICAgICAgICByZXR1cm4gdGhpcy5zaGEzODQoZGF0YSk7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICAvLyAtIFNIQTUxMiBbRklQUzE4MF1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhNTEyKGRhdGEpO1xuICAgICAgY2FzZSAxMTpcbiAgICAgICAgLy8gLSBTSEEyMjQgW0ZJUFMxODBdXG4gICAgICAgIHJldHVybiB0aGlzLnNoYTIyNChkYXRhKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoYXNoIGZ1bmN0aW9uLicpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaGFzaCBzaXplIGluIGJ5dGVzIG9mIHRoZSBzcGVjaWZpZWQgaGFzaCBhbGdvcml0aG0gdHlwZVxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5oYXNofSBhbGdvIEhhc2ggYWxnb3JpdGhtIHR5cGUgKFNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi05LjR8UkZDIDQ4ODAgOS40fSlcbiAgICogQHJldHVybnMge0ludGVnZXJ9IFNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlc3VsdGluZyBoYXNoXG4gICAqL1xuICBnZXRIYXNoQnl0ZUxlbmd0aDogZnVuY3Rpb24gZ2V0SGFzaEJ5dGVMZW5ndGgoYWxnbykge1xuICAgIHN3aXRjaCAoYWxnbykge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyAtIE1ENSBbSEFDXVxuICAgICAgICByZXR1cm4gMTY7XG4gICAgICBjYXNlIDI6IC8vIC0gU0hBLTEgW0ZJUFMxODBdXG4gICAgICBjYXNlIDM6XG4gICAgICAgIC8vIC0gUklQRS1NRC8xNjAgW0hBQ11cbiAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgY2FzZSA4OlxuICAgICAgICAvLyAtIFNIQTI1NiBbRklQUzE4MF1cbiAgICAgICAgcmV0dXJuIDMyO1xuICAgICAgY2FzZSA5OlxuICAgICAgICAvLyAtIFNIQTM4NCBbRklQUzE4MF1cbiAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgY2FzZSAxMDpcbiAgICAgICAgLy8gLSBTSEE1MTIgW0ZJUFMxODBdXG4gICAgICAgIHJldHVybiA2NDtcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIC0gU0hBMjI0IFtGSVBTMTgwXVxuICAgICAgICByZXR1cm4gMjg7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGFzaCBhbGdvcml0aG0uJyk7XG4gICAgfVxuICB9XG59O1xuXG59LHtcIi4uLy4uL3V0aWxcIjozOTgsXCIuL21kNVwiOjMzOSxcImFzbWNyeXB0by5qcy9zcmMvaGFzaC9zaGEyNTYvZXhwb3J0c1wiOjE2LFwiaGFzaC5qcy9saWIvaGFzaC9yaXBlbWRcIjoyODcsXCJoYXNoLmpzL2xpYi9oYXNoL3NoYS8yMjRcIjoyOTAsXCJoYXNoLmpzL2xpYi9oYXNoL3NoYS8zODRcIjoyOTIsXCJoYXNoLmpzL2xpYi9oYXNoL3NoYS81MTJcIjoyOTMsXCJydXNoYVwiOjMyMH1dLDMzOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uLy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBNRDUgRGlnZXN0XG5mdW5jdGlvbiBtZDUoZW50cmVlKSB7XG4gIHZhciBkaWdlc3QgPSBtZDUxKF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKGVudHJlZSkpO1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuaGV4X3RvX1VpbnQ4QXJyYXkoaGV4KGRpZ2VzdCkpO1xufSAvKipcbiAgICogQSBmYXN0IE1ENSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uXG4gICAqIENvcHlyaWdodCAoYykgMjAxMiBKb3NlcGggTXllcnNcbiAgICogaHR0cDovL3d3dy5teWVyc2RhaWx5Lm9yZy9qb3NlcGgvamF2YXNjcmlwdC9tZDUtdGV4dC5odG1sXG4gICAqXG4gICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmVcbiAgICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZXMgYW5kIHdpdGhvdXRcbiAgICogZmVlIGlzIGhlcmVieSBncmFudGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlXG4gICAqIGFwcGVhcnMgaW4gYWxsIGNvcGllcy5cbiAgICpcbiAgICogT2YgY291cnNlLCB0aGlzIHNvZnQgaXMgcHJvdmlkZWQgXCJhcyBpc1wiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkXG4gICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLlxuICAgKi9cblxuLyoqXG4gKiBAcmVxdWlyZXMgdXRpbFxuICovXG5cbmZ1bmN0aW9uIG1kNWN5Y2xlKHgsIGspIHtcbiAgdmFyIGEgPSB4WzBdO1xuICB2YXIgYiA9IHhbMV07XG4gIHZhciBjID0geFsyXTtcbiAgdmFyIGQgPSB4WzNdO1xuXG4gIGEgPSBmZihhLCBiLCBjLCBkLCBrWzBdLCA3LCAtNjgwODc2OTM2KTtcbiAgZCA9IGZmKGQsIGEsIGIsIGMsIGtbMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgYyA9IGZmKGMsIGQsIGEsIGIsIGtbMl0sIDE3LCA2MDYxMDU4MTkpO1xuICBiID0gZmYoYiwgYywgZCwgYSwga1szXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgYSA9IGZmKGEsIGIsIGMsIGQsIGtbNF0sIDcsIC0xNzY0MTg4OTcpO1xuICBkID0gZmYoZCwgYSwgYiwgYywga1s1XSwgMTIsIDEyMDAwODA0MjYpO1xuICBjID0gZmYoYywgZCwgYSwgYiwga1s2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgYiA9IGZmKGIsIGMsIGQsIGEsIGtbN10sIDIyLCAtNDU3MDU5ODMpO1xuICBhID0gZmYoYSwgYiwgYywgZCwga1s4XSwgNywgMTc3MDAzNTQxNik7XG4gIGQgPSBmZihkLCBhLCBiLCBjLCBrWzldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICBjID0gZmYoYywgZCwgYSwgYiwga1sxMF0sIDE3LCAtNDIwNjMpO1xuICBiID0gZmYoYiwgYywgZCwgYSwga1sxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gIGEgPSBmZihhLCBiLCBjLCBkLCBrWzEyXSwgNywgMTgwNDYwMzY4Mik7XG4gIGQgPSBmZihkLCBhLCBiLCBjLCBrWzEzXSwgMTIsIC00MDM0MTEwMSk7XG4gIGMgPSBmZihjLCBkLCBhLCBiLCBrWzE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgYiA9IGZmKGIsIGMsIGQsIGEsIGtbMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG5cbiAgYSA9IGdnKGEsIGIsIGMsIGQsIGtbMV0sIDUsIC0xNjU3OTY1MTApO1xuICBkID0gZ2coZCwgYSwgYiwgYywga1s2XSwgOSwgLTEwNjk1MDE2MzIpO1xuICBjID0gZ2coYywgZCwgYSwgYiwga1sxMV0sIDE0LCA2NDM3MTc3MTMpO1xuICBiID0gZ2coYiwgYywgZCwgYSwga1swXSwgMjAsIC0zNzM4OTczMDIpO1xuICBhID0gZ2coYSwgYiwgYywgZCwga1s1XSwgNSwgLTcwMTU1ODY5MSk7XG4gIGQgPSBnZyhkLCBhLCBiLCBjLCBrWzEwXSwgOSwgMzgwMTYwODMpO1xuICBjID0gZ2coYywgZCwgYSwgYiwga1sxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgYiA9IGdnKGIsIGMsIGQsIGEsIGtbNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgYSA9IGdnKGEsIGIsIGMsIGQsIGtbOV0sIDUsIDU2ODQ0NjQzOCk7XG4gIGQgPSBnZyhkLCBhLCBiLCBjLCBrWzE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICBjID0gZ2coYywgZCwgYSwgYiwga1szXSwgMTQsIC0xODczNjM5NjEpO1xuICBiID0gZ2coYiwgYywgZCwgYSwga1s4XSwgMjAsIDExNjM1MzE1MDEpO1xuICBhID0gZ2coYSwgYiwgYywgZCwga1sxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgZCA9IGdnKGQsIGEsIGIsIGMsIGtbMl0sIDksIC01MTQwMzc4NCk7XG4gIGMgPSBnZyhjLCBkLCBhLCBiLCBrWzddLCAxNCwgMTczNTMyODQ3Myk7XG4gIGIgPSBnZyhiLCBjLCBkLCBhLCBrWzEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcblxuICBhID0gaGgoYSwgYiwgYywgZCwga1s1XSwgNCwgLTM3ODU1OCk7XG4gIGQgPSBoaChkLCBhLCBiLCBjLCBrWzhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICBjID0gaGgoYywgZCwgYSwgYiwga1sxMV0sIDE2LCAxODM5MDMwNTYyKTtcbiAgYiA9IGhoKGIsIGMsIGQsIGEsIGtbMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgYSA9IGhoKGEsIGIsIGMsIGQsIGtbMV0sIDQsIC0xNTMwOTkyMDYwKTtcbiAgZCA9IGhoKGQsIGEsIGIsIGMsIGtbNF0sIDExLCAxMjcyODkzMzUzKTtcbiAgYyA9IGhoKGMsIGQsIGEsIGIsIGtbN10sIDE2LCAtMTU1NDk3NjMyKTtcbiAgYiA9IGhoKGIsIGMsIGQsIGEsIGtbMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICBhID0gaGgoYSwgYiwgYywgZCwga1sxM10sIDQsIDY4MTI3OTE3NCk7XG4gIGQgPSBoaChkLCBhLCBiLCBjLCBrWzBdLCAxMSwgLTM1ODUzNzIyMik7XG4gIGMgPSBoaChjLCBkLCBhLCBiLCBrWzNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gIGIgPSBoaChiLCBjLCBkLCBhLCBrWzZdLCAyMywgNzYwMjkxODkpO1xuICBhID0gaGgoYSwgYiwgYywgZCwga1s5XSwgNCwgLTY0MDM2NDQ4Nyk7XG4gIGQgPSBoaChkLCBhLCBiLCBjLCBrWzEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICBjID0gaGgoYywgZCwgYSwgYiwga1sxNV0sIDE2LCA1MzA3NDI1MjApO1xuICBiID0gaGgoYiwgYywgZCwgYSwga1syXSwgMjMsIC05OTUzMzg2NTEpO1xuXG4gIGEgPSBpaShhLCBiLCBjLCBkLCBrWzBdLCA2LCAtMTk4NjMwODQ0KTtcbiAgZCA9IGlpKGQsIGEsIGIsIGMsIGtbN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgYyA9IGlpKGMsIGQsIGEsIGIsIGtbMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICBiID0gaWkoYiwgYywgZCwgYSwga1s1XSwgMjEsIC01NzQzNDA1NSk7XG4gIGEgPSBpaShhLCBiLCBjLCBkLCBrWzEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gIGQgPSBpaShkLCBhLCBiLCBjLCBrWzNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICBjID0gaWkoYywgZCwgYSwgYiwga1sxMF0sIDE1LCAtMTA1MTUyMyk7XG4gIGIgPSBpaShiLCBjLCBkLCBhLCBrWzFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICBhID0gaWkoYSwgYiwgYywgZCwga1s4XSwgNiwgMTg3MzMxMzM1OSk7XG4gIGQgPSBpaShkLCBhLCBiLCBjLCBrWzE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gIGMgPSBpaShjLCBkLCBhLCBiLCBrWzZdLCAxNSwgLTE1NjAxOTgzODApO1xuICBiID0gaWkoYiwgYywgZCwgYSwga1sxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgYSA9IGlpKGEsIGIsIGMsIGQsIGtbNF0sIDYsIC0xNDU1MjMwNzApO1xuICBkID0gaWkoZCwgYSwgYiwgYywga1sxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gIGMgPSBpaShjLCBkLCBhLCBiLCBrWzJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgYiA9IGlpKGIsIGMsIGQsIGEsIGtbOV0sIDIxLCAtMzQzNDg1NTUxKTtcblxuICB4WzBdID0gYWRkMzIoYSwgeFswXSk7XG4gIHhbMV0gPSBhZGQzMihiLCB4WzFdKTtcbiAgeFsyXSA9IGFkZDMyKGMsIHhbMl0pO1xuICB4WzNdID0gYWRkMzIoZCwgeFszXSk7XG59XG5cbmZ1bmN0aW9uIGNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gIGEgPSBhZGQzMihhZGQzMihhLCBxKSwgYWRkMzIoeCwgdCkpO1xuICByZXR1cm4gYWRkMzIoYSA8PCBzIHwgYSA+Pj4gMzIgLSBzLCBiKTtcbn1cblxuZnVuY3Rpb24gZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gY21uKGIgJiBjIHwgfmIgJiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gZ2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gY21uKGIgJiBkIHwgYyAmIH5kLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gaGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gY21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIGNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDUxKHMpIHtcbiAgdmFyIG4gPSBzLmxlbmd0aDtcbiAgdmFyIHN0YXRlID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIC0xNzMyNTg0MTk0LCAyNzE3MzM4NzhdO1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgZm9yIChpID0gNjQ7IGkgPD0gcy5sZW5ndGg7IGkgKz0gNjQpIHtcbiAgICBtZDVjeWNsZShzdGF0ZSwgbWQ1YmxrKHMuc3Vic3RyaW5nKGkgLSA2NCwgaSkpKTtcbiAgfVxuICBzID0gcy5zdWJzdHJpbmcoaSAtIDY0KTtcbiAgdmFyIHRhaWwgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gIGZvciAoaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGFpbFtpID4+IDJdIHw9IHMuY2hhckNvZGVBdChpKSA8PCAoaSAlIDQgPDwgMyk7XG4gIH1cbiAgdGFpbFtpID4+IDJdIHw9IDB4ODAgPDwgKGkgJSA0IDw8IDMpO1xuICBpZiAoaSA+IDU1KSB7XG4gICAgbWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB0YWlsW2ldID0gMDtcbiAgICB9XG4gIH1cbiAgdGFpbFsxNF0gPSBuICogODtcbiAgbWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qIHRoZXJlIG5lZWRzIHRvIGJlIHN1cHBvcnQgZm9yIFVuaWNvZGUgaGVyZSxcbiAqIHVubGVzcyB3ZSBwcmV0ZW5kIHRoYXQgd2UgY2FuIHJlZGVmaW5lIHRoZSBNRC01XG4gKiBhbGdvcml0aG0gZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycyAocGVyaGFwc1xuICogYnkgYWRkaW5nIGV2ZXJ5IGZvdXIgMTYtYml0IGNoYXJhY3RlcnMgYW5kXG4gKiBzaG9ydGVuaW5nIHRoZSBzdW0gdG8gMzIgYml0cykuIE90aGVyd2lzZVxuICogSSBzdWdnZXN0IHBlcmZvcm1pbmcgTUQtNSBhcyBpZiBldmVyeSBjaGFyYWN0ZXJcbiAqIHdhcyB0d28gYnl0ZXMtLWUuZy4sIDAwNDAgMDAyNSA9IEAlLS1idXQgdGhlblxuICogaG93IHdpbGwgYW4gb3JkaW5hcnkgTUQtNSBzdW0gYmUgbWF0Y2hlZD9cbiAqIFRoZXJlIGlzIG5vIHdheSB0byBzdGFuZGFyZGl6ZSB0ZXh0IHRvIHNvbWV0aGluZ1xuICogbGlrZSBVVEYtOCBiZWZvcmUgdHJhbnNmb3JtYXRpb247IHNwZWVkIGNvc3QgaXNcbiAqIHV0dGVybHkgcHJvaGliaXRpdmUuIFRoZSBKYXZhU2NyaXB0IHN0YW5kYXJkXG4gKiBpdHNlbGYgbmVlZHMgdG8gbG9vayBhdCB0aGlzOiBpdCBzaG91bGQgc3RhcnRcbiAqIHByb3ZpZGluZyBhY2Nlc3MgdG8gc3RyaW5ncyBhcyBwcmVmb3JtZWQgVVRGLThcbiAqIDgtYml0IHVuc2lnbmVkIHZhbHVlIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWQ1YmxrKHMpIHtcbiAgLyogSSBmaWd1cmVkIGdsb2JhbCB3YXMgZmFzdGVyLiAgICovXG4gIHZhciBtZDVibGtzID0gW107XG4gIHZhciBpID0gdm9pZCAwOyAvKiBBbmR5IEtpbmcgc2FpZCBkbyBpdCB0aGlzIHdheS4gKi9cbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpIHtcbiAgICBtZDVibGtzW2kgPj4gMl0gPSBzLmNoYXJDb2RlQXQoaSkgKyAocy5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4KSArIChzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDE2KSArIChzLmNoYXJDb2RlQXQoaSArIDMpIDw8IDI0KTtcbiAgfVxuICByZXR1cm4gbWQ1Ymxrcztcbn1cblxudmFyIGhleF9jaHIgPSAnMDEyMzQ1Njc4OWFiY2RlZicuc3BsaXQoJycpO1xuXG5mdW5jdGlvbiByaGV4KG4pIHtcbiAgdmFyIHMgPSAnJztcbiAgdmFyIGogPSAwO1xuICBmb3IgKDsgaiA8IDQ7IGorKykge1xuICAgIHMgKz0gaGV4X2NocltuID4+IGogKiA4ICsgNCAmIDB4MEZdICsgaGV4X2NocltuID4+IGogKiA4ICYgMHgwRl07XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIGhleCh4KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgIHhbaV0gPSByaGV4KHhbaV0pO1xuICB9XG4gIHJldHVybiB4LmpvaW4oJycpO1xufVxuXG4vKiB0aGlzIGZ1bmN0aW9uIGlzIG11Y2ggZmFzdGVyLFxuc28gaWYgcG9zc2libGUgd2UgdXNlIGl0LiBTb21lIElFc1xuYXJlIHRoZSBvbmx5IG9uZXMgSSBrbm93IG9mIHRoYXRcbm5lZWQgdGhlIGlkaW90aWMgc2Vjb25kIGZ1bmN0aW9uLFxuZ2VuZXJhdGVkIGJ5IGFuIGlmIGNsYXVzZS4gICovXG5cbmZ1bmN0aW9uIGFkZDMyKGEsIGIpIHtcbiAgcmV0dXJuIGEgKyBiICYgMHhGRkZGRkZGRjtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gbWQ1O1xuXG59LHtcIi4uLy4uL3V0aWxcIjozOTh9XSwzNDA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2Fzc2lnbiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduJyk7XG5cbnZhciBfYXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Fzc2lnbik7XG5cbnZhciBfY2lwaGVyID0gX2RlcmVxXygnLi9jaXBoZXInKTtcblxudmFyIF9jaXBoZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2lwaGVyKTtcblxudmFyIF9oYXNoID0gX2RlcmVxXygnLi9oYXNoJyk7XG5cbnZhciBfaGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYXNoKTtcblxudmFyIF9jZmIgPSBfZGVyZXFfKCcuL2NmYicpO1xuXG52YXIgX2NmYjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jZmIpO1xuXG52YXIgX2djbSA9IF9kZXJlcV8oJy4vZ2NtJyk7XG5cbnZhciBfZ2NtMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2djbSk7XG5cbnZhciBfZWF4ID0gX2RlcmVxXygnLi9lYXgnKTtcblxudmFyIF9lYXgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWF4KTtcblxudmFyIF9vY2IgPSBfZGVyZXFfKCcuL29jYicpO1xuXG52YXIgX29jYjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vY2IpO1xuXG52YXIgX3B1YmxpY19rZXkgPSBfZGVyZXFfKCcuL3B1YmxpY19rZXknKTtcblxudmFyIF9wdWJsaWNfa2V5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3B1YmxpY19rZXkpO1xuXG52YXIgX3NpZ25hdHVyZSA9IF9kZXJlcV8oJy4vc2lnbmF0dXJlJyk7XG5cbnZhciBfc2lnbmF0dXJlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NpZ25hdHVyZSk7XG5cbnZhciBfcmFuZG9tID0gX2RlcmVxXygnLi9yYW5kb20nKTtcblxudmFyIF9yYW5kb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmFuZG9tKTtcblxudmFyIF9wa2NzID0gX2RlcmVxXygnLi9wa2NzMScpO1xuXG52YXIgX3BrY3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGtjcyk7XG5cbnZhciBfcGtjczMgPSBfZGVyZXFfKCcuL3BrY3M1Jyk7XG5cbnZhciBfcGtjczQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wa2NzMyk7XG5cbnZhciBfY3J5cHRvID0gX2RlcmVxXygnLi9jcnlwdG8nKTtcblxudmFyIF9jcnlwdG8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3J5cHRvKTtcblxudmFyIF9hZXNfa3cgPSBfZGVyZXFfKCcuL2Flc19rdycpO1xuXG52YXIgX2Flc19rdzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hZXNfa3cpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBUT0RPIG1vdmUgY2ZiIGFuZCBnY20gdG8gY2lwaGVyXG52YXIgbW9kID0ge1xuICAvKiogQHNlZSBtb2R1bGU6Y3J5cHRvL2NpcGhlciAqL1xuICBjaXBoZXI6IF9jaXBoZXIyLmRlZmF1bHQsXG4gIC8qKiBAc2VlIG1vZHVsZTpjcnlwdG8vaGFzaCAqL1xuICBoYXNoOiBfaGFzaDIuZGVmYXVsdCxcbiAgLyoqIEBzZWUgbW9kdWxlOmNyeXB0by9jZmIgKi9cbiAgY2ZiOiBfY2ZiMi5kZWZhdWx0LFxuICAvKiogQHNlZSBtb2R1bGU6Y3J5cHRvL2djbSAqL1xuICBnY206IF9nY20yLmRlZmF1bHQsXG4gIGV4cGVyaW1lbnRhbF9nY206IF9nY20yLmRlZmF1bHQsXG4gIC8qKiBAc2VlIG1vZHVsZTpjcnlwdG8vZWF4ICovXG4gIGVheDogX2VheDIuZGVmYXVsdCxcbiAgLyoqIEBzZWUgbW9kdWxlOmNyeXB0by9vY2IgKi9cbiAgb2NiOiBfb2NiMi5kZWZhdWx0LFxuICAvKiogQHNlZSBtb2R1bGU6Y3J5cHRvL3B1YmxpY19rZXkgKi9cbiAgcHVibGljS2V5OiBfcHVibGljX2tleTIuZGVmYXVsdCxcbiAgLyoqIEBzZWUgbW9kdWxlOmNyeXB0by9zaWduYXR1cmUgKi9cbiAgc2lnbmF0dXJlOiBfc2lnbmF0dXJlMi5kZWZhdWx0LFxuICAvKiogQHNlZSBtb2R1bGU6Y3J5cHRvL3JhbmRvbSAqL1xuICByYW5kb206IF9yYW5kb20yLmRlZmF1bHQsXG4gIC8qKiBAc2VlIG1vZHVsZTpjcnlwdG8vcGtjczEgKi9cbiAgcGtjczE6IF9wa2NzMi5kZWZhdWx0LFxuICAvKiogQHNlZSBtb2R1bGU6Y3J5cHRvL3BrY3M1ICovXG4gIHBrY3M1OiBfcGtjczQuZGVmYXVsdCxcbiAgLyoqIEBzZWUgbW9kdWxlOmNyeXB0by9hZXNfa3cgKi9cbiAgYWVzX2t3OiBfYWVzX2t3Mi5kZWZhdWx0XG59OyAvKipcbiAgICAqIEBmaWxlb3ZlcnZpZXcgUHJvdmlkZXMgYWNjZXNzIHRvIGFsbCBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgdXNlZCBpbiBPcGVuUEdQLmpzXG4gICAgKiBAc2VlIG1vZHVsZTpjcnlwdG8vY3J5cHRvXG4gICAgKiBAc2VlIG1vZHVsZTpjcnlwdG8vc2lnbmF0dXJlXG4gICAgKiBAc2VlIG1vZHVsZTpjcnlwdG8vcHVibGljX2tleVxuICAgICogQHNlZSBtb2R1bGU6Y3J5cHRvL2NpcGhlclxuICAgICogQHNlZSBtb2R1bGU6Y3J5cHRvL3JhbmRvbVxuICAgICogQHNlZSBtb2R1bGU6Y3J5cHRvL2hhc2hcbiAgICAqIEBtb2R1bGUgY3J5cHRvXG4gICAgKi9cblxuKDAsIF9hc3NpZ24yLmRlZmF1bHQpKG1vZCwgX2NyeXB0bzIuZGVmYXVsdCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IG1vZDtcblxufSx7XCIuL2Flc19rd1wiOjMyNixcIi4vY2ZiXCI6MzI3LFwiLi9jaXBoZXJcIjozMzIsXCIuL2NyeXB0b1wiOjMzNSxcIi4vZWF4XCI6MzM2LFwiLi9nY21cIjozMzcsXCIuL2hhc2hcIjozMzgsXCIuL29jYlwiOjM0MSxcIi4vcGtjczFcIjozNDIsXCIuL3BrY3M1XCI6MzQzLFwiLi9wdWJsaWNfa2V5XCI6MzUyLFwiLi9yYW5kb21cIjozNTUsXCIuL3NpZ25hdHVyZVwiOjM1NixcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduXCI6MjR9XSwzNDE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbi8qKlxuICogQ2xhc3MgdG8gZW4vZGVjcnlwdCB1c2luZyBPQ0IgbW9kZS5cbiAqIEBwYXJhbSAge1N0cmluZ30gICAgIGNpcGhlciAgICAgIFRoZSBzeW1tZXRyaWMgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UgZS5nLiAnYWVzMTI4J1xuICogQHBhcmFtICB7VWludDhBcnJheX0ga2V5ICAgICAgICAgVGhlIGVuY3J5cHRpb24ga2V5XG4gKi9cbnZhciBPQ0IgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKGNpcGhlciwga2V5KSB7XG4gICAgdmFyIG1heE50eiwgZW5jaXBoZXIsIGRlY2lwaGVyLCBtYXNrLCBjb25zdHJ1Y3RLZXlWYXJpYWJsZXMsIGV4dGVuZEtleVZhcmlhYmxlcywgaGFzaCwgY3J5cHQ7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNyeXB0ID0gZnVuY3Rpb24gY3J5cHQoZm4sIHRleHQsIG5vbmNlLCBhZGF0YSkge1xuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBDb25zaWRlciBQIGFzIGEgc2VxdWVuY2Ugb2YgMTI4LWJpdCBibG9ja3NcbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgdmFyIG0gPSB0ZXh0Lmxlbmd0aCAvIGJsb2NrTGVuZ3RoIHwgMDtcblxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBLZXktZGVwZW5kZW50IHZhcmlhYmxlc1xuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICBleHRlbmRLZXlWYXJpYWJsZXModGV4dCwgYWRhdGEpO1xuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIE5vbmNlLWRlcGVuZGVudCBhbmQgcGVyLWVuY3J5cHRpb24gdmFyaWFibGVzXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vICAgIE5vbmNlID0gbnVtMnN0cihUQUdMRU4gbW9kIDEyOCw3KSB8fCB6ZXJvcygxMjAtYml0bGVuKE4pKSB8fCAxIHx8IE5cbiAgICAgICAgICAgICAgLy8gTm90ZTogV2UgYXNzdW1lIGhlcmUgdGhhdCB0YWdMZW5ndGggbW9kIDE2ID09IDAuXG4gICAgICAgICAgICAgIHZhciBwYWRkZWROb25jZSA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3plcm9CbG9jay5zdWJhcnJheSgwLCBpdkxlbmd0aCAtIG5vbmNlLmxlbmd0aCksIG9uZSwgbm9uY2VdKTtcbiAgICAgICAgICAgICAgLy8gICAgYm90dG9tID0gc3RyMm51bShOb25jZVsxMjMuLjEyOF0pXG4gICAgICAgICAgICAgIHZhciBib3R0b20gPSBwYWRkZWROb25jZVtibG9ja0xlbmd0aCAtIDFdICYgNjM7XG4gICAgICAgICAgICAgIC8vICAgIEt0b3AgPSBFTkNJUEhFUihLLCBOb25jZVsxLi4xMjJdIHx8IHplcm9zKDYpKVxuICAgICAgICAgICAgICBwYWRkZWROb25jZVtibG9ja0xlbmd0aCAtIDFdICY9IDE5MjtcbiAgICAgICAgICAgICAgdmFyIGtUb3AgPSBlbmNpcGhlcihwYWRkZWROb25jZSk7XG4gICAgICAgICAgICAgIC8vICAgIFN0cmV0Y2ggPSBLdG9wIHx8IChLdG9wWzEuLjY0XSB4b3IgS3RvcFs5Li43Ml0pXG4gICAgICAgICAgICAgIHZhciBzdHJldGNoZWQgPSBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtrVG9wLCB4b3Ioa1RvcC5zdWJhcnJheSgwLCA4KSwga1RvcC5zdWJhcnJheSgxLCA5KSldKTtcbiAgICAgICAgICAgICAgLy8gICAgT2Zmc2V0XzAgPSBTdHJldGNoWzErYm90dG9tLi4xMjgrYm90dG9tXVxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gX3V0aWwyLmRlZmF1bHQuc2hpZnRSaWdodChzdHJldGNoZWQuc3ViYXJyYXkoMCArIChib3R0b20gPj4gMyksIDE3ICsgKGJvdHRvbSA+PiAzKSksIDggLSAoYm90dG9tICYgNykpLnN1YmFycmF5KDEpO1xuICAgICAgICAgICAgICAvLyAgICBDaGVja3N1bV8wID0gemVyb3MoMTI4KVxuICAgICAgICAgICAgICB2YXIgY2hlY2tzdW0gPSBuZXcgVWludDhBcnJheShibG9ja0xlbmd0aCk7XG5cbiAgICAgICAgICAgICAgdmFyIGN0ID0gbmV3IFVpbnQ4QXJyYXkodGV4dC5sZW5ndGggKyB0YWdMZW5ndGgpO1xuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIFByb2Nlc3MgYW55IHdob2xlIGJsb2Nrc1xuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvLyBPZmZzZXRfaSA9IE9mZnNldF97aS0xfSB4b3IgTF97bnR6KGkpfVxuICAgICAgICAgICAgICAgIHhvck11dChvZmZzZXQsIG1hc2tbbnR6KGkgKyAxKV0pO1xuICAgICAgICAgICAgICAgIC8vIENfaSA9IE9mZnNldF9pIHhvciBFTkNJUEhFUihLLCBQX2kgeG9yIE9mZnNldF9pKVxuICAgICAgICAgICAgICAgIC8vIFBfaSA9IE9mZnNldF9pIHhvciBERUNJUEhFUihLLCBDX2kgeG9yIE9mZnNldF9pKVxuICAgICAgICAgICAgICAgIGN0LnNldCh4b3JNdXQoZm4oeG9yKG9mZnNldCwgdGV4dCkpLCBvZmZzZXQpLCBwb3MpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrc3VtX2kgPSBDaGVja3N1bV97aS0xfSB4b3IgUF9pXG4gICAgICAgICAgICAgICAgeG9yTXV0KGNoZWNrc3VtLCBmbiA9PT0gZW5jaXBoZXIgPyB0ZXh0IDogY3Quc3ViYXJyYXkocG9zKSk7XG5cbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJhcnJheShibG9ja0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgcG9zICs9IGJsb2NrTGVuZ3RoO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBhbnkgZmluYWwgcGFydGlhbCBibG9jayBhbmQgY29tcHV0ZSByYXcgdGFnXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIE9mZnNldF8qID0gT2Zmc2V0X20geG9yIExfKlxuICAgICAgICAgICAgICAgIHhvck11dChvZmZzZXQsIG1hc2sueCk7XG4gICAgICAgICAgICAgICAgLy8gUGFkID0gRU5DSVBIRVIoSywgT2Zmc2V0XyopXG4gICAgICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSBlbmNpcGhlcihvZmZzZXQpO1xuICAgICAgICAgICAgICAgIC8vIENfKiA9IFBfKiB4b3IgUGFkWzEuLmJpdGxlbihQXyopXVxuICAgICAgICAgICAgICAgIGN0LnNldCh4b3IodGV4dCwgcGFkZGluZyksIHBvcyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVja3N1bV8qID0gQ2hlY2tzdW1fbSB4b3IgKFBfKiB8fCAxIHx8IG5ldyBVaW50OEFycmF5KDEyNy1iaXRsZW4oUF8qKSkpXG4gICAgICAgICAgICAgICAgdmFyIHhvcklucHV0ID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW5ndGgpO1xuICAgICAgICAgICAgICAgIHhvcklucHV0LnNldChmbiA9PT0gZW5jaXBoZXIgPyB0ZXh0IDogY3Quc3ViYXJyYXkocG9zLCAtdGFnTGVuZ3RoKSwgMCk7XG4gICAgICAgICAgICAgICAgeG9ySW5wdXRbdGV4dC5sZW5ndGhdID0gMTI4O1xuICAgICAgICAgICAgICAgIHhvck11dChjaGVja3N1bSwgeG9ySW5wdXQpO1xuICAgICAgICAgICAgICAgIHBvcyArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBUYWcgPSBFTkNJUEhFUihLLCBDaGVja3N1bV8qIHhvciBPZmZzZXRfKiB4b3IgTF8kKSB4b3IgSEFTSChLLEEpXG4gICAgICAgICAgICAgIHZhciB0YWcgPSB4b3JNdXQoZW5jaXBoZXIoeG9yTXV0KHhvck11dChjaGVja3N1bSwgb2Zmc2V0KSwgbWFzay4kKSksIGhhc2goYWRhdGEpKTtcblxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBBc3NlbWJsZSBjaXBoZXJ0ZXh0XG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIEMgPSBDXzEgfHwgQ18yIHx8IC4uLiB8fCBDX20gfHwgQ18qIHx8IFRhZ1sxLi5UQUdMRU5dXG4gICAgICAgICAgICAgIGN0LnNldCh0YWcsIHBvcyk7XG4gICAgICAgICAgICAgIHJldHVybiBjdDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGhhc2ggPSBmdW5jdGlvbiBoYXNoKGFkYXRhKSB7XG4gICAgICAgICAgICAgIGlmICghYWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gRmFzdCBwYXRoXG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9CbG9jaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIENvbnNpZGVyIEEgYXMgYSBzZXF1ZW5jZSBvZiAxMjgtYml0IGJsb2Nrc1xuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICB2YXIgbSA9IGFkYXRhLmxlbmd0aCAvIGJsb2NrTGVuZ3RoIHwgMDtcblxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW5ndGgpO1xuICAgICAgICAgICAgICB2YXIgc3VtID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW5ndGgpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHhvck11dChvZmZzZXQsIG1hc2tbbnR6KGkgKyAxKV0pO1xuICAgICAgICAgICAgICAgIHhvck11dChzdW0sIGVuY2lwaGVyKHhvcihvZmZzZXQsIGFkYXRhKSkpO1xuICAgICAgICAgICAgICAgIGFkYXRhID0gYWRhdGEuc3ViYXJyYXkoYmxvY2tMZW5ndGgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gUHJvY2VzcyBhbnkgZmluYWwgcGFydGlhbCBibG9jazsgY29tcHV0ZSBmaW5hbCBoYXNoIHZhbHVlXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIGlmIChhZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB4b3JNdXQob2Zmc2V0LCBtYXNrLngpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNpcGhlcklucHV0ID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNpcGhlcklucHV0LnNldChhZGF0YSwgMCk7XG4gICAgICAgICAgICAgICAgY2lwaGVySW5wdXRbYWRhdGEubGVuZ3RoXSA9IDEyODtcbiAgICAgICAgICAgICAgICB4b3JNdXQoY2lwaGVySW5wdXQsIG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICB4b3JNdXQoc3VtLCBlbmNpcGhlcihjaXBoZXJJbnB1dCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4dGVuZEtleVZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV4dGVuZEtleVZhcmlhYmxlcyh0ZXh0LCBhZGF0YSkge1xuICAgICAgICAgICAgICB2YXIgbmV3TWF4TnR6ID0gX3V0aWwyLmRlZmF1bHQubmJpdHMoTWF0aC5tYXgodGV4dC5sZW5ndGgsIGFkYXRhLmxlbmd0aCkgLyBibG9ja0xlbmd0aCB8IDApIC0gMTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1heE50eiArIDE7IGkgPD0gbmV3TWF4TnR6OyBpKyspIHtcbiAgICAgICAgICAgICAgICBtYXNrW2ldID0gX3V0aWwyLmRlZmF1bHQuZG91YmxlKG1hc2tbaSAtIDFdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBtYXhOdHogPSBuZXdNYXhOdHo7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdHJ1Y3RLZXlWYXJpYWJsZXMgPSBmdW5jdGlvbiBjb25zdHJ1Y3RLZXlWYXJpYWJsZXMoY2lwaGVyLCBrZXkpIHtcbiAgICAgICAgICAgICAgdmFyIGFlcyA9IG5ldyBfY2lwaGVyMi5kZWZhdWx0W2NpcGhlcl0oa2V5KTtcbiAgICAgICAgICAgICAgZW5jaXBoZXIgPSBhZXMuZW5jcnlwdC5iaW5kKGFlcyk7XG4gICAgICAgICAgICAgIGRlY2lwaGVyID0gYWVzLmRlY3J5cHQuYmluZChhZXMpO1xuXG4gICAgICAgICAgICAgIHZhciBtYXNrX3ggPSBlbmNpcGhlcih6ZXJvQmxvY2spO1xuICAgICAgICAgICAgICB2YXIgbWFza18kID0gX3V0aWwyLmRlZmF1bHQuZG91YmxlKG1hc2tfeCk7XG4gICAgICAgICAgICAgIG1hc2sgPSBbXTtcbiAgICAgICAgICAgICAgbWFza1swXSA9IF91dGlsMi5kZWZhdWx0LmRvdWJsZShtYXNrXyQpO1xuXG4gICAgICAgICAgICAgIG1hc2sueCA9IG1hc2tfeDtcbiAgICAgICAgICAgICAgbWFzay4kID0gbWFza18kO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbWF4TnR6ID0gMDtcbiAgICAgICAgICAgIGVuY2lwaGVyID0gdm9pZCAwO1xuICAgICAgICAgICAgZGVjaXBoZXIgPSB2b2lkIDA7XG4gICAgICAgICAgICBtYXNrID0gdm9pZCAwO1xuXG5cbiAgICAgICAgICAgIGNvbnN0cnVjdEtleVZhcmlhYmxlcyhjaXBoZXIsIGtleSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRW5jcnlwdC9kZWNyeXB0IGRhdGEuXG4gICAgICAgICAgICAgKiBAcGFyYW0gIHtlbmNpcGhlcnxkZWNpcGhlcn0gZm4gICBFbmNyeXB0aW9uL2RlY3J5cHRpb24gYmxvY2sgY2lwaGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICAgKiBAcGFyYW0gIHtVaW50OEFycmF5fSB0ZXh0ICAgICAgICBUaGUgY2xlYXJ0ZXh0IG9yIGNpcGhlcnRleHQgKHdpdGhvdXQgdGFnKSBpbnB1dFxuICAgICAgICAgICAgICogQHBhcmFtICB7VWludDhBcnJheX0gbm9uY2UgICAgICAgVGhlIG5vbmNlICgxNSBieXRlcylcbiAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGFkYXRhICAgICAgIEFzc29jaWF0ZWQgZGF0YSB0byBzaWduXG4gICAgICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVaW50OEFycmF5Pn0gICAgVGhlIGNpcGhlcnRleHQgb3IgcGxhaW50ZXh0IG91dHB1dCwgd2l0aCB0YWcgYXBwZW5kZWQgaW4gYm90aCBjYXNlc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogRW5jcnlwdCBwbGFpbnRleHQgaW5wdXQuXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IHBsYWludGV4dCAgIFRoZSBjbGVhcnRleHQgaW5wdXQgdG8gYmUgZW5jcnlwdGVkXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IG5vbmNlICAgICAgIFRoZSBub25jZSAoMTUgYnl0ZXMpXG4gICAgICAgICAgICAgICAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGFkYXRhICAgICAgIEFzc29jaWF0ZWQgZGF0YSB0byBzaWduXG4gICAgICAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSAgICBUaGUgY2lwaGVydGV4dCBvdXRwdXRcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShwbGFpbnRleHQsIG5vbmNlLCBhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBjcnlwdChlbmNpcGhlciwgcGxhaW50ZXh0LCBub25jZSwgYWRhdGEpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuY3J5cHQoX3gzLCBfeDQsIF94NSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHQ7XG4gICAgICAgICAgICAgIH0oKSxcblxuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogRGVjcnlwdCBjaXBoZXJ0ZXh0IGlucHV0LlxuICAgICAgICAgICAgICAgKiBAcGFyYW0gIHtVaW50OEFycmF5fSBjaXBoZXJ0ZXh0ICBUaGUgY2lwaGVydGV4dCBpbnB1dCB0byBiZSBkZWNyeXB0ZWRcbiAgICAgICAgICAgICAgICogQHBhcmFtICB7VWludDhBcnJheX0gbm9uY2UgICAgICAgVGhlIG5vbmNlICgxNSBieXRlcylcbiAgICAgICAgICAgICAgICogQHBhcmFtICB7VWludDhBcnJheX0gYWRhdGEgICAgICAgQXNzb2NpYXRlZCBkYXRhIHRvIHNpZ25cbiAgICAgICAgICAgICAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheT59ICAgIFRoZSBjaXBoZXJ0ZXh0IG91dHB1dFxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihjaXBoZXJ0ZXh0LCBub25jZSwgYWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB0YWcsIGNyeXB0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaXBoZXJ0ZXh0Lmxlbmd0aCA8IHRhZ0xlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgT0NCIGNpcGhlcnRleHQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgPSBjaXBoZXJ0ZXh0LnN1YmFycmF5KC10YWdMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQgPSBjaXBoZXJ0ZXh0LnN1YmFycmF5KDAsIC10YWdMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0ZWQgPSBjcnlwdChkZWNpcGhlciwgY2lwaGVydGV4dCwgbm9uY2UsIGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKFRhZ1sxLi5UQUdMRU5dID09IFQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdXRpbDIuZGVmYXVsdC5lcXVhbHNVaW50OEFycmF5KHRhZywgY3J5cHRlZC5zdWJhcnJheSgtdGFnTGVuZ3RoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgY3J5cHRlZC5zdWJhcnJheSgwLCAtdGFnTGVuZ3RoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiB0YWcgbWlzbWF0Y2gnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjcnlwdChfeDYsIF94NywgX3g4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjcnlwdDtcbiAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTMsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIE9DQihfeCwgX3gyKSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBHZXQgT0NCIG5vbmNlIGFzIGRlZmluZWQgYnkge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9wZW5wZ3AtcmZjNDg4MGJpcy0wNCNzZWN0aW9uLTUuMTYuMnxSRkM0ODgwYmlzLTA0LCBzZWN0aW9uIDUuMTYuMn0uXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSBpdiAgICAgICAgICAgVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciAoMTUgYnl0ZXMpXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSBjaHVua0luZGV4ICAgVGhlIGNodW5rIGluZGV4ICg4IGJ5dGVzKVxuICovXG5cblxudmFyIF9jaXBoZXIgPSBfZGVyZXFfKCcuL2NpcGhlcicpO1xuXG52YXIgX2NpcGhlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaXBoZXIpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gT3BlblBHUC5qcyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDE4IFByb3RvblRlY2ggQUdcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBBRVMtT0NCIGVuL2RlY3J5cHRpb24uXG4gKiBAcmVxdWlyZXMgY3J5cHRvL2NpcGhlclxuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUgY3J5cHRvL29jYlxuICovXG5cbnZhciBibG9ja0xlbmd0aCA9IDE2O1xudmFyIGl2TGVuZ3RoID0gMTU7XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9wZW5wZ3AtcmZjNDg4MGJpcy0wNCNzZWN0aW9uLTUuMTYuMjpcbi8vIFdoaWxlIE9DQiBbUkZDNzI1M10gYWxsb3dzIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgbGVuZ3RoIHRvIGJlIG9mIGFueVxuLy8gbnVtYmVyIHVwIHRvIDEyOCBiaXRzIGxvbmcsIHRoaXMgZG9jdW1lbnQgcmVxdWlyZXMgYSBmaXhlZFxuLy8gYXV0aGVudGljYXRpb24gdGFnIGxlbmd0aCBvZiAxMjggYml0cyAoMTYgb2N0ZXRzKSBmb3Igc2ltcGxpY2l0eS5cbnZhciB0YWdMZW5ndGggPSAxNjtcblxuZnVuY3Rpb24gbnR6KG4pIHtcbiAgdmFyIG50eiA9IDA7XG4gIGZvciAodmFyIGkgPSAxOyAobiAmIGkpID09PSAwOyBpIDw8PSAxKSB7XG4gICAgbnR6Kys7XG4gIH1cbiAgcmV0dXJuIG50ejtcbn1cblxuZnVuY3Rpb24geG9yTXV0KFMsIFQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBTLmxlbmd0aDsgaSsrKSB7XG4gICAgU1tpXSBePSBUW2ldO1xuICB9XG4gIHJldHVybiBTO1xufVxuXG5mdW5jdGlvbiB4b3IoUywgVCkge1xuICByZXR1cm4geG9yTXV0KFMuc2xpY2UoKSwgVCk7XG59XG5cbnZhciB6ZXJvQmxvY2sgPSBuZXcgVWludDhBcnJheShibG9ja0xlbmd0aCk7XG52YXIgb25lID0gbmV3IFVpbnQ4QXJyYXkoWzFdKTtPQ0IuZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoaXYsIGNodW5rSW5kZXgpIHtcbiAgdmFyIG5vbmNlID0gaXYuc2xpY2UoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVua0luZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgbm9uY2VbNyArIGldIF49IGNodW5rSW5kZXhbaV07XG4gIH1cbiAgcmV0dXJuIG5vbmNlO1xufTtcblxuT0NCLmJsb2NrTGVuZ3RoID0gYmxvY2tMZW5ndGg7XG5PQ0IuaXZMZW5ndGggPSBpdkxlbmd0aDtcbk9DQi50YWdMZW5ndGggPSB0YWdMZW5ndGg7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IE9DQjtcblxufSx7XCIuLi91dGlsXCI6Mzk4LFwiLi9jaXBoZXJcIjozMzIsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzQyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG4vKipcbiAqIENyZWF0ZSBwYWRkaW5nIHdpdGggc2VjdXJlIHJhbmRvbSBkYXRhXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7SW50ZWdlcn0gbGVuZ3RoIExlbmd0aCBvZiB0aGUgcGFkZGluZyBpbiBieXRlc1xuICogQHJldHVybnMge1N0cmluZ30gICAgICAgIFBhZGRpbmcgYXMgc3RyaW5nXG4gKiBAYXN5bmNcbiAqL1xudmFyIGdldFBrY3MxUGFkZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShsZW5ndGgpIHtcbiAgICB2YXIgcmVzdWx0LCByYW5kb21CeXRlcywgaTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmICghKHJlc3VsdC5sZW5ndGggPCBsZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA4O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gX3JhbmRvbTIuZGVmYXVsdC5nZXRSYW5kb21CeXRlcyhsZW5ndGggLSByZXN1bHQubGVuZ3RoKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJhbmRvbUJ5dGVzID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJhbmRvbUJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChyYW5kb21CeXRlc1tpXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJhbmRvbUJ5dGVzW2ldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHJlc3VsdCk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBnZXRQa2NzMVBhZGRpbmcoX3gpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIENyZWF0ZSBhIEVNRS1QS0NTMS12MV81IHBhZGRlZCBtZXNzYWdlXG4gKiBAc2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTEzLjEuMXxSRkMgNDg4MCAxMy4xLjF9XG4gKiBAcGFyYW0ge1N0cmluZ30gTSBtZXNzYWdlIHRvIGJlIGVuY29kZWRcbiAqIEBwYXJhbSB7SW50ZWdlcn0gayB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUga2V5IG1vZHVsdXNcbiAqIEByZXR1cm5zIHtQcm9taXNlPFN0cmluZz59IEVNRS1QS0NTMSBwYWRkZWQgbWVzc2FnZVxuICogQGFzeW5jXG4gKi9cblxuXG52YXIgX3JhbmRvbSA9IF9kZXJlcV8oJy4vcmFuZG9tJyk7XG5cbnZhciBfcmFuZG9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhbmRvbSk7XG5cbnZhciBfaGFzaCA9IF9kZXJlcV8oJy4vaGFzaCcpO1xuXG52YXIgX2hhc2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFzaCk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKiogQG5hbWVzcGFjZSAqL1xudmFyIGVtZSA9IHt9O1xuLyoqIEBuYW1lc3BhY2UgKi9cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBQcm92aWRlcyBFTUUtUEtDUzEtdjFfNSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgYW5kIEVNU0EtUEtDUzEtdjFfNSBlbmNvZGluZyBmdW5jdGlvblxuICogQHNlZSBtb2R1bGU6Y3J5cHRvL3B1YmxpY19rZXkvcnNhXG4gKiBAc2VlIG1vZHVsZTpjcnlwdG8vcHVibGljX2tleS9lbGxpcHRpYy9lY2RoXG4gKiBAc2VlIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleVxuICogQHJlcXVpcmVzIGNyeXB0by9yYW5kb21cbiAqIEByZXF1aXJlcyBjcnlwdG8vaGFzaFxuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUgY3J5cHRvL3BrY3MxXG4gKi9cblxudmFyIGVtc2EgPSB7fTtcblxuLyoqXG4gKiBBU04xIG9iamVjdCBpZGVudGlmaWVycyBmb3IgaGFzaGVzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuMi4yfVxuICovXG52YXIgaGFzaF9oZWFkZXJzID0gW107XG5oYXNoX2hlYWRlcnNbMV0gPSBbMHgzMCwgMHgyMCwgMHgzMCwgMHgwYywgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgwMiwgMHgwNSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgxMF07XG5oYXNoX2hlYWRlcnNbMl0gPSBbMHgzMCwgMHgyMSwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwNSwgMHgyYiwgMHgwZSwgMHgwMywgMHgwMiwgMHgxYSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgxNF07XG5oYXNoX2hlYWRlcnNbM10gPSBbMHgzMCwgMHgyMSwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwNSwgMHgyQiwgMHgyNCwgMHgwMywgMHgwMiwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgxNF07XG5oYXNoX2hlYWRlcnNbOF0gPSBbMHgzMCwgMHgzMSwgMHgzMCwgMHgwZCwgMHgwNiwgMHgwOSwgMHg2MCwgMHg4NiwgMHg0OCwgMHgwMSwgMHg2NSwgMHgwMywgMHgwNCwgMHgwMiwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgyMF07XG5oYXNoX2hlYWRlcnNbOV0gPSBbMHgzMCwgMHg0MSwgMHgzMCwgMHgwZCwgMHgwNiwgMHgwOSwgMHg2MCwgMHg4NiwgMHg0OCwgMHgwMSwgMHg2NSwgMHgwMywgMHgwNCwgMHgwMiwgMHgwMiwgMHgwNSwgMHgwMCwgMHgwNCwgMHgzMF07XG5oYXNoX2hlYWRlcnNbMTBdID0gWzB4MzAsIDB4NTEsIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsIDB4NDgsIDB4MDEsIDB4NjUsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MDMsIDB4MDUsIDB4MDAsIDB4MDQsIDB4NDBdO1xuaGFzaF9oZWFkZXJzWzExXSA9IFsweDMwLCAweDJkLCAweDMwLCAweDBkLCAweDA2LCAweDA5LCAweDYwLCAweDg2LCAweDQ4LCAweDAxLCAweDY1LCAweDAzLCAweDA0LCAweDAyLCAweDA0LCAweDA1LCAweDAwLCAweDA0LCAweDFDXTtlbWUuZW5jb2RlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoTSwgaykge1xuICAgIHZhciBtTGVuLCBQUztcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgbUxlbiA9IE0ubGVuZ3RoO1xuICAgICAgICAgICAgLy8gbGVuZ3RoIGNoZWNraW5nXG5cbiAgICAgICAgICAgIGlmICghKG1MZW4gPiBrIC0gMTEpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWVzc2FnZSB0b28gbG9uZycpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuIGdldFBrY3MxUGFkZGluZyhrIC0gbUxlbiAtIDMpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgUFMgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDApICsgU3RyaW5nLmZyb21DaGFyQ29kZSgyKSArIFBTICsgU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIE0pO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gyLCBfeDMpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBEZWNvZGUgYSBFTUUtUEtDUzEtdjFfNSBwYWRkZWQgbWVzc2FnZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi0xMy4xLjJ8UkZDIDQ4ODAgMTMuMS4yfVxuICogQHBhcmFtIHtTdHJpbmd9IEVNIGVuY29kZWQgbWVzc2FnZSwgYW4gb2N0ZXQgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBtZXNzYWdlLCBhbiBvY3RldCBzdHJpbmdcbiAqL1xuZW1lLmRlY29kZSA9IGZ1bmN0aW9uIChFTSkge1xuICAvLyBsZWFkaW5nIHplcm9zIHRydW5jYXRlZCBieSBibi5qc1xuICBpZiAoRU0uY2hhckNvZGVBdCgwKSAhPT0gMCkge1xuICAgIEVNID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIEVNO1xuICB9XG4gIHZhciBmaXJzdE9jdCA9IEVNLmNoYXJDb2RlQXQoMCk7XG4gIHZhciBzZWNvbmRPY3QgPSBFTS5jaGFyQ29kZUF0KDEpO1xuICB2YXIgaSA9IDI7XG4gIHdoaWxlIChFTS5jaGFyQ29kZUF0KGkpICE9PSAwICYmIGkgPCBFTS5sZW5ndGgpIHtcbiAgICBpKys7XG4gIH1cbiAgdmFyIHBzTGVuID0gaSAtIDI7XG4gIHZhciBzZXBhcmF0b3IgPSBFTS5jaGFyQ29kZUF0KGkrKyk7XG4gIGlmIChmaXJzdE9jdCA9PT0gMCAmJiBzZWNvbmRPY3QgPT09IDIgJiYgcHNMZW4gPj0gOCAmJiBzZXBhcmF0b3IgPT09IDApIHtcbiAgICByZXR1cm4gRU0uc3Vic3RyKGkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignRGVjcnlwdGlvbiBlcnJvcicpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBFTVNBLVBLQ1MxLXYxXzUgcGFkZGVkIG1lc3NhZ2VcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tMTMuMS4zfFJGQyA0ODgwIDEzLjEuM31cbiAqIEBwYXJhbSB7SW50ZWdlcn0gYWxnbyBIYXNoIGFsZ29yaXRobSB0eXBlIHVzZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBNIG1lc3NhZ2UgdG8gYmUgZW5jb2RlZFxuICogQHBhcmFtIHtJbnRlZ2VyfSBlbUxlbiBpbnRlbmRlZCBsZW5ndGggaW4gb2N0ZXRzIG9mIHRoZSBlbmNvZGVkIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGVuY29kZWQgbWVzc2FnZVxuICovXG5lbXNhLmVuY29kZSA9IGZ1bmN0aW9uIChhbGdvLCBNLCBlbUxlbikge1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgLy8gQXBwbHkgdGhlIGhhc2ggZnVuY3Rpb24gdG8gdGhlIG1lc3NhZ2UgTSB0byBwcm9kdWNlIGEgaGFzaCB2YWx1ZSBIXG4gIHZhciBIID0gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIoX2hhc2gyLmRlZmF1bHQuZGlnZXN0KGFsZ28sIF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KE0pKSk7XG4gIGlmIChILmxlbmd0aCAhPT0gX2hhc2gyLmRlZmF1bHQuZ2V0SGFzaEJ5dGVMZW5ndGgoYWxnbykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGFzaCBsZW5ndGgnKTtcbiAgfVxuICAvLyBwcm9kdWNlIGFuIEFTTi4xIERFUiB2YWx1ZSBmb3IgdGhlIGhhc2ggZnVuY3Rpb24gdXNlZC5cbiAgLy8gTGV0IFQgYmUgdGhlIGZ1bGwgaGFzaCBwcmVmaXhcbiAgdmFyIFQgPSAnJztcbiAgZm9yIChpID0gMDsgaSA8IGhhc2hfaGVhZGVyc1thbGdvXS5sZW5ndGg7IGkrKykge1xuICAgIFQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShoYXNoX2hlYWRlcnNbYWxnb11baV0pO1xuICB9XG4gIC8vIGFkZCBoYXNoIHZhbHVlIHRvIHByZWZpeFxuICBUICs9IEg7XG4gIC8vIGFuZCBsZXQgdExlbiBiZSB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiBUXG4gIHZhciB0TGVuID0gVC5sZW5ndGg7XG4gIGlmIChlbUxlbiA8IHRMZW4gKyAxMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZW5kZWQgZW5jb2RlZCBtZXNzYWdlIGxlbmd0aCB0b28gc2hvcnQnKTtcbiAgfVxuICAvLyBhbiBvY3RldCBzdHJpbmcgUFMgY29uc2lzdGluZyBvZiBlbUxlbiAtIHRMZW4gLSAzIG9jdGV0cyB3aXRoIGhleGFkZWNpbWFsIHZhbHVlIDB4RkZcbiAgLy8gVGhlIGxlbmd0aCBvZiBQUyB3aWxsIGJlIGF0IGxlYXN0IDggb2N0ZXRzXG4gIHZhciBQUyA9ICcnO1xuICBmb3IgKGkgPSAwOyBpIDwgZW1MZW4gLSB0TGVuIC0gMzsgaSsrKSB7XG4gICAgUFMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGZmKTtcbiAgfVxuICAvLyBDb25jYXRlbmF0ZSBQUywgdGhlIGhhc2ggcHJlZml4IFQsIGFuZCBvdGhlciBwYWRkaW5nIHRvIGZvcm0gdGhlXG4gIC8vIGVuY29kZWQgbWVzc2FnZSBFTSBhcyBFTSA9IDB4MDAgfHwgMHgwMSB8fCBQUyB8fCAweDAwIHx8IFQuXG4gIHZhciBFTSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwMCkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDEpICsgUFMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDApICsgVDtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LnN0cl90b19oZXgoRU0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0geyBlbWU6IGVtZSwgZW1zYTogZW1zYSB9O1xuXG59LHtcIi4uL3V0aWxcIjozOTgsXCIuL2hhc2hcIjozMzgsXCIuL3JhbmRvbVwiOjM1NSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDJ9XSwzNDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLy8gT3BlblBHUC5qcyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgRGVjZW50cmFsXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEZ1bmN0aW9ucyB0byBhZGQgYW5kIHJlbW92ZSBQS0NTNSBwYWRkaW5nXG4gKiBAc2VlIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleVxuICogQG1vZHVsZSBjcnlwdG8vcGtjczVcbiAqL1xuXG4vKipcbiAqIEFkZCBwa2NzNSBwYWRkaW5nIHRvIGEgdGV4dC5cbiAqIEBwYXJhbSAge1N0cmluZ30gIG1zZyAgVGV4dCB0byBhZGQgcGFkZGluZ1xuICogQHJldHVybnMge1N0cmluZ30gICAgICAgVGV4dCB3aXRoIHBhZGRpbmcgYWRkZWRcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKG1zZykge1xuICB2YXIgYyA9IDggLSBtc2cubGVuZ3RoICUgODtcbiAgdmFyIHBhZGRpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpLnJlcGVhdChjKTtcbiAgcmV0dXJuIG1zZyArIHBhZGRpbmc7XG59XG5cbi8qKlxuICogUmVtb3ZlIHBrY3M1IHBhZGRpbmcgZnJvbSBhIHN0cmluZy5cbiAqIEBwYXJhbSAge1N0cmluZ30gIG1zZyAgVGV4dCB0byByZW1vdmUgcGFkZGluZyBmcm9tXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgICAgICBUZXh0IHdpdGggcGFkZGluZyByZW1vdmVkXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShtc2cpIHtcbiAgdmFyIGxlbiA9IG1zZy5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChsZW4gLSAxKTtcbiAgICBpZiAoYyA+PSAxICYmIGMgPD0gOCkge1xuICAgICAgdmFyIHByb3ZpZGVkID0gbXNnLnN1YnN0cihsZW4gLSBjKTtcbiAgICAgIHZhciBjb21wdXRlZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYykucmVwZWF0KGMpO1xuICAgICAgaWYgKHByb3ZpZGVkID09PSBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4gbXNnLnN1YnN0cigwLCBsZW4gLSBjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBhZGRpbmcnKTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0geyBlbmNvZGU6IGVuY29kZSwgZGVjb2RlOiBkZWNvZGUgfTtcblxufSx7fV0sMzQ0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX2JuID0gX2RlcmVxXygnYm4uanMnKTtcblxudmFyIF9ibjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ibik7XG5cbnZhciBfaGFzaCA9IF9kZXJlcV8oJy4uL2hhc2gnKTtcblxudmFyIF9oYXNoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhc2gpO1xuXG52YXIgX3JhbmRvbSA9IF9kZXJlcV8oJy4uL3JhbmRvbScpO1xuXG52YXIgX3JhbmRvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yYW5kb20pO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi8uLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEEgRGlnaXRhbCBzaWduYXR1cmUgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uXG4gKiBAcmVxdWlyZXMgYm4uanNcbiAqIEByZXF1aXJlcyBjcnlwdG8vaGFzaFxuICogQHJlcXVpcmVzIGNyeXB0by9yYW5kb21cbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGNyeXB0by9wdWJsaWNfa2V5L2RzYVxuICovXG5cbnZhciBvbmUgPSBuZXcgX2JuMi5kZWZhdWx0KDEpO1xudmFyIHplcm8gPSBuZXcgX2JuMi5kZWZhdWx0KDApO1xuXG4vKlxuICBUT0RPIHJlZ2FyZGluZyB0aGUgaGFzaCBmdW5jdGlvbiwgcmVhZDpcbiAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tMTMuNlxuICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi0xNFxuKi9cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAvKipcbiAgICogRFNBIFNpZ24gZnVuY3Rpb25cbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBoYXNoX2FsZ29cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1cbiAgICogQHBhcmFtIHtCTn0gZ1xuICAgKiBAcGFyYW0ge0JOfSBwXG4gICAqIEBwYXJhbSB7Qk59IHFcbiAgICogQHBhcmFtIHtCTn0geFxuICAgKiBAcmV0dXJucyB7eyByOiBCTiwgczogQk4gfX1cbiAgICogQGFzeW5jXG4gICAqL1xuICBzaWduOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShoYXNoX2FsZ28sIG0sIGcsIHAsIHEsIHgpIHtcbiAgICAgIHZhciBrLCByLCBzLCB0LCByZWRwLCByZWRxLCBncmVkLCB4cmVkLCBoO1xuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBrID0gdm9pZCAwO1xuICAgICAgICAgICAgICByID0gdm9pZCAwO1xuICAgICAgICAgICAgICBzID0gdm9pZCAwO1xuICAgICAgICAgICAgICB0ID0gdm9pZCAwO1xuICAgICAgICAgICAgICByZWRwID0gbmV3IF9ibjIuZGVmYXVsdC5yZWQocCk7XG4gICAgICAgICAgICAgIHJlZHEgPSBuZXcgX2JuMi5kZWZhdWx0LnJlZChxKTtcbiAgICAgICAgICAgICAgZ3JlZCA9IGcudG9SZWQocmVkcCk7XG4gICAgICAgICAgICAgIHhyZWQgPSB4LnRvUmVkKHJlZHEpO1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgb3V0cHV0IHNpemUgb2YgdGhlIGNob3NlbiBoYXNoIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2ZcbiAgICAgICAgICAgICAgLy8gYml0cyBvZiBxLCB0aGUgaGFzaCByZXN1bHQgaXMgdHJ1bmNhdGVkIHRvIGZpdCBieSB0YWtpbmcgdGhlIG51bWJlclxuICAgICAgICAgICAgICAvLyBvZiBsZWZ0bW9zdCBiaXRzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cyBvZiBxLiAgVGhpcyAocG9zc2libHlcbiAgICAgICAgICAgICAgLy8gdHJ1bmNhdGVkKSBoYXNoIGZ1bmN0aW9uIHJlc3VsdCBpcyB0cmVhdGVkIGFzIGEgbnVtYmVyIGFuZCB1c2VkXG4gICAgICAgICAgICAgIC8vIGRpcmVjdGx5IGluIHRoZSBEU0Egc2lnbmF0dXJlIGFsZ29yaXRobS5cblxuICAgICAgICAgICAgICBoID0gbmV3IF9ibjIuZGVmYXVsdChfdXRpbDIuZGVmYXVsdC5nZXRMZWZ0TkJpdHMoX2hhc2gyLmRlZmF1bHQuZGlnZXN0KGhhc2hfYWxnbywgbSksIHEuYml0TGVuZ3RoKCkpKS50b1JlZChyZWRxKTtcbiAgICAgICAgICAgICAgLy8gRklQUy0xODYtNCwgc2VjdGlvbiA0LjY6XG4gICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZXMgb2YgciBhbmQgcyBzaGFsbCBiZSBjaGVja2VkIHRvIGRldGVybWluZSBpZiByID0gMCBvciBzID0gMC5cbiAgICAgICAgICAgICAgLy8gSWYgZWl0aGVyIHIgPSAwIG9yIHMgPSAwLCBhIG5ldyB2YWx1ZSBvZiBrIHNoYWxsIGJlIGdlbmVyYXRlZCwgYW5kIHRoZVxuICAgICAgICAgICAgICAvLyBzaWduYXR1cmUgc2hhbGwgYmUgcmVjYWxjdWxhdGVkLiBJdCBpcyBleHRyZW1lbHkgdW5saWtlbHkgdGhhdCByID0gMFxuICAgICAgICAgICAgICAvLyBvciBzID0gMCBpZiBzaWduYXR1cmVzIGFyZSBnZW5lcmF0ZWQgcHJvcGVybHkuXG5cbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgaWYgKCF0cnVlKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEyO1xuICAgICAgICAgICAgICByZXR1cm4gX3JhbmRvbTIuZGVmYXVsdC5nZXRSYW5kb21CTihvbmUsIHEpO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICBrID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgICAgLy8gcmV0dXJucyBpbiBbMSwgcS0xXVxuICAgICAgICAgICAgICByID0gZ3JlZC5yZWRQb3coaykuZnJvbVJlZCgpLnRvUmVkKHJlZHEpOyAvLyAoZyoqayBtb2QgcCkgbW9kIHFcblxuICAgICAgICAgICAgICBpZiAoISh6ZXJvLmNtcChyKSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdjb250aW51ZScsIDkpO1xuXG4gICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICB0ID0gaC5yZWRBZGQoeHJlZC5yZWRNdWwocikpOyAvLyBIKG0pICsgeCpyIG1vZCBxXG4gICAgICAgICAgICAgIHMgPSBrLnRvUmVkKHJlZHEpLnJlZEludm0oKS5yZWRNdWwodCk7IC8vIGsqKi0xICogKEgobSkgKyB4KnIpIG1vZCBxXG5cbiAgICAgICAgICAgICAgaWYgKCEoemVyby5jbXAocykgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgnY29udGludWUnLCA5KTtcblxuICAgICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgnYnJlYWsnLCAyMyk7XG5cbiAgICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHsgcjogci50b0FycmF5TGlrZShVaW50OEFycmF5KSxcbiAgICAgICAgICAgICAgICBzOiBzLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXkpIH0pO1xuXG4gICAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgIH0pKTtcblxuICAgIGZ1bmN0aW9uIHNpZ24oX3gsIF94MiwgX3gzLCBfeDQsIF94NSwgX3g2KSB7XG4gICAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduO1xuICB9KCksXG5cbiAgLyoqXG4gICAqIERTQSBWZXJpZnkgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBoYXNoX2FsZ29cbiAgICogQHBhcmFtIHtCTn0gclxuICAgKiBAcGFyYW0ge0JOfSBzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtXG4gICAqIEBwYXJhbSB7Qk59IGdcbiAgICogQHBhcmFtIHtCTn0gcFxuICAgKiBAcGFyYW0ge0JOfSBxXG4gICAqIEBwYXJhbSB7Qk59IHlcbiAgICogQHJldHVybnMgQk5cbiAgICogQGFzeW5jXG4gICAqL1xuICB2ZXJpZnk6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoaGFzaF9hbGdvLCByLCBzLCBtLCBnLCBwLCBxLCB5KSB7XG4gICAgICB2YXIgcmVkcCwgcmVkcSwgaCwgdywgdTEsIHUyLCB0MSwgdDIsIHY7XG4gICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBpZiAoISh6ZXJvLnVjbXAocikgPj0gMCB8fCByLnVjbXAocSkgPj0gMCB8fCB6ZXJvLnVjbXAocykgPj0gMCB8fCBzLnVjbXAocSkgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfdXRpbDIuZGVmYXVsdC5wcmludF9kZWJ1ZyhcImludmFsaWQgRFNBIFNpZ25hdHVyZVwiKTtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIG51bGwpO1xuXG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJlZHAgPSBuZXcgX2JuMi5kZWZhdWx0LnJlZChwKTtcbiAgICAgICAgICAgICAgcmVkcSA9IG5ldyBfYm4yLmRlZmF1bHQucmVkKHEpO1xuICAgICAgICAgICAgICBoID0gbmV3IF9ibjIuZGVmYXVsdChfdXRpbDIuZGVmYXVsdC5nZXRMZWZ0TkJpdHMoX2hhc2gyLmRlZmF1bHQuZGlnZXN0KGhhc2hfYWxnbywgbSksIHEuYml0TGVuZ3RoKCkpKTtcbiAgICAgICAgICAgICAgdyA9IHMudG9SZWQocmVkcSkucmVkSW52bSgpOyAvLyBzKiotMSBtb2QgcVxuXG4gICAgICAgICAgICAgIGlmICghKHplcm8uY21wKHcpID09PSAwKSkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfdXRpbDIuZGVmYXVsdC5wcmludF9kZWJ1ZyhcImludmFsaWQgRFNBIFNpZ25hdHVyZVwiKTtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIG51bGwpO1xuXG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICB1MSA9IGgudG9SZWQocmVkcSkucmVkTXVsKHcpOyAvLyBIKG0pICogdyBtb2QgcVxuXG4gICAgICAgICAgICAgIHUyID0gci50b1JlZChyZWRxKS5yZWRNdWwodyk7IC8vIHIgKiB3IG1vZCBxXG5cbiAgICAgICAgICAgICAgdDEgPSBnLnRvUmVkKHJlZHApLnJlZFBvdyh1MS5mcm9tUmVkKCkpOyAvLyBnKip1MSBtb2QgcFxuXG4gICAgICAgICAgICAgIHQyID0geS50b1JlZChyZWRwKS5yZWRQb3codTIuZnJvbVJlZCgpKTsgLy8geSoqdTIgbW9kIHBcblxuICAgICAgICAgICAgICB2ID0gdDEucmVkTXVsKHQyKS5mcm9tUmVkKCkubW9kKHEpOyAvLyAoZyoqdTEgKiB5Kip1MiBtb2QgcCkgbW9kIHFcblxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgdi5jbXAocikgPT09IDApO1xuXG4gICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gdmVyaWZ5KF94NywgX3g4LCBfeDksIF94MTAsIF94MTEsIF94MTIsIF94MTMsIF94MTQpIHtcbiAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZnk7XG4gIH0oKVxufTtcblxufSx7XCIuLi8uLi91dGlsXCI6Mzk4LFwiLi4vaGFzaFwiOjMzOCxcIi4uL3JhbmRvbVwiOjM1NSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDIsXCJibi5qc1wiOjQ0fV0sMzQ1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX2JuID0gX2RlcmVxXygnYm4uanMnKTtcblxudmFyIF9ibjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ibik7XG5cbnZhciBfcmFuZG9tID0gX2RlcmVxXygnLi4vcmFuZG9tJyk7XG5cbnZhciBfcmFuZG9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhbmRvbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBFbEdhbWFsIGltcGxlbWVudGF0aW9uXG4gKiBAcmVxdWlyZXMgYm4uanNcbiAqIEByZXF1aXJlcyBjcnlwdG8vcmFuZG9tXG4gKiBAbW9kdWxlIGNyeXB0by9wdWJsaWNfa2V5L2VsZ2FtYWxcbiAqL1xuXG52YXIgemVybyA9IG5ldyBfYm4yLmRlZmF1bHQoMCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgLyoqXG4gICAqIEVsR2FtYWwgRW5jcnlwdGlvbiBmdW5jdGlvblxuICAgKiBAcGFyYW0ge0JOfSBtXG4gICAqIEBwYXJhbSB7Qk59IHBcbiAgICogQHBhcmFtIHtCTn0gZ1xuICAgKiBAcGFyYW0ge0JOfSB5XG4gICAqIEByZXR1cm5zIHt7IGMxOiBCTiwgYzI6IEJOIH19XG4gICAqIEBhc3luY1xuICAgKi9cbiAgZW5jcnlwdDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUobSwgcCwgZywgeSkge1xuICAgICAgdmFyIHJlZHAsIG1yZWQsIGdyZWQsIHlyZWQsIGs7XG4gICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJlZHAgPSBuZXcgX2JuMi5kZWZhdWx0LnJlZChwKTtcbiAgICAgICAgICAgICAgbXJlZCA9IG0udG9SZWQocmVkcCk7XG4gICAgICAgICAgICAgIGdyZWQgPSBnLnRvUmVkKHJlZHApO1xuICAgICAgICAgICAgICB5cmVkID0geS50b1JlZChyZWRwKTtcbiAgICAgICAgICAgICAgLy8gU2VlIFNlY3Rpb24gMTEuNSBoZXJlOiBodHRwczovL2NyeXB0by5zdGFuZm9yZC5lZHUvfmRhYm8vY3J5cHRvYm9vay9Cb25laFNob3VwXzBfNC5wZGZcblxuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgcmV0dXJuIF9yYW5kb20yLmRlZmF1bHQuZ2V0UmFuZG9tQk4oemVybywgcCk7XG5cbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgayA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHtcbiAgICAgICAgICAgICAgICBjMTogZ3JlZC5yZWRQb3coaykuZnJvbVJlZCgpLFxuICAgICAgICAgICAgICAgIGMyOiB5cmVkLnJlZFBvdyhrKS5yZWRNdWwobXJlZCkuZnJvbVJlZCgpXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gZW5jcnlwdChfeCwgX3gyLCBfeDMsIF94NCkge1xuICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5jcnlwdDtcbiAgfSgpLFxuXG4gIC8qKlxuICAgKiBFbEdhbWFsIEVuY3J5cHRpb24gZnVuY3Rpb25cbiAgICogQHBhcmFtIHtCTn0gYzFcbiAgICogQHBhcmFtIHtCTn0gYzJcbiAgICogQHBhcmFtIHtCTn0gcFxuICAgKiBAcGFyYW0ge0JOfSB4XG4gICAqIEByZXR1cm5zIEJOXG4gICAqIEBhc3luY1xuICAgKi9cbiAgZGVjcnlwdDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihjMSwgYzIsIHAsIHgpIHtcbiAgICAgIHZhciByZWRwLCBjMXJlZCwgYzJyZWQ7XG4gICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZWRwID0gbmV3IF9ibjIuZGVmYXVsdC5yZWQocCk7XG4gICAgICAgICAgICAgIGMxcmVkID0gYzEudG9SZWQocmVkcCk7XG4gICAgICAgICAgICAgIGMycmVkID0gYzIudG9SZWQocmVkcCk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBjMXJlZC5yZWRQb3coeCkucmVkSW52bSgpLnJlZE11bChjMnJlZCkuZnJvbVJlZCgpKTtcblxuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gZGVjcnlwdChfeDUsIF94NiwgX3g3LCBfeDgpIHtcbiAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNyeXB0O1xuICB9KClcbn07XG5cbn0se1wiLi4vcmFuZG9tXCI6MzU1LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0MixcImJuLmpzXCI6NDR9XSwzNDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRQcmVmZXJyZWRIYXNoQWxnbyA9IGV4cG9ydHMuZ2VuZXJhdGUgPSBleHBvcnRzLm5vZGVDdXJ2ZXMgPSBleHBvcnRzLndlYkN1cnZlcyA9IGV4cG9ydHMuY3VydmVzID0gdW5kZWZpbmVkO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBnZW5lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKGN1cnZlKSB7XG4gICAgdmFyIGtleVBhaXI7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGN1cnZlID0gbmV3IEN1cnZlKGN1cnZlKTtcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5nZW5LZXlQYWlyKCk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBrZXlQYWlyID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICBvaWQ6IGN1cnZlLm9pZCxcbiAgICAgICAgICAgICAgUTogbmV3IF9ibjIuZGVmYXVsdChrZXlQYWlyLmdldFB1YmxpYygpKSxcbiAgICAgICAgICAgICAgZDogbmV3IF9ibjIuZGVmYXVsdChrZXlQYWlyLmdldFByaXZhdGUoKSksXG4gICAgICAgICAgICAgIGhhc2g6IGN1cnZlLmhhc2gsXG4gICAgICAgICAgICAgIGNpcGhlcjogY3VydmUuY2lwaGVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGUoX3gpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgIEhlbHBlciBmdW5jdGlvbnMgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIHdlYkdlbktleVBhaXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhuYW1lKSB7XG4gICAgdmFyIHdlYkNyeXB0b0tleSwgcHJpdmF0ZUtleSwgcHVibGljS2V5O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDI7XG4gICAgICAgICAgICByZXR1cm4gd2ViQ3J5cHRvLmdlbmVyYXRlS2V5KHsgbmFtZTogXCJFQ0RTQVwiLCBuYW1lZEN1cnZlOiB3ZWJDdXJ2ZXNbbmFtZV0gfSwgdHJ1ZSwgW1wic2lnblwiLCBcInZlcmlmeVwiXSk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB3ZWJDcnlwdG9LZXkgPSBfY29udGV4dDMuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNTtcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uZXhwb3J0S2V5KFwiandrXCIsIHdlYkNyeXB0b0tleS5wcml2YXRlS2V5KTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHByaXZhdGVLZXkgPSBfY29udGV4dDMuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gODtcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uZXhwb3J0S2V5KFwiandrXCIsIHdlYkNyeXB0b0tleS5wdWJsaWNLZXkpO1xuXG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcHVibGljS2V5ID0gX2NvbnRleHQzLnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICBwdWI6IHtcbiAgICAgICAgICAgICAgICB4OiBfdXRpbDIuZGVmYXVsdC5iNjRfdG9fVWludDhBcnJheShwdWJsaWNLZXkueCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgeTogX3V0aWwyLmRlZmF1bHQuYjY0X3RvX1VpbnQ4QXJyYXkocHVibGljS2V5LnksIHRydWUpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByaXY6IF91dGlsMi5kZWZhdWx0LmI2NF90b19VaW50OEFycmF5KHByaXZhdGVLZXkuZCwgdHJ1ZSlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMywgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gd2ViR2VuS2V5UGFpcihfeDIpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxudmFyIG5vZGVHZW5LZXlQYWlyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjQgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQobmFtZSkge1xuICAgIHZhciBlY2RoO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAvLyBOb3RlOiBFQ0RTQSBhbmQgRUNESCBrZXkgZ2VuZXJhdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudFxuICAgICAgICAgICAgZWNkaCA9IG5vZGVDcnlwdG8uY3JlYXRlRUNESChub2RlQ3VydmVzW25hbWVdKTtcbiAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBlY2RoLmdlbmVyYXRlS2V5cygpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoJ3JldHVybicsIHtcbiAgICAgICAgICAgICAgcHViOiBlY2RoLmdldFB1YmxpY0tleSgpLnRvSlNPTigpLmRhdGEsXG4gICAgICAgICAgICAgIHByaXY6IGVjZGguZ2V0UHJpdmF0ZUtleSgpLnRvSlNPTigpLmRhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU0LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBub2RlR2VuS2V5UGFpcihfeDMpIHtcbiAgICByZXR1cm4gX3JlZjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxudmFyIF9ibiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG5cbnZhciBfYm4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYm4pO1xuXG52YXIgX2VsbGlwdGljID0gX2RlcmVxXygnZWxsaXB0aWMnKTtcblxudmFyIF9rZXkgPSBfZGVyZXFfKCcuL2tleScpO1xuXG52YXIgX2tleTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXkpO1xuXG52YXIgX3JhbmRvbSA9IF9kZXJlcV8oJy4uLy4uL3JhbmRvbScpO1xuXG52YXIgX3JhbmRvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yYW5kb20pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vLi4vLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uLy4uLy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX29pZCA9IF9kZXJlcV8oJy4uLy4uLy4uL3R5cGUvb2lkJyk7XG5cbnZhciBfb2lkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29pZCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciB3ZWJDcnlwdG8gPSBfdXRpbDIuZGVmYXVsdC5nZXRXZWJDcnlwdG8oKTsgLy8gT3BlblBHUC5qcyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgRGVjZW50cmFsXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFdyYXBwZXIgb2YgYW4gaW5zdGFuY2Ugb2YgYW4gRWxsaXB0aWMgQ3VydmVcbiAqIEByZXF1aXJlcyBibi5qc1xuICogQHJlcXVpcmVzIGVsbGlwdGljXG4gKiBAcmVxdWlyZXMgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMva2V5XG4gKiBAcmVxdWlyZXMgY3J5cHRvL3JhbmRvbVxuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICogQHJlcXVpcmVzIHR5cGUvb2lkXG4gKiBAbW9kdWxlIGNyeXB0by9wdWJsaWNfa2V5L2VsbGlwdGljL2N1cnZlXG4gKi9cblxudmFyIG5vZGVDcnlwdG8gPSBfdXRpbDIuZGVmYXVsdC5nZXROb2RlQ3J5cHRvKCk7XG5cbnZhciB3ZWJDdXJ2ZXMgPSB7XG4gICdwMjU2JzogJ1AtMjU2JyxcbiAgJ3AzODQnOiAnUC0zODQnLFxuICAncDUyMSc6ICdQLTUyMSdcbn07XG52YXIga25vd25DdXJ2ZXMgPSBub2RlQ3J5cHRvID8gbm9kZUNyeXB0by5nZXRDdXJ2ZXMoKSA6IFtdO1xudmFyIG5vZGVDdXJ2ZXMgPSBub2RlQ3J5cHRvID8ge1xuICBzZWNwMjU2azE6IGtub3duQ3VydmVzLmluY2x1ZGVzKCdzZWNwMjU2azEnKSA/ICdzZWNwMjU2azEnIDogdW5kZWZpbmVkLFxuICBwMjU2OiBrbm93bkN1cnZlcy5pbmNsdWRlcygncHJpbWUyNTZ2MScpID8gJ3ByaW1lMjU2djEnIDogdW5kZWZpbmVkLFxuICBwMzg0OiBrbm93bkN1cnZlcy5pbmNsdWRlcygnc2VjcDM4NHIxJykgPyAnc2VjcDM4NHIxJyA6IHVuZGVmaW5lZCxcbiAgcDUyMToga25vd25DdXJ2ZXMuaW5jbHVkZXMoJ3NlY3A1MjFyMScpID8gJ3NlY3A1MjFyMScgOiB1bmRlZmluZWQsXG4gIGVkMjU1MTk6IGtub3duQ3VydmVzLmluY2x1ZGVzKCdFRDI1NTE5JykgPyAnRUQyNTUxOScgOiB1bmRlZmluZWQsXG4gIGN1cnZlMjU1MTk6IGtub3duQ3VydmVzLmluY2x1ZGVzKCdYMjU1MTknKSA/ICdYMjU1MTknIDogdW5kZWZpbmVkLFxuICBicmFpbnBvb2xQMjU2cjE6IGtub3duQ3VydmVzLmluY2x1ZGVzKCdicmFpbnBvb2xQMjU2cjEnKSA/ICdicmFpbnBvb2xQMjU2cjEnIDogdW5kZWZpbmVkLFxuICBicmFpbnBvb2xQMzg0cjE6IGtub3duQ3VydmVzLmluY2x1ZGVzKCdicmFpbnBvb2xQMzg0cjEnKSA/ICdicmFpbnBvb2xQMzg0cjEnIDogdW5kZWZpbmVkLFxuICBicmFpbnBvb2xQNTEycjE6IGtub3duQ3VydmVzLmluY2x1ZGVzKCdicmFpbnBvb2xQNTEycjEnKSA/ICdicmFpbnBvb2xQNTEycjEnIDogdW5kZWZpbmVkXG59IDoge307XG5cbnZhciBjdXJ2ZXMgPSB7XG4gIHAyNTY6IHtcbiAgICBvaWQ6IFsweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDA3XSxcbiAgICBrZXlUeXBlOiBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZHNhLFxuICAgIGhhc2g6IF9lbnVtczIuZGVmYXVsdC5oYXNoLnNoYTI1NixcbiAgICBjaXBoZXI6IF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMuYWVzMTI4LFxuICAgIG5vZGU6IG5vZGVDdXJ2ZXMucDI1NixcbiAgICB3ZWI6IHdlYkN1cnZlcy5wMjU2LFxuICAgIHBheWxvYWRTaXplOiAzMlxuICB9LFxuICBwMzg0OiB7XG4gICAgb2lkOiBbMHgwNiwgMHgwNSwgMHgyQiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMl0sXG4gICAga2V5VHlwZTogX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lY2RzYSxcbiAgICBoYXNoOiBfZW51bXMyLmRlZmF1bHQuaGFzaC5zaGEzODQsXG4gICAgY2lwaGVyOiBfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLmFlczE5MixcbiAgICBub2RlOiBub2RlQ3VydmVzLnAzODQsXG4gICAgd2ViOiB3ZWJDdXJ2ZXMucDM4NCxcbiAgICBwYXlsb2FkU2l6ZTogNDhcbiAgfSxcbiAgcDUyMToge1xuICAgIG9pZDogWzB4MDYsIDB4MDUsIDB4MkIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjNdLFxuICAgIGtleVR5cGU6IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2EsXG4gICAgaGFzaDogX2VudW1zMi5kZWZhdWx0Lmhhc2guc2hhNTEyLFxuICAgIGNpcGhlcjogX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYy5hZXMyNTYsXG4gICAgbm9kZTogbm9kZUN1cnZlcy5wNTIxLFxuICAgIHdlYjogd2ViQ3VydmVzLnA1MjEsXG4gICAgcGF5bG9hZFNpemU6IDY2XG4gIH0sXG4gIHNlY3AyNTZrMToge1xuICAgIG9pZDogWzB4MDYsIDB4MDUsIDB4MkIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MEFdLFxuICAgIGtleVR5cGU6IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2EsXG4gICAgaGFzaDogX2VudW1zMi5kZWZhdWx0Lmhhc2guc2hhMjU2LFxuICAgIGNpcGhlcjogX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYy5hZXMxMjgsXG4gICAgbm9kZTogbm9kZUN1cnZlcy5zZWNwMjU2azFcbiAgfSxcbiAgZWQyNTUxOToge1xuICAgIG9pZDogWzB4MDYsIDB4MDksIDB4MkIsIDB4MDYsIDB4MDEsIDB4MDQsIDB4MDEsIDB4REEsIDB4NDcsIDB4MEYsIDB4MDFdLFxuICAgIGtleVR5cGU6IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWRkc2EsXG4gICAgaGFzaDogX2VudW1zMi5kZWZhdWx0Lmhhc2guc2hhNTEyLFxuICAgIG5vZGU6IGZhbHNlIC8vIG5vZGVDdXJ2ZXMuZWQyNTUxOSBUT0RPXG4gIH0sXG4gIGN1cnZlMjU1MTk6IHtcbiAgICBvaWQ6IFsweDA2LCAweDBBLCAweDJCLCAweDA2LCAweDAxLCAweDA0LCAweDAxLCAweDk3LCAweDU1LCAweDAxLCAweDA1LCAweDAxXSxcbiAgICBrZXlUeXBlOiBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZHNhLFxuICAgIGhhc2g6IF9lbnVtczIuZGVmYXVsdC5oYXNoLnNoYTI1NixcbiAgICBjaXBoZXI6IF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMuYWVzMTI4LFxuICAgIG5vZGU6IGZhbHNlIC8vIG5vZGVDdXJ2ZXMuY3VydmUyNTUxOSBUT0RPXG4gIH0sXG4gIGJyYWlucG9vbFAyNTZyMToge1xuICAgIG9pZDogWzB4MDYsIDB4MDksIDB4MkIsIDB4MjQsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MDEsIDB4MDEsIDB4MDddLFxuICAgIGtleVR5cGU6IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2EsXG4gICAgaGFzaDogX2VudW1zMi5kZWZhdWx0Lmhhc2guc2hhMjU2LFxuICAgIGNpcGhlcjogX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYy5hZXMxMjgsXG4gICAgbm9kZTogbm9kZUN1cnZlcy5icmFpbnBvb2xQMjU2cjFcbiAgfSxcbiAgYnJhaW5wb29sUDM4NHIxOiB7XG4gICAgb2lkOiBbMHgwNiwgMHgwOSwgMHgyQiwgMHgyNCwgMHgwMywgMHgwMywgMHgwMiwgMHgwOCwgMHgwMSwgMHgwMSwgMHgwQl0sXG4gICAga2V5VHlwZTogX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lY2RzYSxcbiAgICBoYXNoOiBfZW51bXMyLmRlZmF1bHQuaGFzaC5zaGEzODQsXG4gICAgY2lwaGVyOiBfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLmFlczE5MixcbiAgICBub2RlOiBub2RlQ3VydmVzLmJyYWlucG9vbFAzODRyMVxuICB9LFxuICBicmFpbnBvb2xQNTEycjE6IHtcbiAgICBvaWQ6IFsweDA2LCAweDA5LCAweDJCLCAweDI0LCAweDAzLCAweDAzLCAweDAyLCAweDA4LCAweDAxLCAweDAxLCAweDBEXSxcbiAgICBrZXlUeXBlOiBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZHNhLFxuICAgIGhhc2g6IF9lbnVtczIuZGVmYXVsdC5oYXNoLnNoYTUxMixcbiAgICBjaXBoZXI6IF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMuYWVzMjU2LFxuICAgIG5vZGU6IG5vZGVDdXJ2ZXMuYnJhaW5wb29sUDUxMnIxXG4gIH1cbn07XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEN1cnZlKG9pZF9vcl9uYW1lLCBwYXJhbXMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoX3V0aWwyLmRlZmF1bHQuaXNBcnJheShvaWRfb3JfbmFtZSkgfHwgX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KG9pZF9vcl9uYW1lKSkge1xuICAgICAgLy8gYnkgb2lkIGJ5dGUgYXJyYXlcbiAgICAgIG9pZF9vcl9uYW1lID0gbmV3IF9vaWQyLmRlZmF1bHQob2lkX29yX25hbWUpO1xuICAgIH1cbiAgICBpZiAob2lkX29yX25hbWUgaW5zdGFuY2VvZiBfb2lkMi5kZWZhdWx0KSB7XG4gICAgICAvLyBieSBjdXJ2ZSBPSURcbiAgICAgIG9pZF9vcl9uYW1lID0gb2lkX29yX25hbWUuZ2V0TmFtZSgpO1xuICAgIH1cbiAgICAvLyBieSBjdXJ2ZSBuYW1lIG9yIG9pZCBzdHJpbmdcbiAgICB0aGlzLm5hbWUgPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmN1cnZlLCBvaWRfb3JfbmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IHZhbGlkIGN1cnZlJyk7XG4gIH1cbiAgcGFyYW1zID0gcGFyYW1zIHx8IGN1cnZlc1t0aGlzLm5hbWVdO1xuXG4gIHRoaXMua2V5VHlwZSA9IHBhcmFtcy5rZXlUeXBlO1xuICBzd2l0Y2ggKHRoaXMua2V5VHlwZSkge1xuICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lY2RzYTpcbiAgICAgIHRoaXMuY3VydmUgPSBuZXcgX2VsbGlwdGljLmVjKHRoaXMubmFtZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWRkc2E6XG4gICAgICB0aGlzLmN1cnZlID0gbmV3IF9lbGxpcHRpYy5lZGRzYSh0aGlzLm5hbWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbGxpcHRpYyBrZXkgdHlwZTsnKTtcbiAgfVxuXG4gIHRoaXMub2lkID0gcGFyYW1zLm9pZDtcbiAgdGhpcy5oYXNoID0gcGFyYW1zLmhhc2g7XG4gIHRoaXMuY2lwaGVyID0gcGFyYW1zLmNpcGhlcjtcbiAgdGhpcy5ub2RlID0gcGFyYW1zLm5vZGUgJiYgY3VydmVzW3RoaXMubmFtZV07XG4gIHRoaXMud2ViID0gcGFyYW1zLndlYiAmJiBjdXJ2ZXNbdGhpcy5uYW1lXTtcbiAgdGhpcy5wYXlsb2FkU2l6ZSA9IHBhcmFtcy5wYXlsb2FkU2l6ZTtcbn1cblxuQ3VydmUucHJvdG90eXBlLmtleUZyb21Qcml2YXRlID0gZnVuY3Rpb24gKHByaXYpIHtcbiAgLy8gTm90IGZvciBlZDI1NTE5XG4gIHJldHVybiBuZXcgX2tleTIuZGVmYXVsdCh0aGlzLCB7IHByaXY6IHByaXYgfSk7XG59O1xuXG5DdXJ2ZS5wcm90b3R5cGUua2V5RnJvbVNlY3JldCA9IGZ1bmN0aW9uIChzZWNyZXQpIHtcbiAgLy8gT25seSBmb3IgZWQyNTUxOVxuICByZXR1cm4gbmV3IF9rZXkyLmRlZmF1bHQodGhpcywgeyBzZWNyZXQ6IHNlY3JldCB9KTtcbn07XG5cbkN1cnZlLnByb3RvdHlwZS5rZXlGcm9tUHVibGljID0gZnVuY3Rpb24gKHB1Yikge1xuICByZXR1cm4gbmV3IF9rZXkyLmRlZmF1bHQodGhpcywgeyBwdWI6IHB1YiB9KTtcbn07XG5cbkN1cnZlLnByb3RvdHlwZS5nZW5LZXlQYWlyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gIHZhciBrZXlQYWlyLCByLCBjb21wYWN0O1xuICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICB3aGlsZSAoMSkge1xuICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAga2V5UGFpciA9IHZvaWQgMDtcblxuICAgICAgICAgIGlmICghKHRoaXMud2ViICYmIF91dGlsMi5kZWZhdWx0LmdldFdlYkNyeXB0bygpKSkge1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NvbnRleHQucHJldiA9IDI7XG4gICAgICAgICAgX2NvbnRleHQubmV4dCA9IDU7XG4gICAgICAgICAgcmV0dXJuIHdlYkdlbktleVBhaXIodGhpcy5uYW1lKTtcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAga2V5UGFpciA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgX2NvbnRleHQubmV4dCA9IDExO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBfY29udGV4dC5wcmV2ID0gODtcbiAgICAgICAgICBfY29udGV4dC50MCA9IF9jb250ZXh0WydjYXRjaCddKDIpO1xuXG4gICAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWcoXCJCcm93c2VyIGRpZCBub3Qgc3VwcG9ydCBzaWduaW5nOiBcIiArIF9jb250ZXh0LnQwLm1lc3NhZ2UpO1xuXG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE3O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgaWYgKCEodGhpcy5ub2RlICYmIF91dGlsMi5kZWZhdWx0LmdldE5vZGVDcnlwdG8oKSkpIHtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNjtcbiAgICAgICAgICByZXR1cm4gbm9kZUdlbktleVBhaXIodGhpcy5uYW1lKTtcblxuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIGtleVBhaXIgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgaWYgKCEoIWtleVBhaXIgfHwgIWtleVBhaXIucHJpdikpIHtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jb250ZXh0LnQxID0gdGhpcy5jdXJ2ZTtcbiAgICAgICAgICBfY29udGV4dC50MiA9IF91dGlsMi5kZWZhdWx0O1xuICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyMjtcbiAgICAgICAgICByZXR1cm4gX3JhbmRvbTIuZGVmYXVsdC5nZXRSYW5kb21CeXRlcygzMik7XG5cbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBfY29udGV4dC50MyA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgX2NvbnRleHQudDQgPSBfY29udGV4dC50Mi5VaW50OEFycmF5X3RvX3N0ci5jYWxsKF9jb250ZXh0LnQyLCBfY29udGV4dC50Myk7XG4gICAgICAgICAgX2NvbnRleHQudDUgPSB7XG4gICAgICAgICAgICBlbnRyb3B5OiBfY29udGV4dC50NFxuICAgICAgICAgIH07XG4gICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI3O1xuICAgICAgICAgIHJldHVybiBfY29udGV4dC50MS5nZW5LZXlQYWlyLmNhbGwoX2NvbnRleHQudDEsIF9jb250ZXh0LnQ1KTtcblxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHIgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgIGNvbXBhY3QgPSB0aGlzLmN1cnZlLmN1cnZlLnR5cGUgPT09ICdlZHdhcmRzJyB8fCB0aGlzLmN1cnZlLmN1cnZlLnR5cGUgPT09ICdtb250JztcblxuICAgICAgICAgIGlmICh0aGlzLmtleVR5cGUgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWRkc2EpIHtcbiAgICAgICAgICAgIGtleVBhaXIgPSB7IHNlY3JldDogci5nZXRTZWNyZXQoKSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlQYWlyID0geyBwdWI6IHIuZ2V0UHVibGljKCdhcnJheScsIGNvbXBhY3QpLCBwcml2OiByLmdldFByaXZhdGUoKS50b0FycmF5KCkgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBuZXcgX2tleTIuZGVmYXVsdCh0aGlzLCBrZXlQYWlyKSk7XG5cbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgX2NhbGxlZSwgdGhpcywgW1syLCA4XV0pO1xufSkpO1xuXG5mdW5jdGlvbiBnZXRQcmVmZXJyZWRIYXNoQWxnbyhvaWQpIHtcbiAgcmV0dXJuIGN1cnZlc1tfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmN1cnZlLCBvaWQudG9IZXgoKSldLmhhc2g7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEN1cnZlO1xuZXhwb3J0cy5jdXJ2ZXMgPSBjdXJ2ZXM7XG5leHBvcnRzLndlYkN1cnZlcyA9IHdlYkN1cnZlcztcbmV4cG9ydHMubm9kZUN1cnZlcyA9IG5vZGVDdXJ2ZXM7XG5leHBvcnRzLmdlbmVyYXRlID0gZ2VuZXJhdGU7XG5leHBvcnRzLmdldFByZWZlcnJlZEhhc2hBbGdvID0gZ2V0UHJlZmVycmVkSGFzaEFsZ287XG5cbn0se1wiLi4vLi4vLi4vZW51bXNcIjozNTksXCIuLi8uLi8uLi90eXBlL29pZFwiOjM5NixcIi4uLy4uLy4uL3V0aWxcIjozOTgsXCIuLi8uLi9yYW5kb21cIjozNTUsXCIuL2tleVwiOjM1MSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDIsXCJibi5qc1wiOjQ0LFwiZWxsaXB0aWNcIjoyNjd9XSwzNDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbi8qKlxuICogRW5jcnlwdCBhbmQgd3JhcCBhIHNlc3Npb24ga2V5XG4gKlxuICogQHBhcmFtICB7bW9kdWxlOnR5cGUvb2lkfSAgICAgICAgb2lkICAgICAgICAgIEVsbGlwdGljIGN1cnZlIG9iamVjdCBpZGVudGlmaWVyXG4gKiBAcGFyYW0gIHttb2R1bGU6ZW51bXMuc3ltbWV0cmljfSBjaXBoZXJfYWxnbyAgU3ltbWV0cmljIGNpcGhlciB0byB1c2VcbiAqIEBwYXJhbSAge21vZHVsZTplbnVtcy5oYXNofSAgICAgIGhhc2hfYWxnbyAgICBIYXNoIGFsZ29yaXRobSB0byB1c2VcbiAqIEBwYXJhbSAge21vZHVsZTp0eXBlL21waX0gICAgICAgIG0gICAgICAgICAgICBWYWx1ZSBkZXJpdmVkIGZyb20gc2Vzc2lvbiBrZXkgKFJGQyA2NjM3KVxuICogQHBhcmFtICB7VWludDhBcnJheX0gICAgICAgICAgICAgUSAgICAgICAgICAgIFJlY2lwaWVudCBwdWJsaWMga2V5XG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCAgUmVjaXBpZW50IGZpbmdlcnByaW50XG4gKiBAcmV0dXJucyB7e1Y6IEJOLCBDOiBCTn19ICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBlcGhlbWVyYWwga2V5IGFuZCBlbmNvZGVkIHNlc3Npb24ga2V5XG4gKiBAYXN5bmNcbiAqL1xudmFyIGVuY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUob2lkLCBjaXBoZXJfYWxnbywgaGFzaF9hbGdvLCBtLCBRLCBmaW5nZXJwcmludCkge1xuICAgIHZhciBjdXJ2ZSwgcGFyYW0sIHYsIFMsIFosIEM7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY3VydmUgPSBuZXcgX2N1cnZlczIuZGVmYXVsdChvaWQpO1xuICAgICAgICAgICAgcGFyYW0gPSBidWlsZEVjZGhQYXJhbShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZGgsIG9pZCwgY2lwaGVyX2FsZ28sIGhhc2hfYWxnbywgZmluZ2VycHJpbnQpO1xuXG4gICAgICAgICAgICBjaXBoZXJfYWxnbyA9IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMsIGNpcGhlcl9hbGdvKTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuIGN1cnZlLmdlbktleVBhaXIoKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHYgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgICAgICBRID0gY3VydmUua2V5RnJvbVB1YmxpYyhRKTtcbiAgICAgICAgICAgIFMgPSB2LmRlcml2ZShRKTtcbiAgICAgICAgICAgIFogPSBrZGYoaGFzaF9hbGdvLCBTLCBfY2lwaGVyMi5kZWZhdWx0W2NpcGhlcl9hbGdvXS5rZXlTaXplLCBwYXJhbSk7XG4gICAgICAgICAgICBDID0gX2Flc19rdzIuZGVmYXVsdC53cmFwKFosIG0udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB7XG4gICAgICAgICAgICAgIFY6IG5ldyBfYm4yLmRlZmF1bHQodi5nZXRQdWJsaWMoKSksXG4gICAgICAgICAgICAgIEM6IENcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGVuY3J5cHQoX3gsIF94MiwgX3gzLCBfeDQsIF94NSwgX3g2KSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBEZWNyeXB0IGFuZCB1bndyYXAgdGhlIHZhbHVlIGRlcml2ZWQgZnJvbSBzZXNzaW9uIGtleVxuICpcbiAqIEBwYXJhbSAge21vZHVsZTp0eXBlL29pZH0gICAgICAgIG9pZCAgICAgICAgICBFbGxpcHRpYyBjdXJ2ZSBvYmplY3QgaWRlbnRpZmllclxuICogQHBhcmFtICB7bW9kdWxlOmVudW1zLnN5bW1ldHJpY30gY2lwaGVyX2FsZ28gIFN5bW1ldHJpYyBjaXBoZXIgdG8gdXNlXG4gKiBAcGFyYW0gIHttb2R1bGU6ZW51bXMuaGFzaH0gICAgICBoYXNoX2FsZ28gICAgSGFzaCBhbGdvcml0aG0gdG8gdXNlXG4gKiBAcGFyYW0gIHtCTn0gICAgICAgICAgICAgICAgICAgICBWICAgICAgICAgICAgUHVibGljIHBhcnQgb2YgZXBoZW1lcmFsIGtleVxuICogQHBhcmFtICB7VWludDhBcnJheX0gICAgICAgICAgICAgQyAgICAgICAgICAgIEVuY3J5cHRlZCBhbmQgd3JhcHBlZCB2YWx1ZSBkZXJpdmVkIGZyb20gc2Vzc2lvbiBrZXlcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9ICAgICAgICAgICAgIGQgICAgICAgICAgICBSZWNpcGllbnQgcHJpdmF0ZSBrZXlcbiAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgICAgICAgICAgIGZpbmdlcnByaW50ICBSZWNpcGllbnQgZmluZ2VycHJpbnRcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBkZXJpdmVkIGZyb20gc2Vzc2lvblxuICogQGFzeW5jXG4gKi9cblxuXG52YXIgZGVjcnlwdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKG9pZCwgY2lwaGVyX2FsZ28sIGhhc2hfYWxnbywgViwgQywgZCwgZmluZ2VycHJpbnQpIHtcbiAgICB2YXIgY3VydmUsIHBhcmFtLCBTLCBaO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjdXJ2ZSA9IG5ldyBfY3VydmVzMi5kZWZhdWx0KG9pZCk7XG4gICAgICAgICAgICBwYXJhbSA9IGJ1aWxkRWNkaFBhcmFtKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaCwgb2lkLCBjaXBoZXJfYWxnbywgaGFzaF9hbGdvLCBmaW5nZXJwcmludCk7XG5cbiAgICAgICAgICAgIGNpcGhlcl9hbGdvID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgY2lwaGVyX2FsZ28pO1xuICAgICAgICAgICAgViA9IGN1cnZlLmtleUZyb21QdWJsaWMoVik7XG4gICAgICAgICAgICBkID0gY3VydmUua2V5RnJvbVByaXZhdGUoZCk7XG4gICAgICAgICAgICBTID0gZC5kZXJpdmUoVik7XG4gICAgICAgICAgICBaID0ga2RmKGhhc2hfYWxnbywgUywgX2NpcGhlcjIuZGVmYXVsdFtjaXBoZXJfYWxnb10ua2V5U2l6ZSwgcGFyYW0pO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIG5ldyBfYm4yLmRlZmF1bHQoX2Flc19rdzIuZGVmYXVsdC51bndyYXAoWiwgQykpKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gZGVjcnlwdChfeDcsIF94OCwgX3g5LCBfeDEwLCBfeDExLCBfeDEyLCBfeDEzKSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBfYm4gPSBfZGVyZXFfKCdibi5qcycpO1xuXG52YXIgX2JuMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JuKTtcblxudmFyIF9jdXJ2ZXMgPSBfZGVyZXFfKCcuL2N1cnZlcycpO1xuXG52YXIgX2N1cnZlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jdXJ2ZXMpO1xuXG52YXIgX2Flc19rdyA9IF9kZXJlcV8oJy4uLy4uL2Flc19rdycpO1xuXG52YXIgX2Flc19rdzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hZXNfa3cpO1xuXG52YXIgX2NpcGhlciA9IF9kZXJlcV8oJy4uLy4uL2NpcGhlcicpO1xuXG52YXIgX2NpcGhlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaXBoZXIpO1xuXG52YXIgX2hhc2ggPSBfZGVyZXFfKCcuLi8uLi9oYXNoJyk7XG5cbnZhciBfaGFzaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYXNoKTtcblxudmFyIF9rZGZfcGFyYW1zID0gX2RlcmVxXygnLi4vLi4vLi4vdHlwZS9rZGZfcGFyYW1zJyk7XG5cbnZhciBfa2RmX3BhcmFtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZGZfcGFyYW1zKTtcblxudmFyIF9lbnVtcyA9IF9kZXJlcV8oJy4uLy4uLy4uL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi8uLi8uLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gQnVpbGQgUGFyYW0gZm9yIEVDREggYWxnb3JpdGhtIChSRkMgNjYzNylcbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IERlY2VudHJhbFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBLZXkgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBmb3IgUkZDIDY2MzcgRUNESFxuICogQHJlcXVpcmVzIGNyeXB0by9wdWJsaWNfa2V5L2VsbGlwdGljL2N1cnZlXG4gKiBAcmVxdWlyZXMgY3J5cHRvL2Flc19rd1xuICogQHJlcXVpcmVzIGNyeXB0by9jaXBoZXJcbiAqIEByZXF1aXJlcyBjcnlwdG8vaGFzaFxuICogQHJlcXVpcmVzIHR5cGUva2RmX3BhcmFtc1xuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICogQG1vZHVsZSBjcnlwdG8vcHVibGljX2tleS9lbGxpcHRpYy9lY2RoXG4gKi9cblxuZnVuY3Rpb24gYnVpbGRFY2RoUGFyYW0ocHVibGljX2FsZ28sIG9pZCwgY2lwaGVyX2FsZ28sIGhhc2hfYWxnbywgZmluZ2VycHJpbnQpIHtcbiAgdmFyIGtkZl9wYXJhbXMgPSBuZXcgX2tkZl9wYXJhbXMyLmRlZmF1bHQoW2hhc2hfYWxnbywgY2lwaGVyX2FsZ29dKTtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW29pZC53cml0ZSgpLCBuZXcgVWludDhBcnJheShbcHVibGljX2FsZ29dKSwga2RmX3BhcmFtcy53cml0ZSgpLCBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShcIkFub255bW91cyBTZW5kZXIgICAgXCIpLCBmaW5nZXJwcmludC5zdWJhcnJheSgwLCAyMCldKTtcbn1cblxuLy8gS2V5IERlcml2YXRpb24gRnVuY3Rpb24gKFJGQyA2NjM3KVxuZnVuY3Rpb24ga2RmKGhhc2hfYWxnbywgWCwgbGVuZ3RoLCBwYXJhbSkge1xuICByZXR1cm4gX2hhc2gyLmRlZmF1bHQuZGlnZXN0KGhhc2hfYWxnbywgX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDFdKSwgbmV3IFVpbnQ4QXJyYXkoWCksIHBhcmFtXSkpLnN1YmFycmF5KDAsIGxlbmd0aCk7XG59ZXhwb3J0cy5kZWZhdWx0ID0geyBlbmNyeXB0OiBlbmNyeXB0LCBkZWNyeXB0OiBkZWNyeXB0IH07XG5cbn0se1wiLi4vLi4vLi4vZW51bXNcIjozNTksXCIuLi8uLi8uLi90eXBlL2tkZl9wYXJhbXNcIjozOTMsXCIuLi8uLi8uLi91dGlsXCI6Mzk4LFwiLi4vLi4vYWVzX2t3XCI6MzI2LFwiLi4vLi4vY2lwaGVyXCI6MzMyLFwiLi4vLi4vaGFzaFwiOjMzOCxcIi4vY3VydmVzXCI6MzQ2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0MixcImJuLmpzXCI6NDR9XSwzNDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbi8qKlxuICogU2lnbiBhIG1lc3NhZ2UgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtICB7bW9kdWxlOnR5cGUvb2lkfSAgIG9pZCAgICAgICBFbGxpcHRpYyBjdXJ2ZSBvYmplY3QgaWRlbnRpZmllclxuICogQHBhcmFtICB7bW9kdWxlOmVudW1zLmhhc2h9IGhhc2hfYWxnbyBIYXNoIGFsZ29yaXRobSB1c2VkIHRvIHNpZ25cbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9ICAgICAgICBtICAgICAgICAgTWVzc2FnZSB0byBzaWduXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSAgICAgICAgZCAgICAgICAgIFByaXZhdGUga2V5IHVzZWQgdG8gc2lnbiB0aGUgbWVzc2FnZVxuICogQHJldHVybnMge3tyOiBVaW50OEFycmF5LFxuICogICAgICAgICAgICBzOiBVaW50OEFycmF5fX0gICAgICAgICAgICBTaWduYXR1cmUgb2YgdGhlIG1lc3NhZ2VcbiAqIEBhc3luY1xuICovXG52YXIgc2lnbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShvaWQsIGhhc2hfYWxnbywgbSwgZCkge1xuICAgIHZhciBjdXJ2ZSwga2V5LCBzaWduYXR1cmU7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY3VydmUgPSBuZXcgX2N1cnZlczIuZGVmYXVsdChvaWQpO1xuICAgICAgICAgICAga2V5ID0gY3VydmUua2V5RnJvbVByaXZhdGUoZCk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDtcbiAgICAgICAgICAgIHJldHVybiBrZXkuc2lnbihtLCBoYXNoX2FsZ28pO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgc2lnbmF0dXJlID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHsgcjogc2lnbmF0dXJlLnIudG9BcnJheUxpa2UoVWludDhBcnJheSksXG4gICAgICAgICAgICAgIHM6IHNpZ25hdHVyZS5zLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXkpIH0pO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gc2lnbihfeCwgX3gyLCBfeDMsIF94NCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVmVyaWZpZXMgaWYgYSBzaWduYXR1cmUgaXMgdmFsaWQgZm9yIGEgbWVzc2FnZVxuICogQHBhcmFtICB7bW9kdWxlOnR5cGUvb2lkfSAgIG9pZCAgICAgICBFbGxpcHRpYyBjdXJ2ZSBvYmplY3QgaWRlbnRpZmllclxuICogQHBhcmFtICB7bW9kdWxlOmVudW1zLmhhc2h9IGhhc2hfYWxnbyBIYXNoIGFsZ29yaXRobSB1c2VkIGluIHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSAge3tyOiBVaW50OEFycmF5LFxuICAgICAgICAgICAgIHM6IFVpbnQ4QXJyYXl9fSAgIHNpZ25hdHVyZSBTaWduYXR1cmUgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSAgICAgICAgbSAgICAgICAgIE1lc3NhZ2UgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSAgICAgICAgUSAgICAgICAgIFB1YmxpYyBrZXkgdXNlZCB0byB2ZXJpZnkgdGhlIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFzeW5jXG4gKi9cbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IERlY2VudHJhbFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRhdGlvbiBvZiBFQ0RTQSBmb2xsb3dpbmcgUkZDNjYzNyBmb3IgT3BlbnBncGpzXG4gKiBAcmVxdWlyZXMgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvY3VydmVcbiAqIEBtb2R1bGUgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvZWNkc2FcbiAqL1xuXG52YXIgdmVyaWZ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIob2lkLCBoYXNoX2FsZ28sIHNpZ25hdHVyZSwgbSwgUSkge1xuICAgIHZhciBjdXJ2ZSwga2V5O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjdXJ2ZSA9IG5ldyBfY3VydmVzMi5kZWZhdWx0KG9pZCk7XG4gICAgICAgICAgICBrZXkgPSBjdXJ2ZS5rZXlGcm9tUHVibGljKFEpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIGtleS52ZXJpZnkobSwgc2lnbmF0dXJlLCBoYXNoX2FsZ28pKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KF94NSwgX3g2LCBfeDcsIF94OCwgX3g5KSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBfY3VydmVzID0gX2RlcmVxXygnLi9jdXJ2ZXMnKTtcblxudmFyIF9jdXJ2ZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3VydmVzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0geyBzaWduOiBzaWduLCB2ZXJpZnk6IHZlcmlmeSB9O1xuXG59LHtcIi4vY3VydmVzXCI6MzQ2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM0OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVnZW5lcmF0b3IgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yJyk7XG5cbnZhciBfcmVnZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3InKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jVG9HZW5lcmF0b3IyKTtcblxuLyoqXG4gKiBTaWduIGEgbWVzc2FnZSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKiBAcGFyYW0gIHttb2R1bGU6dHlwZS9vaWR9ICAgb2lkICAgICAgIEVsbGlwdGljIGN1cnZlIG9iamVjdCBpZGVudGlmaWVyXG4gKiBAcGFyYW0gIHttb2R1bGU6ZW51bXMuaGFzaH0gaGFzaF9hbGdvIEhhc2ggYWxnb3JpdGhtIHVzZWQgdG8gc2lnblxuICogQHBhcmFtICB7VWludDhBcnJheX0gICAgICAgIG0gICAgICAgICBNZXNzYWdlIHRvIHNpZ25cbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9ICAgICAgICBkICAgICAgICAgUHJpdmF0ZSBrZXkgdXNlZCB0byBzaWduXG4gKiBAcmV0dXJucyB7e1I6IFVpbnQ4QXJyYXksXG4gKiAgICAgICAgICAgIFM6IFVpbnQ4QXJyYXl9fSAgICAgICAgICAgIFNpZ25hdHVyZSBvZiB0aGUgbWVzc2FnZVxuICogQGFzeW5jXG4gKi9cbnZhciBzaWduID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKG9pZCwgaGFzaF9hbGdvLCBtLCBkKSB7XG4gICAgdmFyIGN1cnZlLCBrZXksIHNpZ25hdHVyZTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjdXJ2ZSA9IG5ldyBfY3VydmVzMi5kZWZhdWx0KG9pZCk7XG4gICAgICAgICAgICBrZXkgPSBjdXJ2ZS5rZXlGcm9tU2VjcmV0KGQpO1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4ga2V5LnNpZ24obSwgaGFzaF9hbGdvKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB7IFI6IG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZS5SZW5jb2RlZCgpKSxcbiAgICAgICAgICAgICAgUzogbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlLlNlbmNvZGVkKCkpIH0pO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gc2lnbihfeCwgX3gyLCBfeDMsIF94NCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVmVyaWZpZXMgaWYgYSBzaWduYXR1cmUgaXMgdmFsaWQgZm9yIGEgbWVzc2FnZVxuICogQHBhcmFtICB7bW9kdWxlOnR5cGUvb2lkfSAgIG9pZCAgICAgICBFbGxpcHRpYyBjdXJ2ZSBvYmplY3QgaWRlbnRpZmllclxuICogQHBhcmFtICB7bW9kdWxlOmVudW1zLmhhc2h9IGhhc2hfYWxnbyBIYXNoIGFsZ29yaXRobSB1c2VkIGluIHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSAge3tSOiBVaW50OEFycmF5LFxuICAgICAgICAgICAgIFM6IFVpbnQ4QXJyYXl9fSAgIHNpZ25hdHVyZSBTaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBtZXNzYWdlXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSAgICAgICAgbSAgICAgICAgIE1lc3NhZ2UgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSAgICAgICAgUSAgICAgICAgIFB1YmxpYyBrZXkgdXNlZCB0byB2ZXJpZnkgdGhlIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFzeW5jXG4gKi9cbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxOCBQcm90b24gVGVjaG5vbG9naWVzIEFHXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudGF0aW9uIG9mIEVkRFNBIGZvbGxvd2luZyBSRkM0ODgwYmlzLTAzIGZvciBPcGVuUEdQXG4gKiBAcmVxdWlyZXMgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvY3VydmVcbiAqIEBtb2R1bGUgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvZWRkc2FcbiAqL1xuXG52YXIgdmVyaWZ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIob2lkLCBoYXNoX2FsZ28sIHNpZ25hdHVyZSwgbSwgUSkge1xuICAgIHZhciBjdXJ2ZSwga2V5O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjdXJ2ZSA9IG5ldyBfY3VydmVzMi5kZWZhdWx0KG9pZCk7XG4gICAgICAgICAgICBrZXkgPSBjdXJ2ZS5rZXlGcm9tUHVibGljKFEpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIGtleS52ZXJpZnkobSwgc2lnbmF0dXJlLCBoYXNoX2FsZ28pKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KF94NSwgX3g2LCBfeDcsIF94OCwgX3g5KSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBfY3VydmVzID0gX2RlcmVxXygnLi9jdXJ2ZXMnKTtcblxudmFyIF9jdXJ2ZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3VydmVzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0geyBzaWduOiBzaWduLCB2ZXJpZnk6IHZlcmlmeSB9O1xuXG59LHtcIi4vY3VydmVzXCI6MzQ2LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM1MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3VydmVzID0gX2RlcmVxXygnLi9jdXJ2ZXMnKTtcblxudmFyIF9jdXJ2ZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3VydmVzKTtcblxudmFyIF9lY2RzYSA9IF9kZXJlcV8oJy4vZWNkc2EnKTtcblxudmFyIF9lY2RzYTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lY2RzYSk7XG5cbnZhciBfZWRkc2EgPSBfZGVyZXFfKCcuL2VkZHNhJyk7XG5cbnZhciBfZWRkc2EyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWRkc2EpO1xuXG52YXIgX2VjZGggPSBfZGVyZXFfKCcuL2VjZGgnKTtcblxudmFyIF9lY2RoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VjZGgpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBPcGVuUEdQLmpzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBEZWNlbnRyYWxcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgRnVuY3Rpb25zIHRvIGFjY2VzcyBFbGxpcHRpYyBDdXJ2ZSBDcnlwdG9ncmFwaHlcbiAqIEBzZWUgbW9kdWxlOmNyeXB0by9wdWJsaWNfa2V5L2VsbGlwdGljL2N1cnZlXG4gKiBAc2VlIG1vZHVsZTpjcnlwdG8vcHVibGljX2tleS9lbGxpcHRpYy9lY2RoXG4gKiBAc2VlIG1vZHVsZTpjcnlwdG8vcHVibGljX2tleS9lbGxpcHRpYy9lY2RzYVxuICogQHNlZSBtb2R1bGU6Y3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvZWRkc2FcbiAqIEBtb2R1bGUgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWNcbiAqL1xuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIEN1cnZlOiBfY3VydmVzMi5kZWZhdWx0LCBlY2RoOiBfZWNkaDIuZGVmYXVsdCwgZWNkc2E6IF9lY2RzYTIuZGVmYXVsdCwgZWRkc2E6IF9lZGRzYTIuZGVmYXVsdCwgZ2VuZXJhdGU6IF9jdXJ2ZXMuZ2VuZXJhdGUsIGdldFByZWZlcnJlZEhhc2hBbGdvOiBfY3VydmVzLmdldFByZWZlcnJlZEhhc2hBbGdvXG59O1xuXG59LHtcIi4vY3VydmVzXCI6MzQ2LFwiLi9lY2RoXCI6MzQ3LFwiLi9lY2RzYVwiOjM0OCxcIi4vZWRkc2FcIjozNDl9XSwzNTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICBIZWxwZXIgZnVuY3Rpb25zICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbnZhciB3ZWJTaWduID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoY3VydmUsIGhhc2hfYWxnbywgbWVzc2FnZSwga2V5UGFpcikge1xuICAgIHZhciBsZW4sIGtleSwgc2lnbmF0dXJlO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsZW4gPSBjdXJ2ZS5wYXlsb2FkU2l6ZTtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uaW1wb3J0S2V5KFwiandrXCIsIHtcbiAgICAgICAgICAgICAgXCJrdHlcIjogXCJFQ1wiLFxuICAgICAgICAgICAgICBcImNydlwiOiBfY3VydmVzLndlYkN1cnZlc1tjdXJ2ZS5uYW1lXSxcbiAgICAgICAgICAgICAgXCJ4XCI6IF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fYjY0KG5ldyBVaW50OEFycmF5KGtleVBhaXIuZ2V0UHVibGljKCkuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgbGVuKSksIHRydWUpLFxuICAgICAgICAgICAgICBcInlcIjogX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19iNjQobmV3IFVpbnQ4QXJyYXkoa2V5UGFpci5nZXRQdWJsaWMoKS5nZXRZKCkudG9BcnJheSgnYmUnLCBsZW4pKSwgdHJ1ZSksXG4gICAgICAgICAgICAgIFwiZFwiOiBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX2I2NChuZXcgVWludDhBcnJheShrZXlQYWlyLmdldFByaXZhdGUoKS50b0FycmF5KCdiZScsIGxlbikpLCB0cnVlKSxcbiAgICAgICAgICAgICAgXCJ1c2VcIjogXCJzaWdcIixcbiAgICAgICAgICAgICAgXCJraWRcIjogXCJFQ0RTQSBQcml2YXRlIEtleVwiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBcIkVDRFNBXCIsXG4gICAgICAgICAgICAgIFwibmFtZWRDdXJ2ZVwiOiBfY3VydmVzLndlYkN1cnZlc1tjdXJ2ZS5uYW1lXSxcbiAgICAgICAgICAgICAgXCJoYXNoXCI6IHsgbmFtZTogX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LndlYkhhc2gsIGN1cnZlLmhhc2gpIH1cbiAgICAgICAgICAgIH0sIGZhbHNlLCBbXCJzaWduXCJdKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGtleSA9IF9jb250ZXh0My5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gVWludDhBcnJheTtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNztcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uc2lnbih7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiAnRUNEU0EnLFxuICAgICAgICAgICAgICBcIm5hbWVkQ3VydmVcIjogX2N1cnZlcy53ZWJDdXJ2ZXNbY3VydmUubmFtZV0sXG4gICAgICAgICAgICAgIFwiaGFzaFwiOiB7IG5hbWU6IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC53ZWJIYXNoLCBoYXNoX2FsZ28pIH1cbiAgICAgICAgICAgIH0sIGtleSwgbWVzc2FnZSk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBfY29udGV4dDMudDEgPSBfY29udGV4dDMuc2VudDtcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IG5ldyBfY29udGV4dDMudDAoX2NvbnRleHQzLnQxKTtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCdyZXR1cm4nLCB7XG4gICAgICAgICAgICAgIHI6IG5ldyBfYm4yLmRlZmF1bHQoc2lnbmF0dXJlLnNsaWNlKDAsIGxlbikpLFxuICAgICAgICAgICAgICBzOiBuZXcgX2JuMi5kZWZhdWx0KHNpZ25hdHVyZS5zbGljZShsZW4sIGxlbiA8PCAxKSlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMywgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gd2ViU2lnbihfeDYsIF94NywgX3g4LCBfeDkpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxudmFyIHdlYlZlcmlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWY0ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KGN1cnZlLCBoYXNoX2FsZ28sIF9yZWY1LCBtZXNzYWdlLCBwdWJsaWNLZXkpIHtcbiAgICB2YXIgciA9IF9yZWY1LnIsXG4gICAgICAgIHMgPSBfcmVmNS5zO1xuICAgIHZhciBsZW4sIGtleSwgc2lnbmF0dXJlO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsZW4gPSBjdXJ2ZS5wYXlsb2FkU2l6ZTtcbiAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiB3ZWJDcnlwdG8uaW1wb3J0S2V5KFwiandrXCIsIHtcbiAgICAgICAgICAgICAgXCJrdHlcIjogXCJFQ1wiLFxuICAgICAgICAgICAgICBcImNydlwiOiBfY3VydmVzLndlYkN1cnZlc1tjdXJ2ZS5uYW1lXSxcbiAgICAgICAgICAgICAgXCJ4XCI6IF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fYjY0KG5ldyBVaW50OEFycmF5KHB1YmxpY0tleS5nZXRYKCkudG9BcnJheSgnYmUnLCBsZW4pKSwgdHJ1ZSksXG4gICAgICAgICAgICAgIFwieVwiOiBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX2I2NChuZXcgVWludDhBcnJheShwdWJsaWNLZXkuZ2V0WSgpLnRvQXJyYXkoJ2JlJywgbGVuKSksIHRydWUpLFxuICAgICAgICAgICAgICBcInVzZVwiOiBcInNpZ1wiLFxuICAgICAgICAgICAgICBcImtpZFwiOiBcIkVDRFNBIFB1YmxpYyBLZXlcIlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBcIm5hbWVcIjogXCJFQ0RTQVwiLFxuICAgICAgICAgICAgICBcIm5hbWVkQ3VydmVcIjogX2N1cnZlcy53ZWJDdXJ2ZXNbY3VydmUubmFtZV0sXG4gICAgICAgICAgICAgIFwiaGFzaFwiOiB7IG5hbWU6IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC53ZWJIYXNoLCBjdXJ2ZS5oYXNoKSB9XG4gICAgICAgICAgICB9LCBmYWxzZSwgW1widmVyaWZ5XCJdKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGtleSA9IF9jb250ZXh0NC5zZW50O1xuICAgICAgICAgICAgc2lnbmF0dXJlID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkobGVuIC0gci5sZW5ndGgpLCByLCBuZXcgVWludDhBcnJheShsZW4gLSBzLmxlbmd0aCksIHNdKS5idWZmZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdCgncmV0dXJuJywgd2ViQ3J5cHRvLnZlcmlmeSh7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiAnRUNEU0EnLFxuICAgICAgICAgICAgICBcIm5hbWVkQ3VydmVcIjogX2N1cnZlcy53ZWJDdXJ2ZXNbY3VydmUubmFtZV0sXG4gICAgICAgICAgICAgIFwiaGFzaFwiOiB7IG5hbWU6IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC53ZWJIYXNoLCBoYXNoX2FsZ28pIH1cbiAgICAgICAgICAgIH0sIGtleSwgc2lnbmF0dXJlLCBtZXNzYWdlKSk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTQsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdlYlZlcmlmeShfeDEwLCBfeDExLCBfeDEyLCBfeDEzLCBfeDE0KSB7XG4gICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBub2RlU2lnbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWY2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1KGN1cnZlLCBoYXNoX2FsZ28sIG1lc3NhZ2UsIGtleVBhaXIpIHtcbiAgICB2YXIgc2lnbiwga2V5O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBzaWduID0gbm9kZUNyeXB0by5jcmVhdGVTaWduKF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5oYXNoLCBoYXNoX2FsZ28pKTtcblxuICAgICAgICAgICAgc2lnbi53cml0ZShtZXNzYWdlKTtcbiAgICAgICAgICAgIHNpZ24uZW5kKCk7XG5cbiAgICAgICAgICAgIGtleSA9IEVDUHJpdmF0ZUtleS5lbmNvZGUoe1xuICAgICAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBjdXJ2ZS5vaWQsXG4gICAgICAgICAgICAgIHByaXZhdGVLZXk6IGtleVBhaXIuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB7IHVudXNlZDogMCwgZGF0YToga2V5UGFpci5nZXRQdWJsaWMoKS5lbmNvZGUoKSB9XG4gICAgICAgICAgICB9LCAncGVtJywge1xuICAgICAgICAgICAgICBsYWJlbDogJ0VDIFBSSVZBVEUgS0VZJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LmFicnVwdCgncmV0dXJuJywgRUNEU0FTaWduYXR1cmUuZGVjb2RlKHNpZ24uc2lnbihrZXkpLCAnZGVyJykpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU1LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBub2RlU2lnbihfeDE1LCBfeDE2LCBfeDE3LCBfeDE4KSB7XG4gICAgcmV0dXJuIF9yZWY2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciBub2RlVmVyaWZ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjcgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYoY3VydmUsIGhhc2hfYWxnbywgX3JlZjgsIG1lc3NhZ2UsIHB1YmxpY0tleSkge1xuICAgIHZhciByID0gX3JlZjgucixcbiAgICAgICAgcyA9IF9yZWY4LnM7XG4gICAgdmFyIHZlcmlmeSwga2V5LCBzaWduYXR1cmU7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU2JChfY29udGV4dDYpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ2LnByZXYgPSBfY29udGV4dDYubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHZlcmlmeSA9IG5vZGVDcnlwdG8uY3JlYXRlVmVyaWZ5KF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5oYXNoLCBoYXNoX2FsZ28pKTtcblxuICAgICAgICAgICAgdmVyaWZ5LndyaXRlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgdmVyaWZ5LmVuZCgpO1xuXG4gICAgICAgICAgICBrZXkgPSBTdWJqZWN0UHVibGljS2V5SW5mby5lbmNvZGUoe1xuICAgICAgICAgICAgICBhbGdvcml0aG06IHtcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFsxLCAyLCA4NDAsIDEwMDQ1LCAyLCAxXSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBjdXJ2ZS5vaWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3ViamVjdFB1YmxpY0tleTogeyB1bnVzZWQ6IDAsIGRhdGE6IHB1YmxpY0tleS5lbmNvZGUoKSB9XG4gICAgICAgICAgICB9LCAncGVtJywge1xuICAgICAgICAgICAgICBsYWJlbDogJ1BVQkxJQyBLRVknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IEVDRFNBU2lnbmF0dXJlLmVuY29kZSh7XG4gICAgICAgICAgICAgIHI6IG5ldyBfYm4yLmRlZmF1bHQociksIHM6IG5ldyBfYm4yLmRlZmF1bHQocylcbiAgICAgICAgICAgIH0sICdkZXInKTtcbiAgICAgICAgICAgIF9jb250ZXh0Ni5wcmV2ID0gNTtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuYWJydXB0KCdyZXR1cm4nLCB2ZXJpZnkudmVyaWZ5KGtleSwgc2lnbmF0dXJlKSk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBfY29udGV4dDYucHJldiA9IDk7XG4gICAgICAgICAgICBfY29udGV4dDYudDAgPSBfY29udGV4dDZbJ2NhdGNoJ10oNSk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LmFicnVwdCgncmV0dXJuJywgZmFsc2UpO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNiwgdGhpcywgW1s1LCA5XV0pO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG5vZGVWZXJpZnkoX3gxOSwgX3gyMCwgX3gyMSwgX3gyMiwgX3gyMykge1xuICAgIHJldHVybiBfcmVmNy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vLyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgT3dlbiBTbWl0aCBodHRwczovL2dpdGh1Yi5jb20vb21zbWl0aFxuLy8gQWRhcHRlZCBvbiBGZWIgMjAxOCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9CcmlnaHRzcGFjZS9ub2RlLWp3ay10by1wZW0vXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG52YXIgX2JuID0gX2RlcmVxXygnYm4uanMnKTtcblxudmFyIF9ibjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ibik7XG5cbnZhciBfY3VydmVzID0gX2RlcmVxXygnLi9jdXJ2ZXMnKTtcblxudmFyIF9oYXNoID0gX2RlcmVxXygnLi4vLi4vaGFzaCcpO1xuXG52YXIgX2hhc2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFzaCk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uLy4uLy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vLi4vLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciB3ZWJDcnlwdG8gPSBfdXRpbDIuZGVmYXVsdC5nZXRXZWJDcnlwdG8oKTsgLy8gT3BlblBHUC5qcyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgRGVjZW50cmFsXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFdyYXBwZXIgZm9yIGEgS2V5UGFpciBvZiBhbiBFbGxpcHRpYyBDdXJ2ZVxuICogQHJlcXVpcmVzIGJuLmpzXG4gKiBAcmVxdWlyZXMgY3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMvY3VydmVzXG4gKiBAcmVxdWlyZXMgY3J5cHRvL2hhc2hcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyBhc24xLmpzXG4gKiBAbW9kdWxlIGNyeXB0by9wdWJsaWNfa2V5L2VsbGlwdGljL2tleVxuICovXG5cbnZhciBub2RlQ3J5cHRvID0gX3V0aWwyLmRlZmF1bHQuZ2V0Tm9kZUNyeXB0bygpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBLZXlQYWlyKGN1cnZlLCBvcHRpb25zKSB7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy5rZXlUeXBlID0gY3VydmUuY3VydmUudHlwZSA9PT0gJ2Vkd2FyZHMnID8gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lZGRzYSA6IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2E7XG4gIHRoaXMua2V5UGFpciA9IHRoaXMuY3VydmUuY3VydmUua2V5UGFpcihvcHRpb25zKTtcbn1cblxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShtZXNzYWdlLCBoYXNoX2FsZ28pIHtcbiAgICB2YXIgc2lnbmF0dXJlLCBkaWdlc3Q7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKCEodGhpcy5jdXJ2ZS53ZWIgJiYgX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxO1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gd2ViU2lnbih0aGlzLmN1cnZlLCBoYXNoX2FsZ28sIG1lc3NhZ2UsIHRoaXMua2V5UGFpcik7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBzaWduYXR1cmUgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgc2lnbmF0dXJlKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSA4O1xuICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfY29udGV4dFsnY2F0Y2gnXSgxKTtcblxuICAgICAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWcoXCJCcm93c2VyIGRpZCBub3Qgc3VwcG9ydCBzaWduaW5nOiBcIiArIF9jb250ZXh0LnQwLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3VydmUubm9kZSAmJiBfdXRpbDIuZGVmYXVsdC5nZXROb2RlQ3J5cHRvKCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIG5vZGVTaWduKHRoaXMuY3VydmUsIGhhc2hfYWxnbywgbWVzc2FnZSwgdGhpcy5rZXlQYWlyKSk7XG5cbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgZGlnZXN0ID0gdHlwZW9mIGhhc2hfYWxnbyA9PT0gJ3VuZGVmaW5lZCcgPyBtZXNzYWdlIDogX2hhc2gyLmRlZmF1bHQuZGlnZXN0KGhhc2hfYWxnbywgbWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB0aGlzLmtleVBhaXIuc2lnbihkaWdlc3QpKTtcblxuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzLCBbWzEsIDhdXSk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94LCBfeDIpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG5LZXlQYWlyLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihtZXNzYWdlLCBzaWduYXR1cmUsIGhhc2hfYWxnbykge1xuICAgIHZhciByZXN1bHQsIGRpZ2VzdDtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKCEodGhpcy5jdXJ2ZS53ZWIgJiYgX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDE7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gd2ViVmVyaWZ5KHRoaXMuY3VydmUsIGhhc2hfYWxnbywgc2lnbmF0dXJlLCBtZXNzYWdlLCB0aGlzLmtleVBhaXIuZ2V0UHVibGljKCkpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgcmVzdWx0KTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gODtcbiAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9jb250ZXh0MlsnY2F0Y2gnXSgxKTtcblxuICAgICAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWcoXCJCcm93c2VyIGRpZCBub3Qgc3VwcG9ydCBzaWduaW5nOiBcIiArIF9jb250ZXh0Mi50MC5tZXNzYWdlKTtcblxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDE1O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgaWYgKCEodGhpcy5jdXJ2ZS5ub2RlICYmIF91dGlsMi5kZWZhdWx0LmdldE5vZGVDcnlwdG8oKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBub2RlVmVyaWZ5KHRoaXMuY3VydmUsIGhhc2hfYWxnbywgc2lnbmF0dXJlLCBtZXNzYWdlLCB0aGlzLmtleVBhaXIuZ2V0UHVibGljKCkpKTtcblxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICBkaWdlc3QgPSB0eXBlb2YgaGFzaF9hbGdvID09PSAndW5kZWZpbmVkJyA/IG1lc3NhZ2UgOiBfaGFzaDIuZGVmYXVsdC5kaWdlc3QoaGFzaF9hbGdvLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCB0aGlzLmtleVBhaXIudmVyaWZ5KGRpZ2VzdCwgc2lnbmF0dXJlKSk7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzLCBbWzEsIDhdXSk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94MywgX3g0LCBfeDUpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuS2V5UGFpci5wcm90b3R5cGUuZGVyaXZlID0gZnVuY3Rpb24gKHB1Yikge1xuICBpZiAodGhpcy5rZXlUeXBlID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVkZHNhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgY2FuIG9ubHkgYmUgdXNlZCBmb3IgRWREU0EnKTtcbiAgfVxuICByZXR1cm4gdGhpcy5rZXlQYWlyLmRlcml2ZShwdWIua2V5UGFpci5nZXRQdWJsaWMoKSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQdWJsaWMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb21wYWN0ID0gdGhpcy5jdXJ2ZS5jdXJ2ZS5jdXJ2ZS50eXBlID09PSAnZWR3YXJkcycgfHwgdGhpcy5jdXJ2ZS5jdXJ2ZS5jdXJ2ZS50eXBlID09PSAnbW9udCc7XG4gIHJldHVybiB0aGlzLmtleVBhaXIuZ2V0UHVibGljKCdhcnJheScsIGNvbXBhY3QpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHJpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY3VydmUua2V5VHlwZSA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lZGRzYSkge1xuICAgIHJldHVybiB0aGlzLmtleVBhaXIuZ2V0U2VjcmV0KCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMua2V5UGFpci5nZXRQcml2YXRlKCkudG9BcnJheSgpO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gS2V5UGFpcjtcbnZhciBhc24xID0gbm9kZUNyeXB0byA/IF9kZXJlcV8oJ2FzbjEuanMnKSA6IHVuZGVmaW5lZDtcblxudmFyIEVDRFNBU2lnbmF0dXJlID0gbm9kZUNyeXB0byA/IGFzbjEuZGVmaW5lKCdFQ0RTQVNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoJ3InKS5pbnQoKSwgdGhpcy5rZXkoJ3MnKS5pbnQoKSk7XG59KSA6IHVuZGVmaW5lZDtcblxudmFyIEVDUHJpdmF0ZUtleSA9IG5vZGVDcnlwdG8gPyBhc24xLmRlZmluZSgnRUNQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgndmVyc2lvbicpLmludCgpLCB0aGlzLmtleSgncHJpdmF0ZUtleScpLm9jdHN0cigpLCB0aGlzLmtleSgncGFyYW1ldGVycycpLmV4cGxpY2l0KDApLm9wdGlvbmFsKCkuYW55KCksIHRoaXMua2V5KCdwdWJsaWNLZXknKS5leHBsaWNpdCgxKS5vcHRpb25hbCgpLmJpdHN0cigpKTtcbn0pIDogdW5kZWZpbmVkO1xuXG52YXIgQWxnb3JpdGhtSWRlbnRpZmllciA9IG5vZGVDcnlwdG8gPyBhc24xLmRlZmluZSgnQWxnb3JpdGhtSWRlbnRpZmllcicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoJ2FsZ29yaXRobScpLm9iamlkKCksIHRoaXMua2V5KCdwYXJhbWV0ZXJzJykub3B0aW9uYWwoKS5hbnkoKSk7XG59KSA6IHVuZGVmaW5lZDtcblxudmFyIFN1YmplY3RQdWJsaWNLZXlJbmZvID0gbm9kZUNyeXB0byA/IGFzbjEuZGVmaW5lKCdTdWJqZWN0UHVibGljS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSwgdGhpcy5rZXkoJ3N1YmplY3RQdWJsaWNLZXknKS5iaXRzdHIoKSk7XG59KSA6IHVuZGVmaW5lZDtcblxufSx7XCIuLi8uLi8uLi9lbnVtc1wiOjM1OSxcIi4uLy4uLy4uL3V0aWxcIjozOTgsXCIuLi8uLi9oYXNoXCI6MzM4LFwiLi9jdXJ2ZXNcIjozNDYsXCJhc24xLmpzXCI6XCJhc24xLmpzXCIsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyLFwiYm4uanNcIjo0NH1dLDM1MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcnNhID0gX2RlcmVxXygnLi9yc2EnKTtcblxudmFyIF9yc2EyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnNhKTtcblxudmFyIF9lbGdhbWFsID0gX2RlcmVxXygnLi9lbGdhbWFsJyk7XG5cbnZhciBfZWxnYW1hbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbGdhbWFsKTtcblxudmFyIF9lbGxpcHRpYyA9IF9kZXJlcV8oJy4vZWxsaXB0aWMnKTtcblxudmFyIF9lbGxpcHRpYzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbGxpcHRpYyk7XG5cbnZhciBfZHNhID0gX2RlcmVxXygnLi9kc2EnKTtcblxudmFyIF9kc2EyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZHNhKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFzeW1tZXRyaWMgY3J5cHRvZ3JhcGh5IGZ1bmN0aW9uc1xuICogQHJlcXVpcmVzIGNyeXB0by9wdWJsaWNfa2V5L2RzYVxuICogQHJlcXVpcmVzIGNyeXB0by9wdWJsaWNfa2V5L2VsZ2FtYWxcbiAqIEByZXF1aXJlcyBjcnlwdG8vcHVibGljX2tleS9lbGxpcHRpY1xuICogQHJlcXVpcmVzIGNyeXB0by9wdWJsaWNfa2V5L3JzYVxuICogQG1vZHVsZSBjcnlwdG8vcHVibGljX2tleVxuICovXG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgLyoqIEBzZWUgbW9kdWxlOmNyeXB0by9wdWJsaWNfa2V5L3JzYSAqL1xuICByc2E6IF9yc2EyLmRlZmF1bHQsXG4gIC8qKiBAc2VlIG1vZHVsZTpjcnlwdG8vcHVibGljX2tleS9lbGdhbWFsICovXG4gIGVsZ2FtYWw6IF9lbGdhbWFsMi5kZWZhdWx0LFxuICAvKiogQHNlZSBtb2R1bGU6Y3J5cHRvL3B1YmxpY19rZXkvZWxsaXB0aWMgKi9cbiAgZWxsaXB0aWM6IF9lbGxpcHRpYzIuZGVmYXVsdCxcbiAgLyoqIEBzZWUgbW9kdWxlOmNyeXB0by9wdWJsaWNfa2V5L2RzYSAqL1xuICBkc2E6IF9kc2EyLmRlZmF1bHRcbn07XG5cbn0se1wiLi9kc2FcIjozNDQsXCIuL2VsZ2FtYWxcIjozNDUsXCIuL2VsbGlwdGljXCI6MzUwLFwiLi9yc2FcIjozNTR9XSwzNTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbi8qKlxuICogUHJvYmFiaWxpc3RpYyByYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICogQHBhcmFtIHtJbnRlZ2VyfSBiaXRzIEJpdCBsZW5ndGggb2YgdGhlIHByaW1lXG4gKiBAcGFyYW0ge0JOfSAgICAgIGUgICAgT3B0aW9uYWwgUlNBIGV4cG9uZW50IHRvIGNoZWNrIGFnYWluc3QgdGhlIHByaW1lXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGsgICAgT3B0aW9uYWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgTWlsbGVyLVJhYmluIHRlc3RcbiAqIEByZXR1cm5zIEJOXG4gKiBAYXN5bmNcbiAqL1xudmFyIHJhbmRvbVByb2JhYmxlUHJpbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoYml0cywgZSwgaykge1xuICAgIHZhciBtaW4sIHRoaXJ0eSwgYWRkcywgbiwgaTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBtaW4gPSBuZXcgX2JuMi5kZWZhdWx0KDEpLnNobG4oYml0cyAtIDEpO1xuICAgICAgICAgICAgdGhpcnR5ID0gbmV3IF9ibjIuZGVmYXVsdCgzMCk7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogV2UgY2FuIGF2b2lkIGFueSBtdWx0aXBsZXMgb2YgMyBhbmQgNSBieSBsb29raW5nIGF0IG4gbW9kIDMwXG4gICAgICAgICAgICAgKiBuIG1vZCAzMCA9IDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjlcbiAgICAgICAgICAgICAqIHRoZSBuZXh0IHBvc3NpYmxlIHByaW1lIGlzIG1vZCAzMDpcbiAgICAgICAgICAgICAqICAgICAgICAgICAgMSAgNyAgNyAgNyAgNyAgNyAgNyAxMSAxMSAxMSAxMSAxMyAxMyAxNyAxNyAxNyAxNyAxOSAxOSAyMyAyMyAyMyAyMyAyOSAyOSAyOSAyOSAyOSAyOSAxXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgYWRkcyA9IFsxLCA2LCA1LCA0LCAzLCAyLCAxLCA0LCAzLCAyLCAxLCAyLCAxLCA0LCAzLCAyLCAxLCAyLCAxLCA0LCAzLCAyLCAxLCA2LCA1LCA0LCAzLCAyLCAxLCAyXTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuIF9yYW5kb20yLmRlZmF1bHQuZ2V0UmFuZG9tQk4obWluLCBtaW4uc2hsbigxKSk7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBuID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIGkgPSBuLm1vZCh0aGlydHkpLnRvTnVtYmVyKCk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBuLmlhZGRuKGFkZHNbaV0pO1xuICAgICAgICAgICAgaSA9IChpICsgYWRkc1tpXSkgJSBhZGRzLmxlbmd0aDtcbiAgICAgICAgICAgIC8vIElmIHJlYWNoZWQgdGhlIG1heGltdW0sIGdvIGJhY2sgdG8gdGhlIG1pbmltdW0uXG4gICAgICAgICAgICBpZiAobi5iaXRMZW5ndGgoKSA+IGJpdHMpIHtcbiAgICAgICAgICAgICAgbiA9IG4ubW9kKG1pbi5zaGxuKDEpKS5pYWRkKG1pbik7XG4gICAgICAgICAgICAgIGkgPSBuLm1vZCh0aGlydHkpLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMjtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb2JhYmxlUHJpbWUobiwgZSwgayk7XG5cbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgaWYgKCFfY29udGV4dC5zZW50KSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA3O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBuKTtcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiByYW5kb21Qcm9iYWJsZVByaW1lKF94LCBfeDIsIF94Mykge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogUHJvYmFiaWxpc3RpYyBwcmltYWxpdHkgdGVzdGluZ1xuICogQHBhcmFtIHtCTn0gICAgICBuIE51bWJlciB0byB0ZXN0XG4gKiBAcGFyYW0ge0JOfSAgICAgIGUgT3B0aW9uYWwgUlNBIGV4cG9uZW50IHRvIGNoZWNrIGFnYWluc3QgdGhlIHByaW1lXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGsgT3B0aW9uYWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgTWlsbGVyLVJhYmluIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGFzeW5jXG4gKi9cblxuXG52YXIgaXNQcm9iYWJsZVByaW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIobiwgZSwgaykge1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBpZiAoIShlICYmICFuLnN1Ym4oMSkuZ2NkKGUpLmVxbigxKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIGZhbHNlKTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmIChkaXZpc2lvblRlc3QobikpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIGZhbHNlKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmIChmZXJtYXQobikpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA2O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIGZhbHNlKTtcblxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gODtcbiAgICAgICAgICAgIHJldHVybiBtaWxsZXJSYWJpbihuLCBrKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGlmIChfY29udGV4dDIuc2VudCkge1xuICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIGZhbHNlKTtcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpc1Byb2JhYmxlUHJpbWUoX3g0LCBfeDUsIF94Nikge1xuICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgbiBpcyBwcm9iYWJseSBwcmltZSBvciBub3QgdXNpbmcgRmVybWF0J3MgdGVzdCB3aXRoIGIgPSAyLlxuICogRmFpbHMgaWYgYl4obi0xKSBtb2QgbiA9PT0gMS5cbiAqIEBwYXJhbSB7Qk59ICAgICAgbiBOdW1iZXIgdG8gdGVzdFxuICogQHBhcmFtIHtJbnRlZ2VyfSBiIE9wdGlvbmFsIEZlcm1hdCB0ZXN0IGJhc2VcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuLy8gTWlsbGVyLVJhYmluIC0gTWlsbGVyIFJhYmluIGFsZ29yaXRobSBmb3IgcHJpbWFsaXR5IHRlc3Rcbi8vIENvcHlyaWdodCBGZWRvciBJbmR1dG55LCAyMDE0LlxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBZGFwdGVkIG9uIEphbiAyMDE4IGZyb20gdmVyc2lvbiA0LjAuMSBhdCBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9taWxsZXItcmFiaW5cblxuLy8gU2FtcGxlIHN5bnRheCBmb3IgRml4ZWQtQmFzZSBNaWxsZXItUmFiaW46XG4vLyBtaWxsZXJSYWJpbihuLCBrLCAoKSA9PiBuZXcgQk4oc21hbGxfcHJpbWVzW01hdGgucmFuZG9tKCkgKiBzbWFsbF9wcmltZXMubGVuZ3RoIHwgMF0pKVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgbiBpcyBwcm9iYWJseSBwcmltZSBvciBub3QgdXNpbmcgdGhlIE1pbGxlci1SYWJpbiB0ZXN0LlxuICogU2VlIEhBQyBSZW1hcmsgNC4yOC5cbiAqIEBwYXJhbSB7Qk59ICAgICAgIG4gICAgTnVtYmVyIHRvIHRlc3RcbiAqIEBwYXJhbSB7SW50ZWdlcn0gIGsgICAgT3B0aW9uYWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgTWlsbGVyLVJhYmluIHRlc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJhbmQgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgcG90ZW50aWFsIHdpdG5lc3Nlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAYXN5bmNcbiAqL1xudmFyIG1pbGxlclJhYmluID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMobiwgaywgcmFuZCkge1xuICAgIHZhciBsZW4sIHJlZCwgcm9uZSwgbjEsIHJuMSwgcywgZCwgYSwgeCwgaTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgICAgICAgICAgIHJlZCA9IF9ibjIuZGVmYXVsdC5tb250KG4pO1xuICAgICAgICAgICAgcm9uZSA9IG5ldyBfYm4yLmRlZmF1bHQoMSkudG9SZWQocmVkKTtcblxuXG4gICAgICAgICAgICBpZiAoIWspIHtcbiAgICAgICAgICAgICAgayA9IE1hdGgubWF4KDEsIGxlbiAvIDQ4IHwgMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG4xID0gbi5zdWJuKDEpO1xuICAgICAgICAgICAgcm4xID0gbjEudG9SZWQocmVkKTtcblxuICAgICAgICAgICAgLy8gRmluZCBkIGFuZCBzLCAobiAtIDEpID0gKDIgXiBzKSAqIGQ7XG5cbiAgICAgICAgICAgIHMgPSAwO1xuXG4gICAgICAgICAgICB3aGlsZSAoIW4xLnRlc3RuKHMpKSB7XG4gICAgICAgICAgICAgIHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGQgPSBuLnNocm4ocyk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBpZiAoIShrID4gMCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAzNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmFuZCkge1xuICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDE0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gcmFuZCgpO1xuICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMTY7XG4gICAgICAgICAgICByZXR1cm4gX3JhbmRvbTIuZGVmYXVsdC5nZXRSYW5kb21CTihuZXcgX2JuMi5kZWZhdWx0KDIpLCBuMSk7XG5cbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gX2NvbnRleHQzLnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgYSA9IF9jb250ZXh0My50MDtcbiAgICAgICAgICAgIHggPSBhLnRvUmVkKHJlZCkucmVkUG93KGQpO1xuXG4gICAgICAgICAgICBpZiAoISh4LmVxKHJvbmUpIHx8IHguZXEocm4xKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAyMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCdjb250aW51ZScsIDM0KTtcblxuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICBpID0gdm9pZCAwO1xuICAgICAgICAgICAgaSA9IDE7XG5cbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgaWYgKCEoaSA8IHMpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMzI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4ID0geC5yZWRTcXIoKTtcblxuICAgICAgICAgICAgaWYgKCF4LmVxKHJvbmUpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywgZmFsc2UpO1xuXG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIGlmICgheC5lcShybjEpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgnYnJlYWsnLCAzMik7XG5cbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAyMztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGlmICghKGkgPT09IHMpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMzQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywgZmFsc2UpO1xuXG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIGstLTtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gOTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCdyZXR1cm4nLCB0cnVlKTtcblxuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTMsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG1pbGxlclJhYmluKF94NywgX3g4LCBfeDkpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxudmFyIF9ibiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG5cbnZhciBfYm4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYm4pO1xuXG52YXIgX3JhbmRvbSA9IF9kZXJlcV8oJy4uL3JhbmRvbScpO1xuXG52YXIgX3JhbmRvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yYW5kb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBPcGVuUEdQLmpzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTggUHJvdG9uIFRlY2hub2xvZ2llcyBBR1xuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBBbGdvcml0aG1zIGZvciBwcm9iYWJpbGlzdGljIHJhbmRvbSBwcmltZSBnZW5lcmF0aW9uXG4gKiBAcmVxdWlyZXMgYm4uanNcbiAqIEByZXF1aXJlcyBjcnlwdG8vcmFuZG9tXG4gKiBAbW9kdWxlIGNyeXB0by9wdWJsaWNfa2V5L3ByaW1lXG4gKi9cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICByYW5kb21Qcm9iYWJsZVByaW1lOiByYW5kb21Qcm9iYWJsZVByaW1lLCBpc1Byb2JhYmxlUHJpbWU6IGlzUHJvYmFibGVQcmltZSwgZmVybWF0OiBmZXJtYXQsIG1pbGxlclJhYmluOiBtaWxsZXJSYWJpbiwgZGl2aXNpb25UZXN0OiBkaXZpc2lvblRlc3Rcbn07XG5mdW5jdGlvbiBmZXJtYXQobiwgYikge1xuICBiID0gYiB8fCBuZXcgX2JuMi5kZWZhdWx0KDIpO1xuICByZXR1cm4gYi50b1JlZChfYm4yLmRlZmF1bHQubW9udChuKSkucmVkUG93KG4uc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGRpdmlzaW9uVGVzdChuKSB7XG4gIHJldHVybiBzbWFsbF9wcmltZXMuZXZlcnkoZnVuY3Rpb24gKG0pIHtcbiAgICByZXR1cm4gbi5tb2RuKG0pICE9PSAwO1xuICB9KTtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwZy9saWJnY3J5cHQvYmxvYi9tYXN0ZXIvY2lwaGVyL3ByaW1lZ2VuLmNcbnZhciBzbWFsbF9wcmltZXMgPSBbNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTksIDYxLCA2NywgNzEsIDczLCA3OSwgODMsIDg5LCA5NywgMTAxLCAxMDMsIDEwNywgMTA5LCAxMTMsIDEyNywgMTMxLCAxMzcsIDEzOSwgMTQ5LCAxNTEsIDE1NywgMTYzLCAxNjcsIDE3MywgMTc5LCAxODEsIDE5MSwgMTkzLCAxOTcsIDE5OSwgMjExLCAyMjMsIDIyNywgMjI5LCAyMzMsIDIzOSwgMjQxLCAyNTEsIDI1NywgMjYzLCAyNjksIDI3MSwgMjc3LCAyODEsIDI4MywgMjkzLCAzMDcsIDMxMSwgMzEzLCAzMTcsIDMzMSwgMzM3LCAzNDcsIDM0OSwgMzUzLCAzNTksIDM2NywgMzczLCAzNzksIDM4MywgMzg5LCAzOTcsIDQwMSwgNDA5LCA0MTksIDQyMSwgNDMxLCA0MzMsIDQzOSwgNDQzLCA0NDksIDQ1NywgNDYxLCA0NjMsIDQ2NywgNDc5LCA0ODcsIDQ5MSwgNDk5LCA1MDMsIDUwOSwgNTIxLCA1MjMsIDU0MSwgNTQ3LCA1NTcsIDU2MywgNTY5LCA1NzEsIDU3NywgNTg3LCA1OTMsIDU5OSwgNjAxLCA2MDcsIDYxMywgNjE3LCA2MTksIDYzMSwgNjQxLCA2NDMsIDY0NywgNjUzLCA2NTksIDY2MSwgNjczLCA2NzcsIDY4MywgNjkxLCA3MDEsIDcwOSwgNzE5LCA3MjcsIDczMywgNzM5LCA3NDMsIDc1MSwgNzU3LCA3NjEsIDc2OSwgNzczLCA3ODcsIDc5NywgODA5LCA4MTEsIDgyMSwgODIzLCA4MjcsIDgyOSwgODM5LCA4NTMsIDg1NywgODU5LCA4NjMsIDg3NywgODgxLCA4ODMsIDg4NywgOTA3LCA5MTEsIDkxOSwgOTI5LCA5MzcsIDk0MSwgOTQ3LCA5NTMsIDk2NywgOTcxLCA5NzcsIDk4MywgOTkxLCA5OTcsIDEwMDksIDEwMTMsIDEwMTksIDEwMjEsIDEwMzEsIDEwMzMsIDEwMzksIDEwNDksIDEwNTEsIDEwNjEsIDEwNjMsIDEwNjksIDEwODcsIDEwOTEsIDEwOTMsIDEwOTcsIDExMDMsIDExMDksIDExMTcsIDExMjMsIDExMjksIDExNTEsIDExNTMsIDExNjMsIDExNzEsIDExODEsIDExODcsIDExOTMsIDEyMDEsIDEyMTMsIDEyMTcsIDEyMjMsIDEyMjksIDEyMzEsIDEyMzcsIDEyNDksIDEyNTksIDEyNzcsIDEyNzksIDEyODMsIDEyODksIDEyOTEsIDEyOTcsIDEzMDEsIDEzMDMsIDEzMDcsIDEzMTksIDEzMjEsIDEzMjcsIDEzNjEsIDEzNjcsIDEzNzMsIDEzODEsIDEzOTksIDE0MDksIDE0MjMsIDE0MjcsIDE0MjksIDE0MzMsIDE0MzksIDE0NDcsIDE0NTEsIDE0NTMsIDE0NTksIDE0NzEsIDE0ODEsIDE0ODMsIDE0ODcsIDE0ODksIDE0OTMsIDE0OTksIDE1MTEsIDE1MjMsIDE1MzEsIDE1NDMsIDE1NDksIDE1NTMsIDE1NTksIDE1NjcsIDE1NzEsIDE1NzksIDE1ODMsIDE1OTcsIDE2MDEsIDE2MDcsIDE2MDksIDE2MTMsIDE2MTksIDE2MjEsIDE2MjcsIDE2MzcsIDE2NTcsIDE2NjMsIDE2NjcsIDE2NjksIDE2OTMsIDE2OTcsIDE2OTksIDE3MDksIDE3MjEsIDE3MjMsIDE3MzMsIDE3NDEsIDE3NDcsIDE3NTMsIDE3NTksIDE3NzcsIDE3ODMsIDE3ODcsIDE3ODksIDE4MDEsIDE4MTEsIDE4MjMsIDE4MzEsIDE4NDcsIDE4NjEsIDE4NjcsIDE4NzEsIDE4NzMsIDE4NzcsIDE4NzksIDE4ODksIDE5MDEsIDE5MDcsIDE5MTMsIDE5MzEsIDE5MzMsIDE5NDksIDE5NTEsIDE5NzMsIDE5NzksIDE5ODcsIDE5OTMsIDE5OTcsIDE5OTksIDIwMDMsIDIwMTEsIDIwMTcsIDIwMjcsIDIwMjksIDIwMzksIDIwNTMsIDIwNjMsIDIwNjksIDIwODEsIDIwODMsIDIwODcsIDIwODksIDIwOTksIDIxMTEsIDIxMTMsIDIxMjksIDIxMzEsIDIxMzcsIDIxNDEsIDIxNDMsIDIxNTMsIDIxNjEsIDIxNzksIDIyMDMsIDIyMDcsIDIyMTMsIDIyMjEsIDIyMzcsIDIyMzksIDIyNDMsIDIyNTEsIDIyNjcsIDIyNjksIDIyNzMsIDIyODEsIDIyODcsIDIyOTMsIDIyOTcsIDIzMDksIDIzMTEsIDIzMzMsIDIzMzksIDIzNDEsIDIzNDcsIDIzNTEsIDIzNTcsIDIzNzEsIDIzNzcsIDIzODEsIDIzODMsIDIzODksIDIzOTMsIDIzOTksIDI0MTEsIDI0MTcsIDI0MjMsIDI0MzcsIDI0NDEsIDI0NDcsIDI0NTksIDI0NjcsIDI0NzMsIDI0NzcsIDI1MDMsIDI1MjEsIDI1MzEsIDI1MzksIDI1NDMsIDI1NDksIDI1NTEsIDI1NTcsIDI1NzksIDI1OTEsIDI1OTMsIDI2MDksIDI2MTcsIDI2MjEsIDI2MzMsIDI2NDcsIDI2NTcsIDI2NTksIDI2NjMsIDI2NzEsIDI2NzcsIDI2ODMsIDI2ODcsIDI2ODksIDI2OTMsIDI2OTksIDI3MDcsIDI3MTEsIDI3MTMsIDI3MTksIDI3MjksIDI3MzEsIDI3NDEsIDI3NDksIDI3NTMsIDI3NjcsIDI3NzcsIDI3ODksIDI3OTEsIDI3OTcsIDI4MDEsIDI4MDMsIDI4MTksIDI4MzMsIDI4MzcsIDI4NDMsIDI4NTEsIDI4NTcsIDI4NjEsIDI4NzksIDI4ODcsIDI4OTcsIDI5MDMsIDI5MDksIDI5MTcsIDI5MjcsIDI5MzksIDI5NTMsIDI5NTcsIDI5NjMsIDI5NjksIDI5NzEsIDI5OTksIDMwMDEsIDMwMTEsIDMwMTksIDMwMjMsIDMwMzcsIDMwNDEsIDMwNDksIDMwNjEsIDMwNjcsIDMwNzksIDMwODMsIDMwODksIDMxMDksIDMxMTksIDMxMjEsIDMxMzcsIDMxNjMsIDMxNjcsIDMxNjksIDMxODEsIDMxODcsIDMxOTEsIDMyMDMsIDMyMDksIDMyMTcsIDMyMjEsIDMyMjksIDMyNTEsIDMyNTMsIDMyNTcsIDMyNTksIDMyNzEsIDMyOTksIDMzMDEsIDMzMDcsIDMzMTMsIDMzMTksIDMzMjMsIDMzMjksIDMzMzEsIDMzNDMsIDMzNDcsIDMzNTksIDMzNjEsIDMzNzEsIDMzNzMsIDMzODksIDMzOTEsIDM0MDcsIDM0MTMsIDM0MzMsIDM0NDksIDM0NTcsIDM0NjEsIDM0NjMsIDM0NjcsIDM0NjksIDM0OTEsIDM0OTksIDM1MTEsIDM1MTcsIDM1MjcsIDM1MjksIDM1MzMsIDM1MzksIDM1NDEsIDM1NDcsIDM1NTcsIDM1NTksIDM1NzEsIDM1ODEsIDM1ODMsIDM1OTMsIDM2MDcsIDM2MTMsIDM2MTcsIDM2MjMsIDM2MzEsIDM2MzcsIDM2NDMsIDM2NTksIDM2NzEsIDM2NzMsIDM2NzcsIDM2OTEsIDM2OTcsIDM3MDEsIDM3MDksIDM3MTksIDM3MjcsIDM3MzMsIDM3MzksIDM3NjEsIDM3NjcsIDM3NjksIDM3NzksIDM3OTMsIDM3OTcsIDM4MDMsIDM4MjEsIDM4MjMsIDM4MzMsIDM4NDcsIDM4NTEsIDM4NTMsIDM4NjMsIDM4NzcsIDM4ODEsIDM4ODksIDM5MDcsIDM5MTEsIDM5MTcsIDM5MTksIDM5MjMsIDM5MjksIDM5MzEsIDM5NDMsIDM5NDcsIDM5NjcsIDM5ODksIDQwMDEsIDQwMDMsIDQwMDcsIDQwMTMsIDQwMTksIDQwMjEsIDQwMjcsIDQwNDksIDQwNTEsIDQwNTcsIDQwNzMsIDQwNzksIDQwOTEsIDQwOTMsIDQwOTksIDQxMTEsIDQxMjcsIDQxMjksIDQxMzMsIDQxMzksIDQxNTMsIDQxNTcsIDQxNTksIDQxNzcsIDQyMDEsIDQyMTEsIDQyMTcsIDQyMTksIDQyMjksIDQyMzEsIDQyNDEsIDQyNDMsIDQyNTMsIDQyNTksIDQyNjEsIDQyNzEsIDQyNzMsIDQyODMsIDQyODksIDQyOTcsIDQzMjcsIDQzMzcsIDQzMzksIDQzNDksIDQzNTcsIDQzNjMsIDQzNzMsIDQzOTEsIDQzOTcsIDQ0MDksIDQ0MjEsIDQ0MjMsIDQ0NDEsIDQ0NDcsIDQ0NTEsIDQ0NTcsIDQ0NjMsIDQ0ODEsIDQ0ODMsIDQ0OTMsIDQ1MDcsIDQ1MTMsIDQ1MTcsIDQ1MTksIDQ1MjMsIDQ1NDcsIDQ1NDksIDQ1NjEsIDQ1NjcsIDQ1ODMsIDQ1OTEsIDQ1OTcsIDQ2MDMsIDQ2MjEsIDQ2MzcsIDQ2MzksIDQ2NDMsIDQ2NDksIDQ2NTEsIDQ2NTcsIDQ2NjMsIDQ2NzMsIDQ2NzksIDQ2OTEsIDQ3MDMsIDQ3MjEsIDQ3MjMsIDQ3MjksIDQ3MzMsIDQ3NTEsIDQ3NTksIDQ3ODMsIDQ3ODcsIDQ3ODksIDQ3OTMsIDQ3OTksIDQ4MDEsIDQ4MTMsIDQ4MTcsIDQ4MzEsIDQ4NjEsIDQ4NzEsIDQ4NzcsIDQ4ODksIDQ5MDMsIDQ5MDksIDQ5MTksIDQ5MzEsIDQ5MzMsIDQ5MzcsIDQ5NDMsIDQ5NTEsIDQ5NTcsIDQ5NjcsIDQ5NjksIDQ5NzMsIDQ5ODcsIDQ5OTMsIDQ5OTldO1xuXG59LHtcIi4uL3JhbmRvbVwiOjM1NSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDIsXCJibi5qc1wiOjQ0fV0sMzU0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX3Byb21pc2UgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfYm4gPSBfZGVyZXFfKCdibi5qcycpO1xuXG52YXIgX2JuMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JuKTtcblxudmFyIF9wcmltZSA9IF9kZXJlcV8oJy4vcHJpbWUnKTtcblxudmFyIF9wcmltZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcmltZSk7XG5cbnZhciBfcmFuZG9tID0gX2RlcmVxXygnLi4vcmFuZG9tJyk7XG5cbnZhciBfcmFuZG9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhbmRvbSk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi4vLi4vY29uZmlnJyk7XG5cbnZhciBfY29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uLy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBIZWxwZXIgZm9yIElFMTEgS2V5T3BlcmF0aW9uIG9iamVjdHNcbmZ1bmN0aW9uIHByb21pc2lmeUlFMTFPcChrZXlPYmosIGVycikge1xuICBpZiAodHlwZW9mIGtleU9iai50aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSUUxMSBLZXlPcGVyYXRpb25cbiAgICByZXR1cm4gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGtleU9iai5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGVycikpO1xuICAgICAgfTtcbiAgICAgIGtleU9iai5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ga2V5T2JqO1xufSAvLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUlNBIGltcGxlbWVudGF0aW9uXG4gKiBAcmVxdWlyZXMgYm4uanNcbiAqIEByZXF1aXJlcyBjcnlwdG8vcHVibGljX2tleS9wcmltZVxuICogQHJlcXVpcmVzIGNyeXB0by9yYW5kb21cbiAqIEByZXF1aXJlcyBjb25maWdcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGNyeXB0by9wdWJsaWNfa2V5L3JzYVxuICovXG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgLyoqIENyZWF0ZSBzaWduYXR1cmVcbiAgICogQHBhcmFtIHtCTn0gbSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Qk59IG4gUlNBIHB1YmxpYyBtb2R1bHVzXG4gICAqIEBwYXJhbSB7Qk59IGUgUlNBIHB1YmxpYyBleHBvbmVudFxuICAgKiBAcGFyYW0ge0JOfSBkIFJTQSBwcml2YXRlIGV4cG9uZW50XG4gICAqIEByZXR1cm5zIHtCTn0gUlNBIFNpZ25hdHVyZVxuICAgKiBAYXN5bmNcbiAgICovXG4gIHNpZ246IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKG0sIG4sIGUsIGQpIHtcbiAgICAgIHZhciBucmVkO1xuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBpZiAoIShuLmNtcChtKSA8PSAwKSkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXNzYWdlIHNpemUgY2Fubm90IGV4Y2VlZCBtb2R1bHVzIHNpemUnKTtcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBucmVkID0gbmV3IF9ibjIuZGVmYXVsdC5yZWQobik7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIG0udG9SZWQobnJlZCkucmVkUG93KGQpLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXksICdiZScsIG4uYnl0ZUxlbmd0aCgpKSk7XG5cbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICB9KSk7XG5cbiAgICBmdW5jdGlvbiBzaWduKF94LCBfeDIsIF94MywgX3g0KSB7XG4gICAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduO1xuICB9KCksXG5cbiAgLyoqXG4gICAqIFZlcmlmeSBzaWduYXR1cmVcbiAgICogQHBhcmFtIHtCTn0gcyBzaWduYXR1cmVcbiAgICogQHBhcmFtIHtCTn0gbiBSU0EgcHVibGljIG1vZHVsdXNcbiAgICogQHBhcmFtIHtCTn0gZSBSU0EgcHVibGljIGV4cG9uZW50XG4gICAqIEByZXR1cm5zIHtCTn1cbiAgICogQGFzeW5jXG4gICAqL1xuICB2ZXJpZnk6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIocywgbiwgZSkge1xuICAgICAgdmFyIG5yZWQ7XG4gICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBpZiAoIShuLmNtcChzKSA8PSAwKSkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lnbmF0dXJlIHNpemUgY2Fubm90IGV4Y2VlZCBtb2R1bHVzIHNpemUnKTtcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBucmVkID0gbmV3IF9ibjIuZGVmYXVsdC5yZWQobik7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBzLnRvUmVkKG5yZWQpLnJlZFBvdyhlKS50b0FycmF5TGlrZShVaW50OEFycmF5LCAnYmUnLCBuLmJ5dGVMZW5ndGgoKSkpO1xuXG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgICB9KSk7XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnkoX3g1LCBfeDYsIF94Nykge1xuICAgICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmeTtcbiAgfSgpLFxuXG4gIC8qKlxuICAgKiBFbmNyeXB0IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtCTn0gbSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Qk59IG4gUlNBIHB1YmxpYyBtb2R1bHVzXG4gICAqIEBwYXJhbSB7Qk59IGUgUlNBIHB1YmxpYyBleHBvbmVudFxuICAgKiBAcmV0dXJucyB7Qk59IFJTQSBDaXBoZXJ0ZXh0XG4gICAqIEBhc3luY1xuICAgKi9cbiAgZW5jcnlwdDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhtLCBuLCBlKSB7XG4gICAgICB2YXIgbnJlZDtcbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGlmICghKG4uY21wKG0pIDw9IDApKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXNzYWdlIHNpemUgY2Fubm90IGV4Y2VlZCBtb2R1bHVzIHNpemUnKTtcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBucmVkID0gbmV3IF9ibjIuZGVmYXVsdC5yZWQobik7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCdyZXR1cm4nLCBtLnRvUmVkKG5yZWQpLnJlZFBvdyhlKS50b0FycmF5TGlrZShVaW50OEFycmF5LCAnYmUnLCBuLmJ5dGVMZW5ndGgoKSkpO1xuXG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWUzLCB0aGlzKTtcbiAgICB9KSk7XG5cbiAgICBmdW5jdGlvbiBlbmNyeXB0KF94OCwgX3g5LCBfeDEwKSB7XG4gICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5jcnlwdDtcbiAgfSgpLFxuXG4gIC8qKlxuICAgKiBEZWNyeXB0IFJTQSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Qk59IG0gbWVzc2FnZVxuICAgKiBAcGFyYW0ge0JOfSBuIFJTQSBwdWJsaWMgbW9kdWx1c1xuICAgKiBAcGFyYW0ge0JOfSBlIFJTQSBwdWJsaWMgZXhwb25lbnRcbiAgICogQHBhcmFtIHtCTn0gZCBSU0EgcHJpdmF0ZSBleHBvbmVudFxuICAgKiBAcGFyYW0ge0JOfSBwIFJTQSBwcml2YXRlIHByaW1lIHBcbiAgICogQHBhcmFtIHtCTn0gcSBSU0EgcHJpdmF0ZSBwcmltZSBxXG4gICAqIEBwYXJhbSB7Qk59IHUgUlNBIHByaXZhdGUgaW52ZXJzZSBvZiBwcmltZSBxXG4gICAqIEByZXR1cm5zIHtCTn0gUlNBIFBsYWludGV4dFxuICAgKiBAYXN5bmNcbiAgICovXG4gIGRlY3J5cHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZjQgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQobSwgbiwgZSwgZCwgcCwgcSwgdSkge1xuICAgICAgdmFyIGRxLCBkcCwgcHJlZCwgcXJlZCwgbnJlZCwgYmxpbmRlciwgdW5ibGluZGVyLCBtcCwgbXEsIHQsIGgsIHJlc3VsdDtcbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGlmICghKG4uY21wKG0pIDw9IDApKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIHRvbyBsYXJnZS4nKTtcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBkcSA9IGQubW9kKHEuc3VibigxKSk7IC8vIGQgbW9kIChxLTEpXG5cbiAgICAgICAgICAgICAgZHAgPSBkLm1vZChwLnN1Ym4oMSkpOyAvLyBkIG1vZCAocC0xKVxuXG4gICAgICAgICAgICAgIHByZWQgPSBuZXcgX2JuMi5kZWZhdWx0LnJlZChwKTtcbiAgICAgICAgICAgICAgcXJlZCA9IG5ldyBfYm4yLmRlZmF1bHQucmVkKHEpO1xuICAgICAgICAgICAgICBucmVkID0gbmV3IF9ibjIuZGVmYXVsdC5yZWQobik7XG4gICAgICAgICAgICAgIGJsaW5kZXIgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIHVuYmxpbmRlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICBpZiAoIV9jb25maWcyLmRlZmF1bHQucnNhX2JsaW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxNjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgIHJldHVybiBfcmFuZG9tMi5kZWZhdWx0LmdldFJhbmRvbUJOKG5ldyBfYm4yLmRlZmF1bHQoMiksIG4pO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICBfY29udGV4dDQudDAgPSBucmVkO1xuICAgICAgICAgICAgICB1bmJsaW5kZXIgPSBfY29udGV4dDQuc2VudC50b1JlZChfY29udGV4dDQudDApO1xuXG4gICAgICAgICAgICAgIGJsaW5kZXIgPSB1bmJsaW5kZXIucmVkSW52bSgpLnJlZFBvdyhlKTtcbiAgICAgICAgICAgICAgbSA9IG0udG9SZWQobnJlZCkucmVkTXVsKGJsaW5kZXIpLmZyb21SZWQoKTtcblxuICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgbXAgPSBtLnRvUmVkKHByZWQpLnJlZFBvdyhkcCk7XG4gICAgICAgICAgICAgIG1xID0gbS50b1JlZChxcmVkKS5yZWRQb3coZHEpO1xuICAgICAgICAgICAgICB0ID0gbXEucmVkU3ViKG1wLmZyb21SZWQoKS50b1JlZChxcmVkKSk7XG4gICAgICAgICAgICAgIGggPSB1LnRvUmVkKHFyZWQpLnJlZE11bCh0KS5mcm9tUmVkKCk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IGgubXVsKHApLmFkZChtcCkudG9SZWQobnJlZCk7XG5cblxuICAgICAgICAgICAgICBpZiAoX2NvbmZpZzIuZGVmYXVsdC5yc2FfYmxpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVkTXVsKHVuYmxpbmRlcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdCgncmV0dXJuJywgcmVzdWx0LnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXksICdiZScsIG4uYnl0ZUxlbmd0aCgpKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWU0LCB0aGlzKTtcbiAgICB9KSk7XG5cbiAgICBmdW5jdGlvbiBkZWNyeXB0KF94MTEsIF94MTIsIF94MTMsIF94MTQsIF94MTUsIF94MTYsIF94MTcpIHtcbiAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNyeXB0O1xuICB9KCksXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IHJhbmRvbSBwcml2YXRlIGtleSBCIGJpdHMgbG9uZyB3aXRoIHB1YmxpYyBleHBvbmVudCBFLlxuICAgKlxuICAgKiBXaGVuIHBvc3NpYmxlLCB3ZWJDcnlwdG8gaXMgdXNlZC4gT3RoZXJ3aXNlLCBwcmltZXMgYXJlIGdlbmVyYXRlZCB1c2luZ1xuICAgKiA0MCByb3VuZHMgb2YgdGhlIE1pbGxlci1SYWJpbiBwcm9iYWJpbGlzdGljIHJhbmRvbSBwcmltZSBnZW5lcmF0aW9uIGFsZ29yaXRobS5cbiAgICogQHNlZSBtb2R1bGU6Y3J5cHRvL3B1YmxpY19rZXkvcHJpbWVcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBCIFJTQSBiaXQgbGVuZ3RoXG4gICAqIEBwYXJhbSB7U3RyaW5nfSAgRSBSU0EgcHVibGljIGV4cG9uZW50IGluIGhleCBzdHJpbmdcbiAgICogQHJldHVybnMge3tuOiBCTiwgZTogQk4sIGQ6IEJOLFxuICAgKiAgICAgICAgICAgIHA6IEJOLCBxOiBCTiwgdTogQk59fSBSU0EgcHVibGljIG1vZHVsdXMsIFJTQSBwdWJsaWMgZXhwb25lbnQsIFJTQSBwcml2YXRlIGV4cG9uZW50LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0EgcHJpdmF0ZSBwcmltZSBwLCBSU0EgcHJpdmF0ZSBwcmltZSBxLCB1ID0gcSAqKiAtMSBtb2QgcFxuICAgKiBAYXN5bmNcbiAgICovXG4gIGdlbmVyYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWY1ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1KEIsIEUpIHtcbiAgICAgIHZhciBrZXksIHdlYkNyeXB0bywga2V5UGFpciwga2V5R2VuT3B0LCBqd2ssIHAsIHEsIF9yZWY2LCBwaGk7XG5cbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGtleSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICBFID0gbmV3IF9ibjIuZGVmYXVsdChFLCAxNik7XG4gICAgICAgICAgICAgIHdlYkNyeXB0byA9IF91dGlsMi5kZWZhdWx0LmdldFdlYkNyeXB0b0FsbCgpO1xuXG4gICAgICAgICAgICAgIC8vIE5hdGl2ZSBSU0Ega2V5Z2VuIHVzaW5nIFdlYiBDcnlwdG9cblxuICAgICAgICAgICAgICBpZiAoIXdlYkNyeXB0bykge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMzU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBrZXlQYWlyID0gdm9pZCAwO1xuICAgICAgICAgICAgICBrZXlHZW5PcHQgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgaWYgKCEod2luZG93LmNyeXB0byAmJiB3aW5kb3cuY3J5cHRvLnN1YnRsZSB8fCB3aW5kb3cubXNDcnlwdG8pKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAxNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGN1cnJlbnQgc3RhbmRhcmQgc3BlY1xuICAgICAgICAgICAgICBrZXlHZW5PcHQgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JTQVNTQS1QS0NTMS12MV81JyxcbiAgICAgICAgICAgICAgICBtb2R1bHVzTGVuZ3RoOiBCLCAvLyB0aGUgc3BlY2lmaWVkIGtleXNpemUgaW4gYml0c1xuICAgICAgICAgICAgICAgIHB1YmxpY0V4cG9uZW50OiBFLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXkpLCAvLyB0YWtlIHRocmVlIGJ5dGVzIChtYXggNjU1MzcpIGZvciBleHBvbmVudFxuICAgICAgICAgICAgICAgIGhhc2g6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEEtMScgLy8gbm90IHJlcXVpcmVkIGZvciBhY3R1YWwgUlNBIGtleXMsIGJ1dCBmb3IgY3J5cHRvIGFwaSAnc2lnbicgYW5kICd2ZXJpZnknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBrZXlQYWlyID0gd2ViQ3J5cHRvLmdlbmVyYXRlS2V5KGtleUdlbk9wdCwgdHJ1ZSwgWydzaWduJywgJ3ZlcmlmeSddKTtcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2lmeUlFMTFPcChrZXlQYWlyLCAnRXJyb3IgZ2VuZXJhdGluZyBSU0Ega2V5IHBhaXIuJyk7XG5cbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIGtleVBhaXIgPSBfY29udGV4dDUuc2VudDtcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAyMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgIGlmICghKHdpbmRvdy5jcnlwdG8gJiYgd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGUpKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAyMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIG91dGRhdGVkIHNwZWMgaW1wbGVtZW50ZWQgYnkgb2xkIFdlYmtpdFxuICAgICAgICAgICAgICBrZXlHZW5PcHQgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JTQS1PQUVQJyxcbiAgICAgICAgICAgICAgICBtb2R1bHVzTGVuZ3RoOiBCLCAvLyB0aGUgc3BlY2lmaWVkIGtleXNpemUgaW4gYml0c1xuICAgICAgICAgICAgICAgIHB1YmxpY0V4cG9uZW50OiBFLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXkpLCAvLyB0YWtlIHRocmVlIGJ5dGVzIChtYXggNjU1MzcpIGZvciBleHBvbmVudFxuICAgICAgICAgICAgICAgIGhhc2g6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEEtMScgLy8gbm90IHJlcXVpcmVkIGZvciBhY3R1YWwgUlNBIGtleXMsIGJ1dCBmb3IgY3J5cHRvIGFwaSAnc2lnbicgYW5kICd2ZXJpZnknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDE4O1xuICAgICAgICAgICAgICByZXR1cm4gd2ViQ3J5cHRvLmdlbmVyYXRlS2V5KGtleUdlbk9wdCwgdHJ1ZSwgWydlbmNyeXB0JywgJ2RlY3J5cHQnXSk7XG5cbiAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgIGtleVBhaXIgPSBfY29udGV4dDUuc2VudDtcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAyMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBXZWJDcnlwdG8gaW1wbGVtZW50YXRpb24nKTtcblxuICAgICAgICAgICAgY2FzZSAyMjpcblxuICAgICAgICAgICAgICAvLyBleHBvcnQgdGhlIGdlbmVyYXRlZCBrZXlzIGFzIEpzb25XZWJLZXkgKEpXSylcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtam9zZS1qc29uLXdlYi1rZXktMzNcbiAgICAgICAgICAgICAgandrID0gd2ViQ3J5cHRvLmV4cG9ydEtleSgnandrJywga2V5UGFpci5wcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2lmeUlFMTFPcChqd2ssICdFcnJvciBleHBvcnRpbmcgUlNBIGtleSBwYWlyLicpO1xuXG4gICAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgICBqd2sgPSBfY29udGV4dDUuc2VudDtcblxuXG4gICAgICAgICAgICAgIC8vIHBhcnNlIHJhdyBBcnJheUJ1ZmZlciBieXRlcyB0byBqd2svanNvbiAoV2ViS2l0L1NhZmFyaS9JRTExIHF1aXJrKVxuICAgICAgICAgICAgICBpZiAoandrIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICBqd2sgPSBKU09OLnBhcnNlKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoandrKSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gbWFwIEpXSyBwYXJhbWV0ZXJzIHRvIEJOXG4gICAgICAgICAgICAgIGtleSA9IHt9O1xuICAgICAgICAgICAgICBrZXkubiA9IG5ldyBfYm4yLmRlZmF1bHQoX3V0aWwyLmRlZmF1bHQuYjY0X3RvX1VpbnQ4QXJyYXkoandrLm4pKTtcbiAgICAgICAgICAgICAga2V5LmUgPSBFO1xuICAgICAgICAgICAgICBrZXkuZCA9IG5ldyBfYm4yLmRlZmF1bHQoX3V0aWwyLmRlZmF1bHQuYjY0X3RvX1VpbnQ4QXJyYXkoandrLmQpKTtcbiAgICAgICAgICAgICAga2V5LnAgPSBuZXcgX2JuMi5kZWZhdWx0KF91dGlsMi5kZWZhdWx0LmI2NF90b19VaW50OEFycmF5KGp3ay5wKSk7XG4gICAgICAgICAgICAgIGtleS5xID0gbmV3IF9ibjIuZGVmYXVsdChfdXRpbDIuZGVmYXVsdC5iNjRfdG9fVWludDhBcnJheShqd2sucSkpO1xuICAgICAgICAgICAgICBrZXkudSA9IGtleS5wLmludm0oa2V5LnEpO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LmFicnVwdCgncmV0dXJuJywga2V5KTtcblxuICAgICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAzNztcbiAgICAgICAgICAgICAgcmV0dXJuIF9wcmltZTIuZGVmYXVsdC5yYW5kb21Qcm9iYWJsZVByaW1lKEIgLSAoQiA+PiAxKSwgRSwgNDApO1xuXG4gICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICBwID0gX2NvbnRleHQ1LnNlbnQ7XG4gICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gNDA7XG4gICAgICAgICAgICAgIHJldHVybiBfcHJpbWUyLmRlZmF1bHQucmFuZG9tUHJvYmFibGVQcmltZShCID4+IDEsIEUsIDQwKTtcblxuICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgcSA9IF9jb250ZXh0NS5zZW50O1xuXG5cbiAgICAgICAgICAgICAgaWYgKHAuY21wKHEpIDwgMCkge1xuICAgICAgICAgICAgICAgIF9yZWY2ID0gW3EsIHBdO1xuICAgICAgICAgICAgICAgIHAgPSBfcmVmNlswXTtcbiAgICAgICAgICAgICAgICBxID0gX3JlZjZbMV07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBwaGkgPSBwLnN1Ym4oMSkubXVsKHEuc3VibigxKSk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuYWJydXB0KCdyZXR1cm4nLCB7XG4gICAgICAgICAgICAgICAgbjogcC5tdWwocSksXG4gICAgICAgICAgICAgICAgZTogRSxcbiAgICAgICAgICAgICAgICBkOiBFLmludm0ocGhpKSxcbiAgICAgICAgICAgICAgICBwOiBwLFxuICAgICAgICAgICAgICAgIHE6IHEsXG4gICAgICAgICAgICAgICAgLy8gZHA6IGQubW9kKHAuc3VibigxKSksXG4gICAgICAgICAgICAgICAgLy8gZHE6IGQubW9kKHEuc3VibigxKSksXG4gICAgICAgICAgICAgICAgdTogcC5pbnZtKHEpXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlNSwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGUoX3gxOCwgX3gxOSkge1xuICAgICAgcmV0dXJuIF9yZWY1LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlbmVyYXRlO1xuICB9KCksXG5cbiAgcHJpbWU6IF9wcmltZTIuZGVmYXVsdFxufTtcblxufSx7XCIuLi8uLi9jb25maWdcIjozMjUsXCIuLi8uLi91dGlsXCI6Mzk4LFwiLi4vcmFuZG9tXCI6MzU1LFwiLi9wcmltZVwiOjM1MyxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlXCI6MzIsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyLFwiYm4uanNcIjo0NH1dLDM1NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVnZW5lcmF0b3IgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yJyk7XG5cbnZhciBfcmVnZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpO1xuXG52YXIgX3R5cGVvZjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mJyk7XG5cbnZhciBfdHlwZW9mMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3InKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jVG9HZW5lcmF0b3IyKTtcblxudmFyIF9ibiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG5cbnZhciBfYm4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYm4pO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gRG8gbm90IHVzZSB1dGlsLmdldE5vZGVDcnlwdG8gYmVjYXVzZSB3ZSBuZWVkIHRoaXMgcmVnYXJkbGVzcyBvZiB1c2VfbmF0aXZlIHNldHRpbmdcbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8vIFRoZSBHUEc0QnJvd3NlcnMgY3J5cHRvIGludGVyZmFjZVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUHJvdmlkZXMgdG9vbHMgZm9yIHJldHJpZXZpbmcgc2VjdXJlIHJhbmRvbW5lc3MgZnJvbSBicm93c2VycyBvciBOb2RlLmpzXG4gKiBAcmVxdWlyZXMgYm4uanNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGNyeXB0by9yYW5kb21cbiAqL1xuXG52YXIgbm9kZUNyeXB0byA9IF91dGlsMi5kZWZhdWx0LmRldGVjdE5vZGUoKSAmJiBfZGVyZXFfKCdjcnlwdG8nKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAvKipcbiAgICogUmV0cmlldmUgc2VjdXJlIHJhbmRvbSBieXRlIGFycmF5IG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gbGVuZ3RoIExlbmd0aCBpbiBieXRlcyB0byBnZW5lcmF0ZVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gUmFuZG9tIGJ5dGUgYXJyYXlcbiAgICogQGFzeW5jXG4gICAqL1xuICBnZXRSYW5kb21CeXRlczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUobGVuZ3RoKSB7XG4gICAgICB2YXIgYnVmLCBieXRlcztcbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICBpZiAoISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY3J5cHRvICYmIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmKTtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIwO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBpZiAoISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkod2luZG93Lm1zQ3J5cHRvKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgaWYgKCFub2RlQ3J5cHRvKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnl0ZXMgPSBub2RlQ3J5cHRvLnJhbmRvbUJ5dGVzKGJ1Zi5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgIGJ1Zi5zZXQoYnl0ZXMpO1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICBpZiAoIXRoaXMucmFuZG9tQnVmZmVyLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxOTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNztcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZG9tQnVmZmVyLmdldChidWYpO1xuXG4gICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhdmFpbGFibGUuJyk7XG5cbiAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIGJ1Zik7XG5cbiAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmFuZG9tQnl0ZXMoX3gpIHtcbiAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFJhbmRvbUJ5dGVzO1xuICB9KCksXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNlY3VyZSByYW5kb20gTVBJIHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pbiBhbmQgbGVzcyB0aGFuIG1heC5cbiAgICogQHBhcmFtIHttb2R1bGU6dHlwZS9tcGl9IG1pbiBMb3dlciBib3VuZCwgaW5jbHVkZWRcbiAgICogQHBhcmFtIHttb2R1bGU6dHlwZS9tcGl9IG1heCBVcHBlciBib3VuZCwgZXhjbHVkZWRcbiAgICogQHJldHVybnMge21vZHVsZTpCTn0gUmFuZG9tIE1QSVxuICAgKiBAYXN5bmNcbiAgICovXG4gIGdldFJhbmRvbUJOOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKG1pbiwgbWF4KSB7XG4gICAgICB2YXIgbW9kdWx1cywgYnl0ZXMsIHI7XG4gICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBpZiAoIShtYXguY21wKG1pbikgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgcGFyYW1ldGVyIHZhbHVlOiBtYXggPD0gbWluJyk7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbW9kdWx1cyA9IG1heC5zdWIobWluKTtcbiAgICAgICAgICAgICAgYnl0ZXMgPSBtb2R1bHVzLmJ5dGVMZW5ndGgoKTtcblxuICAgICAgICAgICAgICAvLyBVc2luZyBhIHdoaWxlIGxvb3AgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGJpYXMgaW50cm9kdWNlZCBieSB0aGUgbW9kIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgcmVxdWVzdCA2NCBleHRyYSByYW5kb20gYml0cyBzbyB0aGF0IHRoZSBiaWFzIGlzIG5lZ2xpZ2libGUuXG4gICAgICAgICAgICAgIC8vIFNlY3Rpb24gQi4xLjEgaGVyZTogaHR0cHM6Ly9udmxwdWJzLm5pc3QuZ292L25pc3RwdWJzL0ZJUFMvTklTVC5GSVBTLjE4Ni00LnBkZlxuXG4gICAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9ibjIuZGVmYXVsdDtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA3O1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5kb21CeXRlcyhieXRlcyArIDgpO1xuXG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi50MSA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgICByID0gbmV3IF9jb250ZXh0Mi50MChfY29udGV4dDIudDEpO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgci5tb2QobW9kdWx1cykuYWRkKG1pbikpO1xuXG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmFuZG9tQk4oX3gyLCBfeDMpIHtcbiAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRSYW5kb21CTjtcbiAgfSgpLFxuXG4gIHJhbmRvbUJ1ZmZlcjogbmV3IFJhbmRvbUJ1ZmZlcigpXG59O1xuXG4vKipcbiAqIEJ1ZmZlciBmb3Igc2VjdXJlIHJhbmRvbSBudW1iZXJzXG4gKi9cblxuZnVuY3Rpb24gUmFuZG9tQnVmZmVyKCkge1xuICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gIHRoaXMuc2l6ZSA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYnVmZmVyXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBzaXplIHNpemUgb2YgYnVmZmVyXG4gKi9cblJhbmRvbUJ1ZmZlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChzaXplLCBjYWxsYmFjaykge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIENvbmNhdCBhcnJheSBvZiBzZWN1cmUgcmFuZG9tIG51bWJlcnMgdG8gYnVmZmVyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZlxuICovXG5SYW5kb21CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKCF0aGlzLmJ1ZmZlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignUmFuZG9tQnVmZmVyIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICB9XG4gIGlmICghKGJ1ZiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGU6IGJ1ZiBub3QgYW4gVWludDhBcnJheScpO1xuICB9XG4gIHZhciBmcmVlU3BhY2UgPSB0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLnNpemU7XG4gIGlmIChidWYubGVuZ3RoID4gZnJlZVNwYWNlKSB7XG4gICAgYnVmID0gYnVmLnN1YmFycmF5KDAsIGZyZWVTcGFjZSk7XG4gIH1cbiAgLy8gc2V0IGJ1ZiB3aXRoIG9mZnNldCBvbGQgc2l6ZSBvZiBidWZmZXJcbiAgdGhpcy5idWZmZXIuc2V0KGJ1ZiwgdGhpcy5zaXplKTtcbiAgdGhpcy5zaXplICs9IGJ1Zi5sZW5ndGg7XG59O1xuXG4vKipcbiAqIFRha2UgbnVtYmVycyBvdXQgb2YgYnVmZmVyIGFuZCBjb3B5IHRvIGFycmF5XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiB0aGUgZGVzdGluYXRpb24gYXJyYXlcbiAqL1xuUmFuZG9tQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhidWYpIHtcbiAgICB2YXIgaTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmFuZG9tQnVmZmVyIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKGJ1ZiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGU6IGJ1ZiBub3QgYW4gVWludDhBcnJheScpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgaWYgKCEodGhpcy5zaXplIDwgYnVmLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmFuZG9tIG51bWJlciBidWZmZXIgZGVwbGV0ZWQnKTtcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gOTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKCk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywgdGhpcy5nZXQoYnVmKSk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBidWZbaV0gPSB0aGlzLmJ1ZmZlclstLXRoaXMuc2l6ZV07XG4gICAgICAgICAgICAgIC8vIGNsZWFyIGJ1ZmZlciB2YWx1ZVxuICAgICAgICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLnNpemVdID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTMsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDQpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxufSx7XCIuLi91dGlsXCI6Mzk4LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2ZcIjo0MSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0MixcImJuLmpzXCI6NDQsXCJjcnlwdG9cIjpcImNyeXB0b1wifV0sMzU2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfZnJvbSA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tJyk7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBfYm4gPSBfZGVyZXFfKCdibi5qcycpO1xuXG52YXIgX2JuMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JuKTtcblxudmFyIF9wdWJsaWNfa2V5ID0gX2RlcmVxXygnLi9wdWJsaWNfa2V5Jyk7XG5cbnZhciBfcHVibGljX2tleTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wdWJsaWNfa2V5KTtcblxudmFyIF9wa2NzID0gX2RlcmVxXygnLi9wa2NzMScpO1xuXG52YXIgX3BrY3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGtjcyk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBzaWduYXR1cmUgcHJvdmlkZWQgZm9yIGRhdGEgdXNpbmcgc3BlY2lmaWVkIGFsZ29yaXRobXMgYW5kIHB1YmxpYyBrZXkgcGFyYW1ldGVycy5cbiAgICogU2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTkuMXxSRkMgNDg4MCA5LjF9XG4gICAqIGFuZCB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi05LjR8UkZDIDQ4ODAgOS40fVxuICAgKiBmb3IgcHVibGljIGtleSBhbmQgaGFzaCBhbGdvcml0aG1zLlxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5wdWJsaWNLZXl9IGFsZ28gICAgICBQdWJsaWMga2V5IGFsZ29yaXRobVxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5oYXNofSAgICAgIGhhc2hfYWxnbyBIYXNoIGFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0FycmF5PG1vZHVsZTp0eXBlL21waT59IG1zZ19NUElzICBBbGdvcml0aG0tc3BlY2lmaWMgc2lnbmF0dXJlIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtBcnJheTxtb2R1bGU6dHlwZS9tcGk+fSBwdWJfTVBJcyAgQWxnb3JpdGhtLXNwZWNpZmljIHB1YmxpYyBrZXkgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9ICAgICAgICAgICAgIGRhdGEgICAgICBEYXRhIGZvciB3aGljaCB0aGUgc2lnbmF0dXJlIHdhcyBjcmVhdGVkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgc2lnbmF0dXJlIGlzIHZhbGlkXG4gICAqIEBhc3luY1xuICAgKi9cbiAgdmVyaWZ5OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShhbGdvLCBoYXNoX2FsZ28sIG1zZ19NUElzLCBwdWJfTVBJcywgZGF0YSkge1xuICAgICAgdmFyIG0sIG4sIGUsIEVNLCBFTTIsIHIsIHMsIHAsIHEsIGcsIHksIG9pZCwgc2lnbmF0dXJlLCBRLCBfb2lkLCBfc2lnbmF0dXJlLCBfUTtcblxuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBfY29udGV4dC50MCA9IGFsZ287XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSBfY29udGV4dC50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdF9zaWduID8gMyA6IF9jb250ZXh0LnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9lbmNyeXB0ID8gMyA6IF9jb250ZXh0LnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9zaWduID8gMyA6IF9jb250ZXh0LnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmRzYSA/IDExIDogX2NvbnRleHQudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2EgPyAxOCA6IF9jb250ZXh0LnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVkZHNhID8gMjIgOiAyNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbSA9IG1zZ19NUElzWzBdLnRvQk4oKTtcbiAgICAgICAgICAgICAgbiA9IHB1Yl9NUElzWzBdLnRvQk4oKTtcbiAgICAgICAgICAgICAgZSA9IHB1Yl9NUElzWzFdLnRvQk4oKTtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDg7XG4gICAgICAgICAgICAgIHJldHVybiBfcHVibGljX2tleTIuZGVmYXVsdC5yc2EudmVyaWZ5KG0sIG4sIGUpO1xuXG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgIEVNID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgICAgRU0yID0gX3BrY3MyLmRlZmF1bHQuZW1zYS5lbmNvZGUoaGFzaF9hbGdvLCBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihkYXRhKSwgbi5ieXRlTGVuZ3RoKCkpO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX2hleChFTSkgPT09IEVNMik7XG5cbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIHIgPSBtc2dfTVBJc1swXS50b0JOKCk7XG4gICAgICAgICAgICAgIHMgPSBtc2dfTVBJc1sxXS50b0JOKCk7XG4gICAgICAgICAgICAgIHAgPSBwdWJfTVBJc1swXS50b0JOKCk7XG4gICAgICAgICAgICAgIHEgPSBwdWJfTVBJc1sxXS50b0JOKCk7XG4gICAgICAgICAgICAgIGcgPSBwdWJfTVBJc1syXS50b0JOKCk7XG4gICAgICAgICAgICAgIHkgPSBwdWJfTVBJc1szXS50b0JOKCk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmRzYS52ZXJpZnkoaGFzaF9hbGdvLCByLCBzLCBkYXRhLCBnLCBwLCBxLCB5KSk7XG5cbiAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgIG9pZCA9IHB1Yl9NUElzWzBdO1xuICAgICAgICAgICAgICBzaWduYXR1cmUgPSB7IHI6IG1zZ19NUElzWzBdLnRvVWludDhBcnJheSgpLCBzOiBtc2dfTVBJc1sxXS50b1VpbnQ4QXJyYXkoKSB9O1xuICAgICAgICAgICAgICBRID0gcHViX01QSXNbMV0udG9VaW50OEFycmF5KCk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmVsbGlwdGljLmVjZHNhLnZlcmlmeShvaWQsIGhhc2hfYWxnbywgc2lnbmF0dXJlLCBkYXRhLCBRKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgIF9vaWQgPSBwdWJfTVBJc1swXTtcbiAgICAgICAgICAgICAgLy8gVE9ETyByZWZhY3RvciBlbGxpcHRpYyB0byBhY2NlcHQgVWludDhBcnJheVxuICAgICAgICAgICAgICAvLyBFZERTQSBzaWduYXR1cmUgcGFyYW1zIGFyZSBleHBlY3RlZCBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdFxuXG4gICAgICAgICAgICAgIF9zaWduYXR1cmUgPSB7IFI6ICgwLCBfZnJvbTIuZGVmYXVsdCkobXNnX01QSXNbMF0udG9VaW50OEFycmF5KCdsZScsIDMyKSksXG4gICAgICAgICAgICAgICAgUzogKDAsIF9mcm9tMi5kZWZhdWx0KShtc2dfTVBJc1sxXS50b1VpbnQ4QXJyYXkoJ2xlJywgMzIpKSB9O1xuICAgICAgICAgICAgICBfUSA9ICgwLCBfZnJvbTIuZGVmYXVsdCkocHViX01QSXNbMV0udG9VaW50OEFycmF5KCdiZScsIDMzKSk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmVsbGlwdGljLmVkZHNhLnZlcmlmeShfb2lkLCBoYXNoX2FsZ28sIF9zaWduYXR1cmUsIGRhdGEsIF9RKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgYWxnb3JpdGhtLicpO1xuXG4gICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgIH0pKTtcblxuICAgIGZ1bmN0aW9uIHZlcmlmeShfeCwgX3gyLCBfeDMsIF94NCwgX3g1KSB7XG4gICAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZnk7XG4gIH0oKSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNpZ25hdHVyZSBvbiBkYXRhIHVzaW5nIHNwZWNpZmllZCBhbGdvcml0aG1zIGFuZCBwcml2YXRlIGtleSBwYXJhbWV0ZXJzLlxuICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS4xfFJGQyA0ODgwIDkuMX1cbiAgICogYW5kIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTkuNHxSRkMgNDg4MCA5LjR9XG4gICAqIGZvciBwdWJsaWMga2V5IGFuZCBoYXNoIGFsZ29yaXRobXMuXG4gICAqIEBwYXJhbSB7bW9kdWxlOmVudW1zLnB1YmxpY0tleX0gYWxnbyAgICAgICBQdWJsaWMga2V5IGFsZ29yaXRobVxuICAgKiBAcGFyYW0ge21vZHVsZTplbnVtcy5oYXNofSAgICAgIGhhc2hfYWxnbyAgSGFzaCBhbGdvcml0aG1cbiAgICogQHBhcmFtIHtBcnJheTxtb2R1bGU6dHlwZS9tcGk+fSBrZXlfcGFyYW1zIEFsZ29yaXRobS1zcGVjaWZpYyBwdWJsaWMgYW5kIHByaXZhdGUga2V5IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSAgICAgICAgICAgICBkYXRhICAgICAgIERhdGEgdG8gYmUgc2lnbmVkXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmVcbiAgICogQGFzeW5jXG4gICAqL1xuICBzaWduOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKGFsZ28sIGhhc2hfYWxnbywga2V5X3BhcmFtcywgZGF0YSkge1xuICAgICAgdmFyIG4sIGUsIGQsIG0sIHNpZ25hdHVyZSwgcCwgcSwgZywgeCwgX3NpZ25hdHVyZTIsIG9pZCwgX2QsIF9zaWduYXR1cmUzLCBfb2lkMiwgX2QyLCBfc2lnbmF0dXJlNDtcblxuICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgX2NvbnRleHQyLnQwID0gYWxnbztcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSBfY29udGV4dDIudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkucnNhX2VuY3J5cHRfc2lnbiA/IDMgOiBfY29udGV4dDIudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkucnNhX2VuY3J5cHQgPyAzIDogX2NvbnRleHQyLnQwID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9zaWduID8gMyA6IF9jb250ZXh0Mi50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5kc2EgPyAxMiA6IF9jb250ZXh0Mi50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lbGdhbWFsID8gMjAgOiBfY29udGV4dDIudDAgPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2EgPyAyMSA6IF9jb250ZXh0Mi50MCA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lZGRzYSA/IDI3IDogMzM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIG4gPSBrZXlfcGFyYW1zWzBdLnRvQk4oKTtcbiAgICAgICAgICAgICAgZSA9IGtleV9wYXJhbXNbMV0udG9CTigpO1xuICAgICAgICAgICAgICBkID0ga2V5X3BhcmFtc1syXS50b0JOKCk7XG5cbiAgICAgICAgICAgICAgZGF0YSA9IF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKGRhdGEpO1xuICAgICAgICAgICAgICBtID0gbmV3IF9ibjIuZGVmYXVsdChfcGtjczIuZGVmYXVsdC5lbXNhLmVuY29kZShoYXNoX2FsZ28sIGRhdGEsIG4uYnl0ZUxlbmd0aCgpKSwgMTYpO1xuICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDEwO1xuICAgICAgICAgICAgICByZXR1cm4gX3B1YmxpY19rZXkyLmRlZmF1bHQucnNhLnNpZ24obSwgbiwgZSwgZCk7XG5cbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgIHNpZ25hdHVyZSA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19NUEkoc2lnbmF0dXJlKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgIHAgPSBrZXlfcGFyYW1zWzBdLnRvQk4oKTtcbiAgICAgICAgICAgICAgcSA9IGtleV9wYXJhbXNbMV0udG9CTigpO1xuICAgICAgICAgICAgICBnID0ga2V5X3BhcmFtc1syXS50b0JOKCk7XG4gICAgICAgICAgICAgIHggPSBrZXlfcGFyYW1zWzRdLnRvQk4oKTtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxODtcbiAgICAgICAgICAgICAgcmV0dXJuIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmRzYS5zaWduKGhhc2hfYWxnbywgZGF0YSwgZywgcCwgcSwgeCk7XG5cbiAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgIF9zaWduYXR1cmUyID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX01QSShfc2lnbmF0dXJlMi5yKSwgX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19NUEkoX3NpZ25hdHVyZTIucyldKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lnbmluZyB3aXRoIEVsZ2FtYWwgaXMgbm90IGRlZmluZWQgaW4gdGhlIE9wZW5QR1Agc3RhbmRhcmQuJyk7XG5cbiAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgIG9pZCA9IGtleV9wYXJhbXNbMF07XG4gICAgICAgICAgICAgIF9kID0ga2V5X3BhcmFtc1syXS50b1VpbnQ4QXJyYXkoKTtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgcmV0dXJuIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmVsbGlwdGljLmVjZHNhLnNpZ24ob2lkLCBoYXNoX2FsZ28sIGRhdGEsIF9kKTtcblxuICAgICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgICAgX3NpZ25hdHVyZTMgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW191dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fTVBJKF9zaWduYXR1cmUzLnIpLCBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX01QSShfc2lnbmF0dXJlMy5zKV0pKTtcblxuICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgX29pZDIgPSBrZXlfcGFyYW1zWzBdO1xuICAgICAgICAgICAgICBfZDIgPSAoMCwgX2Zyb20yLmRlZmF1bHQpKGtleV9wYXJhbXNbMl0udG9VaW50OEFycmF5KCdiZScsIDMyKSk7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMzE7XG4gICAgICAgICAgICAgIHJldHVybiBfcHVibGljX2tleTIuZGVmYXVsdC5lbGxpcHRpYy5lZGRzYS5zaWduKF9vaWQyLCBoYXNoX2FsZ28sIGRhdGEsIF9kMik7XG5cbiAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICAgIF9zaWduYXR1cmU0ID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX01QSShfc2lnbmF0dXJlNC5SKSwgX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19NUEkoX3NpZ25hdHVyZTQuUyldKSk7XG5cbiAgICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgYWxnb3JpdGhtLicpO1xuXG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gc2lnbihfeDYsIF94NywgX3g4LCBfeDkpIHtcbiAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduO1xuICB9KClcbn07IC8qKlxuICAgICogQGZpbGVvdmVydmlldyBQcm92aWRlcyBmdW5jdGlvbnMgZm9yIGFzeW1tZXRyaWMgc2lnbmluZyBhbmQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvblxuICAgICogQHJlcXVpcmVzIGJuLmpzXG4gICAgKiBAcmVxdWlyZXMgY3J5cHRvL3B1YmxpY19rZXlcbiAgICAqIEByZXF1aXJlcyBjcnlwdG8vcGtjczFcbiAgICAqIEByZXF1aXJlcyBlbnVtc1xuICAgICogQHJlcXVpcmVzIHV0aWxcbiAgICAqIEBtb2R1bGUgY3J5cHRvL3NpZ25hdHVyZVxuICAgKi9cblxufSx7XCIuLi9lbnVtc1wiOjM1OSxcIi4uL3V0aWxcIjozOTgsXCIuL3BrY3MxXCI6MzQyLFwiLi9wdWJsaWNfa2V5XCI6MzUyLFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb21cIjoyMCxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDIsXCJibi5qc1wiOjQ0fV0sMzU3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9iYXNlID0gX2RlcmVxXygnLi9iYXNlNjQuanMnKTtcblxudmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMuanMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi4vY29uZmlnJyk7XG5cbnZhciBfY29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEZpbmRzIG91dCB3aGljaCBBc2NpaSBBcm1vcmluZyB0eXBlIGlzIHVzZWQuIFRocm93cyBlcnJvciBpZiB1bmtub3duIHR5cGUuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHRleHQgW1N0cmluZ10gYXNjaWkgYXJtb3JlZCB0ZXh0XG4gKiBAcmV0dXJucyB7SW50ZWdlcn0gMCA9IE1FU1NBR0UgUEFSVCBuIG9mIG1cbiAqICAgICAgICAgMSA9IE1FU1NBR0UgUEFSVCBuXG4gKiAgICAgICAgIDIgPSBTSUdORUQgTUVTU0FHRVxuICogICAgICAgICAzID0gUEdQIE1FU1NBR0VcbiAqICAgICAgICAgNCA9IFBVQkxJQyBLRVkgQkxPQ0tcbiAqICAgICAgICAgNSA9IFBSSVZBVEUgS0VZIEJMT0NLXG4gKiAgICAgICAgIDYgPSBTSUdOQVRVUkVcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgZW5jb2RpbmcvYmFzZTY0XG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyBjb25maWdcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGVuY29kaW5nL2FybW9yXG4gKi9cblxuZnVuY3Rpb24gZ2V0VHlwZSh0ZXh0KSB7XG4gIHZhciByZUhlYWRlciA9IC9eLS0tLS1CRUdJTiBQR1AgKE1FU1NBR0UsIFBBUlQgXFxkK1xcL1xcZCt8TUVTU0FHRSwgUEFSVCBcXGQrfFNJR05FRCBNRVNTQUdFfE1FU1NBR0V8UFVCTElDIEtFWSBCTE9DS3xQUklWQVRFIEtFWSBCTE9DS3xTSUdOQVRVUkUpLS0tLS0kXFxuL207XG5cbiAgdmFyIGhlYWRlciA9IHRleHQubWF0Y2gocmVIZWFkZXIpO1xuXG4gIGlmICghaGVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEFTQ0lJIGFybW9yIHR5cGUnKTtcbiAgfVxuXG4gIC8vIEJFR0lOIFBHUCBNRVNTQUdFLCBQQVJUIFgvWVxuICAvLyBVc2VkIGZvciBtdWx0aS1wYXJ0IG1lc3NhZ2VzLCB3aGVyZSB0aGUgYXJtb3IgaXMgc3BsaXQgYW1vbmdzdCBZXG4gIC8vIHBhcnRzLCBhbmQgdGhpcyBpcyB0aGUgWHRoIHBhcnQgb3V0IG9mIFkuXG4gIGlmICgvTUVTU0FHRSwgUEFSVCBcXGQrXFwvXFxkKy8udGVzdChoZWFkZXJbMV0pKSB7XG4gICAgcmV0dXJuIF9lbnVtczIuZGVmYXVsdC5hcm1vci5tdWx0aXBhcnRfc2VjdGlvbjtcbiAgfSBlbHNlXG4gICAgLy8gQkVHSU4gUEdQIE1FU1NBR0UsIFBBUlQgWFxuICAgIC8vIFVzZWQgZm9yIG11bHRpLXBhcnQgbWVzc2FnZXMsIHdoZXJlIHRoaXMgaXMgdGhlIFh0aCBwYXJ0IG9mIGFuXG4gICAgLy8gdW5zcGVjaWZpZWQgbnVtYmVyIG9mIHBhcnRzLiBSZXF1aXJlcyB0aGUgTUVTU0FHRS1JRCBBcm1vclxuICAgIC8vIEhlYWRlciB0byBiZSB1c2VkLlxuICAgIGlmICgvTUVTU0FHRSwgUEFSVCBcXGQrLy50ZXN0KGhlYWRlclsxXSkpIHtcbiAgICAgIHJldHVybiBfZW51bXMyLmRlZmF1bHQuYXJtb3IubXVsdGlwYXJ0X2xhc3Q7XG4gICAgfSBlbHNlXG4gICAgICAvLyBCRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0VcbiAgICAgIGlmICgvU0lHTkVEIE1FU1NBR0UvLnRlc3QoaGVhZGVyWzFdKSkge1xuICAgICAgICByZXR1cm4gX2VudW1zMi5kZWZhdWx0LmFybW9yLnNpZ25lZDtcbiAgICAgIH0gZWxzZVxuICAgICAgICAvLyBCRUdJTiBQR1AgTUVTU0FHRVxuICAgICAgICAvLyBVc2VkIGZvciBzaWduZWQsIGVuY3J5cHRlZCwgb3IgY29tcHJlc3NlZCBmaWxlcy5cbiAgICAgICAgaWYgKC9NRVNTQUdFLy50ZXN0KGhlYWRlclsxXSkpIHtcbiAgICAgICAgICByZXR1cm4gX2VudW1zMi5kZWZhdWx0LmFybW9yLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIC8vIEJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLXG4gICAgICAgICAgLy8gVXNlZCBmb3IgYXJtb3JpbmcgcHVibGljIGtleXMuXG4gICAgICAgICAgaWYgKC9QVUJMSUMgS0VZIEJMT0NLLy50ZXN0KGhlYWRlclsxXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBfZW51bXMyLmRlZmF1bHQuYXJtb3IucHVibGljX2tleTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIC8vIEJFR0lOIFBHUCBQUklWQVRFIEtFWSBCTE9DS1xuICAgICAgICAgICAgLy8gVXNlZCBmb3IgYXJtb3JpbmcgcHJpdmF0ZSBrZXlzLlxuICAgICAgICAgICAgaWYgKC9QUklWQVRFIEtFWSBCTE9DSy8udGVzdChoZWFkZXJbMV0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZW51bXMyLmRlZmF1bHQuYXJtb3IucHJpdmF0ZV9rZXk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgLy8gQkVHSU4gUEdQIFNJR05BVFVSRVxuICAgICAgICAgICAgICAvLyBVc2VkIGZvciBkZXRhY2hlZCBzaWduYXR1cmVzLCBPcGVuUEdQL01JTUUgc2lnbmF0dXJlcywgYW5kXG4gICAgICAgICAgICAgIC8vIGNsZWFydGV4dCBzaWduYXR1cmVzLiBOb3RlIHRoYXQgUEdQIDIueCB1c2VzIEJFR0lOIFBHUCBNRVNTQUdFXG4gICAgICAgICAgICAgIC8vIGZvciBkZXRhY2hlZCBzaWduYXR1cmVzLlxuICAgICAgICAgICAgICBpZiAoL1NJR05BVFVSRS8udGVzdChoZWFkZXJbMV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9lbnVtczIuZGVmYXVsdC5hcm1vci5zaWduYXR1cmU7XG4gICAgICAgICAgICAgIH1cbn1cblxuLyoqXG4gKiBBZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byB0aGUgYXJtb3IgdmVyc2lvbiBvZiBhbiBPcGVuUEdQIGJpbmFyeVxuICogcGFja2V0IGJsb2NrLlxuICogQGF1dGhvciAgQWxleFxuICogQHZlcnNpb24gMjAxMS0xMi0xNlxuICogQHBhcmFtIHtTdHJpbmd9IGN1c3RvbUNvbW1lbnQgKG9wdGlvbmFsKSBhZGRpdGlvbmFsIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBhcm1vcmVkIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gVGhlIGhlYWRlciBpbmZvcm1hdGlvblxuICovXG5mdW5jdGlvbiBhZGRoZWFkZXIoY3VzdG9tQ29tbWVudCkge1xuICB2YXIgcmVzdWx0ID0gXCJcIjtcbiAgaWYgKF9jb25maWcyLmRlZmF1bHQuc2hvd192ZXJzaW9uKSB7XG4gICAgcmVzdWx0ICs9IFwiVmVyc2lvbjogXCIgKyBfY29uZmlnMi5kZWZhdWx0LnZlcnNpb25zdHJpbmcgKyAnXFxyXFxuJztcbiAgfVxuICBpZiAoX2NvbmZpZzIuZGVmYXVsdC5zaG93X2NvbW1lbnQpIHtcbiAgICByZXN1bHQgKz0gXCJDb21tZW50OiBcIiArIF9jb25maWcyLmRlZmF1bHQuY29tbWVudHN0cmluZyArICdcXHJcXG4nO1xuICB9XG4gIGlmIChjdXN0b21Db21tZW50KSB7XG4gICAgcmVzdWx0ICs9IFwiQ29tbWVudDogXCIgKyBjdXN0b21Db21tZW50ICsgJ1xcclxcbic7XG4gIH1cbiAgcmVzdWx0ICs9ICdcXHJcXG4nO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSBjaGVja3N1bSBvdmVyIHRoZSBnaXZlbiBkYXRhIGFuZCByZXR1cm5zIGl0IGJhc2U2NCBlbmNvZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YSBEYXRhIHRvIGNyZWF0ZSBhIENSQy0yNCBjaGVja3N1bSBmb3JcbiAqIEByZXR1cm5zIHtTdHJpbmd9IEJhc2U2NCBlbmNvZGVkIGNoZWNrc3VtXG4gKi9cbmZ1bmN0aW9uIGdldENoZWNrU3VtKGRhdGEpIHtcbiAgdmFyIGMgPSBjcmVhdGVjcmMyNChkYXRhKTtcbiAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoW2MgPj4gMTYsIGMgPj4gOCAmIDB4RkYsIGMgJiAweEZGXSk7XG4gIHJldHVybiBfYmFzZTIuZGVmYXVsdC5lbmNvZGUoYnl0ZXMpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNoZWNrc3VtIG92ZXIgdGhlIGdpdmVuIGRhdGEgYW5kIGNvbXBhcmVzIGl0IHdpdGggdGhlXG4gKiBnaXZlbiBiYXNlNjQgZW5jb2RlZCBjaGVja3N1bVxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgRGF0YSB0byBjcmVhdGUgYSBDUkMtMjQgY2hlY2tzdW0gZm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gY2hlY2tzdW0gQmFzZTY0IGVuY29kZWQgY2hlY2tzdW1cbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBnaXZlbiBjaGVja3N1bSBpcyBjb3JyZWN0OyBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gdmVyaWZ5Q2hlY2tTdW0oZGF0YSwgY2hlY2tzdW0pIHtcbiAgdmFyIGMgPSBnZXRDaGVja1N1bShkYXRhKTtcbiAgdmFyIGQgPSBjaGVja3N1bTtcbiAgcmV0dXJuIGNbMF0gPT09IGRbMF0gJiYgY1sxXSA9PT0gZFsxXSAmJiBjWzJdID09PSBkWzJdICYmIGNbM10gPT09IGRbM107XG59XG4vKipcbiAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIENSQy0yNCBjaGVja3N1bSBvdmVyIGEgZ2l2ZW4gc3RyaW5nIChkYXRhKVxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgRGF0YSB0byBjcmVhdGUgYSBDUkMtMjQgY2hlY2tzdW0gZm9yXG4gKiBAcmV0dXJucyB7SW50ZWdlcn0gVGhlIENSQy0yNCBjaGVja3N1bSBhcyBudW1iZXJcbiAqL1xudmFyIGNyY190YWJsZSA9IFsweDAwMDAwMDAwLCAweDAwODY0Y2ZiLCAweDAxOGFkNTBkLCAweDAxMGM5OWY2LCAweDAzOTNlNmUxLCAweDAzMTVhYTFhLCAweDAyMTkzM2VjLCAweDAyOWY3ZjE3LCAweDA3YTE4MTM5LCAweDA3MjdjZGMyLCAweDA2MmI1NDM0LCAweDA2YWQxOGNmLCAweDA0MzI2N2Q4LCAweDA0YjQyYjIzLCAweDA1YjhiMmQ1LCAweDA1M2VmZTJlLCAweDBmYzU0ZTg5LCAweDBmNDMwMjcyLCAweDBlNGY5Yjg0LCAweDBlYzlkNzdmLCAweDBjNTZhODY4LCAweDBjZDBlNDkzLCAweDBkZGM3ZDY1LCAweDBkNWEzMTllLCAweDA4NjRjZmIwLCAweDA4ZTI4MzRiLCAweDA5ZWUxYWJkLCAweDA5Njg1NjQ2LCAweDBiZjcyOTUxLCAweDBiNzE2NWFhLCAweDBhN2RmYzVjLCAweDBhZmJiMGE3LCAweDFmMGNkMWU5LCAweDFmOGE5ZDEyLCAweDFlODYwNGU0LCAweDFlMDA0ODFmLCAweDFjOWYzNzA4LCAweDFjMTk3YmYzLCAweDFkMTVlMjA1LCAweDFkOTNhZWZlLCAweDE4YWQ1MGQwLCAweDE4MmIxYzJiLCAweDE5Mjc4NWRkLCAweDE5YTFjOTI2LCAweDFiM2ViNjMxLCAweDFiYjhmYWNhLCAweDFhYjQ2MzNjLCAweDFhMzIyZmM3LCAweDEwYzk5ZjYwLCAweDEwNGZkMzliLCAweDExNDM0YTZkLCAweDExYzUwNjk2LCAweDEzNWE3OTgxLCAweDEzZGMzNTdhLCAweDEyZDBhYzhjLCAweDEyNTZlMDc3LCAweDE3NjgxZTU5LCAweDE3ZWU1MmEyLCAweDE2ZTJjYjU0LCAweDE2NjQ4N2FmLCAweDE0ZmJmOGI4LCAweDE0N2RiNDQzLCAweDE1NzEyZGI1LCAweDE1Zjc2MTRlLCAweDNlMTlhM2QyLCAweDNlOWZlZjI5LCAweDNmOTM3NmRmLCAweDNmMTUzYTI0LCAweDNkOGE0NTMzLCAweDNkMGMwOWM4LCAweDNjMDA5MDNlLCAweDNjODZkY2M1LCAweDM5YjgyMmViLCAweDM5M2U2ZTEwLCAweDM4MzJmN2U2LCAweDM4YjRiYjFkLCAweDNhMmJjNDBhLCAweDNhYWQ4OGYxLCAweDNiYTExMTA3LCAweDNiMjc1ZGZjLCAweDMxZGNlZDViLCAweDMxNWFhMWEwLCAweDMwNTYzODU2LCAweDMwZDA3NGFkLCAweDMyNGYwYmJhLCAweDMyYzk0NzQxLCAweDMzYzVkZWI3LCAweDMzNDM5MjRjLCAweDM2N2Q2YzYyLCAweDM2ZmIyMDk5LCAweDM3ZjdiOTZmLCAweDM3NzFmNTk0LCAweDM1ZWU4YTgzLCAweDM1NjhjNjc4LCAweDM0NjQ1ZjhlLCAweDM0ZTIxMzc1LCAweDIxMTU3MjNiLCAweDIxOTMzZWMwLCAweDIwOWZhNzM2LCAweDIwMTllYmNkLCAweDIyODY5NGRhLCAweDIyMDBkODIxLCAweDIzMGM0MWQ3LCAweDIzOGEwZDJjLCAweDI2YjRmMzAyLCAweDI2MzJiZmY5LCAweDI3M2UyNjBmLCAweDI3Yjg2YWY0LCAweDI1MjcxNWUzLCAweDI1YTE1OTE4LCAweDI0YWRjMGVlLCAweDI0MmI4YzE1LCAweDJlZDAzY2IyLCAweDJlNTY3MDQ5LCAweDJmNWFlOWJmLCAweDJmZGNhNTQ0LCAweDJkNDNkYTUzLCAweDJkYzU5NmE4LCAweDJjYzkwZjVlLCAweDJjNGY0M2E1LCAweDI5NzFiZDhiLCAweDI5ZjdmMTcwLCAweDI4ZmI2ODg2LCAweDI4N2QyNDdkLCAweDJhZTI1YjZhLCAweDJhNjQxNzkxLCAweDJiNjg4ZTY3LCAweDJiZWVjMjljLCAweDdjMzM0N2E0LCAweDdjYjUwYjVmLCAweDdkYjk5MmE5LCAweDdkM2ZkZTUyLCAweDdmYTBhMTQ1LCAweDdmMjZlZGJlLCAweDdlMmE3NDQ4LCAweDdlYWMzOGIzLCAweDdiOTJjNjlkLCAweDdiMTQ4YTY2LCAweDdhMTgxMzkwLCAweDdhOWU1ZjZiLCAweDc4MDEyMDdjLCAweDc4ODc2Yzg3LCAweDc5OGJmNTcxLCAweDc5MGRiOThhLCAweDczZjYwOTJkLCAweDczNzA0NWQ2LCAweDcyN2NkYzIwLCAweDcyZmE5MGRiLCAweDcwNjVlZmNjLCAweDcwZTNhMzM3LCAweDcxZWYzYWMxLCAweDcxNjk3NjNhLCAweDc0NTc4ODE0LCAweDc0ZDFjNGVmLCAweDc1ZGQ1ZDE5LCAweDc1NWIxMWUyLCAweDc3YzQ2ZWY1LCAweDc3NDIyMjBlLCAweDc2NGViYmY4LCAweDc2YzhmNzAzLCAweDYzM2Y5NjRkLCAweDYzYjlkYWI2LCAweDYyYjU0MzQwLCAweDYyMzMwZmJiLCAweDYwYWM3MGFjLCAweDYwMmEzYzU3LCAweDYxMjZhNWExLCAweDYxYTBlOTVhLCAweDY0OWUxNzc0LCAweDY0MTg1YjhmLCAweDY1MTRjMjc5LCAweDY1OTI4ZTgyLCAweDY3MGRmMTk1LCAweDY3OGJiZDZlLCAweDY2ODcyNDk4LCAweDY2MDE2ODYzLCAweDZjZmFkOGM0LCAweDZjN2M5NDNmLCAweDZkNzAwZGM5LCAweDZkZjY0MTMyLCAweDZmNjkzZTI1LCAweDZmZWY3MmRlLCAweDZlZTNlYjI4LCAweDZlNjVhN2QzLCAweDZiNWI1OWZkLCAweDZiZGQxNTA2LCAweDZhZDE4Y2YwLCAweDZhNTdjMDBiLCAweDY4YzhiZjFjLCAweDY4NGVmM2U3LCAweDY5NDI2YTExLCAweDY5YzQyNmVhLCAweDQyMmFlNDc2LCAweDQyYWNhODhkLCAweDQzYTAzMTdiLCAweDQzMjY3ZDgwLCAweDQxYjkwMjk3LCAweDQxM2Y0ZTZjLCAweDQwMzNkNzlhLCAweDQwYjU5YjYxLCAweDQ1OGI2NTRmLCAweDQ1MGQyOWI0LCAweDQ0MDFiMDQyLCAweDQ0ODdmY2I5LCAweDQ2MTg4M2FlLCAweDQ2OWVjZjU1LCAweDQ3OTI1NmEzLCAweDQ3MTQxYTU4LCAweDRkZWZhYWZmLCAweDRkNjllNjA0LCAweDRjNjU3ZmYyLCAweDRjZTMzMzA5LCAweDRlN2M0YzFlLCAweDRlZmEwMGU1LCAweDRmZjY5OTEzLCAweDRmNzBkNWU4LCAweDRhNGUyYmM2LCAweDRhYzg2NzNkLCAweDRiYzRmZWNiLCAweDRiNDJiMjMwLCAweDQ5ZGRjZDI3LCAweDQ5NWI4MWRjLCAweDQ4NTcxODJhLCAweDQ4ZDE1NGQxLCAweDVkMjYzNTlmLCAweDVkYTA3OTY0LCAweDVjYWNlMDkyLCAweDVjMmFhYzY5LCAweDVlYjVkMzdlLCAweDVlMzM5Zjg1LCAweDVmM2YwNjczLCAweDVmYjk0YTg4LCAweDVhODdiNGE2LCAweDVhMDFmODVkLCAweDViMGQ2MWFiLCAweDViOGIyZDUwLCAweDU5MTQ1MjQ3LCAweDU5OTIxZWJjLCAweDU4OWU4NzRhLCAweDU4MThjYmIxLCAweDUyZTM3YjE2LCAweDUyNjUzN2VkLCAweDUzNjlhZTFiLCAweDUzZWZlMmUwLCAweDUxNzA5ZGY3LCAweDUxZjZkMTBjLCAweDUwZmE0OGZhLCAweDUwN2MwNDAxLCAweDU1NDJmYTJmLCAweDU1YzRiNmQ0LCAweDU0YzgyZjIyLCAweDU0NGU2M2Q5LCAweDU2ZDExY2NlLCAweDU2NTc1MDM1LCAweDU3NWJjOWMzLCAweDU3ZGQ4NTM4XTtcblxuZnVuY3Rpb24gY3JlYXRlY3JjMjQoaW5wdXQpIHtcbiAgdmFyIGNyYyA9IDB4QjcwNENFO1xuXG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbnB1dC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjcmMgPSBjcmMgPDwgOCBeIGNyY190YWJsZVsoY3JjID4+IDE2IF4gaW5wdXRbaW5kZXhdKSAmIDB4ZmZdO1xuICB9XG4gIHJldHVybiBjcmMgJiAweGZmZmZmZjtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBtZXNzYWdlIGludG8gdHdvIHBhcnRzLCB0aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkuIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IE9wZW5QR1AgYXJtb3JlZCBtZXNzYWdlIHBhcnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZSBcImhlYWRlcnNcIiBjb250YWluaW5nIHRoZSBoZWFkZXJzXG4gKiBhbmQgYW4gYXR0cmlidXRlIFwiYm9keVwiIGNvbnRhaW5pbmcgdGhlIGJvZHkuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0SGVhZGVycyh0ZXh0KSB7XG4gIC8vIGVtcHR5IGxpbmUgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiAgdmFyIHJlRW1wdHlMaW5lID0gL15bIFxcZlxcclxcdFxcdTAwYTBcXHUyMDAwLVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBdKlxcbi9tO1xuICB2YXIgaGVhZGVycyA9ICcnO1xuICB2YXIgYm9keSA9IHRleHQ7XG5cbiAgdmFyIG1hdGNoUmVzdWx0ID0gcmVFbXB0eUxpbmUuZXhlYyh0ZXh0KTtcblxuICBpZiAobWF0Y2hSZXN1bHQgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzID0gdGV4dC5zbGljZSgwLCBtYXRjaFJlc3VsdC5pbmRleCk7XG4gICAgYm9keSA9IHRleHQuc2xpY2UobWF0Y2hSZXN1bHQuaW5kZXggKyBtYXRjaFJlc3VsdFswXS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignTWFuZGF0b3J5IGJsYW5rIGxpbmUgbWlzc2luZyBiZXR3ZWVuIGFybW9yIGhlYWRlcnMgYW5kIGFybW9yIGRhdGEnKTtcbiAgfVxuXG4gIGhlYWRlcnMgPSBoZWFkZXJzLnNwbGl0KCdcXG4nKTtcbiAgLy8gcmVtb3ZlIGVtcHR5IGVudHJ5XG4gIGhlYWRlcnMucG9wKCk7XG5cbiAgcmV0dXJuIHsgaGVhZGVyczogaGVhZGVycywgYm9keTogYm9keSB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSBhcm1vcmVkIGhlYWRlcnMuIFJGQzQ4ODAsIHNlY3Rpb24gNi4zOiBcIk9wZW5QR1Agc2hvdWxkIGNvbnNpZGVyIGltcHJvcGVybHkgZm9ybWF0dGVkXG4gKiBBcm1vciBIZWFkZXJzIHRvIGJlIGNvcnJ1cHRpb24gb2YgdGhlIEFTQ0lJIEFybW9yLlwiXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QXJyYXk8U3RyaW5nPn0gaGVhZGVycyBBcm1vciBoZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIHZlcmlmeUhlYWRlcnMoaGVhZGVycykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIS9eKFteXFxzOl18W15cXHM6XVteOl0qW15cXHM6XSk6IC4rJC8udGVzdChoZWFkZXJzW2ldKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXByb3Blcmx5IGZvcm1hdHRlZCBhcm1vciBoZWFkZXI6ICcgKyBoZWFkZXJzW2ldKTtcbiAgICB9XG4gICAgaWYgKCEvXihWZXJzaW9ufENvbW1lbnR8TWVzc2FnZUlEfEhhc2h8Q2hhcnNldCk6IC4rJC8udGVzdChoZWFkZXJzW2ldKSkge1xuICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWdfZXJyb3IobmV3IEVycm9yKCdVbmtub3duIGhlYWRlcjogJyArIGhlYWRlcnNbaV0pKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBtZXNzYWdlIGludG8gdHdvIHBhcnRzLCB0aGUgYm9keSBhbmQgdGhlIGNoZWNrc3VtLiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBPcGVuUEdQIGFybW9yZWQgbWVzc2FnZSBwYXJ0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhdHRyaWJ1dGUgXCJib2R5XCIgY29udGFpbmluZyB0aGUgYm9keVxuICogYW5kIGFuIGF0dHJpYnV0ZSBcImNoZWNrc3VtXCIgY29udGFpbmluZyB0aGUgY2hlY2tzdW0uXG4gKi9cbmZ1bmN0aW9uIHNwbGl0Q2hlY2tzdW0odGV4dCkge1xuICB0ZXh0ID0gdGV4dC50cmltKCk7XG4gIHZhciBib2R5ID0gdGV4dDtcbiAgdmFyIGNoZWNrc3VtID0gXCJcIjtcblxuICB2YXIgbGFzdEVxdWFscyA9IHRleHQubGFzdEluZGV4T2YoXCI9XCIpO1xuXG4gIGlmIChsYXN0RXF1YWxzID49IDAgJiYgbGFzdEVxdWFscyAhPT0gdGV4dC5sZW5ndGggLSAxKSB7XG4gICAgLy8gJz0nIGFzIHRoZSBsYXN0IGNoYXIgbWVhbnMgbm8gY2hlY2tzdW1cbiAgICBib2R5ID0gdGV4dC5zbGljZSgwLCBsYXN0RXF1YWxzKTtcbiAgICBjaGVja3N1bSA9IHRleHQuc2xpY2UobGFzdEVxdWFscyArIDEpLnN1YnN0cigwLCA0KTtcbiAgfVxuXG4gIHJldHVybiB7IGJvZHk6IGJvZHksIGNoZWNrc3VtOiBjaGVja3N1bSB9O1xufVxuXG4vKipcbiAqIERlQXJtb3IgYW4gT3BlblBHUCBhcm1vcmVkIG1lc3NhZ2U7IHZlcmlmeSB0aGUgY2hlY2tzdW0gYW5kIHJldHVyblxuICogdGhlIGVuY29kZWQgYnl0ZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IE9wZW5QR1AgYXJtb3JlZCBtZXNzYWdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhdHRyaWJ1dGUgXCJ0ZXh0XCIgY29udGFpbmluZyB0aGUgbWVzc2FnZSB0ZXh0LFxuICogYW4gYXR0cmlidXRlIFwiZGF0YVwiIGNvbnRhaW5pbmcgdGhlIGJ5dGVzIGFuZCBcInR5cGVcIiBmb3IgdGhlIEFTQ0lJIGFybW9yIHR5cGVcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gZGVhcm1vcih0ZXh0KSB7XG4gIHZhciByZVNwbGl0ID0gL14tLS0tLVteLV0rLS0tLS0kXFxuL207XG5cbiAgLy8gdHJpbSBzdHJpbmcgYW5kIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGF0IGVuZCBvZiBsaW5lc1xuICB0ZXh0ID0gdGV4dC50cmltKCkucmVwbGFjZSgvW1xcdFxcciBdK1xcbi9nLCAnXFxuJyk7XG5cbiAgdmFyIHR5cGUgPSBnZXRUeXBlKHRleHQpO1xuXG4gIHRleHQgPSB0ZXh0ICsgXCJcXG5cIjtcbiAgdmFyIHNwbGl0dGV4dCA9IHRleHQuc3BsaXQocmVTcGxpdCk7XG5cbiAgLy8gSUUgaGFzIGEgYnVnIGluIHNwbGl0IHdpdGggYSByZS4gSWYgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuICAvLyBzdHJpbmcgaXQgZG9lc24ndCBjcmVhdGUgYW4gZW1wdHkgYXJyYXkgZWxlbWVudCAwLiBTbyB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzXG4gIC8vIHNvIHdlIGtub3cgdGhlIGluZGV4IG9mIHRoZSBkYXRhIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICB2YXIgaW5kZXhCYXNlID0gMTtcblxuICB2YXIgcmVzdWx0ID0gdm9pZCAwO1xuICB2YXIgY2hlY2tzdW0gPSB2b2lkIDA7XG4gIHZhciBtc2cgPSB2b2lkIDA7XG5cbiAgaWYgKHRleHQuc2VhcmNoKHJlU3BsaXQpICE9PSBzcGxpdHRleHRbMF0ubGVuZ3RoKSB7XG4gICAgaW5kZXhCYXNlID0gMDtcbiAgfVxuXG4gIGlmICh0eXBlICE9PSAyKSB7XG4gICAgbXNnID0gc3BsaXRIZWFkZXJzKHNwbGl0dGV4dFtpbmRleEJhc2VdKTtcbiAgICB2YXIgbXNnX3N1bSA9IHNwbGl0Q2hlY2tzdW0obXNnLmJvZHkpO1xuXG4gICAgcmVzdWx0ID0ge1xuICAgICAgZGF0YTogX2Jhc2UyLmRlZmF1bHQuZGVjb2RlKG1zZ19zdW0uYm9keSksXG4gICAgICBoZWFkZXJzOiBtc2cuaGVhZGVycyxcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9O1xuXG4gICAgY2hlY2tzdW0gPSBtc2dfc3VtLmNoZWNrc3VtO1xuICB9IGVsc2Uge1xuICAgIC8vIFJldmVyc2UgZGFzaC1lc2NhcGluZyBmb3IgbXNnXG4gICAgbXNnID0gc3BsaXRIZWFkZXJzKHNwbGl0dGV4dFtpbmRleEJhc2VdLnJlcGxhY2UoL14tIC9tZywgJycpKTtcbiAgICB2YXIgc2lnID0gc3BsaXRIZWFkZXJzKHNwbGl0dGV4dFtpbmRleEJhc2UgKyAxXS5yZXBsYWNlKC9eLSAvbWcsICcnKSk7XG4gICAgdmVyaWZ5SGVhZGVycyhzaWcuaGVhZGVycyk7XG4gICAgdmFyIHNpZ19zdW0gPSBzcGxpdENoZWNrc3VtKHNpZy5ib2R5KTtcblxuICAgIHJlc3VsdCA9IHtcbiAgICAgIHRleHQ6IG1zZy5ib2R5LnJlcGxhY2UoL1xcbiQvLCAnJykucmVwbGFjZSgvXFxuL2csIFwiXFxyXFxuXCIpLFxuICAgICAgZGF0YTogX2Jhc2UyLmRlZmF1bHQuZGVjb2RlKHNpZ19zdW0uYm9keSksXG4gICAgICBoZWFkZXJzOiBtc2cuaGVhZGVycyxcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9O1xuXG4gICAgY2hlY2tzdW0gPSBzaWdfc3VtLmNoZWNrc3VtO1xuICB9XG5cbiAgaWYgKCF2ZXJpZnlDaGVja1N1bShyZXN1bHQuZGF0YSwgY2hlY2tzdW0pICYmIChjaGVja3N1bSB8fCBfY29uZmlnMi5kZWZhdWx0LmNoZWNrc3VtX3JlcXVpcmVkKSkge1xuICAgIC8vIHdpbGwgTk9UIHRocm93IGVycm9yIGlmIGNoZWNrc3VtIGlzIGVtcHR5IEFORCBjaGVja3N1bSBpcyBub3QgcmVxdWlyZWQgKEdQRyBjb21wYXRpYmlsaXR5KVxuICAgIHRocm93IG5ldyBFcnJvcihcIkFzY2lpIGFybW9yIGludGVncml0eSBjaGVjayBvbiBtZXNzYWdlIGZhaWxlZDogJ1wiICsgY2hlY2tzdW0gKyBcIicgc2hvdWxkIGJlICdcIiArIGdldENoZWNrU3VtKHJlc3VsdC5kYXRhKSArIFwiJ1wiKTtcbiAgfVxuXG4gIHZlcmlmeUhlYWRlcnMocmVzdWx0LmhlYWRlcnMpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQXJtb3IgYW4gT3BlblBHUCBiaW5hcnkgcGFja2V0IGJsb2NrXG4gKiBAcGFyYW0ge0ludGVnZXJ9IG1lc3NhZ2V0eXBlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcbiAqIEBwYXJhbSBib2R5XG4gKiBAcGFyYW0ge0ludGVnZXJ9IHBhcnRpbmRleFxuICogQHBhcmFtIHtJbnRlZ2VyfSBwYXJ0dG90YWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBjdXN0b21Db21tZW50IChvcHRpb25hbCkgYWRkaXRpb25hbCBjb21tZW50IHRvIGFkZCB0byB0aGUgYXJtb3JlZCBzdHJpbmdcbiAqIEByZXR1cm5zIHtTdHJpbmd9IEFybW9yZWQgdGV4dFxuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiBhcm1vcihtZXNzYWdldHlwZSwgYm9keSwgcGFydGluZGV4LCBwYXJ0dG90YWwsIGN1c3RvbUNvbW1lbnQpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBzd2l0Y2ggKG1lc3NhZ2V0eXBlKSB7XG4gICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuYXJtb3IubXVsdGlwYXJ0X3NlY3Rpb246XG4gICAgICByZXN1bHQucHVzaChcIi0tLS0tQkVHSU4gUEdQIE1FU1NBR0UsIFBBUlQgXCIgKyBwYXJ0aW5kZXggKyBcIi9cIiArIHBhcnR0b3RhbCArIFwiLS0tLS1cXHJcXG5cIik7XG4gICAgICByZXN1bHQucHVzaChhZGRoZWFkZXIoY3VzdG9tQ29tbWVudCkpO1xuICAgICAgcmVzdWx0LnB1c2goX2Jhc2UyLmRlZmF1bHQuZW5jb2RlKGJvZHkpKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXFxyXFxuPVwiICsgZ2V0Q2hlY2tTdW0oYm9keSkgKyBcIlxcclxcblwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiLS0tLS1FTkQgUEdQIE1FU1NBR0UsIFBBUlQgXCIgKyBwYXJ0aW5kZXggKyBcIi9cIiArIHBhcnR0b3RhbCArIFwiLS0tLS1cXHJcXG5cIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5hcm1vci5tdWx0aXBhcnRfbGFzdDpcbiAgICAgIHJlc3VsdC5wdXNoKFwiLS0tLS1CRUdJTiBQR1AgTUVTU0FHRSwgUEFSVCBcIiArIHBhcnRpbmRleCArIFwiLS0tLS1cXHJcXG5cIik7XG4gICAgICByZXN1bHQucHVzaChhZGRoZWFkZXIoY3VzdG9tQ29tbWVudCkpO1xuICAgICAgcmVzdWx0LnB1c2goX2Jhc2UyLmRlZmF1bHQuZW5jb2RlKGJvZHkpKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXFxyXFxuPVwiICsgZ2V0Q2hlY2tTdW0oYm9keSkgKyBcIlxcclxcblwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiLS0tLS1FTkQgUEdQIE1FU1NBR0UsIFBBUlQgXCIgKyBwYXJ0aW5kZXggKyBcIi0tLS0tXFxyXFxuXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuYXJtb3Iuc2lnbmVkOlxuICAgICAgcmVzdWx0LnB1c2goXCJcXHJcXG4tLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tXFxyXFxuXCIpO1xuICAgICAgcmVzdWx0LnB1c2goXCJIYXNoOiBcIiArIGJvZHkuaGFzaCArIFwiXFxyXFxuXFxyXFxuXCIpO1xuICAgICAgcmVzdWx0LnB1c2goYm9keS50ZXh0LnJlcGxhY2UoL14tL21nLCBcIi0gLVwiKSk7XG4gICAgICByZXN1bHQucHVzaChcIlxcclxcbi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxyXFxuXCIpO1xuICAgICAgcmVzdWx0LnB1c2goYWRkaGVhZGVyKGN1c3RvbUNvbW1lbnQpKTtcbiAgICAgIHJlc3VsdC5wdXNoKF9iYXNlMi5kZWZhdWx0LmVuY29kZShib2R5LmRhdGEpKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXFxyXFxuPVwiICsgZ2V0Q2hlY2tTdW0oYm9keS5kYXRhKSArIFwiXFxyXFxuXCIpO1xuICAgICAgcmVzdWx0LnB1c2goXCItLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXHJcXG5cIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5hcm1vci5tZXNzYWdlOlxuICAgICAgcmVzdWx0LnB1c2goXCItLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS1cXHJcXG5cIik7XG4gICAgICByZXN1bHQucHVzaChhZGRoZWFkZXIoY3VzdG9tQ29tbWVudCkpO1xuICAgICAgcmVzdWx0LnB1c2goX2Jhc2UyLmRlZmF1bHQuZW5jb2RlKGJvZHkpKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXFxyXFxuPVwiICsgZ2V0Q2hlY2tTdW0oYm9keSkgKyBcIlxcclxcblwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiLS0tLS1FTkQgUEdQIE1FU1NBR0UtLS0tLVxcclxcblwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LmFybW9yLnB1YmxpY19rZXk6XG4gICAgICByZXN1bHQucHVzaChcIi0tLS0tQkVHSU4gUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLVxcclxcblwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKGFkZGhlYWRlcihjdXN0b21Db21tZW50KSk7XG4gICAgICByZXN1bHQucHVzaChfYmFzZTIuZGVmYXVsdC5lbmNvZGUoYm9keSkpO1xuICAgICAgcmVzdWx0LnB1c2goXCJcXHJcXG49XCIgKyBnZXRDaGVja1N1bShib2R5KSArIFwiXFxyXFxuXCIpO1xuICAgICAgcmVzdWx0LnB1c2goXCItLS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tXFxyXFxuXFxyXFxuXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuYXJtb3IucHJpdmF0ZV9rZXk6XG4gICAgICByZXN1bHQucHVzaChcIi0tLS0tQkVHSU4gUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS1cXHJcXG5cIik7XG4gICAgICByZXN1bHQucHVzaChhZGRoZWFkZXIoY3VzdG9tQ29tbWVudCkpO1xuICAgICAgcmVzdWx0LnB1c2goX2Jhc2UyLmRlZmF1bHQuZW5jb2RlKGJvZHkpKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXFxyXFxuPVwiICsgZ2V0Q2hlY2tTdW0oYm9keSkgKyBcIlxcclxcblwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKFwiLS0tLS1FTkQgUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS1cXHJcXG5cIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5hcm1vci5zaWduYXR1cmU6XG4gICAgICByZXN1bHQucHVzaChcIi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxyXFxuXCIpO1xuICAgICAgcmVzdWx0LnB1c2goYWRkaGVhZGVyKGN1c3RvbUNvbW1lbnQpKTtcbiAgICAgIHJlc3VsdC5wdXNoKF9iYXNlMi5kZWZhdWx0LmVuY29kZShib2R5KSk7XG4gICAgICByZXN1bHQucHVzaChcIlxcclxcbj1cIiArIGdldENoZWNrU3VtKGJvZHkpICsgXCJcXHJcXG5cIik7XG4gICAgICByZXN1bHQucHVzaChcIi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcclxcblwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBlbmNvZGU6IGFybW9yLFxuICBkZWNvZGU6IGRlYXJtb3Jcbn07XG5cbn0se1wiLi4vY29uZmlnXCI6MzI1LFwiLi4vZW51bXMuanNcIjozNTksXCIuLi91dGlsXCI6Mzk4LFwiLi9iYXNlNjQuanNcIjozNTh9XSwzNTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogT3BlblBHUCByYWRpeC02NC9iYXNlNjQgc3RyaW5nIGVuY29kaW5nL2RlY29kaW5nXG4gKiBDb3B5cmlnaHQgMjAwNSBIZXJiZXJ0IEhhbmV3aW5rZWwsIHd3dy5oYW5lV0lOLmRlXG4gKiB2ZXJzaW9uIDEuMCwgY2hlY2sgd3d3LmhhbmVXSU4uZGUgZm9yIHRoZSBsYXRlc3QgdmVyc2lvblxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMsIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBvciBzZWxsIHRoaXMgc29mdHdhcmUsIHdpdGggb3JcbiAqIHdpdGhvdXQgZmVlLCBmb3IgYW55IHB1cnBvc2UgYW5kIGJ5IGFueSBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiwgaXMgaGVyZWJ5XG4gKiBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXJcbiAqIGluIGFsbCBjb3BpZXMuIERpc3RyaWJ1dGlvbiBhcyBhIHBhcnQgb2YgYW4gYXBwbGljYXRpb24gb3IgYmluYXJ5IG11c3RcbiAqIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc1xuICogcHJvdmlkZWQgd2l0aCB0aGUgYXBwbGljYXRpb24gb3IgZGlzdHJpYnV0aW9uLlxuICovXG5cbi8qKlxuICogQG1vZHVsZSBlbmNvZGluZy9iYXNlNjRcbiAqL1xuXG52YXIgYjY0cyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJzsgLy8gU3RhbmRhcmQgcmFkaXgtNjRcbnZhciBiNjR1ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nOyAvLyBVUkwtc2FmZSByYWRpeC02NFxuXG4vKipcbiAqIENvbnZlcnQgYmluYXJ5IGFycmF5IHRvIHJhZGl4LTY0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHQgVWludDhBcnJheSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge2Jvb2x9IHUgaWYgdHJ1ZSwgb3V0cHV0IGlzIFVSTC1zYWZlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSByYWRpeC02NCB2ZXJzaW9uIG9mIGlucHV0IHN0cmluZ1xuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiBzMnIodCkge1xuICB2YXIgdSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgLy8gVE9ETyBjaGVjayBidG9hIGFsdGVybmF0aXZlXG4gIHZhciBiNjQgPSB1ID8gYjY0dSA6IGI2NHM7XG4gIHZhciBhID0gdm9pZCAwO1xuICB2YXIgYyA9IHZvaWQgMDtcbiAgdmFyIG4gPSB2b2lkIDA7XG4gIHZhciByID0gW107XG4gIHZhciBsID0gMDtcbiAgdmFyIHMgPSAwO1xuICB2YXIgdGwgPSB0Lmxlbmd0aDtcblxuICBmb3IgKG4gPSAwOyBuIDwgdGw7IG4rKykge1xuICAgIGMgPSB0W25dO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICByLnB1c2goYjY0LmNoYXJBdChjID4+IDIgJiA2MykpO1xuICAgICAgYSA9IChjICYgMykgPDwgNDtcbiAgICB9IGVsc2UgaWYgKHMgPT09IDEpIHtcbiAgICAgIHIucHVzaChiNjQuY2hhckF0KGEgfCBjID4+IDQgJiAxNSkpO1xuICAgICAgYSA9IChjICYgMTUpIDw8IDI7XG4gICAgfSBlbHNlIGlmIChzID09PSAyKSB7XG4gICAgICByLnB1c2goYjY0LmNoYXJBdChhIHwgYyA+PiA2ICYgMykpO1xuICAgICAgbCArPSAxO1xuICAgICAgaWYgKGwgJSA2MCA9PT0gMCAmJiAhdSkge1xuICAgICAgICByLnB1c2goXCJcXG5cIik7XG4gICAgICB9XG4gICAgICByLnB1c2goYjY0LmNoYXJBdChjICYgNjMpKTtcbiAgICB9XG4gICAgbCArPSAxO1xuICAgIGlmIChsICUgNjAgPT09IDAgJiYgIXUpIHtcbiAgICAgIHIucHVzaChcIlxcblwiKTtcbiAgICB9XG5cbiAgICBzICs9IDE7XG4gICAgaWYgKHMgPT09IDMpIHtcbiAgICAgIHMgPSAwO1xuICAgIH1cbiAgfVxuICBpZiAocyA+IDApIHtcbiAgICByLnB1c2goYjY0LmNoYXJBdChhKSk7XG4gICAgbCArPSAxO1xuICAgIGlmIChsICUgNjAgPT09IDAgJiYgIXUpIHtcbiAgICAgIHIucHVzaChcIlxcblwiKTtcbiAgICB9XG4gICAgaWYgKCF1KSB7XG4gICAgICByLnB1c2goJz0nKTtcbiAgICAgIGwgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKHMgPT09IDEgJiYgIXUpIHtcbiAgICBpZiAobCAlIDYwID09PSAwICYmICF1KSB7XG4gICAgICByLnB1c2goXCJcXG5cIik7XG4gICAgfVxuICAgIHIucHVzaCgnPScpO1xuICB9XG4gIHJldHVybiByLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgcmFkaXgtNjQgdG8gYmluYXJ5IGFycmF5XG4gKiBAcGFyYW0ge1N0cmluZ30gdCByYWRpeC02NCBzdHJpbmcgdG8gY29udmVydFxuICogQHBhcmFtIHtib29sfSB1IGlmIHRydWUsIGlucHV0IGlzIGludGVycHJldGVkIGFzIFVSTC1zYWZlXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gYmluYXJ5IGFycmF5IHZlcnNpb24gb2YgaW5wdXQgc3RyaW5nXG4gKiBAc3RhdGljXG4gKi9cbmZ1bmN0aW9uIHIycyh0LCB1KSB7XG4gIC8vIFRPRE8gY2hlY2sgYXRvYiBhbHRlcm5hdGl2ZVxuICB2YXIgYjY0ID0gdSA/IGI2NHUgOiBiNjRzO1xuICB2YXIgYyA9IHZvaWQgMDtcbiAgdmFyIG4gPSB2b2lkIDA7XG4gIHZhciByID0gW107XG4gIHZhciBzID0gMDtcbiAgdmFyIGEgPSAwO1xuICB2YXIgdGwgPSB0Lmxlbmd0aDtcblxuICBmb3IgKG4gPSAwOyBuIDwgdGw7IG4rKykge1xuICAgIGMgPSBiNjQuaW5kZXhPZih0LmNoYXJBdChuKSk7XG4gICAgaWYgKGMgPj0gMCkge1xuICAgICAgaWYgKHMpIHtcbiAgICAgICAgci5wdXNoKGEgfCBjID4+IDYgLSBzICYgMjU1KTtcbiAgICAgIH1cbiAgICAgIHMgPSBzICsgMiAmIDc7XG4gICAgICBhID0gYyA8PCBzICYgMjU1O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocik7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZW5jb2RlOiBzMnIsXG4gIGRlY29kZTogcjJzXG59O1xuXG59LHt9XSwzNTk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfc2xpY2VkVG9BcnJheTIgPSBfZGVyZXFfKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIik7XG5cbnZhciBfc2xpY2VkVG9BcnJheTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZWRUb0FycmF5Mik7XG5cbnZhciBfZW50cmllcyA9IF9kZXJlcV8oXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2VudHJpZXNcIik7XG5cbnZhciBfZW50cmllczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnRyaWVzKTtcblxudmFyIF9zeW1ib2wgPSBfZGVyZXFfKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbFwiKTtcblxudmFyIF9zeW1ib2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltYm9sKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBAbW9kdWxlIGVudW1zXG4gKi9cblxudmFyIGJ5VmFsdWUgPSAoMCwgX3N5bWJvbDIuZGVmYXVsdCkoJ2J5VmFsdWUnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuXG4gIC8qKiBNYXBzIGN1cnZlIG5hbWVzIHVuZGVyIHZhcmlvdXMgc3RhbmRhcmRzIHRvIG9uZVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3dpa2kuZ251cGcub3JnL0VDQ3xFQ0MgLSBHbnVQRyB3aWtpfVxuICAgKiBAZW51bSB7U3RyaW5nfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGN1cnZlOiB7XG4gICAgLyoqIE5JU1QgUC0yNTYgQ3VydmUgKi9cbiAgICBcInAyNTZcIjogXCJwMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcInAyNTZcIixcbiAgICBcInNlY3AyNTZyMVwiOiBcInAyNTZcIixcbiAgICBcInByaW1lMjU2djFcIjogXCJwMjU2XCIsXG4gICAgXCIxLjIuODQwLjEwMDQ1LjMuMS43XCI6IFwicDI1NlwiLFxuICAgIFwiMmE4NjQ4Y2UzZDAzMDEwN1wiOiBcInAyNTZcIixcbiAgICBcIjJBODY0OENFM0QwMzAxMDdcIjogXCJwMjU2XCIsXG5cbiAgICAvKiogTklTVCBQLTM4NCBDdXJ2ZSAqL1xuICAgIFwicDM4NFwiOiBcInAzODRcIixcbiAgICBcIlAtMzg0XCI6IFwicDM4NFwiLFxuICAgIFwic2VjcDM4NHIxXCI6IFwicDM4NFwiLFxuICAgIFwiMS4zLjEzMi4wLjM0XCI6IFwicDM4NFwiLFxuICAgIFwiMmI4MTA0MDAyMlwiOiBcInAzODRcIixcbiAgICBcIjJCODEwNDAwMjJcIjogXCJwMzg0XCIsXG5cbiAgICAvKiogTklTVCBQLTUyMSBDdXJ2ZSAqL1xuICAgIFwicDUyMVwiOiBcInA1MjFcIixcbiAgICBcIlAtNTIxXCI6IFwicDUyMVwiLFxuICAgIFwic2VjcDUyMXIxXCI6IFwicDUyMVwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwicDUyMVwiLFxuICAgIFwiMmI4MTA0MDAyM1wiOiBcInA1MjFcIixcbiAgICBcIjJCODEwNDAwMjNcIjogXCJwNTIxXCIsXG5cbiAgICAvKiogU0VDRyBTRUNQMjU2azEgQ3VydmUgKi9cbiAgICBcInNlY3AyNTZrMVwiOiBcInNlY3AyNTZrMVwiLFxuICAgIFwiMS4zLjEzMi4wLjEwXCI6IFwic2VjcDI1NmsxXCIsXG4gICAgXCIyYjgxMDQwMDBhXCI6IFwic2VjcDI1NmsxXCIsXG4gICAgXCIyQjgxMDQwMDBBXCI6IFwic2VjcDI1NmsxXCIsXG5cbiAgICAvKiogRWQyNTUxOSAqL1xuICAgIFwiRUQyNTUxOVwiOiBcImVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogXCJlZDI1NTE5XCIsXG4gICAgXCJFZDI1NTE5XCI6IFwiZWQyNTUxOVwiLFxuICAgIFwiMS4zLjYuMS40LjEuMTE1OTEuMTUuMVwiOiBcImVkMjU1MTlcIixcbiAgICBcIjJiMDYwMTA0MDFkYTQ3MGYwMVwiOiBcImVkMjU1MTlcIixcbiAgICBcIjJCMDYwMTA0MDFEQTQ3MEYwMVwiOiBcImVkMjU1MTlcIixcblxuICAgIC8qKiBDdXJ2ZTI1NTE5ICovXG4gICAgXCJYMjU1MTlcIjogXCJjdXJ2ZTI1NTE5XCIsXG4gICAgXCJjdjI1NTE5XCI6IFwiY3VydmUyNTUxOVwiLFxuICAgIFwiY3VydmUyNTUxOVwiOiBcImN1cnZlMjU1MTlcIixcbiAgICBcIkN1cnZlMjU1MTlcIjogXCJjdXJ2ZTI1NTE5XCIsXG4gICAgXCIxLjMuNi4xLjQuMS4zMDI5LjEuNS4xXCI6IFwiY3VydmUyNTUxOVwiLFxuICAgIFwiMmIwNjAxMDQwMTk3NTUwMTA1MDFcIjogXCJjdXJ2ZTI1NTE5XCIsXG4gICAgXCIyQjA2MDEwNDAxOTc1NTAxMDUwMVwiOiBcImN1cnZlMjU1MTlcIixcblxuICAgIC8qKiBCcmFpbnBvb2xQMjU2cjEgQ3VydmUgKi9cbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjdcIjogXCJicmFpbnBvb2xQMjU2cjFcIixcbiAgICBcIjJiMjQwMzAzMDIwODAxMDEwN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiMkIyNDAzMDMwMjA4MDEwMTA3XCI6IFwiYnJhaW5wb29sUDI1NnIxXCIsXG5cbiAgICAvKiogQnJhaW5wb29sUDM4NHIxIEN1cnZlICovXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCJicmFpbnBvb2xQMzg0cjFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiMmIyNDAzMDMwMjA4MDEwMTBiXCI6IFwiYnJhaW5wb29sUDM4NHIxXCIsXG4gICAgXCIyQjI0MDMwMzAyMDgwMTAxMEJcIjogXCJicmFpbnBvb2xQMzg0cjFcIixcblxuICAgIC8qKiBCcmFpbnBvb2xQNTEycjEgQ3VydmUgKi9cbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcImJyYWlucG9vbFA1MTJyMVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCIyYjI0MDMwMzAyMDgwMTAxMGRcIjogXCJicmFpbnBvb2xQNTEycjFcIixcbiAgICBcIjJCMjQwMzAzMDIwODAxMDEwRFwiOiBcImJyYWlucG9vbFA1MTJyMVwiXG4gIH0sXG5cbiAgLyoqIEEgc3RyaW5nIHRvIGtleSBzcGVjaWZpZXIgdHlwZVxuICAgKiBAZW51bSB7SW50ZWdlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBzMms6IHtcbiAgICBzaW1wbGU6IDAsXG4gICAgc2FsdGVkOiAxLFxuICAgIGl0ZXJhdGVkOiAzLFxuICAgIGdudTogMTAxXG4gIH0sXG5cbiAgLyoqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vcGVucGdwLXJmYzQ4ODBiaXMtMDQjc2VjdGlvbi05LjF8UkZDNDg4MGJpcy0wNCwgc2VjdGlvbiA5LjF9XG4gICAqIEBlbnVtIHtJbnRlZ2VyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIHB1YmxpY0tleToge1xuICAgIC8qKiBSU0EgKEVuY3J5cHQgb3IgU2lnbikgW0hBQ10gKi9cbiAgICByc2FfZW5jcnlwdF9zaWduOiAxLFxuICAgIC8qKiBSU0EgKEVuY3J5cHQgb25seSkgW0hBQ10gKi9cbiAgICByc2FfZW5jcnlwdDogMixcbiAgICAvKiogUlNBIChTaWduIG9ubHkpIFtIQUNdICovXG4gICAgcnNhX3NpZ246IDMsXG4gICAgLyoqIEVsZ2FtYWwgKEVuY3J5cHQgb25seSkgW0VMR0FNQUxdIFtIQUNdICovXG4gICAgZWxnYW1hbDogMTYsXG4gICAgLyoqIERTQSAoU2lnbiBvbmx5KSBbRklQUzE4Nl0gW0hBQ10gKi9cbiAgICBkc2E6IDE3LFxuICAgIC8qKiBFQ0RIIChFbmNyeXB0IG9ubHkpIFtSRkM2NjM3XSAqL1xuICAgIGVjZGg6IDE4LFxuICAgIC8qKiBFQ0RTQSAoU2lnbiBvbmx5KSBbUkZDNjYzN10gKi9cbiAgICBlY2RzYTogMTksXG4gICAgLyoqIEVkRFNBIChTaWduIG9ubHkpXG4gICAgICogW3tAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQta29jaC1lZGRzYS1mb3Itb3BlbnBncC0wNHxEcmFmdCBSRkN9XSAqL1xuICAgIGVkZHNhOiAyMixcbiAgICAvKiogUmVzZXJ2ZWQgZm9yIEFFREggKi9cbiAgICBhZWRoOiAyMyxcbiAgICAvKiogUmVzZXJ2ZWQgZm9yIEFFRFNBICovXG4gICAgYWVkc2E6IDI0XG4gIH0sXG5cbiAgLyoqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTkuMnxSRkM0ODgwLCBzZWN0aW9uIDkuMn1cbiAgICogQGVudW0ge0ludGVnZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgc3ltbWV0cmljOiB7XG4gICAgcGxhaW50ZXh0OiAwLFxuICAgIC8qKiBOb3QgaW1wbGVtZW50ZWQhICovXG4gICAgaWRlYTogMSxcbiAgICB0cmlwbGVkZXM6IDIsXG4gICAgY2FzdDU6IDMsXG4gICAgYmxvd2Zpc2g6IDQsXG4gICAgYWVzMTI4OiA3LFxuICAgIGFlczE5MjogOCxcbiAgICBhZXMyNTY6IDksXG4gICAgdHdvZmlzaDogMTBcbiAgfSxcblxuICAvKioge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS4zfFJGQzQ4ODAsIHNlY3Rpb24gOS4zfVxuICAgKiBAZW51bSB7SW50ZWdlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBjb21wcmVzc2lvbjoge1xuICAgIHVuY29tcHJlc3NlZDogMCxcbiAgICAvKiogUkZDMTk1MSAqL1xuICAgIHppcDogMSxcbiAgICAvKiogUkZDMTk1MCAqL1xuICAgIHpsaWI6IDIsXG4gICAgYnppcDI6IDNcbiAgfSxcblxuICAvKioge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS40fFJGQzQ4ODAsIHNlY3Rpb24gOS40fVxuICAgKiBAZW51bSB7SW50ZWdlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBoYXNoOiB7XG4gICAgbWQ1OiAxLFxuICAgIHNoYTE6IDIsXG4gICAgcmlwZW1kOiAzLFxuICAgIHNoYTI1NjogOCxcbiAgICBzaGEzODQ6IDksXG4gICAgc2hhNTEyOiAxMCxcbiAgICBzaGEyMjQ6IDExXG4gIH0sXG5cbiAgLyoqIEEgbGlzdCBvZiBoYXNoIG5hbWVzIGFzIGFjY2VwdGVkIGJ5IHdlYkNyeXB0byBmdW5jdGlvbnMuXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3VidGxlQ3J5cHRvL2RpZ2VzdHxQYXJhbWV0ZXJzLCBhbGdvfVxuICAgKiBAZW51bSB7U3RyaW5nfVxuICAgKi9cbiAgd2ViSGFzaDoge1xuICAgICdTSEEtMSc6IDIsXG4gICAgJ1NIQS0yNTYnOiA4LFxuICAgICdTSEEtMzg0JzogOSxcbiAgICAnU0hBLTUxMic6IDEwXG4gIH0sXG5cbiAgLyoqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vcGVucGdwLXJmYzQ4ODBiaXMtMDQjc2VjdGlvbi05LjZ8UkZDNDg4MGJpcy0wNCwgc2VjdGlvbiA5LjZ9XG4gICAqIEBlbnVtIHtJbnRlZ2VyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGFlYWQ6IHtcbiAgICBlYXg6IDEsXG4gICAgb2NiOiAyLFxuICAgIGV4cGVyaW1lbnRhbF9nY206IDEwMCAvLyBQcml2YXRlIGFsZ29yaXRobVxuICB9LFxuXG4gIC8qKiBBIGxpc3Qgb2YgcGFja2V0IHR5cGVzIGFuZCBudW1lcmljIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZW0uXG4gICAqIEBlbnVtIHtJbnRlZ2VyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIHBhY2tldDoge1xuICAgIHB1YmxpY0tleUVuY3J5cHRlZFNlc3Npb25LZXk6IDEsXG4gICAgc2lnbmF0dXJlOiAyLFxuICAgIHN5bUVuY3J5cHRlZFNlc3Npb25LZXk6IDMsXG4gICAgb25lUGFzc1NpZ25hdHVyZTogNCxcbiAgICBzZWNyZXRLZXk6IDUsXG4gICAgcHVibGljS2V5OiA2LFxuICAgIHNlY3JldFN1YmtleTogNyxcbiAgICBjb21wcmVzc2VkOiA4LFxuICAgIHN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQ6IDksXG4gICAgbWFya2VyOiAxMCxcbiAgICBsaXRlcmFsOiAxMSxcbiAgICB0cnVzdDogMTIsXG4gICAgdXNlcmlkOiAxMyxcbiAgICBwdWJsaWNTdWJrZXk6IDE0LFxuICAgIHVzZXJBdHRyaWJ1dGU6IDE3LFxuICAgIHN5bUVuY3J5cHRlZEludGVncml0eVByb3RlY3RlZDogMTgsXG4gICAgbW9kaWZpY2F0aW9uRGV0ZWN0aW9uQ29kZTogMTksXG4gICAgc3ltRW5jcnlwdGVkQUVBRFByb3RlY3RlZDogMjAgLy8gc2VlIElFVEYgZHJhZnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1mb3JkLW9wZW5wZ3AtZm9ybWF0LTAwI3NlY3Rpb24tMi4xXG4gIH0sXG5cbiAgLyoqIERhdGEgdHlwZXMgaW4gdGhlIGxpdGVyYWwgcGFja2V0XG4gICAqIEBlbnVtIHtJbnRlZ2VyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGxpdGVyYWw6IHtcbiAgICAvKiogQmluYXJ5IGRhdGEgJ2InICovXG4gICAgYmluYXJ5OiAnYicuY2hhckNvZGVBdCgpLFxuICAgIC8qKiBUZXh0IGRhdGEgJ3QnICovXG4gICAgdGV4dDogJ3QnLmNoYXJDb2RlQXQoKSxcbiAgICAvKiogVXRmOCBkYXRhICd1JyAqL1xuICAgIHV0Zjg6ICd1Jy5jaGFyQ29kZUF0KCksXG4gICAgLyoqIE1JTUUgbWVzc2FnZSBib2R5IHBhcnQgJ20nICovXG4gICAgbWltZTogJ20nLmNoYXJDb2RlQXQoKVxuICB9LFxuXG4gIC8qKiBPbmUgcGFzcyBzaWduYXR1cmUgcGFja2V0IHR5cGVcbiAgICogQGVudW0ge0ludGVnZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgc2lnbmF0dXJlOiB7XG4gICAgLyoqIDB4MDA6IFNpZ25hdHVyZSBvZiBhIGJpbmFyeSBkb2N1bWVudC4gKi9cbiAgICBiaW5hcnk6IDAsXG4gICAgLyoqIDB4MDE6IFNpZ25hdHVyZSBvZiBhIGNhbm9uaWNhbCB0ZXh0IGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQ2Fub25pY2FseXppbmcgdGhlIGRvY3VtZW50IGJ5IGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzLiAqL1xuICAgIHRleHQ6IDEsXG4gICAgLyoqIDB4MDI6IFN0YW5kYWxvbmUgc2lnbmF0dXJlLlxuICAgICAqXG4gICAgICogVGhpcyBzaWduYXR1cmUgaXMgYSBzaWduYXR1cmUgb2Ygb25seSBpdHMgb3duIHN1YnBhY2tldCBjb250ZW50cy5cbiAgICAgKiBJdCBpcyBjYWxjdWxhdGVkIGlkZW50aWNhbGx5IHRvIGEgc2lnbmF0dXJlIG92ZXIgYSB6ZXJvLWxlbmdoXG4gICAgICogYmluYXJ5IGRvY3VtZW50LiAgTm90ZSB0aGF0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBoYXZlIGEgVjNcbiAgICAgKiBzdGFuZGFsb25lIHNpZ25hdHVyZS4gKi9cbiAgICBzdGFuZGFsb25lOiAyLFxuICAgIC8qKiAweDEwOiBHZW5lcmljIGNlcnRpZmljYXRpb24gb2YgYSBVc2VyIElEIGFuZCBQdWJsaWMtS2V5IHBhY2tldC5cbiAgICAgKlxuICAgICAqIFRoZSBpc3N1ZXIgb2YgdGhpcyBjZXJ0aWZpY2F0aW9uIGRvZXMgbm90IG1ha2UgYW55IHBhcnRpY3VsYXJcbiAgICAgKiBhc3NlcnRpb24gYXMgdG8gaG93IHdlbGwgdGhlIGNlcnRpZmllciBoYXMgY2hlY2tlZCB0aGF0IHRoZSBvd25lclxuICAgICAqIG9mIHRoZSBrZXkgaXMgaW4gZmFjdCB0aGUgcGVyc29uIGRlc2NyaWJlZCBieSB0aGUgVXNlciBJRC4gKi9cbiAgICBjZXJ0X2dlbmVyaWM6IDE2LFxuICAgIC8qKiAweDExOiBQZXJzb25hIGNlcnRpZmljYXRpb24gb2YgYSBVc2VyIElEIGFuZCBQdWJsaWMtS2V5IHBhY2tldC5cbiAgICAgKlxuICAgICAqIFRoZSBpc3N1ZXIgb2YgdGhpcyBjZXJ0aWZpY2F0aW9uIGhhcyBub3QgZG9uZSBhbnkgdmVyaWZpY2F0aW9uIG9mXG4gICAgICogdGhlIGNsYWltIHRoYXQgdGhlIG93bmVyIG9mIHRoaXMga2V5IGlzIHRoZSBVc2VyIElEIHNwZWNpZmllZC4gKi9cbiAgICBjZXJ0X3BlcnNvbmE6IDE3LFxuICAgIC8qKiAweDEyOiBDYXN1YWwgY2VydGlmaWNhdGlvbiBvZiBhIFVzZXIgSUQgYW5kIFB1YmxpYy1LZXkgcGFja2V0LlxuICAgICAqXG4gICAgICogVGhlIGlzc3VlciBvZiB0aGlzIGNlcnRpZmljYXRpb24gaGFzIGRvbmUgc29tZSBjYXN1YWxcbiAgICAgKiB2ZXJpZmljYXRpb24gb2YgdGhlIGNsYWltIG9mIGlkZW50aXR5LiAqL1xuICAgIGNlcnRfY2FzdWFsOiAxOCxcbiAgICAvKiogMHgxMzogUG9zaXRpdmUgY2VydGlmaWNhdGlvbiBvZiBhIFVzZXIgSUQgYW5kIFB1YmxpYy1LZXkgcGFja2V0LlxuICAgICAqXG4gICAgICogVGhlIGlzc3VlciBvZiB0aGlzIGNlcnRpZmljYXRpb24gaGFzIGRvbmUgc3Vic3RhbnRpYWxcbiAgICAgKiB2ZXJpZmljYXRpb24gb2YgdGhlIGNsYWltIG9mIGlkZW50aXR5LlxuICAgICAqXG4gICAgICogTW9zdCBPcGVuUEdQIGltcGxlbWVudGF0aW9ucyBtYWtlIHRoZWlyIFwia2V5IHNpZ25hdHVyZXNcIiBhcyAweDEwXG4gICAgICogY2VydGlmaWNhdGlvbnMuICBTb21lIGltcGxlbWVudGF0aW9ucyBjYW4gaXNzdWUgMHgxMS0weDEzXG4gICAgICogY2VydGlmaWNhdGlvbnMsIGJ1dCBmZXcgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSB0eXBlcy4gKi9cbiAgICBjZXJ0X3Bvc2l0aXZlOiAxOSxcbiAgICAvKiogMHgzMDogQ2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIHNpZ25hdHVyZVxuICAgICAqXG4gICAgICogVGhpcyBzaWduYXR1cmUgcmV2b2tlcyBhbiBlYXJsaWVyIFVzZXIgSUQgY2VydGlmaWNhdGlvbiBzaWduYXR1cmVcbiAgICAgKiAoc2lnbmF0dXJlIGNsYXNzIDB4MTAgdGhyb3VnaCAweDEzKSBvciBkaXJlY3Qta2V5IHNpZ25hdHVyZVxuICAgICAqICgweDFGKS4gIEl0IHNob3VsZCBiZSBpc3N1ZWQgYnkgdGhlIHNhbWUga2V5IHRoYXQgaXNzdWVkIHRoZVxuICAgICAqIHJldm9rZWQgc2lnbmF0dXJlIG9yIGFuIGF1dGhvcml6ZWQgcmV2b2NhdGlvbiBrZXkuICBUaGUgc2lnbmF0dXJlXG4gICAgICogaXMgY29tcHV0ZWQgb3ZlciB0aGUgc2FtZSBkYXRhIGFzIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IGl0XG4gICAgICogcmV2b2tlcywgYW5kIHNob3VsZCBoYXZlIGEgbGF0ZXIgY3JlYXRpb24gZGF0ZSB0aGFuIHRoYXRcbiAgICAgKiBjZXJ0aWZpY2F0ZS4gKi9cbiAgICBjZXJ0X3Jldm9jYXRpb246IDQ4LFxuICAgIC8qKiAweDE4OiBTdWJrZXkgQmluZGluZyBTaWduYXR1cmVcbiAgICAgKlxuICAgICAqIFRoaXMgc2lnbmF0dXJlIGlzIGEgc3RhdGVtZW50IGJ5IHRoZSB0b3AtbGV2ZWwgc2lnbmluZyBrZXkgdGhhdFxuICAgICAqIGluZGljYXRlcyB0aGF0IGl0IG93bnMgdGhlIHN1YmtleS4gIFRoaXMgc2lnbmF0dXJlIGlzIGNhbGN1bGF0ZWRcbiAgICAgKiBkaXJlY3RseSBvbiB0aGUgcHJpbWFyeSBrZXkgYW5kIHN1YmtleSwgYW5kIG5vdCBvbiBhbnkgVXNlciBJRCBvclxuICAgICAqIG90aGVyIHBhY2tldHMuICBBIHNpZ25hdHVyZSB0aGF0IGJpbmRzIGEgc2lnbmluZyBzdWJrZXkgTVVTVCBoYXZlXG4gICAgICogYW4gRW1iZWRkZWQgU2lnbmF0dXJlIHN1YnBhY2tldCBpbiB0aGlzIGJpbmRpbmcgc2lnbmF0dXJlIHRoYXRcbiAgICAgKiBjb250YWlucyBhIDB4MTkgc2lnbmF0dXJlIG1hZGUgYnkgdGhlIHNpZ25pbmcgc3Via2V5IG9uIHRoZVxuICAgICAqIHByaW1hcnkga2V5IGFuZCBzdWJrZXkuICovXG4gICAgc3Via2V5X2JpbmRpbmc6IDI0LFxuICAgIC8qKiAweDE5OiBQcmltYXJ5IEtleSBCaW5kaW5nIFNpZ25hdHVyZVxuICAgICAqXG4gICAgICogVGhpcyBzaWduYXR1cmUgaXMgYSBzdGF0ZW1lbnQgYnkgYSBzaWduaW5nIHN1YmtleSwgaW5kaWNhdGluZ1xuICAgICAqIHRoYXQgaXQgaXMgb3duZWQgYnkgdGhlIHByaW1hcnkga2V5IGFuZCBzdWJrZXkuICBUaGlzIHNpZ25hdHVyZVxuICAgICAqIGlzIGNhbGN1bGF0ZWQgdGhlIHNhbWUgd2F5IGFzIGEgMHgxOCBzaWduYXR1cmU6IGRpcmVjdGx5IG9uIHRoZVxuICAgICAqIHByaW1hcnkga2V5IGFuZCBzdWJrZXksIGFuZCBub3Qgb24gYW55IFVzZXIgSUQgb3Igb3RoZXIgcGFja2V0cy5cbiAgICAgKlxuICAgICAqIFdoZW4gYSBzaWduYXR1cmUgaXMgbWFkZSBvdmVyIGEga2V5LCB0aGUgaGFzaCBkYXRhIHN0YXJ0cyB3aXRoIHRoZVxuICAgICAqIG9jdGV0IDB4OTksIGZvbGxvd2VkIGJ5IGEgdHdvLW9jdGV0IGxlbmd0aCBvZiB0aGUga2V5LCBhbmQgdGhlbiBib2R5XG4gICAgICogb2YgdGhlIGtleSBwYWNrZXQuICAoTm90ZSB0aGF0IHRoaXMgaXMgYW4gb2xkLXN0eWxlIHBhY2tldCBoZWFkZXIgZm9yXG4gICAgICogYSBrZXkgcGFja2V0IHdpdGggdHdvLW9jdGV0IGxlbmd0aC4pICBBIHN1YmtleSBiaW5kaW5nIHNpZ25hdHVyZVxuICAgICAqICh0eXBlIDB4MTgpIG9yIHByaW1hcnkga2V5IGJpbmRpbmcgc2lnbmF0dXJlICh0eXBlIDB4MTkpIHRoZW4gaGFzaGVzXG4gICAgICogdGhlIHN1YmtleSB1c2luZyB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIG1haW4ga2V5IChhbHNvIHVzaW5nIDB4OTkgYXNcbiAgICAgKiB0aGUgZmlyc3Qgb2N0ZXQpLiAqL1xuICAgIGtleV9iaW5kaW5nOiAyNSxcbiAgICAvKiogMHgxRjogU2lnbmF0dXJlIGRpcmVjdGx5IG9uIGEga2V5XG4gICAgICpcbiAgICAgKiBUaGlzIHNpZ25hdHVyZSBpcyBjYWxjdWxhdGVkIGRpcmVjdGx5IG9uIGEga2V5LiAgSXQgYmluZHMgdGhlXG4gICAgICogaW5mb3JtYXRpb24gaW4gdGhlIFNpZ25hdHVyZSBzdWJwYWNrZXRzIHRvIHRoZSBrZXksIGFuZCBpc1xuICAgICAqIGFwcHJvcHJpYXRlIHRvIGJlIHVzZWQgZm9yIHN1YnBhY2tldHMgdGhhdCBwcm92aWRlIGluZm9ybWF0aW9uXG4gICAgICogYWJvdXQgdGhlIGtleSwgc3VjaCBhcyB0aGUgUmV2b2NhdGlvbiBLZXkgc3VicGFja2V0LiAgSXQgaXMgYWxzb1xuICAgICAqIGFwcHJvcHJpYXRlIGZvciBzdGF0ZW1lbnRzIHRoYXQgbm9uLXNlbGYgY2VydGlmaWVycyB3YW50IHRvIG1ha2VcbiAgICAgKiBhYm91dCB0aGUga2V5IGl0c2VsZiwgcmF0aGVyIHRoYW4gdGhlIGJpbmRpbmcgYmV0d2VlbiBhIGtleSBhbmQgYVxuICAgICAqIG5hbWUuICovXG4gICAga2V5OiAzMSxcbiAgICAvKiogMHgyMDogS2V5IHJldm9jYXRpb24gc2lnbmF0dXJlXG4gICAgICpcbiAgICAgKiBUaGUgc2lnbmF0dXJlIGlzIGNhbGN1bGF0ZWQgZGlyZWN0bHkgb24gdGhlIGtleSBiZWluZyByZXZva2VkLiAgQVxuICAgICAqIHJldm9rZWQga2V5IGlzIG5vdCB0byBiZSB1c2VkLiAgT25seSByZXZvY2F0aW9uIHNpZ25hdHVyZXMgYnkgdGhlXG4gICAgICoga2V5IGJlaW5nIHJldm9rZWQsIG9yIGJ5IGFuIGF1dGhvcml6ZWQgcmV2b2NhdGlvbiBrZXksIHNob3VsZCBiZVxuICAgICAqIGNvbnNpZGVyZWQgdmFsaWQgcmV2b2NhdGlvbiBzaWduYXR1cmVzLmEgKi9cbiAgICBrZXlfcmV2b2NhdGlvbjogMzIsXG4gICAgLyoqIDB4Mjg6IFN1YmtleSByZXZvY2F0aW9uIHNpZ25hdHVyZVxuICAgICAqXG4gICAgICogVGhlIHNpZ25hdHVyZSBpcyBjYWxjdWxhdGVkIGRpcmVjdGx5IG9uIHRoZSBzdWJrZXkgYmVpbmcgcmV2b2tlZC5cbiAgICAgKiBBIHJldm9rZWQgc3Via2V5IGlzIG5vdCB0byBiZSB1c2VkLiAgT25seSByZXZvY2F0aW9uIHNpZ25hdHVyZXNcbiAgICAgKiBieSB0aGUgdG9wLWxldmVsIHNpZ25hdHVyZSBrZXkgdGhhdCBpcyBib3VuZCB0byB0aGlzIHN1YmtleSwgb3JcbiAgICAgKiBieSBhbiBhdXRob3JpemVkIHJldm9jYXRpb24ga2V5LCBzaG91bGQgYmUgY29uc2lkZXJlZCB2YWxpZFxuICAgICAqIHJldm9jYXRpb24gc2lnbmF0dXJlcy5cbiAgICAgKlxuICAgICAqIEtleSByZXZvY2F0aW9uIHNpZ25hdHVyZXMgKHR5cGVzIDB4MjAgYW5kIDB4MjgpXG4gICAgICogaGFzaCBvbmx5IHRoZSBrZXkgYmVpbmcgcmV2b2tlZC4gKi9cbiAgICBzdWJrZXlfcmV2b2NhdGlvbjogNDAsXG4gICAgLyoqIDB4NDA6IFRpbWVzdGFtcCBzaWduYXR1cmUuXG4gICAgICogVGhpcyBzaWduYXR1cmUgaXMgb25seSBtZWFuaW5nZnVsIGZvciB0aGUgdGltZXN0YW1wIGNvbnRhaW5lZCBpblxuICAgICAqIGl0LiAqL1xuICAgIHRpbWVzdGFtcDogNjQsXG4gICAgLyoqIDB4NTA6IFRoaXJkLVBhcnR5IENvbmZpcm1hdGlvbiBzaWduYXR1cmUuXG4gICAgICpcbiAgICAgKiBUaGlzIHNpZ25hdHVyZSBpcyBhIHNpZ25hdHVyZSBvdmVyIHNvbWUgb3RoZXIgT3BlblBHUCBTaWduYXR1cmVcbiAgICAgKiBwYWNrZXQocykuICBJdCBpcyBhbmFsb2dvdXMgdG8gYSBub3Rhcnkgc2VhbCBvbiB0aGUgc2lnbmVkIGRhdGEuXG4gICAgICogQSB0aGlyZC1wYXJ0eSBzaWduYXR1cmUgU0hPVUxEIGluY2x1ZGUgU2lnbmF0dXJlIFRhcmdldFxuICAgICAqIHN1YnBhY2tldChzKSB0byBnaXZlIGVhc3kgaWRlbnRpZmljYXRpb24uICBOb3RlIHRoYXQgd2UgcmVhbGx5IGRvXG4gICAgICogbWVhbiBTSE9VTEQuICBUaGVyZSBhcmUgcGxhdXNpYmxlIHVzZXMgZm9yIHRoaXMgKHN1Y2ggYXMgYSBibGluZFxuICAgICAqIHBhcnR5IHRoYXQgb25seSBzZWVzIHRoZSBzaWduYXR1cmUsIG5vdCB0aGUga2V5IG9yIHNvdXJjZVxuICAgICAqIGRvY3VtZW50KSB0aGF0IGNhbm5vdCBpbmNsdWRlIGEgdGFyZ2V0IHN1YnBhY2tldC4gKi9cbiAgICB0aGlyZF9wYXJ0eTogODBcbiAgfSxcblxuICAvKiogU2lnbmF0dXJlIHN1YnBhY2tldCB0eXBlXG4gICAqIEBlbnVtIHtJbnRlZ2VyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIHNpZ25hdHVyZVN1YnBhY2tldDoge1xuICAgIHNpZ25hdHVyZV9jcmVhdGlvbl90aW1lOiAyLFxuICAgIHNpZ25hdHVyZV9leHBpcmF0aW9uX3RpbWU6IDMsXG4gICAgZXhwb3J0YWJsZV9jZXJ0aWZpY2F0aW9uOiA0LFxuICAgIHRydXN0X3NpZ25hdHVyZTogNSxcbiAgICByZWd1bGFyX2V4cHJlc3Npb246IDYsXG4gICAgcmV2b2NhYmxlOiA3LFxuICAgIGtleV9leHBpcmF0aW9uX3RpbWU6IDksXG4gICAgcGxhY2Vob2xkZXJfYmFja3dhcmRzX2NvbXBhdGliaWxpdHk6IDEwLFxuICAgIHByZWZlcnJlZF9zeW1tZXRyaWNfYWxnb3JpdGhtczogMTEsXG4gICAgcmV2b2NhdGlvbl9rZXk6IDEyLFxuICAgIGlzc3VlcjogMTYsXG4gICAgbm90YXRpb25fZGF0YTogMjAsXG4gICAgcHJlZmVycmVkX2hhc2hfYWxnb3JpdGhtczogMjEsXG4gICAgcHJlZmVycmVkX2NvbXByZXNzaW9uX2FsZ29yaXRobXM6IDIyLFxuICAgIGtleV9zZXJ2ZXJfcHJlZmVyZW5jZXM6IDIzLFxuICAgIHByZWZlcnJlZF9rZXlfc2VydmVyOiAyNCxcbiAgICBwcmltYXJ5X3VzZXJfaWQ6IDI1LFxuICAgIHBvbGljeV91cmk6IDI2LFxuICAgIGtleV9mbGFnczogMjcsXG4gICAgc2lnbmVyc191c2VyX2lkOiAyOCxcbiAgICByZWFzb25fZm9yX3Jldm9jYXRpb246IDI5LFxuICAgIGZlYXR1cmVzOiAzMCxcbiAgICBzaWduYXR1cmVfdGFyZ2V0OiAzMSxcbiAgICBlbWJlZGRlZF9zaWduYXR1cmU6IDMyLFxuICAgIGlzc3Vlcl9maW5nZXJwcmludDogMzMsXG4gICAgcHJlZmVycmVkX2FlYWRfYWxnb3JpdGhtczogMzRcbiAgfSxcblxuICAvKiogS2V5IGZsYWdzXG4gICAqIEBlbnVtIHtJbnRlZ2VyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGtleUZsYWdzOiB7XG4gICAgLyoqIDB4MDEgLSBUaGlzIGtleSBtYXkgYmUgdXNlZCB0byBjZXJ0aWZ5IG90aGVyIGtleXMuICovXG4gICAgY2VydGlmeV9rZXlzOiAxLFxuICAgIC8qKiAweDAyIC0gVGhpcyBrZXkgbWF5IGJlIHVzZWQgdG8gc2lnbiBkYXRhLiAqL1xuICAgIHNpZ25fZGF0YTogMixcbiAgICAvKiogMHgwNCAtIFRoaXMga2V5IG1heSBiZSB1c2VkIHRvIGVuY3J5cHQgY29tbXVuaWNhdGlvbnMuICovXG4gICAgZW5jcnlwdF9jb21tdW5pY2F0aW9uOiA0LFxuICAgIC8qKiAweDA4IC0gVGhpcyBrZXkgbWF5IGJlIHVzZWQgdG8gZW5jcnlwdCBzdG9yYWdlLiAqL1xuICAgIGVuY3J5cHRfc3RvcmFnZTogOCxcbiAgICAvKiogMHgxMCAtIFRoZSBwcml2YXRlIGNvbXBvbmVudCBvZiB0aGlzIGtleSBtYXkgaGF2ZSBiZWVuIHNwbGl0XG4gICAgICogICAgICAgIGJ5IGEgc2VjcmV0LXNoYXJpbmcgbWVjaGFuaXNtLiAqL1xuICAgIHNwbGl0X3ByaXZhdGVfa2V5OiAxNixcbiAgICAvKiogMHgyMCAtIFRoaXMga2V5IG1heSBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBhdXRoZW50aWNhdGlvbjogMzIsXG4gICAgLyoqIDB4ODAgLSBUaGUgcHJpdmF0ZSBjb21wb25lbnQgb2YgdGhpcyBrZXkgbWF5IGJlIGluIHRoZVxuICAgICAqICAgICAgICBwb3NzZXNzaW9uIG9mIG1vcmUgdGhhbiBvbmUgcGVyc29uLiAqL1xuICAgIHNoYXJlZF9wcml2YXRlX2tleTogMTI4XG4gIH0sXG5cbiAgLyoqIEtleSBzdGF0dXNcbiAgICogQGVudW0ge0ludGVnZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAga2V5U3RhdHVzOiB7XG4gICAgaW52YWxpZDogMCxcbiAgICBleHBpcmVkOiAxLFxuICAgIHJldm9rZWQ6IDIsXG4gICAgdmFsaWQ6IDMsXG4gICAgbm9fc2VsZl9jZXJ0OiA0XG4gIH0sXG5cbiAgLyoqIEFybW9yIHR5cGVcbiAgICogQGVudW0ge0ludGVnZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgYXJtb3I6IHtcbiAgICBtdWx0aXBhcnRfc2VjdGlvbjogMCxcbiAgICBtdWx0aXBhcnRfbGFzdDogMSxcbiAgICBzaWduZWQ6IDIsXG4gICAgbWVzc2FnZTogMyxcbiAgICBwdWJsaWNfa2V5OiA0LFxuICAgIHByaXZhdGVfa2V5OiA1LFxuICAgIHNpZ25hdHVyZTogNlxuICB9LFxuXG4gIC8qKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi01LjIuMy4yM3xSRkM0ODgwLCBzZWN0aW9uIDUuMi4zLjIzfVxuICAgKiBAZW51bSB7SW50ZWdlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICByZWFzb25Gb3JSZXZvY2F0aW9uOiB7XG4gICAgLyoqIE5vIHJlYXNvbiBzcGVjaWZpZWQgKGtleSByZXZvY2F0aW9ucyBvciBjZXJ0IHJldm9jYXRpb25zKSAqL1xuICAgIG5vX3JlYXNvbjogMCxcbiAgICAvKiogS2V5IGlzIHN1cGVyc2VkZWQgKGtleSByZXZvY2F0aW9ucykgKi9cbiAgICBrZXlfc3VwZXJzZWRlZDogMSxcbiAgICAvKiogS2V5IG1hdGVyaWFsIGhhcyBiZWVuIGNvbXByb21pc2VkIChrZXkgcmV2b2NhdGlvbnMpICovXG4gICAga2V5X2NvbXByb21pc2VkOiAyLFxuICAgIC8qKiBLZXkgaXMgcmV0aXJlZCBhbmQgbm8gbG9uZ2VyIHVzZWQgKGtleSByZXZvY2F0aW9ucykgKi9cbiAgICBrZXlfcmV0aXJlZDogMyxcbiAgICAvKiogVXNlciBJRCBpbmZvcm1hdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgKGNlcnQgcmV2b2NhdGlvbnMpICovXG4gICAgdXNlcmlkX2ludmFsaWQ6IDMyXG4gIH0sXG5cbiAgLyoqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vcGVucGdwLXJmYzQ4ODBiaXMtMDQjc2VjdGlvbi01LjIuMy4yNXxSRkM0ODgwYmlzLTA0LCBzZWN0aW9uIDUuMi4zLjI1fVxuICAgKiBAZW51bSB7SW50ZWdlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBmZWF0dXJlczoge1xuICAgIC8qKiAweDAxIC0gTW9kaWZpY2F0aW9uIERldGVjdGlvbiAocGFja2V0cyAxOCBhbmQgMTkpICovXG4gICAgbW9kaWZpY2F0aW9uX2RldGVjdGlvbjogMSxcbiAgICAvKiogMHgwMiAtIEFFQUQgRW5jcnlwdGVkIERhdGEgUGFja2V0IChwYWNrZXQgMjApIGFuZCB2ZXJzaW9uIDVcbiAgICAgKiAgICAgICAgIFN5bW1ldHJpYy1LZXkgRW5jcnlwdGVkIFNlc3Npb24gS2V5IFBhY2tldHMgKHBhY2tldCAzKSAqL1xuICAgIGFlYWQ6IDIsXG4gICAgLyoqIDB4MDQgLSBWZXJzaW9uIDUgUHVibGljLUtleSBQYWNrZXQgZm9ybWF0IGFuZCBjb3JyZXNwb25kaW5nIG5ld1xuICAgICAgKiAgICAgICAgZmluZ2VycHJpbnQgZm9ybWF0ICovXG4gICAgdjVfa2V5czogNFxuICB9LFxuXG4gIC8qKiBBc3NlcnRzIHZhbGlkaXR5IGFuZCBjb252ZXJ0cyBmcm9tIHN0cmluZy9pbnRlZ2VyIHRvIGludGVnZXIuICovXG4gIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSh0eXBlLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlID09PSAnbnVtYmVyJykge1xuICAgICAgZSA9IHRoaXMucmVhZCh0eXBlLCBlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVtlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZVtlXTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW51bSB2YWx1ZS4nKTtcbiAgfSxcblxuICAvKiogQ29udmVydHMgZnJvbSBhbiBpbnRlZ2VyIHRvIHN0cmluZy4gKi9cbiAgcmVhZDogZnVuY3Rpb24gcmVhZCh0eXBlLCBlKSB7XG4gICAgaWYgKCF0eXBlW2J5VmFsdWVdKSB7XG4gICAgICB0eXBlW2J5VmFsdWVdID0gW107XG4gICAgICAoMCwgX2VudHJpZXMyLmRlZmF1bHQpKHR5cGUpLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIF9yZWYyID0gKDAsIF9zbGljZWRUb0FycmF5My5kZWZhdWx0KShfcmVmLCAyKSxcbiAgICAgICAgICAgIGtleSA9IF9yZWYyWzBdLFxuICAgICAgICAgICAgdmFsdWUgPSBfcmVmMlsxXTtcblxuICAgICAgICB0eXBlW2J5VmFsdWVdW3ZhbHVlXSA9IGtleTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlW2J5VmFsdWVdW2VdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0eXBlW2J5VmFsdWVdW2VdO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbnVtIHZhbHVlLicpO1xuICB9XG5cbn07XG5cbn0se1wiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9lbnRyaWVzXCI6MjcsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sXCI6MzMsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiOjQwfV0sMzYwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jb25maWcgPSBfZGVyZXFfKCcuL2NvbmZpZycpO1xuXG52YXIgX2NvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25maWcpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIEhLUCBjbGllbnQgYW5kIGNvbmZpZ3VyZSBpdCB3aXRoIHRoZSBrZXkgc2VydmVyIHVybCBhbmQgZmV0Y2ggZnVuY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSAgICBrZXlTZXJ2ZXJCYXNlVXJsICAob3B0aW9uYWwpIFRoZSBIS1Aga2V5IHNlcnZlciBiYXNlIHVybCBpbmNsdWRpbmdcbiAqICAgdGhlIHByb3RvY29sIHRvIHVzZSBlLmcuIGh0dHBzOi8vcGdwLm1pdC5lZHVcbiAqL1xuZnVuY3Rpb24gSEtQKGtleVNlcnZlckJhc2VVcmwpIHtcbiAgdGhpcy5fYmFzZVVybCA9IGtleVNlcnZlckJhc2VVcmwgfHwgX2NvbmZpZzIuZGVmYXVsdC5rZXlzZXJ2ZXI7XG4gIHRoaXMuX2ZldGNoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuZmV0Y2ggOiBfZGVyZXFfKCdub2RlLWZldGNoJyk7XG59XG5cbi8qKlxuICogU2VhcmNoIGZvciBhIHB1YmxpYyBrZXkgb24gdGhlIGtleSBzZXJ2ZXIgZWl0aGVyIGJ5IGtleSBJRCBvciBwYXJ0IG9mIHRoZSB1c2VyIElELlxuICogQHBhcmFtICB7U3RyaW5nfSAgIG9wdGlvbnMua2V5SUQgICBUaGUgbG9uZyBwdWJsaWMga2V5IElELlxuICogQHBhcmFtICB7U3RyaW5nfSAgIG9wdGlvbnMucXVlcnkgICBUaGlzIGNhbiBiZSBhbnkgcGFydCBvZiB0aGUga2V5IHVzZXIgSUQgc3VjaCBhcyBuYW1lXG4gKiAgIG9yIGVtYWlsIGFkZHJlc3MuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTdHJpbmc+fSAgICAgICAgICBUaGUgYXNjaWkgYXJtb3JlZCBwdWJsaWMga2V5LlxuICogQGFzeW5jXG4gKi9cbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNSBUYW5rcmVkIEhhc2Vcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgY2xpZW50IGZvciB0aGUgT3BlblBHUCBIVFRQIEtleXNlcnZlciBQcm90b2NvbCAoSEtQKVxuICogaW4gb3JkZXIgdG8gbG9va3VwIGFuZCB1cGxvYWQga2V5cyBvbiBzdGFuZGFyZCBwdWJsaWMga2V5IHNlcnZlcnMuXG4gKiBAbW9kdWxlIGhrcFxuICovXG5cbkhLUC5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIHVyaSA9IHRoaXMuX2Jhc2VVcmwgKyAnL3Brcy9sb29rdXA/b3A9Z2V0Jm9wdGlvbnM9bXImc2VhcmNoPSc7XG4gIHZhciBmZXRjaCA9IHRoaXMuX2ZldGNoO1xuXG4gIGlmIChvcHRpb25zLmtleUlkKSB7XG4gICAgdXJpICs9ICcweCcgKyBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5rZXlJZCk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5xdWVyeSkge1xuICAgIHVyaSArPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5xdWVyeSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBwcm92aWRlIGEgcXVlcnkgcGFyYW1ldGVyIScpO1xuICB9XG5cbiAgcmV0dXJuIGZldGNoKHVyaSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgfVxuICB9KS50aGVuKGZ1bmN0aW9uIChwdWJsaWNLZXlBcm1vcmVkKSB7XG4gICAgaWYgKCFwdWJsaWNLZXlBcm1vcmVkIHx8IHB1YmxpY0tleUFybW9yZWQuaW5kZXhPZignLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLScpIDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gcHVibGljS2V5QXJtb3JlZC50cmltKCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVcGxvYWQgYSBwdWJsaWMga2V5IHRvIHRoZSBzZXJ2ZXIuXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgcHVibGljS2V5QXJtb3JlZCAgQW4gYXNjaWkgYXJtb3JlZCBwdWJsaWMga2V5IHRvIGJlIHVwbG9hZGVkLlxuICogQHJldHVybnMge1Byb21pc2V9XG4gKiBAYXN5bmNcbiAqL1xuSEtQLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAocHVibGljS2V5QXJtb3JlZCkge1xuICB2YXIgdXJpID0gdGhpcy5fYmFzZVVybCArICcvcGtzL2FkZCc7XG4gIHZhciBmZXRjaCA9IHRoaXMuX2ZldGNoO1xuXG4gIHJldHVybiBmZXRjaCh1cmksIHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCdcbiAgICB9LFxuICAgIGJvZHk6ICdrZXl0ZXh0PScgKyBlbmNvZGVVUklDb21wb25lbnQocHVibGljS2V5QXJtb3JlZClcbiAgfSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBIS1A7XG5cbn0se1wiLi9jb25maWdcIjozMjUsXCJub2RlLWZldGNoXCI6XCJub2RlLWZldGNoXCJ9XSwzNjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5XS0QgPSBleHBvcnRzLkhLUCA9IGV4cG9ydHMuQXN5bmNQcm94eSA9IGV4cG9ydHMuS2V5cmluZyA9IGV4cG9ydHMuY3J5cHRvID0gZXhwb3J0cy5jb25maWcgPSBleHBvcnRzLmVudW1zID0gZXhwb3J0cy5hcm1vciA9IGV4cG9ydHMuT0lEID0gZXhwb3J0cy5LREZQYXJhbXMgPSBleHBvcnRzLkVDREhTeW1tZXRyaWNLZXkgPSBleHBvcnRzLktleWlkID0gZXhwb3J0cy5TMksgPSBleHBvcnRzLk1QSSA9IGV4cG9ydHMucGFja2V0ID0gZXhwb3J0cy51dGlsID0gZXhwb3J0cy5jbGVhcnRleHQgPSBleHBvcnRzLm1lc3NhZ2UgPSBleHBvcnRzLnNpZ25hdHVyZSA9IGV4cG9ydHMua2V5ID0gZXhwb3J0cy5kZXN0cm95V29ya2VyID0gZXhwb3J0cy5nZXRXb3JrZXIgPSBleHBvcnRzLmluaXRXb3JrZXIgPSBleHBvcnRzLmRlY3J5cHRTZXNzaW9uS2V5cyA9IGV4cG9ydHMuZW5jcnlwdFNlc3Npb25LZXkgPSBleHBvcnRzLmRlY3J5cHRLZXkgPSBleHBvcnRzLnJldm9rZUtleSA9IGV4cG9ydHMucmVmb3JtYXRLZXkgPSBleHBvcnRzLmdlbmVyYXRlS2V5ID0gZXhwb3J0cy52ZXJpZnkgPSBleHBvcnRzLnNpZ24gPSBleHBvcnRzLmRlY3J5cHQgPSBleHBvcnRzLmVuY3J5cHQgPSB1bmRlZmluZWQ7XG5cbnZhciBfb3BlbnBncCA9IF9kZXJlcV8oJy4vb3BlbnBncCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2VuY3J5cHQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb3BlbnBncC5lbmNyeXB0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZGVjcnlwdCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vcGVucGdwLmRlY3J5cHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdzaWduJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX29wZW5wZ3Auc2lnbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ3ZlcmlmeScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vcGVucGdwLnZlcmlmeTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2dlbmVyYXRlS2V5Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX29wZW5wZ3AuZ2VuZXJhdGVLZXk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdyZWZvcm1hdEtleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vcGVucGdwLnJlZm9ybWF0S2V5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAncmV2b2tlS2V5Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX29wZW5wZ3AucmV2b2tlS2V5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZGVjcnlwdEtleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vcGVucGdwLmRlY3J5cHRLZXk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdlbmNyeXB0U2Vzc2lvbktleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vcGVucGdwLmVuY3J5cHRTZXNzaW9uS2V5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZGVjcnlwdFNlc3Npb25LZXlzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX29wZW5wZ3AuZGVjcnlwdFNlc3Npb25LZXlzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnaW5pdFdvcmtlcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vcGVucGdwLmluaXRXb3JrZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdnZXRXb3JrZXInLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb3BlbnBncC5nZXRXb3JrZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdkZXN0cm95V29ya2VyJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX29wZW5wZ3AuZGVzdHJveVdvcmtlcjtcbiAgfVxufSk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4vdXRpbCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ3V0aWwnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9wYWNrZXQgPSBfZGVyZXFfKCcuL3BhY2tldCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ3BhY2tldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhY2tldCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfbXBpID0gX2RlcmVxXygnLi90eXBlL21waScpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ01QSScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21waSkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfczJrID0gX2RlcmVxXygnLi90eXBlL3MyaycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1MySycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3MyaykuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfa2V5aWQgPSBfZGVyZXFfKCcuL3R5cGUva2V5aWQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdLZXlpZCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2tleWlkKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9lY2RoX3N5bWtleSA9IF9kZXJlcV8oJy4vdHlwZS9lY2RoX3N5bWtleScpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ0VDREhTeW1tZXRyaWNLZXknLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lY2RoX3N5bWtleSkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfa2RmX3BhcmFtcyA9IF9kZXJlcV8oJy4vdHlwZS9rZGZfcGFyYW1zJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnS0RGUGFyYW1zJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2RmX3BhcmFtcykuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfb2lkID0gX2RlcmVxXygnLi90eXBlL29pZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ09JRCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29pZCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfYXJtb3IgPSBfZGVyZXFfKCcuL2VuY29kaW5nL2FybW9yJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnYXJtb3InLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hcm1vcikuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuL2VudW1zJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZW51bXMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcykuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi9jb25maWcvY29uZmlnJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnY29uZmlnJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9jcnlwdG8gPSBfZGVyZXFfKCcuL2NyeXB0bycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2NyeXB0bycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyeXB0bykuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfa2V5cmluZyA9IF9kZXJlcV8oJy4va2V5cmluZycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ0tleXJpbmcnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlyaW5nKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9hc3luY19wcm94eSA9IF9kZXJlcV8oJy4vd29ya2VyL2FzeW5jX3Byb3h5Jyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnQXN5bmNQcm94eScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jX3Byb3h5KS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9oa3AgPSBfZGVyZXFfKCcuL2hrcCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ0hLUCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hrcCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfd2tkID0gX2RlcmVxXygnLi93a2QnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdXS0QnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93a2QpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgb3BlbnBncCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9vcGVucGdwKTtcblxudmFyIF9rZXkgPSBfZGVyZXFfKCcuL2tleScpO1xuXG52YXIga2V5TW9kID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2tleSk7XG5cbnZhciBfc2lnbmF0dXJlID0gX2RlcmVxXygnLi9zaWduYXR1cmUnKTtcblxudmFyIHNpZ25hdHVyZU1vZCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9zaWduYXR1cmUpO1xuXG52YXIgX21lc3NhZ2UgPSBfZGVyZXFfKCcuL21lc3NhZ2UnKTtcblxudmFyIG1lc3NhZ2VNb2QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfbWVzc2FnZSk7XG5cbnZhciBfY2xlYXJ0ZXh0ID0gX2RlcmVxXygnLi9jbGVhcnRleHQnKTtcblxudmFyIGNsZWFydGV4dE1vZCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9jbGVhcnRleHQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBvcGVucGdwO1xuXG4vKipcbiAqIEV4cG9ydCBlYWNoIGhpZ2ggbGV2ZWwgYXBpIGZ1bmN0aW9uIHNlcGFyYXRlbHkuXG4gKiBVc2FnZTpcbiAqXG4gKiAgIGltcG9ydCB7IGVuY3J5cHRNZXNzYWdlIH0gZnJvbSAnb3BlbnBncC5qcydcbiAqICAgZW5jcnlwdE1lc3NhZ2Uoa2V5cywgdGV4dClcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25ld2xpbmUtYWZ0ZXItaW1wb3J0LCBpbXBvcnQvZmlyc3QgKi9cblxuLyoqXG4gKiBFeHBvcnQgaGlnaCBsZXZlbCBhcGkgYXMgZGVmYXVsdC5cbiAqIFVzYWdlOlxuICpcbiAqICAgaW1wb3J0IG9wZW5wZ3AgZnJvbSAnb3BlbnBncC5qcydcbiAqICAgb3BlbnBncC5lbmNyeXB0TWVzc2FnZShrZXlzLCB0ZXh0KVxuICovXG5cblxuLyoqXG4gKiBAc2VlIG1vZHVsZTprZXlcbiAqIEBuYW1lIG1vZHVsZTpvcGVucGdwLmtleVxuICovXG5cbnZhciBrZXkgPSBleHBvcnRzLmtleSA9IGtleU1vZDtcblxuLyoqXG4gKiBAc2VlIG1vZHVsZTpzaWduYXR1cmVcbiAqIEBuYW1lIG1vZHVsZTpvcGVucGdwLnNpZ25hdHVyZVxuICovXG52YXIgc2lnbmF0dXJlID0gZXhwb3J0cy5zaWduYXR1cmUgPSBzaWduYXR1cmVNb2Q7XG5cbi8qKlxuICogQHNlZSBtb2R1bGU6bWVzc2FnZVxuICogQG5hbWUgbW9kdWxlOm9wZW5wZ3AubWVzc2FnZVxuICovXG52YXIgbWVzc2FnZSA9IGV4cG9ydHMubWVzc2FnZSA9IG1lc3NhZ2VNb2Q7XG5cbi8qKlxuICogQHNlZSBtb2R1bGU6Y2xlYXJ0ZXh0XG4gKiBAbmFtZSBtb2R1bGU6b3BlbnBncC5jbGVhcnRleHRcbiAqL1xudmFyIGNsZWFydGV4dCA9IGV4cG9ydHMuY2xlYXJ0ZXh0ID0gY2xlYXJ0ZXh0TW9kO1xuXG4vKipcbiAqIEBzZWUgbW9kdWxlOnV0aWxcbiAqIEBuYW1lIG1vZHVsZTpvcGVucGdwLnV0aWxcbiAqL1xuXG59LHtcIi4vY2xlYXJ0ZXh0XCI6MzIyLFwiLi9jb25maWcvY29uZmlnXCI6MzI0LFwiLi9jcnlwdG9cIjozNDAsXCIuL2VuY29kaW5nL2FybW9yXCI6MzU3LFwiLi9lbnVtc1wiOjM1OSxcIi4vaGtwXCI6MzYwLFwiLi9rZXlcIjozNjIsXCIuL2tleXJpbmdcIjozNjMsXCIuL21lc3NhZ2VcIjozNjYsXCIuL29wZW5wZ3BcIjozNjcsXCIuL3BhY2tldFwiOjM3MSxcIi4vc2lnbmF0dXJlXCI6MzkxLFwiLi90eXBlL2VjZGhfc3lta2V5XCI6MzkyLFwiLi90eXBlL2tkZl9wYXJhbXNcIjozOTMsXCIuL3R5cGUva2V5aWRcIjozOTQsXCIuL3R5cGUvbXBpXCI6Mzk1LFwiLi90eXBlL29pZFwiOjM5NixcIi4vdHlwZS9zMmtcIjozOTcsXCIuL3V0aWxcIjozOTgsXCIuL3drZFwiOjM5OSxcIi4vd29ya2VyL2FzeW5jX3Byb3h5XCI6NDAwfV0sMzYyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNBZWFkU3VwcG9ydGVkID0gZXhwb3J0cy5nZXRQcmVmZXJyZWRBbGdvID0gZXhwb3J0cy5nZXRQcmVmZXJyZWRIYXNoQWxnbyA9IGV4cG9ydHMucmVmb3JtYXQgPSBleHBvcnRzLmdlbmVyYXRlID0gZXhwb3J0cy5jcmVhdGVTaWduYXR1cmVQYWNrZXQgPSB1bmRlZmluZWQ7XG5cbnZhciBfdmFsdWVzID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC92YWx1ZXMnKTtcblxudmFyIF92YWx1ZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmFsdWVzKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9zbGljZWRUb0FycmF5MiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5Jyk7XG5cbnZhciBfc2xpY2VkVG9BcnJheTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZWRUb0FycmF5Mik7XG5cbnZhciBfYXNzaWduID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24nKTtcblxudmFyIF9hc3NpZ24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXNzaWduKTtcblxudmFyIF9wcm9taXNlID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbi8qKlxuICogTWVyZ2VzIHNpZ25hdHVyZXMgZnJvbSBzb3VyY2VbYXR0cl0gdG8gZGVzdFthdHRyXVxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYXR0clxuICogQHBhcmFtICB7RnVuY3Rpb259IGNoZWNrRm4gb3B0aW9uYWwsIHNpZ25hdHVyZSBvbmx5IG1lcmdlZCBpZiB0cnVlXG4gKi9cbnZhciBtZXJnZVNpZ25hdHVyZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMTkgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTE4KHNvdXJjZSwgZGVzdCwgYXR0ciwgY2hlY2tGbikge1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMTgkKF9jb250ZXh0MTgpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQxOC5wcmV2ID0gX2NvbnRleHQxOC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc291cmNlID0gc291cmNlW2F0dHJdO1xuXG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICBfY29udGV4dDE4Lm5leHQgPSA4O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRlc3RbYXR0cl0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTgubmV4dCA9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXN0W2F0dHJdID0gc291cmNlO1xuICAgICAgICAgICAgX2NvbnRleHQxOC5uZXh0ID0gODtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgX2NvbnRleHQxOC5uZXh0ID0gODtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoc291cmNlLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmMjAgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTE3KHNvdXJjZVNpZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMTckKF9jb250ZXh0MTcpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQxNy5wcmV2ID0gX2NvbnRleHQxNy5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy50MSA9ICFzb3VyY2VTaWcuaXNFeHBpcmVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2NvbnRleHQxNy50MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE3Lm5leHQgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy50MiA9ICFjaGVja0ZuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQxNy50Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE3Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0ZuKHNvdXJjZVNpZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE3LnQyID0gX2NvbnRleHQxNy5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy50MSA9IF9jb250ZXh0MTcudDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE3LnQwID0gX2NvbnRleHQxNy50MTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29udGV4dDE3LnQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTcubmV4dCA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy50MCA9ICFkZXN0W2F0dHJdLnNvbWUoZnVuY3Rpb24gKGRlc3RTaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmVxdWFsc1VpbnQ4QXJyYXkoZGVzdFNpZy5zaWduYXR1cmUsIHNvdXJjZVNpZy5zaWduYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29udGV4dDE3LnQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTcubmV4dCA9IDEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFthdHRyXS5wdXNoKHNvdXJjZVNpZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNy5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMTcsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDM2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYyMC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKSk7XG5cbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDE4LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUxOCwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VTaWduYXR1cmVzKF94MzIsIF94MzMsIF94MzQsIF94MzUpIHtcbiAgICByZXR1cm4gX3JlZjE5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogUmV2b2tlcyB0aGUga2V5XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJlYXNvbkZvclJldm9jYXRpb24gb3B0aW9uYWwsIG9iamVjdCBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIHJldm9jYXRpb25cbiAqIEBwYXJhbSAge21vZHVsZTplbnVtcy5yZWFzb25Gb3JSZXZvY2F0aW9ufSByZWFzb25Gb3JSZXZvY2F0aW9uLmZsYWcgb3B0aW9uYWwsIGZsYWcgaW5kaWNhdGluZyB0aGUgcmVhc29uIGZvciByZXZvY2F0aW9uXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHJlYXNvbkZvclJldm9jYXRpb24uc3RyaW5nIG9wdGlvbmFsLCBzdHJpbmcgZXhwbGFpbmluZyB0aGUgcmVhc29uIGZvciByZXZvY2F0aW9uXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlIG9wdGlvbmFsLCBvdmVycmlkZSB0aGUgY3JlYXRpb250aW1lIG9mIHRoZSByZXZvY2F0aW9uIHNpZ25hdHVyZVxuICogQHJldHVybiB7bW9kdWxlOmtleX5LZXl9IG5ldyBrZXkgd2l0aCByZXZvY2F0aW9uIHNpZ25hdHVyZVxuICovXG5cblxuLyoqXG4gKiBDcmVhdGUgc2lnbmF0dXJlIHBhY2tldFxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVRvU2lnbiBDb250YWlucyBwYWNrZXRzIHRvIGJlIHNpZ25lZFxuICogQHBhcmFtICB7bW9kdWxlOnBhY2tldC5TZWNyZXRLZXl8XG4gKiAgICAgICAgICBtb2R1bGU6cGFja2V0LlNlY3JldFN1YmtleX0gICAgICBzaWduaW5nS2V5UGFja2V0IHNlY3JldCBrZXkgcGFja2V0IGZvciBzaWduaW5nXG4gKiBAcGFyYW0gIHtPYmplY3R9IHNpZ25hdHVyZVByb3BlcnRpZXMgICAgICAob3B0aW9uYWwpIHByb3BlcnRpZXMgdG8gd3JpdGUgb24gdGhlIHNpZ25hdHVyZSBwYWNrZXQgYmVmb3JlIHNpZ25pbmdcbiAqIEBwYXJhbSAge0RhdGV9IGRhdGUgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgb3ZlcnJpZGUgdGhlIGNyZWF0aW9udGltZSBvZiB0aGUgc2lnbmF0dXJlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHVzZXJJZCAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIHVzZXIgSURcbiAqIEByZXR1cm4ge21vZHVsZTpwYWNrZXQvc2lnbmF0dXJlfSAgICAgICAgIHNpZ25hdHVyZSBwYWNrZXRcbiAqL1xudmFyIGNyZWF0ZVNpZ25hdHVyZVBhY2tldCA9IGV4cG9ydHMuY3JlYXRlU2lnbmF0dXJlUGFja2V0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjM0ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyOShkYXRhVG9TaWduLCBwcml2YXRlS2V5LCBzaWduaW5nS2V5UGFja2V0LCBzaWduYXR1cmVQcm9wZXJ0aWVzLCBkYXRlLCB1c2VySWQpIHtcbiAgICB2YXIgc2lnbmF0dXJlUGFja2V0O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMjkkKF9jb250ZXh0MjkpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyOS5wcmV2ID0gX2NvbnRleHQyOS5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKHNpZ25pbmdLZXlQYWNrZXQuaXNEZWNyeXB0ZWQpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyOS5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgaXMgbm90IGRlY3J5cHRlZC4nKTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0LlNpZ25hdHVyZShkYXRlKTtcblxuICAgICAgICAgICAgKDAsIF9hc3NpZ24yLmRlZmF1bHQpKHNpZ25hdHVyZVBhY2tldCwgc2lnbmF0dXJlUHJvcGVydGllcyk7XG4gICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQucHVibGljS2V5QWxnb3JpdGhtID0gc2lnbmluZ0tleVBhY2tldC5hbGdvcml0aG07XG4gICAgICAgICAgICBfY29udGV4dDI5Lm5leHQgPSA3O1xuICAgICAgICAgICAgcmV0dXJuIGdldFByZWZlcnJlZEhhc2hBbGdvKHByaXZhdGVLZXksIHNpZ25pbmdLZXlQYWNrZXQsIGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQuaGFzaEFsZ29yaXRobSA9IF9jb250ZXh0Mjkuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0MjkubmV4dCA9IDEwO1xuICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVBhY2tldC5zaWduKHNpZ25pbmdLZXlQYWNrZXQsIGRhdGFUb1NpZ24pO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDI5LmFicnVwdCgncmV0dXJuJywgc2lnbmF0dXJlUGFja2V0KTtcblxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDI5LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyOSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlUGFja2V0KF94NTIsIF94NTMsIF94NTQsIF94NTUsIF94NTYsIF94NTcpIHtcbiAgICByZXR1cm4gX3JlZjM0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIHVzZXIgY2VydGlmaWNhdGVcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXl9IHByaW1hcnlLZXkgIFRoZSBwcmltYXJ5IGtleSBwYWNrZXRcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2lnbmF0dXJlfSAgY2VydGlmaWNhdGUgQSBjZXJ0aWZpY2F0ZSBvZiB0aGlzIHVzZXJcbiAqIEBwYXJhbSAge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gICAga2V5cyAgICAgICAgQXJyYXkgb2Yga2V5cyB0byB2ZXJpZnkgY2VydGlmaWNhdGUgc2lnbmF0dXJlc1xuICogQHBhcmFtICB7RGF0ZX0gICAgICAgICAgICAgICAgICAgICBkYXRlICAgICAgICBVc2UgdGhlIGdpdmVuIGRhdGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxtb2R1bGU6ZW51bXMua2V5U3RhdHVzPn0gICAgIHN0YXR1cyBvZiB0aGUgY2VydGlmaWNhdGVcbiAqIEBhc3luY1xuICovXG5cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgT3BlblBHUCBrZXkuIFN1cHBvcnRzIFJTQSBhbmQgRUNDIGtleXMuXG4gKiBQcmltYXJ5IGFuZCBzdWJrZXkgd2lsbCBiZSBvZiBzYW1lIHR5cGUuXG4gKiBAcGFyYW0ge21vZHVsZTplbnVtcy5wdWJsaWNLZXl9IFtvcHRpb25zLmtleVR5cGU9bW9kdWxlOmVudW1zLnB1YmxpY0tleS5yc2FfZW5jcnlwdF9zaWduXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluZGljYXRlIHdoYXQgdHlwZSBvZiBrZXkgdG8gbWFrZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0EgaXMgMS4gU2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTkuMX1cbiAqIEBwYXJhbSB7SW50ZWdlcn0gb3B0aW9ucy5udW1CaXRzICAgIG51bWJlciBvZiBiaXRzIGZvciB0aGUga2V5IGNyZWF0aW9uLlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gIG9wdGlvbnMudXNlcklkc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZXMgYWxyZWFkeSBpbiBmb3JtIG9mIFwiVXNlciBOYW1lIDx1c2VybmFtZUBlbWFpbC5jb20+XCJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhcnJheSBpcyB1c2VkLCB0aGUgZmlyc3QgdXNlcklkIGlzIHNldCBhcyBwcmltYXJ5IHVzZXIgSWRcbiAqIEBwYXJhbSB7U3RyaW5nfSAgb3B0aW9ucy5wYXNzcGhyYXNlIFRoZSBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCB0aGUgcmVzdWx0aW5nIHByaXZhdGUga2V5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMua2V5RXhwaXJhdGlvblRpbWU9MF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIGtleSBjcmVhdGlvbiB0aW1lIHRoYXQgdGhlIGtleSBleHBpcmVzXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGN1cnZlICAgICAgICAgICAgKG9wdGlvbmFsKSBlbGxpcHRpYyBjdXJ2ZSBmb3IgRUNDIGtleXNcbiAqIEBwYXJhbSAge0RhdGV9IGRhdGUgICAgICAgICBPdmVycmlkZSB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUga2V5IGFuZCB0aGUga2V5IHNpZ25hdHVyZXNcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHN1YmtleXMgICAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIGVhY2ggc3Via2V5LCBkZWZhdWx0IHRvIG1haW4ga2V5IG9wdGlvbnMuIGUuZy4gW3tzaWduOiB0cnVlLCBwYXNzcGhyYXNlOiAnMTIzJ31dXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduIHBhcmFtZXRlciBkZWZhdWx0cyB0byBmYWxzZSwgYW5kIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdWJrZXkgc2hvdWxkIHNpZ24gcmF0aGVyIHRoYW4gZW5jcnlwdFxuICogQHJldHVybnMge1Byb21pc2U8bW9kdWxlOmtleS5LZXk+fVxuICogQGFzeW5jXG4gKiBAc3RhdGljXG4gKi9cbnZhciBnZW5lcmF0ZSA9IGV4cG9ydHMuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNDkgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQ1KG9wdGlvbnMpIHtcbiAgICB2YXIgZ2VuZXJhdGVTZWNyZXRLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZjUwID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0MyhvcHRpb25zKSB7XG4gICAgICAgIHZhciBzZWNyZXRLZXlQYWNrZXQ7XG4gICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNDMkKF9jb250ZXh0NDMpIHtcbiAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDQzLnByZXYgPSBfY29udGV4dDQzLm5leHQpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHNlY3JldEtleVBhY2tldCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0LlNlY3JldEtleShvcHRpb25zLmRhdGUpO1xuXG4gICAgICAgICAgICAgICAgc2VjcmV0S2V5UGFja2V0LnBhY2tldHMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHNlY3JldEtleVBhY2tldC5hbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBvcHRpb25zLmFsZ29yaXRobSk7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQ0My5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VjcmV0S2V5UGFja2V0LmdlbmVyYXRlKG9wdGlvbnMubnVtQml0cywgb3B0aW9ucy5jdXJ2ZSk7XG5cbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQzLmFicnVwdCgncmV0dXJuJywgc2VjcmV0S2V5UGFja2V0KTtcblxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NDMuc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgX2NhbGxlZTQzLCB0aGlzKTtcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRlU2VjcmV0S2V5KF94ODYpIHtcbiAgICAgICAgcmV0dXJuIF9yZWY1MC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9KCk7XG5cbiAgICB2YXIgZ2VuZXJhdGVTZWNyZXRTdWJrZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZjUxID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0NChvcHRpb25zKSB7XG4gICAgICAgIHZhciBzZWNyZXRTdWJrZXlQYWNrZXQ7XG4gICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNDQkKF9jb250ZXh0NDQpIHtcbiAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDQ0LnByZXYgPSBfY29udGV4dDQ0Lm5leHQpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHNlY3JldFN1YmtleVBhY2tldCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0LlNlY3JldFN1YmtleShvcHRpb25zLmRhdGUpO1xuXG4gICAgICAgICAgICAgICAgc2VjcmV0U3Via2V5UGFja2V0LnBhY2tldHMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHNlY3JldFN1YmtleVBhY2tldC5hbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBvcHRpb25zLmFsZ29yaXRobSk7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQ0NC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VjcmV0U3Via2V5UGFja2V0LmdlbmVyYXRlKG9wdGlvbnMubnVtQml0cywgb3B0aW9ucy5jdXJ2ZSk7XG5cbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQ0LmFicnVwdCgncmV0dXJuJywgc2VjcmV0U3Via2V5UGFja2V0KTtcblxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NDQuc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgX2NhbGxlZTQ0LCB0aGlzKTtcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRlU2VjcmV0U3Via2V5KF94ODcpIHtcbiAgICAgICAgcmV0dXJuIF9yZWY1MS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9KCk7XG5cbiAgICB2YXIgcHJvbWlzZXMsIHNhbml0aXplS2V5T3B0aW9ucztcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQ1JChfY29udGV4dDQ1KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NDUucHJldiA9IF9jb250ZXh0NDUubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHNhbml0aXplS2V5T3B0aW9ucyA9IGZ1bmN0aW9uIHNhbml0aXplS2V5T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHZhciBzdWJrZXlEZWZhdWx0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICAgICAgICAgICAgb3B0aW9ucy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmUgfHwgc3Via2V5RGVmYXVsdHMuY3VydmU7XG4gICAgICAgICAgICAgIG9wdGlvbnMubnVtQml0cyA9IG9wdGlvbnMubnVtQml0cyB8fCBzdWJrZXlEZWZhdWx0cy5udW1CaXRzO1xuICAgICAgICAgICAgICBvcHRpb25zLmtleUV4cGlyYXRpb25UaW1lID0gb3B0aW9ucy5rZXlFeHBpcmF0aW9uVGltZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5rZXlFeHBpcmF0aW9uVGltZSA6IHN1YmtleURlZmF1bHRzLmtleUV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgICAgICBvcHRpb25zLnBhc3NwaHJhc2UgPSBfdXRpbDIuZGVmYXVsdC5pc1N0cmluZyhvcHRpb25zLnBhc3NwaHJhc2UpID8gb3B0aW9ucy5wYXNzcGhyYXNlIDogc3Via2V5RGVmYXVsdHMucGFzc3BocmFzZTtcbiAgICAgICAgICAgICAgb3B0aW9ucy5kYXRlID0gb3B0aW9ucy5kYXRlIHx8IHN1YmtleURlZmF1bHRzLmRhdGU7XG5cbiAgICAgICAgICAgICAgb3B0aW9ucy5zaWduID0gb3B0aW9ucy5zaWduIHx8IGZhbHNlO1xuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmN1cnZlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY3VydmUgPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmN1cnZlLCBvcHRpb25zLmN1cnZlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCB2YWxpZCBjdXJ2ZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY3VydmUgPT09IF9lbnVtczIuZGVmYXVsdC5jdXJ2ZS5lZDI1NTE5IHx8IG9wdGlvbnMuY3VydmUgPT09IF9lbnVtczIuZGVmYXVsdC5jdXJ2ZS5jdXJ2ZTI1NTE5KSB7XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaWduKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lZGRzYTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jdXJ2ZSA9IF9lbnVtczIuZGVmYXVsdC5jdXJ2ZS5lZDI1NTE5O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZGg7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY3VydmUgPSBfZW51bXMyLmRlZmF1bHQuY3VydmUuY3VydmUyNTUxOTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFsZ29yaXRobSA9IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2E7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFsZ29yaXRobSA9IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5udW1CaXRzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LnJzYV9lbmNyeXB0X3NpZ247XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQga2V5IHR5cGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG9wdGlvbnMuc2lnbiA9IHRydWU7IC8vIHByaW1hcnkga2V5IGlzIGFsd2F5cyBhIHNpZ25pbmcga2V5XG4gICAgICAgICAgICBvcHRpb25zID0gc2FuaXRpemVLZXlPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICAgICAgb3B0aW9ucy5zdWJrZXlzID0gb3B0aW9ucy5zdWJrZXlzLm1hcChmdW5jdGlvbiAoc3Via2V5LCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gc2FuaXRpemVLZXlPcHRpb25zKG9wdGlvbnMuc3Via2V5c1tpbmRleF0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHByb21pc2VzID0gW2dlbmVyYXRlU2VjcmV0S2V5KG9wdGlvbnMpXTtcblxuICAgICAgICAgICAgcHJvbWlzZXMgPSBwcm9taXNlcy5jb25jYXQob3B0aW9ucy5zdWJrZXlzLm1hcChnZW5lcmF0ZVNlY3JldFN1YmtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NDUuYWJydXB0KCdyZXR1cm4nLCBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKHBhY2tldHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdyYXBLZXlPYmplY3QocGFja2V0c1swXSwgcGFja2V0cy5zbGljZSgxKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQ1LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU0NSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGUoX3g4NCkge1xuICAgIHJldHVybiBfcmVmNDkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBSZWZvcm1hdHMgYW5kIHNpZ25zIGFuIE9wZW5QR1Aga2V5IHdpdGggYSBnaXZlbiBVc2VyIElELiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBSU0Ega2V5cy5cbiAqIEBwYXJhbSB7bW9kdWxlOmtleS5LZXl9IG9wdGlvbnMucHJpdmF0ZUtleSAgIFRoZSBwcml2YXRlIGtleSB0byByZWZvcm1hdFxuICogQHBhcmFtIHttb2R1bGU6ZW51bXMucHVibGljS2V5fSBbb3B0aW9ucy5rZXlUeXBlPW1vZHVsZTplbnVtcy5wdWJsaWNLZXkucnNhX2VuY3J5cHRfc2lnbl1cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5PFN0cmluZz59ICBvcHRpb25zLnVzZXJJZHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWVzIGFscmVhZHkgaW4gZm9ybSBvZiBcIlVzZXIgTmFtZSA8dXNlcm5hbWVAZW1haWwuY29tPlwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYXJyYXkgaXMgdXNlZCwgdGhlIGZpcnN0IHVzZXJJZCBpcyBzZXQgYXMgcHJpbWFyeSB1c2VyIElkXG4gKiBAcGFyYW0ge1N0cmluZ30gIG9wdGlvbnMucGFzc3BocmFzZSBUaGUgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgdGhlIHJlc3VsdGluZyBwcml2YXRlIGtleVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmtleUV4cGlyYXRpb25UaW1lPTBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHRoZSBrZXkgY3JlYXRpb24gdGltZSB0aGF0IHRoZSBrZXkgZXhwaXJlc1xuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgIE92ZXJyaWRlIHRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSBrZXkgYW5kIHRoZSBrZXkgc2lnbmF0dXJlc1xuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gc3Via2V5cyAgIChvcHRpb25hbCkgb3B0aW9ucyBmb3IgZWFjaCBzdWJrZXksIGRlZmF1bHQgdG8gbWFpbiBrZXkgb3B0aW9ucy4gZS5nLiBbe3NpZ246IHRydWUsIHBhc3NwaHJhc2U6ICcxMjMnfV1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldm9rZWQ9ZmFsc2VdIFdoZXRoZXIgdGhlIGtleSBzaG91bGQgaW5jbHVkZSBhIHJldm9jYXRpb24gc2lnbmF0dXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxtb2R1bGU6a2V5LktleT59XG4gKiBAYXN5bmNcbiAqIEBzdGF0aWNcbiAqL1xuXG5cbnZhciByZWZvcm1hdCA9IGV4cG9ydHMucmVmb3JtYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNTIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQ2KG9wdGlvbnMpIHtcbiAgICB2YXIgaXNEZWNyeXB0ZWQsIHBhY2tldGxpc3QsIHNlY3JldEtleVBhY2tldCwgc2VjcmV0U3Via2V5UGFja2V0cywgaSwgc2FuaXRpemVLZXlPcHRpb25zO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNDYkKF9jb250ZXh0NDYpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ0Ni5wcmV2ID0gX2NvbnRleHQ0Ni5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc2FuaXRpemVLZXlPcHRpb25zID0gZnVuY3Rpb24gc2FuaXRpemVLZXlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgdmFyIHN1YmtleURlZmF1bHRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgICAgICAgICBvcHRpb25zLmtleUV4cGlyYXRpb25UaW1lID0gb3B0aW9ucy5rZXlFeHBpcmF0aW9uVGltZSB8fCBzdWJrZXlEZWZhdWx0cy5rZXlFeHBpcmF0aW9uVGltZTtcbiAgICAgICAgICAgICAgb3B0aW9ucy5wYXNzcGhyYXNlID0gX3V0aWwyLmRlZmF1bHQuaXNTdHJpbmcob3B0aW9ucy5wYXNzcGhyYXNlKSA/IG9wdGlvbnMucGFzc3BocmFzZSA6IHN1YmtleURlZmF1bHRzLnBhc3NwaHJhc2U7XG4gICAgICAgICAgICAgIG9wdGlvbnMuZGF0ZSA9IG9wdGlvbnMuZGF0ZSB8fCBzdWJrZXlEZWZhdWx0cy5kYXRlO1xuXG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHNhbml0aXplS2V5T3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICAgICAgX2NvbnRleHQ0Ni5wcmV2ID0gMjtcbiAgICAgICAgICAgIGlzRGVjcnlwdGVkID0gb3B0aW9ucy5wcml2YXRlS2V5LmdldEtleVBhY2tldHMoKS5ldmVyeShmdW5jdGlvbiAoa2V5UGFja2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBrZXlQYWNrZXQuaXNEZWNyeXB0ZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzRGVjcnlwdGVkKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NDYubmV4dCA9IDc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDQ2Lm5leHQgPSA3O1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJpdmF0ZUtleS5kZWNyeXB0KCk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBfY29udGV4dDQ2Lm5leHQgPSAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgX2NvbnRleHQ0Ni5wcmV2ID0gOTtcbiAgICAgICAgICAgIF9jb250ZXh0NDYudDAgPSBfY29udGV4dDQ2WydjYXRjaCddKDIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgbm90IGRlY3J5cHRlZCcpO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHBhY2tldGxpc3QgPSBvcHRpb25zLnByaXZhdGVLZXkudG9QYWNrZXRsaXN0KCk7XG4gICAgICAgICAgICBzZWNyZXRLZXlQYWNrZXQgPSB2b2lkIDA7XG4gICAgICAgICAgICBzZWNyZXRTdWJrZXlQYWNrZXRzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWNrZXRsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChwYWNrZXRsaXN0W2ldLnRhZyA9PT0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zZWNyZXRLZXkpIHtcbiAgICAgICAgICAgICAgICBzZWNyZXRLZXlQYWNrZXQgPSBwYWNrZXRsaXN0W2ldO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldGxpc3RbaV0udGFnID09PSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnNlY3JldFN1YmtleSkge1xuICAgICAgICAgICAgICAgIHNlY3JldFN1YmtleVBhY2tldHMucHVzaChwYWNrZXRsaXN0W2ldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VjcmV0S2V5UGFja2V0KSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NDYubmV4dCA9IDE4O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3JldCBrZXkgcGFja2V0Jyk7XG5cbiAgICAgICAgICBjYXNlIDE4OlxuXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3Via2V5cykge1xuICAgICAgICAgICAgICBvcHRpb25zLnN1YmtleXMgPSBzZWNyZXRTdWJrZXlQYWNrZXRzLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEob3B0aW9ucy5zdWJrZXlzLmxlbmd0aCAhPT0gc2VjcmV0U3Via2V5UGFja2V0cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NDYubmV4dCA9IDIxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2Ygc3Via2V5IG9wdGlvbnMgZG9lcyBub3QgbWF0Y2ggbnVtYmVyIG9mIHN1YmtleXMnKTtcblxuICAgICAgICAgIGNhc2UgMjE6XG5cbiAgICAgICAgICAgIG9wdGlvbnMuc3Via2V5cyA9IG9wdGlvbnMuc3Via2V5cy5tYXAoZnVuY3Rpb24gKHN1YmtleSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNhbml0aXplS2V5T3B0aW9ucyhvcHRpb25zLnN1YmtleXNbaW5kZXhdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0Ni5hYnJ1cHQoJ3JldHVybicsIHdyYXBLZXlPYmplY3Qoc2VjcmV0S2V5UGFja2V0LCBzZWNyZXRTdWJrZXlQYWNrZXRzLCBvcHRpb25zKSk7XG5cbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0Ni5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNDYsIHRoaXMsIFtbMiwgOV1dKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiByZWZvcm1hdChfeDg4KSB7XG4gICAgcmV0dXJuIF9yZWY1Mi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG52YXIgd3JhcEtleU9iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWY1MyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNTEoc2VjcmV0S2V5UGFja2V0LCBzZWNyZXRTdWJrZXlQYWNrZXRzLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhY2tldGxpc3QsIGRhdGFUb1NpZ247XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1MSQoX2NvbnRleHQ1MSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDUxLnByZXYgPSBfY29udGV4dDUxLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFzc3BocmFzZSkge1xuICAgICAgICAgICAgICBfY29udGV4dDUxLm5leHQgPSAzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQ1MS5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBzZWNyZXRLZXlQYWNrZXQuZW5jcnlwdChvcHRpb25zLnBhc3NwaHJhc2UpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgX2NvbnRleHQ1MS5uZXh0ID0gNTtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoc2VjcmV0U3Via2V5UGFja2V0cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjU0ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0NyhzZWNyZXRTdWJrZXlQYWNrZXQsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1YmtleVBhc3NwaHJhc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0NyQoX2NvbnRleHQ0Nykge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDQ3LnByZXYgPSBfY29udGV4dDQ3Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJrZXlQYXNzcGhyYXNlID0gb3B0aW9ucy5zdWJrZXlzW2luZGV4XS5wYXNzcGhyYXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YmtleVBhc3NwaHJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0Ny5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NDcubmV4dCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VjcmV0U3Via2V5UGFja2V0LmVuY3J5cHQoc3Via2V5UGFzc3BocmFzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQ3LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU0NywgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94OTMsIF94OTQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjU0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHBhY2tldGxpc3QgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG5cblxuICAgICAgICAgICAgcGFja2V0bGlzdC5wdXNoKHNlY3JldEtleVBhY2tldCk7XG5cbiAgICAgICAgICAgIF9jb250ZXh0NTEubmV4dCA9IDk7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKG9wdGlvbnMudXNlcklkcy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjU1ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0OCh1c2VySWQsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHVzZXJJZFBhY2tldCwgZGF0YVRvU2lnbiwgc2lnbmF0dXJlUGFja2V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNDgkKF9jb250ZXh0NDgpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ0OC5wcmV2ID0gX2NvbnRleHQ0OC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklkUGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuVXNlcmlkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZFBhY2tldC5mb3JtYXQodXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVRvU2lnbiA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVG9TaWduLnVzZXJpZCA9IHVzZXJJZFBhY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUb1NpZ24ua2V5ID0gc2VjcmV0S2V5UGFja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuU2lnbmF0dXJlKG9wdGlvbnMuZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5zaWduYXR1cmVUeXBlID0gX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5jZXJ0X2dlbmVyaWM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQucHVibGljS2V5QWxnb3JpdGhtID0gc2VjcmV0S2V5UGFja2V0LmFsZ29yaXRobTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NDgubmV4dCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFByZWZlcnJlZEhhc2hBbGdvKG51bGwsIHNlY3JldEtleVBhY2tldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0Lmhhc2hBbGdvcml0aG0gPSBfY29udGV4dDQ4LnNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5rZXlGbGFncyA9IFtfZW51bXMyLmRlZmF1bHQua2V5RmxhZ3MuY2VydGlmeV9rZXlzIHwgX2VudW1zMi5kZWZhdWx0LmtleUZsYWdzLnNpZ25fZGF0YV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQucHJlZmVycmVkU3ltbWV0cmljQWxnb3JpdGhtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIGFlczI1NiwgYWVzMTI4LCB0aGVuIGFlczE5MiAobm8gV2ViQ3J5cHRvIHN1cHBvcnQ6IGh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9ibGluay93ZWJjcnlwdG8jVE9DLUFFUy1zdXBwb3J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LnByZWZlcnJlZFN5bW1ldHJpY0FsZ29yaXRobXMucHVzaChfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLmFlczI1Nik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQucHJlZmVycmVkU3ltbWV0cmljQWxnb3JpdGhtcy5wdXNoKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMuYWVzMTI4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5wcmVmZXJyZWRTeW1tZXRyaWNBbGdvcml0aG1zLnB1c2goX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYy5hZXMxOTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LnByZWZlcnJlZFN5bW1ldHJpY0FsZ29yaXRobXMucHVzaChfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLmNhc3Q1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5wcmVmZXJyZWRTeW1tZXRyaWNBbGdvcml0aG1zLnB1c2goX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYy50cmlwbGVkZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0ICYmIF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0X3ZlcnNpb24gPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LnByZWZlcnJlZEFlYWRBbGdvcml0aG1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5wcmVmZXJyZWRBZWFkQWxnb3JpdGhtcy5wdXNoKF9lbnVtczIuZGVmYXVsdC5hZWFkLmVheCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5wcmVmZXJyZWRBZWFkQWxnb3JpdGhtcy5wdXNoKF9lbnVtczIuZGVmYXVsdC5hZWFkLm9jYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQucHJlZmVycmVkSGFzaEFsZ29yaXRobXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBmYXN0IGFzbS5qcyBpbXBsZW1lbnRhdGlvbnMgKFNIQS0yNTYpLiBTSEEtMSB3aWxsIG5vdCBiZSBzZWN1cmUgbXVjaCBsb25nZXIuLi5tb3ZlIHRvIGJvdHRvbSBvZiBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQucHJlZmVycmVkSGFzaEFsZ29yaXRobXMucHVzaChfZW51bXMyLmRlZmF1bHQuaGFzaC5zaGEyNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LnByZWZlcnJlZEhhc2hBbGdvcml0aG1zLnB1c2goX2VudW1zMi5kZWZhdWx0Lmhhc2guc2hhNTEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5wcmVmZXJyZWRIYXNoQWxnb3JpdGhtcy5wdXNoKF9lbnVtczIuZGVmYXVsdC5oYXNoLnNoYTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LnByZWZlcnJlZENvbXByZXNzaW9uQWxnb3JpdGhtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LnByZWZlcnJlZENvbXByZXNzaW9uQWxnb3JpdGhtcy5wdXNoKF9lbnVtczIuZGVmYXVsdC5jb21wcmVzc2lvbi56bGliKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5wcmVmZXJyZWRDb21wcmVzc2lvbkFsZ29yaXRobXMucHVzaChfZW51bXMyLmRlZmF1bHQuY29tcHJlc3Npb24uemlwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQuaXNQcmltYXJ5VXNlcklEID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29uZmlnMi5kZWZhdWx0LmludGVncml0eV9wcm90ZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5mZWF0dXJlcyA9IFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LmZlYXR1cmVzWzBdIHw9IF9lbnVtczIuZGVmYXVsdC5mZWF0dXJlcy5tb2RpZmljYXRpb25fZGV0ZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0ICYmIF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0X3ZlcnNpb24gPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFja2V0LmZlYXR1cmVzIHx8IChzaWduYXR1cmVQYWNrZXQuZmVhdHVyZXMgPSBbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQuZmVhdHVyZXNbMF0gfD0gX2VudW1zMi5kZWZhdWx0LmZlYXR1cmVzLmFlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldC5mZWF0dXJlc1swXSB8PSBfZW51bXMyLmRlZmF1bHQuZmVhdHVyZXMudjVfa2V5cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmtleUV4cGlyYXRpb25UaW1lID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQua2V5RXhwaXJhdGlvblRpbWUgPSBvcHRpb25zLmtleUV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQua2V5TmV2ZXJFeHBpcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQ4Lm5leHQgPSAzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmVQYWNrZXQuc2lnbihzZWNyZXRLZXlQYWNrZXQsIGRhdGFUb1NpZ24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQ4LmFicnVwdCgncmV0dXJuJywgeyB1c2VySWRQYWNrZXQ6IHVzZXJJZFBhY2tldCwgc2lnbmF0dXJlUGFja2V0OiBzaWduYXR1cmVQYWNrZXQgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0OC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNDgsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDk1LCBfeDk2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY1NS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKSkudGhlbihmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKF9yZWY1Nikge1xuICAgICAgICAgICAgICAgIHZhciB1c2VySWRQYWNrZXQgPSBfcmVmNTYudXNlcklkUGFja2V0LFxuICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWNrZXQgPSBfcmVmNTYuc2lnbmF0dXJlUGFja2V0O1xuXG4gICAgICAgICAgICAgICAgcGFja2V0bGlzdC5wdXNoKHVzZXJJZFBhY2tldCk7XG4gICAgICAgICAgICAgICAgcGFja2V0bGlzdC5wdXNoKHNpZ25hdHVyZVBhY2tldCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBfY29udGV4dDUxLm5leHQgPSAxMTtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoc2VjcmV0U3Via2V5UGFja2V0cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjU3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0OShzZWNyZXRTdWJrZXlQYWNrZXQsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1YmtleU9wdGlvbnMsIGRhdGFUb1NpZ24sIHN1YmtleVNpZ25hdHVyZVBhY2tldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQ5JChfY29udGV4dDQ5KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NDkucHJldiA9IF9jb250ZXh0NDkubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmtleU9wdGlvbnMgPSBvcHRpb25zLnN1YmtleXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVRvU2lnbiA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVG9TaWduLmtleSA9IHNlY3JldEtleVBhY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUb1NpZ24uYmluZCA9IHNlY3JldFN1YmtleVBhY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmtleVNpZ25hdHVyZVBhY2tldCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0LlNpZ25hdHVyZShzdWJrZXlPcHRpb25zLmRhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJrZXlTaWduYXR1cmVQYWNrZXQuc2lnbmF0dXJlVHlwZSA9IF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUuc3Via2V5X2JpbmRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJrZXlTaWduYXR1cmVQYWNrZXQucHVibGljS2V5QWxnb3JpdGhtID0gc2VjcmV0S2V5UGFja2V0LmFsZ29yaXRobTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NDkubmV4dCA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJlZmVycmVkSGFzaEFsZ28obnVsbCwgc2VjcmV0U3Via2V5UGFja2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmtleVNpZ25hdHVyZVBhY2tldC5oYXNoQWxnb3JpdGhtID0gX2NvbnRleHQ0OS5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJrZXlTaWduYXR1cmVQYWNrZXQua2V5RmxhZ3MgPSBzdWJrZXlPcHRpb25zLnNpZ24gPyBfZW51bXMyLmRlZmF1bHQua2V5RmxhZ3Muc2lnbl9kYXRhIDogW19lbnVtczIuZGVmYXVsdC5rZXlGbGFncy5lbmNyeXB0X2NvbW11bmljYXRpb24gfCBfZW51bXMyLmRlZmF1bHQua2V5RmxhZ3MuZW5jcnlwdF9zdG9yYWdlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJrZXlPcHRpb25zLmtleUV4cGlyYXRpb25UaW1lID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJrZXlTaWduYXR1cmVQYWNrZXQua2V5RXhwaXJhdGlvblRpbWUgPSBzdWJrZXlPcHRpb25zLmtleUV4cGlyYXRpb25UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJrZXlTaWduYXR1cmVQYWNrZXQua2V5TmV2ZXJFeHBpcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQ5Lm5leHQgPSAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJrZXlTaWduYXR1cmVQYWNrZXQuc2lnbihzZWNyZXRLZXlQYWNrZXQsIGRhdGFUb1NpZ24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQ5LmFicnVwdCgncmV0dXJuJywgeyBzZWNyZXRTdWJrZXlQYWNrZXQ6IHNlY3JldFN1YmtleVBhY2tldCwgc3Via2V5U2lnbmF0dXJlUGFja2V0OiBzdWJrZXlTaWduYXR1cmVQYWNrZXQgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0OS5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNDksIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDk3LCBfeDk4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY1Ny5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKSkudGhlbihmdW5jdGlvbiAocGFja2V0cykge1xuICAgICAgICAgICAgICBwYWNrZXRzLmZvckVhY2goZnVuY3Rpb24gKF9yZWY1OCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWNyZXRTdWJrZXlQYWNrZXQgPSBfcmVmNTguc2VjcmV0U3Via2V5UGFja2V0LFxuICAgICAgICAgICAgICAgICAgICBzdWJrZXlTaWduYXR1cmVQYWNrZXQgPSBfcmVmNTguc3Via2V5U2lnbmF0dXJlUGFja2V0O1xuXG4gICAgICAgICAgICAgICAgcGFja2V0bGlzdC5wdXNoKHNlY3JldFN1YmtleVBhY2tldCk7XG4gICAgICAgICAgICAgICAgcGFja2V0bGlzdC5wdXNoKHN1YmtleVNpZ25hdHVyZVBhY2tldCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlIDExOlxuXG4gICAgICAgICAgICAvLyBBZGQgcmV2b2NhdGlvbiBzaWduYXR1cmUgcGFja2V0IGZvciBjcmVhdGluZyBhIHJldm9jYXRpb24gY2VydGlmaWNhdGUuXG4gICAgICAgICAgICAvLyBUaGlzIHBhY2tldCBzaG91bGQgYmUgcmVtb3ZlZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBrZXkuXG4gICAgICAgICAgICBkYXRhVG9TaWduID0geyBrZXk6IHNlY3JldEtleVBhY2tldCB9O1xuICAgICAgICAgICAgX2NvbnRleHQ1MS50MCA9IHBhY2tldGxpc3Q7XG4gICAgICAgICAgICBfY29udGV4dDUxLm5leHQgPSAxNTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTaWduYXR1cmVQYWNrZXQoZGF0YVRvU2lnbiwgbnVsbCwgc2VjcmV0S2V5UGFja2V0LCB7XG4gICAgICAgICAgICAgIHNpZ25hdHVyZVR5cGU6IF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUua2V5X3Jldm9jYXRpb24sXG4gICAgICAgICAgICAgIHJlYXNvbkZvclJldm9jYXRpb25GbGFnOiBfZW51bXMyLmRlZmF1bHQucmVhc29uRm9yUmV2b2NhdGlvbi5ub19yZWFzb24sXG4gICAgICAgICAgICAgIHJlYXNvbkZvclJldm9jYXRpb25TdHJpbmc6ICcnXG4gICAgICAgICAgICB9LCBvcHRpb25zLmRhdGUpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIF9jb250ZXh0NTEudDEgPSBfY29udGV4dDUxLnNlbnQ7XG5cbiAgICAgICAgICAgIF9jb250ZXh0NTEudDAucHVzaC5jYWxsKF9jb250ZXh0NTEudDAsIF9jb250ZXh0NTEudDEpO1xuXG4gICAgICAgICAgICAvLyBzZXQgcGFzc3BocmFzZSBwcm90ZWN0aW9uXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXNzcGhyYXNlKSB7XG4gICAgICAgICAgICAgIHNlY3JldEtleVBhY2tldC5jbGVhclByaXZhdGVQYXJhbXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQ1MS5uZXh0ID0gMjA7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKHNlY3JldFN1YmtleVBhY2tldHMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY1OSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNTAoc2VjcmV0U3Via2V5UGFja2V0LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBzdWJrZXlQYXNzcGhyYXNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNTAkKF9jb250ZXh0NTApIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ1MC5wcmV2ID0gX2NvbnRleHQ1MC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3Via2V5UGFzc3BocmFzZSA9IG9wdGlvbnMuc3Via2V5c1tpbmRleF0ucGFzc3BocmFzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmtleVBhc3NwaHJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0U3Via2V5UGFja2V0LmNsZWFyUHJpdmF0ZVBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1MC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNTAsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDk5LCBfeDEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNTkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUxLmFicnVwdCgncmV0dXJuJywgbmV3IEtleShwYWNrZXRsaXN0KSk7XG5cbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1MS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNTEsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBLZXlPYmplY3QoX3g5MCwgX3g5MSwgX3g5Mikge1xuICAgIHJldHVybiBfcmVmNTMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBjZXJ0aWZpY2F0ZSBvciBiaW5kaW5nIHNpZ25hdHVyZSBpcyByZXZva2VkXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5fSAgICAgICBwcmltYXJ5S2V5ICAgVGhlIHByaW1hcnkga2V5IHBhY2tldFxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVG9WZXJpZnkgVGhlIGRhdGEgdG8gY2hlY2tcbiAqIEBwYXJhbSAge0FycmF5PG1vZHVsZTpwYWNrZXQuU2lnbmF0dXJlPn0gcmV2b2NhdGlvbnMgIFRoZSByZXZvY2F0aW9uIHNpZ25hdHVyZXMgdG8gY2hlY2tcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2lnbmF0dXJlfSAgICAgICAgc2lnbmF0dXJlICAgIFRoZSBjZXJ0aWZpY2F0ZSBvciBzaWduYXR1cmUgdG8gY2hlY2tcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuUHVibGljU3Via2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5TZWNyZXRTdWJrZXl8XG4gKiAgICAgICAgICBtb2R1bGU6cGFja2V0LlB1YmxpY0tleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fSBrZXksIG9wdGlvbmFsIFRoZSBrZXkgcGFja2V0IHRvIGNoZWNrIHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSAge0RhdGV9ICAgICAgICAgICAgICAgICAgICAgZGF0ZSAgICAgICAgICBVc2UgdGhlIGdpdmVuIGRhdGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIHJldm9rZXMgdGhlIGRhdGFcbiAqIEBhc3luY1xuICovXG5cblxudmFyIGlzRGF0YVJldm9rZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNjAgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTUzKHByaW1hcnlLZXksIGRhdGFUb1ZlcmlmeSwgcmV2b2NhdGlvbnMsIHNpZ25hdHVyZSwga2V5KSB7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIG5vcm1EYXRlLCByZXZvY2F0aW9uS2V5SWRzO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNTMkKF9jb250ZXh0NTMpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ1My5wcmV2ID0gX2NvbnRleHQ1My5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAga2V5ID0ga2V5IHx8IHByaW1hcnlLZXk7XG4gICAgICAgICAgICBub3JtRGF0ZSA9IF91dGlsMi5kZWZhdWx0Lm5vcm1hbGl6ZURhdGUoZGF0ZSk7XG4gICAgICAgICAgICByZXZvY2F0aW9uS2V5SWRzID0gW107XG4gICAgICAgICAgICBfY29udGV4dDUzLm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LmFsbChyZXZvY2F0aW9ucy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjYxID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1MihyZXZvY2F0aW9uU2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1MiQoX2NvbnRleHQ1Mikge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDUyLnByZXYgPSBfY29udGV4dDUyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDUyLnQwID0gIShfY29uZmlnMi5kZWZhdWx0LnJldm9jYXRpb25zX2V4cGlyZSAmJiByZXZvY2F0aW9uU2lnbmF0dXJlLmlzRXhwaXJlZChub3JtRGF0ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb250ZXh0NTIudDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1Mi5uZXh0ID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NTIudDEgPSByZXZvY2F0aW9uU2lnbmF0dXJlLnZlcmlmaWVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQ1Mi50MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDUyLm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1Mi5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZvY2F0aW9uU2lnbmF0dXJlLnZlcmlmeShrZXksIGRhdGFUb1ZlcmlmeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDUyLnQxID0gX2NvbnRleHQ1Mi5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1Mi50MCA9IF9jb250ZXh0NTIudDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb250ZXh0NTIudDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1Mi5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIGdldCBhbiBpZGVudGlmaWVyIG9mIHRoZSByZXZva2VkIG9iamVjdCBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZvY2F0aW9uS2V5SWRzLnB1c2gocmV2b2NhdGlvblNpZ25hdHVyZS5pc3N1ZXJLZXlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1Mi5hYnJ1cHQoJ3JldHVybicsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUyLmFicnVwdCgncmV0dXJuJywgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTUyLCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gxMDcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjYxLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICghc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NTMubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaWduYXR1cmUucmV2b2tlZCA9IHJldm9jYXRpb25LZXlJZHMuc29tZShmdW5jdGlvbiAoa2V5SWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtleUlkLmVxdWFscyhzaWduYXR1cmUuaXNzdWVyS2V5SWQpO1xuICAgICAgICAgICAgfSkgPyB0cnVlIDogc2lnbmF0dXJlLnJldm9rZWQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1My5hYnJ1cHQoJ3JldHVybicsIHNpZ25hdHVyZS5yZXZva2VkKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUzLmFicnVwdCgncmV0dXJuJywgcmV2b2NhdGlvbktleUlkcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTUzLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpc0RhdGFSZXZva2VkKF94MTAxLCBfeDEwMiwgX3gxMDMsIF94MTA0LCBfeDEwNSkge1xuICAgIHJldHVybiBfcmVmNjAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmVmZXJyZWQgc2lnbmF0dXJlIGhhc2ggYWxnb3JpdGhtIG9mIGEga2V5XG4gKiBAcGFyYW0gIHttb2R1bGU6a2V5LktleX0ga2V5IChvcHRpb25hbCkgdGhlIGtleSB0byBnZXQgcHJlZmVyZW5jZXMgZnJvbVxuICogQHBhcmFtICB7bW9kdWxlOnBhY2tldC5TZWNyZXRLZXl8bW9kdWxlOnBhY2tldC5TZWNyZXRTdWJrZXl9IGtleVBhY2tldCBrZXkgcGFja2V0IHVzZWQgZm9yIHNpZ25pbmdcbiAqIEBwYXJhbSAge0RhdGV9IGRhdGUgKG9wdGlvbmFsKSB1c2UgdGhlIGdpdmVuIGRhdGUgZm9yIHZlcmlmaWNhdGlvbiBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEBwYXJhbSAge09iamVjdH0gdXNlcklkIChvcHRpb25hbCkgdXNlciBJRFxuICogQHJldHVybnMge1Byb21pc2U8U3RyaW5nPn1cbiAqIEBhc3luY1xuICovXG52YXIgZ2V0UHJlZmVycmVkSGFzaEFsZ28gPSBleHBvcnRzLmdldFByZWZlcnJlZEhhc2hBbGdvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1NChrZXksIGtleVBhY2tldCkge1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciB1c2VySWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuXG4gICAgdmFyIGhhc2hfYWxnbywgcHJlZl9hbGdvLCBwcmltYXJ5VXNlciwgX3ByaW1hcnlVc2VyJHNlbGZDZXJ0O1xuXG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1NCQoX2NvbnRleHQ1NCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDU0LnByZXYgPSBfY29udGV4dDU0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBoYXNoX2FsZ28gPSBfY29uZmlnMi5kZWZhdWx0LnByZWZlcl9oYXNoX2FsZ29yaXRobTtcbiAgICAgICAgICAgIHByZWZfYWxnbyA9IGhhc2hfYWxnbztcblxuICAgICAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgS2V5KSkge1xuICAgICAgICAgICAgICBfY29udGV4dDU0Lm5leHQgPSA3O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQ1NC5uZXh0ID0gNTtcbiAgICAgICAgICAgIHJldHVybiBrZXkuZ2V0UHJpbWFyeVVzZXIoZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHByaW1hcnlVc2VyID0gX2NvbnRleHQ1NC5zZW50O1xuXG4gICAgICAgICAgICBpZiAocHJpbWFyeVVzZXIgJiYgcHJpbWFyeVVzZXIuc2VsZkNlcnRpZmljYXRpb24ucHJlZmVycmVkSGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgICAgICAgX3ByaW1hcnlVc2VyJHNlbGZDZXJ0ID0gKDAsIF9zbGljZWRUb0FycmF5My5kZWZhdWx0KShwcmltYXJ5VXNlci5zZWxmQ2VydGlmaWNhdGlvbi5wcmVmZXJyZWRIYXNoQWxnb3JpdGhtcywgMSk7XG4gICAgICAgICAgICAgIHByZWZfYWxnbyA9IF9wcmltYXJ5VXNlciRzZWxmQ2VydFswXTtcblxuICAgICAgICAgICAgICBoYXNoX2FsZ28gPSBfY3J5cHRvMi5kZWZhdWx0Lmhhc2guZ2V0SGFzaEJ5dGVMZW5ndGgoaGFzaF9hbGdvKSA8PSBfY3J5cHRvMi5kZWZhdWx0Lmhhc2guZ2V0SGFzaEJ5dGVMZW5ndGgocHJlZl9hbGdvKSA/IHByZWZfYWxnbyA6IGhhc2hfYWxnbztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHN3aXRjaCAoKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoa2V5UGFja2V0KSkge1xuICAgICAgICAgICAgICBjYXNlIF9wYWNrZXQyLmRlZmF1bHQuU2VjcmV0S2V5LnByb3RvdHlwZTpcbiAgICAgICAgICAgICAgY2FzZSBfcGFja2V0Mi5kZWZhdWx0LlB1YmxpY0tleS5wcm90b3R5cGU6XG4gICAgICAgICAgICAgIGNhc2UgX3BhY2tldDIuZGVmYXVsdC5TZWNyZXRTdWJrZXkucHJvdG90eXBlOlxuICAgICAgICAgICAgICBjYXNlIF9wYWNrZXQyLmRlZmF1bHQuUHVibGljU3Via2V5LnByb3RvdHlwZTpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGtleVBhY2tldC5hbGdvcml0aG0pIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2VjZGgnOlxuICAgICAgICAgICAgICAgICAgY2FzZSAnZWNkc2EnOlxuICAgICAgICAgICAgICAgICAgY2FzZSAnZWRkc2EnOlxuICAgICAgICAgICAgICAgICAgICBwcmVmX2FsZ28gPSBfY3J5cHRvMi5kZWZhdWx0LnB1YmxpY0tleS5lbGxpcHRpYy5nZXRQcmVmZXJyZWRIYXNoQWxnbyhrZXlQYWNrZXQucGFyYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1NC5hYnJ1cHQoJ3JldHVybicsIF9jcnlwdG8yLmRlZmF1bHQuaGFzaC5nZXRIYXNoQnl0ZUxlbmd0aChoYXNoX2FsZ28pIDw9IF9jcnlwdG8yLmRlZmF1bHQuaGFzaC5nZXRIYXNoQnl0ZUxlbmd0aChwcmVmX2FsZ28pID8gcHJlZl9hbGdvIDogaGFzaF9hbGdvKTtcblxuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTU0LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcmVmZXJyZWRIYXNoQWxnbyhfeDEwOSwgX3gxMTApIHtcbiAgICByZXR1cm4gX3JlZjYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJlZmVycmVkIHN5bW1ldHJpYy9hZWFkIGFsZ29yaXRobSBmb3IgYSBzZXQgb2Yga2V5c1xuICogQHBhcmFtICB7c3ltbWV0cmljfGFlYWR9IHR5cGUgVHlwZSBvZiBwcmVmZXJlbmNlIHRvIHJldHVyblxuICogQHBhcmFtICB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBrZXlzIFNldCBvZiBrZXlzXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlIChvcHRpb25hbCkgdXNlIHRoZSBnaXZlbiBkYXRlIGZvciB2ZXJpZmljYXRpb24gaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcGFyYW0gIHtPYmplY3R9IHVzZXJJZCAob3B0aW9uYWwpIHVzZXIgSURcbiAqIEByZXR1cm5zIHtQcm9taXNlPG1vZHVsZTplbnVtcy5zeW1tZXRyaWM+fSAgIFByZWZlcnJlZCBzeW1tZXRyaWMgYWxnb3JpdGhtXG4gKiBAYXN5bmNcbiAqL1xuXG5cbnZhciBnZXRQcmVmZXJyZWRBbGdvID0gZXhwb3J0cy5nZXRQcmVmZXJyZWRBbGdvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjYzID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1Nih0eXBlLCBrZXlzKSB7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIHVzZXJJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgdmFyIHByZWZQcm9wZXJ0eSwgZGVmYXVsdEFsZ28sIHByaW9NYXAsIHByZWZBbGdvO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNTYkKF9jb250ZXh0NTYpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ1Ni5wcmV2ID0gX2NvbnRleHQ1Ni5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcHJlZlByb3BlcnR5ID0gdHlwZSA9PT0gJ3N5bW1ldHJpYycgPyAncHJlZmVycmVkU3ltbWV0cmljQWxnb3JpdGhtcycgOiAncHJlZmVycmVkQWVhZEFsZ29yaXRobXMnO1xuICAgICAgICAgICAgZGVmYXVsdEFsZ28gPSB0eXBlID09PSAnc3ltbWV0cmljJyA/IF9jb25maWcyLmRlZmF1bHQuZW5jcnlwdGlvbl9jaXBoZXIgOiBfY29uZmlnMi5kZWZhdWx0LmFlYWRfbW9kZTtcbiAgICAgICAgICAgIHByaW9NYXAgPSB7fTtcbiAgICAgICAgICAgIF9jb250ZXh0NTYubmV4dCA9IDU7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKGtleXMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY2NCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNTUoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByaW1hcnlVc2VyO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNTUkKF9jb250ZXh0NTUpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ1NS5wcmV2ID0gX2NvbnRleHQ1NS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1NS5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuZ2V0UHJpbWFyeVVzZXIoZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlVc2VyID0gX2NvbnRleHQ1NS5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISghcHJpbWFyeVVzZXIgfHwgIXByaW1hcnlVc2VyLnNlbGZDZXJ0aWZpY2F0aW9uW3ByZWZQcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NTUubmV4dCA9IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1NS5hYnJ1cHQoJ3JldHVybicsIGRlZmF1bHRBbGdvKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlVc2VyLnNlbGZDZXJ0aWZpY2F0aW9uW3ByZWZQcm9wZXJ0eV0uZm9yRWFjaChmdW5jdGlvbiAoYWxnbywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gcHJpb01hcFthbGdvXSB8fCAocHJpb01hcFthbGdvXSA9IHsgcHJpbzogMCwgY291bnQ6IDAsIGFsZ286IGFsZ28gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnByaW8gKz0gNjQgPj4gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTUuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTU1LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gxMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHByZWZBbGdvID0geyBwcmlvOiAwLCBhbGdvOiBkZWZhdWx0QWxnbyB9O1xuXG4gICAgICAgICAgICAoMCwgX3ZhbHVlczIuZGVmYXVsdCkocHJpb01hcCkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjY1KSB7XG4gICAgICAgICAgICAgIHZhciBwcmlvID0gX3JlZjY1LnByaW8sXG4gICAgICAgICAgICAgICAgICBjb3VudCA9IF9yZWY2NS5jb3VudCxcbiAgICAgICAgICAgICAgICAgIGFsZ28gPSBfcmVmNjUuYWxnbztcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChhbGdvICE9PSBfZW51bXMyLmRlZmF1bHRbdHlwZV0ucGxhaW50ZXh0ICYmIGFsZ28gIT09IF9lbnVtczIuZGVmYXVsdFt0eXBlXS5pZGVhICYmIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgICAgICAgICAgIF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdFt0eXBlXSwgYWxnbykgJiYgLy8ga25vd24gYWxnb3JpdGhtXG4gICAgICAgICAgICAgICAgY291bnQgPT09IGtleXMubGVuZ3RoICYmIC8vIGF2YWlsYWJsZSBmb3IgYWxsIGtleXNcbiAgICAgICAgICAgICAgICBwcmlvID4gcHJlZkFsZ28ucHJpbykge1xuICAgICAgICAgICAgICAgICAgcHJlZkFsZ28gPSBwcmlvTWFwW2FsZ29dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTYuYWJydXB0KCdyZXR1cm4nLCBwcmVmQWxnby5hbGdvKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTYuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTU2LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcmVmZXJyZWRBbGdvKF94MTEzLCBfeDExNCkge1xuICAgIHJldHVybiBfcmVmNjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYWVhZCBpcyBzdXBwb3J0ZWQgYnkgYWxsIGtleXMgaW4gdGhlIHNldFxuICogQHBhcmFtICB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBrZXlzIFNldCBvZiBrZXlzXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlIChvcHRpb25hbCkgdXNlIHRoZSBnaXZlbiBkYXRlIGZvciB2ZXJpZmljYXRpb24gaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5cblxudmFyIGlzQWVhZFN1cHBvcnRlZCA9IGV4cG9ydHMuaXNBZWFkU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjY2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1OChrZXlzKSB7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIHVzZXJJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIHN1cHBvcnRlZDtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTU4JChfY29udGV4dDU4KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NTgucHJldiA9IF9jb250ZXh0NTgubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBUT0RPIHJlcGxhY2Ugd2hlbiBQcm9taXNlLnNvbWUgb3IgUHJvbWlzZS5hbnkgYXJlIGltcGxlbWVudGVkXG5cbiAgICAgICAgICAgIF9jb250ZXh0NTgubmV4dCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKGtleXMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY2NyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNTcoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByaW1hcnlVc2VyO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNTckKF9jb250ZXh0NTcpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ1Ny5wcmV2ID0gX2NvbnRleHQ1Ny5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1Ny5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuZ2V0UHJpbWFyeVVzZXIoZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlVc2VyID0gX2NvbnRleHQ1Ny5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaW1hcnlVc2VyIHx8ICFwcmltYXJ5VXNlci5zZWxmQ2VydGlmaWNhdGlvbi5mZWF0dXJlcyB8fCAhKHByaW1hcnlVc2VyLnNlbGZDZXJ0aWZpY2F0aW9uLmZlYXR1cmVzWzBdICYgX2VudW1zMi5kZWZhdWx0LmZlYXR1cmVzLmFlYWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1Ny5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNTcsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDEyMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNjcuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NTguYWJydXB0KCdyZXR1cm4nLCBzdXBwb3J0ZWQpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1OC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNTgsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGlzQWVhZFN1cHBvcnRlZChfeDExOCkge1xuICAgIHJldHVybiBfcmVmNjYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuZXhwb3J0cy5LZXkgPSBLZXk7XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZXhwb3J0cy5yZWFkQXJtb3JlZCA9IHJlYWRBcm1vcmVkO1xuXG52YXIgX2FybW9yID0gX2RlcmVxXygnLi9lbmNvZGluZy9hcm1vcicpO1xuXG52YXIgX2FybW9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FybW9yKTtcblxudmFyIF9jcnlwdG8gPSBfZGVyZXFfKCcuL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX3BhY2tldCA9IF9kZXJlcV8oJy4vcGFja2V0Jyk7XG5cbnZhciBfcGFja2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhY2tldCk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi9jb25maWcnKTtcblxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcblxudmFyIF9lbnVtcyA9IF9kZXJlcV8oJy4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAY2xhc3NkZXNjIENsYXNzIHRoYXQgcmVwcmVzZW50cyBhbiBPcGVuUEdQIGtleS4gTXVzdCBjb250YWluIGEgcHJpbWFyeSBrZXkuXG4gKiBDYW4gY29udGFpbiBhZGRpdGlvbmFsIHN1YmtleXMsIHNpZ25hdHVyZXMsIHVzZXIgaWRzLCB1c2VyIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0Lkxpc3R9IHBhY2tldGxpc3QgVGhlIHBhY2tldHMgdGhhdCBmb3JtIHRoaXMga2V5XG4gKi9cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQHJlcXVpcmVzIGVuY29kaW5nL2FybW9yXG4gKiBAcmVxdWlyZXMgY3J5cHRvXG4gKiBAcmVxdWlyZXMgcGFja2V0XG4gKiBAcmVxdWlyZXMgY29uZmlnXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIGtleVxuICovXG5cbmZ1bmN0aW9uIEtleShwYWNrZXRsaXN0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBLZXkpKSB7XG4gICAgcmV0dXJuIG5ldyBLZXkocGFja2V0bGlzdCk7XG4gIH1cbiAgLy8gc2FtZSBkYXRhIGFzIGluIHBhY2tldGxpc3QgYnV0IGluIHN0cnVjdHVyZWQgZm9ybVxuICB0aGlzLnByaW1hcnlLZXkgPSBudWxsO1xuICB0aGlzLnJldm9jYXRpb25TaWduYXR1cmVzID0gW107XG4gIHRoaXMuZGlyZWN0U2lnbmF0dXJlcyA9IFtdO1xuICB0aGlzLnVzZXJzID0gW107XG4gIHRoaXMuc3ViS2V5cyA9IFtdO1xuICB0aGlzLnBhY2tldGxpc3Qyc3RydWN0dXJlKHBhY2tldGxpc3QpO1xuICBpZiAoIXRoaXMucHJpbWFyeUtleSB8fCAhdGhpcy51c2Vycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5OiBuZWVkIGF0IGxlYXN0IGtleSBhbmQgdXNlciBJRCBwYWNrZXQnKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgcGFja2V0bGlzdCB0byBzdHJ1Y3R1cmVkIGtleSBkYXRhXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0Lkxpc3R9IHBhY2tldGxpc3QgVGhlIHBhY2tldHMgdGhhdCBmb3JtIGEga2V5XG4gKi9cbktleS5wcm90b3R5cGUucGFja2V0bGlzdDJzdHJ1Y3R1cmUgPSBmdW5jdGlvbiAocGFja2V0bGlzdCkge1xuICB2YXIgdXNlciA9IHZvaWQgMDtcbiAgdmFyIHByaW1hcnlLZXlJZCA9IHZvaWQgMDtcbiAgdmFyIHN1YktleSA9IHZvaWQgMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWNrZXRsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChwYWNrZXRsaXN0W2ldLnRhZykge1xuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnB1YmxpY0tleTpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zZWNyZXRLZXk6XG4gICAgICAgIHRoaXMucHJpbWFyeUtleSA9IHBhY2tldGxpc3RbaV07XG4gICAgICAgIHByaW1hcnlLZXlJZCA9IHRoaXMucHJpbWFyeUtleS5nZXRLZXlJZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnBhY2tldC51c2VyaWQ6XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wYWNrZXQudXNlckF0dHJpYnV0ZTpcbiAgICAgICAgdXNlciA9IG5ldyBVc2VyKHBhY2tldGxpc3RbaV0pO1xuICAgICAgICB0aGlzLnVzZXJzLnB1c2godXNlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnB1YmxpY1N1YmtleTpcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zZWNyZXRTdWJrZXk6XG4gICAgICAgIHVzZXIgPSBudWxsO1xuICAgICAgICBzdWJLZXkgPSBuZXcgU3ViS2V5KHBhY2tldGxpc3RbaV0pO1xuICAgICAgICB0aGlzLnN1YktleXMucHVzaChzdWJLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zaWduYXR1cmU6XG4gICAgICAgIHN3aXRjaCAocGFja2V0bGlzdFtpXS5zaWduYXR1cmVUeXBlKSB7XG4gICAgICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLmNlcnRfZ2VuZXJpYzpcbiAgICAgICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUuY2VydF9wZXJzb25hOlxuICAgICAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5jZXJ0X2Nhc3VhbDpcbiAgICAgICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUuY2VydF9wb3NpdGl2ZTpcbiAgICAgICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgICBfdXRpbDIuZGVmYXVsdC5wcmludF9kZWJ1ZygnRHJvcHBpbmcgY2VydGlmaWNhdGlvbiBzaWduYXR1cmVzIHdpdGhvdXQgcHJlY2VkaW5nIHVzZXIgcGFja2V0Jyk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhY2tldGxpc3RbaV0uaXNzdWVyS2V5SWQuZXF1YWxzKHByaW1hcnlLZXlJZCkpIHtcbiAgICAgICAgICAgICAgdXNlci5zZWxmQ2VydGlmaWNhdGlvbnMucHVzaChwYWNrZXRsaXN0W2ldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVzZXIub3RoZXJDZXJ0aWZpY2F0aW9ucy5wdXNoKHBhY2tldGxpc3RbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLmNlcnRfcmV2b2NhdGlvbjpcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgIHVzZXIucmV2b2NhdGlvblNpZ25hdHVyZXMucHVzaChwYWNrZXRsaXN0W2ldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0U2lnbmF0dXJlcy5wdXNoKHBhY2tldGxpc3RbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLmtleTpcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0U2lnbmF0dXJlcy5wdXNoKHBhY2tldGxpc3RbaV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLnN1YmtleV9iaW5kaW5nOlxuICAgICAgICAgICAgaWYgKCFzdWJLZXkpIHtcbiAgICAgICAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWcoJ0Ryb3BwaW5nIHN1YmtleSBiaW5kaW5nIHNpZ25hdHVyZSB3aXRob3V0IHByZWNlZGluZyBzdWJrZXkgcGFja2V0Jyk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3ViS2V5LmJpbmRpbmdTaWduYXR1cmVzLnB1c2gocGFja2V0bGlzdFtpXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUua2V5X3Jldm9jYXRpb246XG4gICAgICAgICAgICB0aGlzLnJldm9jYXRpb25TaWduYXR1cmVzLnB1c2gocGFja2V0bGlzdFtpXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUuc3Via2V5X3Jldm9jYXRpb246XG4gICAgICAgICAgICBpZiAoIXN1YktleSkge1xuICAgICAgICAgICAgICBfdXRpbDIuZGVmYXVsdC5wcmludF9kZWJ1ZygnRHJvcHBpbmcgc3Via2V5IHJldm9jYXRpb24gc2lnbmF0dXJlIHdpdGhvdXQgcHJlY2VkaW5nIHN1YmtleSBwYWNrZXQnKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJLZXkucmV2b2NhdGlvblNpZ25hdHVyZXMucHVzaChwYWNrZXRsaXN0W2ldKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHN0cnVjdHVyZWQga2V5IGRhdGEgdG8gcGFja2V0bGlzdFxuICogQHJldHVybnMge21vZHVsZTpwYWNrZXQuTGlzdH0gVGhlIHBhY2tldHMgdGhhdCBmb3JtIGEga2V5XG4gKi9cbktleS5wcm90b3R5cGUudG9QYWNrZXRsaXN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcGFja2V0bGlzdCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcbiAgcGFja2V0bGlzdC5wdXNoKHRoaXMucHJpbWFyeUtleSk7XG4gIHBhY2tldGxpc3QuY29uY2F0KHRoaXMucmV2b2NhdGlvblNpZ25hdHVyZXMpO1xuICBwYWNrZXRsaXN0LmNvbmNhdCh0aGlzLmRpcmVjdFNpZ25hdHVyZXMpO1xuICB0aGlzLnVzZXJzLm1hcChmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiBwYWNrZXRsaXN0LmNvbmNhdCh1c2VyLnRvUGFja2V0bGlzdCgpKTtcbiAgfSk7XG4gIHRoaXMuc3ViS2V5cy5tYXAoZnVuY3Rpb24gKHN1YktleSkge1xuICAgIHJldHVybiBwYWNrZXRsaXN0LmNvbmNhdChzdWJLZXkudG9QYWNrZXRsaXN0KCkpO1xuICB9KTtcbiAgcmV0dXJuIHBhY2tldGxpc3Q7XG59O1xuXG4vKipcbiAqIFJldHVybnMgcGFja2V0bGlzdCBjb250YWluaW5nIGFsbCBwdWJsaWMgb3IgcHJpdmF0ZSBzdWJrZXkgcGFja2V0cyBtYXRjaGluZyBrZXlJZDtcbiAqIElmIGtleUlkIGlzIG5vdCBwcmVzZW50LCByZXR1cm5zIGFsbCBzdWJrZXkgcGFja2V0cy5cbiAqIEBwYXJhbSAge3R5cGUva2V5aWR9IGtleUlkXG4gKiBAcmV0dXJucyB7bW9kdWxlOnBhY2tldC5MaXN0fVxuICovXG5LZXkucHJvdG90eXBlLmdldFN1YmtleVBhY2tldHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBrZXlJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcblxuICB2YXIgcGFja2V0cyA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcbiAgdGhpcy5zdWJLZXlzLmZvckVhY2goZnVuY3Rpb24gKHN1YktleSkge1xuICAgIGlmICgha2V5SWQgfHwgc3ViS2V5LnN1YktleS5nZXRLZXlJZCgpLmVxdWFscyhrZXlJZCwgdHJ1ZSkpIHtcbiAgICAgIHBhY2tldHMucHVzaChzdWJLZXkuc3ViS2V5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcGFja2V0cztcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHBhY2tldGxpc3QgY29udGFpbmluZyBhbGwgcHVibGljIG9yIHByaXZhdGUga2V5IHBhY2tldHMgbWF0Y2hpbmcga2V5SWQuXG4gKiBJZiBrZXlJZCBpcyBub3QgcHJlc2VudCwgcmV0dXJucyBhbGwga2V5IHBhY2tldHMgc3RhcnRpbmcgd2l0aCB0aGUgcHJpbWFyeSBrZXkuXG4gKiBAcGFyYW0gIHt0eXBlL2tleWlkfSBrZXlJZFxuICogQHJldHVybnMge21vZHVsZTpwYWNrZXQuTGlzdH1cbiAqL1xuS2V5LnByb3RvdHlwZS5nZXRLZXlQYWNrZXRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIga2V5SWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cbiAgdmFyIHBhY2tldHMgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG4gIGlmICgha2V5SWQgfHwgdGhpcy5wcmltYXJ5S2V5LmdldEtleUlkKCkuZXF1YWxzKGtleUlkLCB0cnVlKSkge1xuICAgIHBhY2tldHMucHVzaCh0aGlzLnByaW1hcnlLZXkpO1xuICB9XG4gIHBhY2tldHMuY29uY2F0KHRoaXMuZ2V0U3Via2V5UGFja2V0cyhrZXlJZCkpO1xuICByZXR1cm4gcGFja2V0cztcbn07XG5cbi8qKlxuICogUmV0dXJucyBrZXkgSURzIG9mIGFsbCBrZXkgcGFja2V0c1xuICogQHJldHVybnMge0FycmF5PG1vZHVsZTp0eXBlL2tleWlkPn1cbiAqL1xuS2V5LnByb3RvdHlwZS5nZXRLZXlJZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldEtleVBhY2tldHMoKS5tYXAoZnVuY3Rpb24gKGtleVBhY2tldCkge1xuICAgIHJldHVybiBrZXlQYWNrZXQuZ2V0S2V5SWQoKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdXNlcmlkc1xuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IGFycmF5IG9mIHVzZXJpZHNcbiAqL1xuS2V5LnByb3RvdHlwZS5nZXRVc2VySWRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy51c2Vycy5tYXAoZnVuY3Rpb24gKHVzZXIpIHtcbiAgICByZXR1cm4gdXNlci51c2VySWQgPyBfdXRpbDIuZGVmYXVsdC5lbmNvZGVfdXRmOCh1c2VyLnVzZXJJZC51c2VyaWQpIDogbnVsbDtcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uICh1c2VyaWQpIHtcbiAgICByZXR1cm4gdXNlcmlkICE9PSBudWxsO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSBwdWJsaWMga2V5XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuS2V5LnByb3RvdHlwZS5pc1B1YmxpYyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucHJpbWFyeUtleS50YWcgPT09IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQucHVibGljS2V5O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHByaXZhdGUga2V5XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuS2V5LnByb3RvdHlwZS5pc1ByaXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnByaW1hcnlLZXkudGFnID09PSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnNlY3JldEtleTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBrZXkgYXMgcHVibGljIGtleSAoc2hhbGxvdyBjb3B5KVxuICogQHJldHVybnMge21vZHVsZTprZXkuS2V5fSBuZXcgcHVibGljIEtleVxuICovXG5LZXkucHJvdG90eXBlLnRvUHVibGljID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcGFja2V0bGlzdCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcbiAgdmFyIGtleVBhY2tldHMgPSB0aGlzLnRvUGFja2V0bGlzdCgpO1xuICB2YXIgYnl0ZXMgPSB2b2lkIDA7XG4gIHZhciBwdWJLZXlQYWNrZXQgPSB2b2lkIDA7XG4gIHZhciBwdWJTdWJrZXlQYWNrZXQgPSB2b2lkIDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5UGFja2V0cy5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaCAoa2V5UGFja2V0c1tpXS50YWcpIHtcbiAgICAgIGNhc2UgX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zZWNyZXRLZXk6XG4gICAgICAgIGJ5dGVzID0ga2V5UGFja2V0c1tpXS53cml0ZVB1YmxpY0tleSgpO1xuICAgICAgICBwdWJLZXlQYWNrZXQgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5QdWJsaWNLZXkoKTtcbiAgICAgICAgcHViS2V5UGFja2V0LnJlYWQoYnl0ZXMpO1xuICAgICAgICBwYWNrZXRsaXN0LnB1c2gocHViS2V5UGFja2V0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc2VjcmV0U3Via2V5OlxuICAgICAgICBieXRlcyA9IGtleVBhY2tldHNbaV0ud3JpdGVQdWJsaWNLZXkoKTtcbiAgICAgICAgcHViU3Via2V5UGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuUHVibGljU3Via2V5KCk7XG4gICAgICAgIHB1YlN1YmtleVBhY2tldC5yZWFkKGJ5dGVzKTtcbiAgICAgICAgcGFja2V0bGlzdC5wdXNoKHB1YlN1YmtleVBhY2tldCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFja2V0bGlzdC5wdXNoKGtleVBhY2tldHNbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IEtleShwYWNrZXRsaXN0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBBU0NJSSBhcm1vcmVkIHRleHQgb2Yga2V5XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBU0NJSSBhcm1vclxuICovXG5LZXkucHJvdG90eXBlLmFybW9yID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdHlwZSA9IHRoaXMuaXNQdWJsaWMoKSA/IF9lbnVtczIuZGVmYXVsdC5hcm1vci5wdWJsaWNfa2V5IDogX2VudW1zMi5kZWZhdWx0LmFybW9yLnByaXZhdGVfa2V5O1xuICByZXR1cm4gX2FybW9yMi5kZWZhdWx0LmVuY29kZSh0eXBlLCB0aGlzLnRvUGFja2V0bGlzdCgpLndyaXRlKCkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaWduYXR1cmUgdGhhdCBoYXMgdGhlIGxhdGVzdCBjcmVhdGlvbiBkYXRlLCB3aGlsZSBpZ25vcmluZyBzaWduYXR1cmVzIGNyZWF0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAqIEBwYXJhbSAge0FycmF5PG1vZHVsZTpwYWNrZXQuU2lnbmF0dXJlPn0gc2lnbmF0dXJlcyAgTGlzdCBvZiBzaWduYXR1cmVzXG4gKiBAcGFyYW0gIHtEYXRlfSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgICAgICAgIFVzZSB0aGUgZ2l2ZW4gZGF0ZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEByZXR1cm5zIHttb2R1bGU6cGFja2V0LlNpZ25hdHVyZX0gVGhlIGxhdGVzdCBzaWduYXR1cmVcbiAqL1xuZnVuY3Rpb24gZ2V0TGF0ZXN0U2lnbmF0dXJlKHNpZ25hdHVyZXMpIHtcbiAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5ldyBEYXRlKCk7XG5cbiAgdmFyIHNpZ25hdHVyZSA9IHNpZ25hdHVyZXNbMF07XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgc2lnbmF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzaWduYXR1cmVzW2ldLmNyZWF0ZWQgPj0gc2lnbmF0dXJlLmNyZWF0ZWQgJiYgKHNpZ25hdHVyZXNbaV0uY3JlYXRlZCA8PSBkYXRlIHx8IGRhdGUgPT09IG51bGwpKSB7XG4gICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVzW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkU2lnbmluZ0tleVBhY2tldChrZXlQYWNrZXQsIHNpZ25hdHVyZSkge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcblxuICByZXR1cm4ga2V5UGFja2V0LmFsZ29yaXRobSAhPT0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2FfZW5jcnlwdCkgJiYga2V5UGFja2V0LmFsZ29yaXRobSAhPT0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lbGdhbWFsKSAmJiBrZXlQYWNrZXQuYWxnb3JpdGhtICE9PSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVjZGgpICYmICghc2lnbmF0dXJlLmtleUZsYWdzIHx8IChzaWduYXR1cmUua2V5RmxhZ3NbMF0gJiBfZW51bXMyLmRlZmF1bHQua2V5RmxhZ3Muc2lnbl9kYXRhKSAhPT0gMCkgJiYgc2lnbmF0dXJlLnZlcmlmaWVkICYmICFzaWduYXR1cmUucmV2b2tlZCAmJiAhc2lnbmF0dXJlLmlzRXhwaXJlZChkYXRlKSAmJiAhaXNEYXRhRXhwaXJlZChrZXlQYWNrZXQsIHNpZ25hdHVyZSwgZGF0ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBmaXJzdCBrZXkgcGFja2V0IG9yIGtleSBwYWNrZXQgYnkgZ2l2ZW4ga2V5SWQgdGhhdCBpcyBhdmFpbGFibGUgZm9yIHNpZ25pbmcgYW5kIHZlcmlmaWNhdGlvblxuICogQHBhcmFtICB7bW9kdWxlOnR5cGUva2V5aWR9IGtleUlkLCBvcHRpb25hbFxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSB1c2UgdGhlIGdpdmVuIGRhdGUgZm9yIHZlcmlmaWNhdGlvbiBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEBwYXJhbSAge09iamVjdH0gdXNlcklkLCBvcHRpb25hbCB1c2VyIElEXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxtb2R1bGU6cGFja2V0LlNlY3JldFN1YmtleXxcbiAqICAgICAgICAgICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fG51bGw+fSBrZXkgcGFja2V0IG9yIG51bGwgaWYgbm8gc2lnbmluZyBrZXkgaGFzIGJlZW4gZm91bmRcbiAqIEBhc3luY1xuICovXG5LZXkucHJvdG90eXBlLmdldFNpZ25pbmdLZXlQYWNrZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgdmFyIGtleUlkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciB1c2VySWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIHZhciBwcmltYXJ5S2V5LCBpLCBiaW5kaW5nU2lnbmF0dXJlLCBwcmltYXJ5VXNlcjtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBwcmltYXJ5S2V5ID0gdGhpcy5wcmltYXJ5S2V5O1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZnlQcmltYXJ5S2V5KGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBfY29udGV4dC50MCA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dC50MSA9IF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMudmFsaWQ7XG5cbiAgICAgICAgICAgIGlmICghKF9jb250ZXh0LnQwID09PSBfY29udGV4dC50MSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBpZiAoIShpIDwgdGhpcy5zdWJLZXlzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEoIWtleUlkIHx8IHRoaXMuc3ViS2V5c1tpXS5zdWJLZXkuZ2V0S2V5SWQoKS5lcXVhbHMoa2V5SWQpKSkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJLZXlzW2ldLnZlcmlmeShwcmltYXJ5S2V5LCBkYXRlKTtcblxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBfY29udGV4dC50MiA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dC50MyA9IF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMudmFsaWQ7XG5cbiAgICAgICAgICAgIGlmICghKF9jb250ZXh0LnQyID09PSBfY29udGV4dC50MykpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE3O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYmluZGluZ1NpZ25hdHVyZSA9IGdldExhdGVzdFNpZ25hdHVyZSh0aGlzLnN1YktleXNbaV0uYmluZGluZ1NpZ25hdHVyZXMsIGRhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWRTaWduaW5nS2V5UGFja2V0KHRoaXMuc3ViS2V5c1tpXS5zdWJLZXksIGJpbmRpbmdTaWduYXR1cmUsIGRhdGUpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHRoaXMuc3ViS2V5c1tpXS5zdWJLZXkpO1xuXG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA3O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDIyO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJpbWFyeVVzZXIoZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICBwcmltYXJ5VXNlciA9IF9jb250ZXh0LnNlbnQ7XG5cbiAgICAgICAgICAgIGlmICghKHByaW1hcnlVc2VyICYmICgha2V5SWQgfHwgcHJpbWFyeUtleS5nZXRLZXlJZCgpLmVxdWFscyhrZXlJZCkpICYmIGlzVmFsaWRTaWduaW5nS2V5UGFja2V0KHByaW1hcnlLZXksIHByaW1hcnlVc2VyLnNlbGZDZXJ0aWZpY2F0aW9uLCBkYXRlKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgcHJpbWFyeUtleSk7XG5cbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgbnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbmNyeXB0aW9uS2V5UGFja2V0KGtleVBhY2tldCwgc2lnbmF0dXJlKSB7XG4gIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBuZXcgRGF0ZSgpO1xuXG4gIHJldHVybiBrZXlQYWNrZXQuYWxnb3JpdGhtICE9PSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmRzYSkgJiYga2V5UGFja2V0LmFsZ29yaXRobSAhPT0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5yc2Ffc2lnbikgJiYga2V5UGFja2V0LmFsZ29yaXRobSAhPT0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lY2RzYSkgJiYga2V5UGFja2V0LmFsZ29yaXRobSAhPT0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lZGRzYSkgJiYgKCFzaWduYXR1cmUua2V5RmxhZ3MgfHwgKHNpZ25hdHVyZS5rZXlGbGFnc1swXSAmIF9lbnVtczIuZGVmYXVsdC5rZXlGbGFncy5lbmNyeXB0X2NvbW11bmljYXRpb24pICE9PSAwIHx8IChzaWduYXR1cmUua2V5RmxhZ3NbMF0gJiBfZW51bXMyLmRlZmF1bHQua2V5RmxhZ3MuZW5jcnlwdF9zdG9yYWdlKSAhPT0gMCkgJiYgc2lnbmF0dXJlLnZlcmlmaWVkICYmICFzaWduYXR1cmUucmV2b2tlZCAmJiAhc2lnbmF0dXJlLmlzRXhwaXJlZChkYXRlKSAmJiAhaXNEYXRhRXhwaXJlZChrZXlQYWNrZXQsIHNpZ25hdHVyZSwgZGF0ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBmaXJzdCBrZXkgcGFja2V0IG9yIGtleSBwYWNrZXQgYnkgZ2l2ZW4ga2V5SWQgdGhhdCBpcyBhdmFpbGFibGUgZm9yIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvblxuICogQHBhcmFtICB7bW9kdWxlOnR5cGUva2V5aWR9IGtleUlkLCBvcHRpb25hbFxuICogQHBhcmFtICB7RGF0ZX0gICAgICAgICAgICAgIGRhdGUsIG9wdGlvbmFsXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgICAgICAgICAgdXNlcklkLCBvcHRpb25hbFxuICogQHJldHVybnMge1Byb21pc2U8bW9kdWxlOnBhY2tldC5QdWJsaWNTdWJrZXl8XG4gKiAgICAgICAgICAgICAgICAgICBtb2R1bGU6cGFja2V0LlNlY3JldFN1YmtleXxcbiAqICAgICAgICAgICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fFxuICogICAgICAgICAgICAgICAgICAgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXl8bnVsbD59IGtleSBwYWNrZXQgb3IgbnVsbCBpZiBubyBlbmNyeXB0aW9uIGtleSBoYXMgYmVlbiBmb3VuZFxuICogQGFzeW5jXG4gKi9cbktleS5wcm90b3R5cGUuZ2V0RW5jcnlwdGlvbktleVBhY2tldCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKGtleUlkKSB7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIHVzZXJJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIHByaW1hcnlLZXksIGksIGJpbmRpbmdTaWduYXR1cmUsIHByaW1hcnlVc2VyO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBwcmltYXJ5S2V5ID0gdGhpcy5wcmltYXJ5S2V5O1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5UHJpbWFyeUtleShkYXRlLCB1c2VySWQpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgX2NvbnRleHQyLnQwID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDIudDEgPSBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLnZhbGlkO1xuXG4gICAgICAgICAgICBpZiAoIShfY29udGV4dDIudDAgPT09IF9jb250ZXh0Mi50MSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkgPSAwO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgaWYgKCEoaSA8IHRoaXMuc3ViS2V5cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISgha2V5SWQgfHwgdGhpcy5zdWJLZXlzW2ldLnN1YktleS5nZXRLZXlJZCgpLmVxdWFscyhrZXlJZCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDExO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViS2V5c1tpXS52ZXJpZnkocHJpbWFyeUtleSwgZGF0ZSk7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgX2NvbnRleHQyLnQyID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDIudDMgPSBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLnZhbGlkO1xuXG4gICAgICAgICAgICBpZiAoIShfY29udGV4dDIudDIgPT09IF9jb250ZXh0Mi50MykpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJpbmRpbmdTaWduYXR1cmUgPSBnZXRMYXRlc3RTaWduYXR1cmUodGhpcy5zdWJLZXlzW2ldLmJpbmRpbmdTaWduYXR1cmVzLCBkYXRlKTtcblxuICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRW5jcnlwdGlvbktleVBhY2tldCh0aGlzLnN1YktleXNbaV0uc3ViS2V5LCBiaW5kaW5nU2lnbmF0dXJlLCBkYXRlKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDE3O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIHRoaXMuc3ViS2V5c1tpXS5zdWJLZXkpO1xuXG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VXNlcihkYXRlLCB1c2VySWQpO1xuXG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHByaW1hcnlVc2VyID0gX2NvbnRleHQyLnNlbnQ7XG5cbiAgICAgICAgICAgIGlmICghKHByaW1hcnlVc2VyICYmICgha2V5SWQgfHwgcHJpbWFyeUtleS5nZXRLZXlJZCgpLmVxdWFscyhrZXlJZCkpICYmIGlzVmFsaWRFbmNyeXB0aW9uS2V5UGFja2V0KHByaW1hcnlLZXksIHByaW1hcnlVc2VyLnNlbGZDZXJ0aWZpY2F0aW9uLCBkYXRlKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBwcmltYXJ5S2V5KTtcblxuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgbnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g5KSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogRW5jcnlwdHMgYWxsIHNlY3JldCBrZXkgYW5kIHN1YmtleSBwYWNrZXRzIG1hdGNoaW5nIGtleUlkXG4gKiBAcGFyYW0gIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gcGFzc3BocmFzZXMgLSBpZiBtdWx0aXBsZSBwYXNzcGhyYXNlcywgdGhlbiBzaG91bGQgYmUgaW4gc2FtZSBvcmRlciBhcyBwYWNrZXRzIGVhY2ggc2hvdWxkIGVuY3J5cHRcbiAqIEBwYXJhbSAge21vZHVsZTp0eXBlL2tleWlkfSBrZXlJZFxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8bW9kdWxlOnBhY2tldC5TZWNyZXRLZXl8bW9kdWxlOnBhY2tldC5TZWNyZXRTdWJrZXk+Pn1cbiAqIEBhc3luY1xuICovXG5LZXkucHJvdG90eXBlLmVuY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNChwYXNzcGhyYXNlcykge1xuICAgIHZhciBrZXlJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICB2YXIga2V5UGFja2V0cztcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQcml2YXRlKCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90aGluZyB0byBlbmNyeXB0IGluIGEgcHVibGljIGtleVwiKTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGtleVBhY2tldHMgPSB0aGlzLmdldEtleVBhY2tldHMoa2V5SWQpO1xuXG4gICAgICAgICAgICBwYXNzcGhyYXNlcyA9IF91dGlsMi5kZWZhdWx0LmlzQXJyYXkocGFzc3BocmFzZXMpID8gcGFzc3BocmFzZXMgOiBuZXcgQXJyYXkoa2V5UGFja2V0cy5sZW5ndGgpLmZpbGwocGFzc3BocmFzZXMpO1xuXG4gICAgICAgICAgICBpZiAoIShwYXNzcGhyYXNlcy5sZW5ndGggIT09IGtleVBhY2tldHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwYXNzcGhyYXNlcyBmb3Iga2V5XCIpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoJ3JldHVybicsIF9wcm9taXNlMi5kZWZhdWx0LmFsbChrZXlQYWNrZXRzLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhrZXlQYWNrZXQsIGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0Mykge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleVBhY2tldC5lbmNyeXB0KHBhc3NwaHJhc2VzW2ldKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlQYWNrZXQuY2xlYXJQcml2YXRlUGFyYW1zKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywga2V5UGFja2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMywgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MTQsIF94MTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpKTtcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNCwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94MTIpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBEZWNyeXB0cyBhbGwgc2VjcmV0IGtleSBhbmQgc3Via2V5IHBhY2tldHMgbWF0Y2hpbmcga2V5SWRcbiAqIEBwYXJhbSAge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXNzcGhyYXNlc1xuICogQHBhcmFtICB7bW9kdWxlOnR5cGUva2V5aWR9IGtleUlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gdHJ1ZSBpZiBhbGwgbWF0Y2hpbmcga2V5IGFuZCBzdWJrZXkgcGFja2V0cyBkZWNyeXB0ZWQgc3VjY2Vzc2Z1bGx5XG4gKiBAYXN5bmNcbiAqL1xuS2V5LnByb3RvdHlwZS5kZWNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjUgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTcocGFzc3BocmFzZXMpIHtcbiAgICB2YXIga2V5SWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgdmFyIHJlc3VsdHM7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU3JChfY29udGV4dDcpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUHJpdmF0ZSgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdGhpbmcgdG8gZGVjcnlwdCBpbiBhIHB1YmxpYyBrZXlcIik7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBwYXNzcGhyYXNlcyA9IF91dGlsMi5kZWZhdWx0LmlzQXJyYXkocGFzc3BocmFzZXMpID8gcGFzc3BocmFzZXMgOiBbcGFzc3BocmFzZXNdO1xuXG4gICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDU7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKHRoaXMuZ2V0S2V5UGFja2V0cyhrZXlJZCkubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU2KGtleVBhY2tldCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWNyeXB0ZWQsIGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNiQoX2NvbnRleHQ2KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Ni5wcmV2ID0gX2NvbnRleHQ2Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocGFzc3BocmFzZXMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1KHBhc3NwaHJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleVBhY2tldC5kZWNyeXB0KHBhc3NwaHJhc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ1LnQwID0gX2NvbnRleHQ1WydjYXRjaCddKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IF9jb250ZXh0NS50MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNSwgdGhpcywgW1swLCA2XV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDE5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWY3LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCkpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNyeXB0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LmFicnVwdCgncmV0dXJuJywgZGVjcnlwdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlNiwgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcmVzdWx0cyA9IF9jb250ZXh0Ny5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5hYnJ1cHQoJ3JldHVybicsIHJlc3VsdHMuZXZlcnkoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSB0cnVlO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU3LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gxNikge1xuICAgIHJldHVybiBfcmVmNS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNpZ25hdHVyZSBvbiBhIGtleSBpcyByZXZva2VkXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2lnbmF0dXJlfSAgc2lnbmF0dXJlICAgIFRoZSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlB1YmxpY1N1YmtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0U3Via2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXl8XG4gKiAgICAgICAgICBtb2R1bGU6cGFja2V0LlNlY3JldEtleX0ga2V5LCBvcHRpb25hbCBUaGUga2V5IHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gKiBAcGFyYW0gIHtEYXRlfSAgICAgICAgICAgICAgICAgICAgIGRhdGUgICAgICAgICAgVXNlIHRoZSBnaXZlbiBkYXRlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgdGltZVxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59ICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIGNlcnRpZmljYXRlIGlzIHJldm9rZWRcbiAqIEBhc3luY1xuICovXG5LZXkucHJvdG90eXBlLmlzUmV2b2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWY4ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU4KHNpZ25hdHVyZSwga2V5KSB7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU4JChfY29udGV4dDgpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ4LnByZXYgPSBfY29udGV4dDgubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguYWJydXB0KCdyZXR1cm4nLCBpc0RhdGFSZXZva2VkKHRoaXMucHJpbWFyeUtleSwgeyBrZXk6IHRoaXMucHJpbWFyeUtleSB9LCB0aGlzLnJldm9jYXRpb25TaWduYXR1cmVzLCBzaWduYXR1cmUsIGtleSwgZGF0ZSkpO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ4LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU4LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gyMCwgX3gyMSkge1xuICAgIHJldHVybiBfcmVmOC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFZlcmlmeSBwcmltYXJ5IGtleS4gQ2hlY2tzIGZvciByZXZvY2F0aW9uIHNpZ25hdHVyZXMsIGV4cGlyYXRpb24gdGltZVxuICogYW5kIHZhbGlkIHNlbGYgc2lnbmF0dXJlXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgKG9wdGlvbmFsKSB1c2UgdGhlIGdpdmVuIGRhdGUgZm9yIHZlcmlmaWNhdGlvbiBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEBwYXJhbSAge09iamVjdH0gdXNlcklkIChvcHRpb25hbCkgdXNlciBJRFxuICogQHJldHVybnMge1Byb21pc2U8bW9kdWxlOmVudW1zLmtleVN0YXR1cz59IFRoZSBzdGF0dXMgb2YgdGhlIHByaW1hcnkga2V5XG4gKiBAYXN5bmNcbiAqL1xuS2V5LnByb3RvdHlwZS52ZXJpZnlQcmltYXJ5S2V5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjkgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTkoKSB7XG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIHVzZXJJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICB2YXIgcHJpbWFyeUtleSwgX3JlZjEwLCB1c2VyLCBzZWxmQ2VydGlmaWNhdGlvbjtcblxuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlOSQoX2NvbnRleHQ5KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0OS5wcmV2ID0gX2NvbnRleHQ5Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBwcmltYXJ5S2V5ID0gdGhpcy5wcmltYXJ5S2V5O1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGtleSByZXZvY2F0aW9uIHNpZ25hdHVyZXNcblxuICAgICAgICAgICAgX2NvbnRleHQ5Lm5leHQgPSAzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXZva2VkKG51bGwsIG51bGwsIGRhdGUpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKCFfY29udGV4dDkuc2VudCkge1xuICAgICAgICAgICAgICBfY29udGV4dDkubmV4dCA9IDU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ5LmFicnVwdCgncmV0dXJuJywgX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy5yZXZva2VkKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJzLnNvbWUoZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVzZXIudXNlcklkICYmIHVzZXIuc2VsZkNlcnRpZmljYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0OS5uZXh0ID0gNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDkuYWJydXB0KCdyZXR1cm4nLCBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLm5vX3NlbGZfY2VydCk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBfY29udGV4dDkubmV4dCA9IDk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VXNlcihkYXRlLCB1c2VySWQpO1xuXG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgX2NvbnRleHQ5LnQwID0gX2NvbnRleHQ5LnNlbnQ7XG5cbiAgICAgICAgICAgIGlmIChfY29udGV4dDkudDApIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ5Lm5leHQgPSAxMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0OS50MCA9IHt9O1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIF9yZWYxMCA9IF9jb250ZXh0OS50MDtcbiAgICAgICAgICAgIHVzZXIgPSBfcmVmMTAudXNlcjtcbiAgICAgICAgICAgIHNlbGZDZXJ0aWZpY2F0aW9uID0gX3JlZjEwLnNlbGZDZXJ0aWZpY2F0aW9uO1xuXG4gICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICBfY29udGV4dDkubmV4dCA9IDE3O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OS5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMuaW52YWxpZCk7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgaWYgKCFpc0RhdGFFeHBpcmVkKHByaW1hcnlLZXksIHNlbGZDZXJ0aWZpY2F0aW9uLCBkYXRlKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDkubmV4dCA9IDE5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OS5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMuZXhwaXJlZCk7XG5cbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OS5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMudmFsaWQpO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlOSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVmOS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgcHJpbWFyeSBrZXkgb3IgSW5maW5pdHkgaWYga2V5IGRvZXMgbm90IGV4cGlyZVxuICogQHJldHVybnMge1Byb21pc2U8RGF0ZT59XG4gKiBAYXN5bmNcbiAqL1xuS2V5LnByb3RvdHlwZS5nZXRFeHBpcmF0aW9uVGltZSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMTAoKSB7XG4gIHZhciBwcmltYXJ5VXNlciwgc2VsZkNlcnQsIGtleUV4cGlyeSwgc2lnRXhwaXJ5O1xuICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTEwJChfY29udGV4dDEwKSB7XG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIHN3aXRjaCAoX2NvbnRleHQxMC5wcmV2ID0gX2NvbnRleHQxMC5uZXh0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBpZiAoISh0aGlzLnByaW1hcnlLZXkudmVyc2lvbiA9PT0gMykpIHtcbiAgICAgICAgICAgIF9jb250ZXh0MTAubmV4dCA9IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMC5hYnJ1cHQoJ3JldHVybicsIGdldEV4cGlyYXRpb25UaW1lKHRoaXMucHJpbWFyeUtleSkpO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAoISh0aGlzLnByaW1hcnlLZXkudmVyc2lvbiA+PSA0KSkge1xuICAgICAgICAgICAgX2NvbnRleHQxMC5uZXh0ID0gMTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY29udGV4dDEwLm5leHQgPSA1O1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFByaW1hcnlVc2VyKG51bGwpO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwcmltYXJ5VXNlciA9IF9jb250ZXh0MTAuc2VudDtcbiAgICAgICAgICBzZWxmQ2VydCA9IHByaW1hcnlVc2VyLnNlbGZDZXJ0aWZpY2F0aW9uO1xuICAgICAgICAgIGtleUV4cGlyeSA9IGdldEV4cGlyYXRpb25UaW1lKHRoaXMucHJpbWFyeUtleSwgc2VsZkNlcnQpO1xuICAgICAgICAgIHNpZ0V4cGlyeSA9IHNlbGZDZXJ0LmdldEV4cGlyYXRpb25UaW1lKCk7XG4gICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTAuYWJydXB0KCdyZXR1cm4nLCBrZXlFeHBpcnkgPCBzaWdFeHBpcnkgPyBrZXlFeHBpcnkgOiBzaWdFeHBpcnkpO1xuXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTAuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgX2NhbGxlZTEwLCB0aGlzKTtcbn0pKTtcblxuLyoqXG4gKiBSZXR1cm5zIHByaW1hcnkgdXNlciBhbmQgbW9zdCBzaWduaWZpY2FudCAobGF0ZXN0IHZhbGlkKSBzZWxmIHNpZ25hdHVyZVxuICogLSBpZiBtdWx0aXBsZSBwcmltYXJ5IHVzZXJzIGV4aXN0LCByZXR1cm5zIHRoZSBvbmUgd2l0aCB0aGUgbGF0ZXN0IHNlbGYgc2lnbmF0dXJlXG4gKiAtIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgdXNlciB3aXRoIHRoZSBsYXRlc3Qgc2VsZiBzaWduYXR1cmVcbiAqIEBwYXJhbSAge0RhdGV9IGRhdGUgdXNlIHRoZSBnaXZlbiBkYXRlIGZvciB2ZXJpZmljYXRpb24gaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcGFyYW0gIHtPYmplY3R9IHVzZXJJZCAob3B0aW9uYWwpIHVzZXIgSUQgdG8gZ2V0IGluc3RlYWQgb2YgdGhlIHByaW1hcnkgdXNlciwgaWYgaXQgZXhpc3RzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7dXNlcjogbW9kdWxlOmtleS5Vc2VyLFxuICogICAgICAgICAgICAgICAgICAgIHNlbGZDZXJ0aWZpY2F0aW9uOiBtb2R1bGU6cGFja2V0LlNpZ25hdHVyZX0+fSBUaGUgcHJpbWFyeSB1c2VyIGFuZCB0aGUgc2VsZiBzaWduYXR1cmVcbiAqIEBhc3luY1xuICovXG5LZXkucHJvdG90eXBlLmdldFByaW1hcnlVc2VyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjEyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxMSgpIHtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbmV3IERhdGUoKTtcbiAgICB2YXIgdXNlcklkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgdXNlcnMsIHByaW1hcnlVc2VyLCB1c2VyLCBjZXJ0LCBwcmltYXJ5S2V5LCBkYXRhVG9WZXJpZnk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxMSQoX2NvbnRleHQxMSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDExLnByZXYgPSBfY29udGV4dDExLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB1c2VycyA9IHRoaXMudXNlcnMubWFwKGZ1bmN0aW9uICh1c2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICB2YXIgc2VsZkNlcnRpZmljYXRpb24gPSBnZXRMYXRlc3RTaWduYXR1cmUodXNlci5zZWxmQ2VydGlmaWNhdGlvbnMsIGRhdGUpO1xuICAgICAgICAgICAgICByZXR1cm4geyBpbmRleDogaW5kZXgsIHVzZXI6IHVzZXIsIHNlbGZDZXJ0aWZpY2F0aW9uOiBzZWxmQ2VydGlmaWNhdGlvbiB9O1xuICAgICAgICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMTMpIHtcbiAgICAgICAgICAgICAgdmFyIHVzZXIgPSBfcmVmMTMudXNlcixcbiAgICAgICAgICAgICAgICAgIHNlbGZDZXJ0aWZpY2F0aW9uID0gX3JlZjEzLnNlbGZDZXJ0aWZpY2F0aW9uO1xuXG4gICAgICAgICAgICAgIHJldHVybiB1c2VyLnVzZXJJZCAmJiBzZWxmQ2VydGlmaWNhdGlvbiAmJiAodXNlcklkLm5hbWUgPT09IHVuZGVmaW5lZCB8fCB1c2VyLnVzZXJJZC5uYW1lID09PSB1c2VySWQubmFtZSkgJiYgKHVzZXJJZC5lbWFpbCA9PT0gdW5kZWZpbmVkIHx8IHVzZXIudXNlcklkLmVtYWlsID09PSB1c2VySWQuZW1haWwpICYmICh1c2VySWQuY29tbWVudCA9PT0gdW5kZWZpbmVkIHx8IHVzZXIudXNlcklkLmNvbW1lbnQgPT09IHVzZXJJZC5jb21tZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISh1c2VySWQubmFtZSAhPT0gdW5kZWZpbmVkIHx8IHVzZXJJZC5lbWFpbCAhPT0gdW5kZWZpbmVkIHx8IHVzZXJJZC5jb21tZW50ICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHVzZXIgdGhhdCBtYXRjaGVzIHRoYXQgdXNlciBJRCcpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTEuYWJydXB0KCdyZXR1cm4nLCBudWxsKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIC8vIHNvcnQgYnkgcHJpbWFyeSB1c2VyIGZsYWcgYW5kIHNpZ25hdHVyZSBjcmVhdGlvbiB0aW1lXG4gICAgICAgICAgICBwcmltYXJ5VXNlciA9IHVzZXJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgdmFyIEEgPSBhLnNlbGZDZXJ0aWZpY2F0aW9uO1xuICAgICAgICAgICAgICB2YXIgQiA9IGIuc2VsZkNlcnRpZmljYXRpb247XG4gICAgICAgICAgICAgIHJldHVybiBBLmlzUHJpbWFyeVVzZXJJRCAtIEIuaXNQcmltYXJ5VXNlcklEIHx8IEEuY3JlYXRlZCAtIEIuY3JlYXRlZDtcbiAgICAgICAgICAgIH0pLnBvcCgpO1xuICAgICAgICAgICAgdXNlciA9IHByaW1hcnlVc2VyLnVzZXIsIGNlcnQgPSBwcmltYXJ5VXNlci5zZWxmQ2VydGlmaWNhdGlvbjtcbiAgICAgICAgICAgIHByaW1hcnlLZXkgPSB0aGlzLnByaW1hcnlLZXk7XG4gICAgICAgICAgICBkYXRhVG9WZXJpZnkgPSB7IHVzZXJpZDogdXNlci51c2VySWQsIGtleTogcHJpbWFyeUtleSB9O1xuICAgICAgICAgICAgLy8gc2tpcCBpZiBjZXJ0aWZpY2F0ZXMgaXMgaW52YWxpZCwgcmV2b2tlZCwgb3IgZXhwaXJlZFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcblxuICAgICAgICAgICAgX2NvbnRleHQxMS50MCA9IGNlcnQudmVyaWZpZWQ7XG5cbiAgICAgICAgICAgIGlmIChfY29udGV4dDExLnQwKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDE0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQxMS5uZXh0ID0gMTM7XG4gICAgICAgICAgICByZXR1cm4gY2VydC52ZXJpZnkocHJpbWFyeUtleSwgZGF0YVRvVmVyaWZ5KTtcblxuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBfY29udGV4dDExLnQwID0gX2NvbnRleHQxMS5zZW50O1xuXG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIGlmIChfY29udGV4dDExLnQwKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDE2O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTEuYWJydXB0KCdyZXR1cm4nLCBudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICBfY29udGV4dDExLnQxID0gY2VydC5yZXZva2VkO1xuXG4gICAgICAgICAgICBpZiAoX2NvbnRleHQxMS50MSkge1xuICAgICAgICAgICAgICBfY29udGV4dDExLm5leHQgPSAyMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDIwO1xuICAgICAgICAgICAgcmV0dXJuIHVzZXIuaXNSZXZva2VkKHByaW1hcnlLZXksIGNlcnQsIG51bGwsIGRhdGUpO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIF9jb250ZXh0MTEudDEgPSBfY29udGV4dDExLnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgaWYgKCFfY29udGV4dDExLnQxKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDIzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTEuYWJydXB0KCdyZXR1cm4nLCBudWxsKTtcblxuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICBpZiAoIWNlcnQuaXNFeHBpcmVkKGRhdGUpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDI1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTEuYWJydXB0KCdyZXR1cm4nLCBudWxsKTtcblxuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMS5hYnJ1cHQoJ3JldHVybicsIHByaW1hcnlVc2VyKTtcblxuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDExLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUxMSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVmMTIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBVcGRhdGUga2V5IHdpdGggbmV3IGNvbXBvbmVudHMgZnJvbSBzcGVjaWZpZWQga2V5IHdpdGggc2FtZSBrZXkgSUQ6XG4gKiB1c2Vycywgc3Via2V5cywgY2VydGlmaWNhdGVzIGFyZSBtZXJnZWQgaW50byB0aGUgZGVzdGluYXRpb24ga2V5LFxuICogZHVwbGljYXRlcyBhbmQgZXhwaXJlZCBzaWduYXR1cmVzIGFyZSBpZ25vcmVkLlxuICpcbiAqIElmIHRoZSBzcGVjaWZpZWQga2V5IGlzIGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBkZXN0aW5hdGlvbiBrZXkgaXMgcHVibGljLFxuICogdGhlIGRlc3RpbmF0aW9uIGtleSBpcyB0cmFuc2Zvcm1lZCB0byBhIHByaXZhdGUga2V5LlxuICogQHBhcmFtICB7bW9kdWxlOmtleS5LZXl9IGtleSBTb3VyY2Uga2V5IHRvIG1lcmdlXG4gKi9cbktleS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjE0ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNihrZXkpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGVxdWFsO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMTYkKF9jb250ZXh0MTYpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQxNi5wcmV2ID0gX2NvbnRleHQxNi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgX2NvbnRleHQxNi5uZXh0ID0gMjtcbiAgICAgICAgICAgIHJldHVybiBrZXkudmVyaWZ5UHJpbWFyeUtleSgpO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgX2NvbnRleHQxNi50MCA9IF9jb250ZXh0MTYuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0MTYudDEgPSBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLmludmFsaWQ7XG5cbiAgICAgICAgICAgIGlmICghKF9jb250ZXh0MTYudDAgPT09IF9jb250ZXh0MTYudDEpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTYubmV4dCA9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNi5hYnJ1cHQoJ3JldHVybicpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgaWYgKCEodGhpcy5wcmltYXJ5S2V5LmdldEZpbmdlcnByaW50KCkgIT09IGtleS5wcmltYXJ5S2V5LmdldEZpbmdlcnByaW50KCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTYubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSB1cGRhdGUgbWV0aG9kOiBmaW5nZXJwcmludHMgb2Yga2V5cyBub3QgZXF1YWwnKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGlmICghKHRoaXMuaXNQdWJsaWMoKSAmJiBrZXkuaXNQcml2YXRlKCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MTYubmV4dCA9IDEzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGVxdWFsIHN1YmtleSBwYWNrZXRzXG4gICAgICAgICAgICBlcXVhbCA9IHRoaXMuc3ViS2V5cy5sZW5ndGggPT09IGtleS5zdWJLZXlzLmxlbmd0aCAmJiB0aGlzLnN1YktleXMuZXZlcnkoZnVuY3Rpb24gKGRlc3RTdWJLZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtleS5zdWJLZXlzLnNvbWUoZnVuY3Rpb24gKHNyY1N1YktleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXN0U3ViS2V5LnN1YktleS5nZXRGaW5nZXJwcmludCgpID09PSBzcmNTdWJLZXkuc3ViS2V5LmdldEZpbmdlcnByaW50KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChlcXVhbCkge1xuICAgICAgICAgICAgICBfY29udGV4dDE2Lm5leHQgPSAxMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVwZGF0ZSBwdWJsaWMga2V5IHdpdGggcHJpdmF0ZSBrZXkgaWYgc3Via2V5IG1pc21hdGNoJyk7XG5cbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5S2V5ID0ga2V5LnByaW1hcnlLZXk7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgX2NvbnRleHQxNi5uZXh0ID0gMTU7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VTaWduYXR1cmVzKGtleSwgdGhpcywgJ3Jldm9jYXRpb25TaWduYXR1cmVzJywgZnVuY3Rpb24gKHNyY1JldlNpZykge1xuICAgICAgICAgICAgICByZXR1cm4gaXNEYXRhUmV2b2tlZChfdGhpcy5wcmltYXJ5S2V5LCBfdGhpcywgW3NyY1JldlNpZ10sIG51bGwsIGtleS5wcmltYXJ5S2V5KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIF9jb250ZXh0MTYubmV4dCA9IDE3O1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2lnbmF0dXJlcyhrZXksIHRoaXMsICdkaXJlY3RTaWduYXR1cmVzJyk7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgX2NvbnRleHQxNi5uZXh0ID0gMTk7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKGtleS51c2Vycy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjE1ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxMyhzcmNVc2VyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMTMkKF9jb250ZXh0MTMpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQxMy5wcmV2ID0gX2NvbnRleHQxMy5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTMubmV4dCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKF90aGlzLnVzZXJzLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmMTYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTEyKGRzdFVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTEyJChfY29udGV4dDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MTIucHJldiA9IF9jb250ZXh0MTIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHNyY1VzZXIudXNlcklkICYmIGRzdFVzZXIudXNlcklkICYmIHNyY1VzZXIudXNlcklkLnVzZXJpZCA9PT0gZHN0VXNlci51c2VySWQudXNlcmlkIHx8IHNyY1VzZXIudXNlckF0dHJpYnV0ZSAmJiBzcmNVc2VyLnVzZXJBdHRyaWJ1dGUuZXF1YWxzKGRzdFVzZXIudXNlckF0dHJpYnV0ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTIubmV4dCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDEyLm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdFVzZXIudXBkYXRlKHNyY1VzZXIsIF90aGlzLnByaW1hcnlLZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMTIsIF90aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gyOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy51c2Vycy5wdXNoKHNyY1VzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMy5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMTMsIF90aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gyOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIF9jb250ZXh0MTYubmV4dCA9IDIxO1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LmFsbChrZXkuc3ViS2V5cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjE3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNShzcmNTdWJLZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZm91bmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxNSQoX2NvbnRleHQxNSkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDE1LnByZXYgPSBfY29udGV4dDE1Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNS5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoX3RoaXMuc3ViS2V5cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjE4ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNChkc3RTdWJLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTE0JChfY29udGV4dDE0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MTQucHJldiA9IF9jb250ZXh0MTQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHNyY1N1YktleS5zdWJLZXkuZ2V0RmluZ2VycHJpbnQoKSA9PT0gZHN0U3ViS2V5LnN1YktleS5nZXRGaW5nZXJwcmludCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNC5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc3RTdWJLZXkudXBkYXRlKHNyY1N1YktleSwgX3RoaXMucHJpbWFyeUtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDE0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUxNCwgX3RoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYxOC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSgpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnN1YktleXMucHVzaChzcmNTdWJLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNS5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMTUsIF90aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTcuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTYuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTE2LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gyNykge1xuICAgIHJldHVybiBfcmVmMTQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtLZXkucHJvdG90eXBlLnJldm9rZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyMSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMTkoKSB7XG4gICAgdmFyIF9yZWYyMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgIF9yZWYyMiRmbGFnID0gX3JlZjIyLmZsYWcsXG4gICAgICAgIHJlYXNvbkZvclJldm9jYXRpb25GbGFnID0gX3JlZjIyJGZsYWcgPT09IHVuZGVmaW5lZCA/IF9lbnVtczIuZGVmYXVsdC5yZWFzb25Gb3JSZXZvY2F0aW9uLm5vX3JlYXNvbiA6IF9yZWYyMiRmbGFnLFxuICAgICAgICBfcmVmMjIkc3RyaW5nID0gX3JlZjIyLnN0cmluZyxcbiAgICAgICAgcmVhc29uRm9yUmV2b2NhdGlvblN0cmluZyA9IF9yZWYyMiRzdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcnIDogX3JlZjIyJHN0cmluZztcblxuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciBkYXRhVG9TaWduLCBrZXk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxOSQoX2NvbnRleHQxOSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDE5LnByZXYgPSBfY29udGV4dDE5Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNQdWJsaWMoKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDE5Lm5leHQgPSAyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIHByaXZhdGUga2V5IGZvciByZXZva2luZycpO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgZGF0YVRvU2lnbiA9IHsga2V5OiB0aGlzLnByaW1hcnlLZXkgfTtcbiAgICAgICAgICAgIGtleSA9IG5ldyBLZXkodGhpcy50b1BhY2tldGxpc3QoKSk7XG4gICAgICAgICAgICBfY29udGV4dDE5LnQwID0ga2V5LnJldm9jYXRpb25TaWduYXR1cmVzO1xuICAgICAgICAgICAgX2NvbnRleHQxOS5uZXh0ID0gNztcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTaWduYXR1cmVQYWNrZXQoZGF0YVRvU2lnbiwgbnVsbCwgdGhpcy5wcmltYXJ5S2V5LCB7XG4gICAgICAgICAgICAgIHNpZ25hdHVyZVR5cGU6IF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUua2V5X3Jldm9jYXRpb24sXG4gICAgICAgICAgICAgIHJlYXNvbkZvclJldm9jYXRpb25GbGFnOiBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnJlYXNvbkZvclJldm9jYXRpb24sIHJlYXNvbkZvclJldm9jYXRpb25GbGFnKSxcbiAgICAgICAgICAgICAgcmVhc29uRm9yUmV2b2NhdGlvblN0cmluZzogcmVhc29uRm9yUmV2b2NhdGlvblN0cmluZ1xuICAgICAgICAgICAgfSwgZGF0ZSk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBfY29udGV4dDE5LnQxID0gX2NvbnRleHQxOS5zZW50O1xuXG4gICAgICAgICAgICBfY29udGV4dDE5LnQwLnB1c2guY2FsbChfY29udGV4dDE5LnQwLCBfY29udGV4dDE5LnQxKTtcblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTkuYWJydXB0KCdyZXR1cm4nLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTkuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTE5LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9yZWYyMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIEdldCByZXZvY2F0aW9uIGNlcnRpZmljYXRlIGZyb20gYSByZXZva2VkIGtleS5cbiAqICAgKFRvIGdldCBhIHJldm9jYXRpb24gY2VydGlmaWNhdGUgZm9yIGFuIHVucmV2b2tlZCBrZXksIGNhbGwgcmV2b2tlKCkgZmlyc3QuKVxuICogQHJldHVybiB7U3RyaW5nfSBhcm1vcmVkIHJldm9jYXRpb24gY2VydGlmaWNhdGVcbiAqL1xuS2V5LnByb3RvdHlwZS5nZXRSZXZvY2F0aW9uQ2VydGlmaWNhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnJldm9jYXRpb25TaWduYXR1cmVzLmxlbmd0aCkge1xuICAgIHZhciBwYWNrZXRsaXN0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xuICAgIHBhY2tldGxpc3QucHVzaChnZXRMYXRlc3RTaWduYXR1cmUodGhpcy5yZXZvY2F0aW9uU2lnbmF0dXJlcykpO1xuICAgIHJldHVybiBfYXJtb3IyLmRlZmF1bHQuZW5jb2RlKF9lbnVtczIuZGVmYXVsdC5hcm1vci5wdWJsaWNfa2V5LCBwYWNrZXRsaXN0LndyaXRlKCksIG51bGwsIG51bGwsICdUaGlzIGlzIGEgcmV2b2NhdGlvbiBjZXJ0aWZpY2F0ZScpO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSByZXZvY2F0aW9uIGNlcnRpZmljYXRlIHRvIGEga2V5XG4gKiBUaGlzIGFkZHMgdGhlIGZpcnN0IHNpZ25hdHVyZSBwYWNrZXQgaW4gdGhlIGFybW9yZWQgdGV4dCB0byB0aGUga2V5LFxuICogaWYgaXQgaXMgYSB2YWxpZCByZXZvY2F0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSAge1N0cmluZ30gcmV2b2NhdGlvbkNlcnRpZmljYXRlIGFybW9yZWQgcmV2b2NhdGlvbiBjZXJ0aWZpY2F0ZVxuICogQHJldHVybiB7bW9kdWxlOmtleX5LZXl9IG5ldyByZXZva2VkIGtleVxuICovXG5LZXkucHJvdG90eXBlLmFwcGx5UmV2b2NhdGlvbkNlcnRpZmljYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIzID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyMChyZXZvY2F0aW9uQ2VydGlmaWNhdGUpIHtcbiAgICB2YXIgaW5wdXQsIHBhY2tldGxpc3QsIHJldm9jYXRpb25TaWduYXR1cmUsIGtleTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIwJChfY29udGV4dDIwKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MjAucHJldiA9IF9jb250ZXh0MjAubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGlucHV0ID0gX2FybW9yMi5kZWZhdWx0LmRlY29kZShyZXZvY2F0aW9uQ2VydGlmaWNhdGUpO1xuICAgICAgICAgICAgcGFja2V0bGlzdCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcblxuICAgICAgICAgICAgcGFja2V0bGlzdC5yZWFkKGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgcmV2b2NhdGlvblNpZ25hdHVyZSA9IHBhY2tldGxpc3QuZmluZFBhY2tldChfZW51bXMyLmRlZmF1bHQucGFja2V0LnNpZ25hdHVyZSk7XG5cbiAgICAgICAgICAgIGlmICghKCFyZXZvY2F0aW9uU2lnbmF0dXJlIHx8IHJldm9jYXRpb25TaWduYXR1cmUuc2lnbmF0dXJlVHlwZSAhPT0gX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5rZXlfcmV2b2NhdGlvbikpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyMC5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcmV2b2NhdGlvbiBzaWduYXR1cmUgcGFja2V0Jyk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAocmV2b2NhdGlvblNpZ25hdHVyZS5pc3N1ZXJLZXlJZC5lcXVhbHModGhpcy5wcmltYXJ5S2V5LmdldEtleUlkKCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MjAubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jldm9jYXRpb24gc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIGtleScpO1xuXG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKCFyZXZvY2F0aW9uU2lnbmF0dXJlLmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MjAubmV4dCA9IDEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXZvY2F0aW9uIHNpZ25hdHVyZSBpcyBleHBpcmVkJyk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgX2NvbnRleHQyMC5uZXh0ID0gMTI7XG4gICAgICAgICAgICByZXR1cm4gcmV2b2NhdGlvblNpZ25hdHVyZS52ZXJpZnkodGhpcy5wcmltYXJ5S2V5LCB7IGtleTogdGhpcy5wcmltYXJ5S2V5IH0pO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIGlmIChfY29udGV4dDIwLnNlbnQpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyMC5uZXh0ID0gMTQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB2ZXJpZnkgcmV2b2NhdGlvbiBzaWduYXR1cmUnKTtcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICBrZXkgPSBuZXcgS2V5KHRoaXMudG9QYWNrZXRsaXN0KCkpO1xuXG4gICAgICAgICAgICBrZXkucmV2b2NhdGlvblNpZ25hdHVyZXMucHVzaChyZXZvY2F0aW9uU2lnbmF0dXJlKTtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIwLmFicnVwdCgncmV0dXJuJywga2V5KTtcblxuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIwLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyMCwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94MzkpIHtcbiAgICByZXR1cm4gX3JlZjIzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogU2lnbnMgcHJpbWFyeSB1c2VyIG9mIGtleVxuICogQHBhcmFtICB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBwcml2YXRlS2V5IGRlY3J5cHRlZCBwcml2YXRlIGtleXMgZm9yIHNpZ25pbmdcbiAqIEByZXR1cm5zIHtQcm9taXNlPG1vZHVsZTprZXkuS2V5Pn0gbmV3IHB1YmxpYyBrZXkgd2l0aCBuZXcgY2VydGlmaWNhdGUgc2lnbmF0dXJlXG4gKiBAYXN5bmNcbiAqL1xuS2V5LnByb3RvdHlwZS5zaWduUHJpbWFyeVVzZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMjQgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIxKHByaXZhdGVLZXlzKSB7XG4gICAgdmFyIF9yZWYyNSwgaW5kZXgsIHVzZXIsIHVzZXJTaWduLCBrZXk7XG5cbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIxJChfY29udGV4dDIxKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MjEucHJldiA9IF9jb250ZXh0MjEubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0MjEubmV4dCA9IDI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VXNlcigpO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgX2NvbnRleHQyMS50MCA9IF9jb250ZXh0MjEuc2VudDtcblxuICAgICAgICAgICAgaWYgKF9jb250ZXh0MjEudDApIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyMS5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0MjEudDAgPSB7fTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIF9yZWYyNSA9IF9jb250ZXh0MjEudDA7XG4gICAgICAgICAgICBpbmRleCA9IF9yZWYyNS5pbmRleDtcbiAgICAgICAgICAgIHVzZXIgPSBfcmVmMjUudXNlcjtcblxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyMS5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHByaW1hcnkgdXNlcicpO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIF9jb250ZXh0MjEubmV4dCA9IDEyO1xuICAgICAgICAgICAgcmV0dXJuIHVzZXIuc2lnbih0aGlzLnByaW1hcnlLZXksIHByaXZhdGVLZXlzKTtcblxuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB1c2VyU2lnbiA9IF9jb250ZXh0MjEuc2VudDtcbiAgICAgICAgICAgIGtleSA9IG5ldyBLZXkodGhpcy50b1BhY2tldGxpc3QoKSk7XG5cbiAgICAgICAgICAgIGtleS51c2Vyc1tpbmRleF0gPSB1c2VyU2lnbjtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIxLmFicnVwdCgncmV0dXJuJywga2V5KTtcblxuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIxLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyMSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94NDApIHtcbiAgICByZXR1cm4gX3JlZjI0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogU2lnbnMgYWxsIHVzZXJzIG9mIGtleVxuICogQHBhcmFtICB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBwcml2YXRlS2V5cyBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlzIGZvciBzaWduaW5nXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxtb2R1bGU6a2V5LktleT59IG5ldyBwdWJsaWMga2V5IHdpdGggbmV3IGNlcnRpZmljYXRlIHNpZ25hdHVyZVxuICogQGFzeW5jXG4gKi9cbktleS5wcm90b3R5cGUuc2lnbkFsbFVzZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjI2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyMihwcml2YXRlS2V5cykge1xuICAgIHZhciB0aGF0LCBrZXk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyMiQoX2NvbnRleHQyMikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIyLnByZXYgPSBfY29udGV4dDIyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIGtleSA9IG5ldyBLZXkodGhpcy50b1BhY2tldGxpc3QoKSk7XG4gICAgICAgICAgICBfY29udGV4dDIyLm5leHQgPSA0O1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LmFsbCh0aGlzLnVzZXJzLm1hcChmdW5jdGlvbiAodXNlcikge1xuICAgICAgICAgICAgICByZXR1cm4gdXNlci5zaWduKHRoYXQucHJpbWFyeUtleSwgcHJpdmF0ZUtleXMpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAga2V5LnVzZXJzID0gX2NvbnRleHQyMi5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MjIuYWJydXB0KCdyZXR1cm4nLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyMi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMjIsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDQxKSB7XG4gICAgcmV0dXJuIF9yZWYyNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFZlcmlmaWVzIHByaW1hcnkgdXNlciBvZiBrZXlcbiAqIC0gaWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgdmVyaWZpZXMgdGhlIHNlbGYgY2VydGlmaWNhdGVzO1xuICogLSBvdGhlcndpc2UsIHZlcmlmaWVzIGFsbCBjZXJ0aWZpY2F0ZXMgc2lnbmVkIHdpdGggZ2l2ZW4ga2V5cy5cbiAqIEBwYXJhbSAge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0ga2V5cyBhcnJheSBvZiBrZXlzIHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZSBzaWduYXR1cmVzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7a2V5aWQ6IG1vZHVsZTp0eXBlL2tleWlkLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBCb29sZWFufT4+fSAgICBMaXN0IG9mIHNpZ25lcidzIGtleWlkIGFuZCB2YWxpZGl0eSBvZiBzaWduYXR1cmVcbiAqIEBhc3luY1xuICovXG5LZXkucHJvdG90eXBlLnZlcmlmeVByaW1hcnlVc2VyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjI3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyMyhrZXlzKSB7XG4gICAgdmFyIHByaW1hcnlLZXksIF9yZWYyOCwgdXNlciwgcmVzdWx0cztcblxuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMjMkKF9jb250ZXh0MjMpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyMy5wcmV2ID0gX2NvbnRleHQyMy5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcHJpbWFyeUtleSA9IHRoaXMucHJpbWFyeUtleTtcbiAgICAgICAgICAgIF9jb250ZXh0MjMubmV4dCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VXNlcigpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgX2NvbnRleHQyMy50MCA9IF9jb250ZXh0MjMuc2VudDtcblxuICAgICAgICAgICAgaWYgKF9jb250ZXh0MjMudDApIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyMy5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0MjMudDAgPSB7fTtcblxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIF9yZWYyOCA9IF9jb250ZXh0MjMudDA7XG4gICAgICAgICAgICB1c2VyID0gX3JlZjI4LnVzZXI7XG5cbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MjMubmV4dCA9IDEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwcmltYXJ5IHVzZXInKTtcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBpZiAoIWtleXMpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyMy5uZXh0ID0gMTY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDIzLm5leHQgPSAxMztcbiAgICAgICAgICAgIHJldHVybiB1c2VyLnZlcmlmeUFsbENlcnRpZmljYXRpb25zKHByaW1hcnlLZXksIGtleXMpO1xuXG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIF9jb250ZXh0MjMudDEgPSBfY29udGV4dDIzLnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDIzLm5leHQgPSAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIF9jb250ZXh0MjMudDIgPSBwcmltYXJ5S2V5LmtleWlkO1xuICAgICAgICAgICAgX2NvbnRleHQyMy5uZXh0ID0gMTk7XG4gICAgICAgICAgICByZXR1cm4gdXNlci52ZXJpZnkocHJpbWFyeUtleSk7XG5cbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgX2NvbnRleHQyMy50MyA9IF9jb250ZXh0MjMuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0MjMudDQgPSBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLnZhbGlkO1xuICAgICAgICAgICAgX2NvbnRleHQyMy50NSA9IF9jb250ZXh0MjMudDMgPT09IF9jb250ZXh0MjMudDQ7XG4gICAgICAgICAgICBfY29udGV4dDIzLnQ2ID0ge1xuICAgICAgICAgICAgICBrZXlpZDogX2NvbnRleHQyMy50MixcbiAgICAgICAgICAgICAgdmFsaWQ6IF9jb250ZXh0MjMudDVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBfY29udGV4dDIzLnQxID0gW19jb250ZXh0MjMudDZdO1xuXG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHJlc3VsdHMgPSBfY29udGV4dDIzLnQxO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MjMuYWJydXB0KCdyZXR1cm4nLCByZXN1bHRzKTtcblxuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyMywgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94NDIpIHtcbiAgICByZXR1cm4gX3JlZjI3LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVmVyaWZpZXMgYWxsIHVzZXJzIG9mIGtleVxuICogLSBpZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCB2ZXJpZmllcyB0aGUgc2VsZiBjZXJ0aWZpY2F0ZXM7XG4gKiAtIG90aGVyd2lzZSwgdmVyaWZpZXMgYWxsIGNlcnRpZmljYXRlcyBzaWduZWQgd2l0aCBnaXZlbiBrZXlzLlxuICogQHBhcmFtICB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSBrZXlzIGFycmF5IG9mIGtleXMgdG8gdmVyaWZ5IGNlcnRpZmljYXRlIHNpZ25hdHVyZXNcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PHt1c2VyaWQ6IFN0cmluZyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlpZDogbW9kdWxlOnR5cGUva2V5aWQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IEJvb2xlYW59Pj59IGxpc3Qgb2YgdXNlcmlkLCBzaWduZXIncyBrZXlpZCBhbmQgdmFsaWRpdHkgb2Ygc2lnbmF0dXJlXG4gKiBAYXN5bmNcbiAqL1xuS2V5LnByb3RvdHlwZS52ZXJpZnlBbGxVc2VycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyOSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMjUoa2V5cykge1xuICAgIHZhciByZXN1bHRzLCBwcmltYXJ5S2V5O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMjUkKF9jb250ZXh0MjUpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyNS5wcmV2ID0gX2NvbnRleHQyNS5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgcHJpbWFyeUtleSA9IHRoaXMucHJpbWFyeUtleTtcbiAgICAgICAgICAgIF9jb250ZXh0MjUubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKHRoaXMudXNlcnMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWYzMCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMjQodXNlcikge1xuICAgICAgICAgICAgICAgIHZhciBzaWduYXR1cmVzO1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMjQkKF9jb250ZXh0MjQpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyNC5wcmV2ID0gX2NvbnRleHQyNC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MjQubmV4dCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDI0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXIudmVyaWZ5QWxsQ2VydGlmaWNhdGlvbnMocHJpbWFyeUtleSwga2V5cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDI0LnQwID0gX2NvbnRleHQyNC5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyNC5uZXh0ID0gMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MjQudDEgPSBwcmltYXJ5S2V5LmtleWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyNC5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyLnZlcmlmeShwcmltYXJ5S2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MjQudDIgPSBfY29udGV4dDI0LnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDI0LnQzID0gX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy52YWxpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MjQudDQgPSBfY29udGV4dDI0LnQyID09PSBfY29udGV4dDI0LnQzO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyNC50NSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5aWQ6IF9jb250ZXh0MjQudDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBfY29udGV4dDI0LnQ0XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyNC50MCA9IFtfY29udGV4dDI0LnQ1XTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVzID0gX2NvbnRleHQyNC50MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQ6IHVzZXIudXNlcklkLnVzZXJpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlpZDogc2lnbmF0dXJlLmtleWlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBzaWduYXR1cmUudmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDI0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUyNCwgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94NDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjMwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDI1LmFicnVwdCgncmV0dXJuJywgcmVzdWx0cyk7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDI1LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyNSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94NDMpIHtcbiAgICByZXR1cm4gX3JlZjI5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAY2xhc3NkZXNjIENsYXNzIHRoYXQgcmVwcmVzZW50cyBhbiB1c2VyIElEIG9yIGF0dHJpYnV0ZSBwYWNrZXQgYW5kIHRoZSByZWxldmFudCBzaWduYXR1cmVzLlxuICovXG5mdW5jdGlvbiBVc2VyKHVzZXJQYWNrZXQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVzZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBVc2VyKHVzZXJQYWNrZXQpO1xuICB9XG4gIHRoaXMudXNlcklkID0gdXNlclBhY2tldC50YWcgPT09IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQudXNlcmlkID8gdXNlclBhY2tldCA6IG51bGw7XG4gIHRoaXMudXNlckF0dHJpYnV0ZSA9IHVzZXJQYWNrZXQudGFnID09PSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnVzZXJBdHRyaWJ1dGUgPyB1c2VyUGFja2V0IDogbnVsbDtcbiAgdGhpcy5zZWxmQ2VydGlmaWNhdGlvbnMgPSBbXTtcbiAgdGhpcy5vdGhlckNlcnRpZmljYXRpb25zID0gW107XG4gIHRoaXMucmV2b2NhdGlvblNpZ25hdHVyZXMgPSBbXTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHN0cnVjdHVyZWQgdXNlciBkYXRhIHRvIHBhY2tldGxpc3RcbiAqIEByZXR1cm5zIHttb2R1bGU6cGFja2V0Lkxpc3R9XG4gKi9cblVzZXIucHJvdG90eXBlLnRvUGFja2V0bGlzdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhY2tldGxpc3QgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG4gIHBhY2tldGxpc3QucHVzaCh0aGlzLnVzZXJJZCB8fCB0aGlzLnVzZXJBdHRyaWJ1dGUpO1xuICBwYWNrZXRsaXN0LmNvbmNhdCh0aGlzLnJldm9jYXRpb25TaWduYXR1cmVzKTtcbiAgcGFja2V0bGlzdC5jb25jYXQodGhpcy5zZWxmQ2VydGlmaWNhdGlvbnMpO1xuICBwYWNrZXRsaXN0LmNvbmNhdCh0aGlzLm90aGVyQ2VydGlmaWNhdGlvbnMpO1xuICByZXR1cm4gcGFja2V0bGlzdDtcbn07XG5cbi8qKlxuICogU2lnbnMgdXNlclxuICogQHBhcmFtICB7bW9kdWxlOnBhY2tldC5TZWNyZXRLZXl8XG4gKiAgICAgICAgICBtb2R1bGU6cGFja2V0LlB1YmxpY0tleX0gcHJpbWFyeUtleSAgVGhlIHByaW1hcnkga2V5IHBhY2tldFxuICogQHBhcmFtICB7QXJyYXk8bW9kdWxlOmtleS5LZXk+fSAgICBwcml2YXRlS2V5cyBEZWNyeXB0ZWQgcHJpdmF0ZSBrZXlzIGZvciBzaWduaW5nXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxtb2R1bGU6a2V5LktleT59ICAgICAgICAgICAgIE5ldyB1c2VyIHdpdGggbmV3IGNlcnRpZmljYXRlIHNpZ25hdHVyZXNcbiAqIEBhc3luY1xuICovXG5Vc2VyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMxID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyNyhwcmltYXJ5S2V5LCBwcml2YXRlS2V5cykge1xuICAgIHZhciBkYXRhVG9TaWduLCB1c2VyO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMjckKF9jb250ZXh0MjcpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyNy5wcmV2ID0gX2NvbnRleHQyNy5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZGF0YVRvU2lnbiA9IHsgdXNlcmlkOiB0aGlzLnVzZXJJZCB8fCB0aGlzLnVzZXJBdHRyaWJ1dGUsIGtleTogcHJpbWFyeUtleSB9O1xuICAgICAgICAgICAgdXNlciA9IG5ldyBVc2VyKGRhdGFUb1NpZ24udXNlcmlkKTtcbiAgICAgICAgICAgIF9jb250ZXh0MjcubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKHByaXZhdGVLZXlzLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmMzIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTI2KHByaXZhdGVLZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2lnbmluZ0tleVBhY2tldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTI2JChfY29udGV4dDI2KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MjYucHJldiA9IF9jb250ZXh0MjYubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJpdmF0ZUtleS5pc1B1YmxpYygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MjYubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZWQgcHJpdmF0ZSBrZXkgZm9yIHNpZ25pbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHByaXZhdGVLZXkucHJpbWFyeUtleS5nZXRGaW5nZXJwcmludCgpID09PSBwcmltYXJ5S2V5LmdldEZpbmdlcnByaW50KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MjYubmV4dCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCBmb3Igc2VsZiBzaWduaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDI2Lm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaXZhdGVLZXkuZ2V0U2lnbmluZ0tleVBhY2tldCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmluZ0tleVBhY2tldCA9IF9jb250ZXh0MjYuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25pbmdLZXlQYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyNi5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdmFsaWQgc2lnbmluZyBrZXkgcGFja2V0IGluIGtleSAnICsgcHJpdmF0ZUtleS5wcmltYXJ5S2V5LmdldEtleUlkKCkudG9IZXgoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmluZ0tleVBhY2tldC5pc0RlY3J5cHRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDI2Lm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgaXMgbm90IGRlY3J5cHRlZC4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyNi5hYnJ1cHQoJ3JldHVybicsIGNyZWF0ZVNpZ25hdHVyZVBhY2tldChkYXRhVG9TaWduLCBwcml2YXRlS2V5LCBzaWduaW5nS2V5UGFja2V0LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vc3QgT3BlblBHUCBpbXBsZW1lbnRhdGlvbnMgdXNlIGdlbmVyaWMgY2VydGlmaWNhdGlvbiAoMHgxMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlVHlwZTogX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5jZXJ0X2dlbmVyaWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleUZsYWdzOiBbX2VudW1zMi5kZWZhdWx0LmtleUZsYWdzLmNlcnRpZnlfa2V5cyB8IF9lbnVtczIuZGVmYXVsdC5rZXlGbGFncy5zaWduX2RhdGFdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyNi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMjYsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDQ3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYzMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKSk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB1c2VyLm90aGVyQ2VydGlmaWNhdGlvbnMgPSBfY29udGV4dDI3LnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDI3Lm5leHQgPSA3O1xuICAgICAgICAgICAgcmV0dXJuIHVzZXIudXBkYXRlKHRoaXMsIHByaW1hcnlLZXkpO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MjcuYWJydXB0KCdyZXR1cm4nLCB1c2VyKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mjcuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTI3LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g0NSwgX3g0Nikge1xuICAgIHJldHVybiBfcmVmMzEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBjZXJ0aWZpY2F0ZSBvZiB0aGUgdXNlciBpcyByZXZva2VkXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5fSBwcmltYXJ5S2V5ICAgIFRoZSBwcmltYXJ5IGtleSBwYWNrZXRcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2lnbmF0dXJlfSAgY2VydGlmaWNhdGUgICBUaGUgY2VydGlmaWNhdGUgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlB1YmxpY1N1YmtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0U3Via2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXl8XG4gKiAgICAgICAgICBtb2R1bGU6cGFja2V0LlNlY3JldEtleX0ga2V5LCBvcHRpb25hbCBUaGUga2V5IHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gKiBAcGFyYW0gIHtEYXRlfSAgICAgICAgICAgICAgICAgICAgIGRhdGUgICAgICAgICAgVXNlIHRoZSBnaXZlbiBkYXRlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgdGltZVxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59ICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIGNlcnRpZmljYXRlIGlzIHJldm9rZWRcbiAqIEBhc3luY1xuICovXG5Vc2VyLnByb3RvdHlwZS5pc1Jldm9rZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMzMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTI4KHByaW1hcnlLZXksIGNlcnRpZmljYXRlLCBrZXkpIHtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbmV3IERhdGUoKTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTI4JChfY29udGV4dDI4KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MjgucHJldiA9IF9jb250ZXh0MjgubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDI4LmFicnVwdCgncmV0dXJuJywgaXNEYXRhUmV2b2tlZChwcmltYXJ5S2V5LCB7XG4gICAgICAgICAgICAgIGtleTogcHJpbWFyeUtleSxcbiAgICAgICAgICAgICAgdXNlcmlkOiB0aGlzLnVzZXJJZCB8fCB0aGlzLnVzZXJBdHRyaWJ1dGVcbiAgICAgICAgICAgIH0sIHRoaXMucmV2b2NhdGlvblNpZ25hdHVyZXMsIGNlcnRpZmljYXRlLCBrZXksIGRhdGUpKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mjguc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTI4LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g0OCwgX3g0OSwgX3g1MCkge1xuICAgIHJldHVybiBfcmVmMzMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtVc2VyLnByb3RvdHlwZS52ZXJpZnlDZXJ0aWZpY2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYzNSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMzEocHJpbWFyeUtleSwgY2VydGlmaWNhdGUsIGtleXMpIHtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbmV3IERhdGUoKTtcbiAgICB2YXIgdGhhdCwga2V5aWQsIGRhdGFUb1ZlcmlmeSwgcmVzdWx0cztcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTMxJChfY29udGV4dDMxKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MzEucHJldiA9IF9jb250ZXh0MzEubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAga2V5aWQgPSBjZXJ0aWZpY2F0ZS5pc3N1ZXJLZXlJZDtcbiAgICAgICAgICAgIGRhdGFUb1ZlcmlmeSA9IHsgdXNlcmlkOiB0aGlzLnVzZXJJZCB8fCB0aGlzLnVzZXJBdHRyaWJ1dGUsIGtleTogcHJpbWFyeUtleSB9O1xuICAgICAgICAgICAgX2NvbnRleHQzMS5uZXh0ID0gNTtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoa2V5cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjM2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzMChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5UGFja2V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMzAkKF9jb250ZXh0MzApIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQzMC5wcmV2ID0gX2NvbnRleHQzMC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5nZXRLZXlJZHMoKS5zb21lKGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQuZXF1YWxzKGtleWlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MzAubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzMC5hYnJ1cHQoJ3JldHVybicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzMC5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuZ2V0U2lnbmluZ0tleVBhY2tldChrZXlpZCwgZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlQYWNrZXQgPSBfY29udGV4dDMwLnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMwLnQwID0gY2VydGlmaWNhdGUucmV2b2tlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jb250ZXh0MzAudDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzMC5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMwLm5leHQgPSA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuaXNSZXZva2VkKHByaW1hcnlLZXksIGNlcnRpZmljYXRlLCBrZXlQYWNrZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzMC50MCA9IF9jb250ZXh0MzAuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb250ZXh0MzAudDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzMC5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzMC5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMucmV2b2tlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzMC50MSA9IGNlcnRpZmljYXRlLnZlcmlmaWVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQzMC50MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMwLm5leHQgPSAxNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MzAubmV4dCA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlcnRpZmljYXRlLnZlcmlmeShrZXlQYWNrZXQsIGRhdGFUb1ZlcmlmeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzMC50MSA9IF9jb250ZXh0MzAuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQzMC50MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMwLm5leHQgPSAxOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMwLmFicnVwdCgncmV0dXJuJywgX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy5pbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlLmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MzAubmV4dCA9IDIxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzAuYWJydXB0KCdyZXR1cm4nLCBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLmV4cGlyZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMwLmFicnVwdCgncmV0dXJuJywgX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy52YWxpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzMC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMzAsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDYyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYzNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKSk7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXN1bHRzID0gX2NvbnRleHQzMS5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzEuYWJydXB0KCdyZXR1cm4nLCByZXN1bHRzLmZpbmQoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMxLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUzMSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94NTgsIF94NTksIF94NjApIHtcbiAgICByZXR1cm4gX3JlZjM1LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVmVyaWZpZXMgYWxsIHVzZXIgY2VydGlmaWNhdGVzXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5fSBwcmltYXJ5S2V5IFRoZSBwcmltYXJ5IGtleSBwYWNrZXRcbiAqIEBwYXJhbSAge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gICAga2V5cyAgICAgICBBcnJheSBvZiBrZXlzIHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZSBzaWduYXR1cmVzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7a2V5aWQ6IG1vZHVsZTp0eXBlL2tleWlkLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBCb29sZWFufT4+fSAgIExpc3Qgb2Ygc2lnbmVyJ3Mga2V5aWQgYW5kIHZhbGlkaXR5IG9mIHNpZ25hdHVyZVxuICogQGFzeW5jXG4gKi9cblVzZXIucHJvdG90eXBlLnZlcmlmeUFsbENlcnRpZmljYXRpb25zID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjM3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzMyhwcmltYXJ5S2V5LCBrZXlzKSB7XG4gICAgdmFyIHRoYXQsIGNlcnRpZmljYXRpb25zO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMzMkKF9jb250ZXh0MzMpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQzMy5wcmV2ID0gX2NvbnRleHQzMy5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICBjZXJ0aWZpY2F0aW9ucyA9IHRoaXMuc2VsZkNlcnRpZmljYXRpb25zLmNvbmNhdCh0aGlzLm90aGVyQ2VydGlmaWNhdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzMuYWJydXB0KCdyZXR1cm4nLCBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoY2VydGlmaWNhdGlvbnMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWYzOCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMzIoY2VydGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0dXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzMiQoX2NvbnRleHQzMikge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDMyLnByZXYgPSBfY29udGV4dDMyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMyLm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQudmVyaWZ5Q2VydGlmaWNhdGUocHJpbWFyeUtleSwgY2VydGlmaWNhdGlvbiwga2V5cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBfY29udGV4dDMyLnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzMi5hYnJ1cHQoJ3JldHVybicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5aWQ6IGNlcnRpZmljYXRpb24uaXNzdWVyS2V5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBzdGF0dXMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBzdGF0dXMgPT09IF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMudmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzMi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMzIsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDY1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYzOC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSgpKSkpO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzMy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMzMsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDYzLCBfeDY0KSB7XG4gICAgcmV0dXJuIF9yZWYzNy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFZlcmlmeSBVc2VyLiBDaGVja3MgZm9yIGV4aXN0ZW5jZSBvZiBzZWxmIHNpZ25hdHVyZXMsIHJldm9jYXRpb24gc2lnbmF0dXJlc1xuICogYW5kIHZhbGlkaXR5IG9mIHNlbGYgc2lnbmF0dXJlXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5fSBwcmltYXJ5S2V5IFRoZSBwcmltYXJ5IGtleSBwYWNrZXRcbiAqIEByZXR1cm5zIHtQcm9taXNlPG1vZHVsZTplbnVtcy5rZXlTdGF0dXM+fSAgICBTdGF0dXMgb2YgdXNlclxuICogQGFzeW5jXG4gKi9cblVzZXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYzOSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMzUocHJpbWFyeUtleSkge1xuICAgIHZhciB0aGF0LCBkYXRhVG9WZXJpZnksIHJlc3VsdHM7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzNSQoX2NvbnRleHQzNSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDM1LnByZXYgPSBfY29udGV4dDM1Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxmQ2VydGlmaWNhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MzUubmV4dCA9IDI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzNS5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMubm9fc2VsZl9jZXJ0KTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgZGF0YVRvVmVyaWZ5ID0geyB1c2VyaWQ6IHRoaXMudXNlcklkIHx8IHRoaXMudXNlckF0dHJpYnV0ZSwga2V5OiBwcmltYXJ5S2V5IH07XG4gICAgICAgICAgICAvLyBUT0RPIHJlcGxhY2Ugd2hlbiBQcm9taXNlLnNvbWUgb3IgUHJvbWlzZS5hbnkgYXJlIGltcGxlbWVudGVkXG5cbiAgICAgICAgICAgIF9jb250ZXh0MzUudDAgPSBbX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy5pbnZhbGlkXTtcbiAgICAgICAgICAgIF9jb250ZXh0MzUubmV4dCA9IDc7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKHRoaXMuc2VsZkNlcnRpZmljYXRpb25zLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNDAgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTM0KHNlbGZDZXJ0aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzNCQoX2NvbnRleHQzNCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDM0LnByZXYgPSBfY29udGV4dDM0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDM0LnQwID0gc2VsZkNlcnRpZmljYXRpb24ucmV2b2tlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jb250ZXh0MzQudDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzNC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MzQubmV4dCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5pc1Jldm9rZWQocHJpbWFyeUtleSwgc2VsZkNlcnRpZmljYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzNC50MCA9IF9jb250ZXh0MzQuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2NvbnRleHQzNC50MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDM0Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzQuYWJydXB0KCdyZXR1cm4nLCBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLnJldm9rZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzNC50MSA9IHNlbGZDZXJ0aWZpY2F0aW9uLnZlcmlmaWVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQzNC50MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDM0Lm5leHQgPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MzQubmV4dCA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGZDZXJ0aWZpY2F0aW9uLnZlcmlmeShwcmltYXJ5S2V5LCBkYXRhVG9WZXJpZnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MzQudDEgPSBfY29udGV4dDM0LnNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jb250ZXh0MzQudDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzNC5uZXh0ID0gMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzNC5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMuaW52YWxpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmQ2VydGlmaWNhdGlvbi5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDM0Lm5leHQgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDM0LmFicnVwdCgncmV0dXJuJywgX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy5leHBpcmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzNC5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMudmFsaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTM0LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2Nykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNDAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgX2NvbnRleHQzNS50MSA9IF9jb250ZXh0MzUuc2VudDtcbiAgICAgICAgICAgIHJlc3VsdHMgPSBfY29udGV4dDM1LnQwLmNvbmNhdC5jYWxsKF9jb250ZXh0MzUudDAsIF9jb250ZXh0MzUudDEpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzUuYWJydXB0KCdyZXR1cm4nLCByZXN1bHRzLnNvbWUoZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzID09PSBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLnZhbGlkO1xuICAgICAgICAgICAgfSkgPyBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLnZhbGlkIDogcmVzdWx0cy5wb3AoKSk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzNS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMzUsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDY2KSB7XG4gICAgcmV0dXJuIF9yZWYzOS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFVwZGF0ZSB1c2VyIHdpdGggbmV3IGNvbXBvbmVudHMgZnJvbSBzcGVjaWZpZWQgdXNlclxuICogQHBhcmFtICB7bW9kdWxlOmtleS5Vc2VyfSAgICAgICAgICAgICB1c2VyICAgICAgIFNvdXJjZSB1c2VyIHRvIG1lcmdlXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0U3Via2V5fSBwcmltYXJ5S2V5IHByaW1hcnkga2V5IHVzZWQgZm9yIHZhbGlkYXRpb25cbiAqL1xuVXNlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjQxID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzNyh1c2VyLCBwcmltYXJ5S2V5KSB7XG4gICAgdmFyIGRhdGFUb1ZlcmlmeTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTM3JChfY29udGV4dDM3KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MzcucHJldiA9IF9jb250ZXh0MzcubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGRhdGFUb1ZlcmlmeSA9IHsgdXNlcmlkOiB0aGlzLnVzZXJJZCB8fCB0aGlzLnVzZXJBdHRyaWJ1dGUsIGtleTogcHJpbWFyeUtleSB9O1xuICAgICAgICAgICAgLy8gc2VsZiBzaWduYXR1cmVzXG5cbiAgICAgICAgICAgIF9jb250ZXh0MzcubmV4dCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VTaWduYXR1cmVzKHVzZXIsIHRoaXMsICdzZWxmQ2VydGlmaWNhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNDIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTM2KHNyY1NlbGZTaWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTM2JChfY29udGV4dDM2KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MzYucHJldiA9IF9jb250ZXh0MzYubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDM2LmFicnVwdCgncmV0dXJuJywgc3JjU2VsZlNpZy52ZXJpZmllZCB8fCBzcmNTZWxmU2lnLnZlcmlmeShwcmltYXJ5S2V5LCBkYXRhVG9WZXJpZnkpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzYuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTM2LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g3MCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNDIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBfY29udGV4dDM3Lm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2lnbmF0dXJlcyh1c2VyLCB0aGlzLCAnb3RoZXJDZXJ0aWZpY2F0aW9ucycpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgX2NvbnRleHQzNy5uZXh0ID0gNztcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVNpZ25hdHVyZXModXNlciwgdGhpcywgJ3Jldm9jYXRpb25TaWduYXR1cmVzJywgZnVuY3Rpb24gKHNyY1JldlNpZykge1xuICAgICAgICAgICAgICByZXR1cm4gaXNEYXRhUmV2b2tlZChwcmltYXJ5S2V5LCBkYXRhVG9WZXJpZnksIFtzcmNSZXZTaWddKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzNy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMzcsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDY4LCBfeDY5KSB7XG4gICAgcmV0dXJuIF9yZWY0MS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGNsYXNzZGVzYyBDbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBzdWJrZXkgcGFja2V0IGFuZCB0aGUgcmVsZXZhbnQgc2lnbmF0dXJlcy5cbiAqL1xuZnVuY3Rpb24gU3ViS2V5KHN1YktleVBhY2tldCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3ViS2V5KSkge1xuICAgIHJldHVybiBuZXcgU3ViS2V5KHN1YktleVBhY2tldCk7XG4gIH1cbiAgdGhpcy5zdWJLZXkgPSBzdWJLZXlQYWNrZXQ7XG4gIHRoaXMuYmluZGluZ1NpZ25hdHVyZXMgPSBbXTtcbiAgdGhpcy5yZXZvY2F0aW9uU2lnbmF0dXJlcyA9IFtdO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgc3RydWN0dXJlZCBzdWJrZXkgZGF0YSB0byBwYWNrZXRsaXN0XG4gKiBAcmV0dXJucyB7bW9kdWxlOnBhY2tldC5MaXN0fVxuICovXG5TdWJLZXkucHJvdG90eXBlLnRvUGFja2V0bGlzdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhY2tldGxpc3QgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG4gIHBhY2tldGxpc3QucHVzaCh0aGlzLnN1YktleSk7XG4gIHBhY2tldGxpc3QuY29uY2F0KHRoaXMucmV2b2NhdGlvblNpZ25hdHVyZXMpO1xuICBwYWNrZXRsaXN0LmNvbmNhdCh0aGlzLmJpbmRpbmdTaWduYXR1cmVzKTtcbiAgcmV0dXJuIHBhY2tldGxpc3Q7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGJpbmRpbmcgc2lnbmF0dXJlIG9mIGEgc3Via2V5IGlzIHJldm9rZWRcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXl9IHByaW1hcnlLZXkgICAgVGhlIHByaW1hcnkga2V5IHBhY2tldFxuICogQHBhcmFtICB7bW9kdWxlOnBhY2tldC5TaWduYXR1cmV9ICBzaWduYXR1cmUgICAgIFRoZSBiaW5kaW5nIHNpZ25hdHVyZSB0byB2ZXJpZnlcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuUHVibGljU3Via2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5TZWNyZXRTdWJrZXl8XG4gKiAgICAgICAgICBtb2R1bGU6cGFja2V0LlB1YmxpY0tleXxcbiAqICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fSBrZXksIG9wdGlvbmFsIFRoZSBrZXkgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSAge0RhdGV9ICAgICAgICAgICAgICAgICAgICAgZGF0ZSAgICAgICAgICBVc2UgdGhlIGdpdmVuIGRhdGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgYmluZGluZyBzaWduYXR1cmUgaXMgcmV2b2tlZFxuICogQGFzeW5jXG4gKi9cblN1YktleS5wcm90b3R5cGUuaXNSZXZva2VkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjQzID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzOChwcmltYXJ5S2V5LCBzaWduYXR1cmUsIGtleSkge1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMzgkKF9jb250ZXh0MzgpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQzOC5wcmV2ID0gX2NvbnRleHQzOC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzguYWJydXB0KCdyZXR1cm4nLCBpc0RhdGFSZXZva2VkKHByaW1hcnlLZXksIHtcbiAgICAgICAgICAgICAga2V5OiBwcmltYXJ5S2V5LFxuICAgICAgICAgICAgICBiaW5kOiB0aGlzLnN1YktleVxuICAgICAgICAgICAgfSwgdGhpcy5yZXZvY2F0aW9uU2lnbmF0dXJlcywgc2lnbmF0dXJlLCBrZXksIGRhdGUpKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mzguc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTM4LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g3MSwgX3g3MiwgX3g3Mykge1xuICAgIHJldHVybiBfcmVmNDMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBWZXJpZnkgc3Via2V5LiBDaGVja3MgZm9yIHJldm9jYXRpb24gc2lnbmF0dXJlcywgZXhwaXJhdGlvbiB0aW1lXG4gKiBhbmQgdmFsaWQgYmluZGluZyBzaWduYXR1cmVcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fFxuICogICAgICAgICAgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXl9IHByaW1hcnlLZXkgVGhlIHByaW1hcnkga2V5IHBhY2tldFxuICogQHBhcmFtICB7RGF0ZX0gICAgICAgICAgICAgICAgICAgICBkYXRlICAgICAgIFVzZSB0aGUgZ2l2ZW4gZGF0ZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPG1vZHVsZTplbnVtcy5rZXlTdGF0dXM+fSAgICBUaGUgc3RhdHVzIG9mIHRoZSBzdWJrZXlcbiAqIEBhc3luY1xuICovXG5TdWJLZXkucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWY0NCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMzkocHJpbWFyeUtleSkge1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciB0aGF0LCBkYXRhVG9WZXJpZnksIGJpbmRpbmdTaWduYXR1cmU7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzOSQoX2NvbnRleHQzOSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDM5LnByZXYgPSBfY29udGV4dDM5Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIGRhdGFUb1ZlcmlmeSA9IHsga2V5OiBwcmltYXJ5S2V5LCBiaW5kOiB0aGlzLnN1YktleSB9O1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIFYzIGV4cGlyYXRpb24gdGltZVxuXG4gICAgICAgICAgICBpZiAoISh0aGlzLnN1YktleS52ZXJzaW9uID09PSAzICYmIGlzRGF0YUV4cGlyZWQodGhpcy5zdWJLZXksIG51bGwsIGRhdGUpKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDM5Lm5leHQgPSA0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzkuYWJydXB0KCdyZXR1cm4nLCBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLmV4cGlyZWQpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgLy8gY2hlY2sgc3Via2V5IGJpbmRpbmcgc2lnbmF0dXJlc1xuICAgICAgICAgICAgYmluZGluZ1NpZ25hdHVyZSA9IGdldExhdGVzdFNpZ25hdHVyZSh0aGlzLmJpbmRpbmdTaWduYXR1cmVzLCBkYXRlKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGJpbmRpbmcgc2lnbmF0dXJlIGlzIHZlcmlmaWVkXG5cbiAgICAgICAgICAgIF9jb250ZXh0MzkudDAgPSBiaW5kaW5nU2lnbmF0dXJlLnZlcmlmaWVkO1xuXG4gICAgICAgICAgICBpZiAoX2NvbnRleHQzOS50MCkge1xuICAgICAgICAgICAgICBfY29udGV4dDM5Lm5leHQgPSAxMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0MzkubmV4dCA9IDk7XG4gICAgICAgICAgICByZXR1cm4gYmluZGluZ1NpZ25hdHVyZS52ZXJpZnkocHJpbWFyeUtleSwgZGF0YVRvVmVyaWZ5KTtcblxuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIF9jb250ZXh0MzkudDAgPSBfY29udGV4dDM5LnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKF9jb250ZXh0MzkudDApIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzOS5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzOS5hYnJ1cHQoJ3JldHVybicsIF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMuaW52YWxpZCk7XG5cbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgX2NvbnRleHQzOS50MSA9IGJpbmRpbmdTaWduYXR1cmUucmV2b2tlZDtcblxuICAgICAgICAgICAgaWYgKF9jb250ZXh0MzkudDEpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzOS5uZXh0ID0gMTc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDM5Lm5leHQgPSAxNjtcbiAgICAgICAgICAgIHJldHVybiB0aGF0LmlzUmV2b2tlZChwcmltYXJ5S2V5LCBiaW5kaW5nU2lnbmF0dXJlLCBudWxsLCBkYXRlKTtcblxuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICBfY29udGV4dDM5LnQxID0gX2NvbnRleHQzOS5zZW50O1xuXG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIGlmICghX2NvbnRleHQzOS50MSkge1xuICAgICAgICAgICAgICBfY29udGV4dDM5Lm5leHQgPSAxOTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDM5LmFicnVwdCgncmV0dXJuJywgX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy5yZXZva2VkKTtcblxuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICBpZiAoIWJpbmRpbmdTaWduYXR1cmUuaXNFeHBpcmVkKGRhdGUpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0MzkubmV4dCA9IDIxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MzkuYWJydXB0KCdyZXR1cm4nLCBfZW51bXMyLmRlZmF1bHQua2V5U3RhdHVzLmV4cGlyZWQpO1xuXG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDM5LmFicnVwdCgncmV0dXJuJywgX2VudW1zMi5kZWZhdWx0LmtleVN0YXR1cy52YWxpZCk7XG5cbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzOS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMzksIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDc1KSB7XG4gICAgcmV0dXJuIF9yZWY0NC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgc3Via2V5IG9yIEluZmluaXR5IGlmIGtleSBkb2VzIG5vdCBleHBpcmVcbiAqIEBwYXJhbSAge0RhdGV9ICAgICAgICAgICAgICAgICAgICAgZGF0ZSAgICAgICBVc2UgdGhlIGdpdmVuIGRhdGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0aW1lXG4gKiBAcmV0dXJucyB7RGF0ZX1cbiAqL1xuU3ViS2V5LnByb3RvdHlwZS5nZXRFeHBpcmF0aW9uVGltZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG5ldyBEYXRlKCk7XG5cbiAgdmFyIGJpbmRpbmdTaWduYXR1cmUgPSBnZXRMYXRlc3RTaWduYXR1cmUodGhpcy5iaW5kaW5nU2lnbmF0dXJlcywgZGF0ZSk7XG4gIHZhciBrZXlFeHBpcnkgPSBnZXRFeHBpcmF0aW9uVGltZSh0aGlzLnN1YktleSwgYmluZGluZ1NpZ25hdHVyZSk7XG4gIHZhciBzaWdFeHBpcnkgPSBiaW5kaW5nU2lnbmF0dXJlLmdldEV4cGlyYXRpb25UaW1lKCk7XG4gIHJldHVybiBrZXlFeHBpcnkgPCBzaWdFeHBpcnkgPyBrZXlFeHBpcnkgOiBzaWdFeHBpcnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdWJrZXkgd2l0aCBuZXcgY29tcG9uZW50cyBmcm9tIHNwZWNpZmllZCBzdWJrZXlcbiAqIEBwYXJhbSAge21vZHVsZTprZXkuU3ViS2V5fSAgICAgICAgICAgc3ViS2V5ICAgICBTb3VyY2Ugc3Via2V5IHRvIG1lcmdlXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleXxcbiAgICAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0U3Via2V5fSBwcmltYXJ5S2V5IHByaW1hcnkga2V5IHVzZWQgZm9yIHZhbGlkYXRpb25cbiAqL1xuU3ViS2V5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNDUgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQxKHN1YktleSwgcHJpbWFyeUtleSkge1xuICAgIHZhciB0aGF0LCBkYXRhVG9WZXJpZnk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0MSQoX2NvbnRleHQ0MSkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDQxLnByZXYgPSBfY29udGV4dDQxLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dDQxLm5leHQgPSAyO1xuICAgICAgICAgICAgcmV0dXJuIHN1YktleS52ZXJpZnkocHJpbWFyeUtleSk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBfY29udGV4dDQxLnQwID0gX2NvbnRleHQ0MS5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQ0MS50MSA9IF9lbnVtczIuZGVmYXVsdC5rZXlTdGF0dXMuaW52YWxpZDtcblxuICAgICAgICAgICAgaWYgKCEoX2NvbnRleHQ0MS50MCA9PT0gX2NvbnRleHQ0MS50MSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ0MS5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQxLmFicnVwdCgncmV0dXJuJyk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAoISh0aGlzLnN1YktleS5nZXRGaW5nZXJwcmludCgpICE9PSBzdWJLZXkuc3ViS2V5LmdldEZpbmdlcnByaW50KCkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0NDEubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1YktleSB1cGRhdGUgbWV0aG9kOiBmaW5nZXJwcmludHMgb2Ygc3Via2V5cyBub3QgZXF1YWwnKTtcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIC8vIGtleSBwYWNrZXRcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YktleS50YWcgPT09IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQucHVibGljU3Via2V5ICYmIHN1YktleS5zdWJLZXkudGFnID09PSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnNlY3JldFN1YmtleSkge1xuICAgICAgICAgICAgICB0aGlzLnN1YktleSA9IHN1YktleS5zdWJLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB1cGRhdGUgbWlzc2luZyBiaW5kaW5nIHNpZ25hdHVyZXNcbiAgICAgICAgICAgIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgZGF0YVRvVmVyaWZ5ID0geyBrZXk6IHByaW1hcnlLZXksIGJpbmQ6IHRoYXQuc3ViS2V5IH07XG4gICAgICAgICAgICBfY29udGV4dDQxLm5leHQgPSAxMztcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVNpZ25hdHVyZXMoc3ViS2V5LCB0aGlzLCAnYmluZGluZ1NpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmNDYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQwKHNyY0JpbmRTaWcpIHtcbiAgICAgICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQwJChfY29udGV4dDQwKSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NDAucHJldiA9IF9jb250ZXh0NDAubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NDAudDAgPSBzcmNCaW5kU2lnLnZlcmlmaWVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQ0MC50MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQwLm5leHQgPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0MC5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcmNCaW5kU2lnLnZlcmlmeShwcmltYXJ5S2V5LCBkYXRhVG9WZXJpZnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0MC50MCA9IF9jb250ZXh0NDAuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29udGV4dDQwLnQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NDAubmV4dCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0MC5hYnJ1cHQoJ3JldHVybicsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaSA8IHRoYXQuYmluZGluZ1NpZ25hdHVyZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQwLm5leHQgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhhdC5iaW5kaW5nU2lnbmF0dXJlc1tpXS5pc3N1ZXJLZXlJZC5lcXVhbHMoc3JjQmluZFNpZy5pc3N1ZXJLZXlJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0MC5uZXh0ID0gMTM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShzcmNCaW5kU2lnLmNyZWF0ZWQgPCB0aGF0LmJpbmRpbmdTaWduYXR1cmVzW2ldLmNyZWF0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NDAubmV4dCA9IDEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5iaW5kaW5nU2lnbmF0dXJlc1tpXSA9IHNyY0JpbmRTaWc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0MC5hYnJ1cHQoJ3JldHVybicsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQwLm5leHQgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NDAuYWJydXB0KCdyZXR1cm4nLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQwLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU0MCwgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94ODApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjQ2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpO1xuXG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIF9jb250ZXh0NDEubmV4dCA9IDE1O1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2lnbmF0dXJlcyhzdWJLZXksIHRoaXMsICdyZXZvY2F0aW9uU2lnbmF0dXJlcycsIGZ1bmN0aW9uIChzcmNSZXZTaWcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRGF0YVJldm9rZWQocHJpbWFyeUtleSwgZGF0YVRvVmVyaWZ5LCBbc3JjUmV2U2lnXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQxLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU0MSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94NzgsIF94NzkpIHtcbiAgICByZXR1cm4gX3JlZjQ1LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogUmV2b2tlcyB0aGUgc3Via2V5XG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0LlNlY3JldEtleX0gcHJpbWFyeUtleSBkZWNyeXB0ZWQgcHJpdmF0ZSBwcmltYXJ5IGtleSBmb3IgcmV2b2NhdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSByZWFzb25Gb3JSZXZvY2F0aW9uIG9wdGlvbmFsLCBvYmplY3QgaW5kaWNhdGluZyB0aGUgcmVhc29uIGZvciByZXZvY2F0aW9uXG4gKiBAcGFyYW0gIHttb2R1bGU6ZW51bXMucmVhc29uRm9yUmV2b2NhdGlvbn0gcmVhc29uRm9yUmV2b2NhdGlvbi5mbGFnIG9wdGlvbmFsLCBmbGFnIGluZGljYXRpbmcgdGhlIHJlYXNvbiBmb3IgcmV2b2NhdGlvblxuICogQHBhcmFtICB7U3RyaW5nfSByZWFzb25Gb3JSZXZvY2F0aW9uLnN0cmluZyBvcHRpb25hbCwgc3RyaW5nIGV4cGxhaW5pbmcgdGhlIHJlYXNvbiBmb3IgcmV2b2NhdGlvblxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSBvcHRpb25hbCwgb3ZlcnJpZGUgdGhlIGNyZWF0aW9udGltZSBvZiB0aGUgcmV2b2NhdGlvbiBzaWduYXR1cmVcbiAqIEByZXR1cm4ge21vZHVsZTprZXl+U3ViS2V5fSBuZXcgc3Via2V5IHdpdGggcmV2b2NhdGlvbiBzaWduYXR1cmVcbiAqL1xuU3ViS2V5LnByb3RvdHlwZS5yZXZva2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNDcgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQyKHByaW1hcnlLZXkpIHtcbiAgICB2YXIgX3JlZjQ4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgX3JlZjQ4JGZsYWcgPSBfcmVmNDguZmxhZyxcbiAgICAgICAgcmVhc29uRm9yUmV2b2NhdGlvbkZsYWcgPSBfcmVmNDgkZmxhZyA9PT0gdW5kZWZpbmVkID8gX2VudW1zMi5kZWZhdWx0LnJlYXNvbkZvclJldm9jYXRpb24ubm9fcmVhc29uIDogX3JlZjQ4JGZsYWcsXG4gICAgICAgIF9yZWY0OCRzdHJpbmcgPSBfcmVmNDguc3RyaW5nLFxuICAgICAgICByZWFzb25Gb3JSZXZvY2F0aW9uU3RyaW5nID0gX3JlZjQ4JHN0cmluZyA9PT0gdW5kZWZpbmVkID8gJycgOiBfcmVmNDgkc3RyaW5nO1xuXG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIGRhdGFUb1NpZ24sIHN1YktleTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQyJChfY29udGV4dDQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NDIucHJldiA9IF9jb250ZXh0NDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGRhdGFUb1NpZ24gPSB7IGtleTogcHJpbWFyeUtleSwgYmluZDogdGhpcy5zdWJLZXkgfTtcbiAgICAgICAgICAgIHN1YktleSA9IG5ldyBTdWJLZXkodGhpcy5zdWJLZXkpO1xuICAgICAgICAgICAgX2NvbnRleHQ0Mi50MCA9IHN1YktleS5yZXZvY2F0aW9uU2lnbmF0dXJlcztcbiAgICAgICAgICAgIF9jb250ZXh0NDIubmV4dCA9IDU7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlU2lnbmF0dXJlUGFja2V0KGRhdGFUb1NpZ24sIG51bGwsIHByaW1hcnlLZXksIHtcbiAgICAgICAgICAgICAgc2lnbmF0dXJlVHlwZTogX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5zdWJrZXlfcmV2b2NhdGlvbixcbiAgICAgICAgICAgICAgcmVhc29uRm9yUmV2b2NhdGlvbkZsYWc6IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucmVhc29uRm9yUmV2b2NhdGlvbiwgcmVhc29uRm9yUmV2b2NhdGlvbkZsYWcpLFxuICAgICAgICAgICAgICByZWFzb25Gb3JSZXZvY2F0aW9uU3RyaW5nOiByZWFzb25Gb3JSZXZvY2F0aW9uU3RyaW5nXG4gICAgICAgICAgICB9LCBkYXRlKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIF9jb250ZXh0NDIudDEgPSBfY29udGV4dDQyLnNlbnQ7XG5cbiAgICAgICAgICAgIF9jb250ZXh0NDIudDAucHVzaC5jYWxsKF9jb250ZXh0NDIudDAsIF9jb250ZXh0NDIudDEpO1xuXG4gICAgICAgICAgICBfY29udGV4dDQyLm5leHQgPSA5O1xuICAgICAgICAgICAgcmV0dXJuIHN1YktleS51cGRhdGUodGhpcywgcHJpbWFyeUtleSk7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0Mi5hYnJ1cHQoJ3JldHVybicsIHN1YktleSk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNDIsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDgxKSB7XG4gICAgcmV0dXJuIF9yZWY0Ny5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIFJlYWRzIGFuIHVuYXJtb3JlZCBPcGVuUEdQIGtleSBsaXN0IGFuZCByZXR1cm5zIG9uZSBvciBtdWx0aXBsZSBrZXkgb2JqZWN0c1xuICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge3trZXlzOiBBcnJheTxtb2R1bGU6a2V5LktleT4sXG4gKiAgICAgICAgICAgIGVycjogKEFycmF5PEVycm9yPnxudWxsKX19IHJlc3VsdCBvYmplY3Qgd2l0aCBrZXkgYW5kIGVycm9yIGFycmF5c1xuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiByZWFkKGRhdGEpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICByZXN1bHQua2V5cyA9IFtdO1xuICB0cnkge1xuICAgIHZhciBwYWNrZXRsaXN0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xuICAgIHBhY2tldGxpc3QucmVhZChkYXRhKTtcbiAgICB2YXIga2V5SW5kZXggPSBwYWNrZXRsaXN0LmluZGV4T2ZUYWcoX2VudW1zMi5kZWZhdWx0LnBhY2tldC5wdWJsaWNLZXksIF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc2VjcmV0S2V5KTtcbiAgICBpZiAoa2V5SW5kZXgubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGtleSBwYWNrZXQgZm91bmQnKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9uZUtleUxpc3QgPSBwYWNrZXRsaXN0LnNsaWNlKGtleUluZGV4W2ldLCBrZXlJbmRleFtpICsgMV0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5ld0tleSA9IG5ldyBLZXkob25lS2V5TGlzdCk7XG4gICAgICAgIHJlc3VsdC5rZXlzLnB1c2gobmV3S2V5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVzdWx0LmVyciA9IHJlc3VsdC5lcnIgfHwgW107XG4gICAgICAgIHJlc3VsdC5lcnIucHVzaChlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXN1bHQuZXJyID0gcmVzdWx0LmVyciB8fCBbXTtcbiAgICByZXN1bHQuZXJyLnB1c2goZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZWFkcyBhbiBPcGVuUEdQIGFybW9yZWQgdGV4dCBhbmQgcmV0dXJucyBvbmUgb3IgbXVsdGlwbGUga2V5IG9iamVjdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcm1vcmVkVGV4dCB0ZXh0IHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge3trZXlzOiBBcnJheTxtb2R1bGU6a2V5LktleT4sXG4gKiAgICAgICAgICAgIGVycjogKEFycmF5PEVycm9yPnxudWxsKX19IHJlc3VsdCBvYmplY3Qgd2l0aCBrZXkgYW5kIGVycm9yIGFycmF5c1xuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiByZWFkQXJtb3JlZChhcm1vcmVkVGV4dCkge1xuICB0cnkge1xuICAgIHZhciBpbnB1dCA9IF9hcm1vcjIuZGVmYXVsdC5kZWNvZGUoYXJtb3JlZFRleHQpO1xuICAgIGlmICghKGlucHV0LnR5cGUgPT09IF9lbnVtczIuZGVmYXVsdC5hcm1vci5wdWJsaWNfa2V5IHx8IGlucHV0LnR5cGUgPT09IF9lbnVtczIuZGVmYXVsdC5hcm1vci5wcml2YXRlX2tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJtb3JlZCB0ZXh0IG5vdCBvZiB0eXBlIGtleScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZChpbnB1dC5kYXRhKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXN1bHQgPSB7IGtleXM6IFtdLCBlcnI6IFtdIH07XG4gICAgcmVzdWx0LmVyci5wdXNoKGUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNEYXRhRXhwaXJlZChrZXlQYWNrZXQsIHNpZ25hdHVyZSkge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcblxuICB2YXIgbm9ybURhdGUgPSBfdXRpbDIuZGVmYXVsdC5ub3JtYWxpemVEYXRlKGRhdGUpO1xuICBpZiAobm9ybURhdGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBnZXRFeHBpcmF0aW9uVGltZShrZXlQYWNrZXQsIHNpZ25hdHVyZSk7XG4gICAgcmV0dXJuICEoa2V5UGFja2V0LmNyZWF0ZWQgPD0gbm9ybURhdGUgJiYgbm9ybURhdGUgPCBleHBpcmF0aW9uVGltZSkgfHwgc2lnbmF0dXJlICYmIHNpZ25hdHVyZS5pc0V4cGlyZWQoZGF0ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBpcmF0aW9uVGltZShrZXlQYWNrZXQsIHNpZ25hdHVyZSkge1xuICB2YXIgZXhwaXJhdGlvblRpbWUgPSB2b2lkIDA7XG4gIC8vIGNoZWNrIFYzIGV4cGlyYXRpb24gdGltZVxuICBpZiAoa2V5UGFja2V0LnZlcnNpb24gPT09IDMgJiYga2V5UGFja2V0LmV4cGlyYXRpb25UaW1lVjMgIT09IDApIHtcbiAgICBleHBpcmF0aW9uVGltZSA9IGtleVBhY2tldC5jcmVhdGVkLmdldFRpbWUoKSArIGtleVBhY2tldC5leHBpcmF0aW9uVGltZVYzICogMjQgKiAzNjAwICogMTAwMDtcbiAgfVxuICAvLyBjaGVjayBWNCBleHBpcmF0aW9uIHRpbWVcbiAgaWYgKGtleVBhY2tldC52ZXJzaW9uID49IDQgJiYgc2lnbmF0dXJlLmtleU5ldmVyRXhwaXJlcyA9PT0gZmFsc2UpIHtcbiAgICBleHBpcmF0aW9uVGltZSA9IGtleVBhY2tldC5jcmVhdGVkLmdldFRpbWUoKSArIHNpZ25hdHVyZS5rZXlFeHBpcmF0aW9uVGltZSAqIDEwMDA7XG4gIH1cbiAgcmV0dXJuIGV4cGlyYXRpb25UaW1lID8gbmV3IERhdGUoZXhwaXJhdGlvblRpbWUpIDogSW5maW5pdHk7XG59XG5cbn0se1wiLi9jb25maWdcIjozMjUsXCIuL2NyeXB0b1wiOjM0MCxcIi4vZW5jb2RpbmcvYXJtb3JcIjozNTcsXCIuL2VudW1zXCI6MzU5LFwiLi9wYWNrZXRcIjozNzEsXCIuL3V0aWxcIjozOTgsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnblwiOjI0LFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCI6MjksXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3ZhbHVlc1wiOjMxLFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2VcIjozMixcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiOjQwLFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzYzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9rZXlyaW5nID0gX2RlcmVxXygnLi9rZXlyaW5nLmpzJyk7XG5cbnZhciBfa2V5cmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlyaW5nKTtcblxudmFyIF9sb2NhbHN0b3JlID0gX2RlcmVxXygnLi9sb2NhbHN0b3JlLmpzJyk7XG5cbnZhciBfbG9jYWxzdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2NhbHN0b3JlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggc3RvcmFnZSBvZiB0aGUga2V5cmluZy5cbiAqIEBzZWUgbW9kdWxlOmtleXJpbmcva2V5cmluZ1xuICogQHNlZSBtb2R1bGU6a2V5cmluZy9sb2NhbHN0b3JlXG4gKiBAbW9kdWxlIGtleXJpbmdcbiAqL1xuX2tleXJpbmcyLmRlZmF1bHQubG9jYWxzdG9yZSA9IF9sb2NhbHN0b3JlMi5kZWZhdWx0O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfa2V5cmluZzIuZGVmYXVsdDtcblxufSx7XCIuL2tleXJpbmcuanNcIjozNjQsXCIuL2xvY2Fsc3RvcmUuanNcIjozNjV9XSwzNjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBfa2V5ID0gX2RlcmVxXygnLi4va2V5Jyk7XG5cbnZhciBfbG9jYWxzdG9yZSA9IF9kZXJlcV8oJy4vbG9jYWxzdG9yZScpO1xuXG52YXIgX2xvY2Fsc3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxzdG9yZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIGtleXJpbmcuXG4gKiBUaGlzIG1ldGhvZCByZWFkcyB0aGUga2V5cmluZyBmcm9tIEhUTUw1IGxvY2FsIHN0b3JhZ2UgYW5kIGluaXRpYWxpemVzIHRoaXMgaW5zdGFuY2UuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7a2V5cmluZy9sb2NhbHN0b3JlfSBbc3RvcmVIYW5kbGVyXSBjbGFzcyBpbXBsZW1lbnRpbmcgbG9hZFB1YmxpYygpLCBsb2FkUHJpdmF0ZSgpLCBzdG9yZVB1YmxpYygpLCBhbmQgc3RvcmVQcml2YXRlKCkgbWV0aG9kc1xuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUHJvdmlkZXMgdGhlIEtleXJpbmcgY2xhc3NcbiAqIEByZXF1aXJlcyBrZXlcbiAqIEByZXF1aXJlcyBrZXlyaW5nL2xvY2Fsc3RvcmVcbiAqIEBtb2R1bGUga2V5cmluZy9rZXlyaW5nXG4gKi9cblxuZnVuY3Rpb24gS2V5cmluZyhzdG9yZUhhbmRsZXIpIHtcbiAgdGhpcy5zdG9yZUhhbmRsZXIgPSBzdG9yZUhhbmRsZXIgfHwgbmV3IF9sb2NhbHN0b3JlMi5kZWZhdWx0KCk7XG4gIHRoaXMucHVibGljS2V5cyA9IG5ldyBLZXlBcnJheSh0aGlzLnN0b3JlSGFuZGxlci5sb2FkUHVibGljKCkpO1xuICB0aGlzLnByaXZhdGVLZXlzID0gbmV3IEtleUFycmF5KHRoaXMuc3RvcmVIYW5kbGVyLmxvYWRQcml2YXRlKCkpO1xufVxuXG4vKipcbiAqIENhbGxzIHRoZSBzdG9yZUhhbmRsZXIgdG8gc2F2ZSB0aGUga2V5c1xuICovXG5LZXlyaW5nLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zdG9yZUhhbmRsZXIuc3RvcmVQdWJsaWModGhpcy5wdWJsaWNLZXlzLmtleXMpO1xuICB0aGlzLnN0b3JlSGFuZGxlci5zdG9yZVByaXZhdGUodGhpcy5wcml2YXRlS2V5cy5rZXlzKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGhlIGtleXJpbmcgLSBlcmFzZSBhbGwgdGhlIGtleXNcbiAqL1xuS2V5cmluZy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucHVibGljS2V5cy5rZXlzID0gW107XG4gIHRoaXMucHJpdmF0ZUtleXMua2V5cyA9IFtdO1xufTtcblxuLyoqXG4gKiBTZWFyY2hlcyB0aGUga2V5cmluZyBmb3Iga2V5cyBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlJZCBwcm92aWRlZCBhcyBzdHJpbmcgb2YgbG93ZXJjYXNlIGhleCBudW1iZXJcbiAqIHdpdGhvdXRoIDB4IHByZWZpeCAoY2FuIGJlIDE2LWNoYXJhY3RlciBrZXkgSUQgb3IgZmluZ2VycHJpbnQpXG4gKiBAcGFyYW0gIHtCb29sZWFufSBkZWVwIGlmIHRydWUgc2VhcmNoIGFsc28gaW4gc3Via2V5c1xuICogQHJldHVybnMge0FycmF5PG1vZHVsZTprZXkuS2V5PnxudWxsfSBrZXlzIGZvdW5kIG9yIG51bGxcbiAqL1xuS2V5cmluZy5wcm90b3R5cGUuZ2V0S2V5c0ZvcklkID0gZnVuY3Rpb24gKGtleUlkLCBkZWVwKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0aGlzLnB1YmxpY0tleXMuZ2V0Rm9ySWQoa2V5SWQsIGRlZXApIHx8IFtdKTtcbiAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0aGlzLnByaXZhdGVLZXlzLmdldEZvcklkKGtleUlkLCBkZWVwKSB8fCBbXSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogbnVsbDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBrZXlzIGhhdmluZyB0aGUgc3BlY2lmaWVkIGtleSBpZCBmcm9tIHRoZSBrZXlyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5SWQgcHJvdmlkZWQgYXMgc3RyaW5nIG9mIGxvd2VyY2FzZSBoZXggbnVtYmVyXG4gKiB3aXRob3V0aCAweCBwcmVmaXggKGNhbiBiZSAxNi1jaGFyYWN0ZXIga2V5IElEIG9yIGZpbmdlcnByaW50KVxuICogQHJldHVybnMge0FycmF5PG1vZHVsZTprZXkuS2V5PnxudWxsfSBrZXlzIGZvdW5kIG9yIG51bGxcbiAqL1xuS2V5cmluZy5wcm90b3R5cGUucmVtb3ZlS2V5c0ZvcklkID0gZnVuY3Rpb24gKGtleUlkKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0aGlzLnB1YmxpY0tleXMucmVtb3ZlRm9ySWQoa2V5SWQpIHx8IFtdKTtcbiAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0aGlzLnByaXZhdGVLZXlzLnJlbW92ZUZvcklkKGtleUlkKSB8fCBbXSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogbnVsbDtcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwdWJsaWMgYW5kIHByaXZhdGUga2V5c1xuICogQHJldHVybnMge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gYWxsIGtleXNcbiAqL1xuS2V5cmluZy5wcm90b3R5cGUuZ2V0QWxsS2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucHVibGljS2V5cy5rZXlzLmNvbmNhdCh0aGlzLnByaXZhdGVLZXlzLmtleXMpO1xufTtcblxuLyoqXG4gKiBBcnJheSBvZiBrZXlzXG4gKiBAcGFyYW0ge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0ga2V5cyBUaGUga2V5cyB0byBzdG9yZSBpbiB0aGlzIGFycmF5XG4gKi9cbmZ1bmN0aW9uIEtleUFycmF5KGtleXMpIHtcbiAgdGhpcy5rZXlzID0ga2V5cztcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBhbGwga2V5cyBpbiB0aGUgS2V5QXJyYXkgbWF0Y2hpbmcgdGhlIGFkZHJlc3Mgb3IgYWRkcmVzcyBwYXJ0IG9mIHRoZSB1c2VyIGlkc1xuICogQHBhcmFtIHtTdHJpbmd9IGVtYWlsIGVtYWlsIGFkZHJlc3MgdG8gc2VhcmNoIGZvclxuICogQHJldHVybnMge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gVGhlIHB1YmxpYyBrZXlzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBlbWFpbCBhZGRyZXNzLlxuICovXG5LZXlBcnJheS5wcm90b3R5cGUuZ2V0Rm9yQWRkcmVzcyA9IGZ1bmN0aW9uIChlbWFpbCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMua2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlbWFpbENoZWNrKGVtYWlsLCB0aGlzLmtleXNbaV0pKSB7XG4gICAgICByZXN1bHRzLnB1c2godGhpcy5rZXlzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBhIGtleSB0byBzZWUgaWYgaXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGVtYWlsIGFkZHJlc3NcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZW1haWwgZW1haWwgYWRkcmVzcyB0byBzZWFyY2ggZm9yXG4gKiBAcGFyYW0ge21vZHVsZTprZXkuS2V5fSBrZXkgVGhlIGtleSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIGVtYWlsIGFkZHJlc3MgaXMgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGtleVxuICovXG5mdW5jdGlvbiBlbWFpbENoZWNrKGVtYWlsLCBrZXkpIHtcbiAgZW1haWwgPSBlbWFpbC50b0xvd2VyQ2FzZSgpO1xuICAvLyBlc2NhcGUgZW1haWwgYmVmb3JlIHVzaW5nIGluIHJlZ3VsYXIgZXhwcmVzc2lvblxuICB2YXIgZW1haWxFc2MgPSBlbWFpbC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG4gIHZhciBlbWFpbFJlZ2V4ID0gbmV3IFJlZ0V4cCgnPCcgKyBlbWFpbEVzYyArICc+Jyk7XG4gIHZhciB1c2VySWRzID0ga2V5LmdldFVzZXJJZHMoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1c2VySWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHVzZXJJZCA9IHVzZXJJZHNbaV0udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZW1haWwgPT09IHVzZXJJZCB8fCBlbWFpbFJlZ2V4LnRlc3QodXNlcklkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBrZXkgdG8gc2VlIGlmIGl0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXlpZFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlJZCBwcm92aWRlZCBhcyBzdHJpbmcgb2YgbG93ZXJjYXNlIGhleCBudW1iZXJcbiAqIHdpdGhvdXRoIDB4IHByZWZpeCAoY2FuIGJlIDE2LWNoYXJhY3RlciBrZXkgSUQgb3IgZmluZ2VycHJpbnQpXG4gKiBAcGFyYW0ge21vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fHB1YmxpY19rZXl8cHVibGljX3N1YmtleXxzZWNyZXRfc3Via2V5fSBrZXlwYWNrZXQgVGhlIGtleXBhY2tldCB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiBrZXlwYWNrZXQgaGFzIHRoZSBzcGVjaWZpZWQga2V5aWRcbiAqL1xuZnVuY3Rpb24ga2V5SWRDaGVjayhrZXlJZCwga2V5cGFja2V0KSB7XG4gIGlmIChrZXlJZC5sZW5ndGggPT09IDE2KSB7XG4gICAgcmV0dXJuIGtleUlkID09PSBrZXlwYWNrZXQuZ2V0S2V5SWQoKS50b0hleCgpO1xuICB9XG4gIHJldHVybiBrZXlJZCA9PT0ga2V5cGFja2V0LmdldEZpbmdlcnByaW50KCk7XG59XG5cbi8qKlxuICogU2VhcmNoZXMgdGhlIEtleUFycmF5IGZvciBhIGtleSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlJZCBwcm92aWRlZCBhcyBzdHJpbmcgb2YgbG93ZXJjYXNlIGhleCBudW1iZXJcbiAqIHdpdGhvdXRoIDB4IHByZWZpeCAoY2FuIGJlIDE2LWNoYXJhY3RlciBrZXkgSUQgb3IgZmluZ2VycHJpbnQpXG4gKiBAcGFyYW0gIHtCb29sZWFufSBkZWVwIGlmIHRydWUgc2VhcmNoIGFsc28gaW4gc3Via2V5c1xuICogQHJldHVybnMge21vZHVsZTprZXkuS2V5fG51bGx9IGtleSBmb3VuZCBvciBudWxsXG4gKi9cbktleUFycmF5LnByb3RvdHlwZS5nZXRGb3JJZCA9IGZ1bmN0aW9uIChrZXlJZCwgZGVlcCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMua2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChrZXlJZENoZWNrKGtleUlkLCB0aGlzLmtleXNbaV0ucHJpbWFyeUtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleXNbaV07XG4gICAgfVxuICAgIGlmIChkZWVwICYmIHRoaXMua2V5c1tpXS5zdWJLZXlzLmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmtleXNbaV0uc3ViS2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoa2V5SWRDaGVjayhrZXlJZCwgdGhpcy5rZXlzW2ldLnN1YktleXNbal0uc3ViS2V5KSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmtleXNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIEltcG9ydHMgYSBrZXkgZnJvbSBhbiBhc2NpaSBhcm1vcmVkIG1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcm1vcmVkIG1lc3NhZ2UgdG8gcmVhZCB0aGUga2V5cy9rZXkgZnJvbVxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8RXJyb3I+fG51bGw+fSBhcnJheSBvZiBlcnJvciBvYmplY3RzIG9yIG51bGxcbiAqIEBhc3luY1xuICovXG5LZXlBcnJheS5wcm90b3R5cGUuaW1wb3J0S2V5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKGFybW9yZWQpIHtcbiAgICB2YXIgaW1wb3J0ZWQsIGksIGtleSwga2V5aWRIZXgsIGtleUZvdW5kO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGltcG9ydGVkID0gKDAsIF9rZXkucmVhZEFybW9yZWQpKGFybW9yZWQpO1xuICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpZiAoIShpIDwgaW1wb3J0ZWQua2V5cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGtleSA9IGltcG9ydGVkLmtleXNbaV07XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBrZXkgYWxyZWFkeSBpbiBrZXkgYXJyYXlcblxuICAgICAgICAgICAga2V5aWRIZXggPSBrZXkucHJpbWFyeUtleS5nZXRLZXlJZCgpLnRvSGV4KCk7XG4gICAgICAgICAgICBrZXlGb3VuZCA9IHRoaXMuZ2V0Rm9ySWQoa2V5aWRIZXgpO1xuXG4gICAgICAgICAgICBpZiAoIWtleUZvdW5kKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA5O1xuICAgICAgICAgICAgcmV0dXJuIGtleUZvdW5kLnVwZGF0ZShrZXkpO1xuXG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wdXNoKGtleSk7XG5cbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBpbXBvcnRlZC5lcnIgPyBpbXBvcnRlZC5lcnIgOiBudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIEFkZCBrZXkgdG8gS2V5QXJyYXlcbiAqIEBwYXJhbSB7bW9kdWxlOmtleS5LZXl9IGtleSBUaGUga2V5IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUga2V5cmluZ1xuICogQHJldHVybnMge051bWJlcn0gVGhlIG5ldyBsZW5ndGggb2YgdGhlIEtleUFycmF5XG4gKi9cbktleUFycmF5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gdGhpcy5rZXlzLnB1c2goa2V5KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGtleSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5aWQgZnJvbSB0aGUga2V5cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IGtleUlkIHByb3ZpZGVkIGFzIHN0cmluZyBvZiBsb3dlcmNhc2UgaGV4IG51bWJlclxuICogd2l0aG91dGggMHggcHJlZml4IChjYW4gYmUgMTYtY2hhcmFjdGVyIGtleSBJRCBvciBmaW5nZXJwcmludClcbiAqIEByZXR1cm5zIHttb2R1bGU6a2V5LktleXxudWxsfSBUaGUga2V5IG9iamVjdCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIG9yIG51bGxcbiAqL1xuS2V5QXJyYXkucHJvdG90eXBlLnJlbW92ZUZvcklkID0gZnVuY3Rpb24gKGtleUlkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGtleUlkQ2hlY2soa2V5SWQsIHRoaXMua2V5c1tpXS5wcmltYXJ5S2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMua2V5cy5zcGxpY2UoaSwgMSlbMF07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gS2V5cmluZztcblxufSx7XCIuLi9rZXlcIjozNjIsXCIuL2xvY2Fsc3RvcmVcIjozNjUsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzY1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zdHJpbmdpZnkgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnknKTtcblxudmFyIF9zdHJpbmdpZnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyaW5naWZ5KTtcblxudmFyIF9jb25maWcgPSBfZGVyZXFfKCcuLi9jb25maWcnKTtcblxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcblxudmFyIF9rZXkgPSBfZGVyZXFfKCcuLi9rZXknKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogVGhlIGNsYXNzIHRoYXQgZGVhbHMgd2l0aCBzdG9yYWdlIG9mIHRoZSBrZXlyaW5nLlxuICogQ3VycmVudGx5IHRoZSBvbmx5IG9wdGlvbiBpcyB0byB1c2UgSFRNTDUgbG9jYWwgc3RvcmFnZS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBwcmVmaXggZm9yIGl0ZW1uYW1lcyBpbiBsb2NhbHN0b3JlXG4gKi9cbmZ1bmN0aW9uIExvY2FsU3RvcmUocHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnb3BlbnBncC0nO1xuICB0aGlzLnB1YmxpY0tleXNJdGVtID0gcHJlZml4ICsgdGhpcy5wdWJsaWNLZXlzSXRlbTtcbiAgdGhpcy5wcml2YXRlS2V5c0l0ZW0gPSBwcmVmaXggKyB0aGlzLnByaXZhdGVLZXlzSXRlbTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICB0aGlzLnN0b3JhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RvcmFnZSA9IG5ldyAoX2RlcmVxXygnbm9kZS1sb2NhbHN0b3JhZ2UnKS5Mb2NhbFN0b3JhZ2UpKF9jb25maWcyLmRlZmF1bHQubm9kZV9zdG9yZSk7XG4gIH1cbn1cblxuLypcbiAqIERlY2xhcmUgdGhlIGxvY2Fsc3RvcmUgaXRlbW5hbWVzXG4gKi9cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBQcm92aWRlcyB0aGUgTG9jYWxTdG9yZSBjbGFzc1xuICogQHJlcXVpcmVzIGNvbmZpZ1xuICogQHJlcXVpcmVzIGtleVxuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUga2V5cmluZy9sb2NhbHN0b3JlXG4gKi9cblxuTG9jYWxTdG9yZS5wcm90b3R5cGUucHVibGljS2V5c0l0ZW0gPSAncHVibGljLWtleXMnO1xuTG9jYWxTdG9yZS5wcm90b3R5cGUucHJpdmF0ZUtleXNJdGVtID0gJ3ByaXZhdGUta2V5cyc7XG5cbi8qKlxuICogTG9hZCB0aGUgcHVibGljIGtleXMgZnJvbSBIVE1MNSBsb2NhbCBzdG9yYWdlLlxuICogQHJldHVybnMge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gYXJyYXkgb2Yga2V5cyByZXRyaWV2ZWQgZnJvbSBsb2NhbHN0b3JlXG4gKi9cbkxvY2FsU3RvcmUucHJvdG90eXBlLmxvYWRQdWJsaWMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBsb2FkS2V5cyh0aGlzLnN0b3JhZ2UsIHRoaXMucHVibGljS2V5c0l0ZW0pO1xufTtcblxuLyoqXG4gKiBMb2FkIHRoZSBwcml2YXRlIGtleXMgZnJvbSBIVE1MNSBsb2NhbCBzdG9yYWdlLlxuICogQHJldHVybnMge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0gYXJyYXkgb2Yga2V5cyByZXRyaWV2ZWQgZnJvbSBsb2NhbHN0b3JlXG4gKi9cbkxvY2FsU3RvcmUucHJvdG90eXBlLmxvYWRQcml2YXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbG9hZEtleXModGhpcy5zdG9yYWdlLCB0aGlzLnByaXZhdGVLZXlzSXRlbSk7XG59O1xuXG5mdW5jdGlvbiBsb2FkS2V5cyhzdG9yYWdlLCBpdGVtbmFtZSkge1xuICB2YXIgYXJtb3JlZEtleXMgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShpdGVtbmFtZSkpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAoYXJtb3JlZEtleXMgIT09IG51bGwgJiYgYXJtb3JlZEtleXMubGVuZ3RoICE9PSAwKSB7XG4gICAgdmFyIGtleSA9IHZvaWQgMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFybW9yZWRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSAoMCwgX2tleS5yZWFkQXJtb3JlZCkoYXJtb3JlZEtleXNbaV0pO1xuICAgICAgaWYgKCFrZXkuZXJyKSB7XG4gICAgICAgIGtleXMucHVzaChrZXkua2V5c1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdXRpbDIuZGVmYXVsdC5wcmludF9kZWJ1ZyhcIkVycm9yIHJlYWRpbmcgYXJtb3JlZCBrZXkgZnJvbSBrZXlyaW5nIGluZGV4OiBcIiArIGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cblxuLyoqXG4gKiBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHVibGljIGtleXMgdG8gSFRNTDUgbG9jYWwgc3RvcmFnZS5cbiAqIFRoZSBrZXkgYXJyYXkgZ2V0cyBzdHJpbmdpZmllZCB1c2luZyBKU09OXG4gKiBAcGFyYW0ge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0ga2V5cyBhcnJheSBvZiBrZXlzIHRvIHNhdmUgaW4gbG9jYWxzdG9yZVxuICovXG5Mb2NhbFN0b3JlLnByb3RvdHlwZS5zdG9yZVB1YmxpYyA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gIHN0b3JlS2V5cyh0aGlzLnN0b3JhZ2UsIHRoaXMucHVibGljS2V5c0l0ZW0sIGtleXMpO1xufTtcblxuLyoqXG4gKiBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJpdmF0ZSBrZXlzIHRvIEhUTUw1IGxvY2FsIHN0b3JhZ2UuXG4gKiBUaGUga2V5IGFycmF5IGdldHMgc3RyaW5naWZpZWQgdXNpbmcgSlNPTlxuICogQHBhcmFtIHtBcnJheTxtb2R1bGU6a2V5LktleT59IGtleXMgYXJyYXkgb2Yga2V5cyB0byBzYXZlIGluIGxvY2Fsc3RvcmVcbiAqL1xuTG9jYWxTdG9yZS5wcm90b3R5cGUuc3RvcmVQcml2YXRlID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgc3RvcmVLZXlzKHRoaXMuc3RvcmFnZSwgdGhpcy5wcml2YXRlS2V5c0l0ZW0sIGtleXMpO1xufTtcblxuZnVuY3Rpb24gc3RvcmVLZXlzKHN0b3JhZ2UsIGl0ZW1uYW1lLCBrZXlzKSB7XG4gIHZhciBhcm1vcmVkS2V5cyA9IFtdO1xuICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFybW9yZWRLZXlzLnB1c2goa2V5c1tpXS5hcm1vcigpKTtcbiAgICB9XG4gICAgc3RvcmFnZS5zZXRJdGVtKGl0ZW1uYW1lLCAoMCwgX3N0cmluZ2lmeTIuZGVmYXVsdCkoYXJtb3JlZEtleXMpKTtcbiAgfSBlbHNlIHtcbiAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IExvY2FsU3RvcmU7XG5cbn0se1wiLi4vY29uZmlnXCI6MzI1LFwiLi4va2V5XCI6MzYyLFwiLi4vdXRpbFwiOjM5OCxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeVwiOjIzLFwibm9kZS1sb2NhbHN0b3JhZ2VcIjpcIm5vZGUtbG9jYWxzdG9yYWdlXCJ9XSwzNjY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVWZXJpZmljYXRpb25PYmplY3RzID0gZXhwb3J0cy5jcmVhdGVTaWduYXR1cmVQYWNrZXRzID0gZXhwb3J0cy5lbmNyeXB0U2Vzc2lvbktleSA9IHVuZGVmaW5lZDtcblxudmFyIF9mcm9tID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20nKTtcblxudmFyIF9mcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zyb20pO1xuXG52YXIgX3Byb21pc2UgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfcmVnZW5lcmF0b3IgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yJyk7XG5cbnZhciBfcmVnZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3InKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jVG9HZW5lcmF0b3IyKTtcblxuLyoqXG4gKiBFbmNyeXB0IGEgc2Vzc2lvbiBrZXkgZWl0aGVyIHdpdGggcHVibGljIGtleXMsIHBhc3N3b3Jkcywgb3IgYm90aCBhdCBvbmNlLlxuICogQHBhcmFtICB7VWludDhBcnJheX0gc2Vzc2lvbktleSAgICAgc2Vzc2lvbiBrZXkgZm9yIGVuY3J5cHRpb25cbiAqIEBwYXJhbSAge1N0cmluZ30gc3ltQWxnbyAgICAgICAgICAgIHNlc3Npb24ga2V5IGFsZ29yaXRobVxuICogQHBhcmFtICB7U3RyaW5nfSBhZWFkQWxnbyAgICAgICAgICAgKG9wdGlvbmFsKSBhZWFkIGFsZ29yaXRobSwgZS5nLiAnZWF4JyBvciAnb2NiJ1xuICogQHBhcmFtICB7QXJyYXk8S2V5Pn0gcHVibGljS2V5cyAgICAgKG9wdGlvbmFsKSBwdWJsaWMga2V5KHMpIGZvciBtZXNzYWdlIGVuY3J5cHRpb25cbiAqIEBwYXJhbSAge0FycmF5PFN0cmluZz59IHBhc3N3b3JkcyAgIChvcHRpb25hbCkgZm9yIG1lc3NhZ2UgZW5jcnlwdGlvblxuICogQHBhcmFtICB7Qm9vbGVhbn0gd2lsZGNhcmQgICAgICAgICAgKG9wdGlvbmFsKSB1c2UgYSBrZXkgSUQgb2YgMCBpbnN0ZWFkIG9mIHRoZSBwdWJsaWMga2V5IElEc1xuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBvdmVycmlkZSB0aGUgZGF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSB1c2VySWQgICAgICAgICAgICAgKG9wdGlvbmFsKSB1c2VyIElEIHRvIGVuY3J5cHQgZm9yLCBlLmcuIHsgbmFtZTonUm9iZXJ0IFJlY2VpdmVyJywgZW1haWw6J3JvYmVydEBvcGVucGdwLm9yZycgfVxuICogQHJldHVybnMge1Byb21pc2U8TWVzc2FnZT59ICAgICAgICAgIG5ldyBtZXNzYWdlIHdpdGggZW5jcnlwdGVkIGNvbnRlbnRcbiAqIEBhc3luY1xuICovXG52YXIgZW5jcnlwdFNlc3Npb25LZXkgPSBleHBvcnRzLmVuY3J5cHRTZXNzaW9uS2V5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjggPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTExKHNlc3Npb25LZXksIHN5bUFsZ28sIGFlYWRBbGdvLCBwdWJsaWNLZXlzLCBwYXNzd29yZHMpIHtcbiAgICB2YXIgd2lsZGNhcmQgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IGZhbHNlO1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDYgJiYgYXJndW1lbnRzWzZdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNl0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciB1c2VySWQgPSBhcmd1bWVudHMubGVuZ3RoID4gNyAmJiBhcmd1bWVudHNbN10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s3XSA6IHt9O1xuXG4gICAgdmFyIHBhY2tldGxpc3QsIHJlc3VsdHMsIHRlc3REZWNyeXB0LCBzdW0sIGVuY3J5cHRQYXNzd29yZCwgX3Jlc3VsdHM7XG5cbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTExJChfY29udGV4dDExKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MTEucHJldiA9IF9jb250ZXh0MTEubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHBhY2tldGxpc3QgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG5cbiAgICAgICAgICAgIGlmICghcHVibGljS2V5cykge1xuICAgICAgICAgICAgICBfY29udGV4dDExLm5leHQgPSA2O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQxMS5uZXh0ID0gNDtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocHVibGljS2V5cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjkgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTgocHVibGljS2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRpb25LZXlQYWNrZXQsIHBrRVNLZXlQYWNrZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU4JChfY29udGV4dDgpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ4LnByZXYgPSBfY29udGV4dDgubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdWJsaWNLZXkuZ2V0RW5jcnlwdGlvbktleVBhY2tldCh1bmRlZmluZWQsIGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5UGFja2V0ID0gX2NvbnRleHQ4LnNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNyeXB0aW9uS2V5UGFja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdmFsaWQga2V5IHBhY2tldCBmb3IgZW5jcnlwdGlvbiBpbiBrZXkgJyArIHB1YmxpY0tleS5wcmltYXJ5S2V5LmdldEtleUlkKCkudG9IZXgoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBwa0VTS2V5UGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwa0VTS2V5UGFja2V0LnB1YmxpY0tleUlkID0gd2lsZGNhcmQgPyBfa2V5aWQyLmRlZmF1bHQud2lsZGNhcmQoKSA6IGVuY3J5cHRpb25LZXlQYWNrZXQuZ2V0S2V5SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrRVNLZXlQYWNrZXQucHVibGljS2V5QWxnb3JpdGhtID0gZW5jcnlwdGlvbktleVBhY2tldC5hbGdvcml0aG07XG4gICAgICAgICAgICAgICAgICAgICAgICBwa0VTS2V5UGFja2V0LnNlc3Npb25LZXkgPSBzZXNzaW9uS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGtFU0tleVBhY2tldC5zZXNzaW9uS2V5QWxnb3JpdGhtID0gc3ltQWxnbztcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGtFU0tleVBhY2tldC5lbmNyeXB0KGVuY3J5cHRpb25LZXlQYWNrZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwa0VTS2V5UGFja2V0LnNlc3Npb25LZXk7IC8vIGRlbGV0ZSBwbGFpbnRleHQgc2Vzc2lvbiBrZXkgYWZ0ZXIgZW5jcnlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OC5hYnJ1cHQoJ3JldHVybicsIHBrRVNLZXlQYWNrZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlOCwgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmVzdWx0cyA9IF9jb250ZXh0MTEuc2VudDtcblxuICAgICAgICAgICAgcGFja2V0bGlzdC5jb25jYXQocmVzdWx0cyk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAoIXBhc3N3b3Jkcykge1xuICAgICAgICAgICAgICBfY29udGV4dDExLm5leHQgPSAxNDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRlc3REZWNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjEwID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU5KGtleVBhY2tldCwgcGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTkkKF9jb250ZXh0OSkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDkucHJldiA9IF9jb250ZXh0OS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ5LnByZXYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ5Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleVBhY2tldC5kZWNyeXB0KHBhc3N3b3JkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDkuYWJydXB0KCdyZXR1cm4nLCAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0OS5wcmV2ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0OS50MCA9IF9jb250ZXh0OVsnY2F0Y2gnXSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDkuYWJydXB0KCdyZXR1cm4nLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OS5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlOSwgdGhpcywgW1swLCA2XV0pO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3REZWNyeXB0KF94MjUsIF94MjYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjEwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgIHN1bSA9IGZ1bmN0aW9uIHN1bShhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGVuY3J5cHRQYXNzd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWYxMSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMTAoc2Vzc2lvbktleSwgc3ltQWxnbywgYWVhZEFsZ28sIHBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN5bUVuY3J5cHRlZFNlc3Npb25LZXlQYWNrZXQsIF9yZXN1bHRzMjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMTAkKF9jb250ZXh0MTApIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQxMC5wcmV2ID0gX2NvbnRleHQxMC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3ltRW5jcnlwdGVkU2Vzc2lvbktleVBhY2tldCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0LlN5bUVuY3J5cHRlZFNlc3Npb25LZXkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3ltRW5jcnlwdGVkU2Vzc2lvbktleVBhY2tldC5zZXNzaW9uS2V5ID0gc2Vzc2lvbktleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bUVuY3J5cHRlZFNlc3Npb25LZXlQYWNrZXQuc2Vzc2lvbktleUFsZ29yaXRobSA9IHN5bUFsZ287XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWVhZEFsZ28pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltRW5jcnlwdGVkU2Vzc2lvbktleVBhY2tldC5hZWFkQWxnb3JpdGhtID0gYWVhZEFsZ287XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDEwLm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bUVuY3J5cHRlZFNlc3Npb25LZXlQYWNrZXQuZW5jcnlwdChwYXNzd29yZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb25maWcyLmRlZmF1bHQucGFzc3dvcmRfY29sbGlzaW9uX2NoZWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTAubmV4dCA9IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxMC5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocGFzc3dvcmRzLm1hcChmdW5jdGlvbiAocHdkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0RGVjcnlwdChzeW1FbmNyeXB0ZWRTZXNzaW9uS2V5UGFja2V0LCBwd2QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdHMyID0gX2NvbnRleHQxMC5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShfcmVzdWx0czIucmVkdWNlKHN1bSkgIT09IDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTAubmV4dCA9IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTAuYWJydXB0KCdyZXR1cm4nLCBlbmNyeXB0UGFzc3dvcmQoc2Vzc2lvbktleSwgc3ltQWxnbywgcGFzc3dvcmQpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzeW1FbmNyeXB0ZWRTZXNzaW9uS2V5UGFja2V0LnNlc3Npb25LZXk7IC8vIGRlbGV0ZSBwbGFpbnRleHQgc2Vzc2lvbiBrZXkgYWZ0ZXIgZW5jcnlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTAuYWJydXB0KCdyZXR1cm4nLCBzeW1FbmNyeXB0ZWRTZXNzaW9uS2V5UGFja2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDEwLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUxMCwgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZW5jcnlwdFBhc3N3b3JkKF94MjcsIF94MjgsIF94MjksIF94MzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjExLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDEyO1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LmFsbChwYXNzd29yZHMubWFwKGZ1bmN0aW9uIChwd2QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRQYXNzd29yZChzZXNzaW9uS2V5LCBzeW1BbGdvLCBhZWFkQWxnbywgcHdkKTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICBfcmVzdWx0cyA9IF9jb250ZXh0MTEuc2VudDtcblxuICAgICAgICAgICAgcGFja2V0bGlzdC5jb25jYXQoX3Jlc3VsdHMpO1xuXG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDExLmFicnVwdCgncmV0dXJuJywgbmV3IE1lc3NhZ2UocGFja2V0bGlzdCkpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTEuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTExLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBlbmNyeXB0U2Vzc2lvbktleShfeDE2LCBfeDE3LCBfeDE4LCBfeDE5LCBfeDIwKSB7XG4gICAgcmV0dXJuIF9yZWY4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogU2lnbiB0aGUgbWVzc2FnZSAodGhlIGxpdGVyYWwgZGF0YSBwYWNrZXQgb2YgdGhlIG1lc3NhZ2UpXG4gKiBAcGFyYW0gIHtBcnJheTxtb2R1bGU6a2V5LktleT59ICAgICAgICBwcml2YXRlS2V5cyBwcml2YXRlIGtleXMgd2l0aCBkZWNyeXB0ZWQgc2VjcmV0IGtleSBkYXRhIGZvciBzaWduaW5nXG4gKiBAcGFyYW0gIHtTaWduYXR1cmV9IHNpZ25hdHVyZSAgICAgICAgICAob3B0aW9uYWwpIGFueSBleGlzdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gYWRkIHRvIHRoZSBtZXNzYWdlXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlICAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIG92ZXJyaWRlIHRoZSBjcmVhdGlvbiB0aW1lIG9mIHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSAge09iamVjdH0gdXNlcklkICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlciBJRCB0byBzaWduIHdpdGgsIGUuZy4geyBuYW1lOidTdGV2ZSBTZW5kZXInLCBlbWFpbDonc3RldmVAb3BlbnBncC5vcmcnIH1cbiAqIEByZXR1cm5zIHtQcm9taXNlPE1lc3NhZ2U+fSAgICAgICAgICAgICBuZXcgbWVzc2FnZSB3aXRoIHNpZ25lZCBjb250ZW50XG4gKiBAYXN5bmNcbiAqL1xuXG5cbi8qKlxuICogQ3JlYXRlIHNpZ25hdHVyZSBwYWNrZXRzIGZvciB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7bW9kdWxlOnBhY2tldC5MaXRlcmFsfSAgICAgICAgICAgICBsaXRlcmFsRGF0YVBhY2tldCB0aGUgbGl0ZXJhbCBkYXRhIHBhY2tldCB0byBzaWduXG4gKiBAcGFyYW0gIHtBcnJheTxtb2R1bGU6a2V5LktleT59ICAgICAgICAgICAgIHByaXZhdGVLZXlzIHByaXZhdGUga2V5cyB3aXRoIGRlY3J5cHRlZCBzZWNyZXQga2V5IGRhdGEgZm9yIHNpZ25pbmdcbiAqIEBwYXJhbSAge1NpZ25hdHVyZX0gc2lnbmF0dXJlICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBhbnkgZXhpc3RpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvIGFwcGVuZFxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIG92ZXJyaWRlIHRoZSBjcmVhdGlvbnRpbWUgb2YgdGhlIHNpZ25hdHVyZVxuICogQHBhcmFtICB7T2JqZWN0fSB1c2VySWQgICAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIHVzZXIgSUQgdG8gc2lnbiB3aXRoLCBlLmcuIHsgbmFtZTonU3RldmUgU2VuZGVyJywgZW1haWw6J3N0ZXZlQG9wZW5wZ3Aub3JnJyB9XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxtb2R1bGU6cGFja2V0Lkxpc3Q+fSBsaXN0IG9mIHNpZ25hdHVyZSBwYWNrZXRzXG4gKiBAYXN5bmNcbiAqL1xudmFyIGNyZWF0ZVNpZ25hdHVyZVBhY2tldHMgPSBleHBvcnRzLmNyZWF0ZVNpZ25hdHVyZVBhY2tldHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMTUgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTE2KGxpdGVyYWxEYXRhUGFja2V0LCBwcml2YXRlS2V5cykge1xuICAgIHZhciBzaWduYXR1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG5ldyBEYXRlKCk7XG4gICAgdmFyIHVzZXJJZCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XG4gICAgdmFyIHBhY2tldGxpc3QsIHNpZ25hdHVyZVR5cGUsIGV4aXN0aW5nU2lnUGFja2V0bGlzdDtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTE2JChfY29udGV4dDE2KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MTYucHJldiA9IF9jb250ZXh0MTYubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHBhY2tldGxpc3QgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG5cbiAgICAgICAgICAgIC8vIElmIGRhdGEgcGFja2V0IHdhcyBjcmVhdGVkIGZyb20gVWludDhBcnJheSwgdXNlIGJpbmFyeSwgb3RoZXJ3aXNlIHVzZSB0ZXh0XG5cbiAgICAgICAgICAgIHNpZ25hdHVyZVR5cGUgPSBsaXRlcmFsRGF0YVBhY2tldC50ZXh0ID09PSBudWxsID8gX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5iaW5hcnkgOiBfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLnRleHQ7XG4gICAgICAgICAgICBfY29udGV4dDE2Lm5leHQgPSA0O1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LmFsbChwcml2YXRlS2V5cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjE2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNShwcml2YXRlS2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHNpZ25pbmdLZXlQYWNrZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxNSQoX2NvbnRleHQxNSkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDE1LnByZXYgPSBfY29udGV4dDE1Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVLZXkuaXNQdWJsaWMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE1Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIHByaXZhdGUga2V5IGZvciBzaWduaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE1Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaXZhdGVLZXkuZ2V0U2lnbmluZ0tleVBhY2tldCh1bmRlZmluZWQsIGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduaW5nS2V5UGFja2V0ID0gX2NvbnRleHQxNS5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmluZ0tleVBhY2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE1Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCB2YWxpZCBzaWduaW5nIGtleSBwYWNrZXQgaW4ga2V5ICcgKyBwcml2YXRlS2V5LnByaW1hcnlLZXkuZ2V0S2V5SWQoKS50b0hleCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDE1LmFicnVwdCgncmV0dXJuJywgKDAsIF9rZXkuY3JlYXRlU2lnbmF0dXJlUGFja2V0KShsaXRlcmFsRGF0YVBhY2tldCwgcHJpdmF0ZUtleSwgc2lnbmluZ0tleVBhY2tldCwgeyBzaWduYXR1cmVUeXBlOiBzaWduYXR1cmVUeXBlIH0sIGRhdGUsIHVzZXJJZCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNS5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMTUsIF90aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g0Nikge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpLnRoZW4oZnVuY3Rpb24gKHNpZ25hdHVyZUxpc3QpIHtcbiAgICAgICAgICAgICAgc2lnbmF0dXJlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYXR1cmVQYWNrZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFja2V0bGlzdC5wdXNoKHNpZ25hdHVyZVBhY2tldCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgZXhpc3RpbmdTaWdQYWNrZXRsaXN0ID0gc2lnbmF0dXJlLnBhY2tldHMuZmlsdGVyQnlUYWcoX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zaWduYXR1cmUpO1xuXG4gICAgICAgICAgICAgIHBhY2tldGxpc3QuY29uY2F0KGV4aXN0aW5nU2lnUGFja2V0bGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNi5hYnJ1cHQoJ3JldHVybicsIHBhY2tldGxpc3QpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMTYsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVNpZ25hdHVyZVBhY2tldHMoX3g0MSwgX3g0Mikge1xuICAgIHJldHVybiBfcmVmMTUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBWZXJpZnkgbWVzc2FnZSBzaWduYXR1cmVzXG4gKiBAcGFyYW0ge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0ga2V5cyBhcnJheSBvZiBrZXlzIHRvIHZlcmlmeSBzaWduYXR1cmVzXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgKG9wdGlvbmFsKSBWZXJpZnkgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBnaXZlbiBkYXRlLCBpLmUuIGNoZWNrIHNpZ25hdHVyZSBjcmVhdGlvbiB0aW1lIDwgZGF0ZSA8IGV4cGlyYXRpb24gdGltZVxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8KHtrZXlpZDogbW9kdWxlOnR5cGUva2V5aWQsIHZhbGlkOiBCb29sZWFufSk+Pn0gbGlzdCBvZiBzaWduZXIncyBrZXlpZCBhbmQgdmFsaWRpdHkgb2Ygc2lnbmF0dXJlXG4gKiBAYXN5bmNcbiAqL1xuXG5cbi8qKlxuICogQ3JlYXRlIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIHNpZ25lcidzIGtleWlkIGFuZCB2YWxpZGl0eSBvZiBzaWduYXR1cmVcbiAqIEBwYXJhbSB7QXJyYXk8bW9kdWxlOnBhY2tldC5TaWduYXR1cmU+fSBzaWduYXR1cmVMaXN0IGFycmF5IG9mIHNpZ25hdHVyZSBwYWNrZXRzXG4gKiBAcGFyYW0ge0FycmF5PG1vZHVsZTpwYWNrZXQuTGl0ZXJhbD59IGxpdGVyYWxEYXRhTGlzdCBhcnJheSBvZiBsaXRlcmFsIGRhdGEgcGFja2V0c1xuICogQHBhcmFtIHtBcnJheTxtb2R1bGU6a2V5LktleT59IGtleXMgYXJyYXkgb2Yga2V5cyB0byB2ZXJpZnkgc2lnbmF0dXJlc1xuICogQHBhcmFtIHtEYXRlfSBkYXRlIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIGdpdmVuIGRhdGUsXG4gKiAgICAgICAgICAgICAgICAgICAgaS5lLiBjaGVjayBzaWduYXR1cmUgY3JlYXRpb24gdGltZSA8IGRhdGUgPCBleHBpcmF0aW9uIHRpbWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PHtrZXlpZDogbW9kdWxlOnR5cGUva2V5aWQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IEJvb2xlYW59Pj59IGxpc3Qgb2Ygc2lnbmVyJ3Mga2V5aWQgYW5kIHZhbGlkaXR5IG9mIHNpZ25hdHVyZVxuICogQGFzeW5jXG4gKi9cbnZhciBjcmVhdGVWZXJpZmljYXRpb25PYmplY3RzID0gZXhwb3J0cy5jcmVhdGVWZXJpZmljYXRpb25PYmplY3RzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjE3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxOShzaWduYXR1cmVMaXN0LCBsaXRlcmFsRGF0YUxpc3QsIGtleXMpIHtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbmV3IERhdGUoKTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTE5JChfY29udGV4dDE5KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MTkucHJldiA9IF9jb250ZXh0MTkubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDE5LmFicnVwdCgncmV0dXJuJywgX3Byb21pc2UyLmRlZmF1bHQuYWxsKHNpZ25hdHVyZUxpc3QubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWYxOCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMTgoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleVBhY2tldCwgdmVyaWZpZWRTaWcsIHBhY2tldGxpc3Q7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxOCQoX2NvbnRleHQxOCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDE4LnByZXYgPSBfY29udGV4dDE4Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlQYWNrZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxOC5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoa2V5cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjE5ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMTckKF9jb250ZXh0MTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQxNy5wcmV2ID0gX2NvbnRleHQxNy5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuZ2V0U2lnbmluZ0tleVBhY2tldChzaWduYXR1cmUuaXNzdWVyS2V5SWQsIGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnRleHQxNy5zZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVBhY2tldCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTcuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTE3LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g1NCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxOC50MCA9IHNpZ25hdHVyZS5pc3N1ZXJLZXlJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlQYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxOC5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDE4Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS52ZXJpZnkoa2V5UGFja2V0LCBsaXRlcmFsRGF0YUxpc3RbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxOC50MSA9IF9jb250ZXh0MTguc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTgubmV4dCA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxOC50MSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxOC50MiA9IF9jb250ZXh0MTgudDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZFNpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5aWQ6IF9jb250ZXh0MTgudDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBfY29udGV4dDE4LnQyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0bGlzdCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0bGlzdC5wdXNoKHNpZ25hdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZFNpZy5zaWduYXR1cmUgPSBuZXcgX3NpZ25hdHVyZS5TaWduYXR1cmUocGFja2V0bGlzdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDE4LmFicnVwdCgncmV0dXJuJywgdmVyaWZpZWRTaWcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTguc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTE4LCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g1Mykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTkuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTE5LCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVWZXJpZmljYXRpb25PYmplY3RzKF94NDksIF94NTAsIF94NTEpIHtcbiAgICByZXR1cm4gX3JlZjE3LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVW53cmFwIGNvbXByZXNzZWQgbWVzc2FnZVxuICogQHJldHVybnMge21vZHVsZTptZXNzYWdlLk1lc3NhZ2V9IG1lc3NhZ2UgQ29udGVudCBvZiBjb21wcmVzc2VkIG1lc3NhZ2VcbiAqL1xuXG5cbmV4cG9ydHMuTWVzc2FnZSA9IE1lc3NhZ2U7XG5leHBvcnRzLnJlYWRBcm1vcmVkID0gcmVhZEFybW9yZWQ7XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZXhwb3J0cy5mcm9tVGV4dCA9IGZyb21UZXh0O1xuZXhwb3J0cy5mcm9tQmluYXJ5ID0gZnJvbUJpbmFyeTtcblxudmFyIF9hcm1vciA9IF9kZXJlcV8oJy4vZW5jb2RpbmcvYXJtb3InKTtcblxudmFyIF9hcm1vcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hcm1vcik7XG5cbnZhciBfa2V5aWQgPSBfZGVyZXFfKCcuL3R5cGUva2V5aWQnKTtcblxudmFyIF9rZXlpZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlpZCk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi9jb25maWcnKTtcblxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcblxudmFyIF9jcnlwdG8gPSBfZGVyZXFfKCcuL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxudmFyIF9wYWNrZXQgPSBfZGVyZXFfKCcuL3BhY2tldCcpO1xuXG52YXIgX3BhY2tldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYWNrZXQpO1xuXG52YXIgX3NpZ25hdHVyZSA9IF9kZXJlcV8oJy4vc2lnbmF0dXJlJyk7XG5cbnZhciBfa2V5ID0gX2RlcmVxXygnLi9rZXknKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBjbGFzc2Rlc2MgQ2xhc3MgdGhhdCByZXByZXNlbnRzIGFuIE9wZW5QR1AgbWVzc2FnZS5cbiAqIENhbiBiZSBhbiBlbmNyeXB0ZWQgbWVzc2FnZSwgc2lnbmVkIG1lc3NhZ2UsIGNvbXByZXNzZWQgbWVzc2FnZSBvciBsaXRlcmFsIG1lc3NhZ2VcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuTGlzdH0gcGFja2V0bGlzdCBUaGUgcGFja2V0cyB0aGF0IGZvcm0gdGhpcyBtZXNzYWdlXG4gKiBTZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tMTEuM31cbiAqL1xuXG5mdW5jdGlvbiBNZXNzYWdlKHBhY2tldGxpc3QpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlKHBhY2tldGxpc3QpO1xuICB9XG4gIHRoaXMucGFja2V0cyA9IHBhY2tldGxpc3QgfHwgbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGtleSBJRHMgb2YgdGhlIGtleXMgdG8gd2hpY2ggdGhlIHNlc3Npb24ga2V5IGlzIGVuY3J5cHRlZFxuICogQHJldHVybnMge0FycmF5PG1vZHVsZTp0eXBlL2tleWlkPn0gYXJyYXkgb2Yga2V5aWQgb2JqZWN0c1xuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyBlbmNvZGluZy9hcm1vclxuICogQHJlcXVpcmVzIHR5cGUva2V5aWRcbiAqIEByZXF1aXJlcyBjb25maWdcbiAqIEByZXF1aXJlcyBjcnlwdG9cbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQHJlcXVpcmVzIHV0aWxcbiAqIEByZXF1aXJlcyBwYWNrZXRcbiAqIEByZXF1aXJlcyBzaWduYXR1cmVcbiAqIEByZXF1aXJlcyBrZXlcbiAqIEBtb2R1bGUgbWVzc2FnZVxuICovXG5cbk1lc3NhZ2UucHJvdG90eXBlLmdldEVuY3J5cHRpb25LZXlJZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBrZXlJZHMgPSBbXTtcbiAgdmFyIHBrRVNLZXlQYWNrZXRsaXN0ID0gdGhpcy5wYWNrZXRzLmZpbHRlckJ5VGFnKF9lbnVtczIuZGVmYXVsdC5wYWNrZXQucHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleSk7XG4gIHBrRVNLZXlQYWNrZXRsaXN0LmZvckVhY2goZnVuY3Rpb24gKHBhY2tldCkge1xuICAgIGtleUlkcy5wdXNoKHBhY2tldC5wdWJsaWNLZXlJZCk7XG4gIH0pO1xuICByZXR1cm4ga2V5SWRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBrZXkgSURzIG9mIHRoZSBrZXlzIHRoYXQgc2lnbmVkIHRoZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7QXJyYXk8bW9kdWxlOnR5cGUva2V5aWQ+fSBhcnJheSBvZiBrZXlpZCBvYmplY3RzXG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLmdldFNpZ25pbmdLZXlJZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBrZXlJZHMgPSBbXTtcbiAgdmFyIG1zZyA9IHRoaXMudW53cmFwQ29tcHJlc3NlZCgpO1xuICAvLyBzZWFyY2ggZm9yIG9uZSBwYXNzIHNpZ25hdHVyZXNcbiAgdmFyIG9uZVBhc3NTaWdMaXN0ID0gbXNnLnBhY2tldHMuZmlsdGVyQnlUYWcoX2VudW1zMi5kZWZhdWx0LnBhY2tldC5vbmVQYXNzU2lnbmF0dXJlKTtcbiAgb25lUGFzc1NpZ0xpc3QuZm9yRWFjaChmdW5jdGlvbiAocGFja2V0KSB7XG4gICAga2V5SWRzLnB1c2gocGFja2V0LnNpZ25pbmdLZXlJZCk7XG4gIH0pO1xuICAvLyBpZiBub3RoaW5nIGZvdW5kIGxvb2sgZm9yIHNpZ25hdHVyZSBwYWNrZXRzXG4gIGlmICgha2V5SWRzLmxlbmd0aCkge1xuICAgIHZhciBzaWduYXR1cmVMaXN0ID0gbXNnLnBhY2tldHMuZmlsdGVyQnlUYWcoX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zaWduYXR1cmUpO1xuICAgIHNpZ25hdHVyZUxpc3QuZm9yRWFjaChmdW5jdGlvbiAocGFja2V0KSB7XG4gICAgICBrZXlJZHMucHVzaChwYWNrZXQuaXNzdWVyS2V5SWQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBrZXlJZHM7XG59O1xuXG4vKipcbiAqIERlY3J5cHQgdGhlIG1lc3NhZ2UuIEVpdGhlciBhIHByaXZhdGUga2V5LCBhIHNlc3Npb24ga2V5LCBvciBhIHBhc3N3b3JkIG11c3QgYmUgc3BlY2lmaWVkLlxuICogQHBhcmFtICB7QXJyYXk8S2V5Pn0gcHJpdmF0ZUtleXMgICAgIChvcHRpb25hbCkgcHJpdmF0ZSBrZXlzIHdpdGggZGVjcnlwdGVkIHNlY3JldCBkYXRhXG4gKiBAcGFyYW0gIHtBcnJheTxTdHJpbmc+fSBwYXNzd29yZHMgICAgKG9wdGlvbmFsKSBwYXNzd29yZHMgdXNlZCB0byBkZWNyeXB0XG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBzZXNzaW9uS2V5cyAgKG9wdGlvbmFsKSBzZXNzaW9uIGtleXMgaW4gdGhlIGZvcm06IHsgZGF0YTpVaW50OEFycmF5LCBhbGdvcml0aG06U3RyaW5nLCBbYWVhZEFsZ29yaXRobTpTdHJpbmddIH1cbiAqIEByZXR1cm5zIHtQcm9taXNlPE1lc3NhZ2U+fSAgICAgICAgICAgICBuZXcgbWVzc2FnZSB3aXRoIGRlY3J5cHRlZCBjb250ZW50XG4gKiBAYXN5bmNcbiAqL1xuTWVzc2FnZS5wcm90b3R5cGUuZGVjcnlwdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShwcml2YXRlS2V5cywgcGFzc3dvcmRzLCBzZXNzaW9uS2V5cykge1xuICAgIHZhciBrZXlPYmpzLCBzeW1FbmNyeXB0ZWRQYWNrZXRsaXN0LCBzeW1FbmNyeXB0ZWRQYWNrZXQsIGV4Y2VwdGlvbiwgaSwgcmVzdWx0TXNnO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0LnQwID0gc2Vzc2lvbktleXM7XG5cbiAgICAgICAgICAgIGlmIChfY29udGV4dC50MCkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdFNlc3Npb25LZXlzKHByaXZhdGVLZXlzLCBwYXNzd29yZHMpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAga2V5T2JqcyA9IF9jb250ZXh0LnQwO1xuICAgICAgICAgICAgc3ltRW5jcnlwdGVkUGFja2V0bGlzdCA9IHRoaXMucGFja2V0cy5maWx0ZXJCeVRhZyhfZW51bXMyLmRlZmF1bHQucGFja2V0LnN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQsIF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc3ltRW5jcnlwdGVkSW50ZWdyaXR5UHJvdGVjdGVkLCBfZW51bXMyLmRlZmF1bHQucGFja2V0LnN5bUVuY3J5cHRlZEFFQURQcm90ZWN0ZWQpO1xuXG4gICAgICAgICAgICBpZiAoIShzeW1FbmNyeXB0ZWRQYWNrZXRsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB0aGlzKTtcblxuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHN5bUVuY3J5cHRlZFBhY2tldCA9IHN5bUVuY3J5cHRlZFBhY2tldGxpc3RbMF07XG4gICAgICAgICAgICBleGNlcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgaWYgKCEoaSA8IGtleU9ianMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISgha2V5T2Jqc1tpXSB8fCAhX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KGtleU9ianNbaV0uZGF0YSkgfHwgIV91dGlsMi5kZWZhdWx0LmlzU3RyaW5nKGtleU9ianNbaV0uYWxnb3JpdGhtKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlc3Npb24ga2V5IGZvciBkZWNyeXB0aW9uLicpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxNTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxODtcbiAgICAgICAgICAgIHJldHVybiBzeW1FbmNyeXB0ZWRQYWNrZXQuZGVjcnlwdChrZXlPYmpzW2ldLmFsZ29yaXRobSwga2V5T2Jqc1tpXS5kYXRhKTtcblxuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdicmVhaycsIDI3KTtcblxuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gMjE7XG4gICAgICAgICAgICBfY29udGV4dC50MSA9IF9jb250ZXh0WydjYXRjaCddKDE1KTtcblxuICAgICAgICAgICAgZXhjZXB0aW9uID0gX2NvbnRleHQudDE7XG5cbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgaWYgKCEoIXN5bUVuY3J5cHRlZFBhY2tldC5wYWNrZXRzIHx8ICFzeW1FbmNyeXB0ZWRQYWNrZXQucGFja2V0cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyOTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbiB8fCBuZXcgRXJyb3IoJ0RlY3J5cHRpb24gZmFpbGVkLicpO1xuXG4gICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgIHJlc3VsdE1zZyA9IG5ldyBNZXNzYWdlKHN5bUVuY3J5cHRlZFBhY2tldC5wYWNrZXRzKTtcblxuICAgICAgICAgICAgc3ltRW5jcnlwdGVkUGFja2V0LnBhY2tldHMgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7IC8vIHJlbW92ZSBwYWNrZXRzIGFmdGVyIGRlY3J5cHRpb25cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgcmVzdWx0TXNnKTtcblxuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzLCBbWzE1LCAyMV1dKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gsIF94MiwgX3gzKSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBEZWNyeXB0IGVuY3J5cHRlZCBzZXNzaW9uIGtleXMgZWl0aGVyIHdpdGggcHJpdmF0ZSBrZXlzIG9yIHBhc3N3b3Jkcy5cbiAqIEBwYXJhbSAge0FycmF5PEtleT59IHByaXZhdGVLZXlzICAgIChvcHRpb25hbCkgcHJpdmF0ZSBrZXlzIHdpdGggZGVjcnlwdGVkIHNlY3JldCBkYXRhXG4gKiBAcGFyYW0gIHtBcnJheTxTdHJpbmc+fSBwYXNzd29yZHMgICAob3B0aW9uYWwpIHBhc3N3b3JkcyB1c2VkIHRvIGRlY3J5cHRcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PHsgZGF0YTogICAgICBVaW50OEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG06IFN0cmluZyB9Pj59IGFycmF5IG9mIG9iamVjdCB3aXRoIHBvdGVudGlhbCBzZXNzaW9uS2V5LCBhbGdvcml0aG0gcGFpcnNcbiAqIEBhc3luY1xuICovXG5NZXNzYWdlLnByb3RvdHlwZS5kZWNyeXB0U2Vzc2lvbktleXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNihwcml2YXRlS2V5cywgcGFzc3dvcmRzKSB7XG4gICAgdmFyIGtleVBhY2tldHMsIHN5bUVTS2V5UGFja2V0bGlzdCwgcGtFU0tleVBhY2tldGxpc3QsIHNlZW47XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU2JChfY29udGV4dDYpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ2LnByZXYgPSBfY29udGV4dDYubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGtleVBhY2tldHMgPSBbXTtcblxuICAgICAgICAgICAgaWYgKCFwYXNzd29yZHMpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3ltRVNLZXlQYWNrZXRsaXN0ID0gdGhpcy5wYWNrZXRzLmZpbHRlckJ5VGFnKF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc3ltRW5jcnlwdGVkU2Vzc2lvbktleSk7XG5cbiAgICAgICAgICAgIGlmIChzeW1FU0tleVBhY2tldGxpc3QpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzeW1tZXRyaWNhbGx5IGVuY3J5cHRlZCBzZXNzaW9uIGtleSBwYWNrZXQgZm91bmQuJyk7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDc7XG4gICAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQuYWxsKHN5bUVTS2V5UGFja2V0bGlzdC5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoa2V5UGFja2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocGFzc3dvcmRzLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5UGFja2V0LmRlY3J5cHQocGFzc3dvcmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5UGFja2V0cy5wdXNoKGtleVBhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9jb250ZXh0MlsnY2F0Y2gnXSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWdfZXJyb3IoX2NvbnRleHQyLnQwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMiwgdGhpcywgW1swLCA2XV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUzLCB0aGlzKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpKTtcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMTg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGlmICghcHJpdmF0ZUtleXMpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAxNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBrRVNLZXlQYWNrZXRsaXN0ID0gdGhpcy5wYWNrZXRzLmZpbHRlckJ5VGFnKF9lbnVtczIuZGVmYXVsdC5wYWNrZXQucHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleSk7XG5cbiAgICAgICAgICAgIGlmIChwa0VTS2V5UGFja2V0bGlzdCkge1xuICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDEzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwdWJsaWMga2V5IGVuY3J5cHRlZCBzZXNzaW9uIGtleSBwYWNrZXQgZm91bmQuJyk7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAxNTtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocGtFU0tleVBhY2tldGxpc3QubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIF9yZWY1ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU1KGtleVBhY2tldCkge1xuICAgICAgICAgICAgICAgIHZhciBwcml2YXRlS2V5UGFja2V0cztcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVLZXlQYWNrZXRzID0gcHJpdmF0ZUtleXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByaXZhdGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJpdmF0ZUtleS5nZXRLZXlQYWNrZXRzKGtleVBhY2tldC5wdWJsaWNLZXlJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwocHJpdmF0ZUtleVBhY2tldHMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY2ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KHByaXZhdGVLZXlQYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaXZhdGVLZXlQYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoJ3JldHVybicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaXZhdGVLZXlQYWNrZXQuaXNEZWNyeXB0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBpcyBub3QgZGVjcnlwdGVkLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleVBhY2tldC5kZWNyeXB0KHByaXZhdGVLZXlQYWNrZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5UGFja2V0cy5wdXNoKGtleVBhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0NC50MCA9IF9jb250ZXh0NFsnY2F0Y2gnXSg0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWdfZXJyb3IoX2NvbnRleHQ0LnQwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTQsIHRoaXMsIFtbNCwgMTBdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94OSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSgpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZTUsIHRoaXMpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKSkpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMTg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGtleSBvciBwYXNzd29yZCBzcGVjaWZpZWQuJyk7XG5cbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgaWYgKCFrZXlQYWNrZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDIxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmV0dXJuIG9ubHkgdW5pcXVlIHNlc3Npb24ga2V5c1xuICAgICAgICAgICAgaWYgKGtleVBhY2tldHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBzZWVuID0ge307XG5cbiAgICAgICAgICAgICAga2V5UGFja2V0cyA9IGtleVBhY2tldHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIGsgPSBpdGVtLnNlc3Npb25LZXlBbGdvcml0aG0gKyBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihpdGVtLnNlc3Npb25LZXkpO1xuICAgICAgICAgICAgICAgIGlmIChzZWVuLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlZW5ba10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5hYnJ1cHQoJ3JldHVybicsIGtleVBhY2tldHMubWFwKGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogcGFja2V0LnNlc3Npb25LZXksIGFsZ29yaXRobTogcGFja2V0LnNlc3Npb25LZXlBbGdvcml0aG0gfTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24ga2V5IGRlY3J5cHRpb24gZmFpbGVkLicpO1xuXG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNiwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94NCwgX3g1KSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogR2V0IGxpdGVyYWwgZGF0YSB0aGF0IGlzIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7KFVpbnQ4QXJyYXl8bnVsbCl9IGxpdGVyYWwgYm9keSBvZiB0aGUgbWVzc2FnZSBhcyBVaW50OEFycmF5XG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLmdldExpdGVyYWxEYXRhID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbGl0ZXJhbCA9IHRoaXMucGFja2V0cy5maW5kUGFja2V0KF9lbnVtczIuZGVmYXVsdC5wYWNrZXQubGl0ZXJhbCk7XG4gIHJldHVybiBsaXRlcmFsICYmIGxpdGVyYWwuZ2V0Qnl0ZXMoKSB8fCBudWxsO1xufTtcblxuLyoqXG4gKiBHZXQgZmlsZW5hbWUgZnJvbSBsaXRlcmFsIGRhdGEgcGFja2V0XG4gKiBAcmV0dXJucyB7KFN0cmluZ3xudWxsKX0gZmlsZW5hbWUgb2YgbGl0ZXJhbCBkYXRhIHBhY2tldCBhcyBzdHJpbmdcbiAqL1xuTWVzc2FnZS5wcm90b3R5cGUuZ2V0RmlsZW5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsaXRlcmFsID0gdGhpcy5wYWNrZXRzLmZpbmRQYWNrZXQoX2VudW1zMi5kZWZhdWx0LnBhY2tldC5saXRlcmFsKTtcbiAgcmV0dXJuIGxpdGVyYWwgJiYgbGl0ZXJhbC5nZXRGaWxlbmFtZSgpIHx8IG51bGw7XG59O1xuXG4vKipcbiAqIEdldCBsaXRlcmFsIGRhdGEgYXMgdGV4dFxuICogQHJldHVybnMgeyhTdHJpbmd8bnVsbCl9IGxpdGVyYWwgYm9keSBvZiB0aGUgbWVzc2FnZSBpbnRlcnByZXRlZCBhcyB0ZXh0XG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsaXRlcmFsID0gdGhpcy5wYWNrZXRzLmZpbmRQYWNrZXQoX2VudW1zMi5kZWZhdWx0LnBhY2tldC5saXRlcmFsKTtcbiAgaWYgKGxpdGVyYWwpIHtcbiAgICByZXR1cm4gbGl0ZXJhbC5nZXRUZXh0KCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgdGhlIG1lc3NhZ2UgZWl0aGVyIHdpdGggcHVibGljIGtleXMsIHBhc3N3b3Jkcywgb3IgYm90aCBhdCBvbmNlLlxuICogQHBhcmFtICB7QXJyYXk8S2V5Pn0ga2V5cyAgICAgICAgICAgKG9wdGlvbmFsKSBwdWJsaWMga2V5KHMpIGZvciBtZXNzYWdlIGVuY3J5cHRpb25cbiAqIEBwYXJhbSAge0FycmF5PFN0cmluZz59IHBhc3N3b3JkcyAgIChvcHRpb25hbCkgcGFzc3dvcmQocykgZm9yIG1lc3NhZ2UgZW5jcnlwdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSBzZXNzaW9uS2V5ICAgICAgICAgKG9wdGlvbmFsKSBzZXNzaW9uIGtleSBpbiB0aGUgZm9ybTogeyBkYXRhOlVpbnQ4QXJyYXksIGFsZ29yaXRobTpTdHJpbmcsIFthZWFkQWxnb3JpdGhtOlN0cmluZ10gfVxuICogQHBhcmFtICB7Qm9vbGVhbn0gd2lsZGNhcmQgICAgICAgICAgKG9wdGlvbmFsKSB1c2UgYSBrZXkgSUQgb2YgMCBpbnN0ZWFkIG9mIHRoZSBwdWJsaWMga2V5IElEc1xuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBvdmVycmlkZSB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgbGl0ZXJhbCBwYWNrYWdlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHVzZXJJZCAgICAgICAgICAgICAob3B0aW9uYWwpIHVzZXIgSUQgdG8gZW5jcnlwdCBmb3IsIGUuZy4geyBuYW1lOidSb2JlcnQgUmVjZWl2ZXInLCBlbWFpbDoncm9iZXJ0QG9wZW5wZ3Aub3JnJyB9XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPn0gICAgICAgICAgICAgICAgICAgbmV3IG1lc3NhZ2Ugd2l0aCBlbmNyeXB0ZWQgY29udGVudFxuICogQGFzeW5jXG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLmVuY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNyhrZXlzLCBwYXNzd29yZHMsIHNlc3Npb25LZXkpIHtcbiAgICB2YXIgd2lsZGNhcmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciB1c2VySWQgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuICAgIHZhciBzeW1BbGdvLCBhZWFkQWxnbywgc3ltRW5jcnlwdGVkUGFja2V0LCBtc2c7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU3JChfY29udGV4dDcpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHN5bUFsZ28gPSB2b2lkIDA7XG4gICAgICAgICAgICBhZWFkQWxnbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHN5bUVuY3J5cHRlZFBhY2tldCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKCFzZXNzaW9uS2V5KSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISghX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KHNlc3Npb25LZXkuZGF0YSkgfHwgIV91dGlsMi5kZWZhdWx0LmlzU3RyaW5nKHNlc3Npb25LZXkuYWxnb3JpdGhtKSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSA2O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlc3Npb24ga2V5IGZvciBlbmNyeXB0aW9uLicpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgc3ltQWxnbyA9IHNlc3Npb25LZXkuYWxnb3JpdGhtO1xuICAgICAgICAgICAgYWVhZEFsZ28gPSBzZXNzaW9uS2V5LmFlYWRBbGdvcml0aG07XG4gICAgICAgICAgICBzZXNzaW9uS2V5ID0gc2Vzc2lvbktleS5kYXRhO1xuICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGlmICghKGtleXMgJiYga2V5cy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMzI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDcudDAgPSBfZW51bXMyLmRlZmF1bHQ7XG4gICAgICAgICAgICBfY29udGV4dDcudDEgPSBfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljO1xuICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAxNjtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX2tleS5nZXRQcmVmZXJyZWRBbGdvKSgnc3ltbWV0cmljJywga2V5cywgZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICBfY29udGV4dDcudDIgPSBfY29udGV4dDcuc2VudDtcbiAgICAgICAgICAgIHN5bUFsZ28gPSBfY29udGV4dDcudDAucmVhZC5jYWxsKF9jb250ZXh0Ny50MCwgX2NvbnRleHQ3LnQxLCBfY29udGV4dDcudDIpO1xuICAgICAgICAgICAgX2NvbnRleHQ3LnQzID0gX2NvbmZpZzIuZGVmYXVsdC5hZWFkX3Byb3RlY3QgJiYgX2NvbmZpZzIuZGVmYXVsdC5hZWFkX3Byb3RlY3RfdmVyc2lvbiA9PT0gNDtcblxuICAgICAgICAgICAgaWYgKCFfY29udGV4dDcudDMpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAyMztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMjI7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9rZXkuaXNBZWFkU3VwcG9ydGVkKShrZXlzLCBkYXRlLCB1c2VySWQpO1xuXG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIF9jb250ZXh0Ny50MyA9IF9jb250ZXh0Ny5zZW50O1xuXG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIGlmICghX2NvbnRleHQ3LnQzKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMzA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDcudDQgPSBfZW51bXMyLmRlZmF1bHQ7XG4gICAgICAgICAgICBfY29udGV4dDcudDUgPSBfZW51bXMyLmRlZmF1bHQuYWVhZDtcbiAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMjg7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9rZXkuZ2V0UHJlZmVycmVkQWxnbykoJ2FlYWQnLCBrZXlzLCBkYXRlLCB1c2VySWQpO1xuXG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIF9jb250ZXh0Ny50NiA9IF9jb250ZXh0Ny5zZW50O1xuICAgICAgICAgICAgYWVhZEFsZ28gPSBfY29udGV4dDcudDQucmVhZC5jYWxsKF9jb250ZXh0Ny50NCwgX2NvbnRleHQ3LnQ1LCBfY29udGV4dDcudDYpO1xuXG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMzg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBpZiAoIShwYXNzd29yZHMgJiYgcGFzc3dvcmRzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAzNztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN5bUFsZ28gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLCBfY29uZmlnMi5kZWZhdWx0LmVuY3J5cHRpb25fY2lwaGVyKTtcbiAgICAgICAgICAgIGFlYWRBbGdvID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LmFlYWQsIF9jb25maWcyLmRlZmF1bHQuYWVhZF9tb2RlKTtcbiAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMzg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGtleXMsIHBhc3N3b3Jkcywgb3Igc2Vzc2lvbiBrZXkgcHJvdmlkZWQuJyk7XG5cbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgaWYgKHNlc3Npb25LZXkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSA0MjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gNDE7XG4gICAgICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5nZW5lcmF0ZVNlc3Npb25LZXkoc3ltQWxnbyk7XG5cbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgc2Vzc2lvbktleSA9IF9jb250ZXh0Ny5zZW50O1xuXG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gNDQ7XG4gICAgICAgICAgICByZXR1cm4gZW5jcnlwdFNlc3Npb25LZXkoc2Vzc2lvbktleSwgc3ltQWxnbywgYWVhZEFsZ28sIGtleXMsIHBhc3N3b3Jkcywgd2lsZGNhcmQsIGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgbXNnID0gX2NvbnRleHQ3LnNlbnQ7XG5cblxuICAgICAgICAgICAgaWYgKF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0ICYmIChfY29uZmlnMi5kZWZhdWx0LmFlYWRfcHJvdGVjdF92ZXJzaW9uICE9PSA0IHx8IGFlYWRBbGdvKSkge1xuICAgICAgICAgICAgICBzeW1FbmNyeXB0ZWRQYWNrZXQgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5TeW1FbmNyeXB0ZWRBRUFEUHJvdGVjdGVkKCk7XG4gICAgICAgICAgICAgIHN5bUVuY3J5cHRlZFBhY2tldC5hZWFkQWxnb3JpdGhtID0gYWVhZEFsZ287XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcyLmRlZmF1bHQuaW50ZWdyaXR5X3Byb3RlY3QpIHtcbiAgICAgICAgICAgICAgc3ltRW5jcnlwdGVkUGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuU3ltRW5jcnlwdGVkSW50ZWdyaXR5UHJvdGVjdGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1FbmNyeXB0ZWRQYWNrZXQgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5TeW1tZXRyaWNhbGx5RW5jcnlwdGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzeW1FbmNyeXB0ZWRQYWNrZXQucGFja2V0cyA9IHRoaXMucGFja2V0cztcblxuICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSA0OTtcbiAgICAgICAgICAgIHJldHVybiBzeW1FbmNyeXB0ZWRQYWNrZXQuZW5jcnlwdChzeW1BbGdvLCBzZXNzaW9uS2V5KTtcblxuICAgICAgICAgIGNhc2UgNDk6XG5cbiAgICAgICAgICAgIG1zZy5wYWNrZXRzLnB1c2goc3ltRW5jcnlwdGVkUGFja2V0KTtcbiAgICAgICAgICAgIHN5bUVuY3J5cHRlZFBhY2tldC5wYWNrZXRzID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpOyAvLyByZW1vdmUgcGFja2V0cyBhZnRlciBlbmNyeXB0aW9uXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgICAgIHNlc3Npb25LZXk6IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBzZXNzaW9uS2V5LFxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogc3ltQWxnbyxcbiAgICAgICAgICAgICAgICBhZWFkQWxnb3JpdGhtOiBhZWFkQWxnb1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTcsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDEwLCBfeDExLCBfeDEyKSB7XG4gICAgcmV0dXJuIF9yZWY3LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7TWVzc2FnZS5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYxMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMTMoKSB7XG4gICAgdmFyIHByaXZhdGVLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICB2YXIgc2lnbmF0dXJlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBuZXcgRGF0ZSgpO1xuICAgIHZhciB1c2VySWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgIHZhciBwYWNrZXRsaXN0LCBsaXRlcmFsRGF0YVBhY2tldCwgaSwgZXhpc3RpbmdTaWdQYWNrZXRsaXN0LCBzaWduYXR1cmVUeXBlLCBzaWduYXR1cmVQYWNrZXQsIG9uZVBhc3NTaWc7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxMyQoX2NvbnRleHQxMykge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDEzLnByZXYgPSBfY29udGV4dDEzLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBwYWNrZXRsaXN0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xuICAgICAgICAgICAgbGl0ZXJhbERhdGFQYWNrZXQgPSB0aGlzLnBhY2tldHMuZmluZFBhY2tldChfZW51bXMyLmRlZmF1bHQucGFja2V0LmxpdGVyYWwpO1xuXG4gICAgICAgICAgICBpZiAobGl0ZXJhbERhdGFQYWNrZXQpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQxMy5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbGl0ZXJhbCBkYXRhIHBhY2tldCB0byBzaWduLicpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgaSA9IHZvaWQgMDtcbiAgICAgICAgICAgIGV4aXN0aW5nU2lnUGFja2V0bGlzdCA9IHZvaWQgMDtcbiAgICAgICAgICAgIC8vIElmIGRhdGEgcGFja2V0IHdhcyBjcmVhdGVkIGZyb20gVWludDhBcnJheSwgdXNlIGJpbmFyeSwgb3RoZXJ3aXNlIHVzZSB0ZXh0XG5cbiAgICAgICAgICAgIHNpZ25hdHVyZVR5cGUgPSBsaXRlcmFsRGF0YVBhY2tldC50ZXh0ID09PSBudWxsID8gX2VudW1zMi5kZWZhdWx0LnNpZ25hdHVyZS5iaW5hcnkgOiBfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLnRleHQ7XG5cblxuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBleGlzdGluZ1NpZ1BhY2tldGxpc3QgPSBzaWduYXR1cmUucGFja2V0cy5maWx0ZXJCeVRhZyhfZW51bXMyLmRlZmF1bHQucGFja2V0LnNpZ25hdHVyZSk7XG4gICAgICAgICAgICAgIGZvciAoaSA9IGV4aXN0aW5nU2lnUGFja2V0bGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHNpZ25hdHVyZVBhY2tldCA9IGV4aXN0aW5nU2lnUGFja2V0bGlzdFtpXTtcbiAgICAgICAgICAgICAgICBvbmVQYXNzU2lnID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuT25lUGFzc1NpZ25hdHVyZSgpO1xuXG4gICAgICAgICAgICAgICAgb25lUGFzc1NpZy50eXBlID0gc2lnbmF0dXJlVHlwZTtcbiAgICAgICAgICAgICAgICBvbmVQYXNzU2lnLmhhc2hBbGdvcml0aG0gPSBzaWduYXR1cmVQYWNrZXQuaGFzaEFsZ29yaXRobTtcbiAgICAgICAgICAgICAgICBvbmVQYXNzU2lnLnB1YmxpY0tleUFsZ29yaXRobSA9IHNpZ25hdHVyZVBhY2tldC5wdWJsaWNLZXlBbGdvcml0aG07XG4gICAgICAgICAgICAgICAgb25lUGFzc1NpZy5zaWduaW5nS2V5SWQgPSBzaWduYXR1cmVQYWNrZXQuaXNzdWVyS2V5SWQ7XG4gICAgICAgICAgICAgICAgaWYgKCFwcml2YXRlS2V5cy5sZW5ndGggJiYgaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgb25lUGFzc1NpZy5mbGFncyA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhY2tldGxpc3QucHVzaChvbmVQYXNzU2lnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDEzLm5leHQgPSAxMDtcbiAgICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5hbGwoKDAsIF9mcm9tMi5kZWZhdWx0KShwcml2YXRlS2V5cykucmV2ZXJzZSgpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmMTMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTEyKHByaXZhdGVLZXksIGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2lnbmluZ0tleVBhY2tldCwgb25lUGFzc1NpZztcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTEyJChfY29udGV4dDEyKSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0MTIucHJldiA9IF9jb250ZXh0MTIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJpdmF0ZUtleS5pc1B1YmxpYygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTIubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZWQgcHJpdmF0ZSBrZXkgZm9yIHNpZ25pbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTIubmV4dCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpdmF0ZUtleS5nZXRTaWduaW5nS2V5UGFja2V0KHVuZGVmaW5lZCwgZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pbmdLZXlQYWNrZXQgPSBfY29udGV4dDEyLnNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWduaW5nS2V5UGFja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTIubmV4dCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHZhbGlkIGtleSBwYWNrZXQgZm9yIHNpZ25pbmcgaW4ga2V5ICcgKyBwcml2YXRlS2V5LnByaW1hcnlLZXkuZ2V0S2V5SWQoKS50b0hleCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZVBhc3NTaWcgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5PbmVQYXNzU2lnbmF0dXJlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZVBhc3NTaWcudHlwZSA9IHNpZ25hdHVyZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDEyLm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2tleS5nZXRQcmVmZXJyZWRIYXNoQWxnbykocHJpdmF0ZUtleSwgc2lnbmluZ0tleVBhY2tldCwgZGF0ZSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVQYXNzU2lnLmhhc2hBbGdvcml0aG0gPSBfY29udGV4dDEyLnNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZVBhc3NTaWcucHVibGljS2V5QWxnb3JpdGhtID0gc2lnbmluZ0tleVBhY2tldC5hbGdvcml0aG07XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVQYXNzU2lnLnNpZ25pbmdLZXlJZCA9IHNpZ25pbmdLZXlQYWNrZXQuZ2V0S2V5SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBwcml2YXRlS2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uZVBhc3NTaWcuZmxhZ3MgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTIuYWJydXB0KCdyZXR1cm4nLCBvbmVQYXNzU2lnKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDEyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUxMiwgdGhpcyk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MzUsIF94MzYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjEzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KCkpKS50aGVuKGZ1bmN0aW9uIChvbmVQYXNzU2lnbmF0dXJlTGlzdCkge1xuICAgICAgICAgICAgICBvbmVQYXNzU2lnbmF0dXJlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChvbmVQYXNzU2lnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldGxpc3QucHVzaChvbmVQYXNzU2lnKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgMTA6XG5cbiAgICAgICAgICAgIHBhY2tldGxpc3QucHVzaChsaXRlcmFsRGF0YVBhY2tldCk7XG4gICAgICAgICAgICBfY29udGV4dDEzLnQwID0gcGFja2V0bGlzdDtcbiAgICAgICAgICAgIF9jb250ZXh0MTMubmV4dCA9IDE0O1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNpZ25hdHVyZVBhY2tldHMobGl0ZXJhbERhdGFQYWNrZXQsIHByaXZhdGVLZXlzLCBzaWduYXR1cmUsIGRhdGUpO1xuXG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIF9jb250ZXh0MTMudDEgPSBfY29udGV4dDEzLnNlbnQ7XG5cbiAgICAgICAgICAgIF9jb250ZXh0MTMudDAuY29uY2F0LmNhbGwoX2NvbnRleHQxMy50MCwgX2NvbnRleHQxMy50MSk7XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDEzLmFicnVwdCgncmV0dXJuJywgbmV3IE1lc3NhZ2UocGFja2V0bGlzdCkpO1xuXG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTEzLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9yZWYxMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIENvbXByZXNzZXMgdGhlIG1lc3NhZ2UgKHRoZSBsaXRlcmFsIGFuZCAtaWYgc2lnbmVkLSBzaWduYXR1cmUgZGF0YSBwYWNrZXRzIG9mIHRoZSBtZXNzYWdlKVxuICogQHBhcmFtICB7bW9kdWxlOmVudW1zLmNvbXByZXNzaW9ufSAgIGNvbXByZXNzaW9uICAgICBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gYmUgdXNlZFxuICogQHJldHVybnMge21vZHVsZTptZXNzYWdlLk1lc3NhZ2V9ICAgICAgIG5ldyBtZXNzYWdlIHdpdGggY29tcHJlc3NlZCBjb250ZW50XG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLmNvbXByZXNzID0gZnVuY3Rpb24gKGNvbXByZXNzaW9uKSB7XG4gIGlmIChjb21wcmVzc2lvbiA9PT0gX2VudW1zMi5kZWZhdWx0LmNvbXByZXNzaW9uLnVuY29tcHJlc3NlZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGNvbXByZXNzZWQgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5Db21wcmVzc2VkKCk7XG4gIGNvbXByZXNzZWQucGFja2V0cyA9IHRoaXMucGFja2V0cztcbiAgY29tcHJlc3NlZC5hbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuY29tcHJlc3Npb24sIGNvbXByZXNzaW9uKTtcblxuICB2YXIgcGFja2V0TGlzdCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcbiAgcGFja2V0TGlzdC5wdXNoKGNvbXByZXNzZWQpO1xuXG4gIHJldHVybiBuZXcgTWVzc2FnZShwYWNrZXRMaXN0KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgZGV0YWNoZWQgc2lnbmF0dXJlIGZvciB0aGUgbWVzc2FnZSAodGhlIGxpdGVyYWwgZGF0YSBwYWNrZXQgb2YgdGhlIG1lc3NhZ2UpXG4gKiBAcGFyYW0gIHtBcnJheTxtb2R1bGU6a2V5LktleT59ICAgICAgICAgICAgICAgcHJpdmF0ZUtleXMgcHJpdmF0ZSBrZXlzIHdpdGggZGVjcnlwdGVkIHNlY3JldCBrZXkgZGF0YSBmb3Igc2lnbmluZ1xuICogQHBhcmFtICB7U2lnbmF0dXJlfSBzaWduYXR1cmUgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgYW55IGV4aXN0aW5nIGRldGFjaGVkIHNpZ25hdHVyZVxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgb3ZlcnJpZGUgdGhlIGNyZWF0aW9uIHRpbWUgb2YgdGhlIHNpZ25hdHVyZVxuICogQHBhcmFtICB7T2JqZWN0fSB1c2VySWQgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlciBJRCB0byBzaWduIHdpdGgsIGUuZy4geyBuYW1lOidTdGV2ZSBTZW5kZXInLCBlbWFpbDonc3RldmVAb3BlbnBncC5vcmcnIH1cbiAqIEByZXR1cm5zIHtQcm9taXNlPG1vZHVsZTpzaWduYXR1cmUuU2lnbmF0dXJlPn0gbmV3IGRldGFjaGVkIHNpZ25hdHVyZSBvZiBtZXNzYWdlIGNvbnRlbnRcbiAqIEBhc3luY1xuICovXG5NZXNzYWdlLnByb3RvdHlwZS5zaWduRGV0YWNoZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMTQgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTE0KCkge1xuICAgIHZhciBwcml2YXRlS2V5cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcbiAgICB2YXIgdXNlcklkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcbiAgICB2YXIgbGl0ZXJhbERhdGFQYWNrZXQ7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxNCQoX2NvbnRleHQxNCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDE0LnByZXYgPSBfY29udGV4dDE0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsaXRlcmFsRGF0YVBhY2tldCA9IHRoaXMucGFja2V0cy5maW5kUGFja2V0KF9lbnVtczIuZGVmYXVsdC5wYWNrZXQubGl0ZXJhbCk7XG5cbiAgICAgICAgICAgIGlmIChsaXRlcmFsRGF0YVBhY2tldCkge1xuICAgICAgICAgICAgICBfY29udGV4dDE0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBsaXRlcmFsIGRhdGEgcGFja2V0IHRvIHNpZ24uJyk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBfY29udGV4dDE0LnQwID0gX3NpZ25hdHVyZS5TaWduYXR1cmU7XG4gICAgICAgICAgICBfY29udGV4dDE0Lm5leHQgPSA2O1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNpZ25hdHVyZVBhY2tldHMobGl0ZXJhbERhdGFQYWNrZXQsIHByaXZhdGVLZXlzLCBzaWduYXR1cmUsIGRhdGUsIHVzZXJJZCk7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBfY29udGV4dDE0LnQxID0gX2NvbnRleHQxNC5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTQuYWJydXB0KCdyZXR1cm4nLCBuZXcgX2NvbnRleHQxNC50MChfY29udGV4dDE0LnQxKSk7XG5cbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDE0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUxNCwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVmMTQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtNZXNzYWdlLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiAoa2V5cykge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbmV3IERhdGUoKTtcblxuICB2YXIgbXNnID0gdGhpcy51bndyYXBDb21wcmVzc2VkKCk7XG4gIHZhciBsaXRlcmFsRGF0YUxpc3QgPSBtc2cucGFja2V0cy5maWx0ZXJCeVRhZyhfZW51bXMyLmRlZmF1bHQucGFja2V0LmxpdGVyYWwpO1xuICBpZiAobGl0ZXJhbERhdGFMaXN0Lmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgdmVyaWZ5IG1lc3NhZ2Ugd2l0aCBvbmUgbGl0ZXJhbCBkYXRhIHBhY2tldC4nKTtcbiAgfVxuICB2YXIgc2lnbmF0dXJlTGlzdCA9IG1zZy5wYWNrZXRzLmZpbHRlckJ5VGFnKF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc2lnbmF0dXJlKTtcbiAgcmV0dXJuIGNyZWF0ZVZlcmlmaWNhdGlvbk9iamVjdHMoc2lnbmF0dXJlTGlzdCwgbGl0ZXJhbERhdGFMaXN0LCBrZXlzLCBkYXRlKTtcbn07XG5cbi8qKlxuICogVmVyaWZ5IGRldGFjaGVkIG1lc3NhZ2Ugc2lnbmF0dXJlXG4gKiBAcGFyYW0ge0FycmF5PG1vZHVsZTprZXkuS2V5Pn0ga2V5cyBhcnJheSBvZiBrZXlzIHRvIHZlcmlmeSBzaWduYXR1cmVzXG4gKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgVmVyaWZ5IHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgZ2l2ZW4gZGF0ZSwgaS5lLiBjaGVjayBzaWduYXR1cmUgY3JlYXRpb24gdGltZSA8IGRhdGUgPCBleHBpcmF0aW9uIHRpbWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PCh7a2V5aWQ6IG1vZHVsZTp0eXBlL2tleWlkLCB2YWxpZDogQm9vbGVhbn0pPj59IGxpc3Qgb2Ygc2lnbmVyJ3Mga2V5aWQgYW5kIHZhbGlkaXR5IG9mIHNpZ25hdHVyZVxuICogQGFzeW5jXG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLnZlcmlmeURldGFjaGVkID0gZnVuY3Rpb24gKHNpZ25hdHVyZSwga2V5cykge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcblxuICB2YXIgbXNnID0gdGhpcy51bndyYXBDb21wcmVzc2VkKCk7XG4gIHZhciBsaXRlcmFsRGF0YUxpc3QgPSBtc2cucGFja2V0cy5maWx0ZXJCeVRhZyhfZW51bXMyLmRlZmF1bHQucGFja2V0LmxpdGVyYWwpO1xuICBpZiAobGl0ZXJhbERhdGFMaXN0Lmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgdmVyaWZ5IG1lc3NhZ2Ugd2l0aCBvbmUgbGl0ZXJhbCBkYXRhIHBhY2tldC4nKTtcbiAgfVxuICB2YXIgc2lnbmF0dXJlTGlzdCA9IHNpZ25hdHVyZS5wYWNrZXRzO1xuICByZXR1cm4gY3JlYXRlVmVyaWZpY2F0aW9uT2JqZWN0cyhzaWduYXR1cmVMaXN0LCBsaXRlcmFsRGF0YUxpc3QsIGtleXMsIGRhdGUpO1xufTtNZXNzYWdlLnByb3RvdHlwZS51bndyYXBDb21wcmVzc2VkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY29tcHJlc3NlZCA9IHRoaXMucGFja2V0cy5maWx0ZXJCeVRhZyhfZW51bXMyLmRlZmF1bHQucGFja2V0LmNvbXByZXNzZWQpO1xuICBpZiAoY29tcHJlc3NlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IE1lc3NhZ2UoY29tcHJlc3NlZFswXS5wYWNrZXRzKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kIHNpZ25hdHVyZSB0byB1bmVuY3J5cHRlZCBtZXNzYWdlIG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd8VWludDhBcnJheX0gZGV0YWNoZWRTaWduYXR1cmUgVGhlIGRldGFjaGVkIEFTQ0lJLWFybW9yZWQgb3IgVWludDhBcnJheSBQR1Agc2lnbmF0dXJlXG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLmFwcGVuZFNpZ25hdHVyZSA9IGZ1bmN0aW9uIChkZXRhY2hlZFNpZ25hdHVyZSkge1xuICB0aGlzLnBhY2tldHMucmVhZChfdXRpbDIuZGVmYXVsdC5pc1VpbnQ4QXJyYXkoZGV0YWNoZWRTaWduYXR1cmUpID8gZGV0YWNoZWRTaWduYXR1cmUgOiBfYXJtb3IyLmRlZmF1bHQuZGVjb2RlKGRldGFjaGVkU2lnbmF0dXJlKS5kYXRhKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBBU0NJSSBhcm1vcmVkIHRleHQgb2YgbWVzc2FnZVxuICogQHJldHVybnMge1N0cmluZ30gQVNDSUkgYXJtb3JcbiAqL1xuTWVzc2FnZS5wcm90b3R5cGUuYXJtb3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfYXJtb3IyLmRlZmF1bHQuZW5jb2RlKF9lbnVtczIuZGVmYXVsdC5hcm1vci5tZXNzYWdlLCB0aGlzLnBhY2tldHMud3JpdGUoKSk7XG59O1xuXG4vKipcbiAqIHJlYWRzIGFuIE9wZW5QR1AgYXJtb3JlZCBtZXNzYWdlIGFuZCByZXR1cm5zIGEgbWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcm1vcmVkVGV4dCB0ZXh0IHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge21vZHVsZTptZXNzYWdlLk1lc3NhZ2V9IG5ldyBtZXNzYWdlIG9iamVjdFxuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiByZWFkQXJtb3JlZChhcm1vcmVkVGV4dCkge1xuICAvL1RPRE8gaG93IGRvIHdlIHdhbnQgdG8gaGFuZGxlIGJhZCB0ZXh0PyBFeGNlcHRpb24gdGhyb3dpbmdcbiAgLy9UT0RPIGRvbid0IGFjY2VwdCBub24tbWVzc2FnZSBhcm1vcmVkIHRleHRzXG4gIHZhciBpbnB1dCA9IF9hcm1vcjIuZGVmYXVsdC5kZWNvZGUoYXJtb3JlZFRleHQpLmRhdGE7XG4gIHJldHVybiByZWFkKGlucHV0KTtcbn1cblxuLyoqXG4gKiByZWFkcyBhbiBPcGVuUEdQIG1lc3NhZ2UgYXMgYnl0ZSBhcnJheSBhbmQgcmV0dXJucyBhIG1lc3NhZ2Ugb2JqZWN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0ICAgYmluYXJ5IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtNZXNzYWdlfSAgICAgICAgICAgbmV3IG1lc3NhZ2Ugb2JqZWN0XG4gKiBAc3RhdGljXG4gKi9cbmZ1bmN0aW9uIHJlYWQoaW5wdXQpIHtcbiAgdmFyIHBhY2tldGxpc3QgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG4gIHBhY2tldGxpc3QucmVhZChpbnB1dCk7XG4gIHJldHVybiBuZXcgTWVzc2FnZShwYWNrZXRsaXN0KTtcbn1cblxuLyoqXG4gKiBjcmVhdGVzIG5ldyBtZXNzYWdlIG9iamVjdCBmcm9tIHRleHRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWUgKG9wdGlvbmFsKVxuICogQHBhcmFtIHtEYXRlfSBkYXRlIChvcHRpb25hbClcbiAqIEBwYXJhbSB7dXRmOHxiaW5hcnl8dGV4dHxtaW1lfSB0eXBlIChvcHRpb25hbCkgZGF0YSBwYWNrZXQgdHlwZVxuICogQHJldHVybnMge21vZHVsZTptZXNzYWdlLk1lc3NhZ2V9IG5ldyBtZXNzYWdlIG9iamVjdFxuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiBmcm9tVGV4dCh0ZXh0LCBmaWxlbmFtZSkge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcbiAgdmFyIHR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICd1dGY4JztcblxuICB2YXIgbGl0ZXJhbERhdGFQYWNrZXQgPSBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXRlcmFsKGRhdGUpO1xuICAvLyB0ZXh0IHdpbGwgYmUgY29udmVydGVkIHRvIFVURjhcbiAgbGl0ZXJhbERhdGFQYWNrZXQuc2V0VGV4dCh0ZXh0LCB0eXBlKTtcbiAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBsaXRlcmFsRGF0YVBhY2tldC5zZXRGaWxlbmFtZShmaWxlbmFtZSk7XG4gIH1cbiAgdmFyIGxpdGVyYWxEYXRhUGFja2V0bGlzdCA9IG5ldyBfcGFja2V0Mi5kZWZhdWx0Lkxpc3QoKTtcbiAgbGl0ZXJhbERhdGFQYWNrZXRsaXN0LnB1c2gobGl0ZXJhbERhdGFQYWNrZXQpO1xuICByZXR1cm4gbmV3IE1lc3NhZ2UobGl0ZXJhbERhdGFQYWNrZXRsaXN0KTtcbn1cblxuLyoqXG4gKiBjcmVhdGVzIG5ldyBtZXNzYWdlIG9iamVjdCBmcm9tIGJpbmFyeSBkYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWUgKG9wdGlvbmFsKVxuICogQHBhcmFtIHtEYXRlfSBkYXRlIChvcHRpb25hbClcbiAqIEBwYXJhbSB7dXRmOHxiaW5hcnl8dGV4dHxtaW1lfSB0eXBlIChvcHRpb25hbCkgZGF0YSBwYWNrZXQgdHlwZVxuICogQHJldHVybnMge21vZHVsZTptZXNzYWdlLk1lc3NhZ2V9IG5ldyBtZXNzYWdlIG9iamVjdFxuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiBmcm9tQmluYXJ5KGJ5dGVzLCBmaWxlbmFtZSkge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbmV3IERhdGUoKTtcbiAgdmFyIHR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICdiaW5hcnknO1xuXG4gIGlmICghX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KGJ5dGVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YSBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgVWludDhBcnJheScpO1xuICB9XG5cbiAgdmFyIGxpdGVyYWxEYXRhUGFja2V0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGl0ZXJhbChkYXRlKTtcbiAgbGl0ZXJhbERhdGFQYWNrZXQuc2V0Qnl0ZXMoYnl0ZXMsIHR5cGUpO1xuICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGxpdGVyYWxEYXRhUGFja2V0LnNldEZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgfVxuICB2YXIgbGl0ZXJhbERhdGFQYWNrZXRsaXN0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xuICBsaXRlcmFsRGF0YVBhY2tldGxpc3QucHVzaChsaXRlcmFsRGF0YVBhY2tldCk7XG4gIHJldHVybiBuZXcgTWVzc2FnZShsaXRlcmFsRGF0YVBhY2tldGxpc3QpO1xufVxuXG59LHtcIi4vY29uZmlnXCI6MzI1LFwiLi9jcnlwdG9cIjozNDAsXCIuL2VuY29kaW5nL2FybW9yXCI6MzU3LFwiLi9lbnVtc1wiOjM1OSxcIi4va2V5XCI6MzYyLFwiLi9wYWNrZXRcIjozNzEsXCIuL3NpZ25hdHVyZVwiOjM5MSxcIi4vdHlwZS9rZXlpZFwiOjM5NCxcIi4vdXRpbFwiOjM5OCxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tXCI6MjAsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZVwiOjMyLFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM2NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVnZW5lcmF0b3IgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yJyk7XG5cbnZhciBfcmVnZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3InKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzeW5jVG9HZW5lcmF0b3IyKTtcblxudmFyIF9wcm9taXNlID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG5leHBvcnRzLmluaXRXb3JrZXIgPSBpbml0V29ya2VyO1xuZXhwb3J0cy5nZXRXb3JrZXIgPSBnZXRXb3JrZXI7XG5leHBvcnRzLmRlc3Ryb3lXb3JrZXIgPSBkZXN0cm95V29ya2VyO1xuZXhwb3J0cy5nZW5lcmF0ZUtleSA9IGdlbmVyYXRlS2V5O1xuZXhwb3J0cy5yZWZvcm1hdEtleSA9IHJlZm9ybWF0S2V5O1xuZXhwb3J0cy5yZXZva2VLZXkgPSByZXZva2VLZXk7XG5leHBvcnRzLmRlY3J5cHRLZXkgPSBkZWNyeXB0S2V5O1xuZXhwb3J0cy5lbmNyeXB0S2V5ID0gZW5jcnlwdEtleTtcbmV4cG9ydHMuZW5jcnlwdCA9IGVuY3J5cHQ7XG5leHBvcnRzLmRlY3J5cHQgPSBkZWNyeXB0O1xuZXhwb3J0cy5zaWduID0gc2lnbjtcbmV4cG9ydHMudmVyaWZ5ID0gdmVyaWZ5O1xuZXhwb3J0cy5lbmNyeXB0U2Vzc2lvbktleSA9IGVuY3J5cHRTZXNzaW9uS2V5O1xuZXhwb3J0cy5kZWNyeXB0U2Vzc2lvbktleXMgPSBkZWNyeXB0U2Vzc2lvbktleXM7XG5cbnZhciBfbWVzc2FnZSA9IF9kZXJlcV8oJy4vbWVzc2FnZScpO1xuXG52YXIgbWVzc2FnZUxpYiA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9tZXNzYWdlKTtcblxudmFyIF9jbGVhcnRleHQgPSBfZGVyZXFfKCcuL2NsZWFydGV4dCcpO1xuXG52YXIgX2tleSA9IF9kZXJlcV8oJy4va2V5Jyk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi9jb25maWcvY29uZmlnJyk7XG5cbnZhciBfY29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZyk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX2FzeW5jX3Byb3h5ID0gX2RlcmVxXygnLi93b3JrZXIvYXN5bmNfcHJveHknKTtcblxudmFyIF9hc3luY19wcm94eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY19wcm94eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmouZGVmYXVsdCA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIE9sZCBicm93c2VyIHBvbHlmaWxsc1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIF9kZXJlcV8oJy4vcG9seWZpbGxzJyk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICBXZWIgV29ya2VyIHNldHVwICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNiBUYW5rcmVkIEhhc2Vcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIG9wZW5wZ3AgYmFzZSBtb2R1bGUgc2hvdWxkIHByb3ZpZGUgYWxsIG9mIHRoZSBmdW5jdGlvbmFsaXR5XG4gKiB0byBjb25zdW1lIHRoZSBvcGVucGdwLmpzIGxpYnJhcnkuIEFsbCBhZGRpdGlvbmFsIGNsYXNzZXMgYXJlIGRvY3VtZW50ZWRcbiAqIGZvciBleHRlbmRpbmcgYW5kIGRldmVsb3Bpbmcgb24gdG9wIG9mIHRoZSBiYXNlIGxpYnJhcnkuXG4gKiBAcmVxdWlyZXMgbWVzc2FnZVxuICogQHJlcXVpcmVzIGNsZWFydGV4dFxuICogQHJlcXVpcmVzIGtleVxuICogQHJlcXVpcmVzIGNvbmZpZ1xuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICogQHJlcXVpcmVzIHBvbHlmaWxsc1xuICogQHJlcXVpcmVzIHdvcmtlci9hc3luY19wcm94eVxuICogQG1vZHVsZSBvcGVucGdwXG4gKi9cblxuLy8gVGhpcyBmaWxlIGludGVudGlvbmFsbHkgaGFzIHR3byBzZXBhcmF0ZSBmaWxlIG92ZXJ2aWV3cyBzbyB0aGF0XG4vLyBhIHJlZmVyZW5jZSB0byB0aGlzIG1vZHVsZSBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgZG9jL2luZGV4Lmh0bWwuXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUbyB2aWV3IHRoZSBmdWxsIEFQSSBkb2N1bWVudGF0aW9uLCBzdGFydCBmcm9tXG4gKiB7QGxpbmsgbW9kdWxlOm9wZW5wZ3B9XG4gKi9cblxudmFyIGFzeW5jUHJveHkgPSB2b2lkIDA7IC8vIGluc3RhbmNlIG9mIHRoZSBhc3luY3Byb3h5XG5cbi8qKlxuICogU2V0IHRoZSBwYXRoIGZvciB0aGUgd2ViIHdvcmtlciBzY3JpcHQgYW5kIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYXN5bmMgcHJveHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoICAgICAgICAgICAgcmVsYXRpdmUgcGF0aCB0byB0aGUgd29ya2VyIHNjcmlwdHMsIGRlZmF1bHQ6ICdvcGVucGdwLndvcmtlci5qcydcbiAqIEBwYXJhbSB7TnVtYmVyfSBuICAgICAgICAgICAgICAgbnVtYmVyIG9mIHdvcmtlcnMgdG8gaW5pdGlhbGl6ZVxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSB3b3JrZXJzICBhbHRlcm5hdGl2ZSB0byBwYXRoIHBhcmFtZXRlcjogd2ViIHdvcmtlcnMgaW5pdGlhbGl6ZWQgd2l0aCAnb3BlbnBncC53b3JrZXIuanMnXG4gKi9cbmZ1bmN0aW9uIGluaXRXb3JrZXIoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYkcGF0aCA9IF9yZWYucGF0aCxcbiAgICAgIHBhdGggPSBfcmVmJHBhdGggPT09IHVuZGVmaW5lZCA/ICdvcGVucGdwLndvcmtlci5qcycgOiBfcmVmJHBhdGgsXG4gICAgICBfcmVmJG4gPSBfcmVmLm4sXG4gICAgICBuID0gX3JlZiRuID09PSB1bmRlZmluZWQgPyAxIDogX3JlZiRuLFxuICAgICAgX3JlZiR3b3JrZXJzID0gX3JlZi53b3JrZXJzLFxuICAgICAgd29ya2VycyA9IF9yZWYkd29ya2VycyA9PT0gdW5kZWZpbmVkID8gW10gOiBfcmVmJHdvcmtlcnM7XG5cbiAgaWYgKHdvcmtlcnMubGVuZ3RoIHx8IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5Xb3JrZXIpIHtcbiAgICBhc3luY1Byb3h5ID0gbmV3IF9hc3luY19wcm94eTIuZGVmYXVsdCh7IHBhdGg6IHBhdGgsIG46IG4sIHdvcmtlcnM6IHdvcmtlcnMsIGNvbmZpZzogX2NvbmZpZzIuZGVmYXVsdCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGFzeW5jIHByb3h5IGlmIHRoZSB3b3JrZXIgd2FzIGluaXRpYWxpemVkIHdpdGggb3BlbnBncC5pbml0V29ya2VyKClcbiAqIEByZXR1cm5zIHttb2R1bGU6d29ya2VyL2FzeW5jX3Byb3h5LkFzeW5jUHJveHl8bnVsbH0gdGhlIGFzeW5jIHByb3h5IG9yIG51bGwgaWYgbm90IGluaXRpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIGdldFdvcmtlcigpIHtcbiAgcmV0dXJuIGFzeW5jUHJveHk7XG59XG5cbi8qKlxuICogQ2xlYW51cCB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgd2ViIHdvcmtlci5cbiAqL1xuZnVuY3Rpb24gZGVzdHJveVdvcmtlcigpIHtcbiAgYXN5bmNQcm94eSA9IHVuZGVmaW5lZDtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAvL1xuLy8gICBLZXkgaGFuZGxpbmcgICAvL1xuLy8gICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IE9wZW5QR1Aga2V5IHBhaXIuIFN1cHBvcnRzIFJTQSBhbmQgRUNDIGtleXMuIFByaW1hcnkgYW5kIHN1YmtleSB3aWxsIGJlIG9mIHNhbWUgdHlwZS5cbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHVzZXJJZHMgICBhcnJheSBvZiB1c2VyIElEcyBlLmcuIFt7IG5hbWU6J1BoaWwgWmltbWVybWFubicsIGVtYWlsOidwaGlsQG9wZW5wZ3Aub3JnJyB9XVxuICogQHBhcmFtICB7U3RyaW5nfSBwYXNzcGhyYXNlICAgICAgIChvcHRpb25hbCkgVGhlIHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHRoZSByZXN1bHRpbmcgcHJpdmF0ZSBrZXlcbiAqIEBwYXJhbSAge051bWJlcn0gbnVtQml0cyAgICAgICAgICAob3B0aW9uYWwpIG51bWJlciBvZiBiaXRzIGZvciBSU0Ega2V5czogMjA0OCBvciA0MDk2LlxuICogQHBhcmFtICB7TnVtYmVyfSBrZXlFeHBpcmF0aW9uVGltZSAob3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB0aGUga2V5IGNyZWF0aW9uIHRpbWUgdGhhdCB0aGUga2V5IGV4cGlyZXNcbiAqIEBwYXJhbSAge1N0cmluZ30gY3VydmUgICAgICAgICAgICAob3B0aW9uYWwpIGVsbGlwdGljIGN1cnZlIGZvciBFQ0Mga2V5czpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlMjU1MTksIHAyNTYsIHAzODQsIHA1MjEsIHNlY3AyNTZrMSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWlucG9vbFAyNTZyMSwgYnJhaW5wb29sUDM4NHIxLCBvciBicmFpbnBvb2xQNTEycjEuXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBvdmVycmlkZSB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUga2V5IGFuZCB0aGUga2V5IHNpZ25hdHVyZXNcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHN1YmtleXMgICAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIGVhY2ggc3Via2V5LCBkZWZhdWx0IHRvIG1haW4ga2V5IG9wdGlvbnMuIGUuZy4gW3tzaWduOiB0cnVlLCBwYXNzcGhyYXNlOiAnMTIzJ31dXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduIHBhcmFtZXRlciBkZWZhdWx0cyB0byBmYWxzZSwgYW5kIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdWJrZXkgc2hvdWxkIHNpZ24gcmF0aGVyIHRoYW4gZW5jcnlwdFxuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gICAgICAgICBUaGUgZ2VuZXJhdGVkIGtleSBvYmplY3QgaW4gdGhlIGZvcm06XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtleTpLZXksIHByaXZhdGVLZXlBcm1vcmVkOlN0cmluZywgcHVibGljS2V5QXJtb3JlZDpTdHJpbmcsIHJldm9jYXRpb25DZXJ0aWZpY2F0ZTpTdHJpbmcgfVxuICogQGFzeW5jXG4gKiBAc3RhdGljXG4gKi9cblxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkoX3JlZjIpIHtcbiAgdmFyIF9yZWYyJHVzZXJJZHMgPSBfcmVmMi51c2VySWRzLFxuICAgICAgdXNlcklkcyA9IF9yZWYyJHVzZXJJZHMgPT09IHVuZGVmaW5lZCA/IFtdIDogX3JlZjIkdXNlcklkcyxcbiAgICAgIF9yZWYyJHBhc3NwaHJhc2UgPSBfcmVmMi5wYXNzcGhyYXNlLFxuICAgICAgcGFzc3BocmFzZSA9IF9yZWYyJHBhc3NwaHJhc2UgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfcmVmMiRwYXNzcGhyYXNlLFxuICAgICAgX3JlZjIkbnVtQml0cyA9IF9yZWYyLm51bUJpdHMsXG4gICAgICBudW1CaXRzID0gX3JlZjIkbnVtQml0cyA9PT0gdW5kZWZpbmVkID8gMjA0OCA6IF9yZWYyJG51bUJpdHMsXG4gICAgICBfcmVmMiRrZXlFeHBpcmF0aW9uVGkgPSBfcmVmMi5rZXlFeHBpcmF0aW9uVGltZSxcbiAgICAgIGtleUV4cGlyYXRpb25UaW1lID0gX3JlZjIka2V5RXhwaXJhdGlvblRpID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIka2V5RXhwaXJhdGlvblRpLFxuICAgICAgX3JlZjIkY3VydmUgPSBfcmVmMi5jdXJ2ZSxcbiAgICAgIGN1cnZlID0gX3JlZjIkY3VydmUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfcmVmMiRjdXJ2ZSxcbiAgICAgIF9yZWYyJGRhdGUgPSBfcmVmMi5kYXRlLFxuICAgICAgZGF0ZSA9IF9yZWYyJGRhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiBfcmVmMiRkYXRlLFxuICAgICAgX3JlZjIkc3Via2V5cyA9IF9yZWYyLnN1YmtleXMsXG4gICAgICBzdWJrZXlzID0gX3JlZjIkc3Via2V5cyA9PT0gdW5kZWZpbmVkID8gW3t9XSA6IF9yZWYyJHN1YmtleXM7XG5cbiAgdXNlcklkcyA9IHRvQXJyYXkodXNlcklkcyk7XG4gIHZhciBvcHRpb25zID0geyB1c2VySWRzOiB1c2VySWRzLCBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlLCBudW1CaXRzOiBudW1CaXRzLCBrZXlFeHBpcmF0aW9uVGltZToga2V5RXhwaXJhdGlvblRpbWUsIGN1cnZlOiBjdXJ2ZSwgZGF0ZTogZGF0ZSwgc3Via2V5czogc3Via2V5cyB9O1xuICBpZiAoX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvQWxsKCkgJiYgbnVtQml0cyA8IDIwNDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ251bUJpdHMgc2hvdWxkIGJlIDIwNDggb3IgNDA5NiwgZm91bmQ6ICcgKyBudW1CaXRzKTtcbiAgfVxuXG4gIGlmICghX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvQWxsKCkgJiYgYXN5bmNQcm94eSkge1xuICAgIC8vIHVzZSB3ZWIgd29ya2VyIGlmIHdlYiBjcnlwdG8gYXBpcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIHJldHVybiBhc3luY1Byb3h5LmRlbGVnYXRlKCdnZW5lcmF0ZUtleScsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfa2V5LmdlbmVyYXRlKShvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmV2b2NhdGlvbkNlcnRpZmljYXRlID0ga2V5LmdldFJldm9jYXRpb25DZXJ0aWZpY2F0ZSgpO1xuICAgIGtleS5yZXZvY2F0aW9uU2lnbmF0dXJlcyA9IFtdO1xuXG4gICAgcmV0dXJuIHtcblxuICAgICAga2V5OiBrZXksXG4gICAgICBwcml2YXRlS2V5QXJtb3JlZDoga2V5LmFybW9yKCksXG4gICAgICBwdWJsaWNLZXlBcm1vcmVkOiBrZXkudG9QdWJsaWMoKS5hcm1vcigpLFxuICAgICAgcmV2b2NhdGlvbkNlcnRpZmljYXRlOiByZXZvY2F0aW9uQ2VydGlmaWNhdGVcblxuICAgIH07XG4gIH0pLmNhdGNoKG9uRXJyb3IuYmluZChudWxsLCAnRXJyb3IgZ2VuZXJhdGluZyBrZXlwYWlyJykpO1xufVxuXG4vKipcbiAqIFJlZm9ybWF0cyBzaWduYXR1cmUgcGFja2V0cyBmb3IgYSBrZXkgYW5kIHJld3JhcHMga2V5IG9iamVjdC5cbiAqIEBwYXJhbSAge0tleX0gcHJpdmF0ZUtleSAgICAgICAgICBwcml2YXRlIGtleSB0byByZWZvcm1hdFxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gdXNlcklkcyAgIGFycmF5IG9mIHVzZXIgSURzIGUuZy4gW3sgbmFtZTonUGhpbCBaaW1tZXJtYW5uJywgZW1haWw6J3BoaWxAb3BlbnBncC5vcmcnIH1dXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhc3NwaHJhc2UgICAgICAgKG9wdGlvbmFsKSBUaGUgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgdGhlIHJlc3VsdGluZyBwcml2YXRlIGtleVxuICogQHBhcmFtICB7TnVtYmVyfSBrZXlFeHBpcmF0aW9uVGltZSAob3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB0aGUga2V5IGNyZWF0aW9uIHRpbWUgdGhhdCB0aGUga2V5IGV4cGlyZXNcbiAqIEBwYXJhbSAge0Jvb2xlYW59IHJldm9jYXRpb25DZXJ0aWZpY2F0ZSAob3B0aW9uYWwpIFdoZXRoZXIgdGhlIHJldHVybmVkIG9iamVjdCBzaG91bGQgaW5jbHVkZSBhIHJldm9jYXRpb24gY2VydGlmaWNhdGUgdG8gcmV2b2tlIHRoZSBwdWJsaWMga2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSAgICAgICAgIFRoZSBnZW5lcmF0ZWQga2V5IG9iamVjdCBpbiB0aGUgZm9ybTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OktleSwgcHJpdmF0ZUtleUFybW9yZWQ6U3RyaW5nLCBwdWJsaWNLZXlBcm1vcmVkOlN0cmluZywgcmV2b2NhdGlvbkNlcnRpZmljYXRlOlN0cmluZyB9XG4gKiBAYXN5bmNcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gcmVmb3JtYXRLZXkoX3JlZjMpIHtcbiAgdmFyIHByaXZhdGVLZXkgPSBfcmVmMy5wcml2YXRlS2V5LFxuICAgICAgX3JlZjMkdXNlcklkcyA9IF9yZWYzLnVzZXJJZHMsXG4gICAgICB1c2VySWRzID0gX3JlZjMkdXNlcklkcyA9PT0gdW5kZWZpbmVkID8gW10gOiBfcmVmMyR1c2VySWRzLFxuICAgICAgX3JlZjMkcGFzc3BocmFzZSA9IF9yZWYzLnBhc3NwaHJhc2UsXG4gICAgICBwYXNzcGhyYXNlID0gX3JlZjMkcGFzc3BocmFzZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9yZWYzJHBhc3NwaHJhc2UsXG4gICAgICBfcmVmMyRrZXlFeHBpcmF0aW9uVGkgPSBfcmVmMy5rZXlFeHBpcmF0aW9uVGltZSxcbiAgICAgIGtleUV4cGlyYXRpb25UaW1lID0gX3JlZjMka2V5RXhwaXJhdGlvblRpID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjMka2V5RXhwaXJhdGlvblRpLFxuICAgICAgZGF0ZSA9IF9yZWYzLmRhdGUsXG4gICAgICBfcmVmMyRyZXZvY2F0aW9uQ2VydGkgPSBfcmVmMy5yZXZvY2F0aW9uQ2VydGlmaWNhdGUsXG4gICAgICByZXZvY2F0aW9uQ2VydGlmaWNhdGUgPSBfcmVmMyRyZXZvY2F0aW9uQ2VydGkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmMyRyZXZvY2F0aW9uQ2VydGk7XG5cbiAgdXNlcklkcyA9IHRvQXJyYXkodXNlcklkcyk7XG4gIHZhciBvcHRpb25zID0geyBwcml2YXRlS2V5OiBwcml2YXRlS2V5LCB1c2VySWRzOiB1c2VySWRzLCBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlLCBrZXlFeHBpcmF0aW9uVGltZToga2V5RXhwaXJhdGlvblRpbWUsIGRhdGU6IGRhdGUsIHJldm9jYXRpb25DZXJ0aWZpY2F0ZTogcmV2b2NhdGlvbkNlcnRpZmljYXRlIH07XG4gIGlmIChhc3luY1Byb3h5KSB7XG4gICAgcmV0dXJuIGFzeW5jUHJveHkuZGVsZWdhdGUoJ3JlZm9ybWF0S2V5Jywgb3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zLnJldm9rZWQgPSBvcHRpb25zLnJldm9jYXRpb25DZXJ0aWZpY2F0ZTtcblxuICByZXR1cm4gKDAsIF9rZXkucmVmb3JtYXQpKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciByZXZvY2F0aW9uQ2VydGlmaWNhdGUgPSBrZXkuZ2V0UmV2b2NhdGlvbkNlcnRpZmljYXRlKCk7XG4gICAga2V5LnJldm9jYXRpb25TaWduYXR1cmVzID0gW107XG5cbiAgICByZXR1cm4ge1xuXG4gICAgICBrZXk6IGtleSxcbiAgICAgIHByaXZhdGVLZXlBcm1vcmVkOiBrZXkuYXJtb3IoKSxcbiAgICAgIHB1YmxpY0tleUFybW9yZWQ6IGtleS50b1B1YmxpYygpLmFybW9yKCksXG4gICAgICByZXZvY2F0aW9uQ2VydGlmaWNhdGU6IHJldm9jYXRpb25DZXJ0aWZpY2F0ZVxuXG4gICAgfTtcbiAgfSkuY2F0Y2gob25FcnJvci5iaW5kKG51bGwsICdFcnJvciByZWZvcm1hdHRpbmcga2V5cGFpcicpKTtcbn1cblxuLyoqXG4gKiBSZXZva2VzIGEga2V5LiBSZXF1aXJlcyBlaXRoZXIgYSBwcml2YXRlIGtleSBvciBhIHJldm9jYXRpb24gY2VydGlmaWNhdGUuXG4gKiAgIElmIGEgcmV2b2NhdGlvbiBjZXJ0aWZpY2F0ZSBpcyBwYXNzZWQsIHRoZSByZWFzb25Gb3JSZXZvY2F0aW9uIHBhcmFtZXRlcnMgd2lsbCBiZSBpZ25vcmVkLlxuICogQHBhcmFtICB7S2V5fSBrZXkgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgcHVibGljIG9yIHByaXZhdGUga2V5IHRvIHJldm9rZVxuICogQHBhcmFtICB7U3RyaW5nfSByZXZvY2F0aW9uQ2VydGlmaWNhdGUgKG9wdGlvbmFsKSByZXZvY2F0aW9uIGNlcnRpZmljYXRlIHRvIHJldm9rZSB0aGUga2V5IHdpdGhcbiAqIEBwYXJhbSAge09iamVjdH0gcmVhc29uRm9yUmV2b2NhdGlvbiAob3B0aW9uYWwpIG9iamVjdCBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIHJldm9jYXRpb25cbiAqIEBwYXJhbSAge21vZHVsZTplbnVtcy5yZWFzb25Gb3JSZXZvY2F0aW9ufSByZWFzb25Gb3JSZXZvY2F0aW9uLmZsYWcgKG9wdGlvbmFsKSBmbGFnIGluZGljYXRpbmcgdGhlIHJlYXNvbiBmb3IgcmV2b2NhdGlvblxuICogQHBhcmFtICB7U3RyaW5nfSByZWFzb25Gb3JSZXZvY2F0aW9uLnN0cmluZyAob3B0aW9uYWwpIHN0cmluZyBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHJldm9jYXRpb25cbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn0gICAgICAgICBUaGUgcmV2b2tlZCBrZXkgb2JqZWN0IGluIHRoZSBmb3JtOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcml2YXRlS2V5OktleSwgcHJpdmF0ZUtleUFybW9yZWQ6U3RyaW5nLCBwdWJsaWNLZXk6S2V5LCBwdWJsaWNLZXlBcm1vcmVkOlN0cmluZyB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgcHJpdmF0ZSBrZXkgaXMgcGFzc2VkKSBvciB7IHB1YmxpY0tleTpLZXksIHB1YmxpY0tleUFybW9yZWQ6U3RyaW5nIH0gKG90aGVyd2lzZSlcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gcmV2b2tlS2V5KCkge1xuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAga2V5ID0gX3JlZjQua2V5LFxuICAgICAgcmV2b2NhdGlvbkNlcnRpZmljYXRlID0gX3JlZjQucmV2b2NhdGlvbkNlcnRpZmljYXRlLFxuICAgICAgcmVhc29uRm9yUmV2b2NhdGlvbiA9IF9yZWY0LnJlYXNvbkZvclJldm9jYXRpb247XG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAga2V5OiBrZXksIHJldm9jYXRpb25DZXJ0aWZpY2F0ZTogcmV2b2NhdGlvbkNlcnRpZmljYXRlLCByZWFzb25Gb3JSZXZvY2F0aW9uOiByZWFzb25Gb3JSZXZvY2F0aW9uXG4gIH07XG5cbiAgaWYgKCFfdXRpbDIuZGVmYXVsdC5nZXRXZWJDcnlwdG9BbGwoKSAmJiBhc3luY1Byb3h5KSB7XG4gICAgLy8gdXNlIHdlYiB3b3JrZXIgaWYgd2ViIGNyeXB0byBhcGlzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgcmV0dXJuIGFzeW5jUHJveHkuZGVsZWdhdGUoJ3Jldm9rZUtleScsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocmV2b2NhdGlvbkNlcnRpZmljYXRlKSB7XG4gICAgICByZXR1cm4ga2V5LmFwcGx5UmV2b2NhdGlvbkNlcnRpZmljYXRlKHJldm9jYXRpb25DZXJ0aWZpY2F0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBrZXkucmV2b2tlKHJlYXNvbkZvclJldm9jYXRpb24pO1xuICAgIH1cbiAgfSkudGhlbihmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleS5pc1ByaXZhdGUoKSkge1xuICAgICAgdmFyIHB1YmxpY0tleSA9IGtleS50b1B1YmxpYygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJpdmF0ZUtleToga2V5LFxuICAgICAgICBwcml2YXRlS2V5QXJtb3JlZDoga2V5LmFybW9yKCksXG4gICAgICAgIHB1YmxpY0tleTogcHVibGljS2V5LFxuICAgICAgICBwdWJsaWNLZXlBcm1vcmVkOiBwdWJsaWNLZXkuYXJtb3IoKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY0tleToga2V5LFxuICAgICAgcHVibGljS2V5QXJtb3JlZDoga2V5LmFybW9yKClcbiAgICB9O1xuICB9KS5jYXRjaChvbkVycm9yLmJpbmQobnVsbCwgJ0Vycm9yIHJldm9raW5nIGtleScpKTtcbn1cblxuLyoqXG4gKiBVbmxvY2sgYSBwcml2YXRlIGtleSB3aXRoIHlvdXIgcGFzc3BocmFzZS5cbiAqIEBwYXJhbSAge0tleX0gcHJpdmF0ZUtleSAgICAgICAgICAgICAgICAgICAgdGhlIHByaXZhdGUga2V5IHRoYXQgaXMgdG8gYmUgZGVjcnlwdGVkXG4gKiBAcGFyYW0gIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gcGFzc3BocmFzZSAgIHRoZSB1c2VyJ3MgcGFzc3BocmFzZShzKSBjaG9zZW4gZHVyaW5nIGtleSBnZW5lcmF0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSAgICAgICAgICAgICAgICAgIHRoZSB1bmxvY2tlZCBrZXkgb2JqZWN0IGluIHRoZSBmb3JtOiB7IGtleTpLZXkgfVxuICogQGFzeW5jXG4gKi9cbmZ1bmN0aW9uIGRlY3J5cHRLZXkoX3JlZjUpIHtcbiAgdmFyIHByaXZhdGVLZXkgPSBfcmVmNS5wcml2YXRlS2V5LFxuICAgICAgcGFzc3BocmFzZSA9IF9yZWY1LnBhc3NwaHJhc2U7XG5cbiAgaWYgKGFzeW5jUHJveHkpIHtcbiAgICAvLyB1c2Ugd2ViIHdvcmtlciBpZiBhdmFpbGFibGVcbiAgICByZXR1cm4gYXN5bmNQcm94eS5kZWxlZ2F0ZSgnZGVjcnlwdEtleScsIHsgcHJpdmF0ZUtleTogcHJpdmF0ZUtleSwgcGFzc3BocmFzZTogcGFzc3BocmFzZSB9KTtcbiAgfVxuXG4gIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCkudGhlbigoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjtcbiAgICAgICAgICAgIHJldHVybiBwcml2YXRlS2V5LmRlY3J5cHQocGFzc3BocmFzZSk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB7XG4gICAgICAgICAgICAgIGtleTogcHJpdmF0ZUtleVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgfSkpKS5jYXRjaChvbkVycm9yLmJpbmQobnVsbCwgJ0Vycm9yIGRlY3J5cHRpbmcgcHJpdmF0ZSBrZXknKSk7XG59XG5cbi8qKlxuICogTG9jayBhIHByaXZhdGUga2V5IHdpdGggeW91ciBwYXNzcGhyYXNlLlxuICogQHBhcmFtICB7S2V5fSBwcml2YXRlS2V5ICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcml2YXRlIGtleSB0aGF0IGlzIHRvIGJlIGRlY3J5cHRlZFxuICogQHBhcmFtICB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhc3NwaHJhc2UgICAgIHRoZSB1c2VyJ3MgcGFzc3BocmFzZShzKSBjaG9zZW4gZHVyaW5nIGtleSBnZW5lcmF0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2tlZCBrZXkgb2JqZWN0IGluIHRoZSBmb3JtOiB7IGtleTpLZXkgfVxuICogQGFzeW5jXG4gKi9cbmZ1bmN0aW9uIGVuY3J5cHRLZXkoX3JlZjcpIHtcbiAgdmFyIHByaXZhdGVLZXkgPSBfcmVmNy5wcml2YXRlS2V5LFxuICAgICAgcGFzc3BocmFzZSA9IF9yZWY3LnBhc3NwaHJhc2U7XG5cbiAgaWYgKGFzeW5jUHJveHkpIHtcbiAgICAvLyB1c2Ugd2ViIHdvcmtlciBpZiBhdmFpbGFibGVcbiAgICByZXR1cm4gYXN5bmNQcm94eS5kZWxlZ2F0ZSgnZW5jcnlwdEtleScsIHsgcHJpdmF0ZUtleTogcHJpdmF0ZUtleSwgcGFzc3BocmFzZTogcGFzc3BocmFzZSB9KTtcbiAgfVxuXG4gIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCkudGhlbigoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjtcbiAgICAgICAgICAgIHJldHVybiBwcml2YXRlS2V5LmVuY3J5cHQocGFzc3BocmFzZSk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICBrZXk6IHByaXZhdGVLZXlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpKS5jYXRjaChvbkVycm9yLmJpbmQobnVsbCwgJ0Vycm9yIGRlY3J5cHRpbmcgcHJpdmF0ZSBrZXknKSk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgTWVzc2FnZSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIEVuY3J5cHRzIG1lc3NhZ2UgdGV4dC9kYXRhIHdpdGggcHVibGljIGtleXMsIHBhc3N3b3JkcyBvciBib3RoIGF0IG9uY2UuIEF0IGxlYXN0IGVpdGhlciBwdWJsaWMga2V5cyBvciBwYXNzd29yZHNcbiAqICAgbXVzdCBiZSBzcGVjaWZpZWQuIElmIHByaXZhdGUga2V5cyBhcmUgc3BlY2lmaWVkLCB0aG9zZSB3aWxsIGJlIHVzZWQgdG8gc2lnbiB0aGUgbWVzc2FnZS5cbiAqIEBwYXJhbSAge1N0cmluZ3xVaW50OEFycmF5fSBkYXRhICAgICAgICAgICAgICAgdGV4dC9kYXRhIHRvIGJlIGVuY3J5cHRlZCBhcyBKYXZhU2NyaXB0IGJpbmFyeSBzdHJpbmcgb3IgVWludDhBcnJheVxuICogQHBhcmFtICB7dXRmOHxiaW5hcnl8dGV4dHxtaW1lfSBkYXRhVHlwZSAgICAgICAob3B0aW9uYWwpIGRhdGEgcGFja2V0IHR5cGVcbiAqIEBwYXJhbSAge0tleXxBcnJheTxLZXk+fSBwdWJsaWNLZXlzICAgICAgICAgICAgKG9wdGlvbmFsKSBhcnJheSBvZiBrZXlzIG9yIHNpbmdsZSBrZXksIHVzZWQgdG8gZW5jcnlwdCB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7S2V5fEFycmF5PEtleT59IHByaXZhdGVLZXlzICAgICAgICAgICAob3B0aW9uYWwpIHByaXZhdGUga2V5cyBmb3Igc2lnbmluZy4gSWYgb21pdHRlZCBtZXNzYWdlIHdpbGwgbm90IGJlIHNpZ25lZFxuICogQHBhcmFtICB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhc3N3b3JkcyAgICAgICAob3B0aW9uYWwpIGFycmF5IG9mIHBhc3N3b3JkcyBvciBhIHNpbmdsZSBwYXNzd29yZCB0byBlbmNyeXB0IHRoZSBtZXNzYWdlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHNlc3Npb25LZXkgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgc2Vzc2lvbiBrZXkgaW4gdGhlIGZvcm06IHsgZGF0YTpVaW50OEFycmF5LCBhbGdvcml0aG06U3RyaW5nIH1cbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZW5hbWUgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBhIGZpbGVuYW1lIGZvciB0aGUgbGl0ZXJhbCBkYXRhIHBhY2tldFxuICogQHBhcmFtICB7bW9kdWxlOmVudW1zLmNvbXByZXNzaW9ufSBjb21wcmVzc2lvbiAob3B0aW9uYWwpIHdoaWNoIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byBjb21wcmVzcyB0aGUgbWVzc2FnZSB3aXRoLCBkZWZhdWx0cyB0byB3aGF0IGlzIHNwZWNpZmllZCBpbiBjb25maWdcbiAqIEBwYXJhbSAge0Jvb2xlYW59IGFybW9yICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBpZiB0aGUgcmV0dXJuIHZhbHVlcyBzaG91bGQgYmUgYXNjaWkgYXJtb3JlZCBvciB0aGUgbWVzc2FnZS9zaWduYXR1cmUgb2JqZWN0c1xuICogQHBhcmFtICB7Qm9vbGVhbn0gZGV0YWNoZWQgICAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIGlmIHRoZSBzaWduYXR1cmUgc2hvdWxkIGJlIGRldGFjaGVkIChpZiB0cnVlLCBzaWduYXR1cmUgd2lsbCBiZSBhZGRlZCB0byByZXR1cm5lZCBvYmplY3QpXG4gKiBAcGFyYW0gIHtTaWduYXR1cmV9IHNpZ25hdHVyZSAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgYSBkZXRhY2hlZCBzaWduYXR1cmUgdG8gYWRkIHRvIHRoZSBlbmNyeXB0ZWQgbWVzc2FnZVxuICogQHBhcmFtICB7Qm9vbGVhbn0gcmV0dXJuU2Vzc2lvbktleSAgICAgICAgICAgICAob3B0aW9uYWwpIGlmIHRoZSB1bmVuY3J5cHRlZCBzZXNzaW9uIGtleSBzaG91bGQgYmUgYWRkZWQgdG8gcmV0dXJuZWQgb2JqZWN0XG4gKiBAcGFyYW0gIHtCb29sZWFufSB3aWxkY2FyZCAgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlIGEga2V5IElEIG9mIDAgaW5zdGVhZCBvZiB0aGUgcHVibGljIGtleSBJRHNcbiAqIEBwYXJhbSAge0RhdGV9IGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBvdmVycmlkZSB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgbWVzc2FnZSBhbmQgdGhlIG1lc3NhZ2Ugc2lnbmF0dXJlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGZyb21Vc2VySWQgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlciBJRCB0byBzaWduIHdpdGgsIGUuZy4geyBuYW1lOidTdGV2ZSBTZW5kZXInLCBlbWFpbDonc3RldmVAb3BlbnBncC5vcmcnIH1cbiAqIEBwYXJhbSAge09iamVjdH0gdG9Vc2VySWQgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSB1c2VyIElEIHRvIGVuY3J5cHQgZm9yLCBlLmcuIHsgbmFtZTonUm9iZXJ0IFJlY2VpdmVyJywgZW1haWw6J3JvYmVydEBvcGVucGdwLm9yZycgfVxuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGVkIChhbmQgb3B0aW9uYWxseSBzaWduZWQgbWVzc2FnZSkgaW4gdGhlIGZvcm06XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGE6IEFTQ0lJIGFybW9yZWQgbWVzc2FnZSBpZiAnYXJtb3InIGlzIHRydWUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZnVsbCBNZXNzYWdlIG9iamVjdCBpZiAnYXJtb3InIGlzIGZhbHNlLCBzaWduYXR1cmU6IGRldGFjaGVkIHNpZ25hdHVyZSBpZiAnZGV0YWNoZWQnIGlzIHRydWV9XG4gKiBAYXN5bmNcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gZW5jcnlwdChfcmVmOSkge1xuICB2YXIgZGF0YSA9IF9yZWY5LmRhdGEsXG4gICAgICBkYXRhVHlwZSA9IF9yZWY5LmRhdGFUeXBlLFxuICAgICAgcHVibGljS2V5cyA9IF9yZWY5LnB1YmxpY0tleXMsXG4gICAgICBwcml2YXRlS2V5cyA9IF9yZWY5LnByaXZhdGVLZXlzLFxuICAgICAgcGFzc3dvcmRzID0gX3JlZjkucGFzc3dvcmRzLFxuICAgICAgc2Vzc2lvbktleSA9IF9yZWY5LnNlc3Npb25LZXksXG4gICAgICBmaWxlbmFtZSA9IF9yZWY5LmZpbGVuYW1lLFxuICAgICAgX3JlZjkkY29tcHJlc3Npb24gPSBfcmVmOS5jb21wcmVzc2lvbixcbiAgICAgIGNvbXByZXNzaW9uID0gX3JlZjkkY29tcHJlc3Npb24gPT09IHVuZGVmaW5lZCA/IF9jb25maWcyLmRlZmF1bHQuY29tcHJlc3Npb24gOiBfcmVmOSRjb21wcmVzc2lvbixcbiAgICAgIF9yZWY5JGFybW9yID0gX3JlZjkuYXJtb3IsXG4gICAgICBhcm1vciA9IF9yZWY5JGFybW9yID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjkkYXJtb3IsXG4gICAgICBfcmVmOSRkZXRhY2hlZCA9IF9yZWY5LmRldGFjaGVkLFxuICAgICAgZGV0YWNoZWQgPSBfcmVmOSRkZXRhY2hlZCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmOSRkZXRhY2hlZCxcbiAgICAgIF9yZWY5JHNpZ25hdHVyZSA9IF9yZWY5LnNpZ25hdHVyZSxcbiAgICAgIHNpZ25hdHVyZSA9IF9yZWY5JHNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IF9yZWY5JHNpZ25hdHVyZSxcbiAgICAgIF9yZWY5JHJldHVyblNlc3Npb25LZSA9IF9yZWY5LnJldHVyblNlc3Npb25LZXksXG4gICAgICByZXR1cm5TZXNzaW9uS2V5ID0gX3JlZjkkcmV0dXJuU2Vzc2lvbktlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWY5JHJldHVyblNlc3Npb25LZSxcbiAgICAgIF9yZWY5JHdpbGRjYXJkID0gX3JlZjkud2lsZGNhcmQsXG4gICAgICB3aWxkY2FyZCA9IF9yZWY5JHdpbGRjYXJkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWY5JHdpbGRjYXJkLFxuICAgICAgX3JlZjkkZGF0ZSA9IF9yZWY5LmRhdGUsXG4gICAgICBkYXRlID0gX3JlZjkkZGF0ZSA9PT0gdW5kZWZpbmVkID8gbmV3IERhdGUoKSA6IF9yZWY5JGRhdGUsXG4gICAgICBfcmVmOSRmcm9tVXNlcklkID0gX3JlZjkuZnJvbVVzZXJJZCxcbiAgICAgIGZyb21Vc2VySWQgPSBfcmVmOSRmcm9tVXNlcklkID09PSB1bmRlZmluZWQgPyB7fSA6IF9yZWY5JGZyb21Vc2VySWQsXG4gICAgICBfcmVmOSR0b1VzZXJJZCA9IF9yZWY5LnRvVXNlcklkLFxuICAgICAgdG9Vc2VySWQgPSBfcmVmOSR0b1VzZXJJZCA9PT0gdW5kZWZpbmVkID8ge30gOiBfcmVmOSR0b1VzZXJJZDtcblxuICBjaGVja0RhdGEoZGF0YSk7cHVibGljS2V5cyA9IHRvQXJyYXkocHVibGljS2V5cyk7cHJpdmF0ZUtleXMgPSB0b0FycmF5KHByaXZhdGVLZXlzKTtwYXNzd29yZHMgPSB0b0FycmF5KHBhc3N3b3Jkcyk7XG5cbiAgaWYgKCFuYXRpdmVBRUFEKCkgJiYgYXN5bmNQcm94eSkge1xuICAgIC8vIHVzZSB3ZWIgd29ya2VyIGlmIHdlYiBjcnlwdG8gYXBpcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIHJldHVybiBhc3luY1Byb3h5LmRlbGVnYXRlKCdlbmNyeXB0JywgeyBkYXRhOiBkYXRhLCBkYXRhVHlwZTogZGF0YVR5cGUsIHB1YmxpY0tleXM6IHB1YmxpY0tleXMsIHByaXZhdGVLZXlzOiBwcml2YXRlS2V5cywgcGFzc3dvcmRzOiBwYXNzd29yZHMsIHNlc3Npb25LZXk6IHNlc3Npb25LZXksIGZpbGVuYW1lOiBmaWxlbmFtZSwgY29tcHJlc3Npb246IGNvbXByZXNzaW9uLCBhcm1vcjogYXJtb3IsIGRldGFjaGVkOiBkZXRhY2hlZCwgc2lnbmF0dXJlOiBzaWduYXR1cmUsIHJldHVyblNlc3Npb25LZXk6IHJldHVyblNlc3Npb25LZXksIHdpbGRjYXJkOiB3aWxkY2FyZCwgZGF0ZTogZGF0ZSwgZnJvbVVzZXJJZDogZnJvbVVzZXJJZCwgdG9Vc2VySWQ6IHRvVXNlcklkIH0pO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUoKS50aGVuKCgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMygpIHtcbiAgICB2YXIgbWVzc2FnZSwgZGV0YWNoZWRTaWduYXR1cmU7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBjcmVhdGVNZXNzYWdlKGRhdGEsIGZpbGVuYW1lLCBkYXRlLCBkYXRhVHlwZSk7XG5cbiAgICAgICAgICAgIGlmICghcHJpdmF0ZUtleXMpIHtcbiAgICAgICAgICAgICAgcHJpdmF0ZUtleXMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEocHJpdmF0ZUtleXMubGVuZ3RoIHx8IHNpZ25hdHVyZSkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZGV0YWNoZWQpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNjtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlLnNpZ25EZXRhY2hlZChwcml2YXRlS2V5cywgc2lnbmF0dXJlLCBkYXRlLCBmcm9tVXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGRldGFjaGVkU2lnbmF0dXJlID0gX2NvbnRleHQzLnNlbnQ7XG5cbiAgICAgICAgICAgIHJlc3VsdC5zaWduYXR1cmUgPSBhcm1vciA/IGRldGFjaGVkU2lnbmF0dXJlLmFybW9yKCkgOiBkZXRhY2hlZFNpZ25hdHVyZTtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMTM7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDEyO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2Uuc2lnbihwcml2YXRlS2V5cywgc2lnbmF0dXJlLCBkYXRlLCBmcm9tVXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2NvbnRleHQzLnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuY29tcHJlc3MoY29tcHJlc3Npb24pO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoJ3JldHVybicsIG1lc3NhZ2UuZW5jcnlwdChwdWJsaWNLZXlzLCBwYXNzd29yZHMsIHNlc3Npb25LZXksIHdpbGRjYXJkLCBkYXRlLCB0b1VzZXJJZCkpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMywgdGhpcyk7XG4gIH0pKSkudGhlbihmdW5jdGlvbiAoZW5jcnlwdGVkKSB7XG4gICAgaWYgKGFybW9yKSB7XG4gICAgICByZXN1bHQuZGF0YSA9IGVuY3J5cHRlZC5tZXNzYWdlLmFybW9yKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5tZXNzYWdlID0gZW5jcnlwdGVkLm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmIChyZXR1cm5TZXNzaW9uS2V5KSB7XG4gICAgICByZXN1bHQuc2Vzc2lvbktleSA9IGVuY3J5cHRlZC5zZXNzaW9uS2V5O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KS5jYXRjaChvbkVycm9yLmJpbmQobnVsbCwgJ0Vycm9yIGVuY3J5cHRpbmcgbWVzc2FnZScpKTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0cyBhIG1lc3NhZ2Ugd2l0aCB0aGUgdXNlcidzIHByaXZhdGUga2V5LCBhIHNlc3Npb24ga2V5IG9yIGEgcGFzc3dvcmQuIEVpdGhlciBhIHByaXZhdGUga2V5LFxuICogICBhIHNlc3Npb24ga2V5IG9yIGEgcGFzc3dvcmQgbXVzdCBiZSBzcGVjaWZpZWQuXG4gKiBAcGFyYW0gIHtNZXNzYWdlfSBtZXNzYWdlICAgICAgICAgICAgICAgICAgdGhlIG1lc3NhZ2Ugb2JqZWN0IHdpdGggdGhlIGVuY3J5cHRlZCBkYXRhXG4gKiBAcGFyYW0gIHtLZXl8QXJyYXk8S2V5Pn0gcHJpdmF0ZUtleXMgICAgICAgKG9wdGlvbmFsKSBwcml2YXRlIGtleXMgd2l0aCBkZWNyeXB0ZWQgc2VjcmV0IGtleSBkYXRhIG9yIHNlc3Npb24ga2V5XG4gKiBAcGFyYW0gIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gcGFzc3dvcmRzICAgKG9wdGlvbmFsKSBwYXNzd29yZHMgdG8gZGVjcnlwdCB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5PE9iamVjdD59IHNlc3Npb25LZXlzIChvcHRpb25hbCkgc2Vzc2lvbiBrZXlzIGluIHRoZSBmb3JtOiB7IGRhdGE6VWludDhBcnJheSwgYWxnb3JpdGhtOlN0cmluZyB9XG4gKiBAcGFyYW0gIHtLZXl8QXJyYXk8S2V5Pn0gcHVibGljS2V5cyAgICAgICAgKG9wdGlvbmFsKSBhcnJheSBvZiBwdWJsaWMga2V5cyBvciBzaW5nbGUga2V5LCB0byB2ZXJpZnkgc2lnbmF0dXJlc1xuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgcmV0dXJuIGRhdGEgZm9ybWF0IGVpdGhlciBhcyAndXRmOCcgb3IgJ2JpbmFyeSdcbiAqIEBwYXJhbSAge1NpZ25hdHVyZX0gc2lnbmF0dXJlICAgICAgICAgICAgICAob3B0aW9uYWwpIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdmVyaWZpY2F0aW9uXG4gKiBAcGFyYW0gIHtEYXRlfSBkYXRlICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSB1c2UgdGhlIGdpdmVuIGRhdGUgZm9yIHZlcmlmaWNhdGlvbiBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59ICAgICAgICAgICAgIGRlY3J5cHRlZCBhbmQgdmVyaWZpZWQgbWVzc2FnZSBpbiB0aGUgZm9ybTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRhdGE6VWludDhBcnJheXxTdHJpbmcsIGZpbGVuYW1lOlN0cmluZywgc2lnbmF0dXJlczpbeyBrZXlpZDpTdHJpbmcsIHZhbGlkOkJvb2xlYW4gfV0gfVxuICogQGFzeW5jXG4gKiBAc3RhdGljXG4gKi9cbmZ1bmN0aW9uIGRlY3J5cHQoX3JlZjExKSB7XG4gIHZhciBtZXNzYWdlID0gX3JlZjExLm1lc3NhZ2UsXG4gICAgICBwcml2YXRlS2V5cyA9IF9yZWYxMS5wcml2YXRlS2V5cyxcbiAgICAgIHBhc3N3b3JkcyA9IF9yZWYxMS5wYXNzd29yZHMsXG4gICAgICBzZXNzaW9uS2V5cyA9IF9yZWYxMS5zZXNzaW9uS2V5cyxcbiAgICAgIHB1YmxpY0tleXMgPSBfcmVmMTEucHVibGljS2V5cyxcbiAgICAgIF9yZWYxMSRmb3JtYXQgPSBfcmVmMTEuZm9ybWF0LFxuICAgICAgZm9ybWF0ID0gX3JlZjExJGZvcm1hdCA9PT0gdW5kZWZpbmVkID8gJ3V0ZjgnIDogX3JlZjExJGZvcm1hdCxcbiAgICAgIF9yZWYxMSRzaWduYXR1cmUgPSBfcmVmMTEuc2lnbmF0dXJlLFxuICAgICAgc2lnbmF0dXJlID0gX3JlZjExJHNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IF9yZWYxMSRzaWduYXR1cmUsXG4gICAgICBfcmVmMTEkZGF0ZSA9IF9yZWYxMS5kYXRlLFxuICAgICAgZGF0ZSA9IF9yZWYxMSRkYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSgpIDogX3JlZjExJGRhdGU7XG5cbiAgY2hlY2tNZXNzYWdlKG1lc3NhZ2UpO3B1YmxpY0tleXMgPSB0b0FycmF5KHB1YmxpY0tleXMpO3ByaXZhdGVLZXlzID0gdG9BcnJheShwcml2YXRlS2V5cyk7cGFzc3dvcmRzID0gdG9BcnJheShwYXNzd29yZHMpO3Nlc3Npb25LZXlzID0gdG9BcnJheShzZXNzaW9uS2V5cyk7XG5cbiAgaWYgKCFuYXRpdmVBRUFEKCkgJiYgYXN5bmNQcm94eSkge1xuICAgIC8vIHVzZSB3ZWIgd29ya2VyIGlmIHdlYiBjcnlwdG8gYXBpcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIHJldHVybiBhc3luY1Byb3h5LmRlbGVnYXRlKCdkZWNyeXB0JywgeyBtZXNzYWdlOiBtZXNzYWdlLCBwcml2YXRlS2V5czogcHJpdmF0ZUtleXMsIHBhc3N3b3JkczogcGFzc3dvcmRzLCBzZXNzaW9uS2V5czogc2Vzc2lvbktleXMsIHB1YmxpY0tleXM6IHB1YmxpY0tleXMsIGZvcm1hdDogZm9ybWF0LCBzaWduYXR1cmU6IHNpZ25hdHVyZSwgZGF0ZTogZGF0ZSB9KTtcbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlLmRlY3J5cHQocHJpdmF0ZUtleXMsIHBhc3N3b3Jkcywgc2Vzc2lvbktleXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmMTIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQobWVzc2FnZSkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlTWVzc2FnZShtZXNzYWdlLCBmb3JtYXQpO1xuXG5cbiAgICAgICAgICAgICAgaWYgKCFwdWJsaWNLZXlzKSB7XG4gICAgICAgICAgICAgICAgcHVibGljS2V5cyA9IFtdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDU7XG4gICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlLnZlcmlmeURldGFjaGVkKHNpZ25hdHVyZSwgcHVibGljS2V5cywgZGF0ZSk7XG5cbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgX2NvbnRleHQ0LnQwID0gX2NvbnRleHQ0LnNlbnQ7XG4gICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlLnZlcmlmeShwdWJsaWNLZXlzLCBkYXRlKTtcblxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgX2NvbnRleHQ0LnQwID0gX2NvbnRleHQ0LnNlbnQ7XG5cbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIHJlc3VsdC5zaWduYXR1cmVzID0gX2NvbnRleHQ0LnQwO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdCgncmV0dXJuJywgcmVzdWx0KTtcblxuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZTQsIHRoaXMpO1xuICAgIH0pKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoX3gzKSB7XG4gICAgICByZXR1cm4gX3JlZjEyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSgpKS5jYXRjaChvbkVycm9yLmJpbmQobnVsbCwgJ0Vycm9yIGRlY3J5cHRpbmcgbWVzc2FnZScpKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgTWVzc2FnZSBzaWduaW5nIGFuZCB2ZXJpZmljYXRpb24gICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIFNpZ25zIGEgY2xlYXJ0ZXh0IG1lc3NhZ2UuXG4gKiBAcGFyYW0gIHtTdHJpbmcgfCBVaW50OEFycmF5fSBkYXRhICAgICAgICAgICBjbGVhcnRleHQgaW5wdXQgdG8gYmUgc2lnbmVkXG4gKiBAcGFyYW0gIHt1dGY4fGJpbmFyeXx0ZXh0fG1pbWV9IGRhdGFUeXBlICAgICAob3B0aW9uYWwpIGRhdGEgcGFja2V0IHR5cGVcbiAqIEBwYXJhbSAge0tleXxBcnJheTxLZXk+fSBwcml2YXRlS2V5cyAgICAgICAgIGFycmF5IG9mIGtleXMgb3Igc2luZ2xlIGtleSB3aXRoIGRlY3J5cHRlZCBzZWNyZXQga2V5IGRhdGEgdG8gc2lnbiBjbGVhcnRleHRcbiAqIEBwYXJhbSAge0Jvb2xlYW59IGFybW9yICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgaWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYXNjaWkgYXJtb3JlZCBvciB0aGUgbWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSAge0Jvb2xlYW59IGRldGFjaGVkICAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgaWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgY29udGFpbiBhIGRldGFjaGVkIHNpZ25hdHVyZVxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSBvdmVycmlkZSB0aGUgY3JlYXRpb24gZGF0ZSBzaWduYXR1cmVcbiAqIEBwYXJhbSAge09iamVjdH0gZnJvbVVzZXJJZCAgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlciBJRCB0byBzaWduIHdpdGgsIGUuZy4geyBuYW1lOidTdGV2ZSBTZW5kZXInLCBlbWFpbDonc3RldmVAb3BlbnBncC5vcmcnIH1cbiAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59ICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2xlYXJ0ZXh0IGluIHRoZSBmb3JtOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YTogQVNDSUkgYXJtb3JlZCBtZXNzYWdlIGlmICdhcm1vcicgaXMgdHJ1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZnVsbCBNZXNzYWdlIG9iamVjdCBpZiAnYXJtb3InIGlzIGZhbHNlLCBzaWduYXR1cmU6IGRldGFjaGVkIHNpZ25hdHVyZSBpZiAnZGV0YWNoZWQnIGlzIHRydWV9XG4gKiBAYXN5bmNcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gc2lnbihfcmVmMTMpIHtcbiAgdmFyIGRhdGEgPSBfcmVmMTMuZGF0YSxcbiAgICAgIGRhdGFUeXBlID0gX3JlZjEzLmRhdGFUeXBlLFxuICAgICAgcHJpdmF0ZUtleXMgPSBfcmVmMTMucHJpdmF0ZUtleXMsXG4gICAgICBfcmVmMTMkYXJtb3IgPSBfcmVmMTMuYXJtb3IsXG4gICAgICBhcm1vciA9IF9yZWYxMyRhcm1vciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYxMyRhcm1vcixcbiAgICAgIF9yZWYxMyRkZXRhY2hlZCA9IF9yZWYxMy5kZXRhY2hlZCxcbiAgICAgIGRldGFjaGVkID0gX3JlZjEzJGRldGFjaGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYxMyRkZXRhY2hlZCxcbiAgICAgIF9yZWYxMyRkYXRlID0gX3JlZjEzLmRhdGUsXG4gICAgICBkYXRlID0gX3JlZjEzJGRhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiBfcmVmMTMkZGF0ZSxcbiAgICAgIF9yZWYxMyRmcm9tVXNlcklkID0gX3JlZjEzLmZyb21Vc2VySWQsXG4gICAgICBmcm9tVXNlcklkID0gX3JlZjEzJGZyb21Vc2VySWQgPT09IHVuZGVmaW5lZCA/IHt9IDogX3JlZjEzJGZyb21Vc2VySWQ7XG5cbiAgY2hlY2tEYXRhKGRhdGEpO1xuICBwcml2YXRlS2V5cyA9IHRvQXJyYXkocHJpdmF0ZUtleXMpO1xuXG4gIGlmIChhc3luY1Byb3h5KSB7XG4gICAgLy8gdXNlIHdlYiB3b3JrZXIgaWYgYXZhaWxhYmxlXG4gICAgcmV0dXJuIGFzeW5jUHJveHkuZGVsZWdhdGUoJ3NpZ24nLCB7XG4gICAgICBkYXRhOiBkYXRhLCBkYXRhVHlwZTogZGF0YVR5cGUsIHByaXZhdGVLZXlzOiBwcml2YXRlS2V5cywgYXJtb3I6IGFybW9yLCBkZXRhY2hlZDogZGV0YWNoZWQsIGRhdGU6IGRhdGUsIGZyb21Vc2VySWQ6IGZyb21Vc2VySWRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSB7fTtcbiAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUoKS50aGVuKCgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHtcbiAgICB2YXIgbWVzc2FnZSwgc2lnbmF0dXJlO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBtZXNzYWdlID0gX3V0aWwyLmRlZmF1bHQuaXNTdHJpbmcoZGF0YSkgPyBuZXcgX2NsZWFydGV4dC5DbGVhcnRleHRNZXNzYWdlKGRhdGEpIDogbWVzc2FnZUxpYi5mcm9tQmluYXJ5KGRhdGEsIGRhdGFUeXBlKTtcblxuICAgICAgICAgICAgaWYgKCFkZXRhY2hlZCkge1xuICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZS5zaWduRGV0YWNoZWQocHJpdmF0ZUtleXMsIHVuZGVmaW5lZCwgZGF0ZSwgZnJvbVVzZXJJZCk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBzaWduYXR1cmUgPSBfY29udGV4dDUuc2VudDtcblxuICAgICAgICAgICAgcmVzdWx0LnNpZ25hdHVyZSA9IGFybW9yID8gc2lnbmF0dXJlLmFybW9yKCkgOiBzaWduYXR1cmU7XG4gICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDEyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDEwO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2Uuc2lnbihwcml2YXRlS2V5cywgdW5kZWZpbmVkLCBkYXRlLCBmcm9tVXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2NvbnRleHQ1LnNlbnQ7XG5cbiAgICAgICAgICAgIGlmIChhcm1vcikge1xuICAgICAgICAgICAgICByZXN1bHQuZGF0YSA9IG1lc3NhZ2UuYXJtb3IoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LmFicnVwdCgncmV0dXJuJywgcmVzdWx0KTtcblxuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTUsIHRoaXMpO1xuICB9KSkpLmNhdGNoKG9uRXJyb3IuYmluZChudWxsLCAnRXJyb3Igc2lnbmluZyBjbGVhcnRleHQgbWVzc2FnZScpKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBzaWduYXR1cmVzIG9mIGNsZWFydGV4dCBzaWduZWQgbWVzc2FnZVxuICogQHBhcmFtICB7S2V5fEFycmF5PEtleT59IHB1YmxpY0tleXMgICBhcnJheSBvZiBwdWJsaWNLZXlzIG9yIHNpbmdsZSBrZXksIHRvIHZlcmlmeSBzaWduYXR1cmVzXG4gKiBAcGFyYW0gIHtDbGVhcnRleHRNZXNzYWdlfSBtZXNzYWdlICAgIGNsZWFydGV4dCBtZXNzYWdlIG9iamVjdCB3aXRoIHNpZ25hdHVyZXNcbiAqIEBwYXJhbSAge1NpZ25hdHVyZX0gc2lnbmF0dXJlICAgICAgICAgKG9wdGlvbmFsKSBkZXRhY2hlZCBzaWduYXR1cmUgZm9yIHZlcmlmaWNhdGlvblxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIHVzZSB0aGUgZ2l2ZW4gZGF0ZSBmb3IgdmVyaWZpY2F0aW9uIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgdGltZVxuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gICAgICAgICAgICAgY2xlYXJ0ZXh0IHdpdGggc3RhdHVzIG9mIHZlcmlmaWVkIHNpZ25hdHVyZXMgaW4gdGhlIGZvcm0gb2Y6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGF0YTpTdHJpbmcsIHNpZ25hdHVyZXM6IFt7IGtleWlkOlN0cmluZywgdmFsaWQ6Qm9vbGVhbiB9XSB9XG4gKiBAYXN5bmNcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gdmVyaWZ5KF9yZWYxNSkge1xuICB2YXIgbWVzc2FnZSA9IF9yZWYxNS5tZXNzYWdlLFxuICAgICAgcHVibGljS2V5cyA9IF9yZWYxNS5wdWJsaWNLZXlzLFxuICAgICAgX3JlZjE1JHNpZ25hdHVyZSA9IF9yZWYxNS5zaWduYXR1cmUsXG4gICAgICBzaWduYXR1cmUgPSBfcmVmMTUkc2lnbmF0dXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogX3JlZjE1JHNpZ25hdHVyZSxcbiAgICAgIF9yZWYxNSRkYXRlID0gX3JlZjE1LmRhdGUsXG4gICAgICBkYXRlID0gX3JlZjE1JGRhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiBfcmVmMTUkZGF0ZTtcblxuICBjaGVja0NsZWFydGV4dE9yTWVzc2FnZShtZXNzYWdlKTtcbiAgcHVibGljS2V5cyA9IHRvQXJyYXkocHVibGljS2V5cyk7XG5cbiAgaWYgKGFzeW5jUHJveHkpIHtcbiAgICAvLyB1c2Ugd2ViIHdvcmtlciBpZiBhdmFpbGFibGVcbiAgICByZXR1cm4gYXN5bmNQcm94eS5kZWxlZ2F0ZSgndmVyaWZ5JywgeyBtZXNzYWdlOiBtZXNzYWdlLCBwdWJsaWNLZXlzOiBwdWJsaWNLZXlzLCBzaWduYXR1cmU6IHNpZ25hdHVyZSwgZGF0ZTogZGF0ZSB9KTtcbiAgfVxuXG4gIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCkudGhlbigoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYoKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0Nikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgIHJlc3VsdC5kYXRhID0gbWVzc2FnZSBpbnN0YW5jZW9mIF9jbGVhcnRleHQuQ2xlYXJ0ZXh0TWVzc2FnZSA/IG1lc3NhZ2UuZ2V0VGV4dCgpIDogbWVzc2FnZS5nZXRMaXRlcmFsRGF0YSgpO1xuXG4gICAgICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDU7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZS52ZXJpZnlEZXRhY2hlZChzaWduYXR1cmUsIHB1YmxpY0tleXMsIGRhdGUpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgX2NvbnRleHQ2LnQwID0gX2NvbnRleHQ2LnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDExO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDEwO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UudmVyaWZ5KHB1YmxpY0tleXMsIGRhdGUpO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIF9jb250ZXh0Ni50MCA9IF9jb250ZXh0Ni5zZW50O1xuXG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHJlc3VsdC5zaWduYXR1cmVzID0gX2NvbnRleHQ2LnQwO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5hYnJ1cHQoJ3JldHVybicsIHJlc3VsdCk7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWU2LCB0aGlzKTtcbiAgfSkpKS5jYXRjaChvbkVycm9yLmJpbmQobnVsbCwgJ0Vycm9yIHZlcmlmeWluZyBjbGVhcnRleHQgc2lnbmVkIG1lc3NhZ2UnKSk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICBTZXNzaW9uIGtleSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbi8qKlxuICogRW5jcnlwdCBhIHN5bW1ldHJpYyBzZXNzaW9uIGtleSB3aXRoIHB1YmxpYyBrZXlzLCBwYXNzd29yZHMsIG9yIGJvdGggYXQgb25jZS4gQXQgbGVhc3QgZWl0aGVyIHB1YmxpYyBrZXlzXG4gKiAgIG9yIHBhc3N3b3JkcyBtdXN0IGJlIHNwZWNpZmllZC5cbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGRhdGEgICAgICAgICAgICAgICAgICB0aGUgc2Vzc2lvbiBrZXkgdG8gYmUgZW5jcnlwdGVkIGUuZy4gMTYgcmFuZG9tIGJ5dGVzIChmb3IgYWVzMTI4KVxuICogQHBhcmFtICB7U3RyaW5nfSBhbGdvcml0aG0gICAgICAgICAgICAgICAgIGFsZ29yaXRobSBvZiB0aGUgc3ltbWV0cmljIHNlc3Npb24ga2V5IGUuZy4gJ2FlczEyOCcgb3IgJ2FlczI1NidcbiAqIEBwYXJhbSAge1N0cmluZ30gYWVhZEFsZ29yaXRobSAgICAgICAgICAgICAob3B0aW9uYWwpIGFlYWQgYWxnb3JpdGhtLCBlLmcuICdlYXgnIG9yICdvY2InXG4gKiBAcGFyYW0gIHtLZXl8QXJyYXk8S2V5Pn0gcHVibGljS2V5cyAgICAgICAgKG9wdGlvbmFsKSBhcnJheSBvZiBwdWJsaWMga2V5cyBvciBzaW5nbGUga2V5LCB1c2VkIHRvIGVuY3J5cHQgdGhlIGtleVxuICogQHBhcmFtICB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhc3N3b3JkcyAgIChvcHRpb25hbCkgcGFzc3dvcmRzIGZvciB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7Qm9vbGVhbn0gd2lsZGNhcmQgICAgICAgICAgICAgICAgIChvcHRpb25hbCkgdXNlIGEga2V5IElEIG9mIDAgaW5zdGVhZCBvZiB0aGUgcHVibGljIGtleSBJRHNcbiAqIEBwYXJhbSAge0RhdGV9IGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uYWwpIG92ZXJyaWRlIHRoZSBkYXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRvVXNlcklkICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsKSB1c2VyIElEIHRvIGVuY3J5cHQgZm9yLCBlLmcuIHsgbmFtZTonUGhpbCBaaW1tZXJtYW5uJywgZW1haWw6J3BoaWxAb3BlbnBncC5vcmcnIH1cbiAqIEByZXR1cm5zIHtQcm9taXNlPE1lc3NhZ2U+fSAgICAgICAgICAgICAgICAgdGhlIGVuY3J5cHRlZCBzZXNzaW9uIGtleSBwYWNrZXRzIGNvbnRhaW5lZCBpbiBhIG1lc3NhZ2Ugb2JqZWN0XG4gKiBAYXN5bmNcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gZW5jcnlwdFNlc3Npb25LZXkoX3JlZjE3KSB7XG4gIHZhciBkYXRhID0gX3JlZjE3LmRhdGEsXG4gICAgICBhbGdvcml0aG0gPSBfcmVmMTcuYWxnb3JpdGhtLFxuICAgICAgYWVhZEFsZ29yaXRobSA9IF9yZWYxNy5hZWFkQWxnb3JpdGhtLFxuICAgICAgcHVibGljS2V5cyA9IF9yZWYxNy5wdWJsaWNLZXlzLFxuICAgICAgcGFzc3dvcmRzID0gX3JlZjE3LnBhc3N3b3JkcyxcbiAgICAgIF9yZWYxNyR3aWxkY2FyZCA9IF9yZWYxNy53aWxkY2FyZCxcbiAgICAgIHdpbGRjYXJkID0gX3JlZjE3JHdpbGRjYXJkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYxNyR3aWxkY2FyZCxcbiAgICAgIF9yZWYxNyRkYXRlID0gX3JlZjE3LmRhdGUsXG4gICAgICBkYXRlID0gX3JlZjE3JGRhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiBfcmVmMTckZGF0ZSxcbiAgICAgIF9yZWYxNyR0b1VzZXJJZCA9IF9yZWYxNy50b1VzZXJJZCxcbiAgICAgIHRvVXNlcklkID0gX3JlZjE3JHRvVXNlcklkID09PSB1bmRlZmluZWQgPyB7fSA6IF9yZWYxNyR0b1VzZXJJZDtcblxuICBjaGVja0JpbmFyeShkYXRhKTtjaGVja1N0cmluZyhhbGdvcml0aG0sICdhbGdvcml0aG0nKTtwdWJsaWNLZXlzID0gdG9BcnJheShwdWJsaWNLZXlzKTtwYXNzd29yZHMgPSB0b0FycmF5KHBhc3N3b3Jkcyk7XG5cbiAgaWYgKGFzeW5jUHJveHkpIHtcbiAgICAvLyB1c2Ugd2ViIHdvcmtlciBpZiBhdmFpbGFibGVcbiAgICByZXR1cm4gYXN5bmNQcm94eS5kZWxlZ2F0ZSgnZW5jcnlwdFNlc3Npb25LZXknLCB7IGRhdGE6IGRhdGEsIGFsZ29yaXRobTogYWxnb3JpdGhtLCBhZWFkQWxnb3JpdGhtOiBhZWFkQWxnb3JpdGhtLCBwdWJsaWNLZXlzOiBwdWJsaWNLZXlzLCBwYXNzd29yZHM6IHBhc3N3b3Jkcywgd2lsZGNhcmQ6IHdpbGRjYXJkLCBkYXRlOiBkYXRlLCB0b1VzZXJJZDogdG9Vc2VySWQgfSk7XG4gIH1cblxuICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSgpLnRoZW4oKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU3KCkge1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlNyQoX2NvbnRleHQ3KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Ny5wcmV2ID0gX2NvbnRleHQ3Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDI7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZUxpYi5lbmNyeXB0U2Vzc2lvbktleShkYXRhLCBhbGdvcml0aG0sIGFlYWRBbGdvcml0aG0sIHB1YmxpY0tleXMsIHBhc3N3b3Jkcywgd2lsZGNhcmQsIGRhdGUsIHRvVXNlcklkKTtcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIF9jb250ZXh0Ny50MCA9IF9jb250ZXh0Ny5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5hYnJ1cHQoJ3JldHVybicsIHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogX2NvbnRleHQ3LnQwXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNywgdGhpcyk7XG4gIH0pKSkuY2F0Y2gob25FcnJvci5iaW5kKG51bGwsICdFcnJvciBlbmNyeXB0aW5nIHNlc3Npb24ga2V5JykpO1xufVxuXG4vKipcbiAqIERlY3J5cHQgc3ltbWV0cmljIHNlc3Npb24ga2V5cyB3aXRoIGEgcHJpdmF0ZSBrZXkgb3IgcGFzc3dvcmQuIEVpdGhlciBhIHByaXZhdGUga2V5IG9yXG4gKiAgIGEgcGFzc3dvcmQgbXVzdCBiZSBzcGVjaWZpZWQuXG4gKiBAcGFyYW0gIHtNZXNzYWdlfSBtZXNzYWdlICAgICAgICAgICAgICAgICBhIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVuY3J5cHRlZCBzZXNzaW9uIGtleSBwYWNrZXRzXG4gKiBAcGFyYW0gIHtLZXl8QXJyYXk8S2V5Pn0gcHJpdmF0ZUtleXMgICAgIChvcHRpb25hbCkgcHJpdmF0ZSBrZXlzIHdpdGggZGVjcnlwdGVkIHNlY3JldCBrZXkgZGF0YVxuICogQHBhcmFtICB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhc3N3b3JkcyAob3B0aW9uYWwpIHBhc3N3b3JkcyB0byBkZWNyeXB0IHRoZSBzZXNzaW9uIGtleVxuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0fHVuZGVmaW5lZD59ICAgIEFycmF5IG9mIGRlY3J5cHRlZCBzZXNzaW9uIGtleSwgYWxnb3JpdGhtIHBhaXJzIGluIGZvcm06XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGF0YTpVaW50OEFycmF5LCBhbGdvcml0aG06U3RyaW5nIH1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3VuZGVmaW5lZCcgaWYgbm8ga2V5IHBhY2tldHMgZm91bmRcbiAqIEBhc3luY1xuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiBkZWNyeXB0U2Vzc2lvbktleXMoX3JlZjE5KSB7XG4gIHZhciBtZXNzYWdlID0gX3JlZjE5Lm1lc3NhZ2UsXG4gICAgICBwcml2YXRlS2V5cyA9IF9yZWYxOS5wcml2YXRlS2V5cyxcbiAgICAgIHBhc3N3b3JkcyA9IF9yZWYxOS5wYXNzd29yZHM7XG5cbiAgY2hlY2tNZXNzYWdlKG1lc3NhZ2UpO3ByaXZhdGVLZXlzID0gdG9BcnJheShwcml2YXRlS2V5cyk7cGFzc3dvcmRzID0gdG9BcnJheShwYXNzd29yZHMpO1xuXG4gIGlmIChhc3luY1Byb3h5KSB7XG4gICAgLy8gdXNlIHdlYiB3b3JrZXIgaWYgYXZhaWxhYmxlXG4gICAgcmV0dXJuIGFzeW5jUHJveHkuZGVsZWdhdGUoJ2RlY3J5cHRTZXNzaW9uS2V5cycsIHsgbWVzc2FnZTogbWVzc2FnZSwgcHJpdmF0ZUtleXM6IHByaXZhdGVLZXlzLCBwYXNzd29yZHM6IHBhc3N3b3JkcyB9KTtcbiAgfVxuXG4gIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCkudGhlbigoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTgoKSB7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWU4JChfY29udGV4dDgpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQ4LnByZXYgPSBfY29udGV4dDgubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguYWJydXB0KCdyZXR1cm4nLCBtZXNzYWdlLmRlY3J5cHRTZXNzaW9uS2V5cyhwcml2YXRlS2V5cywgcGFzc3dvcmRzKSk7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTgsIHRoaXMpO1xuICB9KSkpLmNhdGNoKG9uRXJyb3IuYmluZChudWxsLCAnRXJyb3IgZGVjcnlwdGluZyBzZXNzaW9uIGtleXMnKSk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICBIZWxwZXIgZnVuY3Rpb25zICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbi8qKlxuICogSW5wdXQgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiBjaGVja1N0cmluZyhkYXRhLCBuYW1lKSB7XG4gIGlmICghX3V0aWwyLmRlZmF1bHQuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBbJyArIChuYW1lIHx8ICdkYXRhJykgKyAnXSBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrQmluYXJ5KGRhdGEsIG5hbWUpIHtcbiAgaWYgKCFfdXRpbDIuZGVmYXVsdC5pc1VpbnQ4QXJyYXkoZGF0YSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBbJyArIChuYW1lIHx8ICdkYXRhJykgKyAnXSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheScpO1xuICB9XG59XG5mdW5jdGlvbiBjaGVja0RhdGEoZGF0YSwgbmFtZSkge1xuICBpZiAoIV91dGlsMi5kZWZhdWx0LmlzVWludDhBcnJheShkYXRhKSAmJiAhX3V0aWwyLmRlZmF1bHQuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBbJyArIChuYW1lIHx8ICdkYXRhJykgKyAnXSBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nIG9yIFVpbnQ4QXJyYXknKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCEobWVzc2FnZSBpbnN0YW5jZW9mIG1lc3NhZ2VMaWIuTWVzc2FnZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBbbWVzc2FnZV0gbmVlZHMgdG8gYmUgb2YgdHlwZSBNZXNzYWdlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrQ2xlYXJ0ZXh0T3JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCEobWVzc2FnZSBpbnN0YW5jZW9mIF9jbGVhcnRleHQuQ2xlYXJ0ZXh0TWVzc2FnZSkgJiYgIShtZXNzYWdlIGluc3RhbmNlb2YgbWVzc2FnZUxpYi5NZXNzYWdlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFttZXNzYWdlXSBuZWVkcyB0byBiZSBvZiB0eXBlIE1lc3NhZ2Ugb3IgQ2xlYXJ0ZXh0TWVzc2FnZScpO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHBhcmFtZXRlciB0byBhbiBhcnJheSBpZiBpdCBpcyBub3QgdW5kZWZpbmVkLlxuICogQHBhcmFtICB7T2JqZWN0fSBwYXJhbSAgICAgICAgICAgICAgdGhlIHBhcmFtZXRlciB0byBiZSBub3JtYWxpemVkXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pnx1bmRlZmluZWR9ICAgdGhlIHJlc3VsdGluZyBhcnJheSBvciB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gdG9BcnJheShwYXJhbSkge1xuICBpZiAocGFyYW0gJiYgIV91dGlsMi5kZWZhdWx0LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgcGFyYW0gPSBbcGFyYW1dO1xuICB9XG4gIHJldHVybiBwYXJhbTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVzc2FnZSBvYmVqY3QgZWl0aGVyIGZyb20gYSBVaW50OEFycmF5IG9yIGEgc3RyaW5nLlxuICogQHBhcmFtICB7U3RyaW5nfFVpbnQ4QXJyYXl9IGRhdGEgICB0aGUgcGF5bG9hZCBmb3IgdGhlIG1lc3NhZ2VcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZW5hbWUgICAgICAgICAgdGhlIGxpdGVyYWwgZGF0YSBwYWNrZXQncyBmaWxlbmFtZVxuICogQHBhcmFtICB7RGF0ZX0gZGF0ZSAgICAgIHRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSBwYWNrYWdlXG4gKiBAcGFyYW0gIHt1dGY4fGJpbmFyeXx0ZXh0fG1pbWV9IHR5cGUgKG9wdGlvbmFsKSBkYXRhIHBhY2tldCB0eXBlXG4gKiBAcmV0dXJucyB7TWVzc2FnZX0gICAgICAgICAgICAgICAgICBhIG1lc3NhZ2Ugb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1lc3NhZ2UoZGF0YSwgZmlsZW5hbWUpIHtcbiAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG5ldyBEYXRlKCk7XG4gIHZhciB0eXBlID0gYXJndW1lbnRzWzNdO1xuXG4gIHZhciBtc2cgPSB2b2lkIDA7XG4gIGlmIChfdXRpbDIuZGVmYXVsdC5pc1VpbnQ4QXJyYXkoZGF0YSkpIHtcbiAgICBtc2cgPSBtZXNzYWdlTGliLmZyb21CaW5hcnkoZGF0YSwgZmlsZW5hbWUsIGRhdGUsIHR5cGUpO1xuICB9IGVsc2UgaWYgKF91dGlsMi5kZWZhdWx0LmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgbXNnID0gbWVzc2FnZUxpYi5mcm9tVGV4dChkYXRhLCBmaWxlbmFtZSwgZGF0ZSwgdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIG11c3QgYmUgb2YgdHlwZSBTdHJpbmcgb3IgVWludDhBcnJheScpO1xuICB9XG4gIHJldHVybiBtc2c7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG1lc3NhZ2UgZ2l2ZW4gYSBjZXJ0YWluIGZvcm1hdC5cbiAqIEBwYXJhbSAge01lc3NhZ2V9IG1lc3NhZ2UgICB0aGUgbWVzc2FnZSBvYmplY3QgdG8gYmUgcGFyc2VcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0ICAgICB0aGUgb3V0cHV0IGZvcm1hdCBlLmcuICd1dGY4JyBvciAnYmluYXJ5J1xuICogQHJldHVybnMge09iamVjdH0gICAgICAgICAgICB0aGUgcGFyc2UgZGF0YSBpbiB0aGUgcmVzcGVjdGl2ZSBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXNzYWdlKG1lc3NhZ2UsIGZvcm1hdCkge1xuICBpZiAoZm9ybWF0ID09PSAnYmluYXJ5Jykge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBtZXNzYWdlLmdldExpdGVyYWxEYXRhKCksXG4gICAgICBmaWxlbmFtZTogbWVzc2FnZS5nZXRGaWxlbmFtZSgpXG4gICAgfTtcbiAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICd1dGY4Jykge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBtZXNzYWdlLmdldFRleHQoKSxcbiAgICAgIGZpbGVuYW1lOiBtZXNzYWdlLmdldEZpbGVuYW1lKClcbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmb3JtYXQnKTtcbn1cblxuLyoqXG4gKiBHbG9iYWwgZXJyb3IgaGFuZGxlciB0aGF0IGxvZ3MgdGhlIHN0YWNrIHRyYWNlIGFuZCByZXRocm93cyBhIGhpZ2ggbHZsIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSAgIEEgaHVtYW4gcmVhZGFibGUgaGlnaCBsZXZlbCBlcnJvciBNZXNzYWdlXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAgICAgIFRoZSBpbnRlcm5hbCBlcnJvciB0aGF0IGNhdXNlZCB0aGUgZmFpbHVyZVxuICovXG5mdW5jdGlvbiBvbkVycm9yKG1lc3NhZ2UsIGVycm9yKSB7XG4gIC8vIGxvZyB0aGUgc3RhY2sgdHJhY2VcbiAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWdfZXJyb3IoZXJyb3IpO1xuXG4gIC8vIHVwZGF0ZSBlcnJvciBtZXNzYWdlXG4gIHRyeSB7XG4gICAgZXJyb3IubWVzc2FnZSA9IG1lc3NhZ2UgKyAnOiAnICsgZXJyb3IubWVzc2FnZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB0aHJvdyBlcnJvcjtcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgbmF0aXZlIEFFQUQgc3VwcG9ydCBhbmQgY29uZmlndXJhdGlvbiBieSB0aGUgdXNlci4gT25seVxuICogYnJvd3NlcnMgdGhhdCBpbXBsZW1lbnQgdGhlIGN1cnJlbnQgV2ViQ3J5cHRvIHNwZWNpZmljYXRpb24gc3VwcG9ydFxuICogbmF0aXZlIEdDTS4gTmF0aXZlIEVBWCBpcyBidWlsdCBvbiBDVFIgYW5kIENCQywgd2hpY2ggY3VycmVudFxuICogYnJvd3NlcnMgc3VwcG9ydC4gT0NCIGFuZCBDRkIgYXJlIG5vdCBuYXRpdmVseSBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gICBJZiBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gc2hvdWxkIGJlIHVzZWRcbiAqL1xuZnVuY3Rpb24gbmF0aXZlQUVBRCgpIHtcbiAgcmV0dXJuIF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0ICYmICgoX2NvbmZpZzIuZGVmYXVsdC5hZWFkX3Byb3RlY3RfdmVyc2lvbiAhPT0gNCB8fCBfY29uZmlnMi5kZWZhdWx0LmFlYWRfbW9kZSA9PT0gX2VudW1zMi5kZWZhdWx0LmFlYWQuZXhwZXJpbWVudGFsX2djbSkgJiYgX3V0aWwyLmRlZmF1bHQuZ2V0V2ViQ3J5cHRvKCkgfHwgX2NvbmZpZzIuZGVmYXVsdC5hZWFkX3Byb3RlY3RfdmVyc2lvbiA9PT0gNCAmJiBfY29uZmlnMi5kZWZhdWx0LmFlYWRfbW9kZSA9PT0gX2VudW1zMi5kZWZhdWx0LmFlYWQuZWF4ICYmIF91dGlsMi5kZWZhdWx0LmdldFdlYkNyeXB0bygpKTtcbn1cblxufSx7XCIuL2NsZWFydGV4dFwiOjMyMixcIi4vY29uZmlnL2NvbmZpZ1wiOjMyNCxcIi4vZW51bXNcIjozNTksXCIuL2tleVwiOjM2MixcIi4vbWVzc2FnZVwiOjM2NixcIi4vcG9seWZpbGxzXCI6MzkwLFwiLi91dGlsXCI6Mzk4LFwiLi93b3JrZXIvYXN5bmNfcHJveHlcIjo0MDAsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZVwiOjMyLFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM2ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlRydXN0ID0gZXhwb3J0cy5TaWduYXR1cmUgPSBleHBvcnRzLlNlY3JldFN1YmtleSA9IGV4cG9ydHMuVXNlcmlkID0gZXhwb3J0cy5TZWNyZXRLZXkgPSBleHBvcnRzLk9uZVBhc3NTaWduYXR1cmUgPSBleHBvcnRzLlVzZXJBdHRyaWJ1dGUgPSBleHBvcnRzLlB1YmxpY1N1YmtleSA9IGV4cG9ydHMuTWFya2VyID0gZXhwb3J0cy5TeW1tZXRyaWNhbGx5RW5jcnlwdGVkID0gZXhwb3J0cy5QdWJsaWNLZXkgPSBleHBvcnRzLkxpdGVyYWwgPSBleHBvcnRzLlN5bUVuY3J5cHRlZFNlc3Npb25LZXkgPSBleHBvcnRzLlB1YmxpY0tleUVuY3J5cHRlZFNlc3Npb25LZXkgPSBleHBvcnRzLlN5bUVuY3J5cHRlZEFFQURQcm90ZWN0ZWQgPSBleHBvcnRzLlN5bUVuY3J5cHRlZEludGVncml0eVByb3RlY3RlZCA9IGV4cG9ydHMuQ29tcHJlc3NlZCA9IHVuZGVmaW5lZDtcblxudmFyIF9hc3NpZ24gPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbicpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG52YXIgX2NvbXByZXNzZWQgPSBfZGVyZXFfKCcuL2NvbXByZXNzZWQuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdDb21wcmVzc2VkJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29tcHJlc3NlZCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfc3ltX2VuY3J5cHRlZF9pbnRlZ3JpdHlfcHJvdGVjdGVkID0gX2RlcmVxXygnLi9zeW1fZW5jcnlwdGVkX2ludGVncml0eV9wcm90ZWN0ZWQuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdTeW1FbmNyeXB0ZWRJbnRlZ3JpdHlQcm90ZWN0ZWQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1fZW5jcnlwdGVkX2ludGVncml0eV9wcm90ZWN0ZWQpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3N5bV9lbmNyeXB0ZWRfYWVhZF9wcm90ZWN0ZWQgPSBfZGVyZXFfKCcuL3N5bV9lbmNyeXB0ZWRfYWVhZF9wcm90ZWN0ZWQuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdTeW1FbmNyeXB0ZWRBRUFEUHJvdGVjdGVkJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltX2VuY3J5cHRlZF9hZWFkX3Byb3RlY3RlZCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfcHVibGljX2tleV9lbmNyeXB0ZWRfc2Vzc2lvbl9rZXkgPSBfZGVyZXFfKCcuL3B1YmxpY19rZXlfZW5jcnlwdGVkX3Nlc3Npb25fa2V5LmpzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3B1YmxpY19rZXlfZW5jcnlwdGVkX3Nlc3Npb25fa2V5KS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9zeW1fZW5jcnlwdGVkX3Nlc3Npb25fa2V5ID0gX2RlcmVxXygnLi9zeW1fZW5jcnlwdGVkX3Nlc3Npb25fa2V5LmpzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnU3ltRW5jcnlwdGVkU2Vzc2lvbktleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bV9lbmNyeXB0ZWRfc2Vzc2lvbl9rZXkpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX2xpdGVyYWwgPSBfZGVyZXFfKCcuL2xpdGVyYWwuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdMaXRlcmFsJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGl0ZXJhbCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfcHVibGljX2tleSA9IF9kZXJlcV8oJy4vcHVibGljX2tleS5qcycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1B1YmxpY0tleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3B1YmxpY19rZXkpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3N5bW1ldHJpY2FsbHlfZW5jcnlwdGVkID0gX2RlcmVxXygnLi9zeW1tZXRyaWNhbGx5X2VuY3J5cHRlZC5qcycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1N5bW1ldHJpY2FsbHlFbmNyeXB0ZWQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1tZXRyaWNhbGx5X2VuY3J5cHRlZCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfbWFya2VyID0gX2RlcmVxXygnLi9tYXJrZXIuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdNYXJrZXInLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYXJrZXIpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3B1YmxpY19zdWJrZXkgPSBfZGVyZXFfKCcuL3B1YmxpY19zdWJrZXkuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdQdWJsaWNTdWJrZXknLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wdWJsaWNfc3Via2V5KS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF91c2VyX2F0dHJpYnV0ZSA9IF9kZXJlcV8oJy4vdXNlcl9hdHRyaWJ1dGUuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdVc2VyQXR0cmlidXRlJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXNlcl9hdHRyaWJ1dGUpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX29uZV9wYXNzX3NpZ25hdHVyZSA9IF9kZXJlcV8oJy4vb25lX3Bhc3Nfc2lnbmF0dXJlLmpzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnT25lUGFzc1NpZ25hdHVyZScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29uZV9wYXNzX3NpZ25hdHVyZSkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfc2VjcmV0X2tleSA9IF9kZXJlcV8oJy4vc2VjcmV0X2tleS5qcycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1NlY3JldEtleScsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NlY3JldF9rZXkpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3VzZXJpZCA9IF9kZXJlcV8oJy4vdXNlcmlkLmpzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnVXNlcmlkJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXNlcmlkKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9zZWNyZXRfc3Via2V5ID0gX2RlcmVxXygnLi9zZWNyZXRfc3Via2V5LmpzJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnU2VjcmV0U3Via2V5Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2VjcmV0X3N1YmtleSkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfc2lnbmF0dXJlID0gX2RlcmVxXygnLi9zaWduYXR1cmUuanMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdTaWduYXR1cmUnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zaWduYXR1cmUpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3RydXN0ID0gX2RlcmVxXygnLi90cnVzdC5qcycpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1RydXN0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHJ1c3QpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5uZXdQYWNrZXRGcm9tVGFnID0gbmV3UGFja2V0RnJvbVRhZztcbmV4cG9ydHMuZnJvbVN0cnVjdHVyZWRDbG9uZSA9IGZyb21TdHJ1Y3R1cmVkQ2xvbmU7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcy5qcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF9hbGxfcGFja2V0cyA9IF9kZXJlcV8oJy4vYWxsX3BhY2tldHMuanMnKTtcblxudmFyIHBhY2tldHMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfYWxsX3BhY2tldHMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEFsbG9jYXRlIGEgbmV3IHBhY2tldFxuICogQGZ1bmN0aW9uIG5ld1BhY2tldEZyb21UYWdcbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdGFnIHByb3BlcnR5IG5hbWUgZnJvbSB7QGxpbmsgbW9kdWxlOmVudW1zLnBhY2tldH1cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5ldyBwYWNrZXQgb2JqZWN0IHdpdGggdHlwZSBiYXNlZCBvbiB0YWdcbiAqL1xuZnVuY3Rpb24gbmV3UGFja2V0RnJvbVRhZyh0YWcpIHtcbiAgcmV0dXJuIG5ldyBwYWNrZXRzW3BhY2tldENsYXNzRnJvbVRhZ05hbWUodGFnKV0oKTtcbn1cblxuLyoqXG4gKiBBbGxvY2F0ZSBhIG5ldyBwYWNrZXQgZnJvbSBzdHJ1Y3R1cmVkIHBhY2tldCBjbG9uZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2h0bWwvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNzYWZlLXBhc3Npbmctb2Ytc3RydWN0dXJlZC1kYXRhfVxuICogQGZ1bmN0aW9uIGZyb21TdHJ1Y3R1cmVkQ2xvbmVcbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0Q2xvbmUgcGFja2V0IGNsb25lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXcgcGFja2V0IG9iamVjdCB3aXRoIGRhdGEgZnJvbSBwYWNrZXQgY2xvbmVcbiAqL1xuZnVuY3Rpb24gZnJvbVN0cnVjdHVyZWRDbG9uZShwYWNrZXRDbG9uZSkge1xuICB2YXIgdGFnTmFtZSA9IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5wYWNrZXQsIHBhY2tldENsb25lLnRhZyk7XG4gIHZhciBwYWNrZXQgPSBuZXdQYWNrZXRGcm9tVGFnKHRhZ05hbWUpO1xuICAoMCwgX2Fzc2lnbjIuZGVmYXVsdCkocGFja2V0LCBwYWNrZXRDbG9uZSk7XG4gIGlmIChwYWNrZXQucG9zdENsb25lVHlwZUZpeCkge1xuICAgIHBhY2tldC5wb3N0Q2xvbmVUeXBlRml4KCk7XG4gIH1cbiAgcmV0dXJuIHBhY2tldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRhZyBuYW1lIHRvIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YWcgcHJvcGVydHkgbmFtZSBmcm9tIHtAbGluayBtb2R1bGU6ZW51bXMucGFja2V0fVxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhY2tldENsYXNzRnJvbVRhZ05hbWUodGFnKSB7XG4gIHJldHVybiB0YWcuc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB0YWcuc3Vic3RyKDEpO1xufVxuXG59LHtcIi4uL2VudW1zLmpzXCI6MzU5LFwiLi9hbGxfcGFja2V0cy5qc1wiOjM2OCxcIi4vY29tcHJlc3NlZC5qc1wiOjM3MCxcIi4vbGl0ZXJhbC5qc1wiOjM3MixcIi4vbWFya2VyLmpzXCI6MzczLFwiLi9vbmVfcGFzc19zaWduYXR1cmUuanNcIjozNzQsXCIuL3B1YmxpY19rZXkuanNcIjozNzcsXCIuL3B1YmxpY19rZXlfZW5jcnlwdGVkX3Nlc3Npb25fa2V5LmpzXCI6Mzc4LFwiLi9wdWJsaWNfc3Via2V5LmpzXCI6Mzc5LFwiLi9zZWNyZXRfa2V5LmpzXCI6MzgwLFwiLi9zZWNyZXRfc3Via2V5LmpzXCI6MzgxLFwiLi9zaWduYXR1cmUuanNcIjozODIsXCIuL3N5bV9lbmNyeXB0ZWRfYWVhZF9wcm90ZWN0ZWQuanNcIjozODMsXCIuL3N5bV9lbmNyeXB0ZWRfaW50ZWdyaXR5X3Byb3RlY3RlZC5qc1wiOjM4NCxcIi4vc3ltX2VuY3J5cHRlZF9zZXNzaW9uX2tleS5qc1wiOjM4NSxcIi4vc3ltbWV0cmljYWxseV9lbmNyeXB0ZWQuanNcIjozODYsXCIuL3RydXN0LmpzXCI6Mzg3LFwiLi91c2VyX2F0dHJpYnV0ZS5qc1wiOjM4OCxcIi4vdXNlcmlkLmpzXCI6Mzg5LFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ25cIjoyNH1dLDM2OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lUGFja2V0cyA9IGNsb25lUGFja2V0cztcbmV4cG9ydHMucGFyc2VDbG9uZWRQYWNrZXRzID0gcGFyc2VDbG9uZWRQYWNrZXRzO1xuXG52YXIgX2tleSA9IF9kZXJlcV8oJy4uL2tleScpO1xuXG52YXIgX21lc3NhZ2UgPSBfZGVyZXFfKCcuLi9tZXNzYWdlJyk7XG5cbnZhciBfY2xlYXJ0ZXh0ID0gX2RlcmVxXygnLi4vY2xlYXJ0ZXh0Jyk7XG5cbnZhciBfc2lnbmF0dXJlID0gX2RlcmVxXygnLi4vc2lnbmF0dXJlJyk7XG5cbnZhciBfcGFja2V0bGlzdCA9IF9kZXJlcV8oJy4vcGFja2V0bGlzdCcpO1xuXG52YXIgX3BhY2tldGxpc3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFja2V0bGlzdCk7XG5cbnZhciBfa2V5aWQgPSBfZGVyZXFfKCcuLi90eXBlL2tleWlkJyk7XG5cbnZhciBfa2V5aWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2V5aWQpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgTGlzdCAtLT4gQ2xvbmUgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIENyZWF0ZSBhIHBhY2tldGxpc3QgZnJvbSB0aGUgY29ycmVzcG9kaW5nIG9iamVjdCB0eXBlcy5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyAgIHRoZSBvYmplY3QgcGFzc2VkIHRvIGFuZCBmcm9tIHRoZSB3ZWIgd29ya2VyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAgICAgICAgICAgYSBtdXRhdGVkIHZlcnNpb24gb2YgdGhlIG9wdGlvbnMgb3B0amVjdFxuICovXG5mdW5jdGlvbiBjbG9uZVBhY2tldHMob3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5wdWJsaWNLZXlzKSB7XG4gICAgb3B0aW9ucy5wdWJsaWNLZXlzID0gb3B0aW9ucy5wdWJsaWNLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4ga2V5LnRvUGFja2V0bGlzdCgpO1xuICAgIH0pO1xuICB9XG4gIGlmIChvcHRpb25zLnByaXZhdGVLZXlzKSB7XG4gICAgb3B0aW9ucy5wcml2YXRlS2V5cyA9IG9wdGlvbnMucHJpdmF0ZUtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBrZXkudG9QYWNrZXRsaXN0KCk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMucHJpdmF0ZUtleSkge1xuICAgIG9wdGlvbnMucHJpdmF0ZUtleSA9IG9wdGlvbnMucHJpdmF0ZUtleS50b1BhY2tldGxpc3QoKTtcbiAgfVxuICBpZiAob3B0aW9ucy5rZXkpIHtcbiAgICBvcHRpb25zLmtleSA9IG9wdGlvbnMua2V5LnRvUGFja2V0bGlzdCgpO1xuICB9XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICAvL2NvdWxkIGJlIGVpdGhlciBhIE1lc3NhZ2Ugb3IgQ2xlYXJ0ZXh0TWVzc2FnZSBvYmplY3RcbiAgICBpZiAob3B0aW9ucy5tZXNzYWdlIGluc3RhbmNlb2YgX21lc3NhZ2UuTWVzc2FnZSkge1xuICAgICAgb3B0aW9ucy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlLnBhY2tldHM7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UgaW5zdGFuY2VvZiBfY2xlYXJ0ZXh0LkNsZWFydGV4dE1lc3NhZ2UpIHtcbiAgICAgIG9wdGlvbnMubWVzc2FnZSA9IHsgdGV4dDogb3B0aW9ucy5tZXNzYWdlLnRleHQsIHNpZ25hdHVyZTogb3B0aW9ucy5tZXNzYWdlLnNpZ25hdHVyZS5wYWNrZXRzIH07XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zLnNpZ25hdHVyZSAmJiBvcHRpb25zLnNpZ25hdHVyZSBpbnN0YW5jZW9mIF9zaWduYXR1cmUuU2lnbmF0dXJlKSB7XG4gICAgb3B0aW9ucy5zaWduYXR1cmUgPSBvcHRpb25zLnNpZ25hdHVyZS5wYWNrZXRzO1xuICB9XG4gIGlmIChvcHRpb25zLnNpZ25hdHVyZXMpIHtcbiAgICBvcHRpb25zLnNpZ25hdHVyZXMgPSBvcHRpb25zLnNpZ25hdHVyZXMubWFwKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHJldHVybiB2ZXJpZmljYXRpb25PYmplY3RUb0Nsb25lKHNpZyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59IC8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNSBUYW5rcmVkIEhhc2Vcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBwYWNrZXQgbGlzdCBjbG9uaW5nIHJlcXVpcmVkIHRvXG4gKiBwYXNzIGNlcnRhaW4gb2JqZWN0IHR5cGVzIGJldHdlZW4gdGhlIHdlYiB3b3JrZXIgYW5kIG1haW4gdGhyZWFkIHVzaW5nXG4gKiB0aGUgc3RydWN0dXJlZCBjbG9uaW5nIGFsZ29yaXRobS5cbiAqIEBtb2R1bGUgcGFja2V0L2Nsb25lXG4gKi9cblxuZnVuY3Rpb24gdmVyaWZpY2F0aW9uT2JqZWN0VG9DbG9uZSh2ZXJPYmplY3QpIHtcbiAgdmVyT2JqZWN0LnNpZ25hdHVyZSA9IHZlck9iamVjdC5zaWduYXR1cmUucGFja2V0cztcbiAgcmV0dXJuIHZlck9iamVjdDtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgQ2xvbmUgLS0+IExpc3QgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIGNvcnJlY3QgcHJvdG90eXBlIGZyb20gYSBjb3JyZXNwb25kaW5nIHBhY2tldGxpc3QuXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgICB0aGUgb2JqZWN0IHBhc3NlZCB0byBhbmQgZnJvbSB0aGUgd2ViIHdvcmtlclxuICogQHBhcmFtICB7U3RyaW5nfSBtZXRob2QgICAgdGhlIHB1YmxpYyBhcGkgZnVuY3Rpb24gbmFtZSB0byBiZSBkZWxlZ2F0ZWQgdG8gdGhlIHdvcmtlclxuICogQHJldHVybnMge09iamVjdH0gICAgICAgICAgIGEgbXV0YXRlZCB2ZXJzaW9uIG9mIHRoZSBvcHRpb25zIG9wdGplY3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbG9uZWRQYWNrZXRzKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMucHVibGljS2V5cykge1xuICAgIG9wdGlvbnMucHVibGljS2V5cyA9IG9wdGlvbnMucHVibGljS2V5cy5tYXAocGFja2V0bGlzdENsb25lVG9LZXkpO1xuICB9XG4gIGlmIChvcHRpb25zLnByaXZhdGVLZXlzKSB7XG4gICAgb3B0aW9ucy5wcml2YXRlS2V5cyA9IG9wdGlvbnMucHJpdmF0ZUtleXMubWFwKHBhY2tldGxpc3RDbG9uZVRvS2V5KTtcbiAgfVxuICBpZiAob3B0aW9ucy5wcml2YXRlS2V5KSB7XG4gICAgb3B0aW9ucy5wcml2YXRlS2V5ID0gcGFja2V0bGlzdENsb25lVG9LZXkob3B0aW9ucy5wcml2YXRlS2V5KTtcbiAgfVxuICBpZiAob3B0aW9ucy5rZXkpIHtcbiAgICBvcHRpb25zLmtleSA9IHBhY2tldGxpc3RDbG9uZVRvS2V5KG9wdGlvbnMua2V5KTtcbiAgfVxuICBpZiAob3B0aW9ucy5tZXNzYWdlICYmIG9wdGlvbnMubWVzc2FnZS5zaWduYXR1cmUpIHtcbiAgICBvcHRpb25zLm1lc3NhZ2UgPSBwYWNrZXRsaXN0Q2xvbmVUb0NsZWFydGV4dE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICBvcHRpb25zLm1lc3NhZ2UgPSBwYWNrZXRsaXN0Q2xvbmVUb01lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlKTtcbiAgfVxuICBpZiAob3B0aW9ucy5zaWduYXR1cmVzKSB7XG4gICAgb3B0aW9ucy5zaWduYXR1cmVzID0gb3B0aW9ucy5zaWduYXR1cmVzLm1hcChwYWNrZXRsaXN0Q2xvbmVUb1NpZ25hdHVyZXMpO1xuICB9XG4gIGlmIChvcHRpb25zLnNpZ25hdHVyZSkge1xuICAgIG9wdGlvbnMuc2lnbmF0dXJlID0gcGFja2V0bGlzdENsb25lVG9TaWduYXR1cmUob3B0aW9ucy5zaWduYXR1cmUpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBwYWNrZXRsaXN0Q2xvbmVUb0tleShjbG9uZSkge1xuICB2YXIgcGFja2V0bGlzdCA9IF9wYWNrZXRsaXN0Mi5kZWZhdWx0LmZyb21TdHJ1Y3R1cmVkQ2xvbmUoY2xvbmUpO1xuICByZXR1cm4gbmV3IF9rZXkuS2V5KHBhY2tldGxpc3QpO1xufVxuXG5mdW5jdGlvbiBwYWNrZXRsaXN0Q2xvbmVUb01lc3NhZ2UoY2xvbmUpIHtcbiAgdmFyIHBhY2tldGxpc3QgPSBfcGFja2V0bGlzdDIuZGVmYXVsdC5mcm9tU3RydWN0dXJlZENsb25lKGNsb25lKTtcbiAgcmV0dXJuIG5ldyBfbWVzc2FnZS5NZXNzYWdlKHBhY2tldGxpc3QpO1xufVxuXG5mdW5jdGlvbiBwYWNrZXRsaXN0Q2xvbmVUb0NsZWFydGV4dE1lc3NhZ2UoY2xvbmUpIHtcbiAgdmFyIHBhY2tldGxpc3QgPSBfcGFja2V0bGlzdDIuZGVmYXVsdC5mcm9tU3RydWN0dXJlZENsb25lKGNsb25lLnNpZ25hdHVyZSk7XG4gIHJldHVybiBuZXcgX2NsZWFydGV4dC5DbGVhcnRleHRNZXNzYWdlKGNsb25lLnRleHQsIG5ldyBfc2lnbmF0dXJlLlNpZ25hdHVyZShwYWNrZXRsaXN0KSk7XG59XG5cbi8vdmVyaWZpY2F0aW9uIG9iamVjdHNcbmZ1bmN0aW9uIHBhY2tldGxpc3RDbG9uZVRvU2lnbmF0dXJlcyhjbG9uZSkge1xuICBjbG9uZS5rZXlpZCA9IF9rZXlpZDIuZGVmYXVsdC5mcm9tQ2xvbmUoY2xvbmUua2V5aWQpO1xuICBjbG9uZS5zaWduYXR1cmUgPSBuZXcgX3NpZ25hdHVyZS5TaWduYXR1cmUoY2xvbmUuc2lnbmF0dXJlKTtcbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiBwYWNrZXRsaXN0Q2xvbmVUb1NpZ25hdHVyZShjbG9uZSkge1xuICBpZiAoX3V0aWwyLmRlZmF1bHQuaXNTdHJpbmcoY2xvbmUpKSB7XG4gICAgLy9zaWduYXR1cmUgaXMgYXJtb3JlZFxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuICB2YXIgcGFja2V0bGlzdCA9IF9wYWNrZXRsaXN0Mi5kZWZhdWx0LmZyb21TdHJ1Y3R1cmVkQ2xvbmUoY2xvbmUpO1xuICByZXR1cm4gbmV3IF9zaWduYXR1cmUuU2lnbmF0dXJlKHBhY2tldGxpc3QpO1xufVxuXG59LHtcIi4uL2NsZWFydGV4dFwiOjMyMixcIi4uL2tleVwiOjM2MixcIi4uL21lc3NhZ2VcIjozNjYsXCIuLi9zaWduYXR1cmVcIjozOTEsXCIuLi90eXBlL2tleWlkXCI6Mzk0LFwiLi4vdXRpbFwiOjM5OCxcIi4vcGFja2V0bGlzdFwiOjM3Nn1dLDM3MDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcGFrbyA9IF9kZXJlcV8oJ3Bha28nKTtcblxudmFyIF9wYWtvMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bha28pO1xuXG52YXIgX2NvbmZpZyA9IF9kZXJlcV8oJy4uL2NvbmZpZycpO1xuXG52YXIgX2NvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25maWcpO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX2J6aXAyQnVpbGQgPSBfZGVyZXFfKCcuLi9jb21wcmVzc2lvbi9iemlwMi5idWlsZC5qcycpO1xuXG52YXIgX2J6aXAyQnVpbGQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnppcDJCdWlsZCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIENvbXByZXNzZWQgRGF0YSBQYWNrZXQgKFRhZyA4KVxuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuNnxSRkM0ODgwIDUuNn06XG4gKiBUaGUgQ29tcHJlc3NlZCBEYXRhIHBhY2tldCBjb250YWlucyBjb21wcmVzc2VkIGRhdGEuICBUeXBpY2FsbHksXG4gKiB0aGlzIHBhY2tldCBpcyBmb3VuZCBhcyB0aGUgY29udGVudHMgb2YgYW4gZW5jcnlwdGVkIHBhY2tldCwgb3IgZm9sbG93aW5nXG4gKiBhIFNpZ25hdHVyZSBvciBPbmUtUGFzcyBTaWduYXR1cmUgcGFja2V0LCBhbmQgY29udGFpbnMgYSBsaXRlcmFsIGRhdGEgcGFja2V0LlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBDb21wcmVzc2VkKCkge1xuICAvKipcbiAgICogUGFja2V0IHR5cGVcbiAgICogQHR5cGUge21vZHVsZTplbnVtcy5wYWNrZXR9XG4gICAqL1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuY29tcHJlc3NlZDtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcGFja2V0c1xuICAgKiBAdHlwZSB7bW9kdWxlOnBhY2tldC5MaXN0fVxuICAgKi9cbiAgdGhpcy5wYWNrZXRzID0gbnVsbDtcbiAgLyoqXG4gICAqIENvbXByZXNzaW9uIGFsZ29yaXRobVxuICAgKiBAdHlwZSB7Y29tcHJlc3Npb259XG4gICAqL1xuICB0aGlzLmFsZ29yaXRobSA9ICd6aXAnO1xuXG4gIC8qKlxuICAgKiBDb21wcmVzc2VkIHBhY2tldCBkYXRhXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICB0aGlzLmNvbXByZXNzZWQgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNpbmcgZnVuY3Rpb24gZm9yIHRoZSBwYWNrZXQuXG4gKiBAcGFyYW0ge1N0cmluZ30gYnl0ZXMgUGF5bG9hZCBvZiBhIHRhZyA4IHBhY2tldFxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyBwYWtvXG4gKiBAcmVxdWlyZXMgY29uZmlnXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAcmVxdWlyZXMgY29tcHJlc3Npb24vYnppcDJcbiAqL1xuXG5Db21wcmVzc2VkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIC8vIE9uZSBvY3RldCB0aGF0IGdpdmVzIHRoZSBhbGdvcml0aG0gdXNlZCB0byBjb21wcmVzcyB0aGUgcGFja2V0LlxuICB0aGlzLmFsZ29yaXRobSA9IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5jb21wcmVzc2lvbiwgYnl0ZXNbMF0pO1xuXG4gIC8vIENvbXByZXNzZWQgZGF0YSwgd2hpY2ggbWFrZXMgdXAgdGhlIHJlbWFpbmRlciBvZiB0aGUgcGFja2V0LlxuICB0aGlzLmNvbXByZXNzZWQgPSBieXRlcy5zdWJhcnJheSgxLCBieXRlcy5sZW5ndGgpO1xuXG4gIHRoaXMuZGVjb21wcmVzcygpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNvbXByZXNzZWQgcGFja2V0LlxuICogQHJldHVybnMge1N0cmluZ30gYmluYXJ5IGNvbXByZXNzZWQgcGFja2V0XG4gKi9cbkNvbXByZXNzZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jb21wcmVzc2VkID09PSBudWxsKSB7XG4gICAgdGhpcy5jb21wcmVzcygpO1xuICB9XG5cbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW25ldyBVaW50OEFycmF5KFtfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmNvbXByZXNzaW9uLCB0aGlzLmFsZ29yaXRobSldKSwgdGhpcy5jb21wcmVzc2VkXSk7XG59O1xuXG4vKipcbiAqIERlY29tcHJlc3Npb24gbWV0aG9kIGZvciBkZWNvbXByZXNzaW5nIHRoZSBjb21wcmVzc2VkIGRhdGFcbiAqIHJlYWQgYnkgcmVhZF9wYWNrZXRcbiAqL1xuQ29tcHJlc3NlZC5wcm90b3R5cGUuZGVjb21wcmVzcyA9IGZ1bmN0aW9uICgpIHtcblxuICBpZiAoIWRlY29tcHJlc3NfZm5zW3RoaXMuYWxnb3JpdGhtXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXByZXNzaW9uIGFsZ29yaXRobSB1bmtub3duIDpcIiArIHRoaXMuYWxnb3JpdGhtKTtcbiAgfVxuXG4gIHRoaXMucGFja2V0cy5yZWFkKGRlY29tcHJlc3NfZm5zW3RoaXMuYWxnb3JpdGhtXSh0aGlzLmNvbXByZXNzZWQpKTtcbn07XG5cbi8qKlxuICogQ29tcHJlc3MgdGhlIHBhY2tldCBkYXRhIChtZW1iZXIgZGVjb21wcmVzc2VkRGF0YSlcbiAqL1xuQ29tcHJlc3NlZC5wcm90b3R5cGUuY29tcHJlc3MgPSBmdW5jdGlvbiAoKSB7XG5cbiAgaWYgKCFjb21wcmVzc19mbnNbdGhpcy5hbGdvcml0aG1dKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVua25vd24gOlwiICsgdGhpcy5hbGdvcml0aG0pO1xuICB9XG5cbiAgdGhpcy5jb21wcmVzc2VkID0gY29tcHJlc3NfZm5zW3RoaXMuYWxnb3JpdGhtXSh0aGlzLnBhY2tldHMud3JpdGUoKSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDb21wcmVzc2VkO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgSGVscGVyIGZ1bmN0aW9ucyAgIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG52YXIgbm9kZVpsaWIgPSBfdXRpbDIuZGVmYXVsdC5nZXROb2RlWmxpYigpO1xuXG5mdW5jdGlvbiBub2RlX3psaWIoZnVuYykge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgcmV0dXJuIGZ1bmMoZGF0YSwgb3B0aW9ucyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBha29femxpYihjb25zdHJ1Y3Rvcikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIG9iaiA9IG5ldyBjb25zdHJ1Y3RvcihvcHRpb25zKTtcbiAgICBvYmoucHVzaChkYXRhLCB0cnVlKTtcbiAgICByZXR1cm4gb2JqLnJlc3VsdDtcbiAgfTtcbn1cblxudmFyIGNvbXByZXNzX2ZucyA9IHZvaWQgMDtcbnZhciBkZWNvbXByZXNzX2ZucyA9IHZvaWQgMDtcbmlmIChub2RlWmxpYikge1xuICAvLyBVc2UgTm9kZSBuYXRpdmUgemxpYiBmb3IgREVGTEFURSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uXG4gIGNvbXByZXNzX2ZucyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc3luY1xuICAgIHppcDogbm9kZV96bGliKG5vZGVabGliLmRlZmxhdGVSYXdTeW5jLCB7IGxldmVsOiBfY29uZmlnMi5kZWZhdWx0LmRlZmxhdGVfbGV2ZWwgfSksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXN5bmNcbiAgICB6bGliOiBub2RlX3psaWIobm9kZVpsaWIuZGVmbGF0ZVN5bmMsIHsgbGV2ZWw6IF9jb25maWcyLmRlZmF1bHQuZGVmbGF0ZV9sZXZlbCB9KSxcbiAgICBiemlwMjogX2J6aXAyQnVpbGQyLmRlZmF1bHQuY29tcHJlc3NGaWxlXG4gIH07XG5cbiAgZGVjb21wcmVzc19mbnMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXN5bmNcbiAgICB6aXA6IG5vZGVfemxpYihub2RlWmxpYi5pbmZsYXRlUmF3U3luYyksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXN5bmNcbiAgICB6bGliOiBub2RlX3psaWIobm9kZVpsaWIuaW5mbGF0ZVN5bmMpLFxuICAgIGJ6aXAyOiBfYnppcDJCdWlsZDIuZGVmYXVsdC5kZWNvbXByZXNzRmlsZVxuICB9O1xufSBlbHNlIHtcbiAgLy8gVXNlIEpTIGZhbGxiYWNrc1xuICBjb21wcmVzc19mbnMgPSB7XG4gICAgemlwOiBwYWtvX3psaWIoX3Bha28yLmRlZmF1bHQuRGVmbGF0ZSwgeyByYXc6IHRydWUsIGxldmVsOiBfY29uZmlnMi5kZWZhdWx0LmRlZmxhdGVfbGV2ZWwgfSksXG4gICAgemxpYjogcGFrb196bGliKF9wYWtvMi5kZWZhdWx0LkRlZmxhdGUsIHsgbGV2ZWw6IF9jb25maWcyLmRlZmF1bHQuZGVmbGF0ZV9sZXZlbCB9KSxcbiAgICBiemlwMjogX2J6aXAyQnVpbGQyLmRlZmF1bHQuY29tcHJlc3NGaWxlXG4gIH07XG5cbiAgZGVjb21wcmVzc19mbnMgPSB7XG4gICAgemlwOiBwYWtvX3psaWIoX3Bha28yLmRlZmF1bHQuSW5mbGF0ZSwgeyByYXc6IHRydWUgfSksXG4gICAgemxpYjogcGFrb196bGliKF9wYWtvMi5kZWZhdWx0LkluZmxhdGUpLFxuICAgIGJ6aXAyOiBfYnppcDJCdWlsZDIuZGVmYXVsdC5kZWNvbXByZXNzRmlsZVxuICB9O1xufVxuXG59LHtcIi4uL2NvbXByZXNzaW9uL2J6aXAyLmJ1aWxkLmpzXCI6MzIzLFwiLi4vY29uZmlnXCI6MzI1LFwiLi4vZW51bXNcIjozNTksXCIuLi91dGlsXCI6Mzk4LFwicGFrb1wiOjMwMX1dLDM3MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfYXNzaWduID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24nKTtcblxudmFyIF9hc3NpZ24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXNzaWduKTtcblxudmFyIF9hbGxfcGFja2V0cyA9IF9kZXJlcV8oJy4vYWxsX3BhY2tldHMnKTtcblxudmFyIHBhY2tldHMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfYWxsX3BhY2tldHMpO1xuXG52YXIgX2Nsb25lID0gX2RlcmVxXygnLi9jbG9uZScpO1xuXG52YXIgY2xvbmUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfY2xvbmUpO1xuXG52YXIgX3BhY2tldGxpc3QgPSBfZGVyZXFfKCcuL3BhY2tldGxpc3QnKTtcblxudmFyIF9wYWNrZXRsaXN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhY2tldGxpc3QpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgbW9kID0ge1xuICBMaXN0OiBfcGFja2V0bGlzdDIuZGVmYXVsdCxcbiAgY2xvbmU6IGNsb25lXG59OyAvKipcbiAgICAqIEBmaWxlb3ZlcnZpZXcgT3BlblBHUCBwYWNrZXQgdHlwZXNcbiAgICAqIEBzZWUgbW9kdWxlOnBhY2tldC9hbGxfcGFja2V0c1xuICAgICogQHNlZSBtb2R1bGU6cGFja2V0L2Nsb25lXG4gICAgKiBAc2VlIG1vZHVsZTpwYWNrZXQuTGlzdFxuICAgICogQG1vZHVsZSBwYWNrZXRcbiAgICAqL1xuXG4oMCwgX2Fzc2lnbjIuZGVmYXVsdCkobW9kLCBwYWNrZXRzKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gbW9kO1xuXG59LHtcIi4vYWxsX3BhY2tldHNcIjozNjgsXCIuL2Nsb25lXCI6MzY5LFwiLi9wYWNrZXRsaXN0XCI6Mzc2LFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ25cIjoyNH1dLDM3MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIExpdGVyYWwgRGF0YSBQYWNrZXQgKFRhZyAxMSlcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi01Ljl8UkZDNDg4MCA1Ljl9OlxuICogQSBMaXRlcmFsIERhdGEgcGFja2V0IGNvbnRhaW5zIHRoZSBib2R5IG9mIGEgbWVzc2FnZTsgZGF0YSB0aGF0IGlzIG5vdCB0byBiZVxuICogZnVydGhlciBpbnRlcnByZXRlZC5cbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgbGl0ZXJhbCBwYWNrYWdlXG4gKiBAbWVtYmVyb2YgbW9kdWxlOnBhY2tldFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICovXG5cbmZ1bmN0aW9uIExpdGVyYWwoKSB7XG4gIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBuZXcgRGF0ZSgpO1xuXG4gIHRoaXMudGFnID0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5saXRlcmFsO1xuICB0aGlzLmZvcm1hdCA9ICd1dGY4JzsgLy8gZGVmYXVsdCBmb3JtYXQgZm9yIGxpdGVyYWwgZGF0YSBwYWNrZXRzXG4gIHRoaXMuZGF0ZSA9IF91dGlsMi5kZWZhdWx0Lm5vcm1hbGl6ZURhdGUoZGF0ZSk7XG4gIHRoaXMudGV4dCA9IG51bGw7IC8vIHRleHR1YWwgZGF0YSByZXByZXNlbnRhdGlvblxuICB0aGlzLmRhdGEgPSBudWxsOyAvLyBsaXRlcmFsIGRhdGEgcmVwcmVzZW50YXRpb25cbiAgdGhpcy5maWxlbmFtZSA9ICdtc2cudHh0Jztcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHBhY2tldCBkYXRhIHRvIGEgamF2YXNjcmlwdCBuYXRpdmUgc3RyaW5nLCBlbmQgb2YgbGluZVxuICogd2lsbCBiZSBub3JtYWxpemVkIHRvIFxcclxcbiBhbmQgYnkgZGVmYXVsdCB0ZXh0IGlzIGNvbnZlcnRlZCB0byBVVEY4XG4gKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBBbnkgbmF0aXZlIGphdmFzY3JpcHQgc3RyaW5nXG4gKiBAcGFyYW0ge3V0Zjh8YmluYXJ5fHRleHR8bWltZX0gZm9ybWF0IChvcHRpb25hbCkgVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIG9mIGJ5dGVzXG4gKi9cbkxpdGVyYWwucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICB2YXIgZm9ybWF0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAndXRmOCc7XG5cbiAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZGF0YSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJldHVybnMgbGl0ZXJhbCBkYXRhIHBhY2tldHMgYXMgbmF0aXZlIEphdmFTY3JpcHQgc3RyaW5nXG4gKiB3aXRoIG5vcm1hbGl6ZWQgZW5kIG9mIGxpbmUgdG8gXFxuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBsaXRlcmFsIGRhdGEgYXMgdGV4dFxuICovXG5MaXRlcmFsLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50ZXh0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgfVxuICAvLyBkZWNvZGUgVVRGOFxuICB2YXIgdGV4dCA9IF91dGlsMi5kZWZhdWx0LmRlY29kZV91dGY4KF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKHRoaXMuZGF0YSkpO1xuICAvLyBub3JtYWxpemUgRU9MIHRvIFxcblxuICB0aGlzLnRleHQgPSBfdXRpbDIuZGVmYXVsdC5uYXRpdmVFT0wodGV4dCk7XG4gIHJldHVybiB0aGlzLnRleHQ7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFja2V0IGRhdGEgdG8gdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIHByb3ZpZGVkIHN0cmluZyBvZiBieXRlcy5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgVGhlIHN0cmluZyBvZiBieXRlc1xuICogQHBhcmFtIHt1dGY4fGJpbmFyeXx0ZXh0fG1pbWV9IGZvcm1hdCBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgb2YgYnl0ZXNcbiAqL1xuTGl0ZXJhbC5wcm90b3R5cGUuc2V0Qnl0ZXMgPSBmdW5jdGlvbiAoYnl0ZXMsIGZvcm1hdCkge1xuICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgdGhpcy5kYXRhID0gYnl0ZXM7XG4gIHRoaXMudGV4dCA9IG51bGw7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIGxpdGVyYWwgcGFja2V0IGRhdGFcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBBIHNlcXVlbmNlIG9mIGJ5dGVzXG4gKi9cbkxpdGVyYWwucHJvdG90eXBlLmdldEJ5dGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGV4dE1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gIGlmICh0aGlzLmRhdGEgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgaWYgKHRleHRNb2RlKSB7XG4gICAgLy8gbm9ybWFsaXplIEVPTCB0byBcXHJcXG4gYW5kIFVURi04IGVuY29kZVxuICAgIHRoaXMuZGF0YSA9IF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KF91dGlsMi5kZWZhdWx0LmVuY29kZV91dGY4KF91dGlsMi5kZWZhdWx0LmNhbm9uaWNhbGl6ZUVPTCh0aGlzLnRleHQpKSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5kYXRhID0gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkodGhpcy50ZXh0KTtcbiAgfVxuICByZXR1cm4gdGhpcy5kYXRhO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBmaWxlbmFtZSBvZiB0aGUgbGl0ZXJhbCBwYWNrZXQgZGF0YVxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lIEFueSBuYXRpdmUgamF2YXNjcmlwdCBzdHJpbmdcbiAqL1xuTGl0ZXJhbC5wcm90b3R5cGUuc2V0RmlsZW5hbWUgPSBmdW5jdGlvbiAoZmlsZW5hbWUpIHtcbiAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBsaXRlcmFsIHBhY2tldCBkYXRhXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmaWxlbmFtZVxuICovXG5MaXRlcmFsLnByb3RvdHlwZS5nZXRGaWxlbmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZmlsZW5hbWU7XG59O1xuXG4vKipcbiAqIFBhcnNpbmcgZnVuY3Rpb24gZm9yIGEgbGl0ZXJhbCBkYXRhIHBhY2tldCAodGFnIDExKS5cbiAqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0IFBheWxvYWQgb2YgYSB0YWcgMTEgcGFja2V0XG4gKiBAcmV0dXJucyB7bW9kdWxlOnBhY2tldC5MaXRlcmFsfSBvYmplY3QgcmVwcmVzZW50YXRpb25cbiAqL1xuTGl0ZXJhbC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAvLyAtIEEgb25lLW9jdGV0IGZpZWxkIHRoYXQgZGVzY3JpYmVzIGhvdyB0aGUgZGF0YSBpcyBmb3JtYXR0ZWQuXG4gIHZhciBmb3JtYXQgPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQubGl0ZXJhbCwgYnl0ZXNbMF0pO1xuXG4gIHZhciBmaWxlbmFtZV9sZW4gPSBieXRlc1sxXTtcbiAgdGhpcy5maWxlbmFtZSA9IF91dGlsMi5kZWZhdWx0LmRlY29kZV91dGY4KF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKGJ5dGVzLnN1YmFycmF5KDIsIDIgKyBmaWxlbmFtZV9sZW4pKSk7XG5cbiAgdGhpcy5kYXRlID0gX3V0aWwyLmRlZmF1bHQucmVhZERhdGUoYnl0ZXMuc3ViYXJyYXkoMiArIGZpbGVuYW1lX2xlbiwgMiArIGZpbGVuYW1lX2xlbiArIDQpKTtcblxuICB2YXIgZGF0YSA9IGJ5dGVzLnN1YmFycmF5KDYgKyBmaWxlbmFtZV9sZW4sIGJ5dGVzLmxlbmd0aCk7XG5cbiAgdGhpcy5zZXRCeXRlcyhkYXRhLCBmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYWNrZXRcbiAqXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVWludDhBcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFja2V0XG4gKi9cbkxpdGVyYWwucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZmlsZW5hbWUgPSBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShfdXRpbDIuZGVmYXVsdC5lbmNvZGVfdXRmOCh0aGlzLmZpbGVuYW1lKSk7XG4gIHZhciBmaWxlbmFtZV9sZW5ndGggPSBuZXcgVWludDhBcnJheShbZmlsZW5hbWUubGVuZ3RoXSk7XG5cbiAgdmFyIGZvcm1hdCA9IG5ldyBVaW50OEFycmF5KFtfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmxpdGVyYWwsIHRoaXMuZm9ybWF0KV0pO1xuICB2YXIgZGF0ZSA9IF91dGlsMi5kZWZhdWx0LndyaXRlRGF0ZSh0aGlzLmRhdGUpO1xuICB2YXIgZGF0YSA9IHRoaXMuZ2V0Qnl0ZXMoZm9ybWF0ICE9PSAnYmluYXJ5Jyk7XG5cbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW2Zvcm1hdCwgZmlsZW5hbWVfbGVuZ3RoLCBmaWxlbmFtZSwgZGF0ZSwgZGF0YV0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gTGl0ZXJhbDtcblxufSx7XCIuLi9lbnVtc1wiOjM1OSxcIi4uL3V0aWxcIjozOTh9XSwzNzM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIHN0cmFuZ2UgXCJNYXJrZXIgcGFja2V0XCIgKFRhZyAxMClcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi01Ljh8UkZDNDg4MCA1Ljh9OlxuICogQW4gZXhwZXJpbWVudGFsIHZlcnNpb24gb2YgUEdQIHVzZWQgdGhpcyBwYWNrZXQgYXMgdGhlIExpdGVyYWxcbiAqIHBhY2tldCwgYnV0IG5vIHJlbGVhc2VkIHZlcnNpb24gb2YgUEdQIGdlbmVyYXRlZCBMaXRlcmFsIHBhY2tldHMgd2l0aCB0aGlzXG4gKiB0YWcuIFdpdGggUEdQIDUueCwgdGhpcyBwYWNrZXQgaGFzIGJlZW4gcmVhc3NpZ25lZCBhbmQgaXMgcmVzZXJ2ZWQgZm9yIHVzZSBhc1xuICogdGhlIE1hcmtlciBwYWNrZXQuXG4gKlxuICogU3VjaCBhIHBhY2tldCBNVVNUIGJlIGlnbm9yZWQgd2hlbiByZWNlaXZlZC5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gTWFya2VyKCkge1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQubWFya2VyO1xufVxuXG4vKipcbiAqIFBhcnNpbmcgZnVuY3Rpb24gZm9yIGEgbGl0ZXJhbCBkYXRhIHBhY2tldCAodGFnIDEwKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgUGF5bG9hZCBvZiBhIHRhZyAxMCBwYWNrZXRcbiAqIEBwYXJhbSB7SW50ZWdlcn0gcG9zaXRpb25cbiAqICAgICAgICAgICAgUG9zaXRpb24gdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzdHJpbmdcbiAqIEBwYXJhbSB7SW50ZWdlcn0gbGVuXG4gKiAgICAgICAgICAgIExlbmd0aCBvZiB0aGUgcGFja2V0IG9yIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mXG4gKiAgICAgICAgICAgIGlucHV0IGF0IHBvc2l0aW9uXG4gKiBAcmV0dXJucyB7bW9kdWxlOnBhY2tldC5NYXJrZXJ9IE9iamVjdCByZXByZXNlbnRhdGlvblxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyBlbnVtc1xuICovXG5cbk1hcmtlci5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICBpZiAoYnl0ZXNbMF0gPT09IDB4NTAgJiYgLy8gUFxuICBieXRlc1sxXSA9PT0gMHg0NyAmJiAvLyBHXG4gIGJ5dGVzWzJdID09PSAweDUwKSB7XG4gICAgLy8gUFxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIG1hcmtlciBwYWNrZXQgZG9lcyBub3QgY29udGFpbiBcIlBHUFwiXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IE1hcmtlcjtcblxufSx7XCIuLi9lbnVtc1wiOjM1OX1dLDM3NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfa2V5aWQgPSBfZGVyZXFfKCcuLi90eXBlL2tleWlkJyk7XG5cbnZhciBfa2V5aWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2V5aWQpO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBPbmUtUGFzcyBTaWduYXR1cmUgUGFja2V0cyAoVGFnIDQpXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tNS40fFJGQzQ4ODAgNS40fTpcbiAqIFRoZSBPbmUtUGFzcyBTaWduYXR1cmUgcGFja2V0IHByZWNlZGVzIHRoZSBzaWduZWQgZGF0YSBhbmQgY29udGFpbnNcbiAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBhbGxvdyB0aGUgcmVjZWl2ZXIgdG8gYmVnaW4gY2FsY3VsYXRpbmcgYW55XG4gKiBoYXNoZXMgbmVlZGVkIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlLiAgSXQgYWxsb3dzIHRoZSBTaWduYXR1cmVcbiAqIHBhY2tldCB0byBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSwgc28gdGhhdCB0aGUgc2lnbmVyXG4gKiBjYW4gY29tcHV0ZSB0aGUgZW50aXJlIHNpZ25lZCBtZXNzYWdlIGluIG9uZSBwYXNzLlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBPbmVQYXNzU2lnbmF0dXJlKCkge1xuICAvKipcbiAgICogUGFja2V0IHR5cGVcbiAgICogQHR5cGUge21vZHVsZTplbnVtcy5wYWNrZXR9XG4gICAqL1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQub25lUGFzc1NpZ25hdHVyZTtcbiAgLyoqIEEgb25lLW9jdGV0IHZlcnNpb24gbnVtYmVyLiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAzLiAqL1xuICB0aGlzLnZlcnNpb24gPSBudWxsO1xuICAvKipcbiAgICogQSBvbmUtb2N0ZXQgc2lnbmF0dXJlIHR5cGUuXG4gICAqIFNpZ25hdHVyZSB0eXBlcyBhcmUgZGVzY3JpYmVkIGluXG4gICAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuMi4xfFJGQzQ4ODAgU2VjdGlvbiA1LjIuMX0uXG4gICAqL1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICAvKipcbiAgICogQSBvbmUtb2N0ZXQgbnVtYmVyIGRlc2NyaWJpbmcgdGhlIGhhc2ggYWxnb3JpdGhtIHVzZWQuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS40fFJGQzQ4ODAgOS40fVxuICAgKi9cbiAgdGhpcy5oYXNoQWxnb3JpdGhtID0gbnVsbDtcbiAgLyoqXG4gICAqIEEgb25lLW9jdGV0IG51bWJlciBkZXNjcmliaW5nIHRoZSBwdWJsaWMta2V5IGFsZ29yaXRobSB1c2VkLlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTkuMXxSRkM0ODgwIDkuMX1cbiAgICovXG4gIHRoaXMucHVibGljS2V5QWxnb3JpdGhtID0gbnVsbDtcbiAgLyoqIEFuIGVpZ2h0LW9jdGV0IG51bWJlciBob2xkaW5nIHRoZSBLZXkgSUQgb2YgdGhlIHNpZ25pbmcga2V5LiAqL1xuICB0aGlzLnNpZ25pbmdLZXlJZCA9IG51bGw7XG4gIC8qKlxuICAgKiBBIG9uZS1vY3RldCBudW1iZXIgaG9sZGluZyBhIGZsYWcgc2hvd2luZyB3aGV0aGVyIHRoZSBzaWduYXR1cmUgaXMgbmVzdGVkLlxuICAgKiBBIHplcm8gdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgcGFja2V0IGlzIGFub3RoZXIgT25lLVBhc3MgU2lnbmF0dXJlIHBhY2tldFxuICAgKiB0aGF0IGRlc2NyaWJlcyBhbm90aGVyIHNpZ25hdHVyZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIG1lc3NhZ2UgZGF0YS5cbiAgICovXG4gIHRoaXMuZmxhZ3MgPSBudWxsO1xufVxuXG4vKipcbiAqIHBhcnNpbmcgZnVuY3Rpb24gZm9yIGEgb25lLXBhc3Mgc2lnbmF0dXJlIHBhY2tldCAodGFnIDQpLlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyBwYXlsb2FkIG9mIGEgdGFnIDQgcGFja2V0XG4gKiBAcmV0dXJucyB7bW9kdWxlOnBhY2tldC5PbmVQYXNzU2lnbmF0dXJlfSBvYmplY3QgcmVwcmVzZW50YXRpb25cbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgdHlwZS9rZXlpZFxuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuKi9cblxuT25lUGFzc1NpZ25hdHVyZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICB2YXIgbXlwb3MgPSAwO1xuICAvLyBBIG9uZS1vY3RldCB2ZXJzaW9uIG51bWJlci4gIFRoZSBjdXJyZW50IHZlcnNpb24gaXMgMy5cbiAgdGhpcy52ZXJzaW9uID0gYnl0ZXNbbXlwb3MrK107XG5cbiAgLy8gQSBvbmUtb2N0ZXQgc2lnbmF0dXJlIHR5cGUuICBTaWduYXR1cmUgdHlwZXMgYXJlIGRlc2NyaWJlZCBpblxuICAvLyAgIFNlY3Rpb24gNS4yLjEuXG4gIHRoaXMudHlwZSA9IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUsIGJ5dGVzW215cG9zKytdKTtcblxuICAvLyBBIG9uZS1vY3RldCBudW1iZXIgZGVzY3JpYmluZyB0aGUgaGFzaCBhbGdvcml0aG0gdXNlZC5cbiAgdGhpcy5oYXNoQWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0Lmhhc2gsIGJ5dGVzW215cG9zKytdKTtcblxuICAvLyBBIG9uZS1vY3RldCBudW1iZXIgZGVzY3JpYmluZyB0aGUgcHVibGljLWtleSBhbGdvcml0aG0gdXNlZC5cbiAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBieXRlc1tteXBvcysrXSk7XG5cbiAgLy8gQW4gZWlnaHQtb2N0ZXQgbnVtYmVyIGhvbGRpbmcgdGhlIEtleSBJRCBvZiB0aGUgc2lnbmluZyBrZXkuXG4gIHRoaXMuc2lnbmluZ0tleUlkID0gbmV3IF9rZXlpZDIuZGVmYXVsdCgpO1xuICB0aGlzLnNpZ25pbmdLZXlJZC5yZWFkKGJ5dGVzLnN1YmFycmF5KG15cG9zLCBteXBvcyArIDgpKTtcbiAgbXlwb3MgKz0gODtcblxuICAvLyBBIG9uZS1vY3RldCBudW1iZXIgaG9sZGluZyBhIGZsYWcgc2hvd2luZyB3aGV0aGVyIHRoZSBzaWduYXR1cmVcbiAgLy8gICBpcyBuZXN0ZWQuICBBIHplcm8gdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgcGFja2V0IGlzXG4gIC8vICAgYW5vdGhlciBPbmUtUGFzcyBTaWduYXR1cmUgcGFja2V0IHRoYXQgZGVzY3JpYmVzIGFub3RoZXJcbiAgLy8gICBzaWduYXR1cmUgdG8gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBtZXNzYWdlIGRhdGEuXG4gIHRoaXMuZmxhZ3MgPSBieXRlc1tteXBvcysrXTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIGNyZWF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBvbmUtcGFzcyBzaWduYXR1cmUgcGFja2V0XG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gYSBVaW50OEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGEgb25lLXBhc3Mgc2lnbmF0dXJlIHBhY2tldFxuICovXG5PbmVQYXNzU2lnbmF0dXJlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXJ0ID0gbmV3IFVpbnQ4QXJyYXkoWzMsIF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLCB0aGlzLnR5cGUpLCBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0Lmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobSksIF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCB0aGlzLnB1YmxpY0tleUFsZ29yaXRobSldKTtcblxuICB2YXIgZW5kID0gbmV3IFVpbnQ4QXJyYXkoW3RoaXMuZmxhZ3NdKTtcblxuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbc3RhcnQsIHRoaXMuc2lnbmluZ0tleUlkLndyaXRlKCksIGVuZF0pO1xufTtcblxuLyoqXG4gKiBGaXggY3VzdG9tIHR5cGVzIGFmdGVyIGNsb25pbmdcbiAqL1xuT25lUGFzc1NpZ25hdHVyZS5wcm90b3R5cGUucG9zdENsb25lVHlwZUZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zaWduaW5nS2V5SWQgPSBfa2V5aWQyLmRlZmF1bHQuZnJvbUNsb25lKHRoaXMuc2lnbmluZ0tleUlkKTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IE9uZVBhc3NTaWduYXR1cmU7XG5cbn0se1wiLi4vZW51bXNcIjozNTksXCIuLi90eXBlL2tleWlkXCI6Mzk0LFwiLi4vdXRpbFwiOjM5OH1dLDM3NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zbGljZWRUb0FycmF5MiA9IF9kZXJlcV8oXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiKTtcblxudmFyIF9zbGljZWRUb0FycmF5MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NsaWNlZFRvQXJyYXkyKTtcblxudmFyIF91dGlsID0gX2RlcmVxXyhcIi4uL3V0aWxcIik7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICByZWFkU2ltcGxlTGVuZ3RoOiBmdW5jdGlvbiByZWFkU2ltcGxlTGVuZ3RoKGJ5dGVzKSB7XG4gICAgdmFyIGxlbiA9IDA7XG4gICAgdmFyIG9mZnNldCA9IHZvaWQgMDtcbiAgICB2YXIgdHlwZSA9IGJ5dGVzWzBdO1xuXG4gICAgaWYgKHR5cGUgPCAxOTIpIHtcbiAgICAgIHZhciBfYnl0ZXMgPSAoMCwgX3NsaWNlZFRvQXJyYXkzLmRlZmF1bHQpKGJ5dGVzLCAxKTtcblxuICAgICAgbGVuID0gX2J5dGVzWzBdO1xuXG4gICAgICBvZmZzZXQgPSAxO1xuICAgIH0gZWxzZSBpZiAodHlwZSA8IDI1NSkge1xuICAgICAgbGVuID0gKGJ5dGVzWzBdIC0gMTkyIDw8IDgpICsgYnl0ZXNbMV0gKyAxOTI7XG4gICAgICBvZmZzZXQgPSAyO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gMjU1KSB7XG4gICAgICBsZW4gPSBfdXRpbDIuZGVmYXVsdC5yZWFkTnVtYmVyKGJ5dGVzLnN1YmFycmF5KDEsIDEgKyA0KSk7XG4gICAgICBvZmZzZXQgPSA1O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZW46IGxlbixcbiAgICAgIG9mZnNldDogb2Zmc2V0XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogRW5jb2RlcyBhIGdpdmVuIGludGVnZXIgb2YgbGVuZ3RoIHRvIHRoZSBvcGVucGdwIGxlbmd0aCBzcGVjaWZpZXIgdG8gYVxuICAgKiBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBsZW5ndGggVGhlIGxlbmd0aCB0byBlbmNvZGVcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IFN0cmluZyB3aXRoIG9wZW5wZ3AgbGVuZ3RoIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuICB3cml0ZVNpbXBsZUxlbmd0aDogZnVuY3Rpb24gd3JpdGVTaW1wbGVMZW5ndGgobGVuZ3RoKSB7XG4gICAgaWYgKGxlbmd0aCA8IDE5Mikge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtsZW5ndGhdKTtcbiAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDE5MSAmJiBsZW5ndGggPCA4Mzg0KSB7XG4gICAgICAvKlxuICAgICAgICogbGV0IGEgPSAodG90YWwgZGF0YSBwYWNrZXQgbGVuZ3RoKSAtIDE5MiBsZXQgYmMgPSB0d28gb2N0ZXRcbiAgICAgICAqIHJlcHJlc2VudGF0aW9uIG9mIGEgbGV0IGQgPSBiICsgMTkyXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShbKGxlbmd0aCAtIDE5MiA+PiA4KSArIDE5MiwgbGVuZ3RoIC0gMTkyICYgMHhGRl0pO1xuICAgIH1cbiAgICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoWzI1NV0pLCBfdXRpbDIuZGVmYXVsdC53cml0ZU51bWJlcihsZW5ndGgsIDQpXSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdyaXRlcyBhIHBhY2tldCBoZWFkZXIgdmVyc2lvbiA0IHdpdGggdGhlIGdpdmVuIHRhZ190eXBlIGFuZCBsZW5ndGggdG8gYVxuICAgKiBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSB0YWdfdHlwZSBUYWcgdHlwZVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGxlbmd0aCBMZW5ndGggb2YgdGhlIHBheWxvYWRcbiAgICogQHJldHVybnMge1N0cmluZ30gU3RyaW5nIG9mIHRoZSBoZWFkZXJcbiAgICovXG4gIHdyaXRlSGVhZGVyOiBmdW5jdGlvbiB3cml0ZUhlYWRlcih0YWdfdHlwZSwgbGVuZ3RoKSB7XG4gICAgLyogd2UncmUgb25seSBnZW5lcmF0aW5nIHY0IHBhY2tldCBoZWFkZXJzIGhlcmUgKi9cbiAgICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoWzB4QzAgfCB0YWdfdHlwZV0pLCB0aGlzLndyaXRlU2ltcGxlTGVuZ3RoKGxlbmd0aCldKTtcbiAgfSxcblxuICAvKipcbiAgICogV3JpdGVzIGEgcGFja2V0IGhlYWRlciBWZXJzaW9uIDMgd2l0aCB0aGUgZ2l2ZW4gdGFnX3R5cGUgYW5kIGxlbmd0aCB0byBhXG4gICAqIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHRhZ190eXBlIFRhZyB0eXBlXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gbGVuZ3RoIExlbmd0aCBvZiB0aGUgcGF5bG9hZFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBTdHJpbmcgb2YgdGhlIGhlYWRlclxuICAgKi9cbiAgd3JpdGVPbGRIZWFkZXI6IGZ1bmN0aW9uIHdyaXRlT2xkSGVhZGVyKHRhZ190eXBlLCBsZW5ndGgpIHtcbiAgICBpZiAobGVuZ3RoIDwgMjU2KSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzB4ODAgfCB0YWdfdHlwZSA8PCAyLCBsZW5ndGhdKTtcbiAgICB9IGVsc2UgaWYgKGxlbmd0aCA8IDY1NTM2KSB7XG4gICAgICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoWzB4ODAgfCB0YWdfdHlwZSA8PCAyIHwgMV0pLCBfdXRpbDIuZGVmYXVsdC53cml0ZU51bWJlcihsZW5ndGgsIDIpXSk7XG4gICAgfVxuICAgIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtuZXcgVWludDhBcnJheShbMHg4MCB8IHRhZ190eXBlIDw8IDIgfCAyXSksIF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKGxlbmd0aCwgNCldKTtcbiAgfSxcblxuICAvKipcbiAgICogR2VuZXJpYyBzdGF0aWMgUGFja2V0IFBhcnNlciBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgSW5wdXQgc3RyZWFtIGFzIHN0cmluZ1xuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHBvc2l0aW9uIFBvc2l0aW9uIHRvIHN0YXJ0IHBhcnNpbmdcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSBsZW4gTGVuZ3RoIG9mIHRoZSBpbnB1dCBmcm9tIHBvc2l0aW9uIG9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBwYXJzZWQgbW9kdWxlOnBhY2tldC9wYWNrZXRcbiAgICovXG4gIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoaW5wdXQsIHBvc2l0aW9uLCBsZW4pIHtcbiAgICAvLyBzb21lIHNhbml0eSBjaGVja3NcbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgaW5wdXQubGVuZ3RoIDw9IHBvc2l0aW9uIHx8IGlucHV0LnN1YmFycmF5KHBvc2l0aW9uLCBpbnB1dC5sZW5ndGgpLmxlbmd0aCA8IDIgfHwgKGlucHV0W3Bvc2l0aW9uXSAmIDB4ODApID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBkdXJpbmcgcGFyc2luZy4gVGhpcyBtZXNzYWdlIC8ga2V5IHByb2JhYmx5IGRvZXMgbm90IGNvbmZvcm0gdG8gYSB2YWxpZCBPcGVuUEdQIGZvcm1hdC5cIik7XG4gICAgfVxuICAgIHZhciBteXBvcyA9IHBvc2l0aW9uO1xuICAgIHZhciB0YWcgPSAtMTtcbiAgICB2YXIgZm9ybWF0ID0gLTE7XG4gICAgdmFyIHBhY2tldF9sZW5ndGggPSB2b2lkIDA7XG5cbiAgICBmb3JtYXQgPSAwOyAvLyAwID0gb2xkIGZvcm1hdDsgMSA9IG5ldyBmb3JtYXRcbiAgICBpZiAoKGlucHV0W215cG9zXSAmIDB4NDApICE9PSAwKSB7XG4gICAgICBmb3JtYXQgPSAxO1xuICAgIH1cblxuICAgIHZhciBwYWNrZXRfbGVuZ3RoX3R5cGUgPSB2b2lkIDA7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gbmV3IGZvcm1hdCBoZWFkZXJcbiAgICAgIHRhZyA9IGlucHV0W215cG9zXSAmIDB4M0Y7IC8vIGJpdCA1LTBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb2xkIGZvcm1hdCBoZWFkZXJcbiAgICAgIHRhZyA9IChpbnB1dFtteXBvc10gJiAweDNGKSA+PiAyOyAvLyBiaXQgNS0yXG4gICAgICBwYWNrZXRfbGVuZ3RoX3R5cGUgPSBpbnB1dFtteXBvc10gJiAweDAzOyAvLyBiaXQgMS0wXG4gICAgfVxuXG4gICAgLy8gaGVhZGVyIG9jdGV0IHBhcnNpbmcgZG9uZVxuICAgIG15cG9zKys7XG5cbiAgICAvLyBwYXJzZWQgbGVuZ3RoIGZyb20gbGVuZ3RoIGZpZWxkXG4gICAgdmFyIGJvZHlkYXRhID0gbnVsbDtcblxuICAgIC8vIHVzZWQgZm9yIHBhcnRpYWwgYm9keSBsZW5ndGhzXG4gICAgdmFyIHJlYWxfcGFja2V0X2xlbmd0aCA9IC0xO1xuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAvLyA0LjIuMS4gT2xkIEZvcm1hdCBQYWNrZXQgTGVuZ3Roc1xuICAgICAgc3dpdGNoIChwYWNrZXRfbGVuZ3RoX3R5cGUpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIC8vIFRoZSBwYWNrZXQgaGFzIGEgb25lLW9jdGV0IGxlbmd0aC4gVGhlIGhlYWRlciBpcyAyIG9jdGV0c1xuICAgICAgICAgIC8vIGxvbmcuXG4gICAgICAgICAgcGFja2V0X2xlbmd0aCA9IGlucHV0W215cG9zKytdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gVGhlIHBhY2tldCBoYXMgYSB0d28tb2N0ZXQgbGVuZ3RoLiBUaGUgaGVhZGVyIGlzIDMgb2N0ZXRzXG4gICAgICAgICAgLy8gbG9uZy5cbiAgICAgICAgICBwYWNrZXRfbGVuZ3RoID0gaW5wdXRbbXlwb3MrK10gPDwgOCB8IGlucHV0W215cG9zKytdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgLy8gVGhlIHBhY2tldCBoYXMgYSBmb3VyLW9jdGV0IGxlbmd0aC4gVGhlIGhlYWRlciBpcyA1XG4gICAgICAgICAgLy8gb2N0ZXRzIGxvbmcuXG4gICAgICAgICAgcGFja2V0X2xlbmd0aCA9IGlucHV0W215cG9zKytdIDw8IDI0IHwgaW5wdXRbbXlwb3MrK10gPDwgMTYgfCBpbnB1dFtteXBvcysrXSA8PCA4IHwgaW5wdXRbbXlwb3MrK107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gMyAtIFRoZSBwYWNrZXQgaXMgb2YgaW5kZXRlcm1pbmF0ZSBsZW5ndGguIFRoZSBoZWFkZXIgaXMgMVxuICAgICAgICAgIC8vIG9jdGV0IGxvbmcsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBkZXRlcm1pbmUgaG93IGxvbmdcbiAgICAgICAgICAvLyB0aGUgcGFja2V0IGlzLiBJZiB0aGUgcGFja2V0IGlzIGluIGEgZmlsZSwgdGhpcyBtZWFucyB0aGF0XG4gICAgICAgICAgLy8gdGhlIHBhY2tldCBleHRlbmRzIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpbGUuIEluIGdlbmVyYWwsXG4gICAgICAgICAgLy8gYW4gaW1wbGVtZW50YXRpb24gU0hPVUxEIE5PVCB1c2UgaW5kZXRlcm1pbmF0ZS1sZW5ndGhcbiAgICAgICAgICAvLyBwYWNrZXRzIGV4Y2VwdCB3aGVyZSB0aGUgZW5kIG9mIHRoZSBkYXRhIHdpbGwgYmUgY2xlYXJcbiAgICAgICAgICAvLyBmcm9tIHRoZSBjb250ZXh0LCBhbmQgZXZlbiB0aGVuIGl0IGlzIGJldHRlciB0byB1c2UgYVxuICAgICAgICAgIC8vIGRlZmluaXRlIGxlbmd0aCwgb3IgYSBuZXcgZm9ybWF0IGhlYWRlci4gVGhlIG5ldyBmb3JtYXRcbiAgICAgICAgICAvLyBoZWFkZXJzIGRlc2NyaWJlZCBiZWxvdyBoYXZlIGEgbWVjaGFuaXNtIGZvciBwcmVjaXNlbHlcbiAgICAgICAgICAvLyBlbmNvZGluZyBkYXRhIG9mIGluZGV0ZXJtaW5hdGUgbGVuZ3RoLlxuICAgICAgICAgIHBhY2tldF9sZW5ndGggPSBsZW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuMi4yLiBOZXcgRm9ybWF0IFBhY2tldCBMZW5ndGhzXG4gICAgICAvLyA0LjIuMi4xLiBPbmUtT2N0ZXQgTGVuZ3Roc1xuICAgICAgaWYgKGlucHV0W215cG9zXSA8IDE5Mikge1xuICAgICAgICBwYWNrZXRfbGVuZ3RoID0gaW5wdXRbbXlwb3MrK107XG4gICAgICAgIC8vIDQuMi4yLjIuIFR3by1PY3RldCBMZW5ndGhzXG4gICAgICB9IGVsc2UgaWYgKGlucHV0W215cG9zXSA+PSAxOTIgJiYgaW5wdXRbbXlwb3NdIDwgMjI0KSB7XG4gICAgICAgIHBhY2tldF9sZW5ndGggPSAoaW5wdXRbbXlwb3MrK10gLSAxOTIgPDwgOCkgKyBpbnB1dFtteXBvcysrXSArIDE5MjtcbiAgICAgICAgLy8gNC4yLjIuNC4gUGFydGlhbCBCb2R5IExlbmd0aHNcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXRbbXlwb3NdID4gMjIzICYmIGlucHV0W215cG9zXSA8IDI1NSkge1xuICAgICAgICBwYWNrZXRfbGVuZ3RoID0gMSA8PCAoaW5wdXRbbXlwb3MrK10gJiAweDFGKTtcbiAgICAgICAgLy8gRUVFSywgd2UncmUgcmVhZGluZyB0aGUgZnVsbCBkYXRhIGhlcmUuLi5cbiAgICAgICAgdmFyIG15cG9zMiA9IG15cG9zICsgcGFja2V0X2xlbmd0aDtcbiAgICAgICAgYm9keWRhdGEgPSBbaW5wdXQuc3ViYXJyYXkobXlwb3MsIG15cG9zICsgcGFja2V0X2xlbmd0aCldO1xuICAgICAgICB2YXIgdG1wbGVuID0gdm9pZCAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmIChpbnB1dFtteXBvczJdIDwgMTkyKSB7XG4gICAgICAgICAgICB0bXBsZW4gPSBpbnB1dFtteXBvczIrK107XG4gICAgICAgICAgICBwYWNrZXRfbGVuZ3RoICs9IHRtcGxlbjtcbiAgICAgICAgICAgIGJvZHlkYXRhLnB1c2goaW5wdXQuc3ViYXJyYXkobXlwb3MyLCBteXBvczIgKyB0bXBsZW4pKTtcbiAgICAgICAgICAgIG15cG9zMiArPSB0bXBsZW47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0W215cG9zMl0gPj0gMTkyICYmIGlucHV0W215cG9zMl0gPCAyMjQpIHtcbiAgICAgICAgICAgIHRtcGxlbiA9IChpbnB1dFtteXBvczIrK10gLSAxOTIgPDwgOCkgKyBpbnB1dFtteXBvczIrK10gKyAxOTI7XG4gICAgICAgICAgICBwYWNrZXRfbGVuZ3RoICs9IHRtcGxlbjtcbiAgICAgICAgICAgIGJvZHlkYXRhLnB1c2goaW5wdXQuc3ViYXJyYXkobXlwb3MyLCBteXBvczIgKyB0bXBsZW4pKTtcbiAgICAgICAgICAgIG15cG9zMiArPSB0bXBsZW47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0W215cG9zMl0gPiAyMjMgJiYgaW5wdXRbbXlwb3MyXSA8IDI1NSkge1xuICAgICAgICAgICAgdG1wbGVuID0gMSA8PCAoaW5wdXRbbXlwb3MyKytdICYgMHgxRik7XG4gICAgICAgICAgICBwYWNrZXRfbGVuZ3RoICs9IHRtcGxlbjtcbiAgICAgICAgICAgIGJvZHlkYXRhLnB1c2goaW5wdXQuc3ViYXJyYXkobXlwb3MyLCBteXBvczIgKyB0bXBsZW4pKTtcbiAgICAgICAgICAgIG15cG9zMiArPSB0bXBsZW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG15cG9zMisrO1xuICAgICAgICAgICAgdG1wbGVuID0gaW5wdXRbbXlwb3MyKytdIDw8IDI0IHwgaW5wdXRbbXlwb3MyKytdIDw8IDE2IHwgaW5wdXRbbXlwb3MyKytdIDw8IDggfCBpbnB1dFtteXBvczIrK107XG4gICAgICAgICAgICBib2R5ZGF0YS5wdXNoKGlucHV0LnN1YmFycmF5KG15cG9zMiwgbXlwb3MyICsgdG1wbGVuKSk7XG4gICAgICAgICAgICBwYWNrZXRfbGVuZ3RoICs9IHRtcGxlbjtcbiAgICAgICAgICAgIG15cG9zMiArPSB0bXBsZW47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVhbF9wYWNrZXRfbGVuZ3RoID0gbXlwb3MyIC0gbXlwb3M7XG4gICAgICAgIC8vIDQuMi4yLjMuIEZpdmUtT2N0ZXQgTGVuZ3Roc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXlwb3MrKztcbiAgICAgICAgcGFja2V0X2xlbmd0aCA9IGlucHV0W215cG9zKytdIDw8IDI0IHwgaW5wdXRbbXlwb3MrK10gPDwgMTYgfCBpbnB1dFtteXBvcysrXSA8PCA4IHwgaW5wdXRbbXlwb3MrK107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgd2FzJ250IGEgcGFydGlhbCBib2R5IGxlbmd0aDogdXNlIHRoZSBzcGVjaWZpZWRcbiAgICAvLyBwYWNrZXRfbGVuZ3RoXG4gICAgaWYgKHJlYWxfcGFja2V0X2xlbmd0aCA9PT0gLTEpIHtcbiAgICAgIHJlYWxfcGFja2V0X2xlbmd0aCA9IHBhY2tldF9sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGJvZHlkYXRhID09PSBudWxsKSB7XG4gICAgICBib2R5ZGF0YSA9IGlucHV0LnN1YmFycmF5KG15cG9zLCBteXBvcyArIHJlYWxfcGFja2V0X2xlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChib2R5ZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBib2R5ZGF0YSA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoYm9keWRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0YWc6IHRhZyxcbiAgICAgIHBhY2tldDogYm9keWRhdGEsXG4gICAgICBvZmZzZXQ6IG15cG9zICsgcmVhbF9wYWNrZXRfbGVuZ3RoXG4gICAgfTtcbiAgfVxufTsgLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBwYWNrZXRzXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIHBhY2tldC9wYWNrZXRcbiAqL1xuXG59LHtcIi4uL3V0aWxcIjozOTgsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiOjQwfV0sMzc2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX2FsbF9wYWNrZXRzID0gX2RlcmVxXygnLi9hbGxfcGFja2V0cycpO1xuXG52YXIgcGFja2V0cyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9hbGxfcGFja2V0cyk7XG5cbnZhciBfcGFja2V0ID0gX2RlcmVxXygnLi9wYWNrZXQnKTtcblxudmFyIF9wYWNrZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFja2V0KTtcblxudmFyIF9jb25maWcgPSBfZGVyZXFfKCcuLi9jb25maWcnKTtcblxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcblxudmFyIF9lbnVtcyA9IF9kZXJlcV8oJy4uL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBsaXN0IG9mIG9wZW5wZ3AgcGFja2V0cy5cbiAqIFRha2UgY2FyZSB3aGVuIGl0ZXJhdGluZyBvdmVyIGl0IC0gdGhlIHBhY2tldHMgdGhlbXNlbHZlc1xuICogYXJlIHN0b3JlZCBhcyBudW1lcmljYWwgaW5kaWNlcy5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gTGlzdCgpIHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgcGFja2V0cyBjb250YWluZWQgd2l0aGluIHRoZSBsaXN0LlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge0ludGVnZXJ9XG4gICAqL1xuICB0aGlzLmxlbmd0aCA9IDA7XG59XG5cbi8qKlxuICogUmVhZHMgYSBzdHJlYW0gb2YgYmluYXJ5IGRhdGEgYW5kIGludGVycHJlbnRzIGl0IGFzIGEgbGlzdCBvZiBwYWNrZXRzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBBIFVpbnQ4QXJyYXkgb2YgYnl0ZXMuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNhbGxiYWNrLXJldHVybiAqL1xuLyoqXG4gKiBAcmVxdWlyZXMgcGFja2V0L2FsbF9wYWNrZXRzXG4gKiBAcmVxdWlyZXMgcGFja2V0L3BhY2tldFxuICogQHJlcXVpcmVzIGNvbmZpZ1xuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICovXG5cbkxpc3QucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYnl0ZXMubGVuZ3RoKSB7XG4gICAgdmFyIHBhcnNlZCA9IF9wYWNrZXQyLmRlZmF1bHQucmVhZChieXRlcywgaSwgYnl0ZXMubGVuZ3RoIC0gaSk7XG4gICAgaSA9IHBhcnNlZC5vZmZzZXQ7XG5cbiAgICB2YXIgcHVzaGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB0YWcgPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucGFja2V0LCBwYXJzZWQudGFnKTtcbiAgICAgIHZhciBwYWNrZXQgPSBwYWNrZXRzLm5ld1BhY2tldEZyb21UYWcodGFnKTtcbiAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgIHBhY2tldC5yZWFkKHBhcnNlZC5wYWNrZXQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghX2NvbmZpZzIuZGVmYXVsdC50b2xlcmFudCB8fCBwYXJzZWQudGFnID09PSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQgfHwgcGFyc2VkLnRhZyA9PT0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5saXRlcmFsIHx8IHBhcnNlZC50YWcgPT09IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuY29tcHJlc3NlZCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWdfZXJyb3IoZSk7XG4gICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgIHRoaXMucG9wKCk7IC8vIGRyb3AgdW5zdXBwb3J0ZWQgcGFja2V0XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2Ygb3BlbnBncCBvYmplY3RzIGNvbnRhaW5lZCB3aXRoaW4gdGhlXG4gKiBjbGFzcyBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBBIFVpbnQ4QXJyYXkgY29udGFpbmluZyB2YWxpZCBvcGVucGdwIHBhY2tldHMuXG4gKi9cbkxpc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBhY2tldGJ5dGVzID0gdGhpc1tpXS53cml0ZSgpO1xuICAgIGFyci5wdXNoKF9wYWNrZXQyLmRlZmF1bHQud3JpdGVIZWFkZXIodGhpc1tpXS50YWcsIHBhY2tldGJ5dGVzLmxlbmd0aCkpO1xuICAgIGFyci5wdXNoKHBhY2tldGJ5dGVzKTtcbiAgfVxuXG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KGFycik7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBwYWNrZXQgdG8gdGhlIGxpc3QuIFRoaXMgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIG1ldGhvZCBvZiBkb2luZyBzbztcbiAqIHdyaXRpbmcgdG8gcGFja2V0bGlzdFtpXSBkaXJlY3RseSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXQgUGFja2V0IHRvIHB1c2hcbiAqL1xuTGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgaWYgKCFwYWNrZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwYWNrZXQucGFja2V0cyA9IHBhY2tldC5wYWNrZXRzIHx8IG5ldyBMaXN0KCk7XG5cbiAgdGhpc1t0aGlzLmxlbmd0aF0gPSBwYWNrZXQ7XG4gIHRoaXMubGVuZ3RoKys7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHBhY2tldCBmcm9tIHRoZSBsaXN0IGFuZCByZXR1cm4gaXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAgIFRoZSBwYWNrZXQgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5MaXN0LnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWNrZXQgPSB0aGlzW3RoaXMubGVuZ3RoIC0gMV07XG4gIGRlbGV0ZSB0aGlzW3RoaXMubGVuZ3RoIC0gMV07XG4gIHRoaXMubGVuZ3RoLS07XG5cbiAgcmV0dXJuIHBhY2tldDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBQYWNrZXRMaXN0IHdpdGggYWxsIHBhY2tldHMgdGhhdCBwYXNzIHRoZSB0ZXN0IGltcGxlbWVudGVkIGJ5IHRoZSBwcm92aWRlZCBmdW5jdGlvbi5cbiAqL1xuTGlzdC5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHZhciBmaWx0ZXJlZCA9IG5ldyBMaXN0KCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNhbGxiYWNrKHRoaXNbaV0sIGksIHRoaXMpKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKHRoaXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBQYWNrZXRMaXN0IHdpdGggYWxsIHBhY2tldHMgZnJvbSB0aGUgZ2l2ZW4gdHlwZXNcbiAqL1xuTGlzdC5wcm90b3R5cGUuZmlsdGVyQnlUYWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBmaWx0ZXJlZCA9IG5ldyBMaXN0KCk7XG5cbiAgdmFyIGhhbmRsZSA9IGZ1bmN0aW9uIGhhbmRsZSh0YWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHBhY2tldFR5cGUpIHtcbiAgICAgIHJldHVybiB0YWcgPT09IHBhY2tldFR5cGU7XG4gICAgfTtcbiAgfTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJncy5zb21lKGhhbmRsZSh0aGlzW2ldLnRhZykpKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKHRoaXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZDtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIG9uY2UgZm9yIGVhY2ggZWxlbWVudFxuICovXG5MaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIGNhbGxiYWNrKHRoaXNbaV0sIGksIHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyByZXR1cm4gdmFsdWVzIG9mIGNhbGxiYWNrXG4gKiBvbiBlYWNoIGVsZW1lbnRcbiAqL1xuTGlzdC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHZhciBwYWNrZXRBcnJheSA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHBhY2tldEFycmF5LnB1c2goY2FsbGJhY2sodGhpc1tpXSwgaSwgdGhpcykpO1xuICB9XG5cbiAgcmV0dXJuIHBhY2tldEFycmF5O1xufTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBlbGVtZW50XG4gKiB1bnRpbCBpdCBmaW5kcyBvbmUgd2hlcmUgY2FsbGJhY2sgcmV0dXJucyBhIHRydXRoeSB2YWx1ZVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5MaXN0LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKGNhbGxiYWNrKSB7XG4gICAgdmFyIGk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAoIShpIDwgdGhpcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpc1tpXSwgaSwgdGhpcyk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAoIV9jb250ZXh0LnNlbnQpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB0cnVlKTtcblxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCBmYWxzZSk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94KSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBlbGVtZW50LFxuICogcmV0dXJucyB0cnVlIGlmIGFsbCBjYWxsYmFja3MgcmV0dXJucyBhIHRydXRoeSB2YWx1ZVxuICovXG5MaXN0LnByb3RvdHlwZS5ldmVyeSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWNhbGxiYWNrKHRoaXNbaV0sIGksIHRoaXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBUcmF2ZXJzZXMgcGFja2V0IHRyZWUgYW5kIHJldHVybnMgZmlyc3QgbWF0Y2hpbmcgcGFja2V0XG4gKiBAcGFyYW0gIHttb2R1bGU6ZW51bXMucGFja2V0fSB0eXBlIFRoZSBwYWNrZXQgdHlwZVxuICogQHJldHVybnMge21vZHVsZTpwYWNrZXQvcGFja2V0fG51bGx9XG4gKi9cbkxpc3QucHJvdG90eXBlLmZpbmRQYWNrZXQgPSBmdW5jdGlvbiAodHlwZSkge1xuICB2YXIgcGFja2V0bGlzdCA9IHRoaXMuZmlsdGVyQnlUYWcodHlwZSk7XG4gIGlmIChwYWNrZXRsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBwYWNrZXRsaXN0WzBdO1xuICB9XG4gIHZhciBmb3VuZCA9IG51bGw7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0aGlzW2ldLnBhY2tldHMubGVuZ3RoKSB7XG4gICAgICBmb3VuZCA9IHRoaXNbaV0ucGFja2V0cy5maW5kUGFja2V0KHR5cGUpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBmb3VuZCBpbmRpY2VzIGJ5IHRhZ1xuICovXG5MaXN0LnByb3RvdHlwZS5pbmRleE9mVGFnID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGFnSW5kZXggPSBbXTtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gIHZhciBoYW5kbGUgPSBmdW5jdGlvbiBoYW5kbGUodGFnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwYWNrZXRUeXBlKSB7XG4gICAgICByZXR1cm4gdGFnID09PSBwYWNrZXRUeXBlO1xuICAgIH07XG4gIH07XG5cbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJncy5zb21lKGhhbmRsZSh0aGF0W2ldLnRhZykpKSB7XG4gICAgICB0YWdJbmRleC5wdXNoKGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFnSW5kZXg7XG59O1xuXG4vKipcbiAqIFJldHVybnMgc2xpY2Ugb2YgcGFja2V0bGlzdFxuICovXG5MaXN0LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChiZWdpbiwgZW5kKSB7XG4gIGlmICghZW5kKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGg7XG4gIH1cbiAgdmFyIHBhcnQgPSBuZXcgTGlzdCgpO1xuICBmb3IgKHZhciBpID0gYmVnaW47IGkgPCBlbmQ7IGkrKykge1xuICAgIHBhcnQucHVzaCh0aGlzW2ldKTtcbiAgfVxuICByZXR1cm4gcGFydDtcbn07XG5cbi8qKlxuICogQ29uY2F0ZW5hdGVzIHBhY2tldGxpc3Qgb3IgYXJyYXkgb2YgcGFja2V0c1xuICovXG5MaXN0LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAocGFja2V0bGlzdCkge1xuICBpZiAocGFja2V0bGlzdCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFja2V0bGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wdXNoKHBhY2tldGxpc3RbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWxsb2NhdGUgYSBuZXcgcGFja2V0bGlzdCBmcm9tIHN0cnVjdHVyZWQgcGFja2V0bGlzdCBjbG9uZVxuICogU2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vaHRtbC9pbmZyYXN0cnVjdHVyZS5odG1sI3NhZmUtcGFzc2luZy1vZi1zdHJ1Y3R1cmVkLWRhdGF9XG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0Q2xvbmUgcGFja2V0bGlzdCBjbG9uZVxuICogQHJldHVybnMge09iamVjdH0gbmV3IHBhY2tldGxpc3Qgb2JqZWN0IHdpdGggZGF0YSBmcm9tIHBhY2tldGxpc3QgY2xvbmVcbiAqL1xuTGlzdC5mcm9tU3RydWN0dXJlZENsb25lID0gZnVuY3Rpb24gKHBhY2tldGxpc3RDbG9uZSkge1xuICB2YXIgcGFja2V0bGlzdCA9IG5ldyBMaXN0KCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFja2V0bGlzdENsb25lLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFja2V0bGlzdC5wdXNoKHBhY2tldHMuZnJvbVN0cnVjdHVyZWRDbG9uZShwYWNrZXRsaXN0Q2xvbmVbaV0pKTtcbiAgICBpZiAocGFja2V0bGlzdFtpXS5wYWNrZXRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcGFja2V0bGlzdFtpXS5wYWNrZXRzID0gdGhpcy5mcm9tU3RydWN0dXJlZENsb25lKHBhY2tldGxpc3RbaV0ucGFja2V0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhY2tldGxpc3RbaV0ucGFja2V0cyA9IG5ldyBMaXN0KCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYWNrZXRsaXN0O1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gTGlzdDtcblxufSx7XCIuLi9jb25maWdcIjozMjUsXCIuLi9lbnVtc1wiOjM1OSxcIi4uL3V0aWxcIjozOTgsXCIuL2FsbF9wYWNrZXRzXCI6MzY4LFwiLi9wYWNrZXRcIjozNzUsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzc3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9rZXlpZCA9IF9kZXJlcV8oJy4uL3R5cGUva2V5aWQnKTtcblxudmFyIF9rZXlpZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlpZCk7XG5cbnZhciBfbXBpID0gX2RlcmVxXygnLi4vdHlwZS9tcGknKTtcblxudmFyIF9tcGkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbXBpKTtcblxudmFyIF9jb25maWcgPSBfZGVyZXFfKCcuLi9jb25maWcnKTtcblxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcblxudmFyIF9jcnlwdG8gPSBfZGVyZXFfKCcuLi9jcnlwdG8nKTtcblxudmFyIF9jcnlwdG8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3J5cHRvKTtcblxudmFyIF9lbnVtcyA9IF9kZXJlcV8oJy4uL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgS2V5IE1hdGVyaWFsIFBhY2tldCAoVGFnIDUsNiw3LDE0KVxuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuNXxSRkM0NDgwIDUuNX06XG4gKiBBIGtleSBtYXRlcmlhbCBwYWNrZXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIHB1YmxpYyBvclxuICogcHJpdmF0ZSBrZXkuICBUaGVyZSBhcmUgZm91ciB2YXJpYW50cyBvZiB0aGlzIHBhY2tldCB0eXBlLCBhbmQgdHdvXG4gKiBtYWpvciB2ZXJzaW9ucy5cbiAqXG4gKiBBIFB1YmxpYy1LZXkgcGFja2V0IHN0YXJ0cyBhIHNlcmllcyBvZiBwYWNrZXRzIHRoYXQgZm9ybXMgYW4gT3BlblBHUFxuICoga2V5IChzb21ldGltZXMgY2FsbGVkIGFuIE9wZW5QR1AgY2VydGlmaWNhdGUpLlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyB0eXBlL2tleWlkXG4gKiBAcmVxdWlyZXMgdHlwZS9tcGlcbiAqIEByZXF1aXJlcyBjb25maWdcbiAqIEByZXF1aXJlcyBjcnlwdG9cbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQHJlcXVpcmVzIHV0aWxcbiAqL1xuXG5mdW5jdGlvbiBQdWJsaWNLZXkoKSB7XG4gIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBuZXcgRGF0ZSgpO1xuXG4gIC8qKlxuICAgKiBQYWNrZXQgdHlwZVxuICAgKiBAdHlwZSB7bW9kdWxlOmVudW1zLnBhY2tldH1cbiAgICovXG4gIHRoaXMudGFnID0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5wdWJsaWNLZXk7XG4gIC8qKlxuICAgKiBQYWNrZXQgdmVyc2lvblxuICAgKiBAdHlwZSB7SW50ZWdlcn1cbiAgICovXG4gIHRoaXMudmVyc2lvbiA9IF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0ICYmIF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0X3ZlcnNpb24gPT09IDQgPyA1IDogNDtcbiAgLyoqXG4gICAqIEtleSBjcmVhdGlvbiBkYXRlLlxuICAgKiBAdHlwZSB7RGF0ZX1cbiAgICovXG4gIHRoaXMuY3JlYXRlZCA9IF91dGlsMi5kZWZhdWx0Lm5vcm1hbGl6ZURhdGUoZGF0ZSk7XG4gIC8qKlxuICAgKiBBbGdvcml0aG0gc3BlY2lmaWMgcGFyYW1zXG4gICAqIEB0eXBlIHtBcnJheTxPYmplY3Q+fVxuICAgKi9cbiAgdGhpcy5wYXJhbXMgPSBbXTtcbiAgLyoqXG4gICAqIFRpbWUgdW50aWwgZXhwaXJhdGlvbiBpbiBkYXlzIChWMyBvbmx5KVxuICAgKiBAdHlwZSB7SW50ZWdlcn1cbiAgICovXG4gIHRoaXMuZXhwaXJhdGlvblRpbWVWMyA9IDA7XG4gIC8qKlxuICAgKiBGaW5nZXJwcmludCBpbiBsb3dlcmNhc2UgaGV4XG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICB0aGlzLmZpbmdlcnByaW50ID0gbnVsbDtcbiAgLyoqXG4gICAqIEtleWlkXG4gICAqIEB0eXBlIHttb2R1bGU6dHlwZS9rZXlpZH1cbiAgICovXG4gIHRoaXMua2V5aWQgPSBudWxsO1xufVxuXG4vKipcbiAqIEludGVybmFsIFBhcnNlciBmb3IgcHVibGljIGtleXMgYXMgc3BlY2lmaWVkIGluIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuNS4yfFJGQyA0ODgwIHNlY3Rpb24gNS41LjIgUHVibGljLUtleSBQYWNrZXQgRm9ybWF0c31cbiAqIGNhbGxlZCBieSByZWFkX3RhZyZsdDtudW0mZ3Q7XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzIElucHV0IGFycmF5IHRvIHJlYWQgdGhlIHBhY2tldCBmcm9tXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGlzIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgc2V0IGJ5IHRoZSBwYXJzZXJcbiAqL1xuUHVibGljS2V5LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHZhciBwb3MgPSAwO1xuICAvLyBBIG9uZS1vY3RldCB2ZXJzaW9uIG51bWJlciAoMywgNCBvciA1KS5cbiAgdGhpcy52ZXJzaW9uID0gYnl0ZXNbcG9zKytdO1xuXG4gIGlmICh0aGlzLnZlcnNpb24gPT09IDMgfHwgdGhpcy52ZXJzaW9uID09PSA0IHx8IHRoaXMudmVyc2lvbiA9PT0gNSkge1xuICAgIC8vIC0gQSBmb3VyLW9jdGV0IG51bWJlciBkZW5vdGluZyB0aGUgdGltZSB0aGF0IHRoZSBrZXkgd2FzIGNyZWF0ZWQuXG4gICAgdGhpcy5jcmVhdGVkID0gX3V0aWwyLmRlZmF1bHQucmVhZERhdGUoYnl0ZXMuc3ViYXJyYXkocG9zLCBwb3MgKyA0KSk7XG4gICAgcG9zICs9IDQ7XG5cbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAzKSB7XG4gICAgICAvLyAtIEEgdHdvLW9jdGV0IG51bWJlciBkZW5vdGluZyB0aGUgdGltZSBpbiBkYXlzIHRoYXQgdGhpcyBrZXkgaXNcbiAgICAgIC8vICAgdmFsaWQuICBJZiB0aGlzIG51bWJlciBpcyB6ZXJvLCB0aGVuIGl0IGRvZXMgbm90IGV4cGlyZS5cbiAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWVWMyA9IF91dGlsMi5kZWZhdWx0LnJlYWROdW1iZXIoYnl0ZXMuc3ViYXJyYXkocG9zLCBwb3MgKyAyKSk7XG4gICAgICBwb3MgKz0gMjtcbiAgICB9XG5cbiAgICAvLyAtIEEgb25lLW9jdGV0IG51bWJlciBkZW5vdGluZyB0aGUgcHVibGljLWtleSBhbGdvcml0aG0gb2YgdGhpcyBrZXkuXG4gICAgdGhpcy5hbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBieXRlc1twb3MrK10pO1xuICAgIHZhciBhbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMuYWxnb3JpdGhtKTtcblxuICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDUpIHtcbiAgICAgIC8vIC0gQSBmb3VyLW9jdGV0IHNjYWxhciBvY3RldCBjb3VudCBmb3IgdGhlIGZvbGxvd2luZyBrZXkgbWF0ZXJpYWwuXG4gICAgICBwb3MgKz0gNDtcbiAgICB9XG5cbiAgICAvLyAtIEEgc2VyaWVzIG9mIHZhbHVlcyBjb21wcmlzaW5nIHRoZSBrZXkgbWF0ZXJpYWwuICBUaGlzIGlzXG4gICAgLy8gICBhbGdvcml0aG0tc3BlY2lmaWMgYW5kIGRlc2NyaWJlZCBpbiBzZWN0aW9uIFhYWFguXG4gICAgdmFyIHR5cGVzID0gX2NyeXB0bzIuZGVmYXVsdC5nZXRQdWJLZXlQYXJhbVR5cGVzKGFsZ28pO1xuICAgIHRoaXMucGFyYW1zID0gX2NyeXB0bzIuZGVmYXVsdC5jb25zdHJ1Y3RQYXJhbXModHlwZXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGggJiYgcG9zIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBvcyArPSB0aGlzLnBhcmFtc1tpXS5yZWFkKGJ5dGVzLnN1YmFycmF5KHBvcywgYnl0ZXMubGVuZ3RoKSk7XG4gICAgICBpZiAocG9zID4gYnl0ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgcmVhZGluZyBNUEkgQDonICsgcG9zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVmVyc2lvbiAnICsgdGhpcy52ZXJzaW9uICsgJyBvZiB0aGUga2V5IHBhY2tldCBpcyB1bnN1cHBvcnRlZC4nKTtcbn07XG5cbi8qKlxuICogQWxpYXMgb2YgcmVhZCgpXG4gKiBAc2VlIG1vZHVsZTpwYWNrZXQuUHVibGljS2V5I3JlYWRcbiAqL1xuUHVibGljS2V5LnByb3RvdHlwZS5yZWFkUHVibGljS2V5ID0gUHVibGljS2V5LnByb3RvdHlwZS5yZWFkO1xuXG4vKipcbiAqIFNhbWUgYXMgd3JpdGVfcHJpdmF0ZV9rZXksIGJ1dCBoYXMgbGVzcyBpbmZvcm1hdGlvbiBiZWNhdXNlIG9mXG4gKiBwdWJsaWMga2V5LlxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IE9wZW5QR1AgcGFja2V0IGJvZHkgY29udGVudHMsXG4gKi9cblB1YmxpY0tleS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnIgPSBbXTtcbiAgLy8gVmVyc2lvblxuICBhcnIucHVzaChuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uXSkpO1xuICBhcnIucHVzaChfdXRpbDIuZGVmYXVsdC53cml0ZURhdGUodGhpcy5jcmVhdGVkKSk7XG4gIGlmICh0aGlzLnZlcnNpb24gPT09IDMpIHtcbiAgICBhcnIucHVzaChfdXRpbDIuZGVmYXVsdC53cml0ZU51bWJlcih0aGlzLmV4cGlyYXRpb25UaW1lVjMsIDIpKTtcbiAgfVxuICAvLyBBIG9uZS1vY3RldCBudW1iZXIgZGVub3RpbmcgdGhlIHB1YmxpYy1rZXkgYWxnb3JpdGhtIG9mIHRoaXMga2V5XG4gIHZhciBhbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMuYWxnb3JpdGhtKTtcbiAgYXJyLnB1c2gobmV3IFVpbnQ4QXJyYXkoW2FsZ29dKSk7XG5cbiAgdmFyIHBhcmFtQ291bnQgPSBfY3J5cHRvMi5kZWZhdWx0LmdldFB1YktleVBhcmFtVHlwZXMoYWxnbykubGVuZ3RoO1xuICB2YXIgcGFyYW1zID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheSh0aGlzLnBhcmFtcy5zbGljZSgwLCBwYXJhbUNvdW50KS5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgcmV0dXJuIHBhcmFtLndyaXRlKCk7XG4gIH0pKTtcbiAgaWYgKHRoaXMudmVyc2lvbiA9PT0gNSkge1xuICAgIC8vIEEgZm91ci1vY3RldCBzY2FsYXIgb2N0ZXQgY291bnQgZm9yIHRoZSBmb2xsb3dpbmcga2V5IG1hdGVyaWFsXG4gICAgYXJyLnB1c2goX3V0aWwyLmRlZmF1bHQud3JpdGVOdW1iZXIocGFyYW1zLmxlbmd0aCwgNCkpO1xuICB9XG4gIC8vIEFsZ29yaXRobS1zcGVjaWZpYyBwYXJhbXNcbiAgYXJyLnB1c2gocGFyYW1zKTtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoYXJyKTtcbn07XG5cbi8qKlxuICogQWxpYXMgb2Ygd3JpdGUoKVxuICogQHNlZSBtb2R1bGU6cGFja2V0LlB1YmxpY0tleSN3cml0ZVxuICovXG5QdWJsaWNLZXkucHJvdG90eXBlLndyaXRlUHVibGljS2V5ID0gUHVibGljS2V5LnByb3RvdHlwZS53cml0ZTtcblxuLyoqXG4gKiBXcml0ZSBhbiBvbGQgdmVyc2lvbiBwYWNrZXQgLSBpdCdzIHVzZWQgYnkgc29tZSBvZiB0aGUgaW50ZXJuYWwgcm91dGluZXMuXG4gKi9cblB1YmxpY0tleS5wcm90b3R5cGUud3JpdGVPbGQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBieXRlcyA9IHRoaXMud3JpdGVQdWJsaWNLZXkoKTtcblxuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoWzB4OTldKSwgX3V0aWwyLmRlZmF1bHQud3JpdGVOdW1iZXIoYnl0ZXMubGVuZ3RoLCAyKSwgYnl0ZXNdKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUga2V5IGlkIG9mIHRoZSBrZXlcbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgOCBieXRlIGtleSBpZFxuICovXG5QdWJsaWNLZXkucHJvdG90eXBlLmdldEtleUlkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5rZXlpZCkge1xuICAgIHJldHVybiB0aGlzLmtleWlkO1xuICB9XG4gIHRoaXMua2V5aWQgPSBuZXcgX2tleWlkMi5kZWZhdWx0KCk7XG4gIGlmICh0aGlzLnZlcnNpb24gPT09IDUpIHtcbiAgICB0aGlzLmtleWlkLnJlYWQoX3V0aWwyLmRlZmF1bHQuaGV4X3RvX1VpbnQ4QXJyYXkodGhpcy5nZXRGaW5nZXJwcmludCgpKS5zdWJhcnJheSgwLCA4KSk7XG4gIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSA0KSB7XG4gICAgdGhpcy5rZXlpZC5yZWFkKF91dGlsMi5kZWZhdWx0LmhleF90b19VaW50OEFycmF5KHRoaXMuZ2V0RmluZ2VycHJpbnQoKSkuc3ViYXJyYXkoMTIsIDIwKSk7XG4gIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAzKSB7XG4gICAgdmFyIGFyciA9IHRoaXMucGFyYW1zWzBdLndyaXRlKCk7XG4gICAgdGhpcy5rZXlpZC5yZWFkKGFyci5zdWJhcnJheShhcnIubGVuZ3RoIC0gOCwgYXJyLmxlbmd0aCkpO1xuICB9XG4gIHJldHVybiB0aGlzLmtleWlkO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBmaW5nZXJwcmludCBvZiB0aGUga2V5XG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gQSBVaW50OEFycmF5IGNvbnRhaW5pbmcgdGhlIGZpbmdlcnByaW50XG4gKi9cblB1YmxpY0tleS5wcm90b3R5cGUuZ2V0RmluZ2VycHJpbnRCeXRlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZmluZ2VycHJpbnQpIHtcbiAgICByZXR1cm4gdGhpcy5maW5nZXJwcmludDtcbiAgfVxuICB2YXIgdG9IYXNoID0gdm9pZCAwO1xuICBpZiAodGhpcy52ZXJzaW9uID09PSA1KSB7XG4gICAgdmFyIGJ5dGVzID0gdGhpcy53cml0ZVB1YmxpY0tleSgpO1xuICAgIHRvSGFzaCA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW25ldyBVaW50OEFycmF5KFsweDlBXSksIF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKGJ5dGVzLmxlbmd0aCwgNCksIGJ5dGVzXSk7XG4gICAgdGhpcy5maW5nZXJwcmludCA9IF9jcnlwdG8yLmRlZmF1bHQuaGFzaC5zaGEyNTYodG9IYXNoKTtcbiAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDQpIHtcbiAgICB0b0hhc2ggPSB0aGlzLndyaXRlT2xkKCk7XG4gICAgdGhpcy5maW5nZXJwcmludCA9IF9jcnlwdG8yLmRlZmF1bHQuaGFzaC5zaGExKHRvSGFzaCk7XG4gIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAzKSB7XG4gICAgdmFyIGFsZ28gPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgdGhpcy5hbGdvcml0aG0pO1xuICAgIHZhciBwYXJhbUNvdW50ID0gX2NyeXB0bzIuZGVmYXVsdC5nZXRQdWJLZXlQYXJhbVR5cGVzKGFsZ28pLmxlbmd0aDtcbiAgICB0b0hhc2ggPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtQ291bnQ7IGkrKykge1xuICAgICAgdG9IYXNoICs9IHRoaXMucGFyYW1zW2ldLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHRoaXMuZmluZ2VycHJpbnQgPSBfY3J5cHRvMi5kZWZhdWx0Lmhhc2gubWQ1KF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KHRvSGFzaCkpO1xuICB9XG4gIHJldHVybiB0aGlzLmZpbmdlcnByaW50O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBmaW5nZXJwcmludCBvZiB0aGUga2V5XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBmaW5nZXJwcmludCBpbiBsb3dlcmNhc2UgaGV4XG4gKi9cblB1YmxpY0tleS5wcm90b3R5cGUuZ2V0RmluZ2VycHJpbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX2hleCh0aGlzLmdldEZpbmdlcnByaW50Qnl0ZXMoKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYWxnb3JpdGhtIGluZm9ybWF0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBBbiBvYmplY3Qgb2YgdGhlIGZvcm0ge2FsZ29yaXRobTogU3RyaW5nLCBiaXRzOmludCwgY3VydmU6U3RyaW5nfVxuICovXG5QdWJsaWNLZXkucHJvdG90eXBlLmdldEFsZ29yaXRobUluZm8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgcmVzdWx0LmFsZ29yaXRobSA9IHRoaXMuYWxnb3JpdGhtO1xuICBpZiAodGhpcy5wYXJhbXNbMF0gaW5zdGFuY2VvZiBfbXBpMi5kZWZhdWx0KSB7XG4gICAgcmVzdWx0LmJpdHMgPSB0aGlzLnBhcmFtc1swXS5ieXRlTGVuZ3RoKCkgKiA4O1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5jdXJ2ZSA9IHRoaXMucGFyYW1zWzBdLmdldE5hbWUoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBGaXggY3VzdG9tIHR5cGVzIGFmdGVyIGNsb25pbmdcbiAqL1xuUHVibGljS2V5LnByb3RvdHlwZS5wb3N0Q2xvbmVUeXBlRml4ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWxnbyA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCB0aGlzLmFsZ29yaXRobSk7XG4gIHZhciB0eXBlcyA9IF9jcnlwdG8yLmRlZmF1bHQuZ2V0UHViS2V5UGFyYW1UeXBlcyhhbGdvKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJhbSA9IHRoaXMucGFyYW1zW2ldO1xuICAgIHRoaXMucGFyYW1zW2ldID0gdHlwZXNbaV0uZnJvbUNsb25lKHBhcmFtKTtcbiAgfVxuICBpZiAodGhpcy5rZXlpZCkge1xuICAgIHRoaXMua2V5aWQgPSBfa2V5aWQyLmRlZmF1bHQuZnJvbUNsb25lKHRoaXMua2V5aWQpO1xuICB9XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBQdWJsaWNLZXk7XG5cbn0se1wiLi4vY29uZmlnXCI6MzI1LFwiLi4vY3J5cHRvXCI6MzQwLFwiLi4vZW51bXNcIjozNTksXCIuLi90eXBlL2tleWlkXCI6Mzk0LFwiLi4vdHlwZS9tcGlcIjozOTUsXCIuLi91dGlsXCI6Mzk4fV0sMzc4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX2tleWlkID0gX2RlcmVxXygnLi4vdHlwZS9rZXlpZCcpO1xuXG52YXIgX2tleWlkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2tleWlkKTtcblxudmFyIF9tcGkgPSBfZGVyZXFfKCcuLi90eXBlL21waScpO1xuXG52YXIgX21waTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tcGkpO1xuXG52YXIgX2NyeXB0byA9IF9kZXJlcV8oJy4uL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFB1YmxpYy1LZXkgRW5jcnlwdGVkIFNlc3Npb24gS2V5IFBhY2tldHMgKFRhZyAxKVxuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuMXxSRkM0ODgwIDUuMX06XG4gKiBBIFB1YmxpYy1LZXkgRW5jcnlwdGVkIFNlc3Npb24gS2V5IHBhY2tldCBob2xkcyB0aGUgc2Vzc2lvbiBrZXlcbiAqIHVzZWQgdG8gZW5jcnlwdCBhIG1lc3NhZ2UuIFplcm8gb3IgbW9yZSBQdWJsaWMtS2V5IEVuY3J5cHRlZCBTZXNzaW9uIEtleVxuICogcGFja2V0cyBhbmQvb3IgU3ltbWV0cmljLUtleSBFbmNyeXB0ZWQgU2Vzc2lvbiBLZXkgcGFja2V0cyBtYXkgcHJlY2VkZSBhXG4gKiBTeW1tZXRyaWNhbGx5IEVuY3J5cHRlZCBEYXRhIFBhY2tldCwgd2hpY2ggaG9sZHMgYW4gZW5jcnlwdGVkIG1lc3NhZ2UuIFRoZVxuICogbWVzc2FnZSBpcyBlbmNyeXB0ZWQgd2l0aCB0aGUgc2Vzc2lvbiBrZXksIGFuZCB0aGUgc2Vzc2lvbiBrZXkgaXMgaXRzZWxmXG4gKiBlbmNyeXB0ZWQgYW5kIHN0b3JlZCBpbiB0aGUgRW5jcnlwdGVkIFNlc3Npb24gS2V5IHBhY2tldChzKS4gVGhlXG4gKiBTeW1tZXRyaWNhbGx5IEVuY3J5cHRlZCBEYXRhIFBhY2tldCBpcyBwcmVjZWRlZCBieSBvbmUgUHVibGljLUtleSBFbmNyeXB0ZWRcbiAqIFNlc3Npb24gS2V5IHBhY2tldCBmb3IgZWFjaCBPcGVuUEdQIGtleSB0byB3aGljaCB0aGUgbWVzc2FnZSBpcyBlbmNyeXB0ZWQuXG4gKiBUaGUgcmVjaXBpZW50IG9mIHRoZSBtZXNzYWdlIGZpbmRzIGEgc2Vzc2lvbiBrZXkgdGhhdCBpcyBlbmNyeXB0ZWQgdG8gdGhlaXJcbiAqIHB1YmxpYyBrZXksIGRlY3J5cHRzIHRoZSBzZXNzaW9uIGtleSwgYW5kIHRoZW4gdXNlcyB0aGUgc2Vzc2lvbiBrZXkgdG9cbiAqIGRlY3J5cHQgdGhlIG1lc3NhZ2UuXG4gKiBAbWVtYmVyb2YgbW9kdWxlOnBhY2tldFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFB1YmxpY0tleUVuY3J5cHRlZFNlc3Npb25LZXkoKSB7XG4gIHRoaXMudGFnID0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5wdWJsaWNLZXlFbmNyeXB0ZWRTZXNzaW9uS2V5O1xuICB0aGlzLnZlcnNpb24gPSAzO1xuXG4gIHRoaXMucHVibGljS2V5SWQgPSBuZXcgX2tleWlkMi5kZWZhdWx0KCk7XG4gIHRoaXMuc2Vzc2lvbktleSA9IG51bGw7XG5cbiAgLyoqIEB0eXBlIHtBcnJheTxtb2R1bGU6dHlwZS9tcGk+fSAqL1xuICB0aGlzLmVuY3J5cHRlZCA9IFtdO1xufVxuXG4vKipcbiAqIFBhcnNpbmcgZnVuY3Rpb24gZm9yIGEgcHVibGlja2V5IGVuY3J5cHRlZCBzZXNzaW9uIGtleSBwYWNrZXQgKHRhZyAxKS5cbiAqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0IFBheWxvYWQgb2YgYSB0YWcgMSBwYWNrZXRcbiAqIEBwYXJhbSB7SW50ZWdlcn0gcG9zaXRpb24gUG9zaXRpb24gdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzdHJpbmdcbiAqIEBwYXJhbSB7SW50ZWdlcn0gbGVuIExlbmd0aCBvZiB0aGUgcGFja2V0IG9yIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mXG4gKiAgICAgICAgICAgIGlucHV0IGF0IHBvc2l0aW9uXG4gKiBAcmV0dXJucyB7bW9kdWxlOnBhY2tldC5QdWJsaWNLZXlFbmNyeXB0ZWRTZXNzaW9uS2V5fSBPYmplY3QgcmVwcmVzZW50YXRpb25cbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgdHlwZS9rZXlpZFxuICogQHJlcXVpcmVzIHR5cGUvbXBpXG4gKiBAcmVxdWlyZXMgY3J5cHRvXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKi9cblxuUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICB0aGlzLnZlcnNpb24gPSBieXRlc1swXTtcbiAgdGhpcy5wdWJsaWNLZXlJZC5yZWFkKGJ5dGVzLnN1YmFycmF5KDEsIGJ5dGVzLmxlbmd0aCkpO1xuICB0aGlzLnB1YmxpY0tleUFsZ29yaXRobSA9IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIGJ5dGVzWzldKTtcblxuICB2YXIgaSA9IDEwO1xuXG4gIHZhciBhbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMucHVibGljS2V5QWxnb3JpdGhtKTtcbiAgdmFyIHR5cGVzID0gX2NyeXB0bzIuZGVmYXVsdC5nZXRFbmNTZXNzaW9uS2V5UGFyYW1UeXBlcyhhbGdvKTtcbiAgdGhpcy5lbmNyeXB0ZWQgPSBfY3J5cHRvMi5kZWZhdWx0LmNvbnN0cnVjdFBhcmFtcyh0eXBlcyk7XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCB0eXBlcy5sZW5ndGg7IGorKykge1xuICAgIGkgKz0gdGhpcy5lbmNyeXB0ZWRbal0ucmVhZChieXRlcy5zdWJhcnJheShpLCBieXRlcy5sZW5ndGgpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0YWcgMSBwYWNrZXRcbiAqXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIFVpbnQ4QXJyYXkgcmVwcmVzZW50YXRpb25cbiAqL1xuUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnIgPSBbbmV3IFVpbnQ4QXJyYXkoW3RoaXMudmVyc2lvbl0pLCB0aGlzLnB1YmxpY0tleUlkLndyaXRlKCksIG5ldyBVaW50OEFycmF5KFtfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0pXSldO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbmNyeXB0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBhcnIucHVzaCh0aGlzLmVuY3J5cHRlZFtpXS53cml0ZSgpKTtcbiAgfVxuXG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KGFycik7XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgc2Vzc2lvbiBrZXkgcGFja2V0XG4gKiBAcGFyYW0ge21vZHVsZTpwYWNrZXQuUHVibGljS2V5fSBrZXkgUHVibGljIGtleVxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59XG4gKiBAYXN5bmNcbiAqL1xuUHVibGljS2V5RW5jcnlwdGVkU2Vzc2lvbktleS5wcm90b3R5cGUuZW5jcnlwdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShrZXkpIHtcbiAgICB2YXIgZGF0YSwgY2hlY2tzdW0sIHRvRW5jcnlwdCwgYWxnbztcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBkYXRhID0gU3RyaW5nLmZyb21DaGFyQ29kZShfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgdGhpcy5zZXNzaW9uS2V5QWxnb3JpdGhtKSk7XG5cblxuICAgICAgICAgICAgZGF0YSArPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cih0aGlzLnNlc3Npb25LZXkpO1xuICAgICAgICAgICAgY2hlY2tzdW0gPSBfdXRpbDIuZGVmYXVsdC5jYWxjX2NoZWNrc3VtKHRoaXMuc2Vzc2lvbktleSk7XG5cbiAgICAgICAgICAgIGRhdGEgKz0gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIoX3V0aWwyLmRlZmF1bHQud3JpdGVOdW1iZXIoY2hlY2tzdW0sIDIpKTtcblxuICAgICAgICAgICAgdG9FbmNyeXB0ID0gdm9pZCAwO1xuICAgICAgICAgICAgYWxnbyA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCB0aGlzLnB1YmxpY0tleUFsZ29yaXRobSk7XG5cbiAgICAgICAgICAgIGlmICghKGFsZ28gPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9FbmNyeXB0ID0gbmV3IF9tcGkyLmRlZmF1bHQoX2NyeXB0bzIuZGVmYXVsdC5wa2NzNS5lbmNvZGUoZGF0YSkpO1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE1O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfbXBpMi5kZWZhdWx0O1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEzO1xuICAgICAgICAgICAgcmV0dXJuIF9jcnlwdG8yLmRlZmF1bHQucGtjczEuZW1lLmVuY29kZShkYXRhLCBrZXkucGFyYW1zWzBdLmJ5dGVMZW5ndGgoKSk7XG5cbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgX2NvbnRleHQudDEgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgdG9FbmNyeXB0ID0gbmV3IF9jb250ZXh0LnQwKF9jb250ZXh0LnQxKTtcblxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTc7XG4gICAgICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5wdWJsaWNLZXlFbmNyeXB0KGFsZ28sIGtleS5wYXJhbXMsIHRvRW5jcnlwdCwga2V5LmdldEZpbmdlcnByaW50Qnl0ZXMoKSk7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5lbmNyeXB0ZWQgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94KSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBEZWNyeXB0cyB0aGUgc2Vzc2lvbiBrZXkgKG9ubHkgZm9yIHB1YmxpYyBrZXkgZW5jcnlwdGVkIHNlc3Npb24ga2V5XG4gKiBwYWNrZXRzICh0YWcgMSlcbiAqXG4gKiBAcGFyYW0ge21vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fSBrZXlcbiAqICAgICAgICAgICAgUHJpdmF0ZSBrZXkgd2l0aCBzZWNyZXQgcGFyYW1zIHVubG9ja2VkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5QdWJsaWNLZXlFbmNyeXB0ZWRTZXNzaW9uS2V5LnByb3RvdHlwZS5kZWNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoa2V5KSB7XG4gICAgdmFyIGFsZ28sIHJlc3VsdCwgY2hlY2tzdW0sIGRlY29kZWQ7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGFsZ28gPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0pO1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzO1xuICAgICAgICAgICAgcmV0dXJuIF9jcnlwdG8yLmRlZmF1bHQucHVibGljS2V5RGVjcnlwdChhbGdvLCBrZXkucGFyYW1zLCB0aGlzLmVuY3J5cHRlZCwga2V5LmdldEZpbmdlcnByaW50Qnl0ZXMoKSk7XG5cbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXN1bHQgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgIGNoZWNrc3VtID0gdm9pZCAwO1xuICAgICAgICAgICAgZGVjb2RlZCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKGFsZ28gPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkaCkge1xuICAgICAgICAgICAgICBkZWNvZGVkID0gX2NyeXB0bzIuZGVmYXVsdC5wa2NzNS5kZWNvZGUocmVzdWx0LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICBjaGVja3N1bSA9IF91dGlsMi5kZWZhdWx0LnJlYWROdW1iZXIoX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkoZGVjb2RlZC5zdWJzdHIoZGVjb2RlZC5sZW5ndGggLSAyKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVjb2RlZCA9IF9jcnlwdG8yLmRlZmF1bHQucGtjczEuZW1lLmRlY29kZShyZXN1bHQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgIGNoZWNrc3VtID0gX3V0aWwyLmRlZmF1bHQucmVhZE51bWJlcihyZXN1bHQudG9VaW50OEFycmF5KCkuc2xpY2UocmVzdWx0LmJ5dGVMZW5ndGgoKSAtIDIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAga2V5ID0gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkoZGVjb2RlZC5zdWJzdHJpbmcoMSwgZGVjb2RlZC5sZW5ndGggLSAyKSk7XG5cbiAgICAgICAgICAgIGlmICghKGNoZWNrc3VtICE9PSBfdXRpbDIuZGVmYXVsdC5jYWxjX2NoZWNrc3VtKGtleSkpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoZWNrc3VtIG1pc21hdGNoJyk7XG5cbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uS2V5ID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uS2V5QWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgZGVjb2RlZC5jaGFyQ29kZUF0KDApKTtcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gyKSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogRml4IGN1c3RvbSB0eXBlcyBhZnRlciBjbG9uaW5nXG4gKi9cblB1YmxpY0tleUVuY3J5cHRlZFNlc3Npb25LZXkucHJvdG90eXBlLnBvc3RDbG9uZVR5cGVGaXggPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucHVibGljS2V5SWQgPSBfa2V5aWQyLmRlZmF1bHQuZnJvbUNsb25lKHRoaXMucHVibGljS2V5SWQpO1xuICB2YXIgYWxnbyA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCB0aGlzLnB1YmxpY0tleUFsZ29yaXRobSk7XG4gIHZhciB0eXBlcyA9IF9jcnlwdG8yLmRlZmF1bHQuZ2V0RW5jU2Vzc2lvbktleVBhcmFtVHlwZXMoYWxnbyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbmNyeXB0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmVuY3J5cHRlZFtpXSA9IHR5cGVzW2ldLmZyb21DbG9uZSh0aGlzLmVuY3J5cHRlZFtpXSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFB1YmxpY0tleUVuY3J5cHRlZFNlc3Npb25LZXk7XG5cbn0se1wiLi4vY3J5cHRvXCI6MzQwLFwiLi4vZW51bXNcIjozNTksXCIuLi90eXBlL2tleWlkXCI6Mzk0LFwiLi4vdHlwZS9tcGlcIjozOTUsXCIuLi91dGlsXCI6Mzk4LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM3OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcHVibGljX2tleSA9IF9kZXJlcV8oJy4vcHVibGljX2tleScpO1xuXG52YXIgX3B1YmxpY19rZXkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHVibGljX2tleSk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBBIFB1YmxpYy1TdWJrZXkgcGFja2V0ICh0YWcgMTQpIGhhcyBleGFjdGx5IHRoZSBzYW1lIGZvcm1hdCBhcyBhXG4gKiBQdWJsaWMtS2V5IHBhY2tldCwgYnV0IGRlbm90ZXMgYSBzdWJrZXkuICBPbmUgb3IgbW9yZSBzdWJrZXlzIG1heSBiZVxuICogYXNzb2NpYXRlZCB3aXRoIGEgdG9wLWxldmVsIGtleS4gIEJ5IGNvbnZlbnRpb24sIHRoZSB0b3AtbGV2ZWwga2V5XG4gKiBwcm92aWRlcyBzaWduYXR1cmUgc2VydmljZXMsIGFuZCB0aGUgc3Via2V5cyBwcm92aWRlIGVuY3J5cHRpb25cbiAqIHNlcnZpY2VzLlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXlcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgcGFja2V0L3B1YmxpY19rZXlcbiAqIEByZXF1aXJlcyBlbnVtc1xuICovXG5cbmZ1bmN0aW9uIFB1YmxpY1N1YmtleSgpIHtcbiAgX3B1YmxpY19rZXkyLmRlZmF1bHQuY2FsbCh0aGlzKTtcbiAgdGhpcy50YWcgPSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnB1YmxpY1N1YmtleTtcbn1cblxuUHVibGljU3Via2V5LnByb3RvdHlwZSA9IG5ldyBfcHVibGljX2tleTIuZGVmYXVsdCgpO1xuUHVibGljU3Via2V5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFB1YmxpY1N1YmtleTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUHVibGljU3Via2V5O1xuXG59LHtcIi4uL2VudW1zXCI6MzU5LFwiLi9wdWJsaWNfa2V5XCI6Mzc3fV0sMzgwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX3B1YmxpY19rZXkgPSBfZGVyZXFfKCcuL3B1YmxpY19rZXknKTtcblxudmFyIF9wdWJsaWNfa2V5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3B1YmxpY19rZXkpO1xuXG52YXIgX2tleWlkID0gX2RlcmVxXygnLi4vdHlwZS9rZXlpZC5qcycpO1xuXG52YXIgX2tleWlkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2tleWlkKTtcblxudmFyIF9zMmsgPSBfZGVyZXFfKCcuLi90eXBlL3MyaycpO1xuXG52YXIgX3MyazIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zMmspO1xuXG52YXIgX2NyeXB0byA9IF9kZXJlcV8oJy4uL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEEgU2VjcmV0LUtleSBwYWNrZXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIGZvdW5kIGluIGFcbiAqIFB1YmxpYy1LZXkgcGFja2V0LCBpbmNsdWRpbmcgdGhlIHB1YmxpYy1rZXkgbWF0ZXJpYWwsIGJ1dCBhbHNvXG4gKiBpbmNsdWRlcyB0aGUgc2VjcmV0LWtleSBtYXRlcmlhbCBhZnRlciBhbGwgdGhlIHB1YmxpYy1rZXkgZmllbGRzLlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgbW9kdWxlOnBhY2tldC5QdWJsaWNLZXlcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgcGFja2V0L3B1YmxpY19rZXlcbiAqIEByZXF1aXJlcyB0eXBlL2tleWlkXG4gKiBAcmVxdWlyZXMgdHlwZS9zMmtcbiAqIEByZXF1aXJlcyBjcnlwdG9cbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQHJlcXVpcmVzIHV0aWxcbiAqL1xuXG5mdW5jdGlvbiBTZWNyZXRLZXkoKSB7XG4gIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBuZXcgRGF0ZSgpO1xuXG4gIF9wdWJsaWNfa2V5Mi5kZWZhdWx0LmNhbGwodGhpcywgZGF0ZSk7XG4gIC8qKlxuICAgKiBQYWNrZXQgdHlwZVxuICAgKiBAdHlwZSB7bW9kdWxlOmVudW1zLnBhY2tldH1cbiAgICovXG4gIHRoaXMudGFnID0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zZWNyZXRLZXk7XG4gIC8qKlxuICAgKiBFbmNyeXB0ZWQgc2VjcmV0LWtleSBkYXRhXG4gICAqL1xuICB0aGlzLmVuY3J5cHRlZCA9IG51bGw7XG4gIC8qKlxuICAgKiBJbmRpY2F0b3IgaWYgc2VjcmV0LWtleSBkYXRhIGlzIGF2YWlsYWJsZSBpbiBkZWNyeXB0ZWQgZm9ybVxuICAgKi9cbiAgdGhpcy5pc0RlY3J5cHRlZCA9IGZhbHNlO1xufVxuXG5TZWNyZXRLZXkucHJvdG90eXBlID0gbmV3IF9wdWJsaWNfa2V5Mi5kZWZhdWx0KCk7XG5TZWNyZXRLZXkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VjcmV0S2V5O1xuXG5mdW5jdGlvbiBnZXRfaGFzaF9sZW4oaGFzaCkge1xuICBpZiAoaGFzaCA9PT0gJ3NoYTEnKSB7XG4gICAgcmV0dXJuIDIwO1xuICB9XG4gIHJldHVybiAyO1xufVxuXG5mdW5jdGlvbiBnZXRfaGFzaF9mbihoYXNoKSB7XG4gIGlmIChoYXNoID09PSAnc2hhMScpIHtcbiAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5oYXNoLnNoYTE7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKF91dGlsMi5kZWZhdWx0LmNhbGNfY2hlY2tzdW0oYyksIDIpO1xuICB9O1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cblxuZnVuY3Rpb24gcGFyc2VfY2xlYXJ0ZXh0X3BhcmFtcyhoYXNoX2FsZ29yaXRobSwgY2xlYXJ0ZXh0LCBhbGdvcml0aG0pIHtcbiAgaWYgKGhhc2hfYWxnb3JpdGhtKSB7XG4gICAgdmFyIGhhc2hsZW4gPSBnZXRfaGFzaF9sZW4oaGFzaF9hbGdvcml0aG0pO1xuICAgIHZhciBoYXNoZm4gPSBnZXRfaGFzaF9mbihoYXNoX2FsZ29yaXRobSk7XG5cbiAgICB2YXIgaGFzaHRleHQgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihjbGVhcnRleHQuc3ViYXJyYXkoY2xlYXJ0ZXh0Lmxlbmd0aCAtIGhhc2hsZW4sIGNsZWFydGV4dC5sZW5ndGgpKTtcbiAgICBjbGVhcnRleHQgPSBjbGVhcnRleHQuc3ViYXJyYXkoMCwgY2xlYXJ0ZXh0Lmxlbmd0aCAtIGhhc2hsZW4pO1xuICAgIHZhciBoYXNoID0gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIoaGFzaGZuKGNsZWFydGV4dCkpO1xuXG4gICAgaWYgKGhhc2ggIT09IGhhc2h0ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qga2V5IHBhc3NwaHJhc2VcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGFsZ28gPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgYWxnb3JpdGhtKTtcbiAgdmFyIHR5cGVzID0gX2NyeXB0bzIuZGVmYXVsdC5nZXRQcml2S2V5UGFyYW1UeXBlcyhhbGdvKTtcbiAgdmFyIHBhcmFtcyA9IF9jcnlwdG8yLmRlZmF1bHQuY29uc3RydWN0UGFyYW1zKHR5cGVzKTtcbiAgdmFyIHAgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoICYmIHAgPCBjbGVhcnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBwICs9IHBhcmFtc1tpXS5yZWFkKGNsZWFydGV4dC5zdWJhcnJheShwLCBjbGVhcnRleHQubGVuZ3RoKSk7XG4gICAgaWYgKHAgPiBjbGVhcnRleHQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIHJlYWRpbmcgcGFyYW0gQDonICsgcCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gd3JpdGVfY2xlYXJ0ZXh0X3BhcmFtcyhoYXNoX2FsZ29yaXRobSwgYWxnb3JpdGhtLCBwYXJhbXMpIHtcbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgYWxnbyA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCBhbGdvcml0aG0pO1xuICB2YXIgbnVtUHVibGljUGFyYW1zID0gX2NyeXB0bzIuZGVmYXVsdC5nZXRQdWJLZXlQYXJhbVR5cGVzKGFsZ28pLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gbnVtUHVibGljUGFyYW1zOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgYXJyLnB1c2gocGFyYW1zW2ldLndyaXRlKCkpO1xuICB9XG5cbiAgdmFyIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShhcnIpO1xuXG4gIGlmIChoYXNoX2FsZ29yaXRobSkge1xuICAgIHZhciBoYXNoID0gZ2V0X2hhc2hfZm4oaGFzaF9hbGdvcml0aG0pKGJ5dGVzKTtcblxuICAgIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtieXRlcywgaGFzaF0pO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG4vLyA1LjUuMy4gIFNlY3JldC1LZXkgUGFja2V0IEZvcm1hdHNcblxuLyoqXG4gKiBJbnRlcm5hbCBwYXJzZXIgZm9yIHByaXZhdGUga2V5cyBhcyBzcGVjaWZpZWQgaW5cbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vcGVucGdwLXJmYzQ4ODBiaXMtMDQjc2VjdGlvbi01LjUuM3xSRkM0ODgwYmlzLTA0IHNlY3Rpb24gNS41LjN9XG4gKiBAcGFyYW0ge1N0cmluZ30gYnl0ZXMgSW5wdXQgc3RyaW5nIHRvIHJlYWQgdGhlIHBhY2tldCBmcm9tXG4gKi9cblNlY3JldEtleS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAvLyAtIEEgUHVibGljLUtleSBvciBQdWJsaWMtU3Via2V5IHBhY2tldCwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuICB2YXIgbGVuID0gdGhpcy5yZWFkUHVibGljS2V5KGJ5dGVzKTtcblxuICBieXRlcyA9IGJ5dGVzLnN1YmFycmF5KGxlbiwgYnl0ZXMubGVuZ3RoKTtcblxuICAvLyAtIE9uZSBvY3RldCBpbmRpY2F0aW5nIHN0cmluZy10by1rZXkgdXNhZ2UgY29udmVudGlvbnMuICBaZXJvXG4gIC8vICAgaW5kaWNhdGVzIHRoYXQgdGhlIHNlY3JldC1rZXkgZGF0YSBpcyBub3QgZW5jcnlwdGVkLiAgMjU1IG9yIDI1NFxuICAvLyAgIGluZGljYXRlcyB0aGF0IGEgc3RyaW5nLXRvLWtleSBzcGVjaWZpZXIgaXMgYmVpbmcgZ2l2ZW4uICBBbnlcbiAgLy8gICBvdGhlciB2YWx1ZSBpcyBhIHN5bW1ldHJpYy1rZXkgZW5jcnlwdGlvbiBhbGdvcml0aG0gaWRlbnRpZmllci5cbiAgdmFyIGlzRW5jcnlwdGVkID0gYnl0ZXNbMF07XG5cbiAgaWYgKGlzRW5jcnlwdGVkKSB7XG4gICAgdGhpcy5lbmNyeXB0ZWQgPSBieXRlcztcbiAgfSBlbHNlIHtcbiAgICAvLyAtIFBsYWluIG9yIGVuY3J5cHRlZCBtdWx0aXByZWNpc2lvbiBpbnRlZ2VycyBjb21wcmlzaW5nIHRoZSBzZWNyZXRcbiAgICAvLyAgIGtleSBkYXRhLiAgVGhlc2UgYWxnb3JpdGhtLXNwZWNpZmljIGZpZWxkcyBhcmUgYXMgZGVzY3JpYmVkXG4gICAgLy8gICBiZWxvdy5cbiAgICB2YXIgcHJpdlBhcmFtcyA9IHBhcnNlX2NsZWFydGV4dF9wYXJhbXMoJ21vZCcsIGJ5dGVzLnN1YmFycmF5KDEsIGJ5dGVzLmxlbmd0aCksIHRoaXMuYWxnb3JpdGhtKTtcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMucGFyYW1zLmNvbmNhdChwcml2UGFyYW1zKTtcbiAgICB0aGlzLmlzRGVjcnlwdGVkID0gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIE9wZW5QR1Aga2V5IHBhY2tldCBmb3IgdGhlIGdpdmVuIGtleS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgc3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgdGhlIHNlY3JldCBrZXkgT3BlblBHUCBwYWNrZXRcbiAqL1xuU2VjcmV0S2V5LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyciA9IFt0aGlzLndyaXRlUHVibGljS2V5KCldO1xuXG4gIGlmICghdGhpcy5lbmNyeXB0ZWQpIHtcbiAgICBhcnIucHVzaChuZXcgVWludDhBcnJheShbMF0pKTtcbiAgICBhcnIucHVzaCh3cml0ZV9jbGVhcnRleHRfcGFyYW1zKCdtb2QnLCB0aGlzLmFsZ29yaXRobSwgdGhpcy5wYXJhbXMpKTtcbiAgfSBlbHNlIHtcbiAgICBhcnIucHVzaCh0aGlzLmVuY3J5cHRlZCk7XG4gIH1cblxuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShhcnIpO1xufTtcblxuLyoqXG4gKiBFbmNyeXB0IHRoZSBwYXlsb2FkLiBCeSBkZWZhdWx0LCB3ZSB1c2UgYWVzMjU2IGFuZCBpdGVyYXRlZCwgc2FsdGVkIHN0cmluZ1xuICogdG8ga2V5IHNwZWNpZmllci4gSWYgdGhlIGtleSBpcyBpbiBhIGRlY3J5cHRlZCBzdGF0ZSAoaXNEZWNyeXB0ZWQgPT09IHRydWUpXG4gKiBhbmQgdGhlIHBhc3NwaHJhc2UgaXMgZW1wdHkgb3IgdW5kZWZpbmVkLCB0aGUga2V5IHdpbGwgYmUgc2V0IGFzIG5vdCBlbmNyeXB0ZWQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSBwYXNzcGhyYXNlIHByb3RlY3Rpb24gYWZ0ZXIgY2FsbGluZyBkZWNyeXB0KCkuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFzc3BocmFzZVxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59XG4gKiBAYXN5bmNcbiAqL1xuU2VjcmV0S2V5LnByb3RvdHlwZS5lbmNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgczJrLCBzeW1tZXRyaWMsIGhhc2gsIGNsZWFydGV4dCwga2V5LCBibG9ja0xlbiwgaXYsIGFyciwgYWVhZCwgb3B0aW9uYWxGaWVsZHMsIG1vZGUsIG1vZGVJbnN0YW5jZSwgZW5jcnlwdGVkO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGlmICghKHRoaXMuaXNEZWNyeXB0ZWQgJiYgIXBhc3NwaHJhc2UpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbmNyeXB0ZWQgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgZmFsc2UpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHBhc3NwaHJhc2UpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBrZXkgbXVzdCBiZSBkZWNyeXB0ZWQgYmVmb3JlIHJlbW92aW5nIHBhc3NwaHJhc2UgcHJvdGVjdGlvbi4nKTtcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHMyayA9IG5ldyBfczJrMi5kZWZhdWx0KCk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTA7XG4gICAgICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5yYW5kb20uZ2V0UmFuZG9tQnl0ZXMoOCk7XG5cbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgczJrLnNhbHQgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgc3ltbWV0cmljID0gJ2FlczI1Nic7XG4gICAgICAgICAgICBoYXNoID0gdGhpcy52ZXJzaW9uID09PSA1ID8gbnVsbCA6ICdzaGExJztcbiAgICAgICAgICAgIGNsZWFydGV4dCA9IHdyaXRlX2NsZWFydGV4dF9wYXJhbXMoaGFzaCwgdGhpcy5hbGdvcml0aG0sIHRoaXMucGFyYW1zKTtcbiAgICAgICAgICAgIGtleSA9IHByb2R1Y2VFbmNyeXB0aW9uS2V5KHMyaywgcGFzc3BocmFzZSwgc3ltbWV0cmljKTtcbiAgICAgICAgICAgIGJsb2NrTGVuID0gX2NyeXB0bzIuZGVmYXVsdC5jaXBoZXJbc3ltbWV0cmljXS5ibG9ja1NpemU7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTg7XG4gICAgICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5yYW5kb20uZ2V0UmFuZG9tQnl0ZXMoYmxvY2tMZW4pO1xuXG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIGl2ID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIGFyciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKCEodGhpcy52ZXJzaW9uID09PSA1KSkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMzY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhZWFkID0gJ2VheCc7XG4gICAgICAgICAgICBvcHRpb25hbEZpZWxkcyA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW25ldyBVaW50OEFycmF5KFtfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgc3ltbWV0cmljKSwgX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5hZWFkLCBhZWFkKV0pLCBzMmsud3JpdGUoKSwgaXZdKTtcblxuICAgICAgICAgICAgYXJyID0gW25ldyBVaW50OEFycmF5KFsyNTMsIG9wdGlvbmFsRmllbGRzLmxlbmd0aF0pXTtcbiAgICAgICAgICAgIGFyci5wdXNoKG9wdGlvbmFsRmllbGRzKTtcbiAgICAgICAgICAgIG1vZGUgPSBfY3J5cHRvMi5kZWZhdWx0W2FlYWRdO1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI4O1xuICAgICAgICAgICAgcmV0dXJuIG1vZGUoc3ltbWV0cmljLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIG1vZGVJbnN0YW5jZSA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMzE7XG4gICAgICAgICAgICByZXR1cm4gbW9kZUluc3RhbmNlLmVuY3J5cHQoY2xlYXJ0ZXh0LCBpdi5zdWJhcnJheSgwLCBtb2RlLml2TGVuZ3RoKSwgbmV3IFVpbnQ4QXJyYXkoKSk7XG5cbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgZW5jcnlwdGVkID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgYXJyLnB1c2goX3V0aWwyLmRlZmF1bHQud3JpdGVOdW1iZXIoZW5jcnlwdGVkLmxlbmd0aCwgNCkpO1xuICAgICAgICAgICAgYXJyLnB1c2goZW5jcnlwdGVkKTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0MDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIGFyciA9IFtuZXcgVWludDhBcnJheShbMjU0LCBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgc3ltbWV0cmljKV0pXTtcbiAgICAgICAgICAgIGFyci5wdXNoKHMyay53cml0ZSgpKTtcbiAgICAgICAgICAgIGFyci5wdXNoKGl2KTtcbiAgICAgICAgICAgIGFyci5wdXNoKF9jcnlwdG8yLmRlZmF1bHQuY2ZiLm5vcm1hbEVuY3J5cHQoc3ltbWV0cmljLCBrZXksIGNsZWFydGV4dCwgaXYpKTtcblxuICAgICAgICAgIGNhc2UgNDA6XG5cbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGVkID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShhcnIpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94Mikge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIHByb2R1Y2VFbmNyeXB0aW9uS2V5KHMyaywgcGFzc3BocmFzZSwgYWxnb3JpdGhtKSB7XG4gIHJldHVybiBzMmsucHJvZHVjZV9rZXkocGFzc3BocmFzZSwgX2NyeXB0bzIuZGVmYXVsdC5jaXBoZXJbYWxnb3JpdGhtXS5rZXlTaXplKTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0cyB0aGUgcHJpdmF0ZSBrZXkgcGFyYW1zIHdoaWNoIGFyZSBuZWVkZWQgdG8gdXNlIHRoZSBrZXkuXG4gKiB7QGxpbmsgbW9kdWxlOnBhY2tldC5TZWNyZXRLZXkuaXNEZWNyeXB0ZWR9IHNob3VsZCBiZSBmYWxzZSwgYXNcbiAqIG90aGVyd2lzZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFzc3BocmFzZSBUaGUgcGFzc3BocmFzZSBmb3IgdGhpcyBwcml2YXRlIGtleSBhcyBzdHJpbmdcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fVxuICogQGFzeW5jXG4gKi9cblNlY3JldEtleS5wcm90b3R5cGUuZGVjcnlwdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgaSwgc3ltbWV0cmljLCBhZWFkLCBrZXksIHMya191c2FnZSwgczJrLCBpdiwgY2lwaGVydGV4dCwgY2xlYXJ0ZXh0LCBtb2RlLCBtb2RlSW5zdGFuY2UsIGhhc2gsIHByaXZQYXJhbXM7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0RlY3J5cHRlZCkge1xuICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBwYWNrZXQgaXMgYWxyZWFkeSBkZWNyeXB0ZWQuJyk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIHN5bW1ldHJpYyA9IHZvaWQgMDtcbiAgICAgICAgICAgIGFlYWQgPSB2b2lkIDA7XG4gICAgICAgICAgICBrZXkgPSB2b2lkIDA7XG4gICAgICAgICAgICBzMmtfdXNhZ2UgPSB0aGlzLmVuY3J5cHRlZFtpKytdO1xuXG4gICAgICAgICAgICAvLyAtIE9ubHkgZm9yIGEgdmVyc2lvbiA1IHBhY2tldCwgYSBvbmUtb2N0ZXQgc2NhbGFyIG9jdGV0IGNvdW50IG9mXG4gICAgICAgICAgICAvLyAgIHRoZSBuZXh0IDQgb3B0aW9uYWwgZmllbGRzLlxuXG4gICAgICAgICAgICBpZiAodGhpcy52ZXJzaW9uID09PSA1KSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gLSBbT3B0aW9uYWxdIElmIHN0cmluZy10by1rZXkgdXNhZ2Ugb2N0ZXQgd2FzIDI1NSwgMjU0LCBvciAyNTMsIGFcbiAgICAgICAgICAgIC8vICAgb25lLW9jdGV0IHN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsZ29yaXRobS5cbiAgICAgICAgICAgIGlmIChzMmtfdXNhZ2UgPT09IDI1NSB8fCBzMmtfdXNhZ2UgPT09IDI1NCB8fCBzMmtfdXNhZ2UgPT09IDI1Mykge1xuICAgICAgICAgICAgICBzeW1tZXRyaWMgPSB0aGlzLmVuY3J5cHRlZFtpKytdO1xuICAgICAgICAgICAgICBzeW1tZXRyaWMgPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLCBzeW1tZXRyaWMpO1xuXG4gICAgICAgICAgICAgIC8vIC0gW09wdGlvbmFsXSBJZiBzdHJpbmctdG8ta2V5IHVzYWdlIG9jdGV0IHdhcyAyNTMsIGEgb25lLW9jdGV0XG4gICAgICAgICAgICAgIC8vICAgQUVBRCBhbGdvcml0aG0uXG4gICAgICAgICAgICAgIGlmIChzMmtfdXNhZ2UgPT09IDI1Mykge1xuICAgICAgICAgICAgICAgIGFlYWQgPSB0aGlzLmVuY3J5cHRlZFtpKytdO1xuICAgICAgICAgICAgICAgIGFlYWQgPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuYWVhZCwgYWVhZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAtIFtPcHRpb25hbF0gSWYgc3RyaW5nLXRvLWtleSB1c2FnZSBvY3RldCB3YXMgMjU1LCAyNTQsIG9yIDI1MywgYVxuICAgICAgICAgICAgICAvLyAgIHN0cmluZy10by1rZXkgc3BlY2lmaWVyLiAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLXRvLWtleVxuICAgICAgICAgICAgICAvLyAgIHNwZWNpZmllciBpcyBpbXBsaWVkIGJ5IGl0cyB0eXBlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAgICAgICAgICAgIHMyayA9IG5ldyBfczJrMi5kZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgaSArPSBzMmsucmVhZCh0aGlzLmVuY3J5cHRlZC5zdWJhcnJheShpLCB0aGlzLmVuY3J5cHRlZC5sZW5ndGgpKTtcblxuICAgICAgICAgICAgICBrZXkgPSBwcm9kdWNlRW5jcnlwdGlvbktleShzMmssIHBhc3NwaHJhc2UsIHN5bW1ldHJpYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1tZXRyaWMgPSBzMmtfdXNhZ2U7XG4gICAgICAgICAgICAgIHN5bW1ldHJpYyA9IF9lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMsIHN5bW1ldHJpYyk7XG4gICAgICAgICAgICAgIGtleSA9IF9jcnlwdG8yLmRlZmF1bHQuaGFzaC5tZDUocGFzc3BocmFzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIC0gW09wdGlvbmFsXSBJZiBzZWNyZXQgZGF0YSBpcyBlbmNyeXB0ZWQgKHN0cmluZy10by1rZXkgdXNhZ2Ugb2N0ZXRcbiAgICAgICAgICAgIC8vICAgbm90IHplcm8pLCBhbiBJbml0aWFsIFZlY3RvciAoSVYpIG9mIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGVcbiAgICAgICAgICAgIC8vICAgY2lwaGVyJ3MgYmxvY2sgc2l6ZS5cbiAgICAgICAgICAgIGl2ID0gdGhpcy5lbmNyeXB0ZWQuc3ViYXJyYXkoaSwgaSArIF9jcnlwdG8yLmRlZmF1bHQuY2lwaGVyW3N5bW1ldHJpY10uYmxvY2tTaXplKTtcblxuXG4gICAgICAgICAgICBpICs9IGl2Lmxlbmd0aDtcblxuICAgICAgICAgICAgLy8gLSBPbmx5IGZvciBhIHZlcnNpb24gNSBwYWNrZXQsIGEgZm91ci1vY3RldCBzY2FsYXIgb2N0ZXQgY291bnQgZm9yXG4gICAgICAgICAgICAvLyAgIHRoZSBmb2xsb3dpbmcga2V5IG1hdGVyaWFsLlxuICAgICAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gNSkge1xuICAgICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLmVuY3J5cHRlZC5zdWJhcnJheShpLCB0aGlzLmVuY3J5cHRlZC5sZW5ndGgpO1xuICAgICAgICAgICAgY2xlYXJ0ZXh0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoIWFlYWQpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1vZGUgPSBfY3J5cHRvMi5kZWZhdWx0W2FlYWRdO1xuICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAxNjtcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTk7XG4gICAgICAgICAgICByZXR1cm4gbW9kZShzeW1tZXRyaWMsIGtleSk7XG5cbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgbW9kZUluc3RhbmNlID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDIyO1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVJbnN0YW5jZS5kZWNyeXB0KGNpcGhlcnRleHQsIGl2LnN1YmFycmF5KDAsIG1vZGUuaXZMZW5ndGgpLCBuZXcgVWludDhBcnJheSgpKTtcblxuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICBjbGVhcnRleHQgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDI1O1xuICAgICAgICAgICAgX2NvbnRleHQyLnQwID0gX2NvbnRleHQyWydjYXRjaCddKDE2KTtcblxuICAgICAgICAgICAgaWYgKCEoX2NvbnRleHQyLnQwLm1lc3NhZ2UgPT09ICdBdXRoZW50aWNhdGlvbiB0YWcgbWlzbWF0Y2gnKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3Qga2V5IHBhc3NwaHJhc2U6ICcgKyBfY29udGV4dDIudDAubWVzc2FnZSk7XG5cbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIGNsZWFydGV4dCA9IF9jcnlwdG8yLmRlZmF1bHQuY2ZiLm5vcm1hbERlY3J5cHQoc3ltbWV0cmljLCBrZXksIGNpcGhlcnRleHQsIGl2KTtcblxuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBoYXNoID0gczJrX3VzYWdlID09PSAyNTMgPyBudWxsIDogczJrX3VzYWdlID09PSAyNTQgPyAnc2hhMScgOiAnbW9kJztcbiAgICAgICAgICAgIHByaXZQYXJhbXMgPSBwYXJzZV9jbGVhcnRleHRfcGFyYW1zKGhhc2gsIGNsZWFydGV4dCwgdGhpcy5hbGdvcml0aG0pO1xuXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHRoaXMucGFyYW1zLmNvbmNhdChwcml2UGFyYW1zKTtcbiAgICAgICAgICAgIHRoaXMuaXNEZWNyeXB0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbmNyeXB0ZWQgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzLCBbWzE2LCAyNV1dKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gzKSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cblNlY3JldEtleS5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMyhiaXRzLCBjdXJ2ZSkge1xuICAgIHZhciBhbGdvO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBhbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMuYWxnb3JpdGhtKTtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBfY3J5cHRvMi5kZWZhdWx0LmdlbmVyYXRlUGFyYW1zKGFsZ28sIGJpdHMsIGN1cnZlKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gX2NvbnRleHQzLnNlbnQ7XG5cbiAgICAgICAgICAgIHRoaXMuaXNEZWNyeXB0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUzLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g0LCBfeDUpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBDbGVhciBwcml2YXRlIHBhcmFtcywgcmV0dXJuIHRvIGluaXRpYWwgc3RhdGVcbiAqL1xuU2VjcmV0S2V5LnByb3RvdHlwZS5jbGVhclByaXZhdGVQYXJhbXMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5lbmNyeXB0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIHNlY3JldCBrZXkgaXMgbm90IGVuY3J5cHRlZCwgY2xlYXJpbmcgcHJpdmF0ZSBwYXJhbXMgaXMgaXJyZXZlcnNpYmxlLicpO1xuICB9XG4gIHZhciBhbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMuYWxnb3JpdGhtKTtcbiAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtcy5zbGljZSgwLCBfY3J5cHRvMi5kZWZhdWx0LmdldFB1YktleVBhcmFtVHlwZXMoYWxnbykubGVuZ3RoKTtcbiAgdGhpcy5pc0RlY3J5cHRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXggY3VzdG9tIHR5cGVzIGFmdGVyIGNsb25pbmdcbiAqL1xuU2VjcmV0S2V5LnByb3RvdHlwZS5wb3N0Q2xvbmVUeXBlRml4ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWxnbyA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LCB0aGlzLmFsZ29yaXRobSk7XG4gIHZhciB0eXBlcyA9IFtdLmNvbmNhdChfY3J5cHRvMi5kZWZhdWx0LmdldFB1YktleVBhcmFtVHlwZXMoYWxnbyksIF9jcnlwdG8yLmRlZmF1bHQuZ2V0UHJpdktleVBhcmFtVHlwZXMoYWxnbykpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBhcmFtID0gdGhpcy5wYXJhbXNbaV07XG4gICAgdGhpcy5wYXJhbXNbaV0gPSB0eXBlc1tpXS5mcm9tQ2xvbmUocGFyYW0pO1xuICB9XG4gIGlmICh0aGlzLmtleWlkKSB7XG4gICAgdGhpcy5rZXlpZCA9IF9rZXlpZDIuZGVmYXVsdC5mcm9tQ2xvbmUodGhpcy5rZXlpZCk7XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFNlY3JldEtleTtcblxufSx7XCIuLi9jcnlwdG9cIjozNDAsXCIuLi9lbnVtc1wiOjM1OSxcIi4uL3R5cGUva2V5aWQuanNcIjozOTQsXCIuLi90eXBlL3Mya1wiOjM5NyxcIi4uL3V0aWxcIjozOTgsXCIuL3B1YmxpY19rZXlcIjozNzcsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzgxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zZWNyZXRfa2V5ID0gX2RlcmVxXygnLi9zZWNyZXRfa2V5Jyk7XG5cbnZhciBfc2VjcmV0X2tleTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZWNyZXRfa2V5KTtcblxudmFyIF9lbnVtcyA9IF9kZXJlcV8oJy4uL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEEgU2VjcmV0LVN1YmtleSBwYWNrZXQgKHRhZyA3KSBpcyB0aGUgc3Via2V5IGFuYWxvZyBvZiB0aGUgU2VjcmV0XG4gKiBLZXkgcGFja2V0IGFuZCBoYXMgZXhhY3RseSB0aGUgc2FtZSBmb3JtYXQuXG4gKiBAbWVtYmVyb2YgbW9kdWxlOnBhY2tldFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBtb2R1bGU6cGFja2V0LlNlY3JldEtleVxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyBwYWNrZXQvc2VjcmV0X2tleVxuICogQHJlcXVpcmVzIGVudW1zXG4gKi9cblxuZnVuY3Rpb24gU2VjcmV0U3Via2V5KCkge1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbmV3IERhdGUoKTtcblxuICBfc2VjcmV0X2tleTIuZGVmYXVsdC5jYWxsKHRoaXMsIGRhdGUpO1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc2VjcmV0U3Via2V5O1xufVxuXG5TZWNyZXRTdWJrZXkucHJvdG90eXBlID0gbmV3IF9zZWNyZXRfa2V5Mi5kZWZhdWx0KCk7XG5TZWNyZXRTdWJrZXkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VjcmV0U3Via2V5O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTZWNyZXRTdWJrZXk7XG5cbn0se1wiLi4vZW51bXNcIjozNTksXCIuL3NlY3JldF9rZXlcIjozODB9XSwzODI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3NsaWNlZFRvQXJyYXkyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXknKTtcblxudmFyIF9zbGljZWRUb0FycmF5MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NsaWNlZFRvQXJyYXkyKTtcblxudmFyIF9lbnRyaWVzID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9lbnRyaWVzJyk7XG5cbnZhciBfZW50cmllczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnRyaWVzKTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX3BhY2tldDIgPSBfZGVyZXFfKCcuL3BhY2tldCcpO1xuXG52YXIgX3BhY2tldDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYWNrZXQyKTtcblxudmFyIF9rZXlpZCA9IF9kZXJlcV8oJy4uL3R5cGUva2V5aWQuanMnKTtcblxudmFyIF9rZXlpZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlpZCk7XG5cbnZhciBfbXBpID0gX2RlcmVxXygnLi4vdHlwZS9tcGkuanMnKTtcblxudmFyIF9tcGkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbXBpKTtcblxudmFyIF9jcnlwdG8gPSBfZGVyZXFfKCcuLi9jcnlwdG8nKTtcblxudmFyIF9jcnlwdG8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3J5cHRvKTtcblxudmFyIF9lbnVtcyA9IF9kZXJlcV8oJy4uL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2lnbmF0dXJlIFBhY2tldCAoVGFnIDIpXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tNS4yfFJGQzQ0ODAgNS4yfTpcbiAqIEEgU2lnbmF0dXJlIHBhY2tldCBkZXNjcmliZXMgYSBiaW5kaW5nIGJldHdlZW4gc29tZSBwdWJsaWMga2V5IGFuZFxuICogc29tZSBkYXRhLiAgVGhlIG1vc3QgY29tbW9uIHNpZ25hdHVyZXMgYXJlIGEgc2lnbmF0dXJlIG9mIGEgZmlsZSBvciBhXG4gKiBibG9jayBvZiB0ZXh0LCBhbmQgYSBzaWduYXR1cmUgdGhhdCBpcyBhIGNlcnRpZmljYXRpb24gb2YgYSBVc2VyIElELlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtEYXRlfSBkYXRlIHRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSBzaWduYXR1cmVcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgcGFja2V0L3BhY2tldFxuICogQHJlcXVpcmVzIHR5cGUva2V5aWRcbiAqIEByZXF1aXJlcyB0eXBlL21waVxuICogQHJlcXVpcmVzIGNyeXB0b1xuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICovXG5cbmZ1bmN0aW9uIFNpZ25hdHVyZSgpIHtcbiAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG5ldyBEYXRlKCk7XG5cbiAgdGhpcy50YWcgPSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnNpZ25hdHVyZTtcbiAgdGhpcy52ZXJzaW9uID0gNDtcbiAgdGhpcy5zaWduYXR1cmVUeXBlID0gbnVsbDtcbiAgdGhpcy5oYXNoQWxnb3JpdGhtID0gbnVsbDtcbiAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBudWxsO1xuXG4gIHRoaXMuc2lnbmF0dXJlRGF0YSA9IG51bGw7XG4gIHRoaXMudW5oYXNoZWRTdWJwYWNrZXRzID0gbnVsbDtcbiAgdGhpcy5zaWduZWRIYXNoVmFsdWUgPSBudWxsO1xuXG4gIHRoaXMuY3JlYXRlZCA9IF91dGlsMi5kZWZhdWx0Lm5vcm1hbGl6ZURhdGUoZGF0ZSk7XG4gIHRoaXMuc2lnbmF0dXJlRXhwaXJhdGlvblRpbWUgPSBudWxsO1xuICB0aGlzLnNpZ25hdHVyZU5ldmVyRXhwaXJlcyA9IHRydWU7XG4gIHRoaXMuZXhwb3J0YWJsZSA9IG51bGw7XG4gIHRoaXMudHJ1c3RMZXZlbCA9IG51bGw7XG4gIHRoaXMudHJ1c3RBbW91bnQgPSBudWxsO1xuICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gbnVsbDtcbiAgdGhpcy5yZXZvY2FibGUgPSBudWxsO1xuICB0aGlzLmtleUV4cGlyYXRpb25UaW1lID0gbnVsbDtcbiAgdGhpcy5rZXlOZXZlckV4cGlyZXMgPSBudWxsO1xuICB0aGlzLnByZWZlcnJlZFN5bW1ldHJpY0FsZ29yaXRobXMgPSBudWxsO1xuICB0aGlzLnJldm9jYXRpb25LZXlDbGFzcyA9IG51bGw7XG4gIHRoaXMucmV2b2NhdGlvbktleUFsZ29yaXRobSA9IG51bGw7XG4gIHRoaXMucmV2b2NhdGlvbktleUZpbmdlcnByaW50ID0gbnVsbDtcbiAgdGhpcy5pc3N1ZXJLZXlJZCA9IG5ldyBfa2V5aWQyLmRlZmF1bHQoKTtcbiAgdGhpcy5ub3RhdGlvbiA9IG51bGw7XG4gIHRoaXMucHJlZmVycmVkSGFzaEFsZ29yaXRobXMgPSBudWxsO1xuICB0aGlzLnByZWZlcnJlZENvbXByZXNzaW9uQWxnb3JpdGhtcyA9IG51bGw7XG4gIHRoaXMua2V5U2VydmVyUHJlZmVyZW5jZXMgPSBudWxsO1xuICB0aGlzLnByZWZlcnJlZEtleVNlcnZlciA9IG51bGw7XG4gIHRoaXMuaXNQcmltYXJ5VXNlcklEID0gbnVsbDtcbiAgdGhpcy5wb2xpY3lVUkkgPSBudWxsO1xuICB0aGlzLmtleUZsYWdzID0gbnVsbDtcbiAgdGhpcy5zaWduZXJzVXNlcklkID0gbnVsbDtcbiAgdGhpcy5yZWFzb25Gb3JSZXZvY2F0aW9uRmxhZyA9IG51bGw7XG4gIHRoaXMucmVhc29uRm9yUmV2b2NhdGlvblN0cmluZyA9IG51bGw7XG4gIHRoaXMuZmVhdHVyZXMgPSBudWxsO1xuICB0aGlzLnNpZ25hdHVyZVRhcmdldFB1YmxpY0tleUFsZ29yaXRobSA9IG51bGw7XG4gIHRoaXMuc2lnbmF0dXJlVGFyZ2V0SGFzaEFsZ29yaXRobSA9IG51bGw7XG4gIHRoaXMuc2lnbmF0dXJlVGFyZ2V0SGFzaCA9IG51bGw7XG4gIHRoaXMuZW1iZWRkZWRTaWduYXR1cmUgPSBudWxsO1xuICB0aGlzLmlzc3VlcktleVZlcnNpb24gPSBudWxsO1xuICB0aGlzLmlzc3VlckZpbmdlcnByaW50ID0gbnVsbDtcbiAgdGhpcy5wcmVmZXJyZWRBZWFkQWxnb3JpdGhtcyA9IG51bGw7XG5cbiAgdGhpcy52ZXJpZmllZCA9IG51bGw7XG4gIHRoaXMucmV2b2tlZCA9IG51bGw7XG59XG5cbi8qKlxuICogcGFyc2luZyBmdW5jdGlvbiBmb3IgYSBzaWduYXR1cmUgcGFja2V0ICh0YWcgMikuXG4gKiBAcGFyYW0ge1N0cmluZ30gYnl0ZXMgcGF5bG9hZCBvZiBhIHRhZyAyIHBhY2tldFxuICogQHBhcmFtIHtJbnRlZ2VyfSBwb3NpdGlvbiBwb3NpdGlvbiB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGJ5dGVzIHN0cmluZ1xuICogQHBhcmFtIHtJbnRlZ2VyfSBsZW4gbGVuZ3RoIG9mIHRoZSBwYWNrZXQgb3IgdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgYnl0ZXMgYXQgcG9zaXRpb25cbiAqIEByZXR1cm5zIHttb2R1bGU6cGFja2V0LlNpZ25hdHVyZX0gb2JqZWN0IHJlcHJlc2VudGF0aW9uXG4gKi9cblNpZ25hdHVyZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBpID0gMDtcbiAgdGhpcy52ZXJzaW9uID0gYnl0ZXNbaSsrXTtcblxuICB2YXIgc3VicGFja2V0cyA9IGZ1bmN0aW9uIHN1YnBhY2tldHMoYnl0ZXMpIHtcbiAgICAvLyBUd28tb2N0ZXQgc2NhbGFyIG9jdGV0IGNvdW50IGZvciBmb2xsb3dpbmcgc3VicGFja2V0IGRhdGEuXG4gICAgdmFyIHN1YnBhY2tldF9sZW5ndGggPSBfdXRpbDIuZGVmYXVsdC5yZWFkTnVtYmVyKGJ5dGVzLnN1YmFycmF5KDAsIDIpKTtcblxuICAgIHZhciBpID0gMjtcblxuICAgIC8vIHN1YnBhY2tldCBkYXRhIHNldCAoemVybyBvciBtb3JlIHN1YnBhY2tldHMpXG4gICAgd2hpbGUgKGkgPCAyICsgc3VicGFja2V0X2xlbmd0aCkge1xuICAgICAgdmFyIGxlbiA9IF9wYWNrZXQzLmRlZmF1bHQucmVhZFNpbXBsZUxlbmd0aChieXRlcy5zdWJhcnJheShpLCBieXRlcy5sZW5ndGgpKTtcbiAgICAgIGkgKz0gbGVuLm9mZnNldDtcblxuICAgICAgX3RoaXMucmVhZF9zdWJfcGFja2V0KGJ5dGVzLnN1YmFycmF5KGksIGkgKyBsZW4ubGVuKSk7XG5cbiAgICAgIGkgKz0gbGVuLmxlbjtcbiAgICB9XG5cbiAgICByZXR1cm4gaTtcbiAgfTtcblxuICAvLyBzd2l0Y2ggb24gdmVyc2lvbiAoMyBhbmQgNClcbiAgc3dpdGNoICh0aGlzLnZlcnNpb24pIHtcbiAgICBjYXNlIDM6XG4gICAgICB7XG4gICAgICAgIC8vIE9uZS1vY3RldCBsZW5ndGggb2YgZm9sbG93aW5nIGhhc2hlZCBtYXRlcmlhbC4gTVVTVCBiZSA1LlxuICAgICAgICBpZiAoYnl0ZXNbaSsrXSAhPT0gNSkge1xuICAgICAgICAgIF91dGlsMi5kZWZhdWx0LnByaW50X2RlYnVnKFwicGFja2V0L3NpZ25hdHVyZS5qc1xcblwiICsgJ2ludmFsaWQgT25lLW9jdGV0IGxlbmd0aCBvZiBmb2xsb3dpbmcgaGFzaGVkIG1hdGVyaWFsLicgKyAnTVVTVCBiZSA1LiBAOicgKyAoaSAtIDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWdwb3MgPSBpO1xuICAgICAgICAvLyBPbmUtb2N0ZXQgc2lnbmF0dXJlIHR5cGUuXG4gICAgICAgIHRoaXMuc2lnbmF0dXJlVHlwZSA9IGJ5dGVzW2krK107XG5cbiAgICAgICAgLy8gRm91ci1vY3RldCBjcmVhdGlvbiB0aW1lLlxuICAgICAgICB0aGlzLmNyZWF0ZWQgPSBfdXRpbDIuZGVmYXVsdC5yZWFkRGF0ZShieXRlcy5zdWJhcnJheShpLCBpICsgNCkpO1xuICAgICAgICBpICs9IDQ7XG5cbiAgICAgICAgLy8gc3RvcmluZyBkYXRhIGFwcGVuZGVkIHRvIGRhdGEgd2hpY2ggZ2V0cyB2ZXJpZmllZFxuICAgICAgICB0aGlzLnNpZ25hdHVyZURhdGEgPSBieXRlcy5zdWJhcnJheShzaWdwb3MsIGkpO1xuXG4gICAgICAgIC8vIEVpZ2h0LW9jdGV0IEtleSBJRCBvZiBzaWduZXIuXG4gICAgICAgIHRoaXMuaXNzdWVyS2V5SWQucmVhZChieXRlcy5zdWJhcnJheShpLCBpICsgOCkpO1xuICAgICAgICBpICs9IDg7XG5cbiAgICAgICAgLy8gT25lLW9jdGV0IHB1YmxpYy1rZXkgYWxnb3JpdGhtLlxuICAgICAgICB0aGlzLnB1YmxpY0tleUFsZ29yaXRobSA9IGJ5dGVzW2krK107XG5cbiAgICAgICAgLy8gT25lLW9jdGV0IGhhc2ggYWxnb3JpdGhtLlxuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG0gPSBieXRlc1tpKytdO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIDQ6XG4gICAgICB7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlVHlwZSA9IGJ5dGVzW2krK107XG4gICAgICAgIHRoaXMucHVibGljS2V5QWxnb3JpdGhtID0gYnl0ZXNbaSsrXTtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtID0gYnl0ZXNbaSsrXTtcblxuICAgICAgICAvLyBoYXNoZWQgc3VicGFja2V0c1xuICAgICAgICBpICs9IHN1YnBhY2tldHMoYnl0ZXMuc3ViYXJyYXkoaSwgYnl0ZXMubGVuZ3RoKSwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gQSBWNCBzaWduYXR1cmUgaGFzaGVzIHRoZSBwYWNrZXQgYm9keVxuICAgICAgICAvLyBzdGFydGluZyBmcm9tIGl0cyBmaXJzdCBmaWVsZCwgdGhlIHZlcnNpb24gbnVtYmVyLCB0aHJvdWdoIHRoZSBlbmRcbiAgICAgICAgLy8gb2YgdGhlIGhhc2hlZCBzdWJwYWNrZXQgZGF0YS4gIFRodXMsIHRoZSBmaWVsZHMgaGFzaGVkIGFyZSB0aGVcbiAgICAgICAgLy8gc2lnbmF0dXJlIHZlcnNpb24sIHRoZSBzaWduYXR1cmUgdHlwZSwgdGhlIHB1YmxpYy1rZXkgYWxnb3JpdGhtLCB0aGVcbiAgICAgICAgLy8gaGFzaCBhbGdvcml0aG0sIHRoZSBoYXNoZWQgc3VicGFja2V0IGxlbmd0aCwgYW5kIHRoZSBoYXNoZWRcbiAgICAgICAgLy8gc3VicGFja2V0IGJvZHkuXG4gICAgICAgIHRoaXMuc2lnbmF0dXJlRGF0YSA9IGJ5dGVzLnN1YmFycmF5KDAsIGkpO1xuICAgICAgICB2YXIgc2lnRGF0YUxlbmd0aCA9IGk7XG5cbiAgICAgICAgLy8gdW5oYXNoZWQgc3VicGFja2V0c1xuICAgICAgICBpICs9IHN1YnBhY2tldHMoYnl0ZXMuc3ViYXJyYXkoaSwgYnl0ZXMubGVuZ3RoKSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnVuaGFzaGVkU3VicGFja2V0cyA9IGJ5dGVzLnN1YmFycmF5KHNpZ0RhdGFMZW5ndGgsIGkpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlcnNpb24gJyArIHRoaXMudmVyc2lvbiArICcgb2YgdGhlIHNpZ25hdHVyZSBpcyB1bnN1cHBvcnRlZC4nKTtcbiAgfVxuXG4gIC8vIFR3by1vY3RldCBmaWVsZCBob2xkaW5nIGxlZnQgMTYgYml0cyBvZiBzaWduZWQgaGFzaCB2YWx1ZS5cbiAgdGhpcy5zaWduZWRIYXNoVmFsdWUgPSBieXRlcy5zdWJhcnJheShpLCBpICsgMik7XG4gIGkgKz0gMjtcblxuICB0aGlzLnNpZ25hdHVyZSA9IGJ5dGVzLnN1YmFycmF5KGksIGJ5dGVzLmxlbmd0aCk7XG59O1xuXG5TaWduYXR1cmUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gW107XG4gIHN3aXRjaCAodGhpcy52ZXJzaW9uKSB7XG4gICAgY2FzZSAzOlxuICAgICAgYXJyLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzMsIDVdKSk7IC8vIHZlcnNpb24sIE9uZS1vY3RldCBsZW5ndGggb2YgZm9sbG93aW5nIGhhc2hlZCBtYXRlcmlhbC4gIE1VU1QgYmUgNVxuICAgICAgYXJyLnB1c2gobmV3IFVpbnQ4QXJyYXkoW3RoaXMuc2lnbmF0dXJlVHlwZV0pKTtcbiAgICAgIGFyci5wdXNoKF91dGlsMi5kZWZhdWx0LndyaXRlRGF0ZSh0aGlzLmNyZWF0ZWQpKTtcbiAgICAgIGFyci5wdXNoKHRoaXMuaXNzdWVyS2V5SWQud3JpdGUoKSk7XG4gICAgICBhcnIucHVzaChuZXcgVWludDhBcnJheShbX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMucHVibGljS2V5QWxnb3JpdGhtKSwgX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG0pXSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgYXJyLnB1c2godGhpcy5zaWduYXR1cmVEYXRhKTtcbiAgICAgIGFyci5wdXNoKHRoaXMudW5oYXNoZWRTdWJwYWNrZXRzID8gdGhpcy51bmhhc2hlZFN1YnBhY2tldHMgOiBfdXRpbDIuZGVmYXVsdC53cml0ZU51bWJlcigwLCAyKSk7XG4gICAgICBicmVhaztcbiAgfVxuICBhcnIucHVzaCh0aGlzLnNpZ25lZEhhc2hWYWx1ZSk7XG4gIGFyci5wdXNoKHRoaXMuc2lnbmF0dXJlKTtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoYXJyKTtcbn07XG5cbi8qKlxuICogU2lnbnMgcHJvdmlkZWQgZGF0YS4gVGhpcyBuZWVkcyB0byBiZSBkb25lIHByaW9yIHRvIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0ge21vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fSBrZXkgcHJpdmF0ZSBrZXkgdXNlZCB0byBzaWduIHRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgQ29udGFpbnMgcGFja2V0cyB0byBiZSBzaWduZWQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5TaWduYXR1cmUucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoa2V5LCBkYXRhKSB7XG4gICAgdmFyIHNpZ25hdHVyZVR5cGUsIHB1YmxpY0tleUFsZ29yaXRobSwgaGFzaEFsZ29yaXRobSwgYXJyLCB0cmFpbGVyLCB0b0hhc2gsIGhhc2g7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc2lnbmF0dXJlVHlwZSA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQuc2lnbmF0dXJlLCB0aGlzLnNpZ25hdHVyZVR5cGUpO1xuICAgICAgICAgICAgcHVibGljS2V5QWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXksIHRoaXMucHVibGljS2V5QWxnb3JpdGhtKTtcbiAgICAgICAgICAgIGhhc2hBbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0Lmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobSk7XG4gICAgICAgICAgICBhcnIgPSBbbmV3IFVpbnQ4QXJyYXkoWzQsIHNpZ25hdHVyZVR5cGUsIHB1YmxpY0tleUFsZ29yaXRobSwgaGFzaEFsZ29yaXRobV0pXTtcblxuXG4gICAgICAgICAgICBpZiAoa2V5LnZlcnNpb24gPT09IDUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgY291bGQgYWxzbyBnZW5lcmF0ZSB0aGlzIHN1YnBhY2tldCBmb3IgdmVyc2lvbiA0IGtleXMsIGJ1dCBmb3JcbiAgICAgICAgICAgICAgLy8gbm93IHdlIGRvbid0LlxuICAgICAgICAgICAgICB0aGlzLmlzc3VlcktleVZlcnNpb24gPSBrZXkudmVyc2lvbjtcbiAgICAgICAgICAgICAgdGhpcy5pc3N1ZXJGaW5nZXJwcmludCA9IGtleS5nZXRGaW5nZXJwcmludEJ5dGVzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXNzdWVyS2V5SWQgPSBrZXkuZ2V0S2V5SWQoKTtcblxuICAgICAgICAgICAgLy8gQWRkIGhhc2hlZCBzdWJwYWNrZXRzXG4gICAgICAgICAgICBhcnIucHVzaCh0aGlzLndyaXRlX2FsbF9zdWJfcGFja2V0cygpKTtcblxuICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVEYXRhID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShhcnIpO1xuXG4gICAgICAgICAgICB0cmFpbGVyID0gdGhpcy5jYWxjdWxhdGVUcmFpbGVyKCk7XG4gICAgICAgICAgICB0b0hhc2ggPSBudWxsO1xuICAgICAgICAgICAgX2NvbnRleHQudDAgPSB0aGlzLnZlcnNpb247XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gX2NvbnRleHQudDAgPT09IDMgPyAxMyA6IF9jb250ZXh0LnQwID09PSA0ID8gMTUgOiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRvSGFzaCA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3RoaXMudG9TaWduKHNpZ25hdHVyZVR5cGUsIGRhdGEpLCBuZXcgVWludDhBcnJheShbc2lnbmF0dXJlVHlwZV0pLCBfdXRpbDIuZGVmYXVsdC53cml0ZURhdGUodGhpcy5jcmVhdGVkKV0pO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgnYnJlYWsnLCAxOCk7XG5cbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdG9IYXNoID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbdGhpcy50b1NpZ24oc2lnbmF0dXJlVHlwZSwgZGF0YSksIHRoaXMuc2lnbmF0dXJlRGF0YSwgdHJhaWxlcl0pO1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgnYnJlYWsnLCAxOCk7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWZXJzaW9uICcgKyB0aGlzLnZlcnNpb24gKyAnIG9mIHRoZSBzaWduYXR1cmUgaXMgdW5zdXBwb3J0ZWQuJyk7XG5cbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgaGFzaCA9IF9jcnlwdG8yLmRlZmF1bHQuaGFzaC5kaWdlc3QoaGFzaEFsZ29yaXRobSwgdG9IYXNoKTtcblxuXG4gICAgICAgICAgICB0aGlzLnNpZ25lZEhhc2hWYWx1ZSA9IGhhc2guc3ViYXJyYXkoMCwgMik7XG5cbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyMjtcbiAgICAgICAgICAgIHJldHVybiBfY3J5cHRvMi5kZWZhdWx0LnNpZ25hdHVyZS5zaWduKHB1YmxpY0tleUFsZ29yaXRobSwgaGFzaEFsZ29yaXRobSwga2V5LnBhcmFtcywgdG9IYXNoKTtcblxuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICB0aGlzLnNpZ25hdHVyZSA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCdyZXR1cm4nLCB0cnVlKTtcblxuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gyLCBfeDMpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIENyZWF0ZXMgc3RyaW5nIG9mIGJ5dGVzIHdpdGggYWxsIHN1YnBhY2tldCBkYXRhXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBhIHN0cmluZy1yZXByZXNlbnRhdGlvbiBvZiBhIGFsbCBzdWJwYWNrZXQgZGF0YVxuICovXG5TaWduYXR1cmUucHJvdG90eXBlLndyaXRlX2FsbF9zdWJfcGFja2V0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN1YiA9IF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmVTdWJwYWNrZXQ7XG4gIHZhciBhcnIgPSBbXTtcbiAgdmFyIGJ5dGVzID0gdm9pZCAwO1xuICBpZiAodGhpcy5jcmVhdGVkICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIuc2lnbmF0dXJlX2NyZWF0aW9uX3RpbWUsIF91dGlsMi5kZWZhdWx0LndyaXRlRGF0ZSh0aGlzLmNyZWF0ZWQpKSk7XG4gIH1cbiAgaWYgKHRoaXMuc2lnbmF0dXJlRXhwaXJhdGlvblRpbWUgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5zaWduYXR1cmVfZXhwaXJhdGlvbl90aW1lLCBfdXRpbDIuZGVmYXVsdC53cml0ZU51bWJlcih0aGlzLnNpZ25hdHVyZUV4cGlyYXRpb25UaW1lLCA0KSkpO1xuICB9XG4gIGlmICh0aGlzLmV4cG9ydGFibGUgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5leHBvcnRhYmxlX2NlcnRpZmljYXRpb24sIG5ldyBVaW50OEFycmF5KFt0aGlzLmV4cG9ydGFibGUgPyAxIDogMF0pKSk7XG4gIH1cbiAgaWYgKHRoaXMudHJ1c3RMZXZlbCAhPT0gbnVsbCkge1xuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoW3RoaXMudHJ1c3RMZXZlbCwgdGhpcy50cnVzdEFtb3VudF0pO1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLnRydXN0X3NpZ25hdHVyZSwgYnl0ZXMpKTtcbiAgfVxuICBpZiAodGhpcy5yZWd1bGFyRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLnJlZ3VsYXJfZXhwcmVzc2lvbiwgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbikpO1xuICB9XG4gIGlmICh0aGlzLnJldm9jYWJsZSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLnJldm9jYWJsZSwgbmV3IFVpbnQ4QXJyYXkoW3RoaXMucmV2b2NhYmxlID8gMSA6IDBdKSkpO1xuICB9XG4gIGlmICh0aGlzLmtleUV4cGlyYXRpb25UaW1lICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIua2V5X2V4cGlyYXRpb25fdGltZSwgX3V0aWwyLmRlZmF1bHQud3JpdGVOdW1iZXIodGhpcy5rZXlFeHBpcmF0aW9uVGltZSwgNCkpKTtcbiAgfVxuICBpZiAodGhpcy5wcmVmZXJyZWRTeW1tZXRyaWNBbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgYnl0ZXMgPSBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cih0aGlzLnByZWZlcnJlZFN5bW1ldHJpY0FsZ29yaXRobXMpKTtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5wcmVmZXJyZWRfc3ltbWV0cmljX2FsZ29yaXRobXMsIGJ5dGVzKSk7XG4gIH1cbiAgaWYgKHRoaXMucmV2b2NhdGlvbktleUNsYXNzICE9PSBudWxsKSB7XG4gICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShbdGhpcy5yZXZvY2F0aW9uS2V5Q2xhc3MsIHRoaXMucmV2b2NhdGlvbktleUFsZ29yaXRobV0pO1xuICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbYnl0ZXMsIHRoaXMucmV2b2NhdGlvbktleUZpbmdlcnByaW50XSk7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIucmV2b2NhdGlvbl9rZXksIGJ5dGVzKSk7XG4gIH1cbiAgaWYgKCF0aGlzLmlzc3VlcktleUlkLmlzTnVsbCgpICYmIHRoaXMuaXNzdWVyS2V5VmVyc2lvbiAhPT0gNSkge1xuICAgIC8vIElmIHRoZSB2ZXJzaW9uIG9mIFt0aGVdIGtleSBpcyBncmVhdGVyIHRoYW4gNCwgdGhpcyBzdWJwYWNrZXRcbiAgICAvLyBNVVNUIE5PVCBiZSBpbmNsdWRlZCBpbiB0aGUgc2lnbmF0dXJlLlxuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLmlzc3VlciwgdGhpcy5pc3N1ZXJLZXlJZC53cml0ZSgpKSk7XG4gIH1cbiAgaWYgKHRoaXMubm90YXRpb24gIT09IG51bGwpIHtcbiAgICAoMCwgX2VudHJpZXMyLmRlZmF1bHQpKHRoaXMubm90YXRpb24pLmZvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgX3JlZjMgPSAoMCwgX3NsaWNlZFRvQXJyYXkzLmRlZmF1bHQpKF9yZWYyLCAyKSxcbiAgICAgICAgICBuYW1lID0gX3JlZjNbMF0sXG4gICAgICAgICAgdmFsdWUgPSBfcmVmM1sxXTtcblxuICAgICAgYnl0ZXMgPSBbbmV3IFVpbnQ4QXJyYXkoWzB4ODAsIDAsIDAsIDBdKV07XG4gICAgICAvLyAyIG9jdGV0cyBvZiBuYW1lIGxlbmd0aFxuICAgICAgYnl0ZXMucHVzaChfdXRpbDIuZGVmYXVsdC53cml0ZU51bWJlcihuYW1lLmxlbmd0aCwgMikpO1xuICAgICAgLy8gMiBvY3RldHMgb2YgdmFsdWUgbGVuZ3RoXG4gICAgICBieXRlcy5wdXNoKF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKHZhbHVlLmxlbmd0aCwgMikpO1xuICAgICAgYnl0ZXMucHVzaChfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShuYW1lICsgdmFsdWUpKTtcbiAgICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShieXRlcyk7XG4gICAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5ub3RhdGlvbl9kYXRhLCBieXRlcykpO1xuICAgIH0pO1xuICB9XG4gIGlmICh0aGlzLnByZWZlcnJlZEhhc2hBbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgYnl0ZXMgPSBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cih0aGlzLnByZWZlcnJlZEhhc2hBbGdvcml0aG1zKSk7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIucHJlZmVycmVkX2hhc2hfYWxnb3JpdGhtcywgYnl0ZXMpKTtcbiAgfVxuICBpZiAodGhpcy5wcmVmZXJyZWRDb21wcmVzc2lvbkFsZ29yaXRobXMgIT09IG51bGwpIHtcbiAgICBieXRlcyA9IF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKHRoaXMucHJlZmVycmVkQ29tcHJlc3Npb25BbGdvcml0aG1zKSk7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIucHJlZmVycmVkX2NvbXByZXNzaW9uX2FsZ29yaXRobXMsIGJ5dGVzKSk7XG4gIH1cbiAgaWYgKHRoaXMua2V5U2VydmVyUHJlZmVyZW5jZXMgIT09IG51bGwpIHtcbiAgICBieXRlcyA9IF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKHRoaXMua2V5U2VydmVyUHJlZmVyZW5jZXMpKTtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5rZXlfc2VydmVyX3ByZWZlcmVuY2VzLCBieXRlcykpO1xuICB9XG4gIGlmICh0aGlzLnByZWZlcnJlZEtleVNlcnZlciAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLnByZWZlcnJlZF9rZXlfc2VydmVyLCBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheSh0aGlzLnByZWZlcnJlZEtleVNlcnZlcikpKTtcbiAgfVxuICBpZiAodGhpcy5pc1ByaW1hcnlVc2VySUQgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5wcmltYXJ5X3VzZXJfaWQsIG5ldyBVaW50OEFycmF5KFt0aGlzLmlzUHJpbWFyeVVzZXJJRCA/IDEgOiAwXSkpKTtcbiAgfVxuICBpZiAodGhpcy5wb2xpY3lVUkkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5wb2xpY3lfdXJpLCBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheSh0aGlzLnBvbGljeVVSSSkpKTtcbiAgfVxuICBpZiAodGhpcy5rZXlGbGFncyAhPT0gbnVsbCkge1xuICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkoX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIodGhpcy5rZXlGbGFncykpO1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLmtleV9mbGFncywgYnl0ZXMpKTtcbiAgfVxuICBpZiAodGhpcy5zaWduZXJzVXNlcklkICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIuc2lnbmVyc191c2VyX2lkLCBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheSh0aGlzLnNpZ25lcnNVc2VySWQpKSk7XG4gIH1cbiAgaWYgKHRoaXMucmVhc29uRm9yUmV2b2NhdGlvbkZsYWcgIT09IG51bGwpIHtcbiAgICBieXRlcyA9IF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFzb25Gb3JSZXZvY2F0aW9uRmxhZykgKyB0aGlzLnJlYXNvbkZvclJldm9jYXRpb25TdHJpbmcpO1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLnJlYXNvbl9mb3JfcmV2b2NhdGlvbiwgYnl0ZXMpKTtcbiAgfVxuICBpZiAodGhpcy5mZWF0dXJlcyAhPT0gbnVsbCkge1xuICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkoX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIodGhpcy5mZWF0dXJlcykpO1xuICAgIGFyci5wdXNoKHdyaXRlX3N1Yl9wYWNrZXQoc3ViLmZlYXR1cmVzLCBieXRlcykpO1xuICB9XG4gIGlmICh0aGlzLnNpZ25hdHVyZVRhcmdldFB1YmxpY0tleUFsZ29yaXRobSAhPT0gbnVsbCkge1xuICAgIGJ5dGVzID0gW25ldyBVaW50OEFycmF5KFt0aGlzLnNpZ25hdHVyZVRhcmdldFB1YmxpY0tleUFsZ29yaXRobSwgdGhpcy5zaWduYXR1cmVUYXJnZXRIYXNoQWxnb3JpdGhtXSldO1xuICAgIGJ5dGVzLnB1c2goX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkodGhpcy5zaWduYXR1cmVUYXJnZXRIYXNoKSk7XG4gICAgYnl0ZXMgPSBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KGJ5dGVzKTtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5zaWduYXR1cmVfdGFyZ2V0LCBieXRlcykpO1xuICB9XG4gIGlmICh0aGlzLmVtYmVkZGVkU2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2god3JpdGVfc3ViX3BhY2tldChzdWIuZW1iZWRkZWRfc2lnbmF0dXJlLCB0aGlzLmVtYmVkZGVkU2lnbmF0dXJlLndyaXRlKCkpKTtcbiAgfVxuICBpZiAodGhpcy5pc3N1ZXJGaW5nZXJwcmludCAhPT0gbnVsbCkge1xuICAgIGJ5dGVzID0gW25ldyBVaW50OEFycmF5KFt0aGlzLmlzc3VlcktleVZlcnNpb25dKSwgdGhpcy5pc3N1ZXJGaW5nZXJwcmludF07XG4gICAgYnl0ZXMgPSBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KGJ5dGVzKTtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5pc3N1ZXJfZmluZ2VycHJpbnQsIGJ5dGVzKSk7XG4gIH1cbiAgaWYgKHRoaXMucHJlZmVycmVkQWVhZEFsZ29yaXRobXMgIT09IG51bGwpIHtcbiAgICBieXRlcyA9IF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKHRoaXMucHJlZmVycmVkQWVhZEFsZ29yaXRobXMpKTtcbiAgICBhcnIucHVzaCh3cml0ZV9zdWJfcGFja2V0KHN1Yi5wcmVmZXJyZWRfYWVhZF9hbGdvcml0aG1zLCBieXRlcykpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoYXJyKTtcbiAgdmFyIGxlbmd0aCA9IF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKHJlc3VsdC5sZW5ndGgsIDIpO1xuXG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtsZW5ndGgsIHJlc3VsdF0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3ViIHNpZ25hdHVyZSBwYWNrZXRcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tNS4yLjMuMXxSRkM0ODgwIDUuMi4zLjF9XG4gKiBAc2VlIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTUuMi4zLjJ8UkZDNDg4MCA1LjIuMy4yfVxuICogQHBhcmFtIHtJbnRlZ2VyfSB0eXBlIHN1YnBhY2tldCBzaWduYXR1cmUgdHlwZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhIGRhdGEgdG8gYmUgaW5jbHVkZWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGEgc3RyaW5nLXJlcHJlc2VudGF0aW9uIG9mIGEgc3ViIHNpZ25hdHVyZSBwYWNrZXRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlX3N1Yl9wYWNrZXQodHlwZSwgZGF0YSkge1xuICB2YXIgYXJyID0gW107XG4gIGFyci5wdXNoKF9wYWNrZXQzLmRlZmF1bHQud3JpdGVTaW1wbGVMZW5ndGgoZGF0YS5sZW5ndGggKyAxKSk7XG4gIGFyci5wdXNoKG5ldyBVaW50OEFycmF5KFt0eXBlXSkpO1xuICBhcnIucHVzaChkYXRhKTtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoYXJyKTtcbn1cblxuLy8gVjQgc2lnbmF0dXJlIHN1YiBwYWNrZXRzXG5cblNpZ25hdHVyZS5wcm90b3R5cGUucmVhZF9zdWJfcGFja2V0ID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHZhciBteXBvcyA9IDA7XG5cbiAgdmFyIHJlYWRfYXJyYXkgPSBmdW5jdGlvbiByZWFkX2FycmF5KHByb3AsIGJ5dGVzKSB7XG4gICAgX3RoaXMyW3Byb3BdID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfdGhpczJbcHJvcF0ucHVzaChieXRlc1tpXSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFRoZSBsZWZ0d29zdCBiaXQgZGVub3RlcyBhIFwiY3JpdGljYWxcIiBwYWNrZXQsIGJ1dCB3ZSBpZ25vcmUgaXQuXG4gIHZhciB0eXBlID0gYnl0ZXNbbXlwb3MrK10gJiAweDdGO1xuICB2YXIgc2Vjb25kcyA9IHZvaWQgMDtcblxuICAvLyBzdWJwYWNrZXQgdHlwZVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIDI6XG4gICAgICAvLyBTaWduYXR1cmUgQ3JlYXRpb24gVGltZVxuICAgICAgdGhpcy5jcmVhdGVkID0gX3V0aWwyLmRlZmF1bHQucmVhZERhdGUoYnl0ZXMuc3ViYXJyYXkobXlwb3MsIGJ5dGVzLmxlbmd0aCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgLy8gU2lnbmF0dXJlIEV4cGlyYXRpb24gVGltZSBpbiBzZWNvbmRzXG4gICAgICBzZWNvbmRzID0gX3V0aWwyLmRlZmF1bHQucmVhZE51bWJlcihieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKSk7XG5cbiAgICAgIHRoaXMuc2lnbmF0dXJlTmV2ZXJFeHBpcmVzID0gc2Vjb25kcyA9PT0gMDtcbiAgICAgIHRoaXMuc2lnbmF0dXJlRXhwaXJhdGlvblRpbWUgPSBzZWNvbmRzO1xuXG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICAvLyBFeHBvcnRhYmxlIENlcnRpZmljYXRpb25cbiAgICAgIHRoaXMuZXhwb3J0YWJsZSA9IGJ5dGVzW215cG9zKytdID09PSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgLy8gVHJ1c3QgU2lnbmF0dXJlXG4gICAgICB0aGlzLnRydXN0TGV2ZWwgPSBieXRlc1tteXBvcysrXTtcbiAgICAgIHRoaXMudHJ1c3RBbW91bnQgPSBieXRlc1tteXBvcysrXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNjpcbiAgICAgIC8vIFJlZ3VsYXIgRXhwcmVzc2lvblxuICAgICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IGJ5dGVzW215cG9zXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNzpcbiAgICAgIC8vIFJldm9jYWJsZVxuICAgICAgdGhpcy5yZXZvY2FibGUgPSBieXRlc1tteXBvcysrXSA9PT0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTpcbiAgICAgIC8vIEtleSBFeHBpcmF0aW9uIFRpbWUgaW4gc2Vjb25kc1xuICAgICAgc2Vjb25kcyA9IF91dGlsMi5kZWZhdWx0LnJlYWROdW1iZXIoYnl0ZXMuc3ViYXJyYXkobXlwb3MsIGJ5dGVzLmxlbmd0aCkpO1xuXG4gICAgICB0aGlzLmtleUV4cGlyYXRpb25UaW1lID0gc2Vjb25kcztcbiAgICAgIHRoaXMua2V5TmV2ZXJFeHBpcmVzID0gc2Vjb25kcyA9PT0gMDtcblxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMTpcbiAgICAgIC8vIFByZWZlcnJlZCBTeW1tZXRyaWMgQWxnb3JpdGhtc1xuICAgICAgcmVhZF9hcnJheSgncHJlZmVycmVkU3ltbWV0cmljQWxnb3JpdGhtcycsIGJ5dGVzLnN1YmFycmF5KG15cG9zLCBieXRlcy5sZW5ndGgpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTI6XG4gICAgICAvLyBSZXZvY2F0aW9uIEtleVxuICAgICAgLy8gKDEgb2N0ZXQgb2YgY2xhc3MsIDEgb2N0ZXQgb2YgcHVibGljLWtleSBhbGdvcml0aG0gSUQsIDIwXG4gICAgICAvLyBvY3RldHMgb2ZcbiAgICAgIC8vIGZpbmdlcnByaW50KVxuICAgICAgdGhpcy5yZXZvY2F0aW9uS2V5Q2xhc3MgPSBieXRlc1tteXBvcysrXTtcbiAgICAgIHRoaXMucmV2b2NhdGlvbktleUFsZ29yaXRobSA9IGJ5dGVzW215cG9zKytdO1xuICAgICAgdGhpcy5yZXZvY2F0aW9uS2V5RmluZ2VycHJpbnQgPSBieXRlcy5zdWJhcnJheShteXBvcywgbXlwb3MgKyAyMCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTY6XG4gICAgICAvLyBJc3N1ZXJcbiAgICAgIHRoaXMuaXNzdWVyS2V5SWQucmVhZChieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjA6XG4gICAgICAvLyBOb3RhdGlvbiBEYXRhXG4gICAgICAvLyBXZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgYnV0IGEgdGV4dCBmbGFnZ2VkIGRhdGEuXG4gICAgICBpZiAoYnl0ZXNbbXlwb3NdID09PSAweDgwKSB7XG4gICAgICAgIC8vIFdlIGV4dHJhY3Qga2V5L3ZhbHVlIHR1cGxlIGZyb20gdGhlIGJ5dGUgc3RyZWFtLlxuICAgICAgICBteXBvcyArPSA0O1xuICAgICAgICB2YXIgbSA9IF91dGlsMi5kZWZhdWx0LnJlYWROdW1iZXIoYnl0ZXMuc3ViYXJyYXkobXlwb3MsIG15cG9zICsgMikpO1xuICAgICAgICBteXBvcyArPSAyO1xuICAgICAgICB2YXIgbiA9IF91dGlsMi5kZWZhdWx0LnJlYWROdW1iZXIoYnl0ZXMuc3ViYXJyYXkobXlwb3MsIG15cG9zICsgMikpO1xuICAgICAgICBteXBvcyArPSAyO1xuXG4gICAgICAgIHZhciBuYW1lID0gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIoYnl0ZXMuc3ViYXJyYXkobXlwb3MsIG15cG9zICsgbSkpO1xuICAgICAgICB2YXIgdmFsdWUgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShteXBvcyArIG0sIG15cG9zICsgbSArIG4pKTtcblxuICAgICAgICB0aGlzLm5vdGF0aW9uID0gdGhpcy5ub3RhdGlvbiB8fCB7fTtcbiAgICAgICAgdGhpcy5ub3RhdGlvbltuYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3V0aWwyLmRlZmF1bHQucHJpbnRfZGVidWcoXCJVbnN1cHBvcnRlZCBub3RhdGlvbiBmbGFnIFwiICsgYnl0ZXNbbXlwb3NdKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjE6XG4gICAgICAvLyBQcmVmZXJyZWQgSGFzaCBBbGdvcml0aG1zXG4gICAgICByZWFkX2FycmF5KCdwcmVmZXJyZWRIYXNoQWxnb3JpdGhtcycsIGJ5dGVzLnN1YmFycmF5KG15cG9zLCBieXRlcy5sZW5ndGgpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjI6XG4gICAgICAvLyBQcmVmZXJyZWQgQ29tcHJlc3Npb24gQWxnb3JpdGhtc1xuICAgICAgcmVhZF9hcnJheSgncHJlZmVycmVkQ29tcHJlc3Npb25BbGdvcml0aG1zJywgYnl0ZXMuc3ViYXJyYXkobXlwb3MsIGJ5dGVzLmxlbmd0aCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyMzpcbiAgICAgIC8vIEtleSBTZXJ2ZXIgUHJlZmVyZW5jZXNcbiAgICAgIHJlYWRfYXJyYXkoJ2tleVNlcnZlclByZWZlcmVuY2VzJywgYnl0ZXMuc3ViYXJyYXkobXlwb3MsIGJ5dGVzLmxlbmd0aCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyNDpcbiAgICAgIC8vIFByZWZlcnJlZCBLZXkgU2VydmVyXG4gICAgICB0aGlzLnByZWZlcnJlZEtleVNlcnZlciA9IF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9fc3RyKGJ5dGVzLnN1YmFycmF5KG15cG9zLCBieXRlcy5sZW5ndGgpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjU6XG4gICAgICAvLyBQcmltYXJ5IFVzZXIgSURcbiAgICAgIHRoaXMuaXNQcmltYXJ5VXNlcklEID0gYnl0ZXNbbXlwb3MrK10gIT09IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI2OlxuICAgICAgLy8gUG9saWN5IFVSSVxuICAgICAgdGhpcy5wb2xpY3lVUkkgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI3OlxuICAgICAgLy8gS2V5IEZsYWdzXG4gICAgICByZWFkX2FycmF5KCdrZXlGbGFncycsIGJ5dGVzLnN1YmFycmF5KG15cG9zLCBieXRlcy5sZW5ndGgpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjg6XG4gICAgICAvLyBTaWduZXIncyBVc2VyIElEXG4gICAgICB0aGlzLnNpZ25lcnNVc2VySWQgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI5OlxuICAgICAgLy8gUmVhc29uIGZvciBSZXZvY2F0aW9uXG4gICAgICB0aGlzLnJlYXNvbkZvclJldm9jYXRpb25GbGFnID0gYnl0ZXNbbXlwb3MrK107XG4gICAgICB0aGlzLnJlYXNvbkZvclJldm9jYXRpb25TdHJpbmcgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDMwOlxuICAgICAgLy8gRmVhdHVyZXNcbiAgICAgIHJlYWRfYXJyYXkoJ2ZlYXR1cmVzJywgYnl0ZXMuc3ViYXJyYXkobXlwb3MsIGJ5dGVzLmxlbmd0aCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzMTpcbiAgICAgIHtcbiAgICAgICAgLy8gU2lnbmF0dXJlIFRhcmdldFxuICAgICAgICAvLyAoMSBvY3RldCBwdWJsaWMta2V5IGFsZ29yaXRobSwgMSBvY3RldCBoYXNoIGFsZ29yaXRobSwgTiBvY3RldHMgaGFzaClcbiAgICAgICAgdGhpcy5zaWduYXR1cmVUYXJnZXRQdWJsaWNLZXlBbGdvcml0aG0gPSBieXRlc1tteXBvcysrXTtcbiAgICAgICAgdGhpcy5zaWduYXR1cmVUYXJnZXRIYXNoQWxnb3JpdGhtID0gYnl0ZXNbbXlwb3MrK107XG5cbiAgICAgICAgdmFyIGxlbiA9IF9jcnlwdG8yLmRlZmF1bHQuZ2V0SGFzaEJ5dGVMZW5ndGgodGhpcy5zaWduYXR1cmVUYXJnZXRIYXNoQWxnb3JpdGhtKTtcblxuICAgICAgICB0aGlzLnNpZ25hdHVyZVRhcmdldEhhc2ggPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShteXBvcywgbXlwb3MgKyBsZW4pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSAzMjpcbiAgICAgIC8vIEVtYmVkZGVkIFNpZ25hdHVyZVxuICAgICAgdGhpcy5lbWJlZGRlZFNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoKTtcbiAgICAgIHRoaXMuZW1iZWRkZWRTaWduYXR1cmUucmVhZChieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDMzOlxuICAgICAgLy8gSXNzdWVyIEZpbmdlcnByaW50XG4gICAgICB0aGlzLmlzc3VlcktleVZlcnNpb24gPSBieXRlc1tteXBvcysrXTtcbiAgICAgIHRoaXMuaXNzdWVyRmluZ2VycHJpbnQgPSBieXRlcy5zdWJhcnJheShteXBvcywgYnl0ZXMubGVuZ3RoKTtcbiAgICAgIGlmICh0aGlzLmlzc3VlcktleVZlcnNpb24gPT09IDUpIHtcbiAgICAgICAgdGhpcy5pc3N1ZXJLZXlJZC5yZWFkKHRoaXMuaXNzdWVyRmluZ2VycHJpbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc3N1ZXJLZXlJZC5yZWFkKHRoaXMuaXNzdWVyRmluZ2VycHJpbnQuc3ViYXJyYXkoLTgpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzQ6XG4gICAgICAvLyBQcmVmZXJyZWQgQUVBRCBBbGdvcml0aG1zXG4gICAgICByZWFkX2FycmF5LmNhbGwodGhpcywgJ3ByZWZlcnJlZEFlYWRBbGdvcml0aG1zJywgYnl0ZXMuc3ViYXJyYXkobXlwb3MsIGJ5dGVzLmxlbmd0aCkpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIF91dGlsMi5kZWZhdWx0LnByaW50X2RlYnVnKFwiVW5rbm93biBzaWduYXR1cmUgc3VicGFja2V0IHR5cGUgXCIgKyB0eXBlICsgXCIgQDpcIiArIG15cG9zKTtcbiAgfVxufTtcblxuLy8gUHJvZHVjZXMgZGF0YSB0byBwcm9kdWNlIHNpZ25hdHVyZSBvblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b1NpZ24gPSBmdW5jdGlvbiAodHlwZSwgZGF0YSkge1xuICB2YXIgdCA9IF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmU7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSB0LmJpbmFyeTpcbiAgICAgIHJldHVybiBkYXRhLmdldEJ5dGVzKCk7XG5cbiAgICBjYXNlIHQudGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBkYXRhLmdldFRleHQoKTtcbiAgICAgICAgLy8gbm9ybWFsaXplIEVPTCB0byBcXHJcXG5cbiAgICAgICAgdGV4dCA9IF91dGlsMi5kZWZhdWx0LmNhbm9uaWNhbGl6ZUVPTCh0ZXh0KTtcbiAgICAgICAgLy8gZW5jb2RlIFVURjhcbiAgICAgICAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LnN0cl90b19VaW50OEFycmF5KF91dGlsMi5kZWZhdWx0LmVuY29kZV91dGY4KHRleHQpKTtcbiAgICAgIH1cbiAgICBjYXNlIHQuc3RhbmRhbG9uZTpcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcblxuICAgIGNhc2UgdC5jZXJ0X2dlbmVyaWM6XG4gICAgY2FzZSB0LmNlcnRfcGVyc29uYTpcbiAgICBjYXNlIHQuY2VydF9jYXN1YWw6XG4gICAgY2FzZSB0LmNlcnRfcG9zaXRpdmU6XG4gICAgY2FzZSB0LmNlcnRfcmV2b2NhdGlvbjpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYWNrZXQgPSB2b2lkIDA7XG4gICAgICAgIHZhciB0YWcgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKGRhdGEudXNlcmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YWcgPSAweEI0O1xuICAgICAgICAgIF9wYWNrZXQgPSBkYXRhLnVzZXJpZDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnVzZXJhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhZyA9IDB4RDE7XG4gICAgICAgICAgX3BhY2tldCA9IGRhdGEudXNlcmF0dHJpYnV0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBhIHVzZXJpZCBvciB1c2VyYXR0cmlidXRlIHBhY2tldCBuZWVkcyB0byBiZSAnICsgJ3N1cHBsaWVkIGZvciBjZXJ0aWZpY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ5dGVzID0gX3BhY2tldC53cml0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDQpIHtcbiAgICAgICAgICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbdGhpcy50b1NpZ24odC5rZXksIGRhdGEpLCBuZXcgVWludDhBcnJheShbdGFnXSksIF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKGJ5dGVzLmxlbmd0aCwgNCksIGJ5dGVzXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAzKSB7XG4gICAgICAgICAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3RoaXMudG9TaWduKHQua2V5LCBkYXRhKSwgYnl0ZXNdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIHQuc3Via2V5X2JpbmRpbmc6XG4gICAgY2FzZSB0LnN1YmtleV9yZXZvY2F0aW9uOlxuICAgIGNhc2UgdC5rZXlfYmluZGluZzpcbiAgICAgIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFt0aGlzLnRvU2lnbih0LmtleSwgZGF0YSksIHRoaXMudG9TaWduKHQua2V5LCB7XG4gICAgICAgIGtleTogZGF0YS5iaW5kXG4gICAgICB9KV0pO1xuXG4gICAgY2FzZSB0LmtleTpcbiAgICAgIGlmIChkYXRhLmtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignS2V5IHBhY2tldCBpcyByZXF1aXJlZCBmb3IgdGhpcyBzaWduYXR1cmUuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YS5rZXkud3JpdGVPbGQoKTtcblxuICAgIGNhc2UgdC5rZXlfcmV2b2NhdGlvbjpcbiAgICAgIHJldHVybiB0aGlzLnRvU2lnbih0LmtleSwgZGF0YSk7XG4gICAgY2FzZSB0LnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICBjYXNlIHQudGhpcmRfcGFydHk6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc2lnbmF0dXJlIHR5cGUuJyk7XG4gIH1cbn07XG5cblNpZ25hdHVyZS5wcm90b3R5cGUuY2FsY3VsYXRlVHJhaWxlciA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gY2FsY3VsYXRpbmcgdGhlIHRyYWlsZXJcbiAgLy8gVjMgc2lnbmF0dXJlcyBkb24ndCBoYXZlIGEgdHJhaWxlclxuICBpZiAodGhpcy52ZXJzaW9uID09PSAzKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICB9XG4gIHZhciBmaXJzdCA9IG5ldyBVaW50OEFycmF5KFs0LCAweEZGXSk7IC8vVmVyc2lvbiwgP1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbZmlyc3QsIF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKHRoaXMuc2lnbmF0dXJlRGF0YS5sZW5ndGgsIDQpXSk7XG59O1xuXG4vKipcbiAqIHZlcmlmeXMgdGhlIHNpZ25hdHVyZSBwYWNrZXQuIE5vdGU6IG5vdCBzaWduYXR1cmUgdHlwZXMgYXJlIGltcGxlbWVudGVkXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGRhdGEgZGF0YSB3aGljaCBvbiB0aGUgc2lnbmF0dXJlIGFwcGxpZXNcbiAqIEBwYXJhbSB7bW9kdWxlOnBhY2tldC5QdWJsaWNTdWJrZXl8bW9kdWxlOnBhY2tldC5QdWJsaWNLZXl8XG4gKiAgICAgICAgIG1vZHVsZTpwYWNrZXQuU2VjcmV0U3Via2V5fG1vZHVsZTpwYWNrZXQuU2VjcmV0S2V5fSBrZXkgdGhlIHB1YmxpYyBrZXkgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fSBUcnVlIGlmIG1lc3NhZ2UgaXMgdmVyaWZpZWQsIGVsc2UgZmFsc2UuXG4gKiBAYXN5bmNcbiAqL1xuU2lnbmF0dXJlLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihrZXksIGRhdGEpIHtcbiAgICB2YXIgc2lnbmF0dXJlVHlwZSwgcHVibGljS2V5QWxnb3JpdGhtLCBoYXNoQWxnb3JpdGhtLCBieXRlcywgdHJhaWxlciwgbXBpY291bnQsIGVuZGlhbiwgbXBpLCBpLCBqO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBzaWduYXR1cmVUeXBlID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5zaWduYXR1cmUsIHRoaXMuc2lnbmF0dXJlVHlwZSk7XG4gICAgICAgICAgICBwdWJsaWNLZXlBbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleSwgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0pO1xuICAgICAgICAgICAgaGFzaEFsZ29yaXRobSA9IF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQuaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtKTtcbiAgICAgICAgICAgIGJ5dGVzID0gdGhpcy50b1NpZ24oc2lnbmF0dXJlVHlwZSwgZGF0YSk7XG4gICAgICAgICAgICB0cmFpbGVyID0gdGhpcy5jYWxjdWxhdGVUcmFpbGVyKCk7XG4gICAgICAgICAgICBtcGljb3VudCA9IDA7XG4gICAgICAgICAgICAvLyBBbGdvcml0aG0tU3BlY2lmaWMgRmllbGRzIGZvciBSU0Egc2lnbmF0dXJlczpcbiAgICAgICAgICAgIC8vICAgICAgLSBtdWx0aXByZWNpc2lvbiBudW1iZXIgKE1QSSkgb2YgUlNBIHNpZ25hdHVyZSB2YWx1ZSBtKipkIG1vZCBuLlxuXG4gICAgICAgICAgICBpZiAocHVibGljS2V5QWxnb3JpdGhtID4gMCAmJiBwdWJsaWNLZXlBbGdvcml0aG0gPCA0KSB7XG4gICAgICAgICAgICAgIG1waWNvdW50ID0gMTtcblxuICAgICAgICAgICAgICAvLyAgICBBbGdvcml0aG0tU3BlY2lmaWMgRmllbGRzIGZvciBEU0EsIEVDRFNBLCBhbmQgRWREU0Egc2lnbmF0dXJlczpcbiAgICAgICAgICAgICAgLy8gICAgICAtIE1QSSBvZiBEU0EgdmFsdWUgci5cbiAgICAgICAgICAgICAgLy8gICAgICAtIE1QSSBvZiBEU0EgdmFsdWUgcy5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHVibGljS2V5QWxnb3JpdGhtID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmRzYSB8fCBwdWJsaWNLZXlBbGdvcml0aG0gPT09IF9lbnVtczIuZGVmYXVsdC5wdWJsaWNLZXkuZWNkc2EgfHwgcHVibGljS2V5QWxnb3JpdGhtID09PSBfZW51bXMyLmRlZmF1bHQucHVibGljS2V5LmVkZHNhKSB7XG4gICAgICAgICAgICAgIG1waWNvdW50ID0gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRWREU0Egc2lnbmF0dXJlIHBhcmFtZXRlcnMgYXJlIGVuY29kZWQgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXRcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MDMyI3NlY3Rpb24tNS4xLjJcbiAgICAgICAgICAgIGVuZGlhbiA9IHB1YmxpY0tleUFsZ29yaXRobSA9PT0gX2VudW1zMi5kZWZhdWx0LnB1YmxpY0tleS5lZGRzYSA/ICdsZScgOiAnYmUnO1xuICAgICAgICAgICAgbXBpID0gW107XG4gICAgICAgICAgICBpID0gMDtcblxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1waWNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgbXBpW2pdID0gbmV3IF9tcGkyLmRlZmF1bHQoKTtcbiAgICAgICAgICAgICAgaSArPSBtcGlbal0ucmVhZCh0aGlzLnNpZ25hdHVyZS5zdWJhcnJheShpLCB0aGlzLnNpZ25hdHVyZS5sZW5ndGgpLCBlbmRpYW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDEzO1xuICAgICAgICAgICAgcmV0dXJuIF9jcnlwdG8yLmRlZmF1bHQuc2lnbmF0dXJlLnZlcmlmeShwdWJsaWNLZXlBbGdvcml0aG0sIGhhc2hBbGdvcml0aG0sIG1waSwga2V5LnBhcmFtcywgX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbYnl0ZXMsIHRoaXMuc2lnbmF0dXJlRGF0YSwgdHJhaWxlcl0pKTtcblxuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICB0aGlzLnZlcmlmaWVkID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgncmV0dXJuJywgdGhpcy52ZXJpZmllZCk7XG5cbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g0LCBfeDUpIHtcbiAgICByZXR1cm4gX3JlZjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBWZXJpZmllcyBzaWduYXR1cmUgZXhwaXJhdGlvbiBkYXRlXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgKG9wdGlvbmFsKSB1c2UgdGhlIGdpdmVuIGRhdGUgZm9yIHZlcmlmaWNhdGlvbiBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIGV4cGlyZWRcbiAqL1xuU2lnbmF0dXJlLnByb3RvdHlwZS5pc0V4cGlyZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBuZXcgRGF0ZSgpO1xuXG4gIHZhciBub3JtRGF0ZSA9IF91dGlsMi5kZWZhdWx0Lm5vcm1hbGl6ZURhdGUoZGF0ZSk7XG4gIGlmIChub3JtRGF0ZSAhPT0gbnVsbCkge1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IHRoaXMuZ2V0RXhwaXJhdGlvblRpbWUoKTtcbiAgICByZXR1cm4gISh0aGlzLmNyZWF0ZWQgPD0gbm9ybURhdGUgJiYgbm9ybURhdGUgPCBleHBpcmF0aW9uVGltZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHBpcmF0aW9uIHRpbWUgb2YgdGhlIHNpZ25hdHVyZSBvciBJbmZpbml0eSBpZiBzaWduYXR1cmUgZG9lcyBub3QgZXhwaXJlXG4gKiBAcmV0dXJucyB7RGF0ZX0gZXhwaXJhdGlvbiB0aW1lXG4gKi9cblNpZ25hdHVyZS5wcm90b3R5cGUuZ2V0RXhwaXJhdGlvblRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhdGhpcy5zaWduYXR1cmVOZXZlckV4cGlyZXMgPyBuZXcgRGF0ZSh0aGlzLmNyZWF0ZWQuZ2V0VGltZSgpICsgdGhpcy5zaWduYXR1cmVFeHBpcmF0aW9uVGltZSAqIDEwMDApIDogSW5maW5pdHk7XG59O1xuXG4vKipcbiAqIEZpeCBjdXN0b20gdHlwZXMgYWZ0ZXIgY2xvbmluZ1xuICovXG5TaWduYXR1cmUucHJvdG90eXBlLnBvc3RDbG9uZVR5cGVGaXggPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaXNzdWVyS2V5SWQgPSBfa2V5aWQyLmRlZmF1bHQuZnJvbUNsb25lKHRoaXMuaXNzdWVyS2V5SWQpO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gU2lnbmF0dXJlO1xuXG59LHtcIi4uL2NyeXB0b1wiOjM0MCxcIi4uL2VudW1zXCI6MzU5LFwiLi4vdHlwZS9rZXlpZC5qc1wiOjM5NCxcIi4uL3R5cGUvbXBpLmpzXCI6Mzk1LFwiLi4vdXRpbFwiOjM5OCxcIi4vcGFja2V0XCI6Mzc1LFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9lbnRyaWVzXCI6MjcsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIjo0MCxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM4MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcHJvbWlzZSA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlJyk7XG5cbnZhciBfcHJvbWlzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9taXNlKTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX2NvbmZpZyA9IF9kZXJlcV8oJy4uL2NvbmZpZycpO1xuXG52YXIgX2NvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25maWcpO1xuXG52YXIgX2NyeXB0byA9IF9kZXJlcV8oJy4uL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyBPcGVuUEdQLmpzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTYgVGFua3JlZCBIYXNlXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgY29uZmlnXG4gKiBAcmVxdWlyZXMgY3J5cHRvXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKi9cblxudmFyIFZFUlNJT04gPSAxOyAvLyBBIG9uZS1vY3RldCB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGF0YSBwYWNrZXQuXG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN5bW1ldHJpY2FsbHkgRW5jcnlwdGVkIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoXG4gKiBBZGRpdGlvbmFsIERhdGEgKEFFQUQpIFByb3RlY3RlZCBEYXRhIFBhY2tldFxuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtZm9yZC1vcGVucGdwLWZvcm1hdC0wMCNzZWN0aW9uLTIuMX06XG4gKiBBRUFEIFByb3RlY3RlZCBEYXRhIFBhY2tldFxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBTeW1FbmNyeXB0ZWRBRUFEUHJvdGVjdGVkKCkge1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc3ltRW5jcnlwdGVkQUVBRFByb3RlY3RlZDtcbiAgdGhpcy52ZXJzaW9uID0gVkVSU0lPTjtcbiAgdGhpcy5jaXBoZXJBbGdvID0gbnVsbDtcbiAgdGhpcy5hZWFkQWxnb3JpdGhtID0gJ2VheCc7XG4gIHRoaXMuYWVhZEFsZ28gPSBudWxsO1xuICB0aGlzLmNodW5rU2l6ZUJ5dGUgPSBudWxsO1xuICB0aGlzLml2ID0gbnVsbDtcbiAgdGhpcy5lbmNyeXB0ZWQgPSBudWxsO1xuICB0aGlzLnBhY2tldHMgPSBudWxsO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBTeW1FbmNyeXB0ZWRBRUFEUHJvdGVjdGVkO1xuXG4vKipcbiAqIFBhcnNlIGFuIGVuY3J5cHRlZCBwYXlsb2FkIG9mIGJ5dGVzIGluIHRoZSBvcmRlcjogdmVyc2lvbiwgSVYsIGNpcGhlcnRleHQgKHNlZSBzcGVjaWZpY2F0aW9uKVxuICovXG5cblN5bUVuY3J5cHRlZEFFQURQcm90ZWN0ZWQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIGlmIChieXRlc1tvZmZzZXRdICE9PSBWRVJTSU9OKSB7XG4gICAgLy8gVGhlIG9ubHkgY3VycmVudGx5IGRlZmluZWQgdmFsdWUgaXMgMS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFja2V0IHZlcnNpb24uJyk7XG4gIH1cbiAgb2Zmc2V0Kys7XG4gIGlmIChfY29uZmlnMi5kZWZhdWx0LmFlYWRfcHJvdGVjdF92ZXJzaW9uID09PSA0KSB7XG4gICAgdGhpcy5jaXBoZXJBbGdvID0gYnl0ZXNbb2Zmc2V0KytdO1xuICAgIHRoaXMuYWVhZEFsZ28gPSBieXRlc1tvZmZzZXQrK107XG4gICAgdGhpcy5jaHVua1NpemVCeXRlID0gYnl0ZXNbb2Zmc2V0KytdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYWVhZEFsZ28gPSBfZW51bXMyLmRlZmF1bHQuYWVhZC5leHBlcmltZW50YWxfZ2NtO1xuICB9XG4gIHZhciBtb2RlID0gX2NyeXB0bzIuZGVmYXVsdFtfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuYWVhZCwgdGhpcy5hZWFkQWxnbyldO1xuICB0aGlzLml2ID0gYnl0ZXMuc3ViYXJyYXkob2Zmc2V0LCBtb2RlLml2TGVuZ3RoICsgb2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IG1vZGUuaXZMZW5ndGg7XG4gIHRoaXMuZW5jcnlwdGVkID0gYnl0ZXMuc3ViYXJyYXkob2Zmc2V0LCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBXcml0ZSB0aGUgZW5jcnlwdGVkIHBheWxvYWQgb2YgYnl0ZXMgaW4gdGhlIG9yZGVyOiB2ZXJzaW9uLCBJViwgY2lwaGVydGV4dCAoc2VlIHNwZWNpZmljYXRpb24pXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIGVuY3J5cHRlZCBwYXlsb2FkXG4gKi9cblN5bUVuY3J5cHRlZEFFQURQcm90ZWN0ZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2NvbmZpZzIuZGVmYXVsdC5hZWFkX3Byb3RlY3RfdmVyc2lvbiA9PT0gNCkge1xuICAgIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uLCB0aGlzLmNpcGhlckFsZ28sIHRoaXMuYWVhZEFsZ28sIHRoaXMuY2h1bmtTaXplQnl0ZV0pLCB0aGlzLml2LCB0aGlzLmVuY3J5cHRlZF0pO1xuICB9XG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uXSksIHRoaXMuaXYsIHRoaXMuZW5jcnlwdGVkXSk7XG59O1xuXG4vKipcbiAqIERlY3J5cHQgdGhlIGVuY3J5cHRlZCBwYXlsb2FkLlxuICogQHBhcmFtICB7U3RyaW5nfSBzZXNzaW9uS2V5QWxnb3JpdGhtICAgVGhlIHNlc3Npb24ga2V5J3MgY2lwaGVyIGFsZ29yaXRobSBlLmcuICdhZXMxMjgnXG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSBrZXkgICAgICAgICAgICAgICBUaGUgc2Vzc2lvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBwYXlsb2FkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5TeW1FbmNyeXB0ZWRBRUFEUHJvdGVjdGVkLnByb3RvdHlwZS5kZWNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKHNlc3Npb25LZXlBbGdvcml0aG0sIGtleSkge1xuICAgIHZhciBtb2RlLCBkYXRhLCBhdXRoVGFnO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIG1vZGUgPSBfY3J5cHRvMi5kZWZhdWx0W19lbnVtczIuZGVmYXVsdC5yZWFkKF9lbnVtczIuZGVmYXVsdC5hZWFkLCB0aGlzLmFlYWRBbGdvKV07XG5cbiAgICAgICAgICAgIGlmICghKF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0X3ZlcnNpb24gPT09IDQpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmVuY3J5cHRlZC5zdWJhcnJheSgwLCAtbW9kZS50YWdMZW5ndGgpO1xuICAgICAgICAgICAgYXV0aFRhZyA9IHRoaXMuZW5jcnlwdGVkLnN1YmFycmF5KC1tb2RlLnRhZ0xlbmd0aCk7XG4gICAgICAgICAgICBfY29udGV4dC50MCA9IHRoaXMucGFja2V0cztcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA3O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3J5cHQoJ2RlY3J5cHQnLCBrZXksIGRhdGEsIGF1dGhUYWcpO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgX2NvbnRleHQudDEgPSBfY29udGV4dC5zZW50O1xuXG4gICAgICAgICAgICBfY29udGV4dC50MC5yZWFkLmNhbGwoX2NvbnRleHQudDAsIF9jb250ZXh0LnQxKTtcblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE3O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5jaXBoZXJBbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMsIHNlc3Npb25LZXlBbGdvcml0aG0pO1xuICAgICAgICAgICAgX2NvbnRleHQudDIgPSB0aGlzLnBhY2tldHM7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcnlwdCgnZGVjcnlwdCcsIGtleSwgdGhpcy5lbmNyeXB0ZWQpO1xuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIF9jb250ZXh0LnQzID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgX2NvbnRleHQudDIucmVhZC5jYWxsKF9jb250ZXh0LnQyLCBfY29udGV4dC50Myk7XG5cbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgncmV0dXJuJywgdHJ1ZSk7XG5cbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94LCBfeDIpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIEVuY3J5cHQgdGhlIHBhY2tldCBsaXN0IHBheWxvYWQuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHNlc3Npb25LZXlBbGdvcml0aG0gICBUaGUgc2Vzc2lvbiBrZXkncyBjaXBoZXIgYWxnb3JpdGhtIGUuZy4gJ2FlczEyOCdcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGtleSAgICAgICAgICAgICAgIFRoZSBzZXNzaW9uIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIHBheWxvYWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fVxuICogQGFzeW5jXG4gKi9cblN5bUVuY3J5cHRlZEFFQURQcm90ZWN0ZWQucHJvdG90eXBlLmVuY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihzZXNzaW9uS2V5QWxnb3JpdGhtLCBrZXkpIHtcbiAgICB2YXIgbW9kZSwgZGF0YTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5jaXBoZXJBbGdvID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMsIHNlc3Npb25LZXlBbGdvcml0aG0pO1xuICAgICAgICAgICAgdGhpcy5hZWFkQWxnbyA9IF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0X3ZlcnNpb24gPT09IDQgPyBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmFlYWQsIHRoaXMuYWVhZEFsZ29yaXRobSkgOiBfZW51bXMyLmRlZmF1bHQuYWVhZC5leHBlcmltZW50YWxfZ2NtO1xuICAgICAgICAgICAgbW9kZSA9IF9jcnlwdG8yLmRlZmF1bHRbX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LmFlYWQsIHRoaXMuYWVhZEFsZ28pXTtcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNTtcbiAgICAgICAgICAgIHJldHVybiBfY3J5cHRvMi5kZWZhdWx0LnJhbmRvbS5nZXRSYW5kb21CeXRlcyhtb2RlLml2TGVuZ3RoKTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuaXYgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIG5ldyByYW5kb20gSVZcbiAgICAgICAgICAgIHRoaXMuY2h1bmtTaXplQnl0ZSA9IF9jb25maWcyLmRlZmF1bHQuYWVhZF9jaHVua19zaXplX2J5dGU7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5wYWNrZXRzLndyaXRlKCk7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDEwO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3J5cHQoJ2VuY3J5cHQnLCBrZXksIGRhdGEsIGRhdGEuc3ViYXJyYXkoMCwgMCkpO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGVkID0gX2NvbnRleHQyLnNlbnQ7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUyLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3gzLCBfeDQpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBFbi9kZWNyeXB0IHRoZSBwYXlsb2FkLlxuICogQHBhcmFtICB7ZW5jcnlwdHxkZWNyeXB0fSBmbiAgICAgIFdoZXRoZXIgdG8gZW5jcnlwdCBvciBkZWNyeXB0XG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSBrZXkgICAgICAgICAgVGhlIHNlc3Npb24ga2V5IHVzZWQgdG8gZW4vZGVjcnlwdCB0aGUgcGF5bG9hZFxuICogQHBhcmFtICB7VWludDhBcnJheX0gZGF0YSAgICAgICAgIFRoZSBkYXRhIHRvIGVuL2RlY3J5cHRcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGZpbmFsQ2h1bmsgICBGb3IgZW5jcnlwdGlvbjogZW1wdHkgZmluYWwgY2h1bms7IGZvciBkZWNyeXB0aW9uOiBmaW5hbCBhdXRoZW50aWNhdGlvbiB0YWdcbiAqIEByZXR1cm5zIHtQcm9taXNlPFVpbnQ4QXJyYXk+fVxuICogQGFzeW5jXG4gKi9cblN5bUVuY3J5cHRlZEFFQURQcm90ZWN0ZWQucHJvdG90eXBlLmNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IzLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoZm4sIGtleSwgZGF0YSwgZmluYWxDaHVuaykge1xuICAgIHZhciBjaXBoZXIsIG1vZGUsIG1vZGVJbnN0YW5jZSwgdGFnTGVuZ3RoSWZEZWNyeXB0aW5nLCBjaHVua1NpemUsIGFkYXRhQnVmZmVyLCBhZGF0YUFycmF5LCBhZGF0YVRhZ0FycmF5LCBhZGF0YVZpZXcsIGNodW5rSW5kZXhBcnJheSwgY3J5cHRlZFByb21pc2VzLCBjaHVua0luZGV4O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjaXBoZXIgPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLCB0aGlzLmNpcGhlckFsZ28pO1xuICAgICAgICAgICAgbW9kZSA9IF9jcnlwdG8yLmRlZmF1bHRbX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LmFlYWQsIHRoaXMuYWVhZEFsZ28pXTtcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNDtcbiAgICAgICAgICAgIHJldHVybiBtb2RlKGNpcGhlciwga2V5KTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIG1vZGVJbnN0YW5jZSA9IF9jb250ZXh0My5zZW50O1xuXG4gICAgICAgICAgICBpZiAoIShfY29uZmlnMi5kZWZhdWx0LmFlYWRfcHJvdGVjdF92ZXJzaW9uID09PSA0KSkge1xuICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDI1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFnTGVuZ3RoSWZEZWNyeXB0aW5nID0gZm4gPT09ICdkZWNyeXB0JyA/IG1vZGUudGFnTGVuZ3RoIDogMDtcbiAgICAgICAgICAgIGNodW5rU2l6ZSA9IE1hdGgucG93KDIsIHRoaXMuY2h1bmtTaXplQnl0ZSArIDYpICsgdGFnTGVuZ3RoSWZEZWNyeXB0aW5nOyAvLyAoKHVpbnQ2NF90KTEgPDwgKGMgKyA2KSlcblxuICAgICAgICAgICAgYWRhdGFCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMjEpO1xuICAgICAgICAgICAgYWRhdGFBcnJheSA9IG5ldyBVaW50OEFycmF5KGFkYXRhQnVmZmVyLCAwLCAxMyk7XG4gICAgICAgICAgICBhZGF0YVRhZ0FycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWRhdGFCdWZmZXIpO1xuICAgICAgICAgICAgYWRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGFkYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGNodW5rSW5kZXhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFkYXRhQnVmZmVyLCA1LCA4KTtcblxuICAgICAgICAgICAgYWRhdGFBcnJheS5zZXQoWzB4QzAgfCB0aGlzLnRhZywgdGhpcy52ZXJzaW9uLCB0aGlzLmNpcGhlckFsZ28sIHRoaXMuYWVhZEFsZ28sIHRoaXMuY2h1bmtTaXplQnl0ZV0sIDApO1xuICAgICAgICAgICAgYWRhdGFWaWV3LnNldEludDMyKDEzICsgNCwgZGF0YS5sZW5ndGggLSB0YWdMZW5ndGhJZkRlY3J5cHRpbmcgKiBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyBjaHVua1NpemUpKTsgLy8gU2hvdWxkIGJlIHNldEludDY0KDEzLCAuLi4pXG4gICAgICAgICAgICBjcnlwdGVkUHJvbWlzZXMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjaHVua0luZGV4ID0gMDsgY2h1bmtJbmRleCA9PT0gMCB8fCBkYXRhLmxlbmd0aDspIHtcbiAgICAgICAgICAgICAgY3J5cHRlZFByb21pc2VzLnB1c2gobW9kZUluc3RhbmNlW2ZuXShkYXRhLnN1YmFycmF5KDAsIGNodW5rU2l6ZSksIG1vZGUuZ2V0Tm9uY2UodGhpcy5pdiwgY2h1bmtJbmRleEFycmF5KSwgYWRhdGFBcnJheSkpO1xuICAgICAgICAgICAgICAvLyBXZSB0YWtlIGEgY2h1bmsgb2YgZGF0YSwgZW4vZGVjcnlwdCBpdCwgYW5kIHNoaWZ0IGBkYXRhYCB0byB0aGVcbiAgICAgICAgICAgICAgLy8gbmV4dCBjaHVuay5cbiAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3ViYXJyYXkoY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgYWRhdGFWaWV3LnNldEludDMyKDUgKyA0LCArK2NodW5rSW5kZXgpOyAvLyBTaG91bGQgYmUgc2V0SW50NjQoNSwgLi4uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWZ0ZXIgdGhlIGZpbmFsIGNodW5rLCB3ZSBlaXRoZXIgZW5jcnlwdCBhIGZpbmFsLCBlbXB0eSBkYXRhXG4gICAgICAgICAgICAvLyBjaHVuayB0byBnZXQgdGhlIGZpbmFsIGF1dGhlbnRpY2F0aW9uIHRhZyBvciB2YWxpZGF0ZSB0aGF0IGZpbmFsXG4gICAgICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiB0YWcuXG4gICAgICAgICAgICBjcnlwdGVkUHJvbWlzZXMucHVzaChtb2RlSW5zdGFuY2VbZm5dKGZpbmFsQ2h1bmssIG1vZGUuZ2V0Tm9uY2UodGhpcy5pdiwgY2h1bmtJbmRleEFycmF5KSwgYWRhdGFUYWdBcnJheSkpO1xuICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gX3V0aWwyLmRlZmF1bHQ7XG4gICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDIxO1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LmFsbChjcnlwdGVkUHJvbWlzZXMpO1xuXG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIF9jb250ZXh0My50MSA9IF9jb250ZXh0My5zZW50O1xuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoJ3JldHVybicsIF9jb250ZXh0My50MC5jb25jYXRVaW50OEFycmF5LmNhbGwoX2NvbnRleHQzLnQwLCBfY29udGV4dDMudDEpKTtcblxuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywgbW9kZUluc3RhbmNlW2ZuXShkYXRhLCB0aGlzLml2KSk7XG5cbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUzLCB0aGlzKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3g1LCBfeDYsIF94NywgX3g4KSB7XG4gICAgcmV0dXJuIF9yZWYzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbn0se1wiLi4vY29uZmlnXCI6MzI1LFwiLi4vY3J5cHRvXCI6MzQwLFwiLi4vZW51bXNcIjozNTksXCIuLi91dGlsXCI6Mzk4LFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2VcIjozMixcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI6MzUsXCJiYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yXCI6NDJ9XSwzODQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBfZXhwb3J0cyA9IF9kZXJlcV8oJ2FzbWNyeXB0by5qcy9zcmMvYWVzL2NmYi9leHBvcnRzJyk7XG5cbnZhciBfY3J5cHRvID0gX2RlcmVxXygnLi4vY3J5cHRvJyk7XG5cbnZhciBfY3J5cHRvMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyeXB0byk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogQHJlcXVpcmVzIGFzbWNyeXB0by5qc1xuICogQHJlcXVpcmVzIGNyeXB0b1xuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICovXG5cbnZhciBub2RlQ3J5cHRvID0gX3V0aWwyLmRlZmF1bHQuZ2V0Tm9kZUNyeXB0bygpO1xudmFyIEJ1ZmZlciA9IF91dGlsMi5kZWZhdWx0LmdldE5vZGVCdWZmZXIoKTtcblxudmFyIFZFUlNJT04gPSAxOyAvLyBBIG9uZS1vY3RldCB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGF0YSBwYWNrZXQuXG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN5bS4gRW5jcnlwdGVkIEludGVncml0eSBQcm90ZWN0ZWQgRGF0YSBQYWNrZXQgKFRhZyAxOClcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi01LjEzfFJGQzQ4ODAgNS4xM306XG4gKiBUaGUgU3ltbWV0cmljYWxseSBFbmNyeXB0ZWQgSW50ZWdyaXR5IFByb3RlY3RlZCBEYXRhIHBhY2tldCBpc1xuICogYSB2YXJpYW50IG9mIHRoZSBTeW1tZXRyaWNhbGx5IEVuY3J5cHRlZCBEYXRhIHBhY2tldC4gSXQgaXMgYSBuZXcgZmVhdHVyZVxuICogY3JlYXRlZCBmb3IgT3BlblBHUCB0aGF0IGFkZHJlc3NlcyB0aGUgcHJvYmxlbSBvZiBkZXRlY3RpbmcgYSBtb2RpZmljYXRpb24gdG9cbiAqIGVuY3J5cHRlZCBkYXRhLiBJdCBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBNb2RpZmljYXRpb24gRGV0ZWN0aW9uIENvZGVcbiAqIHBhY2tldC5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gU3ltRW5jcnlwdGVkSW50ZWdyaXR5UHJvdGVjdGVkKCkge1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQuc3ltRW5jcnlwdGVkSW50ZWdyaXR5UHJvdGVjdGVkO1xuICB0aGlzLnZlcnNpb24gPSBWRVJTSU9OO1xuICAvKiogVGhlIGVuY3J5cHRlZCBwYXlsb2FkLiAqL1xuICB0aGlzLmVuY3J5cHRlZCA9IG51bGw7IC8vIHN0cmluZ1xuICAvKipcbiAgICogSWYgYWZ0ZXIgZGVjcnlwdGluZyB0aGUgcGFja2V0IHRoaXMgaXMgc2V0IHRvIHRydWUsXG4gICAqIGEgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIGRldGVjdGVkIGFuZCB0aHVzIHRoZSBjb250ZW50c1xuICAgKiBzaG91bGQgYmUgZGlzY2FyZGVkLlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICovXG4gIHRoaXMubW9kaWZpY2F0aW9uID0gZmFsc2U7XG4gIHRoaXMucGFja2V0cyA9IG51bGw7XG59XG5cblN5bUVuY3J5cHRlZEludGVncml0eVByb3RlY3RlZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAvLyAtIEEgb25lLW9jdGV0IHZlcnNpb24gbnVtYmVyLiBUaGUgb25seSBjdXJyZW50bHkgZGVmaW5lZCB2YWx1ZSBpcyAxLlxuICBpZiAoYnl0ZXNbMF0gIT09IFZFUlNJT04pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFja2V0IHZlcnNpb24uJyk7XG4gIH1cblxuICAvLyAtIEVuY3J5cHRlZCBkYXRhLCB0aGUgb3V0cHV0IG9mIHRoZSBzZWxlY3RlZCBzeW1tZXRyaWMta2V5IGNpcGhlclxuICAvLyAgIG9wZXJhdGluZyBpbiBDaXBoZXIgRmVlZGJhY2sgbW9kZSB3aXRoIHNoaWZ0IGFtb3VudCBlcXVhbCB0byB0aGVcbiAgLy8gICBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIgKENGQi1uIHdoZXJlIG4gaXMgdGhlIGJsb2NrIHNpemUpLlxuICB0aGlzLmVuY3J5cHRlZCA9IGJ5dGVzLnN1YmFycmF5KDEsIGJ5dGVzLmxlbmd0aCk7XG59O1xuXG5TeW1FbmNyeXB0ZWRJbnRlZ3JpdHlQcm90ZWN0ZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoW1ZFUlNJT05dKSwgdGhpcy5lbmNyeXB0ZWRdKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCB0aGUgcGF5bG9hZCBpbiB0aGUgcGFja2V0LlxuICogQHBhcmFtICB7U3RyaW5nfSBzZXNzaW9uS2V5QWxnb3JpdGhtICAgVGhlIHNlbGVjdGVkIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsZ29yaXRobSB0byBiZSB1c2VkIGUuZy4gJ2FlczEyOCdcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9IGtleSAgICAgICAgICAgICAgIFRoZSBrZXkgb2YgY2lwaGVyIGJsb2Nrc2l6ZSBsZW5ndGggdG8gYmUgdXNlZFxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59XG4gKiBAYXN5bmNcbiAqL1xuU3ltRW5jcnlwdGVkSW50ZWdyaXR5UHJvdGVjdGVkLnByb3RvdHlwZS5lbmNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKHNlc3Npb25LZXlBbGdvcml0aG0sIGtleSkge1xuICAgIHZhciBieXRlcywgcHJlZml4cmFuZG9tLCByZXBlYXQsIHByZWZpeCwgbWRjLCB0b2hhc2gsIGhhc2g7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgYnl0ZXMgPSB0aGlzLnBhY2tldHMud3JpdGUoKTtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzO1xuICAgICAgICAgICAgcmV0dXJuIF9jcnlwdG8yLmRlZmF1bHQuZ2V0UHJlZml4UmFuZG9tKHNlc3Npb25LZXlBbGdvcml0aG0pO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcHJlZml4cmFuZG9tID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIHJlcGVhdCA9IG5ldyBVaW50OEFycmF5KFtwcmVmaXhyYW5kb21bcHJlZml4cmFuZG9tLmxlbmd0aCAtIDJdLCBwcmVmaXhyYW5kb21bcHJlZml4cmFuZG9tLmxlbmd0aCAtIDFdXSk7XG4gICAgICAgICAgICBwcmVmaXggPSBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtwcmVmaXhyYW5kb20sIHJlcGVhdF0pO1xuICAgICAgICAgICAgbWRjID0gbmV3IFVpbnQ4QXJyYXkoWzB4RDMsIDB4MTRdKTsgLy8gbW9kaWZpY2F0aW9uIGRldGVjdGlvbiBjb2RlIHBhY2tldFxuXG4gICAgICAgICAgICB0b2hhc2ggPSBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtieXRlcywgbWRjXSk7XG4gICAgICAgICAgICBoYXNoID0gX2NyeXB0bzIuZGVmYXVsdC5oYXNoLnNoYTEoX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbcHJlZml4LCB0b2hhc2hdKSk7XG5cbiAgICAgICAgICAgIHRvaGFzaCA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3RvaGFzaCwgaGFzaF0pO1xuXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbktleUFsZ29yaXRobS5zdWJzdHIoMCwgMykgPT09ICdhZXMnKSB7XG4gICAgICAgICAgICAgIC8vIEFFUyBvcHRpbWl6YXRpb25zLiBOYXRpdmUgY29kZSBmb3Igbm9kZSwgYXNtQ3J5cHRvIGZvciBicm93c2VyLlxuICAgICAgICAgICAgICB0aGlzLmVuY3J5cHRlZCA9IGFlc0VuY3J5cHQoc2Vzc2lvbktleUFsZ29yaXRobSwgcHJlZml4LCB0b2hhc2gsIGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVuY3J5cHRlZCA9IF9jcnlwdG8yLmRlZmF1bHQuY2ZiLmVuY3J5cHQocHJlZml4cmFuZG9tLCBzZXNzaW9uS2V5QWxnb3JpdGhtLCB0b2hhc2gsIGtleSwgZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLmVuY3J5cHRlZCA9IHRoaXMuZW5jcnlwdGVkLnN1YmFycmF5KDAsIHByZWZpeC5sZW5ndGggKyB0b2hhc2gubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHRydWUpO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeCwgX3gyKSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxuLyoqXG4gKiBEZWNyeXB0cyB0aGUgZW5jcnlwdGVkIGRhdGEgY29udGFpbmVkIGluIHRoZSBwYWNrZXQuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHNlc3Npb25LZXlBbGdvcml0aG0gICBUaGUgc2VsZWN0ZWQgc3ltbWV0cmljIGVuY3J5cHRpb24gYWxnb3JpdGhtIHRvIGJlIHVzZWQgZS5nLiAnYWVzMTI4J1xuICogQHBhcmFtICB7VWludDhBcnJheX0ga2V5ICAgICAgICAgICAgICAgVGhlIGtleSBvZiBjaXBoZXIgYmxvY2tzaXplIGxlbmd0aCB0byBiZSB1c2VkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5TeW1FbmNyeXB0ZWRJbnRlZ3JpdHlQcm90ZWN0ZWQucHJvdG90eXBlLmRlY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihzZXNzaW9uS2V5QWxnb3JpdGhtLCBrZXkpIHtcbiAgICB2YXIgZGVjcnlwdGVkLCBwcmVmaXgsIGJ5dGVzLCB0b2hhc2gsIG1kYztcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZGVjcnlwdGVkID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbktleUFsZ29yaXRobS5zdWJzdHIoMCwgMykgPT09ICdhZXMnKSB7XG4gICAgICAgICAgICAgIC8vIEFFUyBvcHRpbWl6YXRpb25zLiBOYXRpdmUgY29kZSBmb3Igbm9kZSwgYXNtQ3J5cHRvIGZvciBicm93c2VyLlxuICAgICAgICAgICAgICBkZWNyeXB0ZWQgPSBhZXNEZWNyeXB0KHNlc3Npb25LZXlBbGdvcml0aG0sIHRoaXMuZW5jcnlwdGVkLCBrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVjcnlwdGVkID0gX2NyeXB0bzIuZGVmYXVsdC5jZmIuZGVjcnlwdChzZXNzaW9uS2V5QWxnb3JpdGhtLCBrZXksIHRoaXMuZW5jcnlwdGVkLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZXJlIG11c3QgYmUgYSBtb2RpZmljYXRpb24gZGV0ZWN0aW9uIGNvZGUgcGFja2V0IGFzIHRoZVxuICAgICAgICAgICAgLy8gbGFzdCBwYWNrZXQgYW5kIGV2ZXJ5dGhpbmcgZ2V0cyBoYXNoZWQgZXhjZXB0IHRoZSBoYXNoIGl0c2VsZlxuICAgICAgICAgICAgcHJlZml4ID0gX2NyeXB0bzIuZGVmYXVsdC5jZmIubWRjKHNlc3Npb25LZXlBbGdvcml0aG0sIGtleSwgdGhpcy5lbmNyeXB0ZWQpO1xuICAgICAgICAgICAgYnl0ZXMgPSBkZWNyeXB0ZWQuc3ViYXJyYXkoMCwgZGVjcnlwdGVkLmxlbmd0aCAtIDIwKTtcbiAgICAgICAgICAgIHRvaGFzaCA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3ByZWZpeCwgYnl0ZXNdKTtcblxuICAgICAgICAgICAgdGhpcy5oYXNoID0gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIoX2NyeXB0bzIuZGVmYXVsdC5oYXNoLnNoYTEodG9oYXNoKSk7XG4gICAgICAgICAgICBtZGMgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihkZWNyeXB0ZWQuc3ViYXJyYXkoZGVjcnlwdGVkLmxlbmd0aCAtIDIwLCBkZWNyeXB0ZWQubGVuZ3RoKSk7XG5cbiAgICAgICAgICAgIGlmICghKHRoaXMuaGFzaCAhPT0gbWRjKSkge1xuICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDExO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2RpZmljYXRpb24gZGV0ZWN0ZWQuJyk7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wYWNrZXRzLnJlYWQoZGVjcnlwdGVkLnN1YmFycmF5KDAsIGRlY3J5cHRlZC5sZW5ndGggLSAyMikpO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCB0cnVlKTtcblxuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDMsIF94NCkge1xuICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTeW1FbmNyeXB0ZWRJbnRlZ3JpdHlQcm90ZWN0ZWQ7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICBIZWxwZXIgZnVuY3Rpb25zICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbmZ1bmN0aW9uIGFlc0VuY3J5cHQoYWxnbywgcHJlZml4LCBwdCwga2V5KSB7XG4gIGlmIChub2RlQ3J5cHRvKSB7XG4gICAgLy8gTm9kZSBjcnlwdG8gbGlicmFyeS5cbiAgICByZXR1cm4gbm9kZUVuY3J5cHQoYWxnbywgcHJlZml4LCBwdCwga2V5KTtcbiAgfSAvLyBhc20uanMgZmFsbGJhY2tcbiAgcmV0dXJuIF9leHBvcnRzLkFFU19DRkIuZW5jcnlwdChfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtwcmVmaXgsIHB0XSksIGtleSk7XG59XG5cbmZ1bmN0aW9uIGFlc0RlY3J5cHQoYWxnbywgY3QsIGtleSkge1xuICB2YXIgcHQgPSB2b2lkIDA7XG4gIGlmIChub2RlQ3J5cHRvKSB7XG4gICAgLy8gTm9kZSBjcnlwdG8gbGlicmFyeS5cbiAgICBwdCA9IG5vZGVEZWNyeXB0KGFsZ28sIGN0LCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFzbS5qcyBmYWxsYmFja1xuICAgIHB0ID0gX2V4cG9ydHMuQUVTX0NGQi5kZWNyeXB0KGN0LCBrZXkpO1xuICB9XG4gIHJldHVybiBwdC5zdWJhcnJheShfY3J5cHRvMi5kZWZhdWx0LmNpcGhlclthbGdvXS5ibG9ja1NpemUgKyAyLCBwdC5sZW5ndGgpOyAvLyBSZW1vdmUgcmFuZG9tIHByZWZpeFxufVxuXG5mdW5jdGlvbiBub2RlRW5jcnlwdChhbGdvLCBwcmVmaXgsIHB0LCBrZXkpIHtcbiAga2V5ID0gbmV3IEJ1ZmZlcihrZXkpO1xuICB2YXIgaXYgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KF9jcnlwdG8yLmRlZmF1bHQuY2lwaGVyW2FsZ29dLmJsb2NrU2l6ZSkpO1xuICB2YXIgY2lwaGVyT2JqID0gbmV3IG5vZGVDcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0nICsgYWxnby5zdWJzdHIoMywgMykgKyAnLWNmYicsIGtleSwgaXYpO1xuICB2YXIgY3QgPSBjaXBoZXJPYmoudXBkYXRlKG5ldyBCdWZmZXIoX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbcHJlZml4LCBwdF0pKSk7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShjdCk7XG59XG5cbmZ1bmN0aW9uIG5vZGVEZWNyeXB0KGFsZ28sIGN0LCBrZXkpIHtcbiAgY3QgPSBuZXcgQnVmZmVyKGN0KTtcbiAga2V5ID0gbmV3IEJ1ZmZlcihrZXkpO1xuICB2YXIgaXYgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KF9jcnlwdG8yLmRlZmF1bHQuY2lwaGVyW2FsZ29dLmJsb2NrU2l6ZSkpO1xuICB2YXIgZGVjaXBoZXJPYmogPSBuZXcgbm9kZUNyeXB0by5jcmVhdGVEZWNpcGhlcml2KCdhZXMtJyArIGFsZ28uc3Vic3RyKDMsIDMpICsgJy1jZmInLCBrZXksIGl2KTtcbiAgdmFyIHB0ID0gZGVjaXBoZXJPYmoudXBkYXRlKGN0KTtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHB0KTtcbn1cblxufSx7XCIuLi9jcnlwdG9cIjozNDAsXCIuLi9lbnVtc1wiOjM1OSxcIi4uL3V0aWxcIjozOTgsXCJhc21jcnlwdG8uanMvc3JjL2Flcy9jZmIvZXhwb3J0c1wiOjcsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzg1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX3MyayA9IF9kZXJlcV8oJy4uL3R5cGUvczJrJyk7XG5cbnZhciBfczJrMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Myayk7XG5cbnZhciBfY29uZmlnID0gX2RlcmVxXygnLi4vY29uZmlnJyk7XG5cbnZhciBfY29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZyk7XG5cbnZhciBfY3J5cHRvID0gX2RlcmVxXygnLi4vY3J5cHRvJyk7XG5cbnZhciBfY3J5cHRvMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyeXB0byk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogUHVibGljLUtleSBFbmNyeXB0ZWQgU2Vzc2lvbiBLZXkgUGFja2V0cyAoVGFnIDEpXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tNS4xfFJGQzQ4ODAgNS4xfTpcbiAqIEEgUHVibGljLUtleSBFbmNyeXB0ZWQgU2Vzc2lvbiBLZXkgcGFja2V0IGhvbGRzIHRoZSBzZXNzaW9uIGtleVxuICogdXNlZCB0byBlbmNyeXB0IGEgbWVzc2FnZS4gWmVybyBvciBtb3JlIFB1YmxpYy1LZXkgRW5jcnlwdGVkIFNlc3Npb24gS2V5XG4gKiBwYWNrZXRzIGFuZC9vciBTeW1tZXRyaWMtS2V5IEVuY3J5cHRlZCBTZXNzaW9uIEtleSBwYWNrZXRzIG1heSBwcmVjZWRlIGFcbiAqIFN5bW1ldHJpY2FsbHkgRW5jcnlwdGVkIERhdGEgUGFja2V0LCB3aGljaCBob2xkcyBhbiBlbmNyeXB0ZWQgbWVzc2FnZS4gVGhlXG4gKiBtZXNzYWdlIGlzIGVuY3J5cHRlZCB3aXRoIHRoZSBzZXNzaW9uIGtleSwgYW5kIHRoZSBzZXNzaW9uIGtleSBpcyBpdHNlbGZcbiAqIGVuY3J5cHRlZCBhbmQgc3RvcmVkIGluIHRoZSBFbmNyeXB0ZWQgU2Vzc2lvbiBLZXkgcGFja2V0KHMpLiBUaGVcbiAqIFN5bW1ldHJpY2FsbHkgRW5jcnlwdGVkIERhdGEgUGFja2V0IGlzIHByZWNlZGVkIGJ5IG9uZSBQdWJsaWMtS2V5IEVuY3J5cHRlZFxuICogU2Vzc2lvbiBLZXkgcGFja2V0IGZvciBlYWNoIE9wZW5QR1Aga2V5IHRvIHdoaWNoIHRoZSBtZXNzYWdlIGlzIGVuY3J5cHRlZC5cbiAqIFRoZSByZWNpcGllbnQgb2YgdGhlIG1lc3NhZ2UgZmluZHMgYSBzZXNzaW9uIGtleSB0aGF0IGlzIGVuY3J5cHRlZCB0byB0aGVpclxuICogcHVibGljIGtleSwgZGVjcnlwdHMgdGhlIHNlc3Npb24ga2V5LCBhbmQgdGhlbiB1c2VzIHRoZSBzZXNzaW9uIGtleSB0b1xuICogZGVjcnlwdCB0aGUgbWVzc2FnZS5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gU3ltRW5jcnlwdGVkU2Vzc2lvbktleSgpIHtcbiAgdGhpcy50YWcgPSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnN5bUVuY3J5cHRlZFNlc3Npb25LZXk7XG4gIHRoaXMudmVyc2lvbiA9IF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0ICYmIF9jb25maWcyLmRlZmF1bHQuYWVhZF9wcm90ZWN0X3ZlcnNpb24gPT09IDQgPyA1IDogNDtcbiAgdGhpcy5zZXNzaW9uS2V5ID0gbnVsbDtcbiAgdGhpcy5zZXNzaW9uS2V5RW5jcnlwdGlvbkFsZ29yaXRobSA9IG51bGw7XG4gIHRoaXMuc2Vzc2lvbktleUFsZ29yaXRobSA9ICdhZXMyNTYnO1xuICB0aGlzLmFlYWRBbGdvcml0aG0gPSBfZW51bXMyLmRlZmF1bHQucmVhZChfZW51bXMyLmRlZmF1bHQuYWVhZCwgX2NvbmZpZzIuZGVmYXVsdC5hZWFkX21vZGUpO1xuICB0aGlzLmVuY3J5cHRlZCA9IG51bGw7XG4gIHRoaXMuczJrID0gbnVsbDtcbiAgdGhpcy5pdiA9IG51bGw7XG59XG5cbi8qKlxuICogUGFyc2luZyBmdW5jdGlvbiBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGVkIHNlc3Npb24ga2V5IHBhY2tldCAodGFnIDMpLlxuICpcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXQgUGF5bG9hZCBvZiBhIHRhZyAxIHBhY2tldFxuICogQHBhcmFtIHtJbnRlZ2VyfSBwb3NpdGlvbiBQb3NpdGlvbiB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGlucHV0IHN0cmluZ1xuICogQHBhcmFtIHtJbnRlZ2VyfSBsZW5cbiAqICAgICAgICAgICAgTGVuZ3RoIG9mIHRoZSBwYWNrZXQgb3IgdGhlIHJlbWFpbmluZyBsZW5ndGggb2ZcbiAqICAgICAgICAgICAgaW5wdXQgYXQgcG9zaXRpb25cbiAqIEByZXR1cm5zIHttb2R1bGU6cGFja2V0LlN5bUVuY3J5cHRlZFNlc3Npb25LZXl9IE9iamVjdCByZXByZXNlbnRhdGlvblxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyB0eXBlL3Mya1xuICogQHJlcXVpcmVzIGNvbmZpZ1xuICogQHJlcXVpcmVzIGNyeXB0b1xuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAcmVxdWlyZXMgdXRpbFxuICovXG5cblN5bUVuY3J5cHRlZFNlc3Npb25LZXkucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG5cbiAgLy8gQSBvbmUtb2N0ZXQgdmVyc2lvbiBudW1iZXIuIFRoZSBvbmx5IGN1cnJlbnRseSBkZWZpbmVkIHZlcnNpb24gaXMgNC5cbiAgdGhpcy52ZXJzaW9uID0gYnl0ZXNbb2Zmc2V0KytdO1xuXG4gIC8vIEEgb25lLW9jdGV0IG51bWJlciBkZXNjcmliaW5nIHRoZSBzeW1tZXRyaWMgYWxnb3JpdGhtIHVzZWQuXG4gIHZhciBhbGdvID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgYnl0ZXNbb2Zmc2V0KytdKTtcblxuICBpZiAodGhpcy52ZXJzaW9uID09PSA1KSB7XG4gICAgLy8gQSBvbmUtb2N0ZXQgQUVBRCBhbGdvcml0aG0uXG4gICAgdGhpcy5hZWFkQWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LmFlYWQsIGJ5dGVzW29mZnNldCsrXSk7XG4gIH1cblxuICAvLyBBIHN0cmluZy10by1rZXkgKFMySykgc3BlY2lmaWVyLCBsZW5ndGggYXMgZGVmaW5lZCBhYm92ZS5cbiAgdGhpcy5zMmsgPSBuZXcgX3MyazIuZGVmYXVsdCgpO1xuICBvZmZzZXQgKz0gdGhpcy5zMmsucmVhZChieXRlcy5zdWJhcnJheShvZmZzZXQsIGJ5dGVzLmxlbmd0aCkpO1xuXG4gIGlmICh0aGlzLnZlcnNpb24gPT09IDUpIHtcbiAgICB2YXIgbW9kZSA9IF9jcnlwdG8yLmRlZmF1bHRbdGhpcy5hZWFkQWxnb3JpdGhtXTtcblxuICAgIC8vIEEgc3RhcnRpbmcgaW5pdGlhbGl6YXRpb24gdmVjdG9yIG9mIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBBRUFEXG4gICAgLy8gYWxnb3JpdGhtLlxuICAgIHRoaXMuaXYgPSBieXRlcy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArPSBtb2RlLml2TGVuZ3RoKTtcbiAgfVxuXG4gIC8vIFRoZSBlbmNyeXB0ZWQgc2Vzc2lvbiBrZXkgaXRzZWxmLCB3aGljaCBpcyBkZWNyeXB0ZWQgd2l0aCB0aGVcbiAgLy8gc3RyaW5nLXRvLWtleSBvYmplY3QuIFRoaXMgaXMgb3B0aW9uYWwgaW4gdmVyc2lvbiA0LlxuICBpZiAodGhpcy52ZXJzaW9uID09PSA1IHx8IG9mZnNldCA8IGJ5dGVzLmxlbmd0aCkge1xuICAgIHRoaXMuZW5jcnlwdGVkID0gYnl0ZXMuc3ViYXJyYXkob2Zmc2V0LCBieXRlcy5sZW5ndGgpO1xuICAgIHRoaXMuc2Vzc2lvbktleUVuY3J5cHRpb25BbGdvcml0aG0gPSBhbGdvO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc2Vzc2lvbktleUFsZ29yaXRobSA9IGFsZ287XG4gIH1cbn07XG5cblN5bUVuY3J5cHRlZFNlc3Npb25LZXkucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWxnbyA9IHRoaXMuZW5jcnlwdGVkID09PSBudWxsID8gdGhpcy5zZXNzaW9uS2V5QWxnb3JpdGhtIDogdGhpcy5zZXNzaW9uS2V5RW5jcnlwdGlvbkFsZ29yaXRobTtcblxuICB2YXIgYnl0ZXMgPSB2b2lkIDA7XG5cbiAgaWYgKHRoaXMudmVyc2lvbiA9PT0gNSkge1xuICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoW3RoaXMudmVyc2lvbiwgX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMsIGFsZ28pLCBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmFlYWQsIHRoaXMuYWVhZEFsZ29yaXRobSldKSwgdGhpcy5zMmsud3JpdGUoKSwgdGhpcy5pdiwgdGhpcy5lbmNyeXB0ZWRdKTtcbiAgfSBlbHNlIHtcbiAgICBieXRlcyA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW25ldyBVaW50OEFycmF5KFt0aGlzLnZlcnNpb24sIF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLCBhbGdvKV0pLCB0aGlzLnMyay53cml0ZSgpXSk7XG5cbiAgICBpZiAodGhpcy5lbmNyeXB0ZWQgIT09IG51bGwpIHtcbiAgICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbYnl0ZXMsIHRoaXMuZW5jcnlwdGVkXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufTtcblxuLyoqXG4gKiBEZWNyeXB0cyB0aGUgc2Vzc2lvbiBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzcGhyYXNlIFRoZSBwYXNzcGhyYXNlIGluIHN0cmluZyBmb3JtXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn1cbiAqIEBhc3luY1xuICovXG5TeW1FbmNyeXB0ZWRTZXNzaW9uS2V5LnByb3RvdHlwZS5kZWNyeXB0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgYWxnbywgbGVuZ3RoLCBrZXksIG1vZGUsIGFkYXRhLCBtb2RlSW5zdGFuY2UsIGRlY3J5cHRlZDtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBhbGdvID0gdGhpcy5zZXNzaW9uS2V5RW5jcnlwdGlvbkFsZ29yaXRobSAhPT0gbnVsbCA/IHRoaXMuc2Vzc2lvbktleUVuY3J5cHRpb25BbGdvcml0aG0gOiB0aGlzLnNlc3Npb25LZXlBbGdvcml0aG07XG4gICAgICAgICAgICBsZW5ndGggPSBfY3J5cHRvMi5kZWZhdWx0LmNpcGhlclthbGdvXS5rZXlTaXplO1xuICAgICAgICAgICAga2V5ID0gdGhpcy5zMmsucHJvZHVjZV9rZXkocGFzc3BocmFzZSwgbGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKCEodGhpcy52ZXJzaW9uID09PSA1KSkge1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtb2RlID0gX2NyeXB0bzIuZGVmYXVsdFt0aGlzLmFlYWRBbGdvcml0aG1dO1xuICAgICAgICAgICAgYWRhdGEgPSBuZXcgVWludDhBcnJheShbMHhDMCB8IHRoaXMudGFnLCB0aGlzLnZlcnNpb24sIF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQuc3ltbWV0cmljLCB0aGlzLnNlc3Npb25LZXlFbmNyeXB0aW9uQWxnb3JpdGhtKSwgX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5hZWFkLCB0aGlzLmFlYWRBbGdvcml0aG0pXSk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gODtcbiAgICAgICAgICAgIHJldHVybiBtb2RlKGFsZ28sIGtleSk7XG5cbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBtb2RlSW5zdGFuY2UgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDExO1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVJbnN0YW5jZS5kZWNyeXB0KHRoaXMuZW5jcnlwdGVkLCB0aGlzLml2LCBhZGF0YSk7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uS2V5ID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIGlmICh0aGlzLmVuY3J5cHRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBkZWNyeXB0ZWQgPSBfY3J5cHRvMi5kZWZhdWx0LmNmYi5ub3JtYWxEZWNyeXB0KGFsZ28sIGtleSwgdGhpcy5lbmNyeXB0ZWQsIG51bGwpO1xuXG5cbiAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uS2V5QWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgZGVjcnlwdGVkWzBdKTtcbiAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uS2V5ID0gZGVjcnlwdGVkLnN1YmFycmF5KDEsIGRlY3J5cHRlZC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uS2V5ID0ga2V5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHRydWUpO1xuXG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogRW5jcnlwdHMgdGhlIHNlc3Npb24ga2V5XG4gKiBAcGFyYW0ge1N0cmluZ30gcGFzc3BocmFzZSBUaGUgcGFzc3BocmFzZSBpbiBzdHJpbmcgZm9ybVxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59XG4gKiBAYXN5bmNcbiAqL1xuU3ltRW5jcnlwdGVkU2Vzc2lvbktleS5wcm90b3R5cGUuZW5jcnlwdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgYWxnbywgbGVuZ3RoLCBrZXksIG1vZGUsIGFkYXRhLCBtb2RlSW5zdGFuY2UsIGFsZ29fZW51bSwgcHJpdmF0ZV9rZXk7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvcjIuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGFsZ28gPSB0aGlzLnNlc3Npb25LZXlFbmNyeXB0aW9uQWxnb3JpdGhtICE9PSBudWxsID8gdGhpcy5zZXNzaW9uS2V5RW5jcnlwdGlvbkFsZ29yaXRobSA6IHRoaXMuc2Vzc2lvbktleUFsZ29yaXRobTtcblxuXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25LZXlFbmNyeXB0aW9uQWxnb3JpdGhtID0gYWxnbztcblxuICAgICAgICAgICAgdGhpcy5zMmsgPSBuZXcgX3MyazIuZGVmYXVsdCgpO1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA1O1xuICAgICAgICAgICAgcmV0dXJuIF9jcnlwdG8yLmRlZmF1bHQucmFuZG9tLmdldFJhbmRvbUJ5dGVzKDgpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5zMmsuc2FsdCA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgbGVuZ3RoID0gX2NyeXB0bzIuZGVmYXVsdC5jaXBoZXJbYWxnb10ua2V5U2l6ZTtcbiAgICAgICAgICAgIGtleSA9IHRoaXMuczJrLnByb2R1Y2Vfa2V5KHBhc3NwaHJhc2UsIGxlbmd0aCk7XG5cbiAgICAgICAgICAgIGlmICghKHRoaXMuc2Vzc2lvbktleSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTE7XG4gICAgICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5nZW5lcmF0ZVNlc3Npb25LZXkodGhpcy5zZXNzaW9uS2V5QWxnb3JpdGhtKTtcblxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25LZXkgPSBfY29udGV4dDIuc2VudDtcblxuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICBpZiAoISh0aGlzLnZlcnNpb24gPT09IDUpKSB7XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtb2RlID0gX2NyeXB0bzIuZGVmYXVsdFt0aGlzLmFlYWRBbGdvcml0aG1dO1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxNjtcbiAgICAgICAgICAgIHJldHVybiBfY3J5cHRvMi5kZWZhdWx0LnJhbmRvbS5nZXRSYW5kb21CeXRlcyhtb2RlLml2TGVuZ3RoKTtcblxuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICB0aGlzLml2ID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBuZXcgcmFuZG9tIElWXG4gICAgICAgICAgICBhZGF0YSA9IG5ldyBVaW50OEFycmF5KFsweEMwIHwgdGhpcy50YWcsIHRoaXMudmVyc2lvbiwgX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5zeW1tZXRyaWMsIHRoaXMuc2Vzc2lvbktleUVuY3J5cHRpb25BbGdvcml0aG0pLCBfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LmFlYWQsIHRoaXMuYWVhZEFsZ29yaXRobSldKTtcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjA7XG4gICAgICAgICAgICByZXR1cm4gbW9kZShhbGdvLCBrZXkpO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIG1vZGVJbnN0YW5jZSA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyMztcbiAgICAgICAgICAgIHJldHVybiBtb2RlSW5zdGFuY2UuZW5jcnlwdCh0aGlzLnNlc3Npb25LZXksIHRoaXMuaXYsIGFkYXRhKTtcblxuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLmVuY3J5cHRlZCA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyOTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIGFsZ29fZW51bSA9IG5ldyBVaW50OEFycmF5KFtfZW51bXMyLmRlZmF1bHQud3JpdGUoX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYywgdGhpcy5zZXNzaW9uS2V5QWxnb3JpdGhtKV0pO1xuICAgICAgICAgICAgcHJpdmF0ZV9rZXkgPSBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFthbGdvX2VudW0sIHRoaXMuc2Vzc2lvbktleV0pO1xuXG4gICAgICAgICAgICB0aGlzLmVuY3J5cHRlZCA9IF9jcnlwdG8yLmRlZmF1bHQuY2ZiLm5vcm1hbEVuY3J5cHQoYWxnbywga2V5LCBwcml2YXRlX2tleSwgbnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoJ3JldHVybicsIHRydWUpO1xuXG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94Mikge1xuICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIEZpeCBjdXN0b20gdHlwZXMgYWZ0ZXIgY2xvbmluZ1xuICovXG5TeW1FbmNyeXB0ZWRTZXNzaW9uS2V5LnByb3RvdHlwZS5wb3N0Q2xvbmVUeXBlRml4ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnMyayA9IF9zMmsyLmRlZmF1bHQuZnJvbUNsb25lKHRoaXMuczJrKTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFN5bUVuY3J5cHRlZFNlc3Npb25LZXk7XG5cbn0se1wiLi4vY29uZmlnXCI6MzI1LFwiLi4vY3J5cHRvXCI6MzQwLFwiLi4vZW51bXNcIjozNTksXCIuLi90eXBlL3Mya1wiOjM5NyxcIi4uL3V0aWxcIjozOTgsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV0sMzg2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWdlbmVyYXRvciA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxudmFyIF9yZWdlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWdlbmVyYXRvcik7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvcicpO1xuXG52YXIgX2FzeW5jVG9HZW5lcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXN5bmNUb0dlbmVyYXRvcjIpO1xuXG52YXIgX2NvbmZpZyA9IF9kZXJlcV8oJy4uL2NvbmZpZycpO1xuXG52YXIgX2NvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25maWcpO1xuXG52YXIgX2NyeXB0byA9IF9kZXJlcV8oJy4uL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN5bW1ldHJpY2FsbHkgRW5jcnlwdGVkIERhdGEgUGFja2V0IChUYWcgOSlcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi01Ljd8UkZDNDg4MCA1Ljd9OlxuICogVGhlIFN5bW1ldHJpY2FsbHkgRW5jcnlwdGVkIERhdGEgcGFja2V0IGNvbnRhaW5zIGRhdGEgZW5jcnlwdGVkIHdpdGggYVxuICogc3ltbWV0cmljLWtleSBhbGdvcml0aG0uIFdoZW4gaXQgaGFzIGJlZW4gZGVjcnlwdGVkLCBpdCBjb250YWlucyBvdGhlclxuICogcGFja2V0cyAodXN1YWxseSBhIGxpdGVyYWwgZGF0YSBwYWNrZXQgb3IgY29tcHJlc3NlZCBkYXRhIHBhY2tldCwgYnV0IGluXG4gKiB0aGVvcnkgb3RoZXIgU3ltbWV0cmljYWxseSBFbmNyeXB0ZWQgRGF0YSBwYWNrZXRzIG9yIHNlcXVlbmNlcyBvZiBwYWNrZXRzXG4gKiB0aGF0IGZvcm0gd2hvbGUgT3BlblBHUCBtZXNzYWdlcykuXG4gKiBAbWVtYmVyb2YgbW9kdWxlOnBhY2tldFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQoKSB7XG4gIC8qKlxuICAgKiBQYWNrZXQgdHlwZVxuICAgKiBAdHlwZSB7bW9kdWxlOmVudW1zLnBhY2tldH1cbiAgICovXG4gIHRoaXMudGFnID0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC5zeW1tZXRyaWNhbGx5RW5jcnlwdGVkO1xuICAvKipcbiAgICogRW5jcnlwdGVkIHNlY3JldC1rZXkgZGF0YVxuICAgKi9cbiAgdGhpcy5lbmNyeXB0ZWQgPSBudWxsO1xuICAvKipcbiAgICogRGVjcnlwdGVkIHBhY2tldHMgY29udGFpbmVkIHdpdGhpbi5cbiAgICogQHR5cGUge21vZHVsZTpwYWNrZXQuTGlzdH1cbiAgICovXG4gIHRoaXMucGFja2V0cyA9IG51bGw7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGRlY3J5cHQgZmFpbHMgaWYgbWVzc2FnZSBpcyBub3QgaW50ZWdyaXR5IHByb3RlY3RlZFxuICAgKiBAc2VlIG1vZHVsZTpjb25maWcuaWdub3JlX21kY19lcnJvclxuICAgKi9cbiAgdGhpcy5pZ25vcmVfbWRjX2Vycm9yID0gX2NvbmZpZzIuZGVmYXVsdC5pZ25vcmVfbWRjX2Vycm9yO1xufSAvLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyBjb25maWdcbiAqIEByZXF1aXJlcyBjcnlwdG9cbiAqIEByZXF1aXJlcyBlbnVtc1xuICovXG5cblN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgdGhpcy5lbmNyeXB0ZWQgPSBieXRlcztcbn07XG5cblN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5lbmNyeXB0ZWQ7XG59O1xuXG4vKipcbiAqIERlY3J5cHQgdGhlIHN5bW1ldHJpY2FsbHktZW5jcnlwdGVkIHBhY2tldCBkYXRhXG4gKiBTZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS4yfFJGQyA0ODgwIDkuMn0gZm9yIGFsZ29yaXRobXMuXG4gKiBAcGFyYW0ge21vZHVsZTplbnVtcy5zeW1tZXRyaWN9IHNlc3Npb25LZXlBbGdvcml0aG0gU3ltbWV0cmljIGtleSBhbGdvcml0aG0gdG8gdXNlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleSAgICBUaGUga2V5IG9mIGNpcGhlciBibG9ja3NpemUgbGVuZ3RoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fVxuICogQGFzeW5jXG4gKi9cblN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQucHJvdG90eXBlLmRlY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoc2Vzc2lvbktleUFsZ29yaXRobSwga2V5KSB7XG4gICAgdmFyIGRlY3J5cHRlZDtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBfY3J5cHRvMi5kZWZhdWx0LmNmYi5kZWNyeXB0KHNlc3Npb25LZXlBbGdvcml0aG0sIGtleSwgdGhpcy5lbmNyeXB0ZWQsIHRydWUpO1xuICAgICAgICAgICAgLy8gSWYgTURDIGVycm9ycyBhcmUgbm90IGJlaW5nIGlnbm9yZWQsIGFsbCBtaXNzaW5nIE1EQyBwYWNrZXRzIGluIHN5bW1ldHJpY2FsbHkgZW5jcnlwdGVkIGRhdGEgc2hvdWxkIHRocm93IGFuIGVycm9yXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlnbm9yZV9tZGNfZXJyb3IpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY3J5cHRpb24gZmFpbGVkIGR1ZSB0byBtaXNzaW5nIE1EQy4nKTtcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucGFja2V0cy5yZWFkKGRlY3J5cHRlZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHRydWUpO1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94LCBfeDIpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKipcbiAqIEVuY3J5cHQgdGhlIHN5bW1ldHJpY2FsbHktZW5jcnlwdGVkIHBhY2tldCBkYXRhXG4gKiBTZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tOS4yfFJGQyA0ODgwIDkuMn0gZm9yIGFsZ29yaXRobXMuXG4gKiBAcGFyYW0ge21vZHVsZTplbnVtcy5zeW1tZXRyaWN9IHNlc3Npb25LZXlBbGdvcml0aG0gU3ltbWV0cmljIGtleSBhbGdvcml0aG0gdG8gdXNlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGtleSAgICBUaGUga2V5IG9mIGNpcGhlciBibG9ja3NpemUgbGVuZ3RoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fVxuICogQGFzeW5jXG4gKi9cblN5bW1ldHJpY2FsbHlFbmNyeXB0ZWQucHJvdG90eXBlLmVuY3J5cHQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjMuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IyLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlMihhbGdvLCBrZXkpIHtcbiAgICB2YXIgZGF0YTtcbiAgICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZGF0YSA9IHRoaXMucGFja2V0cy53cml0ZSgpO1xuICAgICAgICAgICAgX2NvbnRleHQyLnQwID0gX2NyeXB0bzIuZGVmYXVsdC5jZmI7XG4gICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5nZXRQcmVmaXhSYW5kb20oYWxnbyk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBfY29udGV4dDIudDEgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgIF9jb250ZXh0Mi50MiA9IGFsZ287XG4gICAgICAgICAgICBfY29udGV4dDIudDMgPSBkYXRhO1xuICAgICAgICAgICAgX2NvbnRleHQyLnQ0ID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5lbmNyeXB0ZWQgPSBfY29udGV4dDIudDAuZW5jcnlwdC5jYWxsKF9jb250ZXh0Mi50MCwgX2NvbnRleHQyLnQxLCBfY29udGV4dDIudDIsIF9jb250ZXh0Mi50MywgX2NvbnRleHQyLnQ0LCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCB0cnVlKTtcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChfeDMsIF94NCkge1xuICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTeW1tZXRyaWNhbGx5RW5jcnlwdGVkO1xuXG59LHtcIi4uL2NvbmZpZ1wiOjMyNSxcIi4uL2NyeXB0b1wiOjM0MCxcIi4uL2VudW1zXCI6MzU5LFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjozNSxcImJhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3JcIjo0Mn1dLDM4NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVHJ1c3QgUGFja2V0IChUYWcgMTIpXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tNS4xMHxSRkM0ODgwIDUuMTB9OlxuICogVGhlIFRydXN0IHBhY2tldCBpcyB1c2VkIG9ubHkgd2l0aGluIGtleXJpbmdzIGFuZCBpcyBub3Qgbm9ybWFsbHlcbiAqIGV4cG9ydGVkLiAgVHJ1c3QgcGFja2V0cyBjb250YWluIGRhdGEgdGhhdCByZWNvcmQgdGhlIHVzZXInc1xuICogc3BlY2lmaWNhdGlvbnMgb2Ygd2hpY2gga2V5IGhvbGRlcnMgYXJlIHRydXN0d29ydGh5IGludHJvZHVjZXJzLFxuICogYWxvbmcgd2l0aCBvdGhlciBpbmZvcm1hdGlvbiB0aGF0IGltcGxlbWVudGluZyBzb2Z0d2FyZSB1c2VzIGZvclxuICogdHJ1c3QgaW5mb3JtYXRpb24uICBUaGUgZm9ybWF0IG9mIFRydXN0IHBhY2tldHMgaXMgZGVmaW5lZCBieSBhIGdpdmVuXG4gKiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUcnVzdCBwYWNrZXRzIFNIT1VMRCBOT1QgYmUgZW1pdHRlZCB0byBvdXRwdXQgc3RyZWFtcyB0aGF0IGFyZVxuICogdHJhbnNmZXJyZWQgdG8gb3RoZXIgdXNlcnMsIGFuZCB0aGV5IFNIT1VMRCBiZSBpZ25vcmVkIG9uIGFueSBpbnB1dFxuICogb3RoZXIgdGhhbiBsb2NhbCBrZXlyaW5nIGZpbGVzLlxuICogQG1lbWJlcm9mIG1vZHVsZTpwYWNrZXRcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBUcnVzdCgpIHtcbiAgdGhpcy50YWcgPSBfZW51bXMyLmRlZmF1bHQucGFja2V0LnRydXN0O1xufVxuXG4vKipcbiAqIFBhcnNpbmcgZnVuY3Rpb24gZm9yIGEgdHJ1c3QgcGFja2V0ICh0YWcgMTIpLlxuICogQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCBhcyB3ZSBpZ25vcmUgdHJ1c3QgcGFja2V0c1xuICogQHBhcmFtIHtTdHJpbmd9IGJ5cHRlcyBwYXlsb2FkIG9mIGEgdGFnIDEyIHBhY2tldFxuICovXG4vKipcbiAqIEByZXF1aXJlcyBlbnVtc1xuICovXG5cblRydXN0LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKCkge307IC8vIFRPRE9cblxuZXhwb3J0cy5kZWZhdWx0ID0gVHJ1c3Q7XG5cbn0se1wiLi4vZW51bXNcIjozNTl9XSwzODg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3BhY2tldCA9IF9kZXJlcV8oJy4vcGFja2V0Jyk7XG5cbnZhciBfcGFja2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhY2tldCk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuLi9lbnVtcycpO1xuXG52YXIgX2VudW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VudW1zKTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFVzZXIgQXR0cmlidXRlIFBhY2tldCAoVGFnIDE3KVxuICpcbiAqIFRoZSBVc2VyIEF0dHJpYnV0ZSBwYWNrZXQgaXMgYSB2YXJpYXRpb24gb2YgdGhlIFVzZXIgSUQgcGFja2V0LiAgSXRcbiAqIGlzIGNhcGFibGUgb2Ygc3RvcmluZyBtb3JlIHR5cGVzIG9mIGRhdGEgdGhhbiB0aGUgVXNlciBJRCBwYWNrZXQsXG4gKiB3aGljaCBpcyBsaW1pdGVkIHRvIHRleHQuICBMaWtlIHRoZSBVc2VyIElEIHBhY2tldCwgYSBVc2VyIEF0dHJpYnV0ZVxuICogcGFja2V0IG1heSBiZSBjZXJ0aWZpZWQgYnkgdGhlIGtleSBvd25lciAoXCJzZWxmLXNpZ25lZFwiKSBvciBhbnkgb3RoZXJcbiAqIGtleSBvd25lciB3aG8gY2FyZXMgdG8gY2VydGlmeSBpdC4gIEV4Y2VwdCBhcyBub3RlZCwgYSBVc2VyIEF0dHJpYnV0ZVxuICogcGFja2V0IG1heSBiZSB1c2VkIGFueXdoZXJlIHRoYXQgYSBVc2VyIElEIHBhY2tldCBtYXkgYmUgdXNlZC5cbiAqXG4gKiBXaGlsZSBVc2VyIEF0dHJpYnV0ZSBwYWNrZXRzIGFyZSBub3QgYSByZXF1aXJlZCBwYXJ0IG9mIHRoZSBPcGVuUEdQXG4gKiBzdGFuZGFyZCwgaW1wbGVtZW50YXRpb25zIFNIT1VMRCBwcm92aWRlIGF0IGxlYXN0IGVub3VnaFxuICogY29tcGF0aWJpbGl0eSB0byBwcm9wZXJseSBoYW5kbGUgYSBjZXJ0aWZpY2F0aW9uIHNpZ25hdHVyZSBvbiB0aGVcbiAqIFVzZXIgQXR0cmlidXRlIHBhY2tldC4gIEEgc2ltcGxlIHdheSB0byBkbyB0aGlzIGlzIGJ5IHRyZWF0aW5nIHRoZVxuICogVXNlciBBdHRyaWJ1dGUgcGFja2V0IGFzIGEgVXNlciBJRCBwYWNrZXQgd2l0aCBvcGFxdWUgY29udGVudHMsIGJ1dFxuICogYW4gaW1wbGVtZW50YXRpb24gbWF5IHVzZSBhbnkgbWV0aG9kIGRlc2lyZWQuXG4gKiBAbWVtYmVyb2YgbW9kdWxlOnBhY2tldFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFVzZXJBdHRyaWJ1dGUoKSB7XG4gIHRoaXMudGFnID0gX2VudW1zMi5kZWZhdWx0LnBhY2tldC51c2VyQXR0cmlidXRlO1xuICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbn1cblxuLyoqXG4gKiBwYXJzaW5nIGZ1bmN0aW9uIGZvciBhIHVzZXIgYXR0cmlidXRlIHBhY2tldCAodGFnIDE3KS5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXQgcGF5bG9hZCBvZiBhIHRhZyAxNyBwYWNrZXRcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgcGFja2V0XG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKi9cblxuVXNlckF0dHJpYnV0ZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChieXRlcykge1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlIChpIDwgYnl0ZXMubGVuZ3RoKSB7XG4gICAgdmFyIGxlbiA9IF9wYWNrZXQyLmRlZmF1bHQucmVhZFNpbXBsZUxlbmd0aChieXRlcy5zdWJhcnJheShpLCBieXRlcy5sZW5ndGgpKTtcbiAgICBpICs9IGxlbi5vZmZzZXQ7XG5cbiAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaChfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShpLCBpICsgbGVuLmxlbikpKTtcbiAgICBpICs9IGxlbi5sZW47XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdXNlciBhdHRyaWJ1dGUgcGFja2V0XG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKi9cblVzZXJBdHRyaWJ1dGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYXJyLnB1c2goX3BhY2tldDIuZGVmYXVsdC53cml0ZVNpbXBsZUxlbmd0aCh0aGlzLmF0dHJpYnV0ZXNbaV0ubGVuZ3RoKSk7XG4gICAgYXJyLnB1c2goX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkodGhpcy5hdHRyaWJ1dGVzW2ldKSk7XG4gIH1cbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoYXJyKTtcbn07XG5cbi8qKlxuICogQ29tcGFyZSBmb3IgZXF1YWxpdHlcbiAqIEBwYXJhbSAge21vZHVsZTpwYWNrZXQuVXNlckF0dHJpYnV0ZX0gdXNyQXR0clxuICogQHJldHVybnMge0Jvb2xlYW59ICAgICAgICAgdHJ1ZSBpZiBlcXVhbFxuICovXG5Vc2VyQXR0cmlidXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAodXNyQXR0cikge1xuICBpZiAoIXVzckF0dHIgfHwgISh1c3JBdHRyIGluc3RhbmNlb2YgVXNlckF0dHJpYnV0ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXR0cmlidXRlcy5ldmVyeShmdW5jdGlvbiAoYXR0ciwgaW5kZXgpIHtcbiAgICByZXR1cm4gYXR0ciA9PT0gdXNyQXR0ci5hdHRyaWJ1dGVzW2luZGV4XTtcbiAgfSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBVc2VyQXR0cmlidXRlO1xuXG59LHtcIi4uL2VudW1zXCI6MzU5LFwiLi4vdXRpbFwiOjM5OCxcIi4vcGFja2V0XCI6Mzc1fV0sMzg5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hc3NpZ24gPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbicpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBVc2VyIElEIFBhY2tldCAoVGFnIDEzKVxuICpcbiAqIEEgVXNlciBJRCBwYWNrZXQgY29uc2lzdHMgb2YgVVRGLTggdGV4dCB0aGF0IGlzIGludGVuZGVkIHRvIHJlcHJlc2VudFxuICogdGhlIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGtleSBob2xkZXIuICBCeSBjb252ZW50aW9uLCBpdFxuICogaW5jbHVkZXMgYW4gUkZDIDI4MjIgW1JGQzI4MjJdIG1haWwgbmFtZS1hZGRyLCBidXQgdGhlcmUgYXJlIG5vXG4gKiByZXN0cmljdGlvbnMgb24gaXRzIGNvbnRlbnQuICBUaGUgcGFja2V0IGxlbmd0aCBpbiB0aGUgaGVhZGVyXG4gKiBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgVXNlciBJRC5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6cGFja2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAcmVxdWlyZXMgZW51bXNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKi9cblxuZnVuY3Rpb24gVXNlcmlkKCkge1xuICB0aGlzLnRhZyA9IF9lbnVtczIuZGVmYXVsdC5wYWNrZXQudXNlcmlkO1xuICAvKiogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdXNlciBpZC4gVXN1YWxseSBpbiB0aGUgZm9ybVxuICAgKiBKb2huIERvZSA8am9obkBleGFtcGxlLmNvbT5cbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIHRoaXMudXNlcmlkID0gJyc7XG5cbiAgdGhpcy5uYW1lID0gJyc7XG4gIHRoaXMuZW1haWwgPSAnJztcbiAgdGhpcy5jb21tZW50ID0gJyc7XG59XG5cbi8qKlxuICogUGFyc2luZyBmdW5jdGlvbiBmb3IgYSB1c2VyIGlkIHBhY2tldCAodGFnIDEzKS5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXQgcGF5bG9hZCBvZiBhIHRhZyAxMyBwYWNrZXRcbiAqL1xuVXNlcmlkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHRoaXMucGFyc2UoX3V0aWwyLmRlZmF1bHQuZGVjb2RlX3V0ZjgoX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIoYnl0ZXMpKSk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHVzZXJpZCBzdHJpbmcsIGUuZy4gJ0pvaG4gRG9lIDxqb2huQGV4YW1wbGUuY29tPidcbiAqL1xuVXNlcmlkLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uICh1c2VyaWQpIHtcbiAgdHJ5IHtcbiAgICAoMCwgX2Fzc2lnbjIuZGVmYXVsdCkodGhpcywgX3V0aWwyLmRlZmF1bHQucGFyc2VVc2VySWQodXNlcmlkKSk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHRoaXMudXNlcmlkID0gdXNlcmlkO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1c2VyIGlkIHBhY2tldFxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IGJpbmFyeSByZXByZXNlbnRhdGlvblxuICovXG5Vc2VyaWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkoX3V0aWwyLmRlZmF1bHQuZW5jb2RlX3V0ZjgodGhpcy51c2VyaWQpKTtcbn07XG5cbi8qKlxuICogU2V0IHVzZXJpZCBzdHJpbmcgZnJvbSBvYmplY3QsIGUuZy4geyBuYW1lOidQaGlsIFppbW1lcm1hbm4nLCBlbWFpbDoncGhpbEBvcGVucGdwLm9yZycgfVxuICovXG5Vc2VyaWQucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uICh1c2VyaWQpIHtcbiAgaWYgKF91dGlsMi5kZWZhdWx0LmlzU3RyaW5nKHVzZXJpZCkpIHtcbiAgICB1c2VyaWQgPSBfdXRpbDIuZGVmYXVsdC5wYXJzZVVzZXJJZCh1c2VyaWQpO1xuICB9XG4gICgwLCBfYXNzaWduMi5kZWZhdWx0KSh0aGlzLCB1c2VyaWQpO1xuICB0aGlzLnVzZXJpZCA9IF91dGlsMi5kZWZhdWx0LmZvcm1hdFVzZXJJZCh1c2VyaWQpO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gVXNlcmlkO1xuXG59LHtcIi4uL2VudW1zXCI6MzU5LFwiLi4vdXRpbFwiOjM5OCxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduXCI6MjR9XSwzOTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduJyk7XG5cbnZhciBfYXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Fzc2lnbik7XG5cbnZhciBfc3ltYm9sID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbCcpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX2Zyb20gPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvZnJvbScpO1xuXG52YXIgX2Zyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZnJvbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLy8gT2xkIGJyb3dzZXIgcG9seWZpbGxzXG4vLyBBbGwgYXJlIGxpc3RlZCBhcyBkZXYgZGVwZW5kZW5jaWVzIGJlY2F1c2UgTm9kZSBkb2VzIG5vdCBuZWVkIHRoZW1cbi8vIGFuZCBmb3IgYnJvd3NlciBiYWJlbCB3aWxsIHRha2UgY2FyZSBvZiBpdFxuXG5pZiAodHlwZW9mIHdpbmRvdy5mZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgX2RlcmVxXygnd2hhdHdnLWZldGNoJyk7XG59XG5pZiAodHlwZW9mIEFycmF5LnByb3RvdHlwZS5maWxsID09PSAndW5kZWZpbmVkJykge1xuICBfZGVyZXFfKCdjb3JlLWpzL2ZuL2FycmF5L2ZpbGwnKTtcbn1cbmlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLmZpbmQgPT09ICd1bmRlZmluZWQnKSB7XG4gIF9kZXJlcV8oJ2NvcmUtanMvZm4vYXJyYXkvZmluZCcpO1xufVxuaWYgKHR5cGVvZiBfZnJvbTIuZGVmYXVsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgX2RlcmVxXygnY29yZS1qcy9mbi9hcnJheS9mcm9tJyk7XG59XG5cbi8vIE5vIGlmLXN0YXRlbWVudCBvbiBQcm9taXNlIGJlY2F1c2Ugb2YgSUUxMS4gT3RoZXJ3aXNlIFByb21pc2UgaXMgdW5kZWZpbmVkIGluIHRoZSBzZXJ2aWNlIHdvcmtlci5cbl9kZXJlcV8oJ2NvcmUtanMvZm4vcHJvbWlzZScpO1xuXG5pZiAodHlwZW9mIFVpbnQ4QXJyYXkuZnJvbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgX2RlcmVxXygnY29yZS1qcy9mbi90eXBlZC91aW50OC1hcnJheScpO1xufVxuaWYgKHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGVhdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgX2RlcmVxXygnY29yZS1qcy9mbi9zdHJpbmcvcmVwZWF0Jyk7XG59XG5pZiAodHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gIF9kZXJlcV8oJ2NvcmUtanMvZm4vc3ltYm9sJyk7XG59XG5pZiAodHlwZW9mIF9hc3NpZ24yLmRlZmF1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gIF9kZXJlcV8oJ2NvcmUtanMvZm4vb2JqZWN0L2Fzc2lnbicpO1xufVxuXG59LHtcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tXCI6MjAsXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnblwiOjI0LFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbFwiOjMzLFwiY29yZS1qcy9mbi9hcnJheS9maWxsXCI6NDgsXCJjb3JlLWpzL2ZuL2FycmF5L2ZpbmRcIjo0OSxcImNvcmUtanMvZm4vYXJyYXkvZnJvbVwiOjUwLFwiY29yZS1qcy9mbi9vYmplY3QvYXNzaWduXCI6NTEsXCJjb3JlLWpzL2ZuL3Byb21pc2VcIjo1MixcImNvcmUtanMvZm4vc3RyaW5nL3JlcGVhdFwiOjUzLFwiY29yZS1qcy9mbi9zeW1ib2xcIjo1NCxcImNvcmUtanMvZm4vdHlwZWQvdWludDgtYXJyYXlcIjo1NSxcIndoYXR3Zy1mZXRjaFwiOjMyMX1dLDM5MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNpZ25hdHVyZSA9IFNpZ25hdHVyZTtcbmV4cG9ydHMucmVhZEFybW9yZWQgPSByZWFkQXJtb3JlZDtcbmV4cG9ydHMucmVhZCA9IHJlYWQ7XG5cbnZhciBfYXJtb3IgPSBfZGVyZXFfKCcuL2VuY29kaW5nL2FybW9yJyk7XG5cbnZhciBfYXJtb3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXJtb3IpO1xuXG52YXIgX3BhY2tldCA9IF9kZXJlcV8oJy4vcGFja2V0Jyk7XG5cbnZhciBfcGFja2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhY2tldCk7XG5cbnZhciBfZW51bXMgPSBfZGVyZXFfKCcuL2VudW1zJyk7XG5cbnZhciBfZW51bXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW51bXMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEBjbGFzc1xuICogQGNsYXNzZGVzYyBDbGFzcyB0aGF0IHJlcHJlc2VudHMgYW4gT3BlblBHUCBzaWduYXR1cmUuXG4gKiBAcGFyYW0gIHttb2R1bGU6cGFja2V0Lkxpc3R9IHBhY2tldGxpc3QgVGhlIHNpZ25hdHVyZSBwYWNrZXRzXG4gKi9cbmZ1bmN0aW9uIFNpZ25hdHVyZShwYWNrZXRsaXN0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTaWduYXR1cmUpKSB7XG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUocGFja2V0bGlzdCk7XG4gIH1cbiAgdGhpcy5wYWNrZXRzID0gcGFja2V0bGlzdCB8fCBuZXcgX3BhY2tldDIuZGVmYXVsdC5MaXN0KCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBBU0NJSSBhcm1vcmVkIHRleHQgb2Ygc2lnbmF0dXJlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBU0NJSSBhcm1vclxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEByZXF1aXJlcyBlbmNvZGluZy9hcm1vclxuICogQHJlcXVpcmVzIHBhY2tldFxuICogQHJlcXVpcmVzIGVudW1zXG4gKiBAbW9kdWxlIHNpZ25hdHVyZVxuICovXG5cblNpZ25hdHVyZS5wcm90b3R5cGUuYXJtb3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfYXJtb3IyLmRlZmF1bHQuZW5jb2RlKF9lbnVtczIuZGVmYXVsdC5hcm1vci5zaWduYXR1cmUsIHRoaXMucGFja2V0cy53cml0ZSgpKTtcbn07XG5cbi8qKlxuICogcmVhZHMgYW4gT3BlblBHUCBhcm1vcmVkIHNpZ25hdHVyZSBhbmQgcmV0dXJucyBhIHNpZ25hdHVyZSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcm1vcmVkVGV4dCB0ZXh0IHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge1NpZ25hdHVyZX0gbmV3IHNpZ25hdHVyZSBvYmplY3RcbiAqIEBzdGF0aWNcbiAqL1xuZnVuY3Rpb24gcmVhZEFybW9yZWQoYXJtb3JlZFRleHQpIHtcbiAgdmFyIGlucHV0ID0gX2FybW9yMi5kZWZhdWx0LmRlY29kZShhcm1vcmVkVGV4dCkuZGF0YTtcbiAgcmV0dXJuIHJlYWQoaW5wdXQpO1xufVxuXG4vKipcbiAqIHJlYWRzIGFuIE9wZW5QR1Agc2lnbmF0dXJlIGFzIGJ5dGUgYXJyYXkgYW5kIHJldHVybnMgYSBzaWduYXR1cmUgb2JqZWN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0ICAgYmluYXJ5IHNpZ25hdHVyZVxuICogQHJldHVybnMge1NpZ25hdHVyZX0gICAgICAgICBuZXcgc2lnbmF0dXJlIG9iamVjdFxuICogQHN0YXRpY1xuICovXG5mdW5jdGlvbiByZWFkKGlucHV0KSB7XG4gIHZhciBwYWNrZXRsaXN0ID0gbmV3IF9wYWNrZXQyLmRlZmF1bHQuTGlzdCgpO1xuICBwYWNrZXRsaXN0LnJlYWQoaW5wdXQpO1xuICByZXR1cm4gbmV3IFNpZ25hdHVyZShwYWNrZXRsaXN0KTtcbn1cblxufSx7XCIuL2VuY29kaW5nL2FybW9yXCI6MzU3LFwiLi9lbnVtc1wiOjM1OSxcIi4vcGFja2V0XCI6MzcxfV0sMzkyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEVDREhTeW1tZXRyaWNLZXkoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KFtdKTtcbiAgfSBlbHNlIGlmIChfdXRpbDIuZGVmYXVsdC5pc1N0cmluZyhkYXRhKSkge1xuICAgIGRhdGEgPSBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gIH1cbiAgdGhpcy5kYXRhID0gZGF0YTtcbn1cblxuLyoqXG4gKiBSZWFkIGFuIEVDREhTeW1tZXRyaWNLZXkgZnJvbSBhbiBVaW50OEFycmF5XG4gKiBAcGFyYW0gIHtVaW50OEFycmF5fSAgaW5wdXQgIFdoZXJlIHRvIHJlYWQgdGhlIGVuY29kZWQgc3ltbWV0cmljIGtleSBmcm9tXG4gKiBAcmV0dXJucyB7TnVtYmVyfSAgICAgICAgICAgICBOdW1iZXIgb2YgcmVhZCBieXRlc1xuICovXG4vLyBPcGVuUEdQLmpzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBEZWNlbnRyYWxcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEVuY29kZWQgc3ltbWV0cmljIGtleSBmb3IgRUNESFxuICpcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIHR5cGUvZWNkaF9zeW1rZXlcbiAqL1xuXG5FQ0RIU3ltbWV0cmljS2V5LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIGlmIChpbnB1dC5sZW5ndGggPj0gMSkge1xuICAgIHZhciBsZW5ndGggPSBpbnB1dFswXTtcbiAgICBpZiAoaW5wdXQubGVuZ3RoID49IDEgKyBsZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGlucHV0LnN1YmFycmF5KDEsIDEgKyBsZW5ndGgpO1xuICAgICAgcmV0dXJuIDEgKyB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3ltbWV0cmljIGtleScpO1xufTtcblxuLyoqXG4gKiBXcml0ZSBhbiBFQ0RIU3ltbWV0cmljS2V5IGFzIGFuIFVpbnQ4QXJyYXlcbiAqIEByZXR1cm5zICB7VWludDhBcnJheX0gIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZhbHVlXG4gKi9cbkVDREhTeW1tZXRyaWNLZXkucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbbmV3IFVpbnQ4QXJyYXkoW3RoaXMuZGF0YS5sZW5ndGhdKSwgdGhpcy5kYXRhXSk7XG59O1xuXG5FQ0RIU3ltbWV0cmljS2V5LmZyb21DbG9uZSA9IGZ1bmN0aW9uIChjbG9uZSkge1xuICByZXR1cm4gbmV3IEVDREhTeW1tZXRyaWNLZXkoY2xvbmUuZGF0YSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBFQ0RIU3ltbWV0cmljS2V5O1xuXG59LHtcIi4uL3V0aWxcIjozOTh9XSwzOTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMuanMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0gIHtlbnVtcy5oYXNofSAgICAgICBoYXNoICAgIEhhc2ggYWxnb3JpdGhtXG4gKiBAcGFyYW0gIHtlbnVtcy5zeW1tZXRyaWN9ICBjaXBoZXIgIFN5bW1ldHJpYyBhbGdvcml0aG1cbiAqL1xuZnVuY3Rpb24gS0RGUGFyYW1zKGRhdGEpIHtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDIpIHtcbiAgICB0aGlzLmhhc2ggPSBkYXRhWzBdO1xuICAgIHRoaXMuY2lwaGVyID0gZGF0YVsxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhhc2ggPSBfZW51bXMyLmRlZmF1bHQuaGFzaC5zaGExO1xuICAgIHRoaXMuY2lwaGVyID0gX2VudW1zMi5kZWZhdWx0LnN5bW1ldHJpYy5hZXMxMjg7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIEtERlBhcmFtcyBmcm9tIGFuIFVpbnQ4QXJyYXlcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9ICBpbnB1dCAgV2hlcmUgdG8gcmVhZCB0aGUgS0RGUGFyYW1zIGZyb21cbiAqIEByZXR1cm5zIHtOdW1iZXJ9ICAgICAgICAgICAgIE51bWJlciBvZiByZWFkIGJ5dGVzXG4gKi9cbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IERlY2VudHJhbFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdHlwZSBLREYgcGFyYW1ldGVyc1xuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjYzNyNzZWN0aW9uLTd8UkZDIDY2MzcgN306XG4gKiBBIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIChLREYpIGlzIG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIEVDXG4gKiBlbmNyeXB0aW9uLiAgVGhlIENvbmNhdGVuYXRpb24gS2V5IERlcml2YXRpb24gRnVuY3Rpb24gKEFwcHJvdmVkXG4gKiBBbHRlcm5hdGl2ZSAxKSBbTklTVC1TUDgwMC01NkFdIHdpdGggdGhlIEtERiBoYXNoIGZ1bmN0aW9uIHRoYXQgaXNcbiAqIFNIQTItMjU2IFtGSVBTLTE4MC0zXSBvciBzdHJvbmdlciBpcyBSRVFVSVJFRC5cbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQG1vZHVsZSB0eXBlL2tkZl9wYXJhbXNcbiAqL1xuXG5LREZQYXJhbXMucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA8IDQgfHwgaW5wdXRbMF0gIT09IDMgfHwgaW5wdXRbMV0gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWFkIEtERlBhcmFtcycpO1xuICB9XG4gIHRoaXMuaGFzaCA9IGlucHV0WzJdO1xuICB0aGlzLmNpcGhlciA9IGlucHV0WzNdO1xuICByZXR1cm4gNDtcbn07XG5cbi8qKlxuICogV3JpdGUgS0RGUGFyYW1zIHRvIGFuIFVpbnQ4QXJyYXlcbiAqIEByZXR1cm5zICB7VWludDhBcnJheX0gIEFycmF5IHdpdGggdGhlIEtERlBhcmFtcyB2YWx1ZVxuICovXG5LREZQYXJhbXMucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzMsIDEsIHRoaXMuaGFzaCwgdGhpcy5jaXBoZXJdKTtcbn07XG5cbktERlBhcmFtcy5mcm9tQ2xvbmUgPSBmdW5jdGlvbiAoY2xvbmUpIHtcbiAgcmV0dXJuIG5ldyBLREZQYXJhbXMoW2Nsb25lLmhhc2gsIGNsb25lLmNpcGhlcl0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gS0RGUGFyYW1zO1xuXG59LHtcIi4uL2VudW1zLmpzXCI6MzU5fV0sMzk0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF91dGlsID0gX2RlcmVxXygnLi4vdXRpbC5qcycpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEtleWlkKCkge1xuICB0aGlzLmJ5dGVzID0gJyc7XG59XG5cbi8qKlxuICogUGFyc2luZyBtZXRob2QgZm9yIGEga2V5IGlkXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0IElucHV0IHRvIHJlYWQgdGhlIGtleSBpZCBmcm9tXG4gKi9cbi8vIEdQRzRCcm93c2VycyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDExIFJlY3VyaXR5IExhYnMgR21iSFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdHlwZSBrZXkgaWRcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi0zLjN8UkZDNDg4MCAzLjN9OlxuICogQSBLZXkgSUQgaXMgYW4gZWlnaHQtb2N0ZXQgc2NhbGFyIHRoYXQgaWRlbnRpZmllcyBhIGtleS5cbiAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UIGFzc3VtZSB0aGF0IEtleSBJRHMgYXJlIHVuaXF1ZS4gIFRoZVxuICogc2VjdGlvbiBcIkVuaGFuY2VkIEtleSBGb3JtYXRzXCIgYmVsb3cgZGVzY3JpYmVzIGhvdyBLZXkgSURzIGFyZVxuICogZm9ybWVkLlxuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUgdHlwZS9rZXlpZFxuICovXG5cbktleWlkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHRoaXMuYnl0ZXMgPSBfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheSgwLCA4KSk7XG59O1xuXG5LZXlpZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheSh0aGlzLmJ5dGVzKTtcbn07XG5cbktleWlkLnByb3RvdHlwZS50b0hleCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LnN0cl90b19oZXgodGhpcy5ieXRlcyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBlcXVhbGl0eSBvZiBLZXkgSUQnc1xuICogQHBhcmFtIHtLZXlpZH0ga2V5aWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWF0Y2hXaWxkY2FyZCBJbmRpY2F0ZXMgd2hldGhlciB0byBjaGVjayBpZiBlaXRoZXIga2V5aWQgaXMgYSB3aWxkY2FyZFxuICovXG5LZXlpZC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKGtleWlkKSB7XG4gIHZhciBtYXRjaFdpbGRjYXJkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICByZXR1cm4gbWF0Y2hXaWxkY2FyZCAmJiAoa2V5aWQuaXNXaWxkY2FyZCgpIHx8IHRoaXMuaXNXaWxkY2FyZCgpKSB8fCB0aGlzLmJ5dGVzID09PSBrZXlpZC5ieXRlcztcbn07XG5cbktleWlkLnByb3RvdHlwZS5pc051bGwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmJ5dGVzID09PSAnJztcbn07XG5cbktleWlkLnByb3RvdHlwZS5pc1dpbGRjYXJkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKC9eMCskLy50ZXN0KHRoaXMudG9IZXgoKSlcbiAgKTtcbn07XG5cbktleWlkLm1hcFRvSGV4ID0gZnVuY3Rpb24gKGtleUlkKSB7XG4gIHJldHVybiBrZXlJZC50b0hleCgpO1xufTtcblxuS2V5aWQuZnJvbUNsb25lID0gZnVuY3Rpb24gKGNsb25lKSB7XG4gIHZhciBrZXlpZCA9IG5ldyBLZXlpZCgpO1xuICBrZXlpZC5ieXRlcyA9IGNsb25lLmJ5dGVzO1xuICByZXR1cm4ga2V5aWQ7XG59O1xuXG5LZXlpZC5mcm9tSWQgPSBmdW5jdGlvbiAoaGV4KSB7XG4gIHZhciBrZXlpZCA9IG5ldyBLZXlpZCgpO1xuICBrZXlpZC5yZWFkKF91dGlsMi5kZWZhdWx0LmhleF90b19VaW50OEFycmF5KGhleCkpO1xuICByZXR1cm4ga2V5aWQ7XG59O1xuXG5LZXlpZC53aWxkY2FyZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGtleWlkID0gbmV3IEtleWlkKCk7XG4gIGtleWlkLnJlYWQobmV3IFVpbnQ4QXJyYXkoOCkpO1xuICByZXR1cm4ga2V5aWQ7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBLZXlpZDtcblxufSx7XCIuLi91dGlsLmpzXCI6Mzk4fV0sMzk1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ibiA9IF9kZXJlcV8oJ2JuLmpzJyk7XG5cbnZhciBfYm4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYm4pO1xuXG52YXIgX3V0aWwgPSBfZGVyZXFfKCcuLi91dGlsJyk7XG5cbnZhciBfdXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLy8gSGludDogV2UgaG9sZCBvdXIgTVBJcyBhcyBhbiBhcnJheSBvZiBvY3RldHMgaW4gYmlnIGVuZGlhbiBmb3JtYXQgcHJlY2VkaW5nIGEgdHdvXG4vLyBvY3RldCBzY2FsYXI6IE1QSTogW2EsYixjLGQsZSxmXVxuLy8gLSBNUEkgc2l6ZTogKGEgPDwgOCkgfCBiXG4vLyAtIE1QSSA9IGMgfCBkIDw8IDggfCBlIDw8ICgoTVBJLmxlbmd0aCAtMikqOCkgfCBmICgoTVBJLmxlbmd0aCAtMikqOClcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBlIE1QSSAoe0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tMy4yfFJGQzQ4ODAgMy4yfSlcbiAqIE11bHRpcHJlY2lzaW9uIGludGVnZXJzIChhbHNvIGNhbGxlZCBNUElzKSBhcmUgdW5zaWduZWQgaW50ZWdlcnMgdXNlZFxuICogdG8gaG9sZCBsYXJnZSBpbnRlZ2VycyBzdWNoIGFzIHRoZSBvbmVzIHVzZWQgaW4gY3J5cHRvZ3JhcGhpY1xuICogY2FsY3VsYXRpb25zLlxuICogQW4gTVBJIGNvbnNpc3RzIG9mIHR3byBwaWVjZXM6IGEgdHdvLW9jdGV0IHNjYWxhciB0aGF0IGlzIHRoZSBsZW5ndGhcbiAqIG9mIHRoZSBNUEkgaW4gYml0cyBmb2xsb3dlZCBieSBhIHN0cmluZyBvZiBvY3RldHMgdGhhdCBjb250YWluIHRoZVxuICogYWN0dWFsIGludGVnZXIuXG4gKiBAcmVxdWlyZXMgYm4uanNcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAbW9kdWxlIHR5cGUvbXBpXG4gKi9cblxuZnVuY3Rpb24gTVBJKGRhdGEpIHtcbiAgLyoqIEFuIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBpbnRlZ2VyICovXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTVBJKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YS5kYXRhO1xuICB9IGVsc2UgaWYgKF9ibjIuZGVmYXVsdC5pc0JOKGRhdGEpKSB7XG4gICAgdGhpcy5mcm9tQk4oZGF0YSk7XG4gIH0gZWxzZSBpZiAoX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KGRhdGEpKSB7XG4gICAgdGhpcy5mcm9tVWludDhBcnJheShkYXRhKTtcbiAgfSBlbHNlIGlmIChfdXRpbDIuZGVmYXVsdC5pc1N0cmluZyhkYXRhKSkge1xuICAgIHRoaXMuZnJvbVN0cmluZyhkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2luZyBmdW5jdGlvbiBmb3IgYSBNUEkgKHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTMuMnxSRkMgNDg4MCAzLjJ9KS5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXQgIFBheWxvYWQgb2YgTVBJIGRhdGFcbiAqIEBwYXJhbSB7U3RyaW5nfSAgICAgZW5kaWFuIEVuZGlhbm5lc3Mgb2YgdGhlIGRhdGE7ICdiZScgZm9yIGJpZy1lbmRpYW4gb3IgJ2xlJyBmb3IgbGl0dGxlLWVuZGlhblxuICogQHJldHVybnMge0ludGVnZXJ9ICAgICAgICAgIExlbmd0aCBvZiBkYXRhIHJlYWRcbiAqL1xuTVBJLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHZhciBlbmRpYW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdiZSc7XG5cbiAgaWYgKF91dGlsMi5kZWZhdWx0LmlzU3RyaW5nKGJ5dGVzKSkge1xuICAgIGJ5dGVzID0gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkoYnl0ZXMpO1xuICB9XG5cbiAgdmFyIGJpdHMgPSBieXRlc1swXSA8PCA4IHwgYnl0ZXNbMV07XG4gIHZhciBieXRlbGVuID0gYml0cyArIDcgPj4+IDM7XG4gIHZhciBwYXlsb2FkID0gYnl0ZXMuc3ViYXJyYXkoMiwgMiArIGJ5dGVsZW4pO1xuXG4gIHRoaXMuZnJvbVVpbnQ4QXJyYXkocGF5bG9hZCwgZW5kaWFuKTtcblxuICByZXR1cm4gMiArIGJ5dGVsZW47XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBtcGkgb2JqZWN0IHRvIGEgYnl0ZXMgYXMgc3BlY2lmaWVkIGluXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4ODAjc2VjdGlvbi0zLjJ8UkZDNDg4MCAzLjJ9XG4gKiBAcGFyYW0ge1N0cmluZ30gZW5kaWFuIEVuZGlhbm5lc3Mgb2YgdGhlIHBheWxvYWQ7ICdiZScgZm9yIGJpZy1lbmRpYW4gb3IgJ2xlJyBmb3IgbGl0dGxlLWVuZGlhblxuICogQHBhcmFtIHtJbnRlZ2VyfSBsZW5ndGggTGVuZ3RoIG9mIHRoZSBkYXRhIHBhcnQgb2YgdGhlIE1QSVxuICogQHJldHVybnMge1VpbnQ4QXJheX0gbXBpIEJ5dGUgcmVwcmVzZW50YXRpb25cbiAqL1xuTVBJLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChlbmRpYW4sIGxlbmd0aCkge1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19NUEkodGhpcy50b1VpbnQ4QXJyYXkoZW5kaWFuLCBsZW5ndGgpKTtcbn07XG5cbk1QSS5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSAqIDggKyBfdXRpbDIuZGVmYXVsdC5uYml0cyh0aGlzLmRhdGFbMF0pO1xufTtcblxuTVBJLnByb3RvdHlwZS5ieXRlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbn07XG5cbk1QSS5wcm90b3R5cGUudG9VaW50OEFycmF5ID0gZnVuY3Rpb24gKGVuZGlhbiwgbGVuZ3RoKSB7XG4gIGVuZGlhbiA9IGVuZGlhbiB8fCAnYmUnO1xuICBsZW5ndGggPSBsZW5ndGggfHwgdGhpcy5kYXRhLmxlbmd0aDtcblxuICB2YXIgcGF5bG9hZCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIHZhciBzdGFydCA9IGxlbmd0aCAtIHRoaXMuZGF0YS5sZW5ndGg7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BheWxvYWQgaXMgdG9vIGxhcmdlLicpO1xuICB9XG5cbiAgcGF5bG9hZC5zZXQodGhpcy5kYXRhLCBzdGFydCk7XG4gIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICBwYXlsb2FkLnJldmVyc2UoKTtcbiAgfVxuXG4gIHJldHVybiBwYXlsb2FkO1xufTtcblxuTVBJLnByb3RvdHlwZS5mcm9tVWludDhBcnJheSA9IGZ1bmN0aW9uIChieXRlcykge1xuICB2YXIgZW5kaWFuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYmUnO1xuXG4gIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmxlbmd0aCk7XG4gIHRoaXMuZGF0YS5zZXQoYnl0ZXMpO1xuXG4gIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICB0aGlzLmRhdGEucmV2ZXJzZSgpO1xuICB9XG59O1xuXG5NUEkucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuVWludDhBcnJheV90b19zdHIodGhpcy50b1VpbnQ4QXJyYXkoKSk7XG59O1xuXG5NUEkucHJvdG90eXBlLmZyb21TdHJpbmcgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHZhciBlbmRpYW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdiZSc7XG5cbiAgdGhpcy5mcm9tVWludDhBcnJheShfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShzdHIpLCBlbmRpYW4pO1xufTtcblxuTVBJLnByb3RvdHlwZS50b0JOID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IF9ibjIuZGVmYXVsdCh0aGlzLnRvVWludDhBcnJheSgpKTtcbn07XG5cbk1QSS5wcm90b3R5cGUuZnJvbUJOID0gZnVuY3Rpb24gKGJuKSB7XG4gIHRoaXMuZGF0YSA9IGJuLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXkpO1xufTtcblxuTVBJLmZyb21DbG9uZSA9IGZ1bmN0aW9uIChjbG9uZSkge1xuICByZXR1cm4gbmV3IE1QSShjbG9uZS5kYXRhKTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IE1QSTtcblxufSx7XCIuLi91dGlsXCI6Mzk4LFwiYm4uanNcIjo0NH1dLDM5NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbi8vIE9wZW5QR1AuanMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IERlY2VudHJhbFxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Jcbi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuLy8gdmVyc2lvbiAzLjAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbi8vIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBXG5cbi8qKlxuICogV3JhcHBlciB0byBhbiBPSUQgdmFsdWVcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY2Mzcjc2VjdGlvbi0xMXxSRkM2NjM3LCBzZWN0aW9uIDExfTpcbiAqIFRoZSBzZXF1ZW5jZSBvZiBvY3RldHMgaW4gdGhlIHRoaXJkIGNvbHVtbiBpcyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nXG4gKiB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKSB0byB0aGUgQVNOLjEgT2JqZWN0IElkZW50aWZpZXJcbiAqIHdpdGggc3Vic2VxdWVudCB0cnVuY2F0aW9uLiAgVGhlIHRydW5jYXRpb24gcmVtb3ZlcyB0aGUgdHdvIGZpZWxkcyBvZlxuICogZW5jb2RlZCBPYmplY3QgSWRlbnRpZmllci4gIFRoZSBmaXJzdCBvbWl0dGVkIGZpZWxkIGlzIG9uZSBvY3RldFxuICogcmVwcmVzZW50aW5nIHRoZSBPYmplY3QgSWRlbnRpZmllciB0YWcsIGFuZCB0aGUgc2Vjb25kIG9taXR0ZWQgZmllbGRcbiAqIGlzIHRoZSBsZW5ndGggb2YgdGhlIE9iamVjdCBJZGVudGlmaWVyIGJvZHkuICBGb3IgZXhhbXBsZSwgdGhlXG4gKiBjb21wbGV0ZSBBU04uMSBERVIgZW5jb2RpbmcgZm9yIHRoZSBOSVNUIFAtMjU2IGN1cnZlIE9JRCBpcyBcIjA2IDA4IDJBXG4gKiA4NiA0OCBDRSAzRCAwMyAwMSAwN1wiLCBmcm9tIHdoaWNoIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgdGFibGUgYWJvdmVcbiAqIGlzIGNvbnN0cnVjdGVkIGJ5IG9taXR0aW5nIHRoZSBmaXJzdCB0d28gb2N0ZXRzLiAgT25seSB0aGUgdHJ1bmNhdGVkXG4gKiBzZXF1ZW5jZSBvZiBvY3RldHMgaXMgdGhlIHZhbGlkIHJlcHJlc2VudGF0aW9uIG9mIGEgY3VydmUgT0lELlxuICogQHJlcXVpcmVzIHV0aWxcbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQG1vZHVsZSB0eXBlL29pZFxuICovXG5cbmZ1bmN0aW9uIE9JRChvaWQpIHtcbiAgaWYgKG9pZCBpbnN0YW5jZW9mIE9JRCkge1xuICAgIHRoaXMub2lkID0gb2lkLm9pZDtcbiAgfSBlbHNlIGlmIChfdXRpbDIuZGVmYXVsdC5pc0FycmF5KG9pZCkgfHwgX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KG9pZCkpIHtcbiAgICBvaWQgPSBuZXcgVWludDhBcnJheShvaWQpO1xuICAgIGlmIChvaWRbMF0gPT09IDB4MDYpIHtcbiAgICAgIC8vIERFUiBlbmNvZGVkIG9pZCBieXRlIGFycmF5XG4gICAgICBpZiAob2lkWzFdICE9PSBvaWQubGVuZ3RoIC0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xlbmd0aCBtaXNtYXRjaCBpbiBERVIgZW5jb2RlZCBvaWQnKTtcbiAgICAgIH1cbiAgICAgIG9pZCA9IG9pZC5zdWJhcnJheSgyKTtcbiAgICB9XG4gICAgdGhpcy5vaWQgPSBvaWQ7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vaWQgPSAnJztcbiAgfVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZWFkIGFuIE9JRCBvYmplY3RcbiAqIEBwYXJhbSAge1VpbnQ4QXJyYXl9ICBpbnB1dCAgV2hlcmUgdG8gcmVhZCB0aGUgT0lEIGZyb21cbiAqIEByZXR1cm5zIHtOdW1iZXJ9ICAgICAgICAgICAgIE51bWJlciBvZiByZWFkIGJ5dGVzXG4gKi9cbk9JRC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICBpZiAoaW5wdXQubGVuZ3RoID49IDEpIHtcbiAgICB2YXIgbGVuZ3RoID0gaW5wdXRbMF07XG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+PSAxICsgbGVuZ3RoKSB7XG4gICAgICB0aGlzLm9pZCA9IGlucHV0LnN1YmFycmF5KDEsIDEgKyBsZW5ndGgpO1xuICAgICAgcmV0dXJuIDEgKyB0aGlzLm9pZC5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvaWQnKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIGFuIE9JRCBvYmplY3RcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBBcnJheSB3aXRoIHRoZSBzZXJpYWxpemVkIHZhbHVlIHRoZSBPSURcbiAqL1xuT0lELnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW25ldyBVaW50OEFycmF5KFt0aGlzLm9pZC5sZW5ndGhdKSwgdGhpcy5vaWRdKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIGFuIE9JRCBvYmplY3QgYXMgYSBoZXggc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgd2l0aCB0aGUgaGV4IHZhbHVlIG9mIHRoZSBPSURcbiAqL1xuT0lELnByb3RvdHlwZS50b0hleCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9faGV4KHRoaXMub2lkKTtcbn07XG5cbi8qKlxuICogSWYgYSBrbm93biBjdXJ2ZSBvYmplY3QgaWRlbnRpZmllciwgcmV0dXJuIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgY3VydmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyB3aXRoIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgY3VydmVcbiAqL1xuT0lELnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGV4ID0gdGhpcy50b0hleCgpO1xuICBpZiAoX2VudW1zMi5kZWZhdWx0LmN1cnZlW2hleF0pIHtcbiAgICByZXR1cm4gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5jdXJ2ZSwgaGV4KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY3VydmUgb2JqZWN0IGlkZW50aWZpZXIuJyk7XG4gIH1cbn07XG5cbk9JRC5mcm9tQ2xvbmUgPSBmdW5jdGlvbiAoY2xvbmUpIHtcbiAgcmV0dXJuIG5ldyBPSUQoY2xvbmUub2lkKTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IE9JRDtcblxufSx7XCIuLi9lbnVtc1wiOjM1OSxcIi4uL3V0aWxcIjozOTh9XSwzOTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NvbmZpZyA9IF9kZXJlcV8oJy4uL2NvbmZpZycpO1xuXG52YXIgX2NvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25maWcpO1xuXG52YXIgX2NyeXB0byA9IF9kZXJlcV8oJy4uL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX2VudW1zID0gX2RlcmVxXygnLi4vZW51bXMuanMnKTtcblxudmFyIF9lbnVtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbnVtcyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwuanMnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICovXG4vLyBHUEc0QnJvd3NlcnMgLSBBbiBPcGVuUEdQIGltcGxlbWVudGF0aW9uIGluIGphdmFzY3JpcHRcbi8vIENvcHlyaWdodCAoQykgMjAxMSBSZWN1cml0eSBMYWJzIEdtYkhcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJpbmctdG8ta2V5IHNwZWNpZmllclxuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDg4MCNzZWN0aW9uLTMuN3xSRkM0ODgwIDMuN306XG4gKiBTdHJpbmctdG8ta2V5IChTMkspIHNwZWNpZmllcnMgYXJlIHVzZWQgdG8gY29udmVydCBwYXNzcGhyYXNlIHN0cmluZ3NcbiAqIGludG8gc3ltbWV0cmljLWtleSBlbmNyeXB0aW9uL2RlY3J5cHRpb24ga2V5cy4gIFRoZXkgYXJlIHVzZWQgaW4gdHdvXG4gKiBwbGFjZXMsIGN1cnJlbnRseTogdG8gZW5jcnlwdCB0aGUgc2VjcmV0IHBhcnQgb2YgcHJpdmF0ZSBrZXlzIGluIHRoZVxuICogcHJpdmF0ZSBrZXlyaW5nLCBhbmQgdG8gY29udmVydCBwYXNzcGhyYXNlcyB0byBlbmNyeXB0aW9uIGtleXMgZm9yXG4gKiBzeW1tZXRyaWNhbGx5IGVuY3J5cHRlZCBtZXNzYWdlcy5cbiAqIEByZXF1aXJlcyBjb25maWdcbiAqIEByZXF1aXJlcyBjcnlwdG9cbiAqIEByZXF1aXJlcyBlbnVtc1xuICogQHJlcXVpcmVzIHV0aWxcbiAqIEBtb2R1bGUgdHlwZS9zMmtcbiAqL1xuXG5mdW5jdGlvbiBTMksoKSB7XG4gIC8qKiBAdHlwZSB7bW9kdWxlOmVudW1zLmhhc2h9ICovXG4gIHRoaXMuYWxnb3JpdGhtID0gJ3NoYTI1Nic7XG4gIC8qKiBAdHlwZSB7bW9kdWxlOmVudW1zLnMya30gKi9cbiAgdGhpcy50eXBlID0gJ2l0ZXJhdGVkJztcbiAgLyoqIEB0eXBlIHtJbnRlZ2VyfSAqL1xuICB0aGlzLmMgPSBfY29uZmlnMi5kZWZhdWx0LnMya19pdGVyYXRpb25fY291bnRfYnl0ZTtcbiAgLyoqIEVpZ2h0IGJ5dGVzIG9mIHNhbHQgaW4gYSBiaW5hcnkgc3RyaW5nLlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdGhpcy5zYWx0ID0gbnVsbDtcbn1cblxuUzJLLnByb3RvdHlwZS5nZXRfY291bnQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEV4cG9uZW50IGJpYXMsIGRlZmluZWQgaW4gUkZDNDg4MFxuICB2YXIgZXhwYmlhcyA9IDY7XG5cbiAgcmV0dXJuIDE2ICsgKHRoaXMuYyAmIDE1KSA8PCAodGhpcy5jID4+IDQpICsgZXhwYmlhcztcbn07XG5cbi8qKlxuICogUGFyc2luZyBmdW5jdGlvbiBmb3IgYSBzdHJpbmctdG8ta2V5IHNwZWNpZmllciAoe0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODgwI3NlY3Rpb24tMy43fFJGQyA0ODgwIDMuN30pLlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFBheWxvYWQgb2Ygc3RyaW5nLXRvLWtleSBzcGVjaWZpZXJcbiAqIEByZXR1cm5zIHtJbnRlZ2VyfSBBY3R1YWwgbGVuZ3RoIG9mIHRoZSBvYmplY3RcbiAqL1xuUzJLLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHZhciBpID0gMDtcbiAgdGhpcy50eXBlID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0LnMyaywgYnl0ZXNbaSsrXSk7XG4gIHRoaXMuYWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LnJlYWQoX2VudW1zMi5kZWZhdWx0Lmhhc2gsIGJ5dGVzW2krK10pO1xuXG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2FsdGVkJzpcbiAgICAgIHRoaXMuc2FsdCA9IGJ5dGVzLnN1YmFycmF5KGksIGkgKyA4KTtcbiAgICAgIGkgKz0gODtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaXRlcmF0ZWQnOlxuICAgICAgdGhpcy5zYWx0ID0gYnl0ZXMuc3ViYXJyYXkoaSwgaSArIDgpO1xuICAgICAgaSArPSA4O1xuXG4gICAgICAvLyBPY3RldCAxMDogY291bnQsIGEgb25lLW9jdGV0LCBjb2RlZCB2YWx1ZVxuICAgICAgdGhpcy5jID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZ251JzpcbiAgICAgIGlmIChfdXRpbDIuZGVmYXVsdC5VaW50OEFycmF5X3RvX3N0cihieXRlcy5zdWJhcnJheShpLCAzKSkgPT09IFwiR05VXCIpIHtcbiAgICAgICAgaSArPSAzOyAvLyBHTlVcbiAgICAgICAgdmFyIGdudUV4dFR5cGUgPSAxMDAwICsgYnl0ZXNbaSsrXTtcbiAgICAgICAgaWYgKGdudUV4dFR5cGUgPT09IDEwMDEpIHtcbiAgICAgICAgICB0aGlzLnR5cGUgPSBnbnVFeHRUeXBlO1xuICAgICAgICAgIC8vIEdudVBHIGV4dGVuc2lvbiBtb2RlIDEwMDEgLS0gZG9uJ3Qgd3JpdGUgc2VjcmV0IGtleSBhdCBhbGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHMyayBnbnUgcHJvdGVjdGlvbiBtb2RlLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBzMmsgdHlwZS5cIik7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHMyayB0eXBlLlwiKTtcbiAgfVxuXG4gIHJldHVybiBpO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemVzIHMyayBpbmZvcm1hdGlvblxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBzMmtcbiAqL1xuUzJLLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyciA9IFtuZXcgVWludDhBcnJheShbX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5zMmssIHRoaXMudHlwZSksIF9lbnVtczIuZGVmYXVsdC53cml0ZShfZW51bXMyLmRlZmF1bHQuaGFzaCwgdGhpcy5hbGdvcml0aG0pXSldO1xuXG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NhbHRlZCc6XG4gICAgICBhcnIucHVzaCh0aGlzLnNhbHQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaXRlcmF0ZWQnOlxuICAgICAgYXJyLnB1c2godGhpcy5zYWx0KTtcbiAgICAgIGFyci5wdXNoKG5ldyBVaW50OEFycmF5KFt0aGlzLmNdKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdnbnUnOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR05VIHMyayB0eXBlIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHMyayB0eXBlLlwiKTtcbiAgfVxuXG4gIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KGFycik7XG59O1xuXG4vKipcbiAqIFByb2R1Y2VzIGEga2V5IHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFzc3BocmFzZSBhbmQgdGhlIGRlZmluZWRcbiAqIGhhc2hBbGdvcml0aG1cbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzcGhyYXNlIFBhc3NwaHJhc2UgY29udGFpbmluZyB1c2VyIGlucHV0XG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gUHJvZHVjZWQga2V5IHdpdGggYSBsZW5ndGggY29ycmVzcG9uZGluZyB0b1xuICogaGFzaEFsZ29yaXRobSBoYXNoIGxlbmd0aFxuICovXG5TMksucHJvdG90eXBlLnByb2R1Y2Vfa2V5ID0gZnVuY3Rpb24gKHBhc3NwaHJhc2UsIG51bUJ5dGVzKSB7XG4gIHBhc3NwaHJhc2UgPSBfdXRpbDIuZGVmYXVsdC5zdHJfdG9fVWludDhBcnJheShfdXRpbDIuZGVmYXVsdC5lbmNvZGVfdXRmOChwYXNzcGhyYXNlKSk7XG5cbiAgZnVuY3Rpb24gcm91bmQocHJlZml4LCBzMmspIHtcbiAgICB2YXIgYWxnb3JpdGhtID0gX2VudW1zMi5kZWZhdWx0LndyaXRlKF9lbnVtczIuZGVmYXVsdC5oYXNoLCBzMmsuYWxnb3JpdGhtKTtcblxuICAgIHN3aXRjaCAoczJrLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICAgIHJldHVybiBfY3J5cHRvMi5kZWZhdWx0Lmhhc2guZGlnZXN0KGFsZ29yaXRobSwgX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbcHJlZml4LCBwYXNzcGhyYXNlXSkpO1xuXG4gICAgICBjYXNlICdzYWx0ZWQnOlxuICAgICAgICByZXR1cm4gX2NyeXB0bzIuZGVmYXVsdC5oYXNoLmRpZ2VzdChhbGdvcml0aG0sIF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3ByZWZpeCwgczJrLnNhbHQsIHBhc3NwaHJhc2VdKSk7XG5cbiAgICAgIGNhc2UgJ2l0ZXJhdGVkJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBjb3VudCA9IHMyay5nZXRfY291bnQoKTtcbiAgICAgICAgICB2YXIgZGF0YSA9IF91dGlsMi5kZWZhdWx0LmNvbmNhdFVpbnQ4QXJyYXkoW3Myay5zYWx0LCBwYXNzcGhyYXNlXSk7XG4gICAgICAgICAgdmFyIGlzcCA9IG5ldyBBcnJheShNYXRoLmNlaWwoY291bnQgLyBkYXRhLmxlbmd0aCkpO1xuXG4gICAgICAgICAgaXNwID0gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShpc3AuZmlsbChkYXRhKSk7XG5cbiAgICAgICAgICBpZiAoaXNwLmxlbmd0aCA+IGNvdW50KSB7XG4gICAgICAgICAgICBpc3AgPSBpc3Auc3ViYXJyYXkoMCwgY291bnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfY3J5cHRvMi5kZWZhdWx0Lmhhc2guZGlnZXN0KGFsZ29yaXRobSwgX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShbcHJlZml4LCBpc3BdKSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2dudSc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdOVSBzMmsgdHlwZSBub3Qgc3VwcG9ydGVkLlwiKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBzMmsgdHlwZS5cIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgcmxlbmd0aCA9IDA7XG4gIHZhciBwcmVmaXggPSBuZXcgVWludDhBcnJheShudW1CeXRlcyk7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG51bUJ5dGVzOyBfaSsrKSB7XG4gICAgcHJlZml4W19pXSA9IDA7XG4gIH1cblxuICB2YXIgaSA9IDA7XG4gIHdoaWxlIChybGVuZ3RoIDwgbnVtQnl0ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0gcm91bmQocHJlZml4LnN1YmFycmF5KDAsIGkpLCB0aGlzKTtcbiAgICBhcnIucHVzaChyZXN1bHQpO1xuICAgIHJsZW5ndGggKz0gcmVzdWx0Lmxlbmd0aDtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gX3V0aWwyLmRlZmF1bHQuY29uY2F0VWludDhBcnJheShhcnIpLnN1YmFycmF5KDAsIG51bUJ5dGVzKTtcbn07XG5cblMySy5mcm9tQ2xvbmUgPSBmdW5jdGlvbiAoY2xvbmUpIHtcbiAgdmFyIHMyayA9IG5ldyBTMksoKTtcbiAgczJrLmFsZ29yaXRobSA9IGNsb25lLmFsZ29yaXRobTtcbiAgczJrLnR5cGUgPSBjbG9uZS50eXBlO1xuICBzMmsuYyA9IGNsb25lLmM7XG4gIHMyay5zYWx0ID0gY2xvbmUuc2FsdDtcbiAgcmV0dXJuIHMyaztcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFMySztcblxufSx7XCIuLi9jb25maWdcIjozMjUsXCIuLi9jcnlwdG9cIjozNDAsXCIuLi9lbnVtcy5qc1wiOjM1OSxcIi4uL3V0aWwuanNcIjozOTh9XSwzOTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3NsaWNlZFRvQXJyYXkyID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXknKTtcblxudmFyIF9zbGljZWRUb0FycmF5MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NsaWNlZFRvQXJyYXkyKTtcblxudmFyIF92YWx1ZXMgPSBfZGVyZXFfKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3ZhbHVlcycpO1xuXG52YXIgX3ZhbHVlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92YWx1ZXMpO1xuXG52YXIgX2FkZHJlc3NSZmMgPSBfZGVyZXFfKCdhZGRyZXNzLXJmYzI4MjInKTtcblxudmFyIF9hZGRyZXNzUmZjMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FkZHJlc3NSZmMpO1xuXG52YXIgX2NvbmZpZyA9IF9kZXJlcV8oJy4vY29uZmlnJyk7XG5cbnZhciBfY29uZmlnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbmZpZyk7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbnZhciBfYmFzZSA9IF9kZXJlcV8oJy4vZW5jb2RpbmcvYmFzZTY0Jyk7XG5cbnZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG4vKipcbiAqIFRoaXMgb2JqZWN0IGNvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zXG4gKiBAcmVxdWlyZXMgYWRkcmVzcy1yZmMyODIyXG4gKiBAcmVxdWlyZXMgY29uZmlnXG4gKiBAcmVxdWlyZXMgZW5jb2RpbmcvYmFzZTY0XG4gKiBAbW9kdWxlIHV0aWxcbiAqL1xuXG52YXIgaXNJRTExID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50XFwvN1xcLjAuKnJ2OihbMC05Ll0rKS4qXFwpLipHZWNrbyQvKTsgLy8gcmUtaW1wb3J0IG1vZHVsZSB0byBhY2Nlc3MgdXRpbCBmdW5jdGlvbnNcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgaXNTdHJpbmc6IGZ1bmN0aW9uIGlzU3RyaW5nKGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnIHx8IFN0cmluZy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihkYXRhKTtcbiAgfSxcblxuICBpc0FycmF5OiBmdW5jdGlvbiBpc0FycmF5KGRhdGEpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZGF0YSk7XG4gIH0sXG5cbiAgaXNVaW50OEFycmF5OiBmdW5jdGlvbiBpc1VpbnQ4QXJyYXkoZGF0YSkge1xuICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGRhdGEpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNmZXJhYmxlIG9iamVjdHMgdG8gcGFzcyBidWZmZXJzIHdpdGggemVybyBjb3B5IChzaW1pbGFyIHRvIFwicGFzcyBieSByZWZlcmVuY2VcIiBpbiBDKyspXG4gICAqICAgU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV29ya2VyL3Bvc3RNZXNzYWdlXG4gICAqIEBwYXJhbSAge09iamVjdH0gb2JqICAgICAgICAgICB0aGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIHRoZSB3ZWIgd29ya2VyXG4gICAqIEByZXR1cm5zIHtBcnJheTxBcnJheUJ1ZmZlcj59ICAgYW4gYXJyYXkgb2YgYmluYXJ5IGRhdGEgdG8gYmUgcGFzc2VkXG4gICAqL1xuICBnZXRUcmFuc2ZlcmFibGVzOiBmdW5jdGlvbiBnZXRUcmFuc2ZlcmFibGVzKG9iaikge1xuICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGRvZXMgbm90IHN1cHBvcnQgVHJhbnNmZXJhYmxlIG9iamVjdHMuXG4gICAgaWYgKGlzSUUxMSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKF9jb25maWcyLmRlZmF1bHQuemVyb19jb3B5ICYmIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopKSB7XG4gICAgICB2YXIgdHJhbnNmZXJhYmxlcyA9IFtdO1xuICAgICAgX3V0aWwyLmRlZmF1bHQuY29sbGVjdEJ1ZmZlcnMob2JqLCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVzLmxlbmd0aCA/IHRyYW5zZmVyYWJsZXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuXG4gIGNvbGxlY3RCdWZmZXJzOiBmdW5jdGlvbiBjb2xsZWN0QnVmZmVycyhvYmosIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KG9iaikgJiYgY29sbGVjdGlvbi5pbmRleE9mKG9iai5idWZmZXIpID09PSAtMSkge1xuICAgICAgY29sbGVjdGlvbi5wdXNoKG9iai5idWZmZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iaikpIHtcbiAgICAgICgwLCBfdmFsdWVzMi5kZWZhdWx0KShvYmopLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBhbGwgY2hpbGRyZW5cbiAgICAgICAgX3V0aWwyLmRlZmF1bHQuY29sbGVjdEJ1ZmZlcnModmFsdWUsIGNvbGxlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHJlYWROdW1iZXI6IGZ1bmN0aW9uIHJlYWROdW1iZXIoYnl0ZXMpIHtcbiAgICB2YXIgbiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbiArPSBNYXRoLnBvdygyNTYsIGkpICogYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gMSAtIGldO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSxcblxuICB3cml0ZU51bWJlcjogZnVuY3Rpb24gd3JpdGVOdW1iZXIobiwgYnl0ZXMpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHtcbiAgICAgIGJbaV0gPSBuID4+IDggKiAoYnl0ZXMgLSBpIC0gMSkgJiAweEZGO1xuICAgIH1cblxuICAgIHJldHVybiBiO1xuICB9LFxuXG4gIHJlYWREYXRlOiBmdW5jdGlvbiByZWFkRGF0ZShieXRlcykge1xuICAgIHZhciBuID0gX3V0aWwyLmRlZmF1bHQucmVhZE51bWJlcihieXRlcyk7XG4gICAgdmFyIGQgPSBuZXcgRGF0ZShuICogMTAwMCk7XG4gICAgcmV0dXJuIGQ7XG4gIH0sXG5cbiAgd3JpdGVEYXRlOiBmdW5jdGlvbiB3cml0ZURhdGUodGltZSkge1xuICAgIHZhciBudW1lcmljID0gTWF0aC5mbG9vcih0aW1lLmdldFRpbWUoKSAvIDEwMDApO1xuXG4gICAgcmV0dXJuIF91dGlsMi5kZWZhdWx0LndyaXRlTnVtYmVyKG51bWVyaWMsIDQpO1xuICB9LFxuXG4gIG5vcm1hbGl6ZURhdGU6IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGUoKSB7XG4gICAgdmFyIHRpbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gdGltZSA9PT0gbnVsbCA/IHRpbWUgOiBuZXcgRGF0ZShNYXRoLmZsb29yKCt0aW1lIC8gMTAwMCkgKiAxMDAwKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlIGhleCBzdHJpbmcgZnJvbSBhIGJpbmFyeVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZyB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXNcbiAgICovXG4gIHN0cl90b19oZXg6IGZ1bmN0aW9uIHN0cl90b19oZXgoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHZhciByID0gW107XG4gICAgdmFyIGUgPSBzdHIubGVuZ3RoO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgaCA9IHZvaWQgMDtcbiAgICB3aGlsZSAoYyA8IGUpIHtcbiAgICAgIGggPSBzdHIuY2hhckNvZGVBdChjKyspLnRvU3RyaW5nKDE2KTtcbiAgICAgIHdoaWxlIChoLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgaCA9IFwiMFwiICsgaDtcbiAgICAgIH1cbiAgICAgIHIucHVzaChcIlwiICsgaCk7XG4gICAgfVxuICAgIHJldHVybiByLmpvaW4oJycpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYmluYXJ5IHN0cmluZyBmcm9tIGEgaGV4IGVuY29kZWQgc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgSGV4IHN0cmluZyB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAqL1xuICBoZXhfdG9fc3RyOiBmdW5jdGlvbiBoZXhfdG9fc3RyKGhleCkge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LnN1YnN0cihpLCAyKSwgMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfSxcblxuICAvKipcbiAgICogQ29udmVydCBhIFVpbnQ4QXJyYXkgdG8gYW4gTVBJLWZvcm1hdHRlZCBVaW50OEFycmF5LlxuICAgKiBOb3RlOiB0aGUgb3V0cHV0IGlzICoqbm90KiogYW4gTVBJIG9iamVjdC5cbiAgICogQHNlZSB7QGxpbmsgbW9kdWxlOnR5cGUvbXBpL01QSS5mcm9tVWludDhBcnJheX1cbiAgICogQHNlZSB7QGxpbmsgbW9kdWxlOnR5cGUvbXBpL01QSS50b1VpbnQ4QXJyYXl9XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYmluIEFuIGFycmF5IG9mIDgtYml0IGludGVnZXJzIHRvIGNvbnZlcnRcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IE1QSS1mb3JtYXR0ZWQgVWludDhBcnJheVxuICAgKi9cbiAgVWludDhBcnJheV90b19NUEk6IGZ1bmN0aW9uIFVpbnQ4QXJyYXlfdG9fTVBJKGJpbikge1xuICAgIHZhciBzaXplID0gKGJpbi5sZW5ndGggLSAxKSAqIDggKyBfdXRpbDIuZGVmYXVsdC5uYml0cyhiaW5bMF0pO1xuICAgIHZhciBwcmVmaXggPSBVaW50OEFycmF5LmZyb20oWyhzaXplICYgMHhGRjAwKSA+PiA4LCBzaXplICYgMHhGRl0pO1xuICAgIHJldHVybiBfdXRpbDIuZGVmYXVsdC5jb25jYXRVaW50OEFycmF5KFtwcmVmaXgsIGJpbl0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgQmFzZS02NCBlbmNvZGVkIHN0cmluZyBhbiBhcnJheSBvZiA4LWJpdCBpbnRlZ2VyXG4gICAqXG4gICAqIE5vdGU6IGFjY2VwdHMgYm90aCBSYWRpeC02NCBhbmQgVVJMLXNhZmUgc3RyaW5nc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZTY0IEJhc2UtNjQgZW5jb2RlZCBzdHJpbmcgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gQW4gYXJyYXkgb2YgOC1iaXQgaW50ZWdlcnNcbiAgICovXG4gIGI2NF90b19VaW50OEFycmF5OiBmdW5jdGlvbiBiNjRfdG9fVWludDhBcnJheShiYXNlNjQpIHtcbiAgICByZXR1cm4gX2Jhc2UyLmRlZmF1bHQuZGVjb2RlKGJhc2U2NC5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29udmVydCBhbiBhcnJheSBvZiA4LWJpdCBpbnRlZ2VyIHRvIGEgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzIEFuIGFycmF5IG9mIDgtYml0IGludGVnZXJzIHRvIGNvbnZlcnRcbiAgICogQHBhcmFtIHtib29sfSAgICAgICB1cmwgICBJZiB0cnVlLCBvdXRwdXQgaXMgVVJMLXNhZmVcbiAgICogQHJldHVybnMge1N0cmluZ30gICAgICAgICAgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgKi9cbiAgVWludDhBcnJheV90b19iNjQ6IGZ1bmN0aW9uIFVpbnQ4QXJyYXlfdG9fYjY0KGJ5dGVzLCB1cmwpIHtcbiAgICByZXR1cm4gX2Jhc2UyLmRlZmF1bHQuZW5jb2RlKGJ5dGVzLCB1cmwpLnJlcGxhY2UoLyhcXG4pL2csICcnKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgOC1iaXQgaW50ZWdlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhleCAgQSBoZXggc3RyaW5nIHRvIGNvbnZlcnRcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEFuIGFycmF5IG9mIDgtYml0IGludGVnZXJzXG4gICAqL1xuICBoZXhfdG9fVWludDhBcnJheTogZnVuY3Rpb24gaGV4X3RvX1VpbnQ4QXJyYXkoaGV4KSB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGhleC5sZW5ndGggPj4gMSk7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBoZXgubGVuZ3RoID4+IDE7IGsrKykge1xuICAgICAgcmVzdWx0W2tdID0gcGFyc2VJbnQoaGV4LnN1YnN0cihrIDw8IDEsIDIpLCAxNik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gYXJyYXkgb2YgOC1iaXQgaW50ZWdlcnMgdG8gYSBoZXggc3RyaW5nXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgQXJyYXkgb2YgOC1iaXQgaW50ZWdlcnMgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXJyYXlcbiAgICovXG4gIFVpbnQ4QXJyYXlfdG9faGV4OiBmdW5jdGlvbiBVaW50OEFycmF5X3RvX2hleChieXRlcykge1xuICAgIHZhciByID0gW107XG4gICAgdmFyIGUgPSBieXRlcy5sZW5ndGg7XG4gICAgdmFyIGMgPSAwO1xuICAgIHZhciBoID0gdm9pZCAwO1xuICAgIHdoaWxlIChjIDwgZSkge1xuICAgICAgaCA9IGJ5dGVzW2MrK10udG9TdHJpbmcoMTYpO1xuICAgICAgd2hpbGUgKGgubGVuZ3RoIDwgMikge1xuICAgICAgICBoID0gXCIwXCIgKyBoO1xuICAgICAgfVxuICAgICAgci5wdXNoKFwiXCIgKyBoKTtcbiAgICB9XG4gICAgcmV0dXJuIHIuam9pbignJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgOC1iaXQgaW50ZWdlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBTdHJpbmcgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gQW4gYXJyYXkgb2YgOC1iaXQgaW50ZWdlcnNcbiAgICovXG4gIHN0cl90b19VaW50OEFycmF5OiBmdW5jdGlvbiBzdHJfdG9fVWludDhBcnJheShzdHIpIHtcbiAgICBpZiAoIV91dGlsMi5kZWZhdWx0LmlzU3RyaW5nKHN0cikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RyX3RvX1VpbnQ4QXJyYXk6IERhdGEgbXVzdCBiZSBpbiB0aGUgZm9ybSBvZiBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gYXJyYXkgb2YgOC1iaXQgaW50ZWdlcnMgdG8gYSBzdHJpbmdcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyBBbiBhcnJheSBvZiA4LWJpdCBpbnRlZ2VycyB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXJyYXlcbiAgICovXG4gIFVpbnQ4QXJyYXlfdG9fc3RyOiBmdW5jdGlvbiBVaW50OEFycmF5X3RvX3N0cihieXRlcykge1xuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYnMgPSAxIDw8IDE0O1xuICAgIHZhciBqID0gYnl0ZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqOyBpICs9IGJzKSB7XG4gICAgICByZXN1bHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgYnl0ZXMuc3ViYXJyYXkoaSwgaSArIGJzIDwgaiA/IGkgKyBicyA6IGopKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuam9pbignJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBuYXRpdmUgamF2YXNjcmlwdCBzdHJpbmcgdG8gYSBzdHJpbmcgb2YgdXRmOCBieXRlc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBBIHZhbGlkIHNxdWVuY2Ugb2YgdXRmOCBieXRlc1xuICAgKi9cbiAgZW5jb2RlX3V0Zjg6IGZ1bmN0aW9uIGVuY29kZV91dGY4KHN0cikge1xuICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBzdHJpbmcgb2YgdXRmOCBieXRlcyB0byBhIG5hdGl2ZSBqYXZhc2NyaXB0IHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gdXRmOCBBIHZhbGlkIHNxdWVuY2Ugb2YgdXRmOCBieXRlc1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBBIG5hdGl2ZSBqYXZhc2NyaXB0IHN0cmluZ1xuICAgKi9cbiAgZGVjb2RlX3V0Zjg6IGZ1bmN0aW9uIGRlY29kZV91dGY4KHV0ZjgpIHtcbiAgICBpZiAodHlwZW9mIHV0ZjggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInV0ZjhcIiBpcyBub3Qgb2YgdHlwZSBzdHJpbmcnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHV0ZjgpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXRmODtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbmNhdCBVaW50OGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5PFVpbnQ4YXJyYXk+fSBBcnJheSBvZiBVaW50OEFycmF5cyB0byBjb25jYXRlbmF0ZVxuICAgKiBAcmV0dXJucyB7VWludDhhcnJheX0gQ29uY2F0ZW5hdGVkIGFycmF5XG4gICAqL1xuICBjb25jYXRVaW50OEFycmF5OiBmdW5jdGlvbiBjb25jYXRVaW50OEFycmF5KGFycmF5cykge1xuICAgIHZhciB0b3RhbExlbmd0aCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KGFycmF5c1tpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25jYXRVaW50OEFycmF5OiBEYXRhIG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSBVaW50OEFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIHRvdGFsTGVuZ3RoICs9IGFycmF5c1tpXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICB2YXIgcG9zID0gMDtcbiAgICBhcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmVzdWx0LnNldChlbGVtZW50LCBwb3MpO1xuICAgICAgcG9zICs9IGVsZW1lbnQubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcblxuICAvKipcbiAgICogRGVlcCBjb3B5IFVpbnQ4QXJyYXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBBcnJheSB0byBjb3B5XG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBuZXcgVWludDhBcnJheVxuICAgKi9cbiAgY29weVVpbnQ4QXJyYXk6IGZ1bmN0aW9uIGNvcHlVaW50OEFycmF5KGFycmF5KSB7XG4gICAgaWYgKCFfdXRpbDIuZGVmYXVsdC5pc1VpbnQ4QXJyYXkoYXJyYXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgbXVzdCBiZSBpbiB0aGUgZm9ybSBvZiBhIFVpbnQ4QXJyYXknKTtcbiAgICB9XG5cbiAgICB2YXIgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5Lmxlbmd0aCk7XG4gICAgY29weS5zZXQoYXJyYXkpO1xuICAgIHJldHVybiBjb3B5O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVjayBVaW50OEFycmF5IGVxdWFsaXR5XG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gZmlyc3QgYXJyYXlcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBzZWNvbmQgYXJyYXlcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGVxdWFsaXR5XG4gICAqL1xuICBlcXVhbHNVaW50OEFycmF5OiBmdW5jdGlvbiBlcXVhbHNVaW50OEFycmF5KGFycmF5MSwgYXJyYXkyKSB7XG4gICAgaWYgKCFfdXRpbDIuZGVmYXVsdC5pc1VpbnQ4QXJyYXkoYXJyYXkxKSB8fCAhX3V0aWwyLmRlZmF1bHQuaXNVaW50OEFycmF5KGFycmF5MikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YSBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgVWludDhBcnJheScpO1xuICAgIH1cblxuICAgIGlmIChhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheTFbaV0gIT09IGFycmF5MltpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGEgMTZiaXQgc3VtIG9mIGEgVWludDhBcnJheSBieSBhZGRpbmcgZWFjaCBjaGFyYWN0ZXJcbiAgICogY29kZXMgbW9kdWx1cyA2NTUzNVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IFVpbnQ4QXJyYXkgdG8gY3JlYXRlIGEgc3VtIG9mXG4gICAqIEByZXR1cm5zIHtJbnRlZ2VyfSBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHN1bSBvZiBhbGwgY2hhcmFjdGVyXG4gICAqIGNvZGVzICUgNjU1MzVcbiAgICovXG4gIGNhbGNfY2hlY2tzdW06IGZ1bmN0aW9uIGNhbGNfY2hlY2tzdW0odGV4dCkge1xuICAgIHZhciBjaGVja3N1bSA9IHtcbiAgICAgIHM6IDAsXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZChzYWRkKSB7XG4gICAgICAgIHRoaXMucyA9ICh0aGlzLnMgKyBzYWRkKSAlIDY1NTM2O1xuICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGVja3N1bS5hZGQodGV4dFtpXSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja3N1bS5zO1xuICB9LFxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgYSBkZWJ1ZyBtZXNzYWdlLiBEZWJ1Z1xuICAgKiBtZXNzYWdlcyBhcmUgb25seSBwcmludGVkIGlmXG4gICAqIEBsaW5rIG1vZHVsZTpjb25maWcvY29uZmlnLmRlYnVnIGlzIHNldCB0byB0cnVlLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZyBvZiB0aGUgZGVidWcgbWVzc2FnZVxuICAgKi9cbiAgcHJpbnRfZGVidWc6IGZ1bmN0aW9uIHByaW50X2RlYnVnKHN0cikge1xuICAgIGlmIChfY29uZmlnMi5kZWZhdWx0LmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZyhzdHIpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IGEgZGVidWcgbWVzc2FnZS4gRGVidWdcbiAgICogbWVzc2FnZXMgYXJlIG9ubHkgcHJpbnRlZCBpZlxuICAgKiBAbGluayBtb2R1bGU6Y29uZmlnL2NvbmZpZy5kZWJ1ZyBpcyBzZXQgdG8gdHJ1ZS5cbiAgICogRGlmZmVyZW50IHRoYW4gcHJpbnRfZGVidWcgYmVjYXVzZSB3aWxsIGNhbGwgVWludDhBcnJheV90b19oZXggaWZmIG5lY2Vzc2FyeS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBTdHJpbmcgb2YgdGhlIGRlYnVnIG1lc3NhZ2VcbiAgICovXG4gIHByaW50X2RlYnVnX2hleGFycmF5X2R1bXA6IGZ1bmN0aW9uIHByaW50X2RlYnVnX2hleGFycmF5X2R1bXAoc3RyLCBhcnJUb0hleCkge1xuICAgIGlmIChfY29uZmlnMi5kZWZhdWx0LmRlYnVnKSB7XG4gICAgICBzdHIgKz0gJzogJyArIF91dGlsMi5kZWZhdWx0LlVpbnQ4QXJyYXlfdG9faGV4KGFyclRvSGV4KTtcbiAgICAgIGNvbnNvbGUubG9nKHN0cik7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgYSBkZWJ1ZyBtZXNzYWdlLiBEZWJ1Z1xuICAgKiBtZXNzYWdlcyBhcmUgb25seSBwcmludGVkIGlmXG4gICAqIEBsaW5rIG1vZHVsZTpjb25maWcvY29uZmlnLmRlYnVnIGlzIHNldCB0byB0cnVlLlxuICAgKiBEaWZmZXJlbnQgdGhhbiBwcmludF9kZWJ1ZyBiZWNhdXNlIHdpbGwgY2FsbCBzdHJfdG9faGV4IGlmZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nIG9mIHRoZSBkZWJ1ZyBtZXNzYWdlXG4gICAqL1xuICBwcmludF9kZWJ1Z19oZXhzdHJfZHVtcDogZnVuY3Rpb24gcHJpbnRfZGVidWdfaGV4c3RyX2R1bXAoc3RyLCBzdHJUb0hleCkge1xuICAgIGlmIChfY29uZmlnMi5kZWZhdWx0LmRlYnVnKSB7XG4gICAgICBzdHIgKz0gX3V0aWwyLmRlZmF1bHQuc3RyX3RvX2hleChzdHJUb0hleCk7XG4gICAgICBjb25zb2xlLmxvZyhzdHIpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IGEgZGVidWcgZXJyb3IuIERlYnVnXG4gICAqIG1lc3NhZ2VzIGFyZSBvbmx5IHByaW50ZWQgaWZcbiAgICogQGxpbmsgbW9kdWxlOmNvbmZpZy9jb25maWcuZGVidWcgaXMgc2V0IHRvIHRydWUuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nIG9mIHRoZSBkZWJ1ZyBtZXNzYWdlXG4gICAqL1xuICBwcmludF9kZWJ1Z19lcnJvcjogZnVuY3Rpb24gcHJpbnRfZGVidWdfZXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoX2NvbmZpZzIuZGVmYXVsdC5kZWJ1Zykge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9LFxuXG4gIGdldExlZnROQml0czogZnVuY3Rpb24gZ2V0TGVmdE5CaXRzKGFycmF5LCBiaXRjb3VudCkge1xuICAgIHZhciByZXN0ID0gYml0Y291bnQgJSA4O1xuICAgIGlmIChyZXN0ID09PSAwKSB7XG4gICAgICByZXR1cm4gYXJyYXkuc3ViYXJyYXkoMCwgYml0Y291bnQgLyA4KTtcbiAgICB9XG4gICAgdmFyIGJ5dGVzID0gKGJpdGNvdW50IC0gcmVzdCkgLyA4ICsgMTtcbiAgICB2YXIgcmVzdWx0ID0gYXJyYXkuc3ViYXJyYXkoMCwgYnl0ZXMpO1xuICAgIHJldHVybiBfdXRpbDIuZGVmYXVsdC5zaGlmdFJpZ2h0KHJlc3VsdCwgOCAtIHJlc3QpOyAvLyArU3RyaW5nLmZyb21DaGFyQ29kZShzdHJpbmcuY2hhckNvZGVBdChieXRlcyAtMSkgPDwgKDgtcmVzdCkgJiAweEZGKTtcbiAgfSxcblxuICAvLyByZXR1cm5zIGJpdCBsZW5ndGggb2YgdGhlIGludGVnZXIgeFxuICBuYml0czogZnVuY3Rpb24gbmJpdHMoeCkge1xuICAgIHZhciByID0gMTtcbiAgICB2YXIgdCA9IHggPj4+IDE2O1xuICAgIGlmICh0ICE9PSAwKSB7XG4gICAgICB4ID0gdDtcbiAgICAgIHIgKz0gMTY7XG4gICAgfVxuICAgIHQgPSB4ID4+IDg7XG4gICAgaWYgKHQgIT09IDApIHtcbiAgICAgIHggPSB0O1xuICAgICAgciArPSA4O1xuICAgIH1cbiAgICB0ID0geCA+PiA0O1xuICAgIGlmICh0ICE9PSAwKSB7XG4gICAgICB4ID0gdDtcbiAgICAgIHIgKz0gNDtcbiAgICB9XG4gICAgdCA9IHggPj4gMjtcbiAgICBpZiAodCAhPT0gMCkge1xuICAgICAgeCA9IHQ7XG4gICAgICByICs9IDI7XG4gICAgfVxuICAgIHQgPSB4ID4+IDE7XG4gICAgaWYgKHQgIT09IDApIHtcbiAgICAgIHggPSB0O1xuICAgICAgciArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICAvKipcbiAgICogSWYgU1sxXSA9PSAwLCB0aGVuIGRvdWJsZShTKSA9PSAoU1syLi4xMjhdIHx8IDApO1xuICAgKiBvdGhlcndpc2UsIGRvdWJsZShTKSA9PSAoU1syLi4xMjhdIHx8IDApIHhvclxuICAgKiAoemVyb3MoMTIwKSB8fCAxMDAwMDExMSkuXG4gICAqXG4gICAqIEJvdGggT0NCIGFuZCBFQVggKHRocm91Z2ggQ01BQykgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNvbnN0YW50LXRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YVxuICAgKi9cbiAgZG91YmxlOiBmdW5jdGlvbiBkb3VibGUoZGF0YSkge1xuICAgIHZhciBkb3VibGUgPSBuZXcgVWludDhBcnJheShkYXRhLmxlbmd0aCk7XG4gICAgdmFyIGxhc3QgPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgIGRvdWJsZVtpXSA9IGRhdGFbaV0gPDwgMSBeIGRhdGFbaSArIDFdID4+IDc7XG4gICAgfVxuICAgIGRvdWJsZVtsYXN0XSA9IGRhdGFbbGFzdF0gPDwgMSBeIChkYXRhWzBdID4+IDcpICogMHg4NztcbiAgICByZXR1cm4gZG91YmxlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTaGlmdCBhIFVpbnQ4QXJyYXkgdG8gdGhlIHJpZ2h0IGJ5IG4gYml0c1xuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaGlmdFxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGJpdHMgQW1vdW50IG9mIGJpdHMgdG8gc2hpZnQgKE1VU1QgYmUgc21hbGxlclxuICAgKiB0aGFuIDgpXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdGluZyBhcnJheS5cbiAgICovXG4gIHNoaWZ0UmlnaHQ6IGZ1bmN0aW9uIHNoaWZ0UmlnaHQoYXJyYXksIGJpdHMpIHtcbiAgICBpZiAoYml0cykge1xuICAgICAgZm9yICh2YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGFycmF5W2ldID4+PSBiaXRzO1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBhcnJheVtpXSB8PSBhcnJheVtpIC0gMV0gPDwgOCAtIGJpdHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgbmF0aXZlIFdlYiBDcnlwdG9ncmFwaHkgYXBpLCBvbmx5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHNwZWMuXG4gICAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgdG8gdXNlIHRoZSBhcGkgd2hlbiBhdmFpbGFibGUuIEJ1dCBpdCBjYW5cbiAgICogYmUgZGVhY3RpdmF0ZWQgd2l0aCBjb25maWcudXNlX25hdGl2ZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAgIFRoZSBTdWJ0bGVDcnlwdG8gYXBpIG9yICd1bmRlZmluZWQnXG4gICAqL1xuICBnZXRXZWJDcnlwdG86IGZ1bmN0aW9uIGdldFdlYkNyeXB0bygpIHtcbiAgICBpZiAoIV9jb25maWcyLmRlZmF1bHQudXNlX25hdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY3J5cHRvICYmIHdpbmRvdy5jcnlwdG8uc3VidGxlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgbmF0aXZlIFdlYiBDcnlwdG9ncmFwaHkgYXBpIGZvciBhbGwgYnJvd3NlcnMsIGluY2x1ZGluZyBsZWdhY3lcbiAgICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzcGVjIGUuZyBJRTExIGFuZCBTYWZhcmkgOC85LiBUaGUgZGVmYXVsdFxuICAgKiBjb25maWd1cmF0aW9uIGlzIHRvIHVzZSB0aGUgYXBpIHdoZW4gYXZhaWxhYmxlLiBCdXQgaXQgY2FuIGJlIGRlYWN0aXZhdGVkXG4gICAqIHdpdGggY29uZmlnLnVzZV9uYXRpdmVcbiAgICogQHJldHVybnMge09iamVjdH0gICBUaGUgU3VidGxlQ3J5cHRvIGFwaSBvciAndW5kZWZpbmVkJ1xuICAgKi9cbiAgZ2V0V2ViQ3J5cHRvQWxsOiBmdW5jdGlvbiBnZXRXZWJDcnlwdG9BbGwoKSB7XG4gICAgaWYgKCFfY29uZmlnMi5kZWZhdWx0LnVzZV9uYXRpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3aW5kb3cuY3J5cHRvKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLnN1YnRsZSB8fCB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTtcbiAgICAgIH1cbiAgICAgIGlmICh3aW5kb3cubXNDcnlwdG8pIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5tc0NyeXB0by5zdWJ0bGU7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRlY3QgTm9kZS5qcyBydW50aW1lLlxuICAgKi9cbiAgZGV0ZWN0Tm9kZTogZnVuY3Rpb24gZGV0ZWN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBuYXRpdmUgTm9kZS5qcyBjcnlwdG8gYXBpLiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIHRvIHVzZVxuICAgKiB0aGUgYXBpIHdoZW4gYXZhaWxhYmxlLiBCdXQgaXQgY2FuIGFsc28gYmUgZGVhY3RpdmF0ZWQgd2l0aCBjb25maWcudXNlX25hdGl2ZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAgIFRoZSBjcnlwdG8gbW9kdWxlIG9yICd1bmRlZmluZWQnXG4gICAqL1xuICBnZXROb2RlQ3J5cHRvOiBmdW5jdGlvbiBnZXROb2RlQ3J5cHRvKCkge1xuICAgIGlmICghX3V0aWwyLmRlZmF1bHQuZGV0ZWN0Tm9kZSgpIHx8ICFfY29uZmlnMi5kZWZhdWx0LnVzZV9uYXRpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gX2RlcmVxXygnY3J5cHRvJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBuYXRpdmUgTm9kZS5qcyBCdWZmZXIgY29uc3RydWN0b3IuIFRoaXMgc2hvdWxkIGJlIHVzZWQgc2luY2VcbiAgICogQnVmZmVyIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgYnJvd3NlcmlmeS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSAgIFRoZSBCdWZmZXIgY29uc3RydWN0b3Igb3IgJ3VuZGVmaW5lZCdcbiAgICovXG4gIGdldE5vZGVCdWZmZXI6IGZ1bmN0aW9uIGdldE5vZGVCdWZmZXIoKSB7XG4gICAgaWYgKCFfdXRpbDIuZGVmYXVsdC5kZXRlY3ROb2RlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIFwiaGFja1wiIGFsbG93cyB1cyB0byBhY2Nlc3MgdGhlIG5hdGl2ZSBub2RlIGJ1ZmZlciBtb2R1bGUuXG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBnZXRzIHJlcGxhY2VkIHdpdGggdGhlIGJyb3dzZXJpZmllZCB2ZXJzaW9uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uY2F0LCBpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlXG4gICAgcmV0dXJuIF9kZXJlcV8oJ2J1ZicgKyAnZmVyJykuQnVmZmVyO1xuICB9LFxuXG4gIGdldE5vZGVabGliOiBmdW5jdGlvbiBnZXROb2RlWmxpYigpIHtcbiAgICBpZiAoIV91dGlsMi5kZWZhdWx0LmRldGVjdE5vZGUoKSB8fCAhX2NvbmZpZzIuZGVmYXVsdC51c2VfbmF0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIF9kZXJlcV8oJ3psaWInKTtcbiAgfSxcblxuICBpc0VtYWlsQWRkcmVzczogZnVuY3Rpb24gaXNFbWFpbEFkZHJlc3MoZGF0YSkge1xuICAgIGlmICghX3V0aWwyLmRlZmF1bHQuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHJlID0gL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKSsoW2EtekEtWl17Mix9fHhuLS1bYS16QS1aXFwtMC05XSspKSkkLztcbiAgICByZXR1cm4gcmUudGVzdChkYXRhKTtcbiAgfSxcblxuICAvKipcbiAgICogRm9ybWF0IHVzZXIgaWQgZm9yIGludGVybmFsIHVzZS5cbiAgICovXG4gIGZvcm1hdFVzZXJJZDogZnVuY3Rpb24gZm9ybWF0VXNlcklkKGlkKSB7XG4gICAgLy8gbmFtZSBhbmQgZW1haWwgYWRkcmVzcyBjYW4gYmUgZW1wdHkgYnV0IG11c3QgYmUgb2YgdGhlIGNvcnJlY3QgdHlwZVxuICAgIGlmIChpZC5uYW1lICYmICFfdXRpbDIuZGVmYXVsdC5pc1N0cmluZyhpZC5uYW1lKSB8fCBpZC5lbWFpbCAmJiAhX3V0aWwyLmRlZmF1bHQuaXNFbWFpbEFkZHJlc3MoaWQuZW1haWwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBpZCBmb3JtYXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfYWRkcmVzc1JmYzIuZGVmYXVsdC5BZGRyZXNzKGlkLm5hbWUsIGlkLmVtYWlsLCBpZC5jb21tZW50KS5mb3JtYXQoKTtcbiAgfSxcblxuICAvKipcbiAgICogUGFyc2UgdXNlciBpZC5cbiAgICovXG4gIHBhcnNlVXNlcklkOiBmdW5jdGlvbiBwYXJzZVVzZXJJZCh1c2VyaWQpIHtcbiAgICBpZiAodXNlcmlkLmxlbmd0aCA+IF9jb25maWcyLmRlZmF1bHQubWF4X3VzZXJpZF9sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBpZCBzdHJpbmcgaXMgdG9vIGxvbmcnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHZhciBfcmZjMjgyMiRwYXJzZSA9IF9hZGRyZXNzUmZjMi5kZWZhdWx0LnBhcnNlKHVzZXJpZCksXG4gICAgICAgICAgX3JmYzI4MjIkcGFyc2UyID0gKDAsIF9zbGljZWRUb0FycmF5My5kZWZhdWx0KShfcmZjMjgyMiRwYXJzZSwgMSksXG4gICAgICAgICAgX3JmYzI4MjIkcGFyc2UyJCA9IF9yZmMyODIyJHBhcnNlMlswXSxcbiAgICAgICAgICBuYW1lID0gX3JmYzI4MjIkcGFyc2UyJC5waHJhc2UsXG4gICAgICAgICAgZW1haWwgPSBfcmZjMjgyMiRwYXJzZTIkLmFkZHJlc3MsXG4gICAgICAgICAgY29tbWVudCA9IF9yZmMyODIyJHBhcnNlMiQuY29tbWVudDtcblxuICAgICAgcmV0dXJuIHsgbmFtZTogbmFtZSwgZW1haWw6IGVtYWlsLCBjb21tZW50OiBjb21tZW50LnJlcGxhY2UoL15cXCh8XFwpJC9nLCAnJykgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBpZCBmb3JtYXQnKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgdG8gXFxyXFxuXG4gICAqL1xuICBjYW5vbmljYWxpemVFT0w6IGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZUVPTCh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpLnJlcGxhY2UoL1xcci9nLCBcIlxcblwiKS5yZXBsYWNlKC9cXG4vZywgXCJcXHJcXG5cIik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgbGluZSBlbmRpbmdzIGZyb20gY2Fub25pY2FsaXplZCBcXHJcXG4gdG8gbmF0aXZlIFxcblxuICAgKi9cbiAgbmF0aXZlRU9MOiBmdW5jdGlvbiBuYXRpdmVFT0wodGV4dCkge1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlcyBhbmQgdGFicyBmcm9tIGVhY2ggbGluZVxuICAgKi9cbiAgcmVtb3ZlVHJhaWxpbmdTcGFjZXM6IGZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU3BhY2VzKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bIFxcdF0rJC9tZywgXCJcIik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVuY29kZSBpbnB1dCBidWZmZXIgdXNpbmcgWi1CYXNlMzIgZW5jb2RpbmcuXG4gICAqIFNlZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYxODkjc2VjdGlvbi01LjEuNlxuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGEgVGhlIGJpbmFyeSBkYXRhIHRvIGVuY29kZVxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBCaW5hcnkgZGF0YSBlbmNvZGVkIHVzaW5nIFotQmFzZTMyXG4gICAqL1xuICBlbmNvZGVaQmFzZTMyOiBmdW5jdGlvbiBlbmNvZGVaQmFzZTMyKGRhdGEpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICB2YXIgQUxQSEFCRVQgPSBcInlibmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5XCI7XG4gICAgdmFyIFNISUZUID0gNTtcbiAgICB2YXIgTUFTSyA9IDMxO1xuICAgIHZhciBidWZmZXIgPSBkYXRhWzBdO1xuICAgIHZhciBpbmRleCA9IDE7XG4gICAgdmFyIGJpdHNMZWZ0ID0gODtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgd2hpbGUgKGJpdHNMZWZ0ID4gMCB8fCBpbmRleCA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICBpZiAoYml0c0xlZnQgPCBTSElGVCkge1xuICAgICAgICBpZiAoaW5kZXggPCBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGJ1ZmZlciA8PD0gODtcbiAgICAgICAgICBidWZmZXIgfD0gZGF0YVtpbmRleCsrXSAmIDB4ZmY7XG4gICAgICAgICAgYml0c0xlZnQgKz0gODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcGFkID0gU0hJRlQgLSBiaXRzTGVmdDtcbiAgICAgICAgICBidWZmZXIgPDw9IHBhZDtcbiAgICAgICAgICBiaXRzTGVmdCArPSBwYWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJpdHNMZWZ0IC09IFNISUZUO1xuICAgICAgcmVzdWx0ICs9IEFMUEhBQkVUW01BU0sgJiBidWZmZXIgPj4gYml0c0xlZnRdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG59LHtcIi4vY29uZmlnXCI6MzI1LFwiLi9lbmNvZGluZy9iYXNlNjRcIjozNTgsXCIuL3V0aWxcIjozOTgsXCJhZGRyZXNzLXJmYzI4MjJcIjoxLFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC92YWx1ZXNcIjozMSxcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5XCI6NDAsXCJjcnlwdG9cIjpcImNyeXB0b1wiLFwiemxpYlwiOlwiemxpYlwifV0sMzk5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zbGljZWRUb0FycmF5MiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5Jyk7XG5cbnZhciBfc2xpY2VkVG9BcnJheTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZWRUb0FycmF5Mik7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4vdXRpbCcpO1xuXG52YXIgX3V0aWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXRpbCk7XG5cbnZhciBfY3J5cHRvID0gX2RlcmVxXygnLi9jcnlwdG8nKTtcblxudmFyIF9jcnlwdG8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3J5cHRvKTtcblxudmFyIF9rZXkgPSBfZGVyZXFfKCcuL2tleScpO1xuXG52YXIga2V5TW9kID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2tleSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmouZGVmYXVsdCA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgV0tEIGNsaWVudFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdLRCgpIHtcbiAgdGhpcy5fZmV0Y2ggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5mZXRjaCA6IF9kZXJlcV8oJ25vZGUtZmV0Y2gnKTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggZm9yIGEgcHVibGljIGtleSB1c2luZyBXZWIgS2V5IERpcmVjdG9yeSBwcm90b2NvbC5cbiAqIEBwYXJhbSAgIHtTdHJpbmd9ICAgb3B0aW9ucy5lbWFpbCAgICAgICAgIFVzZXIncyBlbWFpbC5cbiAqIEBwYXJhbSAgIHtCb29sZWFufSAgb3B0aW9ucy5yYXdCeXRlcyAgICAgIFJldHVybnMgVWludDhBcnJheSBpbnN0ZWFkIG9mIHBhcnNlZCBrZXkuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxVaW50OEFycmF5fFxuICogICAgICAgICAgIHtrZXlzOiBBcnJheTxtb2R1bGU6a2V5LktleT4sXG4gKiAgICAgICAgICAgIGVycjogKEFycmF5PEVycm9yPnxudWxsKX0+fSAgICAgVGhlIHB1YmxpYyBrZXkuXG4gKiBAYXN5bmNcbiAqL1xuLy8gT3BlblBHUC5qcyAtIEFuIE9wZW5QR1AgaW1wbGVtZW50YXRpb24gaW4gamF2YXNjcmlwdFxuLy8gQ29weXJpZ2h0IChDKSAyMDE4IFdpa3RvciBLd2FwaXNpZXdpY3pcbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4vLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbi8vIHZlcnNpb24gMy4wIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4vLyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbi8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQVxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgY2xpZW50IGZvciB0aGUgV2ViIEtleSBEaXJlY3RvcnkgKHdrZCkgcHJvdG9jb2xcbiAqIGluIG9yZGVyIHRvIGxvb2t1cCBrZXlzIG9uIGRlc2lnbmF0ZWQgc2VydmVycy5cbiAqIFNlZTogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvZHJhZnQta29jaC1vcGVucGdwLXdlYmtleS1zZXJ2aWNlL1xuICogQG1vZHVsZSB3a2RcbiAqL1xuXG5XS0QucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBmZXRjaCA9IHRoaXMuX2ZldGNoO1xuXG4gIGlmICghb3B0aW9ucy5lbWFpbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhbiBlbWFpbCBwYXJhbWV0ZXIhJyk7XG4gIH1cblxuICBpZiAoIV91dGlsMi5kZWZhdWx0LmlzRW1haWxBZGRyZXNzKG9wdGlvbnMuZW1haWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGUtbWFpbCBhZGRyZXNzLicpO1xuICB9XG5cbiAgdmFyIF8kZXhlYyA9IC8oLiopQCguKikvLmV4ZWMob3B0aW9ucy5lbWFpbCksXG4gICAgICBfJGV4ZWMyID0gKDAsIF9zbGljZWRUb0FycmF5My5kZWZhdWx0KShfJGV4ZWMsIDMpLFxuICAgICAgbG9jYWxQYXJ0ID0gXyRleGVjMlsxXSxcbiAgICAgIGRvbWFpbiA9IF8kZXhlYzJbMl07XG5cbiAgdmFyIGxvY2FsRW5jb2RlZCA9IF91dGlsMi5kZWZhdWx0LmVuY29kZVpCYXNlMzIoX2NyeXB0bzIuZGVmYXVsdC5oYXNoLnNoYTEoX3V0aWwyLmRlZmF1bHQuc3RyX3RvX1VpbnQ4QXJyYXkobG9jYWxQYXJ0LnRvTG93ZXJDYXNlKCkpKSk7XG5cbiAgdmFyIHVybCA9ICdodHRwczovLycgKyBkb21haW4gKyAnLy53ZWxsLWtub3duL29wZW5wZ3BrZXkvaHUvJyArIGxvY2FsRW5jb2RlZDtcblxuICByZXR1cm4gZmV0Y2godXJsKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgfVxuICB9KS50aGVuKGZ1bmN0aW9uIChwdWJsaWNLZXkpIHtcbiAgICBpZiAocHVibGljS2V5KSB7XG4gICAgICB2YXIgcmF3Qnl0ZXMgPSBuZXcgVWludDhBcnJheShwdWJsaWNLZXkpO1xuICAgICAgaWYgKG9wdGlvbnMucmF3Qnl0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHJhd0J5dGVzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleU1vZC5yZWFkKHJhd0J5dGVzKTtcbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gV0tEO1xuXG59LHtcIi4vY3J5cHRvXCI6MzQwLFwiLi9rZXlcIjozNjIsXCIuL3V0aWxcIjozOTgsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiOjQwLFwibm9kZS1mZXRjaFwiOlwibm9kZS1mZXRjaFwifV0sNDAwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9wcm9taXNlID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX3JlZ2VuZXJhdG9yID0gX2RlcmVxXygnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpO1xuXG52YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZ2VuZXJhdG9yKTtcblxudmFyIF9hc3luY1RvR2VuZXJhdG9yMiA9IF9kZXJlcV8oJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yJyk7XG5cbnZhciBfYXN5bmNUb0dlbmVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1RvR2VuZXJhdG9yMik7XG5cbnZhciBfdXRpbCA9IF9kZXJlcV8oJy4uL3V0aWwuanMnKTtcblxudmFyIF91dGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0aWwpO1xuXG52YXIgX2NyeXB0byA9IF9kZXJlcV8oJy4uL2NyeXB0bycpO1xuXG52YXIgX2NyeXB0bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcnlwdG8pO1xuXG52YXIgX3BhY2tldCA9IF9kZXJlcV8oJy4uL3BhY2tldCcpO1xuXG52YXIgX3BhY2tldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYWNrZXQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEluaXRpYWxpemVzIGEgbmV3IHByb3h5IGFuZCBsb2FkcyB0aGUgd2ViIHdvcmtlclxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGggICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgd29ya2VyIG9yICdvcGVucGdwLndvcmtlci5qcycgYnkgZGVmYXVsdFxuICogQHBhcmFtIHtOdW1iZXJ9IG4gICAgICAgICAgICAgICBudW1iZXIgb2Ygd29ya2VycyB0byBpbml0aWFsaXplIGlmIHBhdGggZ2l2ZW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgICAgICAgICAgY29uZmlnIFRoZSB3b3JrZXIgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSB3b3JrZXIgICBhbHRlcm5hdGl2ZSB0byBwYXRoIHBhcmFtZXRlcjogd2ViIHdvcmtlciBpbml0aWFsaXplZCB3aXRoICdvcGVucGdwLndvcmtlci5qcydcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBBc3luY1Byb3h5KCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYkcGF0aCA9IF9yZWYucGF0aCxcbiAgICAgIHBhdGggPSBfcmVmJHBhdGggPT09IHVuZGVmaW5lZCA/ICdvcGVucGdwLndvcmtlci5qcycgOiBfcmVmJHBhdGgsXG4gICAgICBfcmVmJG4gPSBfcmVmLm4sXG4gICAgICBuID0gX3JlZiRuID09PSB1bmRlZmluZWQgPyAxIDogX3JlZiRuLFxuICAgICAgX3JlZiR3b3JrZXJzID0gX3JlZi53b3JrZXJzLFxuICAgICAgd29ya2VycyA9IF9yZWYkd29ya2VycyA9PT0gdW5kZWZpbmVkID8gW10gOiBfcmVmJHdvcmtlcnMsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZztcblxuICAvKipcbiAgICogTWVzc2FnZSBoYW5kbGluZ1xuICAgKi9cbiAgdmFyIGhhbmRsZU1lc3NhZ2UgPSBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKHdvcmtlcklkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG1zZyA9IGV2ZW50LmRhdGE7XG4gICAgICBzd2l0Y2ggKG1zZy5ldmVudCkge1xuICAgICAgICBjYXNlICdtZXRob2QtcmV0dXJuJzpcbiAgICAgICAgICBpZiAobXNnLmVycikge1xuICAgICAgICAgICAgLy8gZmFpbFxuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cuZXJyKTtcbiAgICAgICAgICAgIC8vIGFkZCB3b3JrZXIgc3RhY2tcbiAgICAgICAgICAgIGVyci53b3JrZXJTdGFjayA9IG1zZy5zdGFjaztcbiAgICAgICAgICAgIF90aGlzLnRhc2tzW21zZy5pZF0ucmVqZWN0KGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgICAgICAgIF90aGlzLnRhc2tzW21zZy5pZF0ucmVzb2x2ZShtc2cuZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBfdGhpcy50YXNrc1ttc2cuaWRdO1xuICAgICAgICAgIF90aGlzLndvcmtlcnNbd29ya2VySWRdLnJlcXVlc3RzLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlcXVlc3Qtc2VlZCc6XG4gICAgICAgICAgX3RoaXMuc2VlZFJhbmRvbSh3b3JrZXJJZCwgbXNnLmFtb3VudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIFdvcmtlciBFdmVudC4nKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIGlmICh3b3JrZXJzLmxlbmd0aCkge1xuICAgIHRoaXMud29ya2VycyA9IHdvcmtlcnM7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53b3JrZXJzID0gW107XG4gICAgd2hpbGUgKHRoaXMud29ya2Vycy5sZW5ndGggPCBuKSB7XG4gICAgICB0aGlzLndvcmtlcnMucHVzaChuZXcgV29ya2VyKHBhdGgpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgd29ya2VySWQgPSAwO1xuICB0aGlzLndvcmtlcnMuZm9yRWFjaChmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgd29ya2VyLnJlcXVlc3RzID0gMDtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gaGFuZGxlTWVzc2FnZSh3b3JrZXJJZCsrKTtcbiAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvciBpbiBvcGVucGdwIHdvcmtlcjogJyArIGUubWVzc2FnZSArICcgKCcgKyBlLmZpbGVuYW1lICsgJzonICsgZS5saW5lbm8gKyAnKScpO1xuICAgIH07XG5cbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBldmVudDogJ2NvbmZpZ3VyZScsIGNvbmZpZzogY29uZmlnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ2Fubm90IHJlbHkgb24gdGFzayBvcmRlciBiZWluZyBtYWludGFpbmVkLCB1c2Ugb2JqZWN0IGtleWVkIGJ5IHJlcXVlc3QgSUQgdG8gdHJhY2sgdGFza3NcbiAgdGhpcy50YXNrcyA9IHt9O1xuICB0aGlzLmN1cnJlbnRJRCA9IDA7XG59XG5cbi8qKlxuICogR2V0IG5ldyByZXF1ZXN0IElEXG4gKiBAcmV0dXJucyB7aW50ZWdlcn0gICAgICAgICAgTmV3IHVuaXF1ZSByZXF1ZXN0IElEXG4qL1xuLy8gR1BHNEJyb3dzZXJzIC0gQW4gT3BlblBHUCBpbXBsZW1lbnRhdGlvbiBpbiBqYXZhc2NyaXB0XG4vLyBDb3B5cmlnaHQgKEMpIDIwMTEgUmVjdXJpdHkgTGFicyBHbWJIXG4vL1xuLy8gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuLy8gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4vLyB2ZXJzaW9uIDMuMCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuLy8gTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4vLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0FcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgbWFpbnRhaW5pbmcgYnJvd3NlciB3b3JrZXJzXG4gKiBAc2VlIG1vZHVsZTpvcGVucGdwLmluaXRXb3JrZXJcbiAqIEBzZWUgbW9kdWxlOm9wZW5wZ3AuZ2V0V29ya2VyXG4gKiBAc2VlIG1vZHVsZTpvcGVucGdwLmRlc3Ryb3lXb3JrZXJcbiAqIEBzZWUgbW9kdWxlOndvcmtlci93b3JrZXJcbiAqIEByZXF1aXJlcyB1dGlsXG4gKiBAcmVxdWlyZXMgY3J5cHRvXG4gKiBAcmVxdWlyZXMgcGFja2V0XG4gKiBAbW9kdWxlIHdvcmtlci9hc3luY19wcm94eVxuICovXG5cbkFzeW5jUHJveHkucHJvdG90eXBlLmdldElEID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jdXJyZW50SUQrKztcbn07XG5cbi8qKlxuICogU2VuZCBtZXNzYWdlIHRvIHdvcmtlciB3aXRoIHJhbmRvbSBkYXRhXG4gKiBAcGFyYW0gIHtJbnRlZ2VyfSBzaXplIE51bWJlciBvZiBieXRlcyB0byBzZW5kXG4gKiBAYXN5bmNcbiAqL1xuQXN5bmNQcm94eS5wcm90b3R5cGUuc2VlZFJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMy5kZWZhdWx0KSggLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUod29ya2VySWQsIHNpemUpIHtcbiAgICB2YXIgYnVmO1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3IyLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcnlwdG8yLmRlZmF1bHQucmFuZG9tLmdldFJhbmRvbUJ5dGVzKHNpemUpO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgYnVmID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgdGhpcy53b3JrZXJzW3dvcmtlcklkXS5wb3N0TWVzc2FnZSh7IGV2ZW50OiAnc2VlZC1yYW5kb20nLCBidWY6IGJ1ZiB9LCBfdXRpbDIuZGVmYXVsdC5nZXRUcmFuc2ZlcmFibGVzKGJ1ZikpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKF94MiwgX3gzKSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbi8qKlxuICogVGVybWluYXRlcyB0aGUgd29ya2Vyc1xuICovXG5Bc3luY1Byb3h5LnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMud29ya2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBHZW5lcmljIHByb3h5IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgY29tbWFuZHMgZnJvbSB0aGUgcHVibGljIGFwaS5cbiAqIEBwYXJhbSAge1N0cmluZ30gbWV0aG9kICAgIHRoZSBwdWJsaWMgYXBpIGZ1bmN0aW9uIHRvIGJlIGRlbGVnYXRlZCB0byB0aGUgd29ya2VyIHRocmVhZFxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zICAgdGhlIGFwaSBmdW5jdGlvbidzIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSAgICAgICAgICBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIGFwaSBmdW5jdGlvbnMgZm9yIHRoZWlyIHJldHVybiB0eXBlc1xuICogQGFzeW5jXG4gKi9cbkFzeW5jUHJveHkucHJvdG90eXBlLmRlbGVnYXRlID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICB2YXIgaWQgPSB0aGlzLmdldElEKCk7XG4gIHZhciByZXF1ZXN0cyA9IHRoaXMud29ya2Vycy5tYXAoZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHJldHVybiB3b3JrZXIucmVxdWVzdHM7XG4gIH0pO1xuICB2YXIgbWluUmVxdWVzdHMgPSBNYXRoLm1pbihyZXF1ZXN0cyk7XG4gIHZhciB3b3JrZXJJZCA9IDA7XG4gIGZvciAoOyB3b3JrZXJJZCA8IHRoaXMud29ya2Vycy5sZW5ndGg7IHdvcmtlcklkKyspIHtcbiAgICBpZiAodGhpcy53b3JrZXJzW3dvcmtlcklkXS5yZXF1ZXN0cyA9PT0gbWluUmVxdWVzdHMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKF9yZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBjbG9uZSBwYWNrZXRzIChmb3Igd2ViIHdvcmtlciBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3JpdGhtKVxuICAgIF90aGlzMi53b3JrZXJzW3dvcmtlcklkXS5wb3N0TWVzc2FnZSh7IGlkOiBpZCwgZXZlbnQ6IG1ldGhvZCwgb3B0aW9uczogX3BhY2tldDIuZGVmYXVsdC5jbG9uZS5jbG9uZVBhY2tldHMob3B0aW9ucykgfSwgX3V0aWwyLmRlZmF1bHQuZ2V0VHJhbnNmZXJhYmxlcyhvcHRpb25zKSk7XG4gICAgX3RoaXMyLndvcmtlcnNbd29ya2VySWRdLnJlcXVlc3RzKys7XG5cbiAgICAvLyByZW1lbWJlciB0byBoYW5kbGUgcGFyc2luZyBjbG9uZWQgcGFja2V0cyBmcm9tIHdvcmtlclxuICAgIF90aGlzMi50YXNrc1tpZF0gPSB7IHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoZGF0YSkge1xuICAgICAgICByZXR1cm4gX3Jlc29sdmUoX3BhY2tldDIuZGVmYXVsdC5jbG9uZS5wYXJzZUNsb25lZFBhY2tldHMoZGF0YSwgbWV0aG9kKSk7XG4gICAgICB9LCByZWplY3Q6IHJlamVjdCB9O1xuICB9KTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEFzeW5jUHJveHk7XG5cbn0se1wiLi4vY3J5cHRvXCI6MzQwLFwiLi4vcGFja2V0XCI6MzcxLFwiLi4vdXRpbC5qc1wiOjM5OCxcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlXCI6MzIsXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiOjM1LFwiYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvclwiOjQyfV19LHt9LFszNjFdKSgzNjEpXG59KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL29wZW5wZ3AvZGlzdC9vcGVucGdwLmpzXG4vLyBtb2R1bGUgaWQgPSAxNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n");
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!\n * Vue.js v2.5.16\n * (c) 2014-2018 Evan You\n * Released under the MIT License.\n */\n\n\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// these helpers produces better vm code in JS engines due to their\n// explicitness and function inlining\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value e.g. [object Object]\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : typeof val === 'object'\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert a input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if a attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether the object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it... e.g.\n * PhantomJS 1.x. Technically we don't need this anymore since native bind is\n * now more performant in most browsers, but removing it would be breaking for\n * code that was able to run in PhantomJS 1.x, so this must be kept for\n * backwards compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/**\n * Return same value\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a static keys string from compiler modules.\n */\nfunction genStaticKeys (modules) {\n return modules.reduce(function (keys, m) {\n return keys.concat(m.staticKeys || [])\n }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured'\n];\n\n/* */\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"development\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"development\" !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n})\n\n/* */\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = /[^\\w.$]/;\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = (function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (true) {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {};\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// the current target watcher being evaluated.\n// this is globally unique because there could be only one\n// watcher being evaluated at any time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (_target) {\n if (Dep.target) { targetStack.push(Dep.target); }\n Dep.target = _target;\n}\n\nfunction popTarget () {\n Dep.target = targetStack.pop();\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n vnode.children,\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n var augment = hasProto\n ? protoAugment\n : copyAugment;\n augment(value, arrayMethods, arrayKeys);\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through each property and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment an target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src, keys) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment an target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n if (!getter && arguments.length === 2) {\n val = obj[key];\n }\n var setter = property && property.set;\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (\"development\" !== 'production' && customSetter) {\n customSetter();\n }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (\"development\" !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n \"development\" !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (\"development\" !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n \"development\" !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (true) {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n var keys = Object.keys(from);\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n \"development\" !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n return childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n \"development\" !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (true) {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && \"development\" !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'can only contain alphanumeric characters and the hyphen, ' +\n 'and must start with a letter.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (true) {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (true) {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (true) {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def = dirs[key];\n if (typeof def === 'function') {\n dirs[key] = { bind: def, update: def };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (true) {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n var extendsFrom = child.extends;\n if (extendsFrom) {\n parent = mergeOptions(parent, extendsFrom, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (\"development\" !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n true\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (\"development\" !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n if (!valid) {\n warn(\n \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', ')) +\n \", got \" + (toRawType(value)) + \".\",\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n logError(e, null, 'config.errorHandler');\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (true) {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n/* globals MessageChannel */\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using both microtasks and (macro) tasks.\n// In < 2.4 we used microtasks everywhere, but there are some scenarios where\n// microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690) or even between bubbling of the same\n// event (#6566). However, using (macro) tasks everywhere also has subtle problems\n// when state is changed right before repaint (e.g. #6813, out-in transitions).\n// Here we use microtask by default, but expose a way to force (macro) task when\n// needed (e.g. in event handlers attached by v-on).\nvar microTimerFunc;\nvar macroTimerFunc;\nvar useMacroTask = false;\n\n// Determine (macro) task defer implementation.\n// Technically setImmediate should be the ideal choice, but it's only available\n// in IE. The only polyfill that consistently queues the callback after all DOM\n// events triggered in the same loop is by using MessageChannel.\n/* istanbul ignore if */\nif (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n macroTimerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else if (typeof MessageChannel !== 'undefined' && (\n isNative(MessageChannel) ||\n // PhantomJS\n MessageChannel.toString() === '[object MessageChannelConstructor]'\n)) {\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = flushCallbacks;\n macroTimerFunc = function () {\n port.postMessage(1);\n };\n} else {\n /* istanbul ignore next */\n macroTimerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\n// Determine microtask defer implementation.\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n microTimerFunc = function () {\n p.then(flushCallbacks);\n // in problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n} else {\n // fallback to macro\n microTimerFunc = macroTimerFunc;\n}\n\n/**\n * Wrap a function so that if any code inside triggers state change,\n * the changes are queued using a (macro) task instead of a microtask.\n */\nfunction withMacroTask (fn) {\n return fn._withTask || (fn._withTask = function () {\n useMacroTask = true;\n var res = fn.apply(null, arguments);\n useMacroTask = false;\n return res\n })\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n if (useMacroTask) {\n macroTimerFunc();\n } else {\n microTimerFunc();\n }\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\nvar mark;\nvar measure;\n\nif (true) {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n perf.clearMeasures(name);\n };\n }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (true) {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';\n if (!has && !isAllowed) {\n warnNonPresent(target, key);\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n warnNonPresent(target, key);\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n cloned[i].apply(null, arguments$1);\n }\n } else {\n // return handler return value for single handlers\n return fns.apply(null, arguments)\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n vm\n) {\n var name, def, cur, old, event;\n for (name in on) {\n def = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n /* istanbul ignore if */\n if (isUndef(cur)) {\n \"development\" !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur);\n }\n add(event.name, cur, event.once, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (true) {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor,\n context\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (isDef(factory.contexts)) {\n // already pending\n factory.contexts.push(context);\n } else {\n var contexts = factory.contexts = [context];\n var sync = true;\n\n var forceRender = function () {\n for (var i = 0, l = contexts.length; i < l; i++) {\n contexts[i].$forceUpdate();\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender();\n }\n });\n\n var reject = once(function (reason) {\n \"development\" !== 'production' && warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender();\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (typeof res.then === 'function') {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isDef(res.component) && typeof res.component.then === 'function') {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n setTimeout(function () {\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender();\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n setTimeout(function () {\n if (isUndef(factory.resolved)) {\n reject(\n true\n ? (\"timeout (\" + (res.timeout) + \"ms)\")\n : null\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn, once) {\n if (once) {\n target.$once(event, fn);\n } else {\n target.$on(event, fn);\n }\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var this$1 = this;\n\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n this$1.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var this$1 = this;\n\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n this$1.$off(event[i], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n if (fn) {\n // specific handler\n var cb;\n var i$1 = cbs.length;\n while (i$1--) {\n cb = cbs[i$1];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i$1, 1);\n break\n }\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (true) {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n for (var i = 0, l = cbs.length; i < l; i++) {\n try {\n cbs[i].apply(vm, args);\n } catch (e) {\n handleError(e, vm, (\"event handler for \\\"\" + event + \"\\\"\"));\n }\n }\n }\n return vm\n };\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n var slots = {};\n if (!children) {\n return slots\n }\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n (slots.default || (slots.default = [])).push(child);\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res\n) {\n res = res || {};\n for (var i = 0; i < fns.length; i++) {\n if (Array.isArray(fns[i])) {\n resolveScopedSlots(fns[i], res);\n } else {\n res[fns[i].key] = fns[i].fn;\n }\n }\n return res\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n if (vm._isMounted) {\n callHook(vm, 'beforeUpdate');\n }\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(\n vm.$el, vnode, hydrating, false /* removeOnly */,\n vm.$options._parentElm,\n vm.$options._refElm\n );\n // no need for the ref nodes after initial patch\n // this prevents keeping a detached DOM tree in memory (#5851)\n vm.$options._parentElm = vm.$options._refElm = null;\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n activeInstance = prevActiveInstance;\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction mountComponent (\n vm,\n el,\n hydrating\n) {\n vm.$el = el;\n if (!vm.$options.render) {\n vm.$options.render = createEmptyVNode;\n if (true) {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n callHook(vm, 'beforeMount');\n\n var updateComponent;\n /* istanbul ignore if */\n if (\"development\" !== 'production' && config.performance && mark) {\n updateComponent = function () {\n var name = vm._name;\n var id = vm._uid;\n var startTag = \"vue-perf-start:\" + id;\n var endTag = \"vue-perf-end:\" + id;\n\n mark(startTag);\n var vnode = vm._render();\n mark(endTag);\n measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n mark(startTag);\n vm._update(vnode, hydrating);\n mark(endTag);\n measure((\"vue \" + name + \" patch\"), startTag, endTag);\n };\n } else {\n updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n }\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, null, true /* isRenderWatcher */);\n hydrating = false;\n\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook(vm, 'mounted');\n }\n return vm\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n if (true) {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren\n var hasChildren = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n parentVnode.data.scopedSlots || // has new scoped slots\n vm.$scopedSlots !== emptyObject // has old scoped slots\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (hasChildren) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n if (true) {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n try {\n handlers[i].call(vm);\n } catch (e) {\n handleError(e, vm, (hook + \" hook\"));\n }\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (true) {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (\"development\" !== 'production' && has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\nvar uid$1 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$1; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = true\n ? expOrFn.toString()\n : '';\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = function () {};\n \"development\" !== 'production' && warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var this$1 = this;\n\n var i = this.deps.length;\n while (i--) {\n var dep = this$1.deps[i];\n if (!this$1.newDepIds.has(dep.id)) {\n dep.removeSub(this$1);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var this$1 = this;\n\n var i = this.deps.length;\n while (i--) {\n this$1.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n var this$1 = this;\n\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this$1.deps[i].removeSub(this$1);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (true) {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive(props, key, value, function () {\n if (vm.$parent && !isUpdatingChildComponent) {\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n } else {\n defineReactive(props, key, value);\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n \"development\" !== 'production' && warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (true) {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n \"development\" !== 'production' && warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if (\"development\" !== 'production' && getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (true) {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : userDef;\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : userDef.get\n : noop;\n sharedPropertyDefinition.set = userDef.set\n ? userDef.set\n : noop;\n }\n if (\"development\" !== 'production' &&\n sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (true) {\n if (methods[key] == null) {\n warn(\n \"Method \\\"\" + key + \"\\\" has an undefined value in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = methods[key] == null ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n if (true) {\n dataDef.set = function (newData) {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n cb.call(vm, watcher.value);\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (true) {\n defineReactive(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n } else {\n defineReactive(vm, key, result[key]);\n }\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject).filter(function (key) {\n /* istanbul ignore next */\n return Object.getOwnPropertyDescriptor(inject, key).enumerable\n })\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else if (true) {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n if (isDef(ret)) {\n (ret)._isVList = true;\n }\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if (\"development\" !== 'production' && !isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || fallback;\n } else {\n var slotNodes = this.$slots[name];\n // warn duplicate slot usage\n if (slotNodes) {\n if (\"development\" !== 'production' && slotNodes._rendered) {\n warn(\n \"Duplicate presence of slot \\\"\" + name + \"\\\" found in the same render tree \" +\n \"- this will likely cause render errors.\",\n this\n );\n }\n slotNodes._rendered = true;\n }\n nodes = slotNodes || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n \"development\" !== 'production' && warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n if (!(key in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n \"development\" !== 'production' && warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () { return resolveSlots(children, parent); };\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = data.scopedSlots || emptyObject;\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n\n\n\n// Register the component hook to weex native render engine.\n// The hook will be triggered by native, not javascript.\n\n\n// Updates the state of the component to weex native render engine.\n\n/* */\n\n// https://github.com/Hanks10100/weex-native-directive/tree/master/component\n\n// listening on native callback\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (\n vnode,\n hydrating,\n parentElm,\n refElm\n ) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance,\n parentElm,\n refElm\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (true) {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor, context);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n // Weex specific: invoke recycle-list optimized @render function for\n // extracting cell-slot template.\n // https://github.com/Hanks10100/weex-native-directive/tree/master/component\n /* istanbul ignore if */\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent, // activeInstance in lifecycle state\n parentElm,\n refElm\n) {\n var options = {\n _isComponent: true,\n parent: parent,\n _parentVnode: vnode,\n _parentElm: parentElm || null,\n _refElm: refElm || null\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n hooks[key] = componentVNodeHooks[key];\n }\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n if (isDef(on[event])) {\n on[event] = [data.model.callback].concat(on[event]);\n } else {\n on[event] = data.model.callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n \"development\" !== 'production' && warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if (\"development\" !== 'production' &&\n isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n if (true) {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n } else {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n }\n}\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n // reset _rendered flag on slots for duplicate slot check\n if (true) {\n for (var key in vm.$slots) {\n // $flow-disable-line\n vm.$slots[key]._rendered = false;\n }\n }\n\n if (_parentVnode) {\n vm.$scopedSlots = _parentVnode.data.scopedSlots || emptyObject;\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (true) {\n if (vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (\"development\" !== 'production' && Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if (\"development\" !== 'production' && config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n if (true) {\n initProxy(vm);\n } else {\n vm._renderProxy = vm;\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook(vm, 'created');\n\n /* istanbul ignore if */\n if (\"development\" !== 'production' && config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n opts._parentElm = options._parentElm;\n opts._refElm = options._refElm;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var extended = Ctor.extendOptions;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = dedupe(latest[key], extended[key], sealed[key]);\n }\n }\n return modified\n}\n\nfunction dedupe (latest, extended, sealed) {\n // compare latest and sealed to ensure lifecycle hooks won't be duplicated\n // between merges\n if (Array.isArray(latest)) {\n var res = [];\n sealed = Array.isArray(sealed) ? sealed : [sealed];\n extended = Array.isArray(extended) ? extended : [extended];\n for (var i = 0; i < latest.length; i++) {\n // push original options and not sealed options to exclude duplicated options\n if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {\n res.push(latest[i]);\n }\n }\n return res\n } else {\n return latest\n }\n}\n\nfunction Vue (options) {\n if (\"development\" !== 'production' &&\n !(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if (\"development\" !== 'production' && name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if (\"development\" !== 'production' && type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n var this$1 = this;\n\n for (var key in this$1.cache) {\n pruneCacheEntry(this$1.cache, key, this$1.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n}\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n}\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n if (true) {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.5.16';\n\n/* */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n return (\n (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n (attr === 'selected' && tag === 'option') ||\n (attr === 'checked' && tag === 'input') ||\n (attr === 'muted' && tag === 'video')\n )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isBooleanAttr = makeMap(\n 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n 'required,reversed,scoped,seamless,selected,sortable,translate,' +\n 'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n return val == null || val === false\n};\n\n/* */\n\nfunction genClassForVnode (vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode && parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class)\n ? [child.class, parent.class]\n : parent.class\n }\n}\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n 'html,body,base,head,link,meta,style,title,' +\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n 'output,progress,select,textarea,' +\n 'details,dialog,menu,menuitem,summary,' +\n 'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n if (isSVG(tag)) {\n return 'svg'\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math'\n }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true\n }\n if (isReservedTag(tag)) {\n return false\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag]\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // http://stackoverflow.com/a/28210364/1070244\n return (unknownElementCache[tag] = (\n el.constructor === window.HTMLUnknownElement ||\n el.constructor === window.HTMLElement\n ))\n } else {\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/* */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n \"development\" !== 'production' && warn(\n 'Cannot find element: ' + el\n );\n return document.createElement('div')\n }\n return selected\n } else {\n return el\n }\n}\n\n/* */\n\nfunction createElement$1 (tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n node.appendChild(child);\n}\n\nfunction parentNode (node) {\n return node.parentNode\n}\n\nfunction nextSibling (node) {\n return node.nextSibling\n}\n\nfunction tagName (node) {\n return node.tagName\n}\n\nfunction setTextContent (node, text) {\n node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n node.setAttribute(scopeId, '');\n}\n\n\nvar nodeOps = Object.freeze({\n\tcreateElement: createElement$1,\n\tcreateElementNS: createElementNS,\n\tcreateTextNode: createTextNode,\n\tcreateComment: createComment,\n\tinsertBefore: insertBefore,\n\tremoveChild: removeChild,\n\tappendChild: appendChild,\n\tparentNode: parentNode,\n\tnextSibling: nextSibling,\n\ttagName: tagName,\n\tsetTextContent: setTextContent,\n\tsetStyleScope: setStyleScope\n});\n\n/* */\n\nvar ref = {\n create: function create (_, vnode) {\n registerRef(vnode);\n },\n update: function update (oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy (vnode) {\n registerRef(vnode, true);\n }\n}\n\nfunction registerRef (vnode, isRemoval) {\n var key = vnode.data.ref;\n if (!isDef(key)) { return }\n\n var vm = vnode.context;\n var ref = vnode.componentInstance || vnode.elm;\n var refs = vm.$refs;\n if (isRemoval) {\n if (Array.isArray(refs[key])) {\n remove(refs[key], ref);\n } else if (refs[key] === ref) {\n refs[key] = undefined;\n }\n } else {\n if (vnode.data.refInFor) {\n if (!Array.isArray(refs[key])) {\n refs[key] = [ref];\n } else if (refs[key].indexOf(ref) < 0) {\n // $flow-disable-line\n refs[key].push(ref);\n }\n } else {\n refs[key] = ref;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n return (\n a.key === b.key && (\n (\n a.tag === b.tag &&\n a.isComment === b.isComment &&\n isDef(a.data) === isDef(b.data) &&\n sameInputType(a, b)\n ) || (\n isTrue(a.isAsyncPlaceholder) &&\n a.asyncFactory === b.asyncFactory &&\n isUndef(b.asyncFactory.error)\n )\n )\n )\n}\n\nfunction sameInputType (a, b) {\n if (a.tag !== 'input') { return true }\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) { map[key] = i; }\n }\n return map\n}\n\nfunction createPatchFunction (backend) {\n var i, j;\n var cbs = {};\n\n var modules = backend.modules;\n var nodeOps = backend.nodeOps;\n\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n\n function emptyNodeAt (elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n }\n\n function createRmCb (childElm, listeners) {\n function remove () {\n if (--remove.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove.listeners = listeners;\n return remove\n }\n\n function removeNode (el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n\n function isUnknownElement$$1 (vnode, inVPre) {\n return (\n !inVPre &&\n !vnode.ns &&\n !(\n config.ignoredElements.length &&\n config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore)\n ? ignore.test(vnode.tag)\n : ignore === vnode.tag\n })\n ) &&\n config.isUnknownElement(vnode.tag)\n )\n }\n\n var creatingElmInVPre = 0;\n\n function createElm (\n vnode,\n insertedVnodeQueue,\n parentElm,\n refElm,\n nested,\n ownerArray,\n index\n ) {\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // This vnode was used in a previous render!\n // now it's used as a new node, overwriting its elm would cause\n // potential patch errors down the road when it's used as an insertion\n // reference node. Instead, we clone the node on-demand before creating\n // associated DOM element for it.\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return\n }\n\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n if (true) {\n if (data && data.pre) {\n creatingElmInVPre++;\n }\n if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n warn(\n 'Unknown custom element: <' + tag + '> - did you ' +\n 'register the component correctly? For recursive components, ' +\n 'make sure to provide the \"name\" option.',\n vnode.context\n );\n }\n }\n\n vnode.elm = vnode.ns\n ? nodeOps.createElementNS(vnode.ns, tag)\n : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n\n /* istanbul ignore if */\n {\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n }\n\n if (\"development\" !== 'production' && data && data.pre) {\n creatingElmInVPre--;\n }\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n\n function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */, parentElm, refElm);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true\n }\n }\n }\n\n function initComponent (vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n\n function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n\n function insert (parent, elm, ref$$1) {\n if (isDef(parent)) {\n if (isDef(ref$$1)) {\n if (ref$$1.parentNode === parent) {\n nodeOps.insertBefore(parent, elm, ref$$1);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n\n function createChildren (vnode, children, insertedVnodeQueue) {\n if (Array.isArray(children)) {\n if (true) {\n checkDuplicateKeys(children);\n }\n for (var i = 0; i < children.length; ++i) {\n createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n }\n }\n\n function isPatchable (vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag)\n }\n\n function invokeCreateHooks (vnode, insertedVnodeQueue) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) { i.create(emptyNode, vnode); }\n if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n }\n }\n\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope (vnode) {\n var i;\n if (isDef(i = vnode.fnScopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) &&\n i !== vnode.context &&\n i !== vnode.fnContext &&\n isDef(i = i.$options._scopeId)\n ) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n }\n\n function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n }\n }\n\n function invokeDestroyHook (vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n\n function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else { // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n\n function removeAndInvokeRemoveHook (vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n removeAndInvokeRemoveHook(i, rm);\n }\n for (i = 0; i < cbs.remove.length; ++i) {\n cbs.remove[i](vnode, rm);\n }\n if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n i(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n\n function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n\n if (true) {\n checkDuplicateKeys(newCh);\n }\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n idxInOld = isDef(newStartVnode.key)\n ? oldKeyToIdx[newStartVnode.key]\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) { // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n } else {\n vnodeToMove = oldCh[idxInOld];\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n\n function checkDuplicateKeys (children) {\n var seenKeys = {};\n for (var i = 0; i < children.length; i++) {\n var vnode = children[i];\n var key = vnode.key;\n if (isDef(key)) {\n if (seenKeys[key]) {\n warn(\n (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n vnode.context\n );\n } else {\n seenKeys[key] = true;\n }\n }\n }\n }\n\n function findIdxInOld (node, oldCh, start, end) {\n for (var i = start; i < end; i++) {\n var c = oldCh[i];\n if (isDef(c) && sameVnode(node, c)) { return i }\n }\n }\n\n function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {\n if (oldVnode === vnode) {\n return\n }\n\n var elm = vnode.elm = oldVnode.elm;\n\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return\n }\n\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) &&\n isTrue(oldVnode.isStatic) &&\n vnode.key === oldVnode.key &&\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n ) {\n vnode.componentInstance = oldVnode.componentInstance;\n return\n }\n\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n } else if (isDef(ch)) {\n if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n }\n }\n\n function invokeInsertHook (vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i = 0; i < queue.length; ++i) {\n queue[i].data.hook.insert(queue[i]);\n }\n }\n }\n\n var hydrationBailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n // Note: style is excluded because it relies on initial clone for future\n // deep updates (#7063).\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n var i;\n var tag = vnode.tag;\n var data = vnode.data;\n var children = vnode.children;\n inVPre = inVPre || (data && data.pre);\n vnode.elm = elm;\n\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.isAsyncPlaceholder = true;\n return true\n }\n // assert node match\n if (true) {\n if (!assertNodeMatch(elm, vnode, inVPre)) {\n return false\n }\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if (\"development\" !== 'production' &&\n typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('server innerHTML: ', i);\n console.warn('client innerHTML: ', elm.innerHTML);\n }\n return false\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i$1 = 0; i$1 < children.length; i$1++) {\n if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n childrenMatch = false;\n break\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if (\"development\" !== 'production' &&\n typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n }\n return false\n }\n }\n }\n }\n if (isDef(data)) {\n var fullInvoke = false;\n for (var key in data) {\n if (!isRenderedModule(key)) {\n fullInvoke = true;\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break\n }\n }\n if (!fullInvoke && data['class']) {\n // ensure collecting deps for deep class bindings for future updates\n traverse(data['class']);\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true\n }\n\n function assertNodeMatch (node, vnode, inVPre) {\n if (isDef(vnode.tag)) {\n return vnode.tag.indexOf('vue-component') === 0 || (\n !isUnknownElement$$1(vnode, inVPre) &&\n vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n )\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3)\n }\n }\n\n return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n return\n }\n\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue, parentElm, refElm);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode\n } else if (true) {\n warn(\n 'The client-side rendered virtual DOM tree is not matching ' +\n 'server-rendered content. This is likely caused by incorrect ' +\n 'HTML markup, for example nesting block-level elements inside ' +\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm$1 = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm$1,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm$1)) {\n removeVnodes(parentElm$1, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n}\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n]\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n ? 'true'\n : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n baseSetAttr(el, key, value);\n }\n}\n\nfunction baseSetAttr (el, key, value) {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // #7138: IE10 & 11 fires input event when setting placeholder on\n // <textarea>... block the first input event and remove the blocker\n // immediately.\n /* istanbul ignore if */\n if (\n isIE && !isIE9 &&\n el.tagName === 'TEXTAREA' &&\n key === 'placeholder' && !el.__ieph\n ) {\n var blocker = function (e) {\n e.stopImmediatePropagation();\n el.removeEventListener('input', blocker);\n };\n el.addEventListener('input', blocker);\n // $flow-disable-line\n el.__ieph = true; /* IE placeholder patched */\n }\n el.setAttribute(key, value);\n }\n}\n\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n}\n\n/* */\n\nfunction updateClass (oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (\n isUndef(data.staticClass) &&\n isUndef(data.class) && (\n isUndef(oldData) || (\n isUndef(oldData.staticClass) &&\n isUndef(oldData.class)\n )\n )\n ) {\n return\n }\n\n var cls = genClassForVnode(vnode);\n\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\n\nvar klass = {\n create: updateClass,\n update: updateClass\n}\n\n/* */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n var inSingle = false;\n var inDouble = false;\n var inTemplateString = false;\n var inRegex = false;\n var curly = 0;\n var square = 0;\n var paren = 0;\n var lastFilterIndex = 0;\n var c, prev, i, expression, filters;\n\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n } else if (inDouble) {\n if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n } else if (inTemplateString) {\n if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n } else if (inRegex) {\n if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n } else if (\n c === 0x7C && // pipe\n exp.charCodeAt(i + 1) !== 0x7C &&\n exp.charCodeAt(i - 1) !== 0x7C &&\n !curly && !square && !paren\n ) {\n if (expression === undefined) {\n // first filter, end of expression\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 0x22: inDouble = true; break // \"\n case 0x27: inSingle = true; break // '\n case 0x60: inTemplateString = true; break // `\n case 0x28: paren++; break // (\n case 0x29: paren--; break // )\n case 0x5B: square++; break // [\n case 0x5D: square--; break // ]\n case 0x7B: curly++; break // {\n case 0x7D: curly--; break // }\n }\n if (c === 0x2f) { // /\n var j = i - 1;\n var p = (void 0);\n // find first non-whitespace prev char\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== ' ') { break }\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n\n if (expression === undefined) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n\n function pushFilter () {\n (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n\n if (filters) {\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i]);\n }\n }\n\n return expression\n}\n\nfunction wrapFilter (exp, filter) {\n var i = filter.indexOf('(');\n if (i < 0) {\n // _f: resolveFilter\n return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n } else {\n var name = filter.slice(0, i);\n var args = filter.slice(i + 1);\n return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n }\n}\n\n/* */\n\nfunction baseWarn (msg) {\n console.error((\"[Vue compiler]: \" + msg));\n}\n\nfunction pluckModuleFunction (\n modules,\n key\n) {\n return modules\n ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n : []\n}\n\nfunction addProp (el, name, value) {\n (el.props || (el.props = [])).push({ name: name, value: value });\n el.plain = false;\n}\n\nfunction addAttr (el, name, value) {\n (el.attrs || (el.attrs = [])).push({ name: name, value: value });\n el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value) {\n el.attrsMap[name] = value;\n el.attrsList.push({ name: name, value: value });\n}\n\nfunction addDirective (\n el,\n name,\n rawName,\n value,\n arg,\n modifiers\n) {\n (el.directives || (el.directives = [])).push({ name: name, rawName: rawName, value: value, arg: arg, modifiers: modifiers });\n el.plain = false;\n}\n\nfunction addHandler (\n el,\n name,\n value,\n modifiers,\n important,\n warn\n) {\n modifiers = modifiers || emptyObject;\n // warn prevent and passive modifier\n /* istanbul ignore if */\n if (\n \"development\" !== 'production' && warn &&\n modifiers.prevent && modifiers.passive\n ) {\n warn(\n 'passive and prevent can\\'t be used together. ' +\n 'Passive handler can\\'t prevent default event.'\n );\n }\n\n // check capture modifier\n if (modifiers.capture) {\n delete modifiers.capture;\n name = '!' + name; // mark the event as captured\n }\n if (modifiers.once) {\n delete modifiers.once;\n name = '~' + name; // mark the event as once\n }\n /* istanbul ignore if */\n if (modifiers.passive) {\n delete modifiers.passive;\n name = '&' + name; // mark the event as passive\n }\n\n // normalize click.right and click.middle since they don't actually fire\n // this is technically browser-specific, but at least for now browsers are\n // the only target envs that have right/middle clicks.\n if (name === 'click') {\n if (modifiers.right) {\n name = 'contextmenu';\n delete modifiers.right;\n } else if (modifiers.middle) {\n name = 'mouseup';\n }\n }\n\n var events;\n if (modifiers.native) {\n delete modifiers.native;\n events = el.nativeEvents || (el.nativeEvents = {});\n } else {\n events = el.events || (el.events = {});\n }\n\n var newHandler = {\n value: value.trim()\n };\n if (modifiers !== emptyObject) {\n newHandler.modifiers = modifiers;\n }\n\n var handlers = events[name];\n /* istanbul ignore if */\n if (Array.isArray(handlers)) {\n important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n } else if (handlers) {\n events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n } else {\n events[name] = newHandler;\n }\n\n el.plain = false;\n}\n\nfunction getBindingAttr (\n el,\n name,\n getStatic\n) {\n var dynamicValue =\n getAndRemoveAttr(el, ':' + name) ||\n getAndRemoveAttr(el, 'v-bind:' + name);\n if (dynamicValue != null) {\n return parseFilters(dynamicValue)\n } else if (getStatic !== false) {\n var staticValue = getAndRemoveAttr(el, name);\n if (staticValue != null) {\n return JSON.stringify(staticValue)\n }\n }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n el,\n name,\n removeFromMap\n) {\n var val;\n if ((val = el.attrsMap[name]) != null) {\n var list = el.attrsList;\n for (var i = 0, l = list.length; i < l; i++) {\n if (list[i].name === name) {\n list.splice(i, 1);\n break\n }\n }\n }\n if (removeFromMap) {\n delete el.attrsMap[name];\n }\n return val\n}\n\n/* */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n el,\n value,\n modifiers\n) {\n var ref = modifiers || {};\n var number = ref.number;\n var trim = ref.trim;\n\n var baseValueExpression = '$$v';\n var valueExpression = baseValueExpression;\n if (trim) {\n valueExpression =\n \"(typeof \" + baseValueExpression + \" === 'string'\" +\n \"? \" + baseValueExpression + \".trim()\" +\n \": \" + baseValueExpression + \")\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n var assignment = genAssignmentCode(value, valueExpression);\n\n el.model = {\n value: (\"(\" + value + \")\"),\n expression: (\"\\\"\" + value + \"\\\"\"),\n callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n value,\n assignment\n) {\n var res = parseModel(value);\n if (res.key === null) {\n return (value + \"=\" + assignment)\n } else {\n return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len;\nvar str;\nvar chr;\nvar index$1;\nvar expressionPos;\nvar expressionEndPos;\n\n\n\nfunction parseModel (val) {\n // Fix https://github.com/vuejs/vue/pull/7730\n // allow v-model=\"obj.val \" (trailing whitespace)\n val = val.trim();\n len = val.length;\n\n if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n index$1 = val.lastIndexOf('.');\n if (index$1 > -1) {\n return {\n exp: val.slice(0, index$1),\n key: '\"' + val.slice(index$1 + 1) + '\"'\n }\n } else {\n return {\n exp: val,\n key: null\n }\n }\n }\n\n str = val;\n index$1 = expressionPos = expressionEndPos = 0;\n\n while (!eof()) {\n chr = next();\n /* istanbul ignore if */\n if (isStringStart(chr)) {\n parseString(chr);\n } else if (chr === 0x5B) {\n parseBracket(chr);\n }\n }\n\n return {\n exp: val.slice(0, expressionPos),\n key: val.slice(expressionPos + 1, expressionEndPos)\n }\n}\n\nfunction next () {\n return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n var inBracket = 1;\n expressionPos = index$1;\n while (!eof()) {\n chr = next();\n if (isStringStart(chr)) {\n parseString(chr);\n continue\n }\n if (chr === 0x5B) { inBracket++; }\n if (chr === 0x5D) { inBracket--; }\n if (inBracket === 0) {\n expressionEndPos = index$1;\n break\n }\n }\n}\n\nfunction parseString (chr) {\n var stringQuote = chr;\n while (!eof()) {\n chr = next();\n if (chr === stringQuote) {\n break\n }\n }\n}\n\n/* */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n el,\n dir,\n _warn\n) {\n warn$1 = _warn;\n var value = dir.value;\n var modifiers = dir.modifiers;\n var tag = el.tag;\n var type = el.attrsMap.type;\n\n if (true) {\n // inputs with type=\"file\" are read only and setting the input's\n // value will throw an error.\n if (tag === 'input' && type === 'file') {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n \"File inputs are read only. Use a v-on:change listener instead.\"\n );\n }\n }\n\n if (el.component) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else if (tag === 'select') {\n genSelect(el, value, modifiers);\n } else if (tag === 'input' && type === 'checkbox') {\n genCheckboxModel(el, value, modifiers);\n } else if (tag === 'input' && type === 'radio') {\n genRadioModel(el, value, modifiers);\n } else if (tag === 'input' || tag === 'textarea') {\n genDefaultModel(el, value, modifiers);\n } else if (!config.isReservedTag(tag)) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else if (true) {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"v-model is not supported on this element type. \" +\n 'If you are working with contenteditable, it\\'s recommended to ' +\n 'wrap a library dedicated for that purpose inside a custom component.'\n );\n }\n\n // ensure runtime directive metadata\n return true\n}\n\nfunction genCheckboxModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n addProp(el, 'checked',\n \"Array.isArray(\" + value + \")\" +\n \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n trueValueBinding === 'true'\n ? (\":(\" + value + \")\")\n : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n )\n );\n addHandler(el, 'change',\n \"var $$a=\" + value + \",\" +\n '$$el=$event.target,' +\n \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n 'if(Array.isArray($$a)){' +\n \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n '$$i=_i($$a,$$v);' +\n \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n null, true\n );\n}\n\nfunction genRadioModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var selectedVal = \"Array.prototype.filter\" +\n \".call($event.target.options,function(o){return o.selected})\" +\n \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n var code = \"var $$selectedVal = \" + selectedVal + \";\";\n code = code + \" \" + (genAssignmentCode(value, assignment));\n addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n el,\n value,\n modifiers\n) {\n var type = el.attrsMap.type;\n\n // warn if v-bind:value conflicts with v-model\n // except for inputs with v-bind:type\n if (true) {\n var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n if (value$1 && !typeBinding) {\n var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n warn$1(\n binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n 'because the latter already expands to a value binding internally'\n );\n }\n }\n\n var ref = modifiers || {};\n var lazy = ref.lazy;\n var number = ref.number;\n var trim = ref.trim;\n var needCompositionGuard = !lazy && type !== 'range';\n var event = lazy\n ? 'change'\n : type === 'range'\n ? RANGE_TOKEN\n : 'input';\n\n var valueExpression = '$event.target.value';\n if (trim) {\n valueExpression = \"$event.target.value.trim()\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n\n var code = genAssignmentCode(value, valueExpression);\n if (needCompositionGuard) {\n code = \"if($event.target.composing)return;\" + code;\n }\n\n addProp(el, 'value', (\"(\" + value + \")\"));\n addHandler(el, event, code, null, true);\n if (trim || number) {\n addHandler(el, 'blur', '$forceUpdate()');\n }\n}\n\n/* */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event = isIE ? 'change' : 'input';\n on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\n\nvar target$1;\n\nfunction createOnceHandler (handler, event, capture) {\n var _target = target$1; // save current target element in closure\n return function onceHandler () {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove$2(event, onceHandler, capture, _target);\n }\n }\n}\n\nfunction add$1 (\n event,\n handler,\n once$$1,\n capture,\n passive\n) {\n handler = withMacroTask(handler);\n if (once$$1) { handler = createOnceHandler(handler, event, capture); }\n target$1.addEventListener(\n event,\n handler,\n supportsPassive\n ? { capture: capture, passive: passive }\n : capture\n );\n}\n\nfunction remove$2 (\n event,\n handler,\n capture,\n _target\n) {\n (_target || target$1).removeEventListener(\n event,\n handler._withTask || handler,\n capture\n );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n target$1 = vnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add$1, remove$2, vnode.context);\n target$1 = undefined;\n}\n\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners\n}\n\n/* */\n\nfunction updateDOMProps (oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__)) {\n props = vnode.data.domProps = extend({}, props);\n }\n\n for (key in oldProps) {\n if (isUndef(props[key])) {\n elm[key] = '';\n }\n }\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) { vnode.children.length = 0; }\n if (cur === oldProps[key]) { continue }\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n\n if (key === 'value') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else {\n elm[key] = cur;\n }\n }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n return (!elm.composing && (\n elm.tagName === 'OPTION' ||\n isNotInFocusAndDirty(elm, checkVal) ||\n isDirtyWithModifiers(elm, checkVal)\n ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try { notInFocus = document.activeElement !== elm; } catch (e) {}\n return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers)) {\n if (modifiers.lazy) {\n // inputs with lazy should only be updated when not in focus\n return false\n }\n if (modifiers.number) {\n return toNumber(value) !== toNumber(newVal)\n }\n if (modifiers.trim) {\n return value.trim() !== newVal.trim()\n }\n }\n return value !== newVal\n}\n\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n}\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle\n ? extend(data.staticStyle, style)\n : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n var res = {};\n var styleData;\n\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (\n childNode && childNode.data &&\n (styleData = normalizeStyleData(childNode.data))\n ) {\n extend(res, styleData);\n }\n }\n }\n\n if ((styleData = normalizeStyleData(vnode.data))) {\n extend(res, styleData);\n }\n\n var parentNode = vnode;\n while ((parentNode = parentNode.parent)) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res\n}\n\n/* */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(name, val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && (prop in emptyStyle)) {\n return prop\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name = vendorNames[i] + capName;\n if (name in emptyStyle) {\n return name\n }\n }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n\n if (isUndef(data.staticStyle) && isUndef(data.style) &&\n isUndef(oldData.staticStyle) && isUndef(oldData.style)\n ) {\n return\n }\n\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n\n var style = normalizeStyleBinding(vnode.data.style) || {};\n\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__)\n ? extend({}, style)\n : style;\n\n var newStyle = getStyle(vnode, true);\n\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n if (cur !== oldStyle[name]) {\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n }\n}\n\nvar style = {\n create: updateStyle,\n update: updateStyle\n}\n\n/* */\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(/\\s+/).forEach(function (c) { return el.classList.add(c); });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(/\\s+/).forEach(function (c) { return el.classList.remove(c); });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\n\n/* */\n\nfunction resolveTransition (def) {\n if (!def) {\n return\n }\n /* istanbul ignore else */\n if (typeof def === 'object') {\n var res = {};\n if (def.css !== false) {\n extend(res, autoCssTransition(def.name || 'v'));\n }\n extend(res, def);\n return res\n } else if (typeof def === 'string') {\n return autoCssTransition(def)\n }\n}\n\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: (name + \"-enter\"),\n enterToClass: (name + \"-enter-to\"),\n enterActiveClass: (name + \"-enter-active\"),\n leaveClass: (name + \"-leave\"),\n leaveToClass: (name + \"-leave-to\"),\n leaveActiveClass: (name + \"-leave-active\")\n }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined &&\n window.onwebkittransitionend !== undefined\n ) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined &&\n window.onwebkitanimationend !== undefined\n ) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n ? window.requestAnimationFrame\n ? window.requestAnimationFrame.bind(window)\n : setTimeout\n : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n raf(function () {\n raf(fn);\n });\n}\n\nfunction addTransitionClass (el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\n\nfunction removeTransitionClass (el, cls) {\n if (el._transitionClasses) {\n remove(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n el,\n expectedType,\n cb\n) {\n var ref = getTransitionInfo(el, expectedType);\n var type = ref.type;\n var timeout = ref.timeout;\n var propCount = ref.propCount;\n if (!type) { return cb() }\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function () {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n var styles = window.getComputedStyle(el);\n var transitionDelays = styles[transitionProp + 'Delay'].split(', ');\n var transitionDurations = styles[transitionProp + 'Duration'].split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = styles[animationProp + 'Delay'].split(', ');\n var animationDurations = styles[animationProp + 'Duration'].split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n var hasTransform =\n type === TRANSITION &&\n transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n }\n}\n\nfunction getTimeout (delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }))\n}\n\nfunction toMs (s) {\n return Number(s.slice(0, -1)) * 1000\n}\n\n/* */\n\nfunction enter (vnode, toggleDisplay) {\n var el = vnode.elm;\n\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return\n }\n\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var enterClass = data.enterClass;\n var enterToClass = data.enterToClass;\n var enterActiveClass = data.enterActiveClass;\n var appearClass = data.appearClass;\n var appearToClass = data.appearToClass;\n var appearActiveClass = data.appearActiveClass;\n var beforeEnter = data.beforeEnter;\n var enter = data.enter;\n var afterEnter = data.afterEnter;\n var enterCancelled = data.enterCancelled;\n var beforeAppear = data.beforeAppear;\n var appear = data.appear;\n var afterAppear = data.afterAppear;\n var appearCancelled = data.appearCancelled;\n var duration = data.duration;\n\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n transitionNode = transitionNode.parent;\n context = transitionNode.context;\n }\n\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n if (isAppear && !appear && appear !== '') {\n return\n }\n\n var startClass = isAppear && appearClass\n ? appearClass\n : enterClass;\n var activeClass = isAppear && appearActiveClass\n ? appearActiveClass\n : enterActiveClass;\n var toClass = isAppear && appearToClass\n ? appearToClass\n : enterToClass;\n\n var beforeEnterHook = isAppear\n ? (beforeAppear || beforeEnter)\n : beforeEnter;\n var enterHook = isAppear\n ? (typeof appear === 'function' ? appear : enter)\n : enter;\n var afterEnterHook = isAppear\n ? (afterAppear || afterEnter)\n : afterEnter;\n var enterCancelledHook = isAppear\n ? (appearCancelled || enterCancelled)\n : enterCancelled;\n\n var explicitEnterDuration = toNumber(\n isObject(duration)\n ? duration.enter\n : duration\n );\n\n if (\"development\" !== 'production' && explicitEnterDuration != null) {\n checkDuration(explicitEnterDuration, 'enter', vnode);\n }\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode, 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode &&\n pendingNode.tag === vnode.tag &&\n pendingNode.elm._leaveCb\n ) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n removeTransitionClass(el, startClass);\n if (!cb.cancelled) {\n addTransitionClass(el, toClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\n\nfunction leave (vnode, rm) {\n var el = vnode.elm;\n\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data) || el.nodeType !== 1) {\n return rm()\n }\n\n /* istanbul ignore if */\n if (isDef(el._leaveCb)) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var leaveClass = data.leaveClass;\n var leaveToClass = data.leaveToClass;\n var leaveActiveClass = data.leaveActiveClass;\n var beforeLeave = data.beforeLeave;\n var leave = data.leave;\n var afterLeave = data.afterLeave;\n var leaveCancelled = data.leaveCancelled;\n var delayLeave = data.delayLeave;\n var duration = data.duration;\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n\n var explicitLeaveDuration = toNumber(\n isObject(duration)\n ? duration.leave\n : duration\n );\n\n if (\"development\" !== 'production' && isDef(explicitLeaveDuration)) {\n checkDuration(explicitLeaveDuration, 'leave', vnode);\n }\n\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n\n function performLeave () {\n // the delayed leave may have already been cancelled\n if (cb.cancelled) {\n return\n }\n // record leaving element\n if (!vnode.data.show) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n removeTransitionClass(el, leaveClass);\n if (!cb.cancelled) {\n addTransitionClass(el, leaveToClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\n \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n \"got \" + (JSON.stringify(val)) + \".\",\n vnode.context\n );\n } else if (isNaN(val)) {\n warn(\n \"<transition> explicit \" + name + \" duration is NaN - \" +\n 'the duration expression might be incorrect.',\n vnode.context\n );\n }\n}\n\nfunction isValidDuration (val) {\n return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n if (isUndef(fn)) {\n return false\n }\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(\n Array.isArray(invokerFns)\n ? invokerFns[0]\n : invokerFns\n )\n } else {\n return (fn._length || fn.length) > 1\n }\n}\n\nfunction _enter (_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\n\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove$$1 (vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {}\n\nvar platformModules = [\n attrs,\n klass,\n events,\n domProps,\n style,\n transition\n]\n\n/* */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\n\nvar directive = {\n inserted: function inserted (el, binding, vnode, oldVnode) {\n if (vnode.tag === 'select') {\n // #6903\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n directive.componentUpdated(el, binding, vnode);\n });\n } else {\n setSelected(el, binding, vnode.context);\n }\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n\n componentUpdated: function componentUpdated (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions = el._vOptions;\n var curOptions = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\n\nfunction setSelected (el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n \"development\" !== 'production' && warn(\n \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n vm\n );\n return\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\n\nfunction hasNoMatchingOption (value, options) {\n return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n return '_value' in option\n ? option._value\n : option.value\n}\n\nfunction onCompositionStart (e) {\n e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) { return }\n e.target.composing = false;\n trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n/* */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n ? locateNode(vnode.componentInstance._vnode)\n : vnode\n}\n\nvar show = {\n bind: function bind (el, ref, vnode) {\n var value = ref.value;\n\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay =\n el.style.display === 'none' ? '' : el.style.display;\n if (value && transition$$1) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n\n update: function update (el, ref, vnode) {\n var value = ref.value;\n var oldValue = ref.oldValue;\n\n /* istanbul ignore if */\n if (!value === !oldValue) { return }\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n if (transition$$1) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n\n unbind: function unbind (\n el,\n binding,\n vnode,\n oldVnode,\n isDestroy\n ) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n}\n\nvar platformDirectives = {\n model: directive,\n show: show\n}\n\n/* */\n\n// Provides transition support for a single element/component.\n// supports transition mode (out-in / in-out)\n\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children))\n } else {\n return vnode\n }\n}\n\nfunction extractTransitionData (comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key$1 in listeners) {\n data[camelize(key$1)] = listeners[key$1];\n }\n return data\n}\n\nfunction placeholder (h, rawChild) {\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n })\n }\n}\n\nfunction hasParentTransition (vnode) {\n while ((vnode = vnode.parent)) {\n if (vnode.data.transition) {\n return true\n }\n }\n}\n\nfunction isSameChild (child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n\n render: function render (h) {\n var this$1 = this;\n\n var children = this.$slots.default;\n if (!children) {\n return\n }\n\n // filter out text nodes (possible whitespaces)\n children = children.filter(function (c) { return c.tag || isAsyncPlaceholder(c); });\n /* istanbul ignore if */\n if (!children.length) {\n return\n }\n\n // warn multiple elements\n if (\"development\" !== 'production' && children.length > 1) {\n warn(\n '<transition> can only be used on a single element. Use ' +\n '<transition-group> for lists.',\n this.$parent\n );\n }\n\n var mode = this.mode;\n\n // warn invalid mode\n if (\"development\" !== 'production' &&\n mode && mode !== 'in-out' && mode !== 'out-in'\n ) {\n warn(\n 'invalid <transition> mode: ' + mode,\n this.$parent\n );\n }\n\n var rawChild = children[0];\n\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild\n }\n\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild\n }\n\n if (this._leaving) {\n return placeholder(h, rawChild)\n }\n\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\" + (this._uid) + \"-\";\n child.key = child.key == null\n ? child.isComment\n ? id + 'comment'\n : id + child.tag\n : isPrimitive(child.key)\n ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n : child.key;\n\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {\n child.data.show = true;\n }\n\n if (\n oldChild &&\n oldChild.data &&\n !isSameChild(child, oldChild) &&\n !isAsyncPlaceholder(oldChild) &&\n // #6687 component root is a comment node\n !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n ) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n this$1._leaving = false;\n this$1.$forceUpdate();\n });\n return placeholder(h, rawChild)\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild\n }\n var delayedLeave;\n var performLeave = function () { delayedLeave(); };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n }\n }\n\n return rawChild\n }\n}\n\n/* */\n\n// Provides transition support for list items.\n// supports move transitions using the FLIP technique.\n\n// Because the vdom's children update algorithm is \"unstable\" - i.e.\n// it doesn't guarantee the relative positioning of removed elements,\n// we force transition-group to update its children into two passes:\n// in the first pass, we remove all nodes that need to be removed,\n// triggering their leaving transition; in the second pass, we insert/move\n// into the final desired state. This way in the second pass removed\n// nodes will remain where they should be.\n\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n props: props,\n\n render: function render (h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c\n ;(c.data || (c.data = {})).transition = transitionData;\n } else if (true) {\n var opts = c.componentOptions;\n var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n }\n }\n }\n\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n var c$1 = prevChildren[i$1];\n c$1.data.transition = transitionData;\n c$1.data.pos = c$1.elm.getBoundingClientRect();\n if (map[c$1.key]) {\n kept.push(c$1);\n } else {\n removed.push(c$1);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n\n return h(tag, null, children)\n },\n\n beforeUpdate: function beforeUpdate () {\n // force removing pass\n this.__patch__(\n this._vnode,\n this.kept,\n false, // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n this._vnode = this.kept;\n },\n\n updated: function updated () {\n var children = this.prevChildren;\n var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return\n }\n\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n\n children.forEach(function (c) {\n if (c.data.moved) {\n var el = c.elm;\n var s = el.style;\n addTransitionClass(el, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(transitionEndEvent, cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n }\n });\n },\n\n methods: {\n hasMove: function hasMove (el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return (this._hasMove = info.hasTransform)\n }\n }\n}\n\nfunction callPendingCbs (c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\n\nfunction recordPosition (c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n s.transitionDuration = '0s';\n }\n}\n\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n}\n\n/* */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n setTimeout(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue);\n } else if (\n \"development\" !== 'production' &&\n \"development\" !== 'test' &&\n isChrome\n ) {\n console[console.info ? 'info' : 'log'](\n 'Download the Vue Devtools extension for a better development experience:\\n' +\n 'https://github.com/vuejs/vue-devtools'\n );\n }\n }\n if (\"development\" !== 'production' &&\n \"development\" !== 'test' &&\n config.productionTip !== false &&\n typeof console !== 'undefined'\n ) {\n console[console.info ? 'info' : 'log'](\n \"You are running Vue in development mode.\\n\" +\n \"Make sure to turn on production mode when deploying for production.\\n\" +\n \"See more tips at https://vuejs.org/guide/deployment.html\"\n );\n }\n }, 0);\n}\n\n/* */\n\nvar defaultTagRE = /\\{\\{((?:.|\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n text,\n delimiters\n) {\n var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n if (!tagRE.test(text)) {\n return\n }\n var tokens = [];\n var rawTokens = [];\n var lastIndex = tagRE.lastIndex = 0;\n var match, index, tokenValue;\n while ((match = tagRE.exec(text))) {\n index = match.index;\n // push text token\n if (index > lastIndex) {\n rawTokens.push(tokenValue = text.slice(lastIndex, index));\n tokens.push(JSON.stringify(tokenValue));\n }\n // tag token\n var exp = parseFilters(match[1].trim());\n tokens.push((\"_s(\" + exp + \")\"));\n rawTokens.push({ '@binding': exp });\n lastIndex = index + match[0].length;\n }\n if (lastIndex < text.length) {\n rawTokens.push(tokenValue = text.slice(lastIndex));\n tokens.push(JSON.stringify(tokenValue));\n }\n return {\n expression: tokens.join('+'),\n tokens: rawTokens\n }\n}\n\n/* */\n\nfunction transformNode (el, options) {\n var warn = options.warn || baseWarn;\n var staticClass = getAndRemoveAttr(el, 'class');\n if (\"development\" !== 'production' && staticClass) {\n var res = parseText(staticClass, options.delimiters);\n if (res) {\n warn(\n \"class=\\\"\" + staticClass + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.'\n );\n }\n }\n if (staticClass) {\n el.staticClass = JSON.stringify(staticClass);\n }\n var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n if (classBinding) {\n el.classBinding = classBinding;\n }\n}\n\nfunction genData (el) {\n var data = '';\n if (el.staticClass) {\n data += \"staticClass:\" + (el.staticClass) + \",\";\n }\n if (el.classBinding) {\n data += \"class:\" + (el.classBinding) + \",\";\n }\n return data\n}\n\nvar klass$1 = {\n staticKeys: ['staticClass'],\n transformNode: transformNode,\n genData: genData\n}\n\n/* */\n\nfunction transformNode$1 (el, options) {\n var warn = options.warn || baseWarn;\n var staticStyle = getAndRemoveAttr(el, 'style');\n if (staticStyle) {\n /* istanbul ignore if */\n if (true) {\n var res = parseText(staticStyle, options.delimiters);\n if (res) {\n warn(\n \"style=\\\"\" + staticStyle + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.'\n );\n }\n }\n el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n }\n\n var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n if (styleBinding) {\n el.styleBinding = styleBinding;\n }\n}\n\nfunction genData$1 (el) {\n var data = '';\n if (el.staticStyle) {\n data += \"staticStyle:\" + (el.staticStyle) + \",\";\n }\n if (el.styleBinding) {\n data += \"style:(\" + (el.styleBinding) + \"),\";\n }\n return data\n}\n\nvar style$1 = {\n staticKeys: ['staticStyle'],\n transformNode: transformNode$1,\n genData: genData$1\n}\n\n/* */\n\nvar decoder;\n\nvar he = {\n decode: function decode (html) {\n decoder = decoder || document.createElement('div');\n decoder.innerHTML = html;\n return decoder.textContent\n }\n}\n\n/* */\n\nvar isUnaryTag = makeMap(\n 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n 'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n 'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n/*!\n * HTML Parser By John Resig (ejohn.org)\n * Modified by Juriy \"kangax\" Zaytsev\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\n// could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName\n// but for Vue templates we can enforce a simple charset\nvar ncname = '[a-zA-Z_][\\\\w\\\\-\\\\.]*';\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being pased as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\nvar IS_REGEX_CAPTURING_BROKEN = false;\n'x'.replace(/x(.)?/g, function (m, g) {\n IS_REGEX_CAPTURING_BROKEN = g === '';\n});\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&amp;': '&',\n '&#10;': '\\n',\n '&#9;': '\\t'\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n var stack = [];\n var expectHTML = options.expectHTML;\n var isUnaryTag$$1 = options.isUnaryTag || no;\n var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n var index = 0;\n var last, lastTag;\n while (html) {\n last = html;\n // Make sure we're not in a plaintext content element like script/style\n if (!lastTag || !isPlainTextElement(lastTag)) {\n var textEnd = html.indexOf('<');\n if (textEnd === 0) {\n // Comment:\n if (comment.test(html)) {\n var commentEnd = html.indexOf('-->');\n\n if (commentEnd >= 0) {\n if (options.shouldKeepComment) {\n options.comment(html.substring(4, commentEnd));\n }\n advance(commentEnd + 3);\n continue\n }\n }\n\n // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n if (conditionalComment.test(html)) {\n var conditionalEnd = html.indexOf(']>');\n\n if (conditionalEnd >= 0) {\n advance(conditionalEnd + 2);\n continue\n }\n }\n\n // Doctype:\n var doctypeMatch = html.match(doctype);\n if (doctypeMatch) {\n advance(doctypeMatch[0].length);\n continue\n }\n\n // End tag:\n var endTagMatch = html.match(endTag);\n if (endTagMatch) {\n var curIndex = index;\n advance(endTagMatch[0].length);\n parseEndTag(endTagMatch[1], curIndex, index);\n continue\n }\n\n // Start tag:\n var startTagMatch = parseStartTag();\n if (startTagMatch) {\n handleStartTag(startTagMatch);\n if (shouldIgnoreFirstNewline(lastTag, html)) {\n advance(1);\n }\n continue\n }\n }\n\n var text = (void 0), rest = (void 0), next = (void 0);\n if (textEnd >= 0) {\n rest = html.slice(textEnd);\n while (\n !endTag.test(rest) &&\n !startTagOpen.test(rest) &&\n !comment.test(rest) &&\n !conditionalComment.test(rest)\n ) {\n // < in plain text, be forgiving and treat it as text\n next = rest.indexOf('<', 1);\n if (next < 0) { break }\n textEnd += next;\n rest = html.slice(textEnd);\n }\n text = html.substring(0, textEnd);\n advance(textEnd);\n }\n\n if (textEnd < 0) {\n text = html;\n html = '';\n }\n\n if (options.chars && text) {\n options.chars(text);\n }\n } else {\n var endTagLength = 0;\n var stackedTag = lastTag.toLowerCase();\n var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n endTagLength = endTag.length;\n if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n text = text\n .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n }\n if (shouldIgnoreFirstNewline(stackedTag, text)) {\n text = text.slice(1);\n }\n if (options.chars) {\n options.chars(text);\n }\n return ''\n });\n index += html.length - rest$1.length;\n html = rest$1;\n parseEndTag(stackedTag, index - endTagLength, index);\n }\n\n if (html === last) {\n options.chars && options.chars(html);\n if (\"development\" !== 'production' && !stack.length && options.warn) {\n options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"));\n }\n break\n }\n }\n\n // Clean up any remaining tags\n parseEndTag();\n\n function advance (n) {\n index += n;\n html = html.substring(n);\n }\n\n function parseStartTag () {\n var start = html.match(startTagOpen);\n if (start) {\n var match = {\n tagName: start[1],\n attrs: [],\n start: index\n };\n advance(start[0].length);\n var end, attr;\n while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {\n advance(attr[0].length);\n match.attrs.push(attr);\n }\n if (end) {\n match.unarySlash = end[1];\n advance(end[0].length);\n match.end = index;\n return match\n }\n }\n }\n\n function handleStartTag (match) {\n var tagName = match.tagName;\n var unarySlash = match.unarySlash;\n\n if (expectHTML) {\n if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n parseEndTag(lastTag);\n }\n if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n parseEndTag(tagName);\n }\n }\n\n var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n var l = match.attrs.length;\n var attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n var args = match.attrs[i];\n // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778\n if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('\"\"') === -1) {\n if (args[3] === '') { delete args[3]; }\n if (args[4] === '') { delete args[4]; }\n if (args[5] === '') { delete args[5]; }\n }\n var value = args[3] || args[4] || args[5] || '';\n var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n ? options.shouldDecodeNewlinesForHref\n : options.shouldDecodeNewlines;\n attrs[i] = {\n name: args[1],\n value: decodeAttr(value, shouldDecodeNewlines)\n };\n }\n\n if (!unary) {\n stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs });\n lastTag = tagName;\n }\n\n if (options.start) {\n options.start(tagName, attrs, unary, match.start, match.end);\n }\n }\n\n function parseEndTag (tagName, start, end) {\n var pos, lowerCasedTagName;\n if (start == null) { start = index; }\n if (end == null) { end = index; }\n\n if (tagName) {\n lowerCasedTagName = tagName.toLowerCase();\n }\n\n // Find the closest opened tag of the same type\n if (tagName) {\n for (pos = stack.length - 1; pos >= 0; pos--) {\n if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n break\n }\n }\n } else {\n // If no tag name is provided, clean shop\n pos = 0;\n }\n\n if (pos >= 0) {\n // Close all the open elements, up the stack\n for (var i = stack.length - 1; i >= pos; i--) {\n if (\"development\" !== 'production' &&\n (i > pos || !tagName) &&\n options.warn\n ) {\n options.warn(\n (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\")\n );\n }\n if (options.end) {\n options.end(stack[i].tag, start, end);\n }\n }\n\n // Remove the open elements from the stack\n stack.length = pos;\n lastTag = pos && stack[pos - 1].tag;\n } else if (lowerCasedTagName === 'br') {\n if (options.start) {\n options.start(tagName, [], true, start, end);\n }\n } else if (lowerCasedTagName === 'p') {\n if (options.start) {\n options.start(tagName, [], false, start, end);\n }\n if (options.end) {\n options.end(tagName, start, end);\n }\n }\n }\n}\n\n/* */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /([^]*?)\\s+(?:in|of)\\s+([^]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^v-bind:/;\nvar modifierRE = /\\.[^.]+/g;\n\nvar decodeHTMLCached = cached(he.decode);\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\n\n\n\nfunction createASTElement (\n tag,\n attrs,\n parent\n) {\n return {\n type: 1,\n tag: tag,\n attrsList: attrs,\n attrsMap: makeAttrsMap(attrs),\n parent: parent,\n children: []\n }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n template,\n options\n) {\n warn$2 = options.warn || baseWarn;\n\n platformIsPreTag = options.isPreTag || no;\n platformMustUseProp = options.mustUseProp || no;\n platformGetTagNamespace = options.getTagNamespace || no;\n\n transforms = pluckModuleFunction(options.modules, 'transformNode');\n preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n delimiters = options.delimiters;\n\n var stack = [];\n var preserveWhitespace = options.preserveWhitespace !== false;\n var root;\n var currentParent;\n var inVPre = false;\n var inPre = false;\n var warned = false;\n\n function warnOnce (msg) {\n if (!warned) {\n warned = true;\n warn$2(msg);\n }\n }\n\n function closeElement (element) {\n // check pre state\n if (element.pre) {\n inVPre = false;\n }\n if (platformIsPreTag(element.tag)) {\n inPre = false;\n }\n // apply post-transforms\n for (var i = 0; i < postTransforms.length; i++) {\n postTransforms[i](element, options);\n }\n }\n\n parseHTML(template, {\n warn: warn$2,\n expectHTML: options.expectHTML,\n isUnaryTag: options.isUnaryTag,\n canBeLeftOpenTag: options.canBeLeftOpenTag,\n shouldDecodeNewlines: options.shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n shouldKeepComment: options.comments,\n start: function start (tag, attrs, unary) {\n // check namespace.\n // inherit parent ns if there is one\n var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n // handle IE svg bug\n /* istanbul ignore if */\n if (isIE && ns === 'svg') {\n attrs = guardIESVGBug(attrs);\n }\n\n var element = createASTElement(tag, attrs, currentParent);\n if (ns) {\n element.ns = ns;\n }\n\n if (isForbiddenTag(element) && !isServerRendering()) {\n element.forbidden = true;\n \"development\" !== 'production' && warn$2(\n 'Templates should only be responsible for mapping the state to the ' +\n 'UI. Avoid placing tags with side-effects in your templates, such as ' +\n \"<\" + tag + \">\" + ', as they will not be parsed.'\n );\n }\n\n // apply pre-transforms\n for (var i = 0; i < preTransforms.length; i++) {\n element = preTransforms[i](element, options) || element;\n }\n\n if (!inVPre) {\n processPre(element);\n if (element.pre) {\n inVPre = true;\n }\n }\n if (platformIsPreTag(element.tag)) {\n inPre = true;\n }\n if (inVPre) {\n processRawAttrs(element);\n } else if (!element.processed) {\n // structural directives\n processFor(element);\n processIf(element);\n processOnce(element);\n // element-scope stuff\n processElement(element, options);\n }\n\n function checkRootConstraints (el) {\n if (true) {\n if (el.tag === 'slot' || el.tag === 'template') {\n warnOnce(\n \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n 'contain multiple nodes.'\n );\n }\n if (el.attrsMap.hasOwnProperty('v-for')) {\n warnOnce(\n 'Cannot use v-for on stateful component root element because ' +\n 'it renders multiple elements.'\n );\n }\n }\n }\n\n // tree management\n if (!root) {\n root = element;\n checkRootConstraints(root);\n } else if (!stack.length) {\n // allow root elements with v-if, v-else-if and v-else\n if (root.if && (element.elseif || element.else)) {\n checkRootConstraints(element);\n addIfCondition(root, {\n exp: element.elseif,\n block: element\n });\n } else if (true) {\n warnOnce(\n \"Component template should contain exactly one root element. \" +\n \"If you are using v-if on multiple elements, \" +\n \"use v-else-if to chain them instead.\"\n );\n }\n }\n if (currentParent && !element.forbidden) {\n if (element.elseif || element.else) {\n processIfConditions(element, currentParent);\n } else if (element.slotScope) { // scoped slot\n currentParent.plain = false;\n var name = element.slotTarget || '\"default\"';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n } else {\n currentParent.children.push(element);\n element.parent = currentParent;\n }\n }\n if (!unary) {\n currentParent = element;\n stack.push(element);\n } else {\n closeElement(element);\n }\n },\n\n end: function end () {\n // remove trailing whitespace\n var element = stack[stack.length - 1];\n var lastNode = element.children[element.children.length - 1];\n if (lastNode && lastNode.type === 3 && lastNode.text === ' ' && !inPre) {\n element.children.pop();\n }\n // pop stack\n stack.length -= 1;\n currentParent = stack[stack.length - 1];\n closeElement(element);\n },\n\n chars: function chars (text) {\n if (!currentParent) {\n if (true) {\n if (text === template) {\n warnOnce(\n 'Component template requires a root element, rather than just text.'\n );\n } else if ((text = text.trim())) {\n warnOnce(\n (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\")\n );\n }\n }\n return\n }\n // IE textarea placeholder bug\n /* istanbul ignore if */\n if (isIE &&\n currentParent.tag === 'textarea' &&\n currentParent.attrsMap.placeholder === text\n ) {\n return\n }\n var children = currentParent.children;\n text = inPre || text.trim()\n ? isTextTag(currentParent) ? text : decodeHTMLCached(text)\n // only preserve whitespace if its not right after a starting tag\n : preserveWhitespace && children.length ? ' ' : '';\n if (text) {\n var res;\n if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n children.push({\n type: 2,\n expression: res.expression,\n tokens: res.tokens,\n text: text\n });\n } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n children.push({\n type: 3,\n text: text\n });\n }\n }\n },\n comment: function comment (text) {\n currentParent.children.push({\n type: 3,\n text: text,\n isComment: true\n });\n }\n });\n return root\n}\n\nfunction processPre (el) {\n if (getAndRemoveAttr(el, 'v-pre') != null) {\n el.pre = true;\n }\n}\n\nfunction processRawAttrs (el) {\n var l = el.attrsList.length;\n if (l) {\n var attrs = el.attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n attrs[i] = {\n name: el.attrsList[i].name,\n value: JSON.stringify(el.attrsList[i].value)\n };\n }\n } else if (!el.pre) {\n // non root node in pre blocks with no attributes\n el.plain = true;\n }\n}\n\nfunction processElement (element, options) {\n processKey(element);\n\n // determine whether this is a plain element after\n // removing structural attributes\n element.plain = !element.key && !element.attrsList.length;\n\n processRef(element);\n processSlot(element);\n processComponent(element);\n for (var i = 0; i < transforms.length; i++) {\n element = transforms[i](element, options) || element;\n }\n processAttrs(element);\n}\n\nfunction processKey (el) {\n var exp = getBindingAttr(el, 'key');\n if (exp) {\n if (\"development\" !== 'production' && el.tag === 'template') {\n warn$2(\"<template> cannot be keyed. Place the key on real elements instead.\");\n }\n el.key = exp;\n }\n}\n\nfunction processRef (el) {\n var ref = getBindingAttr(el, 'ref');\n if (ref) {\n el.ref = ref;\n el.refInFor = checkInFor(el);\n }\n}\n\nfunction processFor (el) {\n var exp;\n if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n var res = parseFor(exp);\n if (res) {\n extend(el, res);\n } else if (true) {\n warn$2(\n (\"Invalid v-for expression: \" + exp)\n );\n }\n }\n}\n\n\n\nfunction parseFor (exp) {\n var inMatch = exp.match(forAliasRE);\n if (!inMatch) { return }\n var res = {};\n res.for = inMatch[2].trim();\n var alias = inMatch[1].trim().replace(stripParensRE, '');\n var iteratorMatch = alias.match(forIteratorRE);\n if (iteratorMatch) {\n res.alias = alias.replace(forIteratorRE, '');\n res.iterator1 = iteratorMatch[1].trim();\n if (iteratorMatch[2]) {\n res.iterator2 = iteratorMatch[2].trim();\n }\n } else {\n res.alias = alias;\n }\n return res\n}\n\nfunction processIf (el) {\n var exp = getAndRemoveAttr(el, 'v-if');\n if (exp) {\n el.if = exp;\n addIfCondition(el, {\n exp: exp,\n block: el\n });\n } else {\n if (getAndRemoveAttr(el, 'v-else') != null) {\n el.else = true;\n }\n var elseif = getAndRemoveAttr(el, 'v-else-if');\n if (elseif) {\n el.elseif = elseif;\n }\n }\n}\n\nfunction processIfConditions (el, parent) {\n var prev = findPrevElement(parent.children);\n if (prev && prev.if) {\n addIfCondition(prev, {\n exp: el.elseif,\n block: el\n });\n } else if (true) {\n warn$2(\n \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n \"used on element <\" + (el.tag) + \"> without corresponding v-if.\"\n );\n }\n}\n\nfunction findPrevElement (children) {\n var i = children.length;\n while (i--) {\n if (children[i].type === 1) {\n return children[i]\n } else {\n if (\"development\" !== 'production' && children[i].text !== ' ') {\n warn$2(\n \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n \"will be ignored.\"\n );\n }\n children.pop();\n }\n }\n}\n\nfunction addIfCondition (el, condition) {\n if (!el.ifConditions) {\n el.ifConditions = [];\n }\n el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n var once$$1 = getAndRemoveAttr(el, 'v-once');\n if (once$$1 != null) {\n el.once = true;\n }\n}\n\nfunction processSlot (el) {\n if (el.tag === 'slot') {\n el.slotName = getBindingAttr(el, 'name');\n if (\"development\" !== 'production' && el.key) {\n warn$2(\n \"`key` does not work on <slot> because slots are abstract outlets \" +\n \"and can possibly expand into multiple elements. \" +\n \"Use the key on a wrapping element instead.\"\n );\n }\n } else {\n var slotScope;\n if (el.tag === 'template') {\n slotScope = getAndRemoveAttr(el, 'scope');\n /* istanbul ignore if */\n if (\"development\" !== 'production' && slotScope) {\n warn$2(\n \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n \"can also be used on plain elements in addition to <template> to \" +\n \"denote scoped slots.\",\n true\n );\n }\n el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n /* istanbul ignore if */\n if (\"development\" !== 'production' && el.attrsMap['v-for']) {\n warn$2(\n \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n \"scoped slot to make it clearer.\",\n true\n );\n }\n el.slotScope = slotScope;\n }\n var slotTarget = getBindingAttr(el, 'slot');\n if (slotTarget) {\n el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n // preserve slot as an attribute for native shadow DOM compat\n // only for non-scoped slots.\n if (el.tag !== 'template' && !el.slotScope) {\n addAttr(el, 'slot', slotTarget);\n }\n }\n }\n}\n\nfunction processComponent (el) {\n var binding;\n if ((binding = getBindingAttr(el, 'is'))) {\n el.component = binding;\n }\n if (getAndRemoveAttr(el, 'inline-template') != null) {\n el.inlineTemplate = true;\n }\n}\n\nfunction processAttrs (el) {\n var list = el.attrsList;\n var i, l, name, rawName, value, modifiers, isProp;\n for (i = 0, l = list.length; i < l; i++) {\n name = rawName = list[i].name;\n value = list[i].value;\n if (dirRE.test(name)) {\n // mark element as dynamic\n el.hasBindings = true;\n // modifiers\n modifiers = parseModifiers(name);\n if (modifiers) {\n name = name.replace(modifierRE, '');\n }\n if (bindRE.test(name)) { // v-bind\n name = name.replace(bindRE, '');\n value = parseFilters(value);\n isProp = false;\n if (modifiers) {\n if (modifiers.prop) {\n isProp = true;\n name = camelize(name);\n if (name === 'innerHtml') { name = 'innerHTML'; }\n }\n if (modifiers.camel) {\n name = camelize(name);\n }\n if (modifiers.sync) {\n addHandler(\n el,\n (\"update:\" + (camelize(name))),\n genAssignmentCode(value, \"$event\")\n );\n }\n }\n if (isProp || (\n !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n )) {\n addProp(el, name, value);\n } else {\n addAttr(el, name, value);\n }\n } else if (onRE.test(name)) { // v-on\n name = name.replace(onRE, '');\n addHandler(el, name, value, modifiers, false, warn$2);\n } else { // normal directives\n name = name.replace(dirRE, '');\n // parse arg\n var argMatch = name.match(argRE);\n var arg = argMatch && argMatch[1];\n if (arg) {\n name = name.slice(0, -(arg.length + 1));\n }\n addDirective(el, name, rawName, value, arg, modifiers);\n if (\"development\" !== 'production' && name === 'model') {\n checkForAliasModel(el, value);\n }\n }\n } else {\n // literal attribute\n if (true) {\n var res = parseText(value, delimiters);\n if (res) {\n warn$2(\n name + \"=\\\"\" + value + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.'\n );\n }\n }\n addAttr(el, name, JSON.stringify(value));\n // #6887 firefox doesn't update muted state if set via attribute\n // even immediately after element creation\n if (!el.component &&\n name === 'muted' &&\n platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n addProp(el, name, 'true');\n }\n }\n }\n}\n\nfunction checkInFor (el) {\n var parent = el;\n while (parent) {\n if (parent.for !== undefined) {\n return true\n }\n parent = parent.parent;\n }\n return false\n}\n\nfunction parseModifiers (name) {\n var match = name.match(modifierRE);\n if (match) {\n var ret = {};\n match.forEach(function (m) { ret[m.slice(1)] = true; });\n return ret\n }\n}\n\nfunction makeAttrsMap (attrs) {\n var map = {};\n for (var i = 0, l = attrs.length; i < l; i++) {\n if (\n \"development\" !== 'production' &&\n map[attrs[i].name] && !isIE && !isEdge\n ) {\n warn$2('duplicate attribute: ' + attrs[i].name);\n }\n map[attrs[i].name] = attrs[i].value;\n }\n return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n return (\n el.tag === 'style' ||\n (el.tag === 'script' && (\n !el.attrsMap.type ||\n el.attrsMap.type === 'text/javascript'\n ))\n )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n var res = [];\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n if (!ieNSBug.test(attr.name)) {\n attr.name = attr.name.replace(ieNSPrefix, '');\n res.push(attr);\n }\n }\n return res\n}\n\nfunction checkForAliasModel (el, value) {\n var _el = el;\n while (_el) {\n if (_el.for && _el.alias === value) {\n warn$2(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"You are binding v-model directly to a v-for iteration alias. \" +\n \"This will not be able to modify the v-for source array because \" +\n \"writing to the alias is like modifying a function local variable. \" +\n \"Consider using an array of objects and use v-model on an object property instead.\"\n );\n }\n _el = _el.parent;\n }\n}\n\n/* */\n\n/**\n * Expand input[v-model] with dyanmic type bindings into v-if-else chains\n * Turn this:\n * <input v-model=\"data[type]\" :type=\"type\">\n * into this:\n * <input v-if=\"type === 'checkbox'\" type=\"checkbox\" v-model=\"data[type]\">\n * <input v-else-if=\"type === 'radio'\" type=\"radio\" v-model=\"data[type]\">\n * <input v-else :type=\"type\" v-model=\"data[type]\">\n */\n\nfunction preTransformNode (el, options) {\n if (el.tag === 'input') {\n var map = el.attrsMap;\n if (!map['v-model']) {\n return\n }\n\n var typeBinding;\n if (map[':type'] || map['v-bind:type']) {\n typeBinding = getBindingAttr(el, 'type');\n }\n if (!map.type && !typeBinding && map['v-bind']) {\n typeBinding = \"(\" + (map['v-bind']) + \").type\";\n }\n\n if (typeBinding) {\n var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n // 1. checkbox\n var branch0 = cloneASTElement(el);\n // process for on the main node\n processFor(branch0);\n addRawAttr(branch0, 'type', 'checkbox');\n processElement(branch0, options);\n branch0.processed = true; // prevent it from double-processed\n branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n addIfCondition(branch0, {\n exp: branch0.if,\n block: branch0\n });\n // 2. add radio else-if condition\n var branch1 = cloneASTElement(el);\n getAndRemoveAttr(branch1, 'v-for', true);\n addRawAttr(branch1, 'type', 'radio');\n processElement(branch1, options);\n addIfCondition(branch0, {\n exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n block: branch1\n });\n // 3. other\n var branch2 = cloneASTElement(el);\n getAndRemoveAttr(branch2, 'v-for', true);\n addRawAttr(branch2, ':type', typeBinding);\n processElement(branch2, options);\n addIfCondition(branch0, {\n exp: ifCondition,\n block: branch2\n });\n\n if (hasElse) {\n branch0.else = true;\n } else if (elseIfCondition) {\n branch0.elseif = elseIfCondition;\n }\n\n return branch0\n }\n }\n}\n\nfunction cloneASTElement (el) {\n return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$2 = {\n preTransformNode: preTransformNode\n}\n\nvar modules$1 = [\n klass$1,\n style$1,\n model$2\n]\n\n/* */\n\nfunction text (el, dir) {\n if (dir.value) {\n addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"));\n }\n}\n\n/* */\n\nfunction html (el, dir) {\n if (dir.value) {\n addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"));\n }\n}\n\nvar directives$1 = {\n model: model,\n text: text,\n html: html\n}\n\n/* */\n\nvar baseOptions = {\n expectHTML: true,\n modules: modules$1,\n directives: directives$1,\n isPreTag: isPreTag,\n isUnaryTag: isUnaryTag,\n mustUseProp: mustUseProp,\n canBeLeftOpenTag: canBeLeftOpenTag,\n isReservedTag: isReservedTag,\n getTagNamespace: getTagNamespace,\n staticKeys: genStaticKeys(modules$1)\n};\n\n/* */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n * create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n if (!root) { return }\n isStaticKey = genStaticKeysCached(options.staticKeys || '');\n isPlatformReservedTag = options.isReservedTag || no;\n // first pass: mark all non-static nodes.\n markStatic$1(root);\n // second pass: mark static roots.\n markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n return makeMap(\n 'type,tag,attrsList,attrsMap,plain,parent,children,attrs' +\n (keys ? ',' + keys : '')\n )\n}\n\nfunction markStatic$1 (node) {\n node.static = isStatic(node);\n if (node.type === 1) {\n // do not make component slot content static. this avoids\n // 1. components not able to mutate slot nodes\n // 2. static slot content fails for hot-reloading\n if (\n !isPlatformReservedTag(node.tag) &&\n node.tag !== 'slot' &&\n node.attrsMap['inline-template'] == null\n ) {\n return\n }\n for (var i = 0, l = node.children.length; i < l; i++) {\n var child = node.children[i];\n markStatic$1(child);\n if (!child.static) {\n node.static = false;\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n var block = node.ifConditions[i$1].block;\n markStatic$1(block);\n if (!block.static) {\n node.static = false;\n }\n }\n }\n }\n}\n\nfunction markStaticRoots (node, isInFor) {\n if (node.type === 1) {\n if (node.static || node.once) {\n node.staticInFor = isInFor;\n }\n // For a node to qualify as a static root, it should have children that\n // are not just static text. Otherwise the cost of hoisting out will\n // outweigh the benefits and it's better off to just always render it fresh.\n if (node.static && node.children.length && !(\n node.children.length === 1 &&\n node.children[0].type === 3\n )) {\n node.staticRoot = true;\n return\n } else {\n node.staticRoot = false;\n }\n if (node.children) {\n for (var i = 0, l = node.children.length; i < l; i++) {\n markStaticRoots(node.children[i], isInFor || !!node.for);\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n markStaticRoots(node.ifConditions[i$1].block, isInFor);\n }\n }\n }\n}\n\nfunction isStatic (node) {\n if (node.type === 2) { // expression\n return false\n }\n if (node.type === 3) { // text\n return true\n }\n return !!(node.pre || (\n !node.hasBindings && // no dynamic bindings\n !node.if && !node.for && // not v-if or v-for or v-else\n !isBuiltInTag(node.tag) && // not a built-in\n isPlatformReservedTag(node.tag) && // not a component\n !isDirectChildOfTemplateFor(node) &&\n Object.keys(node).every(isStaticKey)\n ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n while (node.parent) {\n node = node.parent;\n if (node.tag !== 'template') {\n return false\n }\n if (node.for) {\n return true\n }\n }\n return false\n}\n\n/* */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n 'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n esc: 'Escape',\n tab: 'Tab',\n enter: 'Enter',\n space: ' ',\n // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n up: ['Up', 'ArrowUp'],\n left: ['Left', 'ArrowLeft'],\n right: ['Right', 'ArrowRight'],\n down: ['Down', 'ArrowDown'],\n 'delete': ['Backspace', 'Delete']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n stop: '$event.stopPropagation();',\n prevent: '$event.preventDefault();',\n self: genGuard(\"$event.target !== $event.currentTarget\"),\n ctrl: genGuard(\"!$event.ctrlKey\"),\n shift: genGuard(\"!$event.shiftKey\"),\n alt: genGuard(\"!$event.altKey\"),\n meta: genGuard(\"!$event.metaKey\"),\n left: genGuard(\"'button' in $event && $event.button !== 0\"),\n middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n events,\n isNative,\n warn\n) {\n var res = isNative ? 'nativeOn:{' : 'on:{';\n for (var name in events) {\n res += \"\\\"\" + name + \"\\\":\" + (genHandler(name, events[name])) + \",\";\n }\n return res.slice(0, -1) + '}'\n}\n\nfunction genHandler (\n name,\n handler\n) {\n if (!handler) {\n return 'function(){}'\n }\n\n if (Array.isArray(handler)) {\n return (\"[\" + (handler.map(function (handler) { return genHandler(name, handler); }).join(',')) + \"]\")\n }\n\n var isMethodPath = simplePathRE.test(handler.value);\n var isFunctionExpression = fnExpRE.test(handler.value);\n\n if (!handler.modifiers) {\n if (isMethodPath || isFunctionExpression) {\n return handler.value\n }\n /* istanbul ignore if */\n return (\"function($event){\" + (handler.value) + \"}\") // inline statement\n } else {\n var code = '';\n var genModifierCode = '';\n var keys = [];\n for (var key in handler.modifiers) {\n if (modifierCode[key]) {\n genModifierCode += modifierCode[key];\n // left/right\n if (keyCodes[key]) {\n keys.push(key);\n }\n } else if (key === 'exact') {\n var modifiers = (handler.modifiers);\n genModifierCode += genGuard(\n ['ctrl', 'shift', 'alt', 'meta']\n .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n .join('||')\n );\n } else {\n keys.push(key);\n }\n }\n if (keys.length) {\n code += genKeyFilter(keys);\n }\n // Make sure modifiers like prevent and stop get executed after key filtering\n if (genModifierCode) {\n code += genModifierCode;\n }\n var handlerCode = isMethodPath\n ? (\"return \" + (handler.value) + \"($event)\")\n : isFunctionExpression\n ? (\"return (\" + (handler.value) + \")($event)\")\n : handler.value;\n /* istanbul ignore if */\n return (\"function($event){\" + code + handlerCode + \"}\")\n }\n}\n\nfunction genKeyFilter (keys) {\n return (\"if(!('button' in $event)&&\" + (keys.map(genFilterCode).join('&&')) + \")return null;\")\n}\n\nfunction genFilterCode (key) {\n var keyVal = parseInt(key, 10);\n if (keyVal) {\n return (\"$event.keyCode!==\" + keyVal)\n }\n var keyCode = keyCodes[key];\n var keyName = keyNames[key];\n return (\n \"_k($event.keyCode,\" +\n (JSON.stringify(key)) + \",\" +\n (JSON.stringify(keyCode)) + \",\" +\n \"$event.key,\" +\n \"\" + (JSON.stringify(keyName)) +\n \")\"\n )\n}\n\n/* */\n\nfunction on (el, dir) {\n if (\"development\" !== 'production' && dir.modifiers) {\n warn(\"v-on without argument does not support modifiers.\");\n }\n el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/* */\n\nfunction bind$1 (el, dir) {\n el.wrapData = function (code) {\n return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n };\n}\n\n/* */\n\nvar baseDirectives = {\n on: on,\n bind: bind$1,\n cloak: noop\n}\n\n/* */\n\nvar CodegenState = function CodegenState (options) {\n this.options = options;\n this.warn = options.warn || baseWarn;\n this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n this.directives = extend(extend({}, baseDirectives), options.directives);\n var isReservedTag = options.isReservedTag || no;\n this.maybeComponent = function (el) { return !isReservedTag(el.tag); };\n this.onceId = 0;\n this.staticRenderFns = [];\n};\n\n\n\nfunction generate (\n ast,\n options\n) {\n var state = new CodegenState(options);\n var code = ast ? genElement(ast, state) : '_c(\"div\")';\n return {\n render: (\"with(this){return \" + code + \"}\"),\n staticRenderFns: state.staticRenderFns\n }\n}\n\nfunction genElement (el, state) {\n if (el.staticRoot && !el.staticProcessed) {\n return genStatic(el, state)\n } else if (el.once && !el.onceProcessed) {\n return genOnce(el, state)\n } else if (el.for && !el.forProcessed) {\n return genFor(el, state)\n } else if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.tag === 'template' && !el.slotTarget) {\n return genChildren(el, state) || 'void 0'\n } else if (el.tag === 'slot') {\n return genSlot(el, state)\n } else {\n // component or element\n var code;\n if (el.component) {\n code = genComponent(el.component, el, state);\n } else {\n var data = el.plain ? undefined : genData$2(el, state);\n\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n }\n // module transforms\n for (var i = 0; i < state.transforms.length; i++) {\n code = state.transforms[i](el, code);\n }\n return code\n }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n el.staticProcessed = true;\n state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n el.onceProcessed = true;\n if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.staticInFor) {\n var key = '';\n var parent = el.parent;\n while (parent) {\n if (parent.for) {\n key = parent.key;\n break\n }\n parent = parent.parent;\n }\n if (!key) {\n \"development\" !== 'production' && state.warn(\n \"v-once can only be used inside v-for that is keyed. \"\n );\n return genElement(el, state)\n }\n return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n } else {\n return genStatic(el, state)\n }\n}\n\nfunction genIf (\n el,\n state,\n altGen,\n altEmpty\n) {\n el.ifProcessed = true; // avoid recursion\n return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n conditions,\n state,\n altGen,\n altEmpty\n) {\n if (!conditions.length) {\n return altEmpty || '_e()'\n }\n\n var condition = conditions.shift();\n if (condition.exp) {\n return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n } else {\n return (\"\" + (genTernaryExp(condition.block)))\n }\n\n // v-if with v-once should generate code like (a)?_m(0):_m(1)\n function genTernaryExp (el) {\n return altGen\n ? altGen(el, state)\n : el.once\n ? genOnce(el, state)\n : genElement(el, state)\n }\n}\n\nfunction genFor (\n el,\n state,\n altGen,\n altHelper\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n if (\"development\" !== 'production' &&\n state.maybeComponent(el) &&\n el.tag !== 'slot' &&\n el.tag !== 'template' &&\n !el.key\n ) {\n state.warn(\n \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n \"v-for should have explicit keys. \" +\n \"See https://vuejs.org/guide/list.html#key for more info.\",\n true /* tip */\n );\n }\n\n el.forProcessed = true; // avoid recursion\n return (altHelper || '_l') + \"((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + ((altGen || genElement)(el, state)) +\n '})'\n}\n\nfunction genData$2 (el, state) {\n var data = '{';\n\n // directives first.\n // directives may mutate the el's other properties before they are generated.\n var dirs = genDirectives(el, state);\n if (dirs) { data += dirs + ','; }\n\n // key\n if (el.key) {\n data += \"key:\" + (el.key) + \",\";\n }\n // ref\n if (el.ref) {\n data += \"ref:\" + (el.ref) + \",\";\n }\n if (el.refInFor) {\n data += \"refInFor:true,\";\n }\n // pre\n if (el.pre) {\n data += \"pre:true,\";\n }\n // record original tag name for components using \"is\" attribute\n if (el.component) {\n data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n }\n // module data generation functions\n for (var i = 0; i < state.dataGenFns.length; i++) {\n data += state.dataGenFns[i](el);\n }\n // attributes\n if (el.attrs) {\n data += \"attrs:{\" + (genProps(el.attrs)) + \"},\";\n }\n // DOM props\n if (el.props) {\n data += \"domProps:{\" + (genProps(el.props)) + \"},\";\n }\n // event handlers\n if (el.events) {\n data += (genHandlers(el.events, false, state.warn)) + \",\";\n }\n if (el.nativeEvents) {\n data += (genHandlers(el.nativeEvents, true, state.warn)) + \",\";\n }\n // slot target\n // only for non-scoped slots\n if (el.slotTarget && !el.slotScope) {\n data += \"slot:\" + (el.slotTarget) + \",\";\n }\n // scoped slots\n if (el.scopedSlots) {\n data += (genScopedSlots(el.scopedSlots, state)) + \",\";\n }\n // component v-model\n if (el.model) {\n data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n }\n // inline-template\n if (el.inlineTemplate) {\n var inlineTemplate = genInlineTemplate(el, state);\n if (inlineTemplate) {\n data += inlineTemplate + \",\";\n }\n }\n data = data.replace(/,$/, '') + '}';\n // v-bind data wrap\n if (el.wrapData) {\n data = el.wrapData(data);\n }\n // v-on data wrap\n if (el.wrapListeners) {\n data = el.wrapListeners(data);\n }\n return data\n}\n\nfunction genDirectives (el, state) {\n var dirs = el.directives;\n if (!dirs) { return }\n var res = 'directives:[';\n var hasRuntime = false;\n var i, l, dir, needRuntime;\n for (i = 0, l = dirs.length; i < l; i++) {\n dir = dirs[i];\n needRuntime = true;\n var gen = state.directives[dir.name];\n if (gen) {\n // compile-time directive that manipulates AST.\n // returns true if it also needs a runtime counterpart.\n needRuntime = !!gen(el, dir, state.warn);\n }\n if (needRuntime) {\n hasRuntime = true;\n res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\\\"\" + (dir.arg) + \"\\\"\") : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n }\n }\n if (hasRuntime) {\n return res.slice(0, -1) + ']'\n }\n}\n\nfunction genInlineTemplate (el, state) {\n var ast = el.children[0];\n if (\"development\" !== 'production' && (\n el.children.length !== 1 || ast.type !== 1\n )) {\n state.warn('Inline-template components must have exactly one child element.');\n }\n if (ast.type === 1) {\n var inlineRenderFns = generate(ast, state.options);\n return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n }\n}\n\nfunction genScopedSlots (\n slots,\n state\n) {\n return (\"scopedSlots:_u([\" + (Object.keys(slots).map(function (key) {\n return genScopedSlot(key, slots[key], state)\n }).join(',')) + \"])\")\n}\n\nfunction genScopedSlot (\n key,\n el,\n state\n) {\n if (el.for && !el.forProcessed) {\n return genForScopedSlot(key, el, state)\n }\n var fn = \"function(\" + (String(el.slotScope)) + \"){\" +\n \"return \" + (el.tag === 'template'\n ? el.if\n ? ((el.if) + \"?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n : genChildren(el, state) || 'undefined'\n : genElement(el, state)) + \"}\";\n return (\"{key:\" + key + \",fn:\" + fn + \"}\")\n}\n\nfunction genForScopedSlot (\n key,\n el,\n state\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n el.forProcessed = true; // avoid recursion\n return \"_l((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + (genScopedSlot(key, el, state)) +\n '})'\n}\n\nfunction genChildren (\n el,\n state,\n checkSkip,\n altGenElement,\n altGenNode\n) {\n var children = el.children;\n if (children.length) {\n var el$1 = children[0];\n // optimize single v-for\n if (children.length === 1 &&\n el$1.for &&\n el$1.tag !== 'template' &&\n el$1.tag !== 'slot'\n ) {\n return (altGenElement || genElement)(el$1, state)\n }\n var normalizationType = checkSkip\n ? getNormalizationType(children, state.maybeComponent)\n : 0;\n var gen = altGenNode || genNode;\n return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType ? (\",\" + normalizationType) : ''))\n }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n children,\n maybeComponent\n) {\n var res = 0;\n for (var i = 0; i < children.length; i++) {\n var el = children[i];\n if (el.type !== 1) {\n continue\n }\n if (needsNormalization(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n res = 2;\n break\n }\n if (maybeComponent(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n res = 1;\n }\n }\n return res\n}\n\nfunction needsNormalization (el) {\n return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n if (node.type === 1) {\n return genElement(node, state)\n } if (node.type === 3 && node.isComment) {\n return genComment(node)\n } else {\n return genText(node)\n }\n}\n\nfunction genText (text) {\n return (\"_v(\" + (text.type === 2\n ? text.expression // no need for () because already wrapped in _s()\n : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n var slotName = el.slotName || '\"default\"';\n var children = genChildren(el, state);\n var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n var attrs = el.attrs && (\"{\" + (el.attrs.map(function (a) { return ((camelize(a.name)) + \":\" + (a.value)); }).join(',')) + \"}\");\n var bind$$1 = el.attrsMap['v-bind'];\n if ((attrs || bind$$1) && !children) {\n res += \",null\";\n }\n if (attrs) {\n res += \",\" + attrs;\n }\n if (bind$$1) {\n res += (attrs ? '' : ',null') + \",\" + bind$$1;\n }\n return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n componentName,\n el,\n state\n) {\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n var res = '';\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n /* istanbul ignore if */\n {\n res += \"\\\"\" + (prop.name) + \"\\\":\" + (transformSpecialNewlines(prop.value)) + \",\";\n }\n }\n return res.slice(0, -1)\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n return text\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/* */\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\n 'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n 'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast) {\n var errors = [];\n if (ast) {\n checkNode(ast, errors);\n }\n return errors\n}\n\nfunction checkNode (node, errors) {\n if (node.type === 1) {\n for (var name in node.attrsMap) {\n if (dirRE.test(name)) {\n var value = node.attrsMap[name];\n if (value) {\n if (name === 'v-for') {\n checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), errors);\n } else if (onRE.test(name)) {\n checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), errors);\n } else {\n checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), errors);\n }\n }\n }\n }\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n checkNode(node.children[i], errors);\n }\n }\n } else if (node.type === 2) {\n checkExpression(node.expression, node.text, errors);\n }\n}\n\nfunction checkEvent (exp, text, errors) {\n var stipped = exp.replace(stripStringRE, '');\n var keywordMatch = stipped.match(unaryOperatorsRE);\n if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n errors.push(\n \"avoid using JavaScript unary operator as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim())\n );\n }\n checkExpression(exp, text, errors);\n}\n\nfunction checkFor (node, text, errors) {\n checkExpression(node.for || '', text, errors);\n checkIdentifier(node.alias, 'v-for alias', text, errors);\n checkIdentifier(node.iterator1, 'v-for iterator', text, errors);\n checkIdentifier(node.iterator2, 'v-for iterator', text, errors);\n}\n\nfunction checkIdentifier (\n ident,\n type,\n text,\n errors\n) {\n if (typeof ident === 'string') {\n try {\n new Function((\"var \" + ident + \"=_\"));\n } catch (e) {\n errors.push((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())));\n }\n }\n}\n\nfunction checkExpression (exp, text, errors) {\n try {\n new Function((\"return \" + exp));\n } catch (e) {\n var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n if (keywordMatch) {\n errors.push(\n \"avoid using JavaScript keyword as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n Raw expression: \" + (text.trim())\n );\n } else {\n errors.push(\n \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n \" \" + exp + \"\\n\\n\" +\n \" Raw expression: \" + (text.trim()) + \"\\n\"\n );\n }\n }\n}\n\n/* */\n\nfunction createFunction (code, errors) {\n try {\n return new Function(code)\n } catch (err) {\n errors.push({ err: err, code: code });\n return noop\n }\n}\n\nfunction createCompileToFunctionFn (compile) {\n var cache = Object.create(null);\n\n return function compileToFunctions (\n template,\n options,\n vm\n ) {\n options = extend({}, options);\n var warn$$1 = options.warn || warn;\n delete options.warn;\n\n /* istanbul ignore if */\n if (true) {\n // detect possible CSP restriction\n try {\n new Function('return 1');\n } catch (e) {\n if (e.toString().match(/unsafe-eval|CSP/)) {\n warn$$1(\n 'It seems you are using the standalone build of Vue.js in an ' +\n 'environment with Content Security Policy that prohibits unsafe-eval. ' +\n 'The template compiler cannot work in this environment. Consider ' +\n 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n 'templates into render functions.'\n );\n }\n }\n }\n\n // check cache\n var key = options.delimiters\n ? String(options.delimiters) + template\n : template;\n if (cache[key]) {\n return cache[key]\n }\n\n // compile\n var compiled = compile(template, options);\n\n // check compilation errors/tips\n if (true) {\n if (compiled.errors && compiled.errors.length) {\n warn$$1(\n \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n vm\n );\n }\n if (compiled.tips && compiled.tips.length) {\n compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n }\n }\n\n // turn code into functions\n var res = {};\n var fnGenErrors = [];\n res.render = createFunction(compiled.render, fnGenErrors);\n res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n return createFunction(code, fnGenErrors)\n });\n\n // check function generation errors.\n // this should only happen if there is a bug in the compiler itself.\n // mostly for codegen development use\n /* istanbul ignore if */\n if (true) {\n if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n warn$$1(\n \"Failed to generate render function:\\n\\n\" +\n fnGenErrors.map(function (ref) {\n var err = ref.err;\n var code = ref.code;\n\n return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n }).join('\\n'),\n vm\n );\n }\n }\n\n return (cache[key] = res)\n }\n}\n\n/* */\n\nfunction createCompilerCreator (baseCompile) {\n return function createCompiler (baseOptions) {\n function compile (\n template,\n options\n ) {\n var finalOptions = Object.create(baseOptions);\n var errors = [];\n var tips = [];\n finalOptions.warn = function (msg, tip) {\n (tip ? tips : errors).push(msg);\n };\n\n if (options) {\n // merge custom modules\n if (options.modules) {\n finalOptions.modules =\n (baseOptions.modules || []).concat(options.modules);\n }\n // merge custom directives\n if (options.directives) {\n finalOptions.directives = extend(\n Object.create(baseOptions.directives || null),\n options.directives\n );\n }\n // copy other options\n for (var key in options) {\n if (key !== 'modules' && key !== 'directives') {\n finalOptions[key] = options[key];\n }\n }\n }\n\n var compiled = baseCompile(template, finalOptions);\n if (true) {\n errors.push.apply(errors, detectErrors(compiled.ast));\n }\n compiled.errors = errors;\n compiled.tips = tips;\n return compiled\n }\n\n return {\n compile: compile,\n compileToFunctions: createCompileToFunctionFn(compile)\n }\n }\n}\n\n/* */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n template,\n options\n) {\n var ast = parse(template.trim(), options);\n if (options.optimize !== false) {\n optimize(ast, options);\n }\n var code = generate(ast, options);\n return {\n ast: ast,\n render: code.render,\n staticRenderFns: code.staticRenderFns\n }\n});\n\n/* */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/* */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n div = div || document.createElement('div');\n div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n return div.innerHTML.indexOf('&#10;') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n \"development\" !== 'production' && warn(\n \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (\"development\" !== 'production' && !template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n if (true) {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (\"development\" !== 'production' && config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (\"development\" !== 'production' && config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue.compile = compileToFunctions;\n\nmodule.exports = Vue;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(16).setImmediate))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcz8yMzcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsK0JBQStCO0FBQ3JELHNCQUFzQixpQkFBaUI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsaUNBQWlDLEVBQUU7QUFDckYsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsY0FBYzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFVBQVU7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQyxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyx1Q0FBdUMsd0JBQXdCLEVBQUU7QUFDakUsMEJBQTBCOztBQUUxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZO0FBQ3BDLGtCQUFrQixZQUFZO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLHdDQUF3QyxFQUFFO0FBQzFDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiw4QkFBOEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLFNBQVMscUJBQXFCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNB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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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OztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCOztBQUUxQixrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHlCQUF5QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixvQkFBb0IsRUFBRTs7QUFFcEQ7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUMscUJBQXFCLCtCQUErQjtBQUNwRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QjtBQUNBLHNCQUFzQixpQ0FBaUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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O0FBQ1Q7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRCw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVDQUF1Qzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsMkJBQTJCLEVBQUU7QUFDdkUsS0FBSztBQUNMO0FBQ0EsMENBQTBDLDRCQUE0QixFQUFFO0FBQ3hFLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZUFBZTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixzQkFBc0I7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDOztBQUVoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBC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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0RUFBNEU7QUFDNUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGdCQUFnQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCO0FBQzFELEtBQUs7QUFDTCx3Q0FBd0Msa0JBQWtCO0FBQzFELEtBQUs7QUFDTCx3Q0FBd0MsMEJBQTBCO0FBQ2xFLEtBQUs7QUFDTCx3Q0FBd0MsaUJBQWlCO0FBQ3pELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsNEJBQTRCO0FBQzVCLDRCQUE0QjtBQUM1QiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QjtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZUFBZSxFQUFFLHVCQUF1QixVQUFVLEVBQUU7QUFDcEY7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQywyQkFBMkI7QUFDakU7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQywyQkFBMkI7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsNkVBQTZFO0FBQzdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsR0FBRztBQUNILHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxtQkFBbUI7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEMsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRkFBaUY7QUFDakYsNEJBQTRCO0FBQzVCO0FBQ0EsMkJBQTJCO0FBQzNCLHdCQUF3QixpRUFBaUU7QUFDekYsWUFBWSwwRkFBMEY7QUFDdEcsTUFBTSxLQUFLLDBDQUEwQztBQUNyRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxrQkFBa0I7QUFDL0Qsc0JBQXNCLCtDQUErQztBQUNyRSxpREFBaUQ7O0FBRWpEO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNEQUFzRDtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwyQkFBMkI7QUFDdEQsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sNkNBQTZDLEVBQUU7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDRCQUE0QixFQUFFO0FBQzNFLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLCtCQUErQixFQUFFO0FBQzlFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsYUFBYTs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLHFDQUFxQzs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHVDQUF1QyxFQUFFO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QywyQ0FBMkMsRUFBRTtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxPQUFPO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsOEJBQThCLEVBQUU7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsdUNBQXVDLEVBQUU7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEVBQTBFLDBCQUEwQixFQUFFO0FBQ3RHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FB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TztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLE9BQU87QUFDUCxTQUFTO0FBQ1QsUUFBUTtBQUNSLFFBQVE7QUFDUixPQUFPO0FBQ1A7QUFDQSx1Q0FBdUM7QUFDdkMsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0EscURBQXFELDJEQUEyRDs7QUFFaEg7QUFDQTtBQUNBLDZDQUE2QywyQkFBMkIsRUFBRTtBQUMxRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGdCQUFnQjtBQUM3Qyw2QkFBNkIsZ0JBQWdCO0FBQzdDLDZCQUE2QixnQkFBZ0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsbUVBQW1FO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDLHNCQUFzQixhQUFhOztBQUVuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxVQUFVO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLFVBQVU7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixlQUFlO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQiwwQkFBMEI7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDhCQUE4QjtBQUN2QztBQUNBLHVEQUF1RCw2REFBNkQ7QUFDcEgsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0JBQW9CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPLDRCQUE0QjtBQUNuQztBQUNBO0FBQ0EsT0FBTyxPQUFPO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHdCQUF3QixFQUFFO0FBQzFEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsT0FBTztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxXQUFXO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsbUJBQW1CLEVBQUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMscUJBQXFCLEVBQUU7QUFDckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFZ1ZS5qcyB2Mi41LjE2XG4gKiAoYykgMjAxNC0yMDE4IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vLyB0aGVzZSBoZWxwZXJzIHByb2R1Y2VzIGJldHRlciB2bSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nXG5mdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSBlLmcuIFtvYmplY3QgT2JqZWN0XVxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gdG9SYXdUeXBlICh2YWx1ZSkge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCdcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dlckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJzsgfSlcbn0pO1xuXG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufSk7XG5cbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG59KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQuLi4gZS5nLlxuICogUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHkgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmUgc2luY2UgbmF0aXZlIGJpbmQgaXNcbiAqIG5vdyBtb3JlIHBlcmZvcm1hbnQgaW4gbW9zdCBicm93c2VycywgYnV0IHJlbW92aW5nIGl0IHdvdWxkIGJlIGJyZWFraW5nIGZvclxuICogY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpbiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3JcbiAqIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuXG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxuZnVuY3Rpb24gbmF0aXZlQmluZCAoZm4sIGN0eCkge1xuICByZXR1cm4gZm4uYmluZChjdHgpXG59XG5cbnZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgPyBuYXRpdmVCaW5kXG4gIDogcG9seWZpbGxCaW5kO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF5LlxuICovXG5mdW5jdGlvbiB0b0FycmF5IChsaXN0LCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIHZhciBpID0gbGlzdC5sZW5ndGggLSBzdGFydDtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkge1xuICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQgKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdCAoYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyW2ldKSB7XG4gICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKVxuICovXG5mdW5jdGlvbiBub29wIChhLCBiLCBjKSB7fVxuXG4vKipcbiAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gKi9cbnZhciBubyA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmYWxzZTsgfTtcblxuLyoqXG4gKiBSZXR1cm4gc2FtZSB2YWx1ZVxuICovXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHN0YXRpYyBrZXlzIHN0cmluZyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXG4gKi9cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMgKG1vZHVsZXMpIHtcbiAgcmV0dXJuIG1vZHVsZXMucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgcmV0dXJuIGtleXMuY29uY2F0KG0uc3RhdGljS2V5cyB8fCBbXSlcbiAgfSwgW10pLmpvaW4oJywnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBsb29zZUluZGV4T2YgKGFyciwgdmFsKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKSB7IHJldHVybiBpIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBvbmNlLlxuICovXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgU1NSX0FUVFIgPSAnZGF0YS1zZXJ2ZXItcmVuZGVyZWQnO1xuXG52YXIgQVNTRVRfVFlQRVMgPSBbXG4gICdjb21wb25lbnQnLFxuICAnZGlyZWN0aXZlJyxcbiAgJ2ZpbHRlcidcbl07XG5cbnZhciBMSUZFQ1lDTEVfSE9PS1MgPSBbXG4gICdiZWZvcmVDcmVhdGUnLFxuICAnY3JlYXRlZCcsXG4gICdiZWZvcmVNb3VudCcsXG4gICdtb3VudGVkJyxcbiAgJ2JlZm9yZVVwZGF0ZScsXG4gICd1cGRhdGVkJyxcbiAgJ2JlZm9yZURlc3Ryb3knLFxuICAnZGVzdHJveWVkJyxcbiAgJ2FjdGl2YXRlZCcsXG4gICdkZWFjdGl2YXRlZCcsXG4gICdlcnJvckNhcHR1cmVkJ1xuXTtcblxuLyogICovXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSlcblxuLyogICovXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICB2YXIgYyA9IChzdHIgKyAnJykuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1RlxufVxuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYgKG9iaiwga2V5LCB2YWwsIGVudW1lcmFibGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgdmFsdWU6IHZhbCxcbiAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNpbXBsZSBwYXRoLlxuICovXG52YXIgYmFpbFJFID0gL1teXFx3LiRdLztcbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFvYmopIHsgcmV0dXJuIH1cbiAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG52YXIgaGFzUHJvdG8gPSAnX19wcm90b19fJyBpbiB7fTtcblxuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIGluV2VleCA9IHR5cGVvZiBXWEVudmlyb25tZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIVdYRW52aXJvbm1lbnQucGxhdGZvcm07XG52YXIgd2VleFBsYXRmb3JtID0gaW5XZWV4ICYmIFdYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKTtcbnZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzSUUgPSBVQSAmJiAvbXNpZXx0cmlkZW50Ly50ZXN0KFVBKTtcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xudmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xudmFyIGlzQW5kcm9pZCA9IChVQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwKSB8fCAod2VleFBsYXRmb3JtID09PSAnYW5kcm9pZCcpO1xudmFyIGlzSU9TID0gKFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSkpIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdpb3MnKTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWluV2VleCAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIHRyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm0gfHwge307XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG5cbnZhciB1aWQgPSAwO1xuXG4vKipcbiAqIEEgZGVwIGlzIGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICogZGlyZWN0aXZlcyBzdWJzY3JpYmluZyB0byBpdC5cbiAqL1xudmFyIERlcCA9IGZ1bmN0aW9uIERlcCAoKSB7XG4gIHRoaXMuaWQgPSB1aWQrKztcbiAgdGhpcy5zdWJzID0gW107XG59O1xuXG5EZXAucHJvdG90eXBlLmFkZFN1YiA9IGZ1bmN0aW9uIGFkZFN1YiAoc3ViKSB7XG4gIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG59O1xuXG5EZXAucHJvdG90eXBlLnJlbW92ZVN1YiA9IGZ1bmN0aW9uIHJlbW92ZVN1YiAoc3ViKSB7XG4gIHJlbW92ZSh0aGlzLnN1YnMsIHN1Yik7XG59O1xuXG5EZXAucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgRGVwLnRhcmdldC5hZGREZXAodGhpcyk7XG4gIH1cbn07XG5cbkRlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5ICgpIHtcbiAgLy8gc3RhYmlsaXplIHRoZSBzdWJzY3JpYmVyIGxpc3QgZmlyc3RcbiAgdmFyIHN1YnMgPSB0aGlzLnN1YnMuc2xpY2UoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIHRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIHRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb25seSBvbmVcbi8vIHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkIGF0IGFueSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAoX3RhcmdldCkge1xuICBpZiAoRGVwLnRhcmdldCkgeyB0YXJnZXRTdGFjay5wdXNoKERlcC50YXJnZXQpOyB9XG4gIERlcC50YXJnZXQgPSBfdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0U3RhY2sucG9wKCk7XG59XG5cbi8qICAqL1xuXG52YXIgVk5vZGUgPSBmdW5jdGlvbiBWTm9kZSAoXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIGVsbSxcbiAgY29udGV4dCxcbiAgY29tcG9uZW50T3B0aW9ucyxcbiAgYXN5bmNGYWN0b3J5XG4pIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgdGhpcy5lbG0gPSBlbG07XG4gIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcbiAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gIHRoaXMucmF3ID0gZmFsc2U7XG4gIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xuICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gIHRoaXMuaXNPbmNlID0gZmFsc2U7XG4gIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGNoaWxkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbi8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgaWYgKCB0ZXh0ID09PSB2b2lkIDAgKSB0ZXh0ID0gJyc7XG5cbiAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICByZXR1cm4gbm9kZVxufTtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlICh2YWwpIHtcbiAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSlcbn1cblxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNsb25lVk5vZGUgKHZub2RlKSB7XG4gIHZhciBjbG9uZWQgPSBuZXcgVk5vZGUoXG4gICAgdm5vZGUudGFnLFxuICAgIHZub2RlLmRhdGEsXG4gICAgdm5vZGUuY2hpbGRyZW4sXG4gICAgdm5vZGUudGV4dCxcbiAgICB2bm9kZS5lbG0sXG4gICAgdm5vZGUuY29udGV4dCxcbiAgICB2bm9kZS5jb21wb25lbnRPcHRpb25zLFxuICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICApO1xuICBjbG9uZWQubnMgPSB2bm9kZS5ucztcbiAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gIGNsb25lZC5rZXkgPSB2bm9kZS5rZXk7XG4gIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4gIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gIGNsb25lZC5mbk9wdGlvbnMgPSB2bm9kZS5mbk9wdGlvbnM7XG4gIGNsb25lZC5mblNjb3BlSWQgPSB2bm9kZS5mblNjb3BlSWQ7XG4gIGNsb25lZC5pc0Nsb25lZCA9IHRydWU7XG4gIHJldHVybiBjbG9uZWRcbn1cblxuLypcbiAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gKi9cblxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcblxudmFyIG1ldGhvZHNUb1BhdGNoID0gW1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXTtcblxuLyoqXG4gKiBJbnRlcmNlcHQgbXV0YXRpbmcgbWV0aG9kcyBhbmQgZW1pdCBldmVudHNcbiAqL1xubWV0aG9kc1RvUGF0Y2guZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIC8vIGNhY2hlIG9yaWdpbmFsIG1ldGhvZFxuICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gIGRlZihhcnJheU1ldGhvZHMsIG1ldGhvZCwgZnVuY3Rpb24gbXV0YXRvciAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIHZhciBvYiA9IHRoaXMuX19vYl9fO1xuICAgIHZhciBpbnNlcnRlZDtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAncHVzaCc6XG4gICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzLnNsaWNlKDIpO1xuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpZiAoaW5zZXJ0ZWQpIHsgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTsgfVxuICAgIC8vIG5vdGlmeSBjaGFuZ2VcbiAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KTtcbn0pO1xuXG4vKiAgKi9cblxudmFyIGFycmF5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFycmF5TWV0aG9kcyk7XG5cbi8qKlxuICogSW4gc29tZSBjYXNlcyB3ZSBtYXkgd2FudCB0byBkaXNhYmxlIG9ic2VydmF0aW9uIGluc2lkZSBhIGNvbXBvbmVudCdzXG4gKiB1cGRhdGUgY29tcHV0YXRpb24uXG4gKi9cbnZhciBzaG91bGRPYnNlcnZlID0gdHJ1ZTtcblxuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nICh2YWx1ZSkge1xuICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG59XG5cbi8qKlxuICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0aGUgdGFyZ2V0XG4gKiBvYmplY3QncyBwcm9wZXJ0eSBrZXlzIGludG8gZ2V0dGVyL3NldHRlcnMgdGhhdFxuICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gKi9cbnZhciBPYnNlcnZlciA9IGZ1bmN0aW9uIE9ic2VydmVyICh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMuZGVwID0gbmV3IERlcCgpO1xuICB0aGlzLnZtQ291bnQgPSAwO1xuICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFyIGF1Z21lbnQgPSBoYXNQcm90b1xuICAgICAgPyBwcm90b0F1Z21lbnRcbiAgICAgIDogY29weUF1Z21lbnQ7XG4gICAgYXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndhbGsodmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFdhbGsgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHByb3RvdHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuICB0YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG59XG5cbi8qKlxuICogQXVnbWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYjtcbiAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgb2IgPSB2YWx1ZS5fX29iX187XG4gIH0gZWxzZSBpZiAoXG4gICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBvYi52bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVhY3RpdmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxvd1xuKSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgaWYgKCFnZXR0ZXIgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhbCA9IG9ialtrZXldO1xuICB9XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG5cbiAgdmFyIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKHZhbCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIgKCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICBpZiAoc2V0dGVyKSB7XG4gICAgICAgIHNldHRlci5jYWxsKG9iaiwgbmV3VmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IG5ld1ZhbDtcbiAgICAgIH1cbiAgICAgIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKG5ld1ZhbCk7XG4gICAgICBkZXAubm90aWZ5KCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QuIEFkZHMgdGhlIG5ldyBwcm9wZXJ0eSBhbmRcbiAqIHRyaWdnZXJzIGNoYW5nZSBub3RpZmljYXRpb24gaWYgdGhlIHByb3BlcnR5IGRvZXNuJ3RcbiAqIGFscmVhZHkgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KSlcbiAgKSB7XG4gICAgd2FybigoXCJDYW5ub3Qgc2V0IHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIiArICgodGFyZ2V0KSkpKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICB0YXJnZXQubGVuZ3RoID0gTWF0aC5tYXgodGFyZ2V0Lmxlbmd0aCwga2V5KTtcbiAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSwgdmFsKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKGtleSBpbiB0YXJnZXQgJiYgIShrZXkgaW4gT2JqZWN0LnByb3RvdHlwZSkpIHtcbiAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgdmFyIG9iID0gKHRhcmdldCkuX19vYl9fO1xuICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnQXZvaWQgYWRkaW5nIHJlYWN0aXZlIHByb3BlcnRpZXMgdG8gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJ1xuICAgICk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmICghb2IpIHtcbiAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgZGVmaW5lUmVhY3RpdmUob2IudmFsdWUsIGtleSwgdmFsKTtcbiAgb2IuZGVwLm5vdGlmeSgpO1xuICByZXR1cm4gdmFsXG59XG5cbi8qKlxuICogRGVsZXRlIGEgcHJvcGVydHkgYW5kIHRyaWdnZXIgY2hhbmdlIGlmIG5lY2Vzc2FyeS5cbiAqL1xuZnVuY3Rpb24gZGVsICh0YXJnZXQsIGtleSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KSlcbiAgKSB7XG4gICAgd2FybigoXCJDYW5ub3QgZGVsZXRlIHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIiArICgodGFyZ2V0KSkpKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9iID0gKHRhcmdldCkuX19vYl9fO1xuICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnQXZvaWQgZGVsZXRpbmcgcHJvcGVydGllcyBvbiBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJ1xuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgZGVsZXRlIHRhcmdldFtrZXldO1xuICBpZiAoIW9iKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgb2IuZGVwLm5vdGlmeSgpO1xufVxuXG4vKipcbiAqIENvbGxlY3QgZGVwZW5kZW5jaWVzIG9uIGFycmF5IGVsZW1lbnRzIHdoZW4gdGhlIGFycmF5IGlzIHRvdWNoZWQsIHNpbmNlXG4gKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kQXJyYXkgKHZhbHVlKSB7XG4gIGZvciAodmFyIGUgPSAodm9pZCAwKSwgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBlID0gdmFsdWVbaV07XG4gICAgZSAmJiBlLl9fb2JfXyAmJiBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBPcHRpb24gb3ZlcndyaXRpbmcgc3RyYXRlZ2llcyBhcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXG4gKiBob3cgdG8gbWVyZ2UgYSBwYXJlbnQgb3B0aW9uIHZhbHVlIGFuZCBhIGNoaWxkIG9wdGlvblxuICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gKi9cbnZhciBzdHJhdHMgPSBjb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuXG4vKipcbiAqIE9wdGlvbnMgd2l0aCByZXN0cmljdGlvbnNcbiAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgc3RyYXRzLmVsID0gc3RyYXRzLnByb3BzRGF0YSA9IGZ1bmN0aW9uIChwYXJlbnQsIGNoaWxkLCB2bSwga2V5KSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJvcHRpb24gXFxcIlwiICsga2V5ICsgXCJcXFwiIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluc3RhbmNlIFwiICtcbiAgICAgICAgJ2NyZWF0aW9uIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKVxuICB9O1xufVxuXG4vKipcbiAqIEhlbHBlciB0aGF0IHJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gZGF0YSBvYmplY3RzIHRvZ2V0aGVyLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEgKHRvLCBmcm9tKSB7XG4gIGlmICghZnJvbSkgeyByZXR1cm4gdG8gfVxuICB2YXIga2V5LCB0b1ZhbCwgZnJvbVZhbDtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcm9tKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiYgaXNQbGFpbk9iamVjdChmcm9tVmFsKSkge1xuICAgICAgbWVyZ2VEYXRhKHRvVmFsLCBmcm9tVmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogRGF0YVxuICovXG5mdW5jdGlvbiBtZXJnZURhdGFPckZuIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBiZSBmdW5jdGlvbnNcbiAgICBpZiAoIWNoaWxkVmFsKSB7XG4gICAgICByZXR1cm4gcGFyZW50VmFsXG4gICAgfVxuICAgIGlmICghcGFyZW50VmFsKSB7XG4gICAgICByZXR1cm4gY2hpbGRWYWxcbiAgICB9XG4gICAgLy8gd2hlbiBwYXJlbnRWYWwgJiBjaGlsZFZhbCBhcmUgYm90aCBwcmVzZW50LFxuICAgIC8vIHdlIG5lZWQgdG8gcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAgIC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xuICAgIC8vIGNoZWNrIGlmIHBhcmVudFZhbCBpcyBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZVxuICAgIC8vIGl0IGhhcyB0byBiZSBhIGZ1bmN0aW9uIHRvIHBhc3MgcHJldmlvdXMgbWVyZ2VzLlxuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4gKCkge1xuICAgICAgcmV0dXJuIG1lcmdlRGF0YShcbiAgICAgICAgdHlwZW9mIGNoaWxkVmFsID09PSAnZnVuY3Rpb24nID8gY2hpbGRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IGNoaWxkVmFsLFxuICAgICAgICB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nID8gcGFyZW50VmFsLmNhbGwodGhpcywgdGhpcykgOiBwYXJlbnRWYWxcbiAgICAgIClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZEluc3RhbmNlRGF0YUZuICgpIHtcbiAgICAgIC8vIGluc3RhbmNlIG1lcmdlXG4gICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdHlwZW9mIGNoaWxkVmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gY2hpbGRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogY2hpbGRWYWw7XG4gICAgICB2YXIgZGVmYXVsdERhdGEgPSB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gcGFyZW50VmFsLmNhbGwodm0sIHZtKVxuICAgICAgICA6IHBhcmVudFZhbDtcbiAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlRGF0YShpbnN0YW5jZURhdGEsIGRlZmF1bHREYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHREYXRhXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnN0cmF0cy5kYXRhID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICBpZiAoY2hpbGRWYWwgJiYgdHlwZW9mIGNoaWxkVmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0aW9uICcgK1xuICAgICAgICAndGhhdCByZXR1cm5zIGEgcGVyLWluc3RhbmNlIHZhbHVlIGluIGNvbXBvbmVudCAnICtcbiAgICAgICAgJ2RlZmluaXRpb25zLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcGFyZW50VmFsXG4gICAgfVxuICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwpXG4gIH1cblxuICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSlcbn07XG5cbi8qKlxuICogSG9va3MgYW5kIHByb3BzIGFyZSBtZXJnZWQgYXMgYXJyYXlzLlxuICovXG5mdW5jdGlvbiBtZXJnZUhvb2sgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsXG4pIHtcbiAgcmV0dXJuIGNoaWxkVmFsXG4gICAgPyBwYXJlbnRWYWxcbiAgICAgID8gcGFyZW50VmFsLmNvbmNhdChjaGlsZFZhbClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICA6IFtjaGlsZFZhbF1cbiAgICA6IHBhcmVudFZhbFxufVxuXG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICBpZiAoY2hpbGRWYWwpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSB7fTtcbiAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGRWYWwpIHtcbiAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXkkMV07XG4gICAgaWYgKHBhcmVudCAmJiAhQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICB9XG4gICAgcmV0W2tleSQxXSA9IHBhcmVudFxuICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5qZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghL15bYS16QS1aXVtcXHctXSokLy50ZXN0KG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGNvbXBvbmVudCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiLiBDb21wb25lbnQgbmFtZXMgJyArXG4gICAgICAnY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIGh5cGhlbiwgJyArXG4gICAgICAnYW5kIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlci4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgaWYgKCFpbmplY3QpIHsgcmV0dXJuIH1cbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYsIHVwZGF0ZTogZGVmIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gIH1cblxuICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG4gIHZhciBleHRlbmRzRnJvbSA9IGNoaWxkLmV4dGVuZHM7XG4gIGlmIChleHRlbmRzRnJvbSkge1xuICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGV4dGVuZHNGcm9tLCB2bSk7XG4gIH1cbiAgaWYgKGNoaWxkLm1peGlucykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XG4gICAgfVxuICB9XG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gIHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcCAoXG4gIGtleSxcbiAgcHJvcE9wdGlvbnMsXG4gIHByb3BzRGF0YSxcbiAgdm1cbikge1xuICB2YXIgcHJvcCA9IHByb3BPcHRpb25zW2tleV07XG4gIHZhciBhYnNlbnQgPSAhaGFzT3duKHByb3BzRGF0YSwga2V5KTtcbiAgdmFyIHZhbHVlID0gcHJvcHNEYXRhW2tleV07XG4gIC8vIGJvb2xlYW4gY2FzdGluZ1xuICB2YXIgYm9vbGVhbkluZGV4ID0gZ2V0VHlwZUluZGV4KEJvb2xlYW4sIHByb3AudHlwZSk7XG4gIGlmIChib29sZWFuSW5kZXggPiAtMSkge1xuICAgIGlmIChhYnNlbnQgJiYgIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBoeXBoZW5hdGUoa2V5KSkge1xuICAgICAgLy8gb25seSBjYXN0IGVtcHR5IHN0cmluZyAvIHNhbWUgbmFtZSB0byBib29sZWFuIGlmXG4gICAgICAvLyBib29sZWFuIGhhcyBoaWdoZXIgcHJpb3JpdHlcbiAgICAgIHZhciBzdHJpbmdJbmRleCA9IGdldFR5cGVJbmRleChTdHJpbmcsIHByb3AudHlwZSk7XG4gICAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4KSB7XG4gICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gY2hlY2sgZGVmYXVsdCB2YWx1ZVxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlID0gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KTtcbiAgICAvLyBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhIGZyZXNoIGNvcHksXG4gICAgLy8gbWFrZSBzdXJlIHRvIG9ic2VydmUgaXQuXG4gICAgdmFyIHByZXZTaG91bGRPYnNlcnZlID0gc2hvdWxkT2JzZXJ2ZTtcbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHByZXZTaG91bGRPYnNlcnZlKTtcbiAgfVxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIC8vIHNraXAgdmFsaWRhdGlvbiBmb3Igd2VleCByZWN5Y2xlLWxpc3QgY2hpbGQgY29tcG9uZW50IHByb3BzXG4gICAgIShmYWxzZSAmJiBpc09iamVjdCh2YWx1ZSkgJiYgKCdAYmluZGluZycgaW4gdmFsdWUpKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG4gIGlmICghdmFsaWQpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIuXCIgK1xuICAgICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSkgK1xuICAgICAgXCIsIGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBoYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAodm0pIHtcbiAgICB2YXIgY3VyID0gdm07XG4gICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHsgcmV0dXJuIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlLCBjdXIsICdlcnJvckNhcHR1cmVkIGhvb2snKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGdsb2JhbEhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjb25maWcuZXJyb3JIYW5kbGVyLmNhbGwobnVsbCwgZXJyLCB2bSwgaW5mbylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG4vKiBnbG9iYWxzIE1lc3NhZ2VDaGFubmVsICovXG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIGJvdGggbWljcm90YXNrcyBhbmQgKG1hY3JvKSB0YXNrcy5cbi8vIEluIDwgMi40IHdlIHVzZWQgbWljcm90YXNrcyBldmVyeXdoZXJlLCBidXQgdGhlcmUgYXJlIHNvbWUgc2NlbmFyaW9zIHdoZXJlXG4vLyBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbi8vIHNlcXVlbnRpYWwgZXZlbnRzIChlLmcuICM0NTIxLCAjNjY5MCkgb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lXG4vLyBldmVudCAoIzY1NjYpLiBIb3dldmVyLCB1c2luZyAobWFjcm8pIHRhc2tzIGV2ZXJ5d2hlcmUgYWxzbyBoYXMgc3VidGxlIHByb2JsZW1zXG4vLyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnQgKGUuZy4gIzY4MTMsIG91dC1pbiB0cmFuc2l0aW9ucykuXG4vLyBIZXJlIHdlIHVzZSBtaWNyb3Rhc2sgYnkgZGVmYXVsdCwgYnV0IGV4cG9zZSBhIHdheSB0byBmb3JjZSAobWFjcm8pIHRhc2sgd2hlblxuLy8gbmVlZGVkIChlLmcuIGluIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIGJ5IHYtb24pLlxudmFyIG1pY3JvVGltZXJGdW5jO1xudmFyIG1hY3JvVGltZXJGdW5jO1xudmFyIHVzZU1hY3JvVGFzayA9IGZhbHNlO1xuXG4vLyBEZXRlcm1pbmUgKG1hY3JvKSB0YXNrIGRlZmVyIGltcGxlbWVudGF0aW9uLlxuLy8gVGVjaG5pY2FsbHkgc2V0SW1tZWRpYXRlIHNob3VsZCBiZSB0aGUgaWRlYWwgY2hvaWNlLCBidXQgaXQncyBvbmx5IGF2YWlsYWJsZVxuLy8gaW4gSUUuIFRoZSBvbmx5IHBvbHlmaWxsIHRoYXQgY29uc2lzdGVudGx5IHF1ZXVlcyB0aGUgY2FsbGJhY2sgYWZ0ZXIgYWxsIERPTVxuLy8gZXZlbnRzIHRyaWdnZXJlZCBpbiB0aGUgc2FtZSBsb29wIGlzIGJ5IHVzaW5nIE1lc3NhZ2VDaGFubmVsLlxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICBtYWNyb1RpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xuICB9O1xufSBlbHNlIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTWVzc2FnZUNoYW5uZWwpIHx8XG4gIC8vIFBoYW50b21KU1xuICBNZXNzYWdlQ2hhbm5lbC50b1N0cmluZygpID09PSAnW29iamVjdCBNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yXSdcbikpIHtcbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoQ2FsbGJhY2tzO1xuICBtYWNyb1RpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0LnBvc3RNZXNzYWdlKDEpO1xuICB9O1xufSBlbHNlIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgbWFjcm9UaW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gIH07XG59XG5cbi8vIERldGVybWluZSBtaWNyb3Rhc2sgZGVmZXIgaW1wbGVtZW50YXRpb24uXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gIHZhciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIG1pY3JvVGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gaW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gZmFsbGJhY2sgdG8gbWFjcm9cbiAgbWljcm9UaW1lckZ1bmMgPSBtYWNyb1RpbWVyRnVuYztcbn1cblxuLyoqXG4gKiBXcmFwIGEgZnVuY3Rpb24gc28gdGhhdCBpZiBhbnkgY29kZSBpbnNpZGUgdHJpZ2dlcnMgc3RhdGUgY2hhbmdlLFxuICogdGhlIGNoYW5nZXMgYXJlIHF1ZXVlZCB1c2luZyBhIChtYWNybykgdGFzayBpbnN0ZWFkIG9mIGEgbWljcm90YXNrLlxuICovXG5mdW5jdGlvbiB3aXRoTWFjcm9UYXNrIChmbikge1xuICByZXR1cm4gZm4uX3dpdGhUYXNrIHx8IChmbi5fd2l0aFRhc2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgdXNlTWFjcm9UYXNrID0gdHJ1ZTtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB1c2VNYWNyb1Rhc2sgPSBmYWxzZTtcbiAgICByZXR1cm4gcmVzXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gIHZhciBfcmVzb2x2ZTtcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgcGVuZGluZyA9IHRydWU7XG4gICAgaWYgKHVzZU1hY3JvVGFzaykge1xuICAgICAgbWFjcm9UaW1lckZ1bmMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWljcm9UaW1lckZ1bmMoKTtcbiAgICB9XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHBlcmYgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAgIHBlcmYgJiZcbiAgICBwZXJmLm1hcmsgJiZcbiAgICBwZXJmLm1lYXN1cmUgJiZcbiAgICBwZXJmLmNsZWFyTWFya3MgJiZcbiAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgKSB7XG4gICAgbWFyayA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHBlcmYubWFyayh0YWcpOyB9O1xuICAgIG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgcGVyZi5tZWFzdXJlKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1lYXN1cmVzKG5hbWUpO1xuICAgIH07XG4gIH1cbn1cblxuLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbnZhciBpbml0UHJveHk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciBoYXNQcm94eSA9XG4gICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG5cbiAgaWYgKGhhc1Byb3h5KSB7XG4gICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyID0gbWFrZU1hcCgnc3RvcCxwcmV2ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCcpO1xuICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzQnVpbHRJbk1vZGlmaWVyKGtleSkpIHtcbiAgICAgICAgICB3YXJuKChcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiICsga2V5KSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgaGFzSGFuZGxlciA9IHtcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzKGtleSkgfHwga2V5LmNoYXJBdCgwKSA9PT0gJ18nO1xuICAgICAgaWYgKCFoYXMgJiYgIWlzQWxsb3dlZCkge1xuICAgICAgICB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWRcbiAgICB9XG4gIH07XG5cbiAgdmFyIGdldEhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKHRhcmdldCwga2V5KSB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYgIShrZXkgaW4gdGFyZ2V0KSkge1xuICAgICAgICB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zKSB7XG4gIGZ1bmN0aW9uIGludm9rZXIgKCkge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIHZhciBmbnMgPSBpbnZva2VyLmZucztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbnMpKSB7XG4gICAgICB2YXIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb25lZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjbG9uZWRbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzJDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGZucy5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG4gIGludm9rZXIuZm5zID0gZm5zO1xuICByZXR1cm4gaW52b2tlclxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcnMgKFxuICBvbixcbiAgb2xkT24sXG4gIGFkZCxcbiAgcmVtb3ZlJCQxLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50Lm9uY2UsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZW5zdXJlQ3RvciAoY29tcCwgYmFzZSkge1xuICBpZiAoXG4gICAgY29tcC5fX2VzTW9kdWxlIHx8XG4gICAgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxuICApIHtcbiAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICB9XG4gIHJldHVybiBpc09iamVjdChjb21wKVxuICAgID8gYmFzZS5leHRlbmQoY29tcClcbiAgICA6IGNvbXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlciAoXG4gIGZhY3RvcnksXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICBub2RlLmFzeW5jTWV0YSA9IHsgZGF0YTogZGF0YSwgY29udGV4dDogY29udGV4dCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0YWc6IHRhZyB9O1xuICByZXR1cm4gbm9kZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQgKFxuICBmYWN0b3J5LFxuICBiYXNlQ3RvcixcbiAgY29udGV4dFxuKSB7XG4gIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wXG4gIH1cblxuICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZFxuICB9XG5cbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LmNvbnRleHRzKSkge1xuICAgIC8vIGFscmVhZHkgcGVuZGluZ1xuICAgIGZhY3RvcnkuY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29udGV4dHMgPSBmYWN0b3J5LmNvbnRleHRzID0gW2NvbnRleHRdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcblxuICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY29udGV4dHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnRleHRzW2ldLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRcbiAgICAgIGZhY3RvcnkucmVzb2x2ZWQgPSBlbnN1cmVDdG9yKHJlcywgYmFzZUN0b3IpO1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9ub3VzIGR1cmluZyBTU1IpXG4gICAgICBpZiAoIXN5bmMpIHtcbiAgICAgICAgZm9yY2VSZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiICsgKFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAocmVhc29uID8gKFwiXFxuUmVhc29uOiBcIiArIHJlYXNvbikgOiAnJylcbiAgICAgICk7XG4gICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgIGZhY3RvcnkuZXJyb3IgPSB0cnVlO1xuICAgICAgICBmb3JjZVJlbmRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vICgpID0+IFByb21pc2VcbiAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKHJlcy5jb21wb25lbnQpICYmIHR5cGVvZiByZXMuY29tcG9uZW50LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICAgICAgICAgID8gKFwidGltZW91dCAoXCIgKyAocmVzLnRpbWVvdXQpICsgXCJtcylcIilcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHJlcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN5bmMgPSBmYWxzZTtcbiAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ1xuICAgICAgPyBmYWN0b3J5LmxvYWRpbmdDb21wXG4gICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCAoY2hpbGRyZW4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgIHJldHVybiBjXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyAodm0pIHtcbiAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciB0YXJnZXQ7XG5cbmZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuLCBvbmNlKSB7XG4gIGlmIChvbmNlKSB7XG4gICAgdGFyZ2V0LiRvbmNlKGV2ZW50LCBmbik7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0LiRvbihldmVudCwgZm4pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgdm0pO1xuICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB0aGlzJDEuJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgLy8gYWxsXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBhcnJheSBvZiBldmVudHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRoaXMkMS4kb2ZmKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgaWYgKGZuKSB7XG4gICAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgICB2YXIgY2I7XG4gICAgICB2YXIgaSQxID0gY2JzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpJDEtLSkge1xuICAgICAgICBjYiA9IGNic1tpJDFdO1xuICAgICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICAgIGNicy5zcGxpY2UoaSQxLCAxKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICB0aXAoXG4gICAgICAgICAgXCJFdmVudCBcXFwiXCIgKyBsb3dlckNhc2VFdmVudCArIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgIFwidi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtcbiAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIChoeXBoZW5hdGUoZXZlbnQpKSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoY2JzKSB7XG4gICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2JzW2ldLmFwcGx5KHZtLCBhcmdzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAoXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIHZhciBzbG90cyA9IHt9O1xuICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHNsb3RzXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgLy8gcmVtb3ZlIHNsb3QgYXR0cmlidXRlIGlmIHRoZSBub2RlIGlzIHJlc29sdmVkIGFzIGEgVnVlIHNsb3Qgbm9kZVxuICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgIH1cbiAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcbiAgICAgIGRhdGEgJiYgZGF0YS5zbG90ICE9IG51bGxcbiAgICApIHtcbiAgICAgIHZhciBuYW1lID0gZGF0YS5zbG90O1xuICAgICAgdmFyIHNsb3QgPSAoc2xvdHNbbmFtZV0gfHwgKHNsb3RzW25hbWVdID0gW10pKTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgc2xvdC5wdXNoLmFwcGx5KHNsb3QsIGNoaWxkLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsb3QucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIChzbG90cy5kZWZhdWx0IHx8IChzbG90cy5kZWZhdWx0ID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgLy8gaWdub3JlIHNsb3RzIHRoYXQgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlXG4gIGZvciAodmFyIG5hbWUkMSBpbiBzbG90cykge1xuICAgIGlmIChzbG90c1tuYW1lJDFdLmV2ZXJ5KGlzV2hpdGVzcGFjZSkpIHtcbiAgICAgIGRlbGV0ZSBzbG90c1tuYW1lJDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2xvdHNcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4gIHJldHVybiAobm9kZS5pc0NvbW1lbnQgJiYgIW5vZGUuYXN5bmNGYWN0b3J5KSB8fCBub2RlLnRleHQgPT09ICcgJ1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICBmbnMsIC8vIHNlZSBmbG93L3Zub2RlXG4gIHJlc1xuKSB7XG4gIHJlcyA9IHJlcyB8fCB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbnNbaV0pKSB7XG4gICAgICByZXNvbHZlU2NvcGVkU2xvdHMoZm5zW2ldLCByZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbZm5zW2ldLmtleV0gPSBmbnNbaV0uZm47XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG5cbiAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJlbnRcbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBpZiAocGFyZW50ICYmICFvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gIH1cblxuICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuXG4gIHZtLiRjaGlsZHJlbiA9IFtdO1xuICB2bS4kcmVmcyA9IHt9O1xuXG4gIHZtLl93YXRjaGVyID0gbnVsbDtcbiAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gIHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNNb3VudGVkKSB7XG4gICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgIH1cbiAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18oXG4gICAgICAgIHZtLiRlbCwgdm5vZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyxcbiAgICAgICAgdm0uJG9wdGlvbnMuX3BhcmVudEVsbSxcbiAgICAgICAgdm0uJG9wdGlvbnMuX3JlZkVsbVxuICAgICAgKTtcbiAgICAgIC8vIG5vIG5lZWQgZm9yIHRoZSByZWYgbm9kZXMgYWZ0ZXIgaW5pdGlhbCBwYXRjaFxuICAgICAgLy8gdGhpcyBwcmV2ZW50cyBrZWVwaW5nIGEgZGV0YWNoZWQgRE9NIHRyZWUgaW4gbWVtb3J5ICgjNTg1MSlcbiAgICAgIHZtLiRvcHRpb25zLl9wYXJlbnRFbG0gPSB2bS4kb3B0aW9ucy5fcmVmRWxtID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBhY3RpdmVJbnN0YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIG51bGwsIHRydWUgLyogaXNSZW5kZXJXYXRjaGVyICovKTtcbiAgaHlkcmF0aW5nID0gZmFsc2U7XG5cbiAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcbiAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgaWYgKHZtLiR2bm9kZSA9PSBudWxsKSB7XG4gICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgY2FsbEhvb2sodm0sICdtb3VudGVkJyk7XG4gIH1cbiAgcmV0dXJuIHZtXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50IChcbiAgdm0sXG4gIHByb3BzRGF0YSxcbiAgbGlzdGVuZXJzLFxuICBwYXJlbnRWbm9kZSxcbiAgcmVuZGVyQ2hpbGRyZW5cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICAvLyBkZXRlcm1pbmUgd2hldGhlciBjb21wb25lbnQgaGFzIHNsb3QgY2hpbGRyZW5cbiAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW5cbiAgdmFyIGhhc0NoaWxkcmVuID0gISEoXG4gICAgcmVuZGVyQ2hpbGRyZW4gfHwgICAgICAgICAgICAgICAvLyBoYXMgbmV3IHN0YXRpYyBzbG90c1xuICAgIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiB8fCAgLy8gaGFzIG9sZCBzdGF0aWMgc2xvdHNcbiAgICBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzIHx8IC8vIGhhcyBuZXcgc2NvcGVkIHNsb3RzXG4gICAgdm0uJHNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAvLyBoYXMgb2xkIHNjb3BlZCBzbG90c1xuICApO1xuXG4gIHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICB2bS4kdm5vZGUgPSBwYXJlbnRWbm9kZTsgLy8gdXBkYXRlIHZtJ3MgcGxhY2Vob2xkZXIgbm9kZSB3aXRob3V0IHJlLXJlbmRlclxuXG4gIGlmICh2bS5fdm5vZGUpIHsgLy8gdXBkYXRlIGNoaWxkIHRyZWUncyBwYXJlbnRcbiAgICB2bS5fdm5vZGUucGFyZW50ID0gcGFyZW50Vm5vZGU7XG4gIH1cbiAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuID0gcmVuZGVyQ2hpbGRyZW47XG5cbiAgLy8gdXBkYXRlICRhdHRycyBhbmQgJGxpc3RlbmVycyBoYXNoXG4gIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAvLyB1c2VkIHRoZW0gZHVyaW5nIHJlbmRlclxuICB2bS4kYXR0cnMgPSBwYXJlbnRWbm9kZS5kYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0O1xuICB2bS4kbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuXG4gIC8vIHVwZGF0ZSBwcm9wc1xuICBpZiAocHJvcHNEYXRhICYmIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICB2YXIgcHJvcHMgPSB2bS5fcHJvcHM7XG4gICAgdmFyIHByb3BLZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzIHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wS2V5c1tpXTtcbiAgICAgIHZhciBwcm9wT3B0aW9ucyA9IHZtLiRvcHRpb25zLnByb3BzOyAvLyB3dGYgZmxvdz9cbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgfVxuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAvLyBrZWVwIGEgY29weSBvZiByYXcgcHJvcHNEYXRhXG4gICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhID0gcHJvcHNEYXRhO1xuICB9XG5cbiAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZhciBvbGRMaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgb2xkTGlzdGVuZXJzKTtcblxuICAvLyByZXNvbHZlIHNsb3RzICsgZm9yY2UgdXBkYXRlIGlmIGhhcyBjaGlsZHJlblxuICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMocmVuZGVyQ2hpbGRyZW4sIHBhcmVudFZub2RlLmNvbnRleHQpO1xuICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luSW5hY3RpdmVUcmVlICh2bSkge1xuICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gdHJ1ZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgcHVzaFRhcmdldCgpO1xuICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXJzW2ldLmNhbGwodm0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgKGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICB2bS4kZW1pdCgnaG9vazonICsgaG9vayk7XG4gIH1cbiAgcG9wVGFyZ2V0KCk7XG59XG5cbi8qICAqL1xuXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBGbHVzaCBib3RoIHF1ZXVlcyBhbmQgcnVuIHRoZSB3YXRjaGVycy5cbiAqL1xuZnVuY3Rpb24gZmx1c2hTY2hlZHVsZXJRdWV1ZSAoKSB7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgIGhhc1tpZF0gPSBudWxsO1xuICAgIHdhdGNoZXIucnVuKCk7XG4gICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAgICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgIG5leHRUaWNrKGZsdXNoU2NoZWR1bGVyUXVldWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHVpZCQxID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRlZXAgPSB0aGlzLnVzZXIgPSB0aGlzLmxhenkgPSB0aGlzLnN5bmMgPSBmYWxzZTtcbiAgfVxuICB0aGlzLmNiID0gY2I7XG4gIHRoaXMuaWQgPSArK3VpZCQxOyAvLyB1aWQgZm9yIGJhdGNoaW5nXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5kaXJ0eSA9IHRoaXMubGF6eTsgLy8gZm9yIGxhenkgd2F0Y2hlcnNcbiAgdGhpcy5kZXBzID0gW107XG4gIHRoaXMubmV3RGVwcyA9IFtdO1xuICB0aGlzLmRlcElkcyA9IG5ldyBfU2V0KCk7XG4gIHRoaXMubmV3RGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5leHByZXNzaW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgID8gZXhwT3JGbi50b1N0cmluZygpXG4gICAgOiAnJztcbiAgLy8gcGFyc2UgZXhwcmVzc2lvbiBmb3IgZ2V0dGVyXG4gIGlmICh0eXBlb2YgZXhwT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuZ2V0dGVyID0gZXhwT3JGbjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmdldHRlciA9IHBhcnNlUGF0aChleHBPckZuKTtcbiAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XG4gICAgICB0aGlzLmdldHRlciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB3YXRjaGluZyBwYXRoOiBcXFwiXCIgKyBleHBPckZuICsgXCJcXFwiIFwiICtcbiAgICAgICAgJ1dhdGNoZXIgb25seSBhY2NlcHRzIHNpbXBsZSBkb3QtZGVsaW1pdGVkIHBhdGhzLiAnICtcbiAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRoaXMudmFsdWUgPSB0aGlzLmxhenlcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogdGhpcy5nZXQoKTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIGdldHRlciwgYW5kIHJlLWNvbGxlY3QgZGVwZW5kZW5jaWVzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKCkge1xuICBwdXNoVGFyZ2V0KHRoaXMpO1xuICB2YXIgdmFsdWU7XG4gIHZhciB2bSA9IHRoaXMudm07XG4gIHRyeSB7XG4gICAgdmFsdWUgPSB0aGlzLmdldHRlci5jYWxsKHZtLCB2bSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bSwgKFwiZ2V0dGVyIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBcInRvdWNoXCIgZXZlcnkgcHJvcGVydHkgc28gdGhleSBhcmUgYWxsIHRyYWNrZWQgYXNcbiAgICAvLyBkZXBlbmRlbmNpZXMgZm9yIGRlZXAgd2F0Y2hpbmdcbiAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICB0cmF2ZXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIHBvcFRhcmdldCgpO1xuICAgIHRoaXMuY2xlYW51cERlcHMoKTtcbiAgfVxuICByZXR1cm4gdmFsdWVcbn07XG5cbi8qKlxuICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuYWRkRGVwID0gZnVuY3Rpb24gYWRkRGVwIChkZXApIHtcbiAgdmFyIGlkID0gZGVwLmlkO1xuICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhpZCkpIHtcbiAgICB0aGlzLm5ld0RlcElkcy5hZGQoaWQpO1xuICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgaWYgKCF0aGlzLmRlcElkcy5oYXMoaWQpKSB7XG4gICAgICBkZXAuYWRkU3ViKHRoaXMpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhbiB1cCBmb3IgZGVwZW5kZW5jeSBjb2xsZWN0aW9uLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5jbGVhbnVwRGVwcyA9IGZ1bmN0aW9uIGNsZWFudXBEZXBzICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgZGVwID0gdGhpcyQxLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzJDEubmV3RGVwSWRzLmhhcyhkZXAuaWQpKSB7XG4gICAgICBkZXAucmVtb3ZlU3ViKHRoaXMkMSk7XG4gICAgfVxuICB9XG4gIHZhciB0bXAgPSB0aGlzLmRlcElkcztcbiAgdGhpcy5kZXBJZHMgPSB0aGlzLm5ld0RlcElkcztcbiAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gIHRoaXMubmV3RGVwSWRzLmNsZWFyKCk7XG4gIHRtcCA9IHRoaXMuZGVwcztcbiAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICB0aGlzLm5ld0RlcHMgPSB0bXA7XG4gIHRoaXMubmV3RGVwcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBTdWJzY3JpYmVyIGludGVyZmFjZS5cbiAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aGlzLmxhenkpIHtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICB0aGlzLnJ1bigpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTY2hlZHVsZXIgam9iIGludGVyZmFjZS5cbiAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIHJ1biAoKSB7XG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgIT09IHRoaXMudmFsdWUgfHxcbiAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgLy8gd2hlbiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUsIGJlY2F1c2UgdGhlIHZhbHVlIG1heVxuICAgICAgLy8gaGF2ZSBtdXRhdGVkLlxuICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICB0aGlzLmRlZXBcbiAgICApIHtcbiAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBoYW5kbGVFcnJvcihlLCB0aGlzLnZtLCAoXCJjYWxsYmFjayBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIHdhdGNoZXIuXG4gKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUgKCkge1xuICB0aGlzLnZhbHVlID0gdGhpcy5nZXQoKTtcbiAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzJDEuZGVwc1tpXS5kZXBlbmQoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmUgc2VsZiBmcm9tIGFsbCBkZXBlbmRlbmNpZXMnIHN1YnNjcmliZXIgbGlzdC5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiB0ZWFyZG93biAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSB2bSdzIHdhdGNoZXIgbGlzdFxuICAgIC8vIHRoaXMgaXMgYSBzb21ld2hhdCBleHBlbnNpdmUgb3BlcmF0aW9uIHNvIHdlIHNraXAgaXRcbiAgICAvLyBpZiB0aGUgdm0gaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgIGlmICghdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmVtb3ZlKHRoaXMudm0uX3dhdGNoZXJzLCB0aGlzKTtcbiAgICB9XG4gICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMkMS5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzJDEpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IG5vb3AsXG4gIHNldDogbm9vcFxufTtcblxuZnVuY3Rpb24gcHJveHkgKHRhcmdldCwgc291cmNlS2V5LCBrZXkpIHtcbiAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyICgpIHtcbiAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV1cbiAgfTtcbiAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uIHByb3h5U2V0dGVyICh2YWwpIHtcbiAgICB0aGlzW3NvdXJjZUtleV1ba2V5XSA9IHZhbDtcbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBpbml0U3RhdGUgKHZtKSB7XG4gIHZtLl93YXRjaGVycyA9IFtdO1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xuICBpZiAob3B0cy5wcm9wcykgeyBpbml0UHJvcHModm0sIG9wdHMucHJvcHMpOyB9XG4gIGlmIChvcHRzLm1ldGhvZHMpIHsgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7IH1cbiAgaWYgKG9wdHMuZGF0YSkge1xuICAgIGluaXREYXRhKHZtKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZlKHZtLl9kYXRhID0ge30sIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gIH1cbiAgaWYgKG9wdHMuY29tcHV0ZWQpIHsgaW5pdENvbXB1dGVkKHZtLCBvcHRzLmNvbXB1dGVkKTsgfVxuICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgIGluaXRXYXRjaCh2bSwgb3B0cy53YXRjaCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzICh2bSwgcHJvcHNPcHRpb25zKSB7XG4gIHZhciBwcm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XG4gIHZhciBwcm9wcyA9IHZtLl9wcm9wcyA9IHt9O1xuICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAvLyBpbnN0ZWFkIG9mIGR5bmFtaWMgb2JqZWN0IGtleSBlbnVtZXJhdGlvbi5cbiAgdmFyIGtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgPSBbXTtcbiAgdmFyIGlzUm9vdCA9ICF2bS4kcGFyZW50O1xuICAvLyByb290IGluc3RhbmNlIHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgaWYgKCFpc1Jvb3QpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICB9XG4gIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gICAgdmFyIHZhbHVlID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcHNPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIgKyBoeXBoZW5hdGVkS2V5ICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh2bS4kcGFyZW50ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvLyBzdGF0aWMgcHJvcHMgYXJlIGFscmVhZHkgcHJveGllZCBvbiB0aGUgY29tcG9uZW50J3MgcHJvdG90eXBlXG4gICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgcHJveHkodm0sIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wc09wdGlvbnMpIGxvb3AoIGtleSApO1xuICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhICh2bSkge1xuICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gIGRhdGEgPSB2bS5fZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nXG4gICAgPyBnZXREYXRhKGRhdGEsIHZtKVxuICAgIDogZGF0YSB8fCB7fTtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgZGF0YSA9IHt9O1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICdodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIC8vIHByb3h5IGRhdGEgb24gaW5zdGFuY2VcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIHZhciBtZXRob2RzID0gdm0uJG9wdGlvbnMubWV0aG9kcztcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAobWV0aG9kcyAmJiBoYXNPd24obWV0aG9kcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgZGF0YSBwcm9wZXJ0eS5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIlRoZSBkYXRhIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlY2xhcmVkIGFzIGEgcHJvcC4gXCIgK1xuICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIixcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICBwcm94eSh2bSwgXCJfZGF0YVwiLCBrZXkpO1xuICAgIH1cbiAgfVxuICAvLyBvYnNlcnZlIGRhdGFcbiAgb2JzZXJ2ZShkYXRhLCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhIChkYXRhLCB2bSkge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgZGF0YSBnZXR0ZXJzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICByZXR1cm4ge31cbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQgKHZtLCBjb21wdXRlZCkge1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHdhdGNoZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBqdXN0IGdldHRlcnMgZHVyaW5nIFNTUlxuICB2YXIgaXNTU1IgPSBpc1NlcnZlclJlbmRlcmluZygpO1xuXG4gIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIHZhciB1c2VyRGVmID0gY29tcHV0ZWRba2V5XTtcbiAgICB2YXIgZ2V0dGVyID0gdHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicgPyB1c2VyRGVmIDogdXNlckRlZi5nZXQ7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKFxuICAgICAgICB2bSxcbiAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgIG5vb3AsXG4gICAgICAgIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29tcG9uZW50LWRlZmluZWQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZVxuICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICB9IGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3BzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29tcHV0ZWQgKFxuICB0YXJnZXQsXG4gIGtleSxcbiAgdXNlckRlZlxuKSB7XG4gIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICBpZiAodHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcbiAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgOiB1c2VyRGVmO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICB9IGVsc2Uge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSB1c2VyRGVmLmdldFxuICAgICAgPyBzaG91bGRDYWNoZSAmJiB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgOiB1c2VyRGVmLmdldFxuICAgICAgOiBub29wO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldFxuICAgICAgPyB1c2VyRGVmLnNldFxuICAgICAgOiBub29wO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlciAoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICBpZiAod2F0Y2hlcikge1xuICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRNZXRob2RzICh2bSwgbWV0aG9kcykge1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHNba2V5XSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbiB1bmRlZmluZWQgdmFsdWUgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIiArXG4gICAgICAgICAgXCJEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P1wiLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMgJiYgaGFzT3duKHByb3BzLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKChrZXkgaW4gdm0pICYmIGlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBWdWUgaW5zdGFuY2UgbWV0aG9kLiBcIiArXG4gICAgICAgICAgXCJBdm9pZCBkZWZpbmluZyBjb21wb25lbnQgbWV0aG9kcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZtW2tleV0gPSBtZXRob2RzW2tleV0gPT0gbnVsbCA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRXYXRjaCAodm0sIHdhdGNoKSB7XG4gIGZvciAodmFyIGtleSBpbiB3YXRjaCkge1xuICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxuICB2bSxcbiAgZXhwT3JGbixcbiAgaGFuZGxlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IGhhbmRsZXIuaGFuZGxlcjtcbiAgfVxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgaGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICB9XG4gIHJldHVybiB2bS4kd2F0Y2goZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucylcbn1cblxuZnVuY3Rpb24gc3RhdGVNaXhpbiAoVnVlKSB7XG4gIC8vIGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNsYXJlZCBkZWZpbml0aW9uIG9iamVjdFxuICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgc28gd2UgaGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICB2YXIgZGF0YURlZiA9IHt9O1xuICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RhdGEgfTtcbiAgdmFyIHByb3BzRGVmID0ge307XG4gIHByb3BzRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Byb3BzIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGF0YURlZi5zZXQgPSBmdW5jdGlvbiAobmV3RGF0YSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGluamVjdCwga2V5KS5lbnVtZXJhYmxlXG4gICAgICB9KVxuICAgICAgOiBPYmplY3Qua2V5cyhpbmplY3QpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcbiAgICAgIHZhciBzb3VyY2UgPSB2bTtcbiAgICAgIHdoaWxlIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5fcHJvdmlkZWQgJiYgaGFzT3duKHNvdXJjZS5fcHJvdmlkZWQsIHByb3ZpZGVLZXkpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBzb3VyY2UuX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgc291cmNlID0gc291cmNlLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVEZWZhdWx0ID0gaW5qZWN0W2tleV0uZGVmYXVsdDtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHR5cGVvZiBwcm92aWRlRGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxuICAgICAgICAgICAgOiBwcm92aWRlRGVmYXVsdDtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybigoXCJJbmplY3Rpb24gXFxcIlwiICsga2V5ICsgXCJcXFwiIG5vdCBmb3VuZFwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHYtZm9yIGxpc3RzLlxuICovXG5mdW5jdGlvbiByZW5kZXJMaXN0IChcbiAgdmFsLFxuICByZW5kZXJcbikge1xuICB2YXIgcmV0LCBpLCBsLCBrZXlzLCBrZXk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkgfHwgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxbaV0sIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKGkgKyAxLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIHJldCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtrZXldLCBrZXksIGkpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNEZWYocmV0KSkge1xuICAgIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QgKFxuICBuYW1lLFxuICBmYWxsYmFjayxcbiAgcHJvcHMsXG4gIGJpbmRPYmplY3Rcbikge1xuICB2YXIgc2NvcGVkU2xvdEZuID0gdGhpcy4kc2NvcGVkU2xvdHNbbmFtZV07XG4gIHZhciBub2RlcztcbiAgaWYgKHNjb3BlZFNsb3RGbikgeyAvLyBzY29wZWQgc2xvdFxuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFjaztcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xvdE5vZGVzID0gdGhpcy4kc2xvdHNbbmFtZV07XG4gICAgLy8gd2FybiBkdXBsaWNhdGUgc2xvdCB1c2FnZVxuICAgIGlmIChzbG90Tm9kZXMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNsb3ROb2Rlcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIkR1cGxpY2F0ZSBwcmVzZW5jZSBvZiBzbG90IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgZm91bmQgaW4gdGhlIHNhbWUgcmVuZGVyIHRyZWUgXCIgK1xuICAgICAgICAgIFwiLSB0aGlzIHdpbGwgbGlrZWx5IGNhdXNlIHJlbmRlciBlcnJvcnMuXCIsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2xvdE5vZGVzLl9yZW5kZXJlZCA9IHRydWU7XG4gICAgfVxuICAgIG5vZGVzID0gc2xvdE5vZGVzIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzIChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgaGFzaDtcbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICBrZXkgPT09ICdzdHlsZScgfHxcbiAgICAgICAgICBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICBoYXNoID0gYXNQcm9wIHx8IGNvbmZpZy5tdXN0VXNlUHJvcCh0YWcsIHR5cGUsIGtleSlcbiAgICAgICAgICAgID8gZGF0YS5kb21Qcm9wcyB8fCAoZGF0YS5kb21Qcm9wcyA9IHt9KVxuICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCAoXG4gIGRhdGEsXG4gIHByb3BzLFxuICBjaGlsZHJlbixcbiAgcGFyZW50LFxuICBDdG9yXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2YXIgY29udGV4dFZtO1xuICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgfVxuICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpOyB9O1xuXG4gIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBkYXRhLnNjb3BlZFNsb3RzIHx8IGVtcHR5T2JqZWN0O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAoZGF0YS5zbG90KSB7XG4gICAgKGNsb25lLmRhdGEgfHwgKGNsb25lLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XG4gIH1cbiAgcmV0dXJuIGNsb25lXG59XG5cbmZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRvLCBmcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgdG9bY2FtZWxpemUoa2V5KV0gPSBmcm9tW2tleV07XG4gIH1cbn1cblxuLyogICovXG5cblxuXG5cbi8vIFJlZ2lzdGVyIHRoZSBjb21wb25lbnQgaG9vayB0byB3ZWV4IG5hdGl2ZSByZW5kZXIgZW5naW5lLlxuLy8gVGhlIGhvb2sgd2lsbCBiZSB0cmlnZ2VyZWQgYnkgbmF0aXZlLCBub3QgamF2YXNjcmlwdC5cblxuXG4vLyBVcGRhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50IHRvIHdlZXggbmF0aXZlIHJlbmRlciBlbmdpbmUuXG5cbi8qICAqL1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vSGFua3MxMDEwMC93ZWV4LW5hdGl2ZS1kaXJlY3RpdmUvdHJlZS9tYXN0ZXIvY29tcG9uZW50XG5cbi8vIGxpc3RlbmluZyBvbiBuYXRpdmUgY2FsbGJhY2tcblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBpbmxpbmUgaG9va3MgdG8gYmUgaW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQgKFxuICAgIHZub2RlLFxuICAgIGh5ZHJhdGluZyxcbiAgICBwYXJlbnRFbG0sXG4gICAgcmVmRWxtXG4gICkge1xuICAgIGlmIChcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAhdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkICYmXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZVxuICAgICkge1xuICAgICAgLy8ga2VwdC1hbGl2ZSBjb21wb25lbnRzLCB0cmVhdCBhcyBhIHBhdGNoXG4gICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgY29tcG9uZW50Vk5vZGVIb29rcy5wcmVwYXRjaChtb3VudGVkTm9kZSwgbW91bnRlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gICAgICAgIHZub2RlLFxuICAgICAgICBhY3RpdmVJbnN0YW5jZSxcbiAgICAgICAgcGFyZW50RWxtLFxuICAgICAgICByZWZFbG1cbiAgICAgICk7XG4gICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBoeWRyYXRpbmcpO1xuICAgIH1cbiAgfSxcblxuICBwcmVwYXRjaDogZnVuY3Rpb24gcHJlcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIHVwZGF0ZUNoaWxkQ29tcG9uZW50KFxuICAgICAgY2hpbGQsXG4gICAgICBvcHRpb25zLnByb3BzRGF0YSwgLy8gdXBkYXRlZCBwcm9wc1xuICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgb3B0aW9ucy5jaGlsZHJlbiAvLyBuZXcgY2hpbGRyZW5cbiAgICApO1xuICB9LFxuXG4gIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0ICh2bm9kZSkge1xuICAgIHZhciBjb250ZXh0ID0gdm5vZGUuY29udGV4dDtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAvLyB2dWUtcm91dGVyIzEyMTJcbiAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgLy8gb24gaW5jb3JyZWN0IGNoaWxkcmVuLiBJbnN0ZWFkIHdlIHB1c2ggdGhlbSBpbnRvIGEgcXVldWUgd2hpY2ggd2lsbFxuICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXG4gICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gIEN0b3IsXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICBpZiAoaXNVbmRlZihDdG9yKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcblxuICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgfVxuXG4gIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgLy8gcmVqZWN0LlxuICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybigoXCJJbnZhbGlkIENvbXBvbmVudCBkZWZpbml0aW9uOiBcIiArIChTdHJpbmcoQ3RvcikpKSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gYXN5bmMgY29tcG9uZW50XG4gIHZhciBhc3luY0ZhY3Rvcnk7XG4gIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9yLCBjb250ZXh0KTtcbiAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICBhc3luY0ZhY3RvcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0YWdcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcbiAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgfVxuXG4gIC8vIGV4dHJhY3QgcHJvcHNcbiAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pXG4gIH1cblxuICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUgdHJlYXRlZCBhc1xuICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICB2YXIgbGlzdGVuZXJzID0gZGF0YS5vbjtcbiAgLy8gcmVwbGFjZSB3aXRoIGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gIGRhdGEub24gPSBkYXRhLm5hdGl2ZU9uO1xuXG4gIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAvLyBvdGhlciB0aGFuIHByb3BzICYgbGlzdGVuZXJzICYgc2xvdFxuXG4gICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgIGRhdGEgPSB7fTtcbiAgICBpZiAoc2xvdCkge1xuICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xuXG4gIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUgfHwgdGFnO1xuICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgKFwidnVlLWNvbXBvbmVudC1cIiArIChDdG9yLmNpZCkgKyAobmFtZSA/IChcIi1cIiArIG5hbWUpIDogJycpKSxcbiAgICBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgIHsgQ3RvcjogQ3RvciwgcHJvcHNEYXRhOiBwcm9wc0RhdGEsIGxpc3RlbmVyczogbGlzdGVuZXJzLCB0YWc6IHRhZywgY2hpbGRyZW46IGNoaWxkcmVuIH0sXG4gICAgYXN5bmNGYWN0b3J5XG4gICk7XG5cbiAgLy8gV2VleCBzcGVjaWZpYzogaW52b2tlIHJlY3ljbGUtbGlzdCBvcHRpbWl6ZWQgQHJlbmRlciBmdW5jdGlvbiBmb3JcbiAgLy8gZXh0cmFjdGluZyBjZWxsLXNsb3QgdGVtcGxhdGUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9IYW5rczEwMTAwL3dlZXgtbmF0aXZlLWRpcmVjdGl2ZS90cmVlL21hc3Rlci9jb21wb25lbnRcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQsIC8vIGFjdGl2ZUluc3RhbmNlIGluIGxpZmVjeWNsZSBzdGF0ZVxuICBwYXJlbnRFbG0sXG4gIHJlZkVsbVxuKSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIF9pc0NvbXBvbmVudDogdHJ1ZSxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBfcGFyZW50Vm5vZGU6IHZub2RlLFxuICAgIF9wYXJlbnRFbG06IHBhcmVudEVsbSB8fCBudWxsLFxuICAgIF9yZWZFbG06IHJlZkVsbSB8fCBudWxsXG4gIH07XG4gIC8vIGNoZWNrIGlubGluZS10ZW1wbGF0ZSByZW5kZXIgZnVuY3Rpb25zXG4gIHZhciBpbmxpbmVUZW1wbGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gIGlmIChpc0RlZihpbmxpbmVUZW1wbGF0ZSkpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IGlubGluZVRlbXBsYXRlLnJlbmRlcjtcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZucztcbiAgfVxuICByZXR1cm4gbmV3IHZub2RlLmNvbXBvbmVudE9wdGlvbnMuQ3RvcihvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ29tcG9uZW50SG9va3MgKGRhdGEpIHtcbiAgdmFyIGhvb2tzID0gZGF0YS5ob29rIHx8IChkYXRhLmhvb2sgPSB7fSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGhvb2tzVG9NZXJnZVtpXTtcbiAgICBob29rc1trZXldID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xuICB9XG59XG5cbi8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbi8vIHByb3AgYW5kIGV2ZW50IGhhbmRsZXIgcmVzcGVjdGl2ZWx5LlxuZnVuY3Rpb24gdHJhbnNmb3JtTW9kZWwgKG9wdGlvbnMsIGRhdGEpIHtcbiAgdmFyIHByb3AgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLnByb3ApIHx8ICd2YWx1ZSc7XG4gIHZhciBldmVudCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwuZXZlbnQpIHx8ICdpbnB1dCc7KGRhdGEucHJvcHMgfHwgKGRhdGEucHJvcHMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgaWYgKGlzRGVmKG9uW2V2ZW50XSkpIHtcbiAgICBvbltldmVudF0gPSBbZGF0YS5tb2RlbC5jYWxsYmFja10uY29uY2F0KG9uW2V2ZW50XSk7XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gZGF0YS5tb2RlbC5jYWxsYmFjaztcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgY29udGV4dCxcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgbm9ybWFsaXphdGlvblR5cGUsXG4gIGFsd2F5c05vcm1hbGl6ZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNUcnVlKGFsd2F5c05vcm1hbGl6ZSkpIHtcbiAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlXG4pIHtcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChkYXRhKS5fX29iX18pKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCJBdm9pZCB1c2luZyBvYnNlcnZlZCBkYXRhIG9iamVjdCBhcyB2bm9kZSBkYXRhOiBcIiArIChKU09OLnN0cmluZ2lmeShkYXRhKSkgKyBcIlxcblwiICtcbiAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgIHRhZyA9IGRhdGEuaXM7XG4gIH1cbiAgaWYgKCF0YWcpIHtcbiAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICkge1xuICAgIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdBdm9pZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9uIGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgfVxuICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9XG4gIHZhciB2bm9kZSwgbnM7XG4gIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgIHZhciBDdG9yO1xuICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmKEN0b3IgPSByZXNvbHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkge1xuICAgICAgLy8gY29tcG9uZW50XG4gICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICB0YWcsIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudCh0YWcsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcbiAgICBpZiAoaXNEZWYobnMpKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgIGlmIChpc0RlZihkYXRhKSkgeyByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTsgfVxuICAgIHJldHVybiB2bm9kZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseU5TICh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gIHZub2RlLm5zID0gbnM7XG4gIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxuICAgIG5zID0gdW5kZWZpbmVkO1xuICAgIGZvcmNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiYgKFxuICAgICAgICBpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgYXBwbHlOUyhjaGlsZCwgbnMsIGZvcmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gcmVmICM1MzE4XG4vLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuLy8gOmNsYXNzIGFyZSB1c2VkIG9uIHNsb3Qgbm9kZXNcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzIChkYXRhKSB7XG4gIGlmIChpc09iamVjdChkYXRhLnN0eWxlKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xuICB9XG4gIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuY2xhc3MpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gIHZhciBwYXJlbnRWbm9kZSA9IHZtLiR2bm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICB2YXIgcmVuZGVyQ29udGV4dCA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmNvbnRleHQ7XG4gIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gIHZtLiRzY29wZWRTbG90cyA9IGVtcHR5T2JqZWN0O1xuICAvLyBiaW5kIHRoZSBjcmVhdGVFbGVtZW50IGZuIHRvIHRoaXMgaW5zdGFuY2VcbiAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAvLyBpbnRlcm5hbCB2ZXJzaW9uIGlzIHVzZWQgYnkgcmVuZGVyIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIHRlbXBsYXRlc1xuICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAvLyB1c2VyLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucy5cbiAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgLy8gJGF0dHJzICYgJGxpc3RlbmVycyBhcmUgZXhwb3NlZCBmb3IgZWFzaWVyIEhPQyBjcmVhdGlvbi5cbiAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVmaW5lUmVhY3RpdmUodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyTWl4aW4gKFZ1ZSkge1xuICAvLyBpbnN0YWxsIHJ1bnRpbWUgY29udmVuaWVuY2UgaGVscGVyc1xuICBpbnN0YWxsUmVuZGVySGVscGVycyhWdWUucHJvdG90eXBlKTtcblxuICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgIHJldHVybiBuZXh0VGljayhmbiwgdGhpcylcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICB2YXIgcmVmID0gdm0uJG9wdGlvbnM7XG4gICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7XG4gICAgdmFyIF9wYXJlbnRWbm9kZSA9IHJlZi5fcGFyZW50Vm5vZGU7XG5cbiAgICAvLyByZXNldCBfcmVuZGVyZWQgZmxhZyBvbiBzbG90cyBmb3IgZHVwbGljYXRlIHNsb3QgY2hlY2tcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZtLiRzbG90cykge1xuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgdm0uJHNsb3RzW2tleV0uX3JlbmRlcmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gX3BhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMgfHwgZW1wdHlPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgdm5vZGUgPSByZW5kZXIuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAvLyByZXR1cm4gZXJyb3IgcmVuZGVyIHJlc3VsdCxcbiAgICAgIC8vIG9yIHByZXZpb3VzIHZub2RlIHRvIHByZXZlbnQgcmVuZGVyIGVycm9yIGNhdXNpbmcgYmxhbmsgY29tcG9uZW50XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICBpZiAoISh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcmVudFxuICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtcbiAgICByZXR1cm4gdm5vZGVcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciB1aWQkMyA9IDA7XG5cbmZ1bmN0aW9uIGluaXRNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgLy8gYSB1aWRcbiAgICB2bS5fdWlkID0gdWlkJDMrKztcblxuICAgIHZhciBzdGFydFRhZywgZW5kVGFnO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArICh2bS5fdWlkKTtcbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgIH1cblxuICAgIC8vIGEgZmxhZyB0byBhdm9pZCB0aGlzIGJlaW5nIG9ic2VydmVkXG4gICAgdm0uX2lzVnVlID0gdHJ1ZTtcbiAgICAvLyBtZXJnZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5faXNDb21wb25lbnQpIHtcbiAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXG4gICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAvLyBpbnRlcm5hbCBjb21wb25lbnQgb3B0aW9ucyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC5cbiAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSxcbiAgICAgICAgb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgdm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZtKTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzXG4gICAgaW5pdFN0YXRlKHZtKTtcbiAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgY2FsbEhvb2sodm0sICdjcmVhdGVkJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgdm0uX25hbWUgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArICh2bS5fbmFtZSkgKyBcIiBpbml0XCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9XG5cbiAgICBpZiAodm0uJG9wdGlvbnMuZWwpIHtcbiAgICAgIHZtLiRtb3VudCh2bS4kb3B0aW9ucy5lbCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQgKHZtLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gdm0uJG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKHZtLmNvbnN0cnVjdG9yLm9wdGlvbnMpO1xuICAvLyBkb2luZyB0aGlzIGJlY2F1c2UgaXQncyBmYXN0ZXIgdGhhbiBkeW5hbWljIGVudW1lcmF0aW9uLlxuICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgb3B0cy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgb3B0cy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcbiAgb3B0cy5fcGFyZW50RWxtID0gb3B0aW9ucy5fcGFyZW50RWxtO1xuICBvcHRzLl9yZWZFbG0gPSBvcHRpb25zLl9yZWZFbG07XG5cbiAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG5cbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgZXh0ZW5kZWQgPSBDdG9yLmV4dGVuZE9wdGlvbnM7XG4gIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gIGZvciAodmFyIGtleSBpbiBsYXRlc3QpIHtcbiAgICBpZiAobGF0ZXN0W2tleV0gIT09IHNlYWxlZFtrZXldKSB7XG4gICAgICBpZiAoIW1vZGlmaWVkKSB7IG1vZGlmaWVkID0ge307IH1cbiAgICAgIG1vZGlmaWVkW2tleV0gPSBkZWR1cGUobGF0ZXN0W2tleV0sIGV4dGVuZGVkW2tleV0sIHNlYWxlZFtrZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vZGlmaWVkXG59XG5cbmZ1bmN0aW9uIGRlZHVwZSAobGF0ZXN0LCBleHRlbmRlZCwgc2VhbGVkKSB7XG4gIC8vIGNvbXBhcmUgbGF0ZXN0IGFuZCBzZWFsZWQgdG8gZW5zdXJlIGxpZmVjeWNsZSBob29rcyB3b24ndCBiZSBkdXBsaWNhdGVkXG4gIC8vIGJldHdlZW4gbWVyZ2VzXG4gIGlmIChBcnJheS5pc0FycmF5KGxhdGVzdCkpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgc2VhbGVkID0gQXJyYXkuaXNBcnJheShzZWFsZWQpID8gc2VhbGVkIDogW3NlYWxlZF07XG4gICAgZXh0ZW5kZWQgPSBBcnJheS5pc0FycmF5KGV4dGVuZGVkKSA/IGV4dGVuZGVkIDogW2V4dGVuZGVkXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhdGVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gcHVzaCBvcmlnaW5hbCBvcHRpb25zIGFuZCBub3Qgc2VhbGVkIG9wdGlvbnMgdG8gZXhjbHVkZSBkdXBsaWNhdGVkIG9wdGlvbnNcbiAgICAgIGlmIChleHRlbmRlZC5pbmRleE9mKGxhdGVzdFtpXSkgPj0gMCB8fCBzZWFsZWQuaW5kZXhPZihsYXRlc3RbaV0pIDwgMCkge1xuICAgICAgICByZXMucHVzaChsYXRlc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhdGVzdFxuICB9XG59XG5cbmZ1bmN0aW9uIFZ1ZSAob3B0aW9ucykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICEodGhpcyBpbnN0YW5jZW9mIFZ1ZSlcbiAgKSB7XG4gICAgd2FybignVnVlIGlzIGEgY29uc3RydWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICB9XG4gIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG5cbmluaXRNaXhpbihWdWUpO1xuc3RhdGVNaXhpbihWdWUpO1xuZXZlbnRzTWl4aW4oVnVlKTtcbmxpZmVjeWNsZU1peGluKFZ1ZSk7XG5yZW5kZXJNaXhpbihWdWUpO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFVzZSAoVnVlKSB7XG4gIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgdmFyIGluc3RhbGxlZFBsdWdpbnMgPSAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKSk7XG4gICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihwbHVnaW4pID4gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIGlmICh0eXBlb2YgcGx1Z2luLmluc3RhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0TWl4aW4kMSAoVnVlKSB7XG4gIFZ1ZS5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xuICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG1peGluKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV4dGVuZCAoVnVlKSB7XG4gIC8qKlxuICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICogY2lkLiBUaGlzIGVuYWJsZXMgdXMgdG8gY3JlYXRlIHdyYXBwZWQgXCJjaGlsZFxuICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICovXG4gIFZ1ZS5jaWQgPSAwO1xuICB2YXIgY2lkID0gMTtcblxuICAvKipcbiAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICovXG4gIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xuICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgdmFyIGNhY2hlZEN0b3JzID0gZXh0ZW5kT3B0aW9ucy5fQ3RvciB8fCAoZXh0ZW5kT3B0aW9ucy5fQ3RvciA9IHt9KTtcbiAgICBpZiAoY2FjaGVkQ3RvcnNbU3VwZXJJZF0pIHtcbiAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgIH1cblxuICAgIHZhciBuYW1lID0gZXh0ZW5kT3B0aW9ucy5uYW1lIHx8IFN1cGVyLm9wdGlvbnMubmFtZTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBuYW1lKSB7XG4gICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIFN1YiA9IGZ1bmN0aW9uIFZ1ZUNvbXBvbmVudCAob3B0aW9ucykge1xuICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1Yi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN1cGVyLnByb3RvdHlwZSk7XG4gICAgU3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YjtcbiAgICBTdWIuY2lkID0gY2lkKys7XG4gICAgU3ViLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICBTdXBlci5vcHRpb25zLFxuICAgICAgZXh0ZW5kT3B0aW9uc1xuICAgICk7XG4gICAgU3ViWydzdXBlciddID0gU3VwZXI7XG5cbiAgICAvLyBGb3IgcHJvcHMgYW5kIGNvbXB1dGVkIHByb3BlcnRpZXMsIHdlIGRlZmluZSB0aGUgcHJveHkgZ2V0dGVycyBvblxuICAgIC8vIHRoZSBWdWUgaW5zdGFuY2VzIGF0IGV4dGVuc2lvbiB0aW1lLCBvbiB0aGUgZXh0ZW5kZWQgcHJvdG90eXBlLiBUaGlzXG4gICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxuICAgIGlmIChTdWIub3B0aW9ucy5wcm9wcykge1xuICAgICAgaW5pdFByb3BzJDEoU3ViKTtcbiAgICB9XG4gICAgaWYgKFN1Yi5vcHRpb25zLmNvbXB1dGVkKSB7XG4gICAgICBpbml0Q29tcHV0ZWQkMShTdWIpO1xuICAgIH1cblxuICAgIC8vIGFsbG93IGZ1cnRoZXIgZXh0ZW5zaW9uL21peGluL3BsdWdpbiB1c2FnZVxuICAgIFN1Yi5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gICAgU3ViLm1peGluID0gU3VwZXIubWl4aW47XG4gICAgU3ViLnVzZSA9IFN1cGVyLnVzZTtcblxuICAgIC8vIGNyZWF0ZSBhc3NldCByZWdpc3RlcnMsIHNvIGV4dGVuZGVkIGNsYXNzZXNcbiAgICAvLyBjYW4gaGF2ZSB0aGVpciBwcml2YXRlIGFzc2V0cyB0b28uXG4gICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgU3ViW3R5cGVdID0gU3VwZXJbdHlwZV07XG4gICAgfSk7XG4gICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZSBzZWxmLWxvb2t1cFxuICAgIGlmIChuYW1lKSB7XG4gICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xuICAgIH1cblxuICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyIG9wdGlvbnMgYXQgZXh0ZW5zaW9uIHRpbWUuXG4gICAgLy8gbGF0ZXIgYXQgaW5zdGFudGlhdGlvbiB3ZSBjYW4gY2hlY2sgaWYgU3VwZXIncyBvcHRpb25zIGhhdmVcbiAgICAvLyBiZWVuIHVwZGF0ZWQuXG4gICAgU3ViLnN1cGVyT3B0aW9ucyA9IFN1cGVyLm9wdGlvbnM7XG4gICAgU3ViLmV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zO1xuICAgIFN1Yi5zZWFsZWRPcHRpb25zID0gZXh0ZW5kKHt9LCBTdWIub3B0aW9ucyk7XG5cbiAgICAvLyBjYWNoZSBjb25zdHJ1Y3RvclxuICAgIGNhY2hlZEN0b3JzW1N1cGVySWRdID0gU3ViO1xuICAgIHJldHVybiBTdWJcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzJDEgKENvbXApIHtcbiAgdmFyIHByb3BzID0gQ29tcC5vcHRpb25zLnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBwcm94eShDb21wLnByb3RvdHlwZSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQkMSAoQ29tcCkge1xuICB2YXIgY29tcHV0ZWQgPSBDb21wLm9wdGlvbnMuY29tcHV0ZWQ7XG4gIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIGRlZmluZUNvbXB1dGVkKENvbXAucHJvdG90eXBlLCBrZXksIGNvbXB1dGVkW2tleV0pO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0QXNzZXRSZWdpc3RlcnMgKFZ1ZSkge1xuICAvKipcbiAgICogQ3JlYXRlIGFzc2V0IHJlZ2lzdHJhdGlvbiBtZXRob2RzLlxuICAgKi9cbiAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIFZ1ZVt0eXBlXSA9IGZ1bmN0aW9uIChcbiAgICAgIGlkLFxuICAgICAgZGVmaW5pdGlvblxuICAgICkge1xuICAgICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50JyAmJiBpc1BsYWluT2JqZWN0KGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gZGVmaW5pdGlvbi5uYW1lIHx8IGlkO1xuICAgICAgICAgIGRlZmluaXRpb24gPSB0aGlzLm9wdGlvbnMuX2Jhc2UuZXh0ZW5kKGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGRlZmluaXRpb24gPSB7IGJpbmQ6IGRlZmluaXRpb24sIHVwZGF0ZTogZGVmaW5pdGlvbiB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF0gPSBkZWZpbml0aW9uO1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvblxuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzJDEuY2FjaGUpIHtcbiAgICAgIHBydW5lQ2FjaGVFbnRyeSh0aGlzJDEuY2FjaGUsIGtleSwgdGhpcyQxLmtleXMpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH0pO1xuICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICB2YXIgZXhjbHVkZSA9IHJlZi5leGNsdWRlO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWUpKSkgfHxcbiAgICAgICAgLy8gZXhjbHVkZWRcbiAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2bm9kZVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVmJDEgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmJDEuY2FjaGU7XG4gICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5ID09IG51bGxcbiAgICAgICAgLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICA/IGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgKyAoY29tcG9uZW50T3B0aW9ucy50YWcgPyAoXCI6OlwiICsgKGNvbXBvbmVudE9wdGlvbnMudGFnKSkgOiAnJylcbiAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNhY2hlW2tleV0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIC8vIG1ha2UgY3VycmVudCBrZXkgZnJlc2hlc3RcbiAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XG4gICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pXG4gIH1cbn1cblxudmFyIGJ1aWx0SW5Db21wb25lbnRzID0ge1xuICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi41LjE2JztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKFxuICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgJ2RlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCwnICtcbiAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAncmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSwnICtcbiAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnXG4pO1xuXG52YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcblxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG59O1xuXG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG59O1xuXG52YXIgaXNGYWxzeUF0dHJWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2Vcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKGlzRGVmKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChpc0RlZihwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3NEYXRhIChjaGlsZCwgcGFyZW50KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICBjbGFzczogaXNEZWYoY2hpbGQuY2xhc3MpXG4gICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgOiBwYXJlbnQuY2xhc3NcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJDbGFzcyAoXG4gIHN0YXRpY0NsYXNzLFxuICBkeW5hbWljQ2xhc3Ncbikge1xuICBpZiAoaXNEZWYoc3RhdGljQ2xhc3MpIHx8IGlzRGVmKGR5bmFtaWNDbGFzcykpIHtcbiAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjb25jYXQgKGEsIGIpIHtcbiAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3MgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSlcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgc3RyaW5naWZpZWQ7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGlzRGVmKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcblxudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoXG4gICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbiwnICtcbiAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAncyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sJyArXG4gICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAnYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbiwnICtcbiAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICdjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290J1xuKTtcblxuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcChcbiAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgJ2ZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xuICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsXG4gIHRydWVcbik7XG5cbnZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07XG5cbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKVxufTtcblxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICByZXR1cm4gJ3N2ZydcbiAgfVxuICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3RoZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICByZXR1cm4gJ21hdGgnXG4gIH1cbn1cblxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCAodGFnKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXVxuICB9XG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50XG4gICAgKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpXG4gIH1cbn1cblxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qICAqL1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeSAoZWwpIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICdDYW5ub3QgZmluZCBlbGVtZW50OiAnICsgZWxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGVsXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQkMSAodGFnTmFtZSwgdm5vZGUpIHtcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0YWdOYW1lICE9PSAnc2VsZWN0Jykge1xuICAgIHJldHVybiBlbG1cbiAgfVxuICAvLyBmYWxzZSBvciBudWxsIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgYnV0IHVuZGVmaW5lZCB3aWxsIG5vdFxuICBpZiAodm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XG4gIH1cbiAgcmV0dXJuIGVsbVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMgKG5hbWVzcGFjZSwgdGFnTmFtZSkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSAodGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudCAodGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KVxufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUgKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQgKG5vZGUsIGNoaWxkKSB7XG4gIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuXG5mdW5jdGlvbiBwYXJlbnROb2RlIChub2RlKSB7XG4gIHJldHVybiBub2RlLnBhcmVudE5vZGVcbn1cblxuZnVuY3Rpb24gbmV4dFNpYmxpbmcgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmdcbn1cblxuZnVuY3Rpb24gdGFnTmFtZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lXG59XG5cbmZ1bmN0aW9uIHNldFRleHRDb250ZW50IChub2RlLCB0ZXh0KSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuXG5mdW5jdGlvbiBzZXRTdHlsZVNjb3BlIChub2RlLCBzY29wZUlkKSB7XG4gIG5vZGUuc2V0QXR0cmlidXRlKHNjb3BlSWQsICcnKTtcbn1cblxuXG52YXIgbm9kZU9wcyA9IE9iamVjdC5mcmVlemUoe1xuXHRjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG5cdGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuXHRjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG5cdGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG5cdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRyZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG5cdGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcblx0cGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcblx0bmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuXHR0YWdOYW1lOiB0YWdOYW1lLFxuXHRzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG5cdHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJSZWYgKHZub2RlLCBpc1JlbW92YWwpIHtcbiAgdmFyIGtleSA9IHZub2RlLmRhdGEucmVmO1xuICBpZiAoIWlzRGVmKGtleSkpIHsgcmV0dXJuIH1cblxuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICB2YXIgcmVmID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtcbiAgICB9IGVsc2UgaWYgKHJlZnNba2V5XSA9PT0gcmVmKSB7XG4gICAgICByZWZzW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2bm9kZS5kYXRhLnJlZkluRm9yKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICByZWZzW2tleV0gPSBbcmVmXTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldLmluZGV4T2YocmVmKSA8IDApIHtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHJlZnNba2V5XS5wdXNoKHJlZik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZnNba2V5XSA9IHJlZjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogbW9kaWZpZWQgYnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxuICogb2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gKi9cblxudmFyIGVtcHR5Tm9kZSA9IG5ldyBWTm9kZSgnJywge30sIFtdKTtcblxudmFyIGhvb2tzID0gWydjcmVhdGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5cbmZ1bmN0aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICByZXR1cm4gKFxuICAgIGEua2V5ID09PSBiLmtleSAmJiAoXG4gICAgICAoXG4gICAgICAgIGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICBhLmlzQ29tbWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcbiAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpXG4gICAgICApIHx8IChcbiAgICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcbiAgICAgICAgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcilcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gc2FtZUlucHV0VHlwZSAoYSwgYikge1xuICBpZiAoYS50YWcgIT09ICdpbnB1dCcpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaTtcbiAgdmFyIHR5cGVBID0gaXNEZWYoaSA9IGEuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgdmFyIHR5cGVCID0gaXNEZWYoaSA9IGIuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHggKGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gIHZhciBpLCBrZXk7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgaWYgKGlzRGVmKGtleSkpIHsgbWFwW2tleV0gPSBpOyB9XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uIChiYWNrZW5kKSB7XG4gIHZhciBpLCBqO1xuICB2YXIgY2JzID0ge307XG5cbiAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXM7XG4gIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgZnVuY3Rpb24gcmVtb3ZlICgpIHtcbiAgICAgIGlmICgtLXJlbW92ZS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgcmV0dXJuIHJlbW92ZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50JCQxICh2bm9kZSwgaW5WUHJlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICFpblZQcmUgJiZcbiAgICAgICF2bm9kZS5ucyAmJlxuICAgICAgIShcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChpZ25vcmUpIHtcbiAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxuICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICA6IGlnbm9yZSA9PT0gdm5vZGUudGFnXG4gICAgICAgIH0pXG4gICAgICApICYmXG4gICAgICBjb25maWcuaXNVbmtub3duRWxlbWVudCh2bm9kZS50YWcpXG4gICAgKVxuICB9XG5cbiAgdmFyIGNyZWF0aW5nRWxtSW5WUHJlID0gMDtcblxuICBmdW5jdGlvbiBjcmVhdGVFbG0gKFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBwYXJlbnRFbG0sXG4gICAgcmVmRWxtLFxuICAgIG5lc3RlZCxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4XG4gICkge1xuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAvLyBwb3RlbnRpYWwgcGF0Y2ggZXJyb3JzIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHVzZWQgYXMgYW4gaW5zZXJ0aW9uXG4gICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICBpZiAoY3JlYXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArIHRhZyArICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLywgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNUcnVlKGlzUmVhY3RpdmF0ZWQpKSB7XG4gICAgICAgICAgcmVhY3RpdmF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0Q29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoLmFwcGx5KGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KTtcbiAgICAgIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCA9IG51bGw7XG4gICAgfVxuICAgIHZub2RlLmVsbSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLiRlbDtcbiAgICBpZiAoaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW1wdHkgY29tcG9uZW50IHJvb3QuXG4gICAgICAvLyBza2lwIGFsbCBlbGVtZW50LXJlbGF0ZWQgbW9kdWxlcyBleGNlcHQgZm9yIHJlZiAoIzM0NTUpXG4gICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICAvLyBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBpbnNlcnQgaG9va1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWN0aXZhdGVDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgdmFyIGk7XG4gICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxuICAgIC8vIGRvZXMgbm90IHRyaWdnZXIgYmVjYXVzZSB0aGUgaW5uZXIgbm9kZSdzIGNyZWF0ZWQgaG9va3MgYXJlIG5vdCBjYWxsZWRcbiAgICAvLyBhZ2Fpbi4gSXQncyBub3QgaWRlYWwgdG8gaW52b2x2ZSBtb2R1bGUtc3BlY2lmaWMgbG9naWMgaW4gaGVyZSBidXRcbiAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgIHZhciBpbm5lck5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICBpbm5lck5vZGUgPSBpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpbm5lck5vZGUuZGF0YSkgJiYgaXNEZWYoaSA9IGkudHJhbnNpdGlvbikpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5hY3RpdmF0ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2goaW5uZXJOb2RlKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXG4gICAgLy8gYSByZWFjdGl2YXRlZCBrZWVwLWFsaXZlIGNvbXBvbmVudCBkb2Vzbid0IGluc2VydCBpdHNlbGZcbiAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnQgKHBhcmVudCwgZWxtLCByZWYkJDEpIHtcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgaWYgKGlzRGVmKHJlZiQkMSkpIHtcbiAgICAgICAgaWYgKHJlZiQkMS5wYXJlbnROb2RlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnQsIGVsbSwgcmVmJCQxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZChwYXJlbnQsIGVsbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4gKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICBjcmVhdGVFbG0oY2hpbGRyZW5baV0sIGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZWxtLCBudWxsLCB0cnVlLCBjaGlsZHJlbiwgaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZCh2bm9kZS5lbG0sIG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKHZub2RlLnRleHQpKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNQYXRjaGFibGUgKHZub2RlKSB7XG4gICAgd2hpbGUgKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRGVmKHZub2RlLnRhZylcbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUNyZWF0ZUhvb2tzICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICBjYnMuY3JlYXRlW2kkMV0oZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgfVxuICAgIGkgPSB2bm9kZS5kYXRhLmhvb2s7IC8vIFJldXNlIHZhcmlhYmxlXG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICBpZiAoaXNEZWYoaS5jcmVhdGUpKSB7IGkuY3JlYXRlKGVtcHR5Tm9kZSwgdm5vZGUpOyB9XG4gICAgICBpZiAoaXNEZWYoaS5pbnNlcnQpKSB7IGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBzY29wZSBpZCBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBDU1MuXG4gIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXG4gIC8vIG9mIGdvaW5nIHRocm91Z2ggdGhlIG5vcm1hbCBhdHRyaWJ1dGUgcGF0Y2hpbmcgcHJvY2Vzcy5cbiAgZnVuY3Rpb24gc2V0U2NvcGUgKHZub2RlKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5mblNjb3BlSWQpKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGU7XG4gICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgaWYgKGlzRGVmKGkgPSBhbmNlc3Rvci5jb250ZXh0KSAmJiBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpIHtcbiAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgfVxuICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZm9yIHNsb3QgY29udGVudCB0aGV5IHNob3VsZCBhbHNvIGdldCB0aGUgc2NvcGVJZCBmcm9tIHRoZSBob3N0IGluc3RhbmNlLlxuICAgIGlmIChpc0RlZihpID0gYWN0aXZlSW5zdGFuY2UpICYmXG4gICAgICBpICE9PSB2bm9kZS5jb250ZXh0ICYmXG4gICAgICBpICE9PSB2bm9kZS5mbkNvbnRleHQgJiZcbiAgICAgIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKVxuICAgICkge1xuICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkVm5vZGVzIChwYXJlbnRFbG0sIHJlZkVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICBjcmVhdGVFbG0odm5vZGVzW3N0YXJ0SWR4XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSwgZmFsc2UsIHZub2Rlcywgc3RhcnRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZURlc3Ryb3lIb29rICh2bm9kZSkge1xuICAgIHZhciBpLCBqO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5kZXN0cm95KSkgeyBpKHZub2RlKTsgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7IGNicy5kZXN0cm95W2ldKHZub2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGludm9rZURlc3Ryb3lIb29rKHZub2RlLmNoaWxkcmVuW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVWbm9kZXMgKHBhcmVudEVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgdmFyIGNoID0gdm5vZGVzW3N0YXJ0SWR4XTtcbiAgICAgIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGNoKTtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgIH0gZWxzZSB7IC8vIFRleHQgbm9kZVxuICAgICAgICAgIHJlbW92ZU5vZGUoY2guZWxtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sgKHZub2RlLCBybSkge1xuICAgIGlmIChpc0RlZihybSkgfHwgaXNEZWYodm5vZGUuZGF0YSkpIHtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHJlY3Vyc2l2ZWx5IHBhc3NlZCBkb3duIHJtIGNhbGxiYWNrXG4gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgIHJtID0gY3JlYXRlUm1DYih2bm9kZS5lbG0sIGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgICAvLyByZWN1cnNpdmVseSBpbnZva2UgaG9va3Mgb24gY2hpbGQgY29tcG9uZW50IHJvb3Qgbm9kZVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaXNEZWYoaSA9IGkuX3Zub2RlKSAmJiBpc0RlZihpLmRhdGEpKSB7XG4gICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soaSwgcm0pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5yZW1vdmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2JzLnJlbW92ZVtpXSh2bm9kZSwgcm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5kYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnJlbW92ZSkpIHtcbiAgICAgICAgaSh2bm9kZSwgcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlTm9kZSh2bm9kZS5lbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuIChwYXJlbnRFbG0sIG9sZENoLCBuZXdDaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgdmFyIG9sZFN0YXJ0SWR4ID0gMDtcbiAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgIHZhciBvbGRFbmRJZHggPSBvbGRDaC5sZW5ndGggLSAxO1xuICAgIHZhciBvbGRTdGFydFZub2RlID0gb2xkQ2hbMF07XG4gICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICB2YXIgbmV3RW5kSWR4ID0gbmV3Q2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWzBdO1xuICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgdmFyIG9sZEtleVRvSWR4LCBpZHhJbk9sZCwgdm5vZGVUb01vdmUsIHJlZkVsbTtcblxuICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxuICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAvLyBkdXJpbmcgbGVhdmluZyB0cmFuc2l0aW9uc1xuICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKG5ld0NoKTtcbiAgICB9XG5cbiAgICB3aGlsZSAob2xkU3RhcnRJZHggPD0gb2xkRW5kSWR4ICYmIG5ld1N0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgaWYgKGlzVW5kZWYob2xkU3RhcnRWbm9kZSkpIHtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkRW5kVm5vZGUpKSB7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCByaWdodFxuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzIChjaGlsZHJlbikge1xuICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgIGlmIChpc0RlZihrZXkpKSB7XG4gICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIgKyBrZXkgKyBcIicuIFRoaXMgbWF5IGNhdXNlIGFuIHVwZGF0ZSBlcnJvci5cIiksXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWVuS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRJZHhJbk9sZCAobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIGMgPSBvbGRDaFtpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpIHsgcmV0dXJuIGkgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoVm5vZGUgKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKG9sZFZub2RlID09PSB2bm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcblxuICAgIGlmIChpc1RydWUob2xkVm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJldXNlIGVsZW1lbnQgZm9yIHN0YXRpYyB0cmVlcy5cbiAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAvLyByZXNldCBieSB0aGUgaG90LXJlbG9hZC1hcGkgYW5kIHdlIG5lZWQgdG8gZG8gYSBwcm9wZXIgcmUtcmVuZGVyLlxuICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpXG4gICAgKSB7XG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS51cGRhdGUpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgaWYgKGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKG9sZENoICE9PSBjaCkgeyB1cGRhdGVDaGlsZHJlbihlbG0sIG9sZENoLCBjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KTsgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7IG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7IH1cbiAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICByZW1vdmVWbm9kZXMoZWxtLCBvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgfVxuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnBvc3RwYXRjaCkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayAodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgLy8gZWxlbWVudCBpcyByZWFsbHkgaW5zZXJ0ZWRcbiAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaHlkcmF0aW9uQmFpbGVkID0gZmFsc2U7XG4gIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gIC8vIE5vdGU6IHN0eWxlIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGluaXRpYWwgY2xvbmUgZm9yIGZ1dHVyZVxuICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAvLyBOb3RlOiB0aGlzIGlzIGEgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uIHNvIHdlIGNhbiBhc3N1bWUgZWxtcyBhcmUgRE9NIG5vZGVzLlxuICBmdW5jdGlvbiBoeWRyYXRlIChlbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgIHZhciBpO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgdm5vZGUuZWxtID0gZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHYtaHRtbCBhbmQgZG9tUHJvcHM6IGlubmVySFRNTFxuICAgICAgICAgIGlmIChpc0RlZihpID0gZGF0YSkgJiYgaXNEZWYoaSA9IGkuZG9tUHJvcHMpICYmIGlzRGVmKGkgPSBpLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICFoeWRyYXRpb25CYWlsZWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NlcnZlciBpbm5lckhUTUw6ICcsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignY2xpZW50IGlubmVySFRNTDogJywgZWxtLmlubmVySFRNTCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYW5kIGNvbXBhcmUgY2hpbGRyZW4gbGlzdHNcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbG0uZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHwgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpJDFdLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbk1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgdmlydHVhbCBjaGlsZHJlbiBsaXN0LlxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk1hdGNoIHx8IGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgdmFyIGZ1bGxJbnZva2UgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICBpZiAoIWlzUmVuZGVyZWRNb2R1bGUoa2V5KSkge1xuICAgICAgICAgICAgZnVsbEludm9rZSA9IHRydWU7XG4gICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZnVsbEludm9rZSAmJiBkYXRhWydjbGFzcyddKSB7XG4gICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICB0cmF2ZXJzZShkYXRhWydjbGFzcyddKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxtLmRhdGEgIT09IHZub2RlLnRleHQpIHtcbiAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUsIGluVlByZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICByZXR1cm4gdm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fCAoXG4gICAgICAgICFpc1Vua25vd25FbGVtZW50JCQxKHZub2RlLCBpblZQcmUpICYmXG4gICAgICAgIHZub2RlLnRhZy50b0xvd2VyQ2FzZSgpID09PSAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gKHZub2RlLmlzQ29tbWVudCA/IDggOiAzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBwYXRjaCAob2xkVm5vZGUsIHZub2RlLCBoeWRyYXRpbmcsIHJlbW92ZU9ubHksIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcbiAgICAgIGlmICghaXNSZWFsRWxlbWVudCAmJiBzYW1lVm5vZGUob2xkVm5vZGUsIHZub2RlKSkge1xuICAgICAgICAvLyBwYXRjaCBleGlzdGluZyByb290IG5vZGVcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNSZWFsRWxlbWVudCkge1xuICAgICAgICAgIC8vIG1vdW50aW5nIHRvIGEgcmVhbCBlbGVtZW50XG4gICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBzZXJ2ZXItcmVuZGVyZWQgY29udGVudCBhbmQgaWYgd2UgY2FuIHBlcmZvcm1cbiAgICAgICAgICAvLyBhIHN1Y2Nlc3NmdWwgaHlkcmF0aW9uLlxuICAgICAgICAgIGlmIChvbGRWbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBvbGRWbm9kZS5oYXNBdHRyaWJ1dGUoU1NSX0FUVFIpKSB7XG4gICAgICAgICAgICBvbGRWbm9kZS5yZW1vdmVBdHRyaWJ1dGUoU1NSX0FUVFIpO1xuICAgICAgICAgICAgaHlkcmF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzVHJ1ZShoeWRyYXRpbmcpKSB7XG4gICAgICAgICAgICBpZiAoaHlkcmF0ZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkpIHtcbiAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFZub2RlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICAnVGhlIGNsaWVudC1zaWRlIHJlbmRlcmVkIHZpcnR1YWwgRE9NIHRyZWUgaXMgbm90IG1hdGNoaW5nICcgK1xuICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAnSFRNTCBtYXJrdXAsIGZvciBleGFtcGxlIG5lc3RpbmcgYmxvY2stbGV2ZWwgZWxlbWVudHMgaW5zaWRlICcgK1xuICAgICAgICAgICAgICAgICc8cD4sIG9yIG1pc3NpbmcgPHRib2R5Pi4gQmFpbGluZyBoeWRyYXRpb24gYW5kIHBlcmZvcm1pbmcgJyArXG4gICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLidcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZWl0aGVyIG5vdCBzZXJ2ZXItcmVuZGVyZWQsIG9yIGh5ZHJhdGlvbiBmYWlsZWQuXG4gICAgICAgICAgLy8gY3JlYXRlIGFuIGVtcHR5IG5vZGUgYW5kIHJlcGxhY2UgaXRcbiAgICAgICAgICBvbGRWbm9kZSA9IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2luZyBleGlzdGluZyBlbGVtZW50XG4gICAgICAgIHZhciBvbGRFbG0gPSBvbGRWbm9kZS5lbG07XG4gICAgICAgIHZhciBwYXJlbnRFbG0kMSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtJDEsXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSQxKSkge1xuICAgICAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0kMSwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5lbG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRGlyZWN0aXZlcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMgfHwgdm5vZGUuZGF0YS5kaXJlY3RpdmVzKSB7XG4gICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgaXNDcmVhdGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEodm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcblxuICB2YXIgZGlyc1dpdGhJbnNlcnQgPSBbXTtcbiAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcbiAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgIGlmICghb2xkRGlyKSB7XG4gICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICBjYWxsSG9vayQxKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5pbnNlcnRlZCkge1xuICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICBkaXIub2xkVmFsdWUgPSBvbGREaXIudmFsdWU7XG4gICAgICBjYWxsSG9vayQxKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbEluc2VydCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFpc0NyZWF0ZSkge1xuICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gIGRpcnMsXG4gIHZtXG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghZGlycykge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXNcbiAgfVxuICB2YXIgaSwgZGlyO1xuICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZSAoZGlyKSB7XG4gIHJldHVybiBkaXIucmF3TmFtZSB8fCAoKGRpci5uYW1lKSArIFwiLlwiICsgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpXG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rJDEgKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCAoXCJkaXJlY3RpdmUgXCIgKyAoZGlyLm5hbWUpICsgXCIgXCIgKyBob29rICsgXCIgaG9va1wiKSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtcbiAgcmVmLFxuICBkaXJlY3RpdmVzXG5dXG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICB9XG4gIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgLy8gZS5nLiA8b3B0aW9uIGRpc2FibGVkPlNlbGVjdCBvbmU8L29wdGlvbj5cbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCdcbiAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgOiBrZXk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAnZmFsc2UnID8gJ2ZhbHNlJyA6ICd0cnVlJyk7XG4gIH0gZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZVNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICB9IGVsc2Uge1xuICAgIC8vICM3MTM4OiBJRTEwICYgMTEgZmlyZXMgaW5wdXQgZXZlbnQgd2hlbiBzZXR0aW5nIHBsYWNlaG9sZGVyIG9uXG4gICAgLy8gPHRleHRhcmVhPi4uLiBibG9jayB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYW5kIHJlbW92ZSB0aGUgYmxvY2tlclxuICAgIC8vIGltbWVkaWF0ZWx5LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChcbiAgICAgIGlzSUUgJiYgIWlzSUU5ICYmXG4gICAgICBlbC50YWdOYW1lID09PSAnVEVYVEFSRUEnICYmXG4gICAgICBrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgIWVsLl9faWVwaFxuICAgICkge1xuICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICBpZiAoXG4gICAgaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgaXNVbmRlZihvbGREYXRhKSB8fCAoXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBjbGFzc1xuICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgfVxufVxuXG52YXIga2xhc3MgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn1cblxuLyogICovXG5cbnZhciB2YWxpZERpdmlzaW9uQ2hhclJFID0gL1tcXHcpLitcXC1fJFxcXV0vO1xuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnMgKGV4cCkge1xuICB2YXIgaW5TaW5nbGUgPSBmYWxzZTtcbiAgdmFyIGluRG91YmxlID0gZmFsc2U7XG4gIHZhciBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XG4gIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gIHZhciBjdXJseSA9IDA7XG4gIHZhciBzcXVhcmUgPSAwO1xuICB2YXIgcGFyZW4gPSAwO1xuICB2YXIgbGFzdEZpbHRlckluZGV4ID0gMDtcbiAgdmFyIGMsIHByZXYsIGksIGV4cHJlc3Npb24sIGZpbHRlcnM7XG5cbiAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgIHByZXYgPSBjO1xuICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgIGlmIChjID09PSAweDI3ICYmIHByZXYgIT09IDB4NUMpIHsgaW5TaW5nbGUgPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5Eb3VibGUpIHtcbiAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NUMpIHsgaW5Eb3VibGUgPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5UZW1wbGF0ZVN0cmluZykge1xuICAgICAgaWYgKGMgPT09IDB4NjAgJiYgcHJldiAhPT0gMHg1QykgeyBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgIGlmIChjID09PSAweDJmICYmIHByZXYgIT09IDB4NUMpIHsgaW5SZWdleCA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGMgPT09IDB4N0MgJiYgLy8gcGlwZVxuICAgICAgZXhwLmNoYXJDb2RlQXQoaSArIDEpICE9PSAweDdDICYmXG4gICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N0MgJiZcbiAgICAgICFjdXJseSAmJiAhc3F1YXJlICYmICFwYXJlblxuICAgICkge1xuICAgICAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBmaXJzdCBmaWx0ZXIsIGVuZCBvZiBleHByZXNzaW9uXG4gICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgICAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHB1c2hGaWx0ZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgMHgyMjogaW5Eb3VibGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vIFwiXG4gICAgICAgIGNhc2UgMHgyNzogaW5TaW5nbGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vICdcbiAgICAgICAgY2FzZSAweDYwOiBpblRlbXBsYXRlU3RyaW5nID0gdHJ1ZTsgYnJlYWsgLy8gYFxuICAgICAgICBjYXNlIDB4Mjg6IHBhcmVuKys7IGJyZWFrICAgICAgICAgICAgICAgICAvLyAoXG4gICAgICAgIGNhc2UgMHgyOTogcGFyZW4tLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIClcbiAgICAgICAgY2FzZSAweDVCOiBzcXVhcmUrKzsgYnJlYWsgICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICBjYXNlIDB4NUQ6IHNxdWFyZS0tOyBicmVhayAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgIGNhc2UgMHg3QjogY3VybHkrKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgY2FzZSAweDdEOiBjdXJseS0tOyBicmVhayAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgaWYgKGMgPT09IDB4MmYpIHsgLy8gL1xuICAgICAgICB2YXIgaiA9IGkgLSAxO1xuICAgICAgICB2YXIgcCA9ICh2b2lkIDApO1xuICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNlIHByZXYgY2hhclxuICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICBwID0gZXhwLmNoYXJBdChqKTtcbiAgICAgICAgICBpZiAocCAhPT0gJyAnKSB7IGJyZWFrIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXAgfHwgIXZhbGlkRGl2aXNpb25DaGFyUkUudGVzdChwKSkge1xuICAgICAgICAgIGluUmVnZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICB9IGVsc2UgaWYgKGxhc3RGaWx0ZXJJbmRleCAhPT0gMCkge1xuICAgIHB1c2hGaWx0ZXIoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hGaWx0ZXIgKCkge1xuICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0RmlsdGVySW5kZXgsIGkpLnRyaW0oKSk7XG4gICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gIH1cblxuICBpZiAoZmlsdGVycykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHByZXNzaW9uID0gd3JhcEZpbHRlcihleHByZXNzaW9uLCBmaWx0ZXJzW2ldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcmVzc2lvblxufVxuXG5mdW5jdGlvbiB3cmFwRmlsdGVyIChleHAsIGZpbHRlcikge1xuICB2YXIgaSA9IGZpbHRlci5pbmRleE9mKCcoJyk7XG4gIGlmIChpIDwgMCkge1xuICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgcmV0dXJuIChcIl9mKFxcXCJcIiArIGZpbHRlciArIFwiXFxcIikoXCIgKyBleHAgKyBcIilcIilcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmFtZSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICB2YXIgYXJncyA9IGZpbHRlci5zbGljZShpICsgMSk7XG4gICAgcmV0dXJuIChcIl9mKFxcXCJcIiArIG5hbWUgKyBcIlxcXCIpKFwiICsgZXhwICsgKGFyZ3MgIT09ICcpJyA/ICcsJyArIGFyZ3MgOiBhcmdzKSlcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmFzZVdhcm4gKG1zZykge1xuICBjb25zb2xlLmVycm9yKChcIltWdWUgY29tcGlsZXJdOiBcIiArIG1zZykpO1xufVxuXG5mdW5jdGlvbiBwbHVja01vZHVsZUZ1bmN0aW9uIChcbiAgbW9kdWxlcyxcbiAga2V5XG4pIHtcbiAgcmV0dXJuIG1vZHVsZXNcbiAgICA/IG1vZHVsZXMubWFwKGZ1bmN0aW9uIChtKSB7IHJldHVybiBtW2tleV07IH0pLmZpbHRlcihmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfSlcbiAgICA6IFtdXG59XG5cbmZ1bmN0aW9uIGFkZFByb3AgKGVsLCBuYW1lLCB2YWx1ZSkge1xuICAoZWwucHJvcHMgfHwgKGVsLnByb3BzID0gW10pKS5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xuICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyIChlbCwgbmFtZSwgdmFsdWUpIHtcbiAgKGVsLmF0dHJzIHx8IChlbC5hdHRycyA9IFtdKSkucHVzaCh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuLy8gYWRkIGEgcmF3IGF0dHIgKHVzZSB0aGlzIGluIHByZVRyYW5zZm9ybXMpXG5mdW5jdGlvbiBhZGRSYXdBdHRyIChlbCwgbmFtZSwgdmFsdWUpIHtcbiAgZWwuYXR0cnNNYXBbbmFtZV0gPSB2YWx1ZTtcbiAgZWwuYXR0cnNMaXN0LnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZERpcmVjdGl2ZSAoXG4gIGVsLFxuICBuYW1lLFxuICByYXdOYW1lLFxuICB2YWx1ZSxcbiAgYXJnLFxuICBtb2RpZmllcnNcbikge1xuICAoZWwuZGlyZWN0aXZlcyB8fCAoZWwuZGlyZWN0aXZlcyA9IFtdKSkucHVzaCh7IG5hbWU6IG5hbWUsIHJhd05hbWU6IHJhd05hbWUsIHZhbHVlOiB2YWx1ZSwgYXJnOiBhcmcsIG1vZGlmaWVyczogbW9kaWZpZXJzIH0pO1xuICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyIChcbiAgZWwsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICBtb2RpZmllcnMsXG4gIGltcG9ydGFudCxcbiAgd2FyblxuKSB7XG4gIG1vZGlmaWVycyA9IG1vZGlmaWVycyB8fCBlbXB0eU9iamVjdDtcbiAgLy8gd2FybiBwcmV2ZW50IGFuZCBwYXNzaXZlIG1vZGlmaWVyXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuICYmXG4gICAgbW9kaWZpZXJzLnByZXZlbnQgJiYgbW9kaWZpZXJzLnBhc3NpdmVcbiAgKSB7XG4gICAgd2FybihcbiAgICAgICdwYXNzaXZlIGFuZCBwcmV2ZW50IGNhblxcJ3QgYmUgdXNlZCB0b2dldGhlci4gJyArXG4gICAgICAnUGFzc2l2ZSBoYW5kbGVyIGNhblxcJ3QgcHJldmVudCBkZWZhdWx0IGV2ZW50LidcbiAgICApO1xuICB9XG5cbiAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICBpZiAobW9kaWZpZXJzLmNhcHR1cmUpIHtcbiAgICBkZWxldGUgbW9kaWZpZXJzLmNhcHR1cmU7XG4gICAgbmFtZSA9ICchJyArIG5hbWU7IC8vIG1hcmsgdGhlIGV2ZW50IGFzIGNhcHR1cmVkXG4gIH1cbiAgaWYgKG1vZGlmaWVycy5vbmNlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5vbmNlO1xuICAgIG5hbWUgPSAnficgKyBuYW1lOyAvLyBtYXJrIHRoZSBldmVudCBhcyBvbmNlXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMucGFzc2l2ZTtcbiAgICBuYW1lID0gJyYnICsgbmFtZTsgLy8gbWFyayB0aGUgZXZlbnQgYXMgcGFzc2l2ZVxuICB9XG5cbiAgLy8gbm9ybWFsaXplIGNsaWNrLnJpZ2h0IGFuZCBjbGljay5taWRkbGUgc2luY2UgdGhleSBkb24ndCBhY3R1YWxseSBmaXJlXG4gIC8vIHRoaXMgaXMgdGVjaG5pY2FsbHkgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGF0IGxlYXN0IGZvciBub3cgYnJvd3NlcnMgYXJlXG4gIC8vIHRoZSBvbmx5IHRhcmdldCBlbnZzIHRoYXQgaGF2ZSByaWdodC9taWRkbGUgY2xpY2tzLlxuICBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgIGlmIChtb2RpZmllcnMucmlnaHQpIHtcbiAgICAgIG5hbWUgPSAnY29udGV4dG1lbnUnO1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5yaWdodDtcbiAgICB9IGVsc2UgaWYgKG1vZGlmaWVycy5taWRkbGUpIHtcbiAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50cztcbiAgaWYgKG1vZGlmaWVycy5uYXRpdmUpIHtcbiAgICBkZWxldGUgbW9kaWZpZXJzLm5hdGl2ZTtcbiAgICBldmVudHMgPSBlbC5uYXRpdmVFdmVudHMgfHwgKGVsLm5hdGl2ZUV2ZW50cyA9IHt9KTtcbiAgfSBlbHNlIHtcbiAgICBldmVudHMgPSBlbC5ldmVudHMgfHwgKGVsLmV2ZW50cyA9IHt9KTtcbiAgfVxuXG4gIHZhciBuZXdIYW5kbGVyID0ge1xuICAgIHZhbHVlOiB2YWx1ZS50cmltKClcbiAgfTtcbiAgaWYgKG1vZGlmaWVycyAhPT0gZW1wdHlPYmplY3QpIHtcbiAgICBuZXdIYW5kbGVyLm1vZGlmaWVycyA9IG1vZGlmaWVycztcbiAgfVxuXG4gIHZhciBoYW5kbGVycyA9IGV2ZW50c1tuYW1lXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgIGltcG9ydGFudCA/IGhhbmRsZXJzLnVuc2hpZnQobmV3SGFuZGxlcikgOiBoYW5kbGVycy5wdXNoKG5ld0hhbmRsZXIpO1xuICB9IGVsc2UgaWYgKGhhbmRsZXJzKSB7XG4gICAgZXZlbnRzW25hbWVdID0gaW1wb3J0YW50ID8gW25ld0hhbmRsZXIsIGhhbmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzW25hbWVdID0gbmV3SGFuZGxlcjtcbiAgfVxuXG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEJpbmRpbmdBdHRyIChcbiAgZWwsXG4gIG5hbWUsXG4gIGdldFN0YXRpY1xuKSB7XG4gIHZhciBkeW5hbWljVmFsdWUgPVxuICAgIGdldEFuZFJlbW92ZUF0dHIoZWwsICc6JyArIG5hbWUpIHx8XG4gICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtYmluZDonICsgbmFtZSk7XG4gIGlmIChkeW5hbWljVmFsdWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJzZUZpbHRlcnMoZHluYW1pY1ZhbHVlKVxuICB9IGVsc2UgaWYgKGdldFN0YXRpYyAhPT0gZmFsc2UpIHtcbiAgICB2YXIgc3RhdGljVmFsdWUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCBuYW1lKTtcbiAgICBpZiAoc3RhdGljVmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0YXRpY1ZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vLyBub3RlOiB0aGlzIG9ubHkgcmVtb3ZlcyB0aGUgYXR0ciBmcm9tIHRoZSBBcnJheSAoYXR0cnNMaXN0KSBzbyB0aGF0IGl0XG4vLyBkb2Vzbid0IGdldCBwcm9jZXNzZWQgYnkgcHJvY2Vzc0F0dHJzLlxuLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXG4vLyBuZWVkZWQgZHVyaW5nIGNvZGVnZW4uXG5mdW5jdGlvbiBnZXRBbmRSZW1vdmVBdHRyIChcbiAgZWwsXG4gIG5hbWUsXG4gIHJlbW92ZUZyb21NYXBcbikge1xuICB2YXIgdmFsO1xuICBpZiAoKHZhbCA9IGVsLmF0dHJzTWFwW25hbWVdKSAhPSBudWxsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHJlbW92ZUZyb21NYXApIHtcbiAgICBkZWxldGUgZWwuYXR0cnNNYXBbbmFtZV07XG4gIH1cbiAgcmV0dXJuIHZhbFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBvbmVudCB2LW1vZGVsXG4gKi9cbmZ1bmN0aW9uIGdlbkNvbXBvbmVudE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFyIHRyaW0gPSByZWYudHJpbTtcblxuICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gYmFzZVZhbHVlRXhwcmVzc2lvbjtcbiAgaWYgKHRyaW0pIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPVxuICAgICAgXCIodHlwZW9mIFwiICsgYmFzZVZhbHVlRXhwcmVzc2lvbiArIFwiID09PSAnc3RyaW5nJ1wiICtcbiAgICAgIFwiPyBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIi50cmltKClcIiArXG4gICAgICBcIjogXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgaWYgKG51bWJlcikge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICB2YXIgYXNzaWdubWVudCA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuXG4gIGVsLm1vZGVsID0ge1xuICAgIHZhbHVlOiAoXCIoXCIgKyB2YWx1ZSArIFwiKVwiKSxcbiAgICBleHByZXNzaW9uOiAoXCJcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSxcbiAgICBjYWxsYmFjazogKFwiZnVuY3Rpb24gKFwiICsgYmFzZVZhbHVlRXhwcmVzc2lvbiArIFwiKSB7XCIgKyBhc3NpZ25tZW50ICsgXCJ9XCIpXG4gIH07XG59XG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZWdlbiBoZWxwZXIgZm9yIGdlbmVyYXRpbmcgdi1tb2RlbCB2YWx1ZSBhc3NpZ25tZW50IGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGdlbkFzc2lnbm1lbnRDb2RlIChcbiAgdmFsdWUsXG4gIGFzc2lnbm1lbnRcbikge1xuICB2YXIgcmVzID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gIGlmIChyZXMua2V5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuICh2YWx1ZSArIFwiPVwiICsgYXNzaWdubWVudClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiJHNldChcIiArIChyZXMuZXhwKSArIFwiLCBcIiArIChyZXMua2V5KSArIFwiLCBcIiArIGFzc2lnbm1lbnQgKyBcIilcIilcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgdi1tb2RlbCBleHByZXNzaW9uIGludG8gYSBiYXNlIHBhdGggYW5kIGEgZmluYWwga2V5IHNlZ21lbnQuXG4gKiBIYW5kbGVzIGJvdGggZG90LXBhdGggYW5kIHBvc3NpYmxlIHNxdWFyZSBicmFja2V0cy5cbiAqXG4gKiBQb3NzaWJsZSBjYXNlczpcbiAqXG4gKiAtIHRlc3RcbiAqIC0gdGVzdFtrZXldXG4gKiAtIHRlc3RbdGVzdDFba2V5XV1cbiAqIC0gdGVzdFtcImFcIl1ba2V5XVxuICogLSB4eHgudGVzdFthW2FdLnRlc3QxW2tleV1dXG4gKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVzdDFba2V5XV1cbiAqXG4gKi9cblxudmFyIGxlbjtcbnZhciBzdHI7XG52YXIgY2hyO1xudmFyIGluZGV4JDE7XG52YXIgZXhwcmVzc2lvblBvcztcbnZhciBleHByZXNzaW9uRW5kUG9zO1xuXG5cblxuZnVuY3Rpb24gcGFyc2VNb2RlbCAodmFsKSB7XG4gIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL3B1bGwvNzczMFxuICAvLyBhbGxvdyB2LW1vZGVsPVwib2JqLnZhbCBcIiAodHJhaWxpbmcgd2hpdGVzcGFjZSlcbiAgdmFsID0gdmFsLnRyaW0oKTtcbiAgbGVuID0gdmFsLmxlbmd0aDtcblxuICBpZiAodmFsLmluZGV4T2YoJ1snKSA8IDAgfHwgdmFsLmxhc3RJbmRleE9mKCddJykgPCBsZW4gLSAxKSB7XG4gICAgaW5kZXgkMSA9IHZhbC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChpbmRleCQxID4gLTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cDogdmFsLnNsaWNlKDAsIGluZGV4JDEpLFxuICAgICAgICBrZXk6ICdcIicgKyB2YWwuc2xpY2UoaW5kZXgkMSArIDEpICsgJ1wiJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbCxcbiAgICAgICAga2V5OiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RyID0gdmFsO1xuICBpbmRleCQxID0gZXhwcmVzc2lvblBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuXG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gMHg1Qikge1xuICAgICAgcGFyc2VCcmFja2V0KGNocik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICBrZXk6IHZhbC5zbGljZShleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0ICgpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgkMSlcbn1cblxuZnVuY3Rpb24gZW9mICgpIHtcbiAgcmV0dXJuIGluZGV4JDEgPj0gbGVuXG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQgKGNocikge1xuICByZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgyN1xufVxuXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXQgKGNocikge1xuICB2YXIgaW5CcmFja2V0ID0gMTtcbiAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChjaHIgPT09IDB4NUIpIHsgaW5CcmFja2V0Kys7IH1cbiAgICBpZiAoY2hyID09PSAweDVEKSB7IGluQnJhY2tldC0tOyB9XG4gICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGluZGV4JDE7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgd2hpbGUgKCFlb2YoKSkge1xuICAgIGNociA9IG5leHQoKTtcbiAgICBpZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciB3YXJuJDE7XG5cbi8vIGluIHNvbWUgY2FzZXMsIHRoZSBldmVudCB1c2VkIGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbnZhciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xuXG5mdW5jdGlvbiBtb2RlbCAoXG4gIGVsLFxuICBkaXIsXG4gIF93YXJuXG4pIHtcbiAgd2FybiQxID0gX3dhcm47XG4gIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gIHZhciB0YWcgPSBlbC50YWc7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgIC8vIHZhbHVlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnZmlsZScpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCIgdHlwZT1cXFwiZmlsZVxcXCI+OlxcblwiICtcbiAgICAgICAgXCJGaWxlIGlucHV0cyBhcmUgcmVhZCBvbmx5LiBVc2UgYSB2LW9uOmNoYW5nZSBsaXN0ZW5lciBpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgIGdlbkNoZWNrYm94TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJykge1xuICAgIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAoIWNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybiQxKFxuICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQgdHlwZS4gXCIgK1xuICAgICAgJ0lmIHlvdSBhcmUgd29ya2luZyB3aXRoIGNvbnRlbnRlZGl0YWJsZSwgaXRcXCdzIHJlY29tbWVuZGVkIHRvICcgK1xuICAgICAgJ3dyYXAgYSBsaWJyYXJ5IGRlZGljYXRlZCBmb3IgdGhhdCBwdXJwb3NlIGluc2lkZSBhIGN1c3RvbSBjb21wb25lbnQuJ1xuICAgICk7XG4gIH1cblxuICAvLyBlbnN1cmUgcnVudGltZSBkaXJlY3RpdmUgbWV0YWRhdGFcbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZ2VuQ2hlY2tib3hNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gIHZhciBmYWxzZVZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnZmFsc2UtdmFsdWUnKSB8fCAnZmFsc2UnO1xuICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsXG4gICAgXCJBcnJheS5pc0FycmF5KFwiICsgdmFsdWUgKyBcIilcIiArXG4gICAgXCI/X2koXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpPi0xXCIgKyAoXG4gICAgICB0cnVlVmFsdWVCaW5kaW5nID09PSAndHJ1ZSdcbiAgICAgICAgPyAoXCI6KFwiICsgdmFsdWUgKyBcIilcIilcbiAgICAgICAgOiAoXCI6X3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdHJ1ZVZhbHVlQmluZGluZyArIFwiKVwiKVxuICAgIClcbiAgKTtcbiAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsXG4gICAgXCJ2YXIgJCRhPVwiICsgdmFsdWUgKyBcIixcIiArXG4gICAgICAgICckJGVsPSRldmVudC50YXJnZXQsJyArXG4gICAgICAgIFwiJCRjPSQkZWwuY2hlY2tlZD8oXCIgKyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpOihcIiArIGZhbHNlVmFsdWVCaW5kaW5nICsgXCIpO1wiICtcbiAgICAnaWYoQXJyYXkuaXNBcnJheSgkJGEpKXsnICtcbiAgICAgIFwidmFyICQkdj1cIiArIChudW1iZXIgPyAnX24oJyArIHZhbHVlQmluZGluZyArICcpJyA6IHZhbHVlQmluZGluZykgKyBcIixcIiArXG4gICAgICAgICAgJyQkaT1faSgkJGEsJCR2KTsnICtcbiAgICAgIFwiaWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKFwiICsgKGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRhLmNvbmNhdChbJCR2XSknKSkgKyBcIil9XCIgK1xuICAgICAgXCJlbHNleyQkaT4tMSYmKFwiICsgKGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSknKSkgKyBcIil9XCIgK1xuICAgIFwifWVsc2V7XCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGMnKSkgKyBcIn1cIixcbiAgICBudWxsLCB0cnVlXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdlblJhZGlvTW9kZWwgKFxuICBlbCxcbiAgdmFsdWUsXG4gIG1vZGlmaWVyc1xuKSB7XG4gIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgdmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gIHZhbHVlQmluZGluZyA9IG51bWJlciA/IChcIl9uKFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpIDogdmFsdWVCaW5kaW5nO1xuICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIChcIl9xKFwiICsgdmFsdWUgKyBcIixcIiArIHZhbHVlQmluZGluZyArIFwiKVwiKSk7XG4gIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVCaW5kaW5nKSwgbnVsbCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdlblNlbGVjdCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICB2YXIgc2VsZWN0ZWRWYWwgPSBcIkFycmF5LnByb3RvdHlwZS5maWx0ZXJcIiArXG4gICAgXCIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KVwiICtcbiAgICBcIi5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFxcXCJfdmFsdWVcXFwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7XCIgK1xuICAgIFwicmV0dXJuIFwiICsgKG51bWJlciA/ICdfbih2YWwpJyA6ICd2YWwnKSArIFwifSlcIjtcblxuICB2YXIgYXNzaWdubWVudCA9ICckZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF0nO1xuICB2YXIgY29kZSA9IFwidmFyICQkc2VsZWN0ZWRWYWwgPSBcIiArIHNlbGVjdGVkVmFsICsgXCI7XCI7XG4gIGNvZGUgPSBjb2RlICsgXCIgXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIGFzc2lnbm1lbnQpKTtcbiAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIGNvZGUsIG51bGwsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBnZW5EZWZhdWx0TW9kZWwgKFxuICBlbCxcbiAgdmFsdWUsXG4gIG1vZGlmaWVyc1xuKSB7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICAvLyB3YXJuIGlmIHYtYmluZDp2YWx1ZSBjb25mbGljdHMgd2l0aCB2LW1vZGVsXG4gIC8vIGV4Y2VwdCBmb3IgaW5wdXRzIHdpdGggdi1iaW5kOnR5cGVcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgdmFsdWUkMSA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dmFsdWUnXSB8fCBlbC5hdHRyc01hcFsnOnZhbHVlJ107XG4gICAgdmFyIHR5cGVCaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp0eXBlJ10gfHwgZWwuYXR0cnNNYXBbJzp0eXBlJ107XG4gICAgaWYgKHZhbHVlJDEgJiYgIXR5cGVCaW5kaW5nKSB7XG4gICAgICB2YXIgYmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dmFsdWUnXSA/ICd2LWJpbmQ6dmFsdWUnIDogJzp2YWx1ZSc7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGJpbmRpbmcgKyBcIj1cXFwiXCIgKyB2YWx1ZSQxICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIHYtbW9kZWwgb24gdGhlIHNhbWUgZWxlbWVudCBcIiArXG4gICAgICAgICdiZWNhdXNlIHRoZSBsYXR0ZXIgYWxyZWFkeSBleHBhbmRzIHRvIGEgdmFsdWUgYmluZGluZyBpbnRlcm5hbGx5J1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICB2YXIgbGF6eSA9IHJlZi5sYXp5O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFyIHRyaW0gPSByZWYudHJpbTtcbiAgdmFyIG5lZWRDb21wb3NpdGlvbkd1YXJkID0gIWxhenkgJiYgdHlwZSAhPT0gJ3JhbmdlJztcbiAgdmFyIGV2ZW50ID0gbGF6eVxuICAgID8gJ2NoYW5nZSdcbiAgICA6IHR5cGUgPT09ICdyYW5nZSdcbiAgICAgID8gUkFOR0VfVE9LRU5cbiAgICAgIDogJ2lucHV0JztcblxuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gJyRldmVudC50YXJnZXQudmFsdWUnO1xuICBpZiAodHJpbSkge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIjtcbiAgfVxuICBpZiAobnVtYmVyKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIiArIHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG5cbiAgdmFyIGNvZGUgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcbiAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgY29kZSA9IFwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuO1wiICsgY29kZTtcbiAgfVxuXG4gIGFkZFByb3AoZWwsICd2YWx1ZScsIChcIihcIiArIHZhbHVlICsgXCIpXCIpKTtcbiAgYWRkSGFuZGxlcihlbCwgZXZlbnQsIGNvZGUsIG51bGwsIHRydWUpO1xuICBpZiAodHJpbSB8fCBudW1iZXIpIHtcbiAgICBhZGRIYW5kbGVyKGVsLCAnYmx1cicsICckZm9yY2VVcGRhdGUoKScpO1xuICB9XG59XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoaGFuZGxlciwgZXZlbnQsIGNhcHR1cmUpIHtcbiAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gaGFuZGxlci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIHJlbW92ZSQyKGV2ZW50LCBvbmNlSGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgZXZlbnQsXG4gIGhhbmRsZXIsXG4gIG9uY2UkJDEsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICBoYW5kbGVyID0gd2l0aE1hY3JvVGFzayhoYW5kbGVyKTtcbiAgaWYgKG9uY2UkJDEpIHsgaGFuZGxlciA9IGNyZWF0ZU9uY2VIYW5kbGVyKGhhbmRsZXIsIGV2ZW50LCBjYXB0dXJlKTsgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIGV2ZW50LFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBldmVudCxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgX3RhcmdldFxuKSB7XG4gIChfdGFyZ2V0IHx8IHRhcmdldCQxKS5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgIGV2ZW50LFxuICAgIGhhbmRsZXIuX3dpdGhUYXNrIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgdm5vZGUuY29udGV4dCk7XG4gIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmIChpc1VuZGVmKHByb3BzW2tleV0pKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgIGN1ciA9IHByb3BzW2tleV07XG4gICAgLy8gaWdub3JlIGNoaWxkcmVuIGlmIHRoZSBub2RlIGhhcyB0ZXh0Q29udGVudCBvciBpbm5lckhUTUwsXG4gICAgLy8gYXMgdGhlc2Ugd2lsbCB0aHJvdyBhd2F5IGV4aXN0aW5nIERPTSBub2RlcyBhbmQgY2F1c2UgcmVtb3ZhbCBlcnJvcnNcbiAgICAvLyBvbiBzdWJzZXF1ZW50IHBhdGNoZXMgKCMzMzYwKVxuICAgIGlmIChrZXkgPT09ICd0ZXh0Q29udGVudCcgfHwga2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKSB7IHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7IH1cbiAgICAgIGlmIChjdXIgPT09IG9sZFByb3BzW2tleV0pIHsgY29udGludWUgfVxuICAgICAgLy8gIzY2MDEgd29yayBhcm91bmQgQ2hyb21lIHZlcnNpb24gPD0gNTUgYnVnIHdoZXJlIHNpbmdsZSB0ZXh0Tm9kZVxuICAgICAgLy8gcmVwbGFjZWQgYnkgaW5uZXJIVE1ML3RleHRDb250ZW50IHJldGFpbnMgaXRzIHBhcmVudE5vZGUgcHJvcGVydHlcbiAgICAgIGlmIChlbG0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAndmFsdWUnKSB7XG4gICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxuICAgICAgZWxtLl92YWx1ZSA9IGN1cjtcbiAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgdmFyIHN0ckN1ciA9IGlzVW5kZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBzdHJDdXIpKSB7XG4gICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxtW2tleV0gPSBjdXI7XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkgKGVsbSwgY2hlY2tWYWwpIHtcbiAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAvLyAjNjE1N1xuICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgdHJ5IHsgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTsgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxufVxuXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyAoZWxtLCBuZXdWYWwpIHtcbiAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICBpZiAobW9kaWZpZXJzLmxhenkpIHtcbiAgICAgIC8vIGlucHV0cyB3aXRoIGxhenkgc2hvdWxkIG9ubHkgYmUgdXBkYXRlZCB3aGVuIG5vdCBpbiBmb2N1c1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxufVxuXG52YXIgZG9tUHJvcHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn1cblxuLyogICovXG5cbnZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLy8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIHN0eWxlIGRhdGEgb24gdGhlIHNhbWUgdm5vZGVcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlRGF0YSAoZGF0YSkge1xuICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcoZGF0YS5zdHlsZSk7XG4gIC8vIHN0YXRpYyBzdHlsZSBpcyBwcmUtcHJvY2Vzc2VkIGludG8gYW4gb2JqZWN0IGR1cmluZyBjb21waWxhdGlvblxuICAvLyBhbmQgaXMgYWx3YXlzIGEgZnJlc2ggb2JqZWN0LCBzbyBpdCdzIHNhZmUgdG8gbWVyZ2UgaW50byBpdFxuICByZXR1cm4gZGF0YS5zdGF0aWNTdHlsZVxuICAgID8gZXh0ZW5kKGRhdGEuc3RhdGljU3R5bGUsIHN0eWxlKVxuICAgIDogc3R5bGVcbn1cblxuLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVCaW5kaW5nIChiaW5kaW5nU3R5bGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmluZGluZ1N0eWxlKSkge1xuICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgaWYgKHR5cGVvZiBiaW5kaW5nU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICByZXR1cm4gYmluZGluZ1N0eWxlXG59XG5cbi8qKlxuICogcGFyZW50IGNvbXBvbmVudCBzdHlsZSBzaG91bGQgYmUgYWZ0ZXIgY2hpbGQnc1xuICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGUgKHZub2RlLCBjaGVja0NoaWxkKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIHN0eWxlRGF0YTtcblxuICBpZiAoY2hlY2tDaGlsZCkge1xuICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgaWYgKFxuICAgICAgICBjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEgJiZcbiAgICAgICAgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpXG4gICAgICApIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YSh2bm9kZS5kYXRhKSkpIHtcbiAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICB9XG5cbiAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUuZGF0YSAmJiAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHBhcmVudE5vZGUuZGF0YSkpKSB7XG4gICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgY3NzVmFyUkUgPSAvXi0tLztcbnZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xudmFyIHNldFByb3AgPSBmdW5jdGlvbiAoZWwsIG5hbWUsIHZhbCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGNzc1ZhclJFLnRlc3QobmFtZSkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWwpO1xuICB9IGVsc2UgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcblxudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgIHJldHVybiBwcm9wXG4gIH1cbiAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuICB9XG59KTtcblxuZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcblxuICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGN1ciwgbmFtZTtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcblxuICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuXG4gIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAvLyB0byBtdXRhdGUgaXQuXG4gIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKVxuICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICA6IHN0eWxlO1xuXG4gIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcblxuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHN0eWxlID0ge1xuICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59XG5cbi8qICAqL1xuXG4vKipcbiAqIEFkZCBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICogU1ZHIGVsZW1lbnRzIGluIElFXG4gKi9cbmZ1bmN0aW9uIGFkZENsYXNzIChlbCwgY2xzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgY2xzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChjKTsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoY3VyICsgY2xzKS50cmltKCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICogU1ZHIGVsZW1lbnRzIGluIElFXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzIChlbCwgY2xzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgY2xzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShjKTsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICB9XG4gICAgaWYgKCFlbC5jbGFzc0xpc3QubGVuZ3RoKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgdmFyIHRhciA9ICcgJyArIGNscyArICcgJztcbiAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICBjdXIgPSBjdXIucmVwbGFjZSh0YXIsICcgJyk7XG4gICAgfVxuICAgIGN1ciA9IGN1ci50cmltKCk7XG4gICAgaWYgKGN1cikge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGN1cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uIChkZWYpIHtcbiAgaWYgKCFkZWYpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodHlwZW9mIGRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgaWYgKGRlZi5jc3MgIT09IGZhbHNlKSB7XG4gICAgICBleHRlbmQocmVzLCBhdXRvQ3NzVHJhbnNpdGlvbihkZWYubmFtZSB8fCAndicpKTtcbiAgICB9XG4gICAgZXh0ZW5kKHJlcywgZGVmKTtcbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYXV0b0Nzc1RyYW5zaXRpb24oZGVmKVxuICB9XG59XG5cbnZhciBhdXRvQ3NzVHJhbnNpdGlvbiA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4ge1xuICAgIGVudGVyQ2xhc3M6IChuYW1lICsgXCItZW50ZXJcIiksXG4gICAgZW50ZXJUb0NsYXNzOiAobmFtZSArIFwiLWVudGVyLXRvXCIpLFxuICAgIGVudGVyQWN0aXZlQ2xhc3M6IChuYW1lICsgXCItZW50ZXItYWN0aXZlXCIpLFxuICAgIGxlYXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmVcIiksXG4gICAgbGVhdmVUb0NsYXNzOiAobmFtZSArIFwiLWxlYXZlLXRvXCIpLFxuICAgIGxlYXZlQWN0aXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtYWN0aXZlXCIpXG4gIH1cbn0pO1xuXG52YXIgaGFzVHJhbnNpdGlvbiA9IGluQnJvd3NlciAmJiAhaXNJRTk7XG52YXIgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcbnZhciBBTklNQVRJT04gPSAnYW5pbWF0aW9uJztcblxuLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eS9ldmVudCBzbmlmZmluZ1xudmFyIHRyYW5zaXRpb25Qcm9wID0gJ3RyYW5zaXRpb24nO1xudmFyIHRyYW5zaXRpb25FbmRFdmVudCA9ICd0cmFuc2l0aW9uZW5kJztcbnZhciBhbmltYXRpb25Qcm9wID0gJ2FuaW1hdGlvbic7XG52YXIgYW5pbWF0aW9uRW5kRXZlbnQgPSAnYW5pbWF0aW9uZW5kJztcbmlmIChoYXNUcmFuc2l0aW9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgIHRyYW5zaXRpb25FbmRFdmVudCA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgfVxuICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBhbmltYXRpb25Qcm9wID0gJ1dlYmtpdEFuaW1hdGlvbic7XG4gICAgYW5pbWF0aW9uRW5kRXZlbnQgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgfVxufVxuXG4vLyBiaW5kaW5nIHRvIHdpbmRvdyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBob3QgcmVsb2FkIHdvcmsgaW4gSUUgaW4gc3RyaWN0IG1vZGVcbnZhciByYWYgPSBpbkJyb3dzZXJcbiAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KVxuICAgIDogc2V0VGltZW91dFxuICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIChmbikgeyByZXR1cm4gZm4oKTsgfTtcblxuZnVuY3Rpb24gbmV4dEZyYW1lIChmbikge1xuICByYWYoZnVuY3Rpb24gKCkge1xuICAgIHJhZihmbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgdmFyIHRyYW5zaXRpb25DbGFzc2VzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzIHx8IChlbC5fdHJhbnNpdGlvbkNsYXNzZXMgPSBbXSk7XG4gIGlmICh0cmFuc2l0aW9uQ2xhc3Nlcy5pbmRleE9mKGNscykgPCAwKSB7XG4gICAgdHJhbnNpdGlvbkNsYXNzZXMucHVzaChjbHMpO1xuICAgIGFkZENsYXNzKGVsLCBjbHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgcmVtb3ZlKGVsLl90cmFuc2l0aW9uQ2xhc3NlcywgY2xzKTtcbiAgfVxuICByZW1vdmVDbGFzcyhlbCwgY2xzKTtcbn1cblxuZnVuY3Rpb24gd2hlblRyYW5zaXRpb25FbmRzIChcbiAgZWwsXG4gIGV4cGVjdGVkVHlwZSxcbiAgY2Jcbikge1xuICB2YXIgcmVmID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gIHZhciB0aW1lb3V0ID0gcmVmLnRpbWVvdXQ7XG4gIHZhciBwcm9wQ291bnQgPSByZWYucHJvcENvdW50O1xuICBpZiAoIXR5cGUpIHsgcmV0dXJuIGNiKCkgfVxuICB2YXIgZXZlbnQgPSB0eXBlID09PSBUUkFOU0lUSU9OID8gdHJhbnNpdGlvbkVuZEV2ZW50IDogYW5pbWF0aW9uRW5kRXZlbnQ7XG4gIHZhciBlbmRlZCA9IDA7XG4gIHZhciBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xuICAgIGNiKCk7XG4gIH07XG4gIHZhciBvbkVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xuICAgICAgaWYgKCsrZW5kZWQgPj0gcHJvcENvdW50KSB7XG4gICAgICAgIGVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVuZGVkIDwgcHJvcENvdW50KSB7XG4gICAgICBlbmQoKTtcbiAgICB9XG4gIH0sIHRpbWVvdXQgKyAxKTtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xufVxuXG52YXIgdHJhbnNmb3JtUkUgPSAvXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO1xuXG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uSW5mbyAoZWwsIGV4cGVjdGVkVHlwZSkge1xuICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEZWxheSddLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KHRyYW5zaXRpb25EZWxheXMsIHRyYW5zaXRpb25EdXJhdGlvbnMpO1xuICB2YXIgYW5pbWF0aW9uRGVsYXlzID0gc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10uc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHByb3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKVxuICB9KSlcbn1cblxuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xhc3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0gJ2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAgICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2VsbGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBleHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcblxuICB2YXIgY2IgPSBlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICB9XG4gICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgIH1cbiAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGluZyAmJiBwYXJlbnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2JcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgIH1cbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICB9XG5cbiAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgY2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZWF2ZSAodm5vZGUsIHJtKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGVudGVyIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fZW50ZXJDYigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVybiBybSgpXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3M7XG4gIHZhciBsZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcztcbiAgdmFyIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3JlTGVhdmU7XG4gIHZhciBsZWF2ZSA9IGRhdGEubGVhdmU7XG4gIHZhciBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICB2YXIgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVkO1xuICB2YXIgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZTtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVhdmUpO1xuXG4gIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24ubGVhdmVcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBjYiA9IGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBsZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgICBhZnRlckxlYXZlICYmIGFmdGVyTGVhdmUoZWwpO1xuICAgIH1cbiAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmIChkZWxheUxlYXZlKSB7XG4gICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICB9IGVsc2Uge1xuICAgIHBlcmZvcm1MZWF2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybUxlYXZlICgpIHtcbiAgICAvLyB0aGUgZGVsYXllZCBsZWF2ZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkXG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgIFwiZ290IFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbCkpICsgXCIuXCIsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJyxcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgIC8vIGludm9rZXJcbiAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChcbiAgICAgIEFycmF5LmlzQXJyYXkoaW52b2tlckZucylcbiAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgIDogaW52b2tlckZuc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDFcbiAgfVxufVxuXG5mdW5jdGlvbiBfZW50ZXIgKF8sIHZub2RlKSB7XG4gIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICBlbnRlcih2bm9kZSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gIGNyZWF0ZTogX2VudGVyLFxuICBhY3RpdmF0ZTogX2VudGVyLFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgIH1cbiAgfVxufSA6IHt9XG5cbnZhciBwbGF0Zm9ybU1vZHVsZXMgPSBbXG4gIGF0dHJzLFxuICBrbGFzcyxcbiAgZXZlbnRzLFxuICBkb21Qcm9wcyxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb25cbl1cblxuLyogICovXG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsICYmIGVsLnZtb2RlbCkge1xuICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGRpcmVjdGl2ZSA9IHtcbiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIC8vICM2OTAzXG4gICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRpcmVjdGl2ZS5jb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgfVxuICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkge1xuICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0Jywgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXG4gICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcbiAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVlIGlzIG91dC1vZi1zeW5jIHdpdGggdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcbiAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgdmFyIHByZXZPcHRpb25zID0gZWwuX3ZPcHRpb25zO1xuICAgICAgdmFyIGN1ck9wdGlvbnMgPSBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICBpZiAoY3VyT3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc1tpXSk7IH0pKSB7XG4gICAgICAgIC8vIHRyaWdnZXIgY2hhbmdlIGV2ZW50IGlmXG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIG9wdGlvbiBmb3VuZCBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlXG4gICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnMpOyB9KVxuICAgICAgICAgIDogYmluZGluZy52YWx1ZSAhPT0gYmluZGluZy5vbGRWYWx1ZSAmJiBoYXNOb01hdGNoaW5nT3B0aW9uKGJpbmRpbmcudmFsdWUsIGN1ck9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgdHJpZ2dlcihlbCwgJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0lFIHx8IGlzRWRnZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICBcIjxzZWxlY3QgbXVsdGlwbGUgdi1tb2RlbD1cXFwiXCIgKyAoYmluZGluZy5leHByZXNzaW9uKSArIFwiXFxcIj4gXCIgK1xuICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKSksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlbGVjdGVkLCBvcHRpb247XG4gIGZvciAodmFyIGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xuICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcbiAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFpc011bHRpcGxlKSB7XG4gICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc05vTWF0Y2hpbmdPcHRpb24gKHZhbHVlLCBvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChvKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCB2YWx1ZSk7IH0pXG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlIChvcHRpb24pIHtcbiAgcmV0dXJuICdfdmFsdWUnIGluIG9wdGlvblxuICAgID8gb3B0aW9uLl92YWx1ZVxuICAgIDogb3B0aW9uLnZhbHVlXG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydCAoZSkge1xuICBlLnRhcmdldC5jb21wb3NpbmcgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kIChlKSB7XG4gIC8vIHByZXZlbnQgdHJpZ2dlcmluZyBhbiBpbnB1dCBldmVudCBmb3Igbm8gcmVhc29uXG4gIGlmICghZS50YXJnZXQuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IGZhbHNlO1xuICB0cmlnZ2VyKGUudGFyZ2V0LCAnaW5wdXQnKTtcbn1cblxuZnVuY3Rpb24gdHJpZ2dlciAoZWwsIHR5cGUpIHtcbiAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICBlLmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTtcbiAgZWwuZGlzcGF0Y2hFdmVudChlKTtcbn1cblxuLyogICovXG5cbi8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgcG9zc2libGUgdHJhbnNpdGlvbiBkZWZpbmVkIGluc2lkZSB0aGUgY29tcG9uZW50IHJvb3RcbmZ1bmN0aW9uIGxvY2F0ZU5vZGUgKHZub2RlKSB7XG4gIHJldHVybiB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJiAoIXZub2RlLmRhdGEgfHwgIXZub2RlLmRhdGEudHJhbnNpdGlvbilcbiAgICA/IGxvY2F0ZU5vZGUodm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKVxuICAgIDogdm5vZGVcbn1cblxudmFyIHNob3cgPSB7XG4gIGJpbmQ6IGZ1bmN0aW9uIGJpbmQgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuXG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgPVxuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnID8gJycgOiBlbC5zdHlsZS5kaXNwbGF5O1xuICAgIGlmICh2YWx1ZSAmJiB0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBvcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcbiAgICB2YXIgb2xkVmFsdWUgPSByZWYub2xkVmFsdWU7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpIHsgcmV0dXJuIH1cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgaWYgKHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQgKFxuICAgIGVsLFxuICAgIGJpbmRpbmcsXG4gICAgdm5vZGUsXG4gICAgb2xkVm5vZGUsXG4gICAgaXNEZXN0cm95XG4gICkge1xuICAgIGlmICghaXNEZXN0cm95KSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgIH1cbiAgfVxufVxuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogZGlyZWN0aXZlLFxuICBzaG93OiBzaG93XG59XG5cbi8qICAqL1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGEgc2luZ2xlIGVsZW1lbnQvY29tcG9uZW50LlxuLy8gc3VwcG9ydHMgdHJhbnNpdGlvbiBtb2RlIChvdXQtaW4gLyBpbi1vdXQpXG5cbnZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gIG5hbWU6IFN0cmluZyxcbiAgYXBwZWFyOiBCb29sZWFuLFxuICBjc3M6IEJvb2xlYW4sXG4gIG1vZGU6IFN0cmluZyxcbiAgdHlwZTogU3RyaW5nLFxuICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXG4gIGxlYXZlVG9DbGFzczogU3RyaW5nLFxuICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBPYmplY3RdXG59O1xuXG4vLyBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHNvIGFuIGFic3RyYWN0IGNvbXBvbmVudCwgZS5nLiA8a2VlcC1hbGl2ZT5cbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG5mdW5jdGlvbiBnZXRSZWFsQ2hpbGQgKHZub2RlKSB7XG4gIHZhciBjb21wT3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2bm9kZVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2l0aW9uRGF0YSAoY29tcCkge1xuICB2YXIgZGF0YSA9IHt9O1xuICB2YXIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gIC8vIHByb3BzXG4gIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgIGRhdGFba2V5XSA9IGNvbXBba2V5XTtcbiAgfVxuICAvLyBldmVudHMuXG4gIC8vIGV4dHJhY3QgbGlzdGVuZXJzIGFuZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gdGhlIHRyYW5zaXRpb24gbWV0aG9kc1xuICB2YXIgbGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBmb3IgKHZhciBrZXkkMSBpbiBsaXN0ZW5lcnMpIHtcbiAgICBkYXRhW2NhbWVsaXplKGtleSQxKV0gPSBsaXN0ZW5lcnNba2V5JDFdO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIHBsYWNlaG9sZGVyIChoLCByYXdDaGlsZCkge1xuICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICBwcm9wczogcmF3Q2hpbGQuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGFcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24gKHZub2RlKSB7XG4gIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHZub2RlLmRhdGEudHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTYW1lQ2hpbGQgKGNoaWxkLCBvbGRDaGlsZCkge1xuICByZXR1cm4gb2xkQ2hpbGQua2V5ID09PSBjaGlsZC5rZXkgJiYgb2xkQ2hpbGQudGFnID09PSBjaGlsZC50YWdcbn1cblxudmFyIFRyYW5zaXRpb24gPSB7XG4gIG5hbWU6ICd0cmFuc2l0aW9uJyxcbiAgcHJvcHM6IHRyYW5zaXRpb25Qcm9wcyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG91dCB0ZXh0IG5vZGVzIChwb3NzaWJsZSB3aGl0ZXNwYWNlcylcbiAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50YWcgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpOyB9KTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2FybiBtdWx0aXBsZSBlbGVtZW50c1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICc8dHJhbnNpdGlvbi1ncm91cD4gZm9yIGxpc3RzLicsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMubW9kZTtcblxuICAgIC8vIHdhcm4gaW52YWxpZCBtb2RlXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIG1vZGUgJiYgbW9kZSAhPT0gJ2luLW91dCcgJiYgbW9kZSAhPT0gJ291dC1pbidcbiAgICApIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdpbnZhbGlkIDx0cmFuc2l0aW9uPiBtb2RlOiAnICsgbW9kZSxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciByYXdDaGlsZCA9IGNoaWxkcmVuWzBdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBjb21wb25lbnQnc1xuICAgIC8vIHBhcmVudCBjb250YWluZXIgbm9kZSBhbHNvIGhhcyB0cmFuc2l0aW9uLCBza2lwLlxuICAgIGlmIChoYXNQYXJlbnRUcmFuc2l0aW9uKHRoaXMuJHZub2RlKSkge1xuICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBkYXRhIHRvIGNoaWxkXG4gICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgIHZhciBjaGlsZCA9IGdldFJlYWxDaGlsZChyYXdDaGlsZCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xlYXZpbmcpIHtcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICB9XG5cbiAgICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRvIHRoaXMgdHJhbnNpdGlvblxuICAgIC8vIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBrZXkgd2lsbCBiZSB1c2VkIHRvIHJlbW92ZSBwZW5kaW5nIGxlYXZpbmcgbm9kZXNcbiAgICAvLyBkdXJpbmcgZW50ZXJpbmcuXG4gICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIgKyAodGhpcy5fdWlkKSArIFwiLVwiO1xuICAgIGNoaWxkLmtleSA9IGNoaWxkLmtleSA9PSBudWxsXG4gICAgICA/IGNoaWxkLmlzQ29tbWVudFxuICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgIDogaWQgKyBjaGlsZC50YWdcbiAgICAgIDogaXNQcmltaXRpdmUoY2hpbGQua2V5KVxuICAgICAgICA/IChTdHJpbmcoY2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMCA/IGNoaWxkLmtleSA6IGlkICsgY2hpbGQua2V5KVxuICAgICAgICA6IGNoaWxkLmtleTtcblxuICAgIHZhciBkYXRhID0gKGNoaWxkLmRhdGEgfHwgKGNoaWxkLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG4gICAgdmFyIG9sZFJhd0NoaWxkID0gdGhpcy5fdm5vZGU7XG4gICAgdmFyIG9sZENoaWxkID0gZ2V0UmVhbENoaWxkKG9sZFJhd0NoaWxkKTtcblxuICAgIC8vIG1hcmsgdi1zaG93XG4gICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXG4gICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGlsZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH0pKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn1cblxuLyogICovXG5cbi8vIFByb3ZpZGVzIHRyYW5zaXRpb24gc3VwcG9ydCBmb3IgbGlzdCBpdGVtcy5cbi8vIHN1cHBvcnRzIG1vdmUgdHJhbnNpdGlvbnMgdXNpbmcgdGhlIEZMSVAgdGVjaG5pcXVlLlxuXG4vLyBCZWNhdXNlIHRoZSB2ZG9tJ3MgY2hpbGRyZW4gdXBkYXRlIGFsZ29yaXRobSBpcyBcInVuc3RhYmxlXCIgLSBpLmUuXG4vLyBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGUgcmVsYXRpdmUgcG9zaXRpb25pbmcgb2YgcmVtb3ZlZCBlbGVtZW50cyxcbi8vIHdlIGZvcmNlIHRyYW5zaXRpb24tZ3JvdXAgdG8gdXBkYXRlIGl0cyBjaGlsZHJlbiBpbnRvIHR3byBwYXNzZXM6XG4vLyBpbiB0aGUgZmlyc3QgcGFzcywgd2UgcmVtb3ZlIGFsbCBub2RlcyB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCxcbi8vIHRyaWdnZXJpbmcgdGhlaXIgbGVhdmluZyB0cmFuc2l0aW9uOyBpbiB0aGUgc2Vjb25kIHBhc3MsIHdlIGluc2VydC9tb3ZlXG4vLyBpbnRvIHRoZSBmaW5hbCBkZXNpcmVkIHN0YXRlLiBUaGlzIHdheSBpbiB0aGUgc2Vjb25kIHBhc3MgcmVtb3ZlZFxuLy8gbm9kZXMgd2lsbCByZW1haW4gd2hlcmUgdGhleSBzaG91bGQgYmUuXG5cbnZhciBwcm9wcyA9IGV4dGVuZCh7XG4gIHRhZzogU3RyaW5nLFxuICBtb3ZlQ2xhc3M6IFN0cmluZ1xufSwgdHJhbnNpdGlvblByb3BzKTtcblxuZGVsZXRlIHByb3BzLm1vZGU7XG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gIHByb3BzOiBwcm9wcyxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgcmF3Q2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgaWYgKGMudGFnKSB7XG4gICAgICAgIGlmIChjLmtleSAhPSBudWxsICYmIFN0cmluZyhjLmtleSkuaW5kZXhPZignX192bGlzdCcpICE9PSAwKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICBtYXBbYy5rZXldID0gY1xuICAgICAgICAgIDsoYy5kYXRhIHx8IChjLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgd2FybigoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiICsgbmFtZSArIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgYyQxLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICBjJDEuZGF0YS5wb3MgPSBjJDEuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAga2VwdC5wdXNoKGMkMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgfSxcblxuICBiZWZvcmVVcGRhdGU6IGZ1bmN0aW9uIGJlZm9yZVVwZGF0ZSAoKSB7XG4gICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgIHRoaXMuX19wYXRjaF9fKFxuICAgICAgdGhpcy5fdm5vZGUsXG4gICAgICB0aGlzLmtlcHQsXG4gICAgICBmYWxzZSwgLy8gaHlkcmF0aW5nXG4gICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICApO1xuICAgIHRoaXMuX3Zub2RlID0gdGhpcy5rZXB0O1xuICB9LFxuXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQgKCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuO1xuICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAoKHRoaXMubmFtZSB8fCAndicpICsgJy1tb3ZlJyk7XG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMuaGFzTW92ZShjaGlsZHJlblswXS5lbG0sIG1vdmVDbGFzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdlIGRpdmlkZSB0aGUgd29yayBpbnRvIHRocmVlIGxvb3BzIHRvIGF2b2lkIG1peGluZyBET00gcmVhZHMgYW5kIHdyaXRlc1xuICAgIC8vIGluIGVhY2ggaXRlcmF0aW9uIC0gd2hpY2ggaGVscHMgcHJldmVudCBsYXlvdXQgdGhyYXNoaW5nLlxuICAgIGNoaWxkcmVuLmZvckVhY2goY2FsbFBlbmRpbmdDYnMpO1xuICAgIGNoaWxkcmVuLmZvckVhY2gocmVjb3JkUG9zaXRpb24pO1xuICAgIGNoaWxkcmVuLmZvckVhY2goYXBwbHlUcmFuc2xhdGlvbik7XG5cbiAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cbiAgICAvLyBhc3NpZ24gdG8gdGhpcyB0byBhdm9pZCBiZWluZyByZW1vdmVkIGluIHRyZWUtc2hha2luZ1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgaWYgKGMuZGF0YS5tb3ZlZCkge1xuICAgICAgICB2YXIgZWwgPSBjLmVsbTtcbiAgICAgICAgdmFyIHMgPSBlbC5zdHlsZTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGVsLl9tb3ZlQ2IgPSBmdW5jdGlvbiBjYiAoZSkge1xuICAgICAgICAgIGlmICghZSB8fCAvdHJhbnNmb3JtJC8udGVzdChlLnByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XG4gICAgICAgICAgICBlbC5fbW92ZUNiID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNNb3ZlOiBmdW5jdGlvbiBoYXNNb3ZlIChlbCwgbW92ZUNsYXNzKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghaGFzVHJhbnNpdGlvbikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHRoaXMuX2hhc01vdmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc01vdmVcbiAgICAgIH1cbiAgICAgIC8vIERldGVjdCB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgbW92ZSBjbGFzcyBhcHBsaWVkIGhhc1xuICAgICAgLy8gQ1NTIHRyYW5zaXRpb25zLiBTaW5jZSB0aGUgZWxlbWVudCBtYXkgYmUgaW5zaWRlIGFuIGVudGVyaW5nXG4gICAgICAvLyB0cmFuc2l0aW9uIGF0IHRoaXMgdmVyeSBtb21lbnQsIHdlIG1ha2UgYSBjbG9uZSBvZiBpdCBhbmQgcmVtb3ZlXG4gICAgICAvLyBhbGwgb3RoZXIgdHJhbnNpdGlvbiBjbGFzc2VzIGFwcGxpZWQgdG8gZW5zdXJlIG9ubHkgdGhlIG1vdmUgY2xhc3NcbiAgICAgIC8vIGlzIGFwcGxpZWQuXG4gICAgICB2YXIgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgZWwuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykgeyByZW1vdmVDbGFzcyhjbG9uZSwgY2xzKTsgfSk7XG4gICAgICB9XG4gICAgICBhZGRDbGFzcyhjbG9uZSwgbW92ZUNsYXNzKTtcbiAgICAgIGNsb25lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLiRlbC5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgICB2YXIgaW5mbyA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcbiAgICAgIHRoaXMuJGVsLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgIHJldHVybiAodGhpcy5faGFzTW92ZSA9IGluZm8uaGFzVHJhbnNmb3JtKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUuY29uZmlnLm11c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGluQnJvd3Nlcikge1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICBpZiAoZGV2dG9vbHMpIHtcbiAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiZcbiAgICAgICAgaXNDaHJvbWVcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmXG4gICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgIFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCAwKTtcbn1cblxuLyogICovXG5cbnZhciBkZWZhdWx0VGFnUkUgPSAvXFx7XFx7KCg/Oi58XFxuKSs/KVxcfVxcfS9nO1xudmFyIHJlZ2V4RXNjYXBlUkUgPSAvWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXS9nO1xuXG52YXIgYnVpbGRSZWdleCA9IGNhY2hlZChmdW5jdGlvbiAoZGVsaW1pdGVycykge1xuICB2YXIgb3BlbiA9IGRlbGltaXRlcnNbMF0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XG4gIHZhciBjbG9zZSA9IGRlbGltaXRlcnNbMV0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XG4gIHJldHVybiBuZXcgUmVnRXhwKG9wZW4gKyAnKCg/Oi58XFxcXG4pKz8pJyArIGNsb3NlLCAnZycpXG59KTtcblxuXG5cbmZ1bmN0aW9uIHBhcnNlVGV4dCAoXG4gIHRleHQsXG4gIGRlbGltaXRlcnNcbikge1xuICB2YXIgdGFnUkUgPSBkZWxpbWl0ZXJzID8gYnVpbGRSZWdleChkZWxpbWl0ZXJzKSA6IGRlZmF1bHRUYWdSRTtcbiAgaWYgKCF0YWdSRS50ZXN0KHRleHQpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIgcmF3VG9rZW5zID0gW107XG4gIHZhciBsYXN0SW5kZXggPSB0YWdSRS5sYXN0SW5kZXggPSAwO1xuICB2YXIgbWF0Y2gsIGluZGV4LCB0b2tlblZhbHVlO1xuICB3aGlsZSAoKG1hdGNoID0gdGFnUkUuZXhlYyh0ZXh0KSkpIHtcbiAgICBpbmRleCA9IG1hdGNoLmluZGV4O1xuICAgIC8vIHB1c2ggdGV4dCB0b2tlblxuICAgIGlmIChpbmRleCA+IGxhc3RJbmRleCkge1xuICAgICAgcmF3VG9rZW5zLnB1c2godG9rZW5WYWx1ZSA9IHRleHQuc2xpY2UobGFzdEluZGV4LCBpbmRleCkpO1xuICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgIH1cbiAgICAvLyB0YWcgdG9rZW5cbiAgICB2YXIgZXhwID0gcGFyc2VGaWx0ZXJzKG1hdGNoWzFdLnRyaW0oKSk7XG4gICAgdG9rZW5zLnB1c2goKFwiX3MoXCIgKyBleHAgKyBcIilcIikpO1xuICAgIHJhd1Rva2Vucy5wdXNoKHsgJ0BiaW5kaW5nJzogZXhwIH0pO1xuICAgIGxhc3RJbmRleCA9IGluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICB9XG4gIGlmIChsYXN0SW5kZXggPCB0ZXh0Lmxlbmd0aCkge1xuICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkpO1xuICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGV4cHJlc3Npb246IHRva2Vucy5qb2luKCcrJyksXG4gICAgdG9rZW5zOiByYXdUb2tlbnNcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gdHJhbnNmb3JtTm9kZSAoZWwsIG9wdGlvbnMpIHtcbiAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHZhciBzdGF0aWNDbGFzcyA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdjbGFzcycpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdGF0aWNDbGFzcykge1xuICAgIHZhciByZXMgPSBwYXJzZVRleHQoc3RhdGljQ2xhc3MsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgaWYgKHJlcykge1xuICAgICAgd2FybihcbiAgICAgICAgXCJjbGFzcz1cXFwiXCIgKyBzdGF0aWNDbGFzcyArIFwiXFxcIjogXCIgK1xuICAgICAgICAnSW50ZXJwb2xhdGlvbiBpbnNpZGUgYXR0cmlidXRlcyBoYXMgYmVlbiByZW1vdmVkLiAnICtcbiAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgY2xhc3M9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpjbGFzcz1cInZhbFwiPi4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICBlbC5zdGF0aWNDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHN0YXRpY0NsYXNzKTtcbiAgfVxuICB2YXIgY2xhc3NCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdjbGFzcycsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XG4gIGlmIChjbGFzc0JpbmRpbmcpIHtcbiAgICBlbC5jbGFzc0JpbmRpbmcgPSBjbGFzc0JpbmRpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY0NsYXNzKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY0NsYXNzOlwiICsgKGVsLnN0YXRpY0NsYXNzKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwiY2xhc3M6XCIgKyAoZWwuY2xhc3NCaW5kaW5nKSArIFwiLFwiO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbnZhciBrbGFzcyQxID0ge1xuICBzdGF0aWNLZXlzOiBbJ3N0YXRpY0NsYXNzJ10sXG4gIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gIGdlbkRhdGE6IGdlbkRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUkMSAoZWwsIG9wdGlvbnMpIHtcbiAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHZhciBzdGF0aWNTdHlsZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzdHlsZScpO1xuICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNTdHlsZSwgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcInN0eWxlPVxcXCJcIiArIHN0YXRpY1N0eWxlICsgXCJcXFwiOiBcIiArXG4gICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBzdHlsZT1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOnN0eWxlPVwidmFsXCI+LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xuICB9XG5cbiAgdmFyIHN0eWxlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc3R5bGUnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgZWwuc3R5bGVCaW5kaW5nID0gc3R5bGVCaW5kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkRhdGEkMSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY1N0eWxlOlwiICsgKGVsLnN0YXRpY1N0eWxlKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwic3R5bGU6KFwiICsgKGVsLnN0eWxlQmluZGluZykgKyBcIiksXCI7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxudmFyIHN0eWxlJDEgPSB7XG4gIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxuICBnZW5EYXRhOiBnZW5EYXRhJDFcbn1cblxuLyogICovXG5cbnZhciBkZWNvZGVyO1xuXG52YXIgaGUgPSB7XG4gIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlIChodG1sKSB7XG4gICAgZGVjb2RlciA9IGRlY29kZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGVjb2Rlci5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiBkZWNvZGVyLnRleHRDb250ZW50XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VuYXJ5VGFnID0gbWFrZU1hcChcbiAgJ2FyZWEsYmFzZSxicixjb2wsZW1iZWQsZnJhbWUsaHIsaW1nLGlucHV0LGlzaW5kZXgsa2V5Z2VuLCcgK1xuICAnbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnInXG4pO1xuXG4vLyBFbGVtZW50cyB0aGF0IHlvdSBjYW4sIGludGVudGlvbmFsbHksIGxlYXZlIG9wZW5cbi8vIChhbmQgd2hpY2ggY2xvc2UgdGhlbXNlbHZlcylcbnZhciBjYW5CZUxlZnRPcGVuVGFnID0gbWFrZU1hcChcbiAgJ2NvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UnXG4pO1xuXG4vLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4vLyBQaHJhc2luZyBDb250ZW50IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI3BocmFzaW5nLWNvbnRlbnRcbnZhciBpc05vblBocmFzaW5nVGFnID0gbWFrZU1hcChcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCwnICtcbiAgJ2RldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSwnICtcbiAgJ2gxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLCcgK1xuICAnb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLCcgK1xuICAndGl0bGUsdHIsdHJhY2snXG4pO1xuXG4vKipcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGl0J3MgbW9zdGx5IHZlbmRvciBjb2RlLlxuICovXG5cbi8qIVxuICogSFRNTCBQYXJzZXIgQnkgSm9obiBSZXNpZyAoZWpvaG4ub3JnKVxuICogTW9kaWZpZWQgYnkgSnVyaXkgXCJrYW5nYXhcIiBaYXl0c2V2XG4gKiBPcmlnaW5hbCBjb2RlIGJ5IEVyaWsgQXJ2aWRzc29uLCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlXG4gKiBodHRwOi8vZXJpay5lYWUubmV0L3NpbXBsZWh0bWxwYXJzZXIvc2ltcGxlaHRtbHBhcnNlci5qc1xuICovXG5cbi8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xudmFyIGF0dHJpYnV0ZSA9IC9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xuLy8gY291bGQgdXNlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14bWwtbmFtZXMtMTk5OTAxMTQvI05ULVFOYW1lXG4vLyBidXQgZm9yIFZ1ZSB0ZW1wbGF0ZXMgd2UgY2FuIGVuZm9yY2UgYSBzaW1wbGUgY2hhcnNldFxudmFyIG5jbmFtZSA9ICdbYS16QS1aX11bXFxcXHdcXFxcLVxcXFwuXSonO1xudmFyIHFuYW1lQ2FwdHVyZSA9IFwiKCg/OlwiICsgbmNuYW1lICsgXCJcXFxcOik/XCIgKyBuY25hbWUgKyBcIilcIjtcbnZhciBzdGFydFRhZ09wZW4gPSBuZXcgUmVnRXhwKChcIl48XCIgKyBxbmFtZUNhcHR1cmUpKTtcbnZhciBzdGFydFRhZ0Nsb3NlID0gL15cXHMqKFxcLz8pPi87XG52YXIgZW5kVGFnID0gbmV3IFJlZ0V4cCgoXCJePFxcXFwvXCIgKyBxbmFtZUNhcHR1cmUgKyBcIltePl0qPlwiKSk7XG52YXIgZG9jdHlwZSA9IC9ePCFET0NUWVBFIFtePl0rPi9pO1xuLy8gIzcyOTg6IGVzY2FwZSAtIHRvIGF2b2lkIGJlaW5nIHBhc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxudmFyIGNvbW1lbnQgPSAvXjwhXFwtLS87XG52YXIgY29uZGl0aW9uYWxDb21tZW50ID0gL148IVxcWy87XG5cbnZhciBJU19SRUdFWF9DQVBUVVJJTkdfQlJPS0VOID0gZmFsc2U7XG4neCcucmVwbGFjZSgveCguKT8vZywgZnVuY3Rpb24gKG0sIGcpIHtcbiAgSVNfUkVHRVhfQ0FQVFVSSU5HX0JST0tFTiA9IGcgPT09ICcnO1xufSk7XG5cbi8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxudmFyIGlzUGxhaW5UZXh0RWxlbWVudCA9IG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHJlQ2FjaGUgPSB7fTtcblxudmFyIGRlY29kaW5nTWFwID0ge1xuICAnJmx0Oyc6ICc8JyxcbiAgJyZndDsnOiAnPicsXG4gICcmcXVvdDsnOiAnXCInLFxuICAnJmFtcDsnOiAnJicsXG4gICcmIzEwOyc6ICdcXG4nLFxuICAnJiM5Oyc6ICdcXHQnXG59O1xudmFyIGVuY29kZWRBdHRyID0gLyYoPzpsdHxndHxxdW90fGFtcCk7L2c7XG52YXIgZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMxMHwjOSk7L2c7XG5cbi8vICM1OTkyXG52YXIgaXNJZ25vcmVOZXdsaW5lVGFnID0gbWFrZU1hcCgncHJlLHRleHRhcmVhJywgdHJ1ZSk7XG52YXIgc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lID0gZnVuY3Rpb24gKHRhZywgaHRtbCkgeyByZXR1cm4gdGFnICYmIGlzSWdub3JlTmV3bGluZVRhZyh0YWcpICYmIGh0bWxbMF0gPT09ICdcXG4nOyB9O1xuXG5mdW5jdGlvbiBkZWNvZGVBdHRyICh2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpIHtcbiAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoKSB7IHJldHVybiBkZWNvZGluZ01hcFttYXRjaF07IH0pXG59XG5cbmZ1bmN0aW9uIHBhcnNlSFRNTCAoaHRtbCwgb3B0aW9ucykge1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGV4cGVjdEhUTUwgPSBvcHRpb25zLmV4cGVjdEhUTUw7XG4gIHZhciBpc1VuYXJ5VGFnJCQxID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xuICB2YXIgY2FuQmVMZWZ0T3BlblRhZyQkMSA9IG9wdGlvbnMuY2FuQmVMZWZ0T3BlblRhZyB8fCBubztcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3QsIGxhc3RUYWc7XG4gIHdoaWxlIChodG1sKSB7XG4gICAgbGFzdCA9IGh0bWw7XG4gICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICBpZiAoIWxhc3RUYWcgfHwgIWlzUGxhaW5UZXh0RWxlbWVudChsYXN0VGFnKSkge1xuICAgICAgdmFyIHRleHRFbmQgPSBodG1sLmluZGV4T2YoJzwnKTtcbiAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XG4gICAgICAgIC8vIENvbW1lbnQ6XG4gICAgICAgIGlmIChjb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICB2YXIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG5cbiAgICAgICAgICBpZiAoY29tbWVudEVuZCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaG91bGRLZWVwQ29tbWVudCkge1xuICAgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQoaHRtbC5zdWJzdHJpbmcoNCwgY29tbWVudEVuZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWR2YW5jZShjb21tZW50RW5kICsgMyk7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uZGl0aW9uYWxfY29tbWVudCNEb3dubGV2ZWwtcmV2ZWFsZWRfY29uZGl0aW9uYWxfY29tbWVudFxuICAgICAgICBpZiAoY29uZGl0aW9uYWxDb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICB2YXIgY29uZGl0aW9uYWxFbmQgPSBodG1sLmluZGV4T2YoJ10+Jyk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWxFbmQgPj0gMCkge1xuICAgICAgICAgICAgYWR2YW5jZShjb25kaXRpb25hbEVuZCArIDIpO1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb2N0eXBlOlxuICAgICAgICB2YXIgZG9jdHlwZU1hdGNoID0gaHRtbC5tYXRjaChkb2N0eXBlKTtcbiAgICAgICAgaWYgKGRvY3R5cGVNYXRjaCkge1xuICAgICAgICAgIGFkdmFuY2UoZG9jdHlwZU1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuZCB0YWc6XG4gICAgICAgIHZhciBlbmRUYWdNYXRjaCA9IGh0bWwubWF0Y2goZW5kVGFnKTtcbiAgICAgICAgaWYgKGVuZFRhZ01hdGNoKSB7XG4gICAgICAgICAgdmFyIGN1ckluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgYWR2YW5jZShlbmRUYWdNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgIHBhcnNlRW5kVGFnKGVuZFRhZ01hdGNoWzFdLCBjdXJJbmRleCwgaW5kZXgpO1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB0YWc6XG4gICAgICAgIHZhciBzdGFydFRhZ01hdGNoID0gcGFyc2VTdGFydFRhZygpO1xuICAgICAgICBpZiAoc3RhcnRUYWdNYXRjaCkge1xuICAgICAgICAgIGhhbmRsZVN0YXJ0VGFnKHN0YXJ0VGFnTWF0Y2gpO1xuICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUobGFzdFRhZywgaHRtbCkpIHtcbiAgICAgICAgICAgIGFkdmFuY2UoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHRleHQgPSAodm9pZCAwKSwgcmVzdCA9ICh2b2lkIDApLCBuZXh0ID0gKHZvaWQgMCk7XG4gICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgIHJlc3QgPSBodG1sLnNsaWNlKHRleHRFbmQpO1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgIXN0YXJ0VGFnT3Blbi50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgIWNvbW1lbnQudGVzdChyZXN0KSAmJlxuICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyA8IGluIHBsYWluIHRleHQsIGJlIGZvcmdpdmluZyBhbmQgdHJlYXQgaXQgYXMgdGV4dFxuICAgICAgICAgIG5leHQgPSByZXN0LmluZGV4T2YoJzwnLCAxKTtcbiAgICAgICAgICBpZiAobmV4dCA8IDApIHsgYnJlYWsgfVxuICAgICAgICAgIHRleHRFbmQgKz0gbmV4dDtcbiAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0ID0gaHRtbC5zdWJzdHJpbmcoMCwgdGV4dEVuZCk7XG4gICAgICAgIGFkdmFuY2UodGV4dEVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0RW5kIDwgMCkge1xuICAgICAgICB0ZXh0ID0gaHRtbDtcbiAgICAgICAgaHRtbCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jaGFycyAmJiB0ZXh0KSB7XG4gICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbmRUYWdMZW5ndGggPSAwO1xuICAgICAgdmFyIHN0YWNrZWRUYWcgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgcmVTdGFja2VkVGFnID0gcmVDYWNoZVtzdGFja2VkVGFnXSB8fCAocmVDYWNoZVtzdGFja2VkVGFnXSA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPykoPC8nICsgc3RhY2tlZFRhZyArICdbXj5dKj4pJywgJ2knKSk7XG4gICAgICB2YXIgcmVzdCQxID0gaHRtbC5yZXBsYWNlKHJlU3RhY2tlZFRhZywgZnVuY3Rpb24gKGFsbCwgdGV4dCwgZW5kVGFnKSB7XG4gICAgICAgIGVuZFRhZ0xlbmd0aCA9IGVuZFRhZy5sZW5ndGg7XG4gICAgICAgIGlmICghaXNQbGFpblRleHRFbGVtZW50KHN0YWNrZWRUYWcpICYmIHN0YWNrZWRUYWcgIT09ICdub3NjcmlwdCcpIHtcbiAgICAgICAgICB0ZXh0ID0gdGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLCAnJDEnKSAvLyAjNzI5OFxuICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFxbQ0RBVEFcXFsoW1xcc1xcU10qPyldXT4vZywgJyQxJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnLCB0ZXh0KSkge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzKSB7XG4gICAgICAgICAgb3B0aW9ucy5jaGFycyh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJydcbiAgICAgIH0pO1xuICAgICAgaW5kZXggKz0gaHRtbC5sZW5ndGggLSByZXN0JDEubGVuZ3RoO1xuICAgICAgaHRtbCA9IHJlc3QkMTtcbiAgICAgIHBhcnNlRW5kVGFnKHN0YWNrZWRUYWcsIGluZGV4IC0gZW5kVGFnTGVuZ3RoLCBpbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGh0bWwgPT09IGxhc3QpIHtcbiAgICAgIG9wdGlvbnMuY2hhcnMgJiYgb3B0aW9ucy5jaGFycyhodG1sKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFzdGFjay5sZW5ndGggJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgIG9wdGlvbnMud2FybigoXCJNYWwtZm9ybWF0dGVkIHRhZyBhdCBlbmQgb2YgdGVtcGxhdGU6IFxcXCJcIiArIGh0bWwgKyBcIlxcXCJcIikpO1xuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIHRhZ3NcbiAgcGFyc2VFbmRUYWcoKTtcblxuICBmdW5jdGlvbiBhZHZhbmNlIChuKSB7XG4gICAgaW5kZXggKz0gbjtcbiAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcobik7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVN0YXJ0VGFnICgpIHtcbiAgICB2YXIgc3RhcnQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnT3Blbik7XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICB2YXIgbWF0Y2ggPSB7XG4gICAgICAgIHRhZ05hbWU6IHN0YXJ0WzFdLFxuICAgICAgICBhdHRyczogW10sXG4gICAgICAgIHN0YXJ0OiBpbmRleFxuICAgICAgfTtcbiAgICAgIGFkdmFuY2Uoc3RhcnRbMF0ubGVuZ3RoKTtcbiAgICAgIHZhciBlbmQsIGF0dHI7XG4gICAgICB3aGlsZSAoIShlbmQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnQ2xvc2UpKSAmJiAoYXR0ciA9IGh0bWwubWF0Y2goYXR0cmlidXRlKSkpIHtcbiAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgIGFkdmFuY2UoZW5kWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFRhZyAobWF0Y2gpIHtcbiAgICB2YXIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XG4gICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuXG4gICAgaWYgKGV4cGVjdEhUTUwpIHtcbiAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkge1xuICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5CZUxlZnRPcGVuVGFnJCQxKHRhZ05hbWUpICYmIGxhc3RUYWcgPT09IHRhZ05hbWUpIHtcbiAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyQkMSh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG5cbiAgICB2YXIgbCA9IG1hdGNoLmF0dHJzLmxlbmd0aDtcbiAgICB2YXIgYXR0cnMgPSBuZXcgQXJyYXkobCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XG4gICAgICAvLyBoYWNraXNoIHdvcmsgYXJvdW5kIEZGIGJ1ZyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjk3NzhcbiAgICAgIGlmIChJU19SRUdFWF9DQVBUVVJJTkdfQlJPS0VOICYmIGFyZ3NbMF0uaW5kZXhPZignXCJcIicpID09PSAtMSkge1xuICAgICAgICBpZiAoYXJnc1szXSA9PT0gJycpIHsgZGVsZXRlIGFyZ3NbM107IH1cbiAgICAgICAgaWYgKGFyZ3NbNF0gPT09ICcnKSB7IGRlbGV0ZSBhcmdzWzRdOyB9XG4gICAgICAgIGlmIChhcmdzWzVdID09PSAnJykgeyBkZWxldGUgYXJnc1s1XTsgfVxuICAgICAgfVxuICAgICAgdmFyIHZhbHVlID0gYXJnc1szXSB8fCBhcmdzWzRdIHx8IGFyZ3NbNV0gfHwgJyc7XG4gICAgICB2YXIgc2hvdWxkRGVjb2RlTmV3bGluZXMgPSB0YWdOYW1lID09PSAnYScgJiYgYXJnc1sxXSA9PT0gJ2hyZWYnXG4gICAgICAgID8gb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWZcbiAgICAgICAgOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzO1xuICAgICAgYXR0cnNbaV0gPSB7XG4gICAgICAgIG5hbWU6IGFyZ3NbMV0sXG4gICAgICAgIHZhbHVlOiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF1bmFyeSkge1xuICAgICAgc3RhY2sucHVzaCh7IHRhZzogdGFnTmFtZSwgbG93ZXJDYXNlZFRhZzogdGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBhdHRyczogYXR0cnMgfSk7XG4gICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kVGFnICh0YWdOYW1lLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHBvcywgbG93ZXJDYXNlZFRhZ05hbWU7XG4gICAgaWYgKHN0YXJ0ID09IG51bGwpIHsgc3RhcnQgPSBpbmRleDsgfVxuICAgIGlmIChlbmQgPT0gbnVsbCkgeyBlbmQgPSBpbmRleDsgfVxuXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGxvd2VyQ2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKSB7XG4gICAgICAgIGlmIChzdGFja1twb3NdLmxvd2VyQ2FzZWRUYWcgPT09IGxvd2VyQ2FzZWRUYWdOYW1lKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyB0YWcgbmFtZSBpcyBwcm92aWRlZCwgY2xlYW4gc2hvcFxuICAgICAgcG9zID0gMDtcbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIENsb3NlIGFsbCB0aGUgb3BlbiBlbGVtZW50cywgdXAgdGhlIHN0YWNrXG4gICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgIChpID4gcG9zIHx8ICF0YWdOYW1lKSAmJlxuICAgICAgICAgIG9wdGlvbnMud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb25zLndhcm4oXG4gICAgICAgICAgICAoXCJ0YWcgPFwiICsgKHN0YWNrW2ldLnRhZykgKyBcIj4gaGFzIG5vIG1hdGNoaW5nIGVuZCB0YWcuXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICBvcHRpb25zLmVuZChzdGFja1tpXS50YWcsIHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgb3BlbiBlbGVtZW50cyBmcm9tIHRoZSBzdGFja1xuICAgICAgc3RhY2subGVuZ3RoID0gcG9zO1xuICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAgfSBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ2JyJykge1xuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ3AnKSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCBmYWxzZSwgc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgb3B0aW9ucy5lbmQodGFnTmFtZSwgc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgb25SRSA9IC9eQHxedi1vbjovO1xudmFyIGRpclJFID0gL152LXxeQHxeOi87XG52YXIgZm9yQWxpYXNSRSA9IC8oW15dKj8pXFxzKyg/OmlufG9mKVxccysoW15dKikvO1xudmFyIGZvckl0ZXJhdG9yUkUgPSAvLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC87XG52YXIgc3RyaXBQYXJlbnNSRSA9IC9eXFwofFxcKSQvZztcblxudmFyIGFyZ1JFID0gLzooLiopJC87XG52YXIgYmluZFJFID0gL146fF52LWJpbmQ6LztcbnZhciBtb2RpZmllclJFID0gL1xcLlteLl0rL2c7XG5cbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbi8vIGNvbmZpZ3VyYWJsZSBzdGF0ZVxudmFyIHdhcm4kMjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG5cblxuXG5mdW5jdGlvbiBjcmVhdGVBU1RFbGVtZW50IChcbiAgdGFnLFxuICBhdHRycyxcbiAgcGFyZW50XG4pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAxLFxuICAgIHRhZzogdGFnLFxuICAgIGF0dHJzTGlzdDogYXR0cnMsXG4gICAgYXR0cnNNYXA6IG1ha2VBdHRyc01hcChhdHRycyksXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgY2hpbGRyZW46IFtdXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHdhcm4kMiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcblxuICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XG5cbiAgdHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtTm9kZScpO1xuICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gIHBvc3RUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwb3N0VHJhbnNmb3JtTm9kZScpO1xuXG4gIGRlbGltaXRlcnMgPSBvcHRpb25zLmRlbGltaXRlcnM7XG5cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBwcmVzZXJ2ZVdoaXRlc3BhY2UgPSBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZSAhPT0gZmFsc2U7XG4gIHZhciByb290O1xuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGluVlByZSA9IGZhbHNlO1xuICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdhcm5PbmNlIChtc2cpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgIHdhcm4kMihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlRWxlbWVudCAoZWxlbWVudCkge1xuICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgaW5WUHJlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgaW5QcmUgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zvcm1zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3N0VHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcG9zdFRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAgd2Fybjogd2FybiQyLFxuICAgIGV4cGVjdEhUTUw6IG9wdGlvbnMuZXhwZWN0SFRNTCxcbiAgICBpc1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXG4gICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0ICh0YWcsIGF0dHJzLCB1bmFyeSkge1xuICAgICAgLy8gY2hlY2sgbmFtZXNwYWNlLlxuICAgICAgLy8gaW5oZXJpdCBwYXJlbnQgbnMgaWYgdGhlcmUgaXMgb25lXG4gICAgICB2YXIgbnMgPSAoY3VycmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50Lm5zKSB8fCBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSh0YWcpO1xuXG4gICAgICAvLyBoYW5kbGUgSUUgc3ZnIGJ1Z1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXNJRSAmJiBucyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgYXR0cnMgPSBndWFyZElFU1ZHQnVnKGF0dHJzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnQgPSBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgaWYgKG5zKSB7XG4gICAgICAgIGVsZW1lbnQubnMgPSBucztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9yYmlkZGVuVGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXG4gICAgICAgICAgJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICdVSS4gQXZvaWQgcGxhY2luZyB0YWdzIHdpdGggc2lkZS1lZmZlY3RzIGluIHlvdXIgdGVtcGxhdGVzLCBzdWNoIGFzICcgK1xuICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyAnLCBhcyB0aGV5IHdpbGwgbm90IGJlIHBhcnNlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFwcGx5IHByZS10cmFuc2Zvcm1zXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxlbWVudCA9IHByZVRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucykgfHwgZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpblZQcmUpIHtcbiAgICAgICAgcHJvY2Vzc1ByZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgaW5WUHJlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBsYXRmb3JtSXNQcmVUYWcoZWxlbWVudC50YWcpKSB7XG4gICAgICAgIGluUHJlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpblZQcmUpIHtcbiAgICAgICAgcHJvY2Vzc1Jhd0F0dHJzKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgLy8gc3RydWN0dXJhbCBkaXJlY3RpdmVzXG4gICAgICAgIHByb2Nlc3NGb3IoZWxlbWVudCk7XG4gICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcbiAgICAgICAgcHJvY2Vzc09uY2UoZWxlbWVudCk7XG4gICAgICAgIC8vIGVsZW1lbnQtc2NvcGUgc3R1ZmZcbiAgICAgICAgcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrUm9vdENvbnN0cmFpbnRzIChlbCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGlmIChlbC50YWcgPT09ICdzbG90JyB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICBcIkNhbm5vdCB1c2UgPFwiICsgKGVsLnRhZykgKyBcIj4gYXMgY29tcG9uZW50IHJvb3QgZWxlbWVudCBiZWNhdXNlIGl0IG1heSBcIiArXG4gICAgICAgICAgICAgICdjb250YWluIG11bHRpcGxlIG5vZGVzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5hdHRyc01hcC5oYXNPd25Qcm9wZXJ0eSgndi1mb3InKSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcbiAgICAgICAgICAgICAgJ2l0IHJlbmRlcnMgbXVsdGlwbGUgZWxlbWVudHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdHJlZSBtYW5hZ2VtZW50XG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgcm9vdCA9IGVsZW1lbnQ7XG4gICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKHJvb3QpO1xuICAgICAgfSBlbHNlIGlmICghc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxuICAgICAgICBpZiAocm9vdC5pZiAmJiAoZWxlbWVudC5lbHNlaWYgfHwgZWxlbWVudC5lbHNlKSkge1xuICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKGVsZW1lbnQpO1xuICAgICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcbiAgICAgICAgICAgIGV4cDogZWxlbWVudC5lbHNlaWYsXG4gICAgICAgICAgICBibG9jazogZWxlbWVudFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiQ29tcG9uZW50IHRlbXBsYXRlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIHJvb3QgZWxlbWVudC4gXCIgK1xuICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHYtaWYgb24gbXVsdGlwbGUgZWxlbWVudHMsIFwiICtcbiAgICAgICAgICAgIFwidXNlIHYtZWxzZS1pZiB0byBjaGFpbiB0aGVtIGluc3RlYWQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFBhcmVudCAmJiAhZWxlbWVudC5mb3JiaWRkZW4pIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkge1xuICAgICAgICAgIHByb2Nlc3NJZkNvbmRpdGlvbnMoZWxlbWVudCwgY3VycmVudFBhcmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zbG90U2NvcGUpIHsgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgICBjdXJyZW50UGFyZW50LnBsYWluID0gZmFsc2U7XG4gICAgICAgICAgdmFyIG5hbWUgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJzsoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyB8fCAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyA9IHt9KSlbbmFtZV0gPSBlbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50LnBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgY3VycmVudFBhcmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGVuZDogZnVuY3Rpb24gZW5kICgpIHtcbiAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlXG4gICAgICB2YXIgZWxlbWVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIGxhc3ROb2RlID0gZWxlbWVudC5jaGlsZHJlbltlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGxhc3ROb2RlICYmIGxhc3ROb2RlLnR5cGUgPT09IDMgJiYgbGFzdE5vZGUudGV4dCA9PT0gJyAnICYmICFpblByZSkge1xuICAgICAgICBlbGVtZW50LmNoaWxkcmVuLnBvcCgpO1xuICAgICAgfVxuICAgICAgLy8gcG9wIHN0YWNrXG4gICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgIGN1cnJlbnRQYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuXG4gICAgY2hhcnM6IGZ1bmN0aW9uIGNoYXJzICh0ZXh0KSB7XG4gICAgICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAodGV4dCA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgKFwidGV4dCBcXFwiXCIgKyB0ZXh0ICsgXCJcXFwiIG91dHNpZGUgcm9vdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnRQYXJlbnQuY2hpbGRyZW47XG4gICAgICB0ZXh0ID0gaW5QcmUgfHwgdGV4dC50cmltKClcbiAgICAgICAgPyBpc1RleHRUYWcoY3VycmVudFBhcmVudCkgPyB0ZXh0IDogZGVjb2RlSFRNTENhY2hlZCh0ZXh0KVxuICAgICAgICAvLyBvbmx5IHByZXNlcnZlIHdoaXRlc3BhY2UgaWYgaXRzIG5vdCByaWdodCBhZnRlciBhIHN0YXJ0aW5nIHRhZ1xuICAgICAgICA6IHByZXNlcnZlV2hpdGVzcGFjZSAmJiBjaGlsZHJlbi5sZW5ndGggPyAnICcgOiAnJztcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghaW5WUHJlICYmIHRleHQgIT09ICcgJyAmJiAocmVzID0gcGFyc2VUZXh0KHRleHQsIGRlbGltaXRlcnMpKSkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRleHQgIT09ICcgJyB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnRleHQgIT09ICcgJykge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogMyxcbiAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tbWVudDogZnVuY3Rpb24gY29tbWVudCAodGV4dCkge1xuICAgICAgY3VycmVudFBhcmVudC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdHlwZTogMyxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgaXNDb21tZW50OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcm9vdFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUHJlIChlbCkge1xuICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtcHJlJykgIT0gbnVsbCkge1xuICAgIGVsLnByZSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Jhd0F0dHJzIChlbCkge1xuICB2YXIgbCA9IGVsLmF0dHJzTGlzdC5sZW5ndGg7XG4gIGlmIChsKSB7XG4gICAgdmFyIGF0dHJzID0gZWwuYXR0cnMgPSBuZXcgQXJyYXkobCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICBuYW1lOiBlbC5hdHRyc0xpc3RbaV0ubmFtZSxcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGVsLmF0dHJzTGlzdFtpXS52YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFlbC5wcmUpIHtcbiAgICAvLyBub24gcm9vdCBub2RlIGluIHByZSBibG9ja3Mgd2l0aCBubyBhdHRyaWJ1dGVzXG4gICAgZWwucGxhaW4gPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50IChlbGVtZW50LCBvcHRpb25zKSB7XG4gIHByb2Nlc3NLZXkoZWxlbWVudCk7XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWluIGVsZW1lbnQgYWZ0ZXJcbiAgLy8gcmVtb3Zpbmcgc3RydWN0dXJhbCBhdHRyaWJ1dGVzXG4gIGVsZW1lbnQucGxhaW4gPSAhZWxlbWVudC5rZXkgJiYgIWVsZW1lbnQuYXR0cnNMaXN0Lmxlbmd0aDtcblxuICBwcm9jZXNzUmVmKGVsZW1lbnQpO1xuICBwcm9jZXNzU2xvdChlbGVtZW50KTtcbiAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgZWxlbWVudCA9IHRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucykgfHwgZWxlbWVudDtcbiAgfVxuICBwcm9jZXNzQXR0cnMoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NLZXkgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2tleScpO1xuICBpZiAoZXhwKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICB3YXJuJDIoXCI8dGVtcGxhdGU+IGNhbm5vdCBiZSBrZXllZC4gUGxhY2UgdGhlIGtleSBvbiByZWFsIGVsZW1lbnRzIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBlbC5rZXkgPSBleHA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JlZiAoZWwpIHtcbiAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4gIGlmIChyZWYpIHtcbiAgICBlbC5yZWYgPSByZWY7XG4gICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICB2YXIgZXhwO1xuICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIGV4dGVuZChlbCwgcmVzKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgKFwiSW52YWxpZCB2LWZvciBleHByZXNzaW9uOiBcIiArIGV4cClcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblxuXG5mdW5jdGlvbiBwYXJzZUZvciAoZXhwKSB7XG4gIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICBpZiAoIWluTWF0Y2gpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9IHt9O1xuICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gIHZhciBhbGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpO1xuICB2YXIgaXRlcmF0b3JNYXRjaCA9IGFsaWFzLm1hdGNoKGZvckl0ZXJhdG9yUkUpO1xuICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgIHJlcy5hbGlhcyA9IGFsaWFzLnJlcGxhY2UoZm9ySXRlcmF0b3JSRSwgJycpO1xuICAgIHJlcy5pdGVyYXRvcjEgPSBpdGVyYXRvck1hdGNoWzFdLnRyaW0oKTtcbiAgICBpZiAoaXRlcmF0b3JNYXRjaFsyXSkge1xuICAgICAgcmVzLml0ZXJhdG9yMiA9IGl0ZXJhdG9yTWF0Y2hbMl0udHJpbSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXMuYWxpYXMgPSBhbGlhcztcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NJZiAoZWwpIHtcbiAgdmFyIGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWlmJyk7XG4gIGlmIChleHApIHtcbiAgICBlbC5pZiA9IGV4cDtcbiAgICBhZGRJZkNvbmRpdGlvbihlbCwge1xuICAgICAgZXhwOiBleHAsXG4gICAgICBibG9jazogZWxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScpICE9IG51bGwpIHtcbiAgICAgIGVsLmVsc2UgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgZWxzZWlmID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZS1pZicpO1xuICAgIGlmIChlbHNlaWYpIHtcbiAgICAgIGVsLmVsc2VpZiA9IGVsc2VpZjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0lmQ29uZGl0aW9ucyAoZWwsIHBhcmVudCkge1xuICB2YXIgcHJldiA9IGZpbmRQcmV2RWxlbWVudChwYXJlbnQuY2hpbGRyZW4pO1xuICBpZiAocHJldiAmJiBwcmV2LmlmKSB7XG4gICAgYWRkSWZDb25kaXRpb24ocHJldiwge1xuICAgICAgZXhwOiBlbC5lbHNlaWYsXG4gICAgICBibG9jazogZWxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybiQyKFxuICAgICAgXCJ2LVwiICsgKGVsLmVsc2VpZiA/ICgnZWxzZS1pZj1cIicgKyBlbC5lbHNlaWYgKyAnXCInKSA6ICdlbHNlJykgKyBcIiBcIiArXG4gICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIgKyAoZWwudGFnKSArIFwiPiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdi1pZi5cIlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZFByZXZFbGVtZW50IChjaGlsZHJlbikge1xuICB2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChjaGlsZHJlbltpXS50eXBlID09PSAxKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5baV1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW5baV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcInRleHQgXFxcIlwiICsgKGNoaWxkcmVuW2ldLnRleHQudHJpbSgpKSArIFwiXFxcIiBiZXR3ZWVuIHYtaWYgYW5kIHYtZWxzZSgtaWYpIFwiICtcbiAgICAgICAgICBcIndpbGwgYmUgaWdub3JlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uIChlbCwgY29uZGl0aW9uKSB7XG4gIGlmICghZWwuaWZDb25kaXRpb25zKSB7XG4gICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gIH1cbiAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc09uY2UgKGVsKSB7XG4gIHZhciBvbmNlJCQxID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Ytb25jZScpO1xuICBpZiAob25jZSQkMSAhPSBudWxsKSB7XG4gICAgZWwub25jZSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Nsb3QgKGVsKSB7XG4gIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgIGVsLnNsb3ROYW1lID0gZ2V0QmluZGluZ0F0dHIoZWwsICduYW1lJyk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwua2V5KSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgIFwiYW5kIGNhbiBwb3NzaWJseSBleHBhbmQgaW50byBtdWx0aXBsZSBlbGVtZW50cy4gXCIgK1xuICAgICAgICBcIlVzZSB0aGUga2V5IG9uIGEgd3JhcHBpbmcgZWxlbWVudCBpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xvdFNjb3BlO1xuICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzbG90U2NvcGUpIHtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgIFwidGhlIFxcXCJzY29wZVxcXCIgYXR0cmlidXRlIGZvciBzY29wZWQgc2xvdHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIFwiICtcbiAgICAgICAgICBcInJlcGxhY2VkIGJ5IFxcXCJzbG90LXNjb3BlXFxcIiBzaW5jZSAyLjUuIFRoZSBuZXcgXFxcInNsb3Qtc2NvcGVcXFwiIGF0dHJpYnV0ZSBcIiArXG4gICAgICAgICAgXCJjYW4gYWxzbyBiZSB1c2VkIG9uIHBsYWluIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIDx0ZW1wbGF0ZT4gdG8gXCIgK1xuICAgICAgICAgIFwiZGVub3RlIHNjb3BlZCBzbG90cy5cIixcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBlbC5zbG90U2NvcGUgPSBzbG90U2NvcGUgfHwgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKTtcbiAgICB9IGVsc2UgaWYgKChzbG90U2NvcGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2xvdC1zY29wZScpKSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbC5hdHRyc01hcFsndi1mb3InXSkge1xuICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgXCJBbWJpZ3VvdXMgY29tYmluZWQgdXNhZ2Ugb2Ygc2xvdC1zY29wZSBhbmQgdi1mb3Igb24gPFwiICsgKGVsLnRhZykgKyBcIj4gXCIgK1xuICAgICAgICAgIFwiKHYtZm9yIHRha2VzIGhpZ2hlciBwcmlvcml0eSkuIFVzZSBhIHdyYXBwZXIgPHRlbXBsYXRlPiBmb3IgdGhlIFwiICtcbiAgICAgICAgICBcInNjb3BlZCBzbG90IHRvIG1ha2UgaXQgY2xlYXJlci5cIixcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBlbC5zbG90U2NvcGUgPSBzbG90U2NvcGU7XG4gICAgfVxuICAgIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gICAgaWYgKHNsb3RUYXJnZXQpIHtcbiAgICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICAgIC8vIHByZXNlcnZlIHNsb3QgYXMgYW4gYXR0cmlidXRlIGZvciBuYXRpdmUgc2hhZG93IERPTSBjb21wYXRcbiAgICAgIC8vIG9ubHkgZm9yIG5vbi1zY29wZWQgc2xvdHMuXG4gICAgICBpZiAoZWwudGFnICE9PSAndGVtcGxhdGUnICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgICAgYWRkQXR0cihlbCwgJ3Nsb3QnLCBzbG90VGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudCAoZWwpIHtcbiAgdmFyIGJpbmRpbmc7XG4gIGlmICgoYmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnaXMnKSkpIHtcbiAgICBlbC5jb21wb25lbnQgPSBiaW5kaW5nO1xuICB9XG4gIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAnaW5saW5lLXRlbXBsYXRlJykgIT0gbnVsbCkge1xuICAgIGVsLmlubGluZVRlbXBsYXRlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQXR0cnMgKGVsKSB7XG4gIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICB2YXIgaSwgbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIG1vZGlmaWVycywgaXNQcm9wO1xuICBmb3IgKGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBuYW1lID0gcmF3TmFtZSA9IGxpc3RbaV0ubmFtZTtcbiAgICB2YWx1ZSA9IGxpc3RbaV0udmFsdWU7XG4gICAgaWYgKGRpclJFLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIG1hcmsgZWxlbWVudCBhcyBkeW5hbWljXG4gICAgICBlbC5oYXNCaW5kaW5ncyA9IHRydWU7XG4gICAgICAvLyBtb2RpZmllcnNcbiAgICAgIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJzKG5hbWUpO1xuICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kUkUudGVzdChuYW1lKSkgeyAvLyB2LWJpbmRcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZpbHRlcnModmFsdWUpO1xuICAgICAgICBpc1Byb3AgPSBmYWxzZTtcbiAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgIGlmIChtb2RpZmllcnMucHJvcCkge1xuICAgICAgICAgICAgaXNQcm9wID0gdHJ1ZTtcbiAgICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZShuYW1lKTtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnaW5uZXJIdG1sJykgeyBuYW1lID0gJ2lubmVySFRNTCc7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1vZGlmaWVycy5jYW1lbCkge1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgIGFkZEhhbmRsZXIoXG4gICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAoXCJ1cGRhdGU6XCIgKyAoY2FtZWxpemUobmFtZSkpKSxcbiAgICAgICAgICAgICAgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIFwiJGV2ZW50XCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9wIHx8IChcbiAgICAgICAgICAhZWwuY29tcG9uZW50ICYmIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKVxuICAgICAgICApKSB7XG4gICAgICAgICAgYWRkUHJvcChlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHsgLy8gdi1vblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG9uUkUsICcnKTtcbiAgICAgICAgYWRkSGFuZGxlcihlbCwgbmFtZSwgdmFsdWUsIG1vZGlmaWVycywgZmFsc2UsIHdhcm4kMik7XG4gICAgICB9IGVsc2UgeyAvLyBub3JtYWwgZGlyZWN0aXZlc1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKGRpclJFLCAnJyk7XG4gICAgICAgIC8vIHBhcnNlIGFyZ1xuICAgICAgICB2YXIgYXJnTWF0Y2ggPSBuYW1lLm1hdGNoKGFyZ1JFKTtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ01hdGNoICYmIGFyZ01hdGNoWzFdO1xuICAgICAgICBpZiAoYXJnKSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLShhcmcubGVuZ3RoICsgMSkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZERpcmVjdGl2ZShlbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIGFyZywgbW9kaWZpZXJzKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSA9PT0gJ21vZGVsJykge1xuICAgICAgICAgIGNoZWNrRm9yQWxpYXNNb2RlbChlbCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxpdGVyYWwgYXR0cmlidXRlXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHZhbHVlLCBkZWxpbWl0ZXJzKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgaWQ9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDppZD1cInZhbFwiPi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWRkQXR0cihlbCwgbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgIC8vICM2ODg3IGZpcmVmb3ggZG9lc24ndCB1cGRhdGUgbXV0ZWQgc3RhdGUgaWYgc2V0IHZpYSBhdHRyaWJ1dGVcbiAgICAgIC8vIGV2ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgZWxlbWVudCBjcmVhdGlvblxuICAgICAgaWYgKCFlbC5jb21wb25lbnQgJiZcbiAgICAgICAgICBuYW1lID09PSAnbXV0ZWQnICYmXG4gICAgICAgICAgcGxhdGZvcm1NdXN0VXNlUHJvcChlbC50YWcsIGVsLmF0dHJzTWFwLnR5cGUsIG5hbWUpKSB7XG4gICAgICAgIGFkZFByb3AoZWwsIG5hbWUsICd0cnVlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW5Gb3IgKGVsKSB7XG4gIHZhciBwYXJlbnQgPSBlbDtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQuZm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9kaWZpZXJzIChuYW1lKSB7XG4gIHZhciBtYXRjaCA9IG5hbWUubWF0Y2gobW9kaWZpZXJSRSk7XG4gIGlmIChtYXRjaCkge1xuICAgIHZhciByZXQgPSB7fTtcbiAgICBtYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7IHJldFttLnNsaWNlKDEpXSA9IHRydWU7IH0pO1xuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlQXR0cnNNYXAgKGF0dHJzKSB7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBtYXBbYXR0cnNbaV0ubmFtZV0gJiYgIWlzSUUgJiYgIWlzRWRnZVxuICAgICkge1xuICAgICAgd2FybiQyKCdkdXBsaWNhdGUgYXR0cmlidXRlOiAnICsgYXR0cnNbaV0ubmFtZSk7XG4gICAgfVxuICAgIG1hcFthdHRyc1tpXS5uYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICB9XG4gIHJldHVybiBtYXBcbn1cblxuLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XG5mdW5jdGlvbiBpc1RleHRUYWcgKGVsKSB7XG4gIHJldHVybiBlbC50YWcgPT09ICdzY3JpcHQnIHx8IGVsLnRhZyA9PT0gJ3N0eWxlJ1xufVxuXG5mdW5jdGlvbiBpc0ZvcmJpZGRlblRhZyAoZWwpIHtcbiAgcmV0dXJuIChcbiAgICBlbC50YWcgPT09ICdzdHlsZScgfHxcbiAgICAoZWwudGFnID09PSAnc2NyaXB0JyAmJiAoXG4gICAgICAhZWwuYXR0cnNNYXAudHlwZSB8fFxuICAgICAgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICApKVxuICApXG59XG5cbnZhciBpZU5TQnVnID0gL154bWxuczpOU1xcZCsvO1xudmFyIGllTlNQcmVmaXggPSAvXk5TXFxkKzovO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gZ3VhcmRJRVNWR0J1ZyAoYXR0cnMpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcbiAgICBpZiAoIWllTlNCdWcudGVzdChhdHRyLm5hbWUpKSB7XG4gICAgICBhdHRyLm5hbWUgPSBhdHRyLm5hbWUucmVwbGFjZShpZU5TUHJlZml4LCAnJyk7XG4gICAgICByZXMucHVzaChhdHRyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBjaGVja0ZvckFsaWFzTW9kZWwgKGVsLCB2YWx1ZSkge1xuICB2YXIgX2VsID0gZWw7XG4gIHdoaWxlIChfZWwpIHtcbiAgICBpZiAoX2VsLmZvciAmJiBfZWwuYWxpYXMgPT09IHZhbHVlKSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgICBcIllvdSBhcmUgYmluZGluZyB2LW1vZGVsIGRpcmVjdGx5IHRvIGEgdi1mb3IgaXRlcmF0aW9uIGFsaWFzLiBcIiArXG4gICAgICAgIFwiVGhpcyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgdi1mb3Igc291cmNlIGFycmF5IGJlY2F1c2UgXCIgK1xuICAgICAgICBcIndyaXRpbmcgdG8gdGhlIGFsaWFzIGlzIGxpa2UgbW9kaWZ5aW5nIGEgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGUuIFwiICtcbiAgICAgICAgXCJDb25zaWRlciB1c2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCB1c2Ugdi1tb2RlbCBvbiBhbiBvYmplY3QgcHJvcGVydHkgaW5zdGVhZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgX2VsID0gX2VsLnBhcmVudDtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBFeHBhbmQgaW5wdXRbdi1tb2RlbF0gd2l0aCBkeWFubWljIHR5cGUgYmluZGluZ3MgaW50byB2LWlmLWVsc2UgY2hhaW5zXG4gKiBUdXJuIHRoaXM6XG4gKiAgIDxpbnB1dCB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiIDp0eXBlPVwidHlwZVwiPlxuICogaW50byB0aGlzOlxuICogICA8aW5wdXQgdi1pZj1cInR5cGUgPT09ICdjaGVja2JveCdcIiB0eXBlPVwiY2hlY2tib3hcIiB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiPlxuICogICA8aW5wdXQgdi1lbHNlLWlmPVwidHlwZSA9PT0gJ3JhZGlvJ1wiIHR5cGU9XCJyYWRpb1wiIHYtbW9kZWw9XCJkYXRhW3R5cGVdXCI+XG4gKiAgIDxpbnB1dCB2LWVsc2UgOnR5cGU9XCJ0eXBlXCIgdi1tb2RlbD1cImRhdGFbdHlwZV1cIj5cbiAqL1xuXG5mdW5jdGlvbiBwcmVUcmFuc2Zvcm1Ob2RlIChlbCwgb3B0aW9ucykge1xuICBpZiAoZWwudGFnID09PSAnaW5wdXQnKSB7XG4gICAgdmFyIG1hcCA9IGVsLmF0dHJzTWFwO1xuICAgIGlmICghbWFwWyd2LW1vZGVsJ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciB0eXBlQmluZGluZztcbiAgICBpZiAobWFwWyc6dHlwZSddIHx8IG1hcFsndi1iaW5kOnR5cGUnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3R5cGUnKTtcbiAgICB9XG4gICAgaWYgKCFtYXAudHlwZSAmJiAhdHlwZUJpbmRpbmcgJiYgbWFwWyd2LWJpbmQnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIiArIChtYXBbJ3YtYmluZCddKSArIFwiKS50eXBlXCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVCaW5kaW5nKSB7XG4gICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgdmFyIGlmQ29uZGl0aW9uRXh0cmEgPSBpZkNvbmRpdGlvbiA/IChcIiYmKFwiICsgaWZDb25kaXRpb24gKyBcIilcIikgOiBcIlwiO1xuICAgICAgdmFyIGhhc0Vsc2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJywgdHJ1ZSkgIT0gbnVsbDtcbiAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAvLyAxLiBjaGVja2JveFxuICAgICAgdmFyIGJyYW5jaDAgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgcHJvY2Vzc0ZvcihicmFuY2gwKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMCwgJ3R5cGUnLCAnY2hlY2tib3gnKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgYnJhbmNoMC5wcm9jZXNzZWQgPSB0cnVlOyAvLyBwcmV2ZW50IGl0IGZyb20gZG91YmxlLXByb2Nlc3NlZFxuICAgICAgYnJhbmNoMC5pZiA9IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0nY2hlY2tib3gnXCIgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IGJyYW5jaDAuaWYsXG4gICAgICAgIGJsb2NrOiBicmFuY2gwXG4gICAgICB9KTtcbiAgICAgIC8vIDIuIGFkZCByYWRpbyBlbHNlLWlmIGNvbmRpdGlvblxuICAgICAgdmFyIGJyYW5jaDEgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMSwgJ3R5cGUnLCAncmFkaW8nKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDEsIG9wdGlvbnMpO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0ncmFkaW8nXCIgKyBpZkNvbmRpdGlvbkV4dHJhLFxuICAgICAgICBibG9jazogYnJhbmNoMVxuICAgICAgfSk7XG4gICAgICAvLyAzLiBvdGhlclxuICAgICAgdmFyIGJyYW5jaDIgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMiwgJzp0eXBlJywgdHlwZUJpbmRpbmcpO1xuICAgICAgcHJvY2Vzc0VsZW1lbnQoYnJhbmNoMiwgb3B0aW9ucyk7XG4gICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgIGV4cDogaWZDb25kaXRpb24sXG4gICAgICAgIGJsb2NrOiBicmFuY2gyXG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc0Vsc2UpIHtcbiAgICAgICAgYnJhbmNoMC5lbHNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgIGJyYW5jaDAuZWxzZWlmID0gZWxzZUlmQ29uZGl0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnJhbmNoMFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUFTVEVsZW1lbnQgKGVsKSB7XG4gIHJldHVybiBjcmVhdGVBU1RFbGVtZW50KGVsLnRhZywgZWwuYXR0cnNMaXN0LnNsaWNlKCksIGVsLnBhcmVudClcbn1cblxudmFyIG1vZGVsJDIgPSB7XG4gIHByZVRyYW5zZm9ybU5vZGU6IHByZVRyYW5zZm9ybU5vZGVcbn1cblxudmFyIG1vZHVsZXMkMSA9IFtcbiAga2xhc3MkMSxcbiAgc3R5bGUkMSxcbiAgbW9kZWwkMlxuXVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gdGV4dCAoZWwsIGRpcikge1xuICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgYWRkUHJvcChlbCwgJ3RleHRDb250ZW50JywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGh0bWwgKGVsLCBkaXIpIHtcbiAgaWYgKGRpci52YWx1ZSkge1xuICAgIGFkZFByb3AoZWwsICdpbm5lckhUTUwnLCAoXCJfcyhcIiArIChkaXIudmFsdWUpICsgXCIpXCIpKTtcbiAgfVxufVxuXG52YXIgZGlyZWN0aXZlcyQxID0ge1xuICBtb2RlbDogbW9kZWwsXG4gIHRleHQ6IHRleHQsXG4gIGh0bWw6IGh0bWxcbn1cblxuLyogICovXG5cbnZhciBiYXNlT3B0aW9ucyA9IHtcbiAgZXhwZWN0SFRNTDogdHJ1ZSxcbiAgbW9kdWxlczogbW9kdWxlcyQxLFxuICBkaXJlY3RpdmVzOiBkaXJlY3RpdmVzJDEsXG4gIGlzUHJlVGFnOiBpc1ByZVRhZyxcbiAgaXNVbmFyeVRhZzogaXNVbmFyeVRhZyxcbiAgbXVzdFVzZVByb3A6IG11c3RVc2VQcm9wLFxuICBjYW5CZUxlZnRPcGVuVGFnOiBjYW5CZUxlZnRPcGVuVGFnLFxuICBpc1Jlc2VydmVkVGFnOiBpc1Jlc2VydmVkVGFnLFxuICBnZXRUYWdOYW1lc3BhY2U6IGdldFRhZ05hbWVzcGFjZSxcbiAgc3RhdGljS2V5czogZ2VuU3RhdGljS2V5cyhtb2R1bGVzJDEpXG59O1xuXG4vKiAgKi9cblxudmFyIGlzU3RhdGljS2V5O1xudmFyIGlzUGxhdGZvcm1SZXNlcnZlZFRhZztcblxudmFyIGdlblN0YXRpY0tleXNDYWNoZWQgPSBjYWNoZWQoZ2VuU3RhdGljS2V5cyQxKTtcblxuLyoqXG4gKiBHb2FsIG9mIHRoZSBvcHRpbWl6ZXI6IHdhbGsgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBBU1QgdHJlZVxuICogYW5kIGRldGVjdCBzdWItdHJlZXMgdGhhdCBhcmUgcHVyZWx5IHN0YXRpYywgaS5lLiBwYXJ0cyBvZlxuICogdGhlIERPTSB0aGF0IG5ldmVyIG5lZWRzIHRvIGNoYW5nZS5cbiAqXG4gKiBPbmNlIHdlIGRldGVjdCB0aGVzZSBzdWItdHJlZXMsIHdlIGNhbjpcbiAqXG4gKiAxLiBIb2lzdCB0aGVtIGludG8gY29uc3RhbnRzLCBzbyB0aGF0IHdlIG5vIGxvbmdlciBuZWVkIHRvXG4gKiAgICBjcmVhdGUgZnJlc2ggbm9kZXMgZm9yIHRoZW0gb24gZWFjaCByZS1yZW5kZXI7XG4gKiAyLiBDb21wbGV0ZWx5IHNraXAgdGhlbSBpbiB0aGUgcGF0Y2hpbmcgcHJvY2Vzcy5cbiAqL1xuZnVuY3Rpb24gb3B0aW1pemUgKHJvb3QsIG9wdGlvbnMpIHtcbiAgaWYgKCFyb290KSB7IHJldHVybiB9XG4gIGlzU3RhdGljS2V5ID0gZ2VuU3RhdGljS2V5c0NhY2hlZChvcHRpb25zLnN0YXRpY0tleXMgfHwgJycpO1xuICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gIC8vIGZpcnN0IHBhc3M6IG1hcmsgYWxsIG5vbi1zdGF0aWMgbm9kZXMuXG4gIG1hcmtTdGF0aWMkMShyb290KTtcbiAgLy8gc2Vjb25kIHBhc3M6IG1hcmsgc3RhdGljIHJvb3RzLlxuICBtYXJrU3RhdGljUm9vdHMocm9vdCwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBnZW5TdGF0aWNLZXlzJDEgKGtleXMpIHtcbiAgcmV0dXJuIG1ha2VNYXAoXG4gICAgJ3R5cGUsdGFnLGF0dHJzTGlzdCxhdHRyc01hcCxwbGFpbixwYXJlbnQsY2hpbGRyZW4sYXR0cnMnICtcbiAgICAoa2V5cyA/ICcsJyArIGtleXMgOiAnJylcbiAgKVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljJDEgKG5vZGUpIHtcbiAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYyhub2RlKTtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvIG5vdCBtYWtlIGNvbXBvbmVudCBzbG90IGNvbnRlbnQgc3RhdGljLiB0aGlzIGF2b2lkc1xuICAgIC8vIDEuIGNvbXBvbmVudHMgbm90IGFibGUgdG8gbXV0YXRlIHNsb3Qgbm9kZXNcbiAgICAvLyAyLiBzdGF0aWMgc2xvdCBjb250ZW50IGZhaWxzIGZvciBob3QtcmVsb2FkaW5nXG4gICAgaWYgKFxuICAgICAgIWlzUGxhdGZvcm1SZXNlcnZlZFRhZyhub2RlLnRhZykgJiZcbiAgICAgIG5vZGUudGFnICE9PSAnc2xvdCcgJiZcbiAgICAgIG5vZGUuYXR0cnNNYXBbJ2lubGluZS10ZW1wbGF0ZSddID09IG51bGxcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgbWFya1N0YXRpYyQxKGNoaWxkKTtcbiAgICAgIGlmICghY2hpbGQuc3RhdGljKSB7XG4gICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgIHZhciBibG9jayA9IG5vZGUuaWZDb25kaXRpb25zW2kkMV0uYmxvY2s7XG4gICAgICAgIG1hcmtTdGF0aWMkMShibG9jayk7XG4gICAgICAgIGlmICghYmxvY2suc3RhdGljKSB7XG4gICAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljUm9vdHMgKG5vZGUsIGlzSW5Gb3IpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgIGlmIChub2RlLnN0YXRpYyB8fCBub2RlLm9uY2UpIHtcbiAgICAgIG5vZGUuc3RhdGljSW5Gb3IgPSBpc0luRm9yO1xuICAgIH1cbiAgICAvLyBGb3IgYSBub2RlIHRvIHF1YWxpZnkgYXMgYSBzdGF0aWMgcm9vdCwgaXQgc2hvdWxkIGhhdmUgY2hpbGRyZW4gdGhhdFxuICAgIC8vIGFyZSBub3QganVzdCBzdGF0aWMgdGV4dC4gT3RoZXJ3aXNlIHRoZSBjb3N0IG9mIGhvaXN0aW5nIG91dCB3aWxsXG4gICAgLy8gb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGFuZCBpdCdzIGJldHRlciBvZmYgdG8ganVzdCBhbHdheXMgcmVuZGVyIGl0IGZyZXNoLlxuICAgIGlmIChub2RlLnN0YXRpYyAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJiAhKFxuICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gM1xuICAgICkpIHtcbiAgICAgIG5vZGUuc3RhdGljUm9vdCA9IHRydWU7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zdGF0aWNSb290ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmNoaWxkcmVuW2ldLCBpc0luRm9yIHx8ICEhbm9kZS5mb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDEsIGwkMSA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSQxIDwgbCQxOyBpJDErKykge1xuICAgICAgICBtYXJrU3RhdGljUm9vdHMobm9kZS5pZkNvbmRpdGlvbnNbaSQxXS5ibG9jaywgaXNJbkZvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljIChub2RlKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDIpIHsgLy8gZXhwcmVzc2lvblxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT09IDMpIHsgLy8gdGV4dFxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuICEhKG5vZGUucHJlIHx8IChcbiAgICAhbm9kZS5oYXNCaW5kaW5ncyAmJiAvLyBubyBkeW5hbWljIGJpbmRpbmdzXG4gICAgIW5vZGUuaWYgJiYgIW5vZGUuZm9yICYmIC8vIG5vdCB2LWlmIG9yIHYtZm9yIG9yIHYtZWxzZVxuICAgICFpc0J1aWx0SW5UYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGJ1aWx0LWluXG4gICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBjb21wb25lbnRcbiAgICAhaXNEaXJlY3RDaGlsZE9mVGVtcGxhdGVGb3Iobm9kZSkgJiZcbiAgICBPYmplY3Qua2V5cyhub2RlKS5ldmVyeShpc1N0YXRpY0tleSlcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNEaXJlY3RDaGlsZE9mVGVtcGxhdGVGb3IgKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgIGlmIChub2RlLnRhZyAhPT0gJ3RlbXBsYXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmIChub2RlLmZvcikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qICAqL1xuXG52YXIgZm5FeHBSRSA9IC9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uXFxzKlxcKC87XG52YXIgc2ltcGxlUGF0aFJFID0gL15bQS1aYS16XyRdW1xcdyRdKig/OlxcLltBLVphLXpfJF1bXFx3JF0qfFxcWydbXiddKj8nXXxcXFtcIlteXCJdKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSokLztcblxuLy8gS2V5Ym9hcmRFdmVudC5rZXlDb2RlIGFsaWFzZXNcbnZhciBrZXlDb2RlcyA9IHtcbiAgZXNjOiAyNyxcbiAgdGFiOiA5LFxuICBlbnRlcjogMTMsXG4gIHNwYWNlOiAzMixcbiAgdXA6IDM4LFxuICBsZWZ0OiAzNyxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgJ2RlbGV0ZSc6IFs4LCA0Nl1cbn07XG5cbi8vIEtleWJvYXJkRXZlbnQua2V5IGFsaWFzZXNcbnZhciBrZXlOYW1lcyA9IHtcbiAgZXNjOiAnRXNjYXBlJyxcbiAgdGFiOiAnVGFiJyxcbiAgZW50ZXI6ICdFbnRlcicsXG4gIHNwYWNlOiAnICcsXG4gIC8vICM3ODA2OiBJRTExIHVzZXMga2V5IG5hbWVzIHdpdGhvdXQgYEFycm93YCBwcmVmaXggZm9yIGFycm93IGtleXMuXG4gIHVwOiBbJ1VwJywgJ0Fycm93VXAnXSxcbiAgbGVmdDogWydMZWZ0JywgJ0Fycm93TGVmdCddLFxuICByaWdodDogWydSaWdodCcsICdBcnJvd1JpZ2h0J10sXG4gIGRvd246IFsnRG93bicsICdBcnJvd0Rvd24nXSxcbiAgJ2RlbGV0ZSc6IFsnQmFja3NwYWNlJywgJ0RlbGV0ZSddXG59O1xuXG4vLyAjNDg2ODogbW9kaWZpZXJzIHRoYXQgcHJldmVudCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBsaXN0ZW5lclxuLy8gbmVlZCB0byBleHBsaWNpdGx5IHJldHVybiBudWxsIHNvIHRoYXQgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRvIHJlbW92ZVxuLy8gdGhlIGxpc3RlbmVyIGZvciAub25jZVxudmFyIGdlbkd1YXJkID0gZnVuY3Rpb24gKGNvbmRpdGlvbikgeyByZXR1cm4gKFwiaWYoXCIgKyBjb25kaXRpb24gKyBcIilyZXR1cm4gbnVsbDtcIik7IH07XG5cbnZhciBtb2RpZmllckNvZGUgPSB7XG4gIHN0b3A6ICckZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7JyxcbiAgcHJldmVudDogJyRldmVudC5wcmV2ZW50RGVmYXVsdCgpOycsXG4gIHNlbGY6IGdlbkd1YXJkKFwiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXRcIiksXG4gIGN0cmw6IGdlbkd1YXJkKFwiISRldmVudC5jdHJsS2V5XCIpLFxuICBzaGlmdDogZ2VuR3VhcmQoXCIhJGV2ZW50LnNoaWZ0S2V5XCIpLFxuICBhbHQ6IGdlbkd1YXJkKFwiISRldmVudC5hbHRLZXlcIiksXG4gIG1ldGE6IGdlbkd1YXJkKFwiISRldmVudC5tZXRhS2V5XCIpLFxuICBsZWZ0OiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAwXCIpLFxuICBtaWRkbGU6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDFcIiksXG4gIHJpZ2h0OiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyXCIpXG59O1xuXG5mdW5jdGlvbiBnZW5IYW5kbGVycyAoXG4gIGV2ZW50cyxcbiAgaXNOYXRpdmUsXG4gIHdhcm5cbikge1xuICB2YXIgcmVzID0gaXNOYXRpdmUgPyAnbmF0aXZlT246eycgOiAnb246eyc7XG4gIGZvciAodmFyIG5hbWUgaW4gZXZlbnRzKSB7XG4gICAgcmVzICs9IFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIjpcIiArIChnZW5IYW5kbGVyKG5hbWUsIGV2ZW50c1tuYW1lXSkpICsgXCIsXCI7XG4gIH1cbiAgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSkgKyAnfSdcbn1cblxuZnVuY3Rpb24gZ2VuSGFuZGxlciAoXG4gIG5hbWUsXG4gIGhhbmRsZXJcbikge1xuICBpZiAoIWhhbmRsZXIpIHtcbiAgICByZXR1cm4gJ2Z1bmN0aW9uKCl7fSdcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgcmV0dXJuIChcIltcIiArIChoYW5kbGVyLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gZ2VuSGFuZGxlcihuYW1lLCBoYW5kbGVyKTsgfSkuam9pbignLCcpKSArIFwiXVwiKVxuICB9XG5cbiAgdmFyIGlzTWV0aG9kUGF0aCA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICB2YXIgaXNGdW5jdGlvbkV4cHJlc3Npb24gPSBmbkV4cFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG5cbiAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgIGlmIChpc01ldGhvZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIHJldHVybiAoXCJmdW5jdGlvbigkZXZlbnQpe1wiICsgKGhhbmRsZXIudmFsdWUpICsgXCJ9XCIpIC8vIGlubGluZSBzdGF0ZW1lbnRcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29kZSA9ICcnO1xuICAgIHZhciBnZW5Nb2RpZmllckNvZGUgPSAnJztcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBtb2RpZmllckNvZGVba2V5XTtcbiAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2V4YWN0Jykge1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0gKGhhbmRsZXIubW9kaWZpZXJzKTtcbiAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFxuICAgICAgICAgIFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnbWV0YSddXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gIW1vZGlmaWVyc1trZXlNb2RpZmllcl07IH0pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gKFwiJGV2ZW50LlwiICsga2V5TW9kaWZpZXIgKyBcIktleVwiKTsgfSlcbiAgICAgICAgICAgIC5qb2luKCd8fCcpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIG1vZGlmaWVycyBsaWtlIHByZXZlbnQgYW5kIHN0b3AgZ2V0IGV4ZWN1dGVkIGFmdGVyIGtleSBmaWx0ZXJpbmdcbiAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICB9XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gaXNNZXRob2RQYXRoXG4gICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKCRldmVudClcIilcbiAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgPyAoXCJyZXR1cm4gKFwiICsgKGhhbmRsZXIudmFsdWUpICsgXCIpKCRldmVudClcIilcbiAgICAgICAgOiBoYW5kbGVyLnZhbHVlO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIHJldHVybiAoXCJmdW5jdGlvbigkZXZlbnQpe1wiICsgY29kZSArIGhhbmRsZXJDb2RlICsgXCJ9XCIpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuS2V5RmlsdGVyIChrZXlzKSB7XG4gIHJldHVybiAoXCJpZighKCdidXR0b24nIGluICRldmVudCkmJlwiICsgKGtleXMubWFwKGdlbkZpbHRlckNvZGUpLmpvaW4oJyYmJykpICsgXCIpcmV0dXJuIG51bGw7XCIpXG59XG5cbmZ1bmN0aW9uIGdlbkZpbHRlckNvZGUgKGtleSkge1xuICB2YXIga2V5VmFsID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gIGlmIChrZXlWYWwpIHtcbiAgICByZXR1cm4gKFwiJGV2ZW50LmtleUNvZGUhPT1cIiArIGtleVZhbClcbiAgfVxuICB2YXIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gIHZhciBrZXlOYW1lID0ga2V5TmFtZXNba2V5XTtcbiAgcmV0dXJuIChcbiAgICBcIl9rKCRldmVudC5rZXlDb2RlLFwiICtcbiAgICAoSlNPTi5zdHJpbmdpZnkoa2V5KSkgKyBcIixcIiArXG4gICAgKEpTT04uc3RyaW5naWZ5KGtleUNvZGUpKSArIFwiLFwiICtcbiAgICBcIiRldmVudC5rZXksXCIgK1xuICAgIFwiXCIgKyAoSlNPTi5zdHJpbmdpZnkoa2V5TmFtZSkpICtcbiAgICBcIilcIlxuICApXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBvbiAoZWwsIGRpcikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkaXIubW9kaWZpZXJzKSB7XG4gICAgd2FybihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XG4gIH1cbiAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJfZyhcIiArIGNvZGUgKyBcIixcIiArIChkaXIudmFsdWUpICsgXCIpXCIpOyB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZCQxIChlbCwgZGlyKSB7XG4gIGVsLndyYXBEYXRhID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICByZXR1cm4gKFwiX2IoXCIgKyBjb2RlICsgXCIsJ1wiICsgKGVsLnRhZykgKyBcIicsXCIgKyAoZGlyLnZhbHVlKSArIFwiLFwiICsgKGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5wcm9wID8gJ3RydWUnIDogJ2ZhbHNlJykgKyAoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnN5bmMgPyAnLHRydWUnIDogJycpICsgXCIpXCIpXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gIG9uOiBvbixcbiAgYmluZDogYmluZCQxLFxuICBjbG9hazogbm9vcFxufVxuXG4vKiAgKi9cblxudmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLndhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcbiAgdGhpcy5kaXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcbiAgdGhpcy5vbmNlSWQgPSAwO1xuICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xufTtcblxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgYXN0LFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgdmFyIGNvZGUgPSBhc3QgPyBnZW5FbGVtZW50KGFzdCwgc3RhdGUpIDogJ19jKFwiZGl2XCIpJztcbiAgcmV0dXJuIHtcbiAgICByZW5kZXI6IChcIndpdGgodGhpcyl7cmV0dXJuIFwiICsgY29kZSArIFwifVwiKSxcbiAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRlLnN0YXRpY1JlbmRlckZuc1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkVsZW1lbnQgKGVsLCBzdGF0ZSkge1xuICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3ZvaWQgMCdcbiAgfSBlbHNlIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyBjb21wb25lbnQgb3IgZWxlbWVudFxuICAgIHZhciBjb2RlO1xuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgIGNvZGUgPSBnZW5Db21wb25lbnQoZWwuY29tcG9uZW50LCBlbCwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZGF0YSA9IGVsLnBsYWluID8gdW5kZWZpbmVkIDogZ2VuRGF0YSQyKGVsLCBzdGF0ZSk7XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICBjb2RlID0gXCJfYygnXCIgKyAoZWwudGFnKSArIFwiJ1wiICsgKGRhdGEgPyAoXCIsXCIgKyBkYXRhKSA6ICcnKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiO1xuICAgIH1cbiAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29kZSA9IHN0YXRlLnRyYW5zZm9ybXNbaV0oZWwsIGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29kZVxuICB9XG59XG5cbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBnZW5TdGF0aWMgKGVsLCBzdGF0ZSkge1xuICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5FbGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtcbiAgcmV0dXJuIChcIl9tKFwiICsgKHN0YXRlLnN0YXRpY1JlbmRlckZucy5sZW5ndGggLSAxKSArIChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJykgKyBcIilcIilcbn1cblxuLy8gdi1vbmNlXG5mdW5jdGlvbiBnZW5PbmNlIChlbCwgc3RhdGUpIHtcbiAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgdmFyIGtleSA9ICcnO1xuICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5mb3IpIHtcbiAgICAgICAga2V5ID0gcGFyZW50LmtleTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIGlmICgha2V5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0YXRlLndhcm4oXG4gICAgICAgIFwidi1vbmNlIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHYtZm9yIHRoYXQgaXMga2V5ZWQuIFwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgICByZXR1cm4gKFwiX28oXCIgKyAoZ2VuRWxlbWVudChlbCwgc3RhdGUpKSArIFwiLFwiICsgKHN0YXRlLm9uY2VJZCsrKSArIFwiLFwiICsga2V5ICsgXCIpXCIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuSWYgKFxuICBlbCxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0RW1wdHlcbikge1xuICBlbC5pZlByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICByZXR1cm4gZ2VuSWZDb25kaXRpb25zKGVsLmlmQ29uZGl0aW9ucy5zbGljZSgpLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSlcbn1cblxuZnVuY3Rpb24gZ2VuSWZDb25kaXRpb25zIChcbiAgY29uZGl0aW9ucyxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0RW1wdHlcbikge1xuICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsdEVtcHR5IHx8ICdfZSgpJ1xuICB9XG5cbiAgdmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuc2hpZnQoKTtcbiAgaWYgKGNvbmRpdGlvbi5leHApIHtcbiAgICByZXR1cm4gKFwiKFwiICsgKGNvbmRpdGlvbi5leHApICsgXCIpP1wiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkgKyBcIjpcIiArIChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyAoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKSlcbiAgfVxuXG4gIC8vIHYtaWYgd2l0aCB2LW9uY2Ugc2hvdWxkIGdlbmVyYXRlIGNvZGUgbGlrZSAoYSk/X20oMCk6X20oMSlcbiAgZnVuY3Rpb24gZ2VuVGVybmFyeUV4cCAoZWwpIHtcbiAgICByZXR1cm4gYWx0R2VuXG4gICAgICA/IGFsdEdlbihlbCwgc3RhdGUpXG4gICAgICA6IGVsLm9uY2VcbiAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgOiBnZW5FbGVtZW50KGVsLCBzdGF0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5Gb3IgKFxuICBlbCxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0SGVscGVyXG4pIHtcbiAgdmFyIGV4cCA9IGVsLmZvcjtcbiAgdmFyIGFsaWFzID0gZWwuYWxpYXM7XG4gIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IxKSkgOiAnJztcbiAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IChcIixcIiArIChlbC5pdGVyYXRvcjIpKSA6ICcnO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpICYmXG4gICAgZWwudGFnICE9PSAnc2xvdCcgJiZcbiAgICBlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiZcbiAgICAhZWwua2V5XG4gICkge1xuICAgIHN0YXRlLndhcm4oXG4gICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1mb3I9XFxcIlwiICsgYWxpYXMgKyBcIiBpbiBcIiArIGV4cCArIFwiXFxcIj46IGNvbXBvbmVudCBsaXN0cyByZW5kZXJlZCB3aXRoIFwiICtcbiAgICAgIFwidi1mb3Igc2hvdWxkIGhhdmUgZXhwbGljaXQga2V5cy4gXCIgK1xuICAgICAgXCJTZWUgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvbGlzdC5odG1sI2tleSBmb3IgbW9yZSBpbmZvLlwiLFxuICAgICAgdHJ1ZSAvKiB0aXAgKi9cbiAgICApO1xuICB9XG5cbiAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gIHJldHVybiAoYWx0SGVscGVyIHx8ICdfbCcpICsgXCIoKFwiICsgZXhwICsgXCIpLFwiICtcbiAgICBcImZ1bmN0aW9uKFwiICsgYWxpYXMgKyBpdGVyYXRvcjEgKyBpdGVyYXRvcjIgKyBcIil7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAoKGFsdEdlbiB8fCBnZW5FbGVtZW50KShlbCwgc3RhdGUpKSArXG4gICAgJ30pJ1xufVxuXG5mdW5jdGlvbiBnZW5EYXRhJDIgKGVsLCBzdGF0ZSkge1xuICB2YXIgZGF0YSA9ICd7JztcblxuICAvLyBkaXJlY3RpdmVzIGZpcnN0LlxuICAvLyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUgdGhleSBhcmUgZ2VuZXJhdGVkLlxuICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKTtcbiAgaWYgKGRpcnMpIHsgZGF0YSArPSBkaXJzICsgJywnOyB9XG5cbiAgLy8ga2V5XG4gIGlmIChlbC5rZXkpIHtcbiAgICBkYXRhICs9IFwia2V5OlwiICsgKGVsLmtleSkgKyBcIixcIjtcbiAgfVxuICAvLyByZWZcbiAgaWYgKGVsLnJlZikge1xuICAgIGRhdGEgKz0gXCJyZWY6XCIgKyAoZWwucmVmKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5yZWZJbkZvcikge1xuICAgIGRhdGEgKz0gXCJyZWZJbkZvcjp0cnVlLFwiO1xuICB9XG4gIC8vIHByZVxuICBpZiAoZWwucHJlKSB7XG4gICAgZGF0YSArPSBcInByZTp0cnVlLFwiO1xuICB9XG4gIC8vIHJlY29yZCBvcmlnaW5hbCB0YWcgbmFtZSBmb3IgY29tcG9uZW50cyB1c2luZyBcImlzXCIgYXR0cmlidXRlXG4gIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICBkYXRhICs9IFwidGFnOlxcXCJcIiArIChlbC50YWcpICsgXCJcXFwiLFwiO1xuICB9XG4gIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuZGF0YUdlbkZucy5sZW5ndGg7IGkrKykge1xuICAgIGRhdGEgKz0gc3RhdGUuZGF0YUdlbkZuc1tpXShlbCk7XG4gIH1cbiAgLy8gYXR0cmlidXRlc1xuICBpZiAoZWwuYXR0cnMpIHtcbiAgICBkYXRhICs9IFwiYXR0cnM6e1wiICsgKGdlblByb3BzKGVsLmF0dHJzKSkgKyBcIn0sXCI7XG4gIH1cbiAgLy8gRE9NIHByb3BzXG4gIGlmIChlbC5wcm9wcykge1xuICAgIGRhdGEgKz0gXCJkb21Qcm9wczp7XCIgKyAoZ2VuUHJvcHMoZWwucHJvcHMpKSArIFwifSxcIjtcbiAgfVxuICAvLyBldmVudCBoYW5kbGVyc1xuICBpZiAoZWwuZXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSwgc3RhdGUud2FybikpICsgXCIsXCI7XG4gIH1cbiAgaWYgKGVsLm5hdGl2ZUV2ZW50cykge1xuICAgIGRhdGEgKz0gKGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSwgc3RhdGUud2FybikpICsgXCIsXCI7XG4gIH1cbiAgLy8gc2xvdCB0YXJnZXRcbiAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICBpZiAoZWwuc2xvdFRhcmdldCAmJiAhZWwuc2xvdFNjb3BlKSB7XG4gICAgZGF0YSArPSBcInNsb3Q6XCIgKyAoZWwuc2xvdFRhcmdldCkgKyBcIixcIjtcbiAgfVxuICAvLyBzY29wZWQgc2xvdHNcbiAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgZGF0YSArPSAoZ2VuU2NvcGVkU2xvdHMoZWwuc2NvcGVkU2xvdHMsIHN0YXRlKSkgKyBcIixcIjtcbiAgfVxuICAvLyBjb21wb25lbnQgdi1tb2RlbFxuICBpZiAoZWwubW9kZWwpIHtcbiAgICBkYXRhICs9IFwibW9kZWw6e3ZhbHVlOlwiICsgKGVsLm1vZGVsLnZhbHVlKSArIFwiLGNhbGxiYWNrOlwiICsgKGVsLm1vZGVsLmNhbGxiYWNrKSArIFwiLGV4cHJlc3Npb246XCIgKyAoZWwubW9kZWwuZXhwcmVzc2lvbikgKyBcIn0sXCI7XG4gIH1cbiAgLy8gaW5saW5lLXRlbXBsYXRlXG4gIGlmIChlbC5pbmxpbmVUZW1wbGF0ZSkge1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IGdlbklubGluZVRlbXBsYXRlKGVsLCBzdGF0ZSk7XG4gICAgaWYgKGlubGluZVRlbXBsYXRlKSB7XG4gICAgICBkYXRhICs9IGlubGluZVRlbXBsYXRlICsgXCIsXCI7XG4gICAgfVxuICB9XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoLywkLywgJycpICsgJ30nO1xuICAvLyB2LWJpbmQgZGF0YSB3cmFwXG4gIGlmIChlbC53cmFwRGF0YSkge1xuICAgIGRhdGEgPSBlbC53cmFwRGF0YShkYXRhKTtcbiAgfVxuICAvLyB2LW9uIGRhdGEgd3JhcFxuICBpZiAoZWwud3JhcExpc3RlbmVycykge1xuICAgIGRhdGEgPSBlbC53cmFwTGlzdGVuZXJzKGRhdGEpO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIGdlbkRpcmVjdGl2ZXMgKGVsLCBzdGF0ZSkge1xuICB2YXIgZGlycyA9IGVsLmRpcmVjdGl2ZXM7XG4gIGlmICghZGlycykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0gJ2RpcmVjdGl2ZXM6Wyc7XG4gIHZhciBoYXNSdW50aW1lID0gZmFsc2U7XG4gIHZhciBpLCBsLCBkaXIsIG5lZWRSdW50aW1lO1xuICBmb3IgKGkgPSAwLCBsID0gZGlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBkaXIgPSBkaXJzW2ldO1xuICAgIG5lZWRSdW50aW1lID0gdHJ1ZTtcbiAgICB2YXIgZ2VuID0gc3RhdGUuZGlyZWN0aXZlc1tkaXIubmFtZV07XG4gICAgaWYgKGdlbikge1xuICAgICAgLy8gY29tcGlsZS10aW1lIGRpcmVjdGl2ZSB0aGF0IG1hbmlwdWxhdGVzIEFTVC5cbiAgICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBpdCBhbHNvIG5lZWRzIGEgcnVudGltZSBjb3VudGVycGFydC5cbiAgICAgIG5lZWRSdW50aW1lID0gISFnZW4oZWwsIGRpciwgc3RhdGUud2Fybik7XG4gICAgfVxuICAgIGlmIChuZWVkUnVudGltZSkge1xuICAgICAgaGFzUnVudGltZSA9IHRydWU7XG4gICAgICByZXMgKz0gXCJ7bmFtZTpcXFwiXCIgKyAoZGlyLm5hbWUpICsgXCJcXFwiLHJhd05hbWU6XFxcIlwiICsgKGRpci5yYXdOYW1lKSArIFwiXFxcIlwiICsgKGRpci52YWx1ZSA/IChcIix2YWx1ZTooXCIgKyAoZGlyLnZhbHVlKSArIFwiKSxleHByZXNzaW9uOlwiICsgKEpTT04uc3RyaW5naWZ5KGRpci52YWx1ZSkpKSA6ICcnKSArIChkaXIuYXJnID8gKFwiLGFyZzpcXFwiXCIgKyAoZGlyLmFyZykgKyBcIlxcXCJcIikgOiAnJykgKyAoZGlyLm1vZGlmaWVycyA/IChcIixtb2RpZmllcnM6XCIgKyAoSlNPTi5zdHJpbmdpZnkoZGlyLm1vZGlmaWVycykpKSA6ICcnKSArIFwifSxcIjtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc1J1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKSArICddJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlIChlbCwgc3RhdGUpIHtcbiAgdmFyIGFzdCA9IGVsLmNoaWxkcmVuWzBdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoXG4gICAgZWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8IGFzdC50eXBlICE9PSAxXG4gICkpIHtcbiAgICBzdGF0ZS53YXJuKCdJbmxpbmUtdGVtcGxhdGUgY29tcG9uZW50cyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudC4nKTtcbiAgfVxuICBpZiAoYXN0LnR5cGUgPT09IDEpIHtcbiAgICB2YXIgaW5saW5lUmVuZGVyRm5zID0gZ2VuZXJhdGUoYXN0LCBzdGF0ZS5vcHRpb25zKTtcbiAgICByZXR1cm4gKFwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiICsgKGlubGluZVJlbmRlckZucy5yZW5kZXIpICsgXCJ9LHN0YXRpY1JlbmRlckZuczpbXCIgKyAoaW5saW5lUmVuZGVyRm5zLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIChcImZ1bmN0aW9uKCl7XCIgKyBjb2RlICsgXCJ9XCIpOyB9KS5qb2luKCcsJykpICsgXCJdfVwiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlblNjb3BlZFNsb3RzIChcbiAgc2xvdHMsXG4gIHN0YXRlXG4pIHtcbiAgcmV0dXJuIChcInNjb3BlZFNsb3RzOl91KFtcIiArIChPYmplY3Qua2V5cyhzbG90cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBnZW5TY29wZWRTbG90KGtleSwgc2xvdHNba2V5XSwgc3RhdGUpXG4gICAgfSkuam9pbignLCcpKSArIFwiXSlcIilcbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdCAoXG4gIGtleSxcbiAgZWwsXG4gIHN0YXRlXG4pIHtcbiAgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbkZvclNjb3BlZFNsb3Qoa2V5LCBlbCwgc3RhdGUpXG4gIH1cbiAgdmFyIGZuID0gXCJmdW5jdGlvbihcIiArIChTdHJpbmcoZWwuc2xvdFNjb3BlKSkgKyBcIil7XCIgK1xuICAgIFwicmV0dXJuIFwiICsgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJ1xuICAgICAgPyBlbC5pZlxuICAgICAgICA/ICgoZWwuaWYpICsgXCI/XCIgKyAoZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJykgKyBcIjp1bmRlZmluZWRcIilcbiAgICAgICAgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnXG4gICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIjtcbiAgcmV0dXJuIChcIntrZXk6XCIgKyBrZXkgKyBcIixmbjpcIiArIGZuICsgXCJ9XCIpXG59XG5cbmZ1bmN0aW9uIGdlbkZvclNjb3BlZFNsb3QgKFxuICBrZXksXG4gIGVsLFxuICBzdGF0ZVxuKSB7XG4gIHZhciBleHAgPSBlbC5mb3I7XG4gIHZhciBhbGlhcyA9IGVsLmFsaWFzO1xuICB2YXIgaXRlcmF0b3IxID0gZWwuaXRlcmF0b3IxID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMSkpIDogJyc7XG4gIHZhciBpdGVyYXRvcjIgPSBlbC5pdGVyYXRvcjIgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IyKSkgOiAnJztcbiAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gIHJldHVybiBcIl9sKChcIiArIGV4cCArIFwiKSxcIiArXG4gICAgXCJmdW5jdGlvbihcIiArIGFsaWFzICsgaXRlcmF0b3IxICsgaXRlcmF0b3IyICsgXCIpe1wiICtcbiAgICAgIFwicmV0dXJuIFwiICsgKGdlblNjb3BlZFNsb3Qoa2V5LCBlbCwgc3RhdGUpKSArXG4gICAgJ30pJ1xufVxuXG5mdW5jdGlvbiBnZW5DaGlsZHJlbiAoXG4gIGVsLFxuICBzdGF0ZSxcbiAgY2hlY2tTa2lwLFxuICBhbHRHZW5FbGVtZW50LFxuICBhbHRHZW5Ob2RlXG4pIHtcbiAgdmFyIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICB2YXIgZWwkMSA9IGNoaWxkcmVuWzBdO1xuICAgIC8vIG9wdGltaXplIHNpbmdsZSB2LWZvclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgIGVsJDEuZm9yICYmXG4gICAgICBlbCQxLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgZWwkMS50YWcgIT09ICdzbG90J1xuICAgICkge1xuICAgICAgcmV0dXJuIChhbHRHZW5FbGVtZW50IHx8IGdlbkVsZW1lbnQpKGVsJDEsIHN0YXRlKVxuICAgIH1cbiAgICB2YXIgbm9ybWFsaXphdGlvblR5cGUgPSBjaGVja1NraXBcbiAgICAgID8gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIHN0YXRlLm1heWJlQ29tcG9uZW50KVxuICAgICAgOiAwO1xuICAgIHZhciBnZW4gPSBhbHRHZW5Ob2RlIHx8IGdlbk5vZGU7XG4gICAgcmV0dXJuIChcIltcIiArIChjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGdlbihjLCBzdGF0ZSk7IH0pLmpvaW4oJywnKSkgKyBcIl1cIiArIChub3JtYWxpemF0aW9uVHlwZSA/IChcIixcIiArIG5vcm1hbGl6YXRpb25UeXBlKSA6ICcnKSlcbiAgfVxufVxuXG4vLyBkZXRlcm1pbmUgdGhlIG5vcm1hbGl6YXRpb24gbmVlZGVkIGZvciB0aGUgY2hpbGRyZW4gYXJyYXkuXG4vLyAwOiBubyBub3JtYWxpemF0aW9uIG5lZWRlZFxuLy8gMTogc2ltcGxlIG5vcm1hbGl6YXRpb24gbmVlZGVkIChwb3NzaWJsZSAxLWxldmVsIGRlZXAgbmVzdGVkIGFycmF5KVxuLy8gMjogZnVsbCBub3JtYWxpemF0aW9uIG5lZWRlZFxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXphdGlvblR5cGUgKFxuICBjaGlsZHJlbixcbiAgbWF5YmVDb21wb25lbnRcbikge1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbCA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChlbC50eXBlICE9PSAxKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobmVlZHNOb3JtYWxpemF0aW9uKGVsKSB8fFxuICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmIGVsLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiBuZWVkc05vcm1hbGl6YXRpb24oYy5ibG9jayk7IH0pKSkge1xuICAgICAgcmVzID0gMjtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChtYXliZUNvbXBvbmVudChlbCkgfHxcbiAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbWF5YmVDb21wb25lbnQoYy5ibG9jayk7IH0pKSkge1xuICAgICAgcmVzID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBuZWVkc05vcm1hbGl6YXRpb24gKGVsKSB7XG4gIHJldHVybiBlbC5mb3IgIT09IHVuZGVmaW5lZCB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScgfHwgZWwudGFnID09PSAnc2xvdCdcbn1cblxuZnVuY3Rpb24gZ2VuTm9kZSAobm9kZSwgc3RhdGUpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBnZW5FbGVtZW50KG5vZGUsIHN0YXRlKVxuICB9IGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5pc0NvbW1lbnQpIHtcbiAgICByZXR1cm4gZ2VuQ29tbWVudChub2RlKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZW5UZXh0KG5vZGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuVGV4dCAodGV4dCkge1xuICByZXR1cm4gKFwiX3YoXCIgKyAodGV4dC50eXBlID09PSAyXG4gICAgPyB0ZXh0LmV4cHJlc3Npb24gLy8gbm8gbmVlZCBmb3IgKCkgYmVjYXVzZSBhbHJlYWR5IHdyYXBwZWQgaW4gX3MoKVxuICAgIDogdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKEpTT04uc3RyaW5naWZ5KHRleHQudGV4dCkpKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5Db21tZW50IChjb21tZW50KSB7XG4gIHJldHVybiAoXCJfZShcIiArIChKU09OLnN0cmluZ2lmeShjb21tZW50LnRleHQpKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5TbG90IChlbCwgc3RhdGUpIHtcbiAgdmFyIHNsb3ROYW1lID0gZWwuc2xvdE5hbWUgfHwgJ1wiZGVmYXVsdFwiJztcbiAgdmFyIGNoaWxkcmVuID0gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKTtcbiAgdmFyIHJlcyA9IFwiX3QoXCIgKyBzbG90TmFtZSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKTtcbiAgdmFyIGF0dHJzID0gZWwuYXR0cnMgJiYgKFwie1wiICsgKGVsLmF0dHJzLm1hcChmdW5jdGlvbiAoYSkgeyByZXR1cm4gKChjYW1lbGl6ZShhLm5hbWUpKSArIFwiOlwiICsgKGEudmFsdWUpKTsgfSkuam9pbignLCcpKSArIFwifVwiKTtcbiAgdmFyIGJpbmQkJDEgPSBlbC5hdHRyc01hcFsndi1iaW5kJ107XG4gIGlmICgoYXR0cnMgfHwgYmluZCQkMSkgJiYgIWNoaWxkcmVuKSB7XG4gICAgcmVzICs9IFwiLG51bGxcIjtcbiAgfVxuICBpZiAoYXR0cnMpIHtcbiAgICByZXMgKz0gXCIsXCIgKyBhdHRycztcbiAgfVxuICBpZiAoYmluZCQkMSkge1xuICAgIHJlcyArPSAoYXR0cnMgPyAnJyA6ICcsbnVsbCcpICsgXCIsXCIgKyBiaW5kJCQxO1xuICB9XG4gIHJldHVybiByZXMgKyAnKSdcbn1cblxuLy8gY29tcG9uZW50TmFtZSBpcyBlbC5jb21wb25lbnQsIHRha2UgaXQgYXMgYXJndW1lbnQgdG8gc2h1biBmbG93J3MgcGVzc2ltaXN0aWMgcmVmaW5lbWVudFxuZnVuY3Rpb24gZ2VuQ29tcG9uZW50IChcbiAgY29tcG9uZW50TmFtZSxcbiAgZWwsXG4gIHN0YXRlXG4pIHtcbiAgdmFyIGNoaWxkcmVuID0gZWwuaW5saW5lVGVtcGxhdGUgPyBudWxsIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlLCB0cnVlKTtcbiAgcmV0dXJuIChcIl9jKFwiICsgY29tcG9uZW50TmFtZSArIFwiLFwiICsgKGdlbkRhdGEkMihlbCwgc3RhdGUpKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5Qcm9wcyAocHJvcHMpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICB7XG4gICAgICByZXMgKz0gXCJcXFwiXCIgKyAocHJvcC5uYW1lKSArIFwiXFxcIjpcIiArICh0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMocHJvcC52YWx1ZSkpICsgXCIsXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXMuc2xpY2UoMCwgLTEpXG59XG5cbi8vICMzODk1LCAjNDI2OFxuZnVuY3Rpb24gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzICh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpXG4gICAgLnJlcGxhY2UoL1xcdTIwMjkvZywgJ1xcXFx1MjAyOScpXG59XG5cbi8qICAqL1xuXG4vLyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgbm90IGFwcGVhciBpbnNpZGUgZXhwcmVzc2lvbnMsIGJ1dCBvcGVyYXRvcnMgbGlrZVxuLy8gdHlwZW9mLCBpbnN0YW5jZW9mIGFuZCBpbiBhcmUgYWxsb3dlZFxudmFyIHByb2hpYml0ZWRLZXl3b3JkUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgKyAoXG4gICdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xuICAnc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LCcgK1xuICAnZXh0ZW5kcyxmaW5hbGx5LGNvbnRpbnVlLGRlYnVnZ2VyLGZ1bmN0aW9uLGFyZ3VtZW50cydcbikuc3BsaXQoJywnKS5qb2luKCdcXFxcYnxcXFxcYicpICsgJ1xcXFxiJyk7XG5cbi8vIHRoZXNlIHVuYXJ5IG9wZXJhdG9ycyBzaG91bGQgbm90IGJlIHVzZWQgYXMgcHJvcGVydHkvbWV0aG9kIG5hbWVzXG52YXIgdW5hcnlPcGVyYXRvcnNSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIChcbiAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCdcbikuc3BsaXQoJywnKS5qb2luKCdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpfFxcXFxiJykgKyAnXFxcXHMqXFxcXChbXlxcXFwpXSpcXFxcKScpO1xuXG4vLyBzdHJpcCBzdHJpbmdzIGluIGV4cHJlc3Npb25zXG52YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuXG4vLyBkZXRlY3QgcHJvYmxlbWF0aWMgZXhwcmVzc2lvbnMgaW4gYSB0ZW1wbGF0ZVxuZnVuY3Rpb24gZGV0ZWN0RXJyb3JzIChhc3QpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICBpZiAoYXN0KSB7XG4gICAgY2hlY2tOb2RlKGFzdCwgZXJyb3JzKTtcbiAgfVxuICByZXR1cm4gZXJyb3JzXG59XG5cbmZ1bmN0aW9uIGNoZWNrTm9kZSAobm9kZSwgZXJyb3JzKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG5vZGUuYXR0cnNNYXApIHtcbiAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChuYW1lID09PSAndi1mb3InKSB7XG4gICAgICAgICAgICBjaGVja0Zvcihub2RlLCAoXCJ2LWZvcj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgZXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9uUkUudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgY2hlY2tFdmVudCh2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgZXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tFeHByZXNzaW9uKHZhbHVlLCAobmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCBlcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoZWNrTm9kZShub2RlLmNoaWxkcmVuW2ldLCBlcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICBjaGVja0V4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBub2RlLnRleHQsIGVycm9ycyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tFdmVudCAoZXhwLCB0ZXh0LCBlcnJvcnMpIHtcbiAgdmFyIHN0aXBwZWQgPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJyk7XG4gIHZhciBrZXl3b3JkTWF0Y2ggPSBzdGlwcGVkLm1hdGNoKHVuYXJ5T3BlcmF0b3JzUkUpO1xuICBpZiAoa2V5d29yZE1hdGNoICYmIHN0aXBwZWQuY2hhckF0KGtleXdvcmRNYXRjaC5pbmRleCAtIDEpICE9PSAnJCcpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIFwiYXZvaWQgdXNpbmcgSmF2YVNjcmlwdCB1bmFyeSBvcGVyYXRvciBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXG4gICAgICBcIlxcXCJcIiArIChrZXl3b3JkTWF0Y2hbMF0pICsgXCJcXFwiIGluIGV4cHJlc3Npb24gXCIgKyAodGV4dC50cmltKCkpXG4gICAgKTtcbiAgfVxuICBjaGVja0V4cHJlc3Npb24oZXhwLCB0ZXh0LCBlcnJvcnMpO1xufVxuXG5mdW5jdGlvbiBjaGVja0ZvciAobm9kZSwgdGV4dCwgZXJyb3JzKSB7XG4gIGNoZWNrRXhwcmVzc2lvbihub2RlLmZvciB8fCAnJywgdGV4dCwgZXJyb3JzKTtcbiAgY2hlY2tJZGVudGlmaWVyKG5vZGUuYWxpYXMsICd2LWZvciBhbGlhcycsIHRleHQsIGVycm9ycyk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMSwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgZXJyb3JzKTtcbiAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IyLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCBlcnJvcnMpO1xufVxuXG5mdW5jdGlvbiBjaGVja0lkZW50aWZpZXIgKFxuICBpZGVudCxcbiAgdHlwZSxcbiAgdGV4dCxcbiAgZXJyb3JzXG4pIHtcbiAgaWYgKHR5cGVvZiBpZGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEZ1bmN0aW9uKChcInZhciBcIiArIGlkZW50ICsgXCI9X1wiKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JzLnB1c2goKFwiaW52YWxpZCBcIiArIHR5cGUgKyBcIiBcXFwiXCIgKyBpZGVudCArIFwiXFxcIiBpbiBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tFeHByZXNzaW9uIChleHAsIHRleHQsIGVycm9ycykge1xuICB0cnkge1xuICAgIG5ldyBGdW5jdGlvbigoXCJyZXR1cm4gXCIgKyBleHApKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJykubWF0Y2gocHJvaGliaXRlZEtleXdvcmRSRSk7XG4gICAgaWYgKGtleXdvcmRNYXRjaCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIFwiYXZvaWQgdXNpbmcgSmF2YVNjcmlwdCBrZXl3b3JkIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgXCJcXFwiXCIgKyAoa2V5d29yZE1hdGNoWzBdKSArIFwiXFxcIlxcbiAgUmF3IGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIFwiaW52YWxpZCBleHByZXNzaW9uOiBcIiArIChlLm1lc3NhZ2UpICsgXCIgaW5cXG5cXG5cIiArXG4gICAgICAgIFwiICAgIFwiICsgZXhwICsgXCJcXG5cXG5cIiArXG4gICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIgKyAodGV4dC50cmltKCkpICsgXCJcXG5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uIChjb2RlLCBlcnJvcnMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKGNvZGUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9ycy5wdXNoKHsgZXJyOiBlcnIsIGNvZGU6IGNvZGUgfSk7XG4gICAgcmV0dXJuIG5vb3BcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuIChjb21waWxlKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBpbGVUb0Z1bmN0aW9ucyAoXG4gICAgdGVtcGxhdGUsXG4gICAgb3B0aW9ucyxcbiAgICB2bVxuICApIHtcbiAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgICB2YXIgd2FybiQkMSA9IG9wdGlvbnMud2FybiB8fCB3YXJuO1xuICAgIGRlbGV0ZSBvcHRpb25zLndhcm47XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gMScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS50b1N0cmluZygpLm1hdGNoKC91bnNhZmUtZXZhbHxDU1AvKSkge1xuICAgICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgICAnSXQgc2VlbXMgeW91IGFyZSB1c2luZyB0aGUgc3RhbmRhbG9uZSBidWlsZCBvZiBWdWUuanMgaW4gYW4gJyArXG4gICAgICAgICAgICAnZW52aXJvbm1lbnQgd2l0aCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IHByb2hpYml0cyB1bnNhZmUtZXZhbC4gJyArXG4gICAgICAgICAgICAnVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGNhbm5vdCB3b3JrIGluIHRoaXMgZW52aXJvbm1lbnQuIENvbnNpZGVyICcgK1xuICAgICAgICAgICAgJ3JlbGF4aW5nIHRoZSBwb2xpY3kgdG8gYWxsb3cgdW5zYWZlLWV2YWwgb3IgcHJlLWNvbXBpbGluZyB5b3VyICcgK1xuICAgICAgICAgICAgJ3RlbXBsYXRlcyBpbnRvIHJlbmRlciBmdW5jdGlvbnMuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBjYWNoZVxuICAgIHZhciBrZXkgPSBvcHRpb25zLmRlbGltaXRlcnNcbiAgICAgID8gU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVycykgKyB0ZW1wbGF0ZVxuICAgICAgOiB0ZW1wbGF0ZTtcbiAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgcmV0dXJuIGNhY2hlW2tleV1cbiAgICB9XG5cbiAgICAvLyBjb21waWxlXG4gICAgdmFyIGNvbXBpbGVkID0gY29tcGlsZSh0ZW1wbGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAvLyBjaGVjayBjb21waWxhdGlvbiBlcnJvcnMvdGlwc1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgd2FybiQkMShcbiAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIiArIHRlbXBsYXRlICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgY29tcGlsZWQuZXJyb3JzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gKFwiLSBcIiArIGUpOyB9KS5qb2luKCdcXG4nKSArICdcXG4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcGlsZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xuICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKG1zZykgeyByZXR1cm4gdGlwKG1zZywgdm0pOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0dXJuIGNvZGUgaW50byBmdW5jdGlvbnNcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgcmVzLnJlbmRlciA9IGNyZWF0ZUZ1bmN0aW9uKGNvbXBpbGVkLnJlbmRlciwgZm5HZW5FcnJvcnMpO1xuICAgIHJlcy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZC5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgfSk7XG5cbiAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCghY29tcGlsZWQuZXJyb3JzIHx8ICFjb21waWxlZC5lcnJvcnMubGVuZ3RoKSAmJiBmbkdlbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgd2FybiQkMShcbiAgICAgICAgICBcIkZhaWxlZCB0byBnZW5lcmF0ZSByZW5kZXIgZnVuY3Rpb246XFxuXFxuXCIgK1xuICAgICAgICAgIGZuR2VuRXJyb3JzLm1hcChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gcmVmLmVycjtcbiAgICAgICAgICAgIHZhciBjb2RlID0gcmVmLmNvZGU7XG5cbiAgICAgICAgICAgIHJldHVybiAoKGVyci50b1N0cmluZygpKSArIFwiIGluXFxuXFxuXCIgKyBjb2RlICsgXCJcXG5cIik7XG4gICAgICAgIH0pLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChjYWNoZVtrZXldID0gcmVzKVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVDb21waWxlckNyZWF0b3IgKGJhc2VDb21waWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVDb21waWxlciAoYmFzZU9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBjb21waWxlIChcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgb3B0aW9uc1xuICAgICkge1xuICAgICAgdmFyIGZpbmFsT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIHRpcHMgPSBbXTtcbiAgICAgIGZpbmFsT3B0aW9ucy53YXJuID0gZnVuY3Rpb24gKG1zZywgdGlwKSB7XG4gICAgICAgICh0aXAgPyB0aXBzIDogZXJyb3JzKS5wdXNoKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAvLyBtZXJnZSBjdXN0b20gbW9kdWxlc1xuICAgICAgICBpZiAob3B0aW9ucy5tb2R1bGVzKSB7XG4gICAgICAgICAgZmluYWxPcHRpb25zLm1vZHVsZXMgPVxuICAgICAgICAgICAgKGJhc2VPcHRpb25zLm1vZHVsZXMgfHwgW10pLmNvbmNhdChvcHRpb25zLm1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICBmaW5hbE9wdGlvbnMuZGlyZWN0aXZlcyA9IGV4dGVuZChcbiAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSxcbiAgICAgICAgICAgIG9wdGlvbnMuZGlyZWN0aXZlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBpbGVkID0gYmFzZUNvbXBpbGUodGVtcGxhdGUsIGZpbmFsT3B0aW9ucyk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBlcnJvcnMucHVzaC5hcHBseShlcnJvcnMsIGRldGVjdEVycm9ycyhjb21waWxlZC5hc3QpKTtcbiAgICAgIH1cbiAgICAgIGNvbXBpbGVkLmVycm9ycyA9IGVycm9ycztcbiAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBzO1xuICAgICAgcmV0dXJuIGNvbXBpbGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBpbGU6IGNvbXBpbGUsXG4gICAgICBjb21waWxlVG9GdW5jdGlvbnM6IGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4oY29tcGlsZSlcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8vIGBjcmVhdGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0ZXJuYXRpdmVcbi8vIHBhcnNlci9vcHRpbWl6ZXIvY29kZWdlbiwgZS5nIHRoZSBTU1Igb3B0aW1pemluZyBjb21waWxlci5cbi8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVyIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxudmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlIChcbiAgdGVtcGxhdGUsXG4gIG9wdGlvbnNcbikge1xuICB2YXIgYXN0ID0gcGFyc2UodGVtcGxhdGUudHJpbSgpLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMub3B0aW1pemUgIT09IGZhbHNlKSB7XG4gICAgb3B0aW1pemUoYXN0LCBvcHRpb25zKTtcbiAgfVxuICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgYXN0OiBhc3QsXG4gICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICBzdGF0aWNSZW5kZXJGbnM6IGNvZGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiQxID0gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpO1xudmFyIGNvbXBpbGVUb0Z1bmN0aW9ucyA9IHJlZiQxLmNvbXBpbGVUb0Z1bmN0aW9ucztcblxuLyogICovXG5cbi8vIGNoZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzXG52YXIgZGl2O1xuZnVuY3Rpb24gZ2V0U2hvdWxkRGVjb2RlIChocmVmKSB7XG4gIGRpdiA9IGRpdiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmlubmVySFRNTCA9IGhyZWYgPyBcIjxhIGhyZWY9XFxcIlxcblxcXCIvPlwiIDogXCI8ZGl2IGE9XFxcIlxcblxcXCIvPlwiO1xuICByZXR1cm4gZGl2LmlubmVySFRNTC5pbmRleE9mKCcmIzEwOycpID4gMFxufVxuXG4vLyAjMzY2MzogSUUgZW5jb2RlcyBuZXdsaW5lcyBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcyB3aGlsZSBvdGhlciBicm93c2VycyBkb24ndFxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKGZhbHNlKSA6IGZhbHNlO1xuLy8gIzY4Mjg6IGNocm9tZSBlbmNvZGVzIGNvbnRlbnQgaW4gYVtocmVmXVxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZSh0cnVlKSA6IGZhbHNlO1xuXG4vKiAgKi9cblxudmFyIGlkVG9UZW1wbGF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoaWQpIHtcbiAgdmFyIGVsID0gcXVlcnkoaWQpO1xuICByZXR1cm4gZWwgJiYgZWwuaW5uZXJIVE1MXG59KTtcblxudmFyIG1vdW50ID0gVnVlLnByb3RvdHlwZS4kbW91bnQ7XG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZWwgPT09IGRvY3VtZW50LmJvZHkgfHwgZWwgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICApO1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0aW9uXG4gIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSBvcHRpb25zLnRlbXBsYXRlO1xuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSBpZFRvVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgKFwiVGVtcGxhdGUgZWxlbWVudCBub3QgZm91bmQgb3IgaXMgZW1wdHk6IFwiICsgKG9wdGlvbnMudGVtcGxhdGUpKSxcbiAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGUubm9kZVR5cGUpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5pbm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oJ2ludmFsaWQgdGVtcGxhdGUgb3B0aW9uOicgKyB0ZW1wbGF0ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGdldE91dGVySFRNTChlbCk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICBtYXJrKCdjb21waWxlJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIHtcbiAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IHNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgZGVsaW1pdGVyczogb3B0aW9ucy5kZWxpbWl0ZXJzLFxuICAgICAgICBjb21tZW50czogb3B0aW9ucy5jb21tZW50c1xuICAgICAgfSwgdGhpcyk7XG4gICAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICAgIHZhciBzdGF0aWNSZW5kZXJGbnMgPSByZWYuc3RhdGljUmVuZGVyRm5zO1xuICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7XG4gICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZucztcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICBtYXJrKCdjb21waWxlIGVuZCcpO1xuICAgICAgICBtZWFzdXJlKChcInZ1ZSBcIiArICh0aGlzLl9uYW1lKSArIFwiIGNvbXBpbGVcIiksICdjb21waWxlJywgJ2NvbXBpbGUgZW5kJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtb3VudC5jYWxsKHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vKipcbiAqIEdldCBvdXRlckhUTUwgb2YgZWxlbWVudHMsIHRha2luZyBjYXJlXG4gKiBvZiBTVkcgZWxlbWVudHMgaW4gSUUgYXMgd2VsbC5cbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJIVE1MIChlbCkge1xuICBpZiAoZWwub3V0ZXJIVE1MKSB7XG4gICAgcmV0dXJuIGVsLm91dGVySFRNTFxuICB9IGVsc2Uge1xuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwuY2xvbmVOb2RlKHRydWUpKTtcbiAgICByZXR1cm4gY29udGFpbmVyLmlubmVySFRNTFxuICB9XG59XG5cblZ1ZS5jb21waWxlID0gY29tcGlsZVRvRnVuY3Rpb25zO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZ1ZTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5jb21tb24uanNcbi8vIG1vZHVsZSBpZCA9IDE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n");
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(17);\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcz9kN2FkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qc1xuLy8gbW9kdWxlIGlkID0gMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16\n");
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(3)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcz85YjJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17\n");
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("window._ = __webpack_require__(19);\nwindow.Popper = __webpack_require__(4).default;\n\n/**\n * We'll load jQuery and the Bootstrap jQuery plugin which provides support\n * for JavaScript based Bootstrap features such as modals and tabs. This\n * code may be modified to fit the specific needs of your application.\n */\n\ntry {\n window.$ = window.jQuery = __webpack_require__(5);\n __webpack_require__(21);\n} catch (e) {}\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = __webpack_require__(22);\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Next we will register the CSRF Token as a common header with Axios so that\n * all outgoing HTTP requests automatically have it attached. This is just\n * a simple convenience so we don't have to attach every token manually.\n */\n\nvar token = document.head.querySelector('meta[name=\"csrf-token\"]');\n\nif (token) {\n window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;\n} else {\n console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');\n}\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n// import Echo from \"laravel-echo\"\n// window.io = require('socket.io-client');\n\n// if (typeof io !== 'undefined') {\n// window.Echo = new Echo({\n// broadcaster: 'socket.io',\n// host: window.location.hostname + ':6001',\n// });\n// }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2Jvb3RzdHJhcC5qcz81OTExIl0sIm5hbWVzIjpbIndpbmRvdyIsIl8iLCJyZXF1aXJlIiwiUG9wcGVyIiwiZGVmYXVsdCIsIiQiLCJqUXVlcnkiLCJlIiwiYXhpb3MiLCJkZWZhdWx0cyIsImhlYWRlcnMiLCJjb21tb24iLCJ0b2tlbiIsImRvY3VtZW50IiwiaGVhZCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250ZW50IiwiY29uc29sZSIsImVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQUEsT0FBT0MsQ0FBUCxHQUFXLG1CQUFBQyxDQUFRLEVBQVIsQ0FBWDtBQUNBRixPQUFPRyxNQUFQLEdBQWdCLG1CQUFBRCxDQUFRLENBQVIsRUFBcUJFLE9BQXJDOztBQUVBOzs7Ozs7QUFNQSxJQUFJO0FBQ0FKLFNBQU9LLENBQVAsR0FBV0wsT0FBT00sTUFBUCxHQUFnQixtQkFBQUosQ0FBUSxDQUFSLENBQTNCO0FBQ0FBLEVBQUEsbUJBQUFBLENBQVEsRUFBUjtBQUNILENBSEQsQ0FHRSxPQUFPSyxDQUFQLEVBQVUsQ0FBRTs7QUFFZDs7Ozs7O0FBTUFQLE9BQU9RLEtBQVAsR0FBZSxtQkFBQU4sQ0FBUSxFQUFSLENBQWY7O0FBRUFGLE9BQU9RLEtBQVAsQ0FBYUMsUUFBYixDQUFzQkMsT0FBdEIsQ0FBOEJDLE1BQTlCLENBQXFDLGtCQUFyQyxJQUEyRCxnQkFBM0Q7O0FBRUE7Ozs7OztBQU1BLElBQUlDLFFBQVFDLFNBQVNDLElBQVQsQ0FBY0MsYUFBZCxDQUE0Qix5QkFBNUIsQ0FBWjs7QUFFQSxJQUFJSCxLQUFKLEVBQVc7QUFDUFosU0FBT1EsS0FBUCxDQUFhQyxRQUFiLENBQXNCQyxPQUF0QixDQUE4QkMsTUFBOUIsQ0FBcUMsY0FBckMsSUFBdURDLE1BQU1JLE9BQTdEO0FBQ0gsQ0FGRCxNQUVPO0FBQ0hDLFVBQVFDLEtBQVIsQ0FBYyx1RUFBZDtBQUNIOztBQUVEOzs7OztBQUtBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsid2luZG93Ll8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbndpbmRvdy5Qb3BwZXIgPSByZXF1aXJlKCdwb3BwZXIuanMnKS5kZWZhdWx0O1xuXG4vKipcbiAqIFdlJ2xsIGxvYWQgalF1ZXJ5IGFuZCB0aGUgQm9vdHN0cmFwIGpRdWVyeSBwbHVnaW4gd2hpY2ggcHJvdmlkZXMgc3VwcG9ydFxuICogZm9yIEphdmFTY3JpcHQgYmFzZWQgQm9vdHN0cmFwIGZlYXR1cmVzIHN1Y2ggYXMgbW9kYWxzIGFuZCB0YWJzLiBUaGlzXG4gKiBjb2RlIG1heSBiZSBtb2RpZmllZCB0byBmaXQgdGhlIHNwZWNpZmljIG5lZWRzIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gKi9cblxudHJ5IHtcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKTtcbiAgICByZXF1aXJlKCdib290c3RyYXAnKTtcbn0gY2F0Y2ggKGUpIHt9XG5cbi8qKlxuICogV2UnbGwgbG9hZCB0aGUgYXhpb3MgSFRUUCBsaWJyYXJ5IHdoaWNoIGFsbG93cyB1cyB0byBlYXNpbHkgaXNzdWUgcmVxdWVzdHNcbiAqIHRvIG91ciBMYXJhdmVsIGJhY2stZW5kLiBUaGlzIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYW5kbGVzIHNlbmRpbmcgdGhlXG4gKiBDU1JGIHRva2VuIGFzIGEgaGVhZGVyIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgXCJYU1JGXCIgdG9rZW4gY29va2llLlxuICovXG5cbndpbmRvdy5heGlvcyA9IHJlcXVpcmUoJ2F4aW9zJyk7XG5cbndpbmRvdy5heGlvcy5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vblsnWC1SZXF1ZXN0ZWQtV2l0aCddID0gJ1hNTEh0dHBSZXF1ZXN0JztcblxuLyoqXG4gKiBOZXh0IHdlIHdpbGwgcmVnaXN0ZXIgdGhlIENTUkYgVG9rZW4gYXMgYSBjb21tb24gaGVhZGVyIHdpdGggQXhpb3Mgc28gdGhhdFxuICogYWxsIG91dGdvaW5nIEhUVFAgcmVxdWVzdHMgYXV0b21hdGljYWxseSBoYXZlIGl0IGF0dGFjaGVkLiBUaGlzIGlzIGp1c3RcbiAqIGEgc2ltcGxlIGNvbnZlbmllbmNlIHNvIHdlIGRvbid0IGhhdmUgdG8gYXR0YWNoIGV2ZXJ5IHRva2VuIG1hbnVhbGx5LlxuICovXG5cbmxldCB0b2tlbiA9IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpO1xuXG5pZiAodG9rZW4pIHtcbiAgICB3aW5kb3cuYXhpb3MuZGVmYXVsdHMuaGVhZGVycy5jb21tb25bJ1gtQ1NSRi1UT0tFTiddID0gdG9rZW4uY29udGVudDtcbn0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQ6IGh0dHBzOi8vbGFyYXZlbC5jb20vZG9jcy9jc3JmI2NzcmYteC1jc3JmLXRva2VuJyk7XG59XG5cbi8qKlxuICogRWNobyBleHBvc2VzIGFuIGV4cHJlc3NpdmUgQVBJIGZvciBzdWJzY3JpYmluZyB0byBjaGFubmVscyBhbmQgbGlzdGVuaW5nXG4gKiBmb3IgZXZlbnRzIHRoYXQgYXJlIGJyb2FkY2FzdCBieSBMYXJhdmVsLiBFY2hvIGFuZCBldmVudCBicm9hZGNhc3RpbmdcbiAqIGFsbG93cyB5b3VyIHRlYW0gdG8gZWFzaWx5IGJ1aWxkIHJvYnVzdCByZWFsLXRpbWUgd2ViIGFwcGxpY2F0aW9ucy5cbiAqL1xuLy8gaW1wb3J0IEVjaG8gZnJvbSBcImxhcmF2ZWwtZWNob1wiXG4vLyB3aW5kb3cuaW8gPSByZXF1aXJlKCdzb2NrZXQuaW8tY2xpZW50Jyk7XG5cbi8vIGlmICh0eXBlb2YgaW8gIT09ICd1bmRlZmluZWQnKSB7XG4vLyAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oe1xuLy8gICAgIGJyb2FkY2FzdGVyOiAnc29ja2V0LmlvJyxcbi8vICAgICBob3N0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOjYwMDEnLFxuLy8gICB9KTtcbi8vIH1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2Jvb3RzdHJhcC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n");
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.10';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n var sourceURL = '//# sourceURL=' +\n ('sourceURL' in options\n ? options.sourceURL\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (true) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return _;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(20)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xvZGFzaC5qcz8zMzg3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJzREFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSwyREFBMkQ7O0FBRTNEO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE1BQU0sYUFBYSxPQUFPOztBQUVwRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELEVBQUU7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQyxHQUFHOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7O0FBRUE7QUFD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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxLQUFLO0FBQ3BCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGVBQWUsT0FBTztBQUN0QixlQUFlLEtBQUs7QUFDcEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxrQkFBa0IsRUFBRTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQixpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCLGNBQWM7QUFDZDtBQUNBLGlCQUFpQixTQUFTO0FBQzFCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxVQUFVO0FBQ3pCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQixjQUFjO0FBQ2Q7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSyxNQUFNLGlCQUFpQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNERBQTREO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQix5Q0FBeUM7QUFDN0Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUFBO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanMuZm91bmRhdGlvbi8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cbjsoZnVuY3Rpb24oKSB7XG5cbiAgLyoqIFVzZWQgYXMgYSBzYWZlIHJlZmVyZW5jZSBmb3IgYHVuZGVmaW5lZGAgaW4gcHJlLUVTNSBlbnZpcm9ubWVudHMuICovXG4gIHZhciB1bmRlZmluZWQ7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLiAqL1xuICB2YXIgVkVSU0lPTiA9ICc0LjE3LjEwJztcblxuICAvKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbiAgdmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xuICB2YXIgQ09SRV9FUlJPUl9URVhUID0gJ1Vuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLicsXG4gICAgICBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbiAgLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xuICB2YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xuICB2YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuICAvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG4gIHZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xuICB2YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xuICB2YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gIHZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NixcbiAgICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4gIC8qKiBVc2VkIGFzIGRlZmF1bHQgb3B0aW9ucyBmb3IgYF8udHJ1bmNhdGVgLiAqL1xuICB2YXIgREVGQVVMVF9UUlVOQ19MRU5HVEggPSAzMCxcbiAgICAgIERFRkFVTFRfVFJVTkNfT01JU1NJT04gPSAnLi4uJztcblxuICAvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG4gIHZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgICBIT1RfU1BBTiA9IDE2O1xuXG4gIC8qKiBVc2VkIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGxhenkgaXRlcmF0ZWVzLiAqL1xuICB2YXIgTEFaWV9GSUxURVJfRkxBRyA9IDEsXG4gICAgICBMQVpZX01BUF9GTEFHID0gMixcbiAgICAgIExBWllfV0hJTEVfRkxBRyA9IDM7XG5cbiAgLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG4gIHZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgICAgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTEsXG4gICAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4LFxuICAgICAgTkFOID0gMCAvIDA7XG5cbiAgLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbiAgdmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1LFxuICAgICAgTUFYX0FSUkFZX0lOREVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsXG4gICAgICBIQUxGX01BWF9BUlJBWV9MRU5HVEggPSBNQVhfQVJSQVlfTEVOR1RIID4+PiAxO1xuXG4gIC8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG4gIHZhciB3cmFwRmxhZ3MgPSBbXG4gICAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gICAgWydiaW5kS2V5JywgV1JBUF9CSU5EX0tFWV9GTEFHXSxcbiAgICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICAgIFsnZmxpcCcsIFdSQVBfRkxJUF9GTEFHXSxcbiAgICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gICAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gICAgWydyZWFyZycsIFdSQVBfUkVBUkdfRkxBR11cbiAgXTtcblxuICAvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG4gIHZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgICBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgICAgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgICAgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJyxcbiAgICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXScsXG4gICAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nLFxuICAgICAgd2Vha1NldFRhZyA9ICdbb2JqZWN0IFdlYWtTZXRdJztcblxuICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGVtcHR5IHN0cmluZyBsaXRlcmFscyBpbiBjb21waWxlZCB0ZW1wbGF0ZSBzb3VyY2UuICovXG4gIHZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGVkSHRtbCA9IC8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyxcbiAgICAgIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgICAgcmVIYXNFc2NhcGVkSHRtbCA9IFJlZ0V4cChyZUVzY2FwZWRIdG1sLnNvdXJjZSksXG4gICAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICAgIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvLFxuICAgICAgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICAgKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAgICovXG4gIHZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbiAgdmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nLFxuICAgICAgcmVUcmltU3RhcnQgPSAvXlxccysvLFxuICAgICAgcmVUcmltRW5kID0gL1xccyskLztcblxuICAvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbiAgdmFyIHJlV3JhcENvbW1lbnQgPSAvXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLFxuICAgICAgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICAgIHJlU3BsaXREZXRhaWxzID0gLyw/ICYgLztcblxuICAvKiogVXNlZCB0byBtYXRjaCB3b3JkcyBjb21wb3NlZCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gKi9cbiAgdmFyIHJlQXNjaWlXb3JkID0gL1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xuICB2YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2hcbiAgICogW0VTIHRlbXBsYXRlIGRlbGltaXRlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRlbXBsYXRlLWxpdGVyYWwtbGV4aWNhbC1jb21wb25lbnRzKS5cbiAgICovXG4gIHZhciByZUVzVGVtcGxhdGUgPSAvXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUZsYWdzID0gL1xcdyokLztcblxuICAvKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xuICB2YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xuICB2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIExhdGluIFVuaWNvZGUgbGV0dGVycyAoZXhjbHVkaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMpLiAqL1xuICB2YXIgcmVMYXRpbiA9IC9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxceGZmXFx1MDEwMC1cXHUwMTdmXS9nO1xuXG4gIC8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbiAgdmFyIHJlTm9NYXRjaCA9IC8oJF4pLztcblxuICAvKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG4gIHZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG4gIHZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgICAgcnNEaW5nYmF0UmFuZ2UgPSAnXFxcXHUyNzAwLVxcXFx1MjdiZicsXG4gICAgICByc0xvd2VyUmFuZ2UgPSAnYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmJyxcbiAgICAgIHJzTWF0aE9wUmFuZ2UgPSAnXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmNycsXG4gICAgICByc05vbkNoYXJSYW5nZSA9ICdcXFxceDAwLVxcXFx4MmZcXFxceDNhLVxcXFx4NDBcXFxceDViLVxcXFx4NjBcXFxceDdiLVxcXFx4YmYnLFxuICAgICAgcnNQdW5jdHVhdGlvblJhbmdlID0gJ1xcXFx1MjAwMC1cXFxcdTIwNmYnLFxuICAgICAgcnNTcGFjZVJhbmdlID0gJyBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwJyxcbiAgICAgIHJzVXBwZXJSYW5nZSA9ICdBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGUnLFxuICAgICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnLFxuICAgICAgcnNCcmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNQdW5jdHVhdGlvblJhbmdlICsgcnNTcGFjZVJhbmdlO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbiAgdmFyIHJzQXBvcyA9IFwiWydcXHUyMDE5XVwiLFxuICAgICAgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgICAgcnNCcmVhayA9ICdbJyArIHJzQnJlYWtSYW5nZSArICddJyxcbiAgICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgICByc0RpZ2l0cyA9ICdcXFxcZCsnLFxuICAgICAgcnNEaW5nYmF0ID0gJ1snICsgcnNEaW5nYmF0UmFuZ2UgKyAnXScsXG4gICAgICByc0xvd2VyID0gJ1snICsgcnNMb3dlclJhbmdlICsgJ10nLFxuICAgICAgcnNNaXNjID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyByc0JyZWFrUmFuZ2UgKyByc0RpZ2l0cyArIHJzRGluZ2JhdFJhbmdlICsgcnNMb3dlclJhbmdlICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgICByc1VwcGVyID0gJ1snICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbiAgdmFyIHJzTWlzY0xvd2VyID0gJyg/OicgKyByc0xvd2VyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgICAgcnNNaXNjVXBwZXIgPSAnKD86JyArIHJzVXBwZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgICByc09wdENvbnRyTG93ZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpkfGxsfG18cmV8c3x0fHZlKSk/JyxcbiAgICAgIHJzT3B0Q29udHJVcHBlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OkR8TEx8TXxSRXxTfFR8VkUpKT8nLFxuICAgICAgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgICByc09yZExvd2VyID0gJ1xcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKScsXG4gICAgICByc09yZFVwcGVyID0gJ1xcXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcXFxkVEgpKD89XFxcXGJ8W2Etel9dKScsXG4gICAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgICByc0Vtb2ppID0gJyg/OicgKyBbcnNEaW5nYmF0LCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc1NlcSxcbiAgICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL1xuICB2YXIgcmVBcG9zID0gUmVnRXhwKHJzQXBvcywgJ2cnKTtcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpIGFuZFxuICAgKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfZm9yX1N5bWJvbHMpLlxuICAgKi9cbiAgdmFyIHJlQ29tYm9NYXJrID0gUmVnRXhwKHJzQ29tYm8sICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggW3N0cmluZyBzeW1ib2xzXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC11bmljb2RlKS4gKi9cbiAgdmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGNvbXBsZXggb3IgY29tcG91bmQgd29yZHMuICovXG4gIHZhciByZVVuaWNvZGVXb3JkID0gUmVnRXhwKFtcbiAgICByc1VwcGVyICsgJz8nICsgcnNMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICAgIHJzTWlzY1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciArIHJzTWlzY0xvd2VyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgICByc1VwcGVyICsgJz8nICsgcnNNaXNjTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIsXG4gICAgcnNVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlcixcbiAgICByc09yZFVwcGVyLFxuICAgIHJzT3JkTG93ZXIsXG4gICAgcnNEaWdpdHMsXG4gICAgcnNFbW9qaVxuICBdLmpvaW4oJ3wnKSwgJ2cnKTtcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbiAgdmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3MgdGhhdCBuZWVkIGEgbW9yZSByb2J1c3QgcmVnZXhwIHRvIG1hdGNoIHdvcmRzLiAqL1xuICB2YXIgcmVIYXNVbmljb2RlV29yZCA9IC9bYS16XVtBLVpdfFtBLVpdezIsfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuICAvKiogVXNlZCB0byBhc3NpZ24gZGVmYXVsdCBgY29udGV4dGAgb2JqZWN0IHByb3BlcnRpZXMuICovXG4gIHZhciBjb250ZXh0UHJvcHMgPSBbXG4gICAgJ0FycmF5JywgJ0J1ZmZlcicsICdEYXRhVmlldycsICdEYXRlJywgJ0Vycm9yJywgJ0Zsb2F0MzJBcnJheScsICdGbG9hdDY0QXJyYXknLFxuICAgICdGdW5jdGlvbicsICdJbnQ4QXJyYXknLCAnSW50MTZBcnJheScsICdJbnQzMkFycmF5JywgJ01hcCcsICdNYXRoJywgJ09iamVjdCcsXG4gICAgJ1Byb21pc2UnLCAnUmVnRXhwJywgJ1NldCcsICdTdHJpbmcnLCAnU3ltYm9sJywgJ1R5cGVFcnJvcicsICdVaW50OEFycmF5JyxcbiAgICAnVWludDhDbGFtcGVkQXJyYXknLCAnVWludDE2QXJyYXknLCAnVWludDMyQXJyYXknLCAnV2Vha01hcCcsXG4gICAgJ18nLCAnY2xlYXJUaW1lb3V0JywgJ2lzRmluaXRlJywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnXG4gIF07XG5cbiAgLyoqIFVzZWQgdG8gbWFrZSB0ZW1wbGF0ZSBzb3VyY2VVUkxzIGVhc2llciB0byBpZGVudGlmeS4gKi9cbiAgdmFyIHRlbXBsYXRlQ291bnRlciA9IC0xO1xuXG4gIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbiAgdmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG4gIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xuICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuICBjbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICBjbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xuICB2YXIgZGVidXJyZWRMZXR0ZXJzID0ge1xuICAgIC8vIExhdGluLTEgU3VwcGxlbWVudCBibG9jay5cbiAgICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgICAnXFx4ZTAnOiAnYScsICAnXFx4ZTEnOiAnYScsICdcXHhlMic6ICdhJywgJ1xceGUzJzogJ2EnLCAnXFx4ZTQnOiAnYScsICdcXHhlNSc6ICdhJyxcbiAgICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAgICdcXHhjOCc6ICdFJywgICdcXHhjOSc6ICdFJywgJ1xceGNhJzogJ0UnLCAnXFx4Y2InOiAnRScsXG4gICAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAgICdcXHhlYyc6ICdpJywgICdcXHhlZCc6ICdpJywgJ1xceGVlJzogJ2knLCAnXFx4ZWYnOiAnaScsXG4gICAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAgICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAgICdcXHhmMic6ICdvJywgICdcXHhmMyc6ICdvJywgJ1xceGY0JzogJ28nLCAnXFx4ZjUnOiAnbycsICdcXHhmNic6ICdvJywgJ1xceGY4JzogJ28nLFxuICAgICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgICAnXFx4ZGQnOiAnWScsICAnXFx4ZmQnOiAneScsICdcXHhmZic6ICd5JyxcbiAgICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAgICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICAgJ1xceGRmJzogJ3NzJyxcbiAgICAvLyBMYXRpbiBFeHRlbmRlZC1BIGJsb2NrLlxuICAgICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAgICdcXHUwMTAxJzogJ2EnLCAgJ1xcdTAxMDMnOiAnYScsICdcXHUwMTA1JzogJ2EnLFxuICAgICdcXHUwMTA2JzogJ0MnLCAgJ1xcdTAxMDgnOiAnQycsICdcXHUwMTBhJzogJ0MnLCAnXFx1MDEwYyc6ICdDJyxcbiAgICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICAgJ1xcdTAxMGUnOiAnRCcsICAnXFx1MDExMCc6ICdEJywgJ1xcdTAxMGYnOiAnZCcsICdcXHUwMTExJzogJ2QnLFxuICAgICdcXHUwMTEyJzogJ0UnLCAgJ1xcdTAxMTQnOiAnRScsICdcXHUwMTE2JzogJ0UnLCAnXFx1MDExOCc6ICdFJywgJ1xcdTAxMWEnOiAnRScsXG4gICAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgICAnXFx1MDExYyc6ICdHJywgICdcXHUwMTFlJzogJ0cnLCAnXFx1MDEyMCc6ICdHJywgJ1xcdTAxMjInOiAnRycsXG4gICAgJ1xcdTAxMWQnOiAnZycsICAnXFx1MDExZic6ICdnJywgJ1xcdTAxMjEnOiAnZycsICdcXHUwMTIzJzogJ2cnLFxuICAgICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgICAnXFx1MDEyOCc6ICdJJywgICdcXHUwMTJhJzogJ0knLCAnXFx1MDEyYyc6ICdJJywgJ1xcdTAxMmUnOiAnSScsICdcXHUwMTMwJzogJ0knLFxuICAgICdcXHUwMTI5JzogJ2knLCAgJ1xcdTAxMmInOiAnaScsICdcXHUwMTJkJzogJ2knLCAnXFx1MDEyZic6ICdpJywgJ1xcdTAxMzEnOiAnaScsXG4gICAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgICAnXFx1MDEzNic6ICdLJywgICdcXHUwMTM3JzogJ2snLCAnXFx1MDEzOCc6ICdrJyxcbiAgICAnXFx1MDEzOSc6ICdMJywgICdcXHUwMTNiJzogJ0wnLCAnXFx1MDEzZCc6ICdMJywgJ1xcdTAxM2YnOiAnTCcsICdcXHUwMTQxJzogJ0wnLFxuICAgICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICAgJ1xcdTAxNDMnOiAnTicsICAnXFx1MDE0NSc6ICdOJywgJ1xcdTAxNDcnOiAnTicsICdcXHUwMTRhJzogJ04nLFxuICAgICdcXHUwMTQ0JzogJ24nLCAgJ1xcdTAxNDYnOiAnbicsICdcXHUwMTQ4JzogJ24nLCAnXFx1MDE0Yic6ICduJyxcbiAgICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgICAnXFx1MDE0ZCc6ICdvJywgICdcXHUwMTRmJzogJ28nLCAnXFx1MDE1MSc6ICdvJyxcbiAgICAnXFx1MDE1NCc6ICdSJywgICdcXHUwMTU2JzogJ1InLCAnXFx1MDE1OCc6ICdSJyxcbiAgICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgICAnXFx1MDE1YSc6ICdTJywgICdcXHUwMTVjJzogJ1MnLCAnXFx1MDE1ZSc6ICdTJywgJ1xcdTAxNjAnOiAnUycsXG4gICAgJ1xcdTAxNWInOiAncycsICAnXFx1MDE1ZCc6ICdzJywgJ1xcdTAxNWYnOiAncycsICdcXHUwMTYxJzogJ3MnLFxuICAgICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAgICdcXHUwMTYzJzogJ3QnLCAgJ1xcdTAxNjUnOiAndCcsICdcXHUwMTY3JzogJ3QnLFxuICAgICdcXHUwMTY4JzogJ1UnLCAgJ1xcdTAxNmEnOiAnVScsICdcXHUwMTZjJzogJ1UnLCAnXFx1MDE2ZSc6ICdVJywgJ1xcdTAxNzAnOiAnVScsICdcXHUwMTcyJzogJ1UnLFxuICAgICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAgICdcXHUwMTc0JzogJ1cnLCAgJ1xcdTAxNzUnOiAndycsXG4gICAgJ1xcdTAxNzYnOiAnWScsICAnXFx1MDE3Nyc6ICd5JywgJ1xcdTAxNzgnOiAnWScsXG4gICAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICAgJ1xcdTAxN2EnOiAneicsICAnXFx1MDE3Yyc6ICd6JywgJ1xcdTAxN2UnOiAneicsXG4gICAgJ1xcdTAxMzInOiAnSUonLCAnXFx1MDEzMyc6ICdpaicsXG4gICAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICAgJ1xcdTAxNDknOiBcIiduXCIsICdcXHUwMTdmJzogJ3MnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbiAgdmFyIGh0bWxFc2NhcGVzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7J1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuICovXG4gIHZhciBodG1sVW5lc2NhcGVzID0ge1xuICAgICcmYW1wOyc6ICcmJyxcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJiMzOTsnOiBcIidcIlxuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcbic6ICduJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICAvKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xuICB2YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgICAgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG4gIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4gIC8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xuICB2YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xuICB2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xuICB2YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4gIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG4gIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuICAvKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbiAgdmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgICBpZiAodHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH0oKSk7XG5cbiAgLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG5vZGVJc0FycmF5QnVmZmVyID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNBcnJheUJ1ZmZlcixcbiAgICAgIG5vZGVJc0RhdGUgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0RhdGUsXG4gICAgICBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcCxcbiAgICAgIG5vZGVJc1JlZ0V4cCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzUmVnRXhwLFxuICAgICAgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQsXG4gICAgICBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UmVkdWNlKGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07XG4gICAgfVxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2l6ZSBvZiBhbiBBU0NJSSBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgdmFyIGFzY2lpU2l6ZSA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlQXNjaWlXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZmluZEtleWAgYW5kIGBfLmZpbmRMYXN0S2V5YCxcbiAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICAgKiB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmb3VuZCBlbGVtZW50IG9yIGl0cyBrZXksIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIHJlc3VsdCA9IGtleTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlSW5kZXhPZldpdGgoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZWFuYCBhbmQgYF8ubWVhbkJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlTWVhbihhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuIGxlbmd0aCA/IChiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkgLyBsZW5ndGgpIDogTkFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVkdWNlYCBhbmQgYF8ucmVkdWNlUmlnaHRgLCB3aXRob3V0IHN1cHBvcnRcbiAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gIHVzaW5nIGBlYWNoRnVuY2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBpbml0QWNjdW0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IG9mXG4gICAqICBgY29sbGVjdGlvbmAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBlYWNoRnVuYykge1xuICAgIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgYWNjdW11bGF0b3IgPSBpbml0QWNjdW1cbiAgICAgICAgPyAoaW5pdEFjY3VtID0gZmFsc2UsIHZhbHVlKVxuICAgICAgICA6IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0QnlgIHdoaWNoIHVzZXMgYGNvbXBhcmVyYCB0byBkZWZpbmUgdGhlXG4gICAqIHNvcnQgb3JkZXIgb2YgYGFycmF5YCBhbmQgcmVwbGFjZXMgY3JpdGVyaWEgb2JqZWN0cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmdcbiAgICogdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZXIgVGhlIGZ1bmN0aW9uIHRvIGRlZmluZSBzb3J0IG9yZGVyLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIGFuZCBgXy5zdW1CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciByZXN1bHQsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSk7XG4gICAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gY3VycmVudCA6IChyZXN1bHQgKyBjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gICAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9QYWlyc2AgYW5kIGBfLnRvUGFpcnNJbmAgd2hpY2ggY3JlYXRlcyBhbiBhcnJheVxuICAgKiBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzIG9mIGBwcm9wc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAgICogb2YgYHByb3BzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICAgIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltU3RhcnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSAwO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgKytyZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuXG4gICAqL1xuICB2YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSB3b3JkIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlV29yZC50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICAgIHZhciBkYXRhLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcIl9fcHJvdG9fX1wiLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gICAgcmV0dXJuIGtleSA9PSAnX19wcm90b19fJ1xuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogb2JqZWN0W2tleV07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gaXRzIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldFRvUGFpcnMoc2V0KSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICAgIDogYXNjaWlTaXplKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIHZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVVbmljb2RlLmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKHJlVW5pY29kZS50ZXN0KHN0cmluZykpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJpc3RpbmUgYGxvZGFzaGAgZnVuY3Rpb24gdXNpbmcgdGhlIGBjb250ZXh0YCBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDEuMS4wXG4gICAqIEBjYXRlZ29yeSBVdGlsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dD1yb290XSBUaGUgY29udGV4dCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBhIG5ldyBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5taXhpbih7ICdmb28nOiBfLmNvbnN0YW50KCdmb28nKSB9KTtcbiAgICpcbiAgICogdmFyIGxvZGFzaCA9IF8ucnVuSW5Db250ZXh0KCk7XG4gICAqIGxvZGFzaC5taXhpbih7ICdiYXInOiBsb2Rhc2guY29uc3RhbnQoJ2JhcicpIH0pO1xuICAgKlxuICAgKiBfLmlzRnVuY3Rpb24oXy5mb28pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqIF8uaXNGdW5jdGlvbihfLmJhcik7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5mb28pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guYmFyKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiAvLyBDcmVhdGUgYSBzdXBlZC11cCBgZGVmZXJgIGluIE5vZGUuanMuXG4gICAqIHZhciBkZWZlciA9IF8ucnVuSW5Db250ZXh0KHsgJ3NldFRpbWVvdXQnOiBzZXRJbW1lZGlhdGUgfSkuZGVmZXI7XG4gICAqL1xuICB2YXIgcnVuSW5Db250ZXh0ID0gKGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgPT0gbnVsbCA/IHJvb3QgOiBfLmRlZmF1bHRzKHJvb3QuT2JqZWN0KCksIGNvbnRleHQsIF8ucGljayhyb290LCBjb250ZXh0UHJvcHMpKTtcblxuICAgIC8qKiBCdWlsdC1pbiBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0Lk9iamVjdCxcbiAgICAgICAgUmVnRXhwID0gY29udGV4dC5SZWdFeHAsXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0LlR5cGVFcnJvcjtcblxuICAgIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICAgICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG4gICAgdmFyIGNvcmVKc0RhdGEgPSBjb250ZXh0WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgICAvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xuICAgIHZhciBpZENvdW50ZXIgPSAwO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbiAgICB2YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gICAgICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAgICAgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAgICAgKiBvZiB2YWx1ZXMuXG4gICAgICovXG4gICAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG4gICAgdmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbiAgICApO1xuXG4gICAgLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBjb250ZXh0LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3ltYm9sID0gY29udGV4dC5TeW1ib2wsXG4gICAgICAgIFVpbnQ4QXJyYXkgPSBjb250ZXh0LlVpbnQ4QXJyYXksXG4gICAgICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkLFxuICAgICAgICBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSxcbiAgICAgICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICAgICAgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICAgICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgICAgIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgICAgICBmdW5jKHt9LCAnJywge30pO1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfSgpKTtcblxuICAgIC8qKiBNb2NrZWQgYnVpbHQtaW5zLiAqL1xuICAgIHZhciBjdHhDbGVhclRpbWVvdXQgPSBjb250ZXh0LmNsZWFyVGltZW91dCAhPT0gcm9vdC5jbGVhclRpbWVvdXQgJiYgY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIGN0eE5vdyA9IERhdGUgJiYgRGF0ZS5ub3cgIT09IHJvb3QuRGF0ZS5ub3cgJiYgRGF0ZS5ub3csXG4gICAgICAgIGN0eFNldFRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQgIT09IHJvb3Quc2V0VGltZW91dCAmJiBjb250ZXh0LnNldFRpbWVvdXQ7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG4gICAgdmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgICAgIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICAgICAgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gICAgICAgIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBuYXRpdmVJc0Zpbml0ZSA9IGNvbnRleHQuaXNGaW5pdGUsXG4gICAgICAgIG5hdGl2ZUpvaW4gPSBhcnJheVByb3RvLmpvaW4sXG4gICAgICAgIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpLFxuICAgICAgICBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICAgICAgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgICAgIG5hdGl2ZU5vdyA9IERhdGUubm93LFxuICAgICAgICBuYXRpdmVQYXJzZUludCA9IGNvbnRleHQucGFyc2VJbnQsXG4gICAgICAgIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tLFxuICAgICAgICBuYXRpdmVSZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG4gICAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuICAgIHZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShjb250ZXh0LCAnRGF0YVZpZXcnKSxcbiAgICAgICAgTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdNYXAnKSxcbiAgICAgICAgUHJvbWlzZSA9IGdldE5hdGl2ZShjb250ZXh0LCAnUHJvbWlzZScpLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBXZWFrTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdXZWFrTWFwJyksXG4gICAgICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuICAgIC8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICAgIHZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxuICAgIC8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xuICAgIHZhciByZWFsTmFtZXMgPSB7fTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG4gICAgdmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICAgICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgICAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4gICAgLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG4gICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAgICAgKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAgICAgKiBvciBtYXkgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIGNoYWluIHNlcXVlbmNlXG4gICAgICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gICAgICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gICAgICpcbiAgICAgKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gICAgICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAgICAgKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICAgICAqIHRoZSBjcmVhdGlvbiBvZiBpbnRlcm1lZGlhdGUgYXJyYXlzIGFuZCBjYW4gZ3JlYXRseSByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gICAgICogb25lIGFyZ3VtZW50LiBUaGUgaGV1cmlzdGljIGZvciB3aGV0aGVyIGEgc2VjdGlvbiBxdWFsaWZpZXMgZm9yIHNob3J0Y3V0XG4gICAgICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHNoaWZ0YCwgYHNvcnRgLCBgc3BsaWNlYCwgYW5kIGB1bnNoaWZ0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gICAgICogYHJlcGxhY2VgIGFuZCBgc3BsaXRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICAgICAqIGBhdGAsIGBjb21wYWN0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGRyb3BXaGlsZWAsIGBmaWx0ZXJgLCBgZmluZGAsXG4gICAgICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gICAgICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICAgICAqXG4gICAgICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAgICAgKiBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCwgYGNhc3RBcnJheWAsIGBjaGFpbmAsIGBjaHVua2AsXG4gICAgICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gICAgICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gICAgICogYGRpZmZlcmVuY2VgLCBgZGlmZmVyZW5jZUJ5YCwgYGRpZmZlcmVuY2VXaXRoYCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCxcbiAgICAgKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gICAgICogYGZsYXR0ZW5EZXB0aGAsIGBmbGlwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCwgYGZyb21QYWlyc2AsIGBmdW5jdGlvbnNgLFxuICAgICAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAgICAgKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAgICAgKiBga2V5c2AsIGBrZXlzSW5gLCBgbWFwYCwgYG1hcEtleXNgLCBgbWFwVmFsdWVzYCwgYG1hdGNoZXNgLCBgbWF0Y2hlc1Byb3BlcnR5YCxcbiAgICAgKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gICAgICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gICAgICogYG92ZXJFdmVyeWAsIGBvdmVyU29tZWAsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsIGBwYXJ0aXRpb25gLCBgcGlja2AsXG4gICAgICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICAgICAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gICAgICogYHJlbW92ZWAsIGByZXN0YCwgYHJldmVyc2VgLCBgc2FtcGxlU2l6ZWAsIGBzZXRgLCBgc2V0V2l0aGAsIGBzaHVmZmxlYCxcbiAgICAgKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICAgICAqIGB0b1BhaXJzYCwgYHRvUGFpcnNJbmAsIGB0b1BhdGhgLCBgdG9QbGFpbk9iamVjdGAsIGB0cmFuc2Zvcm1gLCBgdW5hcnlgLFxuICAgICAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gICAgICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gICAgICogYHZhbHVlc0luYCwgYHdpdGhvdXRgLCBgd3JhcGAsIGB4b3JgLCBgeG9yQnlgLCBgeG9yV2l0aGAsIGB6aXBgLFxuICAgICAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBhcmUgKipub3QqKiBjaGFpbmFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICAgICAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICAgICAqIGBkZWZhdWx0VG9gLCBgZGl2aWRlYCwgYGVhY2hgLCBgZWFjaFJpZ2h0YCwgYGVuZHNXaXRoYCwgYGVxYCwgYGVzY2FwZWAsXG4gICAgICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAgICAgKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gICAgICogYGZvckluYCwgYGZvckluUmlnaHRgLCBgZm9yT3duYCwgYGZvck93blJpZ2h0YCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCxcbiAgICAgKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAgICAgKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAgICAgKiBgaXNCb29sZWFuYCwgYGlzQnVmZmVyYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLCBgaXNFbXB0eWAsIGBpc0VxdWFsYCxcbiAgICAgKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gICAgICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAgICAgKiBgaXNOdW1iZXJgLCBgaXNPYmplY3RgLCBgaXNPYmplY3RMaWtlYCwgYGlzUGxhaW5PYmplY3RgLCBgaXNSZWdFeHBgLFxuICAgICAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gICAgICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gICAgICogYGxvd2VyQ2FzZWAsIGBsb3dlckZpcnN0YCwgYGx0YCwgYGx0ZWAsIGBtYXhgLCBgbWF4QnlgLCBgbWVhbmAsIGBtZWFuQnlgLFxuICAgICAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAgICAgKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAgICAgKiBgcmVwZWF0YCwgYHJlc3VsdGAsIGByb3VuZGAsIGBydW5JbkNvbnRleHRgLCBgc2FtcGxlYCwgYHNoaWZ0YCwgYHNpemVgLFxuICAgICAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gICAgICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICAgICAqIGBzdHViT2JqZWN0YCwgYHN0dWJTdHJpbmdgLCBgc3R1YlRydWVgLCBgc3VidHJhY3RgLCBgc3VtYCwgYHN1bUJ5YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gICAgICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICAgICAqIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGB0cnVuY2F0ZWAsIGB1bmVzY2FwZWAsIGB1bmlxdWVJZGAsIGB1cHBlckNhc2VgLFxuICAgICAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBuYW1lIF9cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcCBpbiBhIGBsb2Rhc2hgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICAgICAqIHZhciBzcXVhcmVzID0gd3JhcHBlZC5tYXAoc3F1YXJlKTtcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgICAgIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLCBjaGFpbkFsbCkge1xuICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgICAgdGhpcy5fX2luZGV4X18gPSAwO1xuICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gICAgICogZW1iZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFuZ2UgdGhlXG4gICAgICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkYXRhIG9iamVjdCBpbiB0aGUgdGVtcGxhdGUgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICAndmFyaWFibGUnOiAnJyxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgICAgICovXG4gICAgICAgICdfJzogbG9kYXNoXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB3cmFwcGVycyBhcmUgaW5zdGFuY2VzIG9mIGBiYXNlTG9kYXNoYC5cbiAgICBsb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuICAgIExvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fZGlyX18gPSAxO1xuICAgICAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgICAgIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICAgICAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gY29weUFycmF5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKGFycmF5LCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAobGVuZ3RoLS0gJiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuXG4gICAgICAgIHZhciBpdGVySW5kZXggPSAtMSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGl0ZXJhdGVlc1tpdGVySW5kZXhdLFxuICAgICAgICAgICAgICBpdGVyYXRlZSA9IGRhdGEuaXRlcmF0ZWUsXG4gICAgICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9NQVBfRkxBRykge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRykge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICAgICAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG4gICAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG4gICAgSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuICAgIEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG4gICAgSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgICAgICBkYXRhLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgLS10aGlzLnNpemU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgKyt0aGlzLnNpemU7XG4gICAgICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAgICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYWRkXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQGFsaWFzIHB1c2hcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICAgICAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICAgICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICAgICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gICAgICB9XG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG4gICAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcbiAgICBTdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG4gICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuICAgIFN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcbiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICAgICAgKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3RoIC0gMSldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVTaXplYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlU2l6ZShhcnJheSwgbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFnZ3JlZ2F0ZXMgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIG9uIGBhY2N1bXVsYXRvcmAgd2l0aCBrZXlzIHRyYW5zZm9ybWVkXG4gICAgICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICAgICAqIHZhbHVlIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBza2lwID0gb2JqZWN0ID09IG51bGw7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gICAgICogdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIERlZXAgY2xvbmVcbiAgICAgKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgKiAgNCAtIENsb25lIHN5bWJvbHNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZDtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICAgICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICAgICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICAgICAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChwcm9wcykge1xuICAgICAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgdmFyIHByb3BzID0ga2V5cyhzb3VyY2UpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIHByb3BzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNUb2Agd2hpY2ggYWNjZXB0cyBgcHJvcHNgIHRvIGNoZWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcykge1xuICAgICAgdmFyIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tsZW5ndGhdLFxuICAgICAgICAgICAgcHJlZGljYXRlID0gc291cmNlW2tleV0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIGlmICgodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB8fCAhcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0cyBgYXJnc2BcbiAgICAgKiB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICogQHJldHVybnMge251bWJlcnxPYmplY3R9IFJldHVybnMgdGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaFJpZ2h0ID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93blJpZ2h0LCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ubWF4YCBhbmQgYF8ubWluYCB3aGljaCBhY2NlcHRzIGFcbiAgICAgKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV4dHJlbXVtKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjdXJyZW50ID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwgJiYgKGNvbXB1dGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgICAgIDogY29tcGFyYXRvcihjdXJyZW50LCBjb21wdXRlZClcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWxsYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgYGFycmF5YCB3aXRoLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgZW5kID0gc3RhcnQgPiBlbmQgPyAwIDogdG9MZW5ndGgoZW5kKTtcbiAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xuICAgICAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgICAgIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gICAgICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlRm9yYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXNcbiAgICAgKiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgdmFyIGJhc2VGb3JSaWdodCA9IGNyZWF0ZUJhc2VGb3IodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duUmlnaHRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvclJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZ1bmN0aW9uc2Agd2hpY2ggY3JlYXRlcyBhbiBhcnJheSBvZlxuICAgICAqIGBvYmplY3RgIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZpbHRlcmVkIGZyb20gYHByb3BzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGZpbHRlci5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGdW5jdGlvbnMob2JqZWN0LCBwcm9wcykge1xuICAgICAgcmV0dXJuIGFycmF5RmlsdGVyKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqZWN0W2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAgICAgKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICAgICAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgICAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICAgICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ3RgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUd0KHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID4gb3RoZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUhhcyhvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCwga2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluUmFuZ2VgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBudW1iZXJgIGlzIGluIHRoZSByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+PSBuYXRpdmVNaW4oc3RhcnQsIGVuZCkgJiYgbnVtYmVyIDwgbmF0aXZlTWF4KHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3aXRob3V0IHN1cHBvcnRcbiAgICAgKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2Ygc2hhcmVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmNsdWRlcyA9IGNvbXBhcmF0b3IgPyBhcnJheUluY2x1ZGVzV2l0aCA6IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoLFxuICAgICAgICAgIGNhY2hlcyA9IEFycmF5KG90aExlbmd0aCksXG4gICAgICAgICAgbWF4TGVuZ3RoID0gSW5maW5pdHksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlIChvdGhJbmRleC0tKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tvdGhJbmRleF07XG4gICAgICAgIGlmIChvdGhJbmRleCAmJiBpdGVyYXRlZSkge1xuICAgICAgICAgIGFycmF5ID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgICB9XG4gICAgICAgIG1heExlbmd0aCA9IG5hdGl2ZU1pbihhcnJheS5sZW5ndGgsIG1heExlbmd0aCk7XG4gICAgICAgIGNhY2hlc1tvdGhJbmRleF0gPSAhY29tcGFyYXRvciAmJiAoaXRlcmF0ZWUgfHwgKGxlbmd0aCA+PSAxMjAgJiYgYXJyYXkubGVuZ3RoID49IDEyMCkpXG4gICAgICAgICAgPyBuZXcgU2V0Q2FjaGUob3RoSW5kZXggJiYgYXJyYXkpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhcnJheSA9IGFycmF5c1swXTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgc2VlbiA9IGNhY2hlc1swXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiByZXN1bHQubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKCEoc2VlblxuICAgICAgICAgICAgICA/IGNhY2hlSGFzKHNlZW4sIGNvbXB1dGVkKVxuICAgICAgICAgICAgICA6IGluY2x1ZGVzKHJlc3VsdCwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKC0tb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IGNhY2hlc1tvdGhJbmRleF07XG4gICAgICAgICAgICBpZiAoIShjYWNoZVxuICAgICAgICAgICAgICAgICAgPyBjYWNoZUhhcyhjYWNoZSwgY29tcHV0ZWQpXG4gICAgICAgICAgICAgICAgICA6IGluY2x1ZGVzKGFycmF5c1tvdGhJbmRleF0sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWVuKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52ZXJ0YCBhbmQgYF8uaW52ZXJ0QnlgIHdoaWNoIGludmVydHNcbiAgICAgKiBgb2JqZWN0YCB3aXRoIHZhbHVlcyB0cmFuc2Zvcm1lZCBieSBgaXRlcmF0ZWVgIGFuZCBzZXQgYnkgYHNldHRlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW52ZXJ0ZXIob2JqZWN0LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIGl0ZXJhdGVlKHZhbHVlKSwga2V5LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52b2tlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBtZXRob2QgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gICAgICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyB1bmRlZmluZWQgOiBhcHBseShmdW5jLCBvYmplY3QsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FycmF5QnVmZmVyYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzQXJyYXlCdWZmZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFycmF5QnVmZmVyVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRGF0ZWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNEYXRlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAgICAgKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAgICAgKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICAgICAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAgICAgKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gICAgICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgICAgIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gICAgICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gICAgICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgICAgICBvYmpJc09iaiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgICAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNTYW1lVGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAhbGVuZ3RoO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgICAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzUmVnRXhwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNSZWdFeHAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHJlZ2V4cFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gICAgICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gICAgICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubHRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUx0KHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdFsrK2luZGV4XSA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgICAgIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgbWVyZ2VkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgICAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAgICAgKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBzYWZlR2V0KG9iamVjdCwga2V5KSxcbiAgICAgICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoaXNDb21tb24pIHtcbiAgICAgICAgdmFyIGlzQXJyID0gaXNBcnJheShzcmNWYWx1ZSksXG4gICAgICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY29weUFycmF5KG9ialZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzVHlwZWQpIHtcbiAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IChzcmNJbmRleCAmJiBpc0Z1bmN0aW9uKG9ialZhbHVlKSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU50aChhcnJheSwgbikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICAgICAgcmV0dXJuIGlzSW5kZXgobiwgbGVuZ3RoKSA/IGFycmF5W25dIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IG9yZGVycyBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcy5sZW5ndGggPyBpdGVyYXRlZXMgOiBbaWRlbnRpdHldLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHZhciBjcml0ZXJpYSA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICByZXR1cm4gaXRlcmF0ZWUodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgJ2NyaXRlcmlhJzogY3JpdGVyaWEsICdpbmRleCc6ICsraW5kZXgsICd2YWx1ZSc6IHZhbHVlIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBvdGhlciwgb3JkZXJzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAqIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGhhc0luKG9iamVjdCwgcGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aHNbaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgICAgICBiYXNlU2V0KHJlc3VsdCwgY2FzdFBhdGgocGF0aCwgb2JqZWN0KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQWxsQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICAgKiBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXhPZiA9IGNvbXBhcmF0b3IgPyBiYXNlSW5kZXhPZldpdGggOiBiYXNlSW5kZXhPZixcbiAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgc2VlbiA9IGFycmF5O1xuXG4gICAgICBpZiAoYXJyYXkgPT09IHZhbHVlcykge1xuICAgICAgICB2YWx1ZXMgPSBjb3B5QXJyYXkodmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGZyb21JbmRleCA9IDAsXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tSW5kZXggPSBpbmRleE9mKHNlZW4sIGNvbXB1dGVkLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IGFycmF5KSB7XG4gICAgICAgICAgICBzcGxpY2UuY2FsbChzZWVuLCBmcm9tSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgZnJvbUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogaW5kZXhlcyBvciBjYXB0dXJpbmcgdGhlIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgICAgIGlmIChsZW5ndGggPT0gbGFzdEluZGV4IHx8IGluZGV4ICE9PSBwcmV2aW91cykge1xuICAgICAgICAgIHZhciBwcmV2aW91cyA9IGluZGV4O1xuICAgICAgICAgIGlmIChpc0luZGV4KGluZGV4KSkge1xuICAgICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGluZGV4LCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVVuc2V0KGFycmF5LCBpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZG9tYCB3aXRob3V0IHN1cHBvcnQgZm9yIHJldHVybmluZ1xuICAgICAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb3dlciBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7XG4gICAgICByZXR1cm4gbG93ZXIgKyBuYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSAqICh1cHBlciAtIGxvd2VyICsgMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmdlYCBhbmQgYF8ucmFuZ2VSaWdodGAgd2hpY2ggZG9lc24ndFxuICAgICAqIGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICByZXN1bHRbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF0gPSBzdGFydDtcbiAgICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVwZWF0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byByZXBlYXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJlcGVhdChzdHJpbmcsIG4pIHtcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIGlmICghc3RyaW5nIHx8IG4gPCAxIHx8IG4gPiBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICAvLyBMZXZlcmFnZSB0aGUgZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcgYWxnb3JpdGhtIGZvciBhIGZhc3RlciByZXBlYXQuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXhwb25lbnRpYXRpb25fYnlfc3F1YXJpbmcgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG4gJSAyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBuID0gbmF0aXZlRmxvb3IobiAvIDIpO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKG4pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gYXJyYXlTYW1wbGUodmFsdWVzKGNvbGxlY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVTaXplYCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4pIHtcbiAgICAgIHZhciBhcnJheSA9IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZihhcnJheSwgYmFzZUNsYW1wKG4sIDAsIGFycmF5Lmxlbmd0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cbiAgICAgIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgICAgICBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9ialZhbHVlLCBrZXksIG5lc3RlZCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICAgICAgOiAoaXNJbmRleChwYXRoW2luZGV4ICsgMV0pID8gW10gOiB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzc2lnblZhbHVlKG5lc3RlZCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBiYXNlU2V0RGF0YSA9ICFtZXRhTWFwID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBkYXRhKSB7XG4gICAgICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAgICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNodWZmbGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICAgICAgc3RhcnQgPj4+PSAwO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29tZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiAhcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhgIGFuZCBgXy5zb3J0ZWRMYXN0SW5kZXhgIHdoaWNoXG4gICAgICogcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIG9mIGBhcnJheWAgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFyIGxvdyA9IDAsXG4gICAgICAgICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyBsb3cgOiBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgICAgaWYgKGNvbXB1dGVkICE9PSBudWxsICYmICFpc1N5bWJvbChjb21wdXRlZCkgJiZcbiAgICAgICAgICAgICAgKHJldEhpZ2hlc3QgPyAoY29tcHV0ZWQgPD0gdmFsdWUpIDogKGNvbXB1dGVkIDwgdmFsdWUpKSkge1xuICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhpZ2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpZGVudGl0eSwgcmV0SGlnaGVzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhCeWAgYW5kIGBfLnNvcnRlZExhc3RJbmRleEJ5YFxuICAgICAqIHdoaWNoIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZVxuICAgICAqIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUsIHJldEhpZ2hlc3QpIHtcbiAgICAgIHZhbHVlID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgdmFsSXNOYU4gPSB2YWx1ZSAhPT0gdmFsdWUsXG4gICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSksXG4gICAgICAgICAgdmFsSXNVbmRlZmluZWQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICB2YXIgbWlkID0gbmF0aXZlRmxvb3IoKGxvdyArIGhpZ2gpIC8gMiksXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLFxuICAgICAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG90aElzTnVsbCA9IGNvbXB1dGVkID09PSBudWxsLFxuICAgICAgICAgICAgb3RoSXNSZWZsZXhpdmUgPSBjb21wdXRlZCA9PT0gY29tcHV0ZWQsXG4gICAgICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKGNvbXB1dGVkKTtcblxuICAgICAgICBpZiAodmFsSXNOYU4pIHtcbiAgICAgICAgICB2YXIgc2V0TG93ID0gcmV0SGlnaGVzdCB8fCBvdGhJc1JlZmxleGl2ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmaW5lZCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIChyZXRIaWdoZXN0IHx8IG90aElzRGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNOdWxsKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc051bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmICFvdGhJc051bGwgJiYgKHJldEhpZ2hlc3QgfHwgIW90aElzU3ltYm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdGhJc051bGwgfHwgb3RoSXNTeW1ib2wpIHtcbiAgICAgICAgICBzZXRMb3cgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0TG93KSB7XG4gICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlTWluKGhpZ2gsIE1BWF9BUlJBWV9JTkRFWCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkVW5pcWAgYW5kIGBfLnNvcnRlZFVuaXFCeWAgd2l0aG91dFxuICAgICAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhZXEoY29tcHV0ZWQsIHNlZW4pKSB7XG4gICAgICAgICAgdmFyIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b051bWJlcmAgd2hpY2ggZG9lc24ndCBlbnN1cmUgY29ycmVjdFxuICAgICAqIGNvbnZlcnNpb25zIG9mIGJpbmFyeSwgaGV4YWRlY2ltYWwsIG9yIG9jdGFsIHN0cmluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICByZXR1cm4gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICAgICAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICByZXN1bHQgPSBbXSxcbiAgICAgICAgICBzZWVuID0gcmVzdWx0O1xuXG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVwZGF0ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVwZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICAgICAgcmV0dXJuIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB1cGRhdGVyKGJhc2VHZXQob2JqZWN0LCBwYXRoKSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgXG4gICAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVjaWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VXaGlsZShhcnJheSwgcHJlZGljYXRlLCBpc0Ryb3AsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSAmJlxuICAgICAgICBwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7fVxuXG4gICAgICByZXR1cm4gaXNEcm9wXG4gICAgICAgID8gYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gMCA6IGluZGV4KSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IGxlbmd0aCkpXG4gICAgICAgIDogYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogMCksIChmcm9tUmlnaHQgPyBsZW5ndGggOiBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGB3cmFwcGVyVmFsdWVgIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZlxuICAgICAqIHBlcmZvcm1pbmcgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9uIHRoZSB1bndyYXBwZWQgYHZhbHVlYCwgd2hlcmUgZWFjaFxuICAgICAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyBBY3Rpb25zIHRvIHBlcmZvcm0gdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJheVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7XG4gICAgICB9LCByZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy54b3JgLCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVVuaXEoYXJyYXlzWzBdKSA6IFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW2luZGV4XSxcbiAgICAgICAgICAgIG90aEluZGV4ID0gLTE7XG5cbiAgICAgICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAob3RoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBiYXNlRGlmZmVyZW5jZShyZXN1bHRbaW5kZXhdIHx8IGFycmF5LCBhcnJheXNbb3RoSW5kZXhdLCBpdGVyYXRlZSwgY29tcGFyYXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy56aXBPYmplY3RgIHdoaWNoIGFzc2lnbnMgdmFsdWVzIHVzaW5nIGBhc3NpZ25GdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgYXNzaWduRnVuYyhyZXN1bHQsIHByb3BzW2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGNhc3QgYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGNhc3QgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgPyB2YWx1ZSA6IGlkZW50aXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBgYmFzZVJlc3RgIGFsaWFzIHdoaWNoIGNhbiBiZSByZXBsYWNlZCB3aXRoIGBpZGVudGl0eWAgYnkgbW9kdWxlXG4gICAgICogcmVwbGFjZW1lbnQgcGx1Z2lucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgdmFyIGNhc3RSZXN0ID0gYmFzZVJlc3Q7XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0U2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIHJldHVybiAoIXN0YXJ0ICYmIGVuZCA+PSBsZW5ndGgpID8gYXJyYXkgOiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BjbGVhclRpbWVvdXRgXShodHRwczovL21kbi5pby9jbGVhclRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IGlkIFRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdCBvZiB0aGUgdGltZXIgdG8gY2xlYXIuXG4gICAgICovXG4gICAgdmFyIGNsZWFyVGltZW91dCA9IGN0eENsZWFyVGltZW91dCB8fCBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHJvb3QuY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgICAgIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHZhbHVlcyB0byBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGB2YWx1ZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gb3RoZXIpIHtcbiAgICAgICAgdmFyIHZhbElzRGVmaW5lZCA9IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgICAgIHZhbElzUmVmbGV4aXZlID0gdmFsdWUgPT09IHZhbHVlLFxuICAgICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSk7XG5cbiAgICAgICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gb3RoZXIgPT09IG90aGVyLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICAgICAgaWYgKCghb3RoSXNOdWxsICYmICFvdGhJc1N5bWJvbCAmJiAhdmFsSXNTeW1ib2wgJiYgdmFsdWUgPiBvdGhlcikgfHxcbiAgICAgICAgICAgICh2YWxJc1N5bWJvbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUgJiYgIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghdmFsSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIXZhbElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCAmJiAhb3RoSXNTeW1ib2wgJiYgdmFsdWUgPCBvdGhlcikgfHxcbiAgICAgICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAob3RoSXNOdWxsICYmIHZhbElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghb3RoSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAgICAgKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAgICAgKlxuICAgICAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gICAgICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICAgICAqIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICAgICAgbGVuZ3RoID0gb2JqQ3JpdGVyaWEubGVuZ3RoLFxuICAgICAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlQXNjZW5kaW5nKG9iakNyaXRlcmlhW2luZGV4XSwgb3RoQ3JpdGVyaWFbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChvcmRlciA9PSAnZGVzYycgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGaXhlcyBhbiBgQXJyYXkjc29ydGAgYnVnIGluIHRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgYXBwbGljYXRpb25zXG4gICAgICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAgICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAgICAgKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlZnRMZW5ndGggKyByYW5nZUxlbmd0aCksXG4gICAgICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICAgICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gICAgICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrYXJnc0luZGV4IDwgcmFuZ2VMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICAgICAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdFtvZmZzZXQgKyBob2xkZXJzW2hvbGRlcnNJbmRleF1dID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gICAgICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICAgICAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmdyb3VwQnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlBZ2dyZWdhdG9yIDogYmFzZUFnZ3JlZ2F0b3IsXG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRWFjaChlYWNoRnVuYywgZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gZWFjaEZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmxvd2VyRmlyc3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYFN0cmluZ2AgY2FzZSBtZXRob2QgdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FzZUZpcnN0KG1ldGhvZE5hbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgICB2YXIgc3RyU3ltYm9scyA9IGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdmFyIGNociA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgICAgICA6IHN0cmluZy5jaGFyQXQoMCk7XG5cbiAgICAgICAgdmFyIHRyYWlsaW5nID0gc3RyU3ltYm9sc1xuICAgICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICAgICAgOiBzdHJpbmcuc2xpY2UoMSk7XG5cbiAgICAgICAgcmV0dXJuIGNoclttZXRob2ROYW1lXSgpICsgdHJhaWxpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmNhbWVsQ2FzZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIGVhY2ggd29yZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kZXIoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICAgICAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAgICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgICAgIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICAgICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHZhciBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmxvd2Agb3IgYF8uZmxvd1JpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxvdyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGbG93KGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBmdW5jcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHByZXJlcSA9IExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7XG5cbiAgICAgICAgaWYgKGZyb21SaWdodCkge1xuICAgICAgICAgIGZ1bmNzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIHZhciBmdW5jID0gZnVuY3NbaW5kZXhdO1xuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgICAgICB2YXIgd3JhcHBlciA9IG5ldyBMb2Rhc2hXcmFwcGVyKFtdLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSB3cmFwcGVyID8gaW5kZXggOiBsZW5ndGg7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTtcblxuICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgICAgICBkYXRhID0gZnVuY05hbWUgPT0gJ3dyYXBwZXInID8gZ2V0RGF0YShmdW5jKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChkYXRhICYmIGlzTGF6aWFibGUoZGF0YVswXSkgJiZcbiAgICAgICAgICAgICAgICBkYXRhWzFdID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpICYmXG4gICAgICAgICAgICAgICAgIWRhdGFbNF0ubGVuZ3RoICYmIGRhdGFbOV0gPT0gMVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLCBkYXRhWzNdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JhcHBlciA9IChmdW5jLmxlbmd0aCA9PSAxICYmIGlzTGF6aWFibGUoZnVuYykpXG4gICAgICAgICAgICAgID8gd3JhcHBlcltmdW5jTmFtZV0oKVxuICAgICAgICAgICAgICA6IHdyYXBwZXIudGhydShmdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF07XG5cbiAgICAgICAgICBpZiAod3JhcHBlciAmJiBhcmdzLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbGVuZ3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7XG5cbiAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuY3NbaW5kZXhdLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAgICAgKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgaWYgKGFyZ1Bvcykge1xuICAgICAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uaW52ZXJ0QnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSBpdGVyYXRlZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCB0b0l0ZXJhdGVlKGl0ZXJhdGVlKSwge30pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHVzZWQgZm9yIGB1bmRlZmluZWRgIGFyZ3VtZW50cy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1hdGhPcGVyYXRpb24ob3BlcmF0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvdGhlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb1N0cmluZyhvdGhlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZVRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIG90aGVyID0gYmFzZVRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5vdmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG92ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuICAgICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgIHZhciB0aGlzQXJnID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdGhpc0FyZywgYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AgYmFzZWQgb24gYGxlbmd0aGAuIFRoZSBgY2hhcnNgIHN0cmluZ1xuICAgICAqIGlzIHRydW5jYXRlZCBpZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXhjZWVkcyBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykge1xuICAgICAgY2hhcnMgPSBjaGFycyA9PT0gdW5kZWZpbmVkID8gJyAnIDogYmFzZVRvU3RyaW5nKGNoYXJzKTtcblxuICAgICAgdmFyIGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuICAgICAgaWYgKGNoYXJzTGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gY2hhcnNMZW5ndGggPyBiYXNlUmVwZWF0KGNoYXJzLCBsZW5ndGgpIDogY2hhcnM7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVJlcGVhdChjaGFycywgbmF0aXZlQ2VpbChsZW5ndGggLyBzdHJpbmdTaXplKGNoYXJzKSkpO1xuICAgICAgcmV0dXJuIGhhc1VuaWNvZGUoY2hhcnMpXG4gICAgICAgID8gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkocmVzdWx0KSwgMCwgbGVuZ3RoKS5qb2luKCcnKVxuICAgICAgICA6IHJlc3VsdC5zbGljZSgwLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAgICAgKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnJhbmdlYCBvciBgXy5yYW5nZVJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2UoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgICBpZiAoc3RlcCAmJiB0eXBlb2Ygc3RlcCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgICAgIGVuZCA9IHN0ZXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgICAgICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHJlbGF0aW9uYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVsYXRpb25hbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihvcGVyYXRvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSkge1xuICAgICAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgIG90aGVyID0gdG9OdW1iZXIob3RoZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAgICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICAgICAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICAgICAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICAgICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICAgICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ucm91bmRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYE1hdGhgIG1ldGhvZCB0byB1c2Ugd2hlbiByb3VuZGluZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gICAgICByZXR1cm4gZnVuY3Rpb24obnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyAwIDogbmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLCAyOTIpO1xuICAgICAgICBpZiAocHJlY2lzaW9uKSB7XG4gICAgICAgICAgLy8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4gICAgICAgICAgLy8gU2VlIFtNRE5dKGh0dHBzOi8vbWRuLmlvL3JvdW5kI0V4YW1wbGVzKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgIHZhciBwYWlyID0gKHRvU3RyaW5nKG51bWJlcikgKyAnZScpLnNwbGl0KCdlJyksXG4gICAgICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7XG5cbiAgICAgICAgICBwYWlyID0gKHRvU3RyaW5nKHZhbHVlKSArICdlJykuc3BsaXQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gKyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdIC0gcHJlY2lzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gICAgICovXG4gICAgdmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhaXJzIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyhvYmplY3QpO1xuICAgICAgICBpZiAodGFnID09IG1hcFRhZykge1xuICAgICAgICAgIHJldHVybiBtYXBUb0FycmF5KG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9QYWlycyhvYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlVG9QYWlycyhvYmplY3QsIGtleXNGdW5jKG9iamVjdCkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gICAgICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICogICAgMSAtIGBfLmJpbmRgXG4gICAgICogICAgMiAtIGBfLmJpbmRLZXlgXG4gICAgICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gICAgICogICAgOCAtIGBfLmN1cnJ5YFxuICAgICAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICAgICAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICAgICAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gICAgICogIDEyOCAtIGBfLnJlYXJnYFxuICAgICAqICAyNTYgLSBgXy5hcnlgXG4gICAgICogIDUxMiAtIGBfLmZsaXBgXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgICAgIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICAgICAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICAgICAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgICAgIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICAgICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gICAgICB9XG4gICAgICBmdW5jID0gbmV3RGF0YVswXTtcbiAgICAgIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICAgICAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gICAgICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gICAgICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgICAgIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gICAgICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgICAgIH1cbiAgICAgIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICAgICAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gICAgICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gICAgICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAgICAgKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzRGVlcGAgdG8gY3VzdG9taXplIGl0cyBgXy5tZXJnZWAgdXNlIHRvIG1lcmdlIHNvdXJjZVxuICAgICAqIG9iamVjdHMgaW50byBkZXN0aW5hdGlvbiBvYmplY3RzIHRoYXQgYXJlIHBhc3NlZCB0aHJ1LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykge1xuICAgICAgaWYgKGlzT2JqZWN0KG9ialZhbHVlKSAmJiBpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgb2JqVmFsdWUpO1xuICAgICAgICBiYXNlTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCB1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICAgICAqIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgICAgIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gICAgICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgICAgIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gICAgICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICAgICAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgICAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICAgICAgY2FzZSByZWdleHBUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgICAgIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgICAgIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAgICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICAgICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAgICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICAgICAgYXJyYXkgPSByZWFsTmFtZXNbcmVzdWx0XSxcbiAgICAgICAgICBsZW5ndGggPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywgcmVzdWx0KSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IGFycmF5W2xlbmd0aF0sXG4gICAgICAgICAgICBvdGhlckZ1bmMgPSBkYXRhLmZ1bmM7XG4gICAgICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgICAgIHJldHVybiBkYXRhLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgICAgIHZhciBvYmplY3QgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaCwgJ3BsYWNlaG9sZGVyJykgPyBsb2Rhc2ggOiBmdW5jO1xuICAgICAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBcIml0ZXJhdGVlXCIgZnVuY3Rpb24uIElmIGBfLml0ZXJhdGVlYCBpcyBjdXN0b21pemVkLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VzdG9tIG1ldGhvZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYGJhc2VJdGVyYXRlZWAuXG4gICAgICogSWYgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIGNob3NlbiBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhlbSBhbmRcbiAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIHRoZSBjcmVhdGVkIGl0ZXJhdGVlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2hvc2VuIGZ1bmN0aW9uIG9yIGl0cyByZXN1bHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0ZWUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoLml0ZXJhdGVlIHx8IGl0ZXJhdGVlO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBpdGVyYXRlZSA/IGJhc2VJdGVyYXRlZSA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gcmVzdWx0KGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdKSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICAgICAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgICAgIDogZGF0YS5tYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gICAgICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICBpZiAodW5tYXNrZWQpIHtcbiAgICAgICAgaWYgKGlzT3duKSB7XG4gICAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgKi9cbiAgICB2YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgKi9cbiAgICB2YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICAgICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgdmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG4gICAgaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgICAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAgICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgICAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gICAgICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmlldywgYXBwbHlpbmcgYW55IGB0cmFuc2Zvcm1zYCB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0cmFuc2Zvcm1zIFRoZSB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIHZpZXcuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHN0YXJ0YCBhbmQgYGVuZGBcbiAgICAgKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFZpZXcoc3RhcnQsIGVuZCwgdHJhbnNmb3Jtcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZHJvcFJpZ2h0JzogZW5kIC09IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2UnOiAgICAgIGVuZCA9IG5hdGl2ZU1pbihlbmQsIHN0YXJ0ICsgc2l6ZSk7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS5zcGxpdChyZVNwbGl0RGV0YWlscykgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgICAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gICAgICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgICAgIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgICAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICAgICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICAgICAgOiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgICAgICBjYXNlIG1hcFRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc291cmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICAgICAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICAgICAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICAgICAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7XG4gICAgICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gICAgICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAgICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgICAgICkge1xuICAgICAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICAgICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHtcbiAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICAgICAgaWYgKHR5cGVvZiBvdGhlciAhPSAnZnVuY3Rpb24nIHx8ICEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZnVuYyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgZGF0YSA9IGdldERhdGEob3RoZXIpO1xuICAgICAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgICAgIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBpcyBjYXBhYmxlIG9mIGJlaW5nIG1hc2tlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrYWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIHZhciBpc01hc2thYmxlID0gY29yZUpzRGF0YSA/IGlzRnVuY3Rpb24gOiBzdHViRmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gICAgICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gICAgICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAgICAgKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAgICAgKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAgICAgKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgICAgICBjYWNoZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICAgICAqXG4gICAgICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICAgICAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAgICAgKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICAgICAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICAgICAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gICAgICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICAgICAgdmFyIGlzQ29tYm8gPVxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSkgfHxcbiAgICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgICAgIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICAgICAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07XG4gICAgICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICAgICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7XG4gICAgICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLlxuICAgICAgdmFsdWUgPSBzb3VyY2VbN107XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZGF0YVs3XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHtcbiAgICAgICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAgICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gICAgICBkYXRhWzBdID0gc291cmNlWzBdO1xuICAgICAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICAgICAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gICAgICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAgICAgKiB0aGUgZmlyc3QgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgICAgICBvbGRBcnJheSA9IGNvcHlBcnJheShhcnJheSk7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgICAgIGFycmF5W2xlbmd0aF0gPSBpc0luZGV4KGluZGV4LCBhcnJMZW5ndGgpID8gb2xkQXJyYXlbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgaG90LCBpLmUuIGlzIGludm9rZWQgYSBsb3QgaW4gYSBzaG9ydFxuICAgICAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAgICAgKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAgICAgKiBbVjggaXNzdWUgMjA3MF0oaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbiAgICAvKipcbiAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgc2V0VGltZW91dGBdKGh0dHBzOi8vbWRuLmlvL3NldFRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICB2YXIgc2V0VGltZW91dCA9IGN0eFNldFRpbWVvdXQgfHwgZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgICAgcmV0dXJuIHJvb3Quc2V0VGltZW91dChmdW5jLCB3YWl0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYHdyYXBwZXJgIHRvIG1pbWljIHRoZSBzb3VyY2Ugb2YgYHJlZmVyZW5jZWBcbiAgICAgKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0V3JhcFRvU3RyaW5nKHdyYXBwZXIsIHJlZmVyZW5jZSwgYml0bWFzaykge1xuICAgICAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICAgICAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICAgICAqIG1pbGxpc2Vjb25kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgICAgIHZhciBjb3VudCA9IDAsXG4gICAgICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zaHVmZmxlYCB3aGljaCBtdXRhdGVzIGFuZCBzZXRzIHRoZSBzaXplIG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT1hcnJheS5sZW5ndGhdIFRoZSBzaXplIG9mIGBhcnJheWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2h1ZmZsZVNlbGYoYXJyYXksIHNpemUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgICBzaXplID0gc2l6ZSA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogc2l6ZTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgc2l6ZSkge1xuICAgICAgICB2YXIgcmFuZCA9IGJhc2VSYW5kb20oaW5kZXgsIGxhc3RJbmRleCksXG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W3JhbmRdO1xuXG4gICAgICAgIGFycmF5W3JhbmRdID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGFycmF5Lmxlbmd0aCA9IHNpemU7XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICovXG4gICAgdmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJycpO1xuICAgICAgfVxuICAgICAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgICAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgICAgIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkZXRhaWxzYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gICAgICBhcnJheUVhY2god3JhcEZsYWdzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgICAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgICAgICBkZXRhaWxzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLnNvcnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgICAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTtcbiAgICAgIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgICAgIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gICAgICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBwZXIuX192YWx1ZXNfXztcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIGdyb3VwcyB0aGUgbGVuZ3RoIG9mIGBzaXplYC5cbiAgICAgKiBJZiBgYXJyYXlgIGNhbid0IGJlIHNwbGl0IGV2ZW5seSwgdGhlIGZpbmFsIGNodW5rIHdpbGwgYmUgdGhlIHJlbWFpbmluZ1xuICAgICAqIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTFdIFRoZSBsZW5ndGggb2YgZWFjaCBjaHVua1xuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY2h1bmtzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWydjJywgJ2QnXV1cbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYicsICdjJ10sIFsnZCddXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICAgICAgaWYgKChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBzaXplLCBndWFyZCkgOiBzaXplID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHNpemUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZSA9IG5hdGl2ZU1heCh0b0ludGVnZXIoc2l6ZSksIDApO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc2l6ZSA8IDEpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlQ2VpbChsZW5ndGggLyBzaXplKSk7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBiYXNlU2xpY2UoYXJyYXksIGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHdpdGggYWxsIGZhbHNleSB2YWx1ZXMgcmVtb3ZlZC4gVGhlIHZhbHVlcyBgZmFsc2VgLCBgbnVsbGAsXG4gICAgICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jb21wYWN0KFswLCAxLCBmYWxzZSwgMiwgJycsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb25jYXRlbmF0aW5nIGBhcnJheWAgd2l0aCBhbnkgYWRkaXRpb25hbCBhcnJheXNcbiAgICAgKiBhbmQvb3IgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbmNhdGVuYXRlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxXTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNvbmNhdChhcnJheSwgMiwgWzNdLCBbWzRdXSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvdGhlcik7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoIC0gMSksXG4gICAgICAgICAgYXJyYXkgPSBhcmd1bWVudHNbMF0sXG4gICAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIGFyZ3NbaW5kZXggLSAxXSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpID8gY29weUFycmF5KGFycmF5KSA6IFthcnJheV0sIGJhc2VGbGF0dGVuKGFyZ3MsIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGBhcnJheWAgdmFsdWVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgZ2l2ZW4gYXJyYXlzXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsQnlgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZUJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRpZmZlcmVuY2VCeShbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sIFt7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZUJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdCh2YWx1ZXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICAgICAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yXG4gICAgICogaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QodmFsdWVzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSkge1xuICAgICAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wKGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICBuID0gbGVuZ3RoIC0gbjtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgZWxlbWVudHMgb2YgYGFycmF5YCB3aXRoIGB2YWx1ZWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90XG4gICAgICogaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8uZmlsbChhcnJheSwgJ2EnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gICAgICpcbiAgICAgKiBfLmZpbGwoQXJyYXkoMyksIDIpO1xuICAgICAqIC8vID0+IFsyLCAyLCAyXVxuICAgICAqXG4gICAgICogXy5maWxsKFs0LCA2LCA4LCAxMF0sICcqJywgMSwgMyk7XG4gICAgICogLy8gPT4gWzQsICcqJywgJyonLCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ICYmIHR5cGVvZiBzdGFydCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgdmFsdWUsIHN0YXJ0KSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRJbmRleGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50c1xuICAgICAqIG9mIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAncGViYmxlcyc7IH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggPCAwXG4gICAgICAgICAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApXG4gICAgICAgICAgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVlcChbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCA0LCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYGFycmF5YCB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgWzIsIFszLCBbNF1dLCA1XV07XG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF0sIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlcHRoKGFycmF5LCBkZXB0aCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBgXy50b1BhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWRcbiAgICAgKiBmcm9tIGtleS12YWx1ZSBgcGFpcnNgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZyb21QYWlycyhbWydhJywgMV0sIFsnYicsIDJdXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbVBhaXJzKHBhaXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYWlycyA9PSBudWxsID8gMCA6IHBhaXJzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgIHJlc3VsdFtwYWlyWzBdXSA9IHBhaXJbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyBmaXJzdFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmhlYWQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiBfLmhlYWQoW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBJZiBgZnJvbUluZGV4YCBpcyBuZWdhdGl2ZSwgaXQncyB1c2VkIGFzIHRoZVxuICAgICAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbml0aWFsKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMCwgLTEpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIGFsbCBnaXZlbiBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb24oWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsyXVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb25CeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5pbnRlcnNlY3Rpb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKSxcbiAgICAgICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gICAgICBpZiAoaXRlcmF0ZWUgPT09IGxhc3QobWFwcGVkKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcHBlZC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXNcbiAgICAgKiBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH1dXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpLFxuICAgICAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIG1hcHBlZC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYWxsIGVsZW1lbnRzIGluIGBhcnJheWAgaW50byBhIHN0cmluZyBzZXBhcmF0ZWQgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNlcGFyYXRvci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBqb2luZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmpvaW4oWydhJywgJ2InLCAnYyddLCAnficpO1xuICAgICAqIC8vID0+ICdhfmJ+YydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gJycgOiBuYXRpdmVKb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBhcnJheWAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgaWYgKGZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKSA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICAgID8gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleClcbiAgICAgICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbGVtZW50IGF0IGluZGV4IGBuYCBvZiBgYXJyYXlgLiBJZiBgbmAgaXMgbmVnYXRpdmUsIHRoZSBudGhcbiAgICAgKiBlbGVtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjExLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICAgICAqXG4gICAgICogXy5udGgoYXJyYXksIDEpO1xuICAgICAqIC8vID0+ICdiJ1xuICAgICAqXG4gICAgICogXy5udGgoYXJyYXksIC0yKTtcbiAgICAgKiAvLyA9PiAnYyc7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoKGFycmF5LCBuKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlTnRoKGFycmF5LCB0b0ludGVnZXIobikpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGdpdmVuIHZhbHVlcyBmcm9tIGBhcnJheWAgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnJlbW92ZWBcbiAgICAgKiB0byByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSBwcmVkaWNhdGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgKlxuICAgICAqIF8ucHVsbChhcnJheSwgJ2EnLCAnYycpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICovXG4gICAgdmFyIHB1bGwgPSBiYXNlUmVzdChwdWxsQWxsKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBhcnJheSBvZiB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbChhcnJheSwgWydhJywgJ2MnXSk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYicsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlQnlgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMyB9LCB7ICd4JzogMSB9XTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbEJ5KGFycmF5LCBbeyAneCc6IDEgfSwgeyAneCc6IDMgfV0sICd4Jyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGxCeShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZVdpdGhgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDMsICd5JzogNCB9LCB7ICd4JzogNSwgJ3knOiA2IH1dO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsV2l0aChhcnJheSwgW3sgJ3gnOiAzLCAneSc6IDQgfV0sIF8uaXNFcXVhbCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiA1LCAneSc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsV2l0aChhcnJheSwgdmFsdWVzLCBjb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBlbGVtZW50cyBmcm9tIGBhcnJheWAgY29ycmVzcG9uZGluZyB0byBgaW5kZXhlc2AgYW5kIHJldHVybnMgYW5cbiAgICAgKiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5hdGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gW2luZGV4ZXNdIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTtcbiAgICAgKiB2YXIgcHVsbGVkID0gXy5wdWxsQXQoYXJyYXksIFsxLCAzXSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2MnXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cocHVsbGVkKTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnZCddXG4gICAgICovXG4gICAgdmFyIHB1bGxBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcblxuICAgICAgYmFzZVB1bGxBdChhcnJheSwgYXJyYXlNYXAoaW5kZXhlcywgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGlzSW5kZXgoaW5kZXgsIGxlbmd0aCkgPyAraW5kZXggOiBpbmRleDtcbiAgICAgIH0pLnNvcnQoY29tcGFyZUFzY2VuZGluZykpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSBgYXJyYXlgIHRoYXQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yXG4gICAgICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmZpbHRlcmAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnB1bGxgXG4gICAgICogdG8gcHVsbCBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHZhbHVlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICAgICAqIHZhciBldmVucyA9IF8ucmVtb3ZlKGFycmF5LCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTtcbiAgICAgKiAvLyA9PiBbMiwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW1vdmUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5kZXhlcyA9IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgYGFycmF5YCBzbyB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZSBzZWNvbmRcbiAgICAgKiBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgIGFuZCBpcyBiYXNlZCBvblxuICAgICAqIFtgQXJyYXkjcmV2ZXJzZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3JldmVyc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5yZXZlcnNlKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/IGFycmF5IDogbmF0aXZlUmV2ZXJzZS5jYWxsKGFycmF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2ZcbiAgICAgKiBbYEFycmF5I3NsaWNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvc2xpY2UpIHRvIGVuc3VyZSBkZW5zZSBhcnJheXMgYXJlXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCAmJiB0eXBlb2YgZW5kICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBzdGFydCwgZW5kKSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGRldGVybWluZSB0aGUgbG93ZXN0IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleChbMzAsIDUwXSwgNDApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlIHRoZWlyXG4gICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGhpZ2hlc3RcbiAgICAgKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAgICAgKiBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4KFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gNFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleChhcnJheSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZExhc3RJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICAgICAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ueDsgfSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMiksIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubGFzdEluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zIGEgYmluYXJ5XG4gICAgICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHRydWUpIC0gMTtcbiAgICAgICAgaWYgKGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCdzIGRlc2lnbmVkIGFuZCBvcHRpbWl6ZWRcbiAgICAgKiBmb3Igc29ydGVkIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZFVuaXEoWzEsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFCeWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZFVuaXFCeShbMS4xLCAxLjIsIDIuMywgMi40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMSwgMi4zXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZFVuaXFCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRhaWwoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWlsKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAxLCBsZW5ndGgpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZShhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIG4gPSBsZW5ndGggLSBuO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC4gRWxlbWVudHMgYXJlXG4gICAgICogdGFrZW4gdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGZhbHNlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLiBFbGVtZW50c1xuICAgICAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgKiB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gICAgICogd2hpY2ggdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb20gdGhlIGZpcnN0XG4gICAgICogYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaW9uQnkoWzIuMV0sIFsxLjIsIDIuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udW5pb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbVxuICAgICAqIHRoZSBmaXJzdCBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy51bmlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciB1bmlvbldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgYW4gYXJyYXksIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGluIHdoaWNoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gICAgICogaXMga2VwdC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1clxuICAgICAqIGluIHRoZSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICAgICAqIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXFCeShbMi4xLCAxLjIsIDIuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udW5pcUJ5KFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS5UaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIHVuZGVmaW5lZCwgY29tcGFyYXRvcikgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBhcnJheSBvZiBncm91cGVkXG4gICAgICogZWxlbWVudHMgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgcmVncm91cGluZyB0aGUgZWxlbWVudHMgdG8gdGhlaXIgcHJlLXppcFxuICAgICAqIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHppcHBlZCA9IF8uemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICpcbiAgICAgKiBfLnVuemlwKHppcHBlZCk7XG4gICAgICogLy8gPT4gW1snYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gMDtcbiAgICAgIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChncm91cCkpIHtcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBiYXNlVGltZXMobGVuZ3RoLCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gYXJyYXlNYXAoYXJyYXksIGJhc2VQcm9wZXJ0eShpbmRleCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHRvIHNwZWNpZnlcbiAgICAgKiBob3cgcmVncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lXG4gICAgICogIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSk7XG4gICAgICogLy8gPT4gW1sxLCAxMCwgMTAwXSwgWzIsIDIwLCAyMDBdXVxuICAgICAqXG4gICAgICogXy51bnppcFdpdGgoemlwcGVkLCBfLmFkZCk7XG4gICAgICogLy8gPT4gWzMsIDMwLCAzMDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gdW56aXAoYXJyYXkpO1xuICAgICAgaWYgKGl0ZXJhdGVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheU1hcChyZXN1bHQsIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdW5kZWZpbmVkLCBncm91cCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IGV4Y2x1ZGluZyBhbGwgZ2l2ZW4gdmFsdWVzIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLnhvclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndpdGhvdXQoWzIsIDEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKi9cbiAgICB2YXIgd2l0aG91dCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgaXMgdGhlXG4gICAgICogW3N5bW1ldHJpYyBkaWZmZXJlbmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1tZXRyaWNfZGlmZmVyZW5jZSlcbiAgICAgKiBvZiB0aGUgZ2l2ZW4gYXJyYXlzLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlclxuICAgICAqIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ud2l0aG91dFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvcihbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDNdXG4gICAgICovXG4gICAgdmFyIHhvciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnlcbiAgICAgKiB3aGljaCBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkXG4gICAgICogYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmVcbiAgICAgKiBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvckJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjIsIDMuNF1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ueG9yQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIHhvckJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy54b3JXaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIHhvcldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIHVuZGVmaW5lZCwgY29tcGFyYXRvcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMsIHRoZSBmaXJzdCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgKiBmaXJzdCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCB0aGUgc2Vjb25kIG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgICAqIHNlY29uZCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV1cbiAgICAgKi9cbiAgICB2YXIgemlwID0gYmFzZVJlc3QodW56aXApO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAgICAgKiBvbmUgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMgYW5kIG9uZSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYXNzaWduVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwT2JqZWN0YCBleGNlcHQgdGhhdCBpdCBzdXBwb3J0cyBwcm9wZXJ0eSBwYXRocy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3REZWVwKFsnYS5iWzBdLmMnLCAnYS5iWzFdLmQnXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IFt7ICdjJzogMSB9LCB7ICdkJzogMiB9XSB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGJhc2VTZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgdG8gc3BlY2lmeVxuICAgICAqIGhvdyBncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmVcbiAgICAgKiAgZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBXaXRoKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0sIGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBhICsgYiArIGM7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gWzExMSwgMjIyXVxuICAgICAqL1xuICAgIHZhciB6aXBXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBpdGVyYXRlZSA9IGxlbmd0aCA+IDEgPyBhcnJheXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGl0ZXJhdGVlID0gdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgPyAoYXJyYXlzLnBvcCgpLCBpdGVyYXRlZSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUpO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UgdGhhdCB3cmFwcyBgdmFsdWVgIHdpdGggZXhwbGljaXQgbWV0aG9kXG4gICAgICogY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuIFRoZSByZXN1bHQgb2Ygc3VjaCBzZXF1ZW5jZXMgbXVzdCBiZSB1bndyYXBwZWRcbiAgICAgKiB3aXRoIGBfI3ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjMuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiB2YXIgeW91bmdlc3QgPSBfXG4gICAgICogICAuY2hhaW4odXNlcnMpXG4gICAgICogICAuc29ydEJ5KCdhZ2UnKVxuICAgICAqICAgLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICogICAgIHJldHVybiBvLnVzZXIgKyAnIGlzICcgKyBvLmFnZTtcbiAgICAgKiAgIH0pXG4gICAgICogICAuaGVhZCgpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoYWluKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgICAgIHJlc3VsdC5fX2NoYWluX18gPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIGBpbnRlcmNlcHRvcmAgYW5kIHJldHVybnMgYHZhbHVlYC4gVGhlIGludGVyY2VwdG9yXG4gICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG9cbiAgICAgKiBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UgaW4gb3JkZXIgdG8gbW9kaWZ5IGludGVybWVkaWF0ZSByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDIsIDNdKVxuICAgICAqICAudGFwKGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICogICAgLy8gTXV0YXRlIGlucHV0IGFycmF5LlxuICAgICAqICAgIGFycmF5LnBvcCgpO1xuICAgICAqICB9KVxuICAgICAqICAucmV2ZXJzZSgpXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRhcCh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgICAgIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnRhcGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJwYXNzIHRocnVcIiB2YWx1ZXMgcmVwbGFjaW5nIGludGVybWVkaWF0ZVxuICAgICAqIHJlc3VsdHMgaW4gYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKCcgIGFiYyAgJylcbiAgICAgKiAgLmNoYWluKClcbiAgICAgKiAgLnRyaW0oKVxuICAgICAqICAudGhydShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgIHJldHVybiBbdmFsdWVdO1xuICAgICAqICB9KVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGhydSh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJldHVybiBpbnRlcmNlcHRvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5hdGAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gICAgICpcbiAgICAgKiBfKG9iamVjdCkuYXQoWydhWzBdLmIuYycsICdhWzFdJ10pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICovXG4gICAgdmFyIHdyYXBwZXJBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKHBhdGhzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoID8gcGF0aHNbMF0gOiAwLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKG9iamVjdCkgeyByZXR1cm4gYmFzZUF0KG9iamVjdCwgcGF0aHMpOyB9O1xuXG4gICAgICBpZiAobGVuZ3RoID4gMSB8fCB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCB8fFxuICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgfHwgIWlzSW5kZXgoc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgK3N0YXJ0ICsgKGxlbmd0aCA/IDEgOiAwKSk7XG4gICAgICB2YWx1ZS5fX2FjdGlvbnNfXy5wdXNoKHtcbiAgICAgICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICAgICAnYXJncyc6IFtpbnRlcmNlcHRvcl0sXG4gICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSwgdGhpcy5fX2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgICAgaWYgKGxlbmd0aCAmJiAhYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2Ugd2l0aCBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjaGFpblxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGhvdXQgZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICogXyh1c2VycykuaGVhZCgpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKlxuICAgICAqIC8vIEEgc2VxdWVuY2Ugd2l0aCBleHBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBfKHVzZXJzKVxuICAgICAqICAgLmNoYWluKClcbiAgICAgKiAgIC5oZWFkKClcbiAgICAgKiAgIC5waWNrKCd1c2VyJylcbiAgICAgKiAgIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNoYWluKCkge1xuICAgICAgcmV0dXJuIGNoYWluKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21taXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICAgICAqIHZhciB3cmFwcGVkID0gXyhhcnJheSkucHVzaCgzKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubGFzdCgpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCkge1xuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHRoaXMudmFsdWUoKSwgdGhpcy5fX2NoYWluX18pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgb24gYSB3cmFwcGVkIG9iamVjdCBmb2xsb3dpbmcgdGhlXG4gICAgICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21kbi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG5leHRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0ZXJhdG9yIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfVxuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IHRydWUsICd2YWx1ZSc6IHVuZGVmaW5lZCB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlck5leHQoKSB7XG4gICAgICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdG9BcnJheSh0aGlzLnZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgdmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLFxuICAgICAgICAgIHZhbHVlID0gZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXTtcblxuICAgICAgcmV0dXJuIHsgJ2RvbmUnOiBkb25lLCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBTeW1ib2wuaXRlcmF0b3JcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICpcbiAgICAgKiB3cmFwcGVkW1N5bWJvbC5pdGVyYXRvcl0oKSA9PT0gd3JhcHBlZDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBBcnJheS5mcm9tKHdyYXBwZWQpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJUb0l0ZXJhdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgcGxhbnRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKS5tYXAoc3F1YXJlKTtcbiAgICAgKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7XG4gICAgICpcbiAgICAgKiBvdGhlci52YWx1ZSgpO1xuICAgICAqIC8vID0+IFs5LCAxNl1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyUGxhbnQodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQsXG4gICAgICAgICAgcGFyZW50ID0gdGhpcztcblxuICAgICAgd2hpbGUgKHBhcmVudCBpbnN0YW5jZW9mIGJhc2VMb2Rhc2gpIHtcbiAgICAgICAgdmFyIGNsb25lID0gd3JhcHBlckNsb25lKHBhcmVudCk7XG4gICAgICAgIGNsb25lLl9faW5kZXhfXyA9IDA7XG4gICAgICAgIGNsb25lLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IGNsb25lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGNsb25lO1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX193cmFwcGVkX187XG4gICAgICB9XG4gICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgdGhlIHdyYXBwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXZlcnNlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8oYXJyYXkpLnJldmVyc2UoKS52YWx1ZSgpXG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclJldmVyc2UoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgdmFyIHdyYXBwZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSB7XG4gICAgICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkID0gd3JhcHBlZC5yZXZlcnNlKCk7XG4gICAgICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAgICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICAgICAgICdhcmdzJzogW3JldmVyc2VdLFxuICAgICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlZCwgdGhpcy5fX2NoYWluX18pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudGhydShyZXZlcnNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyB0b0pTT04sIHZhbHVlT2ZcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclZhbHVlKCkge1xuICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXywgdGhpcy5fX2FjdGlvbnNfXyk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gICAgICogZWFjaCBrZXkgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUga2V5IHdhcyByZXR1cm5lZCBieSBgaXRlcmF0ZWVgLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvdW50QnkoWzYuMSwgNC4yLCA2LjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uY291bnRCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiAyLCAnNSc6IDEgfVxuICAgICAqL1xuICAgIHZhciBjb3VudEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICArK3Jlc3VsdFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbGwqKiBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBbZW1wdHkgY29sbGVjdGlvbnNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VtcHR5X3NldCkgYmVjYXVzZVxuICAgICAqIFtldmVyeXRoaW5nIGlzIHRydWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhY3VvdXNfdHJ1dGgpIG9mXG4gICAgICogZWxlbWVudHMgb2YgZW1wdHkgY29sbGVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmV2ZXJ5KFt0cnVlLCAxLCBudWxsLCAneWVzJ10sIEJvb2xlYW4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYWxsIGVsZW1lbnRzXG4gICAgICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5yZWplY3RcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICAgICAqL1xuICAgIHZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlvbi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmbGF0dGVuZWQgYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYFxuICAgICAqIHRocnUgYGl0ZXJhdGVlYCBhbmQgZmxhdHRlbmluZyB0aGUgbWFwcGVkIHJlc3VsdHMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbbiwgbl07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMiwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlZXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgSU5GSU5JVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gICAgICogbWFwcGVkIHJlc3VsdHMgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTtcbiAgICAgKiAvLyA9PiBbWzEsIDFdLCBbMiwgMl1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkge1xuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiXG4gICAgICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAgICAgKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIGVhY2hcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAc2VlIF8uZm9yRWFjaFJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChbMSwgMl0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyBgMWAgdGhlbiBgMmAuXG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvckVhY2hgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGFsaWFzIGVhY2hSaWdodFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaFJpZ2h0KFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAyYCB0aGVuIGAxYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaFJpZ2h0IDogYmFzZUVhY2hSaWdodDtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBvcmRlciBvZiBncm91cGVkIHZhbHVlc1xuICAgICAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICAgICAqIHZhbHVlIG9mIGVhY2gga2V5IGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZVxuICAgICAqIGtleS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjNdIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZ3JvdXBCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICAgICAqL1xuICAgIHZhciBncm91cEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICAgICAqIGNoZWNrZWQgZm9yIGEgc3Vic3RyaW5nIG9mIGB2YWx1ZWAsIG90aGVyd2lzZVxuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAgICAgKiB0aGUgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICAgIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gICAgICBmcm9tSW5kZXggPSAoZnJvbUluZGV4ICYmICFndWFyZCkgPyB0b0ludGVnZXIoZnJvbUluZGV4KSA6IDA7XG5cbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgICAgIGZyb21JbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGggJiYgY29sbGVjdGlvbi5pbmRleE9mKHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpXG4gICAgICAgIDogKCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgZWFjaCBpbnZva2VkIG1ldGhvZC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogYXJlIHByb3ZpZGVkIHRvIGVhY2ggaW52b2tlZCBtZXRob2QuIElmIGBwYXRoYCBpcyBhIGZ1bmN0aW9uLCBpdCdzIGludm9rZWRcbiAgICAgKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAqICB0aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludm9rZU1hcChbWzUsIDEsIDddLCBbMywgMiwgMV1dLCAnc29ydCcpO1xuICAgICAqIC8vID0+IFtbMSwgNSwgN10sIFsxLCAyLCAzXV1cbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFsxMjMsIDQ1Nl0sIFN0cmluZy5wcm90b3R5cGUuc3BsaXQsICcnKTtcbiAgICAgKiAvLyA9PiBbWycxJywgJzInLCAnMyddLCBbJzQnLCAnNScsICc2J11dXG4gICAgICovXG4gICAgdmFyIGludm9rZU1hcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAgICAgKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtcbiAgICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICAgICAqICAgeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmtleUJ5KGFycmF5LCBmdW5jdGlvbihvKSB7XG4gICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksICdkaXInKTtcbiAgICAgKiAvLyA9PiB7ICdsZWZ0JzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdyaWdodCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqL1xuICAgIHZhciBrZXlCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gICAgICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICAgICAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICAgICAqIGBzYW1wbGVTaXplYCwgYHNsaWNlYCwgYHNvbWVgLCBgc29ydEJ5YCwgYHNwbGl0YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICAgICAqIC8vID0+IFsxNiwgNjRdXG4gICAgICpcbiAgICAgKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJyB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIHNvcnRcbiAgICAgKiBvcmRlcnMgb2YgdGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlc1xuICAgICAqIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yXG4gICAgICogZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBTb3J0IGJ5IGB1c2VyYCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5KGl0ZXJhdGVlcykpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdO1xuICAgICAgfVxuICAgICAgb3JkZXJzID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBvcmRlcnM7XG4gICAgICBpZiAoIWlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleSBmb3IuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydwZWJibGVzJ10sIFsnYmFybmV5JywgJ2ZyZWQnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsICdwZWJibGVzJ10sIFsnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKi9cbiAgICB2YXIgcGFydGl0aW9uID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24oKSB7IHJldHVybiBbW10sIFtdXTsgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsZWN0aW9uYCB0byBhIHZhbHVlIHdoaWNoIGlzIHRoZSBhY2N1bXVsYXRlZCByZXN1bHQgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gICAgICogaXMgbm90IGdpdmVuLCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgaXMgdXNlZCBhcyB0aGUgaW5pdGlhbFxuICAgICAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gICAgICogYW5kIGBzb3J0QnlgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICAgICAqICAgcmV0dXJuIHN1bSArIG47XG4gICAgICogfSwgMCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZWR1Y2UoeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgKiAgIHJldHVybiByZXN1bHQ7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZSA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmVkdWNlYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbWzAsIDFdLCBbMiwgM10sIFs0LCA1XV07XG4gICAgICpcbiAgICAgKiBfLnJlZHVjZVJpZ2h0KGFycmF5LCBmdW5jdGlvbihmbGF0dGVuZWQsIG90aGVyKSB7XG4gICAgICogICByZXR1cm4gZmxhdHRlbmVkLmNvbmNhdChvdGhlcik7XG4gICAgICogfSwgW10pO1xuICAgICAqIC8vID0+IFs0LCA1LCAyLCAzLCAwLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2VSaWdodCA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2hSaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYFxuICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5maWx0ZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5yZWplY3QodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZSA6IGJhc2VTYW1wbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGBuYCByYW5kb20gZWxlbWVudHMgYXQgdW5pcXVlIGtleXMgZnJvbSBgY29sbGVjdGlvbmAgdXAgdG8gdGhlXG4gICAgICogc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzMsIDFdXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCA0KTtcbiAgICAgKiAvLyA9PiBbMiwgMywgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICB9XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemUgOiBiYXNlU2FtcGxlU2l6ZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2h1ZmZsZShbMSwgMiwgMywgNF0pO1xuICAgICAqIC8vID0+IFs0LCAxLCAzLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzaXplIG9mIGBjb2xsZWN0aW9uYCBieSByZXR1cm5pbmcgaXRzIGxlbmd0aCBmb3IgYXJyYXktbGlrZVxuICAgICAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIHNpemUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8uc2l6ZSgncGViYmxlcycpO1xuICAgICAqIC8vID0+IDdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyhjb2xsZWN0aW9uKTtcbiAgICAgIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb21lKFtudWxsLCAwLCAneWVzJywgZmFsc2VdLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U29tZSA6IGJhc2VTb21lO1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICAgICAqIHBlcmZvcm1zIGEgc3RhYmxlIHNvcnQsIHRoYXQgaXMsIGl0IHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgc29ydCBvcmRlciBvZlxuICAgICAqIGVxdWFsIGVsZW1lbnRzLiBUaGUgaXRlcmF0ZWVzIGFyZSBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dXG4gICAgICpcbiAgICAgKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNF0sIFsnYmFybmV5JywgMzZdLCBbJ2ZyZWQnLCA0MF0sIFsnZnJlZCcsIDQ4XV1cbiAgICAgKi9cbiAgICB2YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAyICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdLCBpdGVyYXRlZXNbMl0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtpdGVyYXRlZXNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGJhc2VGbGF0dGVuKGl0ZXJhdGVlcywgMSksIFtdKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICAgICAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IERhdGVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICogfSwgXy5ub3coKSk7XG4gICAgICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAgICAgKi9cbiAgICB2YXIgbm93ID0gY3R4Tm93IHx8IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbiAgICB9O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmJlZm9yZWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXNcbiAgICAgKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXZlcyA9IFsncHJvZmlsZScsICdzZXR0aW5ncyddO1xuICAgICAqXG4gICAgICogdmFyIGRvbmUgPSBfLmFmdGVyKHNhdmVzLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG9uZSBzYXZpbmchJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goc2F2ZXMsIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdkb25lIHNhdmluZyEnIGFmdGVyIHRoZSB0d28gYXN5bmMgc2F2ZXMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWZ0ZXIobiwgZnVuYykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHVwIHRvIGBuYCBhcmd1bWVudHMsXG4gICAgICogaWdub3JpbmcgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgY2FwLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnOCcsICcxMCddLCBfLmFyeShwYXJzZUludCwgMSkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnkoZnVuYywgbiwgZ3VhcmQpIHtcbiAgICAgIG4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IG47XG4gICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbjtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQVJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBhdCB3aGljaCBgZnVuY2AgaXMgbm8gbG9uZ2VyIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgKiAvLyA9PiBBbGxvd3MgYWRkaW5nIHVwIHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgbmF0aXZlIGBGdW5jdGlvbiNiaW5kYCwgdGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGJpdG1hc2sgPSBXUkFQX0JJTkRfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICAgICAgYml0bWFzayB8PSBXUkFQX1BBUlRJQUxfRkxBRztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgb2JqZWN0W2tleV1gIHdpdGggYHBhcnRpYWxzYFxuICAgICAqIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBfLmJpbmRgIGJ5IGFsbG93aW5nIGJvdW5kIGZ1bmN0aW9ucyB0byByZWZlcmVuY2VcbiAgICAgKiBtZXRob2RzIHRoYXQgbWF5IGJlIHJlZGVmaW5lZCBvciBkb24ndCB5ZXQgZXhpc3QuIFNlZVxuICAgICAqIFtQZXRlciBNaWNoYXV4J3MgYXJ0aWNsZV0oaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvbGF6eS1mdW5jdGlvbi1kZWZpbml0aW9uLXBhdHRlcm4pXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kS2V5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52b2tlIHRoZSBtZXRob2Qgb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICogICAndXNlcic6ICdmcmVkJyxcbiAgICAgKiAgICdncmVldCc6IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiBvYmplY3QuZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICd5YSAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqL1xuICAgIHZhciBiaW5kS2V5ID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZEtleSkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYXJndW1lbnRzIG9mIGBmdW5jYCBhbmQgZWl0aGVyIGludm9rZXNcbiAgICAgKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gICAgICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICAgICAqIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWQgaWYgYGZ1bmMubGVuZ3RoYFxuICAgICAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEpKDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyKSgzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jdXJyeWAgZXhjZXB0IHRoYXQgYXJndW1lbnRzIGFyZSBhcHBsaWVkIHRvIGBmdW5jYFxuICAgICAqIGluIHRoZSBtYW5uZXIgb2YgYF8ucGFydGlhbFJpZ2h0YCBpbnN0ZWFkIG9mIGBfLnBhcnRpYWxgLlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5UmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnlSaWdodChhYmMpO1xuICAgICAqXG4gICAgICogY3VycmllZCgzKSgyKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMiwgMykoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIsIDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiBjdXJyaWVkKDMpKDEsIF8pKDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeVJpZ2h0LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAgICAgKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAgICAgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gICAgICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gICAgICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gICAgICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICAgICAqIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICAgICAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gICAgICogICAnbGVhZGluZyc6IHRydWUsXG4gICAgICogICAndHJhaWxpbmcnOiBmYWxzZVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gICAgICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gICAgICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICAgICAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAgICAgKlxuICAgICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxhc3RBcmdzLFxuICAgICAgICAgIGxhc3RUaGlzLFxuICAgICAgICAgIG1heFdhaXQsXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHRpbWVySWQsXG4gICAgICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgICAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgICAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAgICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICAgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgICAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICAgICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgICAgICByZXR1cm4gbWF4aW5nXG4gICAgICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuICAgICAgICAgIDogdGltZVdhaXRpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICAgICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgICAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAgICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICAgICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgICAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICAgICAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gICAgICByZXR1cm4gZGVib3VuY2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWZlci5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAnZGVmZXJyZWQnKTtcbiAgICAgKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWZlciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIGBmdW5jYCBhZnRlciBgd2FpdGAgbWlsbGlzZWNvbmRzLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWxheShmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAxMDAwLCAnbGF0ZXInKTtcbiAgICAgKiAvLyA9PiBMb2dzICdsYXRlcicgYWZ0ZXIgb25lIHNlY29uZC5cbiAgICAgKi9cbiAgICB2YXIgZGVsYXkgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIHRvTnVtYmVyKHdhaXQpIHx8IDAsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxpcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZsaXBwZWQgPSBfLmZsaXAoZnVuY3Rpb24oKSB7XG4gICAgICogICByZXR1cm4gXy50b0FycmF5KGFyZ3VtZW50cyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBmbGlwcGVkKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGlwKGZ1bmMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICAgICAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICAgICAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICAgICAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gICAgICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAgICAgKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICAgICAqXG4gICAgICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB2YWx1ZXMob3RoZXIpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqXG4gICAgICogb2JqZWN0LmEgPSAyO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gICAgICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKlxuICAgICAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgYE1hcENhY2hlYC5cbiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBgZnVuY2AuIFRoZVxuICAgICAqIGBmdW5jYCBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbmVnYXRlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKFsxLCAyLCAzLCA0LCA1LCA2XSwgXy5uZWdhdGUoaXNFdmVuKSk7XG4gICAgICogLy8gPT4gWzEsIDMsIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpcyByZXN0cmljdGVkIHRvIGludm9raW5nIGBmdW5jYCBvbmNlLiBSZXBlYXQgY2FsbHNcbiAgICAgKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBpbml0aWFsaXplID0gXy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIC8vID0+IGBjcmVhdGVBcHBsaWNhdGlvbmAgaXMgaW52b2tlZCBvbmNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gb25jZShmdW5jKSB7XG4gICAgICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1zPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGFyZ3VtZW50IHRyYW5zZm9ybXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGRvdWJsZWQobikge1xuICAgICAqICAgcmV0dXJuIG4gKiAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJBcmdzKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICogfSwgW3NxdWFyZSwgZG91YmxlZF0pO1xuICAgICAqXG4gICAgICogZnVuYyg5LCAzKTtcbiAgICAgKiAvLyA9PiBbODEsIDZdXG4gICAgICpcbiAgICAgKiBmdW5jKDEwLCA1KTtcbiAgICAgKiAvLyA9PiBbMTAwLCAxMF1cbiAgICAgKi9cbiAgICB2YXIgb3ZlckFyZ3MgPSBjYXN0UmVzdChmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gKHRyYW5zZm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSlcbiAgICAgICAgPyBhcnJheU1hcCh0cmFuc2Zvcm1zWzBdLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpXG4gICAgICAgIDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciBmdW5jc0xlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oYXJncy5sZW5ndGgsIGZ1bmNzTGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gdHJhbnNmb3Jtc1tpbmRleF0uY2FsbCh0aGlzLCBhcmdzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICAgICAqIGFyZ3VtZW50cyBpdCByZWNlaXZlcy4gVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5iaW5kYCBleGNlcHQgaXQgZG9lcyAqKm5vdCoqXG4gICAgICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWwucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIHBhcnRpYWxseVxuICAgICAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMi4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWwoZ3JlZXQsIF8sICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnBhcnRpYWxgIGV4Y2VwdCB0aGF0IHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50c1xuICAgICAqIGFyZSBhcHBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWxSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2hlbGxvJywgXyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsUmlnaHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgYXJyYW5nZWQgYWNjb3JkaW5nXG4gICAgICogdG8gdGhlIHNwZWNpZmllZCBgaW5kZXhlc2Agd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2UgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9LCBbMiwgMCwgMV0pO1xuICAgICAqXG4gICAgICogcmVhcmdlZCgnYicsICdjJywgJ2EnKVxuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIHZhciByZWFyZyA9IGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsIGluZGV4ZXMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5kZXhlcyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uIGFuZCBhcmd1bWVudHMgZnJvbSBgc3RhcnRgIGFuZCBiZXlvbmQgcHJvdmlkZWQgYXNcbiAgICAgKiBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAgICAgKiBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vbWRuLmlvL3Jlc3RfcGFyYW1ldGVycykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8ucmVzdChmdW5jdGlvbih3aGF0LCBuYW1lcykge1xuICAgICAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jLCBzdGFydCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlIGZ1bmN0aW9uIGFuZCBhbiBhcnJheSBvZiBhcmd1bWVudHMgbXVjaCBsaWtlXG4gICAgICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNwcmVhZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8uc3ByZWFkKGZ1bmN0aW9uKHdobywgd2hhdCkge1xuICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQgc2F5cyBoZWxsbydcbiAgICAgKlxuICAgICAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDQwKSxcbiAgICAgKiAgIFByb21pc2UucmVzb2x2ZSgzNilcbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIG51bWJlcnMudGhlbihfLnNwcmVhZChmdW5jdGlvbih4LCB5KSB7XG4gICAgICogICByZXR1cm4geCArIHk7XG4gICAgICogfSkpO1xuICAgICAqIC8vID0+IGEgUHJvbWlzZSBvZiA3NlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNwcmVhZChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IG5hdGl2ZU1heCh0b0ludGVnZXIoc3RhcnQpLCAwKTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFyZ3Nbc3RhcnRdLFxuICAgICAgICAgICAgb3RoZXJBcmdzID0gY2FzdFNsaWNlKGFyZ3MsIDAsIHN0YXJ0KTtcblxuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBhcnJheVB1c2gob3RoZXJBcmdzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gICAgICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAgICAgKiBtZXRob2QgdG8gY2FuY2VsIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvXG4gICAgICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICAgICAqIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGVcbiAgICAgKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gICAgICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqXG4gICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gICAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgICAqXG4gICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy50aHJvdHRsZWAgYW5kIGBfLmRlYm91bmNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAqXG4gICAgICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gICAgICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCB0aHJvdHRsZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCB0aHJvdHRsZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVhZGluZyA9IHRydWUsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHtcbiAgICAgICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgICAgICd0cmFpbGluZyc6IHRyYWlsaW5nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHVwIHRvIG9uZSBhcmd1bWVudCwgaWdub3JpbmcgYW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8udW5hcnkocGFyc2VJbnQpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5hcnkoZnVuYykge1xuICAgICAgcmV0dXJuIGFyeShmdW5jLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBgdmFsdWVgIHRvIGB3cmFwcGVyYCBhcyBpdHMgZmlyc3RcbiAgICAgKiBhcmd1bWVudC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbiBhcmUgYXBwZW5kZWRcbiAgICAgKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFt3cmFwcGVyPWlkZW50aXR5XSBUaGUgd3JhcHBlciBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAgICAgKiAgIHJldHVybiAnPHA+JyArIGZ1bmModGV4dCkgKyAnPC9wPic7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBwKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICc8cD5mcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXM8L3A+J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXAodmFsdWUsIHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsKGNhc3RGdW5jdGlvbih3cmFwcGVyKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoMSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbbnVsbF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gW3VuZGVmaW5lZF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKiBjb25zb2xlLmxvZyhfLmNhc3RBcnJheShhcnJheSkgPT09IGFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5KCkge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjbG9uZSBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwczovL21kbi5pby9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobSlcbiAgICAgKiBhbmQgc3VwcG9ydHMgY2xvbmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLCBkYXRlIG9iamVjdHMsIG1hcHMsXG4gICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gICAgICogYXJyYXlzLiBUaGUgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgYXJndW1lbnRzYCBvYmplY3RzIGFyZSBjbG9uZWRcbiAgICAgKiBhcyBwbGFpbiBvYmplY3RzLiBBbiBlbXB0eSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHVuY2xvbmVhYmxlIHZhbHVlcyBzdWNoXG4gICAgICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKHNoYWxsb3dbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAgICAgKiBjbG9uaW5nIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHVwIHRvIGZvdXIgYXJndW1lbnRzOyAodmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lV2l0aGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZVdpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVEZWVwV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGNvbnNvbGUubG9nKGVsLm5vZGVOYW1lKTtcbiAgICAgKiAvLyA9PiAnQk9EWSdcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURlZXBXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgb2JqZWN0YCBjb25mb3JtcyB0byBgc291cmNlYCBieSBpbnZva2luZyB0aGUgcHJlZGljYXRlXG4gICAgICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLmNvbmZvcm1zYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uY29uZm9ybXNUbyhvYmplY3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMjsgfSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2UgPT0gbnVsbCB8fCBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKE5hTiwgTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmx0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3QoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5ndCgxLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBndCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUd0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheUJ1ZmZlcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheUJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheUJ1ZmZlciA9IG5vZGVJc0FycmF5QnVmZmVyID8gYmFzZVVuYXJ5KG5vZGVJc0FycmF5QnVmZmVyKSA6IGJhc2VJc0FycmF5QnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICAgICAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAgICAgKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gICAgICogaXMgYW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJvb2xlYW4sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4oZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCb29sZWFuKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUobmV3IERhdGUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgRE9NIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgRE9NIGVsZW1lbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoJzxib2R5PicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAgICAgKlxuICAgICAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICAgICAqIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAgICAgKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gICAgICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkodHJ1ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gICAgICB9XG4gICAgICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICAgICAqIGVxdWl2YWxlbnQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gICAgICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICAgICAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gICAgICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gICAgICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogb2JqZWN0ID09PSBvdGhlcjtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xuICAgICAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnaGVsbG8nLCAnZ29vZGJ5ZSddO1xuICAgICAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xuICAgICAqXG4gICAgICogXy5pc0VxdWFsV2l0aChhcnJheSwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgb3RoZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAgICAgKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IoRXJyb3IpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBwcmltaXRpdmUgbnVtYmVyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNGaW5pdGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbihfKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gICAgICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT0gdG9JbnRlZ2VyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gICAgICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICAgICAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3Qoe30pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gICAgICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiBgb2JqZWN0YCBhbmQgYHNvdXJjZWAgdG9cbiAgICAgKiBkZXRlcm1pbmUgaWYgYG9iamVjdGAgY29udGFpbnMgZXF1aXZhbGVudCBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5tYXRjaGVzYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdCBgc291cmNlYFxuICAgICAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gICAgICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc01hdGNoYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICAgICAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICAgICAqIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwgaW5kZXh8a2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdncmVldGluZyc6ICdoZWxsbycgfTtcbiAgICAgKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAgICAgKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4oTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAgICAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAgICAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcmlzdGluZSBuYXRpdmUgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgY2FuJ3QgcmVsaWFibHkgZGV0ZWN0IG5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhlIHByZXNlbmNlXG4gICAgICogb2YgdGhlIGNvcmUtanMgcGFja2FnZSBiZWNhdXNlIGNvcmUtanMgY2lyY3VtdmVudHMgdGhpcyBraW5kIG9mIGRldGVjdGlvbi5cbiAgICAgKiBEZXNwaXRlIG11bHRpcGxlIHJlcXVlc3RzLCB0aGUgY29yZS1qcyBtYWludGFpbmVyIGhhcyBtYWRlIGl0IGNsZWFyOiBhbnlcbiAgICAgKiBhdHRlbXB0IHRvIGZpeCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgb2JzdHJ1Y3RlZC4gQXMgYSByZXN1bHQsIHdlJ3JlIGxlZnRcbiAgICAgKiB3aXRoIGxpdHRsZSBjaG9pY2UgYnV0IHRvIHRocm93IGFuIGVycm9yLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsc28gYWZmZWN0c1xuICAgICAqIHBhY2thZ2VzLCBsaWtlIFtiYWJlbC1wb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmFiZWwtcG9seWZpbGwpLFxuICAgICAqIHdoaWNoIHJlbHkgb24gY29yZS1qcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShfKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAoaXNNYXNrYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPUkVfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBudWxsYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbCh2b2lkIDApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbCh2b2lkIDApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICAgICAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gICAgICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuOC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICAgICAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgvYWJjLyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgnL2FiYy8nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1JlZ0V4cCA9IG5vZGVJc1JlZ0V4cCA/IGJhc2VVbmFyeShub2RlSXNSZWdFeHApIDogYmFzZUlzUmVnRXhwO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBzYWZlIGludGVnZXIuIEFuIGludGVnZXIgaXMgc2FmZSBpZiBpdCdzIGFuIElFRUUtNzU0XG4gICAgICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IC1NQVhfU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gd2Vha01hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgV2Vha1NldCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtTZXQobmV3IFNldCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtTZXQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHdlYWtTZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5ndFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0KDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDw9IG90aGVyO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqXG4gICAgICogXy50b0FycmF5KDEpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkobnVsbCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMi4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoMy4yKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gNWUtMzI0XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICAgICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcigzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBsZW5ndGggb2YgYW5cbiAgICAgKiBhcnJheS1saWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDQyOTQ5NjcyOTVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIDAsIE1BWF9BUlJBWV9MRU5HVEgpIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b051bWJlcigzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gICAgICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICAgICAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgICAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gICAgICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVgIHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzYWZlIGludGVnZXIuIEEgc2FmZSBpbnRlZ2VyIGNhbiBiZSBjb21wYXJlZCBhbmRcbiAgICAgKiByZXByZXNlbnRlZCBjb3JyZWN0bHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcigzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDkwMDcxOTkyNTQ3NDA5OTFcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcignMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICA/IGJhc2VDbGFtcCh0b0ludGVnZXIodmFsdWUpLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUilcbiAgICAgICAgOiAodmFsdWUgPT09IDAgPyB2YWx1ZSA6IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gICAgICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1N0cmluZyhudWxsKTtcbiAgICAgKiAvLyA9PiAnJ1xuICAgICAqXG4gICAgICogXy50b1N0cmluZygtMCk7XG4gICAgICogLy8gPT4gJy0wJ1xuICAgICAqXG4gICAgICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICAgICAqIC8vID0+ICcxLDIsMydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAgICAgKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAgICAgKiBTdWJzZXF1ZW50IHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgT2JqZWN0LmFzc2lnbmBdKGh0dHBzOi8vbWRuLmlvL09iamVjdC9hc3NpZ24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduSW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBCYXIoKSB7XG4gICAgICogICB0aGlzLmMgPSAzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gICAgICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgaWYgKGlzUHJvdG90eXBlKHNvdXJjZSkgfHwgaXNBcnJheUxpa2Uoc291cmNlKSkge1xuICAgICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIG93biBhbmRcbiAgICAgKiBpbmhlcml0ZWQgc291cmNlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBleHRlbmRcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICAgICAqXG4gICAgICogXy5hc3NpZ25Jbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMsICdkJzogNCB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbkluID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICAgICAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbkluV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGBwYXRoc2Agb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfSwgNF0gfTtcbiAgICAgKlxuICAgICAqIF8uYXQob2JqZWN0LCBbJ2FbMF0uYi5jJywgJ2FbMV0nXSk7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICovXG4gICAgdmFyIGF0ID0gZmxhdFJlc3QoYmFzZUF0KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgYHByb3RvdHlwZWAgb2JqZWN0LiBJZiBhXG4gICAgICogYHByb3BlcnRpZXNgIG9iamVjdCBpcyBnaXZlbiwgaXRzIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzXG4gICAgICogYXJlIGFzc2lnbmVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc10gVGhlIHByb3BlcnRpZXMgdG8gYXNzaWduIHRvIHRoZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gU2hhcGUoKSB7XG4gICAgICogICB0aGlzLnggPSAwO1xuICAgICAqICAgdGhpcy55ID0gMDtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBDaXJjbGUoKSB7XG4gICAgICogICBTaGFwZS5jYWxsKHRoaXMpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIENpcmNsZS5wcm90b3R5cGUgPSBfLmNyZWF0ZShTaGFwZS5wcm90b3R5cGUsIHtcbiAgICAgKiAgICdjb25zdHJ1Y3Rvcic6IENpcmNsZVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogdmFyIGNpcmNsZSA9IG5ldyBDaXJjbGU7XG4gICAgICogY2lyY2xlIGluc3RhbmNlb2YgQ2lyY2xlO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIFNoYXBlO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXMgPT0gbnVsbCA/IHJlc3VsdCA6IGJhc2VBc3NpZ24ocmVzdWx0LCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXG4gICAgICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gICAgICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqIE9uY2UgYSBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICAgICAgdmFyIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgICB2YXIgcHJvcHMgPSBrZXlzSW4oc291cmNlKTtcbiAgICAgICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICAgICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK3Byb3BzSW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGVmYXVsdHNgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGFzc2lnbnNcbiAgICAgKiBkZWZhdWx0IHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmRlZmF1bHRzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHNEZWVwKHsgJ2EnOiB7ICdiJzogMiB9IH0sIHsgJ2EnOiB7ICdiJzogMSwgJ2MnOiAzIH0gfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2InOiAyLCAnYyc6IDMgfSB9XG4gICAgICovXG4gICAgdmFyIGRlZmF1bHRzRGVlcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGFyZ3MucHVzaCh1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UpO1xuICAgICAgcmV0dXJuIGFwcGx5KG1lcmdlV2l0aCwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUga2V5IG9mIHRoZSBmaXJzdFxuICAgICAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnQsXG4gICAgICogIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICAnZnJlZCc6ICAgIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gJ2Jhcm5leSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBiYXNlRm9yT3duKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRLZXlgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBhIGNvbGxlY3Rpb24gaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnQsXG4gICAgICogIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICAnZnJlZCc6ICAgIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gICAgICogLy8gPT4gcmV0dXJucyAncGViYmxlcycgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZExhc3RLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGJhc2VGb3JPd25SaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuXG4gICAgICogb2JqZWN0IGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAgICAgKiBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvckluUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9ySW4obmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdhJywgJ2InLCB0aGVuICdjJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JJbihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGxcbiAgICAgICAgPyBvYmplY3RcbiAgICAgICAgOiBiYXNlRm9yKG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpLCBrZXlzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvckluXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvckluUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdjJywgJ2InLCB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JJbmAgbG9ncyAnYScsICdiJywgdGhlbiAnYycuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ySW5SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGxcbiAgICAgICAgPyBvYmplY3RcbiAgICAgICAgOiBiYXNlRm9yUmlnaHQob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gICAgICogaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvblxuICAgICAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JPd25SaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JPd24obmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdhJyB0aGVuICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yT3duKG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvck93bmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9yT3duXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvck93blJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYicgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9yT3duYCBsb2dzICdhJyB0aGVuICdiJy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICAgKiBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqIEBzZWUgXy5mdW5jdGlvbnNJblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gICAgICogICB0aGlzLmIgPSBfLmNvbnN0YW50KCdiJyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gXy5jb25zdGFudCgnYycpO1xuICAgICAqXG4gICAgICogXy5mdW5jdGlvbnMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIG93biBhbmQgaW5oZXJpdGVkXG4gICAgICogZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICogQHNlZSBfLmZ1bmN0aW9uc1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gICAgICogICB0aGlzLmIgPSBfLmNvbnN0YW50KCdiJyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gXy5jb25zdGFudCgnYycpO1xuICAgICAqXG4gICAgICogXy5mdW5jdGlvbnNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmdW5jdGlvbnNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICAgICAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogMiB9IH07XG4gICAgICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzKG9iamVjdCwgJ2EuYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzKG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob3RoZXIsICdhJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXMob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgaW52ZXJ0ZWQga2V5cyBhbmQgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqIElmIGBvYmplY3RgIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXMsIHN1YnNlcXVlbnQgdmFsdWVzIG92ZXJ3cml0ZVxuICAgICAqIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMSc6ICdjJywgJzInOiAnYicgfVxuICAgICAqL1xuICAgIHZhciBpbnZlcnQgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0W3ZhbHVlXSA9IGtleTtcbiAgICB9LCBjb25zdGFudChpZGVudGl0eSkpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnZlcnRgIGV4Y2VwdCB0aGF0IHRoZSBpbnZlcnRlZCBvYmplY3QgaXMgZ2VuZXJhdGVkXG4gICAgICogZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggZWxlbWVudCBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgaW52ZXJ0ZWQgdmFsdWUgb2YgZWFjaCBpbnZlcnRlZCBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5c1xuICAgICAqIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBpbnZlcnRlZCB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmludmVydEJ5KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICAgICAqXG4gICAgICogXy5pbnZlcnRCeShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gJ2dyb3VwJyArIHZhbHVlO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2dyb3VwMSc6IFsnYScsICdjJ10sICdncm91cDInOiBbJ2InXSB9XG4gICAgICovXG4gICAgdmFyIGludmVydEJ5ID0gY3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFt2YWx1ZV0ucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W3ZhbHVlXSA9IFtrZXldO1xuICAgICAgfVxuICAgIH0sIGdldEl0ZXJhdGVlKTtcblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiBbMSwgMiwgMywgNF0gfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5pbnZva2Uob2JqZWN0LCAnYVswXS5iLmMuc2xpY2UnLCAxLCAzKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlID0gYmFzZVJlc3QoYmFzZUludm9rZSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gICAgICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmtleXMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogXy5rZXlzKCdoaScpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5c0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tYXBWYWx1ZXNgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAqIHNhbWUgdmFsdWVzIGFzIGBvYmplY3RgIGFuZCBrZXlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGVcbiAgICAgKiBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBzZWUgXy5tYXBWYWx1ZXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXBLZXlzKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgcmV0dXJuIGtleSArIHZhbHVlO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2ExJzogMSwgJ2IyJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwS2V5cyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTtcblxuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXG4gICAgICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XG4gICAgICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cbiAgICAgKiBAc2VlIF8ubWFwS2V5c1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSB7XG4gICAgICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XG4gICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gICAgICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcbiAgICAgKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAgICAgKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAgICAgKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxuICAgICAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICAgICAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHtcbiAgICAgKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBvdGhlciA9IHtcbiAgICAgKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxuICAgICAqL1xuICAgIHZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICAgICAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1lcmdlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZVxuICAgICAqIHByb3BlcnRpZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBtZXJnaW5nIGlzIGhhbmRsZWQgYnkgdGhlXG4gICAgICogbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHNpeCBhcmd1bWVudHM6XG4gICAgICogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gb2JqVmFsdWUuY29uY2F0KHNyY1ZhbHVlKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFsxXSwgJ2InOiBbMl0gfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdhJzogWzNdLCAnYic6IFs0XSB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZVdpdGgob2JqZWN0LCBvdGhlciwgY3VzdG9taXplcik7XG4gICAgICogLy8gPT4geyAnYSc6IFsxLCAzXSwgJ2InOiBbMiwgNF0gfVxuICAgICAqL1xuICAgIHZhciBtZXJnZVdpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAgICAgKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAgICAgKiAvLyA9PiB7ICdiJzogJzInIH1cbiAgICAgKi9cbiAgICB2YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICAgICAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH0pO1xuICAgICAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrQnlgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZlxuICAgICAqIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXRcbiAgICAgKiBgcHJlZGljYXRlYCBkb2Vzbid0IHJldHVybiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d29cbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5vbWl0Qnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAgICAgKiAvLyA9PiB7ICdiJzogJzInIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbWl0Qnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBwaWNrQnkob2JqZWN0LCBuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICB2YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHt9IDogYmFzZVBpY2sob2JqZWN0LCBwYXRocyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zXG4gICAgICogdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLnBpY2tCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBpY2tCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wcyA9IGFycmF5TWFwKGdldEFsbEtleXNJbihvYmplY3QpLCBmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHJldHVybiBbcHJvcF07XG4gICAgICB9KTtcbiAgICAgIHByZWRpY2F0ZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSk7XG4gICAgICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHByb3BzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgICAgICByZXR1cm4gcHJlZGljYXRlKHZhbHVlLCBwYXRoWzBdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZ2V0YCBleGNlcHQgdGhhdCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYVxuICAgICAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gcmVzb2x2ZS5cbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MxJzogMywgJ2MyJzogXy5jb25zdGFudCg0KSB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBsb29wIGlzIGVudGVyZWQgd2hlbiBwYXRoIGlzIGVtcHR5LlxuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgICAgb2JqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3RbdG9LZXkocGF0aFtpbmRleF0pXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIGEgcG9ydGlvbiBvZiBgcGF0aGAgZG9lc24ndCBleGlzdCxcbiAgICAgKiBpdCdzIGNyZWF0ZWQuIEFycmF5cyBhcmUgY3JlYXRlZCBmb3IgbWlzc2luZyBpbmRleCBwcm9wZXJ0aWVzIHdoaWxlIG9iamVjdHNcbiAgICAgKiBhcmUgY3JlYXRlZCBmb3IgYWxsIG90aGVyIG1pc3NpbmcgcHJvcGVydGllcy4gVXNlIGBfLnNldFdpdGhgIHRvIGN1c3RvbWl6ZVxuICAgICAqIGBwYXRoYCBjcmVhdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgJ2FbMF0uYi5jJywgNCk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnNldChvYmplY3QsIFsneCcsICcwJywgJ3knLCAneiddLCA1KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHt9O1xuICAgICAqXG4gICAgICogXy5zZXRXaXRoKG9iamVjdCwgJ1swXVsxXScsICdhJywgT2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRXaXRoKG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgXG4gICAgICogd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwIG9yIHNldCwgaXRzXG4gICAgICogZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZW50cmllc1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnRvUGFpcnMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXV0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICB2YXIgdG9QYWlycyA9IGNyZWF0ZVRvUGFpcnMoa2V5cyk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkLXZhbHVlIHBhaXJzXG4gICAgICogZm9yIGBvYmplY3RgIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcFxuICAgICAqIG9yIHNldCwgaXRzIGVudHJpZXMgYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGVudHJpZXNJblxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnRvUGFpcnNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMV0sIFsnYicsIDJdLCBbJ2MnLCAzXV0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICB2YXIgdG9QYWlyc0luID0gY3JlYXRlVG9QYWlycyhrZXlzSW4pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICAgICAqIGBhY2N1bXVsYXRvcmAgb2JqZWN0IHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBlYWNoIG9mIGl0cyBvd25cbiAgICAgKiBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIHRocnUgYGl0ZXJhdGVlYCwgd2l0aCBlYWNoIGludm9jYXRpb25cbiAgICAgKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gICAgICogcHJvdmlkZWQsIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIGBbW1Byb3RvdHlwZV1dYCB3aWxsIGJlIHVzZWQuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czogKGFjY3VtdWxhdG9yLCB2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgY3VzdG9tIGFjY3VtdWxhdG9yIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAgICAgKiAgIHJlc3VsdC5wdXNoKG4gKj0gbik7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDldXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICAgICAqIH0sIHt9KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtKG9iamVjdCwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICAgICAgaXNBcnJMaWtlID0gaXNBcnIgfHwgaXNCdWZmZXIob2JqZWN0KSB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KTtcblxuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgNCk7XG4gICAgICBpZiAoYWNjdW11bGF0b3IgPT0gbnVsbCkge1xuICAgICAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgICAgIGlmIChpc0Fyckxpa2UpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzQXJyID8gbmV3IEN0b3IgOiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0Z1bmN0aW9uKEN0b3IpID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSkgOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAoaXNBcnJMaWtlID8gYXJyYXlFYWNoIDogYmFzZUZvck93bikob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHByb3BlcnR5IGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDcgfSB9XSB9O1xuICAgICAqIF8udW5zZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnVuc2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnNldChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHRydWUgOiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgYWNjZXB0cyBgdXBkYXRlcmAgdG8gcHJvZHVjZSB0aGVcbiAgICAgKiB2YWx1ZSB0byBzZXQuIFVzZSBgXy51cGRhdGVXaXRoYCB0byBjdXN0b21pemUgYHBhdGhgIGNyZWF0aW9uLiBUaGUgYHVwZGF0ZXJgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnVwZGF0ZShvYmplY3QsICdhWzBdLmIuYycsIGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gKiBuOyB9KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKlxuICAgICAqIF8udXBkYXRlKG9iamVjdCwgJ3hbMF0ueS56JywgZnVuY3Rpb24obikgeyByZXR1cm4gbiA/IG4gKyAxIDogMDsgfSk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlcikge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIGNhc3RGdW5jdGlvbih1cGRhdGVyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51cGRhdGVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBvYmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgXG4gICAgICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICpcbiAgICAgKiBfLnVwZGF0ZVdpdGgob2JqZWN0LCAnWzBdWzFdJywgXy5jb25zdGFudCgnYScpLCBPYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVdpdGgob2JqZWN0LCBwYXRoLCB1cGRhdGVyLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiBfLnZhbHVlcygnaGknKTtcbiAgICAgKiAvLyA9PiBbJ2gnLCAnaSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eVxuICAgICAqIHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udmFsdWVzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gdmFsdWVzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzSW4ob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ2xhbXBzIGBudW1iZXJgIHdpdGhpbiB0aGUgaW5jbHVzaXZlIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjbGFtcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjbGFtcGVkIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jbGFtcCgtMTAsIC01LCA1KTtcbiAgICAgKiAvLyA9PiAtNVxuICAgICAqXG4gICAgICogXy5jbGFtcCgxMCwgLTUsIDUpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXBwZXIgPSBsb3dlcjtcbiAgICAgICAgbG93ZXIgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cHBlciA9IHRvTnVtYmVyKHVwcGVyKTtcbiAgICAgICAgdXBwZXIgPSB1cHBlciA9PT0gdXBwZXIgPyB1cHBlciA6IDA7XG4gICAgICB9XG4gICAgICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb3dlciA9IHRvTnVtYmVyKGxvd2VyKTtcbiAgICAgICAgbG93ZXIgPSBsb3dlciA9PT0gbG93ZXIgPyBsb3dlciA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUNsYW1wKHRvTnVtYmVyKG51bWJlciksIGxvd2VyLCB1cHBlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBuYCBpcyBiZXR3ZWVuIGBzdGFydGAgYW5kIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIElmXG4gICAgICogYGVuZGAgaXMgbm90IHNwZWNpZmllZCwgaXQncyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICAgICAqIElmIGBzdGFydGAgaXMgZ3JlYXRlciB0aGFuIGBlbmRgIHRoZSBwYXJhbXMgYXJlIHN3YXBwZWQgdG8gc3VwcG9ydFxuICAgICAqIG5lZ2F0aXZlIHJhbmdlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjMuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBudW1iZXJgIGlzIGluIHRoZSByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5yYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgzLCAyLCA0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgOCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDQsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoMiwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgxLjIsIDIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg1LjIsIDQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoLTMsIC0yLCAtNik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluUmFuZ2UobnVtYmVyLCBzdGFydCwgZW5kKSB7XG4gICAgICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICAgIH1cbiAgICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgICByZXR1cm4gYmFzZUluUmFuZ2UobnVtYmVyLCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9kdWNlcyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiB0aGUgaW5jbHVzaXZlIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLlxuICAgICAqIElmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGEgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCB0aGUgZ2l2ZW4gbnVtYmVyXG4gICAgICogaXMgcmV0dXJuZWQuIElmIGBmbG9hdGluZ2AgaXMgYHRydWVgLCBvciBlaXRoZXIgYGxvd2VyYCBvciBgdXBwZXJgIGFyZVxuICAgICAqIGZsb2F0cywgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICAgICAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aGljaCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcj0wXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt1cHBlcj0xXSBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxvYXRpbmddIFNwZWNpZnkgcmV0dXJuaW5nIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDAsIDUpO1xuICAgICAqIC8vID0+IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSg1KTtcbiAgICAgKiAvLyA9PiBhbHNvIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSg1LCB0cnVlKTtcbiAgICAgKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDEuMiwgNS4yKTtcbiAgICAgKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDEuMiBhbmQgNS4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmFuZG9tKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpIHtcbiAgICAgIGlmIChmbG9hdGluZyAmJiB0eXBlb2YgZmxvYXRpbmcgIT0gJ2Jvb2xlYW4nICYmIGlzSXRlcmF0ZWVDYWxsKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpKSB7XG4gICAgICAgIHVwcGVyID0gZmxvYXRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoZmxvYXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHVwcGVyID09ICdib29sZWFuJykge1xuICAgICAgICAgIGZsb2F0aW5nID0gdXBwZXI7XG4gICAgICAgICAgdXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvd2VyID09ICdib29sZWFuJykge1xuICAgICAgICAgIGZsb2F0aW5nID0gbG93ZXI7XG4gICAgICAgICAgbG93ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciA9PT0gdW5kZWZpbmVkICYmIHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG93ZXIgPSAwO1xuICAgICAgICB1cHBlciA9IDE7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbG93ZXIgPSB0b0Zpbml0ZShsb3dlcik7XG4gICAgICAgIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdXBwZXIgPSBsb3dlcjtcbiAgICAgICAgICBsb3dlciA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBwZXIgPSB0b0Zpbml0ZSh1cHBlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciA+IHVwcGVyKSB7XG4gICAgICAgIHZhciB0ZW1wID0gbG93ZXI7XG4gICAgICAgIGxvd2VyID0gdXBwZXI7XG4gICAgICAgIHVwcGVyID0gdGVtcDtcbiAgICAgIH1cbiAgICAgIGlmIChmbG9hdGluZyB8fCBsb3dlciAlIDEgfHwgdXBwZXIgJSAxKSB7XG4gICAgICAgIHZhciByYW5kID0gbmF0aXZlUmFuZG9tKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVNaW4obG93ZXIgKyAocmFuZCAqICh1cHBlciAtIGxvd2VyICsgZnJlZVBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSksIHVwcGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcik7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gW2NhbWVsIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhbWVsQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICpcbiAgICAgKiBfLmNhbWVsQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqL1xuICAgIHZhciBjYW1lbENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gY2FwaXRhbGl6ZSh3b3JkKSA6IHdvcmQpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlIGFuZCB0aGUgcmVtYWluaW5nXG4gICAgICogdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhcGl0YWxpemVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYXBpdGFsaXplKCdGUkVEJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgICAgIHJldHVybiB1cHBlckZpcnN0KHRvU3RyaW5nKHN0cmluZykudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVidXJycyBgc3RyaW5nYCBieSBjb252ZXJ0aW5nXG4gICAgICogW0xhdGluLTEgU3VwcGxlbWVudF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gICAgICogYW5kIFtMYXRpbiBFeHRlbmRlZC1BXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbl9FeHRlbmRlZC1BKVxuICAgICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycyBhbmQgcmVtb3ZpbmdcbiAgICAgKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGRlYnVyci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVidXJyKCdkw6lqw6AgdnUnKTtcbiAgICAgKiAvLyA9PiAnZGVqYSB2dSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIHN0cmluZyAmJiBzdHJpbmcucmVwbGFjZShyZUxhdGluLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPXN0cmluZy5sZW5ndGhdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggdXAgdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCBgdGFyZ2V0YCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJywgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHRhcmdldCA9IGJhc2VUb1N0cmluZyh0YXJnZXQpO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxlbmd0aFxuICAgICAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBsZW5ndGgpO1xuXG4gICAgICB2YXIgZW5kID0gcG9zaXRpb247XG4gICAgICBwb3NpdGlvbiAtPSB0YXJnZXQubGVuZ3RoO1xuICAgICAgcmV0dXJuIHBvc2l0aW9uID49IDAgJiYgc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBlbmQpID09IHRhcmdldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAgICAgKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAgICAgKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAgICAgKlxuICAgICAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAgICAgKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICAgICAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAgICAgKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gICAgICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gICAgICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAgICAgKiBYU1MgdmVjdG9ycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlcyB0aGUgYFJlZ0V4cGAgc3BlY2lhbCBjaGFyYWN0ZXJzIFwiXlwiLCBcIiRcIiwgXCJcXFwiLCBcIi5cIiwgXCIqXCIsIFwiK1wiLFxuICAgICAqIFwiP1wiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBhbmQgXCJ8XCIgaW4gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAgICAgKiAvLyA9PiAnXFxbbG9kYXNoXFxdXFwoaHR0cHM6Ly9sb2Rhc2hcXC5jb20vXFwpJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICogW2tlYmFiIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xldHRlcl9jYXNlI1NwZWNpYWxfY2FzZV9zdHlsZXMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUga2ViYWIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnRm9vIEJhcicpO1xuICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAqXG4gICAgICogXy5rZWJhYkNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAqXG4gICAgICogXy5rZWJhYkNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICovXG4gICAgdmFyIGtlYmFiQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICctJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBzcGFjZSBzZXBhcmF0ZWQgd29yZHMsIHRvIGxvd2VyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubG93ZXJDYXNlKCctLUZvby1CYXItLScpO1xuICAgICAqIC8vID0+ICdmb28gYmFyJ1xuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb28gYmFyJ1xuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICovXG4gICAgdmFyIGxvd2VyQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubG93ZXJGaXJzdCgnRnJlZCcpO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqXG4gICAgICogXy5sb3dlckZpcnN0KCdGUkVEJyk7XG4gICAgICogLy8gPT4gJ2ZSRUQnXG4gICAgICovXG4gICAgdmFyIGxvd2VyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvTG93ZXJDYXNlJyk7XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlcyBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC5cbiAgICAgKiBQYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGNhbid0IGJlIGV2ZW5seSBkaXZpZGVkIGJ5IGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCA4KTtcbiAgICAgKiAvLyA9PiAnICBhYmMgICAnXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgOCwgJ18tJyk7XG4gICAgICogLy8gPT4gJ18tYWJjXy1fJ1xuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFkKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIGlmICghbGVuZ3RoIHx8IHN0ckxlbmd0aCA+PSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBtaWQgPSAobGVuZ3RoIC0gc3RyTGVuZ3RoKSAvIDI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUZsb29yKG1pZCksIGNoYXJzKSArXG4gICAgICAgIHN0cmluZyArXG4gICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlQ2VpbChtaWQpLCBjaGFycylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgcmlnaHQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC4gUGFkZGluZ1xuICAgICAqIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGV4Y2VlZCBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJ2FiYyAgICdcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjXy1fJ1xuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFkRW5kKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICAgICAgPyAoc3RyaW5nICsgY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJzKSlcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYpO1xuICAgICAqIC8vID0+ICcgICBhYmMnXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCA2LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnXy1fYWJjJ1xuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWRTdGFydChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gICAgICByZXR1cm4gKGxlbmd0aCAmJiBzdHJMZW5ndGggPCBsZW5ndGgpXG4gICAgICAgID8gKGNyZWF0ZVBhZGRpbmcobGVuZ3RoIC0gc3RyTGVuZ3RoLCBjaGFycykgKyBzdHJpbmcpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGludGVnZXIgb2YgdGhlIHNwZWNpZmllZCByYWRpeC4gSWYgYHJhZGl4YCBpc1xuICAgICAqIGB1bmRlZmluZWRgIG9yIGAwYCwgYSBgcmFkaXhgIG9mIGAxMGAgaXMgdXNlZCB1bmxlc3MgYHZhbHVlYCBpcyBhXG4gICAgICogaGV4YWRlY2ltYWwsIGluIHdoaWNoIGNhc2UgYSBgcmFkaXhgIG9mIGAxNmAgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBhbGlnbnMgd2l0aCB0aGVcbiAgICAgKiBbRVM1IGltcGxlbWVudGF0aW9uXShodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xLjIuMikgb2YgYHBhcnNlSW50YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4PTEwXSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYXJzZUludCgnMDgnKTtcbiAgICAgKiAvLyA9PiA4XG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnMDgnLCAnMTAnXSwgXy5wYXJzZUludCk7XG4gICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgsIGd1YXJkKSB7XG4gICAgICBpZiAoZ3VhcmQgfHwgcmFkaXggPT0gbnVsbCkge1xuICAgICAgICByYWRpeCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHJhZGl4KSB7XG4gICAgICAgIHJhZGl4ID0gK3JhZGl4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hdGl2ZVBhcnNlSW50KHRvU3RyaW5nKHN0cmluZykucmVwbGFjZShyZVRyaW1TdGFydCwgJycpLCByYWRpeCB8fCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRzIHRoZSBnaXZlbiBzdHJpbmcgYG5gIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJlcGVhdGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZXBlYXQoJyonLCAzKTtcbiAgICAgKiAvLyA9PiAnKioqJ1xuICAgICAqXG4gICAgICogXy5yZXBlYXQoJ2FiYycsIDIpO1xuICAgICAqIC8vID0+ICdhYmNhYmMnXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnYWJjJywgMCk7XG4gICAgICogLy8gPT4gJydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBuLCBndWFyZCkge1xuICAgICAgaWYgKChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgbiwgZ3VhcmQpIDogbiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVJlcGVhdCh0b1N0cmluZyhzdHJpbmcpLCBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHN0cmluZ2Agd2l0aCBgcmVwbGFjZW1lbnRgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BTdHJpbmcjcmVwbGFjZWBdKGh0dHBzOi8vbWRuLmlvL1N0cmluZy9yZXBsYWNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IHJlcGxhY2VtZW50IFRoZSBtYXRjaCByZXBsYWNlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVwbGFjZSgnSGkgRnJlZCcsICdGcmVkJywgJ0Jhcm5leScpO1xuICAgICAqIC8vID0+ICdIaSBCYXJuZXknXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwbGFjZSgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIHN0cmluZyA9IHRvU3RyaW5nKGFyZ3NbMF0pO1xuXG4gICAgICByZXR1cm4gYXJncy5sZW5ndGggPCAzID8gc3RyaW5nIDogc3RyaW5nLnJlcGxhY2UoYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBbc25ha2UgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU25ha2VfY2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzbmFrZSBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnLS1GT08tQkFSLS0nKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKi9cbiAgICB2YXIgc25ha2VDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJ18nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU3BsaXRzIGBzdHJpbmdgIGJ5IGBzZXBhcmF0b3JgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BTdHJpbmcjc3BsaXRgXShodHRwczovL21kbi5pby9TdHJpbmcvc3BsaXQpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHNwbGl0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gc2VwYXJhdG9yIFRoZSBzZXBhcmF0b3IgcGF0dGVybiB0byBzcGxpdCBieS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0XSBUaGUgbGVuZ3RoIHRvIHRydW5jYXRlIHJlc3VsdHMgdG8uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzdHJpbmcgc2VnbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3BsaXQoJ2EtYi1jJywgJy0nLCAyKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3BsaXQoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICBpZiAobGltaXQgJiYgdHlwZW9mIGxpbWl0ICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCkpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gbGltaXQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBsaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfQVJSQVlfTEVOR1RIIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAoIWxpbWl0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChcbiAgICAgICAgICAgIHR5cGVvZiBzZXBhcmF0b3IgPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgIChzZXBhcmF0b3IgIT0gbnVsbCAmJiAhaXNSZWdFeHAoc2VwYXJhdG9yKSlcbiAgICAgICAgICApKSB7XG4gICAgICAgIHNlcGFyYXRvciA9IGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoIXNlcGFyYXRvciAmJiBoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgICByZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwgMCwgbGltaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyaW5nLnNwbGl0KHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICogW3N0YXJ0IGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xldHRlcl9jYXNlI1N0eWxpc3RpY19vcl9zcGVjaWFsaXNlZF91c2FnZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdGFydCBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRDYXNlKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICdGb28gQmFyJ1xuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdGb28gQmFyJ1xuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICovXG4gICAgdmFyIHN0YXJ0Q2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHVwcGVyRmlyc3Qod29yZCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249MF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCBgdGFyZ2V0YCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyaW5nLCB0YXJnZXQsIHBvc2l0aW9uKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsXG4gICAgICAgID8gMFxuICAgICAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBzdHJpbmcubGVuZ3RoKTtcblxuICAgICAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG4gICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIHRhcmdldC5sZW5ndGgpID09IHRhcmdldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gICAgICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAgICAgKiBcImVzY2FwZVwiIGRlbGltaXRlcnMsIGFuZCBleGVjdXRlIEphdmFTY3JpcHQgaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuIERhdGFcbiAgICAgKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICAgICAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYF8udGVtcGxhdGVgIHV0aWxpemVzXG4gICAgICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gICAgICogZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICAgICAqIFtsb2Rhc2gncyBjdXN0b20gYnVpbGRzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbG9kYXNoLmNvbS9jdXN0b20tYnVpbGRzKS5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICAgICAqIFtDaHJvbWUncyBleHRlbnNpb25zIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZXh0ZW5zaW9ucy9zYW5kYm94aW5nRXZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICAgICAqICBUaGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmV2YWx1YXRlXVxuICAgICAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuaW1wb3J0cz1fLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c11cbiAgICAgKiAgQW4gb2JqZWN0IHRvIGltcG9ydCBpbnRvIHRoZSB0ZW1wbGF0ZSBhcyBmcmVlIHZhcmlhYmxlcy5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICAgICAqICBUaGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSdsb2Rhc2gudGVtcGxhdGVTb3VyY2VzW25dJ11cbiAgICAgKiAgVGhlIHNvdXJjZVVSTCBvZiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICAgICAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2ZyZWQnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlciB0byBlc2NhcGUgZGF0YSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAgICAgKiAvLyA9PiAnPGI+Jmx0O3NjcmlwdCZndDs8L2I+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBfLmZvckVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdiYXJuZXknIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBFUyB0ZW1wbGF0ZSBsaXRlcmFsIGRlbGltaXRlciBhcyBhbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAncGViYmxlcycgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIGJhY2tzbGFzaGVzIHRvIHRyZWF0IGRlbGltaXRlcnMgYXMgcGxhaW4gdGV4dC5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gICAgICogLy8gPT4gJzwlLSB2YWx1ZSAlPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAgICAgKiB2YXIgdGV4dCA9ICc8JSBqcS5lYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nO1xuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gICAgICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScsIHsgJ3NvdXJjZVVSTCc6ICcvYmFzaWMvZ3JlZXRpbmcuanN0JyB9KTtcbiAgICAgKiBjb21waWxlZChkYXRhKTtcbiAgICAgKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICAgICAqIGNvbXBpbGVkLnNvdXJjZTtcbiAgICAgKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAgICAgKiAvLyAgIF9fcCArPSAnaGkgJyArICgoX190ID0gKCBkYXRhLnVzZXIgKSkgPT0gbnVsbCA/ICcnIDogX190KSArICchJztcbiAgICAgKiAvLyAgIHJldHVybiBfX3A7XG4gICAgICogLy8gfVxuICAgICAqXG4gICAgICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICAgICAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8ge3sgdXNlciB9fSEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gICAgICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gICAgICogZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ2pzdC5qcycpLCAnXFxcbiAgICAgKiAgIHZhciBKU1QgPSB7XFxcbiAgICAgKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAgICAgKiAgIH07XFxcbiAgICAgKiAnKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSB7XG4gICAgICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gICAgICAvLyBhbmQgTGF1cmEgRG9rdG9yb3ZhJ3MgZG9ULmpzIChodHRwczovL2dpdGh1Yi5jb20vb2xhZG8vZG9UKS5cbiAgICAgIHZhciBzZXR0aW5ncyA9IGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO1xuXG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgICAgIHZhciBpbXBvcnRzID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLmltcG9ydHMsIHNldHRpbmdzLmltcG9ydHMsIGN1c3RvbURlZmF1bHRzQXNzaWduSW4pLFxuICAgICAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSxcbiAgICAgICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgICAgIHZhciBpc0VzY2FwaW5nLFxuICAgICAgICAgIGlzRXZhbHVhdGluZyxcbiAgICAgICAgICBpbmRleCA9IDAsXG4gICAgICAgICAgaW50ZXJwb2xhdGUgPSBvcHRpb25zLmludGVycG9sYXRlIHx8IHJlTm9NYXRjaCxcbiAgICAgICAgICBzb3VyY2UgPSBcIl9fcCArPSAnXCI7XG5cbiAgICAgIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgICAgIHZhciByZURlbGltaXRlcnMgPSBSZWdFeHAoXG4gICAgICAgIChvcHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgICAgIChpbnRlcnBvbGF0ZSA9PT0gcmVJbnRlcnBvbGF0ZSA/IHJlRXNUZW1wbGF0ZSA6IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgKG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnXG4gICAgICAsICdnJyk7XG5cbiAgICAgIC8vIFVzZSBhIHNvdXJjZVVSTCBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgIHZhciBzb3VyY2VVUkwgPSAnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAgKCdzb3VyY2VVUkwnIGluIG9wdGlvbnNcbiAgICAgICAgICA/IG9wdGlvbnMuc291cmNlVVJMXG4gICAgICAgICAgOiAoJ2xvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbJyArICgrK3RlbXBsYXRlQ291bnRlcikgKyAnXScpXG4gICAgICAgICkgKyAnXFxuJztcblxuICAgICAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgICAgIGludGVycG9sYXRlVmFsdWUgfHwgKGludGVycG9sYXRlVmFsdWUgPSBlc1RlbXBsYXRlVmFsdWUpO1xuXG4gICAgICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuICAgICAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgZGVsaW1pdGVycyB3aXRoIHNuaXBwZXRzLlxuICAgICAgICBpZiAoZXNjYXBlVmFsdWUpIHtcbiAgICAgICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInICtcXG5fX2UoXCIgKyBlc2NhcGVWYWx1ZSArIFwiKSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICAgICAgaXNFdmFsdWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGVWYWx1ZSArIFwiO1xcbl9fcCArPSAnXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVycG9sYXRlVmFsdWUpIHtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInICtcXG4oKF9fdCA9IChcIiArIGludGVycG9sYXRlVmFsdWUgKyBcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIjtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgICAvLyBUaGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW5cbiAgICAgICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfSk7XG5cbiAgICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAgIC8vIElmIGB2YXJpYWJsZWAgaXMgbm90IHNwZWNpZmllZCB3cmFwIGEgd2l0aC1zdGF0ZW1lbnQgYXJvdW5kIHRoZSBnZW5lcmF0ZWRcbiAgICAgIC8vIGNvZGUgdG8gYWRkIHRoZSBkYXRhIG9iamVjdCB0byB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbi5cbiAgICAgIHZhciB2YXJpYWJsZSA9IG9wdGlvbnMudmFyaWFibGU7XG4gICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYW51cCBjb2RlIGJ5IHN0cmlwcGluZyBlbXB0eSBzdHJpbmdzLlxuICAgICAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywgJyQxOycpO1xuXG4gICAgICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICAgICAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICAgICAodmFyaWFibGVcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAgICAgKGlzRXNjYXBpbmdcbiAgICAgICAgICAgPyAnLCBfX2UgPSBfLmVzY2FwZSdcbiAgICAgICAgICAgOiAnJ1xuICAgICAgICApICtcbiAgICAgICAgKGlzRXZhbHVhdGluZ1xuICAgICAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICAgICAgOiAnO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIHNvdXJjZSArXG4gICAgICAgICdyZXR1cm4gX19wXFxufSc7XG5cbiAgICAgIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRzVmFsdWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgICAgIC8vIHRoZSBgc291cmNlYCBwcm9wZXJ0eSBhcyBhIGNvbnZlbmllbmNlIGZvciBpbmxpbmluZyBjb21waWxlZCB0ZW1wbGF0ZXMuXG4gICAgICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICAgICAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byBsb3dlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xvd2VyKCctLUZvby1CYXItLScpO1xuICAgICAqIC8vID0+ICctLWZvby1iYXItLSdcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb2JhcidcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnX19mb29fYmFyX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Mb3dlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9VcHBlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvVXBwZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVwcGVyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1VwcGVyKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICctLUZPTy1CQVItLSdcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPT0JBUidcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnX19GT09fQkFSX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbSgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykgKyAxO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJy1fLWFiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbUVuZCwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbVN0YXJ0KCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJ2FiYyAgJ1xuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMtXy0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCBzdGFydCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScuLi4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHRydW5jYXRlIHRvLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAnICdcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnbGVuZ3RoJzogMjQsXG4gICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZS4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnb21pc3Npb24nOiAnIFsuLi5dJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICAgICAgb21pc3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OO1xuXG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgbGVuZ3RoID0gJ2xlbmd0aCcgaW4gb3B0aW9ucyA/IHRvSW50ZWdlcihvcHRpb25zLmxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgIG9taXNzaW9uID0gJ29taXNzaW9uJyBpbiBvcHRpb25zID8gYmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pIDogb21pc3Npb247XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyk7XG4gICAgICAgIHN0ckxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBlbmQgPSBsZW5ndGggLSBzdHJpbmdTaXplKG9taXNzaW9uKTtcbiAgICAgIGlmIChlbmQgPCAxKSB7XG4gICAgICAgIHJldHVybiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBzdHJTeW1ib2xzXG4gICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICAgICAgOiBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJTeW1ib2xzKSB7XG4gICAgICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2gsXG4gICAgICAgICAgICAgIHN1YnN0cmluZyA9IHJlc3VsdDtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIHRvU3RyaW5nKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpKSArICdnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkge1xuICAgICAgICAgICAgdmFyIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09PSB1bmRlZmluZWQgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgICAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAgICAgKiBgJmFtcDtgLCBgJmx0O2AsIGAmZ3Q7YCwgYCZxdW90O2AsIGFuZCBgJiMzOTtgIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIEhUTUwgZW50aXRpZXMgYXJlIHVuZXNjYXBlZC4gVG8gdW5lc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIEhUTUwgZW50aXRpZXMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNi4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRlJFRCdcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9VcHBlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnLCAvW14sIF0rL2cpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3b3JkcyhzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICAgICAgaWYgKHBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGJpbmQgYW5kIGFzc2lnbiB0aGUgYm91bmQgbWV0aG9kcyB0by5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB2aWV3ID0ge1xuICAgICAqICAgJ2xhYmVsJzogJ2RvY3MnLFxuICAgICAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdjbGlja2VkICcgKyB0aGlzLmxhYmVsKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5iaW5kQWxsKHZpZXcsIFsnY2xpY2snXSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICAgICAqIC8vID0+IExvZ3MgJ2NsaWNrZWQgZG9jcycgd2hlbiBjbGlja2VkLlxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAga2V5ID0gdG9LZXkoa2V5KTtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICAgICAqIHBhaXJzIGFyZSBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAgICAgKiAgIFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksICAgICAgICAgICBfLmNvbnN0YW50KCdtYXRjaGVzIEEnKV0sXG4gICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwgXy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLFxuICAgICAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gJ21hdGNoZXMgQSdcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBCJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAgICAgKiAvLyA9PiAnbm8gbWF0Y2gnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZChwYWlycykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHRvSXRlcmF0ZWUgPSBnZXRJdGVyYXRlZSgpO1xuXG4gICAgICBwYWlycyA9ICFsZW5ndGggPyBbXSA6IGFycmF5TWFwKHBhaXJzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFpclsxXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdG9JdGVyYXRlZShwYWlyWzBdKSwgcGFpclsxXV07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgICAgaWYgKGFwcGx5KHBhaXJbMF0sIHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGEgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgYHRydWVgIGlmXG4gICAgICogYWxsIHByZWRpY2F0ZXMgcmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNUb2Agd2l0aFxuICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDIsICdiJzogMSB9LFxuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICAgICAqIGl0cyBwbGFjZS4gVGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGBudWxsYCxcbiAgICAgKiBvciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8oMSwgMTApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdFRvKHVuZGVmaW5lZCwgMTApO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVmYXVsdFRvKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBzZWUgXy5mbG93UmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93UmlnaHQoW3NxdWFyZSwgXy5hZGRdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIHRoZVxuICAgICAqIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIGVsZW1lbnQuIElmIGBmdW5jYCBpcyBhbiBhcnJheSBvciBvYmplY3QsIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZSh7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqIF8uaXRlcmF0ZWUgPSBfLndyYXAoXy5pdGVyYXRlZSwgZnVuY3Rpb24oaXRlcmF0ZWUsIGZ1bmMpIHtcbiAgICAgKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICogICAgIHJldHVybiBmdW5jLnRlc3Qoc3RyaW5nKTtcbiAgICAgKiAgIH07XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihbJ2FiYycsICdkZWYnXSwgL2VmLyk7XG4gICAgICogLy8gPT4gWydkZWYnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAgICAgKiBvYmplY3QgYW5kIGBzb3VyY2VgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGVxdWl2YWxlbnRcbiAgICAgKiBwcm9wZXJ0eSB2YWx1ZXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmlzTWF0Y2hgIHdpdGggYHNvdXJjZWBcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGJhc2VDbG9uZShzb3VyY2UsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0aGVcbiAgICAgKiB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QgdG8gYHNyY1ZhbHVlYCwgcmV0dXJuaW5nIGB0cnVlYCBpZiB0aGVcbiAgICAgKiBvYmplY3QgdmFsdWUgaXMgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0XG4gICAgICogYHNyY1ZhbHVlYCB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZVxuICAgICAqIGBfLmlzRXF1YWxgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQob2JqZWN0cywgXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCA0KSk7XG4gICAgICogLy8gPT4geyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIGJhc2VDbG9uZShzcmNWYWx1ZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgxKSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKFsnYScsICdiJ10pKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kID0gYmFzZVJlc3QoZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tZXRob2RgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gXy50aW1lcygzLCBfLmNvbnN0YW50KSxcbiAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICpcbiAgICAgKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqXG4gICAgICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIHZhciBtZXRob2RPZiA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFsbCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgZnVuY3Rpb24gcHJvcGVydGllcyBvZiBhIHNvdXJjZVxuICAgICAqIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LiBJZiBgb2JqZWN0YCBpcyBhIGZ1bmN0aW9uLCB0aGVuIG1ldGhvZHNcbiAgICAgKiBhcmUgYWRkZWQgdG8gaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIGZ1bmN0aW9ucyB0byBhZGQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgbWl4aW5zIGFyZSBjaGFpbmFibGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gdm93ZWxzKHN0cmluZykge1xuICAgICAqICAgcmV0dXJuIF8uZmlsdGVyKHN0cmluZywgZnVuY3Rpb24odikge1xuICAgICAqICAgICByZXR1cm4gL1thZWlvdV0vaS50ZXN0KHYpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5taXhpbih7ICd2b3dlbHMnOiB2b3dlbHMgfSk7XG4gICAgICogXy52b3dlbHMoJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqXG4gICAgICogXygnZnJlZCcpLnZvd2VscygpLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0sIHsgJ2NoYWluJzogZmFsc2UgfSk7XG4gICAgICogXygnZnJlZCcpLnZvd2VscygpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWl4aW4ob2JqZWN0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKSxcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcyk7XG5cbiAgICAgIGlmIChvcHRpb25zID09IG51bGwgJiZcbiAgICAgICAgICAhKGlzT2JqZWN0KHNvdXJjZSkgJiYgKG1ldGhvZE5hbWVzLmxlbmd0aCB8fCAhcHJvcHMubGVuZ3RoKSkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHNvdXJjZTtcbiAgICAgICAgc291cmNlID0gb2JqZWN0O1xuICAgICAgICBvYmplY3QgPSB0aGlzO1xuICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgICAgfVxuICAgICAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHx8ICEhb3B0aW9ucy5jaGFpbixcbiAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9iamVjdCk7XG5cbiAgICAgIGFycmF5RWFjaChtZXRob2ROYW1lcywgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgICB2YXIgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcbiAgICAgICAgb2JqZWN0W21ldGhvZE5hbWVdID0gZnVuYztcbiAgICAgICAgaWYgKGlzRnVuYykge1xuICAgICAgICAgIG9iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fO1xuICAgICAgICAgICAgaWYgKGNoYWluIHx8IGNoYWluQWxsKSB7XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3QodGhpcy5fX3dyYXBwZWRfXyksXG4gICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuXG4gICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7ICdmdW5jJzogZnVuYywgJ2FyZ3MnOiBhcmd1bWVudHMsICd0aGlzQXJnJzogb2JqZWN0IH0pO1xuICAgICAgICAgICAgICByZXN1bHQuX19jaGFpbl9fID0gY2hhaW5BbGw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShvYmplY3QsIGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSwgYXJndW1lbnRzKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJ0cyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cyBwcmV2aW91cyB2YWx1ZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0b1xuICAgICAqIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGxvZGFzaCA9IF8ubm9Db25mbGljdCgpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7XG4gICAgICBpZiAocm9vdC5fID09PSB0aGlzKSB7XG4gICAgICAgIHJvb3QuXyA9IG9sZERhc2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLm5vb3ApO1xuICAgICAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub29wKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBhcmd1bWVudCBhdCBpbmRleCBgbmAuIElmIGBuYCBpcyBuZWdhdGl2ZSxcbiAgICAgKiB0aGUgbnRoIGFyZ3VtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2InXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ubnRoQXJnKC0yKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2MnXG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoQXJnKG4pIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICByZXR1cm4gYmFzZU50aChhcmdzLCBuKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGl0ZXJhdGVlc2Agd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzXG4gICAgICogYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXIoW01hdGgubWF4LCBNYXRoLm1pbl0pO1xuICAgICAqXG4gICAgICogZnVuYygxLCAyLCAzLCA0KTtcbiAgICAgKiAvLyA9PiBbNCwgMV1cbiAgICAgKi9cbiAgICB2YXIgb3ZlciA9IGNyZWF0ZU92ZXIoYXJyYXlNYXApO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYWxsKiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtwcmVkaWNhdGVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIHByZWRpY2F0ZXMgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyRXZlcnkoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKCcxJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIG92ZXJFdmVyeSA9IGNyZWF0ZU92ZXIoYXJyYXlFdmVyeSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICAgICAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIG92ZXJTb21lID0gY3JlYXRlT3ZlcihhcnJheVNvbWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICAgICAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAgICAgKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoNCk7XG4gICAgICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKC00KTtcbiAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICAgICAqIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDQpO1xuICAgICAqIC8vID0+IFszLCAyLCAxLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KC00KTtcbiAgICAgKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgxLCA1KTtcbiAgICAgKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAyMCwgNSk7XG4gICAgICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgdmFyIHJhbmdlUmlnaHQgPSBjcmVhdGVSYW5nZSh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAgICAgKiAvLyA9PiBbW10sIFtdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICAgICAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uc3R1Yk9iamVjdCk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAgICAgKiAvLyA9PiBbe30sIHt9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlN0cmluZyk7XG4gICAgICogLy8gPT4gWycnLCAnJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlRydWUpO1xuICAgICAqIC8vID0+IFt0cnVlLCB0cnVlXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJUcnVlKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBlYWNoIGludm9jYXRpb24uIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBTdHJpbmcpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJywgJzInXVxuICAgICAqXG4gICAgICogIF8udGltZXMoNCwgXy5jb25zdGFudCgwKSk7XG4gICAgICogLy8gPT4gWzAsIDAsIDAsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO1xuICAgICAgbiAtPSBNQVhfQVJSQVlfTEVOR1RIO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1BhdGgoJ2EuYi5jJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgdG9LZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdWdlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWRkZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFkZCg2LCA0KTtcbiAgICAgKiAvLyA9PiAxMFxuICAgICAqL1xuICAgIHZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gICAgICByZXR1cm4gYXVnZW5kICsgYWRkZW5kO1xuICAgIH0sIDApO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgdXAgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNC4wMDYpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2LjAwNCwgMik7XG4gICAgICogLy8gPT4gNi4wMVxuICAgICAqXG4gICAgICogXy5jZWlsKDYwNDAsIC0yKTtcbiAgICAgKiAvLyA9PiA2MTAwXG4gICAgICovXG4gICAgdmFyIGNlaWwgPSBjcmVhdGVSb3VuZCgnY2VpbCcpO1xuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc29yIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGl2aWRlKDYsIDQpO1xuICAgICAqIC8vID0+IDEuNVxuICAgICAqL1xuICAgIHZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICByZXR1cm4gZGl2aWRlbmQgLyBkaXZpc29yO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCBkb3duIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgZG93biBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoMC4wNDYsIDIpO1xuICAgICAqIC8vID0+IDAuMDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQwMDBcbiAgICAgKi9cbiAgICB2YXIgZmxvb3IgPSBjcmVhdGVSb3VuZCgnZmxvb3InKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWF4KFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tYXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5tYXhCeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWF4Qnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF4QnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tZWFuKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lYW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgaWRlbnRpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVhbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIGF2ZXJhZ2VkLlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWVhbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8ubWluKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VMdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5taW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5taW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWNhbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwcm9kdWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm11bHRpcGx5KDYsIDQpO1xuICAgICAqIC8vID0+IDI0XG4gICAgICovXG4gICAgdmFyIG11bHRpcGx5ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmQpIHtcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnVlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdWJ0cmFoZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICByZXR1cm4gbWludWVuZCAtIHN1YnRyYWhlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3VtKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTdW0oYXJyYXksIGlkZW50aXR5KVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zdW1gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnN1bUJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gd3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZnRlciA9IGFmdGVyO1xuICAgIGxvZGFzaC5hcnkgPSBhcnk7XG4gICAgbG9kYXNoLmFzc2lnbiA9IGFzc2lnbjtcbiAgICBsb2Rhc2guYXNzaWduSW4gPSBhc3NpZ25JbjtcbiAgICBsb2Rhc2guYXNzaWduSW5XaXRoID0gYXNzaWduSW5XaXRoO1xuICAgIGxvZGFzaC5hc3NpZ25XaXRoID0gYXNzaWduV2l0aDtcbiAgICBsb2Rhc2guYXQgPSBhdDtcbiAgICBsb2Rhc2guYmVmb3JlID0gYmVmb3JlO1xuICAgIGxvZGFzaC5iaW5kID0gYmluZDtcbiAgICBsb2Rhc2guYmluZEFsbCA9IGJpbmRBbGw7XG4gICAgbG9kYXNoLmJpbmRLZXkgPSBiaW5kS2V5O1xuICAgIGxvZGFzaC5jYXN0QXJyYXkgPSBjYXN0QXJyYXk7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25jYXQgPSBjb25jYXQ7XG4gICAgbG9kYXNoLmNvbmQgPSBjb25kO1xuICAgIGxvZGFzaC5jb25mb3JtcyA9IGNvbmZvcm1zO1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZUJ5ID0gZGlmZmVyZW5jZUJ5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlV2l0aCA9IGRpZmZlcmVuY2VXaXRoO1xuICAgIGxvZGFzaC5kcm9wID0gZHJvcDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0ID0gZHJvcFJpZ2h0O1xuICAgIGxvZGFzaC5kcm9wUmlnaHRXaGlsZSA9IGRyb3BSaWdodFdoaWxlO1xuICAgIGxvZGFzaC5kcm9wV2hpbGUgPSBkcm9wV2hpbGU7XG4gICAgbG9kYXNoLmZpbGwgPSBmaWxsO1xuICAgIGxvZGFzaC5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLmZsYXRNYXAgPSBmbGF0TWFwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVlcCA9IGZsYXRNYXBEZWVwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVwdGggPSBmbGF0TWFwRGVwdGg7XG4gICAgbG9kYXNoLmZsYXR0ZW4gPSBmbGF0dGVuO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVlcCA9IGZsYXR0ZW5EZWVwO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVwdGggPSBmbGF0dGVuRGVwdGg7XG4gICAgbG9kYXNoLmZsaXAgPSBmbGlwO1xuICAgIGxvZGFzaC5mbG93ID0gZmxvdztcbiAgICBsb2Rhc2guZmxvd1JpZ2h0ID0gZmxvd1JpZ2h0O1xuICAgIGxvZGFzaC5mcm9tUGFpcnMgPSBmcm9tUGFpcnM7XG4gICAgbG9kYXNoLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2guZnVuY3Rpb25zSW4gPSBmdW5jdGlvbnNJbjtcbiAgICBsb2Rhc2guZ3JvdXBCeSA9IGdyb3VwQnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbkJ5ID0gaW50ZXJzZWN0aW9uQnk7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBpbnRlcnNlY3Rpb25XaXRoO1xuICAgIGxvZGFzaC5pbnZlcnQgPSBpbnZlcnQ7XG4gICAgbG9kYXNoLmludmVydEJ5ID0gaW52ZXJ0Qnk7XG4gICAgbG9kYXNoLmludm9rZU1hcCA9IGludm9rZU1hcDtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiAgICBsb2Rhc2gua2V5QnkgPSBrZXlCeTtcbiAgICBsb2Rhc2gua2V5cyA9IGtleXM7XG4gICAgbG9kYXNoLmtleXNJbiA9IGtleXNJbjtcbiAgICBsb2Rhc2gubWFwID0gbWFwO1xuICAgIGxvZGFzaC5tYXBLZXlzID0gbWFwS2V5cztcbiAgICBsb2Rhc2gubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuICAgIGxvZGFzaC5tYXRjaGVzID0gbWF0Y2hlcztcbiAgICBsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gbWF0Y2hlc1Byb3BlcnR5O1xuICAgIGxvZGFzaC5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBsb2Rhc2gubWVyZ2UgPSBtZXJnZTtcbiAgICBsb2Rhc2gubWVyZ2VXaXRoID0gbWVyZ2VXaXRoO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICBsb2Rhc2gubnRoQXJnID0gbnRoQXJnO1xuICAgIGxvZGFzaC5vbWl0ID0gb21pdDtcbiAgICBsb2Rhc2gub21pdEJ5ID0gb21pdEJ5O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gub3JkZXJCeSA9IG9yZGVyQnk7XG4gICAgbG9kYXNoLm92ZXIgPSBvdmVyO1xuICAgIGxvZGFzaC5vdmVyQXJncyA9IG92ZXJBcmdzO1xuICAgIGxvZGFzaC5vdmVyRXZlcnkgPSBvdmVyRXZlcnk7XG4gICAgbG9kYXNoLm92ZXJTb21lID0gb3ZlclNvbWU7XG4gICAgbG9kYXNoLnBhcnRpYWwgPSBwYXJ0aWFsO1xuICAgIGxvZGFzaC5wYXJ0aWFsUmlnaHQgPSBwYXJ0aWFsUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbiAgICBsb2Rhc2gucGljayA9IHBpY2s7XG4gICAgbG9kYXNoLnBpY2tCeSA9IHBpY2tCeTtcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsID0gcHVsbEFsbDtcbiAgICBsb2Rhc2gucHVsbEFsbEJ5ID0gcHVsbEFsbEJ5O1xuICAgIGxvZGFzaC5wdWxsQWxsV2l0aCA9IHB1bGxBbGxXaXRoO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJhbmdlUmlnaHQgPSByYW5nZVJpZ2h0O1xuICAgIGxvZGFzaC5yZWFyZyA9IHJlYXJnO1xuICAgIGxvZGFzaC5yZWplY3QgPSByZWplY3Q7XG4gICAgbG9kYXNoLnJlbW92ZSA9IHJlbW92ZTtcbiAgICBsb2Rhc2gucmVzdCA9IHJlc3Q7XG4gICAgbG9kYXNoLnJldmVyc2UgPSByZXZlcnNlO1xuICAgIGxvZGFzaC5zYW1wbGVTaXplID0gc2FtcGxlU2l6ZTtcbiAgICBsb2Rhc2guc2V0ID0gc2V0O1xuICAgIGxvZGFzaC5zZXRXaXRoID0gc2V0V2l0aDtcbiAgICBsb2Rhc2guc2h1ZmZsZSA9IHNodWZmbGU7XG4gICAgbG9kYXNoLnNsaWNlID0gc2xpY2U7XG4gICAgbG9kYXNoLnNvcnRCeSA9IHNvcnRCeTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcSA9IHNvcnRlZFVuaXE7XG4gICAgbG9kYXNoLnNvcnRlZFVuaXFCeSA9IHNvcnRlZFVuaXFCeTtcbiAgICBsb2Rhc2guc3BsaXQgPSBzcGxpdDtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWlsID0gdGFpbDtcbiAgICBsb2Rhc2gudGFrZSA9IHRha2U7XG4gICAgbG9kYXNoLnRha2VSaWdodCA9IHRha2VSaWdodDtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0V2hpbGUgPSB0YWtlUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2gudGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuICAgIGxvZGFzaC50YXAgPSB0YXA7XG4gICAgbG9kYXNoLnRocm90dGxlID0gdGhyb3R0bGU7XG4gICAgbG9kYXNoLnRocnUgPSB0aHJ1O1xuICAgIGxvZGFzaC50b0FycmF5ID0gdG9BcnJheTtcbiAgICBsb2Rhc2gudG9QYWlycyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLnRvUGFpcnNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2gudG9QYXRoID0gdG9QYXRoO1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmFyeSA9IHVuYXJ5O1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlvbkJ5ID0gdW5pb25CeTtcbiAgICBsb2Rhc2gudW5pb25XaXRoID0gdW5pb25XaXRoO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW5pcUJ5ID0gdW5pcUJ5O1xuICAgIGxvZGFzaC51bmlxV2l0aCA9IHVuaXFXaXRoO1xuICAgIGxvZGFzaC51bnNldCA9IHVuc2V0O1xuICAgIGxvZGFzaC51bnppcCA9IHVuemlwO1xuICAgIGxvZGFzaC51bnppcFdpdGggPSB1bnppcFdpdGg7XG4gICAgbG9kYXNoLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgICBsb2Rhc2gudXBkYXRlV2l0aCA9IHVwZGF0ZVdpdGg7XG4gICAgbG9kYXNoLnZhbHVlcyA9IHZhbHVlcztcbiAgICBsb2Rhc2gudmFsdWVzSW4gPSB2YWx1ZXNJbjtcbiAgICBsb2Rhc2gud2l0aG91dCA9IHdpdGhvdXQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG4gICAgbG9kYXNoLndyYXAgPSB3cmFwO1xuICAgIGxvZGFzaC54b3IgPSB4b3I7XG4gICAgbG9kYXNoLnhvckJ5ID0geG9yQnk7XG4gICAgbG9kYXNoLnhvcldpdGggPSB4b3JXaXRoO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwT2JqZWN0RGVlcCA9IHppcE9iamVjdERlZXA7XG4gICAgbG9kYXNoLnppcFdpdGggPSB6aXBXaXRoO1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVudHJpZXMgPSB0b1BhaXJzO1xuICAgIGxvZGFzaC5lbnRyaWVzSW4gPSB0b1BhaXJzSW47XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5leHRlbmRXaXRoID0gYXNzaWduSW5XaXRoO1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIG1peGluKGxvZGFzaCwgbG9kYXNoKTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZGQgPSBhZGQ7XG4gICAgbG9kYXNoLmF0dGVtcHQgPSBhdHRlbXB0O1xuICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG4gICAgbG9kYXNoLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuICAgIGxvZGFzaC5jZWlsID0gY2VpbDtcbiAgICBsb2Rhc2guY2xhbXAgPSBjbGFtcDtcbiAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTtcbiAgICBsb2Rhc2guY2xvbmVEZWVwID0gY2xvbmVEZWVwO1xuICAgIGxvZGFzaC5jbG9uZURlZXBXaXRoID0gY2xvbmVEZWVwV2l0aDtcbiAgICBsb2Rhc2guY2xvbmVXaXRoID0gY2xvbmVXaXRoO1xuICAgIGxvZGFzaC5jb25mb3Jtc1RvID0gY29uZm9ybXNUbztcbiAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyO1xuICAgIGxvZGFzaC5kZWZhdWx0VG8gPSBkZWZhdWx0VG87XG4gICAgbG9kYXNoLmRpdmlkZSA9IGRpdmlkZTtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXEgPSBlcTtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZ2V0ID0gZ2V0O1xuICAgIGxvZGFzaC5ndCA9IGd0O1xuICAgIGxvZGFzaC5ndGUgPSBndGU7XG4gICAgbG9kYXNoLmhhcyA9IGhhcztcbiAgICBsb2Rhc2guaGFzSW4gPSBoYXNJbjtcbiAgICBsb2Rhc2guaGVhZCA9IGhlYWQ7XG4gICAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mO1xuICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5nZTtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzO1xuICAgIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbiAgICBsb2Rhc2guaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2U7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0ID0gaXNBcnJheUxpa2VPYmplY3Q7XG4gICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbiAgICBsb2Rhc2guaXNCdWZmZXIgPSBpc0J1ZmZlcjtcbiAgICBsb2Rhc2guaXNEYXRlID0gaXNEYXRlO1xuICAgIGxvZGFzaC5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG4gICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5O1xuICAgIGxvZGFzaC5pc0VxdWFsID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guaXNFcXVhbFdpdGggPSBpc0VxdWFsV2l0aDtcbiAgICBsb2Rhc2guaXNFcnJvciA9IGlzRXJyb3I7XG4gICAgbG9kYXNoLmlzRmluaXRlID0gaXNGaW5pdGU7XG4gICAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuICAgIGxvZGFzaC5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG4gICAgbG9kYXNoLmlzTGVuZ3RoID0gaXNMZW5ndGg7XG4gICAgbG9kYXNoLmlzTWFwID0gaXNNYXA7XG4gICAgbG9kYXNoLmlzTWF0Y2ggPSBpc01hdGNoO1xuICAgIGxvZGFzaC5pc01hdGNoV2l0aCA9IGlzTWF0Y2hXaXRoO1xuICAgIGxvZGFzaC5pc05hTiA9IGlzTmFOO1xuICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlO1xuICAgIGxvZGFzaC5pc05pbCA9IGlzTmlsO1xuICAgIGxvZGFzaC5pc051bGwgPSBpc051bGw7XG4gICAgbG9kYXNoLmlzTnVtYmVyID0gaXNOdW1iZXI7XG4gICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4gICAgbG9kYXNoLmlzT2JqZWN0TGlrZSA9IGlzT2JqZWN0TGlrZTtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU2FmZUludGVnZXIgPSBpc1NhZmVJbnRlZ2VyO1xuICAgIGxvZGFzaC5pc1NldCA9IGlzU2V0O1xuICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgIGxvZGFzaC5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuICAgIGxvZGFzaC5pc1R5cGVkQXJyYXkgPSBpc1R5cGVkQXJyYXk7XG4gICAgbG9kYXNoLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG4gICAgbG9kYXNoLmlzV2Vha01hcCA9IGlzV2Vha01hcDtcbiAgICBsb2Rhc2guaXNXZWFrU2V0ID0gaXNXZWFrU2V0O1xuICAgIGxvZGFzaC5qb2luID0gam9pbjtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubG93ZXJDYXNlID0gbG93ZXJDYXNlO1xuICAgIGxvZGFzaC5sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1heEJ5ID0gbWF4Qnk7XG4gICAgbG9kYXNoLm1lYW4gPSBtZWFuO1xuICAgIGxvZGFzaC5tZWFuQnkgPSBtZWFuQnk7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubWluQnkgPSBtaW5CeTtcbiAgICBsb2Rhc2guc3R1YkFycmF5ID0gc3R1YkFycmF5O1xuICAgIGxvZGFzaC5zdHViRmFsc2UgPSBzdHViRmFsc2U7XG4gICAgbG9kYXNoLnN0dWJPYmplY3QgPSBzdHViT2JqZWN0O1xuICAgIGxvZGFzaC5zdHViU3RyaW5nID0gc3R1YlN0cmluZztcbiAgICBsb2Rhc2guc3R1YlRydWUgPSBzdHViVHJ1ZTtcbiAgICBsb2Rhc2gubXVsdGlwbHkgPSBtdWx0aXBseTtcbiAgICBsb2Rhc2gubnRoID0gbnRoO1xuICAgIGxvZGFzaC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDtcbiAgICBsb2Rhc2gubm9vcCA9IG5vb3A7XG4gICAgbG9kYXNoLm5vdyA9IG5vdztcbiAgICBsb2Rhc2gucGFkID0gcGFkO1xuICAgIGxvZGFzaC5wYWRFbmQgPSBwYWRFbmQ7XG4gICAgbG9kYXNoLnBhZFN0YXJ0ID0gcGFkU3RhcnQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7XG4gICAgbG9kYXNoLnJvdW5kID0gcm91bmQ7XG4gICAgbG9kYXNoLnJ1bkluQ29udGV4dCA9IHJ1bkluQ29udGV4dDtcbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhCeSA9IHNvcnRlZEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4T2YgPSBzb3J0ZWRJbmRleE9mO1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXggPSBzb3J0ZWRMYXN0SW5kZXg7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5ID0gc29ydGVkTGFzdEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gc29ydGVkTGFzdEluZGV4T2Y7XG4gICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTtcbiAgICBsb2Rhc2guc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGg7XG4gICAgbG9kYXNoLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgbG9kYXNoLnN1bSA9IHN1bTtcbiAgICBsb2Rhc2guc3VtQnkgPSBzdW1CeTtcbiAgICBsb2Rhc2gudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICBsb2Rhc2gudGltZXMgPSB0aW1lcztcbiAgICBsb2Rhc2gudG9GaW5pdGUgPSB0b0Zpbml0ZTtcbiAgICBsb2Rhc2gudG9JbnRlZ2VyID0gdG9JbnRlZ2VyO1xuICAgIGxvZGFzaC50b0xlbmd0aCA9IHRvTGVuZ3RoO1xuICAgIGxvZGFzaC50b0xvd2VyID0gdG9Mb3dlcjtcbiAgICBsb2Rhc2gudG9OdW1iZXIgPSB0b051bWJlcjtcbiAgICBsb2Rhc2gudG9TYWZlSW50ZWdlciA9IHRvU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgbG9kYXNoLnRvVXBwZXIgPSB0b1VwcGVyO1xuICAgIGxvZGFzaC50cmltID0gdHJpbTtcbiAgICBsb2Rhc2gudHJpbUVuZCA9IHRyaW1FbmQ7XG4gICAgbG9kYXNoLnRyaW1TdGFydCA9IHRyaW1TdGFydDtcbiAgICBsb2Rhc2gudHJ1bmNhdGUgPSB0cnVuY2F0ZTtcbiAgICBsb2Rhc2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbiAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDtcbiAgICBsb2Rhc2gudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuICAgIGxvZGFzaC51cHBlckZpcnN0ID0gdXBwZXJGaXJzdDtcblxuICAgIC8vIEFkZCBhbGlhc2VzLlxuICAgIGxvZGFzaC5lYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5maXJzdCA9IGhlYWQ7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gucHJvdG90eXBlLCBtZXRob2ROYW1lKSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsb2Rhc2guVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICAvLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG4gICAgYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgbG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyID0gbG9kYXNoO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuICAgIGFycmF5RWFjaChbJ2Ryb3AnLCAndGFrZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24obikge1xuICAgICAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSAodGhpcy5fX2ZpbHRlcmVkX18gJiYgIWluZGV4KVxuICAgICAgICAgID8gbmV3IExhenlXcmFwcGVyKHRoaXMpXG4gICAgICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5fX2ZpbHRlcmVkX18pIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihuLCByZXN1bHQuX190YWtlQ291bnRfXyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHtcbiAgICAgICAgICAgICdzaXplJzogbmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpLFxuICAgICAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICAgICAnaXRlcmF0ZWUnOiBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAgICAgJ3R5cGUnOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5oZWFkYCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnaGVhZCcsICdsYXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGFrZU5hbWVdKDEpLnZhbHVlKClbMF07XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaW5pdGlhbGAgYW5kIGBfLnRhaWxgLlxuICAgIGFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGRyb3BOYW1lID0gJ2Ryb3AnICsgKGluZGV4ID8gJycgOiAnUmlnaHQnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXyAmJiAoc3RhcnQgPiAwIHx8IGVuZCA8IDApKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuZHJvcChzdGFydCk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gdG9JbnRlZ2VyKGVuZCk7XG4gICAgICAgIHJlc3VsdCA9IGVuZCA8IDAgPyByZXN1bHQuZHJvcFJpZ2h0KC1lbmQpIDogcmVzdWx0LnRha2UoZW5kIC0gc3RhcnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgbG9kYXNoRnVuYyA9IGxvZGFzaFtpc1Rha2VyID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV0sXG4gICAgICAgICAgcmV0VW53cmFwcGVkID0gaXNUYWtlciB8fCAvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgICBhcmdzID0gaXNUYWtlciA/IFsxXSA6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLCBhcnJheVB1c2goW3ZhbHVlXSwgYXJncykpO1xuICAgICAgICAgIHJldHVybiAoaXNUYWtlciAmJiBjaGFpbkFsbCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHVzZUxhenkgJiYgY2hlY2tJdGVyYXRlZSAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVyYXRlZS5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIEF2b2lkIGxhenkgdXNlIGlmIHRoZSBpdGVyYXRlZSBoYXMgYSBcImxlbmd0aFwiIHZhbHVlIG90aGVyIHRoYW4gYDFgLlxuICAgICAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzVW53cmFwcGVkID0gcmV0VW53cmFwcGVkICYmICFjaGFpbkFsbCxcbiAgICAgICAgICAgIG9ubHlMYXp5ID0gaXNMYXp5ICYmICFpc0h5YnJpZDtcblxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIocmVzdWx0LCBjaGFpbkFsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIGlzVW53cmFwcGVkID8gKGlzVGFrZXIgPyByZXN1bHQudmFsdWUoKVswXSA6IHJlc3VsdC52YWx1ZSgpKSA6IHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBhcnJheUVhY2goWydwb3AnLCAncHVzaCcsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgICAgICBjaGFpbk5hbWUgPSAvXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyAndGFwJyA6ICd0aHJ1JyxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSAvXig/OnBvcHxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBNYXAgbWluaWZpZWQgbWV0aG9kIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IChsb2Rhc2hGdW5jLm5hbWUgKyAnJyksXG4gICAgICAgICAgICBuYW1lcyA9IHJlYWxOYW1lc1trZXldIHx8IChyZWFsTmFtZXNba2V5XSA9IFtdKTtcblxuICAgICAgICBuYW1lcy5wdXNoKHsgJ25hbWUnOiBtZXRob2ROYW1lLCAnZnVuYyc6IGxvZGFzaEZ1bmMgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWFsTmFtZXNbY3JlYXRlSHlicmlkKHVuZGVmaW5lZCwgV1JBUF9CSU5EX0tFWV9GTEFHKS5uYW1lXSA9IFt7XG4gICAgICAnbmFtZSc6ICd3cmFwcGVyJyxcbiAgICAgICdmdW5jJzogdW5kZWZpbmVkXG4gICAgfV07XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGF6eVdyYXBwZXJgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS52YWx1ZSA9IGxhenlWYWx1ZTtcblxuICAgIC8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuYXQgPSB3cmFwcGVyQXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jaGFpbiA9IHdyYXBwZXJDaGFpbjtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbW1pdCA9IHdyYXBwZXJDb21taXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gd3JhcHBlck5leHQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSB3cmFwcGVyVmFsdWU7XG5cbiAgICAvLyBBZGQgbGF6eSBhbGlhc2VzLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuZmlyc3QgPSBsb2Rhc2gucHJvdG90eXBlLmhlYWQ7XG5cbiAgICBpZiAoc3ltSXRlcmF0b3IpIHtcbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbc3ltSXRlcmF0b3JdID0gd3JhcHBlclRvSXRlcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH0pO1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8vIEV4cG9ydCBsb2Rhc2guXG4gIHZhciBfID0gcnVuSW5Db250ZXh0KCk7XG5cbiAgLy8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6XG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEV4cG9zZSBMb2Rhc2ggb24gdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBlcnJvcnMgd2hlbiBMb2Rhc2ggaXNcbiAgICAvLyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTUQgbG9hZGVyLlxuICAgIC8vIFNlZSBodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sI21pc21hdGNoIGZvciBtb3JlIGRldGFpbHMuXG4gICAgLy8gVXNlIGBfLm5vQ29uZmxpY3RgIHRvIHJlbW92ZSBMb2Rhc2ggZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuXG4gICAgLy8gRGVmaW5lIGFzIGFuIGFub255bW91cyBtb2R1bGUgc28sIHRocm91Z2ggcGF0aCBtYXBwaW5nLCBpdCBjYW4gYmVcbiAgICAvLyByZWZlcmVuY2VkIGFzIHRoZSBcInVuZGVyc2NvcmVcIiBtb2R1bGUuXG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGBleHBvcnRzYCBhZnRlciBgZGVmaW5lYCBpbiBjYXNlIGEgYnVpbGQgb3B0aW1pemVyIGFkZHMgaXQuXG4gIGVsc2UgaWYgKGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMuXG4gICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBmcmVlRXhwb3J0cy5fID0gXztcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgdG8gdGhlIGdsb2JhbCBvYmplY3QuXG4gICAgcm9vdC5fID0gXztcbiAgfVxufS5jYWxsKHRoaXMpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sb2Rhc2guanNcbi8vIG1vZHVsZSBpZCA9IDE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n");
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports) {
-
-eval("module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2MzYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XHJcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcclxuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxyXG5cdFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHR9XHJcblx0cmV0dXJuIG1vZHVsZTtcclxufTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n");
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/*!\n * Bootstrap v4.1.2 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n true ? factory(exports, __webpack_require__(5), __webpack_require__(4)) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (factory((global.bootstrap = {}),global.jQuery,global.Popper));\n}(this, (function (exports,$,Popper) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Util = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($$$1(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $$$1(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $$$1.fn.emulateTransitionEnd = transitionEndEmulator;\n $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $$$1(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $$$1(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Alert = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'alert';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $$$1(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $$$1.Event(Event.CLOSE);\n $$$1(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $$$1(element).removeClass(ClassName.SHOW);\n\n if (!$$$1(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $$$1(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $$$1(element).detach().trigger(Event.CLOSED).remove();\n }; // Static\n\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $$$1(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Alert._jQueryInterface;\n $$$1.fn[NAME].Constructor = Alert;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Button = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'button';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector.ACTIVE);\n\n if (activeElement) {\n $$$1(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !this._element.classList.contains(ClassName.ACTIVE);\n $$$1(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $$$1(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Static\n\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$$$1(button).hasClass(ClassName.BUTTON)) {\n button = $$$1(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($$$1(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $$$1(event.target).closest(Selector.BUTTON)[0];\n $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Button._jQueryInterface;\n $$$1.fn[NAME].Constructor = Button;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Carousel = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'carousel';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this._config = this._getConfig(config);\n this._element = $$$1(element)[0];\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $$$1(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $$$1(this._element).off(EVENT_KEY);\n $$$1.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $$$1(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $$$1(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $$$1(this._element).on(Event.TOUCHEND, function () {\n _this2.pause();\n\n if (_this2.touchTimeout) {\n clearTimeout(_this2.touchTimeout);\n }\n\n _this2.touchTimeout = setTimeout(function (event) {\n return _this2.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n });\n }\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));\n\n var slideEvent = $$$1.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $$$1(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));\n $$$1(indicators).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $$$1(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this3 = this;\n\n var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $$$1.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($$$1(this._element).hasClass(ClassName.SLIDE)) {\n $$$1(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $$$1(activeElement).addClass(directionalClassName);\n $$$1(nextElement).addClass(directionalClassName);\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $$$1(activeElement).one(Util.TRANSITION_END, function () {\n $$$1(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $$$1(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this3._isSliding = false;\n setTimeout(function () {\n return $$$1(_this3._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $$$1(activeElement).removeClass(ClassName.ACTIVE);\n $$$1(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $$$1(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n }; // Static\n\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $$$1(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $$$1(selector)[0];\n\n if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($$$1(target), config);\n\n if (slideIndex) {\n $$$1(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $$$1(window).on(Event.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $$$1(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Carousel._jQueryInterface;\n $$$1.fn[NAME].Constructor = Carousel;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Collapse = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'collapse';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = $$$1.makeArray(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($$$1(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {\n return elem.getAttribute('data-parent') === _this._config.parent;\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $$$1(actives).not(this._selector).data(DATA_KEY);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $$$1.Event(Event.SHOW);\n $$$1(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $$$1(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $$$1(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $$$1.Event(Event.HIDE);\n $$$1(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $$$1([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent = null;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $$$1(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n var isOpen = $$$1(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length) {\n $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n }\n }; // Static\n\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $$$1(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $$$1(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $$$1(selectors).each(function () {\n var $target = $$$1(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Collapse._jQueryInterface;\n $$$1.fn[NAME].Constructor = Collapse;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Dropdown = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'dropdown';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.dropdown';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown =\n /*#__PURE__*/\n function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $$$1(this._menu).hasClass(ClassName.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $$$1.Event(Event.SHOW, relatedTarget);\n $$$1(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $$$1(parent).addClass(ClassName.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $$$1(document.body).children().on('mouseover', null, $$$1.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $$$1(this._menu).toggleClass(ClassName.SHOW);\n $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(this._element).off(EVENT_KEY);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Private\n\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $$$1(this._element).on(Event.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $$$1(this._element.parentNode);\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $$$1(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var _this2 = this;\n\n var offsetConf = {};\n\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});\n return data;\n };\n } else {\n offsetConf.offset = this._config.offset;\n }\n\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n }; // Static\n\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $$$1(toggles[i]).data(DATA_KEY);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$$$1(parent).hasClass(ClassName.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $$$1.Event(Event.HIDE, relatedTarget);\n $$$1(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().off('mouseover', null, $$$1.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $$$1(dropdownMenu).removeClass(ClassName.SHOW);\n $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n return parent || element.parentNode;\n }; // eslint-disable-next-line complexity\n\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $$$1(parent).hasClass(ClassName.SHOW);\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = parent.querySelector(Selector.DATA_TOGGLE);\n $$$1(toggle).trigger('focus');\n }\n\n $$$1(this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($$$1(this), 'toggle');\n }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Dropdown._jQueryInterface;\n $$$1.fn[NAME].Constructor = Dropdown;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Dropdown._jQueryInterface;\n };\n\n return Dropdown;\n }($, Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Modal = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'modal';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isTransitioning || this._isShown) {\n return;\n }\n\n if ($$$1(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $$$1.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $$$1(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n $$$1(document.body).addClass(ClassName.OPEN);\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($$$1(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (this._isTransitioning || !this._isShown) {\n return;\n }\n\n var hideEvent = $$$1.Event(Event.HIDE);\n $$$1(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $$$1(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $$$1(document).off(Event.FOCUSIN);\n $$$1(this._element).removeClass(ClassName.SHOW);\n $$$1(this._element).off(Event.CLICK_DISMISS);\n $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $$$1(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.scrollTop = 0;\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $$$1(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $$$1.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $$$1(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $$$1(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $$$1(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $$$1(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $$$1(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $$$1(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $$$1(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $$$1(this._backdrop).appendTo(document.body);\n $$$1(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $$$1(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $$$1(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($$$1(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n }; // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding\n\n $$$1(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $$$1(element).css('padding-right');\n $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $$$1(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $$$1(element).css('margin-right');\n $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $$$1(document.body).css('padding-right');\n $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n $$$1(fixedContent).each(function (index, element) {\n var padding = $$$1(element).data('padding-right');\n $$$1(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector.STICKY_CONTENT));\n $$$1(elements).each(function (index, element) {\n var margin = $$$1(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $$$1(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $$$1(document.body).data('padding-right');\n $$$1(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }; // Static\n\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $$$1(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($$$1(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($$$1(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Modal._jQueryInterface;\n $$$1.fn[NAME].Constructor = Modal;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Tooltip = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $$$1.removeData(this.element, this.constructor.DATA_KEY);\n $$$1(this.element).off(this.constructor.EVENT_KEY);\n $$$1(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $$$1(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($$$1(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $$$1.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $$$1(this.element).trigger(showEvent);\n var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $$$1(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container);\n $$$1(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $$$1(tip).appendTo(container);\n }\n\n $$$1(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().on('mouseover', null, $$$1.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $$$1(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($$$1(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $$$1.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $$$1(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().off('mouseover', null, $$$1.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($$$1(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $$$1(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $$$1(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());\n $$$1(tip).removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$$$1(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($$$1(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $$$1(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $$$1(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $$$1.fn[NAME] = Tooltip._jQueryInterface;\n $$$1.fn[NAME].Constructor = Tooltip;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n }($, Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Popover = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'popover';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $$$1(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $$$1(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n }; // Private\n\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $$$1(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n }; // Static\n\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $$$1.fn[NAME] = Popover._jQueryInterface;\n $$$1.fn[NAME].Constructor = Popover;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var ScrollSpy = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'scrollspy';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $$$1(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $$$1(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $$$1(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n queries = queries.map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n });\n var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $$$1(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n var nodes = [].slice.call(document.querySelectorAll(this._selector));\n $$$1(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n }; // Static\n\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $$$1(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = ScrollSpy._jQueryInterface;\n $$$1.fn[NAME].Constructor = ScrollSpy;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Tab = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tab';\n var VERSION = '4.1.2';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $$$1.makeArray($$$1(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $$$1.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $$$1.Event(Event.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $$$1(previous).trigger(hideEvent);\n }\n\n $$$1(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $$$1.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $$$1.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $$$1(previous).trigger(hiddenEvent);\n $$$1(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements;\n\n if (container.nodeName === 'UL') {\n activeElements = $$$1(container).find(Selector.ACTIVE_UL);\n } else {\n activeElements = $$$1(container).children(Selector.ACTIVE);\n }\n\n var active = activeElements[0];\n var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $$$1(active).removeClass(ClassName.SHOW + \" \" + ClassName.ACTIVE);\n var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $$$1(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $$$1(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n $$$1(element).addClass(ClassName.SHOW);\n\n if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));\n $$$1(dropdownToggleList).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n }; // Static\n\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $$$1(this);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($$$1(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Tab._jQueryInterface;\n $$$1.fn[NAME].Constructor = Tab;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.2): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n (function ($$$1) {\n if (typeof $$$1 === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $$$1.fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n })($);\n\n exports.Util = Util;\n exports.Alert = Alert;\n exports.Button = Button;\n exports.Carousel = Carousel;\n exports.Collapse = Collapse;\n exports.Dropdown = Dropdown;\n exports.Modal = Modal;\n exports.Popover = Popover;\n exports.Scrollspy = ScrollSpy;\n exports.Tab = Tab;\n exports.Tooltip = Tooltip;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmpzPzJiNzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxDQUFDLHFDQUFxQzs7QUFFdEM7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQsU0FBUzs7QUFFVDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQSxxRUFBcUU7O0FBRXJFO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEMsaUNBQWlDOztBQUVqQyxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOzs7QUFHUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZixhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBLHdDQUF3Qzs7QUFFeEM7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLFNBQVM7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxTQUFTO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBOztBQUVBO0FB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UjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw2Q0FBNkMsU0FBUztBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTOztBQUVUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQUFnRzs7QUFFaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7QUFFWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFOztBQUVYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLGdGQUFnRjs7QUFFeEg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRFQUE0RTs7QUFFNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87OztBQUdQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTOztBQUVUO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMseUdBQXlHOztBQUUxSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsc0NBQXNDO0FBQ3RDO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLE9BQU87OztBQUdQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLGlDQUFpQyw2REFBNkQ7O0FBRTlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsa0NBQWtDLEtBQUs7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGdEQUFnRDs7O0FBR2hEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBLGtJQUFrSTs7QUFFbEk7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsS0FBSztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsY0FBYzs7QUFFOUQsQ0FBQztBQUNEIiwiZmlsZSI6IjIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gICogQm9vdHN0cmFwIHY0LjEuMiAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE4IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJ3BvcHBlci5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnanF1ZXJ5JywgJ3BvcHBlci5qcyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuYm9vdHN0cmFwID0ge30pLGdsb2JhbC5qUXVlcnksZ2xvYmFsLlBvcHBlcikpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsJCxQb3BwZXIpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICQgPSAkICYmICQuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSA/ICRbJ2RlZmF1bHQnXSA6ICQ7XG4gIFBvcHBlciA9IFBvcHBlciAmJiBQb3BwZXIuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSA/IFBvcHBlclsnZGVmYXVsdCddIDogUG9wcGVyO1xuXG4gIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gICAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbiAgfVxuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IHV0aWwuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIFV0aWwgPSBmdW5jdGlvbiAoJCQkMSkge1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIFByaXZhdGUgVHJhbnNpdGlvbkVuZCBIZWxwZXJzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuICAgIHZhciBNQVhfVUlEID0gMTAwMDAwMDtcbiAgICB2YXIgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwOyAvLyBTaG91dG91dCBBbmd1c0Nyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5cbiAgICBmdW5jdGlvbiB0b1R5cGUob2JqKSB7XG4gICAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiaW5kVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICAgIGRlbGVnYXRlVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICAgIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCQkJDEoZXZlbnQudGFyZ2V0KS5pcyh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kRW11bGF0b3IoZHVyYXRpb24pIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICQkJDEodGhpcykub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgVXRpbC50cmlnZ2VyVHJhbnNpdGlvbkVuZChfdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGR1cmF0aW9uKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCkge1xuICAgICAgJCQkMS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IHRyYW5zaXRpb25FbmRFbXVsYXRvcjtcbiAgICAgICQkJDEuZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJT05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBQdWJsaWMgVXRpbCBBcGlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICB2YXIgVXRpbCA9IHtcbiAgICAgIFRSQU5TSVRJT05fRU5EOiAnYnNUcmFuc2l0aW9uRW5kJyxcbiAgICAgIGdldFVJRDogZnVuY3Rpb24gZ2V0VUlEKHByZWZpeCkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpOyAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgICAgIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpO1xuXG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgICB9LFxuICAgICAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudDogZnVuY3Rpb24gZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpO1xuXG4gICAgICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgICAgIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50OiBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG5cblxuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gJCQkMShlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pOyAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG5cbiAgICAgICAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IC8vIElmIG11bHRpcGxlIGR1cmF0aW9ucyBhcmUgZGVmaW5lZCwgdGFrZSB0aGUgZmlyc3RcblxuXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG4gICAgICB9LFxuICAgICAgcmVmbG93OiBmdW5jdGlvbiByZWZsb3coZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICB9LFxuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcbiAgICAgICAgJCQkMShlbGVtZW50KS50cmlnZ2VyKFRSQU5TSVRJT05fRU5EKTtcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgaW4gdjVcbiAgICAgIHN1cHBvcnRzVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihUUkFOU0lUSU9OX0VORCk7XG4gICAgICB9LFxuICAgICAgaXNFbGVtZW50OiBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7XG4gICAgICAgIHJldHVybiAob2JqWzBdIHx8IG9iaikubm9kZVR5cGU7XG4gICAgICB9LFxuICAgICAgdHlwZUNoZWNrQ29uZmlnOiBmdW5jdGlvbiB0eXBlQ2hlY2tDb25maWcoY29tcG9uZW50TmFtZSwgY29uZmlnLCBjb25maWdUeXBlcykge1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBjb25maWdUeXBlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnVHlwZXMsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBjb25maWdUeXBlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlICYmIFV0aWwuaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVlVHlwZSkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbXBvbmVudE5hbWUudG9VcHBlckNhc2UoKSArIFwiOiBcIiArIChcIk9wdGlvbiBcXFwiXCIgKyBwcm9wZXJ0eSArIFwiXFxcIiBwcm92aWRlZCB0eXBlIFxcXCJcIiArIHZhbHVlVHlwZSArIFwiXFxcIiBcIikgKyAoXCJidXQgZXhwZWN0ZWQgdHlwZSBcXFwiXCIgKyBleHBlY3RlZFR5cGVzICsgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpO1xuICAgIHJldHVybiBVdGlsO1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IGFsZXJ0LmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBBbGVydCA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAnYWxlcnQnO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMuYWxlcnQnO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBESVNNSVNTOiAnW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJ1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgQ0xPU0U6IFwiY2xvc2VcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMT1NFRDogXCJjbG9zZWRcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVlcbiAgICB9O1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBBTEVSVDogJ2FsZXJ0JyxcbiAgICAgIEZBREU6ICdmYWRlJyxcbiAgICAgIFNIT1c6ICdzaG93J1xuICAgICAgLyoqXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG5cbiAgICB9O1xuXG4gICAgdmFyIEFsZXJ0ID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gQWxlcnQoZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBBbGVydC5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoZWxlbWVudCkge1xuICAgICAgICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xuXG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLl9nZXRSb290RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IHRoaXMuX3RyaWdnZXJDbG9zZUV2ZW50KHJvb3RFbGVtZW50KTtcblxuICAgICAgICBpZiAoY3VzdG9tRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW1vdmVFbGVtZW50KHJvb3RFbGVtZW50KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgJCQkMS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICB9OyAvLyBQcml2YXRlXG5cblxuICAgICAgX3Byb3RvLl9nZXRSb290RWxlbWVudCA9IGZ1bmN0aW9uIF9nZXRSb290RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgdmFyIHBhcmVudCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQgPSAkJCQxKGVsZW1lbnQpLmNsb3Nlc3QoXCIuXCIgKyBDbGFzc05hbWUuQUxFUlQpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fdHJpZ2dlckNsb3NlRXZlbnQgPSBmdW5jdGlvbiBfdHJpZ2dlckNsb3NlRXZlbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgY2xvc2VFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuQ0xPU0UpO1xuICAgICAgICAkJCQxKGVsZW1lbnQpLnRyaWdnZXIoY2xvc2VFdmVudCk7XG4gICAgICAgIHJldHVybiBjbG9zZUV2ZW50O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9yZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24gX3JlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICQkJDEoZWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuXG4gICAgICAgIGlmICghJCQkMShlbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAgICAgICB0aGlzLl9kZXN0cm95RWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAkJCQxKGVsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX2Rlc3Ryb3lFbGVtZW50KGVsZW1lbnQsIGV2ZW50KTtcbiAgICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZGVzdHJveUVsZW1lbnQgPSBmdW5jdGlvbiBfZGVzdHJveUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICAkJCQxKGVsZW1lbnQpLmRldGFjaCgpLnRyaWdnZXIoRXZlbnQuQ0xPU0VEKS5yZW1vdmUoKTtcbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgJGVsZW1lbnQgPSAkJCQxKHRoaXMpO1xuICAgICAgICAgIHZhciBkYXRhID0gJGVsZW1lbnQuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgQWxlcnQodGhpcyk7XG4gICAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29uZmlnID09PSAnY2xvc2UnKSB7XG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIEFsZXJ0Ll9oYW5kbGVEaXNtaXNzID0gZnVuY3Rpb24gX2hhbmRsZURpc21pc3MoYWxlcnRJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFsZXJ0SW5zdGFuY2UuY2xvc2UodGhpcyk7XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBfY3JlYXRlQ2xhc3MoQWxlcnQsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9XSk7XG5cbiAgICAgIHJldHVybiBBbGVydDtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuXG4gICAgJCQkMShkb2N1bWVudCkub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRJU01JU1MsIEFsZXJ0Ll9oYW5kbGVEaXNtaXNzKG5ldyBBbGVydCgpKSk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgICAkJCQxLmZuW05BTUVdID0gQWxlcnQuX2pRdWVyeUludGVyZmFjZTtcbiAgICAkJCQxLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gQWxlcnQ7XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBBbGVydDtcbiAgfSgkKTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwICh2NC4xLjIpOiBidXR0b24uanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIEJ1dHRvbiA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAnYnV0dG9uJztcbiAgICB2YXIgVkVSU0lPTiA9ICc0LjEuMic7XG4gICAgdmFyIERBVEFfS0VZID0gJ2JzLmJ1dHRvbic7XG4gICAgdmFyIEVWRU5UX0tFWSA9IFwiLlwiICsgREFUQV9LRVk7XG4gICAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICAgIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkJCQxLmZuW05BTUVdO1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBBQ1RJVkU6ICdhY3RpdmUnLFxuICAgICAgQlVUVE9OOiAnYnRuJyxcbiAgICAgIEZPQ1VTOiAnZm9jdXMnXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBEQVRBX1RPR0dMRV9DQVJST1Q6ICdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxcbiAgICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScsXG4gICAgICBJTlBVVDogJ2lucHV0JyxcbiAgICAgIEFDVElWRTogJy5hY3RpdmUnLFxuICAgICAgQlVUVE9OOiAnLmJ0bidcbiAgICB9O1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVksXG4gICAgICBGT0NVU19CTFVSX0RBVEFfQVBJOiBcImZvY3VzXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVkgKyBcIiBcIiArIChcImJsdXJcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWSlcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBCdXR0b24gPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBCdXR0b24oZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBCdXR0b24ucHJvdG90eXBlO1xuXG4gICAgICAvLyBQdWJsaWNcbiAgICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICAgIHZhciB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlO1xuICAgICAgICB2YXIgYWRkQXJpYVByZXNzZWQgPSB0cnVlO1xuICAgICAgICB2YXIgcm9vdEVsZW1lbnQgPSAkJCQxKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoU2VsZWN0b3IuREFUQV9UT0dHTEUpWzBdO1xuXG4gICAgICAgIGlmIChyb290RWxlbWVudCkge1xuICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5JTlBVVCk7XG5cbiAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGVja2VkICYmIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZS5BQ1RJVkUpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckNoYW5nZUV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSByb290RWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkFDVElWRSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgJCQkMShhY3RpdmVFbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykgfHwgcm9vdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICAgICAgJCQkMShpbnB1dCkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBhZGRBcmlhUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRBcmlhUHJlc3NlZCkge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAhdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lLkFDVElWRSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2VFdmVudCkge1xuICAgICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgJCQkMS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICB9OyAvLyBTdGF0aWNcblxuXG4gICAgICBCdXR0b24uX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBkYXRhID0gJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBCdXR0b24odGhpcyk7XG4gICAgICAgICAgICAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb25maWcgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKEJ1dHRvbiwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIEJ1dHRvbjtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuXG4gICAgJCQkMShkb2N1bWVudCkub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFX0NBUlJPVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdmFyIGJ1dHRvbiA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKCEkJCQxKGJ1dHRvbikuaGFzQ2xhc3MoQ2xhc3NOYW1lLkJVVFRPTikpIHtcbiAgICAgICAgYnV0dG9uID0gJCQkMShidXR0b24pLmNsb3Nlc3QoU2VsZWN0b3IuQlVUVE9OKTtcbiAgICAgIH1cblxuICAgICAgQnV0dG9uLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkJCQxKGJ1dHRvbiksICd0b2dnbGUnKTtcbiAgICB9KS5vbihFdmVudC5GT0NVU19CTFVSX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1RPR0dMRV9DQVJST1QsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGJ1dHRvbiA9ICQkJDEoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFNlbGVjdG9yLkJVVFRPTilbMF07XG4gICAgICAkJCQxKGJ1dHRvbikudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lLkZPQ1VTLCAvXmZvY3VzKGluKT8kLy50ZXN0KGV2ZW50LnR5cGUpKTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBqUXVlcnlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICAgICQkJDEuZm5bTkFNRV0gPSBCdXR0b24uX2pRdWVyeUludGVyZmFjZTtcbiAgICAkJCQxLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gQnV0dG9uO1xuXG4gICAgJCQkMS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgJCQkMS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgIHJldHVybiBCdXR0b24uX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEJ1dHRvbjtcbiAgfSgkKTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwICh2NC4xLjIpOiBjYXJvdXNlbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoJCQkMSkge1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENvbnN0YW50c1xuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuICAgIHZhciBOQU1FID0gJ2Nhcm91c2VsJztcbiAgICB2YXIgVkVSU0lPTiA9ICc0LjEuMic7XG4gICAgdmFyIERBVEFfS0VZID0gJ2JzLmNhcm91c2VsJztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gICAgdmFyIEpRVUVSWV9OT19DT05GTElDVCA9ICQkJDEuZm5bTkFNRV07XG4gICAgdmFyIEFSUk9XX0xFRlRfS0VZQ09ERSA9IDM3OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBsZWZ0IGFycm93IGtleVxuXG4gICAgdmFyIEFSUk9XX1JJR0hUX0tFWUNPREUgPSAzOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgcmlnaHQgYXJyb3cga2V5XG5cbiAgICB2YXIgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMDsgLy8gVGltZSBmb3IgbW91c2UgY29tcGF0IGV2ZW50cyB0byBmaXJlIGFmdGVyIHRvdWNoXG5cbiAgICB2YXIgRGVmYXVsdCA9IHtcbiAgICAgIGludGVydmFsOiA1MDAwLFxuICAgICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgICBzbGlkZTogZmFsc2UsXG4gICAgICBwYXVzZTogJ2hvdmVyJyxcbiAgICAgIHdyYXA6IHRydWVcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICAgIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gICAgICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICAgICAgc2xpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgICAgIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gICAgICB3cmFwOiAnYm9vbGVhbidcbiAgICB9O1xuICAgIHZhciBEaXJlY3Rpb24gPSB7XG4gICAgICBORVhUOiAnbmV4dCcsXG4gICAgICBQUkVWOiAncHJldicsXG4gICAgICBMRUZUOiAnbGVmdCcsXG4gICAgICBSSUdIVDogJ3JpZ2h0J1xuICAgIH07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgU0xJREU6IFwic2xpZGVcIiArIEVWRU5UX0tFWSxcbiAgICAgIFNMSUQ6IFwic2xpZFwiICsgRVZFTlRfS0VZLFxuICAgICAgS0VZRE9XTjogXCJrZXlkb3duXCIgKyBFVkVOVF9LRVksXG4gICAgICBNT1VTRUVOVEVSOiBcIm1vdXNlZW50ZXJcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFTEVBVkU6IFwibW91c2VsZWF2ZVwiICsgRVZFTlRfS0VZLFxuICAgICAgVE9VQ0hFTkQ6IFwidG91Y2hlbmRcIiArIEVWRU5UX0tFWSxcbiAgICAgIExPQURfREFUQV9BUEk6IFwibG9hZFwiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZLFxuICAgICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWVxuICAgIH07XG4gICAgdmFyIENsYXNzTmFtZSA9IHtcbiAgICAgIENBUk9VU0VMOiAnY2Fyb3VzZWwnLFxuICAgICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICAgIFNMSURFOiAnc2xpZGUnLFxuICAgICAgUklHSFQ6ICdjYXJvdXNlbC1pdGVtLXJpZ2h0JyxcbiAgICAgIExFRlQ6ICdjYXJvdXNlbC1pdGVtLWxlZnQnLFxuICAgICAgTkVYVDogJ2Nhcm91c2VsLWl0ZW0tbmV4dCcsXG4gICAgICBQUkVWOiAnY2Fyb3VzZWwtaXRlbS1wcmV2JyxcbiAgICAgIElURU06ICdjYXJvdXNlbC1pdGVtJ1xuICAgIH07XG4gICAgdmFyIFNlbGVjdG9yID0ge1xuICAgICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgICBBQ1RJVkVfSVRFTTogJy5hY3RpdmUuY2Fyb3VzZWwtaXRlbScsXG4gICAgICBJVEVNOiAnLmNhcm91c2VsLWl0ZW0nLFxuICAgICAgTkVYVF9QUkVWOiAnLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldicsXG4gICAgICBJTkRJQ0FUT1JTOiAnLmNhcm91c2VsLWluZGljYXRvcnMnLFxuICAgICAgREFUQV9TTElERTogJ1tkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dJyxcbiAgICAgIERBVEFfUklERTogJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXSdcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBDYXJvdXNlbCA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIENhcm91c2VsKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gJCQkMShlbGVtZW50KVswXTtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuSU5ESUNBVE9SUyk7XG5cbiAgICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBDYXJvdXNlbC5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLm5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzU2xpZGluZykge1xuICAgICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5ORVhUKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLm5leHRXaGVuVmlzaWJsZSA9IGZ1bmN0aW9uIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAgICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgICAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVudCBpc24ndCB2aXNpYmxlXG4gICAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmICQkJDEodGhpcy5fZWxlbWVudCkuaXMoJzp2aXNpYmxlJykgJiYgJCQkMSh0aGlzLl9lbGVtZW50KS5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnByZXYgPSBmdW5jdGlvbiBwcmV2KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzU2xpZGluZykge1xuICAgICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5QUkVWKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHRoaXMuX2lzUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuTkVYVF9QUkVWKSkge1xuICAgICAgICAgIFV0aWwudHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5jeWNsZSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY3ljbGUgPSBmdW5jdGlvbiBjeWNsZShldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pbnRlcnZhbCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID8gdGhpcy5uZXh0V2hlblZpc2libGUgOiB0aGlzLm5leHQpLmJpbmQodGhpcyksIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by50byA9IGZ1bmN0aW9uIHRvKGluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5BQ1RJVkVfSVRFTSk7XG5cbiAgICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChpbmRleCA+IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub25lKEV2ZW50LlNMSUQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy50byhpbmRleCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGluZGV4ID4gYWN0aXZlSW5kZXggPyBEaXJlY3Rpb24uTkVYVCA6IERpcmVjdGlvbi5QUkVWO1xuXG4gICAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZKTtcbiAgICAgICAgJCQkMS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IG51bGw7XG4gICAgICB9OyAvLyBQcml2YXRlXG5cblxuICAgICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBjb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBEZWZhdWx0LCBjb25maWcpO1xuICAgICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fYWRkRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LktFWURPV04sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5fa2V5ZG93bihldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbihFdmVudC5NT1VTRUVOVEVSLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIucGF1c2UoZXZlbnQpO1xuICAgICAgICAgIH0pLm9uKEV2ZW50Lk1PVVNFTEVBVkUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5jeWNsZShldmVudCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuICAgICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbihFdmVudC5UT1VDSEVORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBfdGhpczIucGF1c2UoKTtcblxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLnRvdWNoVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpczIudG91Y2hUaW1lb3V0KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF90aGlzMi50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuY3ljbGUoZXZlbnQpO1xuICAgICAgICAgICAgICB9LCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgX3RoaXMyLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2tleWRvd24gPSBmdW5jdGlvbiBfa2V5ZG93bihldmVudCkge1xuICAgICAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgY2FzZSBBUlJPV19MRUZUX0tFWUNPREU6XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5wcmV2KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgQVJST1dfUklHSFRfS0VZQ09ERTpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBlbGVtZW50ICYmIGVsZW1lbnQucGFyZW50Tm9kZSA/IFtdLnNsaWNlLmNhbGwoZWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuSVRFTSkpIDogW107XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcy5pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRJdGVtQnlEaXJlY3Rpb24gPSBmdW5jdGlvbiBfZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudCkge1xuICAgICAgICB2YXIgaXNOZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVDtcbiAgICAgICAgdmFyIGlzUHJldkRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBsYXN0SXRlbUluZGV4ID0gdGhpcy5faXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIGlzR29pbmdUb1dyYXAgPSBpc1ByZXZEaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IDAgfHwgaXNOZXh0RGlyZWN0aW9uICYmIGFjdGl2ZUluZGV4ID09PSBsYXN0SXRlbUluZGV4O1xuXG4gICAgICAgIGlmIChpc0dvaW5nVG9XcmFwICYmICF0aGlzLl9jb25maWcud3JhcCkge1xuICAgICAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFViA/IC0xIDogMTtcbiAgICAgICAgdmFyIGl0ZW1JbmRleCA9IChhY3RpdmVJbmRleCArIGRlbHRhKSAlIHRoaXMuX2l0ZW1zLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGl0ZW1JbmRleCA9PT0gLTEgPyB0aGlzLl9pdGVtc1t0aGlzLl9pdGVtcy5sZW5ndGggLSAxXSA6IHRoaXMuX2l0ZW1zW2l0ZW1JbmRleF07XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3RyaWdnZXJTbGlkZUV2ZW50ID0gZnVuY3Rpb24gX3RyaWdnZXJTbGlkZUV2ZW50KHJlbGF0ZWRUYXJnZXQsIGV2ZW50RGlyZWN0aW9uTmFtZSkge1xuICAgICAgICB2YXIgdGFyZ2V0SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgocmVsYXRlZFRhcmdldCk7XG5cbiAgICAgICAgdmFyIGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuQUNUSVZFX0lURU0pKTtcblxuICAgICAgICB2YXIgc2xpZGVFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuU0xJREUsIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0LFxuICAgICAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgICAgIGZyb206IGZyb21JbmRleCxcbiAgICAgICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICAgICAgfSk7XG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzbGlkZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHNsaWRlRXZlbnQ7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQgPSBmdW5jdGlvbiBfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgICAgIHZhciBpbmRpY2F0b3JzID0gW10uc2xpY2UuY2FsbCh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkFDVElWRSkpO1xuICAgICAgICAgICQkJDEoaW5kaWNhdG9ycykucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG5cbiAgICAgICAgICB2YXIgbmV4dEluZGljYXRvciA9IHRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleChlbGVtZW50KV07XG5cbiAgICAgICAgICBpZiAobmV4dEluZGljYXRvcikge1xuICAgICAgICAgICAgJCQkMShuZXh0SW5kaWNhdG9yKS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2xpZGUgPSBmdW5jdGlvbiBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkFDVElWRV9JVEVNKTtcblxuICAgICAgICB2YXIgYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudCAmJiB0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KTtcblxuICAgICAgICB2YXIgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudCk7XG5cbiAgICAgICAgdmFyIGlzQ3ljbGluZyA9IEJvb2xlYW4odGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB2YXIgZGlyZWN0aW9uYWxDbGFzc05hbWU7XG4gICAgICAgIHZhciBvcmRlckNsYXNzTmFtZTtcbiAgICAgICAgdmFyIGV2ZW50RGlyZWN0aW9uTmFtZTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICAgIGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gQ2xhc3NOYW1lLkxFRlQ7XG4gICAgICAgICAgb3JkZXJDbGFzc05hbWUgPSBDbGFzc05hbWUuTkVYVDtcbiAgICAgICAgICBldmVudERpcmVjdGlvbk5hbWUgPSBEaXJlY3Rpb24uTEVGVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZS5SSUdIVDtcbiAgICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZS5QUkVWO1xuICAgICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5SSUdIVDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0RWxlbWVudCAmJiAkJCQxKG5leHRFbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuQUNUSVZFKSkge1xuICAgICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzbGlkZUV2ZW50ID0gdGhpcy5fdHJpZ2dlclNsaWRlRXZlbnQobmV4dEVsZW1lbnQsIGV2ZW50RGlyZWN0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudCk7XG5cbiAgICAgICAgdmFyIHNsaWRFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuU0xJRCwge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgICAgIGZyb206IGFjdGl2ZUVsZW1lbnRJbmRleCxcbiAgICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuU0xJREUpKSB7XG4gICAgICAgICAgJCQkMShuZXh0RWxlbWVudCkuYWRkQ2xhc3Mob3JkZXJDbGFzc05hbWUpO1xuICAgICAgICAgIFV0aWwucmVmbG93KG5leHRFbGVtZW50KTtcbiAgICAgICAgICAkJCQxKGFjdGl2ZUVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICAkJCQxKG5leHRFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYWN0aXZlRWxlbWVudCk7XG4gICAgICAgICAgJCQkMShhY3RpdmVFbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCQkMShuZXh0RWxlbWVudCkucmVtb3ZlQ2xhc3MoZGlyZWN0aW9uYWxDbGFzc05hbWUgKyBcIiBcIiArIG9yZGVyQ2xhc3NOYW1lKS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICAgICQkJDEoYWN0aXZlRWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSArIFwiIFwiICsgb3JkZXJDbGFzc05hbWUgKyBcIiBcIiArIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgIF90aGlzMy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICQkJDEoX3RoaXMzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQkJDEoYWN0aXZlRWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgICAgJCQkMShuZXh0RWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG4gICAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICAgICAgdGhpcy5jeWNsZSgpO1xuICAgICAgICB9XG4gICAgICB9OyAvLyBTdGF0aWNcblxuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgdmFyIF9jb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBEZWZhdWx0LCAkJCQxKHRoaXMpLmRhdGEoKSk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIF9jb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBfY29uZmlnLCBjb25maWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGU7XG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgQ2Fyb3VzZWwodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgICAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZGF0YS50byhjb25maWcpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVthY3Rpb25dID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGFjdGlvbiArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVthY3Rpb25dKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChfY29uZmlnLmludGVydmFsKSB7XG4gICAgICAgICAgICBkYXRhLnBhdXNlKCk7XG4gICAgICAgICAgICBkYXRhLmN5Y2xlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpO1xuXG4gICAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGFyZ2V0ID0gJCQkMShzZWxlY3RvcilbMF07XG5cbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgISQkJDEodGFyZ2V0KS5oYXNDbGFzcyhDbGFzc05hbWUuQ0FST1VTRUwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sICQkJDEodGFyZ2V0KS5kYXRhKCksICQkJDEodGhpcykuZGF0YSgpKTtcblxuICAgICAgICB2YXIgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlLXRvJyk7XG5cbiAgICAgICAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICAgICAgICBjb25maWcuaW50ZXJ2YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkJCQxKHRhcmdldCksIGNvbmZpZyk7XG5cbiAgICAgICAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICAgICAgICAkJCQxKHRhcmdldCkuZGF0YShEQVRBX0tFWSkudG8oc2xpZGVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgX2NyZWF0ZUNsYXNzKENhcm91c2VsLCBudWxsLCBbe1xuICAgICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gQ2Fyb3VzZWw7XG4gICAgfSgpO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1NMSURFLCBDYXJvdXNlbC5fZGF0YUFwaUNsaWNrSGFuZGxlcik7XG4gICAgJCQkMSh3aW5kb3cpLm9uKEV2ZW50LkxPQURfREFUQV9BUEksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYXJvdXNlbHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuREFUQV9SSURFKSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYXJvdXNlbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyICRjYXJvdXNlbCA9ICQkJDEoY2Fyb3VzZWxzW2ldKTtcblxuICAgICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJGNhcm91c2VsLCAkY2Fyb3VzZWwuZGF0YSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBqUXVlcnlcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICAgICQkJDEuZm5bTkFNRV0gPSBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBDYXJvdXNlbDtcblxuICAgICQkJDEuZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICQkJDEuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICByZXR1cm4gQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIENhcm91c2VsO1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IGNvbGxhcHNlLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBDb2xsYXBzZSA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAnY29sbGFwc2UnO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMuY29sbGFwc2UnO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgRGVmYXVsdCA9IHtcbiAgICAgIHRvZ2dsZTogdHJ1ZSxcbiAgICAgIHBhcmVudDogJydcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICAgIHRvZ2dsZTogJ2Jvb2xlYW4nLFxuICAgICAgcGFyZW50OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgICB9O1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIFNIT1c6IFwic2hvd1wiICsgRVZFTlRfS0VZLFxuICAgICAgU0hPV046IFwic2hvd25cIiArIEVWRU5UX0tFWSxcbiAgICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZLFxuICAgICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWVxuICAgIH07XG4gICAgdmFyIENsYXNzTmFtZSA9IHtcbiAgICAgIFNIT1c6ICdzaG93JyxcbiAgICAgIENPTExBUFNFOiAnY29sbGFwc2UnLFxuICAgICAgQ09MTEFQU0lORzogJ2NvbGxhcHNpbmcnLFxuICAgICAgQ09MTEFQU0VEOiAnY29sbGFwc2VkJ1xuICAgIH07XG4gICAgdmFyIERpbWVuc2lvbiA9IHtcbiAgICAgIFdJRFRIOiAnd2lkdGgnLFxuICAgICAgSEVJR0hUOiAnaGVpZ2h0J1xuICAgIH07XG4gICAgdmFyIFNlbGVjdG9yID0ge1xuICAgICAgQUNUSVZFUzogJy5zaG93LCAuY29sbGFwc2luZycsXG4gICAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ1xuICAgICAgLyoqXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG5cbiAgICB9O1xuXG4gICAgdmFyIENvbGxhcHNlID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gQ29sbGFwc2UoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9ICQkJDEubWFrZUFycmF5KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIl1baHJlZj1cXFwiI1wiICsgZWxlbWVudC5pZCArIFwiXFxcIl0sXCIgKyAoXCJbZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIl1bZGF0YS10YXJnZXQ9XFxcIiNcIiArIGVsZW1lbnQuaWQgKyBcIlxcXCJdXCIpKSk7XG4gICAgICAgIHZhciB0b2dnbGVMaXN0ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkRBVEFfVE9HR0xFKSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvZ2dsZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlbSA9IHRvZ2dsZUxpc3RbaV07XG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pO1xuICAgICAgICAgIHZhciBmaWx0ZXJFbGVtZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGZ1bmN0aW9uIChmb3VuZEVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZEVsZW0gPT09IGVsZW1lbnQ7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChlbGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9jb25maWcucGFyZW50ID8gdGhpcy5fZ2V0UGFyZW50KCkgOiBudWxsO1xuXG4gICAgICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl90cmlnZ2VyQXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy50b2dnbGUpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgICB2YXIgX3Byb3RvID0gQ29sbGFwc2UucHJvdG90eXBlO1xuXG4gICAgICAvLyBQdWJsaWNcbiAgICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICAgIGlmICgkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3RpdmVzO1xuICAgICAgICB2YXIgYWN0aXZlc0RhdGE7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgICAgIGFjdGl2ZXMgPSBbXS5zbGljZS5jYWxsKHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkFDVElWRVMpKS5maWx0ZXIoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1wYXJlbnQnKSA9PT0gX3RoaXMuX2NvbmZpZy5wYXJlbnQ7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFjdGl2ZXMgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICAgICAgYWN0aXZlc0RhdGEgPSAkJCQxKGFjdGl2ZXMpLm5vdCh0aGlzLl9zZWxlY3RvcikuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlc0RhdGEgJiYgYWN0aXZlc0RhdGEuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFydEV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5TSE9XKTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHN0YXJ0RXZlbnQpO1xuXG4gICAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgICBDb2xsYXBzZS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCQkMShhY3RpdmVzKS5ub3QodGhpcy5fc2VsZWN0b3IpLCAnaGlkZScpO1xuXG4gICAgICAgICAgaWYgKCFhY3RpdmVzRGF0YSkge1xuICAgICAgICAgICAgJCQkMShhY3RpdmVzKS5kYXRhKERBVEFfS0VZLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG5cbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0UpLmFkZENsYXNzKENsYXNzTmFtZS5DT0xMQVBTSU5HKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICQkJDEodGhpcy5fdHJpZ2dlckFycmF5KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSk7XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgJCQkMShfdGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZS5DT0xMQVBTRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuICAgICAgICAgIF90aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcblxuICAgICAgICAgIF90aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpO1xuXG4gICAgICAgICAgJCQkMShfdGhpcy5fZWxlbWVudCkudHJpZ2dlcihFdmVudC5TSE9XTik7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSk7XG4gICAgICAgIHZhciBzY3JvbGxTaXplID0gXCJzY3JvbGxcIiArIGNhcGl0YWxpemVkRGltZW5zaW9uO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IHRoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV0gKyBcInB4XCI7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgISQkJDEodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkJCQxLkV2ZW50KEV2ZW50LkhJREUpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gdGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dICsgXCJweFwiO1xuICAgICAgICBVdGlsLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcyhDbGFzc05hbWUuQ09MTEFQU0lORykucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG4gICAgICAgIHZhciB0cmlnZ2VyQXJyYXlMZW5ndGggPSB0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoO1xuXG4gICAgICAgIGlmICh0cmlnZ2VyQXJyYXlMZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyQXJyYXlMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLl90cmlnZ2VyQXJyYXlbaV07XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgJGVsZW0gPSAkJCQxKFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpKTtcblxuICAgICAgICAgICAgICBpZiAoISRlbGVtLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgICAgICAgICAgICQkJDEodHJpZ2dlcikuYWRkQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFRCkuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgICBfdGhpczIuc2V0VHJhbnNpdGlvbmluZyhmYWxzZSk7XG5cbiAgICAgICAgICAkJCQxKF90aGlzMi5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZS5DT0xMQVBTRSkudHJpZ2dlcihFdmVudC5ISURERU4pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uc2V0VHJhbnNpdGlvbmluZyA9IGZ1bmN0aW9uIHNldFRyYW5zaXRpb25pbmcoaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGlzVHJhbnNpdGlvbmluZztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgJCQkMS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGw7XG4gICAgICB9OyAvLyBQcml2YXRlXG5cblxuICAgICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBjb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBEZWZhdWx0LCBjb25maWcpO1xuICAgICAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKTsgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcblxuICAgICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldERpbWVuc2lvbigpIHtcbiAgICAgICAgdmFyIGhhc1dpZHRoID0gJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhEaW1lbnNpb24uV0lEVEgpO1xuICAgICAgICByZXR1cm4gaGFzV2lkdGggPyBEaW1lbnNpb24uV0lEVEggOiBEaW1lbnNpb24uSEVJR0hUO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRQYXJlbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50KCkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgICB2YXIgcGFyZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnBhcmVudCkpIHtcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLl9jb25maWcucGFyZW50OyAvLyBJdCdzIGEgalF1ZXJ5IG9iamVjdFxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucGFyZW50LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnRbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VsZWN0b3IgPSBcIltkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiXVtkYXRhLXBhcmVudD1cXFwiXCIgKyB0aGlzLl9jb25maWcucGFyZW50ICsgXCJcXFwiXVwiO1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBbXS5zbGljZS5jYWxsKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAgICQkJDEoY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGksIGVsZW1lbnQpIHtcbiAgICAgICAgICBfdGhpczMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhDb2xsYXBzZS5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQoZWxlbWVudCksIFtlbGVtZW50XSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MgPSBmdW5jdGlvbiBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdnZXJBcnJheSkge1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIHZhciBpc09wZW4gPSAkJCQxKGVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgICAgIGlmICh0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAkJCQxKHRyaWdnZXJBcnJheSkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lLkNPTExBUFNFRCwgIWlzT3BlbikuYXR0cignYXJpYS1leHBhbmRlZCcsIGlzT3Blbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9OyAvLyBTdGF0aWNcblxuXG4gICAgICBDb2xsYXBzZS5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0VGFyZ2V0RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgJHRoaXMgPSAkJCQxKHRoaXMpO1xuICAgICAgICAgIHZhciBkYXRhID0gJHRoaXMuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsICR0aGlzLmRhdGEoKSwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuXG4gICAgICAgICAgaWYgKCFkYXRhICYmIF9jb25maWcudG9nZ2xlICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgICAkdGhpcy5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhDb2xsYXBzZSwgbnVsbCwgW3tcbiAgICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIFZFUlNJT047XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIENvbGxhcHNlO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxKGRvY3VtZW50KS5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICAgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciAkdHJpZ2dlciA9ICQkJDEodGhpcyk7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG4gICAgICB2YXIgc2VsZWN0b3JzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAkJCQxKHNlbGVjdG9ycykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkdGFyZ2V0ID0gJCQkMSh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGFyZ2V0LmRhdGEoREFUQV9LRVkpO1xuICAgICAgICB2YXIgY29uZmlnID0gZGF0YSA/ICd0b2dnbGUnIDogJHRyaWdnZXIuZGF0YSgpO1xuXG4gICAgICAgIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkdGFyZ2V0LCBjb25maWcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgICAkJCQxLmZuW05BTUVdID0gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgICAkJCQxLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gQ29sbGFwc2U7XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBDb2xsYXBzZTtcbiAgfSgkKTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwICh2NC4xLjIpOiBkcm9wZG93bi5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgRHJvcGRvd24gPSBmdW5jdGlvbiAoJCQkMSkge1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENvbnN0YW50c1xuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuICAgIHZhciBOQU1FID0gJ2Ryb3Bkb3duJztcbiAgICB2YXIgVkVSU0lPTiA9ICc0LjEuMic7XG4gICAgdmFyIERBVEFfS0VZID0gJ2JzLmRyb3Bkb3duJztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gICAgdmFyIEpRVUVSWV9OT19DT05GTElDVCA9ICQkJDEuZm5bTkFNRV07XG4gICAgdmFyIEVTQ0FQRV9LRVlDT0RFID0gMjc7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIEVzY2FwZSAoRXNjKSBrZXlcblxuICAgIHZhciBTUEFDRV9LRVlDT0RFID0gMzI7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHNwYWNlIGtleVxuXG4gICAgdmFyIFRBQl9LRVlDT0RFID0gOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgdGFiIGtleVxuXG4gICAgdmFyIEFSUk9XX1VQX0tFWUNPREUgPSAzODsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgdXAgYXJyb3cga2V5XG5cbiAgICB2YXIgQVJST1dfRE9XTl9LRVlDT0RFID0gNDA7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGRvd24gYXJyb3cga2V5XG5cbiAgICB2YXIgUklHSFRfTU9VU0VfQlVUVE9OX1dISUNIID0gMzsgLy8gTW91c2VFdmVudC53aGljaCB2YWx1ZSBmb3IgdGhlIHJpZ2h0IGJ1dHRvbiAoYXNzdW1pbmcgYSByaWdodC1oYW5kZWQgbW91c2UpXG5cbiAgICB2YXIgUkVHRVhQX0tFWURPV04gPSBuZXcgUmVnRXhwKEFSUk9XX1VQX0tFWUNPREUgKyBcInxcIiArIEFSUk9XX0RPV05fS0VZQ09ERSArIFwifFwiICsgRVNDQVBFX0tFWUNPREUpO1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZLFxuICAgICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZLFxuICAgICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZLFxuICAgICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVksXG4gICAgICBLRVlET1dOX0RBVEFfQVBJOiBcImtleWRvd25cIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWSxcbiAgICAgIEtFWVVQX0RBVEFfQVBJOiBcImtleXVwXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVlcbiAgICB9O1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBESVNBQkxFRDogJ2Rpc2FibGVkJyxcbiAgICAgIFNIT1c6ICdzaG93JyxcbiAgICAgIERST1BVUDogJ2Ryb3B1cCcsXG4gICAgICBEUk9QUklHSFQ6ICdkcm9wcmlnaHQnLFxuICAgICAgRFJPUExFRlQ6ICdkcm9wbGVmdCcsXG4gICAgICBNRU5VUklHSFQ6ICdkcm9wZG93bi1tZW51LXJpZ2h0JyxcbiAgICAgIE1FTlVMRUZUOiAnZHJvcGRvd24tbWVudS1sZWZ0JyxcbiAgICAgIFBPU0lUSU9OX1NUQVRJQzogJ3Bvc2l0aW9uLXN0YXRpYydcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLFxuICAgICAgRk9STV9DSElMRDogJy5kcm9wZG93biBmb3JtJyxcbiAgICAgIE1FTlU6ICcuZHJvcGRvd24tbWVudScsXG4gICAgICBOQVZCQVJfTkFWOiAnLm5hdmJhci1uYXYnLFxuICAgICAgVklTSUJMRV9JVEVNUzogJy5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJ1xuICAgIH07XG4gICAgdmFyIEF0dGFjaG1lbnRNYXAgPSB7XG4gICAgICBUT1A6ICd0b3Atc3RhcnQnLFxuICAgICAgVE9QRU5EOiAndG9wLWVuZCcsXG4gICAgICBCT1RUT006ICdib3R0b20tc3RhcnQnLFxuICAgICAgQk9UVE9NRU5EOiAnYm90dG9tLWVuZCcsXG4gICAgICBSSUdIVDogJ3JpZ2h0LXN0YXJ0JyxcbiAgICAgIFJJR0hURU5EOiAncmlnaHQtZW5kJyxcbiAgICAgIExFRlQ6ICdsZWZ0LXN0YXJ0JyxcbiAgICAgIExFRlRFTkQ6ICdsZWZ0LWVuZCdcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0ID0ge1xuICAgICAgb2Zmc2V0OiAwLFxuICAgICAgZmxpcDogdHJ1ZSxcbiAgICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICAgIHJlZmVyZW5jZTogJ3RvZ2dsZScsXG4gICAgICBkaXNwbGF5OiAnZHluYW1pYydcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICAgIG9mZnNldDogJyhudW1iZXJ8c3RyaW5nfGZ1bmN0aW9uKScsXG4gICAgICBmbGlwOiAnYm9vbGVhbicsXG4gICAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgICAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50KScsXG4gICAgICBkaXNwbGF5OiAnc3RyaW5nJ1xuICAgICAgLyoqXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG5cbiAgICB9O1xuXG4gICAgdmFyIERyb3Bkb3duID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gRHJvcGRvd24oZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fbWVudSA9IHRoaXMuX2dldE1lbnVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG5cbiAgICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBEcm9wZG93bi5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQuZGlzYWJsZWQgfHwgJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRElTQUJMRUQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgICB2YXIgaXNBY3RpdmUgPSAkJCQxKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgICBEcm9wZG93bi5fY2xlYXJNZW51cygpO1xuXG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNob3dFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuU0hPVywgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICQkJDEocGFyZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgICAgaWYgKHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBEaXNhYmxlIHRvdGFsbHkgUG9wcGVyLmpzIGZvciBEcm9wZG93biBpbiBOYXZiYXJcblxuXG4gICAgICAgIGlmICghdGhpcy5faW5OYXZiYXIpIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDaGVjayBmb3IgUG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcCBkcm9wZG93biByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAncGFyZW50Jykge1xuICAgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHBhcmVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZTsgLy8gQ2hlY2sgaWYgaXQncyBqUXVlcnkgZWxlbWVudFxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIElmIGJvdW5kYXJ5IGlzIG5vdCBgc2Nyb2xsUGFyZW50YCwgdGhlbiBzZXQgcG9zaXRpb24gdG8gYHN0YXRpY2BcbiAgICAgICAgICAvLyB0byBhbGxvdyB0aGUgbWVudSB0byBcImVzY2FwZVwiIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllc1xuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMjQyNTFcblxuXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5ib3VuZGFyeSAhPT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgICAgICAgICQkJDEocGFyZW50KS5hZGRDbGFzcyhDbGFzc05hbWUuUE9TSVRJT05fU1RBVElDKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9wb3BwZXIgPSBuZXcgUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHRoaXMuX2dldFBvcHBlckNvbmZpZygpKTtcbiAgICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuXG5cbiAgICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAkJCQxKHBhcmVudCkuY2xvc2VzdChTZWxlY3Rvci5OQVZCQVJfTkFWKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAkJCQxKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQkJDEubm9vcCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgICAgICAkJCQxKHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcbiAgICAgICAgJCQkMShwYXJlbnQpLnRvZ2dsZUNsYXNzKENsYXNzTmFtZS5TSE9XKS50cmlnZ2VyKCQkJDEuRXZlbnQoRXZlbnQuU0hPV04sIHJlbGF0ZWRUYXJnZXQpKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgJCQkMS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX21lbnUgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuXG4gICAgICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2FkZEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub24oRXZlbnQuQ0xJQ0ssIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy50b2dnbGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldENvbmZpZyA9IGZ1bmN0aW9uIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwgJCQkMSh0aGlzLl9lbGVtZW50KS5kYXRhKCksIGNvbmZpZyk7XG4gICAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldE1lbnVFbGVtZW50ID0gZnVuY3Rpb24gX2dldE1lbnVFbGVtZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMuX21lbnUpIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fbWVudSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLk1FTlUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRQbGFjZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGxhY2VtZW50KCkge1xuICAgICAgICB2YXIgJHBhcmVudERyb3Bkb3duID0gJCQkMSh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUpO1xuICAgICAgICB2YXIgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT007IC8vIEhhbmRsZSBkcm9wdXBcblxuICAgICAgICBpZiAoJHBhcmVudERyb3Bkb3duLmhhc0NsYXNzKENsYXNzTmFtZS5EUk9QVVApKSB7XG4gICAgICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5UT1A7XG5cbiAgICAgICAgICBpZiAoJCQkMSh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUuTUVOVVJJR0hUKSkge1xuICAgICAgICAgICAgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5UT1BFTkQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhDbGFzc05hbWUuRFJPUFJJR0hUKSkge1xuICAgICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuUklHSFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoJHBhcmVudERyb3Bkb3duLmhhc0NsYXNzKENsYXNzTmFtZS5EUk9QTEVGVCkpIHtcbiAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLkxFRlQ7XG4gICAgICAgIH0gZWxzZSBpZiAoJCQkMSh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUuTUVOVVJJR0hUKSkge1xuICAgICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuQk9UVE9NRU5EO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZGV0ZWN0TmF2YmFyID0gZnVuY3Rpb24gX2RldGVjdE5hdmJhcigpIHtcbiAgICAgICAgcmV0dXJuICQkJDEodGhpcy5fZWxlbWVudCkuY2xvc2VzdCgnLm5hdmJhcicpLmxlbmd0aCA+IDA7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2dldFBvcHBlckNvbmZpZyA9IGZ1bmN0aW9uIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIHZhciBvZmZzZXRDb25mID0ge307XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb2Zmc2V0Q29uZi5mbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBkYXRhLm9mZnNldHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBkYXRhLm9mZnNldHMsIF90aGlzMi5fY29uZmlnLm9mZnNldChkYXRhLm9mZnNldHMpIHx8IHt9KTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2Zmc2V0Q29uZi5vZmZzZXQgPSB0aGlzLl9jb25maWcub2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBvcHBlckNvbmZpZyA9IHtcbiAgICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgICAgIG1vZGlmaWVyczoge1xuICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXRDb25mLFxuICAgICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0aGlzLl9jb25maWcuZmxpcFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZlbnRPdmVyZmxvdzoge1xuICAgICAgICAgICAgICBib3VuZGFyaWVzRWxlbWVudDogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBEaXNhYmxlIFBvcHBlci5qcyBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXlcblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICBwb3BwZXJDb25maWcubW9kaWZpZXJzLmFwcGx5U3R5bGUgPSB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9wcGVyQ29uZmlnO1xuICAgICAgfTsgLy8gU3RhdGljXG5cblxuICAgICAgRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBkYXRhID0gJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICAgJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIERyb3Bkb3duLl9jbGVhck1lbnVzID0gZnVuY3Rpb24gX2NsZWFyTWVudXMoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ICYmIChldmVudC53aGljaCA9PT0gUklHSFRfTU9VU0VfQlVUVE9OX1dISUNIIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQud2hpY2ggIT09IFRBQl9LRVlDT0RFKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b2dnbGVzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkRBVEFfVE9HR0xFKSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvZ2dsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRvZ2dsZXNbaV0pO1xuXG4gICAgICAgICAgdmFyIGNvbnRleHQgPSAkJCQxKHRvZ2dsZXNbaV0pLmRhdGEoREFUQV9LRVkpO1xuICAgICAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICAgICAgcmVsYXRlZFRhcmdldDogdG9nZ2xlc1tpXVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgcmVsYXRlZFRhcmdldC5jbGlja0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZHJvcGRvd25NZW51ID0gY29udGV4dC5fbWVudTtcblxuICAgICAgICAgIGlmICghJCQkMShwYXJlbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TSE9XKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50ICYmIChldmVudC50eXBlID09PSAnY2xpY2snICYmIC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQud2hpY2ggPT09IFRBQl9LRVlDT0RFKSAmJiAkJCQxLmNvbnRhaW5zKHBhcmVudCwgZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGhpZGVFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuSElERSwgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgJCQkMShwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAgICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuXG5cbiAgICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAkJCQxKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKCdtb3VzZW92ZXInLCBudWxsLCAkJCQxLm5vb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRvZ2dsZXNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgJCQkMShkcm9wZG93bk1lbnUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcbiAgICAgICAgICAkJCQxKHBhcmVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpLnRyaWdnZXIoJCQkMS5FdmVudChFdmVudC5ISURERU4sIHJlbGF0ZWRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50ID0gZnVuY3Rpb24gX2dldFBhcmVudEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHBhcmVudDtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudCB8fCBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuXG5cbiAgICAgIERyb3Bkb3duLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIgPSBmdW5jdGlvbiBfZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAgICAgLy8gIC0gQW5kIG5vdCBhIGtleSBpbiBSRUdFWFBfS0VZRE9XTiA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAgIC8vIElmIGlucHV0L3RleHRhcmVhOlxuICAgICAgICAvLyAgLSBJZiBzcGFjZSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgICAvLyAgLSBJZiBrZXkgaXMgb3RoZXIgdGhhbiBlc2NhcGVcbiAgICAgICAgLy8gICAgLSBJZiBrZXkgaXMgbm90IHVwIG9yIGRvd24gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpID8gZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggIT09IEVTQ0FQRV9LRVlDT0RFICYmIChldmVudC53aGljaCAhPT0gQVJST1dfRE9XTl9LRVlDT0RFICYmIGV2ZW50LndoaWNoICE9PSBBUlJPV19VUF9LRVlDT0RFIHx8ICQkJDEoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFNlbGVjdG9yLk1FTlUpLmxlbmd0aCkgOiAhUkVHRVhQX0tFWURPV04udGVzdChldmVudC53aGljaCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAkJCQxKHRoaXMpLmhhc0NsYXNzKENsYXNzTmFtZS5ESVNBQkxFRCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMpO1xuXG4gICAgICAgIHZhciBpc0FjdGl2ZSA9ICQkJDEocGFyZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG5cbiAgICAgICAgaWYgKCFpc0FjdGl2ZSAmJiAoZXZlbnQud2hpY2ggIT09IEVTQ0FQRV9LRVlDT0RFIHx8IGV2ZW50LndoaWNoICE9PSBTUEFDRV9LRVlDT0RFKSB8fCBpc0FjdGl2ZSAmJiAoZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVlDT0RFIHx8IGV2ZW50LndoaWNoID09PSBTUEFDRV9LRVlDT0RFKSkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUpIHtcbiAgICAgICAgICAgIHZhciB0b2dnbGUgPSBwYXJlbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5EQVRBX1RPR0dMRSk7XG4gICAgICAgICAgICAkJCQxKHRvZ2dsZSkudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkJCQxKHRoaXMpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZW1zID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5WSVNJQkxFX0lURU1TKSk7XG5cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcblxuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9XX1VQX0tFWUNPREUgJiYgaW5kZXggPiAwKSB7XG4gICAgICAgICAgLy8gVXBcbiAgICAgICAgICBpbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBBUlJPV19ET1dOX0tFWUNPREUgJiYgaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gRG93blxuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XG4gICAgICB9O1xuXG4gICAgICBfY3JlYXRlQ2xhc3MoRHJvcGRvd24sIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0VHlwZVwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIERyb3Bkb3duO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxKGRvY3VtZW50KS5vbihFdmVudC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1RPR0dMRSwgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oRXZlbnQuS0VZRE9XTl9EQVRBX0FQSSwgU2VsZWN0b3IuTUVOVSwgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEkgKyBcIiBcIiArIEV2ZW50LktFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5fY2xlYXJNZW51cykub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZS5jYWxsKCQkJDEodGhpcyksICd0b2dnbGUnKTtcbiAgICB9KS5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuRk9STV9DSElMRCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgICAkJCQxLmZuW05BTUVdID0gRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZTtcbiAgICAkJCQxLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gRHJvcGRvd247XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIERyb3Bkb3duLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBEcm9wZG93bjtcbiAgfSgkLCBQb3BwZXIpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IG1vZGFsLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBNb2RhbCA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAnbW9kYWwnO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMubW9kYWwnO1xuICAgIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICAgIHZhciBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgRVNDQVBFX0tFWUNPREUgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gICAgdmFyIERlZmF1bHQgPSB7XG4gICAgICBiYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiB0cnVlLFxuICAgICAgZm9jdXM6IHRydWUsXG4gICAgICBzaG93OiB0cnVlXG4gICAgfTtcbiAgICB2YXIgRGVmYXVsdFR5cGUgPSB7XG4gICAgICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICAgICAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgICAgIGZvY3VzOiAnYm9vbGVhbicsXG4gICAgICBzaG93OiAnYm9vbGVhbidcbiAgICB9O1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZLFxuICAgICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZLFxuICAgICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZLFxuICAgICAgRk9DVVNJTjogXCJmb2N1c2luXCIgKyBFVkVOVF9LRVksXG4gICAgICBSRVNJWkU6IFwicmVzaXplXCIgKyBFVkVOVF9LRVksXG4gICAgICBDTElDS19ESVNNSVNTOiBcImNsaWNrLmRpc21pc3NcIiArIEVWRU5UX0tFWSxcbiAgICAgIEtFWURPV05fRElTTUlTUzogXCJrZXlkb3duLmRpc21pc3NcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFVVBfRElTTUlTUzogXCJtb3VzZXVwLmRpc21pc3NcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFRE9XTl9ESVNNSVNTOiBcIm1vdXNlZG93bi5kaXNtaXNzXCIgKyBFVkVOVF9LRVksXG4gICAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gICAgfTtcbiAgICB2YXIgQ2xhc3NOYW1lID0ge1xuICAgICAgU0NST0xMQkFSX01FQVNVUkVSOiAnbW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUnLFxuICAgICAgQkFDS0RST1A6ICdtb2RhbC1iYWNrZHJvcCcsXG4gICAgICBPUEVOOiAnbW9kYWwtb3BlbicsXG4gICAgICBGQURFOiAnZmFkZScsXG4gICAgICBTSE9XOiAnc2hvdydcbiAgICB9O1xuICAgIHZhciBTZWxlY3RvciA9IHtcbiAgICAgIERJQUxPRzogJy5tb2RhbC1kaWFsb2cnLFxuICAgICAgREFUQV9UT0dHTEU6ICdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsXG4gICAgICBEQVRBX0RJU01JU1M6ICdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nLFxuICAgICAgRklYRURfQ09OVEVOVDogJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnLFxuICAgICAgU1RJQ0tZX0NPTlRFTlQ6ICcuc3RpY2t5LXRvcCdcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuXG4gICAgfTtcblxuICAgIHZhciBNb2RhbCA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIE1vZGFsKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2RpYWxvZyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5ESUFMT0cpO1xuICAgICAgICB0aGlzLl9iYWNrZHJvcCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faWdub3JlQmFja2Ryb3BDbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJXaWR0aCA9IDA7XG4gICAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgICB2YXIgX3Byb3RvID0gTW9kYWwucHJvdG90eXBlO1xuXG4gICAgICAvLyBQdWJsaWNcbiAgICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8IHRoaXMuX2lzU2hvd24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAgICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3dFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuU0hPVywge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXRcbiAgICAgICAgfSk7XG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2NoZWNrU2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgdGhpcy5fc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG5cbiAgICAgICAgJCQkMShkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhDbGFzc05hbWUuT1BFTik7XG5cbiAgICAgICAgdGhpcy5fc2V0RXNjYXBlRXZlbnQoKTtcblxuICAgICAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpO1xuXG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub24oRXZlbnQuQ0xJQ0tfRElTTUlTUywgU2VsZWN0b3IuREFUQV9ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGlkZShldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkJCQxKHRoaXMuX2RpYWxvZykub24oRXZlbnQuTU9VU0VET1dOX0RJU01JU1MsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkJCQxKF90aGlzLl9lbGVtZW50KS5vbmUoRXZlbnQuTU9VU0VVUF9ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICgkJCQxKGV2ZW50LnRhcmdldCkuaXMoX3RoaXMuX2VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgIF90aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZShldmVudCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoaWRlRXZlbnQgPSAkJCQxLkV2ZW50KEV2ZW50LkhJREUpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9ICQkJDEodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkZBREUpO1xuXG4gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KCk7XG5cbiAgICAgICAgdGhpcy5fc2V0UmVzaXplRXZlbnQoKTtcblxuICAgICAgICAkJCQxKGRvY3VtZW50KS5vZmYoRXZlbnQuRk9DVVNJTik7XG4gICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudC5DTElDS19ESVNNSVNTKTtcbiAgICAgICAgJCQkMSh0aGlzLl9kaWFsb2cpLm9mZihFdmVudC5NT1VTRURPV05fRElTTUlTUyk7XG5cbiAgICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuX2hpZGVNb2RhbChldmVudCk7XG4gICAgICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9oaWRlTW9kYWwoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICAkJCQxKHdpbmRvdywgZG9jdW1lbnQsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2JhY2tkcm9wKS5vZmYoRVZFTlRfS0VZKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RpYWxvZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNTaG93biA9IG51bGw7XG4gICAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5faWdub3JlQmFja2Ryb3BDbGljayA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5oYW5kbGVVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgICAgfTsgLy8gUHJpdmF0ZVxuXG5cbiAgICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCwgY29uZmlnKTtcbiAgICAgICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3Nob3dFbGVtZW50ID0gZnVuY3Rpb24gX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHRyYW5zaXRpb24gPSAkJCQxKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSB8fCB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgLy8gRG9uJ3QgbW92ZSBtb2RhbCdzIERPTSBwb3NpdGlvblxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcblxuICAgICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mb2N1cykge1xuICAgICAgICAgIHRoaXMuX2VuZm9yY2VGb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3duRXZlbnQgPSAkJCQxLkV2ZW50KEV2ZW50LlNIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldFxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gdHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgICAgIGlmIChfdGhpczMuX2NvbmZpZy5mb2N1cykge1xuICAgICAgICAgICAgX3RoaXMzLl9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgICAgICAkJCQxKF90aGlzMy5fZWxlbWVudCkudHJpZ2dlcihzaG93bkV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICAgICQkJDEodGhpcy5fZGlhbG9nKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgdHJhbnNpdGlvbkNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zaXRpb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2VuZm9yY2VGb2N1cyA9IGZ1bmN0aW9uIF9lbmZvcmNlRm9jdXMoKSB7XG4gICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICQkJDEoZG9jdW1lbnQpLm9mZihFdmVudC5GT0NVU0lOKSAvLyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICAgICAgLm9uKEV2ZW50LkZPQ1VTSU4sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChkb2N1bWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmIF90aGlzNC5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmICQkJDEoX3RoaXM0Ll9lbGVtZW50KS5oYXMoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF90aGlzNC5fZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3NldEVzY2FwZUV2ZW50ID0gZnVuY3Rpb24gX3NldEVzY2FwZUV2ZW50KCkge1xuICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5faXNTaG93biAmJiB0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LktFWURPV05fRElTTUlTUywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVlDT0RFKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgX3RoaXM1LmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgICAgICQkJDEodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50LktFWURPV05fRElTTUlTUyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2V0UmVzaXplRXZlbnQgPSBmdW5jdGlvbiBfc2V0UmVzaXplRXZlbnQoKSB7XG4gICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICAgICAgJCQkMSh3aW5kb3cpLm9uKEV2ZW50LlJFU0laRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM2LmhhbmRsZVVwZGF0ZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJCQkMSh3aW5kb3cpLm9mZihFdmVudC5SRVNJWkUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2hpZGVNb2RhbCA9IGZ1bmN0aW9uIF9oaWRlTW9kYWwoKSB7XG4gICAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcblxuICAgICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9zaG93QmFja2Ryb3AoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLk9QRU4pO1xuXG4gICAgICAgICAgX3RoaXM3Ll9yZXNldEFkanVzdG1lbnRzKCk7XG5cbiAgICAgICAgICBfdGhpczcuX3Jlc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgICAkJCQxKF90aGlzNy5fZWxlbWVudCkudHJpZ2dlcihFdmVudC5ISURERU4pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fcmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiBfcmVtb3ZlQmFja2Ryb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLl9iYWNrZHJvcCkge1xuICAgICAgICAgICQkJDEodGhpcy5fYmFja2Ryb3ApLnJlbW92ZSgpO1xuICAgICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9zaG93QmFja2Ryb3AgPSBmdW5jdGlvbiBfc2hvd0JhY2tkcm9wKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICAgIHZhciBhbmltYXRlID0gJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkgPyBDbGFzc05hbWUuRkFERSA6ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmIHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICAgIHRoaXMuX2JhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgdGhpcy5fYmFja2Ryb3AuY2xhc3NOYW1lID0gQ2xhc3NOYW1lLkJBQ0tEUk9QO1xuXG4gICAgICAgICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tkcm9wLmNsYXNzTGlzdC5hZGQoYW5pbWF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJCQkMSh0aGlzLl9iYWNrZHJvcCkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgJCQkMSh0aGlzLl9lbGVtZW50KS5vbihFdmVudC5DTElDS19ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczguX2lnbm9yZUJhY2tkcm9wQ2xpY2spIHtcbiAgICAgICAgICAgICAgX3RoaXM4Ll9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfdGhpczguX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICAgICAgX3RoaXM4Ll9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpczguaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2JhY2tkcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkJCQxKHRoaXMuX2JhY2tkcm9wKS5hZGRDbGFzcyhDbGFzc05hbWUuU0hPVyk7XG5cbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFhbmltYXRlKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO1xuICAgICAgICAgICQkJDEodGhpcy5fYmFja2Ryb3ApLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjYWxsYmFjaykuZW11bGF0ZVRyYW5zaXRpb25FbmQoYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1Nob3duICYmIHRoaXMuX2JhY2tkcm9wKSB7XG4gICAgICAgICAgJCQkMSh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLlNIT1cpO1xuXG4gICAgICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gY2FsbGJhY2tSZW1vdmUoKSB7XG4gICAgICAgICAgICBfdGhpczguX3JlbW92ZUJhY2tkcm9wKCk7XG5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAgICAgICAgIHZhciBfYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtcblxuICAgICAgICAgICAgJCQkMSh0aGlzLl9iYWNrZHJvcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNhbGxiYWNrUmVtb3ZlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChfYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFja1JlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzXG4gICAgICAvLyB0b2RvIChmYXQpOiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmYWN0b3JlZCBvdXQgb2YgbW9kYWwuanNcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgICBfcHJvdG8uX2FkanVzdERpYWxvZyA9IGZ1bmN0aW9uIF9hZGp1c3REaWFsb2coKSB7XG4gICAgICAgIHZhciBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gdGhpcy5fc2Nyb2xsYmFyV2lkdGggKyBcInB4XCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gdGhpcy5fc2Nyb2xsYmFyV2lkdGggKyBcInB4XCI7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fcmVzZXRBZGp1c3RtZW50cyA9IGZ1bmN0aW9uIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJyc7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2NoZWNrU2Nyb2xsYmFyID0gZnVuY3Rpb24gX2NoZWNrU2Nyb2xsYmFyKCkge1xuICAgICAgICB2YXIgcmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gcmVjdC5sZWZ0ICsgcmVjdC5yaWdodCA8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJXaWR0aCA9IHRoaXMuX2dldFNjcm9sbGJhcldpZHRoKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3NldFNjcm9sbGJhciA9IGZ1bmN0aW9uIF9zZXRTY3JvbGxiYXIoKSB7XG4gICAgICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc0JvZHlPdmVyZmxvd2luZykge1xuICAgICAgICAgIC8vIE5vdGU6IERPTU5vZGUuc3R5bGUucGFkZGluZ1JpZ2h0IHJldHVybnMgdGhlIGFjdHVhbCB2YWx1ZSBvciAnJyBpZiBub3Qgc2V0XG4gICAgICAgICAgLy8gICB3aGlsZSAkKERPTU5vZGUpLmNzcygncGFkZGluZy1yaWdodCcpIHJldHVybnMgdGhlIGNhbGN1bGF0ZWQgdmFsdWUgb3IgMCBpZiBub3Qgc2V0XG4gICAgICAgICAgdmFyIGZpeGVkQ29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5GSVhFRF9DT05URU5UKSk7XG4gICAgICAgICAgdmFyIHN0aWNreUNvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuU1RJQ0tZX0NPTlRFTlQpKTsgLy8gQWRqdXN0IGZpeGVkIGNvbnRlbnQgcGFkZGluZ1xuXG4gICAgICAgICAgJCQkMShmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgICAgICAgdmFyIGNhbGN1bGF0ZWRQYWRkaW5nID0gJCQkMShlbGVtZW50KS5jc3MoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgICAgICQkJDEoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcsIGFjdHVhbFBhZGRpbmcpLmNzcygncGFkZGluZy1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZFBhZGRpbmcpICsgX3RoaXM5Ll9zY3JvbGxiYXJXaWR0aCArIFwicHhcIik7XG4gICAgICAgICAgfSk7IC8vIEFkanVzdCBzdGlja3kgY29udGVudCBtYXJnaW5cblxuICAgICAgICAgICQkJDEoc3RpY2t5Q29udGVudCkuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBhY3R1YWxNYXJnaW4gPSBlbGVtZW50LnN0eWxlLm1hcmdpblJpZ2h0O1xuICAgICAgICAgICAgdmFyIGNhbGN1bGF0ZWRNYXJnaW4gPSAkJCQxKGVsZW1lbnQpLmNzcygnbWFyZ2luLXJpZ2h0Jyk7XG4gICAgICAgICAgICAkJCQxKGVsZW1lbnQpLmRhdGEoJ21hcmdpbi1yaWdodCcsIGFjdHVhbE1hcmdpbikuY3NzKCdtYXJnaW4tcmlnaHQnLCBwYXJzZUZsb2F0KGNhbGN1bGF0ZWRNYXJnaW4pIC0gX3RoaXM5Ll9zY3JvbGxiYXJXaWR0aCArIFwicHhcIik7XG4gICAgICAgICAgfSk7IC8vIEFkanVzdCBib2R5IHBhZGRpbmdcblxuICAgICAgICAgIHZhciBhY3R1YWxQYWRkaW5nID0gZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ7XG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRQYWRkaW5nID0gJCQkMShkb2N1bWVudC5ib2R5KS5jc3MoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgICAkJCQxKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnLCBhY3R1YWxQYWRkaW5nKS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBwYXJzZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uIF9yZXNldFNjcm9sbGJhcigpIHtcbiAgICAgICAgLy8gUmVzdG9yZSBmaXhlZCBjb250ZW50IHBhZGRpbmdcbiAgICAgICAgdmFyIGZpeGVkQ29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5GSVhFRF9DT05URU5UKSk7XG4gICAgICAgICQkJDEoZml4ZWRDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBwYWRkaW5nID0gJCQkMShlbGVtZW50KS5kYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICAgJCQkMShlbGVtZW50KS5yZW1vdmVEYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnO1xuICAgICAgICB9KTsgLy8gUmVzdG9yZSBzdGlja3kgY29udGVudFxuXG4gICAgICAgIHZhciBlbGVtZW50cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIlwiICsgU2VsZWN0b3IuU1RJQ0tZX0NPTlRFTlQpKTtcbiAgICAgICAgJCQkMShlbGVtZW50cykuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgbWFyZ2luID0gJCQkMShlbGVtZW50KS5kYXRhKCdtYXJnaW4tcmlnaHQnKTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgbWFyZ2luICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgJCQkMShlbGVtZW50KS5jc3MoJ21hcmdpbi1yaWdodCcsIG1hcmdpbikucmVtb3ZlRGF0YSgnbWFyZ2luLXJpZ2h0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gUmVzdG9yZSBib2R5IHBhZGRpbmdcblxuICAgICAgICB2YXIgcGFkZGluZyA9ICQkJDEoZG9jdW1lbnQuYm9keSkuZGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAkJCQxKGRvY3VtZW50LmJvZHkpLnJlbW92ZURhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXRTY3JvbGxiYXJXaWR0aCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxiYXJXaWR0aCgpIHtcbiAgICAgICAgLy8gdGh4IGQud2Fsc2hcbiAgICAgICAgdmFyIHNjcm9sbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzY3JvbGxEaXYuY2xhc3NOYW1lID0gQ2xhc3NOYW1lLlNDUk9MTEJBUl9NRUFTVVJFUjtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxEaXYpO1xuICAgICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KTtcbiAgICAgICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoO1xuICAgICAgfTsgLy8gU3RhdGljXG5cblxuICAgICAgTW9kYWwuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBkYXRhID0gJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCwgJCQkMSh0aGlzKS5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBNb2RhbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAgICQkJDEodGhpcykuZGF0YShEQVRBX0tFWSwgZGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuc2hvdykge1xuICAgICAgICAgICAgZGF0YS5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBfY3JlYXRlQ2xhc3MoTW9kYWwsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XSk7XG5cbiAgICAgIHJldHVybiBNb2RhbDtcbiAgICB9KCk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuXG4gICAgJCQkMShkb2N1bWVudCkub24oRXZlbnQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgICAgdmFyIHRhcmdldDtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gJCQkMSh0YXJnZXQpLmRhdGEoREFUQV9LRVkpID8gJ3RvZ2dsZScgOiBfb2JqZWN0U3ByZWFkKHt9LCAkJCQxKHRhcmdldCkuZGF0YSgpLCAkJCQxKHRoaXMpLmRhdGEoKSk7XG5cbiAgICAgIGlmICh0aGlzLnRhZ05hbWUgPT09ICdBJyB8fCB0aGlzLnRhZ05hbWUgPT09ICdBUkVBJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgJHRhcmdldCA9ICQkJDEodGFyZ2V0KS5vbmUoRXZlbnQuU0hPVywgZnVuY3Rpb24gKHNob3dFdmVudCkge1xuICAgICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgLy8gT25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgICR0YXJnZXQub25lKEV2ZW50LkhJRERFTiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICgkJCQxKF90aGlzMTApLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgICBfdGhpczEwLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCQkMSh0YXJnZXQpLCBjb25maWcsIHRoaXMpO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGpRdWVyeVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gICAgJCQkMS5mbltOQU1FXSA9IE1vZGFsLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgJCQkMS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IE1vZGFsO1xuXG4gICAgJCQkMS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgJCQkMS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgIHJldHVybiBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gTW9kYWw7XG4gIH0oJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogdG9vbHRpcC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgVG9vbHRpcCA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAndG9vbHRpcCc7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy50b29sdGlwJztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgQ0xBU1NfUFJFRklYID0gJ2JzLXRvb2x0aXAnO1xuICAgIHZhciBCU0NMU19QUkVGSVhfUkVHRVggPSBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBDTEFTU19QUkVGSVggKyBcIlxcXFxTK1wiLCAnZycpO1xuICAgIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICAgIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICAgICAgdGVtcGxhdGU6ICdzdHJpbmcnLFxuICAgICAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgICAgIHRyaWdnZXI6ICdzdHJpbmcnLFxuICAgICAgZGVsYXk6ICcobnVtYmVyfG9iamVjdCknLFxuICAgICAgaHRtbDogJ2Jvb2xlYW4nLFxuICAgICAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICAgIHBsYWNlbWVudDogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgICAgIG9mZnNldDogJyhudW1iZXJ8c3RyaW5nKScsXG4gICAgICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICAgICAgZmFsbGJhY2tQbGFjZW1lbnQ6ICcoc3RyaW5nfGFycmF5KScsXG4gICAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknXG4gICAgfTtcbiAgICB2YXIgQXR0YWNobWVudE1hcCA9IHtcbiAgICAgIEFVVE86ICdhdXRvJyxcbiAgICAgIFRPUDogJ3RvcCcsXG4gICAgICBSSUdIVDogJ3JpZ2h0JyxcbiAgICAgIEJPVFRPTTogJ2JvdHRvbScsXG4gICAgICBMRUZUOiAnbGVmdCdcbiAgICB9O1xuICAgIHZhciBEZWZhdWx0ID0ge1xuICAgICAgYW5pbWF0aW9uOiB0cnVlLFxuICAgICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgICAgIHRyaWdnZXI6ICdob3ZlciBmb2N1cycsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBkZWxheTogMCxcbiAgICAgIGh0bWw6IGZhbHNlLFxuICAgICAgc2VsZWN0b3I6IGZhbHNlLFxuICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIGNvbnRhaW5lcjogZmFsc2UsXG4gICAgICBmYWxsYmFja1BsYWNlbWVudDogJ2ZsaXAnLFxuICAgICAgYm91bmRhcnk6ICdzY3JvbGxQYXJlbnQnXG4gICAgfTtcbiAgICB2YXIgSG92ZXJTdGF0ZSA9IHtcbiAgICAgIFNIT1c6ICdzaG93JyxcbiAgICAgIE9VVDogJ291dCdcbiAgICB9O1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZLFxuICAgICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZLFxuICAgICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZLFxuICAgICAgSU5TRVJURUQ6IFwiaW5zZXJ0ZWRcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLOiBcImNsaWNrXCIgKyBFVkVOVF9LRVksXG4gICAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSxcbiAgICAgIEZPQ1VTT1VUOiBcImZvY3Vzb3V0XCIgKyBFVkVOVF9LRVksXG4gICAgICBNT1VTRUVOVEVSOiBcIm1vdXNlZW50ZXJcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFTEVBVkU6IFwibW91c2VsZWF2ZVwiICsgRVZFTlRfS0VZXG4gICAgfTtcbiAgICB2YXIgQ2xhc3NOYW1lID0ge1xuICAgICAgRkFERTogJ2ZhZGUnLFxuICAgICAgU0hPVzogJ3Nob3cnXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBUT09MVElQOiAnLnRvb2x0aXAnLFxuICAgICAgVE9PTFRJUF9JTk5FUjogJy50b29sdGlwLWlubmVyJyxcbiAgICAgIEFSUk9XOiAnLmFycm93J1xuICAgIH07XG4gICAgdmFyIFRyaWdnZXIgPSB7XG4gICAgICBIT1ZFUjogJ2hvdmVyJyxcbiAgICAgIEZPQ1VTOiAnZm9jdXMnLFxuICAgICAgQ0xJQ0s6ICdjbGljaycsXG4gICAgICBNQU5VQUw6ICdtYW51YWwnXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgVG9vbHRpcCA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIFRvb2x0aXAoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgUG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAgICogUG9wcGVyIC0gaHR0cHM6Ly9wb3BwZXIuanMub3JnXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXAgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKTtcbiAgICAgICAgfSAvLyBwcml2YXRlXG5cblxuICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gMDtcbiAgICAgICAgdGhpcy5faG92ZXJTdGF0ZSA9ICcnO1xuICAgICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7IC8vIFByb3RlY3RlZFxuXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMudGlwID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICAgIHZhciBfcHJvdG8gPSBUb29sdGlwLnByb3RvdHlwZTtcblxuICAgICAgLy8gUHVibGljXG4gICAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICB2YXIgZGF0YUtleSA9IHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7XG4gICAgICAgICAgdmFyIGNvbnRleHQgPSAkJCQxKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSk7XG5cbiAgICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihldmVudC5jdXJyZW50VGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgICQkJDEoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5LCBjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyLmNsaWNrID0gIWNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2s7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgICAgICBjb250ZXh0Ll9lbnRlcihudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5fbGVhdmUobnVsbCwgY29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgkJCQxKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVykpIHtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlKG51bGwsIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKTtcbiAgICAgICAgJCQkMSh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgICAgICQkJDEodGhpcy5lbGVtZW50KS5jbG9zZXN0KCcubW9kYWwnKS5vZmYoJ2hpZGUuYnMubW9kYWwnKTtcblxuICAgICAgICBpZiAodGhpcy50aXApIHtcbiAgICAgICAgICAkJCQxKHRoaXMudGlwKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9ob3ZlclN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBpZiAoJCQkMSh0aGlzLmVsZW1lbnQpLmNzcygnZGlzcGxheScpID09PSAnbm9uZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvd0V2ZW50ID0gJCQkMS5FdmVudCh0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1cpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzV2l0aENvbnRlbnQoKSAmJiB0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgICAgICAkJCQxKHRoaXMuZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuICAgICAgICAgIHZhciBpc0luVGhlRG9tID0gJCQkMS5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpIHx8ICFpc0luVGhlRG9tKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgICAgIHZhciB0aXBJZCA9IFV0aWwuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7XG4gICAgICAgICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZCk7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcElkKTtcbiAgICAgICAgICB0aGlzLnNldENvbnRlbnQoKTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICQkJDEodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUuRkFERSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuZWxlbWVudCkgOiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IHRoaXMuX2dldEF0dGFjaG1lbnQocGxhY2VtZW50KTtcblxuICAgICAgICAgIHRoaXMuYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpO1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6ICQkJDEoZG9jdW1lbnQpLmZpbmQodGhpcy5jb25maWcuY29udGFpbmVyKTtcbiAgICAgICAgICAkJCQxKHRpcCkuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcblxuICAgICAgICAgIGlmICghJCQkMS5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMudGlwKSkge1xuICAgICAgICAgICAgJCQkMSh0aXApLmFwcGVuZFRvKGNvbnRhaW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJCQkMSh0aGlzLmVsZW1lbnQpLnRyaWdnZXIodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5JTlNFUlRFRCk7XG4gICAgICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcih0aGlzLmVsZW1lbnQsIHRpcCwge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5jb25maWcub2Zmc2V0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZsaXA6IHtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcjogdGhpcy5jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYXJyb3c6IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBTZWxlY3Rvci5BUlJPV1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAgICAgICAgICAgICBib3VuZGFyaWVzRWxlbWVudDogdGhpcy5jb25maWcuYm91bmRhcnlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ3JlYXRlOiBmdW5jdGlvbiBvbkNyZWF0ZShkYXRhKSB7XG4gICAgICAgICAgICAgIGlmIChkYXRhLm9yaWdpbmFsUGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoZGF0YSkge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICQkJDEodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUuU0hPVyk7IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAgICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgICAgICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgICAgICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG5cbiAgICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAkJCQxKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQkJDEubm9vcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICBfdGhpcy5fZml4VHJhbnNpdGlvbigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcHJldkhvdmVyU3RhdGUgPSBfdGhpcy5faG92ZXJTdGF0ZTtcbiAgICAgICAgICAgIF90aGlzLl9ob3ZlclN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICQkJDEoX3RoaXMuZWxlbWVudCkudHJpZ2dlcihfdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTik7XG5cbiAgICAgICAgICAgIGlmIChwcmV2SG92ZXJTdGF0ZSA9PT0gSG92ZXJTdGF0ZS5PVVQpIHtcbiAgICAgICAgICAgICAgX3RoaXMuX2xlYXZlKG51bGwsIF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKCQkJDEodGhpcy50aXApLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy50aXApO1xuICAgICAgICAgICAgJCQkMSh0aGlzLnRpcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIHZhciB0aXAgPSB0aGlzLmdldFRpcEVsZW1lbnQoKTtcbiAgICAgICAgdmFyIGhpZGVFdmVudCA9ICQkJDEuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKTtcblxuICAgICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLl9ob3ZlclN0YXRlICE9PSBIb3ZlclN0YXRlLlNIT1cgJiYgdGlwLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRpcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMyLl9jbGVhblRpcENsYXNzKCk7XG5cbiAgICAgICAgICBfdGhpczIuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAgICQkJDEoX3RoaXMyLmVsZW1lbnQpLnRyaWdnZXIoX3RoaXMyLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTik7XG5cbiAgICAgICAgICBpZiAoX3RoaXMyLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF90aGlzMi5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgICQkJDEodGhpcy5lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgICQkJDEodGlwKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVyk7IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG5cbiAgICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICQkJDEoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQkJDEubm9vcCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RyaWdnZXIuQ0xJQ0tdID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5GT0NVU10gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUcmlnZ2VyLkhPVkVSXSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICgkJCQxKHRoaXMudGlwKS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aXApO1xuICAgICAgICAgICQkJDEodGlwKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2hvdmVyU3RhdGUgPSAnJztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gUHJvdGVjdGVkXG5cblxuICAgICAgX3Byb3RvLmlzV2l0aENvbnRlbnQgPSBmdW5jdGlvbiBpc1dpdGhDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmdldFRpdGxlKCkpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAgICQkJDEodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKENMQVNTX1BSRUZJWCArIFwiLVwiICsgYXR0YWNobWVudCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uZ2V0VGlwRWxlbWVudCA9IGZ1bmN0aW9uIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgICAgIHRoaXMudGlwID0gdGhpcy50aXAgfHwgJCQkMSh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnRpcDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zZXRDb250ZW50ID0gZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCQkJDEodGlwLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuVE9PTFRJUF9JTk5FUikpLCB0aGlzLmdldFRpdGxlKCkpO1xuICAgICAgICAkJCQxKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lLkZBREUgKyBcIiBcIiArIENsYXNzTmFtZS5TSE9XKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5zZXRFbGVtZW50Q29udGVudCA9IGZ1bmN0aW9uIHNldEVsZW1lbnRDb250ZW50KCRlbGVtZW50LCBjb250ZW50KSB7XG4gICAgICAgIHZhciBodG1sID0gdGhpcy5jb25maWcuaHRtbDtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIChjb250ZW50Lm5vZGVUeXBlIHx8IGNvbnRlbnQuanF1ZXJ5KSkge1xuICAgICAgICAgIC8vIENvbnRlbnQgaXMgYSBET00gbm9kZSBvciBhIGpRdWVyeVxuICAgICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgICBpZiAoISQkJDEoY29udGVudCkucGFyZW50KCkuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICRlbGVtZW50LmVtcHR5KCkuYXBwZW5kKGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkZWxlbWVudC50ZXh0KCQkJDEoY29udGVudCkudGV4dCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGVsZW1lbnRbaHRtbCA/ICdodG1sJyA6ICd0ZXh0J10oY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5nZXRUaXRsZSA9IGZ1bmN0aW9uIGdldFRpdGxlKCkge1xuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJyk7XG5cbiAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgIHRpdGxlID0gdHlwZW9mIHRoaXMuY29uZmlnLnRpdGxlID09PSAnZnVuY3Rpb24nID8gdGhpcy5jb25maWcudGl0bGUuY2FsbCh0aGlzLmVsZW1lbnQpIDogdGhpcy5jb25maWcudGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICB9OyAvLyBQcml2YXRlXG5cblxuICAgICAgX3Byb3RvLl9nZXRBdHRhY2htZW50ID0gZnVuY3Rpb24gX2dldEF0dGFjaG1lbnQocGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiBBdHRhY2htZW50TWFwW3BsYWNlbWVudC50b1VwcGVyQ2FzZSgpXTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fc2V0TGlzdGVuZXJzID0gZnVuY3Rpb24gX3NldExpc3RlbmVycygpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHRyaWdnZXJzID0gdGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgICAgICB0cmlnZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh0cmlnZ2VyKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgICQkJDEoX3RoaXMzLmVsZW1lbnQpLm9uKF90aGlzMy5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSywgX3RoaXMzLmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczMudG9nZ2xlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVHJpZ2dlci5NQU5VQUwpIHtcbiAgICAgICAgICAgIHZhciBldmVudEluID0gdHJpZ2dlciA9PT0gVHJpZ2dlci5IT1ZFUiA/IF90aGlzMy5jb25zdHJ1Y3Rvci5FdmVudC5NT1VTRUVOVEVSIDogX3RoaXMzLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTSU47XG4gICAgICAgICAgICB2YXIgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUcmlnZ2VyLkhPVkVSID8gX3RoaXMzLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFTEVBVkUgOiBfdGhpczMuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNPVVQ7XG4gICAgICAgICAgICAkJCQxKF90aGlzMy5lbGVtZW50KS5vbihldmVudEluLCBfdGhpczMuY29uZmlnLnNlbGVjdG9yLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5fZW50ZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSkub24oZXZlbnRPdXQsIF90aGlzMy5jb25maWcuc2VsZWN0b3IsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLl9sZWF2ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkJCQxKF90aGlzMy5lbGVtZW50KS5jbG9zZXN0KCcubW9kYWwnKS5vbignaGlkZS5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczMuaGlkZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0b3IpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuY29uZmlnLCB7XG4gICAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2ZpeFRpdGxlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZml4VGl0bGUgPSBmdW5jdGlvbiBfZml4VGl0bGUoKSB7XG4gICAgICAgIHZhciB0aXRsZVR5cGUgPSB0eXBlb2YgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScpO1xuXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpIHx8IHRpdGxlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJywgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKSB8fCAnJyk7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZW50ZXIgPSBmdW5jdGlvbiBfZW50ZXIoZXZlbnQsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCAkJCQxKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICQkJDEoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVHJpZ2dlci5GT0NVUyA6IFRyaWdnZXIuSE9WRVJdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkJCQxKGNvbnRleHQuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUuU0hPVykgfHwgY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSG92ZXJTdGF0ZS5TSE9XKSB7XG4gICAgICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPVztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dCk7XG4gICAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLlNIT1c7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxheSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuc2hvdykge1xuICAgICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSG92ZXJTdGF0ZS5TSE9XKSB7XG4gICAgICAgICAgICBjb250ZXh0LnNob3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbnRleHQuY29uZmlnLmRlbGF5LnNob3cpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9sZWF2ZSA9IGZ1bmN0aW9uIF9sZWF2ZShldmVudCwgY29udGV4dCkge1xuICAgICAgICB2YXIgZGF0YUtleSA9IHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8ICQkJDEoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5KTtcblxuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICBjb250ZXh0ID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZXZlbnQuY3VycmVudFRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSk7XG4gICAgICAgICAgJCQkMShldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXksIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNvdXQnID8gVHJpZ2dlci5GT0NVUyA6IFRyaWdnZXIuSE9WRVJdID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KGNvbnRleHQuX3RpbWVvdXQpO1xuICAgICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSG92ZXJTdGF0ZS5PVVQ7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxheSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuaGlkZSkge1xuICAgICAgICAgIGNvbnRleHQuaGlkZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSG92ZXJTdGF0ZS5PVVQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuaGlkZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgY29udGV4dC5jb25maWcuZGVsYXkuaGlkZSk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX2lzV2l0aEFjdGl2ZVRyaWdnZXIgPSBmdW5jdGlvbiBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICAgICAgZm9yICh2YXIgdHJpZ2dlciBpbiB0aGlzLl9hY3RpdmVUcmlnZ2VyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LCAkJCQxKHRoaXMuZWxlbWVudCkuZGF0YSgpLCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICAgICAgc2hvdzogY29uZmlnLmRlbGF5LFxuICAgICAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbmZpZy50aXRsZSA9IGNvbmZpZy50aXRsZS50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpO1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9nZXREZWxlZ2F0ZUNvbmZpZyA9IGZ1bmN0aW9uIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNvbmZpZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB0aGlzLmNvbmZpZ1trZXldKSB7XG4gICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gdGhpcy5jb25maWdba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9jbGVhblRpcENsYXNzID0gZnVuY3Rpb24gX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgICAgIHZhciAkdGlwID0gJCQkMSh0aGlzLmdldFRpcEVsZW1lbnQoKSk7XG4gICAgICAgIHZhciB0YWJDbGFzcyA9ICR0aXAuYXR0cignY2xhc3MnKS5tYXRjaChCU0NMU19QUkVGSVhfUkVHRVgpO1xuXG4gICAgICAgIGlmICh0YWJDbGFzcyAhPT0gbnVsbCAmJiB0YWJDbGFzcy5sZW5ndGgpIHtcbiAgICAgICAgICAkdGlwLnJlbW92ZUNsYXNzKHRhYkNsYXNzLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UgPSBmdW5jdGlvbiBfaGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKHBvcHBlckRhdGEpIHtcbiAgICAgICAgdmFyIHBvcHBlckluc3RhbmNlID0gcG9wcGVyRGF0YS5pbnN0YW5jZTtcbiAgICAgICAgdGhpcy50aXAgPSBwb3BwZXJJbnN0YW5jZS5wb3BwZXI7XG5cbiAgICAgICAgdGhpcy5fY2xlYW5UaXBDbGFzcygpO1xuXG4gICAgICAgIHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQocG9wcGVyRGF0YS5wbGFjZW1lbnQpKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZml4VHJhbnNpdGlvbiA9IGZ1bmN0aW9uIF9maXhUcmFuc2l0aW9uKCkge1xuICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgIHZhciBpbml0Q29uZmlnQW5pbWF0aW9uID0gdGhpcy5jb25maWcuYW5pbWF0aW9uO1xuXG4gICAgICAgIGlmICh0aXAuZ2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcpICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgJCQkMSh0aXApLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5GQURFKTtcbiAgICAgICAgdGhpcy5jb25maWcuYW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgICAgdGhpcy5jb25maWcuYW5pbWF0aW9uID0gaW5pdENvbmZpZ0FuaW1hdGlvbjtcbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIFRvb2x0aXAuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBkYXRhID0gJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnO1xuXG4gICAgICAgICAgaWYgKCFkYXRhICYmIC9kaXNwb3NlfGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICAgJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhUb29sdGlwLCBudWxsLCBbe1xuICAgICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiTkFNRVwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gTkFNRTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiREFUQV9LRVlcIixcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIERBVEFfS0VZO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJFdmVudFwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkVWRU5UX0tFWVwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRVZFTlRfS0VZO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0VHlwZVwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIFRvb2x0aXA7XG4gICAgfSgpO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGpRdWVyeVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxLmZuW05BTUVdID0gVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBUb29sdGlwO1xuXG4gICAgJCQkMS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgJCQkMS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgIHJldHVybiBUb29sdGlwLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBUb29sdGlwO1xuICB9KCQsIFBvcHBlcik7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogcG9wb3Zlci5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgUG9wb3ZlciA9IGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ29uc3RhbnRzXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG4gICAgdmFyIE5BTUUgPSAncG9wb3Zlcic7XG4gICAgdmFyIFZFUlNJT04gPSAnNC4xLjInO1xuICAgIHZhciBEQVRBX0tFWSA9ICdicy5wb3BvdmVyJztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJCQkMS5mbltOQU1FXTtcbiAgICB2YXIgQ0xBU1NfUFJFRklYID0gJ2JzLXBvcG92ZXInO1xuICAgIHZhciBCU0NMU19QUkVGSVhfUkVHRVggPSBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBDTEFTU19QUkVGSVggKyBcIlxcXFxTK1wiLCAnZycpO1xuXG4gICAgdmFyIERlZmF1bHQgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHQsIHtcbiAgICAgIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICAgIHRyaWdnZXI6ICdjbGljaycsXG4gICAgICBjb250ZW50OiAnJyxcbiAgICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+JyArICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+PC9kaXY+J1xuICAgIH0pO1xuXG4gICAgdmFyIERlZmF1bHRUeXBlID0gX29iamVjdFNwcmVhZCh7fSwgVG9vbHRpcC5EZWZhdWx0VHlwZSwge1xuICAgICAgY29udGVudDogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG4gICAgfSk7XG5cbiAgICB2YXIgQ2xhc3NOYW1lID0ge1xuICAgICAgRkFERTogJ2ZhZGUnLFxuICAgICAgU0hPVzogJ3Nob3cnXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBUSVRMRTogJy5wb3BvdmVyLWhlYWRlcicsXG4gICAgICBDT05URU5UOiAnLnBvcG92ZXItYm9keSdcbiAgICB9O1xuICAgIHZhciBFdmVudCA9IHtcbiAgICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZLFxuICAgICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZLFxuICAgICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZLFxuICAgICAgSU5TRVJURUQ6IFwiaW5zZXJ0ZWRcIiArIEVWRU5UX0tFWSxcbiAgICAgIENMSUNLOiBcImNsaWNrXCIgKyBFVkVOVF9LRVksXG4gICAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSxcbiAgICAgIEZPQ1VTT1VUOiBcImZvY3Vzb3V0XCIgKyBFVkVOVF9LRVksXG4gICAgICBNT1VTRUVOVEVSOiBcIm1vdXNlZW50ZXJcIiArIEVWRU5UX0tFWSxcbiAgICAgIE1PVVNFTEVBVkU6IFwibW91c2VsZWF2ZVwiICsgRVZFTlRfS0VZXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgUG9wb3ZlciA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uIChfVG9vbHRpcCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoUG9wb3ZlciwgX1Rvb2x0aXApO1xuXG4gICAgICBmdW5jdGlvbiBQb3BvdmVyKCkge1xuICAgICAgICByZXR1cm4gX1Rvb2x0aXAuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3Byb3RvID0gUG9wb3Zlci5wcm90b3R5cGU7XG5cbiAgICAgIC8vIE92ZXJyaWRlc1xuICAgICAgX3Byb3RvLmlzV2l0aENvbnRlbnQgPSBmdW5jdGlvbiBpc1dpdGhDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5hZGRBdHRhY2htZW50Q2xhc3MgPSBmdW5jdGlvbiBhZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCkge1xuICAgICAgICAkJCQxKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVggKyBcIi1cIiArIGF0dGFjaG1lbnQpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmdldFRpcEVsZW1lbnQgPSBmdW5jdGlvbiBnZXRUaXBFbGVtZW50KCkge1xuICAgICAgICB0aGlzLnRpcCA9IHRoaXMudGlwIHx8ICQkJDEodGhpcy5jb25maWcudGVtcGxhdGUpWzBdO1xuICAgICAgICByZXR1cm4gdGhpcy50aXA7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uc2V0Q29udGVudCA9IGZ1bmN0aW9uIHNldENvbnRlbnQoKSB7XG4gICAgICAgIHZhciAkdGlwID0gJCQkMSh0aGlzLmdldFRpcEVsZW1lbnQoKSk7IC8vIFdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcblxuICAgICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3Rvci5USVRMRSksIHRoaXMuZ2V0VGl0bGUoKSk7XG5cbiAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9nZXRDb250ZW50KCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY2FsbCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCgkdGlwLmZpbmQoU2VsZWN0b3IuQ09OVEVOVCksIGNvbnRlbnQpO1xuICAgICAgICAkdGlwLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5GQURFICsgXCIgXCIgKyBDbGFzc05hbWUuU0hPVyk7XG4gICAgICB9OyAvLyBQcml2YXRlXG5cblxuICAgICAgX3Byb3RvLl9nZXRDb250ZW50ID0gZnVuY3Rpb24gX2dldENvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbnRlbnQnKSB8fCB0aGlzLmNvbmZpZy5jb250ZW50O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9jbGVhblRpcENsYXNzID0gZnVuY3Rpb24gX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgICAgIHZhciAkdGlwID0gJCQkMSh0aGlzLmdldFRpcEVsZW1lbnQoKSk7XG4gICAgICAgIHZhciB0YWJDbGFzcyA9ICR0aXAuYXR0cignY2xhc3MnKS5tYXRjaChCU0NMU19QUkVGSVhfUkVHRVgpO1xuXG4gICAgICAgIGlmICh0YWJDbGFzcyAhPT0gbnVsbCAmJiB0YWJDbGFzcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgJHRpcC5yZW1vdmVDbGFzcyh0YWJDbGFzcy5qb2luKCcnKSk7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIFBvcG92ZXIuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBkYXRhID0gJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgICAgaWYgKCFkYXRhICYmIC9kZXN0cm95fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBQb3BvdmVyKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICAgJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhQb3BvdmVyLCBudWxsLCBbe1xuICAgICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgICAvLyBHZXR0ZXJzXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJOQU1FXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBOQU1FO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEQVRBX0tFWVwiLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gREFUQV9LRVk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkV2ZW50XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IFwiRVZFTlRfS0VZXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBFVkVOVF9LRVk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICAgICAgfVxuICAgICAgfV0pO1xuXG4gICAgICByZXR1cm4gUG9wb3ZlcjtcbiAgICB9KFRvb2x0aXApO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGpRdWVyeVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG5cbiAgICAkJCQxLmZuW05BTUVdID0gUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBQb3BvdmVyO1xuXG4gICAgJCQkMS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgJCQkMS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgIHJldHVybiBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBQb3BvdmVyO1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IHNjcm9sbHNweS5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgU2Nyb2xsU3B5ID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICdzY3JvbGxzcHknO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5JztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gICAgdmFyIEpRVUVSWV9OT19DT05GTElDVCA9ICQkJDEuZm5bTkFNRV07XG4gICAgdmFyIERlZmF1bHQgPSB7XG4gICAgICBvZmZzZXQ6IDEwLFxuICAgICAgbWV0aG9kOiAnYXV0bycsXG4gICAgICB0YXJnZXQ6ICcnXG4gICAgfTtcbiAgICB2YXIgRGVmYXVsdFR5cGUgPSB7XG4gICAgICBvZmZzZXQ6ICdudW1iZXInLFxuICAgICAgbWV0aG9kOiAnc3RyaW5nJyxcbiAgICAgIHRhcmdldDogJyhzdHJpbmd8ZWxlbWVudCknXG4gICAgfTtcbiAgICB2YXIgRXZlbnQgPSB7XG4gICAgICBBQ1RJVkFURTogXCJhY3RpdmF0ZVwiICsgRVZFTlRfS0VZLFxuICAgICAgU0NST0xMOiBcInNjcm9sbFwiICsgRVZFTlRfS0VZLFxuICAgICAgTE9BRF9EQVRBX0FQSTogXCJsb2FkXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVlcbiAgICB9O1xuICAgIHZhciBDbGFzc05hbWUgPSB7XG4gICAgICBEUk9QRE9XTl9JVEVNOiAnZHJvcGRvd24taXRlbScsXG4gICAgICBEUk9QRE9XTl9NRU5VOiAnZHJvcGRvd24tbWVudScsXG4gICAgICBBQ1RJVkU6ICdhY3RpdmUnXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBEQVRBX1NQWTogJ1tkYXRhLXNweT1cInNjcm9sbFwiXScsXG4gICAgICBBQ1RJVkU6ICcuYWN0aXZlJyxcbiAgICAgIE5BVl9MSVNUX0dST1VQOiAnLm5hdiwgLmxpc3QtZ3JvdXAnLFxuICAgICAgTkFWX0xJTktTOiAnLm5hdi1saW5rJyxcbiAgICAgIE5BVl9JVEVNUzogJy5uYXYtaXRlbScsXG4gICAgICBMSVNUX0lURU1TOiAnLmxpc3QtZ3JvdXAtaXRlbScsXG4gICAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgICBEUk9QRE9XTl9JVEVNUzogJy5kcm9wZG93bi1pdGVtJyxcbiAgICAgIERST1BET1dOX1RPR0dMRTogJy5kcm9wZG93bi10b2dnbGUnXG4gICAgfTtcbiAgICB2YXIgT2Zmc2V0TWV0aG9kID0ge1xuICAgICAgT0ZGU0VUOiAnb2Zmc2V0JyxcbiAgICAgIFBPU0lUSU9OOiAncG9zaXRpb24nXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgU2Nyb2xsU3B5ID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gU2Nyb2xsU3B5KGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gZWxlbWVudC50YWdOYW1lID09PSAnQk9EWScgPyB3aW5kb3cgOiBlbGVtZW50O1xuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0b3IgPSB0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3Rvci5OQVZfTElOS1MgKyBcIixcIiArICh0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3Rvci5MSVNUX0lURU1TICsgXCIsXCIpICsgKHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yLkRST1BET1dOX0lURU1TKTtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IDA7XG4gICAgICAgICQkJDEodGhpcy5fc2Nyb2xsRWxlbWVudCkub24oRXZlbnQuU0NST0xMLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3Byb2Nlc3MoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuICAgICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgICAgdmFyIF9wcm90byA9IFNjcm9sbFNweS5wcm90b3R5cGU7XG5cbiAgICAgIC8vIFB1YmxpY1xuICAgICAgX3Byb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICB2YXIgYXV0b01ldGhvZCA9IHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHRoaXMuX3Njcm9sbEVsZW1lbnQud2luZG93ID8gT2Zmc2V0TWV0aG9kLk9GRlNFVCA6IE9mZnNldE1ldGhvZC5QT1NJVElPTjtcbiAgICAgICAgdmFyIG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/IGF1dG9NZXRob2QgOiB0aGlzLl9jb25maWcubWV0aG9kO1xuICAgICAgICB2YXIgb2Zmc2V0QmFzZSA9IG9mZnNldE1ldGhvZCA9PT0gT2Zmc2V0TWV0aG9kLlBPU0lUSU9OID8gdGhpcy5fZ2V0U2Nyb2xsVG9wKCkgOiAwO1xuICAgICAgICB0aGlzLl9vZmZzZXRzID0gW107XG4gICAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KCk7XG4gICAgICAgIHZhciB0YXJnZXRzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3NlbGVjdG9yKSk7XG4gICAgICAgIHRhcmdldHMubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIHRhcmdldDtcbiAgICAgICAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0U2VsZWN0b3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXRCQ1IgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRCQ1Iud2lkdGggfHwgdGFyZ2V0QkNSLmhlaWdodCkge1xuICAgICAgICAgICAgICAvLyBUT0RPIChmYXQpOiByZW1vdmUgc2tldGNoIHJlbGlhbmNlIG9uIGpRdWVyeSBwb3NpdGlvbi9vZmZzZXRcbiAgICAgICAgICAgICAgcmV0dXJuIFskJCQxKHRhcmdldClbb2Zmc2V0TWV0aG9kXSgpLnRvcCArIG9mZnNldEJhc2UsIHRhcmdldFNlbGVjdG9yXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF07XG4gICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBfdGhpczIuX29mZnNldHMucHVzaChpdGVtWzBdKTtcblxuICAgICAgICAgIF90aGlzMi5fdGFyZ2V0cy5wdXNoKGl0ZW1bMV0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICAgJCQkMS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgICAgJCQkMSh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoRVZFTlRfS0VZKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RvciA9IG51bGw7XG4gICAgICAgIHRoaXMuX29mZnNldHMgPSBudWxsO1xuICAgICAgICB0aGlzLl90YXJnZXRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gbnVsbDtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2dldENvbmZpZyA9IGZ1bmN0aW9uIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy50YXJnZXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFyIGlkID0gJCQkMShjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcpO1xuXG4gICAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgaWQgPSBVdGlsLmdldFVJRChOQU1FKTtcbiAgICAgICAgICAgICQkJDEoY29uZmlnLnRhcmdldCkuYXR0cignaWQnLCBpZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uZmlnLnRhcmdldCA9IFwiI1wiICsgaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gX2dldFNjcm9sbFRvcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvdyA/IHRoaXMuX3Njcm9sbEVsZW1lbnQucGFnZVlPZmZzZXQgOiB0aGlzLl9zY3JvbGxFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0U2Nyb2xsSGVpZ2h0ID0gZnVuY3Rpb24gX2dldFNjcm9sbEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IHx8IE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fZ2V0T2Zmc2V0SGVpZ2h0ID0gZnVuY3Rpb24gX2dldE9mZnNldEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvdyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9wcm9jZXNzID0gZnVuY3Rpb24gX3Byb2Nlc3MoKSB7XG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLl9nZXRTY3JvbGxUb3AoKSArIHRoaXMuX2NvbmZpZy5vZmZzZXQ7XG5cbiAgICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuXG4gICAgICAgIHZhciBtYXhTY3JvbGwgPSB0aGlzLl9jb25maWcub2Zmc2V0ICsgc2Nyb2xsSGVpZ2h0IC0gdGhpcy5fZ2V0T2Zmc2V0SGVpZ2h0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbEhlaWdodCAhPT0gc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1heFNjcm9sbCkge1xuICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRhcmdldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzWzBdICYmIHRoaXMuX29mZnNldHNbMF0gPiAwKSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcblxuICAgICAgICAgIHRoaXMuX2NsZWFyKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2Zmc2V0TGVuZ3RoID0gdGhpcy5fb2Zmc2V0cy5sZW5ndGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IG9mZnNldExlbmd0aDsgaS0tOykge1xuICAgICAgICAgIHZhciBpc0FjdGl2ZVRhcmdldCA9IHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGhpcy5fdGFyZ2V0c1tpXSAmJiBzY3JvbGxUb3AgPj0gdGhpcy5fb2Zmc2V0c1tpXSAmJiAodHlwZW9mIHRoaXMuX29mZnNldHNbaSArIDFdID09PSAndW5kZWZpbmVkJyB8fCBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzW2kgKyAxXSk7XG5cbiAgICAgICAgICBpZiAoaXNBY3RpdmVUYXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLl9hY3RpdmF0ZSA9IGZ1bmN0aW9uIF9hY3RpdmF0ZSh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0O1xuXG4gICAgICAgIHRoaXMuX2NsZWFyKCk7XG5cbiAgICAgICAgdmFyIHF1ZXJpZXMgPSB0aGlzLl9zZWxlY3Rvci5zcGxpdCgnLCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYXJyb3ctYm9keS1zdHlsZVxuXG5cbiAgICAgICAgcXVlcmllcyA9IHF1ZXJpZXMubWFwKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICAgIHJldHVybiBzZWxlY3RvciArIFwiW2RhdGEtdGFyZ2V0PVxcXCJcIiArIHRhcmdldCArIFwiXFxcIl0sXCIgKyAoc2VsZWN0b3IgKyBcIltocmVmPVxcXCJcIiArIHRhcmdldCArIFwiXFxcIl1cIik7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgJGxpbmsgPSAkJCQxKFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChxdWVyaWVzLmpvaW4oJywnKSkpKTtcblxuICAgICAgICBpZiAoJGxpbmsuaGFzQ2xhc3MoQ2xhc3NOYW1lLkRST1BET1dOX0lURU0pKSB7XG4gICAgICAgICAgJGxpbmsuY2xvc2VzdChTZWxlY3Rvci5EUk9QRE9XTikuZmluZChTZWxlY3Rvci5EUk9QRE9XTl9UT0dHTEUpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgICRsaW5rLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNldCB0cmlnZ2VyZWQgbGluayBhcyBhY3RpdmVcbiAgICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTsgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuXG4gICAgICAgICAgJGxpbmsucGFyZW50cyhTZWxlY3Rvci5OQVZfTElTVF9HUk9VUCkucHJldihTZWxlY3Rvci5OQVZfTElOS1MgKyBcIiwgXCIgKyBTZWxlY3Rvci5MSVNUX0lURU1TKS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTsgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG5cbiAgICAgICAgICAkbGluay5wYXJlbnRzKFNlbGVjdG9yLk5BVl9MSVNUX0dST1VQKS5wcmV2KFNlbGVjdG9yLk5BVl9JVEVNUykuY2hpbGRyZW4oU2VsZWN0b3IuTkFWX0xJTktTKS5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQkJDEodGhpcy5fc2Nyb2xsRWxlbWVudCkudHJpZ2dlcihFdmVudC5BQ1RJVkFURSwge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5fY2xlYXIgPSBmdW5jdGlvbiBfY2xlYXIoKSB7XG4gICAgICAgIHZhciBub2RlcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9zZWxlY3RvcikpO1xuICAgICAgICAkJCQxKG5vZGVzKS5maWx0ZXIoU2VsZWN0b3IuQUNUSVZFKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgIH07IC8vIFN0YXRpY1xuXG5cbiAgICAgIFNjcm9sbFNweS5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkJCQxKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWc7XG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICAgJCQkMSh0aGlzKS5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhTY3JvbGxTcHksIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XSk7XG5cbiAgICAgIHJldHVybiBTY3JvbGxTcHk7XG4gICAgfSgpO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEod2luZG93KS5vbihFdmVudC5MT0FEX0RBVEFfQVBJLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2Nyb2xsU3B5cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5EQVRBX1NQWSkpO1xuICAgICAgdmFyIHNjcm9sbFNweXNMZW5ndGggPSBzY3JvbGxTcHlzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IHNjcm9sbFNweXNMZW5ndGg7IGktLTspIHtcbiAgICAgICAgdmFyICRzcHkgPSAkJCQxKHNjcm9sbFNweXNbaV0pO1xuXG4gICAgICAgIFNjcm9sbFNweS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJHNweSwgJHNweS5kYXRhKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGpRdWVyeVxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gICAgJCQkMS5mbltOQU1FXSA9IFNjcm9sbFNweS5falF1ZXJ5SW50ZXJmYWNlO1xuICAgICQkJDEuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBTY3JvbGxTcHk7XG5cbiAgICAkJCQxLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAkJCQxLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgcmV0dXJuIFNjcm9sbFNweS5falF1ZXJ5SW50ZXJmYWNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gU2Nyb2xsU3B5O1xuICB9KCQpO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgKHY0LjEuMik6IHRhYi5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgVGFiID0gZnVuY3Rpb24gKCQkJDEpIHtcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDb25zdGFudHNcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cbiAgICB2YXIgTkFNRSA9ICd0YWInO1xuICAgIHZhciBWRVJTSU9OID0gJzQuMS4yJztcbiAgICB2YXIgREFUQV9LRVkgPSAnYnMudGFiJztcbiAgICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgICB2YXIgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gICAgdmFyIEpRVUVSWV9OT19DT05GTElDVCA9ICQkJDEuZm5bTkFNRV07XG4gICAgdmFyIEV2ZW50ID0ge1xuICAgICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVksXG4gICAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVksXG4gICAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSxcbiAgICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVksXG4gICAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gICAgfTtcbiAgICB2YXIgQ2xhc3NOYW1lID0ge1xuICAgICAgRFJPUERPV05fTUVOVTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICAgIERJU0FCTEVEOiAnZGlzYWJsZWQnLFxuICAgICAgRkFERTogJ2ZhZGUnLFxuICAgICAgU0hPVzogJ3Nob3cnXG4gICAgfTtcbiAgICB2YXIgU2VsZWN0b3IgPSB7XG4gICAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgICBOQVZfTElTVF9HUk9VUDogJy5uYXYsIC5saXN0LWdyb3VwJyxcbiAgICAgIEFDVElWRTogJy5hY3RpdmUnLFxuICAgICAgQUNUSVZFX1VMOiAnPiBsaSA+IC5hY3RpdmUnLFxuICAgICAgREFUQV9UT0dHTEU6ICdbZGF0YS10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLXRvZ2dsZT1cImxpc3RcIl0nLFxuICAgICAgRFJPUERPV05fVE9HR0xFOiAnLmRyb3Bkb3duLXRvZ2dsZScsXG4gICAgICBEUk9QRE9XTl9BQ1RJVkVfQ0hJTEQ6ICc+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cblxuICAgIH07XG5cbiAgICB2YXIgVGFiID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gVGFiKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgICB2YXIgX3Byb3RvID0gVGFiLnByb3RvdHlwZTtcblxuICAgICAgLy8gUHVibGljXG4gICAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSAmJiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmICQkJDEodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSkgfHwgJCQkMSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRElTQUJMRUQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRhcmdldDtcbiAgICAgICAgdmFyIHByZXZpb3VzO1xuICAgICAgICB2YXIgbGlzdEVsZW1lbnQgPSAkJCQxKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoU2VsZWN0b3IuTkFWX0xJU1RfR1JPVVApWzBdO1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGl0ZW1TZWxlY3RvciA9IGxpc3RFbGVtZW50Lm5vZGVOYW1lID09PSAnVUwnID8gU2VsZWN0b3IuQUNUSVZFX1VMIDogU2VsZWN0b3IuQUNUSVZFO1xuICAgICAgICAgIHByZXZpb3VzID0gJCQkMS5tYWtlQXJyYXkoJCQkMShsaXN0RWxlbWVudCkuZmluZChpdGVtU2VsZWN0b3IpKTtcbiAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhpZGVFdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuSElERSwge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzaG93RXZlbnQgPSAkJCQxLkV2ZW50KEV2ZW50LlNIT1csIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiBwcmV2aW91c1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAkJCQxKHByZXZpb3VzKS50cmlnZ2VyKGhpZGVFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAkJCQxKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2hvd0V2ZW50KTtcblxuICAgICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpIHx8IGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGhpcy5fZWxlbWVudCwgbGlzdEVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICAgIHZhciBoaWRkZW5FdmVudCA9ICQkJDEuRXZlbnQoRXZlbnQuSElEREVOLCB7XG4gICAgICAgICAgICByZWxhdGVkVGFyZ2V0OiBfdGhpcy5fZWxlbWVudFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBzaG93bkV2ZW50ID0gJCQkMS5FdmVudChFdmVudC5TSE9XTiwge1xuICAgICAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkJCQxKHByZXZpb3VzKS50cmlnZ2VyKGhpZGRlbkV2ZW50KTtcbiAgICAgICAgICAkJCQxKF90aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLCBjb21wbGV0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAkJCQxLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIH07IC8vIFByaXZhdGVcblxuXG4gICAgICBfcHJvdG8uX2FjdGl2YXRlID0gZnVuY3Rpb24gX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnRzO1xuXG4gICAgICAgIGlmIChjb250YWluZXIubm9kZU5hbWUgPT09ICdVTCcpIHtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9ICQkJDEoY29udGFpbmVyKS5maW5kKFNlbGVjdG9yLkFDVElWRV9VTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSAkJCQxKGNvbnRhaW5lcikuY2hpbGRyZW4oU2VsZWN0b3IuQUNUSVZFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICAgICAgdmFyIGlzVHJhbnNpdGlvbmluZyA9IGNhbGxiYWNrICYmIGFjdGl2ZSAmJiAkJCQxKGFjdGl2ZSkuaGFzQ2xhc3MoQ2xhc3NOYW1lLkZBREUpO1xuXG4gICAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYWN0aXZlICYmIGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGFjdGl2ZSk7XG4gICAgICAgICAgJCQkMShhY3RpdmUpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uX3RyYW5zaXRpb25Db21wbGV0ZSA9IGZ1bmN0aW9uIF90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgJCQkMShhY3RpdmUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XICsgXCIgXCIgKyBDbGFzc05hbWUuQUNUSVZFKTtcbiAgICAgICAgICB2YXIgZHJvcGRvd25DaGlsZCA9ICQkJDEoYWN0aXZlLnBhcmVudE5vZGUpLmZpbmQoU2VsZWN0b3IuRFJPUERPV05fQUNUSVZFX0NISUxEKVswXTtcblxuICAgICAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgICAgICAkJCQxKGRyb3Bkb3duQ2hpbGQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhY3RpdmUuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICQkJDEoZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFV0aWwucmVmbG93KGVsZW1lbnQpO1xuICAgICAgICAkJCQxKGVsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlICYmICQkJDEoZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDbGFzc05hbWUuRFJPUERPV05fTUVOVSkpIHtcbiAgICAgICAgICB2YXIgZHJvcGRvd25FbGVtZW50ID0gJCQkMShlbGVtZW50KS5jbG9zZXN0KFNlbGVjdG9yLkRST1BET1dOKVswXTtcblxuICAgICAgICAgIGlmIChkcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBkcm9wZG93blRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRyb3Bkb3duRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yLkRST1BET1dOX1RPR0dMRSkpO1xuICAgICAgICAgICAgJCQkMShkcm9wZG93blRvZ2dsZUxpc3QpLmFkZENsYXNzKENsYXNzTmFtZS5BQ1RJVkUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9OyAvLyBTdGF0aWNcblxuXG4gICAgICBUYWIuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciAkdGhpcyA9ICQkJDEodGhpcyk7XG4gICAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBUYWIodGhpcyk7XG4gICAgICAgICAgICAkdGhpcy5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhUYWIsIG51bGwsIFt7XG4gICAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgICB9XG4gICAgICB9XSk7XG5cbiAgICAgIHJldHVybiBUYWI7XG4gICAgfSgpO1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cblxuICAgICQkJDEoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBUYWIuX2pRdWVyeUludGVyZmFjZS5jYWxsKCQkJDEodGhpcyksICdzaG93Jyk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogalF1ZXJ5XG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgICAkJCQxLmZuW05BTUVdID0gVGFiLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgJCQkMS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IFRhYjtcblxuICAgICQkJDEuZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICQkJDEuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICByZXR1cm4gVGFiLl9qUXVlcnlJbnRlcmZhY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBUYWI7XG4gIH0oJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMS4yKTogaW5kZXguanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgKGZ1bmN0aW9uICgkJCQxKSB7XG4gICAgaWYgKHR5cGVvZiAkJCQxID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeS4galF1ZXJ5IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIEJvb3RzdHJhcFxcJ3MgSmF2YVNjcmlwdC4nKTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbiA9ICQkJDEuZm4uanF1ZXJ5LnNwbGl0KCcgJylbMF0uc3BsaXQoJy4nKTtcbiAgICB2YXIgbWluTWFqb3IgPSAxO1xuICAgIHZhciBsdE1ham9yID0gMjtcbiAgICB2YXIgbWluTWlub3IgPSA5O1xuICAgIHZhciBtaW5QYXRjaCA9IDE7XG4gICAgdmFyIG1heE1ham9yID0gNDtcblxuICAgIGlmICh2ZXJzaW9uWzBdIDwgbHRNYWpvciAmJiB2ZXJzaW9uWzFdIDwgbWluTWlub3IgfHwgdmVyc2lvblswXSA9PT0gbWluTWFqb3IgJiYgdmVyc2lvblsxXSA9PT0gbWluTWlub3IgJiYgdmVyc2lvblsyXSA8IG1pblBhdGNoIHx8IHZlcnNpb25bMF0gPj0gbWF4TWFqb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGF0IGxlYXN0IGpRdWVyeSB2MS45LjEgYnV0IGxlc3MgdGhhbiB2NC4wLjAnKTtcbiAgICB9XG4gIH0pKCQpO1xuXG4gIGV4cG9ydHMuVXRpbCA9IFV0aWw7XG4gIGV4cG9ydHMuQWxlcnQgPSBBbGVydDtcbiAgZXhwb3J0cy5CdXR0b24gPSBCdXR0b247XG4gIGV4cG9ydHMuQ2Fyb3VzZWwgPSBDYXJvdXNlbDtcbiAgZXhwb3J0cy5Db2xsYXBzZSA9IENvbGxhcHNlO1xuICBleHBvcnRzLkRyb3Bkb3duID0gRHJvcGRvd247XG4gIGV4cG9ydHMuTW9kYWwgPSBNb2RhbDtcbiAgZXhwb3J0cy5Qb3BvdmVyID0gUG9wb3ZlcjtcbiAgZXhwb3J0cy5TY3JvbGxzcHkgPSBTY3JvbGxTcHk7XG4gIGV4cG9ydHMuVGFiID0gVGFiO1xuICBleHBvcnRzLlRvb2x0aXAgPSBUb29sdGlwO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAuanMubWFwXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9ib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuanNcbi8vIG1vZHVsZSBpZCA9IDIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///21\n");
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("module.exports = __webpack_require__(23);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanM/OWFkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n");
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\nvar bind = __webpack_require__(6);\nvar Axios = __webpack_require__(25);\nvar defaults = __webpack_require__(2);\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(10);\naxios.CancelToken = __webpack_require__(39);\naxios.isCancel = __webpack_require__(9);\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = __webpack_require__(40);\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzP2I0ODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UodXRpbHMubWVyZ2UoZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qc1xuLy8gbW9kdWxlIGlkID0gMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///23\n");
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports) {
-
-eval("/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaXMtYnVmZmVyL2luZGV4LmpzPzQ1ZWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///24\n");
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar defaults = __webpack_require__(2);\nvar utils = __webpack_require__(0);\nvar InterceptorManager = __webpack_require__(34);\nvar dispatchRequest = __webpack_require__(35);\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n config.method = config.method.toLowerCase();\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/NWU2NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEsa0NBQWtDLGNBQWM7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6IjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gdXRpbHMubWVyZ2Uoe1xuICAgICAgdXJsOiBhcmd1bWVudHNbMF1cbiAgICB9LCBhcmd1bWVudHNbMV0pO1xuICB9XG5cbiAgY29uZmlnID0gdXRpbHMubWVyZ2UoZGVmYXVsdHMsIHttZXRob2Q6ICdnZXQnfSwgdGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25\n");
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcz9lNTU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanNcbi8vIG1vZHVsZSBpZCA9IDI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///26\n");
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar createError = __webpack_require__(8);\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzP2RiNTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgLy8gTm90ZTogc3RhdHVzIGlzIG5vdCBleHBvc2VkIGJ5IFhEb21haW5SZXF1ZXN0XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qc1xuLy8gbW9kdWxlIGlkID0gMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n");
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzP2I3Y2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXR1cm4gZXJyb3I7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzXG4vLyBtb2R1bGUgaWQgPSAyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n");
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanM/MGQwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIyOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lNDAvZ2ksICdAJykuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qc1xuLy8gbW9kdWxlIGlkID0gMjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///29\n");
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzP2EwOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixlQUFlOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBIiwiZmlsZSI6IjMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qc1xuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///30\n");
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzE4NzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQixnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpXG4pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzXG4vLyBtb2R1bGUgaWQgPSAzMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///31\n");
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnRvYS5qcz9iNjEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGJ0b2EgcG9seWZpbGwgZm9yIElFPDEwIGNvdXJ0ZXN5IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZGNoYW1iZXJzL0Jhc2U2NC5qc1xuXG52YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG5mdW5jdGlvbiBFKCkge1xuICB0aGlzLm1lc3NhZ2UgPSAnU3RyaW5nIGNvbnRhaW5zIGFuIGludmFsaWQgY2hhcmFjdGVyJztcbn1cbkUucHJvdG90eXBlID0gbmV3IEVycm9yO1xuRS5wcm90b3R5cGUuY29kZSA9IDU7XG5FLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cbmZ1bmN0aW9uIGJ0b2EoaW5wdXQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhpbnB1dCk7XG4gIHZhciBvdXRwdXQgPSAnJztcbiAgZm9yIChcbiAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlclxuICAgIHZhciBibG9jaywgY2hhckNvZGUsIGlkeCA9IDAsIG1hcCA9IGNoYXJzO1xuICAgIC8vIGlmIHRoZSBuZXh0IHN0ciBpbmRleCBkb2VzIG5vdCBleGlzdDpcbiAgICAvLyAgIGNoYW5nZSB0aGUgbWFwcGluZyB0YWJsZSB0byBcIj1cIlxuICAgIC8vICAgY2hlY2sgaWYgZCBoYXMgbm8gZnJhY3Rpb25hbCBkaWdpdHNcbiAgICBzdHIuY2hhckF0KGlkeCB8IDApIHx8IChtYXAgPSAnPScsIGlkeCAlIDEpO1xuICAgIC8vIFwiOCAtIGlkeCAlIDEgKiA4XCIgZ2VuZXJhdGVzIHRoZSBzZXF1ZW5jZSAyLCA0LCA2LCA4XG4gICAgb3V0cHV0ICs9IG1hcC5jaGFyQXQoNjMgJiBibG9jayA+PiA4IC0gaWR4ICUgMSAqIDgpXG4gICkge1xuICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaWR4ICs9IDMgLyA0KTtcbiAgICBpZiAoY2hhckNvZGUgPiAweEZGKSB7XG4gICAgICB0aHJvdyBuZXcgRSgpO1xuICAgIH1cbiAgICBibG9jayA9IGJsb2NrIDw8IDggfCBjaGFyQ29kZTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ0b2E7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idG9hLmpzXG4vLyBtb2R1bGUgaWQgPSAzMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///32\n");
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcz9hNzU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEMsT0FBTzs7QUFFUDtBQUNBLDBEQUEwRCx3QkFBd0I7QUFDbEY7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsNkJBQTZCLGFBQWEsRUFBRTtBQUM1QztBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKVxuKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanNcbi8vIG1vZHVsZSBpZCA9IDMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33\n");
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzPzdlZTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSIsImZpbGUiOiIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanNcbi8vIG1vZHVsZSBpZCA9IDM0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n");
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\nvar transformData = __webpack_require__(36);\nvar isCancel = __webpack_require__(9);\nvar defaults = __webpack_require__(2);\nvar isAbsoluteURL = __webpack_require__(37);\nvar combineURLs = __webpack_require__(38);\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzP2M0YmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBTdXBwb3J0IGJhc2VVUkwgY29uZmlnXG4gIGlmIChjb25maWcuYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChjb25maWcudXJsKSkge1xuICAgIGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gIH1cblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzIHx8IHt9XG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qc1xuLy8gbW9kdWxlIGlkID0gMzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n");
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(0);\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz80Y2Q1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLE1BQU07QUFDakIsV0FBVyxlQUFlO0FBQzFCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EiLCJmaWxlIjoiMzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzXG4vLyBtb2R1bGUgaWQgPSAzNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///36\n");
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz83NDhjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanNcbi8vIG1vZHVsZSBpZCA9IDM3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n");
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/YTkxNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qc1xuLy8gbW9kdWxlIGlkID0gMzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///38\n");
-
-/***/ }),
-/* 39 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nvar Cancel = __webpack_require__(10);\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz83MTZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIzOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzXG4vLyBtb2R1bGUgaWQgPSAzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///39\n");
-
-/***/ }),
-/* 40 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzP2E3MTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanNcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n");
-
-/***/ }),
-/* 41 */
-/***/ (function(module, exports) {
-
-eval("$.ajaxSetup({\n headers: {\n 'X-CSRF-Token': $('input[name=\"_token\"]').val()\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3NldHVwLmpzPzkzMWMiXSwibmFtZXMiOlsiJCIsImFqYXhTZXR1cCIsImhlYWRlcnMiLCJ2YWwiXSwibWFwcGluZ3MiOiJBQUFBQSxFQUFFQyxTQUFGLENBQVk7QUFDUkMsYUFBUztBQUNMLHdCQUFnQkYsRUFBRSxzQkFBRixFQUEwQkcsR0FBMUI7QUFEWDtBQURELENBQVoiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIkLmFqYXhTZXR1cCh7XG4gICAgaGVhZGVyczoge1xuICAgICAgICAnWC1DU1JGLVRva2VuJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXG4gICAgfVxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9zZXR1cC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///41\n");
-
-/***/ }),
-/* 42 */
-/***/ (function(module, exports) {
-
-eval("$(\"#avatarFile\").on(\"change\", function () {\n var preview = document.querySelector('#image-preview');\n var file = document.querySelector(\"#avatarFile\").files[0];\n var reader = new FileReader();\n\n reader.addEventListener(\"load\", function () {\n preview.src = reader.result;\n }, false);\n\n if (file) {\n reader.readAsDataURL(file);\n }\n});\n\n$(\"#avatarForm\").submit(function (e) {\n var url = \"/avatar\";\n var data = new FormData();\n $.each(jQuery('#avatarFile')[0].files, function (i, file) {\n data.append('avatar', file);\n });\n\n e.preventDefault();\n $.ajax({\n url: url,\n data: data,\n cache: false,\n contentType: false,\n processData: false,\n method: 'POST',\n type: 'POST',\n success: function success(data) {\n $(\"#avatarUploadSucceededAlert\").show();\n $(\"#avatarUploadSucceededMessage\").text(data.success);\n },\n error: function error() {\n $(\"#avatarUploadFailedAlert\").show();\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3Byb2ZpbGUuanM/MWEwMCJdLCJuYW1lcyI6WyIkIiwib24iLCJwcmV2aWV3IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZmlsZSIsImZpbGVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJzcmMiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwic3VibWl0IiwiZSIsInVybCIsImRhdGEiLCJGb3JtRGF0YSIsImVhY2giLCJqUXVlcnkiLCJpIiwiYXBwZW5kIiwicHJldmVudERlZmF1bHQiLCJhamF4IiwiY2FjaGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwibWV0aG9kIiwidHlwZSIsInN1Y2Nlc3MiLCJzaG93IiwidGV4dCIsImVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQUEsRUFBRSxhQUFGLEVBQWlCQyxFQUFqQixDQUFvQixRQUFwQixFQUE4QixZQUFNO0FBQ2hDLFFBQUlDLFVBQVVDLFNBQVNDLGFBQVQsQ0FBdUIsZ0JBQXZCLENBQWQ7QUFDQSxRQUFJQyxPQUFPRixTQUFTQyxhQUFULENBQXVCLGFBQXZCLEVBQXNDRSxLQUF0QyxDQUE0QyxDQUE1QyxDQUFYO0FBQ0EsUUFBSUMsU0FBUyxJQUFJQyxVQUFKLEVBQWI7O0FBRUFELFdBQU9FLGdCQUFQLENBQXdCLE1BQXhCLEVBQWdDLFlBQU07QUFDbENQLGdCQUFRUSxHQUFSLEdBQWNILE9BQU9JLE1BQXJCO0FBQ0gsS0FGRCxFQUVHLEtBRkg7O0FBSUEsUUFBSU4sSUFBSixFQUFVO0FBQ05FLGVBQU9LLGFBQVAsQ0FBcUJQLElBQXJCO0FBQ0g7QUFDSixDQVpEOztBQWNBTCxFQUFFLGFBQUYsRUFBaUJhLE1BQWpCLENBQXdCLFVBQVVDLENBQVYsRUFBYTtBQUNqQyxRQUFJQyxNQUFNLFNBQVY7QUFDQSxRQUFJQyxPQUFPLElBQUlDLFFBQUosRUFBWDtBQUNBakIsTUFBRWtCLElBQUYsQ0FBT0MsT0FBTyxhQUFQLEVBQXNCLENBQXRCLEVBQXlCYixLQUFoQyxFQUF1QyxVQUFDYyxDQUFELEVBQUlmLElBQUosRUFBYTtBQUNoRFcsYUFBS0ssTUFBTCxDQUFZLFFBQVosRUFBc0JoQixJQUF0QjtBQUNILEtBRkQ7O0FBSUFTLE1BQUVRLGNBQUY7QUFDQXRCLE1BQUV1QixJQUFGLENBQU87QUFDSFIsYUFBS0EsR0FERjtBQUVIQyxjQUFNQSxJQUZIO0FBR0hRLGVBQU8sS0FISjtBQUlIQyxxQkFBYSxLQUpWO0FBS0hDLHFCQUFhLEtBTFY7QUFNSEMsZ0JBQVEsTUFOTDtBQU9IQyxjQUFNLE1BUEg7QUFRSEMsaUJBQVMsaUJBQUNiLElBQUQsRUFBVTtBQUNmaEIsY0FBRSw2QkFBRixFQUFpQzhCLElBQWpDO0FBQ0E5QixjQUFFLCtCQUFGLEVBQW1DK0IsSUFBbkMsQ0FBd0NmLEtBQUthLE9BQTdDO0FBQ0gsU0FYRTtBQVlIRyxlQUFPLGlCQUFNO0FBQ1RoQyxjQUFFLDBCQUFGLEVBQThCOEIsSUFBOUI7QUFDSDtBQWRFLEtBQVA7QUFnQkgsQ0F4QkQiLCJmaWxlIjoiNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIkKFwiI2F2YXRhckZpbGVcIikub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgIHZhciBwcmV2aWV3ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ltYWdlLXByZXZpZXcnKTtcbiAgICB2YXIgZmlsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyRmlsZVwiKS5maWxlc1swXTtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gICAgICAgIHByZXZpZXcuc3JjID0gcmVhZGVyLnJlc3VsdDtcbiAgICB9LCBmYWxzZSk7XG5cbiAgICBpZiAoZmlsZSkge1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICB9XG59KTtcblxuJChcIiNhdmF0YXJGb3JtXCIpLnN1Ym1pdChmdW5jdGlvbiAoZSkge1xuICAgIHZhciB1cmwgPSBcIi9hdmF0YXJcIjtcbiAgICB2YXIgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICQuZWFjaChqUXVlcnkoJyNhdmF0YXJGaWxlJylbMF0uZmlsZXMsIChpLCBmaWxlKSA9PiB7XG4gICAgICAgIGRhdGEuYXBwZW5kKCdhdmF0YXInLCBmaWxlKTtcbiAgICB9KTtcblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAkLmFqYXgoe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICQoXCIjYXZhdGFyVXBsb2FkU3VjY2VlZGVkQWxlcnRcIikuc2hvdygpO1xuICAgICAgICAgICAgJChcIiNhdmF0YXJVcGxvYWRTdWNjZWVkZWRNZXNzYWdlXCIpLnRleHQoZGF0YS5zdWNjZXNzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICQoXCIjYXZhdGFyVXBsb2FkRmFpbGVkQWxlcnRcIikuc2hvdygpO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3Byb2ZpbGUuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///42\n");
-
-/***/ }),
-/* 43 */
-/***/ (function(module, exports) {
-
-eval("// var openpgp = window.openpgp;\n\n// var options = {\n// userIds: [{ name:'Marvin Borner', email:'test@test.de' }], // multiple user IDs\n// numBits: 4096, // RSA key size\n// passphrase: 'cool password of private key'\n// };\n\n// openpgp.generateKey(options).then(function(key) {\n// var privateKey = key.privateKeyArmored; // '-----BEGIN PGP PRIVATE KEY BLOCK ... '\n// var publicKey = key.publicKeyArmored; // '-----BEGIN PGP PUBLIC KEY BLOCK ... '\n\n// console.log(publicKey);\n// console.log(privateKey);\n// });\n\n// $.ajax({\n// type: \"POST\",\n// url: \"keys/public/1\",\n// data: {\n// \"key\": \"test_key_2\"\n// },\n// cache: false,\n// success: (results) => {\n// console.log(results);\n// }\n// });\n\n\nvar socket = io('http://127.0.0.1:8890', {\n transports: ['websocket']\n});\nsocket.on('message', function (data) {\n data = JSON.parse(data);\n $(\"#messages\").append(\"<p>\" + data.user + \" : \" + data.message + \"</p>\");\n});\n\n$('input.send').click(function (e) {\n e.preventDefault();\n sendMessage();\n});\n\nfunction sendMessage() {\n var message = $('input.message').val();\n $('input.message').val(\"\");\n $.ajax({\n type: \"POST\",\n url: \"sendMessage\",\n data: {\n \"message\": message\n },\n cache: false\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NoYXQuanM/NjE1NCJdLCJuYW1lcyI6WyJzb2NrZXQiLCJpbyIsInRyYW5zcG9ydHMiLCJvbiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCIkIiwiYXBwZW5kIiwidXNlciIsIm1lc3NhZ2UiLCJjbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInNlbmRNZXNzYWdlIiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJjYWNoZSJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBLElBQUlBLFNBQVNDLEdBQUcsdUJBQUgsRUFBNEI7QUFDckNDLGdCQUFZLENBQUMsV0FBRDtBQUR5QixDQUE1QixDQUFiO0FBR0FGLE9BQU9HLEVBQVAsQ0FBVSxTQUFWLEVBQXFCLFVBQUNDLElBQUQsRUFBVTtBQUMzQkEsV0FBT0MsS0FBS0MsS0FBTCxDQUFXRixJQUFYLENBQVA7QUFDQUcsTUFBRSxXQUFGLEVBQWVDLE1BQWYsQ0FBc0IsUUFBUUosS0FBS0ssSUFBYixHQUFvQixLQUFwQixHQUE0QkwsS0FBS00sT0FBakMsR0FBMkMsTUFBakU7QUFDSCxDQUhEOztBQUtBSCxFQUFFLFlBQUYsRUFBZ0JJLEtBQWhCLENBQXNCLFVBQUNDLENBQUQsRUFBTztBQUN6QkEsTUFBRUMsY0FBRjtBQUNBQztBQUNILENBSEQ7O0FBS0EsU0FBU0EsV0FBVCxHQUF1QjtBQUNuQixRQUFJSixVQUFVSCxFQUFFLGVBQUYsRUFBbUJRLEdBQW5CLEVBQWQ7QUFDQVIsTUFBRSxlQUFGLEVBQW1CUSxHQUFuQixDQUF1QixFQUF2QjtBQUNBUixNQUFFUyxJQUFGLENBQU87QUFDSEMsY0FBTSxNQURIO0FBRUhDLGFBQUssYUFGRjtBQUdIZCxjQUFNO0FBQ0YsdUJBQVdNO0FBRFQsU0FISDtBQU1IUyxlQUFPO0FBTkosS0FBUDtBQVFIIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdmFyIG9wZW5wZ3AgPSB3aW5kb3cub3BlbnBncDtcblxuLy8gdmFyIG9wdGlvbnMgPSB7XG4vLyAgICAgdXNlcklkczogW3sgbmFtZTonTWFydmluIEJvcm5lcicsIGVtYWlsOid0ZXN0QHRlc3QuZGUnIH1dLCAvLyBtdWx0aXBsZSB1c2VyIElEc1xuLy8gICAgIG51bUJpdHM6IDQwOTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSU0Ega2V5IHNpemVcbi8vICAgICBwYXNzcGhyYXNlOiAnY29vbCBwYXNzd29yZCBvZiBwcml2YXRlIGtleSdcbi8vIH07XG5cbi8vIG9wZW5wZ3AuZ2VuZXJhdGVLZXkob3B0aW9ucykudGhlbihmdW5jdGlvbihrZXkpIHtcbi8vICAgICB2YXIgcHJpdmF0ZUtleSA9IGtleS5wcml2YXRlS2V5QXJtb3JlZDsgLy8gJy0tLS0tQkVHSU4gUEdQIFBSSVZBVEUgS0VZIEJMT0NLIC4uLiAnXG4vLyAgICAgdmFyIHB1YmxpY0tleSA9IGtleS5wdWJsaWNLZXlBcm1vcmVkOyAgIC8vICctLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLIC4uLiAnXG5cbi8vICAgICBjb25zb2xlLmxvZyhwdWJsaWNLZXkpO1xuLy8gICAgIGNvbnNvbGUubG9nKHByaXZhdGVLZXkpO1xuLy8gfSk7XG5cbi8vICQuYWpheCh7XG4vLyAgICAgdHlwZTogXCJQT1NUXCIsXG4vLyAgICAgdXJsOiBcImtleXMvcHVibGljLzFcIixcbi8vICAgICBkYXRhOiB7XG4vLyAgICAgICAgIFwia2V5XCI6IFwidGVzdF9rZXlfMlwiXG4vLyAgICAgfSxcbi8vICAgICBjYWNoZTogZmFsc2UsXG4vLyAgICAgc3VjY2VzczogKHJlc3VsdHMpID0+IHtcbi8vICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4vLyAgICAgfVxuLy8gfSk7XG5cblxuXG52YXIgc29ja2V0ID0gaW8oJ2h0dHA6Ly8xMjcuMC4wLjE6ODg5MCcsIHtcbiAgICB0cmFuc3BvcnRzOiBbJ3dlYnNvY2tldCddXG59KTtcbnNvY2tldC5vbignbWVzc2FnZScsIChkYXRhKSA9PiB7XG4gICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgJChcIiNtZXNzYWdlc1wiKS5hcHBlbmQoXCI8cD5cIiArIGRhdGEudXNlciArIFwiIDogXCIgKyBkYXRhLm1lc3NhZ2UgKyBcIjwvcD5cIik7XG59KTtcblxuJCgnaW5wdXQuc2VuZCcpLmNsaWNrKChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHNlbmRNZXNzYWdlKCk7XG59KTtcblxuZnVuY3Rpb24gc2VuZE1lc3NhZ2UoKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAkKCdpbnB1dC5tZXNzYWdlJykudmFsKCk7XG4gICAgJCgnaW5wdXQubWVzc2FnZScpLnZhbChcIlwiKTtcbiAgICAkLmFqYXgoe1xuICAgICAgICB0eXBlOiBcIlBPU1RcIixcbiAgICAgICAgdXJsOiBcInNlbmRNZXNzYWdlXCIsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIFwibWVzc2FnZVwiOiBtZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIGNhY2hlOiBmYWxzZVxuICAgIH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3Jlc291cmNlcy9hc3NldHMvanMvY2hhdC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///43\n");
-
-/***/ }),
-/* 44 */
-/***/ (function(module, exports) {
-
-eval("// removed by extract-text-webpack-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYWRtaW4uc2Nzcz9iM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjQ0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9hZG1pbi5zY3NzXG4vLyBtb2R1bGUgaWQgPSA0NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n");
-
-/***/ }),
-/* 45 */
-/***/ (function(module, exports) {
-
-eval("// removed by extract-text-webpack-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYXBwLnNjc3M/ODg2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYXBwLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDQ1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45\n");
-
-/***/ }),
-/* 46 */,
-/* 47 */,
-/* 48 */,
-/* 49 */,
-/* 50 */,
-/* 51 */,
-/* 52 */,
-/* 53 */,
-/* 54 */,
-/* 55 */,
-/* 56 */,
-/* 57 */,
-/* 58 */,
-/* 59 */,
-/* 60 */,
-/* 61 */,
-/* 62 */,
-/* 63 */,
-/* 64 */,
-/* 65 */,
-/* 66 */,
-/* 67 */,
-/* 68 */,
-/* 69 */,
-/* 70 */,
-/* 71 */,
-/* 72 */,
-/* 73 */,
-/* 74 */,
-/* 75 */,
-/* 76 */,
-/* 77 */,
-/* 78 */,
-/* 79 */,
-/* 80 */,
-/* 81 */,
-/* 82 */,
-/* 83 */,
-/* 84 */,
-/* 85 */,
-/* 86 */,
-/* 87 */,
-/* 88 */,
-/* 89 */
-/***/ (function(module, exports) {
-
-eval("/*!\n * Font Awesome Free 5.1.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n!function(){\"use strict\";var c={};try{\"undefined\"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?\"\":l,z=c,v=(~h.indexOf(\"MSIE\")||h.indexOf(\"Trident/\"),\"___FONT_AWESOME___\"),m=function(){try{return!0}catch(c){return!1}}(),s=[1,2,3,4,5,6,7,8,9,10],e=s.concat([11,12,13,14,15,16,17,18,19,20]);[\"xs\",\"sm\",\"lg\",\"fw\",\"ul\",\"li\",\"border\",\"pull-left\",\"pull-right\",\"spin\",\"pulse\",\"rotate-90\",\"rotate-180\",\"rotate-270\",\"flip-horizontal\",\"flip-vertical\",\"stack\",\"stack-1x\",\"stack-2x\",\"inverse\",\"layers\",\"layers-text\",\"layers-counter\"].concat(s.map(function(c){return c+\"x\"})).concat(e.map(function(c){return\"w-\"+c}));var a=z||{};a[v]||(a[v]={}),a[v].styles||(a[v].styles={}),a[v].hooks||(a[v].hooks={}),a[v].shims||(a[v].shims=[]);var t=a[v],M=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var z in h)Object.prototype.hasOwnProperty.call(h,z)&&(c[z]=h[z])}return c};var f={\"500px\":[448,512,[],\"f26e\",\"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"],\"accessible-icon\":[448,512,[],\"f368\",\"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"],accusoft:[640,512,[],\"f369\",\"M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2 23.4-2.4 1.3-114.6 47.7-117.8 48.9-10.1 4-17.5 6.8-30.8-9.3m114.7-5.6s-115 50.4-117.5 51.6c-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2-2.3-.3-24.6-4.7-38-7.2m-326-181.3s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3v-1l-51.2-65.8\"],adn:[496,512,[],\"f170\",\"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"],adversal:[512,512,[],\"f36a\",\"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"],affiliatetheme:[512,512,[],\"f36b\",\"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"],algolia:[448,512,[],\"f36c\",\"M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z\"],amazon:[448,512,[],\"f270\",\"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"],\"amazon-pay\":[611,512,[],\"f42c\",\"M0 325.2c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7 40.7 20.4 83.2 35.6 127.4 46.3 20.9 5 41.9 9 63.2 11.8 31.5 4.2 63.2 6 95 5.2 17.4-.4 34.8-1.8 52.1-3.8 56.4-6.7 110.9-20.8 163.3-42.8 2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9-2.8 2.8-6.3 5.1-9.6 7.4-30.7 21.1-64.2 36.4-99.6 47.9-24.6 7.9-49.6 13.8-75.1 17.6-17.6 2.6-35.4 4.4-53.2 4.8-.8 0-1.7.2-2.5.3H294c-.8-.1-1.7-.3-2.5-.3-3.6-.2-7.2-.3-10.7-.4-16.9-.7-33.7-2.6-50.4-5.3-27.4-4.5-54.2-11.4-80.4-20.9-54.1-19.6-102.6-48.6-145.6-87-1.8-1.6-3-3.8-4.4-5.7v-2zM158 65c-1.4.2-2.9.4-4.3.6-14 1.7-26.6 6.9-38 15.1-2.4 1.7-4.6 3.5-7.1 5.4-.2-.5-.4-1-.4-1.4-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6H87.8c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3V215c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zm-47.4 41.9c0-1.5.4-2.4 1.7-3.3 13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9-1.2-.9-1.7-1.7-1.7-3.3.1-14.1 0-28.1 0-42.2 0-14 .1-28 0-42.1zM316.3 65c-1 .1-2 .3-2.9.4-9.8.5-19.4 1.7-28.9 4.1-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9 0 .4-.1.9-.2 1.4-.5-.1-.9 0-1.3-.1-10.5-2.5-21.1-4.3-32-4.9-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4.4-.4.9-.7 1.6-1.1.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0 2.7-.1 4.5-1.9 4.8-4.7.1-.9.1-1.9.1-2.8v-106c0-4.3-.2-8.6-.9-12.9-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7c0 1.3-.4 2.2-1.5 3-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8-6.3-2.5-10.4-6.9-12.4-13.3s-2-13-.1-19.4c2.5-8.3 8.4-13 16.4-15.6 8.1-2.6 16.5-3 24.8-2.2 8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3-.1 4.7-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3-6.8-2.3-13.9-3.3-21-3.9-13.1-1.1-26.2-.5-39.2 1.9-14.3 2.7-27.9 7.3-40 15.6-1.4 1-2.8 2.1-3.7 3.5-.7 1.1-.9 2.8-.5 4 .4 1.5 2.1 1.9 3.6 1.8.7 0 1.5 0 2.2-.1 7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9 4.8.3 9.7 1.4 14.4 2.7 5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1-.4 1-.8 2-1 3-.5 2.9 1.2 4.8 4.1 4.1 1.7-.4 3.6-1.3 4.8-2.5 4.4-4.3 8.9-8.6 12.7-13.4 12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM479.1 198.9c-12.9-35.7-25.8-71.5-38.7-107.2-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5.5 2.1 1.1 4.1 1.9 6.1 19.6 48.5 39.3 97.1 59.1 145.5 1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3-5.1 1.4-10.2 1.6-15.4 1.1-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8-.1 3.3-.1 6.6 0 9.9.1 5.5 2 8 7.4 8.9 5.6 1 11.3 1.9 16.9 2 17.1.4 30.7-6.5 39.5-21.4 3.5-5.9 6.7-12.1 9.2-18.4 23.7-59.8 47.1-119.7 70.6-179.6.7-1.8 1.3-3.6 1.6-5.5.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0-3.7 0-6.3 1.6-7.7 5.2-.5 1.4-1.1 2.7-1.6 4.1-11.6 33.3-23.2 66.6-34.8 100-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"],amilia:[448,512,[],\"f36d\",\"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm-87.9 327.7c0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5V380c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7\"],android:[448,512,[],\"f17b\",\"M89.6 204.5v115.8c0 15.4-12.1 27.7-27.5 27.7-15.3 0-30.1-12.4-30.1-27.7V204.5c0-15.1 14.8-27.5 30.1-27.5 15.1 0 27.5 12.4 27.5 27.5zm10.8 157c0 16.4 13.2 29.6 29.6 29.6h19.9l.3 61.1c0 36.9 55.2 36.6 55.2 0v-61.1h37.2v61.1c0 36.7 55.5 36.8 55.5 0v-61.1h20.2c16.2 0 29.4-13.2 29.4-29.6V182.1H100.4v179.4zm248-189.1H99.3c0-42.8 25.6-80 63.6-99.4l-19.1-35.3c-2.8-4.9 4.3-8 6.7-3.8l19.4 35.6c34.9-15.5 75-14.7 108.3 0L297.5 34c2.5-4.3 9.5-1.1 6.7 3.8L285.1 73c37.7 19.4 63.3 56.6 63.3 99.4zm-170.7-55.5c0-5.7-4.6-10.5-10.5-10.5-5.7 0-10.2 4.8-10.2 10.5s4.6 10.5 10.2 10.5c5.9 0 10.5-4.8 10.5-10.5zm113.4 0c0-5.7-4.6-10.5-10.2-10.5-5.9 0-10.5 4.8-10.5 10.5s4.6 10.5 10.5 10.5c5.6 0 10.2-4.8 10.2-10.5zm94.8 60.1c-15.1 0-27.5 12.1-27.5 27.5v115.8c0 15.4 12.4 27.7 27.5 27.7 15.4 0 30.1-12.4 30.1-27.7V204.5c0-15.4-14.8-27.5-30.1-27.5z\"],angellist:[448,512,[],\"f209\",\"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"],angrycreative:[640,512,[],\"f36e\",\"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"],angular:[415,512,[],\"f420\",\"M169.7 268.1h76.2l-38.1-91.6-38.1 91.6zM207.8 32L0 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7L207.8 32zM338 373.8h-48.6l-26.2-65.4H152.6l-26.2 65.4H77.7L207.8 81.5 338 373.8z\"],\"app-store\":[512,512,[],\"f36f\",\"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"],\"app-store-ios\":[448,512,[],\"f370\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"],apper:[640,512,[],\"f371\",\"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"],apple:[376,512,[],\"f179\",\"M314.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C59.3 141.2 0 184.8 0 273.5c0 26.2 4.8 53.3 14.4 81.2 12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"],\"apple-pay\":[640,512,[],\"f415\",\"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"],asymmetrik:[576,512,[],\"f372\",\"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"],audible:[640,512,[],\"f373\",\"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"],autoprefixer:[640,512,[],\"f41c\",\"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"],avianex:[512,512,[],\"f374\",\"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"],aviato:[640,512,[],\"f421\",\"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"],aws:[640,512,[],\"f375\",\"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"],bandcamp:[496,512,[],\"f2d5\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm48.2 326.1h-181L199.9 178h181l-84.7 156.1z\"],behance:[576,512,[],\"f1b4\",\"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"],\"behance-square\":[448,512,[],\"f1b5\",\"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z\"],bimobject:[448,512,[],\"f378\",\"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"],bitbucket:[512,512,[],\"f171\",\"M23.1 32C14.2 31.9 7 38.9 6.9 47.8c0 .9.1 1.8.2 2.8L74.9 462c1.7 10.4 10.7 18 21.2 18.1h325.1c7.9.1 14.7-5.6 16-13.4l67.8-416c1.4-8.7-4.5-16.9-13.2-18.3-.9-.1-1.8-.2-2.8-.2L23.1 32zm285.3 297.3H204.6l-28.1-146.8h157l-25.1 146.8z\"],bitcoin:[512,512,[],\"f379\",\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"],bity:[496,512,[],\"f37a\",\"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"],\"black-tie\":[448,512,[],\"f27e\",\"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"],blackberry:[512,512,[],\"f37b\",\"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"],blogger:[448,512,[],\"f37c\",\"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"],\"blogger-b\":[448,512,[],\"f37d\",\"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"],bluetooth:[448,512,[],\"f293\",\"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"],\"bluetooth-b\":[320,512,[],\"f294\",\"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"],btc:[384,512,[],\"f15a\",\"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"],buromobelexperte:[448,512,[],\"f37f\",\"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"],buysellads:[448,512,[],\"f20d\",\"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"],\"cc-amazon-pay\":[576,512,[],\"f42d\",\"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"],\"cc-amex\":[576,512,[],\"f1f3\",\"M576 255.4c-37.9-.2-44.2-.9-54.5 5v-5c-45.3 0-53.5-1.7-64.9 5.2v-5.2h-78.2v5.1c-11.4-6.5-21.4-5.1-75.7-5.1v5.6c-6.3-3.7-14.5-5.6-24.3-5.6h-58c-3.5 3.8-12.5 13.7-15.7 17.2-12.7-14.1-10.5-11.6-15.5-17.2h-83.1v92.3h82c3.3-3.5 12.9-13.9 16.1-17.4 12.7 14.3 10.3 11.7 15.4 17.4h48.9c0-14.7.1-8.3.1-23 11.5.2 24.3-.2 34.3-6.2 0 13.9-.1 17.1-.1 29.2h39.6c0-18.5.1-7.4.1-25.3 6.2 0 7.7 0 9.4.1.1 1.3 0 0 0 25.2 152.8 0 145.9 1.1 156.7-4.5v4.5c34.8 0 54.8 2.2 67.5-6.1V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V228.3h26.6c4.2-10.1 2.2-5.3 6.4-15.3h19.2c4.2 10 2.2 5.2 6.4 15.3h52.9v-11.4c2.2 5 1.1 2.5 5.1 11.4h29.5c2.4-5.5 2.6-5.8 5.1-11.4v11.4h135.5v-25.1c6.4 0 8-.1 9.8.2 0 0-.2 10.9.1 24.8h66.5v-8.9c7.4 5.9 17.4 8.9 29.7 8.9h26.8c4.2-10.1 2.2-5.3 6.4-15.3h19c6.5 15 .2.5 6.6 15.3h52.8v-21.9c11.8 19.7 7.8 12.9 13.2 21.9h41.6v-92h-39.9v18.4c-12.2-20.2-6.3-10.4-11.2-18.4h-43.3v20.6c-6.2-14.6-4.6-10.8-8.8-20.6h-32.4c-.4 0-2.3.2-2.3-.3h-27.6c-12.8 0-23.1 3.2-30.7 9.3v-9.3h-39.9v5.3c-10.8-6.1-20.7-5.1-64.4-5.3-.1 0-11.6-.1-11.6 0h-103c-2.5 6.1-6.8 16.4-12.6 30-2.8-6-11-23.8-13.9-30h-46V157c-7.4-17.4-4.7-11-9-21.1H22.9c-3.4 7.9-13.7 32-23.1 53.9V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48v175.4zm-186.6-80.6c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm-19.9 130.9c9.2 3.3 11 9.5 11 18.4l-.1 13.8h-16.6l.1-11.5c0-11.8-3.8-13.8-14.8-13.8h-17.6l-.1 25.3h-16.6l.1-69.3h39.4c13 0 27.1 2.3 27.1 18.7-.1 7.6-4.2 15.3-11.9 18.4zm-6.3-15.4c0-6.4-5.6-7.4-10.7-7.4h-21v15.6h20.7c5.6 0 11-1.3 11-8.2zm181.7-7.1H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-99.2-.3v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5h38.5zm42.2 40.1h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-78.1-158.7c-17.4-.3-33.2-4.1-33.2 19.7 0 11.8 2.8 19.9 16.1 19.9h7.4l23.5-54.5h24.8l27.9 65.4v-65.4h25.3l29.1 48.1v-48.1h16.9v69H524l-31.2-51.9v51.9h-33.7l-6.6-15.3h-34.3l-6.4 15.3h-19.2c-22.8 0-33-11.8-33-34 0-23.3 10.5-35.3 34-35.3h16.1v15.2zm14.3 24.5h22.8l-11.2-27.6-11.6 27.6zm-72.6-39.6h-16.9v69.3h16.9v-69.3zm-38.1 37.3c9.5 3.3 11 9.2 11 18.4v13.5h-16.6c-.3-14.8 3.6-25.1-14.8-25.1h-18v25.1h-16.4v-69.3l39.1.3c13.3 0 27.4 2 27.4 18.4.1 8-4.3 15.7-11.7 18.7zm-6.7-15.3c0-6.4-5.6-7.4-10.7-7.4h-21v15.3h20.7c5.7 0 11-1.3 11-7.9zm-59.5-7.4v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5h38.9zm-84.6 54.7v-54.2l-24 54.2H124l-24-54.2v54.2H66.2l-6.4-15.3H25.3l-6.4 15.3H1l29.7-69.3h24.5l28.1 65.7v-65.7h27.1l21.7 47 19.7-47h27.6v69.3h-16.8zM53.9 188.8l-11.5-27.6-11.2 27.6h22.7zm253 102.5c0 27.9-30.4 23.3-49.3 23.3l-.1 23.3h-32.2l-20.4-23-21.3 23h-65.4l.1-69.3h66.5l20.5 22.8 21-22.8H279c15.6 0 27.9 5.4 27.9 22.7zm-112.7 11.8l-17.9-20.2h-41.7v12.5h36.3v14.1h-36.3v13.8h40.6l19-20.2zM241 276l-25.3 27.4 25.3 28.1V276zm48.3 15.3c0-6.1-4.6-8.4-10.2-8.4h-21.5v17.6h21.2c5.9 0 10.5-2.8 10.5-9.2z\"],\"cc-apple-pay\":[576,512,[],\"f416\",\"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"],\"cc-diners-club\":[576,512,[],\"f24c\",\"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"],\"cc-discover\":[576,512,[],\"f1f2\",\"M83 212.1c0 7.9-3.2 15.5-8.9 20.7-4.9 4.4-11.6 6.4-21.9 6.4H48V185h4.2c10.3 0 16.7 1.7 21.9 6.6 5.7 5 8.9 12.6 8.9 20.5zM504.8 184h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8 0-7.9-5.5-12.1-15.6-12.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM428 253h45.3v-13.8H444V217h28.3v-13.8H444V185h29.3v-14H428v82zm-86.2-82l35 84.2h8.6l35.5-84.2h-17.5l-22.2 55.2-21.9-55.2h-17.5zm-83 41.6c0 24.6 19.9 44.6 44.6 44.6 24.6 0 44.6-19.9 44.6-44.6 0-24.6-19.9-44.6-44.6-44.6-24.6 0-44.6 19.9-44.6 44.6zm-68-.5c0 32.5 33.6 52.5 63.3 38.2v-19c-19.3 19.3-46.8 5.8-46.8-19.2 0-23.7 26.7-39.1 46.8-19v-19c-30.2-15-63.3 6.8-63.3 38zm-33.9 28.3c-7.6 0-13.8-3.7-17.5-10.8l-10.3 9.9c17.8 26.1 56.6 18.2 56.6-11.3 0-13.1-5.4-19-23.6-25.6-9.6-3.4-12.3-5.9-12.3-10.3 0-8.7 14.5-14.1 24.9-2.5l8.4-10.8c-19.1-17.1-49.7-8.9-49.7 14.3 0 11.3 5.2 17.2 20.2 22.7 25.7 9.1 14.7 24.4 3.3 24.4zm-57.4-28.3c0-24.1-18-41.1-44.1-41.1H32v82h23.4c30.9 0 44.1-22.4 44.1-40.9zm23.4-41.1h-16v82h16v-82zM544 288c-33.3 20.8-226.4 124.4-416 160h401c8.2 0 15-6.8 15-15V288zm0-35l-25.9-34.5c12.1-2.5 18.7-10.6 18.7-23.2 0-28.5-30.3-24.4-52.9-24.4v82h16v-32.8h2.2l22.2 32.8H544z\"],\"cc-jcb\":[576,512,[],\"f24b\",\"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"],\"cc-mastercard\":[576,512,[],\"f1f1\",\"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"],\"cc-paypal\":[576,512,[],\"f1f4\",\"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"],\"cc-stripe\":[576,512,[],\"f1f5\",\"M396.9 256.5c0 19.1-8.8 33.4-21.9 33.4-8.3 0-13.3-3-16.8-6.7l-.2-52.8c3.7-4.1 8.8-7 17-7 12.9-.1 21.9 14.5 21.9 33.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM122.2 281.1c0-42.3-54.3-34.7-54.3-50.7 0-5.5 4.6-7.7 12.1-7.7 10.8 0 24.5 3.3 35.3 9.1v-33.4c-11.8-4.7-23.5-6.5-35.3-6.5-28.8 0-48 15-48 40.2 0 39.3 54 32.9 54 49.9 0 6.6-5.7 8.7-13.6 8.7-11.8 0-26.9-4.9-38.9-11.3v33.9c13.2 5.7 26.6 8.1 38.8 8.1 29.6-.2 49.9-14.7 49.9-40.3zm68.9-86.9h-27v-30.8l-34.7 7.4-.2 113.9c0 21 15.8 36.5 36.9 36.5 11.6 0 20.2-2.1 24.9-4.7v-28.9c-4.5 1.8-27 8.3-27-12.6v-50.5h27v-30.3zm73.8 0c-4.7-1.7-21.3-4.8-29.6 10.5l-2.2-10.5h-30.7v124.5h35.5v-84.4c8.4-11 22.6-8.9 27.1-7.4v-32.7zm44.2 0h-35.7v124.5h35.7V194.2zm0-47.3l-35.7 7.6v28.9l35.7-7.6v-28.9zm122.7 108.8c0-41.3-23.5-63.8-48.4-63.8-13.9 0-22.9 6.6-27.8 11.1l-1.8-8.8h-31.3V360l35.5-7.5.1-40.2c5.1 3.7 12.7 9 25.1 9 25.4-.1 48.6-20.5 48.6-65.6zm112.2 1.2c0-36.4-17.6-65.1-51.3-65.1-33.8 0-54.3 28.7-54.3 64.9 0 42.8 24.2 64.5 58.8 64.5 17 0 29.7-3.9 39.4-9.2v-28.6c-9.7 4.9-20.8 7.9-34.9 7.9-13.8 0-26-4.9-27.6-21.5h69.5c.1-2 .4-9.4.4-12.9zm-51.6-36.1c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7z\"],\"cc-visa\":[576,512,[],\"f1f0\",\"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"],centercode:[512,512,[],\"f380\",\"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"],chrome:[496,512,[],\"f268\",\"M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z\"],cloudscale:[448,512,[],\"f383\",\"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"],cloudsmith:[332,512,[],\"f384\",\"M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z\"],cloudversify:[616,512,[],\"f385\",\"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"],codepen:[512,512,[],\"f1cb\",\"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"],codiepie:[472,512,[],\"f284\",\"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"],connectdevelop:[576,512,[],\"f20e\",\"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"],contao:[512,512,[],\"f26d\",\"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"],cpanel:[640,512,[],\"f388\",\"M52.9 213.7h40l-6.2 23.6c-1.9 6.5-7.4 10.9-14.3 10.9H53.8c-24.9 0-24.7 37.4 0 37.4h11.3c4.2 0 7.6 3.9 6.4 8.3L64.4 320H52c-33.5 0-59-31.4-50.3-65.2 7.3-27 28.3-41.1 51.2-41.1M73.1 320L108 189.9c1.8-6.4 7.2-10.9 14.3-10.9h37c24.1 0 45.4 16.4 51 41.2 6.6 29.1-14.5 65.3-51.7 65.3h-32l6.4-23.8c1.8-6.2 7.3-10.8 14.3-10.8h10.3c12.4 0 20.8-11.7 18.3-22.6-2.1-9.2-9.9-14.8-18.3-14.8h-19.8L112 309.2c-1.9 6.2-7.4 10.7-14.2 10.7l-24.7.1m220.6-69.4c.3-1 1.9-5.3-2.1-5.3h-57.5c-9.7 0-16.6-8.9-14.2-18.5l3.5-13.4h77.9c18.8 0 33.3 17.6 28.5 36.8l-14 51.8c-2.8 10.6-12.2 17.8-23.4 17.8l-57.5-.2c-42.9 0-38.5-63.8.7-63.8H284l-3.5 13.2c-1.9 6.2-7.4 10.8-14.2 10.8h-21.6c-5.3 0-5.3 7.9 0 7.9h34.9c4.6 0 5.1-3.9 5.5-5.3l8.6-31.8m103.1-36.9c34.4 0 59.3 32.3 50.3 65.4l-8.8 33.1c-1.2 4.9-5.7 7.8-10.3 7.8h-19.1c-4.5 0-7.6-4-6.4-8.3l10.6-40c3.3-11.6-5.6-23.4-18.1-23.4h-19.8l-17.2 64c-1.2 4.8-5.6 7.8-10.4 7.8h-18.9c-4.2 0-7.6-3.9-6.4-8.3l26.2-98h48.3M498 251.6l-8 30c-.9 3.3 1.5 6.7 5.1 6.7h73.3l-5.7 21c-1.9 6.2-7.4 10.7-14.2 10.7h-66.7c-20 0-33.3-19-28.3-36.7l10.8-40c4.8-17.6 20.7-29.6 38.6-29.6h47.3c19 0 33.2 17.7 28.3 36.8l-3.2 12c-2.9 11-12.7 17.6-23.2 17.6h-53.4l3.5-13c1.6-6.2 7.2-10.8 14.2-10.8H538c2 0 3.3-1 3.9-3l.7-2.6c.7-2.7-1.3-5.1-3.9-5.1h-32.9c-4.1 0-6.9 2.1-7.8 6zm70.2 68.4l35.6-133.1c1.2-4.7 5.5-7.9 10.4-7.9h18.9c4.5 0 7.7 4 6.5 8.3l-26.5 98.2c-5.1 20.7-24.2 34.5-44.9 34.5\"],\"creative-commons\":[496,512,[],\"f25e\",\"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"],\"creative-commons-by\":[496,512,[],\"f4e7\",\"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"],\"creative-commons-nc\":[496,512,[],\"f4e8\",\"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"],\"creative-commons-nc-eu\":[496,512,[],\"f4e9\",\"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"],\"creative-commons-nc-jp\":[496,512,[],\"f4ea\",\"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"],\"creative-commons-nd\":[496,512,[],\"f4eb\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"],\"creative-commons-pd\":[496,512,[],\"f4ec\",\"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"],\"creative-commons-pd-alt\":[496,512,[],\"f4ed\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM135.5 323.3V186h68.2c33.7 0 50.5 15.5 50.5 46.5 0 9-3 46.5-57.1 46.5h-27v44.3h-34.6zm34.1-111.6v41.6h29.2c27.9 0 30-41.6-.9-41.6h-28.3zm93.9 111.6V186h53.2c21.4 0 70 5.2 70 68.6 0 63.5-48.6 68.6-70 68.6h-53.2zm34.1-108.5v79.7h19.9c24 0 34.5-15.3 34.5-39.9 0-42-31.2-39.9-35-39.9l-19.4.1z\"],\"creative-commons-remix\":[496,512,[],\"f4ee\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"],\"creative-commons-sa\":[496,512,[],\"f4ef\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"],\"creative-commons-sampling\":[496,512,[],\"f4f0\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"],\"creative-commons-sampling-plus\":[496,512,[],\"f4f1\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"],\"creative-commons-share\":[496,512,[],\"f4f2\",\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"],css3:[512,512,[],\"f13c\",\"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"],\"css3-alt\":[384,512,[],\"f38b\",\"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"],cuttlefish:[440,512,[],\"f38c\",\"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"],\"d-and-d\":[576,512,[],\"f38d\",\"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"],dashcube:[448,512,[],\"f210\",\"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"],delicious:[448,512,[],\"f1a5\",\"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192v176z\"],deploydog:[512,512,[],\"f38e\",\"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"],deskpro:[480,512,[],\"f38f\",\"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"],deviantart:[320,512,[],\"f1bd\",\"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"],digg:[512,512,[],\"f1a6\",\"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"],\"digital-ocean\":[512,512,[],\"f391\",\"M256 504v-96.1c101.8 0 180.8-100.9 141.7-208-14.3-39.6-46.1-71.4-85.8-85.7-107.1-38.8-208.1 39.9-208.1 141.7H8C8 93.7 164.9-32.8 335 20.3c74.2 23.3 133.6 82.4 156.6 156.6C544.8 347.2 418.6 504 256 504zm.3-191.4h-95.6v95.6h95.6v-95.6zm-95.6 95.6H87v73.6h73.7v-73.6zM87 346.6H25.4v61.6H87v-61.6z\"],discord:[448,512,[],\"f392\",\"M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z\"],discourse:[448,512,[],\"f393\",\"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"],dochub:[416,512,[],\"f394\",\"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"],docker:[640,512,[],\"f395\",\"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"],draft2digital:[480,512,[],\"f396\",\"M369.9 425.4V371l47.1 27.2-47.1 27.2zM82.4 380.6c25.5-27.3 97.7-104.7 150.9-170 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7H82.4zm51.8-219.2c0 12.4-10 22.4-22.4 22.4-12.4 0-22.4-10-22.4-22.4 0-12.4 10-22.4 22.4-22.4 12.4 0 22.4 10.1 22.4 22.4M336 315.9v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480l144-81.9-144-82.2z\"],dribbble:[512,512,[],\"f17d\",\"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"],\"dribbble-square\":[448,512,[],\"f397\",\"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\"],dropbox:[528,512,[],\"f16b\",\"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"],drupal:[448,512,[],\"f1a9\",\"M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z\"],dyalog:[416,512,[],\"f399\",\"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"],earlybirds:[480,512,[],\"f39a\",\"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"],ebay:[640,512,[],\"f4f4\",\"M405.2 263.8c-29.1.9-47.2 6.2-47.2 25.3 0 12.4 9.9 25.8 35 25.8 33.7 0 51.6-18.4 51.6-48.4v-3.3c-11.8 0-26.3.1-39.4.6m71.5 39.7c0 9.3.3 18.6 1 26.8h-29.8c-.8-6.9-1.1-13.6-1.1-20.2-16.1 19.8-35.3 25.5-61.9 25.5-39.5 0-60.6-20.9-60.6-45 0-35 28.8-47.3 78.6-48.4 13.7-.3 29-.4 41.7-.4v-3.4c0-23.4-15-33-41-33-19.3 0-33.6 8-35 21.8h-33.7c3.6-34.4 39.7-43.1 71.5-43.1 38.1 0 70.3 13.5 70.3 53.8v65.6zm-349-56.8c-2.3-54.7-87.5-56.6-94.4 0h94.4zm-95 21.4c3.5 58.3 79.2 57.4 91.2 21.6H157c-6.4 34.4-43 46.1-74.4 46.1-57.2 0-82.5-31.5-82.5-74 0-46.8 26.2-77.6 83-77.6 45.3 0 78.4 23.7 78.4 75.4v8.5H32.7zm211 45.7c29.8 0 50.2-21.5 50.2-53.8 0-32.4-20.4-53.8-50.2-53.8-29.6 0-50.2 21.4-50.2 53.8 0 32.3 20.6 53.8 50.2 53.8m-82.2-186h32.1v80.6c15.7-18.7 37.4-24.2 58.7-24.2 35.7 0 75.4 24.1 75.4 76.2 0 43.6-31.5 75.4-76 75.4-23.3 0-45.1-8.3-58.7-24.9 0 6.6-.4 13.2-1.1 19.5h-31.5c.5-10.2 1.1-22.8 1.1-33.1V127.8zM640 189.5l-99.2 194.8h-35.9l28.5-54.1-74.6-140.7h37.5l54.9 109.9L606 189.5h34z\"],edge:[512,512,[],\"f282\",\"M25.714 228.163c.111-.162.23-.323.342-.485-.021.162-.045.323-.065.485h-.277zm460.572 15.508c0-44.032-7.754-84.465-28.801-122.405C416.498 47.879 343.912 8.001 258.893 8.001 118.962 7.724 40.617 113.214 26.056 227.679c42.429-61.312 117.073-121.376 220.375-124.966 0 0 109.666 0 99.419 104.957H169.997c6.369-37.386 18.554-58.986 34.339-78.926-75.048 34.893-121.85 96.096-120.742 188.315.83 71.448 50.124 144.836 120.743 171.976 83.357 31.847 192.776 7.2 240.132-21.324V363.307c-80.864 56.494-270.871 60.925-272.255-67.572h314.073v-52.064z\"],elementor:[448,512,[],\"f430\",\"M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z\"],ember:[640,512,[],\"f423\",\"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1c-1.9-43.8-44.2-27.6-49-24-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-18.3-11-32.8 12.1-32.8 12.1s54.5-60.7 42.5-112c-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5c-17.2-.8-28.5 18.8-28.5 18.8s-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7c11.6 2.1 16.4 1 36.5-47.9 11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2c6.7-23.6 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7c8.6 15.6 30.9 5.3 30.9 5.3s15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6c12.4 5.1 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"],empire:[496,512,[],\"f1d1\",\"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"],envira:[448,512,[],\"f299\",\"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"],erlang:[640,512,[],\"f39d\",\"M21.7 246.4c-.1 86.8 29 159.5 78.7 212.1H0v-405h87.2c-41.5 50.2-65.6 116.2-65.5 192.9zM640 53.6h-83.6c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405zm-80.8 405s0-.1 0 0h-.2.2zm-3.1-405h.3l-.1-.1-.2.1zm-230.7 9.6c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2z\"],ethereum:[320,512,[],\"f42e\",\"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"],etsy:[384,512,[],\"f2d7\",\"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"],expeditedssl:[496,512,[],\"f23e\",\"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"],facebook:[448,512,[],\"f09a\",\"M448 56.7v398.5c0 13.7-11.1 24.7-24.7 24.7H309.1V306.5h58.2l8.7-67.6h-67v-43.2c0-19.6 5.4-32.9 33.5-32.9h35.8v-60.5c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9h-58.4v67.6h58.4V480H24.7C11.1 480 0 468.9 0 455.3V56.7C0 43.1 11.1 32 24.7 32h398.5c13.7 0 24.8 11.1 24.8 24.7z\"],\"facebook-f\":[264,512,[],\"f39e\",\"M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229\"],\"facebook-messenger\":[448,512,[],\"f39f\",\"M224 32C15.9 32-77.5 278 84.6 400.6V480l75.7-42c142.2 39.8 285.4-59.9 285.4-198.7C445.8 124.8 346.5 32 224 32zm23.4 278.1L190 250.5 79.6 311.6l121.1-128.5 57.4 59.6 110.4-61.1-121.1 128.5z\"],\"facebook-square\":[448,512,[],\"f082\",\"M448 80v352c0 26.5-21.5 48-48 48h-85.3V302.8h60.6l8.7-67.6h-69.3V192c0-19.6 5.4-32.9 33.5-32.9H384V98.7c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9H184v67.6h60.9V480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"],firefox:[480,512,[],\"f269\",\"M478.1 235.3c-.7-4.5-1.4-7.1-1.4-7.1s-1.8 2-4.7 5.9c-.9-10.7-2.8-21.2-5.8-31.6-3.7-12.9-8.5-25.4-14.5-37.4-3.8-8-8.2-15.6-13.3-22.8-1.8-2.7-3.7-5.4-5.6-7.9-8.8-14.4-19-23.3-30.7-40-7.6-12.8-12.9-26.9-15.4-41.6-3.2 8.9-5.7 18-7.4 27.3-12.1-12.2-22.5-20.8-28.9-26.7C319.4 24.2 323 9.1 323 9.1S264.7 74.2 289.9 142c8.7 23 23.8 43.1 43.4 57.9 24.4 20.2 50.8 36 64.7 76.6-11.2-21.3-28.1-39.2-48.8-51.5 6.2 14.7 9.4 30.6 9.3 46.5 0 61-49.6 110.5-110.6 110.4-8.3 0-16.5-.9-24.5-2.8-9.5-1.8-18.7-4.9-27.4-9.3-12.9-7.8-24-18.1-32.8-30.3l-.2-.3 2 .7c4.6 1.6 9.2 2.8 14 3.7 18.7 4 38.3 1.7 55.6-6.6 17.5-9.7 28-16.9 36.6-14h.2c8.4 2.7 15-5.5 9-14-10.4-13.4-27.4-20-44.2-17-17.5 2.5-33.5 15-56.4 2.9-1.5-.8-2.9-1.6-4.3-2.5-1.6-.9 4.9 1.3 3.4.3-5-2.5-9.8-5.4-14.4-8.6-.3-.3 3.5 1.1 3.1.8-5.9-4-11-9.2-15-15.2-4.1-7.4-4.5-16.4-1-24.1 2.1-3.8 5.4-6.9 9.3-8.7 3 1.5 4.8 2.6 4.8 2.6s-1.3-2.5-2.1-3.8c.3-.1.5 0 .8-.2 2.6 1.1 8.3 4 11.4 5.8 2.1 1.1 3.8 2.7 5.2 4.7 0 0 1-.5.3-2.7-1.1-2.7-2.9-5-5.4-6.6h.2c2.3 1.2 4.5 2.6 6.6 4.1 1.9-4.4 2.8-9.2 2.6-14 .2-2.6-.2-5.3-1.1-7.8-.8-1.6.5-2.2 1.9-.5-.2-1.3-.7-2.5-1.2-3.7v-.1s.8-1.1 1.2-1.5c1-1 2.1-1.9 3.4-2.7 7.2-4.5 14.8-8.4 22.7-11.6 6.4-2.8 11.7-4.9 12.8-5.6 1.6-1 3.1-2.2 4.5-3.5 5.3-4.5 9-10.8 10.2-17.7.1-.9.2-1.8.3-2.8v-1.5c-.9-3.5-6.9-6.1-38.4-9.1-11.1-1.8-20-10.1-22.5-21.1v.1c-.4 1.1-.9 2.3-1.3 3.5.4-1.2.8-2.3 1.3-3.5v-.2c6-15.7 16.8-29.1 30.8-38.3.8-.7-3.2.2-2.4-.5 2.7-1.3 5.4-2.5 8.2-3.5 1.4-.6-6-3.4-12.6-2.7-4 .2-8 1.2-11.7 2.8 1.6-1.3 6.2-3.1 5.1-3.1-8.4 1.6-16.5 4.7-23.9 9 0-.8.1-1.5.5-2.2-5.9 2.5-11 6.5-15 11.5.1-.9.2-1.8.2-2.7-2.7 2-5.2 4.3-7.3 6.9l-.1.1c-17.4-6.7-36.3-8.3-54.6-4.7l-.2-.1h.2c-3.8-3.1-7.1-6.7-9.7-10.9l-.2.1-.4-.2c-1.2-1.8-2.4-3.8-3.7-6-.9-1.6-1.8-3.4-2.7-5.2 0-.1-.1-.2-.2-.2-.4 0-.6 1.7-.9 1.3v-.1c-3.2-8.3-4.7-17.2-4.4-26.2l-.2.1c-5.1 3.5-9 8.6-11.1 14.5-.9 2.1-1.6 3.3-2.2 4.5v-.5c.1-1.1.6-3.3.5-3.1-.1.2-.2.3-.3.4-1.5 1.7-2.9 3.7-3.9 5.8-.9 1.9-1.7 3.9-2.3 5.9-.1.3 0-.3 0-1s.1-2 0-1.7l-.3.7c-6.7 14.9-10.9 30.8-12.4 47.1-.4 2.8-.6 5.6-.5 8.3v.2c-4.8 5.2-9 11-12.7 17.1-12.1 20.4-21.1 42.5-26.8 65.6 4-8.8 8.8-17.2 14.3-25.1C5.5 228.5 0 257.4 0 286.6c1.8-8.6 4.2-17 7-25.3-1.7 34.5 4.9 68.9 19.4 100.3 19.4 43.5 51.6 80 92.3 104.7 16.6 11.2 34.7 19.9 53.8 25.8 2.5.9 5.1 1.8 7.7 2.7-.8-.3-1.6-.7-2.4-1 22.6 6.8 46.2 10.3 69.8 10.3 83.7 0 111.3-31.9 113.8-35 4.1-3.7 7.5-8.2 9.9-13.3 1.6-.7 3.2-1.4 4.9-2.1l1-.5 1.9-.9c12.6-5.9 24.5-13.4 35.3-22.1 16.3-11.7 27.9-28.7 32.9-48.1 3-7.1 3.1-15 .4-22.2.9-1.4 1.7-2.8 2.7-4.3 18-28.9 28.2-61.9 29.6-95.9v-2.8c0-7.3-.6-14.5-1.9-21.6z\"],\"first-order\":[448,512,[],\"f2b0\",\"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"],\"first-order-alt\":[496,512,[],\"f50a\",\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"],firstdraft:[384,512,[],\"f3a1\",\"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"],flickr:[448,512,[],\"f16e\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"],flipboard:[448,512,[],\"f44d\",\"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"],fly:[384,512,[],\"f417\",\"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"],\"font-awesome\":[448,512,[],\"f2b4\",\"M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z\"],\"font-awesome-alt\":[448,512,[],\"f35c\",\"M397.8 67.8c7.8 0 14.3 6.6 14.3 14.3v347.6c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6m0-35.9H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-58.5 139.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1z\"],\"font-awesome-flag\":[448,512,[],\"f425\",\"M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z\"],\"font-awesome-logo-full\":[3992,512,[\"Font Awesome\"],\"f4e6\",\"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"],fonticons:[448,512,[],\"f280\",\"M0 32v448h448V32H0zm167.4 196h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4zM364 414.7H261.3v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm-21.9-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6-21.9 24.2z\"],\"fonticons-fi\":[384,512,[],\"f3a2\",\"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"],\"fort-awesome\":[512,512,[],\"f286\",\"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"],\"fort-awesome-alt\":[512,512,[],\"f3a3\",\"M211.7 241.1v51.7c0 2.1-1.6 3.7-3.7 3.7h-22.2c-2.1 0-3.7-1.6-3.7-3.7v-51.7c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7zm114.5-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm-29.1 263.2c-.9.1-1.7.3-2.6.4-1 .2-2.1.3-3.1.5-.9.1-1.8.3-2.8.4-1 .1-2 .3-3 .4-1 .1-2 .2-2.9.3-1 .1-1.9.2-2.9.3-1 .1-2.1.2-3.1.3-.9.1-1.8.2-2.7.2-1.1.1-2.3.1-3.4.2-.8 0-1.7.1-2.5.1-1.3.1-2.6.1-3.9.1-.7 0-1.4.1-2.1.1-2 0-4 .1-6 .1s-4 0-6-.1c-.7 0-1.4 0-2.1-.1-1.3 0-2.6-.1-3.9-.1-.8 0-1.7-.1-2.5-.1-1.1-.1-2.3-.1-3.4-.2-.9-.1-1.8-.1-2.7-.2-1-.1-2.1-.2-3.1-.3-1-.1-1.9-.2-2.9-.3-1-.1-2-.2-2.9-.3-1-.1-2-.2-3-.4-.9-.1-1.8-.3-2.8-.4-1-.1-2.1-.3-3.1-.5-.9-.1-1.7-.3-2.6-.4-65.6-10.9-122.5-47.7-160-99.4-.2-.2-.3-.5-.5-.7-.8-1.1-1.6-2.2-2.3-3.3-.3-.4-.6-.8-.8-1.2-.7-1.1-1.4-2.1-2.1-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.4-2.1-2-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.3-2.2-2-3.3-.2-.4-.5-.8-.7-1.2-2.4-4-4.6-8.1-6.8-12.2-.1-.2-.2-.3-.3-.5-.6-1.1-1.1-2.2-1.7-3.3-.3-.6-.6-1.1-.8-1.7-.5-1-1-2.1-1.5-3.1-.3-.7-.6-1.3-.9-2-.5-1-.9-2-1.4-3l-.9-2.1c-.4-1-.9-2-1.3-3-.3-.7-.6-1.5-.9-2.2l-1.2-3c-.3-.8-.6-1.5-.9-2.3-.4-1-.8-2-1.1-3-.3-.9-.6-1.8-1-2.8-.6-1.6-1.1-3.3-1.7-4.9-.3-.9-.6-1.8-.9-2.8-.3-.9-.5-1.8-.8-2.7-.3-.9-.6-1.9-.8-2.8-.3-.9-.5-1.8-.8-2.7-.3-1-.5-1.9-.8-2.9-.2-.9-.5-1.8-.7-2.7-.3-1-.5-2-.7-3-.2-.9-.4-1.7-.6-2.6-.2-1.1-.5-2.2-.7-3.2-.2-.8-.3-1.6-.5-2.4-.3-1.3-.5-2.7-.8-4-.1-.6-.2-1.1-.3-1.7l-.9-5.7c-.1-.6-.2-1.3-.3-1.9-.2-1.3-.4-2.6-.5-3.9-.1-.8-.2-1.5-.3-2.3-.1-1.2-.3-2.4-.4-3.6-.1-.8-.2-1.6-.2-2.4-.1-1.2-.2-2.4-.3-3.5-.1-.8-.1-1.6-.2-2.4-.1-1.2-.2-2.4-.2-3.7 0-.8-.1-1.5-.1-2.3-.1-1.3-.1-2.7-.2-4 0-.7 0-1.3-.1-2 0-2-.1-4-.1-6 0-53.5 16.9-103 45.8-143.6 2.3-3.2 4.7-6.4 7.1-9.5 4.9-6.2 10.1-12.3 15.6-18 2.7-2.9 5.5-5.7 8.4-8.4 2.9-2.7 5.8-5.4 8.8-8 4.5-3.9 9.1-7.6 13.9-11.2 1.6-1.2 3.2-2.4 4.8-3.5C140 34.2 171.7 20.1 206 13c16.1-3.3 32.9-5 50-5s33.8 1.7 50 5c34.3 7 66 21.1 93.6 40.7 1.6 1.2 3.2 2.3 4.8 3.5 4.8 3.6 9.4 7.3 13.9 11.2 12 10.4 23 21.9 32.8 34.4 2.5 3.1 4.8 6.3 7.1 9.5C487.1 153 504 202.5 504 256c0 2 0 4-.1 6 0 .7 0 1.3-.1 2 0 1.3-.1 2.7-.2 4 0 .8-.1 1.5-.1 2.3-.1 1.2-.1 2.4-.2.7-.1.8-.1 1.6-.2 2.4-.1 1.2-.2 2.4-.3 3.5-.1.8-.2 1.6-.2 2.4-.1 1.2-.3 2.4-.4 3.6-.1.8-.2 1.5-.3 2.3-.2 1.3-.4 2.6-.5 3.9-.1.6-.2 1.3-.3 1.9l-.9 5.7c-.1.6-.2 1.1-.3 1.7-.2 1.3-.5 2.7-.8 4-.2.8-.3 1.6-.5 2.4-.2 1.1-.5 2.2-.7 3.2-.2.9-.4 1.7-.6 2.6-.2 1-.5 2-.7 3-.2.9-.5 1.8-.7 2.7-.3 1-.5 1.9-.8 2.9-.2.9-.5 1.8-.8 2.7-.3.9-.6 1.9-.8 2.8-.3.9-.5 1.8-.8 2.7-.3.9-.6 1.8-.9 2.8-.5 1.6-1.1 3.3-1.7 4.9-.3.9-.6 1.8-1 2.8-.4 1-.7 2-1.1 3-.3.8-.6 1.5-.9 2.3l-1.2 3c-.3.7-.6 1.5-.9 2.2-.4 1-.8 2-1.3 3l-.9 2.1c-.4 1-.9 2-1.4 3-.3.7-.6 1.3-.9 2-.5 1-1 2.1-1.5 3.1-.3.6-.6 1.1-.8 1.7-.6 1.1-1.1 2.2-1.7 3.3-.1.2-.2.3-.3.5-2.2 4.1-4.4 8.2-6.8 12.2-.2.4-.5.8-.7 1.2-.7 1.1-1.3 2.2-2 3.3-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2 3.2-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2.1 3.2-.3.4-.6.8-.8 1.2-.8 1.1-1.5 2.2-2.3 3.3-.2.2-.3.5-.5.7-37.6 54.7-94.5 91.4-160.1 102.4zm117.3-86.2c13-13 24.2-27.4 33.6-42.9v-71.3c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7V326h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-4.8-6.5-3.7-9.5-3.7v-30.7c6.7-1.6 13.8-2.8 20.8-2.8 8.8 0 16.8 3.5 25.4 3.5 3.7 0 22.4-.9 22.4-6.5V93.4c0-2.1-1.6-3.7-3.7-3.7-4.2 0-12.2 3.5-19.4 3.5-7.9 0-16.9-3.5-26.3-3.5-6.5 0-12.9.9-19.2 2.3v-3.9c4.4-2.1 7.4-6.7 7.4-11.5 0-16.8-25.4-16.8-25.4 0 0 4.8 3 9.5 7.4 11.5v90.2c-3 0-9.5-1.1-9.5 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v144H93.5v-25.8c0-2.1-1.6-3.7-3.7-3.7H67.7c-2.1 0-3.7 1.6-3.7 3.7v71.3c9.4 15.5 20.6 29.9 33.6 42.9 20.6 20.6 44.5 36.7 71.2 48 13.9 5.9 28.2 10.3 42.9 13.2v-75.8c0-58.6 88.6-58.6 88.6 0v75.8c14.7-2.9 29-7.4 42.9-13.2 26.7-11.3 50.6-27.4 71.2-48\"],forumbee:[448,512,[],\"f211\",\"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"],foursquare:[368,512,[],\"f180\",\"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"],\"free-code-camp\":[576,512,[],\"f2c5\",\"M69.3 144.5c-41 68.5-36.4 163 1 227C92.5 409.7 120 423.9 120 438c0 6.8-6 13-12.8 13C87.7 451 8 375.5 8 253.2c0-111.5 78-186 97.1-186 6 0 14.9 4.8 14.9 11.1 0 12.7-28.3 28.6-50.7 66.2zm195.8 213.8c4.5 1.8 12.3 5.2 12.3-1.2 0-2.7-2.2-2.9-4.3-3.6-8.5-3.4-14-7.7-19.1-15.2-8.2-12.1-10.1-24.2-10.1-38.6 0-32.1 44.2-37.9 44.2-70 0-12.3-7.7-15.9-7.7-19.3 0-2.2.7-2.2 2.9-2.2 8 0 19.1 13.3 22.5 19.8 2.2 4.6 2.4 6 2.4 11.1 0 7-.7 14.2-.7 21.3 0 27 31.9 19.8 31.9 6.8 0-6-3.6-11.6-3.6-17.4 0-.7 0-1.2.7-1.2 3.4 0 9.4 7.7 11.1 10.1 5.8 8.9 8.5 20.8 8.5 31.4 0 32.4-29.5 49-29.5 56 0 1 2.9 7.7 12.1 1.9 29.7-15.1 53.1-47.6 53.1-89.8 0-33.6-8.7-57.7-32.1-82.6-3.9-4.1-16.4-16.9-22.5-16.9-8.2 0 7.2 18.6 7.2 31.2 0 7.2-4.8 12.3-12.3 12.3-11.6 0-14.5-25.4-15.9-33.3-5.8-33.8-12.8-58.2-46.4-74.1-10.4-5-36.5-11.8-36.5-2.2 0 2.4 2.7 4.1 4.6 5.1 9.2 5.6 19.6 21.4 19.6 38.2 0 46.1-57.7 88.2-57.7 136.2-.2 40.3 28.1 72.6 65.3 86.2zM470.4 67c-6 0-14.4 6.5-14.4 12.6 0 8.7 12.1 19.6 17.6 25.4 81.6 85.1 78.6 214.3 17.6 291-7 8.9-35.3 35.3-35.3 43.5 0 5.1 8.2 11.4 13.2 11.4 25.4 0 98.8-80.8 98.8-185.7C568 145.9 491.8 67 470.4 67zm-42.3 323.1H167c-9.4 0-15.5 7.5-15.5 16.4 0 8.5 7 15.5 15.5 15.5h261.1c9.4 0 11.9-7.5 11.9-16.4 0-8.5-3.5-15.5-11.9-15.5z\"],freebsd:[448,512,[],\"f3a4\",\"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"],fulcrum:[269,512,[],\"f50b\",\"M70.75 164.14l-35.38 43.55L0 164.14l35.38-43.55 35.37 43.55zM119.23 0L98.69 198.18 47.72 256l50.98 57.82L119.23 512V300.89L78.15 256l41.08-44.89V0zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55-35.38 43.55zm-48.48 46.97L191.5 256l-41.08 44.89V512l20.54-198.18L221.94 256l-50.98-57.82L150.42 0v211.11z\"],\"galactic-republic\":[496,512,[],\"f50c\",\"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"],\"galactic-senate\":[512,512,[],\"f50d\",\"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"],\"get-pocket\":[448,512,[],\"f265\",\"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"],gg:[512,512,[],\"f260\",\"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"],\"gg-circle\":[512,512,[],\"f261\",\"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"],git:[448,512,[],\"f1d3\",\"M18.8 221.7c0 25.3 16.2 60 41.5 68.5v1c-18.8 8.3-24 50.6 1 65.8v1C34 367 16 384.3 16 414.2c0 51.5 48.8 65.8 91.5 65.8 52 0 90.7-18.7 90.7-76 0-70.5-101-44.5-101-82.8 0-13.5 7.2-18.7 19.7-21.3 41.5-7.7 67.5-40 67.5-82.2 0-7.3-1.5-14.2-4-21 6.7-1.5 13.2-3.3 19.7-5.5v-50.5c-17.2 6.8-35.7 11.8-54.5 11.8-53.8-31-126.8 1.3-126.8 69.2zm87.7 163.8c17 0 41.2 3 41.2 25 0 21.8-19.5 26.3-37.7 26.3-17.3 0-43.3-2.7-43.3-25.2.1-22.3 22.1-26.1 39.8-26.1zM103.3 256c-22 0-31.3-13-31.3-33.8 0-49.3 61-48.8 61-.5 0 20.3-8 34.3-29.7 34.3zM432 305.5v49c-13.3 7.3-30.5 9.8-45.5 9.8-53.5 0-59.8-42.2-59.8-85.7v-87.7h.5v-1c-7 0-7.3-1.6-24 1v-47.5h24c0-22.3.3-31-1.5-41.2h56.7c-2 13.8-1.5 27.5-1.5 41.2h51v47.5s-19.3-1-51-1V281c0 14.8 3.3 32.8 21.8 32.8 9.8 0 21.3-2.8 29.3-8.3zM286 68.7c0 18.7-14.5 36.2-33.8 36.2-19.8 0-34.5-17.2-34.5-36.2 0-19.3 14.5-36.7 34.5-36.7C272 32 286 50 286 68.7zm-6.2 74.5c-1.8 14.6-1.6 199.8 0 217.8h-55.5c1.6-18.1 1.8-203 0-217.8h55.5z\"],\"git-square\":[448,512,[],\"f1d2\",\"M140.1 348.5c12.1 0 29.5 2.1 29.5 17.9 0 15.5-13.9 18.8-27 18.8-12.3 0-30.9-2-30.9-18s15.7-18.7 28.4-18.7zm-24.7-116.6c0 14.8 6.6 24.1 22.3 24.1 15.5 0 21.2-10 21.2-24.5.1-34.4-43.5-34.8-43.5.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-241 93.7c-12.3 4.8-25.5 8.4-38.9 8.4-38.5-22.1-90.7.9-90.7 49.5 0 18 11.6 42.9 29.6 48.9v.7c-13.4 5.9-17.1 36.1.7 47v.7c-19.5 6.4-32.3 18.8-32.3 40.2 0 36.8 34.8 47 65.4 47 37.1 0 64.8-13.4 64.8-54.3 0-50.4-72.1-31.8-72.1-59.1 0-9.6 5.2-13.4 14.1-15.2 29.6-5.5 48.2-28.6 48.2-58.7 0-5.2-1.1-10.2-2.9-15 4.8-1.1 9.5-2.3 14.1-3.9v-36.2zm56.8 1.8h-39.6c1.3 10.6 1.1 142.6 0 155.5h39.6c-1.1-12.8-1.2-145.1 0-155.5zm4.5-53.3c0-13.4-10-26.2-24.1-26.2-14.3 0-24.6 12.5-24.6 26.2 0 13.6 10.5 25.9 24.6 25.9 13.7 0 24.1-12.5 24.1-25.9zm104.3 53.3h-36.4c0-9.8-.4-19.6 1.1-29.5h-40.5c1.3 7.3 1.1 13.6 1.1 29.5h-17.1v33.9c11.9-1.9 12.1-.7 17.1-.7v.7h-.4v62.7c0 31.1 4.5 61.2 42.7 61.2 10.7 0 23-1.8 32.5-7v-35c-5.7 3.9-13.9 5.9-20.9 5.9-13.2 0-15.5-12.9-15.5-23.4v-65.2c22.7 0 36.4.7 36.4.7v-33.8z\"],github:[496,512,[],\"f09b\",\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"],\"github-alt\":[480,512,[],\"f113\",\"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"],\"github-square\":[448,512,[],\"f092\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z\"],gitkraken:[592,512,[],\"f3a6\",\"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"],gitlab:[512,512,[],\"f296\",\"M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z\"],gitter:[384,512,[],\"f426\",\"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"],glide:[448,512,[],\"f2a5\",\"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"],\"glide-g\":[448,512,[],\"f2a6\",\"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"],gofore:[400,512,[],\"f3a7\",\"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"],goodreads:[448,512,[],\"f3a8\",\"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"],\"goodreads-g\":[384,512,[],\"f3a9\",\"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"],google:[488,512,[],\"f1a0\",\"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"],\"google-drive\":[512,512,[],\"f3aa\",\"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"],\"google-play\":[512,512,[],\"f3ab\",\"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"],\"google-plus\":[496,512,[],\"f2b3\",\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm-70.7 372c-68.8 0-124-55.5-124-124s55.2-124 124-124c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1s34.2 78.1 77.2 78.1c32.6 0 64.9-19.1 70.1-53.3h-70.1v-42.6h116.9c1.3 6.8 1.9 13.6 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zm230.2-106.2v35.5H372v-35.5h-35.5v-35.5H372v-35.5h35.5v35.5h35.2v35.5h-35.2z\"],\"google-plus-g\":[640,512,[],\"f0d5\",\"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"],\"google-plus-square\":[448,512,[],\"f0d4\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\"],\"google-wallet\":[448,512,[],\"f1ee\",\"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"],gratipay:[496,512,[],\"f184\",\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"],grav:[512,512,[],\"f2d6\",\"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"],gripfire:[384,512,[],\"f3ac\",\"M171.8 503.8c0-5.3 4.8-12.2 4.8-22.3 0-15.2-13-39.9-78.1-86.6C64.2 365.8 32 336.4 32 286.6 32 171.9 179.1 110.1 179.1 18c0-3.3-.2-6.7-.6-10 5.1 2.4 39.1 43.3 39.1 90.4 0 80.5-105.1 129.2-105.1 203 0 26.9 16.6 47.2 32.6 69.5 22.5 30.2 44.2 56.9 44.2 86.5-.1 14.5-4.4 29.7-17.5 46.4zm146-241.4c1.5 8.4 2.2 16.6 2.2 24.6 0 51.8-29.4 97.5-67.3 136.8-1 1-2.2 2.4-3.2 2.4-3.6 0-35.5-41.6-35.5-53.2 0 0 41.8-55.7 41.8-96.9 0-10.8-2.7-21.7-9.1-33.4-1.5 32.3-55.7 87.7-58.1 87.7-2.7 0-17.9-22-17.9-42.1 0-5.3 1-10.7 3.2-15.8 2.4-5.5 56.6-72 56.6-116.7 0-6.2-1-12-3.4-17.1l-4-7.2c16.7 6.5 82.6 64.1 94.7 130.9\"],grunt:[384,512,[],\"f3ad\",\"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm79.2 233.7c2.2 2.3 1.5 5.3.9 6.8-1.1 2.7-5.5 11.6-13 19.8-2.7 2.9-6.6 4.6-11 4.6-4.3 0-8.7-1.6-11.8-4.3-2.3-2.1-10.2-9.5-13.7-18.6-1.3-3.4-1-6.1.9-8.1 1.3-1.3 4-2.9 9.5-2.9H160c4.1 0 7 .9 8.8 2.7zm62.9-187.9c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm17.8-8.8c7.5-11.4 25.4-26 44.9-37 3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6-.1.1 0 0 0 0zM263 421.4c1.9 1.9 2.2 4.6.9 7.9-3.5 8.9-11.4 16.1-13.7 18.1-3.1 2.6-7.4 4.2-11.8 4.2s-8.3-1.6-11-4.5c-7.5-8-12-16.7-13-19.3-.6-1.5-1.3-4.4.9-6.7 1.7-1.8 4.7-2.7 8.9-2.7h29.4c5.4.1 8.1 1.7 9.4 3zm-98.3-251.5c9.9 6 18.8 8.1 27.3 8.3 8.5-.2 17.4-2.3 27.3-8.3 0 0-14.5 17.7-27.2 17.8h-.2c-12.7-.2-27.2-17.8-27.2-17.8zm184.5 147.4c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59z\"],gulp:[256,512,[],\"f3ae\",\"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"],\"hacker-news\":[448,512,[],\"f1d4\",\"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],\"hacker-news-square\":[448,512,[],\"f3af\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],hips:[640,512,[],\"f452\",\"M0 80.2c0-1.8.9-2.7 2.7-2.7h40.9c1.9 0 2.8.9 2.8 2.7v81.2c15.2-7.7 31.7-11.5 49.8-11.4 24 .1 44.2 6.2 60.3 18 18.7 13.5 28 31.9 28 55.3v136.1c0 1.9-.9 2.8-2.7 2.8h-27.3c-9.1 0-16.4-7.3-16.4-16.3V223.3c0-.9 2.7-27-45.8-27-48.6 0-45.8 26.2-45.8 27v136.1c0 1.9-.9 2.8-2.8 2.8h-41c-1.8 0-2.7-.9-2.7-2.8V80.2zm497.7 221.5c13.7 10.2 34.1 19.1 58.4 19.1 23.3 0 32.8-4.5 36.5-13.6 3-7.9-.6-16.1-12.2-21.2l-53.6-23.5c-21.4-9.4-33.8-24-37.2-43.6-5.7-33.7 22.2-53.3 22.7-53.7 13.2-9.6 32-15.4 58.5-15.4 19 0 37.4 3.3 55.1 9.9 1.3.5 1.9 1.3 1.9 2.6V207c0 2.1-2.3 3.4-4 2.4-39.7-20.7-76.6-12.3-84-6.8-6.6 4.9-6 12.5 2.6 16.1L600 244c16.5 7.1 28.1 18.4 34.9 34.1 5.5 12.6 6.6 25.6 3.1 39.1-9.6 36.9-44.9 45.5-45.6 45.8-10.5 3.1-23.6 4.3-36.3 4.3-16.6 0-32.6-2.7-48.2-8.2-9.7-3.4-14.6-10.3-14.6-20.7V304c0-2.1 2.3-3.7 4.4-2.3zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zm-124.6 38.7c0 1.9-.9 2.8-2.8 2.8h-40.9c-1.6 0-2.7-1.4-2.7-2.8V157.6c0-1.4 1.1-2.8 2.7-2.8h40.9c1.9 0 2.8.9 2.8 2.8v201.8M228.3 72.5c15.9 0 28.9 12.7 28.9 28.9 0 15.8-12.7 28.9-28.9 28.9s-28.9-13.3-28.9-28.9c.1-16 13-28.9 28.9-28.9\"],\"hire-a-helper\":[512,512,[],\"f3b0\",\"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"],hooli:[640,512,[],\"f427\",\"M508.4 352h57.9V156.7L508.4 184v168zm73.7-110.5V352H640V241.5h-57.9zm-250.7-8.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.9 110.9v-31c-48.8-54.6-39-76.1-35.3-79.2 13.5-11.4 37.5-8 64.4 2.1L65.2 184v63.3c13.1 14.7 30.5 31.5 53.5 50.4l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zm-39.7 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm185.7-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm173.5-73c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zM144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8v16zm-21.4 0v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.5-21.7-38.5-31.5V352h57.9zm59.7.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3v5.3l-19.4.8z\"],hornbill:[509,512,[],\"f592\",\"M75.37 370.3c2.14 15.83-5.77 31.98-20.94 39.29-18.85 9.1-41.55 1.17-50.68-17.68-9.08-18.83-1.13-41.58 17.7-50.65 7.05-3.4 14.63-4.42 21.85-3.38-78.28-111.35 52-190.53 52-190.53-5.86 43.04-8.24 91.16-8.24 91.16-67.31 41.45.92 64.06 39.81 72.87 19.77 53.62 71.18 91.94 131.66 91.94 1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zM183.38 42.6c.89-7-.1-14.33-3.39-21.15-9.1-18.84-31.82-26.78-50.66-17.69-18.86 9.1-26.8 31.83-17.69 50.68 6.98 14.47 22.02 22.42 37.18 21.23-22.55 29.91-53.83 89.57-52.42 190.03l21.84-.15c-.02-.9-.14-1.77-.14-2.68 0-58.95 36.37-109.33 87.85-130.16 8.01-37.75 30.74-114.3 73.84-44.29 0 0 48.14 2.38 91.18 8.24 0-.01-77.84-128.03-187.59-54.06zm304.18 134.17c18.84-9.09 26.81-31.81 17.7-50.65-9.1-18.85-31.83-26.77-50.67-17.69-15.27 7.37-23.19 23.69-20.87 39.64-31.71-21.94-89.84-49.05-183.45-47.74l.14 22.5c2.7-.15 5.39-.41 8.14-.41 59.3 0 109.9 36.8 130.49 88.76 39.1 9.02 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 48.96-194.61 6.43.5 13.07-.49 19.31-3.5zM373.05 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15 0 60.27-38.05 111.55-91.39 131.45-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 50.97.31 4.72 1.45 9.45 3.64 13.97 9.06 18.89 31.8 26.78 50.64 17.71 18.86-9.1 26.79-31.83 17.7-50.65-6.56-13.62-20.26-21.43-34.45-21.35z\"],hotjar:[448,512,[],\"f3b1\",\"M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z\"],houzz:[414,512,[],\"f27c\",\"M258.9 330.7H154.3V480H0V32h109.5v104.5l305.1 85.6V480H258.9V330.7z\"],html5:[384,512,[],\"f13b\",\"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"],hubspot:[512,512,[],\"f3b2\",\"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"],imdb:[448,512,[],\"f2d8\",\"M350.5 288.7c0 5.4 1.6 14.4-6.2 14.4-1.6 0-3-.8-3.8-2.4-2.2-5.1-1.1-44.1-1.1-44.7 0-3.8-1.1-12.7 4.9-12.7 7.3 0 6.2 7.3 6.2 12.7v32.7zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4v-49.3zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM21.3 228.8c-.1.1-.2.3-.3.4h.3v-.4zM97 192H64v127.8h33V192zm113.3 0h-43.1l-7.6 59.9c-2.7-20-5.4-40.1-8.7-59.9h-42.8v127.8h29v-84.5l12.2 84.5h20.6l11.6-86.4v86.4h28.7V192zm86.3 45.3c0-8.1.3-16.8-1.4-24.4-4.3-22.5-31.4-20.9-49-20.9h-24.6v127.8c86.1.1 75 6 75-82.5zm85.9 17.3c0-17.3-.8-30.1-22.2-30.1-8.9 0-14.9 2.7-20.9 9.2V192h-31.7v127.8h29.8l1.9-8.1c5.7 6.8 11.9 9.8 20.9 9.8 19.8 0 22.2-15.2 22.2-30.9v-36z\"],instagram:[448,512,[],\"f16d\",\"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"],\"internet-explorer\":[512,512,[],\"f26b\",\"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"],ioxhost:[640,512,[],\"f208\",\"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"],itunes:[448,512,[],\"f3b4\",\"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"],\"itunes-note\":[384,512,[],\"f3b5\",\"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"],java:[377,512,[],\"f4e4\",\"M121.6 396s-19.6 11.4 13.9 15.2c40.6 4.6 61.3 4 106-4.5 0 0 11.8 7.4 28.2 13.8C169.5 463.4 42.9 418 121.6 396m-12.2-56.1s-21.9 16.2 11.6 19.7c43.3 4.5 77.6 4.8 136.8-6.6 0 0 8.2 8.3 21.1 12.8-121.3 35.5-256.3 2.9-169.5-25.9m103.2-95.1c24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3.1 0-175.2 43.8-91.5 140.2m132.6 192.6s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2 204.2 33.2 372.4-14.9 319.4-38.8M131 281.8s-93.1 22.1-33 30.1c25.4 3.4 76 2.6 123.1-1.3 38.5-3.2 77.2-10.2 77.2-10.2s-13.6 5.8-23.4 12.5c-94.5 24.9-277 13.3-224.5-12.1 44.5-21.4 80.6-19 80.6-19m167 93.3c96.1-49.9 51.6-97.9 20.6-91.4-7.6 1.6-11 3-11 3s2.8-4.4 8.2-6.3c61.3-21.6 108.5 63.6-19.8 97.3 0-.1 1.5-1.4 2-2.6M240 0s53.2 53.2-50.5 135c-83.1 65.6-19 103.1 0 145.8-48.5-43.8-84.1-82.3-60.2-118.2C164.4 110.1 261.5 84.5 240 0m-99.5 510.4c92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6\"],\"jedi-order\":[448,512,[],\"f50e\",\"M231.89 335.72l31.44-45.89-20.18 55.5 62.56 9.09-62.56 9.08 24.22 47.43s-30.22-31.77-34.49-36.25c1.76 68.78 2.19 85.7 2.19 85.7s154.4-71.65 68.62-230.09c0 0 106.97-118.07 10.09-190.73 0 0 165.5 99.91 60.55 271.46 0 0 86.78-84.77 41.37-170.54 0 0 78.71 111.01-17.16 233.11 0 0 26.24-16.15 49.45-77.71 0 0-16.93 183.26-221.96 185.66v.02h-4.08v-.02C16.93 479.14 0 295.88 0 295.88c23.21 61.56 49.44 77.71 49.44 77.71-95.87-122.11-17.15-233.11-17.15-233.11-45.41 85.78 41.38 170.54 41.38 170.54-104.95-171.56 60.54-271.46 60.54-271.46-96.88 72.66 10.09 190.73 10.09 190.73-85.78 158.44 68.62 230.09 68.62 230.09s.43-16.93 2.19-85.7l-34.48 36.25 24.22-47.43-62.56-9.08 62.56-9.09-20.18-55.5 31.44 45.89c2.25-87.85 7.82-305.82 7.85-306.85l.01-2.43.02 1 .03-1 .01 2.43c.05 1.72 5.61 219.2 7.86 306.85z\"],jenkins:[512,512,[],\"f3b6\",\"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"],joget:[496,512,[],\"f3b7\",\"M227.5 468.7c-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1M66.1 143.9C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9-55.5-1.4-81.7-20.8-58.5-48.2 23.2-27.4 51.1-40.7 68.9-51.2 17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1m-29.2-18c-71.9 116.6-35.6 269.3 81 341.2 116.6 71.9 269.3 35.6 341.2-80.9 71.9-116.6 35.6-269.4-81-341.2-40.5-25.1-85.5-37-129.9-37C165 8 83.8 49.9 36.9 125.9m244.4 110.4c-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5c10.5-6.4 31.9-14 13.4-24.6-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6\"],joomla:[448,512,[],\"f1aa\",\"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"],js:[448,512,[],\"f3b8\",\"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],\"js-square\":[448,512,[],\"f3b9\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],jsfiddle:[576,512,[],\"f1cc\",\"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"],keybase:[412,512,[],\"f4f5\",\"M177.2 430.9c0 9.8-8 17.8-17.8 17.8s-17.8-8-17.8-17.8 8-17.8 17.8-17.8c9.8-.1 17.8 7.9 17.8 17.8zM270 413c-9.8 0-17.8 8-17.8 17.8s8 17.8 17.8 17.8 17.8-8 17.8-17.8-8-17.8-17.8-17.8zm142.3-36c0 38.9-7.6 73.9-22.2 103h-27.3c23.5-38.7 30.5-94.8 22.4-134.3-16.1 29.5-52.1 38.6-85.9 28.8-127.8-37.5-192.5 19.7-234.6 50.3l18.9-59.3-39.9 42.3c4.8 26.7 15.7 51.3 31.2 72.3H46.1c-9.7-15.8-17.2-33-22.2-51.3L.1 454c0-74.9-5.5-147.6 61.5-215.2 20.2-20.4 43.7-36.2 69.1-46.7-6.8-13.5-9.5-29.2-7.8-46l-19.9-1.2c-17.9-1.1-31.6-16.5-30.6-34.4v-.1L74 84.2c1.1-17.1 15.4-30.6 32.5-30.6 1.3 0-.3-.1 28.2 1.7 13.9.8 21.5 9.8 22.8 11.4 7.1-10.4 14.5-20.5 24.6-34.5l20.6 12.1c-13.6 29-9.1 36.2-9 36.3 3.9 0 13.9-.5 32.4 5.7C246 92.9 262 107 271 126c.4.9 15.5 29 1.2 62.6 19 6.1 51.3 19.9 82.4 51.8 36.6 37.6 57.7 87.4 57.7 136.6zM128 122.3c3.2-10 7.7-19.7 13.1-29.4.1-2 2.2-13.1-7.8-13.8-28.5-1.8-26.3-1.6-26.7-1.6-4.6 0-8.3 3.5-8.6 8.1l-1.6 26.2c-.3 4.7 3.4 8.8 8.1 9.1l23.5 1.4zm25.8 61.8c5.6 9.4 14.1 16.1 22.3 20 0-21.2 28.5-41.9 52.8-17.5l8.4 10.3c20.8-18.8 19.4-45.3 12.1-60.9-13.8-29.1-46.9-32-54.3-31.7-10.3.4-19.7-5.4-23.7-15.3-13.7 21.2-37.2 62.5-17.6 95.1zm82.9 68.4L217 268.6c-1.9 1.6-2.2 4.4-.6 6.3l8.9 10.9c1 1.2 3.8 2.7 6.3.6l19.6-16 5.5 6.8c4.9 6 13.8-1.4 9-7.3-63.6-78.3-41.5-51.1-55.3-68.1-4.7-6-13.9 1.4-9 7.3 1.9 2.3 18.4 22.6 19.8 24.3l-9.6 7.9c-4.6 3.8 2.6 13.3 7.4 9.4l9.7-8 8 9.8zm118.4 25.7c-16.9-23.7-42.6-46.7-73.4-60.4-7.9-3.5-15-6.1-22.9-8.6-2 2.2-4.1 4.3-6.4 6.2l31.9 39.2c10.4 12.7 8.5 31.5-4.2 41.9-1.3 1.1-13.1 10.7-29 4.9-2.9 2.3-10.1 9.9-22.2 9.9-8.6 0-16.6-3.8-22.1-10.5l-8.9-10.9c-6.3-7.8-7.9-17.9-5-26.8-8.2-9.9-8.3-21.3-4.6-30-7.2-1.3-26.7-6.2-42.7-21.4-55.8 20.7-88 64.4-101.3 91.2-14.9 30.2-18.8 60.9-19.9 90.2 8.2-8.7-3.9 4.1 114-120.9l-29.9 93.6c57.8-31.1 124-36 197.4-14.4 23.6 6.9 45.1 1.6 56-13.9 11.1-15.6 8.5-37.7-6.8-59.3zM110.6 107.3l15.6 1 1-15.6-15.6-1-1 15.6z\"],keycdn:[512,512,[],\"f3ba\",\"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"],kickstarter:[448,512,[],\"f3bb\",\"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\"],\"kickstarter-k\":[384,512,[],\"f3bc\",\"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\"],korvue:[446,512,[],\"f42f\",\"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"],laravel:[640,512,[],\"f3bd\",\"M637.5 241.6c-4.2-4.8-62.8-78.1-73.1-90.5-10.3-12.4-15.4-10.2-21.7-9.3-6.4.9-80.5 13.4-89.1 14.8-8.6 1.5-14 4.9-8.7 12.3 4.7 6.6 53.4 75.7 64.2 90.9l-193.7 46.4L161.2 48.7c-6.1-9.1-7.4-12.3-21.4-11.6-14 .6-120.9 9.5-128.5 10.2-7.6.6-16 4-8.4 22s129 279.6 132.4 287.2c3.4 7.6 12.2 20 32.8 15 21.1-5.1 94.3-24.2 134.3-34.7 21.1 38.3 64.2 115.9 72.2 127 10.6 14.9 18 12.4 34.3 7.4 12.8-3.9 199.6-71.1 208-74.5 8.4-3.5 13.6-5.9 7.9-14.4-4.2-6.2-53.5-72.2-79.3-106.8 17.7-4.7 80.6-21.4 87.3-23.3 7.9-2 9-5.8 4.7-10.6zm-352.2 72c-2.3.5-110.8 26.5-116.6 27.8-5.8 1.3-5.8.7-6.5-1.3-.7-2-129-266.7-130.8-270-1.8-3.3-1.7-5.9 0-5.9s102.5-9 106-9.2c3.6-.2 3.2.6 4.5 2.8 0 0 142.2 245.4 144.6 249.7 2.6 4.3 1.1 5.6-1.2 6.1zm306 57.4c1.7 2.7 3.5 4.5-2 6.4-5.4 2-183.7 62.1-187.1 63.6-3.5 1.5-6.2 2-10.6-4.5s-62.4-106.8-62.4-106.8L518 280.6c4.7-1.5 6.2-2.5 9.2 2.2 2.9 4.8 62.4 85.5 64.1 88.2zm12.1-134.1c-4.2.9-73.6 18.1-73.6 18.1l-56.7-77.8c-1.6-2.3-2.9-4.5 1.1-5s68.4-12.2 71.3-12.8c2.9-.7 5.4-1.5 9 3.4 3.6 4.9 52.6 67 54.5 69.4 1.8 2.3-1.4 3.7-5.6 4.7z\"],lastfm:[512,512,[],\"f202\",\"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"],\"lastfm-square\":[448,512,[],\"f203\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z\"],leanpub:[576,512,[],\"f212\",\"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"],less:[640,512,[],\"f41d\",\"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"],line:[448,512,[],\"f3c0\",\"M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z\"],linkedin:[448,512,[],\"f08c\",\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"],\"linkedin-in\":[448,512,[],\"f0e1\",\"M100.3 480H7.4V180.9h92.9V480zM53.8 140.1C24.1 140.1 0 115.5 0 85.8 0 56.1 24.1 32 53.8 32c29.7 0 53.8 24.1 53.8 53.8 0 29.7-24.1 54.3-53.8 54.3zM448 480h-92.7V334.4c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7V480h-92.8V180.9h89.1v40.8h1.3c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3V480z\"],linode:[448,512,[],\"f2b8\",\"M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z\"],linux:[448,512,[],\"f17c\",\"M196.1 123.6c-.2-1.4 1.9-2.3 3.2-2.9 1.7-.7 3.9-1 5.5-.1.4.2.8.7.6 1.1-.4 1.2-2.4 1-3.5 1.6-1 .5-1.8 1.7-3 1.7-1 .1-2.7-.4-2.8-1.4zm24.7-.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm214.7 310.2c-.5 8.2-6.5 13.8-13.9 18.3-14.9 9-37.3 15.8-50.9 32.2l-2.6-2.2 2.6 2.2c-14.2 16.9-31.7 26.6-48.3 27.9-16.5 1.3-32-6.3-40.3-23v-.1c-1.1-2.1-1.9-4.4-2.5-6.7-21.5 1.2-40.2-5.3-55.1-4.1-22 1.2-35.8 6.5-48.3 6.6-4.8 10.6-14.3 17.6-25.9 20.2-16 3.7-36.1 0-55.9-10.4l1.6-3-1.6 3c-18.5-9.8-42-8.9-59.3-12.5-8.7-1.8-16.3-5-20.1-12.3-3.7-7.3-3-17.3 2.2-31.7 1.7-5.1.4-12.7-.8-20.8-.6-3.9-1.2-7.9-1.2-11.8 0-4.3.7-8.5 2.8-12.4 4.5-8.5 11.8-12.1 18.5-14.5 6.7-2.4 12.8-4 17-8.3 5.2-5.5 10.1-14.4 16.6-20.2-2.6-17.2.2-35.4 6.2-53.3 12.6-37.9 39.2-74.2 58.1-96.7 16.1-22.9 20.8-41.3 22.5-64.7C158 103.4 132.4-.2 234.8 0c80.9.1 76.3 85.4 75.8 131.3-.3 30.1 16.3 50.5 33.4 72 15.2 18 35.1 44.3 46.5 74.4 9.3 24.6 12.9 51.8 3.7 79.1 1.4.5 2.8 1.2 4.1 2 1.4.8 2.7 1.8 4 2.9 6.6 5.6 8.7 14.3 10.5 22.4 1.9 8.1 3.6 15.7 7.2 19.7 11.1 12.4 15.9 21.5 15.5 29.7zM220.8 109.1c3.6.9 8.9 2.4 13 4.4-2.1-12.2 4.5-23.5 11.8-23 8.9.3 13.9 15.5 9.1 27.3-.8 1.9-2.8 3.4-3.9 4.6 6.7 2.3 11 4.1 12.6 4.9 7.9-9.5 10.8-26.2 4.3-40.4-9.8-21.4-34.2-21.8-44 .4-3.2 7.2-3.9 14.9-2.9 21.8zm-46.2 18.8c7.8-5.7 6.9-4.7 5.9-5.5-8-6.9-6.6-27.4 1.8-28.1 6.3-.5 10.8 10.7 9.6 19.6 3.1-2.1 6.7-3.6 10.2-4.6 1.7-19.3-9-33.5-19.1-33.5-18.9 0-24 37.5-8.4 52.1zm-9.4 20.9c1.5 4.9 6.1 10.5 14.7 15.3 7.8 4.6 12 11.5 20 15 2.6 1.1 5.7 1.9 9.6 2.1 18.4 1.1 27.1-11.3 38.2-14.9 11.7-3.7 20.1-11 22.7-18.1 3.2-8.5-2.1-14.7-10.5-18.2-11.3-4.9-16.3-5.2-22.6-9.3-10.3-6.6-18.8-8.9-25.9-8.9-14.4 0-23.2 9.8-27.9 14.2-.5.5-7.9 5.9-14.1 10.5-4.2 3.3-5.6 7.4-4.2 12.3zm-33.5 252.8L112.1 366c-6.8-9.2-13.8-14.8-21.9-16-7.7-1.2-12.6 1.4-17.7 6.9-4.8 5.1-8.8 12.3-14.3 18-7.8 6.5-9.3 6.2-19.6 9.9-6.3 2.2-11.3 4.6-14.8 11.3-2.7 5-2.1 12.2-.9 20 1.2 7.9 3 16.3.6 23.9v.2c-5 13.7-5 21.7-2.6 26.4 7.9 15.4 46.6 6.1 76.5 21.9 31.4 16.4 72.6 17.1 75.3-18 2.1-20.5-31.5-49-41-68.9zm153.9 35.8c3.2-11 6.3-21.3 6.8-29 .8-15.2 1.6-28.7 4.4-39.9 3.1-12.6 9.3-23.1 21.4-27.3 2.3-21.1 18.7-21.1 38.3-12.5 18.9 8.5 26 16 22.8 26.1 1 0 2-.1 4.2 0 5.2-16.9-14.3-28-30.7-34.8 2.9-12 2.4-24.1-.4-35.7-6-25.3-22.6-47.8-35.2-59-2.3-.1-2.1 1.9 2.6 6.5 11.6 10.7 37.1 49.2 23.3 84.9-3.9-1-7.6-1.5-10.9-1.4-5.3-29.1-17.5-53.2-23.6-64.6-11.5-21.4-29.5-65.3-37.2-95.7-4.5 6.4-12.4 11.9-22.3 15-4.7 1.5-9.7 5.5-15.9 9-13.9 8-30 8.8-42.4-1.2-4.5-3.6-8-7.6-12.6-10.3-1.6-.9-5.1-3.3-6.2-4.1-2 37.8-27.3 85.3-39.3 112.7-8.3 19.7-13.2 40.8-13.8 61.5-21.8-29.1-5.9-66.3 2.6-82.4 9.5-17.6 11-22.5 8.7-20.8-8.6 14-22 36.3-27.2 59.2-2.7 11.9-3.2 24 .3 35.2 3.5 11.2 11.1 21.5 24.6 29.9 0 0 24.8 14.3 38.3 32.5 7.4 10 9.7 18.7 7.4 24.9-2.5 6.7-9.6 8.9-16.7 8.9 4.8 6 10.3 13 14.4 19.6 37.6 25.7 82.2 15.7 114.3-7.2zM415 408.5c-10-11.3-7.2-33.1-17.1-41.6-6.9-6-13.6-5.4-22.6-5.1-7.7 8.8-25.8 19.6-38.4 16.3-11.5-2.9-18-16.3-18.8-29.5-.3.2-.7.3-1 .5-7.1 3.9-11.1 10.8-13.7 21.1-2.5 10.2-3.4 23.5-4.2 38.7-.7 11.8-6.2 26.4-9.9 40.6-3.5 13.2-5.8 25.2-1.1 36.3 7.2 14.5 19.5 20.4 33.7 19.3 14.2-1.1 30.4-9.8 43.6-25.5 22-26.6 62.3-29.7 63.2-46.5.3-5.1-3.1-13-13.7-24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4 3.9-3.4 5.9-6.3 3.1-6.6-2.8-.3-2.6 2.6-6 5.1-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2-10.4 0-18.7-4.8-24.9-9.7-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"],lyft:[512,512,[],\"f3c3\",\"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"],magento:[448,512,[],\"f3c4\",\"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"],mailchimp:[428,512,[],\"f59e\",\"M426.56 323.72c-3.09-6.59-8.97-11.13-16.35-12.88-2.47-11.27-5.88-16.8-6.19-17.63 1.3-1.48 2.56-2.97 2.84-3.32 10.42-12.93 3.62-31.86-14.19-36.33-10.02-9.64-19.09-14.17-26.54-17.9-7.14-3.57-4.29-2.17-10.99-5.19-1.78-8.71-2.37-28.97-5.2-43.19-2.54-12.79-7.66-22.06-15.56-28.15-3.16-6.84-7.59-13.74-12.93-18.81 24.84-38.08 31.38-75.69 13.19-95.39-8.1-8.77-20.13-12.93-34.52-12.93-20.26 0-45.18 8.26-70.34 23.54 0 0-16.38-13.18-16.73-13.46-70.08-55.19-268.28 188.7-198.32 242l18.06 13.8c-11.34 31.54 4.43 69.14 37.29 81.21 7.26 2.67 15.14 3.97 23.31 3.51 0 0 53.09 97.36 165.1 97.39 129.58.04 162.55-126.72 162.9-127.86 0 .01 10.5-15.51 5.17-28.41zM20.12 267.95c-14.2-23.96 10.51-73.19 28.09-101.17C91.66 97.63 163.98 43.06 196.82 50.85l9.03-3.46c.03.03 24.67 20.85 24.7 20.87 16.97-10.19 38.58-20.57 58.8-22.64-12.3 2.77-27.29 9.15-45.05 20.01-.43.25-42.02 28.32-67.43 53.52-13.85 13.73-69.45 80.41-69.4 80.35 10.16-19.23 16.86-28.67 32.94-48.9 9.1-11.44 18.81-22.57 28.74-32.84 4.61-4.77 9.28-9.36 13.95-13.71 3.21-2.99 6.44-5.87 9.65-8.62 1.48-1.27 2.96-2.5 4.43-3.71l.01-.01L164.6 64.8l1.72 12.06 23.69 20.87s-20.96 14.11-31.39 23.01c-41.79 35.66-82.8 90.4-98.06 143.69l.73-.03c-7.6 4.19-15.14 10.91-21.73 20.05-.16-.04-17.04-12.43-19.44-16.5zm69.11 100.09c-25.03 0-45.33-21.37-45.33-47.72 0-26.36 20.29-47.72 45.33-47.72 6.49 0 12.66 1.44 18.24 4.02 0 0 9.63 4.86 12.34 27.81 2.82-7.17 4.24-13.06 4.24-13.06 3.23 9.88 4.88 20.26 4.23 30.76 2.68-3.56 5.55-10.27 5.55-10.27 5 29.33-16.4 56.18-44.6 56.18zm55.8-168.53s19.49-37.06 62.33-61.57c-3.19-.51-10.99.48-12.36.64 7.78-6.69 22.24-11.16 32.23-13.19-2.92-1.86-9.89-2.33-13.34-2.42-1.02-.03-1.01-.02-2.22.03 9.4-5.25 26.82-8.34 42.65-5.55-1.99-2.64-6.5-4.57-9.67-5.51-.28-.08-1.52-.39-1.52-.39l1.19-.28c9.54-1.84 20.69.15 29.5 3.69-1-2.32-3.45-5.03-5.29-6.74-.19-.18-1.29-.97-1.29-.97 9.22 1.91 18.06 5.94 24.71 10.5-.9-1.75-3.14-4.69-4.69-6.29 8.81 2.52 18.71 8.81 22.95 17.82.1.2.37.94.4 1.03-16.7-12.84-65.44-9.2-114.24 22.42-22.33 14.48-38.71 30.32-51.34 46.78zm263.32 146.34c-.59 1.15-6.73 34.4-41.86 62.01-44.37 34.86-102.66 31.33-124.67 11.8-11.76-11-16.85-26.73-16.85-26.73s-1.33 8.87-1.56 12.35c-8.87-15.09-8.12-33.52-8.12-33.52s-4.73 8.83-6.9 13.77c-6.53-16.62-3.16-33.78-3.16-33.78l-5.16 7.7s-2.42-18.81 3.52-34.47c6.36-16.74 18.68-28.9 21.11-30.42-9.35-2.97-20.12-11.49-20.14-11.51 0 0 4.28.28 7.26-.4 0 0-18.9-13.54-22.22-34.26 2.74 3.38 8.49 7.21 8.49 7.21-1.86-5.42-2.99-17.49-1.25-29.36l.01-.01c3.58-22.68 22.27-37.45 43.44-37.27 22.54.2 37.65 4.93 56.55-12.5 4-3.69 7.19-6.87 12.81-8.11.59-.13 2.06-.75 5.07-.75 3.05 0 5.98.69 8.67 2.29 10.25 6.1 12.46 22.01 13.56 33.68 4.07 43.28 2.43 35.57 19.94 44.49 8.36 4.25 17.74 8.29 28.43 19.72.03.03.08.09.08.09h.13c9.01.22 13.65 7.31 9.5 12.47-30.23 36.1-72.46 53.39-119.51 54.84-1.94.05-6.32.15-6.34.15-19.01.58-25.19 25.16-13.27 39.95 7.54 9.35 22.03 12.42 33.97 12.46l.17-.06c51.45 1.04 103.14-35.37 112.07-55.44.06-.15.61-1.42.61-1.42-2.07 2.43-52.18 49.61-113.08 47.9 0 0-6.66-.14-12.93-1.6-8.27-1.92-14.55-5.56-16.95-13.8 5.05 1.01 11.45 1.66 18.87 1.66 43.96 0 75.63-19.98 72.33-20.25-.13 0-.26.03-.48.08-5.13 1.19-57.97 21.66-91.37 11.16.08-1.02.24-2.01.48-2.9 2.97-9.95 8.25-8.56 16.79-8.93 30.48-1.01 55.07-8.68 73.5-17.43 19.65-9.33 34.63-21.35 40.03-27.42 7 11.79 6.96 26.92 6.96 26.92s2.74-.96 6.38-.96c11.38.01 13.73 10.23 5.09 20.6zm-149.29 13.7c0-.05-.01-.1-.01-.15.01.05.01.1.01.15zm-.01-.21c-.01-.13-.01-.26-.02-.39-.02-.65-.03-1.33 0-2.02-.02.74-.02 1.42 0 2.02.01.13.01.27.02.39zm.12 1.46c0 .02 0 .04.01.06 0-.02 0-.04-.01-.06zm.02.12c.2 1.58.51 2.31.55 2.4-.23-.49-.42-1.34-.55-2.4zM193.96 59.68l2.87-8.83 4.88 17.72-6.03-1.95-1.72-6.94zm22.38 17.72l-3.62-12.59 9.97 8.36c-2.24 1.44-4.36 2.86-6.35 4.23zm42.71 281.94c-.01-.13-.01-.26-.02-.39.01.13.01.27.02.39zm-.01-.39c-.02-.65-.03-1.33 0-2.02-.03.75-.03 1.42 0 2.02zm.02.6c0-.05-.01-.1-.01-.15m.13 1.46c0-.02 0-.04-.01-.06m.02.12c.2 1.58.51 2.31.55 2.4-.23-.49-.42-1.34-.55-2.4zm52.1-138.61c-.07-3.36.47-8.92 3.63-9.95h.01c5.41-1.88 12.58 11.98 12.91 24.28-4.28-2.14-9.3-3.05-14.47-2.6-1.3-3.97-1.92-7.7-2.08-11.73zM205.38 85.27l-13.59-11.38 20.57 6.28c-2.65 1.88-5 3.6-6.98 5.1zm27.7 166.94c-3.41 1.3-5.83 2.31-7 2.14-1.89-.28-.06-3.75 4.08-7.11 8.33-6.64 19.76-8.7 29.53-5.07 4.28 1.57 9.08 4.72 11.6 8.39.95 1.39 1.21 2.44.82 2.88-.77.9-3.51-.31-7.55-1.89-10.35-3.86-17.98-4.45-31.48.66zm14.55 14.53c-2.31.94-3.81 1.66-4.42 1.17-.62-.48-.01-2.42 2.15-4.51 1.88-1.81 3.83-2.83 6.07-3.77.35-.15.72-.28 1.1-.38 1.04-.28 2.09-.63 3.23-.8 9.12-1.55 15.8 3.51 14.93 4.98-.39.69-2.08.53-4.6.36-5.23-.36-10.71-.27-18.46 2.95zM60.86 323.12zm24.3-25.78c-1.85.39-.81.17-2.64.68a7 7 0 0 0-.77.25c-.58.27-1.11.45-1.62.73-.43.24-4.07 1.86-7.03 5.48-3.99 4.95-5.44 11.43-5.19 17.67.24 6.06 2.02 9.41 2.35 10.23 1.38 2.96-1.85 3.57-4.79.39l-.01-.01c-2.35-2.49-3.86-6.29-4.6-9.66-2.98-13.95 3.24-27.97 17.61-33.57.8-.32 1.74-.51 2.5-.73h-.01c1.47-.44 6.72-1.5 12.07-.67 5.87.91 11.04 3.85 14.33 7.67l.01.01c2.53 2.87 4.43 6.92 4.09 10.53v.01c-.13 1.5-.79 3.65-2.14 4.21-.5.21-1.01.1-1.36-.25-.98-.96-.22-2.93-2.6-6.3-3.17-4.47-10.31-8.76-20.2-6.67zm30.28 31.17c1.88 10.82-6 20.5-15.52 20.7-6.67.15-10.31-4.02-9.66-4.93.3-.43 1.32-.24 2.88-.01 8.5 1.32 13.66-3.86 14.9-9.29.02-.09.35-1.54.34-2.54.07-.88-.03-1.76-.16-2.56-1-5.62-7.45-6.68-11.6-11.15-3.72-4.04-2.99-9.22-.65-11.71 2.81-2.77 6.83-1.76 6.78-.78 0 .52-.97.91-2.17 1.74-1.56 1.1-1.77 2.16-1.37 3.98.26 1 .71 1.65 1.68 2.42 3.48 2.76 12.85 4.7 14.55 14.13zm212.87-81.47c2.58.4 4.22 3.59 3.67 7.13-.55 3.54-3.09 6.08-5.67 5.67-2.58-.4-4.22-3.59-3.67-7.13.56-3.53 3.09-6.07 5.67-5.67zm-28.33 10.31c1.42-2.59 5.44-3.11 8.99-1.16 3.55 1.94 5.27 5.62 3.86 8.2-1.42 2.59-5.44 3.11-8.99 1.16-3.55-1.94-5.28-5.61-3.86-8.2z\"],mandalorian:[390,512,[],\"f50f\",\"M203.28 511.89c-.98-3.26-1.69-15.83-1.39-24.58.55-15.89.98-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-.96.4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-.99-11.43.16-4.81 0-10.53-.34-12.71-2.05-12.97-3.46-27.7-3.25-33.9.21-6.12.43-7.15 2.06-9.67 3.05-4.71 6.51-14.04 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74.89-4.42 2.43-9.72 4.36-15.05 2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71-1.03 1.49-4.76 4.8-8.29 7.36-8.37 6.08-11.7 9.39-12.66 12.58-.93 3.11-1.02 7.23-.16 7.76.34.21 1.29 2.4 2.11 4.88 1.62 4.88 1.87 10.12.72 15.36-.39 1.77-1.05 5.47-1.46 8.23-.41 2.76-.98 6.46-1.25 8.22-.28 1.76-.97 3.68-1.55 4.26-.96.96-1.14.91-2.05-.53-.55-.87-1.2-3.01-1.44-4.75-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-.96-20.96.92-1.73 1.67-3.81 1.67-4.61 0-2.39-2.2-5.32-7.41-9.89-7.05-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3.01-2.6 9.11-2.97 22.02l-.35 12.13 1.95 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56.07 11.84.95 22.75 2 24.71.36.66.51 1.35.34 1.52-.17.17.41 2.09 1.29 4.27.88 2.18 1.81 6.22 2.06 8.98.25 2.76 1.02 7.43 1.71 10.37 2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 57.98-2.04 61.21-.12 2.02-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4.02-4.79-2.83-9.95.7-3.01 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1.01-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73.38-1.29.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6.03-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57.02-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-10.96-1.9-23.85-14.55-6.15-6.04-12.34-11.97-13.75-13.19-2.81-2.42-2.79-1.99-.56-9.63l1.35-4.65-1.69-3.04c-.93-1.67-2.09-3.51-2.59-4.07-1.33-1.51-5.5-10.89-5.99-13.49-.31-1.66-.09-2.67.87-3.9 2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1.05 9.41 5.03 1.34 4.79 1.37 9.79.1 18.55-.53 3.68-.98 8.68-.99 11.11-.02 4.01.19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52 1.7.71 3.82 1.99 4.72 2.85 11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 7.98 4.54 10.04 13.39 1.31 5.65 4 11.14 5.46 11.14.59 0 2.09-.63 3.33-1.39 1.98-1.22 2.25-1.73 2.25-4.18-.01-3.71-1.17-14.08-2-17.84-.37-1.66-.78-4.06-.93-5.35-.14-1.29-.61-3.85-1.03-5.69-2.55-11.16-3.65-15.46-4.1-16.05-1.55-2.02-4.08-10.2-4.93-15.92-1.64-11.11-3.96-14.23-12.91-17.39-4.64-1.64-8.89-4.12-13.32-7.78-1.15-.95-4.01-3.22-6.35-5.06-2.35-1.83-4.41-3.53-4.6-3.76-.18-.23-1.39-1.14-2.69-2.02-6.24-4.22-8.84-6.98-11.26-11.96l-2.44-5.02-.22-12.98-.22-12.98 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2.05 8.53-.19 10.12.02 11.66 1.56 1.53 1.53 1.36 6.4-.29 8.5-.74.94-1.34 1.98-1.34 2.32 0 .58-2.61 4.91-5.42 8.99-.68.99-2.13 5.35-2.37 6.82 20.44 13.39 21.55 3.77 14.07 28.98l11.4 2.54c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-11.98-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28 3.18-.92 6.58-1.68 7.55-1.68.97 0 3.66-.58 5.98-1.29 3.65-1.11 4.5-1.17 6.35-.4 1.17.48 3.79 1.09 5.82 1.36 2.02.26 4.72 1.12 6 1.91 1.28.79 3.53 1.77 5.02 2.17 2.51.68 3 .57 7.05-1.67l4.35-2.4 10.7-.41c10.44-.4 10.81-.47 15.26-2.68l4.58-2.3 2.46 1.43c1.76 1.02 3.14 2.73 4.85 5.98 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39.5 1.96 1.45 4.62 2.1 5.91.65 1.29 1.24 3.09 1.31 4.01.31 4.33-.03 5.3-2.41 6.92-2.17 1.47-6.98 7.91-6.98 9.34 0 .32-.48 1.69-1.07 3.03-5.04 11.51-6.76 13.56-14.26 16.98-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26-.37.69-2.21 2.37-4.09 3.71-2.04 1.47-3.8 3.38-4.38 4.78-.54 1.28-1.66 2.59-2.49 2.91-.83.32-1.94 1.08-2.45 1.71-.52.62-3.66 3.04-7 5.38-3.33 2.34-6.87 5.02-7.87 5.96-1 .94-2.07 1.71-2.39 1.71s-1.28.74-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6.22 1.63.86 4.27 1.42 5.88 1.32 3.8 1.31 7.86-.05 10.57-1.43 2.86-.89 6.65 1.35 9.59 2.01 2.63 2.16 4.56.71 8.84-.61 1.8-1.05 5.45-1.06 8.91-.02 4.88.22 6.28 1.46 8.38 1.2 2.04 1.82 2.48 3.24 2.32 1.98-.23 2.3-1.05 4.71-12.12 2.18-10.03 3.71-11.92 13.76-17.08 2.94-1.51 7.46-3.96 10.03-5.44 2.58-1.48 6.79-3.69 9.37-4.91 6.67-3.16 11.05-6.52 15.22-11.67 7.11-8.79 9.98-16.22 12.85-33.3.55-3.28 1.43-5.65 2.86-7.73 1.29-1.87 2.37-4.62 2.89-7.31 1.02-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8.03-2.18 3.11-6.46 13.01-8.76 20.26l-2.29 7.22-6.97 6.49c-3.83 3.57-7.96 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 9.99 0 2.98.43 4.96 1.59 7.26.87 1.74 1.81 3.91 2.09 4.83.28.92.98 2.22 1.57 2.89 1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12.02-4.7 12.02-1.79 0-4.06 9.27-5.07 20.74-.18 2.02-.62 5.94-.98 8.7-.36 2.76-.96 9.98-1.35 16.05-.77 12.22-.19 18.77 2.05 23.15 3.41 6.69.52 12.69-11.03 22.84l-3.97 3.49.07 5.19c.04 2.86.55 6.85 1.14 8.87 4.61 15.98 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15.42 1.84.91 5 1.08 7.02.17 2.02.66 5.33 1.08 7.36.47 2.26.78 11.02.79 22.74l.02 19.06-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2.02-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3.02-17.66-3.03-21.3-.01-4.23 1.02-6 5.28-9.13 4.14-3.04 4.86-3.14 5.48-.72.28 1.1 1.45 5.62 2.6 10.03 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-.98 7.07-1.17 12.39-1.04 28.43.17 19.4-.64 35.73-2.04 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-70.99-37.58c-.24-.38-1.01-5.24-1.73-10.79-.72-5.56-1.49-10.41-1.73-10.79-.23-.38-.68-3.3-.99-6.49-.31-3.19-.91-7.46-1.33-9.48-.99-4.79-3.35-19.35-3.42-21.07-.03-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29.96-.96 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83-.18 4.6-.49 9.87-.67 11.71-.18 1.84-.61 9.36-.94 16.72-.79 17.41-1.94 31.29-2.65 32-.32.3-.76.24-1-.14zM74.63 162.61c21.07 12.79 17.84 14.15 28.49 17.66 13.01 4.29 18.87 7.13 23.15 16.87-43.66 36.14-69.01 57.9-76.71 70.82-31.02 52.01-5.99 101.59 62.75 87.21-14.18 29.23-77.97 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179.02c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-67.96 2.98-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.27 70.58-78.66 91.12-105.29 61.65z\"],mastodon:[417,512,[],\"f4f6\",\"M417.8 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.5-28.4-290.4 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.4-.9-9-.9-13.9 85.6 20.9 158.6 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6V190.1c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H75.1c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z\"],maxcdn:[512,512,[],\"f136\",\"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"],medapps:[320,512,[],\"f3c6\",\"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"],medium:[448,512,[],\"f23a\",\"M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z\"],\"medium-m\":[512,512,[],\"f3c7\",\"M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z\"],medrt:[544,512,[],\"f3c8\",\"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"],meetup:[512,512,[],\"f2e0\",\"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"],megaport:[496,512,[],\"f5a3\",\"M248 8C111.04 8 0 119.04 0 256c0 136.97 111.04 248 248 248 136.96 0 248-111.03 248-248C496 119.04 384.96 8 248 8zm85.46 267.67l59.66 59.67v87.05l-26.07 19.23L341 422.39v-65.46l-33.44-33.44-33.44 33.44v65.46L248 441.62l-26.12-19.23v-65.46l-33.44-33.44L155 356.92v65.46l-26.07 19.23-26.06-19.23v-87.05l59.47-59.47V188l59.5-59.5V52.88l26.06-19.23 26.06 19.23v75.64l59.5 59.5m-85.56-11.86l33.44 33.44V276L248 309.33l-33.54-33.54v-66.2l33.44-33.43z\"],microsoft:[448,512,[],\"f3ca\",\"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"],mix:[448,512,[],\"f3cb\",\"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"],mixcloud:[640,512,[],\"f289\",\"M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z\"],mizuni:[496,512,[],\"f3cc\",\"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"],modx:[448,512,[],\"f285\",\"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"],monero:[496,512,[],\"f3d0\",\"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"],napster:[496,512,[],\"f3d2\",\"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"],nimblr:[355,512,[],\"f5a8\",\"M232.6 299.29c15.57 0 27.15 11.46 27.15 26.96 0 15.55-11.62 26.96-27.15 26.96-15.7 0-27.15-11.57-27.15-26.96 0-15.51 11.58-26.96 27.15-26.96zM99.01 326.25c0-15.61 11.68-26.96 27.15-26.96 15.57 0 27.15 11.46 27.15 26.96 0 15.41-11.47 26.96-27.15 26.96-15.44 0-27.15-11.31-27.15-26.96m78.75-167.3C143 158.95 75.45 178.77 45.25 227L0 0v335.48C0 433.13 79.61 512 177.76 512c98.24 0 177.76-78.95 177.76-176.52 0-97.46-79.39-176.53-177.76-176.53zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59 0-72.68 59.24-131.59 132.51-131.59 73.27 0 132.51 58.91 132.51 131.59s-59.25 131.59-132.51 131.59z\"],\"nintendo-switch\":[448,512,[],\"f418\",\"M95.9 33.5c-44.6 8-80.5 41-91.8 84.4C0 133.6-.3 142.8.2 264.4.4 376 .5 378.6 2.4 387.3c10.3 46.5 43.3 79.6 90.3 90.5 6.1 1.4 13.9 1.7 64.1 1.9 51.9.4 57.3.3 58.7-1.1 1.4-1.4 1.5-19.3 1.5-222.2 0-150.5-.3-221.3-.9-222.6-.9-1.7-2.5-1.8-56.9-1.7-44.2.1-57.5.4-63.3 1.4zm83.9 222.6V444l-37.8-.5c-34.8-.4-38.5-.6-45.5-2.3-29.9-7.7-52-30.7-58.3-60.7-2-9.4-2-240.1-.1-249.3 5.6-26.1 23.7-47.7 48-57.4 12.2-4.9 17.9-5.5 57.6-5.6l35.9-.1v188zm-75.9-131.2c-5.8 1.1-14.7 5.6-19.5 9.7-9.7 8.4-14.6 20.4-13.8 34.5.4 7.3.8 9.3 3.8 15.2 4.4 9 10.9 15.6 19.9 20 6.2 3.1 7.8 3.4 15.9 3.7 7.3.3 9.9 0 14.8-1.7 20.1-6.8 32.3-26.3 28.8-46.4-3.9-23.7-26.6-39.7-49.9-35zm158.2-92.3c-.4.3-.6 100.8-.6 223.5 0 202.3.1 222.8 1.5 223.4 2.5.9 74.5.6 83.4-.4 37.7-4.3 71-27.2 89-61.2 2.3-4.4 5.4-11.7 7-16.2 5.8-17.4 5.7-12.8 5.7-146.1 0-106.4-.2-122.3-1.5-129-9.2-48.3-46.1-84.8-94.5-93.1-6.5-1.1-16.5-1.4-48.8-1.4-22.4-.1-40.9.2-41.2.5zm99.1 202.1c14.5 3.8 26.3 14.8 31.2 28.9 3.1 8.7 3 21.5-.1 29.5-5.7 14.7-16.8 25-31.1 28.8-23.2 6-47.9-8-54.6-31-2-7-1.9-18.9.4-26.2 6.9-22.7 31-36.1 54.2-30z\"],node:[640,512,[],\"f419\",\"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"],\"node-js\":[448,512,[],\"f3d3\",\"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"],npm:[576,512,[],\"f3d4\",\"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"],ns8:[640,512,[],\"f3d5\",\"M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z\"],nutritionix:[400,512,[],\"f3d6\",\"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"],odnoklassniki:[320,512,[],\"f263\",\"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"],\"odnoklassniki-square\":[448,512,[],\"f264\",\"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\"],\"old-republic\":[496,512,[],\"f510\",\"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"],opencart:[640,512,[],\"f23d\",\"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"],openid:[448,512,[],\"f19b\",\"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"],opera:[496,512,[],\"f26a\",\"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"],\"optin-monster\":[576,512,[],\"f23c\",\"M550.671 450.303c0 11.62-15.673 19.457-32.158 14.863-12.16-3.243-31.346-17.565-36.211-27.294-5.674-11.62 4.054-32.698 18.916-30.806 15.674 1.621 49.453 25.401 49.453 43.237zM372.86 75.223c-3.783-72.151-100.796-79.718-125.928-23.51 44.588-24.321 90.257-15.673 125.928 23.51zM74.795 407.066c-15.673 1.621-49.452 25.401-49.452 43.237 0 11.62 15.673 19.457 32.157 14.863 12.16-3.243 31.076-17.565 35.94-27.294 5.946-11.62-3.782-32.698-18.645-30.806zm497.765 14.322c1.081 3.513 1.892 7.026 1.892 10.809.81 31.616-44.317 64.045-73.503 65.125-17.295.81-34.59-8.377-42.696-23.51-113.497 4.053-226.994 4.864-340.22 0-8.377 15.133-25.672 24.05-42.967 23.51-28.915-1.081-74.043-33.509-73.503-65.125.27-3.783.811-7.296 1.892-10.809-5.566-9.463-4.845-15.282 5.405-11.62 3.243-5.134 7.026-9.458 11.08-13.782-2.57-10.917 1.27-14.094 11.079-9.188 4.594-3.243 9.998-6.485 15.944-9.188 0-15.757 11.839-11.131 17.295-5.675 12.467-1.78 20.129.709 26.753 5.675v-19.726c-12.987 0-40.641-11.375-45.94-36.212-4.974-20.725 2.607-38.075 25.132-47.56.81-5.945 8.107-14.052 14.862-15.944 7.567-1.892 12.431 4.594 14.052 10.269 7.425 0 17.757 1.465 21.078 8.107 5.405-.541 11.079-1.352 16.484-1.892-2.432-1.892-5.134-3.513-8.107-4.594-5.134-8.917-13.782-11.079-24.591-11.62 0-.81 0-1.621.27-2.702-19.727-.541-44.048-5.675-54.857-17.835-21.321-23.638-15.935-83.577 12.16-103.498 8.377-5.675 21.618-.811 22.699 9.728 2.425 20.598.399 26.833 26.212 25.942 8.107-7.836 16.755-14.592 26.483-19.997-14.862-1.352-28.914 1.621-43.778 3.783 12.752-12.48 23.953-25.442 56.748-42.427 23.511-11.89 49.993-20.808 76.205-23.239-18.646-7.837-39.993-11.891-59.721-16.484 76.475-16.214 174.569-22.159 244.289 37.562 18.105 15.403 32.427 36.211 42.696 59.992 39.799 4.853 36.47-5.581 38.643-25.132 1.081-10.269 14.322-15.403 22.699-9.458 14.862 10.539 22.159 30.806 24.59 48.101 2.162 17.835.27 41.345-12.43 55.127-10.809 12.16-34.32 17.565-53.776 18.105v2.703c-11.08.27-20.268 2.432-25.673 11.62-2.972 1.081-5.674 2.703-8.377 4.594 5.675.54 11.35 1.351 16.755 1.891 1.869-5.619 12.535-8.377 21.077-8.377 1.621-5.405 6.756-11.89 14.052-10.269s14.052 9.998 14.863 15.944c10.809 4.324 22.159 12.16 25.131 25.672 1.892 8.107 1.621 15.133.27 21.888-5.726 25.262-33.361 36.212-45.939 36.212 0 6.756 0 13.241-.27 19.726 8.01-6.006 16.367-7.158 26.752-5.675 5.919-5.919 17.565-9.41 17.565 5.675 5.675 2.703 11.349 5.945 15.944 9.188 10.1-5.051 13.669-.539 10.809 9.188 4.053 4.323 8.107 8.917 11.079 13.782 10.136-3.62 11.021 2.078 5.409 11.62zm-73.773-254.016c17.295 6.756 26.212 22.159 30.265 35.67 1.081-10.539-2.702-39.453-13.782-51.073-7.296-7.296-14.052-5.134-14.052.81.001 6.216-1.35 11.62-2.431 14.593zm-18.646 12.43c12.971 15.673 17.024 41.615 12.7 62.963 10.809-2.162 20.537-6.215 26.212-12.16 1.892-2.162 3.783-4.864 4.864-7.566-1.081-21.348-10.269-42.697-29.725-48.912-3.242 3.243-9.187 4.864-14.051 5.675zm-21.889.811c7.567 20.537 12.431 42.696 14.322 64.585 3.513 0 7.567-.27 11.62-.811 5.945-24.321-.27-51.614-14.052-63.504-3.783 0-8.107 0-11.89-.27zM77.768 167.372c-1.081-2.973-2.432-8.377-2.432-14.593 0-5.945-7.026-8.107-14.052-.81-11.35 11.62-14.863 40.534-13.782 51.073 4.053-13.512 12.971-28.915 30.266-35.67zm5.675 75.394c-4.324-21.348-.27-47.291 12.701-62.963-4.865-.811-10.809-2.432-14.052-5.675-19.457 6.215-28.375 27.563-29.726 48.912 1.351 2.702 2.972 5.404 4.864 7.566 5.675 6.215 15.403 9.998 26.213 12.16zm41.345-61.073c-5.134 1.081-9.998 2.973-14.862 4.865l-12.16 5.134v-.27c-7.296 14.052-9.999 34.319-5.405 52.965 4.594.541 8.647.811 12.7.811 2.432-22.159 9.188-43.778 19.727-63.505zm88.095-23.239c0 42.155 34.319 76.205 76.205 76.205s76.205-34.05 76.205-76.205c0-41.886-34.319-75.935-76.205-75.935s-76.205 34.049-76.205 75.935zm152.41 97.283c9.969 50.608 3.299 64.692 16.484 58.099 15.944-8.107 22.699-39.183 22.97-57.019-12.971-.81-26.213-.81-39.454-1.08zm-71.611-.541v-.27c-.27 5.134.27 38.103 4.324 41.075 11.079 5.405 39.453 4.594 51.073 1.081 5.405-1.621 2.432-37.022 1.621-41.886-18.916-.27-38.102-.27-57.018 0zm-14.053 0v-.27c-19.456.27-38.642.27-57.829.811-1.892 9.187-4.594 48.911 1.892 51.614 12.971 5.675 41.616 5.134 54.586 1.621 4.595-2.432 2.433-45.399 1.351-53.776zm-85.662 57.56c5.405 2.432 8.647 2.432 9.728-4.324 1.892-8.647 2.432-36.752 4.865-52.155-12.16.27-24.591.811-36.752 1.621-5.405 19.727.27 45.129 22.159 54.858zm-65.666-11.08c43.778 47.02 92.689 85.663 155.923 106.47 67.558-19.186 115.659-59.991 163.219-107.011-11.095-4.315-7.715-10.363-7.296-11.62-8.918-.81-17.835-1.892-26.483-2.702-9.458 32.968-35.94 52.965-46.75 31.616-2.702-5.134-3.513-11.62-4.594-16.754-3.783 8.377-13.242 8.107-24.591 8.918-13.241 1.081-31.617 1.351-44.048-2.972-2.972 12.971-11.079 12.971-26.752 14.322-14.052 1.352-48.642 4.054-54.857-10.809-1.081 28.644-35.13 9.998-45.129-7.026-3.243-5.675-5.405-11.35-7.026-17.565-7.837.81-15.673 1.621-23.511 2.702 2.443 3.663 1.549 9.052-8.105 12.431zM115.6 453.545c-5.674-23.239-18.646-49.722-33.508-54.046-22.429-6.756-68.909 23.51-66.207 54.586 12.701 19.457 39.994 35.67 59.181 36.481 17.835.81 35.94-11.08 39.724-28.914.539-2.432.81-5.134.81-8.107zm7.296-5.944c33.509-19.457 69.179-35.671 105.931-47.02-38.643-20.537-68.098-47.831-97.283-77.016-2.162 1.352-5.134 2.432-7.836 3.513-1.637 4.91 8.718 5.33 5.405 12.431-2.162 4.054-8.648 7.567-15.133 9.188-2.161 2.702-5.134 4.864-7.836 6.485h-.27c-.27 13.511-.27 27.024.27 40.535 8.939 15.964 15.426 33.314 16.752 51.884zm320.764 12.7c-36.752-21.348-74.044-41.345-115.659-52.965-13.782 6.215-27.833 11.349-42.155 15.403-2.162.811-2.162.811-4.324 0-11.89-3.783-23.239-8.107-34.859-13.241-40.265 11.62-77.286 29.185-112.416 50.803h-.27v.27c.27 0 .27 0 .27-.27 103.227 4.054 206.455 3.513 309.413 0zm27.023-64.045l-.27.27c.541-13.782.811-27.563.811-41.345-2.973-1.621-5.675-4.054-8.107-6.756-6.485-1.351-12.971-5.134-15.133-8.918-1.892-4.053 1.351-7.566 5.945-10.269-.27-.541-.541-1.621-.541-2.432-2.972-.811-5.405-1.892-7.567-3.243-31.616 29.455-65.396 56.749-103.498 76.746 38.914 11.62 75.935 28.104 111.875 47.561 1.05-14.692 7.231-35.749 16.485-51.614zm23.24 3.244c-14.593 4.323-27.834 30.806-33.509 54.046 0 23.826 21.278 37.897 40.534 37.022 19.186-.811 46.48-17.024 59.181-36.481 2.973-31.077-43.507-61.344-66.206-54.587zM290.709 134.133c.045 0 .089.003.134.003.046 0 .09-.003.136-.003h-.27zm0 96.743c28.645 0 51.884-21.618 51.884-48.371 0-36.092-40.507-58.079-72.151-44.318 9.458 2.972 16.484 11.62 16.484 21.618 0 23.257-33.291 31.955-46.48 11.35-7.297 34.067 19.368 59.721 50.263 59.721zM68.039 474.083c.54 6.486 12.16 12.701 21.618 9.458 6.756-2.703 14.593-10.539 17.295-16.214 2.973-7.026-1.081-19.997-9.728-18.375-8.917 1.621-29.725 16.754-29.185 25.131zm410.75-25.131c-8.377-1.621-12.431 11.349-9.458 18.375 2.432 5.675 10.269 13.511 17.295 16.214 9.187 3.243 21.078-2.972 21.348-9.458.811-8.377-20.267-23.51-29.185-25.131z\"],osi:[495,512,[],\"f41a\",\"M0 259.2C2.3 123.4 97.4 26.8 213.8 11.1c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7-17.8-46.3-35.6-92.7-53.4-139-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8 6.4-42.4-24.5-78.7-64.5-82.2-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4-17.9 46.6-35.8 93.2-53.7 139.9-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119C1.9 318.7 1.6 280.2 0 259.2zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3 14.9-39.1 29.9-78.2 45-117.3 1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6 31.9 18.4 49.5 53.8 45.2 90.4-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6 15.2 39.2 30.2 78.4 45.2 117.7 1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161C459.8 112 354.1 14.7 218 31.5 111.9 44.5 22.7 134 20.9 257.3z\"],page4:[496,512,[],\"f3d7\",\"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"],pagelines:[384,512,[],\"f18c\",\"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"],palfed:[576,512,[],\"f3d8\",\"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"],patreon:[512,512,[],\"f3d9\",\"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\"],paypal:[384,512,[],\"f1ed\",\"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"],periscope:[448,512,[],\"f3da\",\"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"],phabricator:[496,512,[],\"f3db\",\"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"],\"phoenix-framework\":[640,512,[],\"f3dc\",\"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"],\"phoenix-squadron\":[513,512,[],\"f511\",\"M96.24 62.81C142.91 26.57 202.15 6.57 261.28 8.08c29.67-.38 59.29 5.38 87.17 15.37-24.2-4.64-49.18-6.35-73.6-2.45-43 5.35-83.26 27.23-112.16 59.35 5.69-.99 10.81-3.68 16.07-5.88 18.19-7.89 37.6-13.29 57.4-14.87 19.8-2.14 39.75-.43 59.45 1.93-14.46 2.79-29.2 4.58-43.11 9.61-34.53 11.11-65.46 33.26-86.55 62.82-13.84 19.77-23.7 42.99-24.74 67.33-.35 16.54 5.23 34.91 19.89 44.17 11.13 6.66 24.85 9.39 37.63 6.76 15.49-2.47 30.16-8.67 43.73-16.38 11.55-6.84 22.73-14.59 32.05-24.32 3.8-3.23 2.54-8.48 2.63-12.83-2.13-.34-4.4-1.11-6.32.3a203.975 203.975 0 0 1-35.93 15.42c-20.07 6.19-42.28 8.48-62.28.78 12.83 1.73 26.14.31 37.85-5.46 20.29-9.75 36.92-25.27 54.6-38.88 27.84-21.29 57.64-40.11 89.17-55.47 25.78-12.01 53.09-22.85 81.81-24.2-15.68 13.76-32.25 26.6-46.92 41.51-14.55 14.04-27.54 29.58-40.23 45.31-3.53 4.61-8.98 6.96-13.62 10.19-22.24 15.03-40.6 35.96-52.04 60.28-9.36 19.74-14.55 41.97-11.81 63.84 1.95 13.73 8.74 27.67 20.96 35.01 12.94 7.99 29.14 8.09 43.61 5.11 32.9-7.47 61.61-28.97 81.28-56 20.5-27.6 30.61-62.38 29.25-96.64-.52-7.52-1.58-15-1.67-22.55 8.02 19.54 14.87 39.83 16.7 61.01 2.01 14.32.75 28.84-1.62 43.02-1.92 11.02-5.69 21.58-7.81 32.53 20.36-22.73 34.17-51.24 39.46-81.31 5.72-35.37.58-72.36-14.25-104.95 20.84 32.12 32.43 69.79 35.81 107.8.5 12.77.5 25.58 0 38.34-2.91 34.26-12.97 67.95-29.76 98-26.2 47.48-68.2 85.89-117.54 108.32-78.52 36.34-175.2 31.41-248.72-14.72-38.84-23.78-71.06-58.32-91.68-98.96C10.72 337.43 2.04 305.5 0 273.13V241.7c3.94-69.97 40.99-136.32 96.24-178.89m222.65 80.57c5.51-.8 10.82-2.57 16.02-4.5 4.99-1.77 9.27-5.95 10.35-11.25-8.91 5-17.95 9.95-26.37 15.75z\"],php:[640,512,[],\"f457\",\"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"],\"pied-piper\":[448,512,[],\"f2ae\",\"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"],\"pied-piper-alt\":[576,512,[],\"f1a8\",\"M242 187c6.3-11.8 13.2-17 25.9-21.8 27.3-10.3 40.2-30.5 58.9-51.1 11.9 8.4 12 24.6 31.6 23v21.8l6.3.3c37.4-14.4 74.7-30.2 106.6-54.6 48.3-36.8 52.9-50 81.3-100l2-2.6c-.6 14.1-6.3 27.3-12.4 39.9-30.5 63.8-78.7 100.3-146.8 116.7-12.4 2.9-26.4 3.2-37.6 8.9 1.4 9.8 13.2 18.1 13.2 23 0 3.4-5.5 7.2-7.5 8.6-11.2-12.9-16.1-19.3-22.7-22.1-7.6-3.5-63.9-6.4-98.8 10zm137.9 256.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9L244 246zm-12.6 31.8l24.1 61.2 21-13.8-31.3-50.9-13.8 3.5zM555.5 0l-.6 1.1-.3.9.6-.6.3-1.4zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46v27.3l11.8-3.4-2.9-23.8h-8.9zm76.1 2.9c0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3l2 12.4c9-1.5 58.4-6.6 58.4-14.1z\"],\"pied-piper-hat\":[640,512,[],\"f4e5\",\"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"],\"pied-piper-pp\":[448,512,[],\"f1a7\",\"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"],pinterest:[496,512,[],\"f0d2\",\"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"],\"pinterest-p\":[384,512,[],\"f231\",\"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"],\"pinterest-square\":[448,512,[],\"f0d3\",\"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"],playstation:[576,512,[],\"f3df\",\"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"],\"product-hunt\":[512,512,[],\"f288\",\"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"],pushed:[432,512,[],\"f3e1\",\"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"],python:[448,512,[],\"f3e2\",\"M167.8 36.4c-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1zm-6.7 28.4c11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4zm185.2 81.4v47.5c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6-7.7-30.9-22.3-54.2-53.4-54.2h-40.1zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3z\"],qq:[448,512,[],\"f1d6\",\"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"],quinscape:[489,512,[],\"f459\",\"M301.9 474.6h-1.3c-87.3 0-158.1-70.8-158.1-158.1s70.8-158.1 158.1-158.1c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C489.1 117.5 379.6 8 244.5 8 109.5 8 0 117.5 0 252.6s109.5 244.6 244.5 244.6c24.8 0 47.8-3.2 70.4-10.1-5.2-3.5-9-8.2-13.4-12.6l.4.1zm-21.2-69.8c0-54.8 44.4-99.2 99.2-99.2 54.8 0 99.2 44.4 99.2 99.2 0 54.8-44.4 99.2-99.2 99.2-54.8 0-99.2-44.4-99.2-99.2\"],quora:[448,512,[],\"f2c4\",\"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"],\"r-project\":[581,512,[],\"f4f7\",\"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"],ravelry:[512,512,[],\"f2d9\",\"M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z\"],react:[512,512,[],\"f41b\",\"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zm-130 189.1c4.6 8.8 9.3 17.5 14.3 26.1 5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5zm0-50.6c-6.3-14.9-11.6-29.5-16-43.6 14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26zm11.4 25.3c6.6-13.8 13.8-27.3 21.4-40.6 7.6-13.3 15.8-26.2 24.4-38.9 15-1.1 30.3-1.7 45.9-1.7 15.6 0 31 .6 45.9 1.7 8.5 12.6 16.6 25.5 24.3 38.7 7.7 13.2 14.9 26.7 21.7 40.4-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6-15.7 0-30.9-.5-45.6-1.4-8.7-12.7-16.9-25.7-24.6-39-7.7-13.3-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zM256 210.2c25.3 0 45.8 20.5 45.8 45.8 0 25.3-20.5 45.8-45.8 45.8-25.3 0-45.8-20.5-45.8-45.8 0-25.3 20.5-45.8 45.8-45.8\"],readme:[576,512,[],\"f4d5\",\"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"],rebel:[512,512,[],\"f1d0\",\"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"],\"red-river\":[448,512,[],\"f3e3\",\"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"],reddit:[512,512,[],\"f1a1\",\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\"],\"reddit-alien\":[512,512,[],\"f281\",\"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\"],\"reddit-square\":[448,512,[],\"f1a2\",\"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\"],rendact:[496,512,[],\"f3e4\",\"M248 8C111 8 0 119 0 256s111 248 248 248c18.6 0 36.7-2.1 54.1-5.9-5.6-7.4-10.8-14.4-15.9-21.3-12.4 2.1-25.2 3.3-38.3 3.3C124.3 480 24 379.7 24 256S124.3 32 248 32s224 100.3 224 224c0 71-33 134.2-84.5 175.3-25.9 18.8-39.1 21.4-83.5-44.2-78.7-112.9-48-71.1-73.7-108.3 72.8 8.9 228.5-72 168.6-168.6C314-26.8 15 93.8 59.7 226.4c3.2 9.8 14.4 38.6 45.6 38.6 2 0 2.6-.6 2-1.7-4.4-8.7-20.1-9.8-20.1-37.4 0-40.5 40.5-89.6 100.3-120 66.1-32.3 131.9-30.2 158.2 5.4 27.2 38.3-20.9 119.2-120.4 136.9 7.5-9.4 57-75.2 62.8-84 22.7-34.6 23.6-49 14-59.2-15.5-16.9-29.5-10.3-50.7-11.7-10.8-.9-113.7 181.2-136.4 216.9-5.9 9-21.2 34.1-21.2 50.9 0 21.3 2.8 51.4 20.6 51.4 10.6 0 8-18.7 8-26.6 0-12.9 27.4-49.4 74.8-104.6 20.4 36.1 57.7 114.3 130.2 209.7 98-33.1 168.5-125.8 168.5-235C496 119 385 8 248 8z\"],renren:[512,512,[],\"f18b\",\"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"],replyd:[448,512,[],\"f3e6\",\"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"],researchgate:[448,512,[],\"f4f8\",\"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"],resolving:[496,512,[],\"f3e7\",\"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"],rocketchat:[448,512,[],\"f3e8\",\"M448 256.2c0-87.2-99.6-153.3-219.8-153.3-18.8 0-37.3 1.6-55.3 4.8-11.1-10.5-24.2-20-38-27.4C61.2 44.2 0 79.4 0 79.4s56.9 47.1 47.6 88.3c-52.3 52.3-52.5 124.1 0 176.6C56.9 385.6 0 432.6 0 432.6s61.2 35.2 134.9-.8c13.8-7.5 26.9-16.9 38-27.4 18 3.2 36.5 4.8 55.3 4.8 120.3-.1 219.8-65.8 219.8-153zm-219.7 124c-23.7 0-46.3-2.8-67.3-7.8-21.3 25.8-68.1 61.7-113.6 50.1 14.8-16 36.7-43.1 32-87.6-27.3-21.4-43.6-48.7-43.6-78.5 0-68.4 86.2-123.9 192.5-123.9S420.8 188 420.8 256.4c0 68.3-86.2 123.8-192.5 123.8zm25.6-123.9c0 14.2-11.5 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.5-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm88.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm-177.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.2 0 25.6 11.6 25.6 25.8z\"],rockrms:[496,512,[],\"f3e9\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"],safari:[512,512,[],\"f267\",\"M236.9 256.8c0-9.1 6.6-17.7 16.3-17.7 8.9 0 17.4 6.4 17.4 16.1 0 9.1-6.4 17.7-16.1 17.7-9 0-17.6-6.7-17.6-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-26.6 0c0-122.3-99.1-221.4-221.4-221.4S34.6 133.7 34.6 256 133.7 477.4 256 477.4 477.4 378.3 477.4 256zm-72.5 96.6c0 3.6 13 10.2 16.3 12.2-27.4 41.5-69.8 71.4-117.9 83.3l-4.4-18.5c-.3-2.5-1.9-2.8-4.2-2.8-1.9 0-3 2.8-2.8 4.2l4.4 18.8c-13.3 2.8-26.8 4.2-40.4 4.2-36.3 0-72-10.2-103-29.1 1.7-2.8 12.2-18 12.2-20.2 0-1.9-1.7-3.6-3.6-3.6-3.9 0-12.2 16.6-14.7 19.9-41.8-27.7-72-70.6-83.6-119.6l19.1-4.2c2.2-.6 2.8-2.2 2.8-4.2 0-1.9-2.8-3-4.4-2.8L62 294.5c-2.5-12.7-3.9-25.5-3.9-38.5 0-37.1 10.5-73.6 30.2-104.9 2.8 1.7 16.1 10.8 18.3 10.8 1.9 0 3.6-1.4 3.6-3.3 0-3.9-14.7-11.3-18-13.6 28.2-41.2 71.1-70.9 119.8-81.9l4.2 18.5c.6 2.2 2.2 2.8 4.2 2.8s3-2.8 2.8-4.4L219 61.7c12.2-2.2 24.6-3.6 37.1-3.6 37.1 0 73.3 10.5 104.9 30.2-1.9 2.8-10.8 15.8-10.8 18 0 1.9 1.4 3.6 3.3 3.6 3.9 0 11.3-14.4 13.3-17.7 41 27.7 70.3 70 81.7 118.2l-15.5 3.3c-2.5.6-2.8 2.2-2.8 4.4 0 1.9 2.8 3 4.2 2.8l15.8-3.6c2.5 12.7 3.9 25.7 3.9 38.7 0 36.3-10 72-28.8 102.7-2.8-1.4-14.4-9.7-16.6-9.7-2.1 0-3.8 1.7-3.8 3.6zm-33.2-242.2c-13 12.2-134.2 123.7-137.6 129.5l-96.6 160.5c12.7-11.9 134.2-124 137.3-129.3l96.9-160.7z\"],sass:[640,512,[],\"f41e\",\"M551.1 291.9c-22.4.1-41.8 5.5-58 13.5-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-3.8 11.1-5.3 19.1-2.3 11.7-25.8 53.5-39.1 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-2.7 11.4-5.3 19.1-2.6 7.7-33.9 77.3-42.1 95.4-4.2 9.2-7.8 16.6-10.4 21.6s-.2.3-.4.9c-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2-.8 0-1.4 2-1.4 2s10.1-42.4-19.4-42.4c-18.4 0-44 20.2-56.6 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.8-38.2-101.9-65.2-99.1-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.4-35.4 189.9-5.6 19.4 42.5-41.9 121.6-143.7 133-38.8 4.3-59.2-10.7-64.3-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.8 28.9 18.7 6.1 64.2 9.5 119.2-11.8C367 196.5 415.1 130.2 401 74.7 386.6 18.3 293.1-.2 204.6 31.2 151.9 49.9 94.9 79.3 53.9 117.6 5.2 163.2-2.6 202.9.6 219.5c11.4 58.9 92.6 97.3 125.1 125.7-1.6.9-3.1 1.7-4.5 2.5-16.3 8.1-78.2 40.5-93.7 74.7-17.5 38.8 2.9 66.6 16.3 70.4 41.8 11.6 84.6-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.3-4.9 16.4-9.4 23.5-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.5 5 15.4 5 13.8 0 20-11.4 26.9-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.4 0 18.8-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.6-46 16.2-31.8 31.7-71.5 31.7-71.5s1.4 9.7 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2s0 .1.1.2c-3 4-6.4 8.3-9.9 12.5-12.8 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.7 2.5 11.5-.8 19.6-3.6 23.5-5.4 6.2-2.2 13.4-5.7 20.2-10.6 12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5 19.8-28.9 35.1-60.6 35.1-60.6s1.4 9.7 6.2 25.8c2.4 8.1 7.1 17 11.4 25.7-18.6 15.1-30.1 32.6-34.1 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5 6.5-2.2 14.3-5.7 21.6-11.1 12.5-9.2 24.6-22.1 23.8-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.1-10.2 62.1-7.2 55.7 6.5 66.6 41.3 64.5 55.8-2.1 14.6-13.8 22.6-17.7 25-3.9 2.4-5.1 3.3-4.8 5.1.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.2-11.8 30.3-38.7 1.6-34-31.1-71.4-89-71.1zM121.8 436.6c-18.4 20.1-44.2 27.7-55.3 21.3C54.6 451 59.3 421.4 82 400c13.8-13 31.6-25 43.4-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.3 30.4.3 57.2-19.1 78.3zm134.4-91.4c-6.4 15.7-19.9 55.7-28.1 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.1-11.3 21.2-14.9 23.8-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.9-13.9 0 .5.1 1 .1 1.6-.1 17.9-17.3 30-25.1 34.8zm85.6-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.6-15.3 19-24.5 1.2 3.8 1.9 7.4 1.9 10.8-.1 22.5-16.2 30.9-25.9 34.4z\"],schlix:[448,512,[],\"f3ea\",\"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"],scribd:[384,512,[],\"f28a\",\"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"],searchengin:[460,512,[],\"f3eb\",\"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"],sellcast:[448,512,[],\"f2da\",\"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"],sellsy:[640,512,[],\"f213\",\"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"],servicestack:[496,512,[],\"f3ec\",\"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"],shirtsinbulk:[448,512,[],\"f214\",\"M395.208 221.583H406v33.542h-10.792v-33.542zm0-9.625H406v-33.542h-10.792v33.542zm0 86.333H406V264.75h-10.792v33.541zM358.75 135.25h-33.542v10.5h33.542v-10.5zm36.458 206.208H406v-33.542h-10.792v33.542zM311.5 135.25h-33.542v10.5H311.5v-10.5zm-47.25 0H231v10.5h33.25v-10.5zm-47.25 0h-33.25v10.5H217v-10.5zm178.208 33.542H406V135.25h-33.542v10.5h22.75v23.042zm-255.792 259l30.625 13.417 4.375-9.917-30.625-13.417-4.375 9.917zM179.083 445l30.334 13.708 4.374-9.916-30.333-13.417-4.375 9.625zm216.125-60.375H406v-33.542h-10.792v33.542zm-334.833 8.167L91 406.208l4.375-9.624-30.625-13.709-4.375 9.917zm39.666 17.499l30.625 13.417 4.375-9.917-30.625-13.416-4.375 9.916zm132.417 38.501l4.375 9.916L267.459 445l-4.375-9.625-30.626 13.417zm118.417-52.208l4.375 9.624 30.624-13.416-4.374-9.917-30.625 13.709zM311.5 413.791l4.375 9.917 30.625-13.417-4.374-9.916-30.626 13.416zm-39.667 17.501l4.375 9.917 30.625-13.417-4.375-9.917-30.625 13.417zM311.5 46.583h-33.542v10.5H311.5v-10.5zm94.209 0h-33.251v10.5h33.251v-10.5zm-188.709 0h-33.25v10.5H217v-10.5zm141.75 0h-33.542v10.5h33.542v-10.5zm-94.5 0H231v10.5h33.25v-10.5zM448 3.708v406l-226.334 98.584L0 409.708v-406h448zm-29.166 116.958H29.166V390.75l192.792 85.75 196.875-85.75V120.666zm0-87.791H29.166V91.5h389.667V32.875zM75.542 46.583H42.291v10.5h33.251v-10.5zm94.5 0H136.5v10.5h33.542v-10.5zm-47.251 0H89.25v10.5h33.542v-10.5zm7.584 236.542c0-50.167 41.125-91.292 91.292-91.292 50.458 0 91.292 41.125 91.292 91.292 0 50.458-40.833 91.292-91.292 91.292-50.167-.001-91.292-40.834-91.292-91.292zm120.75 18.084c0 13.125-23.917 14.291-32.666 14.291-12.25 0-29.75-2.625-35.875-14.875h-.875L172.666 319c14.876 9.333 29.167 12.25 47.25 12.25 19.542 0 51.042-5.833 51.042-31.209 0-48.125-78.458-16.333-78.458-37.916 0-13.125 20.708-14.875 29.75-14.875 10.791 0 29.166 3.208 35.583 13.124h.875l8.751-16.916c-15.167-6.125-27.417-11.959-44.334-11.959-20.125 0-49.583 6.417-49.583 31.792 0 44.334 77.583 11.959 77.583 37.918zM122.791 135.25H89.25v10.5h33.542v-10.5zm-69.999 10.5h22.75v-10.5H42v33.542h10.792V145.75zm0 32.666H42v33.542h10.792v-33.542zm117.25-43.166H136.5v10.5h33.542v-10.5zm-117.25 86.333H42v33.542h10.792v-33.542zm0 86.334H42v33.542h10.792v-33.542zm0-43.167H42v33.542h10.792V264.75zm0 86.333H42v33.542h10.792v-33.542z\"],shopware:[495,512,[],\"f5b5\",\"M395.5 455.27c-42.95 31.79-93.95 48.59-147.48 48.59-137.21 0-248.02-111-248.02-248 0-137.19 111.04-248 248.02-248 61.3 0 120.14 22.55 165.68 63.5 2.62 2.36.58 6.64-2.86 6.18-17.67-2.43-36.75-3.66-56.71-3.66-129.36 0-222.4 53.47-222.4 155.35 0 109.04 92.13 145.88 176.83 178.73 33.64 13.04 65.4 25.36 86.96 41.59 1.9 1.44 1.89 4.31-.02 5.72zm99.46-222.32c-.08-.94-.55-1.83-1.27-2.44-51.76-42.96-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62.01 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93 1.88 1.05 4.26.19 5.05-1.82 18.89-48.39 17.94-90.23 15.93-113.31z\"],simplybuilt:[512,512,[],\"f215\",\"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"],sistrix:[448,512,[],\"f3ee\",\"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"],sith:[448,512,[],\"f512\",\"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"],skyatlas:[640,512,[],\"f216\",\"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"],skype:[448,512,[],\"f17e\",\"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"],slack:[448,512,[],\"f198\",\"M244.2 217.5l19.3 57.7-59.8 20-19.3-57.7 59.8-20zm41.4 243.7C131.6 507.4 65 471.6 18.8 317.6S8.4 97 162.4 50.8C316.4 4.6 383 40.4 429.2 194.4c46.2 154 10.4 220.6-143.6 266.8zM366.2 265c-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-19.3-57.7 29-9.7c12.2-3.9 18.6-17.2 14.7-29.4-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-59.8 20.1-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l19.3 57.7-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 59.8-20.1 10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 29-9.7c12.2-4.2 18.6-17.5 14.7-29.6z\"],\"slack-hash\":[448,512,[],\"f3ef\",\"M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z\"],slideshare:[512,512,[],\"f1e7\",\"M249.429 211.436c0 31.716-27.715 57.717-61.717 57.717-34.001 0-61.716-26.001-61.716-57.717 0-32.001 27.715-57.716 61.716-57.716 34.001 0 61.717 25.715 61.717 57.716zm254.294 50.002c-18.286 22.573-53.144 50.288-106.289 72.003C453.722 525.163 260 555.735 263.143 457.446c0 1.714-.286-52.859-.286-93.432-4.285-.858-8.571-2-13.714-3.143 0 40.858-.286 98.289-.286 96.575C252 555.735 58.278 525.163 114.566 333.441c-53.145-21.715-88.003-49.43-106.29-72.003-9.143-13.714.858-28.287 16.001-17.715 2 1.428 4.285 2.857 6.285 4.285V49.716C30.563 22.287 51.135 0 76.565 0h359.157c25.429 0 46.002 22.287 46.002 49.716v198.293l6-4.285c15.143-10.573 25.143 4 15.999 17.714zm-46.572-189.15c0-32.858-10.572-45.716-40.859-45.716H98.566c-31.716 0-40.573 10.858-40.573 45.716v192.293c67.717 35.43 125.72 29.144 157.435 28.001 13.429-.286 22.001 2.286 27.144 7.715 1.689 1.687 10.023 9.446 20.287 17.143 1.143-15.715 10.001-25.715 33.716-24.858 32.287 1.428 91.718 7.715 160.577-29.716V72.288zM331.146 153.72c-34.002 0-61.716 25.715-61.716 57.716 0 31.716 27.715 57.717 61.716 57.717 34.287 0 61.716-26.001 61.716-57.717 0-32.001-27.429-57.716-61.716-57.716z\"],snapchat:[496,512,[],\"f2ab\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z\"],\"snapchat-ghost\":[512,512,[],\"f2ac\",\"M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z\"],\"snapchat-square\":[448,512,[],\"f2ad\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z\"],soundcloud:[640,512,[],\"f1be\",\"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\"],speakap:[448,512,[],\"f3f3\",\"M352 32H96C43.2 32 0 75.2 0 128v256c0 52.8 43.2 96 96 96h256c52.8 0 96-43.2 96-96V128c0-52.8-43.2-96-96-96zM221 382.9c-39.6 0-81.9-17.8-81.9-53.7V302H179v17.8c0 15.1 19.5 24.5 41.9 24.5 24.2 0 41.3-10.4 41.3-29.5 0-23.8-27.2-31.9-54.7-42.6-31.9-12.4-63.1-26.2-63.1-69.1 0-48 38.6-66.4 79.9-66.4 37.6 0 75.5 14.1 75.5 41.9v31.2h-39.9v-16.1c0-12.1-17.8-18.5-35.6-18.5-19.5 0-35.6 8.1-35.6 26.2 0 22.1 22.5 29.2 47 38.9 35.9 12.4 71.1 27.2 71.1 71.5.1 48.6-40.8 71.1-85.8 71.1z\"],spotify:[496,512,[],\"f1bc\",\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"],squarespace:[512,512,[],\"f5be\",\"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"],\"stack-exchange\":[448,512,[],\"f18d\",\"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"],\"stack-overflow\":[384,512,[],\"f16c\",\"M293.7 300l-181.2-84.5 16.7-36.5 181.3 84.7-16.8 36.3zm48-76L188.2 95.7l-25.5 30.8 153.5 128.3 25.5-30.8zm39.6-31.7L262 32l-32 24 119.3 160.3 32-24zM290.7 311L95 269.7 86.8 309l195.7 41 8.2-39zm31.6 129H42.7V320h-40v160h359.5V320h-40v120zm-39.8-80h-200v39.7h200V360z\"],staylinked:[440,512,[],\"f3f5\",\"M201.6 127.4c4.1-3.2 10.3-3 13.8.5l170 167.3-2.7-2.7 44.3 41.3c3.7 3.5 3.3 9-.7 12.2l-198 163.9c-9.9 7.6-17.3.8-17.3.8L2.3 314.6c-3.5-3.5-3-9 1.2-12.2l45.8-34.9c4.2-3.2 10.4-3 13.9.5l151.9 147.5c3.7 3.5 10 3.7 14.2.4l93.2-74c4.1-3.2 4.5-8.7.9-12.2l-84-81.3c-3.6-3.5-9.9-3.7-14-.5l-.1.1c-4.1 3.2-10.4 3-14-.5l-68.1-64.3c-3.5-3.5-3.1-9 1.1-12.2l57.3-43.6m14.8 257.3c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7\"],steam:[496,512,[],\"f1b6\",\"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"],\"steam-square\":[448,512,[],\"f1b7\",\"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\"],\"steam-symbol\":[448,512,[],\"f3f6\",\"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"],\"sticker-mule\":[576,512,[],\"f3f7\",\"M353.1 509.8c-5.9 2.9-32.1 3.2-36.5-.5-4.1-3-2.2-11.9-1.5-15 2.2-15-2.5-7.9-9.8-11.5-3.1-1.5-4.1-5.5-4.6-10-.5-1.5-1-2.5-1.5-3.5-1.7-10.7 6.8-33.6 8.2-43.4 4.9-23.7-.7-37.2 1.5-46.9 3.7-16.2 4.1-3.5 4.1-29.9-1.4-25.9 3.3-36.9.5-38.9-14.8 0-64.3 10.7-112.2 2-46.1-8.9-59.4-29-65.4-30.9-10.3-4.5-23.2.5-27.3 7-.1.1-35 70.6-39.6 87.8-6.2 20.5-.5 47.4 4.1 66.8 0 .1 4.5 14.6 10.3 19.5 2.1 1.5 5.1 2.5 7.2 4.5 2.8 2.7 9.4 15.2 9.8 16 2.6 4.5 3.6 8-1.5 10.5-3.6 2-9.3 2.5-14.4 2.5-2.6.5-1.5 3.5-3.1 5-2.9 2.8-20.7 6.1-29.9 2.5-2.6-1-5.7-3-6.2-5-1.5-4 2.1-9-1-12.5-4.5-2.9-13.1-2-17-12-2.2-5.4-2.6-7.6-2.6-49.4 0-9.7-5.9-38.7-8.2-46.9-1.5-5.5-1.5-11.5 0-16 .3-.9 4.1-4.6 4.1-13-1-1.5-4.6-.5-5.1-1.5-10.4-80.6-5.9-79-7.7-98.3-1.5-16-10.9-43.9-6.7-64.3.5-2.4 3.4-21 24.2-38.9 31-26.7 48.4-38.3 159-11.5 1.1.4 66.3 21.1 110.7-9 15.5-11.3 28.8-11.3 35.5-16 .1-.1 61.7-52.1 87-65.3 47.2-29.4 69.9-16.7 75.1-18 4.7-1 13.4-25.8 17-25.8 5.5 0 1.6 20.2 3.6 25.9.5 2 3.6 5 6.2 5 2.3 0 1.7-.8 10.3-5 8.4-5.4 14.9-17.6 20.6-17 11.7 1.6-19 41.6-19 46.9 0 2 .2.8 4.6 9.5 2.6 5.5 4.6 13.5 6.2 20 8.3 29.7 5.7 14.6 13.4 36.9 20.2 50.1 20.6 45.2 20.6 52.9 0 7.5-4.1 11-7.2 16.5-1.5 3-4.6 7.5-7.2 8-2.7.7 7-1.5-13.4 2.5-7.2 1-13.4-4.5-14.9-9.5-1.6-4.7 2.8-10.1-11.8-22.9-10.3-10-21.1-11.3-31.9-17-9.8-5.7-11.9 1-18 8-18 22.9-34 46.9-52 69.8-11.8 15-24.2 30.4-33.5 47.4-3.9 6.8-9.5 28.1-10.3 29.9-6.2 17.7-5.5 25.8-16.5 68.3-3.1 10-5.7 21.4-8.7 32.4-2.2 6.8-7.4 49.3-.5 59.4 2.1 3.5 8.7 4.5 11.3 8 .1.1 9.6 18.2 9.3 20 0 6.1-9.4 5.6-11.3 6.5-4.8 2.9-3.8 5.9-6.4 7.4\"],strava:[369,512,[],\"f428\",\"M301.6 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220h-67.6zM151.4 0L0 292h89.2l62.2-116.1L213.1 292h88.5L151.4 0z\"],stripe:[640,512,[],\"f429\",\"M640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9m-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4h-45.9zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7m-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8M346.4 124v36.2l-44.6 9.5v-36.2l44.6-9.5m-44.5 59.2h44.6v153.2h-44.6V183.2zm-47.8 13.1c10.4-19.1 31.1-15.2 37.1-13.1V224c-5.7-1.8-23.4-4.5-33.9 9.3v103.1H213V183.2h38.4l2.7 13.1m-89-13.1h33.7V221h-33.7v63.2c0 26.2 28 18 33.7 15.7v33.8c-5.9 3.2-16.6 5.9-31.2 5.9-26.3 0-46.1-17-46.1-43.3l.2-142.4 43.3-9.2.1 38.5zM44.9 228.3c0 20 67.9 10.5 67.9 63.4 0 32-25.4 47.8-62.3 47.8-15.3 0-32-3-48.5-10.1v-40c14.9 8.1 33.9 14.2 48.6 14.2 9.9 0 17-2.7 17-10.9 0-21.2-67.5-13.2-67.5-62.4 0-31.4 24-50.2 60-50.2 14.7 0 29.4 2.3 44.1 8.1V230c-13.5-7.3-30.7-11.4-44.2-11.4-9.3.1-15.1 2.8-15.1 9.7\"],\"stripe-s\":[362,512,[],\"f42a\",\"M144.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C287.3 7.2 240.1 0 192.8 0 77.1 0 0 60.4 0 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5c53 22.8 106.8 32.4 156 32.4 118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9\"],studiovinari:[512,512,[],\"f3f8\",\"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"],stumbleupon:[512,512,[],\"f1a4\",\"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"],\"stumbleupon-circle\":[496,512,[],\"f1a3\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"],superpowers:[448,512,[],\"f2dd\",\"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"],supple:[640,512,[],\"f3f9\",\"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"],teamspeak:[511,512,[],\"f4f9\",\"M.82 237.82c2.36-15.52 10.69-27.04 24.88-34.03 3.5-1.85 5.65-3.5 6.37-7.81 6.17-33.41 19.53-63.94 39.37-91.59 2.36-3.19 4.01-5.35 1.03-9.35-3.7-5.35-1.03-10.18 2.98-14.49 28.06-31.87 61.88-55.1 101.98-67.44 95.81-29.4 180.1-9.35 252.37 60.45 6.68 6.37 15.52 12.85 6.99 24.36-1.34 1.85 1.03 3.5 2.16 5.04 20.66 28.06 34.23 59.42 40.4 93.65.82 3.7 2.98 5.04 5.86 6.37 17.37 8.84 25.7 23.34 26.01 42.25 0 17.17 1.85 34.54-1.03 51.71-4.01 24.67-29.19 41.74-53.25 36.7-7.2-1.64-9.35-7.2-9.35-14.19 0-28.06.82-56.44 0-84.6-1.85-75.76-36.18-132.81-102.28-169.41C234.28 4.98 92.11 72.42 67.54 196.91c-6.06 30.42-1.74 48.27-3.7 125.82-.31 7.2-4.32 11.2-12.03 11.51C20.97 335.58 0 316.05 0 285.21v-20.87m221.74 106.81c11.82-4.32 20.05-11.82 22.51-24.36 2.36-12.34-12.03-30.02-32.38-48.73-20.87-19.22-48.22-39.06-63.43-46.57-21.69-12.03-41.74-1.85-46.26 22.72-5.04 26.21 0 51.4 14.49 73.91 10.18 15.52 25.39 22.72 43.38 24.05 11.62.62 52.54 2.16 61.69-1.02m129.83 5.55c36.5 2.81 59.33-28.55 58.39-60.45-2.14-45.17-66.17-16.48-87.79-8.02-73.16 28.14-45.05 54.92-22.2 60.75m149.26-1.33c-2.98-2.36-7.2-1.03-8.33 2.36-8.02 25.39-44.72 112.46-172.08 121.51-149.67 10.49 80.29 43.59 145.36-6.37 22.72-17.37 47.6-35.05 46.57-85.43-.32-10.07-4.84-26.72-11.52-32.07\"],telegram:[496,512,[],\"f2c6\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z\"],\"telegram-plane\":[448,512,[],\"f3fe\",\"M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z\"],\"tencent-weibo\":[384,512,[],\"f1d5\",\"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"],themeco:[441,512,[],\"f5c6\",\"M199.74 12.29c9.74-5.64 25.59-5.73 35.39-.21l188.13 105.95c9.81 5.52 17.76 19.14 17.76 30.38v213.87c0 11.26-7.93 24.89-17.71 30.46L235.09 499.88c-9.78 5.57-25.58 5.48-35.29-.21L17.58 392.95C7.87 387.26 0 373.52 0 362.27V148.41c0-11.26 7.9-24.96 17.63-30.59L199.74 12.29zM123.54 209c-15.69 0-31.39.14-47.08.14v99.87h18.83v-29.39h28.25c48.94 0 48.79-70.62 0-70.62zm137.96 98.73l-30.25-34.1c36.4-7.39 34.26-64.21-10.7-64.49-15.84 0-31.67-.14-47.51-.14v100.01h18.83v-33.38H210l29.1 33.38h22.4v-1.28zm-40.94-81.04c22.98 0 22.9 31.96 0 31.96h-28.68v-31.96h28.68zm-94.07-1.57c20.85 0 20.78 38.24 0 38.24H94.68v-38.23l31.81-.01zm189.65-17.97c-67.4 0-69.86 104.15 0 104.15 68.39-.01 68.33-104.15 0-104.15zm0 17.12c43.43 0 44.1 69.76 0 69.76-44.12 0-43.74-69.76 0-69.76z\"],themeisle:[512,512,[],\"f2b2\",\"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"],\"trade-federation\":[496,512,[],\"f513\",\"M202.45 108.42v81.61H38.94l48.22 61.91h114.73v196.75h64.61V252.96h83.27v-62.69h-83.18V171.1h145.62v-62.68H202.45zm4.86 6h197.77v50.68H259.44v30.93h83.18v50.93h-83.26v195.73h-52.73V245.94H89.86l-39.95-49.91h157.4v-81.61zM247.99 8.8C111.03 8.8 0 119.83 0 256.8s111.03 248 247.99 248S496 393.76 496 256.8 384.96 8.8 247.99 8.8zm.02 13.24c129.66 0 234.76 105.12 234.76 234.78s-105.1 234.76-234.76 234.76S13.23 386.47 13.23 256.81 118.35 22.04 248.01 22.04zm0 7.89c-125.3 0-226.89 101.57-226.89 226.87s101.59 226.89 226.89 226.89S474.88 382.1 474.88 256.8 373.31 29.93 248.01 29.93zm-.02 13.3c117.95 0 213.56 95.62 213.56 213.56s-95.62 213.56-213.56 213.56S34.43 374.75 34.43 256.8 130.04 43.23 247.99 43.23zm-73.32 104.8l15.66 18.05-22.16-9.45-12.33 20.47 2.15-23.99-23.28-5.4 23.48-5.37-2.06-23.81 12.37 20.67 22.01-9.32-15.84 18.15zm-47.14-46.54l8.01 12.4 12.69-5.86-9.32 11.45 9.5 10.25-13.77-5.32-6.82 12.2.81-14.74-13.71-2.71 14.27-3.78-1.66-13.89zm250.77 75.59l11.99 19.56 20.88-9.11-14.9 17.45 15.11 17.04-21.2-8.78-11.54 19.64 1.8-22.87-22.24-4.9 22.31-5.36-2.21-22.67zm-107.05 98.45l13.86-3.22-1.28-14.17 7.35 12.18 13.08-5.59-9.31 10.75 9.36 10.71-13.1-5.54-7.29 12.21 1.22-14.17-13.89-3.16zm-125.43 6.5l23.73-3.87-1.73-24.53 11.01 21.38 22.79-9.22-16.93 17.08 15.81 18.83-21.47-10.82-13.02 20.86 3.66-23.77-23.85-5.94zm63.44-165.66v81.61H54.16l36.72 46.01h117.7v196.75h48.82V245.01h83.27v-47.03H257.4v-34.83h145.73v-46.78H209.26zm10.86 11.2h171.8v24.36H246.88v56.23h82.93v23.94h-82.93v197.42h-26.76V232.1H96.31l-20.09-23.94h143.9v-80.59z\"],trello:[448,512,[],\"f181\",\"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zM194.9 371.4c0 14.8-12 26.9-26.9 26.9H85.1c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9H168c14.8 0 26.9 12 26.9 26.9v254.3zm194.9-112c0 14.8-12 26.9-26.9 26.9H280c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v142.3z\"],tripadvisor:[576,512,[],\"f262\",\"M166.4 280.521c0 13.236-10.73 23.966-23.966 23.966s-23.966-10.73-23.966-23.966 10.73-23.966 23.966-23.966 23.966 10.729 23.966 23.966zm264.962-23.956c-13.23 0-23.956 10.725-23.956 23.956 0 13.23 10.725 23.956 23.956 23.956 13.23 0 23.956-10.725 23.956-23.956-.001-13.231-10.726-23.956-23.956-23.956zm89.388 139.49c-62.667 49.104-153.276 38.109-202.379-24.559l-30.979 46.325-30.683-45.939c-48.277 60.39-135.622 71.891-197.885 26.055-64.058-47.158-77.759-137.316-30.601-201.374A186.762 186.762 0 0 0 0 139.416l90.286-.05a358.48 358.48 0 0 1 197.065-54.03 350.382 350.382 0 0 1 192.181 53.349l96.218.074a185.713 185.713 0 0 0-28.352 57.649c46.793 62.747 34.964 151.37-26.648 199.647zM259.366 281.761c-.007-63.557-51.535-115.075-115.092-115.068C80.717 166.7 29.2 218.228 29.206 281.785c.007 63.557 51.535 115.075 115.092 115.068 63.513-.075 114.984-51.539 115.068-115.052v-.04zm28.591-10.455c5.433-73.44 65.51-130.884 139.12-133.022a339.146 339.146 0 0 0-139.727-27.812 356.31 356.31 0 0 0-140.164 27.253c74.344 1.582 135.299 59.424 140.771 133.581zm251.706-28.767c-21.992-59.634-88.162-90.148-147.795-68.157-59.634 21.992-90.148 88.162-68.157 147.795v.032c22.038 59.607 88.198 90.091 147.827 68.113 59.615-22.004 90.113-88.162 68.125-147.783zm-326.039 37.975v.115c-.057 39.328-31.986 71.163-71.314 71.106-39.328-.057-71.163-31.986-71.106-71.314.057-39.328 31.986-71.163 71.314-71.106 39.259.116 71.042 31.94 71.106 71.199zm-24.512 0v-.084c-.051-25.784-20.994-46.645-46.778-46.594-25.784.051-46.645 20.994-46.594 46.777.051 25.784 20.994 46.645 46.777 46.594 25.726-.113 46.537-20.968 46.595-46.693zm313.423 0v.048c-.02 39.328-31.918 71.194-71.247 71.173s-71.194-31.918-71.173-71.247c.02-39.328 31.918-71.194 71.247-71.173 39.29.066 71.121 31.909 71.173 71.199zm-24.504-.008c-.009-25.784-20.918-46.679-46.702-46.67-25.784.009-46.679 20.918-46.67 46.702.009 25.784 20.918 46.678 46.702 46.67 25.765-.046 46.636-20.928 46.67-46.693v-.009z\"],tumblr:[320,512,[],\"f173\",\"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"],\"tumblr-square\":[448,512,[],\"f174\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\"],twitch:[448,512,[],\"f1e8\",\"M40.1 32L10 108.9v314.3h107V480h60.2l56.8-56.8h87l117-117V32H40.1zm357.8 254.1L331 353H224l-56.8 56.8V353H76.9V72.1h321v214zM331 149v116.9h-40.1V149H331zm-107 0v116.9h-40.1V149H224z\"],twitter:[512,512,[],\"f099\",\"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"],\"twitter-square\":[448,512,[],\"f081\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z\"],typo3:[433,512,[],\"f42b\",\"M330.8 341c-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9 0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C0 246 106.8 480 184.1 480c36.3 0 97.3-59.5 146.7-139M294.5 32c71.8 0 138.8 11.6 138.8 52.5 0 82.6-52.5 182.3-78.8 182.3-47.9 0-101.7-132.1-101.7-198.5 0-30.9 11.6-36.3 41.7-36.3\"],uber:[448,512,[],\"f402\",\"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"],uikit:[448,512,[],\"f403\",\"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"],uniregistry:[384,512,[],\"f404\",\"M281.1 220.1H384v-14.8H281.1v14.8zm0-37.1H384v-12.4H281.1V183zm0 74.2H384v-17.3H281.1v17.3zm-157.7 86.7H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8m145.7-12.4h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3m-41.5 37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8M384 32H281.1v2.5H384V32zM192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480m89.1-334.2H384V136H281.1v9.8zm0-37.1H384v-7.4H281.1v7.4zm0-37.1H384v-4.9H281.1v4.9zm-178.2 99H0V183h102.9v-12.4zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2m64.1-118.8v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4m178.2 0c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1v12.4zm-203 156h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7m24.8-376.2H0v4.9h102.9v-4.9zm0-34.7H0v2.5h102.9V32zm0 173.3H0v14.8h102.9v-14.8zm0 34.6H0v17.3h102.9v-17.3zm0-103.9H0v9.9h102.9V136zm0-34.7H0v7.4h102.9v-7.4zm2.8 207.9H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3\"],untappd:[640,512,[],\"f405\",\"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"],usb:[640,512,[],\"f287\",\"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"],ussunnah:[512,512,[],\"f407\",\"M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z\"],vaadin:[448,512,[],\"f408\",\"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"],viacoin:[384,512,[],\"f237\",\"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"],viadeo:[448,512,[],\"f2a9\",\"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"],\"viadeo-square\":[448,512,[],\"f2aa\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\"],viber:[512,512,[],\"f409\",\"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"],vimeo:[448,512,[],\"f40a\",\"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"],\"vimeo-square\":[448,512,[],\"f194\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\"],\"vimeo-v\":[448,512,[],\"f27d\",\"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"],vine:[384,512,[],\"f1ca\",\"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"],vk:[576,512,[],\"f189\",\"M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z\"],vnv:[640,512,[],\"f40b\",\"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"],vuejs:[448,512,[],\"f41f\",\"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"],weebly:[512,512,[],\"f5cc\",\"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"],weibo:[512,512,[],\"f18a\",\"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"],weixin:[576,512,[],\"f1d7\",\"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"],whatsapp:[448,512,[],\"f232\",\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"],\"whatsapp-square\":[448,512,[],\"f40c\",\"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\"],whmcs:[448,512,[],\"f40d\",\"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"],\"wikipedia-w\":[640,512,[],\"f266\",\"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"],windows:[448,512,[],\"f17a\",\"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"],wix:[640,512,[],\"f5cf\",\"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"],\"wolf-pack-battalion\":[456,512,[],\"f514\",\"M239.73 471.53l10.56 15.84 5.28-12.32 5.28 7.04V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05 27.87 3.34 53.94 10.58 63.34 54.1l-30.35 8.36c11.15 23.04 17.01 46.76 13.2 72.14L384 313.18l-6.16 33.43-18.47-7.04-8.8 33.43-19.35-7.04 26.39 21.11 8.8-28.15 24.63 5.28 7.04-35.63 26.39 14.52c.25-20.02 6.97-58.06-8.8-84.45l26.39 5.28c3.99-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 1.96-19.87 17.45-42.62 43.11-49.7-43.99 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.47 22.87-89.73 65.1-93.25 147.79l-58.06 38.71-3.52 93.25 107.33-59.82 7.04 7.04-17.59 3.52-43.99 38.71-15.84-5.28-28.15 49.26-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-43.99-38.71-17.59-3.52 7.04-7.04 107.33 59.82-3.52-93.25-58.06-38.71C157.03 65.1 107.77 22.87 67.3 0c-17.54 61.12-4.4 118.76 0 130.2 14.96-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9C29.94 160.06.44 191.78 0 216.85l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7.04 35.63 24.63-5.28 8.8 28.15 26.39-21.11-19.34 7.05-8.8-33.43-18.47 7.04-6.16-33.43-27.27 7.04c-3.82-25.38 2.05-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.91l5.28-7.04 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95.01l-15.84-10.56c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.26-.27 13.88-3.51 22.88zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7.04 8.24-7.9 15.55-16.27 22.87-24.63zm24.63 5.28c-.02-13.43-2.05-24.21-5.28-33.43-5.38 9.09-11.23 18.18-18.47 27.27l23.75 6.16zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-11.99 6.65-28.14 7.04-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 43.99-14.08-10.6-18.95-27.22-25.52-45.75-28.15zM137.68 376.52l15.84-10.56c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7.04-8.24-7.9-15.55-16.27-22.87-24.63zm-24.64 5.28c.02-13.43 2.05-24.21 5.28-33.43 5.38 9.09 11.23 18.18 18.47 27.27l-23.75 6.16zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 36.95-10.56-5.05-11.99-6.65-28.14-7.04-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-43.99-14.08 10.61-18.95 27.22-25.52 45.75-28.15z\"],wordpress:[512,512,[],\"f19a\",\"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"],\"wordpress-simple\":[512,512,[],\"f411\",\"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"],wpbeginner:[512,512,[],\"f297\",\"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"],wpexplorer:[512,512,[],\"f2de\",\"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"],wpforms:[448,512,[],\"f298\",\"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"],xbox:[512,512,[],\"f412\",\"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"],xing:[384,512,[],\"f168\",\"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"],\"xing-square\":[448,512,[],\"f169\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\"],\"y-combinator\":[448,512,[],\"f23b\",\"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"],yahoo:[448,512,[],\"f19e\",\"M252 292l4 220c-12.7-2.2-23.5-3.9-32.3-3.9-8.4 0-19.2 1.7-32.3 3.9l4-220C140.4 197.2 85 95.2 21.4 0c11.9 3.1 23 3.9 33.2 3.9 9 0 20.4-.8 34.1-3.9 40.9 72.2 82.1 138.7 135 225.5C261 163.9 314.8 81.4 358.6 0c11.1 2.9 22 3.9 32.9 3.9 11.5 0 23.2-1 35-3.9C392.1 47.9 294.9 216.9 252 292z\"],yandex:[256,512,[],\"f413\",\"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"],\"yandex-international\":[320,512,[],\"f414\",\"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"],yelp:[384,512,[],\"f1e9\",\"M136.9 328c-1 .3-109.2 35.7-115.8 35.7-15.2-.9-18.5-16.2-19.9-31.2-1.5-14.2-1.4-29.8.3-46.8 1.9-18.8 5.5-45.1 24.2-44 4.8 0 67.1 25.9 112.7 44.4 17.1 6.8 18.6 35.8-1.5 41.9zm57.9-113.9c1.8 38.2-25.5 48.5-47.2 14.3L41.3 60.4c-1.5-6.6.3-12.4 5.3-17.4C62.2 26.5 146 3.2 168.1 8.9c7.5 1.9 12.1 6.1 13.8 12.6 1.3 8.3 11.5 167.4 12.9 192.6zm-1.4 164.8c0 4.6.2 116.4-1.7 121.5-2.3 6-7 9.7-14.3 11.2-10.1 1.7-27.1-1.9-51-10.7-22-8.1-56.7-21.5-49.3-42.5 2.8-6.9 51.4-62.8 77.3-93.6 12-15.2 39.8-5.5 39 14.1zm180.2-117.8c-5.6 3.7-110.8 28.2-118.1 30.6l.3-.6c-18.1 4.7-35.4-18.5-23.3-34.6 3.7-3.7 65.9-92.4 72.8-97 5.2-3.6 11.3-3.8 18.3-.6 18.4 8.8 55.1 63.1 57.4 84.6-.1 2.9 1.2 11.7-7.4 17.6zm10.1 130.7c-2.7 20.6-44.5 73.4-63.8 81-6.9 2.6-12.9 2-17.7-2-5-3.5-61.8-97.1-64.9-102.3-10.9-16.2 6.8-39.8 25.6-33.2 0 0 110.5 35.7 114.7 39.4 5.2 4.1 7.2 9.8 6.1 17.1z\"],yoast:[448,512,[],\"f2b1\",\"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"],youtube:[576,512,[],\"f167\",\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"],\"youtube-square\":[448,512,[],\"f431\",\"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\"]};!function(c){try{c()}catch(c){if(!m)throw c}}(function(){!function c(l,z){var h=Object.keys(z).reduce(function(c,l){var h=z[l];return h.icon?c[h.iconName]=h.icon:c[l]=h,c},{});\"function\"==typeof t.hooks.addPack?t.hooks.addPack(l,h):t.styles[l]=M({},t.styles[l]||{},h),\"fas\"===l&&c(\"fa\",z)}(\"fab\",f)})}(),function(){\"use strict\";var c={};try{\"undefined\"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?\"\":l,z=c,v=(~h.indexOf(\"MSIE\")||h.indexOf(\"Trident/\"),\"___FONT_AWESOME___\"),m=function(){try{return!0}catch(c){return!1}}(),s=[1,2,3,4,5,6,7,8,9,10],e=s.concat([11,12,13,14,15,16,17,18,19,20]);[\"xs\",\"sm\",\"lg\",\"fw\",\"ul\",\"li\",\"border\",\"pull-left\",\"pull-right\",\"spin\",\"pulse\",\"rotate-90\",\"rotate-180\",\"rotate-270\",\"flip-horizontal\",\"flip-vertical\",\"stack\",\"stack-1x\",\"stack-2x\",\"inverse\",\"layers\",\"layers-text\",\"layers-counter\"].concat(s.map(function(c){return c+\"x\"})).concat(e.map(function(c){return\"w-\"+c}));var a=z||{};a[v]||(a[v]={}),a[v].styles||(a[v].styles={}),a[v].hooks||(a[v].hooks={}),a[v].shims||(a[v].shims=[]);var t=a[v],M=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var z in h)Object.prototype.hasOwnProperty.call(h,z)&&(c[z]=h[z])}return c};var f={\"address-book\":[448,512,[],\"f2b9\",\"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"],\"address-card\":[576,512,[],\"f2bb\",\"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z\"],angry:[496,512,[],\"f556\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z\"],\"arrow-alt-circle-down\":[512,512,[],\"f358\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z\"],\"arrow-alt-circle-left\":[512,512,[],\"f359\",\"M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z\"],\"arrow-alt-circle-right\":[512,512,[],\"f35a\",\"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"],\"arrow-alt-circle-up\":[512,512,[],\"f35b\",\"M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z\"],bell:[448,512,[],\"f0f3\",\"M425.403 330.939c-16.989-16.785-34.546-34.143-34.546-116.083 0-83.026-60.958-152.074-140.467-164.762A31.843 31.843 0 0 0 256 32c0-17.673-14.327-32-32-32s-32 14.327-32 32a31.848 31.848 0 0 0 5.609 18.095C118.101 62.783 57.143 131.831 57.143 214.857c0 81.933-17.551 99.292-34.543 116.078C-25.496 378.441 9.726 448 66.919 448H160c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64h93.08c57.19 0 92.415-69.583 44.323-117.061zM224 472c-13.234 0-24-10.766-24-24h48c0 13.234-10.766 24-24 24zm157.092-72H66.9c-16.762 0-25.135-20.39-13.334-32.191 28.585-28.585 51.577-55.724 51.577-152.952C105.143 149.319 158.462 96 224 96s118.857 53.319 118.857 118.857c0 97.65 23.221 124.574 51.568 152.952C406.278 379.661 397.783 400 381.092 400z\"],\"bell-slash\":[576,512,[],\"f1f6\",\"M130.9 400c-16.762 0-25.135-20.39-13.334-32.191 25.226-25.226 46.094-49.338 50.649-121.48l-46.777-41.274a168.48 168.48 0 0 0-.296 9.802c0 81.933-17.551 99.292-34.543 116.078C38.504 378.441 73.726 448 130.919 448H224c0 35.346 28.654 64 64 64s64-28.654 64-64h44.777l-54.4-48H130.9zM288 472c-13.234 0-24-10.766-24-24h48c0 13.234-10.766 24-24 24zm283.867.553l-67.931-59.571c13.104-24.118 11.524-56.318-14.532-82.042-16.989-16.785-34.546-34.143-34.546-116.083 0-83.026-60.958-152.074-140.467-164.762A31.848 31.848 0 0 0 320 32c0-17.673-14.327-32-32-32s-32 14.327-32 32a31.848 31.848 0 0 0 5.609 18.095c-41.471 6.618-77.891 28.571-103.249 59.841L36.459 3.037c-5.058-4.436-12.777-3.956-17.24 1.071L3.056 22.313C-1.407 27.34-.925 35.012 4.134 39.447l535.408 469.516c5.058 4.436 12.777 3.956 17.24-1.071l16.163-18.205c4.462-5.027 3.98-12.699-1.078-17.134zM288 96c65.538 0 118.857 53.319 118.857 118.857 0 97.65 23.221 124.574 51.568 152.952 2.908 2.908 4.573 6.328 5.209 9.832L194.482 141.612C216.258 113.867 250.075 96 288 96z\"],bookmark:[384,512,[],\"f02e\",\"M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z\"],building:[448,512,[],\"f1ad\",\"M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z\"],calendar:[448,512,[],\"f133\",\"M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z\"],\"calendar-alt\":[448,512,[],\"f073\",\"M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"calendar-check\":[448,512,[],\"f274\",\"M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z\"],\"calendar-minus\":[448,512,[],\"f272\",\"M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"calendar-plus\":[448,512,[],\"f271\",\"M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"calendar-times\":[448,512,[],\"f273\",\"M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"caret-square-down\":[448,512,[],\"f150\",\"M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"caret-square-left\":[448,512,[],\"f191\",\"M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"caret-square-right\":[448,512,[],\"f152\",\"M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"caret-square-up\":[448,512,[],\"f151\",\"M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"chart-bar\":[512,512,[],\"f080\",\"M500 400c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v324h452zm-356-60v-72c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V140c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V204c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V108c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12z\"],\"check-circle\":[512,512,[],\"f058\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z\"],\"check-square\":[448,512,[],\"f14a\",\"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z\"],circle:[512,512,[],\"f111\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z\"],clipboard:[384,512,[],\"f328\",\"M336 64h-80c0-35.29-28.71-64-64-64s-64 28.71-64 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h42v36c0 6.627 5.373 12 12 12h168c6.627 0 12-5.373 12-12v-36h42a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zM192 40c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24\"],clock:[512,512,[],\"f017\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z\"],clone:[512,512,[],\"f24d\",\"M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z\"],\"closed-captioning\":[512,512,[],\"f20a\",\"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z\"],comment:[512,512,[],\"f075\",\"M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"],\"comment-alt\":[512,512,[],\"f27a\",\"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z\"],\"comment-dots\":[512,512,[],\"f4ad\",\"M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"],comments:[576,512,[],\"f086\",\"M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z\"],compass:[512,512,[],\"f14e\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm91.326-312.131l-33.359 137.779a24.005 24.005 0 0 1-6.772 11.729l-102.64 97.779c-17.104 16.293-45.56.434-39.88-23.024l33.359-137.779a23.997 23.997 0 0 1 6.772-11.729l102.642-97.779c17.285-16.47 45.494-.175 39.878 23.024zM256 224c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"],copy:[448,512,[],\"f0c5\",\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"],copyright:[512,512,[],\"f1f9\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z\"],\"credit-card\":[576,512,[],\"f09d\",\"M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z\"],dizzy:[496,512,[],\"f567\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z\"],\"dot-circle\":[512,512,[],\"f192\",\"M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\"],edit:[576,512,[],\"f044\",\"M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z\"],envelope:[512,512,[],\"f0e0\",\"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z\"],\"envelope-open\":[512,512,[],\"f2b6\",\"M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z\"],eye:[576,512,[],\"f06e\",\"M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z\"],\"eye-slash\":[576,512,[],\"f070\",\"M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z\"],file:[384,512,[],\"f15b\",\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z\"],\"file-alt\":[384,512,[],\"f15c\",\"M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z\"],\"file-archive\":[384,512,[],\"f1c6\",\"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM256 51.882L332.118 128H256V51.882zM336 464H48V48h79.714v16h32V48H208v104c0 13.255 10.745 24 24 24h104v288zM192.27 96h-32V64h32v32zm-32 0v32h-32V96h32zm0 64v32h-32v-32h32zm32 0h-32v-32h32v32zm1.909 105.678A12 12 0 0 0 182.406 256H160.27v-32h-32v32l-19.69 97.106C101.989 385.611 126.834 416 160 416c33.052 0 57.871-30.192 51.476-62.62l-17.297-87.702zM160.27 390.073c-17.918 0-32.444-12.105-32.444-27.036 0-14.932 14.525-27.036 32.444-27.036s32.444 12.105 32.444 27.036c0 14.931-14.526 27.036-32.444 27.036zm32-166.073h-32v-32h32v32z\"],\"file-audio\":[384,512,[],\"f1c7\",\"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z\"],\"file-code\":[384,512,[],\"f1c9\",\"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm101.677-115.115L116.854 320l32.822-28.885a8.793 8.793 0 0 0 .605-12.624l-17.403-18.564c-3.384-3.613-8.964-3.662-12.438-.401L62.78 313.58c-3.703 3.474-3.704 9.367.001 12.84l57.659 54.055a8.738 8.738 0 0 0 6.012 2.381 8.746 8.746 0 0 0 6.427-2.782l17.403-18.563a8.795 8.795 0 0 0-.605-12.626zm84.284-127.85l-24.401-7.084a8.796 8.796 0 0 0-10.905 5.998L144.04 408.061c-1.353 4.66 1.338 9.552 5.998 10.905l24.403 7.084c4.68 1.355 9.557-1.354 10.905-5.998l54.612-188.112c1.354-4.66-1.337-9.552-5.997-10.905zm87.258 92.545l-57.658-54.055c-3.526-3.307-9.099-3.165-12.439.401l-17.403 18.563a8.795 8.795 0 0 0 .605 12.625L267.146 320l-32.822 28.885a8.793 8.793 0 0 0-.605 12.624l17.403 18.564a8.797 8.797 0 0 0 12.439.401h-.001l57.66-54.055c3.703-3.473 3.703-9.366-.001-12.839z\"],\"file-excel\":[384,512,[],\"f1c3\",\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z\"],\"file-image\":[384,512,[],\"f1c5\",\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z\"],\"file-pdf\":[384,512,[],\"f1c1\",\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z\"],\"file-powerpoint\":[384,512,[],\"f1c4\",\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z\"],\"file-video\":[384,512,[],\"f1c8\",\"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z\"],\"file-word\":[384,512,[],\"f1c2\",\"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z\"],flag:[512,512,[],\"f024\",\"M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z\"],flushed:[496,512,[],\"f579\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"],folder:[512,512,[],\"f07b\",\"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-6 272H54c-3.314 0-6-2.678-6-5.992V117.992A5.993 5.993 0 0 1 54 112h134.118l64 64H458a6 6 0 0 1 6 6v212a6 6 0 0 1-6 6z\"],\"folder-open\":[576,512,[],\"f07c\",\"M527.943 224H480v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h400a48.001 48.001 0 0 0 40.704-22.56l79.942-128c19.948-31.917-3.038-73.44-40.703-73.44zM54 112h134.118l64 64H426a6 6 0 0 1 6 6v42H152a48 48 0 0 0-41.098 23.202L48 351.449V117.993A5.993 5.993 0 0 1 54 112zm394 288H72l77.234-128H528l-80 128z\"],\"font-awesome-logo-full\":[3992,512,[\"Font Awesome\"],\"f4e6\",\"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"],frown:[496,512,[],\"f119\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z\"],\"frown-open\":[496,512,[],\"f57a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z\"],futbol:[496,512,[],\"f1e3\",\"M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z\"],gem:[576,512,[],\"f3a5\",\"M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z\"],grimace:[496,512,[],\"f57f\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z\"],grin:[496,512,[],\"f580\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"],\"grin-alt\":[496,512,[],\"f581\",\"M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z\"],\"grin-beam\":[496,512,[],\"f582\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z\"],\"grin-beam-sweat\":[496,512,[],\"f583\",\"M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"],\"grin-hearts\":[496,512,[],\"f584\",\"M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z\"],\"grin-squint\":[496,512,[],\"f585\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z\"],\"grin-squint-tears\":[512,512,[],\"f586\",\"M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z\"],\"grin-stars\":[496,512,[],\"f587\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z\"],\"grin-tears\":[640,512,[],\"f588\",\"M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"],\"grin-tongue\":[496,512,[],\"f589\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"],\"grin-tongue-squint\":[496,512,[],\"f58a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z\"],\"grin-tongue-wink\":[496,512,[],\"f58b\",\"M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z\"],\"grin-wink\":[496,512,[],\"f58c\",\"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"],\"hand-lizard\":[576,512,[],\"f258\",\"M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z\"],\"hand-paper\":[448,512,[],\"f256\",\"M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z\"],\"hand-peace\":[448,512,[],\"f25b\",\"M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z\"],\"hand-point-down\":[448,512,[],\"f0a7\",\"M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z\"],\"hand-point-left\":[512,512,[],\"f0a5\",\"M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"],\"hand-point-right\":[512,512,[],\"f0a4\",\"M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"],\"hand-point-up\":[448,512,[],\"f0a6\",\"M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"],\"hand-pointer\":[448,512,[],\"f25a\",\"M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z\"],\"hand-rock\":[512,512,[],\"f255\",\"M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z\"],\"hand-scissors\":[512,512,[],\"f257\",\"M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z\"],\"hand-spock\":[512,512,[],\"f259\",\"M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z\"],handshake:[640,512,[],\"f2b5\",\"M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z\"],hdd:[576,512,[],\"f0a0\",\"M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z\"],heart:[512,512,[],\"f004\",\"M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z\"],hospital:[448,512,[],\"f0f8\",\"M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z\"],hourglass:[384,512,[],\"f254\",\"M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z\"],\"id-badge\":[384,512,[],\"f2c1\",\"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"],\"id-card\":[576,512,[],\"f2c2\",\"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"],image:[512,512,[],\"f03e\",\"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z\"],images:[576,512,[],\"f302\",\"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z\"],keyboard:[576,512,[],\"f11c\",\"M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z\"],kiss:[496,512,[],\"f596\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 464c-119.1 0-216-96.9-216-216S128.9 40 248 40s216 96.9 216 216-96.9 216-216 216zm56-164c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"],\"kiss-beam\":[496,512,[],\"f597\",\"M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z\"],\"kiss-wink-heart\":[504,512,[],\"f598\",\"M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z\"],laugh:[496,512,[],\"f599\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"],\"laugh-beam\":[496,512,[],\"f59a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"],\"laugh-squint\":[496,512,[],\"f59b\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"],\"laugh-wink\":[496,512,[],\"f59c\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"],lemon:[512,512,[],\"f094\",\"M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z\"],\"life-ring\":[512,512,[],\"f1cd\",\"M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z\"],lightbulb:[384,512,[],\"f0eb\",\"M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zM128 176c0-35.29 28.71-64 64-64 8.837 0 16-7.164 16-16s-7.163-16-16-16c-52.935 0-96 43.065-96 96 0 8.836 7.164 16 16 16s16-7.164 16-16zm64-128c70.734 0 128 57.254 128 128 0 77.602-37.383 60.477-80.98 160h-94.04C101.318 236.33 64 253.869 64 176c0-70.735 57.254-128 128-128m0-48C94.805 0 16 78.803 16 176c0 101.731 51.697 91.541 90.516 192.674 3.55 9.249 12.47 15.326 22.376 15.326h126.215c9.906 0 18.826-6.078 22.376-15.326C316.303 267.541 368 277.731 368 176 368 78.803 289.195 0 192 0z\"],\"list-alt\":[512,512,[],\"f022\",\"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z\"],map:[576,512,[],\"f279\",\"M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z\"],meh:[496,512,[],\"f11a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"],\"meh-blank\":[496,512,[],\"f5a4\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"],\"meh-rolling-eyes\":[496,512,[],\"f5a5\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"],\"minus-square\":[448,512,[],\"f146\",\"M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"money-bill-alt\":[640,512,[],\"f3d1\",\"M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z\"],moon:[512,512,[],\"f186\",\"M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z\"],newspaper:[576,512,[],\"f1ea\",\"M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z\"],\"object-group\":[512,512,[],\"f247\",\"M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z\"],\"object-ungroup\":[576,512,[],\"f248\",\"M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z\"],\"paper-plane\":[512,512,[],\"f1d8\",\"M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z\"],\"pause-circle\":[512,512,[],\"f28b\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z\"],\"play-circle\":[512,512,[],\"f144\",\"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"],\"question-circle\":[512,512,[],\"f059\",\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"],registered:[512,512,[],\"f25d\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z\"],\"sad-cry\":[496,512,[],\"f5b3\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z\"],\"sad-tear\":[496,512,[],\"f5b4\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z\"],\"share-square\":[576,512,[],\"f14d\",\"M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z\"],smile:[496,512,[],\"f118\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z\"],\"smile-beam\":[496,512,[],\"f5b8\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z\"],\"smile-wink\":[496,512,[],\"f4da\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z\"],snowflake:[448,512,[],\"f2dc\",\"M438.237 355.927l-66.574-38.54 59.448-10.327c5.846-1.375 10.609-5.183 13.458-10.13 2.48-4.307 3.506-9.478 2.524-14.651-2.11-11.115-12.686-18.039-23.621-15.467l-85.423 31.115L255.914 256l82.136-41.926 85.423 31.115c10.936 2.572 21.512-4.352 23.621-15.467 2.111-11.115-5.046-22.209-15.981-24.781l-59.448-10.327 66.573-38.54c9.54-5.523 12.615-18.092 6.867-28.074-5.748-9.982-18.14-13.596-27.68-8.074l-66.574 38.54 20.805-56.787c3.246-10.782-2.758-22.542-13.413-26.268-10.654-3.725-21.922 1.997-25.168 12.779l-15.838 89.735-72.423 41.926V136l69.585-58.621c7.689-8.21 6.997-20.856-1.548-28.245-8.545-7.391-21.705-6.723-29.394 1.486l-38.644 46.46V20c0-11.046-9.318-20-20.813-20s-20.813 8.954-20.813 20v77.08l-38.644-46.46c-7.689-8.21-20.849-8.876-29.394-1.486-8.544 7.389-9.236 20.035-1.547 28.245L203.187 136v83.853l-72.423-41.926-15.838-89.736c-3.247-10.782-14.515-16.504-25.169-12.779-10.656 3.725-16.659 15.486-13.413 26.268l20.805 56.787-66.573-38.54c-9.54-5.523-21.933-1.908-27.68 8.074s-2.673 22.551 6.867 28.074l66.574 38.54-59.449 10.328C5.953 207.515-1.202 218.609.907 229.724c2.11 11.114 12.686 18.038 23.622 15.466l85.422-31.115L192.086 256l-82.136 41.926-85.423-31.115c-10.936-2.572-21.511 4.352-23.622 15.466-2.109 11.113 5.046 22.209 15.981 24.781l59.449 10.328-66.574 38.54C.223 361.449-2.852 374.018 2.896 384s18.14 13.597 27.68 8.074l66.574-38.54-20.805 56.786c-1.735 5.764-.828 11.805 2.02 16.751 2.48 4.307 6.433 7.784 11.392 9.517 10.655 3.725 21.923-1.997 25.169-12.779l15.838-89.736 72.423-41.926V376l-69.585 58.621c-7.69 8.21-6.997 20.855 1.547 28.245 8.544 7.388 21.705 6.723 29.394-1.487l38.644-46.46V492c0 11.046 9.318 20 20.813 20s20.813-8.954 20.813-20v-77.081l38.644 46.46c4.111 4.389 9.782 6.621 15.478 6.621 4.96 0 9.939-1.694 13.916-5.134 8.545-7.39 9.237-20.035 1.548-28.245L244.813 376v-83.853l72.423 41.926 15.838 89.736c3.246 10.782 14.514 16.504 25.168 12.779 10.653-3.726 16.659-15.487 13.412-26.268l-20.805-56.787 66.574 38.54c9.54 5.523 21.933 1.908 27.68-8.074 5.749-9.981 2.675-22.55-6.866-28.072z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"],star:[576,512,[],\"f005\",\"M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z\"],\"star-half\":[576,512,[],\"f089\",\"M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z\"],\"sticky-note\":[448,512,[],\"f249\",\"M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z\"],\"stop-circle\":[512,512,[],\"f28d\",\"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z\"],sun:[512,512,[],\"f185\",\"M220.116 487.936l-20.213-49.425a3.992 3.992 0 0 0-5.808-1.886l-45.404 28.104c-29.466 18.24-66.295-8.519-58.054-42.179l12.699-51.865a3.993 3.993 0 0 0-3.59-4.941l-53.251-3.951c-34.554-2.562-48.632-45.855-22.174-68.247L65.08 259.05a3.992 3.992 0 0 0 0-6.106l-40.76-34.497c-26.45-22.384-12.39-65.682 22.174-68.246l53.251-3.951a3.993 3.993 0 0 0 3.59-4.941L90.637 89.443c-8.239-33.656 28.581-60.42 58.054-42.179l45.403 28.104a3.993 3.993 0 0 0 5.808-1.887l20.213-49.425c13.116-32.071 58.638-32.081 71.758 0l20.212 49.424a3.994 3.994 0 0 0 5.809 1.887l45.403-28.104c29.464-18.236 66.297 8.513 58.054 42.179l-12.699 51.865a3.995 3.995 0 0 0 3.59 4.941l53.251 3.951c34.553 2.563 48.633 45.854 22.175 68.246l-40.76 34.497a3.993 3.993 0 0 0 0 6.107l40.76 34.496c26.511 22.441 12.322 65.689-22.175 68.247l-53.251 3.951a3.993 3.993 0 0 0-3.589 4.942l12.698 51.864c8.241 33.658-28.583 60.421-58.054 42.18l-45.403-28.104a3.994 3.994 0 0 0-5.809 1.887l-20.212 49.424c-13.159 32.178-58.675 31.993-71.757 0zm16.814-64.568l19.064 46.616 19.064-46.615c10.308-25.2 40.778-35.066 63.892-20.759l42.822 26.507-11.976-48.919c-6.475-26.444 12.38-52.339 39.487-54.349l50.226-3.726-38.444-32.536c-20.782-17.591-20.747-49.621.001-67.18l38.442-32.536-50.225-3.727c-27.151-2.015-45.95-27.948-39.488-54.349l11.978-48.919-42.823 26.507c-23.151 14.327-53.603 4.4-63.892-20.76l-19.064-46.615-19.064 46.617c-10.305 25.198-40.778 35.066-63.891 20.76l-42.823-26.508 11.977 48.918c6.474 26.446-12.381 52.338-39.488 54.35l-50.224 3.726 38.443 32.537c20.782 17.588 20.747 49.619 0 67.178L52.48 322.123l50.226 3.726c27.151 2.014 45.95 27.947 39.487 54.349l-11.977 48.919 42.823-26.507c23.188-14.355 53.622-4.352 63.891 20.758zM256 384c-70.58 0-128-57.421-128-128 0-70.58 57.42-128 128-128 70.579 0 128 57.42 128 128 0 70.579-57.421 128-128 128zm0-208c-44.112 0-80 35.888-80 80s35.888 80 80 80 80-35.888 80-80-35.888-80-80-80z\"],surprise:[496,512,[],\"f5c2\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"],\"thumbs-down\":[512,512,[],\"f165\",\"M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z\"],\"thumbs-up\":[512,512,[],\"f164\",\"M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z\"],tired:[496,512,[],\"f5c8\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z\"],\"trash-alt\":[448,512,[],\"f2ed\",\"M192 188v216c0 6.627-5.373 12-12 12h-24c-6.627 0-12-5.373-12-12V188c0-6.627 5.373-12 12-12h24c6.627 0 12 5.373 12 12zm100-12h-24c-6.627 0-12 5.373-12 12v216c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12V188c0-6.627-5.373-12-12-12zm132-96c13.255 0 24 10.745 24 24v12c0 6.627-5.373 12-12 12h-20v336c0 26.51-21.49 48-48 48H80c-26.51 0-48-21.49-48-48V128H12c-6.627 0-12-5.373-12-12v-12c0-13.255 10.745-24 24-24h74.411l34.018-56.696A48 48 0 0 1 173.589 0h100.823a48 48 0 0 1 41.16 23.304L349.589 80H424zm-269.611 0h139.223L276.16 50.913A6 6 0 0 0 271.015 48h-94.028a6 6 0 0 0-5.145 2.913L154.389 80zM368 128H80v330a6 6 0 0 0 6 6h276a6 6 0 0 0 6-6V128z\"],user:[448,512,[],\"f007\",\"M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z\"],\"user-circle\":[496,512,[],\"f2bd\",\"M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z\"],\"window-close\":[512,512,[],\"f410\",\"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z\"],\"window-maximize\":[512,512,[],\"f2d0\",\"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z\"],\"window-minimize\":[512,512,[],\"f2d1\",\"M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"],\"window-restore\":[512,512,[],\"f2d2\",\"M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z\"]};!function(c){try{c()}catch(c){if(!m)throw c}}(function(){!function c(l,z){var h=Object.keys(z).reduce(function(c,l){var h=z[l];return h.icon?c[h.iconName]=h.icon:c[l]=h,c},{});\"function\"==typeof t.hooks.addPack?t.hooks.addPack(l,h):t.styles[l]=M({},t.styles[l]||{},h),\"fas\"===l&&c(\"fa\",z)}(\"far\",f)})}(),function(){\"use strict\";var c={};try{\"undefined\"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?\"\":l,z=c,v=(~h.indexOf(\"MSIE\")||h.indexOf(\"Trident/\"),\"___FONT_AWESOME___\"),m=function(){try{return!0}catch(c){return!1}}(),s=[1,2,3,4,5,6,7,8,9,10],e=s.concat([11,12,13,14,15,16,17,18,19,20]);[\"xs\",\"sm\",\"lg\",\"fw\",\"ul\",\"li\",\"border\",\"pull-left\",\"pull-right\",\"spin\",\"pulse\",\"rotate-90\",\"rotate-180\",\"rotate-270\",\"flip-horizontal\",\"flip-vertical\",\"stack\",\"stack-1x\",\"stack-2x\",\"inverse\",\"layers\",\"layers-text\",\"layers-counter\"].concat(s.map(function(c){return c+\"x\"})).concat(e.map(function(c){return\"w-\"+c}));var a=z||{};a[v]||(a[v]={}),a[v].styles||(a[v].styles={}),a[v].hooks||(a[v].hooks={}),a[v].shims||(a[v].shims=[]);var t=a[v],M=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var z in h)Object.prototype.hasOwnProperty.call(h,z)&&(c[z]=h[z])}return c};var f={\"address-book\":[448,512,[],\"f2b9\",\"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"],\"address-card\":[576,512,[],\"f2bb\",\"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"],adjust:[512,512,[],\"f042\",\"M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z\"],\"align-center\":[448,512,[],\"f037\",\"M352 44v40c0 8.837-7.163 16-16 16H112c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h224c8.837 0 16 7.163 16 16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm320-200H112c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z\"],\"align-justify\":[448,512,[],\"f039\",\"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm16 144h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0-128h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"],\"align-left\":[448,512,[],\"f036\",\"M288 44v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16zM0 172v40c0 8.837 7.163 16 16 16h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16zm16 312h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm256-200H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z\"],\"align-right\":[448,512,[],\"f038\",\"M160 84V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H176c-8.837 0-16-7.163-16-16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"],allergies:[448,512,[],\"f461\",\"M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"],ambulance:[640,512,[],\"f0f9\",\"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"],\"american-sign-language-interpreting\":[640,512,[],\"f2a3\",\"M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z\"],anchor:[576,512,[],\"f13d\",\"M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z\"],\"angle-double-down\":[320,512,[],\"f103\",\"M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z\"],\"angle-double-left\":[448,512,[],\"f100\",\"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z\"],\"angle-double-right\":[448,512,[],\"f101\",\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"],\"angle-double-up\":[320,512,[],\"f102\",\"M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z\"],\"angle-down\":[320,512,[],\"f107\",\"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"],\"angle-left\":[256,512,[],\"f104\",\"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"],\"angle-right\":[256,512,[],\"f105\",\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"],\"angle-up\":[320,512,[],\"f106\",\"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"],angry:[496,512,[],\"f556\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z\"],archive:[512,512,[],\"f187\",\"M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z\"],archway:[576,512,[],\"f557\",\"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"],\"arrow-alt-circle-down\":[512,512,[],\"f358\",\"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z\"],\"arrow-alt-circle-left\":[512,512,[],\"f359\",\"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z\"],\"arrow-alt-circle-right\":[512,512,[],\"f35a\",\"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z\"],\"arrow-alt-circle-up\":[512,512,[],\"f35b\",\"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z\"],\"arrow-circle-down\":[512,512,[],\"f0ab\",\"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z\"],\"arrow-circle-left\":[512,512,[],\"f0a8\",\"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z\"],\"arrow-circle-right\":[512,512,[],\"f0a9\",\"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z\"],\"arrow-circle-up\":[512,512,[],\"f0aa\",\"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z\"],\"arrow-down\":[448,512,[],\"f063\",\"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z\"],\"arrow-left\":[448,512,[],\"f060\",\"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z\"],\"arrow-right\":[448,512,[],\"f061\",\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"],\"arrow-up\":[448,512,[],\"f062\",\"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z\"],\"arrows-alt\":[512,512,[],\"f0b2\",\"M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z\"],\"arrows-alt-h\":[512,512,[],\"f337\",\"M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z\"],\"arrows-alt-v\":[256,512,[],\"f338\",\"M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z\"],\"assistive-listening-systems\":[512,512,[],\"f2a2\",\"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z\"],asterisk:[512,512,[],\"f069\",\"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"],at:[512,512,[],\"f1fa\",\"M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z\"],atlas:[448,512,[],\"f558\",\"M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z\"],\"audio-description\":[512,512,[],\"f29e\",\"M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z\"],award:[384,512,[],\"f559\",\"M97.12 362.63l-5.3-5.3a9.004 9.004 0 0 0-4.02-2.32L72 350.77c-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32l-15.8 4.23a9.004 9.004 0 0 0-4.02 2.32l-5.3 5.3C273.09 376.41 254.76 384 235.26 384c-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340l5.21-5.3c5-5.09 11.22-8.75 18.05-10.61l15.53-4.23c13.89-3.79 24.75-14.84 28.47-28.98l4.16-15.81a41.145 41.145 0 0 1 10.42-18.37l11.37-11.57c10.17-10.35 14.14-25.44 10.42-39.58l-4.16-15.81a41.657 41.657 0 0 1 0-21.21l4.16-15.81c3.72-14.14-.25-29.23-10.42-39.58l-11.37-11.57c-5-5.09-8.59-11.42-10.42-18.37l-4.16-15.8c-3.72-14.14-14.58-25.19-28.47-28.98l-15.53-4.24c-6.83-1.86-13.05-5.52-18.05-10.61L256.84 12c-10.17-10.35-25-14.4-38.89-10.61l-15.53 4.24a39.614 39.614 0 0 1-20.84 0L166.05 1.4c-13.89-3.79-28.72.25-38.89 10.61l-11.37 11.57c-5 5.09-11.22 8.74-18.05 10.61l-15.53 4.24c-13.89 3.79-24.75 14.84-28.47 28.98l-4.16 15.8a41.145 41.145 0 0 1-10.42 18.37l-11.37 11.57c-10.17 10.35-14.15 25.44-10.42 39.58l4.16 15.8a41.657 41.657 0 0 1 0 21.21l-4.16 15.8c-3.72 14.14.25 29.23 10.42 39.59l11.37 11.57c5 5.09 8.59 11.42 10.42 18.37l4.16 15.8c3.72 14.14 14.58 25.19 28.47 28.98l15.53 4.23c6.83 1.86 13.05 5.52 18.05 10.61L121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z\"],backspace:[640,512,[],\"f55a\",\"M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z\"],backward:[512,512,[],\"f04a\",\"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"],\"balance-scale\":[640,512,[],\"f24e\",\"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"],ban:[512,512,[],\"f05e\",\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"],\"band-aid\":[640,512,[],\"f462\",\"M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"],barcode:[512,512,[],\"f02a\",\"M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z\"],bars:[448,512,[],\"f0c9\",\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"],\"baseball-ball\":[496,512,[],\"f433\",\"M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z\"],\"basketball-ball\":[496,512,[],\"f434\",\"M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z\"],bath:[512,512,[],\"f2cd\",\"M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"],\"battery-empty\":[640,512,[],\"f244\",\"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z\"],\"battery-full\":[640,512,[],\"f240\",\"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z\"],\"battery-half\":[640,512,[],\"f242\",\"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z\"],\"battery-quarter\":[640,512,[],\"f243\",\"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z\"],\"battery-three-quarters\":[640,512,[],\"f241\",\"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z\"],bed:[640,512,[],\"f236\",\"M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z\"],beer:[448,512,[],\"f0fc\",\"M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z\"],bell:[448,512,[],\"f0f3\",\"M433.884 366.059C411.634 343.809 384 316.118 384 208c0-79.394-57.831-145.269-133.663-157.83A31.845 31.845 0 0 0 256 32c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 6.75 2.095 13.008 5.663 18.17C121.831 62.731 64 128.606 64 208c0 108.118-27.643 135.809-49.893 158.059C-16.042 396.208 5.325 448 48.048 448H160c0 35.346 28.654 64 64 64s64-28.654 64-64h111.943c42.638 0 64.151-51.731 33.941-81.941zM224 472a8 8 0 0 1 0 16c-22.056 0-40-17.944-40-40h16c0 13.234 10.766 24 24 24z\"],\"bell-slash\":[576,512,[],\"f1f6\",\"M78.107 366.059C47.958 396.208 69.325 448 112.048 448H224c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64h32.685L127.848 221.379c-2.198 97.078-28.439 123.378-49.741 144.68zM264 448c0 13.234 10.766 24 24 24a8 8 0 0 1 0 16c-22.056 0-40-17.944-40-40h16zm305.896 43.733l-10.762 12.086c-8.915 10.012-24.333 10.967-34.437 2.133L8.256 54.393C-1.848 45.558-2.811 30.28 6.104 20.267L16.865 8.181C25.781-1.831 41.199-2.786 51.303 6.049l113.81 99.512c24.017-28.778 57.946-48.996 96.55-55.39A31.85 31.85 0 0 1 256 32c0-17.673 14.327-32 32-32s32 14.327 32 32c0 6.75-2.095 13.008-5.663 18.17C390.169 62.731 448 128.606 448 208c0 108.118 27.634 135.809 49.884 158.059 12.149 12.149 15.923 27.776 13.33 42.121l56.53 49.427c10.104 8.835 11.067 24.113 2.152 34.126z\"],\"bezier-curve\":[640,512,[],\"f55b\",\"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"],bicycle:[640,512,[],\"f206\",\"M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z\"],binoculars:[512,512,[],\"f1e5\",\"M192 104H96V56c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24v48zm224-48c0-13.255-10.745-24-24-24h-48c-13.255 0-24 10.745-24 24v48h96V56zM0 456c0 13.255 10.745 24 24 24h120c13.255 0 24-10.745 24-24v-16H0v16zm88-328c-13.255 0-24 10.745-24 24C64 256 0 272 0 416h168V312c0-13.255 10.745-24 24-24V128H88zm256 328c0 13.255 10.745 24 24 24h120c13.255 0 24-10.745 24-24v-16H344v16zM216 128v160h80V128h-80zm128 288h168c0-144-64-160-64-264 0-13.255-10.745-24-24-24H320v160c13.255 0 24 10.745 24 24v104z\"],\"birthday-cake\":[448,512,[],\"f1fd\",\"M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z\"],blender:[512,512,[],\"f517\",\"M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z\"],blind:[384,512,[],\"f29d\",\"M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z\"],bold:[384,512,[],\"f032\",\"M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z\"],bolt:[320,512,[],\"f0e7\",\"M295.973 160H180.572L215.19 30.184C219.25 14.956 207.756 0 192 0H56C43.971 0 33.8 8.905 32.211 20.828l-31.996 240C-1.704 275.217 9.504 288 24.004 288h118.701L96.646 482.466C93.05 497.649 104.659 512 119.992 512c8.35 0 16.376-4.374 20.778-11.978l175.973-303.997c9.244-15.967-2.288-36.025-20.77-36.025z\"],bomb:[512,512,[],\"f1e2\",\"M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z\"],bong:[448,512,[],\"f55c\",\"M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z\"],book:[448,512,[],\"f02d\",\"M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z\"],\"book-open\":[576,512,[],\"f518\",\"M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z\"],bookmark:[384,512,[],\"f02e\",\"M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z\"],\"bowling-ball\":[496,512,[],\"f436\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],box:[512,512,[],\"f466\",\"M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z\"],\"box-open\":[640,512,[],\"f49e\",\"M53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9zm585.1 102.8L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9z\"],boxes:[576,512,[],\"f468\",\"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"],braille:[640,512,[],\"f2a1\",\"M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"],briefcase:[512,512,[],\"f0b1\",\"M320 288h192v144c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V288h192v20c0 6.627 5.373 12 12 12h104c6.627 0 12-5.373 12-12v-20zm192-112v80H0v-80c0-26.51 21.49-48 48-48h80V80c0-26.51 21.49-48 48-48h160c26.51 0 48 21.49 48 48v48h80c26.51 0 48 21.49 48 48zM320 96H192v32h128V96z\"],\"briefcase-medical\":[512,512,[],\"f469\",\"M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z\"],\"broadcast-tower\":[640,512,[],\"f519\",\"M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z\"],broom:[512,512,[],\"f51a\",\"M10.8 247.2C-.7 251.8-3.7 266.7 5 275.4l54.8 54.8 73.2-24.4-24.4 73.2 128 128c8.8 8.8 23.6 5.7 28.2-5.8l98.1-243.7-108.4-108.4-243.7 98.1zM507.3 27.3L484.7 4.7c-6.2-6.3-16.4-6.3-22.6 0L359.8 106.9l-40.4-40.4c-4.2-4.3-11.4-3-13.9 2.5l-27.2 58.6 106.1 106.1 58.6-27.2c5.4-2.5 6.7-9.7 2.5-13.9l-40.4-40.4L507.3 49.9c6.3-6.2 6.3-16.3 0-22.6z\"],brush:[384,512,[],\"f55d\",\"M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z\"],bug:[512,512,[],\"f188\",\"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\"],building:[448,512,[],\"f1ad\",\"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"],bullhorn:[576,512,[],\"f0a1\",\"M576 224c0-20.896-13.36-38.666-32-45.258V64c0-35.346-28.654-64-64-64-64.985 56-142.031 128-272 128H48c-26.51 0-48 21.49-48 48v96c0 26.51 21.49 48 48 48h43.263c-18.742 64.65 2.479 116.379 18.814 167.44 1.702 5.32 5.203 9.893 9.922 12.88 20.78 13.155 68.355 15.657 93.773 5.151 16.046-6.633 19.96-27.423 7.522-39.537-18.508-18.026-30.136-36.91-19.795-60.858a12.278 12.278 0 0 0-1.045-11.673c-16.309-24.679-3.581-62.107 28.517-72.752C346.403 327.887 418.591 395.081 480 448c35.346 0 64-28.654 64-64V269.258c18.64-6.592 32-24.362 32-45.258zm-96 139.855c-54.609-44.979-125.033-92.94-224-104.982v-69.747c98.967-12.042 169.391-60.002 224-104.982v279.711z\"],bullseye:[512,512,[],\"f140\",\"M256 72c101.689 0 184 82.295 184 184 0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-101.689 82.295-184 184-184m0-64C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 184c35.29 0 64 28.71 64 64s-28.71 64-64 64-64-28.71-64-64 28.71-64 64-64m0-64c-70.692 0-128 57.308-128 128s57.308 128 128 128 128-57.308 128-128-57.308-128-128-128z\"],burn:[384,512,[],\"f46a\",\"M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z\"],bus:[512,512,[],\"f207\",\"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"bus-alt\":[512,512,[],\"f55e\",\"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],calculator:[448,512,[],\"f1ec\",\"M0 464V48C0 21.49 21.49 0 48 0h352c26.51 0 48 21.49 48 48v416c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm384-284V76c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v104c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12zM128 308v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm256 128V268c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-256 0v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm128-128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm0 128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"],calendar:[448,512,[],\"f133\",\"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"],\"calendar-alt\":[448,512,[],\"f073\",\"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm116 204c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40z\"],\"calendar-check\":[448,512,[],\"f274\",\"M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z\"],\"calendar-minus\":[448,512,[],\"f272\",\"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z\"],\"calendar-plus\":[448,512,[],\"f271\",\"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z\"],\"calendar-times\":[448,512,[],\"f273\",\"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z\"],camera:[512,512,[],\"f030\",\"M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z\"],\"camera-retro\":[512,512,[],\"f083\",\"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"],cannabis:[512,512,[],\"f55f\",\"M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z\"],capsules:[576,512,[],\"f46b\",\"M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z\"],car:[512,512,[],\"f1b9\",\"M499.991 168h-54.815l-7.854-20.944c-9.192-24.513-25.425-45.351-46.942-60.263S343.651 64 317.472 64H194.528c-26.18 0-51.391 7.882-72.908 22.793-21.518 14.912-37.75 35.75-46.942 60.263L66.824 168H12.009c-8.191 0-13.974 8.024-11.384 15.795l8 24A12 12 0 0 0 20.009 216h28.815l-.052.14C29.222 227.093 16 247.997 16 272v48c0 16.225 6.049 31.029 16 42.309V424c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24v-40h256v40c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24v-61.691c9.951-11.281 16-26.085 16-42.309v-48c0-24.003-13.222-44.907-32.772-55.86l-.052-.14h28.815a12 12 0 0 0 11.384-8.205l8-24c2.59-7.771-3.193-15.795-11.384-15.795zm-365.388 1.528C143.918 144.689 168 128 194.528 128h122.944c26.528 0 50.61 16.689 59.925 41.528L391.824 208H120.176l14.427-38.472zM88 328c-17.673 0-32-14.327-32-32 0-17.673 14.327-32 32-32s48 30.327 48 48-30.327 16-48 16zm336 0c-17.673 0-48 1.673-48-16 0-17.673 30.327-48 48-48s32 14.327 32 32c0 17.673-14.327 32-32 32z\"],\"caret-down\":[320,512,[],\"f0d7\",\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"],\"caret-left\":[192,512,[],\"f0d9\",\"M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z\"],\"caret-right\":[192,512,[],\"f0da\",\"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\"],\"caret-square-down\":[448,512,[],\"f150\",\"M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z\"],\"caret-square-left\":[448,512,[],\"f191\",\"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z\"],\"caret-square-right\":[448,512,[],\"f152\",\"M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z\"],\"caret-square-up\":[448,512,[],\"f151\",\"M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z\"],\"caret-up\":[320,512,[],\"f0d8\",\"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"],\"cart-arrow-down\":[576,512,[],\"f218\",\"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z\"],\"cart-plus\":[576,512,[],\"f217\",\"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z\"],certificate:[512,512,[],\"f0a3\",\"M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z\"],chalkboard:[640,512,[],\"f51b\",\"M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"],\"chalkboard-teacher\":[640,512,[],\"f51c\",\"M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z\"],\"chart-area\":[512,512,[],\"f1fe\",\"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z\"],\"chart-bar\":[512,512,[],\"f080\",\"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zm-308-44v-72c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V204c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V108c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"],\"chart-line\":[512,512,[],\"f201\",\"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM456 96H344c-21.4 0-32.1 25.9-17 41l32.9 32.9-72 72.9-55.6-55.6c-4.7-4.7-12.2-4.7-16.9 0L96.4 305c-4.7 4.6-4.8 12.2-.2 16.9l28.5 29.4c4.7 4.8 12.4 4.9 17.1.1l82.1-82.1 55.5 55.5c4.7 4.7 12.3 4.7 17 0l109.2-109.2L439 249c15.1 15.1 41 4.4 41-17V120c0-13.3-10.7-24-24-24z\"],\"chart-pie\":[576,512,[],\"f200\",\"M288 12.3V240h227.7c6.9 0 12.3-5.8 12-12.7-6.4-122.4-104.5-220.6-227-227-6.9-.3-12.7 5.1-12.7 12zM552.7 288c6.9 0 12.3 5.8 12 12.7-2.8 53.2-23.2 105.6-61.2 147.8-4.6 5.1-12.6 5.4-17.5.5L325 288h227.7zM401 433c4.8 4.8 4.7 12.8-.4 17.3-42.6 38.4-99 61.7-160.8 61.7C107.6 511.9-.2 403.8 0 271.5.2 143.4 100.8 38.9 227.3 32.3c6.9-.4 12.7 5.1 12.7 12V272l161 161z\"],check:[512,512,[],\"f00c\",\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"],\"check-circle\":[512,512,[],\"f058\",\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"],\"check-double\":[512,512,[],\"f560\",\"M504.5 171.95l-36.2-36.41c-10-10.05-26.21-10.05-36.2 0L192 377.02 79.9 264.28c-10-10.06-26.21-10.06-36.2 0L7.5 300.69c-10 10.05-10 26.36 0 36.41l166.4 167.36c10 10.06 26.21 10.06 36.2 0l294.4-296.09c10-10.06 10-26.36 0-36.42zM166.57 282.71c6.84 7.02 18.18 7.02 25.21.18L403.85 72.62c7.02-6.84 7.02-18.18.18-25.21L362.08 5.29c-6.84-7.02-18.18-7.02-25.21-.18L179.71 161.19l-68.23-68.77c-6.84-7.02-18.18-7.02-25.2-.18l-42.13 41.77c-7.02 6.84-7.02 18.18-.18 25.2l122.6 123.5z\"],\"check-square\":[448,512,[],\"f14a\",\"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z\"],chess:[512,512,[],\"f439\",\"M199.821 217.633a6 6 0 0 1 6 6l-.001 20.766a6 6 0 0 1-6 6h-25.805c0 31.715-2.153 96.201 17.398 153.229H64.597C84.54 345.452 82.02 279.245 82.02 250.399H56.183a6 6 0 0 1-6-6l.002-20.766a6 6 0 0 1 6-6h143.636zM41.554 115.088l34.58 95.071h103.734l34.572-95.072c2.846-7.826-2.95-16.101-11.278-16.101H152v-30.22h21.57a6 6 0 0 0 6-6V40.383a6 6 0 0 0-6-6h-28.367V6a6 6 0 0 0-6-6H116.82a6 6 0 0 0-6 6v28.383H82.421a6 6 0 0 0-6 6v22.383a6 6 0 0 0 6 6H104v30.219H52.831c-8.328.001-14.124 8.276-11.277 16.103zM222.678 445.17v-28.067a6 6 0 0 0-6-6H39.322a6 6 0 0 0-6 6v28.067l-22.148 14.164a6 6 0 0 0-2.767 5.055V506a6 6 0 0 0 6 6h227.187a6 6 0 0 0 6-6v-41.612a6 6 0 0 0-2.767-5.055l-22.149-14.163zm90.578-144.225l24.88 16.963c.09 18.124-.167 63.904-11.905 114.522h147.526c-11.713-50.475-11.969-96.324-11.882-114.537l24.859-16.949a3.856 3.856 0 0 0 1.684-3.187v-69.901a3.857 3.857 0 0 0-3.857-3.857h-27.655a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.858-3.857h-52.918a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.857-3.857H315.43a3.857 3.857 0 0 0-3.857 3.857v69.901a3.855 3.855 0 0 0 1.683 3.188zm71.585 51.906c0-8.372 6.787-15.158 15.159-15.158s15.158 6.787 15.158 15.158v30.318h-30.317v-30.318zM504.62 470.059l-13.664-10.639v-15.552a3.857 3.857 0 0 0-3.857-3.857H312.915a3.857 3.857 0 0 0-3.857 3.857v15.552l-13.677 10.639a3.857 3.857 0 0 0-1.488 3.044v35.039a3.857 3.857 0 0 0 3.857 3.857h204.5a3.857 3.857 0 0 0 3.857-3.857v-35.04a3.859 3.859 0 0 0-1.487-3.043z\"],\"chess-bishop\":[320,512,[],\"f43a\",\"M123.158 77.881C107.369 72.53 96 57.597 96 40c0-22.091 17.909-40 40-40h47.796c22.091 0 40 17.909 40 40 0 17.541-11.295 32.434-27.005 37.829 23.993 16.657 48.577 46.839 68.703 82.05L144.929 280.443a6 6 0 0 0 0 8.485l14.142 14.142a6 6 0 0 0 8.485 0L280.9 189.726c17.758 38.297 29.371 79.443 29.371 114.273 0 53.786-22.897 75.788-58.446 86.033V448H68.174v-57.97C32.631 379.784 9.739 357.781 9.739 304c0-78.029 58.281-187.766 113.419-226.119zM320 500v-24c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12z\"],\"chess-board\":[512,512,[],\"f43c\",\"M256 256v64h-64v-64h64zm0-256h-64v64h64V0zm0 256h64v-64h-64v64zM384 0h-64v64h64V0zm0 512h64v-64h-64v64zm128-64v-64h-64v64h64zm-384 64h64v-64h-64v64zm0-512H64v64h64V0zm384 192v-64h-64v64h64zm0 128v-64h-64v64h64zM0 512h64v-64H0v64zM0 64v64h64V64H0zm0 128v64h64v-64H0zm0 128v64h64v-64H0zm256 192h64v-64h-64v64zm-64-128v64h64v-64h-64zm64-192v-64h-64v64h64zM64 384v64h64v-64H64zm64-128H64v64h64v-64zm256 128h64v-64h-64v64zM512 0h-64v64h64V0zM384 256h64v-64h-64v64zm0-192v64h64V64h-64zm-64 320v64h64v-64h-64zm-192-64v64h64v-64h-64zm128 0v64h64v-64h-64zm-64-128h-64v64h64v-64zm-64-64H64v64h64v-64zm192 192h64v-64h-64v64zM192 128V64h-64v64h64zm128 0V64h-64v64h64zm0 64h64v-64h-64v64z\"],\"chess-king\":[448,512,[],\"f43f\",\"M416 476v24c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12zm-8.033-324H248v-48h50a6 6 0 0 0 6-6V62a6 6 0 0 0-6-6h-50V6a6 6 0 0 0-6-6h-36a6 6 0 0 0-6 6v50h-50a6 6 0 0 0-6 6v36a6 6 0 0 0 6 6h50v48H40.033c-27.574 0-46.879 27.244-37.738 53.259L87.582 448h272.836l85.287-242.741C454.846 179.244 435.541 152 407.967 152z\"],\"chess-knight\":[384,512,[],\"f441\",\"M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"],\"chess-pawn\":[320,512,[],\"f443\",\"M264 448H56s60-42.743 60-176H84c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h40.209C95.721 210.56 76 181.588 76 148c0-46.392 37.608-84 84-84s84 37.608 84 84c0 33.588-19.721 62.56-48.209 76H236c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12h-32c0 133.257 60 176 60 176zm28 16H28c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h264c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12z\"],\"chess-queen\":[512,512,[],\"f445\",\"M436 512H76c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12zM255.579 0c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zm204.568 154.634c-5.768-3.045-12.916-.932-16.082 4.77-8.616 15.516-22.747 37.801-44.065 37.801-28.714 0-30.625-19.804-31.686-57.542-.183-6.492-5.501-11.664-11.995-11.664h-41.006c-5.175 0-9.754 3.328-11.388 8.238-8.89 26.709-26.073 40.992-47.925 40.992s-39.034-14.283-47.925-40.992c-1.634-4.91-6.213-8.238-11.388-8.238h-41.005c-6.495 0-11.813 5.174-11.995 11.667-1.052 37.642-2.934 57.539-31.688 57.539-20.691 0-33.817-20.224-44.425-38.025-3.266-5.48-10.258-7.431-15.899-4.453l-39.179 20.679a12 12 0 0 0-5.51 15.145L112 448h288l105.014-257.448a12 12 0 0 0-5.51-15.145l-39.357-20.773z\"],\"chess-rook\":[384,512,[],\"f447\",\"M81.241 215.027C80.957 258.92 77.411 348.076 48 448h287.982c-29.4-99.604-32.936-188.912-33.221-232.975l45.418-42.312a11.998 11.998 0 0 0 3.82-8.78V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v44h-48V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v44H96V44c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v119.932c0 3.33 1.384 6.51 3.82 8.78l45.421 42.315zM160 256c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v64.004h-64V256zm224 220v24c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12z\"],\"chevron-circle-down\":[512,512,[],\"f13a\",\"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z\"],\"chevron-circle-left\":[512,512,[],\"f137\",\"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z\"],\"chevron-circle-right\":[512,512,[],\"f138\",\"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z\"],\"chevron-circle-up\":[512,512,[],\"f139\",\"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z\"],\"chevron-down\":[448,512,[],\"f078\",\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"],\"chevron-left\":[320,512,[],\"f053\",\"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"],\"chevron-right\":[320,512,[],\"f054\",\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"],\"chevron-up\":[448,512,[],\"f077\",\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"],child:[384,512,[],\"f1ae\",\"M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z\"],church:[640,512,[],\"f51d\",\"M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z\"],circle:[512,512,[],\"f111\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z\"],\"circle-notch\":[512,512,[],\"f1ce\",\"M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z\"],clipboard:[384,512,[],\"f328\",\"M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z\"],\"clipboard-check\":[384,512,[],\"f46c\",\"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z\"],\"clipboard-list\":[384,512,[],\"f46d\",\"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"],clock:[512,512,[],\"f017\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z\"],clone:[512,512,[],\"f24d\",\"M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z\"],\"closed-captioning\":[512,512,[],\"f20a\",\"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z\"],cloud:[640,512,[],\"f0c2\",\"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z\"],\"cloud-download-alt\":[640,512,[],\"f381\",\"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z\"],\"cloud-upload-alt\":[640,512,[],\"f382\",\"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"],cocktail:[576,512,[],\"f561\",\"M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z\"],code:[640,512,[],\"f121\",\"M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z\"],\"code-branch\":[384,512,[],\"f126\",\"M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z\"],coffee:[640,512,[],\"f0f4\",\"M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z\"],cog:[512,512,[],\"f013\",\"M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z\"],cogs:[640,512,[],\"f085\",\"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"],coins:[512,512,[],\"f51e\",\"M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z\"],columns:[512,512,[],\"f0db\",\"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z\"],comment:[512,512,[],\"f075\",\"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z\"],\"comment-alt\":[512,512,[],\"f27a\",\"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z\"],\"comment-dots\":[512,512,[],\"f4ad\",\"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],\"comment-slash\":[640,512,[],\"f4b3\",\"M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"],comments:[576,512,[],\"f086\",\"M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z\"],\"compact-disc\":[496,512,[],\"f51f\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"],compass:[512,512,[],\"f14e\",\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM307.446 120.844l-102.642 97.779a23.997 23.997 0 0 0-6.772 11.729l-33.359 137.779c-5.68 23.459 22.777 39.318 39.88 23.024l102.64-97.779a23.99 23.99 0 0 0 6.772-11.729l33.359-137.779c5.618-23.198-22.591-39.493-39.878-23.024zM256 224c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"],compress:[448,512,[],\"f066\",\"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"],\"concierge-bell\":[512,512,[],\"f562\",\"M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"],cookie:[512,512,[],\"f563\",\"M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"cookie-bite\":[512,512,[],\"f564\",\"M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],copy:[448,512,[],\"f0c5\",\"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z\"],copyright:[512,512,[],\"f1f9\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z\"],couch:[640,512,[],\"f4b8\",\"M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z\"],\"credit-card\":[576,512,[],\"f09d\",\"M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z\"],crop:[512,512,[],\"f125\",\"M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"],\"crop-alt\":[512,512,[],\"f565\",\"M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z\"],crosshairs:[512,512,[],\"f05b\",\"M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z\"],crow:[640,512,[],\"f520\",\"M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"],crown:[640,512,[],\"f521\",\"M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z\"],cube:[512,512,[],\"f1b2\",\"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"],cubes:[512,512,[],\"f1b3\",\"M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z\"],cut:[448,512,[],\"f0c4\",\"M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"],database:[448,512,[],\"f1c0\",\"M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z\"],deaf:[512,512,[],\"f2a4\",\"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z\"],desktop:[576,512,[],\"f108\",\"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"],diagnoses:[640,512,[],\"f470\",\"M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"],dice:[640,512,[],\"f522\",\"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"],\"dice-five\":[448,512,[],\"f523\",\"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"dice-four\":[448,512,[],\"f524\",\"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"dice-one\":[448,512,[],\"f525\",\"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"dice-six\":[448,512,[],\"f526\",\"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"dice-three\":[448,512,[],\"f527\",\"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"dice-two\":[448,512,[],\"f528\",\"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],\"digital-tachograph\":[640,512,[],\"f566\",\"M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z\"],divide:[448,512,[],\"f529\",\"M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"],dizzy:[496,512,[],\"f567\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z\"],dna:[448,512,[],\"f471\",\"M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z\"],\"dollar-sign\":[288,512,[],\"f155\",\"M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z\"],dolly:[576,512,[],\"f472\",\"M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"],\"dolly-flatbed\":[640,512,[],\"f474\",\"M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"],donate:[512,512,[],\"f4b9\",\"M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z\"],\"door-closed\":[640,512,[],\"f52a\",\"M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z\"],\"door-open\":[640,512,[],\"f52b\",\"M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z\"],\"dot-circle\":[512,512,[],\"f192\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z\"],dove:[512,512,[],\"f4ba\",\"M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"],download:[512,512,[],\"f019\",\"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"],\"drafting-compass\":[512,512,[],\"f568\",\"M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z\"],drum:[576,512,[],\"f569\",\"M458.08 120.88l102.39-61.43c15.16-9.09 20.06-28.75 10.97-43.91C562.34.39 542.7-4.53 527.53 4.57l-160.69 96.41A629.32 629.32 0 0 0 288 96C128.94 96 0 153.31 0 224v160.83c0 30.46 24.03 58.4 64 80.37v-96.37c0-17.6 14.4-32 32-32s32 14.4 32 32v122.41c37.4 11.13 81 18.44 128 20.75V400.84c0-17.6 14.4-32 32-32s32 14.4 32 32V512c47-2.31 90.6-9.62 128-20.75V368.84c0-17.6 14.4-32 32-32s32 14.4 32 32v96.37c39.97-21.97 64-49.91 64-80.37V224.01c-.01-42.38-46.54-79.84-117.92-103.13zM288 304c-132.55 0-240-35.82-240-80s107.45-80 240-80c2.34 0 4.62.1 6.94.12l-87.41 52.44c-15.16 9.09-20.06 28.75-10.97 43.91 9.56 15.93 29.51 19.61 43.91 10.97l162.71-97.62C477.55 167.41 528 193.74 528 224.01 528 268.19 420.54 304 288 304z\"],\"drum-steelpan\":[576,512,[],\"f56a\",\"M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z\"],dumbbell:[640,512,[],\"f44b\",\"M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z\"],edit:[576,512,[],\"f044\",\"M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z\"],eject:[448,512,[],\"f052\",\"M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z\"],\"ellipsis-h\":[512,512,[],\"f141\",\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"],\"ellipsis-v\":[192,512,[],\"f142\",\"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z\"],envelope:[512,512,[],\"f0e0\",\"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"],\"envelope-open\":[512,512,[],\"f2b6\",\"M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z\"],\"envelope-square\":[448,512,[],\"f199\",\"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z\"],equals:[448,512,[],\"f52c\",\"M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"],eraser:[512,512,[],\"f12d\",\"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"],\"euro-sign\":[320,512,[],\"f153\",\"M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z\"],\"exchange-alt\":[512,512,[],\"f362\",\"M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"],exclamation:[192,512,[],\"f12a\",\"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"],\"exclamation-circle\":[512,512,[],\"f06a\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],\"exclamation-triangle\":[576,512,[],\"f071\",\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],expand:[448,512,[],\"f065\",\"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z\"],\"expand-arrows-alt\":[448,512,[],\"f31e\",\"M448.1 344v112c0 13.3-10.7 24-24 24h-112c-21.4 0-32.1-25.9-17-41l36.2-36.2L224 295.6 116.8 402.9 153 439c15.1 15.1 4.4 41-17 41H24c-13.3 0-24-10.7-24-24V344c0-21.4 25.9-32.1 41-17l36.2 36.2L184.5 256 77.2 148.7 41 185c-15.1 15.1-41 4.4-41-17V56c0-13.3 10.7-24 24-24h112c21.4 0 32.1 25.9 17 41l-36.2 36.2L224 216.4l107.3-107.3L295.1 73c-15.1-15.1-4.4-41 17-41h112c13.3 0 24 10.7 24 24v112c0 21.4-25.9 32.1-41 17l-36.2-36.2L263.6 256l107.3 107.3 36.2-36.2c15.1-15.2 41-4.5 41 16.9z\"],\"external-link-alt\":[576,512,[],\"f35d\",\"M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z\"],\"external-link-square-alt\":[448,512,[],\"f360\",\"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z\"],eye:[576,512,[],\"f06e\",\"M569.354 231.631C512.969 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-75.162 0-136-60.827-136-136 0-75.162 60.826-136 136-136 75.162 0 136 60.826 136 136 0 75.162-60.826 136-136 136zm104-136c0 57.438-46.562 104-104 104s-104-46.562-104-104c0-17.708 4.431-34.379 12.236-48.973l-.001.032c0 23.651 19.173 42.823 42.824 42.823s42.824-19.173 42.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621 156.431 270.292 152 288 152c57.438 0 104 46.562 104 104z\"],\"eye-dropper\":[512,512,[],\"f1fb\",\"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z\"],\"eye-slash\":[576,512,[],\"f070\",\"M286.693 391.984l32.579 46.542A333.958 333.958 0 0 1 288 440C168.19 440 63.031 376.051 6.646 280.369a47.999 47.999 0 0 1 0-48.739c24.023-40.766 56.913-75.775 96.024-102.537l57.077 81.539C154.736 224.82 152 240.087 152 256c0 74.736 60.135 135.282 134.693 135.984zm282.661-111.615c-31.667 53.737-78.747 97.46-135.175 125.475l.011.015 41.47 59.2c7.6 10.86 4.96 25.82-5.9 33.42l-13.11 9.18c-10.86 7.6-25.82 4.96-33.42-5.9L100.34 46.94c-7.6-10.86-4.96-25.82 5.9-33.42l13.11-9.18c10.86-7.6 25.82-4.96 33.42 5.9l51.038 72.617C230.68 75.776 258.905 72 288 72c119.81 0 224.969 63.949 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM424 256c0-75.174-60.838-136-136-136-17.939 0-35.056 3.473-50.729 9.772l19.299 27.058c25.869-8.171 55.044-6.163 80.4 7.41h-.03c-23.65 0-42.82 19.17-42.82 42.82 0 23.626 19.147 42.82 42.82 42.82 23.65 0 42.82-19.17 42.82-42.82v-.03c18.462 34.49 16.312 77.914-8.25 110.95v.01l19.314 27.061C411.496 321.2 424 290.074 424 256zM262.014 356.727l-77.53-110.757c-5.014 52.387 29.314 98.354 77.53 110.757z\"],\"fast-backward\":[512,512,[],\"f049\",\"M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z\"],\"fast-forward\":[512,512,[],\"f050\",\"M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z\"],fax:[512,512,[],\"f1ac\",\"M128 144v320c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V144c0-26.51 21.49-48 48-48h32c26.51 0 48 21.49 48 48zm384 64v256c0 26.51-21.49 48-48 48H192c-26.51 0-48-21.49-48-48V40c0-22.091 17.909-40 40-40h207.432a39.996 39.996 0 0 1 28.284 11.716l48.569 48.569A39.999 39.999 0 0 1 480 88.568v74.174c18.641 6.591 32 24.36 32 45.258zm-320-16h240V96h-24c-13.203 0-24-10.797-24-24V48H192v144zm96 204c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm128 128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40z\"],feather:[512,512,[],\"f52d\",\"M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z\"],\"feather-alt\":[512,512,[],\"f56b\",\"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"],female:[256,512,[],\"f182\",\"M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z\"],\"fighter-jet\":[640,512,[],\"f0fb\",\"M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z\"],file:[384,512,[],\"f15b\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],\"file-alt\":[384,512,[],\"f15c\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],\"file-archive\":[384,512,[],\"f1c6\",\"M224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32V32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6zm32.7-53c0 14.9-14.5 27-32.4 27S96 378 96 363c0-14.9 14.5-27 32.4-27s32.5 12.1 32.5 27zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],\"file-audio\":[384,512,[],\"f1c7\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],\"file-code\":[384,512,[],\"f1c9\",\"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z\"],\"file-contract\":[384,512,[],\"f56c\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"],\"file-download\":[384,512,[],\"f56d\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"],\"file-excel\":[384,512,[],\"f1c3\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],\"file-export\":[576,512,[],\"f56e\",\"M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zM192 336v-32c0-8.84 7.16-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.84 0-16-7.16-16-16zm379.05-28.02l-95.7-96.43c-10.06-10.14-27.36-3.01-27.36 11.27V288H384v64h63.99v65.18c0 14.28 17.29 21.41 27.36 11.27l95.7-96.42c6.6-6.66 6.6-17.4 0-24.05z\"],\"file-image\":[384,512,[],\"f1c5\",\"M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z\"],\"file-import\":[512,512,[],\"f56f\",\"M16 288c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h112v-64H16zm336-152V0H152c-13.3 0-24 10.7-24 24v264h127.99v-65.18c0-14.28 17.29-21.41 27.36-11.27l95.7 96.43c6.6 6.65 6.6 17.39 0 24.04l-95.7 96.42c-10.06 10.14-27.36 3.01-27.36-11.27V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24zm153-31L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"],\"file-invoice\":[384,512,[],\"f570\",\"M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z\"],\"file-invoice-dollar\":[384,512,[],\"f571\",\"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z\"],\"file-medical\":[384,512,[],\"f477\",\"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z\"],\"file-medical-alt\":[448,512,[],\"f478\",\"M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"],\"file-pdf\":[384,512,[],\"f1c1\",\"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z\"],\"file-powerpoint\":[384,512,[],\"f1c4\",\"M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z\"],\"file-prescription\":[384,512,[],\"f572\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],\"file-signature\":[576,512,[],\"f573\",\"M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z\"],\"file-upload\":[384,512,[],\"f574\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"],\"file-video\":[384,512,[],\"f1c8\",\"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z\"],\"file-word\":[384,512,[],\"f1c2\",\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"],fill:[512,512,[],\"f575\",\"M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z\"],\"fill-drip\":[576,512,[],\"f576\",\"M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z\"],film:[512,512,[],\"f008\",\"M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"],filter:[512,512,[],\"f0b0\",\"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z\"],fingerprint:[512,512,[],\"f577\",\"M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z\"],fire:[384,512,[],\"f06d\",\"M216 23.858c0-23.802-30.653-32.765-44.149-13.038C48 191.851 224 200 224 288c0 35.629-29.114 64.458-64.85 63.994C123.98 351.538 96 322.22 96 287.046v-85.51c0-21.703-26.471-32.225-41.432-16.504C27.801 213.158 0 261.332 0 320c0 105.869 86.131 192 192 192s192-86.131 192-192c0-170.29-168-193.003-168-296.142z\"],\"fire-extinguisher\":[448,512,[],\"f134\",\"M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z\"],\"first-aid\":[576,512,[],\"f479\",\"M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],fish:[576,512,[],\"f578\",\"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"],flag:[512,512,[],\"f024\",\"M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z\"],\"flag-checkered\":[512,512,[],\"f11e\",\"M466.515 66.928C487.731 57.074 512 72.551 512 95.944v243.1c0 10.526-5.161 20.407-13.843 26.358-35.837 24.564-74.335 40.858-122.505 40.858-67.373 0-111.63-34.783-165.217-34.783-50.853 0-86.124 10.058-114.435 22.122V488c0 13.255-10.745 24-24 24H56c-13.255 0-24-10.745-24-24V101.945C17.497 91.825 8 75.026 8 56 8 24.296 34.345-1.254 66.338.048c28.468 1.158 51.779 23.968 53.551 52.404.52 8.342-.81 16.31-3.586 23.562C137.039 68.384 159.393 64 184.348 64c67.373 0 111.63 34.783 165.217 34.783 40.496 0 82.612-15.906 116.95-31.855zM96 134.63v70.49c29-10.67 51.18-17.83 73.6-20.91v-71.57c-23.5 2.17-40.44 9.79-73.6 21.99zm220.8 9.19c-26.417-4.672-49.886-13.979-73.6-21.34v67.42c24.175 6.706 47.566 16.444 73.6 22.31v-68.39zm-147.2 40.39v70.04c32.796-2.978 53.91-.635 73.6 3.8V189.9c-25.247-7.035-46.581-9.423-73.6-5.69zm73.6 142.23c26.338 4.652 49.732 13.927 73.6 21.34v-67.41c-24.277-6.746-47.54-16.45-73.6-22.32v68.39zM96 342.1c23.62-8.39 47.79-13.84 73.6-16.56v-71.29c-26.11 2.35-47.36 8.04-73.6 17.36v70.49zm368-221.6c-21.3 8.85-46.59 17.64-73.6 22.47v71.91c27.31-4.36 50.03-14.1 73.6-23.89V120.5zm0 209.96v-70.49c-22.19 14.2-48.78 22.61-73.6 26.02v71.58c25.07-2.38 48.49-11.04 73.6-27.11zM316.8 212.21v68.16c25.664 7.134 46.616 9.342 73.6 5.62v-71.11c-25.999 4.187-49.943 2.676-73.6-2.67z\"],flask:[448,512,[],\"f0c3\",\"M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z\"],flushed:[496,512,[],\"f579\",\"M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z\"],folder:[512,512,[],\"f07b\",\"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z\"],\"folder-open\":[576,512,[],\"f07c\",\"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z\"],font:[448,512,[],\"f031\",\"M152 416h-24.013l26.586-80.782H292.8L319.386 416H296c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-26.739L275.495 42.746A16 16 0 0 0 260.382 32h-72.766a16 16 0 0 0-15.113 10.746L42.739 416H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm64.353-271.778c4.348-15.216 6.61-28.156 7.586-34.644.839 6.521 2.939 19.476 7.727 34.706l41.335 124.006h-98.619l41.971-124.068z\"],\"font-awesome-logo-full\":[3992,512,[\"Font Awesome\"],\"f4e6\",\"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"],\"football-ball\":[496,512,[],\"f44e\",\"M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z\"],forward:[512,512,[],\"f04e\",\"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"],frog:[576,512,[],\"f52e\",\"M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"],frown:[496,512,[],\"f119\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"],\"frown-open\":[496,512,[],\"f57a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],futbol:[512,512,[],\"f1e3\",\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z\"],gamepad:[640,512,[],\"f11b\",\"M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"],\"gas-pump\":[512,512,[],\"f52f\",\"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"],gavel:[512,512,[],\"f0e3\",\"M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z\"],gem:[576,512,[],\"f3a5\",\"M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z\"],genderless:[288,512,[],\"f22d\",\"M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z\"],gift:[512,512,[],\"f06b\",\"M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm448-288h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40zm-72 320h160c17.7 0 32-14.3 32-32V320H288v160z\"],\"glass-martini\":[512,512,[],\"f000\",\"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z\"],\"glass-martini-alt\":[512,512,[],\"f57b\",\"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z\"],glasses:[576,512,[],\"f530\",\"M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z\"],globe:[496,512,[],\"f0ac\",\"M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z\"],\"globe-africa\":[496,512,[],\"f57c\",\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"],\"globe-americas\":[496,512,[],\"f57d\",\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"],\"globe-asia\":[496,512,[],\"f57e\",\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z\"],\"golf-ball\":[416,512,[],\"f450\",\"M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z\"],\"graduation-cap\":[640,512,[],\"f19d\",\"M622.884 199.005l-275.817 85.1a96 96 0 0 1-54.134 0L92.398 222.232c-8.564 11.438-11.018 23.05-11.918 38.335C89.778 266.165 96 276.355 96 288c0 11.952-6.557 22.366-16.265 27.861l16.197 123.096c.63 4.786-3.1 9.043-7.932 9.043H40c-4.828 0-8.562-4.253-7.932-9.044L48.265 315.86C38.557 310.366 32 299.952 32 288c0-12.034 6.646-22.511 16.465-27.976.947-17.951 3.974-33.231 12.152-47.597l-43.502-13.422c-22.876-6.801-22.766-39.241 0-46.01l275.817-85.1a96 96 0 0 1 54.134 0l275.817 85.1c22.877 6.801 22.767 39.241.001 46.01zM356.503 314.682l-.207.064-.207.061a127.998 127.998 0 0 1-72.177 0l-.207-.061-.207-.064-150.914-46.57L120 352c0 35.346 89.543 64 200 64s200-28.654 200-64l-12.583-83.888-150.914 46.57z\"],\"greater-than\":[384,512,[],\"f531\",\"M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z\"],\"greater-than-equal\":[448,512,[],\"f532\",\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"],grimace:[496,512,[],\"f57f\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z\"],grin:[496,512,[],\"f580\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"],\"grin-alt\":[496,512,[],\"f581\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"],\"grin-beam\":[496,512,[],\"f582\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"],\"grin-beam-sweat\":[504,512,[],\"f583\",\"M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"],\"grin-hearts\":[496,512,[],\"f584\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z\"],\"grin-squint\":[496,512,[],\"f585\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"],\"grin-squint-tears\":[512,512,[],\"f586\",\"M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z\"],\"grin-stars\":[496,512,[],\"f587\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z\"],\"grin-tears\":[640,512,[],\"f588\",\"M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"],\"grin-tongue\":[496,512,[],\"f589\",\"M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"],\"grin-tongue-squint\":[496,512,[],\"f58a\",\"M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z\"],\"grin-tongue-wink\":[496,512,[],\"f58b\",\"M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"],\"grin-wink\":[496,512,[],\"f58c\",\"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"],\"grip-horizontal\":[448,512,[],\"f58d\",\"M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"],\"grip-vertical\":[320,512,[],\"f58e\",\"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"],\"h-square\":[448,512,[],\"f0fd\",\"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z\"],\"hand-holding\":[576,512,[],\"f4bd\",\"M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"],\"hand-holding-heart\":[576,512,[],\"f4be\",\"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"],\"hand-holding-usd\":[544,512,[],\"f4c0\",\"M257.6 144.3l50 14.3c3.6 1 6.1 4.4 6.1 8.1 0 4.6-3.8 8.4-8.4 8.4h-32.8c-3.6 0-7.1-.8-10.3-2.2-4.8-2.2-10.4-1.7-14.1 2l-17.5 17.5c-5.3 5.3-4.7 14.3 1.5 18.4 9.5 6.3 20.3 10.1 31.8 11.5V240c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16v-17.6c30.3-3.6 53.3-31 49.3-63-2.9-23-20.7-41.3-42.9-47.7l-50-14.3c-3.6-1-6.1-4.4-6.1-8.1 0-4.6 3.8-8.4 8.4-8.4h32.8c3.6 0 7.1.8 10.3 2.2 4.8 2.2 10.4 1.7 14.1-2l17.5-17.5c5.3-5.3 4.7-14.3-1.5-18.4-9.5-6.3-20.3-10.1-31.8-11.5V16c0-8.8-7.2-16-16-16h-16c-8.8 0-16 7.2-16 16v17.6c-30.3 3.6-53.3 31-49.3 63 2.9 23 20.7 41.3 42.9 47.7zm276.3 183.8c-11.2-10.7-28.5-10-40.3 0L406.4 402c-10.7 9.1-24 14-37.8 14H256.9c-8.3 0-15.1-7.2-15.1-16s6.8-16 15.1-16h73.9c15.1 0 29-10.9 31.4-26.6 3.1-20-11.5-37.4-29.8-37.4H181.3c-25.5 0-50.2 9.3-69.9 26.3L67.5 384H15.1C6.8 384 0 391.2 0 400v96c0 8.8 6.8 16 15.1 16H352c13.7 0 27-4.9 37.8-14l142.8-121c14.4-12.1 15.5-35.3 1.3-48.9z\"],\"hand-lizard\":[576,512,[],\"f258\",\"M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z\"],\"hand-paper\":[448,512,[],\"f256\",\"M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z\"],\"hand-peace\":[448,512,[],\"f25b\",\"M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z\"],\"hand-point-down\":[384,512,[],\"f0a7\",\"M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"],\"hand-point-left\":[512,512,[],\"f0a5\",\"M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z\"],\"hand-point-right\":[512,512,[],\"f0a4\",\"M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"],\"hand-point-up\":[384,512,[],\"f0a6\",\"M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"],\"hand-pointer\":[448,512,[],\"f25a\",\"M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z\"],\"hand-rock\":[512,512,[],\"f255\",\"M512 128.79c0-26.322-20.861-48.344-47.18-48.783C437.935 79.558 416 101.217 416 128h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C333.935 47.558 312 69.217 312 96v32h-8V80.79c0-26.322-20.861-48.344-47.18-48.783C229.935 31.558 208 53.217 208 80v48h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C125.935 47.558 104 69.217 104 96v136l-8-7.111V176.79c0-26.322-20.861-48.344-47.18-48.783C21.935 127.558 0 149.217 0 176v66.445a95.998 95.998 0 0 0 32.221 71.751l111.668 99.261A47.999 47.999 0 0 1 160 449.333V456c0 13.255 10.745 24 24 24h240c13.255 0 24-10.745 24-24v-2.921a96.01 96.01 0 0 1 7.523-37.254l48.954-116.265A96.002 96.002 0 0 0 512 262.306V128.79z\"],\"hand-scissors\":[512,512,[],\"f257\",\"M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z\"],\"hand-spock\":[512,512,[],\"f259\",\"M10.872 316.585c15.139-16.086 40.454-16.854 56.543-1.713L128 371.893v-79.405L88.995 120.865c-4.896-21.542 8.598-42.974 30.14-47.87 21.549-4.894 42.975 8.599 47.87 30.141L201.747 256h9.833L164.016 48.966c-4.946-21.531 8.498-42.994 30.028-47.94 21.532-4.95 42.994 8.498 47.94 30.028L293.664 256h15.105l48.425-193.702c5.357-21.432 27.075-34.462 48.507-29.104 21.432 5.358 34.463 27.075 29.104 48.507L391.231 256h11.08l30.768-129.265c5.117-21.491 26.685-34.768 48.177-29.647 21.491 5.117 34.765 26.686 29.647 48.177l-36.292 152.467A96.024 96.024 0 0 0 472 319.967v42.102a96.002 96.002 0 0 1-3.96 27.287l-26.174 88.287C435.825 498.022 417.101 512 395.846 512H179.172a48.002 48.002 0 0 1-32.898-13.046L12.585 373.128c-16.087-15.141-16.853-40.456-1.713-56.543z\"],hands:[640,512,[],\"f4c2\",\"M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z\"],\"hands-helping\":[640,512,[],\"f4c4\",\"M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z\"],handshake:[640,512,[],\"f2b5\",\"M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z\"],hashtag:[448,512,[],\"f292\",\"M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z\"],hdd:[576,512,[],\"f0a0\",\"M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"],heading:[512,512,[],\"f1dc\",\"M496 80V48c0-8.837-7.163-16-16-16H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.621v128H154.379V96H192c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.275v320H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.621V288H357.62v128H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.275V96H480c8.837 0 16-7.163 16-16z\"],headphones:[512,512,[],\"f025\",\"M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z\"],\"headphones-alt\":[512,512,[],\"f58f\",\"M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z\"],headset:[512,512,[],\"f590\",\"M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z\"],heart:[512,512,[],\"f004\",\"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"],heartbeat:[512,512,[],\"f21e\",\"M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z\"],helicopter:[640,512,[],\"f533\",\"M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z\"],highlighter:[544,512,[],\"f591\",\"M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z\"],history:[512,512,[],\"f1da\",\"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z\"],\"hockey-puck\":[512,512,[],\"f453\",\"M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z\"],home:[576,512,[],\"f015\",\"M488 312.7V456c0 13.3-10.7 24-24 24H348c-6.6 0-12-5.4-12-12V356c0-6.6-5.4-12-12-12h-72c-6.6 0-12 5.4-12 12v112c0 6.6-5.4 12-12 12H112c-13.3 0-24-10.7-24-24V312.7c0-3.6 1.6-7 4.4-9.3l188-154.8c4.4-3.6 10.8-3.6 15.3 0l188 154.8c2.7 2.3 4.3 5.7 4.3 9.3zm83.6-60.9L488 182.9V44.4c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12V117l-89.5-73.7c-17.7-14.6-43.3-14.6-61 0L4.4 251.8c-5.1 4.2-5.8 11.8-1.6 16.9l25.5 31c4.2 5.1 11.8 5.8 16.9 1.6l235.2-193.7c4.4-3.6 10.8-3.6 15.3 0l235.2 193.7c5.1 4.2 12.7 3.5 16.9-1.6l25.5-31c4.2-5.2 3.4-12.7-1.7-16.9z\"],hospital:[448,512,[],\"f0f8\",\"M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z\"],\"hospital-alt\":[576,512,[],\"f47d\",\"M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"],\"hospital-symbol\":[512,512,[],\"f47e\",\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z\"],\"hot-tub\":[512,512,[],\"f593\",\"M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z\"],hotel:[576,512,[],\"f594\",\"M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"],hourglass:[384,512,[],\"f254\",\"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z\"],\"hourglass-end\":[384,512,[],\"f253\",\"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z\"],\"hourglass-half\":[384,512,[],\"f252\",\"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z\"],\"hourglass-start\":[384,512,[],\"f251\",\"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z\"],\"i-cursor\":[256,512,[],\"f246\",\"M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z\"],\"id-badge\":[384,512,[],\"f2c1\",\"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"],\"id-card\":[576,512,[],\"f2c2\",\"M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z\"],\"id-card-alt\":[576,512,[],\"f47f\",\"M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z\"],image:[512,512,[],\"f03e\",\"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"],images:[576,512,[],\"f302\",\"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z\"],inbox:[576,512,[],\"f01c\",\"M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z\"],indent:[448,512,[],\"f03c\",\"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm176 144h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm-52.687-111.313l-96-95.984C17.266 138.652 0 145.776 0 160.016v191.975c0 14.329 17.325 21.304 27.313 11.313l96-95.992c6.249-6.247 6.249-16.377 0-22.625z\"],industry:[512,512,[],\"f275\",\"M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z\"],infinity:[640,512,[],\"f534\",\"M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z\"],info:[192,512,[],\"f129\",\"M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z\"],\"info-circle\":[512,512,[],\"f05a\",\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"],italic:[320,512,[],\"f033\",\"M204.758 416h-33.849l62.092-320h40.725a16 16 0 0 0 15.704-12.937l6.242-32C297.599 41.184 290.034 32 279.968 32H120.235a16 16 0 0 0-15.704 12.937l-6.242 32C96.362 86.816 103.927 96 113.993 96h33.846l-62.09 320H46.278a16 16 0 0 0-15.704 12.935l-6.245 32C22.402 470.815 29.967 480 40.034 480h158.479a16 16 0 0 0 15.704-12.935l6.245-32c1.927-9.88-5.638-19.065-15.704-19.065z\"],joint:[640,512,[],\"f595\",\"M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z\"],key:[512,512,[],\"f084\",\"M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z\"],keyboard:[576,512,[],\"f11c\",\"M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"],kiss:[496,512,[],\"f596\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],\"kiss-beam\":[496,512,[],\"f597\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z\"],\"kiss-wink-heart\":[504,512,[],\"f598\",\"M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z\"],\"kiwi-bird\":[576,512,[],\"f535\",\"M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z\"],language:[640,512,[],\"f1ab\",\"M304 416H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h280v320zm-120.676-72.622A12 12 0 0 0 194.839 352h22.863c8.22 0 14.007-8.078 11.362-15.861L171.61 167.085a12 12 0 0 0-11.362-8.139h-32.489a12.001 12.001 0 0 0-11.362 8.139L58.942 336.139C56.297 343.922 62.084 352 70.304 352h22.805a12 12 0 0 0 11.535-8.693l9.118-31.807h60.211l9.351 31.878zm-39.051-140.42s4.32 21.061 7.83 33.21l10.8 37.531h-38.07l11.07-37.531c3.51-12.15 7.83-33.21 7.83-33.21h.54zM616 416H336V96h280c13.255 0 24 10.745 24 24v272c0 13.255-10.745 24-24 24zm-36-228h-64v-16c0-6.627-5.373-12-12-12h-16c-6.627 0-12 5.373-12 12v16h-64c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h114.106c-6.263 14.299-16.518 28.972-30.023 43.206-6.56-6.898-12.397-13.91-17.365-20.933-3.639-5.144-10.585-6.675-15.995-3.446l-7.28 4.346-6.498 3.879c-5.956 3.556-7.693 11.421-3.735 17.117 6.065 8.729 13.098 17.336 20.984 25.726-8.122 6.226-16.841 12.244-26.103 17.964-5.521 3.41-7.381 10.556-4.162 16.19l7.941 13.896c3.362 5.883 10.935 7.826 16.706 4.276 12.732-7.831 24.571-16.175 35.443-24.891 10.917 8.761 22.766 17.102 35.396 24.881 5.774 3.556 13.353 1.618 16.717-4.27l7.944-13.903c3.213-5.623 1.37-12.76-4.135-16.171a312.737 312.737 0 0 1-26.06-18.019c21.024-22.425 35.768-46.289 42.713-69.85H580c6.627 0 12-5.373 12-12v-16c0-6.625-5.373-11.998-12-11.998z\"],laptop:[640,512,[],\"f109\",\"M512 64v256H128V64h384m16-64H112C85.5 0 64 21.5 64 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm100 416H389.5c-3 0-5.5 2.1-5.9 5.1C381.2 436.3 368 448 352 448h-64c-16 0-29.2-11.7-31.6-26.9-.5-2.9-3-5.1-5.9-5.1H12c-6.6 0-12 5.4-12 12v36c0 26.5 21.5 48 48 48h544c26.5 0 48-21.5 48-48v-36c0-6.6-5.4-12-12-12z\"],laugh:[496,512,[],\"f599\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z\"],\"laugh-beam\":[496,512,[],\"f59a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"],\"laugh-squint\":[496,512,[],\"f59b\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"],\"laugh-wink\":[496,512,[],\"f59c\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"],leaf:[576,512,[],\"f06c\",\"M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z\"],lemon:[512,512,[],\"f094\",\"M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z\"],\"less-than\":[384,512,[],\"f536\",\"M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z\"],\"less-than-equal\":[448,512,[],\"f537\",\"M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"],\"level-down-alt\":[320,512,[],\"f3be\",\"M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z\"],\"level-up-alt\":[320,512,[],\"f3bf\",\"M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z\"],\"life-ring\":[512,512,[],\"f1cd\",\"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z\"],lightbulb:[384,512,[],\"f0eb\",\"M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zm-143.107-44c-9.907 0-18.826-6.078-22.376-15.327C67.697 267.541 16 277.731 16 176 16 78.803 94.805 0 192 0s176 78.803 176 176c0 101.731-51.697 91.541-90.516 192.673-3.55 9.249-12.47 15.327-22.376 15.327H128.893zM112 176c0-44.112 35.888-80 80-80 8.837 0 16-7.164 16-16s-7.163-16-16-16c-61.757 0-112 50.243-112 112 0 8.836 7.164 16 16 16s16-7.164 16-16z\"],link:[512,512,[],\"f0c1\",\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"],\"lira-sign\":[384,512,[],\"f195\",\"M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z\"],list:[512,512,[],\"f03a\",\"M128 116V76c0-8.837 7.163-16 16-16h352c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H144c-8.837 0-16-7.163-16-16zm16 176h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 144h64c8.837 0 16-7.163 16-16V64c0-8.837-7.163-16-16-16H16C7.163 48 0 55.163 0 64v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16z\"],\"list-alt\":[512,512,[],\"f022\",\"M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z\"],\"list-ol\":[512,512,[],\"f0cb\",\"M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"],\"list-ul\":[512,512,[],\"f0ca\",\"M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"],\"location-arrow\":[512,512,[],\"f124\",\"M443.683 4.529L27.818 196.418C-18.702 217.889-3.39 288 47.933 288H224v175.993c0 51.727 70.161 66.526 91.582 20.115L507.38 68.225c18.905-40.961-23.752-82.133-63.697-63.696z\"],lock:[448,512,[],\"f023\",\"M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z\"],\"lock-open\":[576,512,[],\"f3c1\",\"M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z\"],\"long-arrow-alt-down\":[256,512,[],\"f309\",\"M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z\"],\"long-arrow-alt-left\":[448,512,[],\"f30a\",\"M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z\"],\"long-arrow-alt-right\":[448,512,[],\"f30b\",\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"],\"long-arrow-alt-up\":[256,512,[],\"f30c\",\"M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z\"],\"low-vision\":[576,512,[],\"f2a8\",\"M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z\"],\"luggage-cart\":[640,512,[],\"f59d\",\"M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z\"],magic:[512,512,[],\"f0d0\",\"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"],magnet:[512,512,[],\"f076\",\"M164.1 160H12c-6.6 0-12-5.4-12-12V68c0-19.9 16.1-36 36-36h104c19.9 0 36 16.1 36 36v80c.1 6.6-5.3 12-11.9 12zm348-12V67.9c0-19.9-16.1-36-36-36h-104c-19.9 0-36 16.1-36 36v80c0 6.6 5.4 12 12 12h152c6.6.1 12-5.3 12-11.9zm-164 44c-6.6 0-12 5.4-12 12v52c0 128.1-160 127.9-160 0v-52c0-6.6-5.4-12-12-12h-152c-6.7 0-12 5.4-12 12.1.1 21.4.6 40.3 0 53.3C.1 408 136.3 504 256.9 504 377.5 504 512 408 512 257.3c-.6-12.8-.2-33 0-53.2 0-6.7-5.3-12.1-12-12.1H348.1z\"],male:[192,512,[],\"f183\",\"M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z\"],map:[576,512,[],\"f279\",\"M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z\"],\"map-marked\":[576,512,[],\"f59f\",\"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"],\"map-marked-alt\":[576,512,[],\"f5a0\",\"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"],\"map-marker\":[384,512,[],\"f041\",\"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z\"],\"map-marker-alt\":[384,512,[],\"f3c5\",\"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"],\"map-pin\":[320,512,[],\"f276\",\"M192 300.813v172.82l-22.015 33.023c-4.75 7.125-15.219 7.125-19.969 0L128 473.633v-172.82a162.221 162.221 0 0 0 64 0zM160 0c79.529 0 144 64.471 144 144s-64.471 144-144 144S16 223.529 16 144 80.471 0 160 0M80 136c0-39.701 32.299-72 72-72a8 8 0 0 0 0-16c-48.523 0-88 39.477-88 88a8 8 0 0 0 16 0z\"],\"map-signs\":[512,512,[],\"f277\",\"M487.515 104.485L439.03 152.97a23.998 23.998 0 0 1-16.97 7.029H56c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h160v-8c0-13.255 10.745-24 24-24h32c13.255 0 24 10.745 24 24v8h126.059a24 24 0 0 1 16.97 7.029l48.485 48.485c4.687 4.687 4.687 12.285.001 16.971zM216 368v120c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V368h-80zm240-144H296v-48h-80v48H89.941a24 24 0 0 0-16.97 7.029l-48.485 48.485c-4.686 4.686-4.686 12.284 0 16.971l48.485 48.485a23.998 23.998 0 0 0 16.97 7.029H456c13.255 0 24-10.745 24-24v-80C480 234.745 469.255 224 456 224z\"],marker:[512,512,[],\"f5a1\",\"M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z\"],mars:[384,512,[],\"f222\",\"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"],\"mars-double\":[512,512,[],\"f227\",\"M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z\"],\"mars-stroke\":[384,512,[],\"f229\",\"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"],\"mars-stroke-h\":[480,512,[],\"f22b\",\"M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"],\"mars-stroke-v\":[288,512,[],\"f22a\",\"M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"],medal:[512,512,[],\"f5a2\",\"M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z\"],medkit:[512,512,[],\"f0fa\",\"M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z\"],meh:[496,512,[],\"f11a\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],\"meh-blank\":[496,512,[],\"f5a4\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],\"meh-rolling-eyes\":[496,512,[],\"f5a5\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z\"],memory:[640,512,[],\"f538\",\"M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z\"],mercury:[288,512,[],\"f223\",\"M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"],microchip:[512,512,[],\"f2db\",\"M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z\"],microphone:[352,512,[],\"f130\",\"M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z\"],\"microphone-alt\":[352,512,[],\"f3c9\",\"M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z\"],\"microphone-alt-slash\":[640,512,[],\"f539\",\"M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"],\"microphone-slash\":[640,512,[],\"f131\",\"M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"],minus:[448,512,[],\"f068\",\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"],\"minus-circle\":[512,512,[],\"f056\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"],\"minus-square\":[448,512,[],\"f146\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"],mobile:[320,512,[],\"f10b\",\"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],\"mobile-alt\":[320,512,[],\"f3cd\",\"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z\"],\"money-bill\":[640,512,[],\"f0d6\",\"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"],\"money-bill-alt\":[640,512,[],\"f3d1\",\"M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"],\"money-bill-wave\":[640,512,[],\"f53a\",\"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z\"],\"money-bill-wave-alt\":[640,512,[],\"f53b\",\"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z\"],\"money-check\":[640,512,[],\"f53c\",\"M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z\"],\"money-check-alt\":[640,512,[],\"f53d\",\"M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z\"],monument:[384,512,[],\"f5a6\",\"M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"],moon:[512,512,[],\"f186\",\"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z\"],\"mortar-pestle\":[512,512,[],\"f5a7\",\"M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"],motorcycle:[640,512,[],\"f21c\",\"M512.949 192.003c-14.862-.108-29.14 2.322-42.434 6.874L437.589 144H520c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24h-45.311a24 24 0 0 0-17.839 7.945l-37.496 41.663-22.774-37.956A24 24 0 0 0 376 64h-80c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h66.411l19.2 32H227.904c-17.727-23.073-44.924-40-99.904-40H72.54c-13.455 0-24.791 11.011-24.536 24.464C48.252 141.505 58.9 152 72 152h56c24.504 0 38.686 10.919 47.787 24.769l-11.291 20.529c-13.006-3.865-26.871-5.736-41.251-5.21C55.857 194.549 1.565 249.605.034 317.021-1.603 389.076 56.317 448 128 448c59.642 0 109.744-40.794 123.953-96h84.236c13.673 0 24.589-11.421 23.976-25.077-2.118-47.12 17.522-93.665 56.185-125.026l12.485 20.808c-27.646 23.654-45.097 58.88-44.831 98.179.47 69.556 57.203 126.452 126.758 127.11 71.629.678 129.839-57.487 129.234-129.099-.588-69.591-57.455-126.386-127.047-126.892zM128 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c4.242 0 8.405.341 12.469.982L98.97 316.434C90.187 332.407 101.762 352 120 352h81.297c-12.37 28.225-40.56 48-73.297 48zm388.351-.116C470.272 402.337 432 365.554 432 320c0-21.363 8.434-40.781 22.125-55.144l49.412 82.352c4.546 7.577 14.375 10.034 21.952 5.488l13.72-8.232c7.577-4.546 10.034-14.375 5.488-21.952l-48.556-80.927A80.005 80.005 0 0 1 512 240c45.554 0 82.338 38.273 79.884 84.352-2.16 40.558-34.974 73.372-75.533 75.532z\"],\"mouse-pointer\":[320,512,[],\"f245\",\"M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z\"],music:[512,512,[],\"f001\",\"M470.4 1.5l-304 96C153.1 101.7 144 114 144 128v264.6c-14.1-5.4-30.5-8.6-48-8.6-53 0-96 28.7-96 64s43 64 96 64 96-28.7 96-64V220.5l272-85.9v194c-14.1-5.4-30.5-8.6-48-8.6-53 0-96 28.7-96 64s43 64 96 64 96-28.7 96-64V32c0-21.7-21.1-37-41.6-30.5z\"],neuter:[288,512,[],\"f22c\",\"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"],newspaper:[576,512,[],\"f1ea\",\"M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z\"],\"not-equal\":[448,512,[],\"f53e\",\"M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z\"],\"notes-medical\":[384,512,[],\"f481\",\"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z\"],\"object-group\":[512,512,[],\"f247\",\"M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z\"],\"object-ungroup\":[576,512,[],\"f248\",\"M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z\"],outdent:[448,512,[],\"f03b\",\"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm208 144h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm192-128h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM4.687 267.313l96 95.984C110.734 373.348 128 366.224 128 351.984V160.008c0-14.329-17.325-21.304-27.313-11.313l-96 95.992c-6.249 6.248-6.249 16.378 0 22.626z\"],\"paint-brush\":[512,512,[],\"f1fc\",\"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z\"],\"paint-roller\":[512,512,[],\"f5aa\",\"M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z\"],palette:[512,512,[],\"f53f\",\"M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],pallet:[640,512,[],\"f482\",\"M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z\"],\"paper-plane\":[512,512,[],\"f1d8\",\"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\"],paperclip:[448,512,[],\"f0c6\",\"M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z\"],\"parachute-box\":[512,512,[],\"f4cd\",\"M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z\"],paragraph:[448,512,[],\"f1dd\",\"M408 32H177.531C88.948 32 16.045 103.335 16 191.918 15.956 280.321 87.607 352 176 352v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h32v344c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h40c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24z\"],parking:[448,512,[],\"f540\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z\"],passport:[448,512,[],\"f5ab\",\"M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z\"],paste:[448,512,[],\"f0ea\",\"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"],pause:[448,512,[],\"f04c\",\"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z\"],\"pause-circle\":[512,512,[],\"f28b\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z\"],paw:[512,512,[],\"f1b0\",\"M85.231 330.958C36 330.958 0 273.792 0 231.5c0-28.292 16-58.042 49.538-58.042 49.231 0 85.231 57.458 85.231 99.75 0 28.292-15.692 57.75-49.538 57.75zm348 106.167c0 37.042-32 42.875-63.385 42.875-41.231 0-74.462-26.25-113.846-26.25-41.231 0-76.308 25.958-120.923 25.958-29.847 0-56.308-9.625-56.308-42.583C78.769 368 180.616 265.333 256 265.333s177.231 102.959 177.231 171.792zM182.462 203.792c-49.847 0-80-59.5-80-100.333C102.462 70.792 120.308 32 160 32c50.154 0 80 59.5 80 100.333 0 32.667-17.846 71.459-57.538 71.459zM272 132.333C272 91.5 301.846 32 352 32c39.692 0 57.539 38.792 57.539 71.458 0 40.833-30.154 100.333-80.001 100.333C289.846 203.792 272 165 272 132.333zM512 231.5c0 42.292-36 99.458-85.231 99.458-33.847 0-49.538-29.458-49.538-57.75 0-42.291 35.999-99.75 85.231-99.75C496 173.458 512 203.208 512 231.5z\"],pen:[512,512,[],\"f304\",\"M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z\"],\"pen-alt\":[512,512,[],\"f305\",\"M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z\"],\"pen-fancy\":[512,512,[],\"f5ac\",\"M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z\"],\"pen-nib\":[512,512,[],\"f5ad\",\"M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z\"],\"pen-square\":[448,512,[],\"f14b\",\"M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z\"],\"pencil-alt\":[512,512,[],\"f303\",\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"],\"pencil-ruler\":[512,512,[],\"f5ae\",\"M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z\"],\"people-carry\":[640,512,[],\"f4ce\",\"M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z\"],percent:[448,512,[],\"f295\",\"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z\"],percentage:[384,512,[],\"f541\",\"M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z\"],phone:[512,512,[],\"f095\",\"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"],\"phone-slash\":[640,512,[],\"f3dd\",\"M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"],\"phone-square\":[448,512,[],\"f098\",\"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z\"],\"phone-volume\":[384,512,[],\"f2a0\",\"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"],\"piggy-bank\":[576,512,[],\"f4d3\",\"M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z\"],pills:[576,512,[],\"f484\",\"M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z\"],plane:[576,512,[],\"f072\",\"M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z\"],\"plane-arrival\":[640,512,[],\"f5af\",\"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z\"],\"plane-departure\":[640,512,[],\"f5b0\",\"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z\"],play:[448,512,[],\"f04b\",\"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"],\"play-circle\":[512,512,[],\"f144\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z\"],plug:[384,512,[],\"f1e6\",\"M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z\"],plus:[448,512,[],\"f067\",\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"],\"plus-circle\":[512,512,[],\"f055\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],podcast:[448,512,[],\"f2ce\",\"M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z\"],poo:[512,512,[],\"f2fe\",\"M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],portrait:[384,512,[],\"f3e0\",\"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"],\"pound-sign\":[320,512,[],\"f154\",\"M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z\"],\"power-off\":[512,512,[],\"f011\",\"M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z\"],prescription:[384,512,[],\"f5b1\",\"M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z\"],\"prescription-bottle\":[384,512,[],\"f485\",\"M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z\"],\"prescription-bottle-alt\":[384,512,[],\"f486\",\"M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z\"],print:[512,512,[],\"f02f\",\"M464 192h-16V81.941a24 24 0 0 0-7.029-16.97L383.029 7.029A24 24 0 0 0 366.059 0H88C74.745 0 64 10.745 64 24v168H48c-26.51 0-48 21.49-48 48v132c0 6.627 5.373 12 12 12h52v104c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V384h52c6.627 0 12-5.373 12-12V240c0-26.51-21.49-48-48-48zm-80 256H128v-96h256v96zM128 224V64h192v40c0 13.2 10.8 24 24 24h40v96H128zm304 72c-13.254 0-24-10.746-24-24s10.746-24 24-24 24 10.746 24 24-10.746 24-24 24z\"],procedures:[640,512,[],\"f487\",\"M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"],\"project-diagram\":[640,512,[],\"f542\",\"M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z\"],\"puzzle-piece\":[576,512,[],\"f12e\",\"M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z\"],qrcode:[448,512,[],\"f029\",\"M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z\"],question:[384,512,[],\"f128\",\"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"],\"question-circle\":[512,512,[],\"f059\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\"],quidditch:[640,512,[],\"f458\",\"M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z\"],\"quote-left\":[512,512,[],\"f10d\",\"M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"],\"quote-right\":[512,512,[],\"f10e\",\"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z\"],random:[512,512,[],\"f074\",\"M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z\"],receipt:[384,512,[],\"f543\",\"M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z\"],recycle:[512,512,[],\"f1b8\",\"M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z\"],redo:[512,512,[],\"f01e\",\"M500.333 0h-47.411c-6.853 0-12.314 5.729-11.986 12.574l3.966 82.759C399.416 41.899 331.672 8 256.001 8 119.34 8 7.899 119.526 8 256.187 8.101 393.068 119.096 504 256 504c63.926 0 122.202-24.187 166.178-63.908 5.113-4.618 5.354-12.561.482-17.433l-33.971-33.971c-4.466-4.466-11.64-4.717-16.38-.543C341.308 415.448 300.606 432 256 432c-97.267 0-176-78.716-176-176 0-97.267 78.716-176 176-176 60.892 0 114.506 30.858 146.099 77.8l-101.525-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12z\"],\"redo-alt\":[512,512,[],\"f2f9\",\"M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z\"],registered:[512,512,[],\"f25d\",\"M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z\"],reply:[512,512,[],\"f3e5\",\"M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z\"],\"reply-all\":[576,512,[],\"f122\",\"M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z\"],retweet:[640,512,[],\"f079\",\"M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z\"],ribbon:[448,512,[],\"f4d6\",\"M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z\"],road:[576,512,[],\"f018\",\"M567.3 383.6L429.9 78.2C426 69.5 417.4 64 408 64h-96.1l1.9 18.8c.7 7.1-4.8 13.2-11.9 13.2H274c-7.1 0-12.7-6.2-11.9-13.2L264 64h-96c-9.4 0-18 5.5-21.9 14.2L8.7 383.6C3.2 395.8 0 409.6 0 424c0 13.3 10.7 24 24 24h213.6c-7.1 0-12.7-6.2-11.9-13.2l10.8-104c.6-6.1 5.8-10.8 11.9-10.8h79.2c6.1 0 11.3 4.6 11.9 10.8l10.8 104c.7 7.1-4.8 13.2-11.9 13.2H552c13.2 0 24-10.7 24-24 0-13.9-3-27.7-8.7-40.4zM254.7 154.8l3.3-32c.6-6.1 5.8-10.8 11.9-10.8h36.2c6.1 0 11.3 4.6 11.9 10.8l3.3 32c.7 7.1-4.8 13.2-11.9 13.2h-42.8c-7.1 0-12.7-6.2-11.9-13.2zM321.8 288h-67.6c-7.1 0-12.7-6.2-11.9-13.2l7.4-72c.6-6.1 5.8-10.8 11.9-10.8h52.7c6.1 0 11.3 4.6 11.9 10.8l7.4 72c.9 7-4.7 13.2-11.8 13.2z\"],robot:[640,512,[],\"f544\",\"M0 256v128c0 17.7 14.3 32 32 32h32V224H32c-17.7 0-32 14.3-32 32zM464 96H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H176c-44.2 0-80 35.8-80 80v272c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V176c0-44.2-35.8-80-80-80zM256 416h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm128 120h-64v-32h64v32zm96 0h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm192-72h-32v192h32c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32z\"],rocket:[512,512,[],\"f135\",\"M505.1 19.1C503.8 13 499 8.2 492.9 6.9 460.7 0 435.5 0 410.4 0 307.2 0 245.3 55.2 199.1 128H94.9c-18.2 0-34.8 10.3-42.9 26.5L2.6 253.3c-8 16 3.6 34.7 21.5 34.7h95.1c-5.9 12.8-11.9 25.5-18 37.7-3.1 6.2-1.9 13.6 3 18.5l63.6 63.6c4.9 4.9 12.3 6.1 18.5 3 12.2-6.1 24.9-12 37.7-17.9V488c0 17.8 18.8 29.4 34.7 21.5l98.7-49.4c16.3-8.1 26.5-24.8 26.5-42.9V312.8c72.6-46.3 128-108.4 128-211.1.1-25.2.1-50.4-6.8-82.6zM400 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"],rss:[448,512,[],\"f09e\",\"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"],\"rss-square\":[448,512,[],\"f143\",\"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z\"],\"ruble-sign\":[384,512,[],\"f158\",\"M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z\"],ruler:[640,512,[],\"f545\",\"M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z\"],\"ruler-combined\":[512,512,[],\"f546\",\"M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"],\"ruler-horizontal\":[576,512,[],\"f547\",\"M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z\"],\"ruler-vertical\":[256,512,[],\"f548\",\"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z\"],\"rupee-sign\":[320,512,[],\"f156\",\"M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z\"],\"sad-cry\":[496,512,[],\"f5b3\",\"M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z\"],\"sad-tear\":[496,512,[],\"f5b4\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"],school:[640,512,[],\"f549\",\"M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z\"],screwdriver:[512,512,[],\"f54a\",\"M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z\"],search:[512,512,[],\"f002\",\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"],\"search-minus\":[512,512,[],\"f010\",\"M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"],\"search-plus\":[512,512,[],\"f00e\",\"M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"],seedling:[512,512,[],\"f4d8\",\"M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z\"],server:[512,512,[],\"f233\",\"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"],share:[512,512,[],\"f064\",\"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"],\"share-alt\":[448,512,[],\"f1e0\",\"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z\"],\"share-alt-square\":[448,512,[],\"f1e1\",\"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z\"],\"share-square\":[576,512,[],\"f14d\",\"M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z\"],\"shekel-sign\":[448,512,[],\"f20b\",\"M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z\"],\"shield-alt\":[512,512,[],\"f3ed\",\"M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z\"],ship:[640,512,[],\"f21a\",\"M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z\"],\"shipping-fast\":[640,512,[],\"f48b\",\"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"],\"shoe-prints\":[640,512,[],\"f54b\",\"M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z\"],\"shopping-bag\":[448,512,[],\"f290\",\"M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z\"],\"shopping-basket\":[576,512,[],\"f291\",\"M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z\"],\"shopping-cart\":[576,512,[],\"f07a\",\"M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z\"],shower:[512,512,[],\"f2cc\",\"M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z\"],\"shuttle-van\":[640,512,[],\"f5b6\",\"M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z\"],sign:[512,512,[],\"f4d9\",\"M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z\"],\"sign-in-alt\":[512,512,[],\"f2f6\",\"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"],\"sign-language\":[448,512,[],\"f2a7\",\"M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z\"],\"sign-out-alt\":[512,512,[],\"f2f5\",\"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"],signal:[640,512,[],\"f012\",\"M36 384h56c6.6 0 12 5.4 12 12v104c0 6.6-5.4 12-12 12H36c-6.6 0-12-5.4-12-12V396c0-6.6 5.4-12 12-12zm116-36v152c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V348c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-80v232c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V268c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-112v344c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V156c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zM536 12v488c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V12c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12z\"],signature:[512,512,[],\"f5b7\",\"M496 320h-91.86c-9.27 0-19.72-11.31-25.78-28.52-15.23-43.36-48.11-70.3-85.8-70.3-30.84 0-58.47 18.05-76.11 49.23L194.8 106.5C188.84 81.08 169.34 64 146.28 64c-23.05 0-42.55 17.08-48.5 42.5L56.16 284.2C50.7 307.45 37.75 320 28.33 320H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h12.33c41.97 0 78.19-34.23 90.14-85.2l23.84-101.78 29.25 222.11c1.98 15.05 13.82 27.45 28.94 28.75.99.09 1.96.13 2.93.13 14.08 0 26.64-9.27 30.69-22.95l33.03-112.34c5.88-16.72 15.84-27.52 25.41-27.52 9.58 0 19.55 10.8 25.78 28.52 15.23 43.36 48.11 70.3 85.8 70.3H496c8.84 0 16-7.16 16-16v-32c0-8.86-7.16-16.02-16-16.02z\"],sitemap:[640,512,[],\"f0e8\",\"M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"],skull:[512,512,[],\"f54c\",\"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\"],\"sliders-h\":[512,512,[],\"f1de\",\"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z\"],smile:[496,512,[],\"f118\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"],\"smile-beam\":[496,512,[],\"f5b8\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z\"],\"smile-wink\":[496,512,[],\"f4da\",\"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z\"],smoking:[640,512,[],\"f48d\",\"M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z\"],\"smoking-ban\":[512,512,[],\"f54d\",\"M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z\"],snowflake:[448,512,[],\"f2dc\",\"M444.816 301.639a24.12 24.12 0 0 0 2.661-16.978c-2.725-12.966-15.339-21.245-28.174-18.492l-87.407 25.046L264 256l67.896-35.215 87.407 25.046c12.835 2.753 25.449-5.526 28.174-18.492 2.725-12.966-5.471-25.708-18.305-28.461l-47.477-7.137 53.077-30.956c11.363-6.627 15.257-21.306 8.696-32.785-6.561-11.479-21.091-15.412-32.454-8.785l-53.077 30.956 17.621-45.104c4.057-12.606-2.768-26.146-15.247-30.245-12.478-4.099-25.883 2.797-29.94 15.402l-22.232 88.99-60.38 35.215V144l65.175-63.945c8.778-9.852 7.987-25.027-1.766-33.894-9.753-8.867-24.775-8.068-33.552 1.784l-29.857 37.967V24c0-13.255-10.637-24-23.758-24s-23.758 10.745-23.758 24v61.912l-29.857-37.967c-8.779-9.852-23.799-10.652-33.552-1.784-9.753 8.867-10.543 24.042-1.766 33.894L200.242 144v70.431l-60.38-35.215-22.232-88.99c-4.057-12.605-17.462-19.501-29.94-15.402-12.478 4.099-19.304 17.64-15.247 30.245l17.62 45.104-53.077-30.956c-11.363-6.627-25.893-2.694-32.454 8.785s-2.667 26.157 8.696 32.785l53.077 30.956-47.477 7.137C5.993 201.634-2.203 214.375.523 227.341c2.725 12.965 15.339 21.245 28.174 18.492l87.407-25.046L184 256l-67.896 35.215-87.406-25.045c-12.835-2.753-25.449 5.526-28.174 18.492-2.725 12.967 5.47 25.708 18.305 28.461l47.477 7.137-53.077 30.956C1.866 357.843-2.027 372.521 4.533 384s21.091 15.412 32.454 8.785l53.077-30.956-17.62 45.104a24.157 24.157 0 0 0 2.022 19.428c2.831 4.953 7.416 8.909 13.224 10.816 12.478 4.099 25.883-2.797 29.94-15.402l22.232-88.99 60.38-35.215V368l-65.175 63.945c-8.778 9.852-7.987 25.027 1.766 33.894 9.754 8.868 24.774 8.068 33.552-1.784l29.857-37.967V488c0 13.255 10.637 24 23.758 24s23.758-10.745 23.758-24v-61.912l29.857 37.967A23.59 23.59 0 0 0 295.282 472a23.534 23.534 0 0 0 15.885-6.161c9.753-8.867 10.544-24.042 1.766-33.894L247.758 368v-70.431l60.38 35.215 22.232 88.99c4.057 12.605 17.462 19.501 29.94 15.402 12.479-4.099 19.304-17.64 15.247-30.245l-17.621-45.104 53.077 30.956c11.363 6.627 25.893 2.694 32.454-8.785s2.667-26.157-8.696-32.785l-53.077-30.956 47.477-7.137c6.86-1.469 12.394-5.793 15.645-11.481z\"],\"solar-panel\":[640,512,[],\"f5ba\",\"M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z\"],sort:[320,512,[],\"f0dc\",\"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z\"],\"sort-alpha-down\":[448,512,[],\"f15d\",\"M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zm119.075-180.007A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z\"],\"sort-alpha-up\":[448,512,[],\"f15e\",\"M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zm301.671 98.621A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z\"],\"sort-amount-down\":[512,512,[],\"f160\",\"M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z\"],\"sort-amount-up\":[512,512,[],\"f161\",\"M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z\"],\"sort-down\":[320,512,[],\"f0dd\",\"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z\"],\"sort-numeric-down\":[448,512,[],\"f162\",\"M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM175.984 368H128V48c0-8.837-7.163-16-16-16H80c-8.837 0-16 7.163-16 16v320H16.019c-14.212 0-21.384 17.244-11.314 27.314l79.981 80.002c6.245 6.245 16.38 6.247 22.627 0l79.984-80.002c10.05-10.05 2.928-27.314-11.313-27.314z\"],\"sort-numeric-up\":[448,512,[],\"f163\",\"M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM16.016 144H64v320c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144h47.981c14.212 0 21.384-17.244 11.314-27.314l-79.981-80.002c-6.245-6.245-16.38-6.247-22.627 0L4.702 116.686C-5.347 126.736 1.775 144 16.016 144z\"],\"sort-up\":[320,512,[],\"f0de\",\"M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z\"],spa:[576,512,[],\"f5bb\",\"M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z\"],\"space-shuttle\":[640,512,[],\"f197\",\"M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z\"],spinner:[512,512,[],\"f110\",\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"],splotch:[512,512,[],\"f5bc\",\"M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z\"],\"spray-can\":[512,512,[],\"f5bd\",\"M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"square-full\":[512,512,[],\"f45c\",\"M512 512H0V0h512v512z\"],stamp:[512,512,[],\"f5bf\",\"M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z\"],star:[576,512,[],\"f005\",\"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"],\"star-half\":[576,512,[],\"f089\",\"M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z\"],\"star-half-alt\":[536,512,[],\"f5c0\",\"M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z\"],\"step-backward\":[448,512,[],\"f048\",\"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"],\"step-forward\":[448,512,[],\"f051\",\"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"],stethoscope:[512,512,[],\"f0f1\",\"M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"],\"sticky-note\":[448,512,[],\"f249\",\"M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z\"],stop:[448,512,[],\"f04d\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"stop-circle\":[512,512,[],\"f28d\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"],stopwatch:[448,512,[],\"f2f2\",\"M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"],store:[616,512,[],\"f54e\",\"M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z\"],\"store-alt\":[640,512,[],\"f54f\",\"M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z\"],stream:[512,512,[],\"f550\",\"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z\"],\"street-view\":[512,512,[],\"f21d\",\"M192 64c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zm112 80h-11.36c-22.711 10.443-49.59 10.894-73.28 0H208c-26.51 0-48 21.49-48 48v104c0 13.255 10.745 24 24 24h16v104c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V320h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48zm85.642 189.152a72.503 72.503 0 0 1-29.01 27.009C391.133 365.251 480 385.854 480 416c0 46.304-167.656 64-224 64-70.303 0-224-20.859-224-64 0-30.123 88.361-50.665 119.367-55.839a72.516 72.516 0 0 1-29.01-27.009C74.959 343.395 0 367.599 0 416c0 77.111 178.658 96 256 96 77.249 0 256-18.865 256-96 0-48.403-74.967-72.606-122.358-82.848z\"],strikethrough:[512,512,[],\"f0cc\",\"M496 288H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h480c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16zm-214.666 16c27.258 12.937 46.524 28.683 46.524 56.243 0 33.108-28.977 53.676-75.621 53.676-32.325 0-76.874-12.08-76.874-44.271V368c0-8.837-7.164-16-16-16H113.75c-8.836 0-16 7.163-16 16v19.204c0 66.845 77.717 101.82 154.487 101.82 88.578 0 162.013-45.438 162.013-134.424 0-19.815-3.618-36.417-10.143-50.6H281.334zm-30.952-96c-32.422-13.505-56.836-28.946-56.836-59.683 0-33.92 30.901-47.406 64.962-47.406 42.647 0 64.962 16.593 64.962 32.985V136c0 8.837 7.164 16 16 16h45.613c8.836 0 16-7.163 16-16v-30.318c0-52.438-71.725-79.875-142.575-79.875-85.203 0-150.726 40.972-150.726 125.646 0 22.71 4.665 41.176 12.777 56.547h129.823z\"],stroopwafel:[512,512,[],\"f551\",\"M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z\"],subscript:[512,512,[],\"f12c\",\"M395.198 416c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 256c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 96H16C7.163 96 0 88.837 0 80V48c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035A15.999 15.999 0 0 1 204.226 32H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 256H272z\"],subway:[448,512,[],\"f239\",\"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"],suitcase:[512,512,[],\"f0f2\",\"M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z\"],\"suitcase-rolling\":[384,512,[],\"f5c1\",\"M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z\"],sun:[512,512,[],\"f185\",\"M274.835 12.646l25.516 62.393c4.213 10.301 16.671 14.349 26.134 8.492l57.316-35.479c15.49-9.588 34.808 4.447 30.475 22.142l-16.03 65.475c-2.647 10.81 5.053 21.408 16.152 22.231l67.224 4.987c18.167 1.348 25.546 24.057 11.641 35.826L441.81 242.26c-8.495 7.19-8.495 20.289 0 27.479l51.454 43.548c13.906 11.769 6.527 34.478-11.641 35.826l-67.224 4.987c-11.099.823-18.799 11.421-16.152 22.231l16.03 65.475c4.332 17.695-14.986 31.73-30.475 22.142l-57.316-35.479c-9.463-5.858-21.922-1.81-26.134 8.492l-25.516 62.393c-6.896 16.862-30.774 16.862-37.67 0l-25.516-62.393c-4.213-10.301-16.671-14.349-26.134-8.492l-57.317 35.479c-15.49 9.588-34.808-4.447-30.475-22.142l16.03-65.475c2.647-10.81-5.053-21.408-16.152-22.231l-67.224-4.987c-18.167-1.348-25.546-24.057-11.641-35.826L70.19 269.74c8.495-7.19 8.495-20.289 0-27.479l-51.454-43.548c-13.906-11.769-6.527-34.478 11.641-35.826l67.224-4.987c11.099-.823 18.799-11.421 16.152-22.231l-16.03-65.475c-4.332-17.695 14.986-31.73 30.475-22.142l57.317 35.479c9.463 5.858 21.921 1.81 26.134-8.492l25.516-62.393c6.896-16.861 30.774-16.861 37.67 0zM392 256c0-74.991-61.01-136-136-136-74.991 0-136 61.009-136 136s61.009 136 136 136c74.99 0 136-61.009 136-136zm-32 0c0 57.346-46.654 104-104 104s-104-46.654-104-104 46.654-104 104-104 104 46.654 104 104z\"],superscript:[512,512,[],\"f12b\",\"M395.198 256c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 256H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035a16 16 0 0 1 13.598-7.567H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 416H272z\"],surprise:[496,512,[],\"f5c2\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],swatchbook:[511,512,[],\"f5c3\",\"M479.06 320H372.29L186.15 506.51c-2.06 2.07-4.49 3.58-6.67 5.49h299.58c17.64 0 31.94-14.33 31.94-32V352c0-17.67-14.3-32-31.94-32zm-44.5-152.9l-90.33-90.51c-12.47-12.5-32.69-12.5-45.17 0l-75.5 75.65V416c0 2.96-.67 5.73-.87 8.64l211.87-212.28c12.47-12.5 12.47-32.77 0-45.26zM191.62 32c0-17.67-14.3-32-31.94-32H31.94C14.3 0 0 14.33 0 32v384c0 53.02 42.9 96 95.81 96s95.81-42.98 95.81-96V32zM95.81 440c-13.23 0-23.95-10.75-23.95-24 0-13.26 10.73-24 23.95-24s23.95 10.74 23.95 24c.01 13.25-10.72 24-23.95 24zm31.94-184H63.88v-64h63.88v64zm0-128H63.88V64h63.88v64z\"],swimmer:[640,512,[],\"f5c4\",\"M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z\"],\"swimming-pool\":[640,512,[],\"f5c5\",\"M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z\"],sync:[512,512,[],\"f021\",\"M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z\"],\"sync-alt\":[512,512,[],\"f2f1\",\"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z\"],syringe:[512,512,[],\"f48e\",\"M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z\"],table:[512,512,[],\"f0ce\",\"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z\"],\"table-tennis\":[512,512,[],\"f45d\",\"M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z\"],tablet:[448,512,[],\"f10a\",\"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"],\"tablet-alt\":[448,512,[],\"f3fa\",\"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z\"],tablets:[640,512,[],\"f490\",\"M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z\"],\"tachometer-alt\":[576,512,[],\"f3fd\",\"M75.694 480a48.02 48.02 0 0 1-42.448-25.571C12.023 414.3 0 368.556 0 320 0 160.942 128.942 32 288 32s288 128.942 288 288c0 48.556-12.023 94.3-33.246 134.429A48.018 48.018 0 0 1 500.306 480H75.694zM512 288c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zM288 128c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32s-32 14.327-32 32c0 17.673 14.327 32 32 32zM64 288c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zm65.608-158.392c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zm316.784 0c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zm-87.078 31.534c-12.627-4.04-26.133 2.92-30.173 15.544l-45.923 143.511C250.108 322.645 224 350.264 224 384c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-19.773-8.971-37.447-23.061-49.187l45.919-143.498c4.039-12.625-2.92-26.133-15.544-30.173z\"],tag:[512,512,[],\"f02b\",\"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"],tags:[640,512,[],\"f02c\",\"M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z\"],tape:[640,512,[],\"f4db\",\"M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z\"],tasks:[512,512,[],\"f0ae\",\"M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z\"],taxi:[512,512,[],\"f1ba\",\"M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],terminal:[640,512,[],\"f120\",\"M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z\"],\"text-height\":[576,512,[],\"f034\",\"M16 32h288c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96h-54.761v320H232c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H88c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm475.308 4.685l79.995 80.001C581.309 126.693 574.297 144 559.99 144H512v224h48c15.639 0 20.635 17.991 11.313 27.314l-79.995 80.001c-6.247 6.247-16.381 6.245-22.626 0l-79.995-80.001C378.691 385.307 385.703 368 400.01 368H448V144h-48c-15.639 0-20.635-17.991-11.313-27.314l79.995-80.001c6.247-6.248 16.381-6.245 22.626 0z\"],\"text-width\":[448,512,[],\"f035\",\"M16 32h416c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96H261.743v128H296c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H152c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm427.315 340.682l-80.001-79.995C353.991 283.365 336 288.362 336 304v48H112v-47.99c0-14.307-17.307-21.319-27.314-11.313L4.685 372.692c-6.245 6.245-6.247 16.379 0 22.626l80.001 79.995C94.009 484.635 112 479.638 112 464v-48h224v47.99c0 14.307 17.307 21.319 27.314 11.313l80.001-79.995c6.245-6.245 6.248-16.379 0-22.626z\"],th:[512,512,[],\"f00a\",\"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z\"],\"th-large\":[512,512,[],\"f009\",\"M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z\"],\"th-list\":[512,512,[],\"f00b\",\"M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z\"],thermometer:[512,512,[],\"f491\",\"M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z\"],\"thermometer-empty\":[256,512,[],\"f2cb\",\"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"],\"thermometer-full\":[256,512,[],\"f2c7\",\"M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z\"],\"thermometer-half\":[256,512,[],\"f2c9\",\"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"],\"thermometer-quarter\":[256,512,[],\"f2ca\",\"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"],\"thermometer-three-quarters\":[256,512,[],\"f2c8\",\"M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"],\"thumbs-down\":[512,512,[],\"f165\",\"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\"],\"thumbs-up\":[512,512,[],\"f164\",\"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\"],thumbtack:[384,512,[],\"f08d\",\"M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z\"],\"ticket-alt\":[576,512,[],\"f3ff\",\"M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z\"],times:[352,512,[],\"f00d\",\"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"],tint:[352,512,[],\"f043\",\"M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"],\"tint-slash\":[640,512,[],\"f5c7\",\"M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z\"],tired:[496,512,[],\"f5c8\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z\"],\"toggle-off\":[576,512,[],\"f204\",\"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"],\"toggle-on\":[576,512,[],\"f205\",\"M576 256c0 106.039-85.961 192-192 192H192C85.961 448 0 362.039 0 256S85.961 64 192 64h192c106.039 0 192 85.961 192 192zM384 128c-70.741 0-128 57.249-128 128 0 70.741 57.249 128 128 128 70.741 0 128-57.249 128-128 0-70.741-57.249-128-128-128\"],toolbox:[512,512,[],\"f552\",\"M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z\"],tooth:[448,512,[],\"f5c9\",\"M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z\"],trademark:[640,512,[],\"f25c\",\"M97.119 163.133H12c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h248.559c6.627 0 12 5.373 12 12v43.133c0 6.627-5.373 12-12 12H175.44V404c0 6.627-5.373 12-12 12h-54.322c-6.627 0-12-5.373-12-12V163.133zM329.825 96h65.425a12 12 0 0 1 11.346 8.093l43.759 127.068c7.161 20.588 16.111 52.812 16.111 52.812h.896s8.95-32.224 16.111-52.812l43.758-127.068A12 12 0 0 1 538.577 96h65.41a12 12 0 0 1 11.961 11.03l24.012 296c.567 6.987-4.951 12.97-11.961 12.97h-54.101a12 12 0 0 1-11.972-11.182l-9.082-132.93c-1.79-24.168 0-53.706 0-53.706h-.896s-10.741 33.566-17.902 53.706l-30.7 84.731a12 12 0 0 1-11.282 7.912h-50.302a12 12 0 0 1-11.282-7.912l-30.7-84.731c-7.161-20.14-17.903-53.706-17.903-53.706h-.895s1.79 29.538 0 53.706l-9.082 132.93c-.428 6.295-5.66 11.182-11.97 11.182H305.4c-7.017 0-12.536-5.994-11.959-12.987l24.425-296A11.999 11.999 0 0 1 329.825 96z\"],train:[448,512,[],\"f238\",\"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z\"],transgender:[384,512,[],\"f224\",\"M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"],\"transgender-alt\":[480,512,[],\"f225\",\"M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"],trash:[448,512,[],\"f1f8\",\"M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm415.2 56.7L394.8 467c-1.6 25.3-22.6 45-47.9 45H101.1c-25.3 0-46.3-19.7-47.9-45L32.8 140.7c-.4-6.9 5.1-12.7 12-12.7h358.5c6.8 0 12.3 5.8 11.9 12.7z\"],\"trash-alt\":[448,512,[],\"f2ed\",\"M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm416 56v324c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V140c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12zm-272 68c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208z\"],tree:[384,512,[],\"f1bb\",\"M377.33 375.429L293.906 288H328c21.017 0 31.872-25.207 17.448-40.479L262.79 160H296c20.878 0 31.851-24.969 17.587-40.331l-104-112.003c-9.485-10.214-25.676-10.229-35.174 0l-104 112.003C56.206 134.969 67.037 160 88 160h33.21l-82.659 87.521C24.121 262.801 34.993 288 56 288h34.094L6.665 375.429C-7.869 390.655 2.925 416 24.025 416H144c0 32.781-11.188 49.26-33.995 67.506C98.225 492.93 104.914 512 120 512h144c15.086 0 21.776-19.069 9.995-28.494-19.768-15.814-33.992-31.665-33.995-67.496V416h119.97c21.05 0 31.929-25.309 17.36-40.571z\"],trophy:[576,512,[],\"f091\",\"M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z\"],truck:[640,512,[],\"f0d1\",\"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"],\"truck-loading\":[640,512,[],\"f4de\",\"M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"],\"truck-moving\":[640,512,[],\"f4df\",\"M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z\"],tshirt:[640,512,[],\"f553\",\"M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z\"],tty:[512,512,[],\"f1e4\",\"M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"],tv:[640,512,[],\"f26c\",\"M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z\"],umbrella:[576,512,[],\"f0e9\",\"M557.011 267.631c-51.432-45.217-107.572-43.698-158.567 30.731-5.298 7.861-14.906 7.165-19.736 0-2.483-3.624-32.218-60.808-90.708-60.808-45.766 0-70.542 31.378-90.709 60.808-4.829 7.165-14.436 7.861-19.734 0-50.904-74.285-106.613-76.406-158.567-30.731-10.21 8.264-20.912-1.109-18.696-9.481C32.146 134.573 158.516 64.612 288.001 64.612c128.793 0 256.546 69.961 287.706 193.538 2.206 8.322-8.426 17.793-18.696 9.481zM256 261.001V416c0 17.645-14.355 32-32 32s-32-14.355-32-32c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 52.935 43.065 96 96 96s96-43.065 96-96V261.288c-21.836-10.806-45.425-9.737-64-.287zm64-211.007V32c0-17.673-14.327-32-32-32s-32 14.327-32 32v17.987a372.105 372.105 0 0 1 64 .007z\"],\"umbrella-beach\":[640,512,[],\"f5ca\",\"M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z\"],underline:[448,512,[],\"f0cd\",\"M224.264 388.24c-91.669 0-156.603-51.165-156.603-151.392V64H39.37c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h137.39c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.813v172.848c0 53.699 28.314 79.444 76.317 79.444 46.966 0 75.796-25.434 75.796-79.965V64h-28.291c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h136.868c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.291v172.848c0 99.405-64.881 151.392-156.082 151.392zM16 448h416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16z\"],undo:[512,512,[],\"f0e2\",\"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z\"],\"undo-alt\":[512,512,[],\"f2ea\",\"M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z\"],\"universal-access\":[512,512,[],\"f29a\",\"M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z\"],university:[512,512,[],\"f19c\",\"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"],unlink:[512,512,[],\"f127\",\"M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z\"],unlock:[448,512,[],\"f09c\",\"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"],\"unlock-alt\":[448,512,[],\"f13e\",\"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"],upload:[512,512,[],\"f093\",\"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"],user:[448,512,[],\"f007\",\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"],\"user-alt\":[512,512,[],\"f406\",\"M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z\"],\"user-alt-slash\":[640,512,[],\"f4fa\",\"M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z\"],\"user-astronaut\":[448,512,[],\"f4fb\",\"M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z\"],\"user-check\":[640,512,[],\"f4fc\",\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"],\"user-circle\":[496,512,[],\"f2bd\",\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z\"],\"user-clock\":[640,512,[],\"f4fd\",\"M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z\"],\"user-cog\":[640,512,[],\"f4fe\",\"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"],\"user-edit\":[640,512,[],\"f4ff\",\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z\"],\"user-friends\":[640,512,[],\"f500\",\"M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z\"],\"user-graduate\":[448,512,[],\"f501\",\"M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z\"],\"user-lock\":[640,512,[],\"f502\",\"M320 320c0-11.1 3.1-21.4 8.1-30.5-4.8-.5-9.5-1.5-14.5-1.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h280.9c-5.5-9.5-8.9-20.3-8.9-32V320zm-96-64c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm384 32h-32v-48c0-44.2-35.8-80-80-80s-80 35.8-80 80v48h-32c-17.7 0-32 14.3-32 32v160c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32zm-80 0h-64v-48c0-17.6 14.4-32 32-32s32 14.4 32 32v48z\"],\"user-md\":[448,512,[],\"f0f0\",\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z\"],\"user-minus\":[640,512,[],\"f503\",\"M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"],\"user-ninja\":[448,512,[],\"f504\",\"M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z\"],\"user-plus\":[640,512,[],\"f234\",\"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"],\"user-secret\":[448,512,[],\"f21b\",\"M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z\"],\"user-shield\":[640,512,[],\"f505\",\"M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z\"],\"user-slash\":[640,512,[],\"f506\",\"M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z\"],\"user-tag\":[640,512,[],\"f507\",\"M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z\"],\"user-tie\":[448,512,[],\"f508\",\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z\"],\"user-times\":[640,512,[],\"f235\",\"M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"],users:[640,512,[],\"f0c0\",\"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"],\"users-cog\":[640,512,[],\"f509\",\"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"],\"utensil-spoon\":[512,512,[],\"f2e5\",\"M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z\"],utensils:[416,512,[],\"f2e7\",\"M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z\"],\"vector-square\":[512,512,[],\"f5cb\",\"M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z\"],venus:[288,512,[],\"f221\",\"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"],\"venus-double\":[512,512,[],\"f226\",\"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z\"],\"venus-mars\":[576,512,[],\"f228\",\"M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"],vial:[480,512,[],\"f492\",\"M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z\"],vials:[640,512,[],\"f493\",\"M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z\"],video:[576,512,[],\"f03d\",\"M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z\"],\"video-slash\":[640,512,[],\"f4e2\",\"M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z\"],\"volleyball-ball\":[495,512,[],\"f45f\",\"M223.3 243.4c-.9-37-8.6-72.8-22.7-105.7-90.8 42.4-157.5 122.4-180.3 216.8 13.4 30.8 32.9 58.3 56.9 81.1 22.7-79.2 74.2-147.8 146.1-192.2zM186.4 109c-15-26.4-34.5-50.1-57.4-70.7C38 88.1-15.8 191.2 4 300.5c33.4-83.1 98.4-152 182.4-191.5zM374 274.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5 57.3 59.3 91 138.2 93.5 222.7 32.5 17.7 67.3 29 102.9 33.2zm-124.7 9.5c-31.6 19.3-58.7 43.9-80.2 72.6 82 57.3 184.5 75.1 277.5 47.8 19.7-26.4 34.2-56.8 42.2-89.9-26.6 6.6-53.7 10.4-80.9 10.4-54.6-.1-108.9-14.1-158.6-40.9zM151 383.3c-15.2 26-25.7 54.4-32.1 84.2 37.6 23 81.7 36.5 129.1 36.5 61 0 116.7-22.1 159.9-58.6C295 461.5 204.6 420.6 151 383.3zM331.3 22.7c55.3 70.4 82.5 161.2 74.6 253.6 30.3.2 60.5-4.8 89.7-14.2 0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z\"],\"volume-down\":[384,512,[],\"f027\",\"M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zM384 256c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z\"],\"volume-off\":[256,512,[],\"f026\",\"M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971z\"],\"volume-up\":[576,512,[],\"f028\",\"M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zm182.056-77.876C422.982.92 403.283 5.668 394.061 20.745c-9.221 15.077-4.473 34.774 10.604 43.995C468.967 104.063 512 174.983 512 256c0 73.431-36.077 142.292-96.507 184.206-14.522 10.072-18.129 30.01-8.057 44.532 10.076 14.528 30.016 18.126 44.531 8.057C529.633 438.927 576 350.406 576 256c0-103.244-54.579-194.877-137.944-245.859zM480 256c0-68.547-36.15-129.777-91.957-163.901-15.076-9.22-34.774-4.471-43.994 10.607-9.22 15.078-4.471 34.774 10.607 43.994C393.067 170.188 416 211.048 416 256c0 41.964-20.62 81.319-55.158 105.276-14.521 10.073-18.128 30.01-8.056 44.532 6.216 8.96 16.185 13.765 26.322 13.765a31.862 31.862 0 0 0 18.21-5.709C449.091 377.953 480 318.938 480 256zm-96 0c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z\"],walking:[320,512,[],\"f554\",\"M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z\"],wallet:[512,512,[],\"f555\",\"M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"],warehouse:[640,512,[],\"f494\",\"M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z\"],weight:[512,512,[],\"f496\",\"M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z\"],\"weight-hanging\":[512,512,[],\"f5cd\",\"M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"],wheelchair:[512,512,[],\"f193\",\"M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z\"],wifi:[640,512,[],\"f1eb\",\"M384 416c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm136.659-124.443c6.465-6.465 6.245-17.065-.564-23.167-113.793-101.985-286.526-101.869-400.19 0-6.809 6.102-7.029 16.702-.564 23.167l34.006 34.006c5.927 5.927 15.464 6.32 21.769.796 82.88-72.609 207.074-72.447 289.768 0 6.305 5.524 15.842 5.132 21.769-.796l34.006-34.006zm112.11-113.718c6.385-6.385 6.254-16.816-.35-22.973-175.768-163.86-449.134-163.8-624.837 0-6.604 6.157-6.735 16.589-.35 22.973l33.966 33.966c6.095 6.095 15.891 6.231 22.224.383 144.763-133.668 368.356-133.702 513.156 0 6.333 5.848 16.129 5.712 22.224-.383l33.967-33.966z\"],\"window-close\":[512,512,[],\"f410\",\"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z\"],\"window-maximize\":[512,512,[],\"f2d0\",\"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z\"],\"window-minimize\":[512,512,[],\"f2d1\",\"M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z\"],\"window-restore\":[512,512,[],\"f2d2\",\"M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z\"],\"wine-glass\":[288,512,[],\"f4e3\",\"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z\"],\"wine-glass-alt\":[288,512,[],\"f5ce\",\"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z\"],\"won-sign\":[576,512,[],\"f159\",\"M564 192c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-48.028l18.572-80.61c1.732-7.518-3.978-14.694-11.693-14.694h-46.107a11.998 11.998 0 0 0-11.736 9.5L450.73 128H340.839l-19.725-85.987a12 12 0 0 0-11.696-9.317H265.43a12 12 0 0 0-11.687 9.277L233.696 128H124.975L107.5 42.299a12 12 0 0 0-11.758-9.602H53.628c-7.686 0-13.39 7.124-11.709 14.624L60 128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h62.342l7.171 32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h83.856l40.927 182.624A12 12 0 0 0 148.492 480h56.767c5.583 0 10.428-3.85 11.689-9.288L259.335 288h55.086l42.386 182.712A12 12 0 0 0 368.496 480h56.826a12 12 0 0 0 11.694-9.306L479.108 288H564c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-70.146l7.373-32H564zm-425.976 0h80.757l-7.457 32h-66.776l-6.524-32zm45.796 150.029c-6.194 25.831-6.758 47.25-7.321 47.25h-1.126s-1.689-22.05-6.758-47.25L157.599 288h38.812l-12.591 54.029zM274.182 224l1.996-8.602c1.856-7.962 3.457-15.968 4.803-23.398h11.794c1.347 7.43 2.947 15.436 4.803 23.398l1.996 8.602h-25.392zm130.959 118.029c-5.068 25.2-6.758 47.25-6.758 47.25h-1.126c-.563 0-1.126-21.42-7.321-47.25L377.542 288h39.107l-11.508 54.029zM430.281 224h-67.42l-7.34-32h81.577l-6.817 32z\"],wrench:[512,512,[],\"f0ad\",\"M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"],\"x-ray\":[640,512,[],\"f497\",\"M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z\"],\"yen-sign\":[384,512,[],\"f157\",\"M351.208 32h-65.277a12 12 0 0 0-10.778 6.724l-55.39 113.163c-14.513 34.704-27.133 71.932-27.133 71.932h-1.262s-12.62-37.228-27.133-71.932l-55.39-113.163A11.997 11.997 0 0 0 98.068 32H32.792c-9.057 0-14.85 9.65-10.59 17.643L102.322 200H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h88.162L152 293.228V320H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h108v92c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-92h108c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12H232v-26.772L251.838 256H340c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12h-58.322l80.12-150.357C366.058 41.65 360.266 32 351.208 32z\"]};!function(c){try{c()}catch(c){if(!m)throw c}}(function(){!function c(l,z){var h=Object.keys(z).reduce(function(c,l){var h=z[l];return h.icon?c[h.iconName]=h.icon:c[l]=h,c},{});\"function\"==typeof t.hooks.addPack?t.hooks.addPack(l,h):t.styles[l]=M({},t.styles[l]||{},h),\"fas\"===l&&c(\"fa\",z)}(\"fas\",f)})}(),function(){\"use strict\";var c=function(){},l={},h={},z=null,v={mark:c,measure:c};try{\"undefined\"!=typeof window&&(l=window),\"undefined\"!=typeof document&&(h=document),\"undefined\"!=typeof MutationObserver&&(z=MutationObserver),\"undefined\"!=typeof performance&&(v=performance)}catch(c){}var m=(l.navigator||{}).userAgent,s=void 0===m?\"\":m,r=l,i=h,e=z,a=v,t=!!r.document,M=!!i.documentElement&&!!i.head&&\"function\"==typeof i.addEventListener&&\"function\"==typeof i.createElement,p=~s.indexOf(\"MSIE\")||~s.indexOf(\"Trident/\"),f=\"___FONT_AWESOME___\",b=16,H=\"svg-inline--fa\",g=\"data-fa-i2svg\",n=\"data-fa-pseudo-element\",V=\"data-prefix\",o=\"data-icon\",C=\"fontawesome-i2svg\",L=[\"HTML\",\"HEAD\",\"STYLE\",\"SCRIPT\"],u=function(){try{return!0}catch(c){return!1}}(),d=[1,2,3,4,5,6,7,8,9,10],S=d.concat([11,12,13,14,15,16,17,18,19,20]),w=[\"class\",\"data-prefix\",\"data-icon\",\"data-fa-transform\",\"data-fa-mask\"],y=[\"xs\",\"sm\",\"lg\",\"fw\",\"ul\",\"li\",\"border\",\"pull-left\",\"pull-right\",\"spin\",\"pulse\",\"rotate-90\",\"rotate-180\",\"rotate-270\",\"flip-horizontal\",\"flip-vertical\",\"stack\",\"stack-1x\",\"stack-2x\",\"inverse\",\"layers\",\"layers-text\",\"layers-counter\"].concat(d.map(function(c){return c+\"x\"})).concat(S.map(function(c){return\"w-\"+c})),k=function(c,l){if(!(c instanceof l))throw new TypeError(\"Cannot call a class as a function\")},x=function(){function z(c,l){for(var h=0;h<l.length;h++){var z=l[h];z.enumerable=z.enumerable||!1,z.configurable=!0,\"value\"in z&&(z.writable=!0),Object.defineProperty(c,z.key,z)}}return function(c,l,h){return l&&z(c.prototype,l),h&&z(c,h),c}}(),A=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var z in h)Object.prototype.hasOwnProperty.call(h,z)&&(c[z]=h[z])}return c},q=function(c,l){if(Array.isArray(c))return c;if(Symbol.iterator in Object(c))return function(c,l){var h=[],z=!0,v=!1,m=void 0;try{for(var s,e=c[Symbol.iterator]();!(z=(s=e.next()).done)&&(h.push(s.value),!l||h.length!==l);z=!0);}catch(c){v=!0,m=c}finally{try{!z&&e.return&&e.return()}finally{if(v)throw m}}return h}(c,l);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},j=function(c){if(Array.isArray(c)){for(var l=0,h=Array(c.length);l<c.length;l++)h[l]=c[l];return h}return Array.from(c)},O=r.FontAwesomeConfig||{};if(i&&\"function\"==typeof i.querySelector){[[\"data-family-prefix\",\"familyPrefix\"],[\"data-replacement-class\",\"replacementClass\"],[\"data-auto-replace-svg\",\"autoReplaceSvg\"],[\"data-auto-add-css\",\"autoAddCss\"],[\"data-auto-a11y\",\"autoA11y\"],[\"data-search-pseudo-elements\",\"searchPseudoElements\"],[\"data-observe-mutations\",\"observeMutations\"],[\"data-keep-original-source\",\"keepOriginalSource\"],[\"data-measure-performance\",\"measurePerformance\"],[\"data-show-missing-icons\",\"showMissingIcons\"]].forEach(function(c){var l,h=q(c,2),z=h[0],v=h[1],m=\"\"===(l=function(c){var l=i.querySelector(\"script[\"+c+\"]\");if(l)return l.getAttribute(c)}(z))||\"false\"!==l&&(\"true\"===l||l);null!=m&&(O[v]=m)})}var N=A({familyPrefix:\"fa\",replacementClass:H,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},O);N.autoReplaceSvg||(N.observeMutations=!1);var E=A({},N);r.FontAwesomeConfig=E;var P=r||{};P[f]||(P[f]={}),P[f].styles||(P[f].styles={}),P[f].hooks||(P[f].hooks={}),P[f].shims||(P[f].shims=[]);var T=P[f],_=[],R=!1;M&&((R=(i.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(i.readyState))||i.addEventListener(\"DOMContentLoaded\",function c(){i.removeEventListener(\"DOMContentLoaded\",c),R=1,_.map(function(c){return c()})}));var F=function(c){M&&(R?setTimeout(c,0):_.push(c))},I=b,W={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function Y(c){if(c&&M){var l=i.createElement(\"style\");l.setAttribute(\"type\",\"text/css\"),l.innerHTML=c;for(var h=i.head.childNodes,z=null,v=h.length-1;-1<v;v--){var m=h[v],s=(m.tagName||\"\").toUpperCase();-1<[\"STYLE\",\"LINK\"].indexOf(s)&&(z=m)}return i.head.insertBefore(l,z),c}}var D=0;function X(){return++D}function B(c){for(var l=[],h=(c||[]).length>>>0;h--;)l[h]=c[h];return l}function U(c){return c.classList?B(c.classList):(c.getAttribute(\"class\")||\"\").split(\" \").filter(function(c){return c})}function K(c,l){var h,z=l.split(\"-\"),v=z[0],m=z.slice(1).join(\"-\");return v!==c||\"\"===m||(h=m,~y.indexOf(h))?null:m}function G(c){return(\"\"+c).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function J(h){return Object.keys(h||{}).reduce(function(c,l){return c+(l+\": \")+h[l]+\";\"},\"\")}function Q(c){return c.size!==W.size||c.x!==W.x||c.y!==W.y||c.rotate!==W.rotate||c.flipX||c.flipY}function Z(c){var l=c.transform,h=c.containerWidth,z=c.iconWidth;return{outer:{transform:\"translate(\"+h/2+\" 256)\"},inner:{transform:\"translate(\"+32*l.x+\", \"+32*l.y+\") \"+\" \"+(\"scale(\"+l.size/16*(l.flipX?-1:1)+\", \"+l.size/16*(l.flipY?-1:1)+\") \")+\" \"+(\"rotate(\"+l.rotate+\" 0 0)\")},path:{transform:\"translate(\"+z/2*-1+\" -256)\"}}}var $={x:0,y:0,width:\"100%\",height:\"100%\"},cc=function(c){var l=c.children,h=c.attributes,z=c.main,v=c.mask,m=c.transform,s=z.width,e=z.icon,a=v.width,t=v.icon,M=Z({transform:m,containerWidth:a,iconWidth:s}),f={tag:\"rect\",attributes:A({},$,{fill:\"white\"})},r={tag:\"g\",attributes:A({},M.inner),children:[{tag:\"path\",attributes:A({},e.attributes,M.path,{fill:\"black\"})}]},i={tag:\"g\",attributes:A({},M.outer),children:[r]},H=\"mask-\"+X(),n=\"clip-\"+X(),V={tag:\"defs\",children:[{tag:\"clipPath\",attributes:{id:n},children:[t]},{tag:\"mask\",attributes:A({},$,{id:H,maskUnits:\"userSpaceOnUse\",maskContentUnits:\"userSpaceOnUse\"}),children:[f,i]}]};return l.push(V,{tag:\"rect\",attributes:A({fill:\"currentColor\",\"clip-path\":\"url(#\"+n+\")\",mask:\"url(#\"+H+\")\"},$)}),{children:l,attributes:h}},lc=function(c){var l=c.children,h=c.attributes,z=c.main,v=c.transform,m=J(c.styles);if(0<m.length&&(h.style=m),Q(v)){var s=Z({transform:v,containerWidth:z.width,iconWidth:z.width});l.push({tag:\"g\",attributes:A({},s.outer),children:[{tag:\"g\",attributes:A({},s.inner),children:[{tag:z.icon.tag,children:z.icon.children,attributes:A({},z.icon.attributes,s.path)}]}]})}else l.push(z.icon);return{children:l,attributes:h}},hc=function(c){var l=c.children,h=c.main,z=c.mask,v=c.attributes,m=c.styles,s=c.transform;if(Q(s)&&h.found&&!z.found){var e=h.width/h.height/2,a=.5;v.style=J(A({},m,{\"transform-origin\":e+s.x/16+\"em \"+(a+s.y/16)+\"em\"}))}return[{tag:\"svg\",attributes:v,children:l}]},zc=function(c){var l=c.prefix,h=c.iconName,z=c.children,v=c.attributes,m=c.symbol,s=!0===m?l+\"-\"+E.familyPrefix+\"-\"+h:m;return[{tag:\"svg\",attributes:{style:\"display: none;\"},children:[{tag:\"symbol\",attributes:A({},v,{id:s}),children:z}]}]};function vc(c){var l=c.icons,h=l.main,z=l.mask,v=c.prefix,m=c.iconName,s=c.transform,e=c.symbol,a=c.title,t=c.extra,M=c.watchable,f=void 0!==M&&M,r=z.found?z:h,i=r.width,H=r.height,n=\"fa-w-\"+Math.ceil(i/H*16),V=[E.replacementClass,m?E.familyPrefix+\"-\"+m:\"\",n].filter(function(c){return-1===t.classes.indexOf(c)}).concat(t.classes).join(\" \"),o={children:[],attributes:A({},t.attributes,{\"data-prefix\":v,\"data-icon\":m,class:V,role:\"img\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 \"+i+\" \"+H})};f&&(o.attributes[g]=\"\"),a&&o.children.push({tag:\"title\",attributes:{id:o.attributes[\"aria-labelledby\"]||\"title-\"+X()},children:[a]});var C=A({},o,{prefix:v,iconName:m,main:h,mask:z,transform:s,symbol:e,styles:t.styles}),L=z.found&&h.found?cc(C):lc(C),u=L.children,d=L.attributes;return C.children=u,C.attributes=d,e?zc(C):hc(C)}function mc(c){var l=c.content,h=c.width,z=c.height,v=c.transform,m=c.title,s=c.extra,e=c.watchable,a=void 0!==e&&e,t=A({},s.attributes,m?{title:m}:{},{class:s.classes.join(\" \")});a&&(t[g]=\"\");var M,f,r,i,H,n,V,o,C,L=A({},s.styles);Q(v)&&(L.transform=(f=(M={transform:v,startCentered:!0,width:h,height:z}).transform,r=M.width,i=void 0===r?b:r,H=M.height,n=void 0===H?b:H,V=M.startCentered,C=\"\",C+=(o=void 0!==V&&V)&&p?\"translate(\"+(f.x/I-i/2)+\"em, \"+(f.y/I-n/2)+\"em) \":o?\"translate(calc(-50% + \"+f.x/I+\"em), calc(-50% + \"+f.y/I+\"em)) \":\"translate(\"+f.x/I+\"em, \"+f.y/I+\"em) \",C+=\"scale(\"+f.size/I*(f.flipX?-1:1)+\", \"+f.size/I*(f.flipY?-1:1)+\") \",C+=\"rotate(\"+f.rotate+\"deg) \"),L[\"-webkit-transform\"]=L.transform);var u=J(L);0<u.length&&(t.style=u);var d=[];return d.push({tag:\"span\",attributes:t,children:[l]}),m&&d.push({tag:\"span\",attributes:{class:\"sr-only\"},children:[m]}),d}var sc=function(){},ec=E.measurePerformance&&a&&a.mark&&a.measure?a:{mark:sc,measure:sc},ac='FA \"5.1.0\"',tc=function(c){ec.mark(ac+\" \"+c+\" ends\"),ec.measure(ac+\" \"+c,ac+\" \"+c+\" begins\",ac+\" \"+c+\" ends\")},Mc={begin:function(c){return ec.mark(ac+\" \"+c+\" begins\"),function(){return tc(c)}},end:tc},fc=function(c,l,h,z){var v,m,s,e,a,t=Object.keys(c),M=t.length,f=void 0!==z?(e=l,a=z,function(c,l,h,z){return e.call(a,c,l,h,z)}):l;for(void 0===h?(v=1,s=c[t[0]]):(v=0,s=h);v<M;v++)s=f(s,c[m=t[v]],m,c);return s},rc=T.styles,ic=T.shims,Hc={},nc={},Vc={},oc=function(){var c=function(z){return fc(rc,function(c,l,h){return c[h]=fc(l,z,{}),c},{})};Hc=c(function(c,l,h){return c[l[3]]=h,c}),nc=c(function(l,c,h){var z=c[2];return l[h]=h,z.forEach(function(c){l[c]=h}),l});var m=\"far\"in rc;Vc=fc(ic,function(c,l){var h=l[0],z=l[1],v=l[2];return\"far\"!==z||m||(z=\"fas\"),c[h]={prefix:z,iconName:v},c},{})};function Cc(c,l){return Hc[c][l]}oc();var Lc=T.styles,uc=function(){return{prefix:null,iconName:null,rest:[]}};function dc(c){return c.reduce(function(c,l){var h=K(E.familyPrefix,l);if(Lc[l])c.prefix=l;else if(h){var z=\"fa\"===c.prefix?Vc[h]||{prefix:null,iconName:null}:{};c.iconName=z.iconName||h,c.prefix=z.prefix||c.prefix}else l!==E.replacementClass&&0!==l.indexOf(\"fa-w-\")&&c.rest.push(l);return c},uc())}function pc(c,l,h){if(c&&c[l]&&c[l][h])return{prefix:l,iconName:h,icon:c[l][h]}}function bc(c){var h,l=c.tag,z=c.attributes,v=void 0===z?{}:z,m=c.children,s=void 0===m?[]:m;return\"string\"==typeof c?G(c):\"<\"+l+\" \"+(h=v,Object.keys(h||{}).reduce(function(c,l){return c+(l+'=\"')+G(h[l])+'\" '},\"\").trim())+\">\"+s.map(bc).join(\"\")+\"</\"+l+\">\"}var gc=function(){};function Sc(c){return\"string\"==typeof(c.getAttribute?c.getAttribute(g):null)}var wc={replace:function(c){var l=c[0],h=c[1].map(function(c){return bc(c)}).join(\"\\n\");if(l.parentNode&&l.outerHTML)l.outerHTML=h+(E.keepOriginalSource&&\"svg\"!==l.tagName.toLowerCase()?\"\\x3c!-- \"+l.outerHTML+\" --\\x3e\":\"\");else if(l.parentNode){var z=document.createElement(\"span\");l.parentNode.replaceChild(z,l),z.outerHTML=h}},nest:function(c){var l=c[0],h=c[1];if(~U(l).indexOf(E.replacementClass))return wc.replace(c);var z=new RegExp(E.familyPrefix+\"-.*\");delete h[0].attributes.style;var v=h[0].attributes.class.split(\" \").reduce(function(c,l){return l===E.replacementClass||l.match(z)?c.toSvg.push(l):c.toNode.push(l),c},{toNode:[],toSvg:[]});h[0].attributes.class=v.toSvg.join(\" \");var m=h.map(function(c){return bc(c)}).join(\"\\n\");l.setAttribute(\"class\",v.toNode.join(\" \")),l.setAttribute(g,\"\"),l.innerHTML=m}};function yc(h,c){var z=\"function\"==typeof c?c:gc;0===h.length?z():(r.requestAnimationFrame||function(c){return c()})(function(){var c=!0===E.autoReplaceSvg?wc.replace:wc[E.autoReplaceSvg]||wc.replace,l=Mc.begin(\"mutate\");h.map(c),l(),z()})}var kc=!1;var xc=null;function Ac(c){if(e&&E.observeMutations){var v=c.treeCallback,m=c.nodeCallback,s=c.pseudoElementsCallback,l=c.observeMutationsRoot,h=void 0===l?i.body:l;xc=new e(function(c){kc||B(c).forEach(function(c){if(\"childList\"===c.type&&0<c.addedNodes.length&&!Sc(c.addedNodes[0])&&(E.searchPseudoElements&&s(c.target),v(c.target)),\"attributes\"===c.type&&c.target.parentNode&&E.searchPseudoElements&&s(c.target.parentNode),\"attributes\"===c.type&&Sc(c.target)&&~w.indexOf(c.attributeName))if(\"class\"===c.attributeName){var l=dc(U(c.target)),h=l.prefix,z=l.iconName;h&&c.target.setAttribute(\"data-prefix\",h),z&&c.target.setAttribute(\"data-icon\",z)}else m(c.target)})}),M&&xc.observe(h,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}var qc=function(c){var l=c.getAttribute(\"style\"),h=[];return l&&(h=l.split(\";\").reduce(function(c,l){var h=l.split(\":\"),z=h[0],v=h.slice(1);return z&&0<v.length&&(c[z]=v.join(\":\").trim()),c},{})),h};function jc(c){for(var l=\"\",h=0;h<c.length;h++){l+=(\"000\"+c.charCodeAt(h).toString(16)).slice(-4)}return l}var Oc=function(c){var l,h,z=c.getAttribute(\"data-prefix\"),v=c.getAttribute(\"data-icon\"),m=void 0!==c.innerText?c.innerText.trim():\"\",s=dc(U(c));return z&&v&&(s.prefix=z,s.iconName=v),s.prefix&&1<m.length?s.iconName=(l=s.prefix,h=c.innerText,nc[l][h]):s.prefix&&1===m.length&&(s.iconName=Cc(s.prefix,jc(c.innerText))),s},Nc=function(c){var l={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return c?c.toLowerCase().split(\" \").reduce(function(c,l){var h=l.toLowerCase().split(\"-\"),z=h[0],v=h.slice(1).join(\"-\");if(z&&\"h\"===v)return c.flipX=!0,c;if(z&&\"v\"===v)return c.flipY=!0,c;if(v=parseFloat(v),isNaN(v))return c;switch(z){case\"grow\":c.size=c.size+v;break;case\"shrink\":c.size=c.size-v;break;case\"left\":c.x=c.x-v;break;case\"right\":c.x=c.x+v;break;case\"up\":c.y=c.y-v;break;case\"down\":c.y=c.y+v;break;case\"rotate\":c.rotate=c.rotate+v}return c},l):l},Ec=function(c){return Nc(c.getAttribute(\"data-fa-transform\"))},Pc=function(c){var l=c.getAttribute(\"data-fa-symbol\");return null!==l&&(\"\"===l||l)},Tc=function(c){var l=B(c.attributes).reduce(function(c,l){return\"class\"!==c.name&&\"style\"!==c.name&&(c[l.name]=l.value),c},{}),h=c.getAttribute(\"title\");return E.autoA11y&&(h?l[\"aria-labelledby\"]=E.replacementClass+\"-title-\"+X():l[\"aria-hidden\"]=\"true\"),l},_c=function(c){var l=c.getAttribute(\"data-fa-mask\");return l?dc(l.split(\" \").map(function(c){return c.trim()})):uc()},Rc={iconName:null,title:null,prefix:null,transform:W,symbol:!1,mask:null,extra:{classes:[],styles:{},attributes:{}}};function Fc(c){this.name=\"MissingIcon\",this.message=c||\"Icon unavailable\",this.stack=(new Error).stack}(Fc.prototype=Object.create(Error.prototype)).constructor=Fc;var Ic={fill:\"currentColor\"},Wc={attributeType:\"XML\",repeatCount:\"indefinite\",dur:\"2s\"},Yc={tag:\"path\",attributes:A({},Ic,{d:\"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z\"})},Dc=A({},Wc,{attributeName:\"opacity\"}),Xc={tag:\"g\",children:[Yc,{tag:\"circle\",attributes:A({},Ic,{cx:\"256\",cy:\"364\",r:\"28\"}),children:[{tag:\"animate\",attributes:A({},Wc,{attributeName:\"r\",values:\"28;14;28;28;14;28;\"})},{tag:\"animate\",attributes:A({},Dc,{values:\"1;0;1;1;0;1;\"})}]},{tag:\"path\",attributes:A({},Ic,{opacity:\"1\",d:\"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z\"}),children:[{tag:\"animate\",attributes:A({},Dc,{values:\"1;0;0;0;0;1;\"})}]},{tag:\"path\",attributes:A({},Ic,{opacity:\"0\",d:\"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z\"}),children:[{tag:\"animate\",attributes:A({},Dc,{values:\"0;0;1;1;0;0;\"})}]}]},Bc=T.styles,Uc=\"fa-layers-text\",Kc=/Font Awesome 5 (Solid|Regular|Light|Brands|Free|Pro)/,Gc={Solid:\"fas\",Regular:\"far\",Light:\"fal\",Brands:\"fab\"},Jc={900:\"fas\",400:\"far\",300:\"fal\"};function Qc(c,l){var h={found:!1,width:512,height:512,icon:Xc};if(c&&l&&Bc[l]&&Bc[l][c]){var z=Bc[l][c];h={found:!0,width:z[0],height:z[1],icon:{tag:\"path\",attributes:{fill:\"currentColor\",d:z.slice(4)[0]}}}}else if(c&&l&&!E.showMissingIcons)throw new Fc(\"Icon is missing for prefix \"+l+\" with icon name \"+c);return h}function Zc(c){var l,h,z,v,m,s,e,a,t,M,f,r,i,H,n,V,o,C,L,u=(h=Oc(l=c),z=h.iconName,v=h.prefix,m=h.rest,s=qc(l),e=Ec(l),a=Pc(l),t=Tc(l),M=_c(l),{iconName:z,title:l.getAttribute(\"title\"),prefix:v,transform:e,symbol:a,mask:M,extra:{classes:m,styles:s,attributes:t}});return~u.extra.classes.indexOf(Uc)?function(c,l){var h=l.title,z=l.transform,v=l.extra,m=null,s=null;if(p){var e=parseInt(getComputedStyle(c).fontSize,10),a=c.getBoundingClientRect();m=a.width/e,s=a.height/e}return E.autoA11y&&!h&&(v.attributes[\"aria-hidden\"]=\"true\"),[c,mc({content:c.innerHTML,width:m,height:s,transform:z,title:h,extra:v,watchable:!0})]}(c,u):(f=c,i=(r=u).iconName,H=r.title,n=r.prefix,V=r.transform,o=r.symbol,C=r.mask,L=r.extra,[f,vc({icons:{main:Qc(i,n),mask:Qc(C.iconName,C.prefix)},prefix:n,iconName:i,transform:V,symbol:o,mask:C,title:H,extra:L,watchable:!0})])}function $c(c){if(M){var l=Mc.begin(\"searchPseudoElements\");kc=!0,function(){B(c.querySelectorAll(\"*\")).filter(function(c){return!(c.parentNode===document.head||~L.indexOf(c.tagName.toUpperCase())||c.getAttribute(n)||c.parentNode&&\"svg\"===c.parentNode.tagName)}).forEach(function(f){[\":before\",\":after\"].forEach(function(l){var c=B(f.children).filter(function(c){return c.getAttribute(n)===l})[0],h=r.getComputedStyle(f,l),z=h.getPropertyValue(\"font-family\").match(Kc),v=h.getPropertyValue(\"font-weight\");if(c&&!z)f.removeChild(c);else if(z){var m=h.getPropertyValue(\"content\"),s=~[\"Light\",\"Regular\",\"Solid\"].indexOf(z[1])?Gc[z[1]]:Jc[v],e=Cc(s,jc(3===m.length?m.substr(1,1):m));if(!c||c.getAttribute(V)!==s||c.getAttribute(o)!==e){c&&f.removeChild(c);var a=Rc.extra;a.attributes[n]=l;var t=vc(A({},Rc,{icons:{main:Qc(e,s),mask:uc()},prefix:s,iconName:e,extra:a,watchable:!0})),M=i.createElement(\"svg\");\":before\"===l?f.insertBefore(M,f.firstChild):f.appendChild(M),M.outerHTML=t.map(function(c){return bc(c)}).join(\"\\n\")}}})})}(),kc=!1,l()}}function cl(c){var l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;if(M){var h=i.documentElement.classList,z=function(c){return h.add(C+\"-\"+c)},v=function(c){return h.remove(C+\"-\"+c)},m=Object.keys(Bc),s=[\".\"+Uc+\":not([\"+g+\"])\"].concat(m.map(function(c){return\".\"+c+\":not([\"+g+\"])\"})).join(\", \");if(0!==s.length){var e=B(c.querySelectorAll(s));if(0<e.length){z(\"pending\"),v(\"complete\");var a=Mc.begin(\"onTree\"),t=e.reduce(function(c,l){try{var h=Zc(l);h&&c.push(h)}catch(c){u||c instanceof Fc&&console.error(c)}return c},[]);a(),yc(t,function(){z(\"active\"),z(\"complete\"),v(\"pending\"),\"function\"==typeof l&&l()})}}}}function ll(c){var l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,h=Zc(c);h&&yc([h],l)}var hl=function(){var c=H,l=E.familyPrefix,h=E.replacementClass,z=\"svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.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 .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.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%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.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}\";if(\"fa\"!==l||h!==c){var v=new RegExp(\"\\\\.fa\\\\-\",\"g\"),m=new RegExp(\"\\\\.\"+c,\"g\");z=z.replace(v,\".\"+l+\"-\").replace(m,\".\"+h)}return z};function zl(c){return{found:!0,width:c[0],height:c[1],icon:{tag:\"path\",attributes:{fill:\"currentColor\",d:c.slice(4)[0]}}}}function vl(){E.autoAddCss&&!tl&&(Y(hl()),tl=!0)}function ml(l,c){return Object.defineProperty(l,\"abstract\",{get:c}),Object.defineProperty(l,\"html\",{get:function(){return l.abstract.map(function(c){return bc(c)})}}),Object.defineProperty(l,\"node\",{get:function(){if(M){var c=i.createElement(\"div\");return c.innerHTML=l.html,c.children}}}),l}function sl(c){var l=c.prefix,h=void 0===l?\"fa\":l,z=c.iconName;if(z)return pc(al.definitions,h,z)||pc(T.styles,h,z)}var el,al=new(function(){function c(){k(this,c),this.definitions={}}return x(c,[{key:\"add\",value:function(){for(var l=this,c=arguments.length,h=Array(c),z=0;z<c;z++)h[z]=arguments[z];var v=h.reduce(this._pullDefinitions,{});Object.keys(v).forEach(function(c){l.definitions[c]=A({},l.definitions[c]||{},v[c]),function c(l,z){var h=Object.keys(z).reduce(function(c,l){var h=z[l];return h.icon?c[h.iconName]=h.icon:c[l]=h,c},{});\"function\"==typeof T.hooks.addPack?T.hooks.addPack(l,h):T.styles[l]=A({},T.styles[l]||{},h),\"fas\"===l&&c(\"fa\",z)}(c,v[c])})}},{key:\"reset\",value:function(){this.definitions={}}},{key:\"_pullDefinitions\",value:function(m,c){var s=c.prefix&&c.iconName&&c.icon?{0:c}:c;return Object.keys(s).map(function(c){var l=s[c],h=l.prefix,z=l.iconName,v=l.icon;m[h]||(m[h]={}),m[h][z]=v}),m}}]),c}()),tl=!1,Ml={i2svg:function(){var c=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(M){vl();var l=c.node,h=void 0===l?i:l,z=c.callback,v=void 0===z?function(){}:z;E.searchPseudoElements&&$c(h),cl(h,v)}},css:hl,insertCss:function(){tl||(Y(hl()),tl=!0)},watch:function(){var c=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},l=c.autoReplaceSvgRoot,h=c.observeMutationsRoot;!1===E.autoReplaceSvg&&(E.autoReplaceSvg=!0),E.observeMutations=!0,F(function(){il({autoReplaceSvgRoot:l}),Ac({treeCallback:cl,nodeCallback:ll,pseudoElementsCallback:$c,observeMutationsRoot:h})})}},fl=(el=function(c){var l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},h=l.transform,z=void 0===h?W:h,v=l.symbol,m=void 0!==v&&v,s=l.mask,e=void 0===s?null:s,a=l.title,t=void 0===a?null:a,M=l.classes,f=void 0===M?[]:M,r=l.attributes,i=void 0===r?{}:r,H=l.styles,n=void 0===H?{}:H;if(c){var V=c.prefix,o=c.iconName,C=c.icon;return ml(A({type:\"icon\"},c),function(){return vl(),E.autoA11y&&(t?i[\"aria-labelledby\"]=E.replacementClass+\"-title-\"+X():i[\"aria-hidden\"]=\"true\"),vc({icons:{main:zl(C),mask:e?zl(e.icon):{found:!1,width:null,height:null,icon:{}}},prefix:V,iconName:o,transform:A({},W,z),symbol:m,title:t,extra:{attributes:i,styles:n,classes:f}})})}},function(c){var l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},h=(c||{}).icon?c:sl(c||{}),z=l.mask;return z&&(z=(z||{}).icon?z:sl(z||{})),el(h,A({},l,{mask:z}))}),rl={noAuto:function(){E.autoReplaceSvg=!1,E.observeMutations=!1,xc&&xc.disconnect()},config:E,dom:Ml,library:al,parse:{transform:function(c){return Nc(c)}},findIconDefinition:sl,icon:fl,text:function(c){var l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},h=l.transform,z=void 0===h?W:h,v=l.title,m=void 0===v?null:v,s=l.classes,e=void 0===s?[]:s,a=l.attributes,t=void 0===a?{}:a,M=l.styles,f=void 0===M?{}:M;return ml({type:\"text\",content:c},function(){return vl(),mc({content:c,transform:A({},W,z),title:m,extra:{attributes:t,styles:f,classes:[E.familyPrefix+\"-layers-text\"].concat(j(e))}})})},counter:function(c){var l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},h=l.title,z=void 0===h?null:h,v=l.classes,m=void 0===v?[]:v,s=l.attributes,e=void 0===s?{}:s,a=l.styles,t=void 0===a?{}:a;return ml({type:\"counter\",content:c},function(){return vl(),function(c){var l=c.content,h=c.title,z=c.extra,v=A({},z.attributes,h?{title:h}:{},{class:z.classes.join(\" \")}),m=J(z.styles);0<m.length&&(v.style=m);var s=[];return s.push({tag:\"span\",attributes:v,children:[l]}),h&&s.push({tag:\"span\",attributes:{class:\"sr-only\"},children:[h]}),s}({content:c.toString(),title:z,extra:{attributes:e,styles:t,classes:[E.familyPrefix+\"-layers-counter\"].concat(j(m))}})})},layer:function(c){return ml({type:\"layer\"},function(){vl();var l=[];return c(function(c){Array.isArray(c)?c.map(function(c){l=l.concat(c.abstract)}):l=l.concat(c.abstract)}),[{tag:\"span\",attributes:{class:E.familyPrefix+\"-layers\"},children:l}]})},toHtml:bc},il=function(){var c=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{}).autoReplaceSvgRoot,l=void 0===c?i:c;0<Object.keys(T.styles).length&&M&&E.autoReplaceSvg&&rl.dom.i2svg({node:l})};!function(c){try{c()}catch(c){if(!u)throw c}}(function(){t&&(r.FontAwesome||(r.FontAwesome=rl),F(function(){il(),Ac({treeCallback:cl,nodeCallback:ll,pseudoElementsCallback:$c})})),T.hooks=A({},T.hooks,{addPack:function(c,l){T.styles[c]=A({},T.styles[c]||{},l),oc(),il()},addShims:function(c){var l;(l=T.shims).push.apply(l,j(c)),oc(),il()}})})}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvanMvYWxsLmpzP2FlNGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGFBQWEsU0FBUyxJQUFJLHVDQUF1QyxVQUFVLHNCQUFzQixrSEFBa0gsSUFBSSxTQUFTLFNBQVMsVUFBVSx3RUFBd0Usa1FBQWtRLGFBQWEsNEJBQTRCLGFBQWEsR0FBRyxZQUFZLGNBQWMsOEJBQThCLDRCQUE0Qiw4QkFBOEIsd0NBQXdDLFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxVQUFVLE9BQU8sOG53VkFBOG53VixhQUFhLElBQUksSUFBSSxTQUFTLGVBQWUsWUFBWSxpQkFBaUIsMENBQTBDLFdBQVcsNENBQTRDLEdBQUcsRUFBRSx3RUFBd0UsZ0JBQWdCLHlCQUF5QixVQUFVLEVBQUUsY0FBYyxhQUFhLFNBQVMsSUFBSSx1Q0FBdUMsVUFBVSxzQkFBc0Isa0hBQWtILElBQUksU0FBUyxTQUFTLFVBQVUsd0VBQXdFLGtRQUFrUSxhQUFhLDRCQUE0QixhQUFhLEdBQUcsWUFBWSxjQUFjLDhCQUE4Qiw0QkFBNEIsOEJBQThCLHdDQUF3QyxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsVUFBVSxPQUFPLHE1ckdBQXE1ckcsYUFBYSxJQUFJLElBQUksU0FBUyxlQUFlLFlBQVksaUJBQWlCLDBDQUEwQyxXQUFXLDRDQUE0QyxHQUFHLEVBQUUsd0VBQXdFLGdCQUFnQix5QkFBeUIsVUFBVSxFQUFFLGNBQWMsYUFBYSxTQUFTLElBQUksdUNBQXVDLFVBQVUsc0JBQXNCLGtIQUFrSCxJQUFJLFNBQVMsU0FBUyxVQUFVLHdFQUF3RSxrUUFBa1EsYUFBYSw0QkFBNEIsYUFBYSxHQUFHLFlBQVksY0FBYyw4QkFBOEIsNEJBQTRCLDhCQUE4Qix3Q0FBd0MsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFVBQVUs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QkFBNkIsR0FBRyxXQUFXLHNCQUFzQixZQUFZLGdCQUFnQix3QkFBd0IscUJBQXFCLDRFQUE0RSxFQUFFLEVBQUUscUJBQXFCLCtEQUErRCwyRkFBMkYsNkJBQTZCLEdBQUcsV0FBVyx5QkFBeUIsWUFBWSx3QkFBd0IsMENBQTBDLGlCQUFpQixRQUFRLEdBQUcsRUFBRSwwQkFBMEIsZ0JBQWdCLHdCQUF3QixTQUFTLGVBQWUscUNBQXFDLGFBQWEsdUJBQXVCLGdCQUFnQixjQUFjLElBQUksRUFBRSxvQ0FBb0MsK0VBQStFLEVBQUUsRUFBRSxtQkFBbUIsV0FBVyxhQUFhLFlBQVksS0FBSyxTQUFTLHFCQUFxQixtQ0FBbUMsdUJBQXVCLHlCQUF5QixJQUFJLHVCQUF1QiwrQkFBK0IsWUFBWSxFQUFFLEVBQUUsV0FBVyxlQUFlLGdFQUFnRSxzQ0FBc0MsbUVBQW1FLE9BQU8sR0FBRyxhQUFhLElBQUksSUFBSSxTQUFTLGVBQWUsWUFBWSxtREFBbUQsU0FBUywwREFBMEQsRUFBRSxlQUFlLFVBQVUsc0JBQXNCLGdCQUFnQixnQkFBZ0IsY0FBYyxzQkFBc0IsTUFBTSwwQ0FBMEMsRUFBRSxFQUFFIiwiZmlsZSI6Ijg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBGb250IEF3ZXNvbWUgRnJlZSA1LjEuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbVxuICogTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UgKEljb25zOiBDQyBCWSA0LjAsIEZvbnRzOiBTSUwgT0ZMIDEuMSwgQ29kZTogTUlUIExpY2Vuc2UpXG4gKi9cbiFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBjPXt9O3RyeXtcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYoYz13aW5kb3cpfWNhdGNoKGMpe312YXIgbD0oYy5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQsaD12b2lkIDA9PT1sP1wiXCI6bCx6PWMsdj0ofmguaW5kZXhPZihcIk1TSUVcIil8fGguaW5kZXhPZihcIlRyaWRlbnQvXCIpLFwiX19fRk9OVF9BV0VTT01FX19fXCIpLG09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2goYyl7cmV0dXJuITF9fSgpLHM9WzEsMiwzLDQsNSw2LDcsOCw5LDEwXSxlPXMuY29uY2F0KFsxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMF0pO1tcInhzXCIsXCJzbVwiLFwibGdcIixcImZ3XCIsXCJ1bFwiLFwibGlcIixcImJvcmRlclwiLFwicHVsbC1sZWZ0XCIsXCJwdWxsLXJpZ2h0XCIsXCJzcGluXCIsXCJwdWxzZVwiLFwicm90YXRlLTkwXCIsXCJyb3RhdGUtMTgwXCIsXCJyb3RhdGUtMjcwXCIsXCJmbGlwLWhvcml6b250YWxcIixcImZsaXAtdmVydGljYWxcIixcInN0YWNrXCIsXCJzdGFjay0xeFwiLFwic3RhY2stMnhcIixcImludmVyc2VcIixcImxheWVyc1wiLFwibGF5ZXJzLXRleHRcIixcImxheWVycy1jb3VudGVyXCJdLmNvbmNhdChzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYytcInhcIn0pKS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuXCJ3LVwiK2N9KSk7dmFyIGE9enx8e307YVt2XXx8KGFbdl09e30pLGFbdl0uc3R5bGVzfHwoYVt2XS5zdHlsZXM9e30pLGFbdl0uaG9va3N8fChhW3ZdLmhvb2tzPXt9KSxhW3ZdLnNoaW1zfHwoYVt2XS5zaGltcz1bXSk7dmFyIHQ9YVt2XSxNPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe3ZhciBoPWFyZ3VtZW50c1tsXTtmb3IodmFyIHogaW4gaClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCx6KSYmKGNbel09aFt6XSl9cmV0dXJuIGN9O3ZhciBmPXtcIjUwMHB4XCI6WzQ0OCw1MTIsW10sXCJmMjZlXCIsXCJNMTAzLjMgMzQ0LjNjLTYuNS0xNC4yLTYuOS0xOC4zIDcuNC0yMy4xIDI1LjYtOCA4IDkuMiA0My4yIDQ5LjJoLjN2LTkzLjljMS4yLTUwLjIgNDQtOTIuMiA5Ny43LTkyLjIgNTMuOSAwIDk3LjcgNDMuNSA5Ny43IDk2LjggMCA2My40LTYwLjggMTEzLjItMTI4LjUgOTMuMy0xMC41LTQuMi0yLjEtMzEuNyA4LjUtMjguNiA1MyAwIDg5LjQtMTAuMSA4OS40LTY0LjQgMC02MS03Ny4xLTg5LjYtMTE2LjktNDQuNi0yMy41IDI2LjQtMTcuNiA0Mi4xLTE3LjYgMTU3LjYgNTAuNyAzMSAxMTguMyAyMiAxNjAuNC0yMC4xIDI0LjgtMjQuOCAzOC41LTU4IDM4LjUtOTMgMC0zNS4yLTEzLjgtNjguMi0zOC44LTkzLjMtMjQuOC0yNC44LTU3LjgtMzguNS05My4zLTM4LjVzLTY4LjggMTMuOC05My41IDM4LjVjLS4zLjMtMTYgMTYuNS0yMS4yIDIzLjlsLS41LjZjLTMuMyA0LjctNi4zIDkuMS0yMC4xIDYuMS02LjktMS43LTE0LjMtNS44LTE0LjMtMTEuOFYyMGMwLTUgMy45LTEwLjUgMTAuNS0xMC41aDI0MS4zYzguMyAwIDguMyAxMS42IDguMyAxNS4xIDAgMy45IDAgMTUuMS04LjMgMTUuMUgxMzAuM3YxMzIuOWguM2MxMDQuMi0xMDkuOCAyODIuOC0zNiAyODIuOCAxMDguOSAwIDE3OC4xLTI0NC44IDIyMC4zLTMxMC4xIDYyLjh6bTYzLjMtMjYwLjhjLS41IDQuMiA0LjYgMjQuNSAxNC42IDIwLjZDMzA2IDU2LjYgMzg0IDE0NC41IDM5MC42IDE0NC41YzQuOCAwIDIyLjgtMTUuMyAxNC4zLTIyLjgtOTMuMi04OS0yMzQuNS01Ny0yMzguMy0zOC4yek0zOTMgNDE0LjdDMjgzIDUyNC42IDk0IDQ3NS41IDYxIDMxMC41YzAtMTIuMi0zMC40LTcuNC0yOC45IDMuMyAyNCAxNzMuNCAyNDYgMjU2LjkgMzgxLjYgMTIxLjMgNi45LTcuOC0xMi42LTI4LjQtMjAuNy0yMC40ek0yMTMuNiAzMDYuNmMwIDQgNC4zIDcuMyA1LjUgOC41IDMgMyA2LjEgNC40IDguNSA0LjQgMy44IDAgMi42LjIgMjIuMy0xOS41IDE5LjYgMTkuMyAxOS4xIDE5LjUgMjIuMyAxOS41IDUuNCAwIDE4LjUtMTAuNCAxMC43LTE4LjJMMjY1LjYgMjg0bDE4LjItMTguMmM2LjMtNi44LTEwLjEtMjEuOC0xNi4yLTE1LjdMMjQ5LjcgMjY4Yy0xOC42LTE4LjgtMTguNC0xOS41LTIxLjUtMTkuNS01IDAtMTggMTEuNy0xMi40IDE3LjNMMjM0IDI4NGMtMTguMSAxNy45LTIwLjQgMTkuMi0yMC40IDIyLjZ6XCJdLFwiYWNjZXNzaWJsZS1pY29uXCI6WzQ0OCw1MTIsW10sXCJmMzY4XCIsXCJNNDIzLjkgMjU1LjhMNDExIDQxMy4xYy0zLjMgNDAuNy02My45IDM1LjEtNjAuNi00LjlsMTAtMTIyLjUtNDEuMSAyLjNjMTAuMSAyMC43IDE1LjggNDMuOSAxNS44IDY4LjUgMCA0MS4yLTE2LjEgNzguNy00Mi4zIDEwNi41bC0zOS4zLTM5LjNjNTcuOS02My43IDEzLjEtMTY3LjItNzQtMTY3LjItMjUuOSAwLTQ5LjUgOS45LTY3LjIgMjZMNzMgMjQzLjJjMjItMjAuNyA1MC4xLTM1LjEgODEuNC00MC4ybDc1LjMtODUuNy00Mi42LTI0LjgtNTEuNiA0NmMtMzAgMjYuOC03MC42LTE4LjUtNDAuNS00NS40bDY4LTYwLjdjOS44LTguOCAyNC4xLTEwLjIgMzUuNS0zLjYgMCAwIDEzOS4zIDgwLjkgMTM5LjUgODEuMSAxNi4yIDEwLjEgMjAuNyAzNiA2LjEgNTIuNkwyODUuNyAyMjlsMTA2LjEtNS45YzE4LjUtMS4xIDMzLjYgMTQuNCAzMi4xIDMyLjd6bS02NC45LTE1NGMyOC4xIDAgNTAuOS0yMi44IDUwLjktNTAuOUM0MDkuOSAyMi44IDM4Ny4xIDAgMzU5IDBjLTI4LjEgMC01MC45IDIyLjgtNTAuOSA1MC45IDAgMjguMSAyMi44IDUwLjkgNTAuOSA1MC45ek0xNzkuNiA0NTYuNWMtODAuNiAwLTEyNy40LTkwLjYtODIuNy0xNTYuMWwtMzkuNy0zOS43QzM2LjQgMjg3IDI0IDMyMC4zIDI0IDM1Ni40YzAgMTMwLjcgMTUwLjcgMjAxLjQgMjUxLjQgMTIyLjVsLTM5LjctMzkuN2MtMTYgMTAuOS0zNS4zIDE3LjMtNTYuMSAxNy4zelwiXSxhY2N1c29mdDpbNjQwLDUxMixbXSxcImYzNjlcIixcIk00ODIuMiAzNzIuMUM0NzYuNSAzNjUuMiAyNTAgNzUgMjQyLjMgNjUuNWMtMTMuNy0xNy4yIDAtMTYuOCAxOS4yLTE2LjkgOS43LS4xIDEwNi4zLS42IDExNi41LS42IDI0LjEtLjEgMjguNy42IDM4LjQgMTIuOCAyLjEgMi43IDIwNS4xIDI0NS44IDIwNy4yIDI0OC4zIDUuNSA2LjcgMTUuMiAxOS4xIDcuMiAyMy40LTIuNCAxLjMtMTE0LjYgNDcuNy0xMTcuOCA0OC45LTEwLjEgNC0xNy41IDYuOC0zMC44LTkuM20xMTQuNy01LjZzLTExNSA1MC40LTExNy41IDUxLjZjLTE2IDcuMy0yNi45LTMuMi0zNi43LTE0LjZsLTU3LjEtNzRjLTUuNC0uOS02MC40LTkuNi02NS4zLTkuMy0zLjEuMi05LjYuOC0xNC40IDIuOS00LjkgMi4xLTE0NS4yIDUyLjgtMTUwLjIgNTQuNy01LjEgMi0xMS40IDMuNi0xMS4xIDcuNi4yIDIuNSAyIDIuNiA0LjYgMy41IDIuNy44IDMwMC45IDY3LjYgMzA4IDY5LjEgMTUuNiAzLjMgMzguNSAxMC41IDUzLjYgMS43IDIuMS0xLjIgMTIzLjgtNzYuNCAxMjUuOC03Ny44IDUuNC00IDQuMy02LjgtMS43LTguMi0yLjMtLjMtMjQuNi00LjctMzgtNy4ybS0zMjYtMTgxLjNzLTEyIDEuNi0yNSAxNS4xYy05IDkuMy0yNDIuMSAyMzkuMS0yNDMuNCAyNDAuOS03IDEwIDEuNiA2LjggMTUuNyAxLjcuOCAwIDExNC41LTM2LjYgMTE0LjUtMzYuNi41LS42LS4xLS4xLjYtLjYtLjQtNS4xLS44LTI2LjItMS0yNy43LS42LTUuMiAyLjItNi45IDctOC45bDkyLjYtMzMuOGMuNi0uOCA4OC41LTgxLjcgOTAuMi04My4zdi0xbC01MS4yLTY1LjhcIl0sYWRuOls0OTYsNTEyLFtdLFwiZjE3MFwiLFwiTTI0OCAxNjcuNWw2NC45IDk4LjhIMTgzLjFsNjQuOS05OC44ek00OTYgMjU2YzAgMTM2LjktMTExLjEgMjQ4LTI0OCAyNDhTMCAzOTIuOSAwIDI1NiAxMTEuMSA4IDI0OCA4czI0OCAxMTEuMSAyNDggMjQ4em0tOTkuOCA4Mi43TDI0OCAxMTUuNSA5OS44IDMzOC43aDMwLjRsMzMuNi01MS43aDE2OC42bDMzLjYgNTEuN2gzMC4yelwiXSxhZHZlcnNhbDpbNTEyLDUxMixbXSxcImYzNmFcIixcIk00ODIuMSAzMkgyOC43QzUuOCAzMiAwIDM3LjkgMCA2MC45djM5MC4yQzAgNDc0LjQgNS44IDQ4MCAyOC43IDQ4MGg0NTMuNGMyNC40IDAgMjkuOS01LjIgMjkuOS0yOS43VjYyLjJjMC0yNC42LTUuNC0zMC4yLTI5LjktMzAuMnpNMTc4LjQgMjIwLjNjLTI3LjUtMjAuMi03Mi4xLTguNy04NC4yIDIzLjQtNC4zIDExLjEtOS4zIDkuNS0xNy41IDguMy05LjctMS41LTE3LjItMy4yLTIyLjUtNS41LTI4LjgtMTEuNCA4LjYtNTUuMyAyNC45LTY0LjMgNDEuMS0yMS40IDgzLjQtMjIuMiAxMjUuMy00LjggNDAuOSAxNi44IDM0LjUgNTkuMiAzNC41IDEyOC41IDIuNyAyNS44LTQuMyA1OC4zIDkuMyA4OC44IDEuOSA0LjQuNCA3LjktMi43IDEwLjctOC40IDYuNy0zOS4zIDIuMi00Ni42LTcuNC0xLjktMi4yLTEuOC0zLjYtMy45LTYuMi0zLjYtMy45LTcuMy0yLjItMTEuOSAxLTU3LjQgMzYuNC0xNDAuMyAyMS40LTE0Ny00My4zLTMuMS0yOS4zIDEyLjQtNTcuMSAzOS42LTcxIDM4LjItMTkuNSAxMTIuMi0xMS44IDExNC0zMC45IDEuMS0xMC4yLTEuOS0yMC4xLTExLjMtMjcuM3ptMjg2LjcgMjIyYzAgMTUuMS0xMS4xIDkuOS0xNy44IDkuOUg1Mi40Yy03LjQgMC0xOC4yIDQuOC0xNy44LTEwLjcuNC0xMy45IDEwLjUtOS4xIDE3LjEtOS4xIDEzMi4zLS40IDI2NC41LS40IDM5Ni44IDAgNi44IDAgMTYuNi00LjQgMTYuNiA5Ljl6bTMuOC0zNDAuNXYyOTFjMCA1LjctLjcgMTMuOS04LjEgMTMuOS0xMi40LS40LTI3LjUgNy4xLTM2LjEtNS42LTUuOC04LjctNy44LTQtMTIuNC0xLjItNTMuNCAyOS43LTEyOC4xIDcuMS0xNDQuNC04NS4yLTYuMS0zMy40LS43LTY3LjEgMTUuNy0xMDAgMTEuOC0yMy45IDU2LjktNzYuMSAxMzYuMS0zMC41di03MWMwLTI2LjItLjEtMjYuMiAyNi0yNi4yIDMuMSAwIDYuNi40IDkuNyAwIDEwLjEtLjggMTMuNiA0LjQgMTMuNiAxNC4zLS4xLjItLjEuMy0uMS41em0tNTEuNSAyMzIuM2MtMTkuNSA0Ny42LTcyLjkgNDMuMy05MCA1LjItMTUuMS0zMy4zLTE1LjUtNjguMi40LTEwMS41IDE2LjMtMzQuMSA1OS43LTM1LjcgODEuNS00LjggMjAuNiAyOC44IDE0LjkgODQuNiA4LjEgMTAxLjF6bS0yOTQuOCAzNS4zYy03LjUtMS4zLTMzLTMuMy0zMy43LTI3LjgtLjQtMTMuOSA3LjgtMjMgMTkuOC0yNS44IDI0LjQtNS45IDQ5LjMtOS45IDczLjctMTQuNyA4LjktMiA3LjQgNC40IDcuOCA5LjUgMS40IDMzLTI2LjEgNTkuMi02Ny42IDU4Ljh6XCJdLGFmZmlsaWF0ZXRoZW1lOls1MTIsNTEyLFtdLFwiZjM2YlwiLFwiTTE1OS43IDIzNy40QzEwOC40IDMwOC4zIDQzLjEgMzQ4LjIgMTQgMzI2LjYtMTUuMiAzMDQuOSAyLjggMjMwIDU0LjIgMTU5LjFjNTEuMy03MC45IDExNi42LTExMC44IDE0NS43LTg5LjIgMjkuMSAyMS42IDExLjEgOTYuNi00MC4yIDE2Ny41em0zNTEuMi01Ny4zQzQzNy4xIDMwMy41IDMxOSAzNjcuOCAyNDYuNCAzMjMuN2MtMjUtMTUuMi00MS4zLTQxLjItNDktNzMuOC0zMy42IDY0LjgtOTIuOCAxMTMuOC0xNjQuMSAxMzMuMiA0OS44IDU5LjMgMTI0LjEgOTYuOSAyMDcgOTYuOSAxNTAgMCAyNzEuNi0xMjMuMSAyNzEuNi0yNzQuOS4xLTguNS0uMy0xNi44LTEtMjV6XCJdLGFsZ29saWE6WzQ0OCw1MTIsW10sXCJmMzZjXCIsXCJNMjI5LjMgMTgyLjZjLTQ5LjMgMC04OS4yIDM5LjktODkuMiA4OS4yIDAgNDkuMyAzOS45IDg5LjIgODkuMiA4OS4yczg5LjItMzkuOSA4OS4yLTg5LjJjMC00OS4zLTQwLTg5LjItODkuMi04OS4yem02Mi43IDU2LjZsLTU4LjkgMzAuNmMtMS44LjktMy44LS40LTMuOC0yLjNWMjAxYzAtMS41IDEuMy0yLjcgMi43LTIuNiAyNi4yIDEgNDguOSAxNS43IDYxLjEgMzcuMS43IDEuMy4yIDMtMS4xIDMuN3pNMzg5LjEgMzJINTguOUMyNi40IDMyIDAgNTguNCAwIDkwLjlWNDIxYzAgMzIuNiAyNi40IDU5IDU4LjkgNTlIMzg5YzMyLjYgMCA1OC45LTI2LjQgNTguOS01OC45VjkwLjlDNDQ4IDU4LjQgNDIxLjYgMzIgMzg5LjEgMzJ6bS0yMDIuNiA4NC43YzAtMTAuOCA4LjctMTkuNSAxOS41LTE5LjVoNDUuM2MxMC44IDAgMTkuNSA4LjcgMTkuNSAxOS41djE1LjRjMCAxLjgtMS43IDMtMy4zIDIuNS0xMi4zLTMuNC0yNS4xLTUuMS0zOC4xLTUuMS0xMy41IDAtMjYuNyAxLjgtMzkuNCA1LjUtMS43LjUtMy40LS44LTMuNC0yLjV2LTE1Ljh6bS04NC40IDM3bDkuMi05LjJjNy42LTcuNiAxOS45LTcuNiAyNy41IDBsNy43IDcuN2MxLjEgMS4xIDEgMy0uMyA0LTYuMiA0LjUtMTIuMSA5LjQtMTcuNiAxNC45LTUuNCA1LjQtMTAuNCAxMS4zLTE0LjggMTcuNC0xIDEuMy0yLjkgMS41LTQgLjNsLTcuNy03LjdjLTcuNi03LjUtNy42LTE5LjggMC0yNy40em0xMjcuMiAyNDQuOGMtNzAgMC0xMjYuNi01Ni43LTEyNi42LTEyNi42czU2LjctMTI2LjYgMTI2LjYtMTI2LjZjNzAgMCAxMjYuNiA1Ni42IDEyNi42IDEyNi42IDAgNjkuOC01Ni43IDEyNi42LTEyNi42IDEyNi42elwiXSxhbWF6b246WzQ0OCw1MTIsW10sXCJmMjcwXCIsXCJNMjU3LjIgMTYyLjdjLTQ4LjcgMS44LTE2OS41IDE1LjUtMTY5LjUgMTE3LjUgMCAxMDkuNSAxMzguMyAxMTQgMTgzLjUgNDMuMiA2LjUgMTAuMiAzNS40IDM3LjUgNDUuMyA0Ni44bDU2LjgtNTZTMzQxIDI4OC45IDM0MSAyNjEuNFYxMTQuM0MzNDEgODkgMzE2LjUgMzIgMjI4LjcgMzIgMTQwLjcgMzIgOTQgODcgOTQgMTM2LjNsNzMuNSA2LjhjMTYuMy00OS41IDU0LjItNDkuNSA1NC4yLTQ5LjUgNDAuNy0uMSAzNS41IDI5LjggMzUuNSA2OS4xem0wIDg2LjhjMCA4MC04NC4yIDY4LTg0LjIgMTcuMiAwLTQ3LjIgNTAuNS01Ni43IDg0LjItNTcuOHY0MC42em0xMzYgMTYzLjVjLTcuNyAxMC03MCA2Ny0xNzQuNSA2N1MzNC4yIDQwOC41IDkuNyAzNzljLTYuOC03LjcgMS0xMS4zIDUuNS04LjNDODguNSA0MTUuMiAyMDMgNDg4LjUgMzg3LjcgNDAxYzcuNS0zLjcgMTMuMyAyIDUuNSAxMnptMzkuOCAyLjJjLTYuNSAxNS44LTE2IDI2LjgtMjEuMiAzMS01LjUgNC41LTkuNSAyLjctNi41LTMuOHMxOS4zLTQ2LjUgMTIuNy01NWMtNi41LTguMy0zNy00LjMtNDgtMy4yLTEwLjggMS0xMyAyLTE0LS4zLTIuMy01LjcgMjEuNy0xNS41IDM3LjUtMTcuNSAxNS43LTEuOCA0MS0uOCA0NiA1LjcgMy43IDUuMSAwIDI3LjEtNi41IDQzLjF6XCJdLFwiYW1hem9uLXBheVwiOls2MTEsNTEyLFtdLFwiZjQyY1wiLFwiTTAgMzI1LjJjMi4zLTQuMiA1LjItNC45IDkuNy0yLjUgMTAuNCA1LjYgMjAuNiAxMS40IDMxLjIgMTYuNyA0MC43IDIwLjQgODMuMiAzNS42IDEyNy40IDQ2LjMgMjAuOSA1IDQxLjkgOSA2My4yIDExLjggMzEuNSA0LjIgNjMuMiA2IDk1IDUuMiAxNy40LS40IDM0LjgtMS44IDUyLjEtMy44IDU2LjQtNi43IDExMC45LTIwLjggMTYzLjMtNDIuOCAyLjktMS4yIDUuOS0yIDkuMS0xLjIgNi43IDEuOCA5IDkgNC4xIDEzLjktMi44IDIuOC02LjMgNS4xLTkuNiA3LjQtMzAuNyAyMS4xLTY0LjIgMzYuNC05OS42IDQ3LjktMjQuNiA3LjktNDkuNiAxMy44LTc1LjEgMTcuNi0xNy42IDIuNi0zNS40IDQuNC01My4yIDQuOC0uOCAwLTEuNy4yLTIuNS4zSDI5NGMtLjgtLjEtMS43LS4zLTIuNS0uMy0zLjYtLjItNy4yLS4zLTEwLjctLjQtMTYuOS0uNy0zMy43LTIuNi01MC40LTUuMy0yNy40LTQuNS01NC4yLTExLjQtODAuNC0yMC45LTU0LjEtMTkuNi0xMDIuNi00OC42LTE0NS42LTg3LTEuOC0xLjYtMy0zLjgtNC40LTUuN3YtMnpNMTU4IDY1Yy0xLjQuMi0yLjkuNC00LjMuNi0xNCAxLjctMjYuNiA2LjktMzggMTUuMS0yLjQgMS43LTQuNiAzLjUtNy4xIDUuNC0uMi0uNS0uNC0xLS40LTEuNC0uNC0yLjctLjgtNS41LTEuMy04LjItLjctNC42LTMtNi42LTcuNi02LjZIODcuOGMtNi45IDAtOC4yIDEuMy04LjIgOC4ydjIwOS4zYzAgMSAwIDIgLjEgMyAuMiAzIDIgNC45IDQuOSA1IDcgLjEgMTQuMS4xIDIxLjEgMCAyLjkgMCA0LjctMiA1LTUgLjEtMSAuMS0yIC4xLTNWMjE1YzEuMS45IDEuNyAxLjQgMi4yIDEuOSAxNy45IDE0LjkgMzguNSAxOS44IDYxIDE1LjQgMjAuNC00IDM0LjYtMTYuNSA0My44LTM0LjkgNy0xMy45IDkuOS0yOC43IDEwLjMtNDQuMS41LTE3LjEtMS4yLTMzLjktOC4xLTQ5LjgtOC41LTE5LjYtMjIuNi0zMi41LTQzLjktMzYuOS0zLjItLjctNi41LTEtOS44LTEuNS0yLjgtLjEtNS41LS4xLTguMy0uMXptLTQ3LjQgNDEuOWMwLTEuNS40LTIuNCAxLjctMy4zIDEzLjctOS41IDI4LjgtMTQuNSA0NS42LTEzLjIgMTQuOSAxLjEgMjcuMSA4LjQgMzMuNSAyNS45IDMuOSAxMC43IDQuOSAyMS44IDQuOSAzMyAwIDEwLjQtLjggMjAuNi00IDMwLjYtNi44IDIxLjMtMjIuNCAyOS40LTQyLjYgMjguNS0xNC0uNi0yNi4yLTYtMzcuNC0xMy45LTEuMi0uOS0xLjctMS43LTEuNy0zLjMuMS0xNC4xIDAtMjguMSAwLTQyLjIgMC0xNCAuMS0yOCAwLTQyLjF6TTMxNi4zIDY1Yy0xIC4xLTIgLjMtMi45LjQtOS44LjUtMTkuNCAxLjctMjguOSA0LjEtNi4xIDEuNi0xMiAzLjgtMTcuOSA1LjgtMy42IDEuMi01LjQgMy44LTUuMyA3LjcuMSAzLjMtLjEgNi42IDAgOS45LjEgNC44IDIuMSA2LjEgNi44IDQuOSA3LjgtMiAxNS42LTQuMiAyMy41LTUuNyAxMi4zLTIuMyAyNC43LTMuMyAzNy4yLTEuNCA2LjUgMSAxMi42IDIuOSAxNi44IDguNCAzLjcgNC44IDUuMSAxMC41IDUuMyAxNi40LjMgOC4zLjIgMTYuNi4zIDI0LjkgMCAuNC0uMS45LS4yIDEuNC0uNS0uMS0uOSAwLTEuMy0uMS0xMC41LTIuNS0yMS4xLTQuMy0zMi00LjktMTEuMy0uNi0yMi41LjEtMzMuMyAzLjktMTIuOSA0LjUtMjMuMyAxMi4zLTI5LjQgMjQuOS00LjcgOS44LTUuNCAyMC4yLTMuOSAzMC43IDIgMTQgOSAyNC44IDIxLjQgMzEuNyAxMS45IDYuNiAyNC44IDcuNCAzNy45IDUuNCAxNS4xLTIuMyAyOC41LTguNyA0MC4zLTE4LjQuNC0uNC45LS43IDEuNi0xLjEuNiAzLjggMS4xIDcuNCAxLjggMTEgLjYgMy4xIDIuNSA1LjEgNS40IDUuMiA1LjQuMSAxMC45LjEgMTYuMyAwIDIuNy0uMSA0LjUtMS45IDQuOC00LjcuMS0uOS4xLTEuOS4xLTIuOHYtMTA2YzAtNC4zLS4yLTguNi0uOS0xMi45LTEuOS0xMi45LTcuNC0yMy41LTE5LTMwLjQtNi43LTQtMTQuMS02LTIxLjgtNy4xLTMuNi0uNS03LjItLjgtMTAuOC0xLjMtMy45LjEtNy45LjEtMTEuOS4xem0zNSAxMjcuN2MwIDEuMy0uNCAyLjItMS41IDMtMTEuMiA4LjEtMjMuNSAxMy41LTM3LjQgMTQuOS01LjcuNi0xMS40LjQtMTYuOC0xLjgtNi4zLTIuNS0xMC40LTYuOS0xMi40LTEzLjNzLTItMTMtLjEtMTkuNGMyLjUtOC4zIDguNC0xMyAxNi40LTE1LjYgOC4xLTIuNiAxNi41LTMgMjQuOC0yLjIgOC40LjcgMTYuNiAyLjMgMjUgMy40IDEuNi4yIDIuMSAxIDIuMSAyLjYtLjEgNC44IDAgOS41IDAgMTQuMy0uMSA0LjctLjIgOS40LS4xIDE0LjF6bTI1OS45IDEyOS40Yy0xLTUtNC44LTYuOS05LjEtOC4zLTYuOC0yLjMtMTMuOS0zLjMtMjEtMy45LTEzLjEtMS4xLTI2LjItLjUtMzkuMiAxLjktMTQuMyAyLjctMjcuOSA3LjMtNDAgMTUuNi0xLjQgMS0yLjggMi4xLTMuNyAzLjUtLjcgMS4xLS45IDIuOC0uNSA0IC40IDEuNSAyLjEgMS45IDMuNiAxLjguNyAwIDEuNSAwIDIuMi0uMSA3LjgtLjggMTUuNS0xLjcgMjMuMy0yLjUgMTEuNC0xLjEgMjIuOS0xLjggMzQuMy0uOSA0LjguMyA5LjcgMS40IDE0LjQgMi43IDUuMSAxLjQgNy40IDUuMiA3LjYgMTAuNC40IDgtMS40IDE1LjctMy41IDIzLjMtNC4xIDE1LjQtMTAgMzAuMy0xNS44IDQ1LjEtLjQgMS0uOCAyLTEgMy0uNSAyLjkgMS4yIDQuOCA0LjEgNC4xIDEuNy0uNCAzLjYtMS4zIDQuOC0yLjUgNC40LTQuMyA4LjktOC42IDEyLjctMTMuNCAxMi44LTE2LjQgMjAuMy0zNS4zIDI0LjctNTUuNi44LTMuNiAxLjQtNy4zIDIuMS0xMC45di0xNy4zek00NzkuMSAxOTguOWMtMTIuOS0zNS43LTI1LjgtNzEuNS0zOC43LTEwNy4yLTItNS43LTQuMi0xMS4zLTYuMy0xNi45LTEuMS0yLjktMy4yLTQuOC02LjQtNC44LTcuNi0uMS0xNS4yLS4yLTIyLjktLjEtMi41IDAtMy43IDItMy4yIDQuNS41IDIuMSAxLjEgNC4xIDEuOSA2LjEgMTkuNiA0OC41IDM5LjMgOTcuMSA1OS4xIDE0NS41IDEuNyA0LjEgMi4xIDcuNi4yIDExLjgtMy4zIDcuMy01LjkgMTUtOS4zIDIyLjMtMyA2LjUtOCAxMS40LTE1LjIgMTMuMy01LjEgMS40LTEwLjIgMS42LTE1LjQgMS4xLTIuNS0uMi01LS44LTcuNS0xLTMuNC0uMi01LjEgMS4zLTUuMiA0LjgtLjEgMy4zLS4xIDYuNiAwIDkuOS4xIDUuNSAyIDggNy40IDguOSA1LjYgMSAxMS4zIDEuOSAxNi45IDIgMTcuMS40IDMwLjctNi41IDM5LjUtMjEuNCAzLjUtNS45IDYuNy0xMi4xIDkuMi0xOC40IDIzLjctNTkuOCA0Ny4xLTExOS43IDcwLjYtMTc5LjYuNy0xLjggMS4zLTMuNiAxLjYtNS41LjQtMi44LS45LTQuNC0zLjctNC40LTYuNi0uMS0xMy4zIDAtMTkuOSAwLTMuNyAwLTYuMyAxLjYtNy43IDUuMi0uNSAxLjQtMS4xIDIuNy0xLjYgNC4xLTExLjYgMzMuMy0yMy4yIDY2LjYtMzQuOCAxMDAtMi41IDcuMi01LjEgMTQuNS03LjcgMjIuMi0uNC0xLjEtLjYtMS43LS45LTIuNHpcIl0sYW1pbGlhOls0NDgsNTEyLFtdLFwiZjM2ZFwiLFwiTTI0MC4xIDMyYy02MS45IDAtMTMxLjUgMTYuOS0xODQuMiA1NS40LTUuMSAzLjEtOS4xIDkuMi03LjIgMTkuNCAxLjEgNS4xIDUuMSAyNy40IDEwLjIgMzkuNiA0LjEgMTAuMiAxNC4yIDEwLjIgMjAuMyA2LjEgMzIuNS0yMi4zIDk2LjUtNDcuNyAxNTIuMy00Ny43IDU3LjkgMCA1OC45IDI4LjQgNTguOSA3My4xdjM4LjVDMjAzIDIyNy43IDc4LjIgMjUxIDQ2LjcgMjY0LjIgMTEuMiAyODAuNSAxNi4zIDM1Ny43IDE2LjMgMzc2czE1LjIgMTA0IDEyNC45IDEwNGM0Ny44IDAgMTEzLjctMjAuNyAxNTMuMy00Mi4xdjI1LjRjMCAzIDIuMSA4LjIgNi4xIDkuMSAzLjEgMSA1MC43IDIgNTkuOSAyczYyLjUuMyA2Ni41LS43YzQuMS0xIDUuMS02LjEgNS4xLTkuMVYxNjhjLS4xLTgwLjMtNTcuOS0xMzYtMTkyLTEzNnptLTg3LjkgMzI3LjdjMC0xMi4yLTMtNDIuNyAxOC4zLTUyLjkgMjQuMy0xMy4yIDc1LjEtMjkuNCAxMTkuOC0zMy41VjM4MGMtMjEuNCAxMy4yLTQ4LjcgMjQuNC03OS4xIDI0LjQtNTIuOCAwLTU4LjktMzMuNS01OS00NC43XCJdLGFuZHJvaWQ6WzQ0OCw1MTIsW10sXCJmMTdiXCIsXCJNODkuNiAyMDQuNXYxMTUuOGMwIDE1LjQtMTIuMSAyNy43LTI3LjUgMjcuNy0xNS4zIDAtMzAuMS0xMi40LTMwLjEtMjcuN1YyMDQuNWMwLTE1LjEgMTQuOC0yNy41IDMwLjEtMjcuNSAxNS4xIDAgMjcuNSAxMi40IDI3LjUgMjcuNXptMTAuOCAxNTdjMCAxNi40IDEzLjIgMjkuNiAyOS42IDI5LjZoMTkuOWwuMyA2MS4xYzAgMzYuOSA1NS4yIDM2LjYgNTUuMiAwdi02MS4xaDM3LjJ2NjEuMWMwIDM2LjcgNTUuNSAzNi44IDU1LjUgMHYtNjEuMWgyMC4yYzE2LjIgMCAyOS40LTEzLjIgMjkuNC0yOS42VjE4Mi4xSDEwMC40djE3OS40em0yNDgtMTg5LjFIOTkuM2MwLTQyLjggMjUuNi04MCA2My42LTk5LjRsLTE5LjEtMzUuM2MtMi44LTQuOSA0LjMtOCA2LjctMy44bDE5LjQgMzUuNmMzNC45LTE1LjUgNzUtMTQuNyAxMDguMyAwTDI5Ny41IDM0YzIuNS00LjMgOS41LTEuMSA2LjcgMy44TDI4NS4xIDczYzM3LjcgMTkuNCA2My4zIDU2LjYgNjMuMyA5OS40em0tMTcwLjctNTUuNWMwLTUuNy00LjYtMTAuNS0xMC41LTEwLjUtNS43IDAtMTAuMiA0LjgtMTAuMiAxMC41czQuNiAxMC41IDEwLjIgMTAuNWM1LjkgMCAxMC41LTQuOCAxMC41LTEwLjV6bTExMy40IDBjMC01LjctNC42LTEwLjUtMTAuMi0xMC41LTUuOSAwLTEwLjUgNC44LTEwLjUgMTAuNXM0LjYgMTAuNSAxMC41IDEwLjVjNS42IDAgMTAuMi00LjggMTAuMi0xMC41em05NC44IDYwLjFjLTE1LjEgMC0yNy41IDEyLjEtMjcuNSAyNy41djExNS44YzAgMTUuNCAxMi40IDI3LjcgMjcuNSAyNy43IDE1LjQgMCAzMC4xLTEyLjQgMzAuMS0yNy43VjIwNC41YzAtMTUuNC0xNC44LTI3LjUtMzAuMS0yNy41elwiXSxhbmdlbGxpc3Q6WzQ0OCw1MTIsW10sXCJmMjA5XCIsXCJNMzQ3LjEgMjE1LjRjMTEuNy0zMi42IDQ1LjQtMTI2LjkgNDUuNC0xNTcuMSAwLTI2LjYtMTUuNy00OC45LTQzLjctNDguOS00NC42IDAtODQuNiAxMzEuNy05Ny4xIDE2My4xQzI0MiAxNDQgMTk2LjYgMCAxNTYuNiAwYy0zMS4xIDAtNDUuNyAyMi45LTQ1LjcgNTEuNyAwIDM1LjMgMzQuMiAxMjYuOCA0Ni42IDE2Mi02LjMtMi4zLTEzLjEtNC4zLTIwLTQuMy0yMy40IDAtNDguMyAyOS4xLTQ4LjMgNTIuNiAwIDguOSA0LjkgMjEuNCA4IDI5LjctMzYuOSAxMC01MS4xIDM0LjYtNTEuMSA3MS43QzQ2IDQzNS42IDExNC40IDUxMiAyMTAuNiA1MTJjMTE4IDAgMTkxLjQtODguNiAxOTEuNC0yMDIuOSAwLTQzLjEtNi45LTgyLTU0LjktOTMuN3pNMzExLjcgMTA4YzQtMTIuMyAyMS4xLTY0LjMgMzcuMS02NC4zIDguNiAwIDEwLjkgOC45IDEwLjkgMTYgMCAxOS4xLTM4LjYgMTI0LjYtNDcuMSAxNDhsLTM0LTYgMzMuMS05My43ek0xNDIuMyA0OC4zYzAtMTEuOSAxNC41LTQ1LjcgNDYuMyA0Ny4xbDM0LjYgMTAwLjNjLTE1LjYtMS4zLTI3LjctMy0zNS40IDEuNC0xMC45LTI4LjgtNDUuNS0xMTkuNy00NS41LTE0OC44ek0xNDAgMjQ0YzI5LjMgMCA2Ny4xIDk0LjYgNjcuMSAxMDcuNCAwIDUuMS00LjkgMTEuNC0xMC42IDExLjQtMjAuOSAwLTc2LjktNzYuOS03Ni45LTk3LjcuMS03LjcgMTIuNy0yMS4xIDIwLjQtMjEuMXptMTg0LjMgMTg2LjNjLTI5LjEgMzItNjYuMyA0OC42LTEwOS43IDQ4LjYtNTkuNCAwLTEwNi4zLTMyLjYtMTI4LjktODguMy0xNy4xLTQzLjQgMy44LTY4LjMgMjAuNi02OC4zIDExLjQgMCA1NC4zIDYwLjMgNTQuMyA3My4xIDAgNC45LTcuNyA4LjMtMTEuNyA4LjMtMTYuMSAwLTIyLjQtMTUuNS01MS4xLTUxLjQtMjkuNyAyOS43IDIwLjUgODYuOSA1OC4zIDg2LjkgMjYuMSAwIDQzLjEtMjQuMiAzOC00MiAzLjcgMCA4LjMuMyAxMS43LS42IDEuMSAyNy4xIDkuMSA1OS40IDQxLjcgNjEuNyAwLS45IDItNy4xIDItNy40IDAtMTcuNC0xMC42LTMyLjYtMTAuNi01MC4zIDAtMjguMyAyMS43LTU1LjcgNDMuNy03MS43IDgtNiAxNy43LTkuNyAyNy4xLTEzLjEgOS43LTMuNyAyMC04IDI3LjQtMTUuNC0xLjEtMTEuMi01LjctMjEuMS0xNi45LTIxLjEtMjcuNyAwLTEyMC42IDQtMTIwLjYtMzkuNyAwLTYuNy4xLTEzLjEgMTcuNC0xMy4xIDMyLjMgMCAxMTQuMyA4IDEzOC4zIDI5LjEgMTguMSAxNi4xIDI0LjMgMTEzLjItMzEgMTc0Ljd6bS05OC42LTEyNmM5LjcgMy4xIDE5LjcgNCAyOS43IDYtNy40IDUuNC0xNCAxMi0yMC4zIDE5LjEtMi44LTguNS02LjItMTYuOC05LjQtMjUuMXpcIl0sYW5ncnljcmVhdGl2ZTpbNjQwLDUxMixbXSxcImYzNmVcIixcIk02NDAgMjM4LjJsLTMuMiAyOC4yLTM0LjUgMi4zLTIgMTguMSAzNC41LTIuMy0zLjIgMjguMi0zNC40IDIuMi0yLjMgMjAuMSAzNC40LTIuMi0zIDI2LjEtNjQuNyA0LjEgMTIuNy0xMTMuMkw1MjcgMzY1LjJsLTMxLjkgMi0yMy44LTExNy44IDMwLjMtMiAxMy42IDc5LjQgMzEuNy04Mi40IDkzLjEtNi4yek00MjYuOCAzNzEuNWwyOC4zLTEuOEw0NjggMjQ5LjZsLTI4LjQgMS45LTEyLjggMTIwek0xNjIgMzg4LjFsLTE5LjQtMzYtMy41IDM3LjQtMjguMiAxLjcgMi43LTI5LjFjLTExIDE4LTMyIDM0LjMtNTYuOSAzNS44QzIzLjkgMzk5LjktMyAzNzcgLjMgMzM5LjdjMi42LTI5LjMgMjYuNy02Mi44IDY3LjUtNjUuNCAzNy43LTIuNCA0Ny42IDIzLjIgNTEuMyAyOC44bDIuOC0zMC44IDM4LjktMi41YzIwLjEtMS4zIDM4LjcgMy43IDQyLjUgMjMuN2wyLjYtMjYuNiA2NC44LTQuMi0yLjcgMjcuOS0zNi40IDIuNC0xLjcgMTcuOSAzNi40LTIuMy0yLjcgMjcuOS0zNi40IDIuMy0xLjkgMTkuOSAzNi4zLTIuMy0yLjEgMjAuOCA1NS0xMTcuMiAyMy44LTEuNkwzNzAuNCAzNjlsOC45LTg1LjYtMjIuMyAxLjQgMi45LTI3LjkgNzUtNC45LTMgMjgtMjQuMyAxLjYtOS43IDkxLjktNTggMy43LTQuMy0xNS42LTM5LjQgMi41LTggMTYuMy0xMjYuMiA3Ljd6bS00NC4zLTcwLjJsLTI2LjQgMS43Qzg0LjYgMzA3LjIgNzYuOSAzMDMgNjUgMzAzLjhjLTE5IDEuMi0zMy4zIDE3LjUtMzQuNiAzMy4zLTEuNCAxNiA3LjMgMzIuNSAyOC43IDMxLjIgMTIuOC0uOCAyMS4zLTguNiAyOC45LTE4LjlsMjctMS43IDIuNy0yOS44em01Ni4xLTcuN2MxLjItMTIuOS03LjYtMTMuNi0yNi4xLTEyLjRsLTIuNyAyOC41YzE0LjItLjkgMjcuNS0yLjEgMjguOC0xNi4xem0yMS4xIDcwLjhsNS44LTYwYy01IDEzLjUtMTQuNyAyMS4xLTI3LjkgMjYuNmwyMi4xIDMzLjR6bTEzNS40LTQ1bC03LjktMzcuOC0xNS44IDM5LjMgMjMuNy0xLjV6bS0xNzAuMS03NC42bC00LjMtMTcuNS0zOS42IDIuNi04LjEgMTguMi0zMS45IDIuMSA1Ny0xMjEuOSAyMy45LTEuNiAzMC43IDEwMiA5LjktMTA0LjcgMjctMS44IDM3LjggNjMuNiA2LjUtNjYuNiAyOC41LTEuOS00IDQxLjJjNy40LTEzLjUgMjIuOS00NC43IDYzLjYtNDcuNSA0MC41LTIuOCA1Mi40IDI5LjMgNTMuNCAzMC4zbDMuMy0zMiAzOS4zLTIuN2MxMi43LS45IDI3LjguMyAzNi4zIDkuN2wtNC40LTExLjkgMzIuMi0yLjIgMTIuOSA0My4yIDIzLTQ1LjcgMzEtMi4yLTQzLjYgNzguNC00LjggNDQuMy0yOC40IDEuOSA0LjgtNDQuMy0xNS44LTQzYzEgMjIuMy05LjIgNDAuMS0zMiA0OS42bDI1LjIgMzguOC0zNi40IDIuNC0xOS4yLTM2LjgtNCAzOC4zLTI4LjQgMS45IDMuMy0zMS41Yy02LjcgOS4zLTE5LjcgMzUuNC01OS42IDM4LTI2LjIgMS43LTQ1LjYtMTAuMy01NS40LTM5LjJsLTQgNDAuMy0yNSAxLjYtMzcuNi02My4zLTYuMyA2Ni4yLTU2LjggMy43em0yNzYuNi04Mi4xYzEwLjItLjcgMTcuNS0yLjEgMjEuNi00LjMgNC41LTIuNCA3LTYuNCA3LjYtMTIuMS42LTUuMy0uNi04LjgtMy40LTEwLjQtMy42LTIuMS0xMC42LTIuOC0yMi45LTJsLTIuOSAyOC44ek0zMjcuNyAyMTRjNS42IDUuOSAxMi43IDguNSAyMS4zIDcuOSA0LjctLjMgOS4xLTEuOCAxMy4zLTQuMSA1LjUtMyAxMC42LTggMTUuMS0xNC4zbC0zNC4yIDIuMyAyLjQtMjMuOSA2My4xLTQuMyAxLjItMTItMzEuMiAyLjFjLTQuMS0zLjctNy44LTYuNi0xMS4xLTguMS00LTEuNy04LjEtMi44LTEyLjItMi41LTggLjUtMTUuMyAzLjYtMjIgOS4yLTcuNyA2LjQtMTIgMTQuNS0xMi45IDI0LjQtMS4xIDkuNiAxLjQgMTcuMyA3LjIgMjMuM3ptLTIwMS4zIDguMmwyMy44LTEuNi04LjMtMzcuNi0xNS41IDM5LjJ6XCJdLGFuZ3VsYXI6WzQxNSw1MTIsW10sXCJmNDIwXCIsXCJNMTY5LjcgMjY4LjFoNzYuMmwtMzguMS05MS42LTM4LjEgOTEuNnpNMjA3LjggMzJMMCAxMDYuNGwzMS44IDI3NS43IDE3NiA5Ny45IDE3Ni05Ny45IDMxLjgtMjc1LjdMMjA3LjggMzJ6TTMzOCAzNzMuOGgtNDguNmwtMjYuMi02NS40SDE1Mi42bC0yNi4yIDY1LjRINzcuN0wyMDcuOCA4MS41IDMzOCAzNzMuOHpcIl0sXCJhcHAtc3RvcmVcIjpbNTEyLDUxMixbXSxcImYzNmZcIixcIk0yNTUuOSAxMjAuOWw5LjEtMTUuN2M1LjYtOS44IDE4LjEtMTMuMSAyNy45LTcuNSA5LjggNS42IDEzLjEgMTguMSA3LjUgMjcuOWwtODcuNSAxNTEuNWg2My4zYzIwLjUgMCAzMiAyNC4xIDIzLjEgNDAuOEgxMTMuOGMtMTEuMyAwLTIwLjQtOS4xLTIwLjQtMjAuNCAwLTExLjMgOS4xLTIwLjQgMjAuNC0yMC40aDUybDY2LjYtMTE1LjQtMjAuOC0zNi4xYy01LjYtOS44LTIuMy0yMi4yIDcuNS0yNy45IDkuOC01LjYgMjIuMi0yLjMgMjcuOSA3LjVsOC45IDE1Ljd6bS03OC43IDIxOGwtMTkuNiAzNGMtNS42IDkuOC0xOC4xIDEzLjEtMjcuOSA3LjUtOS44LTUuNi0xMy4xLTE4LjEtNy41LTI3LjlsMTQuNi0yNS4yYzE2LjQtNS4xIDI5LjgtMS4yIDQwLjQgMTEuNnptMTY4LjktNjEuN2g1My4xYzExLjMgMCAyMC40IDkuMSAyMC40IDIwLjQgMCAxMS4zLTkuMSAyMC40LTIwLjQgMjAuNGgtMjkuNWwxOS45IDM0LjVjNS42IDkuOCAyLjMgMjIuMi03LjUgMjcuOS05LjggNS42LTIyLjIgMi4zLTI3LjktNy41LTMzLjUtNTguMS01OC43LTEwMS42LTc1LjQtMTMwLjYtMTcuMS0yOS41LTQuOS01OS4xIDcuMi02OS4xIDEzLjQgMjMgMzMuNCA1Ny43IDYwLjEgMTA0ek0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0yMTYgMjQ4YzAgMTE4LjctOTYuMSAyMTYtMjE2IDIxNi0xMTguNyAwLTIxNi05Ni4xLTIxNi0yMTYgMC0xMTguNyA5Ni4xLTIxNiAyMTYtMjE2IDExOC43IDAgMjE2IDk2LjEgMjE2IDIxNnpcIl0sXCJhcHAtc3RvcmUtaW9zXCI6WzQ0OCw1MTIsW10sXCJmMzcwXCIsXCJNNDAwIDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHpNMTI3IDM4NC41Yy01LjUgOS42LTE3LjggMTIuOC0yNy4zIDcuMy05LjYtNS41LTEyLjgtMTcuOC03LjMtMjcuM2wxNC4zLTI0LjdjMTYuMS00LjkgMjkuMy0xLjEgMzkuNiAxMS40TDEyNyAzODQuNXptMTM4LjktNTMuOUg4NGMtMTEgMC0yMC05LTIwLTIwczktMjAgMjAtMjBoNTFsNjUuNC0xMTMuMi0yMC41LTM1LjRjLTUuNS05LjYtMi4yLTIxLjggNy4zLTI3LjMgOS42LTUuNSAyMS44LTIuMiAyNy4zIDcuM2w4LjkgMTUuNCA4LjktMTUuNGM1LjUtOS42IDE3LjgtMTIuOCAyNy4zLTcuMyA5LjYgNS41IDEyLjggMTcuOCA3LjMgMjcuM2wtODUuOCAxNDguNmg2Mi4xYzIwLjIgMCAzMS41IDIzLjcgMjIuNyA0MHptOTguMSAwaC0yOWwxOS42IDMzLjljNS41IDkuNiAyLjIgMjEuOC03LjMgMjcuMy05LjYgNS41LTIxLjggMi4yLTI3LjMtNy4zLTMyLjktNTYuOS01Ny41LTk5LjctNzQtMTI4LjEtMTYuNy0yOS00LjgtNTggNy4xLTY3LjggMTMuMSAyMi43IDMyLjcgNTYuNyA1OC45IDEwMmg1MmMxMSAwIDIwIDkgMjAgMjAgMCAxMS4xLTkgMjAtMjAgMjB6XCJdLGFwcGVyOls2NDAsNTEyLFtdLFwiZjM3MVwiLFwiTTQyLjEgMjM5LjFjMjIuMiAwIDI5IDIuOCAzMy41IDE0LjZoLjh2LTIyLjljMC0xMS4zLTQuOC0xNS40LTE3LjktMTUuNC0xMS4zIDAtMTQuNCAyLjUtMTUuMSAxMi44SDQuOGMuMy0xMy45IDEuNS0xOS4xIDUuOC0yNC40QzE3LjkgMTk1IDI5LjUgMTkyIDU2LjcgMTkyYzMzIDAgNDcuMSA1IDUzLjkgMTguOSAyIDQuMyA0IDE1LjYgNCAyMy43djc2LjNINzYuM2wxLjMtMTkuMWgtMWMtNS4zIDE1LjYtMTMuNiAyMC40LTM1LjUgMjAuNC0zMC4zIDAtNDEuMS0xMC4xLTQxLjEtMzcuMyAwLTI1LjIgMTIuMy0zNS44IDQyLjEtMzUuOHptMTcuMSA0OC4xYzEzLjEgMCAxNi45LTMgMTYuOS0xMy40IDAtOS4xLTQuMy0xMS42LTE5LjYtMTEuNi0xMy4xIDAtMTcuOSAzLTE3LjkgMTIuMS0uMSAxMC40IDMuNyAxMi45IDIwLjYgMTIuOXptNzcuOC05NC45aDM4LjNsLTEuNSAyMC42aC44YzkuMS0xNy4xIDE1LjktMjAuOSAzNy41LTIwLjkgMTQuNCAwIDI0LjcgMyAzMS41IDkuMSA5LjggOC42IDEyLjggMjAuNCAxMi44IDQ4LjEgMCAzMC0zIDQzLjEtMTIuMSA1Mi45LTYuOCA3LjMtMTYuNCAxMC4xLTMzLjIgMTAuMS0yMC40IDAtMjkuMi01LjUtMzMuOC0yMS4yaC0uOHY3MC4zSDEzN3YtMTY5em04MC45IDYwLjdjMC0yNy41LTMuMy0zMi41LTIwLjctMzIuNS0xNi45IDAtMjAuNyA1LTIwLjcgMjguNyAwIDI4IDMuNSAzMy41IDIxLjIgMzMuNSAxNi40IDAgMjAuMi01LjYgMjAuMi0yOS43em01Ny45LTYwLjdoMzguM2wtMS41IDIwLjZoLjhjOS4xLTE3LjEgMTUuOS0yMC45IDM3LjUtMjAuOSAxNC40IDAgMjQuNyAzIDMxLjUgOS4xIDkuOCA4LjYgMTIuOCAyMC40IDEyLjggNDguMSAwIDMwLTMgNDMuMS0xMi4xIDUyLjktNi44IDcuMy0xNi40IDEwLjEtMzMuMyAxMC4xLTIwLjQgMC0yOS4yLTUuNS0zMy44LTIxLjJoLS44djcwLjNoLTM5LjV2LTE2OXptODAuOSA2MC43YzAtMjcuNS0zLjMtMzIuNS0yMC43LTMyLjUtMTYuOSAwLTIwLjcgNS0yMC43IDI4LjcgMCAyOCAzLjUgMzMuNSAyMS4yIDMzLjUgMTYuNCAwIDIwLjItNS42IDIwLjItMjkuN3ptNTMuOC0zLjhjMC0yNS40IDMuMy0zNy44IDEyLjMtNDUuOCA4LjgtOC4xIDIyLjItMTEuMyA0NS4xLTExLjMgNDIuOCAwIDU1LjcgMTIuOCA1NS43IDU1Ljd2MTEuMWgtNzUuM2MtLjMgMi0uMyA0LS4zIDQuOCAwIDE2LjkgNC41IDIxLjkgMjAuMSAyMS45IDEzLjkgMCAxNy45LTMgMTcuOS0xMy45aDM3LjV2Mi4zYzAgOS44LTIuNSAxOC45LTYuOCAyNC43LTcuMyA5LjgtMTkuNiAxMy42LTQ0LjMgMTMuNi0yNy41IDAtNDEuNi0zLjMtNTAuNi0xMi4zLTguNS04LjUtMTEuMy0yMS4zLTExLjMtNTAuOHptNzYuNC0xMS42Yy0uMy0xLjgtLjMtMy4zLS4zLTMuOCAwLTEyLjMtMy4zLTE0LjYtMTkuNi0xNC42LTE0LjQgMC0xNy4xIDMtMTguMSAxNS4xbC0uMyAzLjNoMzguM3ptNTUuNi00NS4zaDM4LjNsLTEuOCAxOS45aC43YzYuOC0xNC45IDE0LjQtMjAuMiAyOS43LTIwLjIgMTAuOCAwIDE5LjEgMy4zIDIzLjQgOS4zIDUuMyA3LjMgNi44IDE0LjQgNi44IDM0IDAgMS41IDAgNSAuMiA5LjNoLTM1Yy4zLTEuOC4zLTMuMy4zLTQgMC0xNS40LTItMTkuNC0xMC4zLTE5LjQtNi4zIDAtMTAuOCAzLjMtMTMuMSA5LjMtMSAzLTEgNC4zLTEgMTIuM3Y2OGgtMzguM1YxOTIuM3pcIl0sYXBwbGU6WzM3Niw1MTIsW10sXCJmMTc5XCIsXCJNMzE0LjcgMjY4LjdjLS4yLTM2LjcgMTYuNC02NC40IDUwLTg0LjgtMTguOC0yNi45LTQ3LjItNDEuNy04NC43LTQ0LjYtMzUuNS0yLjgtNzQuMyAyMC43LTg4LjUgMjAuNy0xNSAwLTQ5LjQtMTkuNy03Ni40LTE5LjdDNTkuMyAxNDEuMiAwIDE4NC44IDAgMjczLjVjMCAyNi4yIDQuOCA1My4zIDE0LjQgODEuMiAxMi44IDM2LjcgNTkgMTI2LjcgMTA3LjIgMTI1LjIgMjUuMi0uNiA0My0xNy45IDc1LjgtMTcuOSAzMS44IDAgNDguMyAxNy45IDc2LjQgMTcuOSA0OC42LS43IDkwLjQtODIuNSAxMDIuNi0xMTkuMy02NS4yLTMwLjctNjEuNy05MC02MS43LTkxLjl6bS01Ni42LTE2NC4yYzI3LjMtMzIuNCAyNC44LTYxLjkgMjQtNzIuNS0yNC4xIDEuNC01MiAxNi40LTY3LjkgMzQuOS0xNy41IDE5LjgtMjcuOCA0NC4zLTI1LjYgNzEuOSAyNi4xIDIgNDkuOS0xMS40IDY5LjUtMzQuM3pcIl0sXCJhcHBsZS1wYXlcIjpbNjQwLDUxMixbXSxcImY0MTVcIixcIk0xMTYuOSAxNTguNWMtNy41IDguOS0xOS41IDE1LjktMzEuNSAxNC45LTEuNS0xMiA0LjQtMjQuOCAxMS4zLTMyLjYgNy41LTkuMSAyMC42LTE1LjYgMzEuMy0xNi4xIDEuMiAxMi40LTMuNyAyNC43LTExLjEgMzMuOG0xMC45IDE3LjJjLTE3LjQtMS0zMi4zIDkuOS00MC41IDkuOS04LjQgMC0yMS05LjQtMzQuOC05LjEtMTcuOS4zLTM0LjUgMTAuNC00My42IDI2LjUtMTguOCAzMi4zLTQuOSA4MCAxMy4zIDEwNi4zIDguOSAxMyAxOS41IDI3LjMgMzMuNSAyNi44IDEzLjMtLjUgMTguNS04LjYgMzQuNS04LjYgMTYuMSAwIDIwLjggOC42IDM0LjggOC40IDE0LjUtLjMgMjMuNi0xMyAzMi41LTI2IDEwLjEtMTQuOCAxNC4zLTI5LjEgMTQuNS0yOS45LS4zLS4zLTI4LTEwLjktMjguMy00Mi45LS4zLTI2LjggMjEuOS0zOS41IDIyLjktNDAuMy0xMi41LTE4LjYtMzItMjAuNi0zOC44LTIxLjFtMTAwLjQtMzYuMnYxOTQuOWgzMC4zdi02Ni42aDQxLjljMzguMyAwIDY1LjEtMjYuMyA2NS4xLTY0LjNzLTI2LjQtNjQtNjQuMS02NGgtNzMuMnptMzAuMyAyNS41aDM0LjljMjYuMyAwIDQxLjMgMTQgNDEuMyAzOC42cy0xNSAzOC44LTQxLjQgMzguOGgtMzQuOFYxNjV6bTE2Mi4yIDE3MC45YzE5IDAgMzYuNi05LjYgNDQuNi0yNC45aC42djIzLjRoMjh2LTk3YzAtMjguMS0yMi41LTQ2LjMtNTcuMS00Ni4zLTMyLjEgMC01NS45IDE4LjQtNTYuOCA0My42aDI3LjNjMi4zLTEyIDEzLjQtMTkuOSAyOC42LTE5LjkgMTguNSAwIDI4LjkgOC42IDI4LjkgMjQuNXYxMC44bC0zNy44IDIuM2MtMzUuMSAyLjEtNTQuMSAxNi41LTU0LjEgNDEuNS4xIDI1LjIgMTkuNyA0MiA0Ny44IDQyem04LjItMjMuMWMtMTYuMSAwLTI2LjQtNy44LTI2LjQtMTkuNiAwLTEyLjMgOS45LTE5LjQgMjguOC0yMC41bDMzLjYtMi4xdjExYzAgMTguMi0xNS41IDMxLjItMzYgMzEuMnptMTAyLjUgNzQuNmMyOS41IDAgNDMuNC0xMS4zIDU1LjUtNDUuNEw2NDAgMTkzaC0zMC44bC0zNS42IDExNS4xaC0uNkw1MzcuNCAxOTNoLTMxLjZMNTU3IDMzNC45bC0yLjggOC42Yy00LjYgMTQuNi0xMi4xIDIwLjMtMjUuNSAyMC4zLTIuNCAwLTctLjMtOC45LS41djIzLjRjMS44LjQgOS4zLjcgMTEuNi43elwiXSxhc3ltbWV0cmlrOls1NzYsNTEyLFtdLFwiZjM3MlwiLFwiTTUxNy41IDMwOS4yYzM4LjgtNDAgNTguMS04MCA1OC41LTExNi4xLjgtNjUuNS01OS40LTExOC4yLTE2OS40LTEzNUMyNzcuOSAzOC40IDExOC4xIDczLjYgMCAxNDAuNSA1MiAxMTQgMTEwLjYgOTIuMyAxNzAuNyA4Mi4zYzc0LjUtMjAuNSAxNTMtMjUuNCAyMjEuMy0xNC44QzU0NC41IDkxLjMgNTg4LjggMTk1IDQ5MC44IDI5OS4yYy0xMC4yIDEwLjgtMjIgMjEuMS0zNSAzMC42TDMwNC45IDEwMy40IDExNC43IDM4OC45Yy02NS42LTI5LjQtNzYuNS05MC4yLTE5LjEtMTUxLjIgMjAuOC0yMi4yIDQ4LjMtNDEuOSA3OS41LTU4LjEgMjAtMTIuMiAzOS43LTIyLjYgNjItMzAuNy02NS4xIDIwLjMtMTIyLjcgNTIuOS0xNjEuNiA5Mi45LTI3LjcgMjguNi00MS40IDU3LjEtNDEuNyA4Mi45LS41IDM1LjEgMjMuNCA2NS4xIDY4LjQgODNsLTM0LjUgNTEuN2gxMDEuNmwyMi0zNC40YzIyLjIgMSA0NS4zIDAgNjguNi0yLjdsLTIyLjggMzcuMWgxMzUuNUwzNDAgNDA2LjNjMTguNi01LjMgMzYuOS0xMS41IDU0LjUtMTguN2w0NS45IDcxLjhINTQyTDQ2OC42IDM0OWMxOC41LTEyLjEgMzUtMjUuNSA0OC45LTM5Ljh6bS0xODcuNiA4MC41bC0yNS00MC42LTMyLjcgNTMuM2MtMjMuNCAzLjUtNDYuNyA1LjEtNjkuMiA0LjRsMTAxLjktMTU5LjMgNzguNyAxMjNjLTE3LjIgNy40LTM1LjMgMTMuOS01My43IDE5LjJ6XCJdLGF1ZGlibGU6WzY0MCw1MTIsW10sXCJmMzczXCIsXCJNNjQwIDE5OS45djU0bC0zMjAgMjAwTDAgMjU0di01NGwzMjAgMjAwIDMyMC0yMDAuMXptLTE5NC41IDcybDQ3LjEtMjkuNGMtMzcuMi01NS44LTEwMC43LTkyLjYtMTcyLjctOTIuNi03MiAwLTEzNS41IDM2LjctMTcyLjYgOTIuNGguM2MyLjUtMi4zIDUuMS00LjUgNy43LTYuNyA4OS43LTc0LjQgMjE5LjQtNTguMSAyOTAuMiAzNi4zem0tMjIwLjEgMTguOGMxNi45LTExLjkgMzYuNS0xOC43IDU3LjQtMTguNyAzNC40IDAgNjUuMiAxOC40IDg2LjQgNDcuNmw0NS40LTI4LjRjLTIwLjktMjkuOS01NS42LTQ5LjUtOTQuOC00OS41LTM4LjkgMC03My40IDE5LjQtOTQuNCA0OXpNMTAzLjYgMTYxLjFjMTMxLjgtMTA0LjMgMzE4LjItNzYuNCA0MTcuNSA2Mi4xbC43IDEgNDguOC0zMC40QzUxNy4xIDExMi4xIDQyNC44IDU4LjEgMzE5LjkgNTguMWMtMTAzLjUgMC0xOTYuNiA1My41LTI1MC41IDEzNS42IDkuOS0xMC41IDIyLjctMjMuNSAzNC4yLTMyLjZ6bTQ2NyAzMi43elwiXSxhdXRvcHJlZml4ZXI6WzY0MCw1MTIsW10sXCJmNDFjXCIsXCJNMzE4LjQgMTZsLTE2MSA0ODBoNzcuNWwyNS40LTgxLjRoMTE5LjVMNDA1IDQ5Nmg3Ny41TDMxOC40IDE2em0tNDAuMyAzNDEuOWw0MS4yLTEzMC40aDEuNWw0MC45IDEzMC40aC04My42ek02NDAgNDA1bC0xMC0zMS40TDQ2Mi4xIDM1OGwxOS40IDU2LjVMNjQwIDQwNXptLTQ2Mi4xLTQ3TDEwIDM3My43IDAgNDA1bDE1OC41IDkuNCAxOS40LTU2LjR6XCJdLGF2aWFuZXg6WzUxMiw1MTIsW10sXCJmMzc0XCIsXCJNNDUzLjEgMzJoLTMxMmMtMzguOSAwLTc2LjIgMzEuMi04My4zIDY5LjdMMS4yIDQxMC4zQy01LjkgNDQ4LjggMTkuOSA0ODAgNTguOSA0ODBoMzEyYzM4LjkgMCA3Ni4yLTMxLjIgODMuMy02OS43bDU2LjctMzA4LjVjNy0zOC42LTE4LjgtNjkuOC01Ny44LTY5Ljh6bS01OC4yIDM0Ny4zbC0zMiAxMy41LTExNS40LTExMGMtMTQuNyAxMC0yOS4yIDE5LjUtNDEuNyAyNy4xbDIyLjEgNjQuMi0xNy45IDEyLjctNDAuNi02MS01Mi40LTQ4LjEgMTUuNy0xNS40IDU4IDMxLjFjOS4zLTEwLjUgMjAuOC0yMi42IDMyLjgtMzQuOUwyMDMgMjI4LjlsLTY4LjgtOTkuOCAxOC44LTI4LjkgOC45LTQuOEwyNjUgMjA3LjhsNC45IDQuNWMxOS40LTE4LjggMzMuOC0zMi40IDMzLjgtMzIuNCA3LjctNi41IDIxLjUtMi45IDMwLjcgNy45IDkgMTAuNSAxMC42IDI0LjcgMi43IDMxLjMtMS44IDEuMy0xNS41IDExLjQtMzUuMyAyNS42bDQuNSA3LjMgOTQuOSAxMTkuNC02LjMgNy45elwiXSxhdmlhdG86WzY0MCw1MTIsW10sXCJmNDIxXCIsXCJNMTA3LjIgMjgzLjVsLTE5LTQxLjhIMzYuMWwtMTkgNDEuOEgwbDYyLjItMTMxLjQgNjIuMiAxMzEuNGgtMTcuMnptLTQ1LTk4LjFsLTE5LjYgNDIuNWgzOS4ybC0xOS42LTQyLjV6bTExMi43IDEwMi40bC02Mi4yLTEzMS40aDE3LjFsNDUuMSA5NiA0NS4xLTk2aDE3bC02Mi4xIDEzMS40em04MC42LTQuM1YxNTYuNEgyNzF2MTI3LjFoLTE1LjV6bTIwOS4xLTExNS42djExNS42aC0xNy4zVjE2Ny45aC00MS4ydi0xMS41aDk5LjZ2MTEuNWgtNDEuMXpNNjQwIDIxOC44YzAgOS4yLTEuNyAxNy44LTUuMSAyNS44LTMuNCA4LTguMiAxNS4xLTE0LjIgMjEuMS02IDYtMTMuMSAxMC44LTIxLjEgMTQuMi04IDMuNC0xNi42IDUuMS0yNS44IDUuMXMtMTcuOC0xLjctMjUuOC01LjFjLTgtMy40LTE1LjEtOC4yLTIxLjEtMTQuMi02LTYtMTAuOC0xMy0xNC4yLTIxLjEtMy40LTgtNS4xLTE2LjYtNS4xLTI1LjhzMS43LTE3LjggNS4xLTI1LjhjMy40LTggOC4yLTE1LjEgMTQuMi0yMS4xIDYtNiAxMy04LjQgMjEuMS0xMS45IDgtMy40IDE2LjYtNS4xIDI1LjgtNS4xczE3LjggMS43IDI1LjggNS4xYzggMy40IDE1LjEgNS44IDIxLjEgMTEuOSA2IDYgMTAuNyAxMy4xIDE0LjIgMjEuMSAzLjQgOCA1LjEgMTYuNiA1LjEgMjUuOHptLTE1LjUgMGMwLTcuMy0xLjMtMTQtMy45LTIwLjMtMi42LTYuMy02LjItMTEuNy0xMC44LTE2LjMtNC42LTQuNi0xMC04LjItMTYuMi0xMC45LTYuMi0yLjctMTIuOC00LTE5LjgtNHMtMTMuNiAxLjMtMTkuOCA0Yy02LjIgMi43LTExLjYgNi4zLTE2LjIgMTAuOS00LjYgNC42LTguMiAxMC0xMC44IDE2LjMtMi42IDYuMy0zLjkgMTMuMS0zLjkgMjAuMyAwIDcuMyAxLjMgMTQgMy45IDIwLjMgMi42IDYuMyA2LjIgMTEuNyAxMC44IDE2LjMgNC42IDQuNiAxMCA4LjIgMTYuMiAxMC45IDYuMiAyLjcgMTIuOCA0IDE5LjggNHMxMy42LTEuMyAxOS44LTRjNi4yLTIuNyAxMS42LTYuMyAxNi4yLTEwLjkgNC42LTQuNiA4LjItMTAgMTAuOC0xNi4zIDIuNi02LjMgMy45LTEzLjEgMy45LTIwLjN6bS05NC44IDk2Ljd2LTYuM2w4OC45LTEwLTI0Mi45IDEzLjRjLjYtMi4yIDEuMS00LjYgMS40LTcuMi4zLTIgLjUtNC4yLjYtNi41bDY0LjgtOC4xLTY0LjkgMS45YzAtLjQtLjEtLjctLjEtMS4xLTIuOC0xNy4yLTI1LjUtMjMuNy0yNS41LTIzLjdsLTEuMS0yNi4zaDIzLjhsMTkgNDEuOGgxNy4xTDM0OC42IDE1MmwtNjIuMiAxMzEuNGgxNy4xbDE5LTQxLjhoMjMuNkwzNDUgMjY4cy0yMi43IDYuNS0yNS41IDIzLjdjLS4xLjMtLjEuNy0uMSAxLjFsLTY0LjktMS45IDY0LjggOC4xYy4xIDIuMy4zIDQuNC42IDYuNS4zIDIuNi44IDUgMS40IDcuMkw3OC40IDI5OS4ybDg4LjkgMTB2Ni4zYy01LjkuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNCA2LjggMCAxMi40LTUuNiAxMi40LTEyLjQgMC02LjItNC42LTExLjMtMTAuNS0xMi4ydi01LjhsODAuMyA5djUuNGMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMiA2LjggMCAxMi40LTMuNCAxMi40LTEwLjIgMC02LTQuMy0xMS05LjktMTIuMXYtNC45bDI4LjQgMy4ydjIzLjdoLTUuOVYzNjBoNS45di02LjZoNXY2LjZoNS45di0xMy44aC01LjlWMzIzbDM4LjMgNC4zYzguMSAxMS40IDE5IDEzLjYgMTkgMTMuNmwtLjEgNi43LTUuMS4yLS4xIDEyLjFoNC4xbC4xLTVoNS4ybC4xIDVoNC4xbC0uMS0xMi4xLTUuMS0uMi0uMS02LjdzMTAuOS0yLjEgMTktMTMuNmwzOC4zLTQuM3YyMy4yaC01LjlWMzYwaDUuOXYtNi42aDV2Ni42aDUuOXYtMTMuOGgtNS45di0yMy43bDI4LjQtMy4ydjQuOWMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMiA2LjggMCAxMi40LTMuNCAxMi40LTEwLjIgMC02LTQuMy0xMS05LjktMTIuMXYtNS40bDgwLjMtOXY1LjhjLTUuOS45LTEwLjUgNi0xMC41IDEyLjIgMCA2LjggNS42IDEyLjQgMTIuNCAxMi40IDYuOCAwIDEyLjQtNS42IDEyLjQtMTIuNC0uMi02LjMtNC43LTExLjQtMTAuNy0xMi4zem0tMjAwLjgtODcuNmwxOS42LTQyLjUgMTkuNiA0Mi41aC0xNy45bC0xLjctNDAuMy0xLjcgNDAuM2gtMTcuOXpcIl0sYXdzOls2NDAsNTEyLFtdLFwiZjM3NVwiLFwiTTE4MC40MSAyMDMuMDFjLS43MiAyMi42NSAxMC42IDMyLjY4IDEwLjg4IDM5LjA1YTguMTY0IDguMTY0IDAgMCAxLTQuMSA2LjI3bC0xMi44IDguOTZhMTAuNjYgMTAuNjYgMCAwIDEtNS42MyAxLjkyYy0uNDMtLjAyLTguMTkgMS44My0yMC40OC0yNS42MWE3OC42MDggNzguNjA4IDAgMCAxLTYyLjYxIDI5LjQ1Yy0xNi4yOC44OS02MC40LTkuMjQtNTguMTMtNTYuMjEtMS41OS0zOC4yOCAzNC4wNi02Mi4wNiA3MC45My02MC4wNSA3LjEuMDIgMjEuNi4zNyA0Ni45OSA2LjI3di0xNS42MmMyLjY5LTI2LjQ2LTE0LjctNDYuOTktNDQuODEtNDMuOTEtMi40LjAxLTE5LjQtLjUtNDUuODQgMTAuMTEtNy4zNiAzLjM4LTguMyAyLjgyLTEwLjc1IDIuODItNy40MSAwLTQuMzYtMjEuNDgtMi45NC0yNC4yIDUuMjEtNi40IDM1Ljg2LTE4LjM1IDY1Ljk0LTE4LjE4YTc2Ljg1NyA3Ni44NTcgMCAwIDEgNTUuNjkgMTcuMjggNzAuMjg1IDcwLjI4NSAwIDAgMSAxNy42NyA1Mi4zNmwtLjAxIDY5LjI5ek05My45OSAyMzUuNGMzMi40My0uNDcgNDYuMTYtMTkuOTcgNDkuMjktMzAuNDcgMi40Ni0xMC4wNSAyLjA1LTE2LjQxIDIuMDUtMjcuNC05LjY3LTIuMzItMjMuNTktNC44NS0zOS41Ni00Ljg3LTE1LjE1LTEuMTQtNDIuODIgNS42My00MS43NCAzMi4yNi0xLjI0IDE2Ljc5IDExLjEyIDMxLjQgMjkuOTYgMzAuNDh6bTE3MC45MiAyMy4wNWMtNy44Ni43Mi0xMS41Mi00Ljg2LTEyLjY4LTEwLjM3bC00OS44LTE2NC42NWMtLjk3LTIuNzgtMS42MS01LjY1LTEuOTItOC41OGE0LjYxIDQuNjEgMCAwIDEgMy44Ni01LjI1Yy4yNC0uMDQtMi4xMyAwIDIyLjI1IDAgOC43OC0uODggMTEuNjQgNi4wMyAxMi41NSAxMC4zN2wzNS43MiAxNDAuODMgMzMuMTYtMTQwLjgzYy41My0zLjIyIDIuOTQtMTEuMDcgMTIuOC0xMC4yNGgxNy4xNmMyLjE3LS4xOCAxMS4xMS0uNSAxMi42OCAxMC4zN2wzMy40MiAxNDIuNjNMNDIwLjk4IDgwLjFjLjQ4LTIuMTggMi43Mi0xMS4zNyAxMi42OC0xMC4zN2gxOS43MmMuODUtLjEzIDYuMTUtLjgxIDUuMjUgOC41OC0uNDMgMS44NSAzLjQxLTEwLjY2LTUyLjc1IDE2OS45LTEuMTUgNS41MS00LjgyIDExLjA5LTEyLjY4IDEwLjM3aC0xOC42OWMtMTAuOTQgMS4xNS0xMi41MS05LjY2LTEyLjY4LTEwLjc1TDMyOC42NyAxMTAuN2wtMzIuNzggMTM2Ljk5Yy0uMTYgMS4wOS0xLjczIDExLjktMTIuNjggMTAuNzVoLTE4LjN6bTI3My40OCA1LjYzYy01Ljg4LjAxLTMzLjkyLS4zLTU3LjM2LTEyLjI5YTEyLjgwMiAxMi44MDIgMCAwIDEtNy44MS0xMS45MXYtMTAuNzVjMC04LjQ1IDYuMi02LjkgOC44My01Ljg5IDEwLjA0IDQuMDYgMTYuNDggNy4xNCAyOC44MSA5LjYgMzYuNjUgNy41MyA1Mi43Ny0yLjMgNTYuNzItNC40OCAxMy4xNS03LjgxIDE0LjE5LTI1LjY4IDUuMjUtMzQuOTUtMTAuNDgtOC43OS0xNS40OC05LjEyLTUzLjEzLTIxLTQuNjQtMS4yOS00My43LTEzLjYxLTQzLjc5LTUyLjM2LS42MS0yOC4yNCAyNS4wNS01Ni4xOCA2OS41Mi01NS45NSAxMi42Ny0uMDEgNDYuNDMgNC4xMyA1NS41NyAxNS42MiAxLjM1IDIuMDkgMi4wMiA0LjU1IDEuOTIgNy4wNHYxMC4xMWMwIDQuNDQtMS42MiA2LjY2LTQuODcgNi42Ni03LjcxLS44Ni0yMS4zOS0xMS4xNy00OS4xNi0xMC43NS02Ljg5LS4zNi0zOS44OS45MS0zOC40MSAyNC45Ny0uNDMgMTguOTYgMjYuNjEgMjYuMDcgMjkuNyAyNi44OSAzNi40NiAxMC45NyA0OC42NSAxMi43OSA2My4xMiAyOS41OCAxNy4xNCAyMi4yNSA3LjkgNDguMyA0LjM1IDU1LjQ0LTE5LjA4IDM3LjQ5LTY4LjQyIDM0LjQ0LTY5LjI2IDM0LjQyem00MC4yIDEwNC44NmMtNzAuMDMgNTEuNzItMTcxLjY5IDc5LjI1LTI1OC40OSA3OS4yNUE0NjkuMTI3IDQ2OS4xMjcgMCAwIDEgMi44MyAzMjcuNDZjLTYuNTMtNS44OS0uNzctMTMuOTYgNy4xNy05LjQ3YTYzNy4zNyA2MzcuMzcgMCAwIDAgMzE2Ljg4IDg0LjEyIDYzMC4yMiA2MzAuMjIgMCAwIDAgMjQxLjU5LTQ5LjU1YzExLjc4LTUgMjEuNzcgNy44IDEwLjEyIDE2LjM4em0yOS4xOS0zMy4yOWMtOC45Ni0xMS41Mi01OS4yOC01LjM4LTgxLjgxLTIuNjktNi43OS43Ny03Ljk0LTUuMTItMS43OS05LjQ3IDQwLjA3LTI4LjE3IDEwNS44OC0yMC4xIDExMy40NC0xMC42MyA3LjU1IDkuNDctMi4wNSA3NS40MS0zOS41NiAxMDYuOTEtNS43NiA0Ljg3LTExLjI3IDIuMy04LjcxLTQuMSA4LjQ0LTIxLjI1IDI3LjM5LTY4LjQ5IDE4LjQzLTgwLjAyelwiXSxiYW5kY2FtcDpbNDk2LDUxMixbXSxcImYyZDVcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em00OC4yIDMyNi4xaC0xODFMMTk5LjkgMTc4aDE4MWwtODQuNyAxNTYuMXpcIl0sYmVoYW5jZTpbNTc2LDUxMixbXSxcImYxYjRcIixcIk0yMzIgMjM3LjJjMzEuOC0xNS4yIDQ4LjQtMzguMiA0OC40LTc0IDAtNzAuNi01Mi42LTg3LjgtMTEzLjMtODcuOEgwdjM1NC40aDE3MS44YzY0LjQgMCAxMjQuOS0zMC45IDEyNC45LTEwMi45IDAtNDQuNS0yMS4xLTc3LjQtNjQuNy04OS43ek03Ny45IDEzNS45SDE1MWMyOC4xIDAgNTMuNCA3LjkgNTMuNCA0MC41IDAgMzAuMS0xOS43IDQyLjItNDcuNSA0Mi4yaC03OXYtODIuN3ptODMuMyAyMzMuN0g3Ny45VjI3Mmg4NC45YzM0LjMgMCA1NiAxNC4zIDU2IDUwLjYgMCAzNS44LTI1LjkgNDctNTcuNiA0N3ptMzU4LjUtMjQwLjdIMzc2Vjk0aDE0My43djM0Ljl6TTU3NiAzMDUuMmMwLTc1LjktNDQuNC0xMzkuMi0xMjQuOS0xMzkuMi03OC4yIDAtMTMxLjMgNTguOC0xMzEuMyAxMzUuOCAwIDc5LjkgNTAuMyAxMzQuNyAxMzEuMyAxMzQuNyA2MS4zIDAgMTAxLTI3LjYgMTIwLjEtODYuM0g1MDljLTYuNyAyMS45LTM0LjMgMzMuNS01NS43IDMzLjUtNDEuMyAwLTYzLTI0LjItNjMtNjUuM2gxODUuMWMuMy00LjIuNi04LjcuNi0xMy4yek0zOTAuNCAyNzRjMi4zLTMzLjcgMjQuNy01NC44IDU4LjUtNTQuOCAzNS40IDAgNTMuMiAyMC44IDU2LjIgNTQuOEgzOTAuNHpcIl0sXCJiZWhhbmNlLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjFiNVwiLFwiTTE4Ni41IDI5M2MwIDE5LjMtMTQgMjUuNC0zMS4yIDI1LjRoLTQ1LjF2LTUyLjloNDZjMTguNi4xIDMwLjMgNy44IDMwLjMgMjcuNXptLTcuNy04Mi4zYzAtMTcuNy0xMy43LTIxLjktMjguOS0yMS45aC0zOS42djQ0LjhIMTUzYzE1LjEgMCAyNS44LTYuNiAyNS44LTIyLjl6bTEzMi4zIDIzLjJjLTE4LjMgMC0zMC41IDExLjQtMzEuNyAyOS43aDYyLjJjLTEuNy0xOC41LTExLjMtMjkuNy0zMC41LTI5Ljd6TTQ0OCA4MHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHpNMjcxLjcgMTg1aDc3Ljh2LTE4LjloLTc3LjhWMTg1em0tNDMgMTEwLjNjMC0yNC4xLTExLjQtNDQuOS0zNS01MS42IDE3LjItOC4yIDI2LjItMTcuNyAyNi4yLTM3IDAtMzguMi0yOC41LTQ3LjUtNjEuNC00Ny41SDY4djE5Mmg5My4xYzM0LjktLjIgNjcuNi0xNi45IDY3LjYtNTUuOXpNMzgwIDI4MC41YzAtNDEuMS0yNC4xLTc1LjQtNjcuNi03NS40LTQyLjQgMC03MS4xIDMxLjgtNzEuMSA3My42IDAgNDMuMyAyNy4zIDczIDcxLjEgNzMgMzMuMiAwIDU0LjctMTQuOSA2NS4xLTQ2LjhoLTMzLjdjLTMuNyAxMS45LTE4LjYgMTguMS0zMC4yIDE4LjEtMjIuNCAwLTM0LjEtMTMuMS0zNC4xLTM1LjNoMTAwLjJjLjEtMi4zLjMtNC44LjMtNy4yelwiXSxiaW1vYmplY3Q6WzQ0OCw1MTIsW10sXCJmMzc4XCIsXCJNNDE2IDMySDMyQzE0LjQgMzIgMCA0Ni40IDAgNjR2Mzg0YzAgMTcuNiAxNC40IDMyIDMyIDMyaDM4NGMxNy42IDAgMzItMTQuNCAzMi0zMlY2NGMwLTE3LjYtMTQuNC0zMi0zMi0zMnptLTY0IDI1Ny40YzAgNDkuNC0xMS40IDgyLjYtMTAzLjggODIuNmgtMTYuOWMtNDQuMSAwLTYyLjQtMTQuOS03MC40LTM4LjhoLS45VjM2OEg5NlYxMzZoNjR2NzQuN2gxLjFjNC42LTMwLjUgMzkuNy0zOC44IDY5LjctMzguOGgxNy4zYzkyLjQgMCAxMDMuOCAzMy4xIDEwMy44IDgyLjV2MzV6bS02NC0yOC45djIyLjljMCAyMS43LTMuNCAzMy44LTM4LjQgMzMuOGgtNDUuM2MtMjguOSAwLTQ0LjEtNi41LTQ0LjEtMzUuN3YtMTljMC0yOS4zIDE1LjItMzUuNyA0NC4xLTM1LjdoNDUuM2MzNS0uMiAzOC40IDEyIDM4LjQgMzMuN3pcIl0sYml0YnVja2V0Ols1MTIsNTEyLFtdLFwiZjE3MVwiLFwiTTIzLjEgMzJDMTQuMiAzMS45IDcgMzguOSA2LjkgNDcuOGMwIC45LjEgMS44LjIgMi44TDc0LjkgNDYyYzEuNyAxMC40IDEwLjcgMTggMjEuMiAxOC4xaDMyNS4xYzcuOS4xIDE0LjctNS42IDE2LTEzLjRsNjcuOC00MTZjMS40LTguNy00LjUtMTYuOS0xMy4yLTE4LjMtLjktLjEtMS44LS4yLTIuOC0uMkwyMy4xIDMyem0yODUuMyAyOTcuM0gyMDQuNmwtMjguMS0xNDYuOGgxNTdsLTI1LjEgMTQ2Ljh6XCJdLGJpdGNvaW46WzUxMiw1MTIsW10sXCJmMzc5XCIsXCJNNTA0IDI1NmMwIDEzNi45NjctMTExLjAzMyAyNDgtMjQ4IDI0OFM4IDM5Mi45NjcgOCAyNTYgMTE5LjAzMyA4IDI1NiA4czI0OCAxMTEuMDMzIDI0OCAyNDh6bS0xNDEuNjUxLTM1LjMzYzQuOTM3LTMyLjk5OS0yMC4xOTEtNTAuNzM5LTU0LjU1LTYyLjU3M2wxMS4xNDYtNDQuNzAyLTI3LjIxMy02Ljc4MS0xMC44NTEgNDMuNTI0Yy03LjE1NC0xLjc4My0xNC41MDItMy40NjQtMjEuODAzLTUuMTNsMTAuOTI5LTQzLjgxLTI3LjE5OC02Ljc4MS0xMS4xNTMgNDQuNjg2Yy01LjkyMi0xLjM0OS0xMS43MzUtMi42ODItMTcuMzc3LTQuMDg0bC4wMzEtLjE0LTM3LjUzLTkuMzctNy4yMzkgMjkuMDYyczIwLjE5MSA0LjYyNyAxOS43NjUgNC45MTNjMTEuMDIyIDIuNzUxIDEzLjAxNCAxMC4wNDQgMTIuNjggMTUuODI1bC0xMi42OTYgNTAuOTI1Yy43Ni4xOTQgMS43NDQuNDczIDIuODI5LjkwNy0uOTA3LS4yMjUtMS44NzYtLjQ3My0yLjg3Ni0uNzEzbC0xNy43OTYgNzEuMzM4Yy0xLjM0OSAzLjM0OC00Ljc2NyA4LjM3LTEyLjQ3MSA2LjQ2NC4yNzEuMzk1LTE5Ljc4LTQuOTM3LTE5Ljc4LTQuOTM3bC0xMy41MSAzMS4xNDcgMzUuNDE0IDguODI3YzYuNTg4IDEuNjUxIDEzLjA0NSAzLjM3OSAxOS40IDUuMDA2bC0xMS4yNjIgNDUuMjEzIDI3LjE4MiA2Ljc4MSAxMS4xNTMtNDQuNzMzYTEwMzguMjA5IDEwMzguMjA5IDAgMCAwIDIxLjY4NyA1LjYyN2wtMTEuMTE1IDQ0LjUyMyAyNy4yMTMgNi43ODEgMTEuMjYyLTQ1LjEyOGM0Ni40MDQgOC43ODEgODEuMjk5IDUuMjM5IDk1Ljk4Ni0zNi43MjcgMTEuODM2LTMzLjc5LS41ODktNTMuMjgxLTI1LjAwNC02NS45OTEgMTcuNzgtNC4wOTggMzEuMTc0LTE1Ljc5MiAzNC43NDctMzkuOTQ5em0tNjIuMTc3IDg3LjE3OWMtOC40MSAzMy43OS02NS4zMDggMTUuNTIzLTgzLjc1NSAxMC45NDNsMTQuOTQ0LTU5Ljg5OWMxOC40NDYgNC42MDMgNzcuNiAxMy43MTcgNjguODExIDQ4Ljk1NnptOC40MTctODcuNjY3Yy03LjY3MyAzMC43MzYtNTUuMDMxIDE1LjEyLTcwLjM5MyAxMS4yOTJsMTMuNTQ4LTU0LjMyN2MxNS4zNjMgMy44MjggNjQuODM2IDEwLjk3MyA1Ni44NDUgNDMuMDM1elwiXSxiaXR5Ols0OTYsNTEyLFtdLFwiZjM3YVwiLFwiTTc4LjQgNjcuMkMxNzMuOC0yMiAzMjQuNS0yNCA0MjEuNSA3MWMxNC4zIDE0LjEtNi40IDM3LjEtMjIuNCAyMS41LTg0LjgtODIuNC0yMTUuOC04MC4zLTI5OC45LTMuMi0xNi4zIDE1LjEtMzYuNS04LjMtMjEuOC0yMi4xem05OC45IDQxOC42YzE5LjMgNS43IDI5LjMtMjMuNiA3LjktMzBDNzMgNDIxLjkgOS40IDMwNi4xIDM3LjcgMTk0LjhjNS0xOS42LTI0LjktMjguMS0zMC4yLTcuMS0zMi4xIDEyNy40IDQxLjEgMjU5LjggMTY5LjggMjk4LjF6bTE0OC4xLTJjMTIxLjktNDAuMiAxOTIuOS0xNjYuOSAxNjQuNC0yOTEtNC41LTE5LjctMzQuOS0xMy44LTMwIDcuOSAyNC4yIDEwNy43LTM3LjEgMjE3LjktMTQzLjIgMjUzLjQtMjEuMiA3LTEwLjQgMzYgOC44IDI5Ljd6bS02Mi45LTc5bC4yLTcxLjhjMC04LjItNi42LTE0LjgtMTQuOC0xNC44LTguMiAwLTE0LjggNi43LTE0LjggMTQuOGwtLjIgNzEuOGMwIDguMiA2LjYgMTQuOCAxNC44IDE0LjhzMTQuOC02LjYgMTQuOC0xNC44em03MS0yNjljMi4xIDkwLjkgNC43IDEzMS45LTg1LjUgMTMyLjUtOTIuNS0uNy04Ni45LTQ0LjMtODUuNS0xMzIuNSAwLTIxLjgtMzIuNS0xOS42LTMyLjUgMHY3MS42YzAgNjkuMyA2MC43IDkwLjkgMTE4IDkwLjEgNTcuMy44IDExOC0yMC44IDExOC05MC4xdi03MS42YzAtMTkuNi0zMi41LTIxLjgtMzIuNSAwelwiXSxcImJsYWNrLXRpZVwiOls0NDgsNTEyLFtdLFwiZjI3ZVwiLFwiTTAgMzJ2NDQ4aDQ0OFYzMkgwem0zMTYuNSAzMjUuMkwyMjQgNDQ1LjlsLTkyLjUtODguNyA2NC41LTE4NC02NC41LTg2LjZoMTg0LjlMMjUyIDE3My4ybDY0LjUgMTg0elwiXSxibGFja2JlcnJ5Ols1MTIsNTEyLFtdLFwiZjM3YlwiLFwiTTE2NiAxMTYuOWMwIDIzLjQtMTYuNCA0OS4xLTcyLjUgNDkuMUgyMy40bDIxLTg4LjhoNjcuOGM0Mi4xIDAgNTMuOCAyMy4zIDUzLjggMzkuN3ptMTI2LjItMzkuN2gtNjcuOEwyMDUuNyAxNjZoNzAuMWM1My44IDAgNzAuMS0yNS43IDcwLjEtNDkuMS4xLTE2LjQtMTEuNi0zOS43LTUzLjctMzkuN3pNODguOCAyMDguMUgyMUwwIDI5Ni45aDcwLjFjNTYuMSAwIDcyLjUtMjMuNCA3Mi41LTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My44LTM5Ljd6bTE4MC4xIDBoLTY3LjhsLTE4LjcgODguOGg3MC4xYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIDAtMTYuMy0xMS43LTM5LjctNTMuNy0zOS43em0xODkuMy01My44aC02Ny44bC0xOC43IDg4LjhoNzAuMWM1My44IDAgNzAuMS0yMy40IDcwLjEtNDkuMS4xLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3ptLTI4IDEzNy45aC02Ny44TDM0My43IDM4MWg3MC4xYzU2LjEgMCA3MC4xLTIzLjQgNzAuMS00OS4xIDAtMTYuMy0xMS42LTM5LjctNTMuNy0zOS43ek0yNDAuOCAzNDZIMTczbC0xOC43IDg4LjhoNzAuMWM1Ni4xIDAgNzAuMS0yNS43IDcwLjEtNDkuMS4xLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3pcIl0sYmxvZ2dlcjpbNDQ4LDUxMixbXSxcImYzN2NcIixcIk0xNjIuNCAxOTZjNC44LTQuOSA2LjItNS4xIDM2LjQtNS4xIDI3LjIgMCAyOC4xLjEgMzIuMSAyLjEgNS44IDIuOSA4LjMgNyA4LjMgMTMuNiAwIDUuOS0yLjQgMTAtNy42IDEzLjQtMi44IDEuOC00LjUgMS45LTMxLjEgMi4xLTE2LjQuMS0yOS41LS4yLTMxLjUtLjgtMTAuMy0yLjktMTQuMS0xNy43LTYuNi0yNS4zem02MS40IDk0LjVjLTUzLjkgMC01NS44LjItNjAuMiA0LjEtMy41IDMuMS01LjcgOS40LTUuMSAxMy45LjcgNC43IDQuOCAxMC4xIDkuMiAxMiAyLjIgMSAxNC4xIDEuNyA1Ni4zIDEuMmw0Ny45LS42IDkuMi0xLjVjOS01LjEgMTAuNS0xNy40IDMuMS0yNC40LTUuMy00LjctNS00LjctNjAuNC00Ljd6bTIyMy40IDEzMC4xYy0zLjUgMjguNC0yMyA1MC40LTUxLjEgNTcuNS03LjIgMS44LTkuNyAxLjktMTcyLjkgMS44LTE1Ny44IDAtMTY1LjktLjEtMTcyLTEuOC04LjQtMi4yLTE1LjYtNS41LTIyLjMtMTAtNS42LTMuOC0xMy45LTExLjgtMTctMTYuNC0zLjgtNS42LTguMi0xNS4zLTEwLTIyQy4xIDQyMyAwIDQyMC4zIDAgMjU2LjMgMCA5My4yIDAgODkuNyAxLjggODIuNiA4LjEgNTcuOSAyNy43IDM5IDUzIDMzLjRjNy4zLTEuNiAzMzIuMS0xLjkgMzQwLS4zIDIxLjIgNC4zIDM3LjkgMTcuMSA0Ny42IDM2LjQgNy43IDE1LjMgNy0xLjUgNy4zIDE4MC42LjIgMTE1LjggMCAxNjQuNS0uNyAxNzAuNXptLTg1LjQtMTg1LjJjLTEuMS01LTQuMi05LjYtNy43LTExLjUtMS4xLS42LTgtMS4zLTE1LjUtMS43LTEyLjQtLjYtMTMuOC0uOC0xNy44LTMuMS02LjItMy42LTcuOS03LjYtOC0xOC4zIDAtMjAuNC04LjUtMzkuNC0yNS4zLTU2LjUtMTItMTIuMi0yNS4zLTIwLjUtNDAuNi0yNS4xLTMuNi0xLjEtMTEuOC0xLjUtMzkuMi0xLjgtNDIuOS0uNS01Mi41LjQtNjcuMSA2LjItMjcgMTAuNy00Ni4zIDMzLjQtNTMuNCA2Mi40LTEuMyA1LjQtMS42IDE0LjItMS45IDY0LjMtLjQgNjIuOCAwIDcyLjEgNCA4NC41IDkuNyAzMC43IDM3LjEgNTMuNCA2NC42IDU4LjQgOS4yIDEuNyAxMjIuMiAyLjEgMTMzLjcuNSAyMC4xLTIuNyAzNS45LTEwLjggNTAuNy0yNS45IDEwLjctMTAuOSAxNy40LTIyLjggMjEuOC0zOC41IDMuMi0xMC45IDIuOS04OC40IDEuNy05My45elwiXSxcImJsb2dnZXItYlwiOls0NDgsNTEyLFtdLFwiZjM3ZFwiLFwiTTQ0Ni42IDIyMi43Yy0xLjgtOC02LjgtMTUuNC0xMi41LTE4LjUtMS44LTEtMTMtMi4yLTI1LTIuNy0yMC4xLS45LTIyLjMtMS4zLTI4LjctNS0xMC4xLTUuOS0xMi44LTEyLjMtMTIuOS0yOS41LS4xLTMzLTEzLjgtNjMuNy00MC45LTkxLjMtMTkuMy0xOS43LTQwLjktMzMtNjUuNS00MC41LTUuOS0xLjgtMTkuMS0yLjQtNjMuMy0yLjktNjkuNC0uOC04NC44LjYtMTA4LjQgMTBDNDUuOSA1OS41IDE0LjcgOTYuMSAzLjMgMTQyLjkgMS4yIDE1MS43LjcgMTY1LjguMiAyNDYuOGMtLjYgMTAxLjUuMSAxMTYuNCA2LjQgMTM2LjUgMTUuNiA0OS42IDU5LjkgODYuMyAxMDQuNCA5NC4zIDE0LjggMi43IDE5Ny4zIDMuMyAyMTYgLjggMzIuNS00LjQgNTgtMTcuNSA4MS45LTQxLjkgMTcuMy0xNy43IDI4LjEtMzYuOCAzNS4yLTYyLjEgNC45LTE3LjYgNC41LTE0Mi44IDIuNS0xNTEuN3ptLTMyMi4xLTYzLjZjNy44LTcuOSAxMC04LjIgNTguOC04LjIgNDMuOSAwIDQ1LjQuMSA1MS44IDMuNCA5LjMgNC43IDEzLjQgMTEuMyAxMy40IDIxLjkgMCA5LjUtMy44IDE2LjItMTIuMyAyMS42LTQuNiAyLjktNy4zIDMuMS01MC4zIDMuMy0yNi41LjItNDcuNy0uNC01MC44LTEuMi0xNi42LTQuNy0yMi44LTI4LjUtMTAuNi00MC44em0xOTEuOCAxOTkuOGwtMTQuOSAyLjQtNzcuNS45Yy02OC4xLjgtODcuMy0uNC05MC45LTItNy4xLTMuMS0xMy44LTExLjctMTQuOS0xOS40LTEuMS03LjMgMi42LTE3LjMgOC4yLTIyLjQgNy4xLTYuNCAxMC4yLTYuNiA5Ny4zLTYuNyA4OS42LS4xIDg5LjEtLjEgOTcuNiA3LjggMTIuMSAxMS4zIDkuNSAzMS4yLTQuOSAzOS40elwiXSxibHVldG9vdGg6WzQ0OCw1MTIsW10sXCJmMjkzXCIsXCJNMjkyLjYgMTcxLjFMMjQ5LjcgMjE0bC0uMy04NiA0My4yIDQzLjFtLTQzLjIgMjE5LjhsNDMuMS00My4xLTQyLjktNDIuOS0uMiA4NnpNNDE2IDI1OS40QzQxNiA0NjUgMzQ0LjEgNTEyIDIzMC45IDUxMlMzMiA0NjUgMzIgMjU5LjQgMTE1LjQgMCAyMjguNiAwIDQxNiA1My45IDQxNiAyNTkuNHptLTE1OC41IDBsNzkuNC04OC42TDIxMS44IDM2LjV2MTc2LjlMMTM4IDEzOS42bC0yNyAyNi45IDkyLjcgOTMtOTIuNyA5MyAyNi45IDI2LjkgNzMuOC03My44IDIuMyAxNzAgMTI3LjQtMTI3LjUtODMuOS04OC43elwiXSxcImJsdWV0b290aC1iXCI6WzMyMCw1MTIsW10sXCJmMjk0XCIsXCJNMTk2LjQ4IDI2MC4wMjNsOTIuNjI2LTEwMy4zMzNMMTQzLjEyNSAwdjIwNi4zM2wtODYuMTExLTg2LjExMS0zMS40MDYgMzEuNDA1IDEwOC4wNjEgMTA4LjM5OUwyNS42MDggMzY4LjQyMmwzMS40MDYgMzEuNDA1IDg2LjExMS04Ni4xMTFMMTQ1Ljg0IDUxMmwxNDguNTUyLTE0OC42NDQtOTcuOTEyLTEwMy4zMzN6bTQwLjg2LTEwMi45OTZsLTQ5Ljk3NyA0OS45NzgtLjMzOC0xMDAuMjk1IDUwLjMxNSA1MC4zMTd6TTE4Ny4zNjMgMzEzLjA0bDQ5Ljk3NyA0OS45NzgtNTAuMzE1IDUwLjMxNi4zMzgtMTAwLjI5NHpcIl0sYnRjOlszODQsNTEyLFtdLFwiZjE1YVwiLFwiTTMxMC4yMDQgMjQyLjYzOGMyNy43My0xNC4xOCA0NS4zNzctMzkuMzkgNDEuMjgtODEuMy01LjM1OC01Ny4zNTEtNTIuNDU4LTc2LjU3My0xMTQuODUtODEuOTI5VjBoLTQ4LjUyOHY3Ny4yMDNjLTEyLjYwNSAwLTI1LjUyNS4zMTUtMzguNDQ0LjYzVjBoLTQ4LjUyOHY3OS40MDljLTE3Ljg0Mi41MzktMzguNjIyLjI3Ni05Ny4zNyAwdjUxLjY3OGMzOC4zMTQtLjY3OCA1OC40MTctMy4xNCA2My4wMjMgMjEuNDI3djIxNy40MjljLTIuOTI1IDE5LjQ5Mi0xOC41MjQgMTYuNjg1LTUzLjI1NSAxNi4wNzFMMy43NjUgNDQzLjY4Yzg4LjQ4MSAwIDk3LjM3LjMxNSA5Ny4zNy4zMTVWNTEyaDQ4LjUyOHYtNjcuMDZjMTMuMjM0LjMxNSAyNi4xNTQuMzE1IDM4LjQ0NC4zMTVWNTEyaDQ4LjUyOHYtNjguMDA1YzgxLjI5OS00LjQxMiAxMzUuNjQ3LTI0Ljg5NCAxNDIuODk1LTEwMS40NjcgNS42NzEtNjEuNDQ2LTIzLjMyLTg4Ljg2Mi02OS4zMjYtOTkuODl6TTE1MC42MDggMTM0LjU1M2MyNy40MTUgMCAxMTMuMTI2LTguNTA3IDExMy4xMjYgNDguNTI4IDAgNTQuNTE1LTg1LjcxIDQ4LjIxMi0xMTMuMTI2IDQ4LjIxMnYtOTYuNzR6bTAgMjUxLjc3NlYyNzkuODIxYzMyLjc3MiAwIDEzMy4xMjctOS4xMzggMTMzLjEyNyA1My4yNTUtLjAwMSA2MC4xODYtMTAwLjM1NSA1My4yNTMtMTMzLjEyNyA1My4yNTN6XCJdLGJ1cm9tb2JlbGV4cGVydGU6WzQ0OCw1MTIsW10sXCJmMzdmXCIsXCJNMCAzMnYxMjhoMTI4VjMySDB6bTEyMCAxMjBIOFY0MGgxMTJ2MTEyem00MC0xMjB2MTI4aDEyOFYzMkgxNjB6bTEyMCAxMjBIMTY4VjQwaDExMnYxMTJ6bTQwLTEyMHYxMjhoMTI4VjMySDMyMHptMTIwIDEyMEgzMjhWNDBoMTEydjExMnpNMCAxOTJ2MTI4aDEyOFYxOTJIMHptMTIwIDEyMEg4VjIwMGgxMTJ2MTEyem00MC0xMjB2MTI4aDEyOFYxOTJIMTYwem0xMjAgMTIwSDE2OFYyMDBoMTEydjExMnptNDAtMTIwdjEyOGgxMjhWMTkySDMyMHptMTIwIDEyMEgzMjhWMjAwaDExMnYxMTJ6TTAgMzUydjEyOGgxMjhWMzUySDB6bTEyMCAxMjBIOFYzNjBoMTEydjExMnptNDAtMTIwdjEyOGgxMjhWMzUySDE2MHptMTIwIDEyMEgxNjhWMzYwaDExMnYxMTJ6bTQwLTEyMHYxMjhoMTI4VjM1MkgzMjB6XCJdLGJ1eXNlbGxhZHM6WzQ0OCw1MTIsW10sXCJmMjBkXCIsXCJNMjI0IDE1MC43bDQyLjkgMTYwLjdoLTg1LjhMMjI0IDE1MC43ek00NDggODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGgzNTJjMjYuNSAwIDQ4IDIxLjUgNDggNDh6bS02NS4zIDMyNS4zbC05NC41LTI5OC43SDE1OS44TDY1LjMgNDA1LjNIMTU2bDExMS43LTkxLjYgMjQuMiA5MS42aDkwLjh6XCJdLFwiY2MtYW1hem9uLXBheVwiOls1NzYsNTEyLFtdLFwiZjQyZFwiLFwiTTEyNC43IDIwMS44Yy4xLTExLjggMC0yMy41IDAtMzUuM3YtMzUuM2MwLTEuMy40LTIgMS40LTIuNyAxMS41LTggMjQuMS0xMi4xIDM4LjItMTEuMSAxMi41LjkgMjIuNyA3IDI4LjEgMjEuNyAzLjMgOC45IDQuMSAxOC4yIDQuMSAyNy43IDAgOC43LS43IDE3LjMtMy40IDI1LjYtNS43IDE3LjgtMTguNyAyNC43LTM1LjcgMjMuOS0xMS43LS41LTIxLjktNS0zMS40LTExLjctLjktLjgtMS40LTEuNi0xLjMtMi44em0xNTQuOSAxNC42YzQuNiAxLjggOS4zIDIgMTQuMSAxLjUgMTEuNi0xLjIgMjEuOS01LjcgMzEuMy0xMi41LjktLjYgMS4zLTEuMyAxLjMtMi41LS4xLTMuOSAwLTcuOSAwLTExLjggMC00LS4xLTggMC0xMiAwLTEuNC0uNC0yLTEuOC0yLjItNy0uOS0xMy45LTIuMi0yMC45LTIuOS03LS42LTE0LS4zLTIwLjggMS45LTYuNyAyLjItMTEuNyA2LjItMTMuNyAxMy4xLTEuNiA1LjQtMS42IDEwLjguMSAxNi4yIDEuNiA1LjUgNS4yIDkuMiAxMC40IDExLjJ6TTU3NiA4MHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDQ4MGMyNi41IDAgNDggMjEuNSA0OCA0OHptLTIwNy41IDIzLjljLjQgMS43LjkgMy40IDEuNiA1LjEgMTYuNSA0MC42IDMyLjkgODEuMyA0OS41IDEyMS45IDEuNCAzLjUgMS43IDYuNC4yIDkuOS0yLjggNi4yLTQuOSAxMi42LTcuOCAxOC43LTIuNiA1LjUtNi43IDkuNS0xMi43IDExLjItNC4yIDEuMS04LjUgMS4zLTEyLjkuOS0yLjEtLjItNC4yLS43LTYuMy0uOC0yLjgtLjItNC4yIDEuMS00LjMgNC0uMSAyLjgtLjEgNS42IDAgOC4zLjEgNC42IDEuNiA2LjcgNi4yIDcuNSA0LjcuOCA5LjQgMS42IDE0LjIgMS43IDE0LjMuMyAyNS43LTUuNCAzMy4xLTE3LjkgMi45LTQuOSA1LjYtMTAuMSA3LjctMTUuNCAxOS44LTUwLjEgMzkuNS0xMDAuMyA1OS4yLTE1MC41LjYtMS41IDEuMS0zIDEuMy00LjYuNC0yLjQtLjctMy42LTMuMS0zLjctNS42LS4xLTExLjEgMC0xNi43IDAtMy4xIDAtNS4zIDEuNC02LjQgNC4zLS40IDEuMS0uOSAyLjMtMS4zIDMuNGwtMjkuMSA4My43Yy0yLjEgNi4xLTQuMiAxMi4xLTYuNSAxOC42LS40LS45LS42LTEuNC0uOC0xLjktMTAuOC0yOS45LTIxLjYtNTkuOS0zMi40LTg5LjgtMS43LTQuNy0zLjUtOS41LTUuMy0xNC4yLS45LTIuNS0yLjctNC01LjQtNC02LjQtLjEtMTIuOC0uMi0xOS4yLS4xLTIuMiAwLTMuMyAxLjYtMi44IDMuN3pNMjQyLjQgMjA2YzEuNyAxMS43IDcuNiAyMC44IDE4IDI2LjYgOS45IDUuNSAyMC43IDYuMiAzMS43IDQuNiAxMi43LTEuOSAyMy45LTcuMyAzMy44LTE1LjUuNC0uMy44LS42IDEuNC0xIC41IDMuMi45IDYuMiAxLjUgOS4yLjUgMi42IDIuMSA0LjMgNC41IDQuNCA0LjYuMSA5LjEuMSAxMy43IDAgMi4zLS4xIDMuOC0xLjYgNC0zLjkuMS0uOC4xLTEuNi4xLTIuM3YtODguOGMwLTMuNi0uMi03LjItLjctMTAuOC0xLjYtMTAuOC02LjItMTkuNy0xNS45LTI1LjQtNS42LTMuMy0xMS44LTUtMTguMi01LjktMy0uNC02LS43LTkuMS0xLjFoLTEwYy0uOC4xLTEuNi4zLTIuNS4zLTguMi40LTE2LjMgMS40LTI0LjIgMy41LTUuMSAxLjMtMTAgMy4yLTE1IDQuOS0zIDEtNC41IDMuMi00LjQgNi41LjEgMi44LS4xIDUuNiAwIDguMy4xIDQuMSAxLjggNS4yIDUuNyA0LjEgNi41LTEuNyAxMy4xLTMuNSAxOS43LTQuOCAxMC4zLTEuOSAyMC43LTIuNyAzMS4xLTEuMiA1LjQuOCAxMC41IDIuNCAxNC4xIDcgMy4xIDQgNC4yIDguOCA0LjQgMTMuNy4zIDYuOS4yIDEzLjkuMyAyMC44IDAgLjQtLjEuNy0uMiAxLjItLjQgMC0uOCAwLTEuMS0uMS04LjgtMi4xLTE3LjctMy42LTI2LjgtNC4xLTkuNS0uNS0xOC45LjEtMjcuOSAzLjItMTAuOCAzLjgtMTkuNSAxMC4zLTI0LjYgMjAuOC00LjEgOC4zLTQuNiAxNy0zLjQgMjUuOHpNOTguNyAxMDYuOXYxNzUuM2MwIC44IDAgMS43LjEgMi41LjIgMi41IDEuNyA0LjEgNC4xIDQuMiA1LjkuMSAxMS44LjEgMTcuNyAwIDIuNSAwIDQtMS43IDQuMS00LjEuMS0uOC4xLTEuNy4xLTIuNXYtNjAuN2MuOS43IDEuNCAxLjIgMS45IDEuNiAxNSAxMi41IDMyLjIgMTYuNiA1MS4xIDEyLjkgMTcuMS0zLjQgMjguOS0xMy45IDM2LjctMjkuMiA1LjgtMTEuNiA4LjMtMjQuMSA4LjctMzcgLjUtMTQuMy0xLTI4LjQtNi44LTQxLjctNy4xLTE2LjQtMTguOS0yNy4zLTM2LjctMzAuOS0yLjctLjYtNS41LS44LTguMi0xLjJoLTdjLTEuMi4yLTIuNC4zLTMuNi41LTExLjcgMS40LTIyLjMgNS44LTMxLjggMTIuNy0yIDEuNC0zLjkgMy01LjkgNC41LS4xLS41LS4zLS44LS40LTEuMi0uNC0yLjMtLjctNC42LTEuMS02LjktLjYtMy45LTIuNS01LjUtNi40LTUuNmgtOS43Yy01LjktLjEtNi45IDEtNi45IDYuOHpNNDkzLjYgMzM5Yy0yLjctLjctNS4xIDAtNy42IDEtNDMuOSAxOC40LTg5LjUgMzAuMi0xMzYuOCAzNS44LTE0LjUgMS43LTI5LjEgMi44LTQzLjcgMy4yLTI2LjYuNy01My4yLS44LTc5LjYtNC4zLTE3LjgtMi40LTM1LjUtNS43LTUzLTkuOS0zNy04LjktNzIuNy0yMS43LTEwNi43LTM4LjgtOC44LTQuNC0xNy40LTkuMy0yNi4xLTE0LTMuOC0yLjEtNi4yLTEuNS04LjIgMi4xdjEuN2MxLjIgMS42IDIuMiAzLjQgMy43IDQuOCAzNiAzMi4yIDc2LjYgNTYuNSAxMjIgNzIuOSAyMS45IDcuOSA0NC40IDEzLjcgNjcuMyAxNy41IDE0IDIuMyAyOCAzLjggNDIuMiA0LjUgMyAuMSA2IC4yIDkgLjQuNyAwIDEuNC4yIDIuMS4zaDE3LjdjLjctLjEgMS40LS4zIDIuMS0uMyAxNC45LS40IDI5LjgtMS44IDQ0LjYtNCAyMS40LTMuMiA0Mi40LTguMSA2Mi45LTE0LjcgMjkuNi05LjYgNTcuNy0yMi40IDgzLjQtNDAuMSAyLjgtMS45IDUuNy0zLjggOC02LjIgNC4zLTQuNCAyLjMtMTAuNC0zLjMtMTEuOXptNTAuNC0yNy43Yy0uOC00LjItNC01LjgtNy42LTctNS43LTEuOS0xMS42LTIuOC0xNy42LTMuMy0xMS0uOS0yMi0uNC0zMi44IDEuNi0xMiAyLjItMjMuNCA2LjEtMzMuNSAxMy4xLTEuMi44LTIuNCAxLjgtMy4xIDMtLjYuOS0uNyAyLjMtLjUgMy40LjMgMS4zIDEuNyAxLjYgMyAxLjUuNiAwIDEuMiAwIDEuOC0uMWwxOS41LTIuMWM5LjYtLjkgMTkuMi0xLjUgMjguOC0uOCA0LjEuMyA4LjEgMS4yIDEyIDIuMiA0LjMgMS4xIDYuMiA0LjQgNi40IDguNy4zIDYuNy0xLjIgMTMuMS0yLjkgMTkuNS0zLjUgMTIuOS04LjMgMjUuNC0xMy4zIDM3LjgtLjMuOC0uNyAxLjctLjggMi41LS40IDIuNSAxIDQgMy40IDMuNSAxLjQtLjMgMy0xLjEgNC0yLjEgMy43LTMuNiA3LjUtNy4yIDEwLjYtMTEuMiAxMC43LTEzLjggMTctMjkuNiAyMC43LTQ2LjYuNy0zIDEuMi02LjEgMS43LTkuMS4yLTQuNy4yLTkuNi4yLTE0LjV6XCJdLFwiY2MtYW1leFwiOls1NzYsNTEyLFtdLFwiZjFmM1wiLFwiTTU3NiAyNTUuNGMtMzcuOS0uMi00NC4yLS45LTU0LjUgNXYtNWMtNDUuMyAwLTUzLjUtMS43LTY0LjkgNS4ydi01LjJoLTc4LjJ2NS4xYy0xMS40LTYuNS0yMS40LTUuMS03NS43LTUuMXY1LjZjLTYuMy0zLjctMTQuNS01LjYtMjQuMy01LjZoLTU4Yy0zLjUgMy44LTEyLjUgMTMuNy0xNS43IDE3LjItMTIuNy0xNC4xLTEwLjUtMTEuNi0xNS41LTE3LjJoLTgzLjF2OTIuM2g4MmMzLjMtMy41IDEyLjktMTMuOSAxNi4xLTE3LjQgMTIuNyAxNC4zIDEwLjMgMTEuNyAxNS40IDE3LjRoNDguOWMwLTE0LjcuMS04LjMuMS0yMyAxMS41LjIgMjQuMy0uMiAzNC4zLTYuMiAwIDEzLjktLjEgMTcuMS0uMSAyOS4yaDM5LjZjMC0xOC41LjEtNy40LjEtMjUuMyA2LjIgMCA3LjcgMCA5LjQuMS4xIDEuMyAwIDAgMCAyNS4yIDE1Mi44IDAgMTQ1LjkgMS4xIDE1Ni43LTQuNXY0LjVjMzQuOCAwIDU0LjggMi4yIDY3LjUtNi4xVjQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjI4LjNoMjYuNmM0LjItMTAuMSAyLjItNS4zIDYuNC0xNS4zaDE5LjJjNC4yIDEwIDIuMiA1LjIgNi40IDE1LjNoNTIuOXYtMTEuNGMyLjIgNSAxLjEgMi41IDUuMSAxMS40aDI5LjVjMi40LTUuNSAyLjYtNS44IDUuMS0xMS40djExLjRoMTM1LjV2LTI1LjFjNi40IDAgOC0uMSA5LjguMiAwIDAtLjIgMTAuOS4xIDI0LjhoNjYuNXYtOC45YzcuNCA1LjkgMTcuNCA4LjkgMjkuNyA4LjloMjYuOGM0LjItMTAuMSAyLjItNS4zIDYuNC0xNS4zaDE5YzYuNSAxNSAuMi41IDYuNiAxNS4zaDUyLjh2LTIxLjljMTEuOCAxOS43IDcuOCAxMi45IDEzLjIgMjEuOWg0MS42di05MmgtMzkuOXYxOC40Yy0xMi4yLTIwLjItNi4zLTEwLjQtMTEuMi0xOC40aC00My4zdjIwLjZjLTYuMi0xNC42LTQuNi0xMC44LTguOC0yMC42aC0zMi40Yy0uNCAwLTIuMy4yLTIuMy0uM2gtMjcuNmMtMTIuOCAwLTIzLjEgMy4yLTMwLjcgOS4zdi05LjNoLTM5Ljl2NS4zYy0xMC44LTYuMS0yMC43LTUuMS02NC40LTUuMy0uMSAwLTExLjYtLjEtMTEuNiAwaC0xMDNjLTIuNSA2LjEtNi44IDE2LjQtMTIuNiAzMC0yLjgtNi0xMS0yMy44LTEzLjktMzBoLTQ2VjE1N2MtNy40LTE3LjQtNC43LTExLTktMjEuMUgyMi45Yy0zLjQgNy45LTEzLjcgMzItMjMuMSA1My45VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDQ4MGMyNi41IDAgNDggMjEuNSA0OCA0OHYxNzUuNHptLTE4Ni42LTgwLjZjLS4zLjItMS40IDIuMi0xLjQgNy42IDAgNiAuOSA3LjcgMS4xIDcuOS4yLjEgMS4xLjUgMy40LjVsNy4zLTE2LjljLTEuMSAwLTIuMS0uMS0zLjEtLjEtNS42IDAtNyAuNy03LjMgMXptLTE5LjkgMTMwLjljOS4yIDMuMyAxMSA5LjUgMTEgMTguNGwtLjEgMTMuOGgtMTYuNmwuMS0xMS41YzAtMTEuOC0zLjgtMTMuOC0xNC44LTEzLjhoLTE3LjZsLS4xIDI1LjNoLTE2LjZsLjEtNjkuM2gzOS40YzEzIDAgMjcuMSAyLjMgMjcuMSAxOC43LS4xIDcuNi00LjIgMTUuMy0xMS45IDE4LjR6bS02LjMtMTUuNGMwLTYuNC01LjYtNy40LTEwLjctNy40aC0yMXYxNS42aDIwLjdjNS42IDAgMTEtMS4zIDExLTguMnptMTgxLjctNy4xSDU3NXYtMTQuNmgtMzIuOWMtMTIuOCAwLTIzLjggNi42LTIzLjggMjAuNyAwIDMzIDQyLjcgMTIuOCA0Mi43IDI3LjQgMCA1LjEtNC4zIDYuNC04LjQgNi40aC0zMmwtLjEgMTQuOGgzMmM4LjQgMCAxNy42LTEuOCAyMi41LTguOXYtMjUuOGMtMTAuNS0xMy44LTM5LjMtMS4zLTM5LjMtMTMuNSAwLTUuOCA0LjYtNi41IDkuMi02LjV6bS05OS4yLS4zdi0xNC4zaC01NS4ybC0uMSA2OS4zaDU1LjJsLjEtMTQuMy0zOC42LS4zdi0xMy44SDQ0NXYtMTQuMWgtMzcuOHYtMTIuNWgzOC41em00Mi4yIDQwLjFoLTMyLjJsLS4xIDE0LjhoMzIuMmMxNC44IDAgMjYuMi01LjYgMjYuMi0yMiAwLTMzLjItNDIuOS0xMS4yLTQyLjktMjYuMyAwLTUuNiA0LjktNi40IDkuMi02LjRoMzAuNHYtMTQuNmgtMzMuMmMtMTIuOCAwLTIzLjUgNi42LTIzLjUgMjAuNyAwIDMzIDQyLjcgMTIuNSA0Mi43IDI3LjQtLjEgNS40LTQuNyA2LjQtOC44IDYuNHptLTc4LjEtMTU4LjdjLTE3LjQtLjMtMzMuMi00LjEtMzMuMiAxOS43IDAgMTEuOCAyLjggMTkuOSAxNi4xIDE5LjloNy40bDIzLjUtNTQuNWgyNC44bDI3LjkgNjUuNHYtNjUuNGgyNS4zbDI5LjEgNDguMXYtNDguMWgxNi45djY5SDUyNGwtMzEuMi01MS45djUxLjloLTMzLjdsLTYuNi0xNS4zaC0zNC4zbC02LjQgMTUuM2gtMTkuMmMtMjIuOCAwLTMzLTExLjgtMzMtMzQgMC0yMy4zIDEwLjUtMzUuMyAzNC0zNS4zaDE2LjF2MTUuMnptMTQuMyAyNC41aDIyLjhsLTExLjItMjcuNi0xMS42IDI3LjZ6bS03Mi42LTM5LjZoLTE2Ljl2NjkuM2gxNi45di02OS4zem0tMzguMSAzNy4zYzkuNSAzLjMgMTEgOS4yIDExIDE4LjR2MTMuNWgtMTYuNmMtLjMtMTQuOCAzLjYtMjUuMS0xNC44LTI1LjFoLTE4djI1LjFoLTE2LjR2LTY5LjNsMzkuMS4zYzEzLjMgMCAyNy40IDIgMjcuNCAxOC40LjEgOC00LjMgMTUuNy0xMS43IDE4Ljd6bS02LjctMTUuM2MwLTYuNC01LjYtNy40LTEwLjctNy40aC0yMXYxNS4zaDIwLjdjNS43IDAgMTEtMS4zIDExLTcuOXptLTU5LjUtNy40di0xNC42aC01NS41djY5LjNoNTUuNXYtMTQuM2gtMzguOXYtMTMuOGgzNy44di0xNC4xaC0zNy44di0xMi41aDM4Ljl6bS04NC42IDU0Ljd2LTU0LjJsLTI0IDU0LjJIMTI0bC0yNC01NC4ydjU0LjJINjYuMmwtNi40LTE1LjNIMjUuM2wtNi40IDE1LjNIMWwyOS43LTY5LjNoMjQuNWwyOC4xIDY1Ljd2LTY1LjdoMjcuMWwyMS43IDQ3IDE5LjctNDdoMjcuNnY2OS4zaC0xNi44ek01My45IDE4OC44bC0xMS41LTI3LjYtMTEuMiAyNy42aDIyLjd6bTI1MyAxMDIuNWMwIDI3LjktMzAuNCAyMy4zLTQ5LjMgMjMuM2wtLjEgMjMuM2gtMzIuMmwtMjAuNC0yMy0yMS4zIDIzaC02NS40bC4xLTY5LjNoNjYuNWwyMC41IDIyLjggMjEtMjIuOEgyNzljMTUuNiAwIDI3LjkgNS40IDI3LjkgMjIuN3ptLTExMi43IDExLjhsLTE3LjktMjAuMmgtNDEuN3YxMi41aDM2LjN2MTQuMWgtMzYuM3YxMy44aDQwLjZsMTktMjAuMnpNMjQxIDI3NmwtMjUuMyAyNy40IDI1LjMgMjguMVYyNzZ6bTQ4LjMgMTUuM2MwLTYuMS00LjYtOC40LTEwLjItOC40aC0yMS41djE3LjZoMjEuMmM1LjkgMCAxMC41LTIuOCAxMC41LTkuMnpcIl0sXCJjYy1hcHBsZS1wYXlcIjpbNTc2LDUxMixbXSxcImY0MTZcIixcIk0zMDIuMiAyMTguNGMwIDE3LjItMTAuNSAyNy4xLTI5IDI3LjFoLTI0LjN2LTU0LjJoMjQuNGMxOC40IDAgMjguOSA5LjggMjguOSAyNy4xem00Ny41IDYyLjZjMCA4LjMgNy4yIDEzLjcgMTguNSAxMy43IDE0LjQgMCAyNS4yLTkuMSAyNS4yLTIxLjl2LTcuN2wtMjMuNSAxLjVjLTEzLjMuOS0yMC4yIDUuOC0yMC4yIDE0LjR6TTU3NiA3OXYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4Vjc5YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDQ4MGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTI3LjggMTk3LjJjOC40LjcgMTYuOC00LjIgMjIuMS0xMC40IDUuMi02LjQgOC42LTE1IDcuNy0yMy43LTcuNC4zLTE2LjYgNC45LTIxLjkgMTEuMy00LjggNS41LTguOSAxNC40LTcuOSAyMi44em02MC42IDc0LjVjLS4yLS4yLTE5LjYtNy42LTE5LjgtMzAtLjItMTguNyAxNS4zLTI3LjcgMTYtMjguMi04LjgtMTMtMjIuNC0xNC40LTI3LjEtMTQuNy0xMi4yLS43LTIyLjYgNi45LTI4LjQgNi45LTUuOSAwLTE0LjctNi42LTI0LjMtNi40LTEyLjUuMi0yNC4yIDcuMy0zMC41IDE4LjYtMTMuMSAyMi42LTMuNCA1NiA5LjMgNzQuNCA2LjIgOS4xIDEzLjcgMTkuMSAyMy41IDE4LjcgOS4zLS40IDEzLTYgMjQuMi02IDExLjMgMCAxNC41IDYgMjQuMyA1LjkgMTAuMi0uMiAxNi41LTkuMSAyMi44LTE4LjIgNi45LTEwLjQgOS44LTIwLjQgMTAtMjF6bTEzNS40LTUzLjRjMC0yNi42LTE4LjUtNDQuOC00NC45LTQ0LjhoLTUxLjJ2MTM2LjRoMjEuMnYtNDYuNmgyOS4zYzI2LjggMCA0NS42LTE4LjQgNDUuNi00NXptOTAgMjMuN2MwLTE5LjctMTUuOC0zMi40LTQwLTMyLjQtMjIuNSAwLTM5LjEgMTIuOS0zOS43IDMwLjVoMTkuMWMxLjYtOC40IDkuNC0xMy45IDIwLTEzLjkgMTMgMCAyMC4yIDYgMjAuMiAxNy4ydjcuNWwtMjYuNCAxLjZjLTI0LjYgMS41LTM3LjkgMTEuNi0zNy45IDI5LjEgMCAxNy43IDEzLjcgMjkuNCAzMy40IDI5LjQgMTMuMyAwIDI1LjYtNi43IDMxLjItMTcuNGguNFYzMTBoMTkuNnYtNjh6TTUxNiAyMTAuOWgtMjEuNWwtMjQuOSA4MC42aC0uNGwtMjQuOS04MC42SDQyMmwzNS45IDk5LjMtMS45IDZjLTMuMiAxMC4yLTguNSAxNC4yLTE3LjkgMTQuMi0xLjcgMC00LjktLjItNi4yLS4zdjE2LjRjMS4yLjQgNi41LjUgOC4xLjUgMjAuNyAwIDMwLjQtNy45IDM4LjktMzEuOEw1MTYgMjEwLjl6XCJdLFwiY2MtZGluZXJzLWNsdWJcIjpbNTc2LDUxMixbXSxcImYyNGNcIixcIk0yMzkuNyA3OS45Yy05Ni45IDAtMTc1LjggNzguNi0xNzUuOCAxNzUuOCAwIDk2LjkgNzguOSAxNzUuOCAxNzUuOCAxNzUuOCA5Ny4yIDAgMTc1LjgtNzguOSAxNzUuOC0xNzUuOCAwLTk3LjItNzguNi0xNzUuOC0xNzUuOC0xNzUuOHptLTM5LjkgMjc5LjZjLTQxLjctMTUuOS03MS40LTU2LjQtNzEuNC0xMDMuOHMyOS43LTg3LjkgNzEuNC0xMDQuMXYyMDcuOXptNzkuOC4zVjE1MS42YzQxLjcgMTYuMiA3MS40IDU2LjcgNzEuNCAxMDQuMXMtMjkuNyA4Ny45LTcxLjQgMTA0LjF6TTUyOCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0ODBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTMyOS43IDQ0OGgtOTAuM2MtMTA2LjIgMC0xOTMuOC04NS41LTE5My44LTE5MC4yQzQ1LjYgMTQzLjIgMTMzLjIgNjQgMjM5LjQgNjRoOTAuM2MxMDUgMCAyMDAuNyA3OS4yIDIwMC43IDE5My44IDAgMTA0LjctOTUuNyAxOTAuMi0yMDAuNyAxOTAuMnpcIl0sXCJjYy1kaXNjb3ZlclwiOls1NzYsNTEyLFtdLFwiZjFmMlwiLFwiTTgzIDIxMi4xYzAgNy45LTMuMiAxNS41LTguOSAyMC43LTQuOSA0LjQtMTEuNiA2LjQtMjEuOSA2LjRINDhWMTg1aDQuMmMxMC4zIDAgMTYuNyAxLjcgMjEuOSA2LjYgNS43IDUgOC45IDEyLjYgOC45IDIwLjV6TTUwNC44IDE4NGgtNC45djI0LjloNC43YzEwLjMgMCAxNS44LTQuNCAxNS44LTEyLjggMC03LjktNS41LTEyLjEtMTUuNi0xMi4xek01NzYgODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg0ODBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTQyOCAyNTNoNDUuM3YtMTMuOEg0NDRWMjE3aDI4LjN2LTEzLjhINDQ0VjE4NWgyOS4zdi0xNEg0Mjh2ODJ6bS04Ni4yLTgybDM1IDg0LjJoOC42bDM1LjUtODQuMmgtMTcuNWwtMjIuMiA1NS4yLTIxLjktNTUuMmgtMTcuNXptLTgzIDQxLjZjMCAyNC42IDE5LjkgNDQuNiA0NC42IDQ0LjYgMjQuNiAwIDQ0LjYtMTkuOSA0NC42LTQ0LjYgMC0yNC42LTE5LjktNDQuNi00NC42LTQ0LjYtMjQuNiAwLTQ0LjYgMTkuOS00NC42IDQ0LjZ6bS02OC0uNWMwIDMyLjUgMzMuNiA1Mi41IDYzLjMgMzguMnYtMTljLTE5LjMgMTkuMy00Ni44IDUuOC00Ni44LTE5LjIgMC0yMy43IDI2LjctMzkuMSA0Ni44LTE5di0xOWMtMzAuMi0xNS02My4zIDYuOC02My4zIDM4em0tMzMuOSAyOC4zYy03LjYgMC0xMy44LTMuNy0xNy41LTEwLjhsLTEwLjMgOS45YzE3LjggMjYuMSA1Ni42IDE4LjIgNTYuNi0xMS4zIDAtMTMuMS01LjQtMTktMjMuNi0yNS42LTkuNi0zLjQtMTIuMy01LjktMTIuMy0xMC4zIDAtOC43IDE0LjUtMTQuMSAyNC45LTIuNWw4LjQtMTAuOGMtMTkuMS0xNy4xLTQ5LjctOC45LTQ5LjcgMTQuMyAwIDExLjMgNS4yIDE3LjIgMjAuMiAyMi43IDI1LjcgOS4xIDE0LjcgMjQuNCAzLjMgMjQuNHptLTU3LjQtMjguM2MwLTI0LjEtMTgtNDEuMS00NC4xLTQxLjFIMzJ2ODJoMjMuNGMzMC45IDAgNDQuMS0yMi40IDQ0LjEtNDAuOXptMjMuNC00MS4xaC0xNnY4MmgxNnYtODJ6TTU0NCAyODhjLTMzLjMgMjAuOC0yMjYuNCAxMjQuNC00MTYgMTYwaDQwMWM4LjIgMCAxNS02LjggMTUtMTVWMjg4em0wLTM1bC0yNS45LTM0LjVjMTIuMS0yLjUgMTguNy0xMC42IDE4LjctMjMuMiAwLTI4LjUtMzAuMy0yNC40LTUyLjktMjQuNHY4MmgxNnYtMzIuOGgyLjJsMjIuMiAzMi44SDU0NHpcIl0sXCJjYy1qY2JcIjpbNTc2LDUxMixbXSxcImYyNGJcIixcIk00MzEuNSAyNDQuM1YyMTJjNDEuMiAwIDM4LjUuMiAzOC41LjIgNy4zIDEuMyAxMy4zIDcuMyAxMy4zIDE2IDAgOC44LTYgMTQuNS0xMy4zIDE1LjgtMS4yLjQtMy4zLjMtMzguNS4zem00Mi44IDIwLjJjLTIuOC0uNy0zLjMtLjUtNDIuOC0uNXYzNWMzOS42IDAgNDAgLjIgNDIuOC0uNSA3LjUtMS41IDEzLjUtOCAxMy41LTE3IDAtOC43LTYtMTUuNS0xMy41LTE3ek01NzYgODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg0ODBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE4MiAxOTIuM2gtNTdjMCA2Ny4xIDEwLjcgMTA5LjctMzUuOCAxMDkuNy0xOS41IDAtMzguOC01LjctNTcuMi0xNC44djI4YzMwIDguMyA2OCA4LjMgNjggOC4zIDk3LjkgMCA4Mi00Ny43IDgyLTEzMS4yem0xNzguNSA0LjVjLTYzLjQtMTYtMTY1LTE0LjktMTY1IDU5LjMgMCA3Ny4xIDEwOC4yIDczLjYgMTY1IDU5LjJWMjg3QzMxMi45IDMxMS43IDI1MyAzMDkgMjUzIDI1NnM1OS44LTU1LjYgMTA3LjUtMzEuMnYtMjh6TTU0NCAyODYuNWMwLTE4LjUtMTYuNS0zMC41LTM4LTMydi0uOGMxOS41LTIuNyAzMC4zLTE1LjUgMzAuMy0zMC4yIDAtMTktMTUuNy0zMC0zNy0zMSAwIDAgNi4zLS4zLTEyMC4zLS4zdjEyNy41aDEyMi43YzI0LjMuMSA0Mi4zLTEyLjkgNDIuMy0zMy4yelwiXSxcImNjLW1hc3RlcmNhcmRcIjpbNTc2LDUxMixbXSxcImYxZjFcIixcIk00ODIuOSA0MTAuM2MwIDYuOC00LjYgMTEuNy0xMS4yIDExLjctNi44IDAtMTEuMi01LjItMTEuMi0xMS43IDAtNi41IDQuNC0xMS43IDExLjItMTEuNyA2LjYgMCAxMS4yIDUuMiAxMS4yIDExLjd6bS0zMTAuOC0xMS43Yy03LjEgMC0xMS4yIDUuMi0xMS4yIDExLjcgMCA2LjUgNC4xIDExLjcgMTEuMiAxMS43IDYuNSAwIDEwLjktNC45IDEwLjktMTEuNy0uMS02LjUtNC40LTExLjctMTAuOS0xMS43em0xMTcuNS0uM2MtNS40IDAtOC43IDMuNS05LjUgOC43aDE5LjFjLS45LTUuNy00LjQtOC43LTkuNi04Ljd6bTEwNy44LjNjLTYuOCAwLTEwLjkgNS4yLTEwLjkgMTEuNyAwIDYuNSA0LjEgMTEuNyAxMC45IDExLjcgNi44IDAgMTEuMi00LjkgMTEuMi0xMS43IDAtNi41LTQuNC0xMS43LTExLjItMTEuN3ptMTA1LjkgMjYuMWMwIC4zLjMuNS4zIDEuMSAwIC4zLS4zLjUtLjMgMS4xLS4zLjMtLjMuNS0uNS44LS4zLjMtLjUuNS0xLjEuNS0uMy4zLS41LjMtMS4xLjMtLjMgMC0uNSAwLTEuMS0uMy0uMyAwLS41LS4zLS44LS41LS4zLS4zLS41LS41LS41LS44LS4zLS41LS4zLS44LS4zLTEuMSAwLS41IDAtLjguMy0xLjEgMC0uNS4zLS44LjUtMS4xLjMtLjMuNS0uMy44LS41LjUtLjMuOC0uMyAxLjEtLjMuNSAwIC44IDAgMS4xLjMuNS4zLjguMyAxLjEuNXMuMi42LjUgMS4xem0tMi4yIDEuNGMuNSAwIC41LS4zLjgtLjMuMy0uMy4zLS41LjMtLjggMC0uMyAwLS41LS4zLS44LS4zIDAtLjUtLjMtMS4xLS4zaC0xLjZ2My41aC44VjQyNmguM2wxLjEgMS40aC44bC0xLjEtMS4zek01NzYgODF2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MWMwLTI2LjUgMjEuNS00OCA0OC00OGg0ODBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTY0IDIyMC42YzAgNzYuNSA2Mi4xIDEzOC41IDEzOC41IDEzOC41IDI3LjIgMCA1My45LTguMiA3Ni41LTIzLjEtNzIuOS01OS4zLTcyLjQtMTcxLjIgMC0yMzAuNS0yMi42LTE1LTQ5LjMtMjMuMS03Ni41LTIzLjEtNzYuNC0uMS0xMzguNSA2Mi0xMzguNSAxMzguMnptMjI0IDEwOC44YzcwLjUtNTUgNzAuMi0xNjIuMiAwLTIxNy41LTcwLjIgNTUuMy03MC41IDE2Mi42IDAgMjE3LjV6bS0xNDIuMyA3Ni4zYzAtOC43LTUuNy0xNC40LTE0LjctMTQuNy00LjYgMC05LjUgMS40LTEyLjggNi41LTIuNC00LjEtNi41LTYuNS0xMi4yLTYuNS0zLjggMC03LjYgMS40LTEwLjYgNS40VjM5MmgtOC4ydjM2LjdoOC4yYzAtMTguOS0yLjUtMzAuMiA5LTMwLjIgMTAuMiAwIDguMiAxMC4yIDguMiAzMC4yaDcuOWMwLTE4LjMtMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAgOC4yIDMwLjJoOC4ydi0yM3ptNDQuOS0xMy43aC03Ljl2NC40Yy0yLjctMy4zLTYuNS01LjQtMTEuNy01LjQtMTAuMyAwLTE4LjIgOC4yLTE4LjIgMTkuMyAwIDExLjIgNy45IDE5LjMgMTguMiAxOS4zIDUuMiAwIDktMS45IDExLjctNS40djQuNmg3LjlWMzkyem00MC41IDI1LjZjMC0xNS0yMi45LTguMi0yMi45LTE1LjIgMC01LjcgMTEuOS00LjggMTguNS0xLjFsMy4zLTYuNWMtOS40LTYuMS0zMC4yLTYtMzAuMiA4LjIgMCAxNC4zIDIyLjkgOC4zIDIyLjkgMTUgMCA2LjMtMTMuNSA1LjgtMjAuNy44bC0zLjUgNi4zYzExLjIgNy42IDMyLjYgNiAzMi42LTcuNXptMzUuNCA5LjNsLTIuMi02LjhjLTMuOCAyLjEtMTIuMiA0LjQtMTIuMi00LjF2LTE2LjZoMTMuMVYzOTJoLTEzLjF2LTExLjJoLTguMlYzOTJoLTcuNnY3LjNoNy42VjQxNmMwIDE3LjYgMTcuMyAxNC40IDIyLjYgMTAuOXptMTMuMy0xMy40aDI3LjVjMC0xNi4yLTcuNC0yMi42LTE3LjQtMjIuNi0xMC42IDAtMTguMiA3LjktMTguMiAxOS4zIDAgMjAuNSAyMi42IDIzLjkgMzMuOCAxNC4ybC0zLjgtNmMtNy44IDYuNC0xOS42IDUuOC0yMS45LTQuOXptNTkuMS0yMS41Yy00LjYtMi0xMS42LTEuOC0xNS4yIDQuNFYzOTJoLTguMnYzNi43aDguMlY0MDhjMC0xMS42IDkuNS0xMC4xIDEyLjgtOC40bDIuNC03LjZ6bTEwLjYgMTguM2MwLTExLjQgMTEuNi0xNS4xIDIwLjctOC40bDMuOC02LjVjLTExLjYtOS4xLTMyLjctNC4xLTMyLjcgMTUgMCAxOS44IDIyLjQgMjMuOCAzMi43IDE1bC0zLjgtNi41Yy05LjIgNi41LTIwLjcgMi42LTIwLjctOC42em02Ni43LTE4LjNINDA4djQuNGMtOC4zLTExLTI5LjktNC44LTI5LjkgMTMuOSAwIDE5LjIgMjIuNCAyNC43IDI5LjkgMTMuOXY0LjZoOC4yVjM5MnptMzMuNyAwYy0yLjQtMS4yLTExLTIuOS0xNS4yIDQuNFYzOTJoLTcuOXYzNi43aDcuOVY0MDhjMC0xMSA5LTEwLjMgMTIuOC04LjRsMi40LTcuNnptNDAuMy0xNC45aC03Ljl2MTkuM2MtOC4yLTEwLjktMjkuOS01LjEtMjkuOSAxMy45IDAgMTkuNCAyMi41IDI0LjYgMjkuOSAxMy45djQuNmg3Ljl2LTUxLjd6bTcuNi03NS4xdjQuNmguOFYzMDJoMS45di0uOGgtNC42di44aDEuOXptNi42IDEyMy44YzAtLjUgMC0xLjEtLjMtMS42LS4zLS4zLS41LS44LS44LTEuMS0uMy0uMy0uOC0uNS0xLjEtLjgtLjUgMC0xLjEtLjMtMS42LS4zLS4zIDAtLjguMy0xLjQuMy0uNS4zLS44LjUtMS4xLjgtLjUuMy0uOC44LS44IDEuMS0uMy41LS4zIDEuMS0uMyAxLjYgMCAuMyAwIC44LjMgMS40IDAgLjMuMy44LjggMS4xLjMuMy41LjUgMS4xLjguNS4zIDEuMS4zIDEuNC4zLjUgMCAxLjEgMCAxLjYtLjMuMy0uMy44LS41IDEuMS0uOC4zLS4zLjUtLjguOC0xLjEuMy0uNi4zLTEuMS4zLTEuNHptMy4yLTEyNC43aC0xLjRsLTEuNiAzLjUtMS42LTMuNWgtMS40djUuNGguOHYtNC4xbDEuNiAzLjVoMS4xbDEuNC0zLjV2NC4xaDEuMXYtNS40em00LjQtODAuNWMwLTc2LjItNjIuMS0xMzguMy0xMzguNS0xMzguMy0yNy4yIDAtNTMuOSA4LjItNzYuNSAyMy4xIDcyLjEgNTkuMyA3My4yIDE3MS41IDAgMjMwLjUgMjIuNiAxNSA0OS41IDIzLjEgNzYuNSAyMy4xIDc2LjQuMSAxMzguNS02MS45IDEzOC41LTEzOC40elwiXSxcImNjLXBheXBhbFwiOls1NzYsNTEyLFtdLFwiZjFmNFwiLFwiTTE4Ni4zIDI1OC4yYzAgMTIuMi05LjcgMjEuNS0yMiAyMS41LTkuMiAwLTE2LTUuMi0xNi0xNSAwLTEyLjIgOS41LTIyIDIxLjctMjIgOS4zIDAgMTYuMyA1LjcgMTYuMyAxNS41ek04MC41IDIwOS43aC00LjdjLTEuNSAwLTMgMS0zLjIgMi43bC00LjMgMjYuNyA4LjItLjNjMTEgMCAxOS41LTEuNSAyMS41LTE0LjIgMi4zLTEzLjQtNi4yLTE0LjktMTcuNS0xNC45em0yODQgMEgzNjBjLTEuOCAwLTMgMS0zLjIgMi43bC00LjIgMjYuNyA4LS4zYzEzIDAgMjItMyAyMi0xOC0uMS0xMC42LTkuNi0xMS4xLTE4LjEtMTEuMXpNNTc2IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoNDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xMjguMyAyMTUuNGMwLTIxLTE2LjItMjgtMzQuNy0yOGgtNDBjLTIuNSAwLTUgMi01LjIgNC43TDMyIDI5NC4yYy0uMyAyIDEuMiA0IDMuMiA0aDE5YzIuNyAwIDUuMi0yLjkgNS41LTUuN2w0LjUtMjYuNmMxLTcuMiAxMy4yLTQuNyAxOC00LjcgMjguNiAwIDQ2LjEtMTcgNDYuMS00NS44em04NC4yIDguOGgtMTljLTMuOCAwLTQgNS41LTQuMiA4LjItNS44LTguNS0xNC4yLTEwLTIzLjctMTAtMjQuNSAwLTQzLjIgMjEuNS00My4yIDQ1LjIgMCAxOS41IDEyLjIgMzIuMiAzMS43IDMyLjIgOSAwIDIwLjItNC45IDI2LjUtMTEuOS0uNSAxLjUtMSA0LjctMSA2LjIgMCAyLjMgMSA0IDMuMiA0SDIwMGMyLjcgMCA1LTIuOSA1LjUtNS43bDEwLjItNjQuM2MuMy0xLjktMS4yLTMuOS0zLjItMy45em00MC41IDk3LjlsNjMuNy05Mi42Yy41LS41LjUtMSAuNS0xLjcgMC0xLjctMS41LTMuNS0zLjItMy41aC0xOS4yYy0xLjcgMC0zLjUgMS00LjUgMi41bC0yNi41IDM5LTExLTM3LjVjLS44LTIuMi0zLTQtNS41LTRoLTE4LjdjLTEuNyAwLTMuMiAxLjgtMy4yIDMuNSAwIDEuMiAxOS41IDU2LjggMjEuMiA2Mi4xLTIuNyAzLjgtMjAuNSAyOC42LTIwLjUgMzEuNiAwIDEuOCAxLjUgMy4yIDMuMiAzLjJoMTkuMmMxLjgtLjEgMy41LTEuMSA0LjUtMi42em0xNTkuMy0xMDYuN2MwLTIxLTE2LjItMjgtMzQuNy0yOGgtMzkuN2MtMi43IDAtNS4yIDItNS41IDQuN2wtMTYuMiAxMDJjLS4yIDIgMS4zIDQgMy4yIDRoMjAuNWMyIDAgMy41LTEuNSA0LTMuMmw0LjUtMjljMS03LjIgMTMuMi00LjcgMTgtNC43IDI4LjQgMCA0NS45LTE3IDQ1LjktNDUuOHptODQuMiA4LjhoLTE5Yy0zLjggMC00IDUuNS00LjMgOC4yLTUuNS04LjUtMTQtMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5LjMgMCAyMC41LTQuOSAyNi41LTExLjktLjMgMS41LTEgNC43LTEgNi4yIDAgMi4zIDEgNCAzLjIgNEg0ODRjMi43IDAgNS0yLjkgNS41LTUuN2wxMC4yLTY0LjNjLjMtMS45LTEuMi0zLjktMy4yLTMuOXptNDcuNS0zMy4zYzAtMi0xLjUtMy41LTMuMi0zLjVoLTE4LjVjLTEuNSAwLTMgMS4yLTMuMiAyLjdsLTE2LjIgMTA0LS4zLjVjMCAxLjggMS41IDMuNSAzLjUgMy41aDE2LjVjMi41IDAgNS0yLjkgNS4yLTUuN0w1NDQgMTkxLjJ2LS4zem0tOTAgNTEuOGMtMTIuMiAwLTIxLjcgOS43LTIxLjcgMjIgMCA5LjcgNyAxNSAxNi4yIDE1IDEyIDAgMjEuNy05LjIgMjEuNy0yMS41LjEtOS44LTYuOS0xNS41LTE2LjItMTUuNXpcIl0sXCJjYy1zdHJpcGVcIjpbNTc2LDUxMixbXSxcImYxZjVcIixcIk0zOTYuOSAyNTYuNWMwIDE5LjEtOC44IDMzLjQtMjEuOSAzMy40LTguMyAwLTEzLjMtMy0xNi44LTYuN2wtLjItNTIuOGMzLjctNC4xIDguOC03IDE3LTcgMTIuOS0uMSAyMS45IDE0LjUgMjEuOSAzMy4xek01NzYgODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg0ODBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTEyMi4yIDI4MS4xYzAtNDIuMy01NC4zLTM0LjctNTQuMy01MC43IDAtNS41IDQuNi03LjcgMTIuMS03LjcgMTAuOCAwIDI0LjUgMy4zIDM1LjMgOS4xdi0zMy40Yy0xMS44LTQuNy0yMy41LTYuNS0zNS4zLTYuNS0yOC44IDAtNDggMTUtNDggNDAuMiAwIDM5LjMgNTQgMzIuOSA1NCA0OS45IDAgNi42LTUuNyA4LjctMTMuNiA4LjctMTEuOCAwLTI2LjktNC45LTM4LjktMTEuM3YzMy45YzEzLjIgNS43IDI2LjYgOC4xIDM4LjggOC4xIDI5LjYtLjIgNDkuOS0xNC43IDQ5LjktNDAuM3ptNjguOS04Ni45aC0yN3YtMzAuOGwtMzQuNyA3LjQtLjIgMTEzLjljMCAyMSAxNS44IDM2LjUgMzYuOSAzNi41IDExLjYgMCAyMC4yLTIuMSAyNC45LTQuN3YtMjguOWMtNC41IDEuOC0yNyA4LjMtMjctMTIuNnYtNTAuNWgyN3YtMzAuM3ptNzMuOCAwYy00LjctMS43LTIxLjMtNC44LTI5LjYgMTAuNWwtMi4yLTEwLjVoLTMwLjd2MTI0LjVoMzUuNXYtODQuNGM4LjQtMTEgMjIuNi04LjkgMjcuMS03LjR2LTMyLjd6bTQ0LjIgMGgtMzUuN3YxMjQuNWgzNS43VjE5NC4yem0wLTQ3LjNsLTM1LjcgNy42djI4LjlsMzUuNy03LjZ2LTI4Ljl6bTEyMi43IDEwOC44YzAtNDEuMy0yMy41LTYzLjgtNDguNC02My44LTEzLjkgMC0yMi45IDYuNi0yNy44IDExLjFsLTEuOC04LjhoLTMxLjNWMzYwbDM1LjUtNy41LjEtNDAuMmM1LjEgMy43IDEyLjcgOSAyNS4xIDkgMjUuNC0uMSA0OC42LTIwLjUgNDguNi02NS42em0xMTIuMiAxLjJjMC0zNi40LTE3LjYtNjUuMS01MS4zLTY1LjEtMzMuOCAwLTU0LjMgMjguNy01NC4zIDY0LjkgMCA0Mi44IDI0LjIgNjQuNSA1OC44IDY0LjUgMTcgMCAyOS43LTMuOSAzOS40LTkuMnYtMjguNmMtOS43IDQuOS0yMC44IDcuOS0zNC45IDcuOS0xMy44IDAtMjYtNC45LTI3LjYtMjEuNWg2OS41Yy4xLTIgLjQtOS40LjQtMTIuOXptLTUxLjYtMzYuMWMtOC45IDAtMTguNyA2LjctMTguNyAyMi43aDM2LjdjMC0xNi05LjMtMjIuNy0xOC0yMi43elwiXSxcImNjLXZpc2FcIjpbNTc2LDUxMixbXSxcImYxZjBcIixcIk00NzAuMSAyMzEuM3M3LjYgMzcuMiA5LjMgNDVINDQ2YzMuMy04LjkgMTYtNDMuNSAxNi00My41LS4yLjMgMy4zLTkuMSA1LjMtMTQuOWwyLjggMTMuNHpNNTc2IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoNDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xNTIuNSAzMzEuMkwyMTUuNyAxNzZoLTQyLjVsLTM5LjMgMTA2LTQuMy0yMS41LTE0LTcxLjRjLTIuMy05LjktOS40LTEyLjctMTguMi0xMy4xSDMyLjdsLS43IDMuMWMxNS44IDQgMjkuOSA5LjggNDIuMiAxNy4xbDM1LjggMTM1aDQyLjV6bTk0LjQuMkwyNzIuMSAxNzZoLTQwLjJsLTI1LjEgMTU1LjRoNDAuMXptMTM5LjktNTAuOGMuMi0xNy43LTEwLjYtMzEuMi0zMy43LTQyLjMtMTQuMS03LjEtMjIuNy0xMS45LTIyLjctMTkuMi4yLTYuNiA3LjMtMTMuNCAyMy4xLTEzLjQgMTMuMS0uMyAyMi43IDIuOCAyOS45IDUuOWwzLjYgMS43IDUuNS0zMy42Yy03LjktMy4xLTIwLjUtNi42LTM2LTYuNi0zOS43IDAtNjcuNiAyMS4yLTY3LjggNTEuNC0uMyAyMi4zIDIwIDM0LjcgMzUuMiA0Mi4yIDE1LjUgNy42IDIwLjggMTIuNiAyMC44IDE5LjMtLjIgMTAuNC0xMi42IDE1LjItMjQuMSAxNS4yLTE2IDAtMjQuNi0yLjUtMzcuNy04LjNsLTUuMy0yLjUtNS42IDM0LjljOS40IDQuMyAyNi44IDguMSA0NC44IDguMyA0Mi4yLjEgNjkuNy0yMC44IDcwLTUzek01MjggMzMxLjRMNDk1LjYgMTc2aC0zMS4xYy05LjYgMC0xNi45IDIuOC0yMSAxMi45bC01OS43IDE0Mi41SDQyNnM2LjktMTkuMiA4LjQtMjMuM0g0ODZjMS4yIDUuNSA0LjggMjMuMyA0LjggMjMuM0g1Mjh6XCJdLGNlbnRlcmNvZGU6WzUxMiw1MTIsW10sXCJmMzgwXCIsXCJNMzI5LjIgMjY4LjZjLTMuOCAzNS4yLTM1LjQgNjAuNi03MC42IDU2LjgtMzUuMi0zLjgtNjAuNi0zNS40LTU2LjgtNzAuNiAzLjgtMzUuMiAzNS40LTYwLjYgNzAuNi01Ni44IDM1LjEgMy44IDYwLjYgMzUuNCA1Ni44IDcwLjZ6bS04NS44IDIzNS4xQzk2LjcgNDk2LTguMiAzNjUuNSAxMC4xIDIyNC4zYzExLjItODYuNiA2NS44LTE1Ni45IDEzOS4xLTE5MiAxNjEtNzcuMSAzNDkuNyAzNy40IDM1NC43IDIxNi42IDQuMSAxNDctMTE4LjQgMjYyLjItMjYwLjUgMjU0Ljh6bTE3OS45LTE4MGMyNy45LTExOC0xNjAuNS0yMDUuOS0yMzcuMi0yMzQuMi01Ny41IDU2LjMtNjkuMSAxODguNi0zMy44IDM0NC40IDY4LjggMTUuOCAxNjkuMS0yNi40IDI3MS0xMTAuMnpcIl0sY2hyb21lOls0OTYsNTEyLFtdLFwiZjI2OFwiLFwiTTEzMS41IDIxNy41TDU1LjEgMTAwLjFjNDcuNi01OS4yIDExOS05MS44IDE5Mi05Mi4xIDQyLjMtLjMgODUuNSAxMC41IDEyNC44IDMzLjIgNDMuNCAyNS4yIDc2LjQgNjEuNCA5Ny40IDEwM0wyNjQgMTMzLjRjLTU4LjEtMy40LTExMy40IDI5LjMtMTMyLjUgODQuMXptMzIuOSAzOC41YzAgNDYuMiAzNy40IDgzLjYgODMuNiA4My42czgzLjYtMzcuNCA4My42LTgzLjYtMzcuNC04My42LTgzLjYtODMuNi04My42IDM3LjMtODMuNiA4My42em0zMTQuOS04OS4yTDMzOS42IDE3NGMzNy45IDQ0LjMgMzguNSAxMDguMiA2LjYgMTU3LjJMMjM0LjEgNTAzLjZjNDYuNSAyLjUgOTQuNC03LjcgMTM3LjgtMzIuOSAxMDcuNC02MiAxNTAuOS0xOTIgMTA3LjQtMzAzLjl6TTEzMy43IDMwMy42TDQwLjQgMTIwLjFDMTQuOSAxNTkuMSAwIDIwNS45IDAgMjU2YzAgMTI0IDkwLjggMjI2LjcgMjA5LjUgMjQ0LjlsNjMuNy0xMjQuOGMtNTcuNiAxMC44LTExMy4yLTIwLjgtMTM5LjUtNzIuNXpcIl0sY2xvdWRzY2FsZTpbNDQ4LDUxMixbXSxcImYzODNcIixcIk0zMTguMSAxNTRsLTkuNCA3LjZjLTIyLjUtMTkuMy01MS41LTMzLjYtODMuMy0zMy42QzE1My44IDEyOCA5NiAxODguOCA5NiAyNjAuM2MwIDYuNi40IDEzLjEgMS40IDE5LjQtMi01NiA0MS44LTk3LjQgOTIuNi05Ny40IDI0LjIgMCA0Ni4yIDkuNCA2Mi42IDI0LjdsLTI1LjIgMjAuNGMtOC4zLS45LTE2LjggMS44LTIzLjEgOC4xLTExLjEgMTEtMTEuMSAyOC45IDAgNDAgMTEuMSAxMSAyOC45IDExIDQwIDAgNi4zLTYuMyA5LTE0LjkgOC4xLTIzLjFsNzUuMi04OC44YzYuMy02LjUtMy4zLTE1LjktOS41LTkuNnptLTgzLjggMTExLjVjLTUuNiA1LjUtMTQuNiA1LjUtMjAuMiAwLTUuNi01LjYtNS42LTE0LjYgMC0yMC4yczE0LjYtNS42IDIwLjIgMCA1LjYgMTQuNyAwIDIwLjJ6TTIyNCAzMkMxMDAuNSAzMiAwIDEzMi41IDAgMjU2czEwMC41IDIyNCAyMjQgMjI0IDIyNC0xMDAuNSAyMjQtMjI0UzM0Ny41IDMyIDIyNCAzMnptMCAzODRjLTg4LjIgMC0xNjAtNzEuOC0xNjAtMTYwUzEzNS44IDk2IDIyNCA5NnMxNjAgNzEuOCAxNjAgMTYwLTcxLjggMTYwLTE2MCAxNjB6XCJdLGNsb3Vkc21pdGg6WzMzMiw1MTIsW10sXCJmMzg0XCIsXCJNMzMyLjUgNDE5LjljMCA0Ni40LTM3LjYgODQuMS04NCA4NC4xcy04NC0zNy43LTg0LTg0LjEgMzcuNi04NCA4NC04NCA4NCAzNy42IDg0IDg0em0tODQtMjQzLjljNDYuNCAwIDgwLTM3LjYgODAtODRzLTMzLjYtODQtODAtODQtODggMzcuNi04OCA4NC0yOS42IDc2LTc2IDc2LTg0IDQxLjYtODQgODggMzcuNiA4MCA4NCA4MCA4NC0zMy42IDg0LTgwIDMzLjYtODAgODAtODB6XCJdLGNsb3VkdmVyc2lmeTpbNjE2LDUxMixbXSxcImYzODVcIixcIk0xNDguNiAzMDRjOC4yIDY4LjUgNjcuNCAxMTUuNSAxNDYgMTExLjMgNTEuMiA0My4zIDEzNi44IDQ1LjggMTg2LjQtNS42IDY5LjIgMS4xIDExOC41LTQ0LjYgMTMxLjUtOTkuNSAxNC44LTYyLjUtMTguMi0xMzIuNS05Mi4xLTE1NS4xLTMzLTg4LjEtMTMxLjQtMTAxLjUtMTg2LjUtODUtNTcuMyAxNy4zLTg0LjMgNTMuMi05OS4zIDEwOS43LTcuOCAyLjctMjYuNSA4LjktNDUgMjQuMSAxMS43IDAgMTUuMiA4LjkgMTUuMiAxOS41djIwLjRjMCAxMC43LTguNyAxOS41LTE5LjUgMTkuNWgtMjAuMmMtMTAuNyAwLTE5LjUtNi0xOS41LTE2LjdWMjQwSDk4LjhDOTUgMjQwIDg4IDI0NC4zIDg4IDI1MS45djQwLjRjMCA2LjQgNS4zIDExLjggMTEuNyAxMS44aDQ4Ljl6bTIyNy40IDhjLTEwLjcgNDYuMyAyMS43IDcyLjQgNTUuMyA4Ni44QzMyNC4xIDQzMi42IDI1OS43IDM0OCAyOTYgMjg4Yy0zMy4yIDIxLjYtMzMuNyA3MS4yLTI5LjIgOTIuOS0xNy45LTEyLjQtNTMuOC0zMi40LTU3LjQtNzkuOC0zLTM5LjkgMjEuNS03NS43IDU3LTkzLjlDMjk3IDE5MS40IDM2OS45IDE5OC43IDQwMCAyNDhjLTE0LjEtNDgtNTMuOC03MC4xLTEwMS44LTc0LjggMzAuOS0zMC43IDY0LjQtNTAuMyAxMTQuMi00My43IDY5LjggOS4zIDEzMy4yIDgyLjggNjcuNyAxNTAuNSAzNS0xNi4zIDQ4LjctNTQuNCA0Ny41LTc2LjlsMTAuNSAxOS42YzExLjggMjIgMTUuMiA0Ny42IDkuNCA3Mi05LjIgMzktNDAuNiA2OC44LTc5LjcgNzYuNS0zMi4xIDYuMy04My4xLTUuMS05MS44LTU5LjJ6TTEyOCAyMDhIODguMmMtOC45IDAtMTYuMi03LjMtMTYuMi0xNi4ydi0zOS42YzAtOC45IDcuMy0xNi4yIDE2LjItMTYuMkgxMjhjOC45IDAgMTYuMiA3LjMgMTYuMiAxNi4ydjM5LjZjMCA4LjktNy4zIDE2LjItMTYuMiAxNi4yek0xMC4xIDE2OEM0LjUgMTY4IDAgMTYzLjUgMCAxNTcuOXYtMjcuOGMwLTUuNiA0LjUtMTAuMSAxMC4xLTEwLjFoMjcuN2M1LjUgMCAxMC4xIDQuNSAxMC4xIDEwLjF2MjcuOGMwIDUuNi00LjUgMTAuMS0xMC4xIDEwLjFIMTAuMXpNMTY4IDE0Mi43di0yMS40YzAtNS4xIDQuMi05LjMgOS4zLTkuM2gyMS40YzUuMSAwIDkuMyA0LjIgOS4zIDkuM3YyMS40YzAgNS4xLTQuMiA5LjMtOS4zIDkuM2gtMjEuNGMtNS4xIDAtOS4zLTQuMi05LjMtOS4zek01NiAyMzUuNXYyNWMwIDYuMy01LjEgMTEuNS0xMS40IDExLjVIMTkuNEMxMy4xIDI3MiA4IDI2Ni44IDggMjYwLjV2LTI1YzAtNi4zIDUuMS0xMS41IDExLjQtMTEuNWgyNS4xYzYuNCAwIDExLjUgNS4yIDExLjUgMTEuNXpcIl0sY29kZXBlbjpbNTEyLDUxMixbXSxcImYxY2JcIixcIk01MDIuMjg1IDE1OS43MDRsLTIzNC0xNTZjLTcuOTg3LTQuOTE1LTE2LjUxMS00Ljk2LTI0LjU3MSAwbC0yMzQgMTU2QzMuNzE0IDE2My43MDMgMCAxNzAuODQ3IDAgMTc3Ljk4OXYxNTUuOTk5YzAgNy4xNDMgMy43MTQgMTQuMjg2IDkuNzE1IDE4LjI4NmwyMzQgMTU2LjAyMmM3Ljk4NyA0LjkxNSAxNi41MTEgNC45NiAyNC41NzEgMGwyMzQtMTU2LjAyMmM2LTMuOTk5IDkuNzE1LTExLjE0MyA5LjcxNS0xOC4yODZWMTc3Ljk4OWMtLjAwMS03LjE0Mi0zLjcxNS0xNC4yODYtOS43MTYtMTguMjg1ek0yNzggNjMuMTMxbDE3Mi4yODYgMTE0Ljg1OC03Ni44NTcgNTEuNDI5TDI3OCAxNjUuNzAzVjYzLjEzMXptLTQ0IDB2MTAyLjU3MmwtOTUuNDI5IDYzLjcxNS03Ni44NTctNTEuNDI5TDIzNCA2My4xMzF6TTQ0IDIxOS4xMzJsNTUuMTQzIDM2Ljg1N0w0NCAyOTIuODQ2di03My43MTR6bTE5MCAyMjkuNzE1TDYxLjcxNCAzMzMuOTg5bDc2Ljg1Ny01MS40MjlMMjM0IDM0Ni4yNzV2MTAyLjU3MnptMjItMTQwLjg1OGwtNzcuNzE1LTUyIDc3LjcxNS01MiA3Ny43MTUgNTItNzcuNzE1IDUyem0yMiAxNDAuODU4VjM0Ni4yNzVsOTUuNDI5LTYzLjcxNSA3Ni44NTcgNTEuNDI5TDI3OCA0NDguODQ3em0xOTAtMTU2LjAwMWwtNTUuMTQzLTM2Ljg1N0w0NjggMjE5LjEzMnY3My43MTR6XCJdLGNvZGllcGllOls0NzIsNTEyLFtdLFwiZjI4NFwiLFwiTTQyMi41IDIwMi45YzMwLjcgMCAzMy41IDUzLjEtLjMgNTMuMWgtMTAuOHY0NC4zaC0yNi42di05Ny40aDM3Ljd6TTQ3MiAzNTIuNkM0MjkuOSA0NDQuNSAzNTAuNCA1MDQgMjQ4IDUwNCAxMTEgNTA0IDAgMzkzIDAgMjU2UzExMSA4IDI0OCA4Yzk3LjQgMCAxNzIuOCA1My43IDIxOC4yIDEzOC40bC0xODYgMTA4LjhMNDcyIDM1Mi42em0tMzguNSAxMi41bC02MC4zLTMwLjdjLTI3LjEgNDQuMy03MC40IDcxLjQtMTIyLjQgNzEuNC04Mi41IDAtMTQ5LjItNjYuNy0xNDkuMi0xNDguOSAwLTgyLjUgNjYuNy0xNDkuMiAxNDkuMi0xNDkuMiA0OC40IDAgODguOSAyMy41IDExNi45IDYzLjRsNTkuNS0zNC42Yy00MC43LTYyLjYtMTA0LjctMTAwLTE3OS4yLTEwMC0xMjEuMiAwLTIxOS41IDk4LjMtMjE5LjUgMjE5LjVTMTI2LjggNDc1LjUgMjQ4IDQ3NS41Yzc4LjYgMCAxNDYuNS00Mi4xIDE4NS41LTExMC40elwiXSxjb25uZWN0ZGV2ZWxvcDpbNTc2LDUxMixbXSxcImYyMGVcIixcIk01NTAuNSAyNDFsLTUwLjA4OS04Ni43ODZjMS4wNzEtMi4xNDIgMS44NzUtNC41NTMgMS44NzUtNy4yMzIgMC04LjAzNi02LjY5Ni0xNC43MzMtMTQuNzMyLTE1LjAwMWwtNTUuNDQ3LTk1Ljg5M2MuNTM2LTEuNjA3IDEuMDcxLTMuMjE0IDEuMDcxLTQuODIxIDAtOC41NzEtNi45NjQtMTUuMjY4LTE1LjI2OC0xNS4yNjgtNC44MjEgMC04LjgzOSAyLjE0My0xMS43ODYgNS42MjVIMjk5LjUxOEMyOTYuODM5IDE4LjE0MyAyOTIuODIxIDE2IDI4OCAxNnMtOC44MzkgMi4xNDMtMTEuNTE4IDUuNjI1SDE3MC40MTFDMTY3LjQ2NCAxOC4xNDMgMTYzLjQ0NyAxNiAxNTguNjI1IDE2Yy04LjMwMyAwLTE1LjI2OCA2LjY5Ni0xNS4yNjggMTUuMjY4IDAgMS42MDcuNTM2IDMuNDgyIDEuMDcyIDQuODIxbC01NS45ODMgOTcuMjMzYy01LjM1NiAyLjQxLTkuMTA3IDcuNS05LjEwNyAxMy42NjEgMCAuNTM1LjI2OCAxLjA3MS4yNjggMS42MDdsLTUzLjMwNCA5Mi4xNDNjLTcuMjMyIDEuMzM5LTEyLjU5IDcuNS0xMi41OSAxNSAwIDcuMjMyIDUuMDg5IDEzLjM5MyAxMi4wNTQgMTVsNTUuMTc5IDk1LjM1OGMtLjUzNiAxLjYwNy0uODA0IDIuOTQ2LS44MDQgNC44MjEgMCA3LjIzMiA1LjA4OSAxMy4zOTMgMTIuMDU0IDE0LjczMmw1MS42OTcgODkuNzMyYy0uNTM2IDEuNjA3LTEuMDcxIDMuNDgyLTEuMDcxIDUuMzU3IDAgOC41NzEgNi45NjQgMTUuMjY4IDE1LjI2OCAxNS4yNjggNC44MjEgMCA4LjgzOS0yLjE0MyAxMS41MTgtNS4zNTdoMTA2Ljg3NUMyNzkuMTYxIDQ5My44NTcgMjgzLjQ0NyA0OTYgMjg4IDQ5NnM4LjgzOS0yLjE0MyAxMS41MTgtNS4zNTdoMTA3LjE0M2MyLjY3OCAyLjk0NiA2LjY5NiA0LjgyMSAxMC45ODIgNC44MjEgOC41NzEgMCAxNS4yNjgtNi45NjQgMTUuMjY4LTE1LjI2OCAwLTEuNjA3LS4yNjctMi45NDYtLjgwMy00LjI4NWw1MS42OTctOTAuMjY4YzYuOTY0LTEuMzM5IDEyLjA1NC03LjUgMTIuMDU0LTE0LjczMiAwLTEuNjA3LS4yNjgtMy4yMTQtLjgwNC00LjgyMWw1NC45MTEtOTUuMzU4YzYuOTY0LTEuMzM5IDEyLjMyMi03LjUgMTIuMzIyLTE1LS4wMDItNy4yMzItNS4wOTItMTMuMzkzLTExLjc4OC0xNC43MzJ6TTE1My41MzUgNDUwLjczMmwtNDMuNjYtNzUuODAzaDQzLjY2djc1LjgwM3ptMC04My44MzloLTQzLjY2Yy0uMjY4LTEuMDcxLS44MDQtMi4xNDItMS4zMzktMy4yMTRsNDQuOTk5LTQ3LjQxdjUwLjYyNHptMC02Mi40MTFsLTUwLjM1NyA1My4zMDRjLTEuMzM5LS41MzYtMi42NzktMS4zNC00LjAxOC0xLjYwN0w0My40NDcgMjU5Ljc1Yy41MzUtMS4zMzkuNTM1LTIuNjc5LjUzNS00LjAxOHMwLTIuNDEtLjI2OC0zLjQ4Mmw1MS45NjUtOTBjMi42NzktLjI2OCA1LjM1Ny0xLjA3MiA3Ljc2OC0yLjY3OWw1MC4wODkgNTEuOTY1djkyLjk0NnptMC0xMDIuMzIybC00NS44MDMtNDcuNDFjMS4zMzktMi4xNDMgMi4xNDMtNC44MjEgMi4xNDMtNy43NjcgMC0uMjY4LS4yNjgtLjgwNC0uMjY4LTEuMDcybDQzLjkyOC0xNS44MDR2NzIuMDUzem0wLTgwLjYyNWwtNDMuNjYgMTUuODA0IDQzLjY2LTc1LjUzNnY1OS43MzJ6bTMyNi41MTkgMzkuMTA4bC44MDQgMS4zMzlMNDQ1LjUgMzI5LjEyNWwtNjMuNzUtNjcuMjMyIDk4LjAzNi0xMDEuNTE4LjI2OC4yNjh6TTI5MS43NSAzNTUuMTA3bDExLjUxOCAxMS43ODZIMjgwLjVsMTEuMjUtMTEuNzg2em0tLjI2OC0xMS4yNWwtODMuMzAzLTg1LjQ0NiA3OS41NTMtODQuMzc1IDgzLjAzNiA4Ny41ODktNzkuMjg2IDgyLjIzMnptNS4zNTcgNS44OTNsNzkuMjg2LTgyLjIzMiA2Ny41IDcxLjI1LTUuODkyIDI4LjEyNUgzMTMuNzE0bC0xNi44NzUtMTcuMTQzek00MTAuNDExIDQ0LjM5M2MxLjA3MS41MzYgMi4xNDIgMS4wNzIgMy40ODIgMS4zNGw1Ny44NTcgMTAwLjcxNHYuNTM2YzAgMi45NDYuODAzIDUuNjI0IDIuMTQzIDcuNzY3TDM3Ni4zOTMgMjU2bC04My4wMzUtODcuNTg5TDQxMC40MTEgNDQuMzkzem0tOS4xMDctMi4xNDNMMjg3LjczMiAxNjIuNTE4bC01Ny4wNTQtNjAuMjY4IDE2Ni4zMzktNjBoNC4yODd6bS0xMjMuNDgzIDBjMi42NzggMi42NzggNi4xNiA0LjI4NSAxMC4xNzkgNC4yODVzNy41LTEuNjA3IDEwLjE3OS00LjI4NWg3NUwyMjQuNzg2IDk1LjgyMSAxNzMuODkzIDQyLjI1aDEwMy45Mjh6bS0xMTYuMjQ5IDUuNjI1bDEuMDcxLTIuMTQyYTMzLjgzNCAzMy44MzQgMCAwIDAgMi42NzktLjgwNGw1MS4xNjEgNTMuODQtNTQuOTExIDE5LjgyMVY0Ny44NzV6bTAgNzkuMjg2bDYwLjgwMy0yMS45NjQgNTkuNzMyIDYzLjIxNC03OS41NTMgODQuMTA3LTQwLjk4Mi00Mi4wNTN2LTgzLjMwNHptMCA5Mi42NzhMMTk4IDI1Ny42MDdsLTM2LjQyOCAzOC4zMDR2LTc2LjA3MnptMCA4Ny44NThsNDIuMDUzLTQ0LjQ2NCA4Mi43NjggODUuOTgyLTE3LjE0MyAxNy42NzhIMTYxLjU3MnYtNTkuMTk2em02Ljk2NCAxNjIuMDUzYy0xLjYwNy0xLjYwNy0zLjQ4Mi0yLjY3OC01Ljg5My0zLjQ4MmwtMS4wNzEtMS42MDd2LTg5LjczMmg5OS45MWwtOTEuNjA3IDk0LjgyMWgtMS4zMzl6bTEyOS45MTEgMGMtMi42NzktMi40MS02LjQyOC00LjI4NS0xMC40NDctNC4yODVzLTcuNzY3IDEuODc1LTEwLjQ0NyA0LjI4NWgtOTYuNDI5bDkxLjYwNy05NC44MjFoMzguMzA0bDkxLjYwNyA5NC44MjFIMjk4LjQ0N3ptMTIwLTExLjc4NmwtNC4yODYgNy41Yy0xLjMzOS4yNjgtMi40MS44MDMtMy40ODIgMS4zMzlsLTg5LjE5Ni05MS44NzVoMTE0LjM3NmwtMTcuNDEyIDgzLjAzNnptMTIuODU2LTIyLjIzMmwxMi44NTgtNjAuODAzaDIxLjk2NGwtMzQuODIyIDYwLjgwM3ptMzQuODIyLTY4LjgzOWgtMjAuMzU3bDQuNTUzLTIxLjE2IDE3LjE0MyAxOC4yMTRjLS41MzUuODAzLTEuMDcxIDEuODc0LTEuMzM5IDIuOTQ2em02Ni4xNjEtMTA3LjQxMWwtNTUuNDQ3IDk2LjY5N2MtMS4zMzkuNTM1LTIuNjc5IDEuMDcxLTQuMDE4IDEuODc0bC0yMC42MjUtMjEuOTY0IDM0LjU1NC0xNjMuOTI4IDQ1LjgwMyA3OS4yODZjLS4yNjcgMS4zMzktLjgwMyAyLjY3OC0uODAzIDQuMjg1IDAgMS4zMzkuMjY4IDIuNDExLjUzNiAzLjc1elwiXSxjb250YW86WzUxMiw1MTIsW10sXCJmMjZkXCIsXCJNNDUuNCAzMDVjMTQuNCA2Ny4xIDI2LjQgMTI5IDY4LjIgMTc1SDM0Yy0xOC43IDAtMzQtMTUuMi0zNC0zNFY2NmMwLTE4LjcgMTUuMi0zNCAzNC0zNGg1Ny43Qzc3LjkgNDQuNiA2NS42IDU5LjIgNTQuOCA3NS42Yy00NS40IDcwLTI3IDE0Ni44LTkuNCAyMjkuNHpNNDc4IDMyaC05MC4yYzIxLjQgMjEuNCAzOS4yIDQ5LjUgNTIuNyA4NC4xbC0xMzcuMSAyOS4zYy0xNC45LTI5LTM3LjgtNTMuMy04Mi42LTQzLjktMjQuNiA1LjMtNDEgMTkuMy00OC4zIDM0LjYtOC44IDE4LjctMTMuMiAzOS44IDguMiAxNDAuMyAyMS4xIDEwMC4yIDMzLjcgMTE3LjcgNDkuNSAxMzEuMiAxMi45IDExLjEgMzMuNCAxNyA1OC4zIDExLjcgNDQuNS05LjQgNTUuNy00MC43IDU3LjQtNzMuMmwxMzcuNC0yOS42YzMuMiA3MS41LTE4LjcgMTI1LjItNTcuNCAxNjMuNkg0NzhjMTguNyAwIDM0LTE1LjIgMzQtMzRWNjZjMC0xOC44LTE1LjItMzQtMzQtMzR6XCJdLGNwYW5lbDpbNjQwLDUxMixbXSxcImYzODhcIixcIk01Mi45IDIxMy43aDQwbC02LjIgMjMuNmMtMS45IDYuNS03LjQgMTAuOS0xNC4zIDEwLjlINTMuOGMtMjQuOSAwLTI0LjcgMzcuNCAwIDM3LjRoMTEuM2M0LjIgMCA3LjYgMy45IDYuNCA4LjNMNjQuNCAzMjBINTJjLTMzLjUgMC01OS0zMS40LTUwLjMtNjUuMiA3LjMtMjcgMjguMy00MS4xIDUxLjItNDEuMU03My4xIDMyMEwxMDggMTg5LjljMS44LTYuNCA3LjItMTAuOSAxNC4zLTEwLjloMzdjMjQuMSAwIDQ1LjQgMTYuNCA1MSA0MS4yIDYuNiAyOS4xLTE0LjUgNjUuMy01MS43IDY1LjNoLTMybDYuNC0yMy44YzEuOC02LjIgNy4zLTEwLjggMTQuMy0xMC44aDEwLjNjMTIuNCAwIDIwLjgtMTEuNyAxOC4zLTIyLjYtMi4xLTkuMi05LjktMTQuOC0xOC4zLTE0LjhoLTE5LjhMMTEyIDMwOS4yYy0xLjkgNi4yLTcuNCAxMC43LTE0LjIgMTAuN2wtMjQuNy4xbTIyMC42LTY5LjRjLjMtMSAxLjktNS4zLTIuMS01LjNoLTU3LjVjLTkuNyAwLTE2LjYtOC45LTE0LjItMTguNWwzLjUtMTMuNGg3Ny45YzE4LjggMCAzMy4zIDE3LjYgMjguNSAzNi44bC0xNCA1MS44Yy0yLjggMTAuNi0xMi4yIDE3LjgtMjMuNCAxNy44bC01Ny41LS4yYy00Mi45IDAtMzguNS02My44LjctNjMuOEgyODRsLTMuNSAxMy4yYy0xLjkgNi4yLTcuNCAxMC44LTE0LjIgMTAuOGgtMjEuNmMtNS4zIDAtNS4zIDcuOSAwIDcuOWgzNC45YzQuNiAwIDUuMS0zLjkgNS41LTUuM2w4LjYtMzEuOG0xMDMuMS0zNi45YzM0LjQgMCA1OS4zIDMyLjMgNTAuMyA2NS40bC04LjggMzMuMWMtMS4yIDQuOS01LjcgNy44LTEwLjMgNy44aC0xOS4xYy00LjUgMC03LjYtNC02LjQtOC4zbDEwLjYtNDBjMy4zLTExLjYtNS42LTIzLjQtMTguMS0yMy40aC0xOS44bC0xNy4yIDY0Yy0xLjIgNC44LTUuNiA3LjgtMTAuNCA3LjhoLTE4LjljLTQuMiAwLTcuNi0zLjktNi40LTguM2wyNi4yLTk4aDQ4LjNNNDk4IDI1MS42bC04IDMwYy0uOSAzLjMgMS41IDYuNyA1LjEgNi43aDczLjNsLTUuNyAyMWMtMS45IDYuMi03LjQgMTAuNy0xNC4yIDEwLjdoLTY2LjdjLTIwIDAtMzMuMy0xOS0yOC4zLTM2LjdsMTAuOC00MGM0LjgtMTcuNiAyMC43LTI5LjYgMzguNi0yOS42aDQ3LjNjMTkgMCAzMy4yIDE3LjcgMjguMyAzNi44bC0zLjIgMTJjLTIuOSAxMS0xMi43IDE3LjYtMjMuMiAxNy42aC01My40bDMuNS0xM2MxLjYtNi4yIDcuMi0xMC44IDE0LjItMTAuOEg1MzhjMiAwIDMuMy0xIDMuOS0zbC43LTIuNmMuNy0yLjctMS4zLTUuMS0zLjktNS4xaC0zMi45Yy00LjEgMC02LjkgMi4xLTcuOCA2em03MC4yIDY4LjRsMzUuNi0xMzMuMWMxLjItNC43IDUuNS03LjkgMTAuNC03LjloMTguOWM0LjUgMCA3LjcgNCA2LjUgOC4zbC0yNi41IDk4LjJjLTUuMSAyMC43LTI0LjIgMzQuNS00NC45IDM0LjVcIl0sXCJjcmVhdGl2ZS1jb21tb25zXCI6WzQ5Niw1MTIsW10sXCJmMjVlXCIsXCJNMjQ1LjgzIDIxNC44N2wtMzMuMjIgMTcuMjhjLTkuNDMtMTkuNTgtMjUuMjQtMTkuOTMtMjcuNDYtMTkuOTMtMjIuMTMgMC0zMy4yMiAxNC42MS0zMy4yMiA0My44NCAwIDIzLjU3IDkuMjEgNDMuODQgMzMuMjIgNDMuODQgMTQuNDcgMCAyNC42NS03LjA5IDMwLjU3LTIxLjI2bDMwLjU1IDE1LjVjLTYuMTcgMTEuNTEtMjUuNjkgMzguOTgtNjUuMSAzOC45OC0yMi42IDAtNzMuOTYtMTAuMzItNzMuOTYtNzcuMDUgMC01OC42OSA0My03Ny4wNiA3Mi42My03Ny4wNiAzMC43Mi0uMDEgNTIuNyAxMS45NSA2NS45OSAzNS44NnptMTQzLjA1IDBsLTMyLjc4IDE3LjI4Yy05LjUtMTkuNzctMjUuNzItMTkuOTMtMjcuOS0xOS45My0yMi4xNCAwLTMzLjIyIDE0LjYxLTMzLjIyIDQzLjg0IDAgMjMuNTUgOS4yMyA0My44NCAzMy4yMiA0My44NCAxNC40NSAwIDI0LjY1LTcuMDkgMzAuNTQtMjEuMjZsMzEgMTUuNWMtMi4xIDMuNzUtMjEuMzkgMzguOTgtNjUuMDkgMzguOTgtMjIuNjkgMC03My45Ni05Ljg3LTczLjk2LTc3LjA1IDAtNTguNjcgNDIuOTctNzcuMDYgNzIuNjMtNzcuMDYgMzAuNzEtLjAxIDUyLjU4IDExLjk1IDY1LjU2IDM1Ljg2ek0yNDcuNTYgOC4wNUMxMDQuNzQgOC4wNSAwIDEyMy4xMSAwIDI1Ni4wNWMwIDEzOC40OSAxMTMuNiAyNDggMjQ3LjU2IDI0OCAxMjkuOTMgMCAyNDguNDQtMTAwLjg3IDI0OC40NC0yNDggMC0xMzcuODctMTA2LjYyLTI0OC0yNDguNDQtMjQ4em0uODcgNDUwLjgxYy0xMTIuNTQgMC0yMDMuNy05My4wNC0yMDMuNy0yMDIuODEgMC0xMDUuNDIgODUuNDMtMjAzLjI3IDIwMy43Mi0yMDMuMjcgMTEyLjUzIDAgMjAyLjgyIDg5LjQ2IDIwMi44MiAyMDMuMjYtLjAxIDEyMS42OS05OS42OCAyMDIuODItMjAyLjg0IDIwMi44MnpcIl0sXCJjcmVhdGl2ZS1jb21tb25zLWJ5XCI6WzQ5Niw1MTIsW10sXCJmNGU3XCIsXCJNMzE0LjkgMTk0LjR2MTAxLjRoLTI4LjN2MTIwLjVoLTc3LjFWMjk1LjloLTI4LjNWMTk0LjRjMC00LjQgMS42LTguMiA0LjYtMTEuMyAzLjEtMy4xIDYuOS00LjcgMTEuMy00LjdIMjk5YzQuMSAwIDcuOCAxLjYgMTEuMSA0LjcgMy4xIDMuMiA0LjggNi45IDQuOCAxMS4zem0tMTAxLjUtNjMuN2MwLTIzLjMgMTEuNS0zNSAzNC41LTM1czM0LjUgMTEuNyAzNC41IDM1YzAgMjMtMTEuNSAzNC41LTM0LjUgMzQuNXMtMzQuNS0xMS41LTM0LjUtMzQuNXpNMjQ3LjYgOEMzODkuNCA4IDQ5NiAxMTguMSA0OTYgMjU2YzAgMTQ3LjEtMTE4LjUgMjQ4LTI0OC40IDI0OEMxMTMuNiA1MDQgMCAzOTQuNSAwIDI1NiAwIDEyMy4xIDEwNC43IDggMjQ3LjYgOHptLjggNDQuN0MxMzAuMiA1Mi43IDQ0LjcgMTUwLjYgNDQuNyAyNTZjMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6XCJdLFwiY3JlYXRpdmUtY29tbW9ucy1uY1wiOls0OTYsNTEyLFtdLFwiZjRlOFwiLFwiTTI0Ny42IDhDMzg3LjQgOCA0OTYgMTE1LjkgNDk2IDI1NmMwIDE0Ny4yLTExOC41IDI0OC0yNDguNCAyNDhDMTEzLjEgNTA0IDAgMzkzLjIgMCAyNTYgMCAxMjMuMSAxMDQuNyA4IDI0Ny42IDh6TTU1LjggMTg5LjFjLTcuNCAyMC40LTExLjEgNDIuNy0xMS4xIDY2LjkgMCAxMTAuOSA5Mi4xIDIwMi40IDIwMy43IDIwMi40IDEyMi40IDAgMTc3LjItMTAxLjggMTc4LjUtMTA0LjFsLTkzLjQtNDEuNmMtNy43IDM3LjEtNDEuMiA1My02OC4yIDU1LjR2MzguMWgtMjguOFYzNjhjLTI3LjUtLjMtNTIuNi0xMC4yLTc1LjMtMjkuN2wzNC4xLTM0LjVjMzEuNyAyOS40IDg2LjQgMzEuOCA4Ni40LTIuMiAwLTYuMi0yLjItMTEuMi02LjYtMTUuMS0xNC4yLTYtMS44LS4xLTIxOS4zLTk3LjR6TTI0OC40IDUyLjNjLTM4LjQgMC0xMTIuNCA4LjctMTcwLjUgOTNsOTQuOCA0Mi41YzEwLTMxLjMgNDAuNC00Mi45IDYzLjgtNDQuM3YtMzguMWgyOC44djM4LjFjMjIuNyAxLjIgNDMuNCA4LjkgNjIgMjNMMjk1IDE5OS43Yy00Mi43LTI5LjktODMuNS04LTcwIDExLjEgNTMuNCAyNC4xIDQzLjggMTkuOCA5MyA0MS42bDEyNy4xIDU2LjdjNC4xLTE3LjQgNi4yLTM1LjEgNi4yLTUzLjEgMC01Ny0xOS44LTEwNS01OS4zLTE0My45LTM5LjMtMzkuOS04Ny4yLTU5LjgtMTQzLjYtNTkuOHpcIl0sXCJjcmVhdGl2ZS1jb21tb25zLW5jLWV1XCI6WzQ5Niw1MTIsW10sXCJmNGU5XCIsXCJNMjQ3LjcgOEMxMDMuNiA4IDAgMTI0LjggMCAyNTZjMCAxMzYuMyAxMTEuNyAyNDggMjQ3LjcgMjQ4QzM3Ny45IDUwNCA0OTYgNDAzLjEgNDk2IDI1NiA0OTYgMTE3IDM4OC40IDggMjQ3LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMy4yIDMuNy00NS4yIDEwLjktNjZsNjUuNyAyOS4xaC00Ljd2MjkuNWgyMy4zYzAgNi4yLS40IDMuMi0uNCAxOS41aC0yMi44djI5LjVoMjdjMTEuNCA2NyA2Ny4yIDEwMS4zIDEyNC42IDEwMS4zIDI2LjYgMCA1MC42LTcuOSA2NC44LTE1LjhsLTEwLTQ2LjFjLTguNyA0LjYtMjguMiAxMC44LTQ3LjMgMTAuOC0yOC4yIDAtNTguMS0xMC45LTY3LjMtNTAuMmg5MC4zbDEyOC4zIDU2LjhjLTEuNSAyLjEtNTYuMiAxMDQuMy0xNzguOCAxMDQuM3ptLTE2LjctMTkwLjZsLS41LS40LjkuNGgtLjR6bTc3LjItMTkuNWgzLjd2LTI5LjVoLTcwLjNsLTI4LjYtMTIuNmMyLjUtNS41IDUuNC0xMC41IDguOC0xNC4zIDEyLjktMTUuOCAzMS4xLTIyLjQgNTEuMS0yMi40IDE4LjMgMCAzNS4zIDUuNCA0Ni4xIDEwbDExLjYtNDcuM2MtMTUtNi42LTM3LTEyLjQtNjIuMy0xMi40LTM5IDAtNzIuMiAxNS44LTk1LjkgNDIuMy01LjMgNi4xLTkuOCAxMi45LTEzLjkgMjAuMWwtODEuNi0zNi4xYzY0LjYtOTYuOCAxNTcuNy05My42IDE3MC43LTkzLjYgMTEzIDAgMjAzIDkwLjIgMjAzIDIwMy40IDAgMTguNy0yLjEgMzYuMy02LjMgNTIuOWwtMTM2LjEtNjAuNXpcIl0sXCJjcmVhdGl2ZS1jb21tb25zLW5jLWpwXCI6WzQ5Niw1MTIsW10sXCJmNGVhXCIsXCJNMjQ3LjcgOEMxMDMuNiA4IDAgMTI0LjggMCAyNTZjMCAxMzYuNCAxMTEuOCAyNDggMjQ3LjcgMjQ4QzM3Ny45IDUwNCA0OTYgNDAzLjIgNDk2IDI1NiA0OTYgMTE3LjIgMzg4LjUgOCAyNDcuNyA4em0uNiA0NTAuN2MtMTEyIDAtMjAzLjYtOTIuNS0yMDMuNi0yMDIuNyAwLTIxLjEgMy00MS4yIDktNjAuM2wxMjcgNTYuNWgtMjcuOXYzOC42aDU4LjFsNS43IDExLjh2MTguN2gtNjMuOFYzNjBoNjMuOHY1Nmg2MS43di01Nmg2NC4ydi0zNS43bDgxIDM2LjFjLTEuNSAyLjItNTcuMSA5OC4zLTE3NS4yIDk4LjN6bTg3LjYtMTM3LjNoLTU3LjZ2LTE4LjdsMi45LTUuNiA1NC43IDI0LjN6bTYuNS01MS40di0xNy44aC0zOC42bDYzLTExNkgzMDFsLTQzLjQgOTYtMjMtMTAuMi0zOS42LTg1LjdoLTY1LjhsMjcuMyA1MS04MS45LTM2LjVjMjcuOC00NC4xIDgyLjYtOTguMSAxNzMuNy05OC4xIDExMi44IDAgMjAzIDkwIDIwMyAyMDMuNCAwIDIxLTIuNyA0MC42LTcuOSA1OWwtMTAxLTQ1LjF6XCJdLFwiY3JlYXRpdmUtY29tbW9ucy1uZFwiOls0OTYsNTEyLFtdLFwiZjRlYlwiLFwiTTI0Ny42IDhDMzg5LjQgOCA0OTYgMTE4LjEgNDk2IDI1NmMwIDE0Ny4xLTExOC41IDI0OC0yNDguNCAyNDhDMTEzLjYgNTA0IDAgMzk0LjUgMCAyNTYgMCAxMjMuMSAxMDQuNyA4IDI0Ny42IDh6bS44IDQ0LjdDMTMwLjIgNTIuNyA0NC43IDE1MC42IDQ0LjcgMjU2YzAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjguMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem05NCAxNDQuM3Y0Mi41SDE2Mi4xVjE5N2gxODAuM3ptMCA3OS44djQyLjVIMTYyLjF2LTQyLjVoMTgwLjN6XCJdLFwiY3JlYXRpdmUtY29tbW9ucy1wZFwiOls0OTYsNTEyLFtdLFwiZjRlY1wiLFwiTTI0OCA4QzExMSA4IDAgMTE5LjEgMCAyNTZjMCAxMzcgMTExIDI0OCAyNDggMjQ4czI0OC0xMTEgMjQ4LTI0OEM0OTYgMTE5LjEgMzg1IDggMjQ4IDh6bTAgNDQ5LjVjLTEzOS4yIDAtMjM1LjgtMTM4LTE5MC4yLTI2Ny45bDc4LjggMzUuMWMtMi4xIDEwLjUtMy4zIDIxLjUtMy4zIDMyLjkgMCA5OSA3My45IDEyNi45IDEyMC40IDEyNi45IDIyLjkgMCA1My41LTYuNyA3OS40LTI5LjVMMjk3IDMxMS4xYy01LjUgNi4zLTE3LjYgMTYuNy0zNi4zIDE2LjctMzcuOCAwLTUzLjctMzkuOS01My45LTcxLjkgMjMwLjQgMTAyLjYgMjE2LjUgOTYuNSAyMTcuOSA5Ni44LTM0LjMgNjIuNC0xMDAuNiAxMDQuOC0xNzYuNyAxMDQuOHptMTk0LjItMTUwbC0yMjQtMTAwYzE4LjgtMzQgNTQuOS0zMC43IDc0LjctMTFsNDAuNC00MS42Yy0yNy4xLTIzLjMtNTgtMjcuNS03OC4xLTI3LjUtNDcuNCAwLTgwLjkgMjAuNS0xMDAuNyA1MS42bC03NC45LTMzLjRjMzYuMS01NC45IDk4LjEtOTEuMiAxNjguNS05MS4yIDExMS4xIDAgMjAxLjUgOTAuNCAyMDEuNSAyMDEuNSAwIDE4LTIuNCAzNS40LTYuOCA1Mi0uMy0uMS0uNC0uMi0uNi0uNHpcIl0sXCJjcmVhdGl2ZS1jb21tb25zLXBkLWFsdFwiOls0OTYsNTEyLFtdLFwiZjRlZFwiLFwiTTI0Ny42IDhDMzg5LjQgOCA0OTYgMTE4LjEgNDk2IDI1NmMwIDE0Ny4xLTExOC41IDI0OC0yNDguNCAyNDhDMTEzLjYgNTA0IDAgMzk0LjUgMCAyNTYgMCAxMjMuMSAxMDQuNyA4IDI0Ny42IDh6bS44IDQ0LjdDMTMwLjIgNTIuNyA0NC43IDE1MC42IDQ0LjcgMjU2YzAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjguMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zek0xMzUuNSAzMjMuM1YxODZoNjguMmMzMy43IDAgNTAuNSAxNS41IDUwLjUgNDYuNSAwIDktMyA0Ni41LTU3LjEgNDYuNWgtMjd2NDQuM2gtMzQuNnptMzQuMS0xMTEuNnY0MS42aDI5LjJjMjcuOSAwIDMwLTQxLjYtLjktNDEuNmgtMjguM3ptOTMuOSAxMTEuNlYxODZoNTMuMmMyMS40IDAgNzAgNS4yIDcwIDY4LjYgMCA2My41LTQ4LjYgNjguNi03MCA2OC42aC01My4yem0zNC4xLTEwOC41djc5LjdoMTkuOWMyNCAwIDM0LjUtMTUuMyAzNC41LTM5LjkgMC00Mi0zMS4yLTM5LjktMzUtMzkuOWwtMTkuNC4xelwiXSxcImNyZWF0aXZlLWNvbW1vbnMtcmVtaXhcIjpbNDk2LDUxMixbXSxcImY0ZWVcIixcIk0yNDcuNiA4QzM4OS40IDggNDk2IDExOC4xIDQ5NiAyNTZjMCAxNDcuMS0xMTguNSAyNDgtMjQ4LjQgMjQ4QzExMy42IDUwNCAwIDM5NC41IDAgMjU2IDAgMTIzLjEgMTA0LjcgOCAyNDcuNiA4em0uOCA0NC43QzEzMC4yIDUyLjcgNDQuNyAxNTAuNiA0NC43IDI1NmMwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44LjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMTYxLjcgMjA3LjdsNC45IDIuMnY3MGMtNy4yIDMuNi02My40IDI3LjUtNjcuMyAyOC44LTYuNS0xLjgtMTEzLjctNDYuOC0xMzcuMy01Ni4ybC02NC4yIDI2LjYtNjMuMy0yNy41di02My44bDU5LjMtMjQuOGMtLjctLjctLjQgNS0uNC03MC40bDY3LjMtMjkuN0wzNjEgMTc4LjV2NjEuNmw0OS4xIDIwLjN6bS03MC40IDgxLjV2LTQzLjhoLS40di0xLjhsLTExMy44LTQ2LjVWMjk1bDExMy44IDQ2Ljl2LS40bC40LjR6bTcuNS01Ny42bDM5LjktMTYuNC0zNi44LTE1LjUtMzkgMTYuNCAzNS45IDE1LjV6bTUyLjMgMzguMXYtNDNMMzU1LjIgMjk4djQzLjRsNDQuMy0xOXpcIl0sXCJjcmVhdGl2ZS1jb21tb25zLXNhXCI6WzQ5Niw1MTIsW10sXCJmNGVmXCIsXCJNMjQ3LjYgOEMzODkuNCA4IDQ5NiAxMTguMSA0OTYgMjU2YzAgMTQ3LjEtMTE4LjUgMjQ4LTI0OC40IDI0OEMxMTMuNiA1MDQgMCAzOTQuNSAwIDI1NiAwIDEyMy4xIDEwNC43IDggMjQ3LjYgOHptLjggNDQuN0MxMzAuMiA1Mi43IDQ0LjcgMTUwLjYgNDQuNyAyNTZjMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTEzNy43IDIyMWMxMy04My45IDgwLjUtOTUuNyAxMDguOS05NS43IDk5LjggMCAxMjcuNSA4Mi41IDEyNy41IDEzNC4yIDAgNjMuNi00MSAxMzIuOS0xMjguOSAxMzIuOS0zOC45IDAtOTkuMS0yMC0xMDkuNC05N2g2Mi41YzEuNSAzMC4xIDE5LjYgNDUuMiA1NC41IDQ1LjIgMjMuMyAwIDU4LTE4LjIgNTgtODIuOCAwLTgyLjUtNDkuMS04MC42LTU2LjctODAuNi0zMy4xIDAtNTEuNyAxNC42LTU1LjggNDMuOGgxOC4ybC00OS4yIDQ5LjItNDktNDkuMmgxOS40elwiXSxcImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmdcIjpbNDk2LDUxMixbXSxcImY0ZjBcIixcIk0yNDcuNiA4QzM4OS40IDggNDk2IDExOC4xIDQ5NiAyNTZjMCAxNDcuMS0xMTguNSAyNDgtMjQ4LjQgMjQ4QzExMy42IDUwNCAwIDM5NC41IDAgMjU2IDAgMTIzLjEgMTA0LjcgOCAyNDcuNiA4em0uOCA0NC43QzEzMC4yIDUyLjcgNDQuNyAxNTAuNiA0NC43IDI1NmMwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44LjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMy42IDUzLjJjMi44LS4zIDExLjUgMSAxMS41IDExLjVsNi42IDEwNy4yIDQuOS01OS4zYzAtNiA0LjctMTAuNiAxMC42LTEwLjYgNS45IDAgMTAuNiA0LjcgMTAuNiAxMC42IDAgMi41LS41LTUuNyA1LjcgODEuNWw1LjgtNjQuMmMuMy0yLjkgMi45LTkuMyAxMC4yLTkuMyAzLjggMCA5LjkgMi4zIDEwLjYgOC45bDExLjUgOTYuNSA1LjMtMTIuOGMxLjgtNC40IDUuMi02LjYgMTAuMi02LjZoNTh2MjEuM2gtNTAuOWwtMTguMiA0NC4zYy0zLjkgOS45LTE5LjUgOS4xLTIwLjgtMy4xbC00LTMxLjktNy41IDkyLjZjLS4zIDMtMyA5LjMtMTAuMiA5LjMtMyAwLTkuOC0yLjEtMTAuNi05LjMgMC0xLjkuNiA1LjgtNi4yLTc3LjlsLTUuMyA3Mi4yYy0xLjEgNC44LTQuOCA5LjMtMTAuNiA5LjMtMi45IDAtOS44LTItMTAuNi05LjMgMC0xLjkuNSA2LjctNS44LTg3LjdsLTUuOCA5NC44YzAgNi4zLTMuNiAxMi40LTEwLjYgMTIuNC01LjIgMC0xMC42LTQuMS0xMC42LTEybC01LjgtODcuN2MtNS44IDkyLjUtNS4zIDg0LTUuMyA4NS45LTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLS43LS40LTEuMS0uNC0yLjZsLTYuMi04OC42TDE4MiAzNDhjLS43IDYuNS02LjcgOS4zLTEwLjYgOS4zLTUuOCAwLTkuNi00LjEtMTAuNi04LjlMMTQ5LjcgMjcyYy0yIDQtMy41IDguNC0xMS4xIDguNEg4Ny4ydi0yMS4zSDEzMmwxMy43LTI3LjljNC40LTkuOSAxOC4yLTcuMiAxOS45IDIuN2wzLjEgMjAuNCA4LjQtOTcuOWMwLTYgNC44LTEwLjYgMTAuNi0xMC42LjUgMCAxMC42LS4yIDEwLjYgMTIuNGw0LjkgNjkuMSA2LjYtOTIuNmMwLTEwLjEgOS41LTEwLjYgMTAuMi0xMC42LjYgMCAxMC42LjcgMTAuNiAxMC42bDUuMyA4MC42IDYuMi05Ny45Yy4xLTEuMS0uNi0xMC4zIDkuOS0xMS41elwiXSxcImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1c1wiOls0OTYsNTEyLFtdLFwiZjRmMVwiLFwiTTI0Ny42IDhDMzg5LjQgOCA0OTYgMTE4LjEgNDk2IDI1NmMwIDE0Ny4xLTExOC41IDI0OC0yNDguNCAyNDhDMTEzLjYgNTA0IDAgMzk0LjUgMCAyNTYgMCAxMjMuMSAxMDQuNyA4IDI0Ny42IDh6bS44IDQ0LjdDMTMwLjIgNTIuNyA0NC43IDE1MC42IDQ0LjcgMjU2YzAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjguMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem0xMDcgMjA1LjZjLTQuNyAwLTkgMi44LTEwLjcgNy4ybC00IDkuNS0xMS05Mi44Yy0xLjctMTMuOS0yMi0xMy40LTIzLjEuNGwtNC4zIDUxLjQtNS4yLTY4LjhjLTEuMS0xNC4zLTIyLjEtMTQuMi0yMy4yIDBsLTMuNSA0NC45LTUuOS05NC4zYy0uOS0xNC41LTIyLjMtMTQuNC0yMy4yIDBsLTUuMSA4My43LTQuMy02Ni4zYy0uOS0xNC40LTIyLjItMTQuNC0yMy4yIDBsLTUuMyA4MC4yLTQuMS01N2MtMS4xLTE0LjMtMjItMTQuMy0yMy4yLS4ybC03LjcgODkuOC0xLjgtMTIuMmMtMS43LTExLjQtMTcuMS0xMy42LTIyLTMuM2wtMTMuMiAyNy43SDg3LjV2MjMuMmg1MS4zYzQuNCAwIDguNC0yLjUgMTAuNC02LjRsMTAuNyA3My4xYzIgMTMuNSAyMS45IDEzIDIzLjEtLjdsMy44LTQzLjYgNS43IDc4LjNjMS4xIDE0LjQgMjIuMyAxNC4yIDIzLjItLjFsNC42LTcwLjQgNC44IDczLjNjLjkgMTQuNCAyMi4zIDE0LjQgMjMuMi0uMWw0LjktODAuNSA0LjUgNzEuOGMuOSAxNC4zIDIyLjEgMTQuNSAyMy4yLjJsNC42LTU4LjYgNC45IDY0LjRjMS4xIDE0LjMgMjIgMTQuMiAyMy4xLjFsNi44LTgzIDIuNyAyMi4zYzEuNCAxMS44IDE3LjcgMTQuMSAyMi4zIDMuMWwxOC00My40aDUwLjVWMjU4bC01OC40LjN6bS03OCA1LjJoLTIxLjl2MjEuOWMwIDQuMS0zLjMgNy41LTcuNSA3LjUtNC4xIDAtNy41LTMuMy03LjUtNy41di0yMS45aC0yMS45Yy00LjEgMC03LjUtMy4zLTcuNS03LjUgMC00LjEgMy40LTcuNSA3LjUtNy41aDIxLjl2LTIxLjljMC00LjEgMy40LTcuNSA3LjUtNy41czcuNSAzLjMgNy41IDcuNXYyMS45aDIxLjljNC4xIDAgNy41IDMuMyA3LjUgNy41IDAgNC4xLTMuNCA3LjUtNy41IDcuNXpcIl0sXCJjcmVhdGl2ZS1jb21tb25zLXNoYXJlXCI6WzQ5Niw1MTIsW10sXCJmNGYyXCIsXCJNMjQ3LjYgOEMzODkuNCA4IDQ5NiAxMTguMSA0OTYgMjU2YzAgMTQ3LjEtMTE4LjUgMjQ4LTI0OC40IDI0OEMxMTMuNiA1MDQgMCAzOTQuNSAwIDI1NiAwIDEyMy4xIDEwNC43IDggMjQ3LjYgOHptLjggNDQuN0MxMzAuMiA1Mi43IDQ0LjcgMTUwLjYgNDQuNyAyNTZjMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwMSAxMzIuNGM3LjggMCAxMy43IDYuMSAxMy43IDEzLjd2MTgyLjVjMCA3LjctNi4xIDEzLjctMTMuNyAxMy43SDIxNC4zYy03LjcgMC0xMy43LTYtMTMuNy0xMy43di01NGgtNTRjLTcuOCAwLTEzLjctNi0xMy43LTEzLjdWMTMxLjFjMC04LjIgNi42LTEyLjcgMTIuNC0xMy43aDEzNi40YzcuNyAwIDEzLjcgNiAxMy43IDEzLjd2NTRoNTR6TTE1OS45IDMwMC4zaDQwLjdWMTk4LjljMC03LjQgNS44LTEyLjYgMTItMTMuN2g1NS44di00MC4zSDE1OS45djE1NS40em0xNzYuMi04OC4xSDIyNy42djE1NS40aDEwOC41VjIxMi4yelwiXSxjc3MzOls1MTIsNTEyLFtdLFwiZjEzY1wiLFwiTTQ4MCAzMmwtNjQgMzY4LTIyMy4zIDgwTDAgNDAwbDE5LjYtOTQuOGg4MmwtOCA0MC42TDIxMCAzOTAuMmwxMzQuMS00NC40IDE4LjgtOTcuMUgyOS41bDE2LTgyaDMzMy43bDEwLjUtNTIuN0g1Ni4zbDE2LjMtODJINDgwelwiXSxcImNzczMtYWx0XCI6WzM4NCw1MTIsW10sXCJmMzhiXCIsXCJNMCAzMmwzNC45IDM5NS44TDE5MiA0ODBsMTU3LjEtNTIuMkwzODQgMzJIMHptMzEzLjEgODBsLTQuOCA0Ny4zTDE5MyAyMDguNmwtLjMuMWgxMTEuNWwtMTIuOCAxNDYuNi05OC4yIDI4LjctOTguOC0yOS4yLTYuNC03My45aDQ4LjlsMy4yIDM4LjMgNTIuNiAxMy4zIDU0LjctMTUuNCAzLjctNjEuNi0xNjYuMy0uNXYtLjFsLS4yLjEtMy42LTQ2LjNMMTkzLjEgMTYybDYuNS0yLjdINzYuN0w3MC45IDExMmgyNDIuMnpcIl0sY3V0dGxlZmlzaDpbNDQwLDUxMixbXSxcImYzOGNcIixcIk0zNDQgMzA1LjVjLTE3LjUgMzEuNi01Ny40IDU0LjUtOTYgNTQuNS01Ni42IDAtMTA0LTQ3LjQtMTA0LTEwNHM0Ny40LTEwNCAxMDQtMTA0YzM4LjYgMCA3OC41IDIyLjkgOTYgNTQuNSAxMy43LTUwLjkgNDEuNy05My4zIDg3LTExNy44QzM4NS43IDM5LjEgMzIwLjUgOCAyNDggOCAxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDhjNzIuNSAwIDEzNy43LTMxLjEgMTgzLTgwLjctNDUuMy0yNC41LTczLjMtNjYuOS04Ny0xMTcuOHpcIl0sXCJkLWFuZC1kXCI6WzU3Niw1MTIsW10sXCJmMzhkXCIsXCJNODIuNSA5OC45Yy0uNi0xNy4yIDItMzMuOCAxMi43LTQ4LjIuMyA3LjQgMS4yIDE0LjUgNC4yIDIxLjYgNS45LTI3LjUgMTkuNy00OS4zIDQyLjMtNjUuNS0xLjkgNS45LTMuNSAxMS44LTMgMTcuNyA4LjctNy40IDE4LjgtMTcuOCA0NC40LTIyLjcgMTQuNy0yLjggMjkuNy0yIDQyLjEgMSAzOC41IDkuMyA2MSAzNC4zIDY5LjcgNzIuMyA1LjMgMjMuMS43IDQ1LTguMyA2Ni40LTUuMiAxMi40LTEyIDI0LjQtMjAuNyAzNS4xLTItMS45LTMuOS0zLjgtNS44LTUuNi00Mi44LTQwLjgtMjYuOC0yNS4yLTM3LjQtMzcuNC0xLjEtMS4yLTEtMi4yLS4xLTMuNiA4LjMtMTMuNSAxMS44LTI4LjIgMTAtNDQtMS4xLTkuOC00LjMtMTguOS0xMS4zLTI2LjItMTQuNS0xNS4zLTM5LjItMTUtNTMuNS42LTExLjQgMTIuNS0xNC4xIDI3LjQtMTAuOSA0My42LjIgMS4zLjQgMi43IDAgMy45LTMuNCAxMy43LTQuNiAyNy42LTIuNSA0MS42LjEuNS4xIDEuMS4xIDEuNiAwIC4zLS4xLjUtLjIgMS4xLTIxLjgtMTEtMzYtMjguMy00My4yLTUyLjItOC4zIDE3LjgtMTEuMSAzNS41LTYuNiA1NC4xLTE1LjYtMTUuMi0yMS4zLTM0LjMtMjItNTUuMnptNDY5LjYgMTIzLjJjLTExLjYtMTEuNi0yNS0yMC40LTQwLjEtMjYuNi0xMi44LTUuMi0yNi03LjktMzkuOS03LjEtMTAgLjYtMTkuNiAzLjEtMjkgNi40LTIuNS45LTUuMSAxLjYtNy43IDIuMi00LjkgMS4yLTcuMy0zLjEtNC43LTYuOCAzLjItNC42IDMuNC00LjIgMTUtMTIgLjYtLjQgMS4yLS44IDIuMi0xLjVoLTIuNWMtLjYgMC0xLjIuMi0xLjkuMy0xOS4zIDMuMy0zMC43IDE1LjUtNDguOSAyOS42LTEwLjQgOC4xLTEzLjggMy44LTEyLS41IDEuNC0zLjUgMy4zLTYuNyA1LjEtMTAgMS0xLjggMi4zLTMuNCAzLjUtNS4xLS4yLS4yLS41LS4zLS43LS41LTI3IDE4LjMtNDYuNyA0Mi40LTU3LjcgNzMuMy4zLjMuNy42IDEgLjkuMy0uNi41LTEuMi45LTEuNyAxMC40LTEyLjEgMjIuOC0yMS44IDM2LjYtMjkuOCAxOC4yLTEwLjYgMzcuNS0xOC4zIDU4LjctMjAuMiA0LjMtLjQgOC43LS4xIDEzLjEtLjEtMS44LjctMy41LjktNS4zIDEuMS0xOC41IDIuNC0zNS41IDktNTEuNSAxOC41LTMwLjIgMTcuOS01NC41IDQyLjItNzUuMSA3MC40LS4zLjQtLjQuOS0uNyAxLjMgMTQuNSA1LjMgMjQgMTcuMyAzNi4xIDI1LjYuMi0uMS4zLS4yLjQtLjRsMS4yLTIuN2MxMi4yLTI2LjkgMjctNTIuMyA0Ni43LTc0LjUgMTYuNy0xOC44IDM4LTI1LjMgNjIuNS0yMCA1LjkgMS4zIDExLjQgNC40IDE3LjIgNi44IDIuMy0xLjQgNS4xLTMuMiA4LTQuNyA4LjQtNC4zIDE3LjQtNyAyNi43LTkgMTQuNy0zLjEgMjkuNS00LjkgNDQuNS0xLjN2LS41Yy0uNS0uNC0xLjItLjgtMS43LTEuNHpNMzE2LjcgMzk3LjZjLTM5LjQtMzMtMjIuOC0xOS41LTQyLjctMzUuNi0uOC45IDAtLjItMS45IDMtMTEuMiAxOS4xLTI1LjUgMzUuMy00NCA0Ny42LTEwLjMgNi44LTIxLjUgMTEuOC0zNC4xIDExLjgtMjEuNiAwLTM4LjItOS41LTQ5LjQtMjcuOC0xMi0xOS41LTEzLjMtNDAuNy04LjItNjIuNiA3LjgtMzMuOCAzMC4xLTU1LjIgMzguNi02NC4zLTE4LjctNi4yLTMzIDEuNy00Ni40IDEzLjkuOC0xMy45IDQuMy0yNi4yIDExLjgtMzcuMy0yNC4zIDEwLjYtNDUuOSAyNS02NC44IDQzLjktLjMtNS44IDUuNC00My43IDUuNi00NC43LjMtMi43LS42LTUuMy0zLTcuNC0yNC4yIDI0LjctNDQuNSA1MS44LTU2LjEgODQuNiA3LjQtNS45IDE0LjktMTEuNCAyMy42LTE2LjItOC4zIDIyLjMtMTkuNiA1Mi44LTcuOCAxMDEuMSA0LjYgMTkgMTEuOSAzNi44IDI0LjEgNTIuMyAyLjkgMy43IDYuMyA2LjkgOS41IDEwLjMuMi0uMi40LS4zLjYtLjUtMS40LTctMi4yLTE0LjEtMS41LTIxLjkgMi4yIDMuMiAzLjkgNiA1LjkgOC42IDEyLjYgMTYgMjguNyAyNy40IDQ3LjIgMzUuNiAyNSAxMS4zIDUxLjEgMTMuMyA3Ny45IDguNiA1NC45LTkuNyA5MC43LTQ4LjYgMTE2LTk4LjggMS0xLjguNi0yLjktLjktNC4yem0xNzItNDYuNGMtOS41LTMuMS0yMi4yLTQuMi0yOC43LTIuOSA5LjkgNCAxNC4xIDYuNiAxOC44IDEyIDEyLjYgMTQuNCAxMC40IDM0LjctNS40IDQ1LjYtMTEuNyA4LjEtMjQuOSAxMC41LTM4LjkgOS4xLTEuMi0uMS0yLjMtLjQtMy0uNiAyLjgtMy43IDYtNyA4LjEtMTAuOCA5LjQtMTYuOCA1LjQtNDIuMS04LjctNTYuMS0yLjEtMi4xLTQuNi0zLjktNy01LjktLjMgMS4zLS4xIDIuMS4xIDIuOCA0LjIgMTYuNi04LjEgMzIuNC0yNC44IDMxLjgtNy42LS4zLTEzLjktMy44LTE5LjYtOC41LTE5LjUtMTYuMS0zOS4xLTMyLjEtNTguNS00OC4zLTUuOS00LjktMTIuNS04LjEtMjAuMS04LjctNC42LS40LTkuMy0uNi0xMy45LS45LTUuOS0uNC04LjgtMi44LTEwLjQtOC40LS45LTMuNC0xLjUtNi44LTIuMi0xMC4yLTEuNS04LjEtNi4yLTEzLTE0LjMtMTQuMi00LjQtLjctOC45LTEtMTMuMy0xLjUtMTMtMS40LTE5LjgtNy40LTIyLjYtMjAuMy01IDExLTEuNiAyMi40IDcuMyAyOS45IDQuNSAzLjggOS4zIDcuMyAxMy44IDExLjIgNC42IDMuOCA3LjQgOC43IDcuOSAxNC44LjQgNC43LjggOS41IDEuOCAxNC4xIDIuMiAxMC42IDguOSAxOC40IDE3IDI1LjEgMTYuNSAxMy43IDMzIDI3LjMgNDkuNSA0MS4xIDE3LjkgMTUgMTMuOSAzMi44IDEzIDU2LS45IDIyLjkgMTIuMiA0Mi45IDMzLjUgNTEuMiAxIC40IDIgLjYgMy42IDEuMS0xNS43LTE4LjItMTAuMS00NC4xLjctNTIuMy4zIDIuMi40IDQuMy45IDYuNCA5LjQgNDQuMSA0NS40IDY0LjIgODUgNTYuOSAxNi0yLjkgMzAuNi04LjkgNDIuOS0xOS44IDItMS44IDMuNy00LjEgNS45LTYuNS0xOS4zIDQuNi0zNS44LjEtNTAuOS0xMC42LjctLjMgMS4zLS4zIDEuOS0uMyAyMS4zIDEuOCA0MC42LTMuNCA1Ny0xNy40IDE5LjUtMTYuNiAyNi42LTQyLjkgMTcuNC02Ni04LjMtMjAuMS0yMy42LTMyLjMtNDMuOC0zOC45ek05OS40IDE3OS4zYy01LjMtOS4yLTEzLjItMTUuNi0yMi4xLTIxLjMgMTMuNy0uNSAyNi42LjIgMzkuNiAzLjctNy0xMi4yLTguNS0yNC43LTUtMzguNyA1LjMgMTEuOSAxMy43IDIwLjEgMjMuNiAyNi44IDE5LjcgMTMuMiAzNS43IDE5LjYgNDYuNyAzMC4yIDMuNCAzLjMgNi4zIDcuMSA5LjYgMTAuOS0uOC0yLjEtMS40LTQuMS0yLjItNi01LTEwLjYtMTMtMTguNi0yMi42LTI1LTEuOC0xLjItMi44LTIuNS0zLjQtNC41LTMuMy0xMi41LTMtMjUuMS0uNy0zNy42IDEtNS41IDIuOC0xMC45IDQuNS0xNi4zLjgtMi40IDIuMy00LjYgNC02LjYuNiA2LjkgMCAyNS41IDE5LjYgNDYgMTAuOCAxMS4zIDIyLjQgMjEuOSAzMy45IDMyLjcgOSA4LjUgMTguMyAxNi43IDI1LjUgMjYuOCAxLjEgMS42IDIuMiAzLjMgMy44IDQuNy01LTEzLTE0LjItMjQuMS0yNC4yLTMzLjgtOS42LTkuMy0xOS40LTE4LjQtMjkuMi0yNy40LTMuMy0zLTQuNi02LjctNS4xLTEwLjktMS4yLTEwLjQgMC0yMC42IDQuMy0zMC4yLjUtMSAxLjEtMiAxLjktMy4zLjUgNC4yLjYgNy45IDEuNCAxMS42IDQuOCAyMy4xIDIwLjQgMzYuMyA0OS4zIDYzLjUgMTAgOS40IDE5LjMgMTkuMiAyNS42IDMxLjYgNC44IDkuMyA3LjMgMTkgNS43IDI5LjYtLjEuNi41IDEuNyAxLjEgMiA2LjIgMi42IDEwIDYuOSA5LjcgMTQuMyA3LjctMi42IDEyLjUtOCAxNi40LTE0LjUgNC4yIDIwLjItOS4xIDUwLjMtMjcuMiA1OC43LjQtNC41IDUtMjMuNC0xNi41LTI3LjctNi44LTEuMy0xMi44LTEuMy0yMi45LTIuMSA0LjctOSAxMC40LTIwLjYuNS0yMi40LTI0LjktNC42LTUyLjggMS45LTU3LjggNC42IDguMi40IDE2LjMgMSAyMy41IDMuMy0yIDYuNS00IDEyLjctNS44IDE4LjktMS45IDYuNSAyLjEgMTQuNiA5LjMgOS42IDEuMi0uOSAyLjMtMS45IDMuMy0yLjctMy4xIDE3LjktMi45IDE1LjktMi44IDE4LjMuMyAxMC4yIDkuNSA3LjggMTUuNyA3LjMtMi41IDExLjgtMjkuNSAyNy4zLTQ1LjQgMjUuOCA3LTQuNyAxMi43LTEwLjMgMTUuOS0xNy45LTYuNS44LTEyLjkgMS42LTE5LjIgMi40bC0uMy0uOWM0LjctMy40IDgtNy44IDEwLjItMTMuMSA4LjctMjEuMS0zLjYtMzgtMjUtMzkuOS05LjEtLjgtMTcuOC44LTI1LjkgNS41IDYuMi0xNS42IDE3LjItMjYuNiAzMi42LTM0LjUtMTUuMi00LjMtOC45LTIuNy0yNC42LTYuMyAxNC42LTkuMyAzMC4yLTEzLjIgNDYuNS0xNC42LTUuMi0zLjItNDguMS0zLjYtNzAuMiAyMC45IDcuOSAxLjQgMTUuNSAyLjggMjMuMiA0LjItMjMuOCA3LTQ0IDE5LjctNjIuNCAzNS42IDEuMS00LjggMi43LTkuNSAzLjMtMTQuMy42LTQuNS44LTkuMi4xLTEzLjYtMS41LTkuNC04LjktMTUuMS0xOS43LTE2LjMtNy45LS45LTE1LjYuMS0yMy4zIDEuMy0uOS4xLTEuNy4zLTIuOSAwIDE1LjgtMTQuOCAzNi0yMS43IDUzLjEtMzMuNSA2LTQuNSA2LjgtOC4yIDMtMTQuOXptMTI4LjQgMjYuOGMzLjMgMTYgMTIuNiAyNS41IDIzLjggMjQuMy00LjYtMTEuMy0xMi4xLTE5LjUtMjMuOC0yNC4zelwiXSxkYXNoY3ViZTpbNDQ4LDUxMixbXSxcImYyMTBcIixcIk0zMjYuNiAxMDRIMTEwLjRjLTUxLjEgMC05MS4yIDQzLjMtOTEuMiA5My41VjQyN2MwIDUwLjUgNDAuMSA4NSA5MS4yIDg1aDIyNy4yYzUxLjEgMCA5MS4yLTM0LjUgOTEuMi04NVYwTDMyNi42IDEwNHpNMTUzLjkgNDE2LjVjLTE3LjcgMC0zMi40LTE1LjEtMzIuNC0zMi44VjI0MC44YzAtMTcuNyAxNC43LTMyLjUgMzIuNC0zMi41aDE0MC43YzE3LjcgMCAzMiAxNC44IDMyIDMyLjV2MTIzLjVsNTEuMSA1Mi4zSDE1My45elwiXSxkZWxpY2lvdXM6WzQ0OCw1MTIsW10sXCJmMWE1XCIsXCJNNDQ2LjUgNjhjLS40LTEuNS0uOS0zLTEuNC00LjUtLjktMi41LTItNC44LTMuMy03LjEtMS40LTIuNC0zLTQuOC00LjctNi45LTIuMS0yLjUtNC40LTQuOC02LjktNi44LTEuMS0uOS0yLjItMS43LTMuMy0yLjUtMS4zLS45LTIuNi0xLjctNC0yLjQtMS44LTEtMy42LTEuOC01LjUtMi41LTEuNy0uNy0zLjUtMS4zLTUuNC0xLjctMy44LTEtNy45LTEuNS0xMi0xLjVINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCA0LjEuNSA4LjIgMS41IDEyIDIgNy43IDUuOCAxNC42IDExIDIwLjMgMSAxLjEgMi4xIDIuMiAzLjMgMy4zIDUuNyA1LjIgMTIuNiA5IDIwLjMgMTEgMy44IDEgNy45IDEuNSAxMiAxLjVoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYy0uMS00LjEtLjYtOC4yLTEuNi0xMnpNNDE2IDQzMmMwIDguOC03LjIgMTYtMTYgMTZIMjI0VjI1NkgzMlY4MGMwLTguOCA3LjItMTYgMTYtMTZoMTc2djE5MmgxOTJ2MTc2elwiXSxkZXBsb3lkb2c6WzUxMiw1MTIsW10sXCJmMzhlXCIsXCJNMzgyLjIgMTM2aDUxLjd2MjM5LjZoLTUxLjd2LTIwLjdjLTE5LjggMjQuOC01Mi44IDI0LjEtNzMuOCAxNC43LTI2LjItMTEuNy00NC4zLTM4LjEtNDQuMy03MS44IDAtMjkuOCAxNC44LTU3LjkgNDMuMy03MC44IDIwLjItOS4xIDUyLjctMTAuNiA3NC44IDEyLjlWMTM2em0tNjQuNyAxNjEuOGMwIDE4LjIgMTMuNiAzMy41IDMzLjIgMzMuNSAxOS44IDAgMzMuMi0xNi40IDMzLjItMzIuOSAwLTE3LjEtMTMuNy0zMy4yLTMzLjItMzMuMi0xOS42IDAtMzMuMiAxNi40LTMzLjIgMzIuNnpNMTg4LjUgMTM2aDUxLjd2MjM5LjZoLTUxLjd2LTIwLjdjLTE5LjggMjQuOC01Mi44IDI0LjEtNzMuOCAxNC43LTI2LjItMTEuNy00NC4zLTM4LjEtNDQuMy03MS44IDAtMjkuOCAxNC44LTU3LjkgNDMuMy03MC44IDIwLjItOS4xIDUyLjctMTAuNiA3NC44IDEyLjlWMTM2em0tNjQuNyAxNjEuOGMwIDE4LjIgMTMuNiAzMy41IDMzLjIgMzMuNSAxOS44IDAgMzMuMi0xNi40IDMzLjItMzIuOSAwLTE3LjEtMTMuNy0zMy4yLTMzLjItMzMuMi0xOS43IDAtMzMuMiAxNi40LTMzLjIgMzIuNnpNNDQ4IDk2YzE3LjUgMCAzMiAxNC40IDMyIDMydjI1NmMwIDE3LjUtMTQuNCAzMi0zMiAzMkg2NGMtMTcuNSAwLTMyLTE0LjQtMzItMzJWMTI4YzAtMTcuNSAxNC40LTMyIDMyLTMyaDM4NG0wLTMySDY0QzI4LjggNjQgMCA5Mi44IDAgMTI4djI1NmMwIDM1LjIgMjguOCA2NCA2NCA2NGgzODRjMzUuMiAwIDY0LTI4LjggNjQtNjRWMTI4YzAtMzUuMi0yOC44LTY0LTY0LTY0elwiXSxkZXNrcHJvOls0ODAsNTEyLFtdLFwiZjM4ZlwiLFwiTTIwNS45IDUxMmwzMS4xLTM4LjRjMTIuMy0uMiAyNS42LTEuNCAzNi41LTYuNiAzOC45LTE4LjYgMzguNC02MS45IDM4LjMtNjMuOC0uMS01LS44LTQuNC0yOC45LTM3LjRIMzYyYy0uMiA1MC4xLTcuMyA2OC41LTEwLjIgNzUuNy05LjQgMjMuNy00My45IDYyLjgtOTUuMiA2OS40LTguNyAxLjEtMzIuOCAxLjItNTAuNyAxLjF6bTIwMC40LTE2Ny43YzM4LjYgMCA1OC41LTEzLjYgNzMuNy0zMC45bC0xNzUuNS0uMy0xNy40IDMxLjMgMTE5LjItLjF6bS00My42LTIyMy45djE2OC4zaC03My41bC0zMi43IDU1LjVIMjUwYy01Mi4zIDAtNTguMS01Ni41LTU4LjMtNTguOS0xLjItMTMuMi0yMS4zLTExLjYtMjAuMSAxLjggMS40IDE1LjggOC44IDQwIDI2LjQgNTcuMWgtOTFjLTI1LjUgMC0xMTAuOC0yNi44LTEwNy0xMTRWMTYuOUMwIC45IDkuNy4zIDE1IC4xaDgyYy4yIDAgLjMuMS41LjEgNC4zLS40IDUwLjEtMi4xIDUwLjEgNDMuNyAwIDEzLjMgMjAuMiAxMy40IDIwLjIgMCAwLTE4LjItNS41LTMyLjgtMTUuOC00My43aDg0LjJjMTA4LjctLjQgMTI2LjUgNzkuNCAxMjYuNSAxMjAuMnptLTEzMi41IDU2bDY0IDI5LjNjMTMuMy00NS41LTQyLjItNzEuNy02NC0yOS4zelwiXSxkZXZpYW50YXJ0OlszMjAsNTEyLFtdLFwiZjFiZFwiLFwiTTMyMCA5My4ybC05OC4yIDE3OS4xIDcuNCA5LjVIMzIwdjEyNy43SDE1OS4xbC0xMy41IDkuMi00My43IDg0Yy0uMyAwLTguNiA4LjYtOS4yIDkuMkgwdi05My4ybDkzLjItMTc5LjQtNy40LTkuMkgwVjEwMi41aDE1NmwxMy41LTkuMiA0My43LTg0Yy4zIDAgOC42LTguNiA5LjItOS4ySDMyMHY5My4xelwiXSxkaWdnOls1MTIsNTEyLFtdLFwiZjFhNlwiLFwiTTgxLjcgMTcyLjNIMHYxNzQuNGgxMzIuN1Y5NmgtNTF2NzYuM3ptMCAxMzMuNEg1MC45di05Mi4zaDMwLjh2OTIuM3ptMjk3LjItMTMzLjR2MTc0LjRoODEuOHYyOC41aC04MS44VjQxNkg1MTJWMTcyLjNIMzc4Ljl6bTgxLjggMTMzLjRoLTMwLjh2LTkyLjNoMzAuOHY5Mi4zem0tMjM1LjYgNDFoODIuMXYyOC41aC04Mi4xVjQxNmgxMzMuM1YxNzIuM0gyMjUuMXYxNzQuNHptNTEuMi0xMzMuM2gzMC44djkyLjNoLTMwLjh2LTkyLjN6TTE1My4zIDk2aDUxLjN2NTFoLTUxLjNWOTZ6bTAgNzYuM2g1MS4zdjE3NC40aC01MS4zVjE3Mi4zelwiXSxcImRpZ2l0YWwtb2NlYW5cIjpbNTEyLDUxMixbXSxcImYzOTFcIixcIk0yNTYgNTA0di05Ni4xYzEwMS44IDAgMTgwLjgtMTAwLjkgMTQxLjctMjA4LTE0LjMtMzkuNi00Ni4xLTcxLjQtODUuOC04NS43LTEwNy4xLTM4LjgtMjA4LjEgMzkuOS0yMDguMSAxNDEuN0g4QzggOTMuNyAxNjQuOS0zMi44IDMzNSAyMC4zYzc0LjIgMjMuMyAxMzMuNiA4Mi40IDE1Ni42IDE1Ni42QzU0NC44IDM0Ny4yIDQxOC42IDUwNCAyNTYgNTA0em0uMy0xOTEuNGgtOTUuNnY5NS42aDk1LjZ2LTk1LjZ6bS05NS42IDk1LjZIODd2NzMuNmg3My43di03My42ek04NyAzNDYuNkgyNS40djYxLjZIODd2LTYxLjZ6XCJdLGRpc2NvcmQ6WzQ0OCw1MTIsW10sXCJmMzkyXCIsXCJNMjk3LjIxNiAyNDMuMmMwIDE1LjYxNi0xMS41MiAyOC40MTYtMjYuMTEyIDI4LjQxNi0xNC4zMzYgMC0yNi4xMTItMTIuOC0yNi4xMTItMjguNDE2czExLjUyLTI4LjQxNiAyNi4xMTItMjguNDE2YzE0LjU5MiAwIDI2LjExMiAxMi44IDI2LjExMiAyOC40MTZ6bS0xMTkuNTUyLTI4LjQxNmMtMTQuNTkyIDAtMjYuMTEyIDEyLjgtMjYuMTEyIDI4LjQxNnMxMS43NzYgMjguNDE2IDI2LjExMiAyOC40MTZjMTQuNTkyIDAgMjYuMTEyLTEyLjggMjYuMTEyLTI4LjQxNi4yNTYtMTUuNjE2LTExLjUyLTI4LjQxNi0yNi4xMTItMjguNDE2ek00NDggNTIuNzM2VjUxMmMtNjQuNDk0LTU2Ljk5NC00My44NjgtMzguMTI4LTExOC43ODQtMTA3Ljc3NmwxMy41NjggNDcuMzZINTIuNDhDMjMuNTUyIDQ1MS41ODQgMCA0MjguMDMyIDAgMzk4Ljg0OFY1Mi43MzZDMCAyMy41NTIgMjMuNTUyIDAgNTIuNDggMGgzNDMuMDRDNDI0LjQ0OCAwIDQ0OCAyMy41NTIgNDQ4IDUyLjczNnptLTcyLjk2IDI0Mi42ODhjMC04Mi40MzItMzYuODY0LTE0OS4yNDgtMzYuODY0LTE0OS4yNDgtMzYuODY0LTI3LjY0OC03MS45MzYtMjYuODgtNzEuOTM2LTI2Ljg4bC0zLjU4NCA0LjA5NmM0My41MiAxMy4zMTIgNjMuNzQ0IDMyLjUxMiA2My43NDQgMzIuNTEyLTYwLjgxMS0zMy4zMjktMTMyLjI0NC0zMy4zMzUtMTkxLjIzMi03LjQyNC05LjQ3MiA0LjM1Mi0xNS4xMDQgNy40MjQtMTUuMTA0IDcuNDI0czIxLjI0OC0yMC4yMjQgNjcuMzI4LTMzLjUzNmwtMi41Ni0zLjA3MnMtMzUuMDcyLS43NjgtNzEuOTM2IDI2Ljg4YzAgMC0zNi44NjQgNjYuODE2LTM2Ljg2NCAxNDkuMjQ4IDAgMCAyMS41MDQgMzcuMTIgNzguMDggMzguOTEyIDAgMCA5LjQ3Mi0xMS41MiAxNy4xNTItMjEuMjQ4LTMyLjUxMi05LjcyOC00NC44LTMwLjIwOC00NC44LTMwLjIwOCAzLjc2NiAyLjYzNiA5Ljk3NiA2LjA1MyAxMC40OTYgNi40IDQzLjIxIDI0LjE5OCAxMDQuNTg4IDMyLjEyNiAxNTkuNzQ0IDguOTYgOC45Ni0zLjMyOCAxOC45NDQtOC4xOTIgMjkuNDQtMTUuMTA0IDAgMC0xMi44IDIwLjk5Mi00Ni4zMzYgMzAuNDY0IDcuNjggOS43MjggMTYuODk2IDIwLjczNiAxNi44OTYgMjAuNzM2IDU2LjU3Ni0xLjc5MiA3OC4zMzYtMzguOTEyIDc4LjMzNi0zOC45MTJ6XCJdLGRpc2NvdXJzZTpbNDQ4LDUxMixbXSxcImYzOTNcIixcIk0yMjUuOSAzMkMxMDMuMyAzMiAwIDEzMC41IDAgMjUyLjEgMCAyNTYgLjEgNDgwIC4xIDQ4MGwyMjUuOC0uMmMxMjIuNyAwIDIyMi4xLTEwMi4zIDIyMi4xLTIyMy45QzQ0OCAxMzQuMyAzNDguNiAzMiAyMjUuOSAzMnpNMjI0IDM4NGMtMTkuNCAwLTM3LjktNC4zLTU0LjQtMTIuMUw4OC41IDM5MmwyMi45LTc1Yy05LjgtMTguMS0xNS40LTM4LjktMTUuNC02MSAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4LTU3LjMgMTI4LTEyOCAxMjh6XCJdLGRvY2h1YjpbNDE2LDUxMixbXSxcImYzOTRcIixcIk0zOTcuOSAxNjBIMjU2VjE5LjZMMzk3LjkgMTYwek0zMDQgMTkydjEzMGMwIDY2LjgtMzYuNSAxMDAuMS0xMTMuMyAxMDAuMUg5NlY4NC44aDk0LjdjMTIgMCAyMy4xLjggMzMuMSAyLjV2LTg0QzIxMi45IDEuMSAyMDEuNCAwIDE4OS4yIDBIMHY1MTJoMTg5LjJDMzI5LjcgNTEyIDQwMCA0NDcuNCA0MDAgMzE4LjFWMTkyaC05NnpcIl0sZG9ja2VyOls2NDAsNTEyLFtdLFwiZjM5NVwiLFwiTTM0OS45IDIzNi4zaC02Ni4xdi01OS40aDY2LjF2NTkuNHptMC0yMDQuM2gtNjYuMXY2MC43aDY2LjFWMzJ6bTc4LjIgMTQ0LjhIMzYydjU5LjRoNjYuMXYtNTkuNHptLTE1Ni4zLTcyLjFoLTY2LjF2NjAuMWg2Ni4xdi02MC4xem03OC4xIDBoLTY2LjF2NjAuMWg2Ni4xdi02MC4xem0yNzYuOCAxMDBjLTE0LjQtOS43LTQ3LjYtMTMuMi03My4xLTguNC0zLjMtMjQtMTYuNy00NC45LTQxLjEtNjMuN2wtMTQtOS4zLTkuMyAxNGMtMTguNCAyNy44LTIzLjQgNzMuNi0zLjcgMTAzLjgtOC43IDQuNy0yNS44IDExLjEtNDguNCAxMC43SDIuNGMtOC43IDUwLjggNS44IDExNi44IDQ0IDE2Mi4xIDM3LjEgNDMuOSA5Mi43IDY2LjIgMTY1LjQgNjYuMiAxNTcuNCAwIDI3My45LTcyLjUgMzI4LjQtMjA0LjIgMjEuNC40IDY3LjYuMSA5MS4zLTQ1LjIgMS41LTIuNSA2LjYtMTMuMiA4LjUtMTcuMWwtMTMuMy04Ljl6bS01MTEuMS0yNy45aC02NnY1OS40aDY2LjF2LTU5LjR6bTc4LjEgMGgtNjYuMXY1OS40aDY2LjF2LTU5LjR6bTc4LjEgMGgtNjYuMXY1OS40aDY2LjF2LTU5LjR6bS03OC4xLTcyLjFoLTY2LjF2NjAuMWg2Ni4xdi02MC4xelwiXSxkcmFmdDJkaWdpdGFsOls0ODAsNTEyLFtdLFwiZjM5NlwiLFwiTTM2OS45IDQyNS40VjM3MWw0Ny4xIDI3LjItNDcuMSAyNy4yek04Mi40IDM4MC42YzI1LjUtMjcuMyA5Ny43LTEwNC43IDE1MC45LTE3MCAzNS4xLTQzLjEgNDAuMy04Mi40IDI4LjQtMTEyLjctNy40LTE4LjgtMTcuNS0zMC4yLTI0LjMtMzUuNyA0NS4zIDIuMSA2OCAyMy40IDgyLjIgMzguMyAwIDAgNDIuNCA0OC4yIDUuOCAxMTMuMy0zNyA2NS45LTExMC45IDE0Ny41LTEyOC41IDE2Ni43SDgyLjR6bTUxLjgtMjE5LjJjMCAxMi40LTEwIDIyLjQtMjIuNCAyMi40LTEyLjQgMC0yMi40LTEwLTIyLjQtMjIuNCAwLTEyLjQgMTAtMjIuNCAyMi40LTIyLjQgMTIuNCAwIDIyLjQgMTAuMSAyMi40IDIyLjRNMzM2IDMxNS45djY0LjdoLTkxLjNjMzAuOC0zNSA4MS44LTk1LjkgMTExLjgtMTQ5LjMgMzUuMi02Mi42IDE2LjEtMTIzLjQtMTIuOC0xNTMuMy00LjQtNC42LTYyLjItNjIuOS0xNjYtNDEuMi01OS4xIDEyLjQtODkuNCA0My40LTEwNC4zIDY3LjMtMTMuMSAyMC45LTE3IDM5LjgtMTguMiA0Ny43LTUuNSAzMyAxOS40IDY3LjEgNTYuNyA2Ny4xIDMxLjcgMCA1Ny4zLTI1LjcgNTcuMy01Ny40IDAtMjcuMS0xOS43LTUyLjEtNDgtNTYuOCAxLjgtNy4zIDE3LjctMjEuMSAyNi4zLTI0LjcgNDEuMS0xNy4zIDc4IDUuMiA4My4zIDMzLjUgOC4zIDQ0LjMtMzcuMSA5MC40LTY5LjcgMTI3LjZDODQuNSAzMjguMSAxOC4zIDM5Ni44IDAgNDE1LjlsMzM2LS4xVjQ4MGwxNDQtODEuOS0xNDQtODIuMnpcIl0sZHJpYmJibGU6WzUxMiw1MTIsW10sXCJmMTdkXCIsXCJNMjU2IDhDMTE5LjI1MiA4IDggMTE5LjI1MiA4IDI1NnMxMTEuMjUyIDI0OCAyNDggMjQ4IDI0OC0xMTEuMjUyIDI0OC0yNDhTMzkyLjc0OCA4IDI1NiA4em0xNjMuOTcgMTE0LjM2NmMyOS41MDMgMzYuMDQ2IDQ3LjM2OSA4MS45NTcgNDcuODM1IDEzMS45NTUtNi45ODQtMS40NzctNzcuMDE4LTE1LjY4Mi0xNDcuNTAyLTYuODE4LTUuNzUyLTE0LjA0MS0xMS4xODEtMjYuMzkzLTE4LjYxNy00MS42MTQgNzguMzIxLTMxLjk3NyAxMTMuODE4LTc3LjQ4MiAxMTguMjg0LTgzLjUyM3pNMzk2LjQyMSA5Ny44N2MtMy44MSA1LjQyNy0zNS42OTcgNDguMjg2LTExMS4wMjEgNzYuNTE5LTM0LjcxMi02My43NzYtNzMuMTg1LTExNi4xNjgtNzkuMDQtMTI0LjAwOCA2Ny4xNzYtMTYuMTkzIDEzNy45NjYgMS4yNyAxOTAuMDYxIDQ3LjQ4OXptLTIzMC40OC0zMy4yNWM1LjU4NSA3LjY1OSA0My40MzggNjAuMTE2IDc4LjUzNyAxMjIuNTA5LTk5LjA4NyAyNi4zMTMtMTg2LjM2IDI1LjkzNC0xOTUuODM0IDI1LjgwOUM2Mi4zOCAxNDcuMjA1IDEwNi42NzggOTIuNTczIDE2NS45NDEgNjQuNjJ6TTQ0LjE3IDI1Ni4zMjNjMC0yLjE2Ni4wNDMtNC4zMjIuMTA4LTYuNDczIDkuMjY4LjE5IDExMS45MiAxLjUxMyAyMTcuNzA2LTMwLjE0NiA2LjA2NCAxMS44NjggMTEuODU3IDIzLjkxNSAxNy4xNzQgMzUuOTQ5LTc2LjU5OSAyMS41NzUtMTQ2LjE5NCA4My41MjctMTgwLjUzMSAxNDIuMzA2QzY0Ljc5NCAzNjAuNDA1IDQ0LjE3IDMxMC43MyA0NC4xNyAyNTYuMzIzem04MS44MDcgMTY3LjExM2MyMi4xMjctNDUuMjMzIDgyLjE3OC0xMDMuNjIyIDE2Ny41NzktMTMyLjc1NiAyOS43NCA3Ny4yODMgNDIuMDM5IDE0Mi4wNTMgNDUuMTg5IDE2MC42MzgtNjguMTEyIDI5LjAxMy0xNTAuMDE1IDIxLjA1My0yMTIuNzY4LTI3Ljg4MnptMjQ4LjM4IDguNDg5Yy0yLjE3MS0xMi44ODYtMTMuNDQ2LTc0Ljg5Ny00MS4xNTItMTUxLjAzMyA2Ni4zOC0xMC42MjYgMTI0LjcgNi43NjggMTMxLjk0NyA5LjA1NS05LjQ0MiA1OC45NDEtNDMuMjczIDEwOS44NDQtOTAuNzk1IDE0MS45Nzh6XCJdLFwiZHJpYmJibGUtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMzk3XCIsXCJNOTAuMiAyMjguMmM4LjktNDIuNCAzNy40LTc3LjcgNzUuNy05NS43IDMuNiA0LjkgMjggMzguOCA1MC43IDc5LTY0IDE3LTEyMC4zIDE2LjgtMTI2LjQgMTYuN3pNMzE0LjYgMTU0Yy0zMy42LTI5LjgtNzkuMy00MS4xLTEyMi42LTMwLjYgMy44IDUuMSAyOC42IDM4LjkgNTEgODAgNDguNi0xOC4zIDY5LjEtNDUuOSA3MS42LTQ5LjR6TTE0MC4xIDM2NGM0MC41IDMxLjYgOTMuMyAzNi43IDEzNy4zIDE4LTItMTItMTAtNTMuOC0yOS4yLTEwMy42LTU1LjEgMTguOC05My44IDU2LjQtMTA4LjEgODUuNnptOTguOC0xMDguMmMtMy40LTcuOC03LjItMTUuNS0xMS4xLTIzLjJDMTU5LjYgMjUzIDkzLjQgMjUyLjIgODcuNCAyNTJjMCAxLjQtLjEgMi44LS4xIDQuMiAwIDM1LjEgMTMuMyA2Ny4xIDM1LjEgOTEuNCAyMi4yLTM3LjkgNjcuMS03Ny45IDExNi41LTkxLjh6bTM0LjkgMTYuM2MxNy45IDQ5LjEgMjUuMSA4OS4xIDI2LjUgOTcuNCAzMC43LTIwLjcgNTIuNS01My42IDU4LjYtOTEuNi00LjYtMS41LTQyLjMtMTIuNy04NS4xLTUuOHptLTIwLjMtNDguNGM0LjggOS44IDguMyAxNy44IDEyIDI2LjggNDUuNS01LjcgOTAuNyAzLjQgOTUuMiA0LjQtLjMtMzIuMy0xMS44LTYxLjktMzAuOS04NS4xLTIuOSAzLjktMjUuOCAzMy4yLTc2LjMgNTMuOXpNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tNjQgMTc2YzAtODguMi03MS44LTE2MC0xNjAtMTYwUzY0IDE2Ny44IDY0IDI1NnM3MS44IDE2MCAxNjAgMTYwIDE2MC03MS44IDE2MC0xNjB6XCJdLGRyb3Bib3g6WzUyOCw1MTIsW10sXCJmMTZiXCIsXCJNMjY0LjQgMTE2LjNsLTEzMiA4NC4zIDEzMiA4NC4zLTEzMiA4NC4zTDAgMjg0LjFsMTMyLjMtODQuM0wwIDExNi4zIDEzMi4zIDMybDEzMi4xIDg0LjN6TTEzMS42IDM5NS43bDEzMi04NC4zIDEzMiA4NC4zLTEzMiA4NC4zLTEzMi04NC4zem0xMzIuOC0xMTEuNmwxMzItODQuMy0xMzItODMuNkwzOTUuNyAzMiA1MjggMTE2LjNsLTEzMi4zIDg0LjNMNTI4IDI4NC44bC0xMzIuMyA4NC4zLTEzMS4zLTg1elwiXSxkcnVwYWw6WzQ0OCw1MTIsW10sXCJmMWE5XCIsXCJNMzE5LjUgMTE0LjdjLTIyLjItMTQtNDMuNS0xOS41LTY0LjctMzMuNS0xMy04LjgtMzEuMy0zMC00Ni41LTQ4LjMtMi43IDI5LjMtMTEuNSA0MS4yLTIyIDQ5LjUtMjEuMyAxNy0zNC44IDIyLjItNTMuNSAzMi4zQzExNyAxMjMgMzIgMTgxLjUgMzIgMjkwLjUgMzIgMzk5LjcgMTIzLjggNDgwIDIyNS44IDQ4MCAzMjcuNSA0ODAgNDE2IDQwNiA0MTYgMjk0YzAtMTEyLjMtODMtMTcxLTk2LjUtMTc5LjN6bTIuNSAzMjUuNmMtMjAuMSAyMC4xLTkwLjEgMjguNy0xMTYuNyA0LjItNC44LTQuOC4zLTEyIDYuNS0xMiAwIDAgMTcgMTMuMyA1MS41IDEzLjMgMjcgMCA0Ni03LjcgNTQuNS0xNCA2LjEtNC42IDguNCA0LjMgNC4yIDguNXptLTU0LjUtNTIuNmM4LjctMy42IDI5LTMuOCAzNi44IDEuMyA0LjEgMi44IDE2LjEgMTguOCA2LjIgMjMuNy04LjQgNC4yLTEuMi0xNS43LTI2LjUtMTUuNy0xNC43IDAtMTkuNSA1LjItMjYuNyAxMS03IDYtOS44IDgtMTIuMiA0LjctNi04LjIgMTUuOS0yMi4zIDIyLjQtMjV6TTM2MCA0MDVjLTE1LjItMS00NS41LTQ4LjgtNjUtNDkuNS0zMC45LS45LTEwNC4xIDgwLjctMTYxLjMgNDItMzguOC0yNi42LTE0LjYtMTA0LjggNTEuOC0xMDUuMiA0OS41LS41IDgzLjggNDkgMTA4LjUgNDguNSAyMS4zLS4zIDYxLjgtNDEuOCA4MS44LTQxLjggNDguNyAwIDIzLjMgMTA5LjMtMTUuOCAxMDZ6XCJdLGR5YWxvZzpbNDE2LDUxMixbXSxcImYzOTlcIixcIk0wIDMydjExOS4yaDY0Vjk2aDEwNy4yQzI4NC42IDk2IDM1MiAxNzYuMiAzNTIgMjU1LjkgMzUyIDMzMiAyOTMuNCA0MTYgMTcxLjIgNDE2SDB2NjRoMTcxLjJDMzMxLjkgNDgwIDQxNiAzNjcuMyA0MTYgMjU1LjljMC01OC43LTIyLjEtMTEzLjQtNjIuMy0xNTQuM0MzMDguOSA1NiAyNDUuNyAzMiAxNzEuMiAzMkgwelwiXSxlYXJseWJpcmRzOls0ODAsNTEyLFtdLFwiZjM5YVwiLFwiTTMxMy4yIDQ3LjVjMS4yLTEzIDIxLjMtMTQgMzYuNi04LjcuOS4zIDI2LjIgOS43IDE5IDE1LjItMjcuOS03LjQtNTYuNCAxOC4yLTU1LjYtNi41em0tMjAxIDYuOWMzMC43LTguMSA2MiAyMCA2MS4xLTcuMS0xLjMtMTQuMi0yMy40LTE1LjMtNDAuMi05LjYtMSAuMy0yOC43IDEwLjUtMjAuOSAxNi43ek0zMTkuNCAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2LTcuMi0xNi0xNi0xNnptLTE1OS43IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2LTcuMi0xNi0xNi0xNnptMzE4LjUgMTYzLjJjLTkuOSAyNC00MC43IDExLTYzLjktMS4yLTEzLjUgNjkuMS01OC4xIDExMS40LTEyNi4zIDEyNC4yLjMuOS0yLS4xIDI0IDEgMzMuNiAxLjQgNjMuOC0zLjEgOTcuNC04LTE5LjgtMTMuOC0xMS40LTM3LjEtOS44LTM4LjEgMS40LS45IDE0LjcgMS43IDIxLjYgMTEuNSA4LjYtMTIuNSAyOC40LTE0LjggMzAuMi0xMy42IDEuNiAxLjEgNi42IDIwLjktNi45IDM0LjYgNC43LS45IDguMi0xLjYgOS44LTIuMSAyLjYtLjggMTcuNyAxMS4zIDMuMSAxMy4zLTE0LjMgMi4zLTIyLjYgNS4xLTQ3LjEgMTAuOC00NS45IDEwLjctODUuOSAxMS44LTExNy43IDEyLjhsMSAxMS42YzMuOCAxOC4xLTIzLjQgMjQuMy0yNy42IDYuMi44IDE3LjktMjcuMSAyMS44LTI4LjQtMWwtLjUgNS4zYy0uNyAxOC40LTI4LjQgMTcuOS0yOC4zLS42LTcuNSAxMy41LTI4LjEgNi44LTI2LjQtOC41bDEuMi0xMi40Yy0zNi43LjktNTkuNyAzLjEtNjEuOCAzLjEtMjAuOSAwLTIwLjktMzEuNiAwLTMxLjYgMi40IDAgMjcuNyAxLjMgNjMuMiAyLjgtNjEuMS0xNS41LTEwMy43LTU1LTExNC45LTExOC4yLTI1IDEyLjgtNTcuNSAyNi44LTY4LjIuOC0xMC41LTI1LjQgMjEuNS00Mi42IDY2LjgtNzMuNC43LTYuNiAxLjYtMTMuMyAyLjctMTkuOC0xNC40LTE5LjYtMTEuNi0zNi4zLTE2LjEtNjAuNC0xNi44IDIuNC0yMy4yLTkuMS0yMy42LTIzLjEuMy03LjMgMi4xLTE0LjkgMi40LTE1LjQgMS4xLTEuOCAxMC4xLTIgMTIuNy0yLjYgNi0zMS43IDUwLjYtMzMuMiA5MC45LTM0LjUgMTkuNy0yMS44IDQ1LjItNDEuNSA4MC45LTQ4LjNDMjAzLjMgMjkgMjE1LjIgOC41IDIxNi4yIDhjMS43LS44IDIxLjIgNC4zIDI2LjMgMjMuMiA1LjItOC44IDE4LjMtMTEuNCAxOS42LTEwLjcgMS4xLjYgNi40IDE1LTQuOSAyNS45IDQwLjMgMy41IDcyLjIgMjQuNyA5NiA1MC43IDM2LjEgMS41IDcxLjggNS45IDc3LjEgMzQgMi43LjYgMTEuNi44IDEyLjcgMi42LjMuNSAyLjEgOC4xIDIuNCAxNS40LS41IDEzLjktNi44IDI1LjQtMjMuNiAyMy4xLTMuMiAxNy4zLTIuNyAzMi45LTguNyA0Ny43IDIuNCAxMS43IDQgMjMuOCA0LjggMzYuNCAzNyAyNS40IDcwLjMgNDIuNSA2MC4zIDY2Ljl6TTIwNy40IDE1OS45Yy45LTQ0LTM3LjktNDIuMi03OC42LTQwLjMtMjEuNyAxLTM4LjkgMS45LTQ1LjUgMTMuOS0xMS40IDIwLjkgNS45IDkyLjkgMjMuMiAxMDEuMiA5LjggNC43IDczLjQgNy45IDg2LjMtNy4xIDguMi05LjQgMTUtNDkuNCAxNC42LTY3Ljd6bTUyIDU4LjNjLTQuMy0xMi40LTYtMzAuMS0xNS4zLTMyLjctMi0uNS05LS41LTExIDAtMTAgMi44LTEwLjggMjIuMS0xNyAzNy4yIDE1LjQgMCAxOS4zIDkuNyAyMy43IDkuNyA0LjMgMCA2LjMtMTEuMyAxOS42LTE0LjJ6bTEzNS43LTg0LjdjLTYuNi0xMi4xLTI0LjgtMTIuOS00Ni41LTEzLjktNDAuMi0xLjktNzguMi0zLjgtNzcuMyA0MC4zLS41IDE4LjMgNSA1OC4zIDEzLjIgNjcuOCAxMyAxNC45IDc2LjYgMTEuOCA4Ni4zIDcuMSAxNS44LTcuNiAzNi41LTc4LjkgMjQuMy0xMDEuM3pcIl0sZWJheTpbNjQwLDUxMixbXSxcImY0ZjRcIixcIk00MDUuMiAyNjMuOGMtMjkuMS45LTQ3LjIgNi4yLTQ3LjIgMjUuMyAwIDEyLjQgOS45IDI1LjggMzUgMjUuOCAzMy43IDAgNTEuNi0xOC40IDUxLjYtNDguNHYtMy4zYy0xMS44IDAtMjYuMy4xLTM5LjQuNm03MS41IDM5LjdjMCA5LjMuMyAxOC42IDEgMjYuOGgtMjkuOGMtLjgtNi45LTEuMS0xMy42LTEuMS0yMC4yLTE2LjEgMTkuOC0zNS4zIDI1LjUtNjEuOSAyNS41LTM5LjUgMC02MC42LTIwLjktNjAuNi00NSAwLTM1IDI4LjgtNDcuMyA3OC42LTQ4LjQgMTMuNy0uMyAyOS0uNCA0MS43LS40di0zLjRjMC0yMy40LTE1LTMzLTQxLTMzLTE5LjMgMC0zMy42IDgtMzUgMjEuOGgtMzMuN2MzLjYtMzQuNCAzOS43LTQzLjEgNzEuNS00My4xIDM4LjEgMCA3MC4zIDEzLjUgNzAuMyA1My44djY1LjZ6bS0zNDktNTYuOGMtMi4zLTU0LjctODcuNS01Ni42LTk0LjQgMGg5NC40em0tOTUgMjEuNGMzLjUgNTguMyA3OS4yIDU3LjQgOTEuMiAyMS42SDE1N2MtNi40IDM0LjQtNDMgNDYuMS03NC40IDQ2LjEtNTcuMiAwLTgyLjUtMzEuNS04Mi41LTc0IDAtNDYuOCAyNi4yLTc3LjYgODMtNzcuNiA0NS4zIDAgNzguNCAyMy43IDc4LjQgNzUuNHY4LjVIMzIuN3ptMjExIDQ1LjdjMjkuOCAwIDUwLjItMjEuNSA1MC4yLTUzLjggMC0zMi40LTIwLjQtNTMuOC01MC4yLTUzLjgtMjkuNiAwLTUwLjIgMjEuNC01MC4yIDUzLjggMCAzMi4zIDIwLjYgNTMuOCA1MC4yIDUzLjhtLTgyLjItMTg2aDMyLjF2ODAuNmMxNS43LTE4LjcgMzcuNC0yNC4yIDU4LjctMjQuMiAzNS43IDAgNzUuNCAyNC4xIDc1LjQgNzYuMiAwIDQzLjYtMzEuNSA3NS40LTc2IDc1LjQtMjMuMyAwLTQ1LjEtOC4zLTU4LjctMjQuOSAwIDYuNi0uNCAxMy4yLTEuMSAxOS41aC0zMS41Yy41LTEwLjIgMS4xLTIyLjggMS4xLTMzLjFWMTI3Ljh6TTY0MCAxODkuNWwtOTkuMiAxOTQuOGgtMzUuOWwyOC41LTU0LjEtNzQuNi0xNDAuN2gzNy41bDU0LjkgMTA5LjlMNjA2IDE4OS41aDM0elwiXSxlZGdlOls1MTIsNTEyLFtdLFwiZjI4MlwiLFwiTTI1LjcxNCAyMjguMTYzYy4xMTEtLjE2Mi4yMy0uMzIzLjM0Mi0uNDg1LS4wMjEuMTYyLS4wNDUuMzIzLS4wNjUuNDg1aC0uMjc3em00NjAuNTcyIDE1LjUwOGMwLTQ0LjAzMi03Ljc1NC04NC40NjUtMjguODAxLTEyMi40MDVDNDE2LjQ5OCA0Ny44NzkgMzQzLjkxMiA4LjAwMSAyNTguODkzIDguMDAxIDExOC45NjIgNy43MjQgNDAuNjE3IDExMy4yMTQgMjYuMDU2IDIyNy42NzljNDIuNDI5LTYxLjMxMiAxMTcuMDczLTEyMS4zNzYgMjIwLjM3NS0xMjQuOTY2IDAgMCAxMDkuNjY2IDAgOTkuNDE5IDEwNC45NTdIMTY5Ljk5N2M2LjM2OS0zNy4zODYgMTguNTU0LTU4Ljk4NiAzNC4zMzktNzguOTI2LTc1LjA0OCAzNC44OTMtMTIxLjg1IDk2LjA5Ni0xMjAuNzQyIDE4OC4zMTUuODMgNzEuNDQ4IDUwLjEyNCAxNDQuODM2IDEyMC43NDMgMTcxLjk3NiA4My4zNTcgMzEuODQ3IDE5Mi43NzYgNy4yIDI0MC4xMzItMjEuMzI0VjM2My4zMDdjLTgwLjg2NCA1Ni40OTQtMjcwLjg3MSA2MC45MjUtMjcyLjI1NS02Ny41NzJoMzE0LjA3M3YtNTIuMDY0elwiXSxlbGVtZW50b3I6WzQ0OCw1MTIsW10sXCJmNDMwXCIsXCJNNDI1LjYgMzJIMjIuNEMxMCAzMiAwIDQyIDAgNTQuNHY0MDMuMkMwIDQ3MCAxMCA0ODAgMjIuNCA0ODBoNDAzLjJjMTIuNCAwIDIyLjQtMTAgMjIuNC0yMi40VjU0LjRDNDQ4IDQyIDQzOCAzMiA0MjUuNiAzMk0xNjQuMyAzNTUuNWgtMzkuOHYtMTk5aDM5Ljh2MTk5em0xNTkuMyAwSDIwNC4xdi0zOS44aDExOS41djM5Ljh6bTAtNzkuNkgyMDQuMXYtMzkuOGgxMTkuNXYzOS44em0wLTc5LjdIMjA0LjF2LTM5LjhoMTE5LjV2MzkuOHpcIl0sZW1iZXI6WzY0MCw1MTIsW10sXCJmNDIzXCIsXCJNNjM5LjkgMjU0LjZjLTEuMS0xMC43LTEwLjctNi44LTEwLjctNi44cy0xNS42IDEyLjEtMjkuMyAxMC43Yy0xMy43LTEuMy05LjQtMzItOS40LTMyczMtMjguMS01LjEtMzAuNGMtOC4xLTIuNC0xOCA3LjMtMTggNy4zcy0xMi40IDEzLjctMTguMyAzMS4ybC0xLjYuNXMxLjktMzAuNi0uMy0zNy42Yy0xLjYtMy41LTE2LjQtMy4yLTE4LjggM3MtMTQuMiA0OS4yLTE1IDY3LjJjMCAwLTIzLjEgMTkuNi00My4zIDIyLjhzLTI1LTkuNC0yNS05LjQgNTQuOC0xNS4zIDUyLjktNTkuMWMtMS45LTQzLjgtNDQuMi0yNy42LTQ5LTI0LTQuNiAzLjUtMjkuNCAxOC40LTM2LjYgNTkuNy0uMiAxLjQtLjcgNy41LS43IDcuNXMtMjEuMiAxNC4yLTMzIDE4YzAgMCAzMy01NS42LTcuMy04MC45LTE4LjMtMTEtMzIuOCAxMi4xLTMyLjggMTIuMXM1NC41LTYwLjcgNDIuNS0xMTJjLTUuOC0yNC40LTE4LTI3LjEtMjkuMi0yMy4xLTE3IDYuNy0yMy41IDE2LjctMjMuNSAxNi43cy0yMiAzMi0yNy4xIDc5LjUtMTIuNiAxMDUuMS0xMi42IDEwNS4xLTEwLjUgMTAuMi0yMC4yIDEwLjctNS40LTI4LjctNS40LTI4LjcgNy41LTQ0LjYgNy01Mi4xLTEuMS0xMS42LTkuOS0xNC4yYy04LjktMi43LTE4LjUgOC42LTE4LjUgOC42cy0yNS41IDM4LjctMjcuNyA0NC42bC0xLjMgMi40LTEuMy0xLjZzMTgtNTIuNy44LTUzLjVjLTE3LjItLjgtMjguNSAxOC44LTI4LjUgMTguOHMtMTkuNiAzMi44LTIwLjQgMzYuNWwtMS4zLTEuNnM4LjEtMzguMiA2LjQtNDcuNmMtMS42LTkuNC0xMC41LTcuNS0xMC41LTcuNXMtMTEuMy0xLjMtMTQuMiA1LjktMTMuNyA1NS4zLTE1IDcwLjdjMCAwLTI4LjIgMjAuMi00Ni44IDIwLjQtMTguNS4zLTE2LjctMTEuOC0xNi43LTExLjhzNjgtMjMuMyA0OS40LTY5LjJjLTguMy0xMS44LTE4LTE1LjUtMzEuNy0xNS4zLTEzLjcuMy0zMC4zIDguNi00MS4zIDMzLjMtNS4zIDExLjgtNi44IDIzLTcuOCAzMS41IDAgMC0xMi4zIDIuNC0xOC44LTIuOXMtMTAgMC0xMCAwLTExLjIgMTQtLjEgMTguMyAyOC4xIDYuMSAyOC4xIDYuMWMxLjYgNy41IDYuMiAxOS41IDE5LjYgMjkuNyAyMC4yIDE1LjMgNTguOC0xLjMgNTguOC0xLjNsMTUuOS04LjhzLjUgMTQuNiAxMi4xIDE2LjdjMTEuNiAyLjEgMTYuNCAxIDM2LjUtNDcuOSAxMS44LTI1IDEyLjYtMjMuNiAxMi42LTIzLjZsMS4zLS4zcy05LjEgNDYuOC01LjYgNTkuN0MxODcuNyAzMTkuNCAyMDMgMzE4IDIwMyAzMThzOC4zIDIuNCAxNS0yMS4yYzYuNy0yMy42IDE5LjYtNDkuOSAxOS42LTQ5LjloMS42cy01LjYgNDguMSAzIDYzLjdjOC42IDE1LjYgMzAuOSA1LjMgMzAuOSA1LjNzMTUuNi03LjggMTgtMTAuMmMwIDAgMTguNSAxNS44IDQ0LjYgMTIuOSA1OC4zLTExLjUgNzkuMS0yNS45IDc5LjEtMjUuOXMxMCAyNC40IDQxLjEgMjYuN2MzNS41IDIuNyA1NC44LTE4LjYgNTQuOC0xOC42cy0uMyAxMy41IDEyLjEgMTguNmMxMi40IDUuMSAyMC43LTIyLjggMjAuNy0yMi44bDIwLjctNTcuMmgxLjlzMS4xIDM3LjMgMjEuNSA0My4yIDQ3LTEzLjcgNDctMTMuNyA2LjQtMy41IDUuMy0xNC4zem0tNTc4IDUuM2MuOC0zMiAyMS44LTQ1LjkgMjktMzkgNy4zIDcgNC42IDIyLTkuMSAzMS40LTEzLjcgOS41LTE5LjkgNy42LTE5LjkgNy42em0yNzIuOC0xMjMuOHMxOS4xLTQ5LjcgMjMuNi0yNS41LTQwIDk2LjItNDAgOTYuMmMuNS0xNi4yIDE2LjQtNzAuNyAxNi40LTcwLjd6bTIyLjggMTM4LjRjLTEyLjYgMzMtNDMuMyAxOS42LTQzLjMgMTkuNnMtMy41LTExLjggNi40LTQ0LjkgMzMuMy0yMC4yIDMzLjMtMjAuMiAxNi4yIDEyLjQgMy42IDQ1LjV6bTg0LjYtMTQuNnMtMy0xMC41IDguMS0zMC42YzExLTIwLjIgMTkuNi05LjEgMTkuNi05LjFzOS40IDEwLjItMS4zIDI1LjUtMjYuNCAxNC4yLTI2LjQgMTQuMnpcIl0sZW1waXJlOls0OTYsNTEyLFtdLFwiZjFkMVwiLFwiTTI4Ny42IDU0LjJjLTEwLjgtMi4yLTIyLjEtMy4zLTMzLjUtMy42VjMyLjRjNzguMSAyLjIgMTQ2LjEgNDQgMTg0LjYgMTA2LjZsLTE1LjggOS4xYy02LjEtOS43LTEyLjctMTguOC0yMC4yLTI3LjFsLTE4IDE1LjVjLTI2LTI5LjYtNjEuNC01MC43LTEwMS45LTU4LjRsNC44LTIzLjl6TTUzLjQgMzIyLjRsMjMtNy43Yy02LjQtMTguMy0xMC0zOC4yLTEwLTU4LjdzMy4zLTQwLjQgOS43LTU4LjdsLTIyLjctNy43YzMuNi0xMC44IDguMy0yMS4zIDEzLjYtMzFsLTE1LjgtOS4xQzM0IDE4MSAyNC4xIDIxNy41IDI0LjEgMjU2czEwIDc1IDI3LjEgMTA2LjZsMTUuOC05LjFjLTUuMy0xMC05LjctMjAuMy0xMy42LTMxLjF6TTIxMy4xIDQzNGMtNDAuNC04LTc1LjgtMjkuMS0xMDEuOS01OC43bC0xOCAxNS44Yy03LjUtOC42LTE0LjQtMTcuNy0yMC4yLTI3LjRsLTE2IDkuNGMzOC41IDYyLjMgMTA2LjggMTA0LjMgMTg0LjkgMTA2LjZ2LTE4LjNjLTExLjMtLjMtMjIuNy0xLjctMzMuNS0zLjZsNC43LTIzLjh6TTkzLjMgMTIwLjlsMTggMTUuNWMyNi0yOS42IDYxLjQtNTAuNyAxMDEuOS01OC40bC00LjctMjMuOGMxMC44LTIuMiAyMi4xLTMuMyAzMy41LTMuNlYzMi40QzE2My45IDM0LjYgOTUuOSA3Ni40IDU3LjQgMTM5bDE1LjggOS4xYzYtOS43IDEyLjYtMTguOSAyMC4xLTI3LjJ6bTMwOS40IDI3MC4ybC0xOC0xNS44Yy0yNiAyOS42LTYxLjQgNTAuNy0xMDEuOSA1OC43bDQuNyAyMy44Yy0xMC44IDEuOS0yMi4xIDMuMy0zMy41IDMuNnYxOC4zYzc4LjEtMi4yIDE0Ni40LTQ0LjMgMTg0LjktMTA2LjZsLTE2LjEtOS40Yy01LjcgOS43LTEyLjYgMTguOC0yMC4xIDI3LjR6TTQ5NiAyNTZjMCAxMzctMTExIDI0OC0yNDggMjQ4UzAgMzkzIDAgMjU2IDExMSA4IDI0OCA4czI0OCAxMTEgMjQ4IDI0OHptLTEyLjIgMGMwLTEzMC4xLTEwNS43LTIzNS44LTIzNS44LTIzNS44UzEyLjIgMTI1LjkgMTIuMiAyNTYgMTE3LjkgNDkxLjggMjQ4IDQ5MS44IDQ4My44IDM4Ni4xIDQ4My44IDI1NnptLTM5LTEwNi42bC0xNS44IDkuMWM1LjMgOS43IDEwIDIwLjIgMTMuNiAzMWwtMjIuNyA3LjdjNi40IDE4LjMgOS43IDM4LjIgOS43IDU4LjdzLTMuNiA0MC40LTEwIDU4LjdsMjMgNy43Yy0zLjkgMTAuOC04LjMgMjEtMTMuNiAzMWwxNS44IDkuMUM0NjIgMzMxIDQ3MS45IDI5NC41IDQ3MS45IDI1NnMtOS45LTc1LTI3LjEtMTA2LjZ6bS0xODMgMTc3LjdjMTYuMy0zLjMgMzAuNC0xMS42IDQwLjctMjMuNWw1MS4yIDQ0LjhjMTEuOS0xMy42IDIxLjMtMjkuMyAyNy4xLTQ2LjhsLTY0LjItMjIuMWMyLjUtNy41IDMuOS0xNS4yIDMuOS0yMy41cy0xLjQtMTYuMS0zLjktMjMuNWw2NC41LTIyLjFjLTYuMS0xNy40LTE1LjUtMzMuMi0yNy40LTQ2LjhsLTUxLjIgNDQuOGMtMTAuMi0xMS45LTI0LjQtMjAuNS00MC43LTIzLjhsMTMuMy02Ni40Yy04LjYtMS45LTE3LjctMi44LTI3LjEtMi44LTkuNCAwLTE4LjUuOC0yNy4xIDIuOGwxMy4zIDY2LjRjLTE2LjMgMy4zLTMwLjQgMTEuOS00MC43IDIzLjhsLTUxLjItNDQuOGMtMTEuOSAxMy42LTIxLjMgMjkuMy0yNy40IDQ2LjhsNjQuNSAyMi4xYy0yLjUgNy41LTMuOSAxNS4yLTMuOSAyMy41czEuNCAxNi4xIDMuOSAyMy41bC02NC4yIDIyLjFjNS44IDE3LjQgMTUuMiAzMy4yIDI3LjEgNDYuOGw1MS4yLTQ0LjhjMTAuMiAxMS45IDI0LjQgMjAuMiA0MC43IDIzLjVsLTEzLjMgNjYuN2M4LjYgMS43IDE3LjcgMi44IDI3LjEgMi44IDkuNCAwIDE4LjUtMS4xIDI3LjEtMi44bC0xMy4zLTY2Ljd6XCJdLGVudmlyYTpbNDQ4LDUxMixbXSxcImYyOTlcIixcIk0wIDMyYzQ3Ny42IDAgMzY2LjYgMzE3LjMgMzY3LjEgMzY2LjNMNDQ4IDQ4MGgtMjZsLTcwLjQtNzEuMmMtMzkgNC4yLTEyNC40IDM0LjUtMjE0LjQtMzdDNDcgMzAwLjMgNTIgMjE0LjcgMCAzMnptNzkuNyA0NmMtNDkuNy0yMy41LTUuMiA5LjItNS4yIDkuMiA0NS4yIDMxLjIgNjYgNzMuNyA5MC4yIDExOS45IDMxLjUgNjAuMiA3OSAxMzkuNyAxNDQuMiAxNjcuNyA2NSAyOCAzNC4yIDEyLjUgNi04LjUtMjguMi0yMS4yLTY4LjItODctOTEtMTMwLjItMzEuNy02MC02MS0xMTguNi0xNDQuMi0xNTguMXpcIl0sZXJsYW5nOls2NDAsNTEyLFtdLFwiZjM5ZFwiLFwiTTIxLjcgMjQ2LjRjLS4xIDg2LjggMjkgMTU5LjUgNzguNyAyMTIuMUgwdi00MDVoODcuMmMtNDEuNSA1MC4yLTY1LjYgMTE2LjItNjUuNSAxOTIuOXpNNjQwIDUzLjZoLTgzLjZjMzEuNCA0Mi43IDQ4LjcgOTcuNSA0Ni4yIDE2Mi43LjUgNiAuNSAxMS43IDAgMjQuMUgyMzAuMmMtLjIgMTA5LjcgMzguOSAxOTQuOSAxMzguNiAxOTUuMyA2OC41LS4zIDExOC01MSAxNTEuOS0xMDYuMWw5Ni40IDQ4LjJjLTE3LjQgMzAuOS0zNi41IDU3LjgtNTcuOSA4MC44SDY0MHYtNDA1em0tODAuOCA0MDVzMC0uMSAwIDBoLS4yLjJ6bS0zLjEtNDA1aC4zbC0uMS0uMS0uMi4xem0tMjMwLjcgOS42Yy00NS45LjEtODUuMSAzMy41LTg5LjIgODMuMmgxNjkuOWMtMS4xLTQ5LjctMzQuNS04My4xLTgwLjctODMuMnpcIl0sZXRoZXJldW06WzMyMCw1MTIsW10sXCJmNDJlXCIsXCJNMzExLjkgMjYwLjhMMTYwIDM1My42IDggMjYwLjggMTYwIDBsMTUxLjkgMjYwLjh6TTE2MCAzODMuNEw4IDI5MC42IDE2MCA1MTJsMTUyLTIyMS40LTE1MiA5Mi44elwiXSxldHN5OlszODQsNTEyLFtdLFwiZjJkN1wiLFwiTTM4NCAzNDhjLTEuNzUgMTAuNzUtMTMuNzUgMTEwLTE1LjUgMTMyLTExNy44NzktNC4yOTktMjE5Ljg5NS00Ljc0My0zNjguNSAwdi0yNS41YzQ1LjQ1Ny04Ljk0OCA2MC42MjctOC4wMTkgNjEtMzUuMjUgMS43OTMtNzIuMzIyIDMuNTI0LTI0NC4xNDMgMC0zMjItMS4wMjktMjguNDYtMTIuMTMtMjYuNzY1LTYxLTM2di0yNS41YzczLjg4NiAyLjM1OCAyNTUuOTMzIDguNTUxIDM2Mi45OTktMy43NS0zLjUgMzguMjUtNy43NSAxMjYuNS03Ljc1IDEyNi41SDMzMkMzMjAuOTQ3IDExNS42NjUgMzEzLjI0MSA2OCAyNzcuMjUgNjhoLTEzN2MtMTAuMjUgMC0xMC43NSAzLjUtMTAuNzUgOS43NVYyNDEuNWM1OCAuNSA4OC41LTIuNSA4OC41LTIuNSAyOS43Ny0uOTUxIDI3LjU2LTguNTAyIDQwLjc1LTY1LjI1MWgyNS43NWMtNC40MDcgMTAxLjM1MS0zLjkxIDYxLjgyOS0xLjc1IDE2MC4yNUgyNTdjLTkuMTU1LTQwLjA4Ni05LjA2NS02MS4wNDUtMzkuNTAxLTYxLjUgMCAwLTIxLjUtMi04OC0ydjEzOWMwIDI2IDE0LjI1IDM4LjI1IDQ0LjI1IDM4LjI1SDI2M2M2My42MzYgMCA2Ni41NjQtMjQuOTk2IDk4Ljc1MS05OS43NUgzODR6XCJdLGV4cGVkaXRlZHNzbDpbNDk2LDUxMixbXSxcImYyM2VcIixcIk0yNDggNDMuNEMxMzAuNiA0My40IDM1LjQgMTM4LjYgMzUuNCAyNTZTMTMwLjYgNDY4LjYgMjQ4IDQ2OC42IDQ2MC42IDM3My40IDQ2MC42IDI1NiAzNjUuNCA0My40IDI0OCA0My40em0tOTcuNCAxMzIuOWMwLTUzLjcgNDMuNy05Ny40IDk3LjQtOTcuNHM5Ny40IDQzLjcgOTcuNCA5Ny40djI2LjZjMCA1LTMuOSA4LjktOC45IDguOWgtMTcuN2MtNSAwLTguOS0zLjktOC45LTguOXYtMjYuNmMwLTgyLjEtMTI0LTgyLjEtMTI0IDB2MjYuNmMwIDUtMy45IDguOS04LjkgOC45aC0xNy43Yy01IDAtOC45LTMuOS04LjktOC45di0yNi42ek0zODkuNyAzODBjMCA5LjctOCAxNy43LTE3LjcgMTcuN0gxMjRjLTkuNyAwLTE3LjctOC0xNy43LTE3LjdWMjM4LjNjMC05LjcgOC0xNy43IDE3LjctMTcuN2gyNDhjOS43IDAgMTcuNyA4IDE3LjcgMTcuN1YzODB6bS0yNDgtMTM3LjN2MTMyLjljMCAyLjUtMS45IDQuNC00LjQgNC40aC04LjljLTIuNSAwLTQuNC0xLjktNC40LTQuNFYyNDIuN2MwLTIuNSAxLjktNC40IDQuNC00LjRoOC45YzIuNSAwIDQuNCAxLjkgNC40IDQuNHptMTQxLjcgNDguN2MwIDEzLTcuMiAyNC40LTE3LjcgMzAuNHYzMS42YzAgNS0zLjkgOC45LTguOSA4LjloLTE3LjdjLTUgMC04LjktMy45LTguOS04Ljl2LTMxLjZjLTEwLjUtNi4xLTE3LjctMTcuNC0xNy43LTMwLjQgMC0xOS43IDE1LjgtMzUuNCAzNS40LTM1LjRzMzUuNSAxNS44IDM1LjUgMzUuNHpNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMCA0NzguM0MxMjEgNDg2LjMgMTcuNyAzODMgMTcuNyAyNTZTMTIxIDI1LjcgMjQ4IDI1LjcgNDc4LjMgMTI5IDQ3OC4zIDI1NiAzNzUgNDg2LjMgMjQ4IDQ4Ni4zelwiXSxmYWNlYm9vazpbNDQ4LDUxMixbXSxcImYwOWFcIixcIk00NDggNTYuN3YzOTguNWMwIDEzLjctMTEuMSAyNC43LTI0LjcgMjQuN0gzMDkuMVYzMDYuNWg1OC4ybDguNy02Ny42aC02N3YtNDMuMmMwLTE5LjYgNS40LTMyLjkgMzMuNS0zMi45aDM1Ljh2LTYwLjVjLTYuMi0uOC0yNy40LTIuNy01Mi4yLTIuNy01MS42IDAtODcgMzEuNS04NyA4OS40djQ5LjloLTU4LjR2NjcuNmg1OC40VjQ4MEgyNC43QzExLjEgNDgwIDAgNDY4LjkgMCA0NTUuM1Y1Ni43QzAgNDMuMSAxMS4xIDMyIDI0LjcgMzJoMzk4LjVjMTMuNyAwIDI0LjggMTEuMSAyNC44IDI0Ljd6XCJdLFwiZmFjZWJvb2stZlwiOlsyNjQsNTEyLFtdLFwiZjM5ZVwiLFwiTTc2LjcgNTEyVjI4M0gwdi05MWg3Ni43di03MS43Qzc2LjcgNDIuNCAxMjQuMyAwIDE5My44IDBjMzMuMyAwIDYxLjkgMi41IDcwLjIgMy42Vjg1aC00OC4yYy0zNy44IDAtNDUuMSAxOC00NS4xIDQ0LjNWMTkySDI1NmwtMTEuNyA5MWgtNzMuNnYyMjlcIl0sXCJmYWNlYm9vay1tZXNzZW5nZXJcIjpbNDQ4LDUxMixbXSxcImYzOWZcIixcIk0yMjQgMzJDMTUuOSAzMi03Ny41IDI3OCA4NC42IDQwMC42VjQ4MGw3NS43LTQyYzE0Mi4yIDM5LjggMjg1LjQtNTkuOSAyODUuNC0xOTguN0M0NDUuOCAxMjQuOCAzNDYuNSAzMiAyMjQgMzJ6bTIzLjQgMjc4LjFMMTkwIDI1MC41IDc5LjYgMzExLjZsMTIxLjEtMTI4LjUgNTcuNCA1OS42IDExMC40LTYxLjEtMTIxLjEgMTI4LjV6XCJdLFwiZmFjZWJvb2stc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMDgyXCIsXCJNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGgtODUuM1YzMDIuOGg2MC42bDguNy02Ny42aC02OS4zVjE5MmMwLTE5LjYgNS40LTMyLjkgMzMuNS0zMi45SDM4NFY5OC43Yy02LjItLjgtMjcuNC0yLjctNTIuMi0yLjctNTEuNiAwLTg3IDMxLjUtODcgODkuNHY0OS45SDE4NHY2Ny42aDYwLjlWNDgwSDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGgzNTJjMjYuNSAwIDQ4IDIxLjUgNDggNDh6XCJdLGZpcmVmb3g6WzQ4MCw1MTIsW10sXCJmMjY5XCIsXCJNNDc4LjEgMjM1LjNjLS43LTQuNS0xLjQtNy4xLTEuNC03LjFzLTEuOCAyLTQuNyA1LjljLS45LTEwLjctMi44LTIxLjItNS44LTMxLjYtMy43LTEyLjktOC41LTI1LjQtMTQuNS0zNy40LTMuOC04LTguMi0xNS42LTEzLjMtMjIuOC0xLjgtMi43LTMuNy01LjQtNS42LTcuOS04LjgtMTQuNC0xOS0yMy4zLTMwLjctNDAtNy42LTEyLjgtMTIuOS0yNi45LTE1LjQtNDEuNi0zLjIgOC45LTUuNyAxOC03LjQgMjcuMy0xMi4xLTEyLjItMjIuNS0yMC44LTI4LjktMjYuN0MzMTkuNCAyNC4yIDMyMyA5LjEgMzIzIDkuMVMyNjQuNyA3NC4yIDI4OS45IDE0MmM4LjcgMjMgMjMuOCA0My4xIDQzLjQgNTcuOSAyNC40IDIwLjIgNTAuOCAzNiA2NC43IDc2LjYtMTEuMi0yMS4zLTI4LjEtMzkuMi00OC44LTUxLjUgNi4yIDE0LjcgOS40IDMwLjYgOS4zIDQ2LjUgMCA2MS00OS42IDExMC41LTExMC42IDExMC40LTguMyAwLTE2LjUtLjktMjQuNS0yLjgtOS41LTEuOC0xOC43LTQuOS0yNy40LTkuMy0xMi45LTcuOC0yNC0xOC4xLTMyLjgtMzAuM2wtLjItLjMgMiAuN2M0LjYgMS42IDkuMiAyLjggMTQgMy43IDE4LjcgNCAzOC4zIDEuNyA1NS42LTYuNiAxNy41LTkuNyAyOC0xNi45IDM2LjYtMTRoLjJjOC40IDIuNyAxNS01LjUgOS0xNC0xMC40LTEzLjQtMjcuNC0yMC00NC4yLTE3LTE3LjUgMi41LTMzLjUgMTUtNTYuNCAyLjktMS41LS44LTIuOS0xLjYtNC4zLTIuNS0xLjYtLjkgNC45IDEuMyAzLjQuMy01LTIuNS05LjgtNS40LTE0LjQtOC42LS4zLS4zIDMuNSAxLjEgMy4xLjgtNS45LTQtMTEtOS4yLTE1LTE1LjItNC4xLTcuNC00LjUtMTYuNC0xLTI0LjEgMi4xLTMuOCA1LjQtNi45IDkuMy04LjcgMyAxLjUgNC44IDIuNiA0LjggMi42cy0xLjMtMi41LTIuMS0zLjhjLjMtLjEuNSAwIC44LS4yIDIuNiAxLjEgOC4zIDQgMTEuNCA1LjggMi4xIDEuMSAzLjggMi43IDUuMiA0LjcgMCAwIDEtLjUuMy0yLjctMS4xLTIuNy0yLjktNS01LjQtNi42aC4yYzIuMyAxLjIgNC41IDIuNiA2LjYgNC4xIDEuOS00LjQgMi44LTkuMiAyLjYtMTQgLjItMi42LS4yLTUuMy0xLjEtNy44LS44LTEuNi41LTIuMiAxLjktLjUtLjItMS4zLS43LTIuNS0xLjItMy43di0uMXMuOC0xLjEgMS4yLTEuNWMxLTEgMi4xLTEuOSAzLjQtMi43IDcuMi00LjUgMTQuOC04LjQgMjIuNy0xMS42IDYuNC0yLjggMTEuNy00LjkgMTIuOC01LjYgMS42LTEgMy4xLTIuMiA0LjUtMy41IDUuMy00LjUgOS0xMC44IDEwLjItMTcuNy4xLS45LjItMS44LjMtMi44di0xLjVjLS45LTMuNS02LjktNi4xLTM4LjQtOS4xLTExLjEtMS44LTIwLTEwLjEtMjIuNS0yMS4xdi4xYy0uNCAxLjEtLjkgMi4zLTEuMyAzLjUuNC0xLjIuOC0yLjMgMS4zLTMuNXYtLjJjNi0xNS43IDE2LjgtMjkuMSAzMC44LTM4LjMuOC0uNy0zLjIuMi0yLjQtLjUgMi43LTEuMyA1LjQtMi41IDguMi0zLjUgMS40LS42LTYtMy40LTEyLjYtMi43LTQgLjItOCAxLjItMTEuNyAyLjggMS42LTEuMyA2LjItMy4xIDUuMS0zLjEtOC40IDEuNi0xNi41IDQuNy0yMy45IDkgMC0uOC4xLTEuNS41LTIuMi01LjkgMi41LTExIDYuNS0xNSAxMS41LjEtLjkuMi0xLjguMi0yLjctMi43IDItNS4yIDQuMy03LjMgNi45bC0uMS4xYy0xNy40LTYuNy0zNi4zLTguMy01NC42LTQuN2wtLjItLjFoLjJjLTMuOC0zLjEtNy4xLTYuNy05LjctMTAuOWwtLjIuMS0uNC0uMmMtMS4yLTEuOC0yLjQtMy44LTMuNy02LS45LTEuNi0xLjgtMy40LTIuNy01LjIgMC0uMS0uMS0uMi0uMi0uMi0uNCAwLS42IDEuNy0uOSAxLjN2LS4xYy0zLjItOC4zLTQuNy0xNy4yLTQuNC0yNi4ybC0uMi4xYy01LjEgMy41LTkgOC42LTExLjEgMTQuNS0uOSAyLjEtMS42IDMuMy0yLjIgNC41di0uNWMuMS0xLjEuNi0zLjMuNS0zLjEtLjEuMi0uMi4zLS4zLjQtMS41IDEuNy0yLjkgMy43LTMuOSA1LjgtLjkgMS45LTEuNyAzLjktMi4zIDUuOS0uMS4zIDAtLjMgMC0xcy4xLTIgMC0xLjdsLS4zLjdjLTYuNyAxNC45LTEwLjkgMzAuOC0xMi40IDQ3LjEtLjQgMi44LS42IDUuNi0uNSA4LjN2LjJjLTQuOCA1LjItOSAxMS0xMi43IDE3LjEtMTIuMSAyMC40LTIxLjEgNDIuNS0yNi44IDY1LjYgNC04LjggOC44LTE3LjIgMTQuMy0yNS4xQzUuNSAyMjguNSAwIDI1Ny40IDAgMjg2LjZjMS44LTguNiA0LjItMTcgNy0yNS4zLTEuNyAzNC41IDQuOSA2OC45IDE5LjQgMTAwLjMgMTkuNCA0My41IDUxLjYgODAgOTIuMyAxMDQuNyAxNi42IDExLjIgMzQuNyAxOS45IDUzLjggMjUuOCAyLjUuOSA1LjEgMS44IDcuNyAyLjctLjgtLjMtMS42LS43LTIuNC0xIDIyLjYgNi44IDQ2LjIgMTAuMyA2OS44IDEwLjMgODMuNyAwIDExMS4zLTMxLjkgMTEzLjgtMzUgNC4xLTMuNyA3LjUtOC4yIDkuOS0xMy4zIDEuNi0uNyAzLjItMS40IDQuOS0yLjFsMS0uNSAxLjktLjljMTIuNi01LjkgMjQuNS0xMy40IDM1LjMtMjIuMSAxNi4zLTExLjcgMjcuOS0yOC43IDMyLjktNDguMSAzLTcuMSAzLjEtMTUgLjQtMjIuMi45LTEuNCAxLjctMi44IDIuNy00LjMgMTgtMjguOSAyOC4yLTYxLjkgMjkuNi05NS45di0yLjhjMC03LjMtLjYtMTQuNS0xLjktMjEuNnpcIl0sXCJmaXJzdC1vcmRlclwiOls0NDgsNTEyLFtdLFwiZjJiMFwiLFwiTTEyLjkgMjI5LjJjLjEtLjEuMi0uMy4zLS40IDAgLjEgMCAuMy0uMS40aC0uMnpNMjI0IDk2LjZjLTcuMSAwLTE0LjYuNi0yMS40IDEuN2wzLjcgNjcuNC0yMi02NGMtMTQuMyAzLjctMjcuNyA5LjQtNDAgMTYuNmwyOS40IDYxLjQtNDUuMS01MC45Yy0xMS40IDguOS0yMS43IDE5LjEtMzAuNiAzMC45bDUwLjYgNDUuNC02MS4xLTI5LjdjLTcuMSAxMi4zLTEyLjkgMjUuNy0xNi42IDQwbDY0LjMgMjIuNi02OC00Yy0uOSA3LjEtMS40IDE0LjYtMS40IDIycy42IDE0LjYgMS40IDIxLjdsNjcuNy00LTY0IDIyLjZjMy43IDE0LjMgOS40IDI3LjcgMTYuNiA0MC4zbDYxLjEtMjkuN0w5Ny43IDM1MmM4LjkgMTEuNyAxOS4xIDIyLjMgMzAuOSAzMC45bDQ0LjktNTAuOS0yOS41IDYxLjRjMTIuMyA3LjQgMjUuNyAxMy4xIDQwIDE2LjlsMjIuMy02NC42LTQgNjhjNy4xIDEuMSAxNC42IDEuNyAyMS43IDEuNyA3LjQgMCAxNC42LS42IDIxLjctMS43bC00LTY4LjYgMjIuNiA2NS4xYzE0LjMtNCAyNy43LTkuNCA0MC0xNi45TDI3NC45IDMzMmw0NC45IDUwLjljMTEuNy04LjkgMjItMTkuMSAzMC42LTMwLjlsLTUwLjYtNDUuMSA2MS4xIDI5LjRjNy4xLTEyLjMgMTIuOS0yNS43IDE2LjYtNDAuM2wtNjQtMjIuMyA2Ny40IDRjMS4xLTcuMSAxLjQtMTQuMyAxLjQtMjEuN3MtLjMtMTQuOS0xLjQtMjJsLTY3LjcgNCA2NC0yMi4zYy0zLjctMTQuMy05LjEtMjgtMTYuNi00MC4zbC02MC45IDI5LjcgNTAuNi00NS40Yy04LjktMTEuNy0xOS4xLTIyLTMwLjYtMzAuOWwtNDUuMSA1MC45IDI5LjQtNjEuMWMtMTIuMy03LjQtMjUuNy0xMy4xLTQwLTE2LjlMMjQxLjcgMTY2bDQtNjcuN2MtNy4xLTEuMi0xNC4zLTEuNy0yMS43LTEuN3pNNDQzLjQgMTI4djI1NkwyMjQgNTEyIDQuNiAzODRWMTI4TDIyNCAwbDIxOS40IDEyOHptLTE3LjEgMTAuM0wyMjQgMjAuOSAyMS43IDEzOC4zdjIzNS4xTDIyNCA0OTEuMWwyMDIuMy0xMTcuN1YxMzguM3pNMjI0IDM3LjFsMTg3LjcgMTA5LjR2MjE4LjlMMjI0IDQ3NC45IDM2LjMgMzY1LjRWMTQ2LjZMMjI0IDM3LjF6bTAgNTAuOWMtOTIuMyAwLTE2Ni45IDc1LjEtMTY2LjkgMTY4IDAgOTIuNiA3NC42IDE2Ny43IDE2Ni45IDE2Ny43IDkyIDAgMTY2LjktNzUuMSAxNjYuOS0xNjcuNyAwLTkyLjktNzQuOS0xNjgtMTY2LjktMTY4elwiXSxcImZpcnN0LW9yZGVyLWFsdFwiOls0OTYsNTEyLFtdLFwiZjUwYVwiLFwiTTI0OCA4QzExMS4wMyA4IDAgMTE5LjAzIDAgMjU2czExMS4wMyAyNDggMjQ4IDI0OCAyNDgtMTExLjAzIDI0OC0yNDhTMzg0Ljk3IDggMjQ4IDh6bTAgNDg4LjIxQzExNS4zNCA0OTYuMjEgNy43OSAzODguNjYgNy43OSAyNTZTMTE1LjM0IDE1Ljc5IDI0OCAxNS43OSA0ODguMjEgMTIzLjM0IDQ4OC4yMSAyNTYgMzgwLjY2IDQ5Ni4yMSAyNDggNDk2LjIxem0wLTQ1OS45MkMxMjYuNjYgMzYuMjkgMjguMjkgMTM0LjY2IDI4LjI5IDI1NlMxMjYuNjYgNDc1LjcxIDI0OCA0NzUuNzEgNDY3LjcxIDM3Ny4zNCA0NjcuNzEgMjU2IDM2OS4zNCAzNi4yOSAyNDggMzYuMjl6bTAgNDMxLjIyYy0xMTYuODEgMC0yMTEuNTEtOTQuNjktMjExLjUxLTIxMS41MVMxMzEuMTkgNDQuNDkgMjQ4IDQ0LjQ5IDQ1OS41MSAxMzkuMTkgNDU5LjUxIDI1NiAzNjQuODEgNDY3LjUxIDI0OCA0NjcuNTF6bTE4Ni4yMy0xNjIuOThhMTkxLjYxMyAxOTEuNjEzIDAgMCAxLTIwLjEzIDQ4LjY5bC03NC4xMy0zNS44OCA2MS40OCA1NC44MmExOTMuNTE1IDE5My41MTUgMCAwIDEtMzcuMiAzNy4yOWwtNTQuOC02MS41NyAzNS44OCA3NC4yN2ExOTAuOTQ0IDE5MC45NDQgMCAwIDEtNDguNjMgMjAuMjNsLTI3LjI5LTc4LjQ3IDQuNzkgODIuOTNjLTguNjEgMS4xOC0xNy40IDEuOC0yNi4zMyAxLjhzLTE3LjcyLS42Mi0yNi4zMy0xLjhsNC43Ni04Mi40Ni0yNy4xNSA3OC4wM2ExOTEuMzY1IDE5MS4zNjUgMCAwIDEtNDguNjUtMjAuMmwzNS45My03NC4zNC01NC44NyA2MS42NGExOTMuODUgMTkzLjg1IDAgMCAxLTM3LjIyLTM3LjI4bDYxLjU5LTU0LjktNzQuMjYgMzUuOTNhMTkxLjYzOCAxOTEuNjM4IDAgMCAxLTIwLjE0LTQ4LjY5bDc3Ljg0LTI3LjExLTgyLjIzIDQuNzZjLTEuMTYtOC41Ny0xLjc4LTE3LjMyLTEuNzgtMjYuMjEgMC05IC42My0xNy44NCAxLjgyLTI2LjUxbDgyLjM4IDQuNzctNzcuOTQtMjcuMTZhMTkxLjcyNiAxOTEuNzI2IDAgMCAxIDIwLjIzLTQ4LjY3bDc0LjIyIDM1LjkyLTYxLjUyLTU0Ljg2YTE5My44NSAxOTMuODUgMCAwIDEgMzcuMjgtMzcuMjJsNTQuNzYgNjEuNTMtMzUuODMtNzQuMTdhMTkxLjQ5IDE5MS40OSAwIDAgMSA0OC42NS0yMC4xM2wyNi44NyA3Ny4yNS00LjcxLTgxLjYxYzguNjEtMS4xOCAxNy4zOS0xLjggMjYuMzItMS44czE3LjcxLjYyIDI2LjMyIDEuOGwtNC43NCA4Mi4xNiAyNy4wNS03Ny43NmMxNy4yNyA0LjUgMzMuNiAxMS4zNSA0OC42MyAyMC4xN2wtMzUuODIgNzQuMTIgNTQuNzItNjEuNDdhMTkzLjEzIDE5My4xMyAwIDAgMSAzNy4yNCAzNy4yM2wtNjEuNDUgNTQuNzcgNzQuMTItMzUuODZhMTkxLjUxNSAxOTEuNTE1IDAgMCAxIDIwLjIgNDguNjVsLTc3LjgxIDI3LjEgODIuMjQtNC43NWMxLjE5IDguNjYgMS44MiAxNy41IDEuODIgMjYuNDkgMCA4Ljg4LS42MSAxNy42My0xLjc4IDI2LjE5bC04Mi4xMi00Ljc1IDc3LjcyIDI3LjA5elwiXSxmaXJzdGRyYWZ0OlszODQsNTEyLFtdLFwiZjNhMVwiLFwiTTM4NCAxOTJoLTY0djEyOEgxOTJ2MTI4SDB2LTI1LjZoMTY2LjR2LTEyOGgxMjh2LTEyOEgzODRWMTkyem0tMjUuNiAzOC40djEyOGgtMTI4djEyOEg2NFY1MTJoMTkyVjM4NGgxMjhWMjMwLjRoLTI1LjZ6bTI1LjYgMTkyaC04OS42VjUxMkgzMjB2LTY0aDY0di0yNS42ek0wIDB2Mzg0aDEyOFYyNTZoMTI4VjEyOGgxMjhWMEgwelwiXSxmbGlja3I6WzQ0OCw1MTIsW10sXCJmMTZlXCIsXCJNNDAwIDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHpNMTQ0LjUgMzE5Yy0zNS4xIDAtNjMuNS0yOC40LTYzLjUtNjMuNXMyOC40LTYzLjUgNjMuNS02My41IDYzLjUgMjguNCA2My41IDYzLjUtMjguNCA2My41LTYzLjUgNjMuNXptMTU5IDBjLTM1LjEgMC02My41LTI4LjQtNjMuNS02My41czI4LjQtNjMuNSA2My41LTYzLjUgNjMuNSAyOC40IDYzLjUgNjMuNS0yOC40IDYzLjUtNjMuNSA2My41elwiXSxmbGlwYm9hcmQ6WzQ0OCw1MTIsW10sXCJmNDRkXCIsXCJNMCAzMnY0NDhoNDQ4VjMySDB6bTM1OC40IDE3OS4yaC04OS42djg5LjZoLTg5LjZ2ODkuNkg4OS42VjEyMS42aDI2OC44djg5LjZ6XCJdLGZseTpbMzg0LDUxMixbXSxcImY0MTdcIixcIk0xOTcuOCA0MjcuOGMxMi45IDExLjcgMzMuNyAzMy4zIDMzLjIgNTAuNyAwIC44LS4xIDEuNi0uMSAyLjUtMS44IDE5LjgtMTguOCAzMS4xLTM5LjEgMzEtMjUtLjEtMzkuOS0xNi44LTM4LjctMzUuOCAxLTE2LjIgMjAuNS0zNi43IDMyLjQtNDcuNiAyLjMtMi4xIDIuNy0yLjcgNS42LTMuNiAzLjQgMCAzLjkuMyA2LjcgMi44ek0zMzEuOSA2Ny4zYy0xNi4zLTI1LjctMzguNi00MC42LTYzLjMtNTIuMUMyNDMuMSA0LjUgMjE0LS4yIDE5MiAwYy00NC4xIDAtNzEuMiAxMy4yLTgxLjEgMTcuM0M1Ny4zIDQ1LjIgMjYuNSA4Ny4yIDI4IDE1OC42YzcuMSA4Mi4yIDk3IDE3NiAxNTUuOCAyMzMuOCAxLjcgMS42IDQuNSA0LjUgNi4yIDUuMWwzLjMuMWMyLjEtLjcgMS44LS41IDMuNS0yLjEgNTIuMy00OS4yIDE0MC43LTE0NS44IDE1NS45LTIxNS43IDctMzkuMiAzLjEtNzIuNS0yMC44LTExMi41ek0xODYuOCAzNTEuOWMtMjgtNTEuMS02NS4yLTEzMC43LTY5LjMtMTg5LTMuNC00Ny41IDExLjQtMTMxLjIgNjkuMy0xMzYuN3YzMjUuN3pNMzI4LjcgMTgwYy0xNi40IDU2LjgtNzcuMyAxMjgtMTE4LjkgMTcwLjNDMjM3LjYgMjk4LjQgMjc1IDIxNyAyNzcgMTU4LjRjMS42LTQ1LjktOS44LTEwNS44LTQ4LTEzMS40IDg4LjggMTguMyAxMTUuNSA5OC4xIDk5LjcgMTUzelwiXSxcImZvbnQtYXdlc29tZVwiOls0NDgsNTEyLFtdLFwiZjJiNFwiLFwiTTM5Ny44IDMySDUwLjJDMjIuNyAzMiAwIDU0LjcgMCA4Mi4ydjM0Ny42QzAgNDU3LjMgMjIuNyA0ODAgNTAuMiA0ODBoMzQ3LjZjMjcuNSAwIDUwLjItMjIuNyA1MC4yLTUwLjJWODIuMmMwLTI3LjUtMjIuNy01MC4yLTUwLjItNTAuMnptLTQ1LjQgMjg0LjNjMCA0LjItMy42IDYtNy44IDcuOC0xNi43IDcuMi0zNC42IDEzLjctNTMuOCAxMy43LTI2LjkgMC0zOS40LTE2LjctNzEuNy0xNi43LTIzLjMgMC00Ny44IDguNC02Ny41IDE3LjMtMS4yLjYtMi40LjYtMy42IDEuMlYzODVjMCAxLjggMCAzLjYtLjYgNC44djEuMmMtMi40IDguNC0xMC4yIDE0LjMtMTkuMSAxNC4zLTExLjMgMC0yMC4zLTktMjAuMy0yMC4zVjE2Ni40Yy03LjgtNi0xMy4xLTE1LjUtMTMuMS0yNi4zIDAtMTguNSAxNC45LTMzLjUgMzMuNS0zMy41IDE4LjUgMCAzMy41IDE0LjkgMzMuNSAzMy41IDAgMTAuOC00LjggMjAuMy0xMy4xIDI2LjN2MTguNWMxLjgtLjYgMy42LTEuMiA1LjQtMi40IDE4LjUtNy44IDQwLjYtMTQuMyA2MS41LTE0LjMgMjIuNyAwIDQwLjYgNiA2MC45IDEzLjcgNC4yIDEuOCA4LjQgMi40IDEzLjEgMi40IDIyLjcgMCA0Ny44LTE2LjEgNTMuOC0xNi4xIDQuOCAwIDkgMy42IDkgNy44djE0MC4zelwiXSxcImZvbnQtYXdlc29tZS1hbHRcIjpbNDQ4LDUxMixbXSxcImYzNWNcIixcIk0zOTcuOCA2Ny44YzcuOCAwIDE0LjMgNi42IDE0LjMgMTQuM3YzNDcuNmMwIDcuOC02LjYgMTQuMy0xNC4zIDE0LjNINTAuMmMtNy44IDAtMTQuMy02LjYtMTQuMy0xNC4zVjgyLjJjMC03LjggNi42LTE0LjMgMTQuMy0xNC4zaDM0Ny42bTAtMzUuOUg1MC4yQzIyLjcgMzIgMCA1NC43IDAgODIuMnYzNDcuNkMwIDQ1Ny4zIDIyLjcgNDgwIDUwLjIgNDgwaDM0Ny42YzI3LjUgMCA1MC4yLTIyLjcgNTAuMi01MC4yVjgyLjJjMC0yNy41LTIyLjctNTAuMi01MC4yLTUwLjJ6bS01OC41IDEzOS4yYy02IDAtMjkuOSAxNS41LTUyLjYgMTUuNS00LjIgMC04LjQtLjYtMTIuNS0yLjQtMTkuNy03LjgtMzctMTMuNy01OS4xLTEzLjctMjAuMyAwLTQxLjggNi42LTU5LjcgMTMuNy0xLjguNi0zLjYgMS4yLTQuOCAxLjh2LTE3LjljNy44LTYgMTIuNS0xNC45IDEyLjUtMjUuNyAwLTE3LjktMTQuMy0zMi4zLTMyLjMtMzIuM3MtMzIuMyAxNC4zLTMyLjMgMzIuM2MwIDEwLjIgNC44IDE5LjcgMTIuNSAyNS43djIxMi4xYzAgMTAuOCA5IDE5LjcgMTkuNyAxOS43IDkgMCAxNi4xLTYgMTguNS0xMy43VjM4NWMuNi0xLjguNi0zIC42LTQuOFYzMzZjMS4yIDAgMi40LS42IDMtMS4yIDE5LjctOC40IDQzLTE2LjcgNjUuNy0xNi43IDMxLjEgMCA0MyAxNi4xIDY5LjMgMTYuMSAxOC41IDAgMzYuNC02LjYgNTItMTMuNyA0LjItMS44IDcuMi0zLjYgNy4yLTcuOFYxNzguM2MxLjgtNC4xLTIuMy03LjEtNy43LTcuMXpcIl0sXCJmb250LWF3ZXNvbWUtZmxhZ1wiOls0NDgsNTEyLFtdLFwiZjQyNVwiLFwiTTQ0NC4zNzMgMzU5LjQyNGMwIDcuMTY4LTYuMTQ0IDEwLjI0LTEzLjMxMiAxMy4zMTItMjguNjcyIDEyLjI4OC01OS4zOTIgMjMuNTUyLTkyLjE2IDIzLjU1Mi00Ni4wOCAwLTY3LjU4NC0yOC42NzItMTIyLjg4LTI4LjY3Mi0zOS45MzYgMC04MS45MiAxNC4zMzYtMTE1LjcxMiAyOS42OTYtMi4wNDggMS4wMjQtNC4wOTYgMS4wMjQtNi4xNDQgMi4wNDh2NzcuODI0YzAgMjEuNDA1LTE2LjEyMiAzNC44MTYtMzMuNzkyIDM0LjgxNi0xOS40NTYgMC0zNC44MTYtMTUuMzYtMzQuODE2LTM0LjgxNlYxMDIuNEMxMi4yNDUgOTIuMTYgMy4wMjkgNzUuNzc2IDMuMDI5IDU3LjM0NCAzLjAyOSAyNS42IDI4LjYyOSAwIDYwLjM3MyAwczU3LjM0NCAyNS42IDU3LjM0NCA1Ny4zNDRjMCAxOC40MzItOC4xOTIgMzQuODE2LTIyLjUyOCA0NS4wNTZ2MzEuNzQ0YzQuMTI0LTEuMzc0IDU4Ljc2OC0yOC42NzIgMTE0LjY4OC0yOC42NzIgNjUuMjcgMCA5Ny42NzYgMjcuNjQ4IDEyNi45NzYgMjcuNjQ4IDM4LjkxMiAwIDgxLjkyLTI3LjY0OCA5Mi4xNi0yNy42NDggOC4xOTIgMCAxNS4zNiA2LjE0NCAxNS4zNiAxMy4zMTJ2MjQwLjY0elwiXSxcImZvbnQtYXdlc29tZS1sb2dvLWZ1bGxcIjpbMzk5Miw1MTIsW1wiRm9udCBBd2Vzb21lXCJdLFwiZjRlNlwiLFwiTTQ1NC42IDBINTcuNEMyNS45IDAgMCAyNS45IDAgNTcuNHYzOTcuM0MwIDQ4Ni4xIDI1LjkgNTEyIDU3LjQgNTEyaDM5Ny4zYzMxLjQgMCA1Ny40LTI1LjkgNTcuNC01Ny40VjU3LjRDNTEyIDI1LjkgNDg2LjEgMCA0NTQuNiAwem0tNTguOSAzMjQuOWMwIDQuOC00LjEgNi45LTguOSA4LjktMTkuMiA4LjEtMzkuNyAxNS43LTYxLjUgMTUuNy00MC41IDAtNjguNy00NC44LTE2My4yIDIuNXY1MS44YzAgMzAuMy00NS43IDMwLjItNDUuNyAwdi0yNTBjLTktNy0xNS0xNy45LTE1LTMwLjMgMC0yMSAxNy4xLTM4LjIgMzguMi0zOC4yIDIxIDAgMzguMiAxNy4xIDM4LjIgMzguMiAwIDEyLjItNS44IDIzLjItMTQuOSAzMC4ydjIxYzM3LjEtMTIgNjUuNS0zNC40IDE0Ni4xLTMuNCAyNi42IDExLjQgNjguNy0xNS43IDc2LjUtMTUuNyA1LjUgMCAxMC4zIDQuMSAxMC4zIDguOXYxNjAuNHptNDMyLjktMTc0LjJoLTEzN3Y3MC4xSDgyNWMzOS44IDAgNDAuNCA2Mi4yIDAgNjIuMkg2OTEuNnYxMDUuNmMwIDQ1LjUtNzAuNyA0Ni40LTcwLjcgMFYxMjguM2MwLTIyIDE4LTM5LjggMzkuOC0zOS44aDE2Ny44YzM5LjYgMCA0MC41IDYyLjIuMSA2Mi4yem0xOTEuMSAyMy40Yy0xNjkuMyAwLTE2OS4xIDI1Mi40IDAgMjUyLjQgMTY5LjkgMCAxNjkuOS0yNTIuNCAwLTI1Mi40em0wIDE5Ni4xYy04MS42IDAtODIuMS0xMzkuOCAwLTEzOS44IDgyLjUgMCA4Mi40IDEzOS44IDAgMTM5Ljh6bTM3Mi40IDUzLjRjLTE3LjUgMC0zMS40LTEzLjktMzEuNC0zMS40di0xMTdjMC02Mi40LTcyLjYtNTIuNS05OS4xLTE2LjR2MTMzLjRjMCA0MS41LTYzLjMgNDEuOC02My4zIDBWMjA4YzAtNDAgNjMuMS00MS42IDYzLjEgMHYzLjRjNDMuMy01MS42IDE2Mi40LTYwLjQgMTYyLjQgMzkuM3YxNDEuNWMuMyAzMC40LTMxLjUgMzEuNC0zMS43IDMxLjR6bTE3OS43IDIuOWMtNDQuMyAwLTY4LjMtMjIuOS02OC4zLTY1LjhWMjM1LjJIMTQ4OGMtMzUuNiAwLTM2LjctNTUuMyAwLTU1LjNoMTUuNXYtMzcuM2MwLTQxLjMgNjMuOC00Mi4xIDYzLjggMHYzNy41aDI0LjljMzUuNCAwIDM1LjcgNTUuMyAwIDU1LjNoLTI0Ljl2MTA4LjVjMCAyOS42IDI2LjEgMjYuMyAyNy40IDI2LjMgMzEuNCAwIDUyLjYgNTYuMy0yMi45IDU2LjN6TTE5OTIgMTIzYy0xOS41LTUwLjItOTUuNS01MC0xMTQuNSAwLTEwNy4zIDI3NS43LTk5LjUgMjUyLjctOTkuNSAyNjIuOCAwIDQyLjggNTguMyA1MS4yIDcyLjEgMTQuNGwxMy41LTM1LjlIMjAwNmwxMyAzNS45YzE0LjIgMzcuNyA3Mi4xIDI3LjIgNzIuMS0xNC40IDAtMTAuMSA1LjMgNi44LTk5LjEtMjYyLjh6bS0xMDguOSAxNzkuMWw1MS43LTE0Mi45IDUxLjggMTQyLjloLTEwMy41em01OTEuMy04NS42bC01My43IDE3Ni4zYy0xMi40IDQxLjItNzIgNDEtODQgMGwtNDIuMy0xMzUuOS00Mi4zIDEzNS45Yy0xMi40IDQwLjktNzIgNDEuMi04NC41IDBsLTU0LjItMTc2LjNjLTEyLjUtMzkuNCA0OS44LTU2LjEgNjAuMi0xNi45TDIyMTMgMzQybDQ1LjMtMTM5LjVjMTAuOS0zMi43IDU5LjYtMzQuNyA3MS4yIDBsNDUuMyAxMzkuNSAzOS4zLTE0Mi40YzEwLjMtMzguMyA3Mi42LTIzLjggNjAuMyAxNi45em0yNzUuNCA3NS4xYzAtNDIuNC0zMy45LTExNy41LTExOS41LTExNy41LTczLjIgMC0xMjQuNCA1Ni4zLTEyNC40IDEyNiAwIDc3LjIgNTUuMyAxMjYuNCAxMjguNSAxMjYuNCAzMS43IDAgOTMtMTEuNSA5My0zOS44IDAtMTguMy0yMS4xLTMxLjUtMzkuMy0yMi40LTQ5LjQgMjYuMi0xMDkgOC40LTExNS45LTQzLjhoMTQ4LjNjMTYuMyAwIDI5LjMtMTMuNCAyOS4zLTI4Ljl6TTI1NzEgMjc3LjdjOS41LTczLjQgMTEzLjktNjguNiAxMTguNiAwSDI1NzF6bTMxNi43IDE0OC44Yy0zMS40IDAtODEuNi0xMC41LTk2LjYtMzEuOS0xMi40LTE3IDIuNS0zOS44IDIxLjgtMzkuOCAxNi4zIDAgMzYuOCAyMi45IDc3LjcgMjIuOSAyNy40IDAgNDAuNC0xMSA0MC40LTI1LjggMC0zOS44LTE0Mi45LTcuNC0xNDIuOS0xMDIgMC00MC40IDM1LjMtNzUuNyA5OC42LTc1LjcgMzEuNCAwIDc0LjEgOS45IDg3LjYgMjkuNCAxMC44IDE0LjgtMS40IDM2LjItMjAuOSAzNi4yLTE1LjEgMC0yNi43LTE3LjMtNjYuMi0xNy4zLTIyLjkgMC0zNy44IDEwLjUtMzcuOCAyMy44IDAgMzUuOSAxNDIuNCA2IDE0Mi40IDEwMy4xLS4xIDQzLjctMzcuNCA3Ny4xLTEwNC4xIDc3LjF6bTI2Ni44LTI1Mi40Yy0xNjkuMyAwLTE2OS4xIDI1Mi40IDAgMjUyLjQgMTcwLjEgMCAxNjkuNi0yNTIuNCAwLTI1Mi40em0wIDE5Ni4xYy04MS44IDAtODItMTM5LjggMC0xMzkuOCA4Mi41IDAgODIuNCAxMzkuOCAwIDEzOS44em00NzYuOSAyMlYyNjguN2MwLTUzLjgtNjEuNC00NS44LTg1LjctMTAuNXYxMzRjMCA0MS4zLTYzLjggNDIuMS02My44IDBWMjY4LjdjMC01Mi4xLTU5LjUtNDcuNC04NS43LTEwLjF2MTMzLjZjMCA0MS41LTYzLjMgNDEuOC02My4zIDBWMjA4YzAtNDAgNjMuMS00MS42IDYzLjEgMHYzLjRjOS45LTE0LjQgNDEuOC0zNy4zIDc4LjYtMzcuMyAzNS4zIDAgNTcuNyAxNi40IDY2LjcgNDMuOCAxMy45LTIxLjggNDUuOC00My44IDgyLjYtNDMuOCA0NC4zIDAgNzAuNyAyMy40IDcwLjcgNzIuN3YxNDUuM2MuNSAxNy4zLTEzLjUgMzEuNC0zMS45IDMxLjQgMy41LjEtMzEuMyAxLjEtMzEuMy0zMS4zek0zOTkyIDI5MS42YzAtNDIuNC0zMi40LTExNy41LTExNy45LTExNy41LTczLjIgMC0xMjcuNSA1Ni4zLTEyNy41IDEyNiAwIDc3LjIgNTguMyAxMjYuNCAxMzEuNiAxMjYuNCAzMS43IDAgOTEuNS0xMS41IDkxLjUtMzkuOCAwLTE4LjMtMjEuMS0zMS41LTM5LjMtMjIuNC00OS40IDI2LjItMTEwLjUgOC40LTExNy41LTQzLjhoMTQ5LjhjMTYuMyAwIDI5LjEtMTMuNCAyOS4zLTI4Ljl6bS0xODAuNS0xMy45YzkuNy03NC40IDExNS45LTY4LjMgMTIwLjEgMGgtMTIwLjF6XCJdLGZvbnRpY29uczpbNDQ4LDUxMixbXSxcImYyODBcIixcIk0wIDMydjQ0OGg0NDhWMzJIMHptMTY3LjQgMTk2aDY3LjRsLTExLjEgMzcuM0gxNjh2MTEyLjljMCA1LjgtMiA2LjcgMy4yIDcuM2w0My41IDQuMXYyNS4xSDg0VjM4OWwyMS4zLTJjNS4yLS42IDYuNy0yLjMgNi43LTcuOVYyNjcuN2MwLTIuMy0yLjktMi4zLTUuOC0yLjNIODRWMjI4aDI4di0yMWMwLTQ5LjYgMjYuNS03MCA3Ny4zLTcwIDM0LjEgMCA2NC43IDguMiA2NC43IDUyLjhsLTUwLjcgNi4xYy4zLTE4LjctNC40LTIzLTE2LjMtMjMtMTguNCAwLTE5IDkuOS0xOSAyNy40djIzLjNjMCAyLjQtMy41IDQuNC0uNiA0LjR6TTM2NCA0MTQuN0gyNjEuM3YtMjUuMWwyMC40LTIuNmM1LjItLjYgNy42LTEuNyA3LjYtNy4zVjI3MS44YzAtNC4xLTIuOS02LjctNi43LTcuOWwtMjQuMi02LjQgNi43LTI5LjVoODAuMnYxNTEuN2MwIDUuOC0yLjYgNi40IDIuOSA3LjNsMTUuNyAyLjZ2MjUuMXptLTIxLjktMjU1LjVsOSAzMy4yLTcuMyA3LjMtMzEuMi0xNi42LTMxLjIgMTYuNi03LjMtNy4zIDktMzMuMi0yMS44LTI0LjIgMy41LTkuNmgyNy43bDE1LjUtMjhoOS4zbDE1LjUgMjhoMjcuN2wzLjUgOS42LTIxLjkgMjQuMnpcIl0sXCJmb250aWNvbnMtZmlcIjpbMzg0LDUxMixbXSxcImYzYTJcIixcIk0xMTQuNCAyMjRoOTIuNGwtMTUuMiA1MS4yaC03Ni40VjQzM2MwIDgtMi44IDkuMiA0LjQgMTBsNTkuNiA1LjZWNDgzSDB2LTM1LjJsMjkuMi0yLjhjNy4yLS44IDkuMi0zLjIgOS4yLTEwLjhWMjc4LjRjMC0zLjItNC0zLjItOC0zLjJIMFYyMjRoMzguNHYtMjguOGMwLTY4IDM2LjQtOTYgMTA2LTk2IDQ2LjggMCA4OC44IDExLjIgODguOCA3Mi40bC02OS42IDguNGMuNC0yNS42LTYtMzEuNi0yMi40LTMxLjYtMjUuMiAwLTI2IDEzLjYtMjYgMzcuNnYzMmMwIDMuMi00LjggNi0uOCA2ek0zODQgNDgzSDI0My4ydi0zNC40bDI4LTMuNmM3LjItLjggMTAuNC0yLjQgMTAuNC0xMFYyODdjMC01LjYtNC05LjItOS4yLTEwLjhsLTMzLjItOC44IDkuMi00MC40aDExMHYyMDhjMCA4LTMuNiA4LjggNCAxMGwyMS42IDMuNlY0ODN6bS0zMC0zNDcuMmwxMi40IDQ1LjYtMTAgMTAtNDIuOC0yMi44LTQyLjggMjIuOC0xMC0xMCAxMi40LTQ1LjYtMzAtMzYuNCA0LjgtMTBoMzhMMzA3LjIgNTFIMzIwbDIxLjIgMzguNGgzOGw0LjggMTMuMi0zMCAzMy4yelwiXSxcImZvcnQtYXdlc29tZVwiOls1MTIsNTEyLFtdLFwiZjI4NlwiLFwiTTQ4OS4yIDI4Ny45aC0yNy40Yy0yLjYgMC00LjYgMi00LjYgNC42djMyaC0zNi42VjE0Ni4yYzAtMi42LTItNC42LTQuNi00LjZoLTI3LjRjLTIuNiAwLTQuNiAyLTQuNiA0LjZ2MzJoLTM2LjZ2LTMyYzAtMi42LTItNC42LTQuNi00LjZoLTI3LjRjLTIuNiAwLTQuNiAyLTQuNiA0LjZ2MzJoLTM2LjZ2LTMyYzAtNi04LTQuNi0xMS43LTQuNnYtMzhjOC4zLTIgMTcuMS0zLjQgMjUuNy0zLjQgMTAuOSAwIDIwLjkgNC4zIDMxLjQgNC4zIDQuNiAwIDI3LjctMS4xIDI3LjctOHYtNjBjMC0yLjYtMi00LjYtNC42LTQuNi01LjEgMC0xNS4xIDQuMy0yNCA0LjMtOS43IDAtMjAuOS00LjMtMzIuNi00LjMtOCAwLTE2IDEuMS0yMy43IDIuOXYtNC45YzUuNC0yLjYgOS4xLTguMyA5LjEtMTQuMyAwLTIwLjctMzEuNC0yMC44LTMxLjQgMCAwIDYgMy43IDExLjcgOS4xIDE0LjN2MTExLjdjLTMuNyAwLTExLjctMS40LTExLjcgNC42djMyaC0zNi42di0zMmMwLTIuNi0yLTQuNi00LjYtNC42aC0yNy40Yy0yLjYgMC00LjYgMi00LjYgNC42djMySDEyOHYtMzJjMC0yLjYtMi00LjYtNC42LTQuNkg5NmMtMi42IDAtNC42IDItNC42IDQuNnYxNzguM0g1NC44di0zMmMwLTIuNi0yLTQuNi00LjYtNC42SDIyLjhjLTIuNiAwLTQuNiAyLTQuNiA0LjZWNTEyaDE4Mi45di05NmMwLTcyLjYgMTA5LjctNzIuNiAxMDkuNyAwdjk2aDE4Mi45VjI5Mi41Yy4xLTIuNi0xLjktNC42LTQuNS00LjZ6bS0yODguMS00LjVjMCAyLjYtMiA0LjYtNC42IDQuNmgtMjcuNGMtMi42IDAtNC42LTItNC42LTQuNnYtNjRjMC0yLjYgMi00LjYgNC42LTQuNmgyNy40YzIuNiAwIDQuNiAyIDQuNiA0LjZ2NjR6bTE0Ni40IDBjMCAyLjYtMiA0LjYtNC42IDQuNmgtMjcuNGMtMi42IDAtNC42LTItNC42LTQuNnYtNjRjMC0yLjYgMi00LjYgNC42LTQuNmgyNy40YzIuNiAwIDQuNiAyIDQuNiA0LjZ2NjR6XCJdLFwiZm9ydC1hd2Vzb21lLWFsdFwiOls1MTIsNTEyLFtdLFwiZjNhM1wiLFwiTTIxMS43IDI0MS4xdjUxLjdjMCAyLjEtMS42IDMuNy0zLjcgMy43aC0yMi4yYy0yLjEgMC0zLjctMS42LTMuNy0zLjd2LTUxLjdjMC0yLjEgMS42LTMuNyAzLjctMy43SDIwOGMyLjEgMCAzLjcgMS42IDMuNyAzLjd6bTExNC41LTMuN0gzMDRjLTIuMSAwLTMuNyAxLjYtMy43IDMuN3Y1MS43YzAgMi4xIDEuNiAzLjcgMy43IDMuN2gyMi4yYzIuMSAwIDMuNy0xLjYgMy43LTMuN3YtNTEuN2MtLjEtMi4xLTEuNy0zLjctMy43LTMuN3ptLTI5LjEgMjYzLjJjLS45LjEtMS43LjMtMi42LjQtMSAuMi0yLjEuMy0zLjEuNS0uOS4xLTEuOC4zLTIuOC40LTEgLjEtMiAuMy0zIC40LTEgLjEtMiAuMi0yLjkuMy0xIC4xLTEuOS4yLTIuOS4zLTEgLjEtMi4xLjItMy4xLjMtLjkuMS0xLjguMi0yLjcuMi0xLjEuMS0yLjMuMS0zLjQuMi0uOCAwLTEuNy4xLTIuNS4xLTEuMy4xLTIuNi4xLTMuOS4xLS43IDAtMS40LjEtMi4xLjEtMiAwLTQgLjEtNiAuMXMtNCAwLTYtLjFjLS43IDAtMS40IDAtMi4xLS4xLTEuMyAwLTIuNi0uMS0zLjktLjEtLjggMC0xLjctLjEtMi41LS4xLTEuMS0uMS0yLjMtLjEtMy40LS4yLS45LS4xLTEuOC0uMS0yLjctLjItMS0uMS0yLjEtLjItMy4xLS4zLTEtLjEtMS45LS4yLTIuOS0uMy0xLS4xLTItLjItMi45LS4zLTEtLjEtMi0uMi0zLS40LS45LS4xLTEuOC0uMy0yLjgtLjQtMS0uMS0yLjEtLjMtMy4xLS41LS45LS4xLTEuNy0uMy0yLjYtLjQtNjUuNi0xMC45LTEyMi41LTQ3LjctMTYwLTk5LjQtLjItLjItLjMtLjUtLjUtLjctLjgtMS4xLTEuNi0yLjItMi4zLTMuMy0uMy0uNC0uNi0uOC0uOC0xLjItLjctMS4xLTEuNC0yLjEtMi4xLTMuMi0uMy0uNS0uNi0uOS0uOS0xLjQtLjctMS4xLTEuNC0yLjEtMi0zLjItLjMtLjUtLjYtLjktLjktMS40LS43LTEuMS0xLjMtMi4yLTItMy4zLS4yLS40LS41LS44LS43LTEuMi0yLjQtNC00LjYtOC4xLTYuOC0xMi4yLS4xLS4yLS4yLS4zLS4zLS41LS42LTEuMS0xLjEtMi4yLTEuNy0zLjMtLjMtLjYtLjYtMS4xLS44LTEuNy0uNS0xLTEtMi4xLTEuNS0zLjEtLjMtLjctLjYtMS4zLS45LTItLjUtMS0uOS0yLTEuNC0zbC0uOS0yLjFjLS40LTEtLjktMi0xLjMtMy0uMy0uNy0uNi0xLjUtLjktMi4ybC0xLjItM2MtLjMtLjgtLjYtMS41LS45LTIuMy0uNC0xLS44LTItMS4xLTMtLjMtLjktLjYtMS44LTEtMi44LS42LTEuNi0xLjEtMy4zLTEuNy00LjktLjMtLjktLjYtMS44LS45LTIuOC0uMy0uOS0uNS0xLjgtLjgtMi43LS4zLS45LS42LTEuOS0uOC0yLjgtLjMtLjktLjUtMS44LS44LTIuNy0uMy0xLS41LTEuOS0uOC0yLjktLjItLjktLjUtMS44LS43LTIuNy0uMy0xLS41LTItLjctMy0uMi0uOS0uNC0xLjctLjYtMi42LS4yLTEuMS0uNS0yLjItLjctMy4yLS4yLS44LS4zLTEuNi0uNS0yLjQtLjMtMS4zLS41LTIuNy0uOC00LS4xLS42LS4yLTEuMS0uMy0xLjdsLS45LTUuN2MtLjEtLjYtLjItMS4zLS4zLTEuOS0uMi0xLjMtLjQtMi42LS41LTMuOS0uMS0uOC0uMi0xLjUtLjMtMi4zLS4xLTEuMi0uMy0yLjQtLjQtMy42LS4xLS44LS4yLTEuNi0uMi0yLjQtLjEtMS4yLS4yLTIuNC0uMy0zLjUtLjEtLjgtLjEtMS42LS4yLTIuNC0uMS0xLjItLjItMi40LS4yLTMuNyAwLS44LS4xLTEuNS0uMS0yLjMtLjEtMS4zLS4xLTIuNy0uMi00IDAtLjcgMC0xLjMtLjEtMiAwLTItLjEtNC0uMS02IDAtNTMuNSAxNi45LTEwMyA0NS44LTE0My42IDIuMy0zLjIgNC43LTYuNCA3LjEtOS41IDQuOS02LjIgMTAuMS0xMi4zIDE1LjYtMTggMi43LTIuOSA1LjUtNS43IDguNC04LjQgMi45LTIuNyA1LjgtNS40IDguOC04IDQuNS0zLjkgOS4xLTcuNiAxMy45LTExLjIgMS42LTEuMiAzLjItMi40IDQuOC0zLjVDMTQwIDM0LjIgMTcxLjcgMjAuMSAyMDYgMTNjMTYuMS0zLjMgMzIuOS01IDUwLTVzMzMuOCAxLjcgNTAgNWMzNC4zIDcgNjYgMjEuMSA5My42IDQwLjcgMS42IDEuMiAzLjIgMi4zIDQuOCAzLjUgNC44IDMuNiA5LjQgNy4zIDEzLjkgMTEuMiAxMiAxMC40IDIzIDIxLjkgMzIuOCAzNC40IDIuNSAzLjEgNC44IDYuMyA3LjEgOS41QzQ4Ny4xIDE1MyA1MDQgMjAyLjUgNTA0IDI1NmMwIDIgMCA0LS4xIDYgMCAuNyAwIDEuMy0uMSAyIDAgMS4zLS4xIDIuNy0uMiA0IDAgLjgtLjEgMS41LS4xIDIuMy0uMSAxLjItLjEgMi40LS4yLjctLjEuOC0uMSAxLjYtLjIgMi40LS4xIDEuMi0uMiAyLjQtLjMgMy41LS4xLjgtLjIgMS42LS4yIDIuNC0uMSAxLjItLjMgMi40LS40IDMuNi0uMS44LS4yIDEuNS0uMyAyLjMtLjIgMS4zLS40IDIuNi0uNSAzLjktLjEuNi0uMiAxLjMtLjMgMS45bC0uOSA1LjdjLS4xLjYtLjIgMS4xLS4zIDEuNy0uMiAxLjMtLjUgMi43LS44IDQtLjIuOC0uMyAxLjYtLjUgMi40LS4yIDEuMS0uNSAyLjItLjcgMy4yLS4yLjktLjQgMS43LS42IDIuNi0uMiAxLS41IDItLjcgMy0uMi45LS41IDEuOC0uNyAyLjctLjMgMS0uNSAxLjktLjggMi45LS4yLjktLjUgMS44LS44IDIuNy0uMy45LS42IDEuOS0uOCAyLjgtLjMuOS0uNSAxLjgtLjggMi43LS4zLjktLjYgMS44LS45IDIuOC0uNSAxLjYtMS4xIDMuMy0xLjcgNC45LS4zLjktLjYgMS44LTEgMi44LS40IDEtLjcgMi0xLjEgMy0uMy44LS42IDEuNS0uOSAyLjNsLTEuMiAzYy0uMy43LS42IDEuNS0uOSAyLjItLjQgMS0uOCAyLTEuMyAzbC0uOSAyLjFjLS40IDEtLjkgMi0xLjQgMy0uMy43LS42IDEuMy0uOSAyLS41IDEtMSAyLjEtMS41IDMuMS0uMy42LS42IDEuMS0uOCAxLjctLjYgMS4xLTEuMSAyLjItMS43IDMuMy0uMS4yLS4yLjMtLjMuNS0yLjIgNC4xLTQuNCA4LjItNi44IDEyLjItLjIuNC0uNS44LS43IDEuMi0uNyAxLjEtMS4zIDIuMi0yIDMuMy0uMy41LS42LjktLjkgMS40LS43IDEuMS0xLjQgMi4xLTIgMy4yLS4zLjUtLjYuOS0uOSAxLjQtLjcgMS4xLTEuNCAyLjEtMi4xIDMuMi0uMy40LS42LjgtLjggMS4yLS44IDEuMS0xLjUgMi4yLTIuMyAzLjMtLjIuMi0uMy41LS41LjctMzcuNiA1NC43LTk0LjUgOTEuNC0xNjAuMSAxMDIuNHptMTE3LjMtODYuMmMxMy0xMyAyNC4yLTI3LjQgMzMuNi00Mi45di03MS4zYzAtMi4xLTEuNi0zLjctMy43LTMuN2gtMjIuMmMtMi4xIDAtMy43IDEuNi0zLjcgMy43VjMyNmgtMjkuNVYxODJjMC0yLjEtMS42LTMuNy0zLjctMy43aC0yMi4xYy0yLjEgMC0zLjcgMS42LTMuNyAzLjd2MjUuOWgtMjkuNVYxODJjMC0yLjEtMS42LTMuNy0zLjctMy43SDMwNGMtMi4xIDAtMy43IDEuNi0zLjcgMy43djI1LjloLTI5LjVWMTgyYzAtNC44LTYuNS0zLjctOS41LTMuN3YtMzAuN2M2LjctMS42IDEzLjgtMi44IDIwLjgtMi44IDguOCAwIDE2LjggMy41IDI1LjQgMy41IDMuNyAwIDIyLjQtLjkgMjIuNC02LjVWOTMuNGMwLTIuMS0xLjYtMy43LTMuNy0zLjctNC4yIDAtMTIuMiAzLjUtMTkuNCAzLjUtNy45IDAtMTYuOS0zLjUtMjYuMy0zLjUtNi41IDAtMTIuOS45LTE5LjIgMi4zdi0zLjljNC40LTIuMSA3LjQtNi43IDcuNC0xMS41IDAtMTYuOC0yNS40LTE2LjgtMjUuNCAwIDAgNC44IDMgOS41IDcuNCAxMS41djkwLjJjLTMgMC05LjUtMS4xLTkuNSAzLjd2MjUuOWgtMjkuNVYxODJjMC0yLjEtMS42LTMuNy0zLjctMy43aC0yMi4yYy0yLjEgMC0zLjcgMS42LTMuNyAzLjd2MjUuOWgtMjkuNVYxODJjMC0yLjEtMS42LTMuNy0zLjctMy43aC0yMi4xYy0yLjEgMC0zLjcgMS42LTMuNyAzLjd2MTQ0SDkzLjV2LTI1LjhjMC0yLjEtMS42LTMuNy0zLjctMy43SDY3LjdjLTIuMSAwLTMuNyAxLjYtMy43IDMuN3Y3MS4zYzkuNCAxNS41IDIwLjYgMjkuOSAzMy42IDQyLjkgMjAuNiAyMC42IDQ0LjUgMzYuNyA3MS4yIDQ4IDEzLjkgNS45IDI4LjIgMTAuMyA0Mi45IDEzLjJ2LTc1LjhjMC01OC42IDg4LjYtNTguNiA4OC42IDB2NzUuOGMxNC43LTIuOSAyOS03LjQgNDIuOS0xMy4yIDI2LjctMTEuMyA1MC42LTI3LjQgNzEuMi00OFwiXSxmb3J1bWJlZTpbNDQ4LDUxMixbXSxcImYyMTFcIixcIk01LjggMzA5LjdDMiAyOTIuNyAwIDI3NS41IDAgMjU4LjMgMCAxMzUgOTkuOCAzNSAyMjMuMSAzNWMxNi42IDAgMzMuMyAyIDQ5LjMgNS41QzE0OSA4Ny41IDUxLjkgMTg2IDUuOCAzMDkuN3ptMzkyLjktMTg5LjJDMzg1IDEwMyAzNjkgODcuOCAzNTAuOSA3NS4yYy0xNDkuNiA0NC4zLTI2Ni4zIDE2Mi4xLTMwOS43IDMxMiAxMi41IDE4LjEgMjggMzUuNiA0NS4yIDQ5IDQzLjEtMTUxLjMgMTYxLjItMjcxLjcgMzEyLjMtMzE1Ljd6bTE1LjggMjUyLjdjMTUuMi0yNS4xIDI1LjQtNTMuNyAyOS41LTgyLjgtNzkuNCA0Mi45LTE0NSAxMTAuNi0xODcuNiAxOTAuMyAzMC00LjQgNTguOS0xNS4zIDg0LjYtMzEuMyAzNSAxMy4xIDcwLjkgMjQuMyAxMDcgMzMuNi05LjMtMzYuNS0yMC40LTc0LjUtMzMuNS0xMDkuOHptMjkuNy0xNDUuNWMtMi42LTE5LjUtNy45LTM4LjctMTUuOC01Ni44QzI5MC41IDIxNi43IDE4MiAzMjcuNSAxMzcuMSA0NjZjMTguMSA3LjYgMzcgMTIuNSA1Ni42IDE1LjJDMjQwIDM2Ny4xIDMzMC41IDI3NC40IDQ0NC4yIDIyNy43elwiXSxmb3Vyc3F1YXJlOlszNjgsNTEyLFtdLFwiZjE4MFwiLFwiTTMyMy4xIDNINDkuOUMxMi40IDMgMCAzMS4zIDAgNDkuMXY0MzMuOGMwIDIwLjMgMTIuMSAyNy43IDE4LjIgMzAuMSA2LjIgMi41IDIyLjggNC42IDMyLjktNy4xQzE4MCAzNTYuNSAxODIuMiAzNTQgMTgyLjIgMzU0YzMuMS0zLjQgMy40LTMuMSA2LjgtMy4xaDgzLjRjMzUuMSAwIDQwLjYtMjUuMiA0NC4zLTM5LjdsNDguNi0yNDNDMzczLjggMjUuOCAzNjMuMSAzIDMyMy4xIDN6bS0xNi4zIDczLjhsLTExLjQgNTkuN2MtMS4yIDYuNS05LjUgMTMuMi0xNi45IDEzLjJIMTcyLjFjLTEyIDAtMjAuNiA4LjMtMjAuNiAyMC4zdjEzYzAgMTIgOC42IDIwLjYgMjAuNiAyMC42aDkwLjRjOC4zIDAgMTYuNiA5LjIgMTQuOCAxOC4yLTEuOCA4LjktMTAuNSA1My44LTExLjQgNTguOC0uOSA0LjktNi44IDEzLjUtMTYuOSAxMy41aC03My41Yy0xMy41IDAtMTcuMiAxLjgtMjYuNSAxMi42IDAgMC04LjkgMTEuNC04OS41IDEwOC4zLS45LjktMS44LjYtMS44LS4zVjc1LjljMC03LjcgNi44LTE2LjYgMTYuNi0xNi42aDIxOWM4LjIgMCAxNS42IDcuNyAxMy41IDE3LjV6XCJdLFwiZnJlZS1jb2RlLWNhbXBcIjpbNTc2LDUxMixbXSxcImYyYzVcIixcIk02OS4zIDE0NC41Yy00MSA2OC41LTM2LjQgMTYzIDEgMjI3QzkyLjUgNDA5LjcgMTIwIDQyMy45IDEyMCA0MzhjMCA2LjgtNiAxMy0xMi44IDEzQzg3LjcgNDUxIDggMzc1LjUgOCAyNTMuMmMwLTExMS41IDc4LTE4NiA5Ny4xLTE4NiA2IDAgMTQuOSA0LjggMTQuOSAxMS4xIDAgMTIuNy0yOC4zIDI4LjYtNTAuNyA2Ni4yem0xOTUuOCAyMTMuOGM0LjUgMS44IDEyLjMgNS4yIDEyLjMtMS4yIDAtMi43LTIuMi0yLjktNC4zLTMuNi04LjUtMy40LTE0LTcuNy0xOS4xLTE1LjItOC4yLTEyLjEtMTAuMS0yNC4yLTEwLjEtMzguNiAwLTMyLjEgNDQuMi0zNy45IDQ0LjItNzAgMC0xMi4zLTcuNy0xNS45LTcuNy0xOS4zIDAtMi4yLjctMi4yIDIuOS0yLjIgOCAwIDE5LjEgMTMuMyAyMi41IDE5LjggMi4yIDQuNiAyLjQgNiAyLjQgMTEuMSAwIDctLjcgMTQuMi0uNyAyMS4zIDAgMjcgMzEuOSAxOS44IDMxLjkgNi44IDAtNi0zLjYtMTEuNi0zLjYtMTcuNCAwLS43IDAtMS4yLjctMS4yIDMuNCAwIDkuNCA3LjcgMTEuMSAxMC4xIDUuOCA4LjkgOC41IDIwLjggOC41IDMxLjQgMCAzMi40LTI5LjUgNDktMjkuNSA1NiAwIDEgMi45IDcuNyAxMi4xIDEuOSAyOS43LTE1LjEgNTMuMS00Ny42IDUzLjEtODkuOCAwLTMzLjYtOC43LTU3LjctMzIuMS04Mi42LTMuOS00LjEtMTYuNC0xNi45LTIyLjUtMTYuOS04LjIgMCA3LjIgMTguNiA3LjIgMzEuMiAwIDcuMi00LjggMTIuMy0xMi4zIDEyLjMtMTEuNiAwLTE0LjUtMjUuNC0xNS45LTMzLjMtNS44LTMzLjgtMTIuOC01OC4yLTQ2LjQtNzQuMS0xMC40LTUtMzYuNS0xMS44LTM2LjUtMi4yIDAgMi40IDIuNyA0LjEgNC42IDUuMSA5LjIgNS42IDE5LjYgMjEuNCAxOS42IDM4LjIgMCA0Ni4xLTU3LjcgODguMi01Ny43IDEzNi4yLS4yIDQwLjMgMjguMSA3Mi42IDY1LjMgODYuMnpNNDcwLjQgNjdjLTYgMC0xNC40IDYuNS0xNC40IDEyLjYgMCA4LjcgMTIuMSAxOS42IDE3LjYgMjUuNCA4MS42IDg1LjEgNzguNiAyMTQuMyAxNy42IDI5MS03IDguOS0zNS4zIDM1LjMtMzUuMyA0My41IDAgNS4xIDguMiAxMS40IDEzLjIgMTEuNCAyNS40IDAgOTguOC04MC44IDk4LjgtMTg1LjdDNTY4IDE0NS45IDQ5MS44IDY3IDQ3MC40IDY3em0tNDIuMyAzMjMuMUgxNjdjLTkuNCAwLTE1LjUgNy41LTE1LjUgMTYuNCAwIDguNSA3IDE1LjUgMTUuNSAxNS41aDI2MS4xYzkuNCAwIDExLjktNy41IDExLjktMTYuNCAwLTguNS0zLjUtMTUuNS0xMS45LTE1LjV6XCJdLGZyZWVic2Q6WzQ0OCw1MTIsW10sXCJmM2E0XCIsXCJNMzAzLjcgOTYuMmMxMS4xLTExLjEgMTE1LjUtNzcgMTM5LjItNTMuMiAyMy43IDIzLjctNDIuMSAxMjguMS01My4yIDEzOS4yLTExLjEgMTEuMS0zOS40LjktNjMuMS0yMi45LTIzLjgtMjMuNy0zNC4xLTUyLTIyLjktNjMuMXpNMTA5LjkgNjguMUM3My42IDQ3LjUgMjIgMjQuNiA1LjYgNDEuMWMtMTYuNiAxNi42IDcuMSA2OS40IDI3LjkgMTA1LjcgMTguNS0zMi4yIDQ0LjgtNTkuMyA3Ni40LTc4Ljd6TTQwNi43IDE3NGMzLjMgMTEuMyAyLjcgMjAuNy0yLjcgMjYuMS0yMC4zIDIwLjMtODcuNS0yNy0xMDkuMy03MC4xLTE4LTMyLjMtMTEuMS01My40IDE0LjktNDguNyA1LjctMy42IDEyLjMtNy42IDE5LjYtMTEuNi0yOS44LTE1LjUtNjMuNi0yNC4zLTk5LjUtMjQuMy0xMTkuMSAwLTIxNS42IDk2LjUtMjE1LjYgMjE1LjYgMCAxMTkgOTYuNSAyMTUuNiAyMTUuNiAyMTUuNlM0NDUuMyAzODAuMSA0NDUuMyAyNjFjMC0zOC40LTEwLjEtNzQuNS0yNy43LTEwNS44LTMuOSA3LTcuNiAxMy4zLTEwLjkgMTguOHpcIl0sZnVsY3J1bTpbMjY5LDUxMixbXSxcImY1MGJcIixcIk03MC43NSAxNjQuMTRsLTM1LjM4IDQzLjU1TDAgMTY0LjE0bDM1LjM4LTQzLjU1IDM1LjM3IDQzLjU1ek0xMTkuMjMgMEw5OC42OSAxOTguMTggNDcuNzIgMjU2bDUwLjk4IDU3LjgyTDExOS4yMyA1MTJWMzAwLjg5TDc4LjE1IDI1Nmw0MS4wOC00NC44OVYwem03OS42NyAxNjQuMTRsMzUuMzggNDMuNTUgMzUuMzgtNDMuNTUtMzUuMzgtNDMuNTUtMzUuMzggNDMuNTV6bS00OC40OCA0Ni45N0wxOTEuNSAyNTZsLTQxLjA4IDQ0Ljg5VjUxMmwyMC41NC0xOTguMThMMjIxLjk0IDI1NmwtNTAuOTgtNTcuODJMMTUwLjQyIDB2MjExLjExelwiXSxcImdhbGFjdGljLXJlcHVibGljXCI6WzQ5Niw1MTIsW10sXCJmNTBjXCIsXCJNMjQ4IDUwNEMxMTEuMjUgNTA0IDAgMzkyLjc1IDAgMjU2UzExMS4yNSA4IDI0OCA4czI0OCAxMTEuMjUgMjQ4IDI0OC0xMTEuMjUgMjQ4LTI0OCAyNDh6bTAtNDc5LjQ3QzEyMC4zNyAyNC41MyAxNi41MyAxMjguMzcgMTYuNTMgMjU2UzEyMC4zNyA0ODcuNDcgMjQ4IDQ4Ny40NyA0NzkuNDcgMzgzLjYzIDQ3OS40NyAyNTYgMzc1LjYzIDI0LjUzIDI0OCAyNC41M3ptMjcuNjIgMjEuODF2MjQuNjJhMTg1LjkzMyAxODUuOTMzIDAgMCAxIDgzLjU3IDM0LjU0bDE3LjM5LTE3LjM2Yy0yOC43NS0yMi4wNi02My4zLTM2Ljg5LTEwMC45Ni00MS44em0tNTUuMzcuMDdjLTM3LjY0IDQuOTQtNzIuMTYgMTkuOC0xMDAuODggNDEuODVsMTcuMjggMTcuMzZoLjA4YzI0LjA3LTE3Ljg0IDUyLjU1LTMwLjA2IDgzLjUyLTM0LjY3VjQ2LjQxem0xMi4yNSA1MC4xN3Y4Mi44N2MtMTAuMDQgMi4wMy0xOS40MiA1Ljk0LTI3LjY3IDExLjQybC01OC42Mi01OC41OS0yMS45MyAyMS45MyA1OC42NyA1OC42N2MtNS40NyA4LjIzLTkuNDUgMTcuNTktMTEuNDcgMjcuNjJoLTgyLjl2MzFoODIuOWMyLjAyIDEwLjAyIDYuMDEgMTkuMzEgMTEuNDcgMjcuNTRsLTU4LjY3IDU4LjY5IDIxLjkzIDIxLjkzIDU4LjYyLTU4LjYyYTc3Ljg3MyA3Ny44NzMgMCAwIDAgMjcuNjcgMTEuNDd2ODIuOWgzMXYtODIuOWMxMC4wNS0yLjAzIDE5LjM3LTYuMDYgMjcuNjItMTEuNTVsNTguNjcgNTguNjkgMjEuOTMtMjEuOTMtNTguNjctNTguNjljNS40Ni04LjIzIDkuNDctMTcuNTIgMTEuNS0yNy41NGg4Mi44N3YtMzFoLTgyLjg3Yy0yLjAyLTEwLjAyLTYuMDMtMTkuMzgtMTEuNS0yNy42Mmw1OC42Ny01OC42Ny0yMS45My0yMS45My01OC42NyA1OC42N2MtOC4yNS01LjQ5LTE3LjU3LTkuNDctMjcuNjItMTEuNVY5Ni41OGgtMzF6bTE4My4yNCAzMC43MmwtMTcuMzYgMTcuMzZhMTg2LjMzNyAxODYuMzM3IDAgMCAxIDM0LjY3IDgzLjY3aDI0LjYyYy00Ljk1LTM3LjY5LTE5LjgzLTcyLjI5LTQxLjkzLTEwMS4wM3ptLTMzNS41NS4xM2MtMjIuMDYgMjguNzItMzYuOTEgNjMuMjYtNDEuODUgMTAwLjkxaDI0LjY1YzQuNi0zMC45NiAxNi43Ni01OS40NSAzNC41OS04My41MmwtMTcuMzktMTcuMzl6TTM4LjM0IDI4My42N2M0LjkyIDM3LjY0IDE5Ljc1IDcyLjE4IDQxLjggMTAwLjlsMTcuMzYtMTcuMzljLTE3LjgxLTI0LjA3LTI5LjkyLTUyLjU3LTM0LjUxLTgzLjUySDM4LjM0em0zOTQuNyAwYy00LjYxIDMwLjk5LTE2LjggNTkuNS0zNC42NyA4My42bDE3LjM2IDE3LjM2YzIyLjA4LTI4Ljc0IDM2Ljk4LTYzLjI5IDQxLjkzLTEwMC45NmgtMjQuNjJ6TTEzNi42NiA0MDYuMzhsLTE3LjM2IDE3LjM2YzI4LjczIDIyLjA5IDYzLjMgMzYuOTggMTAwLjk2IDQxLjkzdi0yNC42NGMtMzAuOTktNC42My01OS41My0xNi43OS04My42LTM0LjY1em0yMjIuNTMuMDVjLTI0LjA5IDE3Ljg0LTUyLjU4IDMwLjA4LTgzLjU3IDM0LjY3djI0LjU3YzM3LjY3LTQuOTIgNzIuMjEtMTkuNzkgMTAwLjk2LTQxLjg1bC0xNy4zMS0xNy4zOWgtLjA4elwiXSxcImdhbGFjdGljLXNlbmF0ZVwiOls1MTIsNTEyLFtdLFwiZjUwZFwiLFwiTTI0OS44NiAzMy40OHYyNi4wN0MyMzYuMjggODAuMTcgMjI2IDE2OC4xNCAyMjUuMzkgMjc0LjljMTEuNzQtMTUuNjIgMTkuMTMtMzMuMzMgMTkuMTMtNDguMjR2LTE2Ljg4Yy0uMDMtNS4zMi43NS0xMC41MyAyLjE5LTE1LjY1LjY1LTIuMTQgMS4zOS00LjA4IDIuNjItNS44MiAxLjIzLTEuNzUgMy40My0zLjc5IDYuNjgtMy43OSAzLjI0IDAgNS40NSAyLjA1IDYuNjggMy43OSAxLjIzIDEuNzUgMS45NyAzLjY4IDIuNjIgNS44MiAxLjQ0IDUuMTIgMi4yMiAxMC4zMyAyLjE5IDE1LjY1djE2Ljg4YzAgMTQuOTEgNy4zOSAzMi42MiAxOS4xMyA0OC4yNC0uNjMtMTA2Ljc2LTEwLjkxLTE5NC43My0yNC40OS0yMTUuMzVWMzMuNDhoLTEyLjI4em0tMjYuMzQgMTQ3Ljc3Yy05LjUyIDIuMTUtMTguNyA1LjE5LTI3LjQ2IDkuMDggOC45IDE2LjEyIDkuNzYgMzIuNjQgMS43MSAzNy4yOS04IDQuNjItMjEuODUtNC4yMy0zMS4zNi0xOS44Mi0xMS41OCA4Ljc5LTIxLjg4IDE5LjMyLTMwLjU2IDMxLjA5IDE0LjczIDkuNjIgMjIuODkgMjIuOTIgMTguMzIgMzAuNjYtNC41NCA3LjctMjAuMDMgNy4xNC0zNS40Ny0uOTYtNS43OCAxMy4yNS05Ljc1IDI3LjUxLTExLjY1IDQyLjQyIDkuNjguMTggMTguNjcgMi4zOCAyNi4xOCA2LjA0IDE3Ljc4LS4zIDMyLjc3LTEuOTYgNDAuNDktNC4yMiA1LjU1LTI2LjM1IDIzLjAyLTQ4LjIzIDQ2LjMyLTU5LjUxLjczLTI1LjU1IDEuODgtNDkuNjcgMy40OC03Mi4wN3ptNjQuOTYgMGMxLjU5IDIyLjQgMi43NSA0Ni41MiAzLjQ3IDcyLjA3IDIzLjI5IDExLjI4IDQwLjc3IDMzLjE2IDQ2LjMyIDU5LjUxIDcuNzIgMi4yNiAyMi43MSAzLjkyIDQwLjQ5IDQuMjIgNy41MS0zLjY2IDE2LjUtNS44NSAyNi4xOC02LjA0LTEuOS0xNC45MS01Ljg2LTI5LjE3LTExLjY1LTQyLjQyLTE1LjQ0IDguMS0zMC45MyA4LjY2LTM1LjQ3Ljk2LTQuNTctNy43NCAzLjYtMjEuMDUgMTguMzItMzAuNjYtOC42OC0xMS43Ny0xOC45OC0yMi4zLTMwLjU2LTMxLjA5LTkuNTEgMTUuNTktMjMuMzYgMjQuNDQtMzEuMzYgMTkuODItOC4wNS00LjY1LTcuMTktMjEuMTYgMS43MS0zNy4yOWExNDcuNDkgMTQ3LjQ5IDAgMCAwLTI3LjQ1LTkuMDh6bS0zMi40OCA4LjZjLTMuMjMgMC01Ljg2IDguODEtNi4wOSAxOS45M2gtLjA1djE2Ljg4YzAgNDEuNDItNDkuMDEgOTUuMDQtOTMuNDkgOTUuMDQtNTIgMC0xMjIuNzUtMS40NS0xNTYuMzcgMjkuMTd2Mi41MWM5LjQyIDE3LjEyIDIwLjU4IDMzLjE3IDMzLjE4IDQ3Ljk3QzQ1LjcgMzgwLjI2IDg0Ljc3IDM2MC40IDE0MS4yIDM2MGM0NS42OCAxLjAyIDc5LjAzIDIwLjMzIDkwLjc2IDQwLjg3LjAxLjAxLS4wMS4wNCAwIC4wNSA3LjY3IDIuMTQgMTUuODUgMy4yMyAyNC4wNCAzLjIxIDguMTkuMDIgMTYuMzctMS4wNyAyNC4wNC0zLjIxLjAxLS4wMS0uMDEtLjA0IDAtLjA1IDExLjc0LTIwLjU0IDQ1LjA4LTM5Ljg1IDkwLjc2LTQwLjg3IDU2LjQzLjM5IDk1LjQ5IDIwLjI2IDEwOC4wMiA0MS4zNSAxMi42LTE0LjggMjMuNzYtMzAuODYgMzMuMTgtNDcuOTd2LTIuNTFjLTMzLjYxLTMwLjYyLTEwNC4zNy0yOS4xNy0xNTYuMzctMjkuMTctNDQuNDggMC05My40OS01My42Mi05My40OS05NS4wNHYtMTYuODhoLS4wNWMtLjIzLTExLjEyLTIuODYtMTkuOTMtNi4wOS0xOS45M3ptMCA5Ni41OWMyMi40MiAwIDQwLjYgMTguMTggNDAuNiA0MC42cy0xOC4xOCA0MC42NS00MC42IDQwLjY1LTQwLjYtMTguMjMtNDAuNi00MC42NWMwLTIyLjQyIDE4LjE4LTQwLjYgNDAuNi00MC42em0wIDcuNjRjLTE4LjE5IDAtMzIuOTYgMTQuNzctMzIuOTYgMzIuOTZTMjM3LjgxIDM2MCAyNTYgMzYwczMyLjk2LTE0Ljc3IDMyLjk2LTMyLjk2LTE0Ljc3LTMyLjk2LTMyLjk2LTMyLjk2em0wIDYuMTRjMTQuODEgMCAyNi44MiAxMi4wMSAyNi44MiAyNi44MnMtMTIuMDEgMjYuODItMjYuODIgMjYuODItMjYuODItMTIuMDEtMjYuODItMjYuODIgMTIuMDEtMjYuODIgMjYuODItMjYuODJ6bS0xMTQuOCA2Ni42N2MtMTAuMTkuMDctMjEuNi4zNi0zMC41IDEuNjYuNDMgNC40MiAxLjUxIDE4LjYzIDcuMTEgMjkuNzYgOS4xMS0yLjU2IDE4LjM2LTMuOSAyNy42Mi0zLjkgNDEuMjguOTQgNzEuNDggMzQuMzUgNzguMjYgNzQuNDdsLjExIDQuN2MxMC40IDEuOTEgMjEuMTkgMi45NCAzMi4yMSAyLjk0IDExLjAzIDAgMjEuODEtMS4wMiAzMi4yMS0yLjk0bC4xMS00LjdjNi43OC00MC4xMiAzNi45OC03My41MyA3OC4yNi03NC40NyA5LjI2IDAgMTguNTEgMS4zNCAyNy42MiAzLjkgNS42LTExLjEzIDYuNjgtMjUuMzQgNy4xMS0yOS43Ni04LjktMS4zLTIwLjMyLTEuNTgtMzAuNS0xLjY2LTE4Ljc2LjQyLTM1LjE5IDQuMTctNDguNjEgOS42Ny0xMi41NCAxNi4wMy0yOS4xNiAzMC4wMy00OS41OCAzMy4wNy0uMDkuMDItLjE3LjA0LS4yNy4wNS0uMDUuMDEtLjExLjA0LS4xNi4wNS01LjI0IDEuMDctMTAuNjMgMS42LTE2LjE5IDEuNi01LjU1IDAtMTAuOTUtLjUzLTE2LjE5LTEuNi0uMDUtLjAxLS4xMS0uMDQtLjE2LS4wNS0uMS0uMDItLjE3LS4wNC0uMjctLjA1LTIwLjQyLTMuMDMtMzcuMDMtMTcuMDQtNDkuNTgtMzMuMDctMTMuNDItNS40OS0yOS44Ni05LjI1LTQ4LjYxLTkuNjd6XCJdLFwiZ2V0LXBvY2tldFwiOls0NDgsNTEyLFtdLFwiZjI2NVwiLFwiTTQwNy42IDY0aC0zNjdDMTguNSA2NCAwIDgyLjUgMCAxMDQuNnYxMzUuMkMwIDM2NC41IDk5LjcgNDY0IDIyNC4yIDQ2NGMxMjQgMCAyMjMuOC05OS41IDIyMy44LTIyNC4yVjEwNC42YzAtMjIuNC0xNy43LTQwLjYtNDAuNC00MC42em0tMTYyIDI2OC41Yy0xMi40IDExLjgtMzEuNCAxMS4xLTQyLjQgMEM4OS41IDIyMy42IDg4LjMgMjI3LjQgODguMyAyMDkuM2MwLTE2LjkgMTMuOC0zMC43IDMwLjctMzAuNyAxNyAwIDE2LjEgMy44IDEwNS4yIDg5LjMgOTAuNi04Ni45IDg4LjYtODkuMyAxMDUuNS04OS4zIDE2LjkgMCAzMC43IDEzLjggMzAuNyAzMC43IDAgMTcuOC0yLjkgMTUuNy0xMTQuOCAxMjMuMnpcIl0sZ2c6WzUxMiw1MTIsW10sXCJmMjYwXCIsXCJNMTc5LjIgMjMwLjRsMTAyLjQgMTAyLjQtMTAyLjQgMTAyLjRMMCAyNTYgMTc5LjIgNzYuOGw0NC44IDQ0LjgtMjUuNiAyNS42LTE5LjItMTkuMi0xMjggMTI4IDEyOCAxMjggNTEuNS01MS41LTc3LjEtNzYuNSAyNS42LTI1LjZ6TTMzMi44IDc2LjhMMjMwLjQgMTc5LjJsMTAyLjQgMTAyLjQgMjUuNi0yNS42LTc3LjEtNzYuNSA1MS41LTUxLjUgMTI4IDEyOC0xMjggMTI4LTE5LjItMTkuMi0yNS42IDI1LjYgNDQuOCA0NC44TDUxMiAyNTYgMzMyLjggNzYuOHpcIl0sXCJnZy1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYyNjFcIixcIk0yNTcgOEMxMjAgOCA5IDExOSA5IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5NCA4IDI1NyA4em0tNDkuNSAzNzQuOEw4MS44IDI1Ny4xbDEyNS43LTEyNS43IDM1LjIgMzUuNC0yNC4yIDI0LjItMTEuMS0xMS4xLTc3LjIgNzcuMiA3Ny4yIDc3LjIgMjYuNi0yNi42LTUzLjEtNTIuOSAyNC40LTI0LjQgNzcuMiA3Ny4yLTc1IDc1LjJ6bTk5LTIuMmwtMzUuMi0zNS4yIDI0LjEtMjQuNCAxMS4xIDExLjEgNzcuMi03Ny4yLTc3LjItNzcuMi0yNi41IDI2LjUgNTMuMSA1Mi45LTI0LjQgMjQuNC03Ny4yLTc3LjIgNzUtNzVMNDMyLjIgMjU1IDMwNi41IDM4MC42elwiXSxnaXQ6WzQ0OCw1MTIsW10sXCJmMWQzXCIsXCJNMTguOCAyMjEuN2MwIDI1LjMgMTYuMiA2MCA0MS41IDY4LjV2MWMtMTguOCA4LjMtMjQgNTAuNiAxIDY1Ljh2MUMzNCAzNjcgMTYgMzg0LjMgMTYgNDE0LjJjMCA1MS41IDQ4LjggNjUuOCA5MS41IDY1LjggNTIgMCA5MC43LTE4LjcgOTAuNy03NiAwLTcwLjUtMTAxLTQ0LjUtMTAxLTgyLjggMC0xMy41IDcuMi0xOC43IDE5LjctMjEuMyA0MS41LTcuNyA2Ny41LTQwIDY3LjUtODIuMiAwLTcuMy0xLjUtMTQuMi00LTIxIDYuNy0xLjUgMTMuMi0zLjMgMTkuNy01LjV2LTUwLjVjLTE3LjIgNi44LTM1LjcgMTEuOC01NC41IDExLjgtNTMuOC0zMS0xMjYuOCAxLjMtMTI2LjggNjkuMnptODcuNyAxNjMuOGMxNyAwIDQxLjIgMyA0MS4yIDI1IDAgMjEuOC0xOS41IDI2LjMtMzcuNyAyNi4zLTE3LjMgMC00My4zLTIuNy00My4zLTI1LjIuMS0yMi4zIDIyLjEtMjYuMSAzOS44LTI2LjF6TTEwMy4zIDI1NmMtMjIgMC0zMS4zLTEzLTMxLjMtMzMuOCAwLTQ5LjMgNjEtNDguOCA2MS0uNSAwIDIwLjMtOCAzNC4zLTI5LjcgMzQuM3pNNDMyIDMwNS41djQ5Yy0xMy4zIDcuMy0zMC41IDkuOC00NS41IDkuOC01My41IDAtNTkuOC00Mi4yLTU5LjgtODUuN3YtODcuN2guNXYtMWMtNyAwLTcuMy0xLjYtMjQgMXYtNDcuNWgyNGMwLTIyLjMuMy0zMS0xLjUtNDEuMmg1Ni43Yy0yIDEzLjgtMS41IDI3LjUtMS41IDQxLjJoNTF2NDcuNXMtMTkuMy0xLTUxLTFWMjgxYzAgMTQuOCAzLjMgMzIuOCAyMS44IDMyLjggOS44IDAgMjEuMy0yLjggMjkuMy04LjN6TTI4NiA2OC43YzAgMTguNy0xNC41IDM2LjItMzMuOCAzNi4yLTE5LjggMC0zNC41LTE3LjItMzQuNS0zNi4yIDAtMTkuMyAxNC41LTM2LjcgMzQuNS0zNi43QzI3MiAzMiAyODYgNTAgMjg2IDY4Ljd6bS02LjIgNzQuNWMtMS44IDE0LjYtMS42IDE5OS44IDAgMjE3LjhoLTU1LjVjMS42LTE4LjEgMS44LTIwMyAwLTIxNy44aDU1LjV6XCJdLFwiZ2l0LXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjFkMlwiLFwiTTE0MC4xIDM0OC41YzEyLjEgMCAyOS41IDIuMSAyOS41IDE3LjkgMCAxNS41LTEzLjkgMTguOC0yNyAxOC44LTEyLjMgMC0zMC45LTItMzAuOS0xOHMxNS43LTE4LjcgMjguNC0xOC43em0tMjQuNy0xMTYuNmMwIDE0LjggNi42IDI0LjEgMjIuMyAyNC4xIDE1LjUgMCAyMS4yLTEwIDIxLjItMjQuNS4xLTM0LjQtNDMuNS0zNC44LTQzLjUuNHpNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tMjQxIDkzLjdjLTEyLjMgNC44LTI1LjUgOC40LTM4LjkgOC40LTM4LjUtMjIuMS05MC43LjktOTAuNyA0OS41IDAgMTggMTEuNiA0Mi45IDI5LjYgNDguOXYuN2MtMTMuNCA1LjktMTcuMSAzNi4xLjcgNDd2LjdjLTE5LjUgNi40LTMyLjMgMTguOC0zMi4zIDQwLjIgMCAzNi44IDM0LjggNDcgNjUuNCA0NyAzNy4xIDAgNjQuOC0xMy40IDY0LjgtNTQuMyAwLTUwLjQtNzIuMS0zMS44LTcyLjEtNTkuMSAwLTkuNiA1LjItMTMuNCAxNC4xLTE1LjIgMjkuNi01LjUgNDguMi0yOC42IDQ4LjItNTguNyAwLTUuMi0xLjEtMTAuMi0yLjktMTUgNC44LTEuMSA5LjUtMi4zIDE0LjEtMy45di0zNi4yem01Ni44IDEuOGgtMzkuNmMxLjMgMTAuNiAxLjEgMTQyLjYgMCAxNTUuNWgzOS42Yy0xLjEtMTIuOC0xLjItMTQ1LjEgMC0xNTUuNXptNC41LTUzLjNjMC0xMy40LTEwLTI2LjItMjQuMS0yNi4yLTE0LjMgMC0yNC42IDEyLjUtMjQuNiAyNi4yIDAgMTMuNiAxMC41IDI1LjkgMjQuNiAyNS45IDEzLjcgMCAyNC4xLTEyLjUgMjQuMS0yNS45em0xMDQuMyA1My4zaC0zNi40YzAtOS44LS40LTE5LjYgMS4xLTI5LjVoLTQwLjVjMS4zIDcuMyAxLjEgMTMuNiAxLjEgMjkuNWgtMTcuMXYzMy45YzExLjktMS45IDEyLjEtLjcgMTcuMS0uN3YuN2gtLjR2NjIuN2MwIDMxLjEgNC41IDYxLjIgNDIuNyA2MS4yIDEwLjcgMCAyMy0xLjggMzIuNS03di0zNWMtNS43IDMuOS0xMy45IDUuOS0yMC45IDUuOS0xMy4yIDAtMTUuNS0xMi45LTE1LjUtMjMuNHYtNjUuMmMyMi43IDAgMzYuNC43IDM2LjQuN3YtMzMuOHpcIl0sZ2l0aHViOls0OTYsNTEyLFtdLFwiZjA5YlwiLFwiTTE2NS45IDM5Ny40YzAgMi0yLjMgMy42LTUuMiAzLjYtMy4zLjMtNS42LTEuMy01LjYtMy42IDAtMiAyLjMtMy42IDUuMi0zLjYgMy0uMyA1LjYgMS4zIDUuNiAzLjZ6bS0zMS4xLTQuNWMtLjcgMiAxLjMgNC4zIDQuMyA0LjkgMi42IDEgNS42IDAgNi4yLTJzLTEuMy00LjMtNC4zLTUuMmMtMi42LS43LTUuNS4zLTYuMiAyLjN6bTQ0LjItMS43Yy0yLjkuNy00LjkgMi42LTQuNiA0LjkuMyAyIDIuOSAzLjMgNS45IDIuNiAyLjktLjcgNC45LTIuNiA0LjYtNC42LS4zLTEuOS0zLTMuMi01LjktMi45ek0yNDQuOCA4QzEwNi4xIDggMCAxMTMuMyAwIDI1MmMwIDExMC45IDY5LjggMjA1LjggMTY5LjUgMjM5LjIgMTIuOCAyLjMgMTcuMy01LjYgMTcuMy0xMi4xIDAtNi4yLS4zLTQwLjQtLjMtNjEuNCAwIDAtNzAgMTUtODQuNy0yOS44IDAgMC0xMS40LTI5LjEtMjcuOC0zNi42IDAgMC0yMi45LTE1LjcgMS42LTE1LjQgMCAwIDI0LjkgMiAzOC42IDI1LjggMjEuOSAzOC42IDU4LjYgMjcuNSA3Mi45IDIwLjkgMi4zLTE2IDguOC0yNy4xIDE2LTMzLjctNTUuOS02LjItMTEyLjMtMTQuMy0xMTIuMy0xMTAuNSAwLTI3LjUgNy42LTQxLjMgMjMuNi01OC45LTIuNi02LjUtMTEuMS0zMy4zIDIuNi02Ny45IDIwLjktNi41IDY5IDI3IDY5IDI3IDIwLTUuNiA0MS41LTguNSA2Mi44LTguNXM0Mi44IDIuOSA2Mi44IDguNWMwIDAgNDguMS0zMy42IDY5LTI3IDEzLjcgMzQuNyA1LjIgNjEuNCAyLjYgNjcuOSAxNiAxNy43IDI1LjggMzEuNSAyNS44IDU4LjkgMCA5Ni41LTU4LjkgMTA0LjItMTE0LjggMTEwLjUgOS4yIDcuOSAxNyAyMi45IDE3IDQ2LjQgMCAzMy43LS4zIDc1LjQtLjMgODMuNiAwIDYuNSA0LjYgMTQuNCAxNy4zIDEyLjFDNDI4LjIgNDU3LjggNDk2IDM2Mi45IDQ5NiAyNTIgNDk2IDExMy4zIDM4My41IDggMjQ0LjggOHpNOTcuMiAzNTIuOWMtMS4zIDEtMSAzLjMuNyA1LjIgMS42IDEuNiAzLjkgMi4zIDUuMiAxIDEuMy0xIDEtMy4zLS43LTUuMi0xLjYtMS42LTMuOS0yLjMtNS4yLTF6bS0xMC44LTguMWMtLjcgMS4zLjMgMi45IDIuMyAzLjkgMS42IDEgMy42LjcgNC4zLS43LjctMS4zLS4zLTIuOS0yLjMtMy45LTItLjYtMy42LS4zLTQuMy43em0zMi40IDM1LjZjLTEuNiAxLjMtMSA0LjMgMS4zIDYuMiAyLjMgMi4zIDUuMiAyLjYgNi41IDEgMS4zLTEuMy43LTQuMy0xLjMtNi4yLTIuMi0yLjMtNS4yLTIuNi02LjUtMXptLTExLjQtMTQuN2MtMS42IDEtMS42IDMuNiAwIDUuOSAxLjYgMi4zIDQuMyAzLjMgNS42IDIuMyAxLjYtMS4zIDEuNi0zLjkgMC02LjItMS40LTIuMy00LTMuMy01LjYtMnpcIl0sXCJnaXRodWItYWx0XCI6WzQ4MCw1MTIsW10sXCJmMTEzXCIsXCJNMTg2LjEgMzI4LjdjMCAyMC45LTEwLjkgNTUuMS0zNi43IDU1LjFzLTM2LjctMzQuMi0zNi43LTU1LjEgMTAuOS01NS4xIDM2LjctNTUuMSAzNi43IDM0LjIgMzYuNyA1NS4xek00ODAgMjc4LjJjMCAzMS45LTMuMiA2NS43LTE3LjUgOTUtMzcuOSA3Ni42LTE0Mi4xIDc0LjgtMjE2LjcgNzQuOC03NS44IDAtMTg2LjIgMi43LTIyNS42LTc0LjgtMTQuNi0yOS0yMC4yLTYzLjEtMjAuMi05NSAwLTQxLjkgMTMuOS04MS41IDQxLjUtMTEzLjYtNS4yLTE1LjgtNy43LTMyLjQtNy43LTQ4LjggMC0yMS41IDQuOS0zMi4zIDE0LjYtNTEuOCA0NS4zIDAgNzQuMyA5IDEwOC44IDM2IDI5LTYuOSA1OC44LTEwIDg4LjctMTAgMjcgMCA1NC4yIDIuOSA4MC40IDkuMiAzNC0yNi43IDYzLTM1LjIgMTA3LjgtMzUuMiA5LjggMTkuNSAxNC42IDMwLjMgMTQuNiA1MS44IDAgMTYuNC0yLjYgMzIuNy03LjcgNDguMiAyNy41IDMyLjQgMzkgNzIuMyAzOSAxMTQuMnptLTY0LjMgNTAuNWMwLTQzLjktMjYuNy04Mi42LTczLjUtODIuNi0xOC45IDAtMzcgMy40LTU2IDYtMTQuOSAyLjMtMjkuOCAzLjItNDUuMSAzLjItMTUuMiAwLTMwLjEtLjktNDUuMS0zLjItMTguNy0yLjYtMzctNi01Ni02LTQ2LjggMC03My41IDM4LjctNzMuNSA4Mi42IDAgODcuOCA4MC40IDEwMS4zIDE1MC40IDEwMS4zaDQ4LjJjNzAuMyAwIDE1MC42LTEzLjQgMTUwLjYtMTAxLjN6bS04Mi42LTU1LjFjLTI1LjggMC0zNi43IDM0LjItMzYuNyA1NS4xczEwLjkgNTUuMSAzNi43IDU1LjEgMzYuNy0zNC4yIDM2LjctNTUuMS0xMC45LTU1LjEtMzYuNy01NS4xelwiXSxcImdpdGh1Yi1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYwOTJcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0yNzcuMyA0MTUuN2MtOC40IDEuNS0xMS41LTMuNy0xMS41LTggMC01LjQuMi0zMyAuMi01NS4zIDAtMTUuNi01LjItMjUuNS0xMS4zLTMwLjcgMzctNC4xIDc2LTkuMiA3Ni03My4xIDAtMTguMi02LjUtMjcuMy0xNy4xLTM5IDEuNy00LjMgNy40LTIyLTEuNy00NS0xMy45LTQuMy00NS43IDE3LjktNDUuNyAxNy45LTEzLjItMy43LTI3LjUtNS42LTQxLjYtNS42LTE0LjEgMC0yOC40IDEuOS00MS42IDUuNiAwIDAtMzEuOC0yMi4yLTQ1LjctMTcuOS05LjEgMjIuOS0zLjUgNDAuNi0xLjcgNDUtMTAuNiAxMS43LTE1LjYgMjAuOC0xNS42IDM5IDAgNjMuNiAzNy4zIDY5IDc0LjMgNzMuMS00LjggNC4zLTkuMSAxMS43LTEwLjYgMjIuMy05LjUgNC4zLTMzLjggMTEuNy00OC4zLTEzLjktOS4xLTE1LjgtMjUuNS0xNy4xLTI1LjUtMTcuMS0xNi4yLS4yLTEuMSAxMC4yLTEuMSAxMC4yIDEwLjggNSAxOC40IDI0LjIgMTguNCAyNC4yIDkuNyAyOS43IDU2LjEgMTkuNyA1Ni4xIDE5LjcgMCAxMy45LjIgMzYuNS4yIDQwLjYgMCA0LjMtMyA5LjUtMTEuNSA4LTY2LTIyLjEtMTEyLjItODQuOS0xMTIuMi0xNTguMyAwLTkxLjggNzAuMi0xNjEuNSAxNjItMTYxLjVTMzg4IDE2NS42IDM4OCAyNTcuNGMuMSA3My40LTQ0LjcgMTM2LjMtMTEwLjcgMTU4LjN6bS05OC4xLTYxLjFjLTEuOS40LTMuNy0uNC0zLjktMS43LS4yLTEuNSAxLjEtMi44IDMtMy4yIDEuOS0uMiAzLjcuNiAzLjkgMS45LjMgMS4zLTEgMi42LTMgM3ptLTkuNS0uOWMwIDEuMy0xLjUgMi40LTMuNSAyLjQtMi4yLjItMy43LS45LTMuNy0yLjQgMC0xLjMgMS41LTIuNCAzLjUtMi40IDEuOS0uMiAzLjcuOSAzLjcgMi40em0tMTMuNy0xLjFjLS40IDEuMy0yLjQgMS45LTQuMSAxLjMtMS45LS40LTMuMi0xLjktMi44LTMuMi40LTEuMyAyLjQtMS45IDQuMS0xLjUgMiAuNiAzLjMgMi4xIDIuOCAzLjR6bS0xMi4zLTUuNGMtLjkgMS4xLTIuOC45LTQuMy0uNi0xLjUtMS4zLTEuOS0zLjItLjktNC4xLjktMS4xIDIuOC0uOSA0LjMuNiAxLjMgMS4zIDEuOCAzLjMuOSA0LjF6bS05LjEtOS4xYy0uOS42LTIuNiAwLTMuNy0xLjVzLTEuMS0zLjIgMC0zLjljMS4xLS45IDIuOC0uMiAzLjcgMS4zIDEuMSAxLjUgMS4xIDMuMyAwIDQuMXptLTYuNS05LjdjLS45LjktMi40LjQtMy41LS42LTEuMS0xLjMtMS4zLTIuOC0uNC0zLjUuOS0uOSAyLjQtLjQgMy41LjYgMS4xIDEuMyAxLjMgMi44LjQgMy41em0tNi43LTcuNGMtLjQuOS0xLjcgMS4xLTIuOC40LTEuMy0uNi0xLjktMS43LTEuNS0yLjYuNC0uNiAxLjUtLjkgMi44LS40IDEuMy43IDEuOSAxLjggMS41IDIuNnpcIl0sZ2l0a3Jha2VuOls1OTIsNTEyLFtdLFwiZjNhNlwiLFwiTTU2NS43IDExOC4xYy0yLjMtNi4xLTkuMy05LjItMTUuMy02LjYtNS43IDIuNC04LjUgOC45LTYuMyAxNC42IDEwLjkgMjkgMTYuOSA2MC41IDE2LjkgOTMuMyAwIDEzNC42LTEwMC4zIDI0NS43LTIzMC4yIDI2Mi43VjM1OC40YzcuOS0xLjUgMTUuNS0zLjYgMjMtNi4ydjEwNGMxMDYuNy0yNS45IDE4NS45LTEyMi4xIDE4NS45LTIzNi44IDAtOTEuOC01MC44LTE3MS44LTEyNS44LTIxMy4zLTUuNy0zLjItMTMtLjktMTUuOSA1LTIuNyA1LjUtLjYgMTIuMiA0LjcgMTUuMSA2Ny45IDM3LjYgMTEzLjkgMTEwIDExMy45IDE5My4yIDAgOTMuMy01Ny45IDE3My4xLTEzOS44IDIwNS40di05Mi4yYzE0LjItNC41IDI0LjktMTcuNyAyNC45LTMzLjUgMC0xMy4xLTYuOC0yNC40LTE3LjMtMzAuNSA4LjMtNzkuNSA0NC41LTU4LjYgNDQuNS04My45VjE3MGMwLTM4LTg3LjktMTYxLjgtMTI5LTE2NC43LTIuNS0uMi01LS4yLTcuNiAwQzI1MS4xIDguMyAxNjMuMiAxMzIgMTYzLjIgMTcwdjE0LjhjMCAyNS4zIDM2LjMgNC4zIDQ0LjUgODMuOS0xMC42IDYuMS0xNy4zIDE3LjQtMTcuMyAzMC41IDAgMTUuOCAxMC42IDI5IDI0LjggMzMuNXY5Mi4yYy04MS45LTMyLjItMTM5LjgtMTEyLTEzOS44LTIwNS40IDAtODMuMSA0Ni0xNTUuNSAxMTMuOS0xOTMuMiA1LjQtMyA3LjQtOS42IDQuNy0xNS4xLTIuOS01LjktMTAuMS04LjItMTUuOS01LTc1IDQxLjUtMTI1LjggMTIxLjUtMTI1LjggMjEzLjMgMCAxMTQuNyA3OS4yIDIxMC44IDE4NS45IDIzNi44di0xMDRjNy42IDIuNSAxNS4xIDQuNiAyMyA2LjJ2MTIzLjdDMTMxLjQgNDY1LjIgMzEgMzU0LjEgMzEgMjE5LjVjMC0zMi44IDYtNjQuMyAxNi45LTkzLjMgMi4yLTUuOC0uNi0xMi4yLTYuMy0xNC42LTYtMi42LTEzIC40LTE1LjMgNi42QzE0LjUgMTQ5LjcgOCAxODMuOCA4IDIxOS41YzAgMTU1LjEgMTIyLjYgMjgxLjYgMjc2LjMgMjg3LjhWMzYxLjRjNi44LjQgMTUgLjUgMjMuNCAwdjE0NS44QzQ2MS40IDUwMS4xIDU4NCAzNzQuNiA1ODQgMjE5LjVjMC0zNS43LTYuNS02OS44LTE4LjMtMTAxLjR6TTM2NS45IDI3NS41YzEzIDAgMjMuNyAxMC41IDIzLjcgMjMuNyAwIDEzLjEtMTAuNiAyMy43LTIzLjcgMjMuNy0xMyAwLTIzLjctMTAuNS0yMy43LTIzLjcgMC0xMy4xIDEwLjYtMjMuNyAyMy43LTIzLjd6bS0xMzkuOCA0Ny4zYy0xMy4yIDAtMjMuNy0xMC43LTIzLjctMjMuN3MxMC41LTIzLjcgMjMuNy0yMy43YzEzLjEgMCAyMy43IDEwLjYgMjMuNyAyMy43IDAgMTMtMTAuNSAyMy43LTIzLjcgMjMuN3pcIl0sZ2l0bGFiOls1MTIsNTEyLFtdLFwiZjI5NlwiLFwiTTI5Ljc4MiAxOTkuNzMyTDI1NiA0OTMuNzE0IDguMDc0IDMwOS42OTljLTYuODU2LTUuMTQyLTkuNzEyLTEzLjk5Ni03LjE0MS0yMS45OTNsMjguODQ5LTg3Ljk3NHptNzUuNDA1LTE3NC44MDZjLTMuMTQyLTguODU0LTE1LjcwOS04Ljg1NC0xOC44NTEgMEwyOS43ODIgMTk5LjczMmgxMzEuOTYxTDEwNS4xODcgMjQuOTI2em01Ni41NTYgMTc0LjgwNkwyNTYgNDkzLjcxNGw5NC4yNTctMjkzLjk4MkgxNjEuNzQzem0zNDkuMzI0IDg3Ljk3NGwtMjguODQ5LTg3Ljk3NEwyNTYgNDkzLjcxNGwyNDcuOTI2LTE4NC4wMTVjNi44NTUtNS4xNDIgOS43MTEtMTMuOTk2IDcuMTQxLTIxLjk5M3ptLTg1LjQwNC0yNjIuNzhjLTMuMTQyLTguODU0LTE1LjcwOS04Ljg1NC0xOC44NTEgMGwtNTYuNTU1IDE3NC44MDZoMTMxLjk2MUw0MjUuNjYzIDI0LjkyNnpcIl0sZ2l0dGVyOlszODQsNTEyLFtdLFwiZjQyNlwiLFwiTTY2LjQgMzIyLjVIMTZWMGg1MC40djMyMi41ek0xNjYuOSA3Ni4xaC01MC40VjUxMmg1MC40Vjc2LjF6bTEwMC42IDBoLTUwLjRWNTEyaDUwLjRWNzYuMXpNMzY4IDc2aC01MC40djI0N0gzNjhWNzZ6XCJdLGdsaWRlOls0NDgsNTEyLFtdLFwiZjJhNVwiLFwiTTI1Mi44IDE0OC42YzAgOC44LTEuNiAxNy43LTMuNCAyNi40LTUuOCAyNy44LTExLjYgNTUuOC0xNy4zIDgzLjYtMS40IDYuMy04LjMgNC45LTEzLjcgNC45LTIzLjggMC0zMC41LTI2LTMwLjUtNDUuNSAwLTI5LjMgMTEuMi02OC4xIDM4LjUtODMuMSA0LjMtMi41IDkuMi00LjIgMTQuMS00LjIgMTEuNCAwIDEyLjMgOC4zIDEyLjMgMTcuOXpNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tNjQgMTg3YzAtNS4xLTIwLjgtMzcuNy0yNS41LTM5LjUtMi4yLS45LTcuMi0yLjMtOS42LTIuMy0yMy4xIDAtMzguNyAxMC41LTU4LjIgMjEuNWwtLjUtLjVjNC4zLTI5LjQgMTQuNi01Ny4yIDE0LjYtODcuNCAwLTQ0LjYtMjMuOC02Mi43LTY3LjUtNjIuNy03MS43IDAtMTA4IDcwLjgtMTA4IDEyMy41IDAgNTQuNyAzMiA4NSA4Ni4zIDg1IDcuNSAwIDYuOS0uNiA2LjkgMi4zLTEwLjUgODAuMy01Ni41IDgyLjktNTYuNSA1OC45IDAtMjQuNCAyOC0zNi41IDI4LjMtMzgtLjItNy42LTI5LjMtMTcuMi0zNi43LTE3LjItMjEuMSAwLTMyLjcgMzMtMzIuNyA1MC42IDAgMzIuMyAyMC40IDU0LjcgNTMuMyA1NC43IDQ4LjIgMCA4My40LTQ5LjcgOTQuMy05MS43IDkuNC0zNy43IDctMzkuNCAxMi4zLTQyLjEgMjAtMTAuMSAzNS44LTE2LjggNTguNC0xNi44IDExLjEgMCAxOSAyLjMgMzYuNyA1LjIgMS44LjEgNC4xLTEuNyA0LjEtMy41elwiXSxcImdsaWRlLWdcIjpbNDQ4LDUxMixbXSxcImYyYTZcIixcIk00MDcuMSAyMTEuMmMtMy41LTEuNC0xMS42LTMuOC0xNS40LTMuOC0zNy4xIDAtNjIuMiAxNi44LTkzLjUgMzQuNWwtLjktLjljNy00Ny4zIDIzLjUtOTEuOSAyMy41LTE0MC40QzMyMC44IDI5LjEgMjgyLjYgMCAyMTIuNCAwIDk3LjMgMCAzOSAxMTMuNyAzOSAxOTguNCAzOSAyODYuMyA5MC4zIDMzNSAxNzcuNiAzMzVjMTIgMCAxMS0xIDExIDMuOC0xNi45IDEyOC45LTkwLjggMTMzLjEtOTAuOCA5NC42IDAtMzkuMiA0NS01OC42IDQ1LjUtNjEtLjMtMTIuMi00Ny0yNy42LTU4LjktMjcuNi0zMy45LjEtNTIuNCA1MS4yLTUyLjQgNzkuM0MzMiA0NzYgNjQuOCA1MTIgMTE3LjUgNTEyYzc3LjQgMCAxMzQtNzcuOCAxNTEuNC0xNDUuNCAxNS4xLTYwLjUgMTEuMi02My4zIDE5LjctNjcuNiAzMi4yLTE2LjIgNTcuNS0yNyA5My44LTI3IDE3LjggMCAzMC41IDMuNyA1OC45IDguNCAyLjkgMCA2LjctMi45IDYuNy01LjggMC04LTMzLjQtNjAuNS00MC45LTYzLjR6bS0xNzUuMy04NC40Yy05LjMgNDQuNy0xOC42IDg5LjYtMjcuOCAxMzQuMy0yLjMgMTAuMi0xMy4zIDcuOC0yMiA3LjgtMzguMyAwLTQ5LTQxLjgtNDktNzMuMSAwLTQ3IDE4LTEwOS4zIDYxLjgtMTMzLjQgNy00LjEgMTQuOC02LjcgMjIuNi02LjcgMTguNiAwIDIwIDEzLjMgMjAgMjguNy0uMSAxNC4zLTIuNyAyOC41LTUuNiA0Mi40elwiXSxnb2ZvcmU6WzQwMCw1MTIsW10sXCJmM2E3XCIsXCJNMzI0IDMxOS44aC0xMy4ydjM0LjdjLTI0LjUgMjMuMS01Ni4zIDM1LjgtODkuOSAzNS44LTczLjIgMC0xMzIuNC02MC4yLTEzMi40LTEzNC40IDAtNzQuMSA1OS4yLTEzNC40IDEzMi40LTEzNC40IDM1LjMgMCA2OC42IDE0IDkzLjYgMzkuNGw2Mi4zLTYzLjNDMzM1IDU1LjMgMjc5LjcgMzIgMjIwLjcgMzIgOTggMzIgMCAxMzIuNiAwIDI1NmMwIDEyMi41IDk3IDIyNCAyMjAuNyAyMjQgNjMuMiAwIDEyNC41LTI2LjIgMTcxLTgyLjUtMi0yNy42LTEzLjQtNzcuNy02Ny43LTc3Ljd6bS0xMi4xLTExMi41SDIwNS42djg5SDMyNGMzMy41IDAgNjAuNSAxNS4xIDc2IDQxLjh2LTMwLjZjMC02NS4yLTQwLjQtMTAwLjItODguMS0xMDAuMnpcIl0sZ29vZHJlYWRzOls0NDgsNTEyLFtdLFwiZjNhOFwiLFwiTTI5OS45IDE5MS4yYzUuMSAzNy4zLTQuNyA3OS0zNS45IDEwMC43LTIyLjMgMTUuNS01Mi44IDE0LjEtNzAuOCA1LjctMzcuMS0xNy4zLTQ5LjUtNTguNi00Ni44LTk3LjIgNC4zLTYwLjkgNDAuOS04Ny45IDc1LjMtODcuNSA0Ni45LS4yIDcxLjggMzEuOCA3OC4yIDc4LjN6TTQ0OCA4OHYzMzZjMCAzMC45LTI1LjEgNTYtNTYgNTZINTZjLTMwLjkgMC01Ni0yNS4xLTU2LTU2Vjg4YzAtMzAuOSAyNS4xLTU2IDU2LTU2aDMzNmMzMC45IDAgNTYgMjUuMSA1NiA1NnpNMzMwIDMxMy4ycy0uMS0zNC0uMS0yMTcuM2gtMjl2NDAuM2MtLjguMy0xLjItLjUtMS42LTEuMi05LjYtMjAuNy0zNS45LTQ2LjMtNzYtNDYtNTEuOS40LTg3LjIgMzEuMi0xMDAuNiA3Ny44LTQuMyAxNC45LTUuOCAzMC4xLTUuNSA0NS42IDEuNyA3Ny45IDQ1LjEgMTE3LjggMTEyLjQgMTE1LjIgMjguOS0xLjEgNTQuNS0xNyA2OS00NS4yLjUtMSAxLjEtMS45IDEuNy0yLjkuMi4xLjQuMS42LjIuMyAzLjguMiAzMC43LjEgMzQuNS0uMiAxNC44LTIgMjkuNS03LjIgNDMuNS03LjggMjEtMjIuMyAzNC43LTQ0LjUgMzkuNS0xNy44IDMuOS0zNS42IDMuOC01My4yLTEuMi0yMS41LTYuMS0zNi41LTE5LTQxLjEtNDEuOC0uMy0xLjYtMS4zLTEuMy0yLjMtMS4zaC0yNi44Yy44IDEwLjYgMy4yIDIwLjMgOC41IDI5LjIgMjQuMiA0MC41IDgyLjcgNDguNSAxMjguMiAzNy40IDQ5LjktMTIuMyA2Ny4zLTU0LjkgNjcuNC0xMDYuM3pcIl0sXCJnb29kcmVhZHMtZ1wiOlszODQsNTEyLFtdLFwiZjNhOVwiLFwiTTQyLjYgNDAzLjNoMi44YzEyLjcgMCAyNS41IDAgMzguMi4xIDEuNiAwIDMuMS0uNCAzLjYgMi4xIDcuMSAzNC45IDMwIDU0LjYgNjIuOSA2My45IDI2LjkgNy42IDU0LjEgNy44IDgxLjMgMS44IDMzLjgtNy40IDU2LTI4LjMgNjgtNjAuNCA4LTIxLjUgMTAuNy00My44IDExLTY2LjUuMS01LjguMy00Ny0uMi01Mi44bC0uOS0uM2MtLjggMS41LTEuNyAyLjktMi41IDQuNC0yMi4xIDQzLjEtNjEuMyA2Ny40LTEwNS40IDY5LjEtMTAzIDQtMTY5LjQtNTctMTcyLTE3Ni4yLS41LTIzLjcgMS44LTQ2LjkgOC4zLTY5LjdDNTguMyA0Ny43IDExMi4zLjYgMTkxLjYgMGM2MS4zLS40IDEwMS41IDM4LjcgMTE2LjIgNzAuMy41IDEuMSAxLjMgMi4zIDIuNCAxLjlWMTAuNmg0NC4zYzAgMjgwLjMuMSAzMzIuMi4xIDMzMi4yLS4xIDc4LjUtMjYuNyAxNDMuNy0xMDMgMTYyLjItNjkuNSAxNi45LTE1OSA0LjgtMTk2LTU3LjItOC0xMy41LTExLjgtMjguMy0xMy00NC41ek0xODguOSAzNi41Yy01Mi41LS41LTEwOC41IDQwLjctMTE1IDEzMy44LTQuMSA1OSAxNC44IDEyMi4yIDcxLjUgMTQ4LjYgMjcuNiAxMi45IDc0LjMgMTUgMTA4LjMtOC43IDQ3LjYtMzMuMiA2Mi43LTk3IDU0LjgtMTU0LTkuNy03MS4xLTQ3LjgtMTIwLTExOS42LTExOS43elwiXSxnb29nbGU6WzQ4OCw1MTIsW10sXCJmMWEwXCIsXCJNNDg4IDI2MS44QzQ4OCA0MDMuMyAzOTEuMSA1MDQgMjQ4IDUwNCAxMTAuOCA1MDQgMCAzOTMuMiAwIDI1NlMxMTAuOCA4IDI0OCA4YzY2LjggMCAxMjMgMjQuNSAxNjYuMyA2NC45bC02Ny41IDY0LjlDMjU4LjUgNTIuNiA5NC4zIDExNi42IDk0LjMgMjU2YzAgODYuNSA2OS4xIDE1Ni42IDE1My43IDE1Ni42IDk4LjIgMCAxMzUtNzAuNCAxNDAuOC0xMDYuOUgyNDh2LTg1LjNoMjM2LjFjMi4zIDEyLjcgMy45IDI0LjkgMy45IDQxLjR6XCJdLFwiZ29vZ2xlLWRyaXZlXCI6WzUxMiw1MTIsW10sXCJmM2FhXCIsXCJNMzM5IDMxNC45TDE3NS40IDMyaDE2MS4ybDE2My42IDI4Mi45SDMzOXptLTEzNy41IDIzLjZMMTIwLjkgNDgwaDMxMC41TDUxMiAzMzguNUgyMDEuNXpNMTU0LjEgNjcuNEwwIDMzOC41IDgwLjYgNDgwIDIzNyAyMDguOCAxNTQuMSA2Ny40elwiXSxcImdvb2dsZS1wbGF5XCI6WzUxMiw1MTIsW10sXCJmM2FiXCIsXCJNMzI1LjMgMjM0LjNMMTA0LjYgMTNsMjgwLjggMTYxLjItNjAuMSA2MC4xek00NyAwQzM0IDYuOCAyNS4zIDE5LjIgMjUuMyAzNS4zdjQ0MS4zYzAgMTYuMSA4LjcgMjguNSAyMS43IDM1LjNsMjU2LjYtMjU2TDQ3IDB6bTQyNS4yIDIyNS42bC01OC45LTM0LjEtNjUuNyA2NC41IDY1LjcgNjQuNSA2MC4xLTM0LjFjMTgtMTQuMyAxOC00Ni41LTEuMi02MC44ek0xMDQuNiA0OTlsMjgwLjgtMTYxLjItNjAuMS02MC4xTDEwNC42IDQ5OXpcIl0sXCJnb29nbGUtcGx1c1wiOls0OTYsNTEyLFtdLFwiZjJiM1wiLFwiTTI0OCA4QzExMS4xIDggMCAxMTkuMSAwIDI1NnMxMTEuMSAyNDggMjQ4IDI0OCAyNDgtMTExLjEgMjQ4LTI0OFMzODQuOSA4IDI0OCA4em0tNzAuNyAzNzJjLTY4LjggMC0xMjQtNTUuNS0xMjQtMTI0czU1LjItMTI0IDEyNC0xMjRjMzEuMyAwIDYwLjEgMTEgODMgMzIuM2wtMzMuNiAzMi42Yy0xMy4yLTEyLjktMzEuMy0xOS4xLTQ5LjQtMTkuMS00Mi45IDAtNzcuMiAzNS41LTc3LjIgNzguMXMzNC4yIDc4LjEgNzcuMiA3OC4xYzMyLjYgMCA2NC45LTE5LjEgNzAuMS01My4zaC03MC4xdi00Mi42aDExNi45YzEuMyA2LjggMS45IDEzLjYgMS45IDIwLjcgMCA3MC44LTQ3LjUgMTIxLjItMTE4LjggMTIxLjJ6bTIzMC4yLTEwNi4ydjM1LjVIMzcydi0zNS41aC0zNS41di0zNS41SDM3MnYtMzUuNWgzNS41djM1LjVoMzUuMnYzNS41aC0zNS4yelwiXSxcImdvb2dsZS1wbHVzLWdcIjpbNjQwLDUxMixbXSxcImYwZDVcIixcIk0zODYuMDYxIDIyOC40OTZjMS44MzQgOS42OTIgMy4xNDMgMTkuMzg0IDMuMTQzIDMxLjk1NkMzODkuMjA0IDM3MC4yMDUgMzE1LjU5OSA0NDggMjA0LjggNDQ4Yy0xMDYuMDg0IDAtMTkyLTg1LjkxNS0xOTItMTkyczg1LjkxNi0xOTIgMTkyLTE5MmM1MS44NjQgMCA5NS4wODMgMTguODU5IDEyOC42MTEgNTAuMjkybC01Mi4xMjYgNTAuMDNjLTE0LjE0NS0xMy42MjEtMzkuMDI4LTI5LjU5OS03Ni40ODUtMjkuNTk5LTY1LjQ4NCAwLTExOC45MiA1NC4yMjEtMTE4LjkyIDEyMS4yNzcgMCA2Ny4wNTYgNTMuNDM2IDEyMS4yNzcgMTE4LjkyIDEyMS4yNzcgNzUuOTYxIDAgMTA0LjUxMy01NC43NDUgMTA4Ljk2NS04Mi43NzNIMjA0Ljh2LTY2LjAwOWgxODEuMjYxem0xODUuNDA2IDYuNDM3VjE3OS4yaC01Ni4wMDF2NTUuNzMzaC01NS43MzN2NTYuMDAxaDU1LjczM3Y1NS43MzNoNTYuMDAxdi01NS43MzNINjI3LjJ2LTU2LjAwMWgtNTUuNzMzelwiXSxcImdvb2dsZS1wbHVzLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjBkNFwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTE2NCAzNTZjLTU1LjMgMC0xMDAtNDQuNy0xMDAtMTAwczQ0LjctMTAwIDEwMC0xMDBjMjcgMCA0OS41IDkuOCA2NyAyNi4ybC0yNy4xIDI2LjFjLTcuNC03LjEtMjAuMy0xNS40LTM5LjgtMTUuNC0zNC4xIDAtNjEuOSAyOC4yLTYxLjkgNjMuMiAwIDM0LjkgMjcuOCA2My4yIDYxLjkgNjMuMiAzOS42IDAgNTQuNC0yOC41IDU2LjgtNDMuMUgxNjR2LTM0LjRoOTQuNGMxIDUgMS42IDEwLjEgMS42IDE2LjYgMCA1Ny4xLTM4LjMgOTcuNi05NiA5Ny42em0yMjAtODEuOGgtMjl2MjloLTI5LjJ2LTI5aC0yOVYyNDVoMjl2LTI5SDM1NXYyOWgyOXYyOS4yelwiXSxcImdvb2dsZS13YWxsZXRcIjpbNDQ4LDUxMixbXSxcImYxZWVcIixcIk0xNTYuOCAxMjYuOGMzNy42IDYwLjYgNjQuMiAxMTMuMSA4NC4zIDE2Mi41LTguMyAzMy44LTE4LjggNjYuNS0zMS4zIDk4LjMtMTMuMi01Mi4zLTI2LjUtMTAxLjMtNTYtMTQ4LjUgNi41LTM2LjQgMi4zLTczLjYgMy0xMTIuM3pNMTA5LjMgMjAwSDE2LjFjLTYuNSAwLTEwLjUgNy41LTYuNSAxMi43QzUxLjggMjY3IDgxLjMgMzMwLjUgMTAxLjMgNDAwaDEwMy41Yy0xNi4yLTY5LjctMzguNy0xMzMuNy04Mi41LTE5My41LTMtNC04LTYuNS0xMy02LjV6bTQ3LjgtODhjNjguNSAxMDggMTMwIDIzNC41IDEzOC4yIDM2OEg0MDljLTEyLTEzOC02OC40LTI2NS0xNDMuMi0zNjhIMTU3LjF6bTI1MS44LTY4LjVjLTEuOC02LjgtOC4yLTExLjUtMTUuMi0xMS41aC04OC4zYy01LjMgMC05IDUtNy44IDEwLjMgMTMuMiA0Ni41IDIyLjMgOTUuNSAyNi41IDE0NiA0OC4yIDg2LjIgNzkuNyAxNzguMyA5MC42IDI3MC44IDE1LjgtNjAuNSAyNS4zLTEzMy41IDI1LjMtMjAzIDAtNzMuNi0xMi4xLTE0NS4xLTMxLjEtMjEyLjZ6XCJdLGdyYXRpcGF5Ols0OTYsNTEyLFtdLFwiZjE4NFwiLFwiTTI0OCA4QzExMS4xIDggMCAxMTkuMSAwIDI1NnMxMTEuMSAyNDggMjQ4IDI0OCAyNDgtMTExLjEgMjQ4LTI0OFMzODQuOSA4IDI0OCA4em0xMTQuNiAyMjYuNGwtMTEzIDE1Mi43LTExMi43LTE1Mi43Yy04LjctMTEuOS0xOS4xLTUwLjQgMTMuNi03MiAyOC4xLTE4LjEgNTQuNi00LjIgNjguNSAxMS45IDE1LjkgMTcuOSA0Ni42IDE2LjkgNjEuNyAwIDEzLjktMTYuMSA0MC40LTMwIDY4LjEtMTEuOSAzMi45IDIxLjYgMjIuNiA2MCAxMy44IDcyelwiXSxncmF2Ols1MTIsNTEyLFtdLFwiZjJkNlwiLFwiTTMwMS4xIDIxMmM0LjQgNC40IDQuNCAxMS45IDAgMTYuM2wtOS43IDkuN2MtNC40IDQuNy0xMS45IDQuNy0xNi42IDBsLTEwLjUtMTAuNWMtNC40LTQuNy00LjQtMTEuOSAwLTE2LjZsOS43LTkuN2M0LjQtNC40IDExLjktNC40IDE2LjYgMGwxMC41IDEwLjh6bS0zMC4yLTE5LjdjMy0zIDMtNy44IDAtMTAuNS0yLjgtMy03LjUtMy0xMC41IDAtMi44IDIuOC0yLjggNy41IDAgMTAuNSAzLjEgMi44IDcuOCAyLjggMTAuNSAwem0tMjYgNS4zYy0zIDIuOC0zIDcuNSAwIDEwLjIgMi44IDMgNy41IDMgMTAuNSAwIDIuOC0yLjggMi44LTcuNSAwLTEwLjItMy0zLTcuNy0zLTEwLjUgMHptNzIuNS0xMy4zYy0xOS45LTE0LjQtMzMuOC00My4yLTExLjktNjguMSAyMS42LTI0LjkgNDAuNy0xNy4yIDU5LjguOCAxMS45IDExLjMgMjkuMyAyNC45IDE3LjIgNDguMi0xMi41IDIzLjUtNDUuMSAzMy4yLTY1LjEgMTkuMXptNDcuNy00NC41Yy04LjktMTAtMjMuMyA2LjktMTUuNSAxNi4xIDcuNCA5IDMyLjEgMi40IDE1LjUtMTYuMXpNNTA0IDI1NmMwIDEzNy0xMTEgMjQ4LTI0OCAyNDhTOCAzOTMgOCAyNTYgMTE5IDggMjU2IDhzMjQ4IDExMSAyNDggMjQ4em0tNjYuMiA0Mi42YzIuNS0xNi4xLTIwLjItMTYuNi0yNS4yLTI1LjctMTMuNi0yNC4xLTI3LjctMzYuOC01NC41LTMwLjQgMTEuNi04IDIzLjUtNi4xIDIzLjUtNi4xLjMtNi40IDAtMTMtOS40LTI0LjkgMy45LTEyLjUuMy0yMi40LjMtMjIuNCAxNS41LTguNiAyNi44LTI0LjQgMjkuMS00My4yIDMuNi0zMS0xOC44LTU5LjItNDkuOC02Mi44LTIyLjEtMi41LTQzLjcgNy43LTU0LjMgMjUuNy0yMy4yIDQwLjEgMS40IDcwLjkgMjIuNCA4MS40LTE0LjQtMS40LTM0LjMtMTEuOS00MC4xLTM0LjMtNi42LTI1LjcgMi44LTQ5LjggOC45LTYxLjQgMCAwLTQuNC01LjgtOC04LjkgMCAwLTEzLjggMC0yNC42IDUuMyAxMS45LTE1LjIgMjUuMi0xNC40IDI1LjItMTQuNCAwLTYuNC0uNi0xNC45LTMuNi0yMS42LTUuNC0xMS0yMy44LTEyLjktMzEuNyAyLjguMS0uMi4zLS40LjQtLjUtNSAxMS45LTEuMSA1NS45IDE2LjkgODcuMi0yLjUgMS40LTkuMSA2LjEtMTMgMTAtMjEuNiA5LjctNTYuMiA2MC4zLTU2LjIgNjAuMy0yOC4yIDEwLjgtNzcuMiA1MC45LTcwLjYgNzkuNy4zIDMgMS40IDUuNSAzIDcuNS0yLjggMi4yLTUuNSA1LTguMyA4LjMtMTEuOSAxMy44LTUuMyAzNS4yIDE3LjcgMjQuNCAxNS44LTcuMiAyOS42LTIwLjIgMzYuMy0zMC40IDAgMC01LjUtNS0xNi4zLTQuNCAyNy43LTYuNiAzNC4zLTkuNCA0Ni4yLTkuMSA4IDMuOSA4LTM0LjMgOC0zNC4zIDAtMTQuNy0yLjItMzEtMTEuMS00MS41IDEyLjUgMTIuMiAyOS4xIDMyLjcgMjggNjAuNi0uOCAxOC4zLTE1LjIgMjMtMTUuMiAyMy05LjEgMTYuNi00My4yIDY1LjktMzAuNCAxMDYgMCAwLTkuNy0xNC45LTEwLjItMjIuMS0xNy40IDE5LjQtNDYuNSA1Mi4zLTI0LjYgNjQuNSAyNi42IDE0LjcgMTA4LjgtODguNiAxMjYuMi0xNDIuMyAzNC42LTIwLjggNTUuNC00Ny4zIDYzLjktNjUgMjIgNDMuNSA5NS4zIDk0LjUgMTAxLjEgNTl6XCJdLGdyaXBmaXJlOlszODQsNTEyLFtdLFwiZjNhY1wiLFwiTTE3MS44IDUwMy44YzAtNS4zIDQuOC0xMi4yIDQuOC0yMi4zIDAtMTUuMi0xMy0zOS45LTc4LjEtODYuNkM2NC4yIDM2NS44IDMyIDMzNi40IDMyIDI4Ni42IDMyIDE3MS45IDE3OS4xIDExMC4xIDE3OS4xIDE4YzAtMy4zLS4yLTYuNy0uNi0xMCA1LjEgMi40IDM5LjEgNDMuMyAzOS4xIDkwLjQgMCA4MC41LTEwNS4xIDEyOS4yLTEwNS4xIDIwMyAwIDI2LjkgMTYuNiA0Ny4yIDMyLjYgNjkuNSAyMi41IDMwLjIgNDQuMiA1Ni45IDQ0LjIgODYuNS0uMSAxNC41LTQuNCAyOS43LTE3LjUgNDYuNHptMTQ2LTI0MS40YzEuNSA4LjQgMi4yIDE2LjYgMi4yIDI0LjYgMCA1MS44LTI5LjQgOTcuNS02Ny4zIDEzNi44LTEgMS0yLjIgMi40LTMuMiAyLjQtMy42IDAtMzUuNS00MS42LTM1LjUtNTMuMiAwIDAgNDEuOC01NS43IDQxLjgtOTYuOSAwLTEwLjgtMi43LTIxLjctOS4xLTMzLjQtMS41IDMyLjMtNTUuNyA4Ny43LTU4LjEgODcuNy0yLjcgMC0xNy45LTIyLTE3LjktNDIuMSAwLTUuMyAxLTEwLjcgMy4yLTE1LjggMi40LTUuNSA1Ni42LTcyIDU2LjYtMTE2LjcgMC02LjItMS0xMi0zLjQtMTcuMWwtNC03LjJjMTYuNyA2LjUgODIuNiA2NC4xIDk0LjcgMTMwLjlcIl0sZ3J1bnQ6WzM4NCw1MTIsW10sXCJmM2FkXCIsXCJNNjEuMyAxODkuM2MtMS4xIDEwIDUuMiAxOS4xIDUuMiAxOS4xLjctNy41IDIuMi0xMi44IDQtMTYuNi40IDEwLjMgMy4yIDIzLjUgMTIuOCAzNC4xIDYuOSA3LjYgMzUuNiAyMy4zIDU0LjkgNi4xIDEgMi40IDIuMSA1LjMgMyA4LjUgMi45IDEwLjMtMi43IDI1LjMtMi43IDI1LjNzMTUuMS0xNy4xIDEzLjktMzIuNWMxMC44LS41IDIxLjQtOC40IDIxLjEtMTkuNSAwIDAtMTguOSAxMC40LTM1LjUtOC44LTkuNy0xMS4yLTQwLjktNDItODMuMS0zMS44IDQuMyAxIDguOSAyLjQgMTMuNSA0LjFoLS4xYy00LjIgMi02LjUgNy4xLTcgMTJ6bTI4LjMtMS44YzE5LjUgMTEgMzcuNCAyNS43IDQ0LjkgMzctNS43IDMuMy0yMS43IDEwLjQtMzgtMS43LTEwLjMtNy42LTkuOC0yNi4yLTYuOS0zNS4zem03OS4yIDIzMy43YzIuMiAyLjMgMS41IDUuMy45IDYuOC0xLjEgMi43LTUuNSAxMS42LTEzIDE5LjgtMi43IDIuOS02LjYgNC42LTExIDQuNi00LjMgMC04LjctMS42LTExLjgtNC4zLTIuMy0yLjEtMTAuMi05LjUtMTMuNy0xOC42LTEuMy0zLjQtMS02LjEuOS04LjEgMS4zLTEuMyA0LTIuOSA5LjUtMi45SDE2MGM0LjEgMCA3IC45IDguOCAyLjd6bTYyLjktMTg3LjljLTEuMiAxNS41IDEzLjkgMzIuNSAxMy45IDMyLjVzLTUuNi0xNS0yLjctMjUuM2MuOS0zLjIgMi02IDMtOC41IDE5LjMgMTcuMyA0OCAxLjUgNTQuOC02LjEgOS42LTEwLjYgMTIuMy0yMy44IDEyLjgtMzQuMSAxLjggMy44IDMuNCA5LjEgNCAxNi42IDAgMCA2LjQtOS4xIDUuMi0xOS4xLS42LTUtMi45LTEwLTctMTEuOGgtLjFjNC42LTEuOCA5LjItMy4yIDEzLjUtNC4xLTQyLjMtMTAuMi03My40IDIwLjYtODMuMSAzMS44LTE2LjcgMTkuMi0zNS41IDguOC0zNS41IDguOC0uMiAxMC45IDEwLjQgMTguOSAyMS4yIDE5LjN6bTE3LjgtOC44YzcuNS0xMS40IDI1LjQtMjYgNDQuOS0zNyAzIDkuMSAzLjQgMjcuNy03IDM1LjQtMTYuMyAxMi4xLTMyLjIgNS0zNy45IDEuNi0uMS4xIDAgMCAwIDB6TTI2MyA0MjEuNGMxLjkgMS45IDIuMiA0LjYuOSA3LjktMy41IDguOS0xMS40IDE2LjEtMTMuNyAxOC4xLTMuMSAyLjYtNy40IDQuMi0xMS44IDQuMnMtOC4zLTEuNi0xMS00LjVjLTcuNS04LTEyLTE2LjctMTMtMTkuMy0uNi0xLjUtMS4zLTQuNC45LTYuNyAxLjctMS44IDQuNy0yLjcgOC45LTIuN2gyOS40YzUuNC4xIDguMSAxLjcgOS40IDN6bS05OC4zLTI1MS41YzkuOSA2IDE4LjggOC4xIDI3LjMgOC4zIDguNS0uMiAxNy40LTIuMyAyNy4zLTguMyAwIDAtMTQuNSAxNy43LTI3LjIgMTcuOGgtLjJjLTEyLjctLjItMjcuMi0xNy44LTI3LjItMTcuOHptMTg0LjUgMTQ3LjRjLTIuNCAxNy45LTEzIDMzLjgtMjQuNiA0My43LTMuMS0yMi43LTMuNy01NS41LTMuNy02Mi40IDAtMTQuNyA5LjUtMjQuNSAxMi4yLTI2LjEgMi41LTEuNSA1LjQtMyA4LjMtNC42IDE4LTkuNiA0MC40LTIxLjYgNDAuNC00My43IDAtMTYuMi05LjMtMjMuMi0xNS40LTI3LjgtLjgtLjYtMS41LTEuMS0yLjItMS43LTIuMS0xLjctMy43LTMtNC4zLTQuNC00LjQtOS44LTMuNi0zNC4yLTEuNy0zNy42LjYtLjYgMTYuNy0yMC45IDExLjgtMzkuMi0yLTcuNC02LjktMTMuMy0xNC4xLTE3LTUuMy0yLjctMTEuOS00LjItMTkuNS00LjUtLjEtMi0uNS0zLjktLjktNS45LS42LTIuNi0xLjEtNS4zLS45LTguMS40LTQuNy44LTkgMi4yLTExLjMgOC40LTEzLjMgMjguOC0xNy42IDI5LTE3LjZsMTIuMy0yLjQtOC4xLTkuNWMtLjEtLjItMTcuMy0xNy41LTQ2LjMtMTcuNS03LjkgMC0xNiAxLjMtMjQuMSAzLjktMjQuMiA3LjgtNDIuOSAzMC41LTQ5LjQgMzkuMy0zLjEtMS02LjMtMS45LTkuNi0yLjctNC4yLTE1LjggOS0zOC41IDktMzguNXMtMTMuNi0zLTMzLjcgMTUuMmMtMi42LTYuNS04LjEtMjAuNS0xLjgtMzcuMkMxODQuNiAxMC4xIDE3Ny4yIDI2IDE3NSA0MC40Yy03LjYtNS40LTYuNy0yMy4xLTcuMi0yNy42LTcuNS45LTI5LjIgMjEuOS0yOC4yIDQ4LjMtMiAuNS0zLjkgMS4xLTUuOSAxLjctNi41LTguOC0yNS4xLTMxLjUtNDkuNC0zOS4zLTcuOS0yLjItMTYtMy41LTIzLjktMy41LTI5IDAtNDYuMSAxNy4zLTQ2LjMgMTcuNUw2IDQ2LjlsMTIuMyAyLjRjLjIgMCAyMC42IDQuMyAyOSAxNy42IDEuNCAyLjIgMS44IDYuNiAyLjIgMTEuMy4yIDIuOC0uNCA1LjUtLjkgOC4xLS40IDEuOS0uOCAzLjktLjkgNS45LTcuNy4zLTE0LjIgMS44LTE5LjUgNC41LTcuMiAzLjctMTIuMSA5LjYtMTQuMSAxNy01IDE4LjIgMTEuMiAzOC41IDExLjggMzkuMiAxLjkgMy40IDIuNyAyNy44LTEuNyAzNy42LS42IDEuNC0yLjIgMi43LTQuMyA0LjQtLjcuNS0xLjQgMS4xLTIuMiAxLjctNi4xIDQuNi0xNS40IDExLjctMTUuNCAyNy44IDAgMjIuMSAyMi40IDM0LjEgNDAuNCA0My43IDMgMS42IDUuOCAzLjEgOC4zIDQuNiAyLjcgMS42IDEyLjIgMTEuNCAxMi4yIDI2LjEgMCA2LjktLjYgMzkuNy0zLjcgNjIuNC0xMS42LTkuOS0yMi4yLTI1LjktMjQuNi00My44IDAgMC0yOS4yIDIyLjYtMjAuNiA3MC44IDUuMiAyOS41IDIzLjIgNDYuMSA0NyA1NC43IDguOCAxOS4xIDI5LjQgNDUuNyA2Ny4zIDQ5LjZDMTQzIDUwNC4zIDE2MyA1MTIgMTkyLjIgNTEyaC4yYzI5LjEgMCA0OS4xLTcuNyA2My42LTE5LjUgMzcuOS0zLjkgNTguNS0zMC41IDY3LjMtNDkuNiAyMy44LTguNyA0MS43LTI1LjIgNDctNTQuNyA4LjItNDguNC0yMS4xLTcwLjktMjEuMS03MC45ek0zMDUuNyAzNy43YzUuNi0xLjggMTEuNi0yLjcgMTcuNy0yLjcgMTEgMCAxOS45IDMgMjQuNyA1LTMuMSAxLjQtNi40IDMuMi05LjcgNS4zLTIuNC0uNC01LjYtLjgtOS4yLS44LTEwLjUgMC0yMC41IDMuMS0yOC43IDguOS0xMi4zIDguNy0xOCAxNi45LTIwLjcgMjIuNC0yLjItMS4zLTQuNS0yLjUtNy4xLTMuNy0xLjYtLjgtMy4xLTEuNS00LjctMi4yIDYuMS05LjEgMTkuOS0yNi41IDM3LjctMzIuMnptMjEgMTguMmMtLjggMS0xLjYgMi4xLTIuMyAzLjItMy4zIDUuMi0zLjkgMTEuNi00LjQgMTcuOC0uNSA2LjQtMS4xIDEyLjUtNC40IDE3LTQuMi44LTguMSAxLjctMTEuNSAyLjctMi4zLTMuMS01LjYtNy0xMC41LTExLjIgMS40LTQuOCA1LjUtMTYuMSAxMy41LTIyLjUgNS42LTQuMyAxMi4yLTYuNyAxOS42LTd6TTQ1LjYgNDUuM2MtMy4zLTIuMi02LjYtNC05LjctNS4zIDQuOC0yIDEzLjctNSAyNC43LTUgNi4xIDAgMTIgLjkgMTcuNyAyLjcgMTcuOCA1LjggMzEuNiAyMy4yIDM3LjcgMzIuMS0xLjYuNy0zLjIgMS40LTQuOCAyLjItMi41IDEuMi00LjkgMi41LTcuMSAzLjctMi42LTUuNC04LjMtMTMuNy0yMC43LTIyLjQtOC4zLTUuOC0xOC4yLTguOS0yOC44LTguOS0zLjQuMS02LjYuNS05IC45em00NC43IDQwLjFjLTQuOSA0LjItOC4zIDgtMTAuNSAxMS4yLTMuNC0uOS03LjMtMS45LTExLjUtMi43QzY1IDg5LjUgNjQuNSA4My40IDY0IDc3Yy0uNS02LjItMS4xLTEyLjYtNC40LTE3LjgtLjctMS4xLTEuNS0yLjItMi4zLTMuMiA3LjQuMyAxNCAyLjYgMTkuNSA3IDggNi4zIDEyLjEgMTcuNiAxMy41IDIyLjR6TTU4LjEgMjU5LjljLTIuNy0xLjYtNS42LTMuMS04LjQtNC42LTE0LjktOC0zMC4yLTE2LjMtMzAuMi0zMC41IDAtMTEuMSA0LjMtMTQuNiA4LjktMTguMmwuNS0uNGMuNy0uNiAxLjQtMS4yIDIuMi0xLjgtLjkgNy4yLTEuOSAxMy4zLTIuNyAxNC45IDAgMCAxMi4xLTE1IDE1LjctNDQuMyAxLjQtMTEuNS0xLjEtMzQuMy01LjEtNDMgLjIgNC45IDAgOS44LS4zIDE0LjQtLjQtLjgtLjgtMS42LTEuMy0yLjItMy4yLTQtMTEuOC0xNy41LTkuNC0yNi42LjktMy41IDMuMS02IDYuNy03LjggMy44LTEuOSA4LjgtMi45IDE1LjEtMi45IDEyLjMgMCAyNS45IDMuNyAzMi45IDYgMjUuMSA4IDU1LjQgMzAuOSA2NC4xIDM3LjcuMi4yLjQuMy40LjNsNS42IDMuOS0zLjUtNS44Yy0uMi0uMy0xOS4xLTMxLjQtNTMuMi00Ni41IDItMi45IDcuNC04LjEgMjEuNi0xNS4xIDIxLjQtMTAuNSA0Ni41LTE1LjggNzQuMy0xNS44IDI3LjkgMCA1Mi45IDUuMyA3NC4zIDE1LjggMTQuMiA2LjkgMTkuNiAxMi4yIDIxLjYgMTUuMS0zNCAxNS4xLTUyLjkgNDYuMi01My4xIDQ2LjVsLTMuNSA1LjggNS42LTMuOXMuMi0uMS40LS4zYzguNy02LjggMzktMjkuOCA2NC4xLTM3LjcgNy0yLjIgMjAuNi02IDMyLjktNiA2LjMgMCAxMS4zIDEgMTUuMSAyLjkgMy41IDEuOCA1LjcgNC40IDYuNyA3LjggMi41IDkuMS02LjEgMjIuNi05LjQgMjYuNi0uNS42LS45IDEuMy0xLjMgMi4yLS4zLTQuNi0uNS05LjUtLjMtMTQuNC00IDguOC02LjUgMzEuNS01LjEgNDMgMy42IDI5LjMgMTUuNyA0NC4zIDE1LjcgNDQuMy0uOC0xLjYtMS44LTcuNy0yLjctMTQuOS43LjYgMS41IDEuMiAyLjIgMS44bC41LjRjNC42IDMuNyA4LjkgNy4xIDguOSAxOC4yIDAgMTQuMi0xNS40IDIyLjUtMzAuMiAzMC41LTIuOSAxLjUtNS43IDMuMS04LjQgNC42LTguNyA1LTE4IDE2LjctMTkuMSAzNC4yLS45IDE0LjYuOSA0OS45IDMuNCA3NS45LTEyLjQgNC44LTI2LjcgNi40LTM5LjcgNi44LTItNC4xLTMuOS04LjUtNS41LTEzLjEtLjctMi0xOS42LTUxLjEtMjYuNC02Mi4yIDUuNSAzOSAxNy41IDczLjcgMjMuNSA4OS42LTMuNS0uNS03LjMtLjctMTEuNy0uN2gtMTE3Yy00LjQgMC04LjMuMy0xMS43LjcgNi0xNS45IDE4LjEtNTAuNiAyMy41LTg5LjYtNi44IDExLjItMjUuNyA2MC4zLTI2LjQgNjIuMi0xLjYgNC42LTMuNSA5LTUuNSAxMy4xLTEzLS40LTI3LjItMi0zOS43LTYuOCAyLjUtMjYgNC4zLTYxLjIgMy40LTc1LjktLjktMTcuNC0xMC4zLTI5LjItMTktMzQuMnpNMzQuOCA0MDQuNmMtMTIuMS0yMC04LjctNTQuMS0zLjctNTkuMSAxMC45IDM0LjQgNDcuMiA0NC4zIDc0LjQgNDUuNC0yLjcgNC4yLTUuMiA3LjYtNyAxMGwtMS40IDEuNGMtNy4yIDcuOC04LjYgMTguNS00LjEgMzEuOC0yMi43LS4xLTQ2LjMtOS44LTU4LjItMjkuNXptNDUuNyA0My41YzYgMS4xIDEyLjIgMS45IDE4LjYgMi40IDMuNSA4IDcuNCAxNS45IDEyLjMgMjMuMS0xNC40LTUuOS0yNC40LTE2LTMwLjktMjUuNXpNMTkyIDQ5OC4yYy02MC42LS4xLTc4LjMtNDUuOC04NC45LTY0LjctMy43LTEwLjUtMy40LTE4LjIuOS0yMy4xIDIuOS0zLjMgOS41LTcuMiAyNC42LTcuMmgxMTguOGMxNS4xIDAgMjEuOCAzLjkgMjQuNiA3LjIgNC4yIDQuOCA0LjUgMTIuNi45IDIzLjEtNi42IDE4LjgtMjQuMyA2NC42LTg0LjkgNjQuN3ptODAuNi0yNC42YzQuOS03LjIgOC44LTE1LjEgMTIuMy0yMy4xIDYuNC0uNSAxMi42LTEuMyAxOC42LTIuNC02LjUgOS41LTE2LjUgMTkuNi0zMC45IDI1LjV6bTc2LjYtNjljLTEyIDE5LjctMzUuNiAyOS4zLTU4LjEgMjkuNyA0LjUtMTMuMyAzLjEtMjQuMS00LjEtMzEuOC0uNC0uNS0uOS0xLTEuNC0xLjUtMS44LTIuNC00LjMtNS44LTctMTAgMjcuMi0xLjIgNjMuNS0xMSA3NC40LTQ1LjQgNSA1IDguNCAzOS4xLTMuOCA1OXpcIl0sZ3VscDpbMjU2LDUxMixbXSxcImYzYWVcIixcIk0yMDkuOCAzOTEuMWwtMTQuMSAyNC42LTQuNiA4MC4yYzAgOC45LTI4LjMgMTYuMS02My4xIDE2LjFzLTYzLjEtNy4yLTYzLjEtMTYuMWwtNS44LTc5LjQtMTQuOS0yNS40YzQxLjIgMTcuMyAxMjYgMTYuNyAxNjUuNiAwem0tMTk2LTI1My4zbDEzLjYgMTI1LjVjNS45LTIwIDIwLjgtNDcgNDAtNTUuMiA2LjMtMi43IDEyLjctMi43IDE4LjcuOSA1LjIgMyA5LjYgOS4zIDEwLjEgMTEuOCAxLjIgNi41LTIgOS4xLTQuNSA5LjEtMyAwLTUuMy00LjYtNi44LTcuMy00LjEtNy4zLTEwLjMtNy42LTE2LjktMi44LTYuOSA1LTEyLjkgMTMuNC0xNy4xIDIwLjctNS4xIDguOC05LjQgMTguNS0xMiAyOC4yLTEuNSA1LjYtMi45IDE0LjYtLjYgMTkuOSAxIDIuMiAyLjUgMy42IDQuOSAzLjYgNSAwIDEyLjMtNi42IDE1LjgtMTAuMSA0LjUtNC41IDEwLjMtMTEuNSAxMi41LTE2bDUuMi0xNS41YzIuNi02LjggOS45LTUuNiA5LjkgMCAwIDEwLjItMy43IDEzLjYtMTAgMzQuNy01LjggMTkuNS03LjYgMjUuOC03LjYgMjUuOC0uNyAyLjgtMy40IDcuNS02LjMgNy41LTEuMiAwLTIuMS0uNC0yLjYtMS4yLTEtMS40LS45LTUuMy0uOC02LjMuMi0zLjIgNi4zLTIyLjIgNy4zLTI1LjItMiAyLjItNC4xIDQuNC02LjQgNi42LTUuNCA1LjEtMTQuMSAxMS44LTIxLjUgMTEuOC0zLjQgMC01LjYtLjktNy43LTIuNGw3LjYgNzkuNmMyIDUgMzkuMiAxNy4xIDg4LjIgMTcuMSA0OS4xIDAgODYuMy0xMi4yIDg4LjItMTcuMWwxMC45LTk0LjZjLTUuNyA1LjItMTIuMyAxMS42LTE5LjYgMTQuOC01LjQgMi4zLTE3LjQgMy44LTE3LjQtNS43IDAtNS4yIDkuMS0xNC44IDE0LjQtMjEuNSAxLjQtMS43IDQuNy01LjkgNC43LTguMSAwLTIuOS02LTIuMi0xMS43IDIuNS0zLjIgMi43LTYuMiA2LjMtOC43IDkuNy00LjMgNi02LjYgMTEuMi04LjUgMTUuNS02LjIgMTQuMi00LjEgOC42LTkuMSAyMi01IDEzLjMtNC4yIDExLjgtNS4yIDE0LS45IDEuOS0yLjIgMy41LTQgNC41LTEuOSAxLTQuNS45LTYuMS0uMy0uOS0uNi0xLjMtMS45LTEuMy0zLjcgMC0uOS4xLTEuOC4zLTIuNyAxLjUtNi4xIDcuOC0xOC4xIDE1LTM0LjMgMS42LTMuNyAxLTIuNi44LTIuMy02LjIgNi0xMC45IDguOS0xNC40IDEwLjUtNS44IDIuNi0xMyAyLjYtMTQuNS00LjEtLjEtLjQtLjEtLjgtLjItMS4yLTExLjggOS4yLTI0LjMgMTEuNy0yMC04LjEtNC42IDguMi0xMi42IDE0LjktMjIuNCAxNC45LTQuMSAwLTcuMS0xLjQtOC42LTUuMS0yLjMtNS41IDEuMy0xNC45IDQuNi0yMy44IDEuNy00LjUgNC05LjkgNy4xLTE2LjIgMS42LTMuNCA0LjItNS40IDcuNi00LjUuNi4yIDEuMS40IDEuNi43IDIuNiAxLjggMS42IDQuNS4zIDcuMi0zLjggNy41LTcuMSAxMy05LjMgMjAuOC0uOSAzLjMtMiA5IDEuNSA5IDIuNCAwIDQuNy0uOCA2LjktMi40IDQuNi0zLjQgOC4zLTguNSAxMS4xLTEzLjUgMi0zLjYgNC40LTguMyA1LjYtMTIuMy41LTEuNyAxLjEtMy4zIDEuOC00LjggMS4xLTIuNSAyLjYtNS4xIDUuMi01LjEgMS4zIDAgMi40LjUgMy4yIDEuNSAxLjcgMi4yIDEuMyA0LjUuNCA2LjktMiA1LjYtNC43IDEwLjYtNi45IDE2LjctMS4zIDMuNS0yLjcgOC0yLjcgMTEuNyAwIDMuNCAzLjcgMi42IDYuOCAxLjIgMi40LTEuMSA0LjgtMi44IDYuOC00LjUgMS4yLTQuOS45LTMuOCAyNi40LTY4LjIgMS4zLTMuMyAzLjctNC43IDYuMS00LjcgMS4yIDAgMi4yLjQgMy4yIDEuMSAxLjcgMS4zIDEuNyA0LjEgMSA2LjItLjcgMS45LS42IDEuMy00LjUgMTAuNS01LjIgMTIuMS04LjYgMjAuOC0xMy4yIDMxLjktMS45IDQuNi03LjcgMTguOS04LjcgMjIuMy0uNiAyLjItMS4zIDUuOCAxIDUuOCA1LjQgMCAxOS4zLTEzLjEgMjMuMS0xNyAuMi0uMy41LS40LjktLjYuNi0xLjkgMS4yLTMuNyAxLjctNS41IDEuNC0zLjggMi43LTguMiA1LjMtMTEuMy44LTEgMS43LTEuNiAyLjctMS42IDIuOCAwIDQuMiAxLjIgNC4yIDQgMCAxLjEtLjcgNS4xLTEuMSA2LjIgMS40LTEuNSAyLjktMyA0LjUtNC41IDE1LTEzLjkgMjUuNy02LjggMjUuNy4yIDAgNy40LTguOSAxNy43LTEzLjggMjMuNC0xLjYgMS45LTQuOSA1LjQtNSA2LjQgMCAxLjMuOSAxLjggMi4yIDEuOCAyIDAgNi40LTMuNSA4LTQuNyA1LTMuOSAxMS44LTkuOSAxNi42LTE0LjFsMTQuOC0xMzYuOGMtMzAuNSAxNy4xLTE5Ny42IDE3LjItMjI4LjMuMnptMjI5LjctOC41YzAgMjEtMjMxLjIgMjEtMjMxLjIgMCAwLTguOCA1MS44LTE1LjkgMTE1LjYtMTUuOSA5IDAgMTcuOC4xIDI2LjMuNGwxMi42LTQ4LjdMMjI4LjEuNmMxLjQtMS40IDUuOC0uMiA5LjkgMy41czYuNiA3LjkgNS4zIDkuM2wtLjEuMUwxODUuOSA3NGwtMTAgNDAuN2MzOS45IDIuNiA2Ny42IDguMSA2Ny42IDE0LjZ6bS02OS40IDQuNmMwLS44LS45LTEuNS0yLjUtMi4xbC0uMi44YzAgMS4zLTUgMi40LTExLjEgMi40cy0xMS4xLTEuMS0xMS4xLTIuNGMwLS4xIDAtLjIuMS0uM2wuMi0uN2MtMS44LjYtMyAxLjQtMyAyLjMgMCAyLjEgNi4yIDMuNyAxMy43IDMuNyA3LjcuMSAxMy45LTEuNiAxMy45LTMuN3pcIl0sXCJoYWNrZXItbmV3c1wiOls0NDgsNTEyLFtdLFwiZjFkNFwiLFwiTTAgMzJ2NDQ4aDQ0OFYzMkgwem0yMS4yIDE5Ny4ySDIxYy4xLS4xLjItLjMuMy0uNCAwIC4xIDAgLjMtLjEuNHptMjE4IDUzLjlWMzg0aC0zMS40VjI4MS4zTDEyOCAxMjhoMzcuM2M1Mi41IDk4LjMgNDkuMiAxMDEuMiA1OS4zIDEyNS42IDEyLjMtMjcgNS44LTI0LjQgNjAuNi0xMjUuNkgzMjBsLTgwLjggMTU1LjF6XCJdLFwiaGFja2VyLW5ld3Mtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmM2FmXCIsXCJNNDAwIDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHpNMjEuMiAyMjkuMkgyMWMuMS0uMS4yLS4zLjMtLjQgMCAuMSAwIC4zLS4xLjR6bTIxOCA1My45VjM4NGgtMzEuNFYyODEuM0wxMjggMTI4aDM3LjNjNTIuNSA5OC4zIDQ5LjIgMTAxLjIgNTkuMyAxMjUuNiAxMi4zLTI3IDUuOC0yNC40IDYwLjYtMTI1LjZIMzIwbC04MC44IDE1NS4xelwiXSxoaXBzOls2NDAsNTEyLFtdLFwiZjQ1MlwiLFwiTTAgODAuMmMwLTEuOC45LTIuNyAyLjctMi43aDQwLjljMS45IDAgMi44LjkgMi44IDIuN3Y4MS4yYzE1LjItNy43IDMxLjctMTEuNSA0OS44LTExLjQgMjQgLjEgNDQuMiA2LjIgNjAuMyAxOCAxOC43IDEzLjUgMjggMzEuOSAyOCA1NS4zdjEzNi4xYzAgMS45LS45IDIuOC0yLjcgMi44aC0yNy4zYy05LjEgMC0xNi40LTcuMy0xNi40LTE2LjNWMjIzLjNjMC0uOSAyLjctMjctNDUuOC0yNy00OC42IDAtNDUuOCAyNi4yLTQ1LjggMjd2MTM2LjFjMCAxLjktLjkgMi44LTIuOCAyLjhoLTQxYy0xLjggMC0yLjctLjktMi43LTIuOFY4MC4yem00OTcuNyAyMjEuNWMxMy43IDEwLjIgMzQuMSAxOS4xIDU4LjQgMTkuMSAyMy4zIDAgMzIuOC00LjUgMzYuNS0xMy42IDMtNy45LS42LTE2LjEtMTIuMi0yMS4ybC01My42LTIzLjVjLTIxLjQtOS40LTMzLjgtMjQtMzcuMi00My42LTUuNy0zMy43IDIyLjItNTMuMyAyMi43LTUzLjcgMTMuMi05LjYgMzItMTUuNCA1OC41LTE1LjQgMTkgMCAzNy40IDMuMyA1NS4xIDkuOSAxLjMuNSAxLjkgMS4zIDEuOSAyLjZWMjA3YzAgMi4xLTIuMyAzLjQtNCAyLjQtMzkuNy0yMC43LTc2LjYtMTIuMy04NC02LjgtNi42IDQuOS02IDEyLjUgMi42IDE2LjFMNjAwIDI0NGMxNi41IDcuMSAyOC4xIDE4LjQgMzQuOSAzNC4xIDUuNSAxMi42IDYuNiAyNS42IDMuMSAzOS4xLTkuNiAzNi45LTQ0LjkgNDUuNS00NS42IDQ1LjgtMTAuNSAzLjEtMjMuNiA0LjMtMzYuMyA0LjMtMTYuNiAwLTMyLjYtMi43LTQ4LjItOC4yLTkuNy0zLjQtMTQuNi0xMC4zLTE0LjYtMjAuN1YzMDRjMC0yLjEgMi4zLTMuNyA0LjQtMi4zek0zNzYuMiAxNDkuOGMtMzEuNyAwLTEwNC4yIDIwLjEtMTA0LjIgMTAzLjV2MTgzLjVjMCAuOC42IDIuNyAyLjcgMi43aDQwLjljMS45IDAgMi44LS45IDIuOC0yLjdWMzQ4YzE2LjUgMTIuNyAzNS44IDE5LjEgNTcuNyAxOS4xIDYwLjUgMCAxMDguNy00OC41IDEwOC43LTEwOC43LjEtNjAuMy00OC4yLTEwOC42LTEwOC42LTEwOC42em0wIDE3MC45Yy0xNy4yIDAtMzEuOS02LjEtNDQtMTguMi0xMi4yLTEyLjItMTguMi0yNi44LTE4LjItNDQgMC0zNC41IDI3LjYtNjIuMiA2Mi4yLTYyLjIgMzQuNSAwIDYyLjIgMjcuNiA2Mi4yIDYyLjIuMSAzNC4zLTI3LjMgNjIuMi02Mi4yIDYyLjJ6bS0xMjQuNiAzOC43YzAgMS45LS45IDIuOC0yLjggMi44aC00MC45Yy0xLjYgMC0yLjctMS40LTIuNy0yLjhWMTU3LjZjMC0xLjQgMS4xLTIuOCAyLjctMi44aDQwLjljMS45IDAgMi44LjkgMi44IDIuOHYyMDEuOE0yMjguMyA3Mi41YzE1LjkgMCAyOC45IDEyLjcgMjguOSAyOC45IDAgMTUuOC0xMi43IDI4LjktMjguOSAyOC45cy0yOC45LTEzLjMtMjguOS0yOC45Yy4xLTE2IDEzLTI4LjkgMjguOS0yOC45XCJdLFwiaGlyZS1hLWhlbHBlclwiOls1MTIsNTEyLFtdLFwiZjNiMFwiLFwiTTQ0My4xIDBINzEuOUM2Ny45IDM3LjMgMzcuNCA2Ny44IDAgNzEuN3YzNzEuNWMzNy40IDQuOSA2NiAzMi40IDcxLjkgNjguOGgzNzIuMmMzLTM2LjQgMzIuNS02NS44IDY3LjktNjkuOFY3MS43Yy0zNi40LTUuOS02NS0zNS4zLTY4LjktNzEuN3ptLTM3IDQwNC45Yy0zNi4zIDAtMTguOC0yLTU1LjEtMi0zNS44IDAtMjEgMi01Ni4xIDItNS45IDAtNC45LTguMiAwLTkuOCAyMi44LTcuNiAyMi45LTEwLjIgMjQuNi0xMi44IDEwLjQtMTUuNiA1LjktODMgNS45LTExMyAwLTUuMy02LjQtMTIuOC0xMy44LTEyLjhIMjAwLjRjLTcuNCAwLTEzLjggNy41LTEzLjggMTIuOCAwIDMwLTQuNSA5Ny40IDUuOSAxMTMgMS43IDIuNSAxLjggNS4yIDI0LjYgMTIuOCA0LjkgMS42IDYgOS44IDAgOS44LTM1LjEgMC0yMC4zLTItNTYuMS0yLTM2LjMgMC0xOC44IDItNTUuMSAyLTcuOSAwLTUuOC0xMC44IDAtMTAuOCAxMC4yLTMuNCAxMy41LTMuNSAyMS43LTEzLjggNy43LTEyLjkgNy45LTQ0LjQgNy45LTEyNy44VjE1MS4zYzAtMjIuMi0xMi4yLTI4LjMtMjguNi0zMi40LTguOC0yLjItNC0xMS44IDEtMTEuOCAzNi41IDAgMjAuNiAyIDU3LjEgMiAzMi43IDAgMTYuNS0yIDQ5LjItMiAzLjMgMCA4LjUgOC4zIDEgMTAuOC00LjkgMS42LTI3LjYgMy43LTI3LjYgMzkuMyAwIDQ1LjYtLjIgNTUuOCAxIDY4LjggMCAxLjMgMi4zIDEyLjggMTIuOCAxMi44aDEwOS4yYzEwLjUgMCAxMi44LTExLjUgMTIuOC0xMi44IDEuMi0xMyAxLTIzLjIgMS02OC44IDAtMzUuNi0yMi43LTM3LjctMjcuNi0zOS4zLTcuNS0yLjUtMi4zLTEwLjggMS0xMC44IDMyLjcgMCAxNi41IDIgNDkuMiAyIDM2LjUgMCAyMC42LTIgNTcuMS0yIDQuOSAwIDkuOSA5LjYgMSAxMS44LTE2LjQgNC4xLTI4LjYgMTAuMy0yOC42IDMyLjR2MTAxLjJjMCA4My40LjEgMTE0LjkgNy45IDEyNy44IDguMiAxMC4yIDExLjQgMTAuNCAyMS43IDEzLjggNS44IDAgNy44IDEwLjggMCAxMC44elwiXSxob29saTpbNjQwLDUxMixbXSxcImY0MjdcIixcIk01MDguNCAzNTJoNTcuOVYxNTYuN0w1MDguNCAxODR2MTY4em03My43LTExMC41VjM1Mkg2NDBWMjQxLjVoLTU3Ljl6bS0yNTAuNy04LjljLTE4LjItMTguMi01MC40LTE3LjEtNTAuNC0xNy4xcy0zMi4yLTEuMS01MC40IDE3LjFjLTEuOSAxLjktMy43IDMuOS01LjMgNi0zOC4yLTI5LjYtNzIuNS00Ni41LTEwMi4xLTYxLjF2LTIwLjdsLTIyLjUgMTAuNmMtNTQuNC0yMi4xLTg5LTE4LjItOTcuMy4xIDAgMC0yNC45IDMyLjggNjEuOSAxMTAuOXYtMzFjLTQ4LjgtNTQuNi0zOS03Ni4xLTM1LjMtNzkuMiAxMy41LTExLjQgMzcuNS04IDY0LjQgMi4xTDY1LjIgMTg0djYzLjNjMTMuMSAxNC43IDMwLjUgMzEuNSA1My41IDUwLjRsNC41IDMuNnYtMjkuOGMwLTYuOSAxLjctMTguMiAxMC44LTE4LjJzMTAuNiA2LjkgMTAuNiAxNVYzMTdjMTggMTIuMiAzNy4zIDIyLjEgNTcuNyAyOS42di05My45YzAtMTguNy0xMy40LTM3LjQtNDAuNi0zNy40LTE1LjgtLjEtMzAuNSA4LjItMzguNSAyMS45di01NC4zYzQxLjkgMjAuOSA4My45IDQ2LjUgOTkuOSA1OC4zLTEwLjIgMTQuNi05LjMgMjguMS05LjMgNDMuNyAwIDE4LjctMS40IDM0LjMgMTYuOCA1Mi41IDE4LjIgMTguMiA1MC40IDE3LjEgNTAuNCAxNy4xczMyLjMgMS4xIDUwLjQtMTcuMWMxOC4yLTE4LjIgMTYuNy0zMy44IDE2LjctNTIuNSAwLTE4LjUgMS41LTM0LjItMTYuNy01Mi4zem0tMzkuNyA3MS45YzAgMy42LTEuOCAxMi41LTEwLjcgMTIuNS04LjkgMC0xMC43LTguOS0xMC43LTEyLjV2LTQwLjRjMC04LjcgNy4zLTEwLjkgMTAuNy0xMC45IDMuNCAwIDEwLjcgMi4xIDEwLjcgMTAuOXY0MC40em0xODUuNy03MS45Yy0xOC4yLTE4LjItNTAuNC0xNy4xLTUwLjQtMTcuMXMtMzIuMy0xLjEtNTAuNCAxNy4xYy0xOC4yIDE4LjItMTYuOCAzMy45LTE2LjggNTIuNiAwIDE4LjctMS40IDM0LjMgMTYuOCA1Mi41IDE4LjIgMTguMiA1MC40IDE3LjEgNTAuNCAxNy4xczMyLjMgMS4xIDUwLjQtMTcuMWMxOC4yLTE4LjIgMTYuOC0zMy44IDE2LjgtNTIuNS0uMS0xOC44IDEuMy0zNC41LTE2LjgtNTIuNnptLTM5LjggNzEuOWMwIDMuNi0xLjggMTIuNS0xMC43IDEyLjUtOC45IDAtMTAuNy04LjktMTAuNy0xMi41di00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOSAzLjQgMCAxMC43IDIuMSAxMC43IDEwLjl2NDAuNHptMTczLjUtNzNjMTUuOSAwIDI4LjktMTIuOSAyOC45LTI4LjlzLTEyLjktMjQuNS0yOC45LTI0LjVjLTE1LjkgMC0yOC45IDguNi0yOC45IDI0LjVzMTIuOSAyOC45IDI4LjkgMjguOXpNMTQ0LjUgMzUybDM4LjMuOGMtMTMuMi00LjYtMjYtMTAuMi0zOC4zLTE2Ljh2MTZ6bS0yMS40IDB2LTI4LjZjLTYuNS00LjItMTMtOC43LTE5LjQtMTMuNi0xNC44LTExLjItMjcuNS0yMS43LTM4LjUtMzEuNVYzNTJoNTcuOXptNTkuNy44YzM2LjUgMTIuNSA2OS45IDE0LjIgOTQuNyA3LjItMTkuOS4yLTQ1LjgtMi42LTc1LjMtMTMuM3Y1LjNsLTE5LjQuOHpcIl0saG9ybmJpbGw6WzUwOSw1MTIsW10sXCJmNTkyXCIsXCJNNzUuMzcgMzcwLjNjMi4xNCAxNS44My01Ljc3IDMxLjk4LTIwLjk0IDM5LjI5LTE4Ljg1IDkuMS00MS41NSAxLjE3LTUwLjY4LTE3LjY4LTkuMDgtMTguODMtMS4xMy00MS41OCAxNy43LTUwLjY1IDcuMDUtMy40IDE0LjYzLTQuNDIgMjEuODUtMy4zOC03OC4yOC0xMTEuMzUgNTItMTkwLjUzIDUyLTE5MC41My01Ljg2IDQzLjA0LTguMjQgOTEuMTYtOC4yNCA5MS4xNi02Ny4zMSA0MS40NS45MiA2NC4wNiAzOS44MSA3Mi44NyAxOS43NyA1My42MiA3MS4xOCA5MS45NCAxMzEuNjYgOTEuOTQgMS45MiAwIDMuNzctLjIxIDUuNjctLjI4bC4xMSAxOC44NmMtOTkuMjIgMS4zOS0xNTguNy0yOS4xNC0xODguOTQtNTEuNnpNMTgzLjM4IDQyLjZjLjg5LTctLjEtMTQuMzMtMy4zOS0yMS4xNS05LjEtMTguODQtMzEuODItMjYuNzgtNTAuNjYtMTcuNjktMTguODYgOS4xLTI2LjggMzEuODMtMTcuNjkgNTAuNjggNi45OCAxNC40NyAyMi4wMiAyMi40MiAzNy4xOCAyMS4yMy0yMi41NSAyOS45MS01My44MyA4OS41Ny01Mi40MiAxOTAuMDNsMjEuODQtLjE1Yy0uMDItLjktLjE0LTEuNzctLjE0LTIuNjggMC01OC45NSAzNi4zNy0xMDkuMzMgODcuODUtMTMwLjE2IDguMDEtMzcuNzUgMzAuNzQtMTE0LjMgNzMuODQtNDQuMjkgMCAwIDQ4LjE0IDIuMzggOTEuMTggOC4yNCAwLS4wMS03Ny44NC0xMjguMDMtMTg3LjU5LTU0LjA2em0zMDQuMTggMTM0LjE3YzE4Ljg0LTkuMDkgMjYuODEtMzEuODEgMTcuNy01MC42NS05LjEtMTguODUtMzEuODMtMjYuNzctNTAuNjctMTcuNjktMTUuMjcgNy4zNy0yMy4xOSAyMy42OS0yMC44NyAzOS42NC0zMS43MS0yMS45NC04OS44NC00OS4wNS0xODMuNDUtNDcuNzRsLjE0IDIyLjVjMi43LS4xNSA1LjM5LS40MSA4LjE0LS40MSA1OS4zIDAgMTA5LjkgMzYuOCAxMzAuNDkgODguNzYgMzkuMSA5LjAyIDEwNS4wNiAzMS41OCAzOC40NiA3Mi41NCAwIDAtMi4zNCA0OC4xMy04LjIxIDkxLjE2IDAgMCAxMzMuNDUtODEuMTYgNDguOTYtMTk0LjYxIDYuNDMuNSAxMy4wNy0uNDkgMTkuMzEtMy41ek0zNzMuMDUgNDM2LjI0YzIxLjQzLTMyLjQ2IDQ2LjQyLTg5LjY5IDQ1LjE0LTE3OS42NmwtMTkuNTIuMTRjLjA4IDIuMDYuMyA0LjA3LjMgNi4xNSAwIDYwLjI3LTM4LjA1IDExMS41NS05MS4zOSAxMzEuNDUtOC44NSAzOC45NS0zMS40NCAxMDYuNjYtNzIuNzcgMzkuNDkgMCAwLTQ4LjEyLTIuMzQtOTEuMTktOC4yMiAwIDAgNzkuOTIgMTMxLjM0IDE5MS45IDUwLjk3LjMxIDQuNzIgMS40NSA5LjQ1IDMuNjQgMTMuOTcgOS4wNiAxOC44OSAzMS44IDI2Ljc4IDUwLjY0IDE3LjcxIDE4Ljg2LTkuMSAyNi43OS0zMS44MyAxNy43LTUwLjY1LTYuNTYtMTMuNjItMjAuMjYtMjEuNDMtMzQuNDUtMjEuMzV6XCJdLGhvdGphcjpbNDQ4LDUxMixbXSxcImYzYjFcIixcIk00MTQuOSAxNjEuNUMzNDAuMiAyOSAxMjEuMSAwIDEyMS4xIDBTMjIyLjIgMTEwLjQgOTMgMTk3LjdDMTEuMyAyNTIuOC0yMSAzMjQuNCAxNCA0MDIuNmMyNi44IDU5LjkgODMuNSA4NC4zIDE0NC42IDkzLjQtMjkuMi01NS4xLTYuNi0xMjIuNC00LjEtMTI5LjYgNTcuMSA4Ni40IDE2NSAwIDExMC44LTkzLjkgNzEgMTUuNCA4MS42IDEzOC42IDI3LjEgMjE1LjUgODAuNS0yNS4zIDEzNC4xLTg4LjkgMTQ4LjgtMTQ1LjYgMTUuNS01OS4zIDMuNy0xMjcuOS0yNi4zLTE4MC45elwiXSxob3V6ejpbNDE0LDUxMixbXSxcImYyN2NcIixcIk0yNTguOSAzMzAuN0gxNTQuM1Y0ODBIMFYzMmgxMDkuNXYxMDQuNWwzMDUuMSA4NS42VjQ4MEgyNTguOVYzMzAuN3pcIl0saHRtbDU6WzM4NCw1MTIsW10sXCJmMTNiXCIsXCJNMCAzMmwzNC45IDM5NS44TDE5MS41IDQ4MGwxNTcuNi01Mi4yTDM4NCAzMkgwem0zMDguMiAxMjcuOUgxMjQuNGw0LjEgNDkuNGgxNzUuNmwtMTMuNiAxNDguNC05Ny45IDI3di4zaC0xLjFsLTk4LjctMjcuMy02LTc1LjhoNDcuN0wxMzggMzIwbDUzLjUgMTQuNSA1My43LTE0LjUgNi02Mi4ySDg0LjNMNzEuNSAxMTIuMmgyNDEuMWwtNC40IDQ3Ljd6XCJdLGh1YnNwb3Q6WzUxMiw1MTIsW10sXCJmM2IyXCIsXCJNMjY3LjQgMjExLjZjLTI1LjEgMjMuNy00MC44IDU3LjMtNDAuOCA5NC42IDAgMjkuMyA5LjcgNTYuMyAyNiA3OEwyMDMuMSA0MzRjLTQuNC0xLjYtOS4xLTIuNS0xNC0yLjUtMTAuOCAwLTIwLjkgNC4yLTI4LjUgMTEuOC03LjYgNy42LTExLjggMTcuOC0xMS44IDI4LjZzNC4yIDIwLjkgMTEuOCAyOC41YzcuNiA3LjYgMTcuOCAxMS42IDI4LjUgMTEuNiAxMC44IDAgMjAuOS0zLjkgMjguNi0xMS42IDcuNi03LjYgMTEuOC0xNy44IDExLjgtMjguNSAwLTQuMi0uNi04LjItMS45LTEyLjFsNTAtNTAuMmMyMiAxNi45IDQ5LjQgMjYuOSA3OS4zIDI2LjkgNzEuOSAwIDEzMC01OC4zIDEzMC0xMzAuMiAwLTY1LjItNDcuNy0xMTkuMi0xMTAuMi0xMjguN1YxMTZjMTcuNS03LjQgMjguMi0yMy44IDI4LjItNDIuOSAwLTI2LjEtMjAuOS00Ny45LTQ3LTQ3LjlTMzExLjIgNDcgMzExLjIgNzMuMWMwIDE5LjEgMTAuNyAzNS41IDI4LjIgNDIuOXY2MS4yYy0xNS4yIDIuMS0yOS42IDYuNy00Mi43IDEzLjYtMjcuNi0yMC45LTExNy41LTg1LjctMTY4LjktMTI0LjggMS4yLTQuNCAyLTkgMi0xMy44QzEyOS44IDIzLjQgMTA2LjMgMCA3Ny40IDAgNDguNiAwIDI1LjIgMjMuNCAyNS4yIDUyLjJjMCAyOC45IDIzLjQgNTIuMyA1Mi4yIDUyLjMgOS44IDAgMTguOS0yLjkgMjYuOC03LjZsMTYzLjIgMTE0Ljd6bTg5LjUgMTYzLjZjLTM4LjEgMC02OS0zMC45LTY5LTY5czMwLjktNjkgNjktNjkgNjkgMzAuOSA2OSA2OS0zMC45IDY5LTY5IDY5elwiXSxpbWRiOls0NDgsNTEyLFtdLFwiZjJkOFwiLFwiTTM1MC41IDI4OC43YzAgNS40IDEuNiAxNC40LTYuMiAxNC40LTEuNiAwLTMtLjgtMy44LTIuNC0yLjItNS4xLTEuMS00NC4xLTEuMS00NC43IDAtMy44LTEuMS0xMi43IDQuOS0xMi43IDcuMyAwIDYuMiA3LjMgNi4yIDEyLjd2MzIuN3pNMjY1IDIyOS45YzAtOS43IDEuNi0xNi0xMC4zLTE2djgzLjdjMTIuMi4zIDEwLjMtOC43IDEwLjMtMTguNHYtNDkuM3pNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0yMS4zIDIyOC44Yy0uMS4xLS4yLjMtLjMuNGguM3YtLjR6TTk3IDE5Mkg2NHYxMjcuOGgzM1YxOTJ6bTExMy4zIDBoLTQzLjFsLTcuNiA1OS45Yy0yLjctMjAtNS40LTQwLjEtOC43LTU5LjloLTQyLjh2MTI3LjhoMjl2LTg0LjVsMTIuMiA4NC41aDIwLjZsMTEuNi04Ni40djg2LjRoMjguN1YxOTJ6bTg2LjMgNDUuM2MwLTguMS4zLTE2LjgtMS40LTI0LjQtNC4zLTIyLjUtMzEuNC0yMC45LTQ5LTIwLjloLTI0LjZ2MTI3LjhjODYuMS4xIDc1IDYgNzUtODIuNXptODUuOSAxNy4zYzAtMTcuMy0uOC0zMC4xLTIyLjItMzAuMS04LjkgMC0xNC45IDIuNy0yMC45IDkuMlYxOTJoLTMxLjd2MTI3LjhoMjkuOGwxLjktOC4xYzUuNyA2LjggMTEuOSA5LjggMjAuOSA5LjggMTkuOCAwIDIyLjItMTUuMiAyMi4yLTMwLjl2LTM2elwiXSxpbnN0YWdyYW06WzQ0OCw1MTIsW10sXCJmMTZkXCIsXCJNMjI0LjEgMTQxYy02My42IDAtMTE0LjkgNTEuMy0xMTQuOSAxMTQuOXM1MS4zIDExNC45IDExNC45IDExNC45UzMzOSAzMTkuNSAzMzkgMjU1LjkgMjg3LjcgMTQxIDIyNC4xIDE0MXptMCAxODkuNmMtNDEuMSAwLTc0LjctMzMuNS03NC43LTc0LjdzMzMuNS03NC43IDc0LjctNzQuNyA3NC43IDMzLjUgNzQuNyA3NC43LTMzLjYgNzQuNy03NC43IDc0Ljd6bTE0Ni40LTE5NC4zYzAgMTQuOS0xMiAyNi44LTI2LjggMjYuOC0xNC45IDAtMjYuOC0xMi0yNi44LTI2LjhzMTItMjYuOCAyNi44LTI2LjggMjYuOCAxMiAyNi44IDI2Ljh6bTc2LjEgMjcuMmMtMS43LTM1LjktOS45LTY3LjctMzYuMi05My45LTI2LjItMjYuMi01OC0zNC40LTkzLjktMzYuMi0zNy0yLjEtMTQ3LjktMi4xLTE4NC45IDAtMzUuOCAxLjctNjcuNiA5LjktOTMuOSAzNi4xcy0zNC40IDU4LTM2LjIgOTMuOWMtMi4xIDM3LTIuMSAxNDcuOSAwIDE4NC45IDEuNyAzNS45IDkuOSA2Ny43IDM2LjIgOTMuOXM1OCAzNC40IDkzLjkgMzYuMmMzNyAyLjEgMTQ3LjkgMi4xIDE4NC45IDAgMzUuOS0xLjcgNjcuNy05LjkgOTMuOS0zNi4yIDI2LjItMjYuMiAzNC40LTU4IDM2LjItOTMuOSAyLjEtMzcgMi4xLTE0Ny44IDAtMTg0Ljh6TTM5OC44IDM4OGMtNy44IDE5LjYtMjIuOSAzNC43LTQyLjYgNDIuNi0yOS41IDExLjctOTkuNSA5LTEzMi4xIDlzLTEwMi43IDIuNi0xMzIuMS05Yy0xOS42LTcuOC0zNC43LTIyLjktNDIuNi00Mi42LTExLjctMjkuNS05LTk5LjUtOS0xMzIuMXMtMi42LTEwMi43IDktMTMyLjFjNy44LTE5LjYgMjIuOS0zNC43IDQyLjYtNDIuNiAyOS41LTExLjcgOTkuNS05IDEzMi4xLTlzMTAyLjctMi42IDEzMi4xIDljMTkuNiA3LjggMzQuNyAyMi45IDQyLjYgNDIuNiAxMS43IDI5LjUgOSA5OS41IDkgMTMyLjFzMi43IDEwMi43LTkgMTMyLjF6XCJdLFwiaW50ZXJuZXQtZXhwbG9yZXJcIjpbNTEyLDUxMixbXSxcImYyNmJcIixcIk00ODMuMDQ5IDE1OS43MDZjMTAuODU1LTI0LjU3NSAyMS40MjQtNjAuNDM4IDIxLjQyNC04Ny44NzEgMC03Mi43MjItNzkuNjQxLTk4LjM3MS0yMDkuNjczLTM4LjU3Ny0xMDcuNjMyLTcuMTgxLTIxMS4yMjEgNzMuNjctMjM3LjA5OCAxODYuNDU3IDMwLjg1Mi0zNC44NjIgNzguMjcxLTgyLjI5OCAxMjEuOTc3LTEwMS4xNThDMTI1LjQwNCAxNjYuODUgNzkuMTI4IDIyOC4wMDIgNDMuOTkyIDI5MS43MjUgMjMuMjQ2IDMyOS42NTEgMCAzOTAuOTQgMCA0MzYuNzQ3YzAgOTguNTc1IDkyLjg1NCA4Ni41IDE4MC4yNTEgNDIuMDA2IDMxLjQyMyAxNS40MyA2Ni41NTkgMTUuNTczIDEwMS42OTUgMTUuNTczIDk3LjEyNCAwIDE4NC4yNDktNTQuMjk0IDIxNi44MTQtMTQ2LjAyMkgzNzcuOTI3Yy01Mi41MDkgODguNTkzLTE5Ni44MTkgNTIuOTk2LTE5Ni44MTktNDcuNDM2SDUwOS45YzYuNDA3LTQzLjU4MS0xLjY1NS05NS43MTUtMjYuODUxLTE0MS4xNjJ6TTY0LjU1OSAzNDYuODc3YzE3LjcxMSA1MS4xNSA1My43MDMgOTUuODcxIDEwMC4yNjYgMTIzLjMwNC04OC43NDEgNDguOTQtMTczLjI2NyAyOS4wOTYtMTAwLjI2Ni0xMjMuMzA0em0xMTUuOTc3LTEwOC44NzNjMi01NS4xNTEgNTAuMjc2LTk0Ljg3MSAxMDMuOTgtOTQuODcxIDUzLjQxOCAwIDEwMS45ODEgMzkuNzIgMTAzLjk4MSA5NC44NzFIMTgwLjUzNnptMTg0LjUzNi0xODcuNmMyMS40MjUtMTAuMjg3IDQ4LjU2My0yMi4wMDMgNzIuNTU4LTIyLjAwMyAzMS40MjIgMCA1NC4yNzQgMjEuNzE3IDU0LjI3NCA1My43MjIgMCAyMC4wMDMtNy40MjcgNDkuMDA3LTE0LjU2OSA2Ny44NjctMjYuMjgtNDIuMjkyLTY1Ljk4Ni04MS41ODQtMTEyLjI2My05OS41ODZ6XCJdLGlveGhvc3Q6WzY0MCw1MTIsW10sXCJmMjA4XCIsXCJNNjE2IDE2MGgtNjcuM0M1MTEuMiA3MC43IDQyMi45IDggMzIwIDggMTgzIDggNzIgMTE5IDcyIDI1NmMwIDE2LjQgMS42IDMyLjUgNC43IDQ4SDI0Yy0xMy4zIDAtMjQgMTAuOC0yNCAyNCAwIDEzLjMgMTAuNyAyNCAyNCAyNGg2Ny4zYzM3LjUgODkuMyAxMjUuOCAxNTIgMjI4LjcgMTUyIDEzNyAwIDI0OC0xMTEgMjQ4LTI0OCAwLTE2LjQtMS42LTMyLjUtNC43LTQ4SDYxNmMxMy4zIDAgMjQtMTAuOCAyNC0yNCAwLTEzLjMtMTAuNy0yNC0yNC0yNHptLTk2IDk2YzAgMTEwLjUtODkuNSAyMDAtMjAwIDIwMC03NS43IDAtMTQxLjYtNDItMTc1LjUtMTA0SDQyNGMxMy4zIDAgMjQtMTAuOCAyNC0yNCAwLTEzLjMtMTAuNy0yNC0yNC0yNEgxMjUuOGMtMy44LTE1LjQtNS44LTMxLjQtNS44LTQ4IDAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMCA3NS43IDAgMTQxLjYgNDIgMTc1LjUgMTA0SDIxNmMtMTMuMyAwLTI0IDEwLjgtMjQgMjQgMCAxMy4zIDEwLjcgMjQgMjQgMjRoMjk4LjJjMy44IDE1LjQgNS44IDMxLjQgNS44IDQ4em0tMzA0LTI0aDIwOGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEzLjItMTAuNyAyNC0yNCAyNEgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTMuMiAxMC43LTI0IDI0LTI0elwiXSxpdHVuZXM6WzQ0OCw1MTIsW10sXCJmM2I0XCIsXCJNMjIzLjYgODAuM0MxMjkgODAuMyA1Mi41IDE1NyA1Mi41IDI1MS41UzEyOSA0MjIuOCAyMjMuNiA0MjIuOHMxNzEuMi03Ni43IDE3MS4yLTE3MS4yYzAtOTQuNi03Ni43LTE3MS4zLTE3MS4yLTE3MS4zem03OS40IDI0MGMtMy4yIDEzLjYtMTMuNSAyMS4yLTI3LjMgMjMuOC0xMi4xIDIuMi0yMi4yIDIuOC0zMS45LTUtMTEuOC0xMC0xMi0yNi40LTEuNC0zNi44IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgMy4yLTMuNiAyLjItMiAyLjItODAuOCAwLTUuNi0yLjctNy4xLTguNC02LjEtNCAuNy05MS45IDE3LjEtOTEuOSAxNy4xLTUgMS4xLTYuNyAyLjYtNi43IDguMyAwIDExNi4xLjUgMTEwLjgtMS4yIDExOC41LTIuMSA5LTcuNiAxNS44LTE0LjkgMTkuNi04LjMgNC42LTIzLjQgNi42LTMxLjQgNS4yLTIxLjQtNC0yOC45LTI4LjctMTQuNC00Mi45IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgNS01LjcuOS0xMjcgMi42LTEzMy43LjQtMi42IDEuNS00LjggMy41LTYuNCAyLjEtMS43IDUuOC0yLjcgNi43LTIuNyAxMDEtMTkgMTEzLjMtMjEuNCAxMTUuMS0yMS40IDUuNy0uNCA5IDMgOSA4LjctLjEgMTcwLjYuNCAxNjEuNC0xIDE2Ny42ek0zNDUuMiAzMkgxMDIuOEM0NS45IDMyIDAgNzcuOSAwIDEzNC44djI0Mi40QzAgNDM0LjEgNDUuOSA0ODAgMTAyLjggNDgwaDI0Mi40YzU3IDAgMTAyLjgtNDUuOSAxMDIuOC0xMDIuOFYxMzQuOEM0NDggNzcuOSA0MDIuMSAzMiAzNDUuMiAzMnpNMjIzLjYgNDQ0Yy0xMDYuMyAwLTE5Mi41LTg2LjItMTkyLjUtMTkyLjVTMTE3LjMgNTkgMjIzLjYgNTlzMTkyLjUgODYuMiAxOTIuNSAxOTIuNVMzMjkuOSA0NDQgMjIzLjYgNDQ0elwiXSxcIml0dW5lcy1ub3RlXCI6WzM4NCw1MTIsW10sXCJmM2I1XCIsXCJNMzgxLjkgMzg4LjJjLTYuNCAyNy40LTI3LjIgNDIuOC01NS4xIDQ4LTI0LjUgNC41LTQ0LjkgNS42LTY0LjUtMTAuMi0yMy45LTIwLjEtMjQuMi01My40LTIuNy03NC40IDE3LTE2LjIgNDAuOS0xOS41IDc2LjgtMjUuOCA2LTEuMSAxMS4yLTIuNSAxNS42LTcuNCA2LjQtNy4yIDQuNC00LjEgNC40LTE2My4yIDAtMTEuMi01LjUtMTQuMy0xNy0xMi4zLTguMiAxLjQtMTg1LjcgMzQuNi0xODUuNyAzNC42LTEwLjIgMi4yLTEzLjQgNS4yLTEzLjQgMTYuNyAwIDIzNC43IDEuMSAyMjMuOS0yLjUgMjM5LjUtNC4yIDE4LjItMTUuNCAzMS45LTMwLjIgMzkuNS0xNi44IDkuMy00Ny4yIDEzLjQtNjMuNCAxMC40LTQzLjItOC4xLTU4LjQtNTgtMjkuMS04Ni42IDE3LTE2LjIgNDAuOS0xOS41IDc2LjgtMjUuOCA2LTEuMSAxMS4yLTIuNSAxNS42LTcuNCAxMC4xLTExLjUgMS44LTI1Ni42IDUuMi0yNzAuMi44LTUuMiAzLTkuNiA3LjEtMTIuOSA0LjItMy41IDExLjgtNS41IDEzLjQtNS41IDIwNC0zOC4yIDIyOC45LTQzLjEgMjMyLjQtNDMuMSAxMS41LS44IDE4LjEgNiAxOC4xIDE3LjYuMiAzNDQuNSAxLjEgMzI2LTEuOCAzMzguNXpcIl0samF2YTpbMzc3LDUxMixbXSxcImY0ZTRcIixcIk0xMjEuNiAzOTZzLTE5LjYgMTEuNCAxMy45IDE1LjJjNDAuNiA0LjYgNjEuMyA0IDEwNi00LjUgMCAwIDExLjggNy40IDI4LjIgMTMuOEMxNjkuNSA0NjMuNCA0Mi45IDQxOCAxMjEuNiAzOTZtLTEyLjItNTYuMXMtMjEuOSAxNi4yIDExLjYgMTkuN2M0My4zIDQuNSA3Ny42IDQuOCAxMzYuOC02LjYgMCAwIDguMiA4LjMgMjEuMSAxMi44LTEyMS4zIDM1LjUtMjU2LjMgMi45LTE2OS41LTI1LjltMTAzLjItOTUuMWMyNC43IDI4LjQtNi41IDU0LTYuNSA1NHM2Mi43LTMyLjQgMzMuOS03Mi45Yy0yNi45LTM3LjgtNDcuNS01Ni42IDY0LjEtMTIxLjMuMSAwLTE3NS4yIDQzLjgtOTEuNSAxNDAuMm0xMzIuNiAxOTIuNnMxNC41IDExLjktMTUuOSAyMS4yYy01Ny45IDE3LjUtMjQwLjggMjIuOC0yOTEuNi43LTE4LjMtNy45IDE2LTE5IDI2LjgtMjEuMyAxMS4yLTIuNCAxNy43LTIgMTcuNy0yLTIwLjMtMTQuMy0xMzEuMyAyOC4xLTU2LjQgNDAuMiAyMDQuMiAzMy4yIDM3Mi40LTE0LjkgMzE5LjQtMzguOE0xMzEgMjgxLjhzLTkzLjEgMjIuMS0zMyAzMC4xYzI1LjQgMy40IDc2IDIuNiAxMjMuMS0xLjMgMzguNS0zLjIgNzcuMi0xMC4yIDc3LjItMTAuMnMtMTMuNiA1LjgtMjMuNCAxMi41Yy05NC41IDI0LjktMjc3IDEzLjMtMjI0LjUtMTIuMSA0NC41LTIxLjQgODAuNi0xOSA4MC42LTE5bTE2NyA5My4zYzk2LjEtNDkuOSA1MS42LTk3LjkgMjAuNi05MS40LTcuNiAxLjYtMTEgMy0xMSAzczIuOC00LjQgOC4yLTYuM2M2MS4zLTIxLjYgMTA4LjUgNjMuNi0xOS44IDk3LjMgMC0uMSAxLjUtMS40IDItMi42TTI0MCAwczUzLjIgNTMuMi01MC41IDEzNWMtODMuMSA2NS42LTE5IDEwMy4xIDAgMTQ1LjgtNDguNS00My44LTg0LjEtODIuMy02MC4yLTExOC4yQzE2NC40IDExMC4xIDI2MS41IDg0LjUgMjQwIDBtLTk5LjUgNTEwLjRjOTIuMiA1LjkgMjMzLjgtMy4zIDIzNy4xLTQ2LjkgMCAwLTYuNCAxNi41LTc2LjIgMjkuNy03OC43IDE0LjgtMTc1LjggMTMuMS0yMzMuMyAzLjYgMC0uMSAxMS44IDkuNyA3Mi40IDEzLjZcIl0sXCJqZWRpLW9yZGVyXCI6WzQ0OCw1MTIsW10sXCJmNTBlXCIsXCJNMjMxLjg5IDMzNS43MmwzMS40NC00NS44OS0yMC4xOCA1NS41IDYyLjU2IDkuMDktNjIuNTYgOS4wOCAyNC4yMiA0Ny40M3MtMzAuMjItMzEuNzctMzQuNDktMzYuMjVjMS43NiA2OC43OCAyLjE5IDg1LjcgMi4xOSA4NS43czE1NC40LTcxLjY1IDY4LjYyLTIzMC4wOWMwIDAgMTA2Ljk3LTExOC4wNyAxMC4wOS0xOTAuNzMgMCAwIDE2NS41IDk5LjkxIDYwLjU1IDI3MS40NiAwIDAgODYuNzgtODQuNzcgNDEuMzctMTcwLjU0IDAgMCA3OC43MSAxMTEuMDEtMTcuMTYgMjMzLjExIDAgMCAyNi4yNC0xNi4xNSA0OS40NS03Ny43MSAwIDAtMTYuOTMgMTgzLjI2LTIyMS45NiAxODUuNjZ2LjAyaC00LjA4di0uMDJDMTYuOTMgNDc5LjE0IDAgMjk1Ljg4IDAgMjk1Ljg4YzIzLjIxIDYxLjU2IDQ5LjQ0IDc3LjcxIDQ5LjQ0IDc3LjcxLTk1Ljg3LTEyMi4xMS0xNy4xNS0yMzMuMTEtMTcuMTUtMjMzLjExLTQ1LjQxIDg1Ljc4IDQxLjM4IDE3MC41NCA0MS4zOCAxNzAuNTQtMTA0Ljk1LTE3MS41NiA2MC41NC0yNzEuNDYgNjAuNTQtMjcxLjQ2LTk2Ljg4IDcyLjY2IDEwLjA5IDE5MC43MyAxMC4wOSAxOTAuNzMtODUuNzggMTU4LjQ0IDY4LjYyIDIzMC4wOSA2OC42MiAyMzAuMDlzLjQzLTE2LjkzIDIuMTktODUuN2wtMzQuNDggMzYuMjUgMjQuMjItNDcuNDMtNjIuNTYtOS4wOCA2Mi41Ni05LjA5LTIwLjE4LTU1LjUgMzEuNDQgNDUuODljMi4yNS04Ny44NSA3LjgyLTMwNS44MiA3Ljg1LTMwNi44NWwuMDEtMi40My4wMiAxIC4wMy0xIC4wMSAyLjQzYy4wNSAxLjcyIDUuNjEgMjE5LjIgNy44NiAzMDYuODV6XCJdLGplbmtpbnM6WzUxMiw1MTIsW10sXCJmM2I2XCIsXCJNNDg3LjEgNDI1Yy0xLjQtMTEuMi0xOS0yMy4xLTI4LjItMzEuOS01LjEtNS0yOS0yMy4xLTMwLjQtMjkuOS0xLjQtNi42IDkuNy0yMS41IDEzLjMtMjguOSA1LjEtMTAuNyA4LjgtMjMuNyAxMS4zLTMyLjYgMTguOC02Ni4xIDIwLjctMTU2LjktNi4yLTIxMS4yLTEwLjItMjAuNi0zOC42LTQ5LTU2LjQtNjIuNS00Mi0zMS43LTExOS42LTM1LjMtMTcwLjEtMTYuNi0xNC4xIDUuMi0yNy44IDkuOC00MC4xIDE3LjEtMzMuMSAxOS40LTY4LjMgMzIuNS03OC4xIDcxLjYtMjQuMiAxMC44LTMxLjUgNDEuOC0zMC4zIDc3LjguMiA3IDQuMSAxNS44IDIuNyAyMi40LS43IDMuMy01LjIgNy42LTYuMSA5LjgtMTEuNiAyNy43LTIuMyA2NCAxMS4xIDgzLjcgOC4xIDExLjkgMjEuNSAyMi40IDM5LjIgMjUuMi43IDEwLjYgMy4zIDE5LjcgOC4yIDMwLjQgMy4xIDYuOCAxNC43IDE5IDEwLjQgMjcuNy0yLjIgNC40LTIxIDEzLjgtMjcuMyAxNy42Qzg5IDQwNy4yIDczLjcgNDE1IDU0LjIgNDI5Yy0xMi42IDktMzIuMyAxMC4yLTI5LjIgMzEuMSAyLjEgMTQuMSAxMC4xIDMxLjYgMTQuNyA0NS44LjcgMiAxLjQgNC4xIDIuMSA2aDQyMmM0LjktMTUuMyA5LjctMzAuOSAxNC42LTQ3LjIgMy40LTExLjQgMTAuMi0yNy44IDguNy0zOS43ek0yMDUuOSAzMy43YzEuOC0uNSAzLjQuNyA0LjkgMi40LS4yIDUuMi01LjQgNS4xLTguOSA2LjgtNS40IDYuNy0xMy40IDkuOC0yMCAxNy4yLTYuOCA3LjUtMTQuNCAyNy43LTIzLjQgMzAtNC41IDEuMS05LjctLjgtMTMuNi0uNS0xMC40LjctMTcuNyA2LTI4LjMgNy41IDEzLjYtMjkuOSA1Ni4xLTU0IDg5LjMtNjMuNHptLTEwNC44IDkzLjZjMTMuNS0xNC45IDMyLjEtMjQuMSA1NC44LTI1LjkgMTEuNyAyOS43LTguNCA2NS0uOSA5Ny42IDIuMyA5LjkgMTAuMiAyNS40LTIuNCAyNS43LjMtMjguMy0zNC44LTQ2LjMtNjEuMy0yOS42LTEuOC0yMS41LTQuOS01MS43IDkuOC02Ny44em0zNi43IDIwMC4yYy0xLTQuMS0yLjctMTIuOS0yLjMtMTUuMSAxLjYtOC43IDE3LjEtMTIuNSAxMS0yNC43LTExLjMtLjEtMTMuOCAxMC4yLTI0LjEgMTEuMy0yNi43IDIuNi00NS42LTM1LjQtNDQuNC01OC40IDEtMTkuNSAxNy42LTM4LjIgNDAuMS0zNS44IDE2IDEuOCAyMS40IDE5LjIgMjQuNSAzNC43IDkuMi41IDIyLjUtLjQgMjYuOS03LjYtLjYtMTcuNS04LjgtMzEuNi04LjItNDcuNyAxLTMwLjMgMTcuNS01Ny42IDQuOC04Ny40IDEzLjYtMzAuOSA1My41LTU1LjMgODMuMS03MCAzNi42LTE4LjMgOTQuOS0zLjcgMTI5LjMgMTUuOCAxOS43IDExLjEgMzQuNCAzMi43IDQ4LjMgNTAuNy0xOS41LTUuOC0zNi4xIDQuMi0zMy4xIDIwLjMgMTYuMy0xNC45IDQ0LjItLjIgNTIuNSAxNi40IDcuOSAxNS44IDcuOCAzOS4zIDkgNjIuOCAyLjkgNTctMTAuNCAxMTUuOS0zOS4xIDE1Ny4xLTcuNyAxMS0xNC4xIDIzLTI0LjkgMzAuNi0yNiAxOC4yLTY1LjQgMzQuNy05OS4yIDIzLjQtNDQuNy0xNS02NS00NC44LTg5LjUtNzguOC43IDE4LjcgMTMuOCAzNC4xIDI2LjggNDguNCAxMS4zIDEyLjUgMjUgMjYuNiAzOS43IDMyLjQtMTIuMy0yLjktMzEuMS0zLjgtMzYuMiA3LjItMjguNi0xLjktNTUuMS00LjgtNjguNy0yNC4yLTEwLjYtMTUuNC0yMS40LTQxLjQtMjYuMy02MS40em0yMjIgMTI0LjFjNC4xLTMgMTEuMS0yLjkgMTcuNC0zLjYtNS40LTIuNy0xMy0zLjctMTkuMy0yLjItLjEtNC4yLTItNi44LTMuMi0xMC4yIDEwLjYtMy44IDM1LjUtMjguNSA0OS42LTIwLjMgNi43IDMuOSA5LjUgMjYuMiAxMC4xIDM3IC40IDktLjggMTgtNC41IDIyLjgtMTguOC0uNi0zNS44LTIuOC01MC43LTcgLjktNi4xLTEtMTIuMS42LTE2LjV6bS0xNy4yLTIwYy0xNi44LjgtMjYtMS4yLTM4LjMtMTAuOC4yLS44IDEuNC0uNSAxLjUtMS40IDE4IDggNDAuOC0zLjMgNTktNC45LTcuOSA1LjEtMTQuNiAxMS42LTIyLjIgMTcuMXptLTEyLjEgMzMuMmMtMS42LTkuNC0zLjUtMTItMi44LTIwLjIgMjUtMTYuNiAyOS43IDI4LjYgMi44IDIwLjJ6TTIyNiA0MzguNmMtMTEuNi0uNy00OC4xLTE0LTM4LjUtMjMuNyA5LjQgNi41IDI3LjUgNC45IDQxLjMgNy4zLjggNC40LTIuOCAxMC4yLTIuOCAxNi40ek01Ny43IDQ5Ny4xYy00LjMtMTIuNy05LjItMjUuMS0xNC44LTM2LjkgMzAuOC0yMy44IDY1LjMtNDguOSAxMDIuMi02My41IDIuOC0xLjEgMjMuMiAyNS40IDI2LjIgMjcuNiAxNi41IDExLjcgMzcgMjEgNTYuMiAzMC4yIDEuMiA4LjggMy45IDIwLjIgOC43IDM1LjUuNyAyLjMgMS40IDQuNyAyLjIgNy4ySDU3Ljd6bTI0MC42IDUuN2gtLjhjLjMtLjIuNS0uNC44LS41di41em03LjUtNS43YzIuMS0xLjQgNC4zLTIuOCA2LjQtNC4zIDEuMSAxLjQgMi4yIDIuOCAzLjIgNC4zaC05LjZ6bTE1LjEtMjQuN2MtMTAuOCA3LjMtMjAuNiAxOC4zLTMzLjMgMjUuMi02IDMuMy0yNyAxMS43LTMzLjQgMTAuMi0zLjYtLjgtMy45LTUuMy01LjQtOS41LTMuMS05LTEwLjEtMjMuNC0xMC44LTM3LS44LTE3LjItMi41LTQ2IDE2LTQyLjQgMTQuOSAyLjkgMzIuMyA5LjcgNDMuOSAxNi4xIDcuMSAzLjkgMTEuMSA4LjYgMjEuOSA5LjUtLjEgMS40LS4xIDIuOC0uMiA0LjMtNS45IDMuOS0xNS4zIDMuOC0yMS44IDcuMSA5LjUuNCAxNyAyLjcgMjMuNSA1LjktLjEgMy40LS4zIDctLjQgMTAuNnptNTMuNCAyNC43aC0xNGMtLjEtMy4yLTIuOC01LjgtNi4xLTUuOHMtNS45IDIuNi02LjEgNS44aC0xNy40Yy0yLjgtNC40LTUuNy04LjYtOC45LTEyLjUgMi4xLTIuMiA0LTQuNyA2LTYuOSA5IDMuNyAxNC44LTQuOSAyMS43LTQuMiA3LjkuOCAxNC4yIDExLjcgMjUuNCAxMWwtLjYgMTIuNnptOC43IDBjLjItNCAuNC03LjguNi0xMS41IDE1LjYtNy4zIDI5IDEuMyAzNS43IDExLjVIMzgzem04My40LTM3Yy0yLjMgMTEuMi01LjggMjQtOS45IDM3LjEtLjItLjEtLjQtLjEtLjYtLjFINDI4Yy42LTEuMSAxLjItMi4yIDEuOS0zLjMtMi42LTYuMS05LTguNy0xMC45LTE1LjUgMTIuMS0yMi43IDYuNS05My40LTI0LjItNzguNSA0LjMtNi4zIDE1LjYtMTEuNSAyMC44LTE5LjMgMTMgMTAuNCAyMC44IDIwLjMgMzMuMiAzMS40IDYuOCA2IDIwIDEzLjMgMjEuNCAyMy4xLjggNS41LTIuNiAxOC45LTMuOCAyNS4xek0yMjIuMiAxMzAuNWM1LjQtMTQuOSAyNy4yLTM0LjcgNDUtMzIgNy43IDEuMiAxOCA4LjIgMTIuMiAxNy43LTMwLjItNy00NS4yIDEyLjYtNTQuNCAzMy4xLTguMS0yLTQuOS0xMy4xLTIuOC0xOC44em0xODQuMSA2My4xYzguMi0zLjYgMjIuNC0uNyAyOS42LTUuMy00LjItMTEuNS0xMC4zLTIxLjQtOS4zLTM3LjcuNSAwIDEgMCAxLjQuMSA2LjggMTQuMiAxMi43IDI5LjIgMjEuNCA0MS43LTUuNyAxMy41LTQzLjYgMjUuNC00My4xIDEuMnptMjAuNC00M3ptLTExNy4yIDQ1LjdjLTYuOC0xMC45LTE5LTMyLjUtMTQuNS00NS4zIDYuNSAxMS45IDguNiAyNC40IDE3LjggMzMuMyA0LjEgNCAxMi4yIDkgOC4yIDIwLjItLjkgMi43LTcuOCA4LjYtMTEuNyA5LjctMTQuNCA0LjMtNDcuOS45LTM2LjYtMTcuMSAxMS45LjcgMjcuOSA3LjggMzYuOC0uOHptMjcuMyA3MGMzLjggNi42IDEuNCAxOC43IDEyLjEgMjAuNiAyMC4yIDMuNCA0My42LTEyLjMgNTguMS0xNy44IDktMTUuMi0uOC0yMC43LTguOS0zMC41LTE2LjYtMjAtMzguOC00NC44LTM4LTc0LjcgNi43LTQuOSA3LjMgNy40IDguMiA5LjcgOC43IDIwLjMgMzAuNCA0Ni4yIDQ2LjMgNjMuNSAzLjkgNC4zIDEwLjMgOC40IDExIDExLjIgMi4xIDguMi01LjQgMTgtNC41IDIzLjUtMjEuNyAxMy45LTQ1LjggMjkuMS04MS40IDI1LjYtNy40LTYuNy0xMC4zLTIxLjQtMi45LTMxLjF6bS0yMDEuMy05LjJjLTYuOC0zLjktOC40LTIxLTE2LjQtMjEuNC0xMS40LS43LTkuMyAyMi4yLTkuMyAzNS41LTcuOC03LjEtOS4yLTI5LjEtMy41LTQwLjMtNi42LTMuMi05LjUgMy42LTEzLjEgNS45IDQuNy0zNC4xIDQ5LjgtMTUuOCA0Mi4zIDIwLjN6bTI5OS42IDI4LjhjLTEwLjEgMTkuMi0yNC40IDQwLjQtNTQgNDEtLjYtNi4yLTEuMS0xNS42IDAtMTkuNCAyMi43LTIuMiAzNi42LTEzLjcgNTQtMjEuNnptLTE0MS45IDEyLjRjMTguOSA5LjkgNTMuNiAxMSA3OS4zIDEwLjIgMS40IDUuNiAxLjMgMTIuNiAxLjQgMTkuNC0zMyAxLjgtNzItNi40LTgwLjctMjkuNnptOTIuMiA0Ni43Yy0xLjcgNC4zLTUuMyA5LjMtOS44IDExLjEtMTIuMSA0LjktNDUuNiA4LjctNjIuNC0uMy0xMC43LTUuNy0xNy41LTE4LjUtMjMuNC0yNi0yLjgtMy42LTE2LjktMTIuOS0uMi0xMi45IDEzLjEgMzIuNyA1OCAyOSA5NS44IDI4LjF6XCJdLGpvZ2V0Ols0OTYsNTEyLFtdLFwiZjNiN1wiLFwiTTIyNy41IDQ2OC43Yy05LTEzLjYtMTkuOS0zMy4zLTIzLjctNDIuNC01LjctMTMuNy0yNy4yLTQ1LjYgMzEuMi02Ny4xIDUxLjctMTkuMSAxNzYuNy0xNi41IDIwOC44LTE3LjYtNCA5LTguNiAxNy45LTEzLjkgMjYuNi00MC40IDY1LjUtMTEwLjQgMTAxLjUtMTgyIDEwMS41LTYuOCAwLTEzLjYtLjQtMjAuNC0xTTY2LjEgMTQzLjlDMTI4IDQzLjQgMjU5LjYgMTIuMiAzNjAuMSA3NC4xYzc0LjggNDYuMSAxMTEuMiAxMzAuOSA5OS4zIDIxMi43LTI0LjktLjUtMTc5LjMtMy42LTIzMC4zLTQuOS01NS41LTEuNC04MS43LTIwLjgtNTguNS00OC4yIDIzLjItMjcuNCA1MS4xLTQwLjcgNjguOS01MS4yIDE3LjktMTAuNSAyNy4zLTMzLjctMjMuNi0yOS43Qzg3LjMgMTYxLjUgNDguNiAyNTIuMSAzNy42IDI5M2MtOC44LTQ5LjctLjEtMTAyLjcgMjguNS0xNDkuMW0tMjkuMi0xOGMtNzEuOSAxMTYuNi0zNS42IDI2OS4zIDgxIDM0MS4yIDExNi42IDcxLjkgMjY5LjMgMzUuNiAzNDEuMi04MC45IDcxLjktMTE2LjYgMzUuNi0yNjkuNC04MS0zNDEuMi00MC41LTI1LjEtODUuNS0zNy0xMjkuOS0zN0MxNjUgOCA4My44IDQ5LjkgMzYuOSAxMjUuOW0yNDQuNCAxMTAuNGMtMzEuNSAyMC41LTY1LjMgMzEuMy02NS4zIDMxLjNsMTY5LjUtMS42IDQ2LjUtMjMuNHMzLjYtOS41LTE5LjEtMTUuNWMtMjIuNy02LTU3IDExLjMtODYuNyAyNy4yLTI5LjcgMTUuOC0zMS4xIDguMi0zMS4xIDguMnM0MC4yLTI4LjEgNTAuNy0zNC41YzEwLjUtNi40IDMxLjktMTQgMTMuNC0yNC42LTMuMi0xLjgtNi43LTIuNy0xMC40LTIuNy0xNy44IDAtNDEuNSAxOC43LTY3LjUgMzUuNlwiXSxqb29tbGE6WzQ0OCw1MTIsW10sXCJmMWFhXCIsXCJNLjYgOTIuMUMuNiA1OC44IDI3LjQgMzIgNjAuNCAzMmMzMCAwIDU0LjUgMjEuOSA1OS4yIDUwLjIgMzIuNi03LjYgNjcuMS42IDk2LjUgMzBsLTQ0LjMgNDQuM2MtMjAuNS0yMC41LTQyLjYtMTYuMy01NS40LTMuNS0xNC4zIDE0LjMtMTQuMyAzNy45IDAgNTIuMmw5OS41IDk5LjUtNDQgNDQuM2MtODcuNy04Ny4yLTQ5LjctNDkuNy05OS44LTk5LjctMjYuOC0yNi41LTM1LTY0LjgtMjQuOC05OC45QzIwLjQgMTQ0LjYuNiAxMjAuNy42IDkyLjF6bTEyOS41IDExNi40bDQ0LjMgNDQuM2MxMC0xMCA4OS43LTg5LjcgOTkuNy05OS44IDE0LjMtMTQuMyAzNy42LTE0LjMgNTEuOSAwIDEyLjggMTIuOCAxNyAzNS0zLjUgNTUuNGw0NCA0NC4zYzMxLjItMzEuMiAzOC41LTY3LjYgMjguOS0xMDEuMiAyOS4yLTQuMSA1MS45LTI5LjIgNTEuOS01OS41IDAtMzMuMi0yNi44LTYwLjEtNTkuOC02MC4xLTMwLjMgMC01NS40IDIyLjUtNTkuNSA1MS42LTMzLjgtOS45LTcxLjctMS41LTk4LjMgMjUuMS0xOC4zIDE5LjEtNzEuMSA3MS41LTk5LjYgOTkuOXptMjY2LjMgMTUyLjJjOC4yLTMyLjctLjktNjguNS0yNi4zLTkzLjktMTEuOC0xMi4yIDUgNC43LTk5LjUtOTkuN2wtNDQuMyA0NC4zIDk5LjcgOTkuN2MxNC4zIDE0LjMgMTQuMyAzNy42IDAgNTEuOS0xMi44IDEyLjgtMzUgMTctNTUuNC0zLjVsLTQ0IDQ0LjNjMjcuNiAzMC4yIDY4IDM4LjggMTAyLjcgMjggNS41IDI3LjQgMjkuNyA0OC4xIDU4LjkgNDguMSAzMyAwIDU5LjgtMjYuOCA1OS44LTYwLjEgMC0zMC4yLTIyLjUtNTUtNTEuNi01OS4xem0tODQuMy01My4xbC00NC00NC4zYy04NyA4Ni40LTUwLjQgNTAuNC05OS43IDk5LjgtMTQuMyAxNC4zLTM3LjYgMTQuMy01MS45IDAtMTMuMS0xMy40LTE2LjktMzUuMyAzLjItNTUuNGwtNDQtNDQuM2MtMzAuMiAzMC4yLTM4IDY1LjItMjkuNSA5OC4zLTI2LjcgNi00Ni4yIDI5LjktNDYuMiA1OC4yQzAgNDUzLjIgMjYuOCA0ODAgNTkuOCA0ODBjMjguNiAwIDUyLjUtMTkuOCA1OC42LTQ2LjcgMzIuNyA4LjIgNjguNS0uNiA5NC4yLTI2IDMyLjEtMzIgMTIuMi0xMi40IDk5LjUtOTkuN3pcIl0sanM6WzQ0OCw1MTIsW10sXCJmM2I4XCIsXCJNMCAzMnY0NDhoNDQ4VjMySDB6bTI0My44IDM0OS40YzAgNDMuNi0yNS42IDYzLjUtNjIuOSA2My41LTMzLjcgMC01My4yLTE3LjQtNjMuMi0zOC41bDM0LjMtMjAuN2M2LjYgMTEuNyAxMi42IDIxLjYgMjcuMSAyMS42IDEzLjggMCAyMi42LTUuNCAyMi42LTI2LjVWMjM3LjdoNDIuMXYxNDMuN3ptOTkuNiA2My41Yy0zOS4xIDAtNjQuNC0xOC42LTc2LjctNDNsMzQuMy0xOS44YzkgMTQuNyAyMC44IDI1LjYgNDEuNSAyNS42IDE3LjQgMCAyOC42LTguNyAyOC42LTIwLjggMC0xNC40LTExLjQtMTkuNS0zMC43LTI4bC0xMC41LTQuNWMtMzAuNC0xMi45LTUwLjUtMjkuMi01MC41LTYzLjUgMC0zMS42IDI0LjEtNTUuNiA2MS42LTU1LjYgMjYuOCAwIDQ2IDkuMyA1OS44IDMzLjdMMzY4IDI5MGMtNy4yLTEyLjktMTUtMTgtMjcuMS0xOC0xMi4zIDAtMjAuMSA3LjgtMjAuMSAxOCAwIDEyLjYgNy44IDE3LjcgMjUuOSAyNS42bDEwLjUgNC41YzM1LjggMTUuMyA1NS45IDMxIDU1LjkgNjYuMiAwIDM3LjgtMjkuOCA1OC42LTY5LjcgNTguNnpcIl0sXCJqcy1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYzYjlcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0yNDMuOCAzODEuNGMwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNS0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNWwzNC4zLTIwLjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41VjIzNy43aDQyLjF2MTQzLjd6bTk5LjYgNjMuNWMtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzbDM0LjMtMTkuOGM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjZ6XCJdLGpzZmlkZGxlOls1NzYsNTEyLFtdLFwiZjFjY1wiLFwiTTUxMC42MzQgMjM3LjQ2MmMtNC43MjctMi42MjEtNS42NjQtNS43NDgtNi4zODEtMTAuNzc2LTIuMzUyLTE2LjQ4OC0zLjUzOS0zMy42MTktOS4wOTctNDkuMDk1LTM1Ljg5NS05OS45NTctMTUzLjk5LTE0My4zODYtMjQ2Ljg0OS05MS42NDYtMjcuMzcgMTUuMjUtNDguOTcxIDM2LjM2OS02NS40OTMgNjMuOTAzLTMuMTg0LTEuNTA4LTUuNDU4LTIuNzEtNy44MjQtMy42ODYtMzAuMTAyLTEyLjQyMS01OS4wNDktMTAuMTIxLTg1LjMzMSA5LjE2Ny0yNS41MzEgMTguNzM3LTM2LjQyMiA0NC41NDgtMzIuNjc2IDc2LjQwOC4zNTUgMy4wMjUtMS45NjcgNy42MjEtNC41MTQgOS41NDUtMzkuNzEyIDI5Ljk5Mi01Ni4wMzEgNzguMDY1LTQxLjkwMiAxMjQuNjE1IDEzLjgzMSA0NS41NjkgNTcuNTE0IDc5Ljc5NiAxMDUuNjA4IDgxLjQzMyAzMC4yOTEgMS4wMzEgNjAuNjM3LjU0NiA5MC45NTkuNTM5IDg0LjA0MS0uMDIxIDE2OC4wOS41MzEgMjUyLjEyLS40OCA1Mi42NjQtLjYzNCA5Ni4xMDgtMzYuODczIDEwOC4yMTItODcuMjkzIDExLjU0LTQ4LjA3NC0xMS4xNDQtOTcuMy01Ni44MzItMTIyLjYzNHptMjEuMTA3IDE1Ni44OGMtMTguMjMgMjIuNDMyLTQyLjM0MyAzNS4yNTMtNzEuMjggMzUuNjUtNTYuODc0Ljc4MS0xMTMuNzY3LjIzLTE3MC42NTIuMjMgMCAuNy0xNjMuMDI4LjE1OS0xNjMuNzI4LjE1NC00My44NjEtLjMzMi03Ni43MzktMTkuNzY2LTk1LjE3NS01OS45OTUtMTguOTAyLTQxLjI0NS00LjAwNC05MC44NDggMzQuMTg2LTExNi4xMDYgOS4xODItNi4wNzMgMTIuNTA1LTExLjU2NiAxMC4wOTYtMjMuMTM2LTUuNDktMjYuMzYxIDQuNDUzLTQ3Ljk1NiAyNi40Mi02Mi45ODEgMjIuOTg3LTE1LjcyMyA0Ny40MjItMTYuMTQ2IDcyLjAzNC0zLjA4MyAxMC4yNjkgNS40NSAxNC42MDcgMTEuNTY0IDIyLjE5OC0yLjUyNyAxNC4yMjItMjYuMzk5IDM0LjU1Ny00Ni43MjcgNjAuNjcxLTYxLjI5NCA5Ny40Ni01NC4zNjYgMjI4LjM3IDcuNTY4IDIzMC4yNCAxMzIuNjk3LjEyMiA4LjE1IDIuNDEyIDEyLjQyOCA5Ljg0OCAxNS44OTQgNTcuNTYgMjYuODI5IDc0LjQ1NiA5Ni4xMjIgMzUuMTQyIDE0NC40OTd6bS04Ny43ODktODAuNDk5Yy01Ljg0OCAzMS4xNTctMzQuNjIyIDU1LjA5Ni02Ni42NjYgNTUuMDk1LTE2Ljk1My0uMDAxLTMyLjA1OC02LjU0NS00NC4wNzktMTcuNzA1LTI3LjY5Ny0yNS43MTMtNzEuMTQxLTc0Ljk4LTk1LjkzNy05My4zODctMjAuMDU2LTE0Ljg4OC00MS45OS0xMi4zMzMtNjAuMjcyIDMuNzgyLTQ5Ljk5NiA0NC4wNzEgMTUuODU5IDEyMS43NzUgNjcuMDYzIDc3LjE4OCA0LjU0OC0zLjk2IDcuODQtOS41NDMgMTIuNzQ0LTEyLjg0NCA4LjE4NC01LjUwOSAyMC43NjYtLjg4NCAxMy4xNjggMTAuNjIyLTE3LjM1OCAyNi4yODQtNDkuMzMgMzguMTk3LTc4Ljg2MyAyOS4zMDEtMjguODk3LTguNzA0LTQ4Ljg0LTM1Ljk2OC00OC42MjYtNzAuMTc5IDEuMjI1LTIyLjQ4NSAxMi4zNjQtNDMuMDYgMzUuNDE0LTU1Ljk2NSAyMi41NzUtMTIuNjM4IDQ2LjM2OS0xMy4xNDYgNjYuOTkxIDIuNDc0QzI5NS42OCAyODAuNyAzMjAuNDY3IDMyMy45NyAzNTIuMTg1IDM0My40N2MyNC41NTggMTUuMDk5IDU0LjI1NCA3LjM2MyA2OC44MjMtMTcuNTA2IDI4LjgzLTQ5LjIwOS0zNC41OTItMTA1LjAxNi03OC44NjgtNjMuNDYtMy45ODkgMy43NDQtNi45MTcgOC45MzItMTEuNDEgMTEuNzItMTAuOTc1IDYuODExLTE3LjMzMy00LjExMy0xMi44MDktMTAuMzUzIDIwLjcwMy0yOC41NTQgNTAuNDY0LTQwLjQ0IDgzLjI3MS0yOC4yMTQgMzEuNDI5IDExLjcxNCA0OS4xMDggNDQuMzY2IDQyLjc2IDc4LjE4NnpcIl0sa2V5YmFzZTpbNDEyLDUxMixbXSxcImY0ZjVcIixcIk0xNzcuMiA0MzAuOWMwIDkuOC04IDE3LjgtMTcuOCAxNy44cy0xNy44LTgtMTcuOC0xNy44IDgtMTcuOCAxNy44LTE3LjhjOS44LS4xIDE3LjggNy45IDE3LjggMTcuOHpNMjcwIDQxM2MtOS44IDAtMTcuOCA4LTE3LjggMTcuOHM4IDE3LjggMTcuOCAxNy44IDE3LjgtOCAxNy44LTE3LjgtOC0xNy44LTE3LjgtMTcuOHptMTQyLjMtMzZjMCAzOC45LTcuNiA3My45LTIyLjIgMTAzaC0yNy4zYzIzLjUtMzguNyAzMC41LTk0LjggMjIuNC0xMzQuMy0xNi4xIDI5LjUtNTIuMSAzOC42LTg1LjkgMjguOC0xMjcuOC0zNy41LTE5Mi41IDE5LjctMjM0LjYgNTAuM2wxOC45LTU5LjMtMzkuOSA0Mi4zYzQuOCAyNi43IDE1LjcgNTEuMyAzMS4yIDcyLjNINDYuMWMtOS43LTE1LjgtMTcuMi0zMy0yMi4yLTUxLjNMLjEgNDU0YzAtNzQuOS01LjUtMTQ3LjYgNjEuNS0yMTUuMiAyMC4yLTIwLjQgNDMuNy0zNi4yIDY5LjEtNDYuNy02LjgtMTMuNS05LjUtMjkuMi03LjgtNDZsLTE5LjktMS4yYy0xNy45LTEuMS0zMS42LTE2LjUtMzAuNi0zNC40di0uMUw3NCA4NC4yYzEuMS0xNy4xIDE1LjQtMzAuNiAzMi41LTMwLjYgMS4zIDAtLjMtLjEgMjguMiAxLjcgMTMuOS44IDIxLjUgOS44IDIyLjggMTEuNCA3LjEtMTAuNCAxNC41LTIwLjUgMjQuNi0zNC41bDIwLjYgMTIuMWMtMTMuNiAyOS05LjEgMzYuMi05IDM2LjMgMy45IDAgMTMuOS0uNSAzMi40IDUuN0MyNDYgOTIuOSAyNjIgMTA3IDI3MSAxMjZjLjQuOSAxNS41IDI5IDEuMiA2Mi42IDE5IDYuMSA1MS4zIDE5LjkgODIuNCA1MS44IDM2LjYgMzcuNiA1Ny43IDg3LjQgNTcuNyAxMzYuNnpNMTI4IDEyMi4zYzMuMi0xMCA3LjctMTkuNyAxMy4xLTI5LjQuMS0yIDIuMi0xMy4xLTcuOC0xMy44LTI4LjUtMS44LTI2LjMtMS42LTI2LjctMS42LTQuNiAwLTguMyAzLjUtOC42IDguMWwtMS42IDI2LjJjLS4zIDQuNyAzLjQgOC44IDguMSA5LjFsMjMuNSAxLjR6bTI1LjggNjEuOGM1LjYgOS40IDE0LjEgMTYuMSAyMi4zIDIwIDAtMjEuMiAyOC41LTQxLjkgNTIuOC0xNy41bDguNCAxMC4zYzIwLjgtMTguOCAxOS40LTQ1LjMgMTIuMS02MC45LTEzLjgtMjkuMS00Ni45LTMyLTU0LjMtMzEuNy0xMC4zLjQtMTkuNy01LjQtMjMuNy0xNS4zLTEzLjcgMjEuMi0zNy4yIDYyLjUtMTcuNiA5NS4xem04Mi45IDY4LjRMMjE3IDI2OC42Yy0xLjkgMS42LTIuMiA0LjQtLjYgNi4zbDguOSAxMC45YzEgMS4yIDMuOCAyLjcgNi4zLjZsMTkuNi0xNiA1LjUgNi44YzQuOSA2IDEzLjgtMS40IDktNy4zLTYzLjYtNzguMy00MS41LTUxLjEtNTUuMy02OC4xLTQuNy02LTEzLjkgMS40LTkgNy4zIDEuOSAyLjMgMTguNCAyMi42IDE5LjggMjQuM2wtOS42IDcuOWMtNC42IDMuOCAyLjYgMTMuMyA3LjQgOS40bDkuNy04IDggOS44em0xMTguNCAyNS43Yy0xNi45LTIzLjctNDIuNi00Ni43LTczLjQtNjAuNC03LjktMy41LTE1LTYuMS0yMi45LTguNi0yIDIuMi00LjEgNC4zLTYuNCA2LjJsMzEuOSAzOS4yYzEwLjQgMTIuNyA4LjUgMzEuNS00LjIgNDEuOS0xLjMgMS4xLTEzLjEgMTAuNy0yOSA0LjktMi45IDIuMy0xMC4xIDkuOS0yMi4yIDkuOS04LjYgMC0xNi42LTMuOC0yMi4xLTEwLjVsLTguOS0xMC45Yy02LjMtNy44LTcuOS0xNy45LTUtMjYuOC04LjItOS45LTguMy0yMS4zLTQuNi0zMC03LjItMS4zLTI2LjctNi4yLTQyLjctMjEuNC01NS44IDIwLjctODggNjQuNC0xMDEuMyA5MS4yLTE0LjkgMzAuMi0xOC44IDYwLjktMTkuOSA5MC4yIDguMi04LjctMy45IDQuMSAxMTQtMTIwLjlsLTI5LjkgOTMuNmM1Ny44LTMxLjEgMTI0LTM2IDE5Ny40LTE0LjQgMjMuNiA2LjkgNDUuMSAxLjYgNTYtMTMuOSAxMS4xLTE1LjYgOC41LTM3LjctNi44LTU5LjN6TTExMC42IDEwNy4zbDE1LjYgMSAxLTE1LjYtMTUuNi0xLTEgMTUuNnpcIl0sa2V5Y2RuOls1MTIsNTEyLFtdLFwiZjNiYVwiLFwiTTYzLjggNDA5LjNsNjAuNS01OWMzMi4xIDQyLjggNzEuMSA2NiAxMjYuNiA2Ny40IDMwLjUuNyA2MC4zLTcgODYuNC0yMi40IDUuMSA1LjMgMTguNSAxOS41IDIwLjkgMjItMzIuMiAyMC43LTY5LjYgMzEuMS0xMDguMSAzMC4yLTQzLjMtMS4xLTg0LjYtMTYuNy0xMTcuNy00NC40LjMtLjYtMzguMiAzNy41LTM4LjYgMzcuOSA5LjUgMjkuOC0xMy4xIDYyLjQtNDYuMyA2Mi40QzIwLjcgNTAzLjMgMCA0ODEuNyAwIDQ1NC45YzAtMzQuMyAzMy4xLTU2LjYgNjMuOC00NS42em0zNTQuOS0yNTIuNGMxOS4xIDMxLjMgMjkuNiA2Ny40IDI4LjcgMTA0LTEuMSA0NC44LTE5IDg3LjUtNDguNiAxMjEgLjMuMyAyMy44IDI1LjIgMjQuMSAyNS41IDkuNi0xLjMgMTkuMiAyIDI1LjkgOS4xIDExLjMgMTIgMTAuOSAzMC45LTEuMSA0Mi40LTEyIDExLjMtMzAuOSAxMC45LTQyLjQtMS4xLTYuNy03LTkuNC0xNi44LTcuNi0yNi4zLTI0LjktMjYuNi00NC40LTQ3LjItNDQuNC00Ny4yIDQyLjctMzQuMSA2My4zLTc5LjYgNjQuNC0xMjQuMi43LTI4LjktNy4yLTU3LjItMjEuMS04Mi4ybDIyLjEtMjF6TTEwNCA1My4xYzYuNyA3IDkuNCAxNi44IDcuNiAyNi4zbDQ1LjkgNDguMWMtNC43IDMuOC0xMy4zIDEwLjQtMjIuOCAyMS4zLTI1LjQgMjguNS0zOS42IDY0LjgtNDAuNyAxMDIuOS0uNyAyOC45IDYuMSA1Ny4yIDIwIDgyLjRsLTIyIDIxLjVDNzIuNyAzMjQgNjMuMSAyODcuOSA2NC4yIDI1MC45YzEtNDQuNiAxOC4zLTg3LjYgNDcuNS0xMjEuMWwtMjUuMy0yNi40Yy05LjYgMS4zLTE5LjItMi0yNS45LTkuMS0xMS4zLTEyLTEwLjktMzAuOSAxLjEtNDIuNEM3My41IDQwLjcgOTIuMiA0MSAxMDQgNTMuMXpNNDY0LjkgOGMyNiAwIDQ3LjEgMjIuNCA0Ny4xIDQ4LjNTNDkwLjkgMTA0IDQ2NC45IDEwNGMtNi4zLjEtMTQtMS4xLTE1LjktMS44bC02Mi45IDU5LjdjLTMyLjctNDMuNi03Ni43LTY1LjktMTI2LjktNjcuMi0zMC41LS43LTYwLjMgNi44LTg2LjIgMjIuNGwtMjEuMS0yMkMxODQuMSA3NC4zIDIyMS41IDY0IDI2MCA2NC45YzQzLjMgMS4xIDg0LjYgMTYuNyAxMTcuNyA0NC42bDQxLjEtMzguNmMtMS41LTQuNy0yLjItOS42LTIuMi0xNC41QzQxNi41IDI5LjcgNDM4LjkgOCA0NjQuOSA4ek0yNTYuNyAxMTMuNGM1LjUgMCAxMC45LjQgMTYuNCAxLjEgNzguMSA5LjggMTMzLjQgODEuMSAxMjMuOCAxNTkuMS05LjggNzguMS04MS4xIDEzMy40LTE1OS4xIDEyMy44LTc4LjEtOS44LTEzMy40LTgxLjEtMTIzLjgtMTU5LjIgOS4zLTcyLjQgNzAuMS0xMjQuNiAxNDIuNy0xMjQuOHptLTU5IDExOS40Yy42IDIyLjcgMTIuMiA0MS44IDMyLjQgNTIuMmwtMTEgNTEuN2g3My43bC0xMS01MS43YzIwLjEtMTAuOSAzMi4xLTI5IDMyLjQtNTIuMi0uNC0zMi44LTI1LjgtNTcuNS01OC4zLTU4LjMtMzIuMS44LTU3LjMgMjQuOC01OC4yIDU4LjN6TTI1NiAxNjBcIl0sa2lja3N0YXJ0ZXI6WzQ0OCw1MTIsW10sXCJmM2JiXCIsXCJNNDAwIDQ4MEg0OGMtMjYuNCAwLTQ4LTIxLjYtNDgtNDhWODBjMC0yNi40IDIxLjYtNDggNDgtNDhoMzUyYzI2LjQgMCA0OCAyMS42IDQ4IDQ4djM1MmMwIDI2LjQtMjEuNiA0OC00OCA0OHpNMTk5LjYgMTc4LjVjMC0zMC43LTE3LjYtNDUuMS0zOS43LTQ1LjEtMjUuOCAwLTQwIDE5LjgtNDAgNDQuNXYxNTQuOGMwIDI1LjggMTMuNyA0NS42IDQwLjUgNDUuNiAyMS41IDAgMzkuMi0xNCAzOS4yLTQ1LjZ2LTQxLjhsNjAuNiA3NS43YzEyLjMgMTQuOSAzOSAxNi44IDU1LjggMCAxNC42LTE1LjEgMTQuOC0zNi44IDQtNTAuNGwtNDkuMS02Mi44IDQwLjUtNTguN2M5LjQtMTMuNSA5LjUtMzQuNS01LjYtNDkuMS0xNi40LTE1LjktNDQuNi0xNy4zLTYxLjQgN2wtNDQuOCA2NC43di0zOC44elwiXSxcImtpY2tzdGFydGVyLWtcIjpbMzg0LDUxMixbXSxcImYzYmNcIixcIk0xNDcuMyAxMTQuNGMwLTU2LjItMzIuNS04Mi40LTczLjQtODIuNEMyNi4yIDMyIDAgNjguMiAwIDExMy40djI4M2MwIDQ3LjMgMjUuMyA4My40IDc0LjkgODMuNCAzOS44IDAgNzIuNC0yNS42IDcyLjQtODMuNHYtNzYuNWwxMTIuMSAxMzguM2MyMi43IDI3LjIgNzIuMSAzMC43IDEwMy4yIDAgMjctMjcuNiAyNy4zLTY3LjQgNy40LTkyLjJsLTkwLjgtMTE0LjggNzQuOS0xMDcuNGMxNy40LTI0LjcgMTcuNS02My4xLTEwLjQtODkuOC0zMC4zLTI5LTgyLjQtMzEuNi0xMTMuNiAxMi44TDE0Ny4zIDE4NXYtNzAuNnpcIl0sa29ydnVlOls0NDYsNTEyLFtdLFwiZjQyZlwiLFwiTTM4Ni41IDM0aC0zMjdDMjYuOCAzNCAwIDYwLjggMCA5My41djMyNy4xQzAgNDUzLjIgMjYuOCA0ODAgNTkuNSA0ODBoMzI3LjFjMzMgMCA1OS41LTI2LjggNTkuNS01OS41di0zMjdDNDQ2IDYwLjggNDE5LjIgMzQgMzg2LjUgMzR6TTg3LjEgMTIwLjhoOTZ2MTE2bDYxLjgtMTE2aDExMC45bC04MS4yIDEzMkg4Ny4xdi0xMzJ6bTE2MS44IDI3Mi4xbC02NS43LTExMy42djExMy42aC05NlYyNjIuMWgxOTEuNWw4OC42IDEzMC44SDI0OC45elwiXSxsYXJhdmVsOls2NDAsNTEyLFtdLFwiZjNiZFwiLFwiTTYzNy41IDI0MS42Yy00LjItNC44LTYyLjgtNzguMS03My4xLTkwLjUtMTAuMy0xMi40LTE1LjQtMTAuMi0yMS43LTkuMy02LjQuOS04MC41IDEzLjQtODkuMSAxNC44LTguNiAxLjUtMTQgNC45LTguNyAxMi4zIDQuNyA2LjYgNTMuNCA3NS43IDY0LjIgOTAuOWwtMTkzLjcgNDYuNEwxNjEuMiA0OC43Yy02LjEtOS4xLTcuNC0xMi4zLTIxLjQtMTEuNi0xNCAuNi0xMjAuOSA5LjUtMTI4LjUgMTAuMi03LjYuNi0xNiA0LTguNCAyMnMxMjkgMjc5LjYgMTMyLjQgMjg3LjJjMy40IDcuNiAxMi4yIDIwIDMyLjggMTUgMjEuMS01LjEgOTQuMy0yNC4yIDEzNC4zLTM0LjcgMjEuMSAzOC4zIDY0LjIgMTE1LjkgNzIuMiAxMjcgMTAuNiAxNC45IDE4IDEyLjQgMzQuMyA3LjQgMTIuOC0zLjkgMTk5LjYtNzEuMSAyMDgtNzQuNSA4LjQtMy41IDEzLjYtNS45IDcuOS0xNC40LTQuMi02LjItNTMuNS03Mi4yLTc5LjMtMTA2LjggMTcuNy00LjcgODAuNi0yMS40IDg3LjMtMjMuMyA3LjktMiA5LTUuOCA0LjctMTAuNnptLTM1Mi4yIDcyYy0yLjMuNS0xMTAuOCAyNi41LTExNi42IDI3LjgtNS44IDEuMy01LjguNy02LjUtMS4zLS43LTItMTI5LTI2Ni43LTEzMC44LTI3MC0xLjgtMy4zLTEuNy01LjkgMC01LjlzMTAyLjUtOSAxMDYtOS4yYzMuNi0uMiAzLjIuNiA0LjUgMi44IDAgMCAxNDIuMiAyNDUuNCAxNDQuNiAyNDkuNyAyLjYgNC4zIDEuMSA1LjYtMS4yIDYuMXptMzA2IDU3LjRjMS43IDIuNyAzLjUgNC41LTIgNi40LTUuNCAyLTE4My43IDYyLjEtMTg3LjEgNjMuNi0zLjUgMS41LTYuMiAyLTEwLjYtNC41cy02Mi40LTEwNi44LTYyLjQtMTA2LjhMNTE4IDI4MC42YzQuNy0xLjUgNi4yLTIuNSA5LjIgMi4yIDIuOSA0LjggNjIuNCA4NS41IDY0LjEgODguMnptMTIuMS0xMzQuMWMtNC4yLjktNzMuNiAxOC4xLTczLjYgMTguMWwtNTYuNy03Ny44Yy0xLjYtMi4zLTIuOS00LjUgMS4xLTVzNjguNC0xMi4yIDcxLjMtMTIuOGMyLjktLjcgNS40LTEuNSA5IDMuNCAzLjYgNC45IDUyLjYgNjcgNTQuNSA2OS40IDEuOCAyLjMtMS40IDMuNy01LjYgNC43elwiXSxsYXN0Zm06WzUxMiw1MTIsW10sXCJmMjAyXCIsXCJNMjI1LjggMzY3LjFsLTE4LjgtNTFzLTMwLjUgMzQtNzYuMiAzNGMtNDAuNSAwLTY5LjItMzUuMi02OS4yLTkxLjUgMC03Mi4xIDM2LjQtOTcuOSA3Mi4xLTk3LjkgNjYuNSAwIDc0LjggNTMuMyAxMDAuOSAxMzQuOSAxOC44IDU2LjkgNTQgMTAyLjYgMTU1LjQgMTAyLjYgNzIuNyAwIDEyMi0yMi4zIDEyMi04MC45IDAtNzIuOS02Mi43LTgwLjYtMTE1LTkyLjEtMjUuOC01LjktMzMuNC0xNi40LTMzLjQtMzQgMC0xOS45IDE1LjgtMzEuNyA0MS42LTMxLjcgMjguMiAwIDQzLjQgMTAuNiA0NS43IDM1LjhsNTguNi03Yy00LjctNTIuOC00MS4xLTc0LjUtMTAwLjktNzQuNS01Mi44IDAtMTA0LjQgMTkuOS0xMDQuNCA4My45IDAgMzkuOSAxOS40IDY1LjEgNjggNzYuOCA0NC45IDEwLjYgNzkuOCAxMy44IDc5LjggNDUuNyAwIDIxLjctMjEuMSAzMC41LTYxIDMwLjUtNTkuMiAwLTgzLjktMzEuMS05Ny45LTczLjktMzItOTYuOC00My42LTE2My0xNjEuMy0xNjNDNDUuNyAxMTMuOCAwIDE2OC4zIDAgMjYxYzAgODkuMSA0NS43IDEzNy4yIDEyNy45IDEzNy4yIDY2LjIgMCA5Ny45LTMxLjEgOTcuOS0zMS4xelwiXSxcImxhc3RmbS1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYyMDNcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tOTIuMiAzMTIuOWMtNjMuNCAwLTg1LjQtMjguNi05Ny4xLTY0LjEtMTYuMy01MS0yMS41LTg0LjMtNjMtODQuMy0yMi40IDAtNDUuMSAxNi4xLTQ1LjEgNjEuMiAwIDM1LjIgMTggNTcuMiA0My4zIDU3LjIgMjguNiAwIDQ3LjYtMjEuMyA0Ny42LTIxLjNsMTEuNyAzMS45cy0xOS44IDE5LjQtNjEuMiAxOS40Yy01MS4zIDAtNzkuOS0zMC4xLTc5LjktODUuOCAwLTU3LjkgMjguNi05MiA4Mi41LTkyIDczLjUgMCA4MC44IDQxLjQgMTAwLjggMTAxLjkgOC44IDI2LjggMjQuMiA0Ni4yIDYxLjIgNDYuMiAyNC45IDAgMzguMS01LjUgMzguMS0xOS4xIDAtMTkuOS0yMS44LTIyLTQ5LjktMjguNi0zMC40LTcuMy00Mi41LTIzLjEtNDIuNS00OCAwLTQwIDMyLjMtNTIuNCA2NS4yLTUyLjQgMzcuNCAwIDYwLjEgMTMuNiA2MyA0Ni42bC0zNi43IDQuNGMtMS41LTE1LjgtMTEtMjIuNC0yOC42LTIyLjQtMTYuMSAwLTI2IDcuMy0yNiAxOS44IDAgMTEgNC44IDE3LjYgMjAuOSAyMS4zIDMyLjcgNy4xIDcxLjggMTIgNzEuOCA1Ny41LjEgMzYuNy0zMC43IDUwLjYtNzYuMSA1MC42elwiXSxsZWFucHViOls1NzYsNTEyLFtdLFwiZjIxMlwiLFwiTTM4Ni41MzkgMTExLjQ4NWwxNS4wOTYgMjQ4Ljk1NS0xMC45NzktLjI3NWMtMzYuMjMyLS44MjQtNzEuNjQgOC43ODMtMTAyLjY1NyAyNy45OTctMzEuMDE2LTE5LjIxNC02Ni40MjQtMjcuOTk3LTEwMi42NTctMjcuOTk3LTQ1LjU2NCAwLTgyLjA3IDEwLjcwNS0xMjMuNTE2IDI3LjcyM0w5My4xMTcgMTI5LjZjMjguNTQ2LTExLjgwMyA2MS40ODQtMTguMTE1IDkyLjIyNi0xOC4xMTUgNDEuMTczIDAgNzMuODM2IDEzLjE3NSAxMDIuNjU3IDQyLjU0NCAyNy43MjMtMjguMjcxIDU5LjAxMy00MS43MjEgOTguNTM5LTQyLjU0NHpNNTY5LjA3IDQ0OGMtMjUuNTI2IDAtNDcuNDg1LTUuMjE1LTcwLjU0Mi0xNS42NDUtMzQuMzEtMTUuNjQ1LTY5Ljk5My0yNC45NzgtMTA3Ljg3MS0yNC45NzgtMzguOTc3IDAtNzQuOTM0IDEyLjkwMS0xMDIuNjU3IDQwLjYyMy0yNy43MjMtMjcuNzIzLTYzLjY4LTQwLjYyMy0xMDIuNjU3LTQwLjYyMy0zNy44NzggMC03My41NjEgOS4zMzMtMTA3Ljg3MSAyNC45NzhDNTUuMjM5IDQ0Mi4yMzYgMzIuNzMxIDQ0OCA4LjMwMyA0NDhINi45M0w0OS40NzUgOTguODU5Qzg4LjcyNiA3Ni42MjYgMTM2LjQ4NiA2NCAxODEuNzc1IDY0IDIxOC44MyA2NCAyNTYuOTg0IDcxLjY4NSAyODggOTMuMDk1IDMxOS4wMTYgNzEuNjg1IDM1Ny4xNyA2NCAzOTQuMjI1IDY0YzQ1LjI4OSAwIDkzLjA0OSAxMi42MjYgMTMyLjMgMzQuODU5TDU2OS4wNyA0NDh6bS00My4zNjgtNDQuNzQxbC0zNC4wMzYtMjgwLjI0NmMtMzAuNzQyLTEzLjk5OS02Ny4yNDgtMjEuNDEtMTAxLjAwOS0yMS40MS0zOC40MjggMC03NC4zODUgMTIuMDc3LTEwMi42NTcgMzguNzAyLTI4LjI3Mi0yNi42MjUtNjQuMjI4LTM4LjcwMi0xMDIuNjU3LTM4LjcwMi0zMy43NjEgMC03MC4yNjcgNy40MTEtMTAxLjAwOSAyMS40MUw1MC4yOTggNDAzLjI1OWM0Ny4yMTEtMTkuNDg3IDgyLjg5NC0zMy40ODYgMTM1LjA0NS0zMy40ODYgMzcuNjA0IDAgNzAuODE3IDkuNjA2IDEwMi42NTcgMjkuNjQ0IDMxLjg0LTIwLjAzOCA2NS4wNTItMjkuNjQ0IDEwMi42NTctMjkuNjQ0IDUyLjE1MSAwIDg3LjgzNCAxMy45OTkgMTM1LjA0NSAzMy40ODZ6XCJdLGxlc3M6WzY0MCw1MTIsW10sXCJmNDFkXCIsXCJNNjEyLjcgMjE5YzAtMjAuNSAzLjItMzIuNiAzLjItNTQuNiAwLTM0LjItMTIuNi00NS4yLTQwLjUtNDUuMmgtMjAuNXYyNC4yaDYuM2MxNC4yIDAgMTcuMyA0LjcgMTcuMyAyMi4xIDAgMTYuMy0xLjYgMzIuNi0xLjYgNTEuNSAwIDI0LjIgNy45IDMzLjYgMjMuNiAzNy4zdjEuNmMtMTUuOCAzLjctMjMuNiAxMy4xLTIzLjYgMzcuMyAwIDE4LjkgMS42IDM0LjIgMS42IDUxLjUgMCAxNy45LTMuNyAyMi42LTE3LjMgMjIuNnYuNWgtNi4zVjM5M2gyMC41YzI3LjggMCA0MC41LTExIDQwLjUtNDUuMiAwLTIyLjYtMy4yLTM0LjItMy4yLTU0LjYgMC0xMSA2LjgtMjIuNiAyNy4zLTIzLjZ2LTI3LjNjLTIwLjUtLjctMjcuMy0xMi4zLTI3LjMtMjMuM3ptLTEwNS42IDMyYy0xNS44LTYuMy0zMC41LTEwLTMwLjUtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjEgMzAuNWMxNS44IDEzLjEgMzkuOSAyMi4xIDU5LjkgMjIuMSA0MiAwIDY0LjYtMjIuMSA2NC42LTUxcy0yMi41LTQxLTQzLTQ3Ljh6bS0zNTguOSA1OS40Yy0zLjcgMC04LjQtMy4yLTguNC0xMy4xVjExOS4xSDY1LjJjLTI4LjQgMC00MSAxMS00MSA0NS4yIDAgMjIuNiAzLjIgMzUuMiAzLjIgNTQuNiAwIDExLTYuOCAyMi42LTI3LjMgMjMuNnYyNy4zYzIwLjUuNSAyNy4zIDEyLjEgMjcuMyAyMy4xIDAgMTkuNC0zLjIgMzEtMy4yIDUzLjYgMCAzNC4yIDEyLjYgNDUuMiA0MC41IDQ1LjJoMjAuNXYtMjQuMmgtNi4zYy0xMy4xIDAtMTcuMy01LjMtMTcuMy0yMi42czEuNi0zMi4xIDEuNi01MS41YzAtMjQuMi03LjktMzMuNi0yMy42LTM3LjN2LTEuNmMxNS44LTMuNyAyMy42LTEzLjEgMjMuNi0zNy4zIDAtMTguOS0xLjYtMzQuMi0xLjYtNTEuNXMzLjctMjIuMSAxNy4zLTIyLjFIOTN2MTUwLjhjMCAzMi4xIDExIDUzLjEgNDMuMSA1My4xIDEwIDAgMTcuOS0xLjYgMjMuNi0zLjdsLTUuMy0zNC4yYy0zLjEuOC00LjYuOC02LjIuOHpNMzc5LjkgMjUxYy0xNi4zLTYuMy0zMS0xMC0zMS0yMC41IDAtNy45IDYuMy0xMi42IDE3LjktMTIuNiAxMS42IDAgMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjAuNSAzMC41YzE1LjggMTMuMSAzOS45IDIyLjEgNTkuOSAyMi4xIDQyIDAgNjQuNi0yMi4xIDY0LjYtNTEgLjEtMjguOS0yMi41LTQxLTQzLTQ3Ljh6bS0xNTUtNjguOGMtMzguNCAwLTc1LjEgMzIuMS03NC4xIDgyLjUgMCA1MiAzNC4yIDgyLjUgNzkuMyA4Mi41IDE4LjkgMCAzOS45LTYuOCA1Ni4yLTE3LjlsLTE1LjgtMjcuOGMtMTEuNiA2LjgtMjIuNiAxMC0zNC4yIDEwLTIxIDAtMzcuMy0xMC00MS41LTM0LjJIMjkwYy41LTMuNyAxLjYtMTEgMS42LTE5LjQuNi00Mi42LTIyLjYtNzUuNy02Ni43LTc1Ljd6bS0zMCA2Ni4yYzMuMi0yMSAxNS44LTMxIDMwLjUtMzEgMTguOSAwIDI2LjMgMTMuMSAyNi4zIDMxaC01Ni44elwiXSxsaW5lOls0NDgsNTEyLFtdLFwiZjNjMFwiLFwiTTI3Mi4xIDIwNC4ydjcxLjFjMCAxLjgtMS40IDMuMi0zLjIgMy4yaC0xMS40Yy0xLjEgMC0yLjEtLjYtMi42LTEuM2wtMzIuNi00NHY0Mi4yYzAgMS44LTEuNCAzLjItMy4yIDMuMmgtMTEuNGMtMS44IDAtMy4yLTEuNC0zLjItMy4ydi03MS4xYzAtMS44IDEuNC0zLjIgMy4yLTMuMkgyMTljMSAwIDIuMS41IDIuNiAxLjRsMzIuNiA0NHYtNDIuMmMwLTEuOCAxLjQtMy4yIDMuMi0zLjJoMTEuNGMxLjgtLjEgMy4zIDEuNCAzLjMgMy4xem0tODItMy4yaC0xMS40Yy0xLjggMC0zLjIgMS40LTMuMiAzLjJ2NzEuMWMwIDEuOCAxLjQgMy4yIDMuMiAzLjJoMTEuNGMxLjggMCAzLjItMS40IDMuMi0zLjJ2LTcxLjFjMC0xLjctMS40LTMuMi0zLjItMy4yem0tMjcuNSA1OS42aC0zMS4xdi01Ni40YzAtMS44LTEuNC0zLjItMy4yLTMuMmgtMTEuNGMtMS44IDAtMy4yIDEuNC0zLjIgMy4ydjcxLjFjMCAuOS4zIDEuNi45IDIuMi42LjUgMS4zLjkgMi4yLjloNDUuN2MxLjggMCAzLjItMS40IDMuMi0zLjJ2LTExLjRjMC0xLjctMS40LTMuMi0zLjEtMy4yek0zMzIuMSAyMDFoLTQ1LjdjLTEuNyAwLTMuMiAxLjQtMy4yIDMuMnY3MS4xYzAgMS43IDEuNCAzLjIgMy4yIDMuMmg0NS43YzEuOCAwIDMuMi0xLjQgMy4yLTMuMnYtMTEuNGMwLTEuOC0xLjQtMy4yLTMuMi0zLjJIMzAxdi0xMmgzMS4xYzEuOCAwIDMuMi0xLjQgMy4yLTMuMlYyMzRjMC0xLjgtMS40LTMuMi0zLjItMy4ySDMwMXYtMTJoMzEuMWMxLjggMCAzLjItMS40IDMuMi0zLjJ2LTExLjRjLS4xLTEuNy0xLjUtMy4yLTMuMi0zLjJ6TTQ0OCAxMTMuN1YzOTljLS4xIDQ0LjgtMzYuOCA4MS4xLTgxLjcgODFIODFjLTQ0LjgtLjEtODEuMS0zNi45LTgxLTgxLjdWMTEzYy4xLTQ0LjggMzYuOS04MS4xIDgxLjctODFIMzY3YzQ0LjguMSA4MS4xIDM2LjggODEgODEuN3ptLTYxLjYgMTIyLjZjMC03My03My4yLTEzMi40LTE2My4xLTEzMi40LTg5LjkgMC0xNjMuMSA1OS40LTE2My4xIDEzMi40IDAgNjUuNCA1OCAxMjAuMiAxMzYuNCAxMzAuNiAxOS4xIDQuMSAxNi45IDExLjEgMTIuNiAzNi44LS43IDQuMS0zLjMgMTYuMSAxNC4xIDguOCAxNy40LTcuMyA5My45LTU1LjMgMTI4LjItOTQuNyAyMy42LTI2IDM0LjktNTIuMyAzNC45LTgxLjV6XCJdLGxpbmtlZGluOls0NDgsNTEyLFtdLFwiZjA4Y1wiLFwiTTQxNiAzMkgzMS45QzE0LjMgMzIgMCA0Ni41IDAgNjQuM3YzODMuNEMwIDQ2NS41IDE0LjMgNDgwIDMxLjkgNDgwSDQxNmMxNy42IDAgMzItMTQuNSAzMi0zMi4zVjY0LjNjMC0xNy44LTE0LjQtMzIuMy0zMi0zMi4zek0xMzUuNCA0MTZINjlWMjAyLjJoNjYuNVY0MTZ6bS0zMy4yLTI0M2MtMjEuMyAwLTM4LjUtMTcuMy0zOC41LTM4LjVTODAuOSA5NiAxMDIuMiA5NmMyMS4yIDAgMzguNSAxNy4zIDM4LjUgMzguNSAwIDIxLjMtMTcuMiAzOC41LTM4LjUgMzguNXptMjgyLjEgMjQzaC02Ni40VjMxMmMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45VjQxNmgtNjYuNFYyMDIuMmg2My43djI5LjJoLjljOC45LTE2LjggMzAuNi0zNC41IDYyLjktMzQuNSA2Ny4yIDAgNzkuNyA0NC4zIDc5LjcgMTAxLjlWNDE2elwiXSxcImxpbmtlZGluLWluXCI6WzQ0OCw1MTIsW10sXCJmMGUxXCIsXCJNMTAwLjMgNDgwSDcuNFYxODAuOWg5Mi45VjQ4MHpNNTMuOCAxNDAuMUMyNC4xIDE0MC4xIDAgMTE1LjUgMCA4NS44IDAgNTYuMSAyNC4xIDMyIDUzLjggMzJjMjkuNyAwIDUzLjggMjQuMSA1My44IDUzLjggMCAyOS43LTI0LjEgNTQuMy01My44IDU0LjN6TTQ0OCA0ODBoLTkyLjdWMzM0LjRjMC0zNC43LS43LTc5LjItNDguMy03OS4yLTQ4LjMgMC01NS43IDM3LjctNTUuNyA3Ni43VjQ4MGgtOTIuOFYxODAuOWg4OS4xdjQwLjhoMS4zYzEyLjQtMjMuNSA0Mi43LTQ4LjMgODcuOS00OC4zIDk0IDAgMTExLjMgNjEuOSAxMTEuMyAxNDIuM1Y0ODB6XCJdLGxpbm9kZTpbNDQ4LDUxMixbXSxcImYyYjhcIixcIk00MzcuNCAyMjYuM2MtLjMtLjktLjktMS40LTEuNC0ybC03MC0zOC42Yy0uOS0uNi0yLS42LTMuMSAwbC01OC45IDM2Yy0uOS42LTEuNCAxLjctMS40IDIuNmwtLjkgMzEuNC0yNC0xNmMtLjktLjYtMi4zLS42LTMuMSAwTDI0MCAyNjAuOWwtMS40LTM1LjFjMC0uOS0uNi0yLTEuNC0yLjNsLTM2LTI0LjMgMzMuNy0xNy40YzEuMS0uNiAxLjctMS43IDEuNy0yLjlsLTUuNy0xMzIuM2MwLS45LS45LTItMS43LTIuNkwxMzguNi4zYy0uOS0uMy0xLjctLjMtMi4zLS4zTDEyLjYgMzguNmMtMS40LjYtMi4zIDItMiAzLjdMMzggMTc1LjRjLjkgMy40IDM0IDI3LjQgMzguNiAzMC45bC0yNi45IDEyLjljLTEuNC45LTIgMi4zLTEuNyAzLjRsMjAuNiAxMDAuM2MuNiAyLjkgMjMuNyAyMy4xIDI3LjEgMjYuM2wtMTcuNCAxMC42Yy0uOS42LTEuNyAyLTEuNCAzLjEgMS40IDcuMSAxNS40IDc3LjcgMTYuOSA3OS4xbDY1LjEgNjkuMWMuNi42IDEuNC42IDIuMy45LjYgMCAxLjEtLjMgMS43LS42bDgzLjctNjYuOWMuOS0uNiAxLjEtMS40IDEuMS0yLjNsLTItNDYgMjggMjMuN2MxLjEuOSAyLjkuOSA0IDBsNjYuOS01My40Yy45LS42IDEuMS0xLjQgMS4xLTIuM2wyLjMtMzMuNCAyMC4zIDE0YzEuMS45IDIuNi45IDMuNyAwbDU0LjYtNDMuN2MuNi0uMyAxLjEtMS4xIDEuMS0yIC45LTYuNSAxMC4zLTcwLjggOS43LTcyLjh6bS0yMDQuOCA0LjhsNCA5Mi42LTkwLjYgNjEuMi0xNC05Ni42IDEwMC42LTU3LjJ6bS03LjctMTgwbDUuNCAxMjYtMTA2LjYgNTUuNEwxMDQgOTcuN2wxMjAuOS00Ni42ek00NCAxNzMuMUwxOCA0OGw3OS43IDQ5LjQgMTkuNCAxMzIuOUw0NCAxNzMuMXptMzAuNiAxNDcuOEw1NS43IDIzMGw3MCA1OC4zIDEzLjcgOTMuNC02NC44LTYwLjh6bTI0LjMgMTE3LjdsLTEzLjctNjcuMSA2MS43IDYwLjkgOS43IDY3LjQtNTcuNy02MS4yem02NC41IDY0LjVsLTEwLjYtNzAuOSA4NS43LTYxLjQgMy4xIDcwLTc4LjIgNjIuM3ptODItMTE1LjFjMC0zLjQuOS0yMi45LTItMjUuMWwtMjQuMy0yMCAyMi4zLTE0LjljMi4zLTEuNyAxLjEtNS43IDEuMS04bDI5LjQgMjIuNi42IDY4LjMtMjcuMS0yMi45em05NC4zLTI1LjRsLTYwLjkgNDguNi0uNi02OC42IDY1LjctNDYuOS00LjIgNjYuOXptMjcuNy0yNS43bC0xOS4xLTEzLjQgMi0zNGMuMy0uOS0uMy0yLTEuMS0yLjZMMzA4IDI1OS43bC42LTMwIDY0LjYgNDAuNi01LjggNjYuNnptNTQuNi0zOS44bC00OC4zIDM4LjMgNS43LTY1LjEgNTEuMS0zNi42LTguNSA2My40elwiXSxsaW51eDpbNDQ4LDUxMixbXSxcImYxN2NcIixcIk0xOTYuMSAxMjMuNmMtLjItMS40IDEuOS0yLjMgMy4yLTIuOSAxLjctLjcgMy45LTEgNS41LS4xLjQuMi44LjcuNiAxLjEtLjQgMS4yLTIuNCAxLTMuNSAxLjYtMSAuNS0xLjggMS43LTMgMS43LTEgLjEtMi43LS40LTIuOC0xLjR6bTI0LjctLjNjMSAuNSAxLjggMS43IDMgMS43IDEuMSAwIDIuOC0uNCAyLjktMS41LjItMS40LTEuOS0yLjMtMy4yLTIuOS0xLjctLjctMy45LTEtNS41LS4xLS40LjItLjguNy0uNiAxLjEuMyAxLjMgMi4zIDEuMSAzLjQgMS43em0yMTQuNyAzMTAuMmMtLjUgOC4yLTYuNSAxMy44LTEzLjkgMTguMy0xNC45IDktMzcuMyAxNS44LTUwLjkgMzIuMmwtMi42LTIuMiAyLjYgMi4yYy0xNC4yIDE2LjktMzEuNyAyNi42LTQ4LjMgMjcuOS0xNi41IDEuMy0zMi02LjMtNDAuMy0yM3YtLjFjLTEuMS0yLjEtMS45LTQuNC0yLjUtNi43LTIxLjUgMS4yLTQwLjItNS4zLTU1LjEtNC4xLTIyIDEuMi0zNS44IDYuNS00OC4zIDYuNi00LjggMTAuNi0xNC4zIDE3LjYtMjUuOSAyMC4yLTE2IDMuNy0zNi4xIDAtNTUuOS0xMC40bDEuNi0zLTEuNiAzYy0xOC41LTkuOC00Mi04LjktNTkuMy0xMi41LTguNy0xLjgtMTYuMy01LTIwLjEtMTIuMy0zLjctNy4zLTMtMTcuMyAyLjItMzEuNyAxLjctNS4xLjQtMTIuNy0uOC0yMC44LS42LTMuOS0xLjItNy45LTEuMi0xMS44IDAtNC4zLjctOC41IDIuOC0xMi40IDQuNS04LjUgMTEuOC0xMi4xIDE4LjUtMTQuNSA2LjctMi40IDEyLjgtNCAxNy04LjMgNS4yLTUuNSAxMC4xLTE0LjQgMTYuNi0yMC4yLTIuNi0xNy4yLjItMzUuNCA2LjItNTMuMyAxMi42LTM3LjkgMzkuMi03NC4yIDU4LjEtOTYuNyAxNi4xLTIyLjkgMjAuOC00MS4zIDIyLjUtNjQuN0MxNTggMTAzLjQgMTMyLjQtLjIgMjM0LjggMGM4MC45LjEgNzYuMyA4NS40IDc1LjggMTMxLjMtLjMgMzAuMSAxNi4zIDUwLjUgMzMuNCA3MiAxNS4yIDE4IDM1LjEgNDQuMyA0Ni41IDc0LjQgOS4zIDI0LjYgMTIuOSA1MS44IDMuNyA3OS4xIDEuNC41IDIuOCAxLjIgNC4xIDIgMS40LjggMi43IDEuOCA0IDIuOSA2LjYgNS42IDguNyAxNC4zIDEwLjUgMjIuNCAxLjkgOC4xIDMuNiAxNS43IDcuMiAxOS43IDExLjEgMTIuNCAxNS45IDIxLjUgMTUuNSAyOS43ek0yMjAuOCAxMDkuMWMzLjYuOSA4LjkgMi40IDEzIDQuNC0yLjEtMTIuMiA0LjUtMjMuNSAxMS44LTIzIDguOS4zIDEzLjkgMTUuNSA5LjEgMjcuMy0uOCAxLjktMi44IDMuNC0zLjkgNC42IDYuNyAyLjMgMTEgNC4xIDEyLjYgNC45IDcuOS05LjUgMTAuOC0yNi4yIDQuMy00MC40LTkuOC0yMS40LTM0LjItMjEuOC00NCAuNC0zLjIgNy4yLTMuOSAxNC45LTIuOSAyMS44em0tNDYuMiAxOC44YzcuOC01LjcgNi45LTQuNyA1LjktNS41LTgtNi45LTYuNi0yNy40IDEuOC0yOC4xIDYuMy0uNSAxMC44IDEwLjcgOS42IDE5LjYgMy4xLTIuMSA2LjctMy42IDEwLjItNC42IDEuNy0xOS4zLTktMzMuNS0xOS4xLTMzLjUtMTguOSAwLTI0IDM3LjUtOC40IDUyLjF6bS05LjQgMjAuOWMxLjUgNC45IDYuMSAxMC41IDE0LjcgMTUuMyA3LjggNC42IDEyIDExLjUgMjAgMTUgMi42IDEuMSA1LjcgMS45IDkuNiAyLjEgMTguNCAxLjEgMjcuMS0xMS4zIDM4LjItMTQuOSAxMS43LTMuNyAyMC4xLTExIDIyLjctMTguMSAzLjItOC41LTIuMS0xNC43LTEwLjUtMTguMi0xMS4zLTQuOS0xNi4zLTUuMi0yMi42LTkuMy0xMC4zLTYuNi0xOC44LTguOS0yNS45LTguOS0xNC40IDAtMjMuMiA5LjgtMjcuOSAxNC4yLS41LjUtNy45IDUuOS0xNC4xIDEwLjUtNC4yIDMuMy01LjYgNy40LTQuMiAxMi4zem0tMzMuNSAyNTIuOEwxMTIuMSAzNjZjLTYuOC05LjItMTMuOC0xNC44LTIxLjktMTYtNy43LTEuMi0xMi42IDEuNC0xNy43IDYuOS00LjggNS4xLTguOCAxMi4zLTE0LjMgMTgtNy44IDYuNS05LjMgNi4yLTE5LjYgOS45LTYuMyAyLjItMTEuMyA0LjYtMTQuOCAxMS4zLTIuNyA1LTIuMSAxMi4yLS45IDIwIDEuMiA3LjkgMyAxNi4zLjYgMjMuOXYuMmMtNSAxMy43LTUgMjEuNy0yLjYgMjYuNCA3LjkgMTUuNCA0Ni42IDYuMSA3Ni41IDIxLjkgMzEuNCAxNi40IDcyLjYgMTcuMSA3NS4zLTE4IDIuMS0yMC41LTMxLjUtNDktNDEtNjguOXptMTUzLjkgMzUuOGMzLjItMTEgNi4zLTIxLjMgNi44LTI5IC44LTE1LjIgMS42LTI4LjcgNC40LTM5LjkgMy4xLTEyLjYgOS4zLTIzLjEgMjEuNC0yNy4zIDIuMy0yMS4xIDE4LjctMjEuMSAzOC4zLTEyLjUgMTguOSA4LjUgMjYgMTYgMjIuOCAyNi4xIDEgMCAyLS4xIDQuMiAwIDUuMi0xNi45LTE0LjMtMjgtMzAuNy0zNC44IDIuOS0xMiAyLjQtMjQuMS0uNC0zNS43LTYtMjUuMy0yMi42LTQ3LjgtMzUuMi01OS0yLjMtLjEtMi4xIDEuOSAyLjYgNi41IDExLjYgMTAuNyAzNy4xIDQ5LjIgMjMuMyA4NC45LTMuOS0xLTcuNi0xLjUtMTAuOS0xLjQtNS4zLTI5LjEtMTcuNS01My4yLTIzLjYtNjQuNi0xMS41LTIxLjQtMjkuNS02NS4zLTM3LjItOTUuNy00LjUgNi40LTEyLjQgMTEuOS0yMi4zIDE1LTQuNyAxLjUtOS43IDUuNS0xNS45IDktMTMuOSA4LTMwIDguOC00Mi40LTEuMi00LjUtMy42LTgtNy42LTEyLjYtMTAuMy0xLjYtLjktNS4xLTMuMy02LjItNC4xLTIgMzcuOC0yNy4zIDg1LjMtMzkuMyAxMTIuNy04LjMgMTkuNy0xMy4yIDQwLjgtMTMuOCA2MS41LTIxLjgtMjkuMS01LjktNjYuMyAyLjYtODIuNCA5LjUtMTcuNiAxMS0yMi41IDguNy0yMC44LTguNiAxNC0yMiAzNi4zLTI3LjIgNTkuMi0yLjcgMTEuOS0zLjIgMjQgLjMgMzUuMiAzLjUgMTEuMiAxMS4xIDIxLjUgMjQuNiAyOS45IDAgMCAyNC44IDE0LjMgMzguMyAzMi41IDcuNCAxMCA5LjcgMTguNyA3LjQgMjQuOS0yLjUgNi43LTkuNiA4LjktMTYuNyA4LjkgNC44IDYgMTAuMyAxMyAxNC40IDE5LjYgMzcuNiAyNS43IDgyLjIgMTUuNyAxMTQuMy03LjJ6TTQxNSA0MDguNWMtMTAtMTEuMy03LjItMzMuMS0xNy4xLTQxLjYtNi45LTYtMTMuNi01LjQtMjIuNi01LjEtNy43IDguOC0yNS44IDE5LjYtMzguNCAxNi4zLTExLjUtMi45LTE4LTE2LjMtMTguOC0yOS41LS4zLjItLjcuMy0xIC41LTcuMSAzLjktMTEuMSAxMC44LTEzLjcgMjEuMS0yLjUgMTAuMi0zLjQgMjMuNS00LjIgMzguNy0uNyAxMS44LTYuMiAyNi40LTkuOSA0MC42LTMuNSAxMy4yLTUuOCAyNS4yLTEuMSAzNi4zIDcuMiAxNC41IDE5LjUgMjAuNCAzMy43IDE5LjMgMTQuMi0xLjEgMzAuNC05LjggNDMuNi0yNS41IDIyLTI2LjYgNjIuMy0yOS43IDYzLjItNDYuNS4zLTUuMS0zLjEtMTMtMTMuNy0yNC42ek0xNzMuMyAxNDguN2MyIDEuOSA0LjcgNC41IDggNy4xIDYuNiA1LjIgMTUuOCAxMC42IDI3LjMgMTAuNiAxMS42IDAgMjIuNS01LjkgMzEuOC0xMC44IDQuOS0yLjYgMTAuOS03IDE0LjgtMTAuNCAzLjktMy40IDUuOS02LjMgMy4xLTYuNi0yLjgtLjMtMi42IDIuNi02IDUuMS00LjQgMy4yLTkuNyA3LjQtMTMuOSA5LjgtNy40IDQuMi0xOS41IDEwLjItMjkuOSAxMC4yLTEwLjQgMC0xOC43LTQuOC0yNC45LTkuNy0zLjEtMi41LTUuNy01LTcuNy02LjktMS41LTEuNC0xLjktNC42LTQuMy00LjktMS40LS4xLTEuOCAzLjcgMS43IDYuNXpcIl0sbHlmdDpbNTEyLDUxMixbXSxcImYzYzNcIixcIk0wIDgxLjFoNzcuOHYyMDguN2MwIDMzLjEgMTUgNTIuOCAyNy4yIDYxLTEyLjcgMTEuMS01MS4yIDIwLjktODAuMi0yLjhDNy44IDMzNCAwIDMxMC43IDAgMjg5VjgxLjF6bTQ4NS45IDE3My41di0yMmgyMy44di03Ni44aC0yNi4xYy0xMC4xLTQ2LjMtNTEuMi04MC43LTEwMC4zLTgwLjctNTYuNiAwLTEwMi43IDQ2LTEwMi43IDEwMi43VjM1N2MxNiAyLjMgMzUuNC0uMyA1MS43LTE0IDE3LjEtMTQgMjQuOC0zNy4yIDI0LjgtNTl2LTYuN2gzOC44di03Ni44aC0zOC44di0yMy4zYzAtMzQuNiA1Mi4yLTM0LjYgNTIuMiAwdjc3LjFjMCA1Ni42IDQ2IDEwMi43IDEwMi43IDEwMi43di03Ni41Yy0xNC41IDAtMjYuMS0xMS43LTI2LjEtMjUuOXptLTI5NC4zLTk5djExM2MwIDE1LjQtMjMuOCAxNS40LTIzLjggMHYtMTEzSDkxdjEzMi43YzAgMjMuOCA4IDU0IDQ1IDYzLjkgMzcgOS44IDU4LjItMTAuNiA1OC4yLTEwLjYtMi4xIDEzLjQtMTQuNSAyMy4zLTM0LjkgMjUuMy0xNS41IDEuNi0zNS4yLTMuNi00NS03Ljh2NzAuM2MyNS4xIDcuNSA1MS41IDkuOCA3Ny42IDQuNyA0Ny4xLTkuMSA3Ni44LTQ4LjQgNzYuOC0xMDAuOFYxNTUuMWgtNzcuMXYuNXpcIl0sbWFnZW50bzpbNDQ4LDUxMixbXSxcImYzYzRcIixcIk00NDUuNyAxMjcuOVYzODRsLTYzLjQgMzYuNVYxNjQuN0wyMjMuOCA3My4xIDY1LjIgMTY0LjdsLjQgMjU1LjlMMi4zIDM4NFYxMjguMUwyMjQuMiAwbDIyMS41IDEyNy45ek0yNTUuNiA0MjAuNUwyMjQgNDM4LjlsLTMxLjgtMTguMnYtMjU2bC02My4zIDM2LjYuMSAyNTUuOSA5NC45IDU0LjkgOTUuMS01NC45di0yNTZsLTYzLjQtMzYuNnYyNTUuOXpcIl0sbWFpbGNoaW1wOls0MjgsNTEyLFtdLFwiZjU5ZVwiLFwiTTQyNi41NiAzMjMuNzJjLTMuMDktNi41OS04Ljk3LTExLjEzLTE2LjM1LTEyLjg4LTIuNDctMTEuMjctNS44OC0xNi44LTYuMTktMTcuNjMgMS4zLTEuNDggMi41Ni0yLjk3IDIuODQtMy4zMiAxMC40Mi0xMi45MyAzLjYyLTMxLjg2LTE0LjE5LTM2LjMzLTEwLjAyLTkuNjQtMTkuMDktMTQuMTctMjYuNTQtMTcuOS03LjE0LTMuNTctNC4yOS0yLjE3LTEwLjk5LTUuMTktMS43OC04LjcxLTIuMzctMjguOTctNS4yLTQzLjE5LTIuNTQtMTIuNzktNy42Ni0yMi4wNi0xNS41Ni0yOC4xNS0zLjE2LTYuODQtNy41OS0xMy43NC0xMi45My0xOC44MSAyNC44NC0zOC4wOCAzMS4zOC03NS42OSAxMy4xOS05NS4zOS04LjEtOC43Ny0yMC4xMy0xMi45My0zNC41Mi0xMi45My0yMC4yNiAwLTQ1LjE4IDguMjYtNzAuMzQgMjMuNTQgMCAwLTE2LjM4LTEzLjE4LTE2LjczLTEzLjQ2LTcwLjA4LTU1LjE5LTI2OC4yOCAxODguNy0xOTguMzIgMjQybDE4LjA2IDEzLjhjLTExLjM0IDMxLjU0IDQuNDMgNjkuMTQgMzcuMjkgODEuMjEgNy4yNiAyLjY3IDE1LjE0IDMuOTcgMjMuMzEgMy41MSAwIDAgNTMuMDkgOTcuMzYgMTY1LjEgOTcuMzkgMTI5LjU4LjA0IDE2Mi41NS0xMjYuNzIgMTYyLjktMTI3Ljg2IDAgLjAxIDEwLjUtMTUuNTEgNS4xNy0yOC40MXpNMjAuMTIgMjY3Ljk1Yy0xNC4yLTIzLjk2IDEwLjUxLTczLjE5IDI4LjA5LTEwMS4xN0M5MS42NiA5Ny42MyAxNjMuOTggNDMuMDYgMTk2LjgyIDUwLjg1bDkuMDMtMy40NmMuMDMuMDMgMjQuNjcgMjAuODUgMjQuNyAyMC44NyAxNi45Ny0xMC4xOSAzOC41OC0yMC41NyA1OC44LTIyLjY0LTEyLjMgMi43Ny0yNy4yOSA5LjE1LTQ1LjA1IDIwLjAxLS40My4yNS00Mi4wMiAyOC4zMi02Ny40MyA1My41Mi0xMy44NSAxMy43My02OS40NSA4MC40MS02OS40IDgwLjM1IDEwLjE2LTE5LjIzIDE2Ljg2LTI4LjY3IDMyLjk0LTQ4LjkgOS4xLTExLjQ0IDE4LjgxLTIyLjU3IDI4Ljc0LTMyLjg0IDQuNjEtNC43NyA5LjI4LTkuMzYgMTMuOTUtMTMuNzEgMy4yMS0yLjk5IDYuNDQtNS44NyA5LjY1LTguNjIgMS40OC0xLjI3IDIuOTYtMi41IDQuNDMtMy43MWwuMDEtLjAxTDE2NC42IDY0LjhsMS43MiAxMi4wNiAyMy42OSAyMC44N3MtMjAuOTYgMTQuMTEtMzEuMzkgMjMuMDFjLTQxLjc5IDM1LjY2LTgyLjggOTAuNC05OC4wNiAxNDMuNjlsLjczLS4wM2MtNy42IDQuMTktMTUuMTQgMTAuOTEtMjEuNzMgMjAuMDUtLjE2LS4wNC0xNy4wNC0xMi40My0xOS40NC0xNi41em02OS4xMSAxMDAuMDljLTI1LjAzIDAtNDUuMzMtMjEuMzctNDUuMzMtNDcuNzIgMC0yNi4zNiAyMC4yOS00Ny43MiA0NS4zMy00Ny43MiA2LjQ5IDAgMTIuNjYgMS40NCAxOC4yNCA0LjAyIDAgMCA5LjYzIDQuODYgMTIuMzQgMjcuODEgMi44Mi03LjE3IDQuMjQtMTMuMDYgNC4yNC0xMy4wNiAzLjIzIDkuODggNC44OCAyMC4yNiA0LjIzIDMwLjc2IDIuNjgtMy41NiA1LjU1LTEwLjI3IDUuNTUtMTAuMjcgNSAyOS4zMy0xNi40IDU2LjE4LTQ0LjYgNTYuMTh6bTU1LjgtMTY4LjUzczE5LjQ5LTM3LjA2IDYyLjMzLTYxLjU3Yy0zLjE5LS41MS0xMC45OS40OC0xMi4zNi42NCA3Ljc4LTYuNjkgMjIuMjQtMTEuMTYgMzIuMjMtMTMuMTktMi45Mi0xLjg2LTkuODktMi4zMy0xMy4zNC0yLjQyLTEuMDItLjAzLTEuMDEtLjAyLTIuMjIuMDMgOS40LTUuMjUgMjYuODItOC4zNCA0Mi42NS01LjU1LTEuOTktMi42NC02LjUtNC41Ny05LjY3LTUuNTEtLjI4LS4wOC0xLjUyLS4zOS0xLjUyLS4zOWwxLjE5LS4yOGM5LjU0LTEuODQgMjAuNjkuMTUgMjkuNSAzLjY5LTEtMi4zMi0zLjQ1LTUuMDMtNS4yOS02Ljc0LS4xOS0uMTgtMS4yOS0uOTctMS4yOS0uOTcgOS4yMiAxLjkxIDE4LjA2IDUuOTQgMjQuNzEgMTAuNS0uOS0xLjc1LTMuMTQtNC42OS00LjY5LTYuMjkgOC44MSAyLjUyIDE4LjcxIDguODEgMjIuOTUgMTcuODIuMS4yLjM3Ljk0LjQgMS4wMy0xNi43LTEyLjg0LTY1LjQ0LTkuMi0xMTQuMjQgMjIuNDItMjIuMzMgMTQuNDgtMzguNzEgMzAuMzItNTEuMzQgNDYuNzh6bTI2My4zMiAxNDYuMzRjLS41OSAxLjE1LTYuNzMgMzQuNC00MS44NiA2Mi4wMS00NC4zNyAzNC44Ni0xMDIuNjYgMzEuMzMtMTI0LjY3IDExLjgtMTEuNzYtMTEtMTYuODUtMjYuNzMtMTYuODUtMjYuNzNzLTEuMzMgOC44Ny0xLjU2IDEyLjM1Yy04Ljg3LTE1LjA5LTguMTItMzMuNTItOC4xMi0zMy41MnMtNC43MyA4LjgzLTYuOSAxMy43N2MtNi41My0xNi42Mi0zLjE2LTMzLjc4LTMuMTYtMzMuNzhsLTUuMTYgNy43cy0yLjQyLTE4LjgxIDMuNTItMzQuNDdjNi4zNi0xNi43NCAxOC42OC0yOC45IDIxLjExLTMwLjQyLTkuMzUtMi45Ny0yMC4xMi0xMS40OS0yMC4xNC0xMS41MSAwIDAgNC4yOC4yOCA3LjI2LS40IDAgMC0xOC45LTEzLjU0LTIyLjIyLTM0LjI2IDIuNzQgMy4zOCA4LjQ5IDcuMjEgOC40OSA3LjIxLTEuODYtNS40Mi0yLjk5LTE3LjQ5LTEuMjUtMjkuMzZsLjAxLS4wMWMzLjU4LTIyLjY4IDIyLjI3LTM3LjQ1IDQzLjQ0LTM3LjI3IDIyLjU0LjIgMzcuNjUgNC45MyA1Ni41NS0xMi41IDQtMy42OSA3LjE5LTYuODcgMTIuODEtOC4xMS41OS0uMTMgMi4wNi0uNzUgNS4wNy0uNzUgMy4wNSAwIDUuOTguNjkgOC42NyAyLjI5IDEwLjI1IDYuMSAxMi40NiAyMi4wMSAxMy41NiAzMy42OCA0LjA3IDQzLjI4IDIuNDMgMzUuNTcgMTkuOTQgNDQuNDkgOC4zNiA0LjI1IDE3Ljc0IDguMjkgMjguNDMgMTkuNzIuMDMuMDMuMDguMDkuMDguMDloLjEzYzkuMDEuMjIgMTMuNjUgNy4zMSA5LjUgMTIuNDctMzAuMjMgMzYuMS03Mi40NiA1My4zOS0xMTkuNTEgNTQuODQtMS45NC4wNS02LjMyLjE1LTYuMzQuMTUtMTkuMDEuNTgtMjUuMTkgMjUuMTYtMTMuMjcgMzkuOTUgNy41NCA5LjM1IDIyLjAzIDEyLjQyIDMzLjk3IDEyLjQ2bC4xNy0uMDZjNTEuNDUgMS4wNCAxMDMuMTQtMzUuMzcgMTEyLjA3LTU1LjQ0LjA2LS4xNS42MS0xLjQyLjYxLTEuNDItMi4wNyAyLjQzLTUyLjE4IDQ5LjYxLTExMy4wOCA0Ny45IDAgMC02LjY2LS4xNC0xMi45My0xLjYtOC4yNy0xLjkyLTE0LjU1LTUuNTYtMTYuOTUtMTMuOCA1LjA1IDEuMDEgMTEuNDUgMS42NiAxOC44NyAxLjY2IDQzLjk2IDAgNzUuNjMtMTkuOTggNzIuMzMtMjAuMjUtLjEzIDAtLjI2LjAzLS40OC4wOC01LjEzIDEuMTktNTcuOTcgMjEuNjYtOTEuMzcgMTEuMTYuMDgtMS4wMi4yNC0yLjAxLjQ4LTIuOSAyLjk3LTkuOTUgOC4yNS04LjU2IDE2Ljc5LTguOTMgMzAuNDgtMS4wMSA1NS4wNy04LjY4IDczLjUtMTcuNDMgMTkuNjUtOS4zMyAzNC42My0yMS4zNSA0MC4wMy0yNy40MiA3IDExLjc5IDYuOTYgMjYuOTIgNi45NiAyNi45MnMyLjc0LS45NiA2LjM4LS45NmMxMS4zOC4wMSAxMy43MyAxMC4yMyA1LjA5IDIwLjZ6bS0xNDkuMjkgMTMuN2MwLS4wNS0uMDEtLjEtLjAxLS4xNS4wMS4wNS4wMS4xLjAxLjE1em0tLjAxLS4yMWMtLjAxLS4xMy0uMDEtLjI2LS4wMi0uMzktLjAyLS42NS0uMDMtMS4zMyAwLTIuMDItLjAyLjc0LS4wMiAxLjQyIDAgMi4wMi4wMS4xMy4wMS4yNy4wMi4zOXptLjEyIDEuNDZjMCAuMDIgMCAuMDQuMDEuMDYgMC0uMDIgMC0uMDQtLjAxLS4wNnptLjAyLjEyYy4yIDEuNTguNTEgMi4zMS41NSAyLjQtLjIzLS40OS0uNDItMS4zNC0uNTUtMi40ek0xOTMuOTYgNTkuNjhsMi44Ny04LjgzIDQuODggMTcuNzItNi4wMy0xLjk1LTEuNzItNi45NHptMjIuMzggMTcuNzJsLTMuNjItMTIuNTkgOS45NyA4LjM2Yy0yLjI0IDEuNDQtNC4zNiAyLjg2LTYuMzUgNC4yM3ptNDIuNzEgMjgxLjk0Yy0uMDEtLjEzLS4wMS0uMjYtLjAyLS4zOS4wMS4xMy4wMS4yNy4wMi4zOXptLS4wMS0uMzljLS4wMi0uNjUtLjAzLTEuMzMgMC0yLjAyLS4wMy43NS0uMDMgMS40MiAwIDIuMDJ6bS4wMi42YzAtLjA1LS4wMS0uMS0uMDEtLjE1bS4xMyAxLjQ2YzAtLjAyIDAtLjA0LS4wMS0uMDZtLjAyLjEyYy4yIDEuNTguNTEgMi4zMS41NSAyLjQtLjIzLS40OS0uNDItMS4zNC0uNTUtMi40em01Mi4xLTEzOC42MWMtLjA3LTMuMzYuNDctOC45MiAzLjYzLTkuOTVoLjAxYzUuNDEtMS44OCAxMi41OCAxMS45OCAxMi45MSAyNC4yOC00LjI4LTIuMTQtOS4zLTMuMDUtMTQuNDctMi42LTEuMy0zLjk3LTEuOTItNy43LTIuMDgtMTEuNzN6TTIwNS4zOCA4NS4yN2wtMTMuNTktMTEuMzggMjAuNTcgNi4yOGMtMi42NSAxLjg4LTUgMy42LTYuOTggNS4xem0yNy43IDE2Ni45NGMtMy40MSAxLjMtNS44MyAyLjMxLTcgMi4xNC0xLjg5LS4yOC0uMDYtMy43NSA0LjA4LTcuMTEgOC4zMy02LjY0IDE5Ljc2LTguNyAyOS41My01LjA3IDQuMjggMS41NyA5LjA4IDQuNzIgMTEuNiA4LjM5Ljk1IDEuMzkgMS4yMSAyLjQ0LjgyIDIuODgtLjc3LjktMy41MS0uMzEtNy41NS0xLjg5LTEwLjM1LTMuODYtMTcuOTgtNC40NS0zMS40OC42NnptMTQuNTUgMTQuNTNjLTIuMzEuOTQtMy44MSAxLjY2LTQuNDIgMS4xNy0uNjItLjQ4LS4wMS0yLjQyIDIuMTUtNC41MSAxLjg4LTEuODEgMy44My0yLjgzIDYuMDctMy43Ny4zNS0uMTUuNzItLjI4IDEuMS0uMzggMS4wNC0uMjggMi4wOS0uNjMgMy4yMy0uOCA5LjEyLTEuNTUgMTUuOCAzLjUxIDE0LjkzIDQuOTgtLjM5LjY5LTIuMDguNTMtNC42LjM2LTUuMjMtLjM2LTEwLjcxLS4yNy0xOC40NiAyLjk1ek02MC44NiAzMjMuMTJ6bTI0LjMtMjUuNzhjLTEuODUuMzktLjgxLjE3LTIuNjQuNjhhNyA3IDAgMCAwLS43Ny4yNWMtLjU4LjI3LTEuMTEuNDUtMS42Mi43My0uNDMuMjQtNC4wNyAxLjg2LTcuMDMgNS40OC0zLjk5IDQuOTUtNS40NCAxMS40My01LjE5IDE3LjY3LjI0IDYuMDYgMi4wMiA5LjQxIDIuMzUgMTAuMjMgMS4zOCAyLjk2LTEuODUgMy41Ny00Ljc5LjM5bC0uMDEtLjAxYy0yLjM1LTIuNDktMy44Ni02LjI5LTQuNi05LjY2LTIuOTgtMTMuOTUgMy4yNC0yNy45NyAxNy42MS0zMy41Ny44LS4zMiAxLjc0LS41MSAyLjUtLjczaC0uMDFjMS40Ny0uNDQgNi43Mi0xLjUgMTIuMDctLjY3IDUuODcuOTEgMTEuMDQgMy44NSAxNC4zMyA3LjY3bC4wMS4wMWMyLjUzIDIuODcgNC40MyA2LjkyIDQuMDkgMTAuNTN2LjAxYy0uMTMgMS41LS43OSAzLjY1LTIuMTQgNC4yMS0uNS4yMS0xLjAxLjEtMS4zNi0uMjUtLjk4LS45Ni0uMjItMi45My0yLjYtNi4zLTMuMTctNC40Ny0xMC4zMS04Ljc2LTIwLjItNi42N3ptMzAuMjggMzEuMTdjMS44OCAxMC44Mi02IDIwLjUtMTUuNTIgMjAuNy02LjY3LjE1LTEwLjMxLTQuMDItOS42Ni00LjkzLjMtLjQzIDEuMzItLjI0IDIuODgtLjAxIDguNSAxLjMyIDEzLjY2LTMuODYgMTQuOS05LjI5LjAyLS4wOS4zNS0xLjU0LjM0LTIuNTQuMDctLjg4LS4wMy0xLjc2LS4xNi0yLjU2LTEtNS42Mi03LjQ1LTYuNjgtMTEuNi0xMS4xNS0zLjcyLTQuMDQtMi45OS05LjIyLS42NS0xMS43MSAyLjgxLTIuNzcgNi44My0xLjc2IDYuNzgtLjc4IDAgLjUyLS45Ny45MS0yLjE3IDEuNzQtMS41NiAxLjEtMS43NyAyLjE2LTEuMzcgMy45OC4yNiAxIC43MSAxLjY1IDEuNjggMi40MiAzLjQ4IDIuNzYgMTIuODUgNC43IDE0LjU1IDE0LjEzem0yMTIuODctODEuNDdjMi41OC40IDQuMjIgMy41OSAzLjY3IDcuMTMtLjU1IDMuNTQtMy4wOSA2LjA4LTUuNjcgNS42Ny0yLjU4LS40LTQuMjItMy41OS0zLjY3LTcuMTMuNTYtMy41MyAzLjA5LTYuMDcgNS42Ny01LjY3em0tMjguMzMgMTAuMzFjMS40Mi0yLjU5IDUuNDQtMy4xMSA4Ljk5LTEuMTYgMy41NSAxLjk0IDUuMjcgNS42MiAzLjg2IDguMi0xLjQyIDIuNTktNS40NCAzLjExLTguOTkgMS4xNi0zLjU1LTEuOTQtNS4yOC01LjYxLTMuODYtOC4yelwiXSxtYW5kYWxvcmlhbjpbMzkwLDUxMixbXSxcImY1MGZcIixcIk0yMDMuMjggNTExLjg5Yy0uOTgtMy4yNi0xLjY5LTE1LjgzLTEuMzktMjQuNTguNTUtMTUuODkuOTgtMjQuNzIgMS40LTI4Ljc2LjY0LTYuMiAyLjg3LTIwLjcyIDMuMjgtMjEuMzguNi0uOTYuNC0yNy44Ny0uMjQtMzMuMTMtLjMxLTIuNTgtLjYzLTExLjktLjY5LTIwLjczLS4xMy0xNi40Ny0uNTMtMjAuMTItMi43My0yNC43Ni0xLjEtMi4zMi0xLjIzLTMuODQtLjk5LTExLjQzLjE2LTQuODEgMC0xMC41My0uMzQtMTIuNzEtMi4wNS0xMi45Ny0zLjQ2LTI3LjctMy4yNS0zMy45LjIxLTYuMTIuNDMtNy4xNSAyLjA2LTkuNjcgMy4wNS00LjcxIDYuNTEtMTQuMDQgOC42Mi0yMy4yNyAyLjI2LTkuODYgMy44OC0xNy4xOCA0LjU5LTIwLjc0Ljg5LTQuNDIgMi40My05LjcyIDQuMzYtMTUuMDUgMi4yNy02LjI1IDIuNDktMTUuMzkuMzctMTUuMzktLjMgMC0xLjM4IDEuMjItMi40MSAyLjcxLTEuMDMgMS40OS00Ljc2IDQuOC04LjI5IDcuMzYtOC4zNyA2LjA4LTExLjcgOS4zOS0xMi42NiAxMi41OC0uOTMgMy4xMS0xLjAyIDcuMjMtLjE2IDcuNzYuMzQuMjEgMS4yOSAyLjQgMi4xMSA0Ljg4IDEuNjIgNC44OCAxLjg3IDEwLjEyLjcyIDE1LjM2LS4zOSAxLjc3LTEuMDUgNS40Ny0xLjQ2IDguMjMtLjQxIDIuNzYtLjk4IDYuNDYtMS4yNSA4LjIyLS4yOCAxLjc2LS45NyAzLjY4LTEuNTUgNC4yNi0uOTYuOTYtMS4xNC45MS0yLjA1LS41My0uNTUtLjg3LTEuMi0zLjAxLTEuNDQtNC43NS0uMjUtMS43NC0xLjYzLTcuMTEtMy4wOC0xMS45My0zLjI4LTEwLjktMy41Mi0xNi4xNS0uOTYtMjAuOTYuOTItMS43MyAxLjY3LTMuODEgMS42Ny00LjYxIDAtMi4zOS0yLjItNS4zMi03LjQxLTkuODktNy4wNS02LjE4LTguNjMtNy45Mi0xMC4yMy0xMS4zLTEuNzEtMy42LTMuMDYtNC4wNi00LjU0LTEuNTQtMS43OCAzLjAxLTIuNiA5LjExLTIuOTcgMjIuMDJsLS4zNSAxMi4xMyAxLjk1IDIuMjVjMy4yMSAzLjcgMTIuMDcgMTYuNDUgMTMuNzggMTkuODMgMy40MSA2Ljc0IDQuMzQgMTEuNjkgNC40MSAyMy41Ni4wNyAxMS44NC45NSAyMi43NSAyIDI0LjcxLjM2LjY2LjUxIDEuMzUuMzQgMS41Mi0uMTcuMTcuNDEgMi4wOSAxLjI5IDQuMjcuODggMi4xOCAxLjgxIDYuMjIgMi4wNiA4Ljk4LjI1IDIuNzYgMS4wMiA3LjQzIDEuNzEgMTAuMzcgMi4yMyA5LjU2IDIuNzcgMTQuMDggMi4zOSAyMC4xNC0uMiAzLjI3LS41MyAxMS4wNy0uNzMgMTcuMzItMS4zMSA0MS43Ni0xLjg1IDU3Ljk4LTIuMDQgNjEuMjEtLjEyIDIuMDItLjM5IDExLjUxLS42IDIxLjA3LS4zNiAxNi4zLTEuMyAyNy4zNy0yLjQyIDI4LjY1LS42NC43My04LjA3LTQuOTEtMTIuNTItOS40OS0zLjc1LTMuODctNC4wMi00Ljc5LTIuODMtOS45NS43LTMuMDEgMi4yNi0xOC4yOSAzLjMzLTMyLjYyLjM2LTQuNzguODEtMTAuNSAxLjAxLTEyLjcxLjgzLTkuMzcgMS42Ni0yMC4zNSAyLjYxLTM0Ljc4LjU2LTguNDYgMS4zMy0xNi40NCAxLjcyLTE3LjczLjM4LTEuMjkuODktOS44OSAxLjEzLTE5LjExbC40My0xNi43Ny0yLjI2LTQuM2MtMS43Mi0zLjI4LTQuODctNi45NC0xMy4yMi0xNS4zNC02LjAzLTYuMDctMTEuODQtMTIuMy0xMi45MS0xMy44NWwtMS45NS0yLjgxLjc1LTEwLjljMS4wOS0xNS43MSAxLjEtNDguNTcuMDItNTkuMDZsLS44OS04LjctMy4yOC00LjUyYy01Ljg2LTguMDgtNS44LTcuNzUtNi4yMi0zMy4yNy0uMS02LjA3LS4zOC0xMS41LS42My0xMi4wNi0uODMtMS44Ny0zLjA1LTIuNjYtOC41NC0zLjA1LTguODYtLjYyLTEwLjk2LTEuOS0yMy44NS0xNC41NS02LjE1LTYuMDQtMTIuMzQtMTEuOTctMTMuNzUtMTMuMTktMi44MS0yLjQyLTIuNzktMS45OS0uNTYtOS42M2wxLjM1LTQuNjUtMS42OS0zLjA0Yy0uOTMtMS42Ny0yLjA5LTMuNTEtMi41OS00LjA3LTEuMzMtMS41MS01LjUtMTAuODktNS45OS0xMy40OS0uMzEtMS42Ni0uMDktMi42Ny44Ny0zLjkgMi4yMy0yLjg2IDMuNC01LjY4IDQuNDUtMTAuNzMgMi4zMy0xMS4xOSA3Ljc0LTI2LjA5IDEwLjYtMjkuMjIgMy4xOC0zLjQ3IDcuNy0xLjA1IDkuNDEgNS4wMyAxLjM0IDQuNzkgMS4zNyA5Ljc5LjEgMTguNTUtLjUzIDMuNjgtLjk4IDguNjgtLjk5IDExLjExLS4wMiA0LjAxLjE5IDQuNjkgMi4yNSA3LjM5IDMuMzMgNC4zNyA3LjczIDcuNDEgMTUuMiAxMC41MiAxLjcuNzEgMy44MiAxLjk5IDQuNzIgMi44NSAxMS4xNyAxMC43MiAxOC42MiAxNi4xOCAyMi45NSAxNi44NSA1LjE4LjggNy45OCA0LjU0IDEwLjA0IDEzLjM5IDEuMzEgNS42NSA0IDExLjE0IDUuNDYgMTEuMTQuNTkgMCAyLjA5LS42MyAzLjMzLTEuMzkgMS45OC0xLjIyIDIuMjUtMS43MyAyLjI1LTQuMTgtLjAxLTMuNzEtMS4xNy0xNC4wOC0yLTE3Ljg0LS4zNy0xLjY2LS43OC00LjA2LS45My01LjM1LS4xNC0xLjI5LS42MS0zLjg1LTEuMDMtNS42OS0yLjU1LTExLjE2LTMuNjUtMTUuNDYtNC4xLTE2LjA1LTEuNTUtMi4wMi00LjA4LTEwLjItNC45My0xNS45Mi0xLjY0LTExLjExLTMuOTYtMTQuMjMtMTIuOTEtMTcuMzktNC42NC0xLjY0LTguODktNC4xMi0xMy4zMi03Ljc4LTEuMTUtLjk1LTQuMDEtMy4yMi02LjM1LTUuMDYtMi4zNS0xLjgzLTQuNDEtMy41My00LjYtMy43Ni0uMTgtLjIzLTEuMzktMS4xNC0yLjY5LTIuMDItNi4yNC00LjIyLTguODQtNi45OC0xMS4yNi0xMS45NmwtMi40NC01LjAyLS4yMi0xMi45OC0uMjItMTIuOTggNi45MS02LjU1YzMuOTUtMy43NSA4LjQ4LTcuMzUgMTAuNTktOC40MyAzLjMxLTEuNjkgNC40NS0xLjg5IDExLjM3LTIuMDUgOC41My0uMTkgMTAuMTIuMDIgMTEuNjYgMS41NiAxLjUzIDEuNTMgMS4zNiA2LjQtLjI5IDguNS0uNzQuOTQtMS4zNCAxLjk4LTEuMzQgMi4zMiAwIC41OC0yLjYxIDQuOTEtNS40MiA4Ljk5LS42OC45OS0yLjEzIDUuMzUtMi4zNyA2LjgyIDIwLjQ0IDEzLjM5IDIxLjU1IDMuNzcgMTQuMDcgMjguOThsMTEuNCAyLjU0YzMuMTEtOC42NiA2LjQ3LTE3LjI2IDguNjEtMjYuMjIuMjktNy42My0xMS45OC00LjE5LTE1LjQtOC42OC0yLjMzLTUuOTMgMy4xMy0xNC4xOCA2LjA2LTE5LjIgMS42LTIuMzQgNi42Mi00LjcgOC44Mi00LjE1Ljg4LjIyIDQuMTYtLjM1IDcuMzctMS4yOCAzLjE4LS45MiA2LjU4LTEuNjggNy41NS0xLjY4Ljk3IDAgMy42Ni0uNTggNS45OC0xLjI5IDMuNjUtMS4xMSA0LjUtMS4xNyA2LjM1LS40IDEuMTcuNDggMy43OSAxLjA5IDUuODIgMS4zNiAyLjAyLjI2IDQuNzIgMS4xMiA2IDEuOTEgMS4yOC43OSAzLjUzIDEuNzcgNS4wMiAyLjE3IDIuNTEuNjggMyAuNTcgNy4wNS0xLjY3bDQuMzUtMi40IDEwLjctLjQxYzEwLjQ0LS40IDEwLjgxLS40NyAxNS4yNi0yLjY4bDQuNTgtMi4zIDIuNDYgMS40M2MxLjc2IDEuMDIgMy4xNCAyLjczIDQuODUgNS45OCAyLjM2IDQuNTEgMi4zOCA0LjU4IDEuMzcgNy4zNy0uODggMi40NC0uODkgMy4zLS4xIDYuMzkuNSAxLjk2IDEuNDUgNC42MiAyLjEgNS45MS42NSAxLjI5IDEuMjQgMy4wOSAxLjMxIDQuMDEuMzEgNC4zMy0uMDMgNS4zLTIuNDEgNi45Mi0yLjE3IDEuNDctNi45OCA3LjkxLTYuOTggOS4zNCAwIC4zMi0uNDggMS42OS0xLjA3IDMuMDMtNS4wNCAxMS41MS02Ljc2IDEzLjU2LTE0LjI2IDE2Ljk4LTkuMiA0LjItMTIuMyA1LjE5LTE2LjIxIDUuMTktMy4xIDAtNCAuMjUtNC41NCAxLjI2LS4zNy42OS0yLjIxIDIuMzctNC4wOSAzLjcxLTIuMDQgMS40Ny0zLjggMy4zOC00LjM4IDQuNzgtLjU0IDEuMjgtMS42NiAyLjU5LTIuNDkgMi45MS0uODMuMzItMS45NCAxLjA4LTIuNDUgMS43MS0uNTIuNjItMy42NiAzLjA0LTcgNS4zOC0zLjMzIDIuMzQtNi44NyA1LjAyLTcuODcgNS45Ni0xIC45NC0yLjA3IDEuNzEtMi4zOSAxLjcxcy0xLjI4Ljc0LTIuMTMgMS42NWMtMS4zMSAxLjM5LTEuNDkgMi4xMS0xLjE0IDQuNi4yMiAxLjYzLjg2IDQuMjcgMS40MiA1Ljg4IDEuMzIgMy44IDEuMzEgNy44Ni0uMDUgMTAuNTctMS40MyAyLjg2LS44OSA2LjY1IDEuMzUgOS41OSAyLjAxIDIuNjMgMi4xNiA0LjU2LjcxIDguODQtLjYxIDEuOC0xLjA1IDUuNDUtMS4wNiA4LjkxLS4wMiA0Ljg4LjIyIDYuMjggMS40NiA4LjM4IDEuMiAyLjA0IDEuODIgMi40OCAzLjI0IDIuMzIgMS45OC0uMjMgMi4zLTEuMDUgNC43MS0xMi4xMiAyLjE4LTEwLjAzIDMuNzEtMTEuOTIgMTMuNzYtMTcuMDggMi45NC0xLjUxIDcuNDYtMy45NiAxMC4wMy01LjQ0IDIuNTgtMS40OCA2Ljc5LTMuNjkgOS4zNy00LjkxIDYuNjctMy4xNiAxMS4wNS02LjUyIDE1LjIyLTExLjY3IDcuMTEtOC43OSA5Ljk4LTE2LjIyIDEyLjg1LTMzLjMuNTUtMy4yOCAxLjQzLTUuNjUgMi44Ni03LjczIDEuMjktMS44NyAyLjM3LTQuNjIgMi44OS03LjMxIDEuMDItNS4zIDIuODUtOS4wOCA1LjU4LTExLjUxIDQuNy00LjE4IDYtMS4wOSA0LjU5IDEwLjg3LS40NiAzLjg2LTEuMSAxMC4zMy0xLjQ0IDE0LjM4bC0uNjEgNy4zNiA0LjQ1IDQuMDkgNC40NSA0LjA5LjExIDguNDJjLjA2IDQuNjMuNDcgOS41My45MiAxMC44OWwuODIgMi40Ny02LjQzIDYuMjhjLTguNTQgOC4zMy0xMi44OCAxMy45My0xNi43NiAyMS42MS0xLjc3IDMuNDktMy43NCA3LjExLTQuMzggOC4wMy0yLjE4IDMuMTEtNi40NiAxMy4wMS04Ljc2IDIwLjI2bC0yLjI5IDcuMjItNi45NyA2LjQ5Yy0zLjgzIDMuNTctNy45NiA3LjI1LTkuMTcgOC4xNy0zLjA1IDIuMzItNC4yNiA1LjE1LTQuMjYgOS45OSAwIDIuOTguNDMgNC45NiAxLjU5IDcuMjYuODcgMS43NCAxLjgxIDMuOTEgMi4wOSA0LjgzLjI4LjkyLjk4IDIuMjIgMS41NyAyLjg5IDEuNCAxLjU5IDEuOTIgMTYuMTIuODMgMjMuMjItLjY4IDQuNDgtMy42MyAxMi4wMi00LjcgMTIuMDItMS43OSAwLTQuMDYgOS4yNy01LjA3IDIwLjc0LS4xOCAyLjAyLS42MiA1Ljk0LS45OCA4LjctLjM2IDIuNzYtLjk2IDkuOTgtMS4zNSAxNi4wNS0uNzcgMTIuMjItLjE5IDE4Ljc3IDIuMDUgMjMuMTUgMy40MSA2LjY5LjUyIDEyLjY5LTExLjAzIDIyLjg0bC0zLjk3IDMuNDkuMDcgNS4xOWMuMDQgMi44Ni41NSA2Ljg1IDEuMTQgOC44NyA0LjYxIDE1Ljk4IDQuNzMgMTYuOTIgNC4zOCAzNy4xMy0uNDYgMjYuNC0uMjYgNDAuMjcuNjMgNDQuMTUuNDIgMS44NC45MSA1IDEuMDggNy4wMi4xNyAyLjAyLjY2IDUuMzMgMS4wOCA3LjM2LjQ3IDIuMjYuNzggMTEuMDIuNzkgMjIuNzRsLjAyIDE5LjA2LTEuODEgMi42M2MtMi43MSAzLjkxLTE1LjExIDEzLjU0LTE1LjQ5IDEyLjI5em0yOS41My00NS4xMWMtLjE4LS4zLS4zMy02Ljg3LS4zMy0xNC41OSAwLTE0LjA2LS44OS0yNy41NC0yLjI2LTM0LjQ1LS40LTIuMDItLjgxLTkuNy0uOS0xNy4wNi0uMTUtMTEuOTMtMS40LTI0LjM3LTIuNjQtMjYuMzgtLjY2LTEuMDctMy4wMi0xNy42Ni0zLjAzLTIxLjMtLjAxLTQuMjMgMS4wMi02IDUuMjgtOS4xMyA0LjE0LTMuMDQgNC44Ni0zLjE0IDUuNDgtLjcyLjI4IDEuMSAxLjQ1IDUuNjIgMi42IDEwLjAzIDMuOTMgMTUuMTIgNC4xNCAxNi4yNyA0LjA1IDIxLjc0LS4xIDUuNzgtLjEzIDYuMTMtMS43NCAxNy43My0uOTggNy4wNy0xLjE3IDEyLjM5LTEuMDQgMjguNDMuMTcgMTkuNC0uNjQgMzUuNzMtMi4wNCA0MS4yNy0uNzEgMi43OC0yLjggNS40OC0zLjQzIDQuNDN6bS03MC45OS0zNy41OGMtLjI0LS4zOC0xLjAxLTUuMjQtMS43My0xMC43OS0uNzItNS41Ni0xLjQ5LTEwLjQxLTEuNzMtMTAuNzktLjIzLS4zOC0uNjgtMy4zLS45OS02LjQ5LS4zMS0zLjE5LS45MS03LjQ2LTEuMzMtOS40OC0uOTktNC43OS0zLjM1LTE5LjM1LTMuNDItMjEuMDctLjAzLS43NC0uMzQtNC4wNS0uNy03LjM2LS42Ny02LjIxLS44NC0yNy42Ny0uMjItMjguMjkuOTYtLjk2IDYuNjMgMi43NiAxMS4zMyA3LjQzbDUuMjggNS4yNS0uNDUgNi40N2MtLjI1IDMuNTYtLjYgMTAuMjMtLjc4IDE0LjgzLS4xOCA0LjYtLjQ5IDkuODctLjY3IDExLjcxLS4xOCAxLjg0LS42MSA5LjM2LS45NCAxNi43Mi0uNzkgMTcuNDEtMS45NCAzMS4yOS0yLjY1IDMyLS4zMi4zLS43Ni4yNC0xLS4xNHpNNzQuNjMgMTYyLjYxYzIxLjA3IDEyLjc5IDE3Ljg0IDE0LjE1IDI4LjQ5IDE3LjY2IDEzLjAxIDQuMjkgMTguODcgNy4xMyAyMy4xNSAxNi44Ny00My42NiAzNi4xNC02OS4wMSA1Ny45LTc2LjcxIDcwLjgyLTMxLjAyIDUyLjAxLTUuOTkgMTAxLjU5IDYyLjc1IDg3LjIxLTE0LjE4IDI5LjIzLTc3Ljk3IDI4LjYzLTk4LjY4LTQuOS0yNC42OC0zOS45NS0yMi4wOS0xMTguMyA2MS0xODcuNjZ6bTIxMC43OSAxNzkuMDJjNTYuNjYgNi44OCA4Mi4zMi0zNy43NCA0Ni41NC04OS4yMyAwIDAtMjYuODctMjkuMzQtNjQuMjgtNjcuOTYgMi45OC0xNS40NSA5LjQ5LTMyLjEyIDMwLjU3LTUzLjgyIDg5LjIgNjMuNTEgOTIgMTQxLjYxIDkyLjQ2IDE0OS4zNiA0LjI3IDcwLjU4LTc4LjY2IDkxLjEyLTEwNS4yOSA2MS42NXpcIl0sbWFzdG9kb246WzQxNyw1MTIsW10sXCJmNGY2XCIsXCJNNDE3LjggMTc5LjFjMC05Ny4yLTYzLjctMTI1LjctNjMuNy0xMjUuNy02Mi41LTI4LjctMjI4LjUtMjguNC0yOTAuNCAwIDAgMC02My43IDI4LjUtNjMuNyAxMjUuNyAwIDExNS43LTYuNiAyNTkuNCAxMDUuNiAyODkuMSA0MC41IDEwLjcgNzUuMyAxMyAxMDMuMyAxMS40IDUwLjgtMi44IDc5LjMtMTguMSA3OS4zLTE4LjFsLTEuNy0zNi45cy0zNi4zIDExLjQtNzcuMSAxMC4xYy00MC40LTEuNC04My00LjQtODkuNi01NC0uNi00LjQtLjktOS0uOS0xMy45IDg1LjYgMjAuOSAxNTguNiA5LjEgMTc4LjcgNi43IDU2LjEtNi43IDEwNS00MS4zIDExMS4yLTcyLjkgOS44LTQ5LjggOS0xMjEuNSA5LTEyMS41em0tNzUuMSAxMjUuMmgtNDYuNlYxOTAuMWMwLTQ5LjctNjQtNTEuNi02NCA2Ljl2NjIuNWgtNDYuM1YxOTdjMC01OC41LTY0LTU2LjYtNjQtNi45djExNC4ySDc1LjFjMC0xMjIuMS01LjItMTQ3LjkgMTguNC0xNzUgMjUuOS0yOC45IDc5LjgtMzAuOCAxMDMuOCA2LjFsMTEuNiAxOS41IDExLjYtMTkuNWMyNC4xLTM3LjEgNzguMS0zNC44IDEwMy44LTYuMSAyMy43IDI3LjMgMTguNCA1MyAxOC40IDE3NXpcIl0sbWF4Y2RuOls1MTIsNTEyLFtdLFwiZjEzNlwiLFwiTTQ2MS4xIDQ0Mi43aC05Ny40TDQxNS42IDIwMGMyLjMtMTAuMi45LTE5LjUtNC40LTI1LjctNS02LjEtMTMuNy05LjYtMjQuMi05LjZoLTQ5LjNsLTU5LjUgMjc4aC05Ny40bDU5LjUtMjc4aC04My40bC01OS41IDI3OEgwbDU5LjUtMjc4LTQ0LjYtOTUuNEgzODdjMzkuNCAwIDc1LjMgMTYuMyA5OC4zIDQ0LjkgMjMuMyAyOC42IDMxLjggNjcuNCAyMy42IDEwNS45bC00Ny44IDIyMi42elwiXSxtZWRhcHBzOlszMjAsNTEyLFtdLFwiZjNjNlwiLFwiTTExOC4zIDIzOC40YzMuNS0xMi41IDYuOS0zMy42IDEzLjItMzMuNiA4LjMgMS44IDkuNiAyMy40IDE4LjYgMzYuNiA0LjYtMjMuNSA1LjMtODUuMSAxNC4xLTg2LjcgOS0uNyAxOS43IDY2LjUgMjIgNzcuNSA5LjkgNC4xIDQ4LjkgNi42IDQ4LjkgNi42IDEuOSA3LjMtMjQgNy42LTQwIDcuOC00LjYgMTQuOC01LjQgMjcuNy0xMS40IDI4LTQuNy4yLTguMi0yOC44LTE3LjUtNDkuNmwtOS40IDY1LjVjLTQuNCAxMy0xNS41LTIyLjUtMjEuOS0zOS4zLTMuMy0uMS02Mi40LTEuNi00Ny42LTcuOGwzMS01ek0yMjggNDQ4YzIxLjIgMCAyMS4yLTMyIDAtMzJIOTJjLTIxLjIgMC0yMS4yIDMyIDAgMzJoMTM2em0tMjQgNjRjMjEuMiAwIDIxLjItMzIgMC0zMmgtODhjLTIxLjIgMC0yMS4yIDMyIDAgMzJoODh6bTM0LjItMTQxLjVjMy4yLTE4LjkgNS4yLTM2LjQgMTEuOS00OC44IDcuOS0xNC43IDE2LjEtMjguMSAyNC00MSAyNC42LTQwLjQgNDUuOS03NS4yIDQ1LjktMTI1LjVDMzIwIDY5LjYgMjQ4LjIgMCAxNjAgMFMwIDY5LjYgMCAxNTUuMmMwIDUwLjIgMjEuMyA4NS4xIDQ1LjkgMTI1LjUgNy45IDEyLjkgMTYgMjYuMyAyNCA0MSA2LjcgMTIuNSA4LjcgMjkuOCAxMS45IDQ4LjkgMy41IDIxIDM2LjEgMTUuNyAzMi42LTUuMS0zLjYtMjEuNy01LjYtNDAuNy0xNS4zLTU4LjZDNjYuNSAyNDYuNSAzMyAyMTEuMyAzMyAxNTUuMiAzMyA4Ny4zIDkwIDMyIDE2MCAzMnMxMjcgNTUuMyAxMjcgMTIzLjJjMCA1Ni4xLTMzLjUgOTEuMy02Ni4xIDE1MS42LTkuNyAxOC0xMS43IDM3LjQtMTUuMyA1OC42LTMuNCAyMC42IDI5IDI2LjQgMzIuNiA1LjF6XCJdLG1lZGl1bTpbNDQ4LDUxMixbXSxcImYyM2FcIixcIk0wIDMydjQ0OGg0NDhWMzJIMHptMzcyLjIgMTA2LjFsLTI0IDIzYy0yLjEgMS42LTMuMSA0LjItMi43IDYuN3YxNjkuM2MtLjQgMi42LjYgNS4yIDIuNyA2LjdsMjMuNSAyM3Y1LjFoLTExOFYzNjdsMjQuMy0yMy42YzIuNC0yLjQgMi40LTMuMSAyLjQtNi43VjE5OS44bC02Ny42IDE3MS42aC05LjFMMTI1IDE5OS44djExNWMtLjcgNC44IDEgOS43IDQuNCAxMy4ybDMxLjYgMzguM3Y1LjFINzEuMnYtNS4xbDMxLjYtMzguM2MzLjQtMy41IDQuOS04LjQgNC4xLTEzLjJ2LTEzM2MuNC0zLjctMS03LjMtMy44LTkuOEw3NSAxMzguMVYxMzNoODcuM2w2Ny40IDE0OEwyODkgMTMzLjFoODMuMnY1elwiXSxcIm1lZGl1bS1tXCI6WzUxMiw1MTIsW10sXCJmM2M3XCIsXCJNNzEuNSAxNDIuM2MuNi01LjktMS43LTExLjgtNi4xLTE1LjhMMjAuMyA3Mi4xVjY0aDE0MC4ybDEwOC40IDIzNy43TDM2NC4yIDY0aDEzMy43djguMWwtMzguNiAzN2MtMy4zIDIuNS01IDYuNy00LjMgMTAuOHYyNzJjLS43IDQuMSAxIDguMyA0LjMgMTAuOGwzNy43IDM3djguMUgzMDcuM3YtOC4xbDM5LjEtMzcuOWMzLjgtMy44IDMuOC01IDMuOC0xMC44VjE3MS4yTDI0MS41IDQ0Ny4xaC0xNC43TDEwMC40IDE3MS4ydjE4NC45Yy0xLjEgNy44IDEuNSAxNS42IDcgMjEuMmw1MC44IDYxLjZ2OC4xaC0xNDR2LThMNjUgMzc3LjNjNS40LTUuNiA3LjktMTMuNSA2LjUtMjEuMlYxNDIuM3pcIl0sbWVkcnQ6WzU0NCw1MTIsW10sXCJmM2M4XCIsXCJNMTEzLjcgMjU2YzAgMTIxLjggODMuOSAyMjIuOCAxOTMuNSAyNDEuMS0xOC43IDQuNS0zOC4yIDYuOS01OC4yIDYuOUMxMTEuNCA1MDQgMCAzOTMgMCAyNTZTMTExLjQgOCAyNDguOSA4YzIwLjEgMCAzOS42IDIuNCA1OC4yIDYuOUMxOTcuNSAzMy4yIDExMy43IDEzNC4yIDExMy43IDI1Nm0yOTcuNCAxMDAuM2MtNzcuNyA1NS40LTE3OS42IDQ3LjUtMjQwLjQtMTQuNiA1LjUgMTQuMSAxMi43IDI3LjcgMjEuNyA0MC41IDYxLjYgODguMiAxODIuNCAxMDkuMyAyNjkuNyA0NyA4Ny4zLTYyLjMgMTA4LjEtMTg0LjMgNDYuNS0yNzIuNi05LTEyLjktMTkuMy0yNC4zLTMwLjUtMzQuMiAzNy40IDc4LjggMTAuNyAxNzguNS02NyAyMzMuOW0tMjE4LjgtMjQ0Yy0xLjQgMS0yLjcgMi4xLTQgMy4xIDY0LjMtMTcuOCAxMzUuOSA0IDE3OC45IDYwLjUgMzUuNyA0NyA0Mi45IDEwNi42IDI0LjQgMTU4IDU2LjctNTYuMiA2Ny42LTE0Mi4xIDIyLjMtMjAxLjgtNTAtNjUuNS0xNDkuMS03NC40LTIyMS42LTE5LjhNMjk2IDIyNGMtNC40IDAtOC0zLjYtOC04di00MGMwLTQuNC0zLjYtOC04LThoLTQ4Yy00LjQgMC04IDMuNi04IDh2NDBjMCA0LjQtMy42IDgtOCA4aC00MGMtNC40IDAtOCAzLjYtOCA4djQ4YzAgNC40IDMuNiA4IDggOGg0MGM0LjQgMCA4IDMuNiA4IDh2NDBjMCA0LjQgMy42IDggOCA4aDQ4YzQuNCAwIDgtMy42IDgtOHYtNDBjMC00LjQgMy42LTggOC04aDQwYzQuNCAwIDgtMy42IDgtOHYtNDhjMC00LjQtMy42LTgtOC04aC00MHpcIl0sbWVldHVwOls1MTIsNTEyLFtdLFwiZjJlMFwiLFwiTTk5IDQxNC4zYzEuMSA1LjctMi4zIDExLjEtOCAxMi4zLTUuNCAxLjEtMTAuOS0yLjMtMTItOC0xLjEtNS40IDIuMy0xMS4xIDcuNy0xMi4zIDUuNC0xLjIgMTEuMSAyLjMgMTIuMyA4em0xNDMuMSA3MS40Yy02LjMgNC42LTggMTMuNC0zLjcgMjAgNC42IDYuNiAxMy40IDguMyAyMCAzLjcgNi4zLTQuNiA4LTEzLjQgMy40LTIwLTQuMi02LjUtMTMuMS04LjMtMTkuNy0zLjd6bS04Ni00NjIuM2M2LjMtMS40IDEwLjMtNy43IDguOS0xNC0xLjEtNi42LTcuNC0xMC42LTEzLjctOS4xLTYuMyAxLjQtMTAuMyA3LjctOS4xIDE0IDEuNCA2LjYgNy42IDEwLjYgMTMuOSA5LjF6TTM0LjQgMjI2LjNjLTEwLTYuOS0yMy43LTQuMy0zMC42IDYtNi45IDEwLTQuMyAyNCA1LjcgMzAuOSAxMCA3LjEgMjMuNyA0LjYgMzAuNi01LjcgNi45LTEwLjQgNC4zLTI0LjEtNS43LTMxLjJ6bTI3Mi0xNzAuOWMxMC42LTYuMyAxMy43LTIwIDcuNy0zMC4zLTYuMy0xMC42LTE5LjctMTQtMzAtNy43cy0xMy43IDIwLTcuNCAzMC42YzYgMTAuMyAxOS40IDEzLjcgMjkuNyA3LjR6bS0xOTEuMSA1OGM3LjctNS40IDkuNC0xNiA0LjMtMjMuN3MtMTUuNy05LjQtMjMuMS00LjNjLTcuNyA1LjQtOS40IDE2LTQuMyAyMy43IDUuMSA3LjggMTUuNiA5LjUgMjMuMSA0LjN6bTM3Mi4zIDE1NmMtNy40IDEuNy0xMi4zIDkuMS0xMC42IDE2LjkgMS40IDcuNCA4LjkgMTIuMyAxNi4zIDEwLjYgNy40LTEuNCAxMi4zLTguOSAxMC42LTE2LjYtMS41LTcuNC04LjktMTIuMy0xNi4zLTEwLjl6bTM5LjctNTYuOGMtMS4xLTUuNy02LjYtOS4xLTEyLTgtNS43IDEuMS05LjEgNi45LTggMTIuNiAxLjEgNS40IDYuNiA5LjEgMTIuMyA4IDUuNC0xLjUgOS4xLTYuOSA3LjctMTIuNnpNNDQ3IDEzOC45Yy04LjYgNi0xMC42IDE3LjctNC45IDI2LjMgNS43IDguNiAxNy40IDEwLjYgMjYgNC45IDguMy02IDEwLjMtMTcuNyA0LjYtMjYuMy01LjctOC43LTE3LjQtMTAuOS0yNS43LTQuOXptLTYuMyAxMzkuNGMyNi4zIDQzLjEgMTUuMSAxMDAtMjYuMyAxMjkuMS0xNy40IDEyLjMtMzcuMSAxNy43LTU2LjkgMTcuMS0xMiA0Ny4xLTY5LjQgNjQuNi0xMDUuMSAzMi42LTEuMS45LTIuNiAxLjctMy43IDIuOS0zOS4xIDI3LjEtOTIuMyAxNy40LTExOS40LTIyLjMtOS43LTE0LjMtMTQuNi0zMC42LTE1LjEtNDYuOS02NS40LTEwLjktOTAtOTQtNDEuMS0xMzkuNy0yOC4zLTQ2LjkuNi0xMDcuNCA1My40LTExNC45QzE1MS42IDcwIDIzNC4xIDM4LjYgMjkwLjEgODJjNjcuNC0yMi4zIDEzNi4zIDI5LjQgMTMwLjkgMTAxLjEgNDEuMSAxMi42IDUyLjggNjYuOSAxOS43IDk1LjJ6bS03MCA3NC4zYy0zLjEtMjAuNi00MC45LTQuNi00My4xLTI3LjEtMy4xLTMyIDQzLjctMTAxLjEgNDAtMTI4LTMuNC0yNC0xOS40LTI5LjEtMzMuNC0yOS40LTEzLjQtLjMtMTYuOSAyLTIxLjQgNC42LTIuOSAxLjctNi42IDQuOS0xMS43LS4zLTYuMy02LTExLjEtMTEuNy0xOS40LTEyLjktMTIuMy0yLTE3LjcgMi0yNi42IDkuNy0zLjQgMi45LTEyIDEyLjktMjAgOS4xLTMuNC0xLjctMTUuNC03LjctMjQtMTEuNC0xNi4zLTcuMS00MCA0LjYtNDguNiAyMC0xMi45IDIyLjktMzggMTEzLjEtNDEuNyAxMjUuMS04LjYgMjYuNiAxMC45IDQ4LjYgMzYuOSA0Ny4xIDExLjEtLjYgMTguMy00LjYgMjUuNC0xNy40IDQtNy40IDQxLjctMTA3LjcgNDQuNi0xMTIuNiAyLTMuNCA4LjktOCAxNC42LTUuMSA1LjcgMy4xIDYuOSA5LjQgNiAxNS4xLTEuMSA5LjctMjggNzAuOS0yOC45IDc3LjctMy40IDIyLjkgMjYuOSAyNi42IDM4LjYgNCAzLjctNy4xIDQ1LjctOTIuNiA0OS40LTk4LjMgNC4zLTYuMyA3LjQtOC4zIDExLjctOCAzLjEgMCA4LjMuOSA3LjEgMTAuOS0xLjQgOS40LTM1LjEgNzIuMy0zOC45IDg3LjctNC42IDIwLjYgNi42IDQxLjQgMjQuOSA1MC42IDExLjQgNS43IDYyLjUgMTUuNyA1OC41LTExLjF6bTUuNyA5Mi4zYy0xMC4zIDcuNC0xMi45IDIyLTUuNyAzMi42IDcuMSAxMC42IDIxLjQgMTMuMSAzMiA2IDEwLjYtNy40IDEzLjEtMjIgNi0zMi42LTcuNC0xMC42LTIxLjctMTMuNS0zMi4zLTZ6XCJdLG1lZ2Fwb3J0Ols0OTYsNTEyLFtdLFwiZjVhM1wiLFwiTTI0OCA4QzExMS4wNCA4IDAgMTE5LjA0IDAgMjU2YzAgMTM2Ljk3IDExMS4wNCAyNDggMjQ4IDI0OCAxMzYuOTYgMCAyNDgtMTExLjAzIDI0OC0yNDhDNDk2IDExOS4wNCAzODQuOTYgOCAyNDggOHptODUuNDYgMjY3LjY3bDU5LjY2IDU5LjY3djg3LjA1bC0yNi4wNyAxOS4yM0wzNDEgNDIyLjM5di02NS40NmwtMzMuNDQtMzMuNDQtMzMuNDQgMzMuNDR2NjUuNDZMMjQ4IDQ0MS42MmwtMjYuMTItMTkuMjN2LTY1LjQ2bC0zMy40NC0zMy40NEwxNTUgMzU2LjkydjY1LjQ2bC0yNi4wNyAxOS4yMy0yNi4wNi0xOS4yM3YtODcuMDVsNTkuNDctNTkuNDdWMTg4bDU5LjUtNTkuNVY1Mi44OGwyNi4wNi0xOS4yMyAyNi4wNiAxOS4yM3Y3NS42NGw1OS41IDU5LjVtLTg1LjU2LTExLjg2bDMzLjQ0IDMzLjQ0VjI3NkwyNDggMzA5LjMzbC0zMy41NC0zMy41NHYtNjYuMmwzMy40NC0zMy40M3pcIl0sbWljcm9zb2Z0Ols0NDgsNTEyLFtdLFwiZjNjYVwiLFwiTTAgMzJoMjE0LjZ2MjE0LjZIMFYzMnptMjMzLjQgMEg0NDh2MjE0LjZIMjMzLjRWMzJ6TTAgMjY1LjRoMjE0LjZWNDgwSDBWMjY1LjR6bTIzMy40IDBINDQ4VjQ4MEgyMzMuNFYyNjUuNHpcIl0sbWl4Ols0NDgsNTEyLFtdLFwiZjNjYlwiLFwiTTAgNjR2MzQ4LjljMCA1Ni4yIDg4IDU4LjEgODggMFYxNzQuM2M3LjktNTIuOSA4OC01MC40IDg4IDYuNXYxNzUuM2MwIDU3LjkgOTYgNTggOTYgMFYyNDBjNS4zLTU0LjcgODgtNTIuNSA4OCA0LjN2MjMuOGMwIDU5LjkgODggNTYuNiA4OCAwVjY0SDB6XCJdLG1peGNsb3VkOls2NDAsNTEyLFtdLFwiZjI4OVwiLFwiTTQyNC40MyAyMTkuNzI5QzQxNi4xMjQgMTM0LjcyNyAzNDQuMTM1IDY4IDI1Ni45MTkgNjhjLTcyLjI2NiAwLTEzNi4yMjQgNDYuNTE2LTE1OS4yMDUgMTE0LjA3NC01NC41NDUgOC4wMjktOTYuNjMgNTQuODIyLTk2LjYzIDExMS41ODIgMCA2Mi4yOTggNTAuNjY4IDExMi45NjYgMTEzLjI0MyAxMTIuOTY2aDI4OS42MTRjNTIuMzI5IDAgOTQuOTY5LTQyLjM2MiA5NC45NjktOTQuNjkzIDAtNDUuMTMxLTMyLjExOC04My4wNjMtNzQuNDgtOTIuMnptLTIwLjQ4OSAxNDQuNTNIMTE0LjMyN2MtMzkuMDQgMC03MC44ODEtMzEuNTY0LTcwLjg4MS03MC42MDRzMzEuODQxLTcwLjYwNCA3MC44ODEtNzAuNjA0YzE4LjgyNyAwIDM2LjU0OCA3LjQ3NSA0OS44MzggMjAuNzY2IDE5Ljk2MyAxOS45NjMgNTAuMTMzLTEwLjIyNyAzMC4xOC0zMC4xOC0xNC42NzUtMTQuMzk4LTMyLjY3Mi0yNC4zNjUtNTIuMDUzLTI5LjM0OSAxOS45MzUtNDQuMyA2NC43OS03My45MjYgMTE0LjYyOC03My45MjYgNjkuNDk2IDAgMTI1Ljk3OSA1Ni40ODMgMTI1Ljk3OSAxMjUuNzAyIDAgMTMuNTY4LTIuMjE1IDI2Ljg1Ny02LjM2OSAzOS41OTQtOC45NDMgMjcuNTE3IDMyLjEzMyAzOC45MzkgNDAuMTQ3IDEzLjI5IDIuNzY5LTguMzA2IDQuOTg0LTE2Ljg4OSA2LjM2OS0yNS40NzIgMTkuMzgxIDcuNDc2IDMzLjUwMiAyNi4zMDMgMzMuNTAyIDQ4LjQ1MyAwIDI4Ljc5NS0yMy41MzUgNTIuMzMtNTIuNjA3IDUyLjMzem0yMzUuMDY5LTUyLjMzYzAgNDQuMDI0LTEyLjczNyA4Ni4zODYtMzcuMTAyIDEyMi42NTctNC4xNTMgNi4wOTItMTAuNzk4IDkuNDE0LTE3LjcyIDkuNDE0LTE2LjMxNyAwLTI3LjEyNy0xOC44MjYtMTcuNDQzLTMyLjk0OSAxOS4zODEtMjkuMzQ5IDI5LjkwMy02My42ODIgMjkuOTAzLTk5LjEyMnMtMTAuNTIxLTY5Ljc3My0yOS45MDMtOTguODQ1Yy0xNS42NTUtMjIuODMxIDE5LjM2MS00Ny4yNCAzNS4xNjMtMjMuNTM0IDI0LjM2NiAzNS45OTMgMzcuMTAyIDc4LjM1NiAzNy4xMDIgMTIyLjM3OXptLTcwLjg4IDBjMCAzMS41NjUtOS4xMzcgNjIuMDIxLTI2Ljg1NyA4OC4zMjUtNC4xNTMgNi4wOTEtMTAuNzk4IDkuMTM2LTE3LjcyIDkuMTM2LTE3LjIwMSAwLTI3LjAyMi0xOC45NzktMTcuNDQzLTMyLjk0OCAxMy4wMTMtMTkuMTA0IDE5LjY1OC00MS4yNTUgMTkuNjU4LTY0LjUxMyAwLTIyLjk4MS02LjY0NS00NS40MDgtMTkuNjU4LTY0LjUxMi0xNS43NjEtMjIuOTg2IDE5LjAwOC00Ny4wOTUgMzUuMTYzLTIzLjUzNSAxNy43MTkgMjYuMDI2IDI2Ljg1NyA1Ni40ODMgMjYuODU3IDg4LjA0N3pcIl0sbWl6dW5pOls0OTYsNTEyLFtdLFwiZjNjY1wiLFwiTTI0OCA4QzExMSA4IDAgMTE5LjEgMCAyNTZjMCAxMzcgMTExIDI0OCAyNDggMjQ4czI0OC0xMTEgMjQ4LTI0OEM0OTYgMTE5LjEgMzg1IDggMjQ4IDh6bS04MCAzNTEuOWMtMzEuNCAxMC42LTU4LjggMjcuMy04MCA0OC4yVjEzNmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwdjIyMy45em0xMjAtOS45Yy0xMi45LTItMjYuMi0zLjEtMzkuOC0zLjEtMTMuOCAwLTI3LjIgMS4xLTQwLjIgMy4xVjEzNmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwdjIxNHptMTIwIDU3LjdjLTIxLjItMjAuOC00OC42LTM3LjQtODAtNDhWMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDB2MjcxLjd6XCJdLG1vZHg6WzQ0OCw1MTIsW10sXCJmMjg1XCIsXCJNMzU2IDI0MS44bDM2LjcgMjMuN1Y0ODBsLTEzMy04My44TDM1NiAyNDEuOHpNNDQwIDc1SDIyNi4zbC0yMyAzNy44IDE1My41IDk2LjVMNDQwIDc1em0tODkgMTQyLjhMNTUuMiAzMnYyMTQuNWw0NiAyOUwzNTEgMjE3Ljh6TTk3IDI5NC4yTDggNDM3aDIxMy43bDEyNS0yMDAuNUw5NyAyOTQuMnpcIl0sbW9uZXJvOls0OTYsNTEyLFtdLFwiZjNkMFwiLFwiTTM1MiAzODRoMTA4LjRDNDE3IDQ1NS45IDMzOC4xIDUwNCAyNDggNTA0Uzc5IDQ1NS45IDM1LjYgMzg0SDE0NFYyNTYuMkwyNDggMzYxbDEwNC0xMDV2MTI4ek04OCAzMzZWMTI4bDE1OS40IDE1OS40TDQwOCAxMjh2MjA4aDc0LjhjOC41LTI1LjEgMTMuMi01MiAxMy4yLTgwQzQ5NiAxMTkgMzg1IDggMjQ4IDhTMCAxMTkgMCAyNTZjMCAyOCA0LjYgNTQuOSAxMy4yIDgwSDg4elwiXSxuYXBzdGVyOls0OTYsNTEyLFtdLFwiZjNkMlwiLFwiTTI5OC4zIDM3My42Yy0xNC4yIDEzLjYtMzEuMyAyNC4xLTUwLjQgMzAuNS0xOS02LjQtMzYuMi0xNi45LTUwLjMtMzAuNWgxMDAuN3ptNDQtMTk5LjZjMjAtMTYuOSA0My42LTI5LjIgNjkuNi0zNi4yVjI5OWMwIDIxOS40LTMyOCAyMTcuNi0zMjggLjNWMTM3LjdjMjUuOSA2LjkgNDkuNiAxOS42IDY5LjUgMzYuNCA1Ni44LTQwIDEzMi41LTM5LjkgMTg4LjktLjF6bS0yMDguOC01OC41YzY0LjQtNjAgMTY0LjMtNjAuMSAyMjguOS0uMi03LjEgMy41LTEzLjkgNy4zLTIwLjYgMTEuNS01OC43LTMwLjUtMTI5LjItMzAuNC0xODcuOS4xLTYuMy00LTEzLjktOC4yLTIwLjQtMTEuNHpNNDMuOCA5My4ydjY5LjNjLTU4LjQgMzYuNS01OC40IDEyMS4xLjEgMTU4LjMgMjYuNCAyNDUuMSAzODEuNyAyNDAuMyA0MDcuNiAxLjVsLjMtMS43YzU4LjctMzYuMyA1OC45LTEyMS43LjItMTU4LjJWOTMuMmMtMTcuMy41LTM0IDMtNTAuMSA3LjQtODItOTEuNS0yMjUuNS05MS41LTMwNy41LjEtMTYuMy00LjQtMzMuMS03LTUwLjYtNy41ek0yNTkuMiAzNTJzMzYtLjMgNjEuMy0xLjVjMTAuMi0uNSAyMS4xLTQgMjUuNS02LjUgMjYuMy0xNS4xIDI1LjQtMzkuMiAyNi4yLTQ3LjQtNzkuNS0uNi05OS45LTMuOS0xMTMgNTUuNHptLTEzNS41LTU1LjNjLjggOC4yLS4xIDMyLjMgMjYuMiA0Ny40IDQuNCAyLjUgMTUuMiA2IDI1LjUgNi41IDI1LjMgMS4xIDYxLjMgMS41IDYxLjMgMS41LTEzLjItNTkuNC0zMy43LTU2LjEtMTEzLTU1LjR6bTE2OS4xIDEyMy40Yy0zLjItNS4zLTYuOS03LjMtNi45LTcuMy0yNC44IDcuMy01Mi4yIDYuOS03NS45IDAgMCAwLTIuOSAxLjUtNi40IDYuNi0yLjggNC4xLTMuNyA5LjYtMy43IDkuNiAyOS4xIDE3LjYgNjcuMSAxNy42IDk2LjIgMC0uMS0uMS0uMy00LTMuMy04Ljl6XCJdLG5pbWJscjpbMzU1LDUxMixbXSxcImY1YThcIixcIk0yMzIuNiAyOTkuMjljMTUuNTcgMCAyNy4xNSAxMS40NiAyNy4xNSAyNi45NiAwIDE1LjU1LTExLjYyIDI2Ljk2LTI3LjE1IDI2Ljk2LTE1LjcgMC0yNy4xNS0xMS41Ny0yNy4xNS0yNi45NiAwLTE1LjUxIDExLjU4LTI2Ljk2IDI3LjE1LTI2Ljk2ek05OS4wMSAzMjYuMjVjMC0xNS42MSAxMS42OC0yNi45NiAyNy4xNS0yNi45NiAxNS41NyAwIDI3LjE1IDExLjQ2IDI3LjE1IDI2Ljk2IDAgMTUuNDEtMTEuNDcgMjYuOTYtMjcuMTUgMjYuOTYtMTUuNDQgMC0yNy4xNS0xMS4zMS0yNy4xNS0yNi45Nm03OC43NS0xNjcuM0MxNDMgMTU4Ljk1IDc1LjQ1IDE3OC43NyA0NS4yNSAyMjdMMCAwdjMzNS40OEMwIDQzMy4xMyA3OS42MSA1MTIgMTc3Ljc2IDUxMmM5OC4yNCAwIDE3Ny43Ni03OC45NSAxNzcuNzYtMTc2LjUyIDAtOTcuNDYtNzkuMzktMTc2LjUzLTE3Ny43Ni0xNzYuNTN6bTAgMzA4LjEyYy03My4yNyAwLTEzMi41MS01OC45LTEzMi41MS0xMzEuNTkgMC03Mi42OCA1OS4yNC0xMzEuNTkgMTMyLjUxLTEzMS41OSA3My4yNyAwIDEzMi41MSA1OC45MSAxMzIuNTEgMTMxLjU5cy01OS4yNSAxMzEuNTktMTMyLjUxIDEzMS41OXpcIl0sXCJuaW50ZW5kby1zd2l0Y2hcIjpbNDQ4LDUxMixbXSxcImY0MThcIixcIk05NS45IDMzLjVjLTQ0LjYgOC04MC41IDQxLTkxLjggODQuNEMwIDEzMy42LS4zIDE0Mi44LjIgMjY0LjQuNCAzNzYgLjUgMzc4LjYgMi40IDM4Ny4zYzEwLjMgNDYuNSA0My4zIDc5LjYgOTAuMyA5MC41IDYuMSAxLjQgMTMuOSAxLjcgNjQuMSAxLjkgNTEuOS40IDU3LjMuMyA1OC43LTEuMSAxLjQtMS40IDEuNS0xOS4zIDEuNS0yMjIuMiAwLTE1MC41LS4zLTIyMS4zLS45LTIyMi42LS45LTEuNy0yLjUtMS44LTU2LjktMS43LTQ0LjIuMS01Ny41LjQtNjMuMyAxLjR6bTgzLjkgMjIyLjZWNDQ0bC0zNy44LS41Yy0zNC44LS40LTM4LjUtLjYtNDUuNS0yLjMtMjkuOS03LjctNTItMzAuNy01OC4zLTYwLjctMi05LjQtMi0yNDAuMS0uMS0yNDkuMyA1LjYtMjYuMSAyMy43LTQ3LjcgNDgtNTcuNCAxMi4yLTQuOSAxNy45LTUuNSA1Ny42LTUuNmwzNS45LS4xdjE4OHptLTc1LjktMTMxLjJjLTUuOCAxLjEtMTQuNyA1LjYtMTkuNSA5LjctOS43IDguNC0xNC42IDIwLjQtMTMuOCAzNC41LjQgNy4zLjggOS4zIDMuOCAxNS4yIDQuNCA5IDEwLjkgMTUuNiAxOS45IDIwIDYuMiAzLjEgNy44IDMuNCAxNS45IDMuNyA3LjMuMyA5LjkgMCAxNC44LTEuNyAyMC4xLTYuOCAzMi4zLTI2LjMgMjguOC00Ni40LTMuOS0yMy43LTI2LjYtMzkuNy00OS45LTM1em0xNTguMi05Mi4zYy0uNC4zLS42IDEwMC44LS42IDIyMy41IDAgMjAyLjMuMSAyMjIuOCAxLjUgMjIzLjQgMi41LjkgNzQuNS42IDgzLjQtLjQgMzcuNy00LjMgNzEtMjcuMiA4OS02MS4yIDIuMy00LjQgNS40LTExLjcgNy0xNi4yIDUuOC0xNy40IDUuNy0xMi44IDUuNy0xNDYuMSAwLTEwNi40LS4yLTEyMi4zLTEuNS0xMjktOS4yLTQ4LjMtNDYuMS04NC44LTk0LjUtOTMuMS02LjUtMS4xLTE2LjUtMS40LTQ4LjgtMS40LTIyLjQtLjEtNDAuOS4yLTQxLjIuNXptOTkuMSAyMDIuMWMxNC41IDMuOCAyNi4zIDE0LjggMzEuMiAyOC45IDMuMSA4LjcgMyAyMS41LS4xIDI5LjUtNS43IDE0LjctMTYuOCAyNS0zMS4xIDI4LjgtMjMuMiA2LTQ3LjktOC01NC42LTMxLTItNy0xLjktMTguOS40LTI2LjIgNi45LTIyLjcgMzEtMzYuMSA1NC4yLTMwelwiXSxub2RlOls2NDAsNTEyLFtdLFwiZjQxOVwiLFwiTTMxNi4zIDQ1MmMtMi4xIDAtNC4yLS42LTYuMS0xLjZMMjkxIDQzOWMtMi45LTEuNi0xLjUtMi4yLS41LTIuNSAzLjgtMS4zIDQuNi0xLjYgOC43LTQgLjQtLjIgMS0uMSAxLjQuMWwxNC44IDguOGMuNS4zIDEuMy4zIDEuOCAwTDM3NSA0MDhjLjUtLjMuOS0uOS45LTEuNnYtNjYuN2MwLS43LS4zLTEuMy0uOS0xLjZsLTU3LjgtMzMuM2MtLjUtLjMtMS4yLS4zLTEuOCAwbC01Ny44IDMzLjNjLS42LjMtLjkgMS0uOSAxLjZ2NjYuN2MwIC42LjQgMS4yLjkgMS41bDE1LjggOS4xYzguNiA0LjMgMTMuOS0uOCAxMy45LTUuOHYtNjUuOWMwLS45LjctMS43IDEuNy0xLjdoNy4zYy45IDAgMS43LjcgMS43IDEuN3Y2NS45YzAgMTEuNS02LjIgMTgtMTcuMSAxOC0zLjMgMC02IDAtMTMuMy0zLjZsLTE1LjItOC43Yy0zLjctMi4yLTYuMS02LjItNi4xLTEwLjV2LTY2LjdjMC00LjMgMi4zLTguNCA2LjEtMTAuNWw1Ny44LTMzLjRjMy43LTIuMSA4LjUtMi4xIDEyLjEgMGw1Ny44IDMzLjRjMy43IDIuMiA2LjEgNi4yIDYuMSAxMC41djY2LjdjMCA0LjMtMi4zIDguNC02LjEgMTAuNWwtNTcuOCAzMy40Yy0xLjcgMS4xLTMuOCAxLjctNiAxLjd6bTQ2LjctNjUuOGMwLTEyLjUtOC40LTE1LjgtMjYuMi0xOC4yLTE4LTIuNC0xOS44LTMuNi0xOS44LTcuOCAwLTMuNSAxLjUtOC4xIDE0LjgtOC4xIDExLjkgMCAxNi4zIDIuNiAxOC4xIDEwLjYuMi44LjggMS4zIDEuNiAxLjNoNy41Yy41IDAgLjktLjIgMS4yLS41LjMtLjQuNS0uOC40LTEuMy0xLjItMTMuOC0xMC4zLTIwLjItMjguOC0yMC4yLTE2LjUgMC0yNi4zIDctMjYuMyAxOC42IDAgMTIuNyA5LjggMTYuMSAyNS42IDE3LjcgMTguOSAxLjkgMjAuNCA0LjYgMjAuNCA4LjMgMCA2LjUtNS4yIDkuMi0xNy40IDkuMi0xNS4zIDAtMTguNy0zLjgtMTkuOC0xMS40LS4xLS44LS44LTEuNC0xLjctMS40aC03LjVjLS45IDAtMS43LjctMS43IDEuNyAwIDkuNyA1LjMgMjEuMyAzMC42IDIxLjMgMTguNSAwIDI5LTcuMiAyOS0xOS44em01NC41LTUwLjFjMCA2LjEtNSAxMS4xLTExLjEgMTEuMXMtMTEuMS01LTExLjEtMTEuMWMwLTYuMyA1LjItMTEuMSAxMS4xLTExLjEgNi0uMSAxMS4xIDQuOCAxMS4xIDExLjF6bS0xLjggMGMwLTUuMi00LjItOS4zLTkuNC05LjMtNS4xIDAtOS4zIDQuMS05LjMgOS4zIDAgNS4yIDQuMiA5LjQgOS4zIDkuNCA1LjItLjEgOS40LTQuMyA5LjQtOS40em0tNC41IDYuMmgtMi42Yy0uMS0uNi0uNS0zLjgtLjUtMy45LS4yLS43LS40LTEuMS0xLjMtMS4xaC0yLjJ2NWgtMi40di0xMi41aDQuM2MxLjUgMCA0LjQgMCA0LjQgMy4zIDAgMi4zLTEuNSAyLjgtMi40IDMuMSAxLjcuMSAxLjggMS4yIDIuMSAyLjguMSAxIC4zIDIuNy42IDMuM3ptLTIuOC04LjhjMC0xLjctMS4yLTEuNy0xLjgtMS43aC0ydjMuNWgxLjljMS42IDAgMS45LTEuMSAxLjktMS44ek0xMzcuMyAxOTFjMC0yLjctMS40LTUuMS0zLjctNi40bC02MS4zLTM1LjNjLTEtLjYtMi4yLS45LTMuNC0xaC0uNmMtMS4yIDAtMi4zLjQtMy40IDFMMy43IDE4NC42QzEuNCAxODUuOSAwIDE4OC40IDAgMTkxbC4xIDk1YzAgMS4zLjcgMi41IDEuOCAzLjIgMS4xLjcgMi41LjcgMy43IDBMNDIgMjY4LjNjMi4zLTEuNCAzLjctMy44IDMuNy02LjR2LTQ0LjRjMC0yLjYgMS40LTUuMSAzLjctNi40bDE1LjUtOC45YzEuMi0uNyAyLjQtMSAzLjctMSAxLjMgMCAyLjYuMyAzLjcgMWwxNS41IDguOWMyLjMgMS4zIDMuNyAzLjggMy43IDYuNHY0NC40YzAgMi42IDEuNCA1LjEgMy43IDYuNGwzNi40IDIwLjljMS4xLjcgMi42LjcgMy43IDAgMS4xLS42IDEuOC0xLjkgMS44LTMuMmwuMi05NXpNNDcyLjUgODcuM3YxNzYuNGMwIDIuNi0xLjQgNS4xLTMuNyA2LjRsLTYxLjMgMzUuNGMtMi4zIDEuMy01LjEgMS4zLTcuNCAwbC02MS4zLTM1LjRjLTIuMy0xLjMtMy43LTMuOC0zLjctNi40di03MC44YzAtMi42IDEuNC01LjEgMy43LTYuNGw2MS4zLTM1LjRjMi4zLTEuMyA1LjEtMS4zIDcuNCAwbDE1LjMgOC44YzEuNyAxIDMuOS0uMyAzLjktMi4ydi05NGMwLTIuOCAzLTQuNiA1LjUtMy4ybDM2LjUgMjAuNGMyLjMgMS4yIDMuOCAzLjcgMy44IDYuNHptLTQ2IDEyOC45YzAtLjctLjQtMS4zLS45LTEuNmwtMjEtMTIuMmMtLjYtLjMtMS4zLS4zLTEuOSAwbC0yMSAxMi4yYy0uNi4zLS45LjktLjkgMS42djI0LjNjMCAuNy40IDEuMy45IDEuNmwyMSAxMi4xYy42LjMgMS4zLjMgMS44IDBsMjEtMTIuMWMuNi0uMy45LS45LjktMS42di0yNC4zem0yMDkuOC0uN2MyLjMtMS4zIDMuNy0zLjggMy43LTYuNFYxOTJjMC0yLjYtMS40LTUuMS0zLjctNi40bC02MC45LTM1LjRjLTIuMy0xLjMtNS4xLTEuMy03LjQgMGwtNjEuMyAzNS40Yy0yLjMgMS4zLTMuNyAzLjgtMy43IDYuNHY3MC44YzAgMi43IDEuNCA1LjEgMy43IDYuNGw2MC45IDM0LjdjMi4yIDEuMyA1IDEuMyA3LjMgMGwzNi44LTIwLjVjMi41LTEuNCAyLjUtNSAwLTYuNEw1NTAgMjQxLjZjLTEuMi0uNy0xLjktMS45LTEuOS0zLjJ2LTIyLjJjMC0xLjMuNy0yLjUgMS45LTMuMmwxOS4yLTExLjFjMS4xLS43IDIuNi0uNyAzLjcgMGwxOS4yIDExLjFjMS4xLjcgMS45IDEuOSAxLjkgMy4ydjE3LjRjMCAyLjggMy4xIDQuNiA1LjYgMy4ybDM2LjctMjEuM3pNNTU5IDIxOWMtLjQuMy0uNy43LS43IDEuMnYxMy42YzAgLjUuMyAxIC43IDEuMmwxMS44IDYuOGMuNC4zIDEgLjMgMS40IDBMNTg0IDIzNWMuNC0uMy43LS43LjctMS4ydi0xMy42YzAtLjUtLjMtMS0uNy0xLjJsLTExLjgtNi44Yy0uNC0uMy0xLS4zLTEuNCAwTDU1OSAyMTl6bS0yNTQuMiA0My41di03MC40YzAtMi42LTEuNi01LjEtMy45LTYuNGwtNjEuMS0zNS4yYy0yLjEtMS4yLTUtMS40LTcuNCAwbC02MS4xIDM1LjJjLTIuMyAxLjMtMy45IDMuNy0zLjkgNi40djcwLjRjMCAyLjggMS45IDUuMiA0IDYuNGw2MS4yIDM1LjJjMi40IDEuNCA1LjIgMS4zIDcuNCAwbDYxLTM1LjJjMS44LTEgMy4xLTIuNyAzLjYtNC43LjEtLjUuMi0xLjEuMi0xLjd6bS03NC4zLTEyNC45bC0uOC41aDEuMWwtLjMtLjV6bTc2LjIgMTMwLjJsLS40LS43di45bC40LS4yelwiXSxcIm5vZGUtanNcIjpbNDQ4LDUxMixbXSxcImYzZDNcIixcIk0yMjQgNTA4Yy02LjcgMC0xMy41LTEuOC0xOS40LTUuMmwtNjEuNy0zNi41Yy05LjItNS4yLTQuNy03LTEuNy04IDEyLjMtNC4zIDE0LjgtNS4yIDI3LjktMTIuNyAxLjQtLjggMy4yLS41IDQuNi40bDQ3LjQgMjguMWMxLjcgMSA0LjEgMSA1LjcgMGwxODQuNy0xMDYuNmMxLjctMSAyLjgtMyAyLjgtNVYxNDkuM2MwLTIuMS0xLjEtNC0yLjktNS4xTDIyNi44IDM3LjdjLTEuNy0xLTQtMS01LjcgMEwzNi42IDE0NC4zYy0xLjggMS0yLjkgMy0yLjkgNS4xdjIxMy4xYzAgMiAxLjEgNCAyLjkgNC45bDUwLjYgMjkuMmMyNy41IDEzLjcgNDQuMy0yLjQgNDQuMy0xOC43VjE2Ny41YzAtMyAyLjQtNS4zIDUuNC01LjNoMjMuNGMyLjkgMCA1LjQgMi4zIDUuNCA1LjNWMzc4YzAgMzYuNi0yMCA1Ny42LTU0LjcgNTcuNi0xMC43IDAtMTkuMSAwLTQyLjUtMTEuNmwtNDguNC0yNy45QzguMSAzODkuMi43IDM3Ni4zLjcgMzYyLjRWMTQ5LjNjMC0xMy44IDcuNC0yNi44IDE5LjQtMzMuN0wyMDQuNiA5YzExLjctNi42IDI3LjItNi42IDM4LjggMGwxODQuNyAxMDYuN2MxMiA2LjkgMTkuNCAxOS44IDE5LjQgMzMuN3YyMTMuMWMwIDEzLjgtNy40IDI2LjctMTkuNCAzMy43TDI0My40IDUwMi44Yy01LjkgMy40LTEyLjYgNS4yLTE5LjQgNS4yem0xNDkuMS0yMTAuMWMwLTM5LjktMjctNTAuNS04My43LTU4LTU3LjQtNy42LTYzLjItMTEuNS02My4yLTI0LjkgMC0xMS4xIDQuOS0yNS45IDQ3LjQtMjUuOSAzNy45IDAgNTEuOSA4LjIgNTcuNyAzMy44LjUgMi40IDIuNyA0LjIgNS4yIDQuMmgyNGMxLjUgMCAyLjktLjYgMy45LTEuN3MxLjUtMi42IDEuNC00LjFjLTMuNy00NC4xLTMzLTY0LjYtOTIuMi02NC42LTUyLjcgMC04NC4xIDIyLjItODQuMSA1OS41IDAgNDAuNCAzMS4zIDUxLjYgODEuOCA1Ni42IDYwLjUgNS45IDY1LjIgMTQuOCA2NS4yIDI2LjcgMCAyMC42LTE2LjYgMjkuNC01NS41IDI5LjQtNDguOSAwLTU5LjYtMTIuMy02My4yLTM2LjYtLjQtMi42LTIuNi00LjUtNS4zLTQuNWgtMjMuOWMtMyAwLTUuMyAyLjQtNS4zIDUuMyAwIDMxLjEgMTYuOSA2OC4yIDk3LjggNjguMiA1OC40LS4xIDkyLTIzLjIgOTItNjMuNHpcIl0sbnBtOls1NzYsNTEyLFtdLFwiZjNkNFwiLFwiTTI4OCAyODhoLTMydi02NGgzMnY2NHptMjg4LTEyOHYxOTJIMjg4djMySDE2MHYtMzJIMFYxNjBoNTc2em0tNDE2IDMySDMydjEyOGg2NHYtOTZoMzJ2OTZoMzJWMTkyem0xNjAgMEgxOTJ2MTYwaDY0di0zMmg2NFYxOTJ6bTIyNCAwSDM1MnYxMjhoNjR2LTk2aDMydjk2aDMydi05NmgzMnY5NmgzMlYxOTJ6XCJdLG5zODpbNjQwLDUxMixbXSxcImYzZDVcIixcIk0xODcuMSAxNTkuOWwtMzQuMiAxMTMuNy01NC41LTExMy43SDQ5TDAgMzIwaDQ0LjlMNzYgMjEzLjUgMTI2LjYgMzIwaDU2LjlMMjMyIDE1OS45aC00NC45em00NTIuNS0uOWMtMi45LTE4LTIzLjktMjguMS00Mi4xLTMxLjMtNDQuNi03LjgtMTAxLjkgMTYuMy04OC41IDU4Ljh2LjFjLTQzLjggOC43LTc0LjMgMjYuOC05NC4yIDQ4LjItMy05LjgtMTMuNi0xNi42LTM0LTE2LjZoLTg3LjZjLTkuMyAwLTEyLjktMi4zLTExLjUtNy40IDEuNi01LjUgMS45LTYuOCAzLjctMTIuMiAyLjEtNi40IDcuOC03LjEgMTMuMy03LjFoMTMzLjVsOS43LTMxLjVjLTEzOS43IDAtMTQ0LjUtLjUtMTYwLjEgMS4yLTEyLjMgMS4zLTIzLjUgNC44LTMwLjYgMTUtNi44IDkuOS0xNC40IDM1LjYtMTcuNiA0Ny4xLTUuNCAxOS40LS42IDI4LjYgMzIuOCAyOC42aDg3LjNjNy44IDAgOC44IDIuNyA3LjcgNi42LTEuMSA0LjQtMi44IDEwLTQuNSAxNC42LTEuNiA0LjItNC43IDcuNC0xMy44IDcuNEgyMTYuM0wyMDQuNyAzMjBjMTM5LjkgMCAxNDUuMy0uNiAxNjAuOS0yLjMgNi42LS43IDEzLTIuMSAxOC41LTQuOS4yIDMuNy41IDcuMyAxLjIgMTAuOCA1LjQgMzAuNSAyNy40IDUyLjMgNTYuOCA1OS41IDQ4LjYgMTEuOSAxMDguNy0xNi44IDEzNS4xLTY4IDE4LjctMzYuMiAxNC4xLTc2LjItMy40LTEwNS41aC4xYzI5LjYtNS45IDcwLjMtMjIgNjUuNy01MC42ek01MzAuNyAyNjMuN2MtNS45IDI5LjUtMzYuNiA0Ny44LTYxLjYgNDMuOS0zMC45LTQuOC0zOC41LTM5LjUtMTQuMS02NC44IDE2LjItMTYuOCA0NS4yLTI0IDY4LjUtMjYuOSA2LjcgMTQuMSAxMC4zIDMyIDcuMiA0Ny44em0yMS44LTgzLjFjLTQuMi02LTkuOC0xOC41LTIuNS0yNi4zIDYuNy03LjIgMjAuOS0xMC4xIDMxLjgtNy43IDE1LjMgMy40IDE5LjcgMTUuOSA0LjkgMjQuNC0xMC43IDYuMS0yMy42IDguMS0zNC4yIDkuNnpcIl0sbnV0cml0aW9uaXg6WzQwMCw1MTIsW10sXCJmM2Q2XCIsXCJNODggOC4xUzIyMS40LS4xIDIwOSAxMTIuNWMwIDAgMTkuMS03NC45IDEwMy00MC42IDAgMC0xNy43IDc0LTg4IDU2IDAgMCAxNC42LTU0LjYgNjYuMS01Ni42IDAgMC0zOS45LTEwLjMtODIuMSA0OC44IDAgMC0xOS44LTk0LjUtOTMuNi05OS43IDAgMCA3NS4yIDE5LjQgNzcuNiAxMDcuNSAwIC4xLTEwNi40IDctMTA0LTExOS44em0zMTIgMzE1LjZjMCA0OC41LTkuNyA5NS4zLTMyIDEzMi4zLTQyLjIgMzAuOS0xMDUgNDgtMTY4IDQ4LTYyLjkgMC0xMjUuOC0xNy4xLTE2OC00OEM5LjcgNDE5IDAgMzcyLjIgMCAzMjMuNyAwIDI3NS4zIDE3LjcgMjI5IDQwIDE5MmM0Mi4yLTMwLjkgOTcuMS00OC42IDE2MC00OC42IDYzIDAgMTE3LjggMTcuNiAxNjAgNDguNiAyMi4zIDM3IDQwIDgzLjMgNDAgMTMxLjd6TTEyMCA0MjhjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjggMTIuNSAyOCAyOCAyOCAyOC0xMi41IDI4LTI4em0wLTY2LjJjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjggMTIuNSAyOCAyOCAyOCAyOC0xMi41IDI4LTI4em0wLTY2LjJjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjggMTIuNSAyOCAyOCAyOCAyOC0xMi41IDI4LTI4ek0xOTIgNDI4YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4IDEyLjUgMjggMjggMjggMjgtMTIuNSAyOC0yOHptMC02Ni4yYzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4IDEyLjUgMjggMjggMjggMjgtMTIuNSAyOC0yOHptMC02Ni4yYzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4IDEyLjUgMjggMjggMjggMjgtMTIuNSAyOC0yOHpNMjY0IDQyOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6bTAtNjYuMmMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6bTAtNjYuMmMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6TTMzNiA0MjhjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjggMTIuNSAyOCAyOCAyOCAyOC0xMi41IDI4LTI4em0wLTY2LjJjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjggMTIuNSAyOCAyOCAyOCAyOC0xMi41IDI4LTI4em0wLTY2LjJjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjggMTIuNSAyOCAyOCAyOCAyOC0xMi41IDI4LTI4em0yNC0zOS42Yy00LjgtMjIuMy03LjQtMzYuOS0xNi01Ni0zOC44LTE5LjktOTAuNS0zMi0xNDQtMzJTOTQuOCAxODAuMSA1NiAyMDBjLTguOCAxOS41LTExLjIgMzMuOS0xNiA1NiA0Mi4yLTcuOSA5OC43LTE0LjggMTYwLTE0LjhzMTE3LjggNi45IDE2MCAxNC44elwiXSxvZG5va2xhc3NuaWtpOlszMjAsNTEyLFtdLFwiZjI2M1wiLFwiTTI3NS4xIDMzNGMtMjcuNCAxNy40LTY1LjEgMjQuMy05MCAyNi45bDIwLjkgMjAuNiA3Ni4zIDc2LjNjMjcuOSAyOC42LTE3LjUgNzMuMy00NS43IDQ1LjctMTkuMS0xOS40LTQ3LjEtNDcuNC03Ni4zLTc2LjZMODQgNTAzLjRjLTI4LjIgMjcuNS03My42LTE3LjYtNDUuNC00NS43IDE5LjQtMTkuNCA0Ny4xLTQ3LjQgNzYuMy03Ni4zbDIwLjYtMjAuNmMtMjQuNi0yLjYtNjIuOS05LjEtOTAuNi0yNi45LTMyLjYtMjEtNDYuOS0zMy4zLTM0LjMtNTkgNy40LTE0LjYgMjcuNy0yNi45IDU0LjYtNS43IDAgMCAzNi4zIDI4LjkgOTQuOSAyOC45czk0LjktMjguOSA5NC45LTI4LjljMjYuOS0yMS4xIDQ3LjEtOC45IDU0LjYgNS43IDEyLjQgMjUuNy0xLjkgMzgtMzQuNSA1OS4xek0zMC4zIDEyOS43QzMwLjMgNTggODguNiAwIDE2MCAwczEyOS43IDU4IDEyOS43IDEyOS43YzAgNzEuNC01OC4zIDEyOS40LTEyOS43IDEyOS40cy0xMjkuNy01OC0xMjkuNy0xMjkuNHptNjYgMGMwIDM1LjEgMjguNiA2My43IDYzLjcgNjMuN3M2My43LTI4LjYgNjMuNy02My43YzAtMzUuNC0yOC42LTY0LTYzLjctNjRzLTYzLjcgMjguNi02My43IDY0elwiXSxcIm9kbm9rbGFzc25pa2ktc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMjY0XCIsXCJNMTg0LjIgMTc3LjFjMC0yMi4xIDE3LjktNDAgMzkuOC00MHMzOS44IDE3LjkgMzkuOCA0MGMwIDIyLTE3LjkgMzkuOC0zOS44IDM5LjhzLTM5LjgtMTcuOS0zOS44LTM5Ljh6TTQ0OCA4MHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHptLTMwNS4xIDk3LjFjMCA0NC42IDM2LjQgODAuOSA4MS4xIDgwLjlzODEuMS0zNi4yIDgxLjEtODAuOWMwLTQ0LjgtMzYuNC04MS4xLTgxLjEtODEuMXMtODEuMSAzNi4yLTgxLjEgODEuMXptMTc0LjUgOTAuN2MtNC42LTkuMS0xNy4zLTE2LjgtMzQuMS0zLjYgMCAwLTIyLjcgMTgtNTkuMyAxOHMtNTkuMy0xOC01OS4zLTE4Yy0xNi44LTEzLjItMjkuNS01LjUtMzQuMSAzLjYtNy45IDE2LjEgMS4xIDIzLjcgMjEuNCAzNyAxNy4zIDExLjEgNDEuMiAxNS4yIDU2LjYgMTYuOGwtMTIuOSAxMi45Yy0xOC4yIDE4LTM1LjUgMzUuNS00Ny43IDQ3LjctMTcuNiAxNy42IDEwLjcgNDUuOCAyOC40IDI4LjZsNDcuNy00Ny45YzE4LjIgMTguMiAzNS43IDM1LjcgNDcuNyA0Ny45IDE3LjYgMTcuMiA0Ni0xMC43IDI4LjYtMjguNmwtNDcuNy00Ny43LTEzLTEyLjljMTUuNS0xLjYgMzkuMS01LjkgNTYuMi0xNi44IDIwLjQtMTMuMyAyOS4zLTIxIDIxLjUtMzd6XCJdLFwib2xkLXJlcHVibGljXCI6WzQ5Niw1MTIsW10sXCJmNTEwXCIsXCJNMjM1Ljc2IDEwLjIzYzcuNS0uMzEgMTUtLjI4IDIyLjUtLjA5IDMuNjEuMTQgNy4yLjQgMTAuNzkuNzMgNC45Mi4yNyA5Ljc5IDEuMDMgMTQuNjcgMS42MiAyLjkzLjQzIDUuODMuOTggOC43NSAxLjQ2IDcuOSAxLjMzIDE1LjY3IDMuMjggMjMuMzkgNS40IDEyLjI0IDMuNDcgMjQuMTkgNy45MiAzNS43NiAxMy4yMSAyNi41NiAxMi4yNCA1MC45NCAyOS4yMSA3MS42MyA0OS44OCAyMC4wMyAyMC4wOSAzNi43MiA0My41NSA0OC44OSA2OS4xOSAxLjEzIDIuNTkgMi40NCA1LjEgMy40NyA3Ljc0IDIuODEgNi40MyA1LjM5IDEyLjk3IDcuNTggMTkuNjMgNC4xNCAxMi4zMyA3LjM0IDI0Ljk5IDkuNDIgMzcuODMuNTcgMy4xNCAxLjA0IDYuMyAxLjQgOS40Ny41NSAzLjgzLjk0IDcuNjkgMS4xOCAxMS41Ni44MyA4LjM0Ljg0IDE2LjczLjc3IDI1LjEtLjA3IDQuOTctLjI2IDkuOTQtLjc1IDE0Ljg5LS4yNCAzLjM4LS41MSA2Ljc2LS45OCAxMC4xMi0uMzkgMi43Mi0uNjMgNS40Ni0xLjExIDguMTctLjkgNS4xNS0xLjcgMTAuMzEtMi44NyAxNS40MS00LjEgMTguNS0xMC4zIDM2LjU1LTE4LjUxIDUzLjYzLTE1Ljc3IDMyLjgzLTM4LjgzIDYyLjE3LTY3LjEyIDg1LjEyYTI0Ni41MDMgMjQ2LjUwMyAwIDAgMS01Ni45MSAzNC44NmMtNi4yMSAyLjY4LTEyLjQ2IDUuMjUtMTguODcgNy40MS0zLjUxIDEuMTYtNy4wMSAyLjM4LTEwLjU3IDMuMzktNi42MiAxLjg4LTEzLjI5IDMuNjQtMjAuMDQgNS00LjY2LjkxLTkuMzQgMS43My0xNC4wMyAyLjQ4LTUuMjUuNjYtMTAuNSAxLjQ0LTE1Ljc5IDEuNzQtNi42OS42Ni0xMy40MS44NC0yMC4xMi44MS02LjgyLjAzLTEzLjY1LS4xMi0yMC40NS0uNzktMy4yOS0uMjMtNi41Ny0uNS05LjgzLS45NS0yLjcyLS4zOS01LjQ2LS42My04LjE3LTEuMTEtNC4xMi0uNzItOC4yNS0xLjM3LTEyLjM1LTIuMjItNC4yNS0uOTQtOC40OS0xLjg5LTEyLjY5LTMuMDItOC42My0yLjE3LTE3LjA4LTUuMDEtMjUuNDEtOC4xMy0xMC40OS00LjEyLTIwLjc5LTguNzUtMzAuNjQtMTQuMjUtMi4xNC0xLjE1LTQuMjgtMi4yOS02LjM1LTMuNTctMTEuMjItNi41OC0yMS44Ni0xNC4xLTMxLjkyLTIyLjM0LTM0LjY4LTI4LjQxLTYxLjQxLTY2LjQzLTc2LjM1LTEwOC43LTMuMDktOC43NC01LjcxLTE3LjY1LTcuOC0yNi42OC0xLjQ4LTYuMTYtMi41Mi0xMi40Mi0zLjU4LTE4LjY2LS40LTIuMzUtLjYxLTQuNzMtLjk1LTcuMDktLjYtMy45Ni0uNzUtNy45Ni0xLjE3LTExLjk0LS44LTkuNDctLjcxLTE4Ljk5LS41MS0yOC40OS4xNC0zLjUxLjM0LTcuMDEuNy0xMC41MS4zMS0zLjE3LjQ2LTYuMzcuOTItOS41Mi40MS0yLjgxLjY1LTUuNjUgMS4xNi04LjQ0LjctMy45NCAxLjMtNy45IDIuMTItMTEuODIgMy40My0xNi41MiA4LjQ3LTMyLjczIDE1LjI2LTQ4LjE4IDEuMTUtMi45MiAyLjU5LTUuNzIgMy44Ni04LjU5IDguMDUtMTYuNzEgMTcuOS0zMi41NiAyOS40OS00Ny4wNiAyMC0yNS4zOCA0NS4xLTQ2LjY4IDczLjI3LTYyLjQ3IDcuNS00LjE1IDE1LjE2LTguMDUgMjMuMDctMTEuMzcgMTUuODItNi44OCAzMi40MS0xMS45NSA0OS4zMS0xNS4zOCAzLjUxLS42NyA3LjA0LTEuMjQgMTAuNTYtMS44NSAyLjYyLS40NyA1LjI4LS43IDcuOTEtMS4wOCAzLjUzLS41MyA3LjEtLjY4IDEwLjY1LTEuMDQgMi40Ni0uMjQgNC45MS0uMzYgNy4zNi0uNTFtOC42NCAyNC40MWMtOS4yMy4xLTE4LjQzLjk5LTI3LjU3IDIuMjMtNy4zIDEuMDgtMTQuNTMgMi42LTIxLjcxIDQuMy0xMy45MSAzLjUtMjcuNDggOC4zNC00MC40NiAxNC40Mi0xMC40NiA0Ljk5LTIwLjU5IDEwLjctMzAuMTggMTcuMjItNC4xOCAyLjkyLTguNCA1LjgtMTIuMzQgOS4wMy01LjA4IDMuOTctOS45OCA4LjE3LTE0LjY4IDEyLjU5LTIuNTEgMi4yNC00LjgxIDQuNy03LjIyIDcuMDYtMjguMjIgMjguNzktNDguNDQgNjUuMzktNTcuNSAxMDQuNjktMi4wNCA4LjQ0LTMuNTQgMTcuMDItNC40NCAyNS42NS0xLjEgOC44OS0xLjQ0IDE3Ljg1LTEuNDEgMjYuOC4xMSA3LjE0LjM4IDE0LjI4IDEuMjIgMjEuMzcuNjIgNy4xMiAxLjg3IDE0LjE2IDMuMiAyMS4xOCAxLjA3IDQuNjUgMi4wMyA5LjMyIDMuMzMgMTMuOTEgNi4yOSAyMy4zOCAxNi41IDQ1LjcgMzAuMDcgNjUuNzUgOC42NCAxMi45OCAxOC43OCAyNC45MyAyOS45OCAzNS43NyAxNi4yOCAxNS44MiAzNS4wNSAyOS4wNCA1NS4zNCAzOS4yMiA3LjI4IDMuNTIgMTQuNjYgNi44NyAyMi4yNyA5LjYzIDUuMDQgMS43NiAxMC4wNiAzLjU3IDE1LjIyIDQuOTggMTEuMjYgMy4yMyAyMi43NyA1LjYgMzQuMzkgNy4wNiAyLjkxLjI5IDUuODEuNjEgOC43Mi45IDEzLjgyIDEuMDggMjcuNzQgMSA0MS41NC0uNDMgNC40NS0uNiA4LjkyLS45OSAxMy4zNS0xLjc4IDMuNjMtLjY3IDcuMjgtMS4yNSAxMC44Ny0yLjEgNC4xMy0uOTggOC4yOC0xLjkxIDEyLjM2LTMuMDcgMjYuNS03LjM0IDUxLjU4LTE5LjcxIDczLjU4LTM2LjIgMTUuNzgtMTEuODIgMjkuOTYtMjUuNzYgNDIuMTItNDEuMjggMy4yNi00LjAyIDYuMTctOC4zMSA5LjEzLTEyLjU1IDMuMzktNS4wNiA2LjU4LTEwLjI1IDkuNi0xNS41NCAyLjQtNC40NCA0Ljc0LTguOTEgNi45NS0xMy40NSA1LjY5LTEyLjA1IDEwLjI4LTI0LjYyIDEzLjc1LTM3LjQ5IDIuNTktMTAuMDEgNC43NS0yMC4xNiA1LjktMzAuNDUgMS43Ny0xMy40NyAxLjk0LTI3LjEgMS4yOS00MC42NS0uMjktMy44OS0uNjctNy43Ny0xLTExLjY2LTIuMjMtMTkuMDgtNi43OS0zNy45MS0xMy44Mi01NS44LTUuOTUtMTUuMTMtMTMuNTMtMjkuNjMtMjIuNjEtNDMuMTMtMTIuNjktMTguOC0yOC4yNC0zNS42OC00NS45Ny00OS44My0yNS4wNS0yMC01NC40Ny0zNC41NS04NS42NS00Mi4wOC03Ljc4LTEuOTMtMTUuNjktMy4zNC0yMy42My00LjQ1LTMuOTEtLjU5LTcuODUtLjgyLTExLjc3LTEuMjQtNy4zOS0uNTctMTQuODEtLjcyLTIyLjIyLS41OHpNMTM5LjI2IDgzLjUzYzEzLjMtOC44OSAyOC4wOC0xNS4zOCA0My4zLTIwLjE4LTMuMTcgMS43Ny02LjQ0IDMuMzgtOS41MyA1LjI5LTExLjIxIDYuNjgtMjEuNTIgMTQuOS0zMC4zOCAyNC40OS02LjggNy40My0xMi43NiAxNS43My0xNy4wMSAyNC44OS0zLjI5IDYuODYtNS42NCAxNC4xOS02Ljg2IDIxLjcxLS45MyA0Ljg1LTEuMyA5LjgxLTEuMTcgMTQuNzUuMTMgMTMuNjYgNC40NCAyNy4wOCAxMS4yOSAzOC44MiA1LjkyIDEwLjIyIDEzLjYzIDE5LjMzIDIyLjM2IDI3LjI2IDQuODUgNC4zNiAxMC4yNCA4LjA5IDE0Ljk1IDEyLjYgMi4yNiAyLjE5IDQuNDkgNC40MiA2LjQzIDYuOTEgMi42MiAzLjMxIDQuODkgNi45OSA1Ljk5IDExLjEuOSAzLjAyLjY2IDYuMi42OSA5LjMxLjAyIDQuMS0uMDQgOC4yLjAzIDEyLjMuMTQgMy41NC0uMDIgNy4wOS4xMSAxMC42My4wOCAyLjM4LjAyIDQuNzYuMDUgNy4xNC4xNiA1Ljc3LjA2IDExLjUzLjE1IDE3LjMuMTEgMi45MS4wMiA1LjgyLjEzIDguNzQuMDMgMS42My4xMyAzLjI4LS4wMyA0LjkxLS45MS4xMi0xLjgyLjE4LTIuNzMuMTYtMTAuOTkgMC0yMS44OC0yLjYzLTMxLjk1LTYuOTMtNi0yLjctMTEuODEtNS44OS0xNy4wOS05LjgzLTUuNzUtNC4xOS0xMS4wOS04Ljk2LTE1Ljc5LTE0LjMxLTYuNTMtNy4yNC0xMS45OC0xNS4zOS0xNi42Mi0yMy45NS0xLjA3LTIuMDMtMi4yNC00LjAyLTMuMTgtNi4xMi0xLjE2LTIuNjQtMi42Mi01LjE0LTMuNjctNy44Mi00LjA1LTkuNjgtNi41Ny0xOS45NC04LjA4LTMwLjMxLS40OS00LjQ0LTEuMDktOC44OC0xLjItMTMuMzUtLjctMTUuNzMuODQtMzEuNTUgNC42Ny00Ni44MiAyLjEyLTguMTUgNC43Ny0xNi4xOCA4LjMxLTIzLjgzIDYuMzItMTQuMiAxNS4zNC0yNy4xOCAyNi4zLTM4LjE5IDYuMjgtNi4yIDEzLjEzLTExLjg0IDIwLjUzLTE2LjY3em0xNzUuMzctMjAuMTJjMi43NC43NCA1LjQxIDEuNzQgOC4wOSAyLjY4IDYuMzYgMi4zMyAxMi42OCA0Ljg0IDE4LjcxIDcuOTYgMTMuMTEgNi40NCAyNS4zMSAxNC44MSAzNS44MiAyNC45NyAxMC4yIDkuOTUgMTguNzQgMjEuNiAyNS4xNCAzNC4zNCAxLjI4IDIuNzUgMi42NCA1LjQ2IDMuODEgOC4yNiA2LjMxIDE1LjEgMTAgMzEuMjYgMTEuMjMgNDcuNTcuNDEgNC41NC40NCA5LjA5LjQ1IDEzLjY0LjA3IDExLjY0LTEuNDkgMjMuMjUtNC4zIDM0LjUzLTEuOTcgNy4yNy00LjM1IDE0LjQ5LTcuODYgMjEuMTgtMy4xOCA2LjY0LTYuNjggMTMuMTYtMTAuODQgMTkuMjQtNi45NCAxMC40Ny0xNS42IDE5Ljg3LTI1LjgyIDI3LjIyLTEwLjQ4IDcuNjQtMjIuNjQgMTMuMDItMzUuNCAxNS4zOC0zLjUxLjY5LTcuMDggMS4wOC0xMC42NiAxLjIxLTEuODUuMDYtMy43Mi4xNi01LjU2LS4xLS4yOC0yLjE1IDAtNC4zMS0uMDEtNi40Ni0uMDMtMy43My4xNC03LjQ1LjEtMTEuMTcuMTktNy4wMi4wMi0xNC4wNS4yMS0yMS4wNy4wMy0yLjM4LS4wMy00Ljc2LjAzLTcuMTQuMTctNS4wNy0uMDQtMTAuMTQuMTQtMTUuMjEuMS0yLjk5LS4yNC02LjA0LjUxLTguOTYuNjYtMi41IDEuNzgtNC44NiAzLjA5LTcuMDggNC40Ni03LjMxIDExLjA2LTEyLjk2IDE3LjY4LTE4LjI2IDUuMzgtNC4xOCAxMC40Ny04Ljc3IDE1LjAyLTEzLjg0IDcuNjgtOC4zNyAxNC4xNy0xNy44OCAxOC43OC0yOC4yNyAyLjUtNS45MyA0LjUyLTEyLjEgNS41NS0xOC40Ni44Ni00LjM3IDEuMDYtOC44MyAxLjAxLTEzLjI3LS4wMi03Ljg1LTEuNC0xNS42NS0zLjY0LTIzLjE3LTEuNzUtNS43My00LjI3LTExLjE4LTcuMDktMTYuNDUtMy44Ny02LjkzLTguNjUtMTMuMzEtMTMuOTYtMTkuMi05Ljk0LTEwLjg1LTIxLjc1LTE5Ljk0LTM0LjYtMjcuMS0xLjg1LTEuMDItMy44NC0xLjgyLTUuNjMtMi45N3ptLTEwMC44IDU4LjQ1Yy45OC0xLjE4IDEuOTktMi4zMyAzLjEyLTMuMzgtLjYxLjkzLTEuMjcgMS44MS0xLjk1IDIuNjgtMy4xIDMuODgtNS41NCA4LjMxLTcuMDMgMTMuMDYtLjg3IDMuMjctMS42OCA2LjYtMS43MyAxMC0uMDcgMi41Mi0uMDggNS4wNy4zMiA3LjU3IDEuMTMgNy42MyA0LjMzIDE0Ljg1IDguNzcgMjEuMTIgMiAyLjcgNC4yNSA1LjI3IDYuOTIgNy4zMyAxLjYyIDEuMjcgMy41MyAyLjA5IDUuMzQgMy4wNSAzLjExIDEuNjggNi4zMiAzLjIzIDkuMDcgNS40OCAyLjY3IDIuMDkgNC41NSA1LjMzIDQuNCA4Ljc5LS4wMSA3My42NyAwIDE0Ny4zNC0uMDEgMjIxLjAyIDAgMS4zNS0uMDggMi43LjA0IDQuMDQuMTMgMS40OC44MiAyLjgzIDEuNDcgNC4xNS44NiAxLjY2IDEuNzggMy4zNCAzLjE4IDQuNjIuODUuNzcgMS45NyAxLjQgMy4xNSAxLjI0IDEuNS0uMiAyLjY2LTEuMzUgMy40NS0yLjU3Ljk2LTEuNTEgMS42OC0zLjE2IDIuMjgtNC44NS43Ni0yLjEzLjQ0LTQuNDIuNTQtNi42My4xNC00LjAzLS4wMi04LjA2LjE0LTEyLjA5LjAzLTUuODkuMDMtMTEuNzcuMDYtMTcuNjYuMTQtMy42Mi4wMy03LjI0LjExLTEwLjg2LjE1LTQuMDMtLjAyLTguMDYuMTQtMTIuMDkuMDMtNS45OS4wMy0xMS45OC4wNy0xNy45Ny4xNC0zLjYyLjAyLTcuMjQuMTEtMTAuODYuMTQtMy45My0uMDItNy44Ni4xNC0xMS43OC4wMy01Ljk5LjAzLTExLjk4LjA2LTE3Ljk3LjE2LTMuOTQtLjAxLTcuODguMTktMTEuODIuMjkgMS40NC4xMyAyLjkyLjIyIDQuMzguMTkgMy42MS40MiA3LjIzLjc2IDEwLjg0LjMyIDMuNDQuNDQgNi44OS44NiAxMC4zMi4zNyAzLjEuNTEgNi4yMi45NSA5LjMxLjU3IDQuMDkuODcgOC4yMSAxLjU0IDEyLjI5IDEuNDYgOS4wNCAyLjgzIDE4LjExIDUuMDkgMjYuOTkgMS4xMyA0LjgyIDIuNCA5LjYxIDQgMTQuMyAyLjU0IDcuOSA1LjcyIDE1LjY3IDEwLjMxIDIyLjYyIDEuNzMgMi42NCAzLjg3IDQuOTggNi4xIDcuMjEuMjcuMjUuNTUuNTEuODguNzEuNi4yNSAxLjMxLS4wNyAxLjctLjU3LjcxLS44OCAxLjE3LTEuOTQgMS43LTIuOTMgNC4wNS03LjggOC4xOC0xNS41NiAxMi4zNC0yMy4zMS43LTEuMzEgMS40NC0yLjYyIDIuNTYtMy42MSAxLjc1LTEuNTcgMy44NC0yLjY5IDUuOTgtMy42MyAyLjg4LTEuMjIgNS45LTIuMTkgOS4wMy0yLjQyIDYuNTgtLjYyIDEzLjExLjc1IDE5LjU2IDEuODUgMy42OS41OCA3LjQgMS4xNyAxMS4xMyAxLjQxIDMuNzQuMSA3LjQ4LjA1IDExLjIxLS4yOCA4LjU1LS45MiAxNi45OS0yLjk2IDI0Ljk0LTYuMjUgNS4zLTIuMjQgMTAuNDYtNC44MyAxNS4zMS03LjkzIDExLjQ2LTcuMjEgMjEuNDYtMTYuNTcgMzAuMDQtMjcuMDEgMS4xNy0xLjQyIDIuMjUtMi45IDMuNDYtNC4yOC0xLjIgMy4yNC0yLjY3IDYuMzctNC4xNiA5LjQ4LTEuMjUgMi45LTIuODQgNS42MS00LjI3IDguNDItNS4xNiA5LjYzLTExLjAyIDE4LjkxLTE3Ljc1IDI3LjUyLTQuMDMgNS4yMS04LjUzIDEwLjA1LTEzLjMzIDE0LjU3LTYuNjQgNi4wNS0xNC4wNyAxMS4zNy0yMi40MyAxNC43Ni04LjIxIDMuMzctMTcuMzEgNC42My0yNi4wOSAzLjI5LTMuNTYtLjU4LTcuMDEtMS42OS0xMC40MS0yLjg4LTIuNzktLjk3LTUuMzktMi4zOC04LjAzLTMuNjktMy40My0xLjcxLTYuNjQtMy44MS05LjcxLTYuMDggMi43MSAzLjA2IDUuNjkgNS44NiA4LjcgOC42MSA0LjI3IDMuNzYgOC43NCA3LjMxIDEzLjYzIDEwLjIzIDMuOTggMi40NSA4LjI5IDQuNCAxMi44NCA1LjUxIDEuNDYuMzcgMi45Ni40NiA0LjQ1LjYtMS4yNSAxLjEtMi42MyAyLjA0LTMuOTkgMi45OC05LjYxIDYuNTQtMjAuMDEgMTEuODYtMzAuNjkgMTYuNDMtMjAuODYgOC43LTQzLjE3IDEzLjk3LTY1Ljc0IDE1LjM0LTQuNjYuMjQtOS4zMi4zNi0xMy45OC4zNi00Ljk4LS4xMS05Ljk3LS4xMy0xNC45Mi0uNjUtMTEuMi0uNzYtMjIuMjktMi43My0zMy4xNy01LjQzLTEwLjM1LTIuNzEtMjAuNTUtNi4xMi0zMC4zLTEwLjU1LTguNzEtMy44Ni0xNy4xMi04LjQyLTI0Ljk5LTEzLjc5LTEuODMtMS4zMS0zLjc0LTIuNTMtNS4zNy00LjA4IDYuNi0xLjE5IDEzLjAzLTMuMzkgMTguOTktNi40OCA1Ljc0LTIuODYgMTAuOTktNi42NiAxNS42My0xMS4wNyAyLjI0LTIuMTkgNC4yOS00LjU5IDYuMTktNy4wOS0zLjQzIDIuMTMtNi45MyA0LjE1LTEwLjYyIDUuNzgtNC40MSAyLjE2LTkuMDcgMy43Ny0xMy44MSA1LjAyLTUuNzMgMS41Mi0xMS43NCAxLjczLTE3LjYxIDEuMTQtOC4xMy0uOTUtMTUuODYtNC4yNy0yMi41MS04Ljk4LTQuMzItMi45NC04LjIyLTYuNDMtMTEuOTYtMTAuMDYtOS45My0xMC4xNi0xOC4yLTIxLjgxLTI1LjY2LTMzLjg2LTMuOTQtNi4yNy03LjUzLTEyLjc1LTExLjEyLTE5LjIyLTEuMDUtMi4wNC0yLjE1LTQuMDUtMy4xOC02LjEgMi44NSAyLjkyIDUuNTcgNS45NyA4LjQzIDguODggOC45OSA4Ljk3IDE4LjU2IDE3LjQ0IDI5LjE2IDI0LjQ4IDcuNTUgNC45IDE1LjY3IDkuMjMgMjQuNTYgMTEuMDMgMy4xMS43MyA2LjMyLjQ3IDkuNDcuODEgMi43Ny4yOCA1LjU2LjIgOC4zNC4zIDUuMDUuMDYgMTAuMTEuMDQgMTUuMTYtLjE2IDMuNjUtLjE2IDcuMjctLjY2IDEwLjg5LTEuMDkgMi4wNy0uMjUgNC4xMS0uNzEgNi4xNC0xLjIgMy44OC0uOTUgOC4xMS0uOTYgMTEuODMuNjEgNC43NiAxLjg1IDguNDQgNS42NCAxMS4zOCA5LjcxIDIuMTYgMy4wMiA0LjA2IDYuMjIgNS42NiA5LjU4IDEuMTYgMi40MyAyLjQ2IDQuNzkgMy41NSA3LjI2IDEgMi4yNCAyLjE1IDQuNDIgMy40MiA2LjUyLjY3IDEuMDIgMS40IDIuMTUgMi42MiAyLjU1IDEuMDYtLjc1IDEuNzEtMS45MSAyLjI4LTMuMDMgMi4xLTQuMTYgMy40Mi04LjY1IDQuODktMTMuMDUgMi4wMi02LjU5IDMuNzgtMTMuMjcgNS4xOS0yMC4wMiAyLjIxLTkuMjUgMy4yNS0xOC43MiA0LjU0LTI4LjEzLjU2LTMuOTguODMtNy45OSAxLjMxLTExLjk3Ljg3LTEwLjY0IDEuOS0yMS4yNyAyLjI0LTMxLjk0LjA4LTEuODYuMjQtMy43MS4yNS01LjU3LjAxLTQuMzUuMjUtOC42OS4yMi0xMy4wMy0uMDEtMi4zOC0uMDEtNC43NiAwLTcuMTMuMDUtNS4wNy0uMi0xMC4xNC0uMjItMTUuMjEtLjItNi42MS0uNzEtMTMuMi0xLjI5LTE5Ljc4LS43My01Ljg4LTEuNTUtMTEuNzgtMy4xMi0xNy41MS0yLjA1LTcuNzUtNS41OS0xNS4wMy05LjgtMjEuODItMy4xNi01LjA3LTYuNzktOS44OC0xMS4wOS0xNC4wMy0zLjg4LTMuODYtOC41OC03LjA4LTEzLjk0LTguNDUtMS41LS40MS0zLjA2LS40NS00LjU5LS42NC4wNy0yLjk5LjctNS45MyAxLjI2LTguODUgMS41OS03LjcxIDMuOC0xNS4zIDYuNzYtMjIuNiAxLjUyLTQuMDMgMy40MS03LjkgNS4zOS0xMS43MiAzLjQ1LTYuNTYgNy42Mi0xMi43OSAxMi40Ni0xOC40NnptMzEuMjcgMS43Yy4zNS0uMDYuNzEtLjEyIDEuMDctLjE5LjE5IDEuNzkuMDkgMy41OC4xIDUuMzd2MzguMTNjLS4wMSAxLjc0LjEzIDMuNDktLjE1IDUuMjItLjM2LS4wMy0uNzEtLjA1LTEuMDYtLjA1LS45NS0zLjc1LTEuNzItNy41NS0yLjYyLTExLjMxLS4zOC0xLjUzLS41OC0zLjA5LTEuMDctNC41OS0xLjctLjI0LTMuNDMtLjE3LTUuMTUtLjItNS4wNi0uMDEtMTAuMTMgMC0xNS4xOS0uMDEtMS42Ni0uMDEtMy4zMi4wOS00Ljk4LS4wMy0uMDMtLjM5LS4yNi0uOTEuMTYtMS4xOCAxLjI4LS42NSAyLjcyLS44OCA0LjA2LTEuMzUgMy40My0xLjE0IDYuODgtMi4xNiAxMC4zMS0zLjMxIDEuMzktLjQ4IDIuOS0uNzIgNC4xNi0xLjU0LjA0LS41Ni4wMi0xLjEzLS4wNS0xLjY4LTEuMjMtLjU1LTIuNTMtLjg3LTMuODEtMS4yOC0zLjEzLTEuMDMtNi4yOS0xLjk2LTkuNDEtMy4wMi0xLjc5LS42Mi0zLjY3LTEtNS40MS0xLjc5LS4wMy0uMzctLjA3LS43My0uMTEtMS4wOSA1LjA5LS4xOSAxMC4yLjA2IDE1LjMtLjEyIDMuMzYtLjEzIDYuNzMuMDggMTAuMDktLjA3LjEyLS4zOS4yNi0uNzcuMzctMS4xNiAxLjA4LTQuOTQgMi4zMy05LjgzIDMuMzktMTQuNzV6bTUuOTctLjJjLjM2LjA1LjcyLjEyIDEuMDguMi45OCAzLjg1IDEuNzMgNy43NiAyLjcxIDExLjYxLjM2IDEuNDIuNTYgMi44OCAxLjAzIDQuMjcgMi41My4xOCA1LjA3LS4wMSA3LjYxLjA1IDUuMTYuMTIgMTAuMzMuMTIgMTUuNDkuMDcuNzYtLjAxIDEuNTIuMDMgMi4yOC4wOC0uMDQuMzYtLjA3LjcyLS4xIDEuMDgtMS44Mi44My0zLjc4IDEuMjUtNS42NyAxLjg5LTMuNzMgMS4yMy03LjQ4IDIuMzktMTEuMjIgMy41Ny0uNTcuMTctMS4xMi40Mi0xLjY3LjY0LS4xNS41NS0uMTggMS4xMi0uMTIgMS42OS44Ny40OCAxLjgyLjgxIDIuNzcgMS4wOSA0Ljg4IDEuNTIgOS43MyAzLjE0IDE0LjYzIDQuNi4zOC4xMy43OC4yNyAxLjEzLjQ5LjQuMjcuMjMuNzkuMTUgMS4xOC0xLjY2LjEzLTMuMzEuMDMtNC45Ny4wNC01LjE3LjAxLTEwLjMzLS4wMS0xNS41LjAxLTEuNjEuMDMtMy4yMi0uMDItNC44Mi4yMS0uNTIgMS42Ny0uNzIgMy40Mi0xLjE3IDUuMTEtLjk0IDMuNTctMS41MiA3LjI0LTIuNTQgMTAuNzgtLjM2LjAxLS43MS4wMi0xLjA2LjA2LS4yOS0xLjczLS4xNS0zLjQ4LS4xNS01LjIydi0zOC4xM2MuMDItMS43OC0uMDgtMy41OC4xMS01LjM3ek02NS4wNSAxNjguMzNjMS4xMi0yLjE1IDIuMDgtNC40IDMuMzctNi40Ni0xLjgyIDcuNTYtMi45MSAxNS4yNy0zLjYyIDIzLS44IDcuNzEtLjg1IDE1LjQ5LS41NCAyMy4yMyAxLjA1IDE5Ljk0IDUuNTQgMzkuODMgMTQuMjMgNTcuODggMi45OSA1Ljk5IDYuMzUgMTEuODMgMTAuNSAxNy4xMSA2LjEyIDcuNDcgMTIuNTMgMTQuNzYgMTkuODQgMjEuMDkgNC44IDQuMSA5Ljk5IDcuNzggMTUuNTQgMTAuOCAzLjI3IDEuNjUgNi41MSAzLjM5IDkuOTQgNC42OCA1LjAxIDIuMDMgMTAuMTkgMy42MSAxNS40MiA0Ljk0IDMuODMuOTYgNy43OCAxLjQxIDExLjUyIDIuNzEgNSAxLjU3IDkuNDcgNC42MSAxMy4wMyA4LjQzIDQuOTMgNS4yMyA4LjA5IDExLjg3IDEwLjIgMTguNjcuOTkgMi45IDEuNTkgNS45MSAyLjE3IDguOTIuMTUuNzUuMjIgMS41Mi4xNiAyLjI5LTYuNSAyLjc4LTEzLjI2IDUuMDYtMjAuMjYgNi4xOC00LjExLjc4LTguMjkuOTktMTIuNDYgMS4wOC0xMC4yNS4yNC0yMC40Ny0xLjc2LTMwLjEyLTUuMTItMy43NC0xLjQyLTcuNDktMi44NS0xMS4wMy00LjcyLTguMDYtMy44NC0xNS42NC04LjctMjIuNDYtMTQuNDYtMi45Mi0yLjU1LTUuODMtNS4xMy04LjQtOC4wMy05LjE2LTkuODMtMTYuMy0yMS40MS0yMS43OS0zMy42NS0yLjM5LTUuNTUtNC42MS0xMS4xOC02LjM3LTE2Ljk2LTEuMTctMy45NC0yLjM2LTcuODktMy4yNi0xMS45MS0uNzUtMi45NC0xLjIyLTUuOTUtMS44Ny04LjkyLS40Ni0yLjE0LS42OS00LjMyLTEuMDMtNi40OC0uODUtNS40My0xLjI4LTEwLjkzLTEuMzMtMTYuNDMuMTEtNi4xOC4yNS0xMi4zNyAxLjA3LTE4LjUuNC0yLjg2LjY3LTUuNzQgMS4xNS04LjYuOTgtNS43IDIuMTQtMTEuMzcgMy43MS0xNi45MyAzLjA5LTExLjY1IDcuNDgtMjIuOTUgMTIuNjktMzMuODR6bTM2My43My02LjQ0YzEuMSAxLjY2IDEuOTEgMy40OCAyLjc4IDUuMjYgMi4xIDQuNDUgNC4yNCA4LjkgNi4wMiAxMy40OSA3LjYxIDE4Ljc2IDEyLjMgMzguNzkgMTMuMDQgNTkuMDUuMDIgMS43Ni4wNyAzLjUyLjExIDUuMjkuMTMgOS41Ny0xLjI3IDE5LjA5LTMuMTggMjguNDUtLjczIDMuNTktMS41NCA3LjE3LTIuNTggMTAuNjktNC4wNCAxNC43Mi0xMCAyOS0xOC40MSA0MS43OC04LjIxIDEyLjU3LTE5LjAxIDIzLjU1LTMxLjg0IDMxLjQxLTUuNzMgMy41OS0xMS43OSA2LjY0LTE4LjA1IDkuMTktNS43OCAyLjE5LTExLjcxIDQuMDMtMTcuOCA1LjExLTYuNCAxLjA1LTEyLjkxIDEuNTItMTkuNCAxLjIzLTcuOTItLjQ4LTE1Ljc4LTIuMDctMjMuMjEtNC44NS0xLjk0LS44LTMuOTQtMS40Ni01Ljg0LTIuMzMtLjIxLTEuNTEuMjUtMi45OS41My00LjQ2IDEuMTYtNS43NCAzLjAzLTExLjM2IDUuNy0xNi41OCAyLjM3LTQuNTEgNS41Mi04LjY1IDkuNDYtMTEuOSAyLjQzLTIuMDUgNS4yNC0zLjYxIDguMTYtNC44MyAzLjU4LTEuNSA3LjQ3LTEuOTcgMTEuMjQtMi44MyA3LjIzLTEuNzEgMTQuMzctMy45MyAyMS4xNS03IDEwLjM1LTQuNjUgMTkuNzEtMTEuMzggMjcuNjUtMTkuNDYgMS41OS0xLjYxIDMuMjMtMy4xOCA0Ljc0LTQuODcgMy4zNy0zLjc2IDYuNzEtNy41NyA5Ljg1LTExLjUzIDcuNDgtMTAuMDcgMTIuODItMjEuNTkgMTYuNzEtMzMuNDggMS41OC01LjMgMy4yMS0xMC42IDQuMjEtMTYuMDUuNjMtMi44NyAxLjA0LTUuNzggMS41Mi04LjY4Ljg3LTYuMDkgMS41OS0xMi4yMiAxLjY4LTE4LjM4LjEyLTYuNjUuMTQtMTMuMzItLjUzLTE5Ljk0LS43My03Ljk5LTEuODctMTUuOTYtMy43MS0yMy43OHpcIl0sb3BlbmNhcnQ6WzY0MCw1MTIsW10sXCJmMjNkXCIsXCJNNDIzLjMgNDQwLjdjMCAyNS4zLTIwLjMgNDUuNi00NS42IDQ1LjZzLTQ1LjgtMjAuMy00NS44LTQ1LjYgMjAuNi00NS44IDQ1LjgtNDUuOGMyNS40IDAgNDUuNiAyMC41IDQ1LjYgNDUuOHptLTI1My45LTQ1LjhjLTI1LjMgMC00NS42IDIwLjYtNDUuNiA0NS44czIwLjMgNDUuNiA0NS42IDQ1LjYgNDUuOC0yMC4zIDQ1LjgtNDUuNi0yMC41LTQ1LjgtNDUuOC00NS44em0yOTEuNy0yNzBDMTU4LjkgMTI0LjkgODEuOSAxMTIuMSAwIDI1LjdjMzQuNCA1MS43IDUzLjMgMTQ4LjkgMzczLjEgMTQ0LjIgMzMzLjMtNSAxMzAgODYuMSA3MC44IDE4OC45IDE4Ni43LTE2Ni43IDMxOS40LTIzMy45IDE3LjItMjMzLjl6XCJdLG9wZW5pZDpbNDQ4LDUxMixbXSxcImYxOWJcIixcIk0yNzEuNSA0MzJsLTY4IDMyQzg4LjUgNDUzLjcgMCAzOTIuNSAwIDMxOC4yYzAtNzEuNSA4Mi41LTEzMSAxOTEuNy0xNDQuM3Y0M2MtNzEuNSAxMi41LTEyNCA1My0xMjQgMTAxLjMgMCA1MSA1OC41IDkzLjMgMTM1LjcgMTAzdi0zNDBsNjgtMzMuMnYzODR6TTQ0OCAyOTFsLTEzMS4zLTI4LjUgMzYuOC0yMC43Yy0xOS41LTExLjUtNDMuNS0yMC03MC0yNC44di00M2M0Ni4yIDUuNSA4Ny43IDE5LjUgMTIwLjMgMzkuM2wzNS0xOS44TDQ0OCAyOTF6XCJdLG9wZXJhOls0OTYsNTEyLFtdLFwiZjI2YVwiLFwiTTMxMy45IDMyLjdjLTE3MC4yIDAtMjUyLjYgMjIzLjgtMTQ3LjUgMzU1LjEgMzYuNSA0NS40IDg4LjYgNzUuNiAxNDcuNSA3NS42IDM2LjMgMCA3MC4zLTExLjEgOTkuNC0zMC40LTQzLjggMzkuMi0xMDEuOSA2My0xNjUuMyA2My0zLjkgMC04IDAtMTEuOS0uM0MxMDQuNiA0ODkuNiAwIDM4MS4xIDAgMjQ4IDAgMTExIDExMSAwIDI0OCAwaC44YzYzLjEuMyAxMjAuNyAyNC4xIDE2NC40IDYzLjEtMjktMTkuNC02My4xLTMwLjQtOTkuMy0zMC40em0xMDEuOCAzOTcuN2MtNDAuOSAyNC43LTkwLjcgMjMuNi0xMzItNS44IDU2LjItMjAuNSA5Ny43LTkxLjYgOTcuNy0xNzYuNiAwLTg0LjctNDEuMi0xNTUuOC05Ny40LTE3Ni42IDQxLjgtMjkuMiA5MS4yLTMwLjMgMTMyLjktNSAxMDUuOSA5OC43IDEwNS41IDI2NS43LTEuMiAzNjR6XCJdLFwib3B0aW4tbW9uc3RlclwiOls1NzYsNTEyLFtdLFwiZjIzY1wiLFwiTTU1MC42NzEgNDUwLjMwM2MwIDExLjYyLTE1LjY3MyAxOS40NTctMzIuMTU4IDE0Ljg2My0xMi4xNi0zLjI0My0zMS4zNDYtMTcuNTY1LTM2LjIxMS0yNy4yOTQtNS42NzQtMTEuNjIgNC4wNTQtMzIuNjk4IDE4LjkxNi0zMC44MDYgMTUuNjc0IDEuNjIxIDQ5LjQ1MyAyNS40MDEgNDkuNDUzIDQzLjIzN3pNMzcyLjg2IDc1LjIyM2MtMy43ODMtNzIuMTUxLTEwMC43OTYtNzkuNzE4LTEyNS45MjgtMjMuNTEgNDQuNTg4LTI0LjMyMSA5MC4yNTctMTUuNjczIDEyNS45MjggMjMuNTF6TTc0Ljc5NSA0MDcuMDY2Yy0xNS42NzMgMS42MjEtNDkuNDUyIDI1LjQwMS00OS40NTIgNDMuMjM3IDAgMTEuNjIgMTUuNjczIDE5LjQ1NyAzMi4xNTcgMTQuODYzIDEyLjE2LTMuMjQzIDMxLjA3Ni0xNy41NjUgMzUuOTQtMjcuMjk0IDUuOTQ2LTExLjYyLTMuNzgyLTMyLjY5OC0xOC42NDUtMzAuODA2em00OTcuNzY1IDE0LjMyMmMxLjA4MSAzLjUxMyAxLjg5MiA3LjAyNiAxLjg5MiAxMC44MDkuODEgMzEuNjE2LTQ0LjMxNyA2NC4wNDUtNzMuNTAzIDY1LjEyNS0xNy4yOTUuODEtMzQuNTktOC4zNzctNDIuNjk2LTIzLjUxLTExMy40OTcgNC4wNTMtMjI2Ljk5NCA0Ljg2NC0zNDAuMjIgMC04LjM3NyAxNS4xMzMtMjUuNjcyIDI0LjA1LTQyLjk2NyAyMy41MS0yOC45MTUtMS4wODEtNzQuMDQzLTMzLjUwOS03My41MDMtNjUuMTI1LjI3LTMuNzgzLjgxMS03LjI5NiAxLjg5Mi0xMC44MDktNS41NjYtOS40NjMtNC44NDUtMTUuMjgyIDUuNDA1LTExLjYyIDMuMjQzLTUuMTM0IDcuMDI2LTkuNDU4IDExLjA4LTEzLjc4Mi0yLjU3LTEwLjkxNyAxLjI3LTE0LjA5NCAxMS4wNzktOS4xODggNC41OTQtMy4yNDMgOS45OTgtNi40ODUgMTUuOTQ0LTkuMTg4IDAtMTUuNzU3IDExLjgzOS0xMS4xMzEgMTcuMjk1LTUuNjc1IDEyLjQ2Ny0xLjc4IDIwLjEyOS43MDkgMjYuNzUzIDUuNjc1di0xOS43MjZjLTEyLjk4NyAwLTQwLjY0MS0xMS4zNzUtNDUuOTQtMzYuMjEyLTQuOTc0LTIwLjcyNSAyLjYwNy0zOC4wNzUgMjUuMTMyLTQ3LjU2LjgxLTUuOTQ1IDguMTA3LTE0LjA1MiAxNC44NjItMTUuOTQ0IDcuNTY3LTEuODkyIDEyLjQzMSA0LjU5NCAxNC4wNTIgMTAuMjY5IDcuNDI1IDAgMTcuNzU3IDEuNDY1IDIxLjA3OCA4LjEwNyA1LjQwNS0uNTQxIDExLjA3OS0xLjM1MiAxNi40ODQtMS44OTItMi40MzItMS44OTItNS4xMzQtMy41MTMtOC4xMDctNC41OTQtNS4xMzQtOC45MTctMTMuNzgyLTExLjA3OS0yNC41OTEtMTEuNjIgMC0uODEgMC0xLjYyMS4yNy0yLjcwMi0xOS43MjctLjU0MS00NC4wNDgtNS42NzUtNTQuODU3LTE3LjgzNS0yMS4zMjEtMjMuNjM4LTE1LjkzNS04My41NzcgMTIuMTYtMTAzLjQ5OCA4LjM3Ny01LjY3NSAyMS42MTgtLjgxMSAyMi42OTkgOS43MjggMi40MjUgMjAuNTk4LjM5OSAyNi44MzMgMjYuMjEyIDI1Ljk0MiA4LjEwNy03LjgzNiAxNi43NTUtMTQuNTkyIDI2LjQ4My0xOS45OTctMTQuODYyLTEuMzUyLTI4LjkxNCAxLjYyMS00My43NzggMy43ODMgMTIuNzUyLTEyLjQ4IDIzLjk1My0yNS40NDIgNTYuNzQ4LTQyLjQyNyAyMy41MTEtMTEuODkgNDkuOTkzLTIwLjgwOCA3Ni4yMDUtMjMuMjM5LTE4LjY0Ni03LjgzNy0zOS45OTMtMTEuODkxLTU5LjcyMS0xNi40ODQgNzYuNDc1LTE2LjIxNCAxNzQuNTY5LTIyLjE1OSAyNDQuMjg5IDM3LjU2MiAxOC4xMDUgMTUuNDAzIDMyLjQyNyAzNi4yMTEgNDIuNjk2IDU5Ljk5MiAzOS43OTkgNC44NTMgMzYuNDctNS41ODEgMzguNjQzLTI1LjEzMiAxLjA4MS0xMC4yNjkgMTQuMzIyLTE1LjQwMyAyMi42OTktOS40NTggMTQuODYyIDEwLjUzOSAyMi4xNTkgMzAuODA2IDI0LjU5IDQ4LjEwMSAyLjE2MiAxNy44MzUuMjcgNDEuMzQ1LTEyLjQzIDU1LjEyNy0xMC44MDkgMTIuMTYtMzQuMzIgMTcuNTY1LTUzLjc3NiAxOC4xMDV2Mi43MDNjLTExLjA4LjI3LTIwLjI2OCAyLjQzMi0yNS42NzMgMTEuNjItMi45NzIgMS4wODEtNS42NzQgMi43MDMtOC4zNzcgNC41OTQgNS42NzUuNTQgMTEuMzUgMS4zNTEgMTYuNzU1IDEuODkxIDEuODY5LTUuNjE5IDEyLjUzNS04LjM3NyAyMS4wNzctOC4zNzcgMS42MjEtNS40MDUgNi43NTYtMTEuODkgMTQuMDUyLTEwLjI2OXMxNC4wNTIgOS45OTggMTQuODYzIDE1Ljk0NGMxMC44MDkgNC4zMjQgMjIuMTU5IDEyLjE2IDI1LjEzMSAyNS42NzIgMS44OTIgOC4xMDcgMS42MjEgMTUuMTMzLjI3IDIxLjg4OC01LjcyNiAyNS4yNjItMzMuMzYxIDM2LjIxMi00NS45MzkgMzYuMjEyIDAgNi43NTYgMCAxMy4yNDEtLjI3IDE5LjcyNiA4LjAxLTYuMDA2IDE2LjM2Ny03LjE1OCAyNi43NTItNS42NzUgNS45MTktNS45MTkgMTcuNTY1LTkuNDEgMTcuNTY1IDUuNjc1IDUuNjc1IDIuNzAzIDExLjM0OSA1Ljk0NSAxNS45NDQgOS4xODggMTAuMS01LjA1MSAxMy42NjktLjUzOSAxMC44MDkgOS4xODggNC4wNTMgNC4zMjMgOC4xMDcgOC45MTcgMTEuMDc5IDEzLjc4MiAxMC4xMzYtMy42MiAxMS4wMjEgMi4wNzggNS40MDkgMTEuNjJ6bS03My43NzMtMjU0LjAxNmMxNy4yOTUgNi43NTYgMjYuMjEyIDIyLjE1OSAzMC4yNjUgMzUuNjcgMS4wODEtMTAuNTM5LTIuNzAyLTM5LjQ1My0xMy43ODItNTEuMDczLTcuMjk2LTcuMjk2LTE0LjA1Mi01LjEzNC0xNC4wNTIuODEuMDAxIDYuMjE2LTEuMzUgMTEuNjItMi40MzEgMTQuNTkzem0tMTguNjQ2IDEyLjQzYzEyLjk3MSAxNS42NzMgMTcuMDI0IDQxLjYxNSAxMi43IDYyLjk2MyAxMC44MDktMi4xNjIgMjAuNTM3LTYuMjE1IDI2LjIxMi0xMi4xNiAxLjg5Mi0yLjE2MiAzLjc4My00Ljg2NCA0Ljg2NC03LjU2Ni0xLjA4MS0yMS4zNDgtMTAuMjY5LTQyLjY5Ny0yOS43MjUtNDguOTEyLTMuMjQyIDMuMjQzLTkuMTg3IDQuODY0LTE0LjA1MSA1LjY3NXptLTIxLjg4OS44MTFjNy41NjcgMjAuNTM3IDEyLjQzMSA0Mi42OTYgMTQuMzIyIDY0LjU4NSAzLjUxMyAwIDcuNTY3LS4yNyAxMS42Mi0uODExIDUuOTQ1LTI0LjMyMS0uMjctNTEuNjE0LTE0LjA1Mi02My41MDQtMy43ODMgMC04LjEwNyAwLTExLjg5LS4yN3pNNzcuNzY4IDE2Ny4zNzJjLTEuMDgxLTIuOTczLTIuNDMyLTguMzc3LTIuNDMyLTE0LjU5MyAwLTUuOTQ1LTcuMDI2LTguMTA3LTE0LjA1Mi0uODEtMTEuMzUgMTEuNjItMTQuODYzIDQwLjUzNC0xMy43ODIgNTEuMDczIDQuMDUzLTEzLjUxMiAxMi45NzEtMjguOTE1IDMwLjI2Ni0zNS42N3ptNS42NzUgNzUuMzk0Yy00LjMyNC0yMS4zNDgtLjI3LTQ3LjI5MSAxMi43MDEtNjIuOTYzLTQuODY1LS44MTEtMTAuODA5LTIuNDMyLTE0LjA1Mi01LjY3NS0xOS40NTcgNi4yMTUtMjguMzc1IDI3LjU2My0yOS43MjYgNDguOTEyIDEuMzUxIDIuNzAyIDIuOTcyIDUuNDA0IDQuODY0IDcuNTY2IDUuNjc1IDYuMjE1IDE1LjQwMyA5Ljk5OCAyNi4yMTMgMTIuMTZ6bTQxLjM0NS02MS4wNzNjLTUuMTM0IDEuMDgxLTkuOTk4IDIuOTczLTE0Ljg2MiA0Ljg2NWwtMTIuMTYgNS4xMzR2LS4yN2MtNy4yOTYgMTQuMDUyLTkuOTk5IDM0LjMxOS01LjQwNSA1Mi45NjUgNC41OTQuNTQxIDguNjQ3LjgxMSAxMi43LjgxMSAyLjQzMi0yMi4xNTkgOS4xODgtNDMuNzc4IDE5LjcyNy02My41MDV6bTg4LjA5NS0yMy4yMzljMCA0Mi4xNTUgMzQuMzE5IDc2LjIwNSA3Ni4yMDUgNzYuMjA1czc2LjIwNS0zNC4wNSA3Ni4yMDUtNzYuMjA1YzAtNDEuODg2LTM0LjMxOS03NS45MzUtNzYuMjA1LTc1LjkzNXMtNzYuMjA1IDM0LjA0OS03Ni4yMDUgNzUuOTM1em0xNTIuNDEgOTcuMjgzYzkuOTY5IDUwLjYwOCAzLjI5OSA2NC42OTIgMTYuNDg0IDU4LjA5OSAxNS45NDQtOC4xMDcgMjIuNjk5LTM5LjE4MyAyMi45Ny01Ny4wMTktMTIuOTcxLS44MS0yNi4yMTMtLjgxLTM5LjQ1NC0xLjA4em0tNzEuNjExLS41NDF2LS4yN2MtLjI3IDUuMTM0LjI3IDM4LjEwMyA0LjMyNCA0MS4wNzUgMTEuMDc5IDUuNDA1IDM5LjQ1MyA0LjU5NCA1MS4wNzMgMS4wODEgNS40MDUtMS42MjEgMi40MzItMzcuMDIyIDEuNjIxLTQxLjg4Ni0xOC45MTYtLjI3LTM4LjEwMi0uMjctNTcuMDE4IDB6bS0xNC4wNTMgMHYtLjI3Yy0xOS40NTYuMjctMzguNjQyLjI3LTU3LjgyOS44MTEtMS44OTIgOS4xODctNC41OTQgNDguOTExIDEuODkyIDUxLjYxNCAxMi45NzEgNS42NzUgNDEuNjE2IDUuMTM0IDU0LjU4NiAxLjYyMSA0LjU5NS0yLjQzMiAyLjQzMy00NS4zOTkgMS4zNTEtNTMuNzc2em0tODUuNjYyIDU3LjU2YzUuNDA1IDIuNDMyIDguNjQ3IDIuNDMyIDkuNzI4LTQuMzI0IDEuODkyLTguNjQ3IDIuNDMyLTM2Ljc1MiA0Ljg2NS01Mi4xNTUtMTIuMTYuMjctMjQuNTkxLjgxMS0zNi43NTIgMS42MjEtNS40MDUgMTkuNzI3LjI3IDQ1LjEyOSAyMi4xNTkgNTQuODU4em0tNjUuNjY2LTExLjA4YzQzLjc3OCA0Ny4wMiA5Mi42ODkgODUuNjYzIDE1NS45MjMgMTA2LjQ3IDY3LjU1OC0xOS4xODYgMTE1LjY1OS01OS45OTEgMTYzLjIxOS0xMDcuMDExLTExLjA5NS00LjMxNS03LjcxNS0xMC4zNjMtNy4yOTYtMTEuNjItOC45MTgtLjgxLTE3LjgzNS0xLjg5Mi0yNi40ODMtMi43MDItOS40NTggMzIuOTY4LTM1Ljk0IDUyLjk2NS00Ni43NSAzMS42MTYtMi43MDItNS4xMzQtMy41MTMtMTEuNjItNC41OTQtMTYuNzU0LTMuNzgzIDguMzc3LTEzLjI0MiA4LjEwNy0yNC41OTEgOC45MTgtMTMuMjQxIDEuMDgxLTMxLjYxNyAxLjM1MS00NC4wNDgtMi45NzItMi45NzIgMTIuOTcxLTExLjA3OSAxMi45NzEtMjYuNzUyIDE0LjMyMi0xNC4wNTIgMS4zNTItNDguNjQyIDQuMDU0LTU0Ljg1Ny0xMC44MDktMS4wODEgMjguNjQ0LTM1LjEzIDkuOTk4LTQ1LjEyOS03LjAyNi0zLjI0My01LjY3NS01LjQwNS0xMS4zNS03LjAyNi0xNy41NjUtNy44MzcuODEtMTUuNjczIDEuNjIxLTIzLjUxMSAyLjcwMiAyLjQ0MyAzLjY2MyAxLjU0OSA5LjA1Mi04LjEwNSAxMi40MzF6TTExNS42IDQ1My41NDVjLTUuNjc0LTIzLjIzOS0xOC42NDYtNDkuNzIyLTMzLjUwOC01NC4wNDYtMjIuNDI5LTYuNzU2LTY4LjkwOSAyMy41MS02Ni4yMDcgNTQuNTg2IDEyLjcwMSAxOS40NTcgMzkuOTk0IDM1LjY3IDU5LjE4MSAzNi40ODEgMTcuODM1LjgxIDM1Ljk0LTExLjA4IDM5LjcyNC0yOC45MTQuNTM5LTIuNDMyLjgxLTUuMTM0LjgxLTguMTA3em03LjI5Ni01Ljk0NGMzMy41MDktMTkuNDU3IDY5LjE3OS0zNS42NzEgMTA1LjkzMS00Ny4wMi0zOC42NDMtMjAuNTM3LTY4LjA5OC00Ny44MzEtOTcuMjgzLTc3LjAxNi0yLjE2MiAxLjM1Mi01LjEzNCAyLjQzMi03LjgzNiAzLjUxMy0xLjYzNyA0LjkxIDguNzE4IDUuMzMgNS40MDUgMTIuNDMxLTIuMTYyIDQuMDU0LTguNjQ4IDcuNTY3LTE1LjEzMyA5LjE4OC0yLjE2MSAyLjcwMi01LjEzNCA0Ljg2NC03LjgzNiA2LjQ4NWgtLjI3Yy0uMjcgMTMuNTExLS4yNyAyNy4wMjQuMjcgNDAuNTM1IDguOTM5IDE1Ljk2NCAxNS40MjYgMzMuMzE0IDE2Ljc1MiA1MS44ODR6bTMyMC43NjQgMTIuN2MtMzYuNzUyLTIxLjM0OC03NC4wNDQtNDEuMzQ1LTExNS42NTktNTIuOTY1LTEzLjc4MiA2LjIxNS0yNy44MzMgMTEuMzQ5LTQyLjE1NSAxNS40MDMtMi4xNjIuODExLTIuMTYyLjgxMS00LjMyNCAwLTExLjg5LTMuNzgzLTIzLjIzOS04LjEwNy0zNC44NTktMTMuMjQxLTQwLjI2NSAxMS42Mi03Ny4yODYgMjkuMTg1LTExMi40MTYgNTAuODAzaC0uMjd2LjI3Yy4yNyAwIC4yNyAwIC4yNy0uMjcgMTAzLjIyNyA0LjA1NCAyMDYuNDU1IDMuNTEzIDMwOS40MTMgMHptMjcuMDIzLTY0LjA0NWwtLjI3LjI3Yy41NDEtMTMuNzgyLjgxMS0yNy41NjMuODExLTQxLjM0NS0yLjk3My0xLjYyMS01LjY3NS00LjA1NC04LjEwNy02Ljc1Ni02LjQ4NS0xLjM1MS0xMi45NzEtNS4xMzQtMTUuMTMzLTguOTE4LTEuODkyLTQuMDUzIDEuMzUxLTcuNTY2IDUuOTQ1LTEwLjI2OS0uMjctLjU0MS0uNTQxLTEuNjIxLS41NDEtMi40MzItMi45NzItLjgxMS01LjQwNS0xLjg5Mi03LjU2Ny0zLjI0My0zMS42MTYgMjkuNDU1LTY1LjM5NiA1Ni43NDktMTAzLjQ5OCA3Ni43NDYgMzguOTE0IDExLjYyIDc1LjkzNSAyOC4xMDQgMTExLjg3NSA0Ny41NjEgMS4wNS0xNC42OTIgNy4yMzEtMzUuNzQ5IDE2LjQ4NS01MS42MTR6bTIzLjI0IDMuMjQ0Yy0xNC41OTMgNC4zMjMtMjcuODM0IDMwLjgwNi0zMy41MDkgNTQuMDQ2IDAgMjMuODI2IDIxLjI3OCAzNy44OTcgNDAuNTM0IDM3LjAyMiAxOS4xODYtLjgxMSA0Ni40OC0xNy4wMjQgNTkuMTgxLTM2LjQ4MSAyLjk3My0zMS4wNzctNDMuNTA3LTYxLjM0NC02Ni4yMDYtNTQuNTg3ek0yOTAuNzA5IDEzNC4xMzNjLjA0NSAwIC4wODkuMDAzLjEzNC4wMDMuMDQ2IDAgLjA5LS4wMDMuMTM2LS4wMDNoLS4yN3ptMCA5Ni43NDNjMjguNjQ1IDAgNTEuODg0LTIxLjYxOCA1MS44ODQtNDguMzcxIDAtMzYuMDkyLTQwLjUwNy01OC4wNzktNzIuMTUxLTQ0LjMxOCA5LjQ1OCAyLjk3MiAxNi40ODQgMTEuNjIgMTYuNDg0IDIxLjYxOCAwIDIzLjI1Ny0zMy4yOTEgMzEuOTU1LTQ2LjQ4IDExLjM1LTcuMjk3IDM0LjA2NyAxOS4zNjggNTkuNzIxIDUwLjI2MyA1OS43MjF6TTY4LjAzOSA0NzQuMDgzYy41NCA2LjQ4NiAxMi4xNiAxMi43MDEgMjEuNjE4IDkuNDU4IDYuNzU2LTIuNzAzIDE0LjU5My0xMC41MzkgMTcuMjk1LTE2LjIxNCAyLjk3My03LjAyNi0xLjA4MS0xOS45OTctOS43MjgtMTguMzc1LTguOTE3IDEuNjIxLTI5LjcyNSAxNi43NTQtMjkuMTg1IDI1LjEzMXptNDEwLjc1LTI1LjEzMWMtOC4zNzctMS42MjEtMTIuNDMxIDExLjM0OS05LjQ1OCAxOC4zNzUgMi40MzIgNS42NzUgMTAuMjY5IDEzLjUxMSAxNy4yOTUgMTYuMjE0IDkuMTg3IDMuMjQzIDIxLjA3OC0yLjk3MiAyMS4zNDgtOS40NTguODExLTguMzc3LTIwLjI2Ny0yMy41MS0yOS4xODUtMjUuMTMxelwiXSxvc2k6WzQ5NSw1MTIsW10sXCJmNDFhXCIsXCJNMCAyNTkuMkMyLjMgMTIzLjQgOTcuNCAyNi44IDIxMy44IDExLjFjMTM4LjgtMTguNiAyNTUuNiA3NS44IDI3OCAyMDEuMSAyMS4zIDExOC44LTQ0IDIzMC0xNTEuNiAyNzQtOS4zIDMuOC0xNC40IDEuNy0xOC03LjctMTcuOC00Ni4zLTM1LjYtOTIuNy01My40LTEzOS0zLjEtOC4xLTEtMTMuMiA3LTE2LjggMjQuMi0xMSAzOS4zLTI5LjQgNDMuMy01NS44IDYuNC00Mi40LTI0LjUtNzguNy02NC41LTgyLjItMzktMy40LTcxLjggMjMuNy03Ny41IDU5LjctNS4yIDMzIDExLjEgNjMuNyA0MS45IDc3LjcgOS42IDQuNCAxMS41IDguNiA3LjggMTguNC0xNy45IDQ2LjYtMzUuOCA5My4yLTUzLjcgMTM5LjktMi42IDYuOS04LjMgOS4zLTE1LjUgNi41LTUyLjYtMjAuMy0xMDEuNC02MS0xMzAuOC0xMTlDMS45IDMxOC43IDEuNiAyODAuMiAwIDI1OS4yem0yMC45LTEuOWMuNCA2LjYuNiAxNC4zIDEuMyAyMi4xIDYuMyA3MS45IDQ5LjYgMTQzLjUgMTMxIDE4My4xIDMuMiAxLjUgNC40LjggNS42LTIuMyAxNC45LTM5LjEgMjkuOS03OC4yIDQ1LTExNy4zIDEuMy0zLjMuNi00LjgtMi40LTYuNy0zMS42LTE5LjktNDcuMy00OC41LTQ1LjYtODYgMS0yMS42IDkuMy00MC41IDIzLjgtNTYuMyAzMC0zMi43IDc3LTM5LjggMTE1LjUtMTcuNiAzMS45IDE4LjQgNDkuNSA1My44IDQ1LjIgOTAuNC0zLjYgMzAuNi0xOS4zIDUzLjktNDUuNyA2OS44LTIuNyAxLjYtMy41IDIuOS0yLjMgNiAxNS4yIDM5LjIgMzAuMiA3OC40IDQ1LjIgMTE3LjcgMS4yIDMuMSAyLjQgMy44IDUuNiAyLjMgMzUuNS0xNi42IDY1LjItNDAuMyA4OC4xLTcyIDM0LjgtNDguMiA0OS4xLTEwMS45IDQyLjMtMTYxQzQ1OS44IDExMiAzNTQuMSAxNC43IDIxOCAzMS41IDExMS45IDQ0LjUgMjIuNyAxMzQgMjAuOSAyNTcuM3pcIl0scGFnZTQ6WzQ5Niw1MTIsW10sXCJmM2Q3XCIsXCJNMjQ4IDUwNEMxMTEgNTA0IDAgMzkzIDAgMjU2UzExMSA4IDI0OCA4YzIwLjkgMCA0MS4zIDIuNiA2MC43IDcuNUw0Mi4zIDM5MkgyNDh2MTEyem0wLTE0My42VjE0Ni44TDk4LjYgMzYwLjRIMjQ4em05NiAzMS42djkyLjdjNDUuNy0xOS4yIDg0LjUtNTEuNyAxMTEuNC05Mi43SDM0NHptNTcuNC0xMzguMmwtMjEuMiA4LjQgMjEuMiA4LjN2LTE2Ljd6bS0yMC4zIDU0LjVjLTYuNyAwLTggNi4zLTggMTIuOXY3LjdoMTYuMnYtMTBjMC01LjktMi4zLTEwLjYtOC4yLTEwLjZ6TTQ5NiAyNTZjMCAzNy4zLTguMiA3Mi43LTIzIDEwNC40SDM0NFYyNy4zQzQzMy4zIDY0LjggNDk2IDE1My4xIDQ5NiAyNTZ6TTM2MC40IDE0My42aDY4LjJWOTZoLTEzLjl2MzIuNmgtMTMuOVY5OWgtMTMuOXYyOS42aC0xMi43Vjk2aC0xMy45djQ3LjZ6bTY4LjEgMTg1LjNINDAydi0xMWMwLTE1LjQtNS42LTI1LjItMjAuOS0yNS4yLTE1LjQgMC0yMC43IDEwLjYtMjAuNyAyNS45djI1LjNoNjguMnYtMTV6bTAtMTAzbC02OC4yIDI5LjdWMjY4bDY4LjIgMjkuNXYtMTYuNmwtMTQuNC01Ljd2LTI2LjVsMTQuNC01Ljl2LTE2Ljl6bS00LjgtNjguNWgtMzUuNlYxODRINDAydi0xMi4yaDExYzguNiAxNS44IDEuMyAzNS4zLTE4LjYgMzUuMy0yMi41IDAtMjguMy0yNS4zLTE1LjUtMzcuN2wtMTEuNi0xMC42Yy0xNi4yIDE3LjUtMTIuMiA2My45IDI3LjEgNjMuOSAzNCAwIDQ0LjctMzUuOSAyOS4zLTY1LjN6XCJdLHBhZ2VsaW5lczpbMzg0LDUxMixbXSxcImYxOGNcIixcIk0zODQgMzEyLjdjLTU1LjEgMTM2LjctMTg3LjEgNTQtMTg3LjEgNTQtNDAuNSA4MS44LTEwNy40IDEzNC40LTE4NC42IDEzNC43LTE2LjEgMC0xNi42LTI0LjQgMC0yNC40IDY0LjQtLjMgMTIwLjUtNDIuNyAxNTcuMi0xMTAuMS00MS4xIDE1LjktMTE4LjYgMjcuOS0xNjEuNi04Mi4yIDEwOS00NC45IDE1OS4xIDExLjIgMTc4LjMgNDUuNSA5LjktMjQuNCAxNy01MC45IDIxLjYtNzkuNyAwIDAtMTM5LjcgMjEuOS0xNDkuNS05OC4xIDExOS4xLTQ3LjkgMTUyLjYgNzYuNyAxNTIuNiA3Ni43IDEuNi0xNi43IDMuMy01Mi42IDMuMy01My40IDAgMC0xMDYuMy03My43LTM4LjEtMTY1LjIgMTI0LjYgNDMgNjEuNCAxNjIuNCA2MS40IDE2Mi40LjUgMS42LjUgMjMuOCAwIDMzLjQgMCAwIDQ1LjItODkgMTM2LjQtNTcuNS00LjIgMTM0LTE0MS45IDEwNi40LTE0MS45IDEwNi40LTQuNCAyNy40LTExLjIgNTMuNC0yMCA3Ny41IDAgMCA4My05MS44IDE3Mi0yMHpcIl0scGFsZmVkOls1NzYsNTEyLFtdLFwiZjNkOFwiLFwiTTM4NC45IDE5My45YzAtNDcuNC01NS4yLTQ0LjItOTUuNC0yOS44LTEuMyAzOS40LTIuNSA4MC43LTMgMTE5LjguNyAyLjggMi42IDYuMiAxNS4xIDYuMiAzNi44IDAgODMuNC00Mi44IDgzLjMtOTYuMnptLTE5NC41IDcyLjJjLjIgMCA2LjUtMi43IDExLjItMi43IDI2LjYgMCAyMC43IDQ0LjEtMTQuNCA0NC4xLTIxLjUgMC0zNy4xLTE4LjEtMzcuMS00MyAwLTQyIDQyLjktOTUuNiAxMDAuNy0xMjYuNSAxLTEyLjQgMy0yMiAxMC41LTI4LjIgMTEuMi05IDI2LjYtMy41IDI5LjUgMTEuMSA3Mi4yLTIyLjIgMTM1LjIgMSAxMzUuMiA3MiAwIDc3LjktNzkuMyAxNTIuNi0xNDAuMSAxMzguMi0uMSAzOS40LjkgNzQuNCAyLjcgMTAwdi4yYy4yIDMuNC42IDEyLjUtNS4zIDE5LjEtOS42IDEwLjYtMzMuNCAxMC0zNi40LTIyLjMtNC4xLTQ0LjQuMi0yMDYuMSAxLjQtMjQyLjUtMjEuNSAxNS01OC41IDUwLjMtNTguNSA3NS45LjIgMi41LjQgNCAuNiA0LjZ6TTggMTgxLjFzLS4xIDM3LjQgMzguNCAzNy40aDMwbDIyLjQgMjE3LjJzMCA0NC4zIDQ0LjcgNDQuM2gyODguOXM0NC43LS40IDQ0LjctNDQuM2wyMi40LTIxNy4yaDMwczM4LjQgMS4yIDM4LjQtMzcuNGMwIDAgLjEtMzcuNC0zOC40LTM3LjRoLTMwLjFjLTcuMy0yNS42LTMwLjItNzQuMy0xMTkuNC03NC4zaC0yOFY1MC4zcy0yLjctMTguNC0yMS4xLTE4LjRoLTg1LjhzLTIxLjEgMC0yMS4xIDE4LjR2MTkuMWgtMjguMXMtMTA1IDQuMi0xMjAuNSA3NC4zaC0yOVM4IDE0Mi41IDggMTgxLjF6XCJdLHBhdHJlb246WzUxMiw1MTIsW10sXCJmM2Q5XCIsXCJNNTEyIDE5NC44YzAgMTAxLjMtODIuNCAxODMuOC0xODMuOCAxODMuOC0xMDEuNyAwLTE4NC40LTgyLjQtMTg0LjQtMTgzLjggMC0xMDEuNiA4Mi43LTE4NC4zIDE4NC40LTE4NC4zQzQyOS42IDEwLjUgNTEyIDkzLjIgNTEyIDE5NC44ek0wIDUwMS41aDkwdi00OTFIMHY0OTF6XCJdLHBheXBhbDpbMzg0LDUxMixbXSxcImYxZWRcIixcIk0xMTEuNCAyOTUuOWMtMy41IDE5LjItMTcuNCAxMDguNy0yMS41IDEzNC0uMyAxLjgtMSAyLjUtMyAyLjVIMTIuM2MtNy42IDAtMTMuMS02LjYtMTIuMS0xMy45TDU4LjggNDYuNmMxLjUtOS42IDEwLjEtMTYuOSAyMC0xNi45IDE1Mi4zIDAgMTY1LjEtMy43IDIwNCAxMS40IDYwLjEgMjMuMyA2NS42IDc5LjUgNDQgMTQwLjMtMjEuNSA2Mi42LTcyLjUgODkuNS0xNDAuMSA5MC4zLTQzLjQuNy02OS41LTctNzUuMyAyNC4yek0zNTcuMSAxNTJjLTEuOC0xLjMtMi41LTEuOC0zIDEuMy0yIDExLjQtNS4xIDIyLjUtOC44IDMzLjYtMzkuOSAxMTMuOC0xNTAuNSAxMDMuOS0yMDQuNSAxMDMuOS02LjEgMC0xMC4xIDMuMy0xMC45IDkuNC0yMi42IDE0MC40LTI3LjEgMTY5LjctMjcuMSAxNjkuNy0xIDcuMSAzLjUgMTIuOSAxMC42IDEyLjloNjMuNWM4LjYgMCAxNS43LTYuMyAxNy40LTE0LjkuNy01LjQtMS4xIDYuMSAxNC40LTkxLjMgNC42LTIyIDE0LjMtMTkuNyAyOS4zLTE5LjcgNzEgMCAxMjYuNC0yOC44IDE0Mi45LTExMi4zIDYuNS0zNC44IDQuNi03MS40LTIzLjgtOTIuNnpcIl0scGVyaXNjb3BlOls0NDgsNTEyLFtdLFwiZjNkYVwiLFwiTTM3MCA2My42QzMzMS40IDIyLjYgMjgwLjUgMCAyMjYuNiAwIDExMS45IDAgMTguNSA5Ni4yIDE4LjUgMjE0LjRjMCA3NS4xIDU3LjggMTU5LjggODIuNyAxOTIuN0MxMzcuOCA0NTUuNSAxOTIuNiA1MTIgMjI2LjYgNTEyYzQxLjYgMCAxMTIuOS05NC4yIDEyMC45LTEwNSAyNC42LTMzLjEgODItMTE4LjMgODItMTkyLjYgMC01Ni41LTIxLjEtMTEwLjEtNTkuNS0xNTAuOHpNMjI2LjYgNDkzLjljLTQyLjUgMC0xOTAtMTY3LjMtMTkwLTI3OS40IDAtMTA3LjQgODMuOS0xOTYuMyAxOTAtMTk2LjMgMTAwLjggMCAxODQuNyA4OSAxODQuNyAxOTYuMy4xIDExMi4xLTE0Ny40IDI3OS40LTE4NC43IDI3OS40ek0zMzggMjA2LjhjMCA1OS4xLTUxLjEgMTA5LjctMTEwLjggMTA5LjctMTAwLjYgMC0xNTAuNy0xMDguMi05Mi45LTE4MS44di40YzAgMjQuNSAyMC4xIDQ0LjQgNDQuOCA0NC40IDI0LjcgMCA0NC44LTE5LjkgNDQuOC00NC40IDAtMTguMi0xMS4xLTMzLjgtMjYuOS00MC43IDc2LjYtMTkuMiAxNDEgMzkuMyAxNDEgMTEyLjR6XCJdLHBoYWJyaWNhdG9yOls0OTYsNTEyLFtdLFwiZjNkYlwiLFwiTTMyMyAyNjIuMWwtLjEtMTNzMjEuNy0xOS44IDIxLjEtMjEuMmwtOS41LTIwYy0uNi0xLjQtMjkuNS0uNS0yOS41LS41bC05LjQtOS4zcy4yLTI4LjUtMS4yLTI5LjFsLTIwLjEtOS4yYy0xLjQtLjYtMjAuNyAyMS0yMC43IDIxbC0xMy4xLS4ycy0yMC41LTIxLjQtMjEuOS0yMC44bC0yMCA4LjNjLTEuNC41LjIgMjguOS4yIDI4LjlsLTkuMSA5LjFzLTI5LjItLjktMjkuNy40bC04LjEgMTkuOGMtLjYgMS40IDIxIDIxIDIxIDIxbC4xIDEyLjlzLTIxLjcgMTkuOC0yMS4xIDIxLjJsOS41IDIwYy42IDEuNCAyOS41LjUgMjkuNS41bDkuNCA5LjNzLS4yIDMxLjggMS4yIDMyLjNsMjAuMSA4LjNjMS40LjYgMjAuNy0yMy41IDIwLjctMjMuNWwxMy4xLjJzMjAuNSAyMy44IDIxLjggMjMuM2wyMC03LjVjMS40LS42LS4yLTMyLjEtLjItMzIuMWw5LjEtOS4xczI5LjIuOSAyOS43LS41bDguMS0xOS44Yy43LTEuMS0yMC45LTIwLjctMjAuOS0yMC43em0tNDQuOS04LjdjLjcgMTcuMS0xMi44IDMxLjYtMzAuMSAzMi40LTE3LjMuOC0zMi4xLTEyLjUtMzIuOC0yOS42LS43LTE3LjEgMTIuOC0zMS42IDMwLjEtMzIuMyAxNy4zLS44IDMyLjEgMTIuNSAzMi44IDI5LjV6bTIwMS4yLTM3LjlsLTk3LTk3LS4xLjFjLTc1LjEtNzMuMy0xOTUuNC03Mi44LTI2OS44IDEuNi01MC45IDUxLTI3LjggMjcuOS05NS43IDk1LjMtMjIuMyAyMi4zLTIyLjMgNTguNyAwIDgxIDY5LjkgNjkuNCA0Ni40IDQ2IDk3LjQgOTdsLjEtLjFjNzUuMSA3My4zIDE5NS40IDcyLjkgMjY5LjgtMS42IDUxLTUwLjkgMjcuOS0yNy45IDk1LjMtOTUuMyAyMi4zLTIyLjMgMjIuMy01OC43IDAtODF6TTE0MC40IDM2My44Yy01OS42LTU5LjUtNTkuNi0xNTYgMC0yMTUuNSA1OS41LTU5LjYgMTU2LTU5LjUgMjE1LjYgMCA1OS41IDU5LjUgNTkuNiAxNTYgMCAyMTUuNi01OS42IDU5LjUtMTU2IDU5LjQtMjE1LjYtLjF6XCJdLFwicGhvZW5peC1mcmFtZXdvcmtcIjpbNjQwLDUxMixbXSxcImYzZGNcIixcIk0yMTIuOSAzNDQuM2MzLjgtLjEgMjIuOC0xLjQgMjUuNi0yLjItMi40LTIuNi00My42LTEtNjgtNDkuNi00LjMtOC42LTcuNS0xNy42LTYuNC0yNy42IDIuOS0yNS41IDMyLjktMzAgNTItMTguNSAzNiAyMS42IDYzLjMgOTEuMyAxMTMuNyA5Ny41IDM3IDQuNSA4NC42LTE3IDEwOC4yLTQ1LjQtLjYtLjEtLjgtLjItMS0uMS0uNC4xLS44LjItMS4xLjMtMzMuMyAxMi4xLTk0LjMgOS43LTEzNC43LTE0LjgtMzcuNi0yMi44LTUzLjEtNTguNy01MS44LTc0LjYgMS44LTIxLjMgMjIuOS0yMy4yIDM1LjktMTkuNiAxNC40IDMuOSAyNC40IDE3LjYgMzguOSAyNy40IDE1LjYgMTAuNCAzMi45IDEzLjcgNTEuMyAxMC4zIDE0LjktMi43IDM0LjQtMTIuMyAzNi41LTE0LjUtMS4xLS4xLTEuOC0uMS0yLjUtLjItNi4yLS42LTEyLjQtLjgtMTguNS0xLjdDMjc5LjggMTk0LjUgMjYyLjEgNDcuNCAxMzguNSAzNy45IDk0LjIgMzQuNSAzOS4xIDQ2IDIuMiA3Mi45Yy0uOC42LTEuNSAxLjItMi4yIDEuOC4xLjIuMS4zLjIuNS44IDAgMS42LS4xIDIuNC0uMiA2LjMtMSAxMi41LS44IDE4LjcuMyAyMy44IDQuMyA0Ny43IDIzLjEgNTUuOSA3Ni41IDUuMyAzNC4zLS43IDUwLjggOCA4Ni4xIDE5IDc3LjEgOTEgMTA3LjYgMTI3LjcgMTA2LjR6TTc1LjMgNjQuOWMtLjktMS0uOS0xLjItMS4zLTIgMTIuMS0yLjYgMjQuMi00LjEgMzYuNi00LjgtMS4xIDE0LjctMjIuMiAyMS4zLTM1LjMgNi44em0xOTYuOSAzNTAuNWMtNDIuOCAxLjItOTItMjYuNy0xMjMuNS02MS40LTQuNi01LTE2LjgtMjAuMi0xOC42LTIzLjRsLjQtLjRjNi42IDQuMSAyNS43IDE4LjYgNTQuOCAyNyAyNC4yIDcgNDguMSA2LjMgNzEuNi0zLjMgMjIuNy05LjMgNDEtLjUgNDMuMSAyLjktMTguNSAzLjgtMjAuMSA0LjQtMjQgNy45LTUuMSA0LjQtNC42IDExLjcgNyAxNy4yIDI2LjIgMTIuNCA2My0yLjggOTcuMiAyNS40IDIuNCAyIDguMSA3LjggMTAuMSAxMC43LS4xLjItLjMuMy0uNC41LTQuOC0xLjUtMTYuNC03LjUtNDAuMi05LjMtMjQuNy0yLTQ2LjMgNS4zLTc3LjUgNi4yem0xNzQuOC0yNTJjMTYuNC01LjIgNDEuMy0xMy40IDY2LjUtMy4zIDE2LjEgNi41IDI2LjIgMTguNyAzMi4xIDM0LjYgMy41IDkuNCA1LjEgMTkuNyA1LjEgMjguNy0uMiAwLS40IDAtLjYuMS0uMi0uNC0uNC0uOS0uNS0xLjMtNS0yMi0yOS45LTQzLjgtNjcuNi0yOS45LTUwLjIgMTguNi0xMzAuNCA5LjctMTc2LjktNDgtLjctLjktMi40LTEuNy0xLjMtMy4yLjEtLjIgMi4xLjYgMyAxLjMgMTguMSAxMy40IDM4LjMgMjEuOSA2MC4zIDI2LjIgMzAuNSA2LjEgNTQuNiAyLjkgNzkuOS01LjJ6bTEwMi43IDExNy41Yy0zMi40LjItMzMuOCA1MC4xLTEwMy42IDY0LjQtMTguMiAzLjctMzguNyA0LjYtNDQuOSA0LjJ2LS40YzIuOC0xLjUgMTQuNy0yLjYgMjkuNy0xNi42IDcuOS03LjMgMTUuMy0xNS4xIDIyLjgtMjIuOSAxOS41LTIwLjIgNDEuNC00Mi4yIDgxLjktMzkgMjMuMSAxLjggMjkuMyA4LjIgMzYuMSAxMi43LjMuMi40LjUuNy45LS41IDAtLjcuMS0uOSAwLTctMi43LTE0LjMtMy4zLTIxLjgtMy4zem0tMTIuMy0yNC4xYy0uMS4yLS4xLjQtLjIuNi0yOC45LTQuNC00OC03LjktNjguNSA0LTE3IDkuOS0zMS40IDIwLjUtNjIgMjQuNC0yNy4xIDMuNC00NS4xIDIuNC02Ni4xLTgtLjMtLjItLjYtLjQtMS0uNiAwLS4yLjEtLjMuMS0uNSAyNC45IDMuOCAzNi40IDUuMSA1NS41LTUuOCAyMi4zLTEyLjkgNDAuMS0yNi42IDcxLjMtMzEgMjkuNi00LjEgNTEuMyAyLjUgNzAuOSAxNi45ek0yNjguNiA5Ny4zYy0uNi0uNi0xLjEtMS4yLTIuMS0yLjMgNy42IDAgMjkuNy0xLjIgNTMuNCA4LjQgMTkuNyA4IDMyLjIgMjEgNTAuMiAzMi45IDExLjEgNy4zIDIzLjQgOS4zIDM2LjQgOC4xIDQuMy0uNCA4LjUtMS4yIDEyLjgtMS43LjQtLjEuOSAwIDEuNS4zLS42LjQtMS4yLjktMS44IDEuMi04LjEgNC0xNi43IDYuMy0yNS42IDcuMS0yNi4xIDIuNi01MC4zLTMuNy03My40LTE1LjQtMTkuMy05LjktMzYuNC0yMi45LTUxLjQtMzguNnpNNjQwIDMzNS43Yy0zLjUgMy4xLTIyLjcgMTEuNi00Mi43IDUuMy0xMi4zLTMuOS0xOS41LTE0LjktMzEuNi0yNC4xLTEwLTcuNi0yMC45LTcuOS0yOC4xLTguNC42LS44LjktMS4yIDEuMi0xLjQgMTQuOC05LjIgMzAuNS0xMi4yIDQ3LjMtNi41IDEyLjUgNC4yIDE5LjIgMTMuNSAzMC40IDI0LjIgMTAuOCAxMC40IDIxIDkuOSAyMy4xIDEwLjUuMS0uMS4yIDAgLjQuNHptLTIxMi41IDEzN2MyLjIgMS4yIDEuNiAxLjUgMS41IDItMTguNS0xLjQtMzMuOS03LjYtNDYuOC0yMi4yLTIxLjgtMjQuNy00MS43LTI3LjktNDguNi0yOS43LjUtLjIuOC0uNCAxLjEtLjQgMTMuMS4xIDI2LjEuNyAzOC45IDMuOSAyNS4zIDYuNCAzNSAyNS40IDQxLjYgMzUuMyAzLjIgNC44IDcuMyA4LjMgMTIuMyAxMS4xelwiXSxcInBob2VuaXgtc3F1YWRyb25cIjpbNTEzLDUxMixbXSxcImY1MTFcIixcIk05Ni4yNCA2Mi44MUMxNDIuOTEgMjYuNTcgMjAyLjE1IDYuNTcgMjYxLjI4IDguMDhjMjkuNjctLjM4IDU5LjI5IDUuMzggODcuMTcgMTUuMzctMjQuMi00LjY0LTQ5LjE4LTYuMzUtNzMuNi0yLjQ1LTQzIDUuMzUtODMuMjYgMjcuMjMtMTEyLjE2IDU5LjM1IDUuNjktLjk5IDEwLjgxLTMuNjggMTYuMDctNS44OCAxOC4xOS03Ljg5IDM3LjYtMTMuMjkgNTcuNC0xNC44NyAxOS44LTIuMTQgMzkuNzUtLjQzIDU5LjQ1IDEuOTMtMTQuNDYgMi43OS0yOS4yIDQuNTgtNDMuMTEgOS42MS0zNC41MyAxMS4xMS02NS40NiAzMy4yNi04Ni41NSA2Mi44Mi0xMy44NCAxOS43Ny0yMy43IDQyLjk5LTI0Ljc0IDY3LjMzLS4zNSAxNi41NCA1LjIzIDM0LjkxIDE5Ljg5IDQ0LjE3IDExLjEzIDYuNjYgMjQuODUgOS4zOSAzNy42MyA2Ljc2IDE1LjQ5LTIuNDcgMzAuMTYtOC42NyA0My43My0xNi4zOCAxMS41NS02Ljg0IDIyLjczLTE0LjU5IDMyLjA1LTI0LjMyIDMuOC0zLjIzIDIuNTQtOC40OCAyLjYzLTEyLjgzLTIuMTMtLjM0LTQuNC0xLjExLTYuMzIuM2EyMDMuOTc1IDIwMy45NzUgMCAwIDEtMzUuOTMgMTUuNDJjLTIwLjA3IDYuMTktNDIuMjggOC40OC02Mi4yOC43OCAxMi44MyAxLjczIDI2LjE0LjMxIDM3Ljg1LTUuNDYgMjAuMjktOS43NSAzNi45Mi0yNS4yNyA1NC42LTM4Ljg4IDI3Ljg0LTIxLjI5IDU3LjY0LTQwLjExIDg5LjE3LTU1LjQ3IDI1Ljc4LTEyLjAxIDUzLjA5LTIyLjg1IDgxLjgxLTI0LjItMTUuNjggMTMuNzYtMzIuMjUgMjYuNi00Ni45MiA0MS41MS0xNC41NSAxNC4wNC0yNy41NCAyOS41OC00MC4yMyA0NS4zMS0zLjUzIDQuNjEtOC45OCA2Ljk2LTEzLjYyIDEwLjE5LTIyLjI0IDE1LjAzLTQwLjYgMzUuOTYtNTIuMDQgNjAuMjgtOS4zNiAxOS43NC0xNC41NSA0MS45Ny0xMS44MSA2My44NCAxLjk1IDEzLjczIDguNzQgMjcuNjcgMjAuOTYgMzUuMDEgMTIuOTQgNy45OSAyOS4xNCA4LjA5IDQzLjYxIDUuMTEgMzIuOS03LjQ3IDYxLjYxLTI4Ljk3IDgxLjI4LTU2IDIwLjUtMjcuNiAzMC42MS02Mi4zOCAyOS4yNS05Ni42NC0uNTItNy41Mi0xLjU4LTE1LTEuNjctMjIuNTUgOC4wMiAxOS41NCAxNC44NyAzOS44MyAxNi43IDYxLjAxIDIuMDEgMTQuMzIuNzUgMjguODQtMS42MiA0My4wMi0xLjkyIDExLjAyLTUuNjkgMjEuNTgtNy44MSAzMi41MyAyMC4zNi0yMi43MyAzNC4xNy01MS4yNCAzOS40Ni04MS4zMSA1LjcyLTM1LjM3LjU4LTcyLjM2LTE0LjI1LTEwNC45NSAyMC44NCAzMi4xMiAzMi40MyA2OS43OSAzNS44MSAxMDcuOC41IDEyLjc3LjUgMjUuNTggMCAzOC4zNC0yLjkxIDM0LjI2LTEyLjk3IDY3Ljk1LTI5Ljc2IDk4LTI2LjIgNDcuNDgtNjguMiA4NS44OS0xMTcuNTQgMTA4LjMyLTc4LjUyIDM2LjM0LTE3NS4yIDMxLjQxLTI0OC43Mi0xNC43Mi0zOC44NC0yMy43OC03MS4wNi01OC4zMi05MS42OC05OC45NkMxMC43MiAzMzcuNDMgMi4wNCAzMDUuNSAwIDI3My4xM1YyNDEuN2MzLjk0LTY5Ljk3IDQwLjk5LTEzNi4zMiA5Ni4yNC0xNzguODltMjIyLjY1IDgwLjU3YzUuNTEtLjggMTAuODItMi41NyAxNi4wMi00LjUgNC45OS0xLjc3IDkuMjctNS45NSAxMC4zNS0xMS4yNS04LjkxIDUtMTcuOTUgOS45NS0yNi4zNyAxNS43NXpcIl0scGhwOls2NDAsNTEyLFtdLFwiZjQ1N1wiLFwiTTMyMCAxMDQuNWMxNzEuNCAwIDMwMy4yIDcyLjIgMzAzLjIgMTUxLjVTNDkxLjMgNDA3LjUgMzIwIDQwNy41Yy0xNzEuNCAwLTMwMy4yLTcyLjItMzAzLjItMTUxLjVTMTQ4LjcgMTA0LjUgMzIwIDEwNC41bTAtMTYuOEMxNDMuMyA4Ny43IDAgMTYzIDAgMjU2czE0My4zIDE2OC4zIDMyMCAxNjguM1M2NDAgMzQ5IDY0MCAyNTYgNDk2LjcgODcuNyAzMjAgODcuN3pNMjE4LjIgMjQyLjVjLTcuOSA0MC41LTM1LjggMzYuMy03MC4xIDM2LjNsMTMuNy03MC42YzM4IDAgNjMuOC00LjEgNTYuNCAzNC4zek05Ny40IDM1MC4zaDM2LjdsOC43LTQ0LjhjNDEuMSAwIDY2LjYgMyA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdoLTcwLjdMOTcuNCAzNTAuM3ptMTg1LjctMjEzLjZoMzYuNWwtOC43IDQ0LjhjMzEuNSAwIDYwLjctMi4zIDc0LjggMTAuNyAxNC44IDEzLjYgNy43IDMxLTguMyAxMTMuMWgtMzdjMTUuNC03OS40IDE4LjMtODYgMTIuNy05Mi01LjQtNS44LTE3LjctNC42LTQ3LjQtNC42bC0xOC44IDk2LjZoLTM2LjVsMzIuNy0xNjguNnpNNTA1IDI0Mi41Yy04IDQxLjEtMzYuNyAzNi4zLTcwLjEgMzYuM2wxMy43LTcwLjZjMzguMiAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNMzg0LjIgMzUwLjNINDIxbDguNy00NC44YzQzLjIgMCA2Ny4xIDIuNSA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdINDE3bC0zMi44IDE2OC43elwiXSxcInBpZWQtcGlwZXJcIjpbNDQ4LDUxMixbXSxcImYyYWVcIixcIk0zMiA0MTlMMCA0NzkuMmwuOC0zMjhDLjggODUuMyA1NCAzMiAxMjAgMzJoMzI3LjJjLTkzIDI4LjktMTg5LjkgOTQuMi0yNTMuOSAxNjguNkMxMjIuNyAyODIgODIuNiAzMzggMzIgNDE5TTQ0OCAzMlMzMDUuMiA5OC44IDI2MS42IDE5OS4xYy0yMy4yIDUzLjYtMjguOSAxMTguMS03MSAxNTguNi0yOC45IDI3LjgtNjkuOCAzOC4yLTEwNS4zIDU2LjMtMjMuMiAxMi02Ni40IDQwLjUtODQuOSA2NmgzMjguNGM2NiAwIDExOS4zLTUzLjMgMTE5LjMtMTE5LjItLjEgMC0uMS0zMjguOC0uMS0zMjguOHpcIl0sXCJwaWVkLXBpcGVyLWFsdFwiOls1NzYsNTEyLFtdLFwiZjFhOFwiLFwiTTI0MiAxODdjNi4zLTExLjggMTMuMi0xNyAyNS45LTIxLjggMjcuMy0xMC4zIDQwLjItMzAuNSA1OC45LTUxLjEgMTEuOSA4LjQgMTIgMjQuNiAzMS42IDIzdjIxLjhsNi4zLjNjMzcuNC0xNC40IDc0LjctMzAuMiAxMDYuNi01NC42IDQ4LjMtMzYuOCA1Mi45LTUwIDgxLjMtMTAwbDItMi42Yy0uNiAxNC4xLTYuMyAyNy4zLTEyLjQgMzkuOS0zMC41IDYzLjgtNzguNyAxMDAuMy0xNDYuOCAxMTYuNy0xMi40IDIuOS0yNi40IDMuMi0zNy42IDguOSAxLjQgOS44IDEzLjIgMTguMSAxMy4yIDIzIDAgMy40LTUuNSA3LjItNy41IDguNi0xMS4yLTEyLjktMTYuMS0xOS4zLTIyLjctMjIuMS03LjYtMy41LTYzLjktNi40LTk4LjggMTB6bTEzNy45IDI1Ni45Yy0xOSAwLTY0LjEgOS41LTc5LjkgMTkuOGw2LjkgNDUuMWMzNS43IDYuMSA3MC4xIDMuNiAxMDYtOS44LTQuOC0xMC0yMy41LTU1LjEtMzMtNTUuMXpNMjQ0IDI0NmMtMy4yLTItNi4zLTIuOS0xMC4xLTIuOS02LjYgMC0xMi42IDMuMi0xOS4zIDMuN2wxLjcgNC45TDI0NCAyNDZ6bS0xMi42IDMxLjhsMjQuMSA2MS4yIDIxLTEzLjgtMzEuMy01MC45LTEzLjggMy41ek01NTUuNSAwbC0uNiAxLjEtLjMuOS42LS42LjMtMS40em0tNTkuMiAzODIuMWMtMzMuOS01Ni45LTc1LjMtMTE4LjQtMTUwLTExNS41bC0uMy02Yy0xLjEtMTMuNSAzMi44IDMuMiAzNS4xLTMxbC0xNC40IDcuMmMtMTkuOC00NS43LTguNi01NC4zLTY1LjUtNTQuMy0xNC43IDAtMjYuNyAxLjctNDEuNCA0LjYgMi45IDE4LjYgMi4yIDM2LjctMTAuOSA1MC4zbDE5LjUgNS41Yy0xLjcgMy4yLTIuOSA2LjMtMi45IDkuOCAwIDIxIDQyLjggMi45IDQyLjggMzMuNiAwIDE4LjQtMzYuOCA2MC4xLTU0LjkgNjAuMS04IDAtNTMuNy01MC01My40LTYwLjFsLjMtNC42IDUyLjMtMTEuNWMxMy0yLjYgMTIuMy0yMi43LTIuOS0yMi43LTMuNyAwLTQzLjEgOS4yLTQ5LjQgMTAuNi0yLTUuMi03LjUtMTQuMS0xMy44LTE0LjEtMy4yIDAtNi4zIDMuMi05LjUgNC05LjIgMi42LTMxIDIuOS0yMS41IDIwLjFMMTUuOSAyOTguNWMtNS41IDEuMS04LjkgNi4zLTguOSAxMS44IDAgNiA1LjUgMTAuOSAxMS41IDEwLjkgOCAwIDEzMS4zLTI4LjQgMTQ3LjQtMzIuMiAyLjYgMy4yIDQuNiA2LjMgNy44IDguNiAyMC4xIDE0LjQgNTkuOCA4NS45IDc2LjQgODUuOSAyNC4xIDAgNTgtMjIuNCA3MS4zLTQxLjkgMy4yLTQuMyA2LjktNy41IDEyLjQtNi45LjYgMTMuOC0zMS42IDM0LjItMzMgNDMuNy0xLjQgMTAuMi0xIDM1LjItLjMgNDEuMSAyNi43IDguMSA1Mi0zLjYgNzcuOS0yLjkgNC4zLTIxIDEwLjYtNDEuOSA5LjgtNjMuNWwtLjMtOS41Yy0xLjQtMzQuMi0xMC45LTM4LjUtMzQuOC01OC42LTEuMS0xLjEtMi42LTIuNi0zLjctNCAyLjItMS40IDEuMS0xIDQuNi0xLjcgODguNSAwIDU2LjMgMTgzLjYgMTExLjUgMjI5LjkgMzMuMS0xNSA3Mi41LTI3LjkgMTAzLjUtNDcuMi0yOS0yNS42LTUyLjYtNDUuNy03Mi43LTc5Ljl6bS0xOTYuMiA0NnYyNy4zbDExLjgtMy40LTIuOS0yMy44aC04Ljl6bTc2LjEgMi45YzAtMS40LS42LTMuMi0uOS00LjYtMjYuOCAwLTM2LjkgMy44LTU5LjUgNi4zbDIgMTIuNGM5LTEuNSA1OC40LTYuNiA1OC40LTE0LjF6XCJdLFwicGllZC1waXBlci1oYXRcIjpbNjQwLDUxMixbXSxcImY0ZTVcIixcIk02NDAgMjQuOWMtODAuOCA1My42LTg5LjQgOTIuNS05Ni40IDEwNC40LTYuNyAxMi4yLTExLjcgNjAuMy0yMy4zIDgzLjYtMTEuNyAyMy42LTU0LjIgNDIuMi02Ni4xIDUwLTExLjcgNy44LTI4LjMgMzguMS00MS45IDY0LjItMTA4LjEtNC40LTE2Ny40IDM4LjgtMjU5LjIgOTMuNiAyOS40LTkuNyA0My4zLTE2LjcgNDMuMy0xNi43IDk0LjItMzYgMTM5LjMtNjguMyAyODEuMS00OS4yIDEuMSAwIDEuOS42IDIuOC44IDMuOSAyLjIgNS4zIDYuOSAzLjEgMTAuOGwtNTMuOSA5NS44Yy0yLjUgNC43LTcuOCA3LjItMTMuMSA2LjEtMTI2LjgtMjMuOC0yMjYuOSAxNy4zLTMxOC45IDE4LjZDMjQuMSA0ODggMCA0NTMuNCAwIDQ1MS44YzAtMS4xLjYtMS43IDEuNy0xLjcgMCAwIDM4LjMgMCAxMDMuMS0xNS4zQzE3OC40IDI5NC41IDI0NCAyNDUuNCAzMTUuNCAyNDUuNGMwIDAgNzEuNyAwIDkwLjYgNjEuOSAyMi44LTM5LjcgMjguMy00OS4yIDI4LjMtNDkuMiA1LjMtOS40IDM1LTc3LjIgODYuNC0xNDEuNCA1MS41LTY0IDkwLjQtNzkuOSAxMTkuMy05MS44elwiXSxcInBpZWQtcGlwZXItcHBcIjpbNDQ4LDUxMixbXSxcImYxYTdcIixcIk0yMDUuMyAxNzQuNmMwIDIxLjEtMTQuMiAzOC4xLTMxLjcgMzguMS03LjEgMC0xMi44LTEuMi0xNy4yLTMuN3YtNjhjNC40LTIuNyAxMC4xLTQuMiAxNy4yLTQuMiAxNy41IDAgMzEuNyAxNi45IDMxLjcgMzcuOHptNTIuNiA2N2MtNy4xIDAtMTIuOCAxLjUtMTcuMiA0LjJ2NjhjNC40IDIuNSAxMC4xIDMuNyAxNy4yIDMuNyAxNy40IDAgMzEuNy0xNi45IDMxLjctMzcuOCAwLTIxLjEtMTQuMy0zOC4xLTMxLjctMzguMXpNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xODUgMjU1LjFjNDEgMCA3NC4yLTM1LjYgNzQuMi03OS42IDAtNDQtMzMuMi03OS42LTc0LjItNzkuNi0xMiAwLTI0LjEgMy4yLTM0LjYgOC44aC00NS43VjMxMWw1MS44LTEwLjF2LTUwLjZjOC42IDMuMSAxOC4xIDQuOCAyOC41IDQuOHptMTU4LjQgMjUuM2MwLTQ0LTMzLjItNzkuNi03My45LTc5LjYtMy4yIDAtNi40LjItOS42LjctMy43IDEyLjUtMTAuMSAyMy44LTE5LjIgMzMuNC0xMy44IDE1LTMyLjIgMjMuOC01MS44IDI0LjhWNDE2bDUxLjgtMTAuMXYtNTAuNmM4LjYgMy4yIDE4LjIgNC43IDI4LjcgNC43IDQwLjggMCA3NC0zNS42IDc0LTc5LjZ6XCJdLHBpbnRlcmVzdDpbNDk2LDUxMixbXSxcImYwZDJcIixcIk00OTYgMjU2YzAgMTM3LTExMSAyNDgtMjQ4IDI0OC0yNS42IDAtNTAuMi0zLjktNzMuNC0xMS4xIDEwLjEtMTYuNSAyNS4yLTQzLjUgMzAuOC02NSAzLTExLjYgMTUuNC01OSAxNS40LTU5IDguMSAxNS40IDMxLjcgMjguNSA1Ni44IDI4LjUgNzQuOCAwIDEyOC43LTY4LjggMTI4LjctMTU0LjMgMC04MS45LTY2LjktMTQzLjItMTUyLjktMTQzLjItMTA3IDAtMTYzLjkgNzEuOC0xNjMuOSAxNTAuMSAwIDM2LjQgMTkuNCA4MS43IDUwLjMgOTYuMSA0LjcgMi4yIDcuMiAxLjIgOC4zLTMuMy44LTMuNCA1LTIwLjMgNi45LTI4LjEuNi0yLjUuMy00LjctMS43LTcuMS0xMC4xLTEyLjUtMTguMy0zNS4zLTE4LjMtNTYuNiAwLTU0LjcgNDEuNC0xMDcuNiAxMTItMTA3LjYgNjAuOSAwIDEwMy42IDQxLjUgMTAzLjYgMTAwLjkgMCA2Ny4xLTMzLjkgMTEzLjYtNzggMTEzLjYtMjQuMyAwLTQyLjYtMjAuMS0zNi43LTQ0LjggNy0yOS41IDIwLjUtNjEuMyAyMC41LTgyLjYgMC0xOS0xMC4yLTM0LjktMzEuNC0zNC45LTI0LjkgMC00NC45IDI1LjctNDQuOSA2MC4yIDAgMjIgNy40IDM2LjggNy40IDM2LjhzLTI0LjUgMTAzLjgtMjkgMTIzLjJjLTUgMjEuNC0zIDUxLjYtLjkgNzEuMkM2NS40IDQ1MC45IDAgMzYxLjEgMCAyNTYgMCAxMTkgMTExIDggMjQ4IDhzMjQ4IDExMSAyNDggMjQ4elwiXSxcInBpbnRlcmVzdC1wXCI6WzM4NCw1MTIsW10sXCJmMjMxXCIsXCJNMjA0IDYuNUMxMDEuNCA2LjUgMCA3NC45IDAgMTg1LjYgMCAyNTYgMzkuNiAyOTYgNjMuNiAyOTZjOS45IDAgMTUuNi0yNy42IDE1LjYtMzUuNCAwLTkuMy0yMy43LTI5LjEtMjMuNy02Ny44IDAtODAuNCA2MS4yLTEzNy40IDE0MC40LTEzNy40IDY4LjEgMCAxMTguNSAzOC43IDExOC41IDEwOS44IDAgNTMuMS0yMS4zIDE1Mi43LTkwLjMgMTUyLjctMjQuOSAwLTQ2LjItMTgtNDYuMi00My44IDAtMzcuOCAyNi40LTc0LjQgMjYuNC0xMTMuNCAwLTY2LjItOTMuOS01NC4yLTkzLjkgMjUuOCAwIDE2LjggMi4xIDM1LjQgOS42IDUwLjctMTMuOCA1OS40LTQyIDE0Ny45LTQyIDIwOS4xIDAgMTguOSAyLjcgMzcuNSA0LjUgNTYuNCAzLjQgMy44IDEuNyAzLjQgNi45IDEuNSA1MC40LTY5IDQ4LjYtODIuNSA3MS40LTE3Mi44IDEyLjMgMjMuNCA0NC4xIDM2IDY5LjMgMzYgMTA2LjIgMCAxNTMuOS0xMDMuNSAxNTMuOS0xOTYuOEMzODQgNzEuMyAyOTguMiA2LjUgMjA0IDYuNXpcIl0sXCJwaW50ZXJlc3Qtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMGQzXCIsXCJNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEgxNTQuNGM5LjgtMTYuNCAyMi40LTQwIDI3LjQtNTkuMyAzLTExLjUgMTUuMy01OC40IDE1LjMtNTguNCA4IDE1LjMgMzEuNCAyOC4yIDU2LjMgMjguMiA3NC4xIDAgMTI3LjQtNjguMSAxMjcuNC0xNTIuNyAwLTgxLjEtNjYuMi0xNDEuOC0xNTEuNC0xNDEuOC0xMDYgMC0xNjIuMiA3MS4xLTE2Mi4yIDE0OC42IDAgMzYgMTkuMiA4MC44IDQ5LjggOTUuMSA0LjcgMi4yIDcuMSAxLjIgOC4yLTMuMy44LTMuNCA1LTIwLjEgNi44LTI3LjguNi0yLjUuMy00LjYtMS43LTctMTAuMS0xMi4zLTE4LjMtMzQuOS0xOC4zLTU2IDAtNTQuMiA0MS0xMDYuNiAxMTAuOS0xMDYuNiA2MC4zIDAgMTAyLjYgNDEuMSAxMDIuNiA5OS45IDAgNjYuNC0zMy41IDExMi40LTc3LjIgMTEyLjQtMjQuMSAwLTQyLjEtMTkuOS0zNi40LTQ0LjQgNi45LTI5LjIgMjAuMy02MC43IDIwLjMtODEuOCAwLTUzLTc1LjUtNDUuNy03NS41IDI1IDAgMjEuNyA3LjMgMzYuNSA3LjMgMzYuNS0zMS40IDEzMi44LTM2LjEgMTM0LjUtMjkuNiAxOTIuNmwyLjIuOEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4elwiXSxwbGF5c3RhdGlvbjpbNTc2LDUxMixbXSxcImYzZGZcIixcIk01NzAuOSAzNzIuM2MtMTEuMyAxNC4yLTM4LjggMjQuMy0zOC44IDI0LjNMMzI3IDQ3MC4ydi01NC4zbDE1MC45LTUzLjhjMTcuMS02LjEgMTkuOC0xNC44IDUuOC0xOS40LTEzLjktNC42LTM5LjEtMy4zLTU2LjIgMi45TDMyNyAzODEuMXYtNTYuNGMyMy4yLTcuOCA0Ny4xLTEzLjYgNzUuNy0xNi44IDQwLjktNC41IDkwLjkuNiAxMzAuMiAxNS41IDQ0LjIgMTQgNDkuMiAzNC43IDM4IDQ4Ljl6bS0yMjQuNC05Mi41di0xMzljMC0xNi4zLTMtMzEuMy0xOC4zLTM1LjYtMTEuNy0zLjgtMTkgNy4xLTE5IDIzLjR2MzQ3LjlsLTkzLjgtMjkuOFYzMmMzOS45IDcuNCA5OCAyNC45IDEyOS4yIDM1LjRDNDI0LjEgOTQuNyA0NTEgMTI4LjcgNDUxIDIwNS4yYzAgNzQuNS00NiAxMDIuOC0xMDQuNSA3NC42ek00My4yIDQxMC4yYy00NS40LTEyLjgtNTMtMzkuNS0zMi4zLTU0LjggMTkuMS0xNC4yIDUxLjctMjQuOSA1MS43LTI0LjlsMTM0LjUtNDcuOHY1NC41bC05Ni44IDM0LjZjLTE3LjEgNi4xLTE5LjcgMTQuOC01LjggMTkuNCAxMy45IDQuNiAzOS4xIDMuMyA1Ni4yLTIuOWw0Ni40LTE2Ljl2NDguOGMtNTEuNiA5LjMtMTAxLjQgNy4zLTE1My45LTEwelwiXSxcInByb2R1Y3QtaHVudFwiOls1MTIsNTEyLFtdLFwiZjI4OFwiLFwiTTMyNi4zIDIxOC44YzAgMjAuNS0xNi43IDM3LjItMzcuMiAzNy4yaC03MC4zdi03NC40aDcwLjNjMjAuNSAwIDM3LjIgMTYuNyAzNy4yIDM3LjJ6TTUwNCAyNTZjMCAxMzctMTExIDI0OC0yNDggMjQ4UzggMzkzIDggMjU2IDExOSA4IDI1NiA4czI0OCAxMTEgMjQ4IDI0OHptLTEyOC4xLTM3LjJjMC00Ny45LTM4LjktODYuOC04Ni44LTg2LjhIMTY5LjJ2MjQ4aDQ5LjZ2LTc0LjRoNzAuM2M0Ny45IDAgODYuOC0zOC45IDg2LjgtODYuOHpcIl0scHVzaGVkOls0MzIsNTEyLFtdLFwiZjNlMVwiLFwiTTQwNyAxMTEuOWwtOTguNS05IDE0LTMzLjRjMTAuNC0yMy41LTEwLjgtNDAuNC0yOC43LTM3TDIyLjUgNzYuOWMtMTUuMSAyLjctMjYgMTguMy0yMS40IDM2LjZsMTA1LjEgMzQ4LjNjNi41IDIxLjMgMzYuNyAyNC4yIDQ3LjcgN2wzNS4zLTgwLjggMjM1LjItMjMxLjNjMTYuNC0xNi44IDQuMy00Mi45LTE3LjQtNDQuOHpNMjk3LjYgNTMuNmM1LjEtLjcgNy41IDIuNSA1LjIgNy40TDI4NiAxMDAuOSAxMDguNiA4NC42bDE4OS0zMXpNMjIuNyAxMDcuOWMtMy4xLTUuMSAxLTEwIDYuMS05LjFsMjQ4LjcgMjIuNy05Ni45IDIzMC43TDIyLjcgMTA3Ljl6TTEzNiA0NTYuNGMtMi42IDQtNy45IDMuMS05LjQtMS4yTDQzLjUgMTc5LjdsMTI3LjcgMTk3LjZjLTcgMTUtMzUuMiA3OS4xLTM1LjIgNzkuMXptMjcyLjgtMzE0LjVMMjEwLjEgMzM3LjNsODkuNy0yMTMuNyAxMDYuNCA5LjdjNCAxLjEgNS43IDUuMyAyLjYgOC42elwiXSxweXRob246WzQ0OCw1MTIsW10sXCJmM2UyXCIsXCJNMTY3LjggMzYuNGMtNDUuMiA4LTUzLjQgMjQuNy01My40IDU1LjZ2NDAuN2gxMDYuOXYxMy42aC0xNDdjLTMxLjEgMC01OC4zIDE4LjctNjYuOCA1NC4yLTkuOCA0MC43LTEwLjIgNjYuMSAwIDEwOC42IDcuNiAzMS42IDI1LjcgNTQuMiA1Ni44IDU0LjJIMTAxdi00OC44YzAtMzUuMyAzMC41LTY2LjQgNjYuOC02Ni40aDEwNi44YzI5LjcgMCA1My40LTI0LjUgNTMuNC01NC4zVjkxLjljMC0yOS0yNC40LTUwLjctNTMuNC01NS42LTM1LjgtNS45LTc0LjctNS42LTEwNi44LjF6bS02LjcgMjguNGMxMSAwIDIwLjEgOS4yIDIwLjEgMjAuNHMtOSAyMC4zLTIwLjEgMjAuM2MtMTEuMSAwLTIwLjEtOS4xLTIwLjEtMjAuMy4xLTExLjMgOS0yMC40IDIwLjEtMjAuNHptMTg1LjIgODEuNHY0Ny41YzAgMzYuOC0zMS4yIDY3LjgtNjYuOCA2Ny44SDE3Mi43Yy0yOS4yIDAtNTMuNCAyNS01My40IDU0LjN2MTAxLjhjMCAyOSAyNS4yIDQ2IDUzLjQgNTQuMyAzMy44IDkuOSA2Ni4zIDExLjcgMTA2LjggMCAyNi45LTcuOCA1My40LTIzLjUgNTMuNC01NC4zdi00MC43SDIyNi4ydi0xMy42aDE2MC4yYzMxLjEgMCA0Mi42LTIxLjcgNTMuNC01NC4yIDExLjItMzMuNSAxMC43LTY1LjcgMC0xMDguNi03LjctMzAuOS0yMi4zLTU0LjItNTMuNC01NC4yaC00MC4xek0yODYuMiA0MDRjMTEuMSAwIDIwLjEgOS4xIDIwLjEgMjAuMyAwIDExLjMtOSAyMC40LTIwLjEgMjAuNC0xMSAwLTIwLjEtOS4yLTIwLjEtMjAuNC4xLTExLjMgOS4xLTIwLjMgMjAuMS0yMC4zelwiXSxxcTpbNDQ4LDUxMixbXSxcImYxZDZcIixcIk00MzMuNzU0IDQyMC40NDVjLTExLjUyNiAxLjM5My00NC44Ni01Mi43NDEtNDQuODYtNTIuNzQxIDAgMzEuMzQ1LTE2LjEzNiA3Mi4yNDctNTEuMDUxIDEwMS43ODYgMTYuODQyIDUuMTkyIDU0Ljg0MyAxOS4xNjcgNDUuODAzIDM0LjQyMS03LjMxNiAxMi4zNDMtMTI1LjUxIDcuODgxLTE1OS42MzIgNC4wMzctMzQuMTIyIDMuODQ0LTE1Mi4zMTYgOC4zMDYtMTU5LjYzMi00LjAzNy05LjA0NS0xNS4yNSAyOC45MTgtMjkuMjE0IDQ1Ljc4My0zNC40MTUtMzQuOTItMjkuNTM5LTUxLjA1OS03MC40NDUtNTEuMDU5LTEwMS43OTIgMCAwLTMzLjMzNCA1NC4xMzQtNDQuODU5IDUyLjc0MS01LjM3LS42NS0xMi40MjQtMjkuNjQ0IDkuMzQ3LTk5LjcwNCAxMC4yNjEtMzMuMDI0IDIxLjk5NS02MC40NzggNDAuMTQ0LTEwNS43NzlDNjAuNjgzIDk4LjA2MyAxMDguOTgyLjAwNiAyMjQgMGMxMTMuNzM3LjAwNiAxNjMuMTU2IDk2LjEzMyAxNjAuMjY0IDIxNC45NjMgMTguMTE4IDQ1LjIyMyAyOS45MTIgNzIuODUgNDAuMTQ0IDEwNS43NzggMjEuNzY4IDcwLjA2IDE0LjcxNiA5OS4wNTMgOS4zNDYgOTkuNzA0elwiXSxxdWluc2NhcGU6WzQ4OSw1MTIsW10sXCJmNDU5XCIsXCJNMzAxLjkgNDc0LjZoLTEuM2MtODcuMyAwLTE1OC4xLTcwLjgtMTU4LjEtMTU4LjFzNzAuOC0xNTguMSAxNTguMS0xNTguMWM5NC45IDAgMTY4LjIgODMuMSAxNTcgMTc2LjYgNCA1LjEgOC4yIDkuNiAxMS4yIDE1LjMgMTMuNC0zMC4zIDIwLjMtNjIuNCAyMC4zLTk3LjdDNDg5LjEgMTE3LjUgMzc5LjYgOCAyNDQuNSA4IDEwOS41IDggMCAxMTcuNSAwIDI1Mi42czEwOS41IDI0NC42IDI0NC41IDI0NC42YzI0LjggMCA0Ny44LTMuMiA3MC40LTEwLjEtNS4yLTMuNS05LTguMi0xMy40LTEyLjZsLjQuMXptLTIxLjItNjkuOGMwLTU0LjggNDQuNC05OS4yIDk5LjItOTkuMiA1NC44IDAgOTkuMiA0NC40IDk5LjIgOTkuMiAwIDU0LjgtNDQuNCA5OS4yLTk5LjIgOTkuMi01NC44IDAtOTkuMi00NC40LTk5LjItOTkuMlwiXSxxdW9yYTpbNDQ4LDUxMixbXSxcImYyYzRcIixcIk00NDAuNSAzODYuN2gtMjkuM2MtMS41IDEzLjUtMTAuNSAzMC44LTMzIDMwLjgtMjAuNSAwLTM1LjMtMTQuMi00OS41LTM1LjggNDQuMi0zNC4yIDc0LjctODcuNSA3NC43LTE1M0M0MDMuNSAxMTEuMiAzMDYuOCAzMiAyMDUgMzIgMTA1LjMgMzIgNy4zIDExMS43IDcuMyAyMjguN2MwIDEzNC4xIDEzMS4zIDIyMS42IDI0OSAxODlDMjc2IDQ1MS4zIDMwMiA0ODAgMzUxLjUgNDgwYzgxLjggMCA5MC44LTc1LjMgODktOTMuM3pNMjk3IDMyOS4yQzI3Ny41IDMwMCAyNTMuMyAyNzcgMjA1LjUgMjc3Yy0zMC41IDAtNTQuMyAxMC02OSAyMi44bDEyLjIgMjQuM2M2LjItMyAxMy00IDE5LjgtNCAzNS41IDAgNTMuNyAzMC44IDY5LjIgNjEuMy0xMCAzLTIwLjcgNC4yLTMyLjcgNC4yLTc1IDAtMTA3LjUtNTMtMTA3LjUtMTU2LjdDOTcuNSAxMjQuNSAxMzAgNzEgMjA1IDcxYzc2LjIgMCAxMDguNyA1My41IDEwOC43IDE1Ny43LjEgNDEuOC01LjQgNzUuNi0xNi43IDEwMC41elwiXSxcInItcHJvamVjdFwiOls1ODEsNTEyLFtdLFwiZjRmN1wiLFwiTTU4MSAyMjYuNkM1ODEgMTE5LjEgNDUwLjkgMzIgMjkwLjUgMzJTMCAxMTkuMSAwIDIyNi42QzAgMzIyLjQgMTAzLjMgNDAyIDIzOS40IDQxOC4xVjQ4MGg5OS4xdi02MS41YzI0LjMtMi43IDQ3LjYtNy40IDY5LjQtMTMuOUw0NDggNDgwaDExMmwtNjcuNC0xMTMuN2M1NC41LTM1LjQgODguNC04NC45IDg4LjQtMTM5Ljd6bS00NjYuOCAxNC41YzAtNzMuNSA5OC45LTEzMyAyMjAuOC0xMzNzMjExLjkgNDAuNyAyMTEuOSAxMzNjMCA1MC4xLTI2LjUgODUtNzAuMyAxMDYuNC0yLjQtMS42LTQuNy0yLjktNi40LTMuNy0xMC4yLTUuMi0yNy44LTEwLjUtMjcuOC0xMC41czg2LjYtNi40IDg2LjYtOTIuNy05MC42LTg3LjktOTAuNi04Ny45aC0xOTlWMzYxYy03NC4xLTIxLjUtMTI1LjItNjcuMS0xMjUuMi0xMTkuOXptMjI1LjEgMzguM3YtNTUuNmM1Ny44IDAgODcuOC02LjggODcuOCAyNy4zIDAgMzYuNS0zOC4yIDI4LjMtODcuOCAyOC4zem0tLjkgNzIuNUgzNjVjMTAuOCAwIDE4LjkgMTEuNyAyNCAxOS4yLTE2LjEgMS45LTMzIDIuOC01MC42IDIuOXYtMjIuMXpcIl0scmF2ZWxyeTpbNTEyLDUxMixbXSxcImYyZDlcIixcIk00MDcuNCA2MS41QzMzMS42IDIyLjEgMjU3LjggMzEgMTgyLjkgNjZjLTExLjMgNS4yLTE1LjUgMTAuNi0xOS45IDE5LTEwLjMgMTkuMi0xNi4yIDM3LjQtMTkuOSA1Mi43LTIxLjIgMjUuNi0zNi40IDU2LjEtNDMuMyA4OS45LTEwLjYgMTgtMjAuOSA0MS40LTIzLjEgNzEuNCAwIDAtLjcgNy42LS41IDcuOS0zNS4zLTQuNi03Ni4yLTI3LTc2LjItMjcgOS4xIDE0LjUgNjEuMyAzMi4zIDc2LjMgMzcuOSAwIDAgMS43IDk4IDY0LjUgMTMxLjItMTEuMy0xNy4yLTEzLjMtMjAuMi0xMy4zLTIwLjJTOTQuOCAzNjkgMTAwLjQgMzI0LjdjLjcgMCAxLjUuMiAyLjIuMiAyMy45IDg3LjQgMTAzLjIgMTUxLjQgMTk2LjkgMTUxLjQgNi4yIDAgMTIuMS0uMiAxOC0uNyAxNCAxLjUgMjcuNi41IDQwLjEtMy45IDYuOS0yLjIgMTMuOC02LjQgMjAuMi0xMC44IDcwLjItMzkuMSAxMDAuOS04MiAxMjMuMS0xNDcuNyA1LjQtMTYgOC4xLTM1LjUgOS44LTUyLjIgOC43LTgyLjMtMzAuNi0xNjEuNi0xMDMuMy0xOTkuNXpNMTM4LjggMTYzLjJzLTEuMiAxMi4zLS43IDE5LjdjLTMuNCAyLjUtMTAuMSA4LjEtMTguMiAxNi43IDUuMi0xMi44IDExLjMtMjUuMSAxOC45LTM2LjR6bS0zMS4yIDEyMS45YzQuNC0xNy4yIDEzLjMtMzkuMSAyOS44LTU1LjEgMCAwIDEuNyA0OCAxNS44IDkwLjFsLTQxLjQtNi45Yy0yLjItOS4yLTMuNS0xOC41LTQuMi0yOC4xem03LjkgNDIuOGMxNC44IDMuMiAzNCA3LjYgNDMuMSA5LjEgMjcuMyA3Ni44IDEwOC4zIDEyNC4zIDEwOC4zIDEyNC4zIDEgLjUgMS43LjcgMi43IDEtNzMuMS0xMS42LTEzMi43LTY0LjctMTU0LjEtMTM0LjR6TTM4NiA0NDQuMWMtMTQuNSA0LjctMzYuMiA4LjQtNjQuNyAzLjcgMCAwLTkxLjEtMjMuMS0xMjcuNS0xMDcuOCAzOC4yLjcgNTIuNC0uMiA3OC0zLjkgMzkuNC01LjcgNzktMTYuMiAxMTUtMzMgMTEuOC01LjQgMTEuMS0xOS40IDkuNi0yOS44LTItMTIuOC0xMS4xLTEyLjEtMjEuNC00LjcgMCAwLTgyIDU4LjYtMTg5LjggNTMuNy0xOC43LTMyLTI2LjgtMTEwLjgtMjYuOC0xMTAuOCA0MS40LTM1LjIgODMuMi01OS42IDE2OC40LTUyLjQuMi02LjQgMy0yNy4xLTIwLjQtMjguMSAwIDAtOTMuNS0xMS4xLTE0NiAzMy41IDIuNS0xNi41IDUuOS0yOS4zIDExLjEtMzkuNCAzNC4yLTMwLjggNzktNDkuNSAxMjguMy00OS41IDEwNi40IDAgMTkzIDg3LjEgMTkzIDE5NC41LS4yIDc2LTQzLjggMTQyLTEwNi44IDE3NHpcIl0scmVhY3Q6WzUxMiw1MTIsW10sXCJmNDFiXCIsXCJNNDE4LjIgMTc3LjJjLTUuNC0xLjgtMTAuOC0zLjUtMTYuMi01LjEuOS0zLjcgMS43LTcuNCAyLjUtMTEuMSAxMi4zLTU5LjYgNC4yLTEwNy41LTIzLjEtMTIzLjMtMjYuMy0xNS4xLTY5LjIuNi0xMTIuNiAzOC40LTQuMyAzLjctOC41IDcuNi0xMi41IDExLjUtMi43LTIuNi01LjUtNS4yLTguMy03LjctNDUuNS00MC40LTkxLjEtNTcuNC0xMTguNC00MS41LTI2LjIgMTUuMi0zNCA2MC4zLTIzIDExNi43IDEuMSA1LjYgMi4zIDExLjEgMy43IDE2LjctNi40IDEuOC0xMi43IDMuOC0xOC42IDUuOUMzOC4zIDE5Ni4yIDAgMjI1LjQgMCAyNTUuNmMwIDMxLjIgNDAuOCA2Mi41IDk2LjMgODEuNSA0LjUgMS41IDkgMyAxMy42IDQuMy0xLjUgNi0yLjggMTEuOS00IDE4LTEwLjUgNTUuNS0yLjMgOTkuNSAyMy45IDExNC42IDI3IDE1LjYgNzIuNC0uNCAxMTYuNi0zOS4xIDMuNS0zLjEgNy02LjMgMTAuNS05LjcgNC40IDQuMyA5IDguNCAxMy42IDEyLjQgNDIuOCAzNi44IDg1LjEgNTEuNyAxMTEuMiAzNi42IDI3LTE1LjYgMzUuOC02Mi45IDI0LjQtMTIwLjUtLjktNC40LTEuOS04LjktMy0xMy41IDMuMi0uOSA2LjMtMS45IDkuNC0yLjkgNTcuNy0xOS4xIDk5LjUtNTAgOTkuNS04MS43IDAtMzAuMy0zOS40LTU5LjctOTMuOC03OC40ek0yODIuOSA5Mi4zYzM3LjItMzIuNCA3MS45LTQ1LjEgODcuNy0zNiAxNi45IDkuNyAyMy40IDQ4LjkgMTIuOCAxMDAuNC0uNyAzLjQtMS40IDYuNy0yLjMgMTAtMjIuMi01LTQ0LjctOC42LTY3LjMtMTAuNi0xMy0xOC42LTI3LjItMzYuNC00Mi42LTUzLjEgMy45LTMuNyA3LjctNy4yIDExLjctMTAuN3ptLTEzMCAxODkuMWM0LjYgOC44IDkuMyAxNy41IDE0LjMgMjYuMSA1LjEgOC43IDEwLjMgMTcuNCAxNS44IDI1LjktMTUuNi0xLjctMzEuMS00LjItNDYuNC03LjUgNC40LTE0LjQgOS45LTI5LjMgMTYuMy00NC41em0wLTUwLjZjLTYuMy0xNC45LTExLjYtMjkuNS0xNi00My42IDE0LjQtMy4yIDI5LjctNS44IDQ1LjYtNy44LTUuMyA4LjMtMTAuNSAxNi44LTE1LjQgMjUuNC00LjkgOC41LTkuNyAxNy4yLTE0LjIgMjZ6bTExLjQgMjUuM2M2LjYtMTMuOCAxMy44LTI3LjMgMjEuNC00MC42IDcuNi0xMy4zIDE1LjgtMjYuMiAyNC40LTM4LjkgMTUtMS4xIDMwLjMtMS43IDQ1LjktMS43IDE1LjYgMCAzMSAuNiA0NS45IDEuNyA4LjUgMTIuNiAxNi42IDI1LjUgMjQuMyAzOC43IDcuNyAxMy4yIDE0LjkgMjYuNyAyMS43IDQwLjQtNi43IDEzLjgtMTMuOSAyNy40LTIxLjYgNDAuOC03LjYgMTMuMy0xNS43IDI2LjItMjQuMiAzOS0xNC45IDEuMS0zMC40IDEuNi00Ni4xIDEuNi0xNS43IDAtMzAuOS0uNS00NS42LTEuNC04LjctMTIuNy0xNi45LTI1LjctMjQuNi0zOS03LjctMTMuMy0xNC44LTI2LjgtMjEuNS00MC42em0xODAuNiA1MS4yYzUuMS04LjggOS45LTE3LjcgMTQuNi0yNi43IDYuNCAxNC41IDEyIDI5LjIgMTYuOSA0NC4zLTE1LjUgMy41LTMxLjIgNi4yLTQ3IDggNS40LTguNCAxMC41LTE3IDE1LjUtMjUuNnptMTQuNC03Ni41Yy00LjctOC44LTkuNS0xNy42LTE0LjUtMjYuMi00LjktOC41LTEwLTE2LjktMTUuMy0yNS4yIDE2LjEgMiAzMS41IDQuNyA0NS45IDgtNC42IDE0LjgtMTAgMjkuMi0xNi4xIDQzLjR6TTI1Ni4yIDExOC4zYzEwLjUgMTEuNCAyMC40IDIzLjQgMjkuNiAzNS44LTE5LjgtLjktMzkuNy0uOS01OS41IDAgOS44LTEyLjkgMTkuOS0yNC45IDI5LjktMzUuOHpNMTQwLjIgNTdjMTYuOC05LjggNTQuMSA0LjIgOTMuNCAzOSAyLjUgMi4yIDUgNC42IDcuNiA3LTE1LjUgMTYuNy0yOS44IDM0LjUtNDIuOSA1My4xLTIyLjYgMi00NSA1LjUtNjcuMiAxMC40LTEuMy01LjEtMi40LTEwLjMtMy41LTE1LjUtOS40LTQ4LjQtMy4yLTg0LjkgMTIuNi05NHptLTI0LjUgMjYzLjZjLTQuMi0xLjItOC4zLTIuNS0xMi40LTMuOS0yMS4zLTYuNy00NS41LTE3LjMtNjMtMzEuMi0xMC4xLTctMTYuOS0xNy44LTE4LjgtMjkuOSAwLTE4LjMgMzEuNi00MS43IDc3LjItNTcuNiA1LjctMiAxMS41LTMuOCAxNy4zLTUuNSA2LjggMjEuNyAxNSA0MyAyNC41IDYzLjYtOS42IDIwLjktMTcuOSA0Mi41LTI0LjggNjQuNXptMTE2LjYgOThjLTE2LjUgMTUuMS0zNS42IDI3LjEtNTYuNCAzNS4zLTExLjEgNS4zLTIzLjkgNS44LTM1LjMgMS4zLTE1LjktOS4yLTIyLjUtNDQuNS0xMy41LTkyIDEuMS01LjYgMi4zLTExLjIgMy43LTE2LjcgMjIuNCA0LjggNDUgOC4xIDY3LjkgOS44IDEzLjIgMTguNyAyNy43IDM2LjYgNDMuMiA1My40LTMuMiAzLjEtNi40IDYuMS05LjYgOC45em0yNC41LTI0LjNjLTEwLjItMTEtMjAuNC0yMy4yLTMwLjMtMzYuMyA5LjYuNCAxOS41LjYgMjkuNS42IDEwLjMgMCAyMC40LS4yIDMwLjQtLjctOS4yIDEyLjctMTkuMSAyNC44LTI5LjYgMzYuNHptMTMwLjcgMzBjLS45IDEyLjItNi45IDIzLjYtMTYuNSAzMS4zLTE1LjkgOS4yLTQ5LjgtMi44LTg2LjQtMzQuMi00LjItMy42LTguNC03LjUtMTIuNy0xMS41IDE1LjMtMTYuOSAyOS40LTM0LjggNDIuMi01My42IDIyLjktMS45IDQ1LjctNS40IDY4LjItMTAuNSAxIDQuMSAxLjkgOC4yIDIuNyAxMi4yIDQuOSAyMS42IDUuNyA0NC4xIDIuNSA2Ni4zem0xOC4yLTEwNy41Yy0yLjguOS01LjYgMS44LTguNSAyLjYtNy0yMS44LTE1LjYtNDMuMS0yNS41LTYzLjggOS42LTIwLjQgMTcuNy00MS40IDI0LjUtNjIuOSA1LjIgMS41IDEwLjIgMy4xIDE1IDQuNyA0Ni42IDE2IDc5LjMgMzkuOCA3OS4zIDU4IDAgMTkuNi0zNC45IDQ0LjktODQuOCA2MS40ek0yNTYgMjEwLjJjMjUuMyAwIDQ1LjggMjAuNSA0NS44IDQ1LjggMCAyNS4zLTIwLjUgNDUuOC00NS44IDQ1LjgtMjUuMyAwLTQ1LjgtMjAuNS00NS44LTQ1LjggMC0yNS4zIDIwLjUtNDUuOCA0NS44LTQ1LjhcIl0scmVhZG1lOls1NzYsNTEyLFtdLFwiZjRkNVwiLFwiTTUyOC4zIDQ2LjVIMzg4LjVjLTQ4LjEgMC04OS45IDMzLjMtMTAwLjQgODAuMy0xMC42LTQ3LTUyLjMtODAuMy0xMDAuNC04MC4zSDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHYyNDUuOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg4OS43YzEwMi4yIDAgMTMyLjcgMjQuNCAxNDcuMyA3NSAuNyAyLjggNS4yIDIuOCA2IDAgMTQuNy01MC42IDQ1LjItNzUgMTQ3LjMtNzVINTI4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4Vjk0LjZjMC0yNi40LTIxLjMtNDcuOS00Ny43LTQ4LjF6TTI0MiAzMTEuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVINzguMmMtMS45IDAtMy41LTEuNS0zLjUtMy41VjI4OWMwLTEuOSAxLjUtMy41IDMuNS0zLjVoMTYwLjRjMS45IDAgMy41IDEuNSAzLjUgMy41djIyLjl6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVINzguMmMtMS45IDAtMy41LTEuNS0zLjUtMy41di0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWgxNjAuNGMxLjkgMCAzLjUgMS41IDMuNSAzLjVWMjUxem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41SDc4LjJjLTEuOSAwLTMuNS0xLjUtMy41LTMuNXYtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVoMTYwLjRjMS45IDAgMy41IDEuNSAzLjUgMy41djIyLjl6bTI1OS4zIDEyMS43YzAgMS45LTEuNSAzLjUtMy41IDMuNUgzMzcuNWMtMS45IDAtMy41LTEuNS0zLjUtMy41di0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWgxNjAuNGMxLjkgMCAzLjUgMS41IDMuNSAzLjV2MjIuOXptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNUgzMzcuNWMtMS45IDAtMy41LTEuNS0zLjUtMy41VjIyOGMwLTEuOSAxLjUtMy41IDMuNS0zLjVoMTYwLjRjMS45IDAgMy41IDEuNSAzLjUgMy41djIyLjl6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVIMzM3LjVjLTEuOSAwLTMuNS0xLjUtMy41LTMuNXYtMjIuOGMwLTEuOSAxLjUtMy41IDMuNS0zLjVoMTYwLjRjMS45IDAgMy41IDEuNSAzLjUgMy41VjE5MHpcIl0scmViZWw6WzUxMiw1MTIsW10sXCJmMWQwXCIsXCJNMjU2LjUgNTA0QzExNy4yIDUwNCA5IDM4Ny44IDEzLjIgMjQ5LjkgMTYgMTcwLjcgNTYuNCA5Ny43IDEyOS43IDQ5LjVjLjMgMCAxLjktLjYgMS4xLjgtNS44IDUuNS0xMTEuMyAxMjkuOC0xNC4xIDIyNi40IDQ5LjggNDkuNSA5MCAyLjUgOTAgMi41IDM4LjUtNTAuMS0uNi0xMjUuOS0uNi0xMjUuOS0xMC0yNC45LTQ1LjctNDAuMS00NS43LTQwLjFsMjguOC0zMS44YzI0LjQgMTAuNSA0My4yIDM4LjcgNDMuMiAzOC43LjgtMjkuNi0yMS45LTYxLjQtMjEuOS02MS40TDI1NS4xIDhsNDQuMyA1MC4xYy0yMC41IDI4LjgtMjEuOSA2Mi42LTIxLjkgNjIuNiAxMy44LTIzIDQzLjUtMzkuMyA0My41LTM5LjNsMjguNSAzMS44Yy0yNy40IDguOS00NS40IDM5LjktNDUuNCAzOS45LTE1LjggMjguNS0yNy4xIDg5LjQuNiAxMjcuMyAzMi40IDQ0LjYgODcuNy0yLjggODcuNy0yLjggMTAyLjctOTEuOS0xMC41LTIyNS0xMC41LTIyNS02LjEtNS41LjgtMi44LjgtMi44IDUwLjEgMzYuNSAxMTQuNiA4NC40IDExNi4yIDIwNC44QzUwMC45IDQwMC4yIDM5OSA1MDQgMjU2LjUgNTA0elwiXSxcInJlZC1yaXZlclwiOls0NDgsNTEyLFtdLFwiZjNlM1wiLFwiTTM1My4yIDMySDk0LjhDNDIuNCAzMiAwIDc0LjQgMCAxMjYuOHYyNTguNEMwIDQzNy42IDQyLjQgNDgwIDk0LjggNDgwaDI1OC40YzUyLjQgMCA5NC44LTQyLjQgOTQuOC05NC44VjEyNi44YzAtNTIuNC00Mi40LTk0LjgtOTQuOC05NC44ek0xNDQuOSAyMDAuOXY1Ni4zYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOVYxNTEuOWMwLTEzLjIgMTAuNy0yMy45IDIzLjktMjMuOWgxNTQuMmMwIDI3LTIxLjkgNDguOS00OC45IDQ4LjloLTU2LjNjLTEyLjMtLjYtMjQuNiAxMS42LTI0IDI0em0xNzYuMyA3MmgtNTYuM2MtMTIuMy0uNi0yNC42IDExLjYtMjQgMjR2NTYuM2MwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlWMjQ3LjljMC0xMy4yIDEwLjctMjMuOSAyMy45LTIzLjloMTU0LjJjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45elwiXSxyZWRkaXQ6WzUxMiw1MTIsW10sXCJmMWExXCIsXCJNMjAxLjUgMzA1LjVjLTEzLjggMC0yNC45LTExLjEtMjQuOS0yNC42IDAtMTMuOCAxMS4xLTI0LjkgMjQuOS0yNC45IDEzLjYgMCAyNC42IDExLjEgMjQuNiAyNC45IDAgMTMuNi0xMS4xIDI0LjYtMjQuNiAyNC42ek01MDQgMjU2YzAgMTM3LTExMSAyNDgtMjQ4IDI0OFM4IDM5MyA4IDI1NiAxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDh6bS0xMzIuMy00MS4yYy05LjQgMC0xNy43IDMuOS0yMy44IDEwLTIyLjQtMTUuNS01Mi42LTI1LjUtODYuMS0yNi42bDE3LjQtNzguMyA1NS40IDEyLjVjMCAxMy42IDExLjEgMjQuNiAyNC42IDI0LjYgMTMuOCAwIDI0LjktMTEuMyAyNC45LTI0LjlzLTExLjEtMjQuOS0yNC45LTI0LjljLTkuNyAwLTE4IDUuOC0yMi4xIDEzLjhsLTYxLjItMTMuNmMtMy0uOC02LjEgMS40LTYuOSA0LjRsLTE5LjEgODYuNGMtMzMuMiAxLjQtNjMuMSAxMS4zLTg1LjUgMjYuOC02LjEtNi40LTE0LjctMTAuMi0yNC4xLTEwLjItMzQuOSAwLTQ2LjMgNDYuOS0xNC40IDYyLjgtMS4xIDUtMS43IDEwLjItMS43IDE1LjUgMCA1Mi42IDU5LjIgOTUuMiAxMzIgOTUuMiA3My4xIDAgMTMyLjMtNDIuNiAxMzIuMy05NS4yIDAtNS4zLS42LTEwLjgtMS45LTE1LjggMzEuMy0xNiAxOS44LTYyLjUtMTQuOS02Mi41ek0zMDIuOCAzMzFjLTE4LjIgMTguMi03Ni4xIDE3LjktOTMuNiAwLTIuMi0yLjItNi4xLTIuMi04LjMgMC0yLjUgMi41LTIuNSA2LjQgMCA4LjYgMjIuOCAyMi44IDg3LjMgMjIuOCAxMTAuMiAwIDIuNS0yLjIgMi41LTYuMSAwLTguNi0yLjItMi4yLTYuMS0yLjItOC4zIDB6bTcuNy03NWMtMTMuNiAwLTI0LjYgMTEuMS0yNC42IDI0LjkgMCAxMy42IDExLjEgMjQuNiAyNC42IDI0LjYgMTMuOCAwIDI0LjktMTEuMSAyNC45LTI0LjYgMC0xMy44LTExLTI0LjktMjQuOS0yNC45elwiXSxcInJlZGRpdC1hbGllblwiOls1MTIsNTEyLFtdLFwiZjI4MVwiLFwiTTQ0MC4zIDIwMy41Yy0xNSAwLTI4LjIgNi4yLTM3LjkgMTUuOS0zNS43LTI0LjctODMuOC00MC42LTEzNy4xLTQyLjNMMjkzIDUyLjNsODguMiAxOS44YzAgMjEuNiAxNy42IDM5LjIgMzkuMiAzOS4yIDIyIDAgMzkuNy0xOC4xIDM5LjctMzkuN3MtMTcuNi0zOS43LTM5LjctMzkuN2MtMTUuNCAwLTI4LjcgOS4zLTM1LjMgMjJsLTk3LjQtMjEuNmMtNC45LTEuMy05LjcgMi4yLTExIDcuMUwyNDYuMyAxNzdjLTUyLjkgMi4yLTEwMC41IDE4LjEtMTM2LjMgNDIuOC05LjctMTAuMS0yMy40LTE2LjMtMzguNC0xNi4zLTU1LjYgMC03My44IDc0LjYtMjIuOSAxMDAuMS0xLjggNy45LTIuNiAxNi4zLTIuNiAyNC43IDAgODMuOCA5NC40IDE1MS43IDIxMC4zIDE1MS43IDExNi40IDAgMjEwLjgtNjcuOSAyMTAuOC0xNTEuNyAwLTguNC0uOS0xNy4yLTMuMS0yNS4xIDQ5LjktMjUuNiAzMS41LTk5LjctMjMuOC05OS43ek0xMjkuNCAzMDguOWMwLTIyIDE3LjYtMzkuNyAzOS43LTM5LjcgMjEuNiAwIDM5LjIgMTcuNiAzOS4yIDM5LjcgMCAyMS42LTE3LjYgMzkuMi0zOS4yIDM5LjItMjIgLjEtMzkuNy0xNy42LTM5LjctMzkuMnptMjE0LjMgOTMuNWMtMzYuNCAzNi40LTEzOS4xIDM2LjQtMTc1LjUgMC00LTMuNS00LTkuNyAwLTEzLjcgMy41LTMuNSA5LjctMy41IDEzLjIgMCAyNy44IDI4LjUgMTIwIDI5IDE0OSAwIDMuNS0zLjUgOS43LTMuNSAxMy4yIDAgNC4xIDQgNC4xIDEwLjIuMSAxMy43em0tLjgtNTQuMmMtMjEuNiAwLTM5LjItMTcuNi0zOS4yLTM5LjIgMC0yMiAxNy42LTM5LjcgMzkuMi0zOS43IDIyIDAgMzkuNyAxNy42IDM5LjcgMzkuNy0uMSAyMS41LTE3LjcgMzkuMi0zOS43IDM5LjJ6XCJdLFwicmVkZGl0LXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjFhMlwiLFwiTTI4My4yIDM0NS41YzIuNyAyLjcgMi43IDYuOCAwIDkuMi0yNC41IDI0LjUtOTMuOCAyNC42LTExOC40IDAtMi43LTIuNC0yLjctNi41IDAtOS4yIDIuNC0yLjQgNi41LTIuNCA4LjkgMCAxOC43IDE5LjIgODEgMTkuNiAxMDAuNSAwIDIuNC0yLjMgNi42LTIuMyA5IDB6bS05MS4zLTUzLjhjMC0xNC45LTExLjktMjYuOC0yNi41LTI2LjgtMTQuOSAwLTI2LjggMTEuOS0yNi44IDI2LjggMCAxNC42IDExLjkgMjYuNSAyNi44IDI2LjUgMTQuNiAwIDI2LjUtMTEuOSAyNi41LTI2LjV6bTkwLjctMjYuOGMtMTQuNiAwLTI2LjUgMTEuOS0yNi41IDI2LjggMCAxNC42IDExLjkgMjYuNSAyNi41IDI2LjUgMTQuOSAwIDI2LjgtMTEuOSAyNi44LTI2LjUgMC0xNC45LTExLjktMjYuOC0yNi44LTI2Ljh6TTQ0OCA4MHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHptLTk5LjcgMTQwLjZjLTEwLjEgMC0xOSA0LjItMjUuNiAxMC43LTI0LjEtMTYuNy01Ni41LTI3LjQtOTIuNS0yOC42bDE4LjctODQuMiA1OS41IDEzLjRjMCAxNC42IDExLjkgMjYuNSAyNi41IDI2LjUgMTQuOSAwIDI2LjgtMTIuMiAyNi44LTI2LjggMC0xNC42LTExLjktMjYuOC0yNi44LTI2LjgtMTAuNCAwLTE5LjMgNi4yLTIzLjggMTQuOWwtNjUuNy0xNC42Yy0zLjMtLjktNi41IDEuNS03LjQgNC44bC0yMC41IDkyLjhjLTM1LjcgMS41LTY3LjggMTIuMi05MS45IDI4LjktNi41LTYuOC0xNS44LTExLTI1LjktMTEtMzcuNSAwLTQ5LjggNTAuNC0xNS41IDY3LjUtMS4yIDUuNC0xLjggMTEtMS44IDE2LjcgMCA1Ni41IDYzLjcgMTAyLjMgMTQxLjkgMTAyLjMgNzguNSAwIDE0Mi4yLTQ1LjggMTQyLjItMTAyLjMgMC01LjctLjYtMTEuNi0yLjEtMTcgMzMuNi0xNy4yIDIxLjItNjcuMi0xNi4xLTY3LjJ6XCJdLHJlbmRhY3Q6WzQ5Niw1MTIsW10sXCJmM2U0XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4YzE4LjYgMCAzNi43LTIuMSA1NC4xLTUuOS01LjYtNy40LTEwLjgtMTQuNC0xNS45LTIxLjMtMTIuNCAyLjEtMjUuMiAzLjMtMzguMyAzLjNDMTI0LjMgNDgwIDI0IDM3OS43IDI0IDI1NlMxMjQuMyAzMiAyNDggMzJzMjI0IDEwMC4zIDIyNCAyMjRjMCA3MS0zMyAxMzQuMi04NC41IDE3NS4zLTI1LjkgMTguOC0zOS4xIDIxLjQtODMuNS00NC4yLTc4LjctMTEyLjktNDgtNzEuMS03My43LTEwOC4zIDcyLjggOC45IDIyOC41LTcyIDE2OC42LTE2OC42QzMxNC0yNi44IDE1IDkzLjggNTkuNyAyMjYuNGMzLjIgOS44IDE0LjQgMzguNiA0NS42IDM4LjYgMiAwIDIuNi0uNiAyLTEuNy00LjQtOC43LTIwLjEtOS44LTIwLjEtMzcuNCAwLTQwLjUgNDAuNS04OS42IDEwMC4zLTEyMCA2Ni4xLTMyLjMgMTMxLjktMzAuMiAxNTguMiA1LjQgMjcuMiAzOC4zLTIwLjkgMTE5LjItMTIwLjQgMTM2LjkgNy41LTkuNCA1Ny03NS4yIDYyLjgtODQgMjIuNy0zNC42IDIzLjYtNDkgMTQtNTkuMi0xNS41LTE2LjktMjkuNS0xMC4zLTUwLjctMTEuNy0xMC44LS45LTExMy43IDE4MS4yLTEzNi40IDIxNi45LTUuOSA5LTIxLjIgMzQuMS0yMS4yIDUwLjkgMCAyMS4zIDIuOCA1MS40IDIwLjYgNTEuNCAxMC42IDAgOC0xOC43IDgtMjYuNiAwLTEyLjkgMjcuNC00OS40IDc0LjgtMTA0LjYgMjAuNCAzNi4xIDU3LjcgMTE0LjMgMTMwLjIgMjA5LjcgOTgtMzMuMSAxNjguNS0xMjUuOCAxNjguNS0yMzVDNDk2IDExOSAzODUgOCAyNDggOHpcIl0scmVucmVuOls1MTIsNTEyLFtdLFwiZjE4YlwiLFwiTTIxNCAxNjkuMWMwIDExMC40LTYxIDIwNS40LTE0Ny42IDI0Ny40QzMwIDM3My4yIDggMzE3LjcgOCAyNTYuNiA4IDEzMy45IDk3LjEgMzIuMiAyMTQgMTIuNXYxNTYuNnpNMjU1IDUwNGMtNDIuOSAwLTgzLjMtMTEtMTE4LjUtMzAuNEMxOTMuNyA0MzcuNSAyMzkuOSAzODIuOSAyNTUgMzE5YzE1LjUgNjMuOSA2MS43IDExOC41IDExOC44IDE1NC43QzMzOC43IDQ5MyAyOTguMyA1MDQgMjU1IDUwNHptMTkwLjYtODcuNUMzNTkgMzc0LjUgMjk4IDI3OS42IDI5OCAxNjkuMVYxMi41YzExNi45IDE5LjcgMjA2IDEyMS40IDIwNiAyNDQuMSAwIDYxLjEtMjIgMTE2LjYtNTguNCAxNTkuOXpcIl0scmVwbHlkOls0NDgsNTEyLFtdLFwiZjNlNlwiLFwiTTMyMCA0ODBIMTI4QzU3LjYgNDgwIDAgNDIyLjQgMCAzNTJWMTYwQzAgODkuNiA1Ny42IDMyIDEyOCAzMmgxOTJjNzAuNCAwIDEyOCA1Ny42IDEyOCAxMjh2MTkyYzAgNzAuNC01Ny42IDEyOC0xMjggMTI4ek0xOTMuNCAyNzMuMmMtNi4xLTItMTEuNi0zLjEtMTYuNC0zLjEtNy4yIDAtMTMuNSAxLjktMTguOSA1LjYtNS40IDMuNy05LjYgOS0xMi44IDE1LjhoLTEuMWwtNC4yLTE4LjNoLTI4djEzOC45aDM2LjF2LTg5LjdjMS41LTUuNCA0LjQtOS44IDguNy0xMy4yIDQuMy0zLjQgOS44LTUuMSAxNi4yLTUuMSA0LjYgMCA5LjggMSAxNS42IDMuMWw0LjgtMzR6bTExNS4yIDEwMy40Yy0zLjIgMi40LTcuNyA0LjgtMTMuNyA3LjEtNiAyLjMtMTIuOCAzLjUtMjAuNCAzLjUtMTIuMiAwLTIxLjEtMy0yNi41LTguOS01LjUtNS45LTguNS0xNC43LTktMjYuNGg4My4zYy45LTQuOCAxLjYtOS40IDIuMS0xMy45LjUtNC40LjctOC42LjctMTIuNSAwLTEwLjctMS42LTE5LjctNC43LTI2LjktMy4yLTcuMi03LjMtMTMtMTIuNS0xNy4yLTUuMi00LjMtMTEuMS03LjMtMTcuOC05LjItNi43LTEuOC0xMy41LTIuOC0yMC42LTIuOC0yMS4xIDAtMzcuNSA2LjEtNDkuMiAxOC4zcy0xNy41IDMwLjUtMTcuNSA1NWMwIDIyLjggNS4yIDQwLjcgMTUuNiA1My43IDEwLjQgMTMuMSAyNi44IDE5LjYgNDkuMiAxOS42IDEwLjcgMCAyMC45LTEuNSAzMC40LTQuNiA5LjUtMy4xIDE3LjEtNi44IDIyLjYtMTEuMmwtMTItMjMuNnptLTIxLjgtNzAuM2MzLjggNS40IDUuMyAxMy4xIDQuNiAyMy4xaC01MS43Yy45LTkuNCAzLjctMTcgOC4yLTIyLjYgNC41LTUuNiAxMS41LTguNSAyMS04LjUgOC4yLS4xIDE0LjEgMi42IDE3LjkgOHptNzkuOSAyLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNGMtNC4xLTMuOC05LjYtNS43LTE2LjctNS43LTYuNyAwLTEyIDEuOS0xNi4xIDUuNy00LjEgMy44LTYuMSA4LjktNi4xIDE1LjRzMiAxMS43IDYuMSAxNS42em0wIDEwMC41YzQuMSAzLjkgOS40IDUuOCAxNi4xIDUuOCA3IDAgMTIuNi0xLjkgMTYuNy01LjhzNi4xLTkuMSA2LjEtMTUuNi0yLTExLjYtNi4xLTE1LjRjLTQuMS0zLjgtOS42LTUuNy0xNi43LTUuNy02LjcgMC0xMiAxLjktMTYuMSA1LjctNC4xIDMuOC02LjEgOC45LTYuMSAxNS40IDAgNi42IDIgMTEuNyA2LjEgMTUuNnpcIl0scmVzZWFyY2hnYXRlOls0NDgsNTEyLFtdLFwiZjRmOFwiLFwiTTAgMzJ2NDQ4aDQ0OFYzMkgwem0yNjIuMiAzMzQuNGMtNi42IDMtMzMuMiA2LTUwLTE0LjItOS4yLTEwLjYtMjUuMy0zMy4zLTQyLjItNjMuNi04LjkgMC0xNC43IDAtMjEuNC0uNnY0Ni40YzAgMjMuNSA2IDIxLjIgMjUuOCAyMy45djguMWMtNi45LS4zLTIzLjEtLjgtMzUuNi0uOC0xMy4xIDAtMjYuMS42LTMzLjYuOHYtOC4xYzE1LjUtMi45IDIyLTEuMyAyMi0yMy45VjIyNWMwLTIyLjYtNi40LTIxLTIyLTIzLjlWMTkzYzI1LjggMSA1My4xLS42IDcwLjktLjYgMzEuNyAwIDU1LjkgMTQuNCA1NS45IDQ1LjYgMCAyMS4xLTE2LjcgNDIuMi0zOS4yIDQ3LjUgMTMuNiAyNC4yIDMwIDQ1LjYgNDIuMiA1OC45IDcuMiA3LjggMTcuMiAxNC43IDI3LjIgMTQuN3Y3LjN6bTIyLjktMTM1Yy0yMy4zIDAtMzIuMi0xNS43LTMyLjItMzIuMlYxNjdjMC0xMi4yIDguOC0zMC40IDM0LTMwLjRzMzAuNCAxNy45IDMwLjQgMTcuOWwtMTAuNyA3LjJzLTUuNS0xMi41LTE5LjctMTIuNWMtNy45IDAtMTkuNyA3LjMtMTkuNyAxOS43djI2LjhjMCAxMy40IDYuNiAyMy4zIDE3LjkgMjMuMyAxNC4xIDAgMjEuNS0xMC45IDIxLjUtMjYuOGgtMTcuOXYtMTAuN2gzMC40YzAgMjAuNSA0LjcgNDkuOS0zNCA0OS45em0tMTE2LjUgNDQuN2MtOS40IDAtMTMuNi0uMy0yMC0uOHYtNjkuN2M2LjQtLjYgMTUtLjYgMjIuNS0uNiAyMy4zIDAgMzcuMiAxMi4yIDM3LjIgMzQuNSAwIDIxLjktMTUgMzYuNi0zOS43IDM2LjZ6XCJdLHJlc29sdmluZzpbNDk2LDUxMixbXSxcImYzZTdcIixcIk0yODEuMiAyNzguMmM0Ni0xMy4zIDQ5LjYtMjMuNSA0NC00My40TDMxNCAxOTUuNWMtNi4xLTIwLjktMTguNC0yOC4xLTcxLjEtMTIuOEw1NC43IDIzNi44bDI4LjYgOTguNiAxOTcuOS01Ny4yek0yNDguNSA4QzEzMS40IDggMzMuMiA4OC43IDcuMiAxOTcuNWwyMjEuOS02My45YzM0LjgtMTAuMiA1NC4yLTExLjcgNzkuMy04LjIgMzYuMyA2LjEgNTIuNyAyNSA2MS40IDU1LjJsMTAuNyAzNy44YzguMiAyOC4xIDEgNTAuNi0yMy41IDczLjYtMTkuNCAxNy40LTMxLjIgMjQuNS02MS40IDMzLjJMMjAzIDM1MS44bDIyMC40IDI3LjEgOS43IDM0LjItNDguMSAxMy4zLTI4Ni44LTM3LjMgMjMgODAuMmMzNi44IDIyIDgwLjMgMzQuNyAxMjYuMyAzNC43IDEzNyAwIDI0OC41LTExMS40IDI0OC41LTI0OC4zQzQ5NyAxMTkuNCAzODUuNSA4IDI0OC41IDh6TTM4LjMgMzg4LjZMMCAyNTYuOGMwIDQ4LjUgMTQuMyA5My40IDM4LjMgMTMxLjh6XCJdLHJvY2tldGNoYXQ6WzQ0OCw1MTIsW10sXCJmM2U4XCIsXCJNNDQ4IDI1Ni4yYzAtODcuMi05OS42LTE1My4zLTIxOS44LTE1My4zLTE4LjggMC0zNy4zIDEuNi01NS4zIDQuOC0xMS4xLTEwLjUtMjQuMi0yMC0zOC0yNy40QzYxLjIgNDQuMiAwIDc5LjQgMCA3OS40czU2LjkgNDcuMSA0Ny42IDg4LjNjLTUyLjMgNTIuMy01Mi41IDEyNC4xIDAgMTc2LjZDNTYuOSAzODUuNiAwIDQzMi42IDAgNDMyLjZzNjEuMiAzNS4yIDEzNC45LS44YzEzLjgtNy41IDI2LjktMTYuOSAzOC0yNy40IDE4IDMuMiAzNi41IDQuOCA1NS4zIDQuOCAxMjAuMy0uMSAyMTkuOC02NS44IDIxOS44LTE1M3ptLTIxOS43IDEyNGMtMjMuNyAwLTQ2LjMtMi44LTY3LjMtNy44LTIxLjMgMjUuOC02OC4xIDYxLjctMTEzLjYgNTAuMSAxNC44LTE2IDM2LjctNDMuMSAzMi04Ny42LTI3LjMtMjEuNC00My42LTQ4LjctNDMuNi03OC41IDAtNjguNCA4Ni4yLTEyMy45IDE5Mi41LTEyMy45UzQyMC44IDE4OCA0MjAuOCAyNTYuNGMwIDY4LjMtODYuMiAxMjMuOC0xOTIuNSAxMjMuOHptMjUuNi0xMjMuOWMwIDE0LjItMTEuNSAyNS44LTI1LjYgMjUuOC0xNC4xIDAtMjUuNi0xMS41LTI1LjYtMjUuOCAwLTE0LjIgMTEuNS0yNS44IDI1LjYtMjUuOCAxNC4xIDAgMjUuNiAxMS42IDI1LjYgMjUuOHptODguOSAwYzAgMTQuMi0xMS40IDI1LjgtMjUuNiAyNS44LTE0LjEgMC0yNS42LTExLjUtMjUuNi0yNS44IDAtMTQuMiAxMS40LTI1LjggMjUuNi0yNS44IDE0LjEgMCAyNS42IDExLjYgMjUuNiAyNS44em0tMTc3LjkgMGMwIDE0LjItMTEuNCAyNS44LTI1LjYgMjUuOC0xNC4xIDAtMjUuNi0xMS41LTI1LjYtMjUuOCAwLTE0LjIgMTEuNC0yNS44IDI1LjYtMjUuOCAxNC4yIDAgMjUuNiAxMS42IDI1LjYgMjUuOHpcIl0scm9ja3JtczpbNDk2LDUxMixbXSxcImYzZTlcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0xNTcuNCA0MTkuNWgtOTBsLTExMi0xMzEuM2MtMTcuOS0yMC40LTMuOS01Ni4xIDI2LjYtNTYuMWg3NS4zbC04NC42LTk5LjMtODQuMyA5OC45aC05MEwxOTMuNSA2Ny4yYzE0LjQtMTguNCA0MS4zLTE3LjMgNTQuNSAwbDE1Ny43IDE4NS4xYzE5IDIyLjggMiA1Ny4yLTI3LjYgNTYuMS0uNiAwLTc0LjIuMi03NC4yLjJsMTAxLjUgMTE4Ljl6XCJdLHNhZmFyaTpbNTEyLDUxMixbXSxcImYyNjdcIixcIk0yMzYuOSAyNTYuOGMwLTkuMSA2LjYtMTcuNyAxNi4zLTE3LjcgOC45IDAgMTcuNCA2LjQgMTcuNCAxNi4xIDAgOS4xLTYuNCAxNy43LTE2LjEgMTcuNy05IDAtMTcuNi02LjctMTcuNi0xNi4xek01MDQgMjU2YzAgMTM3LTExMSAyNDgtMjQ4IDI0OFM4IDM5MyA4IDI1NiAxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDh6bS0yNi42IDBjMC0xMjIuMy05OS4xLTIyMS40LTIyMS40LTIyMS40UzM0LjYgMTMzLjcgMzQuNiAyNTYgMTMzLjcgNDc3LjQgMjU2IDQ3Ny40IDQ3Ny40IDM3OC4zIDQ3Ny40IDI1NnptLTcyLjUgOTYuNmMwIDMuNiAxMyAxMC4yIDE2LjMgMTIuMi0yNy40IDQxLjUtNjkuOCA3MS40LTExNy45IDgzLjNsLTQuNC0xOC41Yy0uMy0yLjUtMS45LTIuOC00LjItMi44LTEuOSAwLTMgMi44LTIuOCA0LjJsNC40IDE4LjhjLTEzLjMgMi44LTI2LjggNC4yLTQwLjQgNC4yLTM2LjMgMC03Mi0xMC4yLTEwMy0yOS4xIDEuNy0yLjggMTIuMi0xOCAxMi4yLTIwLjIgMC0xLjktMS43LTMuNi0zLjYtMy42LTMuOSAwLTEyLjIgMTYuNi0xNC43IDE5LjktNDEuOC0yNy43LTcyLTcwLjYtODMuNi0xMTkuNmwxOS4xLTQuMmMyLjItLjYgMi44LTIuMiAyLjgtNC4yIDAtMS45LTIuOC0zLTQuNC0yLjhMNjIgMjk0LjVjLTIuNS0xMi43LTMuOS0yNS41LTMuOS0zOC41IDAtMzcuMSAxMC41LTczLjYgMzAuMi0xMDQuOSAyLjggMS43IDE2LjEgMTAuOCAxOC4zIDEwLjggMS45IDAgMy42LTEuNCAzLjYtMy4zIDAtMy45LTE0LjctMTEuMy0xOC0xMy42IDI4LjItNDEuMiA3MS4xLTcwLjkgMTE5LjgtODEuOWw0LjIgMTguNWMuNiAyLjIgMi4yIDIuOCA0LjIgMi44czMtMi44IDIuOC00LjRMMjE5IDYxLjdjMTIuMi0yLjIgMjQuNi0zLjYgMzcuMS0zLjYgMzcuMSAwIDczLjMgMTAuNSAxMDQuOSAzMC4yLTEuOSAyLjgtMTAuOCAxNS44LTEwLjggMTggMCAxLjkgMS40IDMuNiAzLjMgMy42IDMuOSAwIDExLjMtMTQuNCAxMy4zLTE3LjcgNDEgMjcuNyA3MC4zIDcwIDgxLjcgMTE4LjJsLTE1LjUgMy4zYy0yLjUuNi0yLjggMi4yLTIuOCA0LjQgMCAxLjkgMi44IDMgNC4yIDIuOGwxNS44LTMuNmMyLjUgMTIuNyAzLjkgMjUuNyAzLjkgMzguNyAwIDM2LjMtMTAgNzItMjguOCAxMDIuNy0yLjgtMS40LTE0LjQtOS43LTE2LjYtOS43LTIuMSAwLTMuOCAxLjctMy44IDMuNnptLTMzLjItMjQyLjJjLTEzIDEyLjItMTM0LjIgMTIzLjctMTM3LjYgMTI5LjVsLTk2LjYgMTYwLjVjMTIuNy0xMS45IDEzNC4yLTEyNCAxMzcuMy0xMjkuM2w5Ni45LTE2MC43elwiXSxzYXNzOls2NDAsNTEyLFtdLFwiZjQxZVwiLFwiTTU1MS4xIDI5MS45Yy0yMi40LjEtNDEuOCA1LjUtNTggMTMuNS01LjktMTEuOS0xMi0yMi4zLTEzLTMwLjEtMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMmMtLjEtMS4xLTEuNC02LjYtMTQuMy02LjctMTIuOS0uMS0yNCAyLjUtMjUuMyA1LjktMS4zIDMuNC0zLjggMTEuMS01LjMgMTkuMS0yLjMgMTEuNy0yNS44IDUzLjUtMzkuMSA3NS4zLTQuNC04LjUtOC4xLTE2LTguOS0yMi0xLjItOS4xLTIuNS0xNC41LTEuMS0yNS4zczcuNy0yNi4xIDcuNi0yNy4yYy0uMS0xLjEtMS40LTYuNi0xNC4zLTYuNy0xMi45LS4xLTI0IDIuNS0yNS4zIDUuOS0xLjMgMy40LTIuNyAxMS40LTUuMyAxOS4xLTIuNiA3LjctMzMuOSA3Ny4zLTQyLjEgOTUuNC00LjIgOS4yLTcuOCAxNi42LTEwLjQgMjEuNnMtLjIuMy0uNC45Yy0yLjIgNC4zLTMuNSA2LjctMy41IDYuN3YuMWMtMS43IDMuMi0zLjYgNi4xLTQuNSA2LjEtLjYgMC0xLjktOC40LjMtMTkuOSA0LjctMjQuMiAxNS44LTYxLjggMTUuNy02My4xLS4xLS43IDIuMS03LjItNy4zLTEwLjctOS4xLTMuMy0xMi40IDIuMi0xMy4yIDIuMi0uOCAwLTEuNCAyLTEuNCAyczEwLjEtNDIuNC0xOS40LTQyLjRjLTE4LjQgMC00NCAyMC4yLTU2LjYgMzguNS03LjkgNC4zLTI1IDEzLjYtNDMgMjMuNS02LjkgMy44LTE0IDcuNy0yMC43IDExLjQtLjUtLjUtLjktMS0xLjQtMS41LTM1LjgtMzguMi0xMDEuOS02NS4yLTk5LjEtMTE2LjUgMS0xOC43IDcuNS02Ny44IDEyNy4xLTEyNy40IDk4LTQ4LjggMTc2LjQtMzUuNCAxODkuOS01LjYgMTkuNCA0Mi41LTQxLjkgMTIxLjYtMTQzLjcgMTMzLTM4LjggNC4zLTU5LjItMTAuNy02NC4zLTE2LjMtNS4zLTUuOS02LjEtNi4yLTguMS01LjEtMy4zIDEuOC0xLjIgNyAwIDEwLjEgMyA3LjkgMTUuNSAyMS45IDM2LjggMjguOSAxOC43IDYuMSA2NC4yIDkuNSAxMTkuMi0xMS44QzM2NyAxOTYuNSA0MTUuMSAxMzAuMiA0MDEgNzQuNyAzODYuNiAxOC4zIDI5My4xLS4yIDIwNC42IDMxLjIgMTUxLjkgNDkuOSA5NC45IDc5LjMgNTMuOSAxMTcuNiA1LjIgMTYzLjItMi42IDIwMi45LjYgMjE5LjVjMTEuNCA1OC45IDkyLjYgOTcuMyAxMjUuMSAxMjUuNy0xLjYuOS0zLjEgMS43LTQuNSAyLjUtMTYuMyA4LjEtNzguMiA0MC41LTkzLjcgNzQuNy0xNy41IDM4LjggMi45IDY2LjYgMTYuMyA3MC40IDQxLjggMTEuNiA4NC42LTkuMyAxMDcuNi00My42czIwLjItNzkuMSA5LjYtOTkuNWMtLjEtLjMtLjMtLjUtLjQtLjggNC4yLTIuNSA4LjUtNSAxMi44LTcuNSA4LjMtNC45IDE2LjQtOS40IDIzLjUtMTMuMy00IDEwLjgtNi45IDIzLjgtOC40IDQyLjYtMS44IDIyIDcuMyA1MC41IDE5LjEgNjEuNyA1LjIgNC45IDExLjUgNSAxNS40IDUgMTMuOCAwIDIwLTExLjQgMjYuOS0yNSA4LjUtMTYuNiAxNi0zNS45IDE2LTM1LjlzLTkuNCA1Mi4yIDE2LjMgNTIuMmM5LjQgMCAxOC44LTEyLjEgMjMtMTguM3YuMXMuMi0uNC43LTEuMmMxLTEuNSAxLjUtMi40IDEuNS0yLjR2LS4zYzMuOC02LjUgMTIuMS0yMS40IDI0LjYtNDYgMTYuMi0zMS44IDMxLjctNzEuNSAzMS43LTcxLjVzMS40IDkuNyA2LjIgMjUuOGMyLjggOS41IDguNyAxOS45IDEzLjQgMzAtMy44IDUuMi02LjEgOC4yLTYuMSA4LjJzMCAuMS4xLjJjLTMgNC02LjQgOC4zLTkuOSAxMi41LTEyLjggMTUuMi0yOCAzMi42LTMwIDM3LjYtMi40IDUuOS0xLjggMTAuMyAyLjggMTMuNyAzLjQgMi42IDkuNCAzIDE1LjcgMi41IDExLjUtLjggMTkuNi0zLjYgMjMuNS01LjQgNi4yLTIuMiAxMy40LTUuNyAyMC4yLTEwLjYgMTIuNS05LjIgMjAuMS0yMi40IDE5LjQtMzkuOC0uNC05LjYtMy41LTE5LjItNy4zLTI4LjIgMS4xLTEuNiAyLjMtMy4zIDMuNC01IDE5LjgtMjguOSAzNS4xLTYwLjYgMzUuMS02MC42czEuNCA5LjcgNi4yIDI1LjhjMi40IDguMSA3LjEgMTcgMTEuNCAyNS43LTE4LjYgMTUuMS0zMC4xIDMyLjYtMzQuMSA0NC4xLTcuNCAyMS4zLTEuNiAzMC45IDkuMyAzMy4xIDQuOSAxIDExLjktMS4zIDE3LjEtMy41IDYuNS0yLjIgMTQuMy01LjcgMjEuNi0xMS4xIDEyLjUtOS4yIDI0LjYtMjIuMSAyMy44LTM5LjYtLjMtNy45LTIuNS0xNS44LTUuNC0yMy40IDE1LjctNi42IDM2LjEtMTAuMiA2Mi4xLTcuMiA1NS43IDYuNSA2Ni42IDQxLjMgNjQuNSA1NS44LTIuMSAxNC42LTEzLjggMjIuNi0xNy43IDI1LTMuOSAyLjQtNS4xIDMuMy00LjggNS4xLjUgMi42IDIuMyAyLjUgNS42IDEuOSA0LjYtLjggMjkuMi0xMS44IDMwLjMtMzguNyAxLjYtMzQtMzEuMS03MS40LTg5LTcxLjF6TTEyMS44IDQzNi42Yy0xOC40IDIwLjEtNDQuMiAyNy43LTU1LjMgMjEuM0M1NC42IDQ1MSA1OS4zIDQyMS40IDgyIDQwMGMxMy44LTEzIDMxLjYtMjUgNDMuNC0zMi40IDIuNy0xLjYgNi42LTQgMTEuNC02LjkuOC0uNSAxLjItLjcgMS4yLS43LjktLjYgMS45LTEuMSAyLjktMS43IDguMyAzMC40LjMgNTcuMi0xOS4xIDc4LjN6bTEzNC40LTkxLjRjLTYuNCAxNS43LTE5LjkgNTUuNy0yOC4xIDUzLjYtNy0xLjgtMTEuMy0zMi4zLTEuNC02Mi4zIDUtMTUuMSAxNS42LTMzLjEgMjEuOS00MC4xIDEwLjEtMTEuMyAyMS4yLTE0LjkgMjMuOC0xMC40IDMuNSA1LjktMTIuMiA0OS40LTE2LjIgNTkuMnptMTExIDUzYy0yLjcgMS40LTUuMiAyLjMtNi40IDEuNi0uOS0uNSAxLjEtMi40IDEuMS0yLjRzMTMuOS0xNC45IDE5LjQtMjEuN2MzLjItNCA2LjktOC43IDEwLjktMTMuOSAwIC41LjEgMSAuMSAxLjYtLjEgMTcuOS0xNy4zIDMwLTI1LjEgMzQuOHptODUuNi0xOS41Yy0yLTEuNC0xLjctNi4xIDUtMjAuNyAyLjYtNS43IDguNi0xNS4zIDE5LTI0LjUgMS4yIDMuOCAxLjkgNy40IDEuOSAxMC44LS4xIDIyLjUtMTYuMiAzMC45LTI1LjkgMzQuNHpcIl0sc2NobGl4Ols0NDgsNTEyLFtdLFwiZjNlYVwiLFwiTTM1MC41IDE1Ny43bC01NC4yLTQ2LjEgNzMuNC0zOSA3OC4zIDQ0LjItOTcuNSA0MC45ek0xOTIgMTIyLjFsNDUuNy0yOC4yIDM0LjcgMzQuNi01NS40IDI5LTI1LTM1LjR6bS02NS4xIDYuNmwzMS45LTIyLjFMMTc2IDEzNWwtMzYuNyAyMi41LTEyLjQtMjguOHptLTIzLjMgODguMmwtOC44LTM0LjggMjkuNi0xOC4zIDEzLjEgMzUuMy0zMy45IDE3Ljh6bS0yMS4yLTgzLjdsMjMuOS0xOC4xIDguOSAyNC0yNi43IDE4LjMtNi4xLTI0LjJ6TTU5IDIwNi41bC0zLjYtMjguNCAyMi4zLTE1LjUgNi4xIDI4LjdMNTkgMjA2LjV6bS0zMC42IDE2LjZsMjAuOC0xMi44IDMuMyAzMy40LTIyLjkgMTItMS4yLTMyLjZ6TTEuNCAyNjhsMTkuMi0xMC4yLjQgMzguMi0yMSA4LjhMMS40IDI2OHptNTkuMSA1OS4zbC0yOC4zIDguMy0xLjYtNDYuOCAyNS4xLTEwLjcgNC44IDQ5LjJ6TTk5IDI2My4ybC0zMS4xIDEzLTUuMi00MC44TDkwLjEgMjIxbDguOSA0Mi4yek0xMjMuMiAzNzdsLTQxLjYgNS45LTguMS02My41IDM1LjItMTAuOCAxNC41IDY4LjR6bTI4LjUtMTM5LjlsMjEuMiA1Ny4xLTQ2LjIgMTMuNi0xMy43LTU0LjEgMzguNy0xNi42em04NS43IDIzMC41bC03MC45LTMuMy0yNC4zLTk1LjggNTUuMi04LjYgNDAgMTA3Ljd6bS04NC45LTI3OS43bDQyLjItMjIuNCAyOCA0NS45LTUwLjggMjEuMy0xOS40LTQ0Ljh6bTQxIDk0LjlsNjEuMy0xOC43IDUyLjggODYuNi03OS44IDExLjMtMzQuMy03OS4yem01MS40LTg1LjZsNjcuMy0yOC44IDY1LjUgNjUuNC04OC42IDI2LjItNDQuMi02Mi44elwiXSxzY3JpYmQ6WzM4NCw1MTIsW10sXCJmMjhhXCIsXCJNNDIuMyAyNTIuN2MtMTYuMS0xOS0yNC43LTQ1LjktMjQuOC03OS45IDAtMTAwLjQgNzUuMi0xNTMuMSAxNjcuMi0xNTMuMSA5OC42LTEuNiAxNTYuOCA0OSAxODQuMyA3MC42bC01MC41IDcyLjEtMzcuMy0yNC42IDI2LjktMzguNmMtMzYuNS0yNC03OS40LTM2LjUtMTIzLTM1LjgtNTAuNy0uOC0xMTEuNyAyNy4yLTExMS43IDc2LjIgMCAxOC43IDExLjIgMjAuNyAyOC42IDE1LjYgMjMuMy01LjMgNDEuOS42IDU1LjggMTQgMjYuNCAyNC4zIDIzLjIgNjcuNi0uNyA5MS45LTI5LjIgMjkuNS04NS4yIDI3LjMtMTE0LjgtOC40em0zMTcuNyA1LjljLTE1LjUtMTguOC0zOC45LTI5LjQtNjMuMi0yOC42LTM4LjEtMi03MS4xIDI4LTcwLjUgNjcuMi0uNyAxNi44IDYgMzMgMTguNCA0NC4zIDE0LjEgMTMuOSAzMyAxOS43IDU2LjMgMTQuNCAxNy40LTUuMSAyOC42LTMuMSAyOC42IDE1LjYgMCA0LjMtLjUgOC41LTEuNCAxMi43LTE2LjcgNDAuOS01OS41IDY0LjQtMTIxLjQgNjQuNC01MS45LjItMTAyLjQtMTYuNC0xNDQuMS00Ny4zbDMzLjctMzkuNC0zNS42LTI3LjRMMCA0MDYuM2wxNS40IDEzLjhjNTIuNSA0Ni44IDEyMC40IDcyLjUgMTkwLjcgNzIuMiA1MS40IDAgOTQuNC0xMC41IDEzMy42LTQ0LjEgNTcuMS01MS40IDU0LjItMTQ5LjIgMjAuMy0xODkuNnpcIl0sc2VhcmNoZW5naW46WzQ2MCw1MTIsW10sXCJmM2ViXCIsXCJNMjIwLjYgMTMwLjNsLTY3LjIgMjguMlY0My4yTDk4LjcgMjMzLjVsNTQuNy0yNC4ydjEzMC4zbDY3LjItMjA5LjN6bS04My4yLTk2LjdsLTEuMyA0LjctMTUuMiA1Mi45QzgwLjYgMTA2LjcgNTIgMTQ1LjggNTIgMTkxLjVjMCA1Mi4zIDM0LjMgOTUuOSA4My40IDEwNS41djUzLjZDNTcuNSAzNDAuMSAwIDI3Mi40IDAgMTkxLjZjMC04MC41IDU5LjgtMTQ3LjIgMTM3LjQtMTU4em0zMTEuNCA0NDcuMmMtMTEuMiAxMS4yLTIzLjEgMTIuMy0yOC42IDEwLjUtNS40LTEuOC0yNy4xLTE5LjktNjAuNC00NC40LTMzLjMtMjQuNi0zMy42LTM1LjctNDMtNTYuNy05LjQtMjAuOS0zMC40LTQyLjYtNTcuNS01Mi40bC05LjctMTQuN2MtMjQuNyAxNi45LTUzIDI2LjktODEuMyAyOC43bDIuMS02LjYgMTUuOS00OS41YzQ2LjUtMTEuOSA4MC45LTU0IDgwLjktMTA0LjIgMC01NC41LTM4LjQtMTAyLjEtOTYtMTA3LjFWMzIuM0MyNTQuNCAzNy40IDMyMCAxMDYuOCAzMjAgMTkxLjZjMCAzMy42LTExLjIgNjQuNy0yOSA5MC40bDE0LjYgOS42YzkuOCAyNy4xIDMxLjUgNDggNTIuNCA1Ny40czMyLjIgOS43IDU2LjggNDNjMjQuNiAzMy4yIDQyLjcgNTQuOSA0NC41IDYwLjNzLjcgMTcuMy0xMC41IDI4LjV6bS05LjktMTcuOWMwLTQuNC0zLjYtOC04LThzLTggMy42LTggOCAzLjYgOCA4IDggOC0zLjYgOC04elwiXSxzZWxsY2FzdDpbNDQ4LDUxMixbXSxcImYyZGFcIixcIk0zNTMuNCAzMkg5NC43QzQyLjYgMzIgMCA3NC42IDAgMTI2LjZ2MjU4LjdDMCA0MzcuNCA0Mi42IDQ4MCA5NC43IDQ4MGgyNTguN2M1Mi4xIDAgOTQuNy00Mi42IDk0LjctOTQuNlYxMjYuNmMwLTUyLTQyLjYtOTQuNi05NC43LTk0LjZ6bS01MCAzMTYuNGMtMjcuOSA0OC4yLTg5LjkgNjQuOS0xMzguMiAzNy4yLTIyLjkgMzkuOC01NC45IDguNi00Mi4zLTEzLjJsMTUuNy0yNy4yYzUuOS0xMC4zIDE5LjItMTMuOSAyOS41LTcuOSAxOC42IDEwLjgtLjEtLjEgMTguNSAxMC43IDI3LjYgMTUuOSA2My40IDYuMyA3OS40LTIxLjMgMTUuOS0yNy42IDYuMy02My40LTIxLjMtNzkuNC0xNy44LTEwLjItLjYtLjQtMTguNi0xMC42LTI0LjYtMTQuMi0zLjQtNTEuOSAyMS42LTM3LjUgMTguNiAxMC44LS4xLS4xIDE4LjUgMTAuNyA0OC40IDI4IDY1LjEgOTAuMyAzNy4yIDEzOC41em0yMS44LTIwOC44Yy0xNyAyOS41LTE2LjMgMjguOC0xOSAzMS41LTYuNSA2LjUtMTYuMyA4LjctMjYuNSAzLjYtMTguNi0xMC44LjEuMS0xOC41LTEwLjctMjcuNi0xNS45LTYzLjQtNi4zLTc5LjQgMjEuM3MtNi4zIDYzLjQgMjEuMyA3OS40YzAgMCAxOC41IDEwLjYgMTguNiAxMC42IDI0LjYgMTQuMiAzLjQgNTEuOS0yMS42IDM3LjUtMTguNi0xMC44LjEuMS0xOC41LTEwLjctNDguMi0yNy44LTY0LjktOTAuMS0zNy4xLTEzOC40IDI3LjktNDguMiA4OS45LTY0LjkgMTM4LjItMzcuMmw0LjgtOC40YzE0LjMtMjQuOSA1Mi0zLjMgMzcuNyAyMS41elwiXSxzZWxsc3k6WzY0MCw1MTIsW10sXCJmMjEzXCIsXCJNNTM5LjcxIDIzNy4zMDhjMy4wNjQtMTIuMjU3IDQuMjktMjQuODIxIDQuMjktMzcuMzg0QzU0NCAxMDcuMzgyIDQ2OC42MTggMzIgMzc2LjA3NiAzMmMtNzcuMjIgMC0xNDQuNjM0IDUzLjAxMi0xNjMuMDIgMTI3Ljc4MS0xNS4zMjItMTMuMTc2LTM0LjkzNC0yMC41My01NS4xNTctMjAuNTMtNDYuMjcxIDAtODMuOTYyIDM3LjY5LTgzLjk2MiA4My45NjEgMCA3LjM1NC45MiAxNS4wMTUgMy4wNjUgMjIuMzY5LTQyLjkgMjAuMjI1LTcwLjc4NSA2My43MzgtNzAuNzg1IDExMS4yMzRDNi4yMTYgNDI0Ljg0MyA2MS42OCA0ODAgMTI5LjQwMSA0ODBoMzgxLjE5OGM2Ny43MiAwIDEyMy4xODQtNTUuMTU3IDEyMy4xODQtMTIzLjE4NC4wMDEtNTYuMzg0LTM4LjkxNi0xMDYuMDI1LTk0LjA3My0xMTkuNTA4ek0xOTkuODggNDAxLjU1NGMwIDguMjc0LTcuMDQ4IDE1LjMyMS0xNS4zMjEgMTUuMzIxSDE1My42MWMtOC4yNzQgMC0xNS4zMjEtNy4wNDgtMTUuMzIxLTE1LjMyMVYyOTAuNjI2YzAtOC4yNzMgNy4wNDgtMTUuMzIxIDE1LjMyMS0xNS4zMjFoMzAuOTQ5YzguMjc0IDAgMTUuMzIxIDcuMDQ4IDE1LjMyMSAxNS4zMjF2MTEwLjkyOHptODkuNDc3IDBjMCA4LjI3NC03LjA0OCAxNS4zMjEtMTUuMzIyIDE1LjMyMWgtMzAuOTQ5Yy04LjI3NCAwLTE1LjMyMS03LjA0OC0xNS4zMjEtMTUuMzIxVjI3MC4wOTZjMC04LjI3NCA3LjA0OC0xNS4zMjEgMTUuMzIxLTE1LjMyMWgzMC45NDljOC4yNzQgMCAxNS4zMjIgNy4wNDggMTUuMzIyIDE1LjMyMXYxMzEuNDU4em04OS40NzcgMGMwIDguMjc0LTcuMDQ3IDE1LjMyMS0xNS4zMjEgMTUuMzIxaC0zMC45NDljLTguMjc0IDAtMTUuMzIyLTcuMDQ4LTE1LjMyMi0xNS4zMjFWMjM4Ljg0YzAtOC4yNzQgNy4wNDgtMTUuMzIxIDE1LjMyMi0xNS4zMjFoMzAuOTQ5YzguMjc0IDAgMTUuMzIxIDcuMDQ4IDE1LjMyMSAxNS4zMjF2MTYyLjcxNHptODcuMDI3IDBjMCA4LjI3NC03LjA0OCAxNS4zMjEtMTUuMzIyIDE1LjMyMWgtMjguNDk3Yy04LjI3NCAwLTE1LjMyMS03LjA0OC0xNS4zMjEtMTUuMzIxVjE3Ni45NDFjMC04LjU3OSA3LjA0Ny0xNS42MjggMTUuMzIxLTE1LjYyOGgyOC40OTdjOC4yNzQgMCAxNS4zMjIgNy4wNDggMTUuMzIyIDE1LjYyOHYyMjQuNjEzelwiXSxzZXJ2aWNlc3RhY2s6WzQ5Niw1MTIsW10sXCJmM2VjXCIsXCJNODggMjE2YzgxLjcgMTAuMiAyNzMuNyAxMDIuMyAzMDQgMjMySDBjOTkuNS04LjEgMTg0LjUtMTM3IDg4LTIzMnptMzItMTUyYzMyLjMgMzUuNiA0Ny43IDgzLjkgNDYuNCAxMzMuNkMyNDkuMyAyMzEuMyAzNzMuNyAzMjEuMyA0MDAgNDQ4aDk2QzQ1NS4zIDIzMS45IDIyMi44IDc5LjUgMTIwIDY0elwiXSxzaGlydHNpbmJ1bGs6WzQ0OCw1MTIsW10sXCJmMjE0XCIsXCJNMzk1LjIwOCAyMjEuNTgzSDQwNnYzMy41NDJoLTEwLjc5MnYtMzMuNTQyem0wLTkuNjI1SDQwNnYtMzMuNTQyaC0xMC43OTJ2MzMuNTQyem0wIDg2LjMzM0g0MDZWMjY0Ljc1aC0xMC43OTJ2MzMuNTQxek0zNTguNzUgMTM1LjI1aC0zMy41NDJ2MTAuNWgzMy41NDJ2LTEwLjV6bTM2LjQ1OCAyMDYuMjA4SDQwNnYtMzMuNTQyaC0xMC43OTJ2MzMuNTQyek0zMTEuNSAxMzUuMjVoLTMzLjU0MnYxMC41SDMxMS41di0xMC41em0tNDcuMjUgMEgyMzF2MTAuNWgzMy4yNXYtMTAuNXptLTQ3LjI1IDBoLTMzLjI1djEwLjVIMjE3di0xMC41em0xNzguMjA4IDMzLjU0Mkg0MDZWMTM1LjI1aC0zMy41NDJ2MTAuNWgyMi43NXYyMy4wNDJ6bS0yNTUuNzkyIDI1OWwzMC42MjUgMTMuNDE3IDQuMzc1LTkuOTE3LTMwLjYyNS0xMy40MTctNC4zNzUgOS45MTd6TTE3OS4wODMgNDQ1bDMwLjMzNCAxMy43MDggNC4zNzQtOS45MTYtMzAuMzMzLTEzLjQxNy00LjM3NSA5LjYyNXptMjE2LjEyNS02MC4zNzVINDA2di0zMy41NDJoLTEwLjc5MnYzMy41NDJ6bS0zMzQuODMzIDguMTY3TDkxIDQwNi4yMDhsNC4zNzUtOS42MjQtMzAuNjI1LTEzLjcwOS00LjM3NSA5LjkxN3ptMzkuNjY2IDE3LjQ5OWwzMC42MjUgMTMuNDE3IDQuMzc1LTkuOTE3LTMwLjYyNS0xMy40MTYtNC4zNzUgOS45MTZ6bTEzMi40MTcgMzguNTAxbDQuMzc1IDkuOTE2TDI2Ny40NTkgNDQ1bC00LjM3NS05LjYyNS0zMC42MjYgMTMuNDE3em0xMTguNDE3LTUyLjIwOGw0LjM3NSA5LjYyNCAzMC42MjQtMTMuNDE2LTQuMzc0LTkuOTE3LTMwLjYyNSAxMy43MDl6TTMxMS41IDQxMy43OTFsNC4zNzUgOS45MTcgMzAuNjI1LTEzLjQxNy00LjM3NC05LjkxNi0zMC42MjYgMTMuNDE2em0tMzkuNjY3IDE3LjUwMWw0LjM3NSA5LjkxNyAzMC42MjUtMTMuNDE3LTQuMzc1LTkuOTE3LTMwLjYyNSAxMy40MTd6TTMxMS41IDQ2LjU4M2gtMzMuNTQydjEwLjVIMzExLjV2LTEwLjV6bTk0LjIwOSAwaC0zMy4yNTF2MTAuNWgzMy4yNTF2LTEwLjV6bS0xODguNzA5IDBoLTMzLjI1djEwLjVIMjE3di0xMC41em0xNDEuNzUgMGgtMzMuNTQydjEwLjVoMzMuNTQydi0xMC41em0tOTQuNSAwSDIzMXYxMC41aDMzLjI1di0xMC41ek00NDggMy43MDh2NDA2bC0yMjYuMzM0IDk4LjU4NEwwIDQwOS43MDh2LTQwNmg0NDh6bS0yOS4xNjYgMTE2Ljk1OEgyOS4xNjZWMzkwLjc1bDE5Mi43OTIgODUuNzUgMTk2Ljg3NS04NS43NVYxMjAuNjY2em0wLTg3Ljc5MUgyOS4xNjZWOTEuNWgzODkuNjY3VjMyLjg3NXpNNzUuNTQyIDQ2LjU4M0g0Mi4yOTF2MTAuNWgzMy4yNTF2LTEwLjV6bTk0LjUgMEgxMzYuNXYxMC41aDMzLjU0MnYtMTAuNXptLTQ3LjI1MSAwSDg5LjI1djEwLjVoMzMuNTQydi0xMC41em03LjU4NCAyMzYuNTQyYzAtNTAuMTY3IDQxLjEyNS05MS4yOTIgOTEuMjkyLTkxLjI5MiA1MC40NTggMCA5MS4yOTIgNDEuMTI1IDkxLjI5MiA5MS4yOTIgMCA1MC40NTgtNDAuODMzIDkxLjI5Mi05MS4yOTIgOTEuMjkyLTUwLjE2Ny0uMDAxLTkxLjI5Mi00MC44MzQtOTEuMjkyLTkxLjI5MnptMTIwLjc1IDE4LjA4NGMwIDEzLjEyNS0yMy45MTcgMTQuMjkxLTMyLjY2NiAxNC4yOTEtMTIuMjUgMC0yOS43NS0yLjYyNS0zNS44NzUtMTQuODc1aC0uODc1TDE3Mi42NjYgMzE5YzE0Ljg3NiA5LjMzMyAyOS4xNjcgMTIuMjUgNDcuMjUgMTIuMjUgMTkuNTQyIDAgNTEuMDQyLTUuODMzIDUxLjA0Mi0zMS4yMDkgMC00OC4xMjUtNzguNDU4LTE2LjMzMy03OC40NTgtMzcuOTE2IDAtMTMuMTI1IDIwLjcwOC0xNC44NzUgMjkuNzUtMTQuODc1IDEwLjc5MSAwIDI5LjE2NiAzLjIwOCAzNS41ODMgMTMuMTI0aC44NzVsOC43NTEtMTYuOTE2Yy0xNS4xNjctNi4xMjUtMjcuNDE3LTExLjk1OS00NC4zMzQtMTEuOTU5LTIwLjEyNSAwLTQ5LjU4MyA2LjQxNy00OS41ODMgMzEuNzkyIDAgNDQuMzM0IDc3LjU4MyAxMS45NTkgNzcuNTgzIDM3LjkxOHpNMTIyLjc5MSAxMzUuMjVIODkuMjV2MTAuNWgzMy41NDJ2LTEwLjV6bS02OS45OTkgMTAuNWgyMi43NXYtMTAuNUg0MnYzMy41NDJoMTAuNzkyVjE0NS43NXptMCAzMi42NjZINDJ2MzMuNTQyaDEwLjc5MnYtMzMuNTQyem0xMTcuMjUtNDMuMTY2SDEzNi41djEwLjVoMzMuNTQydi0xMC41em0tMTE3LjI1IDg2LjMzM0g0MnYzMy41NDJoMTAuNzkydi0zMy41NDJ6bTAgODYuMzM0SDQydjMzLjU0MmgxMC43OTJ2LTMzLjU0MnptMC00My4xNjdINDJ2MzMuNTQyaDEwLjc5MlYyNjQuNzV6bTAgODYuMzMzSDQydjMzLjU0MmgxMC43OTJ2LTMzLjU0MnpcIl0sc2hvcHdhcmU6WzQ5NSw1MTIsW10sXCJmNWI1XCIsXCJNMzk1LjUgNDU1LjI3Yy00Mi45NSAzMS43OS05My45NSA0OC41OS0xNDcuNDggNDguNTktMTM3LjIxIDAtMjQ4LjAyLTExMS0yNDguMDItMjQ4IDAtMTM3LjE5IDExMS4wNC0yNDggMjQ4LjAyLTI0OCA2MS4zIDAgMTIwLjE0IDIyLjU1IDE2NS42OCA2My41IDIuNjIgMi4zNi41OCA2LjY0LTIuODYgNi4xOC0xNy42Ny0yLjQzLTM2Ljc1LTMuNjYtNTYuNzEtMy42Ni0xMjkuMzYgMC0yMjIuNCA1My40Ny0yMjIuNCAxNTUuMzUgMCAxMDkuMDQgOTIuMTMgMTQ1Ljg4IDE3Ni44MyAxNzguNzMgMzMuNjQgMTMuMDQgNjUuNCAyNS4zNiA4Ni45NiA0MS41OSAxLjkgMS40NCAxLjg5IDQuMzEtLjAyIDUuNzJ6bTk5LjQ2LTIyMi4zMmMtLjA4LS45NC0uNTUtMS44My0xLjI3LTIuNDQtNTEuNzYtNDIuOTYtOTMuNjItNjAuNDgtMTQ0LjQ4LTYwLjQ4LTg0LjEzIDAtODAuMjUgNTIuMTctODAuMjUgNTMuNjMgMCA0Mi42IDUyLjA2IDYyLjAxIDExMi4zNCA4NC40OSAzMS4wNyAxMS41OSA2My4xOSAyMy41NyA5Mi42OCAzOS45MyAxLjg4IDEuMDUgNC4yNi4xOSA1LjA1LTEuODIgMTguODktNDguMzkgMTcuOTQtOTAuMjMgMTUuOTMtMTEzLjMxelwiXSxzaW1wbHlidWlsdDpbNTEyLDUxMixbXSxcImYyMTVcIixcIk00ODEuMiA2NGgtMTA2Yy0xNC41IDAtMjYuNiAxMS44LTI2LjYgMjYuM3YzOS42SDE2My4zVjkwLjNjMC0xNC41LTEyLTI2LjMtMjYuNi0yNi4zaC0xMDZDMTYuMSA2NCA0LjMgNzUuOCA0LjMgOTAuM3YzMzEuNGMwIDE0LjUgMTEuOCAyNi4zIDI2LjYgMjYuM2g0NTAuNGMxNC44IDAgMjYuNi0xMS44IDI2LjYtMjYuM1Y5MC4zYy0uMi0xNC41LTEyLTI2LjMtMjYuNy0yNi4zek0xNDkuOCAzNTUuOGMtMzYuNiAwLTY2LjQtMjkuNy02Ni40LTY2LjQgMC0zNi45IDI5LjctNjYuNiA2Ni40LTY2LjYgMzYuOSAwIDY2LjYgMjkuNyA2Ni42IDY2LjYgMCAzNi43LTI5LjcgNjYuNC02Ni42IDY2LjR6bTIxMi40IDBjLTM2LjkgMC02Ni42LTI5LjctNjYuNi02Ni42IDAtMzYuNiAyOS43LTY2LjQgNjYuNi02Ni40IDM2LjYgMCA2Ni40IDI5LjcgNjYuNCA2Ni40IDAgMzYuOS0yOS44IDY2LjYtNjYuNCA2Ni42elwiXSxzaXN0cml4Ols0NDgsNTEyLFtdLFwiZjNlZVwiLFwiTTQ0OCA0NDlMMzAxLjIgMzAwLjJjMjAtMjcuOSAzMS45LTYyLjIgMzEuOS05OS4yIDAtOTMuMS03NC43LTE2OC45LTE2Ni41LTE2OC45Qzc0LjcgMzIgMCAxMDcuOCAwIDIwMC45czc0LjcgMTY4LjkgMTY2LjUgMTY4LjljMzkuOCAwIDc2LjMtMTQuMiAxMDUtMzcuOWwxNDYgMTQ4LjEgMzAuNS0zMXpNMTY2LjUgMzMwLjhjLTcwLjYgMC0xMjguMS01OC4zLTEyOC4xLTEyOS45Uzk1LjkgNzEgMTY2LjUgNzFzMTI4LjEgNTguMyAxMjguMSAxMjkuOS01Ny40IDEyOS45LTEyOC4xIDEyOS45elwiXSxzaXRoOls0NDgsNTEyLFtdLFwiZjUxMlwiLFwiTTAgMzJsNjkuNzEgMTE4Ljc1LTU4Ljg2LTExLjUyIDY5Ljg0IDkxLjAzYTE0Ni43NDEgMTQ2Ljc0MSAwIDAgMCAwIDUxLjQ1bC02OS44NCA5MS4wMyA1OC44Ni0xMS41MkwwIDQ4MGwxMTguNzUtNjkuNzEtMTEuNTIgNTguODYgOTEuMDMtNjkuODRjMTcuMDIgMy4wNCAzNC40NyAzLjA0IDUxLjQ4IDBsOTEuMDMgNjkuODQtMTEuNTItNTguODZMNDQ4IDQ4MGwtNjkuNzEtMTE4Ljc4IDU4Ljg2IDExLjUyLTY5Ljg0LTkxLjAzYzMuMDMtMTcuMDEgMy4wNC0zNC40NCAwLTUxLjQ1bDY5Ljg0LTkxLjAzLTU4Ljg2IDExLjUyTDQ0OCAzMmwtMTE4Ljc1IDY5LjcxIDExLjUyLTU4LjktOTEuMDYgNjkuODdjLTguNS0xLjUyLTE3LjEtMi4yOS0yNS43MS0yLjI5cy0xNy4yMS43OC0yNS43MSAyLjI5bC05MS4wNi02OS44NyAxMS41MiA1OC45TDAgMzJ6bTIyNCA5OS43OGMzMS44IDAgNjMuNiAxMi4xMiA4Ny44NSAzNi4zNyA0OC41IDQ4LjUgNDguNDkgMTI3LjIxIDAgMTc1LjdzLTEyNy4yIDQ4LjQ2LTE3NS43LS4wM2MtNDguNS00OC41LTQ4LjQ5LTEyNy4yMSAwLTE3NS43IDI0LjI0LTI0LjI1IDU2LjA1LTM2LjM0IDg3Ljg1LTM2LjM0em0wIDM2LjY2Yy0yMi40MiAwLTQ0LjgzIDguNTItNjEuOTIgMjUuNjEtMzQuMTggMzQuMTgtMzQuMTkgODkuNjggMCAxMjMuODdzODkuNjUgMzQuMTggMTIzLjg0IDBjMzQuMTgtMzQuMTggMzQuMTktODkuNjggMC0xMjMuODctMTcuMDktMTcuMDktMzkuNS0yNS42MS02MS45Mi0yNS42MXpcIl0sc2t5YXRsYXM6WzY0MCw1MTIsW10sXCJmMjE2XCIsXCJNNjQwIDMyOS4zYzAgNjUuOS01Mi41IDExNC40LTExNy41IDExNC40LTE2NS45IDAtMTk2LjYtMjQ5LjctMzU5LjctMjQ5LjctMTQ2LjkgMC0xNDcuMSAyMTIuMiA1LjYgMjEyLjIgNDIuNSAwIDkwLjktMTcuOCAxMjUuMy00Mi41IDUuNi00LjEgMTYuOS0xNi4zIDIyLjgtMTYuM3MxMC45IDUgMTAuOSAxMC45YzAgNy44LTEzLjEgMTkuMS0xOC43IDI0LjEtNDAuOSAzNS42LTEwMC4zIDYxLjItMTU0LjcgNjEuMi04My40LjEtMTU0LTU5LTE1NC0xNDQuOXM2Ny41LTE0OS4xIDE1Mi44LTE0OS4xYzE4NS4zIDAgMjIyLjUgMjQ1LjkgMzYxLjkgMjQ1LjkgOTkuOSAwIDk0LjgtMTM5LjcgMy40LTEzOS43LTE3LjUgMC0zNSAxMS42LTQ2LjkgMTEuNi04LjQgMC0xNS45LTcuMi0xNS45LTE1LjYgMC0xMS42IDUuMy0yMy43IDUuMy0zNi4zIDAtNjYuNi01MC45LTExNC43LTExNi45LTExNC43LTUzLjEgMC04MCAzNi45LTg4LjggMzYuOS02LjIgMC0xMS4yLTUtMTEuMi0xMS4yIDAtNS42IDQuMS0xMC4zIDcuOC0xNC40IDI1LjMtMjguOCA2NC43LTQzLjcgMTAyLjgtNDMuNyA3OS40IDAgMTM5LjEgNTguNCAxMzkuMSAxMzcuOCAwIDYuOS0uMyAxMy43LTEuMiAyMC42IDExLjktMy4xIDI0LjEtNC43IDM1LjktNC43IDYwLjcgMCAxMTEuOSA0NS4zIDExMS45IDEwNy4yelwiXSxza3lwZTpbNDQ4LDUxMixbXSxcImYxN2VcIixcIk00MjQuNyAyOTkuOGMyLjktMTQgNC43LTI4LjkgNC43LTQzLjggMC0xMTMuNS05MS45LTIwNS4zLTIwNS4zLTIwNS4zLTE0LjkgMC0yOS43IDEuNy00My44IDQuN0MxNjEuMyA0MC43IDEzNy43IDMyIDExMiAzMiA1MC4yIDMyIDAgODIuMiAwIDE0NGMwIDI1LjcgOC43IDQ5LjMgMjMuMyA2OC4yLTIuOSAxNC00LjcgMjguOS00LjcgNDMuOCAwIDExMy41IDkxLjkgMjA1LjMgMjA1LjMgMjA1LjMgMTQuOSAwIDI5LjctMS43IDQzLjgtNC43IDE5IDE0LjYgNDIuNiAyMy4zIDY4LjIgMjMuMyA2MS44IDAgMTEyLTUwLjIgMTEyLTExMiAuMS0yNS42LTguNi00OS4yLTIzLjItNjguMXptLTE5NC42IDkxLjVjLTY1LjYgMC0xMjAuNS0yOS4yLTEyMC41LTY1IDAtMTYgOS0zMC42IDI5LjUtMzAuNiAzMS4yIDAgMzQuMSA0NC45IDg4LjEgNDQuOSAyNS43IDAgNDIuMy0xMS40IDQyLjMtMjYuMyAwLTE4LjctMTYtMjEuNi00Mi0yOC02Mi41LTE1LjQtMTE3LjgtMjItMTE3LjgtODcuMiAwLTU5LjIgNTguNi04MS4xIDEwOS4xLTgxLjEgNTUuMSAwIDExMC44IDIxLjkgMTEwLjggNTUuNCAwIDE2LjktMTEuNCAzMS44LTMwLjMgMzEuOC0yOC4zIDAtMjkuMi0zMy41LTc1LTMzLjUtMjUuNyAwLTQyIDctNDIgMjIuNSAwIDE5LjggMjAuOCAyMS44IDY5LjEgMzMgNDEuNCA5LjMgOTAuNyAyNi44IDkwLjcgNzcuNiAwIDU5LjEtNTcuMSA4Ni41LTExMiA4Ni41elwiXSxzbGFjazpbNDQ4LDUxMixbXSxcImYxOThcIixcIk0yNDQuMiAyMTcuNWwxOS4zIDU3LjctNTkuOCAyMC0xOS4zLTU3LjcgNTkuOC0yMHptNDEuNCAyNDMuN0MxMzEuNiA1MDcuNCA2NSA0NzEuNiAxOC44IDMxNy42UzguNCA5NyAxNjIuNCA1MC44QzMxNi40IDQuNiAzODMgNDAuNCA0MjkuMiAxOTQuNGM0Ni4yIDE1NCAxMC40IDIyMC42LTE0My42IDI2Ni44ek0zNjYuMiAyNjVjLTMuOS0xMi4yLTE3LjItMTguNi0yOS40LTE0LjdsLTI5IDkuNy0xOS4zLTU3LjcgMjktOS43YzEyLjItMy45IDE4LjYtMTcuMiAxNC43LTI5LjQtMy45LTEyLjItMTcuMi0xOC42LTI5LjQtMTQuN2wtMjkgOS43LTEwLTMwLjFjLTMuOS0xMi4yLTE3LjItMTguNi0yOS40LTE0LjctMTIuMiAzLjktMTguNiAxNy4yLTE0LjcgMjkuNGwxMCAzMC4xLTU5LjggMjAuMS0xMC0zMC4xYy0zLjktMTIuMi0xNy4yLTE4LjYtMjkuNC0xNC43LTEyLjIgMy45LTE4LjYgMTcuMi0xNC43IDI5LjRsMTAgMzAuMS0yOSA5LjdjLTEyLjIgMy45LTE4LjYgMTcuMi0xNC43IDI5LjQgMy4yIDkuMyAxMi4yIDE1LjQgMjEuNSAxNS44IDQuMy42IDcuNy0xIDM2LjktMTAuN2wxOS4zIDU3LjctMjkgOS43Yy0xMi4yIDMuOS0xOC42IDE3LjItMTQuNyAyOS40IDMuMiA5LjMgMTIuMiAxNS40IDIxLjUgMTUuOCA0LjMuNiA3LjctMSAzNi45LTEwLjdsMTAgMzAuMWMzLjcgMTAuOCAxNS44IDE4LjYgMjkuNCAxNC43IDEyLjItMy45IDE4LjYtMTcuMiAxNC43LTI5LjRsLTEwLTMwLjEgNTkuOC0yMC4xIDEwIDMwLjFjMy43IDEwLjggMTUuOCAxOC42IDI5LjQgMTQuNyAxMi4yLTMuOSAxOC42LTE3LjIgMTQuNy0yOS40bC0xMC0zMC4xIDI5LTkuN2MxMi4yLTQuMiAxOC42LTE3LjUgMTQuNy0yOS42elwiXSxcInNsYWNrLWhhc2hcIjpbNDQ4LDUxMixbXSxcImYzZWZcIixcIk00NDYuMiAyNzAuNGMtNi4yLTE5LTI2LjktMjkuMS00Ni0yMi45bC00NS40IDE1LjEtMzAuMy05MCA0NS40LTE1LjFjMTkuMS02LjIgMjkuMS0yNi44IDIzLTQ1LjktNi4yLTE5LTI2LjktMjkuMS00Ni0yMi45bC00NS40IDE1LjEtMTUuNy00N2MtNi4yLTE5LTI2LjktMjkuMS00Ni0yMi45LTE5LjEgNi4yLTI5LjEgMjYuOC0yMyA0NS45bDE1LjcgNDctOTMuNCAzMS4yLTE1LjctNDdjLTYuMi0xOS0yNi45LTI5LjEtNDYtMjIuOS0xOS4xIDYuMi0yOS4xIDI2LjgtMjMgNDUuOWwxNS43IDQ3LTQ1LjMgMTVjLTE5LjEgNi4yLTI5LjEgMjYuOC0yMyA0NS45IDUgMTQuNSAxOS4xIDI0IDMzLjYgMjQuNiA2LjggMSAxMi0xLjYgNTcuNy0xNi44bDMwLjMgOTBMNzggMzU0LjhjLTE5IDYuMi0yOS4xIDI2LjktMjMgNDUuOSA1IDE0LjUgMTkuMSAyNCAzMy42IDI0LjYgNi44IDEgMTItMS42IDU3LjctMTYuOGwxNS43IDQ3YzUuOSAxNi45IDI0LjcgMjkgNDYgMjIuOSAxOS4xLTYuMiAyOS4xLTI2LjggMjMtNDUuOWwtMTUuNy00NyA5My42LTMxLjMgMTUuNyA0N2M1LjkgMTYuOSAyNC43IDI5IDQ2IDIyLjkgMTkuMS02LjIgMjkuMS0yNi44IDIzLTQ1LjlsLTE1LjctNDcgNDUuNC0xNS4xYzE5LTYgMjkuMS0yNi43IDIyLjktNDUuN3ptLTI1NC4xIDQ3LjJsLTMwLjMtOTAuMiA5My41LTMxLjMgMzAuMyA5MC4yLTkzLjUgMzEuM3pcIl0sc2xpZGVzaGFyZTpbNTEyLDUxMixbXSxcImYxZTdcIixcIk0yNDkuNDI5IDIxMS40MzZjMCAzMS43MTYtMjcuNzE1IDU3LjcxNy02MS43MTcgNTcuNzE3LTM0LjAwMSAwLTYxLjcxNi0yNi4wMDEtNjEuNzE2LTU3LjcxNyAwLTMyLjAwMSAyNy43MTUtNTcuNzE2IDYxLjcxNi01Ny43MTYgMzQuMDAxIDAgNjEuNzE3IDI1LjcxNSA2MS43MTcgNTcuNzE2em0yNTQuMjk0IDUwLjAwMmMtMTguMjg2IDIyLjU3My01My4xNDQgNTAuMjg4LTEwNi4yODkgNzIuMDAzQzQ1My43MjIgNTI1LjE2MyAyNjAgNTU1LjczNSAyNjMuMTQzIDQ1Ny40NDZjMCAxLjcxNC0uMjg2LTUyLjg1OS0uMjg2LTkzLjQzMi00LjI4NS0uODU4LTguNTcxLTItMTMuNzE0LTMuMTQzIDAgNDAuODU4LS4yODYgOTguMjg5LS4yODYgOTYuNTc1QzI1MiA1NTUuNzM1IDU4LjI3OCA1MjUuMTYzIDExNC41NjYgMzMzLjQ0MWMtNTMuMTQ1LTIxLjcxNS04OC4wMDMtNDkuNDMtMTA2LjI5LTcyLjAwMy05LjE0My0xMy43MTQuODU4LTI4LjI4NyAxNi4wMDEtMTcuNzE1IDIgMS40MjggNC4yODUgMi44NTcgNi4yODUgNC4yODVWNDkuNzE2QzMwLjU2MyAyMi4yODcgNTEuMTM1IDAgNzYuNTY1IDBoMzU5LjE1N2MyNS40MjkgMCA0Ni4wMDIgMjIuMjg3IDQ2LjAwMiA0OS43MTZ2MTk4LjI5M2w2LTQuMjg1YzE1LjE0My0xMC41NzMgMjUuMTQzIDQgMTUuOTk5IDE3LjcxNHptLTQ2LjU3Mi0xODkuMTVjMC0zMi44NTgtMTAuNTcyLTQ1LjcxNi00MC44NTktNDUuNzE2SDk4LjU2NmMtMzEuNzE2IDAtNDAuNTczIDEwLjg1OC00MC41NzMgNDUuNzE2djE5Mi4yOTNjNjcuNzE3IDM1LjQzIDEyNS43MiAyOS4xNDQgMTU3LjQzNSAyOC4wMDEgMTMuNDI5LS4yODYgMjIuMDAxIDIuMjg2IDI3LjE0NCA3LjcxNSAxLjY4OSAxLjY4NyAxMC4wMjMgOS40NDYgMjAuMjg3IDE3LjE0MyAxLjE0My0xNS43MTUgMTAuMDAxLTI1LjcxNSAzMy43MTYtMjQuODU4IDMyLjI4NyAxLjQyOCA5MS43MTggNy43MTUgMTYwLjU3Ny0yOS43MTZWNzIuMjg4ek0zMzEuMTQ2IDE1My43MmMtMzQuMDAyIDAtNjEuNzE2IDI1LjcxNS02MS43MTYgNTcuNzE2IDAgMzEuNzE2IDI3LjcxNSA1Ny43MTcgNjEuNzE2IDU3LjcxNyAzNC4yODcgMCA2MS43MTYtMjYuMDAxIDYxLjcxNi01Ny43MTcgMC0zMi4wMDEtMjcuNDI5LTU3LjcxNi02MS43MTYtNTcuNzE2elwiXSxzbmFwY2hhdDpbNDk2LDUxMixbXSxcImYyYWJcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0xNjkuNSAzMzguOWMtMy41IDguMS0xOC4xIDE0LTQ0LjggMTguMi0xLjQgMS45LTIuNSA5LjgtNC4zIDE1LjktMS4xIDMuNy0zLjcgNS45LTguMSA1LjloLS4yYy02LjIgMC0xMi44LTIuOS0yNS44LTIuOS0xNy42IDAtMjMuNyA0LTM3LjQgMTMuNy0xNC41IDEwLjMtMjguNCAxOS4xLTQ5LjIgMTguMi0yMSAxLjYtMzguNi0xMS4yLTQ4LjUtMTguMi0xMy44LTkuNy0xOS44LTEzLjctMzcuNC0xMy43LTEyLjUgMC0yMC40IDMuMS0yNS44IDMuMS01LjQgMC03LjUtMy4zLTguMy02LTEuOC02LjEtMi45LTE0LjEtNC4zLTE2LTEzLjgtMi4xLTQ0LjgtNy41LTQ1LjUtMjEuNC0uMi0zLjYgMi4zLTYuOCA1LjktNy40IDQ2LjMtNy42IDY3LjEtNTUuMSA2OC01Ny4xIDAtLjEuMS0uMi4yLS4zIDIuNS01IDMtOS4yIDEuNi0xMi41LTMuNC03LjktMTcuOS0xMC43LTI0LTEzLjItMTUuOC02LjItMTgtMTMuNC0xNy0xOC4zIDEuNi04LjUgMTQuNC0xMy44IDIxLjktMTAuMyA1LjkgMi44IDExLjIgNC4yIDE1LjcgNC4yIDMuMyAwIDUuNS0uOCA2LjYtMS40LTEuNC0yMy45LTQuNy01OCAzLjgtNzcuMUMxODMuMSAxMDAgMjMwLjcgOTYgMjQ0LjcgOTZjLjYgMCA2LjEtLjEgNi43LS4xIDM0LjcgMCA2OCAxNy44IDg0LjMgNTQuMyA4LjUgMTkuMSA1LjIgNTMuMSAzLjggNzcuMSAxLjEuNiAyLjkgMS4zIDUuNyAxLjQgNC4zLS4yIDkuMi0xLjYgMTQuNy00LjIgNC0xLjkgOS42LTEuNiAxMy42IDAgNi4zIDIuMyAxMC4zIDYuOCAxMC40IDExLjkuMSA2LjUtNS43IDEyLjEtMTcuMiAxNi42LTEuNC42LTMuMSAxLjEtNC45IDEuNy02LjUgMi4xLTE2LjQgNS4yLTE5IDExLjUtMS40IDMuMy0uOCA3LjUgMS42IDEyLjUuMS4xLjEuMi4yLjMuOSAyIDIxLjcgNDkuNSA2OCA1Ny4xIDQgMSA3LjEgNS41IDQuOSAxMC44elwiXSxcInNuYXBjaGF0LWdob3N0XCI6WzUxMiw1MTIsW10sXCJmMmFjXCIsXCJNNTEwLjg0NiAzOTIuNjczYy01LjIxMSAxMi4xNTctMjcuMjM5IDIxLjA4OS02Ny4zNiAyNy4zMTgtMi4wNjQgMi43ODYtMy43NzUgMTQuNjg2LTYuNTA3IDIzLjk1Ni0xLjYyNSA1LjU2Ni01LjYyMyA4Ljg2OS0xMi4xMjggOC44NjlsLS4yOTctLjAwNWMtOS4zOTUgMC0xOS4yMDMtNC4zMjMtMzguODUyLTQuMzIzLTI2LjUyMSAwLTM1LjY2MiA2LjA0My01Ni4yNTQgMjAuNTg4LTIxLjgzMiAxNS40MzgtNDIuNzcxIDI4Ljc2NC03NC4wMjcgMjcuMzk5LTMxLjY0NiAyLjMzNC01OC4wMjUtMTYuOTA4LTcyLjg3MS0yNy40MDQtMjAuNzE0LTE0LjY0My0yOS44MjgtMjAuNTgyLTU2LjI0MS0yMC41ODItMTguODY0IDAtMzAuNzM2IDQuNzItMzguODUyIDQuNzItOC4wNzMgMC0xMS4yMTMtNC45MjItMTIuNDIyLTkuMDQtMi43MDMtOS4xODktNC40MDQtMjEuMjYzLTYuNTIzLTI0LjEzLTIwLjY3OS0zLjIwOS02Ny4zMS0xMS4zNDQtNjguNDk4LTMyLjE1YTEwLjYyNyAxMC42MjcgMCAwIDEgOC44NzctMTEuMDY5YzY5LjU4My0xMS40NTUgMTAwLjkyNC04Mi45MDEgMTAyLjIyNy04NS45MzQuMDc0LS4xNzYuMTU1LS4zNDQuMjM3LS41MTUgMy43MTMtNy41MzcgNC41NDQtMTMuODQ5IDIuNDYzLTE4Ljc1My01LjA1LTExLjg5Ni0yNi44NzItMTYuMTY0LTM2LjA1My0xOS43OTYtMjMuNzE1LTkuMzY2LTI3LjAxNS0yMC4xMjgtMjUuNjEyLTI3LjUwNCAyLjQzNy0xMi44MzYgMjEuNzI1LTIwLjczNSAzMy4wMDItMTUuNDUzIDguOTE5IDQuMTgxIDE2Ljg0MyA2LjI5NyAyMy41NDcgNi4yOTcgNS4wMjIgMCA4LjIxMi0xLjIwNCA5Ljk2LTIuMTcxLTIuMDQzLTM1LjkzNi03LjEwMS04Ny4yOSA1LjY4Ny0xMTUuOTY5QzE1OC4xMjIgMjEuMzA0IDIyOS43MDUgMTUuNDIgMjUwLjgyNiAxNS40MmMuOTQ0IDAgOS4xNDEtLjA4OSAxMC4xMS0uMDg5IDUyLjE0OCAwIDEwMi4yNTQgMjYuNzggMTI2LjcyMyA4MS42NDMgMTIuNzc3IDI4LjY1IDcuNzQ5IDc5Ljc5MiA1LjY5NSAxMTYuMDA5IDEuNTgyLjg3MiA0LjM1NyAxLjk0MiA4LjU5OSAyLjEzOSA2LjM5Ny0uMjg2IDEzLjgxNS0yLjM4OSAyMi4wNjktNi4yNTcgNi4wODUtMi44NDYgMTQuNDA2LTIuNDYxIDIwLjQ4LjA1OGwuMDI5LjAxYzkuNDc2IDMuMzg1IDE1LjQzOSAxMC4yMTUgMTUuNTg5IDE3Ljg3LjE4NCA5Ljc0Ny04LjUyMiAxOC4xNjUtMjUuODc4IDI1LjAxOC0yLjExOC44MzUtNC42OTQgMS42NTUtNy40MzQgMi41MjUtOS43OTcgMy4xMDYtMjQuNiA3LjgwNS0yOC42MTYgMTcuMjcxLTIuMDc5IDQuOTA0LTEuMjU2IDExLjIxMSAyLjQ2IDE4Ljc0OC4wODcuMTY4LjE2Ni4zNDIuMjM5LjUxNSAxLjMwMSAzLjAzIDMyLjYxNSA3NC40NiAxMDIuMjMgODUuOTM0IDYuNDI3IDEuMDU4IDExLjE2MyA3Ljg3NyA3LjcyNSAxNS44NTl6XCJdLFwic25hcGNoYXQtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMmFkXCIsXCJNNDAwIDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHptLTYuNSAzMTQuOWMtMy41IDguMS0xOC4xIDE0LTQ0LjggMTguMi0xLjQgMS45LTIuNSA5LjgtNC4zIDE1LjktMS4xIDMuNy0zLjcgNS45LTguMSA1LjloLS4yYy02LjIgMC0xMi44LTIuOS0yNS44LTIuOS0xNy42IDAtMjMuNyA0LTM3LjQgMTMuNy0xNC41IDEwLjMtMjguNCAxOS4xLTQ5LjIgMTguMi0yMSAxLjYtMzguNi0xMS4yLTQ4LjUtMTguMi0xMy44LTkuNy0xOS44LTEzLjctMzcuNC0xMy43LTEyLjUgMC0yMC40IDMuMS0yNS44IDMuMS01LjQgMC03LjUtMy4zLTguMy02LTEuOC02LjEtMi45LTE0LjEtNC4zLTE2LTEzLjgtMi4xLTQ0LjgtNy41LTQ1LjUtMjEuNC0uMi0zLjYgMi4zLTYuOCA1LjktNy40IDQ2LjMtNy42IDY3LjEtNTUuMSA2OC01Ny4xIDAtLjEuMS0uMi4yLS4zIDIuNS01IDMtOS4yIDEuNi0xMi41LTMuNC03LjktMTcuOS0xMC43LTI0LTEzLjItMTUuOC02LjItMTgtMTMuNC0xNy0xOC4zIDEuNi04LjUgMTQuNC0xMy44IDIxLjktMTAuMyA1LjkgMi44IDExLjIgNC4yIDE1LjcgNC4yIDMuMyAwIDUuNS0uOCA2LjYtMS40LTEuNC0yMy45LTQuNy01OCAzLjgtNzcuMUMxNTkuMSAxMDAgMjA2LjcgOTYgMjIwLjcgOTZjLjYgMCA2LjEtLjEgNi43LS4xIDM0LjcgMCA2OCAxNy44IDg0LjMgNTQuMyA4LjUgMTkuMSA1LjIgNTMuMSAzLjggNzcuMSAxLjEuNiAyLjkgMS4zIDUuNyAxLjQgNC4zLS4yIDkuMi0xLjYgMTQuNy00LjIgNC0xLjkgOS42LTEuNiAxMy42IDAgNi4zIDIuMyAxMC4zIDYuOCAxMC40IDExLjkuMSA2LjUtNS43IDEyLjEtMTcuMiAxNi42LTEuNC42LTMuMSAxLjEtNC45IDEuNy02LjUgMi4xLTE2LjQgNS4yLTE5IDExLjUtMS40IDMuMy0uOCA3LjUgMS42IDEyLjUuMS4xLjEuMi4yLjMuOSAyIDIxLjcgNDkuNSA2OCA1Ny4xIDQgMSA3LjEgNS41IDQuOSAxMC44elwiXSxzb3VuZGNsb3VkOls2NDAsNTEyLFtdLFwiZjFiZVwiLFwiTTExMS40IDI1Ni4zbDUuOCA2NS01LjggNjguM2MtLjMgMi41LTIuMiA0LjQtNC40IDQuNHMtNC4yLTEuOS00LjItNC40bC01LjYtNjguMyA1LjYtNjVjMC0yLjIgMS45LTQuMiA0LjItNC4yIDIuMiAwIDQuMSAyIDQuNCA0LjJ6bTIxLjQtNDUuNmMtMi44IDAtNC43IDIuMi01IDVsLTUgMTA1LjYgNSA2OC4zYy4zIDIuOCAyLjIgNSA1IDUgMi41IDAgNC43LTIuMiA0LjctNWw1LjgtNjguMy01LjgtMTA1LjZjMC0yLjgtMi4yLTUtNC43LTV6bTI1LjUtMjQuMWMtMy4xIDAtNS4zIDIuMi01LjYgNS4zbC00LjQgMTMwIDQuNCA2Ny44Yy4zIDMuMSAyLjUgNS4zIDUuNiA1LjMgMi44IDAgNS4zLTIuMiA1LjMtNS4zbDUuMy02Ny44LTUuMy0xMzBjMC0zLjEtMi41LTUuMy01LjMtNS4zek03LjIgMjgzLjJjLTEuNCAwLTIuMiAxLjEtMi41IDIuNUwwIDMyMS4zbDQuNyAzNWMuMyAxLjQgMS4xIDIuNSAyLjUgMi41czIuMi0xLjEgMi41LTIuNWw1LjYtMzUtNS42LTM1LjZjLS4zLTEuNC0xLjEtMi41LTIuNS0yLjV6bTIzLjYtMjEuOWMtMS40IDAtMi41IDEuMS0yLjUgMi41bC02LjQgNTcuNSA2LjQgNTYuMWMwIDEuNyAxLjEgMi44IDIuNSAyLjhzMi41LTEuMSAyLjgtMi41bDcuMi01Ni40LTcuMi01Ny41Yy0uMy0xLjQtMS40LTIuNS0yLjgtMi41em0yNS4zLTExLjRjLTEuNyAwLTMuMSAxLjQtMy4zIDMuM0w0NyAzMjEuM2w1LjggNjUuOGMuMyAxLjcgMS43IDMuMSAzLjMgMy4xIDEuNyAwIDMuMS0xLjQgMy4xLTMuMWw2LjktNjUuOC02LjktNjguMWMwLTEuOS0xLjQtMy4zLTMuMS0zLjN6bTI1LjMtMi4yYy0xLjkgMC0zLjYgMS40LTMuNiAzLjZsLTUuOCA3MCA1LjggNjcuOGMwIDIuMiAxLjcgMy42IDMuNiAzLjZzMy42LTEuNCAzLjktMy42bDYuNC02Ny44LTYuNC03MGMtLjMtMi4yLTItMy42LTMuOS0zLjZ6bTI0MS40LTExMC45Yy0xLjEtLjgtMi44LTEuNC00LjItMS40LTIuMiAwLTQuMi44LTUuNiAxLjktMS45IDEuNy0zLjEgNC4yLTMuMyA2Ljd2LjhsLTMuMyAxNzYuNyAxLjcgMzIuNSAxLjcgMzEuN2MuMyA0LjcgNC4yIDguNiA4LjkgOC42czguNi0zLjkgOC42LTguNmwzLjktNjQuMi0zLjktMTc3LjVjLS40LTMtMi01LjgtNC41LTcuMnptLTI2LjcgMTUuM2MtMS40LS44LTIuOC0xLjQtNC40LTEuNHMtMy4xLjYtNC40IDEuNGMtMi4yIDEuNC0zLjYgMy45LTMuNiA2LjdsLS4zIDEuNy0yLjggMTYwLjhzMCAuMyAzLjEgNjUuNnYuM2MwIDEuNy42IDMuMyAxLjcgNC43IDEuNyAxLjkgMy45IDMuMSA2LjQgMy4xIDIuMiAwIDQuMi0xLjEgNS42LTIuNSAxLjctMS40IDIuNS0zLjMgMi41LTUuNmwuMy02LjcgMy4xLTU4LjYtMy4zLTE2Mi44Yy0uMy0yLjgtMS43LTUuMy0zLjktNi43em0tMTExLjQgMjIuNWMtMy4xIDAtNS44IDIuOC01LjggNi4xbC00LjQgMTQwLjYgNC40IDY3LjJjLjMgMy4zIDIuOCA1LjggNS44IDUuOCAzLjMgMCA1LjgtMi41IDYuMS01LjhsNS02Ny4yLTUtMTQwLjZjLS4yLTMuMy0yLjctNi4xLTYuMS02LjF6bTM3Ni43IDYyLjhjLTEwLjggMC0yMS4xIDIuMi0zMC42IDYuMS02LjQtNzAuOC02NS44LTEyNi40LTEzOC4zLTEyNi40LTE3LjggMC0zNSAzLjMtNTAuMyA5LjQtNi4xIDIuMi03LjggNC40LTcuOCA5LjJ2MjQ5LjdjMCA1IDMuOSA4LjYgOC42IDkuMmgyMTguM2M0My4zIDAgNzguNi0zNSA3OC42LTc4LjMuMS00My42LTM1LjItNzguOS03OC41LTc4Ljl6bS0yOTYuNy02MC4zYy00LjIgMC03LjUgMy4zLTcuOCA3LjhsLTMuMyAxMzYuNyAzLjMgNjUuNmMuMyA0LjIgMy42IDcuNSA3LjggNy41IDQuMiAwIDcuNS0zLjMgNy41LTcuNWwzLjktNjUuNi0zLjktMTM2LjdjLS4zLTQuNS0zLjMtNy44LTcuNS03Ljh6bS01My42LTcuOGMtMy4zIDAtNi40IDMuMS02LjQgNi43bC0zLjkgMTQ1LjMgMy45IDY2LjljLjMgMy42IDMuMSA2LjQgNi40IDYuNCAzLjYgMCA2LjQtMi44IDYuNy02LjRsNC40LTY2LjktNC40LTE0NS4zYy0uMy0zLjYtMy4xLTYuNy02LjctNi43em0yNi43IDMuNGMtMy45IDAtNi45IDMuMS02LjkgNi45TDIyNyAzMjEuM2wzLjkgNjYuNGMuMyAzLjkgMy4xIDYuOSA2LjkgNi45czYuOS0zLjEgNi45LTYuOWw0LjItNjYuNC00LjItMTQxLjdjMC0zLjktMy02LjktNi45LTYuOXpcIl0sc3BlYWthcDpbNDQ4LDUxMixbXSxcImYzZjNcIixcIk0zNTIgMzJIOTZDNDMuMiAzMiAwIDc1LjIgMCAxMjh2MjU2YzAgNTIuOCA0My4yIDk2IDk2IDk2aDI1NmM1Mi44IDAgOTYtNDMuMiA5Ni05NlYxMjhjMC01Mi44LTQzLjItOTYtOTYtOTZ6TTIyMSAzODIuOWMtMzkuNiAwLTgxLjktMTcuOC04MS45LTUzLjdWMzAySDE3OXYxNy44YzAgMTUuMSAxOS41IDI0LjUgNDEuOSAyNC41IDI0LjIgMCA0MS4zLTEwLjQgNDEuMy0yOS41IDAtMjMuOC0yNy4yLTMxLjktNTQuNy00Mi42LTMxLjktMTIuNC02My4xLTI2LjItNjMuMS02OS4xIDAtNDggMzguNi02Ni40IDc5LjktNjYuNCAzNy42IDAgNzUuNSAxNC4xIDc1LjUgNDEuOXYzMS4yaC0zOS45di0xNi4xYzAtMTIuMS0xNy44LTE4LjUtMzUuNi0xOC41LTE5LjUgMC0zNS42IDguMS0zNS42IDI2LjIgMCAyMi4xIDIyLjUgMjkuMiA0NyAzOC45IDM1LjkgMTIuNCA3MS4xIDI3LjIgNzEuMSA3MS41LjEgNDguNi00MC44IDcxLjEtODUuOCA3MS4xelwiXSxzcG90aWZ5Ols0OTYsNTEyLFtdLFwiZjFiY1wiLFwiTTI0OCA4QzExMS4xIDggMCAxMTkuMSAwIDI1NnMxMTEuMSAyNDggMjQ4IDI0OCAyNDgtMTExLjEgMjQ4LTI0OFMzODQuOSA4IDI0OCA4em0xMDAuNyAzNjQuOWMtNC4yIDAtNi44LTEuMy0xMC43LTMuNi02Mi40LTM3LjYtMTM1LTM5LjItMjA2LjctMjQuNS0zLjkgMS05IDIuNi0xMS45IDIuNi05LjcgMC0xNS44LTcuNy0xNS44LTE1LjggMC0xMC4zIDYuMS0xNS4yIDEzLjYtMTYuOCA4MS45LTE4LjEgMTY1LjYtMTYuNSAyMzcgMjYuMiA2LjEgMy45IDkuNyA3LjQgOS43IDE2LjVzLTcuMSAxNS40LTE1LjIgMTUuNHptMjYuOS02NS42Yy01LjIgMC04LjctMi4zLTEyLjMtNC4yLTYyLjUtMzctMTU1LjctNTEuOS0yMzguNi0yOS40LTQuOCAxLjMtNy40IDIuNi0xMS45IDIuNi0xMC43IDAtMTkuNC04LjctMTkuNC0xOS40czUuMi0xNy44IDE1LjUtMjAuN2MyNy44LTcuOCA1Ni4yLTEzLjYgOTcuOC0xMy42IDY0LjkgMCAxMjcuNiAxNi4xIDE3NyA0NS41IDguMSA0LjggMTEuMyAxMSAxMS4zIDE5LjctLjEgMTAuOC04LjUgMTkuNS0xOS40IDE5LjV6bTMxLTc2LjJjLTUuMiAwLTguNC0xLjMtMTIuOS0zLjktNzEuMi00Mi41LTE5OC41LTUyLjctMjgwLjktMjkuNy0zLjYgMS04LjEgMi42LTEyLjkgMi42LTEzLjIgMC0yMy4zLTEwLjMtMjMuMy0yMy42IDAtMTMuNiA4LjQtMjEuMyAxNy40LTIzLjkgMzUuMi0xMC4zIDc0LjYtMTUuMiAxMTcuNS0xNS4yIDczIDAgMTQ5LjUgMTUuMiAyMDUuNCA0Ny44IDcuOCA0LjUgMTIuOSAxMC43IDEyLjkgMjIuNiAwIDEzLjYtMTEgMjMuMy0yMy4yIDIzLjN6XCJdLHNxdWFyZXNwYWNlOls1MTIsNTEyLFtdLFwiZjViZVwiLFwiTTE4Ni4xMiAzNDMuMzRjLTkuNjUgOS42NS05LjY1IDI1LjI5IDAgMzQuOTQgOS42NSA5LjY1IDI1LjI5IDkuNjUgMzQuOTQgMEwzNzguMjQgMjIxLjFjMTkuMjktMTkuMjkgNTAuNTctMTkuMjkgNjkuODYgMHMxOS4yOSA1MC41NyAwIDY5Ljg2TDI5My45NSA0NDUuMWMxOS4yNyAxOS4yOSA1MC41MyAxOS4zMSA2OS44Mi4wNGwuMDQtLjA0IDExOS4yNS0xMTkuMjRjMzguNTktMzguNTkgMzguNTktMTAxLjE0IDAtMTM5LjcyLTM4LjU5LTM4LjU5LTEwMS4xNS0zOC41OS0xMzkuNzIgMGwtMTU3LjIyIDE1Ny4yem0yNDQuNTMtMTA0LjhjLTkuNjUtOS42NS0yNS4yOS05LjY1LTM0LjkzIDBsLTE1Ny4yIDE1Ny4xOGMtMTkuMjcgMTkuMjktNTAuNTMgMTkuMzEtNjkuODIuMDVsLS4wNS0uMDVjLTkuNjQtOS42NC0yNS4yNy05LjY1LTM0LjkyLS4wMWwtLjAxLjAxYy05LjY1IDkuNjQtOS42NiAyNS4yOC0uMDIgMzQuOTNsLjAyLjAyYzM4LjU4IDM4LjU3IDEwMS4xNCAzOC41NyAxMzkuNzIgMGwxNTcuMi0xNTcuMmM5LjY1LTkuNjUgOS42NS0yNS4yOS4wMS0zNC45M3ptLTI2MS45OSA4Ny4zM2wxNTcuMTgtMTU3LjE4YzkuNjQtOS42NSA5LjY0LTI1LjI5IDAtMzQuOTQtOS42NC05LjY0LTI1LjI3LTkuNjQtMzQuOTEgMEwxMzMuNzIgMjkwLjkzYy0xOS4yOCAxOS4yOS01MC41NiAxOS4zLTY5Ljg1LjAxbC0uMDEtLjAxYy0xOS4yOS0xOS4yOC0xOS4zMS01MC41NC0uMDMtNjkuODRsLjAzLS4wM0wyMTguMDMgNjYuODljLTE5LjI4LTE5LjI5LTUwLjU1LTE5LjMtNjkuODUtLjAybC0uMDIuMDJMMjguOTMgMTg2LjE0Yy0zOC41OCAzOC41OS0zOC41OCAxMDEuMTQgMCAxMzkuNzIgMzguNiAzOC41OSAxMDEuMTMgMzguNTkgMTM5LjczLjAxem0tODcuMzMtNTIuNGM5LjY0IDkuNjQgMjUuMjcgOS42NCAzNC45MSAwbDE1Ny4yMS0xNTcuMTljMTkuMjgtMTkuMjkgNTAuNTUtMTkuMyA2OS44NC0uMDJsLjAyLjAyYzkuNjUgOS42NSAyNS4yOSA5LjY1IDM0LjkzIDAgOS42NS05LjY1IDkuNjUtMjUuMjkgMC0zNC45My0zOC41OS0zOC41OS0xMDEuMTMtMzguNTktMTM5LjcyIDBMODEuMzMgMjM4LjU0Yy05LjY1IDkuNjQtOS42NSAyNS4yOC0uMDEgMzQuOTNoLjAxelwiXSxcInN0YWNrLWV4Y2hhbmdlXCI6WzQ0OCw1MTIsW10sXCJmMThkXCIsXCJNMTcuNyAzMzIuM2g0MTIuN3YyMmMwIDM3LjctMjkuMyA2OC02NS4zIDY4aC0xOUwyNTkuMyA1MTJ2LTg5LjdIODNjLTM2IDAtNjUuMy0zMC4zLTY1LjMtNjh2LTIyem0wLTIzLjZoNDEyLjd2LTg1SDE3Ljd2ODV6bTAtMTA5LjRoNDEyLjd2LTg1SDE3Ljd2ODV6TTM2NSAwSDgzQzQ3IDAgMTcuNyAzMC4zIDE3LjcgNjcuN1Y5MGg0MTIuN1Y2Ny43QzQzMC4zIDMwLjMgNDAxIDAgMzY1IDB6XCJdLFwic3RhY2stb3ZlcmZsb3dcIjpbMzg0LDUxMixbXSxcImYxNmNcIixcIk0yOTMuNyAzMDBsLTE4MS4yLTg0LjUgMTYuNy0zNi41IDE4MS4zIDg0LjctMTYuOCAzNi4zem00OC03NkwxODguMiA5NS43bC0yNS41IDMwLjggMTUzLjUgMTI4LjMgMjUuNS0zMC44em0zOS42LTMxLjdMMjYyIDMybC0zMiAyNCAxMTkuMyAxNjAuMyAzMi0yNHpNMjkwLjcgMzExTDk1IDI2OS43IDg2LjggMzA5bDE5NS43IDQxIDguMi0zOXptMzEuNiAxMjlINDIuN1YzMjBoLTQwdjE2MGgzNTkuNVYzMjBoLTQwdjEyMHptLTM5LjgtODBoLTIwMHYzOS43aDIwMFYzNjB6XCJdLHN0YXlsaW5rZWQ6WzQ0MCw1MTIsW10sXCJmM2Y1XCIsXCJNMjAxLjYgMTI3LjRjNC4xLTMuMiAxMC4zLTMgMTMuOC41bDE3MCAxNjcuMy0yLjctMi43IDQ0LjMgNDEuM2MzLjcgMy41IDMuMyA5LS43IDEyLjJsLTE5OCAxNjMuOWMtOS45IDcuNi0xNy4zLjgtMTcuMy44TDIuMyAzMTQuNmMtMy41LTMuNS0zLTkgMS4yLTEyLjJsNDUuOC0zNC45YzQuMi0zLjIgMTAuNC0zIDEzLjkuNWwxNTEuOSAxNDcuNWMzLjcgMy41IDEwIDMuNyAxNC4yLjRsOTMuMi03NGM0LjEtMy4yIDQuNS04LjcuOS0xMi4ybC04NC04MS4zYy0zLjYtMy41LTkuOS0zLjctMTQtLjVsLS4xLjFjLTQuMSAzLjItMTAuNCAzLTE0LS41bC02OC4xLTY0LjNjLTMuNS0zLjUtMy4xLTkgMS4xLTEyLjJsNTcuMy00My42bTE0LjggMjU3LjNjMy43IDMuNSAxMC4xIDMuNyAxNC4zLjRsNTAuMi0zOC44LS4zLS4zIDcuNy02YzQuMi0zLjIgNC42LTguNy45LTEyLjJsLTU3LjEtNTQuNGMtMy42LTMuNS0xMC0zLjctMTQuMi0uNWwtLjEuMWMtNC4yIDMuMi0xMC41IDMuMS0xNC4yLS40TDEwOSAxODAuOGMtMy42LTMuNS0zLjEtOC45IDEuMS0xMi4ybDkyLjItNzEuNWM0LjEtMy4yIDEwLjMtMyAxMy45LjVsMTYwLjQgMTU5YzMuNyAzLjUgMTAgMy43IDE0LjEuNWw0NS44LTM1LjhjNC4xLTMuMiA0LjQtOC43LjctMTIuMkwyMjYuNyAyLjVjLTEuNS0xLjItOC01LjUtMTYuMyAxLjFMMy42IDE2NS43Yy00LjIgMy4yLTQuOCA4LjctMS4yIDEyLjJsNDIuMyA0MS43XCJdLHN0ZWFtOls0OTYsNTEyLFtdLFwiZjFiNlwiLFwiTTQ5NiAyNTZjMCAxMzctMTExLjIgMjQ4LTI0OC40IDI0OC0xMTMuOCAwLTIwOS42LTc2LjMtMjM5LTE4MC40bDk1LjIgMzkuM2M2LjQgMzIuMSAzNC45IDU2LjQgNjguOSA1Ni40IDM5LjIgMCA3MS45LTMyLjQgNzAuMi03My41bDg0LjUtNjAuMmM1Mi4xIDEuMyA5NS44LTQwLjkgOTUuOC05My41IDAtNTEuNi00Mi05My41LTkzLjctOTMuNXMtOTMuNyA0Mi05My43IDkzLjV2MS4yTDE3Ni42IDI3OWMtMTUuNS0uOS0zMC43IDMuNC00My41IDEyLjFMMCAyMzYuMUMxMC4yIDEwOC40IDExNy4xIDggMjQ3LjYgOCAzODQuOCA4IDQ5NiAxMTkgNDk2IDI1NnpNMTU1LjcgMzg0LjNsLTMwLjUtMTIuNmE1Mi43OSA1Mi43OSAwIDAgMCAyNy4yIDI1LjhjMjYuOSAxMS4yIDU3LjgtMS42IDY5LTI4LjQgNS40LTEzIDUuNS0yNy4zLjEtNDAuMy01LjQtMTMtMTUuNS0yMy4yLTI4LjUtMjguNi0xMi45LTUuNC0yNi43LTUuMi0zOC45LS42bDMxLjUgMTNjMTkuOCA4LjIgMjkuMiAzMC45IDIwLjkgNTAuNy04LjMgMTkuOS0zMSAyOS4yLTUwLjggMjF6bTE3My44LTEyOS45Yy0zNC40IDAtNjIuNC0yOC02Mi40LTYyLjNzMjgtNjIuMyA2Mi40LTYyLjMgNjIuNCAyOCA2Mi40IDYyLjMtMjcuOSA2Mi4zLTYyLjQgNjIuM3ptLjEtMTUuNmMyNS45IDAgNDYuOS0yMSA0Ni45LTQ2LjggMC0yNS45LTIxLTQ2LjgtNDYuOS00Ni44cy00Ni45IDIxLTQ2LjkgNDYuOGMuMSAyNS44IDIxLjEgNDYuOCA0Ni45IDQ2Ljh6XCJdLFwic3RlYW0tc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMWI3XCIsXCJNMTg1LjIgMzU2LjVjNy43LTE4LjUtMS0zOS43LTE5LjYtNDcuNGwtMjkuNS0xMi4yYzExLjQtNC4zIDI0LjMtNC41IDM2LjQuNSAxMi4yIDUuMSAyMS42IDE0LjYgMjYuNyAyNi43IDUgMTIuMiA1IDI1LjYtLjEgMzcuNy0xMC41IDI1LjEtMzkuNCAzNy02NC42IDI2LjUtMTEuNi00LjgtMjAuNC0xMy42LTI1LjQtMjQuMmwyOC41IDExLjhjMTguNiA3LjggMzkuOS0uOSA0Ny42LTE5LjR6TTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjE2MC43bDExNi42IDQ4LjFjMTItOC4yIDI2LjItMTIuMSA0MC43LTExLjNsNTUuNC04MC4ydi0xLjFjMC00OC4yIDM5LjMtODcuNSA4Ny42LTg3LjVzODcuNiAzOS4zIDg3LjYgODcuNWMwIDQ5LjItNDAuOSA4OC43LTg5LjYgODcuNWwtNzkgNTYuM2MxLjYgMzguNS0yOS4xIDY4LjgtNjUuNyA2OC44LTMxLjggMC01OC41LTIyLjctNjQuNS01Mi43TDAgMzE5LjJWNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHptLTk5LjcgMjIyLjVjLTMyLjIgMC01OC40LTI2LjEtNTguNC01OC4zczI2LjItNTguMyA1OC40LTU4LjMgNTguNCAyNi4yIDU4LjQgNTguMy0yNi4yIDU4LjMtNTguNCA1OC4zem0uMS0xNC42YzI0LjIgMCA0My45LTE5LjYgNDMuOS00My44IDAtMjQuMi0xOS42LTQzLjgtNDMuOS00My44LTI0LjIgMC00My45IDE5LjYtNDMuOSA0My44IDAgMjQuMiAxOS43IDQzLjggNDMuOSA0My44elwiXSxcInN0ZWFtLXN5bWJvbFwiOls0NDgsNTEyLFtdLFwiZjNmNlwiLFwiTTM5NS41IDE3Ny41YzAgMzMuOC0yNy41IDYxLTYxIDYxLTMzLjggMC02MS0yNy4zLTYxLTYxczI3LjMtNjEgNjEtNjFjMzMuNSAwIDYxIDI3LjIgNjEgNjF6bTUyLjUuMmMwIDYzLTUxIDExMy44LTExMy43IDExMy44TDIyNSAzNzEuM2MtNCA0My00MC41IDc2LjgtODQuNSA3Ni44LTQwLjUgMC03NC43LTI4LjgtODMtNjdMMCAzNThWMjUwLjdMOTcuMiAyOTBjMTUuMS05LjIgMzIuMi0xMy4zIDUyLTExLjVsNzEtMTAxLjdjLjUtNjIuMyA1MS41LTExMi44IDExNC0xMTIuOEMzOTcgNjQgNDQ4IDExNSA0NDggMTc3Ljd6TTIwMyAzNjNjMC0zNC43LTI3LjgtNjIuNS02Mi41LTYyLjUtNC41IDAtOSAuNS0xMy41IDEuNWwyNiAxMC41YzI1LjUgMTAuMiAzOCAzOSAyNy43IDY0LjUtMTAuMiAyNS41LTM5LjIgMzgtNjQuNyAyNy41LTEwLjItNC0yMC41LTguMy0zMC43LTEyLjIgMTAuNSAxOS43IDMxLjIgMzMuMiA1NS4yIDMzLjIgMzQuNyAwIDYyLjUtMjcuOCA2Mi41LTYyLjV6bTIwNy41LTE4NS4zYzAtNDItMzQuMy03Ni4yLTc2LjItNzYuMi00Mi4zIDAtNzYuNSAzNC4yLTc2LjUgNzYuMiAwIDQyLjIgMzQuMyA3Ni4yIDc2LjUgNzYuMiA0MS45LjEgNzYuMi0zMy45IDc2LjItNzYuMnpcIl0sXCJzdGlja2VyLW11bGVcIjpbNTc2LDUxMixbXSxcImYzZjdcIixcIk0zNTMuMSA1MDkuOGMtNS45IDIuOS0zMi4xIDMuMi0zNi41LS41LTQuMS0zLTIuMi0xMS45LTEuNS0xNSAyLjItMTUtMi41LTcuOS05LjgtMTEuNS0zLjEtMS41LTQuMS01LjUtNC42LTEwLS41LTEuNS0xLTIuNS0xLjUtMy41LTEuNy0xMC43IDYuOC0zMy42IDguMi00My40IDQuOS0yMy43LS43LTM3LjIgMS41LTQ2LjkgMy43LTE2LjIgNC4xLTMuNSA0LjEtMjkuOS0xLjQtMjUuOSAzLjMtMzYuOS41LTM4LjktMTQuOCAwLTY0LjMgMTAuNy0xMTIuMiAyLTQ2LjEtOC45LTU5LjQtMjktNjUuNC0zMC45LTEwLjMtNC41LTIzLjIuNS0yNy4zIDctLjEuMS0zNSA3MC42LTM5LjYgODcuOC02LjIgMjAuNS0uNSA0Ny40IDQuMSA2Ni44IDAgLjEgNC41IDE0LjYgMTAuMyAxOS41IDIuMSAxLjUgNS4xIDIuNSA3LjIgNC41IDIuOCAyLjcgOS40IDE1LjIgOS44IDE2IDIuNiA0LjUgMy42IDgtMS41IDEwLjUtMy42IDItOS4zIDIuNS0xNC40IDIuNS0yLjYuNS0xLjUgMy41LTMuMSA1LTIuOSAyLjgtMjAuNyA2LjEtMjkuOSAyLjUtMi42LTEtNS43LTMtNi4yLTUtMS41LTQgMi4xLTktMS0xMi41LTQuNS0yLjktMTMuMS0yLTE3LTEyLTIuMi01LjQtMi42LTcuNi0yLjYtNDkuNCAwLTkuNy01LjktMzguNy04LjItNDYuOS0xLjUtNS41LTEuNS0xMS41IDAtMTYgLjMtLjkgNC4xLTQuNiA0LjEtMTMtMS0xLjUtNC42LS41LTUuMS0xLjUtMTAuNC04MC42LTUuOS03OS03LjctOTguMy0xLjUtMTYtMTAuOS00My45LTYuNy02NC4zLjUtMi40IDMuNC0yMSAyNC4yLTM4LjkgMzEtMjYuNyA0OC40LTM4LjMgMTU5LTExLjUgMS4xLjQgNjYuMyAyMS4xIDExMC43LTkgMTUuNS0xMS4zIDI4LjgtMTEuMyAzNS41LTE2IC4xLS4xIDYxLjctNTIuMSA4Ny02NS4zIDQ3LjItMjkuNCA2OS45LTE2LjcgNzUuMS0xOCA0LjctMSAxMy40LTI1LjggMTctMjUuOCA1LjUgMCAxLjYgMjAuMiAzLjYgMjUuOS41IDIgMy42IDUgNi4yIDUgMi4zIDAgMS43LS44IDEwLjMtNSA4LjQtNS40IDE0LjktMTcuNiAyMC42LTE3IDExLjcgMS42LTE5IDQxLjYtMTkgNDYuOSAwIDIgLjIuOCA0LjYgOS41IDIuNiA1LjUgNC42IDEzLjUgNi4yIDIwIDguMyAyOS43IDUuNyAxNC42IDEzLjQgMzYuOSAyMC4yIDUwLjEgMjAuNiA0NS4yIDIwLjYgNTIuOSAwIDcuNS00LjEgMTEtNy4yIDE2LjUtMS41IDMtNC42IDcuNS03LjIgOC0yLjcuNyA3LTEuNS0xMy40IDIuNS03LjIgMS0xMy40LTQuNS0xNC45LTkuNS0xLjYtNC43IDIuOC0xMC4xLTExLjgtMjIuOS0xMC4zLTEwLTIxLjEtMTEuMy0zMS45LTE3LTkuOC01LjctMTEuOSAxLTE4IDgtMTggMjIuOS0zNCA0Ni45LTUyIDY5LjgtMTEuOCAxNS0yNC4yIDMwLjQtMzMuNSA0Ny40LTMuOSA2LjgtOS41IDI4LjEtMTAuMyAyOS45LTYuMiAxNy43LTUuNSAyNS44LTE2LjUgNjguMy0zLjEgMTAtNS43IDIxLjQtOC43IDMyLjQtMi4yIDYuOC03LjQgNDkuMy0uNSA1OS40IDIuMSAzLjUgOC43IDQuNSAxMS4zIDggLjEuMSA5LjYgMTguMiA5LjMgMjAgMCA2LjEtOS40IDUuNi0xMS4zIDYuNS00LjggMi45LTMuOCA1LjktNi40IDcuNFwiXSxzdHJhdmE6WzM2OSw1MTIsW10sXCJmNDI4XCIsXCJNMzAxLjYgMjkybC00My45IDg4LjItNDQuNi04OC4yaC02Ny42bDExMi4yIDIyMCAxMTEuNS0yMjBoLTY3LjZ6TTE1MS40IDBMMCAyOTJoODkuMmw2Mi4yLTExNi4xTDIxMy4xIDI5Mmg4OC41TDE1MS40IDB6XCJdLHN0cmlwZTpbNjQwLDUxMixbXSxcImY0MjlcIixcIk02NDAgMjYxLjZjMC00NS41LTIyLTgxLjQtNjQuMi04MS40cy02Ny45IDM1LjktNjcuOSA4MS4xYzAgNTMuNSAzMC4zIDc4LjIgNzMuNSA3OC4yIDIxLjIgMCAzNy4xLTQuOCA0OS4yLTExLjV2LTMzLjRjLTEyLjEgNi4xLTI2IDkuOC00My42IDkuOC0xNy4zIDAtMzIuNS02LjEtMzQuNS0yNi45aDg2LjljLjItMi4zLjYtMTEuNi42LTE1LjltLTg3LjktMTYuOGMwLTIwIDEyLjMtMjguNCAyMy40LTI4LjQgMTAuOSAwIDIyLjUgOC40IDIyLjUgMjguNGgtNDUuOXptLTExMi45LTY0LjZjLTE3LjQgMC0yOC42IDguMi0zNC44IDEzLjlsLTIuMy0xMUgzNjN2MjA0LjhsNDQuNC05LjQuMS01MC4yYzYuNCA0LjcgMTUuOSAxMS4yIDMxLjQgMTEuMiAzMS44IDAgNjAuOC0yMy4yIDYwLjgtNzkuNi4xLTUxLjYtMjkuMy03OS43LTYwLjUtNzkuN20tMTAuNiAxMjIuNWMtMTAuNCAwLTE2LjYtMy44LTIwLjktOC40bC0uMy02NmM0LjYtNS4xIDExLTguOCAyMS4yLTguOCAxNi4yIDAgMjcuNCAxOC4yIDI3LjQgNDEuNC4xIDIzLjktMTAuOSA0MS44LTI3LjQgNDEuOE0zNDYuNCAxMjR2MzYuMmwtNDQuNiA5LjV2LTM2LjJsNDQuNi05LjVtLTQ0LjUgNTkuMmg0NC42djE1My4yaC00NC42VjE4My4yem0tNDcuOCAxMy4xYzEwLjQtMTkuMSAzMS4xLTE1LjIgMzcuMS0xMy4xVjIyNGMtNS43LTEuOC0yMy40LTQuNS0zMy45IDkuM3YxMDMuMUgyMTNWMTgzLjJoMzguNGwyLjcgMTMuMW0tODktMTMuMWgzMy43VjIyMWgtMzMuN3Y2My4yYzAgMjYuMiAyOCAxOCAzMy43IDE1Ljd2MzMuOGMtNS45IDMuMi0xNi42IDUuOS0zMS4yIDUuOS0yNi4zIDAtNDYuMS0xNy00Ni4xLTQzLjNsLjItMTQyLjQgNDMuMy05LjIuMSAzOC41ek00NC45IDIyOC4zYzAgMjAgNjcuOSAxMC41IDY3LjkgNjMuNCAwIDMyLTI1LjQgNDcuOC02Mi4zIDQ3LjgtMTUuMyAwLTMyLTMtNDguNS0xMC4xdi00MGMxNC45IDguMSAzMy45IDE0LjIgNDguNiAxNC4yIDkuOSAwIDE3LTIuNyAxNy0xMC45IDAtMjEuMi02Ny41LTEzLjItNjcuNS02Mi40IDAtMzEuNCAyNC01MC4yIDYwLTUwLjIgMTQuNyAwIDI5LjQgMi4zIDQ0LjEgOC4xVjIzMGMtMTMuNS03LjMtMzAuNy0xMS40LTQ0LjItMTEuNC05LjMuMS0xNS4xIDIuOC0xNS4xIDkuN1wiXSxcInN0cmlwZS1zXCI6WzM2Miw1MTIsW10sXCJmNDJhXCIsXCJNMTQ0LjMgMTU0LjZjMC0yMi4zIDE4LjYtMzAuOSA0OC40LTMwLjkgNDMuNCAwIDk4LjUgMTMuMyAxNDEuOSAzNi43VjI2LjFDMjg3LjMgNy4yIDI0MC4xIDAgMTkyLjggMCA3Ny4xIDAgMCA2MC40IDAgMTYxLjRjMCAxNTcuOSAyMTYuOCAxMzIuMyAyMTYuOCAyMDAuNCAwIDI2LjQtMjIuOSAzNC45LTU0LjcgMzQuOS00Ny4yIDAtMTA4LjItMTkuNS0xNTYuMS00NS41djEyOC41YzUzIDIyLjggMTA2LjggMzIuNCAxNTYgMzIuNCAxMTguNiAwIDIwMC4zLTUxIDIwMC4zLTE1My42IDAtMTcwLjItMjE4LTEzOS43LTIxOC0yMDMuOVwiXSxzdHVkaW92aW5hcmk6WzUxMiw1MTIsW10sXCJmM2Y4XCIsXCJNNDgwLjMgMTg3LjdsNC4yIDI4djI4bC0yNS4xIDQ0LjEtMzkuOCA3OC40LTU2LjEgNjcuNS03OS4xIDM3LjgtMTcuNyAyNC41LTcuNyAxMi05LjYgNHMxNy4zLTYzLjYgMTkuNC02My42YzIuMSAwIDIwLjMuNyAyMC4zLjdsNjYuNy0zOC42LTkyLjUgMjYuMS01NS45IDM2LjgtMjIuOCAyOC02LjYgMS40IDIwLjgtNzMuNiA2LjktNS41IDIwLjcgMTIuOSA4OC4zLTQ1LjIgNTYuOC01MS41IDE0LjgtNjguNC0xMjUuNCAyMy4zIDE1LjItMTguMi0xNzMuNC01My4zIDgxLjktMTAuNS0xNjYtMTIyLjlMMTMzLjUgMTA4IDMyLjIgMGwyNTIuOSAxMjYuNi0zMS41LTM4TDM3OCAxNjMgMjM0LjcgNjRsMTguNyAzOC40LTQ5LjYtMTguMUwxNTguMyAwbDE5NC42IDEyMkwzMTAgNjYuMmwxMDggOTYuNCAxMi04LjktMjEtMTYuNCA0LjItMzcuOEw0NTEgODkuMWwyOS4yIDI0LjcgMTEuNSA0LjItNyA2LjIgOC41IDEyLTEzLjEgNy40LTEwLjMgMjAuMiAxMC41IDIzLjl6XCJdLHN0dW1ibGV1cG9uOls1MTIsNTEyLFtdLFwiZjFhNFwiLFwiTTUwMi45IDI2NnY2OS43YzAgNjIuMS01MC4zIDExMi40LTExMi40IDExMi40LTYxLjggMC0xMTIuNC00OS44LTExMi40LTExMS4zdi03MC4ybDM0LjMgMTYgNTEuMS0xNS4yVjMzOGMwIDE0LjcgMTIgMjYuNSAyNi43IDI2LjVTNDE3IDM1Mi43IDQxNyAzMzh2LTcyaDg1Ljl6bS0yMjQuNy01OC4ybDM0LjMgMTYgNTEuMS0xNS4yVjE3M2MwLTYwLjUtNTEuMS0xMDktMTEyLjEtMTA5LTYwLjggMC0xMTIuMSA0OC4yLTExMi4xIDEwOC4ydjE2Mi40YzAgMTQuOS0xMiAyNi43LTI2LjcgMjYuN1M4NiAzNDkuNSA4NiAzMzQuNlYyNjZIMHY2OS43QzAgMzk3LjcgNTAuMyA0NDggMTEyLjQgNDQ4YzYxLjYgMCAxMTIuNC00OS41IDExMi40LTExMC44VjE3Ni45YzAtMTQuNyAxMi0yNi43IDI2LjctMjYuN3MyNi43IDEyIDI2LjcgMjYuN3YzMC45elwiXSxcInN0dW1ibGV1cG9uLWNpcmNsZVwiOls0OTYsNTEyLFtdLFwiZjFhM1wiLFwiTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bTAgMTc3LjVjLTkuOCAwLTE3LjggOC0xNy44IDE3Ljh2MTA2LjljMCA0MC45LTMzLjkgNzMuOS03NC45IDczLjktNDEuNCAwLTc0LjktMzMuNS03NC45LTc0Ljl2LTQ2LjVoNTcuM3Y0NS44YzAgMTAgOCAxNy44IDE3LjggMTcuOHMxNy44LTcuOSAxNy44LTE3LjhWMjAwLjFjMC00MCAzNC4yLTcyLjEgNzQuNy03Mi4xIDQwLjcgMCA3NC43IDMyLjMgNzQuNyA3Mi42djIzLjdsLTM0LjEgMTAuMS0yMi45LTEwLjd2LTIwLjZjLjEtOS42LTcuOS0xNy42LTE3LjctMTcuNnptMTY3LjYgMTIzLjZjMCA0MS40LTMzLjUgNzQuOS03NC45IDc0LjktNDEuMiAwLTc0LjktMzMuMi03NC45LTc0LjJWMjYzbDIyLjkgMTAuNyAzNC4xLTEwLjF2NDcuMWMwIDkuOCA4IDE3LjYgMTcuOCAxNy42czE3LjgtNy45IDE3LjgtMTcuNnYtNDhoNTcuM2MtLjEgNDUuOS0uMSA0Ni40LS4xIDQ2LjR6XCJdLHN1cGVycG93ZXJzOls0NDgsNTEyLFtdLFwiZjJkZFwiLFwiTTQ0OCAzMmMtODMuMyAxMS0xNjYuOCAyMi0yNTAgMzMtOTIgMTIuNS0xNjMuMyA4Ni43LTE2OSAxODAtMy4zIDU1LjUgMTggMTA5LjUgNTcuOCAxNDguMkwwIDQ4MGM4My4zLTExIDE2Ni41LTIyIDI0OS44LTMzIDkxLjgtMTIuNSAxNjMuMy04Ni44IDE2OC43LTE3OS44IDMuNS01NS41LTE4LTEwOS41LTU3LjctMTQ4LjJMNDQ4IDMyem0tNzkuNyAyMzIuM2MtNC4yIDc5LjUtNzQgMTM5LjItMTUyLjggMTM0LjUtNzkuNS00LjctMTQwLjctNzEtMTM2LjMtMTUxIDQuNS03OS4yIDc0LjMtMTM5LjMgMTUzLTEzNC41IDc5LjMgNC43IDE0MC41IDcxIDEzNi4xIDE1MXpcIl0sc3VwcGxlOls2NDAsNTEyLFtdLFwiZjNmOVwiLFwiTTY0MCAyNjIuNWMwIDY0LjEtMTA5IDExNi4xLTI0My41IDExNi4xLTI0LjggMC00OC42LTEuOC03MS4xLTUgNy43LjQgMTUuNS42IDIzLjQuNiAxMzQuNSAwIDI0My41LTU2LjkgMjQzLjUtMTI3LjEgMC0yOS40LTE5LjEtNTYuNC01MS4yLTc4IDYwIDIxLjEgOTguOSA1NS4xIDk4LjkgOTMuNHpNNDcuNyAyMjcuOWMtLjEtNzAuMiAxMDguOC0xMjcuMyAyNDMuMy0xMjcuNiA3LjkgMCAxNS42LjIgMjMuMy41LTIyLjUtMy4yLTQ2LjMtNC45LTcxLTQuOUMxMDguOCA5Ni4zLS4xIDE0OC41IDAgMjEyLjZjLjEgMzguMyAzOS4xIDcyLjMgOTkuMyA5My4zLTMyLjMtMjEuNS01MS41LTQ4LjYtNTEuNi03OHptNjAuMiAzOS45czEwLjUgMTMuMiAyOS4zIDEzLjJjMTcuOSAwIDI4LjQtMTEuNSAyOC40LTI1LjEgMC0yOC00MC4yLTI1LjEtNDAuMi0zOS43IDAtNS40IDUuMy05LjEgMTIuNS05LjEgNS43IDAgMTEuMyAyLjYgMTEuMyA2LjZ2My45aDE0LjJ2LTcuOWMwLTEyLjEtMTUuNC0xNi44LTI1LjQtMTYuOC0xNi41IDAtMjguNSAxMC4yLTI4LjUgMjQuMSAwIDI2LjYgNDAuMiAyNS40IDQwLjIgMzkuOSAwIDYuNi01LjggMTAuMS0xMi4zIDEwLjEtMTEuOSAwLTIwLjctMTAuMS0yMC43LTEwLjFsLTguOCAxMC45em0xMjAuOC03My42djU0LjRjMCAxMS4zLTcuMSAxNy44LTE3LjggMTcuOC0xMC43IDAtMTcuOC02LjUtMTcuOC0xNy43di01NC41aC0xNS44djU1YzAgMTguOSAxMy40IDMxLjkgMzMuNyAzMS45IDIwLjEgMCAzMy40LTEzIDMzLjQtMzEuOXYtNTVoLTE1Ljd6bTM0LjQgODUuNGgxNS44di0yOS41aDE1LjVjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44aC0zOS4xdjEzLjRoNy44djcyem0xNS44LTQzdi0yOS4xaDEyLjljOC43IDAgMTMuNyA1LjcgMTMuNyAxNC40IDAgOC45LTUuMSAxNC43LTE0IDE0LjdoLTEyLjZ6bTU3IDQzaDE1Ljh2LTI5LjVoMTUuNWMxNiAwIDI3LjItMTEuNSAyNy4yLTI4LjFzLTExLjItMjcuOC0yNy4yLTI3LjhoLTM5LjF2MTMuNGg3Ljh2NzJ6bTE1LjctNDN2LTI5LjFoMTIuOWM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNSAxNC43LTE0IDE0LjdoLTEyLjZ6bTU3LjEgMzQuOGMwIDUuOCAyLjQgOC4yIDguMiA4LjJoMzcuNmM1LjggMCA4LjItMi40IDguMi04LjJ2LTEzaC0xNC4zdjUuMmMwIDEuNy0xIDIuNi0yLjYgMi42aC0xOC42Yy0xLjcgMC0yLjYtMS0yLjYtMi42di02MS4yYzAtNS43LTIuNC04LjItOC4yLTguMkg0MDF2MTMuNGg1LjJjMS43IDAgMi42IDEgMi42IDIuNnY2MS4yem02My40IDBjMCA1LjggMi40IDguMiA4LjIgOC4ySDUxOWM1LjcgMCA4LjItMi40IDguMi04LjJ2LTEzaC0xNC4zdjUuMmMwIDEuNy0xIDIuNi0yLjYgMi42aC0xOS43Yy0xLjcgMC0yLjYtMS0yLjYtMi42di0yMC4zaDI3Ljd2LTEzLjRINDg4di0yMi40aDE5LjJjMS43IDAgMi42IDEgMi42IDIuNnY1LjJINTI0di0xM2MwLTUuNy0yLjUtOC4yLTguMi04LjJoLTUxLjZ2MTMuNGg3Ljh2NjMuOXptNTguOS03NnY1LjloMS42di01LjloMi43di0xLjJoLTd2MS4yaDIuN3ptNS43LTEuMnY3LjFoMS41di01LjdsMi4zIDUuN2gxLjNsMi4zLTUuN3Y1LjdoMS41di03LjFoLTIuM2wtMi4xIDUuMS0yLjEtNS4xaC0yLjR6XCJdLHRlYW1zcGVhazpbNTExLDUxMixbXSxcImY0ZjlcIixcIk0uODIgMjM3LjgyYzIuMzYtMTUuNTIgMTAuNjktMjcuMDQgMjQuODgtMzQuMDMgMy41LTEuODUgNS42NS0zLjUgNi4zNy03LjgxIDYuMTctMzMuNDEgMTkuNTMtNjMuOTQgMzkuMzctOTEuNTkgMi4zNi0zLjE5IDQuMDEtNS4zNSAxLjAzLTkuMzUtMy43LTUuMzUtMS4wMy0xMC4xOCAyLjk4LTE0LjQ5IDI4LjA2LTMxLjg3IDYxLjg4LTU1LjEgMTAxLjk4LTY3LjQ0IDk1LjgxLTI5LjQgMTgwLjEtOS4zNSAyNTIuMzcgNjAuNDUgNi42OCA2LjM3IDE1LjUyIDEyLjg1IDYuOTkgMjQuMzYtMS4zNCAxLjg1IDEuMDMgMy41IDIuMTYgNS4wNCAyMC42NiAyOC4wNiAzNC4yMyA1OS40MiA0MC40IDkzLjY1LjgyIDMuNyAyLjk4IDUuMDQgNS44NiA2LjM3IDE3LjM3IDguODQgMjUuNyAyMy4zNCAyNi4wMSA0Mi4yNSAwIDE3LjE3IDEuODUgMzQuNTQtMS4wMyA1MS43MS00LjAxIDI0LjY3LTI5LjE5IDQxLjc0LTUzLjI1IDM2LjctNy4yLTEuNjQtOS4zNS03LjItOS4zNS0xNC4xOSAwLTI4LjA2LjgyLTU2LjQ0IDAtODQuNi0xLjg1LTc1Ljc2LTM2LjE4LTEzMi44MS0xMDIuMjgtMTY5LjQxQzIzNC4yOCA0Ljk4IDkyLjExIDcyLjQyIDY3LjU0IDE5Ni45MWMtNi4wNiAzMC40Mi0xLjc0IDQ4LjI3LTMuNyAxMjUuODItLjMxIDcuMi00LjMyIDExLjItMTIuMDMgMTEuNTFDMjAuOTcgMzM1LjU4IDAgMzE2LjA1IDAgMjg1LjIxdi0yMC44N20yMjEuNzQgMTA2LjgxYzExLjgyLTQuMzIgMjAuMDUtMTEuODIgMjIuNTEtMjQuMzYgMi4zNi0xMi4zNC0xMi4wMy0zMC4wMi0zMi4zOC00OC43My0yMC44Ny0xOS4yMi00OC4yMi0zOS4wNi02My40My00Ni41Ny0yMS42OS0xMi4wMy00MS43NC0xLjg1LTQ2LjI2IDIyLjcyLTUuMDQgMjYuMjEgMCA1MS40IDE0LjQ5IDczLjkxIDEwLjE4IDE1LjUyIDI1LjM5IDIyLjcyIDQzLjM4IDI0LjA1IDExLjYyLjYyIDUyLjU0IDIuMTYgNjEuNjktMS4wMm0xMjkuODMgNS41NWMzNi41IDIuODEgNTkuMzMtMjguNTUgNTguMzktNjAuNDUtMi4xNC00NS4xNy02Ni4xNy0xNi40OC04Ny43OS04LjAyLTczLjE2IDI4LjE0LTQ1LjA1IDU0LjkyLTIyLjIgNjAuNzVtMTQ5LjI2LTEuMzNjLTIuOTgtMi4zNi03LjItMS4wMy04LjMzIDIuMzYtOC4wMiAyNS4zOS00NC43MiAxMTIuNDYtMTcyLjA4IDEyMS41MS0xNDkuNjcgMTAuNDkgODAuMjkgNDMuNTkgMTQ1LjM2LTYuMzcgMjIuNzItMTcuMzcgNDcuNi0zNS4wNSA0Ni41Ny04NS40My0uMzItMTAuMDctNC44NC0yNi43Mi0xMS41Mi0zMi4wN1wiXSx0ZWxlZ3JhbTpbNDk2LDUxMixbXSxcImYyYzZcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0xMjEuOCAxNjkuOWwtNDAuNyAxOTEuOGMtMyAxMy42LTExLjEgMTYuOS0yMi40IDEwLjVsLTYyLTQ1LjctMjkuOSAyOC44Yy0zLjMgMy4zLTYuMSA2LjEtMTIuNSA2LjFsNC40LTYzLjEgMTE0LjktMTAzLjhjNS00LjQtMS4xLTYuOS03LjctMi41bC0xNDIgODkuNC02MS4yLTE5LjFjLTEzLjMtNC4yLTEzLjYtMTMuMyAyLjgtMTkuN2wyMzkuMS05Mi4yYzExLjEtNCAyMC44IDIuNyAxNy4yIDE5LjV6XCJdLFwidGVsZWdyYW0tcGxhbmVcIjpbNDQ4LDUxMixbXSxcImYzZmVcIixcIk00NDYuNyA5OC42bC02Ny42IDMxOC44Yy01LjEgMjIuNS0xOC40IDI4LjEtMzcuMyAxNy41bC0xMDMtNzUuOS00OS43IDQ3LjhjLTUuNSA1LjUtMTAuMSAxMC4xLTIwLjcgMTAuMWw3LjQtMTA0LjkgMTkwLjktMTcyLjVjOC4zLTcuNC0xLjgtMTEuNS0xMi45LTQuMUwxMTcuOCAyODQgMTYuMiAyNTIuMmMtMjIuMS02LjktMjIuNS0yMi4xIDQuNi0zMi43TDQxOC4yIDY2LjRjMTguNC02LjkgMzQuNSA0LjEgMjguNSAzMi4yelwiXSxcInRlbmNlbnQtd2VpYm9cIjpbMzg0LDUxMixbXSxcImYxZDVcIixcIk03Mi4zIDQ5NS44YzEuNCAxOS45LTI3LjYgMjIuMi0yOS43IDIuOUMzMSAzNjguOCA3My43IDI1OS4yIDE0NCAxODUuNWMtMTUuNi0zNCA5LjItNzcuMSA1MC42LTc3LjEgMzAuMyAwIDU1LjEgMjQuNiA1NS4xIDU1LjEgMCA0NC00OS41IDcwLjgtODYuOSA0NS4xLTY1LjcgNzEuMy0xMDEuNCAxNjkuOC05MC41IDI4Ny4yek0xOTIgLjFDNjYuMS4xLTEyLjMgMTM0LjMgNDMuNyAyNDIuNCA1Mi40IDI1OS44IDc5IDI0Ni45IDcwIDIyOSAyMy43IDEzNi40IDkxIDI5LjggMTkyIDI5LjhjNzUuNCAwIDEzNi45IDYxLjQgMTM2LjkgMTM2LjkgMCA5MC44LTg2LjkgMTUzLjktMTY3LjcgMTMzLjEtMTkuMS00LjEtMjUuNiAyNC40LTYuNiAyOS4xIDExMC43IDIzLjIgMjA0LTYwIDIwNC0xNjIuM0MzNTguNiA3NC43IDI4NCAuMSAxOTIgLjF6XCJdLHRoZW1lY286WzQ0MSw1MTIsW10sXCJmNWM2XCIsXCJNMTk5Ljc0IDEyLjI5YzkuNzQtNS42NCAyNS41OS01LjczIDM1LjM5LS4yMWwxODguMTMgMTA1Ljk1YzkuODEgNS41MiAxNy43NiAxOS4xNCAxNy43NiAzMC4zOHYyMTMuODdjMCAxMS4yNi03LjkzIDI0Ljg5LTE3LjcxIDMwLjQ2TDIzNS4wOSA0OTkuODhjLTkuNzggNS41Ny0yNS41OCA1LjQ4LTM1LjI5LS4yMUwxNy41OCAzOTIuOTVDNy44NyAzODcuMjYgMCAzNzMuNTIgMCAzNjIuMjdWMTQ4LjQxYzAtMTEuMjYgNy45LTI0Ljk2IDE3LjYzLTMwLjU5TDE5OS43NCAxMi4yOXpNMTIzLjU0IDIwOWMtMTUuNjkgMC0zMS4zOS4xNC00Ny4wOC4xNHY5OS44N2gxOC44M3YtMjkuMzloMjguMjVjNDguOTQgMCA0OC43OS03MC42MiAwLTcwLjYyem0xMzcuOTYgOTguNzNsLTMwLjI1LTM0LjFjMzYuNC03LjM5IDM0LjI2LTY0LjIxLTEwLjctNjQuNDktMTUuODQgMC0zMS42Ny0uMTQtNDcuNTEtLjE0djEwMC4wMWgxOC44M3YtMzMuMzhIMjEwbDI5LjEgMzMuMzhoMjIuNHYtMS4yOHptLTQwLjk0LTgxLjA0YzIyLjk4IDAgMjIuOSAzMS45NiAwIDMxLjk2aC0yOC42OHYtMzEuOTZoMjguNjh6bS05NC4wNy0xLjU3YzIwLjg1IDAgMjAuNzggMzguMjQgMCAzOC4yNEg5NC42OHYtMzguMjNsMzEuODEtLjAxem0xODkuNjUtMTcuOTdjLTY3LjQgMC02OS44NiAxMDQuMTUgMCAxMDQuMTUgNjguMzktLjAxIDY4LjMzLTEwNC4xNSAwLTEwNC4xNXptMCAxNy4xMmM0My40MyAwIDQ0LjEgNjkuNzYgMCA2OS43Ni00NC4xMiAwLTQzLjc0LTY5Ljc2IDAtNjkuNzZ6XCJdLHRoZW1laXNsZTpbNTEyLDUxMixbXSxcImYyYjJcIixcIk0yMDggODguMjg2YzAtMTAgNi4yODYtMjEuNzE0IDE3LjcxNS0yMS43MTQgMTEuMTQyIDAgMTcuNzE0IDExLjcxNCAxNy43MTQgMjEuNzE0IDAgMTAuMjg1LTYuNTcyIDIxLjcxNC0xNy43MTQgMjEuNzE0QzIxNC4yODYgMTEwIDIwOCA5OC41NzEgMjA4IDg4LjI4NnptMzA0IDE2MGMwIDM2LjAwMS0xMS40MjkgMTAyLjI4Ni0zNi4yODYgMTI5LjcxNC0yMi44NTggMjQuODU4LTg3LjQyOCA2MS4xNDMtMTIwLjg1NyA3MC41NzJsLTEuMTQzLjI4NnYzMi41NzFjMCAxNi4yODYtMTIuNTcyIDMwLjU3MS0yOS4xNDMgMzAuNTcxLTEwIDAtMTkuNDI5LTUuNzE0LTI0LjU3Mi0xNC4yODYtNS40MjcgOC41NzItMTQuODU2IDE0LjI4Ni0yNC44NTYgMTQuMjg2LTEwIDAtMTkuNDI5LTUuNzE0LTI0Ljg1OC0xNC4yODYtNS4xNDIgOC41NzItMTQuNTcxIDE0LjI4Ni0yNC41NyAxNC4yODYtMTAuMjg2IDAtMTkuNDI5LTUuNzE0LTI0Ljg1OC0xNC4yODYtNS4xNDMgOC41NzItMTQuNTcxIDE0LjI4Ni0yNC41NzEgMTQuMjg2LTE4Ljg1NyAwLTI5LjQyOS0xNS43MTQtMjkuNDI5LTMyLjg1Ny0xNi4yODYgMTIuMjg1LTM1LjcxNSAxOS40MjgtNTYuNTcxIDE5LjQyOC0yMiAwLTQzLjQyOS04LjI4NS02MC4yODYtMjIuODU3IDEwLjI4NS0uMjg2IDIwLjU3MS0yLjI4NiAzMC4yODUtNS43MTQtMjAuODU3LTUuNzE0LTM5LjQyOC0xOC44NTctNTItMzYuMjg2IDIxLjM3IDQuNjQ1IDQ2LjIwOSAxLjY3MyA2Ny4xNDMtMTEuMTQzLTIyLTIyLTU2LjU3MS01OC44NTctNjguNTcyLTg3LjQyOEMxLjE0MyAzMjEuNzE0IDAgMzAzLjcxNCAwIDI4OS40MjljMC00OS43MTQgMjAuMjg2LTE2MCA4Ni4yODYtMTYwIDEwLjU3MSAwIDE4Ljg1NyA0Ljg1OCAyMy4xNDMgMTQuODU3YTE1OC43OTIgMTU4Ljc5MiAwIDAgMSAxMi0xNS40MjhjMi0yLjU3MiA1LjcxNC01LjQyOSA3LjE0My04LjI4NiA3Ljk5OS0xMi41NzEgMTEuNzE0LTIxLjE0MiAyMS43MTQtMzRDMTgyLjU3MSA0NS40MjggMjMyIDE3LjE0MyAyODUuMTQzIDE3LjE0M2M2IDAgMTIgLjI4NSAxNy43MTQgMS4xNDNDMzEzLjcxNCA2LjU3MSAzMjguODU3IDAgMzQ0LjU3MiAwYzE0LjU3MSAwIDI5LjcxNCA2IDQwIDE2LjI4Ni44NTcuODU4IDEuNDI4IDIuMjg2IDEuNDI4IDMuNDI4IDAgMy43MTQtMTAuMjg1IDEzLjQyOS0xMi44NTcgMTYuMjg2IDQuMjg2IDEuNDI5IDE1LjcxNCA2Ljg1OCAxNS43MTQgMTIgMCAyLjg1Ny0yLjg1NyA1LjE0My00LjU3MSA3LjE0MyAzMS40MjkgMjcuNzE0IDQ5LjQyOSA2Ny4xNDMgNTYuMjg2IDEwOCA0LjI4Ni01LjE0MyAxMC4yODUtOC41NzIgMTcuMTQzLTguNTcyIDEwLjU3MSAwIDIwLjg1NyA3LjE0NCAyOC41NzEgMTQuMDAxQzUwNy4xNDMgMTg3LjE0MyA1MTIgMjIxLjcxNCA1MTIgMjQ4LjI4NnpNMTg4IDg5LjQyOGMwIDE4LjI4NiAxMi41NzEgMzcuMTQzIDMyLjI4NiAzNy4xNDMgMTkuNzE0IDAgMzIuMjg1LTE4Ljg1NyAzMi4yODUtMzcuMTQzIDAtMTgtMTIuNTcxLTM2Ljg1Ny0zMi4yODUtMzYuODU3LTE5LjcxNSAwLTMyLjI4NiAxOC44NTgtMzIuMjg2IDM2Ljg1N3pNMjM3LjcxNCAxOTRjMC0xOS43MTQgMy43MTQtMzkuMTQzIDguNTcxLTU4LjI4Ni01Mi4wMzkgNzkuNTM0LTEzLjUzMSAxODQuNTcxIDY4Ljg1OCAxODQuNTcxIDIxLjQyOCAwIDQyLjU3MS03LjcxNCA2MC0yMCAyLTcuNDI5IDMuNzE0LTE0Ljg1NyAzLjcxNC0yMi41NzIgMC0xNC4yODYtNi4yODYtMjEuNDI4LTIwLjU3Mi0yMS40MjgtNC41NzEgMC05LjE0My44NTctMTMuNDI5IDEuNzE0LTYzLjM0MyAxMi42NjgtMTA3LjE0MiAzLjY2OS0xMDcuMTQyLTYzLjk5OXptLTQxLjE0MiAyNTQuODU4YzAtMTEuMTQzLTguODU4LTIwLjg1Ny0yMC4yODYtMjAuODU3LTExLjQyOSAwLTIwIDkuNzE1LTIwIDIwLjg1N3YzMi41NzFjMCAxMS4xNDMgOC41NzEgMjEuMTQyIDIwIDIxLjE0MiAxMS40MjggMCAyMC4yODYtOS43MTUgMjAuMjg2LTIxLjE0MnYtMzIuNTcxem00OS4xNDMgMGMwLTExLjE0My04LjU3Mi0yMC44NTctMjAtMjAuODU3LTExLjQyOSAwLTIwLjI4NiA5LjcxNS0yMC4yODYgMjAuODU3djMyLjU3MWMwIDExLjE0MyA4Ljg1NyAyMS4xNDIgMjAuMjg2IDIxLjE0MiAxMS40MjggMCAyMC0xMCAyMC0yMS4xNDJ2LTMyLjU3MXptNDkuNzEzIDBjMC0xMS4xNDMtOC44NTctMjAuODU3LTIwLjI4NS0yMC44NTctMTEuNDI5IDAtMjAuMjg2IDkuNzE1LTIwLjI4NiAyMC44NTd2MzIuNTcxYzAgMTEuMTQzIDguODU3IDIxLjE0MiAyMC4yODYgMjEuMTQyIDExLjQyOCAwIDIwLjI4NS05LjcxNSAyMC4yODUtMjEuMTQydi0zMi41NzF6bTQ5LjcxNSAwYzAtMTEuMTQzLTguODU3LTIwLjg1Ny0yMC4yODYtMjAuODU3LTExLjQyOCAwLTIwLjI4NiA5LjcxNS0yMC4yODYgMjAuODU3djMyLjU3MWMwIDExLjE0MyA4Ljg1OCAyMS4xNDIgMjAuMjg2IDIxLjE0MiAxMS40MjkgMCAyMC4yODYtMTAgMjAuMjg2LTIxLjE0MnYtMzIuNTcxek00MjEuNzE0IDI4NmMtMzAuODU3IDU5LjE0Mi05MC4yODUgMTAyLjU3Mi0xNTguNTcxIDEwMi41NzItOTYuNTcxIDAtMTYwLjU3MS04NC41NzItMTYwLjU3MS0xNzYuNTcyIDAtMTYuODU3IDItMzMuNDI5IDYtNDkuNzE0LTIwIDMzLjcxNS0yOS43MTQgNzIuNTcyLTI5LjcxNCAxMTEuNDI5IDAgNjAuMjg2IDI0Ljg1NyAxMjEuNzE1IDcxLjQyOSAxNjAuODU3IDUuMTQzLTkuNzE0IDE0Ljg1Ny0xNi4yODYgMjYtMTYuMjg2IDEwIDAgMTkuNDI4IDUuNzE0IDI0LjU3MSAxNC4yODYgNS40MjktOC41NzEgMTQuNTcxLTE0LjI4NiAyNC44NTgtMTQuMjg2IDEwIDAgMTkuNDI4IDUuNzE0IDI0LjU3MSAxNC4yODYgNS40MjktOC41NzEgMTQuODU3LTE0LjI4NiAyNC44NTgtMTQuMjg2IDEwIDAgMTkuNDI4IDUuNzE0IDI0Ljg1NyAxNC4yODYgNS4xNDMtOC41NzEgMTQuNTcxLTE0LjI4NiAyNC41NzItMTQuMjg2IDEwLjg1NyAwIDIwLjg1NyA2LjU3MiAyNS43MTQgMTYgNDMuNDI3LTM2LjI4NiA2OC41NjktOTIgNzEuNDI2LTE0OC4yODZ6bTEwLjU3Mi05OS43MTRjMC01My43MTQtMzQuNTcxLTEwNS43MTQtOTIuNTcyLTEwNS43MTQtMzAuMjg1IDAtNTguNTcxIDE1LjE0My03OC44NTcgMzYuODU3QzI0MC44NjIgMTgzLjgxMiAyMzMuNDEgMjU0IDMwMi4yODYgMjU0YzI4LjgwNSAwIDk3LjM1Ny0yOC41MzggODQuMjg2IDM2Ljg1NyAyOC44NTctMjYgNDUuNzE0LTY1LjcxNCA0NS43MTQtMTA0LjU3MXpcIl0sXCJ0cmFkZS1mZWRlcmF0aW9uXCI6WzQ5Niw1MTIsW10sXCJmNTEzXCIsXCJNMjAyLjQ1IDEwOC40MnY4MS42MUgzOC45NGw0OC4yMiA2MS45MWgxMTQuNzN2MTk2Ljc1aDY0LjYxVjI1Mi45Nmg4My4yN3YtNjIuNjloLTgzLjE4VjE3MS4xaDE0NS42MnYtNjIuNjhIMjAyLjQ1em00Ljg2IDZoMTk3Ljc3djUwLjY4SDI1OS40NHYzMC45M2g4My4xOHY1MC45M2gtODMuMjZ2MTk1LjczaC01Mi43M1YyNDUuOTRIODkuODZsLTM5Ljk1LTQ5LjkxaDE1Ny40di04MS42MXpNMjQ3Ljk5IDguOEMxMTEuMDMgOC44IDAgMTE5LjgzIDAgMjU2LjhzMTExLjAzIDI0OCAyNDcuOTkgMjQ4UzQ5NiAzOTMuNzYgNDk2IDI1Ni44IDM4NC45NiA4LjggMjQ3Ljk5IDguOHptLjAyIDEzLjI0YzEyOS42NiAwIDIzNC43NiAxMDUuMTIgMjM0Ljc2IDIzNC43OHMtMTA1LjEgMjM0Ljc2LTIzNC43NiAyMzQuNzZTMTMuMjMgMzg2LjQ3IDEzLjIzIDI1Ni44MSAxMTguMzUgMjIuMDQgMjQ4LjAxIDIyLjA0em0wIDcuODljLTEyNS4zIDAtMjI2Ljg5IDEwMS41Ny0yMjYuODkgMjI2Ljg3czEwMS41OSAyMjYuODkgMjI2Ljg5IDIyNi44OVM0NzQuODggMzgyLjEgNDc0Ljg4IDI1Ni44IDM3My4zMSAyOS45MyAyNDguMDEgMjkuOTN6bS0uMDIgMTMuM2MxMTcuOTUgMCAyMTMuNTYgOTUuNjIgMjEzLjU2IDIxMy41NnMtOTUuNjIgMjEzLjU2LTIxMy41NiAyMTMuNTZTMzQuNDMgMzc0Ljc1IDM0LjQzIDI1Ni44IDEzMC4wNCA0My4yMyAyNDcuOTkgNDMuMjN6bS03My4zMiAxMDQuOGwxNS42NiAxOC4wNS0yMi4xNi05LjQ1LTEyLjMzIDIwLjQ3IDIuMTUtMjMuOTktMjMuMjgtNS40IDIzLjQ4LTUuMzctMi4wNi0yMy44MSAxMi4zNyAyMC42NyAyMi4wMS05LjMyLTE1Ljg0IDE4LjE1em0tNDcuMTQtNDYuNTRsOC4wMSAxMi40IDEyLjY5LTUuODYtOS4zMiAxMS40NSA5LjUgMTAuMjUtMTMuNzctNS4zMi02LjgyIDEyLjIuODEtMTQuNzQtMTMuNzEtMi43MSAxNC4yNy0zLjc4LTEuNjYtMTMuODl6bTI1MC43NyA3NS41OWwxMS45OSAxOS41NiAyMC44OC05LjExLTE0LjkgMTcuNDUgMTUuMTEgMTcuMDQtMjEuMi04Ljc4LTExLjU0IDE5LjY0IDEuOC0yMi44Ny0yMi4yNC00LjkgMjIuMzEtNS4zNi0yLjIxLTIyLjY3em0tMTA3LjA1IDk4LjQ1bDEzLjg2LTMuMjItMS4yOC0xNC4xNyA3LjM1IDEyLjE4IDEzLjA4LTUuNTktOS4zMSAxMC43NSA5LjM2IDEwLjcxLTEzLjEtNS41NC03LjI5IDEyLjIxIDEuMjItMTQuMTctMTMuODktMy4xNnptLTEyNS40MyA2LjVsMjMuNzMtMy44Ny0xLjczLTI0LjUzIDExLjAxIDIxLjM4IDIyLjc5LTkuMjItMTYuOTMgMTcuMDggMTUuODEgMTguODMtMjEuNDctMTAuODItMTMuMDIgMjAuODYgMy42Ni0yMy43Ny0yMy44NS01Ljk0em02My40NC0xNjUuNjZ2ODEuNjFINTQuMTZsMzYuNzIgNDYuMDFoMTE3Ljd2MTk2Ljc1aDQ4LjgyVjI0NS4wMWg4My4yN3YtNDcuMDNIMjU3LjR2LTM0LjgzaDE0NS43M3YtNDYuNzhIMjA5LjI2em0xMC44NiAxMS4yaDE3MS44djI0LjM2SDI0Ni44OHY1Ni4yM2g4Mi45M3YyMy45NGgtODIuOTN2MTk3LjQyaC0yNi43NlYyMzIuMUg5Ni4zMWwtMjAuMDktMjMuOTRoMTQzLjl2LTgwLjU5elwiXSx0cmVsbG86WzQ0OCw1MTIsW10sXCJmMTgxXCIsXCJNMzkyIDMySDU2QzI1LjEgMzIgMCA1Ny4xIDAgODh2MzM2YzAgMzAuOSAyNS4xIDU2IDU2IDU2aDMzNmMzMC45IDAgNTYtMjUuMSA1Ni01NlY4OGMwLTMwLjktMjUuMS01Ni01Ni01NnpNMTk0LjkgMzcxLjRjMCAxNC44LTEyIDI2LjktMjYuOSAyNi45SDg1LjFjLTE0LjggMC0yNi45LTEyLTI2LjktMjYuOVYxMTcuMWMwLTE0LjggMTItMjYuOSAyNi45LTI2LjlIMTY4YzE0LjggMCAyNi45IDEyIDI2LjkgMjYuOXYyNTQuM3ptMTk0LjktMTEyYzAgMTQuOC0xMiAyNi45LTI2LjkgMjYuOUgyODBjLTE0LjggMC0yNi45LTEyLTI2LjktMjYuOVYxMTcuMWMwLTE0LjggMTItMjYuOSAyNi45LTI2LjloODIuOWMxNC44IDAgMjYuOSAxMiAyNi45IDI2Ljl2MTQyLjN6XCJdLHRyaXBhZHZpc29yOls1NzYsNTEyLFtdLFwiZjI2MlwiLFwiTTE2Ni40IDI4MC41MjFjMCAxMy4yMzYtMTAuNzMgMjMuOTY2LTIzLjk2NiAyMy45NjZzLTIzLjk2Ni0xMC43My0yMy45NjYtMjMuOTY2IDEwLjczLTIzLjk2NiAyMy45NjYtMjMuOTY2IDIzLjk2NiAxMC43MjkgMjMuOTY2IDIzLjk2NnptMjY0Ljk2Mi0yMy45NTZjLTEzLjIzIDAtMjMuOTU2IDEwLjcyNS0yMy45NTYgMjMuOTU2IDAgMTMuMjMgMTAuNzI1IDIzLjk1NiAyMy45NTYgMjMuOTU2IDEzLjIzIDAgMjMuOTU2LTEwLjcyNSAyMy45NTYtMjMuOTU2LS4wMDEtMTMuMjMxLTEwLjcyNi0yMy45NTYtMjMuOTU2LTIzLjk1NnptODkuMzg4IDEzOS40OWMtNjIuNjY3IDQ5LjEwNC0xNTMuMjc2IDM4LjEwOS0yMDIuMzc5LTI0LjU1OWwtMzAuOTc5IDQ2LjMyNS0zMC42ODMtNDUuOTM5Yy00OC4yNzcgNjAuMzktMTM1LjYyMiA3MS44OTEtMTk3Ljg4NSAyNi4wNTUtNjQuMDU4LTQ3LjE1OC03Ny43NTktMTM3LjMxNi0zMC42MDEtMjAxLjM3NEExODYuNzYyIDE4Ni43NjIgMCAwIDAgMCAxMzkuNDE2bDkwLjI4Ni0uMDVhMzU4LjQ4IDM1OC40OCAwIDAgMSAxOTcuMDY1LTU0LjAzIDM1MC4zODIgMzUwLjM4MiAwIDAgMSAxOTIuMTgxIDUzLjM0OWw5Ni4yMTguMDc0YTE4NS43MTMgMTg1LjcxMyAwIDAgMC0yOC4zNTIgNTcuNjQ5YzQ2Ljc5MyA2Mi43NDcgMzQuOTY0IDE1MS4zNy0yNi42NDggMTk5LjY0N3pNMjU5LjM2NiAyODEuNzYxYy0uMDA3LTYzLjU1Ny01MS41MzUtMTE1LjA3NS0xMTUuMDkyLTExNS4wNjhDODAuNzE3IDE2Ni43IDI5LjIgMjE4LjIyOCAyOS4yMDYgMjgxLjc4NWMuMDA3IDYzLjU1NyA1MS41MzUgMTE1LjA3NSAxMTUuMDkyIDExNS4wNjggNjMuNTEzLS4wNzUgMTE0Ljk4NC01MS41MzkgMTE1LjA2OC0xMTUuMDUydi0uMDR6bTI4LjU5MS0xMC40NTVjNS40MzMtNzMuNDQgNjUuNTEtMTMwLjg4NCAxMzkuMTItMTMzLjAyMmEzMzkuMTQ2IDMzOS4xNDYgMCAwIDAtMTM5LjcyNy0yNy44MTIgMzU2LjMxIDM1Ni4zMSAwIDAgMC0xNDAuMTY0IDI3LjI1M2M3NC4zNDQgMS41ODIgMTM1LjI5OSA1OS40MjQgMTQwLjc3MSAxMzMuNTgxem0yNTEuNzA2LTI4Ljc2N2MtMjEuOTkyLTU5LjYzNC04OC4xNjItOTAuMTQ4LTE0Ny43OTUtNjguMTU3LTU5LjYzNCAyMS45OTItOTAuMTQ4IDg4LjE2Mi02OC4xNTcgMTQ3Ljc5NXYuMDMyYzIyLjAzOCA1OS42MDcgODguMTk4IDkwLjA5MSAxNDcuODI3IDY4LjExMyA1OS42MTUtMjIuMDA0IDkwLjExMy04OC4xNjIgNjguMTI1LTE0Ny43ODN6bS0zMjYuMDM5IDM3Ljk3NXYuMTE1Yy0uMDU3IDM5LjMyOC0zMS45ODYgNzEuMTYzLTcxLjMxNCA3MS4xMDYtMzkuMzI4LS4wNTctNzEuMTYzLTMxLjk4Ni03MS4xMDYtNzEuMzE0LjA1Ny0zOS4zMjggMzEuOTg2LTcxLjE2MyA3MS4zMTQtNzEuMTA2IDM5LjI1OS4xMTYgNzEuMDQyIDMxLjk0IDcxLjEwNiA3MS4xOTl6bS0yNC41MTIgMHYtLjA4NGMtLjA1MS0yNS43ODQtMjAuOTk0LTQ2LjY0NS00Ni43NzgtNDYuNTk0LTI1Ljc4NC4wNTEtNDYuNjQ1IDIwLjk5NC00Ni41OTQgNDYuNzc3LjA1MSAyNS43ODQgMjAuOTk0IDQ2LjY0NSA0Ni43NzcgNDYuNTk0IDI1LjcyNi0uMTEzIDQ2LjUzNy0yMC45NjggNDYuNTk1LTQ2LjY5M3ptMzEzLjQyMyAwdi4wNDhjLS4wMiAzOS4zMjgtMzEuOTE4IDcxLjE5NC03MS4yNDcgNzEuMTczcy03MS4xOTQtMzEuOTE4LTcxLjE3My03MS4yNDdjLjAyLTM5LjMyOCAzMS45MTgtNzEuMTk0IDcxLjI0Ny03MS4xNzMgMzkuMjkuMDY2IDcxLjEyMSAzMS45MDkgNzEuMTczIDcxLjE5OXptLTI0LjUwNC0uMDA4Yy0uMDA5LTI1Ljc4NC0yMC45MTgtNDYuNjc5LTQ2LjcwMi00Ni42Ny0yNS43ODQuMDA5LTQ2LjY3OSAyMC45MTgtNDYuNjcgNDYuNzAyLjAwOSAyNS43ODQgMjAuOTE4IDQ2LjY3OCA0Ni43MDIgNDYuNjcgMjUuNzY1LS4wNDYgNDYuNjM2LTIwLjkyOCA0Ni42Ny00Ni42OTN2LS4wMDl6XCJdLHR1bWJscjpbMzIwLDUxMixbXSxcImYxNzNcIixcIk0zMDkuOCA0ODAuM2MtMTMuNiAxNC41LTUwIDMxLjctOTcuNCAzMS43LTEyMC44IDAtMTQ3LTg4LjgtMTQ3LTE0MC42di0xNDRIMTcuOWMtNS41IDAtMTAtNC41LTEwLTEwdi02OGMwLTcuMiA0LjUtMTMuNiAxMS4zLTE2IDYyLTIxLjggODEuNS03NiA4NC4zLTExNy4xLjgtMTEgNi41LTE2LjMgMTYuMS0xNi4zaDcwLjljNS41IDAgMTAgNC41IDEwIDEwdjExNS4yaDgzYzUuNSAwIDEwIDQuNCAxMCA5Ljl2ODEuN2MwIDUuNS00LjUgMTAtMTAgMTBoLTgzLjRWMzYwYzAgMzQuMiAyMy43IDUzLjYgNjggMzUuOCA0LjgtMS45IDktMy4yIDEyLjctMi4yIDMuNS45IDUuOCAzLjQgNy40IDcuOWwyMiA2NC4zYzEuOCA1IDMuMyAxMC42LS40IDE0LjV6XCJdLFwidHVtYmxyLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE3NFwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bS04Mi4zIDM2NC4yYy04LjUgOS4xLTMxLjIgMTkuOC02MC45IDE5LjgtNzUuNSAwLTkxLjktNTUuNS05MS45LTg3Ljl2LTkwaC0yOS43Yy0zLjQgMC02LjItMi44LTYuMi02LjJ2LTQyLjVjMC00LjUgMi44LTguNSA3LjEtMTAgMzguOC0xMy43IDUwLjktNDcuNSA1Mi43LTczLjIuNS02LjkgNC4xLTEwLjIgMTAtMTAuMmg0NC4zYzMuNCAwIDYuMiAyLjggNi4yIDYuMnY3Mmg1MS45YzMuNCAwIDYuMiAyLjggNi4yIDYuMnY1MS4xYzAgMy40LTIuOCA2LjItNi4yIDYuMmgtNTIuMVYzMjFjMCAyMS40IDE0LjggMzMuNSA0Mi41IDIyLjQgMy0xLjIgNS42LTIgOC0xLjQgMi4yLjUgMy42IDIuMSA0LjYgNC45bDEzLjggNDAuMmMxIDMuMiAyIDYuNy0uMyA5LjF6XCJdLHR3aXRjaDpbNDQ4LDUxMixbXSxcImYxZThcIixcIk00MC4xIDMyTDEwIDEwOC45djMxNC4zaDEwN1Y0ODBoNjAuMmw1Ni44LTU2LjhoODdsMTE3LTExN1YzMkg0MC4xem0zNTcuOCAyNTQuMUwzMzEgMzUzSDIyNGwtNTYuOCA1Ni44VjM1M0g3Ni45VjcyLjFoMzIxdjIxNHpNMzMxIDE0OXYxMTYuOWgtNDAuMVYxNDlIMzMxem0tMTA3IDB2MTE2LjloLTQwLjFWMTQ5SDIyNHpcIl0sdHdpdHRlcjpbNTEyLDUxMixbXSxcImYwOTlcIixcIk00NTkuMzcgMTUxLjcxNmMuMzI1IDQuNTQ4LjMyNSA5LjA5Ny4zMjUgMTMuNjQ1IDAgMTM4LjcyLTEwNS41ODMgMjk4LjU1OC0yOTguNTU4IDI5OC41NTgtNTkuNDUyIDAtMTE0LjY4LTE3LjIxOS0xNjEuMTM3LTQ3LjEwNiA4LjQ0Ny45NzQgMTYuNTY4IDEuMjk5IDI1LjM0IDEuMjk5IDQ5LjA1NSAwIDk0LjIxMy0xNi41NjggMTMwLjI3NC00NC44MzItNDYuMTMyLS45NzUtODQuNzkyLTMxLjE4OC05OC4xMTItNzIuNzcyIDYuNDk4Ljk3NCAxMi45OTUgMS42MjQgMTkuODE4IDEuNjI0IDkuNDIxIDAgMTguODQzLTEuMyAyNy42MTQtMy41NzMtNDguMDgxLTkuNzQ3LTg0LjE0My01MS45OC04NC4xNDMtMTAyLjk4NXYtMS4yOTljMTMuOTY5IDcuNzk3IDMwLjIxNCAxMi42NyA0Ny40MzEgMTMuMzE5LTI4LjI2NC0xOC44NDMtNDYuNzgxLTUxLjAwNS00Ni43ODEtODcuMzkxIDAtMTkuNDkyIDUuMTk3LTM3LjM2IDE0LjI5NC01Mi45NTQgNTEuNjU1IDYzLjY3NSAxMjkuMyAxMDUuMjU4IDIxNi4zNjUgMTA5LjgwNy0xLjYyNC03Ljc5Ny0yLjU5OS0xNS45MTgtMi41OTktMjQuMDQgMC01Ny44MjggNDYuNzgyLTEwNC45MzQgMTA0LjkzNC0xMDQuOTM0IDMwLjIxMyAwIDU3LjUwMiAxMi42NyA3Ni42NyAzMy4xMzcgMjMuNzE1LTQuNTQ4IDQ2LjQ1Ni0xMy4zMiA2Ni41OTktMjUuMzQtNy43OTggMjQuMzY2LTI0LjM2NiA0NC44MzMtNDYuMTMyIDU3LjgyNyAyMS4xMTctMi4yNzMgNDEuNTg0LTguMTIyIDYwLjQyNi0xNi4yNDMtMTQuMjkyIDIwLjc5MS0zMi4xNjEgMzkuMzA4LTUyLjYyOCA1NC4yNTN6XCJdLFwidHdpdHRlci1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYwODFcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tNDguOSAxNTguOGMuMiAyLjguMiA1LjcuMiA4LjUgMCA4Ni43LTY2IDE4Ni42LTE4Ni42IDE4Ni42LTM3LjIgMC03MS43LTEwLjgtMTAwLjctMjkuNCA1LjMuNiAxMC40LjggMTUuOC44IDMwLjcgMCA1OC45LTEwLjQgODEuNC0yOC0yOC44LS42LTUzLTE5LjUtNjEuMy00NS41IDEwLjEgMS41IDE5LjIgMS41IDI5LjYtMS4yLTMwLTYuMS01Mi41LTMyLjUtNTIuNS02NC40di0uOGM4LjcgNC45IDE4LjkgNy45IDI5LjYgOC4zYTY1LjQ0NyA2NS40NDcgMCAwIDEtMjkuMi01NC42YzAtMTIuMiAzLjItMjMuNCA4LjktMzMuMSAzMi4zIDM5LjggODAuOCA2NS44IDEzNS4yIDY4LjYtOS4zLTQ0LjUgMjQtODAuNiA2NC04MC42IDE4LjkgMCAzNS45IDcuOSA0Ny45IDIwLjcgMTQuOC0yLjggMjktOC4zIDQxLjYtMTUuOC00LjkgMTUuMi0xNS4yIDI4LTI4LjggMzYuMSAxMy4yLTEuNCAyNi01LjEgMzcuOC0xMC4yLTguOSAxMy4xLTIwLjEgMjQuNy0zMi45IDM0elwiXSx0eXBvMzpbNDMzLDUxMixbXSxcImY0MmJcIixcIk0zMzAuOCAzNDFjLTcgMi4zLTExLjYgMi4zLTE4LjUgMi4zLTU3LjIgMC0xNDAuNi0xOTguNS0xNDAuNi0yNjQuOSAwLTI0LjcgNS40LTMyLjQgMTMuOS0zOS40LTY5LjUgOC41LTE0OS4zIDM0LTE3Ni4zIDY2LjQtNS40IDcuNy05LjMgMjAuOC05LjMgMzcuMUMwIDI0NiAxMDYuOCA0ODAgMTg0LjEgNDgwYzM2LjMgMCA5Ny4zLTU5LjUgMTQ2LjctMTM5TTI5NC41IDMyYzcxLjggMCAxMzguOCAxMS42IDEzOC44IDUyLjUgMCA4Mi42LTUyLjUgMTgyLjMtNzguOCAxODIuMy00Ny45IDAtMTAxLjctMTMyLjEtMTAxLjctMTk4LjUgMC0zMC45IDExLjYtMzYuMyA0MS43LTM2LjNcIl0sdWJlcjpbNDQ4LDUxMixbXSxcImY0MDJcIixcIk00MTQuMSAzMkgzMy45QzE1LjIgMzIgMCA0Ny4yIDAgNjUuOVY0NDZjMCAxOC44IDE1LjIgMzQgMzMuOSAzNEg0MTRjMTguNyAwIDMzLjktMTUuMiAzMy45LTMzLjlWNjUuOUM0NDggNDcuMiA0MzIuOCAzMiA0MTQuMSAzMnpNMjM3LjYgMzkxLjFDMTYzIDM5OC42IDk2LjQgMzQ0LjIgODguOSAyNjkuNmg5NC40VjI5MGMwIDMuNyAzIDYuOCA2LjggNi44SDI1OGMzLjcgMCA2LjgtMyA2LjgtNi44di02Ny45YzAtMy43LTMtNi44LTYuOC02LjhoLTY3LjljLTMuNyAwLTYuOCAzLTYuOCA2Ljh2MjAuNEg4OC45YzctNjkuNCA2NS40LTEyMi4yIDEzNS4xLTEyMi4yIDY5LjcgMCAxMjguMSA1Mi44IDEzNS4xIDEyMi4yIDcuNSA3NC41LTQ2LjkgMTQxLjEtMTIxLjUgMTQ4LjZ6XCJdLHVpa2l0Ols0NDgsNTEyLFtdLFwiZjQwM1wiLFwiTTQ0My45IDEyOHYyNTZMMjE4IDUxMiAwIDM4NFYxNjkuN2w4Ny42IDQ1LjF2MTE3bDEzMy41IDc1LjUgMTM1LjgtNzUuNXYtMTUxbC0xMDEuMS01Ny42IDg3LjYtNTMuMUw0NDMuOSAxMjh6TTMwOC42IDQ5LjFMMjIzLjggMGwtODguNiA1NC44IDg2IDQ3LjMgODcuNC01M3pcIl0sdW5pcmVnaXN0cnk6WzM4NCw1MTIsW10sXCJmNDA0XCIsXCJNMjgxLjEgMjIwLjFIMzg0di0xNC44SDI4MS4xdjE0Ljh6bTAtMzcuMUgzODR2LTEyLjRIMjgxLjFWMTgzem0wIDc0LjJIMzg0di0xNy4zSDI4MS4xdjE3LjN6bS0xNTcuNyA4Ni43SDguNWMyLjYgOC41IDUuOCAxNi44IDkuNiAyNC44aDEzOC4zYy0xMi45LTUuNy0yNC4xLTE0LjItMzMtMjQuOG0xNDUuNy0xMi40aDEwOS43YzEuOC03LjMgMy4xLTE0LjcgMy45LTIyLjNIMjc4LjNjLTIuMSA3LjktNS4yIDE1LjQtOS4yIDIyLjNtLTQxLjUgMzcuMUgzNjdjMy43LTggNS44LTE2LjIgOC41LTI0LjhoLTExNWMtOC44IDEwLjctMjAuMSAxOS4yLTMyLjkgMjQuOE0zODQgMzJIMjgxLjF2Mi41SDM4NFYzMnpNMTkyIDQ4MGMzOS41IDAgNzYuMi0xMS44IDEwNi44LTMyLjJIODUuM0MxMTUuOCA0NjguMiAxNTIuNSA0ODAgMTkyIDQ4MG04OS4xLTMzNC4ySDM4NFYxMzZIMjgxLjF2OS44em0wLTM3LjFIMzg0di03LjRIMjgxLjF2Ny40em0wLTM3LjFIMzg0di00LjlIMjgxLjF2NC45em0tMTc4LjIgOTlIMFYxODNoMTAyLjl2LTEyLjR6TTM4LjggNDA1LjdoMzA1LjNjNi43LTguNSAxMi42LTE3LjYgMTcuOC0yNy4ySDIzYzUuMiA5LjYgOS4yIDE4LjcgMTUuOCAyNy4ybTY0LjEtMTE4Ljh2LTEyLjRIMHYxMi40YzAgMi41IDAgNSAuMSA3LjRoMTAzLjFjLS4yLTIuNC0uMy00LjktLjMtNy40bTE3OC4yIDBjMCAyLjUtLjEgNS0uNCA3LjRoMTAzLjFjLjEtMi41LjItNC45LjItNy40di0xMi40SDI4MS4xdjEyLjR6bS0yMDMgMTU2aDIyNy43YzExLjgtOC43IDIyLjctMTguNiAzMi4yLTI5LjdINDQuOWM5LjYgMTEgMjEuNCAyMSAzMy4yIDI5LjdtMjQuOC0zNzYuMkgwdjQuOWgxMDIuOXYtNC45em0wLTM0LjdIMHYyLjVoMTAyLjlWMzJ6bTAgMTczLjNIMHYxNC44aDEwMi45di0xNC44em0wIDM0LjZIMHYxNy4zaDEwMi45di0xNy4zem0wLTEwMy45SDB2OS45aDEwMi45VjEzNnptMC0zNC43SDB2Ny40aDEwMi45di03LjR6bTIuOCAyMDcuOUgxLjNjLjkgNy42IDIuMiAxNSAzLjkgMjIuM2gxMDkuN2MtNC02LjktNy4yLTE0LjQtOS4yLTIyLjNcIl0sdW50YXBwZDpbNjQwLDUxMixbXSxcImY0MDVcIixcIk00MDEuMyA0OS45Yy03OS44IDE2MC4xLTg0LjYgMTUyLjUtODcuOSAxNzMuMmwtNS4yIDMyLjhjLTEuOSAxMi02LjYgMjMuNS0xMy43IDMzLjRMMTQ1LjYgNDk3LjFjLTcuNiAxMC42LTIwLjQgMTYuMi0zMy40IDE0LjYtNDAuMy01LTc3LjgtMzIuMi05NS4zLTY4LjUtNS43LTExLjgtNC41LTI1LjggMy4xLTM2LjRsMTQ4LjktMjA3LjljNy4xLTkuOSAxNi40LTE4IDI3LjItMjMuN2wyOS4zLTE1LjVjMTguNS05LjggOS43LTExLjkgMTM1LjYtMTM4LjkgMS00LjggMS03LjMgMy42LTggMy0uNyA2LjYtMSA2LjMtNC42bC0uNC00LjZjLS4yLTEuOSAxLjMtMy42IDMuMi0zLjYgNC41LS4xIDEzLjIgMS4yIDI1LjYgMTAgMTIuMyA4LjkgMTYuNCAxNi44IDE3LjcgMjEuMS42IDEuOC0uNiAzLjctMi40IDQuMmwtNC41IDEuMWMtMy40LjktMi41IDQuNC0yLjMgNy40LjEgMi44LTIuMyAzLjYtNi41IDYuMXpNMjMwLjEgMzYuNGMzLjQuOSAyLjUgNC40IDIuMyA3LjQtLjIgMi43IDIuMSAzLjUgNi40IDYgNy45IDE1LjkgMTUuMyAzMC41IDIyLjIgNDQgLjcgMS4zIDIuMyAxLjUgMy4zLjUgMTEuMi0xMiAyNC42LTI2LjIgNDAuNS00Mi42IDEuMy0xLjQgMS40LTMuNS4xLTQuOS04LTguMi0xNi41LTE2LjktMjUuNi0yNi4xLTEtNC43LTEtNy4zLTMuNi04LTMtLjgtNi42LTEtNi4zLTQuNi4zLTMuMyAxLjQtOC4xLTIuOC04LjItNC41LS4xLTEzLjIgMS4xLTI1LjYgMTAtMTIuMyA4LjktMTYuNCAxNi44LTE3LjcgMjEuMS0xLjQgNC4yIDMuNiA0LjYgNi44IDUuNHpNNjIwIDQwNi43TDQ3MS4yIDE5OC44Yy0xMy4yLTE4LjUtMjYuNi0yMy40LTU2LjQtMzkuMS0xMS4yLTUuOS0xNC4yLTEwLjktMzAuNS0yOC45LTEtMS4xLTIuOS0uOS0zLjYuNS00Ni4zIDg4LjgtNDcuMSA4Mi44LTQ5IDk0LjgtMS43IDEwLjctMS4zIDIwIC4zIDI5LjggMS45IDEyIDYuNiAyMy41IDEzLjcgMzMuNGwxNDguOSAyMDcuOWM3LjYgMTAuNiAyMC4yIDE2LjIgMzMuMSAxNC43IDQwLjMtNC45IDc4LTMyIDk1LjctNjguNiA1LjQtMTEuOSA0LjMtMjUuOS0zLjQtMzYuNnpcIl0sdXNiOls2NDAsNTEyLFtdLFwiZjI4N1wiLFwiTTY0MS41IDI1NmMwIDMuMS0xLjcgNi4xLTQuNSA3LjVMNTQ3LjkgMzE3Yy0xLjQuOC0yLjggMS40LTQuNSAxLjQtMS40IDAtMy4xLS4zLTQuNS0xLjEtMi44LTEuNy00LjUtNC41LTQuNS03Ljh2LTM1LjZIMjk1LjdjMjUuMyAzOS42IDQwLjUgMTA2LjkgNjkuNiAxMDYuOUgzOTJWMzU0YzAtNSAzLjktOC45IDguOS04LjlINDkwYzUgMCA4LjkgMy45IDguOSA4Ljl2ODkuMWMwIDUtMy45IDguOS04LjkgOC45aC04OS4xYy01IDAtOC45LTMuOS04LjktOC45di0yNi43aC0yNi43Yy03NS40IDAtODEuMS0xNDIuNS0xMjQuNy0xNDIuNUgxNDAuM2MtOC4xIDMwLjYtMzUuOSA1My41LTY5IDUzLjVDMzIgMzI3LjMgMCAyOTUuMyAwIDI1NnMzMi03MS4zIDcxLjMtNzEuM2MzMy4xIDAgNjEgMjIuOCA2OSA1My41IDM5LjEgMCA0My45IDkuNSA3NC42LTYwLjRDMjU1IDg4LjcgMjczIDk1LjcgMzIzLjggOTUuN2M3LjUtMjAuOSAyNy0zNS42IDUwLjQtMzUuNiAyOS41IDAgNTMuNSAyMy45IDUzLjUgNTMuNXMtMjMuOSA1My41LTUzLjUgNTMuNWMtMjMuNCAwLTQyLjktMTQuOC01MC40LTM1LjZIMjk0Yy0yOS4xIDAtNDQuMyA2Ny40LTY5LjYgMTA2LjloMzEwLjF2LTM1LjZjMC0zLjMgMS43LTYuMSA0LjUtNy44IDIuOC0xLjcgNi40LTEuNCA4LjkuM2w4OS4xIDUzLjVjMi44IDEuMSA0LjUgNC4xIDQuNSA3LjJ6XCJdLHVzc3VubmFoOls1MTIsNTEyLFtdLFwiZjQwN1wiLFwiTTE1Ni44IDI4NS4xbDUuNyAxNC40aC04LjJjLTEuMy0zLjItMy4xLTcuNy0zLjgtOS41LTIuNS02LjMtMS4xLTguNCAwLTEwIDEuOS0yLjcgMy4yLTQuNCAzLjYtNS4yIDAgMi4yLjggNS43IDIuNyAxMC4zem0yOTcuMyAxOC44Yy0yLjEgMTMuOC01LjcgMjcuMS0xMC41IDM5LjdsNDMgMjMuNC00NC44LTE4LjhjLTUuMyAxMy4yLTEyIDI1LjYtMTkuOSAzNy4ybDM0LjIgMzAuMi0zNi44LTI2LjRjLTguNCAxMS44LTE4IDIyLjYtMjguNyAzMi4zbDI0LjkgMzQuNy0yOC4xLTMxLjhjLTExIDkuNi0yMy4xIDE4LTM2LjEgMjUuMWwxNS43IDM3LjItMTkuMy0zNS4zYy0xMy4xIDYuOC0yNyAxMi4xLTQxLjYgMTUuOWw2LjcgMzguNC0xMC41LTM3LjRjLTE0LjMgMy40LTI5LjIgNS4zLTQ0LjUgNS40TDI1NiA1MTJsLTEuOS0zOC40Yy0xNS4zLS4xLTMwLjItMi00NC41LTUuM0wxOTkgNTA1LjZsNi43LTM4LjJjLTE0LjYtMy43LTI4LjYtOS4xLTQxLjctMTUuOGwtMTkuMiAzNS4xIDE1LjYtMzdjLTEzLTctMjUuMi0xNS40LTM2LjItMjUuMWwtMjcuOSAzMS42IDI0LjctMzQuNGMtMTAuNy05LjctMjAuNC0yMC41LTI4LjgtMzIuM2wtMzYuNSAyNi4yIDMzLjktMjkuOWMtNy45LTExLjYtMTQuNi0yNC4xLTIwLTM3LjNsLTQ0LjQgMTguN0w2Ny44IDM0NGMtNC44LTEyLjctOC40LTI2LjEtMTAuNS0zOS45bC01MSA5IDUwLjMtMTQuMmMtMS4xLTguNS0xLjctMTcuMS0xLjctMjUuOSAwLTQuNy4yLTkuNC41LTE0LjFMMCAyNTZsNTYtMi44YzEuMy0xMy4xIDMuOC0yNS44IDcuNS0zOC4xTDYuNCAxOTlsNTguOSAxMC40YzQtMTIgOS4xLTIzLjUgMTUuMi0zNC40bC01NS4xLTMwIDU4LjMgMjQuNkM5MCAxNTkgOTcuMiAxNDkuMiAxMDUuMyAxNDBMNTUuOCA5Ni40bDUzLjkgMzguN2M4LjEtOC42IDE3LTE2LjUgMjYuNi0yMy42bC00MC01NS42IDQ1LjYgNTEuNmM5LjUtNi42IDE5LjctMTIuMyAzMC4zLTE3LjJsLTI3LjMtNjQuOSAzMy44IDYyLjFjMTAuNS00LjQgMjEuNC03LjkgMzIuNy0xMC40TDE5OSA2LjRsMTkuNSA2OS4yYzExLTIuMSAyMi4zLTMuMiAzMy44LTMuNEwyNTYgMGwzLjYgNzIuMmMxMS41LjIgMjIuOCAxLjQgMzMuOCAzLjVMMzEzIDYuNGwtMTIuNCA3MC43YzExLjMgMi42IDIyLjIgNi4xIDMyLjYgMTAuNWwzMy45LTYyLjItMjcuNCA2NS4xYzEwLjYgNC45IDIwLjcgMTAuNyAzMC4yIDE3LjJsNDUuOC01MS44LTQwLjEgNTUuOWM5LjUgNy4xIDE4LjQgMTUgMjYuNSAyMy42bDU0LjItMzguOS00OS43IDQzLjljOCA5LjEgMTUuMiAxOC45IDIxLjUgMjkuNGw1OC43LTI0LjctNTUuNSAzMC4yYzYuMSAxMC45IDExLjEgMjIuMyAxNS4xIDM0LjNsNTkuMy0xMC40LTU3LjUgMTYuMmMzLjcgMTIuMiA2LjIgMjQuOSA3LjUgMzcuOUw1MTIgMjU2bC01NiAyLjhjLjMgNC42LjUgOS4zLjUgMTQuMSAwIDguNy0uNiAxNy4zLTEuNiAyNS44bDUwLjcgMTQuMy01MS41LTkuMXptLTIxLjgtMzFjMC05Ny41LTc5LTE3Ni41LTE3Ni41LTE3Ni41cy0xNzYuNSA3OS0xNzYuNSAxNzYuNSA3OSAxNzYuNSAxNzYuNSAxNzYuNSAxNzYuNS03OSAxNzYuNS0xNzYuNXptLTI0IDBjMCA4NC4zLTY4LjMgMTUyLjYtMTUyLjYgMTUyLjZzLTE1Mi42LTY4LjMtMTUyLjYtMTUyLjYgNjguMy0xNTIuNiAxNTIuNi0xNTIuNiAxNTIuNiA2OC4zIDE1Mi42IDE1Mi42ek0xOTUgMjQxYzAgMi4xIDEuMyAzLjggMy42IDUuMSAzLjMgMS45IDYuMiA0LjYgOC4yIDguMiAyLjgtNS43IDQuMy05LjUgNC4zLTExLjIgMC0yLjItMS4xLTQuNC0zLjItNy0yLjEtMi41LTMuMi01LjItMy4zLTcuNy02LjUgNi44LTkuNiAxMC45LTkuNiAxMi42em0tNDAuNy0xOWMwIDIuMSAxLjMgMy44IDMuNiA1LjEgMy41IDEuOSA2LjIgNC42IDguMiA4LjIgMi44LTUuNyA0LjMtOS41IDQuMy0xMS4yIDAtMi4yLTEuMS00LjQtMy4yLTctMi4xLTIuNS0zLjItNS4yLTMuMy03LjctNi41IDYuOC05LjYgMTAuOS05LjYgMTIuNnptLTE5IDBjMCAyLjEgMS4zIDMuOCAzLjYgNS4xIDMuMyAxLjkgNi4yIDQuNiA4LjIgOC4yIDIuOC01LjcgNC4zLTkuNSA0LjMtMTEuMiAwLTIuMi0xLjEtNC40LTMuMi03LTIuMS0yLjUtMy4yLTUuMi0zLjMtNy43LTYuNCA2LjgtOS42IDEwLjktOS42IDEyLjZ6bTIwNC45IDg3LjljLTguNC0zLTguNy02LjgtOC43LTE1LjZWMTgyYy04LjIgMTIuNS0xNC4yIDE4LjYtMTggMTguNiA2LjMgMTQuNCA5LjUgMjMuOSA5LjUgMjguM3Y2NC4zYzAgMi4yLTIuMiA2LjUtNC43IDYuNWgtMThjLTIuOC03LjUtMTAuMi0yNi45LTE1LjMtNDAuMy0yIDIuNS03LjIgOS4yLTEwLjcgMTMuNyAyLjQgMS42IDQuMSAzLjYgNS4yIDYuMyAyLjYgNi43IDYuNCAxNi41IDcuOSAyMC4yaC05LjJjLTMuOS0xMC40LTkuNi0yNS40LTExLjgtMzEuMS0yIDIuNS03LjIgOS4yLTEwLjcgMTMuNyAyLjQgMS42IDQuMSAzLjYgNS4yIDYuMy44IDIgMi44IDcuMyA0LjMgMTAuOUgyNTZjLTEuNS00LjEtNS42LTE0LjYtOC40LTIyLTIgMi41LTcuMiA5LjItMTAuNyAxMy43IDIuNSAxLjYgNC4zIDMuNiA1LjIgNi4zLjIuNi41IDEuNC42IDEuN0gyMjVjLTQuNi0xMy45LTExLjQtMjcuNy0xMS40LTM0LjEgMC0yLjIuMy01LjEgMS4xLTguMi04LjggMTAuOC0xNCAxNS45LTE0IDI1IDAgNy41IDEwLjQgMjguMyAxMC40IDMzLjMgMCAxLjctLjUgMy4zLTEuNCA0LjktOS42LTEyLjctMTUuNS0yMC43LTE4LjgtMjAuN2gtMTJsLTExLjItMjhjLTMuOC05LjYtNS43LTE2LTUuNy0xOC44IDAtMy44LjUtNy43IDEuNy0xMi4yLTEgMS4zLTMuNyA0LjctNS41IDcuMS0uOC0yLjEtMy4xLTcuNy00LjYtMTEuNS0yLjEgMi41LTcuNSA5LjEtMTEuMiAxMy42LjkgMi4zIDMuMyA4LjEgNC45IDEyLjItMi41IDMuMy05LjEgMTEuOC0xMy42IDE3LjctNCA1LjMtNS44IDEzLjMtMi43IDIxLjggMi41IDYuNyAyIDcuOS0xLjcgMTQuMUgxOTFjNS41IDAgMTQuMyAxNCAxNS41IDIyIDEzLjItMTYgMTUuNC0xOS42IDE2LjgtMjEuNmgxMDdjMy45IDAgNy4yLTEuOSA5LjktNS44em0yMC4xLTI2LjZWMTgxLjdjLTkgMTIuNS0xNS45IDE4LjYtMjAuNyAxOC42IDcuMSAxNC40IDEwLjcgMjMuOSAxMC43IDI4LjN2NjYuM2MwIDE3LjUgOC42IDIwLjQgMjQgMjAuNCA4LjEgMCAxMi41LS44IDEzLjctMi43LTQuMy0xLjYtNy42LTIuNS05LjktMy4zLTguMS0zLjItMTcuOC03LjQtMTcuOC0yNnpcIl0sdmFhZGluOls0NDgsNTEyLFtdLFwiZjQwOFwiLFwiTTIyNC41IDE0MC43YzEuNS0xNy42IDQuOS01Mi43IDQ5LjgtNTIuN2g5OC42YzIwLjcgMCAzMi4xLTcuOCAzMi4xLTIxLjZWNTQuMWMwLTEyLjIgOS4zLTIyLjEgMjEuNS0yMi4xUzQ0OCA0MS45IDQ0OCA1NC4xdjM2LjVjMCA0Mi45LTIxLjUgNjItNjYuOCA2MkgyODAuN2MtMzAuMSAwLTMzIDE0LjctMzMgMjcuMSAwIDEuMy0uMSAyLjUtLjIgMy43LS43IDEyLjMtMTAuOSAyMi4yLTIzLjQgMjIuMnMtMjIuNy05LjgtMjMuNC0yMi4yYy0uMS0xLjItLjItMi40LS4yLTMuNyAwLTEyLjMtMy0yNy4xLTMzLTI3LjFINjYuOGMtNDUuMyAwLTY2LjgtMTkuMS02Ni44LTYyVjU0LjFDMCA0MS45IDkuNCAzMiAyMS42IDMyczIxLjUgOS45IDIxLjUgMjIuMXYxMi4zQzQzLjEgODAuMiA1NC41IDg4IDc1LjIgODhoOTguNmM0NC44IDAgNDguMyAzNS4xIDQ5LjggNTIuN2guOXpNMjI0IDQ1NmMxMS41IDAgMjEuNC03IDI1LjctMTYuMyAxLjEtMS44IDk3LjEtMTY5LjYgOTguMi0xNzEuNCAxMS45LTE5LjYtMy4yLTQ0LjMtMjcuMi00NC4zLTEzLjkgMC0yMy4zIDYuNC0yOS44IDIwLjNMMjI0IDM2MmwtNjYuOS0xMTcuN2MtNi40LTEzLjktMTUuOS0yMC4zLTI5LjgtMjAuMy0yNCAwLTM5LjEgMjQuNi0yNy4yIDQ0LjMgMS4xIDEuOSA5Ny4xIDE2OS42IDk4LjIgMTcxLjQgNC4zIDkuMyAxNC4yIDE2LjMgMjUuNyAxNi4zelwiXSx2aWFjb2luOlszODQsNTEyLFtdLFwiZjIzN1wiLFwiTTM4NCAzMmgtNjRsLTgwLjcgMTkyaC05NC41TDY0IDMySDBsNDggMTEySDB2NDhoNjguNWwxMy44IDMySDB2NDhoMTAyLjhMMTkyIDQ4MGw4OS4yLTIwOEgzODR2LTQ4aC04Mi4zbDEzLjgtMzJIMzg0di00OGgtNDhsNDgtMTEyek0xOTIgMzM2bC0yNy02NGg1NGwtMjcgNjR6XCJdLHZpYWRlbzpbNDQ4LDUxMixbXSxcImYyYTlcIixcIk0yNzYuMiAxNTAuNXYuN0MyNTguMyA5OC42IDIzMy42IDQ3LjggMjA1LjQgMGM0My4zIDI5LjIgNjcgMTAwIDcwLjggMTUwLjV6bTMyLjcgMTIxLjdjNy42IDE4LjIgMTEgMzcuNSAxMSA1NyAwIDc3LjctNTcuOCAxNDEtMTM3LjggMTM5LjRsMy44LS4zYzc0LjItNDYuNyAxMDkuMy0xMTguNiAxMDkuMy0yMDUuMSAwLTM4LjEtNi41LTc1LjktMTguOS0xMTIgMSAxMS43IDEgMjMuNyAxIDM1LjQgMCA5MS44LTE4LjEgMjQxLjYtMTE2LjYgMjgwQzk1IDQ1NS4yIDQ5LjQgMzk4IDQ5LjQgMzI5LjJjMC03NS42IDU3LjQtMTQyLjMgMTM1LjQtMTQyLjMgMTYuOCAwIDMzLjcgMy4xIDQ5LjEgOS42IDEuNy0xNS4xIDYuNS0yOS45IDEzLjQtNDMuMy0xOS45LTcuMi00MS4yLTEwLjctNjIuNS0xMC43LTE2MS41IDAtMjM4LjcgMTk1LjktMTI5LjkgMzEzLjcgNjcuOSA3NC42IDE5MiA3My45IDI1OS44IDAgNTYuNi02MS4zIDYwLjktMTQyLjQgMzYuNC0yMDEtMTIuNyA4LTI3LjEgMTMuOS00Mi4yIDE3ek00MTguMSAxMS43Yy0zMSA2Ni41LTgxLjMgNDcuMi0xMTUuOCA4MC4xLTEyLjQgMTItMjAuNiAzNC0yMC42IDUwLjUgMCAxNC4xIDQuNSAyNy4xIDEyIDM4LjggNDcuNC0xMSA5OC4zLTQ2IDExOC4yLTkwLjctLjcgNS41LTQuOCAxNC40LTcuMiAxOS4yLTIwLjMgMzUuNy02NC42IDY1LjYtOTkuNyA4NC45IDE0LjggMTQuNCAzMy43IDI1LjggNTUgMjUuOCA3OSAwIDExMC4xLTEzNC42IDU4LjEtMjA4LjZ6XCJdLFwidmlhZGVvLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjJhYVwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTI4MC43IDM4MS4yYy00Mi40IDQ2LjItMTIwIDQ2LjYtMTYyLjQgMC02OC03My42LTE5LjgtMTk2LjEgODEuMi0xOTYuMSAxMy4zIDAgMjYuNiAyLjEgMzkuMSA2LjctNC4zIDguNC03LjMgMTcuNi04LjQgMjcuMS05LjctNC4xLTIwLjItNi0zMC43LTYtNDguOCAwLTg0LjYgNDEuNy04NC42IDg4LjkgMCA0MyAyOC41IDc4LjcgNjkuNSA4NS45IDYxLjUtMjQgNzIuOS0xMTcuNiA3Mi45LTE3NSAwLTcuMyAwLTE0LjgtLjYtMjIuMS0xMS4yLTMyLjktMjYuNi02NC42LTQ0LjItOTQuNSAyNy4xIDE4LjMgNDEuOSA2Mi41IDQ0LjIgOTQuMXYuNGM3LjcgMjIuNSAxMS44IDQ2LjIgMTEuOCA3MCAwIDU0LjEtMjEuOSA5OS02OC4zIDEyOC4ybC0yLjQuMmM1MCAxIDg2LjItMzguNiA4Ni4yLTg3LjIgMC0xMi4yLTIuMS0yNC4zLTYuOS0zNS43IDkuNS0xLjkgMTguNS01LjYgMjYuNC0xMC41IDE1LjMgMzYuNiAxMi42IDg3LjMtMjIuOCAxMjUuNnpNMzA5IDIzMy43Yy0xMy4zIDAtMjUuMS03LjEtMzQuNC0xNi4xIDIxLjktMTIgNDkuNi0zMC43IDYyLjMtNTMgMS41LTMgNC4xLTguNiA0LjUtMTItMTIuNSAyNy45LTQ0LjIgNDkuOC03My45IDU2LjctNC43LTcuMy03LjUtMTUuNS03LjUtMjQuMyAwLTEwLjMgNS4yLTI0LjEgMTIuOS0zMS42IDIxLjYtMjAuNSA1My04LjUgNzIuNC01MCAzMi41IDQ2LjIgMTMuMSAxMzAuMy0zNi4zIDEzMC4zelwiXSx2aWJlcjpbNTEyLDUxMixbXSxcImY0MDlcIixcIk00NDQgNDkuOUM0MzEuMyAzOC4yIDM3OS45LjkgMjY1LjMuNGMwIDAtMTM1LjEtOC4xLTIwMC45IDUyLjNDMjcuOCA4OS4zIDE0LjkgMTQzIDEzLjUgMjA5LjVjLTEuNCA2Ni41LTMuMSAxOTEuMSAxMTcgMjI0LjloLjFsLS4xIDUxLjZzLS44IDIwLjkgMTMgMjUuMWMxNi42IDUuMiAyNi40LTEwLjcgNDIuMy0yNy44IDguNy05LjQgMjAuNy0yMy4yIDI5LjgtMzMuNyA4Mi4yIDYuOSAxNDUuMy04LjkgMTUyLjUtMTEuMiAxNi42LTUuNCAxMTAuNS0xNy40IDEyNS43LTE0MiAxNS44LTEyOC42LTcuNi0yMDkuOC00OS44LTI0Ni41ek00NTcuOSAyODdjLTEyLjkgMTA0LTg5IDExMC42LTEwMyAxMTUuMS02IDEuOS02MS41IDE1LjctMTMxLjIgMTEuMiAwIDAtNTIgNjIuNy02OC4yIDc5LTUuMyA1LjMtMTEuMSA0LjgtMTEtNS43IDAtNi45LjQtODUuNy40LTg1LjctLjEgMC0uMSAwIDAgMC0xMDEuOC0yOC4yLTk1LjgtMTM0LjMtOTQuNy0xODkuOCAxLjEtNTUuNSAxMS42LTEwMSA0Mi42LTEzMS42IDU1LjctNTAuNSAxNzAuNC00MyAxNzAuNC00MyA5Ni45LjQgMTQzLjMgMjkuNiAxNTQuMSAzOS40IDM1LjcgMzAuNiA1My45IDEwMy44IDQwLjYgMjExLjF6bS0xMzktODAuOGMuNCA4LjYtMTIuNSA5LjItMTIuOS42LTEuMS0yMi0xMS40LTMyLjctMzIuNi0zMy45LTguNi0uNS03LjgtMTMuNC43LTEyLjkgMjcuOSAxLjUgNDMuNCAxNy41IDQ0LjggNDYuMnptMjAuMyAxMS4zYzEtNDIuNC0yNS41LTc1LjYtNzUuOC03OS4zLTguNS0uNi03LjYtMTMuNS45LTEyLjkgNTggNC4yIDg4LjkgNDQuMSA4Ny44IDkyLjUtLjEgOC42LTEzLjEgOC4yLTEyLjktLjN6bTQ3IDEzLjRjLjEgOC42LTEyLjkgOC43LTEyLjkuMS0uNi04MS41LTU0LjktMTI1LjktMTIwLjgtMTI2LjQtOC41LS4xLTguNS0xMi45IDAtMTIuOSA3My43LjUgMTMzIDUxLjQgMTMzLjcgMTM5LjJ6TTM3NC45IDMyOXYuMmMtMTAuOCAxOS0zMSA0MC01MS44IDMzLjNsLS4yLS4zYy0yMS4xLTUuOS03MC44LTMxLjUtMTAyLjItNTYuNS0xNi4yLTEyLjgtMzEtMjcuOS00Mi40LTQyLjQtMTAuMy0xMi45LTIwLjctMjguMi0zMC44LTQ2LjYtMjEuMy0zOC41LTI2LTU1LjctMjYtNTUuNy02LjctMjAuOCAxNC4yLTQxIDMzLjMtNTEuOGguMmM5LjItNC44IDE4LTMuMiAyMy45IDMuOSAwIDAgMTIuNCAxNC44IDE3LjcgMjIuMSA1IDYuOCAxMS43IDE3LjcgMTUuMiAyMy44IDYuMSAxMC45IDIuMyAyMi0zLjcgMjYuNmwtMTIgOS42Yy02LjEgNC45LTUuMyAxNC01LjMgMTRzMTcuOCA2Ny4zIDg0LjMgODQuM2MwIDAgOS4xLjggMTQtNS4zbDkuNi0xMmM0LjYtNiAxNS43LTkuOCAyNi42LTMuNyAxNC43IDguMyAzMy40IDIxLjIgNDUuOCAzMi45IDcgNS43IDguNiAxNC40IDMuOCAyMy42elwiXSx2aW1lbzpbNDQ4LDUxMixbXSxcImY0MGFcIixcIk00MDMuMiAzMkg0NC44QzIwLjEgMzIgMCA1Mi4xIDAgNzYuOHYzNTguNEMwIDQ1OS45IDIwLjEgNDgwIDQ0LjggNDgwaDM1OC40YzI0LjcgMCA0NC44LTIwLjEgNDQuOC00NC44Vjc2LjhjMC0yNC43LTIwLjEtNDQuOC00NC44LTQ0Ljh6TTM3NyAxODAuOGMtMS40IDMxLjUtMjMuNCA3NC43LTY2IDEyOS40LTQ0IDU3LjItODEuMyA4NS44LTExMS43IDg1LjgtMTguOSAwLTM0LjgtMTcuNC00Ny45LTUyLjMtMjUuNS05My4zLTM2LjQtMTQ4LTU3LjQtMTQ4LTIuNCAwLTEwLjkgNS4xLTI1LjQgMTUuMmwtMTUuMi0xOS42YzM3LjMtMzIuOCA3Mi45LTY5LjIgOTUuMi03MS4yIDI1LjItMi40IDQwLjcgMTQuOCA0Ni41IDUxLjcgMjAuNyAxMzEuMiAyOS45IDE1MSA2Ny42IDkxLjYgMTMuNS0yMS40IDIwLjgtMzcuNyAyMS44LTQ4LjkgMy41LTMzLjItMjUuOS0zMC45LTQ1LjgtMjIuNCAxNS45LTUyLjEgNDYuMy03Ny40IDkxLjItNzYgMzMuMy45IDQ5IDIyLjUgNDcuMSA2NC43elwiXSxcInZpbWVvLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE5NFwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bS0xNi4yIDE0OS42Yy0xLjQgMzEuMS0yMy4yIDczLjgtNjUuMyAxMjcuOS00My41IDU2LjUtODAuMyA4NC44LTExMC40IDg0LjgtMTguNyAwLTM0LjQtMTcuMi00Ny4zLTUxLjYtMjUuMi05Mi4zLTM1LjktMTQ2LjQtNTYuNy0xNDYuNC0yLjQgMC0xMC44IDUtMjUuMSAxNS4xTDY0IDE5MmMzNi45LTMyLjQgNzIuMS02OC40IDk0LjEtNzAuNCAyNC45LTIuNCA0MC4yIDE0LjYgNDYgNTEuMSAyMC41IDEyOS42IDI5LjYgMTQ5LjIgNjYuOCA5MC41IDEzLjQtMjEuMiAyMC42LTM3LjIgMjEuNS00OC4zIDMuNC0zMi44LTI1LjYtMzAuNi00NS4yLTIyLjIgMTUuNy01MS41IDQ1LjgtNzYuNSA5MC4xLTc1LjEgMzIuOSAxIDQ4LjQgMjIuNCA0Ni41IDY0elwiXSxcInZpbWVvLXZcIjpbNDQ4LDUxMixbXSxcImYyN2RcIixcIk00NDcuOCAxNTMuNmMtMiA0My42LTMyLjQgMTAzLjMtOTEuNCAxNzkuMS02MC45IDc5LjItMTEyLjQgMTE4LjgtMTU0LjYgMTE4LjgtMjYuMSAwLTQ4LjItMjQuMS02Ni4zLTcyLjNDMTAwLjMgMjUwIDg1LjMgMTc0LjMgNTYuMiAxNzQuM2MtMy40IDAtMTUuMSA3LjEtMzUuMiAyMS4xTDAgMTY4LjJjNTEuNi00NS4zIDEwMC45LTk1LjcgMTMxLjgtOTguNSAzNC45LTMuNCA1Ni4zIDIwLjUgNjQuNCA3MS41IDI4LjcgMTgxLjUgNDEuNCAyMDguOSA5My42IDEyNi43IDE4LjctMjkuNiAyOC44LTUyLjEgMzAuMi02Ny42IDQuOC00NS45LTM1LjgtNDIuOC02My4zLTMxIDIyLTcyLjEgNjQuMS0xMDcuMSAxMjYuMi0xMDUuMSA0NS44IDEuMiA2Ny41IDMxLjEgNjQuOSA4OS40elwiXSx2aW5lOlszODQsNTEyLFtdLFwiZjFjYVwiLFwiTTM4NCAyNTQuN3Y1Mi4xYy0xOC40IDQuMi0zNi45IDYuMS01Mi4xIDYuMS0zNi45IDc3LjQtMTAzIDE0My44LTEyNS4xIDE1Ni4yLTE0IDcuOS0yNy4xIDguNC00Mi43LS44QzEzNyA0NTIgMzQuMiAzNjcuNyAwIDEwMi43aDc0LjVDOTMuMiAyNjEuOCAxMzkgMzQzLjQgMTg5LjMgNDA0LjVjMjcuOS0yNy45IDU0LjgtNjUuMSA3NS42LTEwNi45LTQ5LjgtMjUuMy04MC4xLTgwLjktODAuMS0xNDUuNiAwLTY1LjYgMzcuNy0xMTUuMSAxMDIuMi0xMTUuMSAxMTQuOSAwIDEwNi4yIDEyNy45IDgxLjYgMTgxLjUgMCAwLTQ2LjQgOS4yLTYzLjUtMjAuNSAzLjQtMTEuMyA4LjItMzAuOCA4LjItNDguNSAwLTMxLjMtMTEuMy00Ni42LTI4LjQtNDYuNi0xOC4yIDAtMzAuOCAxNy4xLTMwLjggNTAgLjEgNzkuMiA1OS40IDExOC43IDEyOS45IDEwMS45elwiXSx2azpbNTc2LDUxMixbXSxcImYxODlcIixcIk01NDUgMTE3LjdjMy43LTEyLjUgMC0yMS43LTE3LjgtMjEuN2gtNTguOWMtMTUgMC0yMS45IDcuOS0yNS42IDE2LjcgMCAwLTMwIDczLjEtNzIuNCAxMjAuNS0xMy43IDEzLjctMjAgMTguMS0yNy41IDE4LjEtMy43IDAtOS40LTQuNC05LjQtMTYuOVYxMTcuN2MwLTE1LTQuMi0yMS43LTE2LjYtMjEuN2gtOTIuNmMtOS40IDAtMTUgNy0xNSAxMy41IDAgMTQuMiAyMS4yIDE3LjUgMjMuNCA1Ny41djg2LjhjMCAxOS0zLjQgMjIuNS0xMC45IDIyLjUtMjAgMC02OC42LTczLjQtOTcuNC0xNTcuNC01LjgtMTYuMy0xMS41LTIyLjktMjYuNi0yMi45SDM4LjhjLTE2LjggMC0yMC4yIDcuOS0yMC4yIDE2LjcgMCAxNS42IDIwIDkzLjEgOTMuMSAxOTUuNUMxNjAuNCAzNzguMSAyMjkgNDE2IDI5MS40IDQxNmMzNy41IDAgNDIuMS04LjQgNDIuMS0yMi45IDAtNjYuOC0zLjQtNzMuMSAxNS40LTczLjEgOC43IDAgMjMuNyA0LjQgNTguNyAzOC4xIDQwIDQwIDQ2LjYgNTcuOSA2OSA1Ny45aDU4LjljMTYuOCAwIDI1LjMtOC40IDIwLjQtMjUtMTEuMi0zNC45LTg2LjktMTA2LjctOTAuMy0xMTEuNS04LjctMTEuMi02LjItMTYuMiAwLTI2LjIuMS0uMSA3Mi0xMDEuMyA3OS40LTEzNS42elwiXSx2bnY6WzY0MCw1MTIsW10sXCJmNDBiXCIsXCJNMTA0LjkgMzUyYy0zNC4xIDAtNDYuNC0zMC40LTQ2LjQtMzAuNEwyLjYgMjEwLjFTLTcuOCAxOTIgMTMgMTkyaDMyLjhjMTAuNCAwIDEzLjIgOC43IDE4LjggMTguMWwzNi43IDc0LjVzNS4yIDEzLjEgMjEuMSAxMy4xIDIxLjEtMTMuMSAyMS4xLTEzLjFsMzYuNy03NC41YzUuNi05LjUgOC40LTE4LjEgMTguOC0xOC4xaDMyLjhjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFsLTU1LjggMTExLjVTMTc0LjIgMzUyIDE0MCAzNTJoLTM1LjF6bTM5NSAwYy0zNC4xIDAtNDYuNC0zMC40LTQ2LjQtMzAuNGwtNTUuOS0xMTEuNVMzODcuMiAxOTIgNDA4IDE5MmgzMi44YzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjgtNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMUg2MjdjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFsLTU1LjkgMTExLjVTNTY5LjMgMzUyIDUzNS4xIDM1MmgtMzUuMnpNMzM3LjYgMTkyYzM0LjEgMCA0Ni40IDMwLjQgNDYuNCAzMC40bDU1LjkgMTExLjVzMTAuNCAxOC4xLTEwLjQgMTguMWgtMzIuOGMtMTAuNCAwLTEzLjItOC43LTE4LjgtMTguMWwtMzYuNy03NC41cy01LjItMTMuMS0yMS4xLTEzLjFjLTE1LjkgMC0yMS4xIDEzLjEtMjEuMSAxMy4xbC0zNi43IDc0LjVjLTUuNiA5LjQtOC40IDE4LjEtMTguOCAxOC4xaC0zMi45Yy0yMC44IDAtMTAuNC0xOC4xLTEwLjQtMTguMWw1NS45LTExMS41czEyLjItMzAuNCA0Ni40LTMwLjRoMzUuMXpcIl0sdnVlanM6WzQ0OCw1MTIsW10sXCJmNDFmXCIsXCJNMzU2LjkgNjQuM0gyODBsLTU2IDg4LjYtNDgtODguNkgwTDIyNCA0NDggNDQ4IDY0LjNoLTkxLjF6bS0zMDEuMiAzMmg1My44TDIyNCAyOTQuNSAzMzguNCA5Ni4zaDUzLjhMMjI0IDM4NC41IDU1LjcgOTYuM3pcIl0sd2VlYmx5Ols1MTIsNTEyLFtdLFwiZjVjY1wiLFwiTTQyNS4wOSA2NS44M2MtMzkuODggMC03My4yOCAyNS43My04My42NiA2NC4zMy0xOC4xNi01OC4wNi02NS41LTY0LjMzLTg0Ljk1LTY0LjMzLTE5Ljc4IDAtNjYuOCA2LjI4LTg1LjI4IDY0LjMzLTEwLjM4LTM4LjYtNDMuNDUtNjQuMzMtODMuNjYtNjQuMzNDMzguNTkgNjUuODMgMCA5OS43MiAwIDE0My4wM2MwIDI4Ljk2IDQuMTggMzMuMjcgNzcuMTcgMjMzLjQ4IDIyLjM3IDYwLjU3IDY3Ljc3IDY5LjM1IDkyLjc0IDY5LjM1IDM5LjIzIDAgNzAuMDQtMTkuNDYgODUuOTMtNTMuOTggMTUuODkgMzQuODMgNDYuNjkgNTQuMjkgODUuOTMgNTQuMjkgMjQuOTcgMCA3MC4zNi05LjEgOTIuNzQtNjkuNjcgNzYuNTUtMjA4LjY1IDc3LjUtMjA1LjU4IDc3LjUtMjI3LjIuNjMtNDguMzItMzYuMDEtODMuNDctODYuOTItODMuNDd6bTI2LjM0IDExNC44MWwtNjUuNTcgMTc2LjQ0Yy03LjkyIDIxLjQ5LTIxLjIyIDM3LjIyLTQ2LjI0IDM3LjIyLTIzLjQ0IDAtMzcuMzgtMTIuNDEtNDQuMDMtMzMuOWwtMzkuMjgtMTE3LjQyaC0uOTVMMjE2LjA4IDM2MC40Yy02Ljk2IDIxLjUtMjAuOSAzMy42LTQ0LjAyIDMzLjYtMjUuMDIgMC0zOC4zMy0xNS43NC00Ni4yNC0zNy4yMkw2MC44OCAxODEuNTVjLTUuMzgtMTQuODMtNy45Mi0yMy45MS03LjkyLTM0LjUgMC0xNi4zNCAxNS44NC0yOS4zNiAzOC4zMy0yOS4zNiAxOC42OSAwIDMxLjk5IDExLjggMzYuMTEgMjkuMDVsNDQuMDMgMTM5LjgyaC45NWw0NC42Ni0xMzYuNzljNi4wMi0xOS42NyAxNi40Ny0zMi4wOCAzOC45Ni0zMi4wOHMzMi45NCAxMi4xMSAzOC45NiAzMi4wOGw0NC42NiAxMzYuNzloLjk1bDQ0LjAzLTEzOS44MmM0LjEyLTE3LjI1IDE3LjQyLTI5LjA1IDM2LjExLTI5LjA1IDIyLjE3IDAgMzguMzMgMTMuMzIgMzguMzMgMzUuNzEtLjMyIDcuODctNC4xMiAxNi4wNC03LjYxIDI3LjI0elwiXSx3ZWlibzpbNTEyLDUxMixbXSxcImYxOGFcIixcIk00MDcgMTc3LjZjNy42LTI0LTEzLjQtNDYuOC0zNy40LTQxLjctMjIgNC44LTI4LjgtMjguMS03LjEtMzIuOCA1MC4xLTEwLjkgOTIuMyAzNy4xIDc2LjUgODQuOC02LjggMjEuMi0zOC44IDEwLjgtMzItMTAuM3pNMjE0LjggNDQ2LjdDMTA4LjUgNDQ2LjcgMCAzOTUuMyAwIDMxMC40YzAtNDQuMyAyOC05NS40IDc2LjMtMTQzLjdDMTc2IDY3IDI3OS41IDY1LjggMjQ5LjkgMTYxYy00IDEzLjEgMTIuMyA1LjcgMTIuMyA2IDc5LjUtMzMuNiAxNDAuNS0xNi44IDExNCA1MS40LTMuNyA5LjQgMS4xIDEwLjkgOC4zIDEzLjEgMTM1LjcgNDIuMyAzNC44IDIxNS4yLTE2OS43IDIxNS4yem0xNDMuNy0xNDYuM2MtNS40LTU1LjctNzguNS05NC0xNjMuNC04NS43LTg0LjggOC42LTE0OC44IDYwLjMtMTQzLjQgMTE2czc4LjUgOTQgMTYzLjQgODUuN2M4NC44LTguNiAxNDguOC02MC4zIDE0My40LTExNnpNMzQ3LjkgMzUuMWMtMjUuOSA1LjYtMTYuOCA0My43IDguMyAzOC4zIDcyLjMtMTUuMiAxMzQuOCA1Mi44IDExMS43IDEyNC03LjQgMjQuMiAyOS4xIDM3IDM3LjQgMTIgMzEuOS05OS44LTU1LjEtMTk1LjktMTU3LjQtMTc0LjN6bS03OC41IDMxMWMtMTcuMSAzOC44LTY2LjggNjAtMTA5LjEgNDYuMy00MC44LTEzLjEtNTgtNTMuNC00MC4zLTg5LjcgMTcuNy0zNS40IDYzLjEtNTUuNCAxMDMuNC00NS4xIDQyIDEwLjggNjMuMSA1MC4yIDQ2IDg4LjV6bS04Ni4zLTMwYy0xMi45LTUuNC0zMCAuMy0zOCAxMi45LTguMyAxMi45LTQuMyAyOCA4LjYgMzQgMTMuMSA2IDMwLjguMyAzOS4xLTEyLjkgOC0xMy4xIDMuNy0yOC4zLTkuNy0zNHptMzIuNi0xMy40Yy01LjEtMS43LTExLjQuNi0xNC4zIDUuNC0yLjkgNS4xLTEuNCAxMC42IDMuNyAxMi45IDUuMSAyIDExLjctLjMgMTQuNi01LjQgMi44LTUuMiAxLjEtMTAuOS00LTEyLjl6XCJdLHdlaXhpbjpbNTc2LDUxMixbXSxcImYxZDdcIixcIk0zODUuMiAxNjcuNmM2LjQgMCAxMi42LjMgMTguOCAxLjFDMzg3LjQgOTAuMyAzMDMuMyAzMiAyMDcuNyAzMiAxMDAuNSAzMiAxMyAxMDQuOCAxMyAxOTcuNGMwIDUzLjQgMjkuMyA5Ny41IDc3LjkgMTMxLjZsLTE5LjMgNTguNiA2OC0zNC4xYzI0LjQgNC44IDQzLjggOS43IDY4LjIgOS43IDYuMiAwIDEyLjEtLjMgMTguMy0uOC00LTEyLjktNi4yLTI2LjYtNi4yLTQwLjgtLjEtODQuOSA3Mi45LTE1NCAxNjUuMy0xNTR6bS0xMDQuNS01Mi45YzE0LjUgMCAyNC4yIDkuNyAyNC4yIDI0LjQgMCAxNC41LTkuNyAyNC4yLTI0LjIgMjQuMi0xNC44IDAtMjkuMy05LjctMjkuMy0yNC4yLjEtMTQuNyAxNC42LTI0LjQgMjkuMy0yNC40em0tMTM2LjQgNDguNmMtMTQuNSAwLTI5LjMtOS43LTI5LjMtMjQuMiAwLTE0LjggMTQuOC0yNC40IDI5LjMtMjQuNCAxNC44IDAgMjQuNCA5LjcgMjQuNCAyNC40IDAgMTQuNi05LjYgMjQuMi0yNC40IDI0LjJ6TTU2MyAzMTkuNGMwLTc3LjktNzcuOS0xNDEuMy0xNjUuNC0xNDEuMy05Mi43IDAtMTY1LjQgNjMuNC0xNjUuNCAxNDEuM1MzMDUgNDYwLjcgMzk3LjYgNDYwLjdjMTkuMyAwIDM4LjktNS4xIDU4LjYtOS45bDUzLjQgMjkuMy0xNC44LTQ4LjZDNTM0IDQwMi4xIDU2MyAzNjMuMiA1NjMgMzE5LjR6bS0yMTkuMS0yNC41Yy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjggMCAyNC40IDkuNyAyNC40IDE5LjMgMCAxMC05LjcgMTkuNi0yNC40IDE5LjZ6bTEwNy4xIDBjLTkuNyAwLTE5LjMtOS43LTE5LjMtMTkuNiAwLTkuNyA5LjctMTkuMyAxOS4zLTE5LjMgMTQuNSAwIDI0LjQgOS43IDI0LjQgMTkuMy4xIDEwLTkuOSAxOS42LTI0LjQgMTkuNnpcIl0sd2hhdHNhcHA6WzQ0OCw1MTIsW10sXCJmMjMyXCIsXCJNMzgwLjkgOTcuMUMzMzkgNTUuMSAyODMuMiAzMiAyMjMuOSAzMmMtMTIyLjQgMC0yMjIgOTkuNi0yMjIgMjIyIDAgMzkuMSAxMC4yIDc3LjMgMjkuNiAxMTFMMCA0ODBsMTE3LjctMzAuOWMzMi40IDE3LjcgNjguOSAyNyAxMDYuMSAyN2guMWMxMjIuMyAwIDIyNC4xLTk5LjYgMjI0LjEtMjIyIDAtNTkuMy0yNS4yLTExNS02Ny4xLTE1N3ptLTE1NyAzNDEuNmMtMzMuMiAwLTY1LjctOC45LTk0LTI1LjdsLTYuNy00LTY5LjggMTguM0w3MiAzNTkuMmwtNC40LTdjLTE4LjUtMjkuNC0yOC4yLTYzLjMtMjguMi05OC4yIDAtMTAxLjcgODIuOC0xODQuNSAxODQuNi0xODQuNSA0OS4zIDAgOTUuNiAxOS4yIDEzMC40IDU0LjEgMzQuOCAzNC45IDU2LjIgODEuMiA1Ni4xIDEzMC41IDAgMTAxLjgtODQuOSAxODQuNi0xODYuNiAxODQuNnptMTAxLjItMTM4LjJjLTUuNS0yLjgtMzIuOC0xNi4yLTM3LjktMTgtNS4xLTEuOS04LjgtMi44LTEyLjUgMi44LTMuNyA1LjYtMTQuMyAxOC0xNy42IDIxLjgtMy4yIDMuNy02LjUgNC4yLTEyIDEuNC0zMi42LTE2LjMtNTQtMjkuMS03NS41LTY2LTUuNy05LjggNS43LTkuMSAxNi4zLTMwLjMgMS44LTMuNy45LTYuOS0uNS05LjctMS40LTIuOC0xMi41LTMwLjEtMTcuMS00MS4yLTQuNS0xMC44LTkuMS05LjMtMTIuNS05LjUtMy4yLS4yLTYuOS0uMi0xMC42LS4yLTMuNyAwLTkuNyAxLjQtMTQuOCA2LjktNS4xIDUuNi0xOS40IDE5LTE5LjQgNDYuMyAwIDI3LjMgMTkuOSA1My43IDIyLjYgNTcuNCAyLjggMy43IDM5LjEgNTkuNyA5NC44IDgzLjggMzUuMiAxNS4yIDQ5IDE2LjUgNjYuNiAxMy45IDEwLjctMS42IDMyLjgtMTMuNCAzNy40LTI2LjQgNC42LTEzIDQuNi0yNC4xIDMuMi0yNi40LTEuMy0yLjUtNS0zLjktMTAuNS02LjZ6XCJdLFwid2hhdHNhcHAtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmNDBjXCIsXCJNMjI0IDEyMi44Yy03Mi43IDAtMTMxLjggNTkuMS0xMzEuOSAxMzEuOCAwIDI0LjkgNyA0OS4yIDIwLjIgNzAuMWwzLjEgNS0xMy4zIDQ4LjYgNDkuOS0xMy4xIDQuOCAyLjljMjAuMiAxMiA0My40IDE4LjQgNjcuMSAxOC40aC4xYzcyLjYgMCAxMzMuMy01OS4xIDEzMy4zLTEzMS44IDAtMzUuMi0xNS4yLTY4LjMtNDAuMS05My4yLTI1LTI1LTU4LTM4LjctOTMuMi0zOC43em03Ny41IDE4OC40Yy0zLjMgOS4zLTE5LjEgMTcuNy0yNi43IDE4LjgtMTIuNiAxLjktMjIuNC45LTQ3LjUtOS45LTM5LjctMTcuMi02NS43LTU3LjItNjcuNy01OS44LTItMi42LTE2LjItMjEuNS0xNi4yLTQxczEwLjItMjkuMSAxMy45LTMzLjFjMy42LTQgNy45LTUgMTAuNi01IDIuNiAwIDUuMyAwIDcuNi4xIDIuNC4xIDUuNy0uOSA4LjkgNi44IDMuMyA3LjkgMTEuMiAyNy40IDEyLjIgMjkuNHMxLjcgNC4zLjMgNi45Yy03LjYgMTUuMi0xNS43IDE0LjYtMTEuNiAyMS42IDE1LjMgMjYuMyAzMC42IDM1LjQgNTMuOSA0Ny4xIDQgMiA2LjMgMS43IDguNi0xIDIuMy0yLjYgOS45LTExLjYgMTIuNS0xNS41IDIuNi00IDUuMy0zLjMgOC45LTIgMy42IDEuMyAyMy4xIDEwLjkgMjcuMSAxMi45czYuNiAzIDcuNiA0LjZjLjkgMS45LjkgOS45LTIuNCAxOS4xek00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0yMjMuOSA0MTMuMmMtMjYuNiAwLTUyLjctNi43LTc1LjgtMTkuM0w2NCA0MTZsMjIuNS04Mi4yYy0xMy45LTI0LTIxLjItNTEuMy0yMS4yLTc5LjNDNjUuNCAxNjcuMSAxMzYuNSA5NiAyMjMuOSA5NmM0Mi40IDAgODIuMiAxNi41IDExMi4yIDQ2LjUgMjkuOSAzMCA0Ny45IDY5LjggNDcuOSAxMTIuMiAwIDg3LjQtNzIuNyAxNTguNS0xNjAuMSAxNTguNXpcIl0sd2htY3M6WzQ0OCw1MTIsW10sXCJmNDBkXCIsXCJNNDQ4IDE2MXYtMjEuM2wtMjguNS04LjgtMi4yLTEwLjQgMjAuMS0yMC43TDQyNyA4MC40bC0yOSA3LjUtNy4yLTcuNSA3LjUtMjguMi0xOS4xLTExLjYtMjEuMyAyMS0xMC43LTMuMi03LTI2LjRoLTIyLjZsLTYuMiAyNi40LTEyLjEgMy4yLTE5LjctMjEtMTkuNCAxMSA4LjEgMjcuNy04LjEgOC40LTI4LjUtNy41LTExIDE5LjEgMjAuNyAyMS0yLjkgMTAuNC0yOC41IDcuOC0uMyAyMS43IDI4LjggNy41IDIuNCAxMi4xLTIwLjEgMTkuOSAxMC40IDE4LjUgMjkuNi03LjUgNy4yIDguNi04LjEgMjYuOSAxOS45IDExLjYgMTkuNC0yMC40IDExLjYgMi45IDYuNyAyOC41IDIyLjYuMyA2LjctMjguOCAxMS42LTMuNSAyMC43IDIxLjYgMjAuNC0xMi4xLTguOC0yOCA3LjgtOC4xIDI4LjggOC44IDEwLjMtMjAuMS0yMC45LTE4LjggMi4yLTEyLjEgMjkuMS03em0tMTE5LjIgNDUuMmMtMzEuMyAwLTU2LjgtMjUuNC01Ni44LTU2LjhzMjUuNC01Ni44IDU2LjgtNTYuOCA1Ni44IDI1LjQgNTYuOCA1Ni44YzAgMzEuNS0yNS40IDU2LjgtNTYuOCA1Ni44em03Mi4zIDE2LjRsNDYuOSAxNC41VjI3N2wtNTUuMSAxMy40LTQuMSAyMi43IDM4LjkgMzUuMy0xOS4yIDM3LjktNTQtMTYuNy0xNC42IDE1LjIgMTYuNyA1Mi41LTM4LjMgMjIuNy0zOC45LTQwLjUtMjEuNyA2LjYtMTIuNiA1NC00Mi40LS41LTEyLjYtNTMuNi0yMS43LTUuNi0zNi40IDM4LjQtMzcuNC0yMS43IDE1LjItNTAuNS0xMy43LTE2LjEtNTUuNSAxNC4xLTE5LjctMzQuOCAzNy45LTM3LjQtNC44LTIyLjgtNTQtMTQuMS41LTQwLjlMNTQgMjE5LjlsNS43LTE5LjctMzguOS0zOS40TDQxLjUgMTI1bDUzLjYgMTQuMSAxNS4yLTE1LjctMTUuMi01MiAzNi40LTIwLjcgMzYuOCAzOS40TDE5MSA4NGwxMS42LTUySDI0NWwxMS42IDQ1LjlMMjM0IDcybC02LjMtMS43LTMuMyA1LjctMTEgMTkuMS0zLjMgNS42IDQuNiA0LjYgMTcuMiAxNy40LS4zIDEtMjMuOCA2LjUtNi4yIDEuNy0uMSA2LjQtLjIgMTIuOUMxNTMuOCAxNjEuNiAxMTggMjA0IDExOCAyNTQuN2MwIDU4LjMgNDcuMyAxMDUuNyAxMDUuNyAxMDUuNyA1MC41IDAgOTIuNy0zNS40IDEwMy4yLTgyLjhsMTMuMi4yIDYuOS4xIDEuNi02LjcgNS42LTI0IDEuOS0uNiAxNy4xIDE3LjggNC43IDQuOSA1LjgtMy40IDIwLjQtMTIuMSA1LjgtMy41LTItNi41LTYuOC0yMS4yelwiXSxcIndpa2lwZWRpYS13XCI6WzY0MCw1MTIsW10sXCJmMjY2XCIsXCJNNjQwIDUxLjJsLS4zIDEyLjJjLTI4LjEuOC00NSAxNS44LTU1LjggNDAuMy0yNSA1Ny44LTEwMy4zIDI0MC0xNTUuMyAzNTguNkg0MTVsLTgxLjktMTkzLjFjLTMyLjUgNjMuNi02OC4zIDEzMC05OS4yIDE5My4xLS4zLjMtMTUgMC0xNS0uM0MxNzIgMzUyLjMgMTIyLjggMjQzLjQgNzUuOCAxMzMuNCA2NC40IDEwNi43IDI2LjQgNjMuNC4yIDYzLjdjMC0zLjEtLjMtMTAtLjMtMTQuMmgxNjEuOXYxMy45Yy0xOS4yIDEuMS01Mi44IDEzLjMtNDMuMyAzNC4yIDIxLjkgNDkuNyAxMDMuNiAyNDAuMyAxMjUuNiAyODguNiAxNS0yOS43IDU3LjgtMTA5LjIgNzUuMy0xNDIuOC0xMy45LTI4LjMtNTguNi0xMzMuOS03Mi44LTE2MC05LjctMTcuOC0zNi4xLTE5LjQtNTUuOC0xOS43VjQ5LjhsMTQyLjUuM3YxMy4xYy0xOS40LjYtMzguMSA3LjgtMjkuNCAyNi4xIDE4LjkgNDAgMzAuNiA2OC4xIDQ4LjEgMTA0LjcgNS42LTEwLjggMzQuNy02OS40IDQ4LjEtMTAwLjggOC45LTIwLjYtMy45LTI4LjYtMzguNi0yOS40LjMtMy42IDAtMTAuMy4zLTEzLjYgNDQuNC0uMyAxMTEuMS0uMyAxMjMuMS0uNnYxMy42Yy0yMi41LjgtNDUuOCAxMi44LTU4LjEgMzEuN2wtNTkuMiAxMjIuOGM2LjQgMTYuMSA2My4zIDE0Mi44IDY5LjIgMTU2LjdMNTU5LjIgOTEuOGMtOC42LTIzLjEtMzYuNC0yOC4xLTQ3LjItMjguM1Y0OS42bDEyNy44IDEuMS4yLjV6XCJdLHdpbmRvd3M6WzQ0OCw1MTIsW10sXCJmMTdhXCIsXCJNMCA5My43bDE4My42LTI1LjN2MTc3LjRIMFY5My43em0wIDMyNC42bDE4My42IDI1LjNWMjY4LjRIMHYxNDkuOXptMjAzLjggMjhMNDQ4IDQ4MFYyNjguNEgyMDMuOHYxNzcuOXptMC0zODAuNnYxODAuMUg0NDhWMzJMMjAzLjggNjUuN3pcIl0sd2l4Ols2NDAsNTEyLFtdLFwiZjVjZlwiLFwiTTM5My4zOCAxMzEuNjljMCAxMy4wMyAyLjA4IDMyLjY5LTI4LjY4IDQzLjgzLTkuNTIgMy40NS0xNS45NSA5LjY2LTE1Ljk1IDkuNjYgMC0zMSA0LjcyLTQyLjIyIDE3LjQtNDguODYgOS43NS01LjExIDI3LjIzLTQuNjMgMjcuMjMtNC42M3ptLTExNS44IDM1LjU0bC0zNC4yNCAxMzIuNjYtMjguNDgtMTA4LjU3Yy03LjY5LTMxLjk5LTIwLjgxLTQ4LjUzLTQ4LjQzLTQ4LjUzLTI3LjM3IDAtNDAuNjYgMTYuMTgtNDguNDMgNDguNTNMODkuNTIgMjk5Ljg5IDU1LjI4IDE2Ny4yM0M0OS43MyAxNDAuNTEgMjMuODYgMTI4Ljk2IDAgMTMxLjk2bDY1LjU3IDI0Ny45M3MyMS42MyAxLjU2IDMyLjQ2LTMuOTZjMTQuMjItNy4yNSAyMC45OC0xMi44NCAyOS41OS00Ni41NyA3LjY3LTMwLjA3IDI5LjExLTExOC40MSAzMS4xMi0xMjQuNyA0Ljc2LTE0Ljk0IDExLjA5LTEzLjgxIDE1LjQgMCAxLjk3IDYuMyAyMy40NSA5NC42MyAzMS4xMiAxMjQuNyA4LjYgMzMuNzMgMTUuMzcgMzkuMzIgMjkuNTkgNDYuNTcgMTAuODIgNS41MiAzMi40NiAzLjk2IDMyLjQ2IDMuOTZsNjUuNTctMjQ3LjkzYy0yNC40Mi0zLjA3LTQ5LjgyIDguOTMtNTUuMyAzNS4yN3ptMTE1Ljc4IDUuMjFzLTQuMSA2LjM0LTEzLjQ2IDExLjU3Yy02LjAxIDMuMzYtMTEuNzggNS42NC0xNy45NyA4LjYxLTE1LjE0IDcuMjYtMTMuMTggMTMuOTUtMTMuMTggMzUuMnYxNTIuMDdzMTYuNTUgMi4wOSAyNy4zNy0zLjQzYzEzLjkzLTcuMSAxNy4xMy0xMy45NSAxNy4yNi00NC43OFYxODEuNDFsLS4wMi4wMXYtOC45OHptMTYzLjQ0IDg0LjA4TDY0MCAxMzIuNzhzLTM1LjExLTUuOTgtNTIuNSA5Ljg1Yy0xMy4zIDEyLjEtMjQuNDEgMjkuNTUtNTQuMTggNzIuNDctLjQ3LjczLTYuMjUgMTAuNTQtMTMuMDcgMC0yOS4yOS00Mi4yMy00MC44LTYwLjI5LTU0LjE4LTcyLjQ3LTE3LjM5LTE1LjgzLTUyLjUtOS44NS01Mi41LTkuODVsODMuMiAxMjMuNzQtODIuOTcgMTIzLjM2czM2LjU3IDQuNjIgNTMuOTUtMTEuMjFjMTEuNDktMTAuNDYgMTcuNTgtMjAuMzcgNTIuNTEtNzAuNzIgNi44MS0xMC41MiAxMi41Ny0uNzcgMTMuMDcgMCAyOS40IDQyLjM4IDM5LjIzIDU4LjA2IDUzLjE0IDcwLjcyIDE3LjM5IDE1LjgzIDUzLjMyIDExLjIxIDUzLjMyIDExLjIxTDU1Ni44IDI1Ni41MnpcIl0sXCJ3b2xmLXBhY2stYmF0dGFsaW9uXCI6WzQ1Niw1MTIsW10sXCJmNTE0XCIsXCJNMjM5LjczIDQ3MS41M2wxMC41NiAxNS44NCA1LjI4LTEyLjMyIDUuMjggNy4wNFY1MTJjMjEuMDYtNy45MiAyMS4xMS02Ni44NiAyNS41MS05Ny4yMSA0LjYyLTMxLjg5LS44OC05Mi44MSA4MS4zNy0xNDkuMTEtOC44OC0yMy42MS0xMi00OS40My0yLjY0LTgwLjA1IDI3Ljg3IDMuMzQgNTMuOTQgMTAuNTggNjMuMzQgNTQuMWwtMzAuMzUgOC4zNmMxMS4xNSAyMy4wNCAxNy4wMSA0Ni43NiAxMy4yIDcyLjE0TDM4NCAzMTMuMThsLTYuMTYgMzMuNDMtMTguNDctNy4wNC04LjggMzMuNDMtMTkuMzUtNy4wNCAyNi4zOSAyMS4xMSA4LjgtMjguMTUgMjQuNjMgNS4yOCA3LjA0LTM1LjYzIDI2LjM5IDE0LjUyYy4yNS0yMC4wMiA2Ljk3LTU4LjA2LTguOC04NC40NWwyNi4zOSA1LjI4YzMuOTktMjIuMDctMi4zOC0zOS4yMS03LjkyLTU2Ljc0bDIyLjQzIDkuNjhjLS40NC0yNS4wNy0yOS45NC01Ni43OS02MS41OC01OC41LTIwLjIyLTEuMDktNTYuNzQtMjUuMTctNTQuMS01MS45IDEuOTYtMTkuODcgMTcuNDUtNDIuNjIgNDMuMTEtNDkuNy00My45OSAzNi41MS05LjY4IDY3LjMgNS4yOCA3My40NiA0LjQtMTEuNDQgMTcuNTQtNjkuMDggMC0xMzAuMi00MC40NyAyMi44Ny04OS43MyA2NS4xLTkzLjI1IDE0Ny43OWwtNTguMDYgMzguNzEtMy41MiA5My4yNSAxMDcuMzMtNTkuODIgNy4wNCA3LjA0LTE3LjU5IDMuNTItNDMuOTkgMzguNzEtMTUuODQtNS4yOC0yOC4xNSA0OS4yNi0zLjUyIDExOS42NCAyMS4xMSAxNS44NC0zMi41NSAxNS44NC0zMi41NS0xNS44NCAyMS4xMS0xNS44NC0zLjUyLTExOS42NC0yOC4xNS00OS4yNi0xNS44NCA1LjI4LTQzLjk5LTM4LjcxLTE3LjU5LTMuNTIgNy4wNC03LjA0IDEwNy4zMyA1OS44Mi0zLjUyLTkzLjI1LTU4LjA2LTM4LjcxQzE1Ny4wMyA2NS4xIDEwNy43NyAyMi44NyA2Ny4zIDBjLTE3LjU0IDYxLjEyLTQuNCAxMTguNzYgMCAxMzAuMiAxNC45Ni02LjE2IDQ5LjI2LTM2Ljk1IDUuMjgtNzMuNDYgMjUuNjYgNy4wOCA0MS4xNSAyOS44MyA0My4xMSA0OS43IDIuNjMgMjYuNzQtMzMuODggNTAuODEtNTQuMSA1MS45QzI5Ljk0IDE2MC4wNi40NCAxOTEuNzggMCAyMTYuODVsMjIuNDMtOS42OGMtNS41NCAxNy41My0xMS45MSAzNC42Ny03LjkyIDU2Ljc0bDI2LjM5LTUuMjhjLTE1Ljc2IDI2LjM5LTkuMDUgNjQuNDMtOC44IDg0LjQ1bDI2LjM5LTE0LjUyIDcuMDQgMzUuNjMgMjQuNjMtNS4yOCA4LjggMjguMTUgMjYuMzktMjEuMTEtMTkuMzQgNy4wNS04LjgtMzMuNDMtMTguNDcgNy4wNC02LjE2LTMzLjQzLTI3LjI3IDcuMDRjLTMuODItMjUuMzggMi4wNS00OS4xIDEzLjItNzIuMTRsLTMwLjM1LTguMzZjOS40LTQzLjUyIDM1LjQ3LTUwLjc3IDYzLjM0LTU0LjEgOS4zNiAzMC42MiA2LjI0IDU2LjQ1LTIuNjQgODAuMDUgODIuMjUgNTYuMyA3Ni43NSAxMTcuMjMgODEuMzcgMTQ5LjExIDQuNCAzMC4zNSA0LjQ1IDg5LjI5IDI1LjUxIDk3LjIxdi0yOS45MWw1LjI4LTcuMDQgNS4yOCAxMi4zMiAxMC41Ni0xNS44NCAxMS40NCAyMS4xMSAxMS40My0yMS4xem03OS4xNy05NS4wMWwtMTUuODQtMTAuNTZjNy40Ny00LjM2IDEzLjc2LTguNDIgMTkuMzUtMTIuMzItLjYgNy4yNi0uMjcgMTMuODgtMy41MSAyMi44OHptMjguMTUtNDkuMjZjLS40IDEwLjk0LS45IDIxLjY2LTEuNzYgMzEuNjctNy44NS0xLjg2LTE1LjU3LTMuOC0yMS4xMS03LjA0IDguMjQtNy45IDE1LjU1LTE2LjI3IDIyLjg3LTI0LjYzem0yNC42MyA1LjI4Yy0uMDItMTMuNDMtMi4wNS0yNC4yMS01LjI4LTMzLjQzLTUuMzggOS4wOS0xMS4yMyAxOC4xOC0xOC40NyAyNy4yN2wyMy43NSA2LjE2em0zLjUyLTgwLjk0YzE5LjQ0IDEyLjgxIDI3LjggMzMuNjYgMjkuOTEgNTYuMy0xMi4zMi00LjUzLTI0LjYzLTkuMzEtMzYuOTUtMTAuNTYgNS4wNi0xMS45OSA2LjY1LTI4LjE0IDcuMDQtNDUuNzR6bS0xLjc2LTQ1Ljc0Yy44MSAxNC4zIDEuODQgMjguODIgMS43NiA0Mi4yMyAxOS4yMi04LjExIDI5Ljc4LTkuNzIgNDMuOTktMTQuMDgtMTAuNi0xOC45NS0yNy4yMi0yNS41Mi00NS43NS0yOC4xNXpNMTM3LjY4IDM3Ni41MmwxNS44NC0xMC41NmMtNy40Ny00LjM2LTEzLjc2LTguNDItMTkuMzUtMTIuMzIuNiA3LjI2LjI3IDEzLjg4IDMuNTEgMjIuODh6bS0yOC4xNS00OS4yNmMuNCAxMC45NC45IDIxLjY2IDEuNzYgMzEuNjcgNy44NS0xLjg2IDE1LjU3LTMuOCAyMS4xMS03LjA0LTguMjQtNy45LTE1LjU1LTE2LjI3LTIyLjg3LTI0LjYzem0tMjQuNjQgNS4yOGMuMDItMTMuNDMgMi4wNS0yNC4yMSA1LjI4LTMzLjQzIDUuMzggOS4wOSAxMS4yMyAxOC4xOCAxOC40NyAyNy4yN2wtMjMuNzUgNi4xNnptLTMuNTItODAuOTRjLTE5LjQ0IDEyLjgxLTI3LjggMzMuNjYtMjkuOTEgNTYuMyAxMi4zMi00LjUzIDI0LjYzLTkuMzEgMzYuOTUtMTAuNTYtNS4wNS0xMS45OS02LjY1LTI4LjE0LTcuMDQtNDUuNzR6bTEuNzYtNDUuNzRjLS44MSAxNC4zLTEuODQgMjguODItMS43NiA0Mi4yMy0xOS4yMi04LjExLTI5Ljc4LTkuNzItNDMuOTktMTQuMDggMTAuNjEtMTguOTUgMjcuMjItMjUuNTIgNDUuNzUtMjguMTV6XCJdLHdvcmRwcmVzczpbNTEyLDUxMixbXSxcImYxOWFcIixcIk02MS43IDE2OS40bDEwMS41IDI3OEM5Mi4yIDQxMyA0My4zIDM0MC4yIDQzLjMgMjU2YzAtMzAuOSA2LjYtNjAuMSAxOC40LTg2LjZ6bTMzNy45IDc1LjljMC0yNi4zLTkuNC00NC41LTE3LjUtNTguNy0xMC44LTE3LjUtMjAuOS0zMi40LTIwLjktNDkuOSAwLTE5LjYgMTQuOC0zNy44IDM1LjctMzcuOC45IDAgMS44LjEgMi44LjItMzcuOS0zNC43LTg4LjMtNTUuOS0xNDMuNy01NS45LTc0LjMgMC0xMzkuNyAzOC4xLTE3Ny44IDk1LjkgNSAuMiA5LjcuMyAxMy43LjMgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzcuNSAyMzAuNEwyNDkuOCAyNDdsLTMzLjEtOTAuOGMtMTEuNS0uNy0yMi4zLTItMjIuMy0yLTExLjUtLjctMTAuMS0xOC4yIDEuMy0xNy41IDAgMCAzNS4xIDIuNyA1NiAyLjcgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzYuOSAyMjguNyAyMS4yLTcwLjljOS0yOS40IDE2LTUwLjUgMTYtNjguN3ptLTEzOS45IDI5LjNsLTYzLjggMTg1LjVjMTkuMSA1LjYgMzkuMiA4LjcgNjAuMSA4LjcgMjQuOCAwIDQ4LjUtNC4zIDcwLjYtMTIuMS0uNi0uOS0xLjEtMS45LTEuNS0yLjlsLTY1LjQtMTc5LjJ6bTE4My0xMjAuN2MuOSA2LjggMS40IDE0IDEuNCAyMS45IDAgMjEuNi00IDQ1LjgtMTYuMiA3Ni4ybC02NSAxODcuOUM0MjYuMiA0MDMgNDY4LjcgMzM0LjUgNDY4LjcgMjU2YzAtMzctOS40LTcxLjgtMjYtMTAyLjF6TTUwNCAyNTZjMCAxMzYuOC0xMTEuMyAyNDgtMjQ4IDI0OEMxMTkuMiA1MDQgOCAzOTIuNyA4IDI1NiA4IDExOS4yIDExOS4yIDggMjU2IDhjMTM2LjcgMCAyNDggMTExLjIgMjQ4IDI0OHptLTExLjQgMGMwLTEzMC41LTEwNi4yLTIzNi42LTIzNi42LTIzNi42QzEyNS41IDE5LjQgMTkuNCAxMjUuNSAxOS40IDI1NlMxMjUuNiA0OTIuNiAyNTYgNDkyLjZjMTMwLjUgMCAyMzYuNi0xMDYuMSAyMzYuNi0yMzYuNnpcIl0sXCJ3b3JkcHJlc3Mtc2ltcGxlXCI6WzUxMiw1MTIsW10sXCJmNDExXCIsXCJNMjU2IDhDMTE5LjMgOCA4IDExOS4yIDggMjU2YzAgMTM2LjcgMTExLjMgMjQ4IDI0OCAyNDhzMjQ4LTExMS4zIDI0OC0yNDhDNTA0IDExOS4yIDM5Mi43IDggMjU2IDh6TTMzIDI1NmMwLTMyLjMgNi45LTYzIDE5LjMtOTAuN2wxMDYuNCAyOTEuNEM4NC4zIDQyMC41IDMzIDM0NC4yIDMzIDI1NnptMjIzIDIyM2MtMjEuOSAwLTQzLTMuMi02My05LjFsNjYuOS0xOTQuNCA2OC41IDE4Ny44Yy41IDEuMSAxIDIuMSAxLjYgMy4xLTIzLjEgOC4xLTQ4IDEyLjYtNzQgMTIuNnptMzAuNy0zMjcuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTIxLjkgMC01OC43LTIuOC01OC43LTIuOC0xMi0uNy0xMy40IDE3LjctMS40IDE4LjQgMCAwIDExLjQgMS40IDIzLjQgMi4xbDM0LjcgOTUuMkwyMDAuNiAzOTNsLTgxLjItMjQxLjVjMTMuNC0uNyAyNS41LTIuMSAyNS41LTIuMSAxMi0xLjQgMTAuNi0xOS4xLTEuNC0xOC40IDAgMC0zNi4xIDIuOC01OS40IDIuOC00LjIgMC05LjEtLjEtMTQuNC0uM0MxMDkuNiA3MyAxNzguMSAzMyAyNTYgMzNjNTggMCAxMTAuOSAyMi4yIDE1MC42IDU4LjUtMS0uMS0xLjktLjItMi45LS4yLTIxLjkgMC0zNy40IDE5LjEtMzcuNCAzOS42IDAgMTguNCAxMC42IDMzLjkgMjEuOSA1Mi4zIDguNSAxNC44IDE4LjQgMzMuOSAxOC40IDYxLjUgMCAxOS4xLTcuMyA0MS4yLTE3IDcyLjFsLTIyLjIgNzQuMy04MC43LTIzOS42em04MS40IDI5Ny4ybDY4LjEtMTk2LjljMTIuNy0zMS44IDE3LTU3LjIgMTctNzkuOSAwLTguMi0uNS0xNS44LTEuNS0yMi45IDE3LjQgMzEuOCAyNy4zIDY4LjIgMjcuMyAxMDcgMCA4Mi4zLTQ0LjYgMTU0LjEtMTEwLjkgMTkyLjd6XCJdLHdwYmVnaW5uZXI6WzUxMiw1MTIsW10sXCJmMjk3XCIsXCJNNDYyLjc5OSAzMjIuMzc0QzUxOS4wMSAzODYuNjgyIDQ2Ni45NjEgNDgwIDM3MC45NDQgNDgwYy0zOS42MDIgMC03OC44MjQtMTcuNjg3LTEwMC4xNDItNTAuMDQtNi44ODcuMzU2LTIyLjcwMi4zNTYtMjkuNTkgMEMyMTkuODQ4IDQ2Mi4zODEgMTgwLjU4OCA0ODAgMTQxLjA2OSA0ODBjLTk1LjQ5IDAtMTQ4LjM0OC05Mi45OTYtOTEuODU1LTE1Ny42MjZDLTI5LjkyNSAxOTAuNTIzIDgwLjQ3OSAzMiAyNTYuMDA2IDMyYzE3NS42MzIgMCAyODUuODcgMTU4LjYyNiAyMDYuNzkzIDI5MC4zNzR6bS0zMzkuNjQ3LTgyLjk3Mmg0MS41Mjl2LTU4LjA3NWgtNDEuNTI5djU4LjA3NXptMjE3LjE4IDg2LjA3MnYtMjMuODM5Yy02MC41MDYgMjAuOTE1LTEzMi4zNTUgOS4xOTgtMTg3LjU4OS0zMy45NzFsLjI0NiAyNC44OTdjNTEuMTAxIDQ2LjM2NyAxMzEuNzQ2IDU3Ljg3NSAxODcuMzQzIDMyLjkxM3ptLTE1MC43NTMtODYuMDcyaDE2Ni4wNTh2LTU4LjA3NUgxODkuNTc5djU4LjA3NXpcIl0sd3BleHBsb3JlcjpbNTEyLDUxMixbXSxcImYyZGVcIixcIk01MTIgMjU2YzAgMTQxLjItMTE0LjcgMjU2LTI1NiAyNTZDMTE0LjggNTEyIDAgMzk3LjMgMCAyNTZTMTE0LjcgMCAyNTYgMHMyNTYgMTE0LjcgMjU2IDI1NnptLTMyIDBjMC0xMjMuMi0xMDAuMy0yMjQtMjI0LTIyNEMxMzIuNSAzMiAzMiAxMzIuNSAzMiAyNTZzMTAwLjUgMjI0IDIyNCAyMjQgMjI0LTEwMC41IDIyNC0yMjR6TTE2MC45IDEyNC42bDg2LjkgMzcuMS0zNy4xIDg2LjktODYuOS0zNy4xIDM3LjEtODYuOXptMTEwIDE2OS4xbDQ2LjYgOTRoLTE0LjZsLTUwLTEwMC00OC45IDEwMGgtMTRsNTEuMS0xMDYuOS0yMi4zLTkuNCA2LTE0IDY4LjYgMjkuMS02IDE0LjMtMTYuNS03LjF6bS0xMS44LTExNi4zbDY4LjYgMjkuNC0yOS40IDY4LjNMMjMwIDI0NmwyOS4xLTY4LjZ6bTgwLjMgNDIuOWw1NC42IDIzLjEtMjMuNCA1NC4zLTU0LjMtMjMuMSAyMy4xLTU0LjN6XCJdLHdwZm9ybXM6WzQ0OCw1MTIsW10sXCJmMjk4XCIsXCJNNDQ4IDc1LjJ2MzYxLjdjMCAyNC4zLTE5IDQzLjItNDMuMiA0My4ySDQzLjJDMTkuMyA0ODAgMCA0NjEuNCAwIDQzNi44Vjc1LjJDMCA1MS4xIDE4LjggMzIgNDMuMiAzMmgzNjEuN2MyNCAwIDQzLjEgMTguOCA0My4xIDQzLjJ6bS0zNy4zIDM2MS42Vjc1LjJjMC0zLTIuNi01LjgtNS44LTUuOGgtOS4zTDI4NS4zIDE0NCAyMjQgOTQuMSAxNjIuOCAxNDQgNTIuNSA2OS4zaC05LjNjLTMuMiAwLTUuOCAyLjgtNS44IDUuOHYzNjEuN2MwIDMgMi42IDUuOCA1LjggNS44aDM2MS43YzMuMi4xIDUuOC0yLjcgNS44LTUuOHpNMTUwLjIgMTg2djM3SDc2Ljd2LTM3aDczLjV6bTAgNzQuNHYzNy4zSDc2Ljd2LTM3LjNoNzMuNXptMTEuMS0xNDcuM2w1NC00My43SDk2LjhsNjQuNSA0My43em0yMTAgNzIuOXYzN2gtMTk2di0zN2gxOTZ6bTAgNzQuNHYzNy4zaC0xOTZ2LTM3LjNoMTk2em0tODQuNi0xNDcuM2w2NC41LTQzLjdIMjMyLjhsNTMuOSA0My43ek0zNzEuMyAzMzV2MzcuM2gtOTkuNFYzMzVoOTkuNHpcIl0seGJveDpbNTEyLDUxMixbXSxcImY0MTJcIixcIk0zNjkuOSAzMTguMmM0NC4zIDU0LjMgNjQuNyA5OC44IDU0LjQgMTE4LjctNy45IDE1LjEtNTYuNyA0NC42LTkyLjYgNTUuOS0yOS42IDkuMy02OC40IDEzLjMtMTAwLjQgMTAuMi0zOC4yLTMuNy03Ni45LTE3LjQtMTEwLjEtMzlDOTMuMyA0NDUuOCA4NyA0MzguMyA4NyA0MjMuNGMwLTI5LjkgMzIuOS04Mi4zIDg5LjItMTQyLjEgMzItMzMuOSA3Ni41LTczLjcgODEuNC03Mi42IDkuNCAyLjEgODQuMyA3NS4xIDExMi4zIDEwOS41ek0xODguNiAxNDMuOGMtMjkuNy0yNi45LTU4LjEtNTMuOS04Ni40LTYzLjQtMTUuMi01LjEtMTYuMy00LjgtMjguNyA4LjEtMjkuMiAzMC40LTUzLjUgNzkuNy02MC4zIDEyMi40LTUuNCAzNC4yLTYuMSA0My44LTQuMiA2MC41IDUuNiA1MC41IDE3LjMgODUuNCA0MC41IDEyMC45IDkuNSAxNC42IDEyLjEgMTcuMyA5LjMgOS45LTQuMi0xMS0uMy0zNy41IDkuNS02NCAxNC4zLTM5IDUzLjktMTEyLjkgMTIwLjMtMTk0LjR6bTMxMS42IDYzLjVDNDgzLjMgMTI3LjMgNDMyLjcgNzcgNDI1LjYgNzdjLTcuMyAwLTI0LjIgNi41LTM2IDEzLjktMjMuMyAxNC41LTQxIDMxLjQtNjQuMyA1Mi44QzM2Ny43IDE5NyA0MjcuNSAyODMuMSA0NDguMiAzNDZjNi44IDIwLjcgOS43IDQxLjEgNy40IDUyLjMtMS43IDguNS0xLjcgOC41IDEuNCA0LjYgNi4xLTcuNyAxOS45LTMxLjMgMjUuNC00My41IDcuNC0xNi4yIDE1LTQwLjIgMTguNi01OC43IDQuMy0yMi41IDMuOS03MC44LS44LTkzLjR6TTE0MS4zIDQzQzE4OSA0MC41IDI1MSA3Ny41IDI1NS42IDc4LjRjLjcuMSAxMC40LTQuMiAyMS42LTkuNyA2My45LTMxLjEgOTQtMjUuOCAxMDcuNC0yNS4yLTYzLjktMzkuMy0xNTIuNy01MC0yMzMuOS0xMS43LTIzLjQgMTEuMS0yNCAxMS45LTkuNCAxMS4yelwiXSx4aW5nOlszODQsNTEyLFtdLFwiZjE2OFwiLFwiTTE2Mi43IDIxMGMtMS44IDMuMy0yNS4yIDQ0LjQtNzAuMSAxMjMuNS00LjkgOC4zLTEwLjggMTIuNS0xNy43IDEyLjVIOS44Yy03LjcgMC0xMi4xLTcuNS04LjUtMTQuNGw2OS0xMjEuM2MuMiAwIC4yLS4xIDAtLjNsLTQzLjktNzUuNmMtNC4zLTcuOC4zLTE0LjEgOC41LTE0LjFIMTAwYzcuMyAwIDEzLjMgNC4xIDE4IDEyLjJsNDQuNyA3Ny41ek0zODIuNiA0Ni4xbC0xNDQgMjUzdi4zTDMzMC4yIDQ2NmMzLjkgNy4xLjIgMTQuMS04LjUgMTQuMWgtNjUuMmMtNy42IDAtMTMuNi00LTE4LTEyLjJsLTkyLjQtMTY4LjVjMy4zLTUuOCA1MS41LTkwLjggMTQ0LjgtMjU1LjIgNC42LTguMSAxMC40LTEyLjIgMTcuNS0xMi4yaDY1LjdjOCAwIDEyLjMgNi43IDguNSAxNC4xelwiXSxcInhpbmctc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMTY5XCIsXCJNNDAwIDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHpNMTQwLjQgMzIwLjJIOTMuOGMtNS41IDAtOC43LTUuMy02LTEwLjNsNDkuMy04Ni43Yy4xIDAgLjEtLjEgMC0uMmwtMzEuNC01NGMtMy01LjYuMi0xMC4xIDYtMTAuMWg0Ni42YzUuMiAwIDkuNSAyLjkgMTIuOSA4LjdsMzEuOSA1NS4zYy0xLjMgMi4zLTE4IDMxLjctNTAuMSA4OC4yLTMuNSA2LjItNy43IDkuMS0xMi42IDkuMXptMjE5LjctMjE0LjFMMjU3LjMgMjg2Ljh2LjJsNjUuNSAxMTljMi44IDUuMS4xIDEwLjEtNiAxMC4xaC00Ni42Yy01LjUgMC05LjctMi45LTEyLjktOC43bC02Ni0xMjAuM2MyLjMtNC4xIDM2LjgtNjQuOSAxMDMuNC0xODIuMyAzLjMtNS44IDcuNC04LjcgMTIuNS04LjdoNDYuOWM1LjctLjEgOC44IDQuNyA2IDEwelwiXSxcInktY29tYmluYXRvclwiOls0NDgsNTEyLFtdLFwiZjIzYlwiLFwiTTQ0OCAzMnY0NDhIMFYzMmg0NDh6TTIzNiAyODcuNUwzMTMuNSAxNDJoLTMyLjdMMjM1IDIzM2MtNC43IDkuMy05IDE4LjMtMTIuOCAyNi44TDIxMCAyMzNsLTQ1LjItOTFoLTM1bDc2LjcgMTQzLjh2OTQuNUgyMzZ2LTkyLjh6XCJdLHlhaG9vOls0NDgsNTEyLFtdLFwiZjE5ZVwiLFwiTTI1MiAyOTJsNCAyMjBjLTEyLjctMi4yLTIzLjUtMy45LTMyLjMtMy45LTguNCAwLTE5LjIgMS43LTMyLjMgMy45bDQtMjIwQzE0MC40IDE5Ny4yIDg1IDk1LjIgMjEuNCAwYzExLjkgMy4xIDIzIDMuOSAzMy4yIDMuOSA5IDAgMjAuNC0uOCAzNC4xLTMuOSA0MC45IDcyLjIgODIuMSAxMzguNyAxMzUgMjI1LjVDMjYxIDE2My45IDMxNC44IDgxLjQgMzU4LjYgMGMxMS4xIDIuOSAyMiAzLjkgMzIuOSAzLjkgMTEuNSAwIDIzLjItMSAzNS0zLjlDMzkyLjEgNDcuOSAyOTQuOSAyMTYuOSAyNTIgMjkyelwiXSx5YW5kZXg6WzI1Niw1MTIsW10sXCJmNDEzXCIsXCJNMTUzLjEgMzE1LjhMNjUuNyA1MTJIMmw5Ni0yMDkuOGMtNDUuMS0yMi45LTc1LjItNjQuNC03NS4yLTE0MS4xQzIyLjcgNTMuNyA5MC44IDAgMTcxLjcgMEgyNTR2NTEyaC01NS4xVjMxNS44aC00NS44em00NS44LTI2OS4zaC0yOS40Yy00NC40IDAtODcuNCAyOS40LTg3LjQgMTE0LjYgMCA4Mi4zIDM5LjQgMTA4LjggODcuNCAxMDguOGgyOS40VjQ2LjV6XCJdLFwieWFuZGV4LWludGVybmF0aW9uYWxcIjpbMzIwLDUxMixbXSxcImY0MTRcIixcIk0xMjkuNSA1MTJWMzQ1LjlMMTguNSA0OGg1NS44bDgxLjggMjI5LjdMMjUwLjIgMGg1MS4zTDE4MC44IDM0Ny44VjUxMmgtNTEuM3pcIl0seWVscDpbMzg0LDUxMixbXSxcImYxZTlcIixcIk0xMzYuOSAzMjhjLTEgLjMtMTA5LjIgMzUuNy0xMTUuOCAzNS43LTE1LjItLjktMTguNS0xNi4yLTE5LjktMzEuMi0xLjUtMTQuMi0xLjQtMjkuOC4zLTQ2LjggMS45LTE4LjggNS41LTQ1LjEgMjQuMi00NCA0LjggMCA2Ny4xIDI1LjkgMTEyLjcgNDQuNCAxNy4xIDYuOCAxOC42IDM1LjgtMS41IDQxLjl6bTU3LjktMTEzLjljMS44IDM4LjItMjUuNSA0OC41LTQ3LjIgMTQuM0w0MS4zIDYwLjRjLTEuNS02LjYuMy0xMi40IDUuMy0xNy40QzYyLjIgMjYuNSAxNDYgMy4yIDE2OC4xIDguOWM3LjUgMS45IDEyLjEgNi4xIDEzLjggMTIuNiAxLjMgOC4zIDExLjUgMTY3LjQgMTIuOSAxOTIuNnptLTEuNCAxNjQuOGMwIDQuNi4yIDExNi40LTEuNyAxMjEuNS0yLjMgNi03IDkuNy0xNC4zIDExLjItMTAuMSAxLjctMjcuMS0xLjktNTEtMTAuNy0yMi04LjEtNTYuNy0yMS41LTQ5LjMtNDIuNSAyLjgtNi45IDUxLjQtNjIuOCA3Ny4zLTkzLjYgMTItMTUuMiAzOS44LTUuNSAzOSAxNC4xem0xODAuMi0xMTcuOGMtNS42IDMuNy0xMTAuOCAyOC4yLTExOC4xIDMwLjZsLjMtLjZjLTE4LjEgNC43LTM1LjQtMTguNS0yMy4zLTM0LjYgMy43LTMuNyA2NS45LTkyLjQgNzIuOC05NyA1LjItMy42IDExLjMtMy44IDE4LjMtLjYgMTguNCA4LjggNTUuMSA2My4xIDU3LjQgODQuNi0uMSAyLjkgMS4yIDExLjctNy40IDE3LjZ6bTEwLjEgMTMwLjdjLTIuNyAyMC42LTQ0LjUgNzMuNC02My44IDgxLTYuOSAyLjYtMTIuOSAyLTE3LjctMi01LTMuNS02MS44LTk3LjEtNjQuOS0xMDIuMy0xMC45LTE2LjIgNi44LTM5LjggMjUuNi0zMy4yIDAgMCAxMTAuNSAzNS43IDExNC43IDM5LjQgNS4yIDQuMSA3LjIgOS44IDYuMSAxNy4xelwiXSx5b2FzdDpbNDQ4LDUxMixbXSxcImYyYjFcIixcIk05MS4zIDc2aDE4NmwtNyAxOC45aC0xNzljLTM5LjcgMC03MS45IDMxLjYtNzEuOSA3MC4zdjIwNS40YzAgMzUuNCAyNC45IDcwLjMgODQgNzAuM1Y0NjBIOTEuM0M0MS4yIDQ2MCAwIDQxOS44IDAgMzcwLjVWMTY1LjJDMCAxMTUuOSA0MC43IDc2IDkxLjMgNzZ6bTIyOS4xLTU2aDY2LjVDMjQzLjEgMzk4LjEgMjQxLjIgNDE4LjkgMjAyLjIgNDU5LjNjLTIwLjggMjEuNi00OS4zIDMxLjctNzguMyAzMi43di01MS4xYzQ5LjItNy43IDY0LjYtNDkuOSA2NC42LTc1LjMgMC0yMC4xLjYtMTIuNi04Mi4xLTIyMy4yaDYxLjRMMjE4LjIgMjk5IDMyMC40IDIwek00NDggMTYxLjVWNDYwSDIzNGM2LjYtOS42IDEwLjctMTYuMyAxMi4xLTE5LjRoMTgyLjVWMTYxLjVjMC0zMi41LTE3LjEtNTEuOS00OC4yLTYyLjlsNi43LTE3LjZjNDEuNyAxMy42IDYwLjkgNDMuMSA2MC45IDgwLjV6XCJdLHlvdXR1YmU6WzU3Niw1MTIsW10sXCJmMTY3XCIsXCJNNTQ5LjY1NSAxMjQuMDgzYy02LjI4MS0yMy42NS0yNC43ODctNDIuMjc2LTQ4LjI4NC00OC41OTdDNDU4Ljc4MSA2NCAyODggNjQgMjg4IDY0UzExNy4yMiA2NCA3NC42MjkgNzUuNDg2Yy0yMy40OTcgNi4zMjItNDIuMDAzIDI0Ljk0Ny00OC4yODQgNDguNTk3LTExLjQxMiA0Mi44NjctMTEuNDEyIDEzMi4zMDUtMTEuNDEyIDEzMi4zMDVzMCA4OS40MzggMTEuNDEyIDEzMi4zMDVjNi4yODEgMjMuNjUgMjQuNzg3IDQxLjUgNDguMjg0IDQ3LjgyMUMxMTcuMjIgNDQ4IDI4OCA0NDggMjg4IDQ0OHMxNzAuNzggMCAyMTMuMzcxLTExLjQ4NmMyMy40OTctNi4zMjEgNDIuMDAzLTI0LjE3MSA0OC4yODQtNDcuODIxIDExLjQxMi00Mi44NjcgMTEuNDEyLTEzMi4zMDUgMTEuNDEyLTEzMi4zMDVzMC04OS40MzgtMTEuNDEyLTEzMi4zMDV6bS0zMTcuNTEgMjEzLjUwOFYxNzUuMTg1bDE0Mi43MzkgODEuMjA1LTE0Mi43MzkgODEuMjAxelwiXSxcInlvdXR1YmUtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmNDMxXCIsXCJNMTg2LjggMjAyLjFsOTUuMiA1NC4xLTk1LjIgNTQuMVYyMDIuMXpNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tNDIgMTc2LjNzMC01OS42LTcuNi04OC4yYy00LjItMTUuOC0xNi41LTI4LjItMzIuMi0zMi40QzMzNy45IDEyOCAyMjQgMTI4IDIyNCAxMjhzLTExMy45IDAtMTQyLjIgNy43Yy0xNS43IDQuMi0yOCAxNi42LTMyLjIgMzIuNC03LjYgMjguNS03LjYgODguMi03LjYgODguMnMwIDU5LjYgNy42IDg4LjJjNC4yIDE1LjggMTYuNSAyNy43IDMyLjIgMzEuOUMxMTAuMSAzODQgMjI0IDM4NCAyMjQgMzg0czExMy45IDAgMTQyLjItNy43YzE1LjctNC4yIDI4LTE2LjEgMzIuMi0zMS45IDcuNi0yOC41IDcuNi04OC4xIDcuNi04OC4xelwiXX07IWZ1bmN0aW9uKGMpe3RyeXtjKCl9Y2F0Y2goYyl7aWYoIW0pdGhyb3cgY319KGZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGMobCx6KXt2YXIgaD1PYmplY3Qua2V5cyh6KS5yZWR1Y2UoZnVuY3Rpb24oYyxsKXt2YXIgaD16W2xdO3JldHVybiBoLmljb24/Y1toLmljb25OYW1lXT1oLmljb246Y1tsXT1oLGN9LHt9KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmhvb2tzLmFkZFBhY2s/dC5ob29rcy5hZGRQYWNrKGwsaCk6dC5zdHlsZXNbbF09TSh7fSx0LnN0eWxlc1tsXXx8e30saCksXCJmYXNcIj09PWwmJmMoXCJmYVwiLHopfShcImZhYlwiLGYpfSl9KCksZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYz17fTt0cnl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKGM9d2luZG93KX1jYXRjaChjKXt9dmFyIGw9KGMubmF2aWdhdG9yfHx7fSkudXNlckFnZW50LGg9dm9pZCAwPT09bD9cIlwiOmwsej1jLHY9KH5oLmluZGV4T2YoXCJNU0lFXCIpfHxoLmluZGV4T2YoXCJUcmlkZW50L1wiKSxcIl9fX0ZPTlRfQVdFU09NRV9fX1wiKSxtPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiEwfWNhdGNoKGMpe3JldHVybiExfX0oKSxzPVsxLDIsMyw0LDUsNiw3LDgsOSwxMF0sZT1zLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKTtbXCJ4c1wiLFwic21cIixcImxnXCIsXCJmd1wiLFwidWxcIixcImxpXCIsXCJib3JkZXJcIixcInB1bGwtbGVmdFwiLFwicHVsbC1yaWdodFwiLFwic3BpblwiLFwicHVsc2VcIixcInJvdGF0ZS05MFwiLFwicm90YXRlLTE4MFwiLFwicm90YXRlLTI3MFwiLFwiZmxpcC1ob3Jpem9udGFsXCIsXCJmbGlwLXZlcnRpY2FsXCIsXCJzdGFja1wiLFwic3RhY2stMXhcIixcInN0YWNrLTJ4XCIsXCJpbnZlcnNlXCIsXCJsYXllcnNcIixcImxheWVycy10ZXh0XCIsXCJsYXllcnMtY291bnRlclwiXS5jb25jYXQocy5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMrXCJ4XCJ9KSkuY29uY2F0KGUubWFwKGZ1bmN0aW9uKGMpe3JldHVyblwidy1cIitjfSkpO3ZhciBhPXp8fHt9O2Fbdl18fChhW3ZdPXt9KSxhW3ZdLnN0eWxlc3x8KGFbdl0uc3R5bGVzPXt9KSxhW3ZdLmhvb2tzfHwoYVt2XS5ob29rcz17fSksYVt2XS5zaGltc3x8KGFbdl0uc2hpbXM9W10pO3ZhciB0PWFbdl0sTT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihjKXtmb3IodmFyIGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXt2YXIgaD1hcmd1bWVudHNbbF07Zm9yKHZhciB6IGluIGgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgseikmJihjW3pdPWhbel0pfXJldHVybiBjfTt2YXIgZj17XCJhZGRyZXNzLWJvb2tcIjpbNDQ4LDUxMixbXSxcImYyYjlcIixcIk00MzYgMTYwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC0yMFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OEMyMS41IDAgMCAyMS41IDAgNDh2NDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDMyMGMyNi41IDAgNDgtMjEuNSA0OC00OHYtNDhoMjBjNi42IDAgMTItNS40IDEyLTEydi00MGMwLTYuNi01LjQtMTItMTItMTJoLTIwdi02NGgyMGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtMjB2LTY0aDIwem0tNjggMzA0SDQ4VjQ4aDMyMHY0MTZ6TTIwOCAyNTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjQtNjQgMjguNy02NCA2NCAyOC43IDY0IDY0IDY0em0tODkuNiAxMjhoMTc5LjJjMTIuNCAwIDIyLjQtOC42IDIyLjQtMTkuMnYtMTkuMmMwLTMxLjgtMzAuMS01Ny42LTY3LjItNTcuNi0xMC44IDAtMTguNyA4LTQ0LjggOC0yNi45IDAtMzMuNC04LTQ0LjgtOC0zNy4xIDAtNjcuMiAyNS44LTY3LjIgNTcuNnYxOS4yYzAgMTAuNiAxMCAxOS4yIDIyLjQgMTkuMnpcIl0sXCJhZGRyZXNzLWNhcmRcIjpbNTc2LDUxMixbXSxcImYyYmJcIixcIk01MjggMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoNDgwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0wIDQwMEg0OFY4MGg0ODB2MzUyek0yMDggMjU2YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjQgMjguNyA2NCA2NCA2NHptLTg5LjYgMTI4aDE3OS4yYzEyLjQgMCAyMi40LTguNiAyMi40LTE5LjJ2LTE5LjJjMC0zMS44LTMwLjEtNTcuNi02Ny4yLTU3LjYtMTAuOCAwLTE4LjcgOC00NC44IDgtMjYuOSAwLTMzLjQtOC00NC44LTgtMzcuMSAwLTY3LjIgMjUuOC02Ny4yIDU3LjZ2MTkuMmMwIDEwLjYgMTAgMTkuMiAyMi40IDE5LjJ6TTM2MCAzMjBoMTEyYzQuNCAwIDgtMy42IDgtOHYtMTZjMC00LjQtMy42LTgtOC04SDM2MGMtNC40IDAtOCAzLjYtOCA4djE2YzAgNC40IDMuNiA4IDggOHptMC02NGgxMTJjNC40IDAgOC0zLjYgOC04di0xNmMwLTQuNC0zLjYtOC04LThIMzYwYy00LjQgMC04IDMuNi04IDh2MTZjMCA0LjQgMy42IDggOCA4em0wLTY0aDExMmM0LjQgMCA4LTMuNiA4LTh2LTE2YzAtNC40LTMuNi04LTgtOEgzNjBjLTQuNCAwLTggMy42LTggOHYxNmMwIDQuNCAzLjYgOCA4IDh6XCJdLGFuZ3J5Ols0OTYsNTEyLFtdLFwiZjU1NlwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy0xMTAuMyAwLTIwMC04OS43LTIwMC0yMDBTMTM3LjcgNTYgMjQ4IDU2czIwMCA4OS43IDIwMCAyMDAtODkuNyAyMDAtMjAwIDIwMHptMC0xNDRjLTMzLjYgMC02NS4yIDE0LjgtODYuOCA0MC42LTguNSAxMC4yLTcuMSAyNS4zIDMuMSAzMy44czI1LjMgNy4yIDMzLjgtM2MyNC44LTI5LjcgNzUtMjkuNyA5OS44IDAgOC4xIDkuNyAyMy4yIDExLjkgMzMuOCAzIDEwLjItOC41IDExLjUtMjMuNiAzLjEtMzMuOC0yMS42LTI1LjgtNTMuMi00MC42LTg2LjgtNDAuNnptLTQ4LTcyYzEwLjMgMCAxOS45LTYuNyAyMy0xNy4xIDMuOC0xMi43LTMuNC0yNi4xLTE2LjEtMjkuOWwtODAtMjRjLTEyLjgtMy45LTI2LjEgMy40LTI5LjkgMTYuMS0zLjggMTIuNyAzLjQgMjYuMSAxNi4xIDI5LjlsMjguMiA4LjVjLTMuMSA0LjktNS4zIDEwLjQtNS4zIDE2LjYgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuNCAzMi0zMi4xem0xOTktNTQuOWMtMy44LTEyLjctMTcuMS0xOS45LTI5LjktMTYuMWwtODAgMjRjLTEyLjcgMy44LTE5LjkgMTcuMi0xNi4xIDI5LjkgMy4xIDEwLjQgMTIuNyAxNy4xIDIzIDE3LjEgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuMi0yLjItMTEuNy01LjMtMTYuNmwyOC4yLTguNWMxMi43LTMuNyAxOS45LTE3LjEgMTYuMS0yOS44elwiXSxcImFycm93LWFsdC1jaXJjbGUtZG93blwiOls1MTIsNTEyLFtdLFwiZjM1OFwiLFwiTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bTAgNDQ4Yy0xMTAuNSAwLTIwMC04OS41LTIwMC0yMDBTMTQ1LjUgNTYgMjU2IDU2czIwMCA4OS41IDIwMCAyMDAtODkuNSAyMDAtMjAwIDIwMHptLTMyLTMxNnYxMTZoLTY3Yy0xMC43IDAtMTYgMTIuOS04LjUgMjAuNWw5OSA5OWM0LjcgNC43IDEyLjMgNC43IDE3IDBsOTktOTljNy42LTcuNiAyLjItMjAuNS04LjUtMjAuNWgtNjdWMTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnpcIl0sXCJhcnJvdy1hbHQtY2lyY2xlLWxlZnRcIjpbNTEyLDUxMixbXSxcImYzNTlcIixcIk04IDI1NmMwIDEzNyAxMTEgMjQ4IDI0OCAyNDhzMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4IDggMTE5IDggMjU2em00NDggMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTNTYgMzY2LjUgNTYgMjU2IDE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwem0tNzItMjB2NDBjMCA2LjYtNS40IDEyLTEyIDEySDI1NnY2N2MwIDEwLjctMTIuOSAxNi0yMC41IDguNWwtOTktOTljLTQuNy00LjctNC43LTEyLjMgMC0xN2w5OS05OWM3LjYtNy42IDIwLjUtMi4yIDIwLjUgOC41djY3aDExNmM2LjYgMCAxMiA1LjQgMTIgMTJ6XCJdLFwiYXJyb3ctYWx0LWNpcmNsZS1yaWdodFwiOls1MTIsNTEyLFtdLFwiZjM1YVwiLFwiTTUwNCAyNTZDNTA0IDExOSAzOTMgOCAyNTYgOFM4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4em0tNDQ4IDBjMC0xMTAuNSA4OS41LTIwMCAyMDAtMjAwczIwMCA4OS41IDIwMCAyMDAtODkuNSAyMDAtMjAwIDIwMFM1NiAzNjYuNSA1NiAyNTZ6bTcyIDIwdi00MGMwLTYuNiA1LjQtMTIgMTItMTJoMTE2di02N2MwLTEwLjcgMTIuOS0xNiAyMC41LTguNWw5OSA5OWM0LjcgNC43IDQuNyAxMi4zIDAgMTdsLTk5IDk5Yy03LjYgNy42LTIwLjUgMi4yLTIwLjUtOC41di02N0gxNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnpcIl0sXCJhcnJvdy1hbHQtY2lyY2xlLXVwXCI6WzUxMiw1MTIsW10sXCJmMzViXCIsXCJNMjU2IDUwNGMxMzcgMCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4em0wLTQ0OGMxMTAuNSAwIDIwMCA4OS41IDIwMCAyMDBzLTg5LjUgMjAwLTIwMCAyMDBTNTYgMzY2LjUgNTYgMjU2IDE0NS41IDU2IDI1NiA1NnptMjAgMzI4aC00MGMtNi42IDAtMTItNS40LTEyLTEyVjI1NmgtNjdjLTEwLjcgMC0xNi0xMi45LTguNS0yMC41bDk5LTk5YzQuNy00LjcgMTIuMy00LjcgMTcgMGw5OSA5OWM3LjYgNy42IDIuMiAyMC41LTguNSAyMC41aC02N3YxMTZjMCA2LjYtNS40IDEyLTEyIDEyelwiXSxiZWxsOls0NDgsNTEyLFtdLFwiZjBmM1wiLFwiTTQyNS40MDMgMzMwLjkzOWMtMTYuOTg5LTE2Ljc4NS0zNC41NDYtMzQuMTQzLTM0LjU0Ni0xMTYuMDgzIDAtODMuMDI2LTYwLjk1OC0xNTIuMDc0LTE0MC40NjctMTY0Ljc2MkEzMS44NDMgMzEuODQzIDAgMCAwIDI1NiAzMmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJzLTMyIDE0LjMyNy0zMiAzMmEzMS44NDggMzEuODQ4IDAgMCAwIDUuNjA5IDE4LjA5NUMxMTguMTAxIDYyLjc4MyA1Ny4xNDMgMTMxLjgzMSA1Ny4xNDMgMjE0Ljg1N2MwIDgxLjkzMy0xNy41NTEgOTkuMjkyLTM0LjU0MyAxMTYuMDc4Qy0yNS40OTYgMzc4LjQ0MSA5LjcyNiA0NDggNjYuOTE5IDQ0OEgxNjBjMCAzNS4zNDYgMjguNjU0IDY0IDY0IDY0IDM1LjM0NiAwIDY0LTI4LjY1NCA2NC02NGg5My4wOGM1Ny4xOSAwIDkyLjQxNS02OS41ODMgNDQuMzIzLTExNy4wNjF6TTIyNCA0NzJjLTEzLjIzNCAwLTI0LTEwLjc2Ni0yNC0yNGg0OGMwIDEzLjIzNC0xMC43NjYgMjQtMjQgMjR6bTE1Ny4wOTItNzJINjYuOWMtMTYuNzYyIDAtMjUuMTM1LTIwLjM5LTEzLjMzNC0zMi4xOTEgMjguNTg1LTI4LjU4NSA1MS41NzctNTUuNzI0IDUxLjU3Ny0xNTIuOTUyQzEwNS4xNDMgMTQ5LjMxOSAxNTguNDYyIDk2IDIyNCA5NnMxMTguODU3IDUzLjMxOSAxMTguODU3IDExOC44NTdjMCA5Ny42NSAyMy4yMjEgMTI0LjU3NCA1MS41NjggMTUyLjk1MkM0MDYuMjc4IDM3OS42NjEgMzk3Ljc4MyA0MDAgMzgxLjA5MiA0MDB6XCJdLFwiYmVsbC1zbGFzaFwiOls1NzYsNTEyLFtdLFwiZjFmNlwiLFwiTTEzMC45IDQwMGMtMTYuNzYyIDAtMjUuMTM1LTIwLjM5LTEzLjMzNC0zMi4xOTEgMjUuMjI2LTI1LjIyNiA0Ni4wOTQtNDkuMzM4IDUwLjY0OS0xMjEuNDhsLTQ2Ljc3Ny00MS4yNzRhMTY4LjQ4IDE2OC40OCAwIDAgMC0uMjk2IDkuODAyYzAgODEuOTMzLTE3LjU1MSA5OS4yOTItMzQuNTQzIDExNi4wNzhDMzguNTA0IDM3OC40NDEgNzMuNzI2IDQ0OCAxMzAuOTE5IDQ0OEgyMjRjMCAzNS4zNDYgMjguNjU0IDY0IDY0IDY0czY0LTI4LjY1NCA2NC02NGg0NC43NzdsLTU0LjQtNDhIMTMwLjl6TTI4OCA0NzJjLTEzLjIzNCAwLTI0LTEwLjc2Ni0yNC0yNGg0OGMwIDEzLjIzNC0xMC43NjYgMjQtMjQgMjR6bTI4My44NjcuNTUzbC02Ny45MzEtNTkuNTcxYzEzLjEwNC0yNC4xMTggMTEuNTI0LTU2LjMxOC0xNC41MzItODIuMDQyLTE2Ljk4OS0xNi43ODUtMzQuNTQ2LTM0LjE0My0zNC41NDYtMTE2LjA4MyAwLTgzLjAyNi02MC45NTgtMTUyLjA3NC0xNDAuNDY3LTE2NC43NjJBMzEuODQ4IDMxLjg0OCAwIDAgMCAzMjAgMzJjMC0xNy42NzMtMTQuMzI3LTMyLTMyLTMycy0zMiAxNC4zMjctMzIgMzJhMzEuODQ4IDMxLjg0OCAwIDAgMCA1LjYwOSAxOC4wOTVjLTQxLjQ3MSA2LjYxOC03Ny44OTEgMjguNTcxLTEwMy4yNDkgNTkuODQxTDM2LjQ1OSAzLjAzN2MtNS4wNTgtNC40MzYtMTIuNzc3LTMuOTU2LTE3LjI0IDEuMDcxTDMuMDU2IDIyLjMxM0MtMS40MDcgMjcuMzQtLjkyNSAzNS4wMTIgNC4xMzQgMzkuNDQ3bDUzNS40MDggNDY5LjUxNmM1LjA1OCA0LjQzNiAxMi43NzcgMy45NTYgMTcuMjQtMS4wNzFsMTYuMTYzLTE4LjIwNWM0LjQ2Mi01LjAyNyAzLjk4LTEyLjY5OS0xLjA3OC0xNy4xMzR6TTI4OCA5NmM2NS41MzggMCAxMTguODU3IDUzLjMxOSAxMTguODU3IDExOC44NTcgMCA5Ny42NSAyMy4yMjEgMTI0LjU3NCA1MS41NjggMTUyLjk1MiAyLjkwOCAyLjkwOCA0LjU3MyA2LjMyOCA1LjIwOSA5LjgzMkwxOTQuNDgyIDE0MS42MTJDMjE2LjI1OCAxMTMuODY3IDI1MC4wNzUgOTYgMjg4IDk2elwiXSxib29rbWFyazpbMzg0LDUxMixbXSxcImYwMmVcIixcIk0zMzYgMEg0OEMyMS40OSAwIDAgMjEuNDkgMCA0OHY0NjRsMTkyLTExMiAxOTIgMTEyVjQ4YzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bTAgNDI4LjQzbC0xNDQtODQtMTQ0IDg0VjU0YTYgNiAwIDAgMSA2LTZoMjc2YzMuMzE0IDAgNiAyLjY4MyA2IDUuOTk2VjQyOC40M3pcIl0sYnVpbGRpbmc6WzQ0OCw1MTIsW10sXCJmMWFkXCIsXCJNMTI4IDE0OHYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ6bTE0MCAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJ6bS0xMjggOTZoNDBjNi42IDAgMTItNS40IDEyLTEydi00MGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyem0xMjggMGg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJ6bS03NiA4NHYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6bTc2IDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMnptMTgwIDEyNHYzNkgwdi0zNmMwLTYuNiA1LjQtMTIgMTItMTJoMTkuNVYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGgzMzdjMTMuMyAwIDI0IDEwLjcgMjQgMjR2NDQwSDQzNmM2LjYgMCAxMiA1LjQgMTIgMTJ6TTc5LjUgNDYzSDE5MnYtNjdjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY2N2gxMTIuNVY0OUw4MCA0OGwtLjUgNDE1elwiXSxjYWxlbmRhcjpbNDQ4LDUxMixbXSxcImYxMzNcIixcIk00MDAgNjRoLTQ4VjEyYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY1MkgxNjBWMTJjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjUySDQ4QzIxLjUgNjQgMCA4NS41IDAgMTEydjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tNiA0MDBINTRjLTMuMyAwLTYtMi43LTYtNlYxNjBoMzUydjI5OGMwIDMuMy0yLjcgNi02IDZ6XCJdLFwiY2FsZW5kYXItYWx0XCI6WzQ0OCw1MTIsW10sXCJmMDczXCIsXCJNMTQ4IDI4OGgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJ6bTEwOC0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6bTk2IDB2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEyem0tOTYgOTZ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEyem0tOTYgMHYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6bTE5MiAwdi00MGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnptOTYtMjYwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDQ4VjEyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoMTI4VjEyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh6bS00OCAzNDZWMTYwSDQ4djI5OGMwIDMuMyAyLjcgNiA2IDZoMzQwYzMuMyAwIDYtMi43IDYtNnpcIl0sXCJjYWxlbmRhci1jaGVja1wiOls0NDgsNTEyLFtdLFwiZjI3NFwiLFwiTTQwMCA2NGgtNDhWMTJjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NTJIMTYwVjEyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjUySDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2MzUyYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMzUyYzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTEyYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bS02IDQwMEg1NGE2IDYgMCAwIDEtNi02VjE2MGgzNTJ2Mjk4YTYgNiAwIDAgMS02IDZ6bS01Mi44NDktMjAwLjY1TDE5OC44NDIgNDA0LjUxOWMtNC43MDUgNC42NjctMTIuMzAzIDQuNjM3LTE2Ljk3MS0uMDY4bC03NS4wOTEtNzUuNjk5Yy00LjY2Ny00LjcwNS00LjYzNy0xMi4zMDMuMDY4LTE2Ljk3MWwyMi43MTktMjIuNTM2YzQuNzA1LTQuNjY3IDEyLjMwMy00LjYzNyAxNi45Ny4wNjlsNDQuMTA0IDQ0LjQ2MSAxMTEuMDcyLTExMC4xODFjNC43MDUtNC42NjcgMTIuMzAzLTQuNjM3IDE2Ljk3MS4wNjhsMjIuNTM2IDIyLjcxOGM0LjY2NyA0LjcwNSA0LjYzNiAxMi4zMDMtLjA2OSAxNi45N3pcIl0sXCJjYWxlbmRhci1taW51c1wiOls0NDgsNTEyLFtdLFwiZjI3MlwiLFwiTTEyNCAzMjhjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMjRjMC02LjYgNS40LTEyIDEyLTEyaDIwMGM2LjYgMCAxMiA1LjQgMTIgMTJ2MjRjMCA2LjYtNS40IDEyLTEyIDEySDEyNHptMzI0LTIxNnYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjExMmMwLTI2LjUgMjEuNS00OCA0OC00OGg0OFYxMmMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjUyaDEyOFYxMmMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjUyaDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tNDggMzQ2VjE2MEg0OHYyOThjMCAzLjMgMi43IDYgNiA2aDM0MGMzLjMgMCA2LTIuNyA2LTZ6XCJdLFwiY2FsZW5kYXItcGx1c1wiOls0NDgsNTEyLFtdLFwiZjI3MVwiLFwiTTMzNiAyOTJ2MjRjMCA2LjYtNS40IDEyLTEyIDEyaC03NnY3NmMwIDYuNi01LjQgMTItMTIgMTJoLTI0Yy02LjYgMC0xMi01LjQtMTItMTJ2LTc2aC03NmMtNi42IDAtMTItNS40LTEyLTEydi0yNGMwLTYuNiA1LjQtMTIgMTItMTJoNzZ2LTc2YzAtNi42IDUuNC0xMiAxMi0xMmgyNGM2LjYgMCAxMiA1LjQgMTIgMTJ2NzZoNzZjNi42IDAgMTIgNS40IDEyIDEyem0xMTItMTgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDQ4VjEyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoMTI4VjEyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh6bS00OCAzNDZWMTYwSDQ4djI5OGMwIDMuMyAyLjcgNiA2IDZoMzQwYzMuMyAwIDYtMi43IDYtNnpcIl0sXCJjYWxlbmRhci10aW1lc1wiOls0NDgsNTEyLFtdLFwiZjI3M1wiLFwiTTMxMS43IDM3NC43bC0xNyAxN2MtNC43IDQuNy0xMi4zIDQuNy0xNyAwTDIyNCAzMzcuOWwtNTMuNyA1My43Yy00LjcgNC43LTEyLjMgNC43LTE3IDBsLTE3LTE3Yy00LjctNC43LTQuNy0xMi4zIDAtMTdsNTMuNy01My43LTUzLjctNTMuN2MtNC43LTQuNy00LjctMTIuMyAwLTE3bDE3LTE3YzQuNy00LjcgMTIuMy00LjcgMTcgMGw1My43IDUzLjcgNTMuNy01My43YzQuNy00LjcgMTIuMy00LjcgMTcgMGwxNyAxN2M0LjcgNC43IDQuNyAxMi4zIDAgMTdMMjU3LjkgMzA0bDUzLjcgNTMuN2M0LjggNC43IDQuOCAxMi4zLjEgMTd6TTQ0OCAxMTJ2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhoNDhWMTJjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY1MmgxMjhWMTJjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY1Mmg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHptLTQ4IDM0NlYxNjBINDh2Mjk4YzAgMy4zIDIuNyA2IDYgNmgzNDBjMy4zIDAgNi0yLjcgNi02elwiXSxcImNhcmV0LXNxdWFyZS1kb3duXCI6WzQ0OCw1MTIsW10sXCJmMTUwXCIsXCJNMTI1LjEgMjA4aDE5Ny44YzEwLjcgMCAxNi4xIDEzIDguNSAyMC41bC05OC45IDk4LjNjLTQuNyA0LjctMTIuMiA0LjctMTYuOSAwbC05OC45LTk4LjNjLTcuNy03LjUtMi4zLTIwLjUgOC40LTIwLjV6TTQ0OCA4MHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHptLTQ4IDM0NlY4NmMwLTMuMy0yLjctNi02LTZINTRjLTMuMyAwLTYgMi43LTYgNnYzNDBjMCAzLjMgMi43IDYgNiA2aDM0MGMzLjMgMCA2LTIuNyA2LTZ6XCJdLFwiY2FyZXQtc3F1YXJlLWxlZnRcIjpbNDQ4LDUxMixbXSxcImYxOTFcIixcIk0yNzIgMTU3LjF2MTk3LjhjMCAxMC43LTEzIDE2LjEtMjAuNSA4LjVsLTk4LjMtOTguOWMtNC43LTQuNy00LjctMTIuMiAwLTE2LjlsOTguMy05OC45YzcuNS03LjcgMjAuNS0yLjMgMjAuNSA4LjR6TTQ0OCA4MHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHptLTQ4IDM0NlY4NmMwLTMuMy0yLjctNi02LTZINTRjLTMuMyAwLTYgMi43LTYgNnYzNDBjMCAzLjMgMi43IDYgNiA2aDM0MGMzLjMgMCA2LTIuNyA2LTZ6XCJdLFwiY2FyZXQtc3F1YXJlLXJpZ2h0XCI6WzQ0OCw1MTIsW10sXCJmMTUyXCIsXCJNMTc2IDM1NC45VjE1Ny4xYzAtMTAuNyAxMy0xNi4xIDIwLjUtOC41bDk4LjMgOTguOWM0LjcgNC43IDQuNyAxMi4yIDAgMTYuOWwtOTguMyA5OC45Yy03LjUgNy43LTIwLjUgMi4zLTIwLjUtOC40ek00NDggODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGgzNTJjMjYuNSAwIDQ4IDIxLjUgNDggNDh6bS00OCAzNDZWODZjMC0zLjMtMi43LTYtNi02SDU0Yy0zLjMgMC02IDIuNy02IDZ2MzQwYzAgMy4zIDIuNyA2IDYgNmgzNDBjMy4zIDAgNi0yLjcgNi02elwiXSxcImNhcmV0LXNxdWFyZS11cFwiOls0NDgsNTEyLFtdLFwiZjE1MVwiLFwiTTMyMi45IDMwNEgxMjUuMWMtMTAuNyAwLTE2LjEtMTMtOC41LTIwLjVsOTguOS05OC4zYzQuNy00LjcgMTIuMi00LjcgMTYuOSAwbDk4LjkgOTguM2M3LjcgNy41IDIuMyAyMC41LTguNCAyMC41ek00NDggODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGgzNTJjMjYuNSAwIDQ4IDIxLjUgNDggNDh6bS00OCAzNDZWODZjMC0zLjMtMi43LTYtNi02SDU0Yy0zLjMgMC02IDIuNy02IDZ2MzQwYzAgMy4zIDIuNyA2IDYgNmgzNDBjMy4zIDAgNi0yLjcgNi02elwiXSxcImNoYXJ0LWJhclwiOls1MTIsNTEyLFtdLFwiZjA4MFwiLFwiTTUwMCA0MDBjNi42IDAgMTIgNS40IDEyIDEydjI0YzAgNi42LTUuNCAxMi0xMiAxMkgxMmMtNi42IDAtMTItNS40LTEyLTEyVjc2YzAtNi42IDUuNC0xMiAxMi0xMmgyNGM2LjYgMCAxMiA1LjQgMTIgMTJ2MzI0aDQ1MnptLTM1Ni02MHYtNzJjMC02LjYtNS40LTEyLTEyLTEyaC0yNGMtNi42IDAtMTIgNS40LTEyIDEydjcyYzAgNi42IDUuNCAxMiAxMiAxMmgyNGM2LjYgMCAxMi01LjQgMTItMTJ6bTk2IDBWMTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtMjRjLTYuNiAwLTEyIDUuNC0xMiAxMnYyMDBjMCA2LjYgNS40IDEyIDEyIDEyaDI0YzYuNiAwIDEyLTUuNCAxMi0xMnptOTYgMFYyMDRjMC02LjYtNS40LTEyLTEyLTEyaC0yNGMtNi42IDAtMTIgNS40LTEyIDEydjEzNmMwIDYuNiA1LjQgMTIgMTIgMTJoMjRjNi42IDAgMTItNS40IDEyLTEyem05NiAwVjEwOGMwLTYuNi01LjQtMTItMTItMTJoLTI0Yy02LjYgMC0xMiA1LjQtMTIgMTJ2MjMyYzAgNi42IDUuNCAxMiAxMiAxMmgyNGM2LjYgMCAxMi01LjQgMTItMTJ6XCJdLFwiY2hlY2stY2lyY2xlXCI6WzUxMiw1MTIsW10sXCJmMDU4XCIsXCJNMjU2IDhDMTE5LjAzMyA4IDggMTE5LjAzMyA4IDI1NnMxMTEuMDMzIDI0OCAyNDggMjQ4IDI0OC0xMTEuMDMzIDI0OC0yNDhTMzkyLjk2NyA4IDI1NiA4em0wIDQ4YzExMC41MzIgMCAyMDAgODkuNDUxIDIwMCAyMDAgMCAxMTAuNTMyLTg5LjQ1MSAyMDAtMjAwIDIwMC0xMTAuNTMyIDAtMjAwLTg5LjQ1MS0yMDAtMjAwIDAtMTEwLjUzMiA4OS40NTEtMjAwIDIwMC0yMDBtMTQwLjIwNCAxMzAuMjY3bC0yMi41MzYtMjIuNzE4Yy00LjY2Ny00LjcwNS0xMi4yNjUtNC43MzYtMTYuOTctLjA2OEwyMTUuMzQ2IDMwMy42OTdsLTU5Ljc5Mi02MC4yNzdjLTQuNjY3LTQuNzA1LTEyLjI2NS00LjczNi0xNi45Ny0uMDY5bC0yMi43MTkgMjIuNTM2Yy00LjcwNSA0LjY2Ny00LjczNiAxMi4yNjUtLjA2OCAxNi45NzFsOTAuNzgxIDkxLjUxNmM0LjY2NyA0LjcwNSAxMi4yNjUgNC43MzYgMTYuOTcuMDY4bDE3Mi41ODktMTcxLjIwNGM0LjcwNC00LjY2OCA0LjczNC0xMi4yNjYuMDY3LTE2Ljk3MXpcIl0sXCJjaGVjay1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYxNGFcIixcIk00MDAgMzJINDhDMjEuNDkgMzIgMCA1My40OSAwIDgwdjM1MmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDM1MmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bTAgNDAwSDQ4VjgwaDM1MnYzNTJ6bS0zNS44NjQtMjQxLjcyNEwxOTEuNTQ3IDM2MS40OGMtNC43MDUgNC42NjctMTIuMzAzIDQuNjM3LTE2Ljk3LS4wNjhsLTkwLjc4MS05MS41MTZjLTQuNjY3LTQuNzA1LTQuNjM3LTEyLjMwMy4wNjktMTYuOTcxbDIyLjcxOS0yMi41MzZjNC43MDUtNC42NjcgMTIuMzAzLTQuNjM3IDE2Ljk3LjA2OWw1OS43OTIgNjAuMjc3IDE0MS4zNTItMTQwLjIxNmM0LjcwNS00LjY2NyAxMi4zMDMtNC42MzcgMTYuOTcuMDY4bDIyLjUzNiAyMi43MThjNC42NjcgNC43MDYgNC42MzcgMTIuMzA0LS4wNjggMTYuOTcxelwiXSxjaXJjbGU6WzUxMiw1MTIsW10sXCJmMTExXCIsXCJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptMCA0NDhjLTExMC41IDAtMjAwLTg5LjUtMjAwLTIwMFMxNDUuNSA1NiAyNTYgNTZzMjAwIDg5LjUgMjAwIDIwMC04OS41IDIwMC0yMDAgMjAwelwiXSxjbGlwYm9hcmQ6WzM4NCw1MTIsW10sXCJmMzI4XCIsXCJNMzM2IDY0aC04MGMwLTM1LjI5LTI4LjcxLTY0LTY0LTY0cy02NCAyOC43MS02NCA2NEg0OEMyMS40OSA2NCAwIDg1LjQ5IDAgMTEydjM1MmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDI4OGMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjExMmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0tNiA0MDBINTRhNiA2IDAgMCAxLTYtNlYxMThhNiA2IDAgMCAxIDYtNmg0MnYzNmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDE2OGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0zNmg0MmE2IDYgMCAwIDEgNiA2djM0MGE2IDYgMCAwIDEtNiA2ek0xOTIgNDBjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0cy0xMC43NDUgMjQtMjQgMjQtMjQtMTAuNzQ1LTI0LTI0IDEwLjc0NS0yNCAyNC0yNFwiXSxjbG9jazpbNTEyLDUxMixbXSxcImYwMTdcIixcIk0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjRsLTg0LjktNjEuN2MtMy4xLTIuMy00LjktNS45LTQuOS05LjdWMTE2YzAtNi42IDUuNC0xMiAxMi0xMmgzMmM2LjYgMCAxMiA1LjQgMTIgMTJ2MTQxLjdsNjYuOCA0OC42YzUuNCAzLjkgNi41IDExLjQgMi42IDE2LjhMMzM0LjYgMzQ5Yy0zLjkgNS4zLTExLjQgNi41LTE2LjggMi42elwiXSxjbG9uZTpbNTEyLDUxMixbXSxcImYyNGRcIixcIk00NjQgMEgxNDRjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2NDhINDhjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2MzIwYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMzIwYzI2LjUxIDAgNDgtMjEuNDkgNDgtNDh2LTQ4aDQ4YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWNDhjMC0yNi41MS0yMS40OS00OC00OC00OHpNMzYyIDQ2NEg1NGE2IDYgMCAwIDEtNi02VjE1MGE2IDYgMCAwIDEgNi02aDQydjIyNGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDIyNHY0MmE2IDYgMCAwIDEtNiA2em05Ni05NkgxNTBhNiA2IDAgMCAxLTYtNlY1NGE2IDYgMCAwIDEgNi02aDMwOGE2IDYgMCAwIDEgNiA2djMwOGE2IDYgMCAwIDEtNiA2elwiXSxcImNsb3NlZC1jYXB0aW9uaW5nXCI6WzUxMiw1MTIsW10sXCJmMjBhXCIsXCJNNDY0IDY0SDQ4QzIxLjUgNjQgMCA4NS41IDAgMTEydjI4OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tNiAzMzZINTRjLTMuMyAwLTYtMi43LTYtNlYxMThjMC0zLjMgMi43LTYgNi02aDQwNGMzLjMgMCA2IDIuNyA2IDZ2Mjc2YzAgMy4zLTIuNyA2LTYgNnptLTIxMS4xLTg1LjdjMS43IDIuNCAxLjUgNS42LS41IDcuNy01My42IDU2LjgtMTcyLjggMzIuMS0xNzIuOC02Ny45IDAtOTcuMyAxMjEuNy0xMTkuNSAxNzIuNS03MC4xIDIuMSAyIDIuNSAzLjIgMSA1LjdsLTE3LjUgMzAuNWMtMS45IDMuMS02LjIgNC05LjEgMS43LTQwLjgtMzItOTQuNi0xNC45LTk0LjYgMzEuMiAwIDQ4IDUxIDcwLjUgOTIuMiAzMi42IDIuOC0yLjUgNy4xLTIuMSA5LjIuOWwxOS42IDI3Ljd6bTE5MC40IDBjMS43IDIuNCAxLjUgNS42LS41IDcuNy01My42IDU2LjktMTcyLjggMzIuMS0xNzIuOC02Ny45IDAtOTcuMyAxMjEuNy0xMTkuNSAxNzIuNS03MC4xIDIuMSAyIDIuNSAzLjIgMSA1LjdMNDIwIDIyMC4yYy0xLjkgMy4xLTYuMiA0LTkuMSAxLjctNDAuOC0zMi05NC42LTE0LjktOTQuNiAzMS4yIDAgNDggNTEgNzAuNSA5Mi4yIDMyLjYgMi44LTIuNSA3LjEtMi4xIDkuMi45bDE5LjYgMjcuN3pcIl0sY29tbWVudDpbNTEyLDUxMixbXSxcImYwNzVcIixcIk0yNTYgMzJDMTE0LjYgMzIgMCAxMjUuMSAwIDI0MGMwIDQ3LjYgMTkuOSA5MS4yIDUyLjkgMTI2LjNDMzggNDA1LjcgNyA0MzkuMSA2LjUgNDM5LjVjLTYuNiA3LTguNCAxNy4yLTQuNiAyNlMxNC40IDQ4MCAyNCA0ODBjNjEuNSAwIDExMC0yNS43IDEzOS4xLTQ2LjNDMTkyIDQ0Mi44IDIyMy4yIDQ0OCAyNTYgNDQ4YzE0MS40IDAgMjU2LTkzLjEgMjU2LTIwOFMzOTcuNCAzMiAyNTYgMzJ6bTAgMzY4Yy0yNi43IDAtNTMuMS00LjEtNzguNC0xMi4xbC0yMi43LTcuMi0xOS41IDEzLjhjLTE0LjMgMTAuMS0zMy45IDIxLjQtNTcuNSAyOSA3LjMtMTIuMSAxNC40LTI1LjcgMTkuOS00MC4ybDEwLjYtMjguMS0yMC42LTIxLjhDNjkuNyAzMTQuMSA0OCAyODIuMiA0OCAyNDBjMC04OC4yIDkzLjMtMTYwIDIwOC0xNjBzMjA4IDcxLjggMjA4IDE2MC05My4zIDE2MC0yMDggMTYwelwiXSxcImNvbW1lbnQtYWx0XCI6WzUxMiw1MTIsW10sXCJmMjdhXCIsXCJNNDQ4IDBINjRDMjguNyAwIDAgMjguNyAwIDY0djI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGg5NnY4NGMwIDcuMSA1LjggMTIgMTIgMTIgMi40IDAgNC45LS43IDcuMS0yLjRMMzA0IDQxNmgxNDRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6bTE2IDM1MmMwIDguOC03LjIgMTYtMTYgMTZIMjg4bC0xMi44IDkuNkwyMDggNDI4di02MEg2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjY0YzAtOC44IDcuMi0xNiAxNi0xNmgzODRjOC44IDAgMTYgNy4yIDE2IDE2djI4OHpcIl0sXCJjb21tZW50LWRvdHNcIjpbNTEyLDUxMixbXSxcImY0YWRcIixcIk0xNDQgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnptMTEyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyem0xMTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTI1NiAzMkMxMTQuNiAzMiAwIDEyNS4xIDAgMjQwYzAgNDcuNiAxOS45IDkxLjIgNTIuOSAxMjYuM0MzOCA0MDUuNyA3IDQzOS4xIDYuNSA0MzkuNWMtNi42IDctOC40IDE3LjItNC42IDI2UzE0LjQgNDgwIDI0IDQ4MGM2MS41IDAgMTEwLTI1LjcgMTM5LjEtNDYuM0MxOTIgNDQyLjggMjIzLjIgNDQ4IDI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMnptMCAzNjhjLTI2LjcgMC01My4xLTQuMS03OC40LTEyLjFsLTIyLjctNy4yLTE5LjUgMTMuOGMtMTQuMyAxMC4xLTMzLjkgMjEuNC01Ny41IDI5IDcuMy0xMi4xIDE0LjQtMjUuNyAxOS45LTQwLjJsMTAuNi0yOC4xLTIwLjYtMjEuOEM2OS43IDMxNC4xIDQ4IDI4Mi4yIDQ4IDI0MGMwLTg4LjIgOTMuMy0xNjAgMjA4LTE2MHMyMDggNzEuOCAyMDggMTYwLTkzLjMgMTYwLTIwOCAxNjB6XCJdLGNvbW1lbnRzOls1NzYsNTEyLFtdLFwiZjA4NlwiLFwiTTUzMiAzODYuMmMyNy41LTI3LjEgNDQtNjEuMSA0NC05OC4yIDAtODAtNzYuNS0xNDYuMS0xNzYuMi0xNTcuOUMzNjguMyA3Mi41IDI5NC4zIDMyIDIwOCAzMiA5My4xIDMyIDAgMTAzLjYgMCAxOTJjMCAzNyAxNi41IDcxIDQ0IDk4LjItMTUuMyAzMC43LTM3LjMgNTQuNS0zNy43IDU0LjktNi4zIDYuNy04LjEgMTYuNS00LjQgMjUgMy42IDguNSAxMiAxNCAyMS4yIDE0IDUzLjUgMCA5Ni43LTIwLjIgMTI1LjItMzguOCA5LjIgMi4xIDE4LjcgMy43IDI4LjQgNC45QzIwOC4xIDQwNy42IDI4MS44IDQ0OCAzNjggNDQ4YzIwLjggMCA0MC44LTIuNCA1OS44LTYuOEM0NTYuMyA0NTkuNyA0OTkuNCA0ODAgNTUzIDQ4MGM5LjIgMCAxNy41LTUuNSAyMS4yLTE0IDMuNi04LjUgMS45LTE4LjMtNC40LTI1LS40LS4zLTIyLjUtMjQuMS0zNy44LTU0Ljh6bS0zOTIuOC05Mi4zTDEyMi4xIDMwNWMtMTQuMSA5LjEtMjguNSAxNi4zLTQzLjEgMjEuNCAyLjctNC43IDUuNC05LjcgOC0xNC44bDE1LjUtMzEuMUw3Ny43IDI1NkM2NC4yIDI0Mi42IDQ4IDIyMC43IDQ4IDE5MmMwLTYwLjcgNzMuMy0xMTIgMTYwLTExMnMxNjAgNTEuMyAxNjAgMTEyLTczLjMgMTEyLTE2MCAxMTJjLTE2LjUgMC0zMy0xLjktNDktNS42bC0xOS44LTQuNXpNNDk4LjMgMzUybC0yNC43IDI0LjQgMTUuNSAzMS4xYzIuNiA1LjEgNS4zIDEwLjEgOCAxNC44LTE0LjYtNS4xLTI5LTEyLjMtNDMuMS0yMS40bC0xNy4xLTExLjEtMTkuOSA0LjZjLTE2IDMuNy0zMi41IDUuNi00OSA1LjYtNTQgMC0xMDIuMi0yMC4xLTEzMS4zLTQ5LjdDMzM4IDMzOS41IDQxNiAyNzIuOSA0MTYgMTkyYzAtMy40LS40LTYuNy0uNy0xMEM0NzkuNyAxOTYuNSA1MjggMjM4LjggNTI4IDI4OGMwIDI4LjctMTYuMiA1MC42LTI5LjcgNjR6XCJdLGNvbXBhc3M6WzUxMiw1MTIsW10sXCJmMTRlXCIsXCJNMjU2IDhDMTE5LjAzMyA4IDggMTE5LjAzMyA4IDI1NnMxMTEuMDMzIDI0OCAyNDggMjQ4IDI0OC0xMTEuMDMzIDI0OC0yNDhTMzkyLjk2NyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUzMiAwLTIwMC04OS40NTEtMjAwLTIwMCAwLTExMC41MzEgODkuNDUxLTIwMCAyMDAtMjAwIDExMC41MzIgMCAyMDAgODkuNDUxIDIwMCAyMDAgMCAxMTAuNTMyLTg5LjQ1MSAyMDAtMjAwIDIwMHptOTEuMzI2LTMxMi4xMzFsLTMzLjM1OSAxMzcuNzc5YTI0LjAwNSAyNC4wMDUgMCAwIDEtNi43NzIgMTEuNzI5bC0xMDIuNjQgOTcuNzc5Yy0xNy4xMDQgMTYuMjkzLTQ1LjU2LjQzNC0zOS44OC0yMy4wMjRsMzMuMzU5LTEzNy43NzlhMjMuOTk3IDIzLjk5NyAwIDAgMSA2Ljc3Mi0xMS43MjlsMTAyLjY0Mi05Ny43NzljMTcuMjg1LTE2LjQ3IDQ1LjQ5NC0uMTc1IDM5Ljg3OCAyMy4wMjR6TTI1NiAyMjRjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMnMxNC4zMjcgMzIgMzIgMzIgMzItMTQuMzI3IDMyLTMyLTE0LjMyNy0zMi0zMi0zMnpcIl0sY29weTpbNDQ4LDUxMixbXSxcImYwYzVcIixcIk00MzMuOTQxIDY1Ljk0MWwtNTEuODgyLTUxLjg4MkE0OCA0OCAwIDAgMCAzNDguMTE4IDBIMTc2Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djQ4SDQ4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djMyMGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDIyNGMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4di00OGg4MGMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4Vjk5Ljg4MmE0OCA0OCAwIDAgMC0xNC4wNTktMzMuOTQxek0yNjYgNDY0SDU0YTYgNiAwIDAgMS02LTZWMTUwYTYgNiAwIDAgMSA2LTZoNzR2MjI0YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoOTZ2NDJhNiA2IDAgMCAxLTYgNnptMTI4LTk2SDE4MmE2IDYgMCAwIDEtNi02VjU0YTYgNiAwIDAgMSA2LTZoMTA2djg4YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGg4OHYyMDJhNiA2IDAgMCAxLTYgNnptNi0yNTZoLTY0VjQ4aDkuNjMyYzEuNTkxIDAgMy4xMTcuNjMyIDQuMjQzIDEuNzU3bDQ4LjM2OCA0OC4zNjhhNiA2IDAgMCAxIDEuNzU3IDQuMjQzVjExMnpcIl0sY29weXJpZ2h0Ols1MTIsNTEyLFtdLFwiZjFmOVwiLFwiTTI1NiA4QzExOS4wMzMgOCA4IDExOS4wMzMgOCAyNTZzMTExLjAzMyAyNDggMjQ4IDI0OCAyNDgtMTExLjAzMyAyNDgtMjQ4UzM5Mi45NjcgOCAyNTYgOHptMCA0NDhjLTExMC41MzIgMC0yMDAtODkuNDUxLTIwMC0yMDAgMC0xMTAuNTMxIDg5LjQ1MS0yMDAgMjAwLTIwMCAxMTAuNTMyIDAgMjAwIDg5LjQ1MSAyMDAgMjAwIDAgMTEwLjUzMi04OS40NTEgMjAwLTIwMCAyMDB6bTEwNy4zNTEtMTAxLjA2NGMtOS42MTQgOS43MTItNDUuNTMgNDEuMzk2LTEwNC4wNjUgNDEuMzk2LTgyLjQzIDAtMTQwLjQ4NC02MS40MjUtMTQwLjQ4NC0xNDEuNTY3IDAtNzkuMTUyIDYwLjI3NS0xMzkuNDAxIDEzOS43NjItMTM5LjQwMSA1NS41MzEgMCA4OC43MzggMjYuNjIgOTcuNTkzIDM0Ljc3OWExMS45NjUgMTEuOTY1IDAgMCAxIDEuOTM2IDE1LjMyMmwtMTguMTU1IDI4LjExM2MtMy44NDEgNS45NS0xMS45NjYgNy4yODItMTcuNDk5IDIuOTIxLTguNTk1LTYuNzc2LTMxLjgxNC0yMi41MzgtNjEuNzA4LTIyLjUzOC00OC4zMDMgMC03Ny45MTYgMzUuMzMtNzcuOTE2IDgwLjA4MiAwIDQxLjU4OSAyNi44ODggODMuNjkyIDc4LjI3NyA4My42OTIgMzIuNjU3IDAgNTYuODQzLTE5LjAzOSA2NS43MjYtMjcuMjI1IDUuMjctNC44NTcgMTMuNTk2LTQuMDM5IDE3LjgyIDEuNzM4bDE5Ljg2NSAyNy4xN2ExMS45NDcgMTEuOTQ3IDAgMCAxLTEuMTUyIDE1LjUxOHpcIl0sXCJjcmVkaXQtY2FyZFwiOls1NzYsNTEyLFtdLFwiZjA5ZFwiLFwiTTUyNy45IDMySDQ4LjFDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDguMSA0OGg0NzkuOGMyNi42IDAgNDguMS0yMS41IDQ4LjEtNDhWODBjMC0yNi41LTIxLjUtNDgtNDguMS00OHpNNTQuMSA4MGg0NjcuOGMzLjMgMCA2IDIuNyA2IDZ2NDJINDguMVY4NmMwLTMuMyAyLjctNiA2LTZ6bTQ2Ny44IDM1Mkg1NC4xYy0zLjMgMC02LTIuNy02LTZWMjU2aDQ3OS44djE3MGMwIDMuMy0yLjcgNi02IDZ6TTE5MiAzMzJ2NDBjMCA2LjYtNS40IDEyLTEyIDEyaC03MmMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNzJjNi42IDAgMTIgNS40IDEyIDEyem0xOTIgMHY0MGMwIDYuNi01LjQgMTItMTIgMTJIMjM2Yy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmgxMzZjNi42IDAgMTIgNS40IDEyIDEyelwiXSxkaXp6eTpbNDk2LDUxMixbXSxcImY1NjdcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bS0zMy44LTIxNy45YzcuOC03LjggNy44LTIwLjUgMC0yOC4zTDE5Ni4zIDE5MmwxNy45LTE3LjljNy44LTcuOCA3LjgtMjAuNSAwLTI4LjMtNy44LTcuOC0yMC41LTcuOC0yOC4zIDBMMTY4IDE2My43bC0xNy44LTE3LjhjLTcuOC03LjgtMjAuNS03LjgtMjguMyAwLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zbDE3LjkgMTcuOS0xNy45IDE3LjljLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zIDcuOCA3LjggMjAuNSA3LjggMjguMyAwbDE3LjgtMTcuOCAxNy44IDE3LjhjNy45IDcuNyAyMC41IDcuNyAyOC40LS4yem0xNjAtOTIuMmMtNy44LTcuOC0yMC41LTcuOC0yOC4zIDBMMzI4IDE2My43bC0xNy44LTE3LjhjLTcuOC03LjgtMjAuNS03LjgtMjguMyAwLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zbDE3LjkgMTcuOS0xNy45IDE3LjljLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zIDcuOCA3LjggMjAuNSA3LjggMjguMyAwbDE3LjgtMTcuOCAxNy44IDE3LjhjNy44IDcuOCAyMC41IDcuOCAyOC4zIDAgNy44LTcuOCA3LjgtMjAuNSAwLTI4LjNsLTE3LjgtMTggMTcuOS0xNy45YzcuNy03LjggNy43LTIwLjQgMC0yOC4yek0yNDggMjcyYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0IDY0LTI4LjcgNjQtNjQtMjguNy02NC02NC02NHpcIl0sXCJkb3QtY2lyY2xlXCI6WzUxMiw1MTIsW10sXCJmMTkyXCIsXCJNMjU2IDU2YzExMC41MzIgMCAyMDAgODkuNDUxIDIwMCAyMDAgMCAxMTAuNTMyLTg5LjQ1MSAyMDAtMjAwIDIwMC0xMTAuNTMyIDAtMjAwLTg5LjQ1MS0yMDAtMjAwIDAtMTEwLjUzMiA4OS40NTEtMjAwIDIwMC0yMDBtMC00OEMxMTkuMDMzIDggOCAxMTkuMDMzIDggMjU2czExMS4wMzMgMjQ4IDI0OCAyNDggMjQ4LTExMS4wMzMgMjQ4LTI0OFMzOTIuOTY3IDggMjU2IDh6bTAgMTY4Yy00NC4xODMgMC04MCAzNS44MTctODAgODBzMzUuODE3IDgwIDgwIDgwIDgwLTM1LjgxNyA4MC04MC0zNS44MTctODAtODAtODB6XCJdLGVkaXQ6WzU3Niw1MTIsW10sXCJmMDQ0XCIsXCJNNDAyLjMgMzQ0LjlsMzItMzJjNS01IDEzLjctMS41IDEzLjcgNS43VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDI3My41YzcuMSAwIDEwLjcgOC42IDUuNyAxMy43bC0zMiAzMmMtMS41IDEuNS0zLjUgMi4zLTUuNyAyLjNINDh2MzUyaDM1MlYzNTAuNWMwLTIuMS44LTQuMSAyLjMtNS42em0xNTYuNi0yMDEuOEwyOTYuMyA0MDUuN2wtOTAuNCAxMGMtMjYuMiAyLjktNDguNS0xOS4yLTQ1LjYtNDUuNmwxMC05MC40TDQzMi45IDE3LjFjMjIuOS0yMi45IDU5LjktMjIuOSA4Mi43IDBsNDMuMiA0My4yYzIyLjkgMjIuOSAyMi45IDYwIC4xIDgyLjh6TTQ2MC4xIDE3NEw0MDIgMTE1LjkgMjE2LjIgMzAxLjhsLTcuMyA2NS4zIDY1LjMtNy4zTDQ2MC4xIDE3NHptNjQuOC03OS43bC00My4yLTQzLjJjLTQuMS00LjEtMTAuOC00LjEtMTQuOCAwTDQzNiA4Mmw1OC4xIDU4LjEgMzAuOS0zMC45YzQtNC4yIDQtMTAuOC0uMS0xNC45elwiXSxlbnZlbG9wZTpbNTEyLDUxMixbXSxcImYwZTBcIixcIk00NjQgNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYyODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0MTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxMTJjMC0yNi41MS0yMS40OS00OC00OC00OHptMCA0OHY0MC44MDVjLTIyLjQyMiAxOC4yNTktNTguMTY4IDQ2LjY1MS0xMzQuNTg3IDEwNi40OS0xNi44NDEgMTMuMjQ3LTUwLjIwMSA0NS4wNzItNzMuNDEzIDQ0LjcwMS0yMy4yMDguMzc1LTU2LjU3OS0zMS40NTktNzMuNDEzLTQ0LjcwMUMxMDYuMTggMTk5LjQ2NSA3MC40MjUgMTcxLjA2NyA0OCAxNTIuODA1VjExMmg0MTZ6TTQ4IDQwMFYyMTQuMzk4YzIyLjkxNCAxOC4yNTEgNTUuNDA5IDQzLjg2MiAxMDQuOTM4IDgyLjY0NiAyMS44NTcgMTcuMjA1IDYwLjEzNCA1NS4xODYgMTAzLjA2MiA1NC45NTUgNDIuNzE3LjIzMSA4MC41MDktMzcuMTk5IDEwMy4wNTMtNTQuOTQ3IDQ5LjUyOC0zOC43ODMgODIuMDMyLTY0LjQwMSAxMDQuOTQ3LTgyLjY1M1Y0MDBINDh6XCJdLFwiZW52ZWxvcGUtb3BlblwiOls1MTIsNTEyLFtdLFwiZjJiNlwiLFwiTTQ5NC41ODYgMTY0LjUxNmMtNC42OTctMy44ODMtMTExLjcyMy04OS45NS0xMzUuMjUxLTEwOC42NTdDMzM3LjIzMSAzOC4xOTEgMjk5LjQzNyAwIDI1NiAwYy00My4yMDUgMC04MC42MzYgMzcuNzE3LTEwMy4zMzUgNTUuODU5LTI0LjQ2MyAxOS40NS0xMzEuMDcgMTA1LjE5NS0xMzUuMTUgMTA4LjU0OUE0OC4wMDQgNDguMDA0IDAgMCAwIDAgMjAxLjQ4NVY0NjRjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0MTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYyMDEuNTA5YTQ4IDQ4IDAgMCAwLTE3LjQxNC0zNi45OTN6TTQ2NCA0NThhNiA2IDAgMCAxLTYgNkg1NGE2IDYgMCAwIDEtNi02VjIwNC4zNDdjMC0xLjgxMy44MTYtMy41MjYgMi4yMjYtNC42NjUgMTUuODctMTIuODE0IDEwOC43OTMtODcuNTU0IDEzMi4zNjQtMTA2LjI5M0MyMDAuNzU1IDc4Ljg4IDIzMi4zOTggNDggMjU2IDQ4YzIzLjY5MyAwIDU1Ljg1NyAzMS4zNjkgNzMuNDEgNDUuMzg5IDIzLjU3MyAxOC43NDEgMTE2LjUwMyA5My40OTMgMTMyLjM2NiAxMDYuMzE2YTUuOTkgNS45OSAwIDAgMSAyLjIyNCA0LjY2M1Y0NTh6bS0zMS45OTEtMTg3LjcwNGM0LjI0OSA1LjE1OSAzLjQ2NSAxMi43OTUtMS43NDUgMTYuOTgxLTI4Ljk3NSAyMy4yODMtNTkuMjc0IDQ3LjU5Ny03MC45MjkgNTYuODYzQzMzNi42MzYgMzYyLjI4MyAyOTkuMjA1IDQwMCAyNTYgNDAwYy00My40NTIgMC04MS4yODctMzguMjM3LTEwMy4zMzUtNTUuODYtMTEuMjc5LTguOTY3LTQxLjc0NC0zMy40MTMtNzAuOTI3LTU2Ljg2NS01LjIxLTQuMTg3LTUuOTkzLTExLjgyMi0xLjc0NS0xNi45ODFsMTUuMjU4LTE4LjUyOGM0LjE3OC01LjA3MyAxMS42NTctNS44NDMgMTYuNzc5LTEuNzI2IDI4LjYxOCAyMy4wMDEgNTguNTY2IDQ3LjAzNSA3MC41NiA1Ni41NzFDMjAwLjE0MyAzMjAuNjMxIDIzMi4zMDcgMzUyIDI1NiAzNTJjMjMuNjAyIDAgNTUuMjQ2LTMwLjg4IDczLjQxLTQ1LjM4OSAxMS45OTQtOS41MzUgNDEuOTQ0LTMzLjU3IDcwLjU2My01Ni41NjggNS4xMjItNC4xMTYgMTIuNjAxLTMuMzQ2IDE2Ljc3OCAxLjcyN2wxNS4yNTggMTguNTI2elwiXSxleWU6WzU3Niw1MTIsW10sXCJmMDZlXCIsXCJNNTY5LjM1NCAyMzEuNjMxQzUxMi45NyAxMzUuOTQ5IDQwNy44MSA3MiAyODggNzIgMTY4LjE0IDcyIDYzLjAwNCAxMzUuOTk0IDYuNjQ2IDIzMS42MzFhNDcuOTk5IDQ3Ljk5OSAwIDAgMCAwIDQ4LjczOUM2My4wMzEgMzc2LjA1MSAxNjguMTkgNDQwIDI4OCA0NDBjMTE5Ljg2IDAgMjI0Ljk5Ni02My45OTQgMjgxLjM1NC0xNTkuNjMxYTQ3Ljk5NyA0Ny45OTcgMCAwIDAgMC00OC43Mzh6TTI4OCAzOTJjLTEwMi41NTYgMC0xOTIuMDkxLTU0LjcwMS0yNDAtMTM2IDQ0LjE1Ny03NC45MzMgMTIzLjY3Ny0xMjcuMjcgMjE2LjE2Mi0xMzUuMDA3QzI3My45NTggMTMxLjA3OCAyODAgMTQ0LjgzIDI4MCAxNjBjMCAzMC45MjgtMjUuMDcyIDU2LTU2IDU2cy01Ni0yNS4wNzItNTYtNTZsLjAwMS0uMDQyQzE1Ny43OTQgMTc5LjA0MyAxNTIgMjAwLjg0NCAxNTIgMjI0YzAgNzUuMTExIDYwLjg4OSAxMzYgMTM2IDEzNnMxMzYtNjAuODg5IDEzNi0xMzZjMC0zMS4wMzEtMTAuNC01OS42MjktMjcuODk1LTgyLjUxNUM0NTEuNzA0IDE2NC42MzggNDk4LjAwOSAyMDUuMTA2IDUyOCAyNTZjLTQ3LjkwOCA4MS4yOTktMTM3LjQ0NCAxMzYtMjQwIDEzNnpcIl0sXCJleWUtc2xhc2hcIjpbNTc2LDUxMixbXSxcImYwNzBcIixcIk0yNzIuNzAyIDM1OS4xMzljLTgwLjQ4My05LjAxMS0xMzYuMjEyLTg2Ljg4Ni0xMTYuOTMtMTY3LjA0MmwxMTYuOTMgMTY3LjA0MnpNMjg4IDM5MmMtMTAyLjU1NiAwLTE5Mi4wOTItNTQuNzAxLTI0MC0xMzYgMjEuNzU1LTM2LjkxNyA1Mi4xLTY4LjM0MiA4OC4zNDQtOTEuNjU4bC0yNy41NDEtMzkuMzQzQzY3LjAwMSAxNTIuMjM0IDMxLjkyMSAxODguNzQxIDYuNjQ2IDIzMS42MzFhNDcuOTk5IDQ3Ljk5OSAwIDAgMCAwIDQ4LjczOUM2My4wMDQgMzc2LjAwNiAxNjguMTQgNDQwIDI4OCA0NDBhMzMyLjg5IDMzMi44OSAwIDAgMCAzOS42NDgtMi4zNjdsLTMyLjAyMS00NS43NDRBMjg0LjE2IDI4NC4xNiAwIDAgMSAyODggMzkyem0yODEuMzU0LTExMS42MzFjLTMzLjIzMiA1Ni4zOTQtODMuNDIxIDEwMS43NDItMTQzLjU1NCAxMjkuNDkybDQ4LjExNiA2OC43NGMzLjgwMSA1LjQyOSAyLjQ4IDEyLjkxMi0yLjk0OSAxNi43MTJMNDUwLjIzIDUwOS44M2MtNS40MjkgMy44MDEtMTIuOTEyIDIuNDgtMTYuNzEyLTIuOTQ5TDEwMi4wODQgMzMuMzk5Yy0zLjgwMS01LjQyOS0yLjQ4LTEyLjkxMiAyLjk0OS0xNi43MTJMMTI1Ljc3IDIuMTdjNS40MjktMy44MDEgMTIuOTEyLTIuNDggMTYuNzEyIDIuOTQ5bDU1LjUyNiA3OS4zMjVDMjI2LjYxMiA3Ni4zNDMgMjU2LjgwOCA3MiAyODggNzJjMTE5Ljg2IDAgMjI0Ljk5NiA2My45OTQgMjgxLjM1NCAxNTkuNjMxYTQ4LjAwMiA0OC4wMDIgMCAwIDEgMCA0OC43Mzh6TTUyOCAyNTZjLTQ0LjE1Ny03NC45MzMtMTIzLjY3Ny0xMjcuMjctMjE2LjE2Mi0xMzUuMDA3QzMwMi4wNDIgMTMxLjA3OCAyOTYgMTQ0LjgzIDI5NiAxNjBjMCAzMC45MjggMjUuMDcyIDU2IDU2IDU2czU2LTI1LjA3MiA1Ni01NmwtLjAwMS0uMDQyYzMwLjYzMiA1Ny4yNzcgMTYuNzM5IDEzMC4yNi0zNi45MjggMTcxLjcxOWwyNi42OTUgMzguMTM1QzQ1Mi42MjYgMzQ2LjU1MSA0OTguMzA4IDMwNi4zODYgNTI4IDI1NnpcIl0sZmlsZTpbMzg0LDUxMixbXSxcImYxNWJcIixcIk0zNjkuOSA5Ny45TDI4NiAxNEMyNzcgNSAyNjQuOC0uMSAyNTIuMS0uMUg0OEMyMS41IDAgMCAyMS41IDAgNDh2NDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4OGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMzEuOWMwLTEyLjctNS4xLTI1LTE0LjEtMzR6TTMzMi4xIDEyOEgyNTZWNTEuOWw3Ni4xIDc2LjF6TTQ4IDQ2NFY0OGgxNjB2MTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0aDEwNHYyODhINDh6XCJdLFwiZmlsZS1hbHRcIjpbMzg0LDUxMixbXSxcImYxNWNcIixcIk0yODggMjQ4djI4YzAgNi42LTUuNCAxMi0xMiAxMkgxMDhjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMjhjMC02LjYgNS40LTEyIDEyLTEyaDE2OGM2LjYgMCAxMiA1LjQgMTIgMTJ6bS0xMiA3MkgxMDhjLTYuNiAwLTEyIDUuNC0xMiAxMnYyOGMwIDYuNiA1LjQgMTIgMTIgMTJoMTY4YzYuNiAwIDEyLTUuNCAxMi0xMnYtMjhjMC02LjYtNS40LTEyLTEyLTEyem0xMDgtMTg4LjFWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OEMwIDIxLjUgMjEuNSAwIDQ4IDBoMjA0LjFDMjY0LjggMCAyNzcgNS4xIDI4NiAxNC4xTDM2OS45IDk4YzkgOC45IDE0LjEgMjEuMiAxNC4xIDMzLjl6bS0xMjgtODBWMTI4aDc2LjFMMjU2IDUxLjl6TTMzNiA0NjRWMTc2SDIzMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNDhINDh2NDE2aDI4OHpcIl0sXCJmaWxlLWFyY2hpdmVcIjpbMzg0LDUxMixbXSxcImYxYzZcIixcIk0zNjkuOTQxIDk3Ljk0MWwtODMuODgyLTgzLjg4MkE0OCA0OCAwIDAgMCAyNTIuMTE4IDBINDhDMjEuNDkgMCAwIDIxLjQ5IDAgNDh2NDE2YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMjg4YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTMxLjg4MmE0OCA0OCAwIDAgMC0xNC4wNTktMzMuOTQxek0yNTYgNTEuODgyTDMzMi4xMTggMTI4SDI1NlY1MS44ODJ6TTMzNiA0NjRINDhWNDhoNzkuNzE0djE2aDMyVjQ4SDIwOHYxMDRjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEwNHYyODh6TTE5Mi4yNyA5NmgtMzJWNjRoMzJ2MzJ6bS0zMiAwdjMyaC0zMlY5NmgzMnptMCA2NHYzMmgtMzJ2LTMyaDMyem0zMiAwaC0zMnYtMzJoMzJ2MzJ6bTEuOTA5IDEwNS42NzhBMTIgMTIgMCAwIDAgMTgyLjQwNiAyNTZIMTYwLjI3di0zMmgtMzJ2MzJsLTE5LjY5IDk3LjEwNkMxMDEuOTg5IDM4NS42MTEgMTI2LjgzNCA0MTYgMTYwIDQxNmMzMy4wNTIgMCA1Ny44NzEtMzAuMTkyIDUxLjQ3Ni02Mi42MmwtMTcuMjk3LTg3LjcwMnpNMTYwLjI3IDM5MC4wNzNjLTE3LjkxOCAwLTMyLjQ0NC0xMi4xMDUtMzIuNDQ0LTI3LjAzNiAwLTE0LjkzMiAxNC41MjUtMjcuMDM2IDMyLjQ0NC0yNy4wMzZzMzIuNDQ0IDEyLjEwNSAzMi40NDQgMjcuMDM2YzAgMTQuOTMxLTE0LjUyNiAyNy4wMzYtMzIuNDQ0IDI3LjAzNnptMzItMTY2LjA3M2gtMzJ2LTMyaDMydjMyelwiXSxcImZpbGUtYXVkaW9cIjpbMzg0LDUxMixbXSxcImYxYzdcIixcIk0zNjkuOTQxIDk3Ljk0MWwtODMuODgyLTgzLjg4MkE0OCA0OCAwIDAgMCAyNTIuMTE4IDBINDhDMjEuNDkgMCAwIDIxLjQ5IDAgNDh2NDE2YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMjg4YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTMxLjg4MmE0OCA0OCAwIDAgMC0xNC4wNTktMzMuOTQxek0zMzIuMTE4IDEyOEgyNTZWNTEuODgyTDMzMi4xMTggMTI4ek00OCA0NjRWNDhoMTYwdjEwNGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTA0djI4OEg0OHptMTQ0LTc2LjAyNGMwIDEwLjY5MS0xMi45MjYgMTYuMDQ1LTIwLjQ4NSA4LjQ4NUwxMzYgMzYwLjQ4NmgtMjhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTU2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMjhsMzUuNTE1LTM2Ljk0N2M3LjU2LTcuNTYgMjAuNDg1LTIuMjA2IDIwLjQ4NSA4LjQ4NXYxMzUuOTUyem00MS4yMDEtNDcuMTNjOS4wNTEtOS4yOTcgOS4wNi0yNC4xMzMuMDAxLTMzLjQzOS0yMi4xNDktMjIuNzUyIDEyLjIzNS01Ni4yNDYgMzQuMzk1LTMzLjQ4MSAyNy4xOTggMjcuOTQgMjcuMjEyIDcyLjQ0NC4wMDEgMTAwLjQwMS0yMS43OTMgMjIuMzg2LTU2Ljk0Ny0xMC4zMTUtMzQuMzk3LTMzLjQ4MXpcIl0sXCJmaWxlLWNvZGVcIjpbMzg0LDUxMixbXSxcImYxYzlcIixcIk0zNjkuOTQxIDk3Ljk0MWwtODMuODgyLTgzLjg4MkE0OCA0OCAwIDAgMCAyNTIuMTE4IDBINDhDMjEuNDkgMCAwIDIxLjQ5IDAgNDh2NDE2YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMjg4YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTMxLjg4MmE0OCA0OCAwIDAgMC0xNC4wNTktMzMuOTQxek0zMzIuMTE4IDEyOEgyNTZWNTEuODgyTDMzMi4xMTggMTI4ek00OCA0NjRWNDhoMTYwdjEwNGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTA0djI4OEg0OHptMTAxLjY3Ny0xMTUuMTE1TDExNi44NTQgMzIwbDMyLjgyMi0yOC44ODVhOC43OTMgOC43OTMgMCAwIDAgLjYwNS0xMi42MjRsLTE3LjQwMy0xOC41NjRjLTMuMzg0LTMuNjEzLTguOTY0LTMuNjYyLTEyLjQzOC0uNDAxTDYyLjc4IDMxMy41OGMtMy43MDMgMy40NzQtMy43MDQgOS4zNjcuMDAxIDEyLjg0bDU3LjY1OSA1NC4wNTVhOC43MzggOC43MzggMCAwIDAgNi4wMTIgMi4zODEgOC43NDYgOC43NDYgMCAwIDAgNi40MjctMi43ODJsMTcuNDAzLTE4LjU2M2E4Ljc5NSA4Ljc5NSAwIDAgMC0uNjA1LTEyLjYyNnptODQuMjg0LTEyNy44NWwtMjQuNDAxLTcuMDg0YTguNzk2IDguNzk2IDAgMCAwLTEwLjkwNSA1Ljk5OEwxNDQuMDQgNDA4LjA2MWMtMS4zNTMgNC42NiAxLjMzOCA5LjU1MiA1Ljk5OCAxMC45MDVsMjQuNDAzIDcuMDg0YzQuNjggMS4zNTUgOS41NTctMS4zNTQgMTAuOTA1LTUuOTk4bDU0LjYxMi0xODguMTEyYzEuMzU0LTQuNjYtMS4zMzctOS41NTItNS45OTctMTAuOTA1em04Ny4yNTggOTIuNTQ1bC01Ny42NTgtNTQuMDU1Yy0zLjUyNi0zLjMwNy05LjA5OS0zLjE2NS0xMi40MzkuNDAxbC0xNy40MDMgMTguNTYzYTguNzk1IDguNzk1IDAgMCAwIC42MDUgMTIuNjI1TDI2Ny4xNDYgMzIwbC0zMi44MjIgMjguODg1YTguNzkzIDguNzkzIDAgMCAwLS42MDUgMTIuNjI0bDE3LjQwMyAxOC41NjRhOC43OTcgOC43OTcgMCAwIDAgMTIuNDM5LjQwMWgtLjAwMWw1Ny42Ni01NC4wNTVjMy43MDMtMy40NzMgMy43MDMtOS4zNjYtLjAwMS0xMi44Mzl6XCJdLFwiZmlsZS1leGNlbFwiOlszODQsNTEyLFtdLFwiZjFjM1wiLFwiTTM2OS45IDk3LjlMMjg2IDE0QzI3NyA1IDI2NC44LS4xIDI1Mi4xLS4xSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjEzMS45YzAtMTIuNy01LjEtMjUtMTQuMS0zNHpNMzMyLjEgMTI4SDI1NlY1MS45bDc2LjEgNzYuMXpNNDggNDY0VjQ4aDE2MHYxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTA0djI4OEg0OHptMjEyLTI0MGgtMjguOGMtNC40IDAtOC40IDIuNC0xMC41IDYuMy0xOCAzMy4xLTIyLjIgNDIuNC0yOC42IDU3LjctMTMuOS0yOS4xLTYuOS0xNy4zLTI4LjYtNTcuNy0yLjEtMy45LTYuMi02LjMtMTAuNi02LjNIMTI0Yy05LjMgMC0xNSAxMC0xMC40IDE4bDQ2LjMgNzgtNDYuMyA3OGMtNC43IDggMS4xIDE4IDEwLjQgMThoMjguOWM0LjQgMCA4LjQtMi40IDEwLjUtNi4zIDIxLjctNDAgMjMtNDUgMjguNi01Ny43IDE0LjkgMzAuMiA1LjkgMTUuOSAyOC42IDU3LjcgMi4xIDMuOSA2LjIgNi4zIDEwLjYgNi4zSDI2MGM5LjMgMCAxNS0xMCAxMC40LTE4TDIyNCAzMjBjLjctMS4xIDMwLjMtNTAuNSA0Ni4zLTc4IDQuNy04LTEuMS0xOC0xMC4zLTE4elwiXSxcImZpbGUtaW1hZ2VcIjpbMzg0LDUxMixbXSxcImYxYzVcIixcIk0zNjkuOSA5Ny45TDI4NiAxNEMyNzcgNSAyNjQuOC0uMSAyNTIuMS0uMUg0OEMyMS41IDAgMCAyMS41IDAgNDh2NDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4OGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMzEuOWMwLTEyLjctNS4xLTI1LTE0LjEtMzR6TTMzMi4xIDEyOEgyNTZWNTEuOWw3Ni4xIDc2LjF6TTQ4IDQ2NFY0OGgxNjB2MTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0aDEwNHYyODhINDh6bTMyLTQ4aDIyNFYyODhsLTIzLjUtMjMuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwTDE3NiAzNTJsLTM5LjUtMzkuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwTDgwIDM1MnY2NHptNDgtMjQwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4IDQ4LTIxLjUgNDgtNDgtMjEuNS00OC00OC00OHpcIl0sXCJmaWxlLXBkZlwiOlszODQsNTEyLFtdLFwiZjFjMVwiLFwiTTM2OS45IDk3LjlMMjg2IDE0QzI3NyA1IDI2NC44LS4xIDI1Mi4xLS4xSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjEzMS45YzAtMTIuNy01LjEtMjUtMTQuMS0zNHpNMzMyLjEgMTI4SDI1NlY1MS45bDc2LjEgNzYuMXpNNDggNDY0VjQ4aDE2MHYxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTA0djI4OEg0OHptMjUwLjItMTQzLjdjLTEyLjItMTItNDctOC43LTY0LjQtNi41LTE3LjItMTAuNS0yOC43LTI1LTM2LjgtNDYuMyAzLjktMTYuMSAxMC4xLTQwLjYgNS40LTU2LTQuMi0yNi4yLTM3LjgtMjMuNi00Mi42LTUuOS00LjQgMTYuMS0uNCAzOC41IDcgNjcuMS0xMCAyMy45LTI0LjkgNTYtMzUuNCA3NC40LTIwIDEwLjMtNDcgMjYuMi01MSA0Ni4yLTMuMyAxNS44IDI2IDU1LjIgNzYuMS0zMS4yIDIyLjQtNy40IDQ2LjgtMTYuNSA2OC40LTIwLjEgMTguOSAxMC4yIDQxIDE3IDU1LjggMTcgMjUuNSAwIDI4LTI4LjIgMTcuNS0zOC43em0tMTk4LjEgNzcuOGM1LjEtMTMuNyAyNC41LTI5LjUgMzAuNC0zNS0xOSAzMC4zLTMwLjQgMzUuNy0zMC40IDM1em04MS42LTE5MC42YzcuNCAwIDYuNyAzMi4xIDEuOCA0MC44LTQuNC0xMy45LTQuMy00MC44LTEuOC00MC44em0tMjQuNCAxMzYuNmM5LjctMTYuOSAxOC0zNyAyNC43LTU0LjcgOC4zIDE1LjEgMTguOSAyNy4yIDMwLjEgMzUuNS0yMC44IDQuMy0zOC45IDEzLjEtNTQuOCAxOS4yem0xMzEuNi01cy01IDYtMzcuMy03LjhjMzUuMS0yLjYgNDAuOSA1LjQgMzcuMyA3Ljh6XCJdLFwiZmlsZS1wb3dlcnBvaW50XCI6WzM4NCw1MTIsW10sXCJmMWM0XCIsXCJNMzY5LjkgOTcuOUwyODYgMTRDMjc3IDUgMjY0LjgtLjEgMjUyLjEtLjFINDhDMjEuNSAwIDAgMjEuNSAwIDQ4djQxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgyODhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTMxLjljMC0xMi43LTUuMS0yNS0xNC4xLTM0ek0zMzIuMSAxMjhIMjU2VjUxLjlsNzYuMSA3Ni4xek00OCA0NjRWNDhoMTYwdjEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxMDR2Mjg4SDQ4em03Mi02MFYyMzZjMC02LjYgNS40LTEyIDEyLTEyaDY5LjJjMzYuNyAwIDYyLjggMjcgNjIuOCA2Ni4zIDAgNzQuMy02OC43IDY2LjUtOTUuNSA2Ni41VjQwNGMwIDYuNi01LjQgMTItMTIgMTJIMTMyYy02LjYgMC0xMi01LjQtMTItMTJ6bTQ4LjUtODcuNGgyM2M3LjkgMCAxMy45LTIuNCAxOC4xLTcuMiA4LjUtOS44IDguNC0yOC41LjEtMzcuOC00LjEtNC42LTkuOS03LTE3LjQtN2gtMjMuOXY1MnpcIl0sXCJmaWxlLXZpZGVvXCI6WzM4NCw1MTIsW10sXCJmMWM4XCIsXCJNMzY5Ljk0MSA5Ny45NDFsLTgzLjg4Mi04My44ODJBNDggNDggMCAwIDAgMjUyLjExOCAwSDQ4QzIxLjQ5IDAgMCAyMS40OSAwIDQ4djQxNmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDI4OGMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjEzMS44ODJhNDggNDggMCAwIDAtMTQuMDU5LTMzLjk0MXpNMzMyLjExOCAxMjhIMjU2VjUxLjg4MkwzMzIuMTE4IDEyOHpNNDggNDY0VjQ4aDE2MHYxMDRjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEwNHYyODhINDh6bTIyOC42ODctMjExLjMwM0wyMjQgMzA1LjM3NFYyNjhjMC0xMS4wNDYtOC45NTQtMjAtMjAtMjBIMTAwYy0xMS4wNDYgMC0yMCA4Ljk1NC0yMCAyMHYxMDRjMCAxMS4wNDYgOC45NTQgMjAgMjAgMjBoMTA0YzExLjA0NiAwIDIwLTguOTU0IDIwLTIwdi0zNy4zNzRsNTIuNjg3IDUyLjY3NEMyODYuNzA0IDM5Ny4zMTggMzA0IDM5MC4yOCAzMDQgMzc1Ljk4NlYyNjQuMDExYzAtMTQuMzExLTE3LjMwOS0yMS4zMTktMjcuMzEzLTExLjMxNHpcIl0sXCJmaWxlLXdvcmRcIjpbMzg0LDUxMixbXSxcImYxYzJcIixcIk0zNjkuOSA5Ny45TDI4NiAxNEMyNzcgNSAyNjQuOC0uMSAyNTIuMS0uMUg0OEMyMS41IDAgMCAyMS41IDAgNDh2NDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4OGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMzEuOWMwLTEyLjctNS4xLTI1LTE0LjEtMzR6TTMzMi4xIDEyOEgyNTZWNTEuOWw3Ni4xIDc2LjF6TTQ4IDQ2NFY0OGgxNjB2MTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0aDEwNHYyODhINDh6bTIyMC4xLTIwOGMtNS43IDAtMTAuNiA0LTExLjcgOS41LTIwLjYgOTcuNy0yMC40IDk1LjQtMjEgMTAzLjUtLjItMS4yLS40LTIuNi0uNy00LjMtLjgtNS4xLjMuMi0yMy42LTk5LjUtMS4zLTUuNC02LjEtOS4yLTExLjctOS4yaC0xMy4zYy01LjUgMC0xMC4zIDMuOC0xMS43IDkuMS0yNC40IDk5LTI0IDk2LjItMjQuOCAxMDMuNy0uMS0xLjEtLjItMi41LS41LTQuMi0uNy01LjItMTQuMS03My4zLTE5LjEtOTktMS4xLTUuNi02LTkuNy0xMS44LTkuN2gtMTYuOGMtNy44IDAtMTMuNSA3LjMtMTEuNyAxNC44IDggMzIuNiAyNi43IDEwOS41IDMzLjIgMTM2IDEuMyA1LjQgNi4xIDkuMSAxMS43IDkuMWgyNS4yYzUuNSAwIDEwLjMtMy43IDExLjYtOS4xbDE3LjktNzEuNGMxLjUtNi4yIDIuNS0xMiAzLTE3LjNsMi45IDE3LjNjLjEuNCAxMi42IDUwLjUgMTcuOSA3MS40IDEuMyA1LjMgNi4xIDkuMSAxMS42IDkuMWgyNC43YzUuNSAwIDEwLjMtMy43IDExLjYtOS4xIDIwLjgtODEuOSAzMC4yLTExOSAzNC41LTEzNiAxLjktNy42LTMuOC0xNC45LTExLjYtMTQuOWgtMTUuOHpcIl0sZmxhZzpbNTEyLDUxMixbXSxcImYwMjRcIixcIk0zMzYuMTc0IDgwYy00OS4xMzIgMC05My4zMDUtMzItMTYxLjkxMy0zMi0zMS4zMDEgMC01OC4zMDMgNi40ODItODAuNzIxIDE1LjE2OGE0OC4wNCA0OC4wNCAwIDAgMCAyLjE0Mi0yMC43MjdDOTMuMDY3IDE5LjU3NSA3NC4xNjcgMS41OTQgNTEuMjAxLjEwNCAyMy4yNDItMS43MSAwIDIwLjQzMSAwIDQ4YzAgMTcuNzY0IDkuNjU3IDMzLjI2MiAyNCA0MS41NjJWNDk2YzAgOC44MzcgNy4xNjMgMTYgMTYgMTZoMTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtODMuNDQzQzEwOS44NjkgMzk1LjI4IDE0My4yNTkgMzg0IDE5OS44MjYgMzg0YzQ5LjEzMiAwIDkzLjMwNSAzMiAxNjEuOTEzIDMyIDU4LjQ3OSAwIDEwMS45NzItMjIuNjE3IDEyOC41NDgtMzkuOTgxQzUwMy44NDYgMzY3LjE2MSA1MTIgMzUyLjA1MSA1MTIgMzM1Ljg1NVY5NS45MzdjMC0zNC40NTktMzUuMjY0LTU3Ljc2OC02Ni45MDQtNDQuMTE3QzQwOS4xOTMgNjcuMzA5IDM3MS42NDEgODAgMzM2LjE3NCA4MHpNNDY0IDMzNmMtMjEuNzgzIDE1LjQxMi02MC44MjQgMzItMTAyLjI2MSAzMi01OS45NDUgMC0xMDIuMDAyLTMyLTE2MS45MTMtMzItNDMuMzYxIDAtOTYuMzc5IDkuNDAzLTEyNy44MjYgMjRWMTI4YzIxLjc4NC0xNS40MTIgNjAuODI0LTMyIDEwMi4yNjEtMzIgNTkuOTQ1IDAgMTAyLjAwMiAzMiAxNjEuOTEzIDMyIDQzLjI3MSAwIDk2LjMyLTE3LjM2NiAxMjcuODI2LTMydjI0MHpcIl0sZmx1c2hlZDpbNDk2LDUxMixbXSxcImY1NzlcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTk2LTMxMmMtNDQuMiAwLTgwIDM1LjgtODAgODBzMzUuOCA4MCA4MCA4MCA4MC0zNS44IDgwLTgwLTM1LjgtODAtODAtODB6bTAgMTI4Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4IDQ4IDIxLjUgNDggNDgtMjEuNSA0OC00OCA0OHptMC03MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0LTEwLjctMjQtMjQtMjR6bS0xMTIgMjRjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODAgMzUuOCA4MCA4MCA4MCA4MC0zNS44IDgwLTgwem0tODAgNDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDggNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4em0wLTcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjQtMTAuNy0yNC0yNC0yNHptMTYwIDE0NEgxODRjLTEzLjIgMC0yNCAxMC44LTI0IDI0czEwLjggMjQgMjQgMjRoMTI4YzEzLjIgMCAyNC0xMC44IDI0LTI0cy0xMC44LTI0LTI0LTI0elwiXSxmb2xkZXI6WzUxMiw1MTIsW10sXCJmMDdiXCIsXCJNNDY0IDEyOEgyNzJsLTY0LTY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTc2YzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bS02IDI3Mkg1NGMtMy4zMTQgMC02LTIuNjc4LTYtNS45OTJWMTE3Ljk5MkE1Ljk5MyA1Ljk5MyAwIDAgMSA1NCAxMTJoMTM0LjExOGw2NCA2NEg0NThhNiA2IDAgMCAxIDYgNnYyMTJhNiA2IDAgMCAxLTYgNnpcIl0sXCJmb2xkZXItb3BlblwiOls1NzYsNTEyLFtdLFwiZjA3Y1wiLFwiTTUyNy45NDMgMjI0SDQ4MHYtNDhjMC0yNi41MS0yMS40OS00OC00OC00OEgyNzJsLTY0LTY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDAwYTQ4LjAwMSA0OC4wMDEgMCAwIDAgNDAuNzA0LTIyLjU2bDc5Ljk0Mi0xMjhjMTkuOTQ4LTMxLjkxNy0zLjAzOC03My40NC00MC43MDMtNzMuNDR6TTU0IDExMmgxMzQuMTE4bDY0IDY0SDQyNmE2IDYgMCAwIDEgNiA2djQySDE1MmE0OCA0OCAwIDAgMC00MS4wOTggMjMuMjAyTDQ4IDM1MS40NDlWMTE3Ljk5M0E1Ljk5MyA1Ljk5MyAwIDAgMSA1NCAxMTJ6bTM5NCAyODhINzJsNzcuMjM0LTEyOEg1MjhsLTgwIDEyOHpcIl0sXCJmb250LWF3ZXNvbWUtbG9nby1mdWxsXCI6WzM5OTIsNTEyLFtcIkZvbnQgQXdlc29tZVwiXSxcImY0ZTZcIixcIk00NTQuNiAwSDU3LjRDMjUuOSAwIDAgMjUuOSAwIDU3LjR2Mzk3LjNDMCA0ODYuMSAyNS45IDUxMiA1Ny40IDUxMmgzOTcuM2MzMS40IDAgNTcuNC0yNS45IDU3LjQtNTcuNFY1Ny40QzUxMiAyNS45IDQ4Ni4xIDAgNDU0LjYgMHptLTU4LjkgMzI0LjljMCA0LjgtNC4xIDYuOS04LjkgOC45LTE5LjIgOC4xLTM5LjcgMTUuNy02MS41IDE1LjctNDAuNSAwLTY4LjctNDQuOC0xNjMuMiAyLjV2NTEuOGMwIDMwLjMtNDUuNyAzMC4yLTQ1LjcgMHYtMjUwYy05LTctMTUtMTcuOS0xNS0zMC4zIDAtMjEgMTcuMS0zOC4yIDM4LjItMzguMiAyMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCAxMi4yLTUuOCAyMy4yLTE0LjkgMzAuMnYyMWMzNy4xLTEyIDY1LjUtMzQuNCAxNDYuMS0zLjQgMjYuNiAxMS40IDY4LjctMTUuNyA3Ni41LTE1LjcgNS41IDAgMTAuMyA0LjEgMTAuMyA4Ljl2MTYwLjR6bTQzMi45LTE3NC4yaC0xMzd2NzAuMUg4MjVjMzkuOCAwIDQwLjQgNjIuMiAwIDYyLjJINjkxLjZ2MTA1LjZjMCA0NS41LTcwLjcgNDYuNC03MC43IDBWMTI4LjNjMC0yMiAxOC0zOS44IDM5LjgtMzkuOGgxNjcuOGMzOS42IDAgNDAuNSA2Mi4yLjEgNjIuMnptMTkxLjEgMjMuNGMtMTY5LjMgMC0xNjkuMSAyNTIuNCAwIDI1Mi40IDE2OS45IDAgMTY5LjktMjUyLjQgMC0yNTIuNHptMCAxOTYuMWMtODEuNiAwLTgyLjEtMTM5LjggMC0xMzkuOCA4Mi41IDAgODIuNCAxMzkuOCAwIDEzOS44em0zNzIuNCA1My40Yy0xNy41IDAtMzEuNC0xMy45LTMxLjQtMzEuNHYtMTE3YzAtNjIuNC03Mi42LTUyLjUtOTkuMS0xNi40djEzMy40YzAgNDEuNS02My4zIDQxLjgtNjMuMyAwVjIwOGMwLTQwIDYzLjEtNDEuNiA2My4xIDB2My40YzQzLjMtNTEuNiAxNjIuNC02MC40IDE2Mi40IDM5LjN2MTQxLjVjLjMgMzAuNC0zMS41IDMxLjQtMzEuNyAzMS40em0xNzkuNyAyLjljLTQ0LjMgMC02OC4zLTIyLjktNjguMy02NS44VjIzNS4ySDE0ODhjLTM1LjYgMC0zNi43LTU1LjMgMC01NS4zaDE1LjV2LTM3LjNjMC00MS4zIDYzLjgtNDIuMSA2My44IDB2MzcuNWgyNC45YzM1LjQgMCAzNS43IDU1LjMgMCA1NS4zaC0yNC45djEwOC41YzAgMjkuNiAyNi4xIDI2LjMgMjcuNCAyNi4zIDMxLjQgMCA1Mi42IDU2LjMtMjIuOSA1Ni4zek0xOTkyIDEyM2MtMTkuNS01MC4yLTk1LjUtNTAtMTE0LjUgMC0xMDcuMyAyNzUuNy05OS41IDI1Mi43LTk5LjUgMjYyLjggMCA0Mi44IDU4LjMgNTEuMiA3Mi4xIDE0LjRsMTMuNS0zNS45SDIwMDZsMTMgMzUuOWMxNC4yIDM3LjcgNzIuMSAyNy4yIDcyLjEtMTQuNCAwLTEwLjEgNS4zIDYuOC05OS4xLTI2Mi44em0tMTA4LjkgMTc5LjFsNTEuNy0xNDIuOSA1MS44IDE0Mi45aC0xMDMuNXptNTkxLjMtODUuNmwtNTMuNyAxNzYuM2MtMTIuNCA0MS4yLTcyIDQxLTg0IDBsLTQyLjMtMTM1LjktNDIuMyAxMzUuOWMtMTIuNCA0MC45LTcyIDQxLjItODQuNSAwbC01NC4yLTE3Ni4zYy0xMi41LTM5LjQgNDkuOC01Ni4xIDYwLjItMTYuOUwyMjEzIDM0Mmw0NS4zLTEzOS41YzEwLjktMzIuNyA1OS42LTM0LjcgNzEuMiAwbDQ1LjMgMTM5LjUgMzkuMy0xNDIuNGMxMC4zLTM4LjMgNzIuNi0yMy44IDYwLjMgMTYuOXptMjc1LjQgNzUuMWMwLTQyLjQtMzMuOS0xMTcuNS0xMTkuNS0xMTcuNS03My4yIDAtMTI0LjQgNTYuMy0xMjQuNCAxMjYgMCA3Ny4yIDU1LjMgMTI2LjQgMTI4LjUgMTI2LjQgMzEuNyAwIDkzLTExLjUgOTMtMzkuOCAwLTE4LjMtMjEuMS0zMS41LTM5LjMtMjIuNC00OS40IDI2LjItMTA5IDguNC0xMTUuOS00My44aDE0OC4zYzE2LjMgMCAyOS4zLTEzLjQgMjkuMy0yOC45ek0yNTcxIDI3Ny43YzkuNS03My40IDExMy45LTY4LjYgMTE4LjYgMEgyNTcxem0zMTYuNyAxNDguOGMtMzEuNCAwLTgxLjYtMTAuNS05Ni42LTMxLjktMTIuNC0xNyAyLjUtMzkuOCAyMS44LTM5LjggMTYuMyAwIDM2LjggMjIuOSA3Ny43IDIyLjkgMjcuNCAwIDQwLjQtMTEgNDAuNC0yNS44IDAtMzkuOC0xNDIuOS03LjQtMTQyLjktMTAyIDAtNDAuNCAzNS4zLTc1LjcgOTguNi03NS43IDMxLjQgMCA3NC4xIDkuOSA4Ny42IDI5LjQgMTAuOCAxNC44LTEuNCAzNi4yLTIwLjkgMzYuMi0xNS4xIDAtMjYuNy0xNy4zLTY2LjItMTcuMy0yMi45IDAtMzcuOCAxMC41LTM3LjggMjMuOCAwIDM1LjkgMTQyLjQgNiAxNDIuNCAxMDMuMS0uMSA0My43LTM3LjQgNzcuMS0xMDQuMSA3Ny4xem0yNjYuOC0yNTIuNGMtMTY5LjMgMC0xNjkuMSAyNTIuNCAwIDI1Mi40IDE3MC4xIDAgMTY5LjYtMjUyLjQgMC0yNTIuNHptMCAxOTYuMWMtODEuOCAwLTgyLTEzOS44IDAtMTM5LjggODIuNSAwIDgyLjQgMTM5LjggMCAxMzkuOHptNDc2LjkgMjJWMjY4LjdjMC01My44LTYxLjQtNDUuOC04NS43LTEwLjV2MTM0YzAgNDEuMy02My44IDQyLjEtNjMuOCAwVjI2OC43YzAtNTIuMS01OS41LTQ3LjQtODUuNy0xMC4xdjEzMy42YzAgNDEuNS02My4zIDQxLjgtNjMuMyAwVjIwOGMwLTQwIDYzLjEtNDEuNiA2My4xIDB2My40YzkuOS0xNC40IDQxLjgtMzcuMyA3OC42LTM3LjMgMzUuMyAwIDU3LjcgMTYuNCA2Ni43IDQzLjggMTMuOS0yMS44IDQ1LjgtNDMuOCA4Mi42LTQzLjggNDQuMyAwIDcwLjcgMjMuNCA3MC43IDcyLjd2MTQ1LjNjLjUgMTcuMy0xMy41IDMxLjQtMzEuOSAzMS40IDMuNS4xLTMxLjMgMS4xLTMxLjMtMzEuM3pNMzk5MiAyOTEuNmMwLTQyLjQtMzIuNC0xMTcuNS0xMTcuOS0xMTcuNS03My4yIDAtMTI3LjUgNTYuMy0xMjcuNSAxMjYgMCA3Ny4yIDU4LjMgMTI2LjQgMTMxLjYgMTI2LjQgMzEuNyAwIDkxLjUtMTEuNSA5MS41LTM5LjggMC0xOC4zLTIxLjEtMzEuNS0zOS4zLTIyLjQtNDkuNCAyNi4yLTExMC41IDguNC0xMTcuNS00My44aDE0OS44YzE2LjMgMCAyOS4xLTEzLjQgMjkuMy0yOC45em0tMTgwLjUtMTMuOWM5LjctNzQuNCAxMTUuOS02OC4zIDEyMC4xIDBoLTEyMC4xelwiXSxmcm93bjpbNDk2LDUxMixbXSxcImYxMTlcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bS04MC0yMTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem0xNjAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyem0tODAgMTI4Yy00MC4yIDAtNzggMTcuNy0xMDMuOCA0OC42LTguNSAxMC4yLTcuMSAyNS4zIDMuMSAzMy44IDEwLjIgOC40IDI1LjMgNy4xIDMzLjgtMy4xIDE2LjYtMTkuOSA0MS0zMS40IDY2LjktMzEuNHM1MC4zIDExLjQgNjYuOSAzMS40YzguMSA5LjcgMjMuMSAxMS45IDMzLjggMy4xIDEwLjItOC41IDExLjUtMjMuNiAzLjEtMzMuOEMzMjYgMzIxLjcgMjg4LjIgMzA0IDI0OCAzMDR6XCJdLFwiZnJvd24tb3BlblwiOls0OTYsNTEyLFtdLFwiZjU3YVwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy0xMTAuMyAwLTIwMC04OS43LTIwMC0yMDBTMTM3LjcgNTYgMjQ4IDU2czIwMCA4OS43IDIwMCAyMDAtODkuNyAyMDAtMjAwIDIwMHptLTQ4LTI0OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJ6bTEyOC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6bS04MCAxMTJjLTM1LjYgMC04OC44IDIxLjMtOTUuOCA2MS4yLTIgMTEuOCA5IDIxLjUgMjAuNSAxOC4xIDMxLjItOS42IDU5LjQtMTUuMyA3NS4zLTE1LjNzNDQuMSA1LjcgNzUuMyAxNS4zYzExLjQgMy41IDIyLjUtNi4zIDIwLjUtMTguMS03LTM5LjktNjAuMi02MS4yLTk1LjgtNjEuMnpcIl0sZnV0Ym9sOls0OTYsNTEyLFtdLFwiZjFlM1wiLFwiTTQ4My44IDE3OS40QzQ0OS44IDc0LjYgMzUyLjYgOCAyNDguMSA4Yy0yNS40IDAtNTEuMiAzLjktNzYuNyAxMi4yQzQxLjIgNjIuNS0zMC4xIDIwMi40IDEyLjIgMzMyLjYgNDYuMiA0MzcuNCAxNDMuNCA1MDQgMjQ3LjkgNTA0YzI1LjQgMCA1MS4yLTMuOSA3Ni43LTEyLjIgMTMwLjItNDIuMyAyMDEuNS0xODIuMiAxNTkuMi0zMTIuNHptLTc0LjUgMTkzLjdsLTUyLjIgNi40LTQzLjctNjAuOSAyNC40LTc1LjIgNzEuMS0yMi4xIDM4LjkgMzYuNGMtLjIgMzAuNy03LjQgNjEuMS0yMS43IDg5LjItNC43IDkuMy0xMC43IDE3LjgtMTYuOCAyNi4yem0wLTIzNS40bC0xMC40IDUzLjEtNzAuNyAyMi02NC4yLTQ2LjVWOTIuNWw0Ny40LTI2LjJjMzkuMiAxMyA3My40IDM4IDk3LjkgNzEuNHpNMTg0LjkgNjYuNEwyMzIgOTIuNXY3My44bC02NC4yIDQ2LjUtNzAuNi0yMi0xMC4xLTUyLjVjMjQuMy0zMy40IDU3LjktNTguNiA5Ny44LTcxLjl6TTEzOSAzNzkuNUw4NS45IDM3M2MtMTQuNC0yMC4xLTM3LjMtNTkuNi0zNy44LTExNS4zbDM5LTM2LjQgNzEuMSAyMi4yIDI0LjMgNzQuMy00My41IDYxLjd6bTQ4LjIgNjdsLTIyLjQtNDguMSA0My42LTYxLjdIMjg3bDQ0LjMgNjEuNy0yMi40IDQ4LjFjLTYuMiAxLjgtNTcuNiAyMC40LTEyMS43IDB6XCJdLGdlbTpbNTc2LDUxMixbXSxcImYzYTVcIixcIk00NjQgMEgxMTJjLTQgMC03LjggMi0xMCA1LjRMMiAxNTIuNmMtMi45IDQuNC0yLjYgMTAuMi43IDE0LjJsMjc2IDM0MC44YzQuOCA1LjkgMTMuOCA1LjkgMTguNiAwbDI3Ni0zNDAuOGMzLjMtNC4xIDMuNi05LjguNy0xNC4yTDQ3NC4xIDUuNEM0NzEuOCAyIDQ2OC4xIDAgNDY0IDB6bS0xOS4zIDQ4bDYzLjMgOTZoLTY4LjRsLTUxLjctOTZoNTYuOHptLTIwMi4xIDBoOTAuN2w1MS43IDk2SDE5MWw1MS42LTk2em0tMTExLjMgMGg1Ni44bC01MS43IDk2SDY4bDYzLjMtOTZ6bS00MyAxNDRoNTEuNEwyMDggMzUyIDg4LjMgMTkyem0xMDIuOSAwaDE5My42TDI4OCA0MzUuMyAxOTEuMiAxOTJ6TTM2OCAzNTJsNjguMi0xNjBoNTEuNEwzNjggMzUyelwiXSxncmltYWNlOls0OTYsNTEyLFtdLFwiZjU3ZlwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy0xMTAuMyAwLTIwMC04OS43LTIwMC0yMDBTMTM3LjcgNTYgMjQ4IDU2czIwMCA4OS43IDIwMCAyMDAtODkuNyAyMDAtMjAwIDIwMHptLTgwLTIxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6bTE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnptMTYgMTZIMTUyYy0yNi41IDAtNDggMjEuNS00OCA0OHYzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgxOTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDh2LTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tMTY4IDk2aC0yNGMtOC44IDAtMTYtNy4yLTE2LTE2di04aDQwdjI0em0wLTQwaC00MHYtOGMwLTguOCA3LjItMTYgMTYtMTZoMjR2MjR6bTY0IDQwaC00OHYtMjRoNDh2MjR6bTAtNDBoLTQ4di0yNGg0OHYyNHptNjQgNDBoLTQ4di0yNGg0OHYyNHptMC00MGgtNDh2LTI0aDQ4djI0em01NiAyNGMwIDguOC03LjIgMTYtMTYgMTZoLTI0di0yNGg0MHY4em0wLTI0aC00MHYtMjRoMjRjOC44IDAgMTYgNy4yIDE2IDE2djh6XCJdLGdyaW46WzQ5Niw1MTIsW10sXCJmNTgwXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMCA0NDhjLTExMC4zIDAtMjAwLTg5LjctMjAwLTIwMFMxMzcuNyA1NiAyNDggNTZzMjAwIDg5LjcgMjAwIDIwMC04OS43IDIwMC0yMDAgMjAwem0xMDUuNi0xNTEuNGMtMjUuOSA4LjMtNjQuNCAxMy4xLTEwNS42IDEzLjFzLTc5LjYtNC44LTEwNS42LTEzLjFjLTkuOS0zLjEtMTkuNCA1LjQtMTcuNyAxNS4zIDcuOSA0Ny4xIDcxLjMgODAgMTIzLjMgODBzMTE1LjMtMzIuOSAxMjMuMy04MGMxLjYtOS44LTcuNy0xOC40LTE3LjctMTUuM3pNMTY4IDI0MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6bTE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnpcIl0sXCJncmluLWFsdFwiOls0OTYsNTEyLFtdLFwiZjU4MVwiLFwiTTIwMC4zIDI0OGMxMi40LTE4LjcgMTUuMS0zNy4zIDE1LjctNTYtLjUtMTguNy0zLjMtMzcuMy0xNS43LTU2LTgtMTItMjUuMS0xMS40LTMyLjcgMC0xMi40IDE4LjctMTUuMSAzNy4zLTE1LjcgNTYgLjUgMTguNyAzLjMgMzcuMyAxNS43IDU2IDguMSAxMiAyNS4yIDExLjQgMzIuNyAwem0xMjggMGMxMi40LTE4LjcgMTUuMS0zNy4zIDE1LjctNTYtLjUtMTguNy0zLjMtMzcuMy0xNS43LTU2LTgtMTItMjUuMS0xMS40LTMyLjcgMC0xMi40IDE4LjctMTUuMSAzNy4zLTE1LjcgNTYgLjUgMTguNyAzLjMgMzcuMyAxNS43IDU2IDguMSAxMiAyNS4yIDExLjQgMzIuNyAwek0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTEwNS42LTE1MS40Yy0yNS45IDguMy02NC40IDEzLjEtMTA1LjYgMTMuMXMtNzkuNi00LjgtMTA1LjYtMTMuMWMtOS45LTMuMS0xOS40IDUuMy0xNy43IDE1LjMgNy45IDQ3LjIgNzEuMyA4MCAxMjMuMyA4MHMxMTUuMy0zMi45IDEyMy4zLTgwYzEuNi05LjgtNy43LTE4LjQtMTcuNy0xNS4zelwiXSxcImdyaW4tYmVhbVwiOls0OTYsNTEyLFtdLFwiZjU4MlwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy0xMTAuMyAwLTIwMC04OS43LTIwMC0yMDBTMTM3LjcgNTYgMjQ4IDU2czIwMCA4OS43IDIwMCAyMDAtODkuNyAyMDAtMjAwIDIwMHptMTA1LjYtMTUxLjRjLTI1LjkgOC4zLTY0LjQgMTMuMS0xMDUuNiAxMy4xcy03OS42LTQuOC0xMDUuNi0xMy4xYy05LjgtMy4xLTE5LjQgNS4zLTE3LjcgMTUuMyA3LjkgNDcuMSA3MS4zIDgwIDEyMy4zIDgwczExNS4zLTMyLjkgMTIzLjMtODBjMS42LTkuOC03LjctMTguNC0xNy43LTE1LjN6bS0yMzUuOS03Mi45YzMuNSAxLjEgNy40LS41IDkuMy0zLjdsOS41LTE3YzcuNy0xMy43IDE5LjItMjEuNiAzMS41LTIxLjZzMjMuOCA3LjkgMzEuNSAyMS42bDkuNSAxN2MyLjEgMy43IDYuMiA0LjcgOS4zIDMuNyAzLjYtMS4xIDYtNC41IDUuNy04LjMtMy4zLTQyLjEtMzIuMi03MS40LTU2LTcxLjRzLTUyLjcgMjkuMy01NiA3MS40Yy0uMyAzLjcgMi4xIDcuMiA1LjcgOC4zem0xNjAgMGMzLjUgMS4xIDcuNC0uNSA5LjMtMy43bDkuNS0xN2M3LjctMTMuNyAxOS4yLTIxLjYgMzEuNS0yMS42czIzLjggNy45IDMxLjUgMjEuNmw5LjUgMTdjMi4xIDMuNyA2LjIgNC43IDkuMyAzLjcgMy42LTEuMSA2LTQuNSA1LjctOC4zLTMuMy00Mi4xLTMyLjItNzEuNC01Ni03MS40cy01Mi43IDI5LjMtNTYgNzEuNGMtLjMgMy43IDIuMSA3LjIgNS43IDguM3pcIl0sXCJncmluLWJlYW0tc3dlYXRcIjpbNDk2LDUxMixbXSxcImY1ODNcIixcIk00NDAgMTYwYzI5LjUgMCA1My4zLTI2LjMgNTMuMy01OC43IDAtMjUtMzEuNy03NS41LTQ2LjItOTcuMy0zLjYtNS4zLTEwLjctNS4zLTE0LjIgMC0xNC41IDIxLjgtNDYuMiA3Mi4zLTQ2LjIgOTcuMyAwIDMyLjQgMjMuOCA1OC43IDUzLjMgNTguN3pNMjQ4IDQwMGM1MS45IDAgMTE1LjMtMzIuOSAxMjMuMy04MCAxLjctOS45LTcuNy0xOC41LTE3LjctMTUuMy0yNS45IDguMy02NC40IDEzLjEtMTA1LjYgMTMuMXMtNzkuNi00LjgtMTA1LjYtMTMuMWMtOS44LTMuMS0xOS40IDUuMy0xNy43IDE1LjMgOCA0Ny4xIDcxLjQgODAgMTIzLjMgODB6bTEzMC4zLTE2OC4zYzMuNi0xLjEgNi00LjUgNS43LTguMy0zLjMtNDIuMS0zMi4yLTcxLjQtNTYtNzEuNHMtNTIuNyAyOS4zLTU2IDcxLjRjLS4zIDMuNyAyLjEgNy4yIDUuNyA4LjMgMy41IDEuMSA3LjQtLjUgOS4zLTMuN2w5LjUtMTdjNy43LTEzLjcgMTkuMi0yMS42IDMxLjUtMjEuNnMyMy44IDcuOSAzMS41IDIxLjZsOS41IDE3YzIuMSAzLjYgNi4yIDQuNiA5LjMgMy43em0xMDUuMy01Mi45Yy0yNC42IDE1LjctNDYgMTIuOS00Ni40IDEyLjkgNi45IDIwLjIgMTAuOCA0MS44IDEwLjggNjQuMyAwIDExMC4zLTg5LjcgMjAwLTIwMCAyMDBTNDggMzY2LjMgNDggMjU2IDEzNy43IDU2IDI0OCA1NmMzOS44IDAgNzYuOCAxMS44IDEwOCAzMS45IDEuNy05LjUgNi4zLTI0LjEgMTcuMi00NS43QzMzNi40IDIwLjYgMjkzLjcgOCAyNDggOCAxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4YzAtMjctNC40LTUyLjktMTIuNC03Ny4yek0xNjggMTg5LjRjMTIuMyAwIDIzLjggNy45IDMxLjUgMjEuNmw5LjUgMTdjMi4xIDMuNyA2LjIgNC43IDkuMyAzLjcgMy42LTEuMSA2LTQuNSA1LjctOC4zLTMuMy00Mi4xLTMyLjItNzEuNC01Ni03MS40cy01Mi43IDI5LjMtNTYgNzEuNGMtLjMgMy43IDIuMSA3LjIgNS43IDguMyAzLjUgMS4xIDcuNC0uNSA5LjMtMy43bDkuNS0xN2M3LjctMTMuOCAxOS4yLTIxLjYgMzEuNS0yMS42elwiXSxcImdyaW4taGVhcnRzXCI6WzQ5Niw1MTIsW10sXCJmNTg0XCIsXCJNMzUzLjYgMzA0LjZjLTI1LjkgOC4zLTY0LjQgMTMuMS0xMDUuNiAxMy4xcy03OS42LTQuOC0xMDUuNi0xMy4xYy05LjgtMy4xLTE5LjQgNS4zLTE3LjcgMTUuMyA3LjkgNDcuMiA3MS4zIDgwIDEyMy4zIDgwczExNS4zLTMyLjkgMTIzLjMtODBjMS42LTkuOC03LjctMTguNC0xNy43LTE1LjN6bS0xNTIuOC00OC45YzQuNSAxLjIgOS4yLTEuNSAxMC41LTZsMTkuNC02OS45YzUuNi0yMC4zLTcuNC00MS4xLTI4LjgtNDQuNS0xOC42LTMtMzYuNCA5LjgtNDEuNSAyNy45bC0yIDcuMS03LjEtMS45Yy0xOC4yLTQuNy0zOC4yIDQuMy00NC45IDIyLTcuNyAyMC4yIDMuOCA0MS45IDI0LjIgNDcuMmw3MC4yIDE4LjF6bTE4OC44LTY1LjNjLTYuNy0xNy42LTI2LjctMjYuNy00NC45LTIybC03LjEgMS45LTItNy4xYy01LTE4LjEtMjIuOC0zMC45LTQxLjUtMjcuOS0yMS40IDMuNC0zNC40IDI0LjItMjguOCA0NC41bDE5LjQgNjkuOWMxLjIgNC41IDUuOSA3LjIgMTAuNSA2bDcwLjItMTguMmMyMC40LTUuMyAzMS45LTI2LjkgMjQuMi00Ny4xek0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6XCJdLFwiZ3Jpbi1zcXVpbnRcIjpbNDk2LDUxMixbXSxcImY1ODVcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTEwNS42LTE1MS40Yy0yNS45IDguMy02NC40IDEzLjEtMTA1LjYgMTMuMXMtNzkuNi00LjgtMTA1LjYtMTMuMWMtOS45LTMuMS0xOS40IDUuNC0xNy43IDE1LjMgNy45IDQ3LjEgNzEuMyA4MCAxMjMuMyA4MHMxMTUuMy0zMi45IDEyMy4zLTgwYzEuNi05LjgtNy43LTE4LjQtMTcuNy0xNS4zem0tMjM0LjctNDAuOGMzLjYgNC4yIDkuOSA1LjcgMTUuMyAyLjVsODAtNDhjMy42LTIuMiA1LjgtNi4xIDUuOC0xMC4zcy0yLjItOC4xLTUuOC0xMC4zbC04MC00OGMtNS4xLTMtMTEuNC0xLjktMTUuMyAyLjUtMy44IDQuNS0zLjggMTEtLjEgMTUuNWwzMy42IDQwLjMtMzMuNiA0MC4zYy0zLjggNC41LTMuNyAxMS4xLjEgMTUuNXptMjQyLjkgMi41YzUuNCAzLjIgMTEuNyAxLjcgMTUuMy0yLjUgMy44LTQuNSAzLjgtMTEgLjEtMTUuNUwzNDMuNiAyMDhsMzMuNi00MC4zYzMuOC00LjUgMy43LTExLS4xLTE1LjUtMy44LTQuNC0xMC4yLTUuNC0xNS4zLTIuNWwtODAgNDhjLTMuNiAyLjItNS44IDYuMS01LjggMTAuM3MyLjIgOC4xIDUuOCAxMC4zbDgwIDQ4elwiXSxcImdyaW4tc3F1aW50LXRlYXJzXCI6WzUxMiw1MTIsW10sXCJmNTg2XCIsXCJNMTE3LjEgMzg0LjFjLTI1LjggMy43LTg0IDEzLjctMTAwLjkgMzAuNi0yMS45IDIxLjktMjEuNSA1Ny45LjkgODAuM3M1OC4zIDIyLjggODAuMy45QzExNC4zIDQ3OSAxMjQuMyA0MjAuOCAxMjggMzk1Yy44LTYuNC00LjYtMTEuOC0xMC45LTEwLjl6bS00MS4yLTQxLjdDNDAuMyAyNjggNTMgMTc2LjEgMTE0LjYgMTE0LjYgMTUyLjQgNzYuOCAyMDIuNiA1NiAyNTYgNTZjMzYuMiAwIDcwLjggOS44IDEwMS4yIDI3LjcgMy44LTIwLjMgOC0zNi4xIDEyLTQ4LjNDMzMzLjggMTcuMiAyOTQuOSA4IDI1NiA4IDE5Mi41IDggMTI5LjEgMzIuMiA4MC42IDgwLjZjLTc0LjEgNzQuMS05MS4zIDE4My40LTUyIDI3NCAxMi4yLTQuMSAyNy43LTguMyA0Ny4zLTEyLjJ6bTM1Mi4zLTE4Ny42YzQ1IDc2LjYgMzQuOSAxNzYuOS0zMC44IDI0Mi42LTM3LjggMzcuOC04OCA1OC42LTE0MS40IDU4LjYtMzAuNSAwLTU5LjgtNy04Ni40LTE5LjgtMy45IDE5LjUtOCAzNS0xMi4yIDQ3LjIgMzEuNCAxMy42IDY1IDIwLjYgOTguNyAyMC42IDYzLjUgMCAxMjYuOS0yNC4yIDE3NS40LTcyLjYgNzguMS03OC4xIDkzLjEtMTk1LjQgNDUuMi0yODguNi0xMi4zIDQtMjguMiA4LjEtNDguNSAxMnptLTMzLjMtMjYuOWMyNS44LTMuNyA4NC0xMy43IDEwMC45LTMwLjYgMjEuOS0yMS45IDIxLjUtNTcuOS0uOS04MC4zcy01OC4zLTIyLjgtODAuMy0uOUMzOTcuNyAzMyAzODcuNyA5MS4yIDM4NCAxMTdjLS44IDYuNCA0LjYgMTEuOCAxMC45IDEwLjl6bS0xODcgMTA4LjNjLTMtMy03LjItNC4yLTExLjQtMy4yTDEwNiAyNTUuN2MtNS43IDEuNC05LjUgNi43LTkuMSAxMi42LjUgNS44IDUuMSAxMC41IDEwLjkgMTFsNTIuMyA0LjggNC44IDUyLjNjLjUgNS44IDUuMiAxMC40IDExIDEwLjloLjljNS41IDAgMTAuMy0zLjcgMTEuNy05LjFsMjIuNi05MC41YzEtNC4yLS4yLTguNS0zLjItMTEuNXptMzkuNy0yNS4xbDkwLjUtMjIuNmM1LjctMS40IDkuNS02LjcgOS4xLTEyLjYtLjUtNS44LTUuMS0xMC41LTEwLjktMTFsLTUyLjMtNC44LTQuOC01Mi4zYy0uNS01LjgtNS4yLTEwLjQtMTEtMTAuOS01LjYtLjEtMTEuMiAzLjQtMTIuNiA5LjFMMjMzIDE5Ni41Yy0xIDQuMS4yIDguNCAzLjIgMTEuNCA1IDUgMTEuMyAzLjIgMTEuNCAzLjJ6bTUyIDg4LjVjLTI5LjEgMjkuMS01OS43IDUyLjktODMuOSA2NS40LTkuMiA0LjgtMTAgMTcuNS0xLjcgMjMuNCAzOC45IDI3LjcgMTA3IDYuMiAxNDMuNy0zMC42UzQxNiAyNTMgMzg4LjMgMjE0LjFjLTUuOC04LjItMTguNS03LjYtMjMuNCAxLjctMTIuMyAyNC4yLTM2LjIgNTQuNy02NS4zIDgzLjh6XCJdLFwiZ3Jpbi1zdGFyc1wiOls0OTYsNTEyLFtdLFwiZjU4N1wiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy0xMTAuMyAwLTIwMC04OS43LTIwMC0yMDBTMTM3LjcgNTYgMjQ4IDU2czIwMCA4OS43IDIwMCAyMDAtODkuNyAyMDAtMjAwIDIwMHptMTA1LjYtMTUxLjRjLTI1LjkgOC4zLTY0LjQgMTMuMS0xMDUuNiAxMy4xcy03OS42LTQuOC0xMDUuNi0xMy4xYy05LjgtMy4xLTE5LjQgNS4zLTE3LjcgMTUuMyA3LjkgNDcuMiA3MS4zIDgwIDEyMy4zIDgwczExNS4zLTMyLjkgMTIzLjMtODBjMS42LTkuOC03LjctMTguNC0xNy43LTE1LjN6bS0yMjcuOS01Ny41Yy0xIDYuMiA1LjQgMTEgMTEgNy45bDMxLjMtMTYuMyAzMS4zIDE2LjNjNS42IDMuMSAxMi0xLjcgMTEtNy45bC02LTM0LjkgMjUuNC0yNC42YzQuNS00LjUgMS45LTEyLjItNC4zLTEzLjJsLTM0LjktNS0xNS41LTMxLjZjLTIuOS01LjgtMTEtNS44LTEzLjkgMGwtMTUuNSAzMS42LTM0LjkgNWMtNi4yLjktOC45IDguNi00LjMgMTMuMmwyNS40IDI0LjYtNi4xIDM0Ljl6bTI1OS43LTcyLjdsLTM0LjktNS0xNS41LTMxLjZjLTIuOS01LjgtMTEtNS44LTEzLjkgMGwtMTUuNSAzMS42LTM0LjkgNWMtNi4yLjktOC45IDguNi00LjMgMTMuMmwyNS40IDI0LjYtNiAzNC45Yy0xIDYuMiA1LjQgMTEgMTEgNy45bDMxLjMtMTYuMyAzMS4zIDE2LjNjNS42IDMuMSAxMi0xLjcgMTEtNy45bC02LTM0LjkgMjUuNC0yNC42YzQuNS00LjYgMS44LTEyLjItNC40LTEzLjJ6XCJdLFwiZ3Jpbi10ZWFyc1wiOls2NDAsNTEyLFtdLFwiZjU4OFwiLFwiTTExNy4xIDI1Ni4xYy0yNS44IDMuNy04NCAxMy43LTEwMC45IDMwLjYtMjEuOSAyMS45LTIxLjUgNTcuOS45IDgwLjNzNTguMyAyMi44IDgwLjMuOUMxMTQuMyAzNTEgMTI0LjMgMjkyLjggMTI4IDI2N2MuOC02LjQtNC42LTExLjgtMTAuOS0xMC45em01MDYuNyAzMC42Yy0xNi45LTE2LjktNzUuMS0yNi45LTEwMC45LTMwLjYtNi4zLS45LTExLjcgNC41LTEwLjggMTAuOCAzLjcgMjUuOCAxMy43IDg0IDMwLjYgMTAwLjkgMjEuOSAyMS45IDU3LjkgMjEuNSA4MC4zLS45IDIyLjMtMjIuMyAyMi43LTU4LjMuOC04MC4yem0tMTI2LjYgNjEuN0M0NjMuOCA0MTIuMyAzOTYuOSA0NTYgMzIwIDQ1NmMtNzYuOSAwLTE0My44LTQzLjctMTc3LjItMTA3LjYtMTIuNSAzNy40LTI1LjIgNDMuOS0yOC4zIDQ2LjVDMTU5LjEgNDYwLjcgMjM0LjUgNTA0IDMyMCA1MDRzMTYwLjktNDMuMyAyMDUuNS0xMDkuMWMtMy4yLTIuNy0xNS45LTkuMi0yOC4zLTQ2LjV6TTEyMi43IDIyNC41QzEzNy45IDEyOS4yIDIyMC41IDU2IDMyMCA1NmM5OS41IDAgMTgyLjEgNzMuMiAxOTcuMyAxNjguNSAyLjEtLjIgNS4yLTIuNCA0OS41IDdDNTU0LjQgMTA2IDQ0OC43IDggMzIwIDhTODUuNiAxMDYgNzMuMiAyMzEuNGM0NC41LTkuNCA0Ny4xLTcuMiA0OS41LTYuOXpNMzIwIDQwMGM1MS45IDAgMTE1LjMtMzIuOSAxMjMuMy04MCAxLjctOS45LTcuNy0xOC41LTE3LjctMTUuMy0yNS45IDguMy02NC40IDEzLjEtMTA1LjYgMTMuMXMtNzkuNi00LjgtMTA1LjYtMTMuMWMtOS44LTMuMS0xOS40IDUuMy0xNy43IDE1LjMgOCA0Ny4xIDcxLjQgODAgMTIzLjMgODB6bTEzMC4zLTE2OC4zYzMuNi0xLjEgNi00LjUgNS43LTguMy0zLjMtNDIuMS0zMi4yLTcxLjQtNTYtNzEuNHMtNTIuNyAyOS4zLTU2IDcxLjRjLS4zIDMuNyAyLjEgNy4yIDUuNyA4LjMgMy41IDEuMSA3LjQtLjUgOS4zLTMuN2w5LjUtMTdjNy43LTEzLjcgMTkuMi0yMS42IDMxLjUtMjEuNnMyMy44IDcuOSAzMS41IDIxLjZsOS41IDE3YzIuMSAzLjYgNi4yIDQuNiA5LjMgMy43ek0yNDAgMTg5LjRjMTIuMyAwIDIzLjggNy45IDMxLjUgMjEuNmw5LjUgMTdjMi4xIDMuNyA2LjIgNC43IDkuMyAzLjcgMy42LTEuMSA2LTQuNSA1LjctOC4zLTMuMy00Mi4xLTMyLjItNzEuNC01Ni03MS40cy01Mi43IDI5LjMtNTYgNzEuNGMtLjMgMy43IDIuMSA3LjIgNS43IDguMyAzLjUgMS4xIDcuNC0uNSA5LjMtMy43bDkuNS0xN2M3LjctMTMuOCAxOS4yLTIxLjYgMzEuNS0yMS42elwiXSxcImdyaW4tdG9uZ3VlXCI6WzQ5Niw1MTIsW10sXCJmNTg5XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptNjQgNDAwYzAgMzUuNi0yOS4xIDY0LjUtNjQuOSA2NC0zNS4xLS41LTYzLjEtMjkuOC02My4xLTY1di00Mi44bDE3LjctOC44YzE1LTcuNSAzMS41IDEuNyAzNC45IDE2LjVsMi44IDEyLjFjMi4xIDkuMiAxNS4yIDkuMiAxNy4zIDBsMi44LTEyLjFjMy40LTE0LjggMTkuOC0yNC4xIDM0LjktMTYuNWwxNy43IDguOFY0MDh6bTI4LjIgMjUuM2MyLjItOC4xIDMuOC0xNi41IDMuOC0yNS4zdi00My41YzE0LjItMTIuNCAyNC40LTI3LjUgMjcuMy00NC41IDEuNy05LjktNy43LTE4LjUtMTcuNy0xNS4zLTI1LjkgOC4zLTY0LjQgMTMuMS0xMDUuNiAxMy4xcy03OS42LTQuOC0xMDUuNi0xMy4xYy05LjktMy4xLTE5LjQgNS4zLTE3LjcgMTUuMyAyLjkgMTcgMTMuMSAzMi4xIDI3LjMgNDQuNVY0MDhjMCA4LjggMS42IDE3LjIgMy44IDI1LjNDOTEuOCAzOTkuOSA0OCAzMzMgNDggMjU2YzAtMTEwLjMgODkuNy0yMDAgMjAwLTIwMHMyMDAgODkuNyAyMDAgMjAwYzAgNzctNDMuOCAxNDMuOS0xMDcuOCAxNzcuM3pNMTY4IDE3NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6bTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpcIl0sXCJncmluLXRvbmd1ZS1zcXVpbnRcIjpbNDk2LDUxMixbXSxcImY1OGFcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em02NCA0MDBjMCAzNS42LTI5LjEgNjQuNS02NC45IDY0LTM1LjEtLjUtNjMuMS0yOS44LTYzLjEtNjV2LTQyLjhsMTcuNy04LjhjMTUtNy41IDMxLjUgMS43IDM0LjkgMTYuNWwyLjggMTIuMWMyLjEgOS4yIDE1LjIgOS4yIDE3LjMgMGwyLjgtMTIuMWMzLjQtMTQuOCAxOS44LTI0LjEgMzQuOS0xNi41bDE3LjcgOC44VjQwOHptMjguMiAyNS4zYzIuMi04LjEgMy44LTE2LjUgMy44LTI1LjN2LTQzLjVjMTQuMi0xMi40IDI0LjQtMjcuNSAyNy4zLTQ0LjUgMS43LTkuOS03LjctMTguNS0xNy43LTE1LjMtMjUuOSA4LjMtNjQuNCAxMy4xLTEwNS42IDEzLjFzLTc5LjYtNC44LTEwNS42LTEzLjFjLTkuOS0zLjEtMTkuNCA1LjMtMTcuNyAxNS4zIDIuOSAxNyAxMy4xIDMyLjEgMjcuMyA0NC41VjQwOGMwIDguOCAxLjYgMTcuMiAzLjggMjUuM0M5MS44IDM5OS45IDQ4IDMzMyA0OCAyNTZjMC0xMTAuMyA4OS43LTIwMCAyMDAtMjAwczIwMCA4OS43IDIwMCAyMDBjMCA3Ny00My44IDE0My45LTEwNy44IDE3Ny4zem0zNi45LTI4MS4xYy0zLjgtNC40LTEwLjMtNS41LTE1LjMtMi41bC04MCA0OGMtMy42IDIuMi01LjggNi4xLTUuOCAxMC4zczIuMiA4LjEgNS44IDEwLjNsODAgNDhjNS40IDMuMiAxMS43IDEuNyAxNS4zLTIuNSAzLjgtNC41IDMuOC0xMSAuMS0xNS41TDM0My42IDIwOGwzMy42LTQwLjNjMy44LTQuNSAzLjctMTEuMS0uMS0xNS41em0tMTYyLjkgNDUuNWwtODAtNDhjLTUtMy0xMS40LTItMTUuMyAyLjUtMy44IDQuNS0zLjggMTEtLjEgMTUuNWwzMy42IDQwLjMtMzMuNiA0MC4zYy0zLjggNC41LTMuNyAxMSAuMSAxNS41IDMuNiA0LjIgOS45IDUuNyAxNS4zIDIuNWw4MC00OGMzLjYtMi4yIDUuOC02LjEgNS44LTEwLjNzLTIuMi04LjEtNS44LTEwLjN6XCJdLFwiZ3Jpbi10b25ndWUtd2lua1wiOls0OTYsNTEyLFtdLFwiZjU4YlwiLFwiTTE1MiAxODBjLTI1LjcgMC01NS45IDE2LjktNTkuOCA0Mi4xLS44IDUgMS43IDEwIDYuMSAxMi40IDQuNCAyLjQgOS45IDEuOCAxMy43LTEuNmw5LjUtOC41YzE0LjgtMTMuMiA0Ni4yLTEzLjIgNjEgMGw5LjUgOC41YzIuNSAyLjIgOCA0LjcgMTMuNyAxLjYgNC40LTIuNCA2LjktNy40IDYuMS0xMi40LTMuOS0yNS4yLTM0LjEtNDIuMS01OS44LTQyLjF6bTE3Ni01MmMtNDQuMiAwLTgwIDM1LjgtODAgODBzMzUuOCA4MCA4MCA4MCA4MC0zNS44IDgwLTgwLTM1LjgtODAtODAtODB6bTAgMTI4Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4IDQ4IDIxLjUgNDggNDgtMjEuNSA0OC00OCA0OHptMC03MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0LTEwLjctMjQtMjQtMjR6TTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTY0IDQwMGMwIDM1LjYtMjkuMSA2NC41LTY0LjkgNjQtMzUuMS0uNS02My4xLTI5LjgtNjMuMS02NXYtNDIuOGwxNy43LTguOGMxNS03LjUgMzEuNSAxLjcgMzQuOSAxNi41bDIuOCAxMi4xYzIuMSA5LjIgMTUuMiA5LjIgMTcuMyAwbDIuOC0xMi4xYzMuNC0xNC44IDE5LjgtMjQuMSAzNC45LTE2LjVsMTcuNyA4LjhWNDA4em0yOC4yIDI1LjNjMi4yLTguMSAzLjgtMTYuNSAzLjgtMjUuM3YtNDMuNWMxNC4yLTEyLjQgMjQuNC0yNy41IDI3LjMtNDQuNSAxLjctOS45LTcuNy0xOC41LTE3LjctMTUuMy0yNS45IDguMy02NC40IDEzLjEtMTA1LjYgMTMuMXMtNzkuNi00LjgtMTA1LjYtMTMuMWMtOS45LTMuMS0xOS40IDUuMy0xNy43IDE1LjMgMi45IDE3IDEzLjEgMzIuMSAyNy4zIDQ0LjVWNDA4YzAgOC44IDEuNiAxNy4yIDMuOCAyNS4zQzkxLjggMzk5LjkgNDggMzMzIDQ4IDI1NmMwLTExMC4zIDg5LjctMjAwIDIwMC0yMDBzMjAwIDg5LjcgMjAwIDIwMGMwIDc3LTQzLjggMTQzLjktMTA3LjggMTc3LjN6XCJdLFwiZ3Jpbi13aW5rXCI6WzQ5Niw1MTIsW10sXCJmNThjXCIsXCJNMCAyNTZjMCAxMzcgMTExIDI0OCAyNDggMjQ4czI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOCAwIDExOSAwIDI1NnptMjAwLTQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMnptMTY4IDI1bC05LjUtOC41Yy0xNC44LTEzLjItNDYuMi0xMy4yLTYxIDBMMjg4IDIzM2MtOC4zIDcuNC0yMS42LjQtMTkuOC0xMC44IDQtMjUuMiAzNC4yLTQyLjEgNTkuOS00Mi4xUzM4NCAxOTcgMzg4IDIyMi4yYzEuNiAxMS0xMS41IDE4LjItMjAgMTAuOHptLTI0My4xIDg3LjhDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuMy0zLjcgMjIuNiA2IDIwLjcgMTcuOS05LjIgNTUtODMuMiA5My4zLTE0My44IDkzLjNzLTEzNC41LTM4LjMtMTQzLjgtOTMuM2MtMi0xMS45IDkuMy0yMS42IDIwLjctMTcuOXpcIl0sXCJoYW5kLWxpemFyZFwiOls1NzYsNTEyLFtdLFwiZjI1OFwiLFwiTTU1Ni42ODYgMjkwLjU0Mkw0MTAuMzI4IDY0LjgyOUMzOTcuMDAxIDQ0LjI3MiAzNzQuNDE3IDMyIDM0OS45MTcgMzJINTZDMjUuMTIxIDMyIDAgNTcuMTIyIDAgODh2OGMwIDQ0LjExMiAzNS44ODggODAgODAgODBoMTk2LjA0MmwtMTguMzMzIDQ4SDE0NGMtNDguNTIzIDAtODggMzkuNDc3LTg4IDg4IDAgMzAuODc5IDI1LjEyMSA1NiA1NiA1NmgxMzEuNTUyYzIuOTg3IDAgNS45MTQuNTQ5IDguNjk3IDEuNjMxTDM1MiA0MDguNDE4VjQ4MGgyMjRWMzU1LjgyOWMwLTIzLjIyNS02LjY3OS00NS44MDEtMTkuMzE0LTY1LjI4N3pNNTI4IDQzMkg0MDB2LTIzLjU4MmMwLTE5Ljk0OC0xMi4wMTQtMzcuNTA4LTMwLjYwNC00NC43MzZsLTk5Ljc1MS0zOC43ODhBNzEuNzMzIDcxLjczMyAwIDAgMCAyNDMuNTUyIDMyMEgxMTJjLTQuNDExIDAtOC0zLjU4OS04LTggMC0yMi4wNTYgMTcuOTQ0LTQwIDQwLTQwaDExMy43MDljMTkuNzY3IDAgMzcuNzg2LTEyLjQwNyA0NC44NC0zMC44NzNsMjQuNTUyLTY0LjI4MWM4Ljk5Ni0yMy41NTMtOC40MjgtNDguODQ2LTMzLjYzLTQ4Ljg0Nkg4MGMtMTcuNjQ1IDAtMzItMTQuMzU1LTMyLTMydi04YzAtNC40MTEgMy41ODktOCA4LThoMjkzLjkxN2M4LjE2NiAwIDE1LjY5MyA0LjA5IDIwLjEzNyAxMC45NDJsMTQ2LjM1OCAyMjUuNzE1QTcxLjg0IDcxLjg0IDAgMCAxIDUyOCAzNTUuODI5VjQzMnpcIl0sXCJoYW5kLXBhcGVyXCI6WzQ0OCw1MTIsW10sXCJmMjU2XCIsXCJNMzcyLjU3IDExMi42NDF2LTEwLjgyNWMwLTQzLjYxMi00MC41Mi03Ni42OTEtODMuMDM5LTY1LjU0Ni0yNS42MjktNDkuNS05NC4wOS00Ny40NS0xMTcuOTgyLjc0N0MxMzAuMjY5IDI2LjQ1NiA4OS4xNDQgNTcuOTQ1IDg5LjE0NCAxMDJ2MTI2LjEzYy0xOS45NTMtNy40MjctNDMuMzA4LTUuMDY4LTYyLjA4MyA4Ljg3MS0yOS4zNTUgMjEuNzk2LTM1Ljc5NCA2My4zMzMtMTQuNTUgOTMuMTUzTDEzMi40OCA0OTguNTY5YTMyIDMyIDAgMCAwIDI2LjA2MiAxMy40MzJoMjIyLjg5N2MxNC45MDQgMCAyNy44MzUtMTAuMjg5IDMxLjE4Mi0yNC44MTNsMzAuMTg0LTEzMC45NThBMjAzLjYzNyAyMDMuNjM3IDAgMCAwIDQ0OCAzMTAuNTY0VjE3OWMwLTQwLjYyLTM1LjUyMy03MS45OTItNzUuNDMtNjYuMzU5em0yNy40MjcgMTk3LjkyMmMwIDExLjczMS0xLjMzNCAyMy40NjktMy45NjUgMzQuODg2TDM2OC43MDcgNDY0aC0yMDEuOTJMNTEuNTkxIDMwMi4zMDNjLTE0LjQzOS0yMC4yNyAxNS4wMjMtNDIuNzc2IDI5LjM5NC0yMi42MDVsMjcuMTI4IDM4LjA3OWM4Ljk5NSAxMi42MjYgMjkuMDMxIDYuMjg3IDI5LjAzMS05LjI4M1YxMDJjMC0yNS42NDUgMzYuNTcxLTI0LjgxIDM2LjU3MS42OTFWMjU2YzAgOC44MzcgNy4xNjMgMTYgMTYgMTZoNi44NTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNlY2N2MwLTI1LjY2MyAzNi41NzEtMjQuODEgMzYuNTcxLjY5MVYyNTZjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmg2Ljg1NmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2VjEwMS4xMjVjMC0yNS42NzIgMzYuNTctMjQuODEgMzYuNTcuNjkxVjI1NmMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDYuODU3YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTc2LjMwOWMwLTI2LjI0MiAzNi41Ny0yNS42NCAzNi41Ny0uNjkxdjEzMS41NjN6XCJdLFwiaGFuZC1wZWFjZVwiOls0NDgsNTEyLFtdLFwiZjI1YlwiLFwiTTM2Mi4xNDYgMTkxLjk3NmMtMTMuNzEtMjEuNjQ5LTM4Ljc2MS0zNC4wMTYtNjUuMDA2LTMwLjM0MVY3NGMwLTQwLjgwNC0zMi44MTEtNzQtNzMuMTQxLTc0LTQwLjMzIDAtNzMuMTQgMzMuMTk2LTczLjE0IDc0TDE2MCAxNjhsLTE4LjY3OS03OC44NUMxMjYuNTc4IDUwLjg0MyA4My44NSAzMi4xMSA0Ni4yMDkgNDcuMjA4IDguNzM1IDYyLjIzOC05LjU3MSAxMDQuOTYzIDUuMDA4IDE0Mi44NWw1NS43NTcgMTQ0LjkyN2MtMzAuNTU3IDI0Ljk1Ni00My45OTQgNTcuODA5LTI0LjczMyA5Mi4yMThsNTQuODUzIDk3Ljk5OUMxMDIuNjI1IDQ5OC45NyAxMjQuNzMgNTEyIDE0OC41NzUgNTEyaDIwNS43MDJjMzAuNzQ0IDAgNTcuNTU4LTIxLjQ0IDY0LjU1NS01MS43OTdsMjcuNDI3LTExOC45OTlhNjcuODAxIDY3LjgwMSAwIDAgMCAxLjcyOS0xNS4yMDNMNDQ4IDI1NmMwLTQ0Ljk1Ni00My4yNjMtNzcuMzQzLTg1Ljg1NC02NC4wMjR6TTM5OS45ODcgMzI2YzAgMS40ODgtLjE2OSAyLjk3Ny0uNTAyIDQuNDIzbC0yNy40MjcgMTE5LjAwMWMtMS45NzggOC41ODItOS4yOSAxNC41NzYtMTcuNzgyIDE0LjU3NkgxNDguNTc1Yy02LjQ4NiAwLTEyLjU0Mi0zLjYyMS0xNS44MDUtOS40NDlsLTU0Ljg1NC05OGMtNC41NTctOC4xNDEtMi42MTktMTguNjY4IDQuNTA4LTI0LjQ4OGwyNi42NDctMjEuNzY0YTE2IDE2IDAgMCAwIDQuODEyLTE4LjEzOWwtNjQuMDktMTY2LjU0OUMzNy4yMjYgOTIuOTU2IDg0LjM3IDc0LjgzNyA5Ni41MSAxMDYuMzg5bDU5Ljc4NCAxNTUuMzU3QTE2IDE2IDAgMCAwIDE3MS4yMjcgMjcyaDExLjYzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2Vjc0YzAtMzQuMzc1IDUwLjI4MS0zNC40MyA1MC4yODEgMHYxODJjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmg2Ljg1NmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di0yOGMwLTI1LjEyMiAzNi41NjctMjUuMTU5IDM2LjU2NyAwdjI4YzAgOC44MzcgNy4xNjMgMTYgMTYgMTZoNi44NTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNiAwLTI1LjEyIDM2LjU2Ny0yNS4xNiAzNi41NjcgMHY3MHpcIl0sXCJoYW5kLXBvaW50LWRvd25cIjpbNDQ4LDUxMixbXSxcImYwYTdcIixcIk0xODguOCA1MTJjNDUuNjE2IDAgODMuMi0zNy43NjUgODMuMi04My4ydi0zNS42NDdhOTMuMTQ4IDkzLjE0OCAwIDAgMCAyMi4wNjQtNy45MjljMjIuMDA2IDIuNTA3IDQ0Ljk3OC0zLjUwMyA2Mi43OTEtMTUuOTg1QzQwOS4zNDIgMzY4LjEgNDQ4IDMzMS44NDEgNDQ4IDI2OS4yOTlWMjQ4YzAtNjAuMDYzLTQwLTk4LjUxMi00MC0xMjcuMnYtMi42NzljNC45NTItNS43NDcgOC0xMy41MzYgOC0yMi4xMlYzMmMwLTE3LjY3My0xMi44OTQtMzItMjguOC0zMkgxNTYuOEMxNDAuODk0IDAgMTI4IDE0LjMyNyAxMjggMzJ2NjRjMCA4LjU4NCAzLjA0OCAxNi4zNzMgOCAyMi4xMnYyLjY3OWMwIDYuOTY0LTYuMTkzIDE0Ljg2Mi0yMy42NjggMzAuMTgzbC0uMTQ4LjEyOS0uMTQ2LjEzMWMtOS45MzcgOC44NTYtMjAuODQxIDE4LjExNi0zMy4yNTMgMjUuODUxQzQ4LjUzNyAxOTUuNzk4IDAgMjA3LjQ4NiAwIDI1Mi44YzAgNTYuOTI4IDM1LjI4NiA5MiA4My4yIDkyIDguMDI2IDAgMTUuNDg5LS44MTQgMjIuNC0yLjE3NlY0MjguOGMwIDQ1LjA5OSAzOC4xMDEgODMuMiA4My4yIDgzLjJ6bTAtNDhjLTE4LjcgMC0zNS4yLTE2Ljc3NS0zNS4yLTM1LjJWMjcwLjRjLTE3LjMyNSAwLTM1LjIgMjYuNC03MC40IDI2LjQtMjYuNCAwLTM1LjItMjAuNjI1LTM1LjItNDQgMC04Ljc5NCAzMi43MTItMjAuNDQ1IDU2LjEtMzQuOTI2IDE0LjU3NS05LjA3NCAyNy4yMjUtMTkuNTI0IDM5Ljg3NS0zMC43OTkgMTguMzc0LTE2LjEwOSAzNi42MzMtMzMuODM2IDM5LjU5Ni01OS4wNzVoMTc2Ljc1MkMzNjQuMDg3IDE3MC43OSA0MDAgMjAyLjUwOSA0MDAgMjQ4djIxLjI5OWMwIDQwLjUyNC0yMi4xOTcgNTcuMTI0LTYxLjMyNSA1MC42MDEtOC4wMDEgMTQuNjEyLTMzLjk3OSAyNC4xNTEtNTMuNjI1IDEyLjkyNS0xOC4yMjUgMTkuMzY1LTQ2LjM4MSAxNy43ODctNjEuMDUgNC45NVY0MjguOGMwIDE4Ljk3NS0xNi4yMjUgMzUuMi0zNS4yIDM1LjJ6TTMyOCA2NGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRzMjQgMTAuNzQ1IDI0IDI0LTEwLjc0NSAyNC0yNCAyNC0yNC0xMC43NDUtMjQtMjR6XCJdLFwiaGFuZC1wb2ludC1sZWZ0XCI6WzUxMiw1MTIsW10sXCJmMGE1XCIsXCJNMCAyMjAuOEMwIDI2Ni40MTYgMzcuNzY1IDMwNCA4My4yIDMwNGgzNS42NDdhOTMuMTQ4IDkzLjE0OCAwIDAgMCA3LjkyOSAyMi4wNjRjLTIuNTA3IDIyLjAwNiAzLjUwMyA0NC45NzggMTUuOTg1IDYyLjc5MUMxNDMuOSA0NDEuMzQyIDE4MC4xNTkgNDgwIDI0Mi43MDEgNDgwSDI2NGM2MC4wNjMgMCA5OC41MTItNDAgMTI3LjItNDBoMi42NzljNS43NDcgNC45NTIgMTMuNTM2IDggMjIuMTIgOGg2NGMxNy42NzMgMCAzMi0xMi44OTQgMzItMjguOFYxODguOGMwLTE1LjkwNi0xNC4zMjctMjguOC0zMi0yOC44aC02NGMtOC41ODQgMC0xNi4zNzMgMy4wNDgtMjIuMTIgOEgzOTEuMmMtNi45NjQgMC0xNC44NjItNi4xOTMtMzAuMTgzLTIzLjY2OGwtLjEyOS0uMTQ4LS4xMzEtLjE0NmMtOC44NTYtOS45MzctMTguMTE2LTIwLjg0MS0yNS44NTEtMzMuMjUzQzMxNi4yMDIgODAuNTM3IDMwNC41MTQgMzIgMjU5LjIgMzJjLTU2LjkyOCAwLTkyIDM1LjI4Ni05MiA4My4yIDAgOC4wMjYuODE0IDE1LjQ4OSAyLjE3NiAyMi40SDgzLjJDMzguMTAxIDEzNy42IDAgMTc1LjcwMSAwIDIyMC44em00OCAwYzAtMTguNyAxNi43NzUtMzUuMiAzNS4yLTM1LjJoMTU4LjRjMC0xNy4zMjUtMjYuNC0zNS4yLTI2LjQtNzAuNCAwLTI2LjQgMjAuNjI1LTM1LjIgNDQtMzUuMiA4Ljc5NCAwIDIwLjQ0NSAzMi43MTIgMzQuOTI2IDU2LjEgOS4wNzQgMTQuNTc1IDE5LjUyNCAyNy4yMjUgMzAuNzk5IDM5Ljg3NSAxNi4xMDkgMTguMzc0IDMzLjgzNiAzNi42MzMgNTkuMDc1IDM5LjU5NnYxNzYuNzUyQzM0MS4yMSAzOTYuMDg3IDMwOS40OTEgNDMyIDI2NCA0MzJoLTIxLjI5OWMtNDAuNTI0IDAtNTcuMTI0LTIyLjE5Ny01MC42MDEtNjEuMzI1LTE0LjYxMi04LjAwMS0yNC4xNTEtMzMuOTc5LTEyLjkyNS01My42MjUtMTkuMzY1LTE4LjIyNS0xNy43ODctNDYuMzgxLTQuOTUtNjEuMDVIODMuMkM2NC4yMjUgMjU2IDQ4IDIzOS43NzUgNDggMjIwLjh6TTQ0OCAzNjBjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0cy0xMC43NDUgMjQtMjQgMjQtMjQtMTAuNzQ1LTI0LTI0IDEwLjc0NS0yNCAyNC0yNHpcIl0sXCJoYW5kLXBvaW50LXJpZ2h0XCI6WzUxMiw1MTIsW10sXCJmMGE0XCIsXCJNNDI4LjggMTM3LjZoLTg2LjE3N2ExMTUuNTIgMTE1LjUyIDAgMCAwIDIuMTc2LTIyLjRjMC00Ny45MTQtMzUuMDcyLTgzLjItOTItODMuMi00NS4zMTQgMC01Ny4wMDIgNDguNTM3LTc1LjcwNyA3OC43ODQtNy43MzUgMTIuNDEzLTE2Ljk5NCAyMy4zMTctMjUuODUxIDMzLjI1M2wtLjEzMS4xNDYtLjEyOS4xNDhDMTM1LjY2MiAxNjEuODA3IDEyNy43NjQgMTY4IDEyMC44IDE2OGgtMi42NzljLTUuNzQ3LTQuOTUyLTEzLjUzNi04LTIyLjEyLThIMzJjLTE3LjY3MyAwLTMyIDEyLjg5NC0zMiAyOC44djIzMC40QzAgNDM1LjEwNiAxNC4zMjcgNDQ4IDMyIDQ0OGg2NGM4LjU4NCAwIDE2LjM3My0zLjA0OCAyMi4xMi04aDIuNjc5YzI4LjY4OCAwIDY3LjEzNyA0MCAxMjcuMiA0MGgyMS4yOTljNjIuNTQyIDAgOTguOC0zOC42NTggOTkuOTQtOTEuMTQ1IDEyLjQ4Mi0xNy44MTMgMTguNDkxLTQwLjc4NSAxNS45ODUtNjIuNzkxQTkzLjE0OCA5My4xNDggMCAwIDAgMzkzLjE1MiAzMDRINDI4LjhjNDUuNDM1IDAgODMuMi0zNy41ODQgODMuMi04My4yIDAtNDUuMDk5LTM4LjEwMS04My4yLTgzLjItODMuMnptMCAxMTguNGgtOTEuMDI2YzEyLjgzNyAxNC42NjkgMTQuNDE1IDQyLjgyNS00Ljk1IDYxLjA1IDExLjIyNyAxOS42NDYgMS42ODcgNDUuNjI0LTEyLjkyNSA1My42MjUgNi41MjQgMzkuMTI4LTEwLjA3NiA2MS4zMjUtNTAuNiA2MS4zMjVIMjQ4Yy00NS40OTEgMC03Ny4yMS0zNS45MTMtMTIwLTM5LjY3NlYyMTUuNTcxYzI1LjIzOS0yLjk2NCA0Mi45NjYtMjEuMjIyIDU5LjA3NS0zOS41OTYgMTEuMjc1LTEyLjY1IDIxLjcyNS0yNS4zIDMwLjc5OS0zOS44NzVDMjMyLjM1NSAxMTIuNzEyIDI0NC4wMDYgODAgMjUyLjggODBjMjMuMzc1IDAgNDQgOC44IDQ0IDM1LjIgMCAzNS4yLTI2LjQgNTMuMDc1LTI2LjQgNzAuNGgxNTguNGMxOC40MjUgMCAzNS4yIDE2LjUgMzUuMiAzNS4yIDAgMTguOTc1LTE2LjIyNSAzNS4yLTM1LjIgMzUuMnpNODggMzg0YzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNHMtMjQtMTAuNzQ1LTI0LTI0IDEwLjc0NS0yNCAyNC0yNCAyNCAxMC43NDUgMjQgMjR6XCJdLFwiaGFuZC1wb2ludC11cFwiOls0NDgsNTEyLFtdLFwiZjBhNlwiLFwiTTEwNS42IDgzLjJ2ODYuMTc3YTExNS41MiAxMTUuNTIgMCAwIDAtMjIuNC0yLjE3NmMtNDcuOTE0IDAtODMuMiAzNS4wNzItODMuMiA5MiAwIDQ1LjMxNCA0OC41MzcgNTcuMDAyIDc4Ljc4NCA3NS43MDcgMTIuNDEzIDcuNzM1IDIzLjMxNyAxNi45OTQgMzMuMjUzIDI1Ljg1MWwuMTQ2LjEzMS4xNDguMTI5QzEyOS44MDcgMzc2LjMzOCAxMzYgMzg0LjIzNiAxMzYgMzkxLjJ2Mi42NzljLTQuOTUyIDUuNzQ3LTggMTMuNTM2LTggMjIuMTJ2NjRjMCAxNy42NzMgMTIuODk0IDMyIDI4LjggMzJoMjMwLjRjMTUuOTA2IDAgMjguOC0xNC4zMjcgMjguOC0zMnYtNjRjMC04LjU4NC0zLjA0OC0xNi4zNzMtOC0yMi4xMlYzOTEuMmMwLTI4LjY4OCA0MC02Ny4xMzcgNDAtMTI3LjJ2LTIxLjI5OWMwLTYyLjU0Mi0zOC42NTgtOTguOC05MS4xNDUtOTkuOTQtMTcuODEzLTEyLjQ4Mi00MC43ODUtMTguNDkxLTYyLjc5MS0xNS45ODVBOTMuMTQ4IDkzLjE0OCAwIDAgMCAyNzIgMTE4Ljg0N1Y4My4yQzI3MiAzNy43NjUgMjM0LjQxNiAwIDE4OC44IDBjLTQ1LjA5OSAwLTgzLjIgMzguMTAxLTgzLjIgODMuMnptMTE4LjQgMHY5MS4wMjZjMTQuNjY5LTEyLjgzNyA0Mi44MjUtMTQuNDE1IDYxLjA1IDQuOTUgMTkuNjQ2LTExLjIyNyA0NS42MjQtMS42ODcgNTMuNjI1IDEyLjkyNSAzOS4xMjgtNi41MjQgNjEuMzI1IDEwLjA3NiA2MS4zMjUgNTAuNlYyNjRjMCA0NS40OTEtMzUuOTEzIDc3LjIxLTM5LjY3NiAxMjBIMTgzLjU3MWMtMi45NjQtMjUuMjM5LTIxLjIyMi00Mi45NjYtMzkuNTk2LTU5LjA3NS0xMi42NS0xMS4yNzUtMjUuMy0yMS43MjUtMzkuODc1LTMwLjc5OUM4MC43MTIgMjc5LjY0NSA0OCAyNjcuOTk0IDQ4IDI1OS4yYzAtMjMuMzc1IDguOC00NCAzNS4yLTQ0IDM1LjIgMCA1My4wNzUgMjYuNCA3MC40IDI2LjRWODMuMmMwLTE4LjQyNSAxNi41LTM1LjIgMzUuMi0zNS4yIDE4Ljk3NSAwIDM1LjIgMTYuMjI1IDM1LjIgMzUuMnpNMzUyIDQyNGMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjRzLTEwLjc0NSAyNC0yNCAyNC0yNC0xMC43NDUtMjQtMjQgMTAuNzQ1LTI0IDI0LTI0elwiXSxcImhhbmQtcG9pbnRlclwiOls0NDgsNTEyLFtdLFwiZjI1YVwiLFwiTTM1OC4xODIgMTc5LjM2MWMtMTkuNDkzLTI0Ljc2OC01Mi42NzktMzEuOTQ1LTc5Ljg3Mi0xOS4wOTgtMTUuMTI3LTE1LjY4Ny0zNi4xODItMjIuNDg3LTU2LjU5NS0xOS42MjlWNjdjMC0zNi45NDQtMjkuNzM2LTY3LTY2LjI4Ni02N1M4OS4xNDMgMzAuMDU2IDg5LjE0MyA2N3YxNjEuMTI5Yy0xOS45MDktNy40MS00My4yNzItNS4wOTQtNjIuMDgzIDguODcyLTI5LjM1NSAyMS43OTUtMzUuNzkzIDYzLjMzMy0xNC41NSA5My4xNTJsMTA5LjY5OSAxNTQuMDAxQzEzNC42MzIgNTAxLjU5IDE1NC43NDEgNTEyIDE3NiA1MTJoMTc4LjI4NmMzMC44MDIgMCA1Ny41NzQtMjEuNSA2NC41NTctNTEuNzk3bDI3LjQyOS0xMTguOTk5QTY3Ljg3MyA2Ny44NzMgMCAwIDAgNDQ4IDMyNnYtODRjMC00Ni44NDQtNDYuNjI1LTc5LjI3My04OS44MTgtNjIuNjM5ek04MC45ODUgMjc5LjY5N2wyNy4xMjYgMzguMDc5YzguOTk1IDEyLjYyNiAyOS4wMzEgNi4yODcgMjkuMDMxLTkuMjgzVjY3YzAtMjUuMTIgMzYuNTcxLTI1LjE2IDM2LjU3MSAwdjE3NWMwIDguODM2IDcuMTYzIDE2IDE2IDE2aDYuODU3YzguODM3IDAgMTYtNy4xNjQgMTYtMTZ2LTM1YzAtMjUuMTIgMzYuNTcxLTI1LjE2IDM2LjU3MSAwdjM1YzAgOC44MzYgNy4xNjMgMTYgMTYgMTZIMjcyYzguODM3IDAgMTYtNy4xNjQgMTYtMTZ2LTIxYzAtMjUuMTIgMzYuNTcxLTI1LjE2IDM2LjU3MSAwdjIxYzAgOC44MzYgNy4xNjMgMTYgMTYgMTZoNi44NTdjOC44MzcgMCAxNi03LjE2NCAxNi0xNiAwLTI1LjEyMSAzNi41NzEtMjUuMTYgMzYuNTcxIDB2ODRjMCAxLjQ4OC0uMTY5IDIuOTc3LS41MDIgNC40MjNsLTI3LjQzIDExOS4wMDFjLTEuOTc4IDguNTgyLTkuMjkgMTQuNTc2LTE3Ljc4MiAxNC41NzZIMTc2Yy01Ljc2OSAwLTExLjI2My0yLjg3OC0xNC42OTctNy42OTdsLTEwOS43MTItMTU0Yy0xNC40MDYtMjAuMjIzIDE0Ljk5NC00Mi44MTggMjkuMzk0LTIyLjYwNnpNMTc2LjE0MyA0MDB2LTk2YzAtOC44MzcgNi4yNjgtMTYgMTQtMTZoNmM3LjczMiAwIDE0IDcuMTYzIDE0IDE2djk2YzAgOC44MzctNi4yNjggMTYtMTQgMTZoLTZjLTcuNzMzIDAtMTQtNy4xNjMtMTQtMTZ6bTc1LjQyOCAwdi05NmMwLTguODM3IDYuMjY4LTE2IDE0LTE2aDZjNy43MzIgMCAxNCA3LjE2MyAxNCAxNnY5NmMwIDguODM3LTYuMjY4IDE2LTE0IDE2aC02Yy03LjczMiAwLTE0LTcuMTYzLTE0LTE2ek0zMjcgNDAwdi05NmMwLTguODM3IDYuMjY4LTE2IDE0LTE2aDZjNy43MzIgMCAxNCA3LjE2MyAxNCAxNnY5NmMwIDguODM3LTYuMjY4IDE2LTE0IDE2aC02Yy03LjczMiAwLTE0LTcuMTYzLTE0LTE2elwiXSxcImhhbmQtcm9ja1wiOls1MTIsNTEyLFtdLFwiZjI1NVwiLFwiTTQwOC44NjQgNzkuMDUyYy0yMi40MDEtMzMuODk4LTY2LjEwOC00Mi4yNzMtOTguODEzLTIzLjU4OC0yOS40NzQtMzEuNDY5LTc5LjE0NS0zMS4wOTMtMTA4LjMzNC0uMDIyLTQ3LjE2LTI3LjAyLTEwOC43MSA1LjA1NS0xMTAuNjcxIDYwLjgwNkM0NC44NDYgMTA1LjQwNyAwIDE0MC4wMDEgMCAxODcuNDI5djU2Ljk1M2MwIDMyLjc0MSAxNC4yOCA2My45NTQgMzkuMTggODUuNjM0bDk3LjcxIDg1LjA4MWM0LjI1MiAzLjcwMiAzLjExIDUuNTczIDMuMTEgMzIuOTAzIDAgMTcuNjczIDE0LjMyNyAzMiAzMiAzMmgyNTJjMTcuNjczIDAgMzItMTQuMzI3IDMyLTMyIDAtMjMuNTEzLTEuMDE1LTMwLjc0NSAzLjk4Mi00Mi4zN2w0Mi44MzUtOTkuNjU2YzYuMDk0LTE0LjE3NyA5LjE4My0yOS4xNzIgOS4xODMtNDQuNTY4VjE0Ni45NjNjMC01Mi44MzktNTQuMzE0LTg4LjY2Mi0xMDMuMTM2LTY3LjkxMXpNNDY0IDI2MS40MDZhNjQuNTA1IDY0LjUwNSAwIDAgMS01LjI4MiAyNS42MTNsLTQyLjgzNSA5OS42NTVjLTUuMjMgMTIuMTcxLTcuODgzIDI1LjA0LTcuODgzIDM4LjI1VjQzMkgxODh2LTEwLjI4NmMwLTE2LjM3LTcuMTQtMzEuOTc3LTE5LjU5LTQyLjgxN2wtOTcuNzEtODUuMDhDNTYuMjc0IDI4MS4yNTUgNDggMjYzLjIzNiA0OCAyNDQuMzgxdi01Ni45NTNjMC0zMy4yMDggNTItMzMuNTM3IDUyIC42Nzd2NDEuMjI4YTE2IDE2IDAgMCAwIDUuNDkzIDEyLjA2N2w3IDYuMDk1QTE2IDE2IDAgMCAwIDEzOSAyMzUuNDI5VjExOC44NTdjMC0zMy4wOTcgNTItMzMuNzI1IDUyIC42Nzd2MjYuNzUxYzAgOC44MzYgNy4xNjQgMTYgMTYgMTZoN2M4LjgzNiAwIDE2LTcuMTY0IDE2LTE2di00MS4xNDNjMC0zMy4xMzQgNTItMzMuNjc1IDUyIC42Nzd2NDAuNDY2YzAgOC44MzYgNy4xNjMgMTYgMTYgMTZoN2M4LjgzNyAwIDE2LTcuMTY0IDE2LTE2di0yNy40MjljMC0zMy4wMyA1Mi0zMy43OCA1MiAuNjc3djI2Ljc1MWMwIDguODM2IDcuMTYzIDE2IDE2IDE2aDdjOC44MzcgMCAxNi03LjE2NCAxNi0xNiAwLTMzLjE0NiA1Mi0zMy42MTMgNTIgLjY3N3YxMTQuNDQ1elwiXSxcImhhbmQtc2Npc3NvcnNcIjpbNTEyLDUxMixbXSxcImYyNTdcIixcIk0yNTYgNDgwbDcwLS4wMTNjNS4xMTQgMCAxMC4yMzEtLjU4MyAxNS4yMDMtMS43MjlsMTE4Ljk5OS0yNy40MjdDNDkwLjU2IDQ0My44MzUgNTEyIDQxNy4wMiA1MTIgMzg2LjI3N1YxODAuNTc1YzAtMjMuODQ1LTEzLjAzLTQ1Ljk1MS0zNC4wMDUtNTcuNjlsLTk3Ljk5OS01NC44NTNjLTM0LjQwOS0xOS4yNjEtNjcuMjYzLTUuODI0LTkyLjIxOCAyNC43MzNMMTQyLjg1IDM3LjAwOGMtMzcuODg3LTE0LjU3OS04MC42MTIgMy43MjctOTUuNjQyIDQxLjIwMS0xNS4wOTggMzcuNjQyIDMuNjM1IDgwLjM3IDQxLjk0MiA5NS4xMTJMMTY4IDE5MmwtOTQtOS4xNDFjLTQwLjgwNCAwLTc0IDMyLjgxMS03NCA3My4xNCAwIDQwLjMzIDMzLjE5NiA3My4xNDEgNzQgNzMuMTQxaDg3LjYzNWMtMy42NzUgMjYuMjQ1IDguNjkyIDUxLjI5NyAzMC4zNDEgNjUuMDA2QzE3OC42NTcgNDM2LjczNyAyMTEuMDQ0IDQ4MCAyNTYgNDgwem0wLTQ4LjAxM2MtMjUuMTYgMC0yNS4xMi0zNi41NjcgMC0zNi41NjcgOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNi44NTZjMC04LjgzNy03LjE2My0xNi0xNi0xNmgtMjhjLTI1LjE1OSAwLTI1LjEyMi0zNi41NjcgMC0zNi41NjdoMjhjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNi44NTZjMC04LjgzNy03LjE2My0xNi0xNi0xNkg3NGMtMzQuNDMgMC0zNC4zNzUtNTAuMjgxIDAtNTAuMjgxaDE4MmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di0xMS42MzJhMTYgMTYgMCAwIDAtMTAuMjU0LTE0LjkzM0wxMDYuMzg5IDEyOC41MWMtMzEuNTUyLTEyLjE0LTEzLjQzMi01OS4yODMgMTkuMjIyLTQ2LjcxN2wxNjYuNTQ5IDY0LjA5MWExNi4wMDEgMTYuMDAxIDAgMCAwIDE4LjEzOS00LjgxMmwyMS43NjQtMjYuNjQ3YzUuODItNy4xMjcgMTYuMzQ4LTkuMDY0IDI0LjQ4OC00LjUwOGw5OCA1NC44NTRjNS44MjggMy4yNjMgOS40NDkgOS4zMTggOS40NDkgMTUuODA1djIwNS43MDFjMCA4LjQ5MS01Ljk5NCAxNS44MDQtMTQuNTc2IDE3Ljc4MmwtMTE5LjAwMSAyNy40MjdhMTkuNzQzIDE5Ljc0MyAwIDAgMS00LjQyMy41MDJoLTcwelwiXSxcImhhbmQtc3BvY2tcIjpbNTEyLDUxMixbXSxcImYyNTlcIixcIk0yMS4wOTYgMzgxLjc5bDEyOS4wOTIgMTIxLjUxM2EzMiAzMiAwIDAgMCAyMS45MzIgOC42OThoMjM3LjZjMTQuMTcgMCAyNi42NTMtOS4zMTkgMzAuNjgtMjIuOTA0bDMxLjgxNS0xMDcuMzEzQTExNS45NTUgMTE1Ljk1NSAwIDAgMCA0NzcgMzQ4LjgxMXYtMzYuODM5YzAtNC4wNTEuNDc2LTguMTA0IDEuNDE0LTEyLjA0NWwzMS43My0xMzMuNDFjMTAuMDk5LTQyLjQxMi0yMi4zMTYtODIuNzM4LTY1LjU0NC04Mi41MjUtNC4xNDQtMjQuODU2LTIyLjU0My00Ny4xNjUtNDkuODUtNTMuOTkyLTM1LjgwMy04Ljk1Mi03Mi4yMjcgMTIuNjU1LTgxLjI1IDQ4Ljc1TDI5Ni41OTkgMTg0IDI3NC45MjQgNTIuMDFjLTguMjg2LTM2LjA3LTQ0LjMwMy01OC41NzItODAuMzA0LTUwLjI5Ni0yOS42MTYgNi44MDQtNTAuMTM4IDMyLjM4OS01MS44ODIgNjEuMjk1LTQyLjYzNy44MzEtNzMuNDU1IDQwLjU2My02NC4wNzEgODEuODQ0bDMxLjA0IDEzNi41MDhjLTI3LjE5NC0yMi41MTUtNjcuMjg0LTE5Ljk5Mi05MS40ODIgNS43MjItMjUuMzc2IDI2Ljk2MS0yNC4wOTggNjkuMzI1IDIuODcxIDk0LjcwN3ptMzIuMDY4LTYxLjgxMWwuMDAyLS4wMDFjNy4yMTktNy42NzIgMTkuMjQxLTcuOTggMjYuODU2LS44MTNsNTMuMDEyIDQ5Ljg5NEMxNDMuMjI1IDM3OC42NDkgMTYwIDM3MS40IDE2MCAzNTcuNDA2di02OS40NzljMC0xLjE5My0uMTM0LTIuMzgzLS4zOTctMy41NDZsLTM0LjEzLTE1MC4xNzJjLTUuNTk2LTI0LjYxNyAzMS41MDItMzIuODYgMzcuMDU0LTguNDIxbDMwLjM5OSAxMzMuNzU3YTE2IDE2IDAgMCAwIDE1LjYwMyAxMi40NTRoOC42MDRjMTAuMjc2IDAgMTcuODk0LTkuNTY3IDE1LjU5NC0xOS41ODNsLTQxLjYyLTE4MS4xNTNjLTUuNjIzLTI0LjQ2OSAzMS4zOS0zMy4wNzYgMzcuMDM1LTguNTA4bDQ1LjIyIDE5Ni44MjhBMTYgMTYgMCAwIDAgMjg4Ljk1NiAyNzJoMTMuMjE3YTE2IDE2IDAgMCAwIDE1LjUyMi0xMi4xMTlsNDIuMzcyLTE2OS40OWM2LjEwNC0yNC40MjIgNDIuOTYyLTE1LjE1OSAzNi44NjUgOS4yMTdMMzU4LjgwNSAyNTIuMTJjLTIuNTIxIDEwLjA4OCA1LjExNSAxOS44OCAxNS41MjIgMTkuODhoOS42OTRhMTYgMTYgMCAwIDAgMTUuNTY1LTEyLjI5NUw0MjYuNTA5IDE0Ni42YzUuODIxLTI0LjQ0OCA0Mi43OTctMTUuNjg3IDM2Ljk2NiA4LjgwMkw0MzEuNzIgMjg4LjgxYTEwMC4wOTQgMTAwLjA5NCAwIDAgMC0yLjcyIDIzLjE2MnYzNi44MzljMCA2LjU0OC0uOTQzIDEzLjA1MS0yLjgwNSAxOS4zMjhMMzk3Ljc3NSA0NjRoLTIxOS4zMUw1My45NzggMzQ2LjgzNmMtNy42MjktNy4xOC03Ljk5NC0xOS4yMjktLjgxNC0yNi44NTd6XCJdLGhhbmRzaGFrZTpbNjQwLDUxMixbXSxcImYyYjVcIixcIk01MTkuMiAxMjcuOWwtNDcuNi00Ny42QTU2LjI1MiA1Ni4yNTIgMCAwIDAgNDMyIDY0SDIwNS4yYy0xNC44IDAtMjkuMSA1LjktMzkuNiAxNi4zTDExOCAxMjcuOUgwdjI1NS43aDY0YzE3LjYgMCAzMS44LTE0LjIgMzEuOS0zMS43aDkuMWw4NC42IDc2LjRjMzAuOSAyNS4xIDczLjggMjUuNyAxMDUuNiAzLjggMTIuNSAxMC44IDI2IDE1LjkgNDEuMSAxNS45IDE4LjIgMCAzNS4zLTcuNCA0OC44LTI0IDIyLjEgOC43IDQ4LjIgMi42IDY0LTE2LjhsMjYuMi0zMi4zYzUuNi02LjkgOS4xLTE0LjggMTAuOS0yM2g1Ny45Yy4xIDE3LjUgMTQuNCAzMS43IDMxLjkgMzEuN2g2NFYxMjcuOUg1MTkuMnpNNDggMzUxLjZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2YzAgOC45LTcuMiAxNi0xNiAxNnptMzkwLTYuOWwtMjYuMSAzMi4yYy0yLjggMy40LTcuOCA0LTExLjMgMS4ybC0yMy45LTE5LjQtMzAgMzYuNWMtNiA3LjMtMTUgNC44LTE4IDIuNGwtMzYuOC0zMS41LTE1LjYgMTkuMmMtMTMuOSAxNy4xLTM5LjIgMTkuNy01NS4zIDYuNmwtOTcuMy04OEg5NlYxNzUuOGg0MS45bDYxLjctNjEuNmMyLS44IDMuNy0xLjUgNS43LTIuM0gyNjJsLTM4LjcgMzUuNWMtMjkuNCAyNi45LTMxLjEgNzIuMy00LjQgMTAxLjMgMTQuOCAxNi4yIDYxLjIgNDEuMiAxMDEuNSA0LjRsOC4yLTcuNSAxMDguMiA4Ny44YzMuNCAyLjggMy45IDcuOSAxLjIgMTEuM3ptMTA2LTQwLjhoLTY5LjJjLTIuMy0yLjgtNC45LTUuNC03LjctNy43bC0xMDIuNy04My40IDEyLjUtMTEuNGM2LjUtNiA3LTE2LjEgMS0yMi42TDM2NyAxNjcuMWMtNi02LjUtMTYuMS02LjktMjIuNi0xbC01NS4yIDUwLjZjLTkuNSA4LjctMjUuNyA5LjQtMzQuNiAwLTkuMy05LjktOC41LTI1LjEgMS4yLTMzLjlsNjUuNi02MC4xYzcuNC02LjggMTctMTAuNSAyNy0xMC41bDgzLjctLjJjMi4xIDAgNC4xLjggNS41IDIuM2w2MS43IDYxLjZINTQ0djEyOHptNDggNDcuN2MtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNiAxNiA3LjIgMTYgMTZjMCA4LjktNy4yIDE2LTE2IDE2elwiXSxoZGQ6WzU3Niw1MTIsW10sXCJmMGEwXCIsXCJNNTY3LjQwMyAyMzUuNjQyTDQ2Mi4zMjMgODQuNTg5QTQ4IDQ4IDAgMCAwIDQyMi45MTkgNjRIMTUzLjA4MWE0OCA0OCAwIDAgMC0zOS40MDQgMjAuNTg5TDguNTk3IDIzNS42NDJBNDguMDAxIDQ4LjAwMSAwIDAgMCAwIDI2My4wNTRWNDAwYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDgwYzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMjYzLjA1NGMwLTkuODAxLTMtMTkuMzY2LTguNTk3LTI3LjQxMnpNMTUzLjA4MSAxMTJoMjY5LjgzOGw3Ny45MTMgMTEySDc1LjE2OGw3Ny45MTMtMTEyek01MjggNDAwSDQ4VjI3Mmg0ODB2MTI4em0tMzItNjRjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMycy0zMi0xNC4zMjctMzItMzIgMTQuMzI3LTMyIDMyLTMyIDMyIDE0LjMyNyAzMiAzMnptLTk2IDBjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMycy0zMi0xNC4zMjctMzItMzIgMTQuMzI3LTMyIDMyLTMyIDMyIDE0LjMyNyAzMiAzMnpcIl0saGVhcnQ6WzUxMiw1MTIsW10sXCJmMDA0XCIsXCJNNDU4LjQgNjQuM0M0MDAuNiAxNS43IDMxMS4zIDIzIDI1NiA3OS4zIDIwMC43IDIzIDExMS40IDE1LjYgNTMuNiA2NC4zLTIxLjYgMTI3LjYtMTAuNiAyMzAuOCA0MyAyODUuNWwxNzUuNCAxNzguN2MxMCAxMC4yIDIzLjQgMTUuOSAzNy42IDE1LjkgMTQuMyAwIDI3LjYtNS42IDM3LjYtMTUuOEw0NjkgMjg1LjZjNTMuNS01NC43IDY0LjctMTU3LjktMTAuNi0yMjEuM3ptLTIzLjYgMTg3LjVMMjU5LjQgNDMwLjVjLTIuNCAyLjQtNC40IDIuNC02LjggMEw3Ny4yIDI1MS44Yy0zNi41LTM3LjItNDMuOS0xMDcuNiA3LjMtMTUwLjcgMzguOS0zMi43IDk4LjktMjcuOCAxMzYuNSAxMC41bDM1IDM1LjcgMzUtMzUuN2MzNy44LTM4LjUgOTcuOC00My4yIDEzNi41LTEwLjYgNTEuMSA0My4xIDQzLjUgMTEzLjkgNy4zIDE1MC44elwiXSxob3NwaXRhbDpbNDQ4LDUxMixbXSxcImYwZjhcIixcIk0xMjggMjQ0di00MGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDQwYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2NDBjMCA2LjYyNy01LjM3MyAxMi0xMiAxMmgtNDBjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTE0MCAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyem0tNzYgODR2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptNzYgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMnptMTgwIDEyNHYzNkgwdi0zNmMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE5LjVWODUuMDM1QzMxLjUgNzMuNDE4IDQyLjI0NSA2NCA1NS41IDY0SDE0NFYyNGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoMTEyYzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHY0MGg4OC41YzEzLjI1NSAwIDI0IDkuNDE4IDI0IDIxLjAzNVY0NjRINDM2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ6TTc5LjUgNDYzSDE5MnYtNjdjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjY3aDExMi41VjExMkgzMDR2MjRjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDE2OGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0di0yNEg3OS41djM1MXpNMjY2IDY0aC0yNlYzOGE2IDYgMCAwIDAtNi02aC0yMGE2IDYgMCAwIDAtNiA2djI2aC0yNmE2IDYgMCAwIDAtNiA2djIwYTYgNiAwIDAgMCA2IDZoMjZ2MjZhNiA2IDAgMCAwIDYgNmgyMGE2IDYgMCAwIDAgNi02Vjk2aDI2YTYgNiAwIDAgMCA2LTZWNzBhNiA2IDAgMCAwLTYtNnpcIl0saG91cmdsYXNzOlszODQsNTEyLFtdLFwiZjI1NFwiLFwiTTM2OCA0OGg0YzYuNjI3IDAgMTItNS4zNzMgMTItMTJWMTJjMC02LjYyNy01LjM3My0xMi0xMi0xMkgxMkM1LjM3MyAwIDAgNS4zNzMgMCAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDRjMCA4MC41NjQgMzIuMTg4IDE2NS44MDcgOTcuMTggMjA4QzQ3Ljg5OSAyOTguMzgxIDE2IDM4My45IDE2IDQ2NGgtNGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDM2MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0yNGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00YzAtODAuNTY0LTMyLjE4OC0xNjUuODA3LTk3LjE4LTIwOEMzMzYuMTAyIDIxMy42MTkgMzY4IDEyOC4xIDM2OCA0OHpNNjQgNDhoMjU2YzAgMTAxLjYyLTU3LjMwNyAxODQtMTI4IDE4NFM2NCAxNDkuNjIxIDY0IDQ4em0yNTYgNDE2SDY0YzAtMTAxLjYyIDU3LjMwOC0xODQgMTI4LTE4NHMxMjggODIuMzggMTI4IDE4NHpcIl0sXCJpZC1iYWRnZVwiOlszODQsNTEyLFtdLFwiZjJjMVwiLFwiTTMzNiAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0wIDQ2NEg0OFY0OGgyODh2NDE2ek0xNDQgMTEyaDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2aC05NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptNDggMTc2YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjQgMjguNyA2NCA2NCA2NHptLTg5LjYgMTI4aDE3OS4yYzEyLjQgMCAyMi40LTguNiAyMi40LTE5LjJ2LTE5LjJjMC0zMS44LTMwLjEtNTcuNi02Ny4yLTU3LjYtMTAuOCAwLTE4LjcgOC00NC44IDgtMjYuOSAwLTMzLjQtOC00NC44LTgtMzcuMSAwLTY3LjIgMjUuOC02Ny4yIDU3LjZ2MTkuMmMwIDEwLjYgMTAgMTkuMiAyMi40IDE5LjJ6XCJdLFwiaWQtY2FyZFwiOls1NzYsNTEyLFtdLFwiZjJjMlwiLFwiTTUyOCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0ODBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bTAgNDAwSDMwMy4yYy45LTQuNS44IDMuNi44LTIyLjQgMC0zMS44LTMwLjEtNTcuNi02Ny4yLTU3LjYtMTAuOCAwLTE4LjcgOC00NC44IDgtMjYuOSAwLTMzLjQtOC00NC44LTgtMzcuMSAwLTY3LjIgMjUuOC02Ny4yIDU3LjYgMCAyNi0uMiAxNy45LjggMjIuNEg0OFYxNDRoNDgwdjI4OHptLTE2OC04MGgxMTJjNC40IDAgOC0zLjYgOC04di0xNmMwLTQuNC0zLjYtOC04LThIMzYwYy00LjQgMC04IDMuNi04IDh2MTZjMCA0LjQgMy42IDggOCA4em0wLTY0aDExMmM0LjQgMCA4LTMuNiA4LTh2LTE2YzAtNC40LTMuNi04LTgtOEgzNjBjLTQuNCAwLTggMy42LTggOHYxNmMwIDQuNCAzLjYgOCA4IDh6bTAtNjRoMTEyYzQuNCAwIDgtMy42IDgtOHYtMTZjMC00LjQtMy42LTgtOC04SDM2MGMtNC40IDAtOCAzLjYtOCA4djE2YzAgNC40IDMuNiA4IDggOHptLTE2OCA5NmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0IDI4LjcgNjQgNjQgNjR6XCJdLGltYWdlOls1MTIsNTEyLFtdLFwiZjAzZVwiLFwiTTQ2NCA2NEg0OEMyMS40OSA2NCAwIDg1LjQ5IDAgMTEydjI4OGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQxNmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjExMmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0tNiAzMzZINTRhNiA2IDAgMCAxLTYtNlYxMThhNiA2IDAgMCAxIDYtNmg0MDRhNiA2IDAgMCAxIDYgNnYyNzZhNiA2IDAgMCAxLTYgNnpNMTI4IDE1MmMtMjIuMDkxIDAtNDAgMTcuOTA5LTQwIDQwczE3LjkwOSA0MCA0MCA0MCA0MC0xNy45MDkgNDAtNDAtMTcuOTA5LTQwLTQwLTQwek05NiAzNTJoMzIwdi04MGwtODcuNTE1LTg3LjUxNWMtNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3MSAwTDE5MiAzMDRsLTM5LjUxNS0zOS41MTVjLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NzEgMEw5NiAzMDR2NDh6XCJdLGltYWdlczpbNTc2LDUxMixbXSxcImYzMDJcIixcIk00ODAgNDE2djE2YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWMTc2YzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMTZ2NDhINTRhNiA2IDAgMCAwLTYgNnYyNDRhNiA2IDAgMCAwIDYgNmgzNzJhNiA2IDAgMCAwIDYtNnYtMTBoNDh6bTQyLTMzNkgxNTBhNiA2IDAgMCAwLTYgNnYyNDRhNiA2IDAgMCAwIDYgNmgzNzJhNiA2IDAgMCAwIDYtNlY4NmE2IDYgMCAwIDAtNi02em02LTQ4YzI2LjUxIDAgNDggMjEuNDkgNDggNDh2MjU2YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhIMTQ0Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjgwYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMzg0ek0yNjQgMTQ0YzAgMjIuMDkxLTE3LjkwOSA0MC00MCA0MHMtNDAtMTcuOTA5LTQwLTQwIDE3LjkwOS00MCA0MC00MCA0MCAxNy45MDkgNDAgNDB6bS03MiA5NmwzOS41MTUtMzkuNTE1YzQuNjg2LTQuNjg2IDEyLjI4NC00LjY4NiAxNi45NzEgMEwyODggMjQwbDEwMy41MTUtMTAzLjUxNWM0LjY4Ni00LjY4NiAxMi4yODQtNC42ODYgMTYuOTcxIDBMNDgwIDIwOHY4MEgxOTJ2LTQ4elwiXSxrZXlib2FyZDpbNTc2LDUxMixbXSxcImYxMWNcIixcIk01MjggNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYyODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0ODBjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxMTJjMC0yNi41MS0yMS40OS00OC00OC00OHptOCAzMzZjMCA0LjQxMS0zLjU4OSA4LTggOEg0OGMtNC40MTEgMC04LTMuNTg5LTgtOFYxMTJjMC00LjQxMSAzLjU4OS04IDgtOGg0ODBjNC40MTEgMCA4IDMuNTg5IDggOHYyODh6TTE3MCAyNzB2LTI4YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTI4Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjhjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptOTYgMHYtMjhjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtMjhjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjhjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyOGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi0yOGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC0yOGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDI4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTI4YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTI4Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjhjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptLTMzNiA4MnYtMjhjMC02LjYyNy01LjM3My0xMi0xMi0xMkg4MmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDI4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTM4NCAwdi0yOGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC0yOGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDI4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6TTEyMiAxODh2LTI4YzAtNi42MjctNS4zNzMtMTItMTItMTJIODJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjhjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyOGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi0yOGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC0yOGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDI4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTI4YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTI4Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjhjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptOTYgMHYtMjhjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtMjhjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjhjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyOGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi0yOGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC0yOGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDI4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bS05OCAxNTh2LTE2YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTgwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjE2YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjE2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6XCJdLGtpc3M6WzQ5Niw1MTIsW10sXCJmNTk2XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMCA0NjRjLTExOS4xIDAtMjE2LTk2LjktMjE2LTIxNlMxMjguOSA0MCAyNDggNDBzMjE2IDk2LjkgMjE2IDIxNi05Ni45IDIxNi0yMTYgMjE2em01Ni0xNjRjMC0xOS4yLTI4LjgtNDEuNS03MS41LTQ0LTMuOC0uNC03LjQgMi40LTguMiA2LjItLjkgMy44IDEuMSA3LjcgNC43IDkuMmwxNi45IDcuMmMxMyA1LjUgMjAuOCAxMy41IDIwLjggMjEuNXMtNy44IDE2LTIwLjcgMjEuNWwtMTcgNy4yYy01LjcgMi40LTYgMTIuMiAwIDE0LjhsMTYuOSA3LjJjMTMgNS41IDIwLjggMTMuNSAyMC44IDIxLjVzLTcuOCAxNi0yMC43IDIxLjVsLTE3IDcuMmMtMy42IDEuNS01LjYgNS40LTQuNyA5LjIuOCAzLjYgNC4xIDYuMiA3LjggNi4yaC41YzQyLjgtMi41IDcxLjUtMjQuOCA3MS41LTQ0IDAtMTMtMTMuNC0yNy4zLTM1LjItMzZDMjkwLjYgMzM1LjMgMzA0IDMyMSAzMDQgMzA4ek0xNjggMTc2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnptMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyelwiXSxcImtpc3MtYmVhbVwiOls0OTYsNTEyLFtdLFwiZjU5N1wiLFwiTTE2OCAxNTJjLTIzLjggMC01Mi43IDI5LjMtNTYgNzEuNC0uMyAzLjcgMiA3LjIgNS42IDguMyAzLjUgMSA3LjUtLjUgOS4zLTMuN2w5LjUtMTdjNy43LTEzLjcgMTkuMi0yMS42IDMxLjUtMjEuNnMyMy44IDcuOSAzMS41IDIxLjZsOS41IDE3YzIuMSAzLjcgNi4yIDQuNyA5LjMgMy43IDMuNi0xLjEgNS45LTQuNSA1LjYtOC4zLTMuMS00Mi4xLTMyLTcxLjQtNTUuOC03MS40ek0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTU2LTE0OGMwLTE5LjItMjguOC00MS41LTcxLjUtNDQtMy44LS40LTcuNCAyLjQtOC4yIDYuMi0uOSAzLjggMS4xIDcuNyA0LjcgOS4ybDE2LjkgNy4yYzEzIDUuNSAyMC44IDEzLjUgMjAuOCAyMS41cy03LjggMTYtMjAuNyAyMS41bC0xNyA3LjJjLTUuNyAyLjQtNiAxMi4yIDAgMTQuOGwxNi45IDcuMmMxMyA1LjUgMjAuOCAxMy41IDIwLjggMjEuNXMtNy44IDE2LTIwLjcgMjEuNWwtMTcgNy4yYy0zLjYgMS41LTUuNiA1LjQtNC43IDkuMi44IDMuNiA0LjEgNi4yIDcuOCA2LjJoLjVjNDIuOC0yLjUgNzEuNS0yNC44IDcxLjUtNDQgMC0xMy0xMy40LTI3LjMtMzUuMi0zNkMyOTAuNiAzMzUuMyAzMDQgMzIxIDMwNCAzMDh6bTI0LTE1NmMtMjMuOCAwLTUyLjcgMjkuMy01NiA3MS40LS4zIDMuNyAyIDcuMiA1LjYgOC4zIDMuNSAxIDcuNS0uNSA5LjMtMy43bDkuNS0xN2M3LjctMTMuNyAxOS4yLTIxLjYgMzEuNS0yMS42czIzLjggNy45IDMxLjUgMjEuNmw5LjUgMTdjMi4xIDMuNyA2LjIgNC43IDkuMyAzLjcgMy42LTEuMSA1LjktNC41IDUuNi04LjMtMy4xLTQyLjEtMzItNzEuNC01NS44LTcxLjR6XCJdLFwia2lzcy13aW5rLWhlYXJ0XCI6WzUwNCw1MTIsW10sXCJmNTk4XCIsXCJNMzA0IDMwOC41YzAtMTkuMi0yOC44LTQxLjUtNzEuNS00NC0zLjgtLjQtNy40IDIuNC04LjIgNi4yLS45IDMuOCAxLjEgNy43IDQuNyA5LjJsMTYuOSA3LjJjMTMgNS41IDIwLjggMTMuNSAyMC44IDIxLjVzLTcuOCAxNi0yMC43IDIxLjVsLTE3IDcuMmMtNS43IDIuNC02IDEyLjIgMCAxNC44bDE2LjkgNy4yYzEzIDUuNSAyMC44IDEzLjUgMjAuOCAyMS41cy03LjggMTYtMjAuNyAyMS41bC0xNyA3LjJjLTMuNiAxLjUtNS42IDUuNC00LjcgOS4yLjggMy42IDQuMSA2LjIgNy44IDYuMmguNWM0Mi44LTIuNSA3MS41LTI0LjggNzEuNS00NCAwLTEzLTEzLjQtMjcuMy0zNS4yLTM2IDIxLjctOS4xIDM1LjEtMjMuNCAzNS4xLTM2LjR6bTcwLjUtODMuNWw5LjUgOC41YzMuOCAzLjMgOS4zIDQgMTMuNyAxLjYgNC40LTIuNCA2LjktNy40IDYuMS0xMi40LTQtMjUuMi0zNC4yLTQyLjEtNTkuOC00Mi4xcy01NS45IDE2LjktNTkuOCA0Mi4xYy0uOCA1IDEuNyAxMCA2LjEgMTIuNCA1LjggMy4xIDExLjIuNyAxMy43LTEuNmw5LjUtOC41YzE0LjgtMTMuMiA0Ni4yLTEzLjIgNjEgMHpNMTM2IDIwOC41YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyem0zNjUuMSAxOTRjLTgtMjAuOC0zMS41LTMxLjUtNTMuMS0yNS45bC04LjQgMi4yLTIuMy04LjRjLTUuOS0yMS40LTI3LTM2LjUtNDktMzMtMjUuMiA0LTQwLjYgMjguNi0zNCA1Mi42bDIyLjkgODIuNmMxLjUgNS4zIDcgOC41IDEyLjQgNy4xbDgzLTIxLjVjMjQuMS02LjMgMzcuNy0zMS44IDI4LjUtNTUuN3pNMzM0IDQzNi4zYy0yNi4xIDEyLjUtNTUuMiAxOS43LTg2IDE5LjctMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwYzAgMjIuMS0zLjcgNDMuMy0xMC40IDYzLjIgOSA2LjQgMTcgMTQuMiAyMi42IDIzLjkgNi40LjEgMTIuNiAxLjQgMTguNiAyLjkgMTAuOS0yNy45IDE3LjEtNTguMiAxNy4xLTkwQzQ5NiAxMTkgMzg1IDggMjQ4IDhTMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4YzM1LjQgMCA2OC45LTcuNSA5OS40LTIwLjktMi41LTcuMyA0LjMgMTcuMi0xMy40LTQ2Ljh6XCJdLGxhdWdoOls0OTYsNTEyLFtdLFwiZjU5OVwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTE0MS40IDM4OS40Yy0zNy44IDM3LjgtODggNTguNi0xNDEuNCA1OC42cy0xMDMuNi0yMC44LTE0MS40LTU4LjZTNDggMzA5LjQgNDggMjU2czIwLjgtMTAzLjYgNTguNi0xNDEuNFMxOTQuNiA1NiAyNDggNTZzMTAzLjYgMjAuOCAxNDEuNCA1OC42UzQ0OCAyMDIuNiA0NDggMjU2cy0yMC44IDEwMy42LTU4LjYgMTQxLjR6TTMyOCAyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem0tMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem0xOTQuNCA2NEgxMzMuNmMtOC4yIDAtMTQuNSA3LTEzLjUgMTUgNy41IDU5LjIgNTguOSAxMDUgMTIxLjEgMTA1aDEzLjZjNjIuMiAwIDExMy42LTQ1LjggMTIxLjEtMTA1IDEtOC01LjMtMTUtMTMuNS0xNXpcIl0sXCJsYXVnaC1iZWFtXCI6WzQ5Niw1MTIsW10sXCJmNTlhXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMTQxLjQgMzg5LjRjLTM3LjggMzcuOC04OCA1OC42LTE0MS40IDU4LjZzLTEwMy42LTIwLjgtMTQxLjQtNTguNlM0OCAzMDkuNCA0OCAyNTZzMjAuOC0xMDMuNiA1OC42LTE0MS40UzE5NC42IDU2IDI0OCA1NnMxMDMuNiAyMC44IDE0MS40IDU4LjZTNDQ4IDIwMi42IDQ0OCAyNTZzLTIwLjggMTAzLjYtNTguNiAxNDEuNHpNMzI4IDE1MmMtMjMuOCAwLTUyLjcgMjkuMy01NiA3MS40LS43IDguNiAxMC44IDExLjkgMTQuOSA0LjVsOS41LTE3YzcuNy0xMy43IDE5LjItMjEuNiAzMS41LTIxLjZzMjMuOCA3LjkgMzEuNSAyMS42bDkuNSAxN2M0LjEgNy40IDE1LjYgNCAxNC45LTQuNS0zLjEtNDIuMS0zMi03MS40LTU1LjgtNzEuNHptLTIwMSA3NS45bDkuNS0xN2M3LjctMTMuNyAxOS4yLTIxLjYgMzEuNS0yMS42czIzLjggNy45IDMxLjUgMjEuNmw5LjUgMTdjNC4xIDcuNCAxNS42IDQgMTQuOS00LjUtMy4zLTQyLjEtMzIuMi03MS40LTU2LTcxLjRzLTUyLjcgMjkuMy01NiA3MS40Yy0uNiA4LjUgMTAuOSAxMS45IDE1LjEgNC41ek0zNjIuNCAyODhIMTMzLjZjLTguMiAwLTE0LjUgNy0xMy41IDE1IDcuNSA1OS4yIDU4LjkgMTA1IDEyMS4xIDEwNWgxMy42YzYyLjIgMCAxMTMuNi00NS44IDEyMS4xLTEwNSAxLTgtNS4zLTE1LTEzLjUtMTV6XCJdLFwibGF1Z2gtc3F1aW50XCI6WzQ5Niw1MTIsW10sXCJmNTliXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMTQxLjQgMzg5LjRjLTM3LjggMzcuOC04OCA1OC42LTE0MS40IDU4LjZzLTEwMy42LTIwLjgtMTQxLjQtNTguNlM0OCAzMDkuNCA0OCAyNTZzMjAuOC0xMDMuNiA1OC42LTE0MS40UzE5NC42IDU2IDI0OCA1NnMxMDMuNiAyMC44IDE0MS40IDU4LjZTNDQ4IDIwMi42IDQ0OCAyNTZzLTIwLjggMTAzLjYtNTguNiAxNDEuNHpNMzQzLjYgMTk2bDMzLjYtNDAuM2M4LjYtMTAuMy0zLjgtMjQuOC0xNS40LTE4bC04MCA0OGMtNy44IDQuNy03LjggMTUuOSAwIDIwLjZsODAgNDhjMTEuNSA2LjggMjQtNy42IDE1LjQtMThMMzQzLjYgMTk2em0tMjA5LjQgNTguM2w4MC00OGM3LjgtNC43IDcuOC0xNS45IDAtMjAuNmwtODAtNDhjLTExLjYtNi45LTI0IDcuNy0xNS40IDE4bDMzLjYgNDAuMy0zMy42IDQwLjNjLTguNyAxMC40IDMuOCAyNC44IDE1LjQgMTh6TTM2Mi40IDI4OEgxMzMuNmMtOC4yIDAtMTQuNSA3LTEzLjUgMTUgNy41IDU5LjIgNTguOSAxMDUgMTIxLjEgMTA1aDEzLjZjNjIuMiAwIDExMy42LTQ1LjggMTIxLjEtMTA1IDEtOC01LjMtMTUtMTMuNS0xNXpcIl0sXCJsYXVnaC13aW5rXCI6WzQ5Niw1MTIsW10sXCJmNTljXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMTQxLjQgMzg5LjRjLTM3LjggMzcuOC04OCA1OC42LTE0MS40IDU4LjZzLTEwMy42LTIwLjgtMTQxLjQtNTguNkM2OC44IDM1OS42IDQ4IDMwOS40IDQ4IDI1NnMyMC44LTEwMy42IDU4LjYtMTQxLjRDMTQ0LjQgNzYuOCAxOTQuNiA1NiAyNDggNTZzMTAzLjYgMjAuOCAxNDEuNCA1OC42YzM3LjggMzcuOCA1OC42IDg4IDU4LjYgMTQxLjRzLTIwLjggMTAzLjYtNTguNiAxNDEuNHpNMzI4IDE2NGMtMjUuNyAwLTU1LjkgMTYuOS01OS45IDQyLjEtMS43IDExLjIgMTEuNSAxOC4yIDE5LjggMTAuOGw5LjUtOC41YzE0LjgtMTMuMiA0Ni4yLTEzLjIgNjEgMGw5LjUgOC41YzguNSA3LjQgMjEuNi4zIDE5LjgtMTAuOC0zLjgtMjUuMi0zNC00Mi4xLTU5LjctNDIuMXptLTE2MCA2MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6bTE5NC40IDY0SDEzMy42Yy04LjIgMC0xNC41IDctMTMuNSAxNSA3LjUgNTkuMiA1OC45IDEwNSAxMjEuMSAxMDVoMTMuNmM2Mi4yIDAgMTEzLjYtNDUuOCAxMjEuMS0xMDUgMS04LTUuMy0xNS0xMy41LTE1elwiXSxsZW1vbjpbNTEyLDUxMixbXSxcImYwOTRcIixcIk00ODQuMTEyIDI3Ljg4OUM0NTUuOTg5LS4yMzMgNDE2LjEwOC04LjA1NyAzODcuMDU5IDguODY1IDM0Ny42MDQgMzEuODQ4IDIyMy41MDQtNDEuMTExIDkxLjE5NiA5MS4xOTctNDEuMjc3IDIyMy42NzIgMzEuOTIzIDM0Ny40NzIgOC44NjYgMzg3LjA1OGMtMTYuOTIyIDI5LjA1MS05LjEgNjguOTMyIDE5LjAyMiA5Ny4wNTQgMjguMTM1IDI4LjEzNSA2OC4wMTEgMzUuOTM4IDk3LjA1NyAxOS4wMjEgMzkuNDIzLTIyLjk3IDE2My41NTcgNDkuOTY5IDI5NS44NTgtODIuMzI5IDEzMi40NzQtMTMyLjQ3NyA1OS4yNzMtMjU2LjI3NyA4Mi4zMzEtMjk1Ljg2MSAxNi45MjItMjkuMDUgOS4xLTY4LjkzMS0xOS4wMjItOTcuMDU0em0tMjIuNDA1IDcyLjg5NGMtMzguOCA2Ni42MDkgNDUuNiAxNjUuNjM1LTc0Ljg0NSAyODYuMDgtMTIwLjQ0IDEyMC40NDMtMjE5LjQ3NSAzNi4wNDgtMjg2LjA3NiA3NC44NDMtMjIuNjc5IDEzLjIwNy02NC4wMzUtMjcuMjQxLTUwLjQ5My01MC40ODggMzguOC02Ni42MDktNDUuNi0xNjUuNjM1IDc0Ljg0NS0yODYuMDhDMjQ1LjU3MyA0LjcwMiAzNDQuNjE2IDg5LjA4NiA0MTEuMjE5IDUwLjI5MmMyMi43My0xMy4yNCA2NC4wMDUgMjcuMjg4IDUwLjQ4OCA1MC40OTF6bS0xNjkuODYxIDguNzM2YzEuMzcgMTAuOTYtNi40MDQgMjAuOTU3LTE3LjM2NSAyMi4zMjctNTQuODQ2IDYuODU1LTEzNS43NzkgODcuNzg3LTE0Mi42MzUgMTQyLjYzNS0xLjM3MyAxMC45ODktMTEuMzk5IDE4LjczNC0yMi4zMjYgMTcuMzY1LTEwLjk2MS0xLjM3LTE4LjczNS0xMS4zNjYtMTcuMzY1LTIyLjMyNiA5LjE2Mi03My4yODYgMTA0LjE2Ny0xNjguMjE1IDE3Ny4zNjUtMTc3LjM2NSAxMC45NTMtMS4zNjggMjAuOTU2IDYuNDAzIDIyLjMyNiAxNy4zNjR6XCJdLFwibGlmZS1yaW5nXCI6WzUxMiw1MTIsW10sXCJmMWNkXCIsXCJNMjU2IDUwNGMxMzYuOTY3IDAgMjQ4LTExMS4wMzMgMjQ4LTI0OFMzOTIuOTY3IDggMjU2IDggOCAxMTkuMDMzIDggMjU2czExMS4wMzMgMjQ4IDI0OCAyNDh6bS0xMDMuMzk4LTc2LjcybDUzLjQxMS01My40MTFjMzEuODA2IDEzLjUwNiA2OC4xMjggMTMuNTIyIDk5Ljk3NCAwbDUzLjQxMSA1My40MTFjLTYzLjIxNyAzOC4zMTktMTQzLjU3OSAzOC4zMTktMjA2Ljc5NiAwek0zMzYgMjU2YzAgNDQuMTEyLTM1Ljg4OCA4MC04MCA4MHMtODAtMzUuODg4LTgwLTgwIDM1Ljg4OC04MCA4MC04MCA4MCAzNS44ODggODAgODB6bTkxLjI4IDEwMy4zOThsLTUzLjQxMS01My40MTFjMTMuNTA1LTMxLjgwNiAxMy41MjItNjguMTI4IDAtOTkuOTc0bDUzLjQxMS01My40MTFjMzguMzE5IDYzLjIxNyAzOC4zMTkgMTQzLjU3OSAwIDIwNi43OTZ6TTM1OS4zOTcgODQuNzJsLTUzLjQxMSA1My40MTFjLTMxLjgwNi0xMy41MDUtNjguMTI4LTEzLjUyMi05OS45NzMgMEwxNTIuNjAyIDg0LjcyYzYzLjIxNy0zOC4zMTkgMTQzLjU3OS0zOC4zMTkgMjA2Ljc5NSAwek04NC43MiAxNTIuNjAybDUzLjQxMSA1My40MTFjLTEzLjUwNiAzMS44MDYtMTMuNTIyIDY4LjEyOCAwIDk5Ljk3NEw4NC43MiAzNTkuMzk4Yy0zOC4zMTktNjMuMjE3LTM4LjMxOS0xNDMuNTc5IDAtMjA2Ljc5NnpcIl0sbGlnaHRidWxiOlszODQsNTEyLFtdLFwiZjBlYlwiLFwiTTI3MiA0Mjh2MjhjMCAxMC40NDktNi42OCAxOS4zMzQtMTYgMjIuNjI5VjQ4OGMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRoLTgwYy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjR2LTkuMzcxYy05LjMyLTMuMjk1LTE2LTEyLjE4LTE2LTIyLjYyOXYtMjhjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMzZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnpNMTI4IDE3NmMwLTM1LjI5IDI4LjcxLTY0IDY0LTY0IDguODM3IDAgMTYtNy4xNjQgMTYtMTZzLTcuMTYzLTE2LTE2LTE2Yy01Mi45MzUgMC05NiA0My4wNjUtOTYgOTYgMCA4LjgzNiA3LjE2NCAxNiAxNiAxNnMxNi03LjE2NCAxNi0xNnptNjQtMTI4YzcwLjczNCAwIDEyOCA1Ny4yNTQgMTI4IDEyOCAwIDc3LjYwMi0zNy4zODMgNjAuNDc3LTgwLjk4IDE2MGgtOTQuMDRDMTAxLjMxOCAyMzYuMzMgNjQgMjUzLjg2OSA2NCAxNzZjMC03MC43MzUgNTcuMjU0LTEyOCAxMjgtMTI4bTAtNDhDOTQuODA1IDAgMTYgNzguODAzIDE2IDE3NmMwIDEwMS43MzEgNTEuNjk3IDkxLjU0MSA5MC41MTYgMTkyLjY3NCAzLjU1IDkuMjQ5IDEyLjQ3IDE1LjMyNiAyMi4zNzYgMTUuMzI2aDEyNi4yMTVjOS45MDYgMCAxOC44MjYtNi4wNzggMjIuMzc2LTE1LjMyNkMzMTYuMzAzIDI2Ny41NDEgMzY4IDI3Ny43MzEgMzY4IDE3NiAzNjggNzguODAzIDI4OS4xOTUgMCAxOTIgMHpcIl0sXCJsaXN0LWFsdFwiOls1MTIsNTEyLFtdLFwiZjAyMlwiLFwiTTQ2NCAzMkg0OEMyMS40OSAzMiAwIDUzLjQ5IDAgODB2MzUyYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWODBjMC0yNi41MS0yMS40OS00OC00OC00OHptLTYgNDAwSDU0YTYgNiAwIDAgMS02LTZWODZhNiA2IDAgMCAxIDYtNmg0MDRhNiA2IDAgMCAxIDYgNnYzNDBhNiA2IDAgMCAxLTYgNnptLTQyLTkydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMjA0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDIwMGM2LjYyNyAwIDEyIDUuMzczIDEyIDEyem0wLTk2djI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMjA0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDIwMGM2LjYyNyAwIDEyIDUuMzczIDEyIDEyem0wLTk2djI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMjA0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDIwMGM2LjYyNyAwIDEyIDUuMzczIDEyIDEyem0tMjUyIDEyYzAgMTkuODgyLTE2LjExOCAzNi0zNiAzNnMtMzYtMTYuMTE4LTM2LTM2IDE2LjExOC0zNiAzNi0zNiAzNiAxNi4xMTggMzYgMzZ6bTAgOTZjMCAxOS44ODItMTYuMTE4IDM2LTM2IDM2cy0zNi0xNi4xMTgtMzYtMzYgMTYuMTE4LTM2IDM2LTM2IDM2IDE2LjExOCAzNiAzNnptMCA5NmMwIDE5Ljg4Mi0xNi4xMTggMzYtMzYgMzZzLTM2LTE2LjExOC0zNi0zNiAxNi4xMTgtMzYgMzYtMzYgMzYgMTYuMTE4IDM2IDM2elwiXSxtYXA6WzU3Niw1MTIsW10sXCJmMjc5XCIsXCJNNTYwLjAyIDMyYy0xLjk2IDAtMy45OC4zNy01Ljk2IDEuMTZMMzg0LjAxIDk2SDM4NEwyMTIgMzUuMjhBNjQuMjUyIDY0LjI1MiAwIDAgMCAxOTEuNzYgMzJjLTYuNjkgMC0xMy4zNyAxLjA1LTE5LjgxIDMuMTRMMjAuMTIgODcuOTVBMzIuMDA2IDMyLjAwNiAwIDAgMCAwIDExNy42NnYzNDYuMzJDMCA0NzMuMTcgNy41MyA0ODAgMTUuOTkgNDgwYzEuOTYgMCAzLjk3LS4zNyA1Ljk2LTEuMTZMMTkyIDQxNmwxNzIgNjAuNzFhNjMuOTggNjMuOTggMCAwIDAgNDAuMDUuMTVsMTUxLjgzLTUyLjgxQTMxLjk5NiAzMS45OTYgMCAwIDAgNTc2IDM5NC4zNFY0OC4wMmMwLTkuMTktNy41My0xNi4wMi0xNS45OC0xNi4wMnpNMjI0IDkwLjQybDEyOCA0NS4xOXYyODUuOTdsLTEyOC00NS4xOVY5MC40MnpNNDggNDE4LjA1VjEyOS4wN2wxMjgtNDQuNTN2Mjg2LjJsLS42NC4yM0w0OCA0MTguMDV6bTQ4MC0zNS4xM2wtMTI4IDQ0LjUzVjE0MS4yNmwuNjQtLjI0TDUyOCA5My45NXYyODguOTd6XCJdLG1laDpbNDk2LDUxMixbXSxcImYxMWFcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bS04MC0yMTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem0xNjAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyem04IDE0NEgxNjBjLTEzLjIgMC0yNCAxMC44LTI0IDI0czEwLjggMjQgMjQgMjRoMTc2YzEzLjIgMCAyNC0xMC44IDI0LTI0cy0xMC44LTI0LTI0LTI0elwiXSxcIm1laC1ibGFua1wiOls0OTYsNTEyLFtdLFwiZjVhNFwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy0xMTAuMyAwLTIwMC04OS43LTIwMC0yMDBTMTM3LjcgNTYgMjQ4IDU2czIwMCA4OS43IDIwMCAyMDAtODkuNyAyMDAtMjAwIDIwMHptLTgwLTI4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6bTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpcIl0sXCJtZWgtcm9sbGluZy1leWVzXCI6WzQ5Niw1MTIsW10sXCJmNWE1XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMCA0NDhjLTExMC4zIDAtMjAwLTg5LjctMjAwLTIwMFMxMzcuNyA1NiAyNDggNTZzMjAwIDg5LjcgMjAwIDIwMC04OS43IDIwMC0yMDAgMjAwem04OC0zMDRjLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzIgNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyem0wIDExMmMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC0xMy42IDcuMy0yNS4xIDE3LjctMzIuMy0xIDIuNi0xLjcgNS4zLTEuNyA4LjMgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTIuOS0uNy01LjctMS43LTguMyAxMC40IDcuMiAxNy43IDE4LjcgMTcuNyAzMi4zIDAgMjIuMS0xNy45IDQwLTQwIDQwem0tMTA0LTQwYzAtMzkuOC0zMi4yLTcyLTcyLTcycy03MiAzMi4yLTcyIDcyIDMyLjIgNzIgNzIgNzIgNzItMzIuMiA3Mi03MnptLTExMiAwYzAtMTMuNiA3LjMtMjUuMSAxNy43LTMyLjMtMSAyLjYtMS43IDUuMy0xLjcgOC4zIDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yLjktLjctNS43LTEuNy04LjMgMTAuNCA3LjIgMTcuNyAxOC43IDE3LjcgMzIuMyAwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MHptMTkyIDEyOEgxODRjLTEzLjIgMC0yNCAxMC44LTI0IDI0czEwLjggMjQgMjQgMjRoMTI4YzEzLjIgMCAyNC0xMC44IDI0LTI0cy0xMC44LTI0LTI0LTI0elwiXSxcIm1pbnVzLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE0NlwiLFwiTTEwOCAyODRjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMzJjMC02LjYgNS40LTEyIDEyLTEyaDIzMmM2LjYgMCAxMiA1LjQgMTIgMTJ2MzJjMCA2LjYtNS40IDEyLTEyIDEySDEwOHpNNDQ4IDgwdjM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tNDggMzQ2Vjg2YzAtMy4zLTIuNy02LTYtNkg1NGMtMy4zIDAtNiAyLjctNiA2djM0MGMwIDMuMyAyLjcgNiA2IDZoMzQwYzMuMyAwIDYtMi43IDYtNnpcIl0sXCJtb25leS1iaWxsLWFsdFwiOls2NDAsNTEyLFtdLFwiZjNkMVwiLFwiTTMyMCAxNDRjLTUzLjAyIDAtOTYgNTAuMTQtOTYgMTEyIDAgNjEuODUgNDIuOTggMTEyIDk2IDExMiA1MyAwIDk2LTUwLjEzIDk2LTExMiAwLTYxLjg2LTQyLjk4LTExMi05Ni0xMTJ6bTQwIDE2OGMwIDQuNDItMy41OCA4LTggOGgtNjRjLTQuNDIgMC04LTMuNTgtOC04di0xNmMwLTQuNDIgMy41OC04IDgtOGgxNnYtNTUuNDRsLS40Ny4zMWE3Ljk5MiA3Ljk5MiAwIDAgMS0xMS4wOS0yLjIybC04Ljg4LTEzLjMxYTcuOTkyIDcuOTkyIDAgMCAxIDIuMjItMTEuMDlsMTUuMzMtMTAuMjJhMjMuOTkgMjMuOTkgMCAwIDEgMTMuMzEtNC4wM0gzMjhjNC40MiAwIDggMy41OCA4IDh2ODhoMTZjNC40MiAwIDggMy41OCA4IDh2MTZ6TTYwOCA2NEgzMkMxNC4zMyA2NCAwIDc4LjMzIDAgOTZ2MzIwYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNTc2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWOTZjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptLTE2IDI3MmMtMzUuMzUgMC02NCAyOC42NS02NCA2NEgxMTJjMC0zNS4zNS0yOC42NS02NC02NC02NFYxNzZjMzUuMzUgMCA2NC0yOC42NSA2NC02NGg0MTZjMCAzNS4zNSAyOC42NSA2NCA2NCA2NHYxNjB6XCJdLG1vb246WzUxMiw1MTIsW10sXCJmMTg2XCIsXCJNMjc5LjEzNSA1MTJjNzguNzU2IDAgMTUwLjk4Mi0zNS44MDQgMTk4Ljg0NC05NC43NzUgMjguMjctMzQuODMxLTIuNTU4LTg1LjcyMi00Ni4yNDktNzcuNDAxLTgyLjM0OCAxNS42ODMtMTU4LjI3Mi00Ny4yNjgtMTU4LjI3Mi0xMzAuNzkyIDAtNDguNDI0IDI2LjA2LTkyLjI5MiA2Ny40MzQtMTE1LjgzNiAzOC43NDUtMjIuMDUgMjguOTk5LTgwLjc4OC0xNS4wMjItODguOTE5QTI1Ny45MzYgMjU3LjkzNiAwIDAgMCAyNzkuMTM1IDBjLTE0MS4zNiAwLTI1NiAxMTQuNTc1LTI1NiAyNTYgMCAxNDEuMzYgMTE0LjU3NiAyNTYgMjU2IDI1NnptMC00NjRjMTIuOTg1IDAgMjUuNjg5IDEuMjAxIDM4LjAxNiAzLjQ3OC01NC43NiAzMS4xNjMtOTEuNjkzIDkwLjA0Mi05MS42OTMgMTU3LjU1NCAwIDExMy44NDggMTAzLjY0MSAxOTkuMiAyMTUuMjUyIDE3Ny45NDRDNDAyLjU3NCA0MzMuOTY0IDM0NC4zNjYgNDY0IDI3OS4xMzUgNDY0Yy0xMTQuODc1IDAtMjA4LTkzLjEyNS0yMDgtMjA4czkzLjEyNS0yMDggMjA4LTIwOHpcIl0sbmV3c3BhcGVyOls1NzYsNTEyLFtdLFwiZjFlYVwiLFwiTTU1MiA2NEgxMTJjLTIwLjg1OCAwLTM4LjY0MyAxMy4zNzctNDUuMjQ4IDMySDI0Yy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2MjcyYzAgMzAuOTI4IDI1LjA3MiA1NiA1NiA1Nmg0OTZjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0Vjg4YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpNNDggMzkyVjE0NGgxNnYyNDhjMCA0LjQxMS0zLjU4OSA4LTggOHMtOC0zLjU4OS04LTh6bTQ4MCA4SDExMS40MjJjLjM3NC0yLjYxNC41NzgtNS4yODMuNTc4LThWMTEyaDQxNnYyODh6TTE3MiAyODBoMTM2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTk2YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTcyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjk2YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJ6bTI4LTgwaDgwdjQwaC04MHYtNDB6bS00MCAxNDB2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTM2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgxNzJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTE5MiAwdi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEwNGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzY0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wLTE0NHYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMDRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDM2NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnptMCA3MnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMDRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDM2NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnpcIl0sXCJvYmplY3QtZ3JvdXBcIjpbNTEyLDUxMixbXSxcImYyNDdcIixcIk01MDAgMTI4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJWNDRjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNzJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MTJIOTZWNDRjMC02LjYyNy01LjM3My0xMi0xMi0xMkgxMkM1LjM3MyAzMiAwIDM3LjM3MyAwIDQ0djcyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTJ2MjU2SDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjcyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNzJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtMTJoMzIwdjEyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNzJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNzJjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtMTJWMTI4aDEyem0tNTItNjRoMzJ2MzJoLTMyVjY0ek0zMiA2NGgzMnYzMkgzMlY2NHptMzIgMzg0SDMydi0zMmgzMnYzMnptNDE2IDBoLTMydi0zMmgzMnYzMnptLTQwLTY0aC0xMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYxMkg5NnYtMTJjMC02LjYyNy01LjM3My0xMi0xMi0xMkg3MlYxMjhoMTJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtMTJoMzIwdjEyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTJ2MjU2em0tMzYtMTkyaC04NHYtNTJjMC02LjYyOC01LjM3My0xMi0xMi0xMkgxMDhjLTYuNjI3IDAtMTIgNS4zNzItMTIgMTJ2MTY4YzAgNi42MjggNS4zNzMgMTIgMTIgMTJoODR2NTJjMCA2LjYyOCA1LjM3MyAxMiAxMiAxMmgyMDBjNi42MjcgMCAxMi01LjM3MiAxMi0xMlYyMDRjMC02LjYyOC01LjM3My0xMi0xMi0xMnptLTI2OC0yNGgxNDR2MTEySDEzNlYxNjh6bTI0MCAxNzZIMjMydi0yNGg3NmM2LjYyNyAwIDEyLTUuMzcyIDEyLTEydi03Nmg1NnYxMTJ6XCJdLFwib2JqZWN0LXVuZ3JvdXBcIjpbNTc2LDUxMixbXSxcImYyNDhcIixcIk01NjQgMjI0YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTcyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTcyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjEyaC04OHYtMjRoMTJjNi42MjcgMCAxMi01LjM3MyAxMi0xMlY0NGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC03MmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYxMkg5NlY0NGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDEyQzUuMzczIDMyIDAgMzcuMzczIDAgNDR2NzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxMnYxNjBIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg3MmM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0xMmg4OHYyNGgtMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg3MmM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0xMmgyMjR2MTJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg3MmM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi03MmMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC0xMlYyMjRoMTJ6TTM1MiA2NGgzMnYzMmgtMzJWNjR6bTAgMjU2aDMydjMyaC0zMnYtMzJ6TTY0IDM1MkgzMnYtMzJoMzJ2MzJ6bTAtMjU2SDMyVjY0aDMydjMyem0zMiAyMTZ2LTEyYzAtNi42MjctNS4zNzMtMTItMTItMTJINzJWMTI4aDEyYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTEyaDIyNHYxMmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDEydjE2MGgtMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MTJIOTZ6bTEyOCAxMzZoLTMydi0zMmgzMnYzMnptMjgwLTY0aC0xMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYxMkgyNTZ2LTEyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTEydi0yNGg4OHYxMmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDcyYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTcyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTEydi04OGg4OHYxMmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDEydjE2MHptNDAgNjRoLTMydi0zMmgzMnYzMnptMC0yNTZoLTMydi0zMmgzMnYzMnpcIl0sXCJwYXBlci1wbGFuZVwiOls1MTIsNTEyLFtdLFwiZjFkOFwiLFwiTTQ0MCA2LjVMMjQgMjQ2LjRjLTM0LjQgMTkuOS0zMS4xIDcwLjggNS43IDg1LjlMMTQ0IDM3OS42VjQ2NGMwIDQ2LjQgNTkuMiA2NS41IDg2LjYgMjguNmw0My44LTU5LjEgMTExLjkgNDYuMmM1LjkgMi40IDEyLjEgMy42IDE4LjMgMy42IDguMiAwIDE2LjMtMi4xIDIzLjYtNi4yIDEyLjgtNy4yIDIxLjYtMjAgMjMuOS0zNC41bDU5LjQtMzg3LjJjNi4xLTQwLjEtMzYuOS02OC44LTcxLjUtNDguOXpNMTkyIDQ2NHYtNjQuNmwzNi42IDE1LjFMMTkyIDQ2NHptMjEyLjYtMjguN2wtMTUzLjgtNjMuNUwzOTEgMTY5LjVjMTAuNy0xNS41LTkuNS0zMy41LTIzLjctMjEuMkwxNTUuOCAzMzIuNiA0OCAyODggNDY0IDQ4bC01OS40IDM4Ny4zelwiXSxcInBhdXNlLWNpcmNsZVwiOls1MTIsNTEyLFtdLFwiZjI4YlwiLFwiTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bTAgNDQ4Yy0xMTAuNSAwLTIwMC04OS41LTIwMC0yMDBTMTQ1LjUgNTYgMjU2IDU2czIwMCA4OS41IDIwMCAyMDAtODkuNSAyMDAtMjAwIDIwMHptOTYtMjgwdjE2MGMwIDguOC03LjIgMTYtMTYgMTZoLTQ4Yy04LjggMC0xNi03LjItMTYtMTZWMTc2YzAtOC44IDcuMi0xNiAxNi0xNmg0OGM4LjggMCAxNiA3LjIgMTYgMTZ6bS0xMTIgMHYxNjBjMCA4LjgtNy4yIDE2LTE2IDE2aC00OGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoNDhjOC44IDAgMTYgNy4yIDE2IDE2elwiXSxcInBsYXktY2lyY2xlXCI6WzUxMiw1MTIsW10sXCJmMTQ0XCIsXCJNMzcxLjcgMjM4bC0xNzYtMTA3Yy0xNS44LTguOC0zNS43IDIuNS0zNS43IDIxdjIwOGMwIDE4LjQgMTkuOCAyOS44IDM1LjcgMjFsMTc2LTEwMWMxNi40LTkuMSAxNi40LTMyLjggMC00MnpNNTA0IDI1NkM1MDQgMTE5IDM5MyA4IDI1NiA4UzggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDh6bS00NDggMGMwLTExMC41IDg5LjUtMjAwIDIwMC0yMDBzMjAwIDg5LjUgMjAwIDIwMC04OS41IDIwMC0yMDAgMjAwUzU2IDM2Ni41IDU2IDI1NnpcIl0sXCJwbHVzLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjBmZVwiLFwiTTM1MiAyNDB2MzJjMCA2LjYtNS40IDEyLTEyIDEyaC04OHY4OGMwIDYuNi01LjQgMTItMTIgMTJoLTMyYy02LjYgMC0xMi01LjQtMTItMTJ2LTg4aC04OGMtNi42IDAtMTItNS40LTEyLTEydi0zMmMwLTYuNiA1LjQtMTIgMTItMTJoODh2LTg4YzAtNi42IDUuNC0xMiAxMi0xMmgzMmM2LjYgMCAxMiA1LjQgMTIgMTJ2ODhoODhjNi42IDAgMTIgNS40IDEyIDEyem05Ni0xNjB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGgzNTJjMjYuNSAwIDQ4IDIxLjUgNDggNDh6bS00OCAzNDZWODZjMC0zLjMtMi43LTYtNi02SDU0Yy0zLjMgMC02IDIuNy02IDZ2MzQwYzAgMy4zIDIuNyA2IDYgNmgzNDBjMy4zIDAgNi0yLjcgNi02elwiXSxcInF1ZXN0aW9uLWNpcmNsZVwiOls1MTIsNTEyLFtdLFwiZjA1OVwiLFwiTTI1NiA4QzExOS4wNDMgOCA4IDExOS4wODMgOCAyNTZjMCAxMzYuOTk3IDExMS4wNDMgMjQ4IDI0OCAyNDhzMjQ4LTExMS4wMDMgMjQ4LTI0OEM1MDQgMTE5LjA4MyAzOTIuOTU3IDggMjU2IDh6bTAgNDQ4Yy0xMTAuNTMyIDAtMjAwLTg5LjQzMS0yMDAtMjAwIDAtMTEwLjQ5NSA4OS40NzItMjAwIDIwMC0yMDAgMTEwLjQ5MSAwIDIwMCA4OS40NzEgMjAwIDIwMCAwIDExMC41My04OS40MzEgMjAwLTIwMCAyMDB6bTEwNy4yNDQtMjU1LjJjMCA2Ny4wNTItNzIuNDIxIDY4LjA4NC03Mi40MjEgOTIuODYzVjMwMGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC00NS42NDdjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTguNjU5YzAtMzUuNzQ1IDI3LjEtNTAuMDM0IDQ3LjU3OS02MS41MTYgMTcuNTYxLTkuODQ1IDI4LjMyNC0xNi41NDEgMjguMzI0LTI5LjU3OSAwLTE3LjI0Ni0yMS45OTktMjguNjkzLTM5Ljc4NC0yOC42OTMtMjMuMTg5IDAtMzMuODk0IDEwLjk3Ny00OC45NDIgMjkuOTY5LTQuMDU3IDUuMTItMTEuNDYgNi4wNzEtMTYuNjY2IDIuMTI0bC0yNy44MjQtMjEuMDk4Yy01LjEwNy0zLjg3Mi02LjI1MS0xMS4wNjYtMi42NDQtMTYuMzYzQzE4NC44NDYgMTMxLjQ5MSAyMTQuOTQgMTEyIDI2MS43OTQgMTEyYzQ5LjA3MSAwIDEwMS40NSAzOC4zMDQgMTAxLjQ1IDg4Ljh6TTI5OCAzNjhjMCAyMy4xNTktMTguODQxIDQyLTQyIDQycy00Mi0xOC44NDEtNDItNDIgMTguODQxLTQyIDQyLTQyIDQyIDE4Ljg0MSA0MiA0MnpcIl0scmVnaXN0ZXJlZDpbNTEyLDUxMixbXSxcImYyNWRcIixcIk0yNTYgOEMxMTkuMDMzIDggOCAxMTkuMDMzIDggMjU2czExMS4wMzMgMjQ4IDI0OCAyNDggMjQ4LTExMS4wMzMgMjQ4LTI0OFMzOTIuOTY3IDggMjU2IDh6bTAgNDQ4Yy0xMTAuNTMyIDAtMjAwLTg5LjQ1MS0yMDAtMjAwIDAtMTEwLjUzMSA4OS40NTEtMjAwIDIwMC0yMDAgMTEwLjUzMiAwIDIwMCA4OS40NTEgMjAwIDIwMCAwIDExMC41MzItODkuNDUxIDIwMC0yMDAgMjAwem0xMTAuNDQyLTgxLjc5MWMtNTMuMDQ2LTk2LjI4NC01MC4yNS05MS40NjgtNTMuMjcxLTk2LjA4NSAyNC4yNjctMTMuODc5IDM5LjQ4Mi00MS41NjMgMzkuNDgyLTczLjE3NiAwLTUyLjUwMy0zMC4yNDctODUuMjUyLTEwMS40OTgtODUuMjUyaC03OC42NjdjLTYuNjE3IDAtMTIgNS4zODMtMTIgMTJWMzgwYzAgNi42MTcgNS4zODMgMTIgMTIgMTJoMzguNTY4YzYuNjE3IDAgMTItNS4zODMgMTItMTJ2LTgzLjY2M2gzMS45NThsNDcuNTE1IDg5LjMwM2ExMS45OCAxMS45OCAwIDAgMCAxMC41OTMgNi4zNmg0Mi44MWM5LjE0IDAgMTQuOTE0LTkuNzk5IDEwLjUxLTE3Ljc5MXpNMjU2LjkzMyAyMzkuOTA2aC0zMy44NzV2LTY0LjE0aDI3LjM3N2MzMi40MTcgMCAzOC45MjkgMTIuMTMzIDM4LjkyOSAzMS43MDktLjAwMSAyMC45MTMtMTEuNTE4IDMyLjQzMS0zMi40MzEgMzIuNDMxelwiXSxcInNhZC1jcnlcIjpbNDk2LDUxMixbXSxcImY1YjNcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0xNDQgMzg2LjRWMjgwYzAtMTMuMi0xMC44LTI0LTI0LTI0cy0yNCAxMC44LTI0IDI0djE1MS40QzMxNS41IDQ0NyAyODIuOCA0NTYgMjQ4IDQ1NnMtNjcuNS05LTk2LTI0LjZWMjgwYzAtMTMuMi0xMC44LTI0LTI0LTI0cy0yNCAxMC44LTI0IDI0djExNC40Yy0zNC42LTM2LTU2LTg0LjctNTYtMTM4LjQgMC0xMTAuMyA4OS43LTIwMCAyMDAtMjAwczIwMCA4OS43IDIwMCAyMDBjMCA1My43LTIxLjQgMTAyLjUtNTYgMTM4LjR6TTIwNS44IDIzNC41YzQuNC0yLjQgNi45LTcuNCA2LjEtMTIuNC00LTI1LjItMzQuMi00Mi4xLTU5LjgtNDIuMXMtNTUuOSAxNi45LTU5LjggNDIuMWMtLjggNSAxLjcgMTAgNi4xIDEyLjQgNC40IDIuNCA5LjkgMS44IDEzLjctMS42bDkuNS04LjVjMTQuOC0xMy4yIDQ2LjItMTMuMiA2MSAwbDkuNSA4LjVjMi41IDIuMyA3LjkgNC44IDEzLjcgMS42ek0zNDQgMTgwYy0yNS43IDAtNTUuOSAxNi45LTU5LjggNDIuMS0uOCA1IDEuNyAxMCA2LjEgMTIuNCA0LjUgMi40IDkuOSAxLjggMTMuNy0xLjZsOS41LTguNWMxNC44LTEzLjIgNDYuMi0xMy4yIDYxIDBsOS41IDguNWMyLjUgMi4yIDggNC43IDEzLjcgMS42IDQuNC0yLjQgNi45LTcuNCA2LjEtMTIuNC0zLjktMjUuMi0zNC4xLTQyLjEtNTkuOC00Mi4xem0tOTYgOTJjLTMwLjkgMC01NiAyOC43LTU2IDY0czI1LjEgNjQgNTYgNjQgNTYtMjguNyA1Ni02NC0yNS4xLTY0LTU2LTY0elwiXSxcInNhZC10ZWFyXCI6WzQ5Niw1MTIsW10sXCJmNWI0XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMCA0NDhjLTExMC4zIDAtMjAwLTg5LjctMjAwLTIwMFMxMzcuNyA1NiAyNDggNTZzMjAwIDg5LjcgMjAwIDIwMC04OS43IDIwMC0yMDAgMjAwem04LTE1MmMtMTMuMiAwLTI0IDEwLjgtMjQgMjRzMTAuOCAyNCAyNCAyNGMyMy44IDAgNDYuMyAxMC41IDYxLjYgMjguOCA4LjEgOS44IDIzLjIgMTEuOSAzMy44IDMuMSAxMC4yLTguNSAxMS42LTIzLjYgMy4xLTMzLjhDMzMwIDMyMC44IDI5NC4xIDMwNCAyNTYgMzA0em0tODgtNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem0xNjAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyem0tMTY1LjYgOTguOEMxNTEgMjkwLjEgMTI2IDMyNS40IDEyNiAzNDIuOWMwIDIyLjcgMTguOCA0MS4xIDQyIDQxLjFzNDItMTguNCA0Mi00MS4xYzAtMTcuNS0yNS01Mi44LTM2LjQtNjguMS0yLjgtMy43LTguNC0zLjctMTEuMiAwelwiXSxzYXZlOls0NDgsNTEyLFtdLFwiZjBjN1wiLFwiTTQzMy45NDEgMTI5Ljk0MWwtODMuODgyLTgzLjg4MkE0OCA0OCAwIDAgMCAzMTYuMTE4IDMySDQ4QzIxLjQ5IDMyIDAgNTMuNDkgMCA4MHYzNTJjMCAyNi41MSAyMS40OSA0OCA0OCA0OGgzNTJjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxNjMuODgyYTQ4IDQ4IDAgMCAwLTE0LjA1OS0zMy45NDF6TTI3MiA4MHY4MEgxNDRWODBoMTI4em0xMjIgMzUySDU0YTYgNiAwIDAgMS02LTZWODZhNiA2IDAgMCAxIDYtNmg0MnYxMDRjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDE3NmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWODMuODgybDc4LjI0MyA3OC4yNDNhNiA2IDAgMCAxIDEuNzU3IDQuMjQzVjQyNmE2IDYgMCAwIDEtNiA2ek0yMjQgMjMyYy00OC41MjMgMC04OCAzOS40NzctODggODhzMzkuNDc3IDg4IDg4IDg4IDg4LTM5LjQ3NyA4OC04OC0zOS40NzctODgtODgtODh6bTAgMTI4Yy0yMi4wNTYgMC00MC0xNy45NDQtNDAtNDBzMTcuOTQ0LTQwIDQwLTQwIDQwIDE3Ljk0NCA0MCA0MC0xNy45NDQgNDAtNDAgNDB6XCJdLFwic2hhcmUtc3F1YXJlXCI6WzU3Niw1MTIsW10sXCJmMTRkXCIsXCJNNTYxLjkzOCAxNTguMDZMNDE3Ljk0IDE0LjA5MkMzODcuOTI2LTE1LjkyMiAzMzYgNS4wOTcgMzM2IDQ4LjAzMnY1Ny4xOThjLTQyLjQ1IDEuODgtODQuMDMgNi41NS0xMjAuNzYgMTcuOTktMzUuMTcgMTAuOTUtNjMuMDcgMjcuNTgtODIuOTEgNDkuNDJDMTA4LjIyIDE5OS4yIDk2IDIzMi42IDk2IDI3MS45NGMwIDYxLjY5NyAzMy4xNzggMTEyLjQ1NSA4NC44NyAxNDQuNzYgMzcuNTQ2IDIzLjUwOCA4NS4yNDgtMTIuNjUxIDcxLjAyLTU1Ljc0LTE1LjUxNS00Ny4xMTktMTcuMTU2LTcwLjkyMyA4NC4xMS03OC43NlYzMzZjMCA0Mi45OTMgNTEuOTY4IDYzLjkxMyA4MS45NCAzMy45NGwxNDMuOTk4LTE0NGMxOC43NS0xOC43NCAxOC43NS00OS4xNCAwLTY3Ljg4ek0zODQgMzM2VjIzMi4xNkMyNTUuMzA5IDIzNC4wODIgMTY2LjQ5MiAyNTUuMzUgMjA2LjMxIDM3NiAxNzYuNzkgMzU3LjU1IDE0NCAzMjQuMDggMTQ0IDI3MS45NGMwLTEwOS4zMzQgMTI5LjE0LTExOC45NDcgMjQwLTExOS44NVY0OGwxNDQgMTQ0LTE0NCAxNDR6bTI0Ljc0IDg0LjQ5M2E4Mi42NTggODIuNjU4IDAgMCAwIDIwLjk3NC05LjMwM2M3Ljk3Ni00Ljk1MiAxOC4yODYuODI2IDE4LjI4NiAxMC4yMTRWNDY0YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWMTEyYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMTMyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2NC40ODZjMCA0LjkxNy0yLjk4NyA5LjM2OS03LjU2OSAxMS4xNTItMTMuNzAyIDUuMzMxLTI2LjM5NiAxMS41MzctMzguMDUgMTguNTg1YTEyLjEzOCAxMi4xMzggMCAwIDEtNi4yOCAxLjc3N0g1NGE2IDYgMCAwIDAtNiA2djM0MGE2IDYgMCAwIDAgNiA2aDM0MGE2IDYgMCAwIDAgNi02di0yNS45NjZjMC01LjM3IDMuNTc5LTEwLjA1OSA4Ljc0LTExLjU0MXpcIl0sc21pbGU6WzQ5Niw1MTIsW10sXCJmMTE4XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMCA0NDhjLTExMC4zIDAtMjAwLTg5LjctMjAwLTIwMFMxMzcuNyA1NiAyNDggNTZzMjAwIDg5LjcgMjAwIDIwMC04OS43IDIwMC0yMDAgMjAwem0tODAtMjE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnptMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem00IDcyLjZjLTIwLjggMjUtNTEuNSAzOS40LTg0IDM5LjRzLTYzLjItMTQuMy04NC0zOS40Yy04LjUtMTAuMi0yMy43LTExLjUtMzMuOC0zLjEtMTAuMiA4LjUtMTEuNSAyMy42LTMuMSAzMy44IDMwIDM2IDc0LjEgNTYuNiAxMjAuOSA1Ni42czkwLjktMjAuNiAxMjAuOS01Ni42YzguNS0xMC4yIDcuMS0yNS4zLTMuMS0zMy44LTEwLjEtOC40LTI1LjMtNy4xLTMzLjggMy4xelwiXSxcInNtaWxlLWJlYW1cIjpbNDk2LDUxMixbXSxcImY1YjhcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTg0LTE0My40Yy0yMC44IDI1LTUxLjUgMzkuNC04NCAzOS40cy02My4yLTE0LjMtODQtMzkuNGMtOC41LTEwLjItMjMuNi0xMS41LTMzLjgtMy4xLTEwLjIgOC41LTExLjUgMjMuNi0zLjEgMzMuOCAzMCAzNiA3NC4xIDU2LjYgMTIwLjkgNTYuNnM5MC45LTIwLjYgMTIwLjktNTYuNmM4LjUtMTAuMiA3LjEtMjUuMy0zLjEtMzMuOC0xMC4yLTguNC0yNS4zLTcuMS0zMy44IDMuMXpNMTM2LjUgMjExYzcuNy0xMy43IDE5LjItMjEuNiAzMS41LTIxLjZzMjMuOCA3LjkgMzEuNSAyMS42bDkuNSAxN2MyLjEgMy43IDYuMiA0LjcgOS4zIDMuNyAzLjYtMS4xIDYtNC41IDUuNy04LjMtMy4zLTQyLjEtMzIuMi03MS40LTU2LTcxLjRzLTUyLjcgMjkuMy01NiA3MS40Yy0uMyAzLjcgMi4xIDcuMiA1LjcgOC4zIDMuNCAxLjEgNy40LS41IDkuMy0zLjdsOS41LTE3ek0zMjggMTUyYy0yMy44IDAtNTIuNyAyOS4zLTU2IDcxLjQtLjMgMy43IDIuMSA3LjIgNS43IDguMyAzLjUgMS4xIDcuNC0uNSA5LjMtMy43bDkuNS0xN2M3LjctMTMuNyAxOS4yLTIxLjYgMzEuNS0yMS42czIzLjggNy45IDMxLjUgMjEuNmw5LjUgMTdjMi4xIDMuNyA2LjIgNC43IDkuMyAzLjcgMy42LTEuMSA2LTQuNSA1LjctOC4zLTMuMy00Mi4xLTMyLjItNzEuNC01Ni03MS40elwiXSxcInNtaWxlLXdpbmtcIjpbNDk2LDUxMixbXSxcImY0ZGFcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTExNy44LTE0Ni40Yy0xMC4yLTguNS0yNS4zLTcuMS0zMy44IDMuMS0yMC44IDI1LTUxLjUgMzkuNC04NCAzOS40cy02My4yLTE0LjMtODQtMzkuNGMtOC41LTEwLjItMjMuNy0xMS41LTMzLjgtMy4xLTEwLjIgOC41LTExLjUgMjMuNi0zLjEgMzMuOCAzMCAzNiA3NC4xIDU2LjYgMTIwLjkgNTYuNnM5MC45LTIwLjYgMTIwLjktNTYuNmM4LjUtMTAuMiA3LjEtMjUuMy0zLjEtMzMuOHpNMTY4IDI0MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6bTE2MC02MGMtMjUuNyAwLTU1LjkgMTYuOS01OS45IDQyLjEtMS43IDExLjIgMTEuNSAxOC4yIDE5LjggMTAuOGw5LjUtOC41YzE0LjgtMTMuMiA0Ni4yLTEzLjIgNjEgMGw5LjUgOC41YzguNSA3LjQgMjEuNi4zIDE5LjgtMTAuOC0zLjgtMjUuMi0zNC00Mi4xLTU5LjctNDIuMXpcIl0sc25vd2ZsYWtlOls0NDgsNTEyLFtdLFwiZjJkY1wiLFwiTTQzOC4yMzcgMzU1LjkyN2wtNjYuNTc0LTM4LjU0IDU5LjQ0OC0xMC4zMjdjNS44NDYtMS4zNzUgMTAuNjA5LTUuMTgzIDEzLjQ1OC0xMC4xMyAyLjQ4LTQuMzA3IDMuNTA2LTkuNDc4IDIuNTI0LTE0LjY1MS0yLjExLTExLjExNS0xMi42ODYtMTguMDM5LTIzLjYyMS0xNS40NjdsLTg1LjQyMyAzMS4xMTVMMjU1LjkxNCAyNTZsODIuMTM2LTQxLjkyNiA4NS40MjMgMzEuMTE1YzEwLjkzNiAyLjU3MiAyMS41MTItNC4zNTIgMjMuNjIxLTE1LjQ2NyAyLjExMS0xMS4xMTUtNS4wNDYtMjIuMjA5LTE1Ljk4MS0yNC43ODFsLTU5LjQ0OC0xMC4zMjcgNjYuNTczLTM4LjU0YzkuNTQtNS41MjMgMTIuNjE1LTE4LjA5MiA2Ljg2Ny0yOC4wNzQtNS43NDgtOS45ODItMTguMTQtMTMuNTk2LTI3LjY4LTguMDc0bC02Ni41NzQgMzguNTQgMjAuODA1LTU2Ljc4N2MzLjI0Ni0xMC43ODItMi43NTgtMjIuNTQyLTEzLjQxMy0yNi4yNjgtMTAuNjU0LTMuNzI1LTIxLjkyMiAxLjk5Ny0yNS4xNjggMTIuNzc5bC0xNS44MzggODkuNzM1LTcyLjQyMyA0MS45MjZWMTM2bDY5LjU4NS01OC42MjFjNy42ODktOC4yMSA2Ljk5Ny0yMC44NTYtMS41NDgtMjguMjQ1LTguNTQ1LTcuMzkxLTIxLjcwNS02LjcyMy0yOS4zOTQgMS40ODZsLTM4LjY0NCA0Ni40NlYyMGMwLTExLjA0Ni05LjMxOC0yMC0yMC44MTMtMjBzLTIwLjgxMyA4Ljk1NC0yMC44MTMgMjB2NzcuMDhsLTM4LjY0NC00Ni40NmMtNy42ODktOC4yMS0yMC44NDktOC44NzYtMjkuMzk0LTEuNDg2LTguNTQ0IDcuMzg5LTkuMjM2IDIwLjAzNS0xLjU0NyAyOC4yNDVMMjAzLjE4NyAxMzZ2ODMuODUzbC03Mi40MjMtNDEuOTI2LTE1LjgzOC04OS43MzZjLTMuMjQ3LTEwLjc4Mi0xNC41MTUtMTYuNTA0LTI1LjE2OS0xMi43NzktMTAuNjU2IDMuNzI1LTE2LjY1OSAxNS40ODYtMTMuNDEzIDI2LjI2OGwyMC44MDUgNTYuNzg3LTY2LjU3My0zOC41NGMtOS41NC01LjUyMy0yMS45MzMtMS45MDgtMjcuNjggOC4wNzRzLTIuNjczIDIyLjU1MSA2Ljg2NyAyOC4wNzRsNjYuNTc0IDM4LjU0LTU5LjQ0OSAxMC4zMjhDNS45NTMgMjA3LjUxNS0xLjIwMiAyMTguNjA5LjkwNyAyMjkuNzI0YzIuMTEgMTEuMTE0IDEyLjY4NiAxOC4wMzggMjMuNjIyIDE1LjQ2Nmw4NS40MjItMzEuMTE1TDE5Mi4wODYgMjU2bC04Mi4xMzYgNDEuOTI2LTg1LjQyMy0zMS4xMTVjLTEwLjkzNi0yLjU3Mi0yMS41MTEgNC4zNTItMjMuNjIyIDE1LjQ2Ni0yLjEwOSAxMS4xMTMgNS4wNDYgMjIuMjA5IDE1Ljk4MSAyNC43ODFsNTkuNDQ5IDEwLjMyOC02Ni41NzQgMzguNTRDLjIyMyAzNjEuNDQ5LTIuODUyIDM3NC4wMTggMi44OTYgMzg0czE4LjE0IDEzLjU5NyAyNy42OCA4LjA3NGw2Ni41NzQtMzguNTQtMjAuODA1IDU2Ljc4NmMtMS43MzUgNS43NjQtLjgyOCAxMS44MDUgMi4wMiAxNi43NTEgMi40OCA0LjMwNyA2LjQzMyA3Ljc4NCAxMS4zOTIgOS41MTcgMTAuNjU1IDMuNzI1IDIxLjkyMy0xLjk5NyAyNS4xNjktMTIuNzc5bDE1LjgzOC04OS43MzYgNzIuNDIzLTQxLjkyNlYzNzZsLTY5LjU4NSA1OC42MjFjLTcuNjkgOC4yMS02Ljk5NyAyMC44NTUgMS41NDcgMjguMjQ1IDguNTQ0IDcuMzg4IDIxLjcwNSA2LjcyMyAyOS4zOTQtMS40ODdsMzguNjQ0LTQ2LjQ2VjQ5MmMwIDExLjA0NiA5LjMxOCAyMCAyMC44MTMgMjBzMjAuODEzLTguOTU0IDIwLjgxMy0yMHYtNzcuMDgxbDM4LjY0NCA0Ni40NmM0LjExMSA0LjM4OSA5Ljc4MiA2LjYyMSAxNS40NzggNi42MjEgNC45NiAwIDkuOTM5LTEuNjk0IDEzLjkxNi01LjEzNCA4LjU0NS03LjM5IDkuMjM3LTIwLjAzNSAxLjU0OC0yOC4yNDVMMjQ0LjgxMyAzNzZ2LTgzLjg1M2w3Mi40MjMgNDEuOTI2IDE1LjgzOCA4OS43MzZjMy4yNDYgMTAuNzgyIDE0LjUxNCAxNi41MDQgMjUuMTY4IDEyLjc3OSAxMC42NTMtMy43MjYgMTYuNjU5LTE1LjQ4NyAxMy40MTItMjYuMjY4bC0yMC44MDUtNTYuNzg3IDY2LjU3NCAzOC41NGM5LjU0IDUuNTIzIDIxLjkzMyAxLjkwOCAyNy42OC04LjA3NCA1Ljc0OS05Ljk4MSAyLjY3NS0yMi41NS02Ljg2Ni0yOC4wNzJ6XCJdLHNxdWFyZTpbNDQ4LDUxMixbXSxcImYwYzhcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tNiA0MDBINTRjLTMuMyAwLTYtMi43LTYtNlY4NmMwLTMuMyAyLjctNiA2LTZoMzQwYzMuMyAwIDYgMi43IDYgNnYzNDBjMCAzLjMtMi43IDYtNiA2elwiXSxzdGFyOls1NzYsNTEyLFtdLFwiZjAwNVwiLFwiTTUyOC4xIDE3MS41TDM4MiAxNTAuMiAzMTYuNyAxNy44Yy0xMS43LTIzLjYtNDUuNi0yMy45LTU3LjQgMEwxOTQgMTUwLjIgNDcuOSAxNzEuNWMtMjYuMiAzLjgtMzYuNyAzNi4xLTE3LjcgNTQuNmwxMDUuNyAxMDMtMjUgMTQ1LjVjLTQuNSAyNi4zIDIzLjIgNDYgNDYuNCAzMy43TDI4OCA0MzkuNmwxMzAuNyA2OC43YzIzLjIgMTIuMiA1MC45LTcuNCA0Ni40LTMzLjdsLTI1LTE0NS41IDEwNS43LTEwM2MxOS0xOC41IDguNS01MC44LTE3LjctNTQuNnpNMzg4LjYgMzEyLjNsMjMuNyAxMzguNEwyODggMzg1LjRsLTEyNC4zIDY1LjMgMjMuNy0xMzguNC0xMDAuNi05OCAxMzktMjAuMiA2Mi4yLTEyNiA2Mi4yIDEyNiAxMzkgMjAuMi0xMDAuNiA5OHpcIl0sXCJzdGFyLWhhbGZcIjpbNTc2LDUxMixbXSxcImYwODlcIixcIk0yODggMzg1LjNsLTEyNC4zIDY1LjQgMjMuNy0xMzguNC0xMDAuNi05OCAxMzktMjAuMiA2Mi4yLTEyNlYwYy0xMS40IDAtMjIuOCA1LjktMjguNyAxNy44TDE5NCAxNTAuMiA0Ny45IDE3MS40Yy0yNi4yIDMuOC0zNi43IDM2LjEtMTcuNyA1NC42bDEwNS43IDEwMy0yNSAxNDUuNWMtNC41IDI2LjEgMjMgNDYgNDYuNCAzMy43TDI4OCA0MzkuNnYtNTQuM3pcIl0sXCJzdGlja3ktbm90ZVwiOls0NDgsNTEyLFtdLFwiZjI0OVwiLFwiTTQ0OCAzNDguMTA2VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDhINDhDMjEuNDkgMzIgMCA1My40OSAwIDgwdjM1MS45ODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGgyNjguMTE4YTQ4IDQ4IDAgMCAwIDMzLjk0MS0xNC4wNTlsODMuODgyLTgzLjg4MkE0OCA0OCAwIDAgMCA0NDggMzQ4LjEwNnptLTEyOCA4MHYtNzYuMTE4aDc2LjExOEwzMjAgNDI4LjEwNnpNNDAwIDgwdjIyMy45ODhIMjk2Yy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2MTA0SDQ4VjgwaDM1MnpcIl0sXCJzdG9wLWNpcmNsZVwiOls1MTIsNTEyLFtdLFwiZjI4ZFwiLFwiTTUwNCAyNTZDNTA0IDExOSAzOTMgOCAyNTYgOFM4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4em0tNDQ4IDBjMC0xMTAuNSA4OS41LTIwMCAyMDAtMjAwczIwMCA4OS41IDIwMCAyMDAtODkuNSAyMDAtMjAwIDIwMFM1NiAzNjYuNSA1NiAyNTZ6bTI5Ni04MHYxNjBjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoMTYwYzguOCAwIDE2IDcuMiAxNiAxNnpcIl0sc3VuOls1MTIsNTEyLFtdLFwiZjE4NVwiLFwiTTIyMC4xMTYgNDg3LjkzNmwtMjAuMjEzLTQ5LjQyNWEzLjk5MiAzLjk5MiAwIDAgMC01LjgwOC0xLjg4NmwtNDUuNDA0IDI4LjEwNGMtMjkuNDY2IDE4LjI0LTY2LjI5NS04LjUxOS01OC4wNTQtNDIuMTc5bDEyLjY5OS01MS44NjVhMy45OTMgMy45OTMgMCAwIDAtMy41OS00Ljk0MWwtNTMuMjUxLTMuOTUxYy0zNC41NTQtMi41NjItNDguNjMyLTQ1Ljg1NS0yMi4xNzQtNjguMjQ3TDY1LjA4IDI1OS4wNWEzLjk5MiAzLjk5MiAwIDAgMCAwLTYuMTA2bC00MC43Ni0zNC40OTdjLTI2LjQ1LTIyLjM4NC0xMi4zOS02NS42ODIgMjIuMTc0LTY4LjI0Nmw1My4yNTEtMy45NTFhMy45OTMgMy45OTMgMCAwIDAgMy41OS00Ljk0MUw5MC42MzcgODkuNDQzYy04LjIzOS0zMy42NTYgMjguNTgxLTYwLjQyIDU4LjA1NC00Mi4xNzlsNDUuNDAzIDI4LjEwNGEzLjk5MyAzLjk5MyAwIDAgMCA1LjgwOC0xLjg4N2wyMC4yMTMtNDkuNDI1YzEzLjExNi0zMi4wNzEgNTguNjM4LTMyLjA4MSA3MS43NTggMGwyMC4yMTIgNDkuNDI0YTMuOTk0IDMuOTk0IDAgMCAwIDUuODA5IDEuODg3bDQ1LjQwMy0yOC4xMDRjMjkuNDY0LTE4LjIzNiA2Ni4yOTcgOC41MTMgNTguMDU0IDQyLjE3OWwtMTIuNjk5IDUxLjg2NWEzLjk5NSAzLjk5NSAwIDAgMCAzLjU5IDQuOTQxbDUzLjI1MSAzLjk1MWMzNC41NTMgMi41NjMgNDguNjMzIDQ1Ljg1NCAyMi4xNzUgNjguMjQ2bC00MC43NiAzNC40OTdhMy45OTMgMy45OTMgMCAwIDAgMCA2LjEwN2w0MC43NiAzNC40OTZjMjYuNTExIDIyLjQ0MSAxMi4zMjIgNjUuNjg5LTIyLjE3NSA2OC4yNDdsLTUzLjI1MSAzLjk1MWEzLjk5MyAzLjk5MyAwIDAgMC0zLjU4OSA0Ljk0MmwxMi42OTggNTEuODY0YzguMjQxIDMzLjY1OC0yOC41ODMgNjAuNDIxLTU4LjA1NCA0Mi4xOGwtNDUuNDAzLTI4LjEwNGEzLjk5NCAzLjk5NCAwIDAgMC01LjgwOSAxLjg4N2wtMjAuMjEyIDQ5LjQyNGMtMTMuMTU5IDMyLjE3OC01OC42NzUgMzEuOTkzLTcxLjc1NyAwem0xNi44MTQtNjQuNTY4bDE5LjA2NCA0Ni42MTYgMTkuMDY0LTQ2LjYxNWMxMC4zMDgtMjUuMiA0MC43NzgtMzUuMDY2IDYzLjg5Mi0yMC43NTlsNDIuODIyIDI2LjUwNy0xMS45NzYtNDguOTE5Yy02LjQ3NS0yNi40NDQgMTIuMzgtNTIuMzM5IDM5LjQ4Ny01NC4zNDlsNTAuMjI2LTMuNzI2LTM4LjQ0NC0zMi41MzZjLTIwLjc4Mi0xNy41OTEtMjAuNzQ3LTQ5LjYyMS4wMDEtNjcuMThsMzguNDQyLTMyLjUzNi01MC4yMjUtMy43MjdjLTI3LjE1MS0yLjAxNS00NS45NS0yNy45NDgtMzkuNDg4LTU0LjM0OWwxMS45NzgtNDguOTE5LTQyLjgyMyAyNi41MDdjLTIzLjE1MSAxNC4zMjctNTMuNjAzIDQuNC02My44OTItMjAuNzZsLTE5LjA2NC00Ni42MTUtMTkuMDY0IDQ2LjYxN2MtMTAuMzA1IDI1LjE5OC00MC43NzggMzUuMDY2LTYzLjg5MSAyMC43NmwtNDIuODIzLTI2LjUwOCAxMS45NzcgNDguOTE4YzYuNDc0IDI2LjQ0Ni0xMi4zODEgNTIuMzM4LTM5LjQ4OCA1NC4zNWwtNTAuMjI0IDMuNzI2IDM4LjQ0MyAzMi41MzdjMjAuNzgyIDE3LjU4OCAyMC43NDcgNDkuNjE5IDAgNjcuMTc4TDUyLjQ4IDMyMi4xMjNsNTAuMjI2IDMuNzI2YzI3LjE1MSAyLjAxNCA0NS45NSAyNy45NDcgMzkuNDg3IDU0LjM0OWwtMTEuOTc3IDQ4LjkxOSA0Mi44MjMtMjYuNTA3YzIzLjE4OC0xNC4zNTUgNTMuNjIyLTQuMzUyIDYzLjg5MSAyMC43NTh6TTI1NiAzODRjLTcwLjU4IDAtMTI4LTU3LjQyMS0xMjgtMTI4IDAtNzAuNTggNTcuNDItMTI4IDEyOC0xMjggNzAuNTc5IDAgMTI4IDU3LjQyIDEyOCAxMjggMCA3MC41NzktNTcuNDIxIDEyOC0xMjggMTI4em0wLTIwOGMtNDQuMTEyIDAtODAgMzUuODg4LTgwIDgwczM1Ljg4OCA4MCA4MCA4MCA4MC0zNS44ODggODAtODAtMzUuODg4LTgwLTgwLTgwelwiXSxzdXJwcmlzZTpbNDk2LDUxMixbXSxcImY1YzJcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTAtMTc2Yy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0IDY0LTI4LjcgNjQtNjQtMjguNy02NC02NC02NHptLTQ4LTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMnptMTI4LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpcIl0sXCJ0aHVtYnMtZG93blwiOls1MTIsNTEyLFtdLFwiZjE2NVwiLFwiTTQ2Ni4yNyAyMjUuMzFjNC42NzQtMjIuNjQ3Ljg2NC00NC41MzgtOC45OS02Mi45OSAyLjk1OC0yMy44NjgtNC4wMjEtNDguNTY1LTE3LjM0LTY2Ljk5QzQzOC45ODYgMzkuNDIzIDQwNC4xMTcgMCAzMjcgMGMtNyAwLTE1IC4wMS0yMi4yMi4wMUMyMDEuMTk1LjAxIDE2OC45OTcgNDAgMTI4IDQwaC0xMC44NDVjLTUuNjQtNC45NzUtMTMuMDQyLTgtMjEuMTU1LThIMzJDMTQuMzI3IDMyIDAgNDYuMzI3IDAgNjR2MjQwYzAgMTcuNjczIDE0LjMyNyAzMiAzMiAzMmg2NGMxMS44NDIgMCAyMi4xNzUtNi40MzggMjcuNzA4LTE2aDcuMDUyYzE5LjE0NiAxNi45NTMgNDYuMDEzIDYwLjY1MyA2OC43NiA4My40IDEzLjY2NyAxMy42NjcgMTAuMTUzIDEwOC42IDcxLjc2IDEwOC42IDU3LjU4IDAgOTUuMjctMzEuOTM2IDk1LjI3LTEwNC43MyAwLTE4LjQxLTMuOTMtMzMuNzMtOC44NS00Ni41NGgzNi40OGM0OC42MDIgMCA4NS44Mi00MS41NjUgODUuODItODUuNTggMC0xOS4xNS00Ljk2LTM0Ljk5LTEzLjczLTQ5Ljg0ek02NCAyOTZjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNHMxMC43NDUtMjQgMjQtMjQgMjQgMTAuNzQ1IDI0IDI0LTEwLjc0NSAyNC0yNCAyNHptMzMwLjE4IDE2LjczSDI5MC4xOWMwIDM3LjgyIDI4LjM2IDU1LjM3IDI4LjM2IDk0LjU0IDAgMjMuNzUgMCA1Ni43My00Ny4yNyA1Ni43My0xOC45MS0xOC45MS05LjQ2LTY2LjE4LTM3LjgyLTk0LjU0QzIwNi45IDM0Mi44OSAxNjcuMjggMjcyIDEzOC45MiAyNzJIMTI4Vjg1LjgzYzUzLjYxMSAwIDEwMC4wMDEtMzcuODIgMTcxLjY0LTM3LjgyaDM3LjgyYzM1LjUxMiAwIDYwLjgyIDE3LjEyIDUzLjEyIDY1LjkgMTUuMiA4LjE2IDI2LjUgMzYuNDQgMTMuOTQgNTcuNTcgMjEuNTgxIDIwLjM4NCAxOC42OTkgNTEuMDY1IDUuMjEgNjUuNjIgOS40NSAwIDIyLjM2IDE4LjkxIDIyLjI3IDM3LjgxLS4wOSAxOC45MS0xNi43MSAzNy44Mi0zNy44MiAzNy44MnpcIl0sXCJ0aHVtYnMtdXBcIjpbNTEyLDUxMixbXSxcImYxNjRcIixcIk00NjYuMjcgMjg2LjY5QzQ3NS4wNCAyNzEuODQgNDgwIDI1NiA0ODAgMjM2Ljg1YzAtNDQuMDE1LTM3LjIxOC04NS41OC04NS44Mi04NS41OEgzNTcuN2M0LjkyLTEyLjgxIDguODUtMjguMTMgOC44NS00Ni41NEMzNjYuNTUgMzEuOTM2IDMyOC44NiAwIDI3MS4yOCAwYy02MS42MDcgMC01OC4wOTMgOTQuOTMzLTcxLjc2IDEwOC42LTIyLjc0NyAyMi43NDctNDkuNjE1IDY2LjQ0Ny02OC43NiA4My40SDMyYy0xNy42NzMgMC0zMiAxNC4zMjctMzIgMzJ2MjQwYzAgMTcuNjczIDE0LjMyNyAzMiAzMiAzMmg2NGMxNC44OTMgMCAyNy40MDgtMTAuMTc0IDMwLjk3OC0yMy45NSA0NC41MDkgMS4wMDEgNzUuMDYgMzkuOTQgMTc3LjgwMiAzOS45NCA3LjIyIDAgMTUuMjIuMDEgMjIuMjIuMDEgNzcuMTE3IDAgMTExLjk4Ni0zOS40MjMgMTEyLjk0LTk1LjMzIDEzLjMxOS0xOC40MjUgMjAuMjk5LTQzLjEyMiAxNy4zNC02Ni45OSA5Ljg1NC0xOC40NTIgMTMuNjY0LTQwLjM0MyA4Ljk5LTYyLjk5em0tNjEuNzUgNTMuODNjMTIuNTYgMjEuMTMgMS4yNiA0OS40MS0xMy45NCA1Ny41NyA3LjcgNDguNzgtMTcuNjA4IDY1LjktNTMuMTIgNjUuOWgtMzcuODJjLTcxLjYzOSAwLTExOC4wMjktMzcuODItMTcxLjY0LTM3LjgyVjI0MGgxMC45MmMyOC4zNiAwIDY3Ljk4LTcwLjg5IDk0LjU0LTk3LjQ2IDI4LjM2LTI4LjM2IDE4LjkxLTc1LjYzIDM3LjgyLTk0LjU0IDQ3LjI3IDAgNDcuMjcgMzIuOTggNDcuMjcgNTYuNzMgMCAzOS4xNy0yOC4zNiA1Ni43Mi0yOC4zNiA5NC41NGgxMDMuOTljMjEuMTEgMCAzNy43MyAxOC45MSAzNy44MiAzNy44Mi4wOSAxOC45LTEyLjgyIDM3LjgxLTIyLjI3IDM3LjgxIDEzLjQ4OSAxNC41NTUgMTYuMzcxIDQ1LjIzNi01LjIxIDY1LjYyek04OCA0MzJjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0cy0yNC0xMC43NDUtMjQtMjQgMTAuNzQ1LTI0IDI0LTI0IDI0IDEwLjc0NSAyNCAyNHpcIl0sXCJ0aW1lcy1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYwNTdcIixcIk0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTEwMS44LTI2Mi4yTDI5NS42IDI1Nmw2Mi4yIDYyLjJjNC43IDQuNyA0LjcgMTIuMyAwIDE3bC0yMi42IDIyLjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwyNTYgMjk1LjZsLTYyLjIgNjIuMmMtNC43IDQuNy0xMi4zIDQuNy0xNyAwbC0yMi42LTIyLjZjLTQuNy00LjctNC43LTEyLjMgMC0xN2w2Mi4yLTYyLjItNjIuMi02Mi4yYy00LjctNC43LTQuNy0xMi4zIDAtMTdsMjIuNi0yMi42YzQuNy00LjcgMTIuMy00LjcgMTcgMGw2Mi4yIDYyLjIgNjIuMi02Mi4yYzQuNy00LjcgMTIuMy00LjcgMTcgMGwyMi42IDIyLjZjNC43IDQuNyA0LjcgMTIuMyAwIDE3elwiXSx0aXJlZDpbNDk2LDUxMixbXSxcImY1YzhcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0wIDQ0OGMtMTEwLjMgMC0yMDAtODkuNy0yMDAtMjAwUzEzNy43IDU2IDI0OCA1NnMyMDAgODkuNyAyMDAgMjAwLTg5LjcgMjAwLTIwMCAyMDB6bTEyOS4xLTMwMy44Yy0zLjgtNC40LTEwLjMtNS40LTE1LjMtMi41bC04MCA0OGMtMy42IDIuMi01LjggNi4xLTUuOCAxMC4zczIuMiA4LjEgNS44IDEwLjNsODAgNDhjNS40IDMuMiAxMS44IDEuNiAxNS4zLTIuNSAzLjgtNC41IDMuOS0xMSAuMS0xNS41TDM0My42IDIwOGwzMy42LTQwLjNjMy44LTQuNSAzLjctMTEuMS0uMS0xNS41ek0yMjAgMjA4YzAtNC4yLTIuMi04LjEtNS44LTEwLjNsLTgwLTQ4Yy01LTMtMTEuNS0xLjktMTUuMyAyLjUtMy44IDQuNS0zLjkgMTEtLjEgMTUuNWwzMy42IDQwLjMtMzMuNiA0MC4zYy0zLjggNC41LTMuNyAxMSAuMSAxNS41IDMuNSA0LjEgOS45IDUuNyAxNS4zIDIuNWw4MC00OGMzLjYtMi4yIDUuOC02LjEgNS44LTEwLjN6bTI4IDY0Yy00NS40IDAtMTAwLjkgMzguMy0xMDcuOCA5My4zLTEuNSAxMS44IDYuOSAyMS42IDE1LjUgMTcuOUMxNzguNCAzNzMuNSAyMTIgMzY4IDI0OCAzNjhzNjkuNiA1LjUgOTIuMyAxNS4yYzguNSAzLjcgMTctNiAxNS41LTE3LjktNi45LTU1LTYyLjQtOTMuMy0xMDcuOC05My4zelwiXSxcInRyYXNoLWFsdFwiOls0NDgsNTEyLFtdLFwiZjJlZFwiLFwiTTE5MiAxODh2MjE2YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTI0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyVjE4OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDI0YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ6bTEwMC0xMmgtMjRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjE2YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjRjNi42MjcgMCAxMi01LjM3MyAxMi0xMlYxODhjMC02LjYyNy01LjM3My0xMi0xMi0xMnptMTMyLTk2YzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHYxMmMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC0yMHYzMzZjMCAyNi41MS0yMS40OSA0OC00OCA0OEg4MGMtMjYuNTEgMC00OC0yMS40OS00OC00OFYxMjhIMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTEyYzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGg3NC40MTFsMzQuMDE4LTU2LjY5NkE0OCA0OCAwIDAgMSAxNzMuNTg5IDBoMTAwLjgyM2E0OCA0OCAwIDAgMSA0MS4xNiAyMy4zMDRMMzQ5LjU4OSA4MEg0MjR6bS0yNjkuNjExIDBoMTM5LjIyM0wyNzYuMTYgNTAuOTEzQTYgNiAwIDAgMCAyNzEuMDE1IDQ4aC05NC4wMjhhNiA2IDAgMCAwLTUuMTQ1IDIuOTEzTDE1NC4zODkgODB6TTM2OCAxMjhIODB2MzMwYTYgNiAwIDAgMCA2IDZoMjc2YTYgNiAwIDAgMCA2LTZWMTI4elwiXSx1c2VyOls0NDgsNTEyLFtdLFwiZjAwN1wiLFwiTTMxMy42IDMwNGMtMjguNyAwLTQyLjUgMTYtODkuNiAxNi00Ny4xIDAtNjAuOC0xNi04OS42LTE2QzYwLjIgMzA0IDAgMzY0LjIgMCA0MzguNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di0yNS42YzAtNzQuMi02MC4yLTEzNC40LTEzNC40LTEzNC40ek00MDAgNDY0SDQ4di0yNS42YzAtNDcuNiAzOC44LTg2LjQgODYuNC04Ni40IDE0LjYgMCAzOC4zIDE2IDg5LjYgMTYgNTEuNyAwIDc0LjktMTYgODkuNi0xNiA0Ny42IDAgODYuNCAzOC44IDg2LjQgODYuNFY0NjR6TTIyNCAyODhjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTMzAzLjUgMCAyMjQgMCA4MCA2NC41IDgwIDE0NHM2NC41IDE0NCAxNDQgMTQ0em0wLTI0MGM1Mi45IDAgOTYgNDMuMSA5NiA5NnMtNDMuMSA5Ni05NiA5Ni05Ni00My4xLTk2LTk2IDQzLjEtOTYgOTYtOTZ6XCJdLFwidXNlci1jaXJjbGVcIjpbNDk2LDUxMixbXSxcImYyYmRcIixcIk0yNDggMTA0Yy01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2IDk2LTQzIDk2LTk2LTQzLTk2LTk2LTk2em0wIDE0NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OCA0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDh6bTAtMjQwQzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgNDQ4Yy00OS43IDAtOTUuMS0xOC4zLTEzMC4xLTQ4LjQgMTQuOS0yMyA0MC40LTM4LjYgNjkuNi0zOS41IDIwLjggNi40IDQwLjYgOS42IDYwLjUgOS42czM5LjctMy4xIDYwLjUtOS42YzI5LjIgMSA1NC43IDE2LjUgNjkuNiAzOS41LTM1IDMwLjEtODAuNCA0OC40LTEzMC4xIDQ4LjR6bTE2Mi43LTg0LjFjLTI0LjQtMzEuNC02Mi4xLTUxLjktMTA1LjEtNTEuOS0xMC4yIDAtMjYgOS42LTU3LjYgOS42LTMxLjUgMC00Ny40LTkuNi01Ny42LTkuNi00Mi45IDAtODAuNiAyMC41LTEwNS4xIDUxLjlDNjEuOSAzMzkuMiA0OCAyOTkuMiA0OCAyNTZjMC0xMTAuMyA4OS43LTIwMCAyMDAtMjAwczIwMCA4OS43IDIwMCAyMDBjMCA0My4yLTEzLjkgODMuMi0zNy4zIDExNS45elwiXSxcIndpbmRvdy1jbG9zZVwiOls1MTIsNTEyLFtdLFwiZjQxMFwiLFwiTTQ2NCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bTAgMzk0YzAgMy4zLTIuNyA2LTYgNkg1NGMtMy4zIDAtNi0yLjctNi02Vjg2YzAtMy4zIDIuNy02IDYtNmg0MDRjMy4zIDAgNiAyLjcgNiA2djM0MHpNMzU2LjUgMTk0LjZMMjk1LjEgMjU2bDYxLjQgNjEuNGM0LjYgNC42IDQuNiAxMi4xIDAgMTYuOGwtMjIuMyAyMi4zYy00LjYgNC42LTEyLjEgNC42LTE2LjggMEwyNTYgMjk1LjFsLTYxLjQgNjEuNGMtNC42IDQuNi0xMi4xIDQuNi0xNi44IDBsLTIyLjMtMjIuM2MtNC42LTQuNi00LjYtMTIuMSAwLTE2LjhsNjEuNC02MS40LTYxLjQtNjEuNGMtNC42LTQuNi00LjYtMTIuMSAwLTE2LjhsMjIuMy0yMi4zYzQuNi00LjYgMTIuMS00LjYgMTYuOCAwbDYxLjQgNjEuNCA2MS40LTYxLjRjNC42LTQuNiAxMi4xLTQuNiAxNi44IDBsMjIuMyAyMi4zYzQuNyA0LjYgNC43IDEyLjEgMCAxNi44elwiXSxcIndpbmRvdy1tYXhpbWl6ZVwiOls1MTIsNTEyLFtdLFwiZjJkMFwiLFwiTTQ2NCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bTAgMzk0YzAgMy4zLTIuNyA2LTYgNkg1NGMtMy4zIDAtNi0yLjctNi02VjE5Mmg0MTZ2MjM0elwiXSxcIndpbmRvdy1taW5pbWl6ZVwiOls1MTIsNTEyLFtdLFwiZjJkMVwiLFwiTTQ4MCA0ODBIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXSxcIndpbmRvdy1yZXN0b3JlXCI6WzUxMiw1MTIsW10sXCJmMmQyXCIsXCJNNDY0IDBIMTQ0Yy0yNi41IDAtNDggMjEuNS00OCA0OHY0OEg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MzIwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDMyMGMyNi41IDAgNDgtMjEuNSA0OC00OHYtNDhoNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDh6bS05NiA0NjRINDhWMjU2aDMyMHYyMDh6bTk2LTk2aC00OFYxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTQ0VjQ4aDMyMHYzMjB6XCJdfTshZnVuY3Rpb24oYyl7dHJ5e2MoKX1jYXRjaChjKXtpZighbSl0aHJvdyBjfX0oZnVuY3Rpb24oKXshZnVuY3Rpb24gYyhsLHope3ZhciBoPU9iamVjdC5rZXlzKHopLnJlZHVjZShmdW5jdGlvbihjLGwpe3ZhciBoPXpbbF07cmV0dXJuIGguaWNvbj9jW2guaWNvbk5hbWVdPWguaWNvbjpjW2xdPWgsY30se30pO1wiZnVuY3Rpb25cIj09dHlwZW9mIHQuaG9va3MuYWRkUGFjaz90Lmhvb2tzLmFkZFBhY2sobCxoKTp0LnN0eWxlc1tsXT1NKHt9LHQuc3R5bGVzW2xdfHx7fSxoKSxcImZhc1wiPT09bCYmYyhcImZhXCIseil9KFwiZmFyXCIsZil9KX0oKSxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBjPXt9O3RyeXtcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYoYz13aW5kb3cpfWNhdGNoKGMpe312YXIgbD0oYy5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQsaD12b2lkIDA9PT1sP1wiXCI6bCx6PWMsdj0ofmguaW5kZXhPZihcIk1TSUVcIil8fGguaW5kZXhPZihcIlRyaWRlbnQvXCIpLFwiX19fRk9OVF9BV0VTT01FX19fXCIpLG09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2goYyl7cmV0dXJuITF9fSgpLHM9WzEsMiwzLDQsNSw2LDcsOCw5LDEwXSxlPXMuY29uY2F0KFsxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMF0pO1tcInhzXCIsXCJzbVwiLFwibGdcIixcImZ3XCIsXCJ1bFwiLFwibGlcIixcImJvcmRlclwiLFwicHVsbC1sZWZ0XCIsXCJwdWxsLXJpZ2h0XCIsXCJzcGluXCIsXCJwdWxzZVwiLFwicm90YXRlLTkwXCIsXCJyb3RhdGUtMTgwXCIsXCJyb3RhdGUtMjcwXCIsXCJmbGlwLWhvcml6b250YWxcIixcImZsaXAtdmVydGljYWxcIixcInN0YWNrXCIsXCJzdGFjay0xeFwiLFwic3RhY2stMnhcIixcImludmVyc2VcIixcImxheWVyc1wiLFwibGF5ZXJzLXRleHRcIixcImxheWVycy1jb3VudGVyXCJdLmNvbmNhdChzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYytcInhcIn0pKS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuXCJ3LVwiK2N9KSk7dmFyIGE9enx8e307YVt2XXx8KGFbdl09e30pLGFbdl0uc3R5bGVzfHwoYVt2XS5zdHlsZXM9e30pLGFbdl0uaG9va3N8fChhW3ZdLmhvb2tzPXt9KSxhW3ZdLnNoaW1zfHwoYVt2XS5zaGltcz1bXSk7dmFyIHQ9YVt2XSxNPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe3ZhciBoPWFyZ3VtZW50c1tsXTtmb3IodmFyIHogaW4gaClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCx6KSYmKGNbel09aFt6XSl9cmV0dXJuIGN9O3ZhciBmPXtcImFkZHJlc3MtYm9va1wiOls0NDgsNTEyLFtdLFwiZjJiOVwiLFwiTTQzNiAxNjBjNi42IDAgMTItNS40IDEyLTEydi00MGMwLTYuNi01LjQtMTItMTItMTJoLTIwVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMzIwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di00OGgyMGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtMjB2LTY0aDIwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC0yMHYtNjRoMjB6bS0yMjgtMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjQtNjQtMjguNy02NC02NCAyOC43LTY0IDY0LTY0em0xMTIgMjM2LjhjMCAxMC42LTEwIDE5LjItMjIuNCAxOS4ySDExOC40QzEwNiAzODQgOTYgMzc1LjQgOTYgMzY0Ljh2LTE5LjJjMC0zMS44IDMwLjEtNTcuNiA2Ny4yLTU3LjZoNWMxMi4zIDUuMSAyNS43IDggMzkuOCA4czI3LjYtMi45IDM5LjgtOGg1YzM3LjEgMCA2Ny4yIDI1LjggNjcuMiA1Ny42djE5LjJ6XCJdLFwiYWRkcmVzcy1jYXJkXCI6WzU3Niw1MTIsW10sXCJmMmJiXCIsXCJNNTI4IDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQ4MGMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OHptLTM1MiA5NmMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NC02NC0yOC43LTY0LTY0IDI4LjctNjQgNjQtNjR6bTExMiAyMzYuOGMwIDEwLjYtMTAgMTkuMi0yMi40IDE5LjJIODYuNEM3NCAzODQgNjQgMzc1LjQgNjQgMzY0Ljh2LTE5LjJjMC0zMS44IDMwLjEtNTcuNiA2Ny4yLTU3LjZoNWMxMi4zIDUuMSAyNS43IDggMzkuOCA4czI3LjYtMi45IDM5LjgtOGg1YzM3LjEgMCA2Ny4yIDI1LjggNjcuMiA1Ny42djE5LjJ6TTUxMiAzMTJjMCA0LjQtMy42IDgtOCA4SDM2MGMtNC40IDAtOC0zLjYtOC04di0xNmMwLTQuNCAzLjYtOCA4LThoMTQ0YzQuNCAwIDggMy42IDggOHYxNnptMC02NGMwIDQuNC0zLjYgOC04IDhIMzYwYy00LjQgMC04LTMuNi04LTh2LTE2YzAtNC40IDMuNi04IDgtOGgxNDRjNC40IDAgOCAzLjYgOCA4djE2em0wLTY0YzAgNC40LTMuNiA4LTggOEgzNjBjLTQuNCAwLTgtMy42LTgtOHYtMTZjMC00LjQgMy42LTggOC04aDE0NGM0LjQgMCA4IDMuNiA4IDh2MTZ6XCJdLGFkanVzdDpbNTEyLDUxMixbXSxcImYwNDJcIixcIk04IDI1NmMwIDEzNi45NjYgMTExLjAzMyAyNDggMjQ4IDI0OHMyNDgtMTExLjAzNCAyNDgtMjQ4UzM5Mi45NjYgOCAyNTYgOCA4IDExOS4wMzMgOCAyNTZ6bTI0OCAxODRWNzJjMTAxLjcwNSAwIDE4NCA4Mi4zMTEgMTg0IDE4NCAwIDEwMS43MDUtODIuMzExIDE4NC0xODQgMTg0elwiXSxcImFsaWduLWNlbnRlclwiOls0NDgsNTEyLFtdLFwiZjAzN1wiLFwiTTM1MiA0NHY0MGMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDExMmMtOC44MzcgMC0xNi03LjE2My0xNi0xNlY0NGMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDIyNGM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2ek0xNiAyMjhoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMCAyNTZoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMzIwLTIwMEgxMTJjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgyMjRjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNnpcIl0sXCJhbGlnbi1qdXN0aWZ5XCI6WzQ0OCw1MTIsW10sXCJmMDM5XCIsXCJNMCA4NFY0NGMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDQxNmM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djQwYzAgOC44MzctNy4xNjMgMTYtMTYgMTZIMTZjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ6bTE2IDE0NGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDI1Nmg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wLTEyOGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2elwiXSxcImFsaWduLWxlZnRcIjpbNDQ4LDUxMixbXSxcImYwMzZcIixcIk0yODggNDR2NDBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNmMtOC44MzcgMC0xNi03LjE2My0xNi0xNlY0NGMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDI1NmM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2ek0wIDE3MnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2em0xNiAzMTJoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMjU2LTIwMEgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDI1NmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2elwiXSxcImFsaWduLXJpZ2h0XCI6WzQ0OCw1MTIsW10sXCJmMDM4XCIsXCJNMTYwIDg0VjQ0YzAtOC44MzcgNy4xNjMtMTYgMTYtMTZoMjU2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2NDBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNzZjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ6TTE2IDIyOGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDI1Nmg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0xNjAtMTI4aDI1NmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE3NmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2elwiXSxhbGxlcmdpZXM6WzQ0OCw1MTIsW10sXCJmNDYxXCIsXCJNNDE2IDExMmMtMTcuNiAwLTMyIDE0LjQtMzIgMzJ2NzJjMCA0LjQtMy42IDgtOCA4aC0xNmMtNC40IDAtOC0zLjYtOC04VjY0YzAtMTcuNi0xNC40LTMyLTMyLTMycy0zMiAxNC40LTMyIDMydjE1MmMwIDQuNC0zLjYgOC04IDhoLTE2Yy00LjQgMC04LTMuNi04LThWMzJjMC0xNy42LTE0LjQtMzItMzItMzJzLTMyIDE0LjQtMzIgMzJ2MTg0YzAgNC40LTMuNiA4LTggOGgtMTZjLTQuNCAwLTgtMy42LTgtOFY2NGMwLTE3LjYtMTQuNC0zMi0zMi0zMlM5NiA0Ni40IDk2IDY0djI0MWwtMjMuNi0zMi41Yy0xMy0xNy45LTM4LTIxLjgtNTUuOS04LjhzLTIxLjggMzgtOC44IDU1LjlsMTI1LjYgMTcyLjdjOSAxMi40IDIzLjUgMTkuOCAzOC44IDE5LjhoMTk3LjZjMjIuMyAwIDQxLjYtMTUuMyA0Ni43LTM3bDI2LjUtMTEyLjdjMy4yLTEzLjcgNC45LTI4LjMgNS4xLTQyLjNWMTQ0YzAtMTcuNi0xNC40LTMyLTMyLTMyek0xNzYgNDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6bTAtOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnptNjQgMTI4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6bTAtOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnptNjQgMzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnptMzIgNjRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnptMzItMTI4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6XCJdLGFtYnVsYW5jZTpbNjQwLDUxMixbXSxcImYwZjlcIixcIk02MjQgMzUyaC0xNlYyNDMuOWMwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45TDQ5NCAxMTAuMWMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFINDE2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHYzMjBjMCAyNi41IDIxLjUgNDggNDggNDhoMTZjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05Nmg0OGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNnpNMTYwIDQ2NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OCA0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDh6bTE0NC0yNDhjMCA0LjQtMy42IDgtOCA4aC01NnY1NmMwIDQuNC0zLjYgOC04IDhoLTQ4Yy00LjQgMC04LTMuNi04LTh2LTU2aC01NmMtNC40IDAtOC0zLjYtOC04di00OGMwLTQuNCAzLjYtOCA4LThoNTZ2LTU2YzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2NTZoNTZjNC40IDAgOCAzLjYgOCA4djQ4em0xNzYgMjQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4IDQ4IDIxLjUgNDggNDgtMjEuNSA0OC00OCA0OHptODAtMjA4SDQxNlYxNDRoNDQuMWw5OS45IDk5LjlWMjU2elwiXSxcImFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCI6WzY0MCw1MTIsW10sXCJmMmEzXCIsXCJNMjkwLjU0NyAxODkuMDM5Yy0yMC4yOTUtMTAuMTQ5LTQ0LjE0Ny0xMS4xOTktNjQuNzM5LTMuODkgNDIuNjA2IDAgNzEuMjA4IDIwLjQ3NSA4NS41NzggNTAuNTc2IDguNTc2IDE3Ljg5OS01LjE0OCAzOC4wNzEtMjMuNjE3IDM4LjA3MSAxOC40MjkgMCAzMi4yMTEgMjAuMTM2IDIzLjYxNyAzOC4wNzEtMTQuNzI1IDMwLjg0Ni00Ni4xMjMgNTAuODU0LTgwLjI5OCA1MC44NTQtLjU1NyAwLTk0LjQ3MS04LjYxNS05NC40NzEtOC42MTVsLTY2LjQwNiAzMy4zNDdjLTkuMzg0IDQuNjkzLTE5LjgxNS4zNzktMjMuODk1LTcuNzgxTDEuODYgMjkwLjc0N2MtNC4xNjctOC42MTUtMS4xMTEtMTguODk3IDYuOTQ2LTIzLjYyMWw1OC4wNzItMzMuMDY5TDEwOCAxNTkuODYxYzYuMzktNTcuMjQ1IDM0LjczMS0xMDkuNzY3IDc5Ljc0My0xNDYuNzI2IDExLjM5MS05LjQ0OCAyOC4zNDEtNy43ODEgMzcuNTEgMy42MTMgOS40NDYgMTEuMzk0IDcuNzggMjguMDY3LTMuNjEyIDM3LjUxNi0xMi41MDMgMTAuNTU5LTIzLjYxOCAyMi41MDktMzIuNTA5IDM1LjU3IDIxLjY3Mi0xNC43MjkgNDYuNjc5LTI0LjczMiA3NC4xODYtMjguMDY3IDE0LjcyNS0xLjk0NSAyOC4wNjMgOC4zMzYgMjkuNzMgMjMuMDY1IDEuOTQ1IDE0LjcyOC04LjMzNiAyOC4wNjctMjMuMDYyIDI5LjczNC0xNi4xMTYgMS45NDUtMzEuMTIgNy41MDMtNDQuMTc4IDE1LjI4NCAyNi4xMTQtNS43MTMgNTguNzEyLTMuMTM4IDg4LjA3OSAxMS4xMTUgMTMuMzM2IDYuNjY5IDE4Ljg5MyAyMi41MDkgMTIuMjI0IDM1Ljg0OC02LjM4OSAxMy4wNi0yMi41MDQgMTguNjE3LTM1LjU2NCAxMi4yMjZ6bS0yNy4yMjkgNjkuNDcyYy02LjExMi0xMi41MDUtMTguMzM4LTIwLjI4Ni0zMi4yMzEtMjAuMjg2YTM1LjQ2IDM1LjQ2IDAgMCAwLTM1LjU2NSAzNS41N2MwIDIxLjQyOCAxNy44MDggMzUuNTcgMzUuNTY1IDM1LjU3IDEzLjg5MyAwIDI2LjExOS03Ljc4MSAzMi4yMzEtMjAuMjg2IDQuNDQ2LTkuNDQ5IDEzLjYxNC0xNS4wMDYgMjMuMzM5LTE1LjI4NC05LjcyNS0uMjc3LTE4Ljg5My01LjgzNS0yMy4zMzktMTUuMjg0em0zNzQuODIxLTM3LjIzN2M0LjE2OCA4LjYxNSAxLjExMSAxOC44OTctNi45NDYgMjMuNjIxbC01OC4wNzEgMzMuMDY5TDUzMiAzNTIuMTZjLTYuMzkgNTcuMjQ1LTM0LjczMSAxMDkuNzY3LTc5Ljc0MyAxNDYuNzI2LTEwLjkzMiA5LjExMi0yNy43OTkgOC4xNDQtMzcuNTEtMy42MTMtOS40NDYtMTEuMzk0LTcuNzgtMjguMDY3IDMuNjEzLTM3LjUxNiAxMi41MDMtMTAuNTU5IDIzLjYxNy0yMi41MDkgMzIuNTA4LTM1LjU3LTIxLjY3MiAxNC43MjktNDYuNjc5IDI0LjczMi03NC4xODYgMjguMDY3LTEwLjAyMSAyLjUwNi0yNy41NTItNS42NDMtMjkuNzMtMjMuMDY1LTEuOTQ1LTE0LjcyOCA4LjMzNi0yOC4wNjcgMjMuMDYyLTI5LjczNCAxNi4xMTYtMS45NDYgMzEuMTItNy41MDMgNDQuMTc4LTE1LjI4NC0yNi4xMTQgNS43MTMtNTguNzEyIDMuMTM4LTg4LjA3OS0xMS4xMTUtMTMuMzM2LTYuNjY5LTE4Ljg5My0yMi41MDktMTIuMjI0LTM1Ljg0OCA2LjM4OS0xMy4wNjEgMjIuNTA1LTE4LjYxOSAzNS41NjUtMTIuMjI3IDIwLjI5NSAxMC4xNDkgNDQuMTQ3IDExLjE5OSA2NC43MzkgMy44OS00Mi42MDYgMC03MS4yMDgtMjAuNDc1LTg1LjU3OC01MC41NzYtOC41NzYtMTcuODk5IDUuMTQ4LTM4LjA3MSAyMy42MTctMzguMDcxLTE4LjQyOSAwLTMyLjIxMS0yMC4xMzYtMjMuNjE3LTM4LjA3MSAxNC4wMzMtMjkuMzk2IDQ0LjAzOS01MC44ODcgODEuOTY2LTUwLjg1NGw5Mi44MDMgOC42MTUgNjYuNDA2LTMzLjM0N2M5LjQwOC00LjcwNCAxOS44MjgtLjM1NCAyMy44OTQgNy43ODFsNDQuNDU1IDg4LjkyNnptLTIyOS4yMjctMTguNjE4Yy0xMy44OTMgMC0yNi4xMTkgNy43ODEtMzIuMjMxIDIwLjI4Ni00LjQ0NiA5LjQ0OS0xMy42MTQgMTUuMDA2LTIzLjMzOSAxNS4yODQgOS43MjUuMjc4IDE4Ljg5MyA1LjgzNiAyMy4zMzkgMTUuMjg0IDYuMTEyIDEyLjUwNSAxOC4zMzggMjAuMjg2IDMyLjIzMSAyMC4yODZhMzUuNDYgMzUuNDYgMCAwIDAgMzUuNTY1LTM1LjU3YzAtMjEuNDI5LTE3LjgwOC0zNS41Ny0zNS41NjUtMzUuNTd6XCJdLGFuY2hvcjpbNTc2LDUxMixbXSxcImYxM2RcIixcIk0xMi45NzEgMzUyaDMyLjM5NEM2Ny4xNzIgNDU0LjczNSAxODEuOTQ0IDUxMiAyODggNTEyYzEwNi4yMjkgMCAyMjAuODUzLTU3LjM4IDI0Mi42MzUtMTYwaDMyLjM5NGMxMC42OTEgMCAxNi4wNDUtMTIuOTI2IDguNDg1LTIwLjQ4NWwtNjcuMDI5LTY3LjAyOWMtNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3MSAwbC02Ny4wMjkgNjcuMDI5Yy03LjU2IDcuNTYtMi4yMDYgMjAuNDg1IDguNDg1IDIwLjQ4NWgzNS4xNDZjLTIwLjI5IDU0LjMxNy04NC45NjMgODYuNTg4LTE0NC4xMTcgOTQuMDE1VjI1Nmg1MmM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC01MnYtNS40N2MzNy4yODEtMTMuMTc4IDYzLjk5NS00OC43MjUgNjQtOTAuNTE4QzM4NC4wMDUgNDMuNzcyIDM0MS42MDUuNzM4IDI4OS4zNy4wMSAyMzUuNzIzLS43MzkgMTkyIDQyLjUyNSAxOTIgOTZjMCA0MS43OTggMjYuNzE2IDc3LjM1IDY0IDkwLjUzVjE5MmgtNTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg1MnYxOTAuMDE1Yy01OC45MzYtNy4zOTktMTIzLjgyLTM5LjY3OS0xNDQuMTE3LTk0LjAxNWgzNS4xNDZjMTAuNjkxIDAgMTYuMDQ1LTEyLjkyNiA4LjQ4NS0yMC40ODVsLTY3LjAyOS02Ny4wMjljLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NzEgMEw0LjQ4NSAzMzEuNTE1Qy0zLjA3NCAzMzkuMDc0IDIuMjggMzUyIDEyLjk3MSAzNTJ6TTI4OCA2NGMxNy42NDUgMCAzMiAxNC4zNTUgMzIgMzJzLTE0LjM1NSAzMi0zMiAzMi0zMi0xNC4zNTUtMzItMzIgMTQuMzU1LTMyIDMyLTMyelwiXSxcImFuZ2xlLWRvdWJsZS1kb3duXCI6WzMyMCw1MTIsW10sXCJmMTAzXCIsXCJNMTQzIDI1Ni4zTDcgMTIwLjNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDIyLjYtMjIuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw5Ni40IDk2LjQgOTYuNC05Ni40YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDMxMyA4Ni4zYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0xMzYgMTM2Yy05LjQgOS41LTI0LjYgOS41LTM0IC4xem0zNCAxOTJsMTM2LTEzNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtMjIuNi0yMi42Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEwxNjAgMzUyLjFsLTk2LjQtOTYuNGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAyNzguM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMTM2IDEzNmM5LjQgOS41IDI0LjYgOS41IDM0IC4xelwiXSxcImFuZ2xlLWRvdWJsZS1sZWZ0XCI6WzQ0OCw1MTIsW10sXCJmMTAwXCIsXCJNMjIzLjcgMjM5bDEzNi0xMzZjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjIuNiAyMi42YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDMxOS45IDI1Nmw5Ni40IDk2LjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMMzkzLjcgNDA5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMTM2LTEzNmMtOS41LTkuNC05LjUtMjQuNi0uMS0zNHptLTE5MiAzNGwxMzYgMTM2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDIyLjYtMjIuNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwxMjcuOSAyNTZsOTYuNC05Ni40YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDIwMS43IDEwM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTEzNiAxMzZjLTkuNSA5LjQtOS41IDI0LjYtLjEgMzR6XCJdLFwiYW5nbGUtZG91YmxlLXJpZ2h0XCI6WzQ0OCw1MTIsW10sXCJmMTAxXCIsXCJNMjI0LjMgMjczbC0xMzYgMTM2Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMjIuNi0yMi42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw5Ni40LTk2LjQtOTYuNC05Ni40Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUw1NC4zIDEwM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxMzYgMTM2YzkuNSA5LjQgOS41IDI0LjYuMSAzNHptMTkyLTM0bC0xMzYtMTM2Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMjIuNiAyMi42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw5Ni40IDk2LjQtOTYuNCA5Ni40Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwyMi42IDIyLjZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMTM2LTEzNmM5LjQtOS4yIDkuNC0yNC40IDAtMzMuOHpcIl0sXCJhbmdsZS1kb3VibGUtdXBcIjpbMzIwLDUxMixbXSxcImYxMDJcIixcIk0xNzcgMjU1LjdsMTM2IDEzNmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMjIuNiAyMi42Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxNjAgMzUxLjlsLTk2LjQgOTYuNGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMNyA0MjUuN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsMTM2LTEzNmM5LjQtOS41IDI0LjYtOS41IDM0LS4xem0tMzQtMTkyTDcgMTk5LjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDIyLjYgMjIuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw5Ni40LTk2LjQgOTYuNCA5Ni40YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDIyLjYtMjIuNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtMTM2LTEzNmMtOS4yLTkuNC0yNC40LTkuNC0zMy44IDB6XCJdLFwiYW5nbGUtZG93blwiOlszMjAsNTEyLFtdLFwiZjEwN1wiLFwiTTE0MyAzNTIuM0w3IDIxNi4zYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWwyMi42LTIyLjZjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsOTYuNCA5Ni40IDk2LjQtOTYuNGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwyMi42IDIyLjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTEzNiAxMzZjLTkuMiA5LjQtMjQuNCA5LjQtMzMuOCAwelwiXSxcImFuZ2xlLWxlZnRcIjpbMjU2LDUxMixbXSxcImYxMDRcIixcIk0zMS43IDIzOWwxMzYtMTM2YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDIyLjYgMjIuNmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwxMjcuOSAyNTZsOTYuNCA5Ni40YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDIwMS43IDQwOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTEzNi0xMzZjLTkuNS05LjQtOS41LTI0LjYtLjEtMzR6XCJdLFwiYW5nbGUtcmlnaHRcIjpbMjU2LDUxMixbXSxcImYxMDVcIixcIk0yMjQuMyAyNzNsLTEzNiAxMzZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0yMi42LTIyLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDk2LjQtOTYuNC05Ni40LTk2LjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDU0LjMgMTAzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDEzNiAxMzZjOS41IDkuNCA5LjUgMjQuNi4xIDM0elwiXSxcImFuZ2xlLXVwXCI6WzMyMCw1MTIsW10sXCJmMTA2XCIsXCJNMTc3IDE1OS43bDEzNiAxMzZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTIyLjYgMjIuNmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTYwIDI1NS45bC05Ni40IDk2LjRjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDcgMzI5LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDEzNi0xMzZjOS40LTkuNSAyNC42LTkuNSAzNC0uMXpcIl0sYW5ncnk6WzQ5Niw1MTIsW10sXCJmNTU2XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHpNMTM2IDI0MGMwLTkuMyA0LjEtMTcuNSAxMC41LTIzLjRsLTMxLTkuM2MtOC41LTIuNS0xMy4zLTExLjUtMTAuNy0xOS45IDIuNS04LjUgMTEuNC0xMy4yIDE5LjktMTAuN2w4MCAyNGM4LjUgMi41IDEzLjMgMTEuNSAxMC43IDE5LjktMi4xIDYuOS04LjQgMTEuNC0xNS4zIDExLjQtLjUgMC0xLjEtLjItMS43LS4yLjcgMi43IDEuNyA1LjMgMS43IDguMiAwIDE3LjctMTQuMyAzMi0zMiAzMlMxMzYgMjU3LjcgMTM2IDI0MHptMTY4IDE1NC4yYy0yNy44LTMzLjQtODQuMi0zMy40LTExMi4xIDAtMTMuNSAxNi4zLTM4LjItNC4yLTI0LjYtMjAuNSAyMC0yNCA0OS40LTM3LjggODAuNi0zNy44czYwLjYgMTMuOCA4MC42IDM3LjhjMTMuOCAxNi41LTExLjEgMzYuNi0yNC41IDIwLjV6bTc2LjYtMTg2LjlsLTMxIDkuM2M2LjMgNS44IDEwLjUgMTQuMSAxMC41IDIzLjQgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0yLjkuOS01LjYgMS43LTguMi0uNi4xLTEuMS4yLTEuNy4yLTYuOSAwLTEzLjItNC41LTE1LjMtMTEuNC0yLjUtOC41IDIuMy0xNy40IDEwLjctMTkuOWw4MC0yNGM4LjQtMi41IDE3LjQgMi4zIDE5LjkgMTAuNyAyLjUgOC41LTIuMyAxNy40LTEwLjggMTkuOXpcIl0sYXJjaGl2ZTpbNTEyLDUxMixbXSxcImYxODdcIixcIk0zMiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MEgzMnYyODh6bTE2MC0yMTJjMC02LjYgNS40LTEyIDEyLTEyaDEwNGM2LjYgMCAxMiA1LjQgMTIgMTJ2OGMwIDYuNi01LjQgMTItMTIgMTJIMjA0Yy02LjYgMC0xMi01LjQtMTItMTJ2LTh6TTQ4MCAzMkgzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djQ4YzAgOC44IDcuMiAxNiAxNiAxNmg0ODBjOC44IDAgMTYtNy4yIDE2LTE2VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXSxhcmNod2F5Ols1NzYsNTEyLFtdLFwiZjU1N1wiLFwiTTU2MCA0NDhoLTE2Vjk2SDMydjM1MkgxNi4wMmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZIMTc2YzguODQgMCAxNi03LjE2IDE2LTE2VjMyMGMwLTUzLjAyIDQyLjk4LTk2IDk2LTk2czk2IDQyLjk4IDk2IDk2bC4wMiAxNjB2MTZjMCA4Ljg0IDcuMTYgMTYgMTYgMTZINTYwYzguODQgMCAxNi03LjE2IDE2LTE2di0zMmMwLTguODQtNy4xNi0xNi0xNi0xNnptMC00NDhIMTZDNy4xNiAwIDAgNy4xNiAwIDE2djMyYzAgOC44NCA3LjE2IDE2IDE2IDE2aDU0NGM4Ljg0IDAgMTYtNy4xNiAxNi0xNlYxNmMwLTguODQtNy4xNi0xNi0xNi0xNnpcIl0sXCJhcnJvdy1hbHQtY2lyY2xlLWRvd25cIjpbNTEyLDUxMixbXSxcImYzNThcIixcIk01MDQgMjU2YzAgMTM3LTExMSAyNDgtMjQ4IDI0OFM4IDM5MyA4IDI1NiAxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDh6TTIxMiAxNDB2MTE2aC03MC45Yy0xMC43IDAtMTYuMSAxMy04LjUgMjAuNWwxMTQuOSAxMTQuM2M0LjcgNC43IDEyLjIgNC43IDE2LjkgMGwxMTQuOS0xMTQuM2M3LjYtNy42IDIuMi0yMC41LTguNS0yMC41SDMwMFYxNDBjMC02LjYtNS40LTEyLTEyLTEyaC02NGMtNi42IDAtMTIgNS40LTEyIDEyelwiXSxcImFycm93LWFsdC1jaXJjbGUtbGVmdFwiOls1MTIsNTEyLFtdLFwiZjM1OVwiLFwiTTI1NiA1MDRDMTE5IDUwNCA4IDM5MyA4IDI1NlMxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDgtMTExIDI0OC0yNDggMjQ4em0xMTYtMjkySDI1NnYtNzAuOWMwLTEwLjctMTMtMTYuMS0yMC41LTguNUwxMjEuMiAyNDcuNWMtNC43IDQuNy00LjcgMTIuMiAwIDE2LjlsMTE0LjMgMTE0LjljNy42IDcuNiAyMC41IDIuMiAyMC41LTguNVYzMDBoMTE2YzYuNiAwIDEyLTUuNCAxMi0xMnYtNjRjMC02LjYtNS40LTEyLTEyLTEyelwiXSxcImFycm93LWFsdC1jaXJjbGUtcmlnaHRcIjpbNTEyLDUxMixbXSxcImYzNWFcIixcIk0yNTYgOGMxMzcgMCAyNDggMTExIDI0OCAyNDhTMzkzIDUwNCAyNTYgNTA0IDggMzkzIDggMjU2IDExOSA4IDI1NiA4ek0xNDAgMzAwaDExNnY3MC45YzAgMTAuNyAxMyAxNi4xIDIwLjUgOC41bDExNC4zLTExNC45YzQuNy00LjcgNC43LTEyLjIgMC0xNi45bC0xMTQuMy0xMTVjLTcuNi03LjYtMjAuNS0yLjItMjAuNSA4LjVWMjEySDE0MGMtNi42IDAtMTIgNS40LTEyIDEydjY0YzAgNi42IDUuNCAxMiAxMiAxMnpcIl0sXCJhcnJvdy1hbHQtY2lyY2xlLXVwXCI6WzUxMiw1MTIsW10sXCJmMzViXCIsXCJNOCAyNTZDOCAxMTkgMTE5IDggMjU2IDhzMjQ4IDExMSAyNDggMjQ4LTExMSAyNDgtMjQ4IDI0OFM4IDM5MyA4IDI1NnptMjkyIDExNlYyNTZoNzAuOWMxMC43IDAgMTYuMS0xMyA4LjUtMjAuNUwyNjQuNSAxMjEuMmMtNC43LTQuNy0xMi4yLTQuNy0xNi45IDBsLTExNSAxMTQuM2MtNy42IDcuNi0yLjIgMjAuNSA4LjUgMjAuNUgyMTJ2MTE2YzAgNi42IDUuNCAxMiAxMiAxMmg2NGM2LjYgMCAxMi01LjQgMTItMTJ6XCJdLFwiYXJyb3ctY2lyY2xlLWRvd25cIjpbNTEyLDUxMixbXSxcImYwYWJcIixcIk01MDQgMjU2YzAgMTM3LTExMSAyNDgtMjQ4IDI0OFM4IDM5MyA4IDI1NiAxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDh6bS0xNDMuNi0yOC45TDI4OCAzMDIuNlYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRoLTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYxODIuNmwtNzIuNC03NS41Yy05LjMtOS43LTI0LjgtOS45LTM0LjMtLjRsLTEwLjkgMTFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45TDIzOSA0MDQuM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMGwxMzIuNy0xMzIuN2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtMTAuOS0xMWMtOS41LTkuNS0yNS05LjMtMzQuMy40elwiXSxcImFycm93LWNpcmNsZS1sZWZ0XCI6WzUxMiw1MTIsW10sXCJmMGE4XCIsXCJNMjU2IDUwNEMxMTkgNTA0IDggMzkzIDggMjU2UzExOSA4IDI1NiA4czI0OCAxMTEgMjQ4IDI0OC0xMTEgMjQ4LTI0OCAyNDh6bTI4LjktMTQzLjZMMjA5LjQgMjg4SDM5MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHYtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjA5LjRsNzUuNS03Mi40YzkuNy05LjMgOS45LTI0LjguNC0zNC4zbC0xMS0xMC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEwxMDcuNyAyMzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDEzMi43IDEzMi43YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDExLTEwLjljOS41LTkuNSA5LjMtMjUtLjQtMzQuM3pcIl0sXCJhcnJvdy1jaXJjbGUtcmlnaHRcIjpbNTEyLDUxMixbXSxcImYwYTlcIixcIk0yNTYgOGMxMzcgMCAyNDggMTExIDI0OCAyNDhTMzkzIDUwNCAyNTYgNTA0IDggMzkzIDggMjU2IDExOSA4IDI1NiA4em0tMjguOSAxNDMuNmw3NS41IDcyLjRIMTIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxODIuNmwtNzUuNSA3Mi40Yy05LjcgOS4zLTkuOSAyNC44LS40IDM0LjNsMTEgMTAuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEw0MDQuMyAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMjcxLjYgMTA2LjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC0xMSAxMC45Yy05LjUgOS42LTkuMyAyNS4xLjQgMzQuNHpcIl0sXCJhcnJvdy1jaXJjbGUtdXBcIjpbNTEyLDUxMixbXSxcImYwYWFcIixcIk04IDI1NkM4IDExOSAxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDgtMTExIDI0OC0yNDggMjQ4UzggMzkzIDggMjU2em0xNDMuNiAyOC45bDcyLjQtNzUuNVYzOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMjA5LjRsNzIuNCA3NS41YzkuMyA5LjcgMjQuOCA5LjkgMzQuMy40bDEwLjktMTFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMjczIDEwNy43Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEwxMDYuMyAyNDAuNGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMTAuOSAxMWM5LjYgOS41IDI1LjEgOS4zIDM0LjQtLjR6XCJdLFwiYXJyb3ctZG93blwiOls0NDgsNTEyLFtdLFwiZjA2M1wiLFwiTTQxMy4xIDIyMi41bDIyLjIgMjIuMmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgNDczYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxMi43IDI3OC42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWwyMi4yLTIyLjJjOS41LTkuNSAyNS05LjMgMzQuMy40TDE4NCAzNDMuNFY1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyODcuNGwxMTQuOC0xMjAuNWM5LjMtOS44IDI0LjgtMTAgMzQuMy0uNHpcIl0sXCJhcnJvdy1sZWZ0XCI6WzQ0OCw1MTIsW10sXCJmMDYwXCIsXCJNMjU3LjUgNDQ1LjFsLTIyLjIgMjIuMmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMNyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDIwMS40IDQ0LjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjIuMiAyMi4yYzkuNSA5LjUgOS4zIDI1LS40IDM0LjNMMTM2LjYgMjE2SDQyNGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNEgxMzYuNmwxMjAuNSAxMTQuOGM5LjggOS4zIDEwIDI0LjguNCAzNC4zelwiXSxcImFycm93LXJpZ2h0XCI6WzQ0OCw1MTIsW10sXCJmMDYxXCIsXCJNMTkwLjUgNjYuOWwyMi4yLTIyLjJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMNDQxIDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDYuNiA0NjcuM2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTIyLjItMjIuMmMtOS41LTkuNS05LjMtMjUgLjQtMzQuM0wzMTEuNCAyOTZIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0di0zMmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgyODcuNEwxOTAuOSAxMDEuMmMtOS44LTkuMy0xMC0yNC44LS40LTM0LjN6XCJdLFwiYXJyb3ctdXBcIjpbNDQ4LDUxMixbXSxcImYwNjJcIixcIk0zNC45IDI4OS41bC0yMi4yLTIyLjJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDIwNyAzOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxOTQuMyAxOTQuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOUw0MTMgMjg5LjRjLTkuNSA5LjUtMjUgOS4zLTM0LjMtLjRMMjY0IDE2OC42VjQ1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNGgtMzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE2OC42TDY5LjIgMjg5LjFjLTkuMyA5LjgtMjQuOCAxMC0zNC4zLjR6XCJdLFwiYXJyb3dzLWFsdFwiOls1MTIsNTEyLFtdLFwiZjBiMlwiLFwiTTM1Mi4yMDEgNDI1Ljc3NWwtNzkuMTk2IDc5LjE5NmMtOS4zNzMgOS4zNzMtMjQuNTY4IDkuMzczLTMzLjk0MSAwbC03OS4xOTYtNzkuMTk2Yy0xNS4xMTktMTUuMTE5LTQuNDExLTQwLjk3MSAxNi45NzEtNDAuOTdoNTEuMTYyTDIyOCAyODRIMTI3LjE5NnY1MS4xNjJjMCAyMS4zODItMjUuODUxIDMyLjA5LTQwLjk3MSAxNi45NzFMNy4wMjkgMjcyLjkzN2MtOS4zNzMtOS4zNzMtOS4zNzMtMjQuNTY5IDAtMzMuOTQxTDg2LjIyNSAxNTkuOGMxNS4xMTktMTUuMTE5IDQwLjk3MS00LjQxMSA0MC45NzEgMTYuOTcxVjIyOEgyMjhWMTI3LjE5NmgtNTEuMjNjLTIxLjM4MiAwLTMyLjA5LTI1Ljg1MS0xNi45NzEtNDAuOTcxbDc5LjE5Ni03OS4xOTZjOS4zNzMtOS4zNzMgMjQuNTY4LTkuMzczIDMzLjk0MSAwbDc5LjE5NiA3OS4xOTZjMTUuMTE5IDE1LjExOSA0LjQxMSA0MC45NzEtMTYuOTcxIDQwLjk3MWgtNTEuMTYyVjIyOGgxMDAuODA0di01MS4xNjJjMC0yMS4zODIgMjUuODUxLTMyLjA5IDQwLjk3LTE2Ljk3MWw3OS4xOTYgNzkuMTk2YzkuMzczIDkuMzczIDkuMzczIDI0LjU2OSAwIDMzLjk0MUw0MjUuNzczIDM1Mi4yYy0xNS4xMTkgMTUuMTE5LTQwLjk3MSA0LjQxMS00MC45Ny0xNi45NzFWMjg0SDI4NHYxMDAuODA0aDUxLjIzYzIxLjM4MiAwIDMyLjA5IDI1Ljg1MSAxNi45NzEgNDAuOTcxelwiXSxcImFycm93cy1hbHQtaFwiOls1MTIsNTEyLFtdLFwiZjMzN1wiLFwiTTM3Ny45NDEgMTY5Ljk0MVYyMTZIMTM0LjA1OXYtNDYuMDU5YzAtMjEuMzgyLTI1Ljg1MS0zMi4wOS00MC45NzEtMTYuOTcxTDcuMDI5IDIzOS4wMjljLTkuMzczIDkuMzczLTkuMzczIDI0LjU2OCAwIDMzLjk0MWw4Ni4wNTkgODYuMDU5YzE1LjExOSAxNS4xMTkgNDAuOTcxIDQuNDExIDQwLjk3MS0xNi45NzFWMjk2aDI0My44ODJ2NDYuMDU5YzAgMjEuMzgyIDI1Ljg1MSAzMi4wOSA0MC45NzEgMTYuOTcxbDg2LjA1OS04Ni4wNTljOS4zNzMtOS4zNzMgOS4zNzMtMjQuNTY4IDAtMzMuOTQxbC04Ni4wNTktODYuMDU5Yy0xNS4xMTktMTUuMTItNDAuOTcxLTQuNDEyLTQwLjk3MSAxNi45N3pcIl0sXCJhcnJvd3MtYWx0LXZcIjpbMjU2LDUxMixbXSxcImYzMzhcIixcIk0yMTQuMDU5IDM3Ny45NDFIMTY4VjEzNC4wNTloNDYuMDU5YzIxLjM4MiAwIDMyLjA5LTI1Ljg1MSAxNi45NzEtNDAuOTcxTDE0NC45NzEgNy4wMjljLTkuMzczLTkuMzczLTI0LjU2OC05LjM3My0zMy45NDEgMEwyNC45NzEgOTMuMDg4Yy0xNS4xMTkgMTUuMTE5LTQuNDExIDQwLjk3MSAxNi45NzEgNDAuOTcxSDg4djI0My44ODJINDEuOTQxYy0yMS4zODIgMC0zMi4wOSAyNS44NTEtMTYuOTcxIDQwLjk3MWw4Ni4wNTkgODYuMDU5YzkuMzczIDkuMzczIDI0LjU2OCA5LjM3MyAzMy45NDEgMGw4Ni4wNTktODYuMDU5YzE1LjEyLTE1LjExOSA0LjQxMi00MC45NzEtMTYuOTctNDAuOTcxelwiXSxcImFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtc1wiOls1MTIsNTEyLFtdLFwiZjJhMlwiLFwiTTIxNiAyNjBjMCAxNS40NjQtMTIuNTM2IDI4LTI4IDI4cy0yOC0xMi41MzYtMjgtMjhjMC00NC4xMTIgMzUuODg4LTgwIDgwLTgwczgwIDM1Ljg4OCA4MCA4MGMwIDE1LjQ2NC0xMi41MzYgMjgtMjggMjhzLTI4LTEyLjUzNi0yOC0yOGMwLTEzLjIzNC0xMC43NjctMjQtMjQtMjRzLTI0IDEwLjc2Ni0yNCAyNHptMjQtMTc2Yy05Ny4wNDcgMC0xNzYgNzguOTUzLTE3NiAxNzYgMCAxNS40NjQgMTIuNTM2IDI4IDI4IDI4czI4LTEyLjUzNiAyOC0yOGMwLTY2LjE2OCA1My44MzItMTIwIDEyMC0xMjBzMTIwIDUzLjgzMiAxMjAgMTIwYzAgNzUuMTY0LTcxLjAwOSA3MC4zMTEtNzEuOTk3IDE0My42MjJMMjg4IDQwNGMwIDI4LjY3My0yMy4zMjcgNTItNTIgNTItMTUuNDY0IDAtMjggMTIuNTM2LTI4IDI4czEyLjUzNiAyOCAyOCAyOGM1OS40NzUgMCAxMDcuODc2LTQ4LjMyOCAxMDgtMTA3Ljc3NC41OTUtMzQuNDI4IDcyLTQ4LjI0IDcyLTE0NC4yMjYgMC05Ny4wNDctNzguOTUzLTE3Ni0xNzYtMTc2em0tODAgMjM2Yy0xNy42NzMgMC0zMiAxNC4zMjctMzIgMzJzMTQuMzI3IDMyIDMyIDMyIDMyLTE0LjMyNyAzMi0zMi0xNC4zMjctMzItMzItMzJ6TTMyIDQ0OGMtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMyczE0LjMyNyAzMiAzMiAzMiAzMi0xNC4zMjcgMzItMzItMTQuMzI3LTMyLTMyLTMyem00ODAtMTg3Ljk5M2MwLTEuNTE4LS4wMTItMy4wMjUtLjA0NS00LjUzMUM1MTAuMDc2IDE0MC41MjUgNDM2LjE1NyAzOC40NyAzMjcuOTk0IDEuNTExYy0xNC42MzMtNC45OTgtMzAuNTQ5IDIuODA5LTM1LjU1IDE3LjQ0Mi01IDE0LjYzMyAyLjgxIDMwLjU0OSAxNy40NDIgMzUuNTUgODUuOTA2IDI5LjM1NCAxNDQuNjEgMTEwLjUxMyAxNDYuMDc3IDIwMS45NTNsLjAwMy4xODhjLjAyNiAxLjExOC4wMzMgMi4yMzYuMDMzIDMuMzYzIDAgMTUuNDY0IDEyLjUzNiAyOCAyOCAyOHMyOC4wMDEtMTIuNTM2IDI4LjAwMS0yOHpNMTUyLjk3MSA0MzkuMDI5bC04MC04MEwzOS4wMyAzOTIuOTdsODAgODAgMzMuOTQxLTMzLjk0MXpcIl0sYXN0ZXJpc2s6WzUxMiw1MTIsW10sXCJmMDY5XCIsXCJNNDc4LjIxIDMzNC4wOTNMMzM2IDI1NmwxNDIuMjEtNzguMDkzYzExLjc5NS02LjQ3NyAxNS45NjEtMjEuMzg0IDkuMjMyLTMzLjAzN2wtMTkuNDgtMzMuNzQxYy02LjcyOC0xMS42NTMtMjEuNzItMTUuNDk5LTMzLjIyNy04LjUyM0wyOTYgMTg2LjcxOGwzLjQ3NS0xNjIuMjA0QzI5OS43NjMgMTEuMDYxIDI4OC45MzcgMCAyNzUuNDggMGgtMzguOTZjLTEzLjQ1NiAwLTI0LjI4MyAxMS4wNjEtMjMuOTk0IDI0LjUxNEwyMTYgMTg2LjcxOCA3Ny4yNjUgMTAyLjYwN2MtMTEuNTA2LTYuOTc2LTI2LjQ5OS0zLjEzLTMzLjIyNyA4LjUyM2wtMTkuNDggMzMuNzQxYy02LjcyOCAxMS42NTMtMi41NjIgMjYuNTYgOS4yMzMgMzMuMDM3TDE3NiAyNTYgMzMuNzkgMzM0LjA5M2MtMTEuNzk1IDYuNDc3LTE1Ljk2MSAyMS4zODQtOS4yMzIgMzMuMDM3bDE5LjQ4IDMzLjc0MWM2LjcyOCAxMS42NTMgMjEuNzIxIDE1LjQ5OSAzMy4yMjcgOC41MjNMMjE2IDMyNS4yODJsLTMuNDc1IDE2Mi4yMDRDMjEyLjIzNyA1MDAuOTM5IDIyMy4wNjQgNTEyIDIzNi41MiA1MTJoMzguOTYxYzEzLjQ1NiAwIDI0LjI4My0xMS4wNjEgMjMuOTk1LTI0LjUxNEwyOTYgMzI1LjI4MmwxMzguNzM1IDg0LjExMWMxMS41MDYgNi45NzYgMjYuNDk5IDMuMTMgMzMuMjI3LTguNTIzbDE5LjQ4LTMzLjc0MWM2LjcyOC0xMS42NTMgMi41NjMtMjYuNTU5LTkuMjMyLTMzLjAzNnpcIl0sYXQ6WzUxMiw1MTIsW10sXCJmMWZhXCIsXCJNMjU2IDhDMTE4Ljk0MSA4IDggMTE4LjkxOSA4IDI1NmMwIDEzNy4wNTkgMTEwLjkxOSAyNDggMjQ4IDI0OCA0OC4xNTQgMCA5NS4zNDItMTQuMTQgMTM1LjQwOC00MC4yMjMgMTIuMDA1LTcuODE1IDE0LjYyNS0yNC4yODggNS41NTItMzUuMzcybC0xMC4xNzctMTIuNDMzYy03LjY3MS05LjM3MS0yMS4xNzktMTEuNjY3LTMxLjM3My01LjEyOUMzMjUuOTIgNDI5Ljc1NyAyOTEuMzE0IDQ0MCAyNTYgNDQwYy0xMDEuNDU4IDAtMTg0LTgyLjU0Mi0xODQtMTg0UzE1NC41NDIgNzIgMjU2IDcyYzEwMC4xMzkgMCAxODQgNTcuNjE5IDE4NCAxNjAgMCAzOC43ODYtMjEuMDkzIDc5Ljc0Mi01OC4xNyA4My42OTMtMTcuMzQ5LS40NTQtMTYuOTEtMTIuODU3LTEzLjQ3Ni0zMC4wMjRsMjMuNDMzLTEyMS4xMUMzOTQuNjUzIDE0OS43NSAzODMuMzA4IDEzNiAzNjguMjI1IDEzNmgtNDQuOTgxYTEzLjUxOCAxMy41MTggMCAwIDAtMTMuNDMyIDExLjk5M2wtLjAxLjA5MmMtMTQuNjk3LTE3LjkwMS00MC40NDgtMjEuNzc1LTU5Ljk3MS0yMS43NzUtNzQuNTggMC0xMzcuODMxIDYyLjIzNC0xMzcuODMxIDE1MS40NiAwIDY1LjMwMyAzNi43ODUgMTA1Ljg3IDk2IDEwNS44NyAyNi45ODQgMCA1Ny4zNjktMTUuNjM3IDc0Ljk5MS0zOC4zMzMgOS41MjIgMzQuMTA0IDQwLjYxMyAzNC4xMDMgNzAuNzEgMzQuMTAzQzQ2Mi42MDkgMzc5LjQxIDUwNCAzMDcuNzk4IDUwNCAyMzIgNTA0IDk1LjY1MyAzOTQuMDIzIDggMjU2IDh6bS0yMS42OCAzMDQuNDNjLTIyLjI0OSAwLTM2LjA3LTE1LjYyMy0zNi4wNy00MC43NzEgMC00NC45OTMgMzAuNzc5LTcyLjcyOSA1OC42My03Mi43MjkgMjIuMjkyIDAgMzUuNjAxIDE1LjI0MSAzNS42MDEgNDAuNzcgMCA0NS4wNjEtMzMuODc1IDcyLjczLTU4LjE2MSA3Mi43M3pcIl0sYXRsYXM6WzQ0OCw1MTIsW10sXCJmNTU4XCIsXCJNMzE4LjM4IDIwOGgtMzkuMDljLTEuNDkgMjcuMDMtNi41NCA1MS4zNS0xNC4yMSA3MC40MSAyNy43MS0xMy4yNCA0OC4wMi0zOS4xOSA1My4zLTcwLjQxem0wLTMyYy01LjI5LTMxLjIyLTI1LjU5LTU3LjE3LTUzLjMtNzAuNDEgNy42OCAxOS4wNiAxMi43MiA0My4zOCAxNC4yMSA3MC40MWgzOS4wOXpNMjI0IDk3LjMxYy03LjY5IDcuNDUtMjAuNzcgMzQuNDItMjMuNDMgNzguNjloNDYuODdjLTIuNjctNDQuMjYtMTUuNzUtNzEuMjQtMjMuNDQtNzguNjl6bS00MS4wOCA4LjI4Yy0yNy43MSAxMy4yNC00OC4wMiAzOS4xOS01My4zIDcwLjQxaDM5LjA5YzEuNDktMjcuMDMgNi41My01MS4zNSAxNC4yMS03MC40MXptMCAxNzIuODJjLTcuNjgtMTkuMDYtMTIuNzItNDMuMzgtMTQuMjEtNzAuNDFoLTM5LjA5YzUuMjggMzEuMjIgMjUuNTkgNTcuMTcgNTMuMyA3MC40MXpNMjQ3LjQzIDIwOGgtNDYuODdjMi42NiA0NC4yNiAxNS43NCA3MS4yNCAyMy40MyA3OC42OSA3LjctNy40NSAyMC43OC0zNC40MyAyMy40NC03OC42OXpNNDQ4IDM1OC40VjI1LjZjMC0xNi05LjYtMjUuNi0yNS42LTI1LjZIOTZDNDEuNiAwIDAgNDEuNiAwIDk2djMyMGMwIDU0LjQgNDEuNiA5NiA5NiA5NmgzMjYuNGMxMi44IDAgMjUuNi05LjYgMjUuNi0yNS42di0xNmMwLTYuNC0zLjItMTIuOC05LjYtMTkuMi0zLjItMTYtMy4yLTYwLjggMC03My42IDYuNC0zLjIgOS42LTkuNiA5LjYtMTkuMnpNMjI0IDY0YzcwLjY5IDAgMTI4IDU3LjMxIDEyOCAxMjhzLTU3LjMxIDEyOC0xMjggMTI4Uzk2IDI2Mi42OSA5NiAxOTIgMTUzLjMxIDY0IDIyNCA2NHptMTYwIDM4NEg5NmMtMTkuMiAwLTMyLTEyLjgtMzItMzJzMTYtMzIgMzItMzJoMjg4djY0elwiXSxcImF1ZGlvLWRlc2NyaXB0aW9uXCI6WzUxMiw1MTIsW10sXCJmMjllXCIsXCJNMTYyLjkyNSAyMzguNzA5bDguODIyIDMwLjY1NWgtMjUuNjA2bDkuMDQxLTMwLjY1MmMxLjI3Ny00LjQyMSAyLjY1MS05Ljk5NCAzLjg3Mi0xNS4yNDUgMS4yMiA1LjI1MSAyLjU5NCAxMC44MjMgMy44NzEgMTUuMjQyem0xNjYuNDc0LTMyLjA5OWgtMTQuNTIzdjk4Ljc4MWgxNC41MjNjMjkuNzc2IDAgNDYuMTc1LTE3LjY3OCA0Ni4xNzUtNDkuNzc2IDAtMzIuMjM5LTE3LjQ5LTQ5LjAwNS00Ni4xNzUtNDkuMDA1ek01MTIgMTEydjI4OGMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjExMmMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDQxNmMyNi41MSAwIDQ4IDIxLjQ5IDQ4IDQ4ek0yNDUuNDU5IDMzNi4xMzlsLTU3LjA5Ny0xNjhBMTIuMDAxIDEyLjAwMSAwIDAgMCAxNzcgMTYwaC0zNS44OTRhMTIuMDAxIDEyLjAwMSAwIDAgMC0xMS4zNjIgOC4xMzlsLTU3LjA5NyAxNjhDNzAuMDAzIDM0My45MjIgNzUuNzg5IDM1MiA4NC4wMDkgMzUyaDI5LjEzM2ExMiAxMiAwIDAgMCAxMS41MzUtOC42OTNsOC41NzQtMjkuOTA2aDUxLjM2N2w4Ljc5MyAyOS45NzdBMTIgMTIgMCAwIDAgMjA0LjkyNiAzNTJoMjkuMTcyYzguMjIgMCAxNC4wMDYtOC4wNzggMTEuMzYxLTE1Ljg2MXptMTg0LjcwMS04MC41MjVjMC01OC45NzctMzcuOTE5LTk1LjYxNC05OC45Ni05NS42MTRoLTU3LjM2NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYxNjhjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMkgzMzEuMmM2MS4wNDEgMCA5OC45Ni0zNi45MzMgOTguOTYtOTYuMzg2elwiXSxhd2FyZDpbMzg0LDUxMixbXSxcImY1NTlcIixcIk05Ny4xMiAzNjIuNjNsLTUuMy01LjNhOS4wMDQgOS4wMDQgMCAwIDAtNC4wMi0yLjMyTDcyIDM1MC43N2MtOS41MS0yLjU1LTE3Ljg3LTcuNDUtMjUuNDMtMTMuMzJMMS4yIDQ0OC43Yy00LjM5IDEwLjc3IDMuODEgMjIuNDcgMTUuNDMgMjIuMDNsNTIuNjktMi4wMUwxMDUuNTYgNTA3YzggOC40NCAyMi4wNCA1LjgxIDI2LjQzLTQuOTZsNTIuMDUtMTI3LjYyYy0xMC44NCA2LjA0LTIyLjg3IDkuNTgtMzUuMzEgOS41OC0xOS41IDAtMzcuODItNy41OS01MS42MS0yMS4zN3pNMzgyLjggNDQ4LjdsLTQ1LjM3LTExMS4yNGMtNy41NiA1Ljg4LTE1LjkyIDEwLjc3LTI1LjQzIDEzLjMybC0xNS44IDQuMjNhOS4wMDQgOS4wMDQgMCAwIDAtNC4wMiAyLjMybC01LjMgNS4zQzI3My4wOSAzNzYuNDEgMjU0Ljc2IDM4NCAyMzUuMjYgMzg0Yy0xMi40NCAwLTI0LjQ3LTMuNTUtMzUuMzEtOS41OEwyNTIgNTAyLjA0YzQuMzkgMTAuNzcgMTguNDQgMTMuNCAyNi40MyA0Ljk2bDM2LjI1LTM4LjI4IDUyLjY5IDIuMDFjMTEuNjIuNDQgMTkuODItMTEuMjcgMTUuNDMtMjIuMDN6TTI2MyAzNDBsNS4yMS01LjNjNS01LjA5IDExLjIyLTguNzUgMTguMDUtMTAuNjFsMTUuNTMtNC4yM2MxMy44OS0zLjc5IDI0Ljc1LTE0Ljg0IDI4LjQ3LTI4Ljk4bDQuMTYtMTUuODFhNDEuMTQ1IDQxLjE0NSAwIDAgMSAxMC40Mi0xOC4zN2wxMS4zNy0xMS41N2MxMC4xNy0xMC4zNSAxNC4xNC0yNS40NCAxMC40Mi0zOS41OGwtNC4xNi0xNS44MWE0MS42NTcgNDEuNjU3IDAgMCAxIDAtMjEuMjFsNC4xNi0xNS44MWMzLjcyLTE0LjE0LS4yNS0yOS4yMy0xMC40Mi0zOS41OGwtMTEuMzctMTEuNTdjLTUtNS4wOS04LjU5LTExLjQyLTEwLjQyLTE4LjM3bC00LjE2LTE1LjhjLTMuNzItMTQuMTQtMTQuNTgtMjUuMTktMjguNDctMjguOThsLTE1LjUzLTQuMjRjLTYuODMtMS44Ni0xMy4wNS01LjUyLTE4LjA1LTEwLjYxTDI1Ni44NCAxMmMtMTAuMTctMTAuMzUtMjUtMTQuNC0zOC44OS0xMC42MWwtMTUuNTMgNC4yNGEzOS42MTQgMzkuNjE0IDAgMCAxLTIwLjg0IDBMMTY2LjA1IDEuNGMtMTMuODktMy43OS0yOC43Mi4yNS0zOC44OSAxMC42MWwtMTEuMzcgMTEuNTdjLTUgNS4wOS0xMS4yMiA4Ljc0LTE4LjA1IDEwLjYxbC0xNS41MyA0LjI0Yy0xMy44OSAzLjc5LTI0Ljc1IDE0Ljg0LTI4LjQ3IDI4Ljk4bC00LjE2IDE1LjhhNDEuMTQ1IDQxLjE0NSAwIDAgMS0xMC40MiAxOC4zN2wtMTEuMzcgMTEuNTdjLTEwLjE3IDEwLjM1LTE0LjE1IDI1LjQ0LTEwLjQyIDM5LjU4bDQuMTYgMTUuOGE0MS42NTcgNDEuNjU3IDAgMCAxIDAgMjEuMjFsLTQuMTYgMTUuOGMtMy43MiAxNC4xNC4yNSAyOS4yMyAxMC40MiAzOS41OWwxMS4zNyAxMS41N2M1IDUuMDkgOC41OSAxMS40MiAxMC40MiAxOC4zN2w0LjE2IDE1LjhjMy43MiAxNC4xNCAxNC41OCAyNS4xOSAyOC40NyAyOC45OGwxNS41MyA0LjIzYzYuODMgMS44NiAxMy4wNSA1LjUyIDE4LjA1IDEwLjYxTDEyMSAzNDBjMTMuMjMgMTMuNDcgMzMuODQgMTUuODggNDkuNzQgNS44MmEzOS42NzYgMzkuNjc2IDAgMCAxIDQyLjUzIDBjMTUuODkgMTAuMDYgMzYuNSA3LjY1IDQ5LjczLTUuODJ6TTk3LjY2IDE3NS45NmMwLTUzLjAzIDQyLjI0LTk2LjAyIDk0LjM0LTk2LjAyczk0LjM0IDQyLjk5IDk0LjM0IDk2LjAyLTQyLjI0IDk2LjAyLTk0LjM0IDk2LjAyLTk0LjM0LTQyLjk5LTk0LjM0LTk2LjAyelwiXSxiYWNrc3BhY2U6WzY0MCw1MTIsW10sXCJmNTVhXCIsXCJNNTc2IDY0SDIwNS4yNkE2My45NyA2My45NyAwIDAgMCAxNjAgODIuNzVMOS4zNyAyMzMuMzdjLTEyLjUgMTIuNS0xMi41IDMyLjc2IDAgNDUuMjVMMTYwIDQyOS4yNWMxMiAxMiAyOC4yOCAxOC43NSA0NS4yNSAxOC43NUg1NzZjMzUuMzUgMCA2NC0yOC42NSA2NC02NFYxMjhjMC0zNS4zNS0yOC42NS02NC02NC02NHptLTg0LjY5IDI1NC4wNmM2LjI1IDYuMjUgNi4yNSAxNi4zOCAwIDIyLjYzbC0yMi42MiAyMi42MmMtNi4yNSA2LjI1LTE2LjM4IDYuMjUtMjIuNjMgMEwzODQgMzAxLjI1bC02Mi4wNiA2Mi4wNmMtNi4yNSA2LjI1LTE2LjM4IDYuMjUtMjIuNjMgMGwtMjIuNjItMjIuNjJjLTYuMjUtNi4yNS02LjI1LTE2LjM4IDAtMjIuNjNMMzM4Ljc1IDI1NmwtNjIuMDYtNjIuMDZjLTYuMjUtNi4yNS02LjI1LTE2LjM4IDAtMjIuNjNsMjIuNjItMjIuNjJjNi4yNS02LjI1IDE2LjM4LTYuMjUgMjIuNjMgMEwzODQgMjEwLjc1bDYyLjA2LTYyLjA2YzYuMjUtNi4yNSAxNi4zOC02LjI1IDIyLjYzIDBsMjIuNjIgMjIuNjJjNi4yNSA2LjI1IDYuMjUgMTYuMzggMCAyMi42M0w0MjkuMjUgMjU2bDYyLjA2IDYyLjA2elwiXSxiYWNrd2FyZDpbNTEyLDUxMixbXSxcImYwNGFcIixcIk0xMS41IDI4MC42bDE5MiAxNjBjMjAuNiAxNy4yIDUyLjUgMi44IDUyLjUtMjQuNlY5NmMwLTI3LjQtMzEuOS00MS44LTUyLjUtMjQuNmwtMTkyIDE2MGMtMTUuMyAxMi44LTE1LjMgMzYuNCAwIDQ5LjJ6bTI1NiAwbDE5MiAxNjBjMjAuNiAxNy4yIDUyLjUgMi44IDUyLjUtMjQuNlY5NmMwLTI3LjQtMzEuOS00MS44LTUyLjUtMjQuNmwtMTkyIDE2MGMtMTUuMyAxMi44LTE1LjMgMzYuNCAwIDQ5LjJ6XCJdLFwiYmFsYW5jZS1zY2FsZVwiOls2NDAsNTEyLFtdLFwiZjI0ZVwiLFwiTTI1NiAzMzZoLS4wMmMwLTE2LjE4IDEuMzQtOC43My04NS4wNS0xODEuNTEtMTcuNjUtMzUuMjktNjguMTktMzUuMzYtODUuODcgMEMtMi4wNiAzMjguNzUuMDIgMzIwLjMzLjAyIDMzNkgwYzAgNDQuMTggNTcuMzEgODAgMTI4IDgwczEyOC0zNS44MiAxMjgtODB6TTEyOCAxNzZsNzIgMTQ0SDU2bDcyLTE0NHptNTExLjk4IDE2MGMwLTE2LjE4IDEuMzQtOC43My04NS4wNS0xODEuNTEtMTcuNjUtMzUuMjktNjguMTktMzUuMzYtODUuODcgMC04Ny4xMiAxNzQuMjYtODUuMDQgMTY1Ljg0LTg1LjA0IDE4MS41MUgzODRjMCA0NC4xOCA1Ny4zMSA4MCAxMjggODBzMTI4LTM1LjgyIDEyOC04MGgtLjAyek00NDAgMzIwbDcyLTE0NCA3MiAxNDRINDQwem04OCAxMjhIMzUyVjE1My4yNWMyMy41MS0xMC4yOSA0MS4xNi0zMS40OCA0Ni4zOS01Ny4yNUg1MjhjOC44NCAwIDE2LTcuMTYgMTYtMTZWNDhjMC04Ljg0LTcuMTYtMTYtMTYtMTZIMzgzLjY0QzM2OS4wNCAxMi42OCAzNDYuMDkgMCAzMjAgMHMtNDkuMDQgMTIuNjgtNjMuNjQgMzJIMTEyYy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYzMmMwIDguODQgNy4xNiAxNiAxNiAxNmgxMjkuNjFjNS4yMyAyNS43NiAyMi44NyA0Ni45NiA0Ni4zOSA1Ny4yNVY0NDhIMTEyYy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYzMmMwIDguODQgNy4xNiAxNiAxNiAxNmg0MTZjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxiYW46WzUxMiw1MTIsW10sXCJmMDVlXCIsXCJNMjU2IDhDMTE5LjAzNCA4IDggMTE5LjAzMyA4IDI1NnMxMTEuMDM0IDI0OCAyNDggMjQ4IDI0OC0xMTEuMDM0IDI0OC0yNDhTMzkyLjk2NyA4IDI1NiA4em0xMzAuMTA4IDExNy44OTJjNjUuNDQ4IDY1LjQ0OCA3MCAxNjUuNDgxIDIwLjY3NyAyMzUuNjM3TDE1MC40NyAxMDUuMjE2YzcwLjIwNC00OS4zNTYgMTcwLjIyNi00NC43MzUgMjM1LjYzOCAyMC42NzZ6TTEyNS44OTIgMzg2LjEwOGMtNjUuNDQ4LTY1LjQ0OC03MC0xNjUuNDgxLTIwLjY3Ny0yMzUuNjM3TDM2MS41MyA0MDYuNzg0Yy03MC4yMDMgNDkuMzU2LTE3MC4yMjYgNDQuNzM2LTIzNS42MzgtMjAuNjc2elwiXSxcImJhbmQtYWlkXCI6WzY0MCw1MTIsW10sXCJmNDYyXCIsXCJNMCAxNjB2MTkyYzAgMzUuMyAyOC43IDY0IDY0IDY0aDk2Vjk2SDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHptNTc2LTY0aC05NnYzMjBoOTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xOTIgNDE2aDI1NlY5NkgxOTJ2MzIwem0xNzYtMjMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHptMCA5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6bS05Ni05NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6bTAgOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjQtMjQtMTAuNy0yNC0yNCAxMC43LTI0IDI0LTI0elwiXSxiYXJjb2RlOls1MTIsNTEyLFtdLFwiZjAyYVwiLFwiTTAgNDQ4VjY0aDE4djM4NEgwem0yNi44NTctLjI3M1Y2NEgzNnYzODMuNzI3aC05LjE0M3ptMjcuMTQzIDBWNjRoOC44NTd2MzgzLjcyN0g1NHptNDQuODU3IDBWNjRoOC44NTd2MzgzLjcyN2gtOC44NTd6bTM2IDBWNjRoMTcuNzE0djM4My43MjdoLTE3LjcxNHptNDQuODU3IDBWNjRoOC44NTd2MzgzLjcyN2gtOC44NTd6bTE4IDBWNjRoOC44NTd2MzgzLjcyN2gtOC44NTd6bTE4IDBWNjRoOC44NTd2MzgzLjcyN2gtOC44NTd6bTM1LjcxNSAwVjY0aDE4djM4My43MjdoLTE4em00NC44NTcgMFY2NGgxOHYzODMuNzI3aC0xOHptMzUuOTk5IDBWNjRoMTguMDAxdjM4My43MjdoLTE4LjAwMXptMzYuMDAxIDBWNjRoMTguMDAxdjM4My43MjdoLTE4LjAwMXptMjYuODU3IDBWNjRoMTh2MzgzLjcyN2gtMTh6bTQ1LjE0MyAwVjY0aDI2Ljg1N3YzODMuNzI3aC0yNi44NTd6bTM1LjcxNCAwVjY0aDkuMTQzdjM4My43MjdINDc2em0xOCAuMjczVjY0aDE4djM4NGgtMTh6XCJdLGJhcnM6WzQ0OCw1MTIsW10sXCJmMGM5XCIsXCJNMTYgMTMyaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2Vjc2YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZDNy4xNjMgNjAgMCA2Ny4xNjMgMCA3NnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2elwiXSxcImJhc2ViYWxsLWJhbGxcIjpbNDk2LDUxMixbXSxcImY0MzNcIixcIk0zNjguNSAzNjMuOWwyOC44LTEzLjljMTEuMSAyMi45IDI2IDQzLjIgNDQuMSA2MC45IDM0LTQyLjUgNTQuNS05Ni4zIDU0LjUtMTU0LjkgMC01OC41LTIwLjQtMTEyLjItNTQuMi0xNTQuNi0xNy44IDE3LjMtMzIuNiAzNy4xLTQzLjYgNTkuNWwtMjguNy0xNC4xYzEyLjgtMjYgMzAtNDkgNTAuOC02OUMzNzUuNiAzNC43IDMxNSA4IDI0OCA4IDE4MS4xIDggMTIwLjUgMzQuNiA3NS45IDc3LjdjMjAuNyAxOS45IDM3LjkgNDIuOSA1MC43IDY4LjhsLTI4LjcgMTQuMWMtMTEtMjIuMy0yNS43LTQyLjEtNDMuNS01OS40QzIwLjQgMTQzLjcgMCAxOTcuNCAwIDI1NmMwIDU4LjYgMjAuNCAxMTIuMyA1NC40IDE1NC43IDE4LjItMTcuNyAzMy4yLTM4IDQ0LjMtNjFsMjguOCAxMy45Yy0xMi45IDI2LjctMzAuMyA1MC4zLTUxLjUgNzAuNyA0NC41IDQzLjEgMTA1LjEgNjkuNyAxNzIgNjkuNyA2Ni44IDAgMTI3LjMtMjYuNSAxNzEuOS02OS41LTIxLjEtMjAuNC0zOC41LTQzLjktNTEuNC03MC42em0tMjI4LjMtMzJsLTMwLjUtOS44YzE0LjktNDYuNCAxMi43LTkzLjgtLjYtMTM0bDMwLjQtMTBjMTUgNDUuNiAxOCA5OS45LjcgMTUzLjh6bTIxNi4zLTE1My40bDMwLjQgMTBjLTEzLjIgNDAuMS0xNS41IDg3LjUtLjYgMTM0bC0zMC41IDkuOGMtMTcuMy01NC0xNC4zLTEwOC4zLjctMTUzLjh6XCJdLFwiYmFza2V0YmFsbC1iYWxsXCI6WzQ5Niw1MTIsW10sXCJmNDM0XCIsXCJNMjEyLjMgMTAuM2MtNDMuOCA2LjMtODYuMiAyNC4xLTEyMi4yIDUzLjhsNzcuNCA3Ny40YzI3LjgtMzUuOCA0My4zLTgxLjIgNDQuOC0xMzEuMnpNMjQ4IDIyMkw0MDUuOSA2NC4xYy00Mi40LTM1LTkzLjYtNTMuNS0xNDUuNS01Ni4xLTEuMiA2My45LTIxLjUgMTIyLjMtNTguNyAxNjcuN0wyNDggMjIyek01Ni4xIDk4LjFjLTI5LjcgMzYtNDcuNSA3OC40LTUzLjggMTIyLjIgNTAtMS41IDk1LjUtMTcgMTMxLjItNDQuOEw1Ni4xIDk4LjF6bTI3Mi4yIDIwNC4yYzQ1LjMtMzcuMSAxMDMuNy01Ny40IDE2Ny43LTU4LjctMi42LTUxLjktMjEuMS0xMDMuMS01Ni4xLTE0NS41TDI4MiAyNTZsNDYuMyA0Ni4zek0yNDggMjkwTDkwLjEgNDQ3LjljNDIuNCAzNC45IDkzLjYgNTMuNSAxNDUuNSA1Ni4xIDEuMy02NCAyMS42LTEyMi40IDU4LjctMTY3LjdMMjQ4IDI5MHptMTkxLjkgMTIzLjljMjkuNy0zNiA0Ny41LTc4LjQgNTMuOC0xMjIuMi01MC4xIDEuNi05NS41IDE3LjEtMTMxLjIgNDQuOGw3Ny40IDc3LjR6TTE2Ny43IDIwOS43QzEyMi4zIDI0Ni45IDYzLjkgMjY3LjMgMCAyNjguNGMyLjYgNTEuOSAyMS4xIDEwMy4xIDU2LjEgMTQ1LjVMMjE0IDI1NmwtNDYuMy00Ni4zem0xMTYgMjkyYzQzLjgtNi4zIDg2LjItMjQuMSAxMjIuMi01My44bC03Ny40LTc3LjRjLTI3LjcgMzUuNy00My4yIDgxLjItNDQuOCAxMzEuMnpcIl0sYmF0aDpbNTEyLDUxMixbXSxcImYyY2RcIixcIk00ODggMjU2SDgwVjExMmMwLTE3LjY0NSAxNC4zNTUtMzIgMzItMzIgMTEuMzUxIDAgMjEuMzMyIDUuOTQ1IDI3LjAxNSAxNC44OC0xNi40OTIgMjUuMjA3LTE0LjY4NyA1OS41NzYgNi44MzggODMuMDM1LTQuMTc2IDQuNzEzLTQuMDIxIDExLjkxNi40OTEgMTYuNDI4bDExLjMxNCAxMS4zMTRjNC42ODYgNC42ODYgMTIuMjg0IDQuNjg2IDE2Ljk3MSAwbDk1LjAzLTk1LjAyOWM0LjY4Ni00LjY4NiA0LjY4Ni0xMi4yODQgMC0xNi45NzFsLTExLjMxNC0xMS4zMTRjLTQuNTEyLTQuNTEyLTExLjcxNS00LjY2Ni0xNi40MjgtLjQ5MS0xNy45NDktMTYuNDY5LTQyLjI5NC0yMS40MjktNjQuMTc4LTE1LjM2NUMxNjMuMjgxIDQ1LjY2NyAxMzkuMjEyIDMyIDExMiAzMmMtNDQuMTEyIDAtODAgMzUuODg4LTgwIDgwdjE0NGgtOGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djE2YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGg4djMyYzAgMjguNDMgMTIuMzYyIDUzLjk2OSAzMiA3MS41NDdWNDU2YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxNmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LThoMjU2djhjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDE2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtMzIuNDUzYzE5LjYzOC0xNy41NzggMzItNDMuMTE3IDMyLTcxLjU0N3YtMzJoOGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTE2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpcIl0sXCJiYXR0ZXJ5LWVtcHR5XCI6WzY0MCw1MTIsW10sXCJmMjQ0XCIsXCJNNTQ0IDE2MHY2NGgzMnY2NGgtMzJ2NjRINjRWMTYwaDQ4MG0xNi02NEg0OGMtMjYuNTEgMC00OCAyMS40OS00OCA0OHYyMjRjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg1MTJjMjYuNTEgMCA0OC0yMS40OSA0OC00OHYtMTZoOGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMTg0YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNGgtOHYtMTZjMC0yNi41MS0yMS40OS00OC00OC00OHpcIl0sXCJiYXR0ZXJ5LWZ1bGxcIjpbNjQwLDUxMixbXSxcImYyNDBcIixcIk01NDQgMTYwdjY0aDMydjY0aC0zMnY2NEg2NFYxNjBoNDgwbTE2LTY0SDQ4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djIyNGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDUxMmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4di0xNmg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxODRjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0aC04di0xNmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0tNDggOTZIOTZ2MTI4aDQxNlYxOTJ6XCJdLFwiYmF0dGVyeS1oYWxmXCI6WzY0MCw1MTIsW10sXCJmMjQyXCIsXCJNNTQ0IDE2MHY2NGgzMnY2NGgtMzJ2NjRINjRWMTYwaDQ4MG0xNi02NEg0OGMtMjYuNTEgMC00OCAyMS40OS00OCA0OHYyMjRjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg1MTJjMjYuNTEgMCA0OC0yMS40OSA0OC00OHYtMTZoOGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMTg0YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNGgtOHYtMTZjMC0yNi41MS0yMS40OS00OC00OC00OHptLTI0MCA5Nkg5NnYxMjhoMjI0VjE5MnpcIl0sXCJiYXR0ZXJ5LXF1YXJ0ZXJcIjpbNjQwLDUxMixbXSxcImYyNDNcIixcIk01NDQgMTYwdjY0aDMydjY0aC0zMnY2NEg2NFYxNjBoNDgwbTE2LTY0SDQ4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djIyNGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDUxMmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4di0xNmg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxODRjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0aC04di0xNmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0tMzM2IDk2SDk2djEyOGgxMjhWMTkyelwiXSxcImJhdHRlcnktdGhyZWUtcXVhcnRlcnNcIjpbNjQwLDUxMixbXSxcImYyNDFcIixcIk01NDQgMTYwdjY0aDMydjY0aC0zMnY2NEg2NFYxNjBoNDgwbTE2LTY0SDQ4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djIyNGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDUxMmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4di0xNmg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxODRjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0aC04di0xNmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0tMTQ0IDk2SDk2djEyOGgzMjBWMTkyelwiXSxiZWQ6WzY0MCw1MTIsW10sXCJmMjM2XCIsXCJNMTc2IDI1NmM0NC4xMSAwIDgwLTM1Ljg5IDgwLTgwcy0zNS44OS04MC04MC04MC04MCAzNS44OS04MCA4MCAzNS44OSA4MCA4MCA4MHptMzUyLTEyOEgzMDRjLTguODQgMC0xNiA3LjE2LTE2IDE2djE0NEg2NFY4MGMwLTguODQtNy4xNi0xNi0xNi0xNkgxNkM3LjE2IDY0IDAgNzEuMTYgMCA4MHYzNTJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMzJjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTQ4aDUxMnY0OGMwIDguODQgNy4xNiAxNiAxNiAxNmgzMmM4Ljg0IDAgMTYtNy4xNiAxNi0xNlYyNDBjMC02MS44Ni01MC4xNC0xMTItMTEyLTExMnpcIl0sYmVlcjpbNDQ4LDUxMixbXSxcImYwZmNcIixcIk0zNjggOTZoLTQ4VjU2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgyNEMxMC43NDUgMzIgMCA0Mi43NDUgMCA1NnY0MDBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDI3MmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTQyLjExbDgwLjYwNi0zNS45NzdDNDI5LjM5NiAzNjUuMDYzIDQ0OCAzMzYuMzg4IDQ0OCAzMDQuODZWMTc2YzAtNDQuMTEyLTM1Ljg4OC04MC04MC04MHptMTYgMjA4Ljg2YTE2LjAxOCAxNi4wMTggMCAwIDEtOS40NzkgMTQuNjExTDMyMCAzNDMuODA1VjE2MGg0OGM4LjgyMiAwIDE2IDcuMTc4IDE2IDE2djEyOC44NnpNMjA4IDM4NGMtOC44MzYgMC0xNi03LjE2NC0xNi0xNlYxNDRjMC04LjgzNiA3LjE2NC0xNiAxNi0xNnMxNiA3LjE2NCAxNiAxNnYyMjRjMCA4LjgzNi03LjE2NCAxNi0xNiAxNnptLTk2IDBjLTguODM2IDAtMTYtNy4xNjQtMTYtMTZWMTQ0YzAtOC44MzYgNy4xNjQtMTYgMTYtMTZzMTYgNy4xNjQgMTYgMTZ2MjI0YzAgOC44MzYtNy4xNjQgMTYtMTYgMTZ6XCJdLGJlbGw6WzQ0OCw1MTIsW10sXCJmMGYzXCIsXCJNNDMzLjg4NCAzNjYuMDU5QzQxMS42MzQgMzQzLjgwOSAzODQgMzE2LjExOCAzODQgMjA4YzAtNzkuMzk0LTU3LjgzMS0xNDUuMjY5LTEzMy42NjMtMTU3LjgzQTMxLjg0NSAzMS44NDUgMCAwIDAgMjU2IDMyYzAtMTcuNjczLTE0LjMyNy0zMi0zMi0zMnMtMzIgMTQuMzI3LTMyIDMyYzAgNi43NSAyLjA5NSAxMy4wMDggNS42NjMgMTguMTdDMTIxLjgzMSA2Mi43MzEgNjQgMTI4LjYwNiA2NCAyMDhjMCAxMDguMTE4LTI3LjY0MyAxMzUuODA5LTQ5Ljg5MyAxNTguMDU5Qy0xNi4wNDIgMzk2LjIwOCA1LjMyNSA0NDggNDguMDQ4IDQ0OEgxNjBjMCAzNS4zNDYgMjguNjU0IDY0IDY0IDY0czY0LTI4LjY1NCA2NC02NGgxMTEuOTQzYzQyLjYzOCAwIDY0LjE1MS01MS43MzEgMzMuOTQxLTgxLjk0MXpNMjI0IDQ3MmE4IDggMCAwIDEgMCAxNmMtMjIuMDU2IDAtNDAtMTcuOTQ0LTQwLTQwaDE2YzAgMTMuMjM0IDEwLjc2NiAyNCAyNCAyNHpcIl0sXCJiZWxsLXNsYXNoXCI6WzU3Niw1MTIsW10sXCJmMWY2XCIsXCJNNzguMTA3IDM2Ni4wNTlDNDcuOTU4IDM5Ni4yMDggNjkuMzI1IDQ0OCAxMTIuMDQ4IDQ0OEgyMjRjMCAzNS4zNDYgMjguNjU0IDY0IDY0IDY0IDM1LjM0NiAwIDY0LTI4LjY1NCA2NC02NGgzMi42ODVMMTI3Ljg0OCAyMjEuMzc5Yy0yLjE5OCA5Ny4wNzgtMjguNDM5IDEyMy4zNzgtNDkuNzQxIDE0NC42OHpNMjY0IDQ0OGMwIDEzLjIzNCAxMC43NjYgMjQgMjQgMjRhOCA4IDAgMCAxIDAgMTZjLTIyLjA1NiAwLTQwLTE3Ljk0NC00MC00MGgxNnptMzA1Ljg5NiA0My43MzNsLTEwLjc2MiAxMi4wODZjLTguOTE1IDEwLjAxMi0yNC4zMzMgMTAuOTY3LTM0LjQzNyAyLjEzM0w4LjI1NiA1NC4zOTNDLTEuODQ4IDQ1LjU1OC0yLjgxMSAzMC4yOCA2LjEwNCAyMC4yNjdMMTYuODY1IDguMTgxQzI1Ljc4MS0xLjgzMSA0MS4xOTktMi43ODYgNTEuMzAzIDYuMDQ5bDExMy44MSA5OS41MTJjMjQuMDE3LTI4Ljc3OCA1Ny45NDYtNDguOTk2IDk2LjU1LTU1LjM5QTMxLjg1IDMxLjg1IDAgMCAxIDI1NiAzMmMwLTE3LjY3MyAxNC4zMjctMzIgMzItMzJzMzIgMTQuMzI3IDMyIDMyYzAgNi43NS0yLjA5NSAxMy4wMDgtNS42NjMgMTguMTdDMzkwLjE2OSA2Mi43MzEgNDQ4IDEyOC42MDYgNDQ4IDIwOGMwIDEwOC4xMTggMjcuNjM0IDEzNS44MDkgNDkuODg0IDE1OC4wNTkgMTIuMTQ5IDEyLjE0OSAxNS45MjMgMjcuNzc2IDEzLjMzIDQyLjEyMWw1Ni41MyA0OS40MjdjMTAuMTA0IDguODM1IDExLjA2NyAyNC4xMTMgMi4xNTIgMzQuMTI2elwiXSxcImJlemllci1jdXJ2ZVwiOls2NDAsNTEyLFtdLFwiZjU1YlwiLFwiTTM2OCAzMmgtOTZjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2OTZjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg5NmMxNy42NyAwIDMyLTE0LjMzIDMyLTMyVjY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6TTIwOCA4OGgtODQuNzVDMTEzLjc1IDY0LjU2IDkwLjg0IDQ4IDY0IDQ4IDI4LjY2IDQ4IDAgNzYuNjUgMCAxMTJzMjguNjYgNjQgNjQgNjRjMjYuODQgMCA0OS43NS0xNi41NiA1OS4yNS00MGg3OS43M2MtNTUuMzcgMzIuNTItOTUuODYgODcuMzItMTA5LjU0IDE1Mmg0OS40YzExLjMtNDEuNjEgMzYuNzctNzcuMjEgNzEuMDQtMTAxLjU2LTMuNy04LjA4LTUuODgtMTYuOTktNS44OC0yNi40NFY4OHptLTQ4IDIzMkg2NGMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY5NmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDk2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTk2YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6TTU3NiA0OGMtMjYuODQgMC00OS43NSAxNi41Ni01OS4yNSA0MEg0MzJ2NzJjMCA5LjQ1LTIuMTkgMTguMzYtNS44OCAyNi40NCAzNC4yNyAyNC4zNSA1OS43NCA1OS45NSA3MS4wNCAxMDEuNTZoNDkuNGMtMTMuNjgtNjQuNjgtNTQuMTctMTE5LjQ4LTEwOS41NC0xNTJoNzkuNzNjOS41IDIzLjQ0IDMyLjQxIDQwIDU5LjI1IDQwIDM1LjM0IDAgNjQtMjguNjUgNjQtNjRzLTI4LjY2LTY0LTY0LTY0em0wIDI3MmgtOTZjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2OTZjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg5NmMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi05NmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyelwiXSxiaWN5Y2xlOls2NDAsNTEyLFtdLFwiZjIwNlwiLFwiTTUxMi41MDkgMTkyLjAwMWMtMTYuMzczLS4wNjQtMzIuMDMgMi45NTUtNDYuNDM2IDguNDk1bC03Ny42OC0xMjUuMTUzQTI0IDI0IDAgMCAwIDM2OC4wMDEgNjRoLTY0Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djE2YzAgOC44MzcgNy4xNjMgMTYgMTYgMTZoNTAuNjQ5bDE0Ljg5NiAyNEgyNTYuMDAydi0xNmMwLTguODM3LTcuMTYzLTE2LTE2LTE2aC04Ny40NTljLTEzLjQ0MSAwLTI0Ljc3NyAxMC45OTktMjQuNTM2IDI0LjQzNy4yMzIgMTMuMDQ0IDEwLjg3NiAyMy41NjMgMjMuOTk1IDIzLjU2M2g0OC43MjZsLTI5LjQxNyA0Ny41MmMtMTMuNDMzLTQuODMtMjcuOTA0LTcuNDgzLTQyLjk5Mi03LjUyQzU4LjA5NCAxOTEuODMuNDEyIDI0OS4wMTIuMDAyIDMxOS4yMzYtLjQxMyAzOTAuMjc5IDU3LjA1NSA0NDggMTI4LjAwMiA0NDhjNTkuNjQyIDAgMTA5Ljc1OC00MC43OTMgMTIzLjk2Ny05Nmg1Mi4wMzNhMjQgMjQgMCAwIDAgMjAuNDA2LTExLjM2N0w0MTAuMzcgMjAxLjc3bDE0LjkzOCAyNC4wNjdjLTI1LjQ1NSAyMy40NDgtNDEuMzg1IDU3LjA4MS00MS4zMDcgOTQuNDM3LjE0NSA2OC44MzMgNTcuODk5IDEyNy4wNTEgMTI2LjcyOSAxMjcuNzE5IDcwLjYwNi42ODUgMTI4LjE4MS01NS44MDMgMTI5LjI1NS0xMjUuOTk2IDEuMDg2LTcwLjk0MS01Ni41MjYtMTI5LjcyLTEyNy40NzYtMTI5Ljk5NnpNMTg2Ljc1IDI2NS43NzJjOS43MjcgMTAuNTI5IDE2LjY3MyAyMy42NjEgMTkuNjQyIDM4LjIyOGgtNDMuMzA2bDIzLjY2NC0zOC4yMjh6TTEyOC4wMDIgNDAwYy00NC4xMTIgMC04MC0zNS44ODgtODAtODBzMzUuODg4LTgwIDgwLTgwYzUuODY5IDAgMTEuNTg2LjY1MyAxNy4wOTkgMS44NTlsLTQ1LjUwNSA3My41MDlDODkuNzE1IDMzMS4zMjcgMTAxLjIxMyAzNTIgMTIwLjAwMiAzNTJoODEuM2MtMTIuMzcgMjguMjI1LTQwLjU2MiA0OC03My4zIDQ4em0xNjIuNjMtOTZoLTM1LjYyNGMtMy45Ni0zMS43NTYtMTkuNTU2LTU5Ljg5NC00Mi4zODMtODAuMDI2TDIzNy4zNzEgMTg0aDEyNy41NDdsLTc0LjI4NiAxMjB6bTIxNy4wNTcgOTUuODg2Yy00MS4wMzYtMi4xNjUtNzQuMDQ5LTM1LjY5Mi03NS42MjctNzYuNzU1LS44MTItMjEuMTIxIDYuNjMzLTQwLjUxOCAxOS4zMzUtNTUuMjYzbDQ0LjQzMyA3MS41ODZjNC42NiA3LjUwOCAxNC41MjQgOS44MTYgMjIuMDMyIDUuMTU2bDEzLjU5NC04LjQzN2M3LjUwOC00LjY2IDkuODE3LTE0LjUyNCA1LjE1Ni0yMi4wMzJsLTQ0LjQ2OC03MS42NDNhNzkuOTAxIDc5LjkwMSAwIDAgMSAxOS44NTgtMi40OTdjNDQuMTEyIDAgODAgMzUuODg4IDgwIDgwLS4wMDEgNDUuNTQtMzguMjUyIDgyLjMxNi04NC4zMTMgNzkuODg1elwiXSxiaW5vY3VsYXJzOls1MTIsNTEyLFtdLFwiZjFlNVwiLFwiTTE5MiAxMDRIOTZWNTZjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDQ4YzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHY0OHptMjI0LTQ4YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNGgtNDhjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHY0OGg5NlY1NnpNMCA0NTZjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEyMGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTE2SDB2MTZ6bTg4LTMyOGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0QzY0IDI1NiAwIDI3MiAwIDQxNmgxNjhWMzEyYzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNFYxMjhIODh6bTI1NiAzMjhjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEyMGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTE2SDM0NHYxNnpNMjE2IDEyOHYxNjBoODBWMTI4aC04MHptMTI4IDI4OGgxNjhjMC0xNDQtNjQtMTYwLTY0LTI2NCAwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMzIwdjE2MGMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR2MTA0elwiXSxcImJpcnRoZGF5LWNha2VcIjpbNDQ4LDUxMixbXSxcImYxZmRcIixcIk00NDggMzg0Yy0yOC4wMiAwLTMxLjI2LTMyLTc0LjUtMzItNDMuNDMgMC00Ni44MjUgMzItNzQuNzUgMzItMjcuNjk1IDAtMzEuNDU0LTMyLTc0Ljc1LTMyLTQyLjg0MiAwLTQ3LjIxOCAzMi03NC41IDMyLTI4LjE0OCAwLTMxLjIwMi0zMi03NC43NS0zMi00My41NDcgMC00Ni42NTMgMzItNzQuNzUgMzJ2LTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDE2VjExMmg2NHYxNDRoNjRWMTEyaDY0djE0NGg2NFYxMTJoNjR2MTQ0aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djgwem0wIDEyOEgwdi05NmM0My4zNTYgMCA0Ni43NjctMzIgNzQuNzUtMzIgMjcuOTUxIDAgMzEuMjUzIDMyIDc0Ljc1IDMyIDQyLjg0MyAwIDQ3LjIxNy0zMiA3NC41LTMyIDI4LjE0OCAwIDMxLjIwMSAzMiA3NC43NSAzMiA0My4zNTcgMCA0Ni43NjctMzIgNzQuNzUtMzIgMjcuNDg4IDAgMzEuMjUyIDMyIDc0LjUgMzJ2OTZ6TTk2IDk2Yy0xNy43NSAwLTMyLTE0LjI1LTMyLTMyIDAtMzEgMzItMjMgMzItNjQgMTIgMCAzMiAyOS41IDMyIDU2cy0xNC4yNSA0MC0zMiA0MHptMTI4IDBjLTE3Ljc1IDAtMzItMTQuMjUtMzItMzIgMC0zMSAzMi0yMyAzMi02NCAxMiAwIDMyIDI5LjUgMzIgNTZzLTE0LjI1IDQwLTMyIDQwem0xMjggMGMtMTcuNzUgMC0zMi0xNC4yNS0zMi0zMiAwLTMxIDMyLTIzIDMyLTY0IDEyIDAgMzIgMjkuNSAzMiA1NnMtMTQuMjUgNDAtMzIgNDB6XCJdLGJsZW5kZXI6WzUxMiw1MTIsW10sXCJmNTE3XCIsXCJNNDE2IDM4NEgxNjBjLTM1LjM1IDAtNjQgMjguNjUtNjQgNjR2MzJjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmgzMjBjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtMzJjMC0zNS4zNS0yOC42NS02NC02NC02NHptLTEyOCA5NmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptNDAtNDE2aDE2Ni41NEw1MTIgMEg0OEMyMS40OSAwIDAgMjEuNDkgMCA0OHYxNjBjMCAyNi41MSAyMS40OSA0OCA0OCA0OGgxMDMuMjdsOC43MyA5NmgyNTZsMTcuNDYtNjRIMzI4Yy00LjQyIDAtOC0zLjU4LTgtOHYtMTZjMC00LjQyIDMuNTgtOCA4LThoMTE0LjE4bDE3LjQ2LTY0SDMyOGMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDE0MC4zNmwxNy40Ni02NEgzMjhjLTQuNDIgMC04LTMuNTgtOC04VjcyYzAtNC40MiAzLjU4LTggOC04ek02NCAxOTJWNjRoNjkuODJsMTEuNjQgMTI4SDY0elwiXSxibGluZDpbMzg0LDUxMixbXSxcImYyOWRcIixcIk0zODAuMTUgNTEwLjgzN2E4IDggMCAwIDEtMTAuOTg5LTIuNjg3bC0xMjUuMzMtMjA2LjQyN2EzMS45MjMgMzEuOTIzIDAgMCAwIDEyLjk1OC05LjQ4NWwxMjYuMDQ4IDIwNy42MDhhOCA4IDAgMCAxLTIuNjg3IDEwLjk5MXpNMTQyLjgwMyAzMTQuMzM4bC0zMi41NCA4OS40ODUgMzYuMTIgODguMjg1YzYuNjkzIDE2LjM2IDI1LjM3NyAyNC4xOTIgNDEuNzMzIDE3LjUwMSAxNi4zNTctNi42OTIgMjQuMTkzLTI1LjM3NiAxNy41MDEtNDEuNzM0bC02Mi44MTQtMTUzLjUzN3pNOTYgODhjMjQuMzAxIDAgNDQtMTkuNjk5IDQ0LTQ0UzEyMC4zMDEgMCA5NiAwIDUyIDE5LjY5OSA1MiA0NHMxOS42OTkgNDQgNDQgNDR6bTE1NC44MzcgMTY5LjEyOGwtMTIwLTE1MmMtNC43MzMtNS45OTUtMTEuNzUtOS4xMDgtMTguODM3LTkuMTEyVjk2SDgwdi4wMjZjLTcuMTQ2LjAwMy0xNC4yMTcgMy4xNjEtMTguOTQ0IDkuMjRMMCAxODMuNzY2djk1LjY5NGMwIDEzLjQ1NSAxMS4wMTEgMjQuNzkxIDI0LjQ2NCAyNC41MzZDMzcuNTA1IDMwMy43NDggNDggMjkzLjEgNDggMjgwdi03OS43NjZsMTYtMjAuNTcxdjE0MC42OThMOS45MjcgNDY5LjA1NWMtNi4wNCAxNi42MDkgMi41MjggMzQuOTY5IDE5LjEzOCA0MS4wMDkgMTYuNjAyIDYuMDM5IDM0Ljk2OC0yLjUyNCA0MS4wMDktMTkuMTM4TDEzNiAzMDkuNjM4VjIwMi40NDFsLTMxLjQwNi0zOS44MTZhNCA0IDAgMSAxIDYuMjY5LTQuOTcxbDEwMi4zIDEyOS4yMTdjOS4xNDUgMTEuNTg0IDI0LjM2OCAxMS4zMzkgMzMuNzA4IDMuOTY1IDEwLjQxLTguMjE2IDEyLjE1OS0yMy4zMzQgMy45NjYtMzMuNzA4elwiXSxib2xkOlszODQsNTEyLFtdLFwiZjAzMlwiLFwiTTMwNC43OTMgMjQzLjg5MWMzMy42MzktMTguNTM3IDUzLjY1Ny01NC4xNiA1My42NTctOTUuNjkzIDAtNDguMjM2LTI2LjI1LTg3LjYyNi02OC42MjYtMTA0LjE3OUMyNjUuMTM4IDM0LjAxIDI0MC44NDkgMzIgMjA5LjY2MSAzMkgyNGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMy4wNDljMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgzMy4xMTN2MzE4LjUzSDI0Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2VjQ2NGMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDE5NS42OWMyNC4yMDMgMCA0NC44MzQtMS4yODkgNjYuODY2LTcuNTg0QzMzNy41MiA0NTcuMTkzIDM3NiA0MTAuNjQ3IDM3NiAzNTAuMDE0YzAtNTIuMTY4LTI2LjU3My05MS42ODQtNzEuMjA3LTEwNi4xMjN6TTE0Mi4yMTcgMTAwLjgwOWg2Ny40NDRjMTYuMjk0IDAgMjcuNTM2IDIuMDE5IDM3LjUyNSA2LjcxNyAxNS44MjggOC40NzkgMjQuOTA2IDI2LjUwMiAyNC45MDYgNDkuNDQ2IDAgMzUuMDI5LTIwLjMyIDU2Ljc5LTUzLjAyOSA1Ni43OWgtNzYuODQ2VjEwMC44MDl6bTExMi42NDIgMzA1LjQ3NWMtMTAuMTQgNC4wNTYtMjIuNjc3IDQuOTA3LTMxLjQwOSA0LjkwN2gtODEuMjMzVjI4MS45NDNoODQuMzY3YzM5LjY0NSAwIDYzLjA1NyAyNS4zOCA2My4wNTcgNjMuMDU3LjAwMSAyOC40MjUtMTMuNjYgNTIuNDgzLTM0Ljc4MiA2MS4yODR6XCJdLGJvbHQ6WzMyMCw1MTIsW10sXCJmMGU3XCIsXCJNMjk1Ljk3MyAxNjBIMTgwLjU3MkwyMTUuMTkgMzAuMTg0QzIxOS4yNSAxNC45NTYgMjA3Ljc1NiAwIDE5MiAwSDU2QzQzLjk3MSAwIDMzLjggOC45MDUgMzIuMjExIDIwLjgyOGwtMzEuOTk2IDI0MEMtMS43MDQgMjc1LjIxNyA5LjUwNCAyODggMjQuMDA0IDI4OGgxMTguNzAxTDk2LjY0NiA0ODIuNDY2QzkzLjA1IDQ5Ny42NDkgMTA0LjY1OSA1MTIgMTE5Ljk5MiA1MTJjOC4zNSAwIDE2LjM3Ni00LjM3NCAyMC43NzgtMTEuOTc4bDE3NS45NzMtMzAzLjk5N2M5LjI0NC0xNS45NjctMi4yODgtMzYuMDI1LTIwLjc3LTM2LjAyNXpcIl0sYm9tYjpbNTEyLDUxMixbXSxcImYxZTJcIixcIk00NDAuNSA4OC41bC01MiA1Mkw0MTUgMTY3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0xNy40IDE3LjRjMTEuOCAyNi4xIDE4LjQgNTUuMSAxOC40IDg1LjYgMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzAgNDE4LjkgMCAzMDQgOTMuMSA5NiAyMDggOTZjMzAuNSAwIDU5LjUgNi42IDg1LjYgMTguNEwzMTEgOTdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjYuNSAyNi41IDUyLTUyIDE3LjEgMTd6TTUwMCA2MGgtMjRjLTYuNiAwLTEyIDUuNC0xMiAxMnM1LjQgMTIgMTIgMTJoMjRjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJ6TTQ0MCAwYy02LjYgMC0xMiA1LjQtMTIgMTJ2MjRjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMlYxMmMwLTYuNi01LjQtMTItMTItMTJ6bTMzLjkgNTVsMTctMTdjNC43LTQuNyA0LjctMTIuMyAwLTE3LTQuNy00LjctMTIuMy00LjctMTcgMGwtMTcgMTdjLTQuNyA0LjctNC43IDEyLjMgMCAxNyA0LjggNC43IDEyLjQgNC43IDE3IDB6bS02Ny44IDBjNC43IDQuNyAxMi4zIDQuNyAxNyAwIDQuNy00LjcgNC43LTEyLjMgMC0xN2wtMTctMTdjLTQuNy00LjctMTIuMy00LjctMTcgMC00LjcgNC43LTQuNyAxMi4zIDAgMTdsMTcgMTd6bTY3LjggMzRjLTQuNy00LjctMTIuMy00LjctMTcgMC00LjcgNC43LTQuNyAxMi4zIDAgMTdsMTcgMTdjNC43IDQuNyAxMi4zIDQuNyAxNyAwIDQuNy00LjcgNC43LTEyLjMgMC0xN2wtMTctMTd6TTExMiAyNzJjMC0zNS4zIDI4LjctNjQgNjQtNjQgOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZjLTUyLjkgMC05NiA0My4xLTk2IDk2IDAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6XCJdLGJvbmc6WzQ0OCw1MTIsW10sXCJmNTVjXCIsXCJNMzAyLjUgNTEyYzIzLjE4IDAgNDQuNDMtMTIuNTggNTYtMzIuNjZDMzc0LjY5IDQ1MS4yNiAzODQgNDE4Ljc1IDM4NCAzODRjMC0zNi4xMi0xMC4wOC02OS44MS0yNy40NC05OC42Mkw0MDAgMjQxLjk0bDkuMzggOS4zOGM2LjI1IDYuMjUgMTYuMzggNi4yNSAyMi42MyAwbDExLjMtMTEuMzJjNi4yNS02LjI1IDYuMjUtMTYuMzggMC0yMi42M2wtNTIuNjktNTIuNjljLTYuMjUtNi4yNS0xNi4zOC02LjI1LTIyLjYzIDBsLTExLjMxIDExLjMxYy02LjI1IDYuMjUtNi4yNSAxNi4zOCAwIDIyLjYzbDkuMzggOS4zOC0zOS40MSAzOS40MWMtMTEuNTYtMTEuMzctMjQuNTMtMjEuMzMtMzguNjUtMjkuNTFWNjMuNzRsMTUuOTctLjAyYzguODItLjAxIDE1Ljk3LTcuMTYgMTUuOTgtMTUuOThsLjA0LTMxLjcyQzMyMCA3LjE3IDMxMi44Mi0uMDEgMzAzLjk3IDBMODAuMDMuMjZjLTguODIuMDEtMTUuOTcgNy4xNi0xNS45OCAxNS45OGwtLjA0IDMxLjczYy0uMDEgOC44NSA3LjE3IDE2LjAyIDE2LjAyIDE2LjAxTDk2IDYzLjk2djE1My45M0MzOC42NyAyNTEuMSAwIDMxMi45NyAwIDM4NGMwIDM0Ljc1IDkuMzEgNjcuMjcgMjUuNSA5NS4zNEMzNy4wOCA0OTkuNDIgNTguMzMgNTEyIDgxLjUgNTEyaDIyMXpNMTIwLjA2IDI1OS40M0wxNDQgMjQ1LjU2VjYzLjkxbDk2LS4xMXYxODEuNzZsMjMuOTQgMTMuODdjMjQuODEgMTQuMzcgNDQuMTIgMzUuNzMgNTYuNTYgNjAuNTdoLTI1N2MxMi40NS0yNC44NCAzMS43NS00Ni4yIDU2LjU2LTYwLjU3elwiXSxib29rOls0NDgsNTEyLFtdLFwiZjAyZFwiLFwiTTQ0OCAzNjBWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRIOTZDNDMgMCAwIDQzIDAgOTZ2MzIwYzAgNTMgNDMgOTYgOTYgOTZoMzI4YzEzLjMgMCAyNC0xMC43IDI0LTI0di0xNmMwLTcuNS0zLjUtMTQuMy04LjktMTguNy00LjItMTUuNC00LjItNTkuMyAwLTc0LjcgNS40LTQuMyA4LjktMTEuMSA4LjktMTguNnpNMTI4IDEzNGMwLTMuMyAyLjctNiA2LTZoMjEyYzMuMyAwIDYgMi43IDYgNnYyMGMwIDMuMy0yLjcgNi02IDZIMTM0Yy0zLjMgMC02LTIuNy02LTZ2LTIwem0wIDY0YzAtMy4zIDIuNy02IDYtNmgyMTJjMy4zIDAgNiAyLjcgNiA2djIwYzAgMy4zLTIuNyA2LTYgNkgxMzRjLTMuMyAwLTYtMi43LTYtNnYtMjB6bTI1My40IDI1MEg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC0xNy42IDE0LjQtMzIgMzItMzJoMjg1LjRjLTEuOSAxNy4xLTEuOSA0Ni45IDAgNjR6XCJdLFwiYm9vay1vcGVuXCI6WzU3Niw1MTIsW10sXCJmNTE4XCIsXCJNNTQyLjIyIDMyLjA1Yy01NC44IDMuMTEtMTYzLjcyIDE0LjQzLTIzMC45NiA1NS41OS00LjY0IDIuODQtNy4yNyA3Ljg5LTcuMjcgMTMuMTd2MzYzLjg3YzAgMTEuNTUgMTIuNjMgMTguODUgMjMuMjggMTMuNDkgNjkuMTgtMzQuODIgMTY5LjIzLTQ0LjMyIDIxOC43LTQ2LjkyIDE2Ljg5LS44OSAzMC4wMi0xNC40MyAzMC4wMi0zMC42NlY2Mi43NWMuMDEtMTcuNzEtMTUuMzUtMzEuNzQtMzMuNzctMzAuN3pNMjY0LjczIDg3LjY0QzE5Ny41IDQ2LjQ4IDg4LjU4IDM1LjE3IDMzLjc4IDMyLjA1IDE1LjM2IDMxLjAxIDAgNDUuMDQgMCA2Mi43NVY0MDAuNmMwIDE2LjI0IDEzLjEzIDI5Ljc4IDMwLjAyIDMwLjY2IDQ5LjQ5IDIuNiAxNDkuNTkgMTIuMTEgMjE4Ljc3IDQ2Ljk1IDEwLjYyIDUuMzUgMjMuMjEtMS45NCAyMy4yMS0xMy40NlYxMDAuNjNjMC01LjI5LTIuNjItMTAuMTQtNy4yNy0xMi45OXpcIl0sYm9va21hcms6WzM4NCw1MTIsW10sXCJmMDJlXCIsXCJNMCA1MTJWNDhDMCAyMS40OSAyMS40OSAwIDQ4IDBoMjg4YzI2LjUxIDAgNDggMjEuNDkgNDggNDh2NDY0TDE5MiA0MDAgMCA1MTJ6XCJdLFwiYm93bGluZy1iYWxsXCI6WzQ5Niw1MTIsW10sXCJmNDM2XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHpNMTIwIDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTY0LTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyem00OCAxNDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyelwiXSxib3g6WzUxMiw1MTIsW10sXCJmNDY2XCIsXCJNNTA5LjUgMTg0LjZMNDU4LjkgMzIuOEM0NTIuNCAxMy4yIDQzNC4xIDAgNDEzLjQgMEgyNzJ2MTkyaDIzOC43Yy0uNC0yLjUtLjQtNS0xLjItNy40ek0yNDAgMEg5OC42Yy0yMC43IDAtMzkgMTMuMi00NS41IDMyLjhMMi41IDE4NC42Yy0uOCAyLjQtLjggNC45LTEuMiA3LjRIMjQwVjB6TTAgMjI0djI0MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjI0SDB6XCJdLFwiYm94LW9wZW5cIjpbNjQwLDUxMixbXSxcImY0OWVcIixcIk01My4yIDQxTDEuNyAxNDMuOGMtNC42IDkuMi4zIDIwLjIgMTAuMSAyM2wxOTcuOSA1Ni41YzcuMSAyIDE0LjctMSAxOC41LTcuM0wzMjAgNjQgNjkuOCAzMi4xYy02LjktLjgtMTMuNSAyLjctMTYuNiA4Ljl6bTU4NS4xIDEwMi44TDU4Ni44IDQxYy0zLjEtNi4yLTkuOC05LjgtMTYuNy04LjlMMzIwIDY0bDkxLjcgMTUyLjFjMy44IDYuMyAxMS40IDkuMyAxOC41IDcuM2wxOTcuOS01Ni41YzkuOS0yLjkgMTQuNy0xMy45IDEwLjItMjMuMXpNNDI1LjcgMjU2Yy0xNi45IDAtMzIuOC05LTQxLjQtMjMuNEwzMjAgMTI2bC02NC4yIDEwNi42Yy04LjcgMTQuNS0yNC42IDIzLjUtNDEuNSAyMy41LTQuNSAwLTktLjYtMTMuMy0xLjlMNjQgMjE1djE3OGMwIDE0LjcgMTAgMjcuNSAyNC4yIDMxbDIxNi4yIDU0LjFjMTAuMiAyLjUgMjAuOSAyLjUgMzEgMEw1NTEuOCA0MjRjMTQuMi0zLjYgMjQuMi0xNi40IDI0LjItMzFWMjE1bC0xMzcgMzkuMWMtNC4zIDEuMy04LjggMS45LTEzLjMgMS45elwiXSxib3hlczpbNTc2LDUxMixbXSxcImY0NjhcIixcIk01NjAgMjg4aC04MHY5NmwtMzItMjEuMy0zMiAyMS4zdi05NmgtODBjLTguOCAwLTE2IDcuMi0xNiAxNnYxOTJjMCA4LjggNy4yIDE2IDE2IDE2aDIyNGM4LjggMCAxNi03LjIgMTYtMTZWMzA0YzAtOC44LTcuMi0xNi0xNi0xNnptLTM4NC02NGgyMjRjOC44IDAgMTYtNy4yIDE2LTE2VjE2YzAtOC44LTcuMi0xNi0xNi0xNmgtODB2OTZsLTMyLTIxLjNMMjU2IDk2VjBoLTgwYy04LjggMC0xNiA3LjItMTYgMTZ2MTkyYzAgOC44IDcuMiAxNiAxNiAxNnptNjQgNjRoLTgwdjk2bC0zMi0yMS4zTDk2IDM4NHYtOTZIMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYxOTJjMCA4LjggNy4yIDE2IDE2IDE2aDIyNGM4LjggMCAxNi03LjIgMTYtMTZWMzA0YzAtOC44LTcuMi0xNi0xNi0xNnpcIl0sYnJhaWxsZTpbNjQwLDUxMixbXSxcImYyYTFcIixcIk0xMjggMjU2YzAgMzUuMzQ2LTI4LjY1NCA2NC02NCA2NFMwIDI5MS4zNDYgMCAyNTZzMjguNjU0LTY0IDY0LTY0IDY0IDI4LjY1NCA2NCA2NHpNNjQgMzg0Yy0xNy42NzMgMC0zMiAxNC4zMjctMzIgMzJzMTQuMzI3IDMyIDMyIDMyIDMyLTE0LjMyNyAzMi0zMi0xNC4zMjctMzItMzItMzJ6bTAtMzUyQzI4LjY1NCAzMiAwIDYwLjY1NCAwIDk2czI4LjY1NCA2NCA2NCA2NCA2NC0yOC42NTQgNjQtNjQtMjguNjU0LTY0LTY0LTY0em0xNjAgMTkyYy0xNy42NzMgMC0zMiAxNC4zMjctMzIgMzJzMTQuMzI3IDMyIDMyIDMyIDMyLTE0LjMyNyAzMi0zMi0xNC4zMjctMzItMzItMzJ6bTAgMTYwYy0xNy42NzMgMC0zMiAxNC4zMjctMzIgMzJzMTQuMzI3IDMyIDMyIDMyIDMyLTE0LjMyNyAzMi0zMi0xNC4zMjctMzItMzItMzJ6bTAtMzUyYy0zNS4zNDYgMC02NCAyOC42NTQtNjQgNjRzMjguNjU0IDY0IDY0IDY0IDY0LTI4LjY1NCA2NC02NC0yOC42NTQtNjQtNjQtNjR6bTIyNCAxOTJjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMnMxNC4zMjcgMzIgMzIgMzIgMzItMTQuMzI3IDMyLTMyLTE0LjMyNy0zMi0zMi0zMnptMCAxNjBjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMnMxNC4zMjcgMzIgMzIgMzIgMzItMTQuMzI3IDMyLTMyLTE0LjMyNy0zMi0zMi0zMnptMC0zNTJjLTM1LjM0NiAwLTY0IDI4LjY1NC02NCA2NHMyOC42NTQgNjQgNjQgNjQgNjQtMjguNjU0IDY0LTY0LTI4LjY1NC02NC02NC02NHptMTYwIDE5MmMtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMyczE0LjMyNyAzMiAzMiAzMiAzMi0xNC4zMjcgMzItMzItMTQuMzI3LTMyLTMyLTMyem0wIDE2MGMtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMyczE0LjMyNyAzMiAzMiAzMiAzMi0xNC4zMjcgMzItMzItMTQuMzI3LTMyLTMyLTMyem0wLTMyMGMtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMyczE0LjMyNyAzMiAzMiAzMiAzMi0xNC4zMjcgMzItMzItMTQuMzI3LTMyLTMyLTMyelwiXSxicmllZmNhc2U6WzUxMiw1MTIsW10sXCJmMGIxXCIsXCJNMzIwIDI4OGgxOTJ2MTQ0YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWMjg4aDE5MnYyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDEwNGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0yMHptMTkyLTExMnY4MEgwdi04MGMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDgwVjgwYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMTYwYzI2LjUxIDAgNDggMjEuNDkgNDggNDh2NDhoODBjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHpNMzIwIDk2SDE5MnYzMmgxMjhWOTZ6XCJdLFwiYnJpZWZjYXNlLW1lZGljYWxcIjpbNTEyLDUxMixbXSxcImY0NjlcIixcIk00NjQgMTI4aC04MFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEgxNzZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djQ4SDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHYyODhjMCAyNi41IDIxLjUgNDggNDggNDhoNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjE3NmMwLTI2LjUtMjEuNS00OC00OC00OHpNMTkyIDk2aDEyOHYzMkgxOTJWOTZ6bTE2MCAyNDhjMCA0LjQtMy42IDgtOCA4aC01NnY1NmMwIDQuNC0zLjYgOC04IDhoLTQ4Yy00LjQgMC04LTMuNi04LTh2LTU2aC01NmMtNC40IDAtOC0zLjYtOC04di00OGMwLTQuNCAzLjYtOCA4LThoNTZ2LTU2YzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2NTZoNTZjNC40IDAgOCAzLjYgOCA4djQ4elwiXSxcImJyb2FkY2FzdC10b3dlclwiOls2NDAsNTEyLFtdLFwiZjUxOVwiLFwiTTE1MC45NCAxOTJoMzMuNzNjMTEuMDEgMCAxOC42MS0xMC44MyAxNC44Ni0yMS4xOC00LjkzLTEzLjU4LTcuNTUtMjcuOTgtNy41NS00Mi44MnMyLjYyLTI5LjI0IDcuNTUtNDIuODJDMjAzLjI5IDc0LjgzIDE5NS42OCA2NCAxODQuNjcgNjRoLTMzLjczYy03LjAxIDAtMTMuNDYgNC40OS0xNS40MSAxMS4yM0MxMzAuNjQgOTIuMjEgMTI4IDEwOS44OCAxMjggMTI4YzAgMTguMTIgMi42NCAzNS43OSA3LjU0IDUyLjc2IDEuOTQgNi43NCA4LjM5IDExLjI0IDE1LjQgMTEuMjR6TTg5LjkyIDIzLjM0Qzk1LjU2IDEyLjcyIDg3Ljk3IDAgNzUuOTYgMEg0MC42M2MtNi4yNyAwLTEyLjE0IDMuNTktMTQuNzQgOS4zMUM5LjQgNDUuNTQgMCA4NS42NSAwIDEyOGMwIDI0Ljc1IDMuMTIgNjguMzMgMjYuNjkgMTE4Ljg2IDIuNjIgNS42MyA4LjQyIDkuMTQgMTQuNjEgOS4xNGgzNC44NGMxMi4wMiAwIDE5LjYxLTEyLjc0IDEzLjk1LTIzLjM3LTQ5Ljc4LTkzLjMyLTE2LjcxLTE3OC4xNS0uMTctMjA5LjI5ek02MTQuMDYgOS4yOUM2MTEuNDYgMy41OCA2MDUuNiAwIDU5OS4zMyAwaC0zNS40MmMtMTEuOTggMC0xOS42NiAxMi42Ni0xNC4wMiAyMy4yNSAxOC4yNyAzNC4yOSA0OC40MiAxMTkuNDIuMjggMjA5LjIzLTUuNzIgMTAuNjggMS44IDIzLjUyIDEzLjkxIDIzLjUyaDM1LjIzYzYuMjcgMCAxMi4xMy0zLjU4IDE0LjczLTkuMjlDNjMwLjU3IDIxMC40OCA2NDAgMTcwLjM2IDY0MCAxMjhzLTkuNDItODIuNDgtMjUuOTQtMTE4Ljcxek00ODkuMDYgNjRoLTMzLjczYy0xMS4wMSAwLTE4LjYxIDEwLjgzLTE0Ljg2IDIxLjE4IDQuOTMgMTMuNTggNy41NSAyNy45OCA3LjU1IDQyLjgycy0yLjYyIDI5LjI0LTcuNTUgNDIuODJjLTMuNzYgMTAuMzUgMy44NSAyMS4xOCAxNC44NiAyMS4xOGgzMy43M2M3LjAyIDAgMTMuNDYtNC40OSAxNS40MS0xMS4yNCA0LjktMTYuOTcgNy41My0zNC42NCA3LjUzLTUyLjc2IDAtMTguMTItMi42NC0zNS43OS03LjU0LTUyLjc2LTEuOTQtNi43NS04LjM5LTExLjI0LTE1LjQtMTEuMjR6bS0xMTYuMyAxMDAuMTJjNy4wNS0xMC4yOSAxMS4yLTIyLjcxIDExLjItMzYuMTIgMC0zNS4zNS0yOC42My02NC02My45Ni02NC0zNS4zMiAwLTYzLjk2IDI4LjY1LTYzLjk2IDY0IDAgMTMuNDEgNC4xNSAyNS44MyAxMS4yIDM2LjEybC0xMzAuNSAzMTMuNDFjLTMuNCA4LjE1LjQ2IDE3LjUyIDguNjEgMjAuOTJsMjkuNTEgMTIuMzFjOC4xNSAzLjQgMTcuNTItLjQ2IDIwLjkxLTguNjFMMjQ0Ljk2IDM4NGgxNTAuMDdsNDkuMiAxMTguMTVjMy40IDguMTYgMTIuNzYgMTIuMDEgMjAuOTEgOC42MWwyOS41MS0xMi4zMWM4LjE1LTMuNCAxMi0xMi43NyA4LjYxLTIwLjkybC0xMzAuNS0zMTMuNDF6TTI3MS42MiAzMjBMMzIwIDIwMy44MSAzNjguMzggMzIwaC05Ni43NnpcIl0sYnJvb206WzUxMiw1MTIsW10sXCJmNTFhXCIsXCJNMTAuOCAyNDcuMkMtLjcgMjUxLjgtMy43IDI2Ni43IDUgMjc1LjRsNTQuOCA1NC44IDczLjItMjQuNC0yNC40IDczLjIgMTI4IDEyOGM4LjggOC44IDIzLjYgNS43IDI4LjItNS44bDk4LjEtMjQzLjctMTA4LjQtMTA4LjQtMjQzLjcgOTguMXpNNTA3LjMgMjcuM0w0ODQuNyA0LjdjLTYuMi02LjMtMTYuNC02LjMtMjIuNiAwTDM1OS44IDEwNi45bC00MC40LTQwLjRjLTQuMi00LjMtMTEuNC0zLTEzLjkgMi41bC0yNy4yIDU4LjYgMTA2LjEgMTA2LjEgNTguNi0yNy4yYzUuNC0yLjUgNi43LTkuNyAyLjUtMTMuOWwtNDAuNC00MC40TDUwNy4zIDQ5LjljNi4zLTYuMiA2LjMtMTYuMyAwLTIyLjZ6XCJdLGJydXNoOlszODQsNTEyLFtdLFwiZjU1ZFwiLFwiTTM1MiAwSDMyQzE0LjMzIDAgMCAxNC4zMyAwIDMydjIyNGgzODRWMzJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpNMCAzMjBjMCAzNS4zNSAyOC42NiA2NCA2NCA2NGg2NHY2NGMwIDM1LjM1IDI4LjY2IDY0IDY0IDY0czY0LTI4LjY1IDY0LTY0di02NGg2NGMzNS4zNCAwIDY0LTI4LjY1IDY0LTY0di0zMkgwdjMyem0xOTIgMTA0YzEzLjI1IDAgMjQgMTAuNzQgMjQgMjQgMCAxMy4yNS0xMC43NSAyNC0yNCAyNHMtMjQtMTAuNzUtMjQtMjRjMC0xMy4yNiAxMC43NS0yNCAyNC0yNHpcIl0sYnVnOls1MTIsNTEyLFtdLFwiZjE4OFwiLFwiTTUxMS45ODggMjg4LjljLS40NzggMTcuNDMtMTUuMjE3IDMxLjEtMzIuNjUzIDMxLjFINDI0djE2YzAgMjEuODY0LTQuODgyIDQyLjU4NC0xMy42IDYxLjE0NWw2MC4yMjggNjAuMjI4YzEyLjQ5NiAxMi40OTcgMTIuNDk2IDMyLjc1OCAwIDQ1LjI1NS0xMi40OTggMTIuNDk3LTMyLjc1OSAxMi40OTYtNDUuMjU2IDBsLTU0LjczNi01NC43MzZDMzQ1Ljg4NiA0NjcuOTY1IDMxNC4zNTEgNDgwIDI4MCA0ODBWMjM2YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTI0Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0NGMtMzQuMzUxIDAtNjUuODg2LTEyLjAzNS05MC42MzYtMzIuMTA4bC01NC43MzYgNTQuNzM2Yy0xMi40OTggMTIuNDk3LTMyLjc1OSAxMi40OTYtNDUuMjU2IDAtMTIuNDk2LTEyLjQ5Ny0xMi40OTYtMzIuNzU4IDAtNDUuMjU1bDYwLjIyOC02MC4yMjhDOTIuODgyIDM3OC41ODQgODggMzU3Ljg2NCA4OCAzMzZ2LTE2SDMyLjY2NkMxNS4yMyAzMjAgLjQ5MSAzMDYuMzMuMDEzIDI4OC45LS40ODQgMjcwLjgxNiAxNC4wMjggMjU2IDMyIDI1Nmg1NnYtNTguNzQ1bC00Ni42MjgtNDYuNjI4Yy0xMi40OTYtMTIuNDk3LTEyLjQ5Ni0zMi43NTggMC00NS4yNTUgMTIuNDk4LTEyLjQ5NyAzMi43NTgtMTIuNDk3IDQ1LjI1NiAwTDE0MS4yNTUgMTYwaDIyOS40ODlsNTQuNjI3LTU0LjYyN2MxMi40OTgtMTIuNDk3IDMyLjc1OC0xMi40OTcgNDUuMjU2IDAgMTIuNDk2IDEyLjQ5NyAxMi40OTYgMzIuNzU4IDAgNDUuMjU1TDQyNCAxOTcuMjU1VjI1Nmg1NmMxNy45NzIgMCAzMi40ODQgMTQuODE2IDMxLjk4OCAzMi45ek0yNTcgMGMtNjEuODU2IDAtMTEyIDUwLjE0NC0xMTIgMTEyaDIyNEMzNjkgNTAuMTQ0IDMxOC44NTYgMCAyNTcgMHpcIl0sYnVpbGRpbmc6WzQ0OCw1MTIsW10sXCJmMWFkXCIsXCJNNDM2IDQ4MGgtMjBWMjRjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDU2QzQyLjc0NSAwIDMyIDEwLjc0NSAzMiAyNHY0NTZIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjBoNDQ4di0yMGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyek0xMjggNzZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjQwYzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTQwYy02LjYyNyAwLTEyLTUuMzczLTEyLTEyVjc2em0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNDBjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY0MGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC00MGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtNDB6bTUyIDE0OGgtNDBjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTQwYzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNDBjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY0MGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyem03NiAxNjBoLTY0di04NGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDQwYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2ODR6bTY0LTE3MmMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC00MGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtNDBjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjQwem0wLTk2YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTQwYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi00MGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDQwYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2NDB6bTAtOTZjMCA2LjYyNy01LjM3MyAxMi0xMiAxMmgtNDBjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJWNzZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjQwelwiXSxidWxsaG9ybjpbNTc2LDUxMixbXSxcImYwYTFcIixcIk01NzYgMjI0YzAtMjAuODk2LTEzLjM2LTM4LjY2Ni0zMi00NS4yNThWNjRjMC0zNS4zNDYtMjguNjU0LTY0LTY0LTY0LTY0Ljk4NSA1Ni0xNDIuMDMxIDEyOC0yNzIgMTI4SDQ4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djk2YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDMuMjYzYy0xOC43NDIgNjQuNjUgMi40NzkgMTE2LjM3OSAxOC44MTQgMTY3LjQ0IDEuNzAyIDUuMzIgNS4yMDMgOS44OTMgOS45MjIgMTIuODggMjAuNzggMTMuMTU1IDY4LjM1NSAxNS42NTcgOTMuNzczIDUuMTUxIDE2LjA0Ni02LjYzMyAxOS45Ni0yNy40MjMgNy41MjItMzkuNTM3LTE4LjUwOC0xOC4wMjYtMzAuMTM2LTM2LjkxLTE5Ljc5NS02MC44NThhMTIuMjc4IDEyLjI3OCAwIDAgMC0xLjA0NS0xMS42NzNjLTE2LjMwOS0yNC42NzktMy41ODEtNjIuMTA3IDI4LjUxNy03Mi43NTJDMzQ2LjQwMyAzMjcuODg3IDQxOC41OTEgMzk1LjA4MSA0ODAgNDQ4YzM1LjM0NiAwIDY0LTI4LjY1NCA2NC02NFYyNjkuMjU4YzE4LjY0LTYuNTkyIDMyLTI0LjM2MiAzMi00NS4yNTh6bS05NiAxMzkuODU1Yy01NC42MDktNDQuOTc5LTEyNS4wMzMtOTIuOTQtMjI0LTEwNC45ODJ2LTY5Ljc0N2M5OC45NjctMTIuMDQyIDE2OS4zOTEtNjAuMDAyIDIyNC0xMDQuOTgydjI3OS43MTF6XCJdLGJ1bGxzZXllOls1MTIsNTEyLFtdLFwiZjE0MFwiLFwiTTI1NiA3MmMxMDEuNjg5IDAgMTg0IDgyLjI5NSAxODQgMTg0IDAgMTAxLjY4OS04Mi4yOTUgMTg0LTE4NCAxODQtMTAxLjY4OSAwLTE4NC04Mi4yOTUtMTg0LTE4NCAwLTEwMS42ODkgODIuMjk1LTE4NCAxODQtMTg0bTAtNjRDMTE5LjAzMyA4IDggMTE5LjAzMyA4IDI1NnMxMTEuMDMzIDI0OCAyNDggMjQ4IDI0OC0xMTEuMDMzIDI0OC0yNDhTMzkyLjk2NyA4IDI1NiA4em0wIDE4NGMzNS4yOSAwIDY0IDI4LjcxIDY0IDY0cy0yOC43MSA2NC02NCA2NC02NC0yOC43MS02NC02NCAyOC43MS02NCA2NC02NG0wLTY0Yy03MC42OTIgMC0xMjggNTcuMzA4LTEyOCAxMjhzNTcuMzA4IDEyOCAxMjggMTI4IDEyOC01Ny4zMDggMTI4LTEyOC01Ny4zMDgtMTI4LTEyOC0xMjh6XCJdLGJ1cm46WzM4NCw1MTIsW10sXCJmNDZhXCIsXCJNMTkyIDBDNzkuNyAxMDEuMyAwIDIyMC45IDAgMzAwLjUgMCA0MjUgNzkgNTEyIDE5MiA1MTJzMTkyLTg3IDE5Mi0yMTEuNWMwLTc5LjktODAuMi0xOTkuNi0xOTItMzAwLjV6bTAgNDQ4Yy01Ni41IDAtOTYtMzktOTYtOTQuOCAwLTEzLjUgNC42LTYxLjUgOTYtMTYxLjIgOTEuNCA5OS43IDk2IDE0Ny43IDk2IDE2MS4yIDAgNTUuOC0zOS41IDk0LjgtOTYgOTQuOHpcIl0sYnVzOls1MTIsNTEyLFtdLFwiZjIwN1wiLFwiTTQ4OCAxMjhoLThWODBjMC00NC44LTk5LjItODAtMjI0LTgwUzMyIDM1LjIgMzIgODB2NDhoLThjLTEzLjI1IDAtMjQgMTAuNzQtMjQgMjR2ODBjMCAxMy4yNSAxMC43NSAyNCAyNCAyNGg4djE2MGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzJjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtMzJoMTkydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzJjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtMzJoNi40YzE2IDAgMjUuNi0xMi44IDI1LjYtMjUuNlYyNTZoOGMxMy4yNSAwIDI0LTEwLjc1IDI0LTI0di04MGMwLTEzLjI2LTEwLjc1LTI0LTI0LTI0ek0xMTIgNDAwYy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem0xNi0xMTJjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJWMTI4YzAtMTcuNjcgMTQuMzMtMzIgMzItMzJoMjU2YzE3LjY3IDAgMzIgMTQuMzMgMzIgMzJ2MTI4YzAgMTcuNjctMTQuMzMgMzItMzIgMzJIMTI4em0yNzIgMTEyYy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyelwiXSxcImJ1cy1hbHRcIjpbNTEyLDUxMixbXSxcImY1NWVcIixcIk00ODggMTI4aC04VjgwYzAtNDQuOC05OS4yLTgwLTIyNC04MFMzMiAzNS4yIDMyIDgwdjQ4aC04Yy0xMy4yNSAwLTI0IDEwLjc0LTI0IDI0djgwYzAgMTMuMjUgMTAuNzUgMjQgMjQgMjRoOHYxNjBjMCAxNy42NyAxNC4zMyAzMiAzMiAzMnYzMmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDMyYzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyaDE5MnYzMmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDMyYzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyaDYuNGMxNiAwIDI1LjYtMTIuOCAyNS42LTI1LjZWMjU2aDhjMTMuMjUgMCAyNC0xMC43NSAyNC0yNHYtODBjMC0xMy4yNi0xMC43NS0yNC0yNC0yNHpNMTYwIDcyYzAtNC40MiAzLjU4LTggOC04aDE3NmM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEgxNjhjLTQuNDIgMC04LTMuNTgtOC04Vjcyem0tNDggMzI4Yy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem0xMjgtMTEySDEyOGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnYtOTZjMC0xNy42NyAxNC4zMy0zMiAzMi0zMmgxMTJ2MTYwem0zMiAwVjEyOGgxMTJjMTcuNjcgMCAzMiAxNC4zMyAzMiAzMnY5NmMwIDE3LjY3LTE0LjMzIDMyLTMyIDMySDI3MnptMTI4IDExMmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sY2FsY3VsYXRvcjpbNDQ4LDUxMixbXSxcImYxZWNcIixcIk0wIDQ2NFY0OEMwIDIxLjQ5IDIxLjQ5IDAgNDggMGgzNTJjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHY0MTZjMCAyNi41MS0yMS40OSA0OC00OCA0OEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OHptMzg0LTI4NFY3NmMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDc2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjEwNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDI5NmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyek0xMjggMzA4di00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDc2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMjU2IDEyOFYyNjhjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MTY4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptLTI1NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDc2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMTI4LTEyOHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem0wIDEyOHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyelwiXSxjYWxlbmRhcjpbNDQ4LDUxMixbXSxcImYxMzNcIixcIk0xMiAxOTJoNDI0YzYuNiAwIDEyIDUuNCAxMiAxMnYyNjBjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjIwNGMwLTYuNiA1LjQtMTIgMTItMTJ6bTQzNi00NHYtMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhoLTQ4VjEyYzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY1MkgxNjBWMTJjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjUySDQ4QzIxLjUgNjQgMCA4NS41IDAgMTEydjM2YzAgNi42IDUuNCAxMiAxMiAxMmg0MjRjNi42IDAgMTItNS40IDEyLTEyelwiXSxcImNhbGVuZGFyLWFsdFwiOls0NDgsNTEyLFtdLFwiZjA3M1wiLFwiTTQzNiAxNjBIMTJjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMzZjMC0yNi41IDIxLjUtNDggNDgtNDhoNDhWMTJjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY1MmgxMjhWMTJjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY1Mmg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHYzNmMwIDYuNi01LjQgMTItMTIgMTJ6TTEyIDE5Mmg0MjRjNi42IDAgMTIgNS40IDEyIDEydjI2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjA0YzAtNi42IDUuNC0xMiAxMi0xMnptMTE2IDIwNGMwLTYuNi01LjQtMTItMTItMTJINzZjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEydi00MHptMC0xMjhjMC02LjYtNS40LTEyLTEyLTEySDc2Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDB6bTEyOCAxMjhjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwem0wLTEyOGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDB6bTEyOCAxMjhjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwem0wLTEyOGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDB6XCJdLFwiY2FsZW5kYXItY2hlY2tcIjpbNDQ4LDUxMixbXSxcImYyNzRcIixcIk00MzYgMTYwSDEyYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0zNmMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDQ4VjEyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNDBjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY1MmgxMjhWMTJjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjUyaDQ4YzI2LjUxIDAgNDggMjEuNDkgNDggNDh2MzZjMCA2LjYyNy01LjM3MyAxMi0xMiAxMnpNMTIgMTkyaDQyNGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI2MGMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjIwNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyem0zMzMuMjk2IDk1Ljk0N2wtMjguMTY5LTI4LjM5OGMtNC42NjctNC43MDUtMTIuMjY1LTQuNzM2LTE2Ljk3LS4wNjhMMTk0LjEyIDM2NC42NjVsLTQ1Ljk4LTQ2LjM1MmMtNC42NjctNC43MDUtMTIuMjY2LTQuNzM2LTE2Ljk3MS0uMDY4bC0yOC4zOTcgMjguMTdjLTQuNzA1IDQuNjY3LTQuNzM2IDEyLjI2NS0uMDY4IDE2Ljk3bDgyLjYwMSA4My4yNjljNC42NjcgNC43MDUgMTIuMjY1IDQuNzM2IDE2Ljk3LjA2OGwxNDIuOTUzLTE0MS44MDVjNC43MDUtNC42NjcgNC43MzYtMTIuMjY1LjA2OC0xNi45N3pcIl0sXCJjYWxlbmRhci1taW51c1wiOls0NDgsNTEyLFtdLFwiZjI3MlwiLFwiTTQzNiAxNjBIMTJjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMzZjMC0yNi41IDIxLjUtNDggNDgtNDhoNDhWMTJjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY1MmgxMjhWMTJjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY1Mmg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHYzNmMwIDYuNi01LjQgMTItMTIgMTJ6TTEyIDE5Mmg0MjRjNi42IDAgMTIgNS40IDEyIDEydjI2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjA0YzAtNi42IDUuNC0xMiAxMi0xMnptMzA0IDE5MmM2LjYgMCAxMi01LjQgMTItMTJ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMkgxMzJjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJoMTg0elwiXSxcImNhbGVuZGFyLXBsdXNcIjpbNDQ4LDUxMixbXSxcImYyNzFcIixcIk00MzYgMTYwSDEyYy02LjYgMC0xMi01LjQtMTItMTJ2LTM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDQ4VjEyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoMTI4VjEyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MzZjMCA2LjYtNS40IDEyLTEyIDEyek0xMiAxOTJoNDI0YzYuNiAwIDEyIDUuNCAxMiAxMnYyNjBjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjIwNGMwLTYuNiA1LjQtMTIgMTItMTJ6bTMxNiAxNDBjMC02LjYtNS40LTEyLTEyLTEyaC02MHYtNjBjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjYwaC02MGMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg2MHY2MGMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEydi02MGg2MGM2LjYgMCAxMi01LjQgMTItMTJ2LTQwelwiXSxcImNhbGVuZGFyLXRpbWVzXCI6WzQ0OCw1MTIsW10sXCJmMjczXCIsXCJNNDM2IDE2MEgxMmMtNi42IDAtMTItNS40LTEyLTEydi0zNmMwLTI2LjUgMjEuNS00OCA0OC00OGg0OFYxMmMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjUyaDEyOFYxMmMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjUyaDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djM2YzAgNi42LTUuNCAxMi0xMiAxMnpNMTIgMTkyaDQyNGM2LjYgMCAxMiA1LjQgMTIgMTJ2MjYwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYyMDRjMC02LjYgNS40LTEyIDEyLTEyem0yNTcuMyAxNjBsNDguMS00OC4xYzQuNy00LjcgNC43LTEyLjMgMC0xN2wtMjguMy0yOC4zYy00LjctNC43LTEyLjMtNC43LTE3IDBMMjI0IDMwNi43bC00OC4xLTQ4LjFjLTQuNy00LjctMTIuMy00LjctMTcgMGwtMjguMyAyOC4zYy00LjcgNC43LTQuNyAxMi4zIDAgMTdsNDguMSA0OC4xLTQ4LjEgNDguMWMtNC43IDQuNy00LjcgMTIuMyAwIDE3bDI4LjMgMjguM2M0LjcgNC43IDEyLjMgNC43IDE3IDBsNDguMS00OC4xIDQ4LjEgNDguMWM0LjcgNC43IDEyLjMgNC43IDE3IDBsMjguMy0yOC4zYzQuNy00LjcgNC43LTEyLjMgMC0xN0wyNjkuMyAzNTJ6XCJdLGNhbWVyYTpbNTEyLDUxMixbXSxcImYwMzBcIixcIk01MTIgMTQ0djI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDg4bDEyLjMtMzIuOWM3LTE4LjcgMjQuOS0zMS4xIDQ0LjktMzEuMWgxMjUuNWMyMCAwIDM3LjkgMTIuNCA0NC45IDMxLjFMMzc2IDk2aDg4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zNzYgMjg4YzAtNjYuMi01My44LTEyMC0xMjAtMTIwcy0xMjAgNTMuOC0xMjAgMTIwIDUzLjggMTIwIDEyMCAxMjAgMTIwLTUzLjggMTIwLTEyMHptLTMyIDBjMCA0OC41LTM5LjUgODgtODggODhzLTg4LTM5LjUtODgtODggMzkuNS04OCA4OC04OCA4OCAzOS41IDg4IDg4elwiXSxcImNhbWVyYS1yZXRyb1wiOls1MTIsNTEyLFtdLFwiZjA4M1wiLFwiTTQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODB2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQxNmMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHptMCAzMmgxMDZjMy4zIDAgNiAyLjcgNiA2djIwYzAgMy4zLTIuNyA2LTYgNkgzOGMtMy4zIDAtNi0yLjctNi02VjgwYzAtOC44IDcuMi0xNiAxNi0xNnptNDI2IDk2SDM4Yy0zLjMgMC02LTIuNy02LTZ2LTM2YzAtMy4zIDIuNy02IDYtNmgxMzhsMzAuMi00NS4zYzEuMS0xLjcgMy0yLjcgNS0yLjdINDY0YzguOCAwIDE2IDcuMiAxNiAxNnY3NGMwIDMuMy0yLjcgNi02IDZ6TTI1NiA0MjRjLTY2LjIgMC0xMjAtNTMuOC0xMjAtMTIwczUzLjgtMTIwIDEyMC0xMjAgMTIwIDUzLjggMTIwIDEyMC01My44IDEyMC0xMjAgMTIwem0wLTIwOGMtNDguNSAwLTg4IDM5LjUtODggODhzMzkuNSA4OCA4OCA4OCA4OC0zOS41IDg4LTg4LTM5LjUtODgtODgtODh6bS00OCAxMDRjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTM1LjMgMjguNy02NCA2NC02NCA4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtMTcuNiAwLTMyIDE0LjQtMzIgMzIgMCA4LjgtNy4yIDE2LTE2IDE2elwiXSxjYW5uYWJpczpbNTEyLDUxMixbXSxcImY1NWZcIixcIk01MDMuNDcgMzYwLjI1Yy0xLjU2LS44Mi0zMi4zOS0xNi44OS03Ni43OC0yNS44MSA2NC4yNS03NS4xMiA4NC4wNS0xNjEuNjcgODQuOTMtMTY1LjY0IDEuMTgtNS4zMy0uNDQtMTAuOS00LjMtMTQuNzctMy4wMy0zLjA0LTcuMTItNC43LTExLjMyLTQuNy0xLjE0IDAtMi4yOS4xMi0zLjQ0LjM4LTMuODguODUtODYuNTQgMTkuNTktMTYwLjU4IDc5Ljc2LjAxLTEuNDYuMDEtMi45My4wMS00LjQgMC0xMTguNzktNTkuOTgtMjEzLjcyLTYyLjUzLTIxNy43QTE1Ljk3MyAxNS45NzMgMCAwIDAgMjU2IDBjLTUuNDUgMC0xMC41MyAyLjc4LTEzLjQ3IDcuMzctMi41NSAzLjk4LTYyLjUzIDk4LjkxLTYyLjUzIDIxNy43IDAgMS40Ny4wMSAyLjk0LjAxIDQuNC03NC4wMy02MC4xNi0xNTYuNjktNzguOS0xNjAuNTgtNzkuNzYtMS4xNC0uMjUtMi4yOS0uMzgtMy40NC0uMzgtNC4yIDAtOC4yOSAxLjY2LTExLjMyIDQuN0ExNS45ODYgMTUuOTg2IDAgMCAwIC4zOCAxNjguOGMuODggMy45NyAyMC42OCA5MC41MiA4NC45MyAxNjUuNjQtNDQuMzkgOC45Mi03NS4yMSAyNC45OS03Ni43OCAyNS44MWExNi4wMDMgMTYuMDAzIDAgMCAwLS4wMiAyOC4yOWMyLjQ1IDEuMjkgNjAuNzYgMzEuNzIgMTMzLjQ5IDMxLjcyIDYuMTQgMCAxMS45Ni0uMSAxNy41LS4zMS0xMS4zNyAyMi4yMy0xNi41MiAzOC4zMS0xNi44MSAzOS4yMi0xLjggNS42OC0uMjkgMTEuODkgMy45MSAxNi4xMWExNi4wMTkgMTYuMDE5IDAgMCAwIDE2LjEgMy45OWMxLjgzLS41NyAzNy43Mi0xMS45OSA3Ny4zLTM5LjI5VjUwNGMwIDQuNDIgMy41OCA4IDggOGgxNmM0LjQyIDAgOC0zLjU4IDgtOHYtNjQuMDFjMzkuNTggMjcuMyA3NS40NyAzOC43MSA3Ny4zIDM5LjI5YTE2LjAxOSAxNi4wMTkgMCAwIDAgMTYuMS0zLjk5YzQuMi00LjIyIDUuNzEtMTAuNDMgMy45MS0xNi4xMS0uMjktLjkxLTUuNDUtMTYuOTktMTYuODEtMzkuMjIgNS41NC4yMSAxMS4zNy4zMSAxNy41LjMxIDcyLjcyIDAgMTMxLjA0LTMwLjQzIDEzMy40OS0zMS43MiA1LjI0LTIuNzggOC41Mi04LjIyIDguNTEtMTQuMTUtLjAxLTUuOTQtMy4yOS0xMS4zOS04LjUzLTE0LjE1elwiXSxjYXBzdWxlczpbNTc2LDUxMixbXSxcImY0NmJcIixcIk01NTUuMyAzMDAuMUw0MjQuMiAxMTIuOEM0MDEuOSA4MSAzNjYuNCA2NCAzMzAuNCA2NGMtMjIuNiAwLTQ1LjUgNi43LTY1LjUgMjAuNy0xOS43IDEzLjgtMzMuNyAzMi44LTQxLjUgNTMuOEMyMjAuNSA3OS4yIDE3MiAzMiAxMTIgMzIgNTAuMSAzMiAwIDgyLjEgMCAxNDR2MjI0YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJWMjE4LjljMy4zIDguNiA3LjMgMTcuMSAxMi44IDI1TDM2OCA0MzEuMmMyMi4yIDMxLjggNTcuNyA0OC44IDkzLjggNDguOCAyMi43IDAgNDUuNS02LjcgNjUuNS0yMC43IDUxLjctMzYuMiA2NC4yLTEwNy41IDI4LTE1OS4yek0xNjAgMjU2SDY0VjE0NGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djExMnptMTk0LjggNDQuOWwtNjUuNi05My43Yy03LjctMTEtMTAuNy0yNC40LTguMy0zNy42IDIuMy0xMy4yIDkuNy0yNC44IDIwLjctMzIuNSA4LjUtNiAxOC41LTkuMSAyOC44LTkuMSAxNi41IDAgMzEuOSA4IDQxLjMgMjEuNWw2NS42IDkzLjctODIuNSA1Ny43elwiXSxjYXI6WzUxMiw1MTIsW10sXCJmMWI5XCIsXCJNNDk5Ljk5MSAxNjhoLTU0LjgxNWwtNy44NTQtMjAuOTQ0Yy05LjE5Mi0yNC41MTMtMjUuNDI1LTQ1LjM1MS00Ni45NDItNjAuMjYzUzM0My42NTEgNjQgMzE3LjQ3MiA2NEgxOTQuNTI4Yy0yNi4xOCAwLTUxLjM5MSA3Ljg4Mi03Mi45MDggMjIuNzkzLTIxLjUxOCAxNC45MTItMzcuNzUgMzUuNzUtNDYuOTQyIDYwLjI2M0w2Ni44MjQgMTY4SDEyLjAwOWMtOC4xOTEgMC0xMy45NzQgOC4wMjQtMTEuMzg0IDE1Ljc5NWw4IDI0QTEyIDEyIDAgMCAwIDIwLjAwOSAyMTZoMjguODE1bC0uMDUyLjE0QzI5LjIyMiAyMjcuMDkzIDE2IDI0Ny45OTcgMTYgMjcydjQ4YzAgMTYuMjI1IDYuMDQ5IDMxLjAyOSAxNiA0Mi4zMDlWNDI0YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGg0OGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTQwaDI1NnY0MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoNDhjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0di02MS42OTFjOS45NTEtMTEuMjgxIDE2LTI2LjA4NSAxNi00Mi4zMDl2LTQ4YzAtMjQuMDAzLTEzLjIyMi00NC45MDctMzIuNzcyLTU1Ljg2bC0uMDUyLS4xNGgyOC44MTVhMTIgMTIgMCAwIDAgMTEuMzg0LTguMjA1bDgtMjRjMi41OS03Ljc3MS0zLjE5My0xNS43OTUtMTEuMzg0LTE1Ljc5NXptLTM2NS4zODggMS41MjhDMTQzLjkxOCAxNDQuNjg5IDE2OCAxMjggMTk0LjUyOCAxMjhoMTIyLjk0NGMyNi41MjggMCA1MC42MSAxNi42ODkgNTkuOTI1IDQxLjUyOEwzOTEuODI0IDIwOEgxMjAuMTc2bDE0LjQyNy0zOC40NzJ6TTg4IDMyOGMtMTcuNjczIDAtMzItMTQuMzI3LTMyLTMyIDAtMTcuNjczIDE0LjMyNy0zMiAzMi0zMnM0OCAzMC4zMjcgNDggNDgtMzAuMzI3IDE2LTQ4IDE2em0zMzYgMGMtMTcuNjczIDAtNDggMS42NzMtNDgtMTYgMC0xNy42NzMgMzAuMzI3LTQ4IDQ4LTQ4czMyIDE0LjMyNyAzMiAzMmMwIDE3LjY3My0xNC4zMjcgMzItMzIgMzJ6XCJdLFwiY2FyZXQtZG93blwiOlszMjAsNTEyLFtdLFwiZjBkN1wiLFwiTTMxLjMgMTkyaDI1Ny4zYzE3LjggMCAyNi43IDIxLjUgMTQuMSAzNC4xTDE3NC4xIDM1NC44Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMEwxNy4yIDIyNi4xQzQuNiAyMTMuNSAxMy41IDE5MiAzMS4zIDE5MnpcIl0sXCJjYXJldC1sZWZ0XCI6WzE5Miw1MTIsW10sXCJmMGQ5XCIsXCJNMTkyIDEyNy4zMzh2MjU3LjMyNGMwIDE3LjgxOC0yMS41NDMgMjYuNzQxLTM0LjE0MiAxNC4xNDJMMjkuMTk2IDI3MC4xNDJjLTcuODEtNy44MS03LjgxLTIwLjQ3NCAwLTI4LjI4NGwxMjguNjYyLTEyOC42NjJjMTIuNTk5LTEyLjYgMzQuMTQyLTMuNjc2IDM0LjE0MiAxNC4xNDJ6XCJdLFwiY2FyZXQtcmlnaHRcIjpbMTkyLDUxMixbXSxcImYwZGFcIixcIk0wIDM4NC42NjJWMTI3LjMzOGMwLTE3LjgxOCAyMS41NDMtMjYuNzQxIDM0LjE0Mi0xNC4xNDJsMTI4LjY2MiAxMjguNjYyYzcuODEgNy44MSA3LjgxIDIwLjQ3NCAwIDI4LjI4NEwzNC4xNDIgMzk4LjgwNEMyMS41NDMgNDExLjQwNCAwIDQwMi40OCAwIDM4NC42NjJ6XCJdLFwiY2FyZXQtc3F1YXJlLWRvd25cIjpbNDQ4LDUxMixbXSxcImYxNTBcIixcIk00NDggODB2MzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGgzNTJjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTkyLjUgMjIwLjVsMTIzIDEyM2M0LjcgNC43IDEyLjMgNC43IDE3IDBsMTIzLTEyM2M3LjYtNy42IDIuMi0yMC41LTguNS0yMC41SDEwMWMtMTAuNyAwLTE2LjEgMTIuOS04LjUgMjAuNXpcIl0sXCJjYXJldC1zcXVhcmUtbGVmdFwiOls0NDgsNTEyLFtdLFwiZjE5MVwiLFwiTTQwMCA0ODBINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWODBjMC0yNi41MSAyMS40OS00OCA0OC00OGgzNTJjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHYzNTJjMCAyNi41MS0yMS40OSA0OC00OCA0OHpNMjU5LjUxNSAxMjQuNDg1bC0xMjMuMDMgMTIzLjAzYy00LjY4NiA0LjY4Ni00LjY4NiAxMi4yODQgMCAxNi45NzFsMTIzLjAyOSAxMjMuMDI5YzcuNTYgNy41NiAyMC40ODUgMi4yMDYgMjAuNDg1LTguNDg1VjEzMi45NzFjLjAwMS0xMC42OTEtMTIuOTI1LTE2LjA0NS0yMC40ODQtOC40ODZ6XCJdLFwiY2FyZXQtc3F1YXJlLXJpZ2h0XCI6WzQ0OCw1MTIsW10sXCJmMTUyXCIsXCJNNDggMzJoMzUyYzI2LjUxIDAgNDggMjEuNDkgNDggNDh2MzUyYzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWODBjMC0yNi41MSAyMS40OS00OCA0OC00OHptMTQwLjQ4NSAzNTUuNTE1bDEyMy4wMjktMTIzLjAyOWM0LjY4Ni00LjY4NiA0LjY4Ni0xMi4yODQgMC0xNi45NzFsLTEyMy4wMjktMTIzLjAzYy03LjU2LTcuNTYtMjAuNDg1LTIuMjA2LTIwLjQ4NSA4LjQ4NXYyNDYuMDU5YzAgMTAuNjkxIDEyLjkyNiAxNi4wNDUgMjAuNDg1IDguNDg2elwiXSxcImNhcmV0LXNxdWFyZS11cFwiOls0NDgsNTEyLFtdLFwiZjE1MVwiLFwiTTAgNDMyVjgwYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMzUyYzI2LjUxIDAgNDggMjEuNDkgNDggNDh2MzUyYzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDh6bTM1NS41MTUtMTQwLjQ4NWwtMTIzLjAzLTEyMy4wM2MtNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3MSAwTDkyLjQ4NSAyOTEuNTE1Yy03LjU2IDcuNTYtMi4yMDYgMjAuNDg1IDguNDg1IDIwLjQ4NWgyNDYuMDU5YzEwLjY5MSAwIDE2LjA0NS0xMi45MjYgOC40ODYtMjAuNDg1elwiXSxcImNhcmV0LXVwXCI6WzMyMCw1MTIsW10sXCJmMGQ4XCIsXCJNMjg4LjY2MiAzNTJIMzEuMzM4Yy0xNy44MTggMC0yNi43NDEtMjEuNTQzLTE0LjE0Mi0zNC4xNDJsMTI4LjY2Mi0xMjguNjYyYzcuODEtNy44MSAyMC40NzQtNy44MSAyOC4yODQgMGwxMjguNjYyIDEyOC42NjJjMTIuNiAxMi41OTkgMy42NzYgMzQuMTQyLTE0LjE0MiAzNC4xNDJ6XCJdLFwiY2FydC1hcnJvdy1kb3duXCI6WzU3Niw1MTIsW10sXCJmMjE4XCIsXCJNNTA0LjcxNyAzMjBIMjExLjU3Mmw2LjU0NSAzMmgyNjguNDE4YzE1LjQwMSAwIDI2LjgxNiAxNC4zMDEgMjMuNDAzIDI5LjMxOWwtNS41MTcgMjQuMjc2QzUyMy4xMTIgNDE0LjY2OCA1MzYgNDMzLjgyOCA1MzYgNDU2YzAgMzEuMjAyLTI1LjUxOSA1Ni40NDQtNTYuODI0IDU1Ljk5NC0yOS44MjMtLjQyOS01NC4zNS0yNC42MzEtNTUuMTU1LTU0LjQ0Ny0uNDQtMTYuMjg3IDYuMDg1LTMxLjA0OSAxNi44MDMtNDEuNTQ4SDIzMS4xNzZDMjQxLjU1MyA0MjYuMTY1IDI0OCA0NDAuMzI2IDI0OCA0NTZjMCAzMS44MTMtMjYuNTI4IDU3LjQzMS01OC42NyA1NS45MzgtMjguNTQtMS4zMjUtNTEuNzUxLTI0LjM4NS01My4yNTEtNTIuOTE3LTEuMTU4LTIyLjAzNCAxMC40MzYtNDEuNDU1IDI4LjA1MS01MS41ODZMOTMuODgzIDY0SDI0QzEwLjc0NSA2NCAwIDUzLjI1NSAwIDQwVjI0QzAgMTAuNzQ1IDEwLjc0NSAwIDI0IDBoMTAyLjUyOWMxMS40MDEgMCAyMS4yMjggOC4wMjEgMjMuNTEzIDE5LjE5TDE1OS4yMDggNjRINTUxLjk5YzE1LjQwMSAwIDI2LjgxNiAxNC4zMDEgMjMuNDAzIDI5LjMxOWwtNDcuMjczIDIwOEM1MjUuNjM3IDMxMi4yNDYgNTE1LjkyMyAzMjAgNTA0LjcxNyAzMjB6TTQwMy4wMjkgMTkySDM2MHYtNjBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtMjRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NjBoLTQzLjAyOWMtMTAuNjkxIDAtMTYuMDQ1IDEyLjkyNi04LjQ4NSAyMC40ODVsNjcuMDI5IDY3LjAyOWM0LjY4NiA0LjY4NiAxMi4yODQgNC42ODYgMTYuOTcxIDBsNjcuMDI5LTY3LjAyOWM3LjU1OS03LjU1OSAyLjIwNS0yMC40ODUtOC40ODYtMjAuNDg1elwiXSxcImNhcnQtcGx1c1wiOls1NzYsNTEyLFtdLFwiZjIxN1wiLFwiTTUwNC43MTcgMzIwSDIxMS41NzJsNi41NDUgMzJoMjY4LjQxOGMxNS40MDEgMCAyNi44MTYgMTQuMzAxIDIzLjQwMyAyOS4zMTlsLTUuNTE3IDI0LjI3NkM1MjMuMTEyIDQxNC42NjggNTM2IDQzMy44MjggNTM2IDQ1NmMwIDMxLjIwMi0yNS41MTkgNTYuNDQ0LTU2LjgyNCA1NS45OTQtMjkuODIzLS40MjktNTQuMzUtMjQuNjMxLTU1LjE1NS01NC40NDctLjQ0LTE2LjI4NyA2LjA4NS0zMS4wNDkgMTYuODAzLTQxLjU0OEgyMzEuMTc2QzI0MS41NTMgNDI2LjE2NSAyNDggNDQwLjMyNiAyNDggNDU2YzAgMzEuODEzLTI2LjUyOCA1Ny40MzEtNTguNjcgNTUuOTM4LTI4LjU0LTEuMzI1LTUxLjc1MS0yNC4zODUtNTMuMjUxLTUyLjkxNy0xLjE1OC0yMi4wMzQgMTAuNDM2LTQxLjQ1NSAyOC4wNTEtNTEuNTg2TDkzLjg4MyA2NEgyNEMxMC43NDUgNjQgMCA1My4yNTUgMCA0MFYyNEMwIDEwLjc0NSAxMC43NDUgMCAyNCAwaDEwMi41MjljMTEuNDAxIDAgMjEuMjI4IDguMDIxIDIzLjUxMyAxOS4xOUwxNTkuMjA4IDY0SDU1MS45OWMxNS40MDEgMCAyNi44MTYgMTQuMzAxIDIzLjQwMyAyOS4zMTlsLTQ3LjI3MyAyMDhDNTI1LjYzNyAzMTIuMjQ2IDUxNS45MjMgMzIwIDUwNC43MTcgMzIwek00MDggMTY4aC00OHYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNmgtMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBoLTQ4Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djE2YzAgOC44MzcgNy4xNjMgMTYgMTYgMTZoNDh2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGg0OGM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di0xNmMwLTguODM3LTcuMTYzLTE2LTE2LTE2elwiXSxjZXJ0aWZpY2F0ZTpbNTEyLDUxMixbXSxcImYwYTNcIixcIk00NTguNjIyIDI1NS45Mmw0NS45ODUtNDUuMDA1YzEzLjcwOC0xMi45NzcgNy4zMTYtMzYuMDM5LTEwLjY2NC00MC4zMzlsLTYyLjY1LTE1Ljk5IDE3LjY2MS02Mi4wMTVjNC45OTEtMTcuODM4LTExLjgyOS0zNC42NjMtMjkuNjYxLTI5LjY3MWwtNjEuOTk0IDE3LjY2Ny0xNS45ODQtNjIuNjcxQzMzNy4wODUuMTk3IDMxMy43NjUtNi4yNzYgMzAwLjk5IDcuMjI4TDI1NiA1My41NyAyMTEuMDExIDcuMjI5Yy0xMi42My0xMy4zNTEtMzYuMDQ3LTcuMjM0LTQwLjMyNSAxMC42NjhsLTE1Ljk4NCA2Mi42NzEtNjEuOTk1LTE3LjY2N0M3NC44NyA1Ny45MDcgNTguMDU2IDc0LjczOCA2My4wNDYgOTIuNTcybDE3LjY2MSA2Mi4wMTUtNjIuNjUgMTUuOTlDLjA2OSAxNzQuODc4LTYuMzEgMTk3Ljk0NCA3LjM5MiAyMTAuOTE1bDQ1Ljk4NSA0NS4wMDUtNDUuOTg1IDQ1LjAwNGMtMTMuNzA4IDEyLjk3Ny03LjMxNiAzNi4wMzkgMTAuNjY0IDQwLjMzOWw2Mi42NSAxNS45OS0xNy42NjEgNjIuMDE1Yy00Ljk5MSAxNy44MzggMTEuODI5IDM0LjY2MyAyOS42NjEgMjkuNjcxbDYxLjk5NC0xNy42NjcgMTUuOTg0IDYyLjY3MWM0LjQzOSAxOC41NzUgMjcuNjk2IDI0LjAxOCA0MC4zMjUgMTAuNjY4TDI1NiA0NTguNjFsNDQuOTg5IDQ2LjAwMWMxMi41IDEzLjQ4OCAzNS45ODcgNy40ODYgNDAuMzI1LTEwLjY2OGwxNS45ODQtNjIuNjcxIDYxLjk5NCAxNy42NjdjMTcuODM2IDQuOTk0IDM0LjY1MS0xMS44MzcgMjkuNjYxLTI5LjY3MWwtMTcuNjYxLTYyLjAxNSA2Mi42NS0xNS45OWMxNy45ODctNC4zMDIgMjQuMzY2LTI3LjM2NyAxMC42NjQtNDAuMzM5bC00NS45ODQtNDUuMDA0elwiXSxjaGFsa2JvYXJkOls2NDAsNTEyLFtdLFwiZjUxYlwiLFwiTTk2IDY0aDQ0OHYzNTJoNjRWNDBjMC0yMi4wNi0xNy45NC00MC00MC00MEg3MkM0OS45NCAwIDMyIDE3Ljk0IDMyIDQwdjM3Nmg2NFY2NHptNTI4IDM4NEg0ODB2LTY0SDI4OHY2NEgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoNjA4YzguODQgMCAxNi03LjE2IDE2LTE2di0zMmMwLTguODQtNy4xNi0xNi0xNi0xNnpcIl0sXCJjaGFsa2JvYXJkLXRlYWNoZXJcIjpbNjQwLDUxMixbXSxcImY1MWNcIixcIk0yMDggMzUyYy0yLjM5IDAtNC43OC4zNS03LjA2IDEuMDlDMTg3Ljk4IDM1Ny4zIDE3NC4zNSAzNjAgMTYwIDM2MGMtMTQuMzUgMC0yNy45OC0yLjctNDAuOTUtNi45MS0yLjI4LS43NC00LjY2LTEuMDktNy4wNS0xLjA5QzQ5Ljk0IDM1Mi0uMzMgNDAyLjQ4IDAgNDY0LjYyLjE0IDQ5MC44OCAyMS43MyA1MTIgNDggNTEyaDIyNGMyNi4yNyAwIDQ3Ljg2LTIxLjEyIDQ4LTQ3LjM4LjMzLTYyLjE0LTQ5Ljk0LTExMi42Mi0xMTItMTEyLjYyem0tNDgtMzJjNTMuMDIgMCA5Ni00Mi45OCA5Ni05NnMtNDIuOTgtOTYtOTYtOTYtOTYgNDIuOTgtOTYgOTYgNDIuOTggOTYgOTYgOTZ6TTU5MiAwSDIwOGMtMjYuNDcgMC00OCAyMi4yNS00OCA0OS41OVY5NmMyMy40MiAwIDQ1LjEgNi43OCA2NCAxNy44VjY0aDM1MnYyODhoLTY0di02NEgzODR2NjRoLTc2LjI0YzE5LjEgMTYuNjkgMzMuMTIgMzguNzMgMzkuNjkgNjRINTkyYzI2LjQ3IDAgNDgtMjIuMjUgNDgtNDkuNTlWNDkuNTlDNjQwIDIyLjI1IDYxOC40NyAwIDU5MiAwelwiXSxcImNoYXJ0LWFyZWFcIjpbNTEyLDUxMixbXSxcImYxZmVcIixcIk01MDAgMzg0YzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJIMTJjLTYuNiAwLTEyLTUuNC0xMi0xMlY3NmMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjMwOGg0MzZ6TTM3Mi43IDE1OS41TDI4OCAyMTZsLTg1LjMtMTEzLjdjLTUuMS02LjgtMTUuNS02LjMtMTkuOSAxTDk2IDI0OHYxMDRoMzg0bC04OS45LTE4Ny44Yy0zLjItNi41LTExLjQtOC43LTE3LjQtNC43elwiXSxcImNoYXJ0LWJhclwiOls1MTIsNTEyLFtdLFwiZjA4MFwiLFwiTTUwMCAzODRjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkgxMmMtNi42IDAtMTItNS40LTEyLTEyVjc2YzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2MzA4aDQzNnptLTMwOC00NHYtNzJjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEydjcyYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6bTE5MiAwVjIwNGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2MTM2YzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6bS05NiAwVjE0MGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2MjAwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6bTE5MiAwVjEwOGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2MjMyYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ6XCJdLFwiY2hhcnQtbGluZVwiOls1MTIsNTEyLFtdLFwiZjIwMVwiLFwiTTUwMCAzODRjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkgxMmMtNi42IDAtMTItNS40LTEyLTEyVjc2YzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2MzA4aDQzNnpNNDU2IDk2SDM0NGMtMjEuNCAwLTMyLjEgMjUuOS0xNyA0MWwzMi45IDMyLjktNzIgNzIuOS01NS42LTU1LjZjLTQuNy00LjctMTIuMi00LjctMTYuOSAwTDk2LjQgMzA1Yy00LjcgNC42LTQuOCAxMi4yLS4yIDE2LjlsMjguNSAyOS40YzQuNyA0LjggMTIuNCA0LjkgMTcuMS4xbDgyLjEtODIuMSA1NS41IDU1LjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwbDEwOS4yLTEwOS4yTDQzOSAyNDljMTUuMSAxNS4xIDQxIDQuNCA0MS0xN1YxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6XCJdLFwiY2hhcnQtcGllXCI6WzU3Niw1MTIsW10sXCJmMjAwXCIsXCJNMjg4IDEyLjNWMjQwaDIyNy43YzYuOSAwIDEyLjMtNS44IDEyLTEyLjctNi40LTEyMi40LTEwNC41LTIyMC42LTIyNy0yMjctNi45LS4zLTEyLjcgNS4xLTEyLjcgMTJ6TTU1Mi43IDI4OGM2LjkgMCAxMi4zIDUuOCAxMiAxMi43LTIuOCA1My4yLTIzLjIgMTA1LjYtNjEuMiAxNDcuOC00LjYgNS4xLTEyLjYgNS40LTE3LjUuNUwzMjUgMjg4aDIyNy43ek00MDEgNDMzYzQuOCA0LjggNC43IDEyLjgtLjQgMTcuMy00Mi42IDM4LjQtOTkgNjEuNy0xNjAuOCA2MS43QzEwNy42IDUxMS45LS4yIDQwMy44IDAgMjcxLjUuMiAxNDMuNCAxMDAuOCAzOC45IDIyNy4zIDMyLjNjNi45LS40IDEyLjcgNS4xIDEyLjcgMTJWMjcybDE2MSAxNjF6XCJdLGNoZWNrOls1MTIsNTEyLFtdLFwiZjAwY1wiLFwiTTE3My44OTggNDM5LjQwNGwtMTY2LjQtMTY2LjRjLTkuOTk3LTkuOTk3LTkuOTk3LTI2LjIwNiAwLTM2LjIwNGwzNi4yMDMtMzYuMjA0YzkuOTk3LTkuOTk4IDI2LjIwNy05Ljk5OCAzNi4yMDQgMEwxOTIgMzEyLjY5IDQzMi4wOTUgNzIuNTk2YzkuOTk3LTkuOTk3IDI2LjIwNy05Ljk5NyAzNi4yMDQgMGwzNi4yMDMgMzYuMjA0YzkuOTk3IDkuOTk3IDkuOTk3IDI2LjIwNiAwIDM2LjIwNGwtMjk0LjQgMjk0LjQwMWMtOS45OTggOS45OTctMjYuMjA3IDkuOTk3LTM2LjIwNC0uMDAxelwiXSxcImNoZWNrLWNpcmNsZVwiOls1MTIsNTEyLFtdLFwiZjA1OFwiLFwiTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXpcIl0sXCJjaGVjay1kb3VibGVcIjpbNTEyLDUxMixbXSxcImY1NjBcIixcIk01MDQuNSAxNzEuOTVsLTM2LjItMzYuNDFjLTEwLTEwLjA1LTI2LjIxLTEwLjA1LTM2LjIgMEwxOTIgMzc3LjAyIDc5LjkgMjY0LjI4Yy0xMC0xMC4wNi0yNi4yMS0xMC4wNi0zNi4yIDBMNy41IDMwMC42OWMtMTAgMTAuMDUtMTAgMjYuMzYgMCAzNi40MWwxNjYuNCAxNjcuMzZjMTAgMTAuMDYgMjYuMjEgMTAuMDYgMzYuMiAwbDI5NC40LTI5Ni4wOWMxMC0xMC4wNiAxMC0yNi4zNiAwLTM2LjQyek0xNjYuNTcgMjgyLjcxYzYuODQgNy4wMiAxOC4xOCA3LjAyIDI1LjIxLjE4TDQwMy44NSA3Mi42MmM3LjAyLTYuODQgNy4wMi0xOC4xOC4xOC0yNS4yMUwzNjIuMDggNS4yOWMtNi44NC03LjAyLTE4LjE4LTcuMDItMjUuMjEtLjE4TDE3OS43MSAxNjEuMTlsLTY4LjIzLTY4Ljc3Yy02Ljg0LTcuMDItMTguMTgtNy4wMi0yNS4yLS4xOGwtNDIuMTMgNDEuNzdjLTcuMDIgNi44NC03LjAyIDE4LjE4LS4xOCAyNS4ybDEyMi42IDEyMy41elwiXSxcImNoZWNrLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE0YVwiLFwiTTQwMCA0ODBINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWODBjMC0yNi41MSAyMS40OS00OCA0OC00OGgzNTJjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHYzNTJjMCAyNi41MS0yMS40OSA0OC00OCA0OHptLTIwNC42ODYtOTguMDU5bDE4NC0xODRjNi4yNDgtNi4yNDggNi4yNDgtMTYuMzc5IDAtMjIuNjI3bC0yMi42MjctMjIuNjI3Yy02LjI0OC02LjI0OC0xNi4zNzktNi4yNDktMjIuNjI4IDBMMTg0IDMwMi43NDVsLTcwLjA1OS03MC4wNTljLTYuMjQ4LTYuMjQ4LTE2LjM3OS02LjI0OC0yMi42MjggMGwtMjIuNjI3IDIyLjYyN2MtNi4yNDggNi4yNDgtNi4yNDggMTYuMzc5IDAgMjIuNjI3bDEwNCAxMDRjNi4yNDkgNi4yNSAxNi4zNzkgNi4yNSAyMi42MjguMDAxelwiXSxjaGVzczpbNTEyLDUxMixbXSxcImY0MzlcIixcIk0xOTkuODIxIDIxNy42MzNhNiA2IDAgMCAxIDYgNmwtLjAwMSAyMC43NjZhNiA2IDAgMCAxLTYgNmgtMjUuODA1YzAgMzEuNzE1LTIuMTUzIDk2LjIwMSAxNy4zOTggMTUzLjIyOUg2NC41OTdDODQuNTQgMzQ1LjQ1MiA4Mi4wMiAyNzkuMjQ1IDgyLjAyIDI1MC4zOTlINTYuMTgzYTYgNiAwIDAgMS02LTZsLjAwMi0yMC43NjZhNiA2IDAgMCAxIDYtNmgxNDMuNjM2ek00MS41NTQgMTE1LjA4OGwzNC41OCA5NS4wNzFoMTAzLjczNGwzNC41NzItOTUuMDcyYzIuODQ2LTcuODI2LTIuOTUtMTYuMTAxLTExLjI3OC0xNi4xMDFIMTUydi0zMC4yMmgyMS41N2E2IDYgMCAwIDAgNi02VjQwLjM4M2E2IDYgMCAwIDAtNi02aC0yOC4zNjdWNmE2IDYgMCAwIDAtNi02SDExNi44MmE2IDYgMCAwIDAtNiA2djI4LjM4M0g4Mi40MjFhNiA2IDAgMCAwLTYgNnYyMi4zODNhNiA2IDAgMCAwIDYgNkgxMDR2MzAuMjE5SDUyLjgzMWMtOC4zMjguMDAxLTE0LjEyNCA4LjI3Ni0xMS4yNzcgMTYuMTAzek0yMjIuNjc4IDQ0NS4xN3YtMjguMDY3YTYgNiAwIDAgMC02LTZIMzkuMzIyYTYgNiAwIDAgMC02IDZ2MjguMDY3bC0yMi4xNDggMTQuMTY0YTYgNiAwIDAgMC0yLjc2NyA1LjA1NVY1MDZhNiA2IDAgMCAwIDYgNmgyMjcuMTg3YTYgNiAwIDAgMCA2LTZ2LTQxLjYxMmE2IDYgMCAwIDAtMi43NjctNS4wNTVsLTIyLjE0OS0xNC4xNjN6bTkwLjU3OC0xNDQuMjI1bDI0Ljg4IDE2Ljk2M2MuMDkgMTguMTI0LS4xNjcgNjMuOTA0LTExLjkwNSAxMTQuNTIyaDE0Ny41MjZjLTExLjcxMy01MC40NzUtMTEuOTY5LTk2LjMyNC0xMS44ODItMTE0LjUzN2wyNC44NTktMTYuOTQ5YTMuODU2IDMuODU2IDAgMCAwIDEuNjg0LTMuMTg3di02OS45MDFhMy44NTcgMy44NTcgMCAwIDAtMy44NTctMy44NTdoLTI3LjY1NWEzLjg1NyAzLjg1NyAwIDAgMC0zLjg1NyAzLjg1N3YzMS41MTRoLTIyLjczN3YtMzEuNTE0YTMuODU3IDMuODU3IDAgMCAwLTMuODU4LTMuODU3aC01Mi45MThhMy44NTcgMy44NTcgMCAwIDAtMy44NTcgMy44NTd2MzEuNTE0aC0yMi43Mzd2LTMxLjUxNGEzLjg1NyAzLjg1NyAwIDAgMC0zLjg1Ny0zLjg1N0gzMTUuNDNhMy44NTcgMy44NTcgMCAwIDAtMy44NTcgMy44NTd2NjkuOTAxYTMuODU1IDMuODU1IDAgMCAwIDEuNjgzIDMuMTg4em03MS41ODUgNTEuOTA2YzAtOC4zNzIgNi43ODctMTUuMTU4IDE1LjE1OS0xNS4xNThzMTUuMTU4IDYuNzg3IDE1LjE1OCAxNS4xNTh2MzAuMzE4aC0zMC4zMTd2LTMwLjMxOHpNNTA0LjYyIDQ3MC4wNTlsLTEzLjY2NC0xMC42Mzl2LTE1LjU1MmEzLjg1NyAzLjg1NyAwIDAgMC0zLjg1Ny0zLjg1N0gzMTIuOTE1YTMuODU3IDMuODU3IDAgMCAwLTMuODU3IDMuODU3djE1LjU1MmwtMTMuNjc3IDEwLjYzOWEzLjg1NyAzLjg1NyAwIDAgMC0xLjQ4OCAzLjA0NHYzNS4wMzlhMy44NTcgMy44NTcgMCAwIDAgMy44NTcgMy44NTdoMjA0LjVhMy44NTcgMy44NTcgMCAwIDAgMy44NTctMy44NTd2LTM1LjA0YTMuODU5IDMuODU5IDAgMCAwLTEuNDg3LTMuMDQzelwiXSxcImNoZXNzLWJpc2hvcFwiOlszMjAsNTEyLFtdLFwiZjQzYVwiLFwiTTEyMy4xNTggNzcuODgxQzEwNy4zNjkgNzIuNTMgOTYgNTcuNTk3IDk2IDQwYzAtMjIuMDkxIDE3LjkwOS00MCA0MC00MGg0Ny43OTZjMjIuMDkxIDAgNDAgMTcuOTA5IDQwIDQwIDAgMTcuNTQxLTExLjI5NSAzMi40MzQtMjcuMDA1IDM3LjgyOSAyMy45OTMgMTYuNjU3IDQ4LjU3NyA0Ni44MzkgNjguNzAzIDgyLjA1TDE0NC45MjkgMjgwLjQ0M2E2IDYgMCAwIDAgMCA4LjQ4NWwxNC4xNDIgMTQuMTQyYTYgNiAwIDAgMCA4LjQ4NSAwTDI4MC45IDE4OS43MjZjMTcuNzU4IDM4LjI5NyAyOS4zNzEgNzkuNDQzIDI5LjM3MSAxMTQuMjczIDAgNTMuNzg2LTIyLjg5NyA3NS43ODgtNTguNDQ2IDg2LjAzM1Y0NDhINjguMTc0di01Ny45N0MzMi42MzEgMzc5Ljc4NCA5LjczOSAzNTcuNzgxIDkuNzM5IDMwNGMwLTc4LjAyOSA1OC4yODEtMTg3Ljc2NiAxMTMuNDE5LTIyNi4xMTl6TTMyMCA1MDB2LTI0YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyOTZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnpcIl0sXCJjaGVzcy1ib2FyZFwiOls1MTIsNTEyLFtdLFwiZjQzY1wiLFwiTTI1NiAyNTZ2NjRoLTY0di02NGg2NHptMC0yNTZoLTY0djY0aDY0VjB6bTAgMjU2aDY0di02NGgtNjR2NjR6TTM4NCAwaC02NHY2NGg2NFYwem0wIDUxMmg2NHYtNjRoLTY0djY0em0xMjgtNjR2LTY0aC02NHY2NGg2NHptLTM4NCA2NGg2NHYtNjRoLTY0djY0em0wLTUxMkg2NHY2NGg2NFYwem0zODQgMTkydi02NGgtNjR2NjRoNjR6bTAgMTI4di02NGgtNjR2NjRoNjR6TTAgNTEyaDY0di02NEgwdjY0ek0wIDY0djY0aDY0VjY0SDB6bTAgMTI4djY0aDY0di02NEgwem0wIDEyOHY2NGg2NHYtNjRIMHptMjU2IDE5Mmg2NHYtNjRoLTY0djY0em0tNjQtMTI4djY0aDY0di02NGgtNjR6bTY0LTE5MnYtNjRoLTY0djY0aDY0ek02NCAzODR2NjRoNjR2LTY0SDY0em02NC0xMjhINjR2NjRoNjR2LTY0em0yNTYgMTI4aDY0di02NGgtNjR2NjR6TTUxMiAwaC02NHY2NGg2NFYwek0zODQgMjU2aDY0di02NGgtNjR2NjR6bTAtMTkydjY0aDY0VjY0aC02NHptLTY0IDMyMHY2NGg2NHYtNjRoLTY0em0tMTkyLTY0djY0aDY0di02NGgtNjR6bTEyOCAwdjY0aDY0di02NGgtNjR6bS02NC0xMjhoLTY0djY0aDY0di02NHptLTY0LTY0SDY0djY0aDY0di02NHptMTkyIDE5Mmg2NHYtNjRoLTY0djY0ek0xOTIgMTI4VjY0aC02NHY2NGg2NHptMTI4IDBWNjRoLTY0djY0aDY0em0wIDY0aDY0di02NGgtNjR2NjR6XCJdLFwiY2hlc3Mta2luZ1wiOls0NDgsNTEyLFtdLFwiZjQzZlwiLFwiTTQxNiA0NzZ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgzNjBjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnptLTguMDMzLTMyNEgyNDh2LTQ4aDUwYTYgNiAwIDAgMCA2LTZWNjJhNiA2IDAgMCAwLTYtNmgtNTBWNmE2IDYgMCAwIDAtNi02aC0zNmE2IDYgMCAwIDAtNiA2djUwaC01MGE2IDYgMCAwIDAtNiA2djM2YTYgNiAwIDAgMCA2IDZoNTB2NDhINDAuMDMzYy0yNy41NzQgMC00Ni44NzkgMjcuMjQ0LTM3LjczOCA1My4yNTlMODcuNTgyIDQ0OGgyNzIuODM2bDg1LjI4Ny0yNDIuNzQxQzQ1NC44NDYgMTc5LjI0NCA0MzUuNTQxIDE1MiA0MDcuOTY3IDE1MnpcIl0sXCJjaGVzcy1rbmlnaHRcIjpbMzg0LDUxMixbXSxcImY0NDFcIixcIk0zNTIgMjI0djIyNEgzMnYtNDYuNTU3YzAtMzAuMzAyIDE3LjEyLTU4LjAwMyA0NC4yMjMtNzEuNTU0bDU3LjI0My0yOC42MjJBNDggNDggMCAwIDAgMTYwIDI1OC4zMzRWMjA4bC0yMi4xMjcgMTEuMDYzYTIzLjk5NiAyMy45OTYgMCAwIDAtMTIuNTUgMTUuNjQ1bC0xMS44MzUgNDcuMzM4YTEyIDEyIDAgMCAxLTcuMTg1IDguMjMxbC0yOS42MDEgMTEuODRhMTEuOTk4IDExLjk5OCAwIDAgMS05LjMzLS4xNzZMNy4xMjYgMjc1LjE2N0ExMiAxMiAwIDAgMSAwIDI2NC4yMDF2LTE1OC4yNmMwLTYuMzY1IDIuNTI5LTEyLjQ3IDcuMDMtMTYuOTcxTDE2IDgwIDEuNzg5IDUxLjU3OEExNi45MzcgMTYuOTM3IDAgMCAxIDAgNDRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDhjMTA2LjAzOSAwIDE5MiA4NS45NjEgMTkyIDE5MnptMjAgMjQwSDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMzYwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTI0YzAtNi42MjctNS4zNzMtMTItMTItMTJ6TTUyIDEyOGMtMTEuMDQ2IDAtMjAgOC45NTQtMjAgMjBzOC45NTQgMjAgMjAgMjAgMjAtOC45NTQgMjAtMjAtOC45NTQtMjAtMjAtMjB6XCJdLFwiY2hlc3MtcGF3blwiOlszMjAsNTEyLFtdLFwiZjQ0M1wiLFwiTTI2NCA0NDhINTZzNjAtNDIuNzQzIDYwLTE3Nkg4NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0MC4yMDlDOTUuNzIxIDIxMC41NiA3NiAxODEuNTg4IDc2IDE0OGMwLTQ2LjM5MiAzNy42MDgtODQgODQtODRzODQgMzcuNjA4IDg0IDg0YzAgMzMuNTg4LTE5LjcyMSA2Mi41Ni00OC4yMDkgNzZIMjM2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMmgtMzJjMCAxMzMuMjU3IDYwIDE3NiA2MCAxNzZ6bTI4IDE2SDI4Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjY0YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTI0YzAtNi42MjctNS4zNzMtMTItMTItMTJ6XCJdLFwiY2hlc3MtcXVlZW5cIjpbNTEyLDUxMixbXSxcImY0NDVcIixcIk00MzYgNTEySDc2Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDM2MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJ6TTI1NS41NzkgMGMtMzAuOTI4IDAtNTYgMjUuMDcyLTU2IDU2czI1LjA3MiA1NiA1NiA1NiA1Ni0yNS4wNzIgNTYtNTYtMjUuMDcyLTU2LTU2LTU2em0yMDQuNTY4IDE1NC42MzRjLTUuNzY4LTMuMDQ1LTEyLjkxNi0uOTMyLTE2LjA4MiA0Ljc3LTguNjE2IDE1LjUxNi0yMi43NDcgMzcuODAxLTQ0LjA2NSAzNy44MDEtMjguNzE0IDAtMzAuNjI1LTE5LjgwNC0zMS42ODYtNTcuNTQyLS4xODMtNi40OTItNS41MDEtMTEuNjY0LTExLjk5NS0xMS42NjRoLTQxLjAwNmMtNS4xNzUgMC05Ljc1NCAzLjMyOC0xMS4zODggOC4yMzgtOC44OSAyNi43MDktMjYuMDczIDQwLjk5Mi00Ny45MjUgNDAuOTkycy0zOS4wMzQtMTQuMjgzLTQ3LjkyNS00MC45OTJjLTEuNjM0LTQuOTEtNi4yMTMtOC4yMzgtMTEuMzg4LTguMjM4aC00MS4wMDVjLTYuNDk1IDAtMTEuODEzIDUuMTc0LTExLjk5NSAxMS42NjctMS4wNTIgMzcuNjQyLTIuOTM0IDU3LjUzOS0zMS42ODggNTcuNTM5LTIwLjY5MSAwLTMzLjgxNy0yMC4yMjQtNDQuNDI1LTM4LjAyNS0zLjI2Ni01LjQ4LTEwLjI1OC03LjQzMS0xNS44OTktNC40NTNsLTM5LjE3OSAyMC42NzlhMTIgMTIgMCAwIDAtNS41MSAxNS4xNDVMMTEyIDQ0OGgyODhsMTA1LjAxNC0yNTcuNDQ4YTEyIDEyIDAgMCAwLTUuNTEtMTUuMTQ1bC0zOS4zNTctMjAuNzczelwiXSxcImNoZXNzLXJvb2tcIjpbMzg0LDUxMixbXSxcImY0NDdcIixcIk04MS4yNDEgMjE1LjAyN0M4MC45NTcgMjU4LjkyIDc3LjQxMSAzNDguMDc2IDQ4IDQ0OGgyODcuOTgyYy0yOS40LTk5LjYwNC0zMi45MzYtMTg4LjkxMi0zMy4yMjEtMjMyLjk3NWw0NS40MTgtNDIuMzEyYTExLjk5OCAxMS45OTggMCAwIDAgMy44Mi04Ljc4VjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQ0aC00OFY0NGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC03MmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0NEg5NlY0NGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDQ0Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjExOS45MzJjMCAzLjMzIDEuMzg0IDYuNTEgMy44MiA4Ljc4bDQ1LjQyMSA0Mi4zMTV6TTE2MCAyNTZjMC0xNy42NzMgMTQuMzI3LTMyIDMyLTMyIDE3LjY3MyAwIDMyIDE0LjMyNyAzMiAzMnY2NC4wMDRoLTY0VjI1NnptMjI0IDIyMHYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDEyYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDM2MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEyelwiXSxcImNoZXZyb24tY2lyY2xlLWRvd25cIjpbNTEyLDUxMixbXSxcImYxM2FcIixcIk01MDQgMjU2YzAgMTM3LTExMSAyNDgtMjQ4IDI0OFM4IDM5MyA4IDI1NiAxMTkgOCAyNTYgOHMyNDggMTExIDI0OCAyNDh6TTI3MyAzNjkuOWwxMzUuNS0xMzUuNWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtMTctMTdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDI1NiAyODUuMSAxNTQuNCAxODMuNWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTE3IDE3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOUwyMzkgMzY5LjljOS40IDkuNCAyNC42IDkuNCAzNCAwelwiXSxcImNoZXZyb24tY2lyY2xlLWxlZnRcIjpbNTEyLDUxMixbXSxcImYxMzdcIixcIk0yNTYgNTA0QzExOSA1MDQgOCAzOTMgOCAyNTZTMTE5IDggMjU2IDhzMjQ4IDExMSAyNDggMjQ4LTExMSAyNDgtMjQ4IDI0OHpNMTQyLjEgMjczbDEzNS41IDEzNS41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDE3LTE3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDIyNi45IDI1NmwxMDEuNi0xMDEuNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtMTctMTdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDE0Mi4xIDIzOWMtOS40IDkuNC05LjQgMjQuNiAwIDM0elwiXSxcImNoZXZyb24tY2lyY2xlLXJpZ2h0XCI6WzUxMiw1MTIsW10sXCJmMTM4XCIsXCJNMjU2IDhjMTM3IDAgMjQ4IDExMSAyNDggMjQ4UzM5MyA1MDQgMjU2IDUwNCA4IDM5MyA4IDI1NiAxMTkgOCAyNTYgOHptMTEzLjkgMjMxTDIzNC40IDEwMy41Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMTcgMTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45TDI4NS4xIDI1NiAxODMuNSAzNTcuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMTcgMTdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMzY5LjkgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zNHpcIl0sXCJjaGV2cm9uLWNpcmNsZS11cFwiOls1MTIsNTEyLFtdLFwiZjEzOVwiLFwiTTggMjU2QzggMTE5IDExOSA4IDI1NiA4czI0OCAxMTEgMjQ4IDI0OC0xMTEgMjQ4LTI0OCAyNDhTOCAzOTMgOCAyNTZ6bTIzMS0xMTMuOUwxMDMuNSAyNzcuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMTcgMTdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMjU2IDIyNi45bDEwMS42IDEwMS42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDE3LTE3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDI3MyAxNDIuMWMtOS40LTkuNC0yNC42LTkuNC0zNCAwelwiXSxcImNoZXZyb24tZG93blwiOls0NDgsNTEyLFtdLFwiZjA3OFwiLFwiTTIwNy4wMjkgMzgxLjQ3NkwxMi42ODYgMTg3LjEzMmMtOS4zNzMtOS4zNzMtOS4zNzMtMjQuNTY5IDAtMzMuOTQxbDIyLjY2Ny0yMi42NjdjOS4zNTctOS4zNTcgMjQuNTIyLTkuMzc1IDMzLjkwMS0uMDRMMjI0IDI4NC41MDVsMTU0Ljc0NS0xNTQuMDIxYzkuMzc5LTkuMzM1IDI0LjU0NC05LjMxNyAzMy45MDEuMDRsMjIuNjY3IDIyLjY2N2M5LjM3MyA5LjM3MyA5LjM3MyAyNC41NjkgMCAzMy45NDFMMjQwLjk3MSAzODEuNDc2Yy05LjM3MyA5LjM3Mi0yNC41NjkgOS4zNzItMzMuOTQyIDB6XCJdLFwiY2hldnJvbi1sZWZ0XCI6WzMyMCw1MTIsW10sXCJmMDUzXCIsXCJNMzQuNTIgMjM5LjAzTDIyOC44NyA0NC42OWM5LjM3LTkuMzcgMjQuNTctOS4zNyAzMy45NCAwbDIyLjY3IDIyLjY3YzkuMzYgOS4zNiA5LjM3IDI0LjUyLjA0IDMzLjlMMTMxLjQ5IDI1NmwxNTQuMDIgMTU0Ljc1YzkuMzQgOS4zOCA5LjMyIDI0LjU0LS4wNCAzMy45bC0yMi42NyAyMi42N2MtOS4zNyA5LjM3LTI0LjU3IDkuMzctMzMuOTQgMEwzNC41MiAyNzIuOTdjLTkuMzctOS4zNy05LjM3LTI0LjU3IDAtMzMuOTR6XCJdLFwiY2hldnJvbi1yaWdodFwiOlszMjAsNTEyLFtdLFwiZjA1NFwiLFwiTTI4NS40NzYgMjcyLjk3MUw5MS4xMzIgNDY3LjMxNGMtOS4zNzMgOS4zNzMtMjQuNTY5IDkuMzczLTMzLjk0MSAwbC0yMi42NjctMjIuNjY3Yy05LjM1Ny05LjM1Ny05LjM3NS0yNC41MjItLjA0LTMzLjkwMUwxODguNTA1IDI1NiAzNC40ODQgMTAxLjI1NWMtOS4zMzUtOS4zNzktOS4zMTctMjQuNTQ0LjA0LTMzLjkwMWwyMi42NjctMjIuNjY3YzkuMzczLTkuMzczIDI0LjU2OS05LjM3MyAzMy45NDEgMEwyODUuNDc1IDIzOS4wM2M5LjM3MyA5LjM3MiA5LjM3MyAyNC41NjguMDAxIDMzLjk0MXpcIl0sXCJjaGV2cm9uLXVwXCI6WzQ0OCw1MTIsW10sXCJmMDc3XCIsXCJNMjQwLjk3MSAxMzAuNTI0bDE5NC4zNDMgMTk0LjM0M2M5LjM3MyA5LjM3MyA5LjM3MyAyNC41NjkgMCAzMy45NDFsLTIyLjY2NyAyMi42NjdjLTkuMzU3IDkuMzU3LTI0LjUyMiA5LjM3NS0zMy45MDEuMDRMMjI0IDIyNy40OTUgNjkuMjU1IDM4MS41MTZjLTkuMzc5IDkuMzM1LTI0LjU0NCA5LjMxNy0zMy45MDEtLjA0bC0yMi42NjctMjIuNjY3Yy05LjM3My05LjM3My05LjM3My0yNC41NjkgMC0zMy45NDFMMjA3LjAzIDEzMC41MjVjOS4zNzItOS4zNzMgMjQuNTY4LTkuMzczIDMzLjk0MS0uMDAxelwiXSxjaGlsZDpbMzg0LDUxMixbXSxcImYxYWVcIixcIk0xMjAgNzJjMC0zOS43NjUgMzIuMjM1LTcyIDcyLTcyczcyIDMyLjIzNSA3MiA3MmMwIDM5Ljc2NC0zMi4yMzUgNzItNzIgNzJzLTcyLTMyLjIzNi03Mi03MnptMjU0LjYyNyAxLjM3M2MtMTIuNDk2LTEyLjQ5Ny0zMi43NTgtMTIuNDk3LTQ1LjI1NCAwTDI0Mi43NDUgMTYwSDE0MS4yNTRMNTQuNjI3IDczLjM3M2MtMTIuNDk2LTEyLjQ5Ny0zMi43NTgtMTIuNDk3LTQ1LjI1NCAwLTEyLjQ5NyAxMi40OTctMTIuNDk3IDMyLjc1OCAwIDQ1LjI1NUwxMDQgMjEzLjI1NFY0ODBjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyaDE2YzE3LjY3MyAwIDMyLTE0LjMyNyAzMi0zMlYzNjhoMTZ2MTEyYzAgMTcuNjczIDE0LjMyNyAzMiAzMiAzMmgxNmMxNy42NzMgMCAzMi0xNC4zMjcgMzItMzJWMjEzLjI1NGw5NC42MjctOTQuNjI3YzEyLjQ5Ny0xMi40OTcgMTIuNDk3LTMyLjc1NyAwLTQ1LjI1NHpcIl0sY2h1cmNoOls2NDAsNTEyLFtdLFwiZjUxZFwiLFwiTTQ2NC40NiAyNDYuNjhMMzUyIDE3OS4yVjEyOGg0OGM4Ljg0IDAgMTYtNy4xNiAxNi0xNlY4MGMwLTguODQtNy4xNi0xNi0xNi0xNmgtNDhWMTZjMC04Ljg0LTcuMTYtMTYtMTYtMTZoLTMyYy04Ljg0IDAtMTYgNy4xNi0xNiAxNnY0OGgtNDhjLTguODQgMC0xNiA3LjE2LTE2IDE2djMyYzAgOC44NCA3LjE2IDE2IDE2IDE2aDQ4djUxLjJsLTExMi40NiA2Ny40OEEzMS45OTcgMzEuOTk3IDAgMCAwIDE2MCAyNzQuMTJWNTEyaDk2di05NmMwLTM1LjM1IDI4LjY1LTY0IDY0LTY0czY0IDI4LjY1IDY0IDY0djk2aDk2VjI3NC4xMmMwLTExLjI0LTUuOS0yMS42Ni0xNS41NC0yNy40NHpNMCAzOTUuOTZWNDk2YzAgOC44NCA3LjE2IDE2IDE2IDE2aDExMlYzMjBMMTkuMzkgMzY2LjU0QTMyLjAyNCAzMi4wMjQgMCAwIDAgMCAzOTUuOTZ6bTYyMC42MS0yOS40Mkw1MTIgMzIwdjE5MmgxMTJjOC44NCAwIDE2LTcuMTYgMTYtMTZWMzk1Ljk2YzAtMTIuOC03LjYzLTI0LjM3LTE5LjM5LTI5LjQyelwiXSxjaXJjbGU6WzUxMiw1MTIsW10sXCJmMTExXCIsXCJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHpcIl0sXCJjaXJjbGUtbm90Y2hcIjpbNTEyLDUxMixbXSxcImYxY2VcIixcIk0yODggMzkuMDU2djE2LjY1OWMwIDEwLjgwNCA3LjI4MSAyMC4xNTkgMTcuNjg2IDIzLjA2NkMzODMuMjA0IDEwMC40MzQgNDQwIDE3MS41MTggNDQwIDI1NmMwIDEwMS42ODktODIuMjk1IDE4NC0xODQgMTg0LTEwMS42ODkgMC0xODQtODIuMjk1LTE4NC0xODQgMC04NC40NyA1Ni43ODYtMTU1LjU2NCAxMzQuMzEyLTE3Ny4yMTlDMjE2LjcxOSA3NS44NzQgMjI0IDY2LjUxNyAyMjQgNTUuNzEyVjM5LjA2NGMwLTE1LjcwOS0xNC44MzQtMjcuMTUzLTMwLjA0Ni0yMy4yMzRDODYuNjAzIDQzLjQ4MiA3LjM5NCAxNDEuMjA2IDguMDAzIDI1Ny4zMzJjLjcyIDEzNy4wNTIgMTExLjQ3NyAyNDYuOTU2IDI0OC41MzEgMjQ2LjY2N0MzOTMuMjU1IDUwMy43MTEgNTA0IDM5Mi43ODggNTA0IDI1NmMwLTExNS42MzMtNzkuMTQtMjEyLjc3OS0xODYuMjExLTI0MC4yMzZDMzAyLjY3OCAxMS44ODkgMjg4IDIzLjQ1NiAyODggMzkuMDU2elwiXSxjbGlwYm9hcmQ6WzM4NCw1MTIsW10sXCJmMzI4XCIsXCJNMzg0IDExMnYzNTJjMCAyNi41MS0yMS40OSA0OC00OCA0OEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OFYxMTJjMC0yNi41MSAyMS40OS00OCA0OC00OGg4MGMwLTM1LjI5IDI4LjcxLTY0IDY0LTY0czY0IDI4LjcxIDY0IDY0aDgwYzI2LjUxIDAgNDggMjEuNDkgNDggNDh6TTE5MiA0MGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0czEwLjc0NSAyNCAyNCAyNCAyNC0xMC43NDUgMjQtMjQtMTAuNzQ1LTI0LTI0LTI0bTk2IDExNHYtMjBhNiA2IDAgMCAwLTYtNkgxMDJhNiA2IDAgMCAwLTYgNnYyMGE2IDYgMCAwIDAgNiA2aDE4MGE2IDYgMCAwIDAgNi02elwiXSxcImNsaXBib2FyZC1jaGVja1wiOlszODQsNTEyLFtdLFwiZjQ2Y1wiLFwiTTMzNiA2NGgtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4OGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTE5MiA0MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6bTEyMS4yIDIzMS44bC0xNDMgMTQxLjhjLTQuNyA0LjctMTIuMyA0LjYtMTctLjFsLTgyLjYtODMuM2MtNC43LTQuNy00LjYtMTIuMy4xLTE3TDk5LjEgMjg1YzQuNy00LjcgMTIuMy00LjYgMTcgLjFsNDYgNDYuNCAxMDYtMTA1LjJjNC43LTQuNyAxMi4zLTQuNiAxNyAuMWwyOC4yIDI4LjRjNC43IDQuOCA0LjYgMTIuMy0uMSAxN3pcIl0sXCJjbGlwYm9hcmQtbGlzdFwiOlszODQsNTEyLFtdLFwiZjQ2ZFwiLFwiTTMzNiA2NGgtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4OGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTk2IDQyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0LTEwLjcgMjQtMjQgMjR6bTAtOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNC0xMC43IDI0LTI0IDI0em0wLTk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0IDI0IDEwLjcgMjQgMjQtMTAuNyAyNC0yNCAyNHptOTYtMTkyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHptMTI4IDM2OGMwIDQuNC0zLjYgOC04IDhIMTY4Yy00LjQgMC04LTMuNi04LTh2LTE2YzAtNC40IDMuNi04IDgtOGgxNDRjNC40IDAgOCAzLjYgOCA4djE2em0wLTk2YzAgNC40LTMuNiA4LTggOEgxNjhjLTQuNCAwLTgtMy42LTgtOHYtMTZjMC00LjQgMy42LTggOC04aDE0NGM0LjQgMCA4IDMuNiA4IDh2MTZ6bTAtOTZjMCA0LjQtMy42IDgtOCA4SDE2OGMtNC40IDAtOC0zLjYtOC04di0xNmMwLTQuNCAzLjYtOCA4LThoMTQ0YzQuNCAwIDggMy42IDggOHYxNnpcIl0sY2xvY2s6WzUxMiw1MTIsW10sXCJmMDE3XCIsXCJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptNTcuMSAzNTAuMUwyMjQuOSAyOTRjLTMuMS0yLjMtNC45LTUuOS00LjktOS43VjExNmMwLTYuNiA1LjQtMTIgMTItMTJoNDhjNi42IDAgMTIgNS40IDEyIDEydjEzNy43bDYzLjUgNDYuMmM1LjQgMy45IDYuNSAxMS40IDIuNiAxNi44bC0yOC4yIDM4LjhjLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6XCJdLGNsb25lOls1MTIsNTEyLFtdLFwiZjI0ZFwiLFwiTTQ2NCAwYzI2LjUxIDAgNDggMjEuNDkgNDggNDh2Mjg4YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhIMTc2Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjQ4YzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMjg4TTE3NiA0MTZjLTQ0LjExMiAwLTgwLTM1Ljg4OC04MC04MFYxMjhINDhjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMjg4YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDh2LTQ4SDE3NnpcIl0sXCJjbG9zZWQtY2FwdGlvbmluZ1wiOls1MTIsNTEyLFtdLFwiZjIwYVwiLFwiTTQ2NCA2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnYyODhjMCAyNi41IDIxLjUgNDggNDggNDhoNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNMjE4LjEgMjg3LjdjMi44LTIuNSA3LjEtMi4xIDkuMi45bDE5LjUgMjcuN2MxLjcgMi40IDEuNSA1LjYtLjUgNy43LTUzLjYgNTYuOC0xNzIuOCAzMi4xLTE3Mi44LTY3LjkgMC05Ny4zIDEyMS43LTExOS41IDE3Mi41LTcwLjEgMi4xIDIgMi41IDMuMiAxIDUuN2wtMTcuNSAzMC41Yy0xLjkgMy4xLTYuMiA0LTkuMSAxLjctNDAuOC0zMi05NC42LTE0LjktOTQuNiAzMS4yLjEgNDggNTEuMSA3MC41IDkyLjMgMzIuNnptMTkwLjQgMGMyLjgtMi41IDcuMS0yLjEgOS4yLjlsMTkuNSAyNy43YzEuNyAyLjQgMS41IDUuNi0uNSA3LjctNTMuNSA1Ni45LTE3Mi43IDMyLjEtMTcyLjctNjcuOSAwLTk3LjMgMTIxLjctMTE5LjUgMTcyLjUtNzAuMSAyLjEgMiAyLjUgMy4yIDEgNS43TDQyMCAyMjIuMmMtMS45IDMuMS02LjIgNC05LjEgMS43LTQwLjgtMzItOTQuNi0xNC45LTk0LjYgMzEuMiAwIDQ4IDUxIDcwLjUgOTIuMiAzMi42elwiXSxjbG91ZDpbNjQwLDUxMixbXSxcImYwYzJcIixcIk01MzcuNiAyMjYuNmM0LjEtMTAuNyA2LjQtMjIuNCA2LjQtMzQuNiAwLTUzLTQzLTk2LTk2LTk2LTE5LjcgMC0zOC4xIDYtNTMuMyAxNi4yQzM2NyA2NC4yIDMxNS4zIDMyIDI1NiAzMmMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCAyLjcuMSA1LjQuMiA4LjFDNDAuMiAyMTkuOCAwIDI3My4yIDAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0aDM2OGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTYxLjktNDQtMTEzLjYtMTAyLjQtMTI1LjR6XCJdLFwiY2xvdWQtZG93bmxvYWQtYWx0XCI6WzY0MCw1MTIsW10sXCJmMzgxXCIsXCJNNTM3LjYgMjI2LjZjNC4xLTEwLjcgNi40LTIyLjQgNi40LTM0LjYgMC01My00My05Ni05Ni05Ni0xOS43IDAtMzguMSA2LTUzLjMgMTYuMkMzNjcgNjQuMiAzMTUuMyAzMiAyNTYgMzJjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgMi43LjEgNS40LjIgOC4xQzQwLjIgMjE5LjggMCAyNzMuMiAwIDMzNmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NGgzNjhjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC02MS45LTQ0LTExMy42LTEwMi40LTEyNS40em0tMTMyLjkgODguN0wyOTkuMyA0MjAuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBMMTcxLjMgMzE1LjNjLTEwLjEtMTAuMS0yLjktMjcuMyAxMS4zLTI3LjNIMjQ4VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoNDhjOC44IDAgMTYgNy4yIDE2IDE2djExMmg2NS40YzE0LjIgMCAyMS40IDE3LjIgMTEuMyAyNy4zelwiXSxcImNsb3VkLXVwbG9hZC1hbHRcIjpbNjQwLDUxMixbXSxcImYzODJcIixcIk01MzcuNiAyMjYuNmM0LjEtMTAuNyA2LjQtMjIuNCA2LjQtMzQuNiAwLTUzLTQzLTk2LTk2LTk2LTE5LjcgMC0zOC4xIDYtNTMuMyAxNi4yQzM2NyA2NC4yIDMxNS4zIDMyIDI1NiAzMmMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCAyLjcuMSA1LjQuMiA4LjFDNDAuMiAyMTkuOCAwIDI3My4yIDAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0aDM2OGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTYxLjktNDQtMTEzLjYtMTAyLjQtMTI1LjR6TTM5My40IDI4OEgzMjh2MTEyYzAgOC44LTcuMiAxNi0xNiAxNmgtNDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyODhoLTY1LjRjLTE0LjMgMC0yMS40LTE3LjItMTEuMy0yNy4zbDEwNS40LTEwNS40YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDEwNS40IDEwNS40YzEwLjEgMTAuMSAyLjkgMjcuMy0xMS4zIDI3LjN6XCJdLGNvY2t0YWlsOls1NzYsNTEyLFtdLFwiZjU2MVwiLFwiTTI5NiA0NjRoLTU2VjMzOC43OGwxNjguNzQtMTY4LjczYzE1LjUyLTE1LjUyIDQuNTMtNDIuMDUtMTcuNDItNDIuMDVIMjQuNjhjLTIxLjk1IDAtMzIuOTQgMjYuNTMtMTcuNDIgNDIuMDVMMTc2IDMzOC43OFY0NjRoLTU2Yy0yMi4wOSAwLTQwIDE3LjkxLTQwIDQwIDAgNC40MiAzLjU4IDggOCA4aDI0MGM0LjQyIDAgOC0zLjU4IDgtOCAwLTIyLjA5LTE3LjkxLTQwLTQwLTQwek00MzIgMGMtNjIuNjEgMC0xMTUuMzUgNDAuMi0xMzUuMTggOTZoNTIuNTRjMTYuNjUtMjguNTUgNDcuMjctNDggODIuNjQtNDggNTIuOTMgMCA5NiA0My4wNiA5NiA5NnMtNDMuMDcgOTYtOTYgOTZjLTE0LjA0IDAtMjcuMjktMy4yLTM5LjMyLTguNjRsLTM1LjI2IDM1LjI2QzM3OS4yMyAyNzkuOTIgNDA0LjU5IDI4OCA0MzIgMjg4Yzc5LjUzIDAgMTQ0LTY0LjQ3IDE0NC0xNDRTNTExLjUzIDAgNDMyIDB6XCJdLGNvZGU6WzY0MCw1MTIsW10sXCJmMTIxXCIsXCJNMjc4LjkgNTExLjVsLTYxLTE3LjdjLTYuNC0xLjgtMTAtOC41LTguMi0xNC45TDM0Ni4yIDguN2MxLjgtNi40IDguNS0xMCAxNC45LTguMmw2MSAxNy43YzYuNCAxLjggMTAgOC41IDguMiAxNC45TDI5My44IDUwMy4zYy0xLjkgNi40LTguNSAxMC4xLTE0LjkgOC4yem0tMTE0LTExMi4ybDQzLjUtNDYuNGM0LjYtNC45IDQuMy0xMi43LS44LTE3LjJMMTE3IDI1Nmw5MC42LTc5LjdjNS4xLTQuNSA1LjUtMTIuMy44LTE3LjJsLTQzLjUtNDYuNGMtNC41LTQuOC0xMi4xLTUuMS0xNy0uNUwzLjggMjQ3LjJjLTUuMSA0LjctNS4xIDEyLjggMCAxNy41bDE0NC4xIDEzNS4xYzQuOSA0LjYgMTIuNSA0LjQgMTctLjV6bTMyNy4yLjZsMTQ0LjEtMTM1LjFjNS4xLTQuNyA1LjEtMTIuOCAwLTE3LjVMNDkyLjEgMTEyLjFjLTQuOC00LjUtMTIuNC00LjMtMTcgLjVMNDMxLjYgMTU5Yy00LjYgNC45LTQuMyAxMi43LjggMTcuMkw1MjMgMjU2bC05MC42IDc5LjdjLTUuMSA0LjUtNS41IDEyLjMtLjggMTcuMmw0My41IDQ2LjRjNC41IDQuOSAxMi4xIDUuMSAxNyAuNnpcIl0sXCJjb2RlLWJyYW5jaFwiOlszODQsNTEyLFtdLFwiZjEyNlwiLFwiTTM4NCAxNDRjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi40IDI0LjMgNjcuMSA1Ny41IDc2LjgtLjYgMTYuMS00LjIgMjguNS0xMSAzNi45LTE1LjQgMTkuMi00OS4zIDIyLjQtODUuMiAyNS43LTI4LjIgMi42LTU3LjQgNS40LTgxLjMgMTYuOXYtMTQ0YzMyLjUtMTAuMiA1Ni00MC41IDU2LTc2LjMgMC00NC4yLTM1LjgtODAtODAtODBTMCAzNS44IDAgODBjMCAzNS44IDIzLjUgNjYuMSA1NiA3Ni4zdjE5OS4zQzIzLjUgMzY1LjkgMCAzOTYuMiAwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzQtMjEuMi02My4xLTUxLjItNzQuNiAzLjEtNS4yIDcuOC05LjggMTQuOS0xMy40IDE2LjItOC4yIDQwLjQtMTAuNCA2Ni4xLTEyLjggNDIuMi0zLjkgOTAtOC40IDExOC4yLTQzLjQgMTQtMTcuNCAyMS4xLTM5LjggMjEuNi02Ny45IDMxLjYtMTAuOCA1NC40LTQwLjcgNTQuNC03NS45ek04MCA2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNi0xNi03LjItMTYtMTYgNy4yLTE2IDE2LTE2em0wIDM4NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNiAxNiA3LjIgMTYgMTYtNy4yIDE2LTE2IDE2em0yMjQtMzIwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2LTE2LTcuMi0xNi0xNiA3LjItMTYgMTYtMTZ6XCJdLGNvZmZlZTpbNjQwLDUxMixbXSxcImYwZjRcIixcIk0xOTIgMzg0aDE5MmM1MyAwIDk2LTQzIDk2LTk2aDMyYzcwLjYgMCAxMjgtNTcuNCAxMjgtMTI4UzU4Mi42IDMyIDUxMiAzMkgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0djIzMmMwIDUzIDQzIDk2IDk2IDk2ek01MTIgOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRoLTMyVjk2aDMyem00Ny43IDM4NEg0OC4zYy00Ny42IDAtNjEtNjQtMzYtNjRoNTgzLjNjMjUgMCAxMS44IDY0LTM1LjkgNjR6XCJdLGNvZzpbNTEyLDUxMixbXSxcImYwMTNcIixcIk00NDQuNzg4IDI5MS4xbDQyLjYxNiAyNC41OTljNC44NjcgMi44MDkgNy4xMjYgOC42MTggNS40NTkgMTMuOTg1LTExLjA3IDM1LjY0Mi0yOS45NyA2Ny44NDItNTQuNjg5IDk0LjU4NmExMi4wMTYgMTIuMDE2IDAgMCAxLTE0LjgzMiAyLjI1NGwtNDIuNTg0LTI0LjU5NWExOTEuNTc3IDE5MS41NzcgMCAwIDEtNjAuNzU5IDM1LjEzdjQ5LjE4MmExMi4wMSAxMi4wMSAwIDAgMS05LjM3NyAxMS43MThjLTM0Ljk1NiA3Ljg1LTcyLjQ5OSA4LjI1Ni0xMDkuMjE5LjAwNy01LjQ5LTEuMjMzLTkuNDAzLTYuMDk2LTkuNDAzLTExLjcyM3YtNDkuMTg0YTE5MS41NTUgMTkxLjU1NSAwIDAgMS02MC43NTktMzUuMTNsLTQyLjU4NCAyNC41OTVhMTIuMDE2IDEyLjAxNiAwIDAgMS0xNC44MzItMi4yNTRjLTI0LjcxOC0yNi43NDQtNDMuNjE5LTU4Ljk0NC01NC42ODktOTQuNTg2LTEuNjY3LTUuMzY2LjU5Mi0xMS4xNzUgNS40NTktMTMuOTg1TDY3LjIxMiAyOTEuMWExOTMuNDggMTkzLjQ4IDAgMCAxIDAtNzAuMTk5bC00Mi42MTYtMjQuNTk5Yy00Ljg2Ny0yLjgwOS03LjEyNi04LjYxOC01LjQ1OS0xMy45ODUgMTEuMDctMzUuNjQyIDI5Ljk3LTY3Ljg0MiA1NC42ODktOTQuNTg2YTEyLjAxNiAxMi4wMTYgMCAwIDEgMTQuODMyLTIuMjU0bDQyLjU4NCAyNC41OTVhMTkxLjU3NyAxOTEuNTc3IDAgMCAxIDYwLjc1OS0zNS4xM1YyNS43NTlhMTIuMDEgMTIuMDEgMCAwIDEgOS4zNzctMTEuNzE4YzM0Ljk1Ni03Ljg1IDcyLjQ5OS04LjI1NiAxMDkuMjE5LS4wMDcgNS40OSAxLjIzMyA5LjQwMyA2LjA5NiA5LjQwMyAxMS43MjN2NDkuMTg0YTE5MS41NTUgMTkxLjU1NSAwIDAgMSA2MC43NTkgMzUuMTNsNDIuNTg0LTI0LjU5NWExMi4wMTYgMTIuMDE2IDAgMCAxIDE0LjgzMiAyLjI1NGMyNC43MTggMjYuNzQ0IDQzLjYxOSA1OC45NDQgNTQuNjg5IDk0LjU4NiAxLjY2NyA1LjM2Ni0uNTkyIDExLjE3NS01LjQ1OSAxMy45ODVMNDQ0Ljc4OCAyMjAuOWExOTMuNDg1IDE5My40ODUgMCAwIDEgMCA3MC4yek0zMzYgMjU2YzAtNDQuMTEyLTM1Ljg4OC04MC04MC04MHMtODAgMzUuODg4LTgwIDgwIDM1Ljg4OCA4MCA4MCA4MCA4MC0zNS44ODggODAtODB6XCJdLGNvZ3M6WzY0MCw1MTIsW10sXCJmMDg1XCIsXCJNNTEyLjEgMTkxbC04LjIgMTQuM2MtMyA1LjMtOS40IDcuNS0xNS4xIDUuNC0xMS44LTQuNC0yMi42LTEwLjctMzIuMS0xOC42LTQuNi0zLjgtNS44LTEwLjUtMi44LTE1LjdsOC4yLTE0LjNjLTYuOS04LTEyLjMtMTcuMy0xNS45LTI3LjRoLTE2LjVjLTYgMC0xMS4yLTQuMy0xMi4yLTEwLjMtMi0xMi0yLjEtMjQuNiAwLTM3LjEgMS02IDYuMi0xMC40IDEyLjItMTAuNGgxNi41YzMuNi0xMC4xIDktMTkuNCAxNS45LTI3LjRsLTguMi0xNC4zYy0zLTUuMi0xLjktMTEuOSAyLjgtMTUuNyA5LjUtNy45IDIwLjQtMTQuMiAzMi4xLTE4LjYgNS43LTIuMSAxMi4xLjEgMTUuMSA1LjRsOC4yIDE0LjNjMTAuNS0xLjkgMjEuMi0xLjkgMzEuNyAwTDU1MiA2LjNjMy01LjMgOS40LTcuNSAxNS4xLTUuNCAxMS44IDQuNCAyMi42IDEwLjcgMzIuMSAxOC42IDQuNiAzLjggNS44IDEwLjUgMi44IDE1LjdsLTguMiAxNC4zYzYuOSA4IDEyLjMgMTcuMyAxNS45IDI3LjRoMTYuNWM2IDAgMTEuMiA0LjMgMTIuMiAxMC4zIDIgMTIgMi4xIDI0LjYgMCAzNy4xLTEgNi02LjIgMTAuNC0xMi4yIDEwLjRoLTE2LjVjLTMuNiAxMC4xLTkgMTkuNC0xNS45IDI3LjRsOC4yIDE0LjNjMyA1LjIgMS45IDExLjktMi44IDE1LjctOS41IDcuOS0yMC40IDE0LjItMzIuMSAxOC42LTUuNyAyLjEtMTIuMS0uMS0xNS4xLTUuNGwtOC4yLTE0LjNjLTEwLjQgMS45LTIxLjIgMS45LTMxLjcgMHptLTEwLjUtNTguOGMzOC41IDI5LjYgODIuNC0xNC4zIDUyLjgtNTIuOC0zOC41LTI5LjctODIuNCAxNC4zLTUyLjggNTIuOHpNMzg2LjMgMjg2LjFsMzMuNyAxNi44YzEwLjEgNS44IDE0LjUgMTguMSAxMC41IDI5LjEtOC45IDI0LjItMjYuNCA0Ni40LTQyLjYgNjUuOC03LjQgOC45LTIwLjIgMTEuMS0zMC4zIDUuM2wtMjkuMS0xNi44Yy0xNiAxMy43LTM0LjYgMjQuNi01NC45IDMxLjd2MzMuNmMwIDExLjYtOC4zIDIxLjYtMTkuNyAyMy42LTI0LjYgNC4yLTUwLjQgNC40LTc1LjkgMC0xMS41LTItMjAtMTEuOS0yMC0yMy42VjQxOGMtMjAuMy03LjItMzguOS0xOC01NC45LTMxLjdMNzQgNDAzYy0xMCA1LjgtMjIuOSAzLjYtMzAuMy01LjMtMTYuMi0xOS40LTMzLjMtNDEuNi00Mi4yLTY1LjctNC0xMC45LjQtMjMuMiAxMC41LTI5LjFsMzMuMy0xNi44Yy0zLjktMjAuOS0zLjktNDIuNCAwLTYzLjRMMTIgMjA1LjhjLTEwLjEtNS44LTE0LjYtMTguMS0xMC41LTI5IDguOS0yNC4yIDI2LTQ2LjQgNDIuMi02NS44IDcuNC04LjkgMjAuMi0xMS4xIDMwLjMtNS4zbDI5LjEgMTYuOGMxNi0xMy43IDM0LjYtMjQuNiA1NC45LTMxLjdWNTcuMWMwLTExLjUgOC4yLTIxLjUgMTkuNi0yMy41IDI0LjYtNC4yIDUwLjUtNC40IDc2LS4xIDExLjUgMiAyMCAxMS45IDIwIDIzLjZ2MzMuNmMyMC4zIDcuMiAzOC45IDE4IDU0LjkgMzEuN2wyOS4xLTE2LjhjMTAtNS44IDIyLjktMy42IDMwLjMgNS4zIDE2LjIgMTkuNCAzMy4yIDQxLjYgNDIuMSA2NS44IDQgMTAuOS4xIDIzLjItMTAgMjkuMWwtMzMuNyAxNi44YzMuOSAyMSAzLjkgNDIuNSAwIDYzLjV6bS0xMTcuNiAyMS4xYzU5LjItNzctMjguNy0xNjQuOS0xMDUuNy0xMDUuNy01OS4yIDc3IDI4LjcgMTY0LjkgMTA1LjcgMTA1Ljd6bTI0My40IDE4Mi43bC04LjIgMTQuM2MtMyA1LjMtOS40IDcuNS0xNS4xIDUuNC0xMS44LTQuNC0yMi42LTEwLjctMzIuMS0xOC42LTQuNi0zLjgtNS44LTEwLjUtMi44LTE1LjdsOC4yLTE0LjNjLTYuOS04LTEyLjMtMTcuMy0xNS45LTI3LjRoLTE2LjVjLTYgMC0xMS4yLTQuMy0xMi4yLTEwLjMtMi0xMi0yLjEtMjQuNiAwLTM3LjEgMS02IDYuMi0xMC40IDEyLjItMTAuNGgxNi41YzMuNi0xMC4xIDktMTkuNCAxNS45LTI3LjRsLTguMi0xNC4zYy0zLTUuMi0xLjktMTEuOSAyLjgtMTUuNyA5LjUtNy45IDIwLjQtMTQuMiAzMi4xLTE4LjYgNS43LTIuMSAxMi4xLjEgMTUuMSA1LjRsOC4yIDE0LjNjMTAuNS0xLjkgMjEuMi0xLjkgMzEuNyAwbDguMi0xNC4zYzMtNS4zIDkuNC03LjUgMTUuMS01LjQgMTEuOCA0LjQgMjIuNiAxMC43IDMyLjEgMTguNiA0LjYgMy44IDUuOCAxMC41IDIuOCAxNS43bC04LjIgMTQuM2M2LjkgOCAxMi4zIDE3LjMgMTUuOSAyNy40aDE2LjVjNiAwIDExLjIgNC4zIDEyLjIgMTAuMyAyIDEyIDIuMSAyNC42IDAgMzcuMS0xIDYtNi4yIDEwLjQtMTIuMiAxMC40aC0xNi41Yy0zLjYgMTAuMS05IDE5LjQtMTUuOSAyNy40bDguMiAxNC4zYzMgNS4yIDEuOSAxMS45LTIuOCAxNS43LTkuNSA3LjktMjAuNCAxNC4yLTMyLjEgMTguNi01LjcgMi4xLTEyLjEtLjEtMTUuMS01LjRsLTguMi0xNC4zYy0xMC40IDEuOS0yMS4yIDEuOS0zMS43IDB6TTUwMS42IDQzMWMzOC41IDI5LjYgODIuNC0xNC4zIDUyLjgtNTIuOC0zOC41LTI5LjYtODIuNCAxNC4zLTUyLjggNTIuOHpcIl0sY29pbnM6WzUxMiw1MTIsW10sXCJmNTFlXCIsXCJNMCA0MDUuM1Y0NDhjMCAzNS4zIDg2IDY0IDE5MiA2NHMxOTItMjguNyAxOTItNjR2LTQyLjdDMzQyLjcgNDM0LjQgMjY3LjIgNDQ4IDE5MiA0NDhTNDEuMyA0MzQuNCAwIDQwNS4zek0zMjAgMTI4YzEwNiAwIDE5Mi0yOC43IDE5Mi02NFM0MjYgMCAzMjAgMCAxMjggMjguNyAxMjggNjRzODYgNjQgMTkyIDY0ek0wIDMwMC40VjM1MmMwIDM1LjMgODYgNjQgMTkyIDY0czE5Mi0yOC43IDE5Mi02NHYtNTEuNmMtNDEuMyAzNC0xMTYuOSA1MS42LTE5MiA1MS42UzQxLjMgMzM0LjQgMCAzMDAuNHptNDE2IDExYzU3LjMtMTEuMSA5Ni0zMS43IDk2LTU1LjR2LTQyLjdjLTIzLjIgMTYuNC01Ny4zIDI3LjYtOTYgMzQuNXY2My42ek0xOTIgMTYwQzg2IDE2MCAwIDE5NS44IDAgMjQwczg2IDgwIDE5MiA4MCAxOTItMzUuOCAxOTItODAtODYtODAtMTkyLTgwem0yMTkuMyA1Ni4zYzYwLTEwLjggMTAwLjctMzIgMTAwLjctNTYuM3YtNDIuN2MtMzUuNSAyNS4xLTk2LjUgMzguNi0xNjAuNyA0MS44IDI5LjUgMTQuMyA1MS4yIDMzLjUgNjAgNTcuMnpcIl0sY29sdW1uczpbNTEyLDUxMixbXSxcImYwZGJcIixcIk00NjQgMzJINDhDMjEuNDkgMzIgMCA1My40OSAwIDgwdjM1MmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQxNmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6TTIyNCA0MTZINjRWMTYwaDE2MHYyNTZ6bTIyNCAwSDI4OFYxNjBoMTYwdjI1NnpcIl0sY29tbWVudDpbNTEyLDUxMixbXSxcImYwNzVcIixcIk0yNTYgMzJDMTE0LjYgMzIgMCAxMjUuMSAwIDI0MGMwIDQ5LjYgMjEuNCA5NSA1NyAxMzAuN0M0NC41IDQyMS4xIDIuNyA0NjYgMi4yIDQ2Ni41Yy0yLjIgMi4zLTIuOCA1LjctMS41IDguN1M0LjggNDgwIDggNDgwYzY2LjMgMCAxMTYtMzEuOCAxNDAuNi01MS40IDMyLjcgMTIuMyA2OSAxOS40IDEwNy40IDE5LjQgMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMnpcIl0sXCJjb21tZW50LWFsdFwiOls1MTIsNTEyLFtdLFwiZjI3YVwiLFwiTTQ0OCAwSDY0QzI4LjcgMCAwIDI4LjcgMCA2NHYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRoOTZ2ODRjMCA5LjggMTEuMiAxNS41IDE5LjEgOS43TDMwNCA0MTZoMTQ0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0elwiXSxcImNvbW1lbnQtZG90c1wiOls1MTIsNTEyLFtdLFwiZjRhZFwiLFwiTTI1NiAzMkMxMTQuNiAzMiAwIDEyNS4xIDAgMjQwYzAgNDkuNiAyMS40IDk1IDU3IDEzMC43QzQ0LjUgNDIxLjEgMi43IDQ2NiAyLjIgNDY2LjVjLTIuMiAyLjMtMi44IDUuNy0xLjUgOC43UzQuOCA0ODAgOCA0ODBjNjYuMyAwIDExNi0zMS44IDE0MC42LTUxLjQgMzIuNyAxMi4zIDY5IDE5LjQgMTA3LjQgMTkuNCAxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyek0xMjggMjcyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyIDMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMnptMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyem0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6XCJdLFwiY29tbWVudC1zbGFzaFwiOls2NDAsNTEyLFtdLFwiZjRiM1wiLFwiTTY0IDI0MGMwIDQ5LjYgMjEuNCA5NSA1NyAxMzAuNy0xMi42IDUwLjMtNTQuMyA5NS4yLTU0LjggOTUuOC0yLjIgMi4zLTIuOCA1LjctMS41IDguNyAxLjMgMi45IDQuMSA0LjggNy4zIDQuOCA2Ni4zIDAgMTE2LTMxLjggMTQwLjYtNTEuNCAzMi43IDEyLjMgNjkgMTkuNCAxMDcuNCAxOS40IDI3LjQgMCA1My43LTMuNiA3OC40LTEwTDcyLjkgMTg2LjRjLTUuNiAxNy4xLTguOSAzNS04LjkgNTMuNnptNTY5LjggMjE4LjFsLTExNC40LTg4LjRDNTU0LjYgMzM0LjEgNTc2IDI4OS4yIDU3NiAyNDBjMC0xMTQuOS0xMTQuNi0yMDgtMjU2LTIwOC02NS4xIDAtMTI0LjIgMjAuMS0xNjkuNCA1Mi43TDQ1LjUgMy40QzM4LjUtMiAyOC41LS44IDIzIDYuMkwzLjQgMzEuNGMtNS40IDctNC4yIDE3IDIuOCAyMi40bDU4OC40IDQ1NC43YzcgNS40IDE3IDQuMiAyMi41LTIuOGwxOS42LTI1LjNjNS40LTYuOCA0LjEtMTYuOS0yLjktMjIuM3pcIl0sY29tbWVudHM6WzU3Niw1MTIsW10sXCJmMDg2XCIsXCJNNDE2IDE5MmMwLTg4LjQtOTMuMS0xNjAtMjA4LTE2MFMwIDEwMy42IDAgMTkyYzAgMzQuMyAxNC4xIDY1LjkgMzggOTItMTMuNCAzMC4yLTM1LjUgNTQuMi0zNS44IDU0LjUtMi4yIDIuMy0yLjggNS43LTEuNSA4LjdTNC44IDM1MiA4IDM1MmMzNi42IDAgNjYuOS0xMi4zIDg4LjctMjUgMzIuMiAxNS43IDcwLjMgMjUgMTExLjMgMjUgMTE0LjkgMCAyMDgtNzEuNiAyMDgtMTYwem0xMjIgMjIwYzIzLjktMjYgMzgtNTcuNyAzOC05MiAwLTY2LjktNTMuNS0xMjQuMi0xMjkuMy0xNDguMS45IDYuNiAxLjMgMTMuMyAxLjMgMjAuMSAwIDEwNS45LTEwNy43IDE5Mi0yNDAgMTkyLTEwLjggMC0yMS4zLS44LTMxLjctMS45QzIwNy44IDQzOS42IDI4MS44IDQ4MCAzNjggNDgwYzQxIDAgNzkuMS05LjIgMTExLjMtMjUgMjEuOCAxMi43IDUyLjEgMjUgODguNyAyNSAzLjIgMCA2LjEtMS45IDcuMy00LjggMS4zLTIuOS43LTYuMy0xLjUtOC43LS4zLS4zLTIyLjQtMjQuMi0zNS44LTU0LjV6XCJdLFwiY29tcGFjdC1kaXNjXCI6WzQ5Niw1MTIsW10sXCJmNTFmXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHpNODggMjU2SDU2YzAtMTA1LjkgODYuMS0xOTIgMTkyLTE5MnYzMmMtODguMiAwLTE2MCA3MS44LTE2MCAxNjB6bTE2MCA5NmMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NiA5NiA0MyA5NiA5Ni00MyA5Ni05NiA5NnptMC0xMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyelwiXSxjb21wYXNzOls1MTIsNTEyLFtdLFwiZjE0ZVwiLFwiTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0zMDcuNDQ2IDEyMC44NDRsLTEwMi42NDIgOTcuNzc5YTIzLjk5NyAyMy45OTcgMCAwIDAtNi43NzIgMTEuNzI5bC0zMy4zNTkgMTM3Ljc3OWMtNS42OCAyMy40NTkgMjIuNzc3IDM5LjMxOCAzOS44OCAyMy4wMjRsMTAyLjY0LTk3Ljc3OWEyMy45OSAyMy45OSAwIDAgMCA2Ljc3Mi0xMS43MjlsMzMuMzU5LTEzNy43NzljNS42MTgtMjMuMTk4LTIyLjU5MS0zOS40OTMtMzkuODc4LTIzLjAyNHpNMjU2IDIyNGMtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMyczE0LjMyNyAzMiAzMiAzMiAzMi0xNC4zMjcgMzItMzItMTQuMzI3LTMyLTMyLTMyelwiXSxjb21wcmVzczpbNDQ4LDUxMixbXSxcImYwNjZcIixcIk00MzYgMTkySDMxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNDRjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY4NGg4NGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDBjMCA2LjYtNS40IDEyLTEyIDEyem0tMjc2LTI0VjQ0YzAtNi42LTUuNC0xMi0xMi0xMmgtNDBjLTYuNiAwLTEyIDUuNC0xMiAxMnY4NEgxMmMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmgxMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjR6bTAgMzAwVjM0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNEgxMmMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmg4NHY4NGMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEyem0xOTIgMHYtODRoODRjNi42IDAgMTItNS40IDEyLTEydi00MGMwLTYuNi01LjQtMTItMTItMTJIMzEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYxMjRjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnpcIl0sXCJjb25jaWVyZ2UtYmVsbFwiOls1MTIsNTEyLFtdLFwiZjU2MlwiLFwiTTI4OCAxMzAuNTRWMTEyaDE2YzguODQgMCAxNi03LjE2IDE2LTE2VjgwYzAtOC44NC03LjE2LTE2LTE2LTE2aC05NmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MTZjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTZ2MTguNTRDMTE1LjQ5IDE0Ni4xMSAzMiAyMzkuMTggMzIgMzUyaDQ0OGMwLTExMi44Mi04My40OS0yMDUuODktMTkyLTIyMS40NnpNNDk2IDM4NEgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoNDgwYzguODQgMCAxNi03LjE2IDE2LTE2di0zMmMwLTguODQtNy4xNi0xNi0xNi0xNnpcIl0sY29va2llOls1MTIsNTEyLFtdLFwiZjU2M1wiLFwiTTUxMC4zNyAyNTQuNzlsLTEyLjA4LTc2LjI2YTEzMi40OTMgMTMyLjQ5MyAwIDAgMC0zNy4xNi03Mi45NWwtNTQuNzYtNTQuNzVjLTE5LjczLTE5LjcyLTQ1LjE4LTMyLjctNzIuNzEtMzcuMDVsLTc2LjctMTIuMTVjLTI3LjUxLTQuMzYtNTUuNjkuMTEtODAuNTIgMTIuNzZMMTA3LjMyIDQ5LjZhMTMyLjI1IDEzMi4yNSAwIDAgMC01Ny43OSA1Ny44bC0zNS4xIDY4Ljg4YTEzMi42MDIgMTMyLjYwMiAwIDAgMC0xMi44MiA4MC45NGwxMi4wOCA3Ni4yN2ExMzIuNDkzIDEzMi40OTMgMCAwIDAgMzcuMTYgNzIuOTVsNTQuNzYgNTQuNzVhMTMyLjA4NyAxMzIuMDg3IDAgMCAwIDcyLjcxIDM3LjA1bDc2LjcgMTIuMTRjMjcuNTEgNC4zNiA1NS42OS0uMTEgODAuNTItMTIuNzVsNjkuMTItMzUuMjFhMTMyLjMwMiAxMzIuMzAyIDAgMCAwIDU3Ljc5LTU3LjhsMzUuMS02OC44N2MxMi43MS0yNC45NiAxNy4yLTUzLjMgMTIuODItODAuOTZ6TTE3NiAzNjhjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6bTMyLTE2MGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMTYwIDEyOGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sXCJjb29raWUtYml0ZVwiOls1MTIsNTEyLFtdLFwiZjU2NFwiLFwiTTUxMC41MiAyNTUuODJjLTY5Ljk3LS44NS0xMjYuNDctNTcuNjktMTI2LjQ3LTEyNy44Ni03MC4xNyAwLTEyNy01Ni40OS0xMjcuODYtMTI2LjQ1LTI3LjI2LTQuMTQtNTUuMTMuMy03OS43MiAxMi44MmwtNjkuMTMgMzUuMjJhMTMyLjIyMSAxMzIuMjIxIDAgMCAwLTU3Ljc5IDU3LjgxbC0zNS4xIDY4Ljg4YTEzMi42NDUgMTMyLjY0NSAwIDAgMC0xMi44MiA4MC45NWwxMi4wOCA3Ni4yN2ExMzIuNTIxIDEzMi41MjEgMCAwIDAgMzcuMTYgNzIuOTZsNTQuNzcgNTQuNzZhMTMyLjAzNiAxMzIuMDM2IDAgMCAwIDcyLjcxIDM3LjA2bDc2LjcxIDEyLjE1YzI3LjUxIDQuMzYgNTUuNy0uMTEgODAuNTMtMTIuNzZsNjkuMTMtMzUuMjFhMTMyLjI3MyAxMzIuMjczIDAgMCAwIDU3Ljc5LTU3LjgxbDM1LjEtNjguODhjMTIuNTYtMjQuNjQgMTcuMDEtNTIuNTggMTIuOTEtNzkuOTF6TTE3NiAzNjhjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6bTMyLTE2MGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMTYwIDEyOGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sY29weTpbNDQ4LDUxMixbXSxcImYwYzVcIixcIk0zMjAgNDQ4djQwYzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNEgyNGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjEyMGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoNzJ2Mjk2YzAgMzAuODc5IDI1LjEyMSA1NiA1NiA1NmgxNjh6bTAtMzQ0VjBIMTUyYy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2MzY4YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgyNzJjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjEyOEgzNDRjLTEzLjIgMC0yNC0xMC44LTI0LTI0em0xMjAuOTcxLTMxLjAyOUwzNzUuMDI5IDcuMDI5QTI0IDI0IDAgMCAwIDM1OC4wNTkgMEgzNTJ2OTZoOTZ2LTYuMDU5YTI0IDI0IDAgMCAwLTcuMDI5LTE2Ljk3elwiXSxjb3B5cmlnaHQ6WzUxMiw1MTIsW10sXCJmMWY5XCIsXCJNMjU2IDhDMTE5LjAzMyA4IDggMTE5LjAzMyA4IDI1NnMxMTEuMDMzIDI0OCAyNDggMjQ4IDI0OC0xMTEuMDMzIDI0OC0yNDhTMzkyLjk2NyA4IDI1NiA4em0xMTcuMTM0IDM0Ni43NTNjLTEuNTkyIDEuODY3LTM5Ljc3NiA0NS43MzEtMTA5Ljg1MSA0NS43MzEtODQuNjkyIDAtMTQ0LjQ4NC02My4yNi0xNDQuNDg0LTE0NS41NjcgMC04MS4zMDMgNjIuMDA0LTE0My40MDEgMTQzLjc2Mi0xNDMuNDAxIDY2Ljk1NyAwIDEwMS45NjUgMzcuMzE1IDEwMy40MjIgMzguOTA0YTEyIDEyIDAgMCAxIDEuMjM4IDE0LjYyM2wtMjIuMzggMzQuNjU1Yy00LjA0OSA2LjI2Ny0xMi43NzQgNy4zNTEtMTguMjM0IDIuMjk1LS4yMzMtLjIxNC0yNi41MjktMjMuODgtNjEuODgtMjMuODgtNDYuMTE2IDAtNzMuOTE2IDMzLjU3NS03My45MTYgNzYuMDgyIDAgMzkuNjAyIDI1LjUxNCA3OS42OTIgNzQuMjc3IDc5LjY5MiAzOC42OTcgMCA2NS4yOC0yOC4zMzggNjUuNTQ0LTI4LjYyNSA1LjEzMi01LjU2NSAxNC4wNTktNS4wMzMgMTguNTA4IDEuMDUzbDI0LjU0NyAzMy41NzJhMTIuMDAxIDEyLjAwMSAwIDAgMS0uNTUzIDE0Ljg2NnpcIl0sY291Y2g6WzY0MCw1MTIsW10sXCJmNGI4XCIsXCJNMTYwIDIyNHY2NGgzMjB2LTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0aDMyYzAtNTMtNDMtOTYtOTYtOTZIMTYwYy01MyAwLTk2IDQzLTk2IDk2aDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0em00MTYtMzJoLTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5NkgxMjh2LTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NCAwIDIzLjYgMTMgNDQgMzIgNTUuMVY0MzJjMCA4LjggNy4yIDE2IDE2IDE2aDY0YzguOCAwIDE2LTcuMiAxNi0xNnYtMTZoMzg0djE2YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZWMzExLjFjMTktMTEuMSAzMi0zMS41IDMyLTU1LjEgMC0zNS4zLTI4LjctNjQtNjQtNjR6XCJdLFwiY3JlZGl0LWNhcmRcIjpbNTc2LDUxMixbXSxcImYwOWRcIixcIk0wIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0ODBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjU2SDB2MTc2em0xOTItNjhjMC02LjYgNS40LTEyIDEyLTEyaDEzNmM2LjYgMCAxMiA1LjQgMTIgMTJ2NDBjMCA2LjYtNS40IDEyLTEyIDEySDIwNGMtNi42IDAtMTItNS40LTEyLTEydi00MHptLTEyOCAwYzAtNi42IDUuNC0xMiAxMi0xMmg3MmM2LjYgMCAxMiA1LjQgMTIgMTJ2NDBjMCA2LjYtNS40IDEyLTEyIDEySDc2Yy02LjYgMC0xMi01LjQtMTItMTJ2LTQwek01NzYgODB2NDhIMFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg0ODBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6XCJdLGNyb3A6WzUxMiw1MTIsW10sXCJmMTI1XCIsXCJNNDg4IDM1MmgtNDBWMTA5LjI1bDU5LjMxLTU5LjMxYzYuMjUtNi4yNSA2LjI1LTE2LjM4IDAtMjIuNjNMNDg0LjY5IDQuNjljLTYuMjUtNi4yNS0xNi4zOC02LjI1LTIyLjYzIDBMNDAyLjc1IDY0SDE5MnY5NmgxMTQuNzVMMTYwIDMwNi43NVYyNGMwLTEzLjI2LTEwLjc1LTI0LTI0LTI0SDg4Qzc0Ljc1IDAgNjQgMTAuNzQgNjQgMjR2NDBIMjRDMTAuNzUgNjQgMCA3NC43NCAwIDg4djQ4YzAgMTMuMjUgMTAuNzUgMjQgMjQgMjRoNDB2MjY0YzAgMTMuMjUgMTAuNzUgMjQgMjQgMjRoMjMydi05NkgyMDUuMjVMMzUyIDIwNS4yNVY0ODhjMCAxMy4yNSAxMC43NSAyNCAyNCAyNGg0OGMxMy4yNSAwIDI0LTEwLjc1IDI0LTI0di00MGg0MGMxMy4yNSAwIDI0LTEwLjc1IDI0LTI0di00OGMwLTEzLjI2LTEwLjc1LTI0LTI0LTI0elwiXSxcImNyb3AtYWx0XCI6WzUxMiw1MTIsW10sXCJmNTY1XCIsXCJNNDg4IDM1MmgtNDBWOTZjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMkgxOTJ2OTZoMTYwdjMyOGMwIDEzLjI1IDEwLjc1IDI0IDI0IDI0aDQ4YzEzLjI1IDAgMjQtMTAuNzUgMjQtMjR2LTQwaDQwYzEzLjI1IDAgMjQtMTAuNzUgMjQtMjR2LTQ4YzAtMTMuMjYtMTAuNzUtMjQtMjQtMjR6TTE2MCAyNGMwLTEzLjI2LTEwLjc1LTI0LTI0LTI0SDg4Qzc0Ljc1IDAgNjQgMTAuNzQgNjQgMjR2NDBIMjRDMTAuNzUgNjQgMCA3NC43NCAwIDg4djQ4YzAgMTMuMjUgMTAuNzUgMjQgMjQgMjRoNDB2MjU2YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMjI0di05NkgxNjBWMjR6XCJdLGNyb3NzaGFpcnM6WzUxMiw1MTIsW10sXCJmMDViXCIsXCJNNTAwIDIyNGgtMzAuMzY0QzQ1NS43MjQgMTMwLjMyNSAzODEuNjc1IDU2LjI3NiAyODggNDIuMzY0VjEyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjMwLjM2NEMxMzAuMzI1IDU2LjI3NiA1Ni4yNzYgMTMwLjMyNSA0Mi4zNjQgMjI0SDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMzAuMzY0QzU2LjI3NiAzODEuNjc1IDEzMC4zMjUgNDU1LjcyNCAyMjQgNDY5LjYzNlY1MDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0zMC4zNjRDMzgxLjY3NSA0NTUuNzI0IDQ1NS43MjQgMzgxLjY3NSA0NjkuNjM2IDI4OEg1MDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMnpNMjg4IDQwNC42MzRWMzY0YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwLjYzNEMxNjUuODI2IDM5Mi4yMzIgMTE5Ljc4MyAzNDYuMjQzIDEwNy4zNjYgMjg4SDE0OGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MC42MzRDMTE5Ljc2OCAxNjUuODI2IDE2NS43NTcgMTE5Ljc4MyAyMjQgMTA3LjM2NlYxNDhjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MC42MzRDMzQ2LjE3NCAxMTkuNzY4IDM5Mi4yMTcgMTY1Ljc1NyA0MDQuNjM0IDIyNEgzNjRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MC42MzRDMzkyLjIzMiAzNDYuMTc0IDM0Ni4yNDMgMzkyLjIxNyAyODggNDA0LjYzNHpNMjg4IDI1NmMwIDE3LjY3My0xNC4zMjcgMzItMzIgMzJzLTMyLTE0LjMyNy0zMi0zMmMwLTE3LjY3MyAxNC4zMjctMzIgMzItMzJzMzIgMTQuMzI3IDMyIDMyelwiXSxjcm93Ols2NDAsNTEyLFtdLFwiZjUyMFwiLFwiTTU0NCAzMmgtMTYuMzZDNTEzLjA0IDEyLjY4IDQ5MC4wOSAwIDQ2NCAwYy00NC4xOCAwLTgwIDM1LjgyLTgwIDgwdjIwLjk4TDEyLjA5IDM5My41N0EzMC4yMTYgMzAuMjE2IDAgMCAwIDAgNDE3Ljc0YzAgMjIuNDYgMjMuNjQgMzcuMDcgNDMuNzMgMjcuMDNMMTY1LjI3IDM4NGg5Ni40OWw0NC40MSAxMjAuMWMyLjI3IDYuMjMgOS4xNSA5LjQ0IDE1LjM4IDcuMTdsMjIuNTUtOC4yMWM2LjIzLTIuMjcgOS40NC05LjE1IDcuMTctMTUuMzhMMzEyLjk0IDM4NEgzNTJjMS45MSAwIDMuNzYtLjIzIDUuNjYtLjI5bDQ0LjUxIDEyMC4zOGMyLjI3IDYuMjMgOS4xNSA5LjQ0IDE1LjM4IDcuMTdsMjIuNTUtOC4yMWM2LjIzLTIuMjcgOS40NC05LjE1IDcuMTctMTUuMzhsLTQxLjI0LTExMS41M0M0ODUuNzQgMzUyLjggNTQ0IDI3OS4yNiA1NDQgMTkydi04MGw5Ni0xNmMwLTM1LjM1LTQyLjk4LTY0LTk2LTY0em0tODAgNzJjLTEzLjI1IDAtMjQtMTAuNzUtMjQtMjQgMC0xMy4yNiAxMC43NS0yNCAyNC0yNHMyNCAxMC43NCAyNCAyNGMwIDEzLjI1LTEwLjc1IDI0LTI0IDI0elwiXSxjcm93bjpbNjQwLDUxMixbXSxcImY1MjFcIixcIk01MjggNDQ4SDExMmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg0MTZjOC44IDAgMTYtNy4yIDE2LTE2di0zMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0LTMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA3LjEgMS42IDEzLjcgNC40IDE5LjhMNDc2IDIzOS4yYy0xNS40IDkuMi0zNS4zIDQtNDQuMi0xMS42TDM1MC4zIDg1QzM2MSA3Ni4yIDM2OCA2MyAzNjggNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhjMCAxNSA3IDI4LjIgMTcuNyAzN2wtODEuNSAxNDIuNmMtOC45IDE1LjYtMjguOSAyMC44LTQ0LjIgMTEuNmwtNzIuMy00My40YzIuNy02IDQuNC0xMi43IDQuNC0xOS44IDAtMjYuNS0yMS41LTQ4LTQ4LTQ4UzAgMTQ5LjUgMCAxNzZzMjEuNSA0OCA0OCA0OGMyLjYgMCA1LjItLjQgNy43LS44TDEyOCA0MTZoMzg0bDcyLjMtMTkyLjhjMi41LjQgNS4xLjggNy43LjggMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDh6XCJdLGN1YmU6WzUxMiw1MTIsW10sXCJmMWIyXCIsXCJNMjM5LjEgNi4zbC0yMDggNzhjLTE4LjcgNy0zMS4xIDI1LTMxLjEgNDV2MjI1LjFjMCAxOC4yIDEwLjMgMzQuOCAyNi41IDQyLjlsMjA4IDEwNGMxMy41IDYuOCAyOS40IDYuOCA0Mi45IDBsMjA4LTEwNGMxNi4zLTguMSAyNi41LTI0LjggMjYuNS00Mi45VjEyOS4zYzAtMjAtMTIuNC0zNy45LTMxLjEtNDQuOWwtMjA4LTc4QzI2MiAyLjIgMjUwIDIuMiAyMzkuMSA2LjN6TTI1NiA2OC40bDE5MiA3MnYxLjFsLTE5MiA3OC0xOTItNzh2LTEuMWwxOTItNzJ6bTMyIDM1NlYyNzUuNWwxNjAtNjV2MTMzLjlsLTE2MCA4MHpcIl0sY3ViZXM6WzUxMiw1MTIsW10sXCJmMWIzXCIsXCJNNDg4LjYgMjUwLjJMMzkyIDIxNFYxMDUuNWMwLTE1LTkuMy0yOC40LTIzLjQtMzMuN2wtMTAwLTM3LjVjLTguMS0zLjEtMTcuMS0zLjEtMjUuMyAwbC0xMDAgMzcuNWMtMTQuMSA1LjMtMjMuNCAxOC43LTIzLjQgMzMuN1YyMTRsLTk2LjYgMzYuMkM5LjMgMjU1LjUgMCAyNjguOSAwIDI4My45VjM5NGMwIDEzLjYgNy43IDI2LjEgMTkuOSAzMi4ybDEwMCA1MGMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAzLjktNTIgMTAzLjkgNTJjMTAuMSA1LjEgMjIuMSA1LjEgMzIuMiAwbDEwMC01MGMxMi4yLTYuMSAxOS45LTE4LjYgMTkuOS0zMi4yVjI4My45YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43ek0zNTggMjE0LjhsLTg1IDMxLjl2LTY4LjJsODUtMzd2NzMuM3pNMTU0IDEwNC4xbDEwMi0zOC4yIDEwMiAzOC4ydi42bC0xMDIgNDEuNC0xMDItNDEuNHYtLjZ6bTg0IDI5MS4xbC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnptMjQwIDExMmwtODUgNDIuNXYtNzkuMWw4NS0zOC44djc1LjR6bTAtMTEybC0xMDIgNDEuNC0xMDItNDEuNHYtLjZsMTAyLTM4LjIgMTAyIDM4LjJ2LjZ6XCJdLGN1dDpbNDQ4LDUxMixbXSxcImYwYzRcIixcIk0yNzguMDYgMjU2TDQ0NC40OCA4OS41N2M0LjY5LTQuNjkgNC42OS0xMi4yOSAwLTE2Ljk3LTMyLjgtMzIuOC04NS45OS0zMi44LTExOC43OSAwTDIxMC4xOCAxODguMTJsLTI0Ljg2LTI0Ljg2YzQuMzEtMTAuOTIgNi42OC0yMi44MSA2LjY4LTM1LjI2IDAtNTMuMDItNDIuOTgtOTYtOTYtOTZTMCA3NC45OCAwIDEyOHM0Mi45OCA5NiA5NiA5NmM0LjU0IDAgOC45OS0uMzIgMTMuMzYtLjkzTDE0Mi4yOSAyNTZsLTMyLjkzIDMyLjkzYy00LjM3LS42MS04LjgzLS45My0xMy4zNi0uOTMtNTMuMDIgMC05NiA0Mi45OC05NiA5NnM0Mi45OCA5NiA5NiA5NiA5Ni00Mi45OCA5Ni05NmMwLTEyLjQ1LTIuMzctMjQuMzQtNi42OC0zNS4yNmwyNC44Ni0yNC44NkwzMjUuNjkgNDM5LjRjMzIuOCAzMi44IDg1Ljk5IDMyLjggMTE4Ljc5IDAgNC42OS00LjY4IDQuNjktMTIuMjggMC0xNi45N0wyNzguMDYgMjU2ek05NiAxNjBjLTE3LjY0IDAtMzItMTQuMzYtMzItMzJzMTQuMzYtMzIgMzItMzIgMzIgMTQuMzYgMzIgMzItMTQuMzYgMzItMzIgMzJ6bTAgMjU2Yy0xNy42NCAwLTMyLTE0LjM2LTMyLTMyczE0LjM2LTMyIDMyLTMyIDMyIDE0LjM2IDMyIDMyLTE0LjM2IDMyLTMyIDMyelwiXSxkYXRhYmFzZTpbNDQ4LDUxMixbXSxcImYxYzBcIixcIk00NDggNzMuMTQzdjQ1LjcxNEM0NDggMTU5LjE0MyAzNDcuNjY3IDE5MiAyMjQgMTkyUzAgMTU5LjE0MyAwIDExOC44NTdWNzMuMTQzQzAgMzIuODU3IDEwMC4zMzMgMCAyMjQgMHMyMjQgMzIuODU3IDIyNCA3My4xNDN6TTQ0OCAxNzZ2MTAyLjg1N0M0NDggMzE5LjE0MyAzNDcuNjY3IDM1MiAyMjQgMzUyUzAgMzE5LjE0MyAwIDI3OC44NTdWMTc2YzQ4LjEyNSAzMy4xNDMgMTM2LjIwOCA0OC41NzIgMjI0IDQ4LjU3MlMzOTkuODc0IDIwOS4xNDMgNDQ4IDE3NnptMCAxNjB2MTAyLjg1N0M0NDggNDc5LjE0MyAzNDcuNjY3IDUxMiAyMjQgNTEyUzAgNDc5LjE0MyAwIDQzOC44NTdWMzM2YzQ4LjEyNSAzMy4xNDMgMTM2LjIwOCA0OC41NzIgMjI0IDQ4LjU3MlMzOTkuODc0IDM2OS4xNDMgNDQ4IDMzNnpcIl0sZGVhZjpbNTEyLDUxMixbXSxcImYyYTRcIixcIk0yMTYgMjYwYzAgMTUuNDY0LTEyLjUzNiAyOC0yOCAyOHMtMjgtMTIuNTM2LTI4LTI4YzAtNDQuMTEyIDM1Ljg4OC04MCA4MC04MHM4MCAzNS44ODggODAgODBjMCAxNS40NjQtMTIuNTM2IDI4LTI4IDI4cy0yOC0xMi41MzYtMjgtMjhjMC0xMy4yMzQtMTAuNzY3LTI0LTI0LTI0cy0yNCAxMC43NjYtMjQgMjR6bTI0LTE3NmMtOTcuMDQ3IDAtMTc2IDc4Ljk1My0xNzYgMTc2IDAgMTUuNDY0IDEyLjUzNiAyOCAyOCAyOHMyOC0xMi41MzYgMjgtMjhjMC02Ni4xNjggNTMuODMyLTEyMCAxMjAtMTIwczEyMCA1My44MzIgMTIwIDEyMGMwIDc1LjE2NC03MS4wMDkgNzAuMzExLTcxLjk5NyAxNDMuNjIyTDI4OCA0MDRjMCAyOC42NzMtMjMuMzI3IDUyLTUyIDUyLTE1LjQ2NCAwLTI4IDEyLjUzNi0yOCAyOHMxMi41MzYgMjggMjggMjhjNTkuNDc1IDAgMTA3Ljg3Ni00OC4zMjggMTA4LTEwNy43NzQuNTk1LTM0LjQyOCA3Mi00OC4yNCA3Mi0xNDQuMjI2IDAtOTcuMDQ3LTc4Ljk1My0xNzYtMTc2LTE3NnptMjY4LjQ4NS01Mi4yMDFMNDgwLjIgMy41MTVjLTQuNjg3LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NzEgMEwzNzYuMiA5MC41NDRjLTQuNjg2IDQuNjg2LTQuNjg2IDEyLjI4NCAwIDE2Ljk3MWwyOC4yODUgMjguMjg1YzQuNjg2IDQuNjg2IDEyLjI4NCA0LjY4NiAxNi45NyAwbDg3LjAzLTg3LjAyOWM0LjY4Ny00LjY4OCA0LjY4Ny0xMi4yODYgMC0xNi45NzJ6TTE2OC45NyAzMTQuNzQ1Yy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcgMEwzLjUxNSA0NjMuMjNjLTQuNjg2IDQuNjg2LTQuNjg2IDEyLjI4NCAwIDE2Ljk3MUwzMS44IDUwOC40ODVjNC42ODcgNC42ODYgMTIuMjg0IDQuNjg2IDE2Ljk3MSAwTDE5Ny4yNTYgMzYwYzQuNjg2LTQuNjg2IDQuNjg2LTEyLjI4NCAwLTE2Ljk3MWwtMjguMjg2LTI4LjI4NHpcIl0sZGVza3RvcDpbNTc2LDUxMixbXSxcImYxMDhcIixcIk01MjggMEg0OEMyMS41IDAgMCAyMS41IDAgNDh2MzIwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDE5MmwtMTYgNDhoLTcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDI3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGgtNzJsLTE2LTQ4aDE5MmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OHptLTE2IDM1Mkg2NFY2NGg0NDh2Mjg4elwiXSxkaWFnbm9zZXM6WzY0MCw1MTIsW10sXCJmNDcwXCIsXCJNNDk2IDI1NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNi0xNiA3LjItMTYgMTYgNy4yIDE2IDE2IDE2em0tMTc2LTgwYzQ4LjUgMCA4OC0zOS41IDg4LTg4UzM2OC41IDAgMzIwIDBzLTg4IDM5LjUtODggODggMzkuNSA4OCA4OCA4OHpNNTkuOCAzNjRjMTAuMiAxNS4zIDI5LjMgMTcuOCA0Mi45IDkuOCAxNi4yLTkuNiA1Ni4yLTMxLjcgMTA1LjMtNDguNlY0MTZoMjI0di05MC43YzQ5LjEgMTYuOCA4OS4xIDM5IDEwNS4zIDQ4LjYgMTMuNiA4IDMyLjcgNS4zIDQyLjktOS44bDE3LjgtMjYuN2M4LjgtMTMuMiA3LjYtMzQuNi0xMC00NS4xLTExLjktNy4xLTI5LjctMTctNTEuMS0yNy40LTI4LjEgNDYuMS05OS40IDE3LjgtODcuNy0zNS4xQzQwOS4zIDIxNy4yIDM2NS4xIDIwOCAzMjAgMjA4Yy01NyAwLTExMi45IDE0LjUtMTYwIDMyLjItLjIgNDAuMi00Ny42IDYzLjMtNzkuMiAzNi0xMS4yIDYtMjEuMyAxMS42LTI4LjcgMTYtMTcuNiAxMC41LTE4LjggMzEuOC0xMCA0NS4xTDU5LjggMzY0ek0zNjggMzQ0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHptLTk2LTk2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHptLTE2MCA4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2LTE2IDcuMi0xNiAxNiA3LjIgMTYgMTYgMTZ6bTUxMiAxOTJIMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNjA4YzguOCAwIDE2LTcuMiAxNi0xNnYtMzJjMC04LjgtNy4yLTE2LTE2LTE2elwiXSxkaWNlOls2NDAsNTEyLFtdLFwiZjUyMlwiLFwiTTU5MiAxOTJINDczLjI2YzEyLjY5IDI5LjU5IDcuMTIgNjUuMi0xNyA4OS4zMkwzMjAgNDE3LjU4VjQ2NGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDIyNGMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjI0MGMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4ek00ODAgMzc2Yy0xMy4yNSAwLTI0LTEwLjc1LTI0LTI0IDAtMTMuMjYgMTAuNzUtMjQgMjQtMjRzMjQgMTAuNzQgMjQgMjRjMCAxMy4yNS0xMC43NSAyNC0yNCAyNHptLTQ2LjM3LTE4Ni43TDI1OC43IDE0LjM3Yy0xOS4xNi0xOS4xNi01MC4yMy0xOS4xNi02OS4zOSAwTDE0LjM3IDE4OS4zYy0xOS4xNiAxOS4xNi0xOS4xNiA1MC4yMyAwIDY5LjM5TDE4OS4zIDQzMy42M2MxOS4xNiAxOS4xNiA1MC4yMyAxOS4xNiA2OS4zOSAwTDQzMy42MyAyNTguN2MxOS4xNi0xOS4xNyAxOS4xNi01MC4yNCAwLTY5LjR6TTk2IDI0OGMtMTMuMjUgMC0yNC0xMC43NS0yNC0yNCAwLTEzLjI2IDEwLjc1LTI0IDI0LTI0czI0IDEwLjc0IDI0IDI0YzAgMTMuMjUtMTAuNzUgMjQtMjQgMjR6bTEyOCAxMjhjLTEzLjI1IDAtMjQtMTAuNzUtMjQtMjQgMC0xMy4yNiAxMC43NS0yNCAyNC0yNHMyNCAxMC43NCAyNCAyNGMwIDEzLjI1LTEwLjc1IDI0LTI0IDI0em0wLTEyOGMtMTMuMjUgMC0yNC0xMC43NS0yNC0yNCAwLTEzLjI2IDEwLjc1LTI0IDI0LTI0czI0IDEwLjc0IDI0IDI0YzAgMTMuMjUtMTAuNzUgMjQtMjQgMjR6bTAtMTI4Yy0xMy4yNSAwLTI0LTEwLjc1LTI0LTI0IDAtMTMuMjYgMTAuNzUtMjQgMjQtMjRzMjQgMTAuNzQgMjQgMjRjMCAxMy4yNS0xMC43NSAyNC0yNCAyNHptMTI4IDEyOGMtMTMuMjUgMC0yNC0xMC43NS0yNC0yNCAwLTEzLjI2IDEwLjc1LTI0IDI0LTI0czI0IDEwLjc0IDI0IDI0YzAgMTMuMjUtMTAuNzUgMjQtMjQgMjR6XCJdLFwiZGljZS1maXZlXCI6WzQ0OCw1MTIsW10sXCJmNTIzXCIsXCJNMzg0IDMySDY0QzI4LjY1IDMyIDAgNjAuNjUgMCA5NnYzMjBjMCAzNS4zNSAyOC42NSA2NCA2NCA2NGgzMjBjMzUuMzUgMCA2NC0yOC42NSA2NC02NFY5NmMwLTM1LjM1LTI4LjY1LTY0LTY0LTY0ek0xMjggMzg0Yy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem0wLTE5MmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptOTYgOTZjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6bTk2IDk2Yy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem0wLTE5MmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sXCJkaWNlLWZvdXJcIjpbNDQ4LDUxMixbXSxcImY1MjRcIixcIk0zODQgMzJINjRDMjguNjUgMzIgMCA2MC42NSAwIDk2djMyMGMwIDM1LjM1IDI4LjY1IDY0IDY0IDY0aDMyMGMzNS4zNSAwIDY0LTI4LjY1IDY0LTY0Vjk2YzAtMzUuMzUtMjguNjUtNjQtNjQtNjR6TTEyOCAzODRjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6bTAtMTkyYy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem0xOTIgMTkyYy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem0wLTE5MmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sXCJkaWNlLW9uZVwiOls0NDgsNTEyLFtdLFwiZjUyNVwiLFwiTTM4NCAzMkg2NEMyOC42NSAzMiAwIDYwLjY1IDAgOTZ2MzIwYzAgMzUuMzUgMjguNjUgNjQgNjQgNjRoMzIwYzM1LjM1IDAgNjQtMjguNjUgNjQtNjRWOTZjMC0zNS4zNS0yOC42NS02NC02NC02NHpNMjI0IDI4OGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sXCJkaWNlLXNpeFwiOls0NDgsNTEyLFtdLFwiZjUyNlwiLFwiTTM4NCAzMkg2NEMyOC42NSAzMiAwIDYwLjY1IDAgOTZ2MzIwYzAgMzUuMzUgMjguNjUgNjQgNjQgNjRoMzIwYzM1LjM1IDAgNjQtMjguNjUgNjQtNjRWOTZjMC0zNS4zNS0yOC42NS02NC02NC02NHpNMTI4IDM4NGMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMC05NmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMC05NmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMTkyIDE5MmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMC05NmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMC05NmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnpcIl0sXCJkaWNlLXRocmVlXCI6WzQ0OCw1MTIsW10sXCJmNTI3XCIsXCJNMzg0IDMySDY0QzI4LjY1IDMyIDAgNjAuNjUgMCA5NnYzMjBjMCAzNS4zNSAyOC42NSA2NCA2NCA2NGgzMjBjMzUuMzUgMCA2NC0yOC42NSA2NC02NFY5NmMwLTM1LjM1LTI4LjY1LTY0LTY0LTY0ek0xMjggMTkyYy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyem05NiA5NmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptOTYgOTZjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6XCJdLFwiZGljZS10d29cIjpbNDQ4LDUxMixbXSxcImY1MjhcIixcIk0zODQgMzJINjRDMjguNjUgMzIgMCA2MC42NSAwIDk2djMyMGMwIDM1LjM1IDI4LjY1IDY0IDY0IDY0aDMyMGMzNS4zNSAwIDY0LTI4LjY1IDY0LTY0Vjk2YzAtMzUuMzUtMjguNjUtNjQtNjQtNjR6TTEyOCAxOTJjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6bTE5MiAxOTJjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6XCJdLFwiZGlnaXRhbC10YWNob2dyYXBoXCI6WzY0MCw1MTIsW10sXCJmNTY2XCIsXCJNNjA4IDk2SDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjI1NmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDU3NmMxNy42NyAwIDMyLTE0LjMzIDMyLTMyVjEyOGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyek0zMDQgMzUyYzAgNC40Mi0zLjU4IDgtOCA4SDcyYy00LjQyIDAtOC0zLjU4LTgtOHYtOGMwLTQuNDIgMy41OC04IDgtOGgyMjRjNC40MiAwIDggMy41OCA4IDh2OHpNNzIgMjg4di0xNmMwLTQuNDIgMy41OC04IDgtOGgxNmM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg4MGMtNC40MiAwLTgtMy41OC04LTh6bTY0IDB2LTE2YzAtNC40MiAzLjU4LTggOC04aDE2YzQuNDIgMCA4IDMuNTggOCA4djE2YzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LTh6bTY0IDB2LTE2YzAtNC40MiAzLjU4LTggOC04aDE2YzQuNDIgMCA4IDMuNTggOCA4djE2YzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LTh6bTY0IDB2LTE2YzAtNC40MiAzLjU4LTggOC04aDE2YzQuNDIgMCA4IDMuNTggOCA4djE2YzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LTh6bTQwLTY0YzAgOC44NC03LjE2IDE2LTE2IDE2SDgwYy04Ljg0IDAtMTYtNy4xNi0xNi0xNnYtNDhjMC04Ljg0IDcuMTYtMTYgMTYtMTZoMjA4YzguODQgMCAxNiA3LjE2IDE2IDE2djQ4em0yNzIgMTI4YzAgNC40Mi0zLjU4IDgtOCA4SDM0NGMtNC40MiAwLTgtMy41OC04LTh2LThjMC00LjQyIDMuNTgtOCA4LThoMjI0YzQuNDIgMCA4IDMuNTggOCA4djh6XCJdLGRpdmlkZTpbNDQ4LDUxMixbXSxcImY1MjlcIixcIk0yMjQgMzUyYy0zNS4zNSAwLTY0IDI4LjY1LTY0IDY0czI4LjY1IDY0IDY0IDY0IDY0LTI4LjY1IDY0LTY0LTI4LjY1LTY0LTY0LTY0em0wLTE5MmMzNS4zNSAwIDY0LTI4LjY1IDY0LTY0cy0yOC42NS02NC02NC02NC02NCAyOC42NS02NCA2NCAyOC42NSA2NCA2NCA2NHptMTkyIDQ4SDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzg0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJ6XCJdLGRpenp5Ols0OTYsNTEyLFtdLFwiZjU2N1wiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bS05NiAyMDYuNmwtMjguNyAyOC43Yy0xNC44IDE0LjgtMzcuOC03LjUtMjIuNi0yMi42bDI4LjctMjguNy0yOC43LTI4LjdjLTE1LTE1IDcuNy0zNy42IDIyLjYtMjIuNmwyOC43IDI4LjcgMjguNy0yOC43YzE1LTE1IDM3LjYgNy43IDIyLjYgMjIuNkwxNzQuNiAxOTJsMjguNyAyOC43YzE1LjIgMTUuMi03LjkgMzcuNC0yMi42IDIyLjZMMTUyIDIxNC42ek0yNDggNDE2Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0IDY0IDI4LjcgNjQgNjQtMjguNyA2NC02NCA2NHptMTQ3LjMtMTk1LjNjMTUuMiAxNS4yLTcuOSAzNy40LTIyLjYgMjIuNkwzNDQgMjE0LjZsLTI4LjcgMjguN2MtMTQuOCAxNC44LTM3LjgtNy41LTIyLjYtMjIuNmwyOC43LTI4LjctMjguNy0yOC43Yy0xNS0xNSA3LjctMzcuNiAyMi42LTIyLjZsMjguNyAyOC43IDI4LjctMjguN2MxNS0xNSAzNy42IDcuNyAyMi42IDIyLjZMMzY2LjYgMTkybDI4LjcgMjguN3pcIl0sZG5hOls0NDgsNTEyLFtdLFwiZjQ3MVwiLFwiTS4xIDQ5NC4xYy0xLjEgOS41IDYuMyAxNy44IDE1LjkgMTcuOGwzMi4zLjFjOC4xIDAgMTQuOS01LjkgMTYtMTMuOS43LTQuOSAxLjgtMTEuMSAzLjQtMTguMUgzODBjMS42IDYuOSAyLjkgMTMuMiAzLjUgMTguMSAxLjEgOCA3LjkgMTQgMTYgMTMuOWwzMi4zLS4xYzkuNiAwIDE3LjEtOC4zIDE1LjktMTcuOC00LjYtMzcuOS0yNS42LTEyOS0xMTguOS0yMDcuNy0xNy42IDEyLjQtMzcuMSAyNC4yLTU4LjUgMzUuNCA2LjIgNC42IDExLjQgOS40IDE3IDE0LjJIMTU5LjdjMjEuMy0xOC4xIDQ3LTM1LjYgNzguNy01MS40QzQxMC41IDE5OS4xIDQ0Mi4xIDY1LjggNDQ3LjkgMTcuOSA0NDkgOC40IDQ0MS42LjEgNDMyIC4xTDM5OS42IDBjLTguMSAwLTE0LjkgNS45LTE2IDEzLjktLjcgNC45LTEuOCAxMS4xLTMuNCAxOC4xSDY3LjhjLTEuNi03LTIuNy0xMy4xLTMuNC0xOC4xLTEuMS04LTcuOS0xNC0xNi0xMy45TDE2LjEuMUM2LjUuMS0xIDguNC4xIDE3LjkgNS4zIDYwLjggMzEuNCAxNzEuOCAxNjAgMjU2IDMxLjUgMzQwLjIgNS4zIDQ1MS4yLjEgNDk0LjF6TTIyNCAyMTkuNmMtMjUuMS0xMy43LTQ2LjQtMjguNC02NC4zLTQzLjZoMTI4LjVjLTE3LjggMTUuMi0zOS4xIDMwLTY0LjIgNDMuNnpNMzU1LjEgOTZjLTUuOCAxMC40LTEyLjggMjEuMS0yMSAzMkgxMTRjLTguMy0xMC45LTE1LjMtMjEuNi0yMS0zMmgyNjIuMXpNOTIuOSA0MTZjNS44LTEwLjQgMTIuOC0yMS4xIDIxLTMyaDIxOS40YzguMyAxMC45IDE1LjQgMjEuNiAyMS4yIDMySDkyLjl6XCJdLFwiZG9sbGFyLXNpZ25cIjpbMjg4LDUxMixbXSxcImYxNTVcIixcIk0yMDkuMiAyMzMuNGwtMTA4LTMxLjZDODguNyAxOTguMiA4MCAxODYuNSA4MCAxNzMuNWMwLTE2LjMgMTMuMi0yOS41IDI5LjUtMjkuNWg2Ni4zYzEyLjIgMCAyNC4yIDMuNyAzNC4yIDEwLjUgNi4xIDQuMSAxNC4zIDMuMSAxOS41LTJsMzQuOC0zNGM3LjEtNi45IDYuMS0xOC40LTEuOC0yNC41QzIzOCA3NC44IDIwNy40IDY0LjEgMTc2IDY0VjE2YzAtOC44LTcuMi0xNi0xNi0xNmgtMzJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OGgtMi41QzQ1LjggNjQtNS40IDExOC43LjUgMTgzLjZjNC4yIDQ2LjEgMzkuNCA4My42IDgzLjggOTYuNmwxMDIuNSAzMGMxMi41IDMuNyAyMS4yIDE1LjMgMjEuMiAyOC4zIDAgMTYuMy0xMy4yIDI5LjUtMjkuNSAyOS41aC02Ni4zQzEwMCAzNjggODggMzY0LjMgNzggMzU3LjVjLTYuMS00LjEtMTQuMy0zLjEtMTkuNSAybC0zNC44IDM0Yy03LjEgNi45LTYuMSAxOC40IDEuOCAyNC41IDI0LjUgMTkuMiA1NS4xIDI5LjkgODYuNSAzMHY0OGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2di00OC4yYzQ2LjYtLjkgOTAuMy0yOC42IDEwNS43LTcyLjcgMjEuNS02MS42LTE0LjYtMTI0LjgtNzIuNS0xNDEuN3pcIl0sZG9sbHk6WzU3Niw1MTIsW10sXCJmNDcyXCIsXCJNMjk0LjIgMjc3LjdjMTggNSAzNC43IDEzLjQgNDkuNSAyNC43bDE2MS41LTUzLjhjOC40LTIuOCAxMi45LTExLjkgMTAuMS0yMC4yTDQ1NC45IDQ3LjJjLTIuOC04LjQtMTEuOS0xMi45LTIwLjItMTAuMWwtNjEuMSAyMC40IDMzLjEgOTkuNEwzNDYgMTc3bC0zMy4xLTk5LjQtNjEuNiAyMC41Yy04LjQgMi44LTEyLjkgMTEuOS0xMC4xIDIwLjJsNTMgMTU5LjR6bTI4MSA0OC43TDU2NSAyOTZjLTIuOC04LjQtMTEuOS0xMi45LTIwLjItMTAuMWwtMjEzLjUgNzEuMmMtMTcuMi0yMi00My42LTM2LjQtNzMuNS0zN0wxNTguNCAyMS45QzE1NCA4LjggMTQxLjggMCAxMjggMEgxNkM3LjIgMCAwIDcuMiAwIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg4OC45bDkyLjIgMjc2LjdjLTI2LjEgMjAuNC00MS43IDUzLjYtMzYgOTAuNSA2LjEgMzkuNCAzNy45IDcyLjMgNzcuMyA3OS4yIDYwLjIgMTAuNyAxMTIuMy0zNC44IDExMy40LTkyLjZsMjEzLjMtNzEuMmM4LjMtMi44IDEyLjktMTEuOCAxMC4xLTIwLjJ6TTI1NiA0NjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDggNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4elwiXSxcImRvbGx5LWZsYXRiZWRcIjpbNjQwLDUxMixbXSxcImY0NzRcIixcIk0yMDggMzIwaDM4NGM4LjggMCAxNi03LjIgMTYtMTZWNDhjMC04LjgtNy4yLTE2LTE2LTE2SDQ0OHYxMjhsLTQ4LTMyLTQ4IDMyVjMySDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2djI1NmMwIDguOCA3LjIgMTYgMTYgMTZ6bTQxNiA2NEgxMjhWMTZjMC04LjgtNy4yLTE2LTE2LTE2SDE2QzcuMiAwIDAgNy4yIDAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djM2OGMwIDguOCA3LjIgMTYgMTYgMTZoODIuOWMtMS44IDUtMi45IDEwLjQtMi45IDE2IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS4yLTExLTIuOS0xNkg0NTFjLTEuOCA1LTIuOSAxMC40LTIuOSAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEuMi0xMS0yLjktMTZINjI0YzguOCAwIDE2LTcuMiAxNi0xNnYtMzJjMC04LjgtNy4yLTE2LTE2LTE2elwiXSxkb25hdGU6WzUxMiw1MTIsW10sXCJmNGI5XCIsXCJNMjU2IDQxNmMxMTQuOSAwIDIwOC05My4xIDIwOC0yMDhTMzcwLjkgMCAyNTYgMCA0OCA5My4xIDQ4IDIwOHM5My4xIDIwOCAyMDggMjA4ek0yMzMuOCA5Ny40VjgwLjZjMC05LjIgNy40LTE2LjYgMTYuNi0xNi42aDExLjFjOS4yIDAgMTYuNiA3LjQgMTYuNiAxNi42djE3YzE1LjUuOCAzMC41IDYuMSA0MyAxNS40IDUuNiA0LjEgNi4yIDEyLjMgMS4yIDE3LjFMMzA2IDE0NS42Yy0zLjggMy43LTkuNSAzLjgtMTQgMS01LjQtMy40LTExLjQtNS4xLTE3LjgtNS4xaC0zOC45Yy05IDAtMTYuMyA4LjItMTYuMyAxOC4zIDAgOC4yIDUgMTUuNSAxMi4xIDE3LjZsNjIuMyAxOC43YzI1LjcgNy43IDQzLjcgMzIuNCA0My43IDYwLjEgMCAzNC0yNi40IDYxLjUtNTkuMSA2Mi40djE2LjhjMCA5LjItNy40IDE2LjYtMTYuNiAxNi42aC0xMS4xYy05LjIgMC0xNi42LTcuNC0xNi42LTE2LjZ2LTE3Yy0xNS41LS44LTMwLjUtNi4xLTQzLTE1LjQtNS42LTQuMS02LjItMTIuMy0xLjItMTcuMWwxNi4zLTE1LjVjMy44LTMuNyA5LjUtMy44IDE0LTEgNS40IDMuNCAxMS40IDUuMSAxNy44IDUuMWgzOC45YzkgMCAxNi4zLTguMiAxNi4zLTE4LjMgMC04LjItNS0xNS41LTEyLjEtMTcuNmwtNjIuMy0xOC43Yy0yNS43LTcuNy00My43LTMyLjQtNDMuNy02MC4xLjEtMzQgMjYuNC02MS41IDU5LjEtNjIuNHpNNDgwIDM1MmgtMzIuNWMtMTkuNiAyNi00NC42IDQ3LjctNzMgNjRoNjMuOGM1LjMgMCA5LjYgMy42IDkuNiA4djE2YzAgNC40LTQuMyA4LTkuNiA4SDczLjZjLTUuMyAwLTkuNi0zLjYtOS42LTh2LTE2YzAtNC40IDQuMy04IDkuNi04aDYzLjhjLTI4LjQtMTYuMy01My4zLTM4LTczLTY0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJ2LTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXSxcImRvb3ItY2xvc2VkXCI6WzY0MCw1MTIsW10sXCJmNTJhXCIsXCJNNjI0IDQ0OEg1MTJWNTAuOEM1MTIgMjIuNzggNDkwLjQ3IDAgNDY0IDBIMTc1Ljk5Yy0yNi40NyAwLTQ4IDIyLjc4LTQ4IDUwLjhWNDQ4SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYzMmMwIDguODQgNy4xNiAxNiAxNiAxNmg2MDhjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2ek00MTUuOTkgMjg4Yy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyYy4wMSAxNy42Ny0xNC4zMiAzMi0zMiAzMnpcIl0sXCJkb29yLW9wZW5cIjpbNjQwLDUxMixbXSxcImY1MmJcIixcIk02MjQgNDQ4aC04MFYxMTMuNDVDNTQ0IDg2LjE5IDUyMi40NyA2NCA0OTYgNjRIMzg0djY0aDk2djM4NGgxNDRjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2ek0zMTIuMjQgMS4wMWwtMTkyIDQ5Ljc0QzEwNS45OSA1NC40NCA5NiA2Ny43IDk2IDgyLjkyVjQ0OEgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMzM2VjMzLjE4YzAtMjEuNTgtMTkuNTYtMzcuNDEtMzkuNzYtMzIuMTd6TTI2NCAyODhjLTEzLjI1IDAtMjQtMTQuMzMtMjQtMzJzMTAuNzUtMzIgMjQtMzIgMjQgMTQuMzMgMjQgMzItMTAuNzUgMzItMjQgMzJ6XCJdLFwiZG90LWNpcmNsZVwiOls1MTIsNTEyLFtdLFwiZjE5MlwiLFwiTTI1NiA4QzExOS4wMzMgOCA4IDExOS4wMzMgOCAyNTZzMTExLjAzMyAyNDggMjQ4IDI0OCAyNDgtMTExLjAzMyAyNDgtMjQ4UzM5Mi45NjcgOCAyNTYgOHptODAgMjQ4YzAgNDQuMTEyLTM1Ljg4OCA4MC04MCA4MHMtODAtMzUuODg4LTgwLTgwIDM1Ljg4OC04MCA4MC04MCA4MCAzNS44ODggODAgODB6XCJdLGRvdmU6WzUxMiw1MTIsW10sXCJmNGJhXCIsXCJNMjg4IDE2Ny4ydi0yOC4xYy0yOC4yLTM2LjMtNDcuMS03OS4zLTU0LjEtMTI1LjItMi4xLTEzLjUtMTktMTguOC0yNy44LTguMy0yMS4xIDI0LjktMzcuNyA1NC4xLTQ4LjkgODYuNSAzNC4yIDM4LjMgODAgNjQuNiAxMzAuOCA3NS4xek00MDAgNjRjLTQ0LjIgMC04MCAzNS45LTgwIDgwLjF2NTkuNEMyMTUuNiAxOTcuMyAxMjcgMTMzIDg3IDQxLjhjLTUuNS0xMi41LTIzLjItMTMuMi0yOS0uOUM0MS40IDc2IDMyIDExNS4yIDMyIDE1Ni42YzAgNzAuOCAzNC4xIDEzNi45IDg1LjEgMTg1LjkgMTMuMiAxMi43IDI2LjEgMjMuMiAzOC45IDMyLjhsLTE0My45IDM2QzEuNCA0MTQtMy40IDQyNi40IDIuNiA0MzUuNyAyMCA0NjIuNiA2MyA1MDguMiAxNTUuOCA1MTJjOCAuMyAxNi0yLjYgMjIuMS03LjlsNjUuMi01Ni4xSDMyMGM4OC40IDAgMTYwLTcxLjUgMTYwLTE1OS45VjEyOGwzMi02NEg0MDB6bTAgOTYuMWMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNiAxNiA3LjIgMTYgMTYtNy4yIDE2LTE2IDE2elwiXSxkb3dubG9hZDpbNTEyLDUxMixbXSxcImYwMTlcIixcIk0yMTYgMGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYxNjhoODcuN2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwyNjkuNyAzNzguM2MtNy41IDcuNS0xOS44IDcuNS0yNy4zIDBMOTAuMSAyMjYuMWMtMTIuNi0xMi42LTMuNy0zNC4xIDE0LjEtMzQuMUgxOTJWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTI5NiAzNzZ2MTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTQ2LjdsNDkgNDljMjAuMSAyMC4xIDUyLjUgMjAuMSA3Mi42IDBsNDktNDlINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0em0tMTI0IDg4YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMCA5IDIwIDIwIDIwIDIwLTkgMjAtMjB6bTY0IDBjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwIDkgMjAgMjAgMjAgMjAtOSAyMC0yMHpcIl0sXCJkcmFmdGluZy1jb21wYXNzXCI6WzUxMiw1MTIsW10sXCJmNTY4XCIsXCJNNDU3LjAxIDM0NC40MmMtMjUuMDUgMjAuMzMtNTIuNjMgMzcuMTgtODIuNTQgNDkuMDVsNTQuMzggOTQuMTkgNTMuOTUgMjMuMDRjOS44MSA0LjE5IDIwLjg5LTIuMjEgMjIuMTctMTIuOGw3LjAyLTU4LjI1LTU0Ljk4LTk1LjIzem00Mi40OS05NC41NmM0Ljg2LTcuNjcgMS44OS0xNy45OS02LjA1LTIyLjM5bC0yOC4wNy0xNS41N2MtNy40OC00LjE1LTE2LjYxLTEuNDYtMjEuMjYgNS43MkM0MDMuMDEgMjgxLjE1IDMzMi4yNSAzMjAgMjU2IDMyMGMtMjMuOTMgMC00Ny4yMy00LjI1LTY5LjQxLTExLjUzbDY3LjM2LTExNi42OGMuNy4wMiAxLjM0LjIxIDIuMDQuMjFzMS4zNS0uMTkgMi4wNC0uMjFsNTEuMDkgODguNWMzMS4yMy04Ljk2IDU5LjU2LTI1Ljc1IDgyLjYxLTQ4LjkybC01MS43OS04OS43MUMzNDcuMzkgMTI4LjAzIDM1MiAxMTIuNjMgMzUyIDk2YzAtNTMuMDItNDIuOTgtOTYtOTYtOTZzLTk2IDQyLjk4LTk2IDk2YzAgMTYuNjMgNC42MSAzMi4wMyAxMi4wNSA0NS42NmwtNjguMyAxMTguMzFjLTEyLjU1LTExLjYxLTIzLjk2LTI0LjU5LTMzLjY4LTM5LTQuNzktNy4xLTEzLjk3LTkuNjItMjEuMzgtNS4zM2wtMjcuNzUgMTYuMDdjLTcuODUgNC41NC0xMC42MyAxNC45LTUuNjQgMjIuNDcgMTUuNTcgMjMuNjQgMzQuNjkgNDQuMjEgNTUuOTggNjIuMDJMMCA0MzkuNjZsNy4wMiA1OC4yNWMxLjI4IDEwLjU5IDEyLjM2IDE2Ljk5IDIyLjE3IDEyLjhsNTMuOTUtMjMuMDQgNzAuOC0xMjIuNjNDMTg2LjEzIDM3Ny4yOCAyMjAuNjIgMzg0IDI1NiAzODRjOTkuMDUgMCAxOTAuODgtNTEuMDEgMjQzLjUtMTM0LjE0ek0yNTYgNjRjMTcuNjcgMCAzMiAxNC4zMyAzMiAzMnMtMTQuMzMgMzItMzIgMzItMzItMTQuMzMtMzItMzIgMTQuMzMtMzIgMzItMzJ6XCJdLGRydW06WzU3Niw1MTIsW10sXCJmNTY5XCIsXCJNNDU4LjA4IDEyMC44OGwxMDIuMzktNjEuNDNjMTUuMTYtOS4wOSAyMC4wNi0yOC43NSAxMC45Ny00My45MUM1NjIuMzQuMzkgNTQyLjctNC41MyA1MjcuNTMgNC41N2wtMTYwLjY5IDk2LjQxQTYyOS4zMiA2MjkuMzIgMCAwIDAgMjg4IDk2QzEyOC45NCA5NiAwIDE1My4zMSAwIDIyNHYxNjAuODNjMCAzMC40NiAyNC4wMyA1OC40IDY0IDgwLjM3di05Ni4zN2MwLTE3LjYgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMydjEyMi40MWMzNy40IDExLjEzIDgxIDE4LjQ0IDEyOCAyMC43NVY0MDAuODRjMC0xNy42IDE0LjQtMzIgMzItMzJzMzIgMTQuNCAzMiAzMlY1MTJjNDctMi4zMSA5MC42LTkuNjIgMTI4LTIwLjc1VjM2OC44NGMwLTE3LjYgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMydjk2LjM3YzM5Ljk3LTIxLjk3IDY0LTQ5LjkxIDY0LTgwLjM3VjIyNC4wMWMtLjAxLTQyLjM4LTQ2LjU0LTc5Ljg0LTExNy45Mi0xMDMuMTN6TTI4OCAzMDRjLTEzMi41NSAwLTI0MC0zNS44Mi0yNDAtODBzMTA3LjQ1LTgwIDI0MC04MGMyLjM0IDAgNC42Mi4xIDYuOTQuMTJsLTg3LjQxIDUyLjQ0Yy0xNS4xNiA5LjA5LTIwLjA2IDI4Ljc1LTEwLjk3IDQzLjkxIDkuNTYgMTUuOTMgMjkuNTEgMTkuNjEgNDMuOTEgMTAuOTdsMTYyLjcxLTk3LjYyQzQ3Ny41NSAxNjcuNDEgNTI4IDE5My43NCA1MjggMjI0LjAxIDUyOCAyNjguMTkgNDIwLjU0IDMwNCAyODggMzA0elwiXSxcImRydW0tc3RlZWxwYW5cIjpbNTc2LDUxMixbXSxcImY1NmFcIixcIk0yODggMzJDMTI4Ljk0IDMyIDAgODkuMzEgMCAxNjB2MTkyYzAgNzAuNjkgMTI4Ljk0IDEyOCAyODggMTI4czI4OC01Ny4zMSAyODgtMTI4VjE2MGMwLTcwLjY5LTEyOC45NC0xMjgtMjg4LTEyOHptLTgyLjk5IDE1OC4zNmMtNC40NSAxNi42MS0xNC41NCAzMC41Ny0yOC4zMSA0MC40OEMxMDAuMjMgMjE3LjQ2IDQ4IDE5MC43OCA0OCAxNjBjMC0zMC4xNiA1MC4xMS01Ni4zOSAxMjQuMDQtNzAuMDNsMjUuNiA0NC4zNGM5Ljg2IDE3LjA5IDEyLjQ4IDM2Ljk5IDcuMzcgNTYuMDV6TTI4OCAyNDBjLTIxLjA4IDAtNDEuNDEtMS02MC44OS0yLjcgOC4wNi0yNi4xMyAzMi4xNS00NS4zIDYwLjg5LTQ1LjNzNTIuODMgMTkuMTcgNjAuODkgNDUuM0MzMjkuNDEgMjM5IDMwOS4wOCAyNDAgMjg4IDI0MHptNjQtMTQ0YzAgMzUuMjktMjguNzEgNjQtNjQgNjRzLTY0LTI4LjcxLTY0LTY0VjgyLjk2YzIwLjQtMS44OCA0MS44LTIuOTYgNjQtMi45NnM0My42IDEuMDggNjQgMi45NlY5NnptNDYuOTMgMTM0LjljLTEzLjgxLTkuOTEtMjMuOTQtMjMuOS0yOC40LTQwLjU0LTUuMTEtMTkuMDYtMi40OS0zOC45NiA3LjM4LTU2LjA0bDI1LjY1LTQ0LjQyQzQ3Ny43MiAxMDMuNSA1MjggMTI5Ljc5IDUyOCAxNjBjMCAzMC44My01Mi40IDU3LjU0LTEyOS4wNyA3MC45elwiXSxkdW1iYmVsbDpbNjQwLDUxMixbXSxcImY0NGJcIixcIk0xMDQgOTZINTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0djEwNEg4Yy00LjQgMC04IDMuNi04IDh2NDhjMCA0LjQgMy42IDggOCA4aDI0djEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTUyOCAxMjhoLTI0VjEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNGgtNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyODhoMjRjNC40IDAgOC0zLjYgOC04di00OGMwLTQuNC0zLjYtOC04LTh6TTQ1NiAzMmgtNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0djE2OEgyNTZWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRoLTQ4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRoNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMjg4aDEyOHYxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjR6XCJdLGVkaXQ6WzU3Niw1MTIsW10sXCJmMDQ0XCIsXCJNNDAyLjYgODMuMmw5MC4yIDkwLjJjMy44IDMuOCAzLjggMTAgMCAxMy44TDI3NC40IDQwNS42bC05Mi44IDEwLjNjLTEyLjQgMS40LTIyLjktOS4xLTIxLjUtMjEuNWwxMC4zLTkyLjhMMzg4LjggODMuMmMzLjgtMy44IDEwLTMuOCAxMy44IDB6bTE2Mi0yMi45bC00OC44LTQ4LjhjLTE1LjItMTUuMi0zOS45LTE1LjItNTUuMiAwbC0zNS40IDM1LjRjLTMuOCAzLjgtMy44IDEwIDAgMTMuOGw5MC4yIDkwLjJjMy44IDMuOCAxMCAzLjggMTMuOCAwbDM1LjQtMzUuNGMxNS4yLTE1LjMgMTUuMi00MCAwLTU1LjJ6TTM4NCAzNDYuMlY0NDhINjRWMTI4aDIyOS44YzMuMiAwIDYuMi0xLjMgOC41LTMuNWw0MC00MGM3LjYtNy42IDIuMi0yMC41LTguNS0yMC41SDQ4QzIxLjUgNjQgMCA4NS41IDAgMTEydjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzA2LjJjMC0xMC43LTEyLjktMTYtMjAuNS04LjVsLTQwIDQwYy0yLjIgMi4zLTMuNSA1LjMtMy41IDguNXpcIl0sZWplY3Q6WzQ0OCw1MTIsW10sXCJmMDUyXCIsXCJNNDQ4IDM4NHY2NGMwIDE3LjY3My0xNC4zMjcgMzItMzIgMzJIMzJjLTE3LjY3MyAwLTMyLTE0LjMyNy0zMi0zMnYtNjRjMC0xNy42NzMgMTQuMzI3LTMyIDMyLTMyaDM4NGMxNy42NzMgMCAzMiAxNC4zMjcgMzIgMzJ6TTQ4LjA1MyAzMjBoMzUxLjg4NmM0MS42NTEgMCA2My41ODEtNDkuNjc0IDM1LjM4My04MC40MzVMMjU5LjM4MyA0Ny41NThjLTE5LjAxNC0yMC43NDMtNTEuNzUxLTIwLjc0NC03MC43NjcgMEwxMi42NyAyMzkuNTY1Qy0xNS40NzUgMjcwLjI2OCA2LjMyNCAzMjAgNDguMDUzIDMyMHpcIl0sXCJlbGxpcHNpcy1oXCI6WzUxMiw1MTIsW10sXCJmMTQxXCIsXCJNMzI4IDI1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnMtNzItMzIuMi03Mi03MiAzMi4yLTcyIDcyLTcyIDcyIDMyLjIgNzIgNzJ6bTEwNC03MmMtMzkuOCAwLTcyIDMyLjItNzIgNzJzMzIuMiA3MiA3MiA3MiA3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJ6bS0zNTIgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJzMzIuMiA3MiA3MiA3MiA3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJ6XCJdLFwiZWxsaXBzaXMtdlwiOlsxOTIsNTEyLFtdLFwiZjE0MlwiLFwiTTk2IDE4NGMzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyIDMyLjItNzIgNzItNzJ6TTI0IDgwYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzJTMTM1LjggOCA5NiA4IDI0IDQwLjIgMjQgODB6bTAgMzUyYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03Mi03MiAzMi4yLTcyIDcyelwiXSxlbnZlbG9wZTpbNTEyLDUxMixbXSxcImYwZTBcIixcIk01MDIuMyAxOTAuOGMzLjktMy4xIDkuNy0uMiA5LjcgNC43VjQwMGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTk1LjZjMC01IDUuNy03LjggOS43LTQuNyAyMi40IDE3LjQgNTIuMSAzOS41IDE1NC4xIDExMy42IDIxLjEgMTUuNCA1Ni43IDQ3LjggOTIuMiA0Ny42IDM1LjcuMyA3Mi0zMi44IDkyLjMtNDcuNiAxMDItNzQuMSAxMzEuNi05Ni4zIDE1NC0xMTMuN3pNMjU2IDMyMGMyMy4yLjQgNTYuNi0yOS4yIDczLjQtNDEuNCAxMzIuNy05Ni4zIDE0Mi44LTEwNC43IDE3My40LTEyOC43IDUuOC00LjUgOS4yLTExLjUgOS4yLTE4Ljl2LTE5YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgNjQgMCA4NS41IDAgMTEydjE5YzAgNy40IDMuNCAxNC4zIDkuMiAxOC45IDMwLjYgMjMuOSA0MC43IDMyLjQgMTczLjQgMTI4LjcgMTYuOCAxMi4yIDUwLjIgNDEuOCA3My40IDQxLjR6XCJdLFwiZW52ZWxvcGUtb3BlblwiOls1MTIsNTEyLFtdLFwiZjJiNlwiLFwiTTUxMiA0NjRjMCAyNi41MS0yMS40OSA0OC00OCA0OEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OFYyMDAuNzI0YTQ4IDQ4IDAgMCAxIDE4LjM4Ny0zNy43NzZjMjQuOTEzLTE5LjUyOSA0NS41MDEtMzUuMzY1IDE2NC4yLTEyMS41MTFDMTk5LjQxMiAyOS4xNyAyMzIuNzk3LS4zNDcgMjU2IC4wMDNjMjMuMTk4LS4zNTQgNTYuNTk2IDI5LjE3MiA3My40MTMgNDEuNDMzIDExOC42ODcgODYuMTM3IDEzOS4zMDMgMTAxLjk5NSAxNjQuMiAxMjEuNTEyQTQ4IDQ4IDAgMCAxIDUxMiAyMDAuNzI0VjQ2NHptLTY1LjY2Ni0xOTYuNjA1Yy0yLjU2My0zLjcyOC03LjctNC41OTUtMTEuMzM5LTEuOTA3LTIyLjg0NSAxNi44NzMtNTUuNDYyIDQwLjcwNS0xMDUuNTgyIDc3LjA3OS0xNi44MjUgMTIuMjY2LTUwLjIxIDQxLjc4MS03My40MTMgNDEuNDMtMjMuMjExLjM0NC01Ni41NTktMjkuMTQzLTczLjQxMy00MS40My01MC4xMTQtMzYuMzctODIuNzM0LTYwLjIwNC0xMDUuNTgyLTc3LjA3OS0zLjYzOS0yLjY4OC04Ljc3Ni0xLjgyMS0xMS4zMzkgMS45MDdsLTkuMDcyIDEzLjE5NmE3Ljk5OCA3Ljk5OCAwIDAgMCAxLjgzOSAxMC45NjdjMjIuODg3IDE2Ljg5OSA1NS40NTQgNDAuNjkgMTA1LjMwMyA3Ni44NjggMjAuMjc0IDE0Ljc4MSA1Ni41MjQgNDcuODEzIDkyLjI2NCA0Ny41NzMgMzUuNzI0LjI0MiA3MS45NjEtMzIuNzcxIDkyLjI2My00Ny41NzMgNDkuODUtMzYuMTc5IDgyLjQxOC01OS45NyAxMDUuMzAzLTc2Ljg2OGE3Ljk5OCA3Ljk5OCAwIDAgMCAxLjgzOS0xMC45NjdsLTkuMDcxLTEzLjE5NnpcIl0sXCJlbnZlbG9wZS1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYxOTlcIixcIk00MDAgMzJINDhDMjEuNDkgMzIgMCA1My40OSAwIDgwdjM1MmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDM1MmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6TTE3OC4xMTcgMjYyLjEwNEM4Ny40MjkgMTk2LjI4NyA4OC4zNTMgMTk2LjEyMSA2NCAxNzcuMTY3VjE1MmMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoMjcyYzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHYyNS4xNjdjLTI0LjM3MSAxOC45NjktMjMuNDM0IDE5LjEyNC0xMTQuMTE3IDg0LjkzOC0xMC41IDcuNjU1LTMxLjM5MiAyNi4xMi00NS44ODMgMjUuODk0LTE0LjUwMy4yMTgtMzUuMzY3LTE4LjIyNy00NS44ODMtMjUuODk1ek0zODQgMjE3Ljc3NVYzNjBjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDg4Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRWMjE3Ljc3NWMxMy45NTggMTAuNzk0IDMzLjMyOSAyNS4yMzYgOTUuMzAzIDcwLjIxNCAxNC4xNjIgMTAuMzQxIDM3Ljk3NSAzMi4xNDUgNjQuNjk0IDMyLjAxIDI2Ljg4Ny4xMzQgNTEuMDM3LTIyLjA0MSA2NC43Mi0zMi4wMjUgNjEuOTU4LTQ0Ljk2NSA4MS4zMjUtNTkuNDA2IDk1LjI4My03MC4xOTl6XCJdLGVxdWFsczpbNDQ4LDUxMixbXSxcImY1MmNcIixcIk00MTYgMzA0SDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzg0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bTAtMTkySDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzg0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJ6XCJdLGVyYXNlcjpbNTEyLDUxMixbXSxcImYxMmRcIixcIk00OTcuOTQxIDI3My45NDFjMTguNzQ1LTE4Ljc0NSAxOC43NDUtNDkuMTM3IDAtNjcuODgybC0xNjAtMTYwYy0xOC43NDUtMTguNzQ1LTQ5LjEzNi0xOC43NDYtNjcuODgzIDBsLTI1NiAyNTZjLTE4Ljc0NSAxOC43NDUtMTguNzQ1IDQ5LjEzNyAwIDY3Ljg4Mmw5NiA5NkE0OC4wMDQgNDguMDA0IDAgMCAwIDE0NCA0ODBoMzU2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJIMzU1Ljg4M2wxNDIuMDU4LTE0Mi4wNTl6bS0zMDIuNjI3LTYyLjYyN2wxMzcuMzczIDEzNy4zNzNMMjY1LjM3MyA0MTZIMTUwLjYyOGwtODAtODAgMTI0LjY4Ni0xMjQuNjg2elwiXSxcImV1cm8tc2lnblwiOlszMjAsNTEyLFtdLFwiZjE1M1wiLFwiTTMxMC43MDYgNDEzLjc2NWMtMS4zMTQtNi42My03LjgzNS0xMC44NzItMTQuNDI0LTkuMzY5LTEwLjY5MiAyLjQzOS0yNy40MjIgNS40MTMtNDUuNDI2IDUuNDEzLTU2Ljc2MyAwLTEwMS45MjktMzQuNzktMTIxLjQ2MS04NS40NDloMTEzLjY4OWExMiAxMiAwIDAgMCAxMS43MDgtOS4zNjlsNi4zNzMtMjguMzZjMS42ODYtNy41MDItNC4wMTktMTQuNjMxLTExLjcwOC0xNC42MzFIMTE1LjIyYy0xLjIxLTE0LjMyOC0xLjQxNC0yOC4yODcuMTM3LTQyLjI0NUgyNjEuOTVhMTIgMTIgMCAwIDAgMTEuNzIzLTkuNDM0bDYuNTEyLTI5Ljc1NWMxLjYzOC03LjQ4NC00LjA2MS0xNC41NjYtMTEuNzIzLTE0LjU2NkgxMzAuMTg0YzIwLjYzMy00NC45OTEgNjIuNjktNzUuMDMgMTE3LjYxOS03NS4wMyAxNC40ODYgMCAyOC41NjQgMi4yNSAzNy44NTEgNC4xNDUgNi4yMTYgMS4yNjggMTIuMzQ3LTIuNDk4IDE0LjAwMi04LjYyM2wxMS45OTEtNDQuMzY4YzEuODIyLTYuNzQxLTIuNDY1LTEzLjYxNi05LjMyNi0xNC45MTdDMjkwLjIxNyAzNC45MTIgMjcwLjcxIDMyIDI0OS42MzUgMzIgMTUyLjQ1MSAzMiA3NC4wMyA5Mi4yNTIgNDUuMDc1IDE3NkgxMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOS43NTVjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyMS41NjljLTEuMDA5IDEzLjYwNy0xLjE4MSAyOS4yODctLjE4MSA0Mi4yNDVIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjguMzZjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgzMC4xMTRDNjcuMTM5IDQxNC42OTIgMTQ1LjI2NCA0ODAgMjQ5LjYzNSA0ODBjMjYuMzAxIDAgNDguNTYyLTQuNTQ0IDYxLjEwMS03Ljc4OCA2LjE2Ny0xLjU5NSAxMC4wMjctNy43MDggOC43ODgtMTMuOTU3bC04LjgxOC00NC40OXpcIl0sXCJleGNoYW5nZS1hbHRcIjpbNTEyLDUxMixbXSxcImYzNjJcIixcIk0wIDE2OHYtMTZjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDM2MFY4MGMwLTIxLjM2NyAyNS44OTktMzIuMDQyIDQwLjk3MS0xNi45NzFsODAgODBjOS4zNzIgOS4zNzMgOS4zNzIgMjQuNTY5IDAgMzMuOTQxbC04MCA4MEM0MDkuOTU2IDI3MS45ODIgMzg0IDI2MS40NTYgMzg0IDI0MHYtNDhIMjRjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNHptNDg4IDE1MkgxMjh2LTQ4YzAtMjEuMzE0LTI1Ljg2Mi0zMi4wOC00MC45NzEtMTYuOTcxbC04MCA4MGMtOS4zNzIgOS4zNzMtOS4zNzIgMjQuNTY5IDAgMzMuOTQxbDgwIDgwQzEwMi4wNTcgNDYzLjk5NyAxMjggNDUzLjQzNyAxMjggNDMydi00OGgzNjBjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0di0xNmMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjR6XCJdLGV4Y2xhbWF0aW9uOlsxOTIsNTEyLFtdLFwiZjEyYVwiLFwiTTE3NiA0MzJjMCA0NC4xMTItMzUuODg4IDgwLTgwIDgwcy04MC0zNS44ODgtODAtODAgMzUuODg4LTgwIDgwLTgwIDgwIDM1Ljg4OCA4MCA4MHpNMjUuMjYgMjUuMTk5bDEzLjYgMjcyQzM5LjQ5OSAzMDkuOTcyIDUwLjA0MSAzMjAgNjIuODMgMzIwaDY2LjM0YzEyLjc4OSAwIDIzLjMzMS0xMC4wMjggMjMuOTctMjIuODAxbDEzLjYtMjcyQzE2Ny40MjUgMTEuNDkgMTU2LjQ5NiAwIDE0Mi43NyAwSDQ5LjIzQzM1LjUwNCAwIDI0LjU3NSAxMS40OSAyNS4yNiAyNS4xOTl6XCJdLFwiZXhjbGFtYXRpb24tY2lyY2xlXCI6WzUxMiw1MTIsW10sXCJmMDZhXCIsXCJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0Nmw3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6XCJdLFwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIjpbNTc2LDUxMixbXSxcImYwNzFcIixcIk01NjkuNTE3IDQ0MC4wMTNDNTg3Ljk3NSA0NzIuMDA3IDU2NC44MDYgNTEyIDUyNy45NCA1MTJINDguMDU0Yy0zNi45MzcgMC01OS45OTktNDAuMDU1LTQxLjU3Ny03MS45ODdMMjQ2LjQyMyAyMy45ODVjMTguNDY3LTMyLjAwOSA2NC43Mi0zMS45NTEgODMuMTU0IDBsMjM5Ljk0IDQxNi4wMjh6TTI4OCAzNTRjLTI1LjQwNSAwLTQ2IDIwLjU5NS00NiA0NnMyMC41OTUgNDYgNDYgNDYgNDYtMjAuNTk1IDQ2LTQ2LTIwLjU5NS00Ni00Ni00NnptLTQzLjY3My0xNjUuMzQ2bDcuNDE4IDEzNmMuMzQ3IDYuMzY0IDUuNjA5IDExLjM0NiAxMS45ODIgMTEuMzQ2aDQ4LjU0NmM2LjM3MyAwIDExLjYzNS00Ljk4MiAxMS45ODItMTEuMzQ2bDcuNDE4LTEzNmMuMzc1LTYuODc0LTUuMDk4LTEyLjY1NC0xMS45ODItMTIuNjU0aC02My4zODNjLTYuODg0IDAtMTIuMzU2IDUuNzgtMTEuOTgxIDEyLjY1NHpcIl0sZXhwYW5kOls0NDgsNTEyLFtdLFwiZjA2NVwiLFwiTTAgMTgwVjU2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDEyNGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDBjMCA2LjYtNS40IDEyLTEyIDEySDY0djg0YzAgNi42LTUuNCAxMi0xMiAxMkgxMmMtNi42IDAtMTItNS40LTEyLTEyek0yODggNDR2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDg0djg0YzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMzAwYy02LjYgMC0xMiA1LjQtMTIgMTJ6bTE0OCAyNzZoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2ODRoLTg0Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDEyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYzMzJjMC02LjYtNS40LTEyLTEyLTEyek0xNjAgNDY4di00MGMwLTYuNi01LjQtMTItMTItMTJINjR2LTg0YzAtNi42LTUuNC0xMi0xMi0xMkgxMmMtNi42IDAtMTIgNS40LTEyIDEydjEyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxMjRjNi42IDAgMTItNS40IDEyLTEyelwiXSxcImV4cGFuZC1hcnJvd3MtYWx0XCI6WzQ0OCw1MTIsW10sXCJmMzFlXCIsXCJNNDQ4LjEgMzQ0djExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNGgtMTEyYy0yMS40IDAtMzIuMS0yNS45LTE3LTQxbDM2LjItMzYuMkwyMjQgMjk1LjYgMTE2LjggNDAyLjkgMTUzIDQzOWMxNS4xIDE1LjEgNC40IDQxLTE3IDQxSDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYzNDRjMC0yMS40IDI1LjktMzIuMSA0MS0xN2wzNi4yIDM2LjJMMTg0LjUgMjU2IDc3LjIgMTQ4LjcgNDEgMTg1Yy0xNS4xIDE1LjEtNDEgNC40LTQxLTE3VjU2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDExMmMyMS40IDAgMzIuMSAyNS45IDE3IDQxbC0zNi4yIDM2LjJMMjI0IDIxNi40bDEwNy4zLTEwNy4zTDI5NS4xIDczYy0xNS4xLTE1LjEtNC40LTQxIDE3LTQxaDExMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYxMTJjMCAyMS40LTI1LjkgMzIuMS00MSAxN2wtMzYuMi0zNi4yTDI2My42IDI1NmwxMDcuMyAxMDcuMyAzNi4yLTM2LjJjMTUuMS0xNS4yIDQxLTQuNSA0MSAxNi45elwiXSxcImV4dGVybmFsLWxpbmstYWx0XCI6WzU3Niw1MTIsW10sXCJmMzVkXCIsXCJNNTc2IDI0djEyNy45ODRjMCAyMS40NjEtMjUuOTYgMzEuOTgtNDAuOTcxIDE2Ljk3MWwtMzUuNzA3LTM1LjcwOS0yNDMuNTIzIDI0My41MjNjLTkuMzczIDkuMzczLTI0LjU2OCA5LjM3My0zMy45NDEgMGwtMjIuNjI3LTIyLjYyN2MtOS4zNzMtOS4zNzMtOS4zNzMtMjQuNTY5IDAtMzMuOTQxTDQ0Mi43NTYgNzYuNjc2bC0zNS43MDMtMzUuNzA1QzM5MS45ODIgMjUuOSA0MDIuNjU2IDAgNDI0LjAyNCAwSDU1MmMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR6TTQwNy4wMjkgMjcwLjc5NGwtMTYgMTZBMjMuOTk5IDIzLjk5OSAwIDAgMCAzODQgMzAzLjc2NVY0NDhINjRWMTI4aDI2NGEyNC4wMDMgMjQuMDAzIDAgMCAwIDE2Ljk3LTcuMDI5bDE2LTE2QzM3Ni4wODkgODkuODUxIDM2NS4zODEgNjQgMzQ0IDY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2MzUyYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMzUyYzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMjg3Ljc2NGMwLTIxLjM4Mi0yNS44NTItMzIuMDktNDAuOTcxLTE2Ljk3elwiXSxcImV4dGVybmFsLWxpbmstc3F1YXJlLWFsdFwiOls0NDgsNTEyLFtdLFwiZjM2MFwiLFwiTTQ0OCA4MHYzNTJjMCAyNi41MS0yMS40OSA0OC00OCA0OEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OFY4MGMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDM1MmMyNi41MSAwIDQ4IDIxLjQ5IDQ4IDQ4em0tODggMTZIMjQ4LjAyOWMtMjEuMzEzIDAtMzIuMDggMjUuODYxLTE2Ljk3MSA0MC45NzFsMzEuOTg0IDMxLjk4N0w2Ny41MTUgMzY0LjQ4NWMtNC42ODYgNC42ODYtNC42ODYgMTIuMjg0IDAgMTYuOTcxbDMxLjAyOSAzMS4wMjljNC42ODcgNC42ODYgMTIuMjg1IDQuNjg2IDE2Ljk3MSAwbDE5NS41MjYtMTk1LjUyNiAzMS45ODggMzEuOTkxQzM1OC4wNTggMjYzLjk3NyAzODQgMjUzLjQyNSAzODQgMjMxLjk3OVYxMjBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0elwiXSxleWU6WzU3Niw1MTIsW10sXCJmMDZlXCIsXCJNNTY5LjM1NCAyMzEuNjMxQzUxMi45NjkgMTM1Ljk0OSA0MDcuODEgNzIgMjg4IDcyIDE2OC4xNCA3MiA2My4wMDQgMTM1Ljk5NCA2LjY0NiAyMzEuNjMxYTQ3Ljk5OSA0Ny45OTkgMCAwIDAgMCA0OC43MzlDNjMuMDMxIDM3Ni4wNTEgMTY4LjE5IDQ0MCAyODggNDQwYzExOS44NiAwIDIyNC45OTYtNjMuOTk0IDI4MS4zNTQtMTU5LjYzMWE0Ny45OTcgNDcuOTk3IDAgMCAwIDAtNDguNzM4ek0yODggMzkyYy03NS4xNjIgMC0xMzYtNjAuODI3LTEzNi0xMzYgMC03NS4xNjIgNjAuODI2LTEzNiAxMzYtMTM2IDc1LjE2MiAwIDEzNiA2MC44MjYgMTM2IDEzNiAwIDc1LjE2Mi02MC44MjYgMTM2LTEzNiAxMzZ6bTEwNC0xMzZjMCA1Ny40MzgtNDYuNTYyIDEwNC0xMDQgMTA0cy0xMDQtNDYuNTYyLTEwNC0xMDRjMC0xNy43MDggNC40MzEtMzQuMzc5IDEyLjIzNi00OC45NzNsLS4wMDEuMDMyYzAgMjMuNjUxIDE5LjE3MyA0Mi44MjMgNDIuODI0IDQyLjgyM3M0Mi44MjQtMTkuMTczIDQyLjgyNC00Mi44MjNjMC0yMy42NTEtMTkuMTczLTQyLjgyNC00Mi44MjQtNDIuODI0bC0uMDMyLjAwMUMyNTMuNjIxIDE1Ni40MzEgMjcwLjI5MiAxNTIgMjg4IDE1MmM1Ny40MzggMCAxMDQgNDYuNTYyIDEwNCAxMDR6XCJdLFwiZXllLWRyb3BwZXJcIjpbNTEyLDUxMixbXSxcImYxZmJcIixcIk01MC43NSAzMzMuMjVjLTEyIDEyLTE4Ljc1IDI4LjI4LTE4Ljc1IDQ1LjI2VjQyNEwwIDQ4MGwzMiAzMiA1Ni0zMmg0NS40OWMxNi45NyAwIDMzLjI1LTYuNzQgNDUuMjUtMTguNzRsMTI2LjY0LTEyNi42Mi0xMjgtMTI4TDUwLjc1IDMzMy4yNXpNNDgzLjg4IDI4LjEyYy0zNy40Ny0zNy41LTk4LjI4LTM3LjUtMTM1Ljc1IDBsLTc3LjA5IDc3LjA5LTEzLjEtMTMuMWMtOS40NC05LjQ0LTI0LjY1LTkuMzEtMzMuOTQgMGwtNDAuOTcgNDAuOTdjLTkuMzcgOS4zNy05LjM3IDI0LjU3IDAgMzMuOTRsMTYxLjk0IDE2MS45NGM5LjQ0IDkuNDQgMjQuNjUgOS4zMSAzMy45NCAwTDQxOS44OCAyODhjOS4zNy05LjM3IDkuMzctMjQuNTcgMC0zMy45NGwtMTMuMS0xMy4xIDc3LjA5LTc3LjA5YzM3LjUxLTM3LjQ4IDM3LjUxLTk4LjI2LjAxLTEzNS43NXpcIl0sXCJleWUtc2xhc2hcIjpbNTc2LDUxMixbXSxcImYwNzBcIixcIk0yODYuNjkzIDM5MS45ODRsMzIuNTc5IDQ2LjU0MkEzMzMuOTU4IDMzMy45NTggMCAwIDEgMjg4IDQ0MEMxNjguMTkgNDQwIDYzLjAzMSAzNzYuMDUxIDYuNjQ2IDI4MC4zNjlhNDcuOTk5IDQ3Ljk5OSAwIDAgMSAwLTQ4LjczOWMyNC4wMjMtNDAuNzY2IDU2LjkxMy03NS43NzUgOTYuMDI0LTEwMi41MzdsNTcuMDc3IDgxLjUzOUMxNTQuNzM2IDIyNC44MiAxNTIgMjQwLjA4NyAxNTIgMjU2YzAgNzQuNzM2IDYwLjEzNSAxMzUuMjgyIDEzNC42OTMgMTM1Ljk4NHptMjgyLjY2MS0xMTEuNjE1Yy0zMS42NjcgNTMuNzM3LTc4Ljc0NyA5Ny40Ni0xMzUuMTc1IDEyNS40NzVsLjAxMS4wMTUgNDEuNDcgNTkuMmM3LjYgMTAuODYgNC45NiAyNS44Mi01LjkgMzMuNDJsLTEzLjExIDkuMThjLTEwLjg2IDcuNi0yNS44MiA0Ljk2LTMzLjQyLTUuOUwxMDAuMzQgNDYuOTRjLTcuNi0xMC44Ni00Ljk2LTI1LjgyIDUuOS0zMy40MmwxMy4xMS05LjE4YzEwLjg2LTcuNiAyNS44Mi00Ljk2IDMzLjQyIDUuOWw1MS4wMzggNzIuNjE3QzIzMC42OCA3NS43NzYgMjU4LjkwNSA3MiAyODggNzJjMTE5LjgxIDAgMjI0Ljk2OSA2My45NDkgMjgxLjM1NCAxNTkuNjMxYTQ4LjAwMiA0OC4wMDIgMCAwIDEgMCA0OC43Mzh6TTQyNCAyNTZjMC03NS4xNzQtNjAuODM4LTEzNi0xMzYtMTM2LTE3LjkzOSAwLTM1LjA1NiAzLjQ3My01MC43MjkgOS43NzJsMTkuMjk5IDI3LjA1OGMyNS44NjktOC4xNzEgNTUuMDQ0LTYuMTYzIDgwLjQgNy40MWgtLjAzYy0yMy42NSAwLTQyLjgyIDE5LjE3LTQyLjgyIDQyLjgyIDAgMjMuNjI2IDE5LjE0NyA0Mi44MiA0Mi44MiA0Mi44MiAyMy42NSAwIDQyLjgyLTE5LjE3IDQyLjgyLTQyLjgydi0uMDNjMTguNDYyIDM0LjQ5IDE2LjMxMiA3Ny45MTQtOC4yNSAxMTAuOTV2LjAxbDE5LjMxNCAyNy4wNjFDNDExLjQ5NiAzMjEuMiA0MjQgMjkwLjA3NCA0MjQgMjU2ek0yNjIuMDE0IDM1Ni43MjdsLTc3LjUzLTExMC43NTdjLTUuMDE0IDUyLjM4NyAyOS4zMTQgOTguMzU0IDc3LjUzIDExMC43NTd6XCJdLFwiZmFzdC1iYWNrd2FyZFwiOls1MTIsNTEyLFtdLFwiZjA0OVwiLFwiTTAgNDM2Vjc2YzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2MTUxLjlMMjM1LjUgNzEuNEMyNTYuMSA1NC4zIDI4OCA2OC42IDI4OCA5NnYxMzEuOUw0NTkuNSA3MS40QzQ4MC4xIDU0LjMgNTEyIDY4LjYgNTEyIDk2djMyMGMwIDI3LjQtMzEuOSA0MS43LTUyLjUgMjQuNkwyODggMjg1LjNWNDE2YzAgMjcuNC0zMS45IDQxLjctNTIuNSAyNC42TDY0IDI4NS4zVjQzNmMwIDYuNi01LjQgMTItMTIgMTJIMTJjLTYuNiAwLTEyLTUuNC0xMi0xMnpcIl0sXCJmYXN0LWZvcndhcmRcIjpbNTEyLDUxMixbXSxcImYwNTBcIixcIk01MTIgNzZ2MzYwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMlYyODQuMUwyNzYuNSA0NDAuNmMtMjAuNiAxNy4yLTUyLjUgMi44LTUyLjUtMjQuNlYyODQuMUw1Mi41IDQ0MC42QzMxLjkgNDU3LjggMCA0NDMuNCAwIDQxNlY5NmMwLTI3LjQgMzEuOS00MS43IDUyLjUtMjQuNkwyMjQgMjI2LjhWOTZjMC0yNy40IDMxLjktNDEuNyA1Mi41LTI0LjZMNDQ4IDIyNi44Vjc2YzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ6XCJdLGZheDpbNTEyLDUxMixbXSxcImYxYWNcIixcIk0xMjggMTQ0djMyMGMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjE0NGMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDMyYzI2LjUxIDAgNDggMjEuNDkgNDggNDh6bTM4NCA2NHYyNTZjMCAyNi41MS0yMS40OSA0OC00OCA0OEgxOTJjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWNDBjMC0yMi4wOTEgMTcuOTA5LTQwIDQwLTQwaDIwNy40MzJhMzkuOTk2IDM5Ljk5NiAwIDAgMSAyOC4yODQgMTEuNzE2bDQ4LjU2OSA0OC41NjlBMzkuOTk5IDM5Ljk5OSAwIDAgMSA0ODAgODguNTY4djc0LjE3NGMxOC42NDEgNi41OTEgMzIgMjQuMzYgMzIgNDUuMjU4em0tMzIwLTE2aDI0MFY5NmgtMjRjLTEzLjIwMyAwLTI0LTEwLjc5Ny0yNC0yNFY0OEgxOTJ2MTQ0em05NiAyMDRjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MHptMC0xMjhjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MHptMTI4IDEyOGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTQwem0wLTEyOGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTQwelwiXSxmZWF0aGVyOls1MTIsNTEyLFtdLFwiZjUyZFwiLFwiTTQ2Ny4xNCA0NC44NGMtNjIuNTUtNjIuNDgtMTYxLjY3LTY0Ljc4LTI1Mi4yOCAyNS43My03OC42MSA3OC41Mi02MC45OCA2MC45Mi04NS43NSA4NS42Ni02MC40NiA2MC4zOS03MC4zOSAxNTAuODMtNjMuNjQgMjExLjE3bDE3OC40NC0xNzguMjVjNi4yNi02LjI1IDE2LjQtNi4yNSAyMi42NSAwczYuMjUgMTYuMzggMCAyMi42M0w3LjA0IDQ3MS4wM2MtOS4zOCA5LjM3LTkuMzggMjQuNTcgMCAzMy45NCA5LjM4IDkuMzcgMjQuNiA5LjM3IDMzLjk4IDBsNjYuMS02Ni4wM0MxNTkuNDIgNDU0LjY1IDI3OSA0NTcuMTEgMzUzLjk1IDM4NGgtOTguMTlsMTQ3LjU3LTQ5LjE0YzQ5Ljk5LTQ5LjkzIDM2LjM4LTM2LjE4IDQ2LjMxLTQ2Ljg2aC05Ny43OGwxMzEuNTQtNDMuOGM0NS40NC03NC40NiAzNC4zMS0xNDguODQtMTYuMjYtMTk5LjM2elwiXSxcImZlYXRoZXItYWx0XCI6WzUxMiw1MTIsW10sXCJmNTZiXCIsXCJNNTEyIDBDNDYwLjIyIDMuNTYgOTYuNDQgMzguMiA3MS4wMSAyODcuNjFjLTMuMDkgMjYuNjYtNC44NCA1My40NC01Ljk5IDgwLjI0bDE3OC44Ny0xNzguNjljNi4yNS02LjI1IDE2LjQtNi4yNSAyMi42NSAwczYuMjUgMTYuMzggMCAyMi42M0w3LjA0IDQ3MS4wM2MtOS4zOCA5LjM3LTkuMzggMjQuNTcgMCAzMy45NCA5LjM4IDkuMzcgMjQuNTkgOS4zNyAzMy45OCAwbDU3LjEzLTU3LjA3YzQyLjA5LS4xNCA4NC4xNS0yLjUzIDEyNS45Ni03LjM2IDUzLjQ4LTUuNDQgOTcuMDItMjYuNDcgMTMyLjU4LTU2LjU0SDI1NS43NGwxNDYuNzktNDguODhjMTEuMjUtMTQuODkgMjEuMzctMzAuNzEgMzAuNDUtNDcuMTJoLTgxLjE0bDEwNi41NC01My4yMUM1MDAuMjkgMTMyLjg2IDUxMC4xOSAyNi4yNiA1MTIgMHpcIl0sZmVtYWxlOlsyNTYsNTEyLFtdLFwiZjE4MlwiLFwiTTEyOCAwYzM1LjM0NiAwIDY0IDI4LjY1NCA2NCA2NHMtMjguNjU0IDY0LTY0IDY0Yy0zNS4zNDYgMC02NC0yOC42NTQtNjQtNjRTOTIuNjU0IDAgMTI4IDBtMTE5LjI4MyAzNTQuMTc5bC00OC0xOTJBMjQgMjQgMCAwIDAgMTc2IDE0NGgtMTEuMzZjLTIyLjcxMSAxMC40NDMtNDkuNTkgMTAuODk0LTczLjI4IDBIODBhMjQgMjQgMCAwIDAtMjMuMjgzIDE4LjE3OWwtNDggMTkyQzQuOTM1IDM2OS4zMDUgMTYuMzgzIDM4NCAzMiAzODRoNTZ2MTA0YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgzMmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMzg0aDU2YzE1LjU5MSAwIDI3LjA3MS0xNC42NzEgMjMuMjgzLTI5LjgyMXpcIl0sXCJmaWdodGVyLWpldFwiOls2NDAsNTEyLFtdLFwiZjBmYlwiLFwiTTU0NCAyMjRsLTEyOC0xNi00OC0xNmgtMjRMMjI3LjE1OCA0NGgzOS41MDlDMjc4LjMzMyA0NCAyODggNDEuMzc1IDI4OCAzOHMtOS42NjctNi0yMS4zMzMtNkgxNTJ2MTJoMTZ2MTY0aC00OGwtNjYuNjY3LTgwSDE4LjY2N0w4IDEzOC42NjdWMjA4aDh2MTZoNDh2Mi42NjZsLTY0IDh2NDIuNjY3bDY0IDhWMjg4SDE2djE2SDh2NjkuMzMzTDE4LjY2NyAzODRoMzQuNjY3TDEyMCAzMDRoNDh2MTY0aC0xNnYxMmgxMTQuNjY3YzExLjY2NyAwIDIxLjMzMy0yLjYyNSAyMS4zMzMtNnMtOS42NjctNi0yMS4zMzMtNmgtMzkuNTA5TDM0NCAzMjBoMjRsNDgtMTYgMTI4LTE2Yzk2LTIxLjMzMyA5Ni0yNi41ODMgOTYtMzIgMC01LjQxNyAwLTEwLjY2Ny05Ni0zMnpcIl0sZmlsZTpbMzg0LDUxMixbXSxcImYxNWJcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTE2MC0xNC4xdjYuMUgyNTZWMGg2LjFjNi40IDAgMTIuNSAyLjUgMTcgN2w5Ny45IDk4YzQuNSA0LjUgNyAxMC42IDcgMTYuOXpcIl0sXCJmaWxlLWFsdFwiOlszODQsNTEyLFtdLFwiZjE1Y1wiLFwiTTIyNCAxMzZWMEgyNEMxMC43IDAgMCAxMC43IDAgMjR2NDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0aDMzNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNjBIMjQ4Yy0xMy4yIDAtMjQtMTAuOC0yNC0yNHptNjQgMjM2YzAgNi42LTUuNCAxMi0xMiAxMkgxMDhjLTYuNiAwLTEyLTUuNC0xMi0xMnYtOGMwLTYuNiA1LjQtMTIgMTItMTJoMTY4YzYuNiAwIDEyIDUuNCAxMiAxMnY4em0wLTY0YzAgNi42LTUuNCAxMi0xMiAxMkgxMDhjLTYuNiAwLTEyLTUuNC0xMi0xMnYtOGMwLTYuNiA1LjQtMTIgMTItMTJoMTY4YzYuNiAwIDEyIDUuNCAxMiAxMnY4em0wLTcydjhjMCA2LjYtNS40IDEyLTEyIDEySDEwOGMtNi42IDAtMTItNS40LTEyLTEydi04YzAtNi42IDUuNC0xMiAxMi0xMmgxNjhjNi42IDAgMTIgNS40IDEyIDEyem05Ni0xMTQuMXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6XCJdLFwiZmlsZS1hcmNoaXZlXCI6WzM4NCw1MTIsW10sXCJmMWM2XCIsXCJNMjI0IDEzNlYwaC02My42djMyaC0zMlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0ek05NS45IDMyaDMydjMyaC0zMlYzMnptMzIuMyAzODRjLTMzLjIgMC01OC0zMC40LTUxLjQtNjIuOUw5Ni40IDI1NnYtMzJoMzJ2LTMyaC0zMnYtMzJoMzJ2LTMyaC0zMlY5NmgzMlY2NGgzMnYzMmgtMzJ2MzJoMzJ2MzJoLTMydjMyaDMydjMyaC0zMnYzMmgyMi4xYzUuNyAwIDEwLjcgNC4xIDExLjggOS43bDE3LjMgODcuN2M2LjQgMzIuNC0xOC40IDYyLjYtNTEuNCA2Mi42em0zMi43LTUzYzAgMTQuOS0xNC41IDI3LTMyLjQgMjdTOTYgMzc4IDk2IDM2M2MwLTE0LjkgMTQuNS0yNyAzMi40LTI3czMyLjUgMTIuMSAzMi41IDI3ek0zODQgMTIxLjl2Ni4xSDI1NlYwaDYuMWM2LjQgMCAxMi41IDIuNSAxNyA3bDk3LjkgOThjNC41IDQuNSA3IDEwLjYgNyAxNi45elwiXSxcImZpbGUtYXVkaW9cIjpbMzg0LDUxMixbXSxcImYxYzdcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bS02NCAyNjhjMCAxMC43LTEyLjkgMTYtMjAuNSA4LjVMMTA0IDM3Nkg3NmMtNi42IDAtMTItNS40LTEyLTEydi01NmMwLTYuNiA1LjQtMTIgMTItMTJoMjhsMzUuNS0zNi41YzcuNi03LjYgMjAuNS0yLjIgMjAuNSA4LjV2MTM2em0zMy4yLTQ3LjZjOS4xLTkuMyA5LjEtMjQuMSAwLTMzLjQtMjIuMS0yMi44IDEyLjItNTYuMiAzNC40LTMzLjUgMjcuMiAyNy45IDI3LjIgNzIuNCAwIDEwMC40LTIxLjggMjIuMy01Ni45LTEwLjQtMzQuNC0zMy41em04Ni0xMTcuMWM1NC40IDU1LjkgNTQuNCAxNDQuOCAwIDIwMC44LTIxLjggMjIuNC01Ny0xMC4zLTM0LjQtMzMuNSAzNi4yLTM3LjIgMzYuMy05Ni41IDAtMTMzLjgtMjIuMS0yMi44IDEyLjMtNTYuMyAzNC40LTMzLjV6TTM4NCAxMjEuOXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6XCJdLFwiZmlsZS1jb2RlXCI6WzM4NCw1MTIsW10sXCJmMWM5XCIsXCJNMzg0IDEyMS45NDFWMTI4SDI1NlYwaDYuMDU5YzYuMzY1IDAgMTIuNDcgMi41MjkgMTYuOTcxIDcuMDI5bDk3Ljk0MSA5Ny45NDFBMjQuMDA1IDI0LjAwNSAwIDAgMSAzODQgMTIxLjk0MXpNMjQ4IDE2MGMtMTMuMiAwLTI0LTEwLjgtMjQtMjRWMEgyNEMxMC43NDUgMCAwIDEwLjc0NSAwIDI0djQ2NGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzM2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxNjBIMjQ4ek0xMjMuMjA2IDQwMC41MDVhNS40IDUuNCAwIDAgMS03LjYzMy4yNDZsLTY0Ljg2Ni02MC44MTJhNS40IDUuNCAwIDAgMSAwLTcuODc5bDY0Ljg2Ni02MC44MTJhNS40IDUuNCAwIDAgMSA3LjYzMy4yNDZsMTkuNTc5IDIwLjg4NWE1LjQgNS40IDAgMCAxLS4zNzIgNy43NDdMMTAxLjY1IDMzNmw0MC43NjMgMzUuODc0YTUuNCA1LjQgMCAwIDEgLjM3MiA3Ljc0N2wtMTkuNTc5IDIwLjg4NHptNTEuMjk1IDUwLjQ3OWwtMjcuNDUzLTcuOTdhNS40MDIgNS40MDIgMCAwIDEtMy42ODEtNi42OTJsNjEuNDQtMjExLjYyNmE1LjQwMiA1LjQwMiAwIDAgMSA2LjY5Mi0zLjY4MWwyNy40NTIgNy45N2E1LjQgNS40IDAgMCAxIDMuNjggNi42OTJsLTYxLjQ0IDIxMS42MjZhNS4zOTcgNS4zOTcgMCAwIDEtNi42OSAzLjY4MXptMTYwLjc5Mi0xMTEuMDQ1bC02NC44NjYgNjAuODEyYTUuNCA1LjQgMCAwIDEtNy42MzMtLjI0NmwtMTkuNTgtMjAuODg1YTUuNCA1LjQgMCAwIDEgLjM3Mi03Ljc0N0wyODQuMzUgMzM2bC00MC43NjMtMzUuODc0YTUuNCA1LjQgMCAwIDEtLjM3Mi03Ljc0N2wxOS41OC0yMC44ODVhNS40IDUuNCAwIDAgMSA3LjYzMy0uMjQ2bDY0Ljg2NiA2MC44MTJhNS40IDUuNCAwIDAgMS0uMDAxIDcuODc5elwiXSxcImZpbGUtY29udHJhY3RcIjpbMzg0LDUxMixbXSxcImY1NmNcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6TTY0IDcyYzAtNC40MiAzLjU4LTggOC04aDgwYzQuNDIgMCA4IDMuNTggOCA4djE2YzAgNC40Mi0zLjU4IDgtOCA4SDcyYy00LjQyIDAtOC0zLjU4LTgtOFY3MnptMCA2NGMwLTQuNDIgMy41OC04IDgtOGg4MGM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LTh2LTE2em0xOTIuODEgMjQ4SDMwNGM4Ljg0IDAgMTYgNy4xNiAxNiAxNnMtNy4xNiAxNi0xNiAxNmgtNDcuMTljLTE2LjQ1IDAtMzEuMjctOS4xNC0zOC42NC0yMy44Ni0yLjk1LTUuOTItOC4wOS02LjUyLTEwLjE3LTYuNTJzLTcuMjIuNTktMTAuMDIgNi4xOWwtNy42NyAxNS4zNGExNS45ODYgMTUuOTg2IDAgMCAxLTE0LjMxIDguODRjLS4zOCAwLS43NS0uMDItMS4xNC0uMDUtNi40NS0uNDUtMTItNC43NS0xNC4wMy0xMC44OUwxNDQgMzU0LjU5bC0xMC42MSAzMS44OGMtNS44OSAxNy42Ni0yMi4zOCAyOS41My00MSAyOS41M0g4MGMtOC44NCAwLTE2LTcuMTYtMTYtMTZzNy4xNi0xNiAxNi0xNmgxMi4zOWM0LjgzIDAgOS4xMS0zLjA4IDEwLjY0LTcuNjZsMTguMTktNTQuNjRjMy4zLTkuODEgMTIuNDQtMTYuNDEgMjIuNzgtMTYuNDFzMTkuNDggNi41OSAyMi43NyAxNi40MWwxMy44OCA0MS42NGMxOS43Ny0xNi4xOSA1NC4wNS05LjcgNjYgMTQuMTYgMi4wMiA0LjA2IDUuOTYgNi41IDEwLjE2IDYuNXpNMzc3IDEwNUwyNzkuMSA3Yy00LjUtNC41LTEwLjYtNy0xNy03SDI1NnYxMjhoMTI4di02LjFjMC02LjMtMi41LTEyLjQtNy0xNi45elwiXSxcImZpbGUtZG93bmxvYWRcIjpbMzg0LDUxMixbXSxcImY1NmRcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTc2LjQ1IDIxMS4zNmwtOTYuNDIgOTUuN2MtNi42NSA2LjYxLTE3LjM5IDYuNjEtMjQuMDQgMGwtOTYuNDItOTUuN0M3My40MiAzMzcuMjkgODAuNTQgMzIwIDk0LjgyIDMyMEgxNjB2LTgwYzAtOC44NCA3LjE2LTE2IDE2LTE2aDMyYzguODQgMCAxNiA3LjE2IDE2IDE2djgwaDY1LjE4YzE0LjI4IDAgMjEuNCAxNy4yOSAxMS4yNyAyNy4zNnpNMzc3IDEwNUwyNzkuMSA3Yy00LjUtNC41LTEwLjYtNy0xNy03SDI1NnYxMjhoMTI4di02LjFjMC02LjMtMi41LTEyLjQtNy0xNi45elwiXSxcImZpbGUtZXhjZWxcIjpbMzg0LDUxMixbXSxcImYxYzNcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTYwLjEgMTA2LjVMMjI0IDMzNmw2MC4xIDkzLjVjNS4xIDgtLjYgMTguNS0xMC4xIDE4LjVoLTM0LjljLTQuNCAwLTguNS0yLjQtMTAuNi02LjNDMjA4LjkgNDA1LjUgMTkyIDM3MyAxOTIgMzczYy02LjQgMTQuOC0xMCAyMC0zNi42IDY4LjgtMi4xIDMuOS02LjEgNi4zLTEwLjUgNi4zSDExMGMtOS41IDAtMTUuMi0xMC41LTEwLjEtMTguNWw2MC4zLTkzLjUtNjAuMy05My41Yy01LjItOCAuNi0xOC41IDEwLjEtMTguNWgzNC44YzQuNCAwIDguNSAyLjQgMTAuNiA2LjMgMjYuMSA0OC44IDIwIDMzLjYgMzYuNiA2OC41IDAgMCA2LjEtMTEuNyAzNi42LTY4LjUgMi4xLTMuOSA2LjItNi4zIDEwLjYtNi4zSDI3NGM5LjUtLjEgMTUuMiAxMC40IDEwLjEgMTguNHpNMzg0IDEyMS45djYuMUgyNTZWMGg2LjFjNi40IDAgMTIuNSAyLjUgMTcgN2w5Ny45IDk4YzQuNSA0LjUgNyAxMC42IDcgMTYuOXpcIl0sXCJmaWxlLWV4cG9ydFwiOls1NzYsNTEyLFtdLFwiZjU2ZVwiLFwiTTM4NCAxMjEuOWMwLTYuMy0yLjUtMTIuNC03LTE2LjlMMjc5LjEgN2MtNC41LTQuNS0xMC42LTctMTctN0gyNTZ2MTI4aDEyOHYtNi4xek0xOTIgMzM2di0zMmMwLTguODQgNy4xNi0xNiAxNi0xNmgxNzZWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjRWMEgyNEMxMC43IDAgMCAxMC43IDAgMjR2NDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0aDMzNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFYzNTJIMjA4Yy04Ljg0IDAtMTYtNy4xNi0xNi0xNnptMzc5LjA1LTI4LjAybC05NS43LTk2LjQzYy0xMC4wNi0xMC4xNC0yNy4zNi0zLjAxLTI3LjM2IDExLjI3VjI4OEgzODR2NjRoNjMuOTl2NjUuMThjMCAxNC4yOCAxNy4yOSAyMS40MSAyNy4zNiAxMS4yN2w5NS43LTk2LjQyYzYuNi02LjY2IDYuNi0xNy40IDAtMjQuMDV6XCJdLFwiZmlsZS1pbWFnZVwiOlszODQsNTEyLFtdLFwiZjFjNVwiLFwiTTM4NCAxMjEuOTQxVjEyOEgyNTZWMGg2LjA1OWEyNCAyNCAwIDAgMSAxNi45NyA3LjAyOWw5Ny45NDEgOTcuOTQxYTI0LjAwMiAyNC4wMDIgMCAwIDEgNy4wMyAxNi45NzF6TTI0OCAxNjBjLTEzLjIgMC0yNC0xMC44LTI0LTI0VjBIMjRDMTAuNzQ1IDAgMCAxMC43NDUgMCAyNHY0NjRjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDMzNmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMTYwSDI0OHptLTEzNS40NTUgMTZjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHMtMjEuNDkgNDgtNDggNDgtNDgtMjEuNDktNDgtNDggMjEuNDkxLTQ4IDQ4LTQ4em0yMDggMjQwaC0yNTZsLjQ4NS00OC40ODVMMTA0LjU0NSAzMjhjNC42ODYtNC42ODYgMTEuNzk5LTQuMjAxIDE2LjQ4NS40ODVMMTYwLjU0NSAzNjggMjY0LjA2IDI2NC40ODVjNC42ODYtNC42ODYgMTIuMjg0LTQuNjg2IDE2Ljk3MSAwTDMyMC41NDUgMzA0djExMnpcIl0sXCJmaWxlLWltcG9ydFwiOls1MTIsNTEyLFtdLFwiZjU2ZlwiLFwiTTE2IDI4OGMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTEydi02NEgxNnptMzM2LTE1MlYwSDE1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjR2MjY0aDEyNy45OXYtNjUuMThjMC0xNC4yOCAxNy4yOS0yMS40MSAyNy4zNi0xMS4yN2w5NS43IDk2LjQzYzYuNiA2LjY1IDYuNiAxNy4zOSAwIDI0LjA0bC05NS43IDk2LjQyYy0xMC4wNiAxMC4xNC0yNy4zNiAzLjAxLTI3LjM2LTExLjI3VjM1MkgxMjh2MTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0aDMzNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNjBIMzc2Yy0xMy4yIDAtMjQtMTAuOC0yNC0yNHptMTUzLTMxTDQwNy4xIDdjLTQuNS00LjUtMTAuNi03LTE3LTdIMzg0djEyOGgxMjh2LTYuMWMwLTYuMy0yLjUtMTIuNC03LTE2Ljl6XCJdLFwiZmlsZS1pbnZvaWNlXCI6WzM4NCw1MTIsW10sXCJmNTcwXCIsXCJNMjg4IDI1Nkg5NnY2NGgxOTJ2LTY0em04OS0xNTFMMjc5LjEgN2MtNC41LTQuNS0xMC42LTctMTctN0gyNTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTE1MyAzMVYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0ek02NCA3MmMwLTQuNDIgMy41OC04IDgtOGg4MGM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LThWNzJ6bTAgNjRjMC00LjQyIDMuNTgtOCA4LThoODBjNC40MiAwIDggMy41OCA4IDh2MTZjMCA0LjQyLTMuNTggOC04IDhINzJjLTQuNDIgMC04LTMuNTgtOC04di0xNnptMjU2IDMwNGMwIDQuNDItMy41OCA4LTggOGgtODBjLTQuNDIgMC04LTMuNTgtOC04di0xNmMwLTQuNDIgMy41OC04IDgtOGg4MGM0LjQyIDAgOCAzLjU4IDggOHYxNnptMC0yMDB2OTZjMCA4Ljg0LTcuMTYgMTYtMTYgMTZIODBjLTguODQgMC0xNi03LjE2LTE2LTE2di05NmMwLTguODQgNy4xNi0xNiAxNi0xNmgyMjRjOC44NCAwIDE2IDcuMTYgMTYgMTZ6XCJdLFwiZmlsZS1pbnZvaWNlLWRvbGxhclwiOlszODQsNTEyLFtdLFwiZjU3MVwiLFwiTTM3NyAxMDVMMjc5LjEgN2MtNC41LTQuNS0xMC42LTctMTctN0gyNTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTE1MyAzMVYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0ek02NCA3MmMwLTQuNDIgMy41OC04IDgtOGg4MGM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LThWNzJ6bTAgODB2LTE2YzAtNC40MiAzLjU4LTggOC04aDgwYzQuNDIgMCA4IDMuNTggOCA4djE2YzAgNC40Mi0zLjU4IDgtOCA4SDcyYy00LjQyIDAtOC0zLjU4LTgtOHptMTQ0IDI2My44OFY0NDBjMCA0LjQyLTMuNTggOC04IDhoLTE2Yy00LjQyIDAtOC0zLjU4LTgtOHYtMjQuMjljLTExLjI5LS41OC0yMi4yNy00LjUyLTMxLjM3LTExLjM1LTMuOS0yLjkzLTQuMS04Ljc3LS41Ny0xMi4xNGwxMS43NS0xMS4yMWMyLjc3LTIuNjQgNi44OS0yLjc2IDEwLjEzLS43MyAzLjg3IDIuNDIgOC4yNiAzLjcyIDEyLjgyIDMuNzJoMjguMTFjNi41IDAgMTEuOC01LjkyIDExLjgtMTMuMTkgMC01Ljk1LTMuNjEtMTEuMTktOC43Ny0xMi43M2wtNDUtMTMuNWMtMTguNTktNS41OC0zMS41OC0yMy40Mi0zMS41OC00My4zOSAwLTI0LjUyIDE5LjA1LTQ0LjQ0IDQyLjY3LTQ1LjA3VjIzMmMwLTQuNDIgMy41OC04IDgtOGgxNmM0LjQyIDAgOCAzLjU4IDggOHYyNC4yOWMxMS4yOS41OCAyMi4yNyA0LjUxIDMxLjM3IDExLjM1IDMuOSAyLjkzIDQuMSA4Ljc3LjU3IDEyLjE0bC0xMS43NSAxMS4yMWMtMi43NyAyLjY0LTYuODkgMi43Ni0xMC4xMy43My0zLjg3LTIuNDMtOC4yNi0zLjcyLTEyLjgyLTMuNzJoLTI4LjExYy02LjUgMC0xMS44IDUuOTItMTEuOCAxMy4xOSAwIDUuOTUgMy42MSAxMS4xOSA4Ljc3IDEyLjczbDQ1IDEzLjVjMTguNTkgNS41OCAzMS41OCAyMy40MiAzMS41OCA0My4zOSAwIDI0LjUzLTE5LjA1IDQ0LjQ0LTQyLjY3IDQ1LjA3elwiXSxcImZpbGUtbWVkaWNhbFwiOlszODQsNTEyLFtdLFwiZjQ3N1wiLFwiTTM3NyAxMDVMMjc5LjEgN2MtNC41LTQuNS0xMC42LTctMTctN0gyNTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTE1MyAzMVYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em02NCAxNjB2NDhjMCA0LjQtMy42IDgtOCA4aC01NnY1NmMwIDQuNC0zLjYgOC04IDhoLTQ4Yy00LjQgMC04LTMuNi04LTh2LTU2aC01NmMtNC40IDAtOC0zLjYtOC04di00OGMwLTQuNCAzLjYtOCA4LThoNTZ2LTU2YzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2NTZoNTZjNC40IDAgOCAzLjYgOCA4elwiXSxcImZpbGUtbWVkaWNhbC1hbHRcIjpbNDQ4LDUxMixbXSxcImY0NzhcIixcIk0yODggMTM2VjBIODhDNzQuNyAwIDY0IDEwLjcgNjQgMjR2MjMySDhjLTQuNCAwLTggMy42LTggOHYxNmMwIDQuNCAzLjYgOCA4IDhoMTQwLjljMyAwIDUuOCAxLjcgNy4yIDQuNGwxOS45IDM5LjggNTYuOC0xMTMuN2MyLjktNS45IDExLjQtNS45IDE0LjMgMGwzNC43IDY5LjVIMzUyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2aC04OS45TDI0MCAyNzUuOGwtNTYuOCAxMTMuN2MtMi45IDUuOS0xMS40IDUuOS0xNC4zIDBMMTM0LjEgMzIwSDY0djE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDMxMmMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTE1My0zMUwzNDMuMSA3Yy00LjUtNC41LTEwLjYtNy0xNy03SDMyMHYxMjhoMTI4di02LjFjMC02LjMtMi41LTEyLjQtNy0xNi45elwiXSxcImZpbGUtcGRmXCI6WzM4NCw1MTIsW10sXCJmMWMxXCIsXCJNMTgxLjkgMjU2LjFjLTUtMTYtNC45LTQ2LjktMi00Ni45IDguNCAwIDcuNiAzNi45IDIgNDYuOXptLTEuNyA0Ny4yYy03LjcgMjAuMi0xNy4zIDQzLjMtMjguNCA2Mi43IDE4LjMtNyAzOS0xNy4yIDYyLjktMjEuOS0xMi43LTkuNi0yNC45LTIzLjQtMzQuNS00MC44ek04Ni4xIDQyOC4xYzAgLjggMTMuMi01LjQgMzQuOS00MC4yLTYuNyA2LjMtMjkuMSAyNC41LTM0LjkgNDAuMnpNMjQ4IDE2MGgxMzZ2MzI4YzAgMTMuMy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYyNEMwIDEwLjcgMTAuNyAwIDI0IDBoMjAwdjEzNmMwIDEzLjIgMTAuOCAyNCAyNCAyNHptLTggMTcxLjhjLTIwLTEyLjItMzMuMy0yOS00Mi43LTUzLjggNC41LTE4LjUgMTEuNi00Ni42IDYuMi02NC4yLTQuNy0yOS40LTQyLjQtMjYuNS00Ny44LTYuOC01IDE4LjMtLjQgNDQuMSA4LjEgNzctMTEuNiAyNy42LTI4LjcgNjQuNi00MC44IDg1LjgtLjEgMC0uMS4xLS4yLjEtMjcuMSAxMy45LTczLjYgNDQuNS01NC41IDY4IDUuNiA2LjkgMTYgMTAgMjEuNSAxMCAxNy45IDAgMzUuNy0xOCA2MS4xLTYxLjggMjUuOC04LjUgNTQuMS0xOS4xIDc5LTIzLjIgMjEuNyAxMS44IDQ3LjEgMTkuNSA2NCAxOS41IDI5LjIgMCAzMS4yLTMyIDE5LjctNDMuNC0xMy45LTEzLjYtNTQuMy05LjctNzMuNi03LjJ6TTM3NyAxMDVMMjc5IDdjLTQuNS00LjUtMTAuNi03LTE3LTdoLTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTc0LjEgMjU1LjNjNC4xLTIuNy0yLjUtMTEuOS00Mi44LTkgMzcuMSAxNS44IDQyLjggOSA0Mi44IDl6XCJdLFwiZmlsZS1wb3dlcnBvaW50XCI6WzM4NCw1MTIsW10sXCJmMWM0XCIsXCJNMTkzLjcgMjcxLjJjOC44IDAgMTUuNSAyLjcgMjAuMyA4LjEgOS42IDEwLjkgOS44IDMyLjctLjIgNDQuMS00LjkgNS42LTExLjkgOC41LTIxLjEgOC41aC0yNi45di02MC43aDI3Ljl6TTM3NyAxMDVMMjc5IDdjLTQuNS00LjUtMTAuNi03LTE3LTdoLTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTE1MyAzMVYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em01MyAxNjUuMmMwIDkwLjMtODguOCA3Ny42LTExMS4xIDc3LjZWNDM2YzAgNi42LTUuNCAxMi0xMiAxMmgtMzAuOGMtNi42IDAtMTItNS40LTEyLTEyVjIzNi4yYzAtNi42IDUuNC0xMiAxMi0xMmg4MWM0NC41IDAgNzIuOSAzMi44IDcyLjkgNzd6XCJdLFwiZmlsZS1wcmVzY3JpcHRpb25cIjpbMzg0LDUxMixbXSxcImY1NzJcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTY4LjUzIDE3OS40OGwxMS4zMSAxMS4zMWM2LjI1IDYuMjUgNi4yNSAxNi4zOCAwIDIyLjYzbC0yOS45IDI5LjlMMzA0IDQwOS4zOGM2LjI1IDYuMjUgNi4yNSAxNi4zOCAwIDIyLjYzbC0xMS4zMSAxMS4zMWMtNi4yNSA2LjI1LTE2LjM4IDYuMjUtMjIuNjMgMEwyNDAgNDEzLjI1bC0zMC4wNiAzMC4wNmMtNi4yNSA2LjI1LTE2LjM4IDYuMjUtMjIuNjMgMEwxNzYgNDMyYy02LjI1LTYuMjUtNi4yNS0xNi4zOCAwLTIyLjYzbDMwLjA2LTMwLjA2TDE0Ni43NCAzMjBIMTI4djQ4YzAgOC44NC03LjE2IDE2LTE2IDE2SDk2Yy04Ljg0IDAtMTYtNy4xNi0xNi0xNlYyMDhjMC04Ljg0IDcuMTYtMTYgMTYtMTZoODBjMzUuMzUgMCA2NCAyOC42NSA2NCA2NCAwIDI0LjIyLTEzLjYyIDQ1LjA1LTMzLjQ2IDU1LjkyTDI0MCAzNDUuMzhsMjkuOS0yOS45YzYuMjUtNi4yNSAxNi4zOC02LjI1IDIyLjYzIDB6TTE3NiAyNzJoLTQ4di0zMmg0OGM4LjgyIDAgMTYgNy4xOCAxNiAxNnMtNy4xOCAxNi0xNiAxNnptMjA4LTE1MC4xdjYuMUgyNTZWMGg2LjFjNi40IDAgMTIuNSAyLjUgMTcgN2w5Ny45IDk4YzQuNSA0LjUgNyAxMC42IDcgMTYuOXpcIl0sXCJmaWxlLXNpZ25hdHVyZVwiOls1NzYsNTEyLFtdLFwiZjU3M1wiLFwiTTIxOC4xNyA0MjQuMTRjLTIuOTUtNS45Mi04LjA5LTYuNTItMTAuMTctNi41MnMtNy4yMi41OS0xMC4wMiA2LjE5bC03LjY3IDE1LjM0Yy02LjM3IDEyLjc4LTI1LjAzIDExLjM3LTI5LjQ4LTIuMDlMMTQ0IDM4Ni41OWwtMTAuNjEgMzEuODhjLTUuODkgMTcuNjYtMjIuMzggMjkuNTMtNDEgMjkuNTNIODBjLTguODQgMC0xNi03LjE2LTE2LTE2czcuMTYtMTYgMTYtMTZoMTIuMzljNC44MyAwIDkuMTEtMy4wOCAxMC42NC03LjY2bDE4LjE5LTU0LjY0YzMuMy05LjgxIDEyLjQ0LTE2LjQxIDIyLjc4LTE2LjQxczE5LjQ4IDYuNTkgMjIuNzcgMTYuNDFsMTMuODggNDEuNjRjMTkuNzUtMTYuMTkgNTQuMDYtOS43IDY2IDE0LjE2IDEuODkgMy43OCA1LjQ5IDUuOTUgOS4zNiA2LjI2di04Mi4xMmwxMjgtMTI3LjA5VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjR2LTQwbC0xMjgtLjExYy0xNi4xMi0uMzEtMzAuNTgtOS4yOC0zNy44My0yMy43NXpNMzg0IDEyMS45YzAtNi4zLTIuNS0xMi40LTctMTYuOUwyNzkuMSA3Yy00LjUtNC41LTEwLjYtNy0xNy03SDI1NnYxMjhoMTI4di02LjF6bS05NiAyMjUuMDZWNDE2aDY4Ljk5bDE2MS42OC0xNjIuNzgtNjcuODgtNjcuODhMMjg4IDM0Ni45NnptMjgwLjU0LTE3OS42M2wtMzEuODctMzEuODdjLTkuOTQtOS45NC0yNi4wNy05Ljk0LTM2LjAxIDBsLTI3LjI1IDI3LjI1IDY3Ljg4IDY3Ljg4IDI3LjI1LTI3LjI1YzkuOTUtOS45NCA5Ljk1LTI2LjA3IDAtMzYuMDF6XCJdLFwiZmlsZS11cGxvYWRcIjpbMzg0LDUxMixbXSxcImY1NzRcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTY1LjE4IDIxNi4wMUgyMjR2ODBjMCA4Ljg0LTcuMTYgMTYtMTYgMTZoLTMyYy04Ljg0IDAtMTYtNy4xNi0xNi0xNnYtODBIOTQuODJjLTE0LjI4IDAtMjEuNDEtMTcuMjktMTEuMjctMjcuMzZsOTYuNDItOTUuN2M2LjY1LTYuNjEgMTcuMzktNi42MSAyNC4wNCAwbDk2LjQyIDk1LjdjMTAuMTUgMTAuMDcgMy4wMyAyNy4zNi0xMS4yNSAyNy4zNnpNMzc3IDEwNUwyNzkuMSA3Yy00LjUtNC41LTEwLjYtNy0xNy03SDI1NnYxMjhoMTI4di02LjFjMC02LjMtMi41LTEyLjQtNy0xNi45elwiXSxcImZpbGUtdmlkZW9cIjpbMzg0LDUxMixbXSxcImYxYzhcIixcIk0zODQgMTIxLjk0MVYxMjhIMjU2VjBoNi4wNTljNi4zNjUgMCAxMi40NyAyLjUyOSAxNi45NzEgNy4wMjlsOTcuOTQxIDk3Ljk0MUEyNC4wMDUgMjQuMDA1IDAgMCAxIDM4NCAxMjEuOTQxek0yMjQgMTM2VjBIMjRDMTAuNzQ1IDAgMCAxMC43NDUgMCAyNHY0NjRjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDMzNmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTk2IDE0NC4wMTZ2MTExLjk2M2MwIDIxLjQ0NS0yNS45NDMgMzEuOTk4LTQwLjk3MSAxNi45NzFMMjI0IDM1My45NDFWMzkyYzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNEg4OGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjI4MGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoMTEyYzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHYzOC4wNTlsNTUuMDI5LTU1LjAxM2MxNS4wMTEtMTUuMDEgNDAuOTcxLTQuNDkxIDQwLjk3MSAxNi45N3pcIl0sXCJmaWxlLXdvcmRcIjpbMzg0LDUxMixbXSxcImYxYzJcIixcIk0yMjQgMTM2VjBIMjRDMTAuNyAwIDAgMTAuNyAwIDI0djQ2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTYwSDI0OGMtMTMuMiAwLTI0LTEwLjgtMjQtMjR6bTU3LjEgMTIwSDMwNWM3LjcgMCAxMy40IDcuMSAxMS43IDE0LjdsLTM4IDE2OGMtMS4yIDUuNS02LjEgOS4zLTExLjcgOS4zaC0zOGMtNS41IDAtMTAuMy0zLjgtMTEuNi05LjEtMjUuOC0xMDMuNS0yMC44LTgxLjItMjUuNi0xMTAuNWgtLjVjLTEuMSAxNC4zLTIuNCAxNy40LTI1LjYgMTEwLjUtMS4zIDUuMy02LjEgOS4xLTExLjYgOS4xSDExN2MtNS42IDAtMTAuNS0zLjktMTEuNy05LjRsLTM3LjgtMTY4Yy0xLjctNy41IDQtMTQuNiAxMS43LTE0LjZoMjQuNWM1LjcgMCAxMC43IDQgMTEuOCA5LjcgMTUuNiA3OCAyMC4xIDEwOS41IDIxIDEyMi4yIDEuNi0xMC4yIDcuMy0zMi43IDI5LjQtMTIyLjcgMS4zLTUuNCA2LjEtOS4xIDExLjctOS4xaDI5LjFjNS42IDAgMTAuNCAzLjggMTEuNyA5LjIgMjQgMTAwLjQgMjguOCAxMjQgMjkuNiAxMjkuNC0uMi0xMS4yLTIuNi0xNy44IDIxLjYtMTI5LjIgMS01LjYgNS45LTkuNSAxMS41LTkuNXpNMzg0IDEyMS45djYuMUgyNTZWMGg2LjFjNi40IDAgMTIuNSAyLjUgMTcgN2w5Ny45IDk4YzQuNSA0LjUgNyAxMC42IDcgMTYuOXpcIl0sZmlsbDpbNTEyLDUxMixbXSxcImY1NzVcIixcIk01MDIuNjMgMjE3LjA2TDI5NC45NCA5LjM3QzI4OC42OSAzLjEyIDI4MC41IDAgMjcyLjMxIDBzLTE2LjM4IDMuMTItMjIuNjIgOS4zN2wtODEuNTggODEuNThMODEuOTMgNC43N2MtNi4yNC02LjI1LTE2LjM4LTYuMjUtMjIuNjIgMEwzNi42OSAyNy4zOGMtNi4yNCA2LjI1LTYuMjQgMTYuMzggMCAyMi42M2w4Ni4xOSA4Ni4xOC05NC43NiA5NC43NmMtMzcuNDkgMzcuNDktMzcuNDkgOTguMjYgMCAxMzUuNzVsMTE3LjE5IDExNy4xOWMxOC43NSAxOC43NCA0My4zMSAyOC4xMiA2Ny44NyAyOC4xMiAyNC41NyAwIDQ5LjEzLTkuMzcgNjcuODgtMjguMTJsMjIxLjU3LTIyMS41N2MxMi40OS0xMi41IDEyLjQ5LTMyLjc2IDAtNDUuMjZ6bS0xMTYuMjIgNzAuOTdINjUuOTNjMS4zNi0zLjg0IDMuNTctNy45OCA3LjQzLTExLjgzbDEzLjE1LTEzLjE1IDgxLjYxLTgxLjYxIDU4LjYxIDU4LjZjMTIuNDkgMTIuNDkgMzIuNzUgMTIuNDkgNDUuMjQgMCAxMi40OS0xMi40OSAxMi40OS0zMi43NSAwLTQ1LjI0bC01OC42MS01OC42IDU4Ljk1LTU4Ljk1IDE2Mi40NSAxNjIuNDQtNDguMzUgNDguMzR6XCJdLFwiZmlsbC1kcmlwXCI6WzU3Niw1MTIsW10sXCJmNTc2XCIsXCJNNTEyIDMyMHMtNjQgOTIuNjUtNjQgMTI4YzAgMzUuMzUgMjguNjYgNjQgNjQgNjRzNjQtMjguNjUgNjQtNjQtNjQtMTI4LTY0LTEyOHptLTkuMzctMTAyLjk0TDI5NC45NCA5LjM3QzI4OC42OSAzLjEyIDI4MC41IDAgMjcyLjMxIDBzLTE2LjM4IDMuMTItMjIuNjIgOS4zN2wtODEuNTggODEuNThMODEuOTMgNC43NmMtNi4yNS02LjI1LTE2LjM4LTYuMjUtMjIuNjIgMEwzNi42OSAyNy4zOGMtNi4yNCA2LjI1LTYuMjQgMTYuMzggMCAyMi42Mmw4Ni4xOSA4Ni4xOC05NC43NiA5NC43NmMtMzcuNDkgMzcuNDgtMzcuNDkgOTguMjYgMCAxMzUuNzVsMTE3LjE5IDExNy4xOWMxOC43NCAxOC43NCA0My4zMSAyOC4xMiA2Ny44NyAyOC4xMiAyNC41NyAwIDQ5LjEzLTkuMzcgNjcuODctMjguMTJsMjIxLjU3LTIyMS41N2MxMi41LTEyLjUgMTIuNS0zMi43NS4wMS00NS4yNXptLTExNi4yMiA3MC45N0g2NS45M2MxLjM2LTMuODQgMy41Ny03Ljk4IDcuNDMtMTEuODNsMTMuMTUtMTMuMTUgODEuNjEtODEuNjEgNTguNiA1OC42YzEyLjQ5IDEyLjQ5IDMyLjc1IDEyLjQ5IDQ1LjI0IDBzMTIuNDktMzIuNzUgMC00NS4yNGwtNTguNi01OC42IDU4Ljk1LTU4Ljk1IDE2Mi40NCAxNjIuNDQtNDguMzQgNDguMzR6XCJdLGZpbG06WzUxMiw1MTIsW10sXCJmMDA4XCIsXCJNNDg4IDY0aC04djIwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMlY2NEg5NnYyMGMwIDYuNi01LjQgMTItMTIgMTJINDRjLTYuNiAwLTEyLTUuNC0xMi0xMlY2NGgtOEMxMC43IDY0IDAgNzQuNyAwIDg4djMzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4di0yMGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjIwaDMyMHYtMjBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnYyMGg4YzEzLjMgMCAyNC0xMC43IDI0LTI0Vjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0ek05NiAzNzJjMCA2LjYtNS40IDEyLTEyIDEySDQ0Yy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDB6bTAtOTZjMCA2LjYtNS40IDEyLTEyIDEySDQ0Yy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDB6bTAtOTZjMCA2LjYtNS40IDEyLTEyIDEySDQ0Yy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDB6bTI3MiAyMDhjMCA2LjYtNS40IDEyLTEyIDEySDE1NmMtNi42IDAtMTItNS40LTEyLTEydi05NmMwLTYuNiA1LjQtMTIgMTItMTJoMjAwYzYuNiAwIDEyIDUuNCAxMiAxMnY5NnptMC0xNjhjMCA2LjYtNS40IDEyLTEyIDEySDE1NmMtNi42IDAtMTItNS40LTEyLTEydi05NmMwLTYuNiA1LjQtMTIgMTItMTJoMjAwYzYuNiAwIDEyIDUuNCAxMiAxMnY5NnptMTEyIDE1MmMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDB6bTAtOTZjMCA2LjYtNS40IDEyLTEyIDEyaC00MGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwem0wLTk2YzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MHpcIl0sZmlsdGVyOls1MTIsNTEyLFtdLFwiZjBiMFwiLFwiTTQ4Ny45NzYgMEgyNC4wMjhDMi43MSAwLTguMDQ3IDI1Ljg2NiA3LjA1OCA0MC45NzFMMTkyIDIyNS45NDFWNDMyYzAgNy44MzEgMy44MjEgMTUuMTcgMTAuMjM3IDE5LjY2Mmw4MCA1NS45OEMyOTguMDIgNTE4LjY5IDMyMCA1MDcuNDkzIDMyMCA0ODcuOThWMjI1Ljk0MWwxODQuOTQ3LTE4NC45N0M1MjAuMDIxIDI1Ljg5NiA1MDkuMzM4IDAgNDg3Ljk3NiAwelwiXSxmaW5nZXJwcmludDpbNTEyLDUxMixbXSxcImY1NzdcIixcIk0yNTYuMTIgMjQ1Ljk2Yy0xMy4yNSAwLTI0IDEwLjc0LTI0IDI0IDEuMTQgNzIuMjUtOC4xNCAxNDEuOS0yNy43IDIxMS41NS0yLjczIDkuNzIgMi4xNSAzMC40OSAyMy4xMiAzMC40OSAxMC40OCAwIDIwLjExLTYuOTIgMjMuMDktMTcuNTIgMTMuNTMtNDcuOTEgMzEuMDQtMTI1LjQxIDI5LjQ4LTIyNC41Mi4wMS0xMy4yNS0xMC43My0yNC0yMy45OS0yNHptLS44Ni04MS43M0MxOTQgMTY0LjE2IDE1MS4yNSAyMTEuMyAxNTIuMSAyNjUuMzJjLjc1IDQ3Ljk0LTMuNzUgOTUuOTEtMTMuMzcgMTQyLjU1LTIuNjkgMTIuOTggNS42NyAyNS42OSAxOC42NCAyOC4zNiAxMy4wNSAyLjY3IDI1LjY3LTUuNjYgMjguMzYtMTguNjQgMTAuMzQtNTAuMDkgMTUuMTctMTAxLjU4IDE0LjM3LTE1My4wMi0uNDEtMjUuOTUgMTkuOTItNTIuNDkgNTQuNDUtNTIuMzQgMzEuMzEuNDcgNTcuMTUgMjUuMzQgNTcuNjIgNTUuNDcuNzcgNDguMDUtMi44MSA5Ni4zMy0xMC42MSAxNDMuNTUtMi4xNyAxMy4wNiA2LjY5IDI1LjQyIDE5Ljc2IDI3LjU4IDE5Ljk3IDMuMzMgMjYuODEtMTUuMSAyNy41OC0xOS43NyA4LjI4LTUwLjAzIDEyLjA2LTEwMS4yMSAxMS4yNy0xNTIuMTEtLjg4LTU1LjgtNDcuOTQtMTAxLjg4LTEwNC45MS0xMDIuNzJ6bS0xMTAuNjktMTkuNzhjLTEwLjMtOC4zNC0yNS4zNy02LjgtMzMuNzYgMy40OC0yNS42MiAzMS41LTM5LjM5IDcxLjI4LTM4Ljc1IDExMiAuNTkgMzcuNTgtMi40NyA3NS4yNy05LjExIDExMi4wNS0yLjM0IDEzLjA1IDYuMzEgMjUuNTMgMTkuMzYgMjcuODkgMjAuMTEgMy41IDI3LjA3LTE0LjgxIDI3Ljg5LTE5LjM2IDcuMTktMzkuODQgMTAuNS04MC42NiA5Ljg2LTEyMS4zMy0uNDctMjkuODggOS4yLTU3Ljg4IDI4LTgwLjk3IDguMzUtMTAuMjggNi43OS0yNS4zOS0zLjQ5LTMzLjc2em0xMDkuNDctNjIuMzNjLTE1LjQxLS40MS0zMC44NyAxLjQ0LTQ1Ljc4IDQuOTctMTIuODkgMy4wNi0yMC44NyAxNS45OC0xNy44MyAyOC44OSAzLjA2IDEyLjg5IDE2IDIwLjgzIDI4Ljg5IDE3LjgzIDExLjA1LTIuNjEgMjIuNDctMy43NyAzNC0zLjY5IDc1LjQzIDEuMTMgMTM3LjczIDYxLjUgMTM4Ljg4IDEzNC41OC41OSAzNy44OC0xLjI4IDc2LjExLTUuNTggMTEzLjYzLTEuNSAxMy4xNyA3Ljk1IDI1LjA4IDIxLjExIDI2LjU4IDE2LjcyIDEuOTUgMjUuNTEtMTEuODggMjYuNTgtMjEuMTFhOTI5LjA2IDkyOS4wNiAwIDAgMCA1Ljg5LTExOS44NWMtMS41Ni05OC43NS04NS4wNy0xODAuMzMtMTg2LjE2LTE4MS44M3ptMjUyLjA3IDEyMS40NWMtMi44Ni0xMi45Mi0xNS41MS0yMS4yLTI4LjYxLTE4LjI3LTEyLjk0IDIuODYtMjEuMTIgMTUuNjYtMTguMjYgMjguNjEgNC43MSAyMS40MSA0LjkxIDM3LjQxIDQuNyA2MS42LS4xMSAxMy4yNyAxMC41NSAyNC4wOSAyMy44IDI0LjJoLjJjMTMuMTcgMCAyMy44OS0xMC42MSAyNC0yMy44LjE4LTIyLjE4LjQtNDQuMTEtNS44My03Mi4zNHptLTQwLjEyLTkwLjcyQzQxNy4yOSA0My40NiAzMzcuNiAxLjI5IDI1Mi44MS4wMiAxODMuMDItLjgyIDExOC40NyAyNC45MSA3MC40NiA3Mi45NCAyNC4wOSAxMTkuMzctLjkgMTgxLjA0LjE0IDI0Ni42NWwtLjEyIDIxLjQ3Yy0uMzkgMTMuMjUgMTAuMDMgMjQuMzEgMjMuMjggMjQuNjkuMjMuMDIuNDguMDIuNzIuMDIgMTIuOTIgMCAyMy41OS0xMC4zIDIzLjk3LTIzLjNsLjE2LTIzLjY0Yy0uODMtNTIuNSAxOS4xNi0xMDEuODYgNTYuMjgtMTM5IDM4Ljc2LTM4LjggOTEuMzQtNTkuNjcgMTQ3LjY4LTU4Ljg2IDY5LjQ1IDEuMDMgMTM0LjczIDM1LjU2IDE3NC42MiA5Mi4zOSA3LjYxIDEwLjg2IDIyLjU2IDEzLjQ1IDMzLjQyIDUuODYgMTAuODQtNy42MiAxMy40Ni0yMi41OSA1Ljg0LTMzLjQzelwiXSxmaXJlOlszODQsNTEyLFtdLFwiZjA2ZFwiLFwiTTIxNiAyMy44NThjMC0yMy44MDItMzAuNjUzLTMyLjc2NS00NC4xNDktMTMuMDM4QzQ4IDE5MS44NTEgMjI0IDIwMCAyMjQgMjg4YzAgMzUuNjI5LTI5LjExNCA2NC40NTgtNjQuODUgNjMuOTk0QzEyMy45OCAzNTEuNTM4IDk2IDMyMi4yMiA5NiAyODcuMDQ2di04NS41MWMwLTIxLjcwMy0yNi40NzEtMzIuMjI1LTQxLjQzMi0xNi41MDRDMjcuODAxIDIxMy4xNTggMCAyNjEuMzMyIDAgMzIwYzAgMTA1Ljg2OSA4Ni4xMzEgMTkyIDE5MiAxOTJzMTkyLTg2LjEzMSAxOTItMTkyYzAtMTcwLjI5LTE2OC0xOTMuMDAzLTE2OC0yOTYuMTQyelwiXSxcImZpcmUtZXh0aW5ndWlzaGVyXCI6WzQ0OCw1MTIsW10sXCJmMTM0XCIsXCJNNDM0LjAyNyAyNi4zMjlsLTE2OCAyOEMyNTQuNjkzIDU2LjIxOCAyNTYgNjcuOCAyNTYgNzJoLTU4LjMzMkMyMDguMzUzIDM2LjEwOCAxODEuNDQ2IDAgMTQ0IDBjLTM5LjQzNSAwLTY2LjM2OCAzOS42NzYtNTIuMjI4IDc2LjIwMy01Mi4wMzkgMTMuMDUxLTc1LjM4MSA1NC4yMTMtOTAuMDQ5IDkwLjg4NC00LjkyMyAxMi4zMDcgMS4wNjMgMjYuMjc0IDEzLjM3IDMxLjE5NyAxMi4zMTcgNC45MjYgMjYuMjc5LTEuMDc1IDMxLjE5Ni0xMy4zN0M3NS4wNTggMTEyLjk5IDEwNi45NjQgMTIwIDE2OCAxMjB2MjcuMDc2Yy00MS41NDMgMTAuODYyLTcyIDQ5LjIzNS03MiA5NC4xMjlWNDg4YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxNDRjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjI0MGMwLTQ0LjczMS0zMC41OTYtODIuMzEyLTcyLTkyLjk3VjEyMGg0MGMwIDIuOTc0LTEuNzAzIDE1LjcxNiAxMC4wMjcgMTcuNjcxbDE2OCAyOEM0NDEuMzQyIDE2Ni44OSA0NDggMTYxLjI1IDQ0OCAxNTMuODM0VjM4LjE2NmMwLTcuNDE2LTYuNjU4LTEzLjA1Ni0xMy45NzMtMTEuODM3ek0xNDQgNzJjLTguODIyIDAtMTYtNy4xNzgtMTYtMTZzNy4xNzgtMTYgMTYtMTYgMTYgNy4xNzggMTYgMTYtNy4xNzggMTYtMTYgMTZ6XCJdLFwiZmlyc3QtYWlkXCI6WzU3Niw1MTIsW10sXCJmNDc5XCIsXCJNMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoNDhWMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHptMTI4IDQwMGgzMjBWMzJIMTI4djQ0OHptNjQtMjQ4YzAtNC40IDMuNi04IDgtOGg1NnYtNTZjMC00LjQgMy42LTggOC04aDQ4YzQuNCAwIDggMy42IDggOHY1Nmg1NmM0LjQgMCA4IDMuNiA4IDh2NDhjMCA0LjQtMy42IDgtOCA4aC01NnY1NmMwIDQuNC0zLjYgOC04IDhoLTQ4Yy00LjQgMC04LTMuNi04LTh2LTU2aC01NmMtNC40IDAtOC0zLjYtOC04di00OHpNNTI4IDMyaC00OHY0NDhoNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6XCJdLGZpc2g6WzU3Niw1MTIsW10sXCJmNTc4XCIsXCJNMzI3LjEgOTZjLTg5Ljk3IDAtMTY4LjU0IDU0Ljc3LTIxMi4yNyAxMDEuNjNMMjcuNSAxMzEuNThjLTEyLjEzLTkuMTgtMzAuMjQuNi0yNy4xNCAxNC42NkwyNC41NCAyNTYgLjM1IDM2NS43N2MtMy4xIDE0LjA2IDE1LjAxIDIzLjgzIDI3LjE0IDE0LjY2bDg3LjMzLTY2LjA1QzE1OC41NSAzNjEuMjMgMjM3LjEzIDQxNiAzMjcuMSA0MTYgNDY0LjU2IDQxNiA1NzYgMjg4IDU3NiAyNTZTNDY0LjU2IDk2IDMyNy4xIDk2em04Ny40MyAxODRjLTEzLjI1IDAtMjQtMTAuNzUtMjQtMjQgMC0xMy4yNiAxMC43NS0yNCAyNC0yNCAxMy4yNiAwIDI0IDEwLjc0IDI0IDI0IDAgMTMuMjUtMTAuNzUgMjQtMjQgMjR6XCJdLGZsYWc6WzUxMiw1MTIsW10sXCJmMDI0XCIsXCJNMzQ5LjU2NSA5OC43ODNDMjk1Ljk3OCA5OC43ODMgMjUxLjcyMSA2NCAxODQuMzQ4IDY0Yy0yNC45NTUgMC00Ny4zMDkgNC4zODQtNjguMDQ1IDEyLjAxM2E1NS45NDcgNTUuOTQ3IDAgMCAwIDMuNTg2LTIzLjU2MkMxMTguMTE3IDI0LjAxNSA5NC44MDYgMS4yMDYgNjYuMzM4LjA0OCAzNC4zNDUtMS4yNTQgOCAyNC4yOTYgOCA1NmMwIDE5LjAyNiA5LjQ5NyAzNS44MjUgMjQgNDUuOTQ1VjQ4OGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTZjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0di05NC40YzI4LjMxMS0xMi4wNjQgNjMuNTgyLTIyLjEyMiAxMTQuNDM1LTIyLjEyMiA1My41ODggMCA5Ny44NDQgMzQuNzgzIDE2NS4yMTcgMzQuNzgzIDQ4LjE2OSAwIDg2LjY2Ny0xNi4yOTQgMTIyLjUwNS00MC44NThDNTA2Ljg0IDM1OS40NTIgNTEyIDM0OS41NzEgNTEyIDMzOS4wNDV2LTI0My4xYzAtMjMuMzkzLTI0LjI2OS0zOC44Ny00NS40ODUtMjkuMDE2LTM0LjMzOCAxNS45NDgtNzYuNDU0IDMxLjg1NC0xMTYuOTUgMzEuODU0elwiXSxcImZsYWctY2hlY2tlcmVkXCI6WzUxMiw1MTIsW10sXCJmMTFlXCIsXCJNNDY2LjUxNSA2Ni45MjhDNDg3LjczMSA1Ny4wNzQgNTEyIDcyLjU1MSA1MTIgOTUuOTQ0djI0My4xYzAgMTAuNTI2LTUuMTYxIDIwLjQwNy0xMy44NDMgMjYuMzU4LTM1LjgzNyAyNC41NjQtNzQuMzM1IDQwLjg1OC0xMjIuNTA1IDQwLjg1OC02Ny4zNzMgMC0xMTEuNjMtMzQuNzgzLTE2NS4yMTctMzQuNzgzLTUwLjg1MyAwLTg2LjEyNCAxMC4wNTgtMTE0LjQzNSAyMi4xMjJWNDg4YzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNEg1NmMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjEwMS45NDVDMTcuNDk3IDkxLjgyNSA4IDc1LjAyNiA4IDU2IDggMjQuMjk2IDM0LjM0NS0xLjI1NCA2Ni4zMzguMDQ4YzI4LjQ2OCAxLjE1OCA1MS43NzkgMjMuOTY4IDUzLjU1MSA1Mi40MDQuNTIgOC4zNDItLjgxIDE2LjMxLTMuNTg2IDIzLjU2MkMxMzcuMDM5IDY4LjM4NCAxNTkuMzkzIDY0IDE4NC4zNDggNjRjNjcuMzczIDAgMTExLjYzIDM0Ljc4MyAxNjUuMjE3IDM0Ljc4MyA0MC40OTYgMCA4Mi42MTItMTUuOTA2IDExNi45NS0zMS44NTV6TTk2IDEzNC42M3Y3MC40OWMyOS0xMC42NyA1MS4xOC0xNy44MyA3My42LTIwLjkxdi03MS41N2MtMjMuNSAyLjE3LTQwLjQ0IDkuNzktNzMuNiAyMS45OXptMjIwLjggOS4xOWMtMjYuNDE3LTQuNjcyLTQ5Ljg4Ni0xMy45NzktNzMuNi0yMS4zNHY2Ny40MmMyNC4xNzUgNi43MDYgNDcuNTY2IDE2LjQ0NCA3My42IDIyLjMxdi02OC4zOXptLTE0Ny4yIDQwLjM5djcwLjA0YzMyLjc5Ni0yLjk3OCA1My45MS0uNjM1IDczLjYgMy44VjE4OS45Yy0yNS4yNDctNy4wMzUtNDYuNTgxLTkuNDIzLTczLjYtNS42OXptNzMuNiAxNDIuMjNjMjYuMzM4IDQuNjUyIDQ5LjczMiAxMy45MjcgNzMuNiAyMS4zNHYtNjcuNDFjLTI0LjI3Ny02Ljc0Ni00Ny41NC0xNi40NS03My42LTIyLjMydjY4LjM5ek05NiAzNDIuMWMyMy42Mi04LjM5IDQ3Ljc5LTEzLjg0IDczLjYtMTYuNTZ2LTcxLjI5Yy0yNi4xMSAyLjM1LTQ3LjM2IDguMDQtNzMuNiAxNy4zNnY3MC40OXptMzY4LTIyMS42Yy0yMS4zIDguODUtNDYuNTkgMTcuNjQtNzMuNiAyMi40N3Y3MS45MWMyNy4zMS00LjM2IDUwLjAzLTE0LjEgNzMuNi0yMy44OVYxMjAuNXptMCAyMDkuOTZ2LTcwLjQ5Yy0yMi4xOSAxNC4yLTQ4Ljc4IDIyLjYxLTczLjYgMjYuMDJ2NzEuNThjMjUuMDctMi4zOCA0OC40OS0xMS4wNCA3My42LTI3LjExek0zMTYuOCAyMTIuMjF2NjguMTZjMjUuNjY0IDcuMTM0IDQ2LjYxNiA5LjM0MiA3My42IDUuNjJ2LTcxLjExYy0yNS45OTkgNC4xODctNDkuOTQzIDIuNjc2LTczLjYtMi42N3pcIl0sZmxhc2s6WzQ0OCw1MTIsW10sXCJmMGMzXCIsXCJNNDM3LjIgNDAzLjVMMzIwIDIxNVY2NGg4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRoOHYxNTFMMTAuOCA0MDMuNUMtMTguNSA0NTAuNiAxNS4zIDUxMiA3MC45IDUxMmgzMDYuMmM1NS43IDAgODkuNC02MS41IDYwLjEtMTA4LjV6TTEzNy45IDMyMGw0OC4yLTc3LjZjMy43LTUuMiA1LjgtMTEuNiA1LjgtMTguNFY2NGg2NHYxNjBjMCA2LjkgMi4yIDEzLjIgNS44IDE4LjRsNDguMiA3Ny42aC0xNzJ6XCJdLGZsdXNoZWQ6WzQ5Niw1MTIsW10sXCJmNTc5XCIsXCJNMzQ0IDIwMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0LTEwLjctMjQtMjQtMjR6bS0xOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0LTEwLjctMjQtMjQtMjR6TTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6TTgwIDIyNGMwLTM5LjggMzIuMi03MiA3Mi03MnM3MiAzMi4yIDcyIDcyLTMyLjIgNzItNzIgNzItNzItMzIuMi03Mi03MnptMjMyIDE3NkgxODRjLTIxLjIgMC0yMS4yLTMyIDAtMzJoMTI4YzIxLjIgMCAyMS4yIDMyIDAgMzJ6bTMyLTEwNGMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MiA3MiAzMi4yIDcyIDcyLTMyLjIgNzItNzIgNzJ6XCJdLGZvbGRlcjpbNTEyLDUxMixbXSxcImYwN2JcIixcIk00NjQgMTI4SDI3MmwtNjQtNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYyODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0MTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxNzZjMC0yNi41MS0yMS40OS00OC00OC00OHpcIl0sXCJmb2xkZXItb3BlblwiOls1NzYsNTEyLFtdLFwiZjA3Y1wiLFwiTTU3Mi42OTQgMjkyLjA5M0w1MDAuMjcgNDE2LjI0OEE2My45OTcgNjMuOTk3IDAgMCAxIDQ0NC45ODkgNDQ4SDQ1LjAyNWMtMTguNTIzIDAtMzAuMDY0LTIwLjA5My0yMC43MzEtMzYuMDkzbDcyLjQyNC0xMjQuMTU1QTY0IDY0IDAgMCAxIDE1MiAyNTZoMzk5Ljk2NGMxOC41MjMgMCAzMC4wNjQgMjAuMDkzIDIwLjczIDM2LjA5M3pNMTUyIDIyNGgzMjh2LTQ4YzAtMjYuNTEtMjEuNDktNDgtNDgtNDhIMjcybC02NC02NEg0OEMyMS40OSA2NCAwIDg1LjQ5IDAgMTEydjI3OC4wNDZsNjkuMDc3LTExOC40MThDODYuMjE0IDI0Mi4yNSAxMTcuOTg5IDIyNCAxNTIgMjI0elwiXSxmb250Ols0NDgsNTEyLFtdLFwiZjAzMVwiLFwiTTE1MiA0MTZoLTI0LjAxM2wyNi41ODYtODAuNzgySDI5Mi44TDMxOS4zODYgNDE2SDI5NmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMmMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDEzNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di0zMmMwLTguODM3LTcuMTYzLTE2LTE2LTE2aC0yNi43MzlMMjc1LjQ5NSA0Mi43NDZBMTYgMTYgMCAwIDAgMjYwLjM4MiAzMmgtNzIuNzY2YTE2IDE2IDAgMCAwLTE1LjExMyAxMC43NDZMNDIuNzM5IDQxNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMmMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDEzNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di0zMmMwLTguODM3LTcuMTYzLTE2LTE2LTE2em02NC4zNTMtMjcxLjc3OGM0LjM0OC0xNS4yMTYgNi42MS0yOC4xNTYgNy41ODYtMzQuNjQ0LjgzOSA2LjUyMSAyLjkzOSAxOS40NzYgNy43MjcgMzQuNzA2bDQxLjMzNSAxMjQuMDA2aC05OC42MTlsNDEuOTcxLTEyNC4wNjh6XCJdLFwiZm9udC1hd2Vzb21lLWxvZ28tZnVsbFwiOlszOTkyLDUxMixbXCJGb250IEF3ZXNvbWVcIl0sXCJmNGU2XCIsXCJNNDU0LjYgMEg1Ny40QzI1LjkgMCAwIDI1LjkgMCA1Ny40djM5Ny4zQzAgNDg2LjEgMjUuOSA1MTIgNTcuNCA1MTJoMzk3LjNjMzEuNCAwIDU3LjQtMjUuOSA1Ny40LTU3LjRWNTcuNEM1MTIgMjUuOSA0ODYuMSAwIDQ1NC42IDB6bS01OC45IDMyNC45YzAgNC44LTQuMSA2LjktOC45IDguOS0xOS4yIDguMS0zOS43IDE1LjctNjEuNSAxNS43LTQwLjUgMC02OC43LTQ0LjgtMTYzLjIgMi41djUxLjhjMCAzMC4zLTQ1LjcgMzAuMi00NS43IDB2LTI1MGMtOS03LTE1LTE3LjktMTUtMzAuMyAwLTIxIDE3LjEtMzguMiAzOC4yLTM4LjIgMjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgMTIuMi01LjggMjMuMi0xNC45IDMwLjJ2MjFjMzcuMS0xMiA2NS41LTM0LjQgMTQ2LjEtMy40IDI2LjYgMTEuNCA2OC43LTE1LjcgNzYuNS0xNS43IDUuNSAwIDEwLjMgNC4xIDEwLjMgOC45djE2MC40em00MzIuOS0xNzQuMmgtMTM3djcwLjFIODI1YzM5LjggMCA0MC40IDYyLjIgMCA2Mi4ySDY5MS42djEwNS42YzAgNDUuNS03MC43IDQ2LjQtNzAuNyAwVjEyOC4zYzAtMjIgMTgtMzkuOCAzOS44LTM5LjhoMTY3LjhjMzkuNiAwIDQwLjUgNjIuMi4xIDYyLjJ6bTE5MS4xIDIzLjRjLTE2OS4zIDAtMTY5LjEgMjUyLjQgMCAyNTIuNCAxNjkuOSAwIDE2OS45LTI1Mi40IDAtMjUyLjR6bTAgMTk2LjFjLTgxLjYgMC04Mi4xLTEzOS44IDAtMTM5LjggODIuNSAwIDgyLjQgMTM5LjggMCAxMzkuOHptMzcyLjQgNTMuNGMtMTcuNSAwLTMxLjQtMTMuOS0zMS40LTMxLjR2LTExN2MwLTYyLjQtNzIuNi01Mi41LTk5LjEtMTYuNHYxMzMuNGMwIDQxLjUtNjMuMyA0MS44LTYzLjMgMFYyMDhjMC00MCA2My4xLTQxLjYgNjMuMSAwdjMuNGM0My4zLTUxLjYgMTYyLjQtNjAuNCAxNjIuNCAzOS4zdjE0MS41Yy4zIDMwLjQtMzEuNSAzMS40LTMxLjcgMzEuNHptMTc5LjcgMi45Yy00NC4zIDAtNjguMy0yMi45LTY4LjMtNjUuOFYyMzUuMkgxNDg4Yy0zNS42IDAtMzYuNy01NS4zIDAtNTUuM2gxNS41di0zNy4zYzAtNDEuMyA2My44LTQyLjEgNjMuOCAwdjM3LjVoMjQuOWMzNS40IDAgMzUuNyA1NS4zIDAgNTUuM2gtMjQuOXYxMDguNWMwIDI5LjYgMjYuMSAyNi4zIDI3LjQgMjYuMyAzMS40IDAgNTIuNiA1Ni4zLTIyLjkgNTYuM3pNMTk5MiAxMjNjLTE5LjUtNTAuMi05NS41LTUwLTExNC41IDAtMTA3LjMgMjc1LjctOTkuNSAyNTIuNy05OS41IDI2Mi44IDAgNDIuOCA1OC4zIDUxLjIgNzIuMSAxNC40bDEzLjUtMzUuOUgyMDA2bDEzIDM1LjljMTQuMiAzNy43IDcyLjEgMjcuMiA3Mi4xLTE0LjQgMC0xMC4xIDUuMyA2LjgtOTkuMS0yNjIuOHptLTEwOC45IDE3OS4xbDUxLjctMTQyLjkgNTEuOCAxNDIuOWgtMTAzLjV6bTU5MS4zLTg1LjZsLTUzLjcgMTc2LjNjLTEyLjQgNDEuMi03MiA0MS04NCAwbC00Mi4zLTEzNS45LTQyLjMgMTM1LjljLTEyLjQgNDAuOS03MiA0MS4yLTg0LjUgMGwtNTQuMi0xNzYuM2MtMTIuNS0zOS40IDQ5LjgtNTYuMSA2MC4yLTE2LjlMMjIxMyAzNDJsNDUuMy0xMzkuNWMxMC45LTMyLjcgNTkuNi0zNC43IDcxLjIgMGw0NS4zIDEzOS41IDM5LjMtMTQyLjRjMTAuMy0zOC4zIDcyLjYtMjMuOCA2MC4zIDE2Ljl6bTI3NS40IDc1LjFjMC00Mi40LTMzLjktMTE3LjUtMTE5LjUtMTE3LjUtNzMuMiAwLTEyNC40IDU2LjMtMTI0LjQgMTI2IDAgNzcuMiA1NS4zIDEyNi40IDEyOC41IDEyNi40IDMxLjcgMCA5My0xMS41IDkzLTM5LjggMC0xOC4zLTIxLjEtMzEuNS0zOS4zLTIyLjQtNDkuNCAyNi4yLTEwOSA4LjQtMTE1LjktNDMuOGgxNDguM2MxNi4zIDAgMjkuMy0xMy40IDI5LjMtMjguOXpNMjU3MSAyNzcuN2M5LjUtNzMuNCAxMTMuOS02OC42IDExOC42IDBIMjU3MXptMzE2LjcgMTQ4LjhjLTMxLjQgMC04MS42LTEwLjUtOTYuNi0zMS45LTEyLjQtMTcgMi41LTM5LjggMjEuOC0zOS44IDE2LjMgMCAzNi44IDIyLjkgNzcuNyAyMi45IDI3LjQgMCA0MC40LTExIDQwLjQtMjUuOCAwLTM5LjgtMTQyLjktNy40LTE0Mi45LTEwMiAwLTQwLjQgMzUuMy03NS43IDk4LjYtNzUuNyAzMS40IDAgNzQuMSA5LjkgODcuNiAyOS40IDEwLjggMTQuOC0xLjQgMzYuMi0yMC45IDM2LjItMTUuMSAwLTI2LjctMTcuMy02Ni4yLTE3LjMtMjIuOSAwLTM3LjggMTAuNS0zNy44IDIzLjggMCAzNS45IDE0Mi40IDYgMTQyLjQgMTAzLjEtLjEgNDMuNy0zNy40IDc3LjEtMTA0LjEgNzcuMXptMjY2LjgtMjUyLjRjLTE2OS4zIDAtMTY5LjEgMjUyLjQgMCAyNTIuNCAxNzAuMSAwIDE2OS42LTI1Mi40IDAtMjUyLjR6bTAgMTk2LjFjLTgxLjggMC04Mi0xMzkuOCAwLTEzOS44IDgyLjUgMCA4Mi40IDEzOS44IDAgMTM5Ljh6bTQ3Ni45IDIyVjI2OC43YzAtNTMuOC02MS40LTQ1LjgtODUuNy0xMC41djEzNGMwIDQxLjMtNjMuOCA0Mi4xLTYzLjggMFYyNjguN2MwLTUyLjEtNTkuNS00Ny40LTg1LjctMTAuMXYxMzMuNmMwIDQxLjUtNjMuMyA0MS44LTYzLjMgMFYyMDhjMC00MCA2My4xLTQxLjYgNjMuMSAwdjMuNGM5LjktMTQuNCA0MS44LTM3LjMgNzguNi0zNy4zIDM1LjMgMCA1Ny43IDE2LjQgNjYuNyA0My44IDEzLjktMjEuOCA0NS44LTQzLjggODIuNi00My44IDQ0LjMgMCA3MC43IDIzLjQgNzAuNyA3Mi43djE0NS4zYy41IDE3LjMtMTMuNSAzMS40LTMxLjkgMzEuNCAzLjUuMS0zMS4zIDEuMS0zMS4zLTMxLjN6TTM5OTIgMjkxLjZjMC00Mi40LTMyLjQtMTE3LjUtMTE3LjktMTE3LjUtNzMuMiAwLTEyNy41IDU2LjMtMTI3LjUgMTI2IDAgNzcuMiA1OC4zIDEyNi40IDEzMS42IDEyNi40IDMxLjcgMCA5MS41LTExLjUgOTEuNS0zOS44IDAtMTguMy0yMS4xLTMxLjUtMzkuMy0yMi40LTQ5LjQgMjYuMi0xMTAuNSA4LjQtMTE3LjUtNDMuOGgxNDkuOGMxNi4zIDAgMjkuMS0xMy40IDI5LjMtMjguOXptLTE4MC41LTEzLjljOS43LTc0LjQgMTE1LjktNjguMyAxMjAuMSAwaC0xMjAuMXpcIl0sXCJmb290YmFsbC1iYWxsXCI6WzQ5Niw1MTIsW10sXCJmNDRlXCIsXCJNNDgxLjUgNjAuM2MtNC44LTE4LjItMTkuMS0zMi41LTM3LjMtMzcuNEM0MjAuMyAxNi41IDM4MyA4LjkgMzM5LjQgOEw0OTYgMTY0LjhjLS44LTQzLjUtOC4yLTgwLjYtMTQuNS0xMDQuNXptLTQ2NyAzOTEuNGM0LjggMTguMiAxOS4xIDMyLjUgMzcuMyAzNy40IDIzLjkgNi40IDYxLjIgMTQgMTA0LjggMTQuOUwwIDM0Ny4yYy44IDQzLjUgOC4yIDgwLjYgMTQuNSAxMDQuNXpNNC4yIDI4My40TDIyMC40IDUwMGMxMzIuNS0xOS40IDI0OC44LTExOC43IDI3MS41LTI3MS40TDI3NS42IDEyQzE0My4xIDMxLjQgMjYuOCAxMzAuNyA0LjIgMjgzLjR6bTMxNy4zLTEyMy42YzMuMS0zLjEgOC4yLTMuMSAxMS4zIDBsMTEuMyAxMS4zYzMuMSAzLjEgMy4xIDguMiAwIDExLjNsLTI4LjMgMjguMyAyOC4zIDI4LjNjMy4xIDMuMSAzLjEgOC4yIDAgMTEuM2wtMTEuMyAxMS4zYy0zLjEgMy4xLTguMiAzLjEtMTEuMyAwbC0yOC4zLTI4LjMtMjIuNiAyMi43IDI4LjMgMjguM2MzLjEgMy4xIDMuMSA4LjIgMCAxMS4zbC0xMS4zIDExLjNjLTMuMSAzLjEtOC4yIDMuMS0xMS4zIDBMMjQ4IDI3OC42bC0yMi42IDIyLjYgMjguMyAyOC4zYzMuMSAzLjEgMy4xIDguMiAwIDExLjNsLTExLjMgMTEuM2MtMy4xIDMuMS04LjIgMy4xLTExLjMgMGwtMjguMy0yOC4zLTI4LjMgMjguM2MtMy4xIDMuMS04LjIgMy4xLTExLjMgMGwtMTEuMy0xMS4zYy0zLjEtMy4xLTMuMS04LjIgMC0xMS4zbDI4LjMtMjguMy0yOC4zLTI4LjJjLTMuMS0zLjEtMy4xLTguMiAwLTExLjNsMTEuMy0xMS4zYzMuMS0zLjEgOC4yLTMuMSAxMS4zIDBsMjguMyAyOC4zIDIyLjYtMjIuNi0yOC4zLTI4LjNjLTMuMS0zLjEtMy4xLTguMiAwLTExLjNsMTEuMy0xMS4zYzMuMS0zLjEgOC4yLTMuMSAxMS4zIDBsMjguMyAyOC4zIDIyLjYtMjIuNi0yOC4zLTI4LjNjLTMuMS0zLjEtMy4xLTguMiAwLTExLjNsMTEuMy0xMS4zYzMuMS0zLjEgOC4yLTMuMSAxMS4zIDBsMjguMyAyOC4zIDI4LjMtMjguNXpcIl0sZm9yd2FyZDpbNTEyLDUxMixbXSxcImYwNGVcIixcIk01MDAuNSAyMzEuNGwtMTkyLTE2MEMyODcuOSA1NC4zIDI1NiA2OC42IDI1NiA5NnYzMjBjMCAyNy40IDMxLjkgNDEuOCA1Mi41IDI0LjZsMTkyLTE2MGMxNS4zLTEyLjggMTUuMy0zNi40IDAtNDkuMnptLTI1NiAwbC0xOTItMTYwQzMxLjkgNTQuMyAwIDY4LjYgMCA5NnYzMjBjMCAyNy40IDMxLjkgNDEuOCA1Mi41IDI0LjZsMTkyLTE2MGMxNS4zLTEyLjggMTUuMy0zNi40IDAtNDkuMnpcIl0sZnJvZzpbNTc2LDUxMixbXSxcImY1MmVcIixcIk00NDYuNTMgOTcuNDNDNDM5LjY3IDYwLjIzIDQwNy4xOSAzMiAzNjggMzJjLTM5LjIzIDAtNzEuNzIgMjguMjktNzguNTQgNjUuNTRDMTI2Ljc1IDExMi45Ni0uNSAyNTAuMTIgMCA0MTYuOTguMTEgNDUxLjkgMjkuMDggNDgwIDY0IDQ4MGgzMDRjOC44NCAwIDE2LTcuMTYgMTYtMTYgMC0xNy42Ny0xNC4zMy0zMi0zMi0zMmgtNzkuNDlsMzUuOC00OC4zM2MyNC4xNC0zNi4yMyAxMC4zNS04OC4yOC0zMy43MS0xMDYuNi0yMy44OS05LjkzLTUxLjU1LTQuNjUtNzIuMjQgMTAuODhsLTMyLjc2IDI0LjU5Yy03LjA2IDUuMzEtMTcuMDkgMy45MS0yMi40MS0zLjE5LTUuMy03LjA4LTMuODgtMTcuMTEgMy4xOS0yMi40MWwzNC43OC0yNi4wOWMzNi44NC0yNy42NiA4OC4yOC0yNy42MiAxMjUuMTMgMCAxMC44NyA4LjE1IDQ1Ljg3IDM5LjA2IDQwLjggOTMuMjFMNDY5LjYyIDQ4MEg1NjBjOC44NCAwIDE2LTcuMTYgMTYtMTYgMC0xNy42Ny0xNC4zMy0zMi0zMi0zMmgtNTMuNjNsLTk4LjUyLTEwNC42OCAxNTQuNDQtODYuNjVBNTguMTYgNTguMTYgMCAwIDAgNTc2IDE4OS45NGMwLTIxLjQtMTEuNzItNDAuOTUtMzAuNDgtNTEuMjMtNDAuNTYtMjIuMjItOTguOTktNDEuMjgtOTguOTktNDEuMjh6TTM2OCAxMzZjLTEzLjI2IDAtMjQtMTAuNzUtMjQtMjQgMC0xMy4yNiAxMC43NC0yNCAyNC0yNCAxMy4yNSAwIDI0IDEwLjc0IDI0IDI0IDAgMTMuMjUtMTAuNzUgMjQtMjQgMjR6XCJdLGZyb3duOls0OTYsNTEyLFtdLFwiZjExOVwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTgwIDE2OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzJ6bS0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzJ6bTE3MC4yIDIxOC4yQzMxNS44IDM2Ny40IDI4Mi45IDM1MiAyNDggMzUycy02Ny44IDE1LjQtOTAuMiA0Mi4yYy0xMy41IDE2LjMtMzguMS00LjItMjQuNi0yMC41QzE2MS43IDMzOS42IDIwMy42IDMyMCAyNDggMzIwczg2LjMgMTkuNiAxMTQuNyA1My44YzEzLjYgMTYuMi0xMSAzNi43LTI0LjUgMjAuNHpcIl0sXCJmcm93bi1vcGVuXCI6WzQ5Niw1MTIsW10sXCJmNTdhXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHpNMTM2IDIwOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMnptMTg3LjMgMTgzLjNjLTMxLjItOS42LTU5LjQtMTUuMy03NS4zLTE1LjNzLTQ0LjEgNS43LTc1LjMgMTUuM2MtMTEuNSAzLjUtMjIuNS02LjMtMjAuNS0xOC4xIDctNDAgNjAuMS02MS4yIDk1LjgtNjEuMnM4OC44IDIxLjMgOTUuOCA2MS4yYzIgMTEuOS05LjEgMjEuNi0yMC41IDE4LjF6TTMyOCAyNDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyelwiXSxmdXRib2w6WzUxMiw1MTIsW10sXCJmMWUzXCIsXCJNNTA0IDI1NmMwIDEzNi45NjctMTExLjAzMyAyNDgtMjQ4IDI0OFM4IDM5Mi45NjcgOCAyNTYgMTE5LjAzMyA4IDI1NiA4czI0OCAxMTEuMDMzIDI0OCAyNDh6bS00OCAwbC0uMDAzLS4yODItMjYuMDY0IDIyLjc0MS02Mi42NzktNTguNSAxNi40NTQtODQuMzU1IDM0LjMwMyAzLjA3MmMtMjQuODg5LTM0LjIxNi02MC4wMDQtNjAuMDg5LTEwMC43MDktNzMuMTQxbDEzLjY1MSAzMS45MzlMMjU2IDEzOWwtNzQuOTUzLTQxLjUyNSAxMy42NTEtMzEuOTM5Yy00MC42MzEgMTMuMDI4LTc1Ljc4IDM4Ljg3LTEwMC43MDkgNzMuMTQxbDM0LjU2NS0zLjA3MyAxNi4xOTIgODQuMzU1LTYyLjY3OCA1OC41LTI2LjA2NC0yMi43NDEtLjAwMy4yODJjMCA0My4wMTUgMTMuNDk3IDgzLjk1MiAzOC40NzIgMTE3Ljk5MWw3LjcwNC0zMy44OTcgODUuMTM4IDEwLjQ0NyAzNi4zMDEgNzcuODI2LTI5LjkwMiAxNy43ODZjNDAuMjAyIDEzLjEyMiA4NC4yOSAxMy4xNDggMTI0LjU3MiAwbC0yOS45MDItMTcuNzg2IDM2LjMwMS03Ny44MjYgODUuMTM4LTEwLjQ0NyA3LjcwNCAzMy44OTdDNDQyLjUwMyAzMzkuOTUyIDQ1NiAyOTkuMDE1IDQ1NiAyNTZ6bS0yNDguMTAyIDY5LjU3MWwtMjkuODk0LTkxLjMxMkwyNTYgMTc3LjczMmw3Ny45OTYgNTYuNTI3LTI5LjYyMiA5MS4zMTJoLTk2LjQ3NnpcIl0sZ2FtZXBhZDpbNjQwLDUxMixbXSxcImYxMWJcIixcIk00ODAgOTZIMTYwQzcxLjYgOTYgMCAxNjcuNiAwIDI1NnM3MS42IDE2MCAxNjAgMTYwYzQ0LjggMCA4NS4yLTE4LjQgMTE0LjItNDhoOTEuNWMyOSAyOS42IDY5LjUgNDggMTE0LjIgNDggODguNCAwIDE2MC03MS42IDE2MC0xNjBTNTY4LjQgOTYgNDgwIDk2ek0yNTYgMjc2YzAgNi42LTUuNCAxMi0xMiAxMmgtNTJ2NTJjMCA2LjYtNS40IDEyLTEyIDEyaC00MGMtNi42IDAtMTItNS40LTEyLTEydi01Mkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNTJ2LTUyYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NTJoNTJjNi42IDAgMTIgNS40IDEyIDEydjQwem0xODQgNjhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDggNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4em04MC04MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OCA0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDh6XCJdLFwiZ2FzLXB1bXBcIjpbNTEyLDUxMixbXSxcImY1MmZcIixcIk0zMzYgNDQ4SDE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyMGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNnptMTU3LjItMzQwLjdsLTgxLTgxYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMTEuMyAxMS4zYy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNkw0MTYgOTcuOVYxNjBjMCAyOC4xIDIwLjkgNTEuMyA0OCA1NS4yVjM3NmMwIDEzLjItMTAuOCAyNC0yNCAyNHMtMjQtMTAuOC0yNC0yNHYtMzJjMC00OC42LTM5LjQtODgtODgtODhoLThWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZDNjAuNyAwIDMyIDI4LjcgMzIgNjR2MzUyaDI4OFYzMDRoOGMyMi4xIDAgNDAgMTcuOSA0MCA0MHYyNy44YzAgMzcuNyAyNyA3MiA2NC41IDc1LjkgNDMgNC4zIDc5LjUtMjkuNSA3OS41LTcxLjdWMTUyLjZjMC0xNy02LjgtMzMuMy0xOC44LTQ1LjN6TTI1NiAxOTJIOTZWNjRoMTYwdjEyOHpcIl0sZ2F2ZWw6WzUxMiw1MTIsW10sXCJmMGUzXCIsXCJNNTA0Ljk3MSAxOTkuMzYybC0yMi42MjctMjIuNjI3Yy05LjM3My05LjM3My0yNC41NjktOS4zNzMtMzMuOTQxIDBsLTUuNjU3IDUuNjU3TDMyOS42MDggNjkuMjU1bDUuNjU3LTUuNjU3YzkuMzczLTkuMzczIDkuMzczLTI0LjU2OSAwLTMzLjk0MUwzMTIuNjM4IDcuMDI5Yy05LjM3My05LjM3My0yNC41NjktOS4zNzMtMzMuOTQxIDBMMTU0LjI0NiAxMzEuNDhjLTkuMzczIDkuMzczLTkuMzczIDI0LjU2OSAwIDMzLjk0MWwyMi42MjcgMjIuNjI3YzkuMzczIDkuMzczIDI0LjU2OSA5LjM3MyAzMy45NDEgMGw1LjY1Ny01LjY1NyAzOS41OTggMzkuNTk4LTgxLjA0IDgxLjA0LTUuNjU3LTUuNjU3Yy0xMi40OTctMTIuNDk3LTMyLjc1OC0xMi40OTctNDUuMjU1IDBMOS4zNzMgNDEyLjExOGMtMTIuNDk3IDEyLjQ5Ny0xMi40OTcgMzIuNzU4IDAgNDUuMjU1bDQ1LjI1NSA0NS4yNTVjMTIuNDk3IDEyLjQ5NyAzMi43NTggMTIuNDk3IDQ1LjI1NSAwbDExNC43NDUtMTE0Ljc0NWMxMi40OTctMTIuNDk3IDEyLjQ5Ny0zMi43NTggMC00NS4yNTVsLTUuNjU3LTUuNjU3IDgxLjA0LTgxLjA0IDM5LjU5OCAzOS41OTgtNS42NTcgNS42NTdjLTkuMzczIDkuMzczLTkuMzczIDI0LjU2OSAwIDMzLjk0MWwyMi42MjcgMjIuNjI3YzkuMzczIDkuMzczIDI0LjU2OSA5LjM3MyAzMy45NDEgMGwxMjQuNDUxLTEyNC40NTFjOS4zNzItOS4zNzIgOS4zNzItMjQuNTY4IDAtMzMuOTQxelwiXSxnZW06WzU3Niw1MTIsW10sXCJmM2E1XCIsXCJNNDg1LjUgMEw1NzYgMTYwSDQ3NC45TDQwNS43IDBoNzkuOHptLTEyOCAwbDY5LjIgMTYwSDE0OS4zTDIxOC41IDBoMTM5em0tMjY3IDBoNzkuOGwtNjkuMiAxNjBIMEw5MC41IDB6TTAgMTkyaDEwMC43bDEyMyAyNTEuN2MxLjUgMy4xLTIuNyA1LjktNSAzLjNMMCAxOTJ6bTE0OC4yIDBoMjc5LjZsLTEzNyAzMTguMmMtMSAyLjQtNC41IDIuNC01LjUgMEwxNDguMiAxOTJ6bTIwNC4xIDI1MS43bDEyMy0yNTEuN0g1NzZMMzU3LjMgNDQ2LjljLTIuMyAyLjctNi41LS4xLTUtMy4yelwiXSxnZW5kZXJsZXNzOlsyODgsNTEyLFtdLFwiZjIyZFwiLFwiTTE0NCAxNzZjNDQuMSAwIDgwIDM1LjkgODAgODBzLTM1LjkgODAtODAgODAtODAtMzUuOS04MC04MCAzNS45LTgwIDgwLTgwbTAtNjRDNjQuNSAxMTIgMCAxNzYuNSAwIDI1NnM2NC41IDE0NCAxNDQgMTQ0IDE0NC02NC41IDE0NC0xNDQtNjQuNS0xNDQtMTQ0LTE0NHpcIl0sZ2lmdDpbNTEyLDUxMixbXSxcImYwNmJcIixcIk0zMiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMTYwVjMyMEgzMnYxMjh6bTQ0OC0yODhoLTQyLjFjNi4yLTEyLjEgMTAuMS0yNS41IDEwLjEtNDAgMC00OC41LTM5LjUtODgtODgtODgtNDEuNiAwLTY4LjUgMjEuMy0xMDMgNjguMy0zNC41LTQ3LTYxLjQtNjguMy0xMDMtNjguMy00OC41IDAtODggMzkuNS04OCA4OCAwIDE0LjUgMy44IDI3LjkgMTAuMSA0MEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2ODBjMCA4LjggNy4yIDE2IDE2IDE2aDQ4MGM4LjggMCAxNi03LjIgMTYtMTZ2LTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMzI2LjEgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGMxOS45IDAgMzQuNiAzLjMgODYuMSA4MGgtODYuMXptMjA2LjEgMGgtODYuMWM1MS40LTc2LjUgNjUuNy04MCA4Ni4xLTgwIDIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwem0tNzIgMzIwaDE2MGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMjBIMjg4djE2MHpcIl0sXCJnbGFzcy1tYXJ0aW5pXCI6WzUxMiw1MTIsW10sXCJmMDAwXCIsXCJNNTAyLjA1IDU3LjZDNTIzLjMgMzYuMzQgNTA4LjI1IDAgNDc4LjIgMEgzMy44QzMuNzUgMC0xMS4zIDM2LjM0IDkuOTUgNTcuNkwyMjQgMjcxLjY0VjQ2NGgtNTZjLTIyLjA5IDAtNDAgMTcuOTEtNDAgNDAgMCA0LjQyIDMuNTggOCA4IDhoMjQwYzQuNDIgMCA4LTMuNTggOC04IDAtMjIuMDktMTcuOTEtNDAtNDAtNDBoLTU2VjI3MS42NEw1MDIuMDUgNTcuNnpcIl0sXCJnbGFzcy1tYXJ0aW5pLWFsdFwiOls1MTIsNTEyLFtdLFwiZjU3YlwiLFwiTTUwMi4wNSA1Ny42QzUyMy4zIDM2LjM0IDUwOC4yNSAwIDQ3OC4yIDBIMzMuOEMzLjc1IDAtMTEuMyAzNi4zNCA5Ljk1IDU3LjZMMjI0IDI3MS42NFY0NjRoLTU2Yy0yMi4wOSAwLTQwIDE3LjkxLTQwIDQwIDAgNC40MiAzLjU4IDggOCA4aDI0MGM0LjQyIDAgOC0zLjU4IDgtOCAwLTIyLjA5LTE3LjkxLTQwLTQwLTQwaC01NlYyNzEuNjRMNTAyLjA1IDU3LjZ6TTQ0My43NyA0OGwtNDggNDhIMTE2LjI0bC00OC00OGgzNzUuNTN6XCJdLGdsYXNzZXM6WzU3Niw1MTIsW10sXCJmNTMwXCIsXCJNNTc0LjEgMjgwLjM3TDUyOC43NSA5OC42NmMtNS45MS0yMy43LTIxLjU5LTQ0LjA1LTQzLTU1LjgxLTIxLjQ0LTExLjczLTQ2Ljk3LTE0LjExLTcwLjE5LTYuMzNsLTE1LjI1IDUuMDhjLTguMzkgMi43OS0xMi45MiAxMS44Ni0xMC4xMiAyMC4yNGw1LjA2IDE1LjE4YzIuNzkgOC4zOCAxMS44NSAxMi45MSAyMC4yMyAxMC4xMmwxMy4xOC00LjM5YzEwLjg3LTMuNjIgMjMtMy41NyAzMy4xNiAxLjczIDEwLjI5IDUuMzcgMTcuNTcgMTQuNTYgMjAuMzcgMjUuODJsMzguNDYgMTUzLjgyYy0yMi4xOS02LjgxLTQ5Ljc5LTEyLjQ2LTgxLjItMTIuNDYtMzQuNzcgMC03My45OCA3LjAyLTExNC44NSAyNi43NGgtNzMuMThjLTQwLjg3LTE5Ljc0LTgwLjA4LTI2Ljc1LTExNC44Ni0yNi43NS0zMS40MiAwLTU5LjAyIDUuNjUtODEuMjEgMTIuNDZsMzguNDYtMTUzLjgzYzIuNzktMTEuMjUgMTAuMDktMjAuNDUgMjAuMzgtMjUuODEgMTAuMTYtNS4zIDIyLjI4LTUuMzUgMzMuMTUtMS43M2wxMy4xNyA0LjM5YzguMzggMi43OSAxNy40NC0xLjc0IDIwLjIzLTEwLjEybDUuMDYtMTUuMThjMi44LTguMzgtMS43My0xNy40NS0xMC4xMi0yMC4yNGwtMTUuMjUtNS4wOGMtMjMuMjItNy43OC00OC43NS01LjQxLTcwLjE5IDYuMzMtMjEuNDEgMTEuNzctMzcuMDkgMzIuMTEtNDMgNTUuOEwxLjkgMjgwLjM3QTY0LjIxOCA2NC4yMTggMCAwIDAgMCAyOTUuODZ2NzAuMjVDMCA0MjkuMDEgNTEuNTggNDgwIDExNS4yIDQ4MGgzNy4xMmM2MC4yOCAwIDExMC4zNy00NS45NCAxMTQuODgtMTA1LjM3bDIuOTMtMzguNjNoMzUuNzVsMi45MyAzOC42M0MzMTMuMzEgNDM0LjA2IDM2My40IDQ4MCA0MjMuNjggNDgwaDM3LjEyYzYzLjYyIDAgMTE1LjItNTAuOTkgMTE1LjItMTEzLjg4di03MC4yNWMwLTUuMjMtLjY0LTEwLjQzLTEuOS0xNS41em0tMzcwLjcyIDg5LjQyYy0xLjk3IDI1LjkxLTI0LjQgNDYuMjEtNTEuMDYgNDYuMjFIMTE1LjJDODYuOTcgNDE2IDY0IDM5My42MiA2NCAzNjYuMTF2LTM3LjU0YzE4LjEyLTYuNDkgNDMuNDItMTIuOTIgNzIuNTgtMTIuOTIgMjMuODYgMCA0Ny4yNiA0LjMzIDY5LjkzIDEyLjkybC0zLjEzIDQxLjIyek01MTIgMzY2LjEyYzAgMjcuNTEtMjIuOTcgNDkuODgtNTEuMiA0OS44OGgtMzcuMTJjLTI2LjY3IDAtNDkuMS0yMC4zLTUxLjA2LTQ2LjIxbC0zLjEzLTQxLjIyYzIyLjY3LTguNTkgNDYuMDgtMTIuOTIgNjkuOTUtMTIuOTIgMjkuMTIgMCA1NC40MyA2LjQ0IDcyLjU1IDEyLjkzdjM3LjU0elwiXSxnbG9iZTpbNDk2LDUxMixbXSxcImYwYWNcIixcIk0zMzYuNSAxNjBDMzIyIDcwLjcgMjg3LjggOCAyNDggOHMtNzQgNjIuNy04OC41IDE1MmgxNzd6TTE1MiAyNTZjMCAyMi4yIDEuMiA0My41IDMuMyA2NGgxODUuM2MyLjEtMjAuNSAzLjMtNDEuOCAzLjMtNjRzLTEuMi00My41LTMuMy02NEgxNTUuM2MtMi4xIDIwLjUtMy4zIDQxLjgtMy4zIDY0em0zMjQuNy05NmMtMjguNi02Ny45LTg2LjUtMTIwLjQtMTU4LTE0MS42IDI0LjQgMzMuOCA0MS4yIDg0LjcgNTAgMTQxLjZoMTA4ek0xNzcuMiAxOC40QzEwNS44IDM5LjYgNDcuOCA5Mi4xIDE5LjMgMTYwaDEwOGM4LjctNTYuOSAyNS41LTEwNy44IDQ5LjktMTQxLjZ6TTQ4Ny40IDE5MkgzNzIuN2MyLjEgMjEgMy4zIDQyLjUgMy4zIDY0cy0xLjIgNDMtMy4zIDY0aDExNC42YzUuNS0yMC41IDguNi00MS44IDguNi02NHMtMy4xLTQzLjUtOC41LTY0ek0xMjAgMjU2YzAtMjEuNSAxLjItNDMgMy4zLTY0SDguNkMzLjIgMjEyLjUgMCAyMzMuOCAwIDI1NnMzLjIgNDMuNSA4LjYgNjRoMTE0LjZjLTItMjEtMy4yLTQyLjUtMy4yLTY0em0zOS41IDk2YzE0LjUgODkuMyA0OC43IDE1MiA4OC41IDE1MnM3NC02Mi43IDg4LjUtMTUyaC0xNzd6bTE1OS4zIDE0MS42YzcxLjQtMjEuMiAxMjkuNC03My43IDE1OC0xNDEuNmgtMTA4Yy04LjggNTYuOS0yNS42IDEwNy44LTUwIDE0MS42ek0xOS4zIDM1MmMyOC42IDY3LjkgODYuNSAxMjAuNCAxNTggMTQxLjYtMjQuNC0zMy44LTQxLjItODQuNy01MC0xNDEuNmgtMTA4elwiXSxcImdsb2JlLWFmcmljYVwiOls0OTYsNTEyLFtdLFwiZjU3Y1wiLFwiTTI0OCA4QzExMS4wMyA4IDAgMTE5LjAzIDAgMjU2czExMS4wMyAyNDggMjQ4IDI0OCAyNDgtMTExLjAzIDI0OC0yNDhTMzg0Ljk3IDggMjQ4IDh6bTE2MCAyMTUuNXY2LjkzYzAgNS44Ny0zLjMyIDExLjI0LTguNTcgMTMuODZsLTE1LjM5IDcuN2ExNS40ODUgMTUuNDg1IDAgMCAxLTE1LjUzLS45N2wtMTguMjEtMTIuMTRhMTUuNTIgMTUuNTIgMCAwIDAtMTMuNS0xLjgxbC0yLjY1Ljg4Yy05LjcgMy4yMy0xMy42NiAxNC43OS03Ljk5IDIzLjNsMTMuMjQgMTkuODZjMi44NyA0LjMxIDcuNzEgNi45IDEyLjg5IDYuOWg4LjIxYzguNTYgMCAxNS41IDYuOTQgMTUuNSAxNS41djExLjM0YzAgMy4zNS0xLjA5IDYuNjItMy4xIDkuM2wtMTguNzQgMjQuOThjLTEuNDIgMS45LTIuMzkgNC4xLTIuODMgNi40M2wtNC4zIDIyLjgzYy0uNjIgMy4yOS0yLjI5IDYuMjktNC43NiA4LjU2YTE1OS42MDggMTU5LjYwOCAwIDAgMC0yNSAyOS4xNmwtMTMuMDMgMTkuNTVhMjcuNzU2IDI3Ljc1NiAwIDAgMS0yMy4wOSAxMi4zNmMtMTAuNTEgMC0yMC4xMi01Ljk0LTI0LjgyLTE1LjM0YTc4LjkwMiA3OC45MDIgMCAwIDEtOC4zMy0zNS4yOVYzNjcuNWMwLTguNTYtNi45NC0xNS41LTE1LjUtMTUuNWgtMjUuODhjLTE0LjQ5IDAtMjguMzgtNS43Ni0zOC42My0xNmE1NC42NTkgNTQuNjU5IDAgMCAxLTE2LTM4LjYzdi0xNC4wNmMwLTE3LjE5IDguMS0zMy4zOCAyMS44NS00My43bDI3LjU4LTIwLjY5YTU0LjY2MyA1NC42NjMgMCAwIDEgMzIuNzgtMTAuOTNoLjg5YzguNDggMCAxNi44NSAxLjk3IDI0LjQzIDUuNzdsMTQuNzIgNy4zNmMzLjY4IDEuODQgNy45MyAyLjE0IDExLjgzLjg0bDQ3LjMxLTE1Ljc3YzYuMzMtMi4xMSAxMC42LTguMDMgMTAuNi0xNC43IDAtOC41Ni02Ljk0LTE1LjUtMTUuNS0xNS41aC0xMC4wOWMtNC4xMSAwLTguMDUtMS42My0xMC45Ni00LjU0bC02LjkyLTYuOTJhMTUuNDkzIDE1LjQ5MyAwIDAgMC0xMC45Ni00LjU0SDE5OS41Yy04LjU2IDAtMTUuNS02Ljk0LTE1LjUtMTUuNXYtNC40YzAtNy4xMSA0Ljg0LTEzLjMxIDExLjc0LTE1LjA0bDE0LjQ1LTMuNjFjMy43NC0uOTQgNy0zLjIzIDkuMTQtNi40NGw4LjA4LTEyLjExYzIuODctNC4zMSA3LjcxLTYuOSAxMi44OS02LjloMjQuMjFjOC41NiAwIDE1LjUtNi45NCAxNS41LTE1LjV2LTIxLjdDMzU5LjIzIDcxLjYzIDQyMi44NiAxMzEuMDIgNDQxLjkzIDIwOEg0MjMuNWMtOC41NiAwLTE1LjUgNi45NC0xNS41IDE1LjV6XCJdLFwiZ2xvYmUtYW1lcmljYXNcIjpbNDk2LDUxMixbXSxcImY1N2RcIixcIk0yNDggOEMxMTEuMDMgOCAwIDExOS4wMyAwIDI1NnMxMTEuMDMgMjQ4IDI0OCAyNDggMjQ4LTExMS4wMyAyNDgtMjQ4UzM4NC45NyA4IDI0OCA4em04Mi4yOSAzNTcuNmMtMy45IDMuODgtNy45OSA3Ljk1LTExLjMxIDExLjI4LTIuOTkgMy01LjEgNi43LTYuMTcgMTAuNzEtMS41MSA1LjY2LTIuNzMgMTEuMzgtNC43NyAxNi44N2wtMTcuMzkgNDYuODVjLTEzLjc2IDMtMjggNC42OS00Mi42NSA0LjY5di0yNy4zOGMxLjY5LTEyLjYyLTcuNjQtMzYuMjYtMjIuNjMtNTEuMjUtNi02LTkuMzctMTQuMTQtOS4zNy0yMi42M3YtMzIuMDFjMC0xMS42NC02LjI3LTIyLjM0LTE2LjQ2LTI3Ljk3LTE0LjM3LTcuOTUtMzQuODEtMTkuMDYtNDguODEtMjYuMTEtMTEuNDgtNS43OC0yMi4xLTEzLjE0LTMxLjY1LTIxLjc1bC0uOC0uNzJhMTE0Ljc5MiAxMTQuNzkyIDAgMCAxLTE4LjA2LTIwLjc0Yy05LjM4LTEzLjc3LTI0LjY2LTM2LjQyLTM0LjU5LTUxLjE0IDIwLjQ3LTQ1LjUgNTcuMzYtODIuMDQgMTAzLjItMTAxLjg5bDI0LjAxIDEyLjAxQzIwMy40OCA4OS43NCAyMTYgODIuMDEgMjE2IDcwLjExdi0xMS4zYzcuOTktMS4yOSAxNi4xMi0yLjExIDI0LjM5LTIuNDJsMjguMyAyOC4zYzYuMjUgNi4yNSA2LjI1IDE2LjM4IDAgMjIuNjNMMjY0IDExMmwtMTAuMzQgMTAuMzRjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMWw0LjY5IDQuNjljMy4xMiAzLjEyIDMuMTIgOC4xOSAwIDExLjMxbC04IDhhOC4wMDggOC4wMDggMCAwIDEtNS42NiAyLjM0aC04Ljk5Yy0yLjA4IDAtNC4wOC44MS01LjU4IDIuMjdsLTkuOTIgOS42NWE4LjAwOCA4LjAwOCAwIDAgMC0xLjU4IDkuMzFsMTUuNTkgMzEuMTljMi42NiA1LjMyLTEuMjEgMTEuNTgtNy4xNSAxMS41OGgtNS42NGMtMS45MyAwLTMuNzktLjctNS4yNC0xLjk2bC05LjI4LTguMDZhMTYuMDE3IDE2LjAxNyAwIDAgMC0xNS41NS0zLjFsLTMxLjE3IDEwLjM5YTExLjk1IDExLjk1IDAgMCAwLTguMTcgMTEuMzRjMCA0LjUzIDIuNTYgOC42NiA2LjYxIDEwLjY5bDExLjA4IDUuNTRjOS40MSA0LjcxIDE5Ljc5IDcuMTYgMzAuMzEgNy4xNnMyMi41OSAyNy4yOSAzMiAzMmg2Ni43NWM4LjQ5IDAgMTYuNjIgMy4zNyAyMi42MyA5LjM3bDEzLjY5IDEzLjY5YTMwLjUwMyAzMC41MDMgMCAwIDEgOC45MyAyMS41NyA0Ni41MzYgNDYuNTM2IDAgMCAxLTEzLjcyIDMyLjk4ek00MTcgMjc0LjI1Yy01Ljc5LTEuNDUtMTAuODQtNS0xNC4xNS05Ljk3bC0xNy45OC0yNi45N2EyMy45NyAyMy45NyAwIDAgMSAwLTI2LjYybDE5LjU5LTI5LjM4YzIuMzItMy40NyA1LjUtNi4yOSA5LjI0LTguMTVsMTIuOTgtNi40OUM0NDAuMiAxOTMuNTkgNDQ4IDIyMy44NyA0NDggMjU2YzAgOC42Ny0uNzQgMTcuMTYtMS44MiAyNS41NEw0MTcgMjc0LjI1elwiXSxcImdsb2JlLWFzaWFcIjpbNDk2LDUxMixbXSxcImY1N2VcIixcIk0yNDggOEMxMTEuMDMgOCAwIDExOS4wMyAwIDI1NnMxMTEuMDMgMjQ4IDI0OCAyNDggMjQ4LTExMS4wMyAyNDgtMjQ4UzM4NC45NyA4IDI0OCA4em0tMTEuMzQgMjQwLjIzYy0yLjg5IDQuODItOC4xIDcuNzctMTMuNzIgNy43N2gtLjMxYy00LjI0IDAtOC4zMSAxLjY5LTExLjMxIDQuNjlsLTUuNjYgNS42NmMtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxbDUuNjYgNS42NmMzIDMgNC42OSA3LjA3IDQuNjkgMTEuMzFWMzA0YzAgOC44NC03LjE2IDE2LTE2IDE2aC02LjExYy02LjA2IDAtMTEuNi0zLjQyLTE0LjMxLTguODVsLTIyLjYyLTQ1LjIzYy0yLjQ0LTQuODgtOC45NS01Ljk0LTEyLjgxLTIuMDhsLTE5LjQ3IDE5LjQ2Yy0zIDMtNy4wNyA0LjY5LTExLjMxIDQuNjlINTAuODFDNDkuMTIgMjc3LjU1IDQ4IDI2Ni45MiA0OCAyNTZjMC0xMTAuMjggODkuNzItMjAwIDIwMC0yMDAgMjEuNTEgMCA0Mi4yIDMuNTEgNjEuNjMgOS44MmwtNTAuMTYgMzguNTNjLTUuMTEgMy40MS00LjYzIDExLjA2Ljg2IDEzLjgxbDEwLjgzIDUuNDFjNS40MiAyLjcxIDguODQgOC4yNSA4Ljg0IDE0LjMxVjIxNmMwIDQuNDItMy41OCA4LTggOGgtMy4wNmMtMy4wMyAwLTUuOC0xLjcxLTcuMTUtNC40Mi0xLjU2LTMuMTItNS45Ni0zLjI5LTcuNzYtLjNsLTE3LjM3IDI4Ljk1ek00MDggMzU4LjQzYzAgNC4yNC0xLjY5IDguMzEtNC42OSAxMS4zMWwtOS41NyA5LjU3Yy0zIDMtNy4wNyA0LjY5LTExLjMxIDQuNjloLTE1LjE2Yy00LjI0IDAtOC4zMS0xLjY5LTExLjMxLTQuNjlsLTEzLjAxLTEzLjAxYTI2Ljc2NyAyNi43NjcgMCAwIDAtMjUuNDItNy4wNGwtMjEuMjcgNS4zMmMtMS4yNy4zMi0yLjU3LjQ4LTMuODguNDhoLTEwLjM0Yy00LjI0IDAtOC4zMS0xLjY5LTExLjMxLTQuNjlsLTExLjkxLTExLjkxYTguMDA4IDguMDA4IDAgMCAxLTIuMzQtNS42NnYtMTAuMmMwLTMuMjcgMS45OS02LjIxIDUuMDMtNy40M2wzOS4zNC0xNS43NGMxLjk4LS43OSAzLjg2LTEuODIgNS41OS0zLjA1bDIzLjcxLTE2Ljg5YTcuOTc4IDcuOTc4IDAgMCAxIDQuNjQtMS40OGgxMi4wOWMzLjIzIDAgNi4xNSAxLjk0IDcuMzkgNC45M2w1LjM1IDEyLjg1YTQgNCAwIDAgMCAzLjY5IDIuNDZoMy44YzEuNzggMCAzLjM1LTEuMTggMy44NC0yLjg4bDQuMi0xNC40N2MuNS0xLjcxIDIuMDYtMi44OCAzLjg0LTIuODhoNi4wNmMyLjIxIDAgNCAxLjc5IDQgNHYxMi45M2MwIDIuMTIuODQgNC4xNiAyLjM0IDUuNjZsMTEuOTEgMTEuOTFjMyAzIDQuNjkgNy4wNyA0LjY5IDExLjMxdjI0LjZ6XCJdLFwiZ29sZi1iYWxsXCI6WzQxNiw1MTIsW10sXCJmNDUwXCIsXCJNOTYgNDE2aDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMmgtMTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjIwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMjBjMC0xNy43LTE0LjMtMzItMzItMzJoLTE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIwLTIwOGMwIDc0LjItMzkgMTM5LjItOTcuNSAxNzZoLTIyMUMzOSAzNDcuMiAwIDI4Mi4yIDAgMjA4IDAgOTMuMSA5My4xIDAgMjA4IDBzMjA4IDkzLjEgMjA4IDIwOHptLTE4MC4xIDQzLjljMTguMyAwIDMzLjEtMTQuOCAzMy4xLTMzLjEgMC0xNC40LTkuMy0yNi4zLTIyLjEtMzAuOSA5LjYgMjYuOC0xNS42IDUxLjMtNDEuOSA0MS45IDQuNiAxMi44IDE2LjUgMjIuMSAzMC45IDIyLjF6bTQ5LjEgNDYuOWMwLTE0LjQtOS4zLTI2LjMtMjIuMS0zMC45IDkuNiAyNi44LTE1LjYgNTEuMy00MS45IDQxLjkgNC42IDEyLjggMTYuNSAyMi4xIDMwLjkgMjIuMSAxOC4zIDAgMzMuMS0xNC45IDMzLjEtMzMuMXptNjQtNjRjMC0xNC40LTkuMy0yNi4zLTIyLjEtMzAuOSA5LjYgMjYuOC0xNS42IDUxLjMtNDEuOSA0MS45IDQuNiAxMi44IDE2LjUgMjIuMSAzMC45IDIyLjEgMTguMyAwIDMzLjEtMTQuOSAzMy4xLTMzLjF6XCJdLFwiZ3JhZHVhdGlvbi1jYXBcIjpbNjQwLDUxMixbXSxcImYxOWRcIixcIk02MjIuODg0IDE5OS4wMDVsLTI3NS44MTcgODUuMWE5NiA5NiAwIDAgMS01NC4xMzQgMEw5Mi4zOTggMjIyLjIzMmMtOC41NjQgMTEuNDM4LTExLjAxOCAyMy4wNS0xMS45MTggMzguMzM1Qzg5Ljc3OCAyNjYuMTY1IDk2IDI3Ni4zNTUgOTYgMjg4YzAgMTEuOTUyLTYuNTU3IDIyLjM2Ni0xNi4yNjUgMjcuODYxbDE2LjE5NyAxMjMuMDk2Yy42MyA0Ljc4Ni0zLjEgOS4wNDMtNy45MzIgOS4wNDNINDBjLTQuODI4IDAtOC41NjItNC4yNTMtNy45MzItOS4wNDRMNDguMjY1IDMxNS44NkMzOC41NTcgMzEwLjM2NiAzMiAyOTkuOTUyIDMyIDI4OGMwLTEyLjAzNCA2LjY0Ni0yMi41MTEgMTYuNDY1LTI3Ljk3Ni45NDctMTcuOTUxIDMuOTc0LTMzLjIzMSAxMi4xNTItNDcuNTk3bC00My41MDItMTMuNDIyYy0yMi44NzYtNi44MDEtMjIuNzY2LTM5LjI0MSAwLTQ2LjAxbDI3NS44MTctODUuMWE5NiA5NiAwIDAgMSA1NC4xMzQgMGwyNzUuODE3IDg1LjFjMjIuODc3IDYuODAxIDIyLjc2NyAzOS4yNDEuMDAxIDQ2LjAxek0zNTYuNTAzIDMxNC42ODJsLS4yMDcuMDY0LS4yMDcuMDYxYTEyNy45OTggMTI3Ljk5OCAwIDAgMS03Mi4xNzcgMGwtLjIwNy0uMDYxLS4yMDctLjA2NC0xNTAuOTE0LTQ2LjU3TDEyMCAzNTJjMCAzNS4zNDYgODkuNTQzIDY0IDIwMCA2NHMyMDAtMjguNjU0IDIwMC02NGwtMTIuNTgzLTgzLjg4OC0xNTAuOTE0IDQ2LjU3elwiXSxcImdyZWF0ZXItdGhhblwiOlszODQsNTEyLFtdLFwiZjUzMVwiLFwiTTM2NS41MiAyMDkuODVMNTkuMjIgNjcuMDFjLTE2LjA2LTcuNDktMzUuMTUtLjU0LTQyLjY0IDE1LjUyTDMuMDEgMTExLjYxYy03LjQ5IDE2LjA2LS41NCAzNS4xNSAxNS41MiA0Mi42NEwyMzYuOTYgMjU2LjEgMTguNDkgMzU3Ljk5QzIuNDcgMzY1LjQ2LTQuNDYgMzg0LjUgMy4wMSA0MDAuNTJsMTMuNTIgMjlDMjQgNDQ1LjU0IDQzLjA0IDQ1Mi40NyA1OS4wNiA0NDVsMzA2LjQ3LTE0Mi45MWEzMi4wMDMgMzIuMDAzIDAgMCAwIDE4LjQ4LTI5di0zNC4yM2MtLjAxLTEyLjQ1LTcuMjEtMjMuNzYtMTguNDktMjkuMDF6XCJdLFwiZ3JlYXRlci10aGFuLWVxdWFsXCI6WzQ0OCw1MTIsW10sXCJmNTMyXCIsXCJNNTUuMjIgMTA3LjY5bDE3NS41NiA2OC4wOS0xNzUuNDQgNjguMDVjLTE4LjM5IDYuMDMtMjcuODggMjQuMzktMjEuMiA0MWwxMi4wOSAzMC4wOGM2LjY4IDE2LjYxIDI2Ljk5IDI1LjE5IDQ1LjM4IDE5LjE1TDM5My4wMiAyMTQuMmMxMy43Ny00LjUyIDIyLjk4LTE2LjYxIDIyLjk4LTMwLjE3di0xNS45NmMwLTEzLjU2LTkuMjEtMjUuNjUtMjIuOTgtMzAuMTdMOTEuMyAxNy45MmMtMTguMjktNi0zOC41MSAyLjUzLTQ1LjE1IDE5LjA2TDM0LjEyIDY2LjljLTYuNjQgMTYuNTMgMi44MSAzNC43OSAyMS4xIDQwLjc5ek00MjQgNDAwSDI0Yy0xMy4yNSAwLTI0IDEwLjc0LTI0IDI0djQ4YzAgMTMuMjUgMTAuNzUgMjQgMjQgMjRoNDAwYzEzLjI1IDAgMjQtMTAuNzUgMjQtMjR2LTQ4YzAtMTMuMjYtMTAuNzUtMjQtMjQtMjR6XCJdLGdyaW1hY2U6WzQ5Niw1MTIsW10sXCJmNTdmXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHpNMTQ0IDQwMGgtOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ2LThoNDB2NDB6bTAtNTZoLTQwdi04YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDh2NDB6bS04LTEzNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMnptNzIgMTkyaC00OHYtNDBoNDh2NDB6bTAtNTZoLTQ4di00MGg0OHY0MHptNjQgNTZoLTQ4di00MGg0OHY0MHptMC01NmgtNDh2LTQwaDQ4djQwem02NCA1NmgtNDh2LTQwaDQ4djQwem0wLTU2aC00OHYtNDBoNDh2NDB6bS04LTEwNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTY0IDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmgtOHYtNDBoNDB2OHptMC0yNGgtNDB2LTQwaDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OHpcIl0sZ3JpbjpbNDk2LDUxMixbXSxcImY1ODBcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em04MCAxNjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMiAxNC4zLTMyIDMyLTMyem0tMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMiAxNC4zLTMyIDMyLTMyem04MCAyNTZjLTYwLjYgMC0xMzQuNS0zOC4zLTE0My44LTkzLjMtMi0xMS44IDkuMy0yMS42IDIwLjctMTcuOUMxNTUuMSAzMzAuNSAyMDAgMzM2IDI0OCAzMzZzOTIuOS01LjUgMTIzLjEtMTUuMmMxMS4zLTMuNyAyMi42IDYuMSAyMC43IDE3LjktOS4zIDU1LTgzLjIgOTMuMy0xNDMuOCA5My4zelwiXSxcImdyaW4tYWx0XCI6WzQ5Niw1MTIsW10sXCJmNTgxXCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptNjMuNyAxMjguN2M3LjYtMTEuNCAyNC43LTExLjcgMzIuNyAwIDEyLjQgMTguNCAxNS4xIDM2LjkgMTUuNyA1NS4zLS41IDE4LjQtMy4zIDM2LjktMTUuNyA1NS4zLTcuNiAxMS40LTI0LjcgMTEuNy0zMi43IDAtMTIuNC0xOC40LTE1LjEtMzYuOS0xNS43LTU1LjMuNS0xOC40IDMuMy0zNi45IDE1LjctNTUuM3ptLTE2MCAwYzcuNi0xMS40IDI0LjctMTEuNyAzMi43IDAgMTIuNCAxOC40IDE1LjEgMzYuOSAxNS43IDU1LjMtLjUgMTguNC0zLjMgMzYuOS0xNS43IDU1LjMtNy42IDExLjQtMjQuNyAxMS43LTMyLjcgMC0xMi40LTE4LjQtMTUuMS0zNi45LTE1LjctNTUuMy41LTE4LjQgMy4zLTM2LjkgMTUuNy01NS4zek0yNDggNDMyYy02MC42IDAtMTM0LjUtMzguMy0xNDMuOC05My4zLTItMTEuOCA5LjMtMjEuNiAyMC43LTE3LjlDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuNC0zLjcgMjIuNiA2LjEgMjAuNyAxNy45LTkuMyA1NS04My4yIDkzLjMtMTQzLjggOTMuM3pcIl0sXCJncmluLWJlYW1cIjpbNDk2LDUxMixbXSxcImY1ODJcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em04MCAxNDRjMjMuOCAwIDUyLjcgMjkuMyA1NiA3MS40LjcgOC42LTEwLjggMTEuOS0xNC45IDQuNWwtOS41LTE3Yy03LjctMTMuNy0xOS4yLTIxLjYtMzEuNS0yMS42cy0yMy44IDcuOS0zMS41IDIxLjZsLTkuNSAxN2MtNC4xIDcuMy0xNS42IDQtMTQuOS00LjUgMy4xLTQyLjEgMzItNzEuNCA1NS44LTcxLjR6bS0xNjAgMGMyMy44IDAgNTIuNyAyOS4zIDU2IDcxLjQuNyA4LjYtMTAuOCAxMS45LTE0LjkgNC41bC05LjUtMTdjLTcuNy0xMy43LTE5LjItMjEuNi0zMS41LTIxLjZzLTIzLjggNy45LTMxLjUgMjEuNmwtOS41IDE3Yy00LjIgNy40LTE1LjYgNC0xNC45LTQuNSAzLjEtNDIuMSAzMi03MS40IDU1LjgtNzEuNHptODAgMjgwYy02MC42IDAtMTM0LjUtMzguMy0xNDMuOC05My4zLTItMTEuOSA5LjQtMjEuNiAyMC43LTE3LjlDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuNC0zLjcgMjIuNiA2LjEgMjAuNyAxNy45LTkuMyA1NS04My4yIDkzLjMtMTQzLjggOTMuM3pcIl0sXCJncmluLWJlYW0tc3dlYXRcIjpbNTA0LDUxMixbXSxcImY1ODNcIixcIk00NTYgMTI4YzI2LjUgMCA0OC0yMSA0OC00NyAwLTIwLTI4LjUtNjAuNC00MS42LTc3LjgtMy4yLTQuMy05LjYtNC4zLTEyLjggMEM0MzYuNSAyMC42IDQwOCA2MSA0MDggODFjMCAyNiAyMS41IDQ3IDQ4IDQ3em0wIDMyYy00NC4xIDAtODAtMzUuNC04MC03OSAwLTQuNC4zLTE0LjIgOC4xLTMyLjJDMzQ1IDIzLjEgMjk4LjMgOCAyNDggOCAxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4YzAtMzUuMS03LjQtNjguNC0yMC41LTk4LjYtNi4zIDEuNS0xMi43IDIuNi0xOS41IDIuNnptLTEyOC04YzIzLjggMCA1Mi43IDI5LjMgNTYgNzEuNC43IDguNi0xMC44IDEyLTE0LjkgNC41bC05LjUtMTdjLTcuNy0xMy43LTE5LjItMjEuNi0zMS41LTIxLjZzLTIzLjggNy45LTMxLjUgMjEuNmwtOS41IDE3Yy00LjEgNy40LTE1LjYgNC0xNC45LTQuNSAzLjEtNDIuMSAzMi03MS40IDU1LjgtNzEuNHptLTE2MCAwYzIzLjggMCA1Mi43IDI5LjMgNTYgNzEuNC43IDguNi0xMC44IDEyLTE0LjkgNC41bC05LjUtMTdjLTcuNy0xMy43LTE5LjItMjEuNi0zMS41LTIxLjZzLTIzLjggNy45LTMxLjUgMjEuNmwtOS41IDE3Yy00LjIgNy40LTE1LjYgNC0xNC45LTQuNSAzLjEtNDIuMSAzMi03MS40IDU1LjgtNzEuNHptODAgMjgwYy02MC42IDAtMTM0LjUtMzguMy0xNDMuOC05My4zLTItMTEuOCA5LjMtMjEuNiAyMC43LTE3LjlDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuNS0zLjcgMjIuNiA2LjIgMjAuNyAxNy45LTkuMyA1NS04My4yIDkzLjMtMTQzLjggOTMuM3pcIl0sXCJncmluLWhlYXJ0c1wiOls0OTYsNTEyLFtdLFwiZjU4NFwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6TTkwLjQgMTgzLjZjNi43LTE3LjYgMjYuNy0yNi43IDQ0LjktMjEuOWw3LjEgMS45IDItNy4xYzUtMTguMSAyMi44LTMwLjkgNDEuNS0yNy45IDIxLjQgMy40IDM0LjQgMjQuMiAyOC44IDQ0LjVMMTk1LjMgMjQzYy0xLjIgNC41LTUuOSA3LjItMTAuNSA2bC03MC4yLTE4LjJjLTIwLjQtNS40LTMxLjktMjctMjQuMi00Ny4yek0yNDggNDMyYy02MC42IDAtMTM0LjUtMzguMy0xNDMuOC05My4zLTItMTEuOCA5LjItMjEuNSAyMC43LTE3LjlDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuNC0zLjYgMjIuNiA2LjEgMjAuNyAxNy45LTkuMyA1NS04My4yIDkzLjMtMTQzLjggOTMuM3ptMTMzLjQtMjAxLjNsLTcwLjIgMTguMmMtNC41IDEuMi05LjItMS41LTEwLjUtNkwyODEuMyAxNzNjLTUuNi0yMC4zIDcuNC00MS4xIDI4LjgtNDQuNSAxOC42LTMgMzYuNCA5LjggNDEuNSAyNy45bDIgNy4xIDcuMS0xLjljMTguMi00LjcgMzguMiA0LjMgNDQuOSAyMS45IDcuNyAyMC4zLTMuOCA0MS45LTI0LjIgNDcuMnpcIl0sXCJncmluLXNxdWludFwiOls0OTYsNTEyLFtdLFwiZjU4NVwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTMzLjggMTg5LjdsODAtNDhjMTEuNi02LjkgMjQgNy43IDE1LjQgMThMMzQzLjYgMjA4bDMzLjYgNDAuM2M4LjcgMTAuNC0zLjkgMjQuOC0xNS40IDE4bC04MC00OGMtNy43LTQuNy03LjctMTUuOSAwLTIwLjZ6bS0xNjMtMzBjLTguNi0xMC4zIDMuOC0yNC45IDE1LjQtMThsODAgNDhjNy44IDQuNyA3LjggMTUuOSAwIDIwLjZsLTgwIDQ4Yy0xMS41IDYuOC0yNC03LjYtMTUuNC0xOGwzMy42LTQwLjMtMzMuNi00MC4zek0yNDggNDMyYy02MC42IDAtMTM0LjUtMzguMy0xNDMuOC05My4zLTItMTEuOSA5LjQtMjEuNiAyMC43LTE3LjlDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuNS0zLjcgMjIuNiA2LjIgMjAuNyAxNy45LTkuMyA1NS04My4yIDkzLjMtMTQzLjggOTMuM3pcIl0sXCJncmluLXNxdWludC10ZWFyc1wiOls1MTIsNTEyLFtdLFwiZjU4NlwiLFwiTTQwOS42IDExMS45YzIyLjYtMy4yIDczLjUtMTIgODguMy0yNi44IDE5LjItMTkuMiAxOC45LTUwLjYtLjctNzAuMlM0NDYtNSA0MjYuOSAxNC4yYy0xNC44IDE0LjgtMjMuNSA2NS43LTI2LjggODguMy0uOCA1LjUgMy45IDEwLjIgOS41IDkuNHpNMTAyLjQgNDAwLjFjLTIyLjYgMy4yLTczLjUgMTItODguMyAyNi44LTE5LjEgMTkuMS0xOC44IDUwLjYuOCA3MC4yczUxIDE5LjkgNzAuMi43YzE0LjgtMTQuOCAyMy41LTY1LjcgMjYuOC04OC4zLjgtNS41LTMuOS0xMC4yLTkuNS05LjR6bTMxMS43LTI1Ni41Yy0zMyAzLjktNDguNi0yNS4xLTQ1LjctNDUuNyAzLjQtMjQgNy40LTQyLjEgMTEuNS01Ni41QzI4NS4xLTEzLjQgMTYxLjgtLjUgODAuNiA4MC42LS41IDE2MS43LTEzLjQgMjg1IDQxLjQgMzc5LjljMTQuNC00LjEgMzIuNC04IDU2LjUtMTEuNSAzMy4yLTMuOSA0OC42IDI1LjIgNDUuNyA0NS43LTMuNCAyNC03LjQgNDIuMS0xMS41IDU2LjUgOTQuOCA1NC44IDIxOC4xIDQxLjkgMjk5LjMtMzkuMnM5NC0yMDQuNCAzOS4yLTI5OS4zYy0xNC40IDQuMS0zMi41IDgtNTYuNSAxMS41ek0yNTUuNyAxMDZjMy4zLTEzLjIgMjIuNC0xMS41IDIzLjYgMS44bDQuOCA1Mi4zIDUyLjMgNC44YzEzLjQgMS4yIDE0LjkgMjAuMyAxLjggMjMuNmwtOTAuNSAyMi42Yy04LjkgMi4yLTE2LjctNS45LTE0LjUtMTQuNWwyMi41LTkwLjZ6bS05MC45IDIzMC4zTDE2MCAyODRsLTUyLjMtNC44Yy0xMy40LTEuMi0xNC45LTIwLjMtMS44LTIzLjZsOTAuNS0yMi42YzguOC0yLjIgMTYuNyA1LjggMTQuNSAxNC41TDE4OC4zIDMzOGMtMy4xIDEzLjItMjIuMiAxMS43LTIzLjUtMS43em0yMTUuNyA0NC4yYy0yOS4zIDI5LjMtNzUuNyA1MC40LTExNi43IDUwLjQtMTguOSAwLTM2LjYtNC41LTUxLTE0LjctOS44LTYuOS04LjctMjEuOCAyLTI3LjIgMjguMy0xNC42IDYzLjktNDIuNCA5Ny44LTc2LjNzNjEuNy02OS42IDc2LjMtOTcuOGM1LjQtMTAuNSAyMC4yLTExLjkgMjcuMy0yIDMyLjMgNDUuMyA3LjEgMTI0LjctMzUuNyAxNjcuNnpcIl0sXCJncmluLXN0YXJzXCI6WzQ5Niw1MTIsW10sXCJmNTg3XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHpNOTQuNiAxNjguOWwzNC45LTUgMTUuNS0zMS42YzIuOS01LjggMTEtNS44IDEzLjkgMGwxNS41IDMxLjYgMzQuOSA1YzYuMiAxIDguOSA4LjYgNC4zIDEzLjJsLTI1LjQgMjQuNiA2IDM0LjljMSA2LjItNS4zIDExLTExIDcuOUwxNTIgMjMzLjNsLTMxLjMgMTYuM2MtNS43IDMuMS0xMi0xLjctMTEtNy45bDYtMzQuOS0yNS40LTI0LjZjLTQuNi00LjctMS45LTEyLjMgNC4zLTEzLjN6TTI0OCA0MzJjLTYwLjYgMC0xMzQuNS0zOC4zLTE0My44LTkzLjMtMi0xMS44IDkuMy0yMS41IDIwLjctMTcuOUMxNTUuMSAzMzAuNSAyMDAgMzM2IDI0OCAzMzZzOTIuOS01LjUgMTIzLjEtMTUuMmMxMS41LTMuNyAyMi42IDYuMSAyMC43IDE3LjktOS4zIDU1LTgzLjIgOTMuMy0xNDMuOCA5My4zem0xNTcuNy0yNDkuOWwtMjUuNCAyNC42IDYgMzQuOWMxIDYuMi01LjMgMTEtMTEgNy45TDM0NCAyMzMuM2wtMzEuMyAxNi4zYy01LjcgMy4xLTEyLTEuNy0xMS03LjlsNi0zNC45LTI1LjQtMjQuNmMtNC41LTQuNi0xLjktMTIuMiA0LjMtMTMuMmwzNC45LTUgMTUuNS0zMS42YzIuOS01LjggMTEtNS44IDEzLjkgMGwxNS41IDMxLjYgMzQuOSA1YzYuMy45IDkgOC41IDQuNCAxMy4xelwiXSxcImdyaW4tdGVhcnNcIjpbNjQwLDUxMixbXSxcImY1ODhcIixcIk0xMDIuNCAyNTYuMWMtMjIuNiAzLjItNzMuNSAxMi04OC4zIDI2LjgtMTkuMSAxOS4xLTE4LjggNTAuNi44IDcwLjJzNTEgMTkuOSA3MC4yLjdjMTQuOC0xNC44IDIzLjUtNjUuNyAyNi44LTg4LjMuOC01LjUtMy45LTEwLjItOS41LTkuNHptNTIzLjQgMjYuOGMtMTQuOC0xNC44LTY1LjctMjMuNS04OC4zLTI2LjgtNS41LS44LTEwLjMgMy45LTkuNSA5LjUgMy4yIDIyLjYgMTIgNzMuNSAyNi44IDg4LjMgMTkuMiAxOS4yIDUwLjYgMTguOSA3MC4yLS43czIwLTUxLjIuOC03MC4zem0tMTI5LjQtMTIuOGMtMy44LTI2LjYgMTkuMS00OS41IDQ1LjctNDUuNyA4LjkgMS4zIDE2LjggMi43IDI0LjMgNC4xQzU1Mi43IDEwNC41IDQ0Ny43IDggMzIwIDhTODcuMyAxMDQuNSA3My42IDIyOC41YzcuNS0xLjQgMTUuNC0yLjggMjQuMy00LjEgMzMuMi0zLjkgNDguNiAyNS4zIDQ1LjcgNDUuNy0xMS44IDgyLjMtMjkuOSAxMDAuNC0zNS44IDEwNi40LS45LjktMiAxLjYtMyAyLjUgNDIuNyA3NC42IDEyMyAxMjUgMjE1LjIgMTI1czE3Mi41LTUwLjQgMjE1LjItMTI1LjFjLTEtLjktMi4xLTEuNS0zLTIuNS01LjktNS45LTI0LTI0LTM1LjgtMTA2LjN6TTQwMCAxNTJjMjMuOCAwIDUyLjcgMjkuMyA1NiA3MS40LjcgOC42LTEwLjggMTItMTQuOSA0LjVsLTkuNS0xN2MtNy43LTEzLjctMTkuMi0yMS42LTMxLjUtMjEuNnMtMjMuOCA3LjktMzEuNSAyMS42bC05LjUgMTdjLTQuMiA3LjQtMTUuNiA0LTE0LjktNC41IDMuMS00Mi4xIDMyLTcxLjQgNTUuOC03MS40em0tMTYwIDBjMjMuOCAwIDUyLjcgMjkuMyA1NiA3MS40LjcgOC42LTEwLjggMTItMTQuOSA0LjVsLTkuNS0xN2MtNy43LTEzLjctMTkuMi0yMS42LTMxLjUtMjEuNnMtMjMuOCA3LjktMzEuNSAyMS42bC05LjUgMTdjLTQuMiA3LjQtMTUuNiA0LTE0LjktNC41IDMuMS00Mi4xIDMyLTcxLjQgNTUuOC03MS40em04MCAyODBjLTYwLjYgMC0xMzQuNS0zOC4zLTE0My44LTkzLjMtMi0xMS43IDkuMi0yMS42IDIwLjctMTcuOUMyMjcuMSAzMzAuNSAyNzIgMzM2IDMyMCAzMzZzOTIuOS01LjUgMTIzLjEtMTUuMmMxMS40LTMuNyAyMi42IDYuMSAyMC43IDE3LjktOS4zIDU1LTgzLjIgOTMuMy0xNDMuOCA5My4zelwiXSxcImdyaW4tdG9uZ3VlXCI6WzQ5Niw1MTIsW10sXCJmNTg5XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZjMCAxMDYuMyA2NyAxOTYuNyAxNjEgMjMyLTUuNi0xMi4yLTktMjUuNy05LTQwdi00NS41Yy0yNC43LTE2LjItNDMuNS0zOC4xLTQ3LjgtNjMuOC0yLTExLjggOS4zLTIxLjUgMjAuNy0xNy45QzE1NS4xIDMzMC41IDIwMCAzMzYgMjQ4IDMzNnM5Mi45LTUuNSAxMjMuMS0xNS4yYzExLjQtMy42IDIyLjYgNi4xIDIwLjcgMTcuOS00LjMgMjUuNy0yMy4xIDQ3LjYtNDcuOCA2My44VjQ0OGMwIDE0LjMtMy40IDI3LjgtOSA0MCA5NC0zNS4zIDE2MS0xMjUuNyAxNjEtMjMyQzQ5NiAxMTkgMzg1IDggMjQ4IDh6bS04MCAyMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyem0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bS0zNC45IDEzNC42Yy0xNC40LTYuNS0zMS4xIDIuMi0zNC42IDE3LjZsLTEuOCA3LjhjLTIuMSA5LjItMTUuMiA5LjItMTcuMyAwbC0xLjgtNy44Yy0zLjUtMTUuNC0yMC4yLTI0LjEtMzQuNi0xNy42LS45LjQuMy0uMi0xOC45IDkuNHY2M2MwIDM1LjIgMjggNjQuNSA2My4xIDY0LjkgMzUuNy41IDY0LjktMjguNCA2NC45LTY0di02NGMtMTkuNS05LjYtMTguMi04LjktMTktOS4zelwiXSxcImdyaW4tdG9uZ3VlLXNxdWludFwiOls0OTYsNTEyLFtdLFwiZjU4YVwiLFwiTTI5My4xIDM3NC42Yy0xNC40LTYuNS0zMS4xIDIuMi0zNC42IDE3LjZsLTEuOCA3LjhjLTIuMSA5LjItMTUuMiA5LjItMTcuMyAwbC0xLjgtNy44Yy0zLjUtMTUuNC0yMC4yLTI0LjEtMzQuNi0xNy42LS45LjQuMy0uMi0xOC45IDkuNHY2M2MwIDM1LjIgMjggNjQuNSA2My4xIDY0LjkgMzUuNy41IDY0LjktMjguNCA2NC45LTY0di02NGMtMTkuNS05LjYtMTguMi04LjktMTktOS4zek0yNDggOEMxMTEgOCAwIDExOSAwIDI1NmMwIDEwNi4zIDY3IDE5Ni43IDE2MSAyMzItNS42LTEyLjItOS0yNS43LTktNDB2LTQ1LjVjLTI0LjctMTYuMi00My41LTM4LjEtNDcuOC02My44LTItMTEuOCA5LjItMjEuNSAyMC43LTE3LjlDMTU1LjEgMzMwLjUgMjAwIDMzNiAyNDggMzM2czkyLjktNS41IDEyMy4xLTE1LjJjMTEuNC0zLjcgMjIuNiA2LjEgMjAuNyAxNy45LTQuMyAyNS43LTIzLjEgNDcuNi00Ny44IDYzLjhWNDQ4YzAgMTQuMy0zLjQgMjcuOC05IDQwIDk0LTM1LjMgMTYxLTEyNS43IDE2MS0yMzJDNDk2IDExOSAzODUgOCAyNDggOHptLTMzLjggMjEwLjNsLTgwIDQ4Yy0xMS41IDYuOC0yNC03LjYtMTUuNC0xOGwzMy42LTQwLjMtMzMuNi00MC4zYy04LjYtMTAuMyAzLjgtMjQuOSAxNS40LTE4bDgwIDQ4YzcuNyA0LjcgNy43IDE1LjkgMCAyMC42em0xNjMgMzBjOC43IDEwLjQtMy45IDI0LjgtMTUuNCAxOGwtODAtNDhjLTcuOC00LjctNy44LTE1LjkgMC0yMC42bDgwLTQ4YzExLjctNi45IDIzLjkgNy43IDE1LjQgMThMMzQzLjYgMjA4bDMzLjYgNDAuM3pcIl0sXCJncmluLXRvbmd1ZS13aW5rXCI6WzQ5Niw1MTIsW10sXCJmNThiXCIsXCJNMzQ0IDE4NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0LTEwLjctMjQtMjQtMjR6TTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2YzAgMTA2LjMgNjcgMTk2LjcgMTYxIDIzMi01LjYtMTIuMi05LTI1LjctOS00MHYtNDUuNWMtMjQuNy0xNi4yLTQzLjUtMzguMS00Ny44LTYzLjgtMi0xMS44IDkuMy0yMS41IDIwLjctMTcuOUMxNTUuMSAzMzAuNSAyMDAgMzM2IDI0OCAzMzZzOTIuOS01LjUgMTIzLjEtMTUuMmMxMS41LTMuNyAyMi42IDYuMSAyMC43IDE3LjktNC4zIDI1LjctMjMuMSA0Ny42LTQ3LjggNjMuOFY0NDhjMCAxNC4zLTMuNCAyNy44LTkgNDAgOTQtMzUuMyAxNjEtMTI1LjcgMTYxLTIzMkM0OTYgMTE5IDM4NSA4IDI0OCA4em0tNTYgMjI1bC05LjUtOC41Yy0xNC44LTEzLjItNDYuMi0xMy4yLTYxIDBMMTEyIDIzM2MtOC41IDcuNC0yMS42LjMtMTkuOC0xMC44IDQtMjUuMiAzNC4yLTQyLjEgNTkuOS00Mi4xUzIwOCAxOTcgMjEyIDIyMi4yYzEuNiAxMS4xLTExLjYgMTguMi0yMCAxMC44em0xNTIgMzljLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjQgNjQgMjguNyA2NCA2NC0yOC43IDY0LTY0IDY0em0tNTAuOSAxMDIuNmMtMTQuNC02LjUtMzEuMSAyLjItMzQuNiAxNy42bC0xLjggNy44Yy0yLjEgOS4yLTE1LjIgOS4yLTE3LjMgMGwtMS44LTcuOGMtMy41LTE1LjQtMjAuMi0yNC4xLTM0LjYtMTcuNi0uOS40LjMtLjItMTguOSA5LjR2NjNjMCAzNS4yIDI4IDY0LjUgNjMuMSA2NC45IDM1LjcuNSA2NC45LTI4LjQgNjQuOS02NHYtNjRjLTE5LjUtOS42LTE4LjItOC45LTE5LTkuM3pcIl0sXCJncmluLXdpbmtcIjpbNDk2LDUxMixbXSxcImY1OGNcIixcIk0wIDI1NmMwIDEzNyAxMTEgMjQ4IDI0OCAyNDhzMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4IDAgMTE5IDAgMjU2em0yMDAtNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyem0xNjggMjVsLTkuNS04LjVjLTE0LjgtMTMuMi00Ni4yLTEzLjItNjEgMEwyODggMjMzYy04LjMgNy40LTIxLjYuNC0xOS44LTEwLjggNC0yNS4yIDM0LjItNDIuMSA1OS45LTQyLjFTMzg0IDE5NyAzODggMjIyLjJjMS42IDExLTExLjUgMTguMi0yMCAxMC44em0tMjQzLjEgODcuOEMxNTUuMSAzMzAuNSAyMDAgMzM2IDI0OCAzMzZzOTIuOS01LjUgMTIzLjEtMTUuMmMxMS4zLTMuNyAyMi42IDYgMjAuNyAxNy45LTkuMiA1NS04My4yIDkzLjMtMTQzLjggOTMuM3MtMTM0LjUtMzguMy0xNDMuOC05My4zYy0yLTExLjkgOS4zLTIxLjYgMjAuNy0xNy45elwiXSxcImdyaXAtaG9yaXpvbnRhbFwiOls0NDgsNTEyLFtdLFwiZjU4ZFwiLFwiTTk2IDI4OEgzMmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY2NGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDY0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bTE2MCAwaC02NGMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY2NGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDY0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bTE2MCAwaC02NGMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY2NGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDY0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6TTk2IDk2SDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMTYwIDBoLTY0Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMTYwIDBoLTY0Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpcIl0sXCJncmlwLXZlcnRpY2FsXCI6WzMyMCw1MTIsW10sXCJmNThlXCIsXCJNOTYgMzJIMzJDMTQuMzMgMzIgMCA0Ni4zMyAwIDY0djY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlY2NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyem0wIDE2MEgzMmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY2NGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDY0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bTAgMTYwSDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpNMjg4IDMyaC02NGMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY2NGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDY0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMCAxNjBoLTY0Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMCAxNjBoLTY0Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpcIl0sXCJoLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjBmZFwiLFwiTTQ0OCA4MHYzNTJjMCAyNi41MS0yMS40OSA0OC00OCA0OEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OFY4MGMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDM1MmMyNi41MSAwIDQ4IDIxLjQ5IDQ4IDQ4em0tMTEyIDQ4aC0zMmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY4MEgxNjB2LTgwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZoLTMyYy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djIyNGMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDMyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTgwaDEyOHY4MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDMyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZWMTQ0YzAtOC44MzctNy4xNjMtMTYtMTYtMTZ6XCJdLFwiaGFuZC1ob2xkaW5nXCI6WzU3Niw1MTIsW10sXCJmNGJkXCIsXCJNNTY1LjMgMzI4LjFjLTExLjgtMTAuNy0zMC4yLTEwLTQyLjYgMEw0MzAuMyA0MDJjLTExLjMgOS4xLTI1LjQgMTQtNDAgMTRIMjcyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDc4LjNjMTUuOSAwIDMwLjctMTAuOSAzMy4zLTI2LjYgMy4zLTIwLTEyLjEtMzcuNC0zMS42LTM3LjRIMTkyYy0yNyAwLTUzLjEgOS4zLTc0LjEgMjYuM0w3MS40IDM4NEgxNmMtOC44IDAtMTYgNy4yLTE2IDE2djk2YzAgOC44IDcuMiAxNiAxNiAxNmgzNTYuOGMxNC41IDAgMjguNi00LjkgNDAtMTRMNTY0IDM3N2MxNS4yLTEyLjEgMTYuNC0zNS4zIDEuMy00OC45elwiXSxcImhhbmQtaG9sZGluZy1oZWFydFwiOls1NzYsNTEyLFtdLFwiZjRiZVwiLFwiTTI3NS4zIDI1MC41YzcgNy40IDE4LjQgNy40IDI1LjUgMGwxMDguOS0xMTQuMmMzMS42LTMzLjIgMjkuOC04OC4yLTUuNi0xMTguOC0zMC44LTI2LjctNzYuNy0yMS45LTEwNC45IDcuN0wyODggMzYuOWwtMTEuMS0xMS42QzI0OC43LTQuNCAyMDIuOC05LjIgMTcyIDE3LjVjLTM1LjMgMzAuNi0zNy4yIDg1LjYtNS42IDExOC44bDEwOC45IDExNC4yem0yOTAgNzcuNmMtMTEuOC0xMC43LTMwLjItMTAtNDIuNiAwTDQzMC4zIDQwMmMtMTEuMyA5LjEtMjUuNCAxNC00MCAxNEgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoNzguM2MxNS45IDAgMzAuNy0xMC45IDMzLjMtMjYuNiAzLjMtMjAtMTIuMS0zNy40LTMxLjYtMzcuNEgxOTJjLTI3IDAtNTMuMSA5LjMtNzQuMSAyNi4zTDcxLjQgMzg0SDE2Yy04LjggMC0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2aDM1Ni44YzE0LjUgMCAyOC42LTQuOSA0MC0xNEw1NjQgMzc3YzE1LjItMTIuMSAxNi40LTM1LjMgMS4zLTQ4Ljl6XCJdLFwiaGFuZC1ob2xkaW5nLXVzZFwiOls1NDQsNTEyLFtdLFwiZjRjMFwiLFwiTTI1Ny42IDE0NC4zbDUwIDE0LjNjMy42IDEgNi4xIDQuNCA2LjEgOC4xIDAgNC42LTMuOCA4LjQtOC40IDguNGgtMzIuOGMtMy42IDAtNy4xLS44LTEwLjMtMi4yLTQuOC0yLjItMTAuNC0xLjctMTQuMSAybC0xNy41IDE3LjVjLTUuMyA1LjMtNC43IDE0LjMgMS41IDE4LjQgOS41IDYuMyAyMC4zIDEwLjEgMzEuOCAxMS41VjI0MGMwIDguOCA3LjIgMTYgMTYgMTZoMTZjOC44IDAgMTYtNy4yIDE2LTE2di0xNy42YzMwLjMtMy42IDUzLjMtMzEgNDkuMy02My0yLjktMjMtMjAuNy00MS4zLTQyLjktNDcuN2wtNTAtMTQuM2MtMy42LTEtNi4xLTQuNC02LjEtOC4xIDAtNC42IDMuOC04LjQgOC40LTguNGgzMi44YzMuNiAwIDcuMS44IDEwLjMgMi4yIDQuOCAyLjIgMTAuNCAxLjcgMTQuMS0ybDE3LjUtMTcuNWM1LjMtNS4zIDQuNy0xNC4zLTEuNS0xOC40LTkuNS02LjMtMjAuMy0xMC4xLTMxLjgtMTEuNVYxNmMwLTguOC03LjItMTYtMTYtMTZoLTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MTcuNmMtMzAuMyAzLjYtNTMuMyAzMS00OS4zIDYzIDIuOSAyMyAyMC43IDQxLjMgNDIuOSA0Ny43em0yNzYuMyAxODMuOGMtMTEuMi0xMC43LTI4LjUtMTAtNDAuMyAwTDQwNi40IDQwMmMtMTAuNyA5LjEtMjQgMTQtMzcuOCAxNEgyNTYuOWMtOC4zIDAtMTUuMS03LjItMTUuMS0xNnM2LjgtMTYgMTUuMS0xNmg3My45YzE1LjEgMCAyOS0xMC45IDMxLjQtMjYuNiAzLjEtMjAtMTEuNS0zNy40LTI5LjgtMzcuNEgxODEuM2MtMjUuNSAwLTUwLjIgOS4zLTY5LjkgMjYuM0w2Ny41IDM4NEgxNS4xQzYuOCAzODQgMCAzOTEuMiAwIDQwMHY5NmMwIDguOCA2LjggMTYgMTUuMSAxNkgzNTJjMTMuNyAwIDI3LTQuOSAzNy44LTE0bDE0Mi44LTEyMWMxNC40LTEyLjEgMTUuNS0zNS4zIDEuMy00OC45elwiXSxcImhhbmQtbGl6YXJkXCI6WzU3Niw1MTIsW10sXCJmMjU4XCIsXCJNMzg0IDQ4MGgxOTJWMzYzLjc3OGE5NS45OTggOTUuOTk4IDAgMCAwLTE0LjgzMy01MS4yNjNMMzk4LjEyNyA1NC4zNjhBNDggNDggMCAwIDAgMzU3LjU0NCAzMkgyNEMxMC43NDUgMzIgMCA0Mi43NDUgMCA1NnYxNmMwIDMwLjkyOCAyNS4wNzIgNTYgNTYgNTZoMjI5Ljk4MWMxMi44NDQgMCAyMS41NTYgMTMuMDY3IDE2LjYxNSAyNC45MjNsLTIxLjQxIDUxLjM4NUEzMiAzMiAwIDAgMSAyNTEuNjQ4IDIyNEgxMjhjLTM1LjM0NiAwLTY0IDI4LjY1NC02NCA2NHY4YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxNDcuNDA2YTQ3Ljk5NSA0Ny45OTUgMCAwIDEgMjUuNjkyIDcuNDU1bDExMS43NDggNzAuODExQTI0LjAwMSAyNC4wMDEgMCAwIDEgMzg0IDQxOC41MzlWNDgwelwiXSxcImhhbmQtcGFwZXJcIjpbNDQ4LDUxMixbXSxcImYyNTZcIixcIk00MDguNzgxIDEyOC4wMDdDMzg2LjM1NiAxMjcuNTc4IDM2OCAxNDYuMzYgMzY4IDE2OC43OVYyNTZoLThWNzkuNzljMC0yMi40My0xOC4zNTYtNDEuMjEyLTQwLjc4MS00MC43ODNDMjk3LjQ4OCAzOS40MjMgMjgwIDU3LjE2OSAyODAgNzl2MTc3aC04VjQwLjc5QzI3MiAxOC4zNiAyNTMuNjQ0LS40MjIgMjMxLjIxOS4wMDcgMjA5LjQ4OC40MjMgMTkyIDE4LjE2OSAxOTIgNDB2MjE2aC04VjgwLjc5YzAtMjIuNDMtMTguMzU2LTQxLjIxMi00MC43ODEtNDAuNzgzQzEyMS40ODggNDAuNDIzIDEwNCA1OC4xNjkgMTA0IDgwdjIzNS45OTJsLTMxLjY0OC00My41MTljLTEyLjk5My0xNy44NjYtMzguMDA5LTIxLjgxNy01NS44NzctOC44MjMtMTcuODY1IDEyLjk5NC0yMS44MTUgMzguMDEtOC44MjIgNTUuODc3bDEyNS42MDEgMTcyLjcwNUE0OCA0OCAwIDAgMCAxNzIuMDczIDUxMmgxOTcuNTljMjIuMjc0IDAgNDEuNjIyLTE1LjMyNCA0Ni43MjQtMzcuMDA2bDI2LjUwOC0xMTIuNjZhMTkyLjAxMSAxOTIuMDExIDAgMCAwIDUuMTA0LTQzLjk3NVYxNjhjLjAwMS0yMS44MzEtMTcuNDg3LTM5LjU3Ny0zOS4yMTgtMzkuOTkzelwiXSxcImhhbmQtcGVhY2VcIjpbNDQ4LDUxMixbXSxcImYyNWJcIixcIk00MDggMjE2Yy0yMi4wOTIgMC00MCAxNy45MDktNDAgNDBoLTh2LTMyYzAtMjIuMDkxLTE3LjkwOC00MC00MC00MHMtNDAgMTcuOTA5LTQwIDQwdjMyaC04VjQ4YzAtMjYuNTEtMjEuNDktNDgtNDgtNDhzLTQ4IDIxLjQ5LTQ4IDQ4djIwOGgtMTMuNTcyTDkyLjY4OCA3OC40NDlDODIuOTk0IDUzLjc3NCA1NS4xMzQgNDEuNjMgMzAuNDYxIDUxLjMyNCA1Ljc4NyA2MS4wMTctNi4zNTYgODguODc3IDMuMzM3IDExMy41NTFsNzQuNzY1IDE5MC4zNDItMzEuMDkgMjQuODcyYy0xNS4zODEgMTIuMzA2LTE5LjUxNSAzMy45NzgtOS43NDEgNTEuMDgxbDY0IDExMkEzOS45OTggMzkuOTk4IDAgMCAwIDEzNiA1MTJoMjQwYzE4LjU2MiAwIDM0LjY4Ni0xMi43NyAzOC45MzctMzAuODM4bDMyLTEzNkEzOS45NyAzOS45NyAwIDAgMCA0NDggMzM2di04MGMwLTIyLjA5MS0xNy45MDgtNDAtNDAtNDB6XCJdLFwiaGFuZC1wb2ludC1kb3duXCI6WzM4NCw1MTIsW10sXCJmMGE3XCIsXCJNOTEuODI2IDQ2Ny4yVjMxNy45NjZjLTguMjQ4IDUuODQxLTE2LjU1OCAxMC41Ny0yNC45MTggMTQuMTUzQzM1LjA5OCAzNDUuNzUyLS4wMTQgMzIyLjIyMiAwIDI4OGMuMDA4LTE4LjYxNiAxMC44OTctMzIuMjAzIDI5LjA5Mi00MCAyOC4yODYtMTIuMTIyIDY0LjMyOS03OC42NDggNzcuMzIzLTEwNy41MzQgNy45NTYtMTcuODU3IDI1LjQ3OS0yOC40NTMgNDMuODQ1LTI4LjQ2NGwuMDAxLS4wMDJoMTcxLjUyNmMxMS44MTIgMCAyMS44OTcgOC41OTYgMjMuNzAzIDIwLjI2OSA3LjI1IDQ2LjgzNyAzOC40ODMgNjEuNzYgMzguMzE1IDEyMy43MzEtLjAwNyAyLjcyNC4xOTUgMTMuMjU0LjE5NSAxNiAwIDUwLjY1NC0yMi4xMjIgODEuNTc0LTcxLjI2MyA3Mi42LTkuMjk3IDE4LjU5Ny0zOS40ODYgMzAuNzM4LTYyLjMxNSAxNi40NS0yMS4xNzcgMjQuNjQ1LTUzLjg5NiAyMi42MzktNzAuOTQ0IDYuMjk5VjQ2Ny4yYzAgMjQuMTUtMjAuMjAxIDQ0LjgtNDMuODI2IDQ0LjgtMjMuMjgzIDAtNDMuODI2LTIxLjM1LTQzLjgyNi00NC44ek0xMTIgNzJWMjRjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDE5MmMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR2NDhjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDEzNmMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0em0yMTItMjRjMC0xMS4wNDYtOC45NTQtMjAtMjAtMjBzLTIwIDguOTU0LTIwIDIwIDguOTU0IDIwIDIwIDIwIDIwLTguOTU0IDIwLTIwelwiXSxcImhhbmQtcG9pbnQtbGVmdFwiOls1MTIsNTEyLFtdLFwiZjBhNVwiLFwiTTQ0LjggMTU1LjgyNmgxNDkuMjM0Yy01Ljg0MS04LjI0OC0xMC41Ny0xNi41NTgtMTQuMTUzLTI0LjkxOEMxNjYuMjQ4IDk5LjA5OCAxODkuNzc4IDYzLjk4NiAyMjQgNjRjMTguNjE2LjAwOCAzMi4yMDMgMTAuODk3IDQwIDI5LjA5MiAxMi4xMjIgMjguMjg2IDc4LjY0OCA2NC4zMjkgMTA3LjUzNCA3Ny4zMjMgMTcuODU3IDcuOTU2IDI4LjQ1MyAyNS40NzkgMjguNDY0IDQzLjg0NWwuMDAyLjAwMXYxNzEuNTI2YzAgMTEuODEyLTguNTk2IDIxLjg5Ny0yMC4yNjkgMjMuNzAzLTQ2LjgzNyA3LjI1LTYxLjc2IDM4LjQ4My0xMjMuNzMxIDM4LjMxNS0yLjcyNC0uMDA3LTEzLjI1NC4xOTUtMTYgLjE5NS01MC42NTQgMC04MS41NzQtMjIuMTIyLTcyLjYtNzEuMjYzLTE4LjU5Ny05LjI5Ny0zMC43MzgtMzkuNDg2LTE2LjQ1LTYyLjMxNS0yNC42NDUtMjEuMTc3LTIyLjYzOS01My44OTYtNi4yOTktNzAuOTQ0SDQ0LjhjLTI0LjE1IDAtNDQuOC0yMC4yMDEtNDQuOC00My44MjYgMC0yMy4yODMgMjEuMzUtNDMuODI2IDQ0LjgtNDMuODI2ek00NDAgMTc2aDQ4YzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHYxOTJjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0aC00OGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjIwMGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjR6bTI0IDIxMmMxMS4wNDYgMCAyMC04Ljk1NCAyMC0yMHMtOC45NTQtMjAtMjAtMjAtMjAgOC45NTQtMjAgMjAgOC45NTQgMjAgMjAgMjB6XCJdLFwiaGFuZC1wb2ludC1yaWdodFwiOls1MTIsNTEyLFtdLFwiZjBhNFwiLFwiTTUxMiAxOTkuNjUyYzAgMjMuNjI1LTIwLjY1IDQzLjgyNi00NC44IDQzLjgyNmgtOTkuODUxYzE2LjM0IDE3LjA0OCAxOC4zNDYgNDkuNzY2LTYuMjk5IDcwLjk0NCAxNC4yODggMjIuODI5IDIuMTQ3IDUzLjAxNy0xNi40NSA2Mi4zMTVDMzUzLjU3NCA0MjUuODc4IDMyMi42NTQgNDQ4IDI3MiA0NDhjLTIuNzQ2IDAtMTMuMjc2LS4yMDMtMTYtLjE5NS02MS45NzEuMTY4LTc2Ljg5NC0zMS4wNjUtMTIzLjczMS0zOC4zMTVDMTIwLjU5NiA0MDcuNjgzIDExMiAzOTcuNTk5IDExMiAzODUuNzg2VjIxNC4yNjFsLjAwMi0uMDAxYy4wMTEtMTguMzY2IDEwLjYwNy0zNS44ODkgMjguNDY0LTQzLjg0NSAyOC44ODYtMTIuOTk0IDk1LjQxMy00OS4wMzggMTA3LjUzNC03Ny4zMjMgNy43OTctMTguMTk0IDIxLjM4NC0yOS4wODQgNDAtMjkuMDkyIDM0LjIyMi0uMDE0IDU3Ljc1MiAzNS4wOTggNDQuMTE5IDY2LjkwOC0zLjU4MyA4LjM1OS04LjMxMiAxNi42Ny0xNC4xNTMgMjQuOTE4SDQ2Ny4yYzIzLjQ1IDAgNDQuOCAyMC41NDMgNDQuOCA0My44MjZ6TTk2IDIwMHYxOTJjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDI0Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRWMjAwYzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGg0OGMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR6TTY4IDM2OGMwLTExLjA0Ni04Ljk1NC0yMC0yMC0yMHMtMjAgOC45NTQtMjAgMjAgOC45NTQgMjAgMjAgMjAgMjAtOC45NTQgMjAtMjB6XCJdLFwiaGFuZC1wb2ludC11cFwiOlszODQsNTEyLFtdLFwiZjBhNlwiLFwiTTEzNS42NTIgMGMyMy42MjUgMCA0My44MjYgMjAuNjUgNDMuODI2IDQ0Ljh2OTkuODUxYzE3LjA0OC0xNi4zNCA0OS43NjYtMTguMzQ2IDcwLjk0NCA2LjI5OSAyMi44MjktMTQuMjg4IDUzLjAxNy0yLjE0NyA2Mi4zMTUgMTYuNDVDMzYxLjg3OCAxNTguNDI2IDM4NCAxODkuMzQ2IDM4NCAyNDBjMCAyLjc0Ni0uMjAzIDEzLjI3Ni0uMTk1IDE2IC4xNjggNjEuOTcxLTMxLjA2NSA3Ni44OTQtMzguMzE1IDEyMy43MzFDMzQzLjY4MyAzOTEuNDA0IDMzMy41OTkgNDAwIDMyMS43ODYgNDAwSDE1MC4yNjFsLS4wMDEtLjAwMmMtMTguMzY2LS4wMTEtMzUuODg5LTEwLjYwNy00My44NDUtMjguNDY0QzkzLjQyMSAzNDIuNjQ4IDU3LjM3NyAyNzYuMTIyIDI5LjA5MiAyNjQgMTAuODk3IDI1Ni4yMDMuMDA4IDI0Mi42MTYgMCAyMjRjLS4wMTQtMzQuMjIyIDM1LjA5OC01Ny43NTIgNjYuOTA4LTQ0LjExOSA4LjM1OSAzLjU4MyAxNi42NyA4LjMxMiAyNC45MTggMTQuMTUzVjQ0LjhjMC0yMy40NSAyMC41NDMtNDQuOCA0My44MjYtNDQuOHpNMTM2IDQxNmgxOTJjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0djQ4YzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNEgxMzZjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNHYtNDhjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0em0xNjggMjhjLTExLjA0NiAwLTIwIDguOTU0LTIwIDIwczguOTU0IDIwIDIwIDIwIDIwLTguOTU0IDIwLTIwLTguOTU0LTIwLTIwLTIwelwiXSxcImhhbmQtcG9pbnRlclwiOls0NDgsNTEyLFtdLFwiZjI1YVwiLFwiTTQ0OCAyNDB2OTZjMCAzLjA4NC0uMzU2IDYuMTU5LTEuMDYzIDkuMTYybC0zMiAxMzZDNDEwLjY4NiA0OTkuMjMgMzk0LjU2MiA1MTIgMzc2IDUxMkgxNjhhNDAuMDA0IDQwLjAwNCAwIDAgMS0zMi4zNS0xNi40NzNsLTEyNy45OTctMTc2Yy0xMi45OTMtMTcuODY2LTkuMDQzLTQyLjg4MyA4LjgyMi01NS44NzYgMTcuODY3LTEyLjk5NCA0Mi44ODQtOS4wNDMgNTUuODc3IDguODIzTDEwNCAzMTUuOTkyVjQwYzAtMjIuMDkxIDE3LjkwOC00MCA0MC00MHM0MCAxNy45MDkgNDAgNDB2MjAwaDh2LTQwYzAtMjIuMDkxIDE3LjkwOC00MCA0MC00MHM0MCAxNy45MDkgNDAgNDB2NDBoOHYtMjRjMC0yMi4wOTEgMTcuOTA4LTQwIDQwLTQwczQwIDE3LjkwOSA0MCA0MHYyNGg4YzAtMjIuMDkxIDE3LjkwOC00MCA0MC00MHM0MCAxNy45MDkgNDAgNDB6bS0yNTYgODBoLTh2OTZoOHYtOTZ6bTg4IDBoLTh2OTZoOHYtOTZ6bTg4IDBoLTh2OTZoOHYtOTZ6XCJdLFwiaGFuZC1yb2NrXCI6WzUxMiw1MTIsW10sXCJmMjU1XCIsXCJNNTEyIDEyOC43OWMwLTI2LjMyMi0yMC44NjEtNDguMzQ0LTQ3LjE4LTQ4Ljc4M0M0MzcuOTM1IDc5LjU1OCA0MTYgMTAxLjIxNyA0MTYgMTI4aC04Vjk2Ljc5YzAtMjYuMzIyLTIwLjg2MS00OC4zNDQtNDcuMTgtNDguNzgzQzMzMy45MzUgNDcuNTU4IDMxMiA2OS4yMTcgMzEyIDk2djMyaC04VjgwLjc5YzAtMjYuMzIyLTIwLjg2MS00OC4zNDQtNDcuMTgtNDguNzgzQzIyOS45MzUgMzEuNTU4IDIwOCA1My4yMTcgMjA4IDgwdjQ4aC04Vjk2Ljc5YzAtMjYuMzIyLTIwLjg2MS00OC4zNDQtNDcuMTgtNDguNzgzQzEyNS45MzUgNDcuNTU4IDEwNCA2OS4yMTcgMTA0IDk2djEzNmwtOC03LjExMVYxNzYuNzljMC0yNi4zMjItMjAuODYxLTQ4LjM0NC00Ny4xOC00OC43ODNDMjEuOTM1IDEyNy41NTggMCAxNDkuMjE3IDAgMTc2djY2LjQ0NWE5NS45OTggOTUuOTk4IDAgMCAwIDMyLjIyMSA3MS43NTFsMTExLjY2OCA5OS4yNjFBNDcuOTk5IDQ3Ljk5OSAwIDAgMSAxNjAgNDQ5LjMzM1Y0NTZjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDI0MGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTIuOTIxYTk2LjAxIDk2LjAxIDAgMCAxIDcuNTIzLTM3LjI1NGw0OC45NTQtMTE2LjI2NUE5Ni4wMDIgOTYuMDAyIDAgMCAwIDUxMiAyNjIuMzA2VjEyOC43OXpcIl0sXCJoYW5kLXNjaXNzb3JzXCI6WzUxMiw1MTIsW10sXCJmMjU3XCIsXCJNMjE2IDQ0MGMwLTIyLjA5MiAxNy45MDktNDAgNDAtNDB2LThoLTMyYy0yMi4wOTEgMC00MC0xNy45MDgtNDAtNDBzMTcuOTA5LTQwIDQwLTQwaDMydi04SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4czIxLjQ5LTQ4IDQ4LTQ4aDIwOHYtMTMuNTcybC0xNzcuNTUxLTY5Ljc0Yy0yNC42NzQtOS42OTQtMzYuODE4LTM3LjU1NS0yNy4xMjUtNjIuMjI4IDkuNjkzLTI0LjY3NCAzNy41NTQtMzYuODE3IDYyLjIyOC0yNy4xMjRsMTkwLjM0MiA3NC43NjUgMjQuODcyLTMxLjA5YzEyLjMwNi0xNS4zODEgMzMuOTc4LTE5LjUxNSA1MS4wODEtOS43NDFsMTEyIDY0QTQwLjAwMiA0MC4wMDIgMCAwIDEgNTEyIDE2OHYyNDBjMCAxOC41NjItMTIuNzcgMzQuNjg2LTMwLjgzOCAzOC45MzdsLTEzNiAzMkEzOS45ODIgMzkuOTgyIDAgMCAxIDMzNiA0ODBoLTgwYy0yMi4wOTEgMC00MC0xNy45MDgtNDAtNDB6XCJdLFwiaGFuZC1zcG9ja1wiOls1MTIsNTEyLFtdLFwiZjI1OVwiLFwiTTEwLjg3MiAzMTYuNTg1YzE1LjEzOS0xNi4wODYgNDAuNDU0LTE2Ljg1NCA1Ni41NDMtMS43MTNMMTI4IDM3MS44OTN2LTc5LjQwNUw4OC45OTUgMTIwLjg2NWMtNC44OTYtMjEuNTQyIDguNTk4LTQyLjk3NCAzMC4xNC00Ny44NyAyMS41NDktNC44OTQgNDIuOTc1IDguNTk5IDQ3Ljg3IDMwLjE0MUwyMDEuNzQ3IDI1Nmg5LjgzM0wxNjQuMDE2IDQ4Ljk2NmMtNC45NDYtMjEuNTMxIDguNDk4LTQyLjk5NCAzMC4wMjgtNDcuOTQgMjEuNTMyLTQuOTUgNDIuOTk0IDguNDk4IDQ3Ljk0IDMwLjAyOEwyOTMuNjY0IDI1NmgxNS4xMDVsNDguNDI1LTE5My43MDJjNS4zNTctMjEuNDMyIDI3LjA3NS0zNC40NjIgNDguNTA3LTI5LjEwNCAyMS40MzIgNS4zNTggMzQuNDYzIDI3LjA3NSAyOS4xMDQgNDguNTA3TDM5MS4yMzEgMjU2aDExLjA4bDMwLjc2OC0xMjkuMjY1YzUuMTE3LTIxLjQ5MSAyNi42ODUtMzQuNzY4IDQ4LjE3Ny0yOS42NDcgMjEuNDkxIDUuMTE3IDM0Ljc2NSAyNi42ODYgMjkuNjQ3IDQ4LjE3N2wtMzYuMjkyIDE1Mi40NjdBOTYuMDI0IDk2LjAyNCAwIDAgMCA0NzIgMzE5Ljk2N3Y0Mi4xMDJhOTYuMDAyIDk2LjAwMiAwIDAgMS0zLjk2IDI3LjI4N2wtMjYuMTc0IDg4LjI4N0M0MzUuODI1IDQ5OC4wMjIgNDE3LjEwMSA1MTIgMzk1Ljg0NiA1MTJIMTc5LjE3MmE0OC4wMDIgNDguMDAyIDAgMCAxLTMyLjg5OC0xMy4wNDZMMTIuNTg1IDM3My4xMjhjLTE2LjA4Ny0xNS4xNDEtMTYuODUzLTQwLjQ1Ni0xLjcxMy01Ni41NDN6XCJdLGhhbmRzOls2NDAsNTEyLFtdLFwiZjRjMlwiLFwiTTIwNC44IDIzMC40Yy0xMC42LTE0LjEtMzAuNy0xNy00NC44LTYuNC0xNC4xIDEwLjYtMTcgMzAuNy02LjQgNDQuOGwzOC4xIDUwLjhjNC44IDYuNCA0LjEgMTUuMy0xLjUgMjAuOWwtMTIuOCAxMi44Yy02LjcgNi43LTE3LjYgNi4yLTIzLjYtMS4xTDY0IDI0NC40Vjk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNzguMyAwIDk2djIxOC40YzAgMTAuOSAzLjcgMjEuNSAxMC41IDMwbDEwNC4xIDEzNC4zYzUgNi41IDguNCAxMy45IDEwLjQgMjEuNyAxLjggNi45IDguMSAxMS42IDE1LjMgMTEuNkgyNzJjOC44IDAgMTYtNy4yIDE2LTE2VjM4NGMwLTI3LjctOS01NC42LTI1LjYtNzYuOGwtNTcuNi03Ni44ek02MDggNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjE0OC40bC04OS44IDEwNy44Yy02IDcuMi0xNyA3LjctMjMuNiAxLjFsLTEyLjgtMTIuOGMtNS42LTUuNi02LjMtMTQuNS0xLjUtMjAuOWwzOC4xLTUwLjhjMTAuNi0xNC4xIDcuNy0zNC4yLTYuNC00NC44LTE0LjEtMTAuNi0zNC4yLTcuNy00NC44IDYuNGwtNTcuNiA3Ni44QzM2MSAzMjkuNCAzNTIgMzU2LjMgMzUyIDM4NHYxMTJjMCA4LjggNy4yIDE2IDE2IDE2aDEzMS43YzcuMSAwIDEzLjUtNC43IDE1LjMtMTEuNiAyLTcuOCA1LjQtMTUuMiAxMC40LTIxLjdsMTA0LjEtMTM0LjNjNi44LTguNSAxMC41LTE5LjEgMTAuNS0zMFY5NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl0sXCJoYW5kcy1oZWxwaW5nXCI6WzY0MCw1MTIsW10sXCJmNGM0XCIsXCJNNDg4IDE5MkgzMzZ2NTZjMCAzOS43LTMyLjMgNzItNzIgNzJzLTcyLTMyLjMtNzItNzJWMTI2LjRsLTY0LjkgMzlDMTA3LjggMTc2LjkgOTYgMTk3LjggOTYgMjIwLjJ2NDcuM2wtODAgNDYuMkMuNyAzMjIuNS00LjYgMzQyLjEgNC4zIDM1Ny40bDgwIDEzOC42YzguOCAxNS4zIDI4LjQgMjAuNSA0My43IDExLjdMMjMxLjQgNDQ4SDM2OGMzNS4zIDAgNjQtMjguNyA2NC02NGgxNmMxNy43IDAgMzItMTQuMyAzMi0zMnYtNjRoOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHYtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTE0Ny43LTM3LjRMNTU1LjcgMTZDNTQ2LjkuNyA1MjcuMy00LjUgNTEyIDQuM0w0MDguNiA2NEgzMDYuNGMtMTIgMC0yMy43IDMuNC0zMy45IDkuN0wyMzkgOTQuNmMtOS40IDUuOC0xNSAxNi4xLTE1IDI3LjFWMjQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDB2LTg4aDE4NGMzMC45IDAgNTYgMjUuMSA1NiA1NnYyOC41bDgwLTQ2LjJjMTUuMy04LjkgMjAuNS0yOC40IDExLjctNDMuN3pcIl0saGFuZHNoYWtlOls2NDAsNTEyLFtdLFwiZjJiNVwiLFwiTTQzNC43IDY0aC04NS45Yy04IDAtMTUuNyAzLTIxLjYgOC40bC05OC4zIDkwYy0uMS4xLS4yLjMtLjMuNC0xNi42IDE1LjYtMTYuMyA0MC41LTIuMSA1NiAxMi43IDEzLjkgMzkuNCAxNy42IDU2LjEgMi43LjEtLjEuMy0uMS40LS4ybDc5LjktNzMuMmM2LjUtNS45IDE2LjctNS41IDIyLjYgMSA2IDYuNSA1LjUgMTYuNi0xIDIyLjZsLTI2LjEgMjMuOUw1MDQgMzEzLjhjMi45IDIuNCA1LjUgNSA3LjkgNy43VjEyOGwtNTQuNi01NC42Yy01LjktNi0xNC4xLTkuNC0yMi42LTkuNHpNNTQ0IDEyOC4ydjIyMy45YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0VjEyOC4yaC05NnptNDggMjIzLjljLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnpNMCAzODRoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTI4LjJIMFYzODR6bTQ4LTYzLjljOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTYtMTYtNy4yLTE2LTE2YzAtOC45IDcuMi0xNiAxNi0xNnptNDM1LjkgMTguNkwzMzQuNiAyMTcuNWwtMzAgMjcuNWMtMjkuNyAyNy4xLTc1LjIgMjQuNS0xMDEuNy00LjQtMjYuOS0yOS40LTI0LjgtNzQuOSA0LjQtMTAxLjdMMjg5LjEgNjRoLTgzLjhjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40TDEyOCAxMjh2MjIzLjloMTguM2w5MC41IDgxLjljMjcuNCAyMi4zIDY3LjcgMTguMSA5MC05LjNsLjItLjIgMTcuOSAxNS41YzE1LjkgMTMgMzkuNCAxMC41IDUyLjMtNS40bDMxLjQtMzguNiA1LjQgNC40YzEzLjcgMTEuMSAzMy45IDkuMSA0NS00LjdsOS41LTExLjdjMTEuMi0xMy44IDkuMS0zMy45LTQuNi00NS4xelwiXSxoYXNodGFnOls0NDgsNTEyLFtdLFwiZjI5MlwiLFwiTTQ0MC42NjcgMTgyLjEwOWw3LjE0My00MGMxLjMxMy03LjM1NS00LjM0Mi0xNC4xMDktMTEuODEzLTE0LjEwOWgtNzQuODFsMTQuNjIzLTgxLjg5MUMzNzcuMTIzIDM4Ljc1NCAzNzEuNDY4IDMyIDM2My45OTcgMzJoLTQwLjYzMmExMiAxMiAwIDAgMC0xMS44MTMgOS44OTFMMjk2LjE3NSAxMjhIMTk3LjU0bDE0LjYyMy04MS44OTFDMjEzLjQ3NyAzOC43NTQgMjA3LjgyMiAzMiAyMDAuMzUgMzJoLTQwLjYzMmExMiAxMiAwIDAgMC0xMS44MTMgOS44OTFMMTMyLjUyOCAxMjhINTMuNDMyYTEyIDEyIDAgMCAwLTExLjgxMyA5Ljg5MWwtNy4xNDMgNDBDMzMuMTYzIDE4NS4yNDYgMzguODE4IDE5MiA0Ni4yODkgMTkyaDc0LjgxTDk4LjI0MiAzMjBIMTkuMTQ2YTEyIDEyIDAgMCAwLTExLjgxMyA5Ljg5MWwtNy4xNDMgNDBDLTEuMTIzIDM3Ny4yNDYgNC41MzIgMzg0IDEyLjAwMyAzODRoNzQuODFMNzIuMTkgNDY1Ljg5MUM3MC44NzcgNDczLjI0NiA3Ni41MzIgNDgwIDg0LjAwMyA0ODBoNDAuNjMyYTEyIDEyIDAgMCAwIDExLjgxMy05Ljg5MUwxNTEuODI2IDM4NGg5OC42MzRsLTE0LjYyMyA4MS44OTFDMjM0LjUyMyA0NzMuMjQ2IDI0MC4xNzggNDgwIDI0Ny42NSA0ODBoNDAuNjMyYTEyIDEyIDAgMCAwIDExLjgxMy05Ljg5MUwzMTUuNDcyIDM4NGg3OS4wOTZhMTIgMTIgMCAwIDAgMTEuODEzLTkuODkxbDcuMTQzLTQwYzEuMzEzLTcuMzU1LTQuMzQyLTE0LjEwOS0xMS44MTMtMTQuMTA5aC03NC44MWwyMi44NTctMTI4aDc5LjA5NmExMiAxMiAwIDAgMCAxMS44MTMtOS44OTF6TTI2MS44ODkgMzIwaC05OC42MzRsMjIuODU3LTEyOGg5OC42MzRsLTIyLjg1NyAxMjh6XCJdLGhkZDpbNTc2LDUxMixbXSxcImYwYTBcIixcIk01NzYgMzA0djk2YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDh2LTk2YzAtMjYuNTEgMjEuNDktNDggNDgtNDhoNDgwYzI2LjUxIDAgNDggMjEuNDkgNDggNDh6bS00OC04MGE3OS41NTcgNzkuNTU3IDAgMCAxIDMwLjc3NyA2LjE2NUw0NjIuMjUgODUuMzc0QTQ4LjAwMyA0OC4wMDMgMCAwIDAgNDIyLjMxMSA2NEgxNTMuNjg5YTQ4IDQ4IDAgMCAwLTM5LjkzOCAyMS4zNzRMMTcuMjIzIDIzMC4xNjVBNzkuNTU3IDc5LjU1NyAwIDAgMSA0OCAyMjRoNDgwem0tNDggOTZjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMnMxNC4zMjcgMzIgMzIgMzIgMzItMTQuMzI3IDMyLTMyLTE0LjMyNy0zMi0zMi0zMnptLTk2IDBjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMnMxNC4zMjcgMzIgMzIgMzIgMzItMTQuMzI3IDMyLTMyLTE0LjMyNy0zMi0zMi0zMnpcIl0saGVhZGluZzpbNTEyLDUxMixbXSxcImYxZGNcIixcIk00OTYgODBWNDhjMC04LjgzNy03LjE2My0xNi0xNi0xNkgzMjBjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2MzJjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgzNy42MjF2MTI4SDE1NC4zNzlWOTZIMTkyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZWNDhjMC04LjgzNy03LjE2My0xNi0xNi0xNkgzMmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMmMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDM3LjI3NXYzMjBIMzJjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2MzJjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgxNjBjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtMzJjMC04LjgzNy03LjE2My0xNi0xNi0xNmgtMzcuNjIxVjI4OEgzNTcuNjJ2MTI4SDMyMGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMmMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDE2MGM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di0zMmMwLTguODM3LTcuMTYzLTE2LTE2LTE2aC0zNy4yNzVWOTZINDgwYzguODM3IDAgMTYtNy4xNjMgMTYtMTZ6XCJdLGhlYWRwaG9uZXM6WzUxMiw1MTIsW10sXCJmMDI1XCIsXCJNMjU2IDMyQzExNC41MiAzMiAwIDE0Ni40OTYgMCAyODh2NDhhMzIgMzIgMCAwIDAgMTcuNjg5IDI4LjYyMmwxNC4zODMgNy4xOTFDMzQuMDgzIDQzMS45MDMgODMuNDIxIDQ4MCAxNDQgNDgwaDI0YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYyODBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0aC0yNGMtMzEuMzQyIDAtNTkuNjcxIDEyLjg3OS04MCAzMy42MjdWMjg4YzAtMTA1Ljg2OSA4Ni4xMzEtMTkyIDE5Mi0xOTJzMTkyIDg2LjEzMSAxOTIgMTkydjEuNjI3QzQyNy42NzEgMjY4Ljg3OSAzOTkuMzQyIDI1NiAzNjggMjU2aC0yNGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djE3NmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMjRjNjAuNTc5IDAgMTA5LjkxNy00OC4wOTggMTExLjkyOC0xMDguMTg3bDE0LjM4Mi03LjE5MUEzMiAzMiAwIDAgMCA1MTIgMzM2di00OGMwLTE0MS40NzktMTE0LjQ5Ni0yNTYtMjU2LTI1NnpcIl0sXCJoZWFkcGhvbmVzLWFsdFwiOls1MTIsNTEyLFtdLFwiZjU4ZlwiLFwiTTE2MCAyODhoLTE2Yy0zNS4zNSAwLTY0IDI4LjctNjQgNjQuMTJ2NjMuNzZjMCAzNS40MSAyOC42NSA2NC4xMiA2NCA2NC4xMmgxNmMxNy42NyAwIDMyLTE0LjM2IDMyLTMyLjA2VjMyMC4wNmMwLTE3LjcxLTE0LjMzLTMyLjA2LTMyLTMyLjA2em0yMDggMGgtMTZjLTE3LjY3IDAtMzIgMTQuMzUtMzIgMzIuMDZ2MTI3Ljg4YzAgMTcuNyAxNC4zMyAzMi4wNiAzMiAzMi4wNmgxNmMzNS4zNSAwIDY0LTI4LjcxIDY0LTY0LjEydi02My43NmMwLTM1LjQxLTI4LjY1LTY0LjEyLTY0LTY0LjEyek0yNTYgMzJDMTEyLjkxIDMyIDQuNTcgMTUxLjEzIDAgMjg4djExMmMwIDguODQgNy4xNiAxNiAxNiAxNmgxNmM4Ljg0IDAgMTYtNy4xNiAxNi0xNlYyODhjMC0xMTQuNjcgOTMuMzMtMjA3LjggMjA4LTIwNy44MiAxMTQuNjcuMDIgMjA4IDkzLjE1IDIwOCAyMDcuODJ2MTEyYzAgOC44NCA3LjE2IDE2IDE2IDE2aDE2YzguODQgMCAxNi03LjE2IDE2LTE2VjI4OEM1MDcuNDMgMTUxLjEzIDM5OS4wOSAzMiAyNTYgMzJ6XCJdLGhlYWRzZXQ6WzUxMiw1MTIsW10sXCJmNTkwXCIsXCJNMTkyIDIwOGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyaC0xNmMtMzUuMzUgMC02NCAyOC42NS02NCA2NHY0OGMwIDM1LjM1IDI4LjY1IDY0IDY0IDY0aDE2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWMjA4em0xNzYgMTQ0YzM1LjM1IDAgNjQtMjguNjUgNjQtNjR2LTQ4YzAtMzUuMzUtMjguNjUtNjQtNjQtNjRoLTE2Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjExMmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDE2ek0yNTYgMEMxMTMuMTggMCA0LjU4IDExOC44MyAwIDI1NnYxNmMwIDguODQgNy4xNiAxNiAxNiAxNmgxNmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMTZjMC0xMTQuNjkgOTMuMzEtMjA4IDIwOC0yMDhzMjA4IDkzLjMxIDIwOCAyMDhoLS4xMmMuMDggMi40My4xMiAxNjUuNzIuMTIgMTY1LjcyIDAgMjMuMzUtMTguOTMgNDIuMjgtNDIuMjggNDIuMjhIMzIwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDhoLTMyYy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4czIxLjQ5IDQ4IDQ4IDQ4aDE4MS43MmM0OS44NiAwIDkwLjI4LTQwLjQyIDkwLjI4LTkwLjI4VjI1NkM1MDcuNDIgMTE4LjgzIDM5OC44MiAwIDI1NiAwelwiXSxoZWFydDpbNTEyLDUxMixbXSxcImYwMDRcIixcIk00NjIuMyA2Mi42QzQwNy41IDE1LjkgMzI2IDI0LjMgMjc1LjcgNzYuMkwyNTYgOTYuNWwtMTkuNy0yMC4zQzE4Ni4xIDI0LjMgMTA0LjUgMTUuOSA0OS43IDYyLjZjLTYyLjggNTMuNi02Ni4xIDE0OS44LTkuOSAyMDcuOWwxOTMuNSAxOTkuOGMxMi41IDEyLjkgMzIuOCAxMi45IDQ1LjMgMGwxOTMuNS0xOTkuOGM1Ni4zLTU4LjEgNTMtMTU0LjMtOS44LTIwNy45elwiXSxoZWFydGJlYXQ6WzUxMiw1MTIsW10sXCJmMjFlXCIsXCJNMzIwLjIgMjQzLjhsLTQ5LjcgOTkuNGMtNiAxMi4xLTIzLjQgMTEuNy0yOC45LS42bC01Ni45LTEyNi4zLTMwIDcxLjdINjAuNmwxODIuNSAxODYuNWM3LjEgNy4zIDE4LjYgNy4zIDI1LjcgMEw0NTEuNCAyODhIMzQyLjNsLTIyLjEtNDQuMnpNNDczLjcgNzMuOWwtMi40LTIuNWMtNTEuNS01Mi42LTEzNS44LTUyLjYtMTg3LjQgMEwyNTYgMTAwbC0yNy45LTI4LjVjLTUxLjUtNTIuNy0xMzUuOS01Mi43LTE4Ny40IDBsLTIuNCAyLjRDLTEwLjQgMTIzLjctMTIuNSAyMDMgMzEgMjU2aDEwMi40bDM1LjktODYuMmM1LjQtMTIuOSAyMy42LTEzLjIgMjkuNC0uNGw1OC4yIDEyOS4zIDQ5LTk3LjljNS45LTExLjggMjIuNy0xMS44IDI4LjYgMGwyNy42IDU1LjJINDgxYzQzLjUtNTMgNDEuNC0xMzIuMy03LjMtMTgyLjF6XCJdLGhlbGljb3B0ZXI6WzY0MCw1MTIsW10sXCJmNTMzXCIsXCJNMzA0IDM4NGgyNzJjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMiAwLTEyMy43MS0xMDAuMjktMjI0LTIyNC0yMjRWNjRoMTc2YzguODQgMCAxNi03LjE2IDE2LTE2VjE2YzAtOC44NC03LjE2LTE2LTE2LTE2SDE0NGMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTc2djY0SDExMkw2OC44IDcwLjRDNjUuNzggNjYuMzcgNjEuMDMgNjQgNTYgNjRIMTYuMDFDNS42IDY0LTIuMDQgNzMuNzguNDkgODMuODhMMzIgMTkybDE2MCA2NCA4Ni40IDExNS4yQTMxLjk5MiAzMS45OTIgMCAwIDAgMzA0IDM4NHptMTEyLTE4OC40OUM0NzguNTUgMjA4LjMgNTI4LjAzIDI1Ny40NCA1NDAuNzkgMzIwSDQxNlYxOTUuNTF6bTIxOS4zNyAyNjMuM2wtMjIuMTUtMjIuMmMtNi4yNS02LjI2LTE2LjI0LTYuMS0yMi42NC4wMS03LjA5IDYuNzctMTMuODQgMTEuMjUtMjQuNjQgMTEuMjVIMjQwYy04Ljg0IDAtMTYgNy4xOC0xNiAxNi4wM3YzMi4wNmMwIDguODUgNy4xNiAxNi4wMyAxNiAxNi4wM2gzMjUuOTRjMTQuODggMCAzNS4zLS40NyA2OC40NS0yOS41MiA3LjAyLTYuMTQgNy41Ny0xNy4wNS45OC0yMy42NnpcIl0saGlnaGxpZ2h0ZXI6WzU0NCw1MTIsW10sXCJmNTkxXCIsXCJNMCA0NzkuOThMOTkuOTIgNTEybDM1LjQ1LTM1LjQ1LTY3LjA0LTY3LjA0TDAgNDc5Ljk4em0xMjQuNjEtMjQwLjAxYTM2LjU5MiAzNi41OTIgMCAwIDAtMTAuNzkgMzguMWwxMy4wNSA0Mi44My01MC45MyA1MC45NCA5Ni4yMyA5Ni4yMyA1MC44Ni01MC44NiA0Mi43NCAxMy4wOGMxMy43MyA0LjIgMjguNjUtLjAxIDM4LjE1LTEwLjc4bDM1LjU1LTQxLjY0LTE3My4zNC0xNzMuMzQtNDEuNTIgMzUuNDR6bTQwMy4zMS0xNjAuN2wtNjMuMi02My4yYy0yMC40OS0yMC40OS01My4zOC0yMS41Mi03NS4xMi0yLjM1TDE5MC41NSAxODMuNjhsMTY5Ljc3IDE2OS43OEw1MzAuMjcgMTU0LjRjMTkuMTgtMjEuNzQgMTguMTUtNTQuNjMtMi4zNS03NS4xM3pcIl0saGlzdG9yeTpbNTEyLDUxMixbXSxcImYxZGFcIixcIk01MDQgMjU1LjUzMWMuMjUzIDEzNi42NC0xMTEuMTggMjQ4LjM3Mi0yNDcuODIgMjQ4LjQ2OC01OS4wMTUuMDQyLTExMy4yMjMtMjAuNTMtMTU1LjgyMi01NC45MTEtMTEuMDc3LTguOTQtMTEuOTA1LTI1LjU0MS0xLjgzOS0zNS42MDdsMTEuMjY3LTExLjI2N2M4LjYwOS04LjYwOSAyMi4zNTMtOS41NTEgMzEuODkxLTEuOTg0QzE3My4wNjIgNDI1LjEzNSAyMTIuNzgxIDQ0MCAyNTYgNDQwYzEwMS43MDUgMCAxODQtODIuMzExIDE4NC0xODQgMC0xMDEuNzA1LTgyLjMxMS0xODQtMTg0LTE4NC00OC44MTQgMC05My4xNDkgMTguOTY5LTEyNi4wNjggNDkuOTMybDUwLjc1NCA1MC43NTRjMTAuMDggMTAuMDggMi45NDEgMjcuMzE0LTExLjMxMyAyNy4zMTRIMjRjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZWMzguNjI3YzAtMTQuMjU0IDE3LjIzNC0yMS4zOTMgMjcuMzE0LTExLjMxNGw0OS4zNzIgNDkuMzcyQzEyOS4yMDkgMzQuMTM2IDE4OS41NTIgOCAyNTYgOGMxMzYuODEgMCAyNDcuNzQ3IDExMC43OCAyNDggMjQ3LjUzMXptLTE4MC45MTIgNzguNzg0bDkuODIzLTEyLjYzYzguMTM4LTEwLjQ2MyA2LjI1My0yNS41NDItNC4yMS0zMy42NzlMMjg4IDI1Ni4zNDlWMTUyYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNGgtMTZjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYxMzUuNjUxbDY1LjQwOSA1MC44NzRjMTAuNDYzIDguMTM3IDI1LjU0MSA2LjI1MyAzMy42NzktNC4yMXpcIl0sXCJob2NrZXktcHVja1wiOls1MTIsNTEyLFtdLFwiZjQ1M1wiLFwiTTAgMTYwYzAtNTMgMTE0LjYtOTYgMjU2LTk2czI1NiA0MyAyNTYgOTYtMTE0LjYgOTYtMjU2IDk2UzAgMjEzIDAgMTYwem0wIDgyLjJWMzUyYzAgNTMgMTE0LjYgOTYgMjU2IDk2czI1Ni00MyAyNTYtOTZWMjQyLjJjLTExMy40IDgyLjMtMzk4LjUgODIuNC01MTIgMHpcIl0saG9tZTpbNTc2LDUxMixbXSxcImYwMTVcIixcIk00ODggMzEyLjdWNDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0SDM0OGMtNi42IDAtMTItNS40LTEyLTEyVjM1NmMwLTYuNi01LjQtMTItMTItMTJoLTcyYy02LjYgMC0xMiA1LjQtMTIgMTJ2MTEyYzAgNi42LTUuNCAxMi0xMiAxMkgxMTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjMxMi43YzAtMy42IDEuNi03IDQuNC05LjNsMTg4LTE1NC44YzQuNC0zLjYgMTAuOC0zLjYgMTUuMyAwbDE4OCAxNTQuOGMyLjcgMi4zIDQuMyA1LjcgNC4zIDkuM3ptODMuNi02MC45TDQ4OCAxODIuOVY0NC40YzAtNi42LTUuNC0xMi0xMi0xMmgtNTZjLTYuNiAwLTEyIDUuNC0xMiAxMlYxMTdsLTg5LjUtNzMuN2MtMTcuNy0xNC42LTQzLjMtMTQuNi02MSAwTDQuNCAyNTEuOGMtNS4xIDQuMi01LjggMTEuOC0xLjYgMTYuOWwyNS41IDMxYzQuMiA1LjEgMTEuOCA1LjggMTYuOSAxLjZsMjM1LjItMTkzLjdjNC40LTMuNiAxMC44LTMuNiAxNS4zIDBsMjM1LjIgMTkzLjdjNS4xIDQuMiAxMi43IDMuNSAxNi45LTEuNmwyNS41LTMxYzQuMi01LjIgMy40LTEyLjctMS43LTE2Ljl6XCJdLGhvc3BpdGFsOls0NDgsNTEyLFtdLFwiZjBmOFwiLFwiTTQ0OCA0OTJ2MjBIMHYtMjBjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgyMFYxMjBjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDg4VjI0YzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGgxMTJjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0djcyaDg4YzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHYzNjBoMjBjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnpNMzA4IDE5MmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyem0tMTY4IDY0aDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJ6bTEwNCAxMjhoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjg0aDY0di04NGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyem02NC05NmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyem0tMTE2IDEyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNDB6TTE4MiA5NmgyNnYyNmE2IDYgMCAwIDAgNiA2aDIwYTYgNiAwIDAgMCA2LTZWOTZoMjZhNiA2IDAgMCAwIDYtNlY3MGE2IDYgMCAwIDAtNi02aC0yNlYzOGE2IDYgMCAwIDAtNi02aC0yMGE2IDYgMCAwIDAtNiA2djI2aC0yNmE2IDYgMCAwIDAtNiA2djIwYTYgNiAwIDAgMCA2IDZ6XCJdLFwiaG9zcGl0YWwtYWx0XCI6WzU3Niw1MTIsW10sXCJmNDdkXCIsXCJNNTQ0IDk2SDQxNlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzNjhjMCA4LjggNy4yIDE2IDE2IDE2aDU0NGM4LjggMCAxNi03LjIgMTYtMTZWMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjAgNDM2YzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MHptMC0xMjhjMCA2LjYtNS40IDEyLTEyIDEyaC00MGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwem0xNjAgMTI4YzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MHptMC0xMjhjMCA2LjYtNS40IDEyLTEyIDEyaC00MGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwem0xNi0xNzBjMCAzLjMtMi43IDYtNiA2aC0yNnYyNmMwIDMuMy0yLjcgNi02IDZoLTIwYy0zLjMgMC02LTIuNy02LTZ2LTI2aC0yNmMtMy4zIDAtNi0yLjctNi02di0yMGMwLTMuMyAyLjctNiA2LTZoMjZWODZjMC0zLjMgMi43LTYgNi02aDIwYzMuMyAwIDYgMi43IDYgNnYyNmgyNmMzLjMgMCA2IDIuNyA2IDZ2MjB6bTE0NCAyOThjMCA2LjYtNS40IDEyLTEyIDEyaC00MGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwem0wLTEyOGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDB6XCJdLFwiaG9zcGl0YWwtc3ltYm9sXCI6WzUxMiw1MTIsW10sXCJmNDdlXCIsXCJNMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2czExNC42IDI1NiAyNTYgMjU2IDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDB6bTExMiAzNzZjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04di04OGgtOTZ2ODhjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjEzNmMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djg4aDk2di04OGMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djI0MHpcIl0sXCJob3QtdHViXCI6WzUxMiw1MTIsW10sXCJmNTkzXCIsXCJNNDE0LjIxIDE3Ny42NWMxLjAyIDguMjEgNy43NSAxNC4zNSAxNS43NSAxNC4zNWgxNi4xMmM5LjUxIDAgMTcuMDgtOC41NyAxNi0xOC4zNS00LjM0LTM5LjExLTIyLjQtNzQuNTMtNTAuMTMtOTcuMTYtMTcuMzctMTQuMTctMjguODItMzYuNzUtMzEuOTgtNjIuMTVDMzc4Ljk2IDYuMTQgMzcyLjIyIDAgMzY0LjIzIDBoLTE2LjEyYy05LjUxIDAtMTcuMDkgOC41Ny0xNiAxOC4zNSA0LjM0IDM5LjExIDIyLjQgNzQuNTMgNTAuMTMgOTcuMTYgMTcuMzYgMTQuMTcgMjguODIgMzYuNzUgMzEuOTcgNjIuMTR6bS0xMDggMGMxLjAyIDguMjEgNy43NSAxNC4zNSAxNS43NSAxNC4zNWgxNi4xMmM5LjUxIDAgMTcuMDgtOC41NyAxNi0xOC4zNS00LjM0LTM5LjExLTIyLjQtNzQuNTMtNTAuMTMtOTcuMTYtMTcuMzctMTQuMTctMjguODItMzYuNzUtMzEuOTgtNjIuMTVDMjcwLjk2IDYuMTQgMjY0LjIyIDAgMjU2LjIzIDBoLTE2LjEyYy05LjUxIDAtMTcuMDkgOC41Ny0xNiAxOC4zNSA0LjM0IDM5LjExIDIyLjQgNzQuNTMgNTAuMTMgOTcuMTYgMTcuMzYgMTQuMTcgMjguODIgMzYuNzUgMzEuOTcgNjIuMTR6TTQ4MCAyNTZIMjU2bC0xMTAuOTMtODMuMmE2My45OSA2My45OSAwIDAgMC0zOC40LTEyLjhINjRjLTM1LjM1IDAtNjQgMjguNjUtNjQgNjR2MjI0YzAgMzUuMzUgMjguNjUgNjQgNjQgNjRoMzg0YzM1LjM1IDAgNjQtMjguNjUgNjQtNjRWMjg4YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6TTEyOCA0NDBjMCA0LjQyLTMuNTggOC04IDhoLTE2Yy00LjQyIDAtOC0zLjU4LTgtOFYzMjhjMC00LjQyIDMuNTgtOCA4LThoMTZjNC40MiAwIDggMy41OCA4IDh2MTEyem05NiAwYzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LThWMzI4YzAtNC40MiAzLjU4LTggOC04aDE2YzQuNDIgMCA4IDMuNTggOCA4djExMnptOTYgMGMwIDQuNDItMy41OCA4LTggOGgtMTZjLTQuNDIgMC04LTMuNTgtOC04VjMyOGMwLTQuNDIgMy41OC04IDgtOGgxNmM0LjQyIDAgOCAzLjU4IDggOHYxMTJ6bTk2IDBjMCA0LjQyLTMuNTggOC04IDhoLTE2Yy00LjQyIDAtOC0zLjU4LTgtOFYzMjhjMC00LjQyIDMuNTgtOCA4LThoMTZjNC40MiAwIDggMy41OCA4IDh2MTEyek02NCAxMjhjMzUuMzUgMCA2NC0yOC42NSA2NC02NFM5OS4zNSAwIDY0IDAgMCAyOC42NSAwIDY0czI4LjY1IDY0IDY0IDY0elwiXSxob3RlbDpbNTc2LDUxMixbXSxcImY1OTRcIixcIk01NjAgNjRjOC44NCAwIDE2LTcuMTYgMTYtMTZWMTZjMC04Ljg0LTcuMTYtMTYtMTYtMTZIMTZDNy4xNiAwIDAgNy4xNiAwIDE2djMyYzAgOC44NCA3LjE2IDE2IDE2IDE2aDE1Ljk4djM4NEgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMjQwdi04MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djgwaDI0MGM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMzJjMC04Ljg0LTcuMTYtMTYtMTYtMTZoLTE2VjY0aDE2em0tMzA0IDQ0LjhjMC02LjQgNi40LTEyLjggMTIuOC0xMi44aDM4LjRjNi40IDAgMTIuOCA2LjQgMTIuOCAxMi44djM4LjRjMCA2LjQtNi40IDEyLjgtMTIuOCAxMi44aC0zOC40Yy02LjQgMC0xMi44LTYuNC0xMi44LTEyLjh2LTM4LjR6bTAgOTZjMC02LjQgNi40LTEyLjggMTIuOC0xMi44aDM4LjRjNi40IDAgMTIuOCA2LjQgMTIuOCAxMi44djM4LjRjMCA2LjQtNi40IDEyLjgtMTIuOCAxMi44aC0zOC40Yy02LjQgMC0xMi44LTYuNC0xMi44LTEyLjh2LTM4LjR6bS0xMjgtOTZjMC02LjQgNi40LTEyLjggMTIuOC0xMi44aDM4LjRjNi40IDAgMTIuOCA2LjQgMTIuOCAxMi44djM4LjRjMCA2LjQtNi40IDEyLjgtMTIuOCAxMi44aC0zOC40Yy02LjQgMC0xMi44LTYuNC0xMi44LTEyLjh2LTM4LjR6TTE3OS4yIDI1NmgtMzguNGMtNi40IDAtMTIuOC02LjQtMTIuOC0xMi44di0zOC40YzAtNi40IDYuNC0xMi44IDEyLjgtMTIuOGgzOC40YzYuNCAwIDEyLjggNi40IDEyLjggMTIuOHYzOC40YzAgNi40LTYuNCAxMi44LTEyLjggMTIuOHpNMTkyIDM4NGMwLTUzLjAyIDQyLjk4LTk2IDk2LTk2czk2IDQyLjk4IDk2IDk2SDE5MnptMjU2LTE0MC44YzAgNi40LTYuNCAxMi44LTEyLjggMTIuOGgtMzguNGMtNi40IDAtMTIuOC02LjQtMTIuOC0xMi44di0zOC40YzAtNi40IDYuNC0xMi44IDEyLjgtMTIuOGgzOC40YzYuNCAwIDEyLjggNi40IDEyLjggMTIuOHYzOC40em0wLTk2YzAgNi40LTYuNCAxMi44LTEyLjggMTIuOGgtMzguNGMtNi40IDAtMTIuOC02LjQtMTIuOC0xMi44di0zOC40YzAtNi40IDYuNC0xMi44IDEyLjgtMTIuOGgzOC40YzYuNCAwIDEyLjggNi40IDEyLjggMTIuOHYzOC40elwiXSxob3VyZ2xhc3M6WzM4NCw1MTIsW10sXCJmMjU0XCIsXCJNMzYwIDY0YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYyNGMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMjRDMTAuNzQ1IDAgMCAxMC43NDUgMCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjQgMCA5MC45NjUgNTEuMDE2IDE2Ny43MzQgMTIwLjg0MiAxOTJDNzUuMDE2IDI4MC4yNjYgMjQgMzU3LjAzNSAyNCA0NDhjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzM2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtMTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0IDAtOTAuOTY1LTUxLjAxNi0xNjcuNzM0LTEyMC44NDItMTkyQzMwOC45ODQgMjMxLjczNCAzNjAgMTU0Ljk2NSAzNjAgNjR6XCJdLFwiaG91cmdsYXNzLWVuZFwiOlszODQsNTEyLFtdLFwiZjI1M1wiLFwiTTM2MCA2NGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMjRjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDI0QzEwLjc0NSAwIDAgMTAuNzQ1IDAgMjR2MTZjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0IDAgOTAuOTY1IDUxLjAxNiAxNjcuNzM0IDEyMC44NDIgMTkyQzc1LjAxNiAyODAuMjY2IDI0IDM1Ny4wMzUgMjQgNDQ4Yy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2MTZjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDMzNmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTE2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNCAwLTkwLjk2NS01MS4wMTYtMTY3LjczNC0xMjAuODQyLTE5MkMzMDguOTg0IDIzMS43MzQgMzYwIDE1NC45NjUgMzYwIDY0ek0xOTIgMjA4Yy01Ny43ODcgMC0xMDQtNjYuNTE4LTEwNC0xNDRoMjA4YzAgNzcuOTQ1LTQ2LjUxIDE0NC0xMDQgMTQ0elwiXSxcImhvdXJnbGFzcy1oYWxmXCI6WzM4NCw1MTIsW10sXCJmMjUyXCIsXCJNMzYwIDBIMjRDMTAuNzQ1IDAgMCAxMC43NDUgMCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjQgMCA5MC45NjUgNTEuMDE2IDE2Ny43MzQgMTIwLjg0MiAxOTJDNzUuMDE2IDI4MC4yNjYgMjQgMzU3LjAzNSAyNCA0NDhjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzM2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtMTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0IDAtOTAuOTY1LTUxLjAxNi0xNjcuNzM0LTEyMC44NDItMTkyQzMwOC45ODQgMjMxLjczNCAzNjAgMTU0Ljk2NSAzNjAgNjRjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjI0YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHptLTc1LjA3OCAzODRIOTkuMDhjMTcuMDU5LTQ2Ljc5NyA1Mi4wOTYtODAgOTIuOTItODAgNDAuODIxIDAgNzUuODYyIDMzLjE5NiA5Mi45MjIgODB6bS4wMTktMjU2SDk5LjA3OEM5MS45ODggMTA4LjU0OCA4OCA4Ni43NDggODggNjRoMjA4YzAgMjIuODA1LTMuOTg3IDQ0LjU4Ny0xMS4wNTkgNjR6XCJdLFwiaG91cmdsYXNzLXN0YXJ0XCI6WzM4NCw1MTIsW10sXCJmMjUxXCIsXCJNMzYwIDBIMjRDMTAuNzQ1IDAgMCAxMC43NDUgMCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjQgMCA5MC45NjUgNTEuMDE2IDE2Ny43MzQgMTIwLjg0MiAxOTJDNzUuMDE2IDI4MC4yNjYgMjQgMzU3LjAzNSAyNCA0NDhjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzM2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtMTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0IDAtOTAuOTY1LTUxLjAxNi0xNjcuNzM0LTEyMC44NDItMTkyQzMwOC45ODQgMjMxLjczNCAzNjAgMTU0Ljk2NSAzNjAgNjRjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjI0YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHptLTY0IDQ0OEg4OGMwLTc3LjQ1OCA0Ni4yMDQtMTQ0IDEwNC0xNDQgNTcuNzg2IDAgMTA0IDY2LjUxNyAxMDQgMTQ0elwiXSxcImktY3Vyc29yXCI6WzI1Niw1MTIsW10sXCJmMjQ2XCIsXCJNMjU2IDUyLjA0OFYxMi4wNjVDMjU2IDUuNDk2IDI1MC43MjYuMTQ4IDI0NC4xNTguMDY2IDIxMS42MjEtLjM0NCAxNjYuNDY5LjAxMSAxMjggMzcuOTU5IDkwLjI2Ni43MzYgNDYuOTc5LS4xMTQgMTEuOTEzLjExNCA1LjMxOC4xNTcgMCA1LjUxOSAwIDEyLjExNHYzOS42NDVjMCA2LjY4NyA1LjQ1OCAxMi4wNzggMTIuMTQ1IDExLjk5OEMzOC4xMTEgNjMuNDQ3IDk2IDY3LjI0MyA5NiAxMTIuMTgyVjIyNEg2MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDM2djExMmMwIDQ0LjkzMi01Ni4wNzUgNDguMDMxLTgzLjk1IDQ3Ljk1OUM1LjQwNCA0NDcuOTQyIDAgNDUzLjMwNiAwIDQ1OS45NTJ2MzkuOTgzYzAgNi41NjkgNS4yNzQgMTEuOTE3IDExLjg0MiAxMS45OTkgMzIuNTM3LjQwOSA3Ny42ODkuMDU0IDExNi4xNTgtMzcuODk0IDM3LjczNCAzNy4yMjMgODEuMDIxIDM4LjA3MyAxMTYuMDg3IDM3Ljg0NSA2LjU5NS0uMDQzIDExLjkxMy01LjQwNSAxMS45MTMtMTJWNDYwLjI0YzAtNi42ODctNS40NTgtMTIuMDc4LTEyLjE0NS0xMS45OThDMjE3Ljg4OSA0NDguNTUzIDE2MCA0NDQuOTM5IDE2MCA0MDBWMjg4aDM2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTM2VjExMi4xODJjMC00NC45MzIgNTYuMDc1LTQ4LjIxMyA4My45NS00OC4xNDIgNi42NDYuMDE4IDEyLjA1LTUuMzQ2IDEyLjA1LTExLjk5MnpcIl0sXCJpZC1iYWRnZVwiOlszODQsNTEyLFtdLFwiZjJjMVwiLFwiTTMzNiAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xNDQgMzJoOTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZoLTk2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em00OCAxMjhjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjQtNjQtMjguNy02NC02NCAyOC43LTY0IDY0LTY0em0xMTIgMjM2LjhjMCAxMC42LTEwIDE5LjItMjIuNCAxOS4ySDEwMi40QzkwIDQxNiA4MCA0MDcuNCA4MCAzOTYuOHYtMTkuMmMwLTMxLjggMzAuMS01Ny42IDY3LjItNTcuNmg1YzEyLjMgNS4xIDI1LjcgOCAzOS44IDhzMjcuNi0yLjkgMzkuOC04aDVjMzcuMSAwIDY3LjIgMjUuOCA2Ny4yIDU3LjZ2MTkuMnpcIl0sXCJpZC1jYXJkXCI6WzU3Niw1MTIsW10sXCJmMmMyXCIsXCJNNTI4IDMySDQ4QzIxLjUgMzIgMCA1My41IDAgODB2MTZoNTc2VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0wIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0ODBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTI4SDB2MzA0em0zNTItMjMyYzAtNC40IDMuNi04IDgtOGgxNDRjNC40IDAgOCAzLjYgOCA4djE2YzAgNC40LTMuNiA4LTggOEgzNjBjLTQuNCAwLTgtMy42LTgtOHYtMTZ6bTAgNjRjMC00LjQgMy42LTggOC04aDE0NGM0LjQgMCA4IDMuNiA4IDh2MTZjMCA0LjQtMy42IDgtOCA4SDM2MGMtNC40IDAtOC0zLjYtOC04di0xNnptMCA2NGMwLTQuNCAzLjYtOCA4LThoMTQ0YzQuNCAwIDggMy42IDggOHYxNmMwIDQuNC0zLjYgOC04IDhIMzYwYy00LjQgMC04LTMuNi04LTh2LTE2ek0xNzYgMTkyYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0LTY0LTI4LjctNjQtNjQgMjguNy02NCA2NC02NHpNNjcuMSAzOTYuMkM3NS41IDM3MC41IDk5LjYgMzUyIDEyOCAzNTJoOC4yYzEyLjMgNS4xIDI1LjcgOCAzOS44IDhzMjcuNi0yLjkgMzkuOC04aDguMmMyOC40IDAgNTIuNSAxOC41IDYwLjkgNDQuMiAzLjIgOS45LTUuMiAxOS44LTE1LjYgMTkuOEg4Mi43Yy0xMC40IDAtMTguOC0xMC0xNS42LTE5Ljh6XCJdLFwiaWQtY2FyZC1hbHRcIjpbNTc2LDUxMixbXSxcImY0N2ZcIixcIk01MjggNjRIMzg0djk2SDE5MlY2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoNDgwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNMjg4IDIyNGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NC02NC0yOC43LTY0LTY0IDI4LjctNjQgNjQtNjR6bTkzLjMgMjI0SDE5NC43Yy0xMC40IDAtMTguOC0xMC0xNS42LTE5LjggOC4zLTI1LjYgMzIuNC00NC4yIDYwLjktNDQuMmg4LjJjMTIuMyA1LjEgMjUuNyA4IDM5LjggOHMyNy42LTIuOSAzOS44LThoOC4yYzI4LjQgMCA1Mi41IDE4LjUgNjAuOSA0NC4yIDMuMiA5LjgtNS4yIDE5LjgtMTUuNiAxOS44ek0zNTIgMzJjMC0xNy43LTE0LjMtMzItMzItMzJoLTY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5NmgxMjhWMzJ6XCJdLGltYWdlOls1MTIsNTEyLFtdLFwiZjAzZVwiLFwiTTQ2NCA0NDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWMTEyYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoNDE2YzI2LjUxIDAgNDggMjEuNDkgNDggNDh2Mjg4YzAgMjYuNTEtMjEuNDkgNDgtNDggNDh6TTExMiAxMjBjLTMwLjkyOCAwLTU2IDI1LjA3Mi01NiA1NnMyNS4wNzIgNTYgNTYgNTYgNTYtMjUuMDcyIDU2LTU2LTI1LjA3Mi01Ni01Ni01NnpNNjQgMzg0aDM4NFYyNzJsLTg3LjUxNS04Ny41MTVjLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NzEgMEwyMDggMzIwbC01NS41MTUtNTUuNTE1Yy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcxIDBMNjQgMzM2djQ4elwiXSxpbWFnZXM6WzU3Niw1MTIsW10sXCJmMzAyXCIsXCJNNDgwIDQxNnYxNmMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjE3NmMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDE2djIwOGMwIDQ0LjExMiAzNS44ODggODAgODAgODBoMzM2em05Ni04MFY4MGMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4SDE0NGMtMjYuNTEgMC00OCAyMS40OS00OCA0OHYyNTZjMCAyNi41MSAyMS40OSA0OCA0OCA0OGgzODRjMjYuNTEgMCA0OC0yMS40OSA0OC00OHpNMjU2IDEyOGMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4cy00OC0yMS40OS00OC00OCAyMS40OS00OCA0OC00OCA0OCAyMS40OSA0OCA0OHptLTk2IDE0NGw1NS41MTUtNTUuNTE1YzQuNjg2LTQuNjg2IDEyLjI4NC00LjY4NiAxNi45NzEgMEwyNzIgMjU2bDEzNS41MTUtMTM1LjUxNWM0LjY4Ni00LjY4NiAxMi4yODQtNC42ODYgMTYuOTcxIDBMNTEyIDIwOHYxMTJIMTYwdi00OHpcIl0saW5ib3g6WzU3Niw1MTIsW10sXCJmMDFjXCIsXCJNNTY3LjkzOCAyNDMuOTA4TDQ2Mi4yNSA4NS4zNzRBNDguMDAzIDQ4LjAwMyAwIDAgMCA0MjIuMzExIDY0SDE1My42ODlhNDggNDggMCAwIDAtMzkuOTM4IDIxLjM3NEw4LjA2MiAyNDMuOTA4QTQ3Ljk5NCA0Ny45OTQgMCAwIDAgMCAyNzAuNTMzVjQwMGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQ4MGMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjI3MC41MzNhNDcuOTk0IDQ3Ljk5NCAwIDAgMC04LjA2Mi0yNi42MjV6TTE2Mi4yNTIgMTI4aDI1MS40OTdsODUuMzMzIDEyOEgzNzZsLTMyIDY0SDIzMmwtMzItNjRINzYuOTE4bDg1LjMzNC0xMjh6XCJdLGluZGVudDpbNDQ4LDUxMixbXSxcImYwM2NcIixcIk0wIDg0VjQ0YzAtOC44MzcgNy4xNjMtMTYgMTYtMTZoNDE2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2NDBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNmMtOC44MzcgMC0xNi03LjE2My0xNi0xNnptMTc2IDE0NGgyNTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNzZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnpNMTYgNDg0aDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTE2MC0xMjhoMjU2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTc2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bS01Mi42ODctMTExLjMxM2wtOTYtOTUuOTg0QzE3LjI2NiAxMzguNjUyIDAgMTQ1Ljc3NiAwIDE2MC4wMTZ2MTkxLjk3NWMwIDE0LjMyOSAxNy4zMjUgMjEuMzA0IDI3LjMxMyAxMS4zMTNsOTYtOTUuOTkyYzYuMjQ5LTYuMjQ3IDYuMjQ5LTE2LjM3NyAwLTIyLjYyNXpcIl0saW5kdXN0cnk6WzUxMiw1MTIsW10sXCJmMjc1XCIsXCJNNDc1LjExNSAxNjMuNzgxTDMzNiAyNTIuMzA5di02OC4yOGMwLTE4LjkxNi0yMC45MzEtMzAuMzk5LTM2Ljg4NS0yMC4yNDhMMTYwIDI1Mi4zMDlWNTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDI0QzEwLjc0NSAzMiAwIDQyLjc0NSAwIDU2djQwMGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoNDY0YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxODQuMDI5YzAtMTguOTE3LTIwLjkzMS0zMC4zOTktMzYuODg1LTIwLjI0OHpcIl0saW5maW5pdHk6WzY0MCw1MTIsW10sXCJmNTM0XCIsXCJNNDcxLjEgOTZDNDA1IDk2IDM1My4zIDEzNy4zIDMyMCAxNzQuNiAyODYuNyAxMzcuMyAyMzUgOTYgMTY4LjkgOTYgNzUuOCA5NiAwIDE2Ny44IDAgMjU2czc1LjggMTYwIDE2OC45IDE2MGM2Ni4xIDAgMTE3LjgtNDEuMyAxNTEuMS03OC42IDMzLjMgMzcuMyA4NSA3OC42IDE1MS4xIDc4LjYgOTMuMSAwIDE2OC45LTcxLjggMTY4LjktMTYwUzU2NC4yIDk2IDQ3MS4xIDk2ek0xNjguOSAzMjBjLTQwLjIgMC03Mi45LTI4LjctNzIuOS02NHMzMi43LTY0IDcyLjktNjRjMzguMiAwIDczLjQgMzYuMSA5NCA2NC0yMC40IDI3LjYtNTUuOSA2NC05NCA2NHptMzAyLjIgMGMtMzguMiAwLTczLjQtMzYuMS05NC02NCAyMC40LTI3LjYgNTUuOS02NCA5NC02NCA0MC4yIDAgNzIuOSAyOC43IDcyLjkgNjRzLTMyLjcgNjQtNzIuOSA2NHpcIl0saW5mbzpbMTkyLDUxMixbXSxcImYxMjlcIixcIk0yMCA0MjQuMjI5aDIwVjI3OS43NzFIMjBjLTExLjA0NiAwLTIwLTguOTU0LTIwLTIwVjIxMmMwLTExLjA0NiA4Ljk1NC0yMCAyMC0yMGgxMTJjMTEuMDQ2IDAgMjAgOC45NTQgMjAgMjB2MjEyLjIyOWgyMGMxMS4wNDYgMCAyMCA4Ljk1NCAyMCAyMFY0OTJjMCAxMS4wNDYtOC45NTQgMjAtMjAgMjBIMjBjLTExLjA0NiAwLTIwLTguOTU0LTIwLTIwdi00Ny43NzFjMC0xMS4wNDYgOC45NTQtMjAgMjAtMjB6TTk2IDBDNTYuMjM1IDAgMjQgMzIuMjM1IDI0IDcyczMyLjIzNSA3MiA3MiA3MiA3Mi0zMi4yMzUgNzItNzJTMTM1Ljc2NCAwIDk2IDB6XCJdLFwiaW5mby1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYwNWFcIixcIk0yNTYgOEMxMTkuMDQzIDggOCAxMTkuMDgzIDggMjU2YzAgMTM2Ljk5NyAxMTEuMDQzIDI0OCAyNDggMjQ4czI0OC0xMTEuMDAzIDI0OC0yNDhDNTA0IDExOS4wODMgMzkyLjk1NyA4IDI1NiA4em0wIDExMGMyMy4xOTYgMCA0MiAxOC44MDQgNDIgNDJzLTE4LjgwNCA0Mi00MiA0Mi00Mi0xOC44MDQtNDItNDIgMTguODA0LTQyIDQyLTQyem01NiAyNTRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMmgtODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTJ2LTY0aC0xMmMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg2NGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjEwMGgxMmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0elwiXSxpdGFsaWM6WzMyMCw1MTIsW10sXCJmMDMzXCIsXCJNMjA0Ljc1OCA0MTZoLTMzLjg0OWw2Mi4wOTItMzIwaDQwLjcyNWExNiAxNiAwIDAgMCAxNS43MDQtMTIuOTM3bDYuMjQyLTMyQzI5Ny41OTkgNDEuMTg0IDI5MC4wMzQgMzIgMjc5Ljk2OCAzMkgxMjAuMjM1YTE2IDE2IDAgMCAwLTE1LjcwNCAxMi45MzdsLTYuMjQyIDMyQzk2LjM2MiA4Ni44MTYgMTAzLjkyNyA5NiAxMTMuOTkzIDk2aDMzLjg0NmwtNjIuMDkgMzIwSDQ2LjI3OGExNiAxNiAwIDAgMC0xNS43MDQgMTIuOTM1bC02LjI0NSAzMkMyMi40MDIgNDcwLjgxNSAyOS45NjcgNDgwIDQwLjAzNCA0ODBoMTU4LjQ3OWExNiAxNiAwIDAgMCAxNS43MDQtMTIuOTM1bDYuMjQ1LTMyYzEuOTI3LTkuODgtNS42MzgtMTkuMDY1LTE1LjcwNC0xOS4wNjV6XCJdLGpvaW50Ols2NDAsNTEyLFtdLFwiZjU5NVwiLFwiTTQ0NC4zNCAxODEuMWMyMi4zOCAxNS42OCAzNS42NiA0MS4xNiAzNS42NiA2OC41OVYyODBjMCA0LjQyIDMuNTggOCA4IDhoNDhjNC40MiAwIDgtMy41OCA4LTh2LTMwLjMxYzAtNDMuMjQtMjEuMDEtODMuNDEtNTYuMzQtMTA4LjA2QzQ2My44NSAxMjUuMDIgNDQ4IDk5LjM0IDQ0OCA3MC4zMVY4YzAtNC40Mi0zLjU4LTgtOC04aC00OGMtNC40MiAwLTggMy41OC04IDh2NjYuNGMwIDQzLjY5IDI0LjU2IDgxLjYzIDYwLjM0IDEwNi43ek0xOTQuOTcgMzU4Ljk4QzEyNi4wMyAzNzAuMDcgNTkuNjkgMzk0LjY5IDAgNDMyYzgzLjY1IDUyLjI4IDE4MC4zIDgwIDI3OC45NCA4MGg4OC41N0wyNTQuNzkgMzgwLjQ5Yy0xNC43NC0xNy4yLTM3LjQ1LTI1LjExLTU5LjgyLTIxLjUxek01NTMuMjggODcuMDljLTUuNjctMy44LTkuMjgtOS45Ni05LjI4LTE2Ljc4VjhjMC00LjQyLTMuNTgtOC04LThoLTQ4Yy00LjQyIDAtOCAzLjU4LTggOHY2Mi4zMWMwIDIyLjAyIDEwLjE3IDQzLjQxIDI4LjY0IDU1LjM5QzU1MC43OSAxNTMuMDQgNTc2IDE5OS41NCA1NzYgMjQ5LjY5VjI4MGMwIDQuNDIgMy41OCA4IDggOGg0OGM0LjQyIDAgOC0zLjU4IDgtOHYtMzAuMzFjMC02NS40NC0zMi40MS0xMjYuMTktODYuNzItMTYyLjZ6TTM2MC44OSAzNTIuMDVjLTM0LjQuMDYtODYuODEuMTUtODguMjEuMTdsMTE3LjggMTM3LjQzQTYzLjk4NyA2My45ODcgMCAwIDAgNDM5LjA3IDUxMmg4OC40NUw0MDkuNTcgMzc0LjRhNjMuOTU1IDYzLjk1NSAwIDAgMC00OC42OC0yMi4zNXpNNjE2IDM1Mkg0MzJsMTE3Ljk5IDEzNy42NUE2My45ODcgNjMuOTg3IDAgMCAwIDU5OC41OCA1MTJINjE2YzEzLjI1IDAgMjQtMTAuNzUgMjQtMjRWMzc2YzAtMTMuMjYtMTAuNzUtMjQtMjQtMjR6XCJdLGtleTpbNTEyLDUxMixbXSxcImYwODRcIixcIk01MTIgMTc2LjAwMUM1MTIgMjczLjIwMyA0MzMuMjAyIDM1MiAzMzYgMzUyYy0xMS4yMiAwLTIyLjE5LTEuMDYyLTMyLjgyNy0zLjA2OWwtMjQuMDEyIDI3LjAxNEEyMy45OTkgMjMuOTk5IDAgMCAxIDI2MS4yMjMgMzg0SDIyNHY0MGMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRoLTQwdjQwYzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNEgyNGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0di03OC4wNTljMC02LjM2NSAyLjUyOS0xMi40NyA3LjAyOS0xNi45NzFsMTYxLjgwMi0xNjEuODAyQzE2My4xMDggMjEzLjgxNCAxNjAgMTk1LjI3MSAxNjAgMTc2IDE2MCA3OC43OTggMjM4Ljc5Ny4wMDEgMzM1Ljk5OSAwIDQzMy40ODgtLjAwMSA1MTIgNzguNTExIDUxMiAxNzYuMDAxek0zMzYgMTI4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhzNDgtMjEuNDkgNDgtNDgtMjEuNDktNDgtNDgtNDgtNDggMjEuNDktNDggNDh6XCJdLGtleWJvYXJkOls1NzYsNTEyLFtdLFwiZjExY1wiLFwiTTUyOCA0NDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWMTEyYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoNDgwYzI2LjUxIDAgNDggMjEuNDkgNDggNDh2Mjg4YzAgMjYuNTEtMjEuNDkgNDgtNDggNDh6TTEyOCAxODB2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJINzZjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptOTYgMHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bS0zMzYgOTZ2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptOTYgMHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptLTMzNiA5NnYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMkg3NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTI4OCAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDE3MmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDIzMmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6XCJdLGtpc3M6WzQ5Niw1MTIsW10sXCJmNTk2XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptLTgwIDIzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTEzNiAxNTZjMCAxOS4yLTI4LjcgNDEuNS03MS41IDQ0LTguNS44LTEyLjEtMTEuOC0zLjYtMTUuNGwxNy03LjJjMTMtNS41IDIwLjgtMTMuNSAyMC44LTIxLjVzLTcuOC0xNi0yMC44LTIxLjVsLTE3LTcuMmMtNi0yLjUtNi4xLTEyLjIgMC0xNC44bDE3LTcuMmMxMy01LjUgMjAuOC0xMy41IDIwLjgtMjEuNXMtNy44LTE2LTIwLjgtMjEuNWwtMTctNy4yYy04LjYtMy42LTQuOC0xNi41IDMuNi0xNS40IDQyLjggMi41IDcxLjUgMjQuOCA3MS41IDQ0IDAgMTMtMTMuNCAyNy4zLTM1LjIgMzZDMjkwLjYgMzY4LjcgMzA0IDM4MyAzMDQgMzk2em0yNC0xNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyelwiXSxcImtpc3MtYmVhbVwiOls0OTYsNTEyLFtdLFwiZjU5N1wiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bS0zOSAyMTkuOWwtOS41LTE3Yy03LjctMTMuNy0xOS4yLTIxLjYtMzEuNS0yMS42cy0yMy44IDcuOS0zMS41IDIxLjZsLTkuNSAxN2MtNC4yIDcuNC0xNS42IDQtMTQuOS00LjUgMy4zLTQyLjEgMzIuMi03MS40IDU2LTcxLjRzNTIuNyAyOS4zIDU2IDcxLjRjLjUgOC41LTEwLjkgMTItMTUuMSA0LjV6TTMwNCAzOTZjMCAxOS4yLTI4LjcgNDEuNS03MS41IDQ0LTguNS44LTEyLjEtMTEuOC0zLjYtMTUuNGwxNy03LjJjMTMtNS41IDIwLjgtMTMuNSAyMC44LTIxLjVzLTcuOC0xNi0yMC44LTIxLjVsLTE3LTcuMmMtNi0yLjUtNi4xLTEyLjIgMC0xNC44bDE3LTcuMmMxMy01LjUgMjAuOC0xMy41IDIwLjgtMjEuNXMtNy44LTE2LTIwLjgtMjEuNWwtMTctNy4yYy04LjYtMy42LTQuOC0xNi41IDMuNi0xNS40IDQyLjggMi41IDcxLjUgMjQuOCA3MS41IDQ0IDAgMTMtMTMuNCAyNy4zLTM1LjIgMzZDMjkwLjYgMzY4LjcgMzA0IDM4MyAzMDQgMzk2em02NS0xNjguMWwtOS41LTE3Yy03LjctMTMuNy0xOS4yLTIxLjYtMzEuNS0yMS42cy0yMy44IDcuOS0zMS41IDIxLjZsLTkuNSAxN2MtNC4xIDcuMy0xNS42IDQtMTQuOS00LjUgMy4zLTQyLjEgMzIuMi03MS40IDU2LTcxLjRzNTIuNyAyOS4zIDU2IDcxLjRjLjUgOC41LTEwLjkgMTItMTUuMSA0LjV6XCJdLFwia2lzcy13aW5rLWhlYXJ0XCI6WzUwNCw1MTIsW10sXCJmNTk4XCIsXCJNNTAxLjEgNDAyLjVjLTgtMjAuOC0zMS41LTMxLjUtNTMuMS0yNS45bC04LjQgMi4yLTIuMy04LjRjLTUuOS0yMS40LTI3LTM2LjUtNDktMzMtMjUuMiA0LTQwLjYgMjguNi0zNCA1Mi42bDIyLjkgODIuNmMxLjUgNS4zIDcgOC41IDEyLjQgNy4xbDgzLTIxLjVjMjQuMS02LjMgMzcuNy0zMS44IDI4LjUtNTUuN3ptLTE3Ny42LTRjLTUuNi0yMC4zLTIuMy00MiA5LTU5LjcgMjkuNy00Ni4zIDk4LjctNDUuNSAxMjcuOCA0LjMgNi40LjEgMTIuNiAxLjQgMTguNiAyLjkgMTAuOS0yNy45IDE3LjEtNTguMiAxNy4xLTkwQzQ5NiAxMTkgMzg1IDggMjQ4IDhTMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4YzM1LjQgMCA2OC45LTcuNSA5OS40LTIwLjktLjMtLjctMjMuOS04NC42LTIzLjktODQuNnpNMTY4IDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTEyMCAxNTZjMCAxOS4yLTI4LjcgNDEuNS03MS41IDQ0LTguNS44LTEyLjEtMTEuOC0zLjYtMTUuNGwxNy03LjJjMTMtNS41IDIwLjgtMTMuNSAyMC44LTIxLjVzLTcuOC0xNi0yMC44LTIxLjVsLTE3LTcuMmMtNi0yLjUtNS43LTEyLjMgMC0xNC44bDE3LTcuMmMxMy01LjUgMjAuOC0xMy41IDIwLjgtMjEuNXMtNy44LTE2LTIwLjgtMjEuNWwtMTctNy4yYy04LjgtMy43LTQuNi0xNi42IDMuNi0xNS40IDQyLjggMi41IDcxLjUgMjQuOCA3MS41IDQ0IDAgMTMtMTMuNCAyNy4zLTM1LjIgMzZDMjc0LjYgMzY4LjcgMjg4IDM4MyAyODggMzk2em0xNi0xNzljLTguMyA3LjQtMjEuNi40LTE5LjgtMTAuOCA0LTI1LjIgMzQuMi00Mi4xIDU5LjktNDIuMVM0MDAgMTgxIDQwNCAyMDYuMmMxLjcgMTEuMS0xMS4zIDE4LjMtMTkuOCAxMC44bC05LjUtOC41Yy0xNC44LTEzLjItNDYuMi0xMy4yLTYxIDBMMzA0IDIxN3pcIl0sXCJraXdpLWJpcmRcIjpbNTc2LDUxMixbXSxcImY1MzVcIixcIk01NzUuODEgMjE3Ljk4QzU3Mi42NCAxNTcuNDEgNTE4LjI4IDExMiA0NTcuNjMgMTEyaC05LjM3Yy01Mi44MiAwLTEwNC4yNS0xNi4yNS0xNDcuNzQtNDYuMjQtNDEuOTktMjguOTYtOTYuMDQtNDEuNjItMTUzLjIxLTI4LjdDMTI5LjMgNDEuMTItLjA4IDc4LjI0IDAgMjI0Yy4wNCA3MC45NSAzOC42OCAxMzIuOCA5NS45OSAxNjYuMDFWNDY0YzAgOC44NCA3LjE2IDE2IDE2IDE2aDE2YzguODQgMCAxNi03LjE2IDE2LTE2di01NC4yNmMxNS4zNiAzLjk2IDMxLjQgNi4yNiA0OCA2LjI2IDUuNDQgMCAxMC42OC0uNzMgMTYtMS4xOFY0NjRjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTZjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTU5LjQzYzE0LjI0LTUuMDYgMjcuODgtMTEuMzkgNDAuMzQtMTkuNTFDMzQyLjA3IDM1NS4yNSAzOTMuODYgMzM2IDQ0OC40NiAzMzZjMjUuNDggMCAxNi4wMS0uMzEgMjMuMDUtLjc4bDc0LjQxIDEzNi40NGMyLjg2IDUuMjMgOC4zIDguMzQgMTQuMDUgOC4zNCAxLjMxIDAgMi42NC0uMTYgMy45NS0uNSA3LjA5LTEuOCAxMi4wNS04LjE5IDEyLjA1LTE1LjUgMCAwIC4xNC0yNDAuMjQtLjE2LTI0Ni4wMnpNNDYzLjk3IDI0OGMtMTMuMjUgMC0yNC0xMC43NS0yNC0yNCAwLTEzLjI2IDEwLjc1LTI0IDI0LTI0czI0IDEwLjc0IDI0IDI0YzAgMTMuMjUtMTAuNzUgMjQtMjQgMjR6bTgwIDE1My4yNWwtMzkuODYtNzMuMDhjMTUuMTItNS44MyAyOC43My0xNC42IDM5Ljg2LTI1Ljk4djk5LjA2elwiXSxsYW5ndWFnZTpbNjQwLDUxMixbXSxcImYxYWJcIixcIk0zMDQgNDE2SDI0Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRWMTIwYzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGgyODB2MzIwem0tMTIwLjY3Ni03Mi42MjJBMTIgMTIgMCAwIDAgMTk0LjgzOSAzNTJoMjIuODYzYzguMjIgMCAxNC4wMDctOC4wNzggMTEuMzYyLTE1Ljg2MUwxNzEuNjEgMTY3LjA4NWExMiAxMiAwIDAgMC0xMS4zNjItOC4xMzloLTMyLjQ4OWExMi4wMDEgMTIuMDAxIDAgMCAwLTExLjM2MiA4LjEzOUw1OC45NDIgMzM2LjEzOUM1Ni4yOTcgMzQzLjkyMiA2Mi4wODQgMzUyIDcwLjMwNCAzNTJoMjIuODA1YTEyIDEyIDAgMCAwIDExLjUzNS04LjY5M2w5LjExOC0zMS44MDdoNjAuMjExbDkuMzUxIDMxLjg3OHptLTM5LjA1MS0xNDAuNDJzNC4zMiAyMS4wNjEgNy44MyAzMy4yMWwxMC44IDM3LjUzMWgtMzguMDdsMTEuMDctMzcuNTMxYzMuNTEtMTIuMTUgNy44My0zMy4yMSA3LjgzLTMzLjIxaC41NHpNNjE2IDQxNkgzMzZWOTZoMjgwYzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHYyNzJjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0em0tMzYtMjI4aC02NHYtMTZjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtMTZjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MTZoLTY0Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjE2YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE0LjEwNmMtNi4yNjMgMTQuMjk5LTE2LjUxOCAyOC45NzItMzAuMDIzIDQzLjIwNi02LjU2LTYuODk4LTEyLjM5Ny0xMy45MS0xNy4zNjUtMjAuOTMzLTMuNjM5LTUuMTQ0LTEwLjU4NS02LjY3NS0xNS45OTUtMy40NDZsLTcuMjggNC4zNDYtNi40OTggMy44NzljLTUuOTU2IDMuNTU2LTcuNjkzIDExLjQyMS0zLjczNSAxNy4xMTcgNi4wNjUgOC43MjkgMTMuMDk4IDE3LjMzNiAyMC45ODQgMjUuNzI2LTguMTIyIDYuMjI2LTE2Ljg0MSAxMi4yNDQtMjYuMTAzIDE3Ljk2NC01LjUyMSAzLjQxLTcuMzgxIDEwLjU1Ni00LjE2MiAxNi4xOWw3Ljk0MSAxMy44OTZjMy4zNjIgNS44ODMgMTAuOTM1IDcuODI2IDE2LjcwNiA0LjI3NiAxMi43MzItNy44MzEgMjQuNTcxLTE2LjE3NSAzNS40NDMtMjQuODkxIDEwLjkxNyA4Ljc2MSAyMi43NjYgMTcuMTAyIDM1LjM5NiAyNC44ODEgNS43NzQgMy41NTYgMTMuMzUzIDEuNjE4IDE2LjcxNy00LjI3bDcuOTQ0LTEzLjkwM2MzLjIxMy01LjYyMyAxLjM3LTEyLjc2LTQuMTM1LTE2LjE3MWEzMTIuNzM3IDMxMi43MzcgMCAwIDEtMjYuMDYtMTguMDE5YzIxLjAyNC0yMi40MjUgMzUuNzY4LTQ2LjI4OSA0Mi43MTMtNjkuODVINTgwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTE2YzAtNi42MjUtNS4zNzMtMTEuOTk4LTEyLTExLjk5OHpcIl0sbGFwdG9wOls2NDAsNTEyLFtdLFwiZjEwOVwiLFwiTTUxMiA2NHYyNTZIMTI4VjY0aDM4NG0xNi02NEgxMTJDODUuNSAwIDY0IDIxLjUgNjQgNDh2Mjg4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQxNmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OHptMTAwIDQxNkgzODkuNWMtMyAwLTUuNSAyLjEtNS45IDUuMUMzODEuMiA0MzYuMyAzNjggNDQ4IDM1MiA0NDhoLTY0Yy0xNiAwLTI5LjItMTEuNy0zMS42LTI2LjktLjUtMi45LTMtNS4xLTUuOS01LjFIMTJjLTYuNiAwLTEyIDUuNC0xMiAxMnYzNmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg1NDRjMjYuNSAwIDQ4LTIxLjUgNDgtNDh2LTM2YzAtNi42LTUuNC0xMi0xMi0xMnpcIl0sbGF1Z2g6WzQ5Niw1MTIsW10sXCJmNTk5XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptODAgMTUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptLTE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptODggMjcyaC0xNmMtNzMuNCAwLTEzNC01NS0xNDIuOS0xMjYtMS4yLTkuNSA2LjMtMTggMTUuOS0xOGgyNzBjOS42IDAgMTcuMSA4LjQgMTUuOSAxOC04LjkgNzEtNjkuNSAxMjYtMTQyLjkgMTI2elwiXSxcImxhdWdoLWJlYW1cIjpbNDk2LDUxMixbXSxcImY1OWFcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0yNCAxOTkuNGMzLjMtNDIuMSAzMi4yLTcxLjQgNTYtNzEuNHM1Mi43IDI5LjMgNTYgNzEuNGMuNyA4LjYtMTAuOCAxMS45LTE0LjkgNC41bC05LjUtMTdjLTcuNy0xMy43LTE5LjItMjEuNi0zMS41LTIxLjZzLTIzLjggNy45LTMxLjUgMjEuNmwtOS41IDE3Yy00LjIgNy40LTE1LjggNC4xLTE1LjEtNC41em0tMTYwIDBjMy4zLTQyLjEgMzIuMi03MS40IDU2LTcxLjRzNTIuNyAyOS4zIDU2IDcxLjRjLjcgOC42LTEwLjggMTEuOS0xNC45IDQuNWwtOS41LTE3Yy03LjctMTMuNy0xOS4yLTIxLjYtMzEuNS0yMS42cy0yMy44IDcuOS0zMS41IDIxLjZsLTkuNSAxN2MtNC4zIDcuNC0xNS44IDQtMTUuMS00LjV6TTM5OC45IDMwNkMzOTAgMzc3IDMyOS40IDQzMiAyNTYgNDMyaC0xNmMtNzMuNCAwLTEzNC01NS0xNDIuOS0xMjYtMS4yLTkuNSA2LjMtMTggMTUuOS0xOGgyNzBjOS42IDAgMTcuMSA4LjQgMTUuOSAxOHpcIl0sXCJsYXVnaC1zcXVpbnRcIjpbNDk2LDUxMixbXSxcImY1OWJcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0zMy44IDE2MS43bDgwLTQ4YzExLjYtNi45IDI0IDcuNyAxNS40IDE4TDM0My42IDE4MGwzMy42IDQwLjNjOC43IDEwLjQtMy45IDI0LjgtMTUuNCAxOGwtODAtNDhjLTcuNy00LjctNy43LTE1LjkgMC0yMC42em0tMTYzLTMwYy04LjYtMTAuMyAzLjgtMjQuOSAxNS40LTE4bDgwIDQ4YzcuOCA0LjcgNy44IDE1LjkgMCAyMC42bC04MCA0OGMtMTEuNSA2LjgtMjQtNy42LTE1LjQtMThsMzMuNi00MC4zLTMzLjYtNDAuM3pNMzk4LjkgMzA2QzM5MCAzNzcgMzI5LjQgNDMyIDI1NiA0MzJoLTE2Yy03My40IDAtMTM0LTU1LTE0Mi45LTEyNi0xLjItOS41IDYuMy0xOCAxNS45LTE4aDI3MGM5LjYgMCAxNy4xIDguNCAxNS45IDE4elwiXSxcImxhdWdoLXdpbmtcIjpbNDk2LDUxMixbXSxcImY1OWNcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0yMC4xIDE5OC4xYzQtMjUuMiAzNC4yLTQyLjEgNTkuOS00Mi4xczU1LjkgMTYuOSA1OS45IDQyLjFjMS43IDExLjEtMTEuNCAxOC4zLTE5LjggMTAuOGwtOS41LTguNWMtMTQuOC0xMy4yLTQ2LjItMTMuMi02MSAwTDI4OCAyMTdjLTguNCA3LjQtMjEuNi4zLTE5LjktMTAuOXpNMTY4IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzJ6bTIzMC45IDE0NkMzOTAgMzc3IDMyOS40IDQzMiAyNTYgNDMyaC0xNmMtNzMuNCAwLTEzNC01NS0xNDIuOS0xMjYtMS4yLTkuNSA2LjMtMTggMTUuOS0xOGgyNzBjOS42IDAgMTcuMSA4LjQgMTUuOSAxOHpcIl0sbGVhZjpbNTc2LDUxMixbXSxcImYwNmNcIixcIk01NDYuMiA5LjdjLTUuNi0xMi41LTIxLjYtMTMtMjguMy0xLjJDNDg2LjkgNjIuNCA0MzEuNCA5NiAzNjggOTZoLTgwQzE4MiA5NiA5NiAxODIgOTYgMjg4YzAgNyAuOCAxMy43IDEuNSAyMC41QzE2MS4zIDI2Mi44IDI1My40IDIyNCAzODQgMjI0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2QzEzMi42IDI1NiAyNiA0MTAuMSAyLjQgNDY4Yy02LjYgMTYuMyAxLjIgMzQuOSAxNy41IDQxLjYgMTYuNCA2LjggMzUtMS4xIDQxLjgtMTcuMyAxLjUtMy42IDIwLjktNDcuOSA3MS45LTkwLjYgMzIuNCA0My45IDk0IDg1LjggMTc0LjkgNzcuMkM0NjUuNSA0NjcuNSA1NzYgMzI2LjcgNTc2IDE1NC4zYzAtNTAuMi0xMC44LTEwMi4yLTI5LjgtMTQ0LjZ6XCJdLGxlbW9uOls1MTIsNTEyLFtdLFwiZjA5NFwiLFwiTTQ4OS4wMzggMjIuOTYzQzQ2NS45NDQtLjEzIDQzNC42NDgtNS45MyA0MTMuOTQ3IDYuMTI5Yy01OC45MDYgMzQuMzEyLTE4MS4yNS01My4wNzctMzIxLjA3MyA4Ni43NDZTNDAuNDQxIDM1NS4wNDEgNi4xMjkgNDEzLjk0NWMtMTIuMDU5IDIwLjcwMi02LjI2IDUxLjk5OSAxNi44MzMgNzUuMDkzIDIzLjA5NSAyMy4wOTUgNTQuMzkyIDI4Ljg5MSA3NS4wOTUgMTYuODMyIDU4LjkwMS0zNC4zMSAxODEuMjQ2IDUzLjA3OSAzMjEuMDY4LTg2Ljc0M1M0NzEuNTYgMTU2Ljk2IDUwNS44NzEgOTguMDU2YzEyLjA1OS0yMC43MDIgNi4yNjEtNTEuOTk5LTE2LjgzMy03NS4wOTN6TTI0My44ODEgOTUuNTIyYy01OC4xODkgMTQuNTQ3LTEzMy44MDggOTAuMTU1LTE0OC4zNTggMTQ4LjM1OC0xLjgxNyA3LjI3LTguMzQyIDEyLjEyNC0xNS41MTEgMTIuMTI0LTEuMjg0IDAtMi41OS0uMTU2LTMuODkzLS40ODEtOC41NzItMi4xNDQtMTMuNzg0LTEwLjgzLTExLjY0Mi0xOS40MDNDODEuOTAxIDE2Ni40MjcgMTY2LjMxNiA4MS45MyAyMzYuMTE5IDY0LjQ3OGM4LjU3NS0yLjE0MyAxNy4yNjEgMy4wNjkgMTkuNDAzIDExLjY0MnMtMy4wNjkgMTcuMjU5LTExLjY0MSAxOS40MDJ6XCJdLFwibGVzcy10aGFuXCI6WzM4NCw1MTIsW10sXCJmNTM2XCIsXCJNMzY1LjQ2IDM1Ny43NEwxNDcuMDQgMjU1Ljg5bDIxOC40Ny0xMDEuODhjMTYuMDItNy40NyAyMi45NS0yNi41MSAxNS40OC00Mi41M2wtMTMuNTItMjlDMzYwIDY2LjQ2IDM0MC45NiA1OS41MyAzMjQuOTQgNjdMMTguNDggMjA5LjkxYTMyLjAxNCAzMi4wMTQgMCAwIDAtMTguNDggMjl2MzQuMjRjMCAxMi40NCA3LjIxIDIzLjc1IDE4LjQ4IDI5bDMwNi4zMSAxNDIuODNjMTYuMDYgNy40OSAzNS4xNS41NCA0Mi42NC0xNS41MmwxMy41Ni0yOS4wOGM3LjQ5LTE2LjA2LjU0LTM1LjE1LTE1LjUzLTQyLjY0elwiXSxcImxlc3MtdGhhbi1lcXVhbFwiOls0NDgsNTEyLFtdLFwiZjUzN1wiLFwiTTU0Ljk4IDIxNC4ybDMwMS40MSAxMTkuODdjMTguMzkgNi4wMyAzOC43MS0yLjU0IDQ1LjM4LTE5LjE1bDEyLjA5LTMwLjA4YzYuNjgtMTYuNjEtMi44Mi0zNC45Ny0yMS4yMS00MWwtMTc1LjQ0LTY4LjA1IDE3NS41Ni02OC4wOWMxOC4yOS02IDI3Ljc0LTI0LjI3IDIxLjEtNDAuNzlsLTEyLjAzLTI5LjkyYy02LjY0LTE2LjUzLTI2Ljg2LTI1LjA2LTQ1LjE1LTE5LjA2TDU0Ljk4IDEzNy44OUM0MS4yMSAxNDIuNDEgMzIgMTU0LjUgMzIgMTY4LjA3djE1Ljk2YzAgMTMuNTYgOS4yMSAyNS42NSAyMi45OCAzMC4xN3pNNDI0IDQwMEgyNGMtMTMuMjUgMC0yNCAxMC43NC0yNCAyNHY0OGMwIDEzLjI1IDEwLjc1IDI0IDI0IDI0aDQwMGMxMy4yNSAwIDI0LTEwLjc1IDI0LTI0di00OGMwLTEzLjI2LTEwLjc1LTI0LTI0LTI0elwiXSxcImxldmVsLWRvd24tYWx0XCI6WzMyMCw1MTIsW10sXCJmM2JlXCIsXCJNMzEzLjU1MyAzOTIuMzMxTDIwOS41ODcgNTA0LjMzNGMtOS40ODUgMTAuMjE0LTI1LjY3NiAxMC4yMjktMzUuMTc0IDBMNzAuNDM4IDM5Mi4zMzFDNTYuMjMyIDM3Ny4wMzEgNjcuMDYyIDM1MiA4OC4wMjUgMzUySDE1MlY4MEg2OC4wMjRhMTEuOTk2IDExLjk5NiAwIDAgMS04LjQ4NS0zLjUxNWwtNTYtNTZDLTQuMDIxIDEyLjkyNiAxLjMzMyAwIDEyLjAyNCAwSDIwOGMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR2MzI4aDYzLjk2NmMyMC44NzggMCAzMS44NTEgMjQuOTY5IDE3LjU4NyA0MC4zMzF6XCJdLFwibGV2ZWwtdXAtYWx0XCI6WzMyMCw1MTIsW10sXCJmM2JmXCIsXCJNMzEzLjU1MyAxMTkuNjY5TDIwOS41ODcgNy42NjZjLTkuNDg1LTEwLjIxNC0yNS42NzYtMTAuMjI5LTM1LjE3NCAwTDcwLjQzOCAxMTkuNjY5QzU2LjIzMiAxMzQuOTY5IDY3LjA2MiAxNjAgODguMDI1IDE2MEgxNTJ2MjcySDY4LjAyNGExMS45OTYgMTEuOTk2IDAgMCAwLTguNDg1IDMuNTE1bC01NiA1NkMtNC4wMjEgNDk5LjA3NCAxLjMzMyA1MTIgMTIuMDI0IDUxMkgyMDhjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjE2MGg2My45NjZjMjAuODc4IDAgMzEuODUxLTI0Ljk2OSAxNy41ODctNDAuMzMxelwiXSxcImxpZmUtcmluZ1wiOls1MTIsNTEyLFtdLFwiZjFjZFwiLFwiTTI1NiA4QzExOS4wMzMgOCA4IDExOS4wMzMgOCAyNTZzMTExLjAzMyAyNDggMjQ4IDI0OCAyNDgtMTExLjAzMyAyNDgtMjQ4UzM5Mi45NjcgOCAyNTYgOHptMTczLjY5NiAxMTkuNTU5bC02My4zOTkgNjMuMzk5Yy0xMC45ODctMTguNTU5LTI2LjY3LTM0LjI1Mi00NS4yNTUtNDUuMjU1bDYzLjM5OS02My4zOTlhMjE4LjM5NiAyMTguMzk2IDAgMCAxIDQ1LjI1NSA0NS4yNTV6TTI1NiAzNTJjLTUzLjAxOSAwLTk2LTQyLjk4MS05Ni05NnM0Mi45ODEtOTYgOTYtOTYgOTYgNDIuOTgxIDk2IDk2LTQyLjk4MSA5Ni05NiA5NnpNMTI3LjU1OSA4Mi4zMDRsNjMuMzk5IDYzLjM5OWMtMTguNTU5IDEwLjk4Ny0zNC4yNTIgMjYuNjctNDUuMjU1IDQ1LjI1NWwtNjMuMzk5LTYzLjM5OWEyMTguMzcyIDIxOC4zNzIgMCAwIDEgNDUuMjU1LTQ1LjI1NXpNODIuMzA0IDM4NC40NDFsNjMuMzk5LTYzLjM5OWMxMC45ODcgMTguNTU5IDI2LjY3IDM0LjI1MiA0NS4yNTUgNDUuMjU1bC02My4zOTkgNjMuMzk5YTIxOC4zOTYgMjE4LjM5NiAwIDAgMS00NS4yNTUtNDUuMjU1em0zMDIuMTM3IDQ1LjI1NWwtNjMuMzk5LTYzLjM5OWMxOC41NTktMTAuOTg3IDM0LjI1Mi0yNi42NyA0NS4yNTUtNDUuMjU1bDYzLjM5OSA2My4zOTlhMjE4LjQwMyAyMTguNDAzIDAgMCAxLTQ1LjI1NSA0NS4yNTV6XCJdLGxpZ2h0YnVsYjpbMzg0LDUxMixbXSxcImYwZWJcIixcIk0yNzIgNDI4djI4YzAgMTAuNDQ5LTYuNjggMTkuMzM0LTE2IDIyLjYyOVY0ODhjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0aC04MGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0di05LjM3MWMtOS4zMi0zLjI5NS0xNi0xMi4xOC0xNi0yMi42Mjl2LTI4YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTM2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ6bS0xNDMuMTA3LTQ0Yy05LjkwNyAwLTE4LjgyNi02LjA3OC0yMi4zNzYtMTUuMzI3QzY3LjY5NyAyNjcuNTQxIDE2IDI3Ny43MzEgMTYgMTc2IDE2IDc4LjgwMyA5NC44MDUgMCAxOTIgMHMxNzYgNzguODAzIDE3NiAxNzZjMCAxMDEuNzMxLTUxLjY5NyA5MS41NDEtOTAuNTE2IDE5Mi42NzMtMy41NSA5LjI0OS0xMi40NyAxNS4zMjctMjIuMzc2IDE1LjMyN0gxMjguODkzek0xMTIgMTc2YzAtNDQuMTEyIDM1Ljg4OC04MCA4MC04MCA4LjgzNyAwIDE2LTcuMTY0IDE2LTE2cy03LjE2My0xNi0xNi0xNmMtNjEuNzU3IDAtMTEyIDUwLjI0My0xMTIgMTEyIDAgOC44MzYgNy4xNjQgMTYgMTYgMTZzMTYtNy4xNjQgMTYtMTZ6XCJdLGxpbms6WzUxMiw1MTIsW10sXCJmMGMxXCIsXCJNMzI2LjYxMiAxODUuMzkxYzU5Ljc0NyA1OS44MDkgNTguOTI3IDE1NS42OTguMzYgMjE0LjU5LS4xMS4xMi0uMjQuMjUtLjM2LjM3bC02Ny4yIDY3LjJjLTU5LjI3IDU5LjI3LTE1NS42OTkgNTkuMjYyLTIxNC45NiAwLTU5LjI3LTU5LjI2LTU5LjI3LTE1NS43IDAtMjE0Ljk2bDM3LjEwNi0zNy4xMDZjOS44NC05Ljg0IDI2Ljc4Ni0zLjMgMjcuMjk0IDEwLjYwNi42NDggMTcuNzIyIDMuODI2IDM1LjUyNyA5LjY5IDUyLjcyMSAxLjk4NiA1LjgyMi41NjcgMTIuMjYyLTMuNzgzIDE2LjYxMmwtMTMuMDg3IDEzLjA4N2MtMjguMDI2IDI4LjAyNi0yOC45MDUgNzMuNjYtMS4xNTUgMTAxLjk2IDI4LjAyNCAyOC41NzkgNzQuMDg2IDI4Ljc0OSAxMDIuMzI1LjUxbDY3LjItNjcuMTljMjguMTkxLTI4LjE5MSAyOC4wNzMtNzMuNzU3IDAtMTAxLjgzLTMuNzAxLTMuNjk0LTcuNDI5LTYuNTY0LTEwLjM0MS04LjU2OWExNi4wMzcgMTYuMDM3IDAgMCAxLTYuOTQ3LTEyLjYwNmMtLjM5Ni0xMC41NjcgMy4zNDgtMjEuNDU2IDExLjY5OC0yOS44MDZsMjEuMDU0LTIxLjA1NWM1LjUyMS01LjUyMSAxNC4xODItNi4xOTkgMjAuNTg0LTEuNzMxYTE1Mi40ODIgMTUyLjQ4MiAwIDAgMSAyMC41MjIgMTcuMTk3ek00NjcuNTQ3IDQ0LjQ0OWMtNTkuMjYxLTU5LjI2Mi0xNTUuNjktNTkuMjctMjE0Ljk2IDBsLTY3LjIgNjcuMmMtLjEyLjEyLS4yNS4yNS0uMzYuMzctNTguNTY2IDU4Ljg5Mi01OS4zODcgMTU0Ljc4MS4zNiAyMTQuNTlhMTUyLjQ1NCAxNTIuNDU0IDAgMCAwIDIwLjUyMSAxNy4xOTZjNi40MDIgNC40NjggMTUuMDY0IDMuNzg5IDIwLjU4NC0xLjczMWwyMS4wNTQtMjEuMDU1YzguMzUtOC4zNSAxMi4wOTQtMTkuMjM5IDExLjY5OC0yOS44MDZhMTYuMDM3IDE2LjAzNyAwIDAgMC02Ljk0Ny0xMi42MDZjLTIuOTEyLTIuMDA1LTYuNjQtNC44NzUtMTAuMzQxLTguNTY5LTI4LjA3My0yOC4wNzMtMjguMTkxLTczLjYzOSAwLTEwMS44M2w2Ny4yLTY3LjE5YzI4LjIzOS0yOC4yMzkgNzQuMy0yOC4wNjkgMTAyLjMyNS41MSAyNy43NSAyOC4zIDI2Ljg3MiA3My45MzQtMS4xNTUgMTAxLjk2bC0xMy4wODcgMTMuMDg3Yy00LjM1IDQuMzUtNS43NjkgMTAuNzktMy43ODMgMTYuNjEyIDUuODY0IDE3LjE5NCA5LjA0MiAzNC45OTkgOS42OSA1Mi43MjEuNTA5IDEzLjkwNiAxNy40NTQgMjAuNDQ2IDI3LjI5NCAxMC42MDZsMzcuMTA2LTM3LjEwNmM1OS4yNzEtNTkuMjU5IDU5LjI3MS0xNTUuNjk5LjAwMS0yMTQuOTU5elwiXSxcImxpcmEtc2lnblwiOlszODQsNTEyLFtdLFwiZjE5NVwiLFwiTTM3MS45OTQgMjU2aC00OC4wMTlDMzE3LjY0IDI1NiAzMTIgMjYwLjkxMiAzMTIgMjY3LjI0NiAzMTIgMzY4IDIzMC4xNzkgNDE2IDE0NCA0MTZWMjU2Ljc4MWwxMzQuNjAzLTI5LjkxMkExMiAxMiAwIDAgMCAyODggMjE1LjE1NXYtNDAuOTc2YzAtNy42NzctNy4xMDktMTMuMzgtMTQuNjAzLTExLjcxNEwxNDQgMTkxLjIxOVYxNjAuNzhsMTM0LjYwMy0yOS45MTJBMTIgMTIgMCAwIDAgMjg4IDExOS4xNTRWNzguMTc5YzAtNy42NzctNy4xMDktMTMuMzgtMTQuNjAzLTExLjcxNEwxNDQgOTUuMjE5VjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJINzZjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NjguOTk3TDkuMzk3IDEyNS4xMzFBMTIgMTIgMCAwIDAgMCAxMzYuODQ1djQwLjk3NmMwIDcuNjc3IDcuMTA5IDEzLjM4IDE0LjYwMyAxMS43MTRMNjQgMTc4LjU1OHYzMC40MzlMOS4zOTcgMjIxLjEzMUExMiAxMiAwIDAgMCAwIDIzMi44NDV2NDAuOTc2YzAgNy42NzcgNy4xMDkgMTMuMzggMTQuNjAzIDExLjcxNEw2NCAyNzQuNTU4VjQ2OGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDc5LjU4M2MxMzQuMDkxIDAgMjIzLjI1NS03Ny44MzQgMjI4LjQwOC0yMTEuNTkyLjI2MS02Ljc4Mi01LjIxMS0xMi40MDgtMTEuOTk3LTEyLjQwOHpcIl0sbGlzdDpbNTEyLDUxMixbXSxcImYwM2FcIixcIk0xMjggMTE2Vjc2YzAtOC44MzcgNy4xNjMtMTYgMTYtMTZoMzUyYzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2NDBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNDRjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ6bTE2IDE3NmgzNTJjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNDRjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMCAxNjBoMzUyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTQ0Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6TTE2IDE0NGg2NGM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2VjY0YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZDNy4xNjMgNDggMCA1NS4xNjMgMCA2NHY2NGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg2NGM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di02NGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djY0YzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDY0YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTY0YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NjRjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnpcIl0sXCJsaXN0LWFsdFwiOls1MTIsNTEyLFtdLFwiZjAyMlwiLFwiTTQ2NCA0ODBINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDhWODBjMC0yNi41MSAyMS40OS00OCA0OC00OGg0MTZjMjYuNTEgMCA0OCAyMS40OSA0OCA0OHYzNTJjMCAyNi41MS0yMS40OSA0OC00OCA0OHpNMTI4IDEyMGMtMjIuMDkxIDAtNDAgMTcuOTA5LTQwIDQwczE3LjkwOSA0MCA0MCA0MCA0MC0xNy45MDkgNDAtNDAtMTcuOTA5LTQwLTQwLTQwem0wIDk2Yy0yMi4wOTEgMC00MCAxNy45MDktNDAgNDBzMTcuOTA5IDQwIDQwIDQwIDQwLTE3LjkwOSA0MC00MC0xNy45MDktNDAtNDAtNDB6bTAgOTZjLTIyLjA5MSAwLTQwIDE3LjkwOS00MCA0MHMxNy45MDkgNDAgNDAgNDAgNDAtMTcuOTA5IDQwLTQwLTE3LjkwOS00MC00MC00MHptMjg4LTEzNnYtMzJjMC02LjYyNy01LjM3My0xMi0xMi0xMkgyMDRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyMDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMCA5NnYtMzJjMC02LjYyNy01LjM3My0xMi0xMi0xMkgyMDRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyMDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMCA5NnYtMzJjMC02LjYyNy01LjM3My0xMi0xMi0xMkgyMDRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyMDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnpcIl0sXCJsaXN0LW9sXCI6WzUxMiw1MTIsW10sXCJmMGNiXCIsXCJNMy4yNjMgMTM5LjUyN2MwLTcuNDc3IDMuOTE3LTExLjU3MiAxMS41NzMtMTEuNTcyaDE1LjEzMVY4OC4wNzhjMC01LjE2My41MzQtMTAuNTAzLjUzNC0xMC41MDNoLS4zNTZzLTEuNzc5IDIuNjctMi44NDggMy43MzhjLTQuNDUxIDQuMjczLTEwLjUwNCA0LjQ1MS0xNS42NjYtMS4wNjhsLTUuNTE4LTYuMjMxYy01LjM0Mi01LjM0MS00Ljk4NC0xMS4yMTYuNTM0LTE2LjM3OWwyMS43Mi0xOS45MzhDMzIuODE1IDMzLjYwMiAzNi43MzIgMzIgNDIuNzg1IDMySDU0Ljg5YzcuNjU2IDAgMTEuNzQ5IDMuOTE2IDExLjc0OSAxMS41NzJ2ODQuMzg0aDE1LjQ4OGM3LjY1NSAwIDExLjU3MiA0LjA5NCAxMS41NzIgMTEuNTcydjguOTAxYzAgNy40NzctMy45MTcgMTEuNTcyLTExLjU3MiAxMS41NzJIMTQuODM2Yy03LjY1NiAwLTExLjU3My00LjA5NS0xMS41NzMtMTEuNTcydi04LjkwMnpNMi4yMTEgMzA0LjU5MWMwLTQ3LjI3OCA1MC45NTUtNTYuMzgzIDUwLjk1NS02OS4xNjUgMC03LjE4LTUuOTU0LTguNzU1LTkuMjgtOC43NTUtMy4xNTMgMC02LjQ3OSAxLjA1MS05LjQ1NSAzLjg1Mi01LjA3OSA0LjkwMy0xMC41MDcgNy4wMDQtMTYuMTExIDIuNDUxbC04LjU3OS02LjgyOWMtNS43NzktNC41NTMtNy4xOC05LjgwNS0yLjgwMy0xNS40MDlDMTMuNTkyIDIwMS45ODEgMjYuMDI1IDE5MiA0Ny4zODcgMTkyYzE5LjQzNyAwIDQ0LjQ3NiAxMC41MDYgNDQuNDc2IDM5LjU3MyAwIDM4LjM0Ny00Ni43NTMgNDYuNDAyLTQ4LjY3OSA1Ni45MDloMzkuMDQ5YzcuNTI5IDAgMTEuNTU3IDQuMDI3IDExLjU1NyAxMS4zODJ2OC43NTVjMCA3LjM1NC00LjAyOCAxMS4zODItMTEuNTU3IDExLjM4MmgtNjcuOTRjLTcuMDA1IDAtMTIuMDgzLTQuMDI4LTEyLjA4My0xMS4zODJ2LTQuMDI4ek01LjY1NCA0NTQuNjFsNS42MDMtOS4yOGMzLjg1My02LjY1NCA5LjEwNS03LjAwNCAxNS41ODQtMy4xNTIgNC45MDMgMi4xMDEgOS42MyAzLjE1MiAxNC4zNTkgMy4xNTIgMTAuMTU1IDAgMTQuMzU4LTMuNTAyIDE0LjM1OC04LjIzIDAtNi42NTQtNS42MDQtOS4xMDYtMTUuOTM0LTkuMTA2aC00LjcyOGMtNS45NTQgMC05LjI4LTIuMTAxLTEyLjI1OC03Ljg4bC0xLjA1LTEuOTI2Yy0yLjQ1MS00LjcyOC0xLjIyNi05LjgwNiAyLjgwMS0xNC44ODRsNS42MDQtNy4wMDRjNi44MjktOC40MDUgMTIuMjU3LTEzLjQ4MyAxMi4yNTctMTMuNDgzdi0uMzVzLTQuMjAzIDEuMDUxLTEyLjYwOCAxLjA1MUgxNi42ODVjLTcuNTMgMC0xMS4zODMtNC4wMjgtMTEuMzgzLTExLjM4MnYtOC43NTVjMC03LjUzIDMuODUzLTExLjM4MiAxMS4zODMtMTEuMzgyaDU4LjQ4NGM3LjUyOSAwIDExLjM4MiA0LjAyNyAxMS4zODIgMTEuMzgydjMuMzI3YzAgNS43NzgtMS40MDEgOS44MDYtNS4wNzkgMTQuMTgzbC0xNy41MDkgMjAuMTM3YzE5LjYxMSA1LjA3OCAyOC43MTYgMjAuNDg3IDI4LjcxNiAzNC44NDUgMCAyMS4zNjMtMTQuMzU4IDQ0LjEyNi00OC41MDMgNDQuMTI2LTE2LjYzNiAwLTI4LjE5Mi00LjcyOC0zNS44OTYtOS40NTUtNS43NzktNC4yMDItNi4zMDQtOS44MDUtMi42MjYtMTUuOTM0ek0xNDQgMTMyaDM1MmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2Vjc2YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTQ0Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDM1MmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE0NGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGgzNTJjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNDRjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnpcIl0sXCJsaXN0LXVsXCI6WzUxMiw1MTIsW10sXCJmMGNhXCIsXCJNOTYgOTZjMCAyNi41MS0yMS40OSA0OC00OCA0OFMwIDEyMi41MSAwIDk2czIxLjQ5LTQ4IDQ4LTQ4IDQ4IDIxLjQ5IDQ4IDQ4ek00OCAyMDhjLTI2LjUxIDAtNDggMjEuNDktNDggNDhzMjEuNDkgNDggNDggNDggNDgtMjEuNDkgNDgtNDgtMjEuNDktNDgtNDgtNDh6bTAgMTYwYy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4czIxLjQ5IDQ4IDQ4IDQ4IDQ4LTIxLjQ5IDQ4LTQ4LTIxLjQ5LTQ4LTQ4LTQ4em05Ni0yMzZoMzUyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZWNzZjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNDRjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMCAxNjBoMzUyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTQ0Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDM1MmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE0NGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2elwiXSxcImxvY2F0aW9uLWFycm93XCI6WzUxMiw1MTIsW10sXCJmMTI0XCIsXCJNNDQzLjY4MyA0LjUyOUwyNy44MTggMTk2LjQxOEMtMTguNzAyIDIxNy44ODktMy4zOSAyODggNDcuOTMzIDI4OEgyMjR2MTc1Ljk5M2MwIDUxLjcyNyA3MC4xNjEgNjYuNTI2IDkxLjU4MiAyMC4xMTVMNTA3LjM4IDY4LjIyNWMxOC45MDUtNDAuOTYxLTIzLjc1Mi04Mi4xMzMtNjMuNjk3LTYzLjY5NnpcIl0sbG9jazpbNDQ4LDUxMixbXSxcImYwMjNcIixcIk00MDAgMjI0aC0yNHYtNzJDMzc2IDY4LjIgMzA3LjggMCAyMjQgMFM3MiA2OC4yIDcyIDE1MnY3Mkg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MTkyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYyNzJjMC0yNi41LTIxLjUtNDgtNDgtNDh6bS0xMDQgMEgxNTJ2LTcyYzAtMzkuNyAzMi4zLTcyIDcyLTcyczcyIDMyLjMgNzIgNzJ2NzJ6XCJdLFwibG9jay1vcGVuXCI6WzU3Niw1MTIsW10sXCJmM2MxXCIsXCJNNDIzLjUgMEMzMzkuNS4zIDI3MiA2OS41IDI3MiAxNTMuNVYyMjRINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djE5MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjcyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4aC00OHYtNzEuMWMwLTM5LjYgMzEuNy03Mi41IDcxLjMtNzIuOSA0MC0uNCA3Mi43IDMyLjEgNzIuNyA3MnY4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHYtODBDNTc2IDY4IDUwNy41LS4zIDQyMy41IDB6XCJdLFwibG9uZy1hcnJvdy1hbHQtZG93blwiOlsyNTYsNTEyLFtdLFwiZjMwOVwiLFwiTTE2OCAzNDUuOTQxVjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTU2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjMwMS45NDFINDEuOTQxYy0yMS4zODIgMC0zMi4wOSAyNS44NTEtMTYuOTcxIDQwLjk3MWw4Ni4wNTkgODYuMDU5YzkuMzczIDkuMzczIDI0LjU2OSA5LjM3MyAzMy45NDEgMGw4Ni4wNTktODYuMDU5YzE1LjExOS0xNS4xMTkgNC40MTEtNDAuOTcxLTE2Ljk3MS00MC45NzFIMTY4elwiXSxcImxvbmctYXJyb3ctYWx0LWxlZnRcIjpbNDQ4LDUxMixbXSxcImYzMGFcIixcIk0xMzQuMDU5IDI5Nkg0MzZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNTZjMC02LjYyNy01LjM3My0xMi0xMi0xMkgxMzQuMDU5di00Ni4wNTljMC0yMS4zODItMjUuODUxLTMyLjA5LTQwLjk3MS0xNi45NzFMNy4wMjkgMjM5LjAyOWMtOS4zNzMgOS4zNzMtOS4zNzMgMjQuNTY5IDAgMzMuOTQxbDg2LjA1OSA4Ni4wNTljMTUuMTE5IDE1LjExOSA0MC45NzEgNC40MTEgNDAuOTcxLTE2Ljk3MVYyOTZ6XCJdLFwibG9uZy1hcnJvdy1hbHQtcmlnaHRcIjpbNDQ4LDUxMixbXSxcImYzMGJcIixcIk0zMTMuOTQxIDIxNkgxMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY1NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDMwMS45NDF2NDYuMDU5YzAgMjEuMzgyIDI1Ljg1MSAzMi4wOSA0MC45NzEgMTYuOTcxbDg2LjA1OS04Ni4wNTljOS4zNzMtOS4zNzMgOS4zNzMtMjQuNTY5IDAtMzMuOTQxbC04Ni4wNTktODYuMDU5Yy0xNS4xMTktMTUuMTE5LTQwLjk3MS00LjQxMS00MC45NzEgMTYuOTcxVjIxNnpcIl0sXCJsb25nLWFycm93LWFsdC11cFwiOlsyNTYsNTEyLFtdLFwiZjMwY1wiLFwiTTg4IDE2Ni4wNTlWNDY4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNTZjNi42MjcgMCAxMi01LjM3MyAxMi0xMlYxNjYuMDU5aDQ2LjA1OWMyMS4zODIgMCAzMi4wOS0yNS44NTEgMTYuOTcxLTQwLjk3MWwtODYuMDU5LTg2LjA1OWMtOS4zNzMtOS4zNzMtMjQuNTY5LTkuMzczLTMzLjk0MSAwbC04Ni4wNTkgODYuMDU5Yy0xNS4xMTkgMTUuMTE5LTQuNDExIDQwLjk3MSAxNi45NzEgNDAuOTcxSDg4elwiXSxcImxvdy12aXNpb25cIjpbNTc2LDUxMixbXSxcImYyYThcIixcIk01NjkuMzQ0IDIzMS42MzFDNTEyLjk2IDEzNS45NDkgNDA3LjgxIDcyIDI4OCA3MmMtMjguNDY4IDAtNTYuMTAyIDMuNjE5LTgyLjQ1MSAxMC40MDlMMTUyLjc3OCAxMC4yNGMtNy42MDEtMTAuODU4LTIyLjU2NC0xMy41LTMzLjQyMy01LjlsLTEzLjExNCA5LjE3OGMtMTAuODYgNy42MDEtMTMuNTAyIDIyLjU2Ni01LjkgMzMuNDI2bDQzLjEzMSA1OC4zOTVDODkuNDQ5IDEzMS43MyA0MC4yMjggMTc0LjY4MyA2LjY4MiAyMzEuNTgxYy0uMDEuMDE3LS4wMjMuMDMzLS4wMzQuMDUtOC43NjUgMTQuODc1LTguOTY0IDMzLjUyOCAwIDQ4LjczOSAzOC41IDY1LjMzMiA5OS43NDIgMTE1Ljg2MiAxNzIuODU5IDE0MS4zNDlMNTUuMzE2IDI0NC4zMDJBMjcyLjE5NCAyNzIuMTk0IDAgMCAxIDgzLjYxIDIwOC4zOWwxMTkuNCAxNzAuNThoLjAxbDQwLjYzIDU4LjA0YTMzMC4wNTUgMzMwLjA1NSAwIDAgMCA3OC45NCAxLjE3bC0xODkuOTgtMjcxLjRhMjc3LjYyOCAyNzcuNjI4IDAgMCAxIDM4Ljc3Ny0yMS41NjNsMjUxLjgzNiAzNTYuNTQ0YzcuNjAxIDEwLjg1OCAyMi41NjQgMTMuNDk5IDMzLjQyMyA1LjlsMTMuMTE0LTkuMTc4YzEwLjg2LTcuNjAxIDEzLjUwMi0yMi41NjcgNS45LTMzLjQyNmwtNDMuMTItNTguMzc3LS4wMDctLjAwOWM1Ny4xNjEtMjcuOTc4IDEwNC44MzUtNzIuMDQgMTM2LjgxLTEyNi4zMDFhNDcuOTM4IDQ3LjkzOCAwIDAgMCAuMDAxLTQ4LjczOXpNMzkwLjAyNiAzNDUuOTRsLTE5LjA2Ni0yNy4yM2MyNC42ODItMzIuNTY3IDI3LjcxMS03Ni4zNTMgOC44LTExMS42OHYuMDNjMCAyMy42NS0xOS4xNyA0Mi44Mi00Mi44MiA0Mi44Mi0yMy44MjggMC00Mi44Mi0xOS4zNDktNDIuODItNDIuODIgMC0yMy42NSAxOS4xNy00Mi44MiA0Mi44Mi00Mi44MmguMDNjLTI0Ljc1LTEzLjI0OS01My41MjItMTUuNjQzLTc5LjUxLTcuNjhsLTE5LjA2OC0yNy4yMzdDMjUzLjc1OCAxMjMuMzA2IDI3MC40ODggMTIwIDI4OCAxMjBjNzUuMTYyIDAgMTM2IDYwLjgyNiAxMzYgMTM2IDAgMzQuNTA0LTEyLjgzMyA2NS45NzUtMzMuOTc0IDg5Ljk0elwiXSxcImx1Z2dhZ2UtY2FydFwiOls2NDAsNTEyLFtdLFwiZjU5ZFwiLFwiTTIyNCAzMjBoMzJWOTZoLTMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjE2MGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyem0zNTItMzJWMTI4YzAtMTcuNjctMTQuMzMtMzItMzItMzJoLTMydjIyNGgzMmMxNy42NyAwIDMyLTE0LjMzIDMyLTMyem00OCA5NkgxMjhWMTZjMC04Ljg0LTcuMTYtMTYtMTYtMTZIMTZDNy4xNiAwIDAgNy4xNiAwIDE2djMyYzAgOC44NCA3LjE2IDE2IDE2IDE2aDQ4djM2OGMwIDguODQgNy4xNiAxNiAxNiAxNmg4Mi45NGMtMS43OSA1LjAzLTIuOTQgMTAuMzYtMi45NCAxNiAwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4czQ4LTIxLjQ5IDQ4LTQ4YzAtNS42NC0xLjE1LTEwLjk3LTIuOTQtMTZoMTk3Ljg4Yy0xLjc5IDUuMDMtMi45NCAxMC4zNi0yLjk0IDE2IDAgMjYuNTEgMjEuNDkgNDggNDggNDhzNDgtMjEuNDkgNDgtNDhjMC01LjY0LTEuMTUtMTAuOTctMi45NC0xNkg2MjRjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2ek00ODAgOTZWNDhjMC0yNi41MS0yMS40OS00OC00OC00OGgtOTZjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2MjcyaDE5MlY5NnptLTQ4IDBoLTk2VjQ4aDk2djQ4elwiXSxtYWdpYzpbNTEyLDUxMixbXSxcImYwZDBcIixcIk0yMjQgOTZsMTYtMzIgMzItMTYtMzItMTYtMTYtMzItMTYgMzItMzIgMTYgMzIgMTYgMTYgMzJ6TTgwIDE2MGwyNi42Ni01My4zM0wxNjAgODBsLTUzLjM0LTI2LjY3TDgwIDAgNTMuMzQgNTMuMzMgMCA4MGw1My4zNCAyNi42N0w4MCAxNjB6bTM1MiAxMjhsLTI2LjY2IDUzLjMzTDM1MiAzNjhsNTMuMzQgMjYuNjdMNDMyIDQ0OGwyNi42Ni01My4zM0w1MTIgMzY4bC01My4zNC0yNi42N0w0MzIgMjg4em03MC42Mi0xOTMuNzdMNDE3Ljc3IDkuMzhDNDExLjUzIDMuMTIgNDAzLjM0IDAgMzk1LjE1IDBjLTguMTkgMC0xNi4zOCAzLjEyLTIyLjYzIDkuMzhMOS4zOCAzNzIuNTJjLTEyLjUgMTIuNS0xMi41IDMyLjc2IDAgNDUuMjVsODQuODUgODQuODVjNi4yNSA2LjI1IDE0LjQ0IDkuMzcgMjIuNjIgOS4zNyA4LjE5IDAgMTYuMzgtMy4xMiAyMi42My05LjM3bDM2My4xNC0zNjMuMTVjMTIuNS0xMi40OCAxMi41LTMyLjc1IDAtNDUuMjR6TTM1OS40NSAyMDMuNDZsLTUwLjkxLTUwLjkxIDg2LjYtODYuNiA1MC45MSA1MC45MS04Ni42IDg2LjZ6XCJdLG1hZ25ldDpbNTEyLDUxMixbXSxcImYwNzZcIixcIk0xNjQuMSAxNjBIMTJjLTYuNiAwLTEyLTUuNC0xMi0xMlY2OGMwLTE5LjkgMTYuMS0zNiAzNi0zNmgxMDRjMTkuOSAwIDM2IDE2LjEgMzYgMzZ2ODBjLjEgNi42LTUuMyAxMi0xMS45IDEyem0zNDgtMTJWNjcuOWMwLTE5LjktMTYuMS0zNi0zNi0zNmgtMTA0Yy0xOS45IDAtMzYgMTYuMS0zNiAzNnY4MGMwIDYuNiA1LjQgMTIgMTIgMTJoMTUyYzYuNi4xIDEyLTUuMyAxMi0xMS45em0tMTY0IDQ0Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NTJjMCAxMjguMS0xNjAgMTI3LjktMTYwIDB2LTUyYzAtNi42LTUuNC0xMi0xMi0xMmgtMTUyYy02LjcgMC0xMiA1LjQtMTIgMTIuMS4xIDIxLjQuNiA0MC4zIDAgNTMuM0MuMSA0MDggMTM2LjMgNTA0IDI1Ni45IDUwNCAzNzcuNSA1MDQgNTEyIDQwOCA1MTIgMjU3LjNjLS42LTEyLjgtLjItMzMgMC01My4yIDAtNi43LTUuMy0xMi4xLTEyLTEyLjFIMzQ4LjF6XCJdLG1hbGU6WzE5Miw1MTIsW10sXCJmMTgzXCIsXCJNOTYgMGMzNS4zNDYgMCA2NCAyOC42NTQgNjQgNjRzLTI4LjY1NCA2NC02NCA2NC02NC0yOC42NTQtNjQtNjRTNjAuNjU0IDAgOTYgMG00OCAxNDRoLTExLjM2Yy0yMi43MTEgMTAuNDQzLTQ5LjU5IDEwLjg5NC03My4yOCAwSDQ4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djEzNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTZ2MTM2YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGg2NGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMzUyaDE2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxOTJjMC0yNi41MS0yMS40OS00OC00OC00OHpcIl0sbWFwOls1NzYsNTEyLFtdLFwiZjI3OVwiLFwiTTAgMTE3LjY2djM0Ni4zMmMwIDExLjMyIDExLjQzIDE5LjA2IDIxLjk0IDE0Ljg2TDE2MCA0MTZWMzJMMjAuMTIgODcuOTVBMzIuMDA2IDMyLjAwNiAwIDAgMCAwIDExNy42NnpNMTkyIDQxNmwxOTIgNjRWOTZMMTkyIDMydjM4NHpNNTU0LjA2IDMzLjE2TDQxNiA5NnYzODRsMTM5Ljg4LTU1Ljk1QTMxLjk5NiAzMS45OTYgMCAwIDAgNTc2IDM5NC4zNFY0OC4wMmMwLTExLjMyLTExLjQzLTE5LjA2LTIxLjk0LTE0Ljg2elwiXSxcIm1hcC1tYXJrZWRcIjpbNTc2LDUxMixbXSxcImY1OWZcIixcIk0yODggMGMtNjkuNTkgMC0xMjYgNTYuNDEtMTI2IDEyNiAwIDU2LjI2IDgyLjM1IDE1OC44IDExMy45IDE5Ni4wMiA2LjM5IDcuNTQgMTcuODIgNy41NCAyNC4yIDBDMzMxLjY1IDI4NC44IDQxNCAxODIuMjYgNDE0IDEyNiA0MTQgNTYuNDEgMzU3LjU5IDAgMjg4IDB6TTIwLjEyIDIxNS45NUEzMi4wMDYgMzIuMDA2IDAgMCAwIDAgMjQ1LjY2djI1MC4zMmMwIDExLjMyIDExLjQzIDE5LjA2IDIxLjk0IDE0Ljg2TDE2MCA0NDhWMjE0LjkyYy04Ljg0LTE1Ljk4LTE2LjA3LTMxLjU0LTIxLjI1LTQ2LjQyTDIwLjEyIDIxNS45NXpNMjg4IDM1OS42N2MtMTQuMDcgMC0yNy4zOC02LjE4LTM2LjUxLTE2Ljk2LTE5LjY2LTIzLjItNDAuNTctNDkuNjItNTkuNDktNzYuNzJ2MTgybDE5MiA2NFYyNjZjLTE4LjkyIDI3LjA5LTM5LjgyIDUzLjUyLTU5LjQ5IDc2LjcyLTkuMTMgMTAuNzctMjIuNDQgMTYuOTUtMzYuNTEgMTYuOTV6bTI2Ni4wNi0xOTguNTFMNDE2IDIyNHYyODhsMTM5Ljg4LTU1Ljk1QTMxLjk5NiAzMS45OTYgMCAwIDAgNTc2IDQyNi4zNFYxNzYuMDJjMC0xMS4zMi0xMS40My0xOS4wNi0yMS45NC0xNC44NnpcIl0sXCJtYXAtbWFya2VkLWFsdFwiOls1NzYsNTEyLFtdLFwiZjVhMFwiLFwiTTI4OCAwYy02OS41OSAwLTEyNiA1Ni40MS0xMjYgMTI2IDAgNTYuMjYgODIuMzUgMTU4LjggMTEzLjkgMTk2LjAyIDYuMzkgNy41NCAxNy44MiA3LjU0IDI0LjIgMEMzMzEuNjUgMjg0LjggNDE0IDE4Mi4yNiA0MTQgMTI2IDQxNCA1Ni40MSAzNTcuNTkgMCAyODggMHptMCAxNjhjLTIzLjIgMC00Mi0xOC44LTQyLTQyczE4LjgtNDIgNDItNDIgNDIgMTguOCA0MiA0Mi0xOC44IDQyLTQyIDQyek0yMC4xMiAyMTUuOTVBMzIuMDA2IDMyLjAwNiAwIDAgMCAwIDI0NS42NnYyNTAuMzJjMCAxMS4zMiAxMS40MyAxOS4wNiAyMS45NCAxNC44NkwxNjAgNDQ4VjIxNC45MmMtOC44NC0xNS45OC0xNi4wNy0zMS41NC0yMS4yNS00Ni40MkwyMC4xMiAyMTUuOTV6TTI4OCAzNTkuNjdjLTE0LjA3IDAtMjcuMzgtNi4xOC0zNi41MS0xNi45Ni0xOS42Ni0yMy4yLTQwLjU3LTQ5LjYyLTU5LjQ5LTc2LjcydjE4MmwxOTIgNjRWMjY2Yy0xOC45MiAyNy4wOS0zOS44MiA1My41Mi01OS40OSA3Ni43Mi05LjEzIDEwLjc3LTIyLjQ0IDE2Ljk1LTM2LjUxIDE2Ljk1em0yNjYuMDYtMTk4LjUxTDQxNiAyMjR2Mjg4bDEzOS44OC01NS45NUEzMS45OTYgMzEuOTk2IDAgMCAwIDU3NiA0MjYuMzRWMTc2LjAyYzAtMTEuMzItMTEuNDMtMTkuMDYtMjEuOTQtMTQuODZ6XCJdLFwibWFwLW1hcmtlclwiOlszODQsNTEyLFtdLFwiZjA0MVwiLFwiTTE3Mi4yNjggNTAxLjY3QzI2Ljk3IDI5MS4wMzEgMCAyNjkuNDEzIDAgMTkyIDAgODUuOTYxIDg1Ljk2MSAwIDE5MiAwczE5MiA4NS45NjEgMTkyIDE5MmMwIDc3LjQxMy0yNi45NyA5OS4wMzEtMTcyLjI2OCAzMDkuNjctOS41MzUgMTMuNzc0LTI5LjkzIDEzLjc3My0zOS40NjQgMHpcIl0sXCJtYXAtbWFya2VyLWFsdFwiOlszODQsNTEyLFtdLFwiZjNjNVwiLFwiTTE3Mi4yNjggNTAxLjY3QzI2Ljk3IDI5MS4wMzEgMCAyNjkuNDEzIDAgMTkyIDAgODUuOTYxIDg1Ljk2MSAwIDE5MiAwczE5MiA4NS45NjEgMTkyIDE5MmMwIDc3LjQxMy0yNi45NyA5OS4wMzEtMTcyLjI2OCAzMDkuNjctOS41MzUgMTMuNzc0LTI5LjkzIDEzLjc3My0zOS40NjQgMHpNMTkyIDI3MmM0NC4xODMgMCA4MC0zNS44MTcgODAtODBzLTM1LjgxNy04MC04MC04MC04MCAzNS44MTctODAgODAgMzUuODE3IDgwIDgwIDgwelwiXSxcIm1hcC1waW5cIjpbMzIwLDUxMixbXSxcImYyNzZcIixcIk0xOTIgMzAwLjgxM3YxNzIuODJsLTIyLjAxNSAzMy4wMjNjLTQuNzUgNy4xMjUtMTUuMjE5IDcuMTI1LTE5Ljk2OSAwTDEyOCA0NzMuNjMzdi0xNzIuODJhMTYyLjIyMSAxNjIuMjIxIDAgMCAwIDY0IDB6TTE2MCAwYzc5LjUyOSAwIDE0NCA2NC40NzEgMTQ0IDE0NHMtNjQuNDcxIDE0NC0xNDQgMTQ0UzE2IDIyMy41MjkgMTYgMTQ0IDgwLjQ3MSAwIDE2MCAwTTgwIDEzNmMwLTM5LjcwMSAzMi4yOTktNzIgNzItNzJhOCA4IDAgMCAwIDAtMTZjLTQ4LjUyMyAwLTg4IDM5LjQ3Ny04OCA4OGE4IDggMCAwIDAgMTYgMHpcIl0sXCJtYXAtc2lnbnNcIjpbNTEyLDUxMixbXSxcImYyNzdcIixcIk00ODcuNTE1IDEwNC40ODVMNDM5LjAzIDE1Mi45N2EyMy45OTggMjMuOTk4IDAgMCAxLTE2Ljk3IDcuMDI5SDU2Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRWNTZjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDE2MHYtOGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoMzJjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0djhoMTI2LjA1OWEyNCAyNCAwIDAgMSAxNi45NyA3LjAyOWw0OC40ODUgNDguNDg1YzQuNjg3IDQuNjg3IDQuNjg3IDEyLjI4NS4wMDEgMTYuOTcxek0yMTYgMzY4djEyMGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzJjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjM2OGgtODB6bTI0MC0xNDRIMjk2di00OGgtODB2NDhIODkuOTQxYTI0IDI0IDAgMCAwLTE2Ljk3IDcuMDI5bC00OC40ODUgNDguNDg1Yy00LjY4NiA0LjY4Ni00LjY4NiAxMi4yODQgMCAxNi45NzFsNDguNDg1IDQ4LjQ4NWEyMy45OTggMjMuOTk4IDAgMCAwIDE2Ljk3IDcuMDI5SDQ1NmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTgwQzQ4MCAyMzQuNzQ1IDQ2OS4yNTUgMjI0IDQ1NiAyMjR6XCJdLG1hcmtlcjpbNTEyLDUxMixbXSxcImY1YTFcIixcIk05My45NSAyOTAuMDNBMzI3LjAzOCAzMjcuMDM4IDAgMCAwIC4xNyA0ODUuMTFsLS4wMy4yM2MtMS43IDE1LjI4IDExLjIxIDI4LjIgMjYuNDkgMjYuNTFhMzI3LjAyIDMyNy4wMiAwIDAgMCAxOTUuMzQtOTMuOGw3NS40LTc1LjQtMTI4LjAyLTEyOC4wMi03NS40IDc1LjR6TTQ4NS40OSAyNi41MWMtMzUuMzUtMzUuMzUtOTIuNjctMzUuMzUtMTI4LjAyIDBsLTIxLjc2IDIxLjc2LTM2LjU2LTM2LjU1Yy0xNS42Mi0xNS42Mi00MC45NS0xNS42Mi01Ni41NiAwTDEzOC40NyAxMTUuODRjLTYuMjUgNi4yNS02LjI1IDE2LjM4IDAgMjIuNjNsMjIuNjIgMjIuNjJjNi4yNSA2LjI1IDE2LjM4IDYuMjUgMjIuNjMgMGw4Ny4xNS04Ny4xNSAxOS41OSAxOS41OUwxOTEuOTggMTkyIDMyMCAzMjAuMDJsMTY1LjQ5LTE2NS40OWMzNS4zNS0zNS4zNSAzNS4zNS05Mi42NiAwLTEyOC4wMnpcIl0sbWFyczpbMzg0LDUxMixbXSxcImYyMjJcIixcIk0zNzIgNjRoLTc5Yy0xMC43IDAtMTYgMTIuOS04LjUgMjAuNWwxNi45IDE2LjktODAuNyA4MC43Yy0yMi4yLTE0LTQ4LjUtMjIuMS03Ni43LTIyLjFDNjQuNSAxNjAgMCAyMjQuNSAwIDMwNHM2NC41IDE0NCAxNDQgMTQ0IDE0NC02NC41IDE0NC0xNDRjMC0yOC4yLTguMS01NC41LTIyLjEtNzYuN2w4MC43LTgwLjcgMTYuOSAxNi45YzcuNiA3LjYgMjAuNSAyLjIgMjAuNS04LjVWNzZjMC02LjYtNS40LTEyLTEyLTEyek0xNDQgMzg0Yy00NC4xIDAtODAtMzUuOS04MC04MHMzNS45LTgwIDgwLTgwIDgwIDM1LjkgODAgODAtMzUuOSA4MC04MCA4MHpcIl0sXCJtYXJzLWRvdWJsZVwiOls1MTIsNTEyLFtdLFwiZjIyN1wiLFwiTTM0MCAwaC03OWMtMTAuNyAwLTE2IDEyLjktOC41IDIwLjVsMTYuOSAxNi45LTQ4LjcgNDguN0MxOTguNSA3Mi4xIDE3Mi4yIDY0IDE0NCA2NCA2NC41IDY0IDAgMTI4LjUgMCAyMDhzNjQuNSAxNDQgMTQ0IDE0NCAxNDQtNjQuNSAxNDQtMTQ0YzAtMjguMi04LjEtNTQuNS0yMi4xLTc2LjdsNDguNy00OC43IDE2LjkgMTYuOWMyLjQgMi40IDUuNSAzLjUgOC40IDMuNSA2LjIgMCAxMi4xLTQuOCAxMi4xLTEyVjEyYzAtNi42LTUuNC0xMi0xMi0xMnpNMTQ0IDI4OGMtNDQuMSAwLTgwLTM1LjktODAtODBzMzUuOS04MCA4MC04MCA4MCAzNS45IDgwIDgwLTM1LjkgODAtODAgODB6bTM1Ni0xMjguMWgtNzljLTEwLjcgMC0xNiAxMi45LTguNSAyMC41bDE2LjkgMTYuOS00OC43IDQ4LjdjLTE4LjItMTEuNC0zOS0xOC45LTYxLjUtMjEuMy0yLjEgMjEuOC04LjIgNDMuMy0xOC40IDYzLjMgMS4xIDAgMi4yLS4xIDMuMi0uMSA0NC4xIDAgODAgMzUuOSA4MCA4MHMtMzUuOSA4MC04MCA4MC04MC0zNS45LTgwLTgwYzAtMS4xIDAtMi4yLjEtMy4yLTIwIDEwLjItNDEuNSAxNi40LTYzLjMgMTguNEMxNjguNCA0NTUuNiAyMjkuNiA1MTIgMzA0IDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI4LjItOC4xLTU0LjUtMjIuMS03Ni43bDQ4LjctNDguNyAxNi45IDE2LjljMi40IDIuNCA1LjQgMy41IDguNCAzLjUgNi4yIDAgMTIuMS00LjggMTIuMS0xMnYtNzljMC02LjctNS40LTEyLjEtMTItMTIuMXpcIl0sXCJtYXJzLXN0cm9rZVwiOlszODQsNTEyLFtdLFwiZjIyOVwiLFwiTTM3MiA2NGgtNzljLTEwLjcgMC0xNiAxMi45LTguNSAyMC41bDE2LjkgMTYuOS0xNy41IDE3LjUtMTQuMS0xNC4xYy00LjctNC43LTEyLjMtNC43LTE3IDBMMjI0LjUgMTMzYy00LjcgNC43LTQuNyAxMi4zIDAgMTdsMTQuMSAxNC4xLTE4IDE4Yy0yMi4yLTE0LTQ4LjUtMjIuMS03Ni43LTIyLjFDNjQuNSAxNjAgMCAyMjQuNSAwIDMwNHM2NC41IDE0NCAxNDQgMTQ0IDE0NC02NC41IDE0NC0xNDRjMC0yOC4yLTguMS01NC41LTIyLjEtNzYuN2wxOC0xOCAxNC4xIDE0LjFjNC43IDQuNyAxMi4zIDQuNyAxNyAwbDI4LjMtMjguM2M0LjctNC43IDQuNy0xMi4zIDAtMTdMMzI5LjIgMTY0bDE3LjUtMTcuNSAxNi45IDE2LjljNy42IDcuNiAyMC41IDIuMiAyMC41LTguNVY3NmMtLjEtNi42LTUuNS0xMi0xMi4xLTEyek0xNDQgMzg0Yy00NC4xIDAtODAtMzUuOS04MC04MHMzNS45LTgwIDgwLTgwIDgwIDM1LjkgODAgODAtMzUuOSA4MC04MCA4MHpcIl0sXCJtYXJzLXN0cm9rZS1oXCI6WzQ4MCw1MTIsW10sXCJmMjJiXCIsXCJNNDc2LjIgMjQ3LjVsLTU1LjktNTUuOWMtNy42LTcuNi0yMC41LTIuMi0yMC41IDguNVYyMjRIMzc2di0yMGMwLTYuNi01LjQtMTItMTItMTJoLTQwYy02LjYgMC0xMiA1LjQtMTIgMTJ2MjBoLTI3LjZjLTUuOC0yNS42LTE4LjctNDkuOS0zOC42LTY5LjhDMTg5LjYgOTggOTguNCA5OCA0Mi4yIDE1NC4yYy01Ni4yIDU2LjItNTYuMiAxNDcuNCAwIDIwMy42IDU2LjIgNTYuMiAxNDcuNCA1Ni4yIDIwMy42IDAgMTkuOS0xOS45IDMyLjgtNDQuMiAzOC42LTY5LjhIMzEydjIwYzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTIwaDIzLjl2MjMuOWMwIDEwLjcgMTIuOSAxNiAyMC41IDguNWw1NS45LTU1LjljNC42LTQuNyA0LjYtMTIuMy0uMS0xN3ptLTI3NS42IDY1LjFjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMC0zMS4yLTMxLjItMzEuMi04MS45IDAtMTEzLjEgMzEuMi0zMS4yIDgxLjktMzEuMiAxMTMuMSAwIDMxLjIgMzEuMSAzMS4yIDgxLjkgMCAxMTMuMXpcIl0sXCJtYXJzLXN0cm9rZS12XCI6WzI4OCw1MTIsW10sXCJmMjJhXCIsXCJNMjQ1LjggMjM0LjJjLTE5LjktMTkuOS00NC4yLTMyLjgtNjkuOC0zOC42di0yNS40aDIwYzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC0yMFY4MS40aDIzLjljMTAuNyAwIDE2LTEyLjkgOC41LTIwLjVMMTUyLjUgNS4xYy00LjctNC43LTEyLjMtNC43LTE3IDBMNzkuNiA2MWMtNy42IDcuNi0yLjIgMjAuNSA4LjUgMjAuNUgxMTJ2MjQuN0g5MmMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmgyMHYyNS40Yy0yNS42IDUuOC00OS45IDE4LjctNjkuOCAzOC42LTU2LjIgNTYuMi01Ni4yIDE0Ny40IDAgMjAzLjYgNTYuMiA1Ni4yIDE0Ny40IDU2LjIgMjAzLjYgMCA1Ni4zLTU2LjIgNTYuMy0xNDcuNCAwLTIwMy42em0tNDUuMiAxNTguNGMtMzEuMiAzMS4yLTgxLjkgMzEuMi0xMTMuMSAwLTMxLjItMzEuMi0zMS4yLTgxLjkgMC0xMTMuMSAzMS4yLTMxLjIgODEuOS0zMS4yIDExMy4xIDAgMzEuMiAzMS4xIDMxLjIgODEuOSAwIDExMy4xelwiXSxtZWRhbDpbNTEyLDUxMixbXSxcImY1YTJcIixcIk0yMjMuNzUgMTMwLjc1TDE1NC42MiAxNS41NEEzMS45OTcgMzEuOTk3IDAgMCAwIDEyNy4xOCAwSDE2LjAzQzMuMDggMC00LjUgMTQuNTcgMi45MiAyNS4xOGwxMTEuMjcgMTU4Ljk2YzI5LjcyLTI3Ljc3IDY3LjUyLTQ2LjgzIDEwOS41Ni01My4zOXpNNDk1Ljk3IDBIMzg0LjgyYy0xMS4yNCAwLTIxLjY2IDUuOS0yNy40NCAxNS41NGwtNjkuMTMgMTE1LjIxYzQyLjA0IDYuNTYgNzkuODQgMjUuNjIgMTA5LjU2IDUzLjM4TDUwOS4wOCAyNS4xOEM1MTYuNSAxNC41NyA1MDguOTIgMCA0OTUuOTcgMHpNMjU2IDE2MGMtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzZzNzguOCAxNzYgMTc2IDE3NiAxNzYtNzguOCAxNzYtMTc2LTc4LjgtMTc2LTE3Ni0xNzZ6bTkyLjUyIDE1Ny4yNmwtMzcuOTMgMzYuOTYgOC45NyA1Mi4yMmMxLjYgOS4zNi04LjI2IDE2LjUxLTE2LjY1IDEyLjA5TDI1NiAzOTMuODhsLTQ2LjkgMjQuNjVjLTguNCA0LjQ1LTE4LjI1LTIuNzQtMTYuNjUtMTIuMDlsOC45Ny01Mi4yMi0zNy45My0zNi45NmMtNi44Mi02LjY0LTMuMDUtMTguMjMgNi4zNS0xOS41OWw1Mi40My03LjY0IDIzLjQzLTQ3LjUyYzIuMTEtNC4yOCA2LjE5LTYuMzkgMTAuMjgtNi4zOSA0LjExIDAgOC4yMiAyLjE0IDEwLjMzIDYuMzlsMjMuNDMgNDcuNTIgNTIuNDMgNy42NGM5LjQgMS4zNiAxMy4xNyAxMi45NSA2LjM1IDE5LjU5elwiXSxtZWRraXQ6WzUxMiw1MTIsW10sXCJmMGZhXCIsXCJNOTYgNDgwaDMyMFYxMjhoLTMyVjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDhIMTc2Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djQ4SDk2djM1MnptOTYtMzg0aDEyOHYzMkgxOTJWOTZ6bTMyMCA4MHYyNTZjMCAyNi41MS0yMS40OSA0OC00OCA0OGgtMTZWMTI4aDE2YzI2LjUxIDAgNDggMjEuNDkgNDggNDh6TTY0IDQ4MEg0OGMtMjYuNTEgMC00OC0yMS40OS00OC00OFYxNzZjMC0yNi41MSAyMS40OS00OCA0OC00OGgxNnYzNTJ6bTI4OC0yMDh2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNmgtNDh2NDhjMCA4LjgzNy03LjE2MyAxNi0xNiAxNmgtMzJjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ2LTQ4aC00OGMtOC44MzcgMC0xNi03LjE2My0xNi0xNnYtMzJjMC04LjgzNyA3LjE2My0xNiAxNi0xNmg0OHYtNDhjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgzMmM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djQ4aDQ4YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ6XCJdLG1laDpbNDk2LDUxMixbXSxcImYxMWFcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em0tODAgMTY4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptMTc2IDE5MkgxNTJjLTIxLjIgMC0yMS4yLTMyIDAtMzJoMTkyYzIxLjIgMCAyMS4yIDMyIDAgMzJ6bS0xNi0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyelwiXSxcIm1laC1ibGFua1wiOls0OTYsNTEyLFtdLFwiZjVhNFwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bS04MCAyMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyem0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6XCJdLFwibWVoLXJvbGxpbmctZXllc1wiOls0OTYsNTEyLFtdLFwiZjVhNVwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6TTg4IDIyNGMwLTI0LjMgMTMuNy00NS4yIDMzLjYtNTYtLjcgMi42LTEuNiA1LjItMS42IDggMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTIuOC0uOS01LjQtMS42LTggMTkuOSAxMC44IDMzLjYgMzEuNyAzMy42IDU2IDAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0em0yMjQgMTc2SDE4NGMtMjEuMiAwLTIxLjItMzIgMC0zMmgxMjhjMjEuMiAwIDIxLjIgMzIgMCAzMnptMzItMTEyYy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI0LjMgMTMuNy00NS4yIDMzLjYtNTYtLjcgMi42LTEuNiA1LjItMS42IDggMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTIuOC0uOS01LjQtMS42LTggMTkuOSAxMC44IDMzLjYgMzEuNyAzMy42IDU2IDAgMzUuMy0yOC43IDY0LTY0IDY0elwiXSxtZW1vcnk6WzY0MCw1MTIsW10sXCJmNTM4XCIsXCJNNjQwIDEzMC45NFY5NmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMySDMyQzE0LjMzIDY0IDAgNzguMzMgMCA5NnYzNC45NGMxOC42IDYuNjEgMzIgMjQuMTkgMzIgNDUuMDZzLTEzLjQgMzguNDUtMzIgNDUuMDZWMzIwaDY0MHYtOTguOTRjLTE4LjYtNi42MS0zMi0yNC4xOS0zMi00NS4wNnMxMy40LTM4LjQ1IDMyLTQ1LjA2ek0yMjQgMjU2aC02NFYxMjhoNjR2MTI4em0xMjggMGgtNjRWMTI4aDY0djEyOHptMTI4IDBoLTY0VjEyOGg2NHYxMjh6TTAgNDQ4aDY0di0yNi42N2MwLTguODQgNy4xNi0xNiAxNi0xNnMxNiA3LjE2IDE2IDE2VjQ0OGgxMjh2LTI2LjY3YzAtOC44NCA3LjE2LTE2IDE2LTE2czE2IDcuMTYgMTYgMTZWNDQ4aDEyOHYtMjYuNjdjMC04Ljg0IDcuMTYtMTYgMTYtMTZzMTYgNy4xNiAxNiAxNlY0NDhoMTI4di0yNi42N2MwLTguODQgNy4xNi0xNiAxNi0xNnMxNiA3LjE2IDE2IDE2VjQ0OGg2NHYtOTZIMHY5NnpcIl0sbWVyY3VyeTpbMjg4LDUxMixbXSxcImYyMjNcIixcIk0yODggMjA4YzAtNDQuMi0xOS45LTgzLjctNTEuMi0xMTAuMSAyLjUtMS44IDQuOS0zLjggNy4yLTUuOCAyNC43LTIxLjIgMzkuOC00OC44IDQzLjItNzguOC45LTcuMS00LjctMTMuMy0xMS45LTEzLjNoLTQwLjVDMjI5IDAgMjI0LjEgNC4xIDIyMyA5LjhjLTIuNCAxMi41LTkuNiAyNC4zLTIwLjcgMzMuOEMxODcgNTYuOCAxNjYuMyA2NCAxNDQgNjRzLTQzLTcuMi01OC40LTIwLjRDNzQuNSAzNC4xIDY3LjQgMjIuMyA2NC45IDkuOCA2My44IDQuMSA1OC45IDAgNTMuMiAwSDEyLjdDNS41IDAtLjEgNi4yLjggMTMuMyA0LjIgNDMuNCAxOS4yIDcxIDQ0IDkyLjJjMi4zIDIgNC43IDMuOSA3LjIgNS44QzE5LjkgMTI0LjMgMCAxNjMuOCAwIDIwOGMwIDY4LjUgNDcuOSAxMjUuOSAxMTIgMTQwLjRWNDAwSDc2Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDM2djM2YzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTM2aDM2YzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC0zNnYtNTEuNmM2NC4xLTE0LjUgMTEyLTcxLjkgMTEyLTE0MC40em0tMjI0IDBjMC00NC4xIDM1LjktODAgODAtODBzODAgMzUuOSA4MCA4MC0zNS45IDgwLTgwIDgwLTgwLTM1LjktODAtODB6XCJdLG1pY3JvY2hpcDpbNTEyLDUxMixbXSxcImYyZGJcIixcIk00MTYgNDh2NDE2YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhIMTQ0Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjQ4YzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMjI0YzI2LjUxIDAgNDggMjEuNDkgNDggNDh6bTk2IDU4djEyYTYgNiAwIDAgMS02IDZoLTE4djZhNiA2IDAgMCAxLTYgNmgtNDJWODhoNDJhNiA2IDAgMCAxIDYgNnY2aDE4YTYgNiAwIDAgMSA2IDZ6bTAgOTZ2MTJhNiA2IDAgMCAxLTYgNmgtMTh2NmE2IDYgMCAwIDEtNiA2aC00MnYtNDhoNDJhNiA2IDAgMCAxIDYgNnY2aDE4YTYgNiAwIDAgMSA2IDZ6bTAgOTZ2MTJhNiA2IDAgMCAxLTYgNmgtMTh2NmE2IDYgMCAwIDEtNiA2aC00MnYtNDhoNDJhNiA2IDAgMCAxIDYgNnY2aDE4YTYgNiAwIDAgMSA2IDZ6bTAgOTZ2MTJhNiA2IDAgMCAxLTYgNmgtMTh2NmE2IDYgMCAwIDEtNiA2aC00MnYtNDhoNDJhNiA2IDAgMCAxIDYgNnY2aDE4YTYgNiAwIDAgMSA2IDZ6TTMwIDM3Nmg0MnY0OEgzMGE2IDYgMCAwIDEtNi02di02SDZhNiA2IDAgMCAxLTYtNnYtMTJhNiA2IDAgMCAxIDYtNmgxOHYtNmE2IDYgMCAwIDEgNi02em0wLTk2aDQydjQ4SDMwYTYgNiAwIDAgMS02LTZ2LTZINmE2IDYgMCAwIDEtNi02di0xMmE2IDYgMCAwIDEgNi02aDE4di02YTYgNiAwIDAgMSA2LTZ6bTAtOTZoNDJ2NDhIMzBhNiA2IDAgMCAxLTYtNnYtNkg2YTYgNiAwIDAgMS02LTZ2LTEyYTYgNiAwIDAgMSA2LTZoMTh2LTZhNiA2IDAgMCAxIDYtNnptMC05Nmg0MnY0OEgzMGE2IDYgMCAwIDEtNi02di02SDZhNiA2IDAgMCAxLTYtNnYtMTJhNiA2IDAgMCAxIDYtNmgxOHYtNmE2IDYgMCAwIDEgNi02elwiXSxtaWNyb3Bob25lOlszNTIsNTEyLFtdLFwiZjEzMFwiLFwiTTE3NiAzNTJjNTMuMDIgMCA5Ni00Mi45OCA5Ni05NlY5NmMwLTUzLjAyLTQyLjk4LTk2LTk2LTk2UzgwIDQyLjk4IDgwIDk2djE2MGMwIDUzLjAyIDQyLjk4IDk2IDk2IDk2em0xNjAtMTYwaC0xNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2NDhjMCA3NC44LTY0LjQ5IDEzNC44Mi0xNDAuNzkgMTI3LjM4Qzk2LjcxIDM3Ni44OSA0OCAzMTcuMTEgNDggMjUwLjNWMjA4YzAtOC44NC03LjE2LTE2LTE2LTE2SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnY0MC4xNmMwIDg5LjY0IDYzLjk3IDE2OS41NSAxNTIgMTgxLjY5VjQ2NEg5NmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MTZjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTYwYzguODQgMCAxNi03LjE2IDE2LTE2di0xNmMwLTguODQtNy4xNi0xNi0xNi0xNmgtNTZ2LTMzLjc3QzI4NS43MSA0MTguNDcgMzUyIDM0NC45IDM1MiAyNTZ2LTQ4YzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxcIm1pY3JvcGhvbmUtYWx0XCI6WzM1Miw1MTIsW10sXCJmM2M5XCIsXCJNMzM2IDE5MmgtMTZjLTguODQgMC0xNiA3LjE2LTE2IDE2djQ4YzAgNzQuOC02NC40OSAxMzQuODItMTQwLjc5IDEyNy4zOEM5Ni43MSAzNzYuODkgNDggMzE3LjExIDQ4IDI1MC4zVjIwOGMwLTguODQtNy4xNi0xNi0xNi0xNkgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2NDAuMTZjMCA4OS42NCA2My45NyAxNjkuNTUgMTUyIDE4MS42OVY0NjRIOTZjLTguODQgMC0xNiA3LjE2LTE2IDE2djE2YzAgOC44NCA3LjE2IDE2IDE2IDE2aDE2MGM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMTZjMC04Ljg0LTcuMTYtMTYtMTYtMTZoLTU2di0zMy43N0MyODUuNzEgNDE4LjQ3IDM1MiAzNDQuOSAzNTIgMjU2di00OGMwLTguODQtNy4xNi0xNi0xNi0xNnpNMTc2IDM1MmM1My4wMiAwIDk2LTQyLjk4IDk2LTk2aC04NS4zM2MtNS44OSAwLTEwLjY3LTMuNTgtMTAuNjctOHYtMTZjMC00LjQyIDQuNzgtOCAxMC42Ny04SDI3MnYtMzJoLTg1LjMzYy01Ljg5IDAtMTAuNjctMy41OC0xMC42Ny04di0xNmMwLTQuNDIgNC43OC04IDEwLjY3LThIMjcydi0zMmgtODUuMzNjLTUuODkgMC0xMC42Ny0zLjU4LTEwLjY3LTh2LTE2YzAtNC40MiA0Ljc4LTggMTAuNjctOEgyNzJjMC01My4wMi00Mi45OC05Ni05Ni05NlM4MCA0Mi45OCA4MCA5NnYxNjBjMCA1My4wMiA0Mi45OCA5NiA5NiA5NnpcIl0sXCJtaWNyb3Bob25lLWFsdC1zbGFzaFwiOls2NDAsNTEyLFtdLFwiZjUzOVwiLFwiTTYzMy44MiA0NTguMUw0NzYuMjYgMzM2LjMzQzQ4OC43NCAzMTIuMjEgNDk2IDI4NC45OCA0OTYgMjU2di00OGMwLTguODQtNy4xNi0xNi0xNi0xNmgtMTZjLTguODQgMC0xNiA3LjE2LTE2IDE2djQ4YzAgMTcuOTItMy45NiAzNC44LTEwLjcyIDUwLjJsLTI2LjU1LTIwLjUyYzMuMS05LjQgNS4yOC0xOS4yMiA1LjI4LTI5LjY3aC00My42N2wtNDEuNC0zMkg0MTZ2LTMyaC04NS4zM2MtNS44OSAwLTEwLjY3LTMuNTgtMTAuNjctOHYtMTZjMC00LjQyIDQuNzgtOCAxMC42Ny04SDQxNnYtMzJoLTg1LjMzYy01Ljg5IDAtMTAuNjctMy41OC0xMC42Ny04di0xNmMwLTQuNDIgNC43OC04IDEwLjY3LThINDE2YzAtNTMuMDItNDIuOTgtOTYtOTYtOTZzLTk2IDQyLjk4LTk2IDk2djQ1LjM2TDQ1LjQ3IDMuMzdDMzguNDktMi4wNSAyOC40My0uOCAyMy4wMSA2LjE4TDMuMzcgMzEuNDVDLTIuMDUgMzguNDItLjggNDguNDcgNi4xOCA1My45bDU4OC4zNiA0NTQuNzNjNi45OCA1LjQzIDE3LjAzIDQuMTcgMjIuNDYtMi44MWwxOS42NC0yNS4yN2M1LjQxLTYuOTcgNC4xNi0xNy4wMi0yLjgyLTIyLjQ1ek00MDAgNDY0aC01NnYtMzMuNzhjMTEuNzEtMS42MiAyMy4xLTQuMjggMzMuOTYtOC4wOGwtNTAuNC0zOC45NmMtNi43MS40LTEzLjQxLjg3LTIwLjM1LjItNTUuODUtNS40NS05OC43NC00OC42My0xMTEuMTgtMTAxLjg1TDE0NCAyNDEuMzF2Ni44NWMwIDg5LjY0IDYzLjk3IDE2OS41NSAxNTIgMTgxLjY5VjQ2NGgtNTZjLTguODQgMC0xNiA3LjE2LTE2IDE2djE2YzAgOC44NCA3LjE2IDE2IDE2IDE2aDE2MGM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMTZjMC04Ljg0LTcuMTYtMTYtMTYtMTZ6XCJdLFwibWljcm9waG9uZS1zbGFzaFwiOls2NDAsNTEyLFtdLFwiZjEzMVwiLFwiTTYzMy44MiA0NTguMWwtMTU3LjgtMTIxLjk2QzQ4OC42MSAzMTIuMTMgNDk2IDI4NS4wMSA0OTYgMjU2di00OGMwLTguODQtNy4xNi0xNi0xNi0xNmgtMTZjLTguODQgMC0xNiA3LjE2LTE2IDE2djQ4YzAgMTcuOTItMy45NiAzNC44LTEwLjcyIDUwLjJsLTI2LjU1LTIwLjUyYzMuMS05LjQgNS4yOC0xOS4yMiA1LjI4LTI5LjY3Vjk2YzAtNTMuMDItNDIuOTgtOTYtOTYtOTZzLTk2IDQyLjk4LTk2IDk2djQ1LjM2TDQ1LjQ3IDMuMzdDMzguNDktMi4wNSAyOC40My0uOCAyMy4wMSA2LjE4TDMuMzcgMzEuNDVDLTIuMDUgMzguNDItLjggNDguNDcgNi4xOCA1My45bDU4OC4zNiA0NTQuNzNjNi45OCA1LjQzIDE3LjAzIDQuMTcgMjIuNDYtMi44MWwxOS42NC0yNS4yN2M1LjQxLTYuOTcgNC4xNi0xNy4wMi0yLjgyLTIyLjQ1ek00MDAgNDY0aC01NnYtMzMuNzdjMTEuNjYtMS42IDIyLjg1LTQuNTQgMzMuNjctOC4zMWwtNTAuMTEtMzguNzNjLTYuNzEuNC0xMy40MS44Ny0yMC4zNS4yLTU1Ljg1LTUuNDUtOTguNzQtNDguNjMtMTExLjE4LTEwMS44NUwxNDQgMjQxLjMxdjYuODVjMCA4OS42NCA2My45NyAxNjkuNTUgMTUyIDE4MS42OVY0NjRoLTU2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYxNmMwIDguODQgNy4xNiAxNiAxNiAxNmgxNjBjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTE2YzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxtaW51czpbNDQ4LDUxMixbXSxcImYwNjhcIixcIk00MTYgMjA4SDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzg0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJ6XCJdLFwibWludXMtY2lyY2xlXCI6WzUxMiw1MTIsW10sXCJmMDU2XCIsXCJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHpNMTI0IDI5NmMtNi42IDAtMTItNS40LTEyLTEydi01NmMwLTYuNiA1LjQtMTIgMTItMTJoMjY0YzYuNiAwIDEyIDUuNCAxMiAxMnY1NmMwIDYuNi01LjQgMTItMTIgMTJIMTI0elwiXSxcIm1pbnVzLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE0NlwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTkyIDI5NmMtNi42IDAtMTItNS40LTEyLTEydi01NmMwLTYuNiA1LjQtMTIgMTItMTJoMjY0YzYuNiAwIDEyIDUuNCAxMiAxMnY1NmMwIDYuNi01LjQgMTItMTIgMTJIOTJ6XCJdLG1vYmlsZTpbMzIwLDUxMixbXSxcImYxMGJcIixcIk0yNzIgMEg0OEMyMS41IDAgMCAyMS41IDAgNDh2NDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDIyNGMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OHpNMTYwIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6XCJdLFwibW9iaWxlLWFsdFwiOlszMjAsNTEyLFtdLFwiZjNjZFwiLFwiTTI3MiAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMjI0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xNjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyIDMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMnptMTEyLTEwOGMwIDYuNi01LjQgMTItMTIgMTJINjBjLTYuNiAwLTEyLTUuNC0xMi0xMlY2MGMwLTYuNiA1LjQtMTIgMTItMTJoMjAwYzYuNiAwIDEyIDUuNCAxMiAxMnYzMTJ6XCJdLFwibW9uZXktYmlsbFwiOls2NDAsNTEyLFtdLFwiZjBkNlwiLFwiTTYwOCA2NEgzMkMxNC4zMyA2NCAwIDc4LjMzIDAgOTZ2MzIwYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNTc2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWOTZjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpNNDggNDAwdi02NGMzNS4zNSAwIDY0IDI4LjY1IDY0IDY0SDQ4em0wLTIyNHYtNjRoNjRjMCAzNS4zNS0yOC42NSA2NC02NCA2NHptMjcyIDE3NmMtNDQuMTkgMC04MC00Mi45OS04MC05NiAwLTUzLjAyIDM1LjgyLTk2IDgwLTk2czgwIDQyLjk4IDgwIDk2YzAgNTMuMDMtMzUuODMgOTYtODAgOTZ6bTI3MiA0OGgtNjRjMC0zNS4zNSAyOC42NS02NCA2NC02NHY2NHptMC0yMjRjLTM1LjM1IDAtNjQtMjguNjUtNjQtNjRoNjR2NjR6XCJdLFwibW9uZXktYmlsbC1hbHRcIjpbNjQwLDUxMixbXSxcImYzZDFcIixcIk0zNTIgMjg4aC0xNnYtODhjMC00LjQyLTMuNTgtOC04LThoLTEzLjU4Yy00Ljc0IDAtOS4zNyAxLjQtMTMuMzEgNC4wM2wtMTUuMzMgMTAuMjJhNy45OTQgNy45OTQgMCAwIDAtMi4yMiAxMS4wOWw4Ljg4IDEzLjMxYTcuOTk0IDcuOTk0IDAgMCAwIDExLjA5IDIuMjJsLjQ3LS4zMVYyODhoLTE2Yy00LjQyIDAtOCAzLjU4LTggOHYxNmMwIDQuNDIgMy41OCA4IDggOGg2NGM0LjQyIDAgOC0zLjU4IDgtOHYtMTZjMC00LjQyLTMuNTgtOC04LTh6TTYwOCA2NEgzMkMxNC4zMyA2NCAwIDc4LjMzIDAgOTZ2MzIwYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNTc2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWOTZjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpNNDggNDAwdi02NGMzNS4zNSAwIDY0IDI4LjY1IDY0IDY0SDQ4em0wLTIyNHYtNjRoNjRjMCAzNS4zNS0yOC42NSA2NC02NCA2NHptMjcyIDE5MmMtNTMuMDIgMC05Ni01MC4xNS05Ni0xMTIgMC02MS44NiA0Mi45OC0xMTIgOTYtMTEyczk2IDUwLjE0IDk2IDExMmMwIDYxLjg3LTQzIDExMi05NiAxMTJ6bTI3MiAzMmgtNjRjMC0zNS4zNSAyOC42NS02NCA2NC02NHY2NHptMC0yMjRjLTM1LjM1IDAtNjQtMjguNjUtNjQtNjRoNjR2NjR6XCJdLFwibW9uZXktYmlsbC13YXZlXCI6WzY0MCw1MTIsW10sXCJmNTNhXCIsXCJNNjIxLjE2IDU0LjQ2QzU4Mi4zNyAzOC4xOSA1NDMuNTUgMzIgNTA0Ljc1IDMyYy0xMjMuMTctLjAxLTI0Ni4zMyA2Mi4zNC0zNjkuNSA2Mi4zNC0zMC44OSAwLTYxLjc2LTMuOTItOTIuNjUtMTMuNzItMy40Ny0xLjEtNi45NS0xLjYyLTEwLjM1LTEuNjJDMTUuMDQgNzkgMCA5Mi4zMiAwIDExMC44MXYzMTcuMjZjMCAxMi42MyA3LjIzIDI0LjYgMTguODQgMjkuNDZDNTcuNjMgNDczLjgxIDk2LjQ1IDQ4MCAxMzUuMjUgNDgwYzEyMy4xNyAwIDI0Ni4zNC02Mi4zNSAzNjkuNTEtNjIuMzUgMzAuODkgMCA2MS43NiAzLjkyIDkyLjY1IDEzLjcyIDMuNDcgMS4xIDYuOTUgMS42MiAxMC4zNSAxLjYyIDE3LjIxIDAgMzIuMjUtMTMuMzIgMzIuMjUtMzEuODFWODMuOTNjLS4wMS0xMi42NC03LjI0LTI0LjYtMTguODUtMjkuNDd6TTQ4IDEzMi4yMmMyMC4xMiA1LjA0IDQxLjEyIDcuNTcgNjIuNzIgOC45M0MxMDQuODQgMTcwLjU0IDc5IDE5Mi42OSA0OCAxOTIuNjl2LTYwLjQ3em0wIDI4NXYtNDcuNzhjMzQuMzcgMCA2Mi4xOCAyNy4yNyA2My43MSA2MS40LTIyLjUzLTEuODEtNDMuNTktNi4zMS02My43MS0xMy42MnpNMzIwIDM1MmMtNDQuMTkgMC04MC00Mi45OS04MC05NiAwLTUzLjAyIDM1LjgyLTk2IDgwLTk2czgwIDQyLjk4IDgwIDk2YzAgNTMuMDMtMzUuODMgOTYtODAgOTZ6bTI3MiAyNy43OGMtMTcuNTItNC4zOS0zNS43MS02Ljg1LTU0LjMyLTguNDQgNS44Ny0yNi4wOCAyNy41LTQ1Ljg4IDU0LjMyLTQ5LjI4djU3Ljcyem0wLTIzNi4xMWMtMzAuODktMy45MS01NC44Ni0yOS43LTU1LjgxLTYxLjU1IDE5LjU0IDIuMTcgMzguMDkgNi4yMyA1NS44MSAxMi42NnY0OC44OXpcIl0sXCJtb25leS1iaWxsLXdhdmUtYWx0XCI6WzY0MCw1MTIsW10sXCJmNTNiXCIsXCJNNjIxLjE2IDU0LjQ2QzU4Mi4zNyAzOC4xOSA1NDMuNTUgMzIgNTA0Ljc1IDMyYy0xMjMuMTctLjAxLTI0Ni4zMyA2Mi4zNC0zNjkuNSA2Mi4zNC0zMC44OSAwLTYxLjc2LTMuOTItOTIuNjUtMTMuNzItMy40Ny0xLjEtNi45NS0xLjYyLTEwLjM1LTEuNjJDMTUuMDQgNzkgMCA5Mi4zMiAwIDExMC44MXYzMTcuMjZjMCAxMi42MyA3LjIzIDI0LjYgMTguODQgMjkuNDZDNTcuNjMgNDczLjgxIDk2LjQ1IDQ4MCAxMzUuMjUgNDgwYzEyMy4xNyAwIDI0Ni4zNC02Mi4zNSAzNjkuNTEtNjIuMzUgMzAuODkgMCA2MS43NiAzLjkyIDkyLjY1IDEzLjcyIDMuNDcgMS4xIDYuOTUgMS42MiAxMC4zNSAxLjYyIDE3LjIxIDAgMzIuMjUtMTMuMzIgMzIuMjUtMzEuODFWODMuOTNjLS4wMS0xMi42NC03LjI0LTI0LjYtMTguODUtMjkuNDd6TTMyMCAzNTJjLTQ0LjE5IDAtODAtNDIuOTktODAtOTYgMC01My4wMiAzNS44Mi05NiA4MC05NnM4MCA0Mi45OCA4MCA5NmMwIDUzLjAzLTM1LjgzIDk2LTgwIDk2elwiXSxcIm1vbmV5LWNoZWNrXCI6WzY0MCw1MTIsW10sXCJmNTNjXCIsXCJNMCA0NDhjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg1NzZjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlYxMjhIMHYzMjB6bTQ0OC0yMDhjMC04Ljg0IDcuMTYtMTYgMTYtMTZoOTZjOC44NCAwIDE2IDcuMTYgMTYgMTZ2MzJjMCA4Ljg0LTcuMTYgMTYtMTYgMTZoLTk2Yy04Ljg0IDAtMTYtNy4xNi0xNi0xNnYtMzJ6bTAgMTIwYzAtNC40MiAzLjU4LTggOC04aDExMmM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg0NTZjLTQuNDIgMC04LTMuNTgtOC04di0xNnpNNjQgMjY0YzAtNC40MiAzLjU4LTggOC04aDMwNGM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LTh2LTE2em0wIDk2YzAtNC40MiAzLjU4LTggOC04aDE3NmM0LjQyIDAgOCAzLjU4IDggOHYxNmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LTh2LTE2ek02MjQgMzJIMTZDNy4xNiAzMiAwIDM5LjE2IDAgNDh2NDhoNjQwVjQ4YzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxcIm1vbmV5LWNoZWNrLWFsdFwiOls2NDAsNTEyLFtdLFwiZjUzZFwiLFwiTTYwOCAzMkgzMkMxNC4zMyAzMiAwIDQ2LjMzIDAgNjR2Mzg0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNTc2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpNMTc2IDMyNy44OFYzNDRjMCA0LjQyLTMuNTggOC04IDhoLTE2Yy00LjQyIDAtOC0zLjU4LTgtOHYtMTYuMjljLTExLjI5LS41OC0yMi4yNy00LjUyLTMxLjM3LTExLjM1LTMuOS0yLjkzLTQuMS04Ljc3LS41Ny0xMi4xNGwxMS43NS0xMS4yMWMyLjc3LTIuNjQgNi44OS0yLjc2IDEwLjEzLS43MyAzLjg3IDIuNDIgOC4yNiAzLjcyIDEyLjgyIDMuNzJoMjguMTFjNi41IDAgMTEuOC01LjkyIDExLjgtMTMuMTkgMC01Ljk1LTMuNjEtMTEuMTktOC43Ny0xMi43M2wtNDUtMTMuNWMtMTguNTktNS41OC0zMS41OC0yMy40Mi0zMS41OC00My4zOSAwLTI0LjUyIDE5LjA1LTQ0LjQ0IDQyLjY3LTQ1LjA3VjE1MmMwLTQuNDIgMy41OC04IDgtOGgxNmM0LjQyIDAgOCAzLjU4IDggOHYxNi4yOWMxMS4yOS41OCAyMi4yNyA0LjUxIDMxLjM3IDExLjM1IDMuOSAyLjkzIDQuMSA4Ljc3LjU3IDEyLjE0bC0xMS43NSAxMS4yMWMtMi43NyAyLjY0LTYuODkgMi43Ni0xMC4xMy43My0zLjg3LTIuNDMtOC4yNi0zLjcyLTEyLjgyLTMuNzJoLTI4LjExYy02LjUgMC0xMS44IDUuOTItMTEuOCAxMy4xOSAwIDUuOTUgMy42MSAxMS4xOSA4Ljc3IDEyLjczbDQ1IDEzLjVjMTguNTkgNS41OCAzMS41OCAyMy40MiAzMS41OCA0My4zOSAwIDI0LjUzLTE5LjA1IDQ0LjQ0LTQyLjY3IDQ1LjA3ek00MTYgMzEyYzAgNC40Mi0zLjU4IDgtOCA4SDI5NmMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDExMmM0LjQyIDAgOCAzLjU4IDggOHYxNnptMTYwIDBjMCA0LjQyLTMuNTggOC04IDhoLTgwYy00LjQyIDAtOC0zLjU4LTgtOHYtMTZjMC00LjQyIDMuNTgtOCA4LThoODBjNC40MiAwIDggMy41OCA4IDh2MTZ6bTAtOTZjMCA0LjQyLTMuNTggOC04IDhIMjk2Yy00LjQyIDAtOC0zLjU4LTgtOHYtMTZjMC00LjQyIDMuNTgtOCA4LThoMjcyYzQuNDIgMCA4IDMuNTggOCA4djE2elwiXSxtb251bWVudDpbMzg0LDUxMixbXSxcImY1YTZcIixcIk0zNjggNDQ4SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYzMmMwIDguODQgNy4xNiAxNiAxNiAxNmgzNTJjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2em0tNzguODYtMzQ3LjI2YTMxLjk3IDMxLjk3IDAgMCAwLTkuMjEtMTkuNDRMMjAzLjMxIDQuNjljLTYuMjUtNi4yNS0xNi4zOC02LjI1LTIyLjYzIDBsLTc2LjYgNzYuNjFhMzEuOTcgMzEuOTcgMCAwIDAtOS4yMSAxOS40NEw2NCA0MTZoMjU2bC0zMC44Ni0zMTUuMjZ6TTI0MCAzMDcuMmMwIDYuNC02LjQgMTIuOC0xMi44IDEyLjhoLTcwLjRjLTYuNCAwLTEyLjgtNi40LTEyLjgtMTIuOHYtMzguNGMwLTYuNCA2LjQtMTIuOCAxMi44LTEyLjhoNzAuNGM2LjQgMCAxMi44IDYuNCAxMi44IDEyLjh2MzguNHpcIl0sbW9vbjpbNTEyLDUxMixbXSxcImYxODZcIixcIk0yODMuMjExIDUxMmM3OC45NjIgMCAxNTEuMDc5LTM1LjkyNSAxOTguODU3LTk0Ljc5MiA3LjA2OC04LjcwOC0uNjM5LTIxLjQzLTExLjU2Mi0xOS4zNS0xMjQuMjAzIDIzLjY1NC0yMzguMjYyLTcxLjU3Ni0yMzguMjYyLTE5Ni45NTQgMC03Mi4yMjIgMzguNjYyLTEzOC42MzUgMTAxLjQ5OC0xNzQuMzk0IDkuNjg2LTUuNTEyIDcuMjUtMjAuMTk3LTMuNzU2LTIyLjIzQTI1OC4xNTYgMjU4LjE1NiAwIDAgMCAyODMuMjExIDBjLTE0MS4zMDkgMC0yNTYgMTE0LjUxMS0yNTYgMjU2IDAgMTQxLjMwOSAxMTQuNTExIDI1NiAyNTYgMjU2elwiXSxcIm1vcnRhci1wZXN0bGVcIjpbNTEyLDUxMixbXSxcImY1YTdcIixcIk01MDEuNTQgNjAuOTFjMTcuMjItMTcuMjIgMTIuNTEtNDYuMjUtOS4yNy01Ny4xNGEzNS42OTYgMzUuNjk2IDAgMCAwLTM3LjM3IDMuMzdMMjUxLjA5IDE2MGgxNTEuMzdsOTkuMDgtOTkuMDl6TTQ5NiAxOTJIMTZjLTguODQgMC0xNiA3LjE2LTE2IDE2djMyYzAgOC44NCA3LjE2IDE2IDE2IDE2aDE2YzAgODAuOTggNTAuMiAxNTAuMTEgMTIxLjEzIDE3OC4zMi0xMi43NiAxNi44Ny0yMS43MiAzNi44LTI0Ljk1IDU4LjY5LTEuNDYgOS45MiA2LjA0IDE4Ljk4IDE2LjA3IDE4Ljk4aDIyMy41YzEwLjAzIDAgMTcuNTMtOS4wNiAxNi4wNy0xOC45OC0zLjIyLTIxLjg5LTEyLjE4LTQxLjgyLTI0Ljk1LTU4LjY5QzQyOS44IDQwNi4xMSA0ODAgMzM2Ljk4IDQ4MCAyNTZoMTZjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxtb3RvcmN5Y2xlOls2NDAsNTEyLFtdLFwiZjIxY1wiLFwiTTUxMi45NDkgMTkyLjAwM2MtMTQuODYyLS4xMDgtMjkuMTQgMi4zMjItNDIuNDM0IDYuODc0TDQzNy41ODkgMTQ0SDUyMGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWODhjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0aC00NS4zMTFhMjQgMjQgMCAwIDAtMTcuODM5IDcuOTQ1bC0zNy40OTYgNDEuNjYzLTIyLjc3NC0zNy45NTZBMjQgMjQgMCAwIDAgMzc2IDY0aC04MGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYxNmMwIDguODM3IDcuMTYzIDE2IDE2IDE2aDY2LjQxMWwxOS4yIDMySDIyNy45MDRjLTE3LjcyNy0yMy4wNzMtNDQuOTI0LTQwLTk5LjkwNC00MEg3Mi41NGMtMTMuNDU1IDAtMjQuNzkxIDExLjAxMS0yNC41MzYgMjQuNDY0QzQ4LjI1MiAxNDEuNTA1IDU4LjkgMTUyIDcyIDE1Mmg1NmMyNC41MDQgMCAzOC42ODYgMTAuOTE5IDQ3Ljc4NyAyNC43NjlsLTExLjI5MSAyMC41MjljLTEzLjAwNi0zLjg2NS0yNi44NzEtNS43MzYtNDEuMjUxLTUuMjFDNTUuODU3IDE5NC41NDkgMS41NjUgMjQ5LjYwNS4wMzQgMzE3LjAyMS0xLjYwMyAzODkuMDc2IDU2LjMxNyA0NDggMTI4IDQ0OGM1OS42NDIgMCAxMDkuNzQ0LTQwLjc5NCAxMjMuOTUzLTk2aDg0LjIzNmMxMy42NzMgMCAyNC41ODktMTEuNDIxIDIzLjk3Ni0yNS4wNzctMi4xMTgtNDcuMTIgMTcuNTIyLTkzLjY2NSA1Ni4xODUtMTI1LjAyNmwxMi40ODUgMjAuODA4Yy0yNy42NDYgMjMuNjU0LTQ1LjA5NyA1OC44OC00NC44MzEgOTguMTc5LjQ3IDY5LjU1NiA1Ny4yMDMgMTI2LjQ1MiAxMjYuNzU4IDEyNy4xMSA3MS42MjkuNjc4IDEyOS44MzktNTcuNDg3IDEyOS4yMzQtMTI5LjA5OS0uNTg4LTY5LjU5MS01Ny40NTUtMTI2LjM4Ni0xMjcuMDQ3LTEyNi44OTJ6TTEyOCA0MDBjLTQ0LjExMiAwLTgwLTM1Ljg4OC04MC04MHMzNS44ODgtODAgODAtODBjNC4yNDIgMCA4LjQwNS4zNDEgMTIuNDY5Ljk4Mkw5OC45NyAzMTYuNDM0QzkwLjE4NyAzMzIuNDA3IDEwMS43NjIgMzUyIDEyMCAzNTJoODEuMjk3Yy0xMi4zNyAyOC4yMjUtNDAuNTYgNDgtNzMuMjk3IDQ4em0zODguMzUxLS4xMTZDNDcwLjI3MiA0MDIuMzM3IDQzMiAzNjUuNTU0IDQzMiAzMjBjMC0yMS4zNjMgOC40MzQtNDAuNzgxIDIyLjEyNS01NS4xNDRsNDkuNDEyIDgyLjM1MmM0LjU0NiA3LjU3NyAxNC4zNzUgMTAuMDM0IDIxLjk1MiA1LjQ4OGwxMy43Mi04LjIzMmM3LjU3Ny00LjU0NiAxMC4wMzQtMTQuMzc1IDUuNDg4LTIxLjk1MmwtNDguNTU2LTgwLjkyN0E4MC4wMDUgODAuMDA1IDAgMCAxIDUxMiAyNDBjNDUuNTU0IDAgODIuMzM4IDM4LjI3MyA3OS44ODQgODQuMzUyLTIuMTYgNDAuNTU4LTM0Ljk3NCA3My4zNzItNzUuNTMzIDc1LjUzMnpcIl0sXCJtb3VzZS1wb2ludGVyXCI6WzMyMCw1MTIsW10sXCJmMjQ1XCIsXCJNMzAyLjE4OSAzMjkuMTI2SDE5Ni4xMDVsNTUuODMxIDEzNS45OTNjMy44ODkgOS40MjgtLjU1NSAxOS45OTktOS40NDQgMjMuOTk5bC00OS4xNjUgMjEuNDI3Yy05LjE2NSA0LTE5LjQ0My0uNTcxLTIzLjMzMi05LjcxNGwtNTMuMDUzLTEyOS4xMzYtODYuNjY0IDg5LjEzOEMxOC43MjkgNDcyLjcxIDAgNDYzLjU1NCAwIDQ0Ny45NzdWMTguMjk5QzAgMS44OTkgMTkuOTIxLTYuMDk2IDMwLjI3NyA1LjQ0M2wyODQuNDEyIDI5Mi41NDJjMTEuNDcyIDExLjE3OSAzLjAwNyAzMS4xNDEtMTIuNSAzMS4xNDF6XCJdLG11c2ljOls1MTIsNTEyLFtdLFwiZjAwMVwiLFwiTTQ3MC40IDEuNWwtMzA0IDk2QzE1My4xIDEwMS43IDE0NCAxMTQgMTQ0IDEyOHYyNjQuNmMtMTQuMS01LjQtMzAuNS04LjYtNDgtOC42LTUzIDAtOTYgMjguNy05NiA2NHM0MyA2NCA5NiA2NCA5Ni0yOC43IDk2LTY0VjIyMC41bDI3Mi04NS45djE5NGMtMTQuMS01LjQtMzAuNS04LjYtNDgtOC42LTUzIDAtOTYgMjguNy05NiA2NHM0MyA2NCA5NiA2NCA5Ni0yOC43IDk2LTY0VjMyYzAtMjEuNy0yMS4xLTM3LTQxLjYtMzAuNXpcIl0sbmV1dGVyOlsyODgsNTEyLFtdLFwiZjIyY1wiLFwiTTI4OCAxNzZjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRTMCA5Ni41IDAgMTc2YzAgNjguNSA0Ny45IDEyNS45IDExMiAxNDAuNFY0NjhjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMlYzMTYuNGM2NC4xLTE0LjUgMTEyLTcxLjkgMTEyLTE0MC40em0tMTQ0IDgwYy00NC4xIDAtODAtMzUuOS04MC04MHMzNS45LTgwIDgwLTgwIDgwIDM1LjkgODAgODAtMzUuOSA4MC04MCA4MHpcIl0sbmV3c3BhcGVyOls1NzYsNTEyLFtdLFwiZjFlYVwiLFwiTTU1MiA2NEg4OGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djhIMjRjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYyNzJjMCAzMC45MjggMjUuMDcyIDU2IDU2IDU2aDQ3MmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4Vjg4YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpNNTYgNDAwYTggOCAwIDAgMS04LThWMTQ0aDE2djI0OGE4IDggMCAwIDEtOCA4em0yMzYtMTZIMTQwYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi04YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTUyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2OGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyem0yMDggMEgzNDhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LThjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY4YzAgNi42MjctNS4zNzMgMTItMTIgMTJ6bS0yMDgtOTZIMTQwYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi04YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTUyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2OGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyem0yMDggMEgzNDhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LThjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY4YzAgNi42MjctNS4zNzMgMTItMTIgMTJ6bTAtOTZIMTQwYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi00MGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDM2MGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjQwYzAgNi42MjctNS4zNzMgMTItMTIgMTJ6XCJdLFwibm90LWVxdWFsXCI6WzQ0OCw1MTIsW10sXCJmNTNlXCIsXCJNNDE2IDIwOGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi0zMmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyaC0yMy44OGw1MS44Ny02Ni44MWM1LjM3LTcuMDIgNC4wNC0xNy4wNi0yLjk3LTIyLjQzTDQxNS42MSAzLjNjLTcuMDItNS4zOC0xNy4wNi00LjA0LTIyLjQ0IDIuOTdMMzExLjA5IDExMkgzMmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnYzMmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDIwNC41NmwtNzQuNTMgOTZIMzJjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2MzJjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg1NS40OWwtNTEuODcgNjYuODFjLTUuMzcgNy4wMS00LjA0IDE3LjA1IDIuOTcgMjIuNDNMNjQgNTA4LjdjNy4wMiA1LjM4IDE3LjA2IDQuMDQgMjIuNDMtMi45N0wxNjguNTIgNDAwSDQxNmMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi0zMmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMySDI0My4wNWw3NC41My05Nkg0MTZ6XCJdLFwibm90ZXMtbWVkaWNhbFwiOlszODQsNTEyLFtdLFwiZjQ4MVwiLFwiTTMzNiA2NGgtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4OGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTE5MiA0MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6bTk2IDMwNGMwIDQuNC0zLjYgOC04IDhoLTU2djU2YzAgNC40LTMuNiA4LTggOGgtNDhjLTQuNCAwLTgtMy42LTgtOHYtNTZoLTU2Yy00LjQgMC04LTMuNi04LTh2LTQ4YzAtNC40IDMuNi04IDgtOGg1NnYtNTZjMC00LjQgMy42LTggOC04aDQ4YzQuNCAwIDggMy42IDggOHY1Nmg1NmM0LjQgMCA4IDMuNiA4IDh2NDh6bTAtMTkyYzAgNC40LTMuNiA4LTggOEgxMDRjLTQuNCAwLTgtMy42LTgtOHYtMTZjMC00LjQgMy42LTggOC04aDE3NmM0LjQgMCA4IDMuNiA4IDh2MTZ6XCJdLFwib2JqZWN0LWdyb3VwXCI6WzUxMiw1MTIsW10sXCJmMjQ3XCIsXCJNNDgwIDEyOFY5NmgyMGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyVjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjIwSDY0VjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTJDNS4zNzMgMzIgMCAzNy4zNzMgMCA0NHY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDIwdjMyMEgxMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTIwaDM4NHYyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTIwVjEyOHpNOTYgMjc2VjE0MGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE2OGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjEzNmMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDEwOGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnptMzIwIDk2YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMjM2Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi01Mmg3MmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTcyaDg0YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MTM2elwiXSxcIm9iamVjdC11bmdyb3VwXCI6WzU3Niw1MTIsW10sXCJmMjQ4XCIsXCJNNjQgMzIwdjI2YTYgNiAwIDAgMS02IDZINmE2IDYgMCAwIDEtNi02di01MmE2IDYgMCAwIDEgNi02aDI2Vjk2SDZhNiA2IDAgMCAxLTYtNlYzOGE2IDYgMCAwIDEgNi02aDUyYTYgNiAwIDAgMSA2IDZ2MjZoMjg4VjM4YTYgNiAwIDAgMSA2LTZoNTJhNiA2IDAgMCAxIDYgNnY1MmE2IDYgMCAwIDEtNiA2aC0yNnYxOTJoMjZhNiA2IDAgMCAxIDYgNnY1MmE2IDYgMCAwIDEtNiA2aC01MmE2IDYgMCAwIDEtNi02di0yNkg2NHptNDgwLTY0di0zMmgyNmE2IDYgMCAwIDAgNi02di01MmE2IDYgMCAwIDAtNi02aC01MmE2IDYgMCAwIDAtNiA2djI2SDQwOHY3Mmg4YzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHY2NGMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRoLTY0Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjR2LThIMTkydjcyaC0yNmE2IDYgMCAwIDAtNiA2djUyYTYgNiAwIDAgMCA2IDZoNTJhNiA2IDAgMCAwIDYtNnYtMjZoMjg4djI2YTYgNiAwIDAgMCA2IDZoNTJhNiA2IDAgMCAwIDYtNnYtNTJhNiA2IDAgMCAwLTYtNmgtMjZWMjU2elwiXSxvdXRkZW50Ols0NDgsNTEyLFtdLFwiZjAzYlwiLFwiTTAgODRWNDRjMC04LjgzNyA3LjE2My0xNiAxNi0xNmg0MTZjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnY0MGMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDE2Yy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2em0yMDggMTQ0aDIyNGM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDIwOGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2ek0xNiA0ODRoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMTkyLTEyOGgyMjRjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgyMDhjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnpNNC42ODcgMjY3LjMxM2w5NiA5NS45ODRDMTEwLjczNCAzNzMuMzQ4IDEyOCAzNjYuMjI0IDEyOCAzNTEuOTg0VjE2MC4wMDhjMC0xNC4zMjktMTcuMzI1LTIxLjMwNC0yNy4zMTMtMTEuMzEzbC05NiA5NS45OTJjLTYuMjQ5IDYuMjQ4LTYuMjQ5IDE2LjM3OCAwIDIyLjYyNnpcIl0sXCJwYWludC1icnVzaFwiOls1MTIsNTEyLFtdLFwiZjFmY1wiLFwiTTE2Ny4wMiAzMDkuMzRjLTQwLjEyIDIuNTgtNzYuNTMgMTcuODYtOTcuMTkgNzIuMy0yLjM1IDYuMjEtOCA5Ljk4LTE0LjU5IDkuOTgtMTEuMTEgMC00NS40Ni0yNy42Ny01NS4yNS0zNC4zNUMwIDQzOS42MiAzNy45MyA1MTIgMTI4IDUxMmM3NS44NiAwIDEyOC00My43NyAxMjgtMTIwLjE5IDAtMy4xMS0uNjUtNi4wOC0uOTctOS4xM2wtODguMDEtNzMuMzR6TTQ1Ny44OSAwYy0xNS4xNiAwLTI5LjM3IDYuNzEtNDAuMjEgMTYuNDVDMjEzLjI3IDE5OS4wNSAxOTIgMjAzLjM0IDE5MiAyNTcuMDljMCAxMy43IDMuMjUgMjYuNzYgOC43MyAzOC43bDYzLjgyIDUzLjE4YzcuMjEgMS44IDE0LjY0IDMuMDMgMjIuMzkgMy4wMyA2Mi4xMSAwIDk4LjExLTQ1LjQ3IDIxMS4xNi0yNTYuNDYgNy4zOC0xNC4zNSAxMy45LTI5Ljg1IDEzLjktNDUuOTlDNTEyIDIwLjY0IDQ4NiAwIDQ1Ny44OSAwelwiXSxcInBhaW50LXJvbGxlclwiOls1MTIsNTEyLFtdLFwiZjVhYVwiLFwiTTQxNiAxMjhWMzJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMkgzMkMxNC4zMyAwIDAgMTQuMzMgMCAzMnY5NmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDM1MmMxNy42NyAwIDMyLTE0LjMzIDMyLTMyem0zMi02NHYxMjhjMCAxNy42Ny0xNC4zMyAzMi0zMiAzMkgyNTZjLTM1LjM1IDAtNjQgMjguNjUtNjQgNjR2MzJjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2MTI4YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlYzNTJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnYtMzJoMTYwYzUzLjAyIDAgOTYtNDIuOTggOTYtOTZ2LTY0YzAtMzUuMzUtMjguNjUtNjQtNjQtNjR6XCJdLHBhbGV0dGU6WzUxMiw1MTIsW10sXCJmNTNmXCIsXCJNMjA0LjMgNUMxMDQuOSAyNC40IDI0LjggMTA0LjMgNS4yIDIwMy40Yy0zNyAxODcgMTMxLjcgMzI2LjQgMjU4LjggMzA2LjcgNDEuMi02LjQgNjEuNC01NC42IDQyLjUtOTEuNy0yMy4xLTQ1LjQgOS45LTk4LjQgNjAuOS05OC40aDc5LjdjMzUuOCAwIDY0LjgtMjkuNiA2NC45LTY1LjNDNTExLjUgOTcuMSAzNjguMS0yNi45IDIwNC4zIDV6TTk2IDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTMyLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTEyOC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6bTEyOCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6XCJdLHBhbGxldDpbNjQwLDUxMixbXSxcImY0ODJcIixcIk0xNDQgMjU2aDM1MmM4LjggMCAxNi03LjIgMTYtMTZWMTZjMC04LjgtNy4yLTE2LTE2LTE2SDM4NHYxMjhsLTY0LTMyLTY0IDMyVjBIMTQ0Yy04LjggMC0xNiA3LjItMTYgMTZ2MjI0YzAgOC44IDcuMiAxNiAxNiAxNnptNDgwIDEyOGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNkgxNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg0OHY2NEgxNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg2MDhjOC44IDAgMTYtNy4yIDE2LTE2di0zMmMwLTguOC03LjItMTYtMTYtMTZoLTQ4di02NGg0OHptLTMzNiA2NEgxMjh2LTY0aDE2MHY2NHptMjI0IDBIMzUydi02NGgxNjB2NjR6XCJdLFwicGFwZXItcGxhbmVcIjpbNTEyLDUxMixbXSxcImYxZDhcIixcIk00NzYgMy4yTDEyLjUgMjcwLjZjLTE4LjEgMTAuNC0xNS44IDM1LjYgMi4yIDQzLjJMMTIxIDM1OC40bDI4Ny4zLTI1My4yYzUuNS00LjkgMTMuMyAyLjYgOC42IDguM0wxNzYgNDA3djgwLjVjMCAyMy42IDI4LjUgMzIuOSA0Mi41IDE1LjhMMjgyIDQyNmwxMjQuNiA1Mi4yYzE0LjIgNiAzMC40LTIuOSAzMy0xOC4ybDcyLTQzMkM1MTUgNy44IDQ5My4zLTYuOCA0NzYgMy4yelwiXSxwYXBlcmNsaXA6WzQ0OCw1MTIsW10sXCJmMGM2XCIsXCJNNDMuMjQ2IDQ2Ni4xNDJjLTU4LjQzLTYwLjI4OS01Ny4zNDEtMTU3LjUxMSAxLjM4Ni0yMTcuNTgxTDI1NC4zOTIgMzRjNDQuMzE2LTQ1LjMzMiAxMTYuMzUxLTQ1LjMzNiAxNjAuNjcxIDAgNDMuODkgNDQuODk0IDQzLjk0MyAxMTcuMzI5IDAgMTYyLjI3NkwyMzIuMjE0IDM4My4xMjhjLTI5Ljg1NSAzMC41MzctNzguNjMzIDMwLjExMS0xMDcuOTgyLS45OTgtMjguMjc1LTI5Ljk3LTI3LjM2OC03Ny40NzMgMS40NTItMTA2Ljk1M2wxNDMuNzQzLTE0Ni44MzVjNi4xODItNi4zMTQgMTYuMzEyLTYuNDIyIDIyLjYyNi0uMjQxbDIyLjg2MSAyMi4zNzljNi4zMTUgNi4xODIgNi40MjIgMTYuMzEyLjI0MSAyMi42MjZMMTcxLjQyNyAzMTkuOTI3Yy00LjkzMiA1LjA0NS01LjIzNiAxMy40MjgtLjY0OCAxOC4yOTIgNC4zNzIgNC42MzQgMTEuMjQ1IDQuNzExIDE1LjY4OC4xNjVsMTgyLjg0OS0xODYuODUxYzE5LjYxMy0yMC4wNjIgMTkuNjEzLTUyLjcyNS0uMDExLTcyLjc5OC0xOS4xODktMTkuNjI3LTQ5Ljk1Ny0xOS42MzctNjkuMTU0IDBMOTAuMzkgMjkzLjI5NWMtMzQuNzYzIDM1LjU2LTM1LjI5OSA5My4xMi0xLjE5MSAxMjguMzEzIDM0LjAxIDM1LjA5MyA4OC45ODUgMzUuMTM3IDEyMy4wNTguMjg2bDE3Mi4wNi0xNzUuOTk5YzYuMTc3LTYuMzE5IDE2LjMwNy02LjQzMyAyMi42MjYtLjI1NmwyMi44NzcgMjIuMzY0YzYuMzE5IDYuMTc3IDYuNDM0IDE2LjMwNy4yNTYgMjIuNjI2bC0xNzIuMDYgMTc1Ljk5OGMtNTkuNTc2IDYwLjkzOC0xNTUuOTQzIDYwLjIxNi0yMTQuNzctLjQ4NXpcIl0sXCJwYXJhY2h1dGUtYm94XCI6WzUxMiw1MTIsW10sXCJmNGNkXCIsXCJNNTExLjkgMTc1Yy05LjEtNzUuNi03OC40LTEzMi40LTE1OC4zLTE1OC43QzM5MCA1NS43IDQxNiAxMTYuOSA0MTYgMTkyaDI4LjFMMzI3LjUgMzIxLjVjLTIuNS0uNi00LjgtMS41LTcuNS0xLjVoLTQ4VjE5MmgxMTJDMzg0IDc2LjggMzE1LjEgMCAyNTYgMFMxMjggNzYuOCAxMjggMTkyaDExMnYxMjhoLTQ4Yy0yLjcgMC01IC45LTcuNSAxLjVMNjcuOSAxOTJIOTZjMC03NS4xIDI2LTEzNi4zIDYyLjQtMTc1LjdDNzguNSA0Mi43IDkuMiA5OS41LjEgMTc1Yy0xLjEgOS4xIDYuOCAxNyAxNiAxN2g4LjdsMTM2LjcgMTUxLjljLS43IDIuNi0xLjYgNS4yLTEuNiA4LjF2MTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0yLjktLjktNS40LTEuNi04LjFMNDg3LjEgMTkyaDguN2M5LjMgMCAxNy4yLTcuOCAxNi4xLTE3elwiXSxwYXJhZ3JhcGg6WzQ0OCw1MTIsW10sXCJmMWRkXCIsXCJNNDA4IDMySDE3Ny41MzFDODguOTQ4IDMyIDE2LjA0NSAxMDMuMzM1IDE2IDE5MS45MTggMTUuOTU2IDI4MC4zMjEgODcuNjA3IDM1MiAxNzYgMzUydjEwNGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzJjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjExMmgzMnYzNDRjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDMyYzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxMTJoNDBjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjU2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpcIl0scGFya2luZzpbNDQ4LDUxMixbXSxcImY1NDBcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0yNDAgMzIwaC00OHY0OGMwIDguOC03LjIgMTYtMTYgMTZoLTMyYy04LjggMC0xNi03LjItMTYtMTZWMTQ0YzAtOC44IDcuMi0xNiAxNi0xNmg5NmM1Mi45IDAgOTYgNDMuMSA5NiA5NnMtNDMuMSA5Ni05NiA5NnptMC0xMjhoLTQ4djY0aDQ4YzE3LjYgMCAzMi0xNC40IDMyLTMycy0xNC40LTMyLTMyLTMyelwiXSxwYXNzcG9ydDpbNDQ4LDUxMixbXSxcImY1YWJcIixcIk0xMjkuNjIgMTc2aDM5LjA5YzEuNDktMjcuMDMgNi41NC01MS4zNSAxNC4yMS03MC40MS0yNy43MSAxMy4yNC00OC4wMiAzOS4xOS01My4zIDcwLjQxem0wIDMyYzUuMjkgMzEuMjIgMjUuNTkgNTcuMTcgNTMuMyA3MC40MS03LjY4LTE5LjA2LTEyLjcyLTQzLjM4LTE0LjIxLTcwLjQxaC0zOS4wOXpNMjI0IDI4Ni42OWM3LjY5LTcuNDUgMjAuNzctMzQuNDIgMjMuNDMtNzguNjloLTQ2Ljg3YzIuNjcgNDQuMjYgMTUuNzUgNzEuMjQgMjMuNDQgNzguNjl6TTIwMC41NyAxNzZoNDYuODdjLTIuNjYtNDQuMjYtMTUuNzQtNzEuMjQtMjMuNDMtNzguNjktNy43IDcuNDUtMjAuNzggMzQuNDMtMjMuNDQgNzguNjl6bTY0LjUxIDEwMi40MWMyNy43MS0xMy4yNCA0OC4wMi0zOS4xOSA1My4zLTcwLjQxaC0zOS4wOWMtMS40OSAyNy4wMy02LjUzIDUxLjM1LTE0LjIxIDcwLjQxek00MTYgMEg2NEMyOC42NSAwIDAgMjguNjUgMCA2NHYzODRjMCAzNS4zNSAyOC42NSA2NCA2NCA2NGgzNTJjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlYzMmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyem0tODAgNDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgyMjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bS0xMTItOTZjLTcwLjY5IDAtMTI4LTU3LjMxLTEyOC0xMjhTMTUzLjMxIDY0IDIyNCA2NHMxMjggNTcuMzEgMTI4IDEyOC01Ny4zMSAxMjgtMTI4IDEyOHptNDEuMDgtMjE0LjQxYzcuNjggMTkuMDYgMTIuNzIgNDMuMzggMTQuMjEgNzAuNDFoMzkuMDljLTUuMjgtMzEuMjItMjUuNTktNTcuMTctNTMuMy03MC40MXpcIl0scGFzdGU6WzQ0OCw1MTIsW10sXCJmMGVhXCIsXCJNMTI4IDE4NGMwLTMwLjg3OSAyNS4xMjItNTYgNTYtNTZoMTM2VjU2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNGgtODAuNjFDMjA0LjMwNiAxMi44OSAxODMuNjM3IDAgMTYwIDBzLTQ0LjMwNiAxMi44OS01NS4zOSAzMkgyNEMxMC43NDUgMzIgMCA0Mi43NDUgMCA1NnYzMzZjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEwNFYxODR6bTMyLTE0NGMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjRzLTEwLjc0NSAyNC0yNCAyNC0yNC0xMC43NDUtMjQtMjQgMTAuNzQ1LTI0IDI0LTI0em0xODQgMjQ4aDEwNHYyMDBjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDE4NGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjE4NGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoMTM2djEwNGMwIDEzLjIgMTAuOCAyNCAyNCAyNHptMTA0LTM4LjA1OVYyNTZoLTk2di05Nmg2LjA1OWEyNCAyNCAwIDAgMSAxNi45NyA3LjAyOWw2NS45NDEgNjUuOTQxYTI0LjAwMiAyNC4wMDIgMCAwIDEgNy4wMyAxNi45NzF6XCJdLHBhdXNlOls0NDgsNTEyLFtdLFwiZjA0Y1wiLFwiTTE0NCA0NzlINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4Vjc5YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMzA0LTQ4Vjc5YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4aC05NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4elwiXSxcInBhdXNlLWNpcmNsZVwiOls1MTIsNTEyLFtdLFwiZjI4YlwiLFwiTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bS0xNiAzMjhjMCA4LjgtNy4yIDE2LTE2IDE2aC00OGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoNDhjOC44IDAgMTYgNy4yIDE2IDE2djE2MHptMTEyIDBjMCA4LjgtNy4yIDE2LTE2IDE2aC00OGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoNDhjOC44IDAgMTYgNy4yIDE2IDE2djE2MHpcIl0scGF3Ols1MTIsNTEyLFtdLFwiZjFiMFwiLFwiTTg1LjIzMSAzMzAuOTU4QzM2IDMzMC45NTggMCAyNzMuNzkyIDAgMjMxLjVjMC0yOC4yOTIgMTYtNTguMDQyIDQ5LjUzOC01OC4wNDIgNDkuMjMxIDAgODUuMjMxIDU3LjQ1OCA4NS4yMzEgOTkuNzUgMCAyOC4yOTItMTUuNjkyIDU3Ljc1LTQ5LjUzOCA1Ny43NXptMzQ4IDEwNi4xNjdjMCAzNy4wNDItMzIgNDIuODc1LTYzLjM4NSA0Mi44NzUtNDEuMjMxIDAtNzQuNDYyLTI2LjI1LTExMy44NDYtMjYuMjUtNDEuMjMxIDAtNzYuMzA4IDI1Ljk1OC0xMjAuOTIzIDI1Ljk1OC0yOS44NDcgMC01Ni4zMDgtOS42MjUtNTYuMzA4LTQyLjU4M0M3OC43NjkgMzY4IDE4MC42MTYgMjY1LjMzMyAyNTYgMjY1LjMzM3MxNzcuMjMxIDEwMi45NTkgMTc3LjIzMSAxNzEuNzkyek0xODIuNDYyIDIwMy43OTJjLTQ5Ljg0NyAwLTgwLTU5LjUtODAtMTAwLjMzM0MxMDIuNDYyIDcwLjc5MiAxMjAuMzA4IDMyIDE2MCAzMmM1MC4xNTQgMCA4MCA1OS41IDgwIDEwMC4zMzMgMCAzMi42NjctMTcuODQ2IDcxLjQ1OS01Ny41MzggNzEuNDU5ek0yNzIgMTMyLjMzM0MyNzIgOTEuNSAzMDEuODQ2IDMyIDM1MiAzMmMzOS42OTIgMCA1Ny41MzkgMzguNzkyIDU3LjUzOSA3MS40NTggMCA0MC44MzMtMzAuMTU0IDEwMC4zMzMtODAuMDAxIDEwMC4zMzNDMjg5Ljg0NiAyMDMuNzkyIDI3MiAxNjUgMjcyIDEzMi4zMzN6TTUxMiAyMzEuNWMwIDQyLjI5Mi0zNiA5OS40NTgtODUuMjMxIDk5LjQ1OC0zMy44NDcgMC00OS41MzgtMjkuNDU4LTQ5LjUzOC01Ny43NSAwLTQyLjI5MSAzNS45OTktOTkuNzUgODUuMjMxLTk5Ljc1QzQ5NiAxNzMuNDU4IDUxMiAyMDMuMjA4IDUxMiAyMzEuNXpcIl0scGVuOls1MTIsNTEyLFtdLFwiZjMwNFwiLFwiTTI5MC43NCA5My4yNGwxMjguMDIgMTI4LjAyLTI3Ny45OSAyNzcuOTktMTE0LjE0IDEyLjZDMTEuMzUgNTEzLjU0LTEuNTYgNTAwLjYyLjE0IDQ4NS4zNGwxMi43LTExNC4yMiAyNzcuOS0yNzcuODh6bTIwNy4yLTE5LjA2bC02MC4xMS02MC4xMWMtMTguNzUtMTguNzUtNDkuMTYtMTguNzUtNjcuOTEgMGwtNTYuNTUgNTYuNTUgMTI4LjAyIDEyOC4wMiA1Ni41NS01Ni41NWMxOC43NS0xOC43NiAxOC43NS00OS4xNiAwLTY3LjkxelwiXSxcInBlbi1hbHRcIjpbNTEyLDUxMixbXSxcImYzMDVcIixcIk00OTcuOTQgNzQuMTdsLTYwLjExLTYwLjExYy0xOC43NS0xOC43NS00OS4xNi0xOC43NS02Ny45MSAwbC01Ni41NSA1Ni41NSAxMjguMDIgMTI4LjAyIDU2LjU1LTU2LjU1YzE4Ljc1LTE4Ljc1IDE4Ljc1LTQ5LjE1IDAtNjcuOTF6bS0yNDYuOC0yMC41M2MtMTUuNjItMTUuNjItNDAuOTQtMTUuNjItNTYuNTYgMEw3NS44IDE3Mi40M2MtNi4yNSA2LjI1LTYuMjUgMTYuMzggMCAyMi42MmwyMi42MyAyMi42M2M2LjI1IDYuMjUgMTYuMzggNi4yNSAyMi42MyAwbDEwMS44Mi0xMDEuODIgMjIuNjMgMjIuNjJMOTMuOTUgMjkwLjAzQTMyNy4wMzggMzI3LjAzOCAwIDAgMCAuMTcgNDg1LjExbC0uMDMuMjNjLTEuNyAxNS4yOCAxMS4yMSAyOC4yIDI2LjQ5IDI2LjUxYTMyNy4wMiAzMjcuMDIgMCAwIDAgMTk1LjM0LTkzLjhsMTk2Ljc5LTE5Ni43OS04Mi43Ny04Mi43Ny04NC44NS04NC44NXpcIl0sXCJwZW4tZmFuY3lcIjpbNTEyLDUxMixbXSxcImY1YWNcIixcIk03OS4xOCAyODIuOTRhMzIuMDA1IDMyLjAwNSAwIDAgMC0yMC4yNCAyMC4yNEwwIDQ4MGw0LjY5IDQuNjkgOTIuODktOTIuODljLS42Ni0yLjU2LTEuNTctNS4wMy0xLjU3LTcuOCAwLTE3LjY3IDE0LjMzLTMyIDMyLTMyczMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyYy0yLjc3IDAtNS4yNC0uOTEtNy44LTEuNTdsLTkyLjg5IDkyLjg5TDMyIDUxMmwxNzYuODItNTguOTRhMzEuOTgzIDMxLjk4MyAwIDAgMCAyMC4yNC0yMC4yNGwzMy4wNy04NC4wNy05OC44OC05OC44OC04NC4wNyAzMy4wN3pNMzY5LjI1IDI4LjMyTDE4Ni4xNCAyMjcuODFsOTcuODUgOTcuODUgMTk5LjQ5LTE4My4xMUM1NjguNCA2Ny40OCA0NDMuNzMtNTUuOTQgMzY5LjI1IDI4LjMyelwiXSxcInBlbi1uaWJcIjpbNTEyLDUxMixbXSxcImY1YWRcIixcIk0xMzYuNiAxMzguNzlhNjQuMDAzIDY0LjAwMyAwIDAgMC00My4zMSA0MS4zNUwwIDQ2MGwxNC42OSAxNC42OUwxNjQuOCAzMjQuNThjLTIuOTktNi4yNi00LjgtMTMuMTgtNC44LTIwLjU4IDAtMjYuNTEgMjEuNDktNDggNDgtNDhzNDggMjEuNDkgNDggNDgtMjEuNDkgNDgtNDggNDhjLTcuNCAwLTE0LjMyLTEuODEtMjAuNTgtNC44TDM3LjMxIDQ5Ny4zMSA1MiA1MTJsMjc5Ljg2LTkzLjI5YTY0LjAwMyA2NC4wMDMgMCAwIDAgNDEuMzUtNDMuMzFMNDE2IDIyNCAyODggOTZsLTE1MS40IDQyLjc5em0zNjEuMzQtNjQuNjJsLTYwLjExLTYwLjExYy0xOC43NS0xOC43NS00OS4xNi0xOC43NS02Ny45MSAwbC01Ni41NSA1Ni41NSAxMjguMDIgMTI4LjAyIDU2LjU1LTU2LjU1YzE4Ljc1LTE4Ljc1IDE4Ljc1LTQ5LjE1IDAtNjcuOTF6XCJdLFwicGVuLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE0YlwiLFwiTTQwMCA0ODBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHYzNTJjMCAyNi41LTIxLjUgNDgtNDggNDh6TTIzOC4xIDE3Ny45TDEwMi40IDMxMy42bC02LjMgNTcuMWMtLjggNy42IDUuNiAxNC4xIDEzLjMgMTMuM2w1Ny4xLTYuM0wzMDIuMiAyNDJjMi4zLTIuMyAyLjMtNi4xIDAtOC41TDI0Ni43IDE3OGMtMi41LTIuNC02LjMtMi40LTguNi0uMXpNMzQ1IDE2NS4xTDMxNC45IDEzNWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTIzLjEgMjMuMWMtMi4zIDIuMy0yLjMgNi4xIDAgOC41bDU1LjUgNTUuNWMyLjMgMi4zIDYuMSAyLjMgOC41IDBMMzQ1IDE5OWM5LjMtOS4zIDkuMy0yNC41IDAtMzMuOXpcIl0sXCJwZW5jaWwtYWx0XCI6WzUxMiw1MTIsW10sXCJmMzAzXCIsXCJNNDk3LjkgMTQyLjFsLTQ2LjEgNDYuMWMtNC43IDQuNy0xMi4zIDQuNy0xNyAwbC0xMTEtMTExYy00LjctNC43LTQuNy0xMi4zIDAtMTdsNDYuMS00Ni4xYzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDYwLjEgNjAuMWMxOC44IDE4LjcgMTguOCA0OS4xIDAgNjcuOXpNMjg0LjIgOTkuOEwyMS42IDM2Mi40LjQgNDgzLjljLTIuOSAxNi40IDExLjQgMzAuNiAyNy44IDI3LjhsMTIxLjUtMjEuMyAyNjIuNi0yNjIuNmM0LjctNC43IDQuNy0xMi4zIDAtMTdsLTExMS0xMTFjLTQuOC00LjctMTIuNC00LjctMTcuMSAwek0xMjQuMSAzMzkuOWMtNS41LTUuNS01LjUtMTQuMyAwLTE5LjhsMTU0LTE1NGM1LjUtNS41IDE0LjMtNS41IDE5LjggMHM1LjUgMTQuMyAwIDE5LjhsLTE1NCAxNTRjLTUuNSA1LjUtMTQuMyA1LjUtMTkuOCAwek04OCA0MjRoNDh2MzYuM2wtNjQuNSAxMS4zLTMxLjEtMzEuMUw1MS43IDM3Nkg4OHY0OHpcIl0sXCJwZW5jaWwtcnVsZXJcIjpbNTEyLDUxMixbXSxcImY1YWVcIixcIk0xMDkuNDYgMjQ0LjA0bDEzNC41OC0xMzQuNTYtNDQuMTItNDQuMTItNjEuNjggNjEuNjhhNy45MTkgNy45MTkgMCAwIDEtMTEuMjEgMGwtMTEuMjEtMTEuMjFjLTMuMS0zLjEtMy4xLTguMTIgMC0xMS4yMWw2MS42OC02MS42OC0zMy42NC0zMy42NUMxMzEuNDctMy4xIDExMS4zOS0zLjEgOTkgOS4yOUw5LjI5IDk5Yy0xMi4zOCAxMi4zOS0xMi4zOSAzMi40NyAwIDQ0Ljg2bDEwMC4xNyAxMDAuMTh6bTM4OC40Ny0xMTYuOGMxOC43Ni0xOC43NiAxOC43NS00OS4xNyAwLTY3LjkzbC00NS4yNS00NS4yNWMtMTguNzYtMTguNzYtNDkuMTgtMTguNzYtNjcuOTUgMGwtNDYuMDIgNDYuMDEgMTEzLjIgMTEzLjIgNDYuMDItNDYuMDN6TTMxNi4wOCA4Mi43MWwtMjk3IDI5Ni45NkwuMzIgNDg3LjExYy0yLjUzIDE0LjQ5IDEwLjA5IDI3LjExIDI0LjU5IDI0LjU2bDEwNy40NS0xOC44NEw0MjkuMjggMTk1LjkgMzE2LjA4IDgyLjcxem0xODYuNjMgMjg1LjQzbC0zMy42NC0zMy42NC02MS42OCA2MS42OGMtMy4xIDMuMS04LjEyIDMuMS0xMS4yMSAwbC0xMS4yMS0xMS4yMWMtMy4wOS0zLjEtMy4wOS04LjEyIDAtMTEuMjFsNjEuNjgtNjEuNjgtNDQuMTQtNDQuMTRMMjY3LjkzIDQwMi41bDEwMC4yMSAxMDAuMmMxMi4zOSAxMi4zOSAzMi40NyAxMi4zOSA0NC44NiAwbDg5LjcxLTg5LjdjMTIuMzktMTIuMzkgMTIuMzktMzIuNDcgMC00NC44NnpcIl0sXCJwZW9wbGUtY2FycnlcIjpbNjQwLDUxMixbXSxcImY0Y2VcIixcIk0xMjggOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhTMTU0LjUgMCAxMjggMCA4MCAyMS41IDgwIDQ4czIxLjUgNDggNDggNDh6bTM4NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4UzUzOC41IDAgNTEyIDBzLTQ4IDIxLjUtNDggNDggMjEuNSA0OCA0OCA0OHptMTI1LjcgMzcyLjFsLTQ0LTExMC00MS4xIDQ2LjQtMiAxOC4yIDI3LjcgNjkuMmM1IDEyLjUgMTcgMjAuMSAyOS43IDIwLjEgNCAwIDgtLjcgMTEuOS0yLjMgMTYuNC02LjYgMjQuNC0yNS4yIDE3LjgtNDEuNnptLTM0LjItMjA5LjhMNTg1IDE3OC4xYy00LjYtMjAtMTguNi0zNi44LTM3LjUtNDQuOS0xOC41LTgtMzktNi43LTU2LjEgMy4zLTIyLjcgMTMuNC0zOS43IDM0LjUtNDguMSA1OS40TDQzMiAyMjkuOCA0MTYgMjQwdi05NmMwLTguOC03LjItMTYtMTYtMTZIMjQwYy04LjggMC0xNiA3LjItMTYgMTZ2OTZsLTE2LjEtMTAuMi0xMS4zLTMzLjljLTguMy0yNS0yNS40LTQ2LTQ4LjEtNTkuNC0xNy4yLTEwLTM3LjYtMTEuMy01Ni4xLTMuMy0xOC45IDguMS0zMi45IDI0LjktMzcuNSA0NC45bC0xOC40IDgwLjJjLTQuNiAyMCAuNyA0MS4yIDE0LjQgNTYuN2w2Ny4yIDc1LjkgMTAuMSA5Mi42QzEzMCA0OTkuOCAxNDMuOCA1MTIgMTYwIDUxMmMxLjIgMCAyLjMtLjEgMy41LS4yIDE3LjYtMS45IDMwLjItMTcuNyAyOC4zLTM1LjNsLTEwLjEtOTIuOGMtMS41LTEzLTYuOS0yNS4xLTE1LjYtMzVsLTQzLjMtNDkgMTcuNi03MC4zIDYuOCAyMC40YzQuMSAxMi41IDExLjkgMjMuNCAyNC41IDMyLjZsNTEuMSAzMi41YzQuNiAyLjkgMTIuMSA0LjYgMTcuMiA1aDE2MGM1LjEtLjQgMTIuNi0yLjEgMTcuMi01bDUxLjEtMzIuNWMxMi42LTkuMiAyMC40LTIwIDI0LjUtMzIuNmw2LjgtMjAuNCAxNy42IDcwLjMtNDMuMyA0OWMtOC43IDkuOS0xNC4xIDIyLTE1LjYgMzVsLTEwLjEgOTIuOGMtMS45IDE3LjYgMTAuOCAzMy40IDI4LjMgMzUuMyAxLjIuMSAyLjMuMiAzLjUuMiAxNi4xIDAgMzAtMTIuMSAzMS44LTI4LjVsMTAuMS05Mi42IDY3LjItNzUuOWMxMy42LTE1LjUgMTktMzYuNyAxNC40LTU2Ljd6TTQ2LjMgMzU4LjFsLTQ0IDExMGMtNi42IDE2LjQgMS40IDM1IDE3LjggNDEuNiAxNi44IDYuNiAzNS4xLTEuNyA0MS42LTE3LjhsMjcuNy02OS4yLTItMTguMi00MS4xLTQ2LjR6XCJdLHBlcmNlbnQ6WzQ0OCw1MTIsW10sXCJmMjk1XCIsXCJNMTEyIDIyNGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMlMxNzMuOSAwIDExMiAwIDAgNTAuMSAwIDExMnM1MC4xIDExMiAxMTIgMTEyem0wLTE2MGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OC00OC0yMS41LTQ4LTQ4IDIxLjUtNDggNDgtNDh6bTIyNCAyMjRjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyczUwLjEgMTEyIDExMiAxMTIgMTEyLTUwLjEgMTEyLTExMi01MC4xLTExMi0xMTItMTEyem0wIDE2MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OCA0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDh6TTM5Mi4zLjJsMzEuNi0uMWMxOS40LS4xIDMwLjkgMjEuOCAxOS43IDM3LjhMNzcuNCA1MDEuNmEyMy45NSAyMy45NSAwIDAgMS0xOS42IDEwLjJsLTMzLjQuMWMtMTkuNSAwLTMwLjktMjEuOS0xOS43LTM3LjhsMzY4LTQ2My43QzM3Ny4yIDQgMzg0LjUuMiAzOTIuMy4yelwiXSxwZXJjZW50YWdlOlszODQsNTEyLFtdLFwiZjU0MVwiLFwiTTEwOS4yNSAxNzMuMjVjMjQuOTktMjQuOTkgMjQuOTktNjUuNTIgMC05MC41MS0yNC45OS0yNC45OS02NS41Mi0yNC45OS05MC41MSAwLTI0Ljk5IDI0Ljk5LTI0Ljk5IDY1LjUyIDAgOTAuNTEgMjUgMjUgNjUuNTIgMjUgOTAuNTEgMHptMjU2IDE2NS40OWMtMjQuOTktMjQuOTktNjUuNTItMjQuOTktOTAuNTEgMC0yNC45OSAyNC45OS0yNC45OSA2NS41MiAwIDkwLjUxIDI0Ljk5IDI0Ljk5IDY1LjUyIDI0Ljk5IDkwLjUxIDAgMjUtMjQuOTkgMjUtNjUuNTEgMC05MC41MXptLTEuOTQtMjMxLjQzbC0yMi42Mi0yMi42MmMtMTIuNS0xMi41LTMyLjc2LTEyLjUtNDUuMjUgMEwyMC42OSAzNTkuNDRjLTEyLjUgMTIuNS0xMi41IDMyLjc2IDAgNDUuMjVsMjIuNjIgMjIuNjJjMTIuNSAxMi41IDMyLjc2IDEyLjUgNDUuMjUgMGwyNzQuNzUtMjc0Ljc1YzEyLjUtMTIuNDkgMTIuNS0zMi43NSAwLTQ1LjI1elwiXSxwaG9uZTpbNTEyLDUxMixbXSxcImYwOTVcIixcIk00OTMuNCAyNC42bC0xMDQtMjRjLTExLjMtMi42LTIyLjkgMy4zLTI3LjUgMTMuOWwtNDggMTEyYy00LjIgOS44LTEuNCAyMS4zIDYuOSAyOGw2MC42IDQ5LjZjLTM2IDc2LjctOTguOSAxNDAuNS0xNzcuMiAxNzcuMmwtNDkuNi02MC42Yy02LjgtOC4zLTE4LjItMTEuMS0yOC02LjlsLTExMiA0OEMzLjkgMzY2LjUtMiAzNzguMS42IDM4OS40bDI0IDEwNEMyNy4xIDUwNC4yIDM2LjcgNTEyIDQ4IDUxMmMyNTYuMSAwIDQ2NC0yMDcuNSA0NjQtNDY0IDAtMTEuMi03LjctMjAuOS0xOC42LTIzLjR6XCJdLFwicGhvbmUtc2xhc2hcIjpbNjQwLDUxMixbXSxcImYzZGRcIixcIk0yNjguMiAzODEuNGwtNDkuNi02MC42Yy02LjgtOC4zLTE4LjItMTEuMS0yOC02LjlsLTExMiA0OGMtMTAuNyA0LjYtMTYuNSAxNi4xLTEzLjkgMjcuNWwyNCAxMDRjMi41IDEwLjggMTIuMSAxOC42IDIzLjQgMTguNiAxMDAuNyAwIDE5My43LTMyLjQgMjY5LjctODYuOWwtODAtNjEuOGMtMTAuOSA2LjUtMjIuMSAxMi43LTMzLjYgMTguMXptMzY1LjYgNzYuN0w0NzUuMSAzMzUuNUM1MzcuOSAyNTYuNCA1NzYgMTU2LjkgNTc2IDQ4YzAtMTEuMi03LjctMjAuOS0xOC42LTIzLjRsLTEwNC0yNGMtMTEuMy0yLjYtMjIuOSAzLjMtMjcuNSAxMy45bC00OCAxMTJjLTQuMiA5LjgtMS40IDIxLjMgNi45IDI4bDYwLjYgNDkuNmMtMTIuMiAyNi4xLTI3LjkgNTAuMy00NiA3Mi44TDQ1LjUgMy40QzM4LjUtMiAyOC41LS44IDIzIDYuMkwzLjQgMzEuNGMtNS40IDctNC4yIDE3IDIuOCAyMi40bDU4OC40IDQ1NC43YzcgNS40IDE3IDQuMiAyMi41LTIuOGwxOS42LTI1LjNjNS40LTYuOCA0LjEtMTYuOS0yLjktMjIuM3pcIl0sXCJwaG9uZS1zcXVhcmVcIjpbNDQ4LDUxMixbXSxcImYwOThcIixcIk00MDAgMzJINDhDMjEuNDkgMzIgMCA1My40OSAwIDgwdjM1MmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDM1MmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6TTk0IDQxNmMtNy4wMzMgMC0xMy4wNTctNC44NzMtMTQuNjE2LTExLjYyN2wtMTQuOTk4LTY1YTE1IDE1IDAgMCAxIDguNzA3LTE3LjE2bDY5Ljk5OC0yOS45OTlhMTUgMTUgMCAwIDEgMTcuNTE4IDQuMjg5bDMwLjk5NyAzNy44ODVjNDguOTQ0LTIyLjk2MyA4OC4yOTctNjIuODU4IDExMC43ODEtMTEwLjc4bC0zNy44ODYtMzAuOTk3YTE1LjAwMSAxNS4wMDEgMCAwIDEtNC4yODktMTcuNTE4bDMwLTY5Ljk5OGExNSAxNSAwIDAgMSAxNy4xNi04LjcwN2w2NSAxNC45OThBMTQuOTk3IDE0Ljk5NyAwIDAgMSAzODQgMTI2YzAgMTYwLjI5Mi0xMjkuOTQ1IDI5MC0yOTAgMjkwelwiXSxcInBob25lLXZvbHVtZVwiOlszODQsNTEyLFtdLFwiZjJhMFwiLFwiTTk3LjMzMyA1MDYuOTY2Yy0xMjkuODc0LTEyOS44NzQtMTI5LjY4MS0zNDAuMjUyIDAtNDY5LjkzMyA1LjY5OC01LjY5OCAxNC41MjctNi42MzIgMjEuMjYzLTIuNDIybDY0LjgxNyA0MC41MTNhMTcuMTg3IDE3LjE4NyAwIDAgMSA2Ljg0OSAyMC45NThsLTMyLjQwOCA4MS4wMjFhMTcuMTg4IDE3LjE4OCAwIDAgMS0xNy42NjkgMTAuNzE5bC01NS44MS01LjU4Yy0yMS4wNTEgNTguMjYxLTIwLjYxMiAxMjIuNDcxIDAgMTc5LjUxNWw1NS44MTEtNS41ODFhMTcuMTg4IDE3LjE4OCAwIDAgMSAxNy42NjkgMTAuNzE5bDMyLjQwOCA4MS4wMjJhMTcuMTg4IDE3LjE4OCAwIDAgMS02Ljg0OSAyMC45NThsLTY0LjgxNyA0MC41MTNhMTcuMTkgMTcuMTkgMCAwIDEtMjEuMjY0LTIuNDIyek0yNDcuMTI2IDk1LjQ3M2MxMS44MzIgMjAuMDQ3IDExLjgzMiA0NS4wMDggMCA2NS4wNTUtMy45NSA2LjY5My0xMy4xMDggNy45NTktMTguNzE4IDIuNTgxbC01Ljk3NS01LjcyNmMtMy45MTEtMy43NDgtNC43OTMtOS42MjItMi4yNjEtMTQuNDFhMzIuMDYzIDMyLjA2MyAwIDAgMCAwLTI5Ljk0NWMtMi41MzMtNC43ODgtMS42NS0xMC42NjIgMi4yNjEtMTQuNDFsNS45NzUtNS43MjZjNS42MS01LjM3OCAxNC43NjgtNC4xMTIgMTguNzE4IDIuNTgxem05MS43ODctOTEuMTg3YzYwLjE0IDcxLjYwNCA2MC4wOTIgMTc1Ljg4MiAwIDI0Ny40MjgtNC40NzQgNS4zMjctMTIuNTMgNS43NDYtMTcuNTUyLjkzM2wtNS43OTgtNS41NTdjLTQuNTYtNC4zNzEtNC45NzctMTEuNTI5LS45My0xNi4zNzkgNDkuNjg3LTU5LjUzOCA0OS42NDYtMTQ1LjkzMyAwLTIwNS40MjItNC4wNDctNC44NS0zLjYzMS0xMi4wMDguOTMtMTYuMzc5bDUuNzk4LTUuNTU3YzUuMDIyLTQuODEzIDEzLjA3OC00LjM5NCAxNy41NTIuOTMzem0tNDUuOTcyIDQ0Ljk0MWMzNi4wNSA0Ni4zMjIgMzYuMTA4IDExMS4xNDkgMCAxNTcuNTQ2LTQuMzkgNS42NDEtMTIuNjk3IDYuMjUxLTE3Ljg1NiAxLjMwNGwtNS44MTgtNS41NzljLTQuNC00LjIxOS00Ljk5OC0xMS4wOTUtMS4yODUtMTUuOTMxIDI2LjUzNi0zNC41NjQgMjYuNTM0LTgyLjU3MiAwLTExNy4xMzQtMy43MTMtNC44MzYtMy4xMTUtMTEuNzExIDEuMjg1LTE1LjkzMWw1LjgxOC01LjU3OWM1LjE1OS00Ljk0NyAxMy40NjYtNC4zMzcgMTcuODU2IDEuMzA0elwiXSxcInBpZ2d5LWJhbmtcIjpbNTc2LDUxMixbXSxcImY0ZDNcIixcIk01NjAgMjI0aC0yOS41Yy04LjgtMjAtMjEuNi0zNy43LTM3LjQtNTIuNUw1MTIgOTZoLTMyYy0yOS40IDAtNTUuNCAxMy41LTczIDM0LjMtNy42LTEuMS0xNS4xLTIuMy0yMy0yLjNIMjU2Yy03Ny40IDAtMTQxLjkgNTUtMTU2LjggMTI4SDU2Yy0xNC44IDAtMjYuNS0xMy41LTIzLjUtMjguOEMzNC43IDIxNS44IDQ1LjQgMjA4IDU3IDIwOGgxYzMuMyAwIDYtMi43IDYtNnYtMjBjMC0zLjMtMi43LTYtNi02LTI4LjUgMC01My45IDIwLjQtNTcuNSA0OC42Qy0zLjkgMjU4LjggMjIuNyAyODggNTYgMjg4aDQwYzAgNTIuMiAyNS40IDk4LjEgNjQgMTI3LjNWNDk2YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZ2LTQ4aDEyOHY0OGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2di04MC43YzExLjgtOC45IDIyLjMtMTkuNCAzMS4zLTMxLjNINTYwYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2em0tMTI4IDY0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6TTI1NiA5NmgxMjhjNS40IDAgMTAuNy40IDE1LjkuOCAwLS4zLjEtLjUuMS0uOCAwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDIuMS41IDQuMS42IDYuMiAxNS4yLTMuOSAzMS02LjIgNDcuNC02LjJ6XCJdLHBpbGxzOls1NzYsNTEyLFtdLFwiZjQ4NFwiLFwiTTExMiAzMkM1MC4xIDMyIDAgODIuMSAwIDE0NHYyMjRjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMlYxNDRjMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTQ4IDIyNEg2NFYxNDRjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHYxMTJ6bTEzOS43LTI5LjdjLTMuNS0zLjUtOS40LTMuMS0xMi4zLjgtNDUuMyA2Mi41LTQwLjQgMTUwLjEgMTUuOSAyMDYuNCA1Ni4zIDU2LjMgMTQzLjkgNjEuMiAyMDYuNCAxNS45IDQtMi45IDQuMy04LjguOC0xMi4zTDI5OS43IDIyNi4zem0yMjkuOC0xOWMtNTYuMy01Ni4zLTE0My45LTYxLjItMjA2LjQtMTUuOS00IDIuOS00LjMgOC44LS44IDEyLjNsMjEwLjggMjEwLjhjMy41IDMuNSA5LjQgMy4xIDEyLjMtLjggNDUuMy02Mi42IDQwLjUtMTUwLjEtMTUuOS0yMDYuNHpcIl0scGxhbmU6WzU3Niw1MTIsW10sXCJmMDcyXCIsXCJNNDgwIDE5MkgzNjUuNzFMMjYwLjYxIDguMDZBMTYuMDE0IDE2LjAxNCAwIDAgMCAyNDYuNzEgMGgtNjUuNWMtMTAuNjMgMC0xOC4zIDEwLjE3LTE1LjM4IDIwLjM5TDIxNC44NiAxOTJIMTEybC00My4yLTU3LjZjLTMuMDItNC4wMy03Ljc3LTYuNC0xMi44LTYuNEgxNi4wMUM1LjYgMTI4LTIuMDQgMTM3Ljc4LjQ5IDE0Ny44OEwzMiAyNTYgLjQ5IDM2NC4xMkMtMi4wNCAzNzQuMjIgNS42IDM4NCAxNi4wMSAzODRINTZjNS4wNCAwIDkuNzgtMi4zNyAxMi44LTYuNEwxMTIgMzIwaDEwMi44NmwtNDkuMDMgMTcxLjZjLTIuOTIgMTAuMjIgNC43NSAyMC40IDE1LjM4IDIwLjRoNjUuNWM1Ljc0IDAgMTEuMDQtMy4wOCAxMy44OS04LjA2TDM2NS43MSAzMjBINDgwYzM1LjM1IDAgOTYtMjguNjUgOTYtNjRzLTYwLjY1LTY0LTk2LTY0elwiXSxcInBsYW5lLWFycml2YWxcIjpbNjQwLDUxMixbXSxcImY1YWZcIixcIk02MjQgNDQ4SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYzMmMwIDguODQgNy4xNiAxNiAxNiAxNmg2MDhjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2ek00NC44MSAyMDUuNjZsODguNzQgODBhNjIuNjA3IDYyLjYwNyAwIDAgMCAyNS40NyAxMy45M2wyODcuNiA3OC4zNWMyNi40OCA3LjIxIDU0LjU2IDguNzIgODEgMS4zNiAyOS42Ny04LjI3IDQzLjQ0LTIxLjIxIDQ3LjI1LTM1LjcxIDMuODMtMTQuNS0xLjczLTMyLjcxLTIzLjM3LTU0Ljk2LTE5LjI4LTE5LjgyLTQ0LjM1LTMyLjc5LTcwLjgzLTQwbC05Ny41MS0yNi41NkwyODIuOCAzMC4yMmMtMS41MS01LjgxLTUuOTUtMTAuMzUtMTEuNjYtMTEuOTFMMjA2LjA1LjU4Yy0xMC41Ni0yLjg4LTIwLjkgNS4zMi0yMC43MSAxNi40NGw0Ny45MiAxNjQuMjEtMTAyLjItMjcuODQtMjcuNTktNjcuODhjLTEuOTMtNC44OS02LjAxLTguNTctMTEuMDItOS45M0w1Mi43MiA2NC43NWMtMTAuMzQtMi44Mi0yMC41MyA1LTIwLjcyIDE1Ljg4bC4yMyAxMDEuNzhjLjE5IDguOTEgNi4wMyAxNy4zNCAxMi41OCAyMy4yNXpcIl0sXCJwbGFuZS1kZXBhcnR1cmVcIjpbNjQwLDUxMixbXSxcImY1YjBcIixcIk02MjQgNDQ4SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnYzMmMwIDguODQgNy4xNiAxNiAxNiAxNmg2MDhjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTMyYzAtOC44NC03LjE2LTE2LTE2LTE2ek04MC41NSAzNDEuMjdjNi4yOCA2Ljg0IDE1LjEgMTAuNzIgMjQuMzMgMTAuNzFsMTMwLjU0LS4xOGE2NS42MiA2NS42MiAwIDAgMCAyOS42NC03LjEybDI5MC45Ni0xNDcuNjVjMjYuNzQtMTMuNTcgNTAuNzEtMzIuOTQgNjcuMDItNTguMzEgMTguMzEtMjguNDggMjAuMy00OS4wOSAxMy4wNy02My42NS03LjIxLTE0LjU3LTI0Ljc0LTI1LjI3LTU4LjI1LTI3LjQ1LTI5Ljg1LTEuOTQtNTkuNTQgNS45Mi04Ni4yOCAxOS40OGwtOTguNTEgNDkuOTktMjE4LjctODIuMDZhMTcuNzk5IDE3Ljc5OSAwIDAgMC0xOC0xLjExTDkwLjYyIDY3LjI5Yy0xMC42NyA1LjQxLTEzLjI1IDE5LjY1LTUuMTcgMjguNTNsMTU2LjIyIDk4LjEtMTAzLjIxIDUyLjM4LTcyLjM1LTM2LjQ3YTE3LjgwNCAxNy44MDQgMCAwIDAtMTYuMDcuMDJMOS45MSAyMzAuMjJjLTEwLjQ0IDUuMy0xMy4xOSAxOS4xMi01LjU3IDI4LjA4bDc2LjIxIDgyLjk3elwiXSxwbGF5Ols0NDgsNTEyLFtdLFwiZjA0YlwiLFwiTTQyNC40IDIxNC43TDcyLjQgNi42QzQzLjgtMTAuMyAwIDYuMSAwIDQ3LjlWNDY0YzAgMzcuNSA0MC43IDYwLjEgNzIuNCA0MS4zbDM1Mi0yMDhjMzEuNC0xOC41IDMxLjUtNjQuMSAwLTgyLjZ6XCJdLFwicGxheS1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYxNDRcIixcIk0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0xMTUuNyAyNzJsLTE3NiAxMDFjLTE1LjggOC44LTM1LjctMi41LTM1LjctMjFWMTUyYzAtMTguNCAxOS44LTI5LjggMzUuNy0yMWwxNzYgMTA3YzE2LjQgOS4yIDE2LjQgMzIuOSAwIDQyelwiXSxwbHVnOlszODQsNTEyLFtdLFwiZjFlNlwiLFwiTTI1NiAxNDRWMzJjMC0xNy42NzMgMTQuMzI3LTMyIDMyLTMyczMyIDE0LjMyNyAzMiAzMnYxMTJoLTY0em0xMTIgMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2MzJjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgxNnYzMmMwIDc3LjQwNiA1NC45NjkgMTQxLjk3MSAxMjggMTU2Ljc5NlY1MTJoNjR2LTk5LjIwNGM3My4wMzEtMTQuODI1IDEyOC03OS4zOSAxMjgtMTU2Ljc5NnYtMzJoMTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtMzJjMC04LjgzNy03LjE2My0xNi0xNi0xNnptLTI0MC0xNlYzMmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJTNjQgMTQuMzI3IDY0IDMydjExMmg2NHpcIl0scGx1czpbNDQ4LDUxMixbXSxcImYwNjdcIixcIk00MTYgMjA4SDI3MlY2NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyaC0zMmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnYxNDRIMzJjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2MzJjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmgxNDR2MTQ0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzJjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlYzMDRoMTQ0YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJ6XCJdLFwicGx1cy1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYwNTVcIixcIk0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0xNDQgMjc2YzAgNi42LTUuNCAxMi0xMiAxMmgtOTJ2OTJjMCA2LjYtNS40IDEyLTEyIDEyaC01NmMtNi42IDAtMTItNS40LTEyLTEydi05MmgtOTJjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNTZjMC02LjYgNS40LTEyIDEyLTEyaDkydi05MmMwLTYuNiA1LjQtMTIgMTItMTJoNTZjNi42IDAgMTIgNS40IDEyIDEydjkyaDkyYzYuNiAwIDEyIDUuNCAxMiAxMnY1NnpcIl0sXCJwbHVzLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjBmZVwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bS0zMiAyNTJjMCA2LjYtNS40IDEyLTEyIDEyaC05MnY5MmMwIDYuNi01LjQgMTItMTIgMTJoLTU2Yy02LjYgMC0xMi01LjQtMTItMTJ2LTkySDkyYy02LjYgMC0xMi01LjQtMTItMTJ2LTU2YzAtNi42IDUuNC0xMiAxMi0xMmg5MnYtOTJjMC02LjYgNS40LTEyIDEyLTEyaDU2YzYuNiAwIDEyIDUuNCAxMiAxMnY5Mmg5MmM2LjYgMCAxMiA1LjQgMTIgMTJ2NTZ6XCJdLHBvZGNhc3Q6WzQ0OCw1MTIsW10sXCJmMmNlXCIsXCJNMjY3LjQyOSA0ODguNTYzQzI2Mi4yODYgNTA3LjU3MyAyNDIuODU4IDUxMiAyMjQgNTEyYy0xOC44NTcgMC0zOC4yODYtNC40MjctNDMuNDI4LTIzLjQzN0MxNzIuOTI3IDQ2MC4xMzQgMTYwIDM4OC44OTggMTYwIDM1NS43NWMwLTM1LjE1NiAzMS4xNDItNDMuNzUgNjQtNDMuNzVzNjQgOC41OTQgNjQgNDMuNzVjMCAzMi45NDktMTIuODcxIDEwNC4xNzktMjAuNTcxIDEzMi44MTN6TTE1Ni44NjcgMjg4LjU1NGMtMTguNjkzLTE4LjMwOC0yOS45NTgtNDQuMTczLTI4Ljc4NC03Mi41OTkgMi4wNTQtNDkuNzI0IDQyLjM5NS04OS45NTYgOTIuMTI0LTkxLjg4MUMyNzQuODYyIDEyMS45NTggMzIwIDE2NS44MDcgMzIwIDIyMGMwIDI2LjgyNy0xMS4wNjQgNTEuMTE2LTI4Ljg2NiA2OC41NTItMi42NzUgMi42Mi0yLjQwMSA2Ljk4Ni42MjggOS4xODcgOS4zMTIgNi43NjUgMTYuNDYgMTUuMzQzIDIxLjIzNCAyNS4zNjMgMS43NDEgMy42NTQgNi40OTcgNC42NiA5LjQ0OSAxLjg5MSAyOC44MjYtMjcuMDQzIDQ2LjU1My02NS43ODMgNDUuNTExLTEwOC41NjUtMS44NTUtNzYuMjA2LTYzLjU5NS0xMzguMjA4LTEzOS43OTMtMTQwLjM2OUMxNDYuODY5IDczLjc1MyA4MCAxMzkuMjE1IDgwIDIyMGMwIDQxLjM2MSAxNy41MzIgNzguNyA0NS41NSAxMDQuOTg5IDIuOTUzIDIuNzcxIDcuNzExIDEuNzcgOS40NTMtMS44ODcgNC43NzQtMTAuMDIxIDExLjkyMy0xOC41OTggMjEuMjM1LTI1LjM2MyAzLjAyOS0yLjIgMy4zMDQtNi41NjYuNjI5LTkuMTg1ek0yMjQgMEMxMDAuMjA0IDAgMCAxMDAuMTg1IDAgMjI0YzAgODkuOTkyIDUyLjYwMiAxNjUuNjQ3IDEyNS43MzkgMjAxLjQwOCA0LjMzMyAyLjExOCA5LjI2Ny0xLjU0NCA4LjUzNS02LjMxLTIuMzgyLTE1LjUxMi00LjM0Mi0zMC45NDYtNS40MDYtNDQuMzM5LS4xNDYtMS44MzYtMS4xNDktMy40ODYtMi42NzgtNC41MTItNDcuNC0zMS44MDYtNzguNTY0LTg2LjAxNi03OC4xODctMTQ3LjM0Ny41OTItOTYuMjM3IDc5LjI5LTE3NC42NDggMTc1LjUyOS0xNzQuODk5QzMyMC43OTMgNDcuNzQ3IDQwMCAxMjYuNzk3IDQwMCAyMjRjMCA2MS45MzItMzIuMTU4IDExNi40OS04MC42NSAxNDcuODY3LS45OTkgMTQuMDM3LTMuMDY5IDMwLjU4OC01LjYyNCA0Ny4yMy0uNzMyIDQuNzY3IDQuMjAzIDguNDI5IDguNTM1IDYuMzFDMzk1LjIyNyAzODkuNzI3IDQ0OCAzMTQuMTg3IDQ0OCAyMjQgNDQ4IDEwMC4yMDUgMzQ3LjgxNSAwIDIyNCAwem0wIDE2MGMtMzUuMzQ2IDAtNjQgMjguNjU0LTY0IDY0czI4LjY1NCA2NCA2NCA2NCA2NC0yOC42NTQgNjQtNjQtMjguNjU0LTY0LTY0LTY0elwiXSxwb286WzUxMiw1MTIsW10sXCJmMmZlXCIsXCJNNDUxLjQgMzY5LjFDNDY4LjcgMzU2IDQ4MCAzMzUuNCA0ODAgMzEyYzAtMzkuOC0zMi4yLTcyLTcyLTcyaC0xNC4xYzEzLjQtMTEuNyAyMi4xLTI4LjggMjIuMS00OCAwLTM1LjMtMjguNy02NC02NC02NGgtNS45YzMuNi0xMC4xIDUuOS0yMC43IDUuOS0zMiAwLTUzLTQzLTk2LTk2LTk2LTUuMiAwLTEwLjIuNy0xNS4xIDEuNUMyNTAuMyAxNC42IDI1NiAzMC42IDI1NiA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MGgtMTZjLTM1LjMgMC02NCAyOC43LTY0IDY0IDAgMTkuMiA4LjcgMzYuMyAyMi4xIDQ4SDEwNGMtMzkuOCAwLTcyIDMyLjItNzIgNzIgMCAyMy40IDExLjMgNDQgMjguNiA1Ny4xQzI2LjMgMzc0LjYgMCA0MDQuMSAwIDQ0MGMwIDM5LjggMzIuMiA3MiA3MiA3MmgzNjhjMzkuOCAwIDcyLTMyLjIgNzItNzIgMC0zNS45LTI2LjMtNjUuNC02MC42LTcwLjl6TTE5MiAyNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMiAxNC4zLTMyIDMyLTMyem0xNTkuNSAxMzlDMzQxIDQyMi45IDI5MyA0NDggMjU2IDQ0OHMtODUtMjUuMS05NS41LTUzYy0yLTUuMyAyLTExIDcuOC0xMWgxNzUuNGM1LjggMCA5LjggNS43IDcuOCAxMXpNMzIwIDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMiAzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzJ6XCJdLHBvcnRyYWl0OlszODQsNTEyLFtdLFwiZjNlMFwiLFwiTTMzNiAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xOTIgMTI4YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0LTY0LTI4LjctNjQtNjQgMjguNy02NCA2NC02NHptMTEyIDIzNi44YzAgMTAuNi0xMCAxOS4yLTIyLjQgMTkuMkgxMDIuNEM5MCAzODQgODAgMzc1LjQgODAgMzY0Ljh2LTE5LjJjMC0zMS44IDMwLjEtNTcuNiA2Ny4yLTU3LjZoNWMxMi4zIDUuMSAyNS43IDggMzkuOCA4czI3LjYtMi45IDM5LjgtOGg1YzM3LjEgMCA2Ny4yIDI1LjggNjcuMiA1Ny42djE5LjJ6XCJdLFwicG91bmQtc2lnblwiOlszMjAsNTEyLFtdLFwiZjE1NFwiLFwiTTMwOCAzNTJoLTQ1LjQ5NWMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY1MC44NDhIMTI4VjI4OGg4NGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC04NHYtNjMuNTU2YzAtMzIuMjY2IDI0LjU2Mi01Ny4wODYgNjEuNzkyLTU3LjA4NiAyMy42NTggMCA0NS44NzggMTEuNTA1IDU3LjY1MiAxOC44NDkgNS4xNTEgMy4yMTMgMTEuODg4IDIuMDUxIDE1LjY4OC0yLjY4NWwyOC40OTMtMzUuNTEzYzQuMjMzLTUuMjc2IDMuMjc5LTEzLjAwNS0yLjExOS0xNy4wODFDMjczLjEyNCA1NC41NiAyMzYuNTc2IDMyIDE4Ny45MzEgMzIgMTA2LjAyNiAzMiA0OCA4NC43NDIgNDggMTU3Ljk2MVYyMjRIMjBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyOHYxMjhIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgyOTZjNi42MjcgMCAxMi01LjM3MyAxMi0xMlYzNjRjMC02LjYyNy01LjM3My0xMi0xMi0xMnpcIl0sXCJwb3dlci1vZmZcIjpbNTEyLDUxMixbXSxcImYwMTFcIixcIk00MDAgNTQuMWM2MyA0NSAxMDQgMTE4LjYgMTA0IDIwMS45IDAgMTM2LjgtMTEwLjggMjQ3LjctMjQ3LjUgMjQ4QzEyMCA1MDQuMyA4LjIgMzkzIDggMjU2LjQgNy45IDE3My4xIDQ4LjkgOTkuMyAxMTEuOCA1NC4yYzExLjctOC4zIDI4LTQuOCAzNSA3LjdMMTYyLjYgOTBjNS45IDEwLjUgMy4xIDIzLjgtNi42IDMxLTQxLjUgMzAuOC02OCA3OS42LTY4IDEzNC45LS4xIDkyLjMgNzQuNSAxNjguMSAxNjggMTY4LjEgOTEuNiAwIDE2OC42LTc0LjIgMTY4LTE2OS4xLS4zLTUxLjgtMjQuNy0xMDEuOC02OC4xLTEzNC05LjctNy4yLTEyLjQtMjAuNS02LjUtMzAuOWwxNS44LTI4LjFjNy0xMi40IDIzLjItMTYuMSAzNC44LTcuOHpNMjk2IDI2NFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGgtMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHpcIl0scHJlc2NyaXB0aW9uOlszODQsNTEyLFtdLFwiZjViMVwiLFwiTTMwMS4yNiAzNTJsNzguMDYtNzguMDZjNi4yNS02LjI1IDYuMjUtMTYuMzggMC0yMi42M2wtMjIuNjMtMjIuNjNjLTYuMjUtNi4yNS0xNi4zOC02LjI1LTIyLjYzIDBMMjU2IDMwNi43NGwtODMuOTYtODMuOTZDMjE5LjMxIDIxNi44IDI1NiAxNzYuODkgMjU2IDEyOGMwLTUzLjAyLTQyLjk4LTk2LTk2LTk2SDE2QzcuMTYgMzIgMCAzOS4xNiAwIDQ4djI1NmMwIDguODQgNy4xNiAxNiAxNiAxNmgzMmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtODBoMTguNzVsMTI4IDEyOC03OC4wNiA3OC4wNmMtNi4yNSA2LjI1LTYuMjUgMTYuMzggMCAyMi42M2wyMi42MyAyMi42M2M2LjI1IDYuMjUgMTYuMzggNi4yNSAyMi42MyAwTDI1NiAzOTcuMjVsNzguMDYgNzguMDZjNi4yNSA2LjI1IDE2LjM4IDYuMjUgMjIuNjMgMGwyMi42My0yMi42M2M2LjI1LTYuMjUgNi4yNS0xNi4zOCAwLTIyLjYzTDMwMS4yNiAzNTJ6TTY0IDk2aDk2YzE3LjY0IDAgMzIgMTQuMzYgMzIgMzJzLTE0LjM2IDMyLTMyIDMySDY0Vjk2elwiXSxcInByZXNjcmlwdGlvbi1ib3R0bGVcIjpbMzg0LDUxMixbXSxcImY0ODVcIixcIk0zMiAxOTJoMTIwYzQuNCAwIDggMy42IDggOHYxNmMwIDQuNC0zLjYgOC04IDhIMzJ2NjRoMTIwYzQuNCAwIDggMy42IDggOHYxNmMwIDQuNC0zLjYgOC04IDhIMzJ2NjRoMTIwYzQuNCAwIDggMy42IDggOHYxNmMwIDQuNC0zLjYgOC04IDhIMzJ2NjRjMCAxNy42IDE0LjQgMzIgMzIgMzJoMjU2YzE3LjYgMCAzMi0xNC40IDMyLTMyVjEyOEgzMnY2NHpNMzYwIDBIMjRDMTAuOCAwIDAgMTAuOCAwIDI0djQ4YzAgMTMuMiAxMC44IDI0IDI0IDI0aDMzNmMxMy4yIDAgMjQtMTAuOCAyNC0yNFYyNGMwLTEzLjItMTAuOC0yNC0yNC0yNHpcIl0sXCJwcmVzY3JpcHRpb24tYm90dGxlLWFsdFwiOlszODQsNTEyLFtdLFwiZjQ4NlwiLFwiTTM2MCAwSDI0QzEwLjggMCAwIDEwLjggMCAyNHY0OGMwIDEzLjIgMTAuOCAyNCAyNCAyNGgzMzZjMTMuMiAwIDI0LTEwLjggMjQtMjRWMjRjMC0xMy4yLTEwLjgtMjQtMjQtMjR6TTMyIDQ4MGMwIDE3LjYgMTQuNCAzMiAzMiAzMmgyNTZjMTcuNiAwIDMyLTE0LjQgMzItMzJWMTI4SDMydjM1MnptNjQtMTg0YzAtNC40IDMuNi04IDgtOGg1NnYtNTZjMC00LjQgMy42LTggOC04aDQ4YzQuNCAwIDggMy42IDggOHY1Nmg1NmM0LjQgMCA4IDMuNiA4IDh2NDhjMCA0LjQtMy42IDgtOCA4aC01NnY1NmMwIDQuNC0zLjYgOC04IDhoLTQ4Yy00LjQgMC04LTMuNi04LTh2LTU2aC01NmMtNC40IDAtOC0zLjYtOC04di00OHpcIl0scHJpbnQ6WzUxMiw1MTIsW10sXCJmMDJmXCIsXCJNNDY0IDE5MmgtMTZWODEuOTQxYTI0IDI0IDAgMCAwLTcuMDI5LTE2Ljk3TDM4My4wMjkgNy4wMjlBMjQgMjQgMCAwIDAgMzY2LjA1OSAwSDg4Qzc0Ljc0NSAwIDY0IDEwLjc0NSA2NCAyNHYxNjhINDhjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2MTMyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNTJ2MTA0YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgzMzZjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjM4NGg1MmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyVjI0MGMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0tODAgMjU2SDEyOHYtOTZoMjU2djk2ek0xMjggMjI0VjY0aDE5MnY0MGMwIDEzLjIgMTAuOCAyNCAyNCAyNGg0MHY5NkgxMjh6bTMwNCA3MmMtMTMuMjU0IDAtMjQtMTAuNzQ2LTI0LTI0czEwLjc0Ni0yNCAyNC0yNCAyNCAxMC43NDYgMjQgMjQtMTAuNzQ2IDI0LTI0IDI0elwiXSxwcm9jZWR1cmVzOls2NDAsNTEyLFtdLFwiZjQ4N1wiLFwiTTUyOCAyMjRIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2MTQ0SDY0VjE0NGMwLTguOC03LjItMTYtMTYtMTZIMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzNTJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnYtNDhoNTEydjQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzM2YzAtNjEuOS01MC4xLTExMi0xMTItMTEyek0xMzYgOTZoMTI2LjFsMjcuNiA1NS4yYzUuOSAxMS44IDIyLjcgMTEuOCAyOC42IDBMMzY4IDUxLjggMzkwLjEgOTZINTEyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDQwOS45TDM4Mi4zIDguOEMzNzYuNC0zIDM1OS42LTMgMzUzLjcgOC44TDMwNCAxMDguMmwtMTkuOS0zOS44Yy0xLjQtMi43LTQuMS00LjQtNy4yLTQuNEgxMzZjLTQuNCAwLTggMy42LTggOHYxNmMwIDQuNCAzLjYgOCA4IDh6bTI0IDI1NmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0IDI4LjcgNjQgNjQgNjR6XCJdLFwicHJvamVjdC1kaWFncmFtXCI6WzY0MCw1MTIsW10sXCJmNTQyXCIsXCJNMzg0IDMyMEgyNTZjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2MTI4YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMTI4YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWMzUyYzAtMTcuNjctMTQuMzMtMzItMzItMzJ6TTE5MiAzMmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMySDMyQzE0LjMzIDAgMCAxNC4zMyAwIDMydjEyOGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDk1LjcybDczLjE2IDEyOC4wNEMyMTEuOTggMzAwLjk4IDIzMi40IDI4OCAyNTYgMjg4aC4yOEwxOTIgMTc1LjUxVjEyOGgyMjRWNjRIMTkyVjMyek02MDggMEg0ODBjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2MTI4YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMTI4YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWMzJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpcIl0sXCJwdXp6bGUtcGllY2VcIjpbNTc2LDUxMixbXSxcImYxMmVcIixcIk01MTkuNDQyIDI4OC42NTFjLTQxLjUxOSAwLTU5LjUgMzEuNTkzLTgyLjA1OCAzMS41OTNDMzc3LjQwOSAzMjAuMjQ0IDQzMiAxNDQgNDMyIDE0NHMtMTk2LjI4OCA4MC0xOTYuMjg4LTMuMjk3YzAtMzUuODI3IDM2LjI4OC00Ni4yNSAzNi4yODgtODUuOTg1QzI3MiAxOS4yMTYgMjQzLjg4NSAwIDIxMC41MzkgMGMtMzQuNjU0IDAtNjYuMzY2IDE4Ljg5MS02Ni4zNjYgNTYuMzQ2IDAgNDEuMzY0IDMxLjcxMSA1OS4yNzcgMzEuNzExIDgxLjc1QzE3NS44ODUgMjA3LjcxOSAwIDE2Ni43NTggMCAxNjYuNzU4djMzMy4yMzdzMTc4LjYzNSA0MS4wNDcgMTc4LjYzNS0yOC42NjJjMC0yMi40NzMtNDAtNDAuMTA3LTQwLTgxLjQ3MSAwLTM3LjQ1NiAyOS4yNS01Ni4zNDYgNjMuNTc3LTU2LjM0NiAzMy42NzMgMCA2MS43ODggMTkuMjE2IDYxLjc4OCA1NC43MTcgMCAzOS43MzUtMzYuMjg4IDUwLjE1OC0zNi4yODggODUuOTg1IDAgNjAuODAzIDEyOS42NzUgMjUuNzMgMTgxLjIzIDI1LjczIDAgMC0zNC43MjUtMTIwLjEwMSAyNS44MjctMTIwLjEwMSAzNS45NjIgMCA0Ni40MjMgMzYuMTUyIDg2LjMwOCAzNi4xNTJDNTU2LjcxMiA0MTYgNTc2IDM4Ny45OSA1NzYgMzU0LjQ0M2MwLTM0LjE5OS0xOC45NjItNjUuNzkyLTU2LjU1OC02NS43OTJ6XCJdLHFyY29kZTpbNDQ4LDUxMixbXSxcImYwMjlcIixcIk0wIDIyNGgxOTJWMzJIMHYxOTJ6TTY0IDk2aDY0djY0SDY0Vjk2em0xOTItNjR2MTkyaDE5MlYzMkgyNTZ6bTEyOCAxMjhoLTY0Vjk2aDY0djY0ek0wIDQ4MGgxOTJWMjg4SDB2MTkyem02NC0xMjhoNjR2NjRINjR2LTY0em0zNTItNjRoMzJ2MTI4aC05NnYtMzJoLTMydjk2aC02NFYyODhoOTZ2MzJoNjR2LTMyem0wIDE2MGgzMnYzMmgtMzJ2LTMyem0tNjQgMGgzMnYzMmgtMzJ2LTMyelwiXSxxdWVzdGlvbjpbMzg0LDUxMixbXSxcImYxMjhcIixcIk0yMDIuMDIxIDBDMTIyLjIwMiAwIDcwLjUwMyAzMi43MDMgMjkuOTE0IDkxLjAyNmMtNy4zNjMgMTAuNTgtNS4wOTMgMjUuMDg2IDUuMTc4IDMyLjg3NGw0My4xMzggMzIuNzA5YzEwLjM3MyA3Ljg2NSAyNS4xMzIgNi4wMjYgMzMuMjUzLTQuMTQ4IDI1LjA0OS0zMS4zODEgNDMuNjMtNDkuNDQ5IDgyLjc1Ny00OS40NDkgMzAuNzY0IDAgNjguODE2IDE5Ljc5OSA2OC44MTYgNDkuNjMxIDAgMjIuNTUyLTE4LjYxNyAzNC4xMzQtNDguOTkzIDUxLjE2NC0zNS40MjMgMTkuODYtODIuMjk5IDQ0LjU3Ni04Mi4yOTkgMTA2LjQwNVYzMjBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDcyLjQ3MWMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTUuNzczYzAtNDIuODYgMTI1LjI2OC00NC42NDUgMTI1LjI2OC0xNjAuNjI3QzM3Ny41MDQgNjYuMjU2IDI4Ni45MDIgMCAyMDIuMDIxIDB6TTE5MiAzNzMuNDU5Yy0zOC4xOTYgMC02OS4yNzEgMzEuMDc1LTY5LjI3MSA2OS4yNzEgMCAzOC4xOTUgMzEuMDc1IDY5LjI3IDY5LjI3MSA2OS4yN3M2OS4yNzEtMzEuMDc1IDY5LjI3MS02OS4yNzEtMzEuMDc1LTY5LjI3LTY5LjI3MS02OS4yN3pcIl0sXCJxdWVzdGlvbi1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYwNTlcIixcIk01MDQgMjU2YzAgMTM2Ljk5Ny0xMTEuMDQzIDI0OC0yNDggMjQ4UzggMzkyLjk5NyA4IDI1NkM4IDExOS4wODMgMTE5LjA0MyA4IDI1NiA4czI0OCAxMTEuMDgzIDI0OCAyNDh6TTI2Mi42NTUgOTBjLTU0LjQ5NyAwLTg5LjI1NSAyMi45NTctMTE2LjU0OSA2My43NTgtMy41MzYgNS4yODYtMi4zNTMgMTIuNDE1IDIuNzE1IDE2LjI1OGwzNC42OTkgMjYuMzFjNS4yMDUgMy45NDcgMTIuNjIxIDMuMDA4IDE2LjY2NS0yLjEyMiAxNy44NjQtMjIuNjU4IDMwLjExMy0zNS43OTcgNTcuMzAzLTM1Ljc5NyAyMC40MjkgMCA0NS42OTggMTMuMTQ4IDQ1LjY5OCAzMi45NTggMCAxNC45NzYtMTIuMzYzIDIyLjY2Ny0zMi41MzQgMzMuOTc2QzI0Ny4xMjggMjM4LjUyOCAyMTYgMjU0Ljk0MSAyMTYgMjk2djRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg1NmM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0xLjMzM2MwLTI4LjQ2MiA4My4xODYtMjkuNjQ3IDgzLjE4Ni0xMDYuNjY3IDAtNTguMDAyLTYwLjE2NS0xMDItMTE2LjUzMS0xMDJ6TTI1NiAzMzhjLTI1LjM2NSAwLTQ2IDIwLjYzNS00NiA0NiAwIDI1LjM2NCAyMC42MzUgNDYgNDYgNDZzNDYtMjAuNjM2IDQ2LTQ2YzAtMjUuMzY1LTIwLjYzNS00Ni00Ni00NnpcIl0scXVpZGRpdGNoOls2NDAsNTEyLFtdLFwiZjQ1OFwiLFwiTTI1Ni41IDIxNi44TDM0My4yIDMyNnMtMTYuNiAxMDIuNC03Ni42IDE1MC4xQzIwNi43IDUyMy44IDAgNTEwLjIgMCA1MTAuMnMzLjgtMjMuMSAxMS01NS40bDk0LjYtMTEyLjJjNC00LjctLjktMTEuNi02LjYtOS41bC02MC40IDIyLjFjMTQuNC00MS43IDMyLjctODAgNTQuNi05Ny41IDU5LjktNDcuOCAxNjMuMy00MC45IDE2My4zLTQwLjl6bTIzOCAxMzVjLTQ0IDAtNzkuOCAzNS44LTc5LjggNzkuOSAwIDQ0LjEgMzUuNyA3OS45IDc5LjggNzkuOSA0NC4xIDAgNzkuOC0zNS44IDc5LjgtNzkuOSAwLTQ0LjItMzUuOC03OS45LTc5LjgtNzkuOXpNNjM2LjUgMzFMNjE2LjcgNmMtNS41LTYuOS0xNS41LTgtMjIuNC0yLjZMMzYxLjggMTgxLjNsLTM0LjEtNDNjLTUuMS02LjQtMTUuMS01LjItMTguNiAyLjJsLTI1LjMgNTQuNiA4Ni43IDEwOS4yIDU4LjgtMTIuNGM4LTEuNyAxMS40LTExLjIgNi4zLTE3LjZsLTM0LjEtNDIuOUw2MzQgNTMuNWM2LjktNS41IDgtMTUuNiAyLjUtMjIuNXpcIl0sXCJxdW90ZS1sZWZ0XCI6WzUxMiw1MTIsW10sXCJmMTBkXCIsXCJNNDY0IDI1NmgtODB2LTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0aDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRoLThjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwdjI0MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgxMjhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tMjg4IDBIOTZ2LTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0aDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRoLThDNzEuNiAzMiAwIDEwMy42IDAgMTkydjI0MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgxMjhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4elwiXSxcInF1b3RlLXJpZ2h0XCI6WzUxMiw1MTIsW10sXCJmMTBlXCIsXCJNNDY0IDMySDMzNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDgwdjY0YzAgMzUuMy0yOC43IDY0LTY0IDY0aC04Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4Yzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwVjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tMjg4IDBINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYxMjhjMCAyNi41IDIxLjUgNDggNDggNDhoODB2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRoLThjLTEzLjMgMC0yNCAxMC43LTI0IDI0djQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0aDhjODguNCAwIDE2MC03MS42IDE2MC0xNjBWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6XCJdLHJhbmRvbTpbNTEyLDUxMixbXSxcImYwNzRcIixcIk01MDQuOTcxIDM1OS4wMjljOS4zNzMgOS4zNzMgOS4zNzMgMjQuNTY5IDAgMzMuOTQxbC04MCA3OS45ODRjLTE1LjAxIDE1LjAxLTQwLjk3MSA0LjQ5LTQwLjk3MS0xNi45NzFWNDE2aC01OC43ODVhMTIuMDA0IDEyLjAwNCAwIDAgMS04Ljc3My0zLjgxMmwtNzAuNTU2LTc1LjU5NiA1My4zMzMtNTcuMTQzTDM1MiAzMzZoMzJ2LTM5Ljk4MWMwLTIxLjQzOCAyNS45NDMtMzEuOTk4IDQwLjk3MS0xNi45NzFsODAgNzkuOTgxek0xMiAxNzZoODRsNTIuNzgxIDU2LjU1MSA1My4zMzMtNTcuMTQzLTcwLjU1Ni03NS41OTZBMTEuOTk5IDExLjk5OSAwIDAgMCAxMjIuNzg1IDk2SDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjU2YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJ6bTM3MiAwdjM5Ljk4NGMwIDIxLjQ2IDI1Ljk2MSAzMS45OCA0MC45NzEgMTYuOTcxbDgwLTc5Ljk4NGM5LjM3My05LjM3MyA5LjM3My0yNC41NjkgMC0zMy45NDFsLTgwLTc5Ljk4MUM0MDkuOTQzIDI0LjAyMSAzODQgMzQuNTgyIDM4NCA1Ni4wMTlWOTZoLTU4Ljc4NWExMi4wMDQgMTIuMDA0IDAgMCAwLTguNzczIDMuODEyTDk2IDMzNkgxMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY1NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExMC43ODVjMy4zMjYgMCA2LjUwMy0xLjM4MSA4Ljc3My0zLjgxMkwzNTIgMTc2aDMyelwiXSxyZWNlaXB0OlszODQsNTEyLFtdLFwiZjU0M1wiLFwiTTM1OC40IDMuMkwzMjAgNDggMjY1LjYgMy4yYTE1LjkgMTUuOSAwIDAgMC0xOS4yIDBMMTkyIDQ4IDEzNy42IDMuMmExNS45IDE1LjkgMCAwIDAtMTkuMiAwTDY0IDQ4IDI1LjYgMy4yQzE1LTQuNyAwIDIuOCAwIDE2djQ4MGMwIDEzLjIgMTUgMjAuNyAyNS42IDEyLjhMNjQgNDY0bDU0LjQgNDQuOGExNS45IDE1LjkgMCAwIDAgMTkuMiAwTDE5MiA0NjRsNTQuNCA0NC44YTE1LjkgMTUuOSAwIDAgMCAxOS4yIDBMMzIwIDQ2NGwzOC40IDQ0LjhjMTAuNSA3LjkgMjUuNi40IDI1LjYtMTIuOFYxNmMwLTEzLjItMTUtMjAuNy0yNS42LTEyLjh6TTMyMCAzNjBjMCA0LjQtMy42IDgtOCA4SDcyYy00LjQgMC04LTMuNi04LTh2LTE2YzAtNC40IDMuNi04IDgtOGgyNDBjNC40IDAgOCAzLjYgOCA4djE2em0wLTk2YzAgNC40LTMuNiA4LTggOEg3MmMtNC40IDAtOC0zLjYtOC04di0xNmMwLTQuNCAzLjYtOCA4LThoMjQwYzQuNCAwIDggMy42IDggOHYxNnptMC05NmMwIDQuNC0zLjYgOC04IDhINzJjLTQuNCAwLTgtMy42LTgtOHYtMTZjMC00LjQgMy42LTggOC04aDI0MGM0LjQgMCA4IDMuNiA4IDh2MTZ6XCJdLHJlY3ljbGU6WzUxMiw1MTIsW10sXCJmMWI4XCIsXCJNMTg0LjU2MSAyNjEuOTAzYzMuMjMyIDEzLjk5Ny0xMi4xMjMgMjQuNjM1LTI0LjA2OCAxNy4xNjhsLTQwLjczNi0yNS40NTUtNTAuODY3IDgxLjQwMkM1NS42MDYgMzU2LjI3MyA3MC45NiAzODQgOTYuMDEyIDM4NEgxNDhjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY0MGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDk2LjExNWMtNzUuMzM0IDAtMTIxLjMwMi04My4wNDgtODEuNDA4LTE0Ni44OGw1MC44MjItODEuMzg4LTQwLjcyNS0yNS40NDhjLTEyLjA4MS03LjU0Ny04Ljk2Ni0yNS45NjEgNC44NzktMjkuMTU4bDExMC4yMzctMjUuNDVjOC42MTEtMS45ODggMTcuMjAxIDMuMzgxIDE5LjE4OSAxMS45OWwyNS40NTIgMTEwLjIzN3ptOTguNTYxLTE4Mi45MTVsNDEuMjg5IDY2LjA3Ni00MC43NCAyNS40NTdjLTEyLjA1MSA3LjUyOC05IDI1Ljk1MyA0Ljg3OSAyOS4xNThsMTEwLjIzNyAyNS40NWM4LjY3MiAxLjk5OSAxNy4yMTUtMy40MzggMTkuMTg5LTExLjk5bDI1LjQ1LTExMC4yMzdjMy4xOTctMTMuODQ0LTExLjk5LTI0LjcxOS0yNC4wNjgtMTcuMTY4bC00MC42ODcgMjUuNDI0LTQxLjI2My02Ni4wODJjLTM3LjUyMS02MC4wMzMtMTI1LjIwOS02MC4xNzEtMTYyLjgxNiAwbC0xNy45NjMgMjguNzY2Yy0zLjUxIDUuNjItMS44IDEzLjAyMSAzLjgyIDE2LjUzM2wzMy45MTkgMjEuMTk1YzUuNjIgMy41MTIgMTMuMDI0IDEuODAzIDE2LjUzNi0zLjgxN2wxNy45NjEtMjguNzQzYzEyLjcxMi0yMC4zNDEgNDEuOTczLTE5LjY3NiA1NC4yNTctLjAyMnpNNDk3LjI4OCAzMDEuMTJsLTI3LjUxNS00NC4wNjVjLTMuNTExLTUuNjIzLTEwLjkxNi03LjMzNC0xNi41MzgtMy44MjFsLTMzLjg2MSAyMS4xNTljLTUuNjIgMy41MTItNy4zMyAxMC45MTUtMy44MTggMTYuNTM2bDI3LjU2NCA0NC4xMTJjMTMuMjU3IDIxLjIxMS0yLjA1NyA0OC45Ni0yNy4xMzYgNDguOTZIMzIwVjMzNi4wMmMwLTE0LjIxMy0xNy4yNDItMjEuMzgzLTI3LjMxMy0xMS4zMTNsLTgwIDc5Ljk4MWMtNi4yNDkgNi4yNDgtNi4yNDkgMTYuMzc5IDAgMjIuNjI3bDgwIDc5Ljk4OUMzMDIuNjg5IDUxNy4zMDggMzIwIDUxMC4zIDMyMCA0OTUuOTg5VjQ0OGg5NS44OGM3NS4yNzQgMCAxMjEuMzM1LTgyLjk5NyA4MS40MDgtMTQ2Ljg4elwiXSxyZWRvOls1MTIsNTEyLFtdLFwiZjAxZVwiLFwiTTUwMC4zMzMgMGgtNDcuNDExYy02Ljg1MyAwLTEyLjMxNCA1LjcyOS0xMS45ODYgMTIuNTc0bDMuOTY2IDgyLjc1OUMzOTkuNDE2IDQxLjg5OSAzMzEuNjcyIDggMjU2LjAwMSA4IDExOS4zNCA4IDcuODk5IDExOS41MjYgOCAyNTYuMTg3IDguMTAxIDM5My4wNjggMTE5LjA5NiA1MDQgMjU2IDUwNGM2My45MjYgMCAxMjIuMjAyLTI0LjE4NyAxNjYuMTc4LTYzLjkwOCA1LjExMy00LjYxOCA1LjM1NC0xMi41NjEuNDgyLTE3LjQzM2wtMzMuOTcxLTMzLjk3MWMtNC40NjYtNC40NjYtMTEuNjQtNC43MTctMTYuMzgtLjU0M0MzNDEuMzA4IDQxNS40NDggMzAwLjYwNiA0MzIgMjU2IDQzMmMtOTcuMjY3IDAtMTc2LTc4LjcxNi0xNzYtMTc2IDAtOTcuMjY3IDc4LjcxNi0xNzYgMTc2LTE3NiA2MC44OTIgMCAxMTQuNTA2IDMwLjg1OCAxNDYuMDk5IDc3LjhsLTEwMS41MjUtNC44NjVjLTYuODQ1LS4zMjgtMTIuNTc0IDUuMTMzLTEyLjU3NCAxMS45ODZ2NDcuNDExYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjAwLjMzM2M2LjYyNyAwIDEyLTUuMzczIDEyLTEyVjEyYzAtNi42MjctNS4zNzMtMTItMTItMTJ6XCJdLFwicmVkby1hbHRcIjpbNTEyLDUxMixbXSxcImYyZjlcIixcIk0yNTYuNDU1IDhjNjYuMjY5LjExOSAxMjYuNDM3IDI2LjIzMyAxNzAuODU5IDY4LjY4NWwzNS43MTUtMzUuNzE1QzQ3OC4xNDkgMjUuODUxIDUwNCAzNi41NTkgNTA0IDU3Ljk0MVYxOTJjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDM0NS45NDFjLTIxLjM4MiAwLTMyLjA5LTI1Ljg1MS0xNi45NzEtNDAuOTcxbDQxLjc1LTQxLjc1Yy0zMC44NjQtMjguODk5LTcwLjgwMS00NC45MDctMTEzLjIzLTQ1LjI3My05Mi4zOTgtLjc5OC0xNzAuMjgzIDczLjk3Ny0xNjkuNDg0IDE2OS40NDJDODguNzY0IDM0OC4wMDkgMTYyLjE4NCA0MjQgMjU2IDQyNGM0MS4xMjcgMCA3OS45OTctMTQuNjc4IDExMC42MjktNDEuNTU2IDQuNzQzLTQuMTYxIDExLjkwNi0zLjkwOCAxNi4zNjguNTUzbDM5LjY2MiAzOS42NjJjNC44NzIgNC44NzIgNC42MzEgMTIuODE1LS40ODIgMTcuNDMzQzM3OC4yMDIgNDc5LjgxMyAzMTkuOTI2IDUwNCAyNTYgNTA0IDExOS4wMzQgNTA0IDguMDAxIDM5Mi45NjcgOCAyNTYuMDAyIDcuOTk5IDExOS4xOTMgMTE5LjY0NiA3Ljc1NSAyNTYuNDU1IDh6XCJdLHJlZ2lzdGVyZWQ6WzUxMiw1MTIsW10sXCJmMjVkXCIsXCJNMjg1LjM2MyAyMDcuNDc1YzAgMTguNi05LjgzMSAyOC40MzEtMjguNDMxIDI4LjQzMWgtMjkuODc2di01Ni4xNGgyMy4zNzhjMjguNjY4IDAgMzQuOTI5IDguNzczIDM0LjkyOSAyNy43MDl6TTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0zNjMuNDExIDM2MC40MTRjLTQ2LjcyOS04NC44MjUtNDMuMjk5LTc4LjYzNi00NC43MDItODAuOTggMjMuNDMyLTE1LjE3MiAzNy45NDUtNDIuOTc5IDM3Ljk0NS03NC40ODYgMC01NC4yNDQtMzEuNS04OS4yNTItMTA1LjQ5OC04OS4yNTJoLTcwLjY2N2MtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0VjM3MmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMjIuNTY3YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtNzEuNjYzaDI1LjU1Nmw0NC4xMjkgODIuOTM3YTI0LjAwMSAyNC4wMDEgMCAwIDAgMjEuMTg4IDEyLjcyN2gyNC40NjRjMTguMjYxLS4wMDEgMjkuODI5LTE5LjU5MSAyMS4wMTgtMzUuNTg3elwiXSxyZXBseTpbNTEyLDUxMixbXSxcImYzZTVcIixcIk04LjMwOSAxODkuODM2TDE4NC4zMTMgMzcuODUxQzE5OS43MTkgMjQuNTQ2IDIyNCAzNS4zNDcgMjI0IDU2LjAxNXY4MC4wNTNjMTYwLjYyOSAxLjgzOSAyODggMzQuMDMyIDI4OCAxODYuMjU4IDAgNjEuNDQxLTM5LjU4MSAxMjIuMzA5LTgzLjMzMyAxNTQuMTMyLTEzLjY1MyA5LjkzMS0zMy4xMTEtMi41MzMtMjguMDc3LTE4LjYzMSA0NS4zNDQtMTQ1LjAxMi0yMS41MDctMTgzLjUxLTE3Ni41OS0xODUuNzQyVjM2MGMwIDIwLjctMjQuMyAzMS40NTMtMzkuNjg3IDE4LjE2NGwtMTc2LjAwNC0xNTJjLTExLjA3MS05LjU2Mi0xMS4wODYtMjYuNzUzIDAtMzYuMzI4elwiXSxcInJlcGx5LWFsbFwiOls1NzYsNTEyLFtdLFwiZjEyMlwiLFwiTTEzNi4zMDkgMTg5LjgzNkwzMTIuMzEzIDM3Ljg1MUMzMjcuNzIgMjQuNTQ2IDM1MiAzNS4zNDggMzUyIDU2LjAxNXY4Mi43NjNjMTI5LjE4MiAxMC4yMzEgMjI0IDUyLjIxMiAyMjQgMTgzLjU0OCAwIDYxLjQ0MS0zOS41ODIgMTIyLjMwOS04My4zMzMgMTU0LjEzMi0xMy42NTMgOS45MzEtMzMuMTExLTIuNTMzLTI4LjA3Ny0xOC42MzEgMzguNTEyLTEyMy4xNjItMy45MjItMTY5LjQ4Mi0xMTIuNTktMTgyLjAxNXY4NC4xNzVjMCAyMC43MDEtMjQuMyAzMS40NTMtMzkuNjg3IDE4LjE2NEwxMzYuMzA5IDIyNi4xNjRjLTExLjA3MS05LjU2MS0xMS4wODYtMjYuNzUzIDAtMzYuMzI4em0tMTI4IDM2LjMyOEwxODQuMzEzIDM3OC4xNUMxOTkuNyAzOTEuNDM5IDIyNCAzODAuNjg3IDIyNCAzNTkuOTg2di0xNS44MThsLTEwOC42MDYtOTMuNzg1QTU1Ljk2IDU1Ljk2IDAgMCAxIDk2IDIwNy45OThhNTUuOTUzIDU1Ljk1MyAwIDAgMSAxOS4zOTMtNDIuMzhMMjI0IDcxLjgzMlY1Ni4wMTVjMC0yMC42NjctMjQuMjgtMzEuNDY5LTM5LjY4Ny0xOC4xNjRMOC4zMDkgMTg5LjgzNmMtMTEuMDg2IDkuNTc1LTExLjA3MSAyNi43NjcgMCAzNi4zMjh6XCJdLHJldHdlZXQ6WzY0MCw1MTIsW10sXCJmMDc5XCIsXCJNNjI5LjY1NyAzNDMuNTk4TDUyOC45NzEgNDQ0LjI4NGMtOS4zNzMgOS4zNzItMjQuNTY4IDkuMzcyLTMzLjk0MSAwTDM5NC4zNDMgMzQzLjU5OGMtOS4zNzMtOS4zNzMtOS4zNzMtMjQuNTY5IDAtMzMuOTQxbDEwLjgyMy0xMC44MjNjOS41NjItOS41NjIgMjUuMTMzLTkuMzQgMzQuNDE5LjQ5Mkw0ODAgMzQyLjExOFYxNjBIMjkyLjQ1MWEyNC4wMDUgMjQuMDA1IDAgMCAxLTE2Ljk3MS03LjAyOWwtMTYtMTZDMjQ0LjM2MSAxMjEuODUxIDI1NS4wNjkgOTYgMjc2LjQ1MSA5Nkg1MjBjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0djIyMi4xMThsNDAuNDE2LTQyLjc5MmM5LjI4NS05LjgzMSAyNC44NTYtMTAuMDU0IDM0LjQxOS0uNDkybDEwLjgyMyAxMC44MjNjOS4zNzIgOS4zNzIgOS4zNzIgMjQuNTY5LS4wMDEgMzMuOTQxem0tMjY1LjEzOCAxNS40MzFBMjMuOTk5IDIzLjk5OSAwIDAgMCAzNDcuNTQ4IDM1MkgxNjBWMTY5Ljg4MWw0MC40MTYgNDIuNzkyYzkuMjg2IDkuODMxIDI0Ljg1NiAxMC4wNTQgMzQuNDE5LjQ5MWwxMC44MjItMTAuODIyYzkuMzczLTkuMzczIDkuMzczLTI0LjU2OSAwLTMzLjk0MUwxNDQuOTcxIDY3LjcxNmMtOS4zNzMtOS4zNzMtMjQuNTY5LTkuMzczLTMzLjk0MSAwTDEwLjM0MyAxNjguNDAyYy05LjM3MyA5LjM3My05LjM3MyAyNC41NjkgMCAzMy45NDFsMTAuODIyIDEwLjgyMmM5LjU2MiA5LjU2MiAyNS4xMzMgOS4zNCAzNC40MTktLjQ5MUw5NiAxNjkuODgxVjM5MmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMjQzLjU0OWMyMS4zODIgMCAzMi4wOS0yNS44NTEgMTYuOTcxLTQwLjk3MWwtMTYuMDAxLTE2elwiXSxyaWJib246WzQ0OCw1MTIsW10sXCJmNGQ2XCIsXCJNNi4xIDQ0NC4zYy05LjYgMTAuOC03LjUgMjcuNiA0LjUgMzUuN2w2OC44IDI3LjljOS45IDYuNyAyMy4zIDUgMzEuMy0zLjhsOTEuOC0xMDEuOS03OS4yLTg3LjktMTE3LjIgMTMwem00MzUuOCAwcy0yOTItMzI0LjYtMjk1LjQtMzMwLjFjMTUuNC04LjQgNDAuMi0xNy45IDc3LjUtMTcuOXM2Mi4xIDkuNSA3Ny41IDE3LjljLTMuMyA1LjYtNTYgNjQuNi01NiA2NC42bDc5LjEgODcuNyAzNC4yLTM4YzI4LjctMzEuOSAzMy4zLTc4LjYgMTEuNC0xMTUuNWwtNDMuNy03My41Yy00LjMtNy4yLTkuOS0xMy4zLTE2LjgtMTgtNDAuNy0yNy42LTEyNy40LTI5LjctMTcxLjQgMC02LjkgNC43LTEyLjUgMTAuOC0xNi44IDE4bC00My42IDczLjJjLTEuNSAyLjUtMzcuMSA2Mi4yIDExLjUgMTE2TDMzNy41IDUwNGM4IDguOSAyMS40IDEwLjUgMzEuMyAzLjhsNjguOC0yNy45YzExLjktOCAxNC0yNC44IDQuMy0zNS42elwiXSxyb2FkOls1NzYsNTEyLFtdLFwiZjAxOFwiLFwiTTU2Ny4zIDM4My42TDQyOS45IDc4LjJDNDI2IDY5LjUgNDE3LjQgNjQgNDA4IDY0aC05Ni4xbDEuOSAxOC44Yy43IDcuMS00LjggMTMuMi0xMS45IDEzLjJIMjc0Yy03LjEgMC0xMi43LTYuMi0xMS45LTEzLjJMMjY0IDY0aC05NmMtOS40IDAtMTggNS41LTIxLjkgMTQuMkw4LjcgMzgzLjZDMy4yIDM5NS44IDAgNDA5LjYgMCA0MjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMjEzLjZjLTcuMSAwLTEyLjctNi4yLTExLjktMTMuMmwxMC44LTEwNGMuNi02LjEgNS44LTEwLjggMTEuOS0xMC44aDc5LjJjNi4xIDAgMTEuMyA0LjYgMTEuOSAxMC44bDEwLjggMTA0Yy43IDcuMS00LjggMTMuMi0xMS45IDEzLjJINTUyYzEzLjIgMCAyNC0xMC43IDI0LTI0IDAtMTMuOS0zLTI3LjctOC43LTQwLjR6TTI1NC43IDE1NC44bDMuMy0zMmMuNi02LjEgNS44LTEwLjggMTEuOS0xMC44aDM2LjJjNi4xIDAgMTEuMyA0LjYgMTEuOSAxMC44bDMuMyAzMmMuNyA3LjEtNC44IDEzLjItMTEuOSAxMy4yaC00Mi44Yy03LjEgMC0xMi43LTYuMi0xMS45LTEzLjJ6TTMyMS44IDI4OGgtNjcuNmMtNy4xIDAtMTIuNy02LjItMTEuOS0xMy4ybDcuNC03MmMuNi02LjEgNS44LTEwLjggMTEuOS0xMC44aDUyLjdjNi4xIDAgMTEuMyA0LjYgMTEuOSAxMC44bDcuNCA3MmMuOSA3LTQuNyAxMy4yLTExLjggMTMuMnpcIl0scm9ib3Q6WzY0MCw1MTIsW10sXCJmNTQ0XCIsXCJNMCAyNTZ2MTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyVjIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQ2NCA5NkgzNTJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRIMTc2Yy00NC4yIDAtODAgMzUuOC04MCA4MHYyNzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRoMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE3NmMwLTQ0LjItMzUuOC04MC04MC04MHpNMjU2IDQxNmgtNjR2LTMyaDY0djMyem0tMzItMTIwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwIDQwIDE3LjkgNDAgNDAtMTcuOSA0MC00MCA0MHptMTI4IDEyMGgtNjR2LTMyaDY0djMyem05NiAwaC02NHYtMzJoNjR2MzJ6bS0zMi0xMjBjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDAgNDAgMTcuOSA0MCA0MC0xNy45IDQwLTQwIDQwem0xOTItNzJoLTMydjE5MmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJ6XCJdLHJvY2tldDpbNTEyLDUxMixbXSxcImYxMzVcIixcIk01MDUuMSAxOS4xQzUwMy44IDEzIDQ5OSA4LjIgNDkyLjkgNi45IDQ2MC43IDAgNDM1LjUgMCA0MTAuNCAwIDMwNy4yIDAgMjQ1LjMgNTUuMiAxOTkuMSAxMjhIOTQuOWMtMTguMiAwLTM0LjggMTAuMy00Mi45IDI2LjVMMi42IDI1My4zYy04IDE2IDMuNiAzNC43IDIxLjUgMzQuN2g5NS4xYy01LjkgMTIuOC0xMS45IDI1LjUtMTggMzcuNy0zLjEgNi4yLTEuOSAxMy42IDMgMTguNWw2My42IDYzLjZjNC45IDQuOSAxMi4zIDYuMSAxOC41IDMgMTIuMi02LjEgMjQuOS0xMiAzNy43LTE3LjlWNDg4YzAgMTcuOCAxOC44IDI5LjQgMzQuNyAyMS41bDk4LjctNDkuNGMxNi4zLTguMSAyNi41LTI0LjggMjYuNS00Mi45VjMxMi44YzcyLjYtNDYuMyAxMjgtMTA4LjQgMTI4LTIxMS4xLjEtMjUuMi4xLTUwLjQtNi44LTgyLjZ6TTQwMCAxNjBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDggNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4elwiXSxyc3M6WzQ0OCw1MTIsW10sXCJmMDllXCIsXCJNMTI4LjA4MSA0MTUuOTU5YzAgMzUuMzY5LTI4LjY3MiA2NC4wNDEtNjQuMDQxIDY0LjA0MVMwIDQ1MS4zMjggMCA0MTUuOTU5czI4LjY3Mi02NC4wNDEgNjQuMDQxLTY0LjA0MSA2NC4wNCAyOC42NzMgNjQuMDQgNjQuMDQxem0xNzUuNjYgNDcuMjVjLTguMzU0LTE1NC42LTEzMi4xODUtMjc4LjU4Ny0yODYuOTUtMjg2Ljk1QzcuNjU2IDE3NS43NjUgMCAxODMuMTA1IDAgMTkyLjI1M3Y0OC4wNjljMCA4LjQxNSA2LjQ5IDE1LjQ3MiAxNC44ODcgMTYuMDE4IDExMS44MzIgNy4yODQgMjAxLjQ3MyA5Ni43MDIgMjA4Ljc3MiAyMDguNzcyLjU0NyA4LjM5NyA3LjYwNCAxNC44ODcgMTYuMDE4IDE0Ljg4N2g0OC4wNjljOS4xNDkuMDAxIDE2LjQ4OS03LjY1NSAxNS45OTUtMTYuNzl6bTE0NC4yNDkuMjg4QzQzOS41OTYgMjI5LjY3NyAyNTEuNDY1IDQwLjQ0NSAxNi41MDMgMzIuMDEgNy40NzMgMzEuNjg2IDAgMzguOTgxIDAgNDguMDE2djQ4LjA2OGMwIDguNjI1IDYuODM1IDE1LjY0NSAxNS40NTMgMTUuOTk5IDE5MS4xNzkgNy44MzkgMzQ0LjYyNyAxNjEuMzE2IDM1Mi40NjUgMzUyLjQ2NS4zNTMgOC42MTggNy4zNzMgMTUuNDUzIDE1Ljk5OSAxNS40NTNoNDguMDY4YzkuMDM0LS4wMDEgMTYuMzI5LTcuNDc0IDE2LjAwNS0xNi41MDR6XCJdLFwicnNzLXNxdWFyZVwiOls0NDgsNTEyLFtdLFwiZjE0M1wiLFwiTTQwMCAzMkg0OEMyMS40OSAzMiAwIDUzLjQ5IDAgODB2MzUyYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMzUyYzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWODBjMC0yNi41MS0yMS40OS00OC00OC00OHpNMTEyIDQxNmMtMjYuNTEgMC00OC0yMS40OS00OC00OHMyMS40OS00OCA0OC00OCA0OCAyMS40OSA0OCA0OC0yMS40OSA0OC00OCA0OHptMTU3LjUzMyAwaC0zNC4zMzVjLTYuMDExIDAtMTEuMDUxLTQuNjM2LTExLjQ0Mi0xMC42MzQtNS4yMTQtODAuMDUtNjkuMjQzLTE0My45Mi0xNDkuMTIzLTE0OS4xMjMtNS45OTctLjM5LTEwLjYzMy01LjQzMS0xMC42MzMtMTEuNDQxdi0zNC4zMzVjMC02LjUzNSA1LjQ2OC0xMS43NzcgMTEuOTk0LTExLjQyNSAxMTAuNTQ2IDUuOTc0IDE5OC45OTcgOTQuNTM2IDIwNC45NjQgMjA0Ljk2NC4zNTIgNi41MjYtNC44OSAxMS45OTQtMTEuNDI1IDExLjk5NHptMTAzLjAyNyAwaC0zNC4zMzRjLTYuMTYxIDAtMTEuMTc1LTQuODgyLTExLjQyNy0xMS4wMzgtNS41OTgtMTM2LjUzNS0xMTUuMjA0LTI0Ni4xNjEtMjUxLjc2LTI1MS43NkM2OC44ODIgMTUyLjk0OSA2NCAxNDcuOTM1IDY0IDE0MS43NzRWMTA3LjQ0YzAtNi40NTQgNS4zMzgtMTEuNjY0IDExLjc4Ny0xMS40MzIgMTY3LjgzIDYuMDI1IDMwMi4yMSAxNDEuMTkxIDMwOC4yMDUgMzA4LjIwNS4yMzIgNi40NDktNC45NzggMTEuNzg3LTExLjQzMiAxMS43ODd6XCJdLFwicnVibGUtc2lnblwiOlszODQsNTEyLFtdLFwiZjE1OFwiLFwiTTIzOS4zNiAzMjBDMzI0LjQ4IDMyMCAzODQgMjYwLjU0MiAzODQgMTc1LjA3MVMzMjQuNDggMzIgMjM5LjM2IDMySDc2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjIwNi42MzJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJWMzA4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNTJ2MzJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg1MnY1MmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDU4LjU2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTUySDMwOGM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDE0Ni41NnYtMzJoOTIuOHptLTkyLjgtMjE5LjI1Mmg3OC43MmM0Ni43MiAwIDc0Ljg4IDI5LjExIDc0Ljg4IDc0LjMyMyAwIDQ1LjgzMi0yOC4xNiA3NS41NjEtNzYuMTYgNzUuNTYxaC03Ny40NFYxMDAuNzQ4elwiXSxydWxlcjpbNjQwLDUxMixbXSxcImY1NDVcIixcIk02MzUuNyAxNjcuMkw1NTYuMSAzMS43Yy04LjgtMTUtMjguMy0yMC4xLTQzLjUtMTEuNWwtNjkgMzkuMUw1MDMuMyAxNjFjMi4yIDMuOC45IDguNS0yLjkgMTAuN2wtMTMuOCA3LjhjLTMuOCAyLjItOC43LjktMTAuOS0yLjlMNDE2IDc1bC01NS4yIDMxLjMgMjcuOSA0Ny40YzIuMiAzLjguOSA4LjUtMi45IDEwLjdsLTEzLjggNy44Yy0zLjggMi4yLTguNy45LTEwLjktMi45TDMzMy4yIDEyMiAyNzggMTUzLjMgMzM3LjggMjU1YzIuMiAzLjcuOSA4LjUtMi45IDEwLjdsLTEzLjggNy44Yy0zLjggMi4yLTguNy45LTEwLjktMi45bC01OS43LTEwMS43LTU1LjIgMzEuMyAyNy45IDQ3LjRjMi4yIDMuOC45IDguNS0yLjkgMTAuN2wtMTMuOCA3LjhjLTMuOCAyLjItOC43LjktMTAuOS0yLjlsLTI3LjktNDcuNS01NS4yIDMxLjMgNTkuNyAxMDEuN2MyLjIgMy43LjkgOC41LTIuOSAxMC43bC0xMy44IDcuOGMtMy44IDIuMi04LjcuOS0xMC45LTIuOUw4NC45IDI2Mi45bC02OSAzOS4xQy43IDMxMC43LTQuNiAzMjkuOCA0LjIgMzQ0LjhsNzkuNiAxMzUuNmM4LjggMTUgMjguMyAyMC4xIDQzLjUgMTEuNUw2MjQuMSAyMTBjMTUuMi04LjYgMjAuNC0yNy44IDExLjYtNDIuOHpcIl0sXCJydWxlci1jb21iaW5lZFwiOls1MTIsNTEyLFtdLFwiZjU0NlwiLFwiTTE2MCAyODhoLTU2Yy00LjQyIDAtOC0zLjU4LTgtOHYtMTZjMC00LjQyIDMuNTgtOCA4LThoNTZ2LTY0aC01NmMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDU2Vjk2aC01NmMtNC40MiAwLTgtMy41OC04LThWNzJjMC00LjQyIDMuNTgtOCA4LThoNTZWMzJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMkgzMkMxNC4zMyAwIDAgMTQuMzMgMCAzMnY0NDhjMCAyLjc3LjkxIDUuMjQgMS41NyA3LjhMMTYwIDMyOS4zOFYyODh6bTMyMCA2NGgtMzJ2NTZjMCA0LjQyLTMuNTggOC04IDhoLTE2Yy00LjQyIDAtOC0zLjU4LTgtOHYtNTZoLTY0djU2YzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LTh2LTU2aC02NHY1NmMwIDQuNDItMy41OCA4LTggOGgtMTZjLTQuNDIgMC04LTMuNTgtOC04di01NmgtNDEuMzdMMjQuMiA1MTAuNDNjMi41Ni42NiA1LjA0IDEuNTcgNy44IDEuNTdoNDQ4YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTk2YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6XCJdLFwicnVsZXItaG9yaXpvbnRhbFwiOls1NzYsNTEyLFtdLFwiZjU0N1wiLFwiTTU0NCAxMjhoLTQ4djg4YzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LTh2LTg4aC02NHY4OGMwIDQuNDItMy41OCA4LTggOGgtMTZjLTQuNDIgMC04LTMuNTgtOC04di04OGgtNjR2ODhjMCA0LjQyLTMuNTggOC04IDhoLTE2Yy00LjQyIDAtOC0zLjU4LTgtOHYtODhoLTY0djg4YzAgNC40Mi0zLjU4IDgtOCA4aC0xNmMtNC40MiAwLTgtMy41OC04LTh2LTg4aC02NHY4OGMwIDQuNDItMy41OCA4LTggOEg4OGMtNC40MiAwLTgtMy41OC04LTh2LTg4SDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjE5MmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDUxMmMxNy42NyAwIDMyLTE0LjMzIDMyLTMyVjE2MGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyelwiXSxcInJ1bGVyLXZlcnRpY2FsXCI6WzI1Niw1MTIsW10sXCJmNTQ4XCIsXCJNMTY4IDQxNmMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDg4di02NGgtODhjLTQuNDIgMC04LTMuNTgtOC04di0xNmMwLTQuNDIgMy41OC04IDgtOGg4OHYtNjRoLTg4Yy00LjQyIDAtOC0zLjU4LTgtOHYtMTZjMC00LjQyIDMuNTgtOCA4LThoODh2LTY0aC04OGMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDg4VjMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJIMzJDMTQuMzMgMCAwIDE0LjMzIDAgMzJ2NDQ4YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMTkyYzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTY0aC04OHpcIl0sXCJydXBlZS1zaWduXCI6WzMyMCw1MTIsW10sXCJmMTU2XCIsXCJNMzA4IDk2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJWNDRjMC02LjYyNy01LjM3My0xMi0xMi0xMkgxMkM1LjM3MyAzMiAwIDM3LjM3MyAwIDQ0djQ0Ljc0OGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDg1LjI4YzI3LjMwOCAwIDQ4LjI2MSA5Ljk1OCA2MC45NyAyNy4yNTJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxNTguNzU3Yy02LjIxNyAzNi4wODYtMzIuOTYxIDU4LjYzMi03NC43NTcgNTguNjMySDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjUzLjAxMmMwIDMuMzQ5IDEuNCA2LjU0NiAzLjg2MSA4LjgxOGwxNjUuMDUyIDE1Mi4zNTZhMTIuMDAxIDEyLjAwMSAwIDAgMCA4LjEzOSAzLjE4Mmg4Mi41NjJjMTAuOTI0IDAgMTYuMTY2LTEzLjQwOCA4LjEzOS0yMC44MThMMTE2Ljg3MSAzMTkuOTA2Yzc2LjQ5OS0yLjM0IDEzMS4xNDQtNTMuMzk1IDEzOC4zMTgtMTI3LjkwNkgzMDhjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNTguNjljLTMuNDg2LTExLjU0MS04LjI4LTIyLjI0Ni0xNC4yNTItMzJIMzA4elwiXSxcInNhZC1jcnlcIjpbNDk2LDUxMixbXSxcImY1YjNcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NmMwIDkwLjEgNDguMiAxNjguNyAxMjAgMjEyLjFWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2MTk2LjdjMjkuNSAxMi40IDYyIDE5LjMgOTYgMTkuM3M2Ni41LTYuOSA5Ni0xOS4zVjI4OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djE4MC4xQzQ0Ny44IDQyNC43IDQ5NiAzNDYgNDk2IDI1NiA0OTYgMTE5IDM4NSA4IDI0OCA4em0tNjUuNSAyMTYuNWMtMTQuOC0xMy4yLTQ2LjItMTMuMi02MSAwTDExMiAyMzNjLTMuOCAzLjMtOS4zIDQtMTMuNyAxLjYtNC40LTIuNC02LjktNy40LTYuMS0xMi40IDQtMjUuMiAzNC4yLTQyLjEgNTkuOS00Mi4xUzIwOCAxOTcgMjEyIDIyMi4yYy44IDUtMS43IDEwLTYuMSAxMi40LTUuOCAzLjEtMTEuMi43LTEzLjctMS42bC05LjctOC41ek0yNDggNDE2Yy0yNi41IDAtNDgtMjguNy00OC02NHMyMS41LTY0IDQ4LTY0IDQ4IDI4LjcgNDggNjQtMjEuNSA2NC00OCA2NHptMTQ5LjgtMTgxLjVjLTUuOCAzLjEtMTEuMi43LTEzLjctMS42bC05LjUtOC41Yy0xNC44LTEzLjItNDYuMi0xMy4yLTYxIDBMMzA0IDIzM2MtMy44IDMuMy05LjMgNC0xMy43IDEuNi00LjQtMi40LTYuOS03LjQtNi4xLTEyLjQgNC0yNS4yIDM0LjItNDIuMSA1OS45LTQyLjFTNDAwIDE5NyA0MDQgMjIyLjJjLjYgNC45LTEuOCA5LjktNi4yIDEyLjN6XCJdLFwic2FkLXRlYXJcIjpbNDk2LDUxMixbXSxcImY1YjRcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4em04MCAxNjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMiAxNC4zLTMyIDMyLTMyek0xNTIgNDE2Yy0yNi41IDAtNDgtMjEtNDgtNDcgMC0yMCAyOC41LTYwLjQgNDEuNi03Ny44IDMuMi00LjMgOS42LTQuMyAxMi44IDBDMTcxLjUgMzA4LjYgMjAwIDM0OSAyMDAgMzY5YzAgMjYtMjEuNSA0Ny00OCA0N3ptMTYtMTc2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyIDMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMnptMTcwLjIgMTU0LjJDMzE1LjggMzY3LjQgMjgyLjkgMzUyIDI0OCAzNTJjLTIxLjIgMC0yMS4yLTMyIDAtMzIgNDQuNCAwIDg2LjMgMTkuNiAxMTQuNyA1My44IDEzLjggMTYuNC0xMS4yIDM2LjUtMjQuNSAyMC40elwiXSxzYXZlOls0NDgsNTEyLFtdLFwiZjBjN1wiLFwiTTQzMy45NDEgMTI5Ljk0MWwtODMuODgyLTgzLjg4MkE0OCA0OCAwIDAgMCAzMTYuMTE4IDMySDQ4QzIxLjQ5IDMyIDAgNTMuNDkgMCA4MHYzNTJjMCAyNi41MSAyMS40OSA0OCA0OCA0OGgzNTJjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxNjMuODgyYTQ4IDQ4IDAgMCAwLTE0LjA1OS0zMy45NDF6TTIyNCA0MTZjLTM1LjM0NiAwLTY0LTI4LjY1NC02NC02NCAwLTM1LjM0NiAyOC42NTQtNjQgNjQtNjRzNjQgMjguNjU0IDY0IDY0YzAgMzUuMzQ2LTI4LjY1NCA2NC02NCA2NHptOTYtMzA0LjUyVjIxMmMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDc2Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyVjEwOGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDIyOC41MmMzLjE4MyAwIDYuMjM1IDEuMjY0IDguNDg1IDMuNTE1bDMuNDggMy40OEExMS45OTYgMTEuOTk2IDAgMCAxIDMyMCAxMTEuNDh6XCJdLHNjaG9vbDpbNjQwLDUxMixbXSxcImY1NDlcIixcIk0wIDIyNHYyNzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoODBWMTkySDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMyem0zNjAtNDhoLTI0di00MGMwLTQuNDItMy41OC04LTgtOGgtMTZjLTQuNDIgMC04IDMuNTgtOCA4djY0YzAgNC40MiAzLjU4IDggOCA4aDQ4YzQuNDIgMCA4LTMuNTggOC04di0xNmMwLTQuNDItMy41OC04LTgtOHptMTM3Ljc1LTYzLjk2bC0xNjAtMTA2LjY3YTMyLjAyIDMyLjAyIDAgMCAwLTM1LjUgMGwtMTYwIDEwNi42N0EzMi4wMDIgMzIuMDAyIDAgMCAwIDEyOCAxMzguNjZWNTEyaDEyOFYzNjhjMC04Ljg0IDcuMTYtMTYgMTYtMTZoOTZjOC44NCAwIDE2IDcuMTYgMTYgMTZ2MTQ0aDEyOFYxMzguNjdjMC0xMC43LTUuMzUtMjAuNy0xNC4yNS0yNi42M3pNMzIwIDI1NmMtNDQuMTggMC04MC0zNS44Mi04MC04MHMzNS44Mi04MCA4MC04MCA4MCAzNS44MiA4MCA4MC0zNS44MiA4MC04MCA4MHptMjg4LTY0aC02NHYzMjBoODBjOC44NCAwIDE2LTcuMTYgMTYtMTZWMjI0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6XCJdLHNjcmV3ZHJpdmVyOls1MTIsNTEyLFtdLFwiZjU0YVwiLFwiTTQ0OCAwTDMyMCA5NnY2Mi4wNmwtODMuMDMgODMuMDNjNi43OSA0LjI1IDEzLjI3IDkuMDYgMTkuMDcgMTQuODcgNS44IDUuOCAxMC42MiAxMi4yOCAxNC44NyAxOS4wN0wzNTMuOTQgMTkySDQxNmw5Ni0xMjgtNjQtNjR6TTEyOCAyNzguNTlMMTAuOTIgMzk1LjY3Yy0xNC41NSAxNC41NS0xNC41NSAzOC4xNSAwIDUyLjcxbDUyLjcgNTIuN2MxNC41NiAxNC41NiAzOC4xNSAxNC41NiA1Mi43MSAwTDIzMy40MSAzODRjMjkuMTEtMjkuMTEgMjkuMTEtNzYuMyAwLTEwNS40MXMtNzYuMy0yOS4xMS0xMDUuNDEgMHpcIl0sc2VhcmNoOls1MTIsNTEyLFtdLFwiZjAwMlwiLFwiTTUwNSA0NDIuN0w0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6XCJdLFwic2VhcmNoLW1pbnVzXCI6WzUxMiw1MTIsW10sXCJmMDEwXCIsXCJNMzA0IDE5MnYzMmMwIDYuNi01LjQgMTItMTIgMTJIMTI0Yy02LjYgMC0xMi01LjQtMTItMTJ2LTMyYzAtNi42IDUuNC0xMiAxMi0xMmgxNjhjNi42IDAgMTIgNS40IDEyIDEyem0yMDEgMjg0LjdMNDc2LjcgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwzNDMgNDA1LjNjLTQuNS00LjUtNy0xMC42LTctMTdWMzcyYy0zNS4zIDI3LjYtNzkuNyA0NC0xMjggNDRDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBzMjA4IDkzLjEgMjA4IDIwOGMwIDQ4LjMtMTYuNCA5Mi43LTQ0IDEyOGgxNi4zYzYuNCAwIDEyLjUgMi41IDE3IDdsOTkuNyA5OS43YzkuMyA5LjQgOS4zIDI0LjYgMCAzNHpNMzQ0IDIwOGMwLTc1LjItNjAuOC0xMzYtMTM2LTEzNlM3MiAxMzIuOCA3MiAyMDhzNjAuOCAxMzYgMTM2IDEzNiAxMzYtNjAuOCAxMzYtMTM2elwiXSxcInNlYXJjaC1wbHVzXCI6WzUxMiw1MTIsW10sXCJmMDBlXCIsXCJNMzA0IDE5MnYzMmMwIDYuNi01LjQgMTItMTIgMTJoLTU2djU2YzAgNi42LTUuNCAxMi0xMiAxMmgtMzJjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNTZoLTU2Yy02LjYgMC0xMi01LjQtMTItMTJ2LTMyYzAtNi42IDUuNC0xMiAxMi0xMmg1NnYtNTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnY1Nmg1NmM2LjYgMCAxMiA1LjQgMTIgMTJ6bTIwMSAyODQuN0w0NzYuNyA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDM0MyA0MDUuM2MtNC41LTQuNS03LTEwLjYtNy0xN1YzNzJjLTM1LjMgMjcuNi03OS43IDQ0LTEyOCA0NEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMHMyMDggOTMuMSAyMDggMjA4YzAgNDguMy0xNi40IDkyLjctNDQgMTI4aDE2LjNjNi40IDAgMTIuNSAyLjUgMTcgN2w5OS43IDk5LjdjOS4zIDkuNCA5LjMgMjQuNiAwIDM0ek0zNDQgMjA4YzAtNzUuMi02MC44LTEzNi0xMzYtMTM2UzcyIDEzMi44IDcyIDIwOHM2MC44IDEzNiAxMzYgMTM2IDEzNi02MC44IDEzNi0xMzZ6XCJdLHNlZWRsaW5nOls1MTIsNTEyLFtdLFwiZjRkOFwiLFwiTTY0IDk2SDBjMCAxMjMuNyAxMDAuMyAyMjQgMjI0IDIyNHYxNDRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzMjBDMjg4IDE5Ni4zIDE4Ny43IDk2IDY0IDk2em0zODQtNjRjLTg0LjIgMC0xNTcuNCA0Ni41LTE5NS43IDExNS4yIDI3LjcgMzAuMiA0OC4yIDY2LjkgNTkgMTA3LjZDNDI0IDI0My4xIDUxMiAxNDcuOSA1MTIgMzJoLTY0elwiXSxzZXJ2ZXI6WzUxMiw1MTIsW10sXCJmMjMzXCIsXCJNNDgwIDE2MEgzMmMtMTcuNjczIDAtMzItMTQuMzI3LTMyLTMyVjY0YzAtMTcuNjczIDE0LjMyNy0zMiAzMi0zMmg0NDhjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjY0YzAgMTcuNjczLTE0LjMyNyAzMi0zMiAzMnptLTQ4LTg4Yy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjRzMTAuNzQ1IDI0IDI0IDI0IDI0LTEwLjc0NSAyNC0yNC0xMC43NDUtMjQtMjQtMjR6bS02NCAwYy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjRzMTAuNzQ1IDI0IDI0IDI0IDI0LTEwLjc0NSAyNC0yNC0xMC43NDUtMjQtMjQtMjR6bTExMiAyNDhIMzJjLTE3LjY3MyAwLTMyLTE0LjMyNy0zMi0zMnYtNjRjMC0xNy42NzMgMTQuMzI3LTMyIDMyLTMyaDQ0OGMxNy42NzMgMCAzMiAxNC4zMjcgMzIgMzJ2NjRjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMyem0tNDgtODhjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHMxMC43NDUgMjQgMjQgMjQgMjQtMTAuNzQ1IDI0LTI0LTEwLjc0NS0yNC0yNC0yNHptLTY0IDBjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHMxMC43NDUgMjQgMjQgMjQgMjQtMTAuNzQ1IDI0LTI0LTEwLjc0NS0yNC0yNC0yNHptMTEyIDI0OEgzMmMtMTcuNjczIDAtMzItMTQuMzI3LTMyLTMydi02NGMwLTE3LjY3MyAxNC4zMjctMzIgMzItMzJoNDQ4YzE3LjY3MyAwIDMyIDE0LjMyNyAzMiAzMnY2NGMwIDE3LjY3My0xNC4zMjcgMzItMzIgMzJ6bS00OC04OGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0czEwLjc0NSAyNCAyNCAyNCAyNC0xMC43NDUgMjQtMjQtMTAuNzQ1LTI0LTI0LTI0em0tNjQgMGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0czEwLjc0NSAyNCAyNCAyNCAyNC0xMC43NDUgMjQtMjQtMTAuNzQ1LTI0LTI0LTI0elwiXSxzaGFyZTpbNTEyLDUxMixbXSxcImYwNjRcIixcIk01MDMuNjkxIDE4OS44MzZMMzI3LjY4NyAzNy44NTFDMzEyLjI4MSAyNC41NDYgMjg4IDM1LjM0NyAyODggNTYuMDE1djgwLjA1M0MxMjcuMzcxIDEzNy45MDcgMCAxNzAuMSAwIDMyMi4zMjZjMCA2MS40NDEgMzkuNTgxIDEyMi4zMDkgODMuMzMzIDE1NC4xMzIgMTMuNjUzIDkuOTMxIDMzLjExMS0yLjUzMyAyOC4wNzctMTguNjMxQzY2LjA2NiAzMTIuODE0IDEzMi45MTcgMjc0LjMxNiAyODggMjcyLjA4NVYzNjBjMCAyMC43IDI0LjMgMzEuNDUzIDM5LjY4NyAxOC4xNjRsMTc2LjAwNC0xNTJjMTEuMDcxLTkuNTYyIDExLjA4Ni0yNi43NTMgMC0zNi4zMjh6XCJdLFwic2hhcmUtYWx0XCI6WzQ0OCw1MTIsW10sXCJmMWUwXCIsXCJNMzUyIDMyMGMtMjIuNjA4IDAtNDMuMzg3IDcuODE5LTU5Ljc5IDIwLjg5NWwtMTAyLjQ4Ni02NC4wNTRhOTYuNTUxIDk2LjU1MSAwIDAgMCAwLTQxLjY4M2wxMDIuNDg2LTY0LjA1NEMzMDguNjEzIDE4NC4xODEgMzI5LjM5MiAxOTIgMzUyIDE5MmM1My4wMTkgMCA5Ni00Mi45ODEgOTYtOTZTNDA1LjAxOSAwIDM1MiAwcy05NiA0Mi45ODEtOTYgOTZjMCA3LjE1OC43OSAxNC4xMyAyLjI3NiAyMC44NDFMMTU1Ljc5IDE4MC44OTVDMTM5LjM4NyAxNjcuODE5IDExOC42MDggMTYwIDk2IDE2MGMtNTMuMDE5IDAtOTYgNDIuOTgxLTk2IDk2czQyLjk4MSA5NiA5NiA5NmMyMi42MDggMCA0My4zODctNy44MTkgNTkuNzktMjAuODk1bDEwMi40ODYgNjQuMDU0QTk2LjMwMSA5Ni4zMDEgMCAwIDAgMjU2IDQxNmMwIDUzLjAxOSA0Mi45ODEgOTYgOTYgOTZzOTYtNDIuOTgxIDk2LTk2LTQyLjk4MS05Ni05Ni05NnpcIl0sXCJzaGFyZS1hbHQtc3F1YXJlXCI6WzQ0OCw1MTIsW10sXCJmMWUxXCIsXCJNNDQ4IDgwdjM1MmMwIDI2LjUxLTIxLjQ5IDQ4LTQ4IDQ4SDQ4Yy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4VjgwYzAtMjYuNTEgMjEuNDktNDggNDgtNDhoMzUyYzI2LjUxIDAgNDggMjEuNDkgNDggNDh6TTMwNCAyOTZjLTE0LjU2MiAwLTI3LjgyMyA1LjU2MS0zNy43ODMgMTQuNjcxbC02Ny45NTgtNDAuNzc1YTU2LjMzOSA1Ni4zMzkgMCAwIDAgMC0yNy43OTNsNjcuOTU4LTQwLjc3NUMyNzYuMTc3IDIxMC40MzkgMjg5LjQzOCAyMTYgMzA0IDIxNmMzMC45MjggMCA1Ni0yNS4wNzIgNTYtNTZzLTI1LjA3Mi01Ni01Ni01Ni01NiAyNS4wNzItNTYgNTZjMCA0Ljc5Ny42MDUgOS40NTMgMS43NCAxMy44OTdsLTY3Ljk1OCA0MC43NzVDMTcxLjgyMyAyMDUuNTYxIDE1OC41NjIgMjAwIDE0NCAyMDBjLTMwLjkyOCAwLTU2IDI1LjA3Mi01NiA1NnMyNS4wNzIgNTYgNTYgNTZjMTQuNTYyIDAgMjcuODIzLTUuNTYxIDM3Ljc4My0xNC42NzFsNjcuOTU4IDQwLjc3NWE1Ni4wODggNTYuMDg4IDAgMCAwLTEuNzQgMTMuODk3YzAgMzAuOTI4IDI1LjA3MiA1NiA1NiA1NnM1Ni0yNS4wNzIgNTYtNTZDMzYwIDMyMS4wNzIgMzM0LjkyOCAyOTYgMzA0IDI5NnpcIl0sXCJzaGFyZS1zcXVhcmVcIjpbNTc2LDUxMixbXSxcImYxNGRcIixcIk01NjguNDgyIDE3Ny40NDhMNDI0LjQ3OSAzMTMuNDMzQzQwOS4zIDMyNy43NjggMzg0IDMxNy4xNCAzODQgMjk1Ljk4NXYtNzEuOTYzYy0xNDQuNTc1Ljk3LTIwNS41NjYgMzUuMTEzLTE2NC43NzUgMTcxLjM1MyA0LjQ4MyAxNC45NzMtMTIuODQ2IDI2LjU2Ny0yNS4wMDYgMTcuMzNDMTU1LjI1MiAzODMuMTA1IDEyMCAzMjYuNDg4IDEyMCAyNjkuMzM5YzAtMTQzLjkzNyAxMTcuNTk5LTE3Mi41IDI2NC0xNzMuMzEyVjI0LjAxMmMwLTIxLjE3NCAyNS4zMTctMzEuNzY4IDQwLjQ3OS0xNy40NDhsMTQ0LjAwMyAxMzUuOTg4YzEwLjAyIDkuNDYzIDEwLjAyOCAyNS40MjUgMCAzNC44OTZ6TTM4NCAzNzkuMTI4VjQ0OEg2NFYxMjhoNTAuOTE2YTExLjk5IDExLjk5IDAgMCAwIDguNjQ4LTMuNjkzYzE0Ljk1My0xNS41NjggMzIuMjM3LTI3Ljg5IDUxLjAxNC0zNy42NzZDMTg1LjcwOCA4MC44MyAxODEuNTg0IDY0IDE2OS4wMzMgNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYzNTJjMCAyNi41MSAyMS40OSA0OCA0OCA0OGgzNTJjMjYuNTEgMCA0OC0yMS40OSA0OC00OHYtODguODA2YzAtOC4yODgtOC4xOTctMTQuMDY2LTE2LjAxMS0xMS4zMDJhNzEuODMgNzEuODMgMCAwIDEtMzQuMTg5IDMuMzc3Yy03LjI3LTEuMDQ2LTEzLjggNC41MTQtMTMuOCAxMS44NTl6XCJdLFwic2hla2VsLXNpZ25cIjpbNDQ4LDUxMixbXSxcImYyMGJcIixcIk0yNDggMTY4djE2OGMwIDguODQgNy4xNiAxNiAxNiAxNmg0OGM4Ljg0IDAgMTYtNy4xNiAxNi0xNlYxNjhjMC03NS4xMS02MC44OS0xMzYtMTM2LTEzNkgyNEMxMC43NSAzMiAwIDQyLjc0IDAgNTZ2NDA4YzAgOC44NCA3LjE2IDE2IDE2IDE2aDQ4YzguODQgMCAxNi03LjE2IDE2LTE2VjExMmgxMTJjMzAuOTMgMCA1NiAyNS4wNyA1NiA1NnpNNDMyIDMyaC00OGMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2Mjk2YzAgMzAuOTMtMjUuMDcgNTYtNTYgNTZIMjAwVjE3NmMwLTguODQtNy4xNi0xNi0xNi0xNmgtNDhjLTguODQgMC0xNiA3LjE2LTE2IDE2djI4MGMwIDEzLjI1IDEwLjc1IDI0IDI0IDI0aDE2OGM3NS4xMSAwIDEzNi02MC44OSAxMzYtMTM2VjQ4YzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxcInNoaWVsZC1hbHRcIjpbNTEyLDUxMixbXSxcImYzZWRcIixcIk00OTYgMTI4YzAgMjIxLjI4Mi0xMzUuOTM0IDM0NC42NDUtMjIxLjUzOSAzODAuMzA4YTQ4IDQ4IDAgMCAxLTM2LjkyMyAwQzEzMC40OTUgNDYzLjcxMyAxNiAzMjYuNDg3IDE2IDEyOGE0OCA0OCAwIDAgMSAyOS41MzktNDQuMzA4bDE5Mi04MGE0OCA0OCAwIDAgMSAzNi45MjMgMGwxOTIgODBBNDggNDggMCAwIDEgNDk2IDEyOHpNMjU2IDQ0Ni4zMTNsLjA2Ni4wMzRjOTMuNzM1LTQ2LjY4OSAxNzIuNDk3LTE1Ni4zMDggMTc1LjgxNy0zMDcuNzI5TDI1NiA2NS4zMzN2MzgwLjk4elwiXSxzaGlwOls2NDAsNTEyLFtdLFwiZjIxYVwiLFwiTTQ5Ni42MTYgMzcyLjYzOWw3MC4wMTItNzAuMDEyYzE2Ljg5OS0xNi45IDkuOTQyLTQ1Ljc3MS0xMi44MzYtNTMuMDkyTDUxMiAyMzYuMTAyVjk2YzAtMTcuNjczLTE0LjMyNy0zMi0zMi0zMmgtNjRWMjRjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDI0OGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djQwaC02NGMtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMydjE0MC4xMDJsLTQxLjc5MiAxMy40MzNjLTIyLjc1MyA3LjMxMy0yOS43NTQgMzYuMTczLTEyLjgzNiA1My4wOTJsNzAuMDEyIDcwLjAxMkMxMjUuODI4IDQxNi4yODcgODUuNTg3IDQ0OCAyNCA0NDhjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYxNmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjQgNjEuMDIzIDAgMTA3LjQ5OS0yMC42MSAxNDMuMjU4LTU5LjM5NkMxODEuNjc3IDQ4Ny40MzIgMjE2LjAyMSA1MTIgMjU2IDUxMmgxMjhjMzkuOTc5IDAgNzQuMzIzLTI0LjU2OCA4OC43NDItNTkuMzk2QzUwOC40OTUgNDkxLjM4NCA1NTQuOTY4IDUxMiA2MTYgNTEyYzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtMTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0LTYwLjgxNyAwLTEwMS41NDItMzEuMDAxLTExOS4zODQtNzUuMzYxek0xOTIgMTI4aDI1NnY4Ny41MzFsLTExOC4yMDgtMzcuOTk1YTMxLjk5NSAzMS45OTUgMCAwIDAtMTkuNTg0IDBMMTkyIDIxNS41MzFWMTI4elwiXSxcInNoaXBwaW5nLWZhc3RcIjpbNjQwLDUxMixbXSxcImY0OGJcIixcIk02MjQgMzUyaC0xNlYyNDMuOWMwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45TDQ5NCAxMTAuMWMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFINDE2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDExMkM4NS41IDAgNjQgMjEuNSA2NCA0OHY0OEg4Yy00LjQgMC04IDMuNi04IDh2MTZjMCA0LjQgMy42IDggOCA4aDI3MmM0LjQgMCA4IDMuNiA4IDh2MTZjMCA0LjQtMy42IDgtOCA4SDQwYy00LjQgMC04IDMuNi04IDh2MTZjMCA0LjQgMy42IDggOCA4aDIwOGM0LjQgMCA4IDMuNiA4IDh2MTZjMCA0LjQtMy42IDgtOCA4SDhjLTQuNCAwLTggMy42LTggOHYxNmMwIDQuNCAzLjYgOCA4IDhoMjA4YzQuNCAwIDggMy42IDggOHYxNmMwIDQuNC0zLjYgOC04IDhINjR2MTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZoMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZoNDhjOC44IDAgMTYtNy4yIDE2LTE2di0zMmMwLTguOC03LjItMTYtMTYtMTZ6TTE2MCA0NjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDggNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4em0zMjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OCA0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDh6bTgwLTIwOEg0MTZWMTQ0aDQ0LjFsOTkuOSA5OS45VjI1NnpcIl0sXCJzaG9lLXByaW50c1wiOls2NDAsNTEyLFtdLFwiZjU0YlwiLFwiTTE5MiAxNjBoMzJWMzJoLTMyYy0zNS4zNSAwLTY0IDI4LjY1LTY0IDY0czI4LjY1IDY0IDY0IDY0ek0wIDQxNmMwIDM1LjM1IDI4LjY1IDY0IDY0IDY0aDMyVjM1Mkg2NGMtMzUuMzUgMC02NCAyOC42NS02NCA2NHptMzM3LjQ2LTEyOGMtMzQuOTEgMC03Ni4xNiAxMy4xMi0xMDQuNzMgMzItMjQuNzkgMTYuMzgtNDQuNTIgMzItMTA0LjczIDMydjEyOGw1Ny41MyAxNS45N2MyNi4yMSA3LjI4IDUzLjAxIDEzLjEyIDgwLjMxIDE1LjA1IDMyLjY5IDIuMzEgNjUuNi42NyA5Ny41OC02LjJDNDcyLjkgNDgxLjMgNTEyIDQyOS4yMiA1MTIgMzg0YzAtNjQtODQuMTgtOTYtMTc0LjU0LTk2ek00OTEuNDIgNy4xOUM0NTkuNDQuMzIgNDI2LjUzLTEuMzMgMzkzLjg0Ljk5Yy0yNy4zIDEuOTMtNTQuMSA3Ljc3LTgwLjMxIDE1LjA0TDI1NiAzMnYxMjhjNjAuMiAwIDc5Ljk0IDE1LjYyIDEwNC43MyAzMiAyOC41NyAxOC44OCA2OS44MiAzMiAxMDQuNzMgMzJDNTU1LjgyIDIyNCA2NDAgMTkyIDY0MCAxMjhjMC00NS4yMi0zOS4xLTk3LjMtMTQ4LjU4LTEyMC44MXpcIl0sXCJzaG9wcGluZy1iYWdcIjpbNDQ4LDUxMixbXSxcImYyOTBcIixcIk0zNTIgMTYwdi0zMkMzNTIgNTcuNDIgMjk0LjU3OSAwIDIyNCAwIDE1My40MiAwIDk2IDU3LjQyIDk2IDEyOHYzMkgwdjI3MmMwIDQ0LjE4MyAzNS44MTcgODAgODAgODBoMjg4YzQ0LjE4MyAwIDgwLTM1LjgxNyA4MC04MFYxNjBoLTk2em0tMTkyLTMyYzAtMzUuMjkgMjguNzEtNjQgNjQtNjRzNjQgMjguNzEgNjQgNjR2MzJIMTYwdi0zMnptMTYwIDEyMGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0czEwLjc0NS0yNCAyNC0yNCAyNCAxMC43NDUgMjQgMjQtMTAuNzQ1IDI0LTI0IDI0em0tMTkyIDBjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNHMxMC43NDUtMjQgMjQtMjQgMjQgMTAuNzQ1IDI0IDI0LTEwLjc0NSAyNC0yNCAyNHpcIl0sXCJzaG9wcGluZy1iYXNrZXRcIjpbNTc2LDUxMixbXSxcImYyOTFcIixcIk01NzYgMjE2djE2YzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNGgtOGwtMjYuMTEzIDE4Mi43ODhDNTE0LjUwOSA0NjIuNDM1IDQ5NC4yNTcgNDgwIDQ3MC4zNyA0ODBIMTA1LjYzYy0yMy44ODcgMC00NC4xMzktMTcuNTY1LTQ3LjUxOC00MS4yMTJMMzIgMjU2aC04Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjR2LTE2YzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGg2Ny4zNDFsMTA2Ljc4LTE0Ni44MjFjMTAuMzk1LTE0LjI5MiAzMC40MDctMTcuNDUzIDQ0LjcwMS03LjA1OCAxNC4yOTMgMTAuMzk1IDE3LjQ1MyAzMC40MDggNy4wNTggNDQuNzAxTDE3MC40NzcgMTkyaDIzNS4wNDZMMzI2LjEyIDgyLjgyMWMtMTAuMzk1LTE0LjI5Mi03LjIzNC0zNC4zMDYgNy4wNTktNDQuNzAxIDE0LjI5MS0xMC4zOTUgMzQuMzA2LTcuMjM1IDQ0LjcwMSA3LjA1OEw0ODQuNjU5IDE5Mkg1NTJjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0ek0zMTIgMzkyVjI4MGMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRzLTI0IDEwLjc0NS0yNCAyNHYxMTJjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0czI0LTEwLjc0NSAyNC0yNHptMTEyIDBWMjgwYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHMtMjQgMTAuNzQ1LTI0IDI0djExMmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRzMjQtMTAuNzQ1IDI0LTI0em0tMjI0IDBWMjgwYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHMtMjQgMTAuNzQ1LTI0IDI0djExMmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRzMjQtMTAuNzQ1IDI0LTI0elwiXSxcInNob3BwaW5nLWNhcnRcIjpbNTc2LDUxMixbXSxcImYwN2FcIixcIk01MjguMTIgMzAxLjMxOWw0Ny4yNzMtMjA4QzU3OC44MDYgNzguMzAxIDU2Ny4zOTEgNjQgNTUxLjk5IDY0SDE1OS4yMDhsLTkuMTY2LTQ0LjgxQzE0Ny43NTggOC4wMjEgMTM3LjkzIDAgMTI2LjUyOSAwSDI0QzEwLjc0NSAwIDAgMTAuNzQ1IDAgMjR2MTZjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDY5Ljg4M2w3MC4yNDggMzQzLjQzNUMxNDcuMzI1IDQxNy4xIDEzNiA0MzUuMjIyIDEzNiA0NTZjMCAzMC45MjggMjUuMDcyIDU2IDU2IDU2czU2LTI1LjA3MiA1Ni01NmMwLTE1LjY3NC02LjQ0Ny0yOS44MzUtMTYuODI0LTQwaDIwOS42NDdDNDMwLjQ0NyA0MjYuMTY1IDQyNCA0NDAuMzI2IDQyNCA0NTZjMCAzMC45MjggMjUuMDcyIDU2IDU2IDU2czU2LTI1LjA3MiA1Ni01NmMwLTIyLjE3Mi0xMi44ODgtNDEuMzMyLTMxLjU3OS01MC40MDVsNS41MTctMjQuMjc2YzMuNDEzLTE1LjAxOC04LjAwMi0yOS4zMTktMjMuNDAzLTI5LjMxOUgyMTguMTE3bC02LjU0NS0zMmgyOTMuMTQ1YzExLjIwNiAwIDIwLjkyLTcuNzU0IDIzLjQwMy0xOC42ODF6XCJdLHNob3dlcjpbNTEyLDUxMixbXSxcImYyY2NcIixcIk0zODkuNjYgMTM1LjZMMjMxLjYgMjkzLjY2Yy05LjM3IDkuMzctMjQuNTcgOS4zNy0zMy45NCAwbC0xMS4zMi0xMS4zMmMtOS4zNy05LjM3LTkuMzctMjQuNTcgMC0zMy45NGwuMTEtLjExYy0zNC4wMy00MC4yMS0zNS4xNi05OC45NC0zLjM5LTE0MC4zOC0xMS45Ny03LjU1LTI2LjE0LTExLjkxLTQxLjMtMTEuOTFDOTguODggOTYgNjQgMTMwLjg4IDY0IDE3My43NlY0ODBIMFYxNzMuNzZDMCA5NS41OSA2My41OSAzMiAxNDEuNzYgMzJjMzYuOTMgMCA3MC42MSAxNC4yIDk1Ljg2IDM3LjQyIDM1LjktMTEuNTEgNzYuNS00LjUgMTA2LjY3IDIxLjAzbC4xMS0uMTFjOS4zNy05LjM3IDI0LjU3LTkuMzcgMzMuOTQgMGwxMS4zMiAxMS4zMmM5LjM3IDkuMzcgOS4zNyAyNC41NyAwIDMzLjk0ek0zODQgMjA4YzAgOC44MzctNy4xNjMgMTYtMTYgMTZzLTE2LTcuMTYzLTE2LTE2IDcuMTYzLTE2IDE2LTE2IDE2IDcuMTYzIDE2IDE2em0zMiAwYzAtOC44MzcgNy4xNjMtMTYgMTYtMTZzMTYgNy4xNjMgMTYgMTYtNy4xNjMgMTYtMTYgMTYtMTYtNy4xNjMtMTYtMTZ6bTk2IDBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNnMtMTYtNy4xNjMtMTYtMTYgNy4xNjMtMTYgMTYtMTYgMTYgNy4xNjMgMTYgMTZ6bS0xNjAgMzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNnMtMTYtNy4xNjMtMTYtMTYgNy4xNjMtMTYgMTYtMTYgMTYgNy4xNjMgMTYgMTZ6bTQ4LTE2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZzLTcuMTYzIDE2LTE2IDE2LTE2LTcuMTYzLTE2LTE2IDcuMTYzLTE2IDE2LTE2em04MCAxNmMwIDguODM3LTcuMTYzIDE2LTE2IDE2cy0xNi03LjE2My0xNi0xNiA3LjE2My0xNiAxNi0xNiAxNiA3LjE2MyAxNiAxNnptLTE2MCAzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2cy0xNi03LjE2My0xNi0xNiA3LjE2My0xNiAxNi0xNiAxNiA3LjE2MyAxNiAxNnptMzIgMGMwLTguODM3IDcuMTYzLTE2IDE2LTE2czE2IDcuMTYzIDE2IDE2LTcuMTYzIDE2LTE2IDE2LTE2LTcuMTYzLTE2LTE2em05NiAwYzAgOC44MzctNy4xNjMgMTYtMTYgMTZzLTE2LTcuMTYzLTE2LTE2IDcuMTYzLTE2IDE2LTE2IDE2IDcuMTYzIDE2IDE2em0tMTI4IDMyYzAtOC44MzcgNy4xNjMtMTYgMTYtMTZzMTYgNy4xNjMgMTYgMTYtNy4xNjMgMTYtMTYgMTYtMTYtNy4xNjMtMTYtMTZ6bTk2IDBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNnMtMTYtNy4xNjMtMTYtMTYgNy4xNjMtMTYgMTYtMTYgMTYgNy4xNjMgMTYgMTZ6bS05NiAzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2cy0xNi03LjE2My0xNi0xNiA3LjE2My0xNiAxNi0xNiAxNiA3LjE2MyAxNiAxNnptNjQgMGMwIDguODM3LTcuMTYzIDE2LTE2IDE2cy0xNi03LjE2My0xNi0xNiA3LjE2My0xNiAxNi0xNiAxNiA3LjE2MyAxNiAxNnptLTMyIDMyYzAgOC44MzctNy4xNjMgMTYtMTYgMTZzLTE2LTcuMTYzLTE2LTE2IDcuMTYzLTE2IDE2LTE2IDE2IDcuMTYzIDE2IDE2em0tMzIgMzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNnMtMTYtNy4xNjMtMTYtMTYgNy4xNjMtMTYgMTYtMTYgMTYgNy4xNjMgMTYgMTZ6XCJdLFwic2h1dHRsZS12YW5cIjpbNjQwLDUxMixbXSxcImY1YjZcIixcIk02MjguODggMjEwLjY1TDQ5NC4zOSA0OS4yN0E0OC4wMSA0OC4wMSAwIDAgMCA0NTcuNTIgMzJIMzJDMTQuMzMgMzIgMCA0Ni4zMyAwIDY0djI4OGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDMyYzAgNTMuMDIgNDIuOTggOTYgOTYgOTZzOTYtNDIuOTggOTYtOTZoMTI4YzAgNTMuMDIgNDIuOTggOTYgOTYgOTZzOTYtNDIuOTggOTYtOTZoMzJjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlYyNDEuMzhjMC0xMS4yMy0zLjk0LTIyLjEtMTEuMTItMzAuNzN6TTY0IDE5MlY5Nmg5NnY5Nkg2NHptOTYgMjQwYy0yNi41MSAwLTQ4LTIxLjQ5LTQ4LTQ4czIxLjQ5LTQ4IDQ4LTQ4IDQ4IDIxLjQ5IDQ4IDQ4LTIxLjQ5IDQ4LTQ4IDQ4em0xNjAtMjQwaC05NlY5Nmg5NnY5NnptMTYwIDI0MGMtMjYuNTEgMC00OC0yMS40OS00OC00OHMyMS40OS00OCA0OC00OCA0OCAyMS40OSA0OCA0OC0yMS40OSA0OC00OCA0OHptLTk2LTI0MFY5Nmg2Ni4wMmw4MCA5NkgzODR6XCJdLHNpZ246WzUxMiw1MTIsW10sXCJmNGQ5XCIsXCJNNDk2IDY0SDEyOFYxNmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgxNkM3LjIgNjQgMCA3MS4yIDAgODB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djM2OGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjEyOGgzNjhjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNnpNMTYwIDM4NGgzMjBWMTYwSDE2MHYyMjR6XCJdLFwic2lnbi1pbi1hbHRcIjpbNTEyLDUxMixbXSxcImYyZjZcIixcIk00MTYgNDQ4aC04NGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyaC04NGMtNi42IDAtMTItNS40LTEyLTEyVjc2YzAtNi42IDUuNC0xMiAxMi0xMmg4NGM1MyAwIDk2IDQzIDk2IDk2djE5MmMwIDUzLTQzIDk2LTk2IDk2em0tNDctMjAxTDIwMSA3OWMtMTUtMTUtNDEtNC41LTQxIDE3djk2SDI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxMzZ2OTZjMCAyMS41IDI2IDMyIDQxIDE3bDE2OC0xNjhjOS4zLTkuNCA5LjMtMjQuNiAwLTM0elwiXSxcInNpZ24tbGFuZ3VhZ2VcIjpbNDQ4LDUxMixbXSxcImYyYTdcIixcIk05MS40MzQgNDgzLjk4N2MtLjMwNy0xNi4wMTggMTMuMTA5LTI5LjEyOSAyOS4xMy0yOS4xMjloNjIuMjkzdi01LjcxNEg1Ni45OTNjLTE2LjAyMSAwLTI5LjQzNy0xMy4xMTEtMjkuMTMtMjkuMTI5QzI4LjE2IDQwNC40OTEgNDAuODM1IDM5MiA1Ni40MjggMzkyaDEyNi40Mjl2LTUuNzE0SDI5LjEzNmMtMTYuMDIxIDAtMjkuNDM3LTEzLjExMS0yOS4xMy0yOS4xMjkuMjk3LTE1LjUyMiAxMi45NzMtMjguMDEzIDI4LjU2Ni0yOC4wMTNoMTU0LjI4NnYtNS43MTRINTcuNzA3Yy0xNi4wMjEgMC0yOS40MzctMTMuMTExLTI5LjEzLTI5LjEyOS4yOTctMTUuNTIyIDEyLjk3My0yOC4wMTMgMjguNTY2LTI4LjAxM2gxNjguNTY2bC0zMS4wODUtMjIuNjA2Yy0xMi43NjItOS4yODEtMTUuNTgzLTI3LjE0OS02LjMwMi0zOS45MTIgOS4yODEtMTIuNzYxIDI3LjE1LTE1LjU4MiAzOS45MTItNi4zMDJsMTIzLjM2MSA4OS43MTVhMzQuMjg3IDM0LjI4NyAwIDAgMSAxNC4xMiAyNy43Mjh2MTQxLjEzNmMwIDE1LjkxLTEwLjk0NiAyOS43My0yNi40MzMgMzMuMzc0bC04MC40NzEgMTguOTM0YTEzNy4xNiAxMzcuMTYgMCAwIDEtMzEuNDExIDMuNjQ2SDEyMGMtMTUuNTkzLS4wMDEtMjguMjY5LTEyLjQ5Mi0yOC41NjYtMjguMDE0em03My4yNDktMjI1LjcwMWgzNi40MjNsLTExLjE4Ny04LjEzNmMtMTguNTc5LTEzLjUxMS0yMC4zMTMtNDAuODg3LTMuMTctNTYuNTM2bC0xMy4wMDQtMTYuN2MtOS44NDMtMTIuNjQxLTI4LjQzLTE1LjE3MS00MC44OC01LjA4OC0xMi4wNjUgOS43NzEtMTQuMTMzIDI3LjQ0Ny00LjU1MyAzOS43NWwzNi4zNzEgNDYuNzF6bTI4My4yOTgtMi4xMDNsLTUuMDAzLTE1Mi40NTJjLS41MTgtMTUuNzcxLTEzLjcyMi0yOC4xMzYtMjkuNDkzLTI3LjYxOS0xNS43NzMuNTE4LTI4LjEzNyAxMy43MjItMjcuNjE5IDI5LjQ5M2wxLjI2MiAzOC40MTVMMjgzLjU2NSAxMS4wMTljLTkuNTgtMTIuMzAzLTI3LjIyMy0xNC42My0zOS42NTMtNS4zMjgtMTIuODI3IDkuNTk5LTE0LjkyOSAyOC4yNC01LjA4NiA0MC44ODFsNzYuODg5IDk4Ljc0NS00LjUwOSAzLjUxMS05NC43OS0xMjEuNzM0Yy05LjU4LTEyLjMwMy0yNy4yMjMtMTQuNjMtMzkuNjUzLTUuMzI4LTEyLjgyNyA5LjU5OS0xNC45MjkgMjguMjQtNS4wODYgNDAuODgxbDk0LjQ0MyAxMjEuMjg4LTQuNTA5IDMuNTExLTc3LjY3NS05OS43NTRjLTkuNTgtMTIuMzAzLTI3LjIyMy0xNC42My0zOS42NTMtNS4zMjgtMTIuODI3IDkuNTk5LTE0LjkyOSAyOC4yNC01LjA4NiA0MC44ODFsNTIuMDUzIDY2Ljg0OWMxMi40OTctOC4yNTcgMjkuMDU1LTguMjg1IDQxLjY5LjkwNGwxMjMuMzYgODkuNzE0YzEwLjkwNCA3LjkzIDE3LjQxNSAyMC43MTUgMTcuNDE1IDM0LjE5OHYxNi45OTlsNjEuMDY0LTQ3LjU0OWEzNC4yODUgMzQuMjg1IDAgMCAwIDEzLjIwMi0yOC4xNzd6XCJdLFwic2lnbi1vdXQtYWx0XCI6WzUxMiw1MTIsW10sXCJmMmY1XCIsXCJNNDk3IDI3M0wzMjkgNDQxYy0xNSAxNS00MSA0LjUtNDEtMTd2LTk2SDE1MmMtMTMuMyAwLTI0LTEwLjctMjQtMjR2LTk2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDEzNlY4OGMwLTIxLjQgMjUuOS0zMiA0MS0xN2wxNjggMTY4YzkuMyA5LjQgOS4zIDI0LjYgMCAzNHpNMTkyIDQzNnYtNDBjMC02LjYtNS40LTEyLTEyLTEySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJoODRjNi42IDAgMTItNS40IDEyLTEyVjc2YzAtNi42LTUuNC0xMi0xMi0xMkg5NmMtNTMgMC05NiA0My05NiA5NnYxOTJjMCA1MyA0MyA5NiA5NiA5Nmg4NGM2LjYgMCAxMi01LjQgMTItMTJ6XCJdLHNpZ25hbDpbNjQwLDUxMixbXSxcImYwMTJcIixcIk0zNiAzODRoNTZjNi42IDAgMTIgNS40IDEyIDEydjEwNGMwIDYuNi01LjQgMTItMTIgMTJIMzZjLTYuNiAwLTEyLTUuNC0xMi0xMlYzOTZjMC02LjYgNS40LTEyIDEyLTEyem0xMTYtMzZ2MTUyYzAgNi42IDUuNCAxMiAxMiAxMmg1NmM2LjYgMCAxMi01LjQgMTItMTJWMzQ4YzAtNi42LTUuNC0xMi0xMi0xMmgtNTZjLTYuNiAwLTEyIDUuNC0xMiAxMnptMTI4LTgwdjIzMmMwIDYuNiA1LjQgMTIgMTIgMTJoNTZjNi42IDAgMTItNS40IDEyLTEyVjI2OGMwLTYuNi01LjQtMTItMTItMTJoLTU2Yy02LjYgMC0xMiA1LjQtMTIgMTJ6bTEyOC0xMTJ2MzQ0YzAgNi42IDUuNCAxMiAxMiAxMmg1NmM2LjYgMCAxMi01LjQgMTItMTJWMTU2YzAtNi42LTUuNC0xMi0xMi0xMmgtNTZjLTYuNiAwLTEyIDUuNC0xMiAxMnpNNTM2IDEydjQ4OGMwIDYuNiA1LjQgMTIgMTIgMTJoNTZjNi42IDAgMTItNS40IDEyLTEyVjEyYzAtNi42LTUuNC0xMi0xMi0xMmgtNTZjLTYuNiAwLTEyIDUuNC0xMiAxMnpcIl0sc2lnbmF0dXJlOls1MTIsNTEyLFtdLFwiZjViN1wiLFwiTTQ5NiAzMjBoLTkxLjg2Yy05LjI3IDAtMTkuNzItMTEuMzEtMjUuNzgtMjguNTItMTUuMjMtNDMuMzYtNDguMTEtNzAuMy04NS44LTcwLjMtMzAuODQgMC01OC40NyAxOC4wNS03Ni4xMSA0OS4yM0wxOTQuOCAxMDYuNUMxODguODQgODEuMDggMTY5LjM0IDY0IDE0Ni4yOCA2NGMtMjMuMDUgMC00Mi41NSAxNy4wOC00OC41IDQyLjVMNTYuMTYgMjg0LjJDNTAuNyAzMDcuNDUgMzcuNzUgMzIwIDI4LjMzIDMyMEgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTIuMzNjNDEuOTcgMCA3OC4xOS0zNC4yMyA5MC4xNC04NS4ybDIzLjg0LTEwMS43OCAyOS4yNSAyMjIuMTFjMS45OCAxNS4wNSAxMy44MiAyNy40NSAyOC45NCAyOC43NS45OS4wOSAxLjk2LjEzIDIuOTMuMTMgMTQuMDggMCAyNi42NC05LjI3IDMwLjY5LTIyLjk1bDMzLjAzLTExMi4zNGM1Ljg4LTE2LjcyIDE1Ljg0LTI3LjUyIDI1LjQxLTI3LjUyIDkuNTggMCAxOS41NSAxMC44IDI1Ljc4IDI4LjUyIDE1LjIzIDQzLjM2IDQ4LjExIDcwLjMgODUuOCA3MC4zSDQ5NmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMzJjMC04Ljg2LTcuMTYtMTYuMDItMTYtMTYuMDJ6XCJdLHNpdGVtYXA6WzY0MCw1MTIsW10sXCJmMGU4XCIsXCJNMTI4IDM1MkgzMmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnY5NmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDk2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTk2YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bS0yNC04MGgxOTJ2NDhoNDh2LTQ4aDE5MnY0OGg0OHYtNTcuNTljMC0yMS4xNy0xNy4yMy0zOC40MS0zOC40MS0zOC40MUgzNDR2LTY0aDQwYzE3LjY3IDAgMzItMTQuMzMgMzItMzJWMzJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMkgyNTZjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2OTZjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg0MHY2NEg5NC40MUM3My4yMyAyMjQgNTYgMjQxLjIzIDU2IDI2Mi40MVYzMjBoNDh2LTQ4em0yNjQgODBoLTk2Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjk2YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoOTZjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtOTZjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMjQwIDBoLTk2Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjk2YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoOTZjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtOTZjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnpcIl0sc2t1bGw6WzUxMiw1MTIsW10sXCJmNTRjXCIsXCJNMjU2IDBDMTE0LjYgMCAwIDEwMC4zIDAgMjI0YzAgNzAuMSAzNi45IDEzMi42IDk0LjUgMTczLjcgOS42IDYuOSAxNS4yIDE4LjEgMTMuNSAyOS45bC05LjQgNjYuMmMtMS40IDkuNiA2IDE4LjIgMTUuNyAxOC4ySDE5MnYtNTZjMC00LjQgMy42LTggOC04aDE2YzQuNCAwIDggMy42IDggOHY1Nmg2NHYtNTZjMC00LjQgMy42LTggOC04aDE2YzQuNCAwIDggMy42IDggOHY1Nmg3Ny43YzkuNyAwIDE3LjEtOC42IDE1LjctMTguMmwtOS40LTY2LjJjLTEuNy0xMS43IDMuOC0yMyAxMy41LTI5LjlDNDc1LjEgMzU2LjYgNTEyIDI5NC4xIDUxMiAyMjQgNTEyIDEwMC4zIDM5Ny40IDAgMjU2IDB6bS05NiAzMjBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjQgNjQgMjguNyA2NCA2NC0yOC43IDY0LTY0IDY0em0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NCA2NCAyOC43IDY0IDY0LTI4LjcgNjQtNjQgNjR6XCJdLFwic2xpZGVycy1oXCI6WzUxMiw1MTIsW10sXCJmMWRlXCIsXCJNNDk2IDM4NEgxNjB2LTE2YzAtOC44LTcuMi0xNi0xNi0xNmgtMzJjLTguOCAwLTE2IDcuMi0xNiAxNnYxNkgxNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg4MHYxNmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2di0xNmgzMzZjOC44IDAgMTYtNy4yIDE2LTE2di0zMmMwLTguOC03LjItMTYtMTYtMTZ6bTAtMTYwaC04MHYtMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djE2SDE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMzNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2di0xNmg4MGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNnptMC0xNjBIMjg4VjQ4YzAtOC44LTcuMi0xNi0xNi0xNmgtMzJjLTguOCAwLTE2IDcuMi0xNiAxNnYxNkgxNkM3LjIgNjQgMCA3MS4yIDAgODB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDIwOHYxNmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2di0xNmgyMDhjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNnpcIl0sc21pbGU6WzQ5Niw1MTIsW10sXCJmMTE4XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptODAgMTY4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptLTE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptMTk0LjggMTcwLjJDMzM0LjMgMzgwLjQgMjkyLjUgNDAwIDI0OCA0MDBzLTg2LjMtMTkuNi0xMTQuOC01My44Yy0xMy42LTE2LjMgMTEtMzYuNyAyNC42LTIwLjUgMjIuNCAyNi45IDU1LjIgNDIuMiA5MC4yIDQyLjJzNjcuOC0xNS40IDkwLjItNDIuMmMxMy40LTE2LjIgMzguMSA0LjIgMjQuNiAyMC41elwiXSxcInNtaWxlLWJlYW1cIjpbNDk2LDUxMixbXSxcImY1YjhcIixcIk0yNDggOEMxMTEgOCAwIDExOSAwIDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM4NSA4IDI0OCA4ek0xMTIgMjIzLjRjMy4zLTQyLjEgMzIuMi03MS40IDU2LTcxLjRzNTIuNyAyOS4zIDU2IDcxLjRjLjcgOC42LTEwLjggMTEuOS0xNC45IDQuNWwtOS41LTE3Yy03LjctMTMuNy0xOS4yLTIxLjYtMzEuNS0yMS42cy0yMy44IDcuOS0zMS41IDIxLjZsLTkuNSAxN2MtNC4zIDcuNC0xNS44IDQtMTUuMS00LjV6bTI1MC44IDEyMi44QzMzNC4zIDM4MC40IDI5Mi41IDQwMCAyNDggNDAwcy04Ni4zLTE5LjYtMTE0LjgtNTMuOGMtMTMuNS0xNi4zIDExLTM2LjcgMjQuNi0yMC41IDIyLjQgMjYuOSA1NS4yIDQyLjIgOTAuMiA0Mi4yczY3LjgtMTUuNCA5MC4yLTQyLjJjMTMuNi0xNi4yIDM4LjEgNC4zIDI0LjYgMjAuNXptNi4yLTExOC4zbC05LjUtMTdjLTcuNy0xMy43LTE5LjItMjEuNi0zMS41LTIxLjZzLTIzLjggNy45LTMxLjUgMjEuNmwtOS41IDE3Yy00LjEgNy4zLTE1LjYgNC0xNC45LTQuNSAzLjMtNDIuMSAzMi4yLTcxLjQgNTYtNzEuNHM1Mi43IDI5LjMgNTYgNzEuNGMuNiA4LjYtMTEgMTEuOS0xNS4xIDQuNXpcIl0sXCJzbWlsZS13aW5rXCI6WzQ5Niw1MTIsW10sXCJmNGRhXCIsXCJNMCAyNTZjMCAxMzcgMTExIDI0OCAyNDggMjQ4czI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOCAwIDExOSAwIDI1NnptMjAwLTQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMnptMTU4LjUgMTYuNWMtMTQuOC0xMy4yLTQ2LjItMTMuMi02MSAwTDI4OCAyMzNjLTguMyA3LjQtMjEuNi40LTE5LjgtMTAuOCA0LTI1LjIgMzQuMi00Mi4xIDU5LjktNDIuMVMzODQgMTk3IDM4OCAyMjIuMmMxLjcgMTEuMS0xMS40IDE4LjMtMTkuOCAxMC44bC05LjctOC41ek0xNTcuOCAzMjUuOEMxODAuMiAzNTIuNyAyMTMgMzY4IDI0OCAzNjhzNjcuOC0xNS40IDkwLjItNDIuMmMxMy42LTE2LjIgMzguMSA0LjIgMjQuNiAyMC41QzMzNC4zIDM4MC40IDI5Mi41IDQwMCAyNDggNDAwcy04Ni4zLTE5LjYtMTE0LjgtNTMuOGMtMTMuNS0xNi4zIDExLjItMzYuNyAyNC42LTIwLjR6XCJdLHNtb2tpbmc6WzY0MCw1MTIsW10sXCJmNDhkXCIsXCJNNjMyIDM1MmgtNDhjLTQuNCAwLTggMy42LTggOHYxNDRjMCA0LjQgMy42IDggOCA4aDQ4YzQuNCAwIDgtMy42IDgtOFYzNjBjMC00LjQtMy42LTgtOC04ek01NTMuMyA4Ny4xYy01LjctMy44LTkuMy0xMC05LjMtMTYuOFY4YzAtNC40LTMuNi04LTgtOGgtNDhjLTQuNCAwLTggMy42LTggOHY2Mi4zYzAgMjIgMTAuMiA0My40IDI4LjYgNTUuNCA0Mi4yIDI3LjMgNjcuNCA3My44IDY3LjQgMTI0VjI4MGMwIDQuNCAzLjYgOCA4IDhoNDhjNC40IDAgOC0zLjYgOC04di0zMC4zYzAtNjUuNS0zMi40LTEyNi4yLTg2LjctMTYyLjZ6TTQzMiAzNTJINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM4NGM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNnptLTMyIDExMkgyMjR2LTY0aDE3NnY2NHptODcuNy0zMjIuNEM0NjMuOCAxMjUgNDQ4IDk5LjMgNDQ4IDcwLjNWOGMwLTQuNC0zLjYtOC04LThoLTQ4Yy00LjQgMC04IDMuNi04IDh2NjYuNGMwIDQzLjcgMjQuNiA4MS42IDYwLjMgMTA2LjcgMjIuNCAxNS43IDM1LjcgNDEuMiAzNS43IDY4LjZWMjgwYzAgNC40IDMuNiA4IDggOGg0OGM0LjQgMCA4LTMuNiA4LTh2LTMwLjNjMC00My4zLTIxLTgzLjQtNTYuMy0xMDguMXpNNTM2IDM1MmgtNDhjLTQuNCAwLTggMy42LTggOHYxNDRjMCA0LjQgMy42IDggOCA4aDQ4YzQuNCAwIDgtMy42IDgtOFYzNjBjMC00LjQtMy42LTgtOC04elwiXSxcInNtb2tpbmctYmFuXCI6WzUxMiw1MTIsW10sXCJmNTRkXCIsXCJNOTYgMzA0YzAgOC44IDcuMiAxNiAxNiAxNmgxMTcuNWwtOTYtOTZIMTEyYy04LjggMC0xNiA3LjItMTYgMTZ2NjR6TTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NnMxMTQuNiAyNTYgMjU2IDI1NiAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwem0wIDQ0OGMtMTA1LjkgMC0xOTItODYuMS0xOTItMTkyIDAtNDEuNCAxMy4zLTc5LjcgMzUuNy0xMTEuMWwyNjcuNCAyNjcuNEMzMzUuNyA0MzQuNyAyOTcuNCA0NDggMjU2IDQ0OHptNDUuMi0xOTJIMzg0djMyaC01MC44bC0zMi0zMnptMTExLjEgMTExLjFMMzY1LjIgMzIwSDQwMGM4LjggMCAxNi03LjIgMTYtMTZ2LTY0YzAtOC44LTcuMi0xNi0xNi0xNkgyNjkuMkwxNDQuOSA5OS43QzE3Ni4zIDc3LjMgMjE0LjYgNjQgMjU2IDY0YzEwNS45IDAgMTkyIDg2LjEgMTkyIDE5MiAwIDQxLjQtMTMuMyA3OS43LTM1LjcgMTExLjF6TTMyMC42IDEyOGMtMTUuNiAwLTI4LjYtMTEuMi0zMS40LTI1LjktLjctMy42LTQtNi4xLTcuNy02LjFoLTE2LjJjLTUgMC04LjcgNC41LTggOS40IDQuNiAzMC45IDMxLjIgNTQuNiA2My4zIDU0LjYgMTUuNiAwIDI4LjYgMTEuMiAzMS40IDI1LjkuNyAzLjYgNCA2LjEgNy43IDYuMWgxNi4yYzUgMCA4LjctNC41IDgtOS40LTQuNi0zMC45LTMxLjItNTQuNi02My4zLTU0LjZ6XCJdLHNub3dmbGFrZTpbNDQ4LDUxMixbXSxcImYyZGNcIixcIk00NDQuODE2IDMwMS42MzlhMjQuMTIgMjQuMTIgMCAwIDAgMi42NjEtMTYuOTc4Yy0yLjcyNS0xMi45NjYtMTUuMzM5LTIxLjI0NS0yOC4xNzQtMTguNDkybC04Ny40MDcgMjUuMDQ2TDI2NCAyNTZsNjcuODk2LTM1LjIxNSA4Ny40MDcgMjUuMDQ2YzEyLjgzNSAyLjc1MyAyNS40NDktNS41MjYgMjguMTc0LTE4LjQ5MiAyLjcyNS0xMi45NjYtNS40NzEtMjUuNzA4LTE4LjMwNS0yOC40NjFsLTQ3LjQ3Ny03LjEzNyA1My4wNzctMzAuOTU2YzExLjM2My02LjYyNyAxNS4yNTctMjEuMzA2IDguNjk2LTMyLjc4NS02LjU2MS0xMS40NzktMjEuMDkxLTE1LjQxMi0zMi40NTQtOC43ODVsLTUzLjA3NyAzMC45NTYgMTcuNjIxLTQ1LjEwNGM0LjA1Ny0xMi42MDYtMi43NjgtMjYuMTQ2LTE1LjI0Ny0zMC4yNDUtMTIuNDc4LTQuMDk5LTI1Ljg4MyAyLjc5Ny0yOS45NCAxNS40MDJsLTIyLjIzMiA4OC45OS02MC4zOCAzNS4yMTVWMTQ0bDY1LjE3NS02My45NDVjOC43NzgtOS44NTIgNy45ODctMjUuMDI3LTEuNzY2LTMzLjg5NC05Ljc1My04Ljg2Ny0yNC43NzUtOC4wNjgtMzMuNTUyIDEuNzg0bC0yOS44NTcgMzcuOTY3VjI0YzAtMTMuMjU1LTEwLjYzNy0yNC0yMy43NTgtMjRzLTIzLjc1OCAxMC43NDUtMjMuNzU4IDI0djYxLjkxMmwtMjkuODU3LTM3Ljk2N2MtOC43NzktOS44NTItMjMuNzk5LTEwLjY1Mi0zMy41NTItMS43ODQtOS43NTMgOC44NjctMTAuNTQzIDI0LjA0Mi0xLjc2NiAzMy44OTRMMjAwLjI0MiAxNDR2NzAuNDMxbC02MC4zOC0zNS4yMTUtMjIuMjMyLTg4Ljk5Yy00LjA1Ny0xMi42MDUtMTcuNDYyLTE5LjUwMS0yOS45NC0xNS40MDItMTIuNDc4IDQuMDk5LTE5LjMwNCAxNy42NC0xNS4yNDcgMzAuMjQ1bDE3LjYyIDQ1LjEwNC01My4wNzctMzAuOTU2Yy0xMS4zNjMtNi42MjctMjUuODkzLTIuNjk0LTMyLjQ1NCA4Ljc4NXMtMi42NjcgMjYuMTU3IDguNjk2IDMyLjc4NWw1My4wNzcgMzAuOTU2LTQ3LjQ3NyA3LjEzN0M1Ljk5MyAyMDEuNjM0LTIuMjAzIDIxNC4zNzUuNTIzIDIyNy4zNDFjMi43MjUgMTIuOTY1IDE1LjMzOSAyMS4yNDUgMjguMTc0IDE4LjQ5Mmw4Ny40MDctMjUuMDQ2TDE4NCAyNTZsLTY3Ljg5NiAzNS4yMTUtODcuNDA2LTI1LjA0NWMtMTIuODM1LTIuNzUzLTI1LjQ0OSA1LjUyNi0yOC4xNzQgMTguNDkyLTIuNzI1IDEyLjk2NyA1LjQ3IDI1LjcwOCAxOC4zMDUgMjguNDYxbDQ3LjQ3NyA3LjEzNy01My4wNzcgMzAuOTU2QzEuODY2IDM1Ny44NDMtMi4wMjcgMzcyLjUyMSA0LjUzMyAzODRzMjEuMDkxIDE1LjQxMiAzMi40NTQgOC43ODVsNTMuMDc3LTMwLjk1Ni0xNy42MiA0NS4xMDRhMjQuMTU3IDI0LjE1NyAwIDAgMCAyLjAyMiAxOS40MjhjMi44MzEgNC45NTMgNy40MTYgOC45MDkgMTMuMjI0IDEwLjgxNiAxMi40NzggNC4wOTkgMjUuODgzLTIuNzk3IDI5Ljk0LTE1LjQwMmwyMi4yMzItODguOTkgNjAuMzgtMzUuMjE1VjM2OGwtNjUuMTc1IDYzLjk0NWMtOC43NzggOS44NTItNy45ODcgMjUuMDI3IDEuNzY2IDMzLjg5NCA5Ljc1NCA4Ljg2OCAyNC43NzQgOC4wNjggMzMuNTUyLTEuNzg0bDI5Ljg1Ny0zNy45NjdWNDg4YzAgMTMuMjU1IDEwLjYzNyAyNCAyMy43NTggMjRzMjMuNzU4LTEwLjc0NSAyMy43NTgtMjR2LTYxLjkxMmwyOS44NTcgMzcuOTY3QTIzLjU5IDIzLjU5IDAgMCAwIDI5NS4yODIgNDcyYTIzLjUzNCAyMy41MzQgMCAwIDAgMTUuODg1LTYuMTYxYzkuNzUzLTguODY3IDEwLjU0NC0yNC4wNDIgMS43NjYtMzMuODk0TDI0Ny43NTggMzY4di03MC40MzFsNjAuMzggMzUuMjE1IDIyLjIzMiA4OC45OWM0LjA1NyAxMi42MDUgMTcuNDYyIDE5LjUwMSAyOS45NCAxNS40MDIgMTIuNDc5LTQuMDk5IDE5LjMwNC0xNy42NCAxNS4yNDctMzAuMjQ1bC0xNy42MjEtNDUuMTA0IDUzLjA3NyAzMC45NTZjMTEuMzYzIDYuNjI3IDI1Ljg5MyAyLjY5NCAzMi40NTQtOC43ODVzMi42NjctMjYuMTU3LTguNjk2LTMyLjc4NWwtNTMuMDc3LTMwLjk1NiA0Ny40NzctNy4xMzdjNi44Ni0xLjQ2OSAxMi4zOTQtNS43OTMgMTUuNjQ1LTExLjQ4MXpcIl0sXCJzb2xhci1wYW5lbFwiOls2NDAsNTEyLFtdLFwiZjViYVwiLFwiTTQzMS45OCA0NDguMDFsLTQ3Ljk3LjA1VjQxNmgtMTI4djMyLjIxbC00Ny45OC4wNWMtOC44Mi4wMS0xNS45NyA3LjE2LTE1Ljk4IDE1Ljk5bC0uMDUgMzEuNzNjLS4wMSA4Ljg1IDcuMTcgMTYuMDMgMTYuMDIgMTYuMDJsMjIzLjk2LS4yNmM4LjgyLS4wMSAxNS45Ny03LjE2IDE1Ljk4LTE1Ljk4bC4wNC0zMS43M2MuMDEtOC44NS03LjE3LTE2LjAzLTE2LjAyLTE2LjAyek01ODUuMiAyNi43NEM1ODIuNTggMTEuMzEgNTY4Ljk5IDAgNTUzLjA2IDBIODYuOTNDNzEgMCA1Ny40MSAxMS4zMSA1NC43OSAyNi43NC0zLjMyIDM2OS4xNi4wNCAzNDguMDguMDMgMzUyYy0uMDMgMTcuMzIgMTQuMjkgMzIgMzIuNiAzMmg1NzQuNzRjMTguMjMgMCAzMi41MS0xNC41NiAzMi41OS0zMS43OS4wMi00LjA4IDMuMzUgMTYuOTUtNTQuNzYtMzI1LjQ3ek0yNTkuODMgNjRoMTIwLjMzbDkuNzcgOTZIMjUwLjA2bDkuNzctOTZ6bS03NS4xNyAyNTZINzEuMDlMOTAuMSAyMDhoMTA1Ljk3bC0xMS40MSAxMTJ6bTE2LjI5LTE2MEg5OC4yNGwxNi4yOS05Nmg5Ni4xOWwtOS43NyA5NnptMzIuODIgMTYwbDExLjQtMTEyaDE0OS42NWwxMS40IDExMkgyMzMuNzd6bTE5NS41LTI1Nmg5Ni4xOWwxNi4yOSA5Nkg0MzkuMDRsLTkuNzctOTZ6bTI2LjA2IDI1NmwtMTEuNC0xMTJINTQ5LjlsMTkuMDEgMTEySDQ1NS4zM3pcIl0sc29ydDpbMzIwLDUxMixbXSxcImYwZGNcIixcIk00MSAyODhoMjM4YzIxLjQgMCAzMi4xIDI1LjkgMTcgNDFMMTc3IDQ0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMjQgMzI5Yy0xNS4xLTE1LjEtNC40LTQxIDE3LTQxem0yNTUtMTA1TDE3NyA2NGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMMjQgMTgzYy0xNS4xIDE1LjEtNC40IDQxIDE3IDQxaDIzOGMyMS40IDAgMzIuMS0yNS45IDE3LTQxelwiXSxcInNvcnQtYWxwaGEtZG93blwiOls0NDgsNTEyLFtdLFwiZjE1ZFwiLFwiTTE4Ny4yOTggMzk1LjMxNGwtNzkuOTg0IDgwLjAwMmMtNi4yNDggNi4yNDctMTYuMzgzIDYuMjQ1LTIyLjYyNyAwTDQuNzA1IDM5NS4zMTRDLTUuMzY1IDM4NS4yNDQgMS44MDcgMzY4IDE2LjAxOSAzNjhINjRWNDhjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgzMmM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djMyMGg0Ny45ODRjMTQuMjQxIDAgMjEuMzYzIDE3LjI2NCAxMS4zMTQgMjcuMzE0em0xMTkuMDc1LTE4MC4wMDdBMTIgMTIgMCAwIDEgMjk0LjgzOCAyMjRoLTM1LjcxN2MtOC4yMiAwLTE0LjAwNy04LjA3OC0xMS4zNjItMTUuODYxbDU3LjA5Ni0xNjhBMTIgMTIgMCAwIDEgMzE2LjIxNyAzMmgzOS41NjZjNS4xMzkgMCA5LjcwOCAzLjI3MyAxMS4zNjIgOC4xMzlsNTcuMDk2IDE2OEM0MjYuODg2IDIxNS45MjIgNDIxLjEgMjI0IDQxMi44NzkgMjI0aC0zNS43MzVhMTIgMTIgMCAwIDEtMTEuNTE1LTguNjIybC04LjMwMS0yOC4yOTloLTQyLjg2M2wtOC4wOTIgMjguMjI4em0yMi44NTctNzguNjk3aDEzLjM2N2wtNi42LTIyLjkzNy02Ljc2NyAyMi45Mzd6bTEyLjU3NSAyODcuMzIzbDY3LjQ1MS05NS42OThhMTIgMTIgMCAwIDAgMi4xOTItNi45MTNWMzAwYzAtNi42MjctNS4zNzMtMTItMTItMTJIMjc0LjUyMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOC45M2MwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDU2LjQ2OWMtLjczOS45OTEtMS40OTcgMi4wMzYtMi4yNyAzLjEzM2wtNjcuMjAzIDk1LjIwNWExMi4wMDEgMTIuMDAxIDAgMCAwLTIuMTk2IDYuOTJWNDY4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTI5LjM1NWM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0yOC45M2MwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC02MS4xNDZjLjc0LS45OTMgMS41LTIuMDM5IDIuMjc0LTMuMTM3elwiXSxcInNvcnQtYWxwaGEtdXBcIjpbNDQ4LDUxMixbXSxcImYxNWVcIixcIk00LjcwMiAxMTYuNjg2bDc5Ljk4NC04MC4wMDJjNi4yNDgtNi4yNDcgMTYuMzgzLTYuMjQ1IDIyLjYyNyAwbDc5Ljk4MSA4MC4wMDJjMTAuMDcgMTAuMDcgMi44OTkgMjcuMzE0LTExLjMxNCAyNy4zMTRIMTI4djMyMGMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDgwYy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2VjE0NEgxNi4wMTZjLTE0LjI0MSAwLTIxLjM2My0xNy4yNjQtMTEuMzE0LTI3LjMxNHptMzAxLjY3MSA5OC42MjFBMTIgMTIgMCAwIDEgMjk0LjgzOCAyMjRoLTM1LjcxN2MtOC4yMiAwLTE0LjAwNy04LjA3OC0xMS4zNjItMTUuODYxbDU3LjA5Ni0xNjhBMTIgMTIgMCAwIDEgMzE2LjIxNyAzMmgzOS41NjZjNS4xMzkgMCA5LjcwOCAzLjI3MyAxMS4zNjIgOC4xMzlsNTcuMDk2IDE2OEM0MjYuODg2IDIxNS45MjIgNDIxLjEgMjI0IDQxMi44NzkgMjI0aC0zNS43MzVhMTIgMTIgMCAwIDEtMTEuNTE1LTguNjIybC04LjMwMS0yOC4yOTloLTQyLjg2M2wtOC4wOTIgMjguMjI4em0yMi44NTctNzguNjk3aDEzLjM2N2wtNi42LTIyLjkzNy02Ljc2NyAyMi45Mzd6bTEyLjU3NSAyODcuMzIzbDY3LjQ1MS05NS42OThhMTIgMTIgMCAwIDAgMi4xOTItNi45MTNWMzAwYzAtNi42MjctNS4zNzMtMTItMTItMTJIMjc0LjUyMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyOC45M2MwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDU2LjQ2OWMtLjczOS45OTEtMS40OTcgMi4wMzYtMi4yNyAzLjEzM2wtNjcuMjAzIDk1LjIwNWExMi4wMDEgMTIuMDAxIDAgMCAwLTIuMTk2IDYuOTJWNDY4YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTI5LjM1NWM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi0yOC45M2MwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC02MS4xNDZjLjc0LS45OTMgMS41LTIuMDM5IDIuMjc0LTMuMTM3elwiXSxcInNvcnQtYW1vdW50LWRvd25cIjpbNTEyLDUxMixbXSxcImYxNjBcIixcIk0xODcuMjk4IDM5NS4zMTRsLTc5Ljk4NCA4MC4wMDJjLTYuMjQ4IDYuMjQ3LTE2LjM4MyA2LjI0NS0yMi42MjcgMEw0LjcwNSAzOTUuMzE0Qy01LjM2NSAzODUuMjQ0IDEuODA3IDM2OCAxNi4wMTkgMzY4SDY0VjQ4YzAtOC44MzcgNy4xNjMtMTYgMTYtMTZoMzJjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMjBoNDcuOTg0YzE0LjI0MSAwIDIxLjM2MyAxNy4yNjQgMTEuMzE0IDI3LjMxNHpNMjQwIDk2aDI1NmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2VjQ4YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMjQwYy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djMyYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bS0xNiAxMTJ2LTMyYzAtOC44MzcgNy4xNjMtMTYgMTYtMTZoMTkyYzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgyNDBjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ6bTAgMjU2di0zMmMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDY0YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNmgtNjRjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ6bTAtMTI4di0zMmMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDEyOGM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djMyYzAgOC44MzctNy4xNjMgMTYtMTYgMTZIMjQwYy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2elwiXSxcInNvcnQtYW1vdW50LXVwXCI6WzUxMiw1MTIsW10sXCJmMTYxXCIsXCJNNC43MDIgMTE2LjY4Nmw3OS45ODQtODAuMDAyYzYuMjQ4LTYuMjQ3IDE2LjM4My02LjI0NSAyMi42MjcgMGw3OS45ODEgODAuMDAyYzEwLjA3IDEwLjA3IDIuODk5IDI3LjMxNC0xMS4zMTQgMjcuMzE0SDEyOHYzMjBjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkg4MGMtOC44MzcgMC0xNi03LjE2My0xNi0xNlYxNDRIMTYuMDE2Yy0xNC4yNDEgMC0yMS4zNjMtMTcuMjY0LTExLjMxNC0yNy4zMTR6TTI0MCA5NmgyNTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNlY0OGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDI0MGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMmMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0tMTYgMTEydi0zMmMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDE5MmM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djMyYzAgOC44MzctNy4xNjMgMTYtMTYgMTZIMjQwYy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2em0wIDI1NnYtMzJjMC04LjgzNyA3LjE2My0xNiAxNi0xNmg2NGM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djMyYzAgOC44MzctNy4xNjMgMTYtMTYgMTZoLTY0Yy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2em0wLTEyOHYtMzJjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgxMjhjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDI0MGMtOC44MzcgMC0xNi03LjE2My0xNi0xNnpcIl0sXCJzb3J0LWRvd25cIjpbMzIwLDUxMixbXSxcImYwZGRcIixcIk00MSAyODhoMjM4YzIxLjQgMCAzMi4xIDI1LjkgMTcgNDFMMTc3IDQ0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMjQgMzI5Yy0xNS4xLTE1LjEtNC40LTQxIDE3LTQxelwiXSxcInNvcnQtbnVtZXJpYy1kb3duXCI6WzQ0OCw1MTIsW10sXCJmMTYyXCIsXCJNMzA4LjgxMSAxMTMuNzg3bC0xOS40NDgtMjAuNzk1Yy00LjUyMi00LjgzNi00LjI3NC0xMi40MjEuNTU2LTE2Ljk1bDQzLjQ0My00MC43NDFhMTEuOTk5IDExLjk5OSAwIDAgMSA4LjIwOS0zLjI0N2gzMS41OTFjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMjcuMDdoMjUuNjZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyOC45M2MwIDYuNjI3LTUuMzczIDEyLTEyIDEySDMwMS42NDljLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI4LjkzYzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMjUuNDE0di01Ny45MzhjLTcuMjU0IDYuNTgtMTQuMjExIDQuOTIxLTE4LjI1Mi42MDF6bS0zMC41NyAyMzguNTY5YzAtMzIuNjUzIDIzLjg2NS02Ny4zNTYgNjguMDk0LTY3LjM1NiAzOC4yNTMgMCA3OS40MjQgMjguODYxIDc5LjQyNCA5Mi4yMjggMCA1MS4yNzYtMzIuMjM3IDEwNS43NzItOTEuOTgzIDEwNS43NzItMTcuODM2IDAtMzAuNTQ2LTMuNTU3LTM4LjU0OC02Ljc4MS01Ljc5LTIuMzMzLTguNzg5LTguNzQ2LTYuOTIyLTE0LjcwM2w5LjIzNy0yOS40OGMyLjAzNS02LjQ5NiA5LjA0OS05Ljk4MyAxNS40NjctNy43MTYgMTMuMDI5IDQuNjAyIDI3Ljg3OCA1LjI3NSAzOC4xMDMtNC4xMzgtMzguNzQyIDUuMDcyLTcyLjg3Mi0yNS4zNi03Mi44NzItNjcuODI2em05Mi4yNzMgMTkuMzM4YzAtMjIuMjg1LTE1LjMwMi0zNi41MDUtMjUuODM1LTM2LjUwNS04LjY0MiAwLTEzLjE2NCA3Ljk2NS0xMy4xNjQgMTUuODMyIDAgNS42NjkgMS44MTUgMjQuMTY4IDI1LjE2OCAyNC4xNjggOS45NzMgMCAxMy4zNzctMi4xNTQgMTMuNzQ0LTIuNzMxLjAyMS0uMDQ2LjA4Ny0uMjkxLjA4Ny0uNzY0ek0xNzUuOTg0IDM2OEgxMjhWNDhjMC04LjgzNy03LjE2My0xNi0xNi0xNkg4MGMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnYzMjBIMTYuMDE5Yy0xNC4yMTIgMC0yMS4zODQgMTcuMjQ0LTExLjMxNCAyNy4zMTRsNzkuOTgxIDgwLjAwMmM2LjI0NSA2LjI0NSAxNi4zOCA2LjI0NyAyMi42MjcgMGw3OS45ODQtODAuMDAyYzEwLjA1LTEwLjA1IDIuOTI4LTI3LjMxNC0xMS4zMTMtMjcuMzE0elwiXSxcInNvcnQtbnVtZXJpYy11cFwiOls0NDgsNTEyLFtdLFwiZjE2M1wiLFwiTTMwOC44MTEgMTEzLjc4N2wtMTkuNDQ4LTIwLjc5NWMtNC41MjItNC44MzYtNC4yNzQtMTIuNDIxLjU1Ni0xNi45NWw0My40NDMtNDAuNzQxYTExLjk5OSAxMS45OTkgMCAwIDEgOC4yMDktMy4yNDdoMzEuNTkxYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MTI3LjA3aDI1LjY2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjguOTNjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzMDEuNjQ5Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yOC45M2MwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDI1LjQxNHYtNTcuOTM4Yy03LjI1NCA2LjU4LTE0LjIxMSA0LjkyMS0xOC4yNTIuNjAxem0tMzAuNTcgMjM4LjU2OWMwLTMyLjY1MyAyMy44NjUtNjcuMzU2IDY4LjA5NC02Ny4zNTYgMzguMjUzIDAgNzkuNDI0IDI4Ljg2MSA3OS40MjQgOTIuMjI4IDAgNTEuMjc2LTMyLjIzNyAxMDUuNzcyLTkxLjk4MyAxMDUuNzcyLTE3LjgzNiAwLTMwLjU0Ni0zLjU1Ny0zOC41NDgtNi43ODEtNS43OS0yLjMzMy04Ljc4OS04Ljc0Ni02LjkyMi0xNC43MDNsOS4yMzctMjkuNDhjMi4wMzUtNi40OTYgOS4wNDktOS45ODMgMTUuNDY3LTcuNzE2IDEzLjAyOSA0LjYwMiAyNy44NzggNS4yNzUgMzguMTAzLTQuMTM4LTM4Ljc0MiA1LjA3Mi03Mi44NzItMjUuMzYtNzIuODcyLTY3LjgyNnptOTIuMjczIDE5LjMzOGMwLTIyLjI4NS0xNS4zMDItMzYuNTA1LTI1LjgzNS0zNi41MDUtOC42NDIgMC0xMy4xNjQgNy45NjUtMTMuMTY0IDE1LjgzMiAwIDUuNjY5IDEuODE1IDI0LjE2OCAyNS4xNjggMjQuMTY4IDkuOTczIDAgMTMuMzc3LTIuMTU0IDEzLjc0NC0yLjczMS4wMjEtLjA0Ni4wODctLjI5MS4wODctLjc2NHpNMTYuMDE2IDE0NEg2NHYzMjBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNmgzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2VjE0NGg0Ny45ODFjMTQuMjEyIDAgMjEuMzg0LTE3LjI0NCAxMS4zMTQtMjcuMzE0bC03OS45ODEtODAuMDAyYy02LjI0NS02LjI0NS0xNi4zOC02LjI0Ny0yMi42MjcgMEw0LjcwMiAxMTYuNjg2Qy01LjM0NyAxMjYuNzM2IDEuNzc1IDE0NCAxNi4wMTYgMTQ0elwiXSxcInNvcnQtdXBcIjpbMzIwLDUxMixbXSxcImYwZGVcIixcIk0yNzkgMjI0SDQxYy0yMS40IDAtMzIuMS0yNS45LTE3LTQxTDE0MyA2NGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxMTkgMTE5YzE1LjIgMTUuMSA0LjUgNDEtMTYuOSA0MXpcIl0sc3BhOls1NzYsNTEyLFtdLFwiZjViYlwiLFwiTTU2OC4yNSAxOTJjLTI5LjA0LjEzLTEzNS4wMSA2LjE2LTIxMy44NCA4My0zMy4xMiAyOS42My01My4zNiA2My4zLTY2LjQxIDk0Ljg2LTEzLjA1LTMxLjU2LTMzLjI5LTY1LjIzLTY2LjQxLTk0Ljg2LTc4LjgzLTc2Ljg0LTE4NC44LTgyLjg3LTIxMy44NC04My00LjQxLS4wMi03Ljc5IDMuNC03Ljc1IDcuODIuMjMgMjcuOTIgNy4xNCAxMjYuMTQgODguNzcgMTk5LjNDMTcyLjc5IDQ4MC45NCAyNTYgNDgwIDI4OCA0ODBzMTE1LjE5Ljk1IDE5OS4yMy04MC44OGM4MS42NC03My4xNyA4OC41NC0xNzEuMzggODguNzctMTk5LjMuMDQtNC40Mi0zLjM0LTcuODQtNy43NS03Ljgyek0yODcuOTggMzAyLjZjMTIuODItMTguODUgMjcuNi0zNS43OCA0NC4wOS01MC41MiAxOS4wOS0xOC42MSAzOS41OC0zMy4zIDYwLjI2LTQ1LjE4LTE2LjQ0LTcwLjUtNTEuNzItMTMzLjA1LTk2LjczLTE3Mi4yMi00LjExLTMuNTgtMTEuMDItMy41OC0xNS4xNCAwLTQ0Ljk5IDM5LjE0LTgwLjI3IDEwMS42My05Ni43NCAxNzIuMDcgMjAuMzcgMTEuNyA0MC41IDI2LjE0IDU5LjIyIDQ0LjM5YTI4Mi43NjggMjgyLjc2OCAwIDAgMSA0NS4wNCA1MS40NnpcIl0sXCJzcGFjZS1zaHV0dGxlXCI6WzY0MCw1MTIsW10sXCJmMTk3XCIsXCJNNTkyLjYwNCAyMDguMjQ0QzU1OS43MzUgMTkyLjgzNiA1MTUuNzc3IDE4NCA0NzIgMTg0SDE4Ni4zMjdjLTQuOTUyLTYuNTU1LTEwLjU4NS0xMS45NzgtMTYuNzItMTZIMzc2QzIyOS4xNTcgMTM3Ljc0NyAyMTkuNDAzIDMyIDk2LjAwMyAzMkg5NnYxMjhIODBWMzJjLTI2LjUxIDAtNDggMjguNjU0LTQ4IDY0djY0Yy0yMy4xOTcgMC0zMiAxMC4wMzItMzIgMjR2NDBjMCAxMy45ODMgOC44MTkgMjQgMzIgMjR2MTZjLTIzLjE5NyAwLTMyIDEwLjAzMi0zMiAyNHY0MGMwIDEzLjk4MyA4LjgxOSAyNCAzMiAyNHY2NGMwIDM1LjM0NiAyMS40OSA2NCA0OCA2NFYzNTJoMTZ2MTI4aC4wMDNjMTIzLjQgMCAxMzMuMTU0LTEwNS43NDcgMjc5Ljk5Ny0xMzZIMTY5LjYwNmM2LjEzNS00LjAyMiAxMS43NjgtOS40NDUgMTYuNzItMTZINDcyYzQzLjc3NyAwIDg3LjczNS04LjgzNiAxMjAuNjA0LTI0LjI0NEM2MjIuMjgyIDI4OS44NDUgNjQwIDI3MS45OTIgNjQwIDI1NnMtMTcuNzE4LTMzLjg0NS00Ny4zOTYtNDcuNzU2ek00ODggMjk2YTggOCAwIDAgMS04LTh2LTY0YTggOCAwIDAgMSA4LThjMzEuOTA5IDAgMzEuOTQyIDgwIDAgODB6XCJdLHNwaW5uZXI6WzUxMiw1MTIsW10sXCJmMTEwXCIsXCJNMzA0IDQ4YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhzLTQ4LTIxLjQ5LTQ4LTQ4IDIxLjQ5LTQ4IDQ4LTQ4IDQ4IDIxLjQ5IDQ4IDQ4em0tNDggMzY4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4czIxLjQ5IDQ4IDQ4IDQ4IDQ4LTIxLjQ5IDQ4LTQ4LTIxLjQ5LTQ4LTQ4LTQ4em0yMDgtMjA4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4czIxLjQ5IDQ4IDQ4IDQ4IDQ4LTIxLjQ5IDQ4LTQ4LTIxLjQ5LTQ4LTQ4LTQ4ek05NiAyNTZjMC0yNi41MS0yMS40OS00OC00OC00OFMwIDIyOS40OSAwIDI1NnMyMS40OSA0OCA0OCA0OCA0OC0yMS40OSA0OC00OHptMTIuOTIyIDk5LjA3OGMtMjYuNTEgMC00OCAyMS40OS00OCA0OHMyMS40OSA0OCA0OCA0OCA0OC0yMS40OSA0OC00OGMwLTI2LjUwOS0yMS40OTEtNDgtNDgtNDh6bTI5NC4xNTYgMGMtMjYuNTEgMC00OCAyMS40OS00OCA0OHMyMS40OSA0OCA0OCA0OCA0OC0yMS40OSA0OC00OGMwLTI2LjUwOS0yMS40OS00OC00OC00OHpNMTA4LjkyMiA2MC45MjJjLTI2LjUxIDAtNDggMjEuNDktNDggNDhzMjEuNDkgNDggNDggNDggNDgtMjEuNDkgNDgtNDgtMjEuNDkxLTQ4LTQ4LTQ4elwiXSxzcGxvdGNoOls1MTIsNTEyLFtdLFwiZjViY1wiLFwiTTQ3Mi4yOSAxOTUuODlsLTY3LjA2LTIyLjk1Yy0xOS4yOC02LjYtMzMuNTQtMjAuOTItMzguMTQtMzguM0wzNTEuMSA3NC4xOWMtMTEuNTgtNDMuNzctNzYuNTctNTcuMTMtMTA5Ljk4LTIyLjYybC00Ni4xNCA0Ny42N2MtMTMuMjYgMTMuNzEtMzMuNTQgMjAuOTMtNTQuMiAxOS4zMWwtNzEuODgtNS42MmMtNTIuMDUtNC4wNy04Ni45MyA0NC44OC01OS4wMyA4Mi44M2wzOC41NCA1Mi40MmMxMS4wOCAxNS4wNyAxMi44MiAzMy44NiA0LjY0IDUwLjI0TDI0LjYyIDM1NS40Yy0yMC41OSA0MS4yNSAyMi44NCA4NC44NyA3My40OSA3My44MWw2OS45Ni0xNS4yOGMyMC4xMS00LjM5IDQxLjQ1IDAgNTcuMDcgMTEuNzNsNTQuMzIgNDAuODNjMzkuMzIgMjkuNTYgMTAxLjA0IDcuNTcgMTA0LjQ1LTM3LjIybDQuNy02MS44NmMxLjM1LTE3Ljc5IDEyLjgtMzMuODYgMzAuNjMtNDIuOTlsNjItMzEuNzRjNDQuODgtMjIuOTYgMzkuNTktODAuMTctOC45NS05Ni43OXpcIl0sXCJzcHJheS1jYW5cIjpbNTEyLDUxMixbXSxcImY1YmRcIixcIk0yMjQgMzJjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMmgtNjRjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2OTZoMTI4VjMyem0yNTYgOTZjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJzMTQuMzMgMzIgMzIgMzIgMzItMTQuMzMgMzItMzItMTQuMzMtMzItMzItMzJ6bS0yNTYgMzJIOTZjLTUzLjAyIDAtOTYgNDIuOTgtOTYgOTZ2MjI0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMjU2YzE3LjY3IDAgMzItMTQuMzMgMzItMzJWMjU2YzAtNTMuMDItNDIuOTgtOTYtOTYtOTZ6bS02NCAyNTZjLTQ0LjE4IDAtODAtMzUuODItODAtODBzMzUuODItODAgODAtODAgODAgMzUuODIgODAgODAtMzUuODIgODAtODAgODB6TTQ4MCA5NmMxNy42NyAwIDMyLTE0LjMzIDMyLTMycy0xNC4zMy0zMi0zMi0zMi0zMiAxNC4zMy0zMiAzMiAxNC4zMyAzMiAzMiAzMnptLTk2IDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMyczE0LjMzIDMyIDMyIDMyIDMyLTE0LjMzIDMyLTMyLTE0LjMzLTMyLTMyLTMyem0tOTYtOTZjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJzMTQuMzMgMzIgMzIgMzIgMzItMTQuMzMgMzItMzItMTQuMzMtMzItMzItMzJ6bTk2IDBjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJzMTQuMzMgMzIgMzIgMzIgMzItMTQuMzMgMzItMzItMTQuMzMtMzItMzItMzJ6bTk2IDE5MmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnMxNC4zMyAzMiAzMiAzMiAzMi0xNC4zMyAzMi0zMi0xNC4zMy0zMi0zMi0zMnpcIl0sc3F1YXJlOls0NDgsNTEyLFtdLFwiZjBjOFwiLFwiTTQwMCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6XCJdLFwic3F1YXJlLWZ1bGxcIjpbNTEyLDUxMixbXSxcImY0NWNcIixcIk01MTIgNTEySDBWMGg1MTJ2NTEyelwiXSxzdGFtcDpbNTEyLDUxMixbXSxcImY1YmZcIixcIk0zMiA1MTJoNDQ4di02NEgzMnY2NHptMzg0LTI1NmgtNjYuNTZjLTE2LjI2IDAtMjkuNDQtMTMuMTgtMjkuNDQtMjkuNDR2LTkuNDZjMC0yNy4zNyA4Ljg4LTUzLjQxIDIxLjQ2LTc3LjcyIDkuMTEtMTcuNjEgMTIuOS0zOC4zOSA5LjA1LTYwLjQyLTYuNzctMzguNzgtMzguNDctNzAuNy03Ny4yNi03Ny40NUMyMTIuNjItOS4wNCAxNjAgMzcuMzMgMTYwIDk2YzAgMTQuMTYgMy4xMiAyNy41NCA4LjY5IDM5LjU4QzE4Mi4wMiAxNjQuNDMgMTkyIDE5NC43IDE5MiAyMjYuNDl2LjA3YzAgMTYuMjYtMTMuMTggMjkuNDQtMjkuNDQgMjkuNDRIOTZjLTUzLjAyIDAtOTYgNDIuOTgtOTYgOTZ2MzJjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg0NDhjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtMzJjMC01My4wMi00Mi45OC05Ni05Ni05NnpcIl0sc3RhcjpbNTc2LDUxMixbXSxcImYwMDVcIixcIk0yNTkuMyAxNy44TDE5NCAxNTAuMiA0Ny45IDE3MS41Yy0yNi4yIDMuOC0zNi43IDM2LjEtMTcuNyA1NC42bDEwNS43IDEwMy0yNSAxNDUuNWMtNC41IDI2LjMgMjMuMiA0NiA0Ni40IDMzLjdMMjg4IDQzOS42bDEzMC43IDY4LjdjMjMuMiAxMi4yIDUwLjktNy40IDQ2LjQtMzMuN2wtMjUtMTQ1LjUgMTA1LjctMTAzYzE5LTE4LjUgOC41LTUwLjgtMTcuNy01NC42TDM4MiAxNTAuMiAzMTYuNyAxNy44Yy0xMS43LTIzLjYtNDUuNi0yMy45LTU3LjQgMHpcIl0sXCJzdGFyLWhhbGZcIjpbNTc2LDUxMixbXSxcImYwODlcIixcIk0yODggMGMtMTEuNCAwLTIyLjggNS45LTI4LjcgMTcuOEwxOTQgMTUwLjIgNDcuOSAxNzEuNGMtMjYuMiAzLjgtMzYuNyAzNi4xLTE3LjcgNTQuNmwxMDUuNyAxMDMtMjUgMTQ1LjVjLTQuNSAyNi4xIDIzIDQ2IDQ2LjQgMzMuN0wyODggNDM5LjZWMHpcIl0sXCJzdGFyLWhhbGYtYWx0XCI6WzUzNiw1MTIsW10sXCJmNWMwXCIsXCJNNTA4LjU1IDE3MS41MUwzNjIuMTggMTUwLjIgMjk2Ljc3IDE3LjgxQzI5MC44OSA1Ljk4IDI3OS40MiAwIDI2Ny45NSAwYy0xMS40IDAtMjIuNzkgNS45LTI4LjY5IDE3LjgxbC02NS40MyAxMzIuMzgtMTQ2LjM4IDIxLjI5Yy0yNi4yNSAzLjgtMzYuNzcgMzYuMDktMTcuNzQgNTQuNTlsMTA1Ljg5IDEwMy0yNS4wNiAxNDUuNDhDODYuOTggNDk1LjMzIDEwMy41NyA1MTIgMTIyLjE1IDUxMmM0LjkzIDAgMTAtMS4xNyAxNC44Ny0zLjc1bDEzMC45NS02OC42OCAxMzAuOTQgNjguN2M0Ljg2IDIuNTUgOS45MiAzLjcxIDE0LjgzIDMuNzEgMTguNiAwIDM1LjIyLTE2LjYxIDMxLjY2LTM3LjRsLTI1LjAzLTE0NS40OSAxMDUuOTEtMTAyLjk4YzE5LjA0LTE4LjUgOC41Mi01MC44LTE3LjczLTU0LjZ6bS0xMjEuNzQgMTIzLjJsLTE4LjEyIDE3LjYyIDQuMjggMjQuODggMTkuNTIgMTEzLjQ1LTEwMi4xMy01My41OS0yMi4zOC0xMS43NC4wMy0zMTcuMTkgNTEuMDMgMTAzLjI5IDExLjE4IDIyLjYzIDI1LjAxIDMuNjQgMTE0LjIzIDE2LjYzLTgyLjY1IDgwLjM4elwiXSxcInN0ZXAtYmFja3dhcmRcIjpbNDQ4LDUxMixbXSxcImYwNDhcIixcIk02NCA0NjhWNDRjMC02LjYgNS40LTEyIDEyLTEyaDQ4YzYuNiAwIDEyIDUuNCAxMiAxMnYxNzYuNGwxOTUuNS0xODFDMzUyLjEgMjIuMyAzODQgMzYuNiAzODQgNjR2Mzg0YzAgMjcuNC0zMS45IDQxLjctNTIuNSAyNC42TDEzNiAyOTIuN1Y0NjhjMCA2LjYtNS40IDEyLTEyIDEySDc2Yy02LjYgMC0xMi01LjQtMTItMTJ6XCJdLFwic3RlcC1mb3J3YXJkXCI6WzQ0OCw1MTIsW10sXCJmMDUxXCIsXCJNMzg0IDQ0djQyNGMwIDYuNi01LjQgMTItMTIgMTJoLTQ4Yy02LjYgMC0xMi01LjQtMTItMTJWMjkxLjZsLTE5NS41IDE4MUM5NS45IDQ4OS43IDY0IDQ3NS40IDY0IDQ0OFY2NGMwLTI3LjQgMzEuOS00MS43IDUyLjUtMjQuNkwzMTIgMjE5LjNWNDRjMC02LjYgNS40LTEyIDEyLTEyaDQ4YzYuNiAwIDEyIDUuNCAxMiAxMnpcIl0sc3RldGhvc2NvcGU6WzUxMiw1MTIsW10sXCJmMGYxXCIsXCJNNDQ3LjEgMTEyYy0zNC4yLjUtNjIuMyAyOC40LTYzIDYyLjYtLjUgMjQuMyAxMi41IDQ1LjYgMzIgNTYuOFYzNDRjMCA1Ny4zLTUwLjIgMTA0LTExMiAxMDQtNjAgMC0xMDkuMi00NC4xLTExMS45LTk5LjJDMjY1IDMzMy44IDMyMCAyNjkuMiAzMjAgMTkyVjM2LjZjMC0xMS40LTguMS0yMS4zLTE5LjMtMjMuNUwyMzcuOC41Yy0xMy0yLjYtMjUuNiA1LjgtMjguMiAxOC44TDIwNi40IDM1Yy0yLjYgMTMgNS44IDI1LjYgMTguOCAyOC4ybDMwLjcgNi4xdjEyMS40YzAgNTIuOS00Mi4yIDk2LjctOTUuMSA5Ny4yLTUzLjQuNS05Ni45LTQyLjctOTYuOS05NlY2OS40bDMwLjctNi4xYzEzLTIuNiAyMS40LTE1LjIgMTguOC0yOC4ybC0zLjEtMTUuN0MxMDcuNyA2LjQgOTUuMS0yIDgyLjEuNkwxOS4zIDEzQzguMSAxNS4zIDAgMjUuMSAwIDM2LjZWMTkyYzAgNzcuMyA1NS4xIDE0MiAxMjguMSAxNTYuOEMxMzAuNyA0MzkuMiAyMDguNiA1MTIgMzA0IDUxMmM5NyAwIDE3Ni03NS40IDE3Ni0xNjhWMjMxLjRjMTkuMS0xMS4xIDMyLTMxLjcgMzItNTUuNCAwLTM1LjctMjkuMi02NC41LTY0LjktNjR6bS45IDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6XCJdLFwic3RpY2t5LW5vdGVcIjpbNDQ4LDUxMixbXSxcImYyNDlcIixcIk0zMTIgMzIwaDEzNlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyNEMxMC43IDMyIDAgNDIuNyAwIDU2djQwMGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgyNjRWMzQ0YzAtMTMuMiAxMC44LTI0IDI0LTI0em0xMjkgNTVsLTk4IDk4Yy00LjUgNC41LTEwLjYgNy0xNyA3aC02VjM1MmgxMjh2Ni4xYzAgNi4zLTIuNSAxMi40LTcgMTYuOXpcIl0sc3RvcDpbNDQ4LDUxMixbXSxcImYwNGRcIixcIk00MDAgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4elwiXSxcInN0b3AtY2lyY2xlXCI6WzUxMiw1MTIsW10sXCJmMjhkXCIsXCJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYwelwiXSxzdG9wd2F0Y2g6WzQ0OCw1MTIsW10sXCJmMmYyXCIsXCJNNDMyIDMwNGMwIDExNC45LTkzLjEgMjA4LTIwOCAyMDhTMTYgNDE4LjkgMTYgMzA0YzAtMTA0IDc2LjMtMTkwLjIgMTc2LTIwNS41VjY0aC0yOGMtNi42IDAtMTItNS40LTEyLTEyVjEyYzAtNi42IDUuNC0xMiAxMi0xMmgxMjBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtMjh2MzQuNWMzNy41IDUuOCA3MS43IDIxLjYgOTkuNyA0NC42bDI3LjUtMjcuNWM0LjctNC43IDEyLjMtNC43IDE3IDBsMjguMyAyOC4zYzQuNyA0LjcgNC43IDEyLjMgMCAxN2wtMjkuNCAyOS40LS42LjZDNDE5LjcgMjIzLjMgNDMyIDI2Mi4yIDQzMiAzMDR6bS0xNzYgMzZWMTg4LjVjMC02LjYtNS40LTEyLTEyLTEyaC00MGMtNi42IDAtMTIgNS40LTEyIDEyVjM0MGMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEyelwiXSxzdG9yZTpbNjE2LDUxMixbXSxcImY1NGVcIixcIk02MDIgMTE4LjZMNTM3LjEgMTVDNTMxLjMgNS43IDUyMSAwIDUxMCAwSDEwNkM5NSAwIDg0LjcgNS43IDc4LjkgMTVMMTQgMTE4LjZjLTMzLjUgNTMuNS0zLjggMTI3LjkgNTguOCAxMzYuNCA0LjUuNiA5LjEuOSAxMy43LjkgMjkuNiAwIDU1LjgtMTMgNzMuOC0zMy4xIDE4IDIwLjEgNDQuMyAzMy4xIDczLjggMzMuMSAyOS42IDAgNTUuOC0xMyA3My44LTMzLjEgMTggMjAuMSA0NC4zIDMzLjEgNzMuOCAzMy4xIDI5LjYgMCA1NS44LTEzIDczLjgtMzMuMSAxOC4xIDIwLjEgNDQuMyAzMy4xIDczLjggMzMuMSA0LjcgMCA5LjItLjMgMTMuNy0uOSA2Mi44LTguNCA5Mi42LTgyLjggNTktMTM2LjR6TTUyOS41IDI4OGMtMTAgMC0xOS45LTEuNS0yOS41LTMuOFYzODRIMTE2di05OS44Yy05LjYgMi4yLTE5LjUgMy44LTI5LjUgMy44LTYgMC0xMi4xLS40LTE4LTEuMi01LjYtLjgtMTEuMS0yLjEtMTYuNC0zLjZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYyODMuMmMtNS40IDEuNi0xMC44IDIuOS0xNi40IDMuNi02LjEuOC0xMi4xIDEuMi0xOC4yIDEuMnpcIl0sXCJzdG9yZS1hbHRcIjpbNjQwLDUxMixbXSxcImY1NGZcIixcIk0zMjAgMzg0SDEyOFYyMjRINjR2MjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRoLTY0djE2MHptMzE0LjYtMjQxLjhsLTg1LjMtMTI4Yy02LTguOS0xNi0xNC4yLTI2LjctMTQuMkgxMTcuNGMtMTAuNyAwLTIwLjcgNS4zLTI2LjYgMTQuMmwtODUuMyAxMjhjLTE0LjIgMjEuMyAxIDQ5LjggMjYuNiA0OS44SDYwOGMyNS41IDAgNDAuNy0yOC41IDI2LjYtNDkuOHpNNTEyIDQ5NmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjIyNGgtNjR2MjcyelwiXSxzdHJlYW06WzUxMiw1MTIsW10sXCJmNTUwXCIsXCJNMTYgMTI4aDQxNmM4Ljg0IDAgMTYtNy4xNiAxNi0xNlY0OGMwLTguODQtNy4xNi0xNi0xNi0xNkgxNkM3LjE2IDMyIDAgMzkuMTYgMCA0OHY2NGMwIDguODQgNy4xNiAxNiAxNiAxNnptNDgwIDgwSDgwYy04Ljg0IDAtMTYgNy4xNi0xNiAxNnY2NGMwIDguODQgNy4xNiAxNiAxNiAxNmg0MTZjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTY0YzAtOC44NC03LjE2LTE2LTE2LTE2em0tNjQgMTc2SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNnY2NGMwIDguODQgNy4xNiAxNiAxNiAxNmg0MTZjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTY0YzAtOC44NC03LjE2LTE2LTE2LTE2elwiXSxcInN0cmVldC12aWV3XCI6WzUxMiw1MTIsW10sXCJmMjFkXCIsXCJNMTkyIDY0YzAtMzUuMzQ2IDI4LjY1NC02NCA2NC02NHM2NCAyOC42NTQgNjQgNjRjMCAzNS4zNDYtMjguNjU0IDY0LTY0IDY0cy02NC0yOC42NTQtNjQtNjR6bTExMiA4MGgtMTEuMzZjLTIyLjcxMSAxMC40NDMtNDkuNTkgMTAuODk0LTczLjI4IDBIMjA4Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djEwNGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTZ2MTA0YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGg2NGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMzIwaDE2YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFYxOTJjMC0yNi41MS0yMS40OS00OC00OC00OHptODUuNjQyIDE4OS4xNTJhNzIuNTAzIDcyLjUwMyAwIDAgMS0yOS4wMSAyNy4wMDlDMzkxLjEzMyAzNjUuMjUxIDQ4MCAzODUuODU0IDQ4MCA0MTZjMCA0Ni4zMDQtMTY3LjY1NiA2NC0yMjQgNjQtNzAuMzAzIDAtMjI0LTIwLjg1OS0yMjQtNjQgMC0zMC4xMjMgODguMzYxLTUwLjY2NSAxMTkuMzY3LTU1LjgzOWE3Mi41MTYgNzIuNTE2IDAgMCAxLTI5LjAxLTI3LjAwOUM3NC45NTkgMzQzLjM5NSAwIDM2Ny41OTkgMCA0MTZjMCA3Ny4xMTEgMTc4LjY1OCA5NiAyNTYgOTYgNzcuMjQ5IDAgMjU2LTE4Ljg2NSAyNTYtOTYgMC00OC40MDMtNzQuOTY3LTcyLjYwNi0xMjIuMzU4LTgyLjg0OHpcIl0sc3RyaWtldGhyb3VnaDpbNTEyLDUxMixbXSxcImYwY2NcIixcIk00OTYgMjg4SDE2Yy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2di0zMmMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDQ4MGM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djMyYzAgOC44MzctNy4xNjMgMTYtMTYgMTZ6bS0yMTQuNjY2IDE2YzI3LjI1OCAxMi45MzcgNDYuNTI0IDI4LjY4MyA0Ni41MjQgNTYuMjQzIDAgMzMuMTA4LTI4Ljk3NyA1My42NzYtNzUuNjIxIDUzLjY3Ni0zMi4zMjUgMC03Ni44NzQtMTIuMDgtNzYuODc0LTQ0LjI3MVYzNjhjMC04LjgzNy03LjE2NC0xNi0xNi0xNkgxMTMuNzVjLTguODM2IDAtMTYgNy4xNjMtMTYgMTZ2MTkuMjA0YzAgNjYuODQ1IDc3LjcxNyAxMDEuODIgMTU0LjQ4NyAxMDEuODIgODguNTc4IDAgMTYyLjAxMy00NS40MzggMTYyLjAxMy0xMzQuNDI0IDAtMTkuODE1LTMuNjE4LTM2LjQxNy0xMC4xNDMtNTAuNkgyODEuMzM0em0tMzAuOTUyLTk2Yy0zMi40MjItMTMuNTA1LTU2LjgzNi0yOC45NDYtNTYuODM2LTU5LjY4MyAwLTMzLjkyIDMwLjkwMS00Ny40MDYgNjQuOTYyLTQ3LjQwNiA0Mi42NDcgMCA2NC45NjIgMTYuNTkzIDY0Ljk2MiAzMi45ODVWMTM2YzAgOC44MzcgNy4xNjQgMTYgMTYgMTZoNDUuNjEzYzguODM2IDAgMTYtNy4xNjMgMTYtMTZ2LTMwLjMxOGMwLTUyLjQzOC03MS43MjUtNzkuODc1LTE0Mi41NzUtNzkuODc1LTg1LjIwMyAwLTE1MC43MjYgNDAuOTcyLTE1MC43MjYgMTI1LjY0NiAwIDIyLjcxIDQuNjY1IDQxLjE3NiAxMi43NzcgNTYuNTQ3aDEyOS44MjN6XCJdLHN0cm9vcHdhZmVsOls1MTIsNTEyLFtdLFwiZjU1MVwiLFwiTTE4OC4xMiAyMTAuNzRMMTQyLjg2IDI1Nmw0NS4yNSA0NS4yNUwyMzMuMzcgMjU2bC00NS4yNS00NS4yNnptMTEzLjEzLTIyLjYyTDI1NiAxNDIuODZsLTQ1LjI1IDQ1LjI1TDI1NiAyMzMuMzdsNDUuMjUtNDUuMjV6bS05MC41IDEzNS43NkwyNTYgMzY5LjE0bDQ1LjI2LTQ1LjI2TDI1NiAyNzguNjNsLTQ1LjI1IDQ1LjI1ek0yNTYgMEMxMTQuNjIgMCAwIDExNC42MiAwIDI1NnMxMTQuNjIgMjU2IDI1NiAyNTYgMjU2LTExNC42MiAyNTYtMjU2UzM5Ny4zOCAwIDI1NiAwem0xODYuNjggMjk1LjZsLTExLjMxIDExLjMxYy0zLjEyIDMuMTItOC4xOSAzLjEyLTExLjMxIDBsLTI4LjI5LTI4LjI5LTQ1LjI1IDQ1LjI1IDMzLjk0IDMzLjk0IDE2Ljk3LTE2Ljk3YzMuMTItMy4xMiA4LjE5LTMuMTIgMTEuMzEgMGwxMS4zMSAxMS4zMWMzLjEyIDMuMTIgMy4xMiA4LjE5IDAgMTEuMzFsLTE2Ljk3IDE2Ljk3IDE2Ljk3IDE2Ljk3YzMuMTIgMy4xMiAzLjEyIDguMTkgMCAxMS4zMWwtMTEuMzEgMTEuMzFjLTMuMTIgMy4xMi04LjE5IDMuMTItMTEuMzEgMGwtMTYuOTctMTYuOTctMTYuOTcgMTYuOTdjLTMuMTIgMy4xMi04LjE5IDMuMTItMTEuMzEgMGwtMTEuMzEtMTEuMzFjLTMuMTItMy4xMi0zLjEyLTguMTkgMC0xMS4zMWwxNi45Ny0xNi45Ny0zMy45NC0zMy45NC00NS4yNiA0NS4yNiAyOC4yOSAyOC4yOWMzLjEyIDMuMTIgMy4xMiA4LjE5IDAgMTEuMzFsLTExLjMxIDExLjMxYy0zLjEyIDMuMTItOC4xOSAzLjEyLTExLjMxIDBMMjU2IDQxNC4zOWwtMjguMjkgMjguMjljLTMuMTIgMy4xMi04LjE5IDMuMTItMTEuMzEgMGwtMTEuMzEtMTEuMzFjLTMuMTItMy4xMi0zLjEyLTguMTkgMC0xMS4zMWwyOC4yOS0yOC4yOS00NS4yNS00NS4yNi0zMy45NCAzMy45NCAxNi45NyAxNi45N2MzLjEyIDMuMTIgMy4xMiA4LjE5IDAgMTEuMzFsLTExLjMxIDExLjMxYy0zLjEyIDMuMTItOC4xOSAzLjEyLTExLjMxIDBsLTE2Ljk3LTE2Ljk3LTE2Ljk3IDE2Ljk3Yy0zLjEyIDMuMTItOC4xOSAzLjEyLTExLjMxIDBsLTExLjMxLTExLjMxYy0zLjEyLTMuMTItMy4xMi04LjE5IDAtMTEuMzFsMTYuOTctMTYuOTctMTYuOTctMTYuOTdjLTMuMTItMy4xMi0zLjEyLTguMTkgMC0xMS4zMWwxMS4zMS0xMS4zMWMzLjEyLTMuMTIgOC4xOS0zLjEyIDExLjMxIDBsMTYuOTcgMTYuOTcgMzMuOTQtMzMuOTQtNDUuMjUtNDUuMjUtMjguMjkgMjguMjljLTMuMTIgMy4xMi04LjE5IDMuMTItMTEuMzEgMEw2OS4zMiAyOTUuNmMtMy4xMi0zLjEyLTMuMTItOC4xOSAwLTExLjMxTDk3LjYxIDI1NmwtMjguMjktMjguMjljLTMuMTItMy4xMi0zLjEyLTguMTkgMC0xMS4zMWwxMS4zMS0xMS4zMWMzLjEyLTMuMTIgOC4xOS0zLjEyIDExLjMxIDBsMjguMjkgMjguMjkgNDUuMjUtNDUuMjYtMzMuOTQtMzMuOTQtMTYuOTcgMTYuOTdjLTMuMTIgMy4xMi04LjE5IDMuMTItMTEuMzEgMGwtMTEuMzEtMTEuMzFjLTMuMTItMy4xMi0zLjEyLTguMTkgMC0xMS4zMWwxNi45Ny0xNi45Ny0xNi45Ny0xNi45N2MtMy4xMi0zLjEyLTMuMTItOC4xOSAwLTExLjMxbDExLjMxLTExLjMxYzMuMTItMy4xMiA4LjE5LTMuMTIgMTEuMzEgMGwxNi45NyAxNi45NyAxNi45Ny0xNi45N2MzLjEyLTMuMTIgOC4xOS0zLjEyIDExLjMxIDBsMTEuMzEgMTEuMzFjMy4xMiAzLjEyIDMuMTIgOC4xOSAwIDExLjMxbC0xNi45NyAxNi45NyAzMy45NCAzMy45NCA0NS4yNi00NS4yNS0yOC4yOS0yOC4yOWMtMy4xMi0zLjEyLTMuMTItOC4xOSAwLTExLjMxbDExLjMxLTExLjMxYzMuMTItMy4xMiA4LjE5LTMuMTIgMTEuMzEgMEwyNTYgOTcuNjFsMjguMjktMjguMjljMy4xMi0zLjEyIDguMTktMy4xMiAxMS4zMSAwbDExLjMxIDExLjMxYzMuMTIgMy4xMiAzLjEyIDguMTkgMCAxMS4zMWwtMjguMjkgMjguMjkgNDUuMjYgNDUuMjUgMzMuOTQtMzMuOTQtMTYuOTctMTYuOTdjLTMuMTItMy4xMi0zLjEyLTguMTkgMC0xMS4zMWwxMS4zMS0xMS4zMWMzLjEyLTMuMTIgOC4xOS0zLjEyIDExLjMxIDBsMTYuOTcgMTYuOTcgMTYuOTctMTYuOTdjMy4xMi0zLjEyIDguMTktMy4xMiAxMS4zMSAwbDExLjMxIDExLjMxYzMuMTIgMy4xMiAzLjEyIDguMTkgMCAxMS4zMWwtMTYuOTcgMTYuOTcgMTYuOTcgMTYuOTdjMy4xMiAzLjEyIDMuMTIgOC4xOSAwIDExLjMxbC0xMS4zMSAxMS4zMWMtMy4xMiAzLjEyLTguMTkgMy4xMi0xMS4zMSAwbC0xNi45Ny0xNi45Ny0zMy45NCAzMy45NCA0NS4yNSA0NS4yNiAyOC4yOS0yOC4yOWMzLjEyLTMuMTIgOC4xOS0zLjEyIDExLjMxIDBsMTEuMzEgMTEuMzFjMy4xMiAzLjEyIDMuMTIgOC4xOSAwIDExLjMxTDQxNC4zOSAyNTZsMjguMjkgMjguMjhhOC4wMTUgOC4wMTUgMCAwIDEgMCAxMS4zMnpNMjc4LjYzIDI1Nmw0NS4yNiA0NS4yNUwzNjkuMTQgMjU2bC00NS4yNS00NS4yNkwyNzguNjMgMjU2elwiXSxzdWJzY3JpcHQ6WzUxMiw1MTIsW10sXCJmMTJjXCIsXCJNMzk1LjE5OCA0MTZjMy40NjEtMTAuNTI2IDE4Ljc5Ni0yMS4yOCAzNi4yNjUtMzIuNDI1IDE2LjYyNS0xMC42MDUgMzUuNDY3LTIyLjYyNiA1MC4zNDEtMzguODYyIDE3LjQ1OC0xOS4wNTQgMjUuOTQ0LTQwLjE3NSAyNS45NDQtNjQuNTY3IDAtNjAuNTYyLTUwLjcwMi04OC4xNDYtOTcuODEtODguMTQ2LTQyLjQ5MSAwLTc2LjM3OCAyMi4wMTYtOTQuNDMyIDUwLjQ0Ny00LjY1NCA3LjMyOS0yLjU5MiAxNy4wMzYgNC42MjMgMjEuODY1bDMwLjMyOCAyMC4yOTZjNy4wMzIgNC43MDYgMTYuNDYgMy4wODQgMjEuNjMtMy42MTQgOC4wMjItMTAuMzk0IDE4LjgxOC0xOC4yMjUgMzEuNjY3LTE4LjIyNSAxOS4zODcgMCAyNi4yNjYgMTIuOTAxIDI2LjI2NiAyMy45NDggMCAzNi4xNTktMTE5LjQzNyA1Ny4wMjMtMTE5LjQzNyAxNjAuMDI0IDAgNi42NTQuNTYxIDEzLjAxNCAxLjQxNSAxOS4zMzEgMS4wNzYgNy45NjQgNy44MzQgMTMuOTI4IDE1Ljg3IDEzLjkyOEg0OTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtMzJjMC04LjgzNy03LjE2My0xNi0xNi0xNkgzOTUuMTk4ek0yNzIgMjU2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNmgtNjIuMzk5YTE2IDE2IDAgMCAxLTEzLjU0MS03LjQ3OGwtNDUuNzAxLTcyLjYxNWMtMi4yOTctMy4zNTItNC40MjItNi45NjktNi4xOTUtMTAuMjA5LTEuNjUgMy4yNDQtMy42NDcgNi45MzctNS44NzQgMTAuNTgybC00NC43MTIgNzIuMTQ3YTE1Ljk5OSAxNS45OTkgMCAwIDEtMTMuNiA3LjU3MkgxNmMtOC44MzcgMC0xNi03LjE2My0xNi0xNnYtMzJjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgyNi4zMjVsNTYuNTUyLTgyLjcwOUw0Ni4xMTEgOTZIMTZDNy4xNjMgOTYgMCA4OC44MzcgMCA4MFY0OGMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDY4LjgwNmExNiAxNiAwIDAgMSAxMy42NDUgNy42NDRsMzkuODgyIDY1LjEyNmMyLjA3MiAzLjUyMyA0LjA1MyA3LjE3MSA1LjcyNyAxMC4zNyAxLjc3Ny0zLjI0NCAzLjkyLTYuOTU0IDYuMjM3LTEwLjUzN2w0MC4zMzItNjUuMDM1QTE1Ljk5OSAxNS45OTkgMCAwIDEgMjA0LjIyNiAzMkgyNzJjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2aC0yNy45NzlsLTUyLjY5IDc1LjY3MUwyNDkuOTc0IDI1NkgyNzJ6XCJdLHN1YndheTpbNDQ4LDUxMixbXSxcImYyMzlcIixcIk00NDggOTZ2MjU2YzAgNTEuODE1LTYxLjYyNCA5Ni0xMzAuMDIyIDk2bDYyLjk4IDQ5LjcyMUMzODYuOTA1IDUwMi40MTcgMzgzLjU2MiA1MTIgMzc2IDUxMkg3MmMtNy41NzggMC0xMC44OTItOS41OTQtNC45NTctMTQuMjc5TDEzMC4wMjIgNDQ4QzYxLjgyIDQ0OCAwIDQwMy45NTQgMCAzNTJWOTZDMCA0Mi45ODEgNjQgMCAxMjggMGgxOTJjNjUgMCAxMjggNDIuOTgxIDEyOCA5NnpNMjAwIDIzMlYxMjBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDcyYy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2MTEyYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxMDRjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0em0yMDAgMFYxMjBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDI3MmMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djExMmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTA0YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHptLTQ4IDU2Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4czIxLjQ5IDQ4IDQ4IDQ4IDQ4LTIxLjQ5IDQ4LTQ4LTIxLjQ5LTQ4LTQ4LTQ4em0tMjU2IDBjLTI2LjUxIDAtNDggMjEuNDktNDggNDhzMjEuNDkgNDggNDggNDggNDgtMjEuNDkgNDgtNDgtMjEuNDktNDgtNDgtNDh6XCJdLHN1aXRjYXNlOls1MTIsNTEyLFtdLFwiZjBmMlwiLFwiTTEyOCA0ODBoMjU2VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE3NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2NDAwem02NC0zODRoMTI4djMySDE5MlY5NnptMzIwIDgwdjI1NmMwIDI2LjUtMjEuNSA0OC00OCA0OGgtNDhWMTI4aDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek05NiA0ODBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE3NmMwLTI2LjUgMjEuNS00OCA0OC00OGg0OHYzNTJ6XCJdLFwic3VpdGNhc2Utcm9sbGluZ1wiOlszODQsNTEyLFtdLFwiZjVjMVwiLFwiTTMzNiAxNjBINDhjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2MjI0YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMTZ2MTZjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMzJjOC44NCAwIDE2LTcuMTYgMTYtMTZ2LTE2aDEyOHYxNmMwIDguODQgNy4xNiAxNiAxNiAxNmgzMmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMTZoMTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYyMDhjMC0yNi41MS0yMS40OS00OC00OC00OHptLTE2IDIxNmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDI0MGM0LjQyIDAgOCAzLjU4IDggOHYxNnptMC05NmMwIDQuNDItMy41OCA4LTggOEg3MmMtNC40MiAwLTgtMy41OC04LTh2LTE2YzAtNC40MiAzLjU4LTggOC04aDI0MGM0LjQyIDAgOCAzLjU4IDggOHYxNnpNMTQ0IDQ4aDk2djgwaDQ4VjQ4YzAtMjYuNTEtMjEuNDktNDgtNDgtNDhoLTk2Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djgwaDQ4VjQ4elwiXSxzdW46WzUxMiw1MTIsW10sXCJmMTg1XCIsXCJNMjc0LjgzNSAxMi42NDZsMjUuNTE2IDYyLjM5M2M0LjIxMyAxMC4zMDEgMTYuNjcxIDE0LjM0OSAyNi4xMzQgOC40OTJsNTcuMzE2LTM1LjQ3OWMxNS40OS05LjU4OCAzNC44MDggNC40NDcgMzAuNDc1IDIyLjE0MmwtMTYuMDMgNjUuNDc1Yy0yLjY0NyAxMC44MSA1LjA1MyAyMS40MDggMTYuMTUyIDIyLjIzMWw2Ny4yMjQgNC45ODdjMTguMTY3IDEuMzQ4IDI1LjU0NiAyNC4wNTcgMTEuNjQxIDM1LjgyNkw0NDEuODEgMjQyLjI2Yy04LjQ5NSA3LjE5LTguNDk1IDIwLjI4OSAwIDI3LjQ3OWw1MS40NTQgNDMuNTQ4YzEzLjkwNiAxMS43NjkgNi41MjcgMzQuNDc4LTExLjY0MSAzNS44MjZsLTY3LjIyNCA0Ljk4N2MtMTEuMDk5LjgyMy0xOC43OTkgMTEuNDIxLTE2LjE1MiAyMi4yMzFsMTYuMDMgNjUuNDc1YzQuMzMyIDE3LjY5NS0xNC45ODYgMzEuNzMtMzAuNDc1IDIyLjE0MmwtNTcuMzE2LTM1LjQ3OWMtOS40NjMtNS44NTgtMjEuOTIyLTEuODEtMjYuMTM0IDguNDkybC0yNS41MTYgNjIuMzkzYy02Ljg5NiAxNi44NjItMzAuNzc0IDE2Ljg2Mi0zNy42NyAwbC0yNS41MTYtNjIuMzkzYy00LjIxMy0xMC4zMDEtMTYuNjcxLTE0LjM0OS0yNi4xMzQtOC40OTJsLTU3LjMxNyAzNS40NzljLTE1LjQ5IDkuNTg4LTM0LjgwOC00LjQ0Ny0zMC40NzUtMjIuMTQybDE2LjAzLTY1LjQ3NWMyLjY0Ny0xMC44MS01LjA1My0yMS40MDgtMTYuMTUyLTIyLjIzMWwtNjcuMjI0LTQuOTg3Yy0xOC4xNjctMS4zNDgtMjUuNTQ2LTI0LjA1Ny0xMS42NDEtMzUuODI2TDcwLjE5IDI2OS43NGM4LjQ5NS03LjE5IDguNDk1LTIwLjI4OSAwLTI3LjQ3OWwtNTEuNDU0LTQzLjU0OGMtMTMuOTA2LTExLjc2OS02LjUyNy0zNC40NzggMTEuNjQxLTM1LjgyNmw2Ny4yMjQtNC45ODdjMTEuMDk5LS44MjMgMTguNzk5LTExLjQyMSAxNi4xNTItMjIuMjMxbC0xNi4wMy02NS40NzVjLTQuMzMyLTE3LjY5NSAxNC45ODYtMzEuNzMgMzAuNDc1LTIyLjE0Mmw1Ny4zMTcgMzUuNDc5YzkuNDYzIDUuODU4IDIxLjkyMSAxLjgxIDI2LjEzNC04LjQ5MmwyNS41MTYtNjIuMzkzYzYuODk2LTE2Ljg2MSAzMC43NzQtMTYuODYxIDM3LjY3IDB6TTM5MiAyNTZjMC03NC45OTEtNjEuMDEtMTM2LTEzNi0xMzYtNzQuOTkxIDAtMTM2IDYxLjAwOS0xMzYgMTM2czYxLjAwOSAxMzYgMTM2IDEzNmM3NC45OSAwIDEzNi02MS4wMDkgMTM2LTEzNnptLTMyIDBjMCA1Ny4zNDYtNDYuNjU0IDEwNC0xMDQgMTA0cy0xMDQtNDYuNjU0LTEwNC0xMDQgNDYuNjU0LTEwNCAxMDQtMTA0IDEwNCA0Ni42NTQgMTA0IDEwNHpcIl0sc3VwZXJzY3JpcHQ6WzUxMiw1MTIsW10sXCJmMTJiXCIsXCJNMzk1LjE5OCAyNTZjMy40NjEtMTAuNTI2IDE4Ljc5Ni0yMS4yOCAzNi4yNjUtMzIuNDI1IDE2LjYyNS0xMC42MDUgMzUuNDY3LTIyLjYyNiA1MC4zNDEtMzguODYyIDE3LjQ1OC0xOS4wNTQgMjUuOTQ0LTQwLjE3NSAyNS45NDQtNjQuNTY3IDAtNjAuNTYyLTUwLjcwMi04OC4xNDYtOTcuODEtODguMTQ2LTQyLjQ5MSAwLTc2LjM3OCAyMi4wMTYtOTQuNDMyIDUwLjQ0Ny00LjY1NCA3LjMyOS0yLjU5MiAxNy4wMzYgNC42MjMgMjEuODY1bDMwLjMyOCAyMC4yOTZjNy4wMzIgNC43MDYgMTYuNDYgMy4wODQgMjEuNjMtMy42MTQgOC4wMjItMTAuMzk0IDE4LjgxOC0xOC4yMjUgMzEuNjY3LTE4LjIyNSAxOS4zODcgMCAyNi4yNjYgMTIuOTAxIDI2LjI2NiAyMy45NDggMCAzNi4xNTktMTE5LjQzNyA1Ny4wMjMtMTE5LjQzNyAxNjAuMDI0IDAgNi42NTQuNTYxIDEzLjAxNCAxLjQxNSAxOS4zMzEgMS4wNzYgNy45NjQgNy44MzQgMTMuOTI4IDE1Ljg3IDEzLjkyOEg0OTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtMzJjMC04LjgzNy03LjE2My0xNi0xNi0xNkgzOTUuMTk4ek0yNzIgNDE2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNmgtNjIuMzk5YTE2IDE2IDAgMCAxLTEzLjU0MS03LjQ3OGwtNDUuNzAxLTcyLjYxNWMtMi4yOTctMy4zNTItNC40MjItNi45NjktNi4xOTUtMTAuMjA5LTEuNjUgMy4yNDQtMy42NDcgNi45MzctNS44NzQgMTAuNTgybC00NC43MTIgNzIuMTQ3YTE1Ljk5OSAxNS45OTkgMCAwIDEtMTMuNiA3LjU3MkgxNmMtOC44MzcgMC0xNi03LjE2My0xNi0xNnYtMzJjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgyNi4zMjVsNTYuNTUyLTgyLjcwOUw0Ni4xMTEgMjU2SDE2Yy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2di0zMmMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDY4LjgwNmExNiAxNiAwIDAgMSAxMy42NDUgNy42NDRsMzkuODgyIDY1LjEyNmMyLjA3MiAzLjUyMyA0LjA1MyA3LjE3MSA1LjcyNyAxMC4zNyAxLjc3Ny0zLjI0NCAzLjkyLTYuOTU0IDYuMjM3LTEwLjUzN2w0MC4zMzItNjUuMDM1YTE2IDE2IDAgMCAxIDEzLjU5OC03LjU2N0gyNzJjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2aC0yNy45NzlsLTUyLjY5IDc1LjY3MUwyNDkuOTc0IDQxNkgyNzJ6XCJdLHN1cnByaXNlOls0OTYsNTEyLFtdLFwiZjVjMlwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6TTEzNiAyMDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzJ6bTExMiAyMDhjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjQgNjQgMjguNyA2NCA2NC0yOC43IDY0LTY0IDY0em04MC0xNzZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyelwiXSxzd2F0Y2hib29rOls1MTEsNTEyLFtdLFwiZjVjM1wiLFwiTTQ3OS4wNiAzMjBIMzcyLjI5TDE4Ni4xNSA1MDYuNTFjLTIuMDYgMi4wNy00LjQ5IDMuNTgtNi42NyA1LjQ5aDI5OS41OGMxNy42NCAwIDMxLjk0LTE0LjMzIDMxLjk0LTMyVjM1MmMwLTE3LjY3LTE0LjMtMzItMzEuOTQtMzJ6bS00NC41LTE1Mi45bC05MC4zMy05MC41MWMtMTIuNDctMTIuNS0zMi42OS0xMi41LTQ1LjE3IDBsLTc1LjUgNzUuNjVWNDE2YzAgMi45Ni0uNjcgNS43My0uODcgOC42NGwyMTEuODctMjEyLjI4YzEyLjQ3LTEyLjUgMTIuNDctMzIuNzcgMC00NS4yNnpNMTkxLjYyIDMyYzAtMTcuNjctMTQuMy0zMi0zMS45NC0zMkgzMS45NEMxNC4zIDAgMCAxNC4zMyAwIDMydjM4NGMwIDUzLjAyIDQyLjkgOTYgOTUuODEgOTZzOTUuODEtNDIuOTggOTUuODEtOTZWMzJ6TTk1LjgxIDQ0MGMtMTMuMjMgMC0yMy45NS0xMC43NS0yMy45NS0yNCAwLTEzLjI2IDEwLjczLTI0IDIzLjk1LTI0czIzLjk1IDEwLjc0IDIzLjk1IDI0Yy4wMSAxMy4yNS0xMC43MiAyNC0yMy45NSAyNHptMzEuOTQtMTg0SDYzLjg4di02NGg2My44OHY2NHptMC0xMjhINjMuODhWNjRoNjMuODh2NjR6XCJdLHN3aW1tZXI6WzY0MCw1MTIsW10sXCJmNWM0XCIsXCJNMTg5LjYxIDMxMC41OGMzLjU0IDMuMjYgMTUuMjcgOS40MiAzNC4zOSA5LjQyczMwLjg2LTYuMTYgMzQuMzktOS40MmMxNi4wMi0xNC43NyAzNC41LTIyLjU4IDUzLjQ2LTIyLjU4aDE2LjNjMTguOTYgMCAzNy40NSA3LjgxIDUzLjQ2IDIyLjU4IDMuNTQgMy4yNiAxNS4yNyA5LjQyIDM0LjM5IDkuNDJzMzAuODYtNi4xNiAzNC4zOS05LjQyYzE0Ljg2LTEzLjcxIDMxLjg4LTIxLjEyIDQ5LjM5LTIyLjE2bC0xMTIuODQtODAuNiAxOC0xMi44NmMzLjY0LTIuNTggOC4yOC0zLjUyIDEyLjYyLTIuNjFsMTAwLjM1IDIxLjUzYzI1LjkxIDUuNTMgNTEuNDQtMTAuOTcgNTctMzYuODggNS41NS0yNS45Mi0xMC45NS01MS40NC0zNi44OC01N0w0MzcuNjggOTguNDdjLTMwLjczLTYuNTgtNjMuMDIuMTItODguNTYgMTguMzhsLTgwLjAyIDU3LjE3Yy0xMC4zOCA3LjM5LTE5LjM2IDE2LjQ0LTI2LjcyIDI2Ljk0TDE3My43NSAyOTljNS40NyAzLjIzIDEwLjgyIDYuOTMgMTUuODYgMTEuNTh6TTYyNCAzNTJoLTE2Yy0yNi4wNCAwLTQ1LjgtOC40Mi01Ni4wOS0xNy45LTguOS04LjIxLTE5LjY2LTE0LjEtMzEuNzctMTQuMWgtMTYuM2MtMTIuMTEgMC0yMi44NyA1Ljg5LTMxLjc3IDE0LjFDNDYxLjggMzQzLjU4IDQ0Mi4wNCAzNTIgNDE2IDM1MnMtNDUuOC04LjQyLTU2LjA5LTE3LjljLTguOS04LjIxLTE5LjY2LTE0LjEtMzEuNzctMTQuMWgtMTYuM2MtMTIuMTEgMC0yMi44NyA1Ljg5LTMxLjc3IDE0LjFDMjY5LjggMzQzLjU4IDI1MC4wNCAzNTIgMjI0IDM1MnMtNDUuOC04LjQyLTU2LjA5LTE3LjljLTguOS04LjIxLTE5LjY2LTE0LjEtMzEuNzctMTQuMWgtMTYuM2MtMTIuMTEgMC0yMi44NyA1Ljg5LTMxLjc3IDE0LjFDNzcuOCAzNDMuNTggNTguMDQgMzUyIDMyIDM1MkgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTZjMzguNjIgMCA3Mi43Mi0xMi4xOSA5Ni0zMS44NCAyMy4yOCAxOS42NiA1Ny4zOCAzMS44NCA5NiAzMS44NHM3Mi43Mi0xMi4xOSA5Ni0zMS44NGMyMy4yOCAxOS42NiA1Ny4zOCAzMS44NCA5NiAzMS44NHM3Mi43Mi0xMi4xOSA5Ni0zMS44NGMyMy4yOCAxOS42NiA1Ny4zOCAzMS44NCA5NiAzMS44NGgxNmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMzJjMC04Ljg0LTcuMTYtMTYtMTYtMTZ6bS01MTItOTZjNDQuMTggMCA4MC0zNS44MiA4MC04MHMtMzUuODItODAtODAtODAtODAgMzUuODItODAgODAgMzUuODIgODAgODAgODB6XCJdLFwic3dpbW1pbmctcG9vbFwiOls2NDAsNTEyLFtdLFwiZjVjNVwiLFwiTTYyNCA0MTZoLTE2Yy0yNi4wNCAwLTQ1LjgtOC40Mi01Ni4wOS0xNy45LTguOS04LjIxLTE5LjY2LTE0LjEtMzEuNzctMTQuMWgtMTYuM2MtMTIuMTEgMC0yMi44NyA1Ljg5LTMxLjc3IDE0LjFDNDYxLjggNDA3LjU4IDQ0Mi4wNCA0MTYgNDE2IDQxNnMtNDUuOC04LjQyLTU2LjA5LTE3LjljLTguOS04LjIxLTE5LjY2LTE0LjEtMzEuNzctMTQuMWgtMTYuM2MtMTIuMTEgMC0yMi44NyA1Ljg5LTMxLjc3IDE0LjFDMjY5LjggNDA3LjU4IDI1MC4wNCA0MTYgMjI0IDQxNnMtNDUuOC04LjQyLTU2LjA5LTE3LjljLTguOS04LjIxLTE5LjY2LTE0LjEtMzEuNzctMTQuMWgtMTYuM2MtMTIuMTEgMC0yMi44NyA1Ljg5LTMxLjc3IDE0LjFDNzcuOCA0MDcuNTggNTguMDQgNDE2IDMyIDQxNkgxNmMtOC44NCAwLTE2IDcuMTYtMTYgMTZ2MzJjMCA4Ljg0IDcuMTYgMTYgMTYgMTZoMTZjMzguNjIgMCA3Mi43Mi0xMi4xOSA5Ni0zMS44NCAyMy4yOCAxOS42NiA1Ny4zOCAzMS44NCA5NiAzMS44NHM3Mi43Mi0xMi4xOSA5Ni0zMS44NGMyMy4yOCAxOS42NiA1Ny4zOCAzMS44NCA5NiAzMS44NHM3Mi43Mi0xMi4xOSA5Ni0zMS44NGMyMy4yOCAxOS42NiA1Ny4zOCAzMS44NCA5NiAzMS44NGgxNmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMzJjMC04Ljg0LTcuMTYtMTYtMTYtMTZ6bS00MDAtMzJ2LTk2aDE5MnY5NmMxOS4xMiAwIDMwLjg2LTYuMTYgMzQuMzktOS40MiA5LjE3LTguNDYgMTkuMi0xNC4zNCAyOS42MS0xOC4wN1YxMjhjMC0xNy42NCAxNC4zNi0zMiAzMi0zMnMzMiAxNC4zNiAzMiAzMnYxNmMwIDguODQgNy4xNiAxNiAxNiAxNmgzMmM4Ljg0IDAgMTYtNy4xNiAxNi0xNnYtMTZjMC01Mi45NC00My4wNi05Ni05Ni05NnMtOTYgNDMuMDYtOTYgOTZ2OTZIMjI0di05NmMwLTE3LjY0IDE0LjM2LTMyIDMyLTMyczMyIDE0LjM2IDMyIDMydjE2YzAgOC44NCA3LjE2IDE2IDE2IDE2aDMyYzguODQgMCAxNi03LjE2IDE2LTE2di0xNmMwLTUyLjk0LTQzLjA2LTk2LTk2LTk2cy05NiA0My4wNi05NiA5NnYyMjguNWMxMC40MSAzLjczIDIwLjQ0IDkuNjIgMjkuNjEgMTguMDcgMy41MyAzLjI3IDE1LjI3IDkuNDMgMzQuMzkgOS40M3pcIl0sc3luYzpbNTEyLDUxMixbXSxcImYwMjFcIixcIk00NDAuOTM1IDEyLjU3NGwzLjk2NiA4Mi43NjZDMzk5LjQxNiA0MS45MDQgMzMxLjY3NCA4IDI1NiA4IDEzNC44MTMgOCAzMy45MzMgOTQuOTI0IDEyLjI5NiAyMDkuODI0IDEwLjkwOCAyMTcuMTkzIDE2LjYwNCAyMjQgMjQuMTAzIDIyNGg0OS4wODRjNS41NyAwIDEwLjM3Ny0zLjg0MiAxMS42NzYtOS4yNTlDMTAzLjQwNyAxMzcuNDA4IDE3Mi45MzEgODAgMjU2IDgwYzYwLjg5MyAwIDExNC41MTIgMzAuODU2IDE0Ni4xMDQgNzcuODAxbC0xMDEuNTMtNC44NjVjLTYuODQ1LS4zMjgtMTIuNTc0IDUuMTMzLTEyLjU3NCAxMS45ODZ2NDcuNDExYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMjAwLjMzM2M2LjYyNyAwIDEyLTUuMzczIDEyLTEyVjEyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQ3LjQxMWMtNi44NTMgMC0xMi4zMTUgNS43MjktMTEuOTg3IDEyLjU3NHpNMjU2IDQzMmMtNjAuODk1IDAtMTE0LjUxNy0zMC44NTgtMTQ2LjEwOS03Ny44MDVsMTAxLjg2OCA0Ljg3MWM2Ljg0NS4zMjcgMTIuNTczLTUuMTM0IDEyLjU3My0xMS45ODZ2LTQ3LjQxMmMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyVjUwMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQ3LjM4NWM2Ljg2MyAwIDEyLjMyOC01Ljc0NSAxMS45ODUtMTIuNTk5bC00LjEyOS04Mi41NzVDMTEyLjcyNSA0NzAuMTY2IDE4MC40MDUgNTA0IDI1NiA1MDRjMTIxLjE4NyAwIDIyMi4wNjctODYuOTI0IDI0My43MDQtMjAxLjgyNCAxLjM4OC03LjM2OS00LjMwOC0xNC4xNzYtMTEuODA3LTE0LjE3NmgtNDkuMDg0Yy01LjU3IDAtMTAuMzc3IDMuODQyLTExLjY3NiA5LjI1OUM0MDguNTkzIDM3NC41OTIgMzM5LjA2OSA0MzIgMjU2IDQzMnpcIl0sXCJzeW5jLWFsdFwiOls1MTIsNTEyLFtdLFwiZjJmMVwiLFwiTTM3MC43MiAxMzMuMjhDMzM5LjQ1OCAxMDQuMDA4IDI5OC44ODggODcuOTYyIDI1NS44NDggODhjLTc3LjQ1OC4wNjgtMTQ0LjMyOCA1My4xNzgtMTYyLjc5MSAxMjYuODUtMS4zNDQgNS4zNjMtNi4xMjIgOS4xNS0xMS42NTEgOS4xNUgyNC4xMDNjLTcuNDk4IDAtMTMuMTk0LTYuODA3LTExLjgwNy0xNC4xNzZDMzMuOTMzIDk0LjkyNCAxMzQuODEzIDggMjU2IDhjNjYuNDQ4IDAgMTI2Ljc5MSAyNi4xMzYgMTcxLjMxNSA2OC42ODVMNDYzLjAzIDQwLjk3QzQ3OC4xNDkgMjUuODUxIDUwNCAzNi41NTkgNTA0IDU3Ljk0MVYxOTJjMCAxMy4yNTUtMTAuNzQ1IDI0LTI0IDI0SDM0NS45NDFjLTIxLjM4MiAwLTMyLjA5LTI1Ljg1MS0xNi45NzEtNDAuOTcxbDQxLjc1LTQxLjc0OXpNMzIgMjk2aDEzNC4wNTljMjEuMzgyIDAgMzIuMDkgMjUuODUxIDE2Ljk3MSA0MC45NzFsLTQxLjc1IDQxLjc1YzMxLjI2MiAyOS4yNzMgNzEuODM1IDQ1LjMxOSAxMTQuODc2IDQ1LjI4IDc3LjQxOC0uMDcgMTQ0LjMxNS01My4xNDQgMTYyLjc4Ny0xMjYuODQ5IDEuMzQ0LTUuMzYzIDYuMTIyLTkuMTUgMTEuNjUxLTkuMTVoNTcuMzA0YzcuNDk4IDAgMTMuMTk0IDYuODA3IDExLjgwNyAxNC4xNzZDNDc4LjA2NyA0MTcuMDc2IDM3Ny4xODcgNTA0IDI1NiA1MDRjLTY2LjQ0OCAwLTEyNi43OTEtMjYuMTM2LTE3MS4zMTUtNjguNjg1TDQ4Ljk3IDQ3MS4wM0MzMy44NTEgNDg2LjE0OSA4IDQ3NS40NDEgOCA0NTQuMDU5VjMyMGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjR6XCJdLHN5cmluZ2U6WzUxMiw1MTIsW10sXCJmNDhlXCIsXCJNMjAxLjUgMTc0LjhsNTUuNyA1NS44YzMuMSAzLjEgMy4xIDguMiAwIDExLjNsLTExLjMgMTEuM2MtMy4xIDMuMS04LjIgMy4xLTExLjMgMGwtNTUuNy01NS44LTQ1LjMgNDUuMyA1NS44IDU1LjhjMy4xIDMuMSAzLjEgOC4yIDAgMTEuM2wtMTEuMyAxMS4zYy0zLjEgMy4xLTguMiAzLjEtMTEuMyAwTDExMSAyNjUuMmwtMjYuNCAyNi40Yy0xNy4zIDE3LjMtMjUuNiA0MS4xLTIzIDY1LjRsNy4xIDYzLjZMMi4zIDQ4N2MtMy4xIDMuMS0zLjEgOC4yIDAgMTEuM2wxMS4zIDExLjNjMy4xIDMuMSA4LjIgMy4xIDExLjMgMGw2Ni4zLTY2LjMgNjMuNiA3LjFjMjMuOSAyLjYgNDcuOS01LjQgNjUuNC0yM2wxODEuOS0xODEuOS0xMzUuNy0xMzUuNy02NC45IDY1em0zMDguMi05My4zTDQzMC41IDIuM2MtMy4xLTMuMS04LjItMy4xLTExLjMgMGwtMTEuMyAxMS4zYy0zLjEgMy4xLTMuMSA4LjIgMCAxMS4zbDI4LjMgMjguMy00NS4zIDQ1LjMtNTYuNi01Ni42LTE3LTE3Yy0zLjEtMy4xLTguMi0zLjEtMTEuMyAwbC0zMy45IDMzLjljLTMuMSAzLjEtMy4xIDguMiAwIDExLjNsMTcgMTdMNDI0LjggMjIzbDE3IDE3YzMuMSAzLjEgOC4yIDMuMSAxMS4zIDBsMzMuOS0zNGMzLjEtMy4xIDMuMS04LjIgMC0xMS4zbC03My41LTczLjUgNDUuMy00NS4zIDI4LjMgMjguM2MzLjEgMy4xIDguMiAzLjEgMTEuMyAwbDExLjMtMTEuM2MzLjEtMy4yIDMuMS04LjIgMC0xMS40elwiXSx0YWJsZTpbNTEyLDUxMixbXSxcImYwY2VcIixcIk00NjQgMzJINDhDMjEuNDkgMzIgMCA1My40OSAwIDgwdjM1MmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQxNmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6TTIyNCA0MTZINjR2LTk2aDE2MHY5NnptMC0xNjBINjR2LTk2aDE2MHY5NnptMjI0IDE2MEgyODh2LTk2aDE2MHY5NnptMC0xNjBIMjg4di05NmgxNjB2OTZ6XCJdLFwidGFibGUtdGVubmlzXCI6WzUxMiw1MTIsW10sXCJmNDVkXCIsXCJNNDk2LjIgMjk2LjVDNTI3LjcgMjE4LjcgNTEyIDEyNi4yIDQ0OSA2My4xIDM2NS4xLTIxIDIyOS0yMSAxNDUuMSA2My4xbC01NiA1Ni4xIDIxMS41IDIxMS41YzQ2LjEtNjIuMSAxMzEuNS03Ny40IDE5NS42LTM0LjJ6bS0yMTcuOSA3OS43TDU3LjkgMTU1LjljLTI3LjMgNDUuMy0yMS43IDEwNSAxNy4zIDE0NC4xbDM0LjUgMzQuNkw2LjcgNDI0Yy04LjYgNy41LTkuMSAyMC43LTEgMjguOGw1My40IDUzLjVjOCA4LjEgMjEuMiA3LjYgMjguNy0xTDE3Ny4xIDQwMmwzNS43IDM1LjdjMTkuNyAxOS43IDQ0LjYgMzAuNSA3MC4zIDMzLjMtNy4xLTE3LTExLTM1LjYtMTEtNTUuMS0uMS0xMy44IDIuNS0yNyA2LjItMzkuN3pNNDE2IDMyMGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NiA5Ni00MyA5Ni05Ni00My05Ni05Ni05NnpcIl0sdGFibGV0Ols0NDgsNTEyLFtdLFwiZjEwYVwiLFwiTTQwMCAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHY0MTZjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0yMjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyIDMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMnpcIl0sXCJ0YWJsZXQtYWx0XCI6WzQ0OCw1MTIsW10sXCJmM2ZhXCIsXCJNNDAwIDBINDhDMjEuNSAwIDAgMjEuNSAwIDQ4djQxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTIyNCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyem0xNzYtMTA4YzAgNi42LTUuNCAxMi0xMiAxMkg2MGMtNi42IDAtMTItNS40LTEyLTEyVjYwYzAtNi42IDUuNC0xMiAxMi0xMmgzMjhjNi42IDAgMTIgNS40IDEyIDEydjMxMnpcIl0sdGFibGV0czpbNjQwLDUxMixbXSxcImY0OTBcIixcIk0xNjAgMTkyQzc4LjkgMTkyIDEyLjUgMjUwLjUuMSAzMjYuN2MtLjggNC44IDMuMyA5LjMgOC4zIDkuM2gzMDMuM2M1IDAgOS4xLTQuNSA4LjMtOS4zQzMwNy41IDI1MC41IDI0MS4xIDE5MiAxNjAgMTkyem0xNTEuNiAxNzZIOC40Yy01IDAtOS4xIDQuNS04LjMgOS4zQzEyLjUgNDUzLjUgNzguOSA1MTIgMTYwIDUxMnMxNDcuNS01OC41IDE1OS45LTEzNC43Yy44LTQuOC0zLjMtOS4zLTguMy05LjN6TTU5My40IDQ2LjZjLTU2LjUtNTYuNS0xNDQuMi02MS40LTIwNi45LTE2LTQgMi45LTQuMyA4LjktLjggMTIuM0w1OTcgMjU0LjNjMy41IDMuNSA5LjUgMy4yIDEyLjMtLjggNDUuNS02Mi43IDQwLjYtMTUwLjQtMTUuOS0yMDYuOXpNMzYzIDY1LjdjLTMuNS0zLjUtOS41LTMuMi0xMi4zLjgtNDUuNCA2Mi43LTQwLjUgMTUwLjQgMTUuOSAyMDYuOSA1Ni41IDU2LjUgMTQ0LjIgNjEuNCAyMDYuOSAxNS45IDQtMi45IDQuMy04LjkuOC0xMi4zTDM2MyA2NS43elwiXSxcInRhY2hvbWV0ZXItYWx0XCI6WzU3Niw1MTIsW10sXCJmM2ZkXCIsXCJNNzUuNjk0IDQ4MGE0OC4wMiA0OC4wMiAwIDAgMS00Mi40NDgtMjUuNTcxQzEyLjAyMyA0MTQuMyAwIDM2OC41NTYgMCAzMjAgMCAxNjAuOTQyIDEyOC45NDIgMzIgMjg4IDMyczI4OCAxMjguOTQyIDI4OCAyODhjMCA0OC41NTYtMTIuMDIzIDk0LjMtMzMuMjQ2IDEzNC40MjlBNDguMDE4IDQ4LjAxOCAwIDAgMSA1MDAuMzA2IDQ4MEg3NS42OTR6TTUxMiAyODhjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMiAwIDE3LjY3MyAxNC4zMjcgMzIgMzIgMzJzMzItMTQuMzI3IDMyLTMyYzAtMTcuNjczLTE0LjMyNy0zMi0zMi0zMnpNMjg4IDEyOGMxNy42NzMgMCAzMi0xNC4zMjcgMzItMzIgMC0xNy42NzMtMTQuMzI3LTMyLTMyLTMycy0zMiAxNC4zMjctMzIgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyek02NCAyODhjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMiAwIDE3LjY3MyAxNC4zMjcgMzIgMzIgMzJzMzItMTQuMzI3IDMyLTMyYzAtMTcuNjczLTE0LjMyNy0zMi0zMi0zMnptNjUuNjA4LTE1OC4zOTJjLTE3LjY3MyAwLTMyIDE0LjMyNy0zMiAzMiAwIDE3LjY3MyAxNC4zMjcgMzIgMzIgMzJzMzItMTQuMzI3IDMyLTMyYzAtMTcuNjczLTE0LjMyNy0zMi0zMi0zMnptMzE2Ljc4NCAwYy0xNy42NzMgMC0zMiAxNC4zMjctMzIgMzIgMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJ6bS04Ny4wNzggMzEuNTM0Yy0xMi42MjctNC4wNC0yNi4xMzMgMi45Mi0zMC4xNzMgMTUuNTQ0bC00NS45MjMgMTQzLjUxMUMyNTAuMTA4IDMyMi42NDUgMjI0IDM1MC4yNjQgMjI0IDM4NGMwIDM1LjM0NiAyOC42NTQgNjQgNjQgNjQgMzUuMzQ2IDAgNjQtMjguNjU0IDY0LTY0IDAtMTkuNzczLTguOTcxLTM3LjQ0Ny0yMy4wNjEtNDkuMTg3bDQ1LjkxOS0xNDMuNDk4YzQuMDM5LTEyLjYyNS0yLjkyLTI2LjEzMy0xNS41NDQtMzAuMTczelwiXSx0YWc6WzUxMiw1MTIsW10sXCJmMDJiXCIsXCJNMCAyNTIuMTE4VjQ4QzAgMjEuNDkgMjEuNDkgMCA0OCAwaDIwNC4xMThhNDggNDggMCAwIDEgMzMuOTQxIDE0LjA1OWwyMTEuODgyIDIxMS44ODJjMTguNzQ1IDE4Ljc0NSAxOC43NDUgNDkuMTM3IDAgNjcuODgyTDI5My44MjMgNDk3Ljk0MWMtMTguNzQ1IDE4Ljc0NS00OS4xMzcgMTguNzQ1LTY3Ljg4MiAwTDE0LjA1OSAyODYuMDU5QTQ4IDQ4IDAgMCAxIDAgMjUyLjExOHpNMTEyIDY0Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4czIxLjQ5IDQ4IDQ4IDQ4IDQ4LTIxLjQ5IDQ4LTQ4LTIxLjQ5LTQ4LTQ4LTQ4elwiXSx0YWdzOls2NDAsNTEyLFtdLFwiZjAyY1wiLFwiTTQ5Ny45NDEgMjI1Ljk0MUwyODYuMDU5IDE0LjA1OUE0OCA0OCAwIDAgMCAyNTIuMTE4IDBINDhDMjEuNDkgMCAwIDIxLjQ5IDAgNDh2MjA0LjExOGE0OCA0OCAwIDAgMCAxNC4wNTkgMzMuOTQxbDIxMS44ODIgMjExLjg4MmMxOC43NDQgMTguNzQ1IDQ5LjEzNiAxOC43NDYgNjcuODgyIDBsMjA0LjExOC0yMDQuMTE4YzE4Ljc0NS0xOC43NDUgMTguNzQ1LTQ5LjEzNyAwLTY3Ljg4MnpNMTEyIDE2MGMtMjYuNTEgMC00OC0yMS40OS00OC00OHMyMS40OS00OCA0OC00OCA0OCAyMS40OSA0OCA0OC0yMS40OSA0OC00OCA0OHptNTEzLjk0MSAxMzMuODIzTDQyMS44MjMgNDk3Ljk0MWMtMTguNzQ1IDE4Ljc0NS00OS4xMzcgMTguNzQ1LTY3Ljg4MiAwbC0uMzYtLjM2TDUyNy42NCAzMjMuNTIyYzE2Ljk5OS0xNi45OTkgMjYuMzYtMzkuNiAyNi4zNi02My42NHMtOS4zNjItNDYuNjQxLTI2LjM2LTYzLjY0TDMzMS4zOTcgMGg0OC43MjFhNDggNDggMCAwIDEgMzMuOTQxIDE0LjA1OWwyMTEuODgyIDIxMS44ODJjMTguNzQ1IDE4Ljc0NSAxOC43NDUgNDkuMTM3IDAgNjcuODgyelwiXSx0YXBlOls2NDAsNTEyLFtdLFwiZjRkYlwiLFwiTTIyNCAxOTJjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjQgNjQtMjguNyA2NC02NC0yOC43LTY0LTY0LTY0em00MDAgMjI0SDM4MC42YzQxLjUtNDAuNyA2Ny40LTk3LjMgNjcuNC0xNjAgMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNFMwIDEzMi4zIDAgMjU2czEwMC4zIDIyNCAyMjQgMjI0aDQwMGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNnptLTQwMC02NGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NiA5NiA0MyA5NiA5Ni00MyA5Ni05NiA5NnpcIl0sdGFza3M6WzUxMiw1MTIsW10sXCJmMGFlXCIsXCJNMjA4IDEzMmgyODhjOC44IDAgMTYtNy4yIDE2LTE2Vjc2YzAtOC44LTcuMi0xNi0xNi0xNkgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnY0MGMwIDguOCA3LjIgMTYgMTYgMTZ6bTAgMTYwaDI4OGM4LjggMCAxNi03LjIgMTYtMTZ2LTQwYzAtOC44LTcuMi0xNi0xNi0xNkgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnY0MGMwIDguOCA3LjIgMTYgMTYgMTZ6bTAgMTYwaDI4OGM4LjggMCAxNi03LjIgMTYtMTZ2LTQwYzAtOC44LTcuMi0xNi0xNi0xNkgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnY0MGMwIDguOCA3LjIgMTYgMTYgMTZ6TTY0IDM2OGMtMjYuNSAwLTQ4LjYgMjEuNS00OC42IDQ4czIyLjEgNDggNDguNiA0OCA0OC0yMS41IDQ4LTQ4LTIxLjUtNDgtNDgtNDh6bTkyLjUtMjk5bC03Mi4yIDcyLjItMTUuNiAxNS42Yy00LjcgNC43LTEyLjkgNC43LTE3LjYgMEwzLjUgMTA5LjRjLTQuNy00LjctNC43LTEyLjMgMC0xN2wxNS43LTE1LjdjNC43LTQuNyAxMi4zLTQuNyAxNyAwbDIyLjcgMjIuMSA2My43LTYzLjNjNC43LTQuNyAxMi4zLTQuNyAxNyAwbDE3IDE2LjVjNC42IDQuNyA0LjYgMTIuMy0uMSAxN3ptMCAxNTkuNmwtNzIuMiA3Mi4yLTE1LjcgMTUuN2MtNC43IDQuNy0xMi45IDQuNy0xNy42IDBMMy41IDI2OWMtNC43LTQuNy00LjctMTIuMyAwLTE3bDE1LjctMTUuN2M0LjctNC43IDEyLjMtNC43IDE3IDBsMjIuNyAyMi4xIDYzLjctNjMuN2M0LjctNC43IDEyLjMtNC43IDE3IDBsMTcgMTdjNC42IDQuNiA0LjYgMTIuMi0uMSAxNi45elwiXSx0YXhpOls1MTIsNTEyLFtdLFwiZjFiYVwiLFwiTTQ2MiAyNDEuNjRsLTIyLTg0Ljg0Yy05LjYtMzUuMi00MS42LTYwLjgtNzYuOC02MC44SDM1MlY2NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMySDE5MmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnYzMmgtMTEuMmMtMzUuMiAwLTY3LjIgMjUuNi03Ni44IDYwLjhsLTIyIDg0Ljg0QzIxLjQxIDI0OC4wNCAwIDI3My40NyAwIDMwNHY0OGMwIDIzLjYzIDEyLjk1IDQ0LjA0IDMyIDU1LjEyVjQ0OGMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDMyYzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTMyaDI1NnYzMmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDMyYzE3LjY3IDAgMzItMTQuMzMgMzItMzJ2LTQwLjg4YzE5LjA1LTExLjA5IDMyLTMxLjUgMzItNTUuMTJ2LTQ4YzAtMzAuNTMtMjEuNDEtNTUuOTYtNTAtNjIuMzZ6TTk2IDM1MmMtMTcuNjcgMC0zMi0xNC4zMy0zMi0zMnMxNC4zMy0zMiAzMi0zMiAzMiAxNC4zMyAzMiAzMi0xNC4zMyAzMi0zMiAzMnptMjAuNTUtMTEybDE3LjItNjYuMzZjMi4yMy04LjE2IDkuNTktMTMuNjQgMTUuMDYtMTMuNjRoMjE0LjRjNS40NyAwIDEyLjgzIDUuNDggMTQuODUgMTIuODZMMzk1LjQ1IDI0MGgtMjc4Ljl6TTQxNiAzNTJjLTE3LjY3IDAtMzItMTQuMzMtMzItMzJzMTQuMzMtMzIgMzItMzIgMzIgMTQuMzMgMzIgMzItMTQuMzMgMzItMzIgMzJ6XCJdLHRlcm1pbmFsOls2NDAsNTEyLFtdLFwiZjEyMFwiLFwiTTI1Ny45ODEgMjcyLjk3MUw2My42MzggNDY3LjMxNGMtOS4zNzMgOS4zNzMtMjQuNTY5IDkuMzczLTMzLjk0MSAwTDcuMDI5IDQ0NC42NDdjLTkuMzU3LTkuMzU3LTkuMzc1LTI0LjUyMi0uMDQtMzMuOTAxTDE2MS4wMTEgMjU2IDYuOTkgMTAxLjI1NWMtOS4zMzUtOS4zNzktOS4zMTctMjQuNTQ0LjA0LTMzLjkwMWwyMi42NjctMjIuNjY3YzkuMzczLTkuMzczIDI0LjU2OS05LjM3MyAzMy45NDEgMEwyNTcuOTgxIDIzOS4wM2M5LjM3MyA5LjM3MiA5LjM3MyAyNC41NjggMCAzMy45NDF6TTY0MCA0NTZ2LTMyYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgzMTJjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYzMmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzA0YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHpcIl0sXCJ0ZXh0LWhlaWdodFwiOls1NzYsNTEyLFtdLFwiZjAzNFwiLFwiTTE2IDMyaDI4OGM4LjgzNyAwIDE2IDcuMTYzIDE2IDE2djk2YzAgOC44MzctNy4xNjMgMTYtMTYgMTZoLTM1LjQ5NmMtOC44MzcgMC0xNi03LjE2My0xNi0xNlY5NmgtNTQuNzYxdjMyMEgyMzJjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDg4Yy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2di0zMmMwLTguODM3IDcuMTYzLTE2IDE2LTE2aDM0LjI1N1Y5Nkg2Ny40OTZ2NDhjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNmMtOC44MzcgMC0xNi03LjE2My0xNi0xNlY0OGMwLTguODM3IDcuMTYzLTE2IDE2LTE2em00NzUuMzA4IDQuNjg1bDc5Ljk5NSA4MC4wMDFDNTgxLjMwOSAxMjYuNjkzIDU3NC4yOTcgMTQ0IDU1OS45OSAxNDRINTEydjIyNGg0OGMxNS42MzkgMCAyMC42MzUgMTcuOTkxIDExLjMxMyAyNy4zMTRsLTc5Ljk5NSA4MC4wMDFjLTYuMjQ3IDYuMjQ3LTE2LjM4MSA2LjI0NS0yMi42MjYgMGwtNzkuOTk1LTgwLjAwMUMzNzguNjkxIDM4NS4zMDcgMzg1LjcwMyAzNjggNDAwLjAxIDM2OEg0NDhWMTQ0aC00OGMtMTUuNjM5IDAtMjAuNjM1LTE3Ljk5MS0xMS4zMTMtMjcuMzE0bDc5Ljk5NS04MC4wMDFjNi4yNDctNi4yNDggMTYuMzgxLTYuMjQ1IDIyLjYyNiAwelwiXSxcInRleHQtd2lkdGhcIjpbNDQ4LDUxMixbXSxcImYwMzVcIixcIk0xNiAzMmg0MTZjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnY5NmMwIDguODM3LTcuMTYzIDE2LTE2IDE2aC0zNS40OTZjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZWOTZIMjYxLjc0M3YxMjhIMjk2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNTJjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZ2LTMyYzAtOC44MzcgNy4xNjMtMTYgMTYtMTZoMzQuMjU3Vjk2SDY3LjQ5NnY0OGMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDE2Yy04LjgzNyAwLTE2LTcuMTYzLTE2LTE2VjQ4YzAtOC44MzcgNy4xNjMtMTYgMTYtMTZ6bTQyNy4zMTUgMzQwLjY4MmwtODAuMDAxLTc5Ljk5NUMzNTMuOTkxIDI4My4zNjUgMzM2IDI4OC4zNjIgMzM2IDMwNHY0OEgxMTJ2LTQ3Ljk5YzAtMTQuMzA3LTE3LjMwNy0yMS4zMTktMjcuMzE0LTExLjMxM0w0LjY4NSAzNzIuNjkyYy02LjI0NSA2LjI0NS02LjI0NyAxNi4zNzkgMCAyMi42MjZsODAuMDAxIDc5Ljk5NUM5NC4wMDkgNDg0LjYzNSAxMTIgNDc5LjYzOCAxMTIgNDY0di00OGgyMjR2NDcuOTljMCAxNC4zMDcgMTcuMzA3IDIxLjMxOSAyNy4zMTQgMTEuMzEzbDgwLjAwMS03OS45OTVjNi4yNDUtNi4yNDUgNi4yNDgtMTYuMzc5IDAtMjIuNjI2elwiXSx0aDpbNTEyLDUxMixbXSxcImYwMGFcIixcIk0xNDkuMzMzIDU2djgwYzAgMTMuMjU1LTEwLjc0NSAyNC0yNCAyNEgyNGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjU2YzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGgxMDEuMzMzYzEzLjI1NSAwIDI0IDEwLjc0NSAyNCAyNHptMTgxLjMzNCAyNDB2LTgwYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgyMDUuMzMzYy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2ODBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEwMS4zMzNjMTMuMjU2IDAgMjQuMDAxLTEwLjc0NSAyNC4wMDEtMjR6bTMyLTI0MHY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRINDg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFY1NmMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMzg2LjY2N2MtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0em0tMzIgODBWNTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDIwNS4zMzNjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTAxLjMzM2MxMy4yNTYgMCAyNC4wMDEtMTAuNzQ1IDI0LjAwMS0yNHptLTIwNS4zMzQgNTZIMjRjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTAxLjMzM2MxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTgwYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpNMCAzNzZ2ODBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDEwMS4zMzNjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0di04MGMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMjRjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHptMzg2LjY2Ny01Nkg0ODhjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0di04MGMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMzg2LjY2N2MtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djgwYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNHptMCAxNjBINDg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtODBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDM4Ni42NjdjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjR6TTE4MS4zMzMgMzc2djgwYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxMDEuMzMzYzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtODBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDIwNS4zMzNjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHpcIl0sXCJ0aC1sYXJnZVwiOls1MTIsNTEyLFtdLFwiZjAwOVwiLFwiTTI5NiAzMmgxOTJjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0djE2MGMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRIMjk2Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRWNTZjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0em0tODAgMEgyNEMxMC43NDUgMzIgMCA0Mi43NDUgMCA1NnYxNjBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDE5MmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWNTZjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0ek0wIDI5NnYxNjBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDE5MmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMjk2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgyNGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0em0yOTYgMTg0aDE5MmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMjk2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgyOTZjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYxNjBjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0elwiXSxcInRoLWxpc3RcIjpbNTEyLDUxMixbXSxcImYwMGJcIixcIk0xNDkuMzMzIDIxNnY4MGMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRIMjRjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNHYtODBjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDEwMS4zMzNjMTMuMjU1IDAgMjQgMTAuNzQ1IDI0IDI0ek0wIDM3NnY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTAxLjMzM2MxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjR2LTgwYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgyNGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0ek0xMjUuMzMzIDMySDI0QzEwLjc0NSAzMiAwIDQyLjc0NSAwIDU2djgwYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxMDEuMzMzYzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFY1NmMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjR6bTgwIDQ0OEg0ODhjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0di04MGMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMjA1LjMzM2MtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djgwYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNHptLTI0LTQyNHY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRINDg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFY1NmMwLTEzLjI1NS0xMC43NDUtMjQtMjQtMjRIMjA1LjMzM2MtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0em0yNCAyNjRINDg4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHYtODBjMC0xMy4yNTUtMTAuNzQ1LTI0LTI0LTI0SDIwNS4zMzNjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHY4MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjR6XCJdLHRoZXJtb21ldGVyOls1MTIsNTEyLFtdLFwiZjQ5MVwiLFwiTTQ3Ni44IDIwLjRjLTM3LjUtMzAuNy05NS41LTI2LjMtMTMxLjkgMTAuMmwtNDUuNyA0NiA1MC41IDUwLjVjMy4xIDMuMSAzLjEgOC4yIDAgMTEuM2wtMTEuMyAxMS4zYy0zLjEgMy4xLTguMiAzLjEtMTEuMyAwbC01MC40LTUwLjUtNDUuMSA0NS40IDUwLjMgNTAuNGMzLjEgMy4xIDMuMSA4LjIgMCAxMS4zbC0xMS4zIDExLjNjLTMuMSAzLjEtOC4yIDMuMS0xMS4zIDBMMjA5IDE2Ny40bC00NS4xIDQ1LjRMMjE0IDI2M2MzLjEgMy4xIDMuMSA4LjIgMCAxMS4zbC0xMS4zIDExLjNjLTMuMSAzLjEtOC4yIDMuMS0xMS4zIDBsLTUwLjEtNTAuMkw5NiAyODEuMVYzODJMNyA0NzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45IDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDg5LTg5aDk5LjlMNDg0IDE2Mi42YzM0LjktMzQuOSA0Mi4yLTEwMS41LTcuMi0xNDIuMnpcIl0sXCJ0aGVybW9tZXRlci1lbXB0eVwiOlsyNTYsNTEyLFtdLFwiZjJjYlwiLFwiTTE5MiAzODRjMCAzNS4zNDYtMjguNjU0IDY0LTY0IDY0cy02NC0yOC42NTQtNjQtNjRjMC0zNS4zNDYgMjguNjU0LTY0IDY0LTY0czY0IDI4LjY1NCA2NCA2NHptMzItODQuNjUzYzE5LjkxMiAyMi41NjMgMzIgNTIuMTk0IDMyIDg0LjY1MyAwIDcwLjY5Ni01Ny4zMDMgMTI4LTEyOCAxMjgtLjI5OSAwLS42MDktLjAwMS0uOTA5LS4wMDNDNTYuNzg5IDUxMS41MDktLjM1NyA0NTMuNjM2LjAwMiAzODMuMzMzLjE2NiAzNTEuMTM1IDEyLjIyNSAzMjEuNzU1IDMyIDI5OS4zNDdWOTZjMC01My4wMTkgNDIuOTgxLTk2IDk2LTk2czk2IDQyLjk4MSA5NiA5NnYyMDMuMzQ3ek0yMDggMzg0YzAtMzQuMzM5LTE5LjM3LTUyLjE5LTMyLTY2LjUwMlY5NmMwLTI2LjQ2Ny0yMS41MzMtNDgtNDgtNDhTODAgNjkuNTMzIDgwIDk2djIyMS40OThjLTEyLjczMiAxNC40MjgtMzEuODI1IDMyLjEtMzEuOTk5IDY2LjA4LS4yMjQgNDMuODc2IDM1LjU2MyA4MC4xMTYgNzkuNDIzIDgwLjQyTDEyOCA0NjRjNDQuMTEyIDAgODAtMzUuODg4IDgwLTgwelwiXSxcInRoZXJtb21ldGVyLWZ1bGxcIjpbMjU2LDUxMixbXSxcImYyYzdcIixcIk0yMjQgOTZjMC01My4wMTktNDIuOTgxLTk2LTk2LTk2UzMyIDQyLjk4MSAzMiA5NnYyMDMuMzQ3QzEyLjIyNSAzMjEuNzU2LjE2NiAzNTEuMTM2LjAwMiAzODMuMzMzYy0uMzU5IDcwLjMwMyA1Ni43ODcgMTI4LjE3NiAxMjcuMDg5IDEyOC42NjQuMjk5LjAwMi42MS4wMDMuOTA5LjAwMyA3MC42OTggMCAxMjgtNTcuMzA0IDEyOC0xMjggMC0zMi40NTktMTIuMDg4LTYyLjA5LTMyLTg0LjY1M1Y5NnptLTk2IDM2OGwtLjU3Ni0uMDAyYy00My44Ni0uMzA0LTc5LjY0Ny0zNi41NDQtNzkuNDIzLTgwLjQyLjE3My0zMy45OCAxOS4yNjYtNTEuNjUyIDMxLjk5OS02Ni4wOFY5NmMwLTI2LjQ2NyAyMS41MzMtNDggNDgtNDhzNDggMjEuNTMzIDQ4IDQ4djIyMS40OThjMTIuNjMgMTQuMzEyIDMyIDMyLjE2NCAzMiA2Ni41MDIgMCA0NC4xMTItMzUuODg4IDgwLTgwIDgwem02NC04MGMwIDM1LjM0Ni0yOC42NTQgNjQtNjQgNjRzLTY0LTI4LjY1NC02NC02NGMwLTIzLjY4NSAxMi44NzYtNDQuMzQ5IDMyLTU1LjQxN1Y5NmMwLTE3LjY3MyAxNC4zMjctMzIgMzItMzJzMzIgMTQuMzI3IDMyIDMydjIzMi41ODNjMTkuMTI0IDExLjA2OCAzMiAzMS43MzIgMzIgNTUuNDE3elwiXSxcInRoZXJtb21ldGVyLWhhbGZcIjpbMjU2LDUxMixbXSxcImYyYzlcIixcIk0xOTIgMzg0YzAgMzUuMzQ2LTI4LjY1NCA2NC02NCA2NHMtNjQtMjguNjU0LTY0LTY0YzAtMjMuNjg1IDEyLjg3Ni00NC4zNDkgMzItNTUuNDE3VjIyNGMwLTE3LjY3MyAxNC4zMjctMzIgMzItMzJzMzIgMTQuMzI3IDMyIDMydjEwNC41ODNjMTkuMTI0IDExLjA2OCAzMiAzMS43MzIgMzIgNTUuNDE3em0zMi04NC42NTNjMTkuOTEyIDIyLjU2MyAzMiA1Mi4xOTQgMzIgODQuNjUzIDAgNzAuNjk2LTU3LjMwMyAxMjgtMTI4IDEyOC0uMjk5IDAtLjYwOS0uMDAxLS45MDktLjAwM0M1Ni43ODkgNTExLjUwOS0uMzU3IDQ1My42MzYuMDAyIDM4My4zMzMuMTY2IDM1MS4xMzUgMTIuMjI1IDMyMS43NTUgMzIgMjk5LjM0N1Y5NmMwLTUzLjAxOSA0Mi45ODEtOTYgOTYtOTZzOTYgNDIuOTgxIDk2IDk2djIwMy4zNDd6TTIwOCAzODRjMC0zNC4zMzktMTkuMzctNTIuMTktMzItNjYuNTAyVjk2YzAtMjYuNDY3LTIxLjUzMy00OC00OC00OFM4MCA2OS41MzMgODAgOTZ2MjIxLjQ5OGMtMTIuNzMyIDE0LjQyOC0zMS44MjUgMzIuMS0zMS45OTkgNjYuMDgtLjIyNCA0My44NzYgMzUuNTYzIDgwLjExNiA3OS40MjMgODAuNDJMMTI4IDQ2NGM0NC4xMTIgMCA4MC0zNS44ODggODAtODB6XCJdLFwidGhlcm1vbWV0ZXItcXVhcnRlclwiOlsyNTYsNTEyLFtdLFwiZjJjYVwiLFwiTTE5MiAzODRjMCAzNS4zNDYtMjguNjU0IDY0LTY0IDY0cy02NC0yOC42NTQtNjQtNjRjMC0yMy42ODUgMTIuODc2LTQ0LjM0OSAzMi01NS40MTdWMjg4YzAtMTcuNjczIDE0LjMyNy0zMiAzMi0zMnMzMiAxNC4zMjcgMzIgMzJ2NDAuNTgzYzE5LjEyNCAxMS4wNjggMzIgMzEuNzMyIDMyIDU1LjQxN3ptMzItODQuNjUzYzE5LjkxMiAyMi41NjMgMzIgNTIuMTk0IDMyIDg0LjY1MyAwIDcwLjY5Ni01Ny4zMDMgMTI4LTEyOCAxMjgtLjI5OSAwLS42MDktLjAwMS0uOTA5LS4wMDNDNTYuNzg5IDUxMS41MDktLjM1NyA0NTMuNjM2LjAwMiAzODMuMzMzLjE2NiAzNTEuMTM1IDEyLjIyNSAzMjEuNzU1IDMyIDI5OS4zNDdWOTZjMC01My4wMTkgNDIuOTgxLTk2IDk2LTk2czk2IDQyLjk4MSA5NiA5NnYyMDMuMzQ3ek0yMDggMzg0YzAtMzQuMzM5LTE5LjM3LTUyLjE5LTMyLTY2LjUwMlY5NmMwLTI2LjQ2Ny0yMS41MzMtNDgtNDgtNDhTODAgNjkuNTMzIDgwIDk2djIyMS40OThjLTEyLjczMiAxNC40MjgtMzEuODI1IDMyLjEtMzEuOTk5IDY2LjA4LS4yMjQgNDMuODc2IDM1LjU2MyA4MC4xMTYgNzkuNDIzIDgwLjQyTDEyOCA0NjRjNDQuMTEyIDAgODAtMzUuODg4IDgwLTgwelwiXSxcInRoZXJtb21ldGVyLXRocmVlLXF1YXJ0ZXJzXCI6WzI1Niw1MTIsW10sXCJmMmM4XCIsXCJNMTkyIDM4NGMwIDM1LjM0Ni0yOC42NTQgNjQtNjQgNjQtMzUuMzQ2IDAtNjQtMjguNjU0LTY0LTY0IDAtMjMuNjg1IDEyLjg3Ni00NC4zNDkgMzItNTUuNDE3VjE2MGMwLTE3LjY3MyAxNC4zMjctMzIgMzItMzJzMzIgMTQuMzI3IDMyIDMydjE2OC41ODNjMTkuMTI0IDExLjA2OCAzMiAzMS43MzIgMzIgNTUuNDE3em0zMi04NC42NTNjMTkuOTEyIDIyLjU2MyAzMiA1Mi4xOTQgMzIgODQuNjUzIDAgNzAuNjk2LTU3LjMwMyAxMjgtMTI4IDEyOC0uMjk5IDAtLjYwOS0uMDAxLS45MDktLjAwM0M1Ni43ODkgNTExLjUwOS0uMzU3IDQ1My42MzYuMDAyIDM4My4zMzMuMTY2IDM1MS4xMzUgMTIuMjI1IDMyMS43NTUgMzIgMjk5LjM0N1Y5NmMwLTUzLjAxOSA0Mi45ODEtOTYgOTYtOTZzOTYgNDIuOTgxIDk2IDk2djIwMy4zNDd6TTIwOCAzODRjMC0zNC4zMzktMTkuMzctNTIuMTktMzItNjYuNTAyVjk2YzAtMjYuNDY3LTIxLjUzMy00OC00OC00OFM4MCA2OS41MzMgODAgOTZ2MjIxLjQ5OGMtMTIuNzMyIDE0LjQyOC0zMS44MjUgMzIuMS0zMS45OTkgNjYuMDgtLjIyNCA0My44NzYgMzUuNTYzIDgwLjExNiA3OS40MjMgODAuNDJMMTI4IDQ2NGM0NC4xMTIgMCA4MC0zNS44ODggODAtODB6XCJdLFwidGh1bWJzLWRvd25cIjpbNTEyLDUxMixbXSxcImYxNjVcIixcIk0wIDU2djI0MGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoODBjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjU2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgyNEMxMC43NDUgMzIgMCA0Mi43NDUgMCA1NnptNDAgMjAwYzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNHMyNCAxMC43NDUgMjQgMjQtMTAuNzQ1IDI0LTI0IDI0LTI0LTEwLjc0NS0yNC0yNHptMjcyIDI1NmMtMjAuMTgzIDAtMjkuNDg1LTM5LjI5My0zMy45MzEtNTcuNzk1LTUuMjA2LTIxLjY2Ni0xMC41ODktNDQuMDctMjUuMzkzLTU4LjkwMi0zMi40NjktMzIuNTI0LTQ5LjUwMy03My45NjctODkuMTE3LTExMy4xMTFhMTEuOTggMTEuOTggMCAwIDEtMy41NTgtOC41MjFWNTkuOTAxYzAtNi41NDEgNS4yNDMtMTEuODc4IDExLjc4My0xMS45OTggMTUuODMxLS4yOSAzNi42OTQtOS4wNzkgNTIuNjUxLTE2LjE3OEMyNTYuMTg5IDE3LjU5OCAyOTUuNzA5LjAxNyAzNDMuOTk1IDBoMi44NDRjNDIuNzc3IDAgOTMuMzYzLjQxMyAxMTMuNzc0IDI5LjczNyA4LjM5MiAxMi4wNTcgMTAuNDQ2IDI3LjAzNCA2LjE0OCA0NC42MzIgMTYuMzEyIDE3LjA1MyAyNS4wNjMgNDguODYzIDE2LjM4MiA3NC43NTcgMTcuNTQ0IDIzLjQzMiAxOS4xNDMgNTYuMTMyIDkuMzA4IDc5LjQ2OWwuMTEuMTFjMTEuODkzIDExLjk0OSAxOS41MjMgMzEuMjU5IDE5LjQzOSA0OS4xOTctLjE1NiAzMC4zNTItMjYuMTU3IDU4LjA5OC01OS41NTMgNTguMDk4SDM1MC43MjNDMzU4LjAzIDM2NC4zNCAzODQgMzg4LjEzMiAzODQgNDMwLjU0OCAzODQgNTA0IDMzNiA1MTIgMzEyIDUxMnpcIl0sXCJ0aHVtYnMtdXBcIjpbNTEyLDUxMixbXSxcImYxNjRcIixcIk0xMDQgMjI0SDI0Yy0xMy4yNTUgMC0yNCAxMC43NDUtMjQgMjR2MjQwYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGg4MGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMjQ4YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpNNjQgNDcyYy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRzMTAuNzQ1LTI0IDI0LTI0IDI0IDEwLjc0NSAyNCAyNC0xMC43NDUgMjQtMjQgMjR6TTM4NCA4MS40NTJjMCA0Mi40MTYtMjUuOTcgNjYuMjA4LTMzLjI3NyA5NC41NDhoMTAxLjcyM2MzMy4zOTcgMCA1OS4zOTcgMjcuNzQ2IDU5LjU1MyA1OC4wOTguMDg0IDE3LjkzOC03LjU0NiAzNy4yNDktMTkuNDM5IDQ5LjE5N2wtLjExLjExYzkuODM2IDIzLjMzNyA4LjIzNyA1Ni4wMzctOS4zMDggNzkuNDY5IDguNjgxIDI1Ljg5NS0uMDY5IDU3LjcwNC0xNi4zODIgNzQuNzU3IDQuMjk4IDE3LjU5OCAyLjI0NCAzMi41NzUtNi4xNDggNDQuNjMyQzQ0MC4yMDIgNTExLjU4NyAzODkuNjE2IDUxMiAzNDYuODM5IDUxMmwtMi44NDUtLjAwMWMtNDguMjg3LS4wMTctODcuODA2LTE3LjU5OC0xMTkuNTYtMzEuNzI1LTE1Ljk1Ny03LjA5OS0zNi44MjEtMTUuODg3LTUyLjY1MS0xNi4xNzgtNi41NC0uMTItMTEuNzgzLTUuNDU3LTExLjc4My0xMS45OTh2LTIxMy43N2MwLTMuMiAxLjI4Mi02LjI3MSAzLjU1OC04LjUyMSAzOS42MTQtMzkuMTQ0IDU2LjY0OC04MC41ODcgODkuMTE3LTExMy4xMTEgMTQuODA0LTE0LjgzMiAyMC4xODgtMzcuMjM2IDI1LjM5My01OC45MDJDMjgyLjUxNSAzOS4yOTMgMjkxLjgxNyAwIDMxMiAwYzI0IDAgNzIgOCA3MiA4MS40NTJ6XCJdLHRodW1idGFjazpbMzg0LDUxMixbXSxcImYwOGRcIixcIk0yOTguMDI4IDIxNC4yNjdMMjg1Ljc5MyA5NkgzMjhjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjI0YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEg1NkM0Mi43NDUgMCAzMiAxMC43NDUgMzIgMjR2NDhjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDQyLjIwN0w4NS45NzIgMjE0LjI2N0MzNy40NjUgMjM2LjgyIDAgMjc3LjI2MSAwIDMyOGMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMTM2djEwNC4wMDdjMCAxLjI0Mi4yODkgMi40NjcuODQ1IDMuNTc4bDI0IDQ4YzIuOTQxIDUuODgyIDExLjM2NCA1Ljg5MyAxNC4zMTEgMGwyNC00OGE4LjAwOCA4LjAwOCAwIDAgMCAuODQ1LTMuNTc4VjM1MmgxMzZjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0LS4wMDEtNTEuMTgzLTM3Ljk4My05MS40Mi04NS45NzMtMTEzLjczM3pcIl0sXCJ0aWNrZXQtYWx0XCI6WzU3Niw1MTIsW10sXCJmM2ZmXCIsXCJNMTI4IDE2MGgzMjB2MTkySDEyOFYxNjB6bTQwMCA5NmMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4djk2YzAgMjYuNTEtMjEuNDkgNDgtNDggNDhINDhjLTI2LjUxIDAtNDgtMjEuNDktNDgtNDh2LTk2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhzLTIxLjQ5LTQ4LTQ4LTQ4di05NmMwLTI2LjUxIDIxLjQ5LTQ4IDQ4LTQ4aDQ4MGMyNi41MSAwIDQ4IDIxLjQ5IDQ4IDQ4djk2Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4em0tNDgtMTA0YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEgxMjBjLTEzLjI1NSAwLTI0IDEwLjc0NS0yNCAyNHYyMDhjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDMzNmMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRWMTUyelwiXSx0aW1lczpbMzUyLDUxMixbXSxcImYwMGRcIixcIk0yNDIuNzIgMjU2bDEwMC4wNy0xMDAuMDdjMTIuMjgtMTIuMjggMTIuMjgtMzIuMTkgMC00NC40OGwtMjIuMjQtMjIuMjRjLTEyLjI4LTEyLjI4LTMyLjE5LTEyLjI4LTQ0LjQ4IDBMMTc2IDE4OS4yOCA3NS45MyA4OS4yMWMtMTIuMjgtMTIuMjgtMzIuMTktMTIuMjgtNDQuNDggMEw5LjIxIDExMS40NWMtMTIuMjggMTIuMjgtMTIuMjggMzIuMTkgMCA0NC40OEwxMDkuMjggMjU2IDkuMjEgMzU2LjA3Yy0xMi4yOCAxMi4yOC0xMi4yOCAzMi4xOSAwIDQ0LjQ4bDIyLjI0IDIyLjI0YzEyLjI4IDEyLjI4IDMyLjIgMTIuMjggNDQuNDggMEwxNzYgMzIyLjcybDEwMC4wNyAxMDAuMDdjMTIuMjggMTIuMjggMzIuMiAxMi4yOCA0NC40OCAwbDIyLjI0LTIyLjI0YzEyLjI4LTEyLjI4IDEyLjI4LTMyLjE5IDAtNDQuNDhMMjQyLjcyIDI1NnpcIl0sXCJ0aW1lcy1jaXJjbGVcIjpbNTEyLDUxMixbXSxcImYwNTdcIixcIk0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0xMjEuNiAzMTMuMWM0LjcgNC43IDQuNyAxMi4zIDAgMTdMMzM4IDM3Ny42Yy00LjcgNC43LTEyLjMgNC43LTE3IDBMMjU2IDMxMmwtNjUuMSA2NS42Yy00LjcgNC43LTEyLjMgNC43LTE3IDBMMTM0LjQgMzM4Yy00LjctNC43LTQuNy0xMi4zIDAtMTdsNjUuNi02NS02NS42LTY1LjFjLTQuNy00LjctNC43LTEyLjMgMC0xN2wzOS42LTM5LjZjNC43LTQuNyAxMi4zLTQuNyAxNyAwbDY1IDY1LjcgNjUuMS02NS42YzQuNy00LjcgMTIuMy00LjcgMTcgMGwzOS42IDM5LjZjNC43IDQuNyA0LjcgMTIuMyAwIDE3TDMxMiAyNTZsNjUuNiA2NS4xelwiXSx0aW50OlszNTIsNTEyLFtdLFwiZjA0M1wiLFwiTTIwNS4yMiAyMi4wOWMtNy45NC0yOC43OC00OS40NC0zMC4xMi01OC40NCAwQzEwMC4wMSAxNzkuODUgMCAyMjIuNzIgMCAzMzMuOTEgMCA0MzIuMzUgNzguNzIgNTEyIDE3NiA1MTJzMTc2LTc5LjY1IDE3Ni0xNzguMDljMC0xMTEuNzUtOTkuNzktMTUzLjM0LTE0Ni43OC0zMTEuODJ6TTE3NiA0NDhjLTYxLjc1IDAtMTEyLTUwLjI1LTExMi0xMTIgMC04Ljg0IDcuMTYtMTYgMTYtMTZzMTYgNy4xNiAxNiAxNmMwIDQ0LjExIDM1Ljg5IDgwIDgwIDgwIDguODQgMCAxNiA3LjE2IDE2IDE2cy03LjE2IDE2LTE2IDE2elwiXSxcInRpbnQtc2xhc2hcIjpbNjQwLDUxMixbXSxcImY1YzdcIixcIk02MzMuODIgNDU4LjFMNDk0Ljk3IDM1MC43OGMuNTItNS41NyAxLjAzLTExLjE2IDEuMDMtMTYuODcgMC0xMTEuNzYtOTkuNzktMTUzLjM0LTE0Ni43OC0zMTEuODItNy45NC0yOC43OC00OS40NC0zMC4xMi01OC40NCAwLTE1LjUyIDUyLjM0LTM2Ljg3IDkxLjk2LTU4LjQ5IDEyNS42OEw0NS40NyAzLjM3QzM4LjQ5LTIuMDUgMjguNDMtLjggMjMuMDEgNi4xOEwzLjM3IDMxLjQ1Qy0yLjA1IDM4LjQyLS44IDQ4LjQ3IDYuMTggNTMuOWw1ODguMzYgNDU0LjczYzYuOTggNS40MyAxNy4wMyA0LjE3IDIyLjQ2LTIuODFsMTkuNjQtMjUuMjdjNS40MS02Ljk3IDQuMTYtMTcuMDItMi44Mi0yMi40NXpNMTQ0IDMzMy45MUMxNDQgNDMyLjM1IDIyMi43MiA1MTIgMzIwIDUxMmM0NC43MSAwIDg1LjM3LTE2Ljk2IDExNi40LTQ0LjdMMTYyLjcyIDI1NS43OGMtMTEuNDEgMjMuNS0xOC43MiA0OC4zNS0xOC43MiA3OC4xM3pcIl0sdGlyZWQ6WzQ5Niw1MTIsW10sXCJmNWM4XCIsXCJNMjQ4IDhDMTExIDggMCAxMTkgMCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzODUgOCAyNDggOHptMzMuOCAxODkuN2w4MC00OGMxMS42LTYuOSAyNCA3LjcgMTUuNCAxOEwzNDMuNiAyMDhsMzMuNiA0MC4zYzguNyAxMC40LTMuOSAyNC44LTE1LjQgMThsLTgwLTQ4Yy03LjctNC43LTcuNy0xNS45IDAtMjAuNnptLTE2My0zMGMtOC42LTEwLjMgMy44LTI0LjkgMTUuNC0xOGw4MCA0OGM3LjggNC43IDcuOCAxNS45IDAgMjAuNmwtODAgNDhjLTExLjUgNi44LTI0LTcuNi0xNS40LTE4bDMzLjYtNDAuMy0zMy42LTQwLjN6TTI0OCAyODhjNTEuOSAwIDExNS4zIDQzLjggMTIzLjIgMTA2LjcgMS43IDEzLjYtOCAyNC42LTE3LjcgMjAuNC0yNS45LTExLjEtNjQuNC0xNy40LTEwNS41LTE3LjRzLTc5LjYgNi4zLTEwNS41IDE3LjRjLTkuOCA0LjItMTkuNC03LTE3LjctMjAuNEMxMzIuNyAzMzEuOCAxOTYuMSAyODggMjQ4IDI4OHpcIl0sXCJ0b2dnbGUtb2ZmXCI6WzU3Niw1MTIsW10sXCJmMjA0XCIsXCJNMzg0IDY0SDE5MkM4NS45NjEgNjQgMCAxNDkuOTYxIDAgMjU2czg1Ljk2MSAxOTIgMTkyIDE5MmgxOTJjMTA2LjAzOSAwIDE5Mi04NS45NjEgMTkyLTE5MlM0OTAuMDM5IDY0IDM4NCA2NHpNNjQgMjU2YzAtNzAuNzQxIDU3LjI0OS0xMjggMTI4LTEyOCA3MC43NDEgMCAxMjggNTcuMjQ5IDEyOCAxMjggMCA3MC43NDEtNTcuMjQ5IDEyOC0xMjggMTI4LTcwLjc0MSAwLTEyOC01Ny4yNDktMTI4LTEyOHptMzIwIDEyOGgtNDguOTA1YzY1LjIxNy03Mi44NTggNjUuMjM2LTE4My4xMiAwLTI1NkgzODRjNzAuNzQxIDAgMTI4IDU3LjI0OSAxMjggMTI4IDAgNzAuNzQtNTcuMjQ5IDEyOC0xMjggMTI4elwiXSxcInRvZ2dsZS1vblwiOls1NzYsNTEyLFtdLFwiZjIwNVwiLFwiTTU3NiAyNTZjMCAxMDYuMDM5LTg1Ljk2MSAxOTItMTkyIDE5MkgxOTJDODUuOTYxIDQ0OCAwIDM2Mi4wMzkgMCAyNTZTODUuOTYxIDY0IDE5MiA2NGgxOTJjMTA2LjAzOSAwIDE5MiA4NS45NjEgMTkyIDE5MnpNMzg0IDEyOGMtNzAuNzQxIDAtMTI4IDU3LjI0OS0xMjggMTI4IDAgNzAuNzQxIDU3LjI0OSAxMjggMTI4IDEyOCA3MC43NDEgMCAxMjgtNTcuMjQ5IDEyOC0xMjggMC03MC43NDEtNTcuMjQ5LTEyOC0xMjgtMTI4XCJdLHRvb2xib3g6WzUxMiw1MTIsW10sXCJmNTUyXCIsXCJNNTAyLjYzIDIxNC42M2wtNDUuMjUtNDUuMjVjLTYtNi0xNC4xNC05LjM3LTIyLjYzLTkuMzdIMzg0VjgwYzAtMjYuNTEtMjEuNDktNDgtNDgtNDhIMTc2Yy0yNi41MSAwLTQ4IDIxLjQ5LTQ4IDQ4djgwSDc3LjI1Yy04LjQ5IDAtMTYuNjIgMy4zNy0yMi42MyA5LjM3TDkuMzcgMjE0LjYzYy02IDYtOS4zNyAxNC4xNC05LjM3IDIyLjYzVjMyMGgxMjh2LTE2YzAtOC44NCA3LjE2LTE2IDE2LTE2aDMyYzguODQgMCAxNiA3LjE2IDE2IDE2djE2aDEyOHYtMTZjMC04Ljg0IDcuMTYtMTYgMTYtMTZoMzJjOC44NCAwIDE2IDcuMTYgMTYgMTZ2MTZoMTI4di04Mi43NWMwLTguNDgtMy4zNy0xNi42Mi05LjM3LTIyLjYyek0zMjAgMTYwSDE5MlY5NmgxMjh2NjR6bTY0IDIwOGMwIDguODQtNy4xNiAxNi0xNiAxNmgtMzJjLTguODQgMC0xNi03LjE2LTE2LTE2di0xNkgxOTJ2MTZjMCA4Ljg0LTcuMTYgMTYtMTYgMTZoLTMyYy04Ljg0IDAtMTYtNy4xNi0xNi0xNnYtMTZIMHY5NmMwIDE3LjY3IDE0LjMzIDMyIDMyIDMyaDQ0OGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi05NkgzODR2MTZ6XCJdLHRvb3RoOls0NDgsNTEyLFtdLFwiZjVjOVwiLFwiTTQ0My45OCA5Ni4yNWMtMTEuMDEtNDUuMjItNDcuMTEtODIuMDYtOTIuMDEtOTMuNzItMzIuMTktOC4zNi02MyA1LjEtODkuMTQgMjQuMzMtMy4yNSAyLjM5LTYuOTYgMy43My0xMC41IDUuNDhsMjguMzIgMTguMjFjNy40MiA0Ljc3IDkuNTggMTQuNjcgNC44IDIyLjExLTQuNDYgNi45NS0xNC4yNyA5Ljg2LTIyLjExIDQuOEwxNjIuODMgMTIuODRjLTIwLjctMTAuODUtNDMuMzgtMTYuNC02Ni44MS0xMC4zMS00NC45IDExLjY3LTgxIDQ4LjUtOTIuMDEgOTMuNzItMTAuMTMgNDEuNjItLjQyIDgwLjgxIDIxLjUgMTEwLjQzIDIzLjM2IDMxLjU3IDMyLjY4IDY4LjY2IDM2LjI5IDEwNy4zNSA0LjQgNDcuMTYgMTAuMzMgOTQuMTYgMjAuOTQgMTQwLjMybDcuOCAzMy45NWMzLjE5IDEzLjg3IDE1LjQ5IDIzLjcgMjkuNjcgMjMuNyAxMy45NyAwIDI2LjE1LTkuNTUgMjkuNTQtMjMuMTZsMzQuNDctMTM4LjQyYzQuNTYtMTguMzIgMjAuOTYtMzEuMTYgMzkuNzYtMzEuMTZzMzUuMiAxMi44NSAzOS43NiAzMS4xNmwzNC40NyAxMzguNDJjMy4zOSAxMy42MSAxNS41NyAyMy4xNiAyOS41NCAyMy4xNiAxNC4xOCAwIDI2LjQ4LTkuODMgMjkuNjctMjMuN2w3LjgtMzMuOTVjMTAuNjEtNDYuMTUgMTYuNTMtOTMuMTYgMjAuOTQtMTQwLjMyIDMuNjEtMzguNyAxMi45My03NS43OCAzNi4yOS0xMDcuMzUgMjEuOTUtMjkuNjEgMzEuNjYtNjguOCAyMS41My0xMTAuNDN6XCJdLHRyYWRlbWFyazpbNjQwLDUxMixbXSxcImYyNWNcIixcIk05Ny4xMTkgMTYzLjEzM0gxMmMtNi42MjcgMC0xMi01LjM3My0xMi0xMlYxMDhjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgyNDguNTU5YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2NDMuMTMzYzAgNi42MjctNS4zNzMgMTItMTIgMTJIMTc1LjQ0VjQwNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC01NC4zMjJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJWMTYzLjEzM3pNMzI5LjgyNSA5Nmg2NS40MjVhMTIgMTIgMCAwIDEgMTEuMzQ2IDguMDkzbDQzLjc1OSAxMjcuMDY4YzcuMTYxIDIwLjU4OCAxNi4xMTEgNTIuODEyIDE2LjExMSA1Mi44MTJoLjg5NnM4Ljk1LTMyLjIyNCAxNi4xMTEtNTIuODEybDQzLjc1OC0xMjcuMDY4QTEyIDEyIDAgMCAxIDUzOC41NzcgOTZoNjUuNDFhMTIgMTIgMCAwIDEgMTEuOTYxIDExLjAzbDI0LjAxMiAyOTZjLjU2NyA2Ljk4Ny00Ljk1MSAxMi45Ny0xMS45NjEgMTIuOTdoLTU0LjEwMWExMiAxMiAwIDAgMS0xMS45NzItMTEuMTgybC05LjA4Mi0xMzIuOTNjLTEuNzktMjQuMTY4IDAtNTMuNzA2IDAtNTMuNzA2aC0uODk2cy0xMC43NDEgMzMuNTY2LTE3LjkwMiA1My43MDZsLTMwLjcgODQuNzMxYTEyIDEyIDAgMCAxLTExLjI4MiA3LjkxMmgtNTAuMzAyYTEyIDEyIDAgMCAxLTExLjI4Mi03LjkxMmwtMzAuNy04NC43MzFjLTcuMTYxLTIwLjE0LTE3LjkwMy01My43MDYtMTcuOTAzLTUzLjcwNmgtLjg5NXMxLjc5IDI5LjUzOCAwIDUzLjcwNmwtOS4wODIgMTMyLjkzYy0uNDI4IDYuMjk1LTUuNjYgMTEuMTgyLTExLjk3IDExLjE4MkgzMDUuNGMtNy4wMTcgMC0xMi41MzYtNS45OTQtMTEuOTU5LTEyLjk4N2wyNC40MjUtMjk2QTExLjk5OSAxMS45OTkgMCAwIDEgMzI5LjgyNSA5NnpcIl0sdHJhaW46WzQ0OCw1MTIsW10sXCJmMjM4XCIsXCJNNDQ4IDk2djI1NmMwIDUxLjgxNS02MS42MjQgOTYtMTMwLjAyMiA5Nmw2Mi45OCA0OS43MjFDMzg2LjkwNSA1MDIuNDE3IDM4My41NjIgNTEyIDM3NiA1MTJINzJjLTcuNTc4IDAtMTAuODkyLTkuNTk0LTQuOTU3LTE0LjI3OUwxMzAuMDIyIDQ0OEM2MS44MiA0NDggMCA0MDMuOTU0IDAgMzUyVjk2QzAgNDIuOTgxIDY0IDAgMTI4IDBoMTkyYzY1IDAgMTI4IDQyLjk4MSAxMjggOTZ6bS00OCAxMzZWMTIwYzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNEg3MmMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djExMmMwIDEzLjI1NSAxMC43NDUgMjQgMjQgMjRoMzA0YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNHptLTE3NiA2NGMtMzAuOTI4IDAtNTYgMjUuMDcyLTU2IDU2czI1LjA3MiA1NiA1NiA1NiA1Ni0yNS4wNzIgNTYtNTYtMjUuMDcyLTU2LTU2LTU2elwiXSx0cmFuc2dlbmRlcjpbMzg0LDUxMixbXSxcImYyMjRcIixcIk0zNzIgMGgtNzljLTEwLjcgMC0xNiAxMi45LTguNSAyMC41bDE2LjkgMTYuOS04MC43IDgwLjdDMTk4LjUgMTA0LjEgMTcyLjIgOTYgMTQ0IDk2IDY0LjUgOTYgMCAxNjAuNSAwIDI0MGMwIDY4LjUgNDcuOSAxMjUuOSAxMTIgMTQwLjRWNDA4SDc2Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDM2djI4YzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTI4aDM2YzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC0zNnYtMjcuNmM2NC4xLTE0LjYgMTEyLTcxLjkgMTEyLTE0MC40IDAtMjguMi04LjEtNTQuNS0yMi4xLTc2LjdsODAuNy04MC43IDE2LjkgMTYuOWM3LjYgNy42IDIwLjUgMi4yIDIwLjUtOC41VjEyYzAtNi42LTUuNC0xMi0xMi0xMnpNMTQ0IDMyMGMtNDQuMSAwLTgwLTM1LjktODAtODBzMzUuOS04MCA4MC04MCA4MCAzNS45IDgwIDgwLTM1LjkgODAtODAgODB6XCJdLFwidHJhbnNnZW5kZXItYWx0XCI6WzQ4MCw1MTIsW10sXCJmMjI1XCIsXCJNNDY4IDBoLTc5Yy0xMC43IDAtMTYgMTIuOS04LjUgMjAuNWwxNi45IDE2LjktODAuNyA4MC43QzI5NC41IDEwNC4xIDI2OC4yIDk2IDI0MCA5NmMtMjguMiAwLTU0LjUgOC4xLTc2LjcgMjIuMWwtMTYuNS0xNi41IDE5LjgtMTkuOGM0LjctNC43IDQuNy0xMi4zIDAtMTdsLTI4LjMtMjguM2MtNC43LTQuNy0xMi4zLTQuNy0xNyAwbC0xOS44IDE5LjgtMTktMTkgMTYuOS0xNi45QzEwNy4xIDEyLjkgMTAxLjcgMCA5MSAwSDEyQzUuNCAwIDAgNS40IDAgMTJ2NzljMCAxMC43IDEyLjkgMTYgMjAuNSA4LjVsMTYuOS0xNi45IDE5IDE5LTE5LjggMTkuOGMtNC43IDQuNy00LjcgMTIuMyAwIDE3bDI4LjMgMjguM2M0LjcgNC43IDEyLjMgNC43IDE3IDBsMTkuOC0xOS44IDE2LjUgMTYuNUMxMDQuMSAxODUuNSA5NiAyMTEuOCA5NiAyNDBjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40VjQwOGgtMzZjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJoMzZ2MjhjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnYtMjhoMzZjNi42IDAgMTItNS40IDEyLTEydi00MGMwLTYuNi01LjQtMTItMTItMTJoLTM2di0yNy42YzY0LjEtMTQuNiAxMTItNzEuOSAxMTItMTQwLjQgMC0yOC4yLTguMS01NC41LTIyLjEtNzYuN2w4MC43LTgwLjcgMTYuOSAxNi45YzcuNiA3LjYgMjAuNSAyLjIgMjAuNS04LjVWMTJjMC02LjYtNS40LTEyLTEyLTEyek0yNDAgMzIwYy00NC4xIDAtODAtMzUuOS04MC04MHMzNS45LTgwIDgwLTgwIDgwIDM1LjkgODAgODAtMzUuOSA4MC04MCA4MHpcIl0sdHJhc2g6WzQ0OCw1MTIsW10sXCJmMWY4XCIsXCJNMCA4NFY1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxMTJsOS40LTE4LjdjNC04LjIgMTIuMy0xMy4zIDIxLjQtMTMuM2gxMTQuM2M5LjEgMCAxNy40IDUuMSAyMS41IDEzLjNMMzEyIDMyaDExMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyOGMwIDYuNi01LjQgMTItMTIgMTJIMTJDNS40IDk2IDAgOTAuNiAwIDg0em00MTUuMiA1Ni43TDM5NC44IDQ2N2MtMS42IDI1LjMtMjIuNiA0NS00Ny45IDQ1SDEwMS4xYy0yNS4zIDAtNDYuMy0xOS43LTQ3LjktNDVMMzIuOCAxNDAuN2MtLjQtNi45IDUuMS0xMi43IDEyLTEyLjdoMzU4LjVjNi44IDAgMTIuMyA1LjggMTEuOSAxMi43elwiXSxcInRyYXNoLWFsdFwiOls0NDgsNTEyLFtdLFwiZjJlZFwiLFwiTTAgODRWNTZjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTEybDkuNC0xOC43YzQtOC4yIDEyLjMtMTMuMyAyMS40LTEzLjNoMTE0LjNjOS4xIDAgMTcuNCA1LjEgMjEuNSAxMy4zTDMxMiAzMmgxMTJjMTMuMyAwIDI0IDEwLjcgMjQgMjR2MjhjMCA2LjYtNS40IDEyLTEyIDEySDEyQzUuNCA5NiAwIDkwLjYgMCA4NHptNDE2IDU2djMyNGMwIDI2LjUtMjEuNSA0OC00OCA0OEg4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQwYzAtNi42IDUuNC0xMiAxMi0xMmgzNjBjNi42IDAgMTIgNS40IDEyIDEyem0tMjcyIDY4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djIyNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwOHptOTYgMGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnYyMjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyMDh6bTk2IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2MjI0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA4elwiXSx0cmVlOlszODQsNTEyLFtdLFwiZjFiYlwiLFwiTTM3Ny4zMyAzNzUuNDI5TDI5My45MDYgMjg4SDMyOGMyMS4wMTcgMCAzMS44NzItMjUuMjA3IDE3LjQ0OC00MC40NzlMMjYyLjc5IDE2MEgyOTZjMjAuODc4IDAgMzEuODUxLTI0Ljk2OSAxNy41ODctNDAuMzMxbC0xMDQtMTEyLjAwM2MtOS40ODUtMTAuMjE0LTI1LjY3Ni0xMC4yMjktMzUuMTc0IDBsLTEwNCAxMTIuMDAzQzU2LjIwNiAxMzQuOTY5IDY3LjAzNyAxNjAgODggMTYwaDMzLjIxbC04Mi42NTkgODcuNTIxQzI0LjEyMSAyNjIuODAxIDM0Ljk5MyAyODggNTYgMjg4aDM0LjA5NEw2LjY2NSAzNzUuNDI5Qy03Ljg2OSAzOTAuNjU1IDIuOTI1IDQxNiAyNC4wMjUgNDE2SDE0NGMwIDMyLjc4MS0xMS4xODggNDkuMjYtMzMuOTk1IDY3LjUwNkM5OC4yMjUgNDkyLjkzIDEwNC45MTQgNTEyIDEyMCA1MTJoMTQ0YzE1LjA4NiAwIDIxLjc3Ni0xOS4wNjkgOS45OTUtMjguNDk0LTE5Ljc2OC0xNS44MTQtMzMuOTkyLTMxLjY2NS0zMy45OTUtNjcuNDk2VjQxNmgxMTkuOTdjMjEuMDUgMCAzMS45MjktMjUuMzA5IDE3LjM2LTQwLjU3MXpcIl0sdHJvcGh5Ols1NzYsNTEyLFtdLFwiZjA5MVwiLFwiTTU1MiA2NEg0NDhWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRIMTUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0MEgyNEMxMC43IDY0IDAgNzQuNyAwIDg4djU2YzAgMzUuNyAyMi41IDcyLjQgNjEuOSAxMDAuNyAzMS41IDIyLjcgNjkuOCAzNy4xIDExMCA0MS43QzIwMy4zIDMzOC41IDI0MCAzNjAgMjQwIDM2MHY3MmgtNDhjLTM1LjMgMC02NCAyMC43LTY0IDU2djEyYzAgNi42IDUuNCAxMiAxMiAxMmgyOTZjNi42IDAgMTItNS40IDEyLTEydi0xMmMwLTM1LjMtMjguNy01Ni02NC01NmgtNDh2LTcyczM2LjctMjEuNSA2OC4xLTczLjZjNDAuMy00LjYgNzguNi0xOSAxMTAtNDEuNyAzOS4zLTI4LjMgNjEuOS02NSA2MS45LTEwMC43Vjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0ek05OS4zIDE5Mi44Qzc0LjkgMTc1LjIgNjQgMTU1LjYgNjQgMTQ0di0xNmg2NC4yYzEgMzIuNiA1LjggNjEuMiAxMi44IDg2LjItMTUuMS01LjItMjkuMi0xMi40LTQxLjctMjEuNHpNNTEyIDE0NGMwIDE2LjEtMTcuNyAzNi4xLTM1LjMgNDguOC0xMi41IDktMjYuNyAxNi4yLTQxLjggMjEuNCA3LTI1IDExLjgtNTMuNiAxMi44LTg2LjJINTEydjE2elwiXSx0cnVjazpbNjQwLDUxMixbXSxcImYwZDFcIixcIk02MjQgMzUyaC0xNlYyNDMuOWMwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45TDQ5NCAxMTAuMWMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFINDE2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHYzMjBjMCAyNi41IDIxLjUgNDggNDggNDhoMTZjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05Nmg0OGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNnpNMTYwIDQ2NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OCA0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDh6bTMyMCAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4IDQ4IDIxLjUgNDggNDgtMjEuNSA0OC00OCA0OHptODAtMjA4SDQxNlYxNDRoNDQuMWw5OS45IDk5LjlWMjU2elwiXSxcInRydWNrLWxvYWRpbmdcIjpbNjQwLDUxMixbXSxcImY0ZGVcIixcIk01MC4yIDM3NS42YzIuMyA4LjUgMTEuMSAxMy42IDE5LjYgMTEuM2wyMTYuNC01OGM4LjUtMi4zIDEzLjYtMTEuMSAxMS4zLTE5LjZsLTQ5LjctMTg1LjVjLTIuMy04LjUtMTEuMS0xMy42LTE5LjYtMTEuM0wxNTEgMTMzLjNsMjQuOCA5Mi43LTYxLjggMTYuNS0yNC44LTkyLjctNzcuMyAyMC43QzMuNCAxNzIuOC0xLjcgMTgxLjYuNiAxOTAuMWw0OS42IDE4NS41ek0zODQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzIzLjZMNS45IDQ1MGMtNC4zIDEuMi02LjggNS42LTUuNiA5LjhsMTIuNiA0Ni4zYzEuMiA0LjMgNS42IDYuOCA5LjggNS42bDM5My43LTEwNy40QzQxOC44IDQ2NC4xIDQ2Ny42IDUxMiA1MjggNTEyYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyVjBIMzg0em0xNDQgNDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4IDQ4IDIxLjUgNDggNDgtMjEuNSA0OC00OCA0OHpcIl0sXCJ0cnVjay1tb3ZpbmdcIjpbNjQwLDUxMixbXSxcImY0ZGZcIixcIk02MjEuMyAyMzcuM2wtNTguNS01OC41Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43SDQ4MFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MCAyNi4zIDAgNDkuNC0xMi45IDY0LTMyLjQgMTQuNiAxOS42IDM3LjcgMzIuNCA2NCAzMi40IDQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtNS41LS42LTEwLjgtMS42LTE2aDE2My4yYy0xLjEgNS4yLTEuNiAxMC41LTEuNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2SDYyNGM4LjggMCAxNi03LjIgMTYtMTZ2LTg1LjVjMC0xNy02LjctMzMuMi0xOC43LTQ1LjJ6TTgwIDQzMmMtMTcuNiAwLTMyLTE0LjQtMzItMzJzMTQuNC0zMiAzMi0zMiAzMiAxNC40IDMyIDMyLTE0LjQgMzItMzIgMzJ6bTEyOCAwYy0xNy42IDAtMzItMTQuNC0zMi0zMnMxNC40LTMyIDMyLTMyIDMyIDE0LjQgMzIgMzItMTQuNCAzMi0zMiAzMnptMjcyLTIyNGgzNy41YzQuMyAwIDguMyAxLjcgMTEuMyA0LjdsNDMuMyA0My4zSDQ4MHYtNDh6bTQ4IDIyNGMtMTcuNiAwLTMyLTE0LjQtMzItMzJzMTQuNC0zMiAzMi0zMiAzMiAxNC40IDMyIDMyLTE0LjQgMzItMzIgMzJ6XCJdLHRzaGlydDpbNjQwLDUxMixbXSxcImY1NTNcIixcIk02MzEuMiA5Ni41TDQzNi41IDBDNDE2LjQgMjcuOCAzNzEuOSA0Ny4yIDMyMCA0Ny4yUzIyMy42IDI3LjggMjAzLjUgMEw4LjggOTYuNWMtNy45IDQtMTEuMSAxMy42LTcuMiAyMS41bDU3LjIgMTE0LjVjNCA3LjkgMTMuNiAxMS4xIDIxLjUgNy4ybDU2LjYtMjcuN2MxMC42LTUuMiAyMyAyLjUgMjMgMTQuNFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJoMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNi4zYzAtMTEuOCAxMi40LTE5LjYgMjMtMTQuNGw1Ni42IDI3LjdjNy45IDQgMTcuNS44IDIxLjUtNy4yTDYzOC4zIDExOGM0LTcuOS44LTE3LjYtNy4xLTIxLjV6XCJdLHR0eTpbNTEyLDUxMixbXSxcImYxZTRcIixcIk01LjM3IDEwMy44MjJjMTM4LjUzMi0xMzguNTMyIDM2Mi45MzYtMTM4LjMyNiA1MDEuMjYyIDAgNi4wNzggNi4wNzggNy4wNzQgMTUuNDk2IDIuNTgzIDIyLjY4MWwtNDMuMjE0IDY5LjEzOGExOC4zMzIgMTguMzMyIDAgMCAxLTIyLjM1NiA3LjMwNWwtODYuNDIyLTM0LjU2OWExOC4zMzUgMTguMzM1IDAgMCAxLTExLjQzNC0xOC44NDZMMzUxLjc0MSA5MGMtNjIuMTQ1LTIyLjQ1NC0xMzAuNjM2LTIxLjk4Ni0xOTEuNDgzIDBsNS45NTMgNTkuNTMyYTE4LjMzMSAxOC4zMzEgMCAwIDEtMTEuNDM0IDE4Ljg0NmwtODYuNDIzIDM0LjU2OGExOC4zMzQgMTguMzM0IDAgMCAxLTIyLjM1Ni03LjMwNUwyLjc4NyAxMjYuNTAyYTE4LjMzMyAxOC4zMzMgMCAwIDEgMi41ODMtMjIuNjh6TTk2IDMwOHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMkg0NGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptOTYgMHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptLTMzNiA5NnYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMkg5MmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTk2IDB2LTQwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTQwYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNDBjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptOTYgMHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNDBjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2NDBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg0MGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6TTk2IDUwMHYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMkg0NGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bTI4OCAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDE0MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDIzMmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem05NiAwdi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnY0MGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6XCJdLHR2Ols2NDAsNTEyLFtdLFwiZjI2Y1wiLFwiTTU5MiAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHYzMjBjMCAyNi41IDIxLjUgNDggNDggNDhoMjQ1LjF2MzJoLTE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJoLTE2MHYtMzJINTkyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tMTYgMzUySDY0VjY0aDUxMnYyODh6XCJdLHVtYnJlbGxhOls1NzYsNTEyLFtdLFwiZjBlOVwiLFwiTTU1Ny4wMTEgMjY3LjYzMWMtNTEuNDMyLTQ1LjIxNy0xMDcuNTcyLTQzLjY5OC0xNTguNTY3IDMwLjczMS01LjI5OCA3Ljg2MS0xNC45MDYgNy4xNjUtMTkuNzM2IDAtMi40ODMtMy42MjQtMzIuMjE4LTYwLjgwOC05MC43MDgtNjAuODA4LTQ1Ljc2NiAwLTcwLjU0MiAzMS4zNzgtOTAuNzA5IDYwLjgwOC00LjgyOSA3LjE2NS0xNC40MzYgNy44NjEtMTkuNzM0IDAtNTAuOTA0LTc0LjI4NS0xMDYuNjEzLTc2LjQwNi0xNTguNTY3LTMwLjczMS0xMC4yMSA4LjI2NC0yMC45MTItMS4xMDktMTguNjk2LTkuNDgxQzMyLjE0NiAxMzQuNTczIDE1OC41MTYgNjQuNjEyIDI4OC4wMDEgNjQuNjEyYzEyOC43OTMgMCAyNTYuNTQ2IDY5Ljk2MSAyODcuNzA2IDE5My41MzggMi4yMDYgOC4zMjItOC40MjYgMTcuNzkzLTE4LjY5NiA5LjQ4MXpNMjU2IDI2MS4wMDFWNDE2YzAgMTcuNjQ1LTE0LjM1NSAzMi0zMiAzMnMtMzItMTQuMzU1LTMyLTMyYzAtMTcuNjczLTE0LjMyNy0zMi0zMi0zMnMtMzIgMTQuMzI3LTMyIDMyYzAgNTIuOTM1IDQzLjA2NSA5NiA5NiA5NnM5Ni00My4wNjUgOTYtOTZWMjYxLjI4OGMtMjEuODM2LTEwLjgwNi00NS40MjUtOS43MzctNjQtLjI4N3ptNjQtMjExLjAwN1YzMmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJzLTMyIDE0LjMyNy0zMiAzMnYxNy45ODdhMzcyLjEwNSAzNzIuMTA1IDAgMCAxIDY0IC4wMDd6XCJdLFwidW1icmVsbGEtYmVhY2hcIjpbNjQwLDUxMixbXSxcImY1Y2FcIixcIk0xMTUuMzggMTM2LjlsMTAyLjExIDM3LjE4YzM1LjE5LTgxLjU0IDg2LjIxLTE0NC4yOSAxMzktMTczLjctOTUuODgtNC44OS0xODguNzggMzYuOTYtMjQ4LjUzIDExMS44LTYuNjkgOC40LTIuNjYgMjEuMDUgNy40MiAyNC43MnptMTMyLjI1IDQ4LjE2bDIzOC40OCA4Ni44M2MzNS43Ni0xMjEuMzggMTguNy0yMzEuNjYtNDIuNjMtMjUzLjk4LTcuNC0yLjctMTUuMTMtNC0yMy4wOS00LTU4LjAyLjAxLTEyOC4yNyA2OS4xNy0xNzIuNzYgMTcxLjE1ek01MjEuNDggNjAuNWM2LjIyIDE2LjMgMTAuODMgMzQuNiAxMy4yIDU1LjE5IDUuNzQgNDkuODktMS40MiAxMDguMjMtMTguOTUgMTY2Ljk4bDEwMi42MiAzNy4zNmMxMC4wOSAzLjY3IDIxLjMxLTMuNDMgMjEuNTctMTQuMTcgMi4zMi05NS42OS00MS45MS0xODcuNDQtMTE4LjQ0LTI0NS4zNnpNNTYwIDQ0Ny45OEgzMjEuMDZMMzg2IDI2OS41bC02MC4xNC0yMS45LTcyLjkgMjAwLjM3SDE2Yy04Ljg0IDAtMTYgNy4xNi0xNiAxNi4wMXYzMi4wMUMwIDUwNC44MyA3LjE2IDUxMiAxNiA1MTJoNTQ0YzguODQgMCAxNi03LjE3IDE2LTE2LjAxdi0zMi4wMWMwLTguODQtNy4xNi0xNi0xNi0xNnpcIl0sdW5kZXJsaW5lOls0NDgsNTEyLFtdLFwiZjBjZFwiLFwiTTIyNC4yNjQgMzg4LjI0Yy05MS42NjkgMC0xNTYuNjAzLTUxLjE2NS0xNTYuNjAzLTE1MS4zOTJWNjRIMzkuMzdjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZWMTZjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgxMzcuMzljOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2aC0yOC44MTN2MTcyLjg0OGMwIDUzLjY5OSAyOC4zMTQgNzkuNDQ0IDc2LjMxNyA3OS40NDQgNDYuOTY2IDAgNzUuNzk2LTI1LjQzNCA3NS43OTYtNzkuOTY1VjY0aC0yOC4yOTFjLTguODM3IDAtMTYtNy4xNjMtMTYtMTZWMTZjMC04LjgzNyA3LjE2My0xNiAxNi0xNmgxMzYuODY4YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNmgtMjguMjkxdjE3Mi44NDhjMCA5OS40MDUtNjQuODgxIDE1MS4zOTItMTU2LjA4MiAxNTEuMzkyek0xNiA0NDhoNDE2YzguODM3IDAgMTYgNy4xNjMgMTYgMTZ2MzJjMCA4LjgzNy03LjE2MyAxNi0xNiAxNkgxNmMtOC44MzcgMC0xNi03LjE2My0xNi0xNnYtMzJjMC04LjgzNyA3LjE2My0xNiAxNi0xNnpcIl0sdW5kbzpbNTEyLDUxMixbXSxcImYwZTJcIixcIk0yMTIuMzMzIDIyNC4zMzNIMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJWMTJDMCA1LjM3MyA1LjM3MyAwIDEyIDBoNDhjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnY3OC4xMTJDMTE3Ljc3MyAzOS4yNzkgMTg0LjI2IDcuNDcgMjU4LjE3NSA4LjAwN2MxMzYuOTA2Ljk5NCAyNDYuNDQ4IDExMS42MjMgMjQ2LjE1NyAyNDguNTMyQzUwNC4wNDEgMzkzLjI1OCAzOTMuMTIgNTA0IDI1Ni4zMzMgNTA0Yy02NC4wODkgMC0xMjIuNDk2LTI0LjMxMy0xNjYuNTEtNjQuMjE1LTUuMDk5LTQuNjIyLTUuMzM0LTEyLjU1NC0uNDY3LTE3LjQybDMzLjk2Ny0zMy45NjdjNC40NzQtNC40NzQgMTEuNjYyLTQuNzE3IDE2LjQwMS0uNTI1QzE3MC43NiA0MTUuMzM2IDIxMS41OCA0MzIgMjU2LjMzMyA0MzJjOTcuMjY4IDAgMTc2LTc4LjcxNiAxNzYtMTc2IDAtOTcuMjY3LTc4LjcxNi0xNzYtMTc2LTE3Ni01OC40OTYgMC0xMTAuMjggMjguNDc2LTE0Mi4yNzQgNzIuMzMzaDk4LjI3NGM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjQ4YzAgNi42MjctNS4zNzMgMTItMTIgMTJ6XCJdLFwidW5kby1hbHRcIjpbNTEyLDUxMixbXSxcImYyZWFcIixcIk0yNTUuNTQ1IDhjLTY2LjI2OS4xMTktMTI2LjQzOCAyNi4yMzMtMTcwLjg2IDY4LjY4NUw0OC45NzEgNDAuOTcxQzMzLjg1MSAyNS44NTEgOCAzNi41NTkgOCA1Ny45NDFWMTkyYzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgxMzQuMDU5YzIxLjM4MiAwIDMyLjA5LTI1Ljg1MSAxNi45NzEtNDAuOTcxbC00MS43NS00MS43NWMzMC44NjQtMjguODk5IDcwLjgwMS00NC45MDcgMTEzLjIzLTQ1LjI3MyA5Mi4zOTgtLjc5OCAxNzAuMjgzIDczLjk3NyAxNjkuNDg0IDE2OS40NDJDNDIzLjIzNiAzNDguMDA5IDM0OS44MTYgNDI0IDI1NiA0MjRjLTQxLjEyNyAwLTc5Ljk5Ny0xNC42NzgtMTEwLjYzLTQxLjU1Ni00Ljc0My00LjE2MS0xMS45MDYtMy45MDgtMTYuMzY4LjU1M0w4OS4zNCA0MjIuNjU5Yy00Ljg3MiA0Ljg3Mi00LjYzMSAxMi44MTUuNDgyIDE3LjQzM0MxMzMuNzk4IDQ3OS44MTMgMTkyLjA3NCA1MDQgMjU2IDUwNGMxMzYuOTY2IDAgMjQ3Ljk5OS0xMTEuMDMzIDI0OC0yNDcuOTk4QzUwNC4wMDEgMTE5LjE5MyAzOTIuMzU0IDcuNzU1IDI1NS41NDUgOHpcIl0sXCJ1bml2ZXJzYWwtYWNjZXNzXCI6WzUxMiw1MTIsW10sXCJmMjlhXCIsXCJNMjU2IDQ4YzExNC45NTMgMCAyMDggOTMuMDI5IDIwOCAyMDggMCAxMTQuOTUzLTkzLjAyOSAyMDgtMjA4IDIwOC0xMTQuOTUzIDAtMjA4LTkzLjAyOS0yMDgtMjA4IDAtMTE0Ljk1MyA5My4wMjktMjA4IDIwOC0yMDhtMC00MEMxMTkuMDMzIDggOCAxMTkuMDMzIDggMjU2czExMS4wMzMgMjQ4IDI0OCAyNDggMjQ4LTExMS4wMzMgMjQ4LTI0OFMzOTIuOTY3IDggMjU2IDh6bTAgNTZDMTQ5Ljk2MSA2NCA2NCAxNDkuOTYxIDY0IDI1NnM4NS45NjEgMTkyIDE5MiAxOTIgMTkyLTg1Ljk2MSAxOTItMTkyUzM2Mi4wMzkgNjQgMjU2IDY0em0wIDQ0YzE5Ljg4MiAwIDM2IDE2LjExOCAzNiAzNnMtMTYuMTE4IDM2LTM2IDM2LTM2LTE2LjExOC0zNi0zNiAxNi4xMTgtMzYgMzYtMzZ6bTExNy43NDEgOTguMDIzYy0yOC43MTIgNi43NzktNTUuNTExIDEyLjc0OC04Mi4xNCAxNS44MDcuODUxIDEwMS4wMjMgMTIuMzA2IDEyMy4wNTIgMjUuMDM3IDE1NS42MjEgMy42MTcgOS4yNi0uOTU3IDE5LjY5OC0xMC4yMTcgMjMuMzE1LTkuMjYxIDMuNjE3LTE5LjY5OS0uOTU3LTIzLjMxNi0xMC4yMTctOC43MDUtMjIuMzA4LTE3LjA4Ni00MC42MzYtMjIuMjYxLTc4LjU0OWgtOS42ODZjLTUuMTY3IDM3Ljg1MS0xMy41MzQgNTYuMjA4LTIyLjI2MiA3OC41NDktMy42MTUgOS4yNTUtMTQuMDUgMTMuODM2LTIzLjMxNSAxMC4yMTctOS4yNi0zLjYxNy0xMy44MzQtMTQuMDU2LTEwLjIxNy0yMy4zMTUgMTIuNzEzLTMyLjU0MSAyNC4xODUtNTQuNTQxIDI1LjAzNy0xNTUuNjIxLTI2LjYyOS0zLjA1OC01My40MjgtOS4wMjctODIuMTQxLTE1LjgwNy04LjYtMi4wMzEtMTMuOTI2LTEwLjY0OC0xMS44OTUtMTkuMjQ5czEwLjY0Ny0xMy45MjYgMTkuMjQ5LTExLjg5NWM5Ni42ODYgMjIuODI5IDEyNC4yODMgMjIuNzgzIDIyMC43NzUgMCA4LjU5OS0yLjAzIDE3LjIxOCAzLjI5NCAxOS4yNDkgMTEuODk1IDIuMDI5IDguNjAxLTMuMjk3IDE3LjIxOS0xMS44OTcgMTkuMjQ5elwiXSx1bml2ZXJzaXR5Ols1MTIsNTEyLFtdLFwiZjE5Y1wiLFwiTTQ5NiAxMjh2MTZhOCA4IDAgMCAxLTggOGgtMjR2MTJjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg2MGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMTJIMjRhOCA4IDAgMCAxLTgtOHYtMTZhOCA4IDAgMCAxIDQuOTQxLTcuMzkybDIzMi04OGE3Ljk5NiA3Ljk5NiAwIDAgMSA2LjExOCAwbDIzMiA4OEE4IDggMCAwIDEgNDk2IDEyOHptLTI0IDMwNEg0MGMtMTMuMjU1IDAtMjQgMTAuNzQ1LTI0IDI0djE2YTggOCAwIDAgMCA4IDhoNDY0YTggOCAwIDAgMCA4LTh2LTE2YzAtMTMuMjU1LTEwLjc0NS0yNC0yNC0yNHpNOTYgMTkydjE5Mkg2MGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyMGg0MTZ2LTIwYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTM2VjE5MmgtNjR2MTkyaC02NFYxOTJoLTY0djE5MmgtNjRWMTkySDk2elwiXSx1bmxpbms6WzUxMiw1MTIsW10sXCJmMTI3XCIsXCJNMzA0LjA4MyA0MDUuOTA3YzQuNjg2IDQuNjg2IDQuNjg2IDEyLjI4NCAwIDE2Ljk3MWwtNDQuNjc0IDQ0LjY3NGMtNTkuMjYzIDU5LjI2Mi0xNTUuNjkzIDU5LjI2Ni0yMTQuOTYxIDAtNTkuMjY0LTU5LjI2NS01OS4yNjQtMTU1LjY5NiAwLTIxNC45Nmw0NC42NzUtNDQuNjc1YzQuNjg2LTQuNjg2IDEyLjI4NC00LjY4NiAxNi45NzEgMGwzOS41OTggMzkuNTk4YzQuNjg2IDQuNjg2IDQuNjg2IDEyLjI4NCAwIDE2Ljk3MWwtNDQuNjc1IDQ0LjY3NGMtMjguMDcyIDI4LjA3My0yOC4wNzIgNzMuNzUgMCAxMDEuODIzIDI4LjA3MiAyOC4wNzIgNzMuNzUgMjguMDczIDEwMS44MjQgMGw0NC42NzQtNDQuNjc0YzQuNjg2LTQuNjg2IDEyLjI4NC00LjY4NiAxNi45NzEgMGwzOS41OTcgMzkuNTk4em0tNTYuNTY4LTI2MC4yMTZjNC42ODYgNC42ODYgMTIuMjg0IDQuNjg2IDE2Ljk3MSAwbDQ0LjY3NC00NC42NzRjMjguMDcyLTI4LjA3NSA3My43NS0yOC4wNzMgMTAxLjgyNCAwIDI4LjA3MiAyOC4wNzMgMjguMDcyIDczLjc1IDAgMTAxLjgyM2wtNDQuNjc1IDQ0LjY3NGMtNC42ODYgNC42ODYtNC42ODYgMTIuMjg0IDAgMTYuOTcxbDM5LjU5OCAzOS41OThjNC42ODYgNC42ODYgMTIuMjg0IDQuNjg2IDE2Ljk3MSAwbDQ0LjY3NS00NC42NzVjNTkuMjY1LTU5LjI2NSA1OS4yNjUtMTU1LjY5NSAwLTIxNC45Ni01OS4yNjYtNTkuMjY0LTE1NS42OTUtNTkuMjY0LTIxNC45NjEgMGwtNDQuNjc0IDQ0LjY3NGMtNC42ODYgNC42ODYtNC42ODYgMTIuMjg0IDAgMTYuOTcxbDM5LjU5NyAzOS41OTh6bTIzNC44MjggMzU5LjI4bDIyLjYyNy0yMi42MjdjOS4zNzMtOS4zNzMgOS4zNzMtMjQuNTY5IDAtMzMuOTQxTDYzLjU5OCA3LjAyOWMtOS4zNzMtOS4zNzMtMjQuNTY5LTkuMzczLTMzLjk0MSAwTDcuMDI5IDI5LjY1N2MtOS4zNzMgOS4zNzMtOS4zNzMgMjQuNTY5IDAgMzMuOTQxbDQ0MS4zNzMgNDQxLjM3M2M5LjM3MyA5LjM3MiAyNC41NjkgOS4zNzIgMzMuOTQxIDB6XCJdLHVubG9jazpbNDQ4LDUxMixbXSxcImYwOWNcIixcIk00MDAgMjU2SDE1MlYxNTIuOWMwLTM5LjYgMzEuNy03Mi41IDcxLjMtNzIuOSA0MC0uNCA3Mi43IDMyLjEgNzIuNyA3MnYxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHYtMTZDMzc2IDY4IDMwNy41LS4zIDIyMy41IDAgMTM5LjUuMyA3MiA2OS41IDcyIDE1My41VjI1Nkg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MTYwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYzMDRjMC0yNi41LTIxLjUtNDgtNDgtNDh6XCJdLFwidW5sb2NrLWFsdFwiOls0NDgsNTEyLFtdLFwiZjEzZVwiLFwiTTQwMCAyNTZIMTUyVjE1Mi45YzAtMzkuNiAzMS43LTcyLjUgNzEuMy03Mi45IDQwLS40IDcyLjcgMzIuMSA3Mi43IDcydjE2YzAgMTMuMyAxMC43IDI0IDI0IDI0aDMyYzEzLjMgMCAyNC0xMC43IDI0LTI0di0xNkMzNzYgNjggMzA3LjUtLjMgMjIzLjUgMCAxMzkuNS4zIDcyIDY5LjUgNzIgMTUzLjVWMjU2SDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHYxNjBjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjMwNGMwLTI2LjUtMjEuNS00OC00OC00OHpNMjY0IDQwOGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MHYtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MHY0OHpcIl0sdXBsb2FkOls1MTIsNTEyLFtdLFwiZjA5M1wiLFwiTTI5NiAzODRoLTgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxOTJoLTg3LjdjLTE3LjggMC0yNi43LTIxLjUtMTQuMS0zNC4xTDI0Mi4zIDUuN2M3LjUtNy41IDE5LjgtNy41IDI3LjMgMGwxNTIuMiAxNTIuMmMxMi42IDEyLjYgMy43IDM0LjEtMTQuMSAzNC4xSDMyMHYxNjhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6bTIxNi04djExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDEzNnY4YzAgMzAuOSAyNS4xIDU2IDU2IDU2aDgwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2di04aDEzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHptLTEyNCA4OGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjAgOSAyMCAyMCAyMCAyMC05IDIwLTIwem02NCAwYzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMCA5IDIwIDIwIDIwIDIwLTkgMjAtMjB6XCJdLHVzZXI6WzQ0OCw1MTIsW10sXCJmMDA3XCIsXCJNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bTg5LjYgMzJoLTE2LjdjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZoLTE2LjdDNjAuMiAyODggMCAzNDguMiAwIDQyMi40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDh2LTQxLjZjMC03NC4yLTYwLjItMTM0LjQtMTM0LjQtMTM0LjR6XCJdLFwidXNlci1hbHRcIjpbNTEyLDUxMixbXSxcImY0MDZcIixcIk0yNTYgMjg4Yzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0UzMzNS41IDAgMjU2IDAgMTEyIDY0LjUgMTEyIDE0NHM2NC41IDE0NCAxNDQgMTQ0em0xMjggMzJoLTU1LjFjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZIMTI4QzU3LjMgMzIwIDAgMzc3LjMgMCA0NDh2MTZjMCAyNi41IDIxLjUgNDggNDggNDhoNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4di0xNmMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOHpcIl0sXCJ1c2VyLWFsdC1zbGFzaFwiOls2NDAsNTEyLFtdLFwiZjRmYVwiLFwiTTYzMy44IDQ1OC4xTDM4OS42IDI2OS4zQzQzMy44IDI0NC43IDQ2NCAxOTguMSA0NjQgMTQ0IDQ2NCA2NC41IDM5OS41IDAgMzIwIDBjLTY3LjEgMC0xMjMgNDYuMS0xMzkgMTA4LjJMNDUuNSAzLjRDMzguNS0yIDI4LjUtLjggMjMgNi4yTDMuNCAzMS40Yy01LjQgNy00LjIgMTcgMi44IDIyLjRsNTg4LjQgNDU0LjdjNyA1LjQgMTcgNC4yIDIyLjUtMi44bDE5LjYtMjUuM2M1LjQtNi44IDQuMS0xNi45LTIuOS0yMi4zek0xOTguNCAzMjBDMTI0LjIgMzIwIDY0IDM4MC4yIDY0IDQ1NC40djkuNmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzODIuMkwyNDUuOCAzMjBoLTQ3LjR6XCJdLFwidXNlci1hc3Ryb25hdXRcIjpbNDQ4LDUxMixbXSxcImY0ZmJcIixcIk02NCAyMjRoMTMuNWMyNC43IDU2LjUgODAuOSA5NiAxNDYuNSA5NnMxMjEuOC0zOS41IDE0Ni41LTk2SDM4NGM4LjggMCAxNi03LjIgMTYtMTZ2LTk2YzAtOC44LTcuMi0xNi0xNi0xNmgtMTMuNUMzNDUuOCAzOS41IDI4OS42IDAgMjI0IDBTMTAyLjIgMzkuNSA3Ny41IDk2SDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2em00MC04OGMwLTIyLjEgMjEuNS00MCA0OC00MGgxNDRjMjYuNSAwIDQ4IDE3LjkgNDggNDB2MjRjMCA1My00MyA5Ni05NiA5NmgtNDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTI0em03MiA3MmwxMi0zNiAzNi0xMi0zNi0xMi0xMi0zNi0xMiAzNi0zNiAxMiAzNiAxMiAxMiAzNnptMTUxLjYgMTEzLjRDMjk3LjcgMzQwLjcgMjYyLjIgMzUyIDIyNCAzNTJzLTczLjctMTEuMy0xMDMuNi0zMC42QzUyLjkgMzI4LjUgMCAzODUgMCA0NTQuNHY5LjZjMCAyNi41IDIxLjUgNDggNDggNDhoODB2LTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGg4MGMyNi41IDAgNDgtMjEuNSA0OC00OHYtOS42YzAtNjkuNC01Mi45LTEyNS45LTEyMC40LTEzM3pNMjcyIDQ0OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNiAxNi03LjIgMTYtMTYtNy4yLTE2LTE2LTE2em0tOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2djQ4aDMydi00OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdLFwidXNlci1jaGVja1wiOls2NDAsNTEyLFtdLFwiZjRmY1wiLFwiTTIyNCAyNTZjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTMjk0LjcgMCAyMjQgMCA5NiA1Ny4zIDk2IDEyOHM1Ny4zIDEyOCAxMjggMTI4em04OS42IDMyaC0xNi43Yy0yMi4yIDEwLjItNDYuOSAxNi03Mi45IDE2cy01MC42LTUuOC03Mi45LTE2aC0xNi43QzYwLjIgMjg4IDAgMzQ4LjIgMCA0MjIuNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di00MS42YzAtNzQuMi02MC4yLTEzNC40LTEzNC40LTEzNC40em0zMjMtMTI4LjRsLTI3LjgtMjguMWMtNC42LTQuNy0xMi4xLTQuNy0xNi44LS4xbC0xMDQuOCAxMDQtNDUuNS00NS44Yy00LjYtNC43LTEyLjEtNC43LTE2LjgtLjFsLTI4LjEgMjcuOWMtNC43IDQuNi00LjcgMTIuMS0uMSAxNi44bDgxLjcgODIuM2M0LjYgNC43IDEyLjEgNC43IDE2LjguMWwxNDEuMy0xNDAuMmM0LjYtNC43IDQuNy0xMi4yLjEtMTYuOHpcIl0sXCJ1c2VyLWNpcmNsZVwiOls0OTYsNTEyLFtdLFwiZjJiZFwiLFwiTTI0OCA4QzExMSA4IDAgMTE5IDAgMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzg1IDggMjQ4IDh6bTAgOTZjNDguNiAwIDg4IDM5LjQgODggODhzLTM5LjQgODgtODggODgtODgtMzkuNC04OC04OCAzOS40LTg4IDg4LTg4em0wIDM0NGMtNTguNyAwLTExMS4zLTI2LjYtMTQ2LjUtNjguMiAxOC44LTM1LjQgNTUuNi01OS44IDk4LjUtNTkuOCAyLjQgMCA0LjguNCA3LjEgMS4xIDEzIDQuMiAyNi42IDYuOSA0MC45IDYuOSAxNC4zIDAgMjgtMi43IDQwLjktNi45IDIuMy0uNyA0LjctMS4xIDcuMS0xLjEgNDIuOSAwIDc5LjcgMjQuNCA5OC41IDU5LjhDMzU5LjMgNDIxLjQgMzA2LjcgNDQ4IDI0OCA0NDh6XCJdLFwidXNlci1jbG9ja1wiOls2NDAsNTEyLFtdLFwiZjRmZFwiLFwiTTQ5NiAyMjRjLTc5LjYgMC0xNDQgNjQuNC0xNDQgMTQ0czY0LjQgMTQ0IDE0NCAxNDQgMTQ0LTY0LjQgMTQ0LTE0NC02NC40LTE0NC0xNDQtMTQ0em02NCAxNTAuM2MwIDUuMy00LjQgOS43LTkuNyA5LjdoLTYwLjZjLTUuMyAwLTkuNy00LjQtOS43LTkuN3YtNzYuNmMwLTUuMyA0LjQtOS43IDkuNy05LjdoMTIuNmM1LjMgMCA5LjcgNC40IDkuNyA5LjdWMzUyaDM4LjNjNS4zIDAgOS43IDQuNCA5LjcgOS43djEyLjZ6TTMyMCAzNjhjMC0yNy44IDYuNy01NC4xIDE4LjItNzcuNS04LTEuNS0xNi4yLTIuNS0yNC42LTIuNWgtMTYuN2MtMjIuMiAxMC4yLTQ2LjkgMTYtNzIuOSAxNnMtNTAuNi01LjgtNzIuOS0xNmgtMTYuN0M2MC4yIDI4OCAwIDM0OC4yIDAgNDIyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM0Ny4xYy00NS4zLTMxLjktNzUuMS04NC41LTc1LjEtMTQ0em0tOTYtMTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzI5NC43IDAgMjI0IDAgOTYgNTcuMyA5NiAxMjhzNTcuMyAxMjggMTI4IDEyOHpcIl0sXCJ1c2VyLWNvZ1wiOls2NDAsNTEyLFtdLFwiZjRmZVwiLFwiTTYxMC41IDM3My4zYzIuNi0xNC4xIDIuNi0yOC41IDAtNDIuNmwyNS44LTE0LjljMy0xLjcgNC4zLTUuMiAzLjMtOC41LTYuNy0yMS42LTE4LjItNDEuMi0zMy4yLTU3LjQtMi4zLTIuNS02LTMuMS05LTEuNGwtMjUuOCAxNC45Yy0xMC45LTkuMy0yMy40LTE2LjUtMzYuOS0yMS4zdi0yOS44YzAtMy40LTIuNC02LjQtNS43LTcuMS0yMi4zLTUtNDUtNC44LTY2LjIgMC0zLjMuNy01LjcgMy43LTUuNyA3LjF2MjkuOGMtMTMuNSA0LjgtMjYgMTItMzYuOSAyMS4zbC0yNS44LTE0LjljLTIuOS0xLjctNi43LTEuMS05IDEuNC0xNSAxNi4yLTI2LjUgMzUuOC0zMy4yIDU3LjQtMSAzLjMuNCA2LjggMy4zIDguNWwyNS44IDE0LjljLTIuNiAxNC4xLTIuNiAyOC41IDAgNDIuNmwtMjUuOCAxNC45Yy0zIDEuNy00LjMgNS4yLTMuMyA4LjUgNi43IDIxLjYgMTguMiA0MS4xIDMzLjIgNTcuNCAyLjMgMi41IDYgMy4xIDkgMS40bDI1LjgtMTQuOWMxMC45IDkuMyAyMy40IDE2LjUgMzYuOSAyMS4zdjI5LjhjMCAzLjQgMi40IDYuNCA1LjcgNy4xIDIyLjMgNSA0NSA0LjggNjYuMiAwIDMuMy0uNyA1LjctMy43IDUuNy03LjF2LTI5LjhjMTMuNS00LjggMjYtMTIgMzYuOS0yMS4zbDI1LjggMTQuOWMyLjkgMS43IDYuNyAxLjEgOS0xLjQgMTUtMTYuMiAyNi41LTM1LjggMzMuMi01Ny40IDEtMy4zLS40LTYuOC0zLjMtOC41bC0yNS44LTE0Ljl6TTQ5NiA0MDAuNWMtMjYuOCAwLTQ4LjUtMjEuOC00OC41LTQ4LjVzMjEuOC00OC41IDQ4LjUtNDguNSA0OC41IDIxLjggNDguNSA0OC41LTIxLjcgNDguNS00OC41IDQ4LjV6TTIyNCAyNTZjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTMjk0LjcgMCAyMjQgMCA5NiA1Ny4zIDk2IDEyOHM1Ny4zIDEyOCAxMjggMTI4em0yMDEuMiAyMjYuNWMtMi4zLTEuMi00LjYtMi42LTYuOC0zLjlsLTcuOSA0LjZjLTYgMy40LTEyLjggNS4zLTE5LjYgNS4zLTEwLjkgMC0yMS40LTQuNi0yOC45LTEyLjYtMTguMy0xOS44LTMyLjMtNDMuOS00MC4yLTY5LjYtNS41LTE3LjcgMS45LTM2LjQgMTcuOS00NS43bDcuOS00LjZjLS4xLTIuNi0uMS01LjIgMC03LjhsLTcuOS00LjZjLTE2LTkuMi0yMy40LTI4LTE3LjktNDUuNy45LTIuOSAyLjItNS44IDMuMi04LjctMy44LS4zLTcuNS0xLjItMTEuNC0xLjJoLTE2LjdjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZoLTE2LjdDNjAuMiAyODggMCAzNDguMiAwIDQyMi40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMTAuMSAwIDE5LjUtMy4yIDI3LjItOC41LTEuMi0zLjgtMi03LjctMi0xMS44di05LjJ6XCJdLFwidXNlci1lZGl0XCI6WzY0MCw1MTIsW10sXCJmNGZmXCIsXCJNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bTg5LjYgMzJoLTE2LjdjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZoLTE2LjdDNjAuMiAyODggMCAzNDguMiAwIDQyMi40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgyNzQuOWMtMi40LTYuOC0zLjQtMTQtMi42LTIxLjNsNi44LTYwLjkgMS4yLTExLjEgNy45LTcuOSA3Ny4zLTc3LjNjLTI0LjUtMjcuNy02MC00NS41LTk5LjktNDUuNXptNDUuMyAxNDUuM2wtNi44IDYxYy0xLjEgMTAuMiA3LjUgMTguOCAxNy42IDE3LjZsNjAuOS02LjggMTM3LjktMTM3LjktNzEuNy03MS43LTEzNy45IDEzNy44ek02MzMgMjY4LjlMNTk1LjEgMjMxYy05LjMtOS4zLTI0LjUtOS4zLTMzLjggMGwtMzcuOCAzNy44LTQuMSA0LjEgNzEuOCA3MS43IDQxLjgtNDEuOGM5LjMtOS40IDkuMy0yNC41IDAtMzMuOXpcIl0sXCJ1c2VyLWZyaWVuZHNcIjpbNjQwLDUxMixbXSxcImY1MDBcIixcIk0xOTIgMjU2YzYxLjkgMCAxMTItNTAuMSAxMTItMTEyUzI1My45IDMyIDE5MiAzMiA4MCA4Mi4xIDgwIDE0NHM1MC4xIDExMiAxMTIgMTEyem03Ni44IDMyaC04LjNjLTIwLjggMTAtNDMuOSAxNi02OC41IDE2cy00Ny42LTYtNjguNS0xNmgtOC4zQzUxLjYgMjg4IDAgMzM5LjYgMCA0MDMuMlY0MzJjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4di0yOC44YzAtNjMuNi01MS42LTExNS4yLTExNS4yLTExNS4yek00ODAgMjU2YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2LTk2IDQzLTk2IDk2IDQzIDk2IDk2IDk2em00OCAzMmgtMy44Yy0xMy45IDQuOC0yOC42IDgtNDQuMiA4cy0zMC4zLTMuMi00NC4yLThINDMyYy0yMC40IDAtMzkuMiA1LjktNTUuNyAxNS40IDI0LjQgMjYuMyAzOS43IDYxLjIgMzkuNyA5OS44djM4LjRjMCAyLjItLjUgNC4zLS42IDYuNEg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6XCJdLFwidXNlci1ncmFkdWF0ZVwiOls0NDgsNTEyLFtdLFwiZjUwMVwiLFwiTTMxOS40IDMyMC42TDIyNCA0MTZsLTk1LjQtOTUuNEM1Ny4xIDMyMy43IDAgMzgyLjIgMCA0NTQuNHY5LjZjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di05LjZjMC03Mi4yLTU3LjEtMTMwLjctMTI4LjYtMTMzLjh6TTEzLjYgNzkuOGw2LjQgMS41djU4LjRjLTcgNC4yLTEyIDExLjUtMTIgMjAuMyAwIDguNCA0LjYgMTUuNCAxMS4xIDE5LjdMMy41IDI0MmMtMS43IDYuOSAyLjEgMTQgNy42IDE0aDQxLjhjNS41IDAgOS4zLTcuMSA3LjYtMTRsLTE1LjYtNjIuM0M1MS40IDE3NS40IDU2IDE2OC40IDU2IDE2MGMwLTguOC01LTE2LjEtMTItMjAuM1Y4Ny4xbDY2IDE1LjljLTguNiAxNy4yLTE0IDM2LjQtMTQgNTcgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOGMwLTIwLjYtNS4zLTM5LjgtMTQtNTdsOTYuMy0yMy4yYzE4LjItNC40IDE4LjItMjcuMSAwLTMxLjVsLTE5MC40LTQ2Yy0xMy0zLjEtMjYuNy0zLjEtMzkuNyAwTDEzLjYgNDguMmMtMTguMSA0LjQtMTguMSAyNy4yIDAgMzEuNnpcIl0sXCJ1c2VyLWxvY2tcIjpbNjQwLDUxMixbXSxcImY1MDJcIixcIk0zMjAgMzIwYzAtMTEuMSAzLjEtMjEuNCA4LjEtMzAuNS00LjgtLjUtOS41LTEuNS0xNC41LTEuNWgtMTYuN2MtMjIuMiAxMC4yLTQ2LjkgMTYtNzIuOSAxNnMtNTAuNi01LjgtNzIuOS0xNmgtMTYuN0M2MC4yIDI4OCAwIDM0OC4yIDAgNDIyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDI4MC45Yy01LjUtOS41LTguOS0yMC4zLTguOS0zMlYzMjB6bS05Ni02NGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bTM4NCAzMmgtMzJ2LTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwdjQ4aC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAwaC02NHYtNDhjMC0xNy42IDE0LjQtMzIgMzItMzJzMzIgMTQuNCAzMiAzMnY0OHpcIl0sXCJ1c2VyLW1kXCI6WzQ0OCw1MTIsW10sXCJmMGYwXCIsXCJNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6TTEwNCA0MjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNC0xMC43LTI0LTI0LTI0LTI0IDEwLjctMjQgMjR6bTIxNi0xMzUuNHY0OWMzNi41IDcuNCA2NCAzOS44IDY0IDc4LjR2NDEuN2MwIDcuNi01LjQgMTQuMi0xMi45IDE1LjdsLTMyLjIgNi40Yy00LjMuOS04LjUtMS45LTkuNC02LjNsLTMuMS0xNS43Yy0uOS00LjMgMS45LTguNiA2LjMtOS40bDE5LjMtMy45VjQxNmMwLTYyLjgtOTYtNjUuMS05NiAxLjl2MjYuN2wxOS4zIDMuOWM0LjMuOSA3LjEgNS4xIDYuMyA5LjRsLTMuMSAxNS43Yy0uOSA0LjMtNS4xIDcuMS05LjQgNi4zbC0zMS4yLTQuMmMtNy45LTEuMS0xMy44LTcuOC0xMy44LTE1LjlWNDE2YzAtMzguNiAyNy41LTcwLjkgNjQtNzguNHYtNDUuMmMtMi4yLjctNC40IDEuMS02LjYgMS45LTE4IDYuMy0zNy4zIDkuOC01Ny40IDkuOHMtMzkuNC0zLjUtNTcuNC05LjhjLTcuNC0yLjYtMTQuOS00LjItMjIuNi01LjJ2ODEuNmMyMy4xIDYuOSA0MCAyOC4xIDQwIDUzLjQgMCAzMC45LTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTZjMC0yNS4zIDE2LjktNDYuNSA0MC01My40di04MC40QzQ4LjUgMzAxIDAgMzU1LjggMCA0MjIuNHY0NC44QzAgNDkxLjkgMjAuMSA1MTIgNDQuOCA1MTJoMzU4LjRjMjQuNyAwIDQ0LjgtMjAuMSA0NC44LTQ0Ljh2LTQ0LjhjMC03Mi01Ni44LTEzMC4zLTEyOC0xMzMuOHpcIl0sXCJ1c2VyLW1pbnVzXCI6WzY0MCw1MTIsW10sXCJmNTAzXCIsXCJNNjI0IDIwOEg0MzJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMTkyYzguOCAwIDE2LTcuMiAxNi0xNnYtMzJjMC04LjgtNy4yLTE2LTE2LTE2em0tNDAwIDQ4YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzI5NC43IDAgMjI0IDAgOTYgNTcuMyA5NiAxMjhzNTcuMyAxMjggMTI4IDEyOHptODkuNiAzMmgtMTYuN2MtMjIuMiAxMC4yLTQ2LjkgMTYtNzIuOSAxNnMtNTAuNi01LjgtNzIuOS0xNmgtMTYuN0M2MC4yIDI4OCAwIDM0OC4yIDAgNDIyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OHYtNDEuNmMwLTc0LjItNjAuMi0xMzQuNC0xMzQuNC0xMzQuNHpcIl0sXCJ1c2VyLW5pbmphXCI6WzQ0OCw1MTIsW10sXCJmNTA0XCIsXCJNMzI1LjQgMjg5LjJMMjI0IDM5MC42IDEyMi42IDI4OS4yQzU0IDI5NS4zIDAgMzUyLjIgMCA0MjIuNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di00MS42YzAtNzAuMi01NC0xMjcuMS0xMjIuNi0xMzMuMnpNMzIgMTkyYzI3LjMgMCA1MS44LTExLjUgNjkuMi0yOS43IDE1LjEgNTMuOSA2NCA5My43IDEyMi44IDkzLjcgNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTMjk0LjcgMCAyMjQgMGMtNTAuNCAwLTkzLjYgMjkuNC0xMTQuNSA3MS44QzkyLjEgNDcuOCA2NCAzMiAzMiAzMmMwIDMzLjQgMTcuMSA2Mi44IDQzLjEgODAtMjYgMTcuMi00My4xIDQ2LjYtNDMuMSA4MHptMTQ0LTk2aDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMySDE0NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl0sXCJ1c2VyLXBsdXNcIjpbNjQwLDUxMixbXSxcImYyMzRcIixcIk02MjQgMjA4aC02NHYtNjRjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djY0aC02NGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg2NHY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2di02NGg2NGM4LjggMCAxNi03LjIgMTYtMTZ2LTMyYzAtOC44LTcuMi0xNi0xNi0xNnptLTQwMCA0OGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bTg5LjYgMzJoLTE2LjdjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZoLTE2LjdDNjAuMiAyODggMCAzNDguMiAwIDQyMi40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDh2LTQxLjZjMC03NC4yLTYwLjItMTM0LjQtMTM0LjQtMTM0LjR6XCJdLFwidXNlci1zZWNyZXRcIjpbNDQ4LDUxMixbXSxcImYyMWJcIixcIk0zODMuOSAzMDguM2wyMy45LTYyLjZjNC0xMC41LTMuNy0yMS43LTE1LTIxLjdoLTU4LjVjMTEtMTguOSAxNy44LTQwLjYgMTcuOC02NHYtLjNjMzkuMi03LjggNjQtMTkuMSA2NC0zMS43IDAtMTMuMy0yNy4zLTI1LjEtNzAuMS0zMy05LjItMzIuOC0yNy02NS44LTQwLjYtODIuOC05LjUtMTEuOS0yNS45LTE1LjYtMzkuNS04LjhsLTI3LjYgMTMuOGMtOSA0LjUtMTkuNiA0LjUtMjguNiAwTDE4Mi4xIDMuNGMtMTMuNi02LjgtMzAtMy4xLTM5LjUgOC44LTEzLjUgMTctMzEuNCA1MC00MC42IDgyLjgtNDIuNyA3LjktNzAgMTkuNy03MCAzMyAwIDEyLjYgMjQuOCAyMy45IDY0IDMxLjd2LjNjMCAyMy40IDYuOCA0NS4xIDE3LjggNjRINTYuM2MtMTEuNSAwLTE5LjIgMTEuNy0xNC43IDIyLjNsMjUuOCA2MC4yQzI3LjMgMzI5LjggMCAzNzIuNyAwIDQyMi40djQ0LjhDMCA0OTEuOSAyMC4xIDUxMiA0NC44IDUxMmgzNTguNGMyNC43IDAgNDQuOC0yMC4xIDQ0LjgtNDQuOHYtNDQuOGMwLTQ4LjQtMjUuOC05MC40LTY0LjEtMTE0LjF6TTE3NiA0ODBsLTQxLjYtMTkyIDQ5LjYgMzIgMjQgNDAtMzIgMTIwem05NiAwbC0zMi0xMjAgMjQtNDAgNDkuNi0zMkwyNzIgNDgwem00MS43LTI5OC41Yy0zLjkgMTEuOS03IDI0LjYtMTYuNSAzMy40LTEwLjEgOS4zLTQ4IDIyLjQtNjQtMjUtMi44LTguNC0xNS40LTguNC0xOC4zIDAtMTcgNTAuMi01NiAzMi40LTY0IDI1LTkuNS04LjgtMTIuNy0yMS41LTE2LjUtMzMuNC0uOC0yLjUtNi4zLTUuNy02LjMtNS44di0xMC44YzI4LjMgMy42IDYxIDUuOCA5NiA1LjhzNjcuNy0yLjEgOTYtNS44djEwLjhjLS4xLjEtNS42IDMuMi02LjQgNS44elwiXSxcInVzZXItc2hpZWxkXCI6WzY0MCw1MTIsW10sXCJmNTA1XCIsXCJNNjIyLjMgMjcxLjFsLTExNS4yLTQ1Yy00LjEtMS42LTEyLjYtMy43LTIyLjIgMGwtMTE1LjIgNDVjLTEwLjcgNC4yLTE3LjcgMTQtMTcuNyAyNC45IDAgMTExLjYgNjguNyAxODguOCAxMzIuOSAyMTMuOSA5LjYgMy43IDE4IDEuNiAyMi4yIDBDNTU4LjQgNDg5LjkgNjQwIDQyMC41IDY0MCAyOTZjMC0xMC45LTctMjAuNy0xNy43LTI0Ljl6TTQ5NiA0NjIuNFYyNzMuM2w5NS41IDM3LjNjLTUuNiA4Ny4xLTYwLjkgMTM1LjQtOTUuNSAxNTEuOHpNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bTk2IDQwYzAtMi41LjgtNC44IDEuMS03LjItMi41LS4xLTQuOS0uOC03LjUtLjhoLTE2LjdjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZoLTE2LjdDNjAuMiAyODggMCAzNDguMiAwIDQyMi40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjNi44IDAgMTMuMy0xLjUgMTkuMi00LTU0LTQyLjktOTkuMi0xMTYuNy05OS4yLTIxMnpcIl0sXCJ1c2VyLXNsYXNoXCI6WzY0MCw1MTIsW10sXCJmNTA2XCIsXCJNNjMzLjggNDU4LjFMMzYyLjMgMjQ4LjNDNDEyLjEgMjMwLjcgNDQ4IDE4My44IDQ0OCAxMjggNDQ4IDU3LjMgMzkwLjcgMCAzMjAgMGMtNjcuMSAwLTEyMS41IDUxLjgtMTI2LjkgMTE3LjRMNDUuNSAzLjRDMzguNS0yIDI4LjUtLjggMjMgNi4yTDMuNCAzMS40Yy01LjQgNy00LjIgMTcgMi44IDIyLjRsNTg4LjQgNDU0LjdjNyA1LjQgMTcgNC4yIDIyLjUtMi44bDE5LjYtMjUuM2M1LjQtNi44IDQuMS0xNi45LTIuOS0yMi4zek05NiA0MjIuNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoMzUwLjJMMjA3LjQgMjkwLjNDMTQ0LjIgMzAxLjMgOTYgMzU2IDk2IDQyMi40elwiXSxcInVzZXItdGFnXCI6WzY0MCw1MTIsW10sXCJmNTA3XCIsXCJNNjMwLjYgMzY0LjlsLTkwLjMtOTAuMmMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2gtNzkuM2MtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NzkuMmMwIDE3IDYuNyAzMy4yIDE4LjcgNDUuMmw5MC4zIDkwLjJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsOTIuNS05Mi41YzEyLjYtMTIuNSAxMi42LTMyLjcuMS00NS4yem0tMTgyLjgtMjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNGMwIDEzLjItMTAuNyAyNC0yNCAyNHptLTIyMy44LTg4YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4QzM1MiA1Ny4zIDI5NC43IDAgMjI0IDBTOTYgNTcuMyA5NiAxMjhjMCA3MC42IDU3LjMgMTI3LjkgMTI4IDEyNy45em0xMjcuOCAxMTEuMlYyOTRjLTEyLjItMy42LTI0LjktNi4yLTM4LjItNi4yaC0xNi43Yy0yMi4yIDEwLjItNDYuOSAxNi03Mi45IDE2cy01MC42LTUuOC03Mi45LTE2aC0xNi43QzYwLjIgMjg3LjkgMCAzNDguMSAwIDQyMi4zdjQxLjZjMCAyNi41IDIxLjUgNDggNDggNDhoMzUyYzE1LjUgMCAyOS4xLTcuNSAzNy45LTE4LjlsLTU4LTU4Yy0xOC4xLTE4LjEtMjguMS00Mi4yLTI4LjEtNjcuOXpcIl0sXCJ1c2VyLXRpZVwiOls0NDgsNTEyLFtdLFwiZjUwOFwiLFwiTTIyNCAyNTZjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTMjk0LjcgMCAyMjQgMCA5NiA1Ny4zIDk2IDEyOHM1Ny4zIDEyOCAxMjggMTI4em05NS44IDMyLjZMMjcyIDQ4MGwtMzItMTM2IDMyLTU2aC05NmwzMiA1Ni0zMiAxMzYtNDcuOC0xOTEuNEM1Ni45IDI5MiAwIDM1MC4zIDAgNDIyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OHYtNDEuNmMwLTcyLjEtNTYuOS0xMzAuNC0xMjguMi0xMzMuOHpcIl0sXCJ1c2VyLXRpbWVzXCI6WzY0MCw1MTIsW10sXCJmMjM1XCIsXCJNNTg5LjYgMjQwbDQ1LjYtNDUuNmM2LjMtNi4zIDYuMy0xNi41IDAtMjIuOGwtMjIuOC0yMi44Yy02LjMtNi4zLTE2LjUtNi4zLTIyLjggMEw1NDQgMTk0LjRsLTQ1LjYtNDUuNmMtNi4zLTYuMy0xNi41LTYuMy0yMi44IDBsLTIyLjggMjIuOGMtNi4zIDYuMy02LjMgMTYuNSAwIDIyLjhsNDUuNiA0NS42LTQ1LjYgNDUuNmMtNi4zIDYuMy02LjMgMTYuNSAwIDIyLjhsMjIuOCAyMi44YzYuMyA2LjMgMTYuNSA2LjMgMjIuOCAwbDQ1LjYtNDUuNiA0NS42IDQ1LjZjNi4zIDYuMyAxNi41IDYuMyAyMi44IDBsMjIuOC0yMi44YzYuMy02LjMgNi4zLTE2LjUgMC0yMi44TDU4OS42IDI0MHpNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwIDk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bTg5LjYgMzJoLTE2LjdjLTIyLjIgMTAuMi00Ni45IDE2LTcyLjkgMTZzLTUwLjYtNS44LTcyLjktMTZoLTE2LjdDNjAuMiAyODggMCAzNDguMiAwIDQyMi40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzNTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDh2LTQxLjZjMC03NC4yLTYwLjItMTM0LjQtMTM0LjQtMTM0LjR6XCJdLHVzZXJzOls2NDAsNTEyLFtdLFwiZjBjMFwiLFwiTTk2IDIyNGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0IDI4LjcgNjQgNjQgNjR6bTQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjQgMjguNyA2NCA2NCA2NHptMzIgMzJoLTY0Yy0xNy42IDAtMzMuNSA3LjEtNDUuMSAxOC42IDQwLjMgMjIuMSA2OC45IDYyIDc1LjEgMTA5LjRoNjZjMTcuNyAwIDMyLTE0LjMgMzItMzJ2LTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0em0tMjU2IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTJTMzgxLjkgMzIgMzIwIDMyIDIwOCA4Mi4xIDIwOCAxNDRzNTAuMSAxMTIgMTEyIDExMnptNzYuOCAzMmgtOC4zYy0yMC44IDEwLTQzLjkgMTYtNjguNSAxNnMtNDcuNi02LTY4LjUtMTZoLTguM0MxNzkuNiAyODggMTI4IDMzOS42IDEyOCA0MDMuMlY0MzJjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4di0yOC44YzAtNjMuNi01MS42LTExNS4yLTExNS4yLTExNS4yem0tMjIzLjctMTMuNEMxNjEuNSAyNjMuMSAxNDUuNiAyNTYgMTI4IDI1Nkg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjUuOWM2LjMtNDcuNCAzNC45LTg3LjMgNzUuMi0xMDkuNHpcIl0sXCJ1c2Vycy1jb2dcIjpbNjQwLDUxMixbXSxcImY1MDlcIixcIk02MTAuNSAzNDEuM2MyLjYtMTQuMSAyLjYtMjguNSAwLTQyLjZsMjUuOC0xNC45YzMtMS43IDQuMy01LjIgMy4zLTguNS02LjctMjEuNi0xOC4yLTQxLjItMzMuMi01Ny40LTIuMy0yLjUtNi0zLjEtOS0xLjRsLTI1LjggMTQuOWMtMTAuOS05LjMtMjMuNC0xNi41LTM2LjktMjEuM3YtMjkuOGMwLTMuNC0yLjQtNi40LTUuNy03LjEtMjIuMy01LTQ1LTQuOC02Ni4yIDAtMy4zLjctNS43IDMuNy01LjcgNy4xdjI5LjhjLTEzLjUgNC44LTI2IDEyLTM2LjkgMjEuM2wtMjUuOC0xNC45Yy0yLjktMS43LTYuNy0xLjEtOSAxLjQtMTUgMTYuMi0yNi41IDM1LjgtMzMuMiA1Ny40LTEgMy4zLjQgNi44IDMuMyA4LjVsMjUuOCAxNC45Yy0yLjYgMTQuMS0yLjYgMjguNSAwIDQyLjZsLTI1LjggMTQuOWMtMyAxLjctNC4zIDUuMi0zLjMgOC41IDYuNyAyMS42IDE4LjIgNDEuMSAzMy4yIDU3LjQgMi4zIDIuNSA2IDMuMSA5IDEuNGwyNS44LTE0LjljMTAuOSA5LjMgMjMuNCAxNi41IDM2LjkgMjEuM3YyOS44YzAgMy40IDIuNCA2LjQgNS43IDcuMSAyMi4zIDUgNDUgNC44IDY2LjIgMCAzLjMtLjcgNS43LTMuNyA1LjctNy4xdi0yOS44YzEzLjUtNC44IDI2LTEyIDM2LjktMjEuM2wyNS44IDE0LjljMi45IDEuNyA2LjcgMS4xIDktMS40IDE1LTE2LjIgMjYuNS0zNS44IDMzLjItNTcuNCAxLTMuMy0uNC02LjgtMy4zLTguNWwtMjUuOC0xNC45ek00OTYgMzY4LjVjLTI2LjggMC00OC41LTIxLjgtNDguNS00OC41czIxLjgtNDguNSA0OC41LTQ4LjUgNDguNSAyMS44IDQ4LjUgNDguNS0yMS43IDQ4LjUtNDguNSA0OC41ek05NiAyMjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjQtNjQgMjguNy02NCA2NCAyOC43IDY0IDY0IDY0em0yMjQgMzJjMS45IDAgMy43LS41IDUuNi0uNiA4LjMtMjEuNyAyMC41LTQyLjEgMzYuMy01OS4yIDcuNC04IDE3LjktMTIuNiAyOC45LTEyLjYgNi45IDAgMTMuNyAxLjggMTkuNiA1LjNsNy45IDQuNmMuOC0uNSAxLjYtLjkgMi40LTEuNCA3LTE0LjYgMTEuMi0zMC44IDExLjItNDggMC02MS45LTUwLjEtMTEyLTExMi0xMTJTMjA4IDgyLjEgMjA4IDE0NGMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnptMTA1LjIgMTk0LjVjLTIuMy0xLjItNC42LTIuNi02LjgtMy45LTguMiA0LjgtMTUuMyA5LjgtMjcuNSA5LjgtMTAuOSAwLTIxLjQtNC42LTI4LjktMTIuNi0xOC4zLTE5LjgtMzIuMy00My45LTQwLjItNjkuNi0xMC43LTM0LjUgMjQuOS00OS43IDI1LjgtNTAuMy0uMS0yLjYtLjEtNS4yIDAtNy44bC03LjktNC42Yy0zLjgtMi4yLTctNS05LjgtOC4xLTMuMy4yLTYuNS42LTkuOC42LTI0LjYgMC00Ny42LTYtNjguNS0xNmgtOC4zQzE3OS42IDI4OCAxMjggMzM5LjYgMTI4IDQwMy4yVjQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgyNTUuNGMtMy43LTYtNi4yLTEyLjgtNi4yLTIwLjN2LTkuMnpNMTczLjEgMjc0LjZDMTYxLjUgMjYzLjEgMTQ1LjYgMjU2IDEyOCAyNTZINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY1LjljNi4zLTQ3LjQgMzQuOS04Ny4zIDc1LjItMTA5LjR6XCJdLFwidXRlbnNpbC1zcG9vblwiOls1MTIsNTEyLFtdLFwiZjJlNVwiLFwiTTQ4MC4xIDMxLjljLTU1LTU1LjEtMTY0LjktMzQuNS0yMjcuOCAyOC41LTQ5LjMgNDkuMy01NS4xIDExMC0yOC44IDE2MC40TDkgNDEzLjJjLTExLjYgMTAuNS0xMi4xIDI4LjUtMSAzOS41TDU5LjMgNTA0YzExIDExIDI5LjEgMTAuNSAzOS41LTEuMWwxOTIuNC0yMTQuNGM1MC40IDI2LjMgMTExLjEgMjAuNSAxNjAuNC0yOC44IDYzLTYyLjkgODMuNi0xNzIuOCAyOC41LTIyNy44elwiXSx1dGVuc2lsczpbNDE2LDUxMixbXSxcImYyZTdcIixcIk0yMDcuOSAxNS4yYy44IDQuNyAxNi4xIDk0LjUgMTYuMSAxMjguOCAwIDUyLjMtMjcuOCA4OS42LTY4LjkgMTA0LjZMMTY4IDQ4Ni43Yy43IDEzLjctMTAuMiAyNS4zLTI0IDI1LjNIODBjLTEzLjcgMC0yNC43LTExLjUtMjQtMjUuM2wxMi45LTIzOC4xQzI3LjcgMjMzLjYgMCAxOTYuMiAwIDE0NCAwIDEwOS42IDE1LjMgMTkuOSAxNi4xIDE1LjIgMTkuMy01LjEgNjEuNC01LjQgNjQgMTYuM3YxNDEuMmMxLjMgMy40IDE1LjEgMy4yIDE2IDAgMS40LTI1LjMgNy45LTEzOS4yIDgtMTQxLjggMy4zLTIwLjggNDQuNy0yMC44IDQ3LjkgMCAuMiAyLjcgNi42IDExNi41IDggMTQxLjguOSAzLjIgMTQuOCAzLjQgMTYgMFYxNi4zYzIuNi0yMS42IDQ0LjgtMjEuNCA0OC0xLjF6bTExOS4yIDI4NS43bC0xNSAxODUuMWMtMS4yIDE0IDkuOSAyNiAyMy45IDI2aDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjI0YzAtMTMuMi0xMC43LTI0LTI0LTI0LTgyLjUgMC0yMjEuNCAxNzguNS02NC45IDMwMC45elwiXSxcInZlY3Rvci1zcXVhcmVcIjpbNTEyLDUxMixbXSxcImY1Y2JcIixcIk01MTIgMTI4VjMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJoLTk2Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMySDE2MGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMySDMyQzE0LjMzIDAgMCAxNC4zMyAwIDMydjk2YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJ2MTkyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjk2YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoOTZjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMmgxOTJjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg5NmMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi05NmMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyVjE2MGMxNy42NyAwIDMyLTE0LjMzIDMyLTMyem0tOTYtNjRoMzJ2MzJoLTMyVjY0ek02NCA2NGgzMnYzMkg2NFY2NHptMzIgMzg0SDY0di0zMmgzMnYzMnptMzUyIDBoLTMydi0zMmgzMnYzMnptLTMyLTk2aC0zMmMtMTcuNjcgMC0zMiAxNC4zMy0zMiAzMnYzMkgxNjB2LTMyYzAtMTcuNjctMTQuMzMtMzItMzItMzJIOTZWMTYwaDMyYzE3LjY3IDAgMzItMTQuMzMgMzItMzJWOTZoMTkydjMyYzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoMzJ2MTkyelwiXSx2ZW51czpbMjg4LDUxMixbXSxcImYyMjFcIixcIk0yODggMTc2YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzAgOTYuNSAwIDE3NmMwIDY4LjUgNDcuOSAxMjUuOSAxMTIgMTQwLjRWMzY4SDc2Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NDBjMCA2LjYgNS40IDEyIDEyIDEyaDM2djM2YzAgNi42IDUuNCAxMiAxMiAxMmg0MGM2LjYgMCAxMi01LjQgMTItMTJ2LTM2aDM2YzYuNiAwIDEyLTUuNCAxMi0xMnYtNDBjMC02LjYtNS40LTEyLTEyLTEyaC0zNnYtNTEuNmM2NC4xLTE0LjUgMTEyLTcxLjkgMTEyLTE0MC40em0tMjI0IDBjMC00NC4xIDM1LjktODAgODAtODBzODAgMzUuOSA4MCA4MC0zNS45IDgwLTgwIDgwLTgwLTM1LjktODAtODB6XCJdLFwidmVudXMtZG91YmxlXCI6WzUxMiw1MTIsW10sXCJmMjI2XCIsXCJNMjg4IDE3NmMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDk2LjUgMCAxNzZjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40VjM2OEg3NmMtNi42IDAtMTIgNS40LTEyIDEydjQwYzAgNi42IDUuNCAxMiAxMiAxMmgzNnYzNmMwIDYuNiA1LjQgMTIgMTIgMTJoNDBjNi42IDAgMTItNS40IDEyLTEydi0zNmgzNmM2LjYgMCAxMi01LjQgMTItMTJ2LTQwYzAtNi42LTUuNC0xMi0xMi0xMmgtMzZ2LTUxLjZjNjQuMS0xNC41IDExMi03MS45IDExMi0xNDAuNHptLTIyNCAwYzAtNDQuMSAzNS45LTgwIDgwLTgwczgwIDM1LjkgODAgODAtMzUuOSA4MC04MCA4MC04MC0zNS45LTgwLTgwem0zMzYgMTQwLjRWMzY4aDM2YzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTM2djM2YzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtMzZoLTM2Yy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmgzNnYtNTEuNmMtMjEuMi00LjgtNDAuNi0xNC4zLTU3LjItMjcuMyAxNC0xNi43IDI1LTM2IDMyLjEtNTcuMSAxNC41IDE0LjggMzQuNyAyNCA1Ny4xIDI0IDQ0LjEgMCA4MC0zNS45IDgwLTgwcy0zNS45LTgwLTgwLTgwYy0yMi4zIDAtNDIuNiA5LjItNTcuMSAyNC03LjEtMjEuMS0xOC00MC40LTMyLjEtNTcuMUMzMDMuNCA0My42IDMzNC4zIDMyIDM2OCAzMmM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDY4LjUtNDcuOSAxMjUuOS0xMTIgMTQwLjR6XCJdLFwidmVudXMtbWFyc1wiOls1NzYsNTEyLFtdLFwiZjIyOFwiLFwiTTU2NCAwaC03OWMtMTAuNyAwLTE2IDEyLjktOC41IDIwLjVsMTYuOSAxNi45LTQ4LjcgNDguN0M0MjIuNSA3Mi4xIDM5Ni4yIDY0IDM2OCA2NGMtMzMuNyAwLTY0LjYgMTEuNi04OS4yIDMwLjkgMTQgMTYuNyAyNSAzNiAzMi4xIDU3LjEgMTQuNS0xNC44IDM0LjctMjQgNTcuMS0yNCA0NC4xIDAgODAgMzUuOSA4MCA4MHMtMzUuOSA4MC04MCA4MGMtMjIuMyAwLTQyLjYtOS4yLTU3LjEtMjQtNy4xIDIxLjEtMTggNDAuNC0zMi4xIDU3LjEgMjQuNSAxOS40IDU1LjUgMzAuOSA4OS4yIDMwLjkgNzkuNSAwIDE0NC02NC41IDE0NC0xNDQgMC0yOC4yLTguMS01NC41LTIyLjEtNzYuN2w0OC43LTQ4LjcgMTYuOSAxNi45YzIuNCAyLjQgNS40IDMuNSA4LjQgMy41IDYuMiAwIDEyLjEtNC44IDEyLjEtMTJWMTJjMC02LjYtNS40LTEyLTEyLTEyek0xNDQgNjRDNjQuNSA2NCAwIDEyOC41IDAgMjA4YzAgNjguNSA0Ny45IDEyNS45IDExMiAxNDAuNFY0MDBINzZjLTYuNiAwLTEyIDUuNC0xMiAxMnY0MGMwIDYuNiA1LjQgMTIgMTIgMTJoMzZ2MzZjMCA2LjYgNS40IDEyIDEyIDEyaDQwYzYuNiAwIDEyLTUuNCAxMi0xMnYtMzZoMzZjNi42IDAgMTItNS40IDEyLTEydi00MGMwLTYuNi01LjQtMTItMTItMTJoLTM2di01MS42YzY0LjEtMTQuNiAxMTItNzEuOSAxMTItMTQwLjQgMC03OS41LTY0LjUtMTQ0LTE0NC0xNDR6bTAgMjI0Yy00NC4xIDAtODAtMzUuOS04MC04MHMzNS45LTgwIDgwLTgwIDgwIDM1LjkgODAgODAtMzUuOSA4MC04MCA4MHpcIl0sdmlhbDpbNDgwLDUxMixbXSxcImY0OTJcIixcIk00NzcuNyAxODYuMUwzMDkuNSAxOC4zYy0zLjEtMy4xLTguMi0zLjEtMTEuMyAwbC0zNCAzMy45Yy0zLjEgMy4xLTMuMSA4LjIgMCAxMS4zbDExLjIgMTEuMUwzMyAzMTYuNWMtMzguOCAzOC43LTQ1LjEgMTAyLTkuNCAxNDMuNSAyMC42IDI0IDQ5LjUgMzYgNzguNCAzNS45IDI2LjQgMCA1Mi44LTEwIDcyLjktMzAuMWwyNDYuMy0yNDUuNyAxMS4yIDExLjFjMy4xIDMuMSA4LjIgMy4xIDExLjMgMGwzNC0zMy45YzMuMS0zIDMuMS04LjEgMC0xMS4yek0zMTggMjU2SDE2MWwxNDgtMTQ3LjcgNzguNSA3OC4zTDMxOCAyNTZ6XCJdLHZpYWxzOls2NDAsNTEyLFtdLFwiZjQ5M1wiLFwiTTcyIDY0aDI0djI0MGMwIDQ0LjEgMzUuOSA4MCA4MCA4MHM4MC0zNS45IDgwLTgwVjY0aDI0YzQuNCAwIDgtMy42IDgtOFY4YzAtNC40LTMuNi04LTgtOEg3MmMtNC40IDAtOCAzLjYtOCA4djQ4YzAgNC40IDMuNiA4IDggOHptNzIgMGg2NHY5NmgtNjRWNjR6bTQ4MCAzODRIMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNjA4YzguOCAwIDE2LTcuMiAxNi0xNnYtMzJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNjAgNjRoMjR2MjQwYzAgNDQuMSAzNS45IDgwIDgwIDgwczgwLTM1LjkgODAtODBWNjRoMjRjNC40IDAgOC0zLjYgOC04VjhjMC00LjQtMy42LTgtOC04SDM2MGMtNC40IDAtOCAzLjYtOCA4djQ4YzAgNC40IDMuNiA4IDggOHptNzIgMGg2NHY5NmgtNjRWNjR6XCJdLHZpZGVvOls1NzYsNTEyLFtdLFwiZjAzZFwiLFwiTTMzNi4yIDY0SDQ3LjhDMjEuNCA2NCAwIDg1LjQgMCAxMTEuOHYyODguNEMwIDQyNi42IDIxLjQgNDQ4IDQ3LjggNDQ4aDI4OC40YzI2LjQgMCA0Ny44LTIxLjQgNDcuOC00Ny44VjExMS44YzAtMjYuNC0yMS40LTQ3LjgtNDcuOC00Ny44em0xODkuNCAzNy43TDQxNiAxNzcuM3YxNTcuNGwxMDkuNiA3NS41YzIxLjIgMTQuNiA1MC40LS4zIDUwLjQtMjUuOFYxMjcuNWMwLTI1LjQtMjkuMS00MC40LTUwLjQtMjUuOHpcIl0sXCJ2aWRlby1zbGFzaFwiOls2NDAsNTEyLFtdLFwiZjRlMlwiLFwiTTYzMy44IDQ1OC4xbC01NS00Mi41YzE1LjQtMS40IDI5LjItMTMuNyAyOS4yLTMxLjF2LTI1N2MwLTI1LjUtMjkuMS00MC40LTUwLjQtMjUuOEw0NDggMTc3LjN2MTM3LjJsLTMyLTI0Ljd2LTE3OGMwLTI2LjQtMjEuNC00Ny44LTQ3LjgtNDcuOEgxMjMuOUw0NS41IDMuNEMzOC41LTIgMjguNS0uOCAyMyA2LjJMMy40IDMxLjRjLTUuNCA3LTQuMiAxNyAyLjggMjIuNEw0Mi43IDgyIDQxNiAzNzAuNmwxNzguNSAxMzhjNyA1LjQgMTcgNC4yIDIyLjUtMi44bDE5LjYtMjUuM2M1LjUtNi45IDQuMi0xNy0yLjgtMjIuNHpNMzIgNDAwLjJjMCAyNi40IDIxLjQgNDcuOCA0Ny44IDQ3LjhoMjg4LjRjMTEuMiAwIDIxLjQtNCAyOS42LTEwLjVMMzIgMTU0Ljd2MjQ1LjV6XCJdLFwidm9sbGV5YmFsbC1iYWxsXCI6WzQ5NSw1MTIsW10sXCJmNDVmXCIsXCJNMjIzLjMgMjQzLjRjLS45LTM3LTguNi03Mi44LTIyLjctMTA1LjctOTAuOCA0Mi40LTE1Ny41IDEyMi40LTE4MC4zIDIxNi44IDEzLjQgMzAuOCAzMi45IDU4LjMgNTYuOSA4MS4xIDIyLjctNzkuMiA3NC4yLTE0Ny44IDE0Ni4xLTE5Mi4yek0xODYuNCAxMDljLTE1LTI2LjQtMzQuNS01MC4xLTU3LjQtNzAuN0MzOCA4OC4xLTE1LjggMTkxLjIgNCAzMDAuNWMzMy40LTgzLjEgOTguNC0xNTIgMTgyLjQtMTkxLjV6TTM3NCAyNzQuMWM4LjYtOTkuOC0yNy4zLTE5Ny41LTk3LjUtMjY0LjQtMTQuNy0xLjctNTEuNi01LjUtOTguOSA4LjUgNTcuMyA1OS4zIDkxIDEzOC4yIDkzLjUgMjIyLjcgMzIuNSAxNy43IDY3LjMgMjkgMTAyLjkgMzMuMnptLTEyNC43IDkuNWMtMzEuNiAxOS4zLTU4LjcgNDMuOS04MC4yIDcyLjYgODIgNTcuMyAxODQuNSA3NS4xIDI3Ny41IDQ3LjggMTkuNy0yNi40IDM0LjItNTYuOCA0Mi4yLTg5LjktMjYuNiA2LjYtNTMuNyAxMC40LTgwLjkgMTAuNC01NC42LS4xLTEwOC45LTE0LjEtMTU4LjYtNDAuOXpNMTUxIDM4My4zYy0xNS4yIDI2LTI1LjcgNTQuNC0zMi4xIDg0LjIgMzcuNiAyMyA4MS43IDM2LjUgMTI5LjEgMzYuNSA2MSAwIDExNi43LTIyLjEgMTU5LjktNTguNkMyOTUgNDYxLjUgMjA0LjYgNDIwLjYgMTUxIDM4My4zek0zMzEuMyAyMi43YzU1LjMgNzAuNCA4Mi41IDE2MS4yIDc0LjYgMjUzLjYgMzAuMy4yIDYwLjUtNC44IDg5LjctMTQuMiAwLTIgLjMtNCAuMy02IDAtMTA3LjgtNjguNy0xOTkuMS0xNjQuNi0yMzMuNHpcIl0sXCJ2b2x1bWUtZG93blwiOlszODQsNTEyLFtdLFwiZjAyN1wiLFwiTTI1NiA4OC4wMTd2MzM1Ljk2NGMwIDIxLjQzOC0yNS45NDMgMzEuOTk4LTQwLjk3MSAxNi45NzFMMTI2LjA1OSAzNTJIMjRjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNFYxODRjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDEwMi4wNTlsODguOTcxLTg4Ljk1NGMxNS4wMS0xNS4wMSA0MC45Ny00LjQ5IDQwLjk3IDE2Ljk3MXpNMzg0IDI1NmMwLTMzLjcxNy0xNy4xODYtNjQuMzUtNDUuOTcyLTgxLjk0NC0xNS4wNzktOS4yMTQtMzQuNzc1LTQuNDYzLTQzLjk5MiAxMC42MTZzLTQuNDY0IDM0Ljc3NSAxMC42MTUgNDMuOTkyQzMxNC4yNjMgMjM0LjUzOCAzMjAgMjQ0Ljc1NyAzMjAgMjU2YTMyLjA1NiAzMi4wNTYgMCAwIDEtMTMuODAyIDI2LjMzMmMtMTQuNTI0IDEwLjA2OS0xOC4xMzYgMzAuMDA2LTguMDY3IDQ0LjUzIDEwLjA3IDE0LjUyNSAzMC4wMDggMTguMTM2IDQ0LjUzIDguMDY3QzM2OC41NDYgMzE2Ljk4MyAzODQgMjg3LjQ3OCAzODQgMjU2elwiXSxcInZvbHVtZS1vZmZcIjpbMjU2LDUxMixbXSxcImYwMjZcIixcIk0yNTYgODguMDE3djMzNS45NjRjMCAyMS40MzgtMjUuOTQzIDMxLjk5OC00MC45NzEgMTYuOTcxTDEyNi4wNTkgMzUySDI0Yy0xMy4yNTUgMC0yNC0xMC43NDUtMjQtMjRWMTg0YzAtMTMuMjU1IDEwLjc0NS0yNCAyNC0yNGgxMDIuMDU5bDg4Ljk3MS04OC45NTRjMTUuMDEtMTUuMDEgNDAuOTctNC40OSA0MC45NyAxNi45NzF6XCJdLFwidm9sdW1lLXVwXCI6WzU3Niw1MTIsW10sXCJmMDI4XCIsXCJNMjU2IDg4LjAxN3YzMzUuOTY0YzAgMjEuNDM4LTI1Ljk0MyAzMS45OTgtNDAuOTcxIDE2Ljk3MUwxMjYuMDU5IDM1MkgyNGMtMTMuMjU1IDAtMjQtMTAuNzQ1LTI0LTI0VjE4NGMwLTEzLjI1NSAxMC43NDUtMjQgMjQtMjRoMTAyLjA1OWw4OC45NzEtODguOTU0YzE1LjAxLTE1LjAxIDQwLjk3LTQuNDkgNDAuOTcgMTYuOTcxem0xODIuMDU2LTc3Ljg3NkM0MjIuOTgyLjkyIDQwMy4yODMgNS42NjggMzk0LjA2MSAyMC43NDVjLTkuMjIxIDE1LjA3Ny00LjQ3MyAzNC43NzQgMTAuNjA0IDQzLjk5NUM0NjguOTY3IDEwNC4wNjMgNTEyIDE3NC45ODMgNTEyIDI1NmMwIDczLjQzMS0zNi4wNzcgMTQyLjI5Mi05Ni41MDcgMTg0LjIwNi0xNC41MjIgMTAuMDcyLTE4LjEyOSAzMC4wMS04LjA1NyA0NC41MzIgMTAuMDc2IDE0LjUyOCAzMC4wMTYgMTguMTI2IDQ0LjUzMSA4LjA1N0M1MjkuNjMzIDQzOC45MjcgNTc2IDM1MC40MDYgNTc2IDI1NmMwLTEwMy4yNDQtNTQuNTc5LTE5NC44NzctMTM3Ljk0NC0yNDUuODU5ek00ODAgMjU2YzAtNjguNTQ3LTM2LjE1LTEyOS43NzctOTEuOTU3LTE2My45MDEtMTUuMDc2LTkuMjItMzQuNzc0LTQuNDcxLTQzLjk5NCAxMC42MDctOS4yMiAxNS4wNzgtNC40NzEgMzQuNzc0IDEwLjYwNyA0My45OTRDMzkzLjA2NyAxNzAuMTg4IDQxNiAyMTEuMDQ4IDQxNiAyNTZjMCA0MS45NjQtMjAuNjIgODEuMzE5LTU1LjE1OCAxMDUuMjc2LTE0LjUyMSAxMC4wNzMtMTguMTI4IDMwLjAxLTguMDU2IDQ0LjUzMiA2LjIxNiA4Ljk2IDE2LjE4NSAxMy43NjUgMjYuMzIyIDEzLjc2NWEzMS44NjIgMzEuODYyIDAgMCAwIDE4LjIxLTUuNzA5QzQ0OS4wOTEgMzc3Ljk1MyA0ODAgMzE4LjkzOCA0ODAgMjU2em0tOTYgMGMwLTMzLjcxNy0xNy4xODYtNjQuMzUtNDUuOTcyLTgxLjk0NC0xNS4wNzktOS4yMTQtMzQuNzc1LTQuNDYzLTQzLjk5MiAxMC42MTZzLTQuNDY0IDM0Ljc3NSAxMC42MTUgNDMuOTkyQzMxNC4yNjMgMjM0LjUzOCAzMjAgMjQ0Ljc1NyAzMjAgMjU2YTMyLjA1NiAzMi4wNTYgMCAwIDEtMTMuODAyIDI2LjMzMmMtMTQuNTI0IDEwLjA2OS0xOC4xMzYgMzAuMDA2LTguMDY3IDQ0LjUzIDEwLjA3IDE0LjUyNSAzMC4wMDggMTguMTM2IDQ0LjUzIDguMDY3QzM2OC41NDYgMzE2Ljk4MyAzODQgMjg3LjQ3OCAzODQgMjU2elwiXSx3YWxraW5nOlszMjAsNTEyLFtdLFwiZjU1NFwiLFwiTTIwOCA5NmMyNi41IDAgNDgtMjEuNSA0OC00OFMyMzQuNSAwIDIwOCAwcy00OCAyMS41LTQ4IDQ4IDIxLjUgNDggNDggNDh6bTk0LjUgMTQ5LjFsLTIzLjMtMTEuOC05LjctMjkuNGMtMTQuNy00NC42LTU1LjctNzUuOC0xMDIuMi03NS45LTM2LS4xLTU1LjkgMTAuMS05My4zIDI1LjItMjEuNiA4LjctMzkuMyAyNS4yLTQ5LjcgNDYuMkwxNy42IDIxM2MtNy44IDE1LjgtMS41IDM1IDE0LjIgNDIuOSAxNS42IDcuOSAzNC42IDEuNSA0Mi41LTE0LjNMODEgMjI4YzMuNS03IDkuMy0xMi41IDE2LjUtMTUuNGwyNi44LTEwLjgtMTUuMiA2MC43Yy01LjIgMjAuOC40IDQyLjkgMTQuOSA1OC44bDU5LjkgNjUuNGM3LjIgNy45IDEyLjMgMTcuNCAxNC45IDI3LjdsMTguMyA3My4zYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjMgMTcuMS00LjMgMjcuNi0yMS43IDIzLjMtMzguOGwtMjIuMi04OWMtMi42LTEwLjMtNy43LTE5LjktMTQuOS0yNy43bC00NS41LTQ5LjcgMTcuMi02OC43IDUuNSAxNi41YzUuMyAxNi4xIDE2LjcgMjkuNCAzMS43IDM3bDIzLjMgMTEuOGMxNS42IDcuOSAzNC42IDEuNSA0Mi41LTE0LjMgNy43LTE1LjcgMS40LTM1LjEtMTQuMy00M3pNNzMuNiAzODUuOGMtMy4yIDguMS04IDE1LjQtMTQuMiAyMS41bC01MCA1MC4xYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi43IDEyLjUgNDUuMiAwbDU5LjQtNTkuNGM2LjEtNi4xIDEwLjktMTMuNCAxNC4yLTIxLjVsMTMuNS0zMy44Yy01NS4zLTYwLjMtMzguNy00MS44LTQ3LjQtNTMuN2wtMjAuNyA1MS41elwiXSx3YWxsZXQ6WzUxMiw1MTIsW10sXCJmNTU1XCIsXCJNNDYxLjIgMTI4SDgwYy04Ljg0IDAtMTYtNy4xNi0xNi0xNnM3LjE2LTE2IDE2LTE2aDM4NGM4Ljg0IDAgMTYtNy4xNiAxNi0xNiAwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4SDY0QzI4LjY1IDMyIDAgNjAuNjUgMCA5NnYzMjBjMCAzNS4zNSAyOC42NSA2NCA2NCA2NGgzOTcuMmMyOC4wMiAwIDUwLjgtMjEuNTMgNTAuOC00OFYxNzZjMC0yNi40Ny0yMi43OC00OC01MC44LTQ4ek00MTYgMzM2Yy0xNy42NyAwLTMyLTE0LjMzLTMyLTMyczE0LjMzLTMyIDMyLTMyIDMyIDE0LjMzIDMyIDMyLTE0LjMzIDMyLTMyIDMyelwiXSx3YXJlaG91c2U6WzY0MCw1MTIsW10sXCJmNDk0XCIsXCJNNTA0IDM1MkgxMzYuNGMtNC40IDAtOCAzLjYtOCA4bC0uMSA0OGMwIDQuNCAzLjYgOCA4IDhINTA0YzQuNCAwIDgtMy42IDgtOHYtNDhjMC00LjQtMy42LTgtOC04em0wIDk2SDEzNi4xYy00LjQgMC04IDMuNi04IDhsLS4xIDQ4YzAgNC40IDMuNiA4IDggOGgzNjhjNC40IDAgOC0zLjYgOC04di00OGMwLTQuNC0zLjYtOC04LTh6bTAtMTkySDEzNi42Yy00LjQgMC04IDMuNi04IDhsLS4xIDQ4YzAgNC40IDMuNiA4IDggOEg1MDRjNC40IDAgOC0zLjYgOC04di00OGMwLTQuNC0zLjYtOC04LTh6bTEwNi41LTEzOUwzMzguNCAzLjdhNDguMTUgNDguMTUgMCAwIDAtMzYuOSAwTDI5LjUgMTE3QzExLjcgMTI0LjUgMCAxNDEuOSAwIDE2MS4zVjUwNGMwIDQuNCAzLjYgOCA4IDhoODBjNC40IDAgOC0zLjYgOC04VjI1NmMwLTE3LjYgMTQuNi0zMiAzMi42LTMyaDM4Mi44YzE4IDAgMzIuNiAxNC40IDMyLjYgMzJ2MjQ4YzAgNC40IDMuNiA4IDggOGg4MGM0LjQgMCA4LTMuNiA4LThWMTYxLjNjMC0xOS40LTExLjctMzYuOC0yOS41LTQ0LjN6XCJdLHdlaWdodDpbNTEyLDUxMixbXSxcImY0OTZcIixcIk00NDggNjRoLTI1Ljk4QzQzOC40NCA5Mi4yOCA0NDggMTI1LjAxIDQ0OCAxNjBjMCAxMDUuODctODYuMTMgMTkyLTE5MiAxOTJTNjQgMjY1Ljg3IDY0IDE2MGMwLTM0Ljk5IDkuNTYtNjcuNzIgMjUuOTgtOTZINjRDMjguNzEgNjQgMCA5Mi43MSAwIDEyOHYzMjBjMCAzNS4yOSAyOC43MSA2NCA2NCA2NGgzODRjMzUuMjkgMCA2NC0yOC43MSA2NC02NFYxMjhjMC0zNS4yOS0yOC43MS02NC02NC02NHpNMjU2IDMyMGM4OC4zNyAwIDE2MC03MS42MyAxNjAtMTYwUzM0NC4zNyAwIDI1NiAwIDk2IDcxLjYzIDk2IDE2MHM3MS42MyAxNjAgMTYwIDE2MHptLS4zLTE1MS45NGwzMy41OC03OC4zNmMzLjUtOC4xNyAxMi45NC0xMS45MiAyMS4wMy04LjQxIDguMTIgMy40OCAxMS44OCAxMi44OSA4LjQxIDIxbC0zMy42NyA3OC41NUMyOTEuNzMgMTg4IDI5NiAxOTcuNDUgMjk2IDIwOGMwIDIyLjA5LTE3LjkxIDQwLTQwIDQwcy00MC0xNy45MS00MC00MGMwLTIxLjk4IDE3Ljc2LTM5Ljc3IDM5LjctMzkuOTR6XCJdLFwid2VpZ2h0LWhhbmdpbmdcIjpbNTEyLDUxMixbXSxcImY1Y2RcIixcIk01MTAuMjggNDQ1Ljg2bC03My4wMy0yOTIuMTNjLTMuOC0xNS4xOS0xNi40NC0yNS43Mi0zMC44Ny0yNS43MmgtNjAuMjVjMy41Ny0xMC4wNSA1Ljg4LTIwLjcyIDUuODgtMzIgMC01My4wMi00Mi45OC05Ni05Ni05NnMtOTYgNDIuOTgtOTYgOTZjMCAxMS4yOCAyLjMgMjEuOTUgNS44OCAzMmgtNjAuMjVjLTE0LjQzIDAtMjcuMDggMTAuNTQtMzAuODcgMjUuNzJMMS43MiA0NDUuODZDLTYuNjEgNDc5LjE3IDE2LjM4IDUxMiA0OC4wMyA1MTJoNDE1Ljk1YzMxLjY0IDAgNTQuNjMtMzIuODMgNDYuMy02Ni4xNHpNMjU2IDEyOGMtMTcuNjQgMC0zMi0xNC4zNi0zMi0zMnMxNC4zNi0zMiAzMi0zMiAzMiAxNC4zNiAzMiAzMi0xNC4zNiAzMi0zMiAzMnpcIl0sd2hlZWxjaGFpcjpbNTEyLDUxMixbXSxcImYxOTNcIixcIk00OTYuMTAxIDM4NS42NjlsMTQuMjI3IDI4LjY2M2MzLjkyOSA3LjkxNS42OTcgMTcuNTE2LTcuMjE4IDIxLjQ0NWwtNjUuNDY1IDMyLjg4NmMtMTYuMDQ5IDcuOTY3LTM1LjU1NiAxLjE5NC00My4xODktMTUuMDU1TDMzMS42NzkgMzIwSDE5MmMtMTUuOTI1IDAtMjkuNDI2LTExLjcxLTMxLjY3OS0yNy40NzVDMTI2LjQzMyA1NS4zMDggMTI4LjM4IDcwLjA0NCAxMjggNjRjMC0zNi4zNTggMzAuMzE4LTY1LjYzNSA2Ny4wNTItNjMuOTI5IDMzLjI3MSAxLjU0NSA2MC4wNDggMjguOTA1IDYwLjkyNSA2Mi4yMDEuODY4IDMyLjkzMy0yMy4xNTIgNjAuNDIzLTU0LjYwOCA2NS4wMzlsNC42NyAzMi42OUgzMzZjOC44MzcgMCAxNiA3LjE2MyAxNiAxNnYzMmMwIDguODM3LTcuMTYzIDE2LTE2IDE2SDIxNS4xODJsNC41NzIgMzJIMzUyYTMyIDMyIDAgMCAxIDI4Ljk2MiAxOC4zOTJMNDM4LjQ3NyAzOTYuOGwzNi4xNzgtMTguMzQ5YzcuOTE1LTMuOTI5IDE3LjUxNy0uNjk3IDIxLjQ0NiA3LjIxOHpNMzExLjM1OCAzNTJoLTI0LjUwNmMtNy43ODggNTQuMjA0LTU0LjUyOCA5Ni0xMTAuODUyIDk2LTYxLjc1NyAwLTExMi01MC4yNDMtMTEyLTExMiAwLTQxLjUwNSAyMi42OTQtNzcuODA5IDU2LjMyNC05Ny4xNTYtMy43MTItMjUuOTY1LTYuODQ0LTQ3Ljg2LTkuNDg4LTY2LjMzM0M0NS45NTYgMTk4LjQ2NCAwIDI2MS45NjMgMCAzMzZjMCA5Ny4wNDcgNzguOTUzIDE3NiAxNzYgMTc2IDcxLjg3IDAgMTMzLjgwNi00My4zMDggMTYxLjExLTEwNS4xOTJMMzExLjM1OCAzNTJ6XCJdLHdpZmk6WzY0MCw1MTIsW10sXCJmMWViXCIsXCJNMzg0IDQxNmMwIDM1LjM0Ni0yOC42NTQgNjQtNjQgNjRzLTY0LTI4LjY1NC02NC02NGMwLTM1LjM0NiAyOC42NTQtNjQgNjQtNjRzNjQgMjguNjU0IDY0IDY0em0xMzYuNjU5LTEyNC40NDNjNi40NjUtNi40NjUgNi4yNDUtMTcuMDY1LS41NjQtMjMuMTY3LTExMy43OTMtMTAxLjk4NS0yODYuNTI2LTEwMS44NjktNDAwLjE5IDAtNi44MDkgNi4xMDItNy4wMjkgMTYuNzAyLS41NjQgMjMuMTY3bDM0LjAwNiAzNC4wMDZjNS45MjcgNS45MjcgMTUuNDY0IDYuMzIgMjEuNzY5Ljc5NiA4Mi44OC03Mi42MDkgMjA3LjA3NC03Mi40NDcgMjg5Ljc2OCAwIDYuMzA1IDUuNTI0IDE1Ljg0MiA1LjEzMiAyMS43NjktLjc5NmwzNC4wMDYtMzQuMDA2em0xMTIuMTEtMTEzLjcxOGM2LjM4NS02LjM4NSA2LjI1NC0xNi44MTYtLjM1LTIyLjk3My0xNzUuNzY4LTE2My44Ni00NDkuMTM0LTE2My44LTYyNC44MzcgMC02LjYwNCA2LjE1Ny02LjczNSAxNi41ODktLjM1IDIyLjk3M2wzMy45NjYgMzMuOTY2YzYuMDk1IDYuMDk1IDE1Ljg5MSA2LjIzMSAyMi4yMjQuMzgzIDE0NC43NjMtMTMzLjY2OCAzNjguMzU2LTEzMy43MDIgNTEzLjE1NiAwIDYuMzMzIDUuODQ4IDE2LjEyOSA1LjcxMiAyMi4yMjQtLjM4M2wzMy45NjctMzMuOTY2elwiXSxcIndpbmRvdy1jbG9zZVwiOls1MTIsNTEyLFtdLFwiZjQxMFwiLFwiTTQ2NCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDh6bS04My42IDI5MC41YzQuOCA0LjggNC44IDEyLjYgMCAxNy40bC00MC41IDQwLjVjLTQuOCA0LjgtMTIuNiA0LjgtMTcuNCAwTDI1NiAzMTMuM2wtNjYuNSA2Ny4xYy00LjggNC44LTEyLjYgNC44LTE3LjQgMGwtNDAuNS00MC41Yy00LjgtNC44LTQuOC0xMi42IDAtMTcuNGw2Ny4xLTY2LjUtNjcuMS02Ni41Yy00LjgtNC44LTQuOC0xMi42IDAtMTcuNGw0MC41LTQwLjVjNC44LTQuOCAxMi42LTQuOCAxNy40IDBsNjYuNSA2Ny4xIDY2LjUtNjcuMWM0LjgtNC44IDEyLjYtNC44IDE3LjQgMGw0MC41IDQwLjVjNC44IDQuOCA0LjggMTIuNiAwIDE3LjRMMzEzLjMgMjU2bDY3LjEgNjYuNXpcIl0sXCJ3aW5kb3ctbWF4aW1pemVcIjpbNTEyLDUxMixbXSxcImYyZDBcIixcIk00NjQgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4em0tMTYgMTYwSDY0di04NGMwLTYuNiA1LjQtMTIgMTItMTJoMzYwYzYuNiAwIDEyIDUuNCAxMiAxMnY4NHpcIl0sXCJ3aW5kb3ctbWluaW1pemVcIjpbNTEyLDUxMixbXSxcImYyZDFcIixcIk00NjQgMzUySDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHYzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDh2LTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4elwiXSxcIndpbmRvdy1yZXN0b3JlXCI6WzUxMiw1MTIsW10sXCJmMmQyXCIsXCJNNTEyIDQ4djI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGgtNDhWMTc2YzAtNDQuMS0zNS45LTgwLTgwLTgwSDEyOFY0OGMwLTI2LjUgMjEuNS00OCA0OC00OGgyODhjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM4NCAxNzZ2Mjg4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxNzZjMC0yNi41IDIxLjUtNDggNDgtNDhoMjg4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4em0tNjggMjhjMC02LjYtNS40LTEyLTEyLTEySDc2Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NTJoMjUydi01MnpcIl0sXCJ3aW5lLWdsYXNzXCI6WzI4OCw1MTIsW10sXCJmNGUzXCIsXCJNMjE2IDQ2NGgtNDBWMzQ2LjgxYzY4LjQ3LTE1Ljg5IDExOC4wNS03OS45MSAxMTEuNC0xNTQuMTZsLTE1Ljk1LTE3OC4xQzI3MC43MSA2LjMxIDI2My45IDAgMjU1Ljc0IDBIMzIuMjZjLTguMTUgMC0xNC45NyA2LjMxLTE1LjcgMTQuNTVMLjYgMTkyLjY2Qy02LjA1IDI2Ni45MSA0My41MyAzMzAuOTMgMTEyIDM0Ni44MlY0NjRINzJjLTIyLjA5IDAtNDAgMTcuOTEtNDAgNDAgMCA0LjQyIDMuNTggOCA4IDhoMjA4YzQuNDIgMCA4LTMuNTggOC04IDAtMjIuMDktMTcuOTEtNDAtNDAtNDB6XCJdLFwid2luZS1nbGFzcy1hbHRcIjpbMjg4LDUxMixbXSxcImY1Y2VcIixcIk0yMTYgNDY0aC00MFYzNDYuODFjNjguNDctMTUuODkgMTE4LjA1LTc5LjkxIDExMS40LTE1NC4xNmwtMTUuOTUtMTc4LjFDMjcwLjcxIDYuMzEgMjYzLjkgMCAyNTUuNzQgMEgzMi4yNmMtOC4xNSAwLTE0Ljk3IDYuMzEtMTUuNyAxNC41NUwuNiAxOTIuNjZDLTYuMDUgMjY2LjkxIDQzLjUzIDMzMC45MyAxMTIgMzQ2LjgyVjQ2NEg3MmMtMjIuMDkgMC00MCAxNy45MS00MCA0MCAwIDQuNDIgMy41OCA4IDggOGgyMDhjNC40MiAwIDgtMy41OCA4LTggMC0yMi4wOS0xNy45MS00MC00MC00MHpNNjEuNzUgNDhoMTY0LjVsNy4xNyA4MEg1NC41OGw3LjE3LTgwelwiXSxcIndvbi1zaWduXCI6WzU3Niw1MTIsW10sXCJmMTU5XCIsXCJNNTY0IDE5MmM2LjYyNyAwIDEyLTUuMzczIDEyLTEydi00MGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC00OC4wMjhsMTguNTcyLTgwLjYxYzEuNzMyLTcuNTE4LTMuOTc4LTE0LjY5NC0xMS42OTMtMTQuNjk0aC00Ni4xMDdhMTEuOTk4IDExLjk5OCAwIDAgMC0xMS43MzYgOS41TDQ1MC43MyAxMjhIMzQwLjgzOWwtMTkuNzI1LTg1Ljk4N2ExMiAxMiAwIDAgMC0xMS42OTYtOS4zMTdIMjY1LjQzYTEyIDEyIDAgMCAwLTExLjY4NyA5LjI3N0wyMzMuNjk2IDEyOEgxMjQuOTc1TDEwNy41IDQyLjI5OWExMiAxMiAwIDAgMC0xMS43NTgtOS42MDJINTMuNjI4Yy03LjY4NiAwLTEzLjM5IDcuMTI0LTExLjcwOSAxNC42MjRMNjAgMTI4SDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNjIuMzQybDcuMTcxIDMySDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjQwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoODMuODU2bDQwLjkyNyAxODIuNjI0QTEyIDEyIDAgMCAwIDE0OC40OTIgNDgwaDU2Ljc2N2M1LjU4MyAwIDEwLjQyOC0zLjg1IDExLjY4OS05LjI4OEwyNTkuMzM1IDI4OGg1NS4wODZsNDIuMzg2IDE4Mi43MTJBMTIgMTIgMCAwIDAgMzY4LjQ5NiA0ODBoNTYuODI2YTEyIDEyIDAgMCAwIDExLjY5NC05LjMwNkw0NzkuMTA4IDI4OEg1NjRjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtNDBjMC02LjYyNy01LjM3My0xMi0xMi0xMmgtNzAuMTQ2bDcuMzczLTMySDU2NHptLTQyNS45NzYgMGg4MC43NTdsLTcuNDU3IDMyaC02Ni43NzZsLTYuNTI0LTMyem00NS43OTYgMTUwLjAyOWMtNi4xOTQgMjUuODMxLTYuNzU4IDQ3LjI1LTcuMzIxIDQ3LjI1aC0xLjEyNnMtMS42ODktMjIuMDUtNi43NTgtNDcuMjVMMTU3LjU5OSAyODhoMzguODEybC0xMi41OTEgNTQuMDI5ek0yNzQuMTgyIDIyNGwxLjk5Ni04LjYwMmMxLjg1Ni03Ljk2MiAzLjQ1Ny0xNS45NjggNC44MDMtMjMuMzk4aDExLjc5NGMxLjM0NyA3LjQzIDIuOTQ3IDE1LjQzNiA0LjgwMyAyMy4zOThsMS45OTYgOC42MDJoLTI1LjM5MnptMTMwLjk1OSAxMTguMDI5Yy01LjA2OCAyNS4yLTYuNzU4IDQ3LjI1LTYuNzU4IDQ3LjI1aC0xLjEyNmMtLjU2MyAwLTEuMTI2LTIxLjQyLTcuMzIxLTQ3LjI1TDM3Ny41NDIgMjg4aDM5LjEwN2wtMTEuNTA4IDU0LjAyOXpNNDMwLjI4MSAyMjRoLTY3LjQybC03LjM0LTMyaDgxLjU3N2wtNi44MTcgMzJ6XCJdLHdyZW5jaDpbNTEyLDUxMixbXSxcImYwYWRcIixcIk01MDcuNzMgMTA5LjFjLTIuMjQtOS4wMy0xMy41NC0xMi4wOS0yMC4xMi01LjUxbC03NC4zNiA3NC4zNi02Ny44OC0xMS4zMS0xMS4zMS02Ny44OCA3NC4zNi03NC4zNmM2LjYyLTYuNjIgMy40My0xNy45LTUuNjYtMjAuMTYtNDcuMzgtMTEuNzQtOTkuNTUuOTEtMTM2LjU4IDM3LjkzLTM5LjY0IDM5LjY0LTUwLjU1IDk3LjEtMzQuMDUgMTQ3LjJMMTguNzQgNDAyLjc2Yy0yNC45OSAyNC45OS0yNC45OSA2NS41MSAwIDkwLjUgMjQuOTkgMjQuOTkgNjUuNTEgMjQuOTkgOTAuNSAwbDIxMy4yMS0yMTMuMjFjNTAuMTIgMTYuNzEgMTA3LjQ3IDUuNjggMTQ3LjM3LTM0LjIyIDM3LjA3LTM3LjA3IDQ5LjctODkuMzIgMzcuOTEtMTM2Ljczek02NCA0NzJjLTEzLjI1IDAtMjQtMTAuNzUtMjQtMjQgMC0xMy4yNiAxMC43NS0yNCAyNC0yNHMyNCAxMC43NCAyNCAyNGMwIDEzLjI1LTEwLjc1IDI0LTI0IDI0elwiXSxcIngtcmF5XCI6WzY0MCw1MTIsW10sXCJmNDk3XCIsXCJNMjQwIDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNiAxNi03LjIgMTYtMTYtNy4yLTE2LTE2LTE2em0xNjAgMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTYtMTYgNy4yLTE2IDE2IDcuMiAxNiAxNiAxNnpNNjI0IDBIMTZDNy4yIDAgMCA3LjIgMCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNjA4YzguOCAwIDE2LTcuMiAxNi0xNlYxNmMwLTguOC03LjItMTYtMTYtMTZ6bTAgNDQ4aC00OFY5Nkg2NHYzNTJIMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNjA4YzguOCAwIDE2LTcuMiAxNi0xNnYtMzJjMC04LjgtNy4yLTE2LTE2LTE2ek00ODAgMjQ4YzAgNC40LTMuNiA4LTggOEgzMzZ2MzJoMTA0YzQuNCAwIDggMy42IDggOHYxNmMwIDQuNC0zLjYgOC04IDhIMzM2djMyaDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4LTQ4LTIxLjUtNDgtNDh2LTE2aC02NHYxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OCAyMS41LTQ4IDQ4LTQ4aDY0di0zMkgyMDBjLTQuNCAwLTgtMy42LTgtOHYtMTZjMC00LjQgMy42LTggOC04aDEwNHYtMzJIMTY4Yy00LjQgMC04LTMuNi04LTh2LTE2YzAtNC40IDMuNi04IDgtOGgxMzZ2LTMySDIwMGMtNC40IDAtOC0zLjYtOC04di0xNmMwLTQuNCAzLjYtOCA4LThoMTA0di0yNGMwLTQuNCAzLjYtOCA4LThoMTZjNC40IDAgOCAzLjYgOCA4djI0aDEwNGM0LjQgMCA4IDMuNiA4IDh2MTZjMCA0LjQtMy42IDgtOCA4SDMzNnYzMmgxMzZjNC40IDAgOCAzLjYgOCA4djE2elwiXSxcInllbi1zaWduXCI6WzM4NCw1MTIsW10sXCJmMTU3XCIsXCJNMzUxLjIwOCAzMmgtNjUuMjc3YTEyIDEyIDAgMCAwLTEwLjc3OCA2LjcyNGwtNTUuMzkgMTEzLjE2M2MtMTQuNTEzIDM0LjcwNC0yNy4xMzMgNzEuOTMyLTI3LjEzMyA3MS45MzJoLTEuMjYycy0xMi42Mi0zNy4yMjgtMjcuMTMzLTcxLjkzMmwtNTUuMzktMTEzLjE2M0ExMS45OTcgMTEuOTk3IDAgMCAwIDk4LjA2OCAzMkgzMi43OTJjLTkuMDU3IDAtMTQuODUgOS42NS0xMC41OSAxNy42NDNMMTAyLjMyMiAyMDBINDRjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MzJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmg4OC4xNjJMMTUyIDI5My4yMjhWMzIwSDQ0Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjMyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTA4djkyYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNTZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtOTJoMTA4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTMyYzAtNi42MjctNS4zNzMtMTItMTItMTJIMjMydi0yNi43NzJMMjUxLjgzOCAyNTZIMzQwYzYuNjI3IDAgMTItNS4zNzMgMTItMTJ2LTMyYzAtNi42MjctNS4zNzMtMTItMTItMTJoLTU4LjMyMmw4MC4xMi0xNTAuMzU3QzM2Ni4wNTggNDEuNjUgMzYwLjI2NiAzMiAzNTEuMjA4IDMyelwiXX07IWZ1bmN0aW9uKGMpe3RyeXtjKCl9Y2F0Y2goYyl7aWYoIW0pdGhyb3cgY319KGZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGMobCx6KXt2YXIgaD1PYmplY3Qua2V5cyh6KS5yZWR1Y2UoZnVuY3Rpb24oYyxsKXt2YXIgaD16W2xdO3JldHVybiBoLmljb24/Y1toLmljb25OYW1lXT1oLmljb246Y1tsXT1oLGN9LHt9KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmhvb2tzLmFkZFBhY2s/dC5ob29rcy5hZGRQYWNrKGwsaCk6dC5zdHlsZXNbbF09TSh7fSx0LnN0eWxlc1tsXXx8e30saCksXCJmYXNcIj09PWwmJmMoXCJmYVwiLHopfShcImZhc1wiLGYpfSl9KCksZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYz1mdW5jdGlvbigpe30sbD17fSxoPXt9LHo9bnVsbCx2PXttYXJrOmMsbWVhc3VyZTpjfTt0cnl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKGw9d2luZG93KSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJihoPWRvY3VtZW50KSxcInVuZGVmaW5lZFwiIT10eXBlb2YgTXV0YXRpb25PYnNlcnZlciYmKHo9TXV0YXRpb25PYnNlcnZlciksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiYodj1wZXJmb3JtYW5jZSl9Y2F0Y2goYyl7fXZhciBtPShsLm5hdmlnYXRvcnx8e30pLnVzZXJBZ2VudCxzPXZvaWQgMD09PW0/XCJcIjptLHI9bCxpPWgsZT16LGE9dix0PSEhci5kb2N1bWVudCxNPSEhaS5kb2N1bWVudEVsZW1lbnQmJiEhaS5oZWFkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGkuY3JlYXRlRWxlbWVudCxwPX5zLmluZGV4T2YoXCJNU0lFXCIpfHx+cy5pbmRleE9mKFwiVHJpZGVudC9cIiksZj1cIl9fX0ZPTlRfQVdFU09NRV9fX1wiLGI9MTYsSD1cInN2Zy1pbmxpbmUtLWZhXCIsZz1cImRhdGEtZmEtaTJzdmdcIixuPVwiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudFwiLFY9XCJkYXRhLXByZWZpeFwiLG89XCJkYXRhLWljb25cIixDPVwiZm9udGF3ZXNvbWUtaTJzdmdcIixMPVtcIkhUTUxcIixcIkhFQURcIixcIlNUWUxFXCIsXCJTQ1JJUFRcIl0sdT1mdW5jdGlvbigpe3RyeXtyZXR1cm4hMH1jYXRjaChjKXtyZXR1cm4hMX19KCksZD1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLFM9ZC5jb25jYXQoWzExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSksdz1bXCJjbGFzc1wiLFwiZGF0YS1wcmVmaXhcIixcImRhdGEtaWNvblwiLFwiZGF0YS1mYS10cmFuc2Zvcm1cIixcImRhdGEtZmEtbWFza1wiXSx5PVtcInhzXCIsXCJzbVwiLFwibGdcIixcImZ3XCIsXCJ1bFwiLFwibGlcIixcImJvcmRlclwiLFwicHVsbC1sZWZ0XCIsXCJwdWxsLXJpZ2h0XCIsXCJzcGluXCIsXCJwdWxzZVwiLFwicm90YXRlLTkwXCIsXCJyb3RhdGUtMTgwXCIsXCJyb3RhdGUtMjcwXCIsXCJmbGlwLWhvcml6b250YWxcIixcImZsaXAtdmVydGljYWxcIixcInN0YWNrXCIsXCJzdGFjay0xeFwiLFwic3RhY2stMnhcIixcImludmVyc2VcIixcImxheWVyc1wiLFwibGF5ZXJzLXRleHRcIixcImxheWVycy1jb3VudGVyXCJdLmNvbmNhdChkLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYytcInhcIn0pKS5jb25jYXQoUy5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuXCJ3LVwiK2N9KSksaz1mdW5jdGlvbihjLGwpe2lmKCEoYyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB6KGMsbCl7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciB6PWxbaF07ei5lbnVtZXJhYmxlPXouZW51bWVyYWJsZXx8ITEsei5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4geiYmKHoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHoua2V5LHopfX1yZXR1cm4gZnVuY3Rpb24oYyxsLGgpe3JldHVybiBsJiZ6KGMucHJvdG90eXBlLGwpLGgmJnooYyxoKSxjfX0oKSxBPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe3ZhciBoPWFyZ3VtZW50c1tsXTtmb3IodmFyIHogaW4gaClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCx6KSYmKGNbel09aFt6XSl9cmV0dXJuIGN9LHE9ZnVuY3Rpb24oYyxsKXtpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiBjO2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYykpcmV0dXJuIGZ1bmN0aW9uKGMsbCl7dmFyIGg9W10sej0hMCx2PSExLG09dm9pZCAwO3RyeXtmb3IodmFyIHMsZT1jW1N5bWJvbC5pdGVyYXRvcl0oKTshKHo9KHM9ZS5uZXh0KCkpLmRvbmUpJiYoaC5wdXNoKHMudmFsdWUpLCFsfHxoLmxlbmd0aCE9PWwpO3o9ITApO31jYXRjaChjKXt2PSEwLG09Y31maW5hbGx5e3RyeXsheiYmZS5yZXR1cm4mJmUucmV0dXJuKCl9ZmluYWxseXtpZih2KXRocm93IG19fXJldHVybiBofShjLGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfSxqPWZ1bmN0aW9uKGMpe2lmKEFycmF5LmlzQXJyYXkoYykpe2Zvcih2YXIgbD0wLGg9QXJyYXkoYy5sZW5ndGgpO2w8Yy5sZW5ndGg7bCsrKWhbbF09Y1tsXTtyZXR1cm4gaH1yZXR1cm4gQXJyYXkuZnJvbShjKX0sTz1yLkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtpZihpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLnF1ZXJ5U2VsZWN0b3Ipe1tbXCJkYXRhLWZhbWlseS1wcmVmaXhcIixcImZhbWlseVByZWZpeFwiXSxbXCJkYXRhLXJlcGxhY2VtZW50LWNsYXNzXCIsXCJyZXBsYWNlbWVudENsYXNzXCJdLFtcImRhdGEtYXV0by1yZXBsYWNlLXN2Z1wiLFwiYXV0b1JlcGxhY2VTdmdcIl0sW1wiZGF0YS1hdXRvLWFkZC1jc3NcIixcImF1dG9BZGRDc3NcIl0sW1wiZGF0YS1hdXRvLWExMXlcIixcImF1dG9BMTF5XCJdLFtcImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50c1wiLFwic2VhcmNoUHNldWRvRWxlbWVudHNcIl0sW1wiZGF0YS1vYnNlcnZlLW11dGF0aW9uc1wiLFwib2JzZXJ2ZU11dGF0aW9uc1wiXSxbXCJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlXCIsXCJrZWVwT3JpZ2luYWxTb3VyY2VcIl0sW1wiZGF0YS1tZWFzdXJlLXBlcmZvcm1hbmNlXCIsXCJtZWFzdXJlUGVyZm9ybWFuY2VcIl0sW1wiZGF0YS1zaG93LW1pc3NpbmctaWNvbnNcIixcInNob3dNaXNzaW5nSWNvbnNcIl1dLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGwsaD1xKGMsMiksej1oWzBdLHY9aFsxXSxtPVwiXCI9PT0obD1mdW5jdGlvbihjKXt2YXIgbD1pLnF1ZXJ5U2VsZWN0b3IoXCJzY3JpcHRbXCIrYytcIl1cIik7aWYobClyZXR1cm4gbC5nZXRBdHRyaWJ1dGUoYyl9KHopKXx8XCJmYWxzZVwiIT09bCYmKFwidHJ1ZVwiPT09bHx8bCk7bnVsbCE9bSYmKE9bdl09bSl9KX12YXIgTj1BKHtmYW1pbHlQcmVmaXg6XCJmYVwiLHJlcGxhY2VtZW50Q2xhc3M6SCxhdXRvUmVwbGFjZVN2ZzohMCxhdXRvQWRkQ3NzOiEwLGF1dG9BMTF5OiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzOiExLG9ic2VydmVNdXRhdGlvbnM6ITAsa2VlcE9yaWdpbmFsU291cmNlOiEwLG1lYXN1cmVQZXJmb3JtYW5jZTohMSxzaG93TWlzc2luZ0ljb25zOiEwfSxPKTtOLmF1dG9SZXBsYWNlU3ZnfHwoTi5vYnNlcnZlTXV0YXRpb25zPSExKTt2YXIgRT1BKHt9LE4pO3IuRm9udEF3ZXNvbWVDb25maWc9RTt2YXIgUD1yfHx7fTtQW2ZdfHwoUFtmXT17fSksUFtmXS5zdHlsZXN8fChQW2ZdLnN0eWxlcz17fSksUFtmXS5ob29rc3x8KFBbZl0uaG9va3M9e30pLFBbZl0uc2hpbXN8fChQW2ZdLnNoaW1zPVtdKTt2YXIgVD1QW2ZdLF89W10sUj0hMTtNJiYoKFI9KGkuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsPy9ebG9hZGVkfF5jLzovXmxvYWRlZHxeaXxeYy8pLnRlc3QoaS5yZWFkeVN0YXRlKSl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixmdW5jdGlvbiBjKCl7aS5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGMpLFI9MSxfLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYygpfSl9KSk7dmFyIEY9ZnVuY3Rpb24oYyl7TSYmKFI/c2V0VGltZW91dChjLDApOl8ucHVzaChjKSl9LEk9YixXPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2Z1bmN0aW9uIFkoYyl7aWYoYyYmTSl7dmFyIGw9aS5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7bC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJ0ZXh0L2Nzc1wiKSxsLmlubmVySFRNTD1jO2Zvcih2YXIgaD1pLmhlYWQuY2hpbGROb2Rlcyx6PW51bGwsdj1oLmxlbmd0aC0xOy0xPHY7di0tKXt2YXIgbT1oW3ZdLHM9KG0udGFnTmFtZXx8XCJcIikudG9VcHBlckNhc2UoKTstMTxbXCJTVFlMRVwiLFwiTElOS1wiXS5pbmRleE9mKHMpJiYoej1tKX1yZXR1cm4gaS5oZWFkLmluc2VydEJlZm9yZShsLHopLGN9fXZhciBEPTA7ZnVuY3Rpb24gWCgpe3JldHVybisrRH1mdW5jdGlvbiBCKGMpe2Zvcih2YXIgbD1bXSxoPShjfHxbXSkubGVuZ3RoPj4+MDtoLS07KWxbaF09Y1toXTtyZXR1cm4gbH1mdW5jdGlvbiBVKGMpe3JldHVybiBjLmNsYXNzTGlzdD9CKGMuY2xhc3NMaXN0KTooYy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gY30pfWZ1bmN0aW9uIEsoYyxsKXt2YXIgaCx6PWwuc3BsaXQoXCItXCIpLHY9elswXSxtPXouc2xpY2UoMSkuam9pbihcIi1cIik7cmV0dXJuIHYhPT1jfHxcIlwiPT09bXx8KGg9bSx+eS5pbmRleE9mKGgpKT9udWxsOm19ZnVuY3Rpb24gRyhjKXtyZXR1cm4oXCJcIitjKS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC9cIi9nLFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZyxcIiYjMzk7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKX1mdW5jdGlvbiBKKGgpe3JldHVybiBPYmplY3Qua2V5cyhofHx7fSkucmVkdWNlKGZ1bmN0aW9uKGMsbCl7cmV0dXJuIGMrKGwrXCI6IFwiKStoW2xdK1wiO1wifSxcIlwiKX1mdW5jdGlvbiBRKGMpe3JldHVybiBjLnNpemUhPT1XLnNpemV8fGMueCE9PVcueHx8Yy55IT09Vy55fHxjLnJvdGF0ZSE9PVcucm90YXRlfHxjLmZsaXBYfHxjLmZsaXBZfWZ1bmN0aW9uIFooYyl7dmFyIGw9Yy50cmFuc2Zvcm0saD1jLmNvbnRhaW5lcldpZHRoLHo9Yy5pY29uV2lkdGg7cmV0dXJue291dGVyOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIraC8yK1wiIDI1NilcIn0saW5uZXI6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIiszMipsLngrXCIsIFwiKzMyKmwueStcIikgXCIrXCIgXCIrKFwic2NhbGUoXCIrbC5zaXplLzE2KihsLmZsaXBYPy0xOjEpK1wiLCBcIitsLnNpemUvMTYqKGwuZmxpcFk/LTE6MSkrXCIpIFwiKStcIiBcIisoXCJyb3RhdGUoXCIrbC5yb3RhdGUrXCIgMCAwKVwiKX0scGF0aDp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK3ovMiotMStcIiAtMjU2KVwifX19dmFyICQ9e3g6MCx5OjAsd2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwifSxjYz1mdW5jdGlvbihjKXt2YXIgbD1jLmNoaWxkcmVuLGg9Yy5hdHRyaWJ1dGVzLHo9Yy5tYWluLHY9Yy5tYXNrLG09Yy50cmFuc2Zvcm0scz16LndpZHRoLGU9ei5pY29uLGE9di53aWR0aCx0PXYuaWNvbixNPVooe3RyYW5zZm9ybTptLGNvbnRhaW5lcldpZHRoOmEsaWNvbldpZHRoOnN9KSxmPXt0YWc6XCJyZWN0XCIsYXR0cmlidXRlczpBKHt9LCQse2ZpbGw6XCJ3aGl0ZVwifSl9LHI9e3RhZzpcImdcIixhdHRyaWJ1dGVzOkEoe30sTS5pbm5lciksY2hpbGRyZW46W3t0YWc6XCJwYXRoXCIsYXR0cmlidXRlczpBKHt9LGUuYXR0cmlidXRlcyxNLnBhdGgse2ZpbGw6XCJibGFja1wifSl9XX0saT17dGFnOlwiZ1wiLGF0dHJpYnV0ZXM6QSh7fSxNLm91dGVyKSxjaGlsZHJlbjpbcl19LEg9XCJtYXNrLVwiK1goKSxuPVwiY2xpcC1cIitYKCksVj17dGFnOlwiZGVmc1wiLGNoaWxkcmVuOlt7dGFnOlwiY2xpcFBhdGhcIixhdHRyaWJ1dGVzOntpZDpufSxjaGlsZHJlbjpbdF19LHt0YWc6XCJtYXNrXCIsYXR0cmlidXRlczpBKHt9LCQse2lkOkgsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIixtYXNrQ29udGVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0pLGNoaWxkcmVuOltmLGldfV19O3JldHVybiBsLnB1c2goVix7dGFnOlwicmVjdFwiLGF0dHJpYnV0ZXM6QSh7ZmlsbDpcImN1cnJlbnRDb2xvclwiLFwiY2xpcC1wYXRoXCI6XCJ1cmwoI1wiK24rXCIpXCIsbWFzazpcInVybCgjXCIrSCtcIilcIn0sJCl9KSx7Y2hpbGRyZW46bCxhdHRyaWJ1dGVzOmh9fSxsYz1mdW5jdGlvbihjKXt2YXIgbD1jLmNoaWxkcmVuLGg9Yy5hdHRyaWJ1dGVzLHo9Yy5tYWluLHY9Yy50cmFuc2Zvcm0sbT1KKGMuc3R5bGVzKTtpZigwPG0ubGVuZ3RoJiYoaC5zdHlsZT1tKSxRKHYpKXt2YXIgcz1aKHt0cmFuc2Zvcm06dixjb250YWluZXJXaWR0aDp6LndpZHRoLGljb25XaWR0aDp6LndpZHRofSk7bC5wdXNoKHt0YWc6XCJnXCIsYXR0cmlidXRlczpBKHt9LHMub3V0ZXIpLGNoaWxkcmVuOlt7dGFnOlwiZ1wiLGF0dHJpYnV0ZXM6QSh7fSxzLmlubmVyKSxjaGlsZHJlbjpbe3RhZzp6Lmljb24udGFnLGNoaWxkcmVuOnouaWNvbi5jaGlsZHJlbixhdHRyaWJ1dGVzOkEoe30sei5pY29uLmF0dHJpYnV0ZXMscy5wYXRoKX1dfV19KX1lbHNlIGwucHVzaCh6Lmljb24pO3JldHVybntjaGlsZHJlbjpsLGF0dHJpYnV0ZXM6aH19LGhjPWZ1bmN0aW9uKGMpe3ZhciBsPWMuY2hpbGRyZW4saD1jLm1haW4sej1jLm1hc2ssdj1jLmF0dHJpYnV0ZXMsbT1jLnN0eWxlcyxzPWMudHJhbnNmb3JtO2lmKFEocykmJmguZm91bmQmJiF6LmZvdW5kKXt2YXIgZT1oLndpZHRoL2guaGVpZ2h0LzIsYT0uNTt2LnN0eWxlPUooQSh7fSxtLHtcInRyYW5zZm9ybS1vcmlnaW5cIjplK3MueC8xNitcImVtIFwiKyhhK3MueS8xNikrXCJlbVwifSkpfXJldHVyblt7dGFnOlwic3ZnXCIsYXR0cmlidXRlczp2LGNoaWxkcmVuOmx9XX0semM9ZnVuY3Rpb24oYyl7dmFyIGw9Yy5wcmVmaXgsaD1jLmljb25OYW1lLHo9Yy5jaGlsZHJlbix2PWMuYXR0cmlidXRlcyxtPWMuc3ltYm9sLHM9ITA9PT1tP2wrXCItXCIrRS5mYW1pbHlQcmVmaXgrXCItXCIraDptO3JldHVyblt7dGFnOlwic3ZnXCIsYXR0cmlidXRlczp7c3R5bGU6XCJkaXNwbGF5OiBub25lO1wifSxjaGlsZHJlbjpbe3RhZzpcInN5bWJvbFwiLGF0dHJpYnV0ZXM6QSh7fSx2LHtpZDpzfSksY2hpbGRyZW46en1dfV19O2Z1bmN0aW9uIHZjKGMpe3ZhciBsPWMuaWNvbnMsaD1sLm1haW4sej1sLm1hc2ssdj1jLnByZWZpeCxtPWMuaWNvbk5hbWUscz1jLnRyYW5zZm9ybSxlPWMuc3ltYm9sLGE9Yy50aXRsZSx0PWMuZXh0cmEsTT1jLndhdGNoYWJsZSxmPXZvaWQgMCE9PU0mJk0scj16LmZvdW5kP3o6aCxpPXIud2lkdGgsSD1yLmhlaWdodCxuPVwiZmEtdy1cIitNYXRoLmNlaWwoaS9IKjE2KSxWPVtFLnJlcGxhY2VtZW50Q2xhc3MsbT9FLmZhbWlseVByZWZpeCtcIi1cIittOlwiXCIsbl0uZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybi0xPT09dC5jbGFzc2VzLmluZGV4T2YoYyl9KS5jb25jYXQodC5jbGFzc2VzKS5qb2luKFwiIFwiKSxvPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOkEoe30sdC5hdHRyaWJ1dGVzLHtcImRhdGEtcHJlZml4XCI6dixcImRhdGEtaWNvblwiOm0sY2xhc3M6Vixyb2xlOlwiaW1nXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgXCIraStcIiBcIitIfSl9O2YmJihvLmF0dHJpYnV0ZXNbZ109XCJcIiksYSYmby5jaGlsZHJlbi5wdXNoKHt0YWc6XCJ0aXRsZVwiLGF0dHJpYnV0ZXM6e2lkOm8uYXR0cmlidXRlc1tcImFyaWEtbGFiZWxsZWRieVwiXXx8XCJ0aXRsZS1cIitYKCl9LGNoaWxkcmVuOlthXX0pO3ZhciBDPUEoe30sbyx7cHJlZml4OnYsaWNvbk5hbWU6bSxtYWluOmgsbWFzazp6LHRyYW5zZm9ybTpzLHN5bWJvbDplLHN0eWxlczp0LnN0eWxlc30pLEw9ei5mb3VuZCYmaC5mb3VuZD9jYyhDKTpsYyhDKSx1PUwuY2hpbGRyZW4sZD1MLmF0dHJpYnV0ZXM7cmV0dXJuIEMuY2hpbGRyZW49dSxDLmF0dHJpYnV0ZXM9ZCxlP3pjKEMpOmhjKEMpfWZ1bmN0aW9uIG1jKGMpe3ZhciBsPWMuY29udGVudCxoPWMud2lkdGgsej1jLmhlaWdodCx2PWMudHJhbnNmb3JtLG09Yy50aXRsZSxzPWMuZXh0cmEsZT1jLndhdGNoYWJsZSxhPXZvaWQgMCE9PWUmJmUsdD1BKHt9LHMuYXR0cmlidXRlcyxtP3t0aXRsZTptfTp7fSx7Y2xhc3M6cy5jbGFzc2VzLmpvaW4oXCIgXCIpfSk7YSYmKHRbZ109XCJcIik7dmFyIE0sZixyLGksSCxuLFYsbyxDLEw9QSh7fSxzLnN0eWxlcyk7USh2KSYmKEwudHJhbnNmb3JtPShmPShNPXt0cmFuc2Zvcm06dixzdGFydENlbnRlcmVkOiEwLHdpZHRoOmgsaGVpZ2h0Onp9KS50cmFuc2Zvcm0scj1NLndpZHRoLGk9dm9pZCAwPT09cj9iOnIsSD1NLmhlaWdodCxuPXZvaWQgMD09PUg/YjpILFY9TS5zdGFydENlbnRlcmVkLEM9XCJcIixDKz0obz12b2lkIDAhPT1WJiZWKSYmcD9cInRyYW5zbGF0ZShcIisoZi54L0ktaS8yKStcImVtLCBcIisoZi55L0ktbi8yKStcImVtKSBcIjpvP1widHJhbnNsYXRlKGNhbGMoLTUwJSArIFwiK2YueC9JK1wiZW0pLCBjYWxjKC01MCUgKyBcIitmLnkvSStcImVtKSkgXCI6XCJ0cmFuc2xhdGUoXCIrZi54L0krXCJlbSwgXCIrZi55L0krXCJlbSkgXCIsQys9XCJzY2FsZShcIitmLnNpemUvSSooZi5mbGlwWD8tMToxKStcIiwgXCIrZi5zaXplL0kqKGYuZmxpcFk/LTE6MSkrXCIpIFwiLEMrPVwicm90YXRlKFwiK2Yucm90YXRlK1wiZGVnKSBcIiksTFtcIi13ZWJraXQtdHJhbnNmb3JtXCJdPUwudHJhbnNmb3JtKTt2YXIgdT1KKEwpOzA8dS5sZW5ndGgmJih0LnN0eWxlPXUpO3ZhciBkPVtdO3JldHVybiBkLnB1c2goe3RhZzpcInNwYW5cIixhdHRyaWJ1dGVzOnQsY2hpbGRyZW46W2xdfSksbSYmZC5wdXNoKHt0YWc6XCJzcGFuXCIsYXR0cmlidXRlczp7Y2xhc3M6XCJzci1vbmx5XCJ9LGNoaWxkcmVuOlttXX0pLGR9dmFyIHNjPWZ1bmN0aW9uKCl7fSxlYz1FLm1lYXN1cmVQZXJmb3JtYW5jZSYmYSYmYS5tYXJrJiZhLm1lYXN1cmU/YTp7bWFyazpzYyxtZWFzdXJlOnNjfSxhYz0nRkEgXCI1LjEuMFwiJyx0Yz1mdW5jdGlvbihjKXtlYy5tYXJrKGFjK1wiIFwiK2MrXCIgZW5kc1wiKSxlYy5tZWFzdXJlKGFjK1wiIFwiK2MsYWMrXCIgXCIrYytcIiBiZWdpbnNcIixhYytcIiBcIitjK1wiIGVuZHNcIil9LE1jPXtiZWdpbjpmdW5jdGlvbihjKXtyZXR1cm4gZWMubWFyayhhYytcIiBcIitjK1wiIGJlZ2luc1wiKSxmdW5jdGlvbigpe3JldHVybiB0YyhjKX19LGVuZDp0Y30sZmM9ZnVuY3Rpb24oYyxsLGgseil7dmFyIHYsbSxzLGUsYSx0PU9iamVjdC5rZXlzKGMpLE09dC5sZW5ndGgsZj12b2lkIDAhPT16PyhlPWwsYT16LGZ1bmN0aW9uKGMsbCxoLHope3JldHVybiBlLmNhbGwoYSxjLGwsaCx6KX0pOmw7Zm9yKHZvaWQgMD09PWg/KHY9MSxzPWNbdFswXV0pOih2PTAscz1oKTt2PE07disrKXM9ZihzLGNbbT10W3ZdXSxtLGMpO3JldHVybiBzfSxyYz1ULnN0eWxlcyxpYz1ULnNoaW1zLEhjPXt9LG5jPXt9LFZjPXt9LG9jPWZ1bmN0aW9uKCl7dmFyIGM9ZnVuY3Rpb24oeil7cmV0dXJuIGZjKHJjLGZ1bmN0aW9uKGMsbCxoKXtyZXR1cm4gY1toXT1mYyhsLHose30pLGN9LHt9KX07SGM9YyhmdW5jdGlvbihjLGwsaCl7cmV0dXJuIGNbbFszXV09aCxjfSksbmM9YyhmdW5jdGlvbihsLGMsaCl7dmFyIHo9Y1syXTtyZXR1cm4gbFtoXT1oLHouZm9yRWFjaChmdW5jdGlvbihjKXtsW2NdPWh9KSxsfSk7dmFyIG09XCJmYXJcImluIHJjO1ZjPWZjKGljLGZ1bmN0aW9uKGMsbCl7dmFyIGg9bFswXSx6PWxbMV0sdj1sWzJdO3JldHVyblwiZmFyXCIhPT16fHxtfHwoej1cImZhc1wiKSxjW2hdPXtwcmVmaXg6eixpY29uTmFtZTp2fSxjfSx7fSl9O2Z1bmN0aW9uIENjKGMsbCl7cmV0dXJuIEhjW2NdW2xdfW9jKCk7dmFyIExjPVQuc3R5bGVzLHVjPWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O2Z1bmN0aW9uIGRjKGMpe3JldHVybiBjLnJlZHVjZShmdW5jdGlvbihjLGwpe3ZhciBoPUsoRS5mYW1pbHlQcmVmaXgsbCk7aWYoTGNbbF0pYy5wcmVmaXg9bDtlbHNlIGlmKGgpe3ZhciB6PVwiZmFcIj09PWMucHJlZml4P1ZjW2hdfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH06e307Yy5pY29uTmFtZT16Lmljb25OYW1lfHxoLGMucHJlZml4PXoucHJlZml4fHxjLnByZWZpeH1lbHNlIGwhPT1FLnJlcGxhY2VtZW50Q2xhc3MmJjAhPT1sLmluZGV4T2YoXCJmYS13LVwiKSYmYy5yZXN0LnB1c2gobCk7cmV0dXJuIGN9LHVjKCkpfWZ1bmN0aW9uIHBjKGMsbCxoKXtpZihjJiZjW2xdJiZjW2xdW2hdKXJldHVybntwcmVmaXg6bCxpY29uTmFtZTpoLGljb246Y1tsXVtoXX19ZnVuY3Rpb24gYmMoYyl7dmFyIGgsbD1jLnRhZyx6PWMuYXR0cmlidXRlcyx2PXZvaWQgMD09PXo/e306eixtPWMuY2hpbGRyZW4scz12b2lkIDA9PT1tP1tdOm07cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGM/RyhjKTpcIjxcIitsK1wiIFwiKyhoPXYsT2JqZWN0LmtleXMoaHx8e30pLnJlZHVjZShmdW5jdGlvbihjLGwpe3JldHVybiBjKyhsKyc9XCInKStHKGhbbF0pKydcIiAnfSxcIlwiKS50cmltKCkpK1wiPlwiK3MubWFwKGJjKS5qb2luKFwiXCIpK1wiPC9cIitsK1wiPlwifXZhciBnYz1mdW5jdGlvbigpe307ZnVuY3Rpb24gU2MoYyl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mKGMuZ2V0QXR0cmlidXRlP2MuZ2V0QXR0cmlidXRlKGcpOm51bGwpfXZhciB3Yz17cmVwbGFjZTpmdW5jdGlvbihjKXt2YXIgbD1jWzBdLGg9Y1sxXS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGJjKGMpfSkuam9pbihcIlxcblwiKTtpZihsLnBhcmVudE5vZGUmJmwub3V0ZXJIVE1MKWwub3V0ZXJIVE1MPWgrKEUua2VlcE9yaWdpbmFsU291cmNlJiZcInN2Z1wiIT09bC50YWdOYW1lLnRvTG93ZXJDYXNlKCk/XCJcXHgzYyEtLSBcIitsLm91dGVySFRNTCtcIiAtLVxceDNlXCI6XCJcIik7ZWxzZSBpZihsLnBhcmVudE5vZGUpe3ZhciB6PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO2wucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoeixsKSx6Lm91dGVySFRNTD1ofX0sbmVzdDpmdW5jdGlvbihjKXt2YXIgbD1jWzBdLGg9Y1sxXTtpZih+VShsKS5pbmRleE9mKEUucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIHdjLnJlcGxhY2UoYyk7dmFyIHo9bmV3IFJlZ0V4cChFLmZhbWlseVByZWZpeCtcIi0uKlwiKTtkZWxldGUgaFswXS5hdHRyaWJ1dGVzLnN0eWxlO3ZhciB2PWhbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdChcIiBcIikucmVkdWNlKGZ1bmN0aW9uKGMsbCl7cmV0dXJuIGw9PT1FLnJlcGxhY2VtZW50Q2xhc3N8fGwubWF0Y2goeik/Yy50b1N2Zy5wdXNoKGwpOmMudG9Ob2RlLnB1c2gobCksY30se3RvTm9kZTpbXSx0b1N2ZzpbXX0pO2hbMF0uYXR0cmlidXRlcy5jbGFzcz12LnRvU3ZnLmpvaW4oXCIgXCIpO3ZhciBtPWgubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiYyhjKX0pLmpvaW4oXCJcXG5cIik7bC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHYudG9Ob2RlLmpvaW4oXCIgXCIpKSxsLnNldEF0dHJpYnV0ZShnLFwiXCIpLGwuaW5uZXJIVE1MPW19fTtmdW5jdGlvbiB5YyhoLGMpe3ZhciB6PVwiZnVuY3Rpb25cIj09dHlwZW9mIGM/YzpnYzswPT09aC5sZW5ndGg/eigpOihyLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYyl7cmV0dXJuIGMoKX0pKGZ1bmN0aW9uKCl7dmFyIGM9ITA9PT1FLmF1dG9SZXBsYWNlU3ZnP3djLnJlcGxhY2U6d2NbRS5hdXRvUmVwbGFjZVN2Z118fHdjLnJlcGxhY2UsbD1NYy5iZWdpbihcIm11dGF0ZVwiKTtoLm1hcChjKSxsKCkseigpfSl9dmFyIGtjPSExO3ZhciB4Yz1udWxsO2Z1bmN0aW9uIEFjKGMpe2lmKGUmJkUub2JzZXJ2ZU11dGF0aW9ucyl7dmFyIHY9Yy50cmVlQ2FsbGJhY2ssbT1jLm5vZGVDYWxsYmFjayxzPWMucHNldWRvRWxlbWVudHNDYWxsYmFjayxsPWMub2JzZXJ2ZU11dGF0aW9uc1Jvb3QsaD12b2lkIDA9PT1sP2kuYm9keTpsO3hjPW5ldyBlKGZ1bmN0aW9uKGMpe2tjfHxCKGMpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoXCJjaGlsZExpc3RcIj09PWMudHlwZSYmMDxjLmFkZGVkTm9kZXMubGVuZ3RoJiYhU2MoYy5hZGRlZE5vZGVzWzBdKSYmKEUuc2VhcmNoUHNldWRvRWxlbWVudHMmJnMoYy50YXJnZXQpLHYoYy50YXJnZXQpKSxcImF0dHJpYnV0ZXNcIj09PWMudHlwZSYmYy50YXJnZXQucGFyZW50Tm9kZSYmRS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmcyhjLnRhcmdldC5wYXJlbnROb2RlKSxcImF0dHJpYnV0ZXNcIj09PWMudHlwZSYmU2MoYy50YXJnZXQpJiZ+dy5pbmRleE9mKGMuYXR0cmlidXRlTmFtZSkpaWYoXCJjbGFzc1wiPT09Yy5hdHRyaWJ1dGVOYW1lKXt2YXIgbD1kYyhVKGMudGFyZ2V0KSksaD1sLnByZWZpeCx6PWwuaWNvbk5hbWU7aCYmYy50YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS1wcmVmaXhcIixoKSx6JiZjLnRhcmdldC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWljb25cIix6KX1lbHNlIG0oYy50YXJnZXQpfSl9KSxNJiZ4Yy5vYnNlcnZlKGgse2NoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITAsc3VidHJlZTohMH0pfX12YXIgcWM9ZnVuY3Rpb24oYyl7dmFyIGw9Yy5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSxoPVtdO3JldHVybiBsJiYoaD1sLnNwbGl0KFwiO1wiKS5yZWR1Y2UoZnVuY3Rpb24oYyxsKXt2YXIgaD1sLnNwbGl0KFwiOlwiKSx6PWhbMF0sdj1oLnNsaWNlKDEpO3JldHVybiB6JiYwPHYubGVuZ3RoJiYoY1t6XT12LmpvaW4oXCI6XCIpLnRyaW0oKSksY30se30pKSxofTtmdW5jdGlvbiBqYyhjKXtmb3IodmFyIGw9XCJcIixoPTA7aDxjLmxlbmd0aDtoKyspe2wrPShcIjAwMFwiK2MuY2hhckNvZGVBdChoKS50b1N0cmluZygxNikpLnNsaWNlKC00KX1yZXR1cm4gbH12YXIgT2M9ZnVuY3Rpb24oYyl7dmFyIGwsaCx6PWMuZ2V0QXR0cmlidXRlKFwiZGF0YS1wcmVmaXhcIiksdj1jLmdldEF0dHJpYnV0ZShcImRhdGEtaWNvblwiKSxtPXZvaWQgMCE9PWMuaW5uZXJUZXh0P2MuaW5uZXJUZXh0LnRyaW0oKTpcIlwiLHM9ZGMoVShjKSk7cmV0dXJuIHomJnYmJihzLnByZWZpeD16LHMuaWNvbk5hbWU9dikscy5wcmVmaXgmJjE8bS5sZW5ndGg/cy5pY29uTmFtZT0obD1zLnByZWZpeCxoPWMuaW5uZXJUZXh0LG5jW2xdW2hdKTpzLnByZWZpeCYmMT09PW0ubGVuZ3RoJiYocy5pY29uTmFtZT1DYyhzLnByZWZpeCxqYyhjLmlubmVyVGV4dCkpKSxzfSxOYz1mdW5jdGlvbihjKXt2YXIgbD17c2l6ZToxNix4OjAseTowLGZsaXBYOiExLGZsaXBZOiExLHJvdGF0ZTowfTtyZXR1cm4gYz9jLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpLnJlZHVjZShmdW5jdGlvbihjLGwpe3ZhciBoPWwudG9Mb3dlckNhc2UoKS5zcGxpdChcIi1cIiksej1oWzBdLHY9aC5zbGljZSgxKS5qb2luKFwiLVwiKTtpZih6JiZcImhcIj09PXYpcmV0dXJuIGMuZmxpcFg9ITAsYztpZih6JiZcInZcIj09PXYpcmV0dXJuIGMuZmxpcFk9ITAsYztpZih2PXBhcnNlRmxvYXQodiksaXNOYU4odikpcmV0dXJuIGM7c3dpdGNoKHope2Nhc2VcImdyb3dcIjpjLnNpemU9Yy5zaXplK3Y7YnJlYWs7Y2FzZVwic2hyaW5rXCI6Yy5zaXplPWMuc2l6ZS12O2JyZWFrO2Nhc2VcImxlZnRcIjpjLng9Yy54LXY7YnJlYWs7Y2FzZVwicmlnaHRcIjpjLng9Yy54K3Y7YnJlYWs7Y2FzZVwidXBcIjpjLnk9Yy55LXY7YnJlYWs7Y2FzZVwiZG93blwiOmMueT1jLnkrdjticmVhaztjYXNlXCJyb3RhdGVcIjpjLnJvdGF0ZT1jLnJvdGF0ZSt2fXJldHVybiBjfSxsKTpsfSxFYz1mdW5jdGlvbihjKXtyZXR1cm4gTmMoYy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZhLXRyYW5zZm9ybVwiKSl9LFBjPWZ1bmN0aW9uKGMpe3ZhciBsPWMuZ2V0QXR0cmlidXRlKFwiZGF0YS1mYS1zeW1ib2xcIik7cmV0dXJuIG51bGwhPT1sJiYoXCJcIj09PWx8fGwpfSxUYz1mdW5jdGlvbihjKXt2YXIgbD1CKGMuYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uKGMsbCl7cmV0dXJuXCJjbGFzc1wiIT09Yy5uYW1lJiZcInN0eWxlXCIhPT1jLm5hbWUmJihjW2wubmFtZV09bC52YWx1ZSksY30se30pLGg9Yy5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKTtyZXR1cm4gRS5hdXRvQTExeSYmKGg/bFtcImFyaWEtbGFiZWxsZWRieVwiXT1FLnJlcGxhY2VtZW50Q2xhc3MrXCItdGl0bGUtXCIrWCgpOmxbXCJhcmlhLWhpZGRlblwiXT1cInRydWVcIiksbH0sX2M9ZnVuY3Rpb24oYyl7dmFyIGw9Yy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZhLW1hc2tcIik7cmV0dXJuIGw/ZGMobC5zcGxpdChcIiBcIikubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnRyaW0oKX0pKTp1YygpfSxSYz17aWNvbk5hbWU6bnVsbCx0aXRsZTpudWxsLHByZWZpeDpudWxsLHRyYW5zZm9ybTpXLHN5bWJvbDohMSxtYXNrOm51bGwsZXh0cmE6e2NsYXNzZXM6W10sc3R5bGVzOnt9LGF0dHJpYnV0ZXM6e319fTtmdW5jdGlvbiBGYyhjKXt0aGlzLm5hbWU9XCJNaXNzaW5nSWNvblwiLHRoaXMubWVzc2FnZT1jfHxcIkljb24gdW5hdmFpbGFibGVcIix0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfShGYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1GYzt2YXIgSWM9e2ZpbGw6XCJjdXJyZW50Q29sb3JcIn0sV2M9e2F0dHJpYnV0ZVR5cGU6XCJYTUxcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixkdXI6XCIyc1wifSxZYz17dGFnOlwicGF0aFwiLGF0dHJpYnV0ZXM6QSh7fSxJYyx7ZDpcIk0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHpcIn0pfSxEYz1BKHt9LFdjLHthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwifSksWGM9e3RhZzpcImdcIixjaGlsZHJlbjpbWWMse3RhZzpcImNpcmNsZVwiLGF0dHJpYnV0ZXM6QSh7fSxJYyx7Y3g6XCIyNTZcIixjeTpcIjM2NFwiLHI6XCIyOFwifSksY2hpbGRyZW46W3t0YWc6XCJhbmltYXRlXCIsYXR0cmlidXRlczpBKHt9LFdjLHthdHRyaWJ1dGVOYW1lOlwiclwiLHZhbHVlczpcIjI4OzE0OzI4OzI4OzE0OzI4O1wifSl9LHt0YWc6XCJhbmltYXRlXCIsYXR0cmlidXRlczpBKHt9LERjLHt2YWx1ZXM6XCIxOzA7MTsxOzA7MTtcIn0pfV19LHt0YWc6XCJwYXRoXCIsYXR0cmlidXRlczpBKHt9LEljLHtvcGFjaXR5OlwiMVwiLGQ6XCJNMjYzLjcsMzEyaC0xNmMtNi42LDAtMTItNS40LTEyLTEyYzAtNzEsNzcuNC02My45LDc3LjQtMTA3LjhjMC0yMC0xNy44LTQwLjItNTcuNC00MC4yYy0yOS4xLDAtNDQuMyw5LjYtNTkuMiwyOC43IGMtMy45LDUtMTEuMSw2LTE2LjIsMi40bC0xMy4xLTkuMmMtNS42LTMuOS02LjktMTEuOC0yLjYtMTcuMmMyMS4yLTI3LjIsNDYuNC00NC43LDkxLjItNDQuN2M1Mi4zLDAsOTcuNCwyOS44LDk3LjQsODAuMiBjMCw2Ny42LTc3LjQsNjMuNS03Ny40LDEwNy44QzI3NS43LDMwNi42LDI3MC4zLDMxMiwyNjMuNywzMTJ6XCJ9KSxjaGlsZHJlbjpbe3RhZzpcImFuaW1hdGVcIixhdHRyaWJ1dGVzOkEoe30sRGMse3ZhbHVlczpcIjE7MDswOzA7MDsxO1wifSl9XX0se3RhZzpcInBhdGhcIixhdHRyaWJ1dGVzOkEoe30sSWMse29wYWNpdHk6XCIwXCIsZDpcIk0yMzIuNSwxMzQuNWw3LDE2OGMwLjMsNi40LDUuNiwxMS41LDEyLDExLjVoOWM2LjQsMCwxMS43LTUuMSwxMi0xMS41bDctMTY4YzAuMy02LjgtNS4yLTEyLjUtMTItMTIuNWgtMjMgQzIzNy43LDEyMiwyMzIuMiwxMjcuNywyMzIuNSwxMzQuNXpcIn0pLGNoaWxkcmVuOlt7dGFnOlwiYW5pbWF0ZVwiLGF0dHJpYnV0ZXM6QSh7fSxEYyx7dmFsdWVzOlwiMDswOzE7MTswOzA7XCJ9KX1dfV19LEJjPVQuc3R5bGVzLFVjPVwiZmEtbGF5ZXJzLXRleHRcIixLYz0vRm9udCBBd2Vzb21lIDUgKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8QnJhbmRzfEZyZWV8UHJvKS8sR2M9e1NvbGlkOlwiZmFzXCIsUmVndWxhcjpcImZhclwiLExpZ2h0OlwiZmFsXCIsQnJhbmRzOlwiZmFiXCJ9LEpjPXs5MDA6XCJmYXNcIiw0MDA6XCJmYXJcIiwzMDA6XCJmYWxcIn07ZnVuY3Rpb24gUWMoYyxsKXt2YXIgaD17Zm91bmQ6ITEsd2lkdGg6NTEyLGhlaWdodDo1MTIsaWNvbjpYY307aWYoYyYmbCYmQmNbbF0mJkJjW2xdW2NdKXt2YXIgej1CY1tsXVtjXTtoPXtmb3VuZDohMCx3aWR0aDp6WzBdLGhlaWdodDp6WzFdLGljb246e3RhZzpcInBhdGhcIixhdHRyaWJ1dGVzOntmaWxsOlwiY3VycmVudENvbG9yXCIsZDp6LnNsaWNlKDQpWzBdfX19fWVsc2UgaWYoYyYmbCYmIUUuc2hvd01pc3NpbmdJY29ucyl0aHJvdyBuZXcgRmMoXCJJY29uIGlzIG1pc3NpbmcgZm9yIHByZWZpeCBcIitsK1wiIHdpdGggaWNvbiBuYW1lIFwiK2MpO3JldHVybiBofWZ1bmN0aW9uIFpjKGMpe3ZhciBsLGgseix2LG0scyxlLGEsdCxNLGYscixpLEgsbixWLG8sQyxMLHU9KGg9T2MobD1jKSx6PWguaWNvbk5hbWUsdj1oLnByZWZpeCxtPWgucmVzdCxzPXFjKGwpLGU9RWMobCksYT1QYyhsKSx0PVRjKGwpLE09X2MobCkse2ljb25OYW1lOnosdGl0bGU6bC5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKSxwcmVmaXg6dix0cmFuc2Zvcm06ZSxzeW1ib2w6YSxtYXNrOk0sZXh0cmE6e2NsYXNzZXM6bSxzdHlsZXM6cyxhdHRyaWJ1dGVzOnR9fSk7cmV0dXJufnUuZXh0cmEuY2xhc3Nlcy5pbmRleE9mKFVjKT9mdW5jdGlvbihjLGwpe3ZhciBoPWwudGl0bGUsej1sLnRyYW5zZm9ybSx2PWwuZXh0cmEsbT1udWxsLHM9bnVsbDtpZihwKXt2YXIgZT1wYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGMpLmZvbnRTaXplLDEwKSxhPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bT1hLndpZHRoL2Uscz1hLmhlaWdodC9lfXJldHVybiBFLmF1dG9BMTF5JiYhaCYmKHYuYXR0cmlidXRlc1tcImFyaWEtaGlkZGVuXCJdPVwidHJ1ZVwiKSxbYyxtYyh7Y29udGVudDpjLmlubmVySFRNTCx3aWR0aDptLGhlaWdodDpzLHRyYW5zZm9ybTp6LHRpdGxlOmgsZXh0cmE6dix3YXRjaGFibGU6ITB9KV19KGMsdSk6KGY9YyxpPShyPXUpLmljb25OYW1lLEg9ci50aXRsZSxuPXIucHJlZml4LFY9ci50cmFuc2Zvcm0sbz1yLnN5bWJvbCxDPXIubWFzayxMPXIuZXh0cmEsW2YsdmMoe2ljb25zOnttYWluOlFjKGksbiksbWFzazpRYyhDLmljb25OYW1lLEMucHJlZml4KX0scHJlZml4Om4saWNvbk5hbWU6aSx0cmFuc2Zvcm06VixzeW1ib2w6byxtYXNrOkMsdGl0bGU6SCxleHRyYTpMLHdhdGNoYWJsZTohMH0pXSl9ZnVuY3Rpb24gJGMoYyl7aWYoTSl7dmFyIGw9TWMuYmVnaW4oXCJzZWFyY2hQc2V1ZG9FbGVtZW50c1wiKTtrYz0hMCxmdW5jdGlvbigpe0IoYy5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiEoYy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuaGVhZHx8fkwuaW5kZXhPZihjLnRhZ05hbWUudG9VcHBlckNhc2UoKSl8fGMuZ2V0QXR0cmlidXRlKG4pfHxjLnBhcmVudE5vZGUmJlwic3ZnXCI9PT1jLnBhcmVudE5vZGUudGFnTmFtZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKGYpe1tcIjpiZWZvcmVcIixcIjphZnRlclwiXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPUIoZi5jaGlsZHJlbikuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBjLmdldEF0dHJpYnV0ZShuKT09PWx9KVswXSxoPXIuZ2V0Q29tcHV0ZWRTdHlsZShmLGwpLHo9aC5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9udC1mYW1pbHlcIikubWF0Y2goS2MpLHY9aC5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9udC13ZWlnaHRcIik7aWYoYyYmIXopZi5yZW1vdmVDaGlsZChjKTtlbHNlIGlmKHope3ZhciBtPWguZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRcIikscz1+W1wiTGlnaHRcIixcIlJlZ3VsYXJcIixcIlNvbGlkXCJdLmluZGV4T2YoelsxXSk/R2NbelsxXV06SmNbdl0sZT1DYyhzLGpjKDM9PT1tLmxlbmd0aD9tLnN1YnN0cigxLDEpOm0pKTtpZighY3x8Yy5nZXRBdHRyaWJ1dGUoVikhPT1zfHxjLmdldEF0dHJpYnV0ZShvKSE9PWUpe2MmJmYucmVtb3ZlQ2hpbGQoYyk7dmFyIGE9UmMuZXh0cmE7YS5hdHRyaWJ1dGVzW25dPWw7dmFyIHQ9dmMoQSh7fSxSYyx7aWNvbnM6e21haW46UWMoZSxzKSxtYXNrOnVjKCl9LHByZWZpeDpzLGljb25OYW1lOmUsZXh0cmE6YSx3YXRjaGFibGU6ITB9KSksTT1pLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIik7XCI6YmVmb3JlXCI9PT1sP2YuaW5zZXJ0QmVmb3JlKE0sZi5maXJzdENoaWxkKTpmLmFwcGVuZENoaWxkKE0pLE0ub3V0ZXJIVE1MPXQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiYyhjKX0pLmpvaW4oXCJcXG5cIil9fX0pfSl9KCksa2M9ITEsbCgpfX1mdW5jdGlvbiBjbChjKXt2YXIgbD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZihNKXt2YXIgaD1pLmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Qsej1mdW5jdGlvbihjKXtyZXR1cm4gaC5hZGQoQytcIi1cIitjKX0sdj1mdW5jdGlvbihjKXtyZXR1cm4gaC5yZW1vdmUoQytcIi1cIitjKX0sbT1PYmplY3Qua2V5cyhCYykscz1bXCIuXCIrVWMrXCI6bm90KFtcIitnK1wiXSlcIl0uY29uY2F0KG0ubWFwKGZ1bmN0aW9uKGMpe3JldHVyblwiLlwiK2MrXCI6bm90KFtcIitnK1wiXSlcIn0pKS5qb2luKFwiLCBcIik7aWYoMCE9PXMubGVuZ3RoKXt2YXIgZT1CKGMucXVlcnlTZWxlY3RvckFsbChzKSk7aWYoMDxlLmxlbmd0aCl7eihcInBlbmRpbmdcIiksdihcImNvbXBsZXRlXCIpO3ZhciBhPU1jLmJlZ2luKFwib25UcmVlXCIpLHQ9ZS5yZWR1Y2UoZnVuY3Rpb24oYyxsKXt0cnl7dmFyIGg9WmMobCk7aCYmYy5wdXNoKGgpfWNhdGNoKGMpe3V8fGMgaW5zdGFuY2VvZiBGYyYmY29uc29sZS5lcnJvcihjKX1yZXR1cm4gY30sW10pO2EoKSx5Yyh0LGZ1bmN0aW9uKCl7eihcImFjdGl2ZVwiKSx6KFwiY29tcGxldGVcIiksdihcInBlbmRpbmdcIiksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbCgpfSl9fX19ZnVuY3Rpb24gbGwoYyl7dmFyIGw9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsaD1aYyhjKTtoJiZ5YyhbaF0sbCl9dmFyIGhsPWZ1bmN0aW9uKCl7dmFyIGM9SCxsPUUuZmFtaWx5UHJlZml4LGg9RS5yZXBsYWNlbWVudENsYXNzLHo9XCJzdmc6bm90KDpyb290KS5zdmctaW5saW5lLS1mYXtvdmVyZmxvdzp2aXNpYmxlfS5zdmctaW5saW5lLS1mYXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MWVtO292ZXJmbG93OnZpc2libGU7dmVydGljYWwtYWxpZ246LS4xMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtbGd7dmVydGljYWwtYWxpZ246LS4yMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xe3dpZHRoOi4wNjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMnt3aWR0aDouMTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctM3t3aWR0aDouMTg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTR7d2lkdGg6LjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctNXt3aWR0aDouMzEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTZ7d2lkdGg6LjM3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTd7d2lkdGg6LjQzNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy04e3dpZHRoOi41ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctOXt3aWR0aDouNTYyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTEwe3dpZHRoOi42MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMXt3aWR0aDouNjg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTEye3dpZHRoOi43NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTEze3dpZHRoOi44MTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTR7d2lkdGg6Ljg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE1e3dpZHRoOi45Mzc1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTZ7d2lkdGg6MWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE3e3dpZHRoOjEuMDYyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE4e3dpZHRoOjEuMTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTl7d2lkdGg6MS4xODc1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMjB7d2lkdGg6MS4yNWVtfS5zdmctaW5saW5lLS1mYS5mYS1wdWxsLWxlZnR7bWFyZ2luLXJpZ2h0Oi4zZW07d2lkdGg6YXV0b30uc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtO3dpZHRoOmF1dG99LnN2Zy1pbmxpbmUtLWZhLmZhLWJvcmRlcntoZWlnaHQ6MS41ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWxpe3dpZHRoOjJlbX0uc3ZnLWlubGluZS0tZmEuZmEtZnd7d2lkdGg6MS4yNWVtfS5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhe2JvdHRvbTowO2xlZnQ6MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS5mYS1sYXllcnN7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjotLjEyNWVtO3dpZHRoOjFlbX0uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYXstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcjt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXJ9LmZhLWxheWVycy1jb3VudGVyLC5mYS1sYXllcnMtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcn0uZmEtbGF5ZXJzLXRleHR7bGVmdDo1MCU7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyfS5mYS1sYXllcnMtY291bnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjI1M2E7Ym9yZGVyLXJhZGl1czoxZW07LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiNmZmY7aGVpZ2h0OjEuNWVtO2xpbmUtaGVpZ2h0OjE7bWF4LXdpZHRoOjVlbTttaW4td2lkdGg6MS41ZW07b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjI1ZW07cmlnaHQ6MDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RvcDowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC4yNSk7dHJhbnNmb3JtOnNjYWxlKC4yNSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOnRvcCByaWdodDt0cmFuc2Zvcm0tb3JpZ2luOnRvcCByaWdodH0uZmEtbGF5ZXJzLWJvdHRvbS1yaWdodHtib3R0b206MDtyaWdodDowO3RvcDphdXRvOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC4yNSk7dHJhbnNmb3JtOnNjYWxlKC4yNSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSByaWdodDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSByaWdodH0uZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0e2JvdHRvbTowO2xlZnQ6MDtyaWdodDphdXRvO3RvcDphdXRvOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC4yNSk7dHJhbnNmb3JtOnNjYWxlKC4yNSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBsZWZ0O3RyYW5zZm9ybS1vcmlnaW46Ym90dG9tIGxlZnR9LmZhLWxheWVycy10b3AtcmlnaHR7cmlnaHQ6MDt0b3A6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHR9LmZhLWxheWVycy10b3AtbGVmdHtsZWZ0OjA7cmlnaHQ6YXV0bzt0b3A6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBsZWZ0fS5mYS1sZ3tmb250LXNpemU6MS4zMzMzM2VtO2xpbmUtaGVpZ2h0Oi43NWVtO3ZlcnRpY2FsLWFsaWduOi0uMDY2N2VtfS5mYS14c3tmb250LXNpemU6Ljc1ZW19LmZhLXNte2ZvbnQtc2l6ZTouODc1ZW19LmZhLTF4e2ZvbnQtc2l6ZToxZW19LmZhLTJ4e2ZvbnQtc2l6ZToyZW19LmZhLTN4e2ZvbnQtc2l6ZTozZW19LmZhLTR4e2ZvbnQtc2l6ZTo0ZW19LmZhLTV4e2ZvbnQtc2l6ZTo1ZW19LmZhLTZ4e2ZvbnQtc2l6ZTo2ZW19LmZhLTd4e2ZvbnQtc2l6ZTo3ZW19LmZhLTh4e2ZvbnQtc2l6ZTo4ZW19LmZhLTl4e2ZvbnQtc2l6ZTo5ZW19LmZhLTEweHtmb250LXNpemU6MTBlbX0uZmEtZnd7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MS4yNWVtfS5mYS11bHtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW4tbGVmdDoyLjVlbTtwYWRkaW5nLWxlZnQ6MH0uZmEtdWw+bGl7cG9zaXRpb246cmVsYXRpdmV9LmZhLWxpe2xlZnQ6LTJlbTtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoyZW07bGluZS1oZWlnaHQ6aW5oZXJpdH0uZmEtYm9yZGVye2JvcmRlcjpzb2xpZCAuMDhlbSAjZWVlO2JvcmRlci1yYWRpdXM6LjFlbTtwYWRkaW5nOi4yZW0gLjI1ZW0gLjE1ZW19LmZhLXB1bGwtbGVmdHtmbG9hdDpsZWZ0fS5mYS1wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5mYS5mYS1wdWxsLWxlZnQsLmZhYi5mYS1wdWxsLWxlZnQsLmZhbC5mYS1wdWxsLWxlZnQsLmZhci5mYS1wdWxsLWxlZnQsLmZhcy5mYS1wdWxsLWxlZnR7bWFyZ2luLXJpZ2h0Oi4zZW19LmZhLmZhLXB1bGwtcmlnaHQsLmZhYi5mYS1wdWxsLXJpZ2h0LC5mYWwuZmEtcHVsbC1yaWdodCwuZmFyLmZhLXB1bGwtcmlnaHQsLmZhcy5mYS1wdWxsLXJpZ2h0e21hcmdpbi1sZWZ0Oi4zZW19LmZhLXNwaW57LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOmZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyfS5mYS1wdWxzZXstd2Via2l0LWFuaW1hdGlvbjpmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO2FuaW1hdGlvbjpmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpfUAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwKTt0cmFuc2Zvcm06cm90YXRlKDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDApO3RyYW5zZm9ybTpyb3RhdGUoMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5mYS1yb3RhdGUtOTB7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZmEtcm90YXRlLTE4MHstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmZhLXJvdGF0ZS0yNzB7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDI3MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfS5mYS1mbGlwLWhvcml6b250YWx7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpfS5mYS1mbGlwLXZlcnRpY2Fsey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEsLTEpO3RyYW5zZm9ybTpzY2FsZSgxLC0xKX0uZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWx7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsLTEpO3RyYW5zZm9ybTpzY2FsZSgtMSwtMSl9OnJvb3QgLmZhLWZsaXAtaG9yaXpvbnRhbCw6cm9vdCAuZmEtZmxpcC12ZXJ0aWNhbCw6cm9vdCAuZmEtcm90YXRlLTE4MCw6cm9vdCAuZmEtcm90YXRlLTI3MCw6cm9vdCAuZmEtcm90YXRlLTkwey13ZWJraXQtZmlsdGVyOm5vbmU7ZmlsdGVyOm5vbmV9LmZhLXN0YWNre2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MmVtfS5mYS1zdGFjay0xeCwuZmEtc3RhY2stMnh7Ym90dG9tOjA7bGVmdDowO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTF4e2hlaWdodDoxZW07d2lkdGg6MWVtfS5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeHtoZWlnaHQ6MmVtO3dpZHRoOjJlbX0uZmEtaW52ZXJzZXtjb2xvcjojZmZmfS5zci1vbmx5e2JvcmRlcjowO2NsaXA6cmVjdCgwLDAsMCwwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsLnNyLW9ubHktZm9jdXNhYmxlOmZvY3Vze2NsaXA6YXV0bztoZWlnaHQ6YXV0bzttYXJnaW46MDtvdmVyZmxvdzp2aXNpYmxlO3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDphdXRvfVwiO2lmKFwiZmFcIiE9PWx8fGghPT1jKXt2YXIgdj1uZXcgUmVnRXhwKFwiXFxcXC5mYVxcXFwtXCIsXCJnXCIpLG09bmV3IFJlZ0V4cChcIlxcXFwuXCIrYyxcImdcIik7ej16LnJlcGxhY2UodixcIi5cIitsK1wiLVwiKS5yZXBsYWNlKG0sXCIuXCIraCl9cmV0dXJuIHp9O2Z1bmN0aW9uIHpsKGMpe3JldHVybntmb3VuZDohMCx3aWR0aDpjWzBdLGhlaWdodDpjWzFdLGljb246e3RhZzpcInBhdGhcIixhdHRyaWJ1dGVzOntmaWxsOlwiY3VycmVudENvbG9yXCIsZDpjLnNsaWNlKDQpWzBdfX19fWZ1bmN0aW9uIHZsKCl7RS5hdXRvQWRkQ3NzJiYhdGwmJihZKGhsKCkpLHRsPSEwKX1mdW5jdGlvbiBtbChsLGMpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobCxcImFic3RyYWN0XCIse2dldDpjfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJodG1sXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBsLmFic3RyYWN0Lm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYmMoYyl9KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxcIm5vZGVcIix7Z2V0OmZ1bmN0aW9uKCl7aWYoTSl7dmFyIGM9aS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBjLmlubmVySFRNTD1sLmh0bWwsYy5jaGlsZHJlbn19fSksbH1mdW5jdGlvbiBzbChjKXt2YXIgbD1jLnByZWZpeCxoPXZvaWQgMD09PWw/XCJmYVwiOmwsej1jLmljb25OYW1lO2lmKHopcmV0dXJuIHBjKGFsLmRlZmluaXRpb25zLGgseil8fHBjKFQuc3R5bGVzLGgseil9dmFyIGVsLGFsPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXtrKHRoaXMsYyksdGhpcy5kZWZpbml0aW9ucz17fX1yZXR1cm4geChjLFt7a2V5OlwiYWRkXCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGw9dGhpcyxjPWFyZ3VtZW50cy5sZW5ndGgsaD1BcnJheShjKSx6PTA7ejxjO3orKyloW3pdPWFyZ3VtZW50c1t6XTt2YXIgdj1oLnJlZHVjZSh0aGlzLl9wdWxsRGVmaW5pdGlvbnMse30pO09iamVjdC5rZXlzKHYpLmZvckVhY2goZnVuY3Rpb24oYyl7bC5kZWZpbml0aW9uc1tjXT1BKHt9LGwuZGVmaW5pdGlvbnNbY118fHt9LHZbY10pLGZ1bmN0aW9uIGMobCx6KXt2YXIgaD1PYmplY3Qua2V5cyh6KS5yZWR1Y2UoZnVuY3Rpb24oYyxsKXt2YXIgaD16W2xdO3JldHVybiBoLmljb24/Y1toLmljb25OYW1lXT1oLmljb246Y1tsXT1oLGN9LHt9KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBULmhvb2tzLmFkZFBhY2s/VC5ob29rcy5hZGRQYWNrKGwsaCk6VC5zdHlsZXNbbF09QSh7fSxULnN0eWxlc1tsXXx8e30saCksXCJmYXNcIj09PWwmJmMoXCJmYVwiLHopfShjLHZbY10pfSl9fSx7a2V5OlwicmVzZXRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnM9e319fSx7a2V5OlwiX3B1bGxEZWZpbml0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKG0sYyl7dmFyIHM9Yy5wcmVmaXgmJmMuaWNvbk5hbWUmJmMuaWNvbj97MDpjfTpjO3JldHVybiBPYmplY3Qua2V5cyhzKS5tYXAoZnVuY3Rpb24oYyl7dmFyIGw9c1tjXSxoPWwucHJlZml4LHo9bC5pY29uTmFtZSx2PWwuaWNvbjttW2hdfHwobVtoXT17fSksbVtoXVt6XT12fSksbX19XSksY30oKSksdGw9ITEsTWw9e2kyc3ZnOmZ1bmN0aW9uKCl7dmFyIGM9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKE0pe3ZsKCk7dmFyIGw9Yy5ub2RlLGg9dm9pZCAwPT09bD9pOmwsej1jLmNhbGxiYWNrLHY9dm9pZCAwPT09ej9mdW5jdGlvbigpe306ejtFLnNlYXJjaFBzZXVkb0VsZW1lbnRzJiYkYyhoKSxjbChoLHYpfX0sY3NzOmhsLGluc2VydENzczpmdW5jdGlvbigpe3RsfHwoWShobCgpKSx0bD0hMCl9LHdhdGNoOmZ1bmN0aW9uKCl7dmFyIGM9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGw9Yy5hdXRvUmVwbGFjZVN2Z1Jvb3QsaD1jLm9ic2VydmVNdXRhdGlvbnNSb290OyExPT09RS5hdXRvUmVwbGFjZVN2ZyYmKEUuYXV0b1JlcGxhY2VTdmc9ITApLEUub2JzZXJ2ZU11dGF0aW9ucz0hMCxGKGZ1bmN0aW9uKCl7aWwoe2F1dG9SZXBsYWNlU3ZnUm9vdDpsfSksQWMoe3RyZWVDYWxsYmFjazpjbCxub2RlQ2FsbGJhY2s6bGwscHNldWRvRWxlbWVudHNDYWxsYmFjazokYyxvYnNlcnZlTXV0YXRpb25zUm9vdDpofSl9KX19LGZsPShlbD1mdW5jdGlvbihjKXt2YXIgbD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30saD1sLnRyYW5zZm9ybSx6PXZvaWQgMD09PWg/VzpoLHY9bC5zeW1ib2wsbT12b2lkIDAhPT12JiZ2LHM9bC5tYXNrLGU9dm9pZCAwPT09cz9udWxsOnMsYT1sLnRpdGxlLHQ9dm9pZCAwPT09YT9udWxsOmEsTT1sLmNsYXNzZXMsZj12b2lkIDA9PT1NP1tdOk0scj1sLmF0dHJpYnV0ZXMsaT12b2lkIDA9PT1yP3t9OnIsSD1sLnN0eWxlcyxuPXZvaWQgMD09PUg/e306SDtpZihjKXt2YXIgVj1jLnByZWZpeCxvPWMuaWNvbk5hbWUsQz1jLmljb247cmV0dXJuIG1sKEEoe3R5cGU6XCJpY29uXCJ9LGMpLGZ1bmN0aW9uKCl7cmV0dXJuIHZsKCksRS5hdXRvQTExeSYmKHQ/aVtcImFyaWEtbGFiZWxsZWRieVwiXT1FLnJlcGxhY2VtZW50Q2xhc3MrXCItdGl0bGUtXCIrWCgpOmlbXCJhcmlhLWhpZGRlblwiXT1cInRydWVcIiksdmMoe2ljb25zOnttYWluOnpsKEMpLG1hc2s6ZT96bChlLmljb24pOntmb3VuZDohMSx3aWR0aDpudWxsLGhlaWdodDpudWxsLGljb246e319fSxwcmVmaXg6VixpY29uTmFtZTpvLHRyYW5zZm9ybTpBKHt9LFcseiksc3ltYm9sOm0sdGl0bGU6dCxleHRyYTp7YXR0cmlidXRlczppLHN0eWxlczpuLGNsYXNzZXM6Zn19KX0pfX0sZnVuY3Rpb24oYyl7dmFyIGw9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGg9KGN8fHt9KS5pY29uP2M6c2woY3x8e30pLHo9bC5tYXNrO3JldHVybiB6JiYoej0oenx8e30pLmljb24/ejpzbCh6fHx7fSkpLGVsKGgsQSh7fSxsLHttYXNrOnp9KSl9KSxybD17bm9BdXRvOmZ1bmN0aW9uKCl7RS5hdXRvUmVwbGFjZVN2Zz0hMSxFLm9ic2VydmVNdXRhdGlvbnM9ITEseGMmJnhjLmRpc2Nvbm5lY3QoKX0sY29uZmlnOkUsZG9tOk1sLGxpYnJhcnk6YWwscGFyc2U6e3RyYW5zZm9ybTpmdW5jdGlvbihjKXtyZXR1cm4gTmMoYyl9fSxmaW5kSWNvbkRlZmluaXRpb246c2wsaWNvbjpmbCx0ZXh0OmZ1bmN0aW9uKGMpe3ZhciBsPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxoPWwudHJhbnNmb3JtLHo9dm9pZCAwPT09aD9XOmgsdj1sLnRpdGxlLG09dm9pZCAwPT09dj9udWxsOnYscz1sLmNsYXNzZXMsZT12b2lkIDA9PT1zP1tdOnMsYT1sLmF0dHJpYnV0ZXMsdD12b2lkIDA9PT1hP3t9OmEsTT1sLnN0eWxlcyxmPXZvaWQgMD09PU0/e306TTtyZXR1cm4gbWwoe3R5cGU6XCJ0ZXh0XCIsY29udGVudDpjfSxmdW5jdGlvbigpe3JldHVybiB2bCgpLG1jKHtjb250ZW50OmMsdHJhbnNmb3JtOkEoe30sVyx6KSx0aXRsZTptLGV4dHJhOnthdHRyaWJ1dGVzOnQsc3R5bGVzOmYsY2xhc3NlczpbRS5mYW1pbHlQcmVmaXgrXCItbGF5ZXJzLXRleHRcIl0uY29uY2F0KGooZSkpfX0pfSl9LGNvdW50ZXI6ZnVuY3Rpb24oYyl7dmFyIGw9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGg9bC50aXRsZSx6PXZvaWQgMD09PWg/bnVsbDpoLHY9bC5jbGFzc2VzLG09dm9pZCAwPT09dj9bXTp2LHM9bC5hdHRyaWJ1dGVzLGU9dm9pZCAwPT09cz97fTpzLGE9bC5zdHlsZXMsdD12b2lkIDA9PT1hP3t9OmE7cmV0dXJuIG1sKHt0eXBlOlwiY291bnRlclwiLGNvbnRlbnQ6Y30sZnVuY3Rpb24oKXtyZXR1cm4gdmwoKSxmdW5jdGlvbihjKXt2YXIgbD1jLmNvbnRlbnQsaD1jLnRpdGxlLHo9Yy5leHRyYSx2PUEoe30sei5hdHRyaWJ1dGVzLGg/e3RpdGxlOmh9Ont9LHtjbGFzczp6LmNsYXNzZXMuam9pbihcIiBcIil9KSxtPUooei5zdHlsZXMpOzA8bS5sZW5ndGgmJih2LnN0eWxlPW0pO3ZhciBzPVtdO3JldHVybiBzLnB1c2goe3RhZzpcInNwYW5cIixhdHRyaWJ1dGVzOnYsY2hpbGRyZW46W2xdfSksaCYmcy5wdXNoKHt0YWc6XCJzcGFuXCIsYXR0cmlidXRlczp7Y2xhc3M6XCJzci1vbmx5XCJ9LGNoaWxkcmVuOltoXX0pLHN9KHtjb250ZW50OmMudG9TdHJpbmcoKSx0aXRsZTp6LGV4dHJhOnthdHRyaWJ1dGVzOmUsc3R5bGVzOnQsY2xhc3NlczpbRS5mYW1pbHlQcmVmaXgrXCItbGF5ZXJzLWNvdW50ZXJcIl0uY29uY2F0KGoobSkpfX0pfSl9LGxheWVyOmZ1bmN0aW9uKGMpe3JldHVybiBtbCh7dHlwZTpcImxheWVyXCJ9LGZ1bmN0aW9uKCl7dmwoKTt2YXIgbD1bXTtyZXR1cm4gYyhmdW5jdGlvbihjKXtBcnJheS5pc0FycmF5KGMpP2MubWFwKGZ1bmN0aW9uKGMpe2w9bC5jb25jYXQoYy5hYnN0cmFjdCl9KTpsPWwuY29uY2F0KGMuYWJzdHJhY3QpfSksW3t0YWc6XCJzcGFuXCIsYXR0cmlidXRlczp7Y2xhc3M6RS5mYW1pbHlQcmVmaXgrXCItbGF5ZXJzXCJ9LGNoaWxkcmVuOmx9XX0pfSx0b0h0bWw6YmN9LGlsPWZ1bmN0aW9uKCl7dmFyIGM9KDA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSkuYXV0b1JlcGxhY2VTdmdSb290LGw9dm9pZCAwPT09Yz9pOmM7MDxPYmplY3Qua2V5cyhULnN0eWxlcykubGVuZ3RoJiZNJiZFLmF1dG9SZXBsYWNlU3ZnJiZybC5kb20uaTJzdmcoe25vZGU6bH0pfTshZnVuY3Rpb24oYyl7dHJ5e2MoKX1jYXRjaChjKXtpZighdSl0aHJvdyBjfX0oZnVuY3Rpb24oKXt0JiYoci5Gb250QXdlc29tZXx8KHIuRm9udEF3ZXNvbWU9cmwpLEYoZnVuY3Rpb24oKXtpbCgpLEFjKHt0cmVlQ2FsbGJhY2s6Y2wsbm9kZUNhbGxiYWNrOmxsLHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s6JGN9KX0pKSxULmhvb2tzPUEoe30sVC5ob29rcyx7YWRkUGFjazpmdW5jdGlvbihjLGwpe1Quc3R5bGVzW2NdPUEoe30sVC5zdHlsZXNbY118fHt9LGwpLG9jKCksaWwoKX0sYWRkU2hpbXM6ZnVuY3Rpb24oYyl7dmFyIGw7KGw9VC5zaGltcykucHVzaC5hcHBseShsLGooYykpLG9jKCksaWwoKX19KX0pfSgpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2pzL2FsbC5qc1xuLy8gbW9kdWxlIGlkID0gODlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///89\n");
-
-/***/ })
-/******/ ]); \ No newline at end of file
diff --git a/public/js/app.js.map b/public/js/app.js.map
deleted file mode 100755
index c764d9c..0000000
--- a/public/js/app.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap aaf7f4906e527135f06f","webpack:///./node_modules/axios/lib/utils.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./resources/assets/js/app.js","webpack:///./node_modules/openpgp/dist/openpgp.js","webpack:///./node_modules/vue/dist/vue.common.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./resources/assets/js/bootstrap.js","webpack:///./node_modules/lodash/lodash.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/is-buffer/index.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/btoa.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./resources/assets/js/chat.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","bind","isBuffer","toString","isArray","val","isObject","isFunction","forEach","obj","fn","length","key","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","arguments","extend","a","b","thisArg","trim","str","replace","g","this","Function","eval","e","utils","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","setContentTypeIfUnset","headers","value","adapter","defaults","XMLHttpRequest","process","transformRequest","data","JSON","stringify","transformResponse","parse","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","method","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","push","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","global","isBrowser","longerTimeoutBrowsers","timeoutDuration","userAgent","indexOf","debounce","Promise","called","resolve","then","scheduled","functionToCheck","getStyleComputedProperty","element","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","_getStyleComputedProp","overflow","overflowX","overflowY","test","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","upperSide","undefined","html","scrollingElement","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","height","width","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","descriptor","writable","protoProps","staticProps","_extends","assign","source","getClientRect","offsets","right","left","bottom","top","getBoundingClientRect","rect","scrollTop","scrollLeft","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","_ref","sort","filteredAreas","filter","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","runModifiers","modifiers","ends","slice","prop","findIndex","cur","match","console","warn","enabled","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","getWindow","defaultView","setupEventListeners","options","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","event","callback","scrollParents","isBody","eventsEnabled","disableEventListeners","cancelAnimationFrame","scheduleUpdate","removeEventListener","isNumeric","isNaN","isFinite","setStyles","unit","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","index","reverse","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","offset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","toValue","index2","Defaults","positionFixed","removeOnDestroy","onCreate","onUpdate","shift","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","flip","flipped","originalPlacement","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","inner","subtractLength","hide","bound","attributes","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","position","prefixedProperty","willChange","invertTop","invertLeft","x-placement","arrowStyles","applyStyle","setAttribute","removeAttribute","onLoad","modifierOptions","Popper","_this","requestAnimationFrame","update","isDestroyed","isCreated","jquery","enableEventListeners","removeChild","Utils","PopperUtils","__webpack_exports__","__WEBPACK_AMD_DEFINE_RESULT__","factory","w","noGlobal","getProto","getPrototypeOf","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","type","src","noModule","DOMEval","code","doc","script","createElement","text","head","appendChild","toType","jQuery","selector","context","init","rtrim","isArrayLike","constructor","toArray","num","pushStack","elems","ret","prevObject","each","elem","first","eq","last","j","splice","copy","copyIsArray","clone","deep","isPlainObject","expando","random","isReady","error","msg","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","Symbol","iterator","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","pop","push_native","list","booleans","whitespace","identifier","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","disabledAncestor","addCombinator","disabled","next","childNodes","els","seed","nid","groups","newSelector","newContext","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","getAttribute","toSelector","join","testContext","querySelectorAll","qsaError","cache","cacheLength","markFunction","assert","addHandle","attrs","handler","attrHandle","siblingCheck","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","hasCompare","subWindow","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","idx","not","matcher","unmatched","has","innerText","lang","elemLang","location","root","focus","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","contents","prev","sibling","targets","closest","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","reject","noValue","promise","fail","Callbacks","flag","createOptions","firing","memory","fired","locked","firingIndex","fire","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","always","deferred","catch","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","message","readyException","readyList","completed","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","camelCase","string","acceptData","owner","Data","uid","set","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","rcssNum","cssExpand","isHiddenWithinTree","display","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","values","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","types","one","origFn","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","originalEvent","load","noBubble","trigger","blur","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","rboxStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","finalPropName","cssProps","capName","vendorPropName","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","getClientRects","margin","border","suffix","expand","expanded","parts","propHooks","percent","eased","duration","pos","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","parseInt","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","isTrigger","parentWindow","simulate","triggerHandler","attaches","nonce","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","hasContent","ifModified","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","wrapInner","htmlIsFunction","unwrap","visible","xhr","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","pageYOffset","pageXOffset","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","_jQuery","_$","$","noConflict","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","config","requestData","request","loadEvent","xDomain","XDomainRequest","onprogress","auth","Authorization","paramsSerializer","responseURL","cookies","xsrfValue","withCredentials","read","onDownloadProgress","onUploadProgress","upload","cancelToken","cancel","enhanceError","__CANCEL__","Cancel","openpgp","Vue","require","f","r","u","1","_dereq_","_classCallCheck3","_interopRequireDefault","_createClass3","default","ea_lib","map_addresses","adr","Group","addresses","comments","local","Address","domain","line","startAt","addr","rfc6532","partial","strict","rejectTLD","parseFrom","parseSender","parseReplyTo","display_name","phrase","format","comment","_extract_name","address","email","atext","substr","_quote_no_esc","_match","isAllUpper","isAllLower","nameCase","d1","babel-runtime/helpers/classCallCheck","babel-runtime/helpers/createClass","email-addresses","2","AES_asm","gexp3","glog3","ginit_done","gmul","aes_sbox","aes_sinv","aes_enc","aes_dec","aes_init","_s","ginv","ginit","wrapper","foreign","heap","Uint32Array","asm","stdlib","S0","S1","S2","S3","I0","I1","I2","I3","N0","N1","N2","N3","M0","M1","M2","M3","H0","H1","H2","H3","R","HEAP","DATA","Uint8Array","_core","k","x0","x1","x2","x3","t1","t2","t3","y0","y1","y2","y3","_ecb_enc","_ecb_dec","_cbc_enc","_cbc_dec","_cfb_enc","_cfb_dec","_ofb","_ctr","_gcm_mac","z0","z1","z2","z3","set_rounds","set_state","s0","s1","s2","s3","set_iv","i0","i1","i2","i3","set_nonce","n0","n1","n2","n3","set_mask","m0","m1","m2","m3","set_counter","c0","c1","c2","c3","get_state","get_iv","gcm_init","cipher","mode","_cipher_modes","mac","_mac_modes","set_key","ks","k0","k1","k2","k3","k4","k5","k6","k7","ekeys","subarray","dkeys","rcon","jj","ENC","ECB","CBC","CFB","OFB","CTR","DEC","MAC","GCM","HEAP_DATA","3","AES","_aes","_utils","_errors","iv","counterSize","_heap_init","AES_reset","is_bytes","keylen","IllegalArgumentError","keyview","DataView","byteOffset","byteLength","getUint32","size","mask","pow","is_number","ivview","AES_set_key","AES_set_iv","AES_set_padding","amode","hpos","dpos","dlen","rpos","wlen","_heap_write","presult","prlen","AES_Encrypt_process","plen","rlen","AES_Decrypt_process","pad","SecurityError","pcheck","../errors","../utils","./aes.asm","4","AES_CBC_Decrypt","AES_CBC_Encrypt","AES_CBC","_getPrototypeOf2","_possibleConstructorReturn3","_inherits3","_AES","__proto__","BLOCK_SIZE","AES_Encrypt_finish","AES_Decrypt_finish","_AES_CBC","_AES_CBC2","../aes","babel-runtime/core-js/object/get-prototype-of","babel-runtime/helpers/inherits","babel-runtime/helpers/possibleConstructorReturn","5","_exports","_cbc","encrypt","SyntaxError","_AES_heap_instance","_AES_asm_instance","decrypt","../exports","./cbc","6","AES_CFB_Decrypt","AES_CFB_Encrypt","AES_CFB","_AES_CFB","_AES_CFB2","7","_cfb","./cfb","8","AES_CTR_Crypt","AES_CTR","AES_CTR_set_options","_AES_CTR","_this2","9","AES_CTR_crypt_bytes","./ctr","10","AES_ECB_Decrypt","AES_ECB_Encrypt","AES_ECB","_AES_ECB","_AES_ECB2","11","12","AES_GCM_Decrypt","AES_GCM_Encrypt","AES_GCM","_gcm","adata","tagSize","./gcm","13","_aes2","AES_GCM_reset","AES_GCM_encrypt","AES_GCM_decrypt","RangeError","alen","clen","gamma0","tlen","IllegalStateError","atag","acheck","result1","AES_GCM_Decrypt_process","result2","AES_GCM_Decrypt_finish","AES_GCM_Encrypt_process","AES_GCM_Encrypt_finish","noncelen","noncebuf","_gcm_mac_process","nonceview","_AES_GCM","_AES_GCM2","../../errors","../../utils","../aes.asm","14","_create","_create2","babel-runtime/core-js/object/create","15","hash_reset","hash_process","is_string","string_to_bytes","is_buffer","hlen","hash_finish","HASH_SIZE","16","SHA256","_sha","sha256_bytes","get_sha256_instance","sha256_constructor","bytes","hex","bytes_to_hex","base64","bytes_to_base64","./sha256","17","sha256_asm","H4","H5","H6","H7","TOTAL0","TOTAL1","I4","I5","I6","I7","O0","O1","O2","O3","O4","O5","O6","O7","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","h","_core_heap","_state_to_heap","output","h0","h1","h2","h3","h4","h5","h6","h7","total0","total1","hashed","hmac_reset","_hmac_opad","hmac_init","p0","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","hmac_finish","t0","t4","t5","t6","t7","pbkdf2_generate_block","block","18","_sha256_hash_size","_sha256_block_size","sha256_instance","heapSize","_hash","NAME","sha256_prototype","../hash","./sha256.asm","19","hex_to_bytes","base64_to_bytes","atob","bytes_to_string","pow2_ceil","is_typed_array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","FloatArray","utf8","chars","20","core-js/library/fn/array/from","21","core-js/library/fn/get-iterator","22","core-js/library/fn/is-iterable","23","core-js/library/fn/json/stringify","24","core-js/library/fn/object/assign","25","core-js/library/fn/object/create","26","core-js/library/fn/object/define-property","27","core-js/library/fn/object/entries","28","core-js/library/fn/object/freeze","29","core-js/library/fn/object/get-prototype-of","30","core-js/library/fn/object/set-prototype-of","31","core-js/library/fn/object/values","32","core-js/library/fn/promise","33","core-js/library/fn/symbol","34","core-js/library/fn/symbol/iterator","35","_promise","_promise2","gen","info","../core-js/promise","36","37","_defineProperty","_defineProperty2","../core-js/object/define-property","38","_setPrototypeOf2","_typeof3","subClass","superClass","../core-js/object/create","../core-js/object/set-prototype-of","../helpers/typeof","39","_typeof2","ReferenceError","40","_isIterable3","_getIterator3","_arr","_n","_d","_e","_i","sliceIterator","../core-js/get-iterator","../core-js/is-iterable","41","_iterator2","_symbol2","_typeof","../core-js/symbol","../core-js/symbol/iterator","42","regenerator-runtime","43","b64","placeHoldersCount","toByteArray","placeHolders","Arr","L","revLookup","fromByteArray","uint8","extraBytes","len2","encodeChunk","lookup","44","inherits","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","_init","Buffer","wordSize","parseHex","parseBase","mul","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","out","lo","carry","ncarry","rword","maxJ","groupSize","groupBase","isZero","modn","idivn","toNumber","toJSON","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","res","q","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","hi","zeroBits","toTwos","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","sub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","qj","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","cmpn","invm","bincn","ucmp","gtn","gten","gte","ltn","lten","lte","eqn","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","imulK","outLen","mod3","nOne","lpow","z","inv","wnd","currentLen","mont","45","Rand","rand","generate","_rand","getBytes","getByte","crypto","getRandomValues","msCrypto","randomBytes","46","47","ieee754","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","buf","encodingOrOffset","allocUnsafe","from","fromArrayBuffer","encoding","isEncoding","actual","write","fromString","numberIsNaN","fromArrayLike","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","Number","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","base64Slice","utf8Slice","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","species","poolSize","fill","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","equals","thisStart","thisEnd","thisCopy","targetCopy","includes","toHex","checkOffset","ext","checkInt","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","dst","base64-js","48","../../modules/_core","../../modules/es6.array.fill","49","../../modules/es6.array.find","50","../../modules/es6.array.from","../../modules/es6.string.iterator","51","../../modules/es6.object.assign","52","../modules/_core","../modules/es6.object.to-string","../modules/es6.promise","../modules/es6.string.iterator","../modules/es7.promise.finally","../modules/es7.promise.try","../modules/web.dom.iterable","53","repeat","../../modules/es6.string.repeat","54","../../modules/es6.object.to-string","../../modules/es6.symbol","../../modules/es7.symbol.async-iterator","../../modules/es7.symbol.observable","55","../../modules/es6.typed.uint8-array","56","dup","57","../modules/core.get-iterator","58","../modules/core.is-iterable","59","core","$JSON","it","60","61","$Object","P","create","../../modules/es6.object.create","62","desc","../../modules/es6.object.define-property","63","entries","../../modules/es7.object.entries","64","freeze","../../modules/es6.object.freeze","65","../../modules/es6.object.get-prototype-of","66","setPrototypeOf","../../modules/es6.object.set-prototype-of","67","../../modules/es7.object.values","68","69","70","../../modules/_wks-ext","../../modules/web.dom.iterable","71","72","73","forbiddenField","74","./_is-object","75","toIObject","toLength","toAbsoluteIndex","IS_INCLUDES","$this","fromIndex","O","./_to-absolute-index","./_to-iobject","./_to-length","76","cof","ARG","T","tryGet","callee","./_cof","./_wks","77","78","__e","79","$defineProperty","createDesc","./_object-dp","./_property-desc","80","aFunction","./_a-function","81","82","./_fails","83","./_global","84","85","getKeys","gOPS","pIE","getSymbols","symbols","isEnum","./_object-gops","./_object-keys","./_object-pie","86","$export","own","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","IS_WRAP","W","expProto","virtual","U","./_core","./_ctx","./_hide","87","88","isArrayIter","anObject","getIterFn","BREAK","RETURN","iterable","ITERATOR","iterFn","./_an-object","./_is-array-iter","./_iter-call","./core.get-iterator-method","89","__g","90","91","dP","./_descriptors","92","93","./_dom-create","94","un","95","propertyIsEnumerable","96","Iterators","ArrayProto","./_iterators","97","98","99","100","setToStringTag","IteratorPrototype","./_object-create","./_set-to-string-tag","101","LIBRARY","redefine","$iterCreate","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","methods","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","./_export","./_has","./_iter-create","./_library","./_object-gpo","./_redefine","102","SAFE_CLOSING","riter","skipClosing","safe","iter","103","104","105","106","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","meta","KEY","NEED","fastKey","getWeak","onFreeze","./_uid","107","macrotask","Observer","MutationObserver","WebKitMutationObserver","isNode","flush","exit","enter","standalone","observe","characterData","task","./_task","108","$$resolve","$$reject","109","toObject","IObject","$assign","K","aLen","./_iobject","./_to-object","110","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","contentWindow","close","Properties","./_enum-bug-keys","./_html","./_object-dps","./_shared-key","111","IE8_DOM_DEFINE","toPrimitive","Attributes","./_ie8-dom-define","./_to-primitive","112","113","gOPD","getOwnPropertyDescriptor","114","gOPN","windowNames","getOwnPropertyNames","getWindowNames","./_object-gopn","115","$keys","hiddenKeys","./_object-keys-internal","116","getOwnPropertySymbols","117","ObjectProto","118","names","./_array-includes","119","120","121","fails","exp","122","isEntries","123","124","newPromiseCapability","promiseCapability","./_new-promise-capability","125","bitmap","126","127","128","buggy","./_object-gopd","129","DESCRIPTORS","SPECIES","130","def","stat","131","shared","./_shared","132","store","133","134","toInteger","defined","TO_STRING","./_defined","./_to-integer","135","channel","port","invoke","cel","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","listener","port2","port1","onmessage","postMessage","importScripts","clear","./_invoke","136","137","138","139","140","141","valueOf","142","px","143","wksExt","$Symbol","./_wks-ext","144","145","USE_SYMBOL","146","classof","getIteratorMethod","./_classof","147","getIterator","148","isIterable","149","createProperty","arrayLike","mapfn","mapping","./_create-property","./_iter-detect","150","addToUnscopables","iterated","_t","_k","Arguments","./_add-to-unscopables","./_iter-define","./_iter-step","151","./_object-assign","152","153","154","$freeze","./_meta","./_object-sap","155","$getPrototypeOf","156","./_set-proto","157","158","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","anInstance","forOf","speciesConstructor","microtask","newPromiseCapabilityModule","perform","promiseResolve","$Promise","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","chain","_c","_v","ok","reaction","_h","onHandleUnhandled","onUnhandled","unhandled","isUnhandled","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_w","$resolve","executor","capability","$index","alreadyCalled","race","./_an-instance","./_for-of","./_microtask","./_perform","./_promise-resolve","./_redefine-all","./_set-species","./_species-constructor","159","$at","point","./_string-at","160","$fails","wks","wksDefine","enumKeys","gOPNExt","$GOPD","$DP","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","sym","isSymbol","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","replacer","$replacer","./_enum-keys","./_is-array","./_object-gopn-ext","./_wks-define","161","./_object-to-array","162","$values","163","finally","onFinally","164","try","callbackfn","165","166","167","TO_STRING_TAG","DOMIterables","Collection","./es6.array.iterator","168","169","UNSCOPABLES","170","171","172","copyWithin","inc","173","endPos","174","175","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","./_array-species-create","176","177","./_array-species-constructor","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","SRC","$toString","TPL","inspectSource","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","$typed","$buffer","propertyDesc","redefineAll","toIndex","createArrayMethod","createArrayIncludes","ArrayIterators","$iterDetect","setSpecies","arrayFill","arrayCopyWithin","$ArrayBuffer","$DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","arrayReduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","$map","allocate","LITTLE_ENDIAN","FORCED_SET","toOffset","BYTES","validate","speciesFromList","fromList","addGetter","internal","$from","$of","TO_LOCALE_BUG","$toLocaleString","every","predicate","searchElement","separator","middle","comparefn","begin","$begin","BYTES_PER_ELEMENT","$slice","$iterators","isTAIndex","$getDesc","$setDesc","$TypedArrayPrototype$","CLAMPED","GETTER","SETTER","TypedArray","TAC","ABV","TypedArrayPrototype","addElement","$offset","$length","klass","$len","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","./_array-copy-within","./_array-fill","./_array-methods","./_to-index","./_typed","./_typed-buffer","244","PROTOTYPE","WRONG_INDEX","BaseBuffer","log","LN2","$BUFFER","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","unpackIEEE754","nBits","NaN","unpackI32","packI8","packI16","packI32","packF64","packF32","isLittleEndian","intIndex","_b","pack","conversion","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","245","Typed","TypedArrayConstructors","246","247","248","249","250","251","252","$find","forced","253","254","255","256","257","258","259","./_string-repeat","260","261","./_typed-array","262","263","264","265","266","ArrayValues","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","267","elliptic","curve","curves","ec","eddsa","../package.json","./elliptic/curve","./elliptic/curves","./elliptic/ec","./elliptic/eddsa","./elliptic/utils","brorand","268","getNAF","getJSF","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","_fixedNafMul","doubles","_getDoubles","naf","I","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","enc","pointFromX","encodeCompressed","encode","_encode","compact","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","../../elliptic","bn.js","269","EdwardsCurve","twisted","mOneA","dd","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","pointFromY","isInfinity","normalize","fromJSON","_extDbl","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","other","eqXToP","xc","../curve","270","short","edwards","./base","./edwards","./mont","./short","271","MontCurve","i4","a24","aa","bb","diffAdd","da","cb","jumlAdd","272","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","len1","_endoSplit","v1","v2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","pre","endoMul","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","u1","u2","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","pz3","zs","273","PresetCurve","defineCurve","sha256","sha384","sha512","cofactor","../elliptic","./precomputed/secp256k1","hash.js","274","HmacDRBG","KeyPair","Signature","EC","nh","keyPair","keyFromPrivate","priv","fromPrivate","keyFromPublic","pub","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","ns2","_truncateToN","truncOnly","sign","bkey","getPrivate","ns1","kp","kpX","recoveryParam","canonical","verify","signature","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","./key","./signature","hmac-drbg","275","_importPrivate","privEnc","_importPublic","pubEnc","derive","276","_importDER","getLength","place","octetLen","rmPadding","constructLength","octets","slen","toDER","backHalf","277","parseBytes","EDDSA","pointClass","encodingLength","secret","keyFromSecret","hashInt","messagePrefix","Rencoded","encodePoint","s_","pubBytes","makeSignature","sig","SG","intFromLE","digest","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","278","cachedProperty","_secret","_pub","_pubBytes","privBytes","getSecret","279","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","280","281","minAssert","minUtils","zero2","d2","m8","m14","m24","computer","minimalistic-assert","minimalistic-crypto-utils","282","_from","_id","_inBundle","_location","_phantomChildren","_requested","escapedName","rawSpec","saveSpec","fetchSpec","gitCommittish","_requiredBy","_resolved","_spec","_where","author","bugs","bundleDependencies","dependencies","deprecated","description","devDependencies","brfs","coveralls","grunt","grunt-browserify","grunt-cli","grunt-contrib-connect","grunt-contrib-copy","grunt-contrib-uglify","grunt-mocha-istanbul","grunt-saucelabs","istanbul","jscs","jshint","mocha","files","homepage","keywords","license","main","repository","lint","283","parse5322","inStr","getPos","setPos","initialize","parseString","semantic","ast","child","compareToken","fxnCompare","tok","literal","lit","prod","invis","colwsp","star","minimum","isUTF8NonAscii","cr","crlf","lf","dquote","htab","sp","vchar","accept","wsp","quotedPair","qp","obsQP","fws","obsFws","ctext","obsCtext","ccontent","cfws","atom","dotAtomText","maybeText","dotAtom","qtext","obsQtext","qcontent","quotedString","mailbox","group","nameAddr","addrSpec","displayName","angleAddr","obsAngleAddr","groupList","obsPhrase","mailboxList","obsMboxList","addressList","obsAddrList","obsGroupList","localPart","obsLocalPart","dtext","obsDtext","domainLiteral","obsDomain","obsNoWsCtl","obsRoute","obsDomainList","findNode","findAllNodesNoChildren","namesLookup","giveResult","groupsAndMailboxes","groupOrMailbox","giveResultGroup","giveResultMailbox","simplifyResult","oneResult","groupName","groupResultMailboxes","mailboxes","grabSemantic","aspec","findAllNodes","startProduction","handleOpts","address-list","angle-addr","mailbox-list","reply-to","sender","defs","isNullUndef","parseOneAddress","parseAddressList","emailAddresses","284","sha","ripemd","hmac","sha1","sha224","ripemd160","./hash/common","./hash/hmac","./hash/ripemd","./hash/sha","./hash/utils","285","BlockHash","pending","pendingTotal","blockSize","outSize","padLength","_delta8","_delta32","join32","_update","_pad","_digest","./utils","286","Hmac","Hash","outer","287","rotl32","sum32","sum32_3","sum32_4","RIPEMD160","Kh","Ah","Bh","Ch","Dh","Eh","rh","sh","toHex32","split32","./common","288","./sha/1","./sha/224","./sha/256","./sha/384","./sha/512","289","shaCommon","sum32_5","ft_1","sha1_K","SHA1","../common","290","SHA224","./256","291","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","292","SHA512","SHA384","./512","293","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","bl","cl","dh","dl","eh","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","294","rotr32","p32","295","htonl","zero8","296","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","_hmac","kmac","reseed","addEnc","297","isLE","298","299","equal","300","301","pako","./lib/deflate","./lib/inflate","./lib/utils/common","./lib/zlib/constants","302","zlib_deflate","strings","ZStream","Z_OK","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","level","chunkSize","windowBits","memLevel","strategy","gzip","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","dict","string2buf","deflateSetDictionary","_dict_set","deflate","deflator","_mode","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","chunk","flattenChunks","deflateRaw","./utils/common","./utils/strings","./zlib/deflate","./zlib/messages","./zlib/zstream","303","zlib_inflate","GZheader","Inflate","inflateInit2","inflateGetHeader","inflate","inflator","next_out_utf8","tail","utf8str","allowBufError","Z_FINISH","Z_NO_FLUSH","binstring2buf","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","inflateRaw","ungzip","./zlib/constants","./zlib/gzheader","./zlib/inflate","304","TYPED_OK","_has","sources","fnTyped","src_offs","dest_offs","fnUntyped","setTyped","Buf16","Buf32","305","STR_APPLY_OK","STR_APPLY_UIA_OK","__","_utf8len","m_pos","str_len","buf_len","c_len","utf16buf","306","adler","307","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","308","crcTable","table","makeTable","crc","309","configuration_table","trees","adler32","crc32","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","L_CODES","LITERALS","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","flush_pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","total_in","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","deflateResetKeep","data_type","last_flush","_tr_init","deflateReset","pending_buf_size","gzhead","gzindex","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","max_block_size","max_start","deflateInit","old_flush","beg","hcrc","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","../utils/common","./adler32","./crc32","./messages","./trees","310","xflags","extra_len","311","_in","_out","dmax","wsize","whave","wnext","s_window","lcode","dcode","lmask","dmask","here","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","312","inflate_fast","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","BAD","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","zswap32","inflateResetKeep","havedict","lendyn","distdyn","back","inflateReset","inflateReset2","wbits","flags","ncode","nlen","ndist","have","lens","work","was","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","inf_leave","inflateInfo","./inffast","./inftrees","313","lbase","lext","dbase","dext","lens_index","codes","table_index","incr","low","curr","drop","used","huff","base_index","MAXBITS","offs","extra_index","314","-1","-2","-3","-4","-5","-6","315","STORED_BLOCK","STATIC_TREES","DYN_TREES","LENGTH_CODES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","gen_codes","next_code","init_block","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lc","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","static_init_done","stored_len","copy_block","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","bi_flush","316","317","318","hadRuntime","regeneratorRuntime","oldRuntime","./runtime","319","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","runtime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","isGeneratorFunction","genFun","mark","awrap","__await","defineIteratorMethods","AsyncIterator","innerFn","outerFn","tryLocsList","Context","skipTempReset","sent","_sent","tryEntries","resetTryEntry","rootRecord","completion","rval","dispatchException","exception","loc","caught","record","entry","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","abrupt","finallyEntry","afterLoc","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","_invoke","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","previousPromise","callInvokeWithMethodAndArg","unwrapped","return","pushTryEntry","locs","iteratorMethod","320","Rusha","bundleFn","wkey","cacheKeys","wcache","skey","scache","workerSources","resolveSources","depPath","depKey","URL","webkitURL","mozURL","msURL","blob","Blob","bare","workerUrl","createObjectURL","worker","Worker","objectURL","reader","FileReaderSync","convBuf","H8","H32","om","lm","convStr","readAsArrayBuffer","convBlob","stdlib$1186","foreign$1187","heap$1188","H$1189","hash$1190","k$1191","x$1192","i$1193","j$1194","y0$1195","z0$1196","y1$1197","z1$1198","y2$1199","z2$1200","y3$1201","z3$1202","y4$1203","z4$1204","t0$1205","t1$1206","_classCallCheck","_rusha","resetState","rawEnd","./rusha","webworkify","createHash","runWorker","isDedicatedWorkerScope","isRunningInDedicatedWorker","disableWorkerBehaviour","createWorker","terminate","revokeObjectURL","./hash","./worker","RushaCore","_require","ceilHeapSize","padlen","getRawDigest","padMaxChunkLen","_offset","_maxChunkLen","_padMaxChunkLen","_heap","_h32","_h8","_initState","padMsgLen","_padChunk","chunkLen","msgLen","padChunkLen","bin","h8","align","padZeroes","padData","_write","chunkOffset","_coreCall","finalize","rawDigest","digestFromString","digestFromBuffer","digestFromArrayBuffer","turnOffset","inputLen","getState","setState","./conv","./core.sjs","precomputedHex","arrayBuffer","binarray","isRunningInWorker","WorkerGlobalScope","isRunningInSharedWorker","SharedWorkerGlobalScope","isRunningInServiceWorker","ServiceWorkerGlobalScope","hashFile","hasher","readTotal","FileReader","onloadend","workerBehaviourEnabled","hashData","321","fetch","searchParams","formData","viewClasses","isDataView","isPrototypeOf","Headers","normalizeName","normalizeValue","oldValue","items","iteratorFor","Request","_bodyInit","Body","Response","redirectStatuses","redirect","rawHeaders","credentials","polyfill","consumed","bodyUsed","fileReaderReady","readBlobAsArrayBuffer","bufferClone","_initBody","_bodyText","_bodyBlob","_bodyFormData","_bodyArrayBuffer","rejected","readAsText","readArrayBufferAsText","decode","upcased","referrer","form","decodeURIComponent","bodyInit","322","_regenerator2","_asyncToGenerator3","CleartextMessage","readArmored","armoredText","_armor2","_enums2","armor","signed","packetlist","_packet2","List","checkHashAlgos","hashAlgos","packet","algo","hashAlgorithm","oneHeader","md5","verifyHeaders","_signature","_util2","_message","canonicalizeEOL","removeTrailingSpaces","getSigningKeyIds","keyIds","packets","issuerKeyId","_callee","privateKeys","date","userId","_context","signDetached","_x","_callee2","literalDataPacket","_context2","Literal","setText","createSignaturePackets","_x5","verifyDetached","signatureList","createVerificationObjects","nativeEOL","hashes","item","ar","./encoding/armor","./enums","./message","./packet","./util","babel-runtime/helpers/asyncToGenerator","babel-runtime/regenerator","323","Stream","Util","Bzip2","_freeze2","readByte","_eof","eof","seek","tell","writeByte","EOF","OK","LAST_BLOCK","NOT_BZIP_DATA","UNEXPECTED_INPUT_EOF","UNEXPECTED_OUTPUT_EOF","DATA_ERROR","OUT_OF_MEMORY","OBSOLETE_INPUT","END_OF_BLOCK","writePos","writeCurrent","writeCount","_start_bunzip","_init_block","_get_next_block","blockCRC","makeU8Buffer","dbufSize","nextoutput","outputStream","streamCRC","readBits","targetBlockCRC","makeU16Buffer","makeU32Buffer","minLen","maxLen","MAX_VALUE","dbuf","writeRun","_read_bunzip","outputsize","updateCRCRun","getCRC","Err","coerceInputStream","coerceOutputStream","stream","retval","decodeBlock","seekBit","writeCopies","tellBit","allocateHuffmanCodeLengths","codeLengths","computeCanonical","cost","writeBits","writeBit","updateCRC","bwtransform2","compressFile","decompressFile","decompressBlock","readBit","makeS32Buffer","_o","_u","suffixsort","bwtransform","unbwtransform","resizeOk","getBuffer","compressFileHelper","writeUnsignedNumber","decompressFileHelper","readUnsignedNumber","compressWithModel","decompressWithModel","arraycopy","fls","log2c","_r","_process","babel-runtime/core-js/object/freeze","babel-runtime/helpers/typeof","324","_enums","prefer_hash_algorithm","encryption_cipher","symmetric","aes256","compression","uncompressed","deflate_level","aead_protect","aead_protect_version","aead_mode","aead","eax","aead_chunk_size_byte","s2k_iteration_count_byte","integrity_protect","ignore_mdc_error","checksum_required","rsa_blinding","password_collision_check","revocations_expire","use_native","zero_copy","debug","tolerant","show_version","show_comment","versionstring","commentstring","keyserver","node_store","../enums","325","_config","./config.js","326","_cipher2","unpack","createArrayBuffer","aes","IV","../util","./cipher","327","_cipher","prefixrandom","cipherfn","plaintext","resync","block_size","FR","FRE","new_prefix","ciphertext","mdc","iblock","ablock","normalEncrypt","blocki","blockc","cyphertext","encblock","normalDecrypt","blockp","decblock","328","_ecb","aes_ecb","keySize","asmcrypto.js/src/aes/ecb/ecb","asmcrypto.js/src/aes/exports","329","Blowfish","BF","bf","encrypt_block","BLOCKSIZE","SBOXES","PARRAY","NN","_clean","_F","cc","sboxes","_encrypt_block","vals","dataL","dataR","ii","parray","vector","_decrypt_block","kk","330","Cast5","cast5","BlockSize","KeySize","setKey","masking","rotate","keySchedule","getBlockSize","f1","f2","f3","scheduleA","scheduleB","sBox","inn","ki","331","des","spfunction1","spfunction2","spfunction3","spfunction4","spfunction5","spfunction6","spfunction7","spfunction8","right1","right2","looping","cbcleft","cbcleft2","cbcright","cbcright2","endloop","loopinc","iterations","paddedMessage","des_addPadding","des_removePadding","des_createKeys","pc2bytes0","pc2bytes1","pc2bytes2","pc2bytes3","pc2bytes4","pc2bytes5","pc2bytes6","pc2bytes7","pc2bytes8","pc2bytes9","pc2bytes10","pc2bytes11","pc2bytes12","pc2bytes13","shifts","lefttemp","righttemp","TripleDES","DES","332","_des2","_cast2","_twofish2","_blowfish2","aes128","aes192","tripledes","twofish","blowfish","idea","./aes","./blowfish","./cast5","./des.js","./twofish","333","_from2","MAXINT","rotw","getW","setW","getB","TF","tf","keyBytes","dataBytes","dataOffset","tfsKey","tfsM","tfsG0","tfsG1","tfsFrnd","blk","tfsIrnd","blocksize","meKey","moKey","inKey","kLen","sKey","f01","f5b","fef","q0","q3","ror4","ashx","ffm5b","ffmEf","mdsRem","hFun","createTwofish","babel-runtime/core-js/array/from","334","_ref3","_callee6","_context6","getWebCrypto","webCrypto","importKey","_ref4","_callee3","pt","_context3","zeroBlock","blockLength","_x4","getNodeCrypto","_ref5","_callee4","en","_context4","nodeCrypto","createCipheriv","_ref6","_callee5","_context5","_x6","_x3","getNodeBuffer","rightXorMut","padding2","padded","cbc","double","_x2","asmcrypto.js/src/aes/cbc/exports","335","_public_key2","_random2","_ecdh_symkey2","_kdf_params2","_mpi2","_oid2","constructParams","publicKeyEncrypt","pub_params","fingerprint","getEncSessionKeyParamTypes","_m","_res","oid","kdf_params","_res2","publicKey","rsa_encrypt","rsa_encrypt_sign","elgamal","ecdh","toBN","rsa","toUint8Array","publicKeyDecrypt","key_params","data_params","_p","_x7","_x8","getPrivKeyParamTypes","rsa_sign","dsa","ecdsa","getPubKeyParamTypes","generateParams","keyObject","getPrefixRandom","getRandomBytes","generateSessionKey","../type/ecdh_symkey","../type/kdf_params","../type/mpi","../type/oid","./public_key","./random","336","_slicedToArray3","OMAC","cmac","_cmac2","concatUint8Array","final","EAX","_callee8","_ref7","_ref8","omac","ctr","_context8","_ref9","_ref10","_ref11","omacNonce","omacAdata","ciphered","omacCiphered","tagLength","_x11","_x12","_x13","_ref12","_callee7","ctTag","_ref13","_ref14","_context7","equalsUint8Array","_x14","_x15","_x16","_x9","_x10","ivLength","getNonce","chunkIndex","./cmac","asmcrypto.js/src/aes/ctr/exports","babel-runtime/core-js/promise","babel-runtime/helpers/slicedToArray","337","_key","ALGO","additionalData","setAAD","getAuthTag","de","createDecipheriv","setAuthTag","_x17","_x18","_x19","_x20","asmcrypto.js/src/aes/gcm/exports","338","_rusha2","_2","_4","_6","_ripemd","_md2","rusha","node_hash","shasum","hashjs_hash","hex_to_Uint8Array","hash_fns","getHashByteLength","../../util","./md5","asmcrypto.js/src/hash/sha256/exports","hash.js/lib/hash/ripemd","hash.js/lib/hash/sha/224","hash.js/lib/hash/sha/384","hash.js/lib/hash/sha/512","339","_util","md5cycle","gg","ff","add32","cmn","md5blk","md5blks","hex_chr","rhex","entree","substring","md51","Uint8Array_to_str","340","_assign2","_hash2","_cfb2","_gcm2","_eax2","_ocb2","_signature2","_pkcs2","_pkcs4","_crypto2","_aes_kw2","cfb","gcm","experimental_gcm","ocb","pkcs1","pkcs5","aes_kw","./aes_kw","./crypto","./eax","./ocb","./pkcs1","./pkcs5","babel-runtime/core-js/object/assign","341","OCB","maxNtz","encipher","decipher","constructKeyVariables","extendKeyVariables","crypt","paddedNonce","kTop","stretched","shiftRight","checksum","xorMut","ntz","xorInput","sum","cipherInput","newMaxNtz","nbits","mask_x","mask_$","crypted","342","getPkcs1Padding","eme","emsa","hash_headers","M","PS","EM","firstOct","secondOct","psLen","emLen","H","str_to_Uint8Array","tLen","str_to_hex","343","344","_bn2","hash_algo","redp","redq","gred","xred","getLeftNBits","getRandomBN","print_debug","../random","345","mred","yred","c1red","c2red","346","getPreferredHashAlgo","nodeCurves","webCurves","Curve","webGenKeyPair","webCryptoKey","privateKey","generateKey","namedCurve","exportKey","b64_to_Uint8Array","nodeGenKeyPair","createECDH","generateKeys","getPublicKey","getPrivateKey","_elliptic","_key2","p256","p384","p521","knownCurves","getCurves","secp256k1","ed25519","curve25519","brainpoolP256r1","brainpoolP384r1","brainpoolP512r1","keyType","web","payloadSize","oid_or_name","isUint8Array","getName","../../../enums","../../../type/oid","../../../util","../../random","347","cipher_algo","Z","_curves2","buildEcdhParam","kdf","public_algo","X","../../../type/kdf_params","../../aes_kw","../../cipher","../../hash","./curves","348","349","350","_curves","_ecdsa2","_eddsa2","_ecdh2","./ecdh","./ecdsa","./eddsa","351","webSign","kty","crv","Uint8Array_to_b64","use","kid","webHash","webVerify","nodeSign","createSign","ECPrivateKey","parameters","unused","label","ECDSASignature","nodeVerify","createVerify","SubjectPublicKeyInfo","algorithm","subjectPublicKey","_x21","_x22","_x23","asn1","define","seq","int","octstr","optional","any","bitstr","AlgorithmIdentifier","objid","asn1.js","352","_rsa2","_elgamal2","_elliptic2","_dsa2","./dsa","./elgamal","./elliptic","./rsa","353","randomProbablePrime","thirty","adds","isProbablePrime","divisionTest","fermat","millerRabin","rone","rn1","small_primes","354","_prime2","_config2","promisifyIE11Op","keyObj","oncomplete","nred","dq","dp","pred","qred","blinder","unblinder","mp","mq","keyGenOpt","jwk","phi","getWebCryptoAll","subtle","modulusLength","publicExponent","webkitSubtle","../../config","./prime","355","detectNode","RandomBuffer","randomBuffer","modulus","freeSpace","356","msg_MPIs","pub_MPIs","EM2","_oid","_Q","Uint8Array_to_hex","_signature3","_d2","_signature4","Uint8Array_to_MPI","357","_base2","addheader","getCheckSum","crc_table","createcrc24","splitHeaders","matchResult","print_debug_error","splitChecksum","lastEquals","messagetype","partindex","parttotal","multipart_section","multipart_last","public_key","private_key","reSplit","getType","splittext","indexBase","msg_sum","sig_sum","verifyCheckSum","../config","../enums.js","./base64.js","358","b64s","b64u","tl","359","_entries2","byValue","P-256","secp256r1","prime256v1","1.2.840.10045.3.1.7","2a8648ce3d030107","2A8648CE3D030107","P-384","secp384r1","1.3.132.0.34","2b81040022","2B81040022","P-521","secp521r1","1.3.132.0.35","2b81040023","2B81040023","1.3.132.0.10","2b8104000a","2B8104000A","ED25519","Ed25519","1.3.6.1.4.1.11591.15.1","2b06010401da470f01","2B06010401DA470F01","X25519","cv25519","Curve25519","1.3.6.1.4.1.3029.1.5.1","2b060104019755010501","2B060104019755010501","1.3.36.3.3.2.8.1.1.7","2b2403030208010107","2B2403030208010107","1.3.36.3.3.2.8.1.1.11","2b240303020801010b","2B240303020801010B","1.3.36.3.3.2.8.1.1.13","2b240303020801010d","2B240303020801010D","s2k","salted","gnu","aedh","aedsa","zip","zlib","bzip2","SHA-1","SHA-256","SHA-384","SHA-512","publicKeyEncryptedSessionKey","symEncryptedSessionKey","onePassSignature","secretKey","secretSubkey","compressed","symmetricallyEncrypted","trust","userid","publicSubkey","userAttribute","symEncryptedIntegrityProtected","modificationDetectionCode","symEncryptedAEADProtected","mime","cert_generic","cert_persona","cert_casual","cert_positive","cert_revocation","subkey_binding","key_binding","key_revocation","subkey_revocation","timestamp","third_party","signatureSubpacket","signature_creation_time","signature_expiration_time","exportable_certification","trust_signature","regular_expression","revocable","key_expiration_time","placeholder_backwards_compatibility","preferred_symmetric_algorithms","revocation_key","issuer","notation_data","preferred_hash_algorithms","preferred_compression_algorithms","key_server_preferences","preferred_key_server","primary_user_id","policy_uri","key_flags","signers_user_id","reason_for_revocation","features","signature_target","embedded_signature","issuer_fingerprint","preferred_aead_algorithms","keyFlags","certify_keys","sign_data","encrypt_communication","encrypt_storage","split_private_key","authentication","shared_private_key","keyStatus","invalid","expired","revoked","valid","no_self_cert","modification_detection","v5_keys","babel-runtime/core-js/object/entries","babel-runtime/core-js/symbol","360","HKP","keyServerBaseUrl","_baseUrl","_fetch","uri","keyId","query","publicKeyArmored","./config","node-fetch","361","AsyncProxy","Keyring","enums","OID","KDFParams","ECDHSymmetricKey","Keyid","S2K","MPI","util","cleartext","destroyWorker","getWorker","initWorker","decryptSessionKeys","encryptSessionKey","decryptKey","reformatKey","_openpgp","_packet","_mpi","_s2k","_keyid","_ecdh_symkey","_kdf_params","_armor","_crypto","_keyring","_async_proxy","_hkp","_interopRequireWildcard","keyMod","signatureMod","messageMod","cleartextMod","newObj","./cleartext","./config/config","./hkp","./keyring","./openpgp","./type/ecdh_symkey","./type/kdf_params","./type/keyid","./type/mpi","./type/oid","./type/s2k","./worker/async_proxy","362","isAeadSupported","getPreferredAlgo","reformat","_ref19","_ref43","_ref46","_ref47","_ref54","_ref56","_ref57","_ref60","_values2","mergeSignatures","_callee18","checkFn","_context18","_ref20","_callee17","sourceSig","_context17","isExpired","destSig","_x36","_x32","_x33","_x34","_x35","wrapKeyObject","_callee41","_ref44","_ref45","promises","sanitizeKeyOptions","generateSecretKey","_callee39","secretKeyPacket","_context39","SecretKey","numBits","_x74","generateSecretSubkey","_callee40","secretSubkeyPacket","_context40","SecretSubkey","_x75","_context41","subkeyDefaults","keyExpirationTime","passphrase","subkeys","subkey","_x72","_callee42","secretSubkeyPackets","_context42","getKeyPackets","keyPacket","isDecrypted","toPacketlist","_x76","_callee47","_context47","_ref48","_callee43","subkeyPassphrase","_context43","_x81","_x82","userIds","_ref49","_callee44","userIdPacket","dataToSign","signaturePacket","_context44","Userid","signatureType","publicKeyAlgorithm","preferredSymmetricAlgorithms","preferredAeadAlgorithms","preferredHashAlgorithms","preferredCompressionAlgorithms","isPrimaryUserID","keyNeverExpires","_x83","_x84","_ref50","_ref51","_callee45","subkeyOptions","subkeySignaturePacket","_context45","_x85","_x86","_ref52","clearPrivateParams","_ref53","_callee46","_context46","_x87","_x88","Key","_x78","_x79","_x80","isDataRevoked","_callee49","primaryKey","dataToVerify","revocations","normDate","revocationKeyIds","_context49","normalizeDate","_ref55","_callee48","revocationSignature","_context48","verified","_x95","_x89","_x90","_x91","_x92","_x93","_callee50","pref_algo","primaryUser","_primaryUser$selfCert","_context50","getPrimaryUser","selfCertification","getSigningKeyPacket","PublicKey","PublicSubkey","_x97","_callee52","prefProperty","defaultAlgo","prioMap","prefAlgo","_context52","_ref58","_callee51","_context51","prio","_x104","_ref59","_x100","_x101","_callee54","supported","_context54","_ref61","_callee53","_context53","_x108","_x105","_ref21","_ref23","_ref24","_ref26","_ref28","_ref30","_ref31","_ref33","_ref35","_ref37","_ref39","_ref40","_ref41","revocationSignatures","directSignatures","users","subKeys","packetlist2structure","getLatestSignature","signatures","created","isValidSigningKeyPacket","isDataExpired","isValidEncryptionKeyPacket","User","userPacket","selfCertifications","otherCertifications","SubKey","subKeyPacket","subKey","bindingSignatures","keyIndex","indexOfTag","oneKeyList","newKey","expirationTime","getExpirationTime","expirationTimeV3","getTime","user","primaryKeyId","getKeyId","getSubkeyPackets","getKeyIds","getUserIds","encode_utf8","isPublic","isPrivate","toPublic","keyPackets","pubKeyPacket","pubSubkeyPacket","writePublicKey","bindingSignature","verifyPrimaryKey","getEncryptionKeyPacket","passphrases","decrypted","isRevoked","_callee9","_context9","_callee10","selfCert","keyExpiry","sigExpiry","_context10","_callee11","cert","_context11","_callee16","_context16","getFingerprint","destSubKey","srcSubKey","srcRevSig","_ref15","_callee13","srcUser","_context13","_ref16","_callee12","dstUser","_context12","_x29","_x28","_ref17","_callee15","_context15","_ref18","_callee14","dstSubKey","_context14","_x31","_x30","_x27","revoke","signPrimaryUser","_callee19","_ref22","userSign","_context19","_x37","signAllUsers","_callee20","_context20","_x38","verifyPrimaryUser","_callee21","_ref25","_context21","verifyAllCertifications","keyid","_x39","verifyAllUsers","_callee23","_context23","_ref27","_callee22","_context22","_x41","_x40","_callee25","_context25","_ref29","_callee24","signingKeyPacket","_context24","signingKeyId","_x44","_x42","_x43","_callee26","certificate","_context26","_x45","_x46","_x47","verifyCertificate","_callee28","_context28","_ref32","_callee27","_context27","_x53","_x49","_x50","_x51","_callee30","certifications","_context30","_ref34","_callee29","certification","_context29","_x56","_x54","_x55","_callee32","_context32","_ref36","_callee31","_context31","_x58","_x57","_callee34","_context34","_ref38","_callee33","srcSelfSig","_context33","_x61","_x59","_x60","_callee35","_context35","_x62","_x63","_x64","_callee36","_context36","_x66","_callee38","_context38","_ref42","_callee37","srcBindSig","_context37","_x71","_x69","_x70","babel-runtime/core-js/object/values","363","_keyring2","_localstore2","localstore","./keyring.js","./localstore.js","364","storeHandler","publicKeys","KeyArray","loadPublic","loadPrivate","emailCheck","emailEsc","emailRegex","keyIdCheck","keypacket","storePublic","storePrivate","getKeysForId","getForId","removeKeysForId","removeForId","getAllKeys","getForAddress","armored","imported","keyidHex","keyFound","../key","./localstore","365","_stringify2","LocalStore","publicKeysItem","privateKeysItem","localStorage","storage","loadKeys","itemname","armoredKeys","getItem","storeKeys","setItem","removeItem","babel-runtime/core-js/json/stringify","node-localstorage","366","sessionKey","symAlgo","aeadAlgo","passwords","testDecrypt","encryptPassword","_results","wildcard","encryptionKeyPacket","pkESKeyPacket","PublicKeyEncryptedSessionKey","publicKeyId","_keyid2","sessionKeyAlgorithm","_x24","_x25","_x26","accumulator","symEncryptedSessionKeyPacket","SymEncryptedSessionKey","aeadAlgorithm","pwd","Message","existingSigPacketlist","filterByTag","literalDataList","verifiedSig","fromText","filename","setFilename","literalDataPacketlist","fromBinary","setBytes","getEncryptionKeyIds","unwrapCompressed","sessionKeys","keyObjs","symEncryptedPacketlist","symEncryptedPacket","resultMsg","symESKeyPacketlist","pkESKeyPacketlist","seen","privateKeyPackets","privateKeyPacket","getLiteralData","findPacket","getFilename","SymEncryptedAEADProtected","SymEncryptedIntegrityProtected","SymmetricallyEncrypted","onePassSig","OnePassSignature","onePassSignatureList","compress","Compressed","packetList","appendSignature","detachedSignature","367","_ref$path","path","_ref$n","_ref$workers","workers","asyncProxy","_async_proxy2","_ref2$userIds","_ref2$passphrase","_ref2$numBits","_ref2$keyExpirationTi","_ref2$curve","_ref2$date","_ref2$subkeys","privateKeyArmored","onError","_ref3$userIds","_ref3$passphrase","_ref3$keyExpirationTi","encryptKey","_ref8$compression","_ref8$armor","_ref8$detached","detached","_ref8$signature","_ref8$returnSessionKe","returnSessionKey","_ref8$wildcard","_ref8$date","_ref8$fromUserId","fromUserId","_ref8$toUserId","toUserId","checkData","nativeAEAD","createMessage","encrypted","_ref10$format","_ref10$signature","_ref10$date","checkMessage","parseMessage","_ref12$armor","_ref12$detached","_ref12$date","_ref12$fromUserId","_cleartext","messageLib","_ref14$signature","_ref14$date","checkCleartextOrMessage","_ref16$wildcard","_ref16$date","_ref16$toUserId","checkBinary","checkString","./polyfills","368","Trust","UserAttribute","Marker","_compressed","_sym_encrypted_integrity_protected","_sym_encrypted_aead_protected","_public_key_encrypted_session_key","_sym_encrypted_session_key","_literal","_public_key","_symmetrically_encrypted","_marker","_public_subkey","_user_attribute","_one_pass_signature","_secret_key","_userid","_secret_subkey","_trust","newPacketFromTag","fromStructuredClone","packetClone","postCloneTypeFix","packetClassFromTagName","./all_packets.js","./compressed.js","./literal.js","./marker.js","./one_pass_signature.js","./public_key.js","./public_key_encrypted_session_key.js","./public_subkey.js","./secret_key.js","./secret_subkey.js","./signature.js","./sym_encrypted_aead_protected.js","./sym_encrypted_integrity_protected.js","./sym_encrypted_session_key.js","./symmetrically_encrypted.js","./trust.js","./user_attribute.js","./userid.js","369","clonePackets","verObject","parseClonedPackets","packetlistCloneToKey","_packetlist2","packetlistCloneToMessage","packetlistCloneToSignatures","packetlistCloneToSignature","fromClone","../cleartext","../message","../signature","../type/keyid","./packetlist","370","_pako2","_bzip2Build2","decompress","decompress_fns","compress_fns","nodeZlib","getNodeZlib","node_zlib","pako_zlib","deflateRawSync","deflateSync","inflateRawSync","inflateSync","../compression/bzip2.build.js","371","./all_packets","./clone","372","decode_utf8","textMode","filename_len","readDate","filename_length","writeDate","373","374","mypos","375","readSimpleLength","readNumber","writeSimpleLength","writeNumber","writeHeader","tag_type","writeOldHeader","packet_length","packet_length_type","bodydata","real_packet_length","mypos2","tmplen","376","pushed","packetbytes","filtered","packetType","_len","packetArray","tagIndex","_len2","part","packetlistClone","377","readPublicKey","paramCount","writeOld","getFingerprintBytes","toHash","getAlgorithmInfo","../crypto","378","toEncrypt","calc_checksum","decoded","379","380","_s2k2","get_hash_fn","parse_cleartext_params","hash_algorithm","hashlen","get_hash_len","hashfn","hashtext","write_cleartext_params","produceEncryptionKey","produce_key","privParams","blockLen","optionalFields","modeInstance","salt","s2k_usage","../type/keyid.js","../type/s2k","381","_secret_key2","./secret_key","382","_packet3","signatureData","unhashedSubpackets","signedHashValue","signatureExpirationTime","signatureNeverExpires","exportable","trustLevel","trustAmount","regularExpression","revocationKeyClass","revocationKeyAlgorithm","revocationKeyFingerprint","notation","keyServerPreferences","preferredKeyServer","policyURI","signersUserId","reasonForRevocationFlag","reasonForRevocationString","signatureTargetPublicKeyAlgorithm","signatureTargetHashAlgorithm","signatureTargetHash","embeddedSignature","issuerKeyVersion","issuerFingerprint","write_sub_packet","subpackets","subpacket_length","read_sub_packet","sigpos","sigDataLength","trailer","write_all_sub_packets","calculateTrailer","toSign","isNull","read_array","seconds","userattribute","mpicount","mpi","../type/mpi.js","383","VERSION","cipherAlgo","chunkSizeByte","authTag","finalChunk","tagLengthIfDecrypting","adataBuffer","adataArray","adataTagArray","adataView","chunkIndexArray","cryptedPromises","384","modification","aesEncrypt","nodeEncrypt","aesDecrypt","nodeDecrypt","tohash","asmcrypto.js/src/aes/cfb/exports","385","sessionKeyEncryptionAlgorithm","algo_enum","386","387","388","usrAttr","389","parseUserId","formatUserId","390","core-js/fn/array/fill","core-js/fn/array/find","core-js/fn/array/from","core-js/fn/object/assign","core-js/fn/promise","core-js/fn/string/repeat","core-js/fn/symbol","core-js/fn/typed/uint8-array","whatwg-fetch","391","392","393","394","isWildcard","mapToHex","fromId","../util.js","395","fromBN","fromUint8Array","bytelen","payload","bn","396","397","get_count","gnuExtType","numBytes","isp","rlength","398","_addressRfc2","getTransferables","transferables","collectBuffers","numeric","hex_to_str","unescape","arrays","totalLength","copyUint8Array","array1","array2","sadd","print_debug_hexarray_dump","arrToHex","print_debug_hexstr_dump","strToHex","bitcount","rest","isEmailAddress","_rfc2822$parse","_rfc2822$parse2$","./encoding/base64","address-rfc2822","399","workerId","requests","workerStack","tasks","seedRandom","amount","handleMessage","lineno","currentID","getID","minRequests","_resolve","../packet","emptyObject","isUndef","isDef","isTrue","isPrimitive","_toString","isRegExp","isValidArrayIndex","makeMap","expectsLowerCase","isBuiltInTag","isReservedAttribute","camelizeRE","camelize","capitalize","hyphenateRE","hyphenate","boundFn","_length","no","identity","looseEqual","isObjectA","isObjectB","isArrayA","isArrayB","keysA","keysB","looseIndexOf","SSR_ATTR","ASSET_TYPES","LIFECYCLE_HOOKS","optionMergeStrategies","silent","productionTip","devtools","performance","errorHandler","warnHandler","ignoredElements","keyCodes","isReservedTag","isReservedAttr","isUnknownElement","getTagNamespace","parsePlatformTagName","mustUseProp","_lifecycleHooks","isReserved","bailRE","_isServer","hasProto","inBrowser","inWeex","WXEnvironment","platform","weexPlatform","UA","isIE9","isEdge","isIOS","nativeWatch","watch","supportsPassive","isServerRendering","VUE_ENV","__VUE_DEVTOOLS_GLOBAL_HOOK__","isNative","_Set","hasSymbol","Reflect","ownKeys","Set","Dep","subs","addSub","removeSub","depend","addDep","targetStack","pushTarget","_target","popTarget","VNode","elm","componentOptions","asyncFactory","ns","fnContext","fnOptions","fnScopeId","componentInstance","isStatic","isRootInsert","isComment","isCloned","isOnce","asyncMeta","isAsyncPlaceholder","prototypeAccessors","createEmptyVNode","createTextVNode","cloneVNode","vnode","cloned","arrayProto","arrayMethods","inserted","ob","__ob__","observeArray","dep","shouldObserve","toggleObserving","vmCount","protoAugment","copyAugment","walk","asRootData","_isVue","defineReactive","customSetter","shallow","childOb","dependArray","newVal","del","strats","mergeData","toVal","fromVal","mergeDataOrFn","parentVal","childVal","vm","instanceData","defaultData","mergeHook","mergeAssets","key$1","inject","provide","defaultStrat","mergeOptions","normalizeProps","normalized","normalizeInject","dirs","directives","normalizeDirectives","extendsFrom","extends","mixins","mergeField","strat","resolveAsset","warnMissing","assets","camelizedId","PascalCaseId","validateProp","propOptions","propsData","absent","booleanIndex","getTypeIndex","Boolean","stringIndex","$options","_props","getPropDefaultValue","prevShouldObserve","isSameType","expectedTypes","handleError","$parent","errorCaptured","globalHandleError","logError","microTimerFunc","macroTimerFunc","callbacks","flushCallbacks","copies","useMacroTask","seenObjects","traverse","_traverse","isA","isFrozen","depId","normalizeEvent","once$$1","capture","createFnInvoker","invoker","arguments$1","updateListeners","oldOn","remove$$1","mergeVNodeHook","hookKey","oldHook","wrappedHook","merged","checkProp","preserve","normalizeChildren","normalizeArrayChildren","nestedIndex","lastIndex","isTextNode","_isVList","ensureCtor","comp","getFirstComponentChild","$once","$on","remove$1","$off","updateComponentListeners","oldListeners","resolveSlots","slots","slot","name$1","isWhitespace","resolveScopedSlots","activeInstance","isInInactiveTree","_inactive","activateChildComponent","direct","_directInactive","$children","callHook","_hasHookEvent","$emit","activatedChildren","waiting","flushing","flushSchedulerQueue","watcher","activatedQueue","updatedQueue","callActivatedHooks","_watcher","_isMounted","callUpdatedHooks","uid$1","Watcher","expOrFn","isRenderWatcher","_watchers","lazy","sync","dirty","deps","newDeps","depIds","newDepIds","expression","segments","parsePath","cleanupDeps","queueWatcher","evaluate","_isBeingDestroyed","sharedPropertyDefinition","sourceKey","initState","propsOptions","_propKeys","loop","initProps","initMethods","initData","watchers","_computedWatchers","isSSR","userDef","computedWatcherOptions","defineComputed","initComputed","createWatcher","initWatch","shouldCache","createComputedGetter","$watch","resolveInject","provideKey","_provided","provideDefault","renderList","render","renderSlot","fallback","bindObject","scopedSlotFn","$scopedSlots","slotNodes","$slots","_rendered","$createElement","resolveFilter","isKeyNotMatch","expect","checkKeyCodes","eventKeyCode","builtInKeyCode","eventKeyName","builtInKeyName","mappedKeyCode","bindObjectProps","asProp","isSync","domProps","$event","renderStatic","isInFor","_staticTrees","markStatic","staticRenderFns","_renderProxy","markOnce","markStaticNode","bindObjectListeners","existing","ours","installRenderHelpers","_l","_q","_f","_g","FunctionalRenderContext","contextVm","_original","isCompiled","_compiled","needNormalization","injections","scopedSlots","_scopeId","cloneAndMarkFunctionalResult","mergeProps","componentVNodeHooks","hydrating","parentElm","refElm","_isDestroyed","keepAlive","mountedNode","prepatch","_isComponent","_parentVnode","_parentElm","_refElm","inlineTemplate","createComponentInstanceForVnode","$mount","oldVnode","parentVnode","renderChildren","hasChildren","_renderChildren","$vnode","_vnode","$attrs","$listeners","propKeys","_parentListeners","$forceUpdate","updateChildComponent","destroy","deactivateChildComponent","$destroy","hooksToMerge","createComponent","baseCtor","_base","cid","errorComp","resolved","loading","loadingComp","forceRender","component","resolveAsyncComponent","createAsyncPlaceholder","resolveConstructorOptions","model","transformModel","extractPropsFromVNodeData","functional","renderContext","vnodes","createFunctionalComponent","nativeOn","abstract","installComponentHooks","SIMPLE_NORMALIZE","ALWAYS_NORMALIZE","normalizationType","alwaysNormalize","simpleNormalizeChildren","applyNS","force","registerDeepBindings","_createElement","uid$3","super","superOptions","modifiedOptions","latest","extendOptions","sealed","sealedOptions","dedupe","resolveModifiedOptions","components","initExtend","Super","SuperId","cachedCtors","_Ctor","Sub","Comp","initProps$1","initComputed$1","mixin","getComponentName","pruneCache","keepAliveInstance","cachedNode","pruneCacheEntry","cached$$1","_uid","vnodeComponentOptions","_componentTag","initInternalComponent","_self","$root","$refs","initLifecycle","_events","initEvents","parentData","initRender","initInjections","initProvide","initMixin","dataDef","propsDef","$delete","immediate","stateMixin","hookRE","cbs","i$1","eventsMixin","prevEl","$el","prevVnode","prevActiveInstance","__patch__","__vue__","lifecycleMixin","$nextTick","_render","ref","renderMixin","patternTypes","builtInComponents","KeepAlive","include","exclude","destroyed","mounted","this$1","configDef","delete","plugin","installedPlugins","_installedPlugins","install","initUse","initMixin$1","definition","initAssetRegisters","initGlobalAPI","ssrContext","acceptValue","isEnumeratedAttr","isBooleanAttr","xlinkNS","isXlink","getXlinkProp","isFalsyAttrValue","genClassForVnode","childNode","mergeClassData","staticClass","dynamicClass","stringifyClass","renderClass","stringified","stringifyArray","stringifyObject","namespaceMap","svg","math","isHTMLTag","isSVG","unknownElementCache","isTextInputType","nodeOps","tagName","multiple","createElementNS","newNode","referenceNode","setTextContent","setStyleScope","scopeId","registerRef","isRemoval","refs","refInFor","emptyNode","sameVnode","typeA","typeB","sameInputType","createKeyToOldIdx","beginIdx","endIdx","updateDirectives","oldDir","isCreate","isDestroy","oldDirs","normalizeDirectives$1","newDirs","dirsWithInsert","dirsWithPostpatch","callHook$1","componentUpdated","callInsert","emptyModifiers","getRawDirName","rawName","baseModules","updateAttrs","inheritAttrs","oldAttrs","setAttr","removeAttributeNS","baseSetAttr","setAttributeNS","__ieph","blocker","updateClass","oldData","cls","transitionClass","_transitionClasses","_prevClass","chr","index$1","expressionPos","expressionEndPos","validDivisionCharRE","parseFilters","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","lastFilterIndex","pushFilter","wrapFilter","baseWarn","pluckModuleFunction","plain","addAttr","addRawAttr","attrsMap","attrsList","addDirective","addHandler","important","native","nativeEvents","newHandler","getBindingAttr","getStatic","dynamicValue","getAndRemoveAttr","staticValue","removeFromMap","genComponentModel","valueExpression","assignment","genAssignmentCode","isStringStart","parseBracket","parseModel","inBracket","stringQuote","target$1","RANGE_TOKEN","CHECKBOX_RADIO_TOKEN","add$1","_withTask","onceHandler","remove$2","createOnceHandler","updateDOMListeners","change","normalizeEvents","updateDOMProps","oldProps","_value","strCur","shouldUpdateValue","checkVal","composing","notInFocus","isNotInFocusAndDirty","_vModifiers","isDirtyWithModifiers","parseStyleText","propertyDelimiter","normalizeStyleData","normalizeStyleBinding","staticStyle","bindingStyle","cssVarRE","importantRE","setProp","normalizedName","vendorNames","updateStyle","oldStaticStyle","oldStyleBinding","normalizedStyle","oldStyle","newStyle","checkChild","styleData","getStyle","classList","tar","resolveTransition","autoCssTransition","enterClass","enterToClass","enterActiveClass","leaveClass","leaveToClass","leaveActiveClass","hasTransition","TRANSITION","ANIMATION","transitionProp","transitionEndEvent","animationProp","animationEndEvent","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","raf","nextFrame","addTransitionClass","transitionClasses","removeTransitionClass","whenTransitionEnds","expectedType","getTransitionInfo","propCount","transformRE","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","durations","toMs","toggleDisplay","_leaveCb","cancelled","transition","_enterCb","appearClass","appearToClass","appearActiveClass","beforeEnter","afterEnter","enterCancelled","beforeAppear","appear","afterAppear","appearCancelled","transitionNode","isAppear","startClass","activeClass","toClass","beforeEnterHook","enterHook","afterEnterHook","enterCancelledHook","explicitEnterDuration","expectsCSS","userWantsControl","getHookArgumentsLength","pendingNode","_pending","isValidDuration","leave","rm","beforeLeave","afterLeave","leaveCancelled","delayLeave","explicitLeaveDuration","performLeave","invokerFns","_enter","patch","backend","removeNode","createElm","insertedVnodeQueue","nested","ownerArray","isReactivated","initComponent","innerNode","activate","reactivateComponent","setScope","createChildren","invokeCreateHooks","pendingInsert","isPatchable","ref$$1","ancestor","addVnodes","startIdx","invokeDestroyHook","removeVnodes","removeAndInvokeRemoveHook","childElm","createRmCb","findIdxInOld","oldCh","patchVnode","removeOnly","hydrate","newCh","oldKeyToIdx","idxInOld","vnodeToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","canMove","updateChildren","postpatch","invokeInsertHook","isRenderedModule","inVPre","hasChildNodes","childrenMatch","fullInvoke","isInitialPatch","isRealElement","hasAttribute","oldElm","parentElm$1","patchable","i$2","createPatchFunction","vmodel","directive","_vOptions","setSelected","getValue","onCompositionStart","onCompositionEnd","prevOptions","curOptions","hasNoMatchingOption","actuallySetSelected","isMultiple","createEvent","initEvent","dispatchEvent","locateNode","platformDirectives","transition$$1","originalDisplay","__vOriginalDisplay","transitionProps","getRealChild","compOptions","extractTransitionData","placeholder","rawChild","Transition","hasParentTransition","_leaving","oldRawChild","oldChild","isSameChild","delayedLeave","moveClass","callPendingCbs","_moveCb","recordPosition","newPos","applyTranslation","oldPos","dx","dy","moved","WebkitTransform","transitionDuration","platformComponents","TransitionGroup","prevChildren","rawChildren","transitionData","kept","removed","c$1","beforeUpdate","updated","hasMove","_reflow","propertyName","_hasMove","HTMLUnknownElement","HTMLElement","mountComponent","defaultTagRE","regexEscapeRE","buildRegex","delimiters","parseText","tagRE","tokenValue","rawTokens","@binding","klass$1","staticKeys","transformNode","classBinding","genData","decoder","style$1","styleBinding","he","isUnaryTag","canBeLeftOpenTag","isNonPhrasingTag","attribute","ncname","qnameCapture","startTagOpen","startTagClose","endTag","doctype","conditionalComment","IS_REGEX_CAPTURING_BROKEN","isPlainTextElement","reCache","decodingMap","&lt;","&gt;","&quot;","&amp;","&#10;","&#9;","encodedAttr","encodedAttrWithNewLines","isIgnoreNewlineTag","shouldIgnoreFirstNewline","decodeAttr","shouldDecodeNewlines","warn$2","transforms","preTransforms","postTransforms","platformIsPreTag","platformMustUseProp","platformGetTagNamespace","onRE","dirRE","forAliasRE","forIteratorRE","stripParensRE","argRE","bindRE","modifierRE","decodeHTMLCached","createASTElement","makeAttrsMap","template","isPreTag","currentParent","preserveWhitespace","inPre","closeElement","lastTag","expectHTML","isUnaryTag$$1","canBeLeftOpenTag$$1","endTagLength","stackedTag","reStackedTag","rest$1","parseEndTag","textEnd","commentEnd","shouldKeepComment","advance","conditionalEnd","doctypeMatch","endTagMatch","curIndex","startTagMatch","parseStartTag","handleStartTag","unarySlash","unary","shouldDecodeNewlinesForHref","lowerCasedTag","lowerCasedTagName","ieNSBug","ieNSPrefix","guardIESVGBug","forbidden","checkRootConstraints","processPre","processRawAttrs","processed","processFor","if","addIfCondition","else","elseif","processIf","processOnce","processElement","findPrevElement","processIfConditions","slotScope","slotTarget","lastNode","checkInFor","processRef","slotName","processSlot","processComponent","isProp","hasBindings","parseModifiers","camel","argMatch","processAttrs","inMatch","alias","iteratorMatch","iterator1","iterator2","parseFor","condition","ifConditions","cloneASTElement","modules$1","preTransformNode","typeBinding","ifCondition","ifConditionExtra","hasElse","elseIfCondition","branch0","branch1","branch2","isStaticKey","isPlatformReservedTag","baseOptions","_warn","genSelect","valueBinding","trueValueBinding","falseValueBinding","genCheckboxModel","genRadioModel","needCompositionGuard","genDefaultModel","genStaticKeys","genStaticKeysCached","optimize","markStatic$1","static","isDirectChildOfTemplateFor","l$1","markStaticRoots","staticInFor","staticRoot","fnExpRE","simplePathRE","esc","tab","space","up","down","keyNames","genGuard","modifierCode","prevent","ctrl","alt","genHandlers","genHandler","isMethodPath","isFunctionExpression","genModifierCode","keyModifier","genFilterCode","genKeyFilter","keyVal","keyName","baseDirectives","wrapListeners","wrapData","cloak","CodegenState","dataGenFns","maybeComponent","onceId","genElement","staticProcessed","genStatic","onceProcessed","genOnce","forProcessed","altGen","altHelper","genFor","ifProcessed","genIf","genChildren","bind$$1","genSlot","componentName","genData$2","genComponent","altEmpty","genIfConditions","conditions","genTernaryExp","needRuntime","hasRuntime","genDirectives","genProps","genScopedSlot","inlineRenderFns","genInlineTemplate","genForScopedSlot","checkSkip","altGenElement","altGenNode","el$1","needsNormalization","getNormalizationType","genNode","transformSpecialNewlines","createFunction","errors","baseCompile","compileToFunctions","finalOptions","tips","tip","fnGenErrors","createCompileToFunctionFn","getShouldDecode","idToTemplate","mount","outerHTML","getOuterHTML","scope","Timeout","clearFn","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","registerImmediate","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","axios","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","\\","'","\n","\r","
","
","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","arrayAggregator","iteratee","arrayEach","arrayEachRight","resIndex","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","initAccum","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","escapeHtmlChar","&","<","\"","escapeStringChar","hasUnicode","mapToArray","overArg","replaceHolders","safeGet","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","&#39;","runInContext","pick","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","Map","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","copySymbols","symbol","regexp","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","initCloneByTag","stacked","subValue","getAllKeysIn","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","valuesIndex","templateSettings","interpolate","variable","imports","getMapData","pairs","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","othLength","othIndex","caches","maxLength","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","guard","isIterateeCall","createCaseFirst","methodName","trailing","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","charsLength","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrValue","flatten","otherFunc","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findLastIndex","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xorBy","xorWith","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","resolver","memoized","Cache","overArgs","funcsLength","partialRight","rearg","isError","isInteger","iteratorToArray","remainder","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","omit","basePick","pickBy","toPairs","toPairsIn","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","cond","conforms","baseConforms","curry","curryRight","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNil","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","strLength","padEnd","padStart","radix","floating","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sumBy","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","omission","newEnd","uniqueId","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","webpackPolyfill","deprecate","_defineProperties","_createClass","_objectSpread","$$$1","TRANSITION_END","transitionEndEmulator","triggerTransitionEnd","getUID","getSelectorFromElement","getTransitionDurationFromElement","reflow","supportsTransitionEnd","typeCheckConfig","configTypes","valueType","emulateTransitionEnd","Alert","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","_element","_proto","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","Button","Selector","FOCUS_BLUR_DATA_API","triggerChangeEvent","addAriaPressed","Carousel","DATA_KEY","EVENT_KEY","Default","keyboard","slide","pause","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHEND","LOAD_DATA_API","ACTIVE","ACTIVE_ITEM","ITEM","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","_getConfig","_indicatorsElement","_addEventListeners","_slide","nextWhenVisible","cycle","visibilityState","activeIndex","_getItemIndex","direction","_keydown","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","slideEvent","_setActiveIndicatorElement","nextIndicator","directionalClassName","orderClassName","_this3","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","_dataApiClickHandler","slideIndex","$carousel","Collapse","SHOW","SHOWN","HIDE","Dimension","ACTIVES","DATA_TOGGLE","_isTransitioning","_triggerArray","tabToggles","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","scrollSize","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","Dropdown","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","AttachmentMap","boundary","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","_getParentFromElement","isActive","_clearMenus","showEvent","referenceElement","_getPopperConfig","_getPlacement","$parentDropdown","offsetConf","popperConfig","toggles","dropdownMenu","hideEvent","_dataApiKeydownHandler","Modal","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","DIALOG","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","NAVBAR_TOGGLER","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","handleUpdate","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this4","_this5","_this6","_this7","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this8","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","paddingLeft","paddingRight","_getScrollbarWidth","_this9","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this10","Tooltip","BSCLS_PREFIX_REGEX","fallbackPlacement","AUTO","TOP","RIGHT","BOTTOM","LEFT","HoverState","INSERTED","FOCUSOUT","Trigger","_isEnabled","_timeout","_hoverState","_activeTrigger","_setListeners","enable","toggleEnabled","dataKey","_getDelegateConfig","_isWithActiveTrigger","_leave","getTipElement","isWithContent","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_handlePopperPlacementChange","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","$tip","setElementContent","eventIn","eventOut","_fixTitle","titleType","tabClass","initConfigAnimation","Popover","_Tooltip","_getContent","ScrollSpy","ACTIVATE","SCROLL","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","Tab","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","Scrollspy","Axios","createInstance","defaultConfig","instanceConfig","CancelToken","isCancel","isSlowBuffer","InterceptorManager","dispatchRequest","interceptors","fulfilled","serializedParams","toISOString","ignoreDuplicateOf","originURL","msie","urlParsingNode","resolveURL","hostname","pathname","requestURL","expires","secure","cookie","toGMTString","eject","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","relativeURL","resolvePromise","_token"],"mappings":"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ACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,KAAAC,IAAA,KACAC,IAAA,KAAAC,IAAA,KACAC,IAAA,KAEAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IA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","file":"/js/app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap aaf7f4906e527135f06f","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/utils.js\n// module id = 0\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/defaults.js\n// module id = 2\n// module chunks = 0","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = 3\n// module chunks = 0","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.3\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/popper.js/dist/esm/popper.js\n// module id = 4\n// module chunks = 0","/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/jquery/dist/jquery.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/bind.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/adapters/xhr.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/createError.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/cancel/isCancel.js\n// module id = 9\n// module chunks = 0","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/cancel/Cancel.js\n// module id = 10\n// module chunks = 0","/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It is a great starting point when\n * building robust, powerful web applications using Vue and Laravel.\n */\n\nwindow.openpgp = require('openpgp');\nwindow.Vue = require('vue');\nrequire('./bootstrap');\nrequire('./profile');\nrequire('./chat');\n\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/js/app.js","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.openpgp = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n'use strict';\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ea_lib = _dereq_('email-addresses');\n\nexports.parse = function parse(line, startAt) {\n if (!line) throw 'Nothing to parse';\n\n line = line.trim();\n\n var addr = ea_lib({\n input: line,\n rfc6532: true, // unicode\n partial: false, // return failed parses\n simple: false, // simple AST\n strict: false, // turn off obs- features in the rfc\n rejectTLD: false, // domains require a \".\"\n startAt: startAt || null\n });\n\n if (!addr) throw 'No results';\n\n // console.log(\"Parsed to: \", require('util').inspect(addr, {depth: 10, colors: true}));\n\n return addr.addresses.map(map_addresses);\n};\n\nfunction map_addresses(adr) {\n if (adr.type === 'group') {\n return new Group(adr.name, adr.addresses.map(map_addresses));\n }\n var comments = void 0;\n if (adr.parts.comments) {\n comments = adr.parts.comments.map(function (c) {\n return c.tokens.trim();\n }).join(' ').trim();\n // if (comments.length) {\n // comments = '(' + comments + ')';\n // }\n }\n var l = adr.local;\n if (!adr.name && /:/.test(l)) l = '\"' + l + '\"';\n return new Address(adr.name, l + '@' + adr.domain, comments);\n}\n\nexports.parseFrom = function (line) {\n return exports.parse(line, 'from');\n};\n\nexports.parseSender = function (line) {\n return exports.parse(line, 'sender');\n};\n\nexports.parseReplyTo = function (line) {\n return exports.parse(line, 'reply-to');\n};\n\nvar Group = function () {\n function Group(display_name, addresses) {\n (0, _classCallCheck3.default)(this, Group);\n\n this.phrase = display_name;\n this.addresses = addresses;\n }\n\n (0, _createClass3.default)(Group, [{\n key: 'format',\n value: function format() {\n return this.phrase + \":\" + this.addresses.map(function (a) {\n return a.format();\n }).join(',');\n }\n }, {\n key: 'name',\n value: function name() {\n var phrase = this.phrase;\n\n if (!(phrase && phrase.length)) {\n phrase = this.comment;\n }\n\n var name = _extract_name(phrase);\n return name;\n }\n }]);\n return Group;\n}();\n\nvar Address = function () {\n function Address(phrase, address, comment) {\n (0, _classCallCheck3.default)(this, Address);\n\n this.phrase = phrase || '';\n this.address = address || '';\n this.comment = comment || '';\n }\n\n (0, _createClass3.default)(Address, [{\n key: 'host',\n value: function host() {\n var match = /.*@(.*)$/.exec(this.address);\n if (!match) return null;\n return match[1];\n }\n }, {\n key: 'user',\n value: function user() {\n var match = /^(.*)@/.exec(this.address);\n if (!match) return null;\n return match[1];\n }\n }, {\n key: 'format',\n value: function format() {\n var phrase = this.phrase;\n var email = this.address;\n var comment = this.comment;\n\n var addr = [];\n var atext = new RegExp('^[\\\\-\\\\w !#$%&\\'*+/=?^`{|}~]+$');\n\n if (phrase && phrase.length) {\n addr.push(atext.test(phrase.trim()) ? phrase : _quote_no_esc(phrase) ? phrase : '\"' + phrase + '\"');\n\n if (email && email.length) {\n addr.push(\"<\" + email + \">\");\n }\n } else if (email && email.length) {\n addr.push(email);\n }\n\n if (comment && /\\S/.test(comment)) {\n comment = comment.replace(/^\\s*\\(?/, '(').replace(/\\)?\\s*$/, ')');\n }\n\n if (comment && comment.length) {\n addr.push(comment);\n }\n\n return addr.join(' ');\n }\n }, {\n key: 'name',\n value: function name() {\n var phrase = this.phrase;\n var addr = this.address;\n\n if (!(phrase && phrase.length)) {\n phrase = this.comment;\n }\n\n var name = _extract_name(phrase);\n\n // first.last@domain address\n if (name === '') {\n var match = /([^%.@_]+([._][^%.@_]+)+)[@%]/.exec(addr);\n if (match) {\n name = match[1].replace(/[._]+/g, ' ');\n name = _extract_name(name);\n }\n }\n\n if (name === '' && /\\/g=/i.test(addr)) {\n // X400 style address\n var _match = /\\/g=([^/]*)/i.exec(addr);\n var f = _match[1];\n _match = /\\/s=([^/]*)/i.exec(addr);\n var l = _match[1];\n name = _extract_name(f + \" \" + l);\n }\n\n return name;\n }\n }]);\n return Address;\n}();\n\nexports.Address = Address;\n\n// This is because JS regexps have no equivalent of\n// zero-width negative look-behind assertion for: /(?<!\\\\)\"/\nfunction _quote_no_esc(str) {\n if (/^\"/.test(str)) return true;\n var match = void 0;\n while (match = /^[\\s\\S]*?([\\s\\S])\"/.exec(str)) {\n if (match[1] !== '\\\\') {\n return true;\n }\n str = str.substr(match[0].length);\n }\n return false;\n}\n\nexports.isAllLower = function (string) {\n return string === string.toLowerCase();\n};\n\nexports.isAllUpper = function (string) {\n return string === string.toUpperCase();\n};\n\nexports.nameCase = function (string) {\n\n return string.toLowerCase().replace(/\\b(\\w+)/g, function (_, d1) {\n // Set the case of the name to first char upper rest lower\n return d1.charAt(0).toUpperCase() + d1.slice(1);\n }).replace(/\\bMc(\\w)/gi, function (_, d1) {\n // Scottish names such as 'McLeod'\n return 'Mc' + d1.toUpperCase();\n }).replace(/\\bo'(\\w)/gi, function (_, d1) {\n // Irish names such as 'O'Malley, O'Reilly'\n return 'O\\'' + d1.toUpperCase();\n }).replace(/\\b(x*(ix)?v*(iv)?i*)\\b/ig, function (_, d1) {\n // Roman numerals, eg 'Level III Support'\n return d1.toUpperCase();\n });\n};\n\n// given a comment, attempt to extract a person's name\nfunction _extract_name(name) {\n // Using encodings, too hard. See Mail::Message::Field::Full.\n if (/=?.*?\\?=/.test(name)) return '';\n\n // trim whitespace\n name = name.trim();\n name = name.replace(/\\s+/, ' ');\n\n // Disregard numeric names (e.g. 123456.1234@compuserve.com)\n if (/^[\\d ]+$/.test(name)) return '';\n\n name = name.replace(/^\\((.*)\\)$/, '$1') // remove outermost parenthesis\n .replace(/^\"(.*)\"$/, '$1') // remove outer quotation marks\n .replace(/\\(.*?\\)/g, '') // remove minimal embedded comments\n .replace(/\\\\/g, '') // remove all escapes\n .replace(/^\"(.*)\"$/, '$1') // remove internal quotation marks\n .replace(/^([^\\s]+) ?, ?(.*)$/, '$2 $1') // reverse \"Last, First M.\" if applicable\n .replace(/,.*/, '');\n\n // Change casing only when the name contains only upper or only\n // lower cased characters.\n if (exports.isAllUpper(name) || exports.isAllLower(name)) {\n // console.log(\"Changing case of: \" + name);\n name = exports.nameCase(name);\n // console.log(\"Now: \" + name);\n }\n\n // some cleanup\n name = name.replace(/\\[[^\\]]*\\]/g, '').replace(/(^[\\s'\"]+|[\\s'\"]+$)/g, '').replace(/\\s{2,}/g, ' ');\n\n return name;\n}\n\n},{\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"email-addresses\":283}],2:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * @file {@link http://asmjs.org Asm.js} implementation of the {@link https://en.wikipedia.org/wiki/Advanced_Encryption_Standard Advanced Encryption Standard}.\n * @author Artem S Vybornov <vybornov@gmail.com>\n * @license MIT\n */\nvar AES_asm = exports.AES_asm = function () {\n \"use strict\";\n\n /**\n * Galois Field stuff init flag\n */\n\n var ginit_done = false;\n\n /**\n * Galois Field exponentiation and logarithm tables for 3 (the generator)\n */\n var gexp3, glog3;\n\n /**\n * Init Galois Field tables\n */\n function ginit() {\n gexp3 = [], glog3 = [];\n\n var a = 1,\n c,\n d;\n for (c = 0; c < 255; c++) {\n gexp3[c] = a;\n\n // Multiply by three\n d = a & 0x80, a <<= 1, a &= 255;\n if (d === 0x80) a ^= 0x1b;\n a ^= gexp3[c];\n\n // Set the log table value\n glog3[gexp3[c]] = c;\n }\n gexp3[255] = gexp3[0];\n glog3[0] = 0;\n\n ginit_done = true;\n }\n\n /**\n * Galois Field multiplication\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\n function gmul(a, b) {\n var c = gexp3[(glog3[a] + glog3[b]) % 255];\n if (a === 0 || b === 0) c = 0;\n return c;\n }\n\n /**\n * Galois Field reciprocal\n * @param {number} a\n * @return {number}\n */\n function ginv(a) {\n var i = gexp3[255 - glog3[a]];\n if (a === 0) i = 0;\n return i;\n }\n\n /**\n * AES stuff init flag\n */\n var aes_init_done = false;\n\n /**\n * Encryption, Decryption, S-Box and KeyTransform tables\n *\n * @type {number[]}\n */\n var aes_sbox;\n\n /**\n * @type {number[]}\n */\n var aes_sinv;\n\n /**\n * @type {number[][]}\n */\n var aes_enc;\n\n /**\n * @type {number[][]}\n */\n var aes_dec;\n\n /**\n * Init AES tables\n */\n function aes_init() {\n if (!ginit_done) ginit();\n\n // Calculates AES S-Box value\n function _s(a) {\n var c, s, x;\n s = x = ginv(a);\n for (c = 0; c < 4; c++) {\n s = (s << 1 | s >>> 7) & 255;\n x ^= s;\n }\n x ^= 99;\n return x;\n }\n\n // Tables\n aes_sbox = [], aes_sinv = [], aes_enc = [[], [], [], []], aes_dec = [[], [], [], []];\n\n for (var i = 0; i < 256; i++) {\n var s = _s(i);\n\n // S-Box and its inverse\n aes_sbox[i] = s;\n aes_sinv[s] = i;\n\n // Ecryption and Decryption tables\n aes_enc[0][i] = gmul(2, s) << 24 | s << 16 | s << 8 | gmul(3, s);\n aes_dec[0][s] = gmul(14, i) << 24 | gmul(9, i) << 16 | gmul(13, i) << 8 | gmul(11, i);\n // Rotate tables\n for (var t = 1; t < 4; t++) {\n aes_enc[t][i] = aes_enc[t - 1][i] >>> 8 | aes_enc[t - 1][i] << 24;\n aes_dec[t][s] = aes_dec[t - 1][s] >>> 8 | aes_dec[t - 1][s] << 24;\n }\n }\n }\n\n /**\n * Asm.js module constructor.\n *\n * <p>\n * Heap buffer layout by offset:\n * <pre>\n * 0x0000 encryption key schedule\n * 0x0400 decryption key schedule\n * 0x0800 sbox\n * 0x0c00 inv sbox\n * 0x1000 encryption tables\n * 0x2000 decryption tables\n * 0x3000 reserved (future GCM multiplication lookup table)\n * 0x4000 data\n * </pre>\n * Don't touch anything before <code>0x400</code>.\n * </p>\n *\n * @alias AES_asm\n * @class\n * @param {Object} foreign - <i>ignored</i>\n * @param {ArrayBuffer} buffer - heap buffer to link with\n */\n var wrapper = function wrapper(foreign, buffer) {\n // Init AES stuff for the first time\n if (!aes_init_done) aes_init();\n\n // Fill up AES tables\n var heap = new Uint32Array(buffer);\n heap.set(aes_sbox, 0x0800 >> 2);\n heap.set(aes_sinv, 0x0c00 >> 2);\n for (var i = 0; i < 4; i++) {\n heap.set(aes_enc[i], 0x1000 + 0x400 * i >> 2);\n heap.set(aes_dec[i], 0x2000 + 0x400 * i >> 2);\n }\n\n /**\n * Calculate AES key schedules.\n * @instance\n * @memberof AES_asm\n * @param {number} ks - key size, 4/6/8 (for 128/192/256-bit key correspondingly)\n * @param {number} k0 - key vector components\n * @param {number} k1 - key vector components\n * @param {number} k2 - key vector components\n * @param {number} k3 - key vector components\n * @param {number} k4 - key vector components\n * @param {number} k5 - key vector components\n * @param {number} k6 - key vector components\n * @param {number} k7 - key vector components\n */\n function set_key(ks, k0, k1, k2, k3, k4, k5, k6, k7) {\n var ekeys = heap.subarray(0x000, 60),\n dkeys = heap.subarray(0x100, 0x100 + 60);\n\n // Encryption key schedule\n ekeys.set([k0, k1, k2, k3, k4, k5, k6, k7]);\n for (var i = ks, rcon = 1; i < 4 * ks + 28; i++) {\n var k = ekeys[i - 1];\n if (i % ks === 0 || ks === 8 && i % ks === 4) {\n k = aes_sbox[k >>> 24] << 24 ^ aes_sbox[k >>> 16 & 255] << 16 ^ aes_sbox[k >>> 8 & 255] << 8 ^ aes_sbox[k & 255];\n }\n if (i % ks === 0) {\n k = k << 8 ^ k >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon & 0x80 ? 0x1b : 0);\n }\n ekeys[i] = ekeys[i - ks] ^ k;\n }\n\n // Decryption key schedule\n for (var j = 0; j < i; j += 4) {\n for (var jj = 0; jj < 4; jj++) {\n var k = ekeys[i - (4 + j) + (4 - jj) % 4];\n if (j < 4 || j >= i - 4) {\n dkeys[j + jj] = k;\n } else {\n dkeys[j + jj] = aes_dec[0][aes_sbox[k >>> 24]] ^ aes_dec[1][aes_sbox[k >>> 16 & 255]] ^ aes_dec[2][aes_sbox[k >>> 8 & 255]] ^ aes_dec[3][aes_sbox[k & 255]];\n }\n }\n }\n\n // Set rounds number\n asm.set_rounds(ks + 5);\n }\n\n // create library object with necessary properties\n var stdlib = { Uint8Array: Uint8Array, Uint32Array: Uint32Array };\n\n var asm = function (stdlib, foreign, buffer) {\n \"use asm\";\n\n var S0 = 0,\n S1 = 0,\n S2 = 0,\n S3 = 0,\n I0 = 0,\n I1 = 0,\n I2 = 0,\n I3 = 0,\n N0 = 0,\n N1 = 0,\n N2 = 0,\n N3 = 0,\n M0 = 0,\n M1 = 0,\n M2 = 0,\n M3 = 0,\n H0 = 0,\n H1 = 0,\n H2 = 0,\n H3 = 0,\n R = 0;\n\n var HEAP = new stdlib.Uint32Array(buffer),\n DATA = new stdlib.Uint8Array(buffer);\n\n /**\n * AES core\n * @param {number} k - precomputed key schedule offset\n * @param {number} s - precomputed sbox table offset\n * @param {number} t - precomputed round table offset\n * @param {number} r - number of inner rounds to perform\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _core(k, s, t, r, x0, x1, x2, x3) {\n k = k | 0;\n s = s | 0;\n t = t | 0;\n r = r | 0;\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t1 = 0,\n t2 = 0,\n t3 = 0,\n y0 = 0,\n y1 = 0,\n y2 = 0,\n y3 = 0,\n i = 0;\n\n t1 = t | 0x400, t2 = t | 0x800, t3 = t | 0xc00;\n\n // round 0\n x0 = x0 ^ HEAP[(k | 0) >> 2], x1 = x1 ^ HEAP[(k | 4) >> 2], x2 = x2 ^ HEAP[(k | 8) >> 2], x3 = x3 ^ HEAP[(k | 12) >> 2];\n\n // round 1..r\n for (i = 16; (i | 0) <= r << 4; i = i + 16 | 0) {\n y0 = HEAP[(t | x0 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x1 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x2 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x3 << 2 & 1020) >> 2] ^ HEAP[(k | i | 0) >> 2], y1 = HEAP[(t | x1 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x2 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x3 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x0 << 2 & 1020) >> 2] ^ HEAP[(k | i | 4) >> 2], y2 = HEAP[(t | x2 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x3 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x0 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x1 << 2 & 1020) >> 2] ^ HEAP[(k | i | 8) >> 2], y3 = HEAP[(t | x3 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x0 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x1 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x2 << 2 & 1020) >> 2] ^ HEAP[(k | i | 12) >> 2];\n x0 = y0, x1 = y1, x2 = y2, x3 = y3;\n }\n\n // final round\n S0 = HEAP[(s | x0 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x1 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x2 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x3 << 2 & 1020) >> 2] ^ HEAP[(k | i | 0) >> 2], S1 = HEAP[(s | x1 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x2 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x3 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x0 << 2 & 1020) >> 2] ^ HEAP[(k | i | 4) >> 2], S2 = HEAP[(s | x2 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x3 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x0 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x1 << 2 & 1020) >> 2] ^ HEAP[(k | i | 8) >> 2], S3 = HEAP[(s | x3 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x0 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x1 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x2 << 2 & 1020) >> 2] ^ HEAP[(k | i | 12) >> 2];\n }\n\n /**\n * ECB mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ecb_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, x0, x1, x2, x3);\n }\n\n /**\n * ECB mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ecb_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t = 0;\n\n _core(0x0400, 0x0c00, 0x2000, R, x0, x3, x2, x1);\n\n t = S1, S1 = S3, S3 = t;\n }\n\n /**\n * CBC mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cbc_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0 ^ x0, I1 ^ x1, I2 ^ x2, I3 ^ x3);\n\n I0 = S0, I1 = S1, I2 = S2, I3 = S3;\n }\n\n /**\n * CBC mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cbc_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t = 0;\n\n _core(0x0400, 0x0c00, 0x2000, R, x0, x3, x2, x1);\n\n t = S1, S1 = S3, S3 = t;\n\n S0 = S0 ^ I0, S1 = S1 ^ I1, S2 = S2 ^ I2, S3 = S3 ^ I3;\n\n I0 = x0, I1 = x1, I2 = x2, I3 = x3;\n }\n\n /**\n * CFB mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cfb_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0, I1, I2, I3);\n\n I0 = S0 = S0 ^ x0, I1 = S1 = S1 ^ x1, I2 = S2 = S2 ^ x2, I3 = S3 = S3 ^ x3;\n }\n\n /**\n * CFB mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cfb_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0, I1, I2, I3);\n\n S0 = S0 ^ x0, S1 = S1 ^ x1, S2 = S2 ^ x2, S3 = S3 ^ x3;\n\n I0 = x0, I1 = x1, I2 = x2, I3 = x3;\n }\n\n /**\n * OFB mode encryption / decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ofb(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, I0, I1, I2, I3);\n\n I0 = S0, I1 = S1, I2 = S2, I3 = S3;\n\n S0 = S0 ^ x0, S1 = S1 ^ x1, S2 = S2 ^ x2, S3 = S3 ^ x3;\n }\n\n /**\n * CTR mode encryption / decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ctr(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(0x0000, 0x0800, 0x1000, R, N0, N1, N2, N3);\n\n N3 = ~M3 & N3 | M3 & N3 + 1;\n N2 = ~M2 & N2 | M2 & N2 + ((N3 | 0) == 0);\n N1 = ~M1 & N1 | M1 & N1 + ((N2 | 0) == 0);\n N0 = ~M0 & N0 | M0 & N0 + ((N1 | 0) == 0);\n\n S0 = S0 ^ x0;\n S1 = S1 ^ x1;\n S2 = S2 ^ x2;\n S3 = S3 ^ x3;\n }\n\n /**\n * GCM mode MAC calculation\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _gcm_mac(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var y0 = 0,\n y1 = 0,\n y2 = 0,\n y3 = 0,\n z0 = 0,\n z1 = 0,\n z2 = 0,\n z3 = 0,\n i = 0,\n c = 0;\n\n x0 = x0 ^ I0, x1 = x1 ^ I1, x2 = x2 ^ I2, x3 = x3 ^ I3;\n\n y0 = H0 | 0, y1 = H1 | 0, y2 = H2 | 0, y3 = H3 | 0;\n\n for (; (i | 0) < 128; i = i + 1 | 0) {\n if (y0 >>> 31) {\n z0 = z0 ^ x0, z1 = z1 ^ x1, z2 = z2 ^ x2, z3 = z3 ^ x3;\n }\n\n y0 = y0 << 1 | y1 >>> 31, y1 = y1 << 1 | y2 >>> 31, y2 = y2 << 1 | y3 >>> 31, y3 = y3 << 1;\n\n c = x3 & 1;\n\n x3 = x3 >>> 1 | x2 << 31, x2 = x2 >>> 1 | x1 << 31, x1 = x1 >>> 1 | x0 << 31, x0 = x0 >>> 1;\n\n if (c) x0 = x0 ^ 0xe1000000;\n }\n\n I0 = z0, I1 = z1, I2 = z2, I3 = z3;\n }\n\n /**\n * Set the internal rounds number.\n * @instance\n * @memberof AES_asm\n * @param {number} r - number if inner AES rounds\n */\n function set_rounds(r) {\n r = r | 0;\n R = r;\n }\n\n /**\n * Populate the internal state of the module.\n * @instance\n * @memberof AES_asm\n * @param {number} s0 - state vector\n * @param {number} s1 - state vector\n * @param {number} s2 - state vector\n * @param {number} s3 - state vector\n */\n function set_state(s0, s1, s2, s3) {\n s0 = s0 | 0;\n s1 = s1 | 0;\n s2 = s2 | 0;\n s3 = s3 | 0;\n\n S0 = s0, S1 = s1, S2 = s2, S3 = s3;\n }\n\n /**\n * Populate the internal iv of the module.\n * @instance\n * @memberof AES_asm\n * @param {number} i0 - iv vector\n * @param {number} i1 - iv vector\n * @param {number} i2 - iv vector\n * @param {number} i3 - iv vector\n */\n function set_iv(i0, i1, i2, i3) {\n i0 = i0 | 0;\n i1 = i1 | 0;\n i2 = i2 | 0;\n i3 = i3 | 0;\n\n I0 = i0, I1 = i1, I2 = i2, I3 = i3;\n }\n\n /**\n * Set nonce for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} n0 - nonce vector\n * @param {number} n1 - nonce vector\n * @param {number} n2 - nonce vector\n * @param {number} n3 - nonce vector\n */\n function set_nonce(n0, n1, n2, n3) {\n n0 = n0 | 0;\n n1 = n1 | 0;\n n2 = n2 | 0;\n n3 = n3 | 0;\n\n N0 = n0, N1 = n1, N2 = n2, N3 = n3;\n }\n\n /**\n * Set counter mask for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} m0 - counter mask vector\n * @param {number} m1 - counter mask vector\n * @param {number} m2 - counter mask vector\n * @param {number} m3 - counter mask vector\n */\n function set_mask(m0, m1, m2, m3) {\n m0 = m0 | 0;\n m1 = m1 | 0;\n m2 = m2 | 0;\n m3 = m3 | 0;\n\n M0 = m0, M1 = m1, M2 = m2, M3 = m3;\n }\n\n /**\n * Set counter for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} c0 - counter vector\n * @param {number} c1 - counter vector\n * @param {number} c2 - counter vector\n * @param {number} c3 - counter vector\n */\n function set_counter(c0, c1, c2, c3) {\n c0 = c0 | 0;\n c1 = c1 | 0;\n c2 = c2 | 0;\n c3 = c3 | 0;\n\n N3 = ~M3 & N3 | M3 & c3, N2 = ~M2 & N2 | M2 & c2, N1 = ~M1 & N1 | M1 & c1, N0 = ~M0 & N0 | M0 & c0;\n }\n\n /**\n * Store the internal state vector into the heap.\n * @instance\n * @memberof AES_asm\n * @param {number} pos - offset where to put the data\n * @return {number} The number of bytes have been written into the heap, always 16.\n */\n function get_state(pos) {\n pos = pos | 0;\n\n if (pos & 15) return -1;\n\n DATA[pos | 0] = S0 >>> 24, DATA[pos | 1] = S0 >>> 16 & 255, DATA[pos | 2] = S0 >>> 8 & 255, DATA[pos | 3] = S0 & 255, DATA[pos | 4] = S1 >>> 24, DATA[pos | 5] = S1 >>> 16 & 255, DATA[pos | 6] = S1 >>> 8 & 255, DATA[pos | 7] = S1 & 255, DATA[pos | 8] = S2 >>> 24, DATA[pos | 9] = S2 >>> 16 & 255, DATA[pos | 10] = S2 >>> 8 & 255, DATA[pos | 11] = S2 & 255, DATA[pos | 12] = S3 >>> 24, DATA[pos | 13] = S3 >>> 16 & 255, DATA[pos | 14] = S3 >>> 8 & 255, DATA[pos | 15] = S3 & 255;\n\n return 16;\n }\n\n /**\n * Store the internal iv vector into the heap.\n * @instance\n * @memberof AES_asm\n * @param {number} pos - offset where to put the data\n * @return {number} The number of bytes have been written into the heap, always 16.\n */\n function get_iv(pos) {\n pos = pos | 0;\n\n if (pos & 15) return -1;\n\n DATA[pos | 0] = I0 >>> 24, DATA[pos | 1] = I0 >>> 16 & 255, DATA[pos | 2] = I0 >>> 8 & 255, DATA[pos | 3] = I0 & 255, DATA[pos | 4] = I1 >>> 24, DATA[pos | 5] = I1 >>> 16 & 255, DATA[pos | 6] = I1 >>> 8 & 255, DATA[pos | 7] = I1 & 255, DATA[pos | 8] = I2 >>> 24, DATA[pos | 9] = I2 >>> 16 & 255, DATA[pos | 10] = I2 >>> 8 & 255, DATA[pos | 11] = I2 & 255, DATA[pos | 12] = I3 >>> 24, DATA[pos | 13] = I3 >>> 16 & 255, DATA[pos | 14] = I3 >>> 8 & 255, DATA[pos | 15] = I3 & 255;\n\n return 16;\n }\n\n /**\n * GCM initialization.\n * @instance\n * @memberof AES_asm\n */\n function gcm_init() {\n _ecb_enc(0, 0, 0, 0);\n H0 = S0, H1 = S1, H2 = S2, H3 = S3;\n }\n\n /**\n * Perform ciphering operation on the supplied data.\n * @instance\n * @memberof AES_asm\n * @param {number} mode - block cipher mode (see {@link AES_asm} mode constants)\n * @param {number} pos - offset of the data being processed\n * @param {number} len - length of the data being processed\n * @return {number} Actual amount of data have been processed.\n */\n function cipher(mode, pos, len) {\n mode = mode | 0;\n pos = pos | 0;\n len = len | 0;\n\n var ret = 0;\n\n if (pos & 15) return -1;\n\n while ((len | 0) >= 16) {\n _cipher_modes[mode & 7](DATA[pos | 0] << 24 | DATA[pos | 1] << 16 | DATA[pos | 2] << 8 | DATA[pos | 3], DATA[pos | 4] << 24 | DATA[pos | 5] << 16 | DATA[pos | 6] << 8 | DATA[pos | 7], DATA[pos | 8] << 24 | DATA[pos | 9] << 16 | DATA[pos | 10] << 8 | DATA[pos | 11], DATA[pos | 12] << 24 | DATA[pos | 13] << 16 | DATA[pos | 14] << 8 | DATA[pos | 15]);\n\n DATA[pos | 0] = S0 >>> 24, DATA[pos | 1] = S0 >>> 16 & 255, DATA[pos | 2] = S0 >>> 8 & 255, DATA[pos | 3] = S0 & 255, DATA[pos | 4] = S1 >>> 24, DATA[pos | 5] = S1 >>> 16 & 255, DATA[pos | 6] = S1 >>> 8 & 255, DATA[pos | 7] = S1 & 255, DATA[pos | 8] = S2 >>> 24, DATA[pos | 9] = S2 >>> 16 & 255, DATA[pos | 10] = S2 >>> 8 & 255, DATA[pos | 11] = S2 & 255, DATA[pos | 12] = S3 >>> 24, DATA[pos | 13] = S3 >>> 16 & 255, DATA[pos | 14] = S3 >>> 8 & 255, DATA[pos | 15] = S3 & 255;\n\n ret = ret + 16 | 0, pos = pos + 16 | 0, len = len - 16 | 0;\n }\n\n return ret | 0;\n }\n\n /**\n * Calculates MAC of the supplied data.\n * @instance\n * @memberof AES_asm\n * @param {number} mode - block cipher mode (see {@link AES_asm} mode constants)\n * @param {number} pos - offset of the data being processed\n * @param {number} len - length of the data being processed\n * @return {number} Actual amount of data have been processed.\n */\n function mac(mode, pos, len) {\n mode = mode | 0;\n pos = pos | 0;\n len = len | 0;\n\n var ret = 0;\n\n if (pos & 15) return -1;\n\n while ((len | 0) >= 16) {\n _mac_modes[mode & 1](DATA[pos | 0] << 24 | DATA[pos | 1] << 16 | DATA[pos | 2] << 8 | DATA[pos | 3], DATA[pos | 4] << 24 | DATA[pos | 5] << 16 | DATA[pos | 6] << 8 | DATA[pos | 7], DATA[pos | 8] << 24 | DATA[pos | 9] << 16 | DATA[pos | 10] << 8 | DATA[pos | 11], DATA[pos | 12] << 24 | DATA[pos | 13] << 16 | DATA[pos | 14] << 8 | DATA[pos | 15]);\n\n ret = ret + 16 | 0, pos = pos + 16 | 0, len = len - 16 | 0;\n }\n\n return ret | 0;\n }\n\n /**\n * AES cipher modes table (virual methods)\n */\n var _cipher_modes = [_ecb_enc, _ecb_dec, _cbc_enc, _cbc_dec, _cfb_enc, _cfb_dec, _ofb, _ctr];\n\n /**\n * AES MAC modes table (virual methods)\n */\n var _mac_modes = [_cbc_enc, _gcm_mac];\n\n /**\n * Asm.js module exports\n */\n return {\n set_rounds: set_rounds,\n set_state: set_state,\n set_iv: set_iv,\n set_nonce: set_nonce,\n set_mask: set_mask,\n set_counter: set_counter,\n get_state: get_state,\n get_iv: get_iv,\n gcm_init: gcm_init,\n cipher: cipher,\n mac: mac\n };\n }(stdlib, foreign, buffer);\n\n asm.set_key = set_key;\n\n return asm;\n };\n\n /**\n * AES enciphering mode constants\n * @enum {number}\n * @const\n */\n wrapper.ENC = {\n ECB: 0,\n CBC: 2,\n CFB: 4,\n OFB: 6,\n CTR: 7\n },\n\n /**\n * AES deciphering mode constants\n * @enum {number}\n * @const\n */\n wrapper.DEC = {\n ECB: 1,\n CBC: 3,\n CFB: 5,\n OFB: 6,\n CTR: 7\n },\n\n /**\n * AES MAC mode constants\n * @enum {number}\n * @const\n */\n wrapper.MAC = {\n CBC: 0,\n GCM: 1\n };\n\n /**\n * Heap data offset\n * @type {number}\n * @const\n */\n wrapper.HEAP_DATA = 0x4000;\n\n return wrapper;\n}();\n\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES = undefined;\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _aes = _dereq_('./aes.asm');\n\nvar _utils = _dereq_('../utils');\n\nvar _errors = _dereq_('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES = exports.AES = function () {\n function AES(key, iv, padding, heap, asm) {\n (0, _classCallCheck3.default)(this, AES);\n\n this.nonce = null;\n this.counter = 0;\n this.counterSize = 0;\n\n this.heap = (0, _utils._heap_init)(Uint8Array, heap).subarray(_aes.AES_asm.HEAP_DATA);\n this.asm = asm || (0, _aes.AES_asm)(null, this.heap.buffer);\n this.mode = null;\n this.key = null;\n\n this.AES_reset(key, iv, padding);\n }\n\n /**\n * @param {Uint8Array} key\n */\n\n\n (0, _createClass3.default)(AES, [{\n key: 'AES_set_key',\n value: function AES_set_key(key) {\n if (key !== undefined) {\n if (!(0, _utils.is_bytes)(key)) {\n throw new TypeError('unexpected key type');\n }\n\n var keylen = key.length;\n if (keylen !== 16 && keylen !== 24 && keylen !== 32) throw new _errors.IllegalArgumentError('illegal key size');\n\n var keyview = new DataView(key.buffer, key.byteOffset, key.byteLength);\n this.asm.set_key(keylen >> 2, keyview.getUint32(0), keyview.getUint32(4), keyview.getUint32(8), keyview.getUint32(12), keylen > 16 ? keyview.getUint32(16) : 0, keylen > 16 ? keyview.getUint32(20) : 0, keylen > 24 ? keyview.getUint32(24) : 0, keylen > 24 ? keyview.getUint32(28) : 0);\n\n this.key = key;\n } else if (!this.key) {\n throw new Error('key is required');\n }\n }\n\n /**\n * This should be mixin instead of inheritance\n *\n * @param {Uint8Array} nonce\n * @param {number} [counter]\n * @param {number} [size]\n */\n\n }, {\n key: 'AES_CTR_set_options',\n value: function AES_CTR_set_options(nonce, counter, size) {\n if (size !== undefined) {\n if (size < 8 || size > 48) throw new _errors.IllegalArgumentError('illegal counter size');\n\n this.counterSize = size;\n\n var mask = Math.pow(2, size) - 1;\n this.asm.set_mask(0, 0, mask / 0x100000000 | 0, mask | 0);\n } else {\n this.counterSize = size = 48;\n this.asm.set_mask(0, 0, 0xffff, 0xffffffff);\n }\n\n if (nonce !== undefined) {\n if (!(0, _utils.is_bytes)(nonce)) {\n throw new TypeError('unexpected nonce type');\n }\n\n var len = nonce.length;\n if (!len || len > 16) throw new _errors.IllegalArgumentError('illegal nonce size');\n\n this.nonce = nonce;\n\n var view = new DataView(new ArrayBuffer(16));\n new Uint8Array(view.buffer).set(nonce);\n\n this.asm.set_nonce(view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12));\n } else {\n throw new Error('nonce is required');\n }\n\n if (counter !== undefined) {\n if (!(0, _utils.is_number)(counter)) throw new TypeError('unexpected counter type');\n\n if (counter < 0 || counter >= Math.pow(2, size)) throw new _errors.IllegalArgumentError('illegal counter value');\n\n this.counter = counter;\n\n this.asm.set_counter(0, 0, counter / 0x100000000 | 0, counter | 0);\n } else {\n this.counter = 0;\n }\n }\n\n /**\n * @param {Uint8Array} iv\n */\n\n }, {\n key: 'AES_set_iv',\n value: function AES_set_iv(iv) {\n if (iv !== undefined) {\n if (!(0, _utils.is_bytes)(iv)) {\n throw new TypeError('unexpected iv type');\n }\n\n if (iv.length !== 16) throw new _errors.IllegalArgumentError('illegal iv size');\n\n var ivview = new DataView(iv.buffer, iv.byteOffset, iv.byteLength);\n\n this.iv = iv;\n this.asm.set_iv(ivview.getUint32(0), ivview.getUint32(4), ivview.getUint32(8), ivview.getUint32(12));\n } else {\n this.iv = null;\n this.asm.set_iv(0, 0, 0, 0);\n }\n }\n\n /**\n * @param {boolean} padding\n */\n\n }, {\n key: 'AES_set_padding',\n value: function AES_set_padding(padding) {\n if (padding !== undefined) {\n this.padding = !!padding;\n } else {\n this.padding = true;\n }\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {boolean} [padding]\n */\n\n }, {\n key: 'AES_reset',\n value: function AES_reset(key, iv, padding) {\n this.result = null;\n this.pos = 0;\n this.len = 0;\n\n this.AES_set_key(key);\n this.AES_set_iv(iv);\n this.AES_set_padding(padding);\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Encrypt_process',\n value: function AES_Encrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.ENC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n dpos = 0,\n dlen = data.length || 0,\n rpos = 0,\n rlen = len + dlen & -16,\n wlen = 0;\n\n var result = new Uint8Array(rlen);\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.cipher(amode, hpos + pos, len);\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n rpos += wlen;\n\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n } else {\n pos = 0;\n len = 0;\n }\n }\n\n this.result = result;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Encrypt_finish',\n value: function AES_Encrypt_finish(data) {\n var presult = null,\n prlen = 0;\n\n if (data !== undefined) {\n presult = this.AES_Encrypt_process(data).result;\n prlen = presult.length;\n }\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.ENC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n plen = 16 - len % 16,\n rlen = len;\n\n if (this.hasOwnProperty('padding')) {\n if (this.padding) {\n for (var p = 0; p < plen; ++p) {\n heap[pos + len + p] = plen;\n }len += plen;\n rlen = len;\n } else if (len % 16) {\n throw new _errors.IllegalArgumentError('data length must be a multiple of the block size');\n }\n } else {\n len += plen;\n }\n\n var result = new Uint8Array(prlen + rlen);\n\n if (prlen) result.set(presult);\n\n if (len) asm.cipher(amode, hpos + pos, len);\n\n if (rlen) result.set(heap.subarray(pos, pos + rlen), prlen);\n\n this.result = result;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Decrypt_process',\n value: function AES_Decrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.DEC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n dpos = 0,\n dlen = data.length || 0,\n rpos = 0,\n rlen = len + dlen & -16,\n plen = 0,\n wlen = 0;\n\n if (this.padding) {\n plen = len + dlen - rlen || 16;\n rlen -= plen;\n }\n\n var result = new Uint8Array(rlen);\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.cipher(amode, hpos + pos, len - (!dlen ? plen : 0));\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n rpos += wlen;\n\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n } else {\n pos = 0;\n len = 0;\n }\n }\n\n this.result = result;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n */\n\n }, {\n key: 'AES_Decrypt_finish',\n value: function AES_Decrypt_finish(data) {\n var presult = null,\n prlen = 0;\n\n if (data !== undefined) {\n presult = this.AES_Decrypt_process(data).result;\n prlen = presult.length;\n }\n\n var asm = this.asm,\n heap = this.heap,\n amode = _aes.AES_asm.DEC[this.mode],\n hpos = _aes.AES_asm.HEAP_DATA,\n pos = this.pos,\n len = this.len,\n rlen = len;\n\n if (len > 0) {\n if (len % 16) {\n if (this.hasOwnProperty('padding')) {\n throw new _errors.IllegalArgumentError('data length must be a multiple of the block size');\n } else {\n len += 16 - len % 16;\n }\n }\n\n asm.cipher(amode, hpos + pos, len);\n\n if (this.hasOwnProperty('padding') && this.padding) {\n var pad = heap[pos + rlen - 1];\n if (pad < 1 || pad > 16 || pad > rlen) throw new _errors.SecurityError('bad padding');\n\n var pcheck = 0;\n for (var i = pad; i > 1; i--) {\n pcheck |= pad ^ heap[pos + rlen - i];\n }if (pcheck) throw new _errors.SecurityError('bad padding');\n\n rlen -= pad;\n }\n }\n\n var result = new Uint8Array(prlen + rlen);\n\n if (prlen > 0) {\n result.set(presult);\n }\n\n if (rlen > 0) {\n result.set(heap.subarray(pos, pos + rlen), prlen);\n }\n\n this.result = result;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n }]);\n return AES;\n}();\n\n},{\"../errors\":14,\"../utils\":19,\"./aes.asm\":2,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37}],4:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CBC_Decrypt = exports.AES_CBC_Encrypt = exports.AES_CBC = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES_CBC = exports.AES_CBC = function (_AES) {\n (0, _inherits3.default)(AES_CBC, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {boolean} [padding=true]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CBC(key) {\n var iv = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var heap = arguments[3];\n var asm = arguments[4];\n (0, _classCallCheck3.default)(this, AES_CBC);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_CBC.__proto__ || (0, _getPrototypeOf2.default)(AES_CBC)).call(this, key, iv, padding, heap, asm));\n\n _this.mode = 'CBC';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n (0, _createClass3.default)(AES_CBC, [{\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CBC;\n}(_aes.AES); /**\n * Cipher Block Chaining Mode (CBC)\n */\n\n\nvar AES_CBC_Encrypt = exports.AES_CBC_Encrypt = function (_AES_CBC) {\n (0, _inherits3.default)(AES_CBC_Encrypt, _AES_CBC);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {boolean} [padding=true]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CBC_Encrypt(key, iv, padding, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CBC_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CBC_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CBC_Encrypt)).call(this, key, iv, padding, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_CBC_Encrypt}\n */\n\n\n (0, _createClass3.default)(AES_CBC_Encrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Encrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Encrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CBC_Encrypt;\n}(AES_CBC);\n\nvar AES_CBC_Decrypt = exports.AES_CBC_Decrypt = function (_AES_CBC2) {\n (0, _inherits3.default)(AES_CBC_Decrypt, _AES_CBC2);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {boolean} [padding=true]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CBC_Decrypt(key, iv, padding, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CBC_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CBC_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CBC_Decrypt)).call(this, key, iv, padding, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_CBC_Decrypt}\n */\n\n\n (0, _createClass3.default)(AES_CBC_Decrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Decrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Decrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CBC_Decrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CBC_Decrypt;\n}(AES_CBC);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],5:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CBC_Decrypt = exports.AES_CBC_Encrypt = exports.AES_CBC = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _cbc = _dereq_('./cbc');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {boolean} [padding]\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\nfunction AES_CBC_encrypt_bytes(data, key, padding, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cbc.AES_CBC(key, iv, padding, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {boolean} [padding]\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\nfunction AES_CBC_decrypt_bytes(data, key, padding, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cbc.AES_CBC(key, iv, padding, _exports._AES_heap_instance, _exports._AES_asm_instance).decrypt(data).result;\n}\n\n_cbc.AES_CBC.encrypt = AES_CBC_encrypt_bytes;\n_cbc.AES_CBC.decrypt = AES_CBC_decrypt_bytes;\n\nexports.AES_CBC = _cbc.AES_CBC;\nexports.AES_CBC_Encrypt = _cbc.AES_CBC_Encrypt;\nexports.AES_CBC_Decrypt = _cbc.AES_CBC_Decrypt;\n\n},{\"../exports\":11,\"./cbc\":4}],6:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CFB_Decrypt = exports.AES_CFB_Encrypt = exports.AES_CFB = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES_CFB = exports.AES_CFB = function (_AES) {\n (0, _inherits3.default)(AES_CFB, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CFB(key, iv, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CFB);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_CFB.__proto__ || (0, _getPrototypeOf2.default)(AES_CFB)).call(this, key, iv, true, heap, asm));\n\n delete _this.padding;\n\n _this.mode = 'CFB';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n (0, _createClass3.default)(AES_CFB, [{\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CFB;\n}(_aes.AES); /**\n * Cipher Feedback Mode (CFB)\n */\n\nvar AES_CFB_Encrypt = exports.AES_CFB_Encrypt = function (_AES_CFB) {\n (0, _inherits3.default)(AES_CFB_Encrypt, _AES_CFB);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CFB_Encrypt(key, iv, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CFB_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CFB_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CFB_Encrypt)).call(this, key, iv, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {boolean} [padding]\n * @returns {AES_CFB_Encrypt}\n */\n\n\n (0, _createClass3.default)(AES_CFB_Encrypt, [{\n key: 'reset',\n value: function reset(key, iv, padding) {\n return this.AES_reset(key, iv, padding);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Encrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Encrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CFB_Encrypt;\n}(AES_CFB);\n\nvar AES_CFB_Decrypt = exports.AES_CFB_Decrypt = function (_AES_CFB2) {\n (0, _inherits3.default)(AES_CFB_Decrypt, _AES_CFB2);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv=null]\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CFB_Decrypt(key, iv, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CFB_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_CFB_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CFB_Decrypt)).call(this, key, iv, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @param {boolean} [padding]\n * @returns {AES_CFB_Decrypt}\n */\n\n\n (0, _createClass3.default)(AES_CFB_Decrypt, [{\n key: 'reset',\n value: function reset(key, iv, padding) {\n return this.AES_reset(key, iv, padding);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Decrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Decrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CFB_Decrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_CFB_Decrypt;\n}(AES_CFB);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],7:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CFB_Decrypt = exports.AES_CFB_Encrypt = exports.AES_CFB = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _cfb = _dereq_('./cfb');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\n/**\n * AES-CFB exports\n */\n\nfunction AES_CFB_encrypt_bytes(data, key, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cfb.AES_CFB(key, iv, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} [iv]\n * @returns {Uint8Array}\n */\nfunction AES_CFB_decrypt_bytes(data, key, iv) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n return new _cfb.AES_CFB(key, iv, _exports._AES_heap_instance, _exports._AES_asm_instance).decrypt(data).result;\n}\n\n_cfb.AES_CFB.encrypt = AES_CFB_encrypt_bytes;\n_cfb.AES_CFB.decrypt = AES_CFB_decrypt_bytes;\n\nexports.AES_CFB = _cfb.AES_CFB;\nexports.AES_CFB_Encrypt = _cfb.AES_CFB_Encrypt;\nexports.AES_CFB_Decrypt = _cfb.AES_CFB_Decrypt;\n\n},{\"../exports\":11,\"./cfb\":6}],8:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CTR_Crypt = exports.AES_CTR = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AES_CTR = exports.AES_CTR = function (_AES) {\n (0, _inherits3.default)(AES_CTR, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CTR(key, nonce, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CTR);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_CTR.__proto__ || (0, _getPrototypeOf2.default)(AES_CTR)).call(this, key, undefined, undefined, heap, asm));\n\n _this.reset(key, nonce);\n\n _this.AES_CTR_set_options(nonce);\n delete _this.padding;\n\n _this.mode = 'CTR';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {number} [counter]\n * @param {number} [counterSize]\n * @returns {AES_CTR}\n */\n\n\n (0, _createClass3.default)(AES_CTR, [{\n key: 'reset',\n value: function reset(key, nonce, counter, counterSize) {\n this.AES_reset(key, undefined, undefined);\n\n this.AES_CTR_set_options(nonce, counter, counterSize);\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR}\n */\n\n }, {\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR}\n */\n\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CTR;\n}(_aes.AES); /**\n * Counter Mode (CTR)\n */\n\nvar AES_CTR_Crypt = exports.AES_CTR_Crypt = function (_AES_CTR) {\n (0, _inherits3.default)(AES_CTR_Crypt, _AES_CTR);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_CTR_Crypt(key, nonce, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_CTR_Crypt);\n\n var _this2 = (0, _possibleConstructorReturn3.default)(this, (AES_CTR_Crypt.__proto__ || (0, _getPrototypeOf2.default)(AES_CTR_Crypt)).call(this, key, nonce, heap, asm));\n\n _this2.BLOCK_SIZE = 16;\n return _this2;\n }\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {number} [counter]\n * @param {number} [counterSize]\n * @returns {AES_CTR_Crypt}\n */\n\n\n (0, _createClass3.default)(AES_CTR_Crypt, [{\n key: 'reset',\n value: function reset(key, nonce, counter, counterSize) {\n this.AES_reset(key, undefined, undefined);\n\n this.AES_CTR_set_options(nonce, counter, counterSize);\n\n return this;\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR_Crypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_CTR_Crypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_CTR_Crypt;\n}(AES_CTR);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],9:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_CTR = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _ctr = _dereq_('./ctr');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @returns {Uint8Array}\n */\n/**\n * AES-CTR exports\n */\n\nfunction AES_CTR_crypt_bytes(data, key, nonce) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n if (nonce === undefined) throw new SyntaxError('nonce required');\n return new _ctr.AES_CTR(key, nonce, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n_ctr.AES_CTR.encrypt = AES_CTR_crypt_bytes;\n_ctr.AES_CTR.decrypt = AES_CTR_crypt_bytes;\n\nexports.AES_CTR = _ctr.AES_CTR;\n\n},{\"../exports\":11,\"./ctr\":8}],10:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_ECB_Decrypt = exports.AES_ECB_Encrypt = exports.AES_ECB = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _aes = _dereq_('../aes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Electronic Code Book Mode (ECB)\n */\nvar AES_ECB = exports.AES_ECB = function (_AES) {\n (0, _inherits3.default)(AES_ECB, _AES);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_ECB(key, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_ECB);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_ECB.__proto__ || (0, _getPrototypeOf2.default)(AES_ECB)).call(this, key, undefined, false, heap, asm));\n\n _this.mode = 'ECB';\n _this.BLOCK_SIZE = 16;\n return _this;\n }\n\n (0, _createClass3.default)(AES_ECB, [{\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_Encrypt_finish(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_ECB;\n}(_aes.AES);\n\nvar AES_ECB_Encrypt = exports.AES_ECB_Encrypt = function (_AES_ECB) {\n (0, _inherits3.default)(AES_ECB_Encrypt, _AES_ECB);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_ECB_Encrypt(key, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_ECB_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_ECB_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_ECB_Encrypt)).call(this, key, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_ECB_Encrypt}\n */\n\n\n (0, _createClass3.default)(AES_ECB_Encrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Encrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Encrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Encrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Encrypt_finish(data);\n }\n }]);\n return AES_ECB_Encrypt;\n}(AES_ECB);\n\nvar AES_ECB_Decrypt = exports.AES_ECB_Decrypt = function (_AES_ECB2) {\n (0, _inherits3.default)(AES_ECB_Decrypt, _AES_ECB2);\n\n /**\n * @param {Uint8Array} key\n * @param {Uint8Array} [heap]\n * @param {Uint8Array} [asm]\n */\n function AES_ECB_Decrypt(key, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_ECB_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_ECB_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_ECB_Decrypt)).call(this, key, heap, asm));\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {AES_ECB_Decrypt}\n */\n\n\n (0, _createClass3.default)(AES_ECB_Decrypt, [{\n key: 'reset',\n value: function reset(key) {\n return this.AES_reset(key, null, true);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Decrypt}\n */\n\n }, {\n key: 'process',\n value: function process(data) {\n return this.AES_Decrypt_process(data);\n }\n\n /**\n * @param {Uint8Array} data\n * @returns {AES_ECB_Decrypt}\n */\n\n }, {\n key: 'finish',\n value: function finish(data) {\n return this.AES_Decrypt_finish(data);\n }\n }]);\n return AES_ECB_Decrypt;\n}(AES_ECB);\n\n},{\"../aes\":3,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],11:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports._AES_asm_instance = exports._AES_heap_instance = undefined;\n\nvar _aes = _dereq_('./aes.asm');\n\nvar _AES_heap_instance = exports._AES_heap_instance = new Uint8Array(0x100000); // 1MB\n// shared asm.js module and heap\nvar _AES_asm_instance = exports._AES_asm_instance = (0, _aes.AES_asm)(null, _AES_heap_instance.buffer);\n\n},{\"./aes.asm\":2}],12:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_GCM_Decrypt = exports.AES_GCM_Encrypt = exports.AES_GCM = undefined;\n\nvar _exports = _dereq_('../exports');\n\nvar _gcm = _dereq_('./gcm');\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [adata]\n * @param {number} [tagSize]\n * @return {Uint8Array}\n */\n/**\n * AES-GCM exports\n */\n\nfunction AES_GCM_encrypt_bytes(data, key, nonce, adata, tagSize) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n if (nonce === undefined) throw new SyntaxError('nonce required');\n return new _gcm.AES_GCM(key, nonce, adata, tagSize, _exports._AES_heap_instance, _exports._AES_asm_instance).encrypt(data).result;\n}\n\n/**\n * @param {Uint8Array} data\n * @param {Uint8Array} key\n * @param {Uint8Array} nonce\n * @param {Uint8Array} [adata]\n * @param {number} [tagSize]\n * @return {Uint8Array}\n */\nfunction AES_GCM_decrypt_bytes(data, key, nonce, adata, tagSize) {\n if (data === undefined) throw new SyntaxError('data required');\n if (key === undefined) throw new SyntaxError('key required');\n if (nonce === undefined) throw new SyntaxError('nonce required');\n return new _gcm.AES_GCM(key, nonce, adata, tagSize, _exports._AES_heap_instance, _exports._AES_asm_instance).decrypt(data).result;\n}\n\n_gcm.AES_GCM.encrypt = AES_GCM_encrypt_bytes;\n_gcm.AES_GCM.decrypt = AES_GCM_decrypt_bytes;\n\nexports.AES_GCM = _gcm.AES_GCM;\nexports.AES_GCM_Encrypt = _gcm.AES_GCM_Encrypt;\nexports.AES_GCM_Decrypt = _gcm.AES_GCM_Decrypt;\n\n},{\"../exports\":11,\"./gcm\":13}],13:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AES_GCM_Decrypt = exports.AES_GCM_Encrypt = exports.AES_GCM = undefined;\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = _dereq_('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = _dereq_('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = _dereq_('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = _dereq_('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _errors = _dereq_('../../errors');\n\nvar _utils = _dereq_('../../utils');\n\nvar _aes = _dereq_('../aes');\n\nvar _aes2 = _dereq_('../aes.asm');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Galois/Counter mode\n */\n\nvar _AES_GCM_data_maxLength = 68719476704; // 2^36 - 2^5\n\nvar AES_GCM = exports.AES_GCM = function (_AES) {\n (0, _inherits3.default)(AES_GCM, _AES);\n\n function AES_GCM(key, nonce, adata, tagSize, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_GCM);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, (AES_GCM.__proto__ || (0, _getPrototypeOf2.default)(AES_GCM)).call(this, key, undefined, false, heap, asm));\n\n _this.nonce = null;\n _this.adata = null;\n _this.iv = null;\n _this.counter = 1;\n _this.tagSize = 16;\n _this.mode = 'GCM';\n _this.BLOCK_SIZE = 16;\n\n _this.reset(key, tagSize, nonce, adata);\n return _this;\n }\n\n (0, _createClass3.default)(AES_GCM, [{\n key: 'reset',\n value: function reset(key, tagSize, nonce, adata) {\n return this.AES_GCM_reset(key, tagSize, nonce, adata);\n }\n }, {\n key: 'encrypt',\n value: function encrypt(data) {\n return this.AES_GCM_encrypt(data);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(data) {\n return this.AES_GCM_decrypt(data);\n }\n }, {\n key: 'AES_GCM_Encrypt_process',\n value: function AES_GCM_Encrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var dpos = 0,\n dlen = data.length || 0,\n asm = this.asm,\n heap = this.heap,\n counter = this.counter,\n pos = this.pos,\n len = this.len,\n rpos = 0,\n rlen = len + dlen & -16,\n wlen = 0;\n\n if ((counter - 1 << 4) + len + dlen > _AES_GCM_data_maxLength) throw new RangeError('counter overflow');\n\n var result = new Uint8Array(rlen);\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA + pos, len);\n wlen = asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, wlen);\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n counter += wlen >>> 4;\n rpos += wlen;\n\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n } else {\n pos = 0;\n len = 0;\n }\n }\n\n this.result = result;\n this.counter = counter;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n }, {\n key: 'AES_GCM_Encrypt_finish',\n value: function AES_GCM_Encrypt_finish() {\n var asm = this.asm,\n heap = this.heap,\n counter = this.counter,\n tagSize = this.tagSize,\n adata = this.adata,\n pos = this.pos,\n len = this.len;\n\n var result = new Uint8Array(len + tagSize);\n\n asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA + pos, len + 15 & -16);\n if (len) result.set(heap.subarray(pos, pos + len));\n\n for (var i = len; i & 15; i++) {\n heap[pos + i] = 0;\n }asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, i);\n\n var alen = adata !== null ? adata.length : 0,\n clen = (counter - 1 << 4) + len;\n heap[0] = heap[1] = heap[2] = 0, heap[3] = alen >>> 29, heap[4] = alen >>> 21, heap[5] = alen >>> 13 & 255, heap[6] = alen >>> 5 & 255, heap[7] = alen << 3 & 255, heap[8] = heap[9] = heap[10] = 0, heap[11] = clen >>> 29, heap[12] = clen >>> 21 & 255, heap[13] = clen >>> 13 & 255, heap[14] = clen >>> 5 & 255, heap[15] = clen << 3 & 255;\n asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, 16);\n asm.get_iv(_aes2.AES_asm.HEAP_DATA);\n\n asm.set_counter(0, 0, 0, this.gamma0);\n asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA, 16);\n result.set(heap.subarray(0, tagSize), len);\n\n this.result = result;\n this.counter = 1;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n }, {\n key: 'AES_GCM_Decrypt_process',\n value: function AES_GCM_Decrypt_process(data) {\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var dpos = 0,\n dlen = data.length || 0,\n asm = this.asm,\n heap = this.heap,\n counter = this.counter,\n tagSize = this.tagSize,\n pos = this.pos,\n len = this.len,\n rpos = 0,\n rlen = len + dlen > tagSize ? len + dlen - tagSize & -16 : 0,\n tlen = len + dlen - rlen,\n wlen = 0;\n\n if ((counter - 1 << 4) + len + dlen > _AES_GCM_data_maxLength) throw new RangeError('counter overflow');\n\n var result = new Uint8Array(rlen);\n\n while (dlen > tlen) {\n wlen = (0, _utils._heap_write)(heap, pos + len, data, dpos, dlen - tlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, wlen);\n wlen = asm.cipher(_aes2.AES_asm.DEC.CTR, _aes2.AES_asm.HEAP_DATA + pos, wlen);\n\n if (wlen) result.set(heap.subarray(pos, pos + wlen), rpos);\n counter += wlen >>> 4;\n rpos += wlen;\n\n pos = 0;\n len = 0;\n }\n\n if (dlen > 0) {\n len += (0, _utils._heap_write)(heap, 0, data, dpos, dlen);\n }\n\n this.result = result;\n this.counter = counter;\n this.pos = pos;\n this.len = len;\n\n return this;\n }\n }, {\n key: 'AES_GCM_Decrypt_finish',\n value: function AES_GCM_Decrypt_finish() {\n var asm = this.asm,\n heap = this.heap,\n tagSize = this.tagSize,\n adata = this.adata,\n counter = this.counter,\n pos = this.pos,\n len = this.len,\n rlen = len - tagSize,\n wlen = 0;\n\n if (len < tagSize) throw new _errors.IllegalStateError('authentication tag not found');\n\n var result = new Uint8Array(rlen),\n atag = new Uint8Array(heap.subarray(pos + rlen, pos + len));\n\n for (var i = rlen; i & 15; i++) {\n heap[pos + i] = 0;\n }wlen = asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA + pos, i);\n wlen = asm.cipher(_aes2.AES_asm.DEC.CTR, _aes2.AES_asm.HEAP_DATA + pos, i);\n if (rlen) result.set(heap.subarray(pos, pos + rlen));\n\n var alen = adata !== null ? adata.length : 0,\n clen = (counter - 1 << 4) + len - tagSize;\n heap[0] = heap[1] = heap[2] = 0, heap[3] = alen >>> 29, heap[4] = alen >>> 21, heap[5] = alen >>> 13 & 255, heap[6] = alen >>> 5 & 255, heap[7] = alen << 3 & 255, heap[8] = heap[9] = heap[10] = 0, heap[11] = clen >>> 29, heap[12] = clen >>> 21 & 255, heap[13] = clen >>> 13 & 255, heap[14] = clen >>> 5 & 255, heap[15] = clen << 3 & 255;\n asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, 16);\n asm.get_iv(_aes2.AES_asm.HEAP_DATA);\n\n asm.set_counter(0, 0, 0, this.gamma0);\n asm.cipher(_aes2.AES_asm.ENC.CTR, _aes2.AES_asm.HEAP_DATA, 16);\n\n var acheck = 0;\n for (var i = 0; i < tagSize; ++i) {\n acheck |= atag[i] ^ heap[i];\n }if (acheck) throw new _errors.SecurityError('data integrity check failed');\n\n this.result = result;\n this.counter = 1;\n this.pos = 0;\n this.len = 0;\n\n return this;\n }\n }, {\n key: 'AES_GCM_decrypt',\n value: function AES_GCM_decrypt(data) {\n var result1 = this.AES_GCM_Decrypt_process(data).result;\n var result2 = this.AES_GCM_Decrypt_finish().result;\n\n var result = new Uint8Array(result1.length + result2.length);\n if (result1.length) result.set(result1);\n if (result2.length) result.set(result2, result1.length);\n this.result = result;\n\n return this;\n }\n }, {\n key: 'AES_GCM_encrypt',\n value: function AES_GCM_encrypt(data) {\n var result1 = this.AES_GCM_Encrypt_process(data).result;\n var result2 = this.AES_GCM_Encrypt_finish().result;\n\n var result = new Uint8Array(result1.length + result2.length);\n if (result1.length) result.set(result1);\n if (result2.length) result.set(result2, result1.length);\n this.result = result;\n\n return this;\n }\n }, {\n key: 'AES_GCM_reset',\n value: function AES_GCM_reset(key, tagSize, nonce, adata, counter, iv) {\n this.AES_reset(key, undefined, false);\n\n var asm = this.asm;\n var heap = this.heap;\n\n asm.gcm_init();\n\n var tagSize = tagSize;\n if (tagSize !== undefined) {\n if (!(0, _utils.is_number)(tagSize)) throw new TypeError('tagSize must be a number');\n\n if (tagSize < 4 || tagSize > 16) throw new _errors.IllegalArgumentError('illegal tagSize value');\n\n this.tagSize = tagSize;\n } else {\n this.tagSize = 16;\n }\n\n if (nonce !== undefined) {\n if (!(0, _utils.is_bytes)(nonce)) {\n throw new TypeError('unexpected nonce type');\n }\n\n this.nonce = nonce;\n\n var noncelen = nonce.length || 0,\n noncebuf = new Uint8Array(16);\n if (noncelen !== 12) {\n this._gcm_mac_process(nonce);\n\n heap[0] = heap[1] = heap[2] = heap[3] = heap[4] = heap[5] = heap[6] = heap[7] = heap[8] = heap[9] = heap[10] = 0, heap[11] = noncelen >>> 29, heap[12] = noncelen >>> 21 & 255, heap[13] = noncelen >>> 13 & 255, heap[14] = noncelen >>> 5 & 255, heap[15] = noncelen << 3 & 255;\n asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, 16);\n\n asm.get_iv(_aes2.AES_asm.HEAP_DATA);\n asm.set_iv();\n\n noncebuf.set(heap.subarray(0, 16));\n } else {\n noncebuf.set(nonce);\n noncebuf[15] = 1;\n }\n\n var nonceview = new DataView(noncebuf.buffer);\n this.gamma0 = nonceview.getUint32(12);\n\n asm.set_nonce(nonceview.getUint32(0), nonceview.getUint32(4), nonceview.getUint32(8), 0);\n asm.set_mask(0, 0, 0, 0xffffffff);\n } else {\n throw new Error('nonce is required');\n }\n\n if (adata !== undefined && adata !== null) {\n if (!(0, _utils.is_bytes)(adata)) {\n throw new TypeError('unexpected adata type');\n }\n\n if (adata.length > _AES_GCM_data_maxLength) throw new _errors.IllegalArgumentError('illegal adata length');\n\n if (adata.length) {\n this.adata = adata;\n this._gcm_mac_process(adata);\n } else {\n this.adata = null;\n }\n } else {\n this.adata = null;\n }\n\n if (counter !== undefined) {\n if (!(0, _utils.is_number)(counter)) throw new TypeError('counter must be a number');\n\n if (counter < 1 || counter > 0xffffffff) throw new RangeError('counter must be a positive 32-bit integer');\n\n this.counter = counter;\n asm.set_counter(0, 0, 0, this.gamma0 + counter | 0);\n } else {\n this.counter = 1;\n asm.set_counter(0, 0, 0, this.gamma0 + 1 | 0);\n }\n\n if (iv !== undefined) {\n if (!(0, _utils.is_number)(iv)) throw new TypeError('iv must be a number');\n\n this.iv = iv;\n\n this.AES_set_iv(iv);\n }\n\n return this;\n }\n }, {\n key: '_gcm_mac_process',\n value: function _gcm_mac_process(data) {\n var heap = this.heap,\n asm = this.asm,\n dpos = 0,\n dlen = data.length || 0,\n wlen = 0;\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, 0, data, dpos, dlen);\n dpos += wlen;\n dlen -= wlen;\n\n while (wlen & 15) {\n heap[wlen++] = 0;\n }asm.mac(_aes2.AES_asm.MAC.GCM, _aes2.AES_asm.HEAP_DATA, wlen);\n }\n }\n }]);\n return AES_GCM;\n}(_aes.AES);\n\nvar AES_GCM_Encrypt = exports.AES_GCM_Encrypt = function (_AES_GCM) {\n (0, _inherits3.default)(AES_GCM_Encrypt, _AES_GCM);\n\n function AES_GCM_Encrypt(key, nonce, adata, tagSize, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_GCM_Encrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_GCM_Encrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_GCM_Encrypt)).call(this, key, nonce, adata, tagSize, heap, asm));\n }\n\n (0, _createClass3.default)(AES_GCM_Encrypt, [{\n key: 'process',\n value: function process(data) {\n return this.AES_GCM_Encrypt_process(data);\n }\n }, {\n key: 'finish',\n value: function finish() {\n return this.AES_GCM_Encrypt_finish();\n }\n }]);\n return AES_GCM_Encrypt;\n}(AES_GCM);\n\nvar AES_GCM_Decrypt = exports.AES_GCM_Decrypt = function (_AES_GCM2) {\n (0, _inherits3.default)(AES_GCM_Decrypt, _AES_GCM2);\n\n function AES_GCM_Decrypt(key, nonce, adata, tagSize, heap, asm) {\n (0, _classCallCheck3.default)(this, AES_GCM_Decrypt);\n return (0, _possibleConstructorReturn3.default)(this, (AES_GCM_Decrypt.__proto__ || (0, _getPrototypeOf2.default)(AES_GCM_Decrypt)).call(this, key, nonce, adata, tagSize, heap, asm));\n }\n\n (0, _createClass3.default)(AES_GCM_Decrypt, [{\n key: 'process',\n value: function process(data) {\n return this.AES_GCM_Decrypt_process(data);\n }\n }, {\n key: 'finish',\n value: function finish() {\n return this.AES_GCM_Decrypt_finish();\n }\n }]);\n return AES_GCM_Decrypt;\n}(AES_GCM);\n\n},{\"../../errors\":14,\"../../utils\":19,\"../aes\":3,\"../aes.asm\":2,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/helpers/classCallCheck\":36,\"babel-runtime/helpers/createClass\":37,\"babel-runtime/helpers/inherits\":38,\"babel-runtime/helpers/possibleConstructorReturn\":39}],14:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _create = _dereq_('babel-runtime/core-js/object/create');\n\nvar _create2 = _interopRequireDefault(_create);\n\nexports.IllegalStateError = IllegalStateError;\nexports.IllegalArgumentError = IllegalArgumentError;\nexports.SecurityError = SecurityError;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction IllegalStateError() {\n var err = Error.apply(this, arguments);\n this.message = err.message, this.stack = err.stack;\n}\nIllegalStateError.prototype = (0, _create2.default)(Error.prototype, { name: { value: 'IllegalStateError' } });\n\nfunction IllegalArgumentError() {\n var err = Error.apply(this, arguments);\n this.message = err.message, this.stack = err.stack;\n}\nIllegalArgumentError.prototype = (0, _create2.default)(Error.prototype, { name: { value: 'IllegalArgumentError' } });\n\nfunction SecurityError() {\n var err = Error.apply(this, arguments);\n this.message = err.message, this.stack = err.stack;\n}\nSecurityError.prototype = (0, _create2.default)(Error.prototype, { name: { value: 'SecurityError' } });\n\n},{\"babel-runtime/core-js/object/create\":25}],15:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hash_reset = hash_reset;\nexports.hash_process = hash_process;\nexports.hash_finish = hash_finish;\n\nvar _utils = _dereq_('../utils');\n\nvar _errors = _dereq_('../errors');\n\nfunction hash_reset() {\n this.result = null;\n this.pos = 0;\n this.len = 0;\n\n this.asm.reset();\n\n return this;\n}\n\nfunction hash_process(data) {\n if (this.result !== null) throw new _errors.IllegalStateError('state must be reset before processing new data');\n\n if ((0, _utils.is_string)(data)) data = (0, _utils.string_to_bytes)(data);\n\n if ((0, _utils.is_buffer)(data)) data = new Uint8Array(data);\n\n if (!(0, _utils.is_bytes)(data)) throw new TypeError(\"data isn't of expected type\");\n\n var asm = this.asm,\n heap = this.heap,\n hpos = this.pos,\n hlen = this.len,\n dpos = 0,\n dlen = data.length,\n wlen = 0;\n\n while (dlen > 0) {\n wlen = (0, _utils._heap_write)(heap, hpos + hlen, data, dpos, dlen);\n hlen += wlen;\n dpos += wlen;\n dlen -= wlen;\n\n wlen = asm.process(hpos, hlen);\n\n hpos += wlen;\n hlen -= wlen;\n\n if (!hlen) hpos = 0;\n }\n\n this.pos = hpos;\n this.len = hlen;\n\n return this;\n}\n\nfunction hash_finish() {\n if (this.result !== null) throw new _errors.IllegalStateError('state must be reset before processing new data');\n\n this.asm.finish(this.pos, this.len, 0);\n\n this.result = new Uint8Array(this.HASH_SIZE);\n this.result.set(this.heap.subarray(0, this.HASH_SIZE));\n\n this.pos = 0;\n this.len = 0;\n\n return this;\n}\n\n},{\"../errors\":14,\"../utils\":19}],16:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SHA256 = undefined;\n\nvar _sha = _dereq_('./sha256');\n\nvar _utils = _dereq_('../../utils');\n\n/**\n * SHA256 exports\n */\n\nfunction sha256_bytes(data) {\n if (data === undefined) throw new SyntaxError('data required');\n return (0, _sha.get_sha256_instance)().reset().process(data).finish().result;\n}\n\nfunction sha256_hex(data) {\n var result = sha256_bytes(data);\n return (0, _utils.bytes_to_hex)(result);\n}\n\nfunction sha256_base64(data) {\n var result = sha256_bytes(data);\n return (0, _utils.bytes_to_base64)(result);\n}\n\nvar SHA256 = exports.SHA256 = _sha.sha256_constructor;\nSHA256.bytes = sha256_bytes;\nSHA256.hex = sha256_hex;\nSHA256.base64 = sha256_base64;\n\n},{\"../../utils\":19,\"./sha256\":18}],17:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.sha256_asm = sha256_asm;\nfunction sha256_asm(stdlib, foreign, buffer) {\n \"use asm\";\n\n // SHA256 state\n\n var H0 = 0,\n H1 = 0,\n H2 = 0,\n H3 = 0,\n H4 = 0,\n H5 = 0,\n H6 = 0,\n H7 = 0,\n TOTAL0 = 0,\n TOTAL1 = 0;\n\n // HMAC state\n var I0 = 0,\n I1 = 0,\n I2 = 0,\n I3 = 0,\n I4 = 0,\n I5 = 0,\n I6 = 0,\n I7 = 0,\n O0 = 0,\n O1 = 0,\n O2 = 0,\n O3 = 0,\n O4 = 0,\n O5 = 0,\n O6 = 0,\n O7 = 0;\n\n // I/O buffer\n var HEAP = new stdlib.Uint8Array(buffer);\n\n function _core(w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15) {\n w0 = w0 | 0;\n w1 = w1 | 0;\n w2 = w2 | 0;\n w3 = w3 | 0;\n w4 = w4 | 0;\n w5 = w5 | 0;\n w6 = w6 | 0;\n w7 = w7 | 0;\n w8 = w8 | 0;\n w9 = w9 | 0;\n w10 = w10 | 0;\n w11 = w11 | 0;\n w12 = w12 | 0;\n w13 = w13 | 0;\n w14 = w14 | 0;\n w15 = w15 | 0;\n\n var a = 0,\n b = 0,\n c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n\n a = H0;\n b = H1;\n c = H2;\n d = H3;\n e = H4;\n f = H5;\n g = H6;\n h = H7;\n\n // 0\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x428a2f98 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 1\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x71374491 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 2\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0xb5c0fbcf | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 3\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0xe9b5dba5 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 4\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x3956c25b | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 5\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x59f111f1 | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 6\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x923f82a4 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 7\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0xab1c5ed5 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 8\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0xd807aa98 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 9\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x12835b01 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 10\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x243185be | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 11\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x550c7dc3 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 12\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x72be5d74 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 13\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x80deb1fe | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 14\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x9bdc06a7 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 15\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0xc19bf174 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 16\n w0 = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0xe49b69c1 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 17\n w1 = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0xefbe4786 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 18\n w2 = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x0fc19dc6 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 19\n w3 = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x240ca1cc | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 20\n w4 = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x2de92c6f | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 21\n w5 = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x4a7484aa | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 22\n w6 = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x5cb0a9dc | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 23\n w7 = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x76f988da | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 24\n w8 = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x983e5152 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 25\n w9 = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0xa831c66d | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 26\n w10 = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0xb00327c8 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 27\n w11 = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0xbf597fc7 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 28\n w12 = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0xc6e00bf3 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 29\n w13 = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0xd5a79147 | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 30\n w14 = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x06ca6351 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 31\n w15 = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x14292967 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 32\n w0 = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x27b70a85 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 33\n w1 = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x2e1b2138 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 34\n w2 = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x4d2c6dfc | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 35\n w3 = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x53380d13 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 36\n w4 = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x650a7354 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 37\n w5 = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x766a0abb | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 38\n w6 = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x81c2c92e | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 39\n w7 = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x92722c85 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 40\n w8 = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0xa2bfe8a1 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 41\n w9 = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0xa81a664b | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 42\n w10 = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0xc24b8b70 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 43\n w11 = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0xc76c51a3 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 44\n w12 = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0xd192e819 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 45\n w13 = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0xd6990624 | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 46\n w14 = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0xf40e3585 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 47\n w15 = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x106aa070 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 48\n w0 = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;\n h = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x19a4c116 | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 49\n w1 = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;\n g = w1 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x1e376c08 | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 50\n w2 = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;\n f = w2 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x2748774c | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 51\n w3 = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;\n e = w3 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x34b0bcb5 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 52\n w4 = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;\n d = w4 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x391c0cb3 | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 53\n w5 = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;\n c = w5 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0x4ed8aa4a | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 54\n w6 = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;\n b = w6 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0x5b9cca4f | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 55\n w7 = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;\n a = w7 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0x682e6ff3 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n // 56\n w8 = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;\n h = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 0x748f82ee | 0;\n d = d + h | 0;\n h = h + (a & b ^ c & (a ^ b)) + (a >>> 2 ^ a >>> 13 ^ a >>> 22 ^ a << 30 ^ a << 19 ^ a << 10) | 0;\n\n // 57\n w9 = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;\n g = w9 + g + (d >>> 6 ^ d >>> 11 ^ d >>> 25 ^ d << 26 ^ d << 21 ^ d << 7) + (f ^ d & (e ^ f)) + 0x78a5636f | 0;\n c = c + g | 0;\n g = g + (h & a ^ b & (h ^ a)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0;\n\n // 58\n w10 = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;\n f = w10 + f + (c >>> 6 ^ c >>> 11 ^ c >>> 25 ^ c << 26 ^ c << 21 ^ c << 7) + (e ^ c & (d ^ e)) + 0x84c87814 | 0;\n b = b + f | 0;\n f = f + (g & h ^ a & (g ^ h)) + (g >>> 2 ^ g >>> 13 ^ g >>> 22 ^ g << 30 ^ g << 19 ^ g << 10) | 0;\n\n // 59\n w11 = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;\n e = w11 + e + (b >>> 6 ^ b >>> 11 ^ b >>> 25 ^ b << 26 ^ b << 21 ^ b << 7) + (d ^ b & (c ^ d)) + 0x8cc70208 | 0;\n a = a + e | 0;\n e = e + (f & g ^ h & (f ^ g)) + (f >>> 2 ^ f >>> 13 ^ f >>> 22 ^ f << 30 ^ f << 19 ^ f << 10) | 0;\n\n // 60\n w12 = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;\n d = w12 + d + (a >>> 6 ^ a >>> 11 ^ a >>> 25 ^ a << 26 ^ a << 21 ^ a << 7) + (c ^ a & (b ^ c)) + 0x90befffa | 0;\n h = h + d | 0;\n d = d + (e & f ^ g & (e ^ f)) + (e >>> 2 ^ e >>> 13 ^ e >>> 22 ^ e << 30 ^ e << 19 ^ e << 10) | 0;\n\n // 61\n w13 = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;\n c = w13 + c + (h >>> 6 ^ h >>> 11 ^ h >>> 25 ^ h << 26 ^ h << 21 ^ h << 7) + (b ^ h & (a ^ b)) + 0xa4506ceb | 0;\n g = g + c | 0;\n c = c + (d & e ^ f & (d ^ e)) + (d >>> 2 ^ d >>> 13 ^ d >>> 22 ^ d << 30 ^ d << 19 ^ d << 10) | 0;\n\n // 62\n w14 = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;\n b = w14 + b + (g >>> 6 ^ g >>> 11 ^ g >>> 25 ^ g << 26 ^ g << 21 ^ g << 7) + (a ^ g & (h ^ a)) + 0xbef9a3f7 | 0;\n f = f + b | 0;\n b = b + (c & d ^ e & (c ^ d)) + (c >>> 2 ^ c >>> 13 ^ c >>> 22 ^ c << 30 ^ c << 19 ^ c << 10) | 0;\n\n // 63\n w15 = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;\n a = w15 + a + (f >>> 6 ^ f >>> 11 ^ f >>> 25 ^ f << 26 ^ f << 21 ^ f << 7) + (h ^ f & (g ^ h)) + 0xc67178f2 | 0;\n e = e + a | 0;\n a = a + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;\n\n H0 = H0 + a | 0;\n H1 = H1 + b | 0;\n H2 = H2 + c | 0;\n H3 = H3 + d | 0;\n H4 = H4 + e | 0;\n H5 = H5 + f | 0;\n H6 = H6 + g | 0;\n H7 = H7 + h | 0;\n }\n\n function _core_heap(offset) {\n offset = offset | 0;\n\n _core(HEAP[offset | 0] << 24 | HEAP[offset | 1] << 16 | HEAP[offset | 2] << 8 | HEAP[offset | 3], HEAP[offset | 4] << 24 | HEAP[offset | 5] << 16 | HEAP[offset | 6] << 8 | HEAP[offset | 7], HEAP[offset | 8] << 24 | HEAP[offset | 9] << 16 | HEAP[offset | 10] << 8 | HEAP[offset | 11], HEAP[offset | 12] << 24 | HEAP[offset | 13] << 16 | HEAP[offset | 14] << 8 | HEAP[offset | 15], HEAP[offset | 16] << 24 | HEAP[offset | 17] << 16 | HEAP[offset | 18] << 8 | HEAP[offset | 19], HEAP[offset | 20] << 24 | HEAP[offset | 21] << 16 | HEAP[offset | 22] << 8 | HEAP[offset | 23], HEAP[offset | 24] << 24 | HEAP[offset | 25] << 16 | HEAP[offset | 26] << 8 | HEAP[offset | 27], HEAP[offset | 28] << 24 | HEAP[offset | 29] << 16 | HEAP[offset | 30] << 8 | HEAP[offset | 31], HEAP[offset | 32] << 24 | HEAP[offset | 33] << 16 | HEAP[offset | 34] << 8 | HEAP[offset | 35], HEAP[offset | 36] << 24 | HEAP[offset | 37] << 16 | HEAP[offset | 38] << 8 | HEAP[offset | 39], HEAP[offset | 40] << 24 | HEAP[offset | 41] << 16 | HEAP[offset | 42] << 8 | HEAP[offset | 43], HEAP[offset | 44] << 24 | HEAP[offset | 45] << 16 | HEAP[offset | 46] << 8 | HEAP[offset | 47], HEAP[offset | 48] << 24 | HEAP[offset | 49] << 16 | HEAP[offset | 50] << 8 | HEAP[offset | 51], HEAP[offset | 52] << 24 | HEAP[offset | 53] << 16 | HEAP[offset | 54] << 8 | HEAP[offset | 55], HEAP[offset | 56] << 24 | HEAP[offset | 57] << 16 | HEAP[offset | 58] << 8 | HEAP[offset | 59], HEAP[offset | 60] << 24 | HEAP[offset | 61] << 16 | HEAP[offset | 62] << 8 | HEAP[offset | 63]);\n }\n\n // offset — multiple of 32\n function _state_to_heap(output) {\n output = output | 0;\n\n HEAP[output | 0] = H0 >>> 24;\n HEAP[output | 1] = H0 >>> 16 & 255;\n HEAP[output | 2] = H0 >>> 8 & 255;\n HEAP[output | 3] = H0 & 255;\n HEAP[output | 4] = H1 >>> 24;\n HEAP[output | 5] = H1 >>> 16 & 255;\n HEAP[output | 6] = H1 >>> 8 & 255;\n HEAP[output | 7] = H1 & 255;\n HEAP[output | 8] = H2 >>> 24;\n HEAP[output | 9] = H2 >>> 16 & 255;\n HEAP[output | 10] = H2 >>> 8 & 255;\n HEAP[output | 11] = H2 & 255;\n HEAP[output | 12] = H3 >>> 24;\n HEAP[output | 13] = H3 >>> 16 & 255;\n HEAP[output | 14] = H3 >>> 8 & 255;\n HEAP[output | 15] = H3 & 255;\n HEAP[output | 16] = H4 >>> 24;\n HEAP[output | 17] = H4 >>> 16 & 255;\n HEAP[output | 18] = H4 >>> 8 & 255;\n HEAP[output | 19] = H4 & 255;\n HEAP[output | 20] = H5 >>> 24;\n HEAP[output | 21] = H5 >>> 16 & 255;\n HEAP[output | 22] = H5 >>> 8 & 255;\n HEAP[output | 23] = H5 & 255;\n HEAP[output | 24] = H6 >>> 24;\n HEAP[output | 25] = H6 >>> 16 & 255;\n HEAP[output | 26] = H6 >>> 8 & 255;\n HEAP[output | 27] = H6 & 255;\n HEAP[output | 28] = H7 >>> 24;\n HEAP[output | 29] = H7 >>> 16 & 255;\n HEAP[output | 30] = H7 >>> 8 & 255;\n HEAP[output | 31] = H7 & 255;\n }\n\n function reset() {\n H0 = 0x6a09e667;\n H1 = 0xbb67ae85;\n H2 = 0x3c6ef372;\n H3 = 0xa54ff53a;\n H4 = 0x510e527f;\n H5 = 0x9b05688c;\n H6 = 0x1f83d9ab;\n H7 = 0x5be0cd19;\n TOTAL0 = TOTAL1 = 0;\n }\n\n function init(h0, h1, h2, h3, h4, h5, h6, h7, total0, total1) {\n h0 = h0 | 0;\n h1 = h1 | 0;\n h2 = h2 | 0;\n h3 = h3 | 0;\n h4 = h4 | 0;\n h5 = h5 | 0;\n h6 = h6 | 0;\n h7 = h7 | 0;\n total0 = total0 | 0;\n total1 = total1 | 0;\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n H5 = h5;\n H6 = h6;\n H7 = h7;\n TOTAL0 = total0;\n TOTAL1 = total1;\n }\n\n // offset — multiple of 64\n function process(offset, length) {\n offset = offset | 0;\n length = length | 0;\n\n var hashed = 0;\n\n if (offset & 63) return -1;\n\n while ((length | 0) >= 64) {\n _core_heap(offset);\n\n offset = offset + 64 | 0;\n length = length - 64 | 0;\n\n hashed = hashed + 64 | 0;\n }\n\n TOTAL0 = TOTAL0 + hashed | 0;\n if (TOTAL0 >>> 0 < hashed >>> 0) TOTAL1 = TOTAL1 + 1 | 0;\n\n return hashed | 0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function finish(offset, length, output) {\n offset = offset | 0;\n length = length | 0;\n output = output | 0;\n\n var hashed = 0,\n i = 0;\n\n if (offset & 63) return -1;\n\n if (~output) if (output & 31) return -1;\n\n if ((length | 0) >= 64) {\n hashed = process(offset, length) | 0;\n if ((hashed | 0) == -1) return -1;\n\n offset = offset + hashed | 0;\n length = length - hashed | 0;\n }\n\n hashed = hashed + length | 0;\n TOTAL0 = TOTAL0 + length | 0;\n if (TOTAL0 >>> 0 < length >>> 0) TOTAL1 = TOTAL1 + 1 | 0;\n\n HEAP[offset | length] = 0x80;\n\n if ((length | 0) >= 56) {\n for (i = length + 1 | 0; (i | 0) < 64; i = i + 1 | 0) {\n HEAP[offset | i] = 0x00;\n }_core_heap(offset);\n\n length = 0;\n\n HEAP[offset | 0] = 0;\n }\n\n for (i = length + 1 | 0; (i | 0) < 59; i = i + 1 | 0) {\n HEAP[offset | i] = 0;\n }HEAP[offset | 56] = TOTAL1 >>> 21 & 255;\n HEAP[offset | 57] = TOTAL1 >>> 13 & 255;\n HEAP[offset | 58] = TOTAL1 >>> 5 & 255;\n HEAP[offset | 59] = TOTAL1 << 3 & 255 | TOTAL0 >>> 29;\n HEAP[offset | 60] = TOTAL0 >>> 21 & 255;\n HEAP[offset | 61] = TOTAL0 >>> 13 & 255;\n HEAP[offset | 62] = TOTAL0 >>> 5 & 255;\n HEAP[offset | 63] = TOTAL0 << 3 & 255;\n _core_heap(offset);\n\n if (~output) _state_to_heap(output);\n\n return hashed | 0;\n }\n\n function hmac_reset() {\n H0 = I0;\n H1 = I1;\n H2 = I2;\n H3 = I3;\n H4 = I4;\n H5 = I5;\n H6 = I6;\n H7 = I7;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function _hmac_opad() {\n H0 = O0;\n H1 = O1;\n H2 = O2;\n H3 = O3;\n H4 = O4;\n H5 = O5;\n H6 = O6;\n H7 = O7;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function hmac_init(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) {\n p0 = p0 | 0;\n p1 = p1 | 0;\n p2 = p2 | 0;\n p3 = p3 | 0;\n p4 = p4 | 0;\n p5 = p5 | 0;\n p6 = p6 | 0;\n p7 = p7 | 0;\n p8 = p8 | 0;\n p9 = p9 | 0;\n p10 = p10 | 0;\n p11 = p11 | 0;\n p12 = p12 | 0;\n p13 = p13 | 0;\n p14 = p14 | 0;\n p15 = p15 | 0;\n\n // opad\n reset();\n _core(p0 ^ 0x5c5c5c5c, p1 ^ 0x5c5c5c5c, p2 ^ 0x5c5c5c5c, p3 ^ 0x5c5c5c5c, p4 ^ 0x5c5c5c5c, p5 ^ 0x5c5c5c5c, p6 ^ 0x5c5c5c5c, p7 ^ 0x5c5c5c5c, p8 ^ 0x5c5c5c5c, p9 ^ 0x5c5c5c5c, p10 ^ 0x5c5c5c5c, p11 ^ 0x5c5c5c5c, p12 ^ 0x5c5c5c5c, p13 ^ 0x5c5c5c5c, p14 ^ 0x5c5c5c5c, p15 ^ 0x5c5c5c5c);\n O0 = H0;\n O1 = H1;\n O2 = H2;\n O3 = H3;\n O4 = H4;\n O5 = H5;\n O6 = H6;\n O7 = H7;\n\n // ipad\n reset();\n _core(p0 ^ 0x36363636, p1 ^ 0x36363636, p2 ^ 0x36363636, p3 ^ 0x36363636, p4 ^ 0x36363636, p5 ^ 0x36363636, p6 ^ 0x36363636, p7 ^ 0x36363636, p8 ^ 0x36363636, p9 ^ 0x36363636, p10 ^ 0x36363636, p11 ^ 0x36363636, p12 ^ 0x36363636, p13 ^ 0x36363636, p14 ^ 0x36363636, p15 ^ 0x36363636);\n I0 = H0;\n I1 = H1;\n I2 = H2;\n I3 = H3;\n I4 = H4;\n I5 = H5;\n I6 = H6;\n I7 = H7;\n\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function hmac_finish(offset, length, output) {\n offset = offset | 0;\n length = length | 0;\n output = output | 0;\n\n var t0 = 0,\n t1 = 0,\n t2 = 0,\n t3 = 0,\n t4 = 0,\n t5 = 0,\n t6 = 0,\n t7 = 0,\n hashed = 0;\n\n if (offset & 63) return -1;\n\n if (~output) if (output & 31) return -1;\n\n hashed = finish(offset, length, -1) | 0;\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n _hmac_opad();\n _core(t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768);\n\n if (~output) _state_to_heap(output);\n\n return hashed | 0;\n }\n\n // salt is assumed to be already processed\n // offset — multiple of 64\n // output — multiple of 32\n function pbkdf2_generate_block(offset, length, block, count, output) {\n offset = offset | 0;\n length = length | 0;\n block = block | 0;\n count = count | 0;\n output = output | 0;\n\n var h0 = 0,\n h1 = 0,\n h2 = 0,\n h3 = 0,\n h4 = 0,\n h5 = 0,\n h6 = 0,\n h7 = 0,\n t0 = 0,\n t1 = 0,\n t2 = 0,\n t3 = 0,\n t4 = 0,\n t5 = 0,\n t6 = 0,\n t7 = 0;\n\n if (offset & 63) return -1;\n\n if (~output) if (output & 31) return -1;\n\n // pad block number into heap\n // FIXME probable OOB write\n HEAP[offset + length | 0] = block >>> 24;\n HEAP[offset + length + 1 | 0] = block >>> 16 & 255;\n HEAP[offset + length + 2 | 0] = block >>> 8 & 255;\n HEAP[offset + length + 3 | 0] = block & 255;\n\n // finish first iteration\n hmac_finish(offset, length + 4 | 0, -1) | 0;\n h0 = t0 = H0, h1 = t1 = H1, h2 = t2 = H2, h3 = t3 = H3, h4 = t4 = H4, h5 = t5 = H5, h6 = t6 = H6, h7 = t7 = H7;\n count = count - 1 | 0;\n\n // perform the rest iterations\n while ((count | 0) > 0) {\n hmac_reset();\n _core(t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768);\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n _hmac_opad();\n _core(t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768);\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n h0 = h0 ^ H0;\n h1 = h1 ^ H1;\n h2 = h2 ^ H2;\n h3 = h3 ^ H3;\n h4 = h4 ^ H4;\n h5 = h5 ^ H5;\n h6 = h6 ^ H6;\n h7 = h7 ^ H7;\n\n count = count - 1 | 0;\n }\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n H5 = h5;\n H6 = h6;\n H7 = h7;\n\n if (~output) _state_to_heap(output);\n\n return 0;\n }\n\n return {\n // SHA256\n reset: reset,\n init: init,\n process: process,\n finish: finish,\n\n // HMAC-SHA256\n hmac_reset: hmac_reset,\n hmac_init: hmac_init,\n hmac_finish: hmac_finish,\n\n // PBKDF2-HMAC-SHA256\n pbkdf2_generate_block: pbkdf2_generate_block\n };\n}\n\n},{}],18:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports._sha256_hash_size = exports._sha256_block_size = undefined;\nexports.sha256_constructor = sha256_constructor;\nexports.get_sha256_instance = get_sha256_instance;\n\nvar _sha = _dereq_('./sha256.asm');\n\nvar _hash = _dereq_('../hash');\n\nvar _utils = _dereq_('../../utils');\n\nvar _sha256_block_size = exports._sha256_block_size = 64;\nvar _sha256_hash_size = exports._sha256_hash_size = 32;\n\nfunction sha256_constructor(options) {\n options = options || {};\n\n this.heap = (0, _utils._heap_init)(Uint8Array, options.heap);\n this.asm = options.asm || (0, _sha.sha256_asm)({ Uint8Array: Uint8Array }, null, this.heap.buffer);\n\n this.BLOCK_SIZE = _sha256_block_size;\n this.HASH_SIZE = _sha256_hash_size;\n\n this.reset();\n}\n\nsha256_constructor.BLOCK_SIZE = _sha256_block_size;\nsha256_constructor.HASH_SIZE = _sha256_hash_size;\nsha256_constructor.NAME = 'sha256';\n\nvar sha256_prototype = sha256_constructor.prototype;\nsha256_prototype.reset = _hash.hash_reset;\nsha256_prototype.process = _hash.hash_process;\nsha256_prototype.finish = _hash.hash_finish;\n\nvar sha256_instance = null;\n\nfunction get_sha256_instance() {\n if (sha256_instance === null) sha256_instance = new sha256_constructor({ heapSize: 0x100000 });\n return sha256_instance;\n}\n\n},{\"../../utils\":19,\"../hash\":15,\"./sha256.asm\":17}],19:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.string_to_bytes = string_to_bytes;\nexports.hex_to_bytes = hex_to_bytes;\nexports.base64_to_bytes = base64_to_bytes;\nexports.bytes_to_string = bytes_to_string;\nexports.bytes_to_hex = bytes_to_hex;\nexports.bytes_to_base64 = bytes_to_base64;\nexports.pow2_ceil = pow2_ceil;\nexports.is_number = is_number;\nexports.is_string = is_string;\nexports.is_buffer = is_buffer;\nexports.is_bytes = is_bytes;\nexports.is_typed_array = is_typed_array;\nexports._heap_init = _heap_init;\nexports._heap_write = _heap_write;\nvar FloatArray = exports.FloatArray = typeof Float64Array !== 'undefined' ? Float64Array : Float32Array; // make PhantomJS happy\n\n/**\n * @param {string} str\n * @param {boolean} [utf8]\n * @return {Uint8Array}\n */\nfunction string_to_bytes(str, utf8) {\n utf8 = !!utf8;\n\n var len = str.length,\n bytes = new Uint8Array(utf8 ? 4 * len : len);\n\n for (var i = 0, j = 0; i < len; i++) {\n var c = str.charCodeAt(i);\n\n if (utf8 && 0xd800 <= c && c <= 0xdbff) {\n if (++i >= len) throw new Error('Malformed string, low surrogate expected at position ' + i);\n c = (c ^ 0xd800) << 10 | 0x10000 | str.charCodeAt(i) ^ 0xdc00;\n } else if (!utf8 && c >>> 8) {\n throw new Error('Wide characters are not allowed.');\n }\n\n if (!utf8 || c <= 0x7f) {\n bytes[j++] = c;\n } else if (c <= 0x7ff) {\n bytes[j++] = 0xc0 | c >> 6;\n bytes[j++] = 0x80 | c & 0x3f;\n } else if (c <= 0xffff) {\n bytes[j++] = 0xe0 | c >> 12;\n bytes[j++] = 0x80 | c >> 6 & 0x3f;\n bytes[j++] = 0x80 | c & 0x3f;\n } else {\n bytes[j++] = 0xf0 | c >> 18;\n bytes[j++] = 0x80 | c >> 12 & 0x3f;\n bytes[j++] = 0x80 | c >> 6 & 0x3f;\n bytes[j++] = 0x80 | c & 0x3f;\n }\n }\n\n return bytes.subarray(0, j);\n}\n\nfunction hex_to_bytes(str) {\n var len = str.length;\n if (len & 1) {\n str = '0' + str;\n len++;\n }\n var bytes = new Uint8Array(len >> 1);\n for (var i = 0; i < len; i += 2) {\n bytes[i >> 1] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n}\n\nfunction base64_to_bytes(str) {\n return string_to_bytes(atob(str));\n}\n\nfunction bytes_to_string(bytes, utf8) {\n utf8 = !!utf8;\n\n var len = bytes.length,\n chars = new Array(len);\n\n for (var i = 0, j = 0; i < len; i++) {\n var b = bytes[i];\n if (!utf8 || b < 128) {\n chars[j++] = b;\n } else if (b >= 192 && b < 224 && i + 1 < len) {\n chars[j++] = (b & 0x1f) << 6 | bytes[++i] & 0x3f;\n } else if (b >= 224 && b < 240 && i + 2 < len) {\n chars[j++] = (b & 0xf) << 12 | (bytes[++i] & 0x3f) << 6 | bytes[++i] & 0x3f;\n } else if (b >= 240 && b < 248 && i + 3 < len) {\n var c = (b & 7) << 18 | (bytes[++i] & 0x3f) << 12 | (bytes[++i] & 0x3f) << 6 | bytes[++i] & 0x3f;\n if (c <= 0xffff) {\n chars[j++] = c;\n } else {\n c ^= 0x10000;\n chars[j++] = 0xd800 | c >> 10;\n chars[j++] = 0xdc00 | c & 0x3ff;\n }\n } else {\n throw new Error('Malformed UTF8 character at byte offset ' + i);\n }\n }\n\n var str = '',\n bs = 16384;\n for (var i = 0; i < j; i += bs) {\n str += String.fromCharCode.apply(String, chars.slice(i, i + bs <= j ? i + bs : j));\n }\n\n return str;\n}\n\nfunction bytes_to_hex(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var h = (arr[i] & 0xff).toString(16);\n if (h.length < 2) str += '0';\n str += h;\n }\n return str;\n}\n\nfunction bytes_to_base64(arr) {\n return btoa(bytes_to_string(arr));\n}\n\nfunction pow2_ceil(a) {\n a -= 1;\n a |= a >>> 1;\n a |= a >>> 2;\n a |= a >>> 4;\n a |= a >>> 8;\n a |= a >>> 16;\n a += 1;\n return a;\n}\n\nfunction is_number(a) {\n return typeof a === 'number';\n}\n\nfunction is_string(a) {\n return typeof a === 'string';\n}\n\nfunction is_buffer(a) {\n return a instanceof ArrayBuffer;\n}\n\nfunction is_bytes(a) {\n return a instanceof Uint8Array;\n}\n\nfunction is_typed_array(a) {\n return a instanceof Int8Array || a instanceof Uint8Array || a instanceof Int16Array || a instanceof Uint16Array || a instanceof Int32Array || a instanceof Uint32Array || a instanceof Float32Array || a instanceof Float64Array;\n}\n\nfunction _heap_init(constructor, heap, heapSize) {\n var size = heap ? heap.byteLength : heapSize || 65536;\n\n if (size & 0xfff || size <= 0) throw new Error('heap size must be a positive integer and a multiple of 4096');\n\n heap = heap || new constructor(new ArrayBuffer(size));\n\n return heap;\n}\n\nfunction _heap_write(heap, hpos, data, dpos, dlen) {\n var hlen = heap.length - hpos,\n wlen = hlen < dlen ? hlen : dlen;\n\n heap.set(data.subarray(dpos, dpos + wlen), hpos);\n\n return wlen;\n}\n\n},{}],20:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/array/from\"), __esModule: true };\n},{\"core-js/library/fn/array/from\":56}],21:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/get-iterator\"), __esModule: true };\n},{\"core-js/library/fn/get-iterator\":57}],22:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/is-iterable\"), __esModule: true };\n},{\"core-js/library/fn/is-iterable\":58}],23:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/json/stringify\"), __esModule: true };\n},{\"core-js/library/fn/json/stringify\":59}],24:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/assign\"), __esModule: true };\n},{\"core-js/library/fn/object/assign\":60}],25:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/create\"), __esModule: true };\n},{\"core-js/library/fn/object/create\":61}],26:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/define-property\"), __esModule: true };\n},{\"core-js/library/fn/object/define-property\":62}],27:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/entries\"), __esModule: true };\n},{\"core-js/library/fn/object/entries\":63}],28:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/freeze\"), __esModule: true };\n},{\"core-js/library/fn/object/freeze\":64}],29:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };\n},{\"core-js/library/fn/object/get-prototype-of\":65}],30:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };\n},{\"core-js/library/fn/object/set-prototype-of\":66}],31:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/object/values\"), __esModule: true };\n},{\"core-js/library/fn/object/values\":67}],32:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/promise\"), __esModule: true };\n},{\"core-js/library/fn/promise\":68}],33:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/symbol\"), __esModule: true };\n},{\"core-js/library/fn/symbol\":69}],34:[function(_dereq_,module,exports){\nmodule.exports = { \"default\": _dereq_(\"core-js/library/fn/symbol/iterator\"), __esModule: true };\n},{\"core-js/library/fn/symbol/iterator\":70}],35:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _promise = _dereq_(\"../core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new _promise2.default(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return _promise2.default.resolve(value).then(function (value) {\n step(\"next\", value);\n }, function (err) {\n step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};\n},{\"../core-js/promise\":32}],36:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n},{}],37:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = _dereq_(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n},{\"../core-js/object/define-property\":26}],38:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = _dereq_(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = _dereq_(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = _dereq_(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n }\n\n subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n},{\"../core-js/object/create\":25,\"../core-js/object/set-prototype-of\":30,\"../helpers/typeof\":41}],39:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = _dereq_(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n},{\"../helpers/typeof\":41}],40:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = _dereq_(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = _dereq_(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if ((0, _isIterable3.default)(Object(arr))) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n},{\"../core-js/get-iterator\":21,\"../core-js/is-iterable\":22}],41:[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = _dereq_(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = _dereq_(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n},{\"../core-js/symbol\":33,\"../core-js/symbol/iterator\":34}],42:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"regenerator-runtime\");\n\n},{\"regenerator-runtime\":318}],43:[function(_dereq_,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr((len * 3 / 4) - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0; i < l; i += 4) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n\n},{}],44:[function(_dereq_,module,exports){\n(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = _dereq_('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":46}],45:[function(_dereq_,module,exports){\nvar r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = _dereq_('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n\n},{\"crypto\":\"crypto\"}],46:[function(_dereq_,module,exports){\n\n},{}],47:[function(_dereq_,module,exports){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = _dereq_('base64-js')\nvar ieee754 = _dereq_('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('Invalid typed array length')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (isArrayBuffer(value)) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n return fromObject(value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj) {\n if (isArrayBufferView(obj) || 'length' in obj) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (isArrayBufferView(string) || isArrayBuffer(string)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : new Buffer(val, encoding)\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check\n// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166\nfunction isArrayBuffer (obj) {\n return obj instanceof ArrayBuffer ||\n (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&\n typeof obj.byteLength === 'number')\n}\n\n// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`\nfunction isArrayBufferView (obj) {\n return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)\n}\n\nfunction numberIsNaN (obj) {\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n},{\"base64-js\":43,\"ieee754\":297}],48:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.array.fill');\nmodule.exports = _dereq_('../../modules/_core').Array.fill;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.array.fill\":251}],49:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.array.find');\nmodule.exports = _dereq_('../../modules/_core').Array.find;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.array.find\":252}],50:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.string.iterator');\n_dereq_('../../modules/es6.array.from');\nmodule.exports = _dereq_('../../modules/_core').Array.from;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.array.from\":253,\"../../modules/es6.string.iterator\":258}],51:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.assign');\nmodule.exports = _dereq_('../../modules/_core').Object.assign;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.object.assign\":255}],52:[function(_dereq_,module,exports){\n_dereq_('../modules/es6.object.to-string');\n_dereq_('../modules/es6.string.iterator');\n_dereq_('../modules/web.dom.iterable');\n_dereq_('../modules/es6.promise');\n_dereq_('../modules/es7.promise.finally');\n_dereq_('../modules/es7.promise.try');\nmodule.exports = _dereq_('../modules/_core').Promise;\n\n},{\"../modules/_core\":180,\"../modules/es6.object.to-string\":256,\"../modules/es6.promise\":257,\"../modules/es6.string.iterator\":258,\"../modules/es7.promise.finally\":262,\"../modules/es7.promise.try\":263,\"../modules/web.dom.iterable\":266}],53:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.string.repeat');\nmodule.exports = _dereq_('../../modules/_core').String.repeat;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.string.repeat\":259}],54:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.symbol');\n_dereq_('../../modules/es6.object.to-string');\n_dereq_('../../modules/es7.symbol.async-iterator');\n_dereq_('../../modules/es7.symbol.observable');\nmodule.exports = _dereq_('../../modules/_core').Symbol;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.object.to-string\":256,\"../../modules/es6.symbol\":260,\"../../modules/es7.symbol.async-iterator\":264,\"../../modules/es7.symbol.observable\":265}],55:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.typed.uint8-array');\nmodule.exports = _dereq_('../../modules/_core').Uint8Array;\n\n},{\"../../modules/_core\":180,\"../../modules/es6.typed.uint8-array\":261}],56:[function(_dereq_,module,exports){\narguments[4][50][0].apply(exports,arguments)\n},{\"../../modules/_core\":78,\"../../modules/es6.array.from\":149,\"../../modules/es6.string.iterator\":159,\"dup\":50}],57:[function(_dereq_,module,exports){\n_dereq_('../modules/web.dom.iterable');\n_dereq_('../modules/es6.string.iterator');\nmodule.exports = _dereq_('../modules/core.get-iterator');\n\n},{\"../modules/core.get-iterator\":147,\"../modules/es6.string.iterator\":159,\"../modules/web.dom.iterable\":167}],58:[function(_dereq_,module,exports){\n_dereq_('../modules/web.dom.iterable');\n_dereq_('../modules/es6.string.iterator');\nmodule.exports = _dereq_('../modules/core.is-iterable');\n\n},{\"../modules/core.is-iterable\":148,\"../modules/es6.string.iterator\":159,\"../modules/web.dom.iterable\":167}],59:[function(_dereq_,module,exports){\nvar core = _dereq_('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n\n},{\"../../modules/_core\":78}],60:[function(_dereq_,module,exports){\narguments[4][51][0].apply(exports,arguments)\n},{\"../../modules/_core\":78,\"../../modules/es6.object.assign\":151,\"dup\":51}],61:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.create');\nvar $Object = _dereq_('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.create\":152}],62:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.define-property');\nvar $Object = _dereq_('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.define-property\":153}],63:[function(_dereq_,module,exports){\n_dereq_('../../modules/es7.object.entries');\nmodule.exports = _dereq_('../../modules/_core').Object.entries;\n\n},{\"../../modules/_core\":78,\"../../modules/es7.object.entries\":161}],64:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.freeze');\nmodule.exports = _dereq_('../../modules/_core').Object.freeze;\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.freeze\":154}],65:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.get-prototype-of');\nmodule.exports = _dereq_('../../modules/_core').Object.getPrototypeOf;\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.get-prototype-of\":155}],66:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.object.set-prototype-of');\nmodule.exports = _dereq_('../../modules/_core').Object.setPrototypeOf;\n\n},{\"../../modules/_core\":78,\"../../modules/es6.object.set-prototype-of\":156}],67:[function(_dereq_,module,exports){\n_dereq_('../../modules/es7.object.values');\nmodule.exports = _dereq_('../../modules/_core').Object.values;\n\n},{\"../../modules/_core\":78,\"../../modules/es7.object.values\":162}],68:[function(_dereq_,module,exports){\narguments[4][52][0].apply(exports,arguments)\n},{\"../modules/_core\":78,\"../modules/es6.object.to-string\":157,\"../modules/es6.promise\":158,\"../modules/es6.string.iterator\":159,\"../modules/es7.promise.finally\":163,\"../modules/es7.promise.try\":164,\"../modules/web.dom.iterable\":167,\"dup\":52}],69:[function(_dereq_,module,exports){\narguments[4][54][0].apply(exports,arguments)\n},{\"../../modules/_core\":78,\"../../modules/es6.object.to-string\":157,\"../../modules/es6.symbol\":160,\"../../modules/es7.symbol.async-iterator\":165,\"../../modules/es7.symbol.observable\":166,\"dup\":54}],70:[function(_dereq_,module,exports){\n_dereq_('../../modules/es6.string.iterator');\n_dereq_('../../modules/web.dom.iterable');\nmodule.exports = _dereq_('../../modules/_wks-ext').f('iterator');\n\n},{\"../../modules/_wks-ext\":144,\"../../modules/es6.string.iterator\":159,\"../../modules/web.dom.iterable\":167}],71:[function(_dereq_,module,exports){\nmodule.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n},{}],72:[function(_dereq_,module,exports){\nmodule.exports = function () { /* empty */ };\n\n},{}],73:[function(_dereq_,module,exports){\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n},{}],74:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n},{\"./_is-object\":98}],75:[function(_dereq_,module,exports){\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = _dereq_('./_to-iobject');\nvar toLength = _dereq_('./_to-length');\nvar toAbsoluteIndex = _dereq_('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n},{\"./_to-absolute-index\":136,\"./_to-iobject\":138,\"./_to-length\":139}],76:[function(_dereq_,module,exports){\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = _dereq_('./_cof');\nvar TAG = _dereq_('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n},{\"./_cof\":77,\"./_wks\":145}],77:[function(_dereq_,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n},{}],78:[function(_dereq_,module,exports){\nvar core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n},{}],79:[function(_dereq_,module,exports){\n'use strict';\nvar $defineProperty = _dereq_('./_object-dp');\nvar createDesc = _dereq_('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n},{\"./_object-dp\":111,\"./_property-desc\":125}],80:[function(_dereq_,module,exports){\n// optional / simple context binding\nvar aFunction = _dereq_('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n},{\"./_a-function\":71}],81:[function(_dereq_,module,exports){\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n},{}],82:[function(_dereq_,module,exports){\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !_dereq_('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n},{\"./_fails\":87}],83:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./_is-object');\nvar document = _dereq_('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n},{\"./_global\":89,\"./_is-object\":98}],84:[function(_dereq_,module,exports){\n// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n},{}],85:[function(_dereq_,module,exports){\n// all enumerable object keys, includes symbols\nvar getKeys = _dereq_('./_object-keys');\nvar gOPS = _dereq_('./_object-gops');\nvar pIE = _dereq_('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n},{\"./_object-gops\":116,\"./_object-keys\":119,\"./_object-pie\":120}],86:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar ctx = _dereq_('./_ctx');\nvar hide = _dereq_('./_hide');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n},{\"./_core\":78,\"./_ctx\":80,\"./_global\":89,\"./_hide\":91}],87:[function(_dereq_,module,exports){\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n},{}],88:[function(_dereq_,module,exports){\nvar ctx = _dereq_('./_ctx');\nvar call = _dereq_('./_iter-call');\nvar isArrayIter = _dereq_('./_is-array-iter');\nvar anObject = _dereq_('./_an-object');\nvar toLength = _dereq_('./_to-length');\nvar getIterFn = _dereq_('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n},{\"./_an-object\":74,\"./_ctx\":80,\"./_is-array-iter\":96,\"./_iter-call\":99,\"./_to-length\":139,\"./core.get-iterator-method\":146}],89:[function(_dereq_,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n},{}],90:[function(_dereq_,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n},{}],91:[function(_dereq_,module,exports){\nvar dP = _dereq_('./_object-dp');\nvar createDesc = _dereq_('./_property-desc');\nmodule.exports = _dereq_('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n},{\"./_descriptors\":82,\"./_object-dp\":111,\"./_property-desc\":125}],92:[function(_dereq_,module,exports){\nvar document = _dereq_('./_global').document;\nmodule.exports = document && document.documentElement;\n\n},{\"./_global\":89}],93:[function(_dereq_,module,exports){\nmodule.exports = !_dereq_('./_descriptors') && !_dereq_('./_fails')(function () {\n return Object.defineProperty(_dereq_('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n},{\"./_descriptors\":82,\"./_dom-create\":83,\"./_fails\":87}],94:[function(_dereq_,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n},{}],95:[function(_dereq_,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = _dereq_('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n},{\"./_cof\":77}],96:[function(_dereq_,module,exports){\n// check on default Array iterator\nvar Iterators = _dereq_('./_iterators');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n},{\"./_iterators\":104,\"./_wks\":145}],97:[function(_dereq_,module,exports){\n// 7.2.2 IsArray(argument)\nvar cof = _dereq_('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n},{\"./_cof\":77}],98:[function(_dereq_,module,exports){\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n},{}],99:[function(_dereq_,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = _dereq_('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n\n},{\"./_an-object\":74}],100:[function(_dereq_,module,exports){\n'use strict';\nvar create = _dereq_('./_object-create');\nvar descriptor = _dereq_('./_property-desc');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_dereq_('./_hide')(IteratorPrototype, _dereq_('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n},{\"./_hide\":91,\"./_object-create\":110,\"./_property-desc\":125,\"./_set-to-string-tag\":130,\"./_wks\":145}],101:[function(_dereq_,module,exports){\n'use strict';\nvar LIBRARY = _dereq_('./_library');\nvar $export = _dereq_('./_export');\nvar redefine = _dereq_('./_redefine');\nvar hide = _dereq_('./_hide');\nvar has = _dereq_('./_has');\nvar Iterators = _dereq_('./_iterators');\nvar $iterCreate = _dereq_('./_iter-create');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar getPrototypeOf = _dereq_('./_object-gpo');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n},{\"./_export\":86,\"./_has\":90,\"./_hide\":91,\"./_iter-create\":100,\"./_iterators\":104,\"./_library\":105,\"./_object-gpo\":117,\"./_redefine\":127,\"./_set-to-string-tag\":130,\"./_wks\":145}],102:[function(_dereq_,module,exports){\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n},{\"./_wks\":145}],103:[function(_dereq_,module,exports){\nmodule.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n},{}],104:[function(_dereq_,module,exports){\nmodule.exports = {};\n\n},{}],105:[function(_dereq_,module,exports){\nmodule.exports = true;\n\n},{}],106:[function(_dereq_,module,exports){\nvar META = _dereq_('./_uid')('meta');\nvar isObject = _dereq_('./_is-object');\nvar has = _dereq_('./_has');\nvar setDesc = _dereq_('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !_dereq_('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n},{\"./_fails\":87,\"./_has\":90,\"./_is-object\":98,\"./_object-dp\":111,\"./_uid\":142}],107:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar macrotask = _dereq_('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = _dereq_('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n},{\"./_cof\":77,\"./_global\":89,\"./_task\":135}],108:[function(_dereq_,module,exports){\n'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = _dereq_('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n},{\"./_a-function\":71}],109:[function(_dereq_,module,exports){\n'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = _dereq_('./_object-keys');\nvar gOPS = _dereq_('./_object-gops');\nvar pIE = _dereq_('./_object-pie');\nvar toObject = _dereq_('./_to-object');\nvar IObject = _dereq_('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || _dereq_('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n},{\"./_fails\":87,\"./_iobject\":95,\"./_object-gops\":116,\"./_object-keys\":119,\"./_object-pie\":120,\"./_to-object\":140}],110:[function(_dereq_,module,exports){\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = _dereq_('./_an-object');\nvar dPs = _dereq_('./_object-dps');\nvar enumBugKeys = _dereq_('./_enum-bug-keys');\nvar IE_PROTO = _dereq_('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _dereq_('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _dereq_('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n},{\"./_an-object\":74,\"./_dom-create\":83,\"./_enum-bug-keys\":84,\"./_html\":92,\"./_object-dps\":112,\"./_shared-key\":131}],111:[function(_dereq_,module,exports){\nvar anObject = _dereq_('./_an-object');\nvar IE8_DOM_DEFINE = _dereq_('./_ie8-dom-define');\nvar toPrimitive = _dereq_('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = _dereq_('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n},{\"./_an-object\":74,\"./_descriptors\":82,\"./_ie8-dom-define\":93,\"./_to-primitive\":141}],112:[function(_dereq_,module,exports){\nvar dP = _dereq_('./_object-dp');\nvar anObject = _dereq_('./_an-object');\nvar getKeys = _dereq_('./_object-keys');\n\nmodule.exports = _dereq_('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n},{\"./_an-object\":74,\"./_descriptors\":82,\"./_object-dp\":111,\"./_object-keys\":119}],113:[function(_dereq_,module,exports){\nvar pIE = _dereq_('./_object-pie');\nvar createDesc = _dereq_('./_property-desc');\nvar toIObject = _dereq_('./_to-iobject');\nvar toPrimitive = _dereq_('./_to-primitive');\nvar has = _dereq_('./_has');\nvar IE8_DOM_DEFINE = _dereq_('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = _dereq_('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n},{\"./_descriptors\":82,\"./_has\":90,\"./_ie8-dom-define\":93,\"./_object-pie\":120,\"./_property-desc\":125,\"./_to-iobject\":138,\"./_to-primitive\":141}],114:[function(_dereq_,module,exports){\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = _dereq_('./_to-iobject');\nvar gOPN = _dereq_('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n},{\"./_object-gopn\":115,\"./_to-iobject\":138}],115:[function(_dereq_,module,exports){\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = _dereq_('./_object-keys-internal');\nvar hiddenKeys = _dereq_('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n},{\"./_enum-bug-keys\":84,\"./_object-keys-internal\":118}],116:[function(_dereq_,module,exports){\nexports.f = Object.getOwnPropertySymbols;\n\n},{}],117:[function(_dereq_,module,exports){\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = _dereq_('./_has');\nvar toObject = _dereq_('./_to-object');\nvar IE_PROTO = _dereq_('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n},{\"./_has\":90,\"./_shared-key\":131,\"./_to-object\":140}],118:[function(_dereq_,module,exports){\nvar has = _dereq_('./_has');\nvar toIObject = _dereq_('./_to-iobject');\nvar arrayIndexOf = _dereq_('./_array-includes')(false);\nvar IE_PROTO = _dereq_('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n},{\"./_array-includes\":75,\"./_has\":90,\"./_shared-key\":131,\"./_to-iobject\":138}],119:[function(_dereq_,module,exports){\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = _dereq_('./_object-keys-internal');\nvar enumBugKeys = _dereq_('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n},{\"./_enum-bug-keys\":84,\"./_object-keys-internal\":118}],120:[function(_dereq_,module,exports){\nexports.f = {}.propertyIsEnumerable;\n\n},{}],121:[function(_dereq_,module,exports){\n// most Object methods by ES6 should accept primitives\nvar $export = _dereq_('./_export');\nvar core = _dereq_('./_core');\nvar fails = _dereq_('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n},{\"./_core\":78,\"./_export\":86,\"./_fails\":87}],122:[function(_dereq_,module,exports){\nvar getKeys = _dereq_('./_object-keys');\nvar toIObject = _dereq_('./_to-iobject');\nvar isEnum = _dereq_('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n},{\"./_object-keys\":119,\"./_object-pie\":120,\"./_to-iobject\":138}],123:[function(_dereq_,module,exports){\nmodule.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n},{}],124:[function(_dereq_,module,exports){\nvar anObject = _dereq_('./_an-object');\nvar isObject = _dereq_('./_is-object');\nvar newPromiseCapability = _dereq_('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n},{\"./_an-object\":74,\"./_is-object\":98,\"./_new-promise-capability\":108}],125:[function(_dereq_,module,exports){\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n},{}],126:[function(_dereq_,module,exports){\nvar hide = _dereq_('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n\n},{\"./_hide\":91}],127:[function(_dereq_,module,exports){\nmodule.exports = _dereq_('./_hide');\n\n},{\"./_hide\":91}],128:[function(_dereq_,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = _dereq_('./_is-object');\nvar anObject = _dereq_('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = _dereq_('./_ctx')(Function.call, _dereq_('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n},{\"./_an-object\":74,\"./_ctx\":80,\"./_is-object\":98,\"./_object-gopd\":113}],129:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar dP = _dereq_('./_object-dp');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar SPECIES = _dereq_('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n},{\"./_core\":78,\"./_descriptors\":82,\"./_global\":89,\"./_object-dp\":111,\"./_wks\":145}],130:[function(_dereq_,module,exports){\nvar def = _dereq_('./_object-dp').f;\nvar has = _dereq_('./_has');\nvar TAG = _dereq_('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n},{\"./_has\":90,\"./_object-dp\":111,\"./_wks\":145}],131:[function(_dereq_,module,exports){\nvar shared = _dereq_('./_shared')('keys');\nvar uid = _dereq_('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n},{\"./_shared\":132,\"./_uid\":142}],132:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n\n},{\"./_global\":89}],133:[function(_dereq_,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = _dereq_('./_an-object');\nvar aFunction = _dereq_('./_a-function');\nvar SPECIES = _dereq_('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n},{\"./_a-function\":71,\"./_an-object\":74,\"./_wks\":145}],134:[function(_dereq_,module,exports){\nvar toInteger = _dereq_('./_to-integer');\nvar defined = _dereq_('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n},{\"./_defined\":81,\"./_to-integer\":137}],135:[function(_dereq_,module,exports){\nvar ctx = _dereq_('./_ctx');\nvar invoke = _dereq_('./_invoke');\nvar html = _dereq_('./_html');\nvar cel = _dereq_('./_dom-create');\nvar global = _dereq_('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (_dereq_('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n},{\"./_cof\":77,\"./_ctx\":80,\"./_dom-create\":83,\"./_global\":89,\"./_html\":92,\"./_invoke\":94}],136:[function(_dereq_,module,exports){\nvar toInteger = _dereq_('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n},{\"./_to-integer\":137}],137:[function(_dereq_,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n},{}],138:[function(_dereq_,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = _dereq_('./_iobject');\nvar defined = _dereq_('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n},{\"./_defined\":81,\"./_iobject\":95}],139:[function(_dereq_,module,exports){\n// 7.1.15 ToLength\nvar toInteger = _dereq_('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n},{\"./_to-integer\":137}],140:[function(_dereq_,module,exports){\n// 7.1.13 ToObject(argument)\nvar defined = _dereq_('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n},{\"./_defined\":81}],141:[function(_dereq_,module,exports){\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = _dereq_('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n},{\"./_is-object\":98}],142:[function(_dereq_,module,exports){\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n},{}],143:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar LIBRARY = _dereq_('./_library');\nvar wksExt = _dereq_('./_wks-ext');\nvar defineProperty = _dereq_('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n},{\"./_core\":78,\"./_global\":89,\"./_library\":105,\"./_object-dp\":111,\"./_wks-ext\":144}],144:[function(_dereq_,module,exports){\nexports.f = _dereq_('./_wks');\n\n},{\"./_wks\":145}],145:[function(_dereq_,module,exports){\nvar store = _dereq_('./_shared')('wks');\nvar uid = _dereq_('./_uid');\nvar Symbol = _dereq_('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n},{\"./_global\":89,\"./_shared\":132,\"./_uid\":142}],146:[function(_dereq_,module,exports){\nvar classof = _dereq_('./_classof');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar Iterators = _dereq_('./_iterators');\nmodule.exports = _dereq_('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n},{\"./_classof\":76,\"./_core\":78,\"./_iterators\":104,\"./_wks\":145}],147:[function(_dereq_,module,exports){\nvar anObject = _dereq_('./_an-object');\nvar get = _dereq_('./core.get-iterator-method');\nmodule.exports = _dereq_('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n\n},{\"./_an-object\":74,\"./_core\":78,\"./core.get-iterator-method\":146}],148:[function(_dereq_,module,exports){\nvar classof = _dereq_('./_classof');\nvar ITERATOR = _dereq_('./_wks')('iterator');\nvar Iterators = _dereq_('./_iterators');\nmodule.exports = _dereq_('./_core').isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || Iterators.hasOwnProperty(classof(O));\n};\n\n},{\"./_classof\":76,\"./_core\":78,\"./_iterators\":104,\"./_wks\":145}],149:[function(_dereq_,module,exports){\n'use strict';\nvar ctx = _dereq_('./_ctx');\nvar $export = _dereq_('./_export');\nvar toObject = _dereq_('./_to-object');\nvar call = _dereq_('./_iter-call');\nvar isArrayIter = _dereq_('./_is-array-iter');\nvar toLength = _dereq_('./_to-length');\nvar createProperty = _dereq_('./_create-property');\nvar getIterFn = _dereq_('./core.get-iterator-method');\n\n$export($export.S + $export.F * !_dereq_('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n},{\"./_create-property\":79,\"./_ctx\":80,\"./_export\":86,\"./_is-array-iter\":96,\"./_iter-call\":99,\"./_iter-detect\":102,\"./_to-length\":139,\"./_to-object\":140,\"./core.get-iterator-method\":146}],150:[function(_dereq_,module,exports){\n'use strict';\nvar addToUnscopables = _dereq_('./_add-to-unscopables');\nvar step = _dereq_('./_iter-step');\nvar Iterators = _dereq_('./_iterators');\nvar toIObject = _dereq_('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = _dereq_('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n},{\"./_add-to-unscopables\":72,\"./_iter-define\":101,\"./_iter-step\":103,\"./_iterators\":104,\"./_to-iobject\":138}],151:[function(_dereq_,module,exports){\n// 19.1.3.1 Object.assign(target, source)\nvar $export = _dereq_('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: _dereq_('./_object-assign') });\n\n},{\"./_export\":86,\"./_object-assign\":109}],152:[function(_dereq_,module,exports){\nvar $export = _dereq_('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: _dereq_('./_object-create') });\n\n},{\"./_export\":86,\"./_object-create\":110}],153:[function(_dereq_,module,exports){\nvar $export = _dereq_('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !_dereq_('./_descriptors'), 'Object', { defineProperty: _dereq_('./_object-dp').f });\n\n},{\"./_descriptors\":82,\"./_export\":86,\"./_object-dp\":111}],154:[function(_dereq_,module,exports){\n// 19.1.2.5 Object.freeze(O)\nvar isObject = _dereq_('./_is-object');\nvar meta = _dereq_('./_meta').onFreeze;\n\n_dereq_('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n},{\"./_is-object\":98,\"./_meta\":106,\"./_object-sap\":121}],155:[function(_dereq_,module,exports){\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = _dereq_('./_to-object');\nvar $getPrototypeOf = _dereq_('./_object-gpo');\n\n_dereq_('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n\n},{\"./_object-gpo\":117,\"./_object-sap\":121,\"./_to-object\":140}],156:[function(_dereq_,module,exports){\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = _dereq_('./_export');\n$export($export.S, 'Object', { setPrototypeOf: _dereq_('./_set-proto').set });\n\n},{\"./_export\":86,\"./_set-proto\":128}],157:[function(_dereq_,module,exports){\narguments[4][46][0].apply(exports,arguments)\n},{\"dup\":46}],158:[function(_dereq_,module,exports){\n'use strict';\nvar LIBRARY = _dereq_('./_library');\nvar global = _dereq_('./_global');\nvar ctx = _dereq_('./_ctx');\nvar classof = _dereq_('./_classof');\nvar $export = _dereq_('./_export');\nvar isObject = _dereq_('./_is-object');\nvar aFunction = _dereq_('./_a-function');\nvar anInstance = _dereq_('./_an-instance');\nvar forOf = _dereq_('./_for-of');\nvar speciesConstructor = _dereq_('./_species-constructor');\nvar task = _dereq_('./_task').set;\nvar microtask = _dereq_('./_microtask')();\nvar newPromiseCapabilityModule = _dereq_('./_new-promise-capability');\nvar perform = _dereq_('./_perform');\nvar promiseResolve = _dereq_('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[_dereq_('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = _dereq_('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n_dereq_('./_set-to-string-tag')($Promise, PROMISE);\n_dereq_('./_set-species')(PROMISE);\nWrapper = _dereq_('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && _dereq_('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n},{\"./_a-function\":71,\"./_an-instance\":73,\"./_classof\":76,\"./_core\":78,\"./_ctx\":80,\"./_export\":86,\"./_for-of\":88,\"./_global\":89,\"./_is-object\":98,\"./_iter-detect\":102,\"./_library\":105,\"./_microtask\":107,\"./_new-promise-capability\":108,\"./_perform\":123,\"./_promise-resolve\":124,\"./_redefine-all\":126,\"./_set-species\":129,\"./_set-to-string-tag\":130,\"./_species-constructor\":133,\"./_task\":135,\"./_wks\":145}],159:[function(_dereq_,module,exports){\n'use strict';\nvar $at = _dereq_('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_dereq_('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n},{\"./_iter-define\":101,\"./_string-at\":134}],160:[function(_dereq_,module,exports){\n'use strict';\n// ECMAScript 6 symbols shim\nvar global = _dereq_('./_global');\nvar has = _dereq_('./_has');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar $export = _dereq_('./_export');\nvar redefine = _dereq_('./_redefine');\nvar META = _dereq_('./_meta').KEY;\nvar $fails = _dereq_('./_fails');\nvar shared = _dereq_('./_shared');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar uid = _dereq_('./_uid');\nvar wks = _dereq_('./_wks');\nvar wksExt = _dereq_('./_wks-ext');\nvar wksDefine = _dereq_('./_wks-define');\nvar enumKeys = _dereq_('./_enum-keys');\nvar isArray = _dereq_('./_is-array');\nvar anObject = _dereq_('./_an-object');\nvar isObject = _dereq_('./_is-object');\nvar toIObject = _dereq_('./_to-iobject');\nvar toPrimitive = _dereq_('./_to-primitive');\nvar createDesc = _dereq_('./_property-desc');\nvar _create = _dereq_('./_object-create');\nvar gOPNExt = _dereq_('./_object-gopn-ext');\nvar $GOPD = _dereq_('./_object-gopd');\nvar $DP = _dereq_('./_object-dp');\nvar $keys = _dereq_('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n _dereq_('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n _dereq_('./_object-pie').f = $propertyIsEnumerable;\n _dereq_('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !_dereq_('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || _dereq_('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n},{\"./_an-object\":74,\"./_descriptors\":82,\"./_enum-keys\":85,\"./_export\":86,\"./_fails\":87,\"./_global\":89,\"./_has\":90,\"./_hide\":91,\"./_is-array\":97,\"./_is-object\":98,\"./_library\":105,\"./_meta\":106,\"./_object-create\":110,\"./_object-dp\":111,\"./_object-gopd\":113,\"./_object-gopn\":115,\"./_object-gopn-ext\":114,\"./_object-gops\":116,\"./_object-keys\":119,\"./_object-pie\":120,\"./_property-desc\":125,\"./_redefine\":127,\"./_set-to-string-tag\":130,\"./_shared\":132,\"./_to-iobject\":138,\"./_to-primitive\":141,\"./_uid\":142,\"./_wks\":145,\"./_wks-define\":143,\"./_wks-ext\":144}],161:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = _dereq_('./_export');\nvar $entries = _dereq_('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n},{\"./_export\":86,\"./_object-to-array\":122}],162:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = _dereq_('./_export');\nvar $values = _dereq_('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n},{\"./_export\":86,\"./_object-to-array\":122}],163:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = _dereq_('./_export');\nvar core = _dereq_('./_core');\nvar global = _dereq_('./_global');\nvar speciesConstructor = _dereq_('./_species-constructor');\nvar promiseResolve = _dereq_('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n},{\"./_core\":78,\"./_export\":86,\"./_global\":89,\"./_promise-resolve\":124,\"./_species-constructor\":133}],164:[function(_dereq_,module,exports){\n'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = _dereq_('./_export');\nvar newPromiseCapability = _dereq_('./_new-promise-capability');\nvar perform = _dereq_('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\n},{\"./_export\":86,\"./_new-promise-capability\":108,\"./_perform\":123}],165:[function(_dereq_,module,exports){\n_dereq_('./_wks-define')('asyncIterator');\n\n},{\"./_wks-define\":143}],166:[function(_dereq_,module,exports){\n_dereq_('./_wks-define')('observable');\n\n},{\"./_wks-define\":143}],167:[function(_dereq_,module,exports){\n_dereq_('./es6.array.iterator');\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar Iterators = _dereq_('./_iterators');\nvar TO_STRING_TAG = _dereq_('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n\n},{\"./_global\":89,\"./_hide\":91,\"./_iterators\":104,\"./_wks\":145,\"./es6.array.iterator\":150}],168:[function(_dereq_,module,exports){\narguments[4][71][0].apply(exports,arguments)\n},{\"dup\":71}],169:[function(_dereq_,module,exports){\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = _dereq_('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) _dereq_('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n},{\"./_hide\":193,\"./_wks\":249}],170:[function(_dereq_,module,exports){\narguments[4][73][0].apply(exports,arguments)\n},{\"dup\":73}],171:[function(_dereq_,module,exports){\narguments[4][74][0].apply(exports,arguments)\n},{\"./_is-object\":200,\"dup\":74}],172:[function(_dereq_,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = _dereq_('./_to-object');\nvar toAbsoluteIndex = _dereq_('./_to-absolute-index');\nvar toLength = _dereq_('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n},{\"./_to-absolute-index\":236,\"./_to-length\":240,\"./_to-object\":241}],173:[function(_dereq_,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = _dereq_('./_to-object');\nvar toAbsoluteIndex = _dereq_('./_to-absolute-index');\nvar toLength = _dereq_('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n},{\"./_to-absolute-index\":236,\"./_to-length\":240,\"./_to-object\":241}],174:[function(_dereq_,module,exports){\narguments[4][75][0].apply(exports,arguments)\n},{\"./_to-absolute-index\":236,\"./_to-iobject\":239,\"./_to-length\":240,\"dup\":75}],175:[function(_dereq_,module,exports){\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = _dereq_('./_ctx');\nvar IObject = _dereq_('./_iobject');\nvar toObject = _dereq_('./_to-object');\nvar toLength = _dereq_('./_to-length');\nvar asc = _dereq_('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n},{\"./_array-species-create\":177,\"./_ctx\":182,\"./_iobject\":197,\"./_to-length\":240,\"./_to-object\":241}],176:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./_is-object');\nvar isArray = _dereq_('./_is-array');\nvar SPECIES = _dereq_('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n},{\"./_is-array\":199,\"./_is-object\":200,\"./_wks\":249}],177:[function(_dereq_,module,exports){\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = _dereq_('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n},{\"./_array-species-constructor\":176}],178:[function(_dereq_,module,exports){\narguments[4][76][0].apply(exports,arguments)\n},{\"./_cof\":179,\"./_wks\":249,\"dup\":76}],179:[function(_dereq_,module,exports){\narguments[4][77][0].apply(exports,arguments)\n},{\"dup\":77}],180:[function(_dereq_,module,exports){\narguments[4][78][0].apply(exports,arguments)\n},{\"dup\":78}],181:[function(_dereq_,module,exports){\narguments[4][79][0].apply(exports,arguments)\n},{\"./_object-dp\":213,\"./_property-desc\":225,\"dup\":79}],182:[function(_dereq_,module,exports){\narguments[4][80][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"dup\":80}],183:[function(_dereq_,module,exports){\narguments[4][81][0].apply(exports,arguments)\n},{\"dup\":81}],184:[function(_dereq_,module,exports){\narguments[4][82][0].apply(exports,arguments)\n},{\"./_fails\":189,\"dup\":82}],185:[function(_dereq_,module,exports){\narguments[4][83][0].apply(exports,arguments)\n},{\"./_global\":191,\"./_is-object\":200,\"dup\":83}],186:[function(_dereq_,module,exports){\narguments[4][84][0].apply(exports,arguments)\n},{\"dup\":84}],187:[function(_dereq_,module,exports){\narguments[4][85][0].apply(exports,arguments)\n},{\"./_object-gops\":218,\"./_object-keys\":221,\"./_object-pie\":222,\"dup\":85}],188:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar core = _dereq_('./_core');\nvar hide = _dereq_('./_hide');\nvar redefine = _dereq_('./_redefine');\nvar ctx = _dereq_('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n},{\"./_core\":180,\"./_ctx\":182,\"./_global\":191,\"./_hide\":193,\"./_redefine\":227}],189:[function(_dereq_,module,exports){\narguments[4][87][0].apply(exports,arguments)\n},{\"dup\":87}],190:[function(_dereq_,module,exports){\narguments[4][88][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_ctx\":182,\"./_is-array-iter\":198,\"./_iter-call\":201,\"./_to-length\":240,\"./core.get-iterator-method\":250,\"dup\":88}],191:[function(_dereq_,module,exports){\narguments[4][89][0].apply(exports,arguments)\n},{\"dup\":89}],192:[function(_dereq_,module,exports){\narguments[4][90][0].apply(exports,arguments)\n},{\"dup\":90}],193:[function(_dereq_,module,exports){\narguments[4][91][0].apply(exports,arguments)\n},{\"./_descriptors\":184,\"./_object-dp\":213,\"./_property-desc\":225,\"dup\":91}],194:[function(_dereq_,module,exports){\narguments[4][92][0].apply(exports,arguments)\n},{\"./_global\":191,\"dup\":92}],195:[function(_dereq_,module,exports){\narguments[4][93][0].apply(exports,arguments)\n},{\"./_descriptors\":184,\"./_dom-create\":185,\"./_fails\":189,\"dup\":93}],196:[function(_dereq_,module,exports){\narguments[4][94][0].apply(exports,arguments)\n},{\"dup\":94}],197:[function(_dereq_,module,exports){\narguments[4][95][0].apply(exports,arguments)\n},{\"./_cof\":179,\"dup\":95}],198:[function(_dereq_,module,exports){\narguments[4][96][0].apply(exports,arguments)\n},{\"./_iterators\":206,\"./_wks\":249,\"dup\":96}],199:[function(_dereq_,module,exports){\narguments[4][97][0].apply(exports,arguments)\n},{\"./_cof\":179,\"dup\":97}],200:[function(_dereq_,module,exports){\narguments[4][98][0].apply(exports,arguments)\n},{\"dup\":98}],201:[function(_dereq_,module,exports){\narguments[4][99][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"dup\":99}],202:[function(_dereq_,module,exports){\narguments[4][100][0].apply(exports,arguments)\n},{\"./_hide\":193,\"./_object-create\":212,\"./_property-desc\":225,\"./_set-to-string-tag\":229,\"./_wks\":249,\"dup\":100}],203:[function(_dereq_,module,exports){\narguments[4][101][0].apply(exports,arguments)\n},{\"./_export\":188,\"./_has\":192,\"./_hide\":193,\"./_iter-create\":202,\"./_iterators\":206,\"./_library\":207,\"./_object-gpo\":219,\"./_redefine\":227,\"./_set-to-string-tag\":229,\"./_wks\":249,\"dup\":101}],204:[function(_dereq_,module,exports){\narguments[4][102][0].apply(exports,arguments)\n},{\"./_wks\":249,\"dup\":102}],205:[function(_dereq_,module,exports){\narguments[4][103][0].apply(exports,arguments)\n},{\"dup\":103}],206:[function(_dereq_,module,exports){\narguments[4][104][0].apply(exports,arguments)\n},{\"dup\":104}],207:[function(_dereq_,module,exports){\nmodule.exports = false;\n\n},{}],208:[function(_dereq_,module,exports){\narguments[4][106][0].apply(exports,arguments)\n},{\"./_fails\":189,\"./_has\":192,\"./_is-object\":200,\"./_object-dp\":213,\"./_uid\":246,\"dup\":106}],209:[function(_dereq_,module,exports){\narguments[4][107][0].apply(exports,arguments)\n},{\"./_cof\":179,\"./_global\":191,\"./_task\":235,\"dup\":107}],210:[function(_dereq_,module,exports){\narguments[4][108][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"dup\":108}],211:[function(_dereq_,module,exports){\narguments[4][109][0].apply(exports,arguments)\n},{\"./_fails\":189,\"./_iobject\":197,\"./_object-gops\":218,\"./_object-keys\":221,\"./_object-pie\":222,\"./_to-object\":241,\"dup\":109}],212:[function(_dereq_,module,exports){\narguments[4][110][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_dom-create\":185,\"./_enum-bug-keys\":186,\"./_html\":194,\"./_object-dps\":214,\"./_shared-key\":230,\"dup\":110}],213:[function(_dereq_,module,exports){\narguments[4][111][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_descriptors\":184,\"./_ie8-dom-define\":195,\"./_to-primitive\":242,\"dup\":111}],214:[function(_dereq_,module,exports){\narguments[4][112][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_descriptors\":184,\"./_object-dp\":213,\"./_object-keys\":221,\"dup\":112}],215:[function(_dereq_,module,exports){\narguments[4][113][0].apply(exports,arguments)\n},{\"./_descriptors\":184,\"./_has\":192,\"./_ie8-dom-define\":195,\"./_object-pie\":222,\"./_property-desc\":225,\"./_to-iobject\":239,\"./_to-primitive\":242,\"dup\":113}],216:[function(_dereq_,module,exports){\narguments[4][114][0].apply(exports,arguments)\n},{\"./_object-gopn\":217,\"./_to-iobject\":239,\"dup\":114}],217:[function(_dereq_,module,exports){\narguments[4][115][0].apply(exports,arguments)\n},{\"./_enum-bug-keys\":186,\"./_object-keys-internal\":220,\"dup\":115}],218:[function(_dereq_,module,exports){\narguments[4][116][0].apply(exports,arguments)\n},{\"dup\":116}],219:[function(_dereq_,module,exports){\narguments[4][117][0].apply(exports,arguments)\n},{\"./_has\":192,\"./_shared-key\":230,\"./_to-object\":241,\"dup\":117}],220:[function(_dereq_,module,exports){\narguments[4][118][0].apply(exports,arguments)\n},{\"./_array-includes\":174,\"./_has\":192,\"./_shared-key\":230,\"./_to-iobject\":239,\"dup\":118}],221:[function(_dereq_,module,exports){\narguments[4][119][0].apply(exports,arguments)\n},{\"./_enum-bug-keys\":186,\"./_object-keys-internal\":220,\"dup\":119}],222:[function(_dereq_,module,exports){\narguments[4][120][0].apply(exports,arguments)\n},{\"dup\":120}],223:[function(_dereq_,module,exports){\narguments[4][123][0].apply(exports,arguments)\n},{\"dup\":123}],224:[function(_dereq_,module,exports){\narguments[4][124][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_is-object\":200,\"./_new-promise-capability\":210,\"dup\":124}],225:[function(_dereq_,module,exports){\narguments[4][125][0].apply(exports,arguments)\n},{\"dup\":125}],226:[function(_dereq_,module,exports){\nvar redefine = _dereq_('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n\n},{\"./_redefine\":227}],227:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar has = _dereq_('./_has');\nvar SRC = _dereq_('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n_dereq_('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n},{\"./_core\":180,\"./_global\":191,\"./_has\":192,\"./_hide\":193,\"./_uid\":246}],228:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_('./_global');\nvar dP = _dereq_('./_object-dp');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar SPECIES = _dereq_('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n},{\"./_descriptors\":184,\"./_global\":191,\"./_object-dp\":213,\"./_wks\":249}],229:[function(_dereq_,module,exports){\narguments[4][130][0].apply(exports,arguments)\n},{\"./_has\":192,\"./_object-dp\":213,\"./_wks\":249,\"dup\":130}],230:[function(_dereq_,module,exports){\narguments[4][131][0].apply(exports,arguments)\n},{\"./_shared\":231,\"./_uid\":246,\"dup\":131}],231:[function(_dereq_,module,exports){\narguments[4][132][0].apply(exports,arguments)\n},{\"./_global\":191,\"dup\":132}],232:[function(_dereq_,module,exports){\narguments[4][133][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"./_an-object\":171,\"./_wks\":249,\"dup\":133}],233:[function(_dereq_,module,exports){\narguments[4][134][0].apply(exports,arguments)\n},{\"./_defined\":183,\"./_to-integer\":238,\"dup\":134}],234:[function(_dereq_,module,exports){\n'use strict';\nvar toInteger = _dereq_('./_to-integer');\nvar defined = _dereq_('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n\n},{\"./_defined\":183,\"./_to-integer\":238}],235:[function(_dereq_,module,exports){\narguments[4][135][0].apply(exports,arguments)\n},{\"./_cof\":179,\"./_ctx\":182,\"./_dom-create\":185,\"./_global\":191,\"./_html\":194,\"./_invoke\":196,\"dup\":135}],236:[function(_dereq_,module,exports){\narguments[4][136][0].apply(exports,arguments)\n},{\"./_to-integer\":238,\"dup\":136}],237:[function(_dereq_,module,exports){\n// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = _dereq_('./_to-integer');\nvar toLength = _dereq_('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n\n},{\"./_to-integer\":238,\"./_to-length\":240}],238:[function(_dereq_,module,exports){\narguments[4][137][0].apply(exports,arguments)\n},{\"dup\":137}],239:[function(_dereq_,module,exports){\narguments[4][138][0].apply(exports,arguments)\n},{\"./_defined\":183,\"./_iobject\":197,\"dup\":138}],240:[function(_dereq_,module,exports){\narguments[4][139][0].apply(exports,arguments)\n},{\"./_to-integer\":238,\"dup\":139}],241:[function(_dereq_,module,exports){\narguments[4][140][0].apply(exports,arguments)\n},{\"./_defined\":183,\"dup\":140}],242:[function(_dereq_,module,exports){\narguments[4][141][0].apply(exports,arguments)\n},{\"./_is-object\":200,\"dup\":141}],243:[function(_dereq_,module,exports){\n'use strict';\nif (_dereq_('./_descriptors')) {\n var LIBRARY = _dereq_('./_library');\n var global = _dereq_('./_global');\n var fails = _dereq_('./_fails');\n var $export = _dereq_('./_export');\n var $typed = _dereq_('./_typed');\n var $buffer = _dereq_('./_typed-buffer');\n var ctx = _dereq_('./_ctx');\n var anInstance = _dereq_('./_an-instance');\n var propertyDesc = _dereq_('./_property-desc');\n var hide = _dereq_('./_hide');\n var redefineAll = _dereq_('./_redefine-all');\n var toInteger = _dereq_('./_to-integer');\n var toLength = _dereq_('./_to-length');\n var toIndex = _dereq_('./_to-index');\n var toAbsoluteIndex = _dereq_('./_to-absolute-index');\n var toPrimitive = _dereq_('./_to-primitive');\n var has = _dereq_('./_has');\n var classof = _dereq_('./_classof');\n var isObject = _dereq_('./_is-object');\n var toObject = _dereq_('./_to-object');\n var isArrayIter = _dereq_('./_is-array-iter');\n var create = _dereq_('./_object-create');\n var getPrototypeOf = _dereq_('./_object-gpo');\n var gOPN = _dereq_('./_object-gopn').f;\n var getIterFn = _dereq_('./core.get-iterator-method');\n var uid = _dereq_('./_uid');\n var wks = _dereq_('./_wks');\n var createArrayMethod = _dereq_('./_array-methods');\n var createArrayIncludes = _dereq_('./_array-includes');\n var speciesConstructor = _dereq_('./_species-constructor');\n var ArrayIterators = _dereq_('./es6.array.iterator');\n var Iterators = _dereq_('./_iterators');\n var $iterDetect = _dereq_('./_iter-detect');\n var setSpecies = _dereq_('./_set-species');\n var arrayFill = _dereq_('./_array-fill');\n var arrayCopyWithin = _dereq_('./_array-copy-within');\n var $DP = _dereq_('./_object-dp');\n var $GOPD = _dereq_('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n\n},{\"./_an-instance\":170,\"./_array-copy-within\":172,\"./_array-fill\":173,\"./_array-includes\":174,\"./_array-methods\":175,\"./_classof\":178,\"./_ctx\":182,\"./_descriptors\":184,\"./_export\":188,\"./_fails\":189,\"./_global\":191,\"./_has\":192,\"./_hide\":193,\"./_is-array-iter\":198,\"./_is-object\":200,\"./_iter-detect\":204,\"./_iterators\":206,\"./_library\":207,\"./_object-create\":212,\"./_object-dp\":213,\"./_object-gopd\":215,\"./_object-gopn\":217,\"./_object-gpo\":219,\"./_property-desc\":225,\"./_redefine-all\":226,\"./_set-species\":228,\"./_species-constructor\":232,\"./_to-absolute-index\":236,\"./_to-index\":237,\"./_to-integer\":238,\"./_to-length\":240,\"./_to-object\":241,\"./_to-primitive\":242,\"./_typed\":245,\"./_typed-buffer\":244,\"./_uid\":246,\"./_wks\":249,\"./core.get-iterator-method\":250,\"./es6.array.iterator\":254}],244:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_('./_global');\nvar DESCRIPTORS = _dereq_('./_descriptors');\nvar LIBRARY = _dereq_('./_library');\nvar $typed = _dereq_('./_typed');\nvar hide = _dereq_('./_hide');\nvar redefineAll = _dereq_('./_redefine-all');\nvar fails = _dereq_('./_fails');\nvar anInstance = _dereq_('./_an-instance');\nvar toInteger = _dereq_('./_to-integer');\nvar toLength = _dereq_('./_to-length');\nvar toIndex = _dereq_('./_to-index');\nvar gOPN = _dereq_('./_object-gopn').f;\nvar dP = _dereq_('./_object-dp').f;\nvar arrayFill = _dereq_('./_array-fill');\nvar setToStringTag = _dereq_('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n\n},{\"./_an-instance\":170,\"./_array-fill\":173,\"./_descriptors\":184,\"./_fails\":189,\"./_global\":191,\"./_hide\":193,\"./_library\":207,\"./_object-dp\":213,\"./_object-gopn\":217,\"./_redefine-all\":226,\"./_set-to-string-tag\":229,\"./_to-index\":237,\"./_to-integer\":238,\"./_to-length\":240,\"./_typed\":245}],245:[function(_dereq_,module,exports){\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar uid = _dereq_('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n\n},{\"./_global\":191,\"./_hide\":193,\"./_uid\":246}],246:[function(_dereq_,module,exports){\narguments[4][142][0].apply(exports,arguments)\n},{\"dup\":142}],247:[function(_dereq_,module,exports){\narguments[4][143][0].apply(exports,arguments)\n},{\"./_core\":180,\"./_global\":191,\"./_library\":207,\"./_object-dp\":213,\"./_wks-ext\":248,\"dup\":143}],248:[function(_dereq_,module,exports){\narguments[4][144][0].apply(exports,arguments)\n},{\"./_wks\":249,\"dup\":144}],249:[function(_dereq_,module,exports){\narguments[4][145][0].apply(exports,arguments)\n},{\"./_global\":191,\"./_shared\":231,\"./_uid\":246,\"dup\":145}],250:[function(_dereq_,module,exports){\narguments[4][146][0].apply(exports,arguments)\n},{\"./_classof\":178,\"./_core\":180,\"./_iterators\":206,\"./_wks\":249,\"dup\":146}],251:[function(_dereq_,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = _dereq_('./_export');\n\n$export($export.P, 'Array', { fill: _dereq_('./_array-fill') });\n\n_dereq_('./_add-to-unscopables')('fill');\n\n},{\"./_add-to-unscopables\":169,\"./_array-fill\":173,\"./_export\":188}],252:[function(_dereq_,module,exports){\n'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = _dereq_('./_export');\nvar $find = _dereq_('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_dereq_('./_add-to-unscopables')(KEY);\n\n},{\"./_add-to-unscopables\":169,\"./_array-methods\":175,\"./_export\":188}],253:[function(_dereq_,module,exports){\narguments[4][149][0].apply(exports,arguments)\n},{\"./_create-property\":181,\"./_ctx\":182,\"./_export\":188,\"./_is-array-iter\":198,\"./_iter-call\":201,\"./_iter-detect\":204,\"./_to-length\":240,\"./_to-object\":241,\"./core.get-iterator-method\":250,\"dup\":149}],254:[function(_dereq_,module,exports){\narguments[4][150][0].apply(exports,arguments)\n},{\"./_add-to-unscopables\":169,\"./_iter-define\":203,\"./_iter-step\":205,\"./_iterators\":206,\"./_to-iobject\":239,\"dup\":150}],255:[function(_dereq_,module,exports){\narguments[4][151][0].apply(exports,arguments)\n},{\"./_export\":188,\"./_object-assign\":211,\"dup\":151}],256:[function(_dereq_,module,exports){\n'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = _dereq_('./_classof');\nvar test = {};\ntest[_dereq_('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n _dereq_('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n\n},{\"./_classof\":178,\"./_redefine\":227,\"./_wks\":249}],257:[function(_dereq_,module,exports){\narguments[4][158][0].apply(exports,arguments)\n},{\"./_a-function\":168,\"./_an-instance\":170,\"./_classof\":178,\"./_core\":180,\"./_ctx\":182,\"./_export\":188,\"./_for-of\":190,\"./_global\":191,\"./_is-object\":200,\"./_iter-detect\":204,\"./_library\":207,\"./_microtask\":209,\"./_new-promise-capability\":210,\"./_perform\":223,\"./_promise-resolve\":224,\"./_redefine-all\":226,\"./_set-species\":228,\"./_set-to-string-tag\":229,\"./_species-constructor\":232,\"./_task\":235,\"./_wks\":249,\"dup\":158}],258:[function(_dereq_,module,exports){\narguments[4][159][0].apply(exports,arguments)\n},{\"./_iter-define\":203,\"./_string-at\":233,\"dup\":159}],259:[function(_dereq_,module,exports){\nvar $export = _dereq_('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: _dereq_('./_string-repeat')\n});\n\n},{\"./_export\":188,\"./_string-repeat\":234}],260:[function(_dereq_,module,exports){\narguments[4][160][0].apply(exports,arguments)\n},{\"./_an-object\":171,\"./_descriptors\":184,\"./_enum-keys\":187,\"./_export\":188,\"./_fails\":189,\"./_global\":191,\"./_has\":192,\"./_hide\":193,\"./_is-array\":199,\"./_is-object\":200,\"./_library\":207,\"./_meta\":208,\"./_object-create\":212,\"./_object-dp\":213,\"./_object-gopd\":215,\"./_object-gopn\":217,\"./_object-gopn-ext\":216,\"./_object-gops\":218,\"./_object-keys\":221,\"./_object-pie\":222,\"./_property-desc\":225,\"./_redefine\":227,\"./_set-to-string-tag\":229,\"./_shared\":231,\"./_to-iobject\":239,\"./_to-primitive\":242,\"./_uid\":246,\"./_wks\":249,\"./_wks-define\":247,\"./_wks-ext\":248,\"dup\":160}],261:[function(_dereq_,module,exports){\n_dereq_('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"./_typed-array\":243}],262:[function(_dereq_,module,exports){\narguments[4][163][0].apply(exports,arguments)\n},{\"./_core\":180,\"./_export\":188,\"./_global\":191,\"./_promise-resolve\":224,\"./_species-constructor\":232,\"dup\":163}],263:[function(_dereq_,module,exports){\narguments[4][164][0].apply(exports,arguments)\n},{\"./_export\":188,\"./_new-promise-capability\":210,\"./_perform\":223,\"dup\":164}],264:[function(_dereq_,module,exports){\narguments[4][165][0].apply(exports,arguments)\n},{\"./_wks-define\":247,\"dup\":165}],265:[function(_dereq_,module,exports){\narguments[4][166][0].apply(exports,arguments)\n},{\"./_wks-define\":247,\"dup\":166}],266:[function(_dereq_,module,exports){\nvar $iterators = _dereq_('./es6.array.iterator');\nvar getKeys = _dereq_('./_object-keys');\nvar redefine = _dereq_('./_redefine');\nvar global = _dereq_('./_global');\nvar hide = _dereq_('./_hide');\nvar Iterators = _dereq_('./_iterators');\nvar wks = _dereq_('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n\n},{\"./_global\":191,\"./_hide\":193,\"./_iterators\":206,\"./_object-keys\":221,\"./_redefine\":227,\"./_wks\":249,\"./es6.array.iterator\":254}],267:[function(_dereq_,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = _dereq_('../package.json').version;\nelliptic.utils = _dereq_('./elliptic/utils');\nelliptic.rand = _dereq_('brorand');\nelliptic.curve = _dereq_('./elliptic/curve');\nelliptic.curves = _dereq_('./elliptic/curves');\n\n// Protocols\nelliptic.ec = _dereq_('./elliptic/ec');\nelliptic.eddsa = _dereq_('./elliptic/eddsa');\n\n},{\"../package.json\":282,\"./elliptic/curve\":270,\"./elliptic/curves\":273,\"./elliptic/ec\":274,\"./elliptic/eddsa\":277,\"./elliptic/utils\":281,\"brorand\":45}],268:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n\n},{\"../../elliptic\":267,\"bn.js\":44}],269:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = _dereq_('../curve');\nvar elliptic = _dereq_('../../elliptic');\nvar BN = _dereq_('bn.js');\nvar inherits = _dereq_('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n\n},{\"../../elliptic\":267,\"../curve\":270,\"bn.js\":44,\"inherits\":298}],270:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = _dereq_('./base');\ncurve.short = _dereq_('./short');\ncurve.mont = _dereq_('./mont');\ncurve.edwards = _dereq_('./edwards');\n\n},{\"./base\":268,\"./edwards\":269,\"./mont\":271,\"./short\":272}],271:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = _dereq_('../curve');\nvar BN = _dereq_('bn.js');\nvar inherits = _dereq_('inherits');\nvar Base = curve.base;\n\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n // Note: this implementation is according to the original paper\n // by P. Montgomery, NOT the one by D. J. Bernstein.\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n var bytes = utils.toArray(bytes, enc);\n\n // TODO Curve448\n // Montgomery curve points must be represented in the compressed format\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (bytes.length === 33 && bytes[0] === 0x40)\n bytes = bytes.slice(1, 33).reverse(); // point must be little-endian\n if (bytes.length !== 32)\n throw new Error('Unknown point compression format');\n return this.point(bytes, 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n\n // Note: the output should always be little-endian\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (compact) {\n return [ 0x40 ].concat(this.getX().toArray('le', len));\n } else {\n return this.getX().toArray('be', len);\n }\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n\n},{\"../../elliptic\":267,\"../curve\":270,\"bn.js\":44,\"inherits\":298}],272:[function(_dereq_,module,exports){\n'use strict';\n\nvar curve = _dereq_('../curve');\nvar elliptic = _dereq_('../../elliptic');\nvar BN = _dereq_('bn.js');\nvar inherits = _dereq_('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\n},{\"../../elliptic\":267,\"../curve\":270,\"bn.js\":44,\"inherits\":298}],273:[function(_dereq_,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = _dereq_('hash.js');\nvar elliptic = _dereq_('../elliptic');\n\nvar assert = elliptic.utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new elliptic.curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new elliptic.curve.edwards(options);\n else if (options.type === 'mont')\n this.curve = new elliptic.curve.mont(options);\n else throw new Error('Unknown curve type.');\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, n*G != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\n// https://tools.ietf.org/html/rfc7748#section-4.1\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n cofactor: '8',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n cofactor: '8',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.4\ndefineCurve('brainpoolP256r1', {\n type: 'short',\n prime: null,\n p: 'A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 2013481D 1F6E5377',\n a: '7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C E94A4B44 F330B5D9',\n b: '26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 6BCCDC18 FF8C07B6',\n n: 'A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 901E0E82 974856A7',\n hash: hash.sha256, // or 384, or 512\n gRed: false,\n g: [\n '8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262',\n '547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.6\ndefineCurve('brainpoolP384r1', {\n type: 'short',\n prime: null,\n p: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 12B1DA19 7FB71123' +\n 'ACD3A729 901D1A71 87470013 3107EC53',\n a: '7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 139165EF BA91F90F' +\n '8AA5814A 503AD4EB 04A8C7DD 22CE2826',\n b: '04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 2E880EA5 3EEB62D5' +\n '7CB43902 95DBC994 3AB78696 FA504C11',\n n: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 1F166E6C AC0425A7' +\n 'CF3AB6AF 6B7FC310 3B883202 E9046565',\n hash: hash.sha384, // or 512\n gRed: false,\n g: [\n '1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10' +\n 'E8E826E03436D646AAEF87B2E247D4AF1E',\n '8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129' +\n '280E4646217791811142820341263C5315'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.7\ndefineCurve('brainpoolP512r1', {\n type: 'short',\n prime: null,\n p: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330871' +\n '7D4D9B00 9BC66842 AECDA12A E6A380E6 2881FF2F 2D82C685 28AA6056 583A48F3',\n a: '7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 A83441CA EA9863BC' +\n '2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA',\n b: '3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7' +\n '2BF2C7B9 E7C1AC4D 77FC94CA DC083E67 984050B7 5EBAE5DD 2809BD63 8016F723',\n n: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330870' +\n '553E5C41 4CA92619 41866119 7FAC1047 1DB1D381 085DDADD B5879682 9CA90069',\n hash: hash.sha512,\n gRed: false,\n g: [\n '81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D009' +\n '8EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822',\n '7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F81' +\n '11B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892'\n ]\n});\n\n// https://en.bitcoin.it/wiki/Secp256k1\nvar pre;\ntry {\n pre = _dereq_('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n\n},{\"../elliptic\":267,\"./precomputed/secp256k1\":280,\"hash.js\":284}],274:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar HmacDRBG = _dereq_('hmac-drbg');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = _dereq_('./key');\nvar Signature = _dereq_('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = elliptic.curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof elliptic.curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n // Key generation for curve25519 is simpler\n if (this.curve.type === 'mont') {\n var priv = new BN(drbg.generate(32));\n return this.keyFromPrivate(priv);\n }\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../../elliptic\":267,\"./key\":275,\"./signature\":276,\"bn.js\":44,\"hmac-drbg\":296}],275:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\n// TODO: should not validate for X25519\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc, compact) {\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // For Curve25519/Curve448 we have a specific procedure.\n // TODO Curve448\n if (this.ec.curve.type === 'mont') {\n var one = this.ec.curve.one;\n var mask = one.ushln(255 - 3).sub(one).ushln(3);\n this.priv = this.priv.or(one.ushln(255 - 1));\n this.priv = this.priv.and(mask);\n } else\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n var x = pub.mul(this.priv).getX();\n var len = x.byteLength();\n\n // Note: this is not ideal, but the RFC's are unclear\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (this.ec.curve.type === 'mont') {\n return x.toArray('le', len);\n } else {\n return x.toArray('be', len);\n }\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../../elliptic\":267,\"bn.js\":44}],276:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\n\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n\n},{\"../../elliptic\":267,\"bn.js\":44}],277:[function(_dereq_,module,exports){\n'use strict';\n\nvar hash = _dereq_('hash.js');\nvar HmacDRBG = _dereq_('hmac-drbg');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = _dereq_('./key');\nvar Signature = _dereq_('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n var curve = elliptic.curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.curve.n.toArray()\n });\n\n return this.keyFromSecret(drbg.generate(32));\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n\n},{\"../../elliptic\":267,\"./key\":278,\"./signature\":279,\"hash.js\":284,\"hmac-drbg\":296}],278:[function(_dereq_,module,exports){\n'use strict';\n\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n if (params.hasOwnProperty('secret'))\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else {\n this._pubBytes = parseBytes(params.pub);\n if (this._pubBytes && this._pubBytes.length === 33 &&\n this._pubBytes[0] === 0x40)\n this._pubBytes = this._pubBytes.slice(1, 33);\n if (this._pubBytes && this._pubBytes.length !== 32)\n throw new Error('Unknown point compression format');\n }\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n // https://tools.ietf.org/html/rfc8032#section-5.1.5\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc, compact) {\n return utils.encode((compact ? [ 0x40 ] : []).concat(this.pubBytes()), enc);\n};\n\nmodule.exports = KeyPair;\n\n},{\"../../elliptic\":267}],279:[function(_dereq_,module,exports){\n'use strict';\n\nvar BN = _dereq_('bn.js');\nvar elliptic = _dereq_('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n\n},{\"../../elliptic\":267,\"bn.js\":44}],280:[function(_dereq_,module,exports){\nmodule.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n\n},{}],281:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = _dereq_('bn.js');\nvar minAssert = _dereq_('minimalistic-assert');\nvar minUtils = _dereq_('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":44,\"minimalistic-assert\":299,\"minimalistic-crypto-utils\":300}],282:[function(_dereq_,module,exports){\nmodule.exports={\n \"_from\": \"github:openpgpjs/elliptic\",\n \"_id\": \"elliptic@6.4.0\",\n \"_inBundle\": false,\n \"_location\": \"/elliptic\",\n \"_phantomChildren\": {},\n \"_requested\": {\n \"type\": \"git\",\n \"raw\": \"elliptic@github:openpgpjs/elliptic\",\n \"name\": \"elliptic\",\n \"escapedName\": \"elliptic\",\n \"rawSpec\": \"github:openpgpjs/elliptic\",\n \"saveSpec\": \"github:openpgpjs/elliptic\",\n \"fetchSpec\": null,\n \"gitCommittish\": null\n },\n \"_requiredBy\": [\n \"/\"\n ],\n \"_resolved\": \"github:openpgpjs/elliptic#e187e706e11fa51bcd20e46e5119054be4e2a4a6\",\n \"_spec\": \"elliptic@github:openpgpjs/elliptic\",\n \"_where\": \"/Users/sunny/Desktop/Protonmail/openpgpjs\",\n \"author\": {\n \"name\": \"Fedor Indutny\",\n \"email\": \"fedor@indutny.com\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/indutny/elliptic/issues\"\n },\n \"bundleDependencies\": false,\n \"dependencies\": {\n \"bn.js\": \"^4.4.0\",\n \"brorand\": \"^1.0.1\",\n \"hash.js\": \"^1.0.0\",\n \"hmac-drbg\": \"^1.0.0\",\n \"inherits\": \"^2.0.1\",\n \"minimalistic-assert\": \"^1.0.0\",\n \"minimalistic-crypto-utils\": \"^1.0.0\"\n },\n \"deprecated\": false,\n \"description\": \"EC cryptography\",\n \"devDependencies\": {\n \"brfs\": \"^1.4.3\",\n \"coveralls\": \"^2.11.3\",\n \"grunt\": \"^0.4.5\",\n \"grunt-browserify\": \"^5.0.0\",\n \"grunt-cli\": \"^1.2.0\",\n \"grunt-contrib-connect\": \"^1.0.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"^1.0.1\",\n \"grunt-mocha-istanbul\": \"^3.0.1\",\n \"grunt-saucelabs\": \"^8.6.2\",\n \"istanbul\": \"^0.4.2\",\n \"jscs\": \"^2.9.0\",\n \"jshint\": \"^2.6.0\",\n \"mocha\": \"^2.1.0\"\n },\n \"files\": [\n \"lib\"\n ],\n \"homepage\": \"https://github.com/indutny/elliptic\",\n \"keywords\": [\n \"EC\",\n \"Elliptic\",\n \"curve\",\n \"Cryptography\"\n ],\n \"license\": \"MIT\",\n \"main\": \"lib/elliptic.js\",\n \"name\": \"elliptic\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n },\n \"scripts\": {\n \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n \"lint\": \"npm run jscs && npm run jshint\",\n \"test\": \"npm run lint && npm run unit\",\n \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n \"version\": \"grunt dist && git add dist/\"\n },\n \"version\": \"6.4.0\"\n}\n\n},{}],283:[function(_dereq_,module,exports){\n\n// email-addresses.js - RFC 5322 email address parser\n// v 3.0.1\n//\n// http://tools.ietf.org/html/rfc5322\n//\n// This library does not validate email addresses.\n// emailAddresses attempts to parse addresses using the (fairly liberal)\n// grammar specified in RFC 5322.\n//\n// email-addresses returns {\n// ast: <an abstract syntax tree based on rfc5322>,\n// addresses: [{\n// node: <node in ast for this address>,\n// name: <display-name>,\n// address: <addr-spec>,\n// local: <local-part>,\n// domain: <domain>\n// }, ...]\n// }\n//\n// emailAddresses.parseOneAddress and emailAddresses.parseAddressList\n// work as you might expect. Try it out.\n//\n// Many thanks to Dominic Sayers and his documentation on the is_email function,\n// http://code.google.com/p/isemail/ , which helped greatly in writing this parser.\n\n(function (global) {\n\"use strict\";\n\nfunction parse5322(opts) {\n\n // tokenizing functions\n\n function inStr() { return pos < len; }\n function curTok() { return parseString[pos]; }\n function getPos() { return pos; }\n function setPos(i) { pos = i; }\n function nextTok() { pos += 1; }\n function initialize() {\n pos = 0;\n len = parseString.length;\n }\n\n // parser helper functions\n\n function o(name, value) {\n return {\n name: name,\n tokens: value || \"\",\n semantic: value || \"\",\n children: []\n };\n }\n\n function wrap(name, ast) {\n var n;\n if (ast === null) { return null; }\n n = o(name);\n n.tokens = ast.tokens;\n n.semantic = ast.semantic;\n n.children.push(ast);\n return n;\n }\n\n function add(parent, child) {\n if (child !== null) {\n parent.tokens += child.tokens;\n parent.semantic += child.semantic;\n }\n parent.children.push(child);\n return parent;\n }\n\n function compareToken(fxnCompare) {\n var tok;\n if (!inStr()) { return null; }\n tok = curTok();\n if (fxnCompare(tok)) {\n nextTok();\n return o('token', tok);\n }\n return null;\n }\n\n function literal(lit) {\n return function literalFunc() {\n return wrap('literal', compareToken(function (tok) {\n return tok === lit;\n }));\n };\n }\n\n function and() {\n var args = arguments;\n return function andFunc() {\n var i, s, result, start;\n start = getPos();\n s = o('and');\n for (i = 0; i < args.length; i += 1) {\n result = args[i]();\n if (result === null) {\n setPos(start);\n return null;\n }\n add(s, result);\n }\n return s;\n };\n }\n\n function or() {\n var args = arguments;\n return function orFunc() {\n var i, result, start;\n start = getPos();\n for (i = 0; i < args.length; i += 1) {\n result = args[i]();\n if (result !== null) {\n return result;\n }\n setPos(start);\n }\n return null;\n };\n }\n\n function opt(prod) {\n return function optFunc() {\n var result, start;\n start = getPos();\n result = prod();\n if (result !== null) {\n return result;\n }\n else {\n setPos(start);\n return o('opt');\n }\n };\n }\n\n function invis(prod) {\n return function invisFunc() {\n var result = prod();\n if (result !== null) {\n result.semantic = \"\";\n }\n return result;\n };\n }\n\n function colwsp(prod) {\n return function collapseSemanticWhitespace() {\n var result = prod();\n if (result !== null && result.semantic.length > 0) {\n result.semantic = \" \";\n }\n return result;\n };\n }\n\n function star(prod, minimum) {\n return function starFunc() {\n var s, result, count, start, min;\n start = getPos();\n s = o('star');\n count = 0;\n min = minimum === undefined ? 0 : minimum;\n while ((result = prod()) !== null) {\n count = count + 1;\n add(s, result);\n }\n if (count >= min) {\n return s;\n }\n else {\n setPos(start);\n return null;\n }\n };\n }\n\n // One expects names to get normalized like this:\n // \" First Last \" -> \"First Last\"\n // \"First Last\" -> \"First Last\"\n // \"First Last\" -> \"First Last\"\n function collapseWhitespace(s) {\n return s.replace(/([ \\t]|\\r\\n)+/g, ' ').replace(/^\\s*/, '').replace(/\\s*$/, '');\n }\n\n // UTF-8 pseudo-production (RFC 6532)\n // RFC 6532 extends RFC 5322 productions to include UTF-8\n // using the following productions:\n // UTF8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4\n // UTF8-2 = <Defined in Section 4 of RFC3629>\n // UTF8-3 = <Defined in Section 4 of RFC3629>\n // UTF8-4 = <Defined in Section 4 of RFC3629>\n //\n // For reference, the extended RFC 5322 productions are:\n // VCHAR =/ UTF8-non-ascii\n // ctext =/ UTF8-non-ascii\n // atext =/ UTF8-non-ascii\n // qtext =/ UTF8-non-ascii\n // dtext =/ UTF8-non-ascii\n function isUTF8NonAscii(tok) {\n // In JavaScript, we just deal directly with Unicode code points,\n // so we aren't checking individual bytes for UTF-8 encoding.\n // Just check that the character is non-ascii.\n return tok.charCodeAt(0) >= 128;\n }\n\n\n // common productions (RFC 5234)\n // http://tools.ietf.org/html/rfc5234\n // B.1. Core Rules\n\n // CR = %x0D\n // ; carriage return\n function cr() { return wrap('cr', literal('\\r')()); }\n\n // CRLF = CR LF\n // ; Internet standard newline\n function crlf() { return wrap('crlf', and(cr, lf)()); }\n\n // DQUOTE = %x22\n // ; \" (Double Quote)\n function dquote() { return wrap('dquote', literal('\"')()); }\n\n // HTAB = %x09\n // ; horizontal tab\n function htab() { return wrap('htab', literal('\\t')()); }\n\n // LF = %x0A\n // ; linefeed\n function lf() { return wrap('lf', literal('\\n')()); }\n\n // SP = %x20\n function sp() { return wrap('sp', literal(' ')()); }\n\n // VCHAR = %x21-7E\n // ; visible (printing) characters\n function vchar() {\n return wrap('vchar', compareToken(function vcharFunc(tok) {\n var code = tok.charCodeAt(0);\n var accept = (0x21 <= code && code <= 0x7E);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n }));\n }\n\n // WSP = SP / HTAB\n // ; white space\n function wsp() { return wrap('wsp', or(sp, htab)()); }\n\n\n // email productions (RFC 5322)\n // http://tools.ietf.org/html/rfc5322\n // 3.2.1. Quoted characters\n\n // quoted-pair = (\"\\\" (VCHAR / WSP)) / obs-qp\n function quotedPair() {\n var qp = wrap('quoted-pair',\n or(\n and(literal('\\\\'), or(vchar, wsp)),\n obsQP\n )());\n if (qp === null) { return null; }\n // a quoted pair will be two characters, and the \"\\\" character\n // should be semantically \"invisible\" (RFC 5322 3.2.1)\n qp.semantic = qp.semantic[1];\n return qp;\n }\n\n // 3.2.2. Folding White Space and Comments\n\n // FWS = ([*WSP CRLF] 1*WSP) / obs-FWS\n function fws() {\n return wrap('fws', or(\n obsFws,\n and(\n opt(and(\n star(wsp),\n invis(crlf)\n )),\n star(wsp, 1)\n )\n )());\n }\n\n // ctext = %d33-39 / ; Printable US-ASCII\n // %d42-91 / ; characters not including\n // %d93-126 / ; \"(\", \")\", or \"\\\"\n // obs-ctext\n function ctext() {\n return wrap('ctext', or(\n function ctextFunc1() {\n return compareToken(function ctextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 <= code && code <= 39) ||\n (42 <= code && code <= 91) ||\n (93 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsCtext\n )());\n }\n\n // ccontent = ctext / quoted-pair / comment\n function ccontent() {\n return wrap('ccontent', or(ctext, quotedPair, comment)());\n }\n\n // comment = \"(\" *([FWS] ccontent) [FWS] \")\"\n function comment() {\n return wrap('comment', and(\n literal('('),\n star(and(opt(fws), ccontent)),\n opt(fws),\n literal(')')\n )());\n }\n\n // CFWS = (1*([FWS] comment) [FWS]) / FWS\n function cfws() {\n return wrap('cfws', or(\n and(\n star(\n and(opt(fws), comment),\n 1\n ),\n opt(fws)\n ),\n fws\n )());\n }\n\n // 3.2.3. Atom\n\n //atext = ALPHA / DIGIT / ; Printable US-ASCII\n // \"!\" / \"#\" / ; characters not including\n // \"$\" / \"%\" / ; specials. Used for atoms.\n // \"&\" / \"'\" /\n // \"*\" / \"+\" /\n // \"-\" / \"/\" /\n // \"=\" / \"?\" /\n // \"^\" / \"_\" /\n // \"`\" / \"{\" /\n // \"|\" / \"}\" /\n // \"~\"\n function atext() {\n return wrap('atext', compareToken(function atextFunc(tok) {\n var accept =\n ('a' <= tok && tok <= 'z') ||\n ('A' <= tok && tok <= 'Z') ||\n ('0' <= tok && tok <= '9') ||\n (['!', '#', '$', '%', '&', '\\'', '*', '+', '-', '/',\n '=', '?', '^', '_', '`', '{', '|', '}', '~'].indexOf(tok) >= 0);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n }));\n }\n\n // atom = [CFWS] 1*atext [CFWS]\n function atom() {\n return wrap('atom', and(colwsp(opt(cfws)), star(atext, 1), colwsp(opt(cfws)))());\n }\n\n // dot-atom-text = 1*atext *(\".\" 1*atext)\n function dotAtomText() {\n var s, maybeText;\n s = wrap('dot-atom-text', star(atext, 1)());\n if (s === null) { return s; }\n maybeText = star(and(literal('.'), star(atext, 1)))();\n if (maybeText !== null) {\n add(s, maybeText);\n }\n return s;\n }\n\n // dot-atom = [CFWS] dot-atom-text [CFWS]\n function dotAtom() {\n return wrap('dot-atom', and(invis(opt(cfws)), dotAtomText, invis(opt(cfws)))());\n }\n\n // 3.2.4. Quoted Strings\n\n // qtext = %d33 / ; Printable US-ASCII\n // %d35-91 / ; characters not including\n // %d93-126 / ; \"\\\" or the quote character\n // obs-qtext\n function qtext() {\n return wrap('qtext', or(\n function qtextFunc1() {\n return compareToken(function qtextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 === code) ||\n (35 <= code && code <= 91) ||\n (93 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsQtext\n )());\n }\n\n // qcontent = qtext / quoted-pair\n function qcontent() {\n return wrap('qcontent', or(qtext, quotedPair)());\n }\n\n // quoted-string = [CFWS]\n // DQUOTE *([FWS] qcontent) [FWS] DQUOTE\n // [CFWS]\n function quotedString() {\n return wrap('quoted-string', and(\n invis(opt(cfws)),\n invis(dquote), star(and(opt(colwsp(fws)), qcontent)), opt(invis(fws)), invis(dquote),\n invis(opt(cfws))\n )());\n }\n\n // 3.2.5 Miscellaneous Tokens\n\n // word = atom / quoted-string\n function word() {\n return wrap('word', or(atom, quotedString)());\n }\n\n // phrase = 1*word / obs-phrase\n function phrase() {\n return wrap('phrase', or(obsPhrase, star(word, 1))());\n }\n\n // 3.4. Address Specification\n // address = mailbox / group\n function address() {\n return wrap('address', or(mailbox, group)());\n }\n\n // mailbox = name-addr / addr-spec\n function mailbox() {\n return wrap('mailbox', or(nameAddr, addrSpec)());\n }\n\n // name-addr = [display-name] angle-addr\n function nameAddr() {\n return wrap('name-addr', and(opt(displayName), angleAddr)());\n }\n\n // angle-addr = [CFWS] \"<\" addr-spec \">\" [CFWS] /\n // obs-angle-addr\n function angleAddr() {\n return wrap('angle-addr', or(\n and(\n invis(opt(cfws)),\n literal('<'),\n addrSpec,\n literal('>'),\n invis(opt(cfws))\n ),\n obsAngleAddr\n )());\n }\n\n // group = display-name \":\" [group-list] \";\" [CFWS]\n function group() {\n return wrap('group', and(\n displayName,\n literal(':'),\n opt(groupList),\n literal(';'),\n invis(opt(cfws))\n )());\n }\n\n // display-name = phrase\n function displayName() {\n return wrap('display-name', function phraseFixedSemantic() {\n var result = phrase();\n if (result !== null) {\n result.semantic = collapseWhitespace(result.semantic);\n }\n return result;\n }());\n }\n\n // mailbox-list = (mailbox *(\",\" mailbox)) / obs-mbox-list\n function mailboxList() {\n return wrap('mailbox-list', or(\n and(\n mailbox,\n star(and(literal(','), mailbox))\n ),\n obsMboxList\n )());\n }\n\n // address-list = (address *(\",\" address)) / obs-addr-list\n function addressList() {\n return wrap('address-list', or(\n and(\n address,\n star(and(literal(','), address))\n ),\n obsAddrList\n )());\n }\n\n // group-list = mailbox-list / CFWS / obs-group-list\n function groupList() {\n return wrap('group-list', or(\n mailboxList,\n invis(cfws),\n obsGroupList\n )());\n }\n\n // 3.4.1 Addr-Spec Specification\n\n // local-part = dot-atom / quoted-string / obs-local-part\n function localPart() {\n // note: quoted-string, dotAtom are proper subsets of obs-local-part\n // so we really just have to look for obsLocalPart, if we don't care about the exact parse tree\n return wrap('local-part', or(obsLocalPart, dotAtom, quotedString)());\n }\n\n // dtext = %d33-90 / ; Printable US-ASCII\n // %d94-126 / ; characters not including\n // obs-dtext ; \"[\", \"]\", or \"\\\"\n function dtext() {\n return wrap('dtext', or(\n function dtextFunc1() {\n return compareToken(function dtextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 <= code && code <= 90) ||\n (94 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsDtext\n )()\n );\n }\n\n // domain-literal = [CFWS] \"[\" *([FWS] dtext) [FWS] \"]\" [CFWS]\n function domainLiteral() {\n return wrap('domain-literal', and(\n invis(opt(cfws)),\n literal('['),\n star(and(opt(fws), dtext)),\n opt(fws),\n literal(']'),\n invis(opt(cfws))\n )());\n }\n\n // domain = dot-atom / domain-literal / obs-domain\n function domain() {\n return wrap('domain', function domainCheckTLD() {\n var result = or(obsDomain, dotAtom, domainLiteral)();\n if (opts.rejectTLD) {\n if (result.semantic.indexOf('.') < 0) {\n return null;\n }\n }\n // strip all whitespace from domains\n if (result) {\n result.semantic = result.semantic.replace(/\\s+/g, '');\n }\n return result;\n }());\n }\n\n // addr-spec = local-part \"@\" domain\n function addrSpec() {\n return wrap('addr-spec', and(\n localPart, literal('@'), domain\n )());\n }\n\n // 3.6.2 Originator Fields\n // Below we only parse the field body, not the name of the field\n // like \"From:\", \"Sender:\", or \"Reply-To:\". Other libraries that\n // parse email headers can parse those and defer to these productions\n // for the \"RFC 5322\" part.\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // from = \"From:\" (mailbox-list / address-list) CRLF\n function fromSpec() {\n return wrap('from', or(\n mailboxList,\n addressList\n )());\n }\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // sender = \"Sender:\" (mailbox / address) CRLF\n function senderSpec() {\n return wrap('sender', or(\n mailbox,\n address\n )());\n }\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // reply-to = \"Reply-To:\" address-list CRLF\n function replyToSpec() {\n return wrap('reply-to', addressList());\n }\n\n // 4.1. Miscellaneous Obsolete Tokens\n\n // obs-NO-WS-CTL = %d1-8 / ; US-ASCII control\n // %d11 / ; characters that do not\n // %d12 / ; include the carriage\n // %d14-31 / ; return, line feed, and\n // %d127 ; white space characters\n function obsNoWsCtl() {\n return opts.strict ? null : wrap('obs-NO-WS-CTL', compareToken(function (tok) {\n var code = tok.charCodeAt(0);\n return ((1 <= code && code <= 8) ||\n (11 === code || 12 === code) ||\n (14 <= code && code <= 31) ||\n (127 === code));\n }));\n }\n\n // obs-ctext = obs-NO-WS-CTL\n function obsCtext() { return opts.strict ? null : wrap('obs-ctext', obsNoWsCtl()); }\n\n // obs-qtext = obs-NO-WS-CTL\n function obsQtext() { return opts.strict ? null : wrap('obs-qtext', obsNoWsCtl()); }\n\n // obs-qp = \"\\\" (%d0 / obs-NO-WS-CTL / LF / CR)\n function obsQP() {\n return opts.strict ? null : wrap('obs-qp', and(\n literal('\\\\'),\n or(literal('\\0'), obsNoWsCtl, lf, cr)\n )());\n }\n\n // obs-phrase = word *(word / \".\" / CFWS)\n function obsPhrase() {\n return opts.strict ? null : wrap('obs-phrase', and(\n word,\n star(or(word, literal('.'), colwsp(cfws)))\n )());\n }\n\n // 4.2. Obsolete Folding White Space\n\n // NOTE: read the errata http://www.rfc-editor.org/errata_search.php?rfc=5322&eid=1908\n // obs-FWS = 1*([CRLF] WSP)\n function obsFws() {\n return opts.strict ? null : wrap('obs-FWS', star(\n and(invis(opt(crlf)), wsp),\n 1\n )());\n }\n\n // 4.4. Obsolete Addressing\n\n // obs-angle-addr = [CFWS] \"<\" obs-route addr-spec \">\" [CFWS]\n function obsAngleAddr() {\n return opts.strict ? null : wrap('obs-angle-addr', and(\n invis(opt(cfws)),\n literal('<'),\n obsRoute,\n addrSpec,\n literal('>'),\n invis(opt(cfws))\n )());\n }\n\n // obs-route = obs-domain-list \":\"\n function obsRoute() {\n return opts.strict ? null : wrap('obs-route', and(\n obsDomainList,\n literal(':')\n )());\n }\n\n // obs-domain-list = *(CFWS / \",\") \"@\" domain\n // *(\",\" [CFWS] [\"@\" domain])\n function obsDomainList() {\n return opts.strict ? null : wrap('obs-domain-list', and(\n star(or(invis(cfws), literal(','))),\n literal('@'),\n domain,\n star(and(\n literal(','),\n invis(opt(cfws)),\n opt(and(literal('@'), domain))\n ))\n )());\n }\n\n // obs-mbox-list = *([CFWS] \",\") mailbox *(\",\" [mailbox / CFWS])\n function obsMboxList() {\n return opts.strict ? null : wrap('obs-mbox-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n )),\n mailbox,\n star(and(\n literal(','),\n opt(and(\n mailbox,\n invis(cfws)\n ))\n ))\n )());\n }\n\n // obs-addr-list = *([CFWS] \",\") address *(\",\" [address / CFWS])\n function obsAddrList() {\n return opts.strict ? null : wrap('obs-addr-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n )),\n address,\n star(and(\n literal(','),\n opt(and(\n address,\n invis(cfws)\n ))\n ))\n )());\n }\n\n // obs-group-list = 1*([CFWS] \",\") [CFWS]\n function obsGroupList() {\n return opts.strict ? null : wrap('obs-group-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n ), 1),\n invis(opt(cfws))\n )());\n }\n\n // obs-local-part = word *(\".\" word)\n function obsLocalPart() {\n return opts.strict ? null : wrap('obs-local-part', and(word, star(and(literal('.'), word)))());\n }\n\n // obs-domain = atom *(\".\" atom)\n function obsDomain() {\n return opts.strict ? null : wrap('obs-domain', and(atom, star(and(literal('.'), atom)))());\n }\n\n // obs-dtext = obs-NO-WS-CTL / quoted-pair\n function obsDtext() {\n return opts.strict ? null : wrap('obs-dtext', or(obsNoWsCtl, quotedPair)());\n }\n\n /////////////////////////////////////////////////////\n\n // ast analysis\n\n function findNode(name, root) {\n var i, stack, node;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name === name) {\n return node;\n }\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n return null;\n }\n\n function findAllNodes(name, root) {\n var i, stack, node, result;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n result = [];\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name === name) {\n result.push(node);\n }\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n return result;\n }\n\n function findAllNodesNoChildren(names, root) {\n var i, stack, node, result, namesLookup;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n result = [];\n namesLookup = {};\n for (i = 0; i < names.length; i += 1) {\n namesLookup[names[i]] = true;\n }\n\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name in namesLookup) {\n result.push(node);\n // don't look at children (hence findAllNodesNoChildren)\n } else {\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n }\n return result;\n }\n\n function giveResult(ast) {\n var addresses, groupsAndMailboxes, i, groupOrMailbox, result;\n if (ast === null) {\n return null;\n }\n addresses = [];\n\n // An address is a 'group' (i.e. a list of mailboxes) or a 'mailbox'.\n groupsAndMailboxes = findAllNodesNoChildren(['group', 'mailbox'], ast);\n for (i = 0; i < groupsAndMailboxes.length; i += 1) {\n groupOrMailbox = groupsAndMailboxes[i];\n if (groupOrMailbox.name === 'group') {\n addresses.push(giveResultGroup(groupOrMailbox));\n } else if (groupOrMailbox.name === 'mailbox') {\n addresses.push(giveResultMailbox(groupOrMailbox));\n }\n }\n\n result = {\n ast: ast,\n addresses: addresses,\n };\n if (opts.simple) {\n result = simplifyResult(result);\n }\n if (opts.oneResult) {\n return oneResult(result);\n }\n if (opts.simple) {\n return result && result.addresses;\n } else {\n return result;\n }\n }\n\n function giveResultGroup(group) {\n var i;\n var groupName = findNode('display-name', group);\n var groupResultMailboxes = [];\n var mailboxes = findAllNodesNoChildren(['mailbox'], group);\n for (i = 0; i < mailboxes.length; i += 1) {\n groupResultMailboxes.push(giveResultMailbox(mailboxes[i]));\n }\n return {\n node: group,\n parts: {\n name: groupName,\n },\n type: group.name, // 'group'\n name: grabSemantic(groupName),\n addresses: groupResultMailboxes,\n };\n }\n\n function giveResultMailbox(mailbox) {\n var name = findNode('display-name', mailbox);\n var aspec = findNode('addr-spec', mailbox);\n var comments = findAllNodes('cfws', mailbox);\n\n var local = findNode('local-part', aspec);\n var domain = findNode('domain', aspec);\n return {\n node: mailbox,\n parts: {\n name: name,\n address: aspec,\n local: local,\n domain: domain,\n comments: comments\n },\n type: mailbox.name, // 'mailbox'\n name: grabSemantic(name),\n address: grabSemantic(aspec),\n local: grabSemantic(local),\n domain: grabSemantic(domain),\n groupName: grabSemantic(mailbox.groupName),\n };\n }\n\n function grabSemantic(n) {\n return n !== null && n !== undefined ? n.semantic : null;\n }\n\n function simplifyResult(result) {\n var i;\n if (result && result.addresses) {\n for (i = 0; i < result.addresses.length; i += 1) {\n delete result.addresses[i].node;\n }\n }\n return result;\n }\n\n function oneResult(result) {\n if (!result) { return null; }\n if (!opts.partial && result.addresses.length > 1) { return null; }\n return result.addresses && result.addresses[0];\n }\n\n /////////////////////////////////////////////////////\n\n var parseString, pos, len, parsed, startProduction;\n\n opts = handleOpts(opts, {});\n if (opts === null) { return null; }\n\n parseString = opts.input;\n\n startProduction = {\n 'address': address,\n 'address-list': addressList,\n 'angle-addr': angleAddr,\n 'from': fromSpec,\n 'group': group,\n 'mailbox': mailbox,\n 'mailbox-list': mailboxList,\n 'reply-to': replyToSpec,\n 'sender': senderSpec,\n }[opts.startAt] || addressList;\n\n if (!opts.strict) {\n initialize();\n opts.strict = true;\n parsed = startProduction(parseString);\n if (opts.partial || !inStr()) {\n return giveResult(parsed);\n }\n opts.strict = false;\n }\n\n initialize();\n parsed = startProduction(parseString);\n if (!opts.partial && inStr()) { return null; }\n return giveResult(parsed);\n}\n\nfunction parseOneAddressSimple(opts) {\n return parse5322(handleOpts(opts, {\n oneResult: true,\n rfc6532: true,\n simple: true,\n startAt: 'address-list',\n }));\n}\n\nfunction parseAddressListSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'address-list',\n }));\n}\n\nfunction parseFromSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'from',\n }));\n}\n\nfunction parseSenderSimple(opts) {\n return parse5322(handleOpts(opts, {\n oneResult: true,\n rfc6532: true,\n simple: true,\n startAt: 'sender',\n }));\n}\n\nfunction parseReplyToSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'reply-to',\n }));\n}\n\nfunction handleOpts(opts, defs) {\n function isString(str) {\n return Object.prototype.toString.call(str) === '[object String]';\n }\n\n function isObject(o) {\n return o === Object(o);\n }\n\n function isNullUndef(o) {\n return o === null || o === undefined;\n }\n\n var defaults, o;\n\n if (isString(opts)) {\n opts = { input: opts };\n } else if (!isObject(opts)) {\n return null;\n }\n\n if (!isString(opts.input)) { return null; }\n if (!defs) { return null; }\n\n defaults = {\n oneResult: false,\n partial: false,\n rejectTLD: false,\n rfc6532: false,\n simple: false,\n startAt: 'address-list',\n strict: false,\n };\n\n for (o in defaults) {\n if (isNullUndef(opts[o])) {\n opts[o] = !isNullUndef(defs[o]) ? defs[o] : defaults[o];\n }\n }\n return opts;\n}\n\nparse5322.parseOneAddress = parseOneAddressSimple;\nparse5322.parseAddressList = parseAddressListSimple;\nparse5322.parseFrom = parseFromSimple;\nparse5322.parseSender = parseSenderSimple;\nparse5322.parseReplyTo = parseReplyToSimple;\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = parse5322;\n} else {\n global.emailAddresses = parse5322;\n}\n\n}(this));\n\n},{}],284:[function(_dereq_,module,exports){\nvar hash = exports;\n\nhash.utils = _dereq_('./hash/utils');\nhash.common = _dereq_('./hash/common');\nhash.sha = _dereq_('./hash/sha');\nhash.ripemd = _dereq_('./hash/ripemd');\nhash.hmac = _dereq_('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":285,\"./hash/hmac\":286,\"./hash/ripemd\":287,\"./hash/sha\":288,\"./hash/utils\":295}],285:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar assert = _dereq_('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n\n},{\"./utils\":295,\"minimalistic-assert\":299}],286:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar assert = _dereq_('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n\n},{\"./utils\":295,\"minimalistic-assert\":299}],287:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar common = _dereq_('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n\n},{\"./common\":285,\"./utils\":295}],288:[function(_dereq_,module,exports){\n'use strict';\n\nexports.sha1 = _dereq_('./sha/1');\nexports.sha224 = _dereq_('./sha/224');\nexports.sha256 = _dereq_('./sha/256');\nexports.sha384 = _dereq_('./sha/384');\nexports.sha512 = _dereq_('./sha/512');\n\n},{\"./sha/1\":289,\"./sha/224\":290,\"./sha/256\":291,\"./sha/384\":292,\"./sha/512\":293}],289:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar common = _dereq_('../common');\nvar shaCommon = _dereq_('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":285,\"../utils\":295,\"./common\":294}],290:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar SHA256 = _dereq_('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n\n},{\"../utils\":295,\"./256\":291}],291:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar common = _dereq_('../common');\nvar shaCommon = _dereq_('./common');\nvar assert = _dereq_('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":285,\"../utils\":295,\"./common\":294,\"minimalistic-assert\":299}],292:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\n\nvar SHA512 = _dereq_('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n\n},{\"../utils\":295,\"./512\":293}],293:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar common = _dereq_('../common');\nvar assert = _dereq_('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\n},{\"../common\":285,\"../utils\":295,\"minimalistic-assert\":299}],294:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":295}],295:[function(_dereq_,module,exports){\n'use strict';\n\nvar assert = _dereq_('minimalistic-assert');\nvar inherits = _dereq_('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":298,\"minimalistic-assert\":299}],296:[function(_dereq_,module,exports){\n'use strict';\n\nvar hash = _dereq_('hash.js');\nvar utils = _dereq_('minimalistic-crypto-utils');\nvar assert = _dereq_('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n\n},{\"hash.js\":284,\"minimalistic-assert\":299,\"minimalistic-crypto-utils\":300}],297:[function(_dereq_,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n},{}],298:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],299:[function(_dereq_,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],300:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n\n},{}],301:[function(_dereq_,module,exports){\n// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = _dereq_('./lib/utils/common').assign;\n\nvar deflate = _dereq_('./lib/deflate');\nvar inflate = _dereq_('./lib/inflate');\nvar constants = _dereq_('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n\n},{\"./lib/deflate\":302,\"./lib/inflate\":303,\"./lib/utils/common\":304,\"./lib/zlib/constants\":307}],302:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_deflate = _dereq_('./zlib/deflate');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar msg = _dereq_('./zlib/messages');\nvar ZStream = _dereq_('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n\n},{\"./utils/common\":304,\"./utils/strings\":305,\"./zlib/deflate\":309,\"./zlib/messages\":314,\"./zlib/zstream\":316}],303:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_inflate = _dereq_('./zlib/inflate');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar c = _dereq_('./zlib/constants');\nvar msg = _dereq_('./zlib/messages');\nvar ZStream = _dereq_('./zlib/zstream');\nvar GZheader = _dereq_('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n var dict;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n // Convert data if needed\n if (typeof dictionary === 'string') {\n dict = strings.string2buf(dictionary);\n } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(dictionary);\n } else {\n dict = dictionary;\n }\n\n status = zlib_inflate.inflateSetDictionary(this.strm, dict);\n\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n\n},{\"./utils/common\":304,\"./utils/strings\":305,\"./zlib/constants\":307,\"./zlib/gzheader\":310,\"./zlib/inflate\":312,\"./zlib/messages\":314,\"./zlib/zstream\":316}],304:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n\n},{}],305:[function(_dereq_,module,exports){\n// String encode/decode helpers\n'use strict';\n\n\nvar utils = _dereq_('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n},{\"./common\":304}],306:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n},{}],307:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n},{}],308:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n},{}],309:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\nvar trees = _dereq_('./trees');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar msg = _dereq_('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n},{\"../utils/common\":304,\"./adler32\":306,\"./crc32\":308,\"./messages\":314,\"./trees\":315}],310:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n\n},{}],311:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n},{}],312:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar inflate_fast = _dereq_('./inffast');\nvar inflate_table = _dereq_('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n},{\"../utils/common\":304,\"./adler32\":306,\"./crc32\":308,\"./inffast\":311,\"./inftrees\":313}],313:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n},{\"../utils/common\":304}],314:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n},{}],315:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = _dereq_('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n},{\"../utils/common\":304}],316:[function(_dereq_,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n},{}],317:[function(_dereq_,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],318:[function(_dereq_,module,exports){\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() { return this })() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = _dereq_(\"./runtime\");\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n\n},{\"./runtime\":319}],319:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() { return this })() || Function(\"return this\")()\n);\n\n},{}],320:[function(_dereq_,module,exports){\n(function (global){\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Rusha = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],2:[function(_dereq_,module,exports){\n(function (global){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = str.charCodeAt(start + 3);\n case 1:\n H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n case 2:\n H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n case 3:\n H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n case 2:\n H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n case 1:\n H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = buf[start + 3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[start];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[start + j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[start + j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[start + j];\n }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n switch (om) {\n case 0:\n H8[off] = buf[3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[0];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[j];\n }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n if (typeof data === 'string') {\n return convStr(data, H8, H32, start, len, off);\n }\n if (data instanceof Array) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (global.Buffer && global.Buffer.isBuffer(data)) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (data instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n }\n if (data.buffer instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n }\n if (data instanceof Blob) {\n return convBlob(data, H8, H32, start, len, off);\n }\n throw new Error('Unsupported data type.');\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$1186, foreign$1187, heap$1188) {\n 'use asm';\n var H$1189 = new stdlib$1186.Int32Array(heap$1188);\n function hash$1190(k$1191, x$1192) {\n // k in bytes\n k$1191 = k$1191 | 0;\n x$1192 = x$1192 | 0;\n var i$1193 = 0, j$1194 = 0, y0$1195 = 0, z0$1196 = 0, y1$1197 = 0, z1$1198 = 0, y2$1199 = 0, z2$1200 = 0, y3$1201 = 0, z3$1202 = 0, y4$1203 = 0, z4$1204 = 0, t0$1205 = 0, t1$1206 = 0;\n y0$1195 = H$1189[x$1192 + 320 >> 2] | 0;\n y1$1197 = H$1189[x$1192 + 324 >> 2] | 0;\n y2$1199 = H$1189[x$1192 + 328 >> 2] | 0;\n y3$1201 = H$1189[x$1192 + 332 >> 2] | 0;\n y4$1203 = H$1189[x$1192 + 336 >> 2] | 0;\n for (i$1193 = 0; (i$1193 | 0) < (k$1191 | 0); i$1193 = i$1193 + 64 | 0) {\n z0$1196 = y0$1195;\n z1$1198 = y1$1197;\n z2$1200 = y2$1199;\n z3$1202 = y3$1201;\n z4$1204 = y4$1203;\n for (j$1194 = 0; (j$1194 | 0) < 64; j$1194 = j$1194 + 4 | 0) {\n t1$1206 = H$1189[i$1193 + j$1194 >> 2] | 0;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 & y2$1199 | ~y1$1197 & y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) + 1518500249 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[k$1191 + j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 64 | 0; (j$1194 | 0) < (k$1191 + 80 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 & y2$1199 | ~y1$1197 & y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) + 1518500249 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 80 | 0; (j$1194 | 0) < (k$1191 + 160 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 ^ y2$1199 ^ y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) + 1859775393 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 160 | 0; (j$1194 | 0) < (k$1191 + 240 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 & y2$1199 | y1$1197 & y3$1201 | y2$1199 & y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) - 1894007588 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n for (j$1194 = k$1191 + 240 | 0; (j$1194 | 0) < (k$1191 + 320 | 0); j$1194 = j$1194 + 4 | 0) {\n t1$1206 = (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) << 1 | (H$1189[j$1194 - 12 >> 2] ^ H$1189[j$1194 - 32 >> 2] ^ H$1189[j$1194 - 56 >> 2] ^ H$1189[j$1194 - 64 >> 2]) >>> 31;\n t0$1205 = ((y0$1195 << 5 | y0$1195 >>> 27) + (y1$1197 ^ y2$1199 ^ y3$1201) | 0) + ((t1$1206 + y4$1203 | 0) - 899497514 | 0) | 0;\n y4$1203 = y3$1201;\n y3$1201 = y2$1199;\n y2$1199 = y1$1197 << 30 | y1$1197 >>> 2;\n y1$1197 = y0$1195;\n y0$1195 = t0$1205;\n H$1189[j$1194 >> 2] = t1$1206;\n }\n y0$1195 = y0$1195 + z0$1196 | 0;\n y1$1197 = y1$1197 + z1$1198 | 0;\n y2$1199 = y2$1199 + z2$1200 | 0;\n y3$1201 = y3$1201 + z3$1202 | 0;\n y4$1203 = y4$1203 + z4$1204 | 0;\n }\n H$1189[x$1192 + 320 >> 2] = y0$1195;\n H$1189[x$1192 + 324 >> 2] = y1$1197;\n H$1189[x$1192 + 328 >> 2] = y2$1199;\n H$1189[x$1192 + 332 >> 2] = y3$1201;\n H$1189[x$1192 + 336 >> 2] = y4$1203;\n }\n return { hash: hash$1190 };\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Rusha = _dereq_('./rusha');\n\nvar _require = _dereq_('./utils'),\n toHex = _require.toHex;\n\nvar Hash = function () {\n function Hash() {\n _classCallCheck(this, Hash);\n\n this._rusha = new Rusha();\n this._rusha.resetState();\n }\n\n Hash.prototype.update = function update(data) {\n this._rusha.append(data);\n return this;\n };\n\n Hash.prototype.digest = function digest(encoding) {\n var digest = this._rusha.rawEnd().buffer;\n if (!encoding) {\n return digest;\n }\n if (encoding === 'hex') {\n return toHex(digest);\n }\n throw new Error('unsupported digest encoding');\n };\n\n return Hash;\n}();\n\nmodule.exports = function () {\n return new Hash();\n};\n\n},{\"./rusha\":6,\"./utils\":7}],5:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nvar webworkify = _dereq_('webworkify');\n\nvar Rusha = _dereq_('./rusha');\nvar createHash = _dereq_('./hash');\nvar runWorker = _dereq_('./worker');\n\nvar _require = _dereq_('./utils'),\n isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n var worker = webworkify(_dereq_('./worker'));\n var terminate = worker.terminate;\n worker.terminate = function () {\n URL.revokeObjectURL(worker.objectURL);\n terminate.call(worker);\n };\n return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n},{\"./hash\":4,\"./rusha\":6,\"./utils\":7,\"./worker\":8,\"webworkify\":1}],6:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RushaCore = _dereq_('./core.sjs');\n\nvar _require = _dereq_('./utils'),\n toHex = _require.toHex,\n ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = _dereq_('./conv');\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n for (len += 9; len % 64 > 0; len += 1) {}\n return len;\n};\n\nvar padZeroes = function (bin, len) {\n var h8 = new Uint8Array(bin.buffer);\n var om = len % 4,\n align = len - om;\n switch (om) {\n case 0:\n h8[align + 3] = 0;\n case 1:\n h8[align + 2] = 0;\n case 2:\n h8[align + 1] = 0;\n case 3:\n h8[align + 0] = 0;\n }\n for (var i = (len >> 2) + 1; i < bin.length; i++) {\n bin[i] = 0;\n }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n // To support msgLen >= 2 GiB, use a float division when computing the\n // high 32-bits of the big-endian message length in bits.\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n var out = new Int32Array(5);\n var arr = new DataView(out.buffer);\n arr.setInt32(0, io[0], false);\n arr.setInt32(4, io[1], false);\n arr.setInt32(8, io[2], false);\n arr.setInt32(12, io[3], false);\n arr.setInt32(16, io[4], false);\n return out;\n};\n\nvar Rusha = function () {\n function Rusha(chunkSize) {\n _classCallCheck(this, Rusha);\n\n chunkSize = chunkSize || 64 * 1024;\n if (chunkSize % 64 > 0) {\n throw new Error('Chunk size must be a multiple of 128 bit');\n }\n this._offset = 0;\n this._maxChunkLen = chunkSize;\n this._padMaxChunkLen = padlen(chunkSize);\n // The size of the heap is the sum of:\n // 1. The padded input message size\n // 2. The extended space the algorithm needs (320 byte)\n // 3. The 160 bit state the algoritm uses\n this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n this._h32 = new Int32Array(this._heap);\n this._h8 = new Int8Array(this._heap);\n this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n }\n\n Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n this._offset = 0;\n var io = new Int32Array(heap, padMsgLen + 320, 5);\n io[0] = 1732584193;\n io[1] = -271733879;\n io[2] = -1732584194;\n io[3] = 271733878;\n io[4] = -1009589776;\n };\n\n Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n var padChunkLen = padlen(chunkLen);\n var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n padZeroes(view, chunkLen);\n padData(view, chunkLen, msgLen);\n return padChunkLen;\n };\n\n Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n };\n\n Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n var padChunkLen = chunkLen;\n this._write(data, chunkOffset, chunkLen);\n if (finalize) {\n padChunkLen = this._padChunk(chunkLen, msgLen);\n }\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n };\n\n Rusha.prototype.rawDigest = function rawDigest(str) {\n var msgLen = str.byteLength || str.length || str.size || 0;\n this._initState(this._heap, this._padMaxChunkLen);\n var chunkOffset = 0,\n chunkLen = this._maxChunkLen;\n for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n }\n this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n return getRawDigest(this._heap, this._padMaxChunkLen);\n };\n\n Rusha.prototype.digest = function digest(str) {\n return toHex(this.rawDigest(str).buffer);\n };\n\n Rusha.prototype.digestFromString = function digestFromString(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.resetState = function resetState() {\n this._initState(this._heap, this._padMaxChunkLen);\n return this;\n };\n\n Rusha.prototype.append = function append(chunk) {\n var chunkOffset = 0;\n var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n var turnOffset = this._offset % this._maxChunkLen;\n var inputLen = void 0;\n\n this._offset += chunkLen;\n while (chunkOffset < chunkLen) {\n inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n this._write(chunk, chunkOffset, inputLen, turnOffset);\n turnOffset += inputLen;\n chunkOffset += inputLen;\n if (turnOffset === this._maxChunkLen) {\n this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n turnOffset = 0;\n }\n }\n return this;\n };\n\n Rusha.prototype.getState = function getState() {\n var turnOffset = this._offset % this._maxChunkLen;\n var heap = void 0;\n if (!turnOffset) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n } else {\n heap = this._heap.slice(0);\n }\n return {\n offset: this._offset,\n heap: heap\n };\n };\n\n Rusha.prototype.setState = function setState(state) {\n this._offset = state.offset;\n if (state.heap.byteLength === 20) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n io.set(new Int32Array(state.heap));\n } else {\n this._h32.set(new Int32Array(state.heap));\n }\n return this;\n };\n\n Rusha.prototype.rawEnd = function rawEnd() {\n var msgLen = this._offset;\n var chunkLen = msgLen % this._maxChunkLen;\n var padChunkLen = this._padChunk(chunkLen, msgLen);\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n var result = getRawDigest(this._heap, this._padMaxChunkLen);\n this._initState(this._heap, this._padMaxChunkLen);\n return result;\n };\n\n Rusha.prototype.end = function end() {\n return toHex(this.rawEnd().buffer);\n };\n\n return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n},{\"./conv\":2,\"./core.sjs\":3,\"./utils\":7}],7:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n var binarray = new Uint8Array(arrayBuffer);\n var res = new Array(arrayBuffer.byteLength);\n for (var _i = 0; _i < res.length; _i++) {\n res[_i] = precomputedHex[binarray[_i]];\n }\n return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n // The asm.js spec says:\n // The heap object's byteLength must be either\n // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n // Also, byteLengths smaller than 2^16 are deprecated.\n var p = 0;\n // If v is smaller than 2^16, the smallest possible solution\n // is 2^16.\n if (v <= 65536) return 65536;\n // If v < 2^24, we round up to 2^n,\n // otherwise we round up to 2^24 * n.\n if (v < 16777216) {\n for (p = 1; p < v; p = p << 1) {}\n } else {\n for (p = 16777216; p < v; p += 16777216) {}\n }\n return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n // Detects whether we run inside a dedicated worker or not.\n //\n // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n // has a bug where it only supports `WorkerGlobalScope`.\n //\n // Therefore, we consider us as running inside a dedicated worker\n // when we are running inside a worker, but not in a shared or service worker.\n //\n // When new types of workers are introduced, we will need to adjust this code.\n return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n},{}],8:[function(_dereq_,module,exports){\n\"use strict\";\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n var Rusha = _dereq_('./rusha');\n\n var hashData = function (hasher, data, cb) {\n try {\n return cb(null, hasher.digest(data));\n } catch (e) {\n return cb(e);\n }\n };\n\n var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n var reader = new self.FileReader();\n reader.onloadend = function onloadend() {\n if (reader.error) {\n return cb(reader.error);\n }\n var buffer = reader.result;\n readTotal += reader.result.byteLength;\n try {\n hasher.append(buffer);\n } catch (e) {\n cb(e);\n return;\n }\n if (readTotal < file.size) {\n hashFile(hasher, readTotal, blockSize, file, cb);\n } else {\n cb(null, hasher.end());\n }\n };\n reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n };\n\n var workerBehaviourEnabled = true;\n\n self.onmessage = function (event) {\n if (!workerBehaviourEnabled) {\n return;\n }\n\n var data = event.data.data,\n file = event.data.file,\n id = event.data.id;\n if (typeof id === 'undefined') return;\n if (!file && !data) return;\n var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n var hasher = new Rusha(blockSize);\n hasher.resetState();\n var done = function (err, hash) {\n if (!err) {\n self.postMessage({ id: id, hash: hash });\n } else {\n self.postMessage({ id: id, error: err.name });\n }\n };\n if (data) hashData(hasher, data, done);\n if (file) hashFile(hasher, 0, blockSize, file, done);\n };\n\n return function () {\n workerBehaviourEnabled = false;\n };\n};\n\n},{\"./rusha\":6}]},{},[5])(5)\n});\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],321:[function(_dereq_,module,exports){\n(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n},{}],322:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nexports.CleartextMessage = CleartextMessage;\nexports.readArmored = readArmored;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _signature = _dereq_('./signature');\n\nvar _message = _dereq_('./message');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP cleartext signed message.\n * See {@link https://tools.ietf.org/html/rfc4880#section-7}\n * @param {String} text The cleartext of the signed message\n * @param {module:signature.Signature} signature The detached signature or an empty signature for unsigned messages\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires enums\n * @requires util\n * @requires packet\n * @requires signature\n * @module cleartext\n */\n\nfunction CleartextMessage(text, signature) {\n if (!(this instanceof CleartextMessage)) {\n return new CleartextMessage(text, signature);\n }\n // normalize EOL to canonical form <CR><LF>\n this.text = _util2.default.canonicalizeEOL(_util2.default.removeTrailingSpaces(text));\n if (signature && !(signature instanceof _signature.Signature)) {\n throw new Error('Invalid signature input');\n }\n this.signature = signature || new _signature.Signature(new _packet2.default.List());\n}\n\n/**\n * Returns the key IDs of the keys that signed the cleartext message\n * @returns {Array<module:type/keyid>} array of keyid objects\n */\nCleartextMessage.prototype.getSigningKeyIds = function () {\n var keyIds = [];\n var signatureList = this.signature.packets;\n signatureList.forEach(function (packet) {\n keyIds.push(packet.issuerKeyId);\n });\n return keyIds;\n};\n\n/**\n * Sign the cleartext message\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature\n * @param {Date} date (optional) The creation time of the signature that should be created\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:cleartext.CleartextMessage>} new cleartext message with signed content\n * @async\n */\nCleartextMessage.prototype.sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(privateKeys) {\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = CleartextMessage;\n _context.t1 = this.text;\n _context.next = 4;\n return this.signDetached(privateKeys, signature, date, userId);\n\n case 4:\n _context.t2 = _context.sent;\n return _context.abrupt('return', new _context.t0(_context.t1, _context.t2));\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Sign the cleartext message\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature\n * @param {Date} date (optional) The creation time of the signature that should be created\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:signature.Signature>} new detached signature of message content\n * @async\n */\nCleartextMessage.prototype.signDetached = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(privateKeys) {\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var literalDataPacket;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n literalDataPacket = new _packet2.default.Literal();\n\n literalDataPacket.setText(this.text);\n\n _context2.t0 = _signature.Signature;\n _context2.next = 5;\n return (0, _message.createSignaturePackets)(literalDataPacket, privateKeys, signature, date, userId);\n\n case 5:\n _context2.t1 = _context2.sent;\n return _context2.abrupt('return', new _context2.t0(_context2.t1));\n\n case 7:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x5) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Verify signatures of cleartext signed message\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date (optional) Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<{keyid: module:type/keyid, valid: Boolean}>>} list of signer's keyid and validity of signature\n * @async\n */\nCleartextMessage.prototype.verify = function (keys) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n return this.verifyDetached(this.signature, keys, date);\n};\n\n/**\n * Verify signatures of cleartext signed message\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date (optional) Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<{keyid: module:type/keyid, valid: Boolean}>>} list of signer's keyid and validity of signature\n * @async\n */\nCleartextMessage.prototype.verifyDetached = function (signature, keys) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n var signatureList = signature.packets;\n var literalDataPacket = new _packet2.default.Literal();\n // we assume that cleartext signature is generated based on UTF8 cleartext\n literalDataPacket.setText(this.text);\n return (0, _message.createVerificationObjects)(signatureList, [literalDataPacket], keys, date);\n};\n\n/**\n * Get cleartext\n * @returns {String} cleartext of message\n */\nCleartextMessage.prototype.getText = function () {\n // normalize end of line to \\n\n return _util2.default.nativeEOL(this.text);\n};\n\n/**\n * Returns ASCII armored text of cleartext signed message\n * @returns {String} ASCII armor\n */\nCleartextMessage.prototype.armor = function () {\n var hashes = this.signature.packets.map(function (packet) {\n return _enums2.default.read(_enums2.default.hash, packet.hashAlgorithm).toUpperCase();\n });\n hashes = hashes.filter(function (item, i, ar) {\n return ar.indexOf(item) === i;\n });\n var body = {\n hash: hashes.join(),\n text: this.text,\n data: this.signature.packets.write()\n };\n return _armor2.default.encode(_enums2.default.armor.signed, body);\n};\n\n/**\n * reads an OpenPGP cleartext signed message and returns a CleartextMessage object\n * @param {String} armoredText text to be parsed\n * @returns {module:cleartext.CleartextMessage} new cleartext message object\n * @static\n */\nfunction readArmored(armoredText) {\n var input = _armor2.default.decode(armoredText);\n if (input.type !== _enums2.default.armor.signed) {\n throw new Error('No cleartext signed message.');\n }\n var packetlist = new _packet2.default.List();\n packetlist.read(input.data);\n verifyHeaders(input.headers, packetlist);\n var signature = new _signature.Signature(packetlist);\n return new CleartextMessage(input.text, signature);\n}\n\n/**\n * Compare hash algorithm specified in the armor header with signatures\n * @param {Array<String>} headers Armor headers\n * @param {module:packet.List} packetlist The packetlist with signature packets\n * @private\n */\nfunction verifyHeaders(headers, packetlist) {\n var checkHashAlgos = function checkHashAlgos(hashAlgos) {\n var check = function check(packet) {\n return function (algo) {\n return packet.hashAlgorithm === algo;\n };\n };\n\n for (var i = 0; i < packetlist.length; i++) {\n if (packetlist[i].tag === _enums2.default.packet.signature && !hashAlgos.some(check(packetlist[i]))) {\n return false;\n }\n }\n return true;\n };\n\n var oneHeader = null;\n var hashAlgos = [];\n headers.forEach(function (header) {\n oneHeader = header.match(/Hash: (.+)/); // get header value\n if (oneHeader) {\n oneHeader = oneHeader[1].replace(/\\s/g, ''); // remove whitespace\n oneHeader = oneHeader.split(',');\n oneHeader = oneHeader.map(function (hash) {\n hash = hash.toLowerCase();\n try {\n return _enums2.default.write(_enums2.default.hash, hash);\n } catch (e) {\n throw new Error('Unknown hash algorithm in armor header: ' + hash);\n }\n });\n hashAlgos = hashAlgos.concat(oneHeader);\n } else {\n throw new Error('Only \"Hash\" header allowed in cleartext signed message');\n }\n });\n\n if (!hashAlgos.length && !checkHashAlgos([_enums2.default.hash.md5])) {\n throw new Error('If no \"Hash\" header in cleartext signed message, then only MD5 signatures allowed');\n } else if (hashAlgos.length && !checkHashAlgos(hashAlgos)) {\n throw new Error('Hash algorithm mismatch in armor header and signature');\n }\n}\n\n},{\"./encoding/armor\":357,\"./enums\":359,\"./message\":366,\"./packet\":371,\"./signature\":391,\"./util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],323:[function(_dereq_,module,exports){\n(function (process,Buffer){\n\"use strict\";\n\nvar _typeof2 = _dereq_(\"babel-runtime/helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _create = _dereq_(\"babel-runtime/core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _freeze = _dereq_(\"babel-runtime/core-js/object/freeze\");\n\nvar _freeze2 = _interopRequireDefault(_freeze);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar freeze, Stream, BitStream, Util, BWT, CRC32, HuffmanAllocator, Bzip2;freeze = function () {\n return _freeze2.default ? _freeze2.default : function (e) {\n return e;\n };\n}(), Stream = function (e) {\n var t = function t() {};return t.prototype.readByte = function () {\n var e = [0];return 0 === this.read(e, 0, 1) ? (this._eof = !0, -1) : e[0];\n }, t.prototype.read = function (e, t, r) {\n for (var n, i = 0; i < r;) {\n if (-1 === (n = this.readByte())) {\n this._eof = !0;break;\n }e[t + i++] = n;\n }return i;\n }, t.prototype.eof = function () {\n return !!this._eof;\n }, t.prototype.seek = function (e) {\n throw new Error(\"Stream is not seekable.\");\n }, t.prototype.tell = function () {\n throw new Error(\"Stream is not seekable.\");\n }, t.prototype.writeByte = function (e) {\n var t = [e];this.write(t, 0, 1);\n }, t.prototype.write = function (e, t, r) {\n var n;for (n = 0; n < r; n++) {\n this.writeByte(e[t + n]);\n }return r;\n }, t.prototype.flush = function () {}, t.EOF = -1, e(t);\n}(freeze), BitStream = function (e) {\n var t = function t(_t) {\n (function () {\n var r = 256;this.readBit = function () {\n if (0 == (255 & r)) {\n var n = _t.readByte();if (n === e.EOF) return this._eof = !0, n;r = n << 1 | 1;\n }var i = 256 & r ? 1 : 0;return r <<= 1, i;\n }, this.seekBit = function (e) {\n var t = e >>> 3,\n r = e - 8 * t;this.seek(t), this._eof = !1, this.readBits(r);\n }, this.tellBit = function () {\n for (var e = 8 * _t.tell(), n = r; 0 != (255 & n);) {\n e--, n <<= 1;\n }return e;\n }, this.readByte = function () {\n return 0 == (255 & r) ? _t.readByte() : this.readBits(8);\n }, this.seek = function (e) {\n _t.seek(e), r = 256;\n };\n }).call(this), function () {\n var e = 1;this.writeBit = function (r) {\n e <<= 1, r && (e |= 1), 256 & e && (_t.writeByte(255 & e), e = 1);\n }, this.writeByte = function (r) {\n 1 === e ? _t.writeByte(r) : _t.writeBits(8, r);\n }, this.flush = function () {\n for (; 1 !== e;) {\n this.writeBit(0);\n }_t.flush && _t.flush();\n };\n }.call(this);\n };return t.EOF = e.EOF, t.prototype = (0, _create2.default)(e.prototype), t.prototype.readBits = function (e) {\n var t,\n r = 0;if (e > 31) return (r = 65536 * this.readBits(e - 16)) + this.readBits(16);for (t = 0; t < e; t++) {\n r <<= 1, this.readBit() > 0 && r++;\n }return r;\n }, t.prototype.writeBits = function (e, t) {\n if (e > 32) {\n var r = 65535 & t,\n n = (t - r) / 65536;return this.writeBits(e - 16, n), void this.writeBits(16, r);\n }var i;for (i = e - 1; i >= 0; i--) {\n this.writeBit(t >>> i & 1);\n }\n }, t;\n}(Stream), Util = function (e, t) {\n var r = (0, _create2.default)(null),\n n = t.EOF;r.coerceInputStream = function (e, r) {\n if (\"readByte\" in e) {\n if (r && !(\"read\" in e)) {\n var i = e;e = new t(), e.readByte = function () {\n var e = i.readByte();return e === n && (this._eof = !0), e;\n }, \"size\" in i && (e.size = i.size), \"seek\" in i && (e.seek = function (e) {\n i.seek(e), this._eof = !1;\n }), \"tell\" in i && (e.tell = i.tell.bind(i));\n }\n } else {\n var o = e;e = new t(), e.size = o.length, e.pos = 0, e.readByte = function () {\n return this.pos >= this.size ? n : o[this.pos++];\n }, e.read = function (e, t, r) {\n for (var n = 0; n < r && this.pos < o.length;) {\n e[t++] = o[this.pos++], n++;\n }return n;\n }, e.seek = function (e) {\n this.pos = e;\n }, e.tell = function () {\n return this.pos;\n }, e.eof = function () {\n return this.pos >= o.length;\n };\n }return e;\n };var i = function i(e, t) {\n this.buffer = e, this.resizeOk = t, this.pos = 0;\n };i.prototype = (0, _create2.default)(t.prototype), i.prototype.writeByte = function (e) {\n if (this.resizeOk && this.pos >= this.buffer.length) {\n var t = r.makeU8Buffer(2 * this.buffer.length);t.set(this.buffer), this.buffer = t;\n }this.buffer[this.pos++] = e;\n }, i.prototype.getBuffer = function () {\n if (this.pos !== this.buffer.length) {\n if (!this.resizeOk) throw new TypeError(\"outputsize does not match decoded input\");var e = r.makeU8Buffer(this.pos);e.set(this.buffer.subarray(0, this.pos)), this.buffer = e;\n }return this.buffer;\n }, r.coerceOutputStream = function (e, t) {\n var n = { stream: e, retval: e };if (e) {\n if (\"object\" == (typeof e === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(e)) && \"writeByte\" in e) return n;\"number\" == typeof t ? (console.assert(t >= 0), n.stream = new i(r.makeU8Buffer(t), !1)) : n.stream = new i(e, !1);\n } else n.stream = new i(r.makeU8Buffer(16384), !0);return Object.defineProperty(n, \"retval\", { get: n.stream.getBuffer.bind(n.stream) }), n;\n }, r.compressFileHelper = function (e, t, n) {\n return function (i, o, f) {\n i = r.coerceInputStream(i);var a = r.coerceOutputStream(o, o);o = a.stream;var u;for (u = 0; u < e.length; u++) {\n o.writeByte(e.charCodeAt(u));\n }var s;if (s = \"size\" in i && i.size >= 0 ? i.size : -1, n) {\n var c = r.coerceOutputStream([]);for (r.writeUnsignedNumber(c.stream, s + 1), c = c.retval, u = 0; u < c.length - 1; u++) {\n o.writeByte(c[u]);\n }n = c[c.length - 1];\n } else r.writeUnsignedNumber(o, s + 1);return t(i, o, s, f, n), a.retval;\n };\n }, r.decompressFileHelper = function (e, t) {\n return function (n, i) {\n n = r.coerceInputStream(n);var o;for (o = 0; o < e.length; o++) {\n if (e.charCodeAt(o) !== n.readByte()) throw new Error(\"Bad magic\");\n }var f = r.readUnsignedNumber(n) - 1,\n a = r.coerceOutputStream(i, f);return i = a.stream, t(n, i, f), a.retval;\n };\n }, r.compressWithModel = function (e, t, r) {\n for (var i = 0; i !== t;) {\n var o = e.readByte();if (o === n) {\n r.encode(256);break;\n }r.encode(o), i++;\n }\n }, r.decompressWithModel = function (e, t, r) {\n for (var n = 0; n !== t;) {\n var i = r.decode();if (256 === i) break;e.writeByte(i), n++;\n }\n }, r.writeUnsignedNumber = function (e, t) {\n console.assert(t >= 0);var r,\n n = [];do {\n n.push(127 & t), t = Math.floor(t / 128);\n } while (0 !== t);for (n[0] |= 128, r = n.length - 1; r >= 0; r--) {\n e.writeByte(n[r]);\n }return e;\n }, r.readUnsignedNumber = function (e) {\n for (var t, r = 0;;) {\n if (128 & (t = e.readByte())) {\n r += 127 & t;break;\n }r = 128 * (r + t);\n }return r;\n };var o = function o(e) {\n for (var t = 0, r = e.length; t < r; t++) {\n e[t] = 0;\n }return e;\n },\n f = function f(e) {\n return o(new Array(e));\n },\n a = function a(e) {\n return e;\n };\"undefined\" != typeof process && Array.prototype.some.call(new Uint32Array(128), function (e) {\n return 0 !== e;\n }) && (a = o), r.makeU8Buffer = \"undefined\" != typeof Uint8Array ? function (e) {\n return a(new Uint8Array(e));\n } : \"undefined\" != typeof Buffer ? function (e) {\n var t = new Buffer(e);return t.fill(0), t;\n } : f, r.makeU16Buffer = \"undefined\" != typeof Uint16Array ? function (e) {\n return a(new Uint16Array(e));\n } : f, r.makeU32Buffer = \"undefined\" != typeof Uint32Array ? function (e) {\n return a(new Uint32Array(e));\n } : f, r.makeS32Buffer = \"undefined\" != typeof Int32Array ? function (e) {\n return a(new Int32Array(e));\n } : f, r.arraycopy = function (e, t) {\n console.assert(e.length >= t.length);for (var r = 0, n = t.length; r < n; r++) {\n e[r] = t[r];\n }return e;\n };var u = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8];console.assert(256 === u.length);var s = r.fls = function (e) {\n return console.assert(e >= 0), e > 4294967295 ? 32 + s(Math.floor(e / 4294967296)) : 0 != (4294901760 & e) ? 0 != (4278190080 & e) ? 24 + u[e >>> 24 & 255] : 16 + u[e >>> 16] : 0 != (65280 & e) ? 8 + u[e >>> 8] : u[e];\n };return r.log2c = function (e) {\n return 0 === e ? -1 : s(e - 1);\n }, e(r);\n}(freeze, Stream), BWT = function (e, t) {\n var r = console.assert.bind(console),\n n = function n(e, t, r, _n) {\n var i;for (i = 0; i < _n; i++) {\n t[i] = 0;\n }for (i = 0; i < r; i++) {\n t[e[i]]++;\n }\n },\n i = function i(e, t, r, n) {\n var i,\n o = 0;if (n) for (i = 0; i < r; i++) {\n o += e[i], t[i] = o;\n } else for (i = 0; i < r; i++) {\n o += e[i], t[i] = o - e[i];\n }\n },\n o = function o(e, t, _o, f, a, u) {\n var s, c, h, l, d;for (_o === f && n(e, _o, a, u), i(_o, f, u, !1), h = a - 1, s = f[d = e[h]], h--, t[s++] = e[h] < d ? ~h : h, c = 0; c < a; c++) {\n (h = t[c]) > 0 ? (r(e[h] >= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(c < s), h--, t[s++] = e[h] < d ? ~h : h, t[c] = 0) : h < 0 && (t[c] = ~h);\n }for (_o === f && n(e, _o, a, u), i(_o, f, u, 1), c = a - 1, s = f[d = 0]; c >= 0; c--) {\n (h = t[c]) > 0 && (r(e[h] <= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(s <= c), h--, t[--s] = e[h] > d ? ~(h + 1) : h, t[c] = 0);\n }\n },\n f = function f(e, t, n, i) {\n var o, f, a, u, s, c, h, l, d, B;for (r(n > 0), o = 0; (a = t[o]) < 0; o++) {\n t[o] = ~a, r(o + 1 < n);\n }if (o < i) for (f = o, o++; r(o < n), !((a = t[o]) < 0 && (t[f++] = ~a, t[o] = 0, f === i)); o++) {}l = e[o = f = n - 1];do {\n d = l;\n } while (--o >= 0 && (l = e[o]) >= d);for (; o >= 0;) {\n do {\n d = l;\n } while (--o >= 0 && (l = e[o]) <= d);if (o >= 0) {\n t[i + (o + 1 >>> 1)] = f - o, f = o + 1;do {\n d = l;\n } while (--o >= 0 && (l = e[o]) >= d);\n }\n }for (o = 0, h = 0, u = n, c = 0; o < i; o++) {\n if (a = t[o], s = t[i + (a >>> 1)], B = !0, s === c && u + s < n) {\n for (f = 0; f < s && e[a + f] === e[u + f];) {\n f++;\n }f === s && (B = !1);\n }B && (h++, u = a, c = s), t[i + (a >>> 1)] = h;\n }return h;\n },\n a = function a(e, t, o, f, _a, u) {\n var s, c, h, l, d;for (o === f && n(e, o, _a, u), i(o, f, u, !1), h = _a - 1, s = f[d = e[h]], t[s++] = h > 0 && e[h - 1] < d ? ~h : h, c = 0; c < _a; c++) {\n h = t[c], t[c] = ~h, h > 0 && (h--, r(e[h] >= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(c < s), t[s++] = h > 0 && e[h - 1] < d ? ~h : h);\n }for (o === f && n(e, o, _a, u), i(o, f, u, !0), c = _a - 1, s = f[d = 0]; c >= 0; c--) {\n (h = t[c]) > 0 ? (h--, r(e[h] <= e[h + 1]), (l = e[h]) !== d && (f[d] = s, s = f[d = l]), r(s <= c), t[--s] = 0 === h || e[h - 1] > d ? ~h : h) : t[c] = ~h;\n }\n },\n u = function u(e, t, o, f, a, _u) {\n var s,\n c,\n h,\n l,\n d,\n B = -1;for (o === f && n(e, o, a, _u), i(o, f, _u, !1), h = a - 1, s = f[d = e[h]], t[s++] = h > 0 && e[h - 1] < d ? ~h : h, c = 0; c < a; c++) {\n (h = t[c]) > 0 ? (h--, r(e[h] >= e[h + 1]), t[c] = ~(l = e[h]), l !== d && (f[d] = s, s = f[d = l]), r(c < s), t[s++] = h > 0 && e[h - 1] < d ? ~h : h) : 0 !== h && (t[c] = ~h);\n }for (o === f && n(e, o, a, _u), i(o, f, _u, !0), c = a - 1, s = f[d = 0]; c >= 0; c--) {\n (h = t[c]) > 0 ? (h--, r(e[h] <= e[h + 1]), t[c] = l = e[h], l !== d && (f[d] = s, s = f[d = l]), r(s <= c), t[--s] = h > 0 && e[h - 1] > d ? ~e[h - 1] : h) : 0 !== h ? t[c] = ~h : B = c;\n }return B;\n },\n s = function s(e, c, h, l, d, B) {\n var p,\n v,\n m,\n w,\n E,\n g,\n _,\n b,\n y,\n R,\n C,\n k,\n T,\n O = 0,\n S = 0;for (d <= 256 ? (p = t.makeS32Buffer(d), d <= h ? (v = c.subarray(l + h - d), S = 1) : (v = t.makeS32Buffer(d), S = 3)) : d <= h ? (p = c.subarray(l + h - d), d <= h - d ? (v = c.subarray(l + h - 2 * d), S = 0) : d <= 1024 ? (v = t.makeS32Buffer(d), S = 2) : (v = p, S = 8)) : (p = v = t.makeS32Buffer(d), S = 12), n(e, p, l, d), i(p, v, d, !0), w = 0; w < l; w++) {\n c[w] = 0;\n }g = -1, w = l - 1, E = l, _ = 0, k = e[l - 1];do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);for (; w >= 0;) {\n do {\n T = k;\n } while (--w >= 0 && (k = e[w]) <= T);if (w >= 0) {\n g >= 0 && (c[g] = E), g = --v[T], E = w, ++_;do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);\n }\n }if (_ > 1 ? (o(e, c, p, v, l, d), R = f(e, c, l, _)) : 1 === _ ? (c[g] = E + 1, R = 1) : R = 0, R < _) {\n for (0 != (4 & S) && (p = null, v = null), 0 != (2 & S) && (v = null), C = l + h - 2 * _, 0 == (13 & S) && (d + R <= C ? C -= d : S |= 8), r(l >>> 1 <= C + _), w = _ + (l >>> 1) - 1, E = 2 * _ + C - 1; _ <= w; w--) {\n 0 !== c[w] && (c[E--] = c[w] - 1);\n }m = c.subarray(_ + C), s(m, c, C, _, R, !1), m = null, w = l - 1, E = 2 * _ - 1, k = e[l - 1];do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);for (; w >= 0;) {\n do {\n T = k;\n } while (--w >= 0 && (k = e[w]) <= T);if (w >= 0) {\n c[E--] = w + 1;do {\n T = k;\n } while (--w >= 0 && (k = e[w]) >= T);\n }\n }for (w = 0; w < _; w++) {\n c[w] = c[_ + c[w]];\n }0 != (4 & S) && (p = v = t.makeS32Buffer(d)), 0 != (2 & S) && (v = t.makeS32Buffer(d));\n }if (0 != (8 & S) && n(e, p, l, d), _ > 1) {\n i(p, v, d, !0), w = _ - 1, E = l, b = c[_ - 1], T = e[b];do {\n for (y = v[k = T]; y < E;) {\n c[--E] = 0;\n }do {\n if (c[--E] = b, --w < 0) break;b = c[w];\n } while ((T = e[b]) === k);\n } while (w >= 0);for (; E > 0;) {\n c[--E] = 0;\n }\n }return B ? O = u(e, c, p, v, l, d) : a(e, c, p, v, l, d), p = null, v = null, O;\n },\n c = (0, _create2.default)(null);return c.suffixsort = function (e, t, n, i) {\n if (r(e && t && e.length >= n && t.length >= n), n <= 1) return 1 === n && (t[0] = 0), 0;if (!i) if (1 === e.BYTES_PER_ELEMENT) i = 256;else {\n if (2 !== e.BYTES_PER_ELEMENT) throw new Error(\"Need to specify alphabetSize\");i = 65536;\n }return r(i > 0), e.BYTES_PER_ELEMENT && r(i <= 1 << 8 * e.BYTES_PER_ELEMENT), s(e, t, 0, n, i, !1);\n }, c.bwtransform = function (e, t, n, i, o) {\n var f, a;if (r(e && t && n), r(e.length >= i && t.length >= i && n.length >= i), i <= 1) return 1 === i && (t[0] = e[0]), i;if (!o) if (1 === e.BYTES_PER_ELEMENT) o = 256;else {\n if (2 !== e.BYTES_PER_ELEMENT) throw new Error(\"Need to specify alphabetSize\");o = 65536;\n }for (r(o > 0), e.BYTES_PER_ELEMENT && r(o <= 1 << 8 * e.BYTES_PER_ELEMENT), a = s(e, n, 0, i, o, !0), t[0] = e[i - 1], f = 0; f < a; f++) {\n t[f + 1] = n[f];\n }for (f += 1; f < i; f++) {\n t[f] = n[f];\n }return a + 1;\n }, c.unbwtransform = function (e, r, n, i, o) {\n var f,\n a,\n u = t.makeU32Buffer(256);for (f = 0; f < 256; f++) {\n u[f] = 0;\n }for (f = 0; f < i; f++) {\n n[f] = u[e[f]]++;\n }for (f = 0, a = 0; f < 256; f++) {\n a += u[f], u[f] = a - u[f];\n }for (f = i - 1, a = 0; f >= 0; f--) {\n a = n[a] + u[r[f] = e[a]], a += a < o ? 1 : 0;\n }u = null;\n }, c.bwtransform2 = function (e, n, i, o) {\n var f,\n a,\n u = 0;if (r(e && n), r(e.length >= i && n.length >= i), i <= 1) return 1 === i && (n[0] = e[0]), 0;if (!o) if (1 === e.BYTES_PER_ELEMENT) o = 256;else {\n if (2 !== e.BYTES_PER_ELEMENT) throw new Error(\"Need to specify alphabetSize\");o = 65536;\n }r(o > 0), e.BYTES_PER_ELEMENT && r(o <= 1 << 8 * e.BYTES_PER_ELEMENT);var c;if ((c = e.length >= 2 * i ? e : o <= 256 ? t.makeU8Buffer(2 * i) : o <= 65536 ? t.makeU16Buffer(2 * i) : t.makeU32Buffer(2 * i)) !== e) for (f = 0; f < i; f++) {\n c[f] = e[f];\n }for (f = 0; f < i; f++) {\n c[i + f] = c[f];\n }var h = t.makeS32Buffer(2 * i);for (s(c, h, 0, 2 * i, o, !1), f = 0, a = 0; f < 2 * i; f++) {\n var l = h[f];l < i && (0 === l && (u = a), --l < 0 && (l = i - 1), n[a++] = e[l]);\n }return r(a === i), u;\n }, e(c);\n}(freeze, Util), CRC32 = function (e) {\n var t = e.arraycopy(e.makeU32Buffer(256), [0, 79764919, 159529838, 222504665, 319059676, 398814059, 445009330, 507990021, 638119352, 583659535, 797628118, 726387553, 890018660, 835552979, 1015980042, 944750013, 1276238704, 1221641927, 1167319070, 1095957929, 1595256236, 1540665371, 1452775106, 1381403509, 1780037320, 1859660671, 1671105958, 1733955601, 2031960084, 2111593891, 1889500026, 1952343757, 2552477408, 2632100695, 2443283854, 2506133561, 2334638140, 2414271883, 2191915858, 2254759653, 3190512472, 3135915759, 3081330742, 3009969537, 2905550212, 2850959411, 2762807018, 2691435357, 3560074640, 3505614887, 3719321342, 3648080713, 3342211916, 3287746299, 3467911202, 3396681109, 4063920168, 4143685023, 4223187782, 4286162673, 3779000052, 3858754371, 3904687514, 3967668269, 881225847, 809987520, 1023691545, 969234094, 662832811, 591600412, 771767749, 717299826, 311336399, 374308984, 453813921, 533576470, 25881363, 88864420, 134795389, 214552010, 2023205639, 2086057648, 1897238633, 1976864222, 1804852699, 1867694188, 1645340341, 1724971778, 1587496639, 1516133128, 1461550545, 1406951526, 1302016099, 1230646740, 1142491917, 1087903418, 2896545431, 2825181984, 2770861561, 2716262478, 3215044683, 3143675388, 3055782693, 3001194130, 2326604591, 2389456536, 2200899649, 2280525302, 2578013683, 2640855108, 2418763421, 2498394922, 3769900519, 3832873040, 3912640137, 3992402750, 4088425275, 4151408268, 4197601365, 4277358050, 3334271071, 3263032808, 3476998961, 3422541446, 3585640067, 3514407732, 3694837229, 3640369242, 1762451694, 1842216281, 1619975040, 1682949687, 2047383090, 2127137669, 1938468188, 2001449195, 1325665622, 1271206113, 1183200824, 1111960463, 1543535498, 1489069629, 1434599652, 1363369299, 622672798, 568075817, 748617968, 677256519, 907627842, 853037301, 1067152940, 995781531, 51762726, 131386257, 177728840, 240578815, 269590778, 349224269, 429104020, 491947555, 4046411278, 4126034873, 4172115296, 4234965207, 3794477266, 3874110821, 3953728444, 4016571915, 3609705398, 3555108353, 3735388376, 3664026991, 3290680682, 3236090077, 3449943556, 3378572211, 3174993278, 3120533705, 3032266256, 2961025959, 2923101090, 2868635157, 2813903052, 2742672763, 2604032198, 2683796849, 2461293480, 2524268063, 2284983834, 2364738477, 2175806836, 2238787779, 1569362073, 1498123566, 1409854455, 1355396672, 1317987909, 1246755826, 1192025387, 1137557660, 2072149281, 2135122070, 1912620623, 1992383480, 1753615357, 1816598090, 1627664531, 1707420964, 295390185, 358241886, 404320391, 483945776, 43990325, 106832002, 186451547, 266083308, 932423249, 861060070, 1041341759, 986742920, 613929101, 542559546, 756411363, 701822548, 3316196985, 3244833742, 3425377559, 3370778784, 3601682597, 3530312978, 3744426955, 3689838204, 3819031489, 3881883254, 3928223919, 4007849240, 4037393693, 4100235434, 4180117107, 4259748804, 2310601993, 2373574846, 2151335527, 2231098320, 2596047829, 2659030626, 2470359227, 2550115596, 2947551409, 2876312838, 2788305887, 2733848168, 3165939309, 3094707162, 3040238851, 2985771188]);return function () {\n var e = 4294967295;this.getCRC = function () {\n return ~e >>> 0;\n }, this.updateCRC = function (r) {\n e = e << 8 ^ t[255 & (e >>> 24 ^ r)];\n }, this.updateCRCRun = function (r, n) {\n for (; n-- > 0;) {\n e = e << 8 ^ t[255 & (e >>> 24 ^ r)];\n }\n };\n };\n}(Util), HuffmanAllocator = function (e, t) {\n var r = function r(e, t, _r) {\n for (var n = e.length, i = t, o = e.length - 2; t >= _r && e[t] % n > i;) {\n o = t, t -= i - t + 1;\n }for (t = Math.max(_r - 1, t); o > t + 1;) {\n var f = t + o >> 1;e[f] % n > i ? o = f : t = f;\n }return o;\n },\n n = function n(e) {\n var t = e.length;e[0] += e[1];var r, n, i, o;for (r = 0, n = 1, i = 2; n < t - 1; n++) {\n i >= t || e[r] < e[i] ? (o = e[r], e[r++] = n) : o = e[i++], i >= t || r < n && e[r] < e[i] ? (o += e[r], e[r++] = n + t) : o += e[i++], e[n] = o;\n }\n },\n i = function i(e, t) {\n var n,\n i = e.length - 2;for (n = 1; n < t - 1 && i > 1; n++) {\n i = r(e, i - 1, 0);\n }return i;\n },\n o = function o(e) {\n var t,\n n,\n i,\n o,\n f = e.length - 2,\n a = e.length - 1;for (t = 1, n = 2; n > 0; t++) {\n for (i = f, f = r(e, i - 1, 0), o = n - (i - f); o > 0; o--) {\n e[a--] = t;\n }n = i - f << 1;\n }\n },\n f = function f(e, t, n) {\n var i,\n o,\n f,\n a,\n u = e.length - 2,\n s = e.length - 1,\n c = 1 == n ? 2 : 1,\n h = 1 == n ? t - 2 : t;for (i = c << 1; i > 0; c++) {\n for (o = u, u = u <= t ? u : r(e, o - 1, t), f = 0, c >= n ? f = Math.min(h, 1 << c - n) : c == n - 1 && (f = 1, e[u] == o && u++), a = i - (o - u + f); a > 0; a--) {\n e[s--] = c;\n }h -= f, i = o - u + f << 1;\n }\n };return e({ allocateHuffmanCodeLengths: function allocateHuffmanCodeLengths(e, r) {\n switch (e.length) {case 2:\n e[1] = 1;case 1:\n return void (e[0] = 1);}n(e);var a = i(e, r);if (e[0] % e.length >= a) o(e);else {\n var u = r - t.fls(a - 1);f(e, a, u);\n }\n } });\n}(freeze, Util), Bzip2 = function (e, t, r, n, i, o, f) {\n var a = o.EOF,\n u = function u(e, t) {\n var r,\n n = e[t];for (r = t; r > 0; r--) {\n e[r] = e[r - 1];\n }return e[0] = n, n;\n },\n s = { OK: 0, LAST_BLOCK: -1, NOT_BZIP_DATA: -2, UNEXPECTED_INPUT_EOF: -3, UNEXPECTED_OUTPUT_EOF: -4, DATA_ERROR: -5, OUT_OF_MEMORY: -6, OBSOLETE_INPUT: -7, END_OF_BLOCK: -8 },\n c = {};c[s.LAST_BLOCK] = \"Bad file checksum\", c[s.NOT_BZIP_DATA] = \"Not bzip data\", c[s.UNEXPECTED_INPUT_EOF] = \"Unexpected input EOF\", c[s.UNEXPECTED_OUTPUT_EOF] = \"Unexpected output EOF\", c[s.DATA_ERROR] = \"Data error\", c[s.OUT_OF_MEMORY] = \"Out of memory\", c[s.OBSOLETE_INPUT] = \"Obsolete (pre 0.9.5) bzip format not supported.\";var h = function h(e, t) {\n var r = c[e] || \"unknown error\";t && (r += \": \" + t);var n = new TypeError(r);throw n.errorCode = e, n;\n },\n l = function l(e, t) {\n this.writePos = this.writeCurrent = this.writeCount = 0, this._start_bunzip(e, t);\n };l.prototype._init_block = function () {\n return this._get_next_block() ? (this.blockCRC = new n(), !0) : (this.writeCount = -1, !1);\n }, l.prototype._start_bunzip = function (e, r) {\n var n = f.makeU8Buffer(4);4 === e.read(n, 0, 4) && \"BZh\" === String.fromCharCode(n[0], n[1], n[2]) || h(s.NOT_BZIP_DATA, \"bad magic\");var i = n[3] - 48;(i < 1 || i > 9) && h(s.NOT_BZIP_DATA, \"level out of range\"), this.reader = new t(e), this.dbufSize = 1e5 * i, this.nextoutput = 0, this.outputStream = r, this.streamCRC = 0;\n }, l.prototype._get_next_block = function () {\n var e,\n t,\n r,\n n = this.reader,\n i = n.readBits(48);if (25779555029136 === i) return !1;54156738319193 !== i && h(s.NOT_BZIP_DATA), this.targetBlockCRC = n.readBits(32), this.streamCRC = (this.targetBlockCRC ^ (this.streamCRC << 1 | this.streamCRC >>> 31)) >>> 0, n.readBits(1) && h(s.OBSOLETE_INPUT);var o = n.readBits(24);o > this.dbufSize && h(s.DATA_ERROR, \"initial position out of bounds\");var a = n.readBits(16),\n c = f.makeU8Buffer(256),\n l = 0;for (e = 0; e < 16; e++) {\n if (a & 1 << 15 - e) {\n var d = 16 * e;for (r = n.readBits(16), t = 0; t < 16; t++) {\n r & 1 << 15 - t && (c[l++] = d + t);\n }\n }\n }var B = n.readBits(3);(B < 2 || B > 6) && h(s.DATA_ERROR);var p = n.readBits(15);0 === p && h(s.DATA_ERROR);var v = f.makeU8Buffer(256);for (e = 0; e < B; e++) {\n v[e] = e;\n }var m = f.makeU8Buffer(p);for (e = 0; e < p; e++) {\n for (t = 0; n.readBits(1); t++) {\n t >= B && h(s.DATA_ERROR);\n }m[e] = u(v, t);\n }var w,\n E = l + 2,\n g = [];for (t = 0; t < B; t++) {\n var _ = f.makeU8Buffer(E),\n b = f.makeU16Buffer(21);for (a = n.readBits(5), e = 0; e < E; e++) {\n for (; (a < 1 || a > 20) && h(s.DATA_ERROR), n.readBits(1);) {\n n.readBits(1) ? a-- : a++;\n }_[e] = a;\n }var y, R;for (y = R = _[0], e = 1; e < E; e++) {\n _[e] > R ? R = _[e] : _[e] < y && (y = _[e]);\n }w = {}, g.push(w), w.permute = f.makeU16Buffer(258), w.limit = f.makeU32Buffer(22), w.base = f.makeU32Buffer(21), w.minLen = y, w.maxLen = R;var C = 0;for (e = y; e <= R; e++) {\n for (b[e] = w.limit[e] = 0, a = 0; a < E; a++) {\n _[a] === e && (w.permute[C++] = a);\n }\n }for (e = 0; e < E; e++) {\n b[_[e]]++;\n }for (C = a = 0, e = y; e < R; e++) {\n C += b[e], w.limit[e] = C - 1, C <<= 1, a += b[e], w.base[e + 1] = C - a;\n }w.limit[R + 1] = Number.MAX_VALUE, w.limit[R] = C + b[R] - 1, w.base[y] = 0;\n }var k = f.makeU32Buffer(256);for (e = 0; e < 256; e++) {\n v[e] = e;\n }var T,\n O = 0,\n S = 0,\n U = 0,\n A = this.dbuf = f.makeU32Buffer(this.dbufSize);for (E = 0;;) {\n for (E-- || (E = 49, U >= p && h(s.DATA_ERROR), w = g[m[U++]]), e = w.minLen, t = n.readBits(e); e > w.maxLen && h(s.DATA_ERROR), !(t <= w.limit[e]); e++) {\n t = t << 1 | n.readBits(1);\n }t -= w.base[e], (t < 0 || t >= 258) && h(s.DATA_ERROR);var z = w.permute[t];if (0 !== z && 1 !== z) {\n if (O) for (O = 0, S + a > this.dbufSize && h(s.DATA_ERROR), T = c[v[0]], k[T] += a; a--;) {\n A[S++] = T;\n }if (z > l) break;S >= this.dbufSize && h(s.DATA_ERROR), e = z - 1, T = u(v, e), T = c[T], k[T]++, A[S++] = T;\n } else O || (O = 1, a = 0), a += 0 === z ? O : 2 * O, O <<= 1;\n }for ((o < 0 || o >= S) && h(s.DATA_ERROR), t = 0, e = 0; e < 256; e++) {\n r = t + k[e], k[e] = t, t = r;\n }for (e = 0; e < S; e++) {\n T = 255 & A[e], A[k[T]] |= e << 8, k[T]++;\n }var N = 0,\n L = 0,\n P = 0;return S && (N = A[o], L = 255 & N, N >>= 8, P = -1), this.writePos = N, this.writeCurrent = L, this.writeCount = S, this.writeRun = P, !0;\n }, l.prototype._read_bunzip = function (e, t) {\n var r, n, i;if (this.writeCount < 0) return 0;for (var o = this.dbuf, f = this.writePos, a = this.writeCurrent, u = this.writeCount, c = (this.outputsize, this.writeRun); u;) {\n for (u--, n = a, f = o[f], a = 255 & f, f >>= 8, 3 == c++ ? (r = a, i = n, a = -1) : (r = 1, i = a), this.blockCRC.updateCRCRun(i, r); r--;) {\n this.outputStream.writeByte(i), this.nextoutput++;\n }a != n && (c = 0);\n }return this.writeCount = u, this.blockCRC.getCRC() !== this.targetBlockCRC && h(s.DATA_ERROR, \"Bad block CRC (got \" + this.blockCRC.getCRC().toString(16) + \" expected \" + this.targetBlockCRC.toString(16) + \")\"), this.nextoutput;\n }, l.Err = s, l.decode = function (e, t, r) {\n for (var n = f.coerceInputStream(e), i = f.coerceOutputStream(t, t), o = i.stream, a = new l(n, o);;) {\n if (\"eof\" in n && n.eof()) break;if (a._init_block()) a._read_bunzip();else {\n var u = a.reader.readBits(32);if (u !== a.streamCRC && h(s.DATA_ERROR, \"Bad stream CRC (got \" + a.streamCRC.toString(16) + \" expected \" + u.toString(16) + \")\"), !(r && \"eof\" in n) || n.eof()) break;a._start_bunzip(n, o);\n }\n }return i.retval;\n }, l.decodeBlock = function (e, t, r) {\n var i = f.coerceInputStream(e),\n o = f.coerceOutputStream(r, r),\n a = o.stream,\n u = new l(i, a);return u.reader.seekBit(t), u._get_next_block() && (u.blockCRC = new n(), u.writeCopies = 0, u._read_bunzip()), o.retval;\n }, l.table = function (e, t, r) {\n var n = new o();n.delegate = f.coerceInputStream(e), n.pos = 0, n.readByte = function () {\n return this.pos++, this.delegate.readByte();\n }, n.tell = function () {\n return this.pos;\n }, n.delegate.eof && (n.eof = n.delegate.eof.bind(n.delegate));var i = new o();i.pos = 0, i.writeByte = function () {\n this.pos++;\n };for (var a = new l(n, i), u = a.dbufSize;;) {\n if (\"eof\" in n && n.eof()) break;var s = a.reader.tellBit();if (a._init_block()) {\n var c = i.pos;a._read_bunzip(), t(s, i.pos - c);\n } else {\n a.reader.readBits(32);if (!(r && \"eof\" in n) || n.eof()) break;a._start_bunzip(n, i), console.assert(a.dbufSize === u, \"shouldn't change block size within multistream file\");\n }\n }\n };var d = function d(e, t) {\n var r,\n n = [];for (r = 0; r < t; r++) {\n n[r] = e[r] << 9 | r;\n }n.sort(function (e, t) {\n return e - t;\n });var o = n.map(function (e) {\n return e >>> 9;\n });for (i.allocateHuffmanCodeLengths(o, 20), this.codeLengths = f.makeU8Buffer(t), r = 0; r < t; r++) {\n var a = 511 & n[r];this.codeLengths[a] = o[r];\n }\n };d.prototype.computeCanonical = function () {\n var e,\n t = this.codeLengths.length,\n r = [];for (e = 0; e < t; e++) {\n r[e] = this.codeLengths[e] << 9 | e;\n }r.sort(function (e, t) {\n return e - t;\n }), this.code = f.makeU32Buffer(t);var n = 0,\n i = 0;for (e = 0; e < t; e++) {\n var o = r[e] >>> 9,\n a = 511 & r[e];console.assert(i <= o), n <<= o - i, this.code[a] = n++, i = o;\n }\n }, d.prototype.cost = function (e, t, r) {\n var n,\n i = 0;for (n = 0; n < r; n++) {\n i += this.codeLengths[e[t + n]];\n }return i;\n }, d.prototype.emit = function (e) {\n var t,\n r = this.codeLengths[0];for (e.writeBits(5, r), t = 0; t < this.codeLengths.length; t++) {\n var n,\n i,\n o = this.codeLengths[t];for (console.assert(o > 0 && o <= 20), r < o ? (n = 2, i = o - r) : (n = 3, i = r - o); i-- > 0;) {\n e.writeBits(2, n);\n }e.writeBit(0), r = o;\n }\n }, d.prototype.encode = function (e, t) {\n e.writeBits(this.codeLengths[t], this.code[t]);\n };var B = function B(e, t, r, n) {\n for (var i = 0, o = -1, f = 0; i < r && !(4 === f && (t[i++] = 0, i >= r));) {\n var u = e.readByte();if (u === a) break;if (n.updateCRC(u), u !== o) o = u, f = 1;else if (++f > 4) {\n if (f < 256) {\n t[i - 1]++;continue;\n }f = 1;\n }t[i++] = u;\n }return i;\n },\n p = function p(e, t, r) {\n var n, i, o;for (n = 0, o = 0; n < r.length; n += 50) {\n var f = Math.min(50, r.length - n),\n a = 0,\n u = t[0].cost(r, n, f);for (i = 1; i < t.length; i++) {\n var s = t[i].cost(r, n, f);s < u && (a = i, u = s);\n }e[o++] = a;\n }\n },\n v = function v(e, t, r, n, i) {\n for (var o, f, a, u = []; e.length < t;) {\n for (p(n, e, r), o = 0; o < e.length; o++) {\n u[o] = 0;\n }for (o = 0; o < n.length; o++) {\n u[n[o]]++;\n }var s = u.indexOf(Math.max.apply(Math, u)),\n c = [];for (o = 0, f = 0; o < n.length; o++) {\n if (n[o] === s) {\n var h = 50 * o,\n l = Math.min(h + 50, r.length);c.push({ index: o, cost: e[s].cost(r, h, l - h) });\n }\n }for (c.sort(function (e, t) {\n return e.cost - t.cost;\n }), o = c.length >>> 1; o < c.length; o++) {\n n[c[o].index] = e.length;\n }e.push(null);var B,\n v = [];for (o = 0; o < e.length; o++) {\n for (B = v[o] = [], f = 0; f < i; f++) {\n B[f] = 0;\n }\n }for (o = 0, f = 0; o < r.length;) {\n for (B = v[n[f++]], a = 0; a < 50 && o < r.length; a++) {\n B[r[o++]]++;\n }\n }for (o = 0; o < e.length; o++) {\n e[o] = new d(v[o], i);\n }\n }\n },\n m = function m(e, t, n) {\n var i,\n o,\n a,\n s,\n c = f.makeU8Buffer(t),\n h = r.bwtransform2(e, c, t, 256);n.writeBit(0), n.writeBits(24, h);var l = [],\n B = [];for (o = 0; o < t; o++) {\n i = e[o], l[i] = !0, B[i >>> 4] = !0;\n }for (o = 0; o < 16; o++) {\n n.writeBit(!!B[o]);\n }for (o = 0; o < 16; o++) {\n if (B[o]) for (a = 0; a < 16; a++) {\n n.writeBit(!!l[o << 4 | a]);\n }\n }var m = 0;for (o = 0; o < 256; o++) {\n l[o] && m++;\n }var w = f.makeU16Buffer(t + 1),\n E = m + 1,\n g = [];for (o = 0; o <= E; o++) {\n g[o] = 0;\n }var _ = f.makeU8Buffer(m);for (o = 0, a = 0; o < 256; o++) {\n l[o] && (_[a++] = o);\n }l = null, B = null;var b = 0,\n y = 0,\n R = function R(e) {\n w[b++] = e, g[e]++;\n },\n C = function C() {\n for (; 0 !== y;) {\n 1 & y ? (R(0), y -= 1) : (R(1), y -= 2), y >>>= 1;\n }\n };for (o = 0; o < c.length; o++) {\n for (i = c[o], a = 0; a < m && _[a] !== i; a++) {}console.assert(a !== m), u(_, a), 0 === a ? y++ : (C(), R(a + 1), y = 0);\n }C(), R(E), w = w.subarray(0, b);var k,\n T = [];for (k = b >= 2400 ? 6 : b >= 1200 ? 5 : b >= 600 ? 4 : b >= 200 ? 3 : 2, T.push(new d(g, E + 1)), o = 0; o <= E; o++) {\n g[o] = 1;\n }T.push(new d(g, E + 1)), g = null;var O = f.makeU8Buffer(Math.ceil(b / 50));for (v(T, k, w, O, E + 1), p(O, T, w), console.assert(T.length >= 2 && T.length <= 6), n.writeBits(3, T.length), n.writeBits(15, O.length), o = 0; o < T.length; o++) {\n _[o] = o;\n }for (o = 0; o < O.length; o++) {\n var S = O[o];for (a = 0; a < T.length && _[a] !== S; a++) {}for (console.assert(a < T.length), u(_, a); a > 0; a--) {\n n.writeBit(1);\n }n.writeBit(0);\n }for (o = 0; o < T.length; o++) {\n T[o].emit(n), T[o].computeCanonical();\n }for (o = 0, s = 0; o < b;) {\n var U = T[O[s++]];for (a = 0; a < 50 && o < b; a++) {\n U.encode(n, w[o++]);\n }\n }\n },\n w = (0, _create2.default)(null);return w.compressFile = function (e, r, i) {\n e = f.coerceInputStream(e);var o = f.coerceOutputStream(r, r);r = new t(o.stream);var a = 9;if (\"number\" == typeof i && (a = i), a < 1 || a > 9) throw new Error(\"Invalid block size multiplier\");var u = 1e5 * a;u -= 19, r.writeByte(\"B\".charCodeAt(0)), r.writeByte(\"Z\".charCodeAt(0)), r.writeByte(\"h\".charCodeAt(0)), r.writeByte(\"0\".charCodeAt(0) + a);var s,\n c = f.makeU8Buffer(u),\n h = 0;do {\n var l = new n();s = B(e, c, u, l), s > 0 && (h = ((h << 1 | h >>> 31) ^ l.getCRC()) >>> 0, r.writeBits(48, 54156738319193), r.writeBits(32, l.getCRC()), m(c, s, r));\n } while (s === u);return r.writeBits(48, 25779555029136), r.writeBits(32, h), r.flush(), o.retval;\n }, w.decompressFile = l.decode, w.decompressBlock = l.decodeBlock, w.table = l.table, w;\n}(0, BitStream, BWT, CRC32, HuffmanAllocator, Stream, Util), module.exports = Bzip2;\n\n}).call(this,_dereq_('_process'),_dereq_(\"buffer\").Buffer)\n},{\"_process\":317,\"babel-runtime/core-js/object/create\":25,\"babel-runtime/core-js/object/freeze\":28,\"babel-runtime/helpers/typeof\":41,\"buffer\":47}],324:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_(\"../enums\");\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n /**\n * @memberof module:config\n * @property {Integer} prefer_hash_algorithm Default hash algorithm {@link module:enums.hash}\n */\n prefer_hash_algorithm: _enums2.default.hash.sha256,\n /**\n * @memberof module:config\n * @property {Integer} encryption_cipher Default encryption cipher {@link module:enums.symmetric}\n */\n encryption_cipher: _enums2.default.symmetric.aes256,\n /**\n * @memberof module:config\n * @property {Integer} compression Default compression algorithm {@link module:enums.compression}\n */\n compression: _enums2.default.compression.uncompressed,\n /**\n * @memberof module:config\n * @property {Integer} deflate_level Default zip/zlib compression level, between 1 and 9\n */\n deflate_level: 6,\n\n /**\n * Use Authenticated Encryption with Additional Data (AEAD) protection for symmetric encryption.\n * **NOT INTEROPERABLE WITH OTHER OPENPGP IMPLEMENTATIONS**\n * **FUTURE OPENPGP.JS VERSIONS MAY BREAK COMPATIBILITY WHEN USING THIS OPTION**\n * @memberof module:config\n * @property {Boolean} aead_protect\n */\n aead_protect: false,\n /**\n * Use Authenticated Encryption with Additional Data (AEAD) protection for symmetric encryption.\n * 0 means we implement a variant of {@link https://tools.ietf.org/html/draft-ford-openpgp-format-00|this IETF draft}.\n * 4 means we implement {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04|RFC4880bis-04}.\n * Note that this determines how AEAD packets are parsed even when aead_protect is set to false\n * @memberof module:config\n * @property {Integer} aead_protect_version\n */\n aead_protect_version: 4,\n /**\n * Default Authenticated Encryption with Additional Data (AEAD) encryption mode\n * Only has an effect when aead_protect is set to true.\n * @memberof module:config\n * @property {Integer} aead_mode Default AEAD mode {@link module:enums.aead}\n */\n aead_mode: _enums2.default.aead.eax,\n /**\n * Chunk Size Byte for Authenticated Encryption with Additional Data (AEAD) mode\n * Only has an effect when aead_protect is set to true.\n * Must be an integer value from 0 to 56.\n * @memberof module:config\n * @property {Integer} aead_chunk_size_byte\n */\n aead_chunk_size_byte: 12,\n /**\n * {@link https://tools.ietf.org/html/rfc4880#section-3.7.1.3|RFC4880 3.7.1.3}:\n * Iteration Count Byte for S2K (String to Key)\n * @memberof module:config\n * @property {Integer} s2k_iteration_count_byte\n */\n s2k_iteration_count_byte: 96,\n /** Use integrity protection for symmetric encryption\n * @memberof module:config\n * @property {Boolean} integrity_protect\n */\n integrity_protect: true,\n /**\n * @memberof module:config\n * @property {Boolean} ignore_mdc_error Fail on decrypt if message is not integrity protected\n */\n ignore_mdc_error: false,\n /**\n * @memberof module:config\n * @property {Boolean} checksum_required Do not throw error when armor is missing a checksum\n */\n checksum_required: false,\n /**\n * @memberof module:config\n * @property {Boolean} rsa_blinding\n */\n rsa_blinding: true,\n /**\n * Work-around for rare GPG decryption bug when encrypting with multiple passwords.\n * **Slower and slightly less secure**\n * @memberof module:config\n * @property {Boolean} password_collision_check\n */\n password_collision_check: false,\n /**\n * @memberof module:config\n * @property {Boolean} revocations_expire If true, expired revocation signatures are ignored\n */\n revocations_expire: false,\n\n /**\n * @memberof module:config\n * @property {Boolean} use_native Use native Node.js crypto/zlib and WebCrypto APIs when available\n */\n use_native: true,\n /**\n * @memberof module:config\n * @property {Boolean} Use transferable objects between the Web Worker and main thread\n */\n zero_copy: false,\n /**\n * @memberof module:config\n * @property {Boolean} debug If enabled, debug messages will be printed\n */\n debug: false,\n /**\n * @memberof module:config\n * @property {Boolean} tolerant Ignore unsupported/unrecognizable packets instead of throwing an error\n */\n tolerant: true,\n\n /**\n * @memberof module:config\n * @property {Boolean} show_version Whether to include {@link module:config/config.versionstring} in armored messages\n */\n show_version: true,\n /**\n * @memberof module:config\n * @property {Boolean} show_comment Whether to include {@link module:config/config.commentstring} in armored messages\n */\n show_comment: true,\n /**\n * @memberof module:config\n * @property {String} versionstring A version string to be included in armored messages\n */\n versionstring: \"OpenPGP.js v3.0.11\",\n /**\n * @memberof module:config\n * @property {String} commentstring A comment string to be included in armored messages\n */\n commentstring: \"https://openpgpjs.org\",\n\n /**\n * @memberof module:config\n * @property {String} keyserver\n */\n keyserver: \"https://keyserver.ubuntu.com\",\n /**\n * @memberof module:config\n * @property {String} node_store\n */\n node_store: \"./openpgp.store\"\n}; // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Global configuration values.\n * @requires enums\n */\n\n},{\"../enums\":359}],325:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _config = _dereq_('./config.js');\n\nObject.defineProperty(exports, 'default', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_config).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n},{\"./config.js\":324}],326:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of RFC 3394 AES Key Wrap & Key Unwrap funcions\n * @see module:crypto/public_key/elliptic/ecdh\n * @requires crypto/cipher\n * @requires util\n * @module crypto/aes_kw\n */\n\nfunction wrap(key, data) {\n var aes = new _cipher2.default[\"aes\" + key.length * 8](key);\n var IV = new Uint32Array([0xA6A6A6A6, 0xA6A6A6A6]);\n var P = unpack(data);\n var A = IV;\n var R = P;\n var n = P.length / 2;\n var t = new Uint32Array([0, 0]);\n var B = new Uint32Array(4);\n for (var j = 0; j <= 5; ++j) {\n for (var i = 0; i < n; ++i) {\n t[1] = n * j + (1 + i);\n // B = A\n B[0] = A[0];\n B[1] = A[1];\n // B = A || R[i]\n B[2] = R[2 * i];\n B[3] = R[2 * i + 1];\n // B = AES(K, B)\n B = unpack(aes.encrypt(pack(B)));\n // A = MSB(64, B) ^ t\n A = B.subarray(0, 2);\n A[0] ^= t[0];\n A[1] ^= t[1];\n // R[i] = LSB(64, B)\n R[2 * i] = B[2];\n R[2 * i + 1] = B[3];\n }\n }\n return pack(A, R);\n}\n\nfunction unwrap(key, data) {\n var aes = new _cipher2.default[\"aes\" + key.length * 8](key);\n var IV = new Uint32Array([0xA6A6A6A6, 0xA6A6A6A6]);\n var C = unpack(data);\n var A = C.subarray(0, 2);\n var R = C.subarray(2);\n var n = C.length / 2 - 1;\n var t = new Uint32Array([0, 0]);\n var B = new Uint32Array(4);\n for (var j = 5; j >= 0; --j) {\n for (var i = n - 1; i >= 0; --i) {\n t[1] = n * j + (i + 1);\n // B = A ^ t\n B[0] = A[0] ^ t[0];\n B[1] = A[1] ^ t[1];\n // B = (A ^ t) || R[i]\n B[2] = R[2 * i];\n B[3] = R[2 * i + 1];\n // B = AES-1(B)\n B = unpack(aes.decrypt(pack(B)));\n // A = MSB(64, B)\n A = B.subarray(0, 2);\n // R[i] = LSB(64, B)\n R[2 * i] = B[2];\n R[2 * i + 1] = B[3];\n }\n }\n if (A[0] === IV[0] && A[1] === IV[1]) {\n return pack(R);\n }\n throw new Error(\"Key Data Integrity failed\");\n}\n\nfunction createArrayBuffer(data) {\n if (_util2.default.isString(data)) {\n var length = data.length;\n\n var buffer = new ArrayBuffer(length);\n var view = new Uint8Array(buffer);\n for (var j = 0; j < length; ++j) {\n view[j] = data.charCodeAt(j);\n }\n return buffer;\n }\n return new Uint8Array(data).buffer;\n}\n\nfunction unpack(data) {\n var length = data.length;\n\n var buffer = createArrayBuffer(data);\n var view = new DataView(buffer);\n var arr = new Uint32Array(length / 4);\n for (var i = 0; i < length / 4; ++i) {\n arr[i] = view.getUint32(4 * i);\n }\n return arr;\n}\n\nfunction pack() {\n var length = 0;\n for (var k = 0; k < arguments.length; ++k) {\n length += 4 * arguments[k].length;\n }\n var buffer = new ArrayBuffer(length);\n var view = new DataView(buffer);\n var offset = 0;\n for (var i = 0; i < arguments.length; ++i) {\n for (var j = 0; j < arguments[i].length; ++j) {\n view.setUint32(offset + 4 * j, arguments[i][j]);\n }\n offset += 4 * arguments[i].length;\n }\n return new Uint8Array(buffer);\n}\n\nexports.default = {\n /**\n * AES key wrap\n * @function\n * @param {String} key\n * @param {String} data\n * @returns {Uint8Array}\n */\n wrap: wrap,\n /**\n * AES key unwrap\n * @function\n * @param {String} key\n * @param {String} data\n * @returns {Uint8Array}\n * @throws {Error}\n */\n unwrap: unwrap\n};\n\n},{\"../util\":398,\"./cipher\":332}],327:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n\n /**\n * This function encrypts a given plaintext with the specified prefixrandom\n * using the specified blockcipher\n * @param {Uint8Array} prefixrandom random bytes of block_size length\n * to be used in prefixing the data\n * @param {String} cipherfn the algorithm cipher class to encrypt\n * data in one block_size encryption, {@link module:crypto/cipher}.\n * @param {Uint8Array} plaintext data to be encrypted\n * @param {Uint8Array} key key to be used to encrypt the plaintext.\n * This will be passed to the cipherfn\n * @param {Boolean} resync a boolean value specifying if a resync of the\n * IV should be used or not. The encrypteddatapacket uses the\n * \"old\" style with a resync. Encryption within an\n * encryptedintegrityprotecteddata packet is not resyncing the IV.\n * @returns {Uint8Array} encrypted data\n */\n encrypt: function encrypt(prefixrandom, cipherfn, plaintext, key, resync) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var FR = new Uint8Array(block_size);\n var FRE = new Uint8Array(block_size);\n\n var new_prefix = new Uint8Array(prefixrandom.length + 2);\n new_prefix.set(prefixrandom);\n new_prefix[prefixrandom.length] = prefixrandom[block_size - 2];\n new_prefix[prefixrandom.length + 1] = prefixrandom[block_size - 1];\n prefixrandom = new_prefix;\n\n var ciphertext = new Uint8Array(plaintext.length + 2 + block_size * 2);\n var i = void 0;\n var n = void 0;\n var begin = void 0;\n var offset = resync ? 0 : 2;\n\n // 1. The feedback register (FR) is set to the IV, which is all zeros.\n for (i = 0; i < block_size; i++) {\n FR[i] = 0;\n }\n\n // 2. FR is encrypted to produce FRE (FR Encrypted). This is the\n // encryption of an all-zero value.\n FRE = cipherfn.encrypt(FR);\n // 3. FRE is xored with the first BS octets of random data prefixed to\n // the plaintext to produce C[1] through C[BS], the first BS octets\n // of ciphertext.\n for (i = 0; i < block_size; i++) {\n ciphertext[i] = FRE[i] ^ prefixrandom[i];\n }\n\n // 4. FR is loaded with C[1] through C[BS].\n FR.set(ciphertext.subarray(0, block_size));\n\n // 5. FR is encrypted to produce FRE, the encryption of the first BS\n // octets of ciphertext.\n FRE = cipherfn.encrypt(FR);\n\n // 6. The left two octets of FRE get xored with the next two octets of\n // data that were prefixed to the plaintext. This produces C[BS+1]\n // and C[BS+2], the next two octets of ciphertext.\n ciphertext[block_size] = FRE[0] ^ prefixrandom[block_size];\n ciphertext[block_size + 1] = FRE[1] ^ prefixrandom[block_size + 1];\n\n if (resync) {\n // 7. (The resync step) FR is loaded with C[3] through C[BS+2].\n FR.set(ciphertext.subarray(2, block_size + 2));\n } else {\n FR.set(ciphertext.subarray(0, block_size));\n }\n // 8. FR is encrypted to produce FRE.\n FRE = cipherfn.encrypt(FR);\n\n // 9. FRE is xored with the first BS octets of the given plaintext, now\n // that we have finished encrypting the BS+2 octets of prefixed\n // data. This produces C[BS+3] through C[BS+(BS+2)], the next BS\n // octets of ciphertext.\n for (i = 0; i < block_size; i++) {\n ciphertext[block_size + 2 + i] = FRE[i + offset] ^ plaintext[i];\n }\n for (n = block_size; n < plaintext.length + offset; n += block_size) {\n // 10. FR is loaded with C[BS+3] to C[BS + (BS+2)] (which is C11-C18 for\n // an 8-octet block).\n begin = n + 2 - offset;\n FR.set(ciphertext.subarray(begin, begin + block_size));\n\n // 11. FR is encrypted to produce FRE.\n FRE = cipherfn.encrypt(FR);\n\n // 12. FRE is xored with the next BS octets of plaintext, to produce\n // the next BS octets of ciphertext. These are loaded into FR, and\n // the process is repeated until the plaintext is used up.\n for (i = 0; i < block_size; i++) {\n ciphertext[block_size + begin + i] = FRE[i] ^ plaintext[n + i - offset];\n }\n }\n\n ciphertext = ciphertext.subarray(0, plaintext.length + 2 + block_size);\n return ciphertext;\n },\n\n /**\n * Decrypts the prefixed data for the Modification Detection Code (MDC) computation\n * @param {String} cipherfn.encrypt Cipher function to use,\n * @see module:crypto/cipher.\n * @param {Uint8Array} key Uint8Array representation of key to be used to check the mdc\n * This will be passed to the cipherfn\n * @param {Uint8Array} ciphertext The encrypted data\n * @returns {Uint8Array} plaintext Data of D(ciphertext) with blocksize length +2\n */\n mdc: function mdc(cipherfn, key, ciphertext) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var iblock = new Uint8Array(block_size);\n var ablock = new Uint8Array(block_size);\n var i = void 0;\n\n // initialisation vector\n for (i = 0; i < block_size; i++) {\n iblock[i] = 0;\n }\n\n iblock = cipherfn.encrypt(iblock);\n for (i = 0; i < block_size; i++) {\n ablock[i] = ciphertext[i];\n iblock[i] ^= ablock[i];\n }\n\n ablock = cipherfn.encrypt(ablock);\n\n var result = new Uint8Array(iblock.length + 2);\n result.set(iblock);\n result[iblock.length] = ablock[0] ^ ciphertext[block_size];\n result[iblock.length + 1] = ablock[1] ^ ciphertext[block_size + 1];\n return result;\n },\n\n /**\n * This function decrypts a given ciphertext using the specified blockcipher\n * @param {String} cipherfn the algorithm cipher class to decrypt\n * data in one block_size encryption, {@link module:crypto/cipher}.\n * @param {Uint8Array} key Uint8Array representation of key to be used to decrypt the ciphertext.\n * This will be passed to the cipherfn\n * @param {Uint8Array} ciphertext to be decrypted\n * @param {Boolean} resync a boolean value specifying if a resync of the\n * IV should be used or not. The encrypteddatapacket uses the\n * \"old\" style with a resync. Decryption within an\n * encryptedintegrityprotecteddata packet is not resyncing the IV.\n * @returns {Uint8Array} the plaintext data\n */\n decrypt: function decrypt(cipherfn, key, ciphertext, resync) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var iblock = new Uint8Array(block_size);\n var ablock = new Uint8Array(block_size);\n\n var i = void 0;\n var j = void 0;\n var n = void 0;\n var text = new Uint8Array(ciphertext.length - block_size);\n\n // initialisation vector\n for (i = 0; i < block_size; i++) {\n iblock[i] = 0;\n }\n\n iblock = cipherfn.encrypt(iblock);\n for (i = 0; i < block_size; i++) {\n ablock[i] = ciphertext[i];\n iblock[i] ^= ablock[i];\n }\n\n ablock = cipherfn.encrypt(ablock);\n\n // test check octets\n if (iblock[block_size - 2] !== (ablock[0] ^ ciphertext[block_size]) || iblock[block_size - 1] !== (ablock[1] ^ ciphertext[block_size + 1])) {\n throw new Error('CFB decrypt: invalid key');\n }\n\n /* RFC4880: Tag 18 and Resync:\n * [...] Unlike the Symmetrically Encrypted Data Packet, no\n * special CFB resynchronization is done after encrypting this prefix\n * data. See \"OpenPGP CFB Mode\" below for more details.\n */\n\n j = 0;\n if (resync) {\n for (i = 0; i < block_size; i++) {\n iblock[i] = ciphertext[i + 2];\n }\n for (n = block_size + 2; n < ciphertext.length; n += block_size) {\n ablock = cipherfn.encrypt(iblock);\n\n for (i = 0; i < block_size && i + n < ciphertext.length; i++) {\n iblock[i] = ciphertext[n + i];\n if (j < text.length) {\n text[j] = ablock[i] ^ iblock[i];\n j++;\n }\n }\n }\n } else {\n for (i = 0; i < block_size; i++) {\n iblock[i] = ciphertext[i];\n }\n for (n = block_size; n < ciphertext.length; n += block_size) {\n ablock = cipherfn.encrypt(iblock);\n for (i = 0; i < block_size && i + n < ciphertext.length; i++) {\n iblock[i] = ciphertext[n + i];\n if (j < text.length) {\n text[j] = ablock[i] ^ iblock[i];\n j++;\n }\n }\n }\n }\n\n n = resync ? 0 : 2;\n\n text = text.subarray(n, ciphertext.length - block_size - 2 + n);\n\n return text;\n },\n\n normalEncrypt: function normalEncrypt(cipherfn, key, plaintext, iv) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var blocki = new Uint8Array(block_size);\n var blockc = new Uint8Array(block_size);\n var pos = 0;\n var cyphertext = new Uint8Array(plaintext.length);\n var i = void 0;\n var j = 0;\n\n if (iv === null) {\n for (i = 0; i < block_size; i++) {\n blockc[i] = 0;\n }\n } else {\n for (i = 0; i < block_size; i++) {\n blockc[i] = iv[i];\n }\n }\n while (plaintext.length > block_size * pos) {\n var encblock = cipherfn.encrypt(blockc);\n blocki = plaintext.subarray(pos * block_size, pos * block_size + block_size);\n for (i = 0; i < blocki.length; i++) {\n blockc[i] = blocki[i] ^ encblock[i];\n cyphertext[j++] = blockc[i];\n }\n pos++;\n }\n return cyphertext;\n },\n\n normalDecrypt: function normalDecrypt(cipherfn, key, ciphertext, iv) {\n cipherfn = new _cipher2.default[cipherfn](key);\n var block_size = cipherfn.blockSize;\n\n var blockp = void 0;\n var pos = 0;\n var plaintext = new Uint8Array(ciphertext.length);\n var offset = 0;\n var i = void 0;\n var j = 0;\n\n if (iv === null) {\n blockp = new Uint8Array(block_size);\n for (i = 0; i < block_size; i++) {\n blockp[i] = 0;\n }\n } else {\n blockp = iv.subarray(0, block_size);\n }\n while (ciphertext.length > block_size * pos) {\n var decblock = cipherfn.encrypt(blockp);\n blockp = ciphertext.subarray(pos * block_size + offset, pos * block_size + block_size + offset);\n for (i = 0; i < blockp.length; i++) {\n plaintext[j++] = blockp[i] ^ decblock[i];\n }\n pos++;\n }\n\n return plaintext;\n }\n}; // Modified by ProtonTech AG\n\n// Modified by Recurity Labs GmbH\n\n// modified version of https://www.hanewin.net/encrypt/PGdecode.js:\n\n/* OpenPGP encryption using RSA/AES\n * Copyright 2005-2006 Herbert Hanewinkel, www.haneWIN.de\n * version 2.0, check www.haneWIN.de for the latest version\n\n * This software is provided as-is, without express or implied warranty.\n * Permission to use, copy, modify, distribute or sell this software, with or\n * without fee, for any purpose and by any individual or organization, is hereby\n * granted, provided that the above copyright notice and this paragraph appear\n * in all copies. Distribution as a part of an application or binary must\n * include the above copyright notice in the documentation and/or other\n * materials provided with the application or distribution.\n */\n\n/**\n * @requires crypto/cipher\n * @module crypto/cfb\n */\n\n},{\"./cipher\":332}],328:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/exports');\n\nvar _ecb = _dereq_('asmcrypto.js/src/aes/ecb/ecb');\n\n// TODO use webCrypto or nodeCrypto when possible.\n/**\n * @requires asmcrypto.js\n */\n\nfunction aes(length) {\n var C = function C(key) {\n var aes_ecb = new _ecb.AES_ECB(key, _exports._AES_heap_instance, _exports._AES_asm_instance);\n\n this.encrypt = function (block) {\n return aes_ecb.encrypt(block).result;\n };\n\n this.decrypt = function (block) {\n return aes_ecb.decrypt(block).result;\n };\n };\n\n C.blockSize = C.prototype.blockSize = 16;\n C.keySize = C.prototype.keySize = length / 8;\n\n return C;\n}\n\nexports.default = aes;\n\n},{\"asmcrypto.js/src/aes/ecb/ecb\":10,\"asmcrypto.js/src/aes/exports\":11}],329:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* Modified by Recurity Labs GmbH\n *\n * Originally written by nklein software (nklein.com)\n */\n\n/*\n * Javascript implementation based on Bruce Schneier's reference implementation.\n *\n *\n * The constructor doesn't do much of anything. It's just here\n * so we can start defining properties and methods and such.\n */\nfunction Blowfish() {}\n\n/*\n * Declare the block size so that protocols know what size\n * Initialization Vector (IV) they will need.\n */\nBlowfish.prototype.BLOCKSIZE = 8;\n\n/*\n * These are the default SBOXES.\n */\nBlowfish.prototype.SBOXES = [[0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a], [0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7], [0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0], [0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6]];\n\n//*\n//* This is the default PARRAY\n//*\nBlowfish.prototype.PARRAY = [0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b];\n\n//*\n//* This is the number of rounds the cipher will go\n//*\nBlowfish.prototype.NN = 16;\n\n//*\n//* This function is needed to get rid of problems\n//* with the high-bit getting set. If we don't do\n//* this, then sometimes ( aa & 0x00FFFFFFFF ) is not\n//* equal to ( bb & 0x00FFFFFFFF ) even when they\n//* agree bit-for-bit for the first 32 bits.\n//*\nBlowfish.prototype._clean = function (xx) {\n if (xx < 0) {\n var yy = xx & 0x7FFFFFFF;\n xx = yy + 0x80000000;\n }\n return xx;\n};\n\n//*\n//* This is the mixing function that uses the sboxes\n//*\nBlowfish.prototype._F = function (xx) {\n var yy = void 0;\n\n var dd = xx & 0x00FF;\n xx >>>= 8;\n var cc = xx & 0x00FF;\n xx >>>= 8;\n var bb = xx & 0x00FF;\n xx >>>= 8;\n var aa = xx & 0x00FF;\n\n yy = this.sboxes[0][aa] + this.sboxes[1][bb];\n yy ^= this.sboxes[2][cc];\n yy += this.sboxes[3][dd];\n\n return yy;\n};\n\n//*\n//* This method takes an array with two values, left and right\n//* and does NN rounds of Blowfish on them.\n//*\nBlowfish.prototype._encrypt_block = function (vals) {\n var dataL = vals[0];\n var dataR = vals[1];\n\n var ii = void 0;\n\n for (ii = 0; ii < this.NN; ++ii) {\n dataL ^= this.parray[ii];\n dataR = this._F(dataL) ^ dataR;\n\n var tmp = dataL;\n dataL = dataR;\n dataR = tmp;\n }\n\n dataL ^= this.parray[this.NN + 0];\n dataR ^= this.parray[this.NN + 1];\n\n vals[0] = this._clean(dataR);\n vals[1] = this._clean(dataL);\n};\n\n//*\n//* This method takes a vector of numbers and turns them\n//* into long words so that they can be processed by the\n//* real algorithm.\n//*\n//* Maybe I should make the real algorithm above take a vector\n//* instead. That will involve more looping, but it won't require\n//* the F() method to deconstruct the vector.\n//*\nBlowfish.prototype.encrypt_block = function (vector) {\n var ii = void 0;\n var vals = [0, 0];\n var off = this.BLOCKSIZE / 2;\n for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {\n vals[0] = vals[0] << 8 | vector[ii + 0] & 0x00FF;\n vals[1] = vals[1] << 8 | vector[ii + off] & 0x00FF;\n }\n\n this._encrypt_block(vals);\n\n var ret = [];\n for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {\n ret[ii + 0] = vals[0] >>> 24 - 8 * ii & 0x00FF;\n ret[ii + off] = vals[1] >>> 24 - 8 * ii & 0x00FF;\n // vals[ 0 ] = ( vals[ 0 ] >>> 8 );\n // vals[ 1 ] = ( vals[ 1 ] >>> 8 );\n }\n\n return ret;\n};\n\n//*\n//* This method takes an array with two values, left and right\n//* and undoes NN rounds of Blowfish on them.\n//*\nBlowfish.prototype._decrypt_block = function (vals) {\n var dataL = vals[0];\n var dataR = vals[1];\n\n var ii = void 0;\n\n for (ii = this.NN + 1; ii > 1; --ii) {\n dataL ^= this.parray[ii];\n dataR = this._F(dataL) ^ dataR;\n\n var tmp = dataL;\n dataL = dataR;\n dataR = tmp;\n }\n\n dataL ^= this.parray[1];\n dataR ^= this.parray[0];\n\n vals[0] = this._clean(dataR);\n vals[1] = this._clean(dataL);\n};\n\n//*\n//* This method takes a key array and initializes the\n//* sboxes and parray for this encryption.\n//*\nBlowfish.prototype.init = function (key) {\n var ii = void 0;\n var jj = 0;\n\n this.parray = [];\n for (ii = 0; ii < this.NN + 2; ++ii) {\n var data = 0x00000000;\n for (var kk = 0; kk < 4; ++kk) {\n data = data << 8 | key[jj] & 0x00FF;\n if (++jj >= key.length) {\n jj = 0;\n }\n }\n this.parray[ii] = this.PARRAY[ii] ^ data;\n }\n\n this.sboxes = [];\n for (ii = 0; ii < 4; ++ii) {\n this.sboxes[ii] = [];\n for (jj = 0; jj < 256; ++jj) {\n this.sboxes[ii][jj] = this.SBOXES[ii][jj];\n }\n }\n\n var vals = [0x00000000, 0x00000000];\n\n for (ii = 0; ii < this.NN + 2; ii += 2) {\n this._encrypt_block(vals);\n this.parray[ii + 0] = vals[0];\n this.parray[ii + 1] = vals[1];\n }\n\n for (ii = 0; ii < 4; ++ii) {\n for (jj = 0; jj < 256; jj += 2) {\n this._encrypt_block(vals);\n this.sboxes[ii][jj + 0] = vals[0];\n this.sboxes[ii][jj + 1] = vals[1];\n }\n }\n};\n\n// added by Recurity Labs\nfunction BF(key) {\n this.bf = new Blowfish();\n this.bf.init(key);\n\n this.encrypt = function (block) {\n return this.bf.encrypt_block(block);\n };\n}\n\nBF.keySize = BF.prototype.keySize = 16;\nBF.blockSize = BF.prototype.blockSize = 16;\n\nexports.default = BF;\n\n},{}],330:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Copyright 2010 pjacobs@xeekr.com . All rights reserved.\n\n// Modified by Recurity Labs GmbH\n\n// fixed/modified by Herbert Hanewinkel, www.haneWIN.de\n// check www.haneWIN.de for the latest version\n\n// cast5.js is a Javascript implementation of CAST-128, as defined in RFC 2144.\n// CAST-128 is a common OpenPGP cipher.\n\n\n// CAST5 constructor\n\nfunction OpenpgpSymencCast5() {\n this.BlockSize = 8;\n this.KeySize = 16;\n\n this.setKey = function (key) {\n this.masking = new Array(16);\n this.rotate = new Array(16);\n\n this.reset();\n\n if (key.length === this.KeySize) {\n this.keySchedule(key);\n } else {\n throw new Error('CAST-128: keys must be 16 bytes');\n }\n return true;\n };\n\n this.reset = function () {\n for (var i = 0; i < 16; i++) {\n this.masking[i] = 0;\n this.rotate[i] = 0;\n }\n };\n\n this.getBlockSize = function () {\n return this.BlockSize;\n };\n\n this.encrypt = function (src) {\n var dst = new Array(src.length);\n\n for (var i = 0; i < src.length; i += 8) {\n var l = src[i] << 24 | src[i + 1] << 16 | src[i + 2] << 8 | src[i + 3];\n var r = src[i + 4] << 24 | src[i + 5] << 16 | src[i + 6] << 8 | src[i + 7];\n var t = void 0;\n\n t = r;\n r = l ^ f1(r, this.masking[0], this.rotate[0]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[1], this.rotate[1]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[2], this.rotate[2]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[3], this.rotate[3]);\n l = t;\n\n t = r;\n r = l ^ f2(r, this.masking[4], this.rotate[4]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[5], this.rotate[5]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[6], this.rotate[6]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[7], this.rotate[7]);\n l = t;\n\n t = r;\n r = l ^ f3(r, this.masking[8], this.rotate[8]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[9], this.rotate[9]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[10], this.rotate[10]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[11], this.rotate[11]);\n l = t;\n\n t = r;\n r = l ^ f1(r, this.masking[12], this.rotate[12]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[13], this.rotate[13]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[14], this.rotate[14]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[15], this.rotate[15]);\n l = t;\n\n dst[i] = r >>> 24 & 255;\n dst[i + 1] = r >>> 16 & 255;\n dst[i + 2] = r >>> 8 & 255;\n dst[i + 3] = r & 255;\n dst[i + 4] = l >>> 24 & 255;\n dst[i + 5] = l >>> 16 & 255;\n dst[i + 6] = l >>> 8 & 255;\n dst[i + 7] = l & 255;\n }\n\n return dst;\n };\n\n this.decrypt = function (src) {\n var dst = new Array(src.length);\n\n for (var i = 0; i < src.length; i += 8) {\n var l = src[i] << 24 | src[i + 1] << 16 | src[i + 2] << 8 | src[i + 3];\n var r = src[i + 4] << 24 | src[i + 5] << 16 | src[i + 6] << 8 | src[i + 7];\n var t = void 0;\n\n t = r;\n r = l ^ f1(r, this.masking[15], this.rotate[15]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[14], this.rotate[14]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[13], this.rotate[13]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[12], this.rotate[12]);\n l = t;\n\n t = r;\n r = l ^ f3(r, this.masking[11], this.rotate[11]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[10], this.rotate[10]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[9], this.rotate[9]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[8], this.rotate[8]);\n l = t;\n\n t = r;\n r = l ^ f2(r, this.masking[7], this.rotate[7]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[6], this.rotate[6]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[5], this.rotate[5]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[4], this.rotate[4]);\n l = t;\n\n t = r;\n r = l ^ f1(r, this.masking[3], this.rotate[3]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[2], this.rotate[2]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[1], this.rotate[1]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[0], this.rotate[0]);\n l = t;\n\n dst[i] = r >>> 24 & 255;\n dst[i + 1] = r >>> 16 & 255;\n dst[i + 2] = r >>> 8 & 255;\n dst[i + 3] = r & 255;\n dst[i + 4] = l >>> 24 & 255;\n dst[i + 5] = l >> 16 & 255;\n dst[i + 6] = l >> 8 & 255;\n dst[i + 7] = l & 255;\n }\n\n return dst;\n };\n var scheduleA = new Array(4);\n\n scheduleA[0] = new Array(4);\n scheduleA[0][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 0x8];\n scheduleA[0][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];\n scheduleA[0][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];\n scheduleA[0][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];\n\n scheduleA[1] = new Array(4);\n scheduleA[1][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];\n scheduleA[1][1] = [1, 4, 0, 2, 1, 3, 16 + 2];\n scheduleA[1][2] = [2, 5, 7, 6, 5, 4, 16 + 1];\n scheduleA[1][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];\n\n scheduleA[2] = new Array(4);\n scheduleA[2][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 8];\n scheduleA[2][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];\n scheduleA[2][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];\n scheduleA[2][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];\n\n scheduleA[3] = new Array(4);\n scheduleA[3][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];\n scheduleA[3][1] = [1, 4, 0, 2, 1, 3, 16 + 2];\n scheduleA[3][2] = [2, 5, 7, 6, 5, 4, 16 + 1];\n scheduleA[3][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];\n\n var scheduleB = new Array(4);\n\n scheduleB[0] = new Array(4);\n scheduleB[0][0] = [16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2];\n scheduleB[0][1] = [16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6];\n scheduleB[0][2] = [16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9];\n scheduleB[0][3] = [16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc];\n\n scheduleB[1] = new Array(4);\n scheduleB[1][0] = [3, 2, 0xc, 0xd, 8];\n scheduleB[1][1] = [1, 0, 0xe, 0xf, 0xd];\n scheduleB[1][2] = [7, 6, 8, 9, 3];\n scheduleB[1][3] = [5, 4, 0xa, 0xb, 7];\n\n scheduleB[2] = new Array(4);\n scheduleB[2][0] = [16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9];\n scheduleB[2][1] = [16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc];\n scheduleB[2][2] = [16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2];\n scheduleB[2][3] = [16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6];\n\n scheduleB[3] = new Array(4);\n scheduleB[3][0] = [8, 9, 7, 6, 3];\n scheduleB[3][1] = [0xa, 0xb, 5, 4, 7];\n scheduleB[3][2] = [0xc, 0xd, 3, 2, 8];\n scheduleB[3][3] = [0xe, 0xf, 1, 0, 0xd];\n\n // changed 'in' to 'inn' (in javascript 'in' is a reserved word)\n this.keySchedule = function (inn) {\n var t = new Array(8);\n var k = new Array(32);\n\n var j = void 0;\n\n for (var i = 0; i < 4; i++) {\n j = i * 4;\n t[i] = inn[j] << 24 | inn[j + 1] << 16 | inn[j + 2] << 8 | inn[j + 3];\n }\n\n var x = [6, 7, 4, 5];\n var ki = 0;\n var w = void 0;\n\n for (var half = 0; half < 2; half++) {\n for (var round = 0; round < 4; round++) {\n for (j = 0; j < 4; j++) {\n var a = scheduleA[round][j];\n w = t[a[1]];\n\n w ^= sBox[4][t[a[2] >>> 2] >>> 24 - 8 * (a[2] & 3) & 0xff];\n w ^= sBox[5][t[a[3] >>> 2] >>> 24 - 8 * (a[3] & 3) & 0xff];\n w ^= sBox[6][t[a[4] >>> 2] >>> 24 - 8 * (a[4] & 3) & 0xff];\n w ^= sBox[7][t[a[5] >>> 2] >>> 24 - 8 * (a[5] & 3) & 0xff];\n w ^= sBox[x[j]][t[a[6] >>> 2] >>> 24 - 8 * (a[6] & 3) & 0xff];\n t[a[0]] = w;\n }\n\n for (j = 0; j < 4; j++) {\n var b = scheduleB[round][j];\n w = sBox[4][t[b[0] >>> 2] >>> 24 - 8 * (b[0] & 3) & 0xff];\n\n w ^= sBox[5][t[b[1] >>> 2] >>> 24 - 8 * (b[1] & 3) & 0xff];\n w ^= sBox[6][t[b[2] >>> 2] >>> 24 - 8 * (b[2] & 3) & 0xff];\n w ^= sBox[7][t[b[3] >>> 2] >>> 24 - 8 * (b[3] & 3) & 0xff];\n w ^= sBox[4 + j][t[b[4] >>> 2] >>> 24 - 8 * (b[4] & 3) & 0xff];\n k[ki] = w;\n ki++;\n }\n }\n }\n\n for (var _i = 0; _i < 16; _i++) {\n this.masking[_i] = k[_i];\n this.rotate[_i] = k[16 + _i] & 0x1f;\n }\n };\n\n // These are the three 'f' functions. See RFC 2144, section 2.2.\n\n function f1(d, m, r) {\n var t = m + d;\n var I = t << r | t >>> 32 - r;\n return (sBox[0][I >>> 24] ^ sBox[1][I >>> 16 & 255]) - sBox[2][I >>> 8 & 255] + sBox[3][I & 255];\n }\n\n function f2(d, m, r) {\n var t = m ^ d;\n var I = t << r | t >>> 32 - r;\n return sBox[0][I >>> 24] - sBox[1][I >>> 16 & 255] + sBox[2][I >>> 8 & 255] ^ sBox[3][I & 255];\n }\n\n function f3(d, m, r) {\n var t = m - d;\n var I = t << r | t >>> 32 - r;\n return (sBox[0][I >>> 24] + sBox[1][I >>> 16 & 255] ^ sBox[2][I >>> 8 & 255]) - sBox[3][I & 255];\n }\n\n var sBox = new Array(8);\n sBox[0] = [0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf];\n\n sBox[1] = [0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1];\n\n sBox[2] = [0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783];\n\n sBox[3] = [0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2];\n\n sBox[4] = [0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4];\n\n sBox[5] = [0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f];\n\n sBox[6] = [0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3];\n\n sBox[7] = [0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e];\n}\n\nfunction Cast5(key) {\n this.cast5 = new OpenpgpSymencCast5();\n this.cast5.setKey(key);\n\n this.encrypt = function (block) {\n return this.cast5.encrypt(block);\n };\n}\n\nCast5.blockSize = Cast5.prototype.blockSize = 8;\nCast5.keySize = Cast5.prototype.keySize = 16;\n\nexports.default = Cast5;\n\n},{}],331:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//Paul Tero, July 2001\n//http://www.tero.co.uk/des/\n//\n//Optimised for performance with large blocks by Michael Hayworth, November 2001\n//http://www.netdealing.com\n//\n// Modified by Recurity Labs GmbH\n\n//THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n//ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n//HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n//OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n//SUCH DAMAGE.\n\n//des\n//this takes the key, the message, and whether to encrypt or decrypt\n\nfunction des(keys, message, encrypt, mode, iv, padding) {\n //declaring this locally speeds things up a bit\n var spfunction1 = [0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400, 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000, 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4, 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404, 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400, 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004];\n var spfunction2 = [-0x7fef7fe0, -0x7fff8000, 0x8000, 0x108020, 0x100000, 0x20, -0x7fefffe0, -0x7fff7fe0, -0x7fffffe0, -0x7fef7fe0, -0x7fef8000, -0x80000000, -0x7fff8000, 0x100000, 0x20, -0x7fefffe0, 0x108000, 0x100020, -0x7fff7fe0, 0, -0x80000000, 0x8000, 0x108020, -0x7ff00000, 0x100020, -0x7fffffe0, 0, 0x108000, 0x8020, -0x7fef8000, -0x7ff00000, 0x8020, 0, 0x108020, -0x7fefffe0, 0x100000, -0x7fff7fe0, -0x7ff00000, -0x7fef8000, 0x8000, -0x7ff00000, -0x7fff8000, 0x20, -0x7fef7fe0, 0x108020, 0x20, 0x8000, -0x80000000, 0x8020, -0x7fef8000, 0x100000, -0x7fffffe0, 0x100020, -0x7fff7fe0, -0x7fffffe0, 0x100020, 0x108000, 0, -0x7fff8000, 0x8020, -0x80000000, -0x7fefffe0, -0x7fef7fe0, 0x108000];\n var spfunction3 = [0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008, 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000, 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000, 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0, 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208, 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200];\n var spfunction4 = [0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000, 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080, 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0, 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001, 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080];\n var spfunction5 = [0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000, 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000, 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100, 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100, 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100, 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0, 0x40080000, 0x2080100, 0x40000100];\n var spfunction6 = [0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000, 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010, 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000, 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000, 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000, 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010];\n var spfunction7 = [0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802, 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002, 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000, 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000, 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0, 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002];\n var spfunction8 = [0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000, 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000, 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040, 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000];\n\n //create the 16 or 48 subkeys we will need\n var m = 0;\n var i = void 0;\n var j = void 0;\n var temp = void 0;\n var right1 = void 0;\n var right2 = void 0;\n var left = void 0;\n var right = void 0;\n var looping = void 0;\n var cbcleft = void 0;\n var cbcleft2 = void 0;\n var cbcright = void 0;\n var cbcright2 = void 0;\n var endloop = void 0;\n var loopinc = void 0;\n var len = message.length;\n\n //set up the loops for single and triple des\n var iterations = keys.length === 32 ? 3 : 9; //single or triple des\n if (iterations === 3) {\n looping = encrypt ? [0, 32, 2] : [30, -2, -2];\n } else {\n looping = encrypt ? [0, 32, 2, 62, 30, -2, 64, 96, 2] : [94, 62, -2, 32, 64, 2, 30, -2, -2];\n }\n\n //pad the message depending on the padding parameter\n //only add padding if encrypting - note that you need to use the same padding option for both encrypt and decrypt\n if (encrypt) {\n message = des_addPadding(message, padding);\n len = message.length;\n }\n\n //store the result here\n var result = new Uint8Array(len);\n var k = 0;\n\n if (mode === 1) {\n //CBC mode\n cbcleft = iv[m++] << 24 | iv[m++] << 16 | iv[m++] << 8 | iv[m++];\n cbcright = iv[m++] << 24 | iv[m++] << 16 | iv[m++] << 8 | iv[m++];\n m = 0;\n }\n\n //loop through each 64 bit chunk of the message\n while (m < len) {\n left = message[m++] << 24 | message[m++] << 16 | message[m++] << 8 | message[m++];\n right = message[m++] << 24 | message[m++] << 16 | message[m++] << 8 | message[m++];\n\n //for Cipher Block Chaining mode, xor the message with the previous result\n if (mode === 1) {\n if (encrypt) {\n left ^= cbcleft;\n right ^= cbcright;\n } else {\n cbcleft2 = cbcleft;\n cbcright2 = cbcright;\n cbcleft = left;\n cbcright = right;\n }\n }\n\n //first each 64 but chunk of the message must be permuted according to IP\n temp = (left >>> 4 ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= temp << 4;\n temp = (left >>> 16 ^ right) & 0x0000ffff;\n right ^= temp;\n left ^= temp << 16;\n temp = (right >>> 2 ^ left) & 0x33333333;\n left ^= temp;\n right ^= temp << 2;\n temp = (right >>> 8 ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= temp << 8;\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n\n left = left << 1 | left >>> 31;\n right = right << 1 | right >>> 31;\n\n //do this either 1 or 3 times for each chunk of the message\n for (j = 0; j < iterations; j += 3) {\n endloop = looping[j + 1];\n loopinc = looping[j + 2];\n //now go through and perform the encryption or decryption\n for (i = looping[j]; i !== endloop; i += loopinc) {\n //for efficiency\n right1 = right ^ keys[i];\n right2 = (right >>> 4 | right << 28) ^ keys[i + 1];\n //the result is attained by passing these bytes through the S selection functions\n temp = left;\n left = right;\n right = temp ^ (spfunction2[right1 >>> 24 & 0x3f] | spfunction4[right1 >>> 16 & 0x3f] | spfunction6[right1 >>> 8 & 0x3f] | spfunction8[right1 & 0x3f] | spfunction1[right2 >>> 24 & 0x3f] | spfunction3[right2 >>> 16 & 0x3f] | spfunction5[right2 >>> 8 & 0x3f] | spfunction7[right2 & 0x3f]);\n }\n temp = left;\n left = right;\n right = temp; //unreverse left and right\n } //for either 1 or 3 iterations\n\n //move then each one bit to the right\n left = left >>> 1 | left << 31;\n right = right >>> 1 | right << 31;\n\n //now perform IP-1, which is IP in the opposite direction\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n temp = (right >>> 8 ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= temp << 8;\n temp = (right >>> 2 ^ left) & 0x33333333;\n left ^= temp;\n right ^= temp << 2;\n temp = (left >>> 16 ^ right) & 0x0000ffff;\n right ^= temp;\n left ^= temp << 16;\n temp = (left >>> 4 ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= temp << 4;\n\n //for Cipher Block Chaining mode, xor the message with the previous result\n if (mode === 1) {\n if (encrypt) {\n cbcleft = left;\n cbcright = right;\n } else {\n left ^= cbcleft2;\n right ^= cbcright2;\n }\n }\n\n result[k++] = left >>> 24;\n result[k++] = left >>> 16 & 0xff;\n result[k++] = left >>> 8 & 0xff;\n result[k++] = left & 0xff;\n result[k++] = right >>> 24;\n result[k++] = right >>> 16 & 0xff;\n result[k++] = right >>> 8 & 0xff;\n result[k++] = right & 0xff;\n } //for every 8 characters, or 64 bits in the message\n\n //only remove padding if decrypting - note that you need to use the same padding option for both encrypt and decrypt\n if (!encrypt) {\n result = des_removePadding(result, padding);\n }\n\n return result;\n} //end of des\n\n\n//des_createKeys\n//this takes as input a 64 bit key (even though only 56 bits are used)\n//as an array of 2 integers, and returns 16 48 bit keys\n\nfunction des_createKeys(key) {\n //declaring this locally speeds things up a bit\n var pc2bytes0 = [0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204, 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204];\n var pc2bytes1 = [0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100, 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101];\n var pc2bytes2 = [0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808];\n var pc2bytes3 = [0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000, 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000];\n var pc2bytes4 = [0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000, 0x41000, 0x1010, 0x41010];\n var pc2bytes5 = [0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420, 0x2000000, 0x2000400, 0x2000020, 0x2000420];\n var pc2bytes6 = [0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002];\n var pc2bytes7 = [0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000, 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800];\n var pc2bytes8 = [0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000, 0x2000002, 0x2040002, 0x2000002, 0x2040002];\n var pc2bytes9 = [0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408, 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408];\n var pc2bytes10 = [0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020, 0x102000, 0x102020, 0x102000, 0x102020];\n var pc2bytes11 = [0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000, 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200];\n var pc2bytes12 = [0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010, 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010];\n var pc2bytes13 = [0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105];\n\n //how many iterations (1 for des, 3 for triple des)\n var iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n //stores the return keys\n var keys = new Array(32 * iterations);\n //now define the left shifts which need to be done\n var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n //other variables\n var lefttemp = void 0;\n var righttemp = void 0;\n var m = 0;\n var n = 0;\n var temp = void 0;\n\n for (var j = 0; j < iterations; j++) {\n //either 1 or 3 iterations\n var left = key[m++] << 24 | key[m++] << 16 | key[m++] << 8 | key[m++];\n var right = key[m++] << 24 | key[m++] << 16 | key[m++] << 8 | key[m++];\n\n temp = (left >>> 4 ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= temp << 4;\n temp = (right >>> -16 ^ left) & 0x0000ffff;\n left ^= temp;\n right ^= temp << -16;\n temp = (left >>> 2 ^ right) & 0x33333333;\n right ^= temp;\n left ^= temp << 2;\n temp = (right >>> -16 ^ left) & 0x0000ffff;\n left ^= temp;\n right ^= temp << -16;\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n temp = (right >>> 8 ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= temp << 8;\n temp = (left >>> 1 ^ right) & 0x55555555;\n right ^= temp;\n left ^= temp << 1;\n\n //the right side needs to be shifted and to get the last four bits of the left side\n temp = left << 8 | right >>> 20 & 0x000000f0;\n //left needs to be put upside down\n left = right << 24 | right << 8 & 0xff0000 | right >>> 8 & 0xff00 | right >>> 24 & 0xf0;\n right = temp;\n\n //now go through and perform these shifts on the left and right keys\n for (var i = 0; i < shifts.length; i++) {\n //shift the keys either one or two bits to the left\n if (shifts[i]) {\n left = left << 2 | left >>> 26;\n right = right << 2 | right >>> 26;\n } else {\n left = left << 1 | left >>> 27;\n right = right << 1 | right >>> 27;\n }\n left &= -0xf;\n right &= -0xf;\n\n //now apply PC-2, in such a way that E is easier when encrypting or decrypting\n //this conversion will look like PC-2 except only the last 6 bits of each byte are used\n //rather than 48 consecutive bits and the order of lines will be according to\n //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7\n lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[left >>> 24 & 0xf] | pc2bytes2[left >>> 20 & 0xf] | pc2bytes3[left >>> 16 & 0xf] | pc2bytes4[left >>> 12 & 0xf] | pc2bytes5[left >>> 8 & 0xf] | pc2bytes6[left >>> 4 & 0xf];\n righttemp = pc2bytes7[right >>> 28] | pc2bytes8[right >>> 24 & 0xf] | pc2bytes9[right >>> 20 & 0xf] | pc2bytes10[right >>> 16 & 0xf] | pc2bytes11[right >>> 12 & 0xf] | pc2bytes12[right >>> 8 & 0xf] | pc2bytes13[right >>> 4 & 0xf];\n temp = (righttemp >>> 16 ^ lefttemp) & 0x0000ffff;\n keys[n++] = lefttemp ^ temp;\n keys[n++] = righttemp ^ temp << 16;\n }\n } //for each iterations\n //return the keys we've created\n return keys;\n} //end of des_createKeys\n\n\nfunction des_addPadding(message, padding) {\n var padLength = 8 - message.length % 8;\n\n var pad = void 0;\n if (padding === 2 && padLength < 8) {\n //pad the message with spaces\n pad = \" \".charCodeAt(0);\n } else if (padding === 1) {\n //PKCS7 padding\n pad = padLength;\n } else if (!padding && padLength < 8) {\n //pad the message out with null bytes\n pad = 0;\n } else if (padLength === 8) {\n return message;\n } else {\n throw new Error('des: invalid padding');\n }\n\n var paddedMessage = new Uint8Array(message.length + padLength);\n for (var i = 0; i < message.length; i++) {\n paddedMessage[i] = message[i];\n }\n for (var j = 0; j < padLength; j++) {\n paddedMessage[message.length + j] = pad;\n }\n\n return paddedMessage;\n}\n\nfunction des_removePadding(message, padding) {\n var padLength = null;\n var pad = void 0;\n if (padding === 2) {\n // space padded\n pad = \" \".charCodeAt(0);\n } else if (padding === 1) {\n // PKCS7\n padLength = message[message.length - 1];\n } else if (!padding) {\n // null padding\n pad = 0;\n } else {\n throw new Error('des: invalid padding');\n }\n\n if (!padLength) {\n padLength = 1;\n while (message[message.length - padLength] === pad) {\n padLength++;\n }\n padLength--;\n }\n\n return message.subarray(0, message.length - padLength);\n}\n\n// added by Recurity Labs\n\nfunction TripleDES(key) {\n this.key = [];\n\n for (var i = 0; i < 3; i++) {\n this.key.push(new Uint8Array(key.subarray(i * 8, i * 8 + 8)));\n }\n\n this.encrypt = function (block) {\n return des(des_createKeys(this.key[2]), des(des_createKeys(this.key[1]), des(des_createKeys(this.key[0]), block, true, 0, null, null), false, 0, null, null), true, 0, null, null);\n };\n}\n\nTripleDES.keySize = TripleDES.prototype.keySize = 24;\nTripleDES.blockSize = TripleDES.prototype.blockSize = 8;\n\n// This is \"original\" DES\n\nfunction DES(key) {\n this.key = key;\n\n this.encrypt = function (block, padding) {\n var keys = des_createKeys(this.key);\n return des(keys, block, true, 0, null, padding);\n };\n\n this.decrypt = function (block, padding) {\n var keys = des_createKeys(this.key);\n return des(keys, block, false, 0, null, padding);\n };\n}\n\nexports.default = { DES: DES, TripleDES: TripleDES };\n\n},{}],332:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _aes = _dereq_('./aes');\n\nvar _aes2 = _interopRequireDefault(_aes);\n\nvar _des = _dereq_('./des.js');\n\nvar _des2 = _interopRequireDefault(_des);\n\nvar _cast = _dereq_('./cast5');\n\nvar _cast2 = _interopRequireDefault(_cast);\n\nvar _twofish = _dereq_('./twofish');\n\nvar _twofish2 = _interopRequireDefault(_twofish);\n\nvar _blowfish = _dereq_('./blowfish');\n\nvar _blowfish2 = _interopRequireDefault(_blowfish);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n /**\n * AES-128 encryption and decryption (ID 7)\n * @function\n * @param {String} key 128-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n * @requires asmcrypto.js\n */\n aes128: (0, _aes2.default)(128),\n /**\n * AES-128 Block Cipher (ID 8)\n * @function\n * @param {String} key 192-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n * @requires asmcrypto.js\n */\n aes192: (0, _aes2.default)(192),\n /**\n * AES-128 Block Cipher (ID 9)\n * @function\n * @param {String} key 256-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n * @requires asmcrypto.js\n */\n aes256: (0, _aes2.default)(256),\n // Not in OpenPGP specifications\n des: _des2.default.DES,\n /**\n * Triple DES Block Cipher (ID 2)\n * @function\n * @param {String} key 192-bit key\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-67r2.pdf|NIST SP 800-67}\n * @returns {Object}\n */\n tripledes: _des2.default.TripleDES,\n /**\n * CAST-128 Block Cipher (ID 3)\n * @function\n * @param {String} key 128-bit key\n * @see {@link https://tools.ietf.org/html/rfc2144|The CAST-128 Encryption Algorithm}\n * @returns {Object}\n */\n cast5: _cast2.default,\n /**\n * Twofish Block Cipher (ID 10)\n * @function\n * @param {String} key 256-bit key\n * @see {@link https://tools.ietf.org/html/rfc4880#ref-TWOFISH|TWOFISH}\n * @returns {Object}\n */\n twofish: _twofish2.default,\n /**\n * Blowfish Block Cipher (ID 4)\n * @function\n * @param {String} key 128-bit key\n * @see {@link https://tools.ietf.org/html/rfc4880#ref-BLOWFISH|BLOWFISH}\n * @returns {Object}\n */\n blowfish: _blowfish2.default,\n /**\n * Not implemented\n * @function\n * @throws {Error}\n */\n idea: function idea() {\n throw new Error('IDEA symmetric-key algorithm not implemented');\n }\n}; /**\n * @fileoverview Symmetric cryptography functions\n * @requires crypto/cipher/aes\n * @requires crypto/cipher/des\n * @requires crypto/cipher/cast5\n * @requires crypto/cipher/twofish\n * @requires crypto/cipher/blowfish\n * @module crypto/cipher\n */\n\n},{\"./aes\":328,\"./blowfish\":329,\"./cast5\":330,\"./des.js\":331,\"./twofish\":333}],333:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _from = _dereq_(\"babel-runtime/core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable no-mixed-operators, no-fallthrough */\n\n/* Modified by Recurity Labs GmbH\n *\n * Cipher.js\n * A block-cipher algorithm implementation on JavaScript\n * See Cipher.readme.txt for further information.\n *\n * Copyright(c) 2009 Atsushi Oka [ http://oka.nu/ ]\n * This script file is distributed under the LGPL\n *\n * ACKNOWLEDGMENT\n *\n * The main subroutines are written by Michiel van Everdingen.\n *\n * Michiel van Everdingen\n * http://home.versatel.nl/MAvanEverdingen/index.html\n *\n * All rights for these routines are reserved to Michiel van Everdingen.\n *\n */\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n//Math\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nvar MAXINT = 0xFFFFFFFF;\n\nfunction rotw(w, n) {\n return (w << n | w >>> 32 - n) & MAXINT;\n}\n\nfunction getW(a, i) {\n return a[i] | a[i + 1] << 8 | a[i + 2] << 16 | a[i + 3] << 24;\n}\n\nfunction setW(a, i, w) {\n a.splice(i, 4, w & 0xFF, w >>> 8 & 0xFF, w >>> 16 & 0xFF, w >>> 24 & 0xFF);\n}\n\nfunction getB(x, n) {\n return x >>> n * 8 & 0xFF;\n}\n\n// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Twofish\n// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction createTwofish() {\n //\n var keyBytes = null;\n var dataBytes = null;\n var dataOffset = -1;\n // var dataLength = -1;\n // var idx2 = -1;\n //\n\n var tfsKey = [];\n var tfsM = [[], [], [], []];\n\n function tfsInit(key) {\n keyBytes = key;\n var i = void 0;\n var a = void 0;\n var b = void 0;\n var c = void 0;\n var d = void 0;\n var meKey = [];\n var moKey = [];\n var inKey = [];\n var kLen = void 0;\n var sKey = [];\n var f01 = void 0;\n var f5b = void 0;\n var fef = void 0;\n\n var q0 = [[8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4], [2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]];\n var q1 = [[14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13], [1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]];\n var q2 = [[11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1], [4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]];\n var q3 = [[13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10], [11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]];\n var ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15];\n var ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7];\n var q = [[], []];\n var m = [[], [], [], []];\n\n function ffm5b(x) {\n return x ^ x >> 2 ^ [0, 90, 180, 238][x & 3];\n }\n\n function ffmEf(x) {\n return x ^ x >> 1 ^ x >> 2 ^ [0, 238, 180, 90][x & 3];\n }\n\n function mdsRem(p, q) {\n var i = void 0;\n var t = void 0;\n var u = void 0;\n for (i = 0; i < 8; i++) {\n t = q >>> 24;\n q = q << 8 & MAXINT | p >>> 24;\n p = p << 8 & MAXINT;\n u = t << 1;\n if (t & 128) {\n u ^= 333;\n }\n q ^= t ^ u << 16;\n u ^= t >>> 1;\n if (t & 1) {\n u ^= 166;\n }\n q ^= u << 24 | u << 8;\n }\n return q;\n }\n\n function qp(n, x) {\n var a = x >> 4;\n var b = x & 15;\n var c = q0[n][a ^ b];\n var d = q1[n][ror4[b] ^ ashx[a]];\n return q3[n][ror4[d] ^ ashx[c]] << 4 | q2[n][c ^ d];\n }\n\n function hFun(x, key) {\n var a = getB(x, 0);\n var b = getB(x, 1);\n var c = getB(x, 2);\n var d = getB(x, 3);\n switch (kLen) {\n case 4:\n a = q[1][a] ^ getB(key[3], 0);\n b = q[0][b] ^ getB(key[3], 1);\n c = q[0][c] ^ getB(key[3], 2);\n d = q[1][d] ^ getB(key[3], 3);\n case 3:\n a = q[1][a] ^ getB(key[2], 0);\n b = q[1][b] ^ getB(key[2], 1);\n c = q[0][c] ^ getB(key[2], 2);\n d = q[0][d] ^ getB(key[2], 3);\n case 2:\n a = q[0][q[0][a] ^ getB(key[1], 0)] ^ getB(key[0], 0);\n b = q[0][q[1][b] ^ getB(key[1], 1)] ^ getB(key[0], 1);\n c = q[1][q[0][c] ^ getB(key[1], 2)] ^ getB(key[0], 2);\n d = q[1][q[1][d] ^ getB(key[1], 3)] ^ getB(key[0], 3);\n }\n return m[0][a] ^ m[1][b] ^ m[2][c] ^ m[3][d];\n }\n\n keyBytes = keyBytes.slice(0, 32);\n i = keyBytes.length;\n while (i !== 16 && i !== 24 && i !== 32) {\n keyBytes[i++] = 0;\n }\n\n for (i = 0; i < keyBytes.length; i += 4) {\n inKey[i >> 2] = getW(keyBytes, i);\n }\n for (i = 0; i < 256; i++) {\n q[0][i] = qp(0, i);\n q[1][i] = qp(1, i);\n }\n for (i = 0; i < 256; i++) {\n f01 = q[1][i];\n f5b = ffm5b(f01);\n fef = ffmEf(f01);\n m[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24);\n m[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24);\n f01 = q[0][i];\n f5b = ffm5b(f01);\n fef = ffmEf(f01);\n m[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24);\n m[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24);\n }\n\n kLen = inKey.length / 2;\n for (i = 0; i < kLen; i++) {\n a = inKey[i + i];\n meKey[i] = a;\n b = inKey[i + i + 1];\n moKey[i] = b;\n sKey[kLen - i - 1] = mdsRem(a, b);\n }\n for (i = 0; i < 40; i += 2) {\n a = 0x1010101 * i;\n b = a + 0x1010101;\n a = hFun(a, meKey);\n b = rotw(hFun(b, moKey), 8);\n tfsKey[i] = a + b & MAXINT;\n tfsKey[i + 1] = rotw(a + 2 * b, 9);\n }\n for (i = 0; i < 256; i++) {\n a = b = c = d = i;\n switch (kLen) {\n case 4:\n a = q[1][a] ^ getB(sKey[3], 0);\n b = q[0][b] ^ getB(sKey[3], 1);\n c = q[0][c] ^ getB(sKey[3], 2);\n d = q[1][d] ^ getB(sKey[3], 3);\n case 3:\n a = q[1][a] ^ getB(sKey[2], 0);\n b = q[1][b] ^ getB(sKey[2], 1);\n c = q[0][c] ^ getB(sKey[2], 2);\n d = q[0][d] ^ getB(sKey[2], 3);\n case 2:\n tfsM[0][i] = m[0][q[0][q[0][a] ^ getB(sKey[1], 0)] ^ getB(sKey[0], 0)];\n tfsM[1][i] = m[1][q[0][q[1][b] ^ getB(sKey[1], 1)] ^ getB(sKey[0], 1)];\n tfsM[2][i] = m[2][q[1][q[0][c] ^ getB(sKey[1], 2)] ^ getB(sKey[0], 2)];\n tfsM[3][i] = m[3][q[1][q[1][d] ^ getB(sKey[1], 3)] ^ getB(sKey[0], 3)];\n }\n }\n }\n\n function tfsG0(x) {\n return tfsM[0][getB(x, 0)] ^ tfsM[1][getB(x, 1)] ^ tfsM[2][getB(x, 2)] ^ tfsM[3][getB(x, 3)];\n }\n\n function tfsG1(x) {\n return tfsM[0][getB(x, 3)] ^ tfsM[1][getB(x, 0)] ^ tfsM[2][getB(x, 1)] ^ tfsM[3][getB(x, 2)];\n }\n\n function tfsFrnd(r, blk) {\n var a = tfsG0(blk[0]);\n var b = tfsG1(blk[1]);\n blk[2] = rotw(blk[2] ^ a + b + tfsKey[4 * r + 8] & MAXINT, 31);\n blk[3] = rotw(blk[3], 1) ^ a + 2 * b + tfsKey[4 * r + 9] & MAXINT;\n a = tfsG0(blk[2]);\n b = tfsG1(blk[3]);\n blk[0] = rotw(blk[0] ^ a + b + tfsKey[4 * r + 10] & MAXINT, 31);\n blk[1] = rotw(blk[1], 1) ^ a + 2 * b + tfsKey[4 * r + 11] & MAXINT;\n }\n\n function tfsIrnd(i, blk) {\n var a = tfsG0(blk[0]);\n var b = tfsG1(blk[1]);\n blk[2] = rotw(blk[2], 1) ^ a + b + tfsKey[4 * i + 10] & MAXINT;\n blk[3] = rotw(blk[3] ^ a + 2 * b + tfsKey[4 * i + 11] & MAXINT, 31);\n a = tfsG0(blk[2]);\n b = tfsG1(blk[3]);\n blk[0] = rotw(blk[0], 1) ^ a + b + tfsKey[4 * i + 8] & MAXINT;\n blk[1] = rotw(blk[1] ^ a + 2 * b + tfsKey[4 * i + 9] & MAXINT, 31);\n }\n\n function tfsClose() {\n tfsKey = [];\n tfsM = [[], [], [], []];\n }\n\n function tfsEncrypt(data, offset) {\n dataBytes = data;\n dataOffset = offset;\n var blk = [getW(dataBytes, dataOffset) ^ tfsKey[0], getW(dataBytes, dataOffset + 4) ^ tfsKey[1], getW(dataBytes, dataOffset + 8) ^ tfsKey[2], getW(dataBytes, dataOffset + 12) ^ tfsKey[3]];\n for (var j = 0; j < 8; j++) {\n tfsFrnd(j, blk);\n }\n setW(dataBytes, dataOffset, blk[2] ^ tfsKey[4]);\n setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[5]);\n setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[6]);\n setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[7]);\n dataOffset += 16;\n return dataBytes;\n }\n\n function tfsDecrypt(data, offset) {\n dataBytes = data;\n dataOffset = offset;\n var blk = [getW(dataBytes, dataOffset) ^ tfsKey[4], getW(dataBytes, dataOffset + 4) ^ tfsKey[5], getW(dataBytes, dataOffset + 8) ^ tfsKey[6], getW(dataBytes, dataOffset + 12) ^ tfsKey[7]];\n for (var j = 7; j >= 0; j--) {\n tfsIrnd(j, blk);\n }\n setW(dataBytes, dataOffset, blk[2] ^ tfsKey[0]);\n setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[1]);\n setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[2]);\n setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[3]);\n dataOffset += 16;\n }\n\n // added by Recurity Labs\n\n function tfsFinal() {\n return dataBytes;\n }\n\n return {\n name: \"twofish\",\n blocksize: 128 / 8,\n open: tfsInit,\n close: tfsClose,\n encrypt: tfsEncrypt,\n decrypt: tfsDecrypt,\n // added by Recurity Labs\n finalize: tfsFinal\n };\n}\n\n// added by Recurity Labs\n\nfunction TF(key) {\n this.tf = createTwofish();\n this.tf.open((0, _from2.default)(key), 0);\n\n this.encrypt = function (block) {\n return this.tf.encrypt((0, _from2.default)(block), 0);\n };\n}\n\nTF.keySize = TF.prototype.keySize = 32;\nTF.blockSize = TF.prototype.blockSize = 16;\n\nexports.default = TF;\n\n},{\"babel-runtime/core-js/array/from\":20}],334:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar CBC = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(key) {\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(_util2.default.getWebCrypto() && key.length !== 24)) {\n _context6.next = 5;\n break;\n }\n\n _context6.next = 3;\n return webCrypto.importKey('raw', key, { name: 'AES-CBC', length: key.length * 8 }, false, ['encrypt']);\n\n case 3:\n key = _context6.sent;\n return _context6.abrupt('return', function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(pt) {\n var ct;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return webCrypto.encrypt({ name: 'AES-CBC', iv: zeroBlock, length: blockLength * 8 }, key, pt);\n\n case 2:\n ct = _context3.sent;\n return _context3.abrupt('return', new Uint8Array(ct).subarray(0, ct.byteLength - blockLength));\n\n case 4:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4) {\n return _ref4.apply(this, arguments);\n };\n }());\n\n case 5:\n if (!_util2.default.getNodeCrypto()) {\n _context6.next = 8;\n break;\n }\n\n // Node crypto library\n key = new Buffer(key);\n return _context6.abrupt('return', function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(pt) {\n var en, ct;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n pt = new Buffer(pt);\n en = new nodeCrypto.createCipheriv('aes-' + key.length * 8 + '-cbc', key, zeroBlock);\n ct = en.update(pt);\n return _context4.abrupt('return', new Uint8Array(ct));\n\n case 4:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x5) {\n return _ref5.apply(this, arguments);\n };\n }());\n\n case 8:\n return _context6.abrupt('return', function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(pt) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n return _context5.abrupt('return', _exports.AES_CBC.encrypt(pt, key, false, zeroBlock));\n\n case 1:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function (_x6) {\n return _ref6.apply(this, arguments);\n };\n }());\n\n case 9:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function CBC(_x3) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/cbc/exports');\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview This module implements AES-CMAC on top of\n * native AES-CBC using either the WebCrypto API or Node.js' crypto API.\n * @requires asmcrypto.js\n * @requires util\n * @module crypto/cmac\n */\n\nvar webCrypto = _util2.default.getWebCrypto();\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\n/**\n * This implementation of CMAC is based on the description of OMAC in\n * http://web.cs.ucdavis.edu/~rogaway/papers/eax.pdf. As per that\n * document:\n *\n * We have made a small modification to the OMAC algorithm as it was\n * originally presented, changing one of its two constants.\n * Specifically, the constant 4 at line 85 was the constant 1/2 (the\n * multiplicative inverse of 2) in the original definition of OMAC [14].\n * The OMAC authors indicate that they will promulgate this modification\n * [15], which slightly simplifies implementations.\n */\n\nvar blockLength = 16;\n\n/**\n * xor `padding` into the end of `data`. This function implements \"the\n * operation xor→ [which] xors the shorter string into the end of longer\n * one\". Since data is always as least as long as padding, we can\n * simplify the implementation.\n * @param {Uint8Array} data\n * @param {Uint8Array} padding\n */\nfunction rightXorMut(data, padding) {\n var offset = data.length - blockLength;\n for (var i = 0; i < blockLength; i++) {\n data[i + offset] ^= padding[i];\n }\n return data;\n}\n\nfunction pad(data, padding, padding2) {\n // if |M| in {n, 2n, 3n, ...}\n if (data.length % blockLength === 0) {\n // then return M xor→ B,\n return rightXorMut(data, padding);\n }\n // else return (M || 10^(n−1−(|M| mod n))) xor→ P\n var padded = new Uint8Array(data.length + (blockLength - data.length % blockLength));\n padded.set(data);\n padded[data.length] = 128;\n return rightXorMut(padded, padding2);\n}\n\nvar zeroBlock = new Uint8Array(blockLength);\n\nexports.default = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(key) {\n var cbc, padding, padding2;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return CBC(key);\n\n case 2:\n cbc = _context2.sent;\n _context2.t0 = _util2.default;\n _context2.next = 6;\n return cbc(zeroBlock);\n\n case 6:\n _context2.t1 = _context2.sent;\n padding = _context2.t0.double.call(_context2.t0, _context2.t1);\n padding2 = _util2.default.double(padding);\n return _context2.abrupt('return', function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(data) {\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return cbc(pad(data, padding, padding2));\n\n case 2:\n _context.t0 = -blockLength;\n return _context.abrupt('return', _context.sent.subarray(_context.t0));\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n\n case 10:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function CMAC(_x) {\n return _ref.apply(this, arguments);\n }\n\n return CMAC;\n}();\n\n},{\"../util\":398,\"asmcrypto.js/src/aes/cbc/exports\":5,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],335:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _random = _dereq_('./random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _ecdh_symkey = _dereq_('../type/ecdh_symkey');\n\nvar _ecdh_symkey2 = _interopRequireDefault(_ecdh_symkey);\n\nvar _kdf_params = _dereq_('../type/kdf_params');\n\nvar _kdf_params2 = _interopRequireDefault(_kdf_params);\n\nvar _mpi = _dereq_('../type/mpi');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _oid = _dereq_('../type/oid');\n\nvar _oid2 = _interopRequireDefault(_oid);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// The GPG4Browsers crypto interface\n\n/**\n * @fileoverview Provides functions for asymmetric encryption and decryption as\n * well as key generation and parameter handling for all public-key cryptosystems.\n * @requires crypto/public_key\n * @requires crypto/cipher\n * @requires crypto/random\n * @requires type/ecdh_symkey\n * @requires type/kdf_params\n * @requires type/mpi\n * @requires type/oid\n * @requires enums\n * @module crypto/crypto\n */\n\nfunction constructParams(types, data) {\n return types.map(function (type, i) {\n if (data && data[i]) {\n return new type(data[i]);\n }\n return new type();\n });\n}\n\nexports.default = {\n /**\n * Encrypts data using specified algorithm and public key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1} for public key algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {Array<module:type/mpi|\n module:type/oid|\n module:type/kdf_params>} pub_params Algorithm-specific public key parameters\n * @param {module:type/mpi} data Data to be encrypted as MPI\n * @param {String} fingerprint Recipient fingerprint\n * @returns {Array<module:type/mpi|\n * module:type/ecdh_symkey>} encrypted session key parameters\n * @async\n */\n publicKeyEncrypt: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(algo, pub_params, data, fingerprint) {\n var types;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n types = this.getEncSessionKeyParamTypes(algo);\n return _context2.abrupt('return', (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n var m, n, e, res, _m, p, g, y, _res, oid, Q, kdf_params, _res2;\n\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = algo;\n _context.next = _context.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context.t0 === _enums2.default.publicKey.elgamal ? 10 : _context.t0 === _enums2.default.publicKey.ecdh ? 18 : 25;\n break;\n\n case 3:\n m = data.toBN();\n n = pub_params[0].toBN();\n e = pub_params[1].toBN();\n _context.next = 8;\n return _public_key2.default.rsa.encrypt(m, n, e);\n\n case 8:\n res = _context.sent;\n return _context.abrupt('return', constructParams(types, [res]));\n\n case 10:\n _m = data.toBN();\n p = pub_params[0].toBN();\n g = pub_params[1].toBN();\n y = pub_params[2].toBN();\n _context.next = 16;\n return _public_key2.default.elgamal.encrypt(_m, p, g, y);\n\n case 16:\n _res = _context.sent;\n return _context.abrupt('return', constructParams(types, [_res.c1, _res.c2]));\n\n case 18:\n oid = pub_params[0];\n Q = pub_params[1].toUint8Array();\n kdf_params = pub_params[2];\n _context.next = 23;\n return _public_key2.default.elliptic.ecdh.encrypt(oid, kdf_params.cipher, kdf_params.hash, data, Q, fingerprint);\n\n case 23:\n _res2 = _context.sent;\n return _context.abrupt('return', constructParams(types, [_res2.V, _res2.C]));\n\n case 25:\n return _context.abrupt('return', []);\n\n case 26:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }))());\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function publicKeyEncrypt(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n }\n\n return publicKeyEncrypt;\n }(),\n\n /**\n * Decrypts data using specified algorithm and private key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1} for public key algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {Array<module:type/mpi|\n module:type/oid|\n module:type/kdf_params>} key_params Algorithm-specific public, private key parameters\n * @param {Array<module:type/mpi|\n module:type/ecdh_symkey>}\n data_params encrypted session key parameters\n * @param {String} fingerprint Recipient fingerprint\n * @returns {module:type/mpi} An MPI containing the decrypted data\n * @async\n */\n publicKeyDecrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(algo, key_params, data_params, fingerprint) {\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.t0 = _mpi2.default;\n _context4.next = 3;\n return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {\n var c, n, e, d, p, q, u, c1, c2, _p, x, oid, kdf_params, V, C, _d;\n\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.t0 = algo;\n _context3.next = _context3.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context3.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context3.t0 === _enums2.default.publicKey.elgamal ? 11 : _context3.t0 === _enums2.default.publicKey.ecdh ? 16 : 22;\n break;\n\n case 3:\n c = data_params[0].toBN();\n n = key_params[0].toBN(); // n = pq\n\n e = key_params[1].toBN();\n d = key_params[2].toBN(); // de = 1 mod (p-1)(q-1)\n\n p = key_params[3].toBN();\n q = key_params[4].toBN();\n u = key_params[5].toBN(); // q^-1 mod p\n\n return _context3.abrupt('return', _public_key2.default.rsa.decrypt(c, n, e, d, p, q, u));\n\n case 11:\n c1 = data_params[0].toBN();\n c2 = data_params[1].toBN();\n _p = key_params[0].toBN();\n x = key_params[3].toBN();\n return _context3.abrupt('return', _public_key2.default.elgamal.decrypt(c1, c2, _p, x));\n\n case 16:\n oid = key_params[0];\n kdf_params = key_params[2];\n V = data_params[0].toUint8Array();\n C = data_params[1].data;\n _d = key_params[3].toUint8Array();\n return _context3.abrupt('return', _public_key2.default.elliptic.ecdh.decrypt(oid, kdf_params.cipher, kdf_params.hash, V, C, _d, fingerprint));\n\n case 22:\n throw new Error('Invalid public key encryption algorithm.');\n\n case 23:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }))();\n\n case 3:\n _context4.t1 = _context4.sent;\n return _context4.abrupt('return', new _context4.t0(_context4.t1));\n\n case 5:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function publicKeyDecrypt(_x5, _x6, _x7, _x8) {\n return _ref3.apply(this, arguments);\n }\n\n return publicKeyDecrypt;\n }(),\n\n /** Returns the types comprising the private key of an algorithm\n * @param {String} algo The public key algorithm\n * @returns {Array<String>} The array of types\n */\n getPrivKeyParamTypes: function getPrivKeyParamTypes(algo) {\n switch (algo) {\n // Algorithm-Specific Fields for RSA secret keys:\n // - multiprecision integer (MPI) of RSA secret exponent d.\n // - MPI of RSA secret prime value p.\n // - MPI of RSA secret prime value q (p < q).\n // - MPI of u, the multiplicative inverse of p, mod q.\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n case _enums2.default.publicKey.rsa_sign:\n return [_mpi2.default, _mpi2.default, _mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for Elgamal secret keys:\n // - MPI of Elgamal secret exponent x.\n case _enums2.default.publicKey.elgamal:\n return [_mpi2.default];\n // Algorithm-Specific Fields for DSA secret keys:\n // - MPI of DSA secret exponent x.\n case _enums2.default.publicKey.dsa:\n return [_mpi2.default];\n // Algorithm-Specific Fields for ECDSA or ECDH secret keys:\n // - MPI of an integer representing the secret key.\n case _enums2.default.publicKey.ecdh:\n case _enums2.default.publicKey.ecdsa:\n case _enums2.default.publicKey.eddsa:\n return [_mpi2.default];\n default:\n throw new Error('Invalid public key encryption algorithm.');\n }\n },\n\n /** Returns the types comprising the public key of an algorithm\n * @param {String} algo The public key algorithm\n * @returns {Array<String>} The array of types\n */\n getPubKeyParamTypes: function getPubKeyParamTypes(algo) {\n switch (algo) {\n // Algorithm-Specific Fields for RSA public keys:\n // - a multiprecision integer (MPI) of RSA public modulus n;\n // - an MPI of RSA public encryption exponent e.\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n case _enums2.default.publicKey.rsa_sign:\n return [_mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for Elgamal public keys:\n // - MPI of Elgamal prime p;\n // - MPI of Elgamal group generator g;\n // - MPI of Elgamal public key value y (= g**x mod p where x is secret).\n case _enums2.default.publicKey.elgamal:\n return [_mpi2.default, _mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for DSA public keys:\n // - MPI of DSA prime p;\n // - MPI of DSA group order q (q is a prime divisor of p-1);\n // - MPI of DSA group generator g;\n // - MPI of DSA public-key value y (= g**x mod p where x is secret).\n case _enums2.default.publicKey.dsa:\n return [_mpi2.default, _mpi2.default, _mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for ECDSA/EdDSA public keys:\n // - OID of curve;\n // - MPI of EC point representing public key.\n case _enums2.default.publicKey.ecdsa:\n case _enums2.default.publicKey.eddsa:\n return [_oid2.default, _mpi2.default];\n // Algorithm-Specific Fields for ECDH public keys:\n // - OID of curve;\n // - MPI of EC point representing public key.\n // - KDF: variable-length field containing KDF parameters.\n case _enums2.default.publicKey.ecdh:\n return [_oid2.default, _mpi2.default, _kdf_params2.default];\n default:\n throw new Error('Invalid public key encryption algorithm.');\n }\n },\n\n /** Returns the types comprising the encrypted session key of an algorithm\n * @param {String} algo The public key algorithm\n * @returns {Array<String>} The array of types\n */\n getEncSessionKeyParamTypes: function getEncSessionKeyParamTypes(algo) {\n switch (algo) {\n // Algorithm-Specific Fields for RSA encrypted session keys:\n // - MPI of RSA encrypted value m**e mod n.\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n return [_mpi2.default];\n\n // Algorithm-Specific Fields for Elgamal encrypted session keys:\n // - MPI of Elgamal value g**k mod p\n // - MPI of Elgamal value m * y**k mod p\n case _enums2.default.publicKey.elgamal:\n return [_mpi2.default, _mpi2.default];\n // Algorithm-Specific Fields for ECDH encrypted session keys:\n // - MPI containing the ephemeral key used to establish the shared secret\n // - ECDH Symmetric Key\n case _enums2.default.publicKey.ecdh:\n return [_mpi2.default, _ecdh_symkey2.default];\n default:\n throw new Error('Invalid public key encryption algorithm.');\n }\n },\n\n /** Generate algorithm-specific key parameters\n * @param {String} algo The public key algorithm\n * @param {Integer} bits Bit length for RSA keys\n * @param {module:type/oid} oid Object identifier for ECC keys\n * @returns {Array} The array of parameters\n * @async\n */\n generateParams: function generateParams(algo, bits, oid) {\n var types = [].concat(this.getPubKeyParamTypes(algo), this.getPrivKeyParamTypes(algo));\n switch (algo) {\n case _enums2.default.publicKey.rsa_encrypt:\n case _enums2.default.publicKey.rsa_encrypt_sign:\n case _enums2.default.publicKey.rsa_sign:\n {\n return _public_key2.default.rsa.generate(bits, \"10001\").then(function (keyObject) {\n return constructParams(types, [keyObject.n, keyObject.e, keyObject.d, keyObject.p, keyObject.q, keyObject.u]);\n });\n }\n case _enums2.default.publicKey.dsa:\n case _enums2.default.publicKey.elgamal:\n throw new Error('Unsupported algorithm for key generation.');\n case _enums2.default.publicKey.ecdsa:\n case _enums2.default.publicKey.eddsa:\n return _public_key2.default.elliptic.generate(oid).then(function (keyObject) {\n return constructParams(types, [keyObject.oid, keyObject.Q, keyObject.d]);\n });\n case _enums2.default.publicKey.ecdh:\n return _public_key2.default.elliptic.generate(oid).then(function (keyObject) {\n return constructParams(types, [keyObject.oid, keyObject.Q, [keyObject.hash, keyObject.cipher], keyObject.d]);\n });\n default:\n throw new Error('Invalid public key algorithm.');\n }\n },\n\n /**\n * Generates a random byte prefix for the specified algorithm\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} algo Symmetric encryption algorithm\n * @returns {Uint8Array} Random bytes with length equal to the block size of the cipher\n * @async\n */\n getPrefixRandom: function getPrefixRandom(algo) {\n return _random2.default.getRandomBytes(_cipher2.default[algo].blockSize);\n },\n\n /**\n * Generating a session key for the specified symmetric algorithm\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} algo Symmetric encryption algorithm\n * @returns {Uint8Array} Random bytes as a string to be used as a key\n * @async\n */\n generateSessionKey: function generateSessionKey(algo) {\n return _random2.default.getRandomBytes(_cipher2.default[algo].keySize);\n },\n\n constructParams: constructParams\n};\n\n},{\"../enums\":359,\"../type/ecdh_symkey\":392,\"../type/kdf_params\":393,\"../type/mpi\":395,\"../type/oid\":396,\"./cipher\":332,\"./public_key\":352,\"./random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],336:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar OMAC = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(key) {\n var cmac;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _cmac2.default)(key);\n\n case 2:\n cmac = _context.sent;\n return _context.abrupt('return', function (t, message) {\n return cmac(_util2.default.concatUint8Array([t, message]));\n });\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function OMAC(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\nvar CTR = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(key) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(_util2.default.getWebCrypto() && key.length !== 24)) {\n _context5.next = 5;\n break;\n }\n\n _context5.next = 3;\n return webCrypto.importKey('raw', key, { name: 'AES-CTR', length: key.length * 8 }, false, ['encrypt']);\n\n case 3:\n key = _context5.sent;\n return _context5.abrupt('return', function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(pt, iv) {\n var ct;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return webCrypto.encrypt({ name: 'AES-CTR', counter: iv, length: blockLength * 8 }, key, pt);\n\n case 2:\n ct = _context2.sent;\n return _context2.abrupt('return', new Uint8Array(ct));\n\n case 4:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref3.apply(this, arguments);\n };\n }());\n\n case 5:\n if (!_util2.default.getNodeCrypto()) {\n _context5.next = 8;\n break;\n }\n\n // Node crypto library\n key = new Buffer(key);\n return _context5.abrupt('return', function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(pt, iv) {\n var en, ct;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n pt = new Buffer(pt);\n iv = new Buffer(iv);\n en = new nodeCrypto.createCipheriv('aes-' + key.length * 8 + '-ctr', key, iv);\n ct = Buffer.concat([en.update(pt), en.final()]);\n return _context3.abrupt('return', new Uint8Array(ct));\n\n case 5:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x5, _x6) {\n return _ref4.apply(this, arguments);\n };\n }());\n\n case 8:\n return _context5.abrupt('return', function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(pt, iv) {\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n return _context4.abrupt('return', _exports.AES_CTR.encrypt(pt, key, iv));\n\n case 1:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x7, _x8) {\n return _ref5.apply(this, arguments);\n };\n }());\n\n case 9:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function CTR(_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Class to en/decrypt using EAX mode.\n * @param {String} cipher The symmetric cipher algorithm to use e.g. 'aes128'\n * @param {Uint8Array} key The encryption key\n */\n\n\nvar EAX = function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(cipher, key) {\n var _ref7, _ref8, omac, ctr;\n\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (!(cipher.substr(0, 3) !== 'aes')) {\n _context8.next = 2;\n break;\n }\n\n throw new Error('EAX mode supports only AES cipher');\n\n case 2:\n _context8.next = 4;\n return _promise2.default.all([OMAC(key), CTR(key)]);\n\n case 4:\n _ref7 = _context8.sent;\n _ref8 = (0, _slicedToArray3.default)(_ref7, 2);\n omac = _ref8[0];\n ctr = _ref8[1];\n return _context8.abrupt('return', {\n /**\n * Encrypt plaintext input.\n * @param {Uint8Array} plaintext The cleartext input to be encrypted\n * @param {Uint8Array} nonce The nonce (16 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext output\n */\n encrypt: function () {\n var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(plaintext, nonce, adata) {\n var _ref10, _ref11, omacNonce, omacAdata, ciphered, omacCiphered, tag, i;\n\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return _promise2.default.all([omac(zero, nonce), omac(one, adata)]);\n\n case 2:\n _ref10 = _context6.sent;\n _ref11 = (0, _slicedToArray3.default)(_ref10, 2);\n omacNonce = _ref11[0];\n omacAdata = _ref11[1];\n _context6.next = 8;\n return ctr(plaintext, omacNonce);\n\n case 8:\n ciphered = _context6.sent;\n _context6.next = 11;\n return omac(two, ciphered);\n\n case 11:\n omacCiphered = _context6.sent;\n tag = omacCiphered; // Assumes that omac(*).length === tagLength.\n\n for (i = 0; i < tagLength; i++) {\n tag[i] ^= omacAdata[i] ^ omacNonce[i];\n }\n return _context6.abrupt('return', _util2.default.concatUint8Array([ciphered, tag]));\n\n case 15:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n function encrypt(_x11, _x12, _x13) {\n return _ref9.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * Decrypt ciphertext input.\n * @param {Uint8Array} ciphertext The ciphertext input to be decrypted\n * @param {Uint8Array} nonce The nonce (16 bytes)\n * @param {Uint8Array} adata Associated data to verify\n * @returns {Promise<Uint8Array>} The plaintext output\n */\n decrypt: function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ciphertext, nonce, adata) {\n var ciphered, ctTag, _ref13, _ref14, omacNonce, omacAdata, omacCiphered, tag, i, plaintext;\n\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(ciphertext.length < tagLength)) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('Invalid EAX ciphertext');\n\n case 2:\n ciphered = ciphertext.subarray(0, -tagLength);\n ctTag = ciphertext.subarray(-tagLength);\n _context7.next = 6;\n return _promise2.default.all([omac(zero, nonce), omac(one, adata), omac(two, ciphered)]);\n\n case 6:\n _ref13 = _context7.sent;\n _ref14 = (0, _slicedToArray3.default)(_ref13, 3);\n omacNonce = _ref14[0];\n omacAdata = _ref14[1];\n omacCiphered = _ref14[2];\n tag = omacCiphered; // Assumes that omac(*).length === tagLength.\n\n for (i = 0; i < tagLength; i++) {\n tag[i] ^= omacAdata[i] ^ omacNonce[i];\n }\n\n if (_util2.default.equalsUint8Array(ctTag, tag)) {\n _context7.next = 15;\n break;\n }\n\n throw new Error('Authentication tag mismatch');\n\n case 15:\n _context7.next = 17;\n return ctr(ciphered, omacNonce);\n\n case 17:\n plaintext = _context7.sent;\n return _context7.abrupt('return', plaintext);\n\n case 19:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n function decrypt(_x14, _x15, _x16) {\n return _ref12.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 9:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function EAX(_x9, _x10) {\n return _ref6.apply(this, arguments);\n };\n}();\n\n/**\n * Get EAX nonce as defined by {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.1|RFC4880bis-04, section 5.16.1}.\n * @param {Uint8Array} iv The initialization vector (16 bytes)\n * @param {Uint8Array} chunkIndex The chunk index (8 bytes)\n */\n\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/ctr/exports');\n\nvar _cmac = _dereq_('./cmac');\n\nvar _cmac2 = _interopRequireDefault(_cmac);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar webCrypto = _util2.default.getWebCrypto(); // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 ProtonTech AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements AES-EAX en/decryption on top of\n * native AES-CTR using either the WebCrypto API or Node.js' crypto API.\n * @requires asmcrypto.js\n * @requires crypto/cmac\n * @requires util\n * @module crypto/eax\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nvar blockLength = 16;\nvar ivLength = blockLength;\nvar tagLength = blockLength;\n\nvar zero = new Uint8Array(blockLength);\nvar one = new Uint8Array(blockLength);one[blockLength - 1] = 1;\nvar two = new Uint8Array(blockLength);two[blockLength - 1] = 2;\n\nEAX.getNonce = function (iv, chunkIndex) {\n var nonce = iv.slice();\n for (var i = 0; i < chunkIndex.length; i++) {\n nonce[8 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nEAX.blockLength = blockLength;\nEAX.ivLength = ivLength;\nEAX.tagLength = tagLength;\n\nexports.default = EAX;\n\n},{\"../util\":398,\"./cmac\":334,\"asmcrypto.js/src/aes/ctr/exports\":9,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/slicedToArray\":40,\"babel-runtime/regenerator\":42}],337:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Class to en/decrypt using GCM mode.\n * @param {String} cipher The symmetric cipher algorithm to use e.g. 'aes128'\n * @param {Uint8Array} key The encryption key\n */\nvar GCM = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(cipher, key) {\n var _key;\n\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(cipher.substr(0, 3) !== 'aes')) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('GCM mode supports only AES cipher');\n\n case 2:\n if (!(_util2.default.getWebCrypto() && key.length !== 24)) {\n _context7.next = 7;\n break;\n }\n\n _context7.next = 5;\n return webCrypto.importKey('raw', key, { name: ALGO }, false, ['encrypt', 'decrypt']);\n\n case 5:\n _key = _context7.sent;\n return _context7.abrupt('return', {\n encrypt: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(pt, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var ct;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (pt.length) {\n _context.next = 2;\n break;\n }\n\n return _context.abrupt('return', _exports.AES_GCM.encrypt(pt, key, iv, adata));\n\n case 2:\n _context.next = 4;\n return webCrypto.encrypt({ name: ALGO, iv: iv, additionalData: adata }, _key, pt);\n\n case 4:\n ct = _context.sent;\n return _context.abrupt('return', new Uint8Array(ct));\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function encrypt(_x3, _x4) {\n return _ref2.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n decrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ct, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var pt;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(ct.length === tagLength)) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt('return', _exports.AES_GCM.decrypt(ct, key, iv, adata));\n\n case 2:\n _context2.next = 4;\n return webCrypto.decrypt({ name: ALGO, iv: iv, additionalData: adata }, _key, ct);\n\n case 4:\n pt = _context2.sent;\n return _context2.abrupt('return', new Uint8Array(pt));\n\n case 6:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function decrypt(_x6, _x7) {\n return _ref3.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 7:\n if (!_util2.default.getNodeCrypto()) {\n _context7.next = 10;\n break;\n }\n\n // Node crypto library\n key = new Buffer(key);\n\n return _context7.abrupt('return', {\n encrypt: function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(pt, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var en, ct;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n pt = new Buffer(pt);\n iv = new Buffer(iv);\n adata = new Buffer(adata);\n en = new nodeCrypto.createCipheriv('aes-' + key.length * 8 + '-gcm', key, iv);\n\n en.setAAD(adata);\n ct = Buffer.concat([en.update(pt), en.final(), en.getAuthTag()]); // append auth tag to ciphertext\n\n return _context3.abrupt('return', new Uint8Array(ct));\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function encrypt(_x9, _x10) {\n return _ref4.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n decrypt: function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(ct, iv) {\n var adata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Uint8Array();\n var de, pt;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n ct = new Buffer(ct);\n iv = new Buffer(iv);\n adata = new Buffer(adata);\n de = new nodeCrypto.createDecipheriv('aes-' + key.length * 8 + '-gcm', key, iv);\n\n de.setAAD(adata);\n de.setAuthTag(ct.slice(ct.length - tagLength, ct.length)); // read auth tag at end of ciphertext\n pt = Buffer.concat([de.update(ct.slice(0, ct.length - tagLength)), de.final()]);\n return _context4.abrupt('return', new Uint8Array(pt));\n\n case 8:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function decrypt(_x12, _x13) {\n return _ref5.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 10:\n return _context7.abrupt('return', {\n encrypt: function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(pt, iv, adata) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n return _context5.abrupt('return', _exports.AES_GCM.encrypt(pt, key, iv, adata));\n\n case 1:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n function encrypt(_x15, _x16, _x17) {\n return _ref6.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n decrypt: function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ct, iv, adata) {\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n return _context6.abrupt('return', _exports.AES_GCM.decrypt(ct, key, iv, adata));\n\n case 1:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n function decrypt(_x18, _x19, _x20) {\n return _ref7.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 11:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function GCM(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Get GCM nonce. Note: this operation is not defined by the standard.\n * A future version of the standard may define GCM mode differently,\n * hopefully under a different ID (we use Private/Experimental algorithm\n * ID 100) so that we can maintain backwards compatibility.\n * @param {Uint8Array} iv The initialization vector (12 bytes)\n * @param {Uint8Array} chunkIndex The chunk index (8 bytes)\n */\n\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/gcm/exports');\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module wraps native AES-GCM en/decryption for both\n * the WebCrypto api as well as node.js' crypto api.\n * @requires asmcrypto.js\n * @requires util\n * @module crypto/gcm\n */\n\nvar webCrypto = _util2.default.getWebCrypto(); // no GCM support in IE11, Safari 9\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nvar blockLength = 16;\nvar ivLength = 12; // size of the IV in bytes\nvar tagLength = 16; // size of the tag in bytes\nvar ALGO = 'AES-GCM';GCM.getNonce = function (iv, chunkIndex) {\n var nonce = iv.slice();\n for (var i = 0; i < chunkIndex.length; i++) {\n nonce[4 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nGCM.blockLength = blockLength;\nGCM.ivLength = ivLength;\nGCM.tagLength = tagLength;\n\nexports.default = GCM;\n\n},{\"../util\":398,\"asmcrypto.js/src/aes/gcm/exports\":12,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],338:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rusha = _dereq_('rusha');\n\nvar _rusha2 = _interopRequireDefault(_rusha);\n\nvar _exports = _dereq_('asmcrypto.js/src/hash/sha256/exports');\n\nvar _ = _dereq_('hash.js/lib/hash/sha/224');\n\nvar _2 = _interopRequireDefault(_);\n\nvar _3 = _dereq_('hash.js/lib/hash/sha/384');\n\nvar _4 = _interopRequireDefault(_3);\n\nvar _5 = _dereq_('hash.js/lib/hash/sha/512');\n\nvar _6 = _interopRequireDefault(_5);\n\nvar _ripemd = _dereq_('hash.js/lib/hash/ripemd');\n\nvar _md = _dereq_('./md5');\n\nvar _md2 = _interopRequireDefault(_md);\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview Provides an interface to hashing functions available in Node.js or external libraries.\n * @see {@link https://github.com/srijs/rusha|Rusha}\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://github.com/indutny/hash.js|hash.js}\n * @requires rusha\n * @requires asmcrypto.js\n * @requires hash.js\n * @requires crypto/hash/md5\n * @requires util\n * @module crypto/hash\n */\n\nvar rusha = new _rusha2.default();\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nfunction node_hash(type) {\n return function (data) {\n var shasum = nodeCrypto.createHash(type);\n shasum.update(new Buffer(data));\n return new Uint8Array(shasum.digest());\n };\n}\n\nfunction hashjs_hash(hash) {\n return function (data) {\n return _util2.default.hex_to_Uint8Array(hash().update(data).digest('hex'));\n };\n}\n\nvar hash_fns = void 0;\nif (nodeCrypto) {\n // Use Node native crypto for all hash functions\n hash_fns = {\n md5: node_hash('md5'),\n sha1: node_hash('sha1'),\n sha224: node_hash('sha224'),\n sha256: node_hash('sha256'),\n sha384: node_hash('sha384'),\n sha512: node_hash('sha512'),\n ripemd: node_hash('ripemd160')\n };\n} else {\n // Use JS fallbacks\n hash_fns = {\n md5: _md2.default,\n sha1: function sha1(data) {\n return _util2.default.hex_to_Uint8Array(rusha.digest(data));\n },\n sha224: hashjs_hash(_2.default),\n sha256: _exports.SHA256.bytes,\n sha384: hashjs_hash(_4.default),\n // TODO, benchmark this vs asmCrypto's SHA512\n sha512: hashjs_hash(_6.default),\n ripemd: hashjs_hash(_ripemd.ripemd160)\n };\n}\n\nexports.default = {\n\n /** @see module:md5 */\n md5: hash_fns.md5,\n /** @see rusha */\n sha1: hash_fns.sha1,\n /** @see hash.js */\n sha224: hash_fns.sha224,\n /** @see asmCrypto */\n sha256: hash_fns.sha256,\n /** @see hash.js */\n sha384: hash_fns.sha384,\n /** @see hash.js */\n sha512: hash_fns.sha512,\n /** @see hash.js */\n ripemd: hash_fns.ripemd,\n\n /**\n * Create a hash on the specified data using the specified algorithm\n * @param {module:enums.hash} algo Hash algorithm type (see {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4})\n * @param {Uint8Array} data Data to be hashed\n * @returns {Uint8Array} hash value\n */\n digest: function digest(algo, data) {\n switch (algo) {\n case 1:\n // - MD5 [HAC]\n return this.md5(data);\n case 2:\n // - SHA-1 [FIPS180]\n return this.sha1(data);\n case 3:\n // - RIPE-MD/160 [HAC]\n return this.ripemd(data);\n case 8:\n // - SHA256 [FIPS180]\n return this.sha256(data);\n case 9:\n // - SHA384 [FIPS180]\n return this.sha384(data);\n case 10:\n // - SHA512 [FIPS180]\n return this.sha512(data);\n case 11:\n // - SHA224 [FIPS180]\n return this.sha224(data);\n default:\n throw new Error('Invalid hash function.');\n }\n },\n\n /**\n * Returns the hash size in bytes of the specified hash algorithm type\n * @param {module:enums.hash} algo Hash algorithm type (See {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4})\n * @returns {Integer} Size in bytes of the resulting hash\n */\n getHashByteLength: function getHashByteLength(algo) {\n switch (algo) {\n case 1:\n // - MD5 [HAC]\n return 16;\n case 2: // - SHA-1 [FIPS180]\n case 3:\n // - RIPE-MD/160 [HAC]\n return 20;\n case 8:\n // - SHA256 [FIPS180]\n return 32;\n case 9:\n // - SHA384 [FIPS180]\n return 48;\n case 10:\n // - SHA512 [FIPS180]\n return 64;\n case 11:\n // - SHA224 [FIPS180]\n return 28;\n default:\n throw new Error('Invalid hash algorithm.');\n }\n }\n};\n\n},{\"../../util\":398,\"./md5\":339,\"asmcrypto.js/src/hash/sha256/exports\":16,\"hash.js/lib/hash/ripemd\":287,\"hash.js/lib/hash/sha/224\":290,\"hash.js/lib/hash/sha/384\":292,\"hash.js/lib/hash/sha/512\":293,\"rusha\":320}],339:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// MD5 Digest\nfunction md5(entree) {\n var digest = md51(_util2.default.Uint8Array_to_str(entree));\n return _util2.default.hex_to_Uint8Array(hex(digest));\n} /**\n * A fast MD5 JavaScript implementation\n * Copyright (c) 2012 Joseph Myers\n * http://www.myersdaily.org/joseph/javascript/md5-text.html\n *\n * Permission to use, copy, modify, and distribute this software\n * and its documentation for any purposes and without\n * fee is hereby granted provided that this copyright notice\n * appears in all copies.\n *\n * Of course, this soft is provided \"as is\" without express or implied\n * warranty of any kind.\n */\n\n/**\n * @requires util\n */\n\nfunction md5cycle(x, k) {\n var a = x[0];\n var b = x[1];\n var c = x[2];\n var d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32(a << s | a >>> 32 - s, b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n var n = s.length;\n var state = [1732584193, -271733879, -1732584194, 271733878];\n var i = void 0;\n for (i = 64; i <= s.length; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < s.length; i++) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i++) {\n tail[i] = 0;\n }\n }\n tail[14] = n * 8;\n md5cycle(state, tail);\n return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n /* I figured global was faster. */\n var md5blks = [];\n var i = void 0; /* Andy King said do it this way. */\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n}\n\nvar hex_chr = '0123456789abcdef'.split('');\n\nfunction rhex(n) {\n var s = '';\n var j = 0;\n for (; j < 4; j++) {\n s += hex_chr[n >> j * 8 + 4 & 0x0F] + hex_chr[n >> j * 8 & 0x0F];\n }\n return s;\n}\n\nfunction hex(x) {\n for (var i = 0; i < x.length; i++) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n}\n\n/* this function is much faster,\nso if possible we use it. Some IEs\nare the only ones I know of that\nneed the idiotic second function,\ngenerated by an if clause. */\n\nfunction add32(a, b) {\n return a + b & 0xFFFFFFFF;\n}\n\nexports.default = md5;\n\n},{\"../../util\":398}],340:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _hash = _dereq_('./hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _cfb = _dereq_('./cfb');\n\nvar _cfb2 = _interopRequireDefault(_cfb);\n\nvar _gcm = _dereq_('./gcm');\n\nvar _gcm2 = _interopRequireDefault(_gcm);\n\nvar _eax = _dereq_('./eax');\n\nvar _eax2 = _interopRequireDefault(_eax);\n\nvar _ocb = _dereq_('./ocb');\n\nvar _ocb2 = _interopRequireDefault(_ocb);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _signature = _dereq_('./signature');\n\nvar _signature2 = _interopRequireDefault(_signature);\n\nvar _random = _dereq_('./random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _pkcs = _dereq_('./pkcs1');\n\nvar _pkcs2 = _interopRequireDefault(_pkcs);\n\nvar _pkcs3 = _dereq_('./pkcs5');\n\nvar _pkcs4 = _interopRequireDefault(_pkcs3);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _aes_kw = _dereq_('./aes_kw');\n\nvar _aes_kw2 = _interopRequireDefault(_aes_kw);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// TODO move cfb and gcm to cipher\nvar mod = {\n /** @see module:crypto/cipher */\n cipher: _cipher2.default,\n /** @see module:crypto/hash */\n hash: _hash2.default,\n /** @see module:crypto/cfb */\n cfb: _cfb2.default,\n /** @see module:crypto/gcm */\n gcm: _gcm2.default,\n experimental_gcm: _gcm2.default,\n /** @see module:crypto/eax */\n eax: _eax2.default,\n /** @see module:crypto/ocb */\n ocb: _ocb2.default,\n /** @see module:crypto/public_key */\n publicKey: _public_key2.default,\n /** @see module:crypto/signature */\n signature: _signature2.default,\n /** @see module:crypto/random */\n random: _random2.default,\n /** @see module:crypto/pkcs1 */\n pkcs1: _pkcs2.default,\n /** @see module:crypto/pkcs5 */\n pkcs5: _pkcs4.default,\n /** @see module:crypto/aes_kw */\n aes_kw: _aes_kw2.default\n}; /**\n * @fileoverview Provides access to all cryptographic primitives used in OpenPGP.js\n * @see module:crypto/crypto\n * @see module:crypto/signature\n * @see module:crypto/public_key\n * @see module:crypto/cipher\n * @see module:crypto/random\n * @see module:crypto/hash\n * @module crypto\n */\n\n(0, _assign2.default)(mod, _crypto2.default);\n\nexports.default = mod;\n\n},{\"./aes_kw\":326,\"./cfb\":327,\"./cipher\":332,\"./crypto\":335,\"./eax\":336,\"./gcm\":337,\"./hash\":338,\"./ocb\":341,\"./pkcs1\":342,\"./pkcs5\":343,\"./public_key\":352,\"./random\":355,\"./signature\":356,\"babel-runtime/core-js/object/assign\":24}],341:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Class to en/decrypt using OCB mode.\n * @param {String} cipher The symmetric cipher algorithm to use e.g. 'aes128'\n * @param {Uint8Array} key The encryption key\n */\nvar OCB = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(cipher, key) {\n var maxNtz, encipher, decipher, mask, constructKeyVariables, extendKeyVariables, hash, crypt;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n crypt = function crypt(fn, text, nonce, adata) {\n //\n // Consider P as a sequence of 128-bit blocks\n //\n var m = text.length / blockLength | 0;\n\n //\n // Key-dependent variables\n //\n extendKeyVariables(text, adata);\n\n //\n // Nonce-dependent and per-encryption variables\n //\n // Nonce = num2str(TAGLEN mod 128,7) || zeros(120-bitlen(N)) || 1 || N\n // Note: We assume here that tagLength mod 16 == 0.\n var paddedNonce = _util2.default.concatUint8Array([zeroBlock.subarray(0, ivLength - nonce.length), one, nonce]);\n // bottom = str2num(Nonce[123..128])\n var bottom = paddedNonce[blockLength - 1] & 63;\n // Ktop = ENCIPHER(K, Nonce[1..122] || zeros(6))\n paddedNonce[blockLength - 1] &= 192;\n var kTop = encipher(paddedNonce);\n // Stretch = Ktop || (Ktop[1..64] xor Ktop[9..72])\n var stretched = _util2.default.concatUint8Array([kTop, xor(kTop.subarray(0, 8), kTop.subarray(1, 9))]);\n // Offset_0 = Stretch[1+bottom..128+bottom]\n var offset = _util2.default.shiftRight(stretched.subarray(0 + (bottom >> 3), 17 + (bottom >> 3)), 8 - (bottom & 7)).subarray(1);\n // Checksum_0 = zeros(128)\n var checksum = new Uint8Array(blockLength);\n\n var ct = new Uint8Array(text.length + tagLength);\n\n //\n // Process any whole blocks\n //\n var i = void 0;\n var pos = 0;\n for (i = 0; i < m; i++) {\n // Offset_i = Offset_{i-1} xor L_{ntz(i)}\n xorMut(offset, mask[ntz(i + 1)]);\n // C_i = Offset_i xor ENCIPHER(K, P_i xor Offset_i)\n // P_i = Offset_i xor DECIPHER(K, C_i xor Offset_i)\n ct.set(xorMut(fn(xor(offset, text)), offset), pos);\n // Checksum_i = Checksum_{i-1} xor P_i\n xorMut(checksum, fn === encipher ? text : ct.subarray(pos));\n\n text = text.subarray(blockLength);\n pos += blockLength;\n }\n\n //\n // Process any final partial block and compute raw tag\n //\n if (text.length) {\n // Offset_* = Offset_m xor L_*\n xorMut(offset, mask.x);\n // Pad = ENCIPHER(K, Offset_*)\n var padding = encipher(offset);\n // C_* = P_* xor Pad[1..bitlen(P_*)]\n ct.set(xor(text, padding), pos);\n\n // Checksum_* = Checksum_m xor (P_* || 1 || new Uint8Array(127-bitlen(P_*)))\n var xorInput = new Uint8Array(blockLength);\n xorInput.set(fn === encipher ? text : ct.subarray(pos, -tagLength), 0);\n xorInput[text.length] = 128;\n xorMut(checksum, xorInput);\n pos += text.length;\n }\n // Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A)\n var tag = xorMut(encipher(xorMut(xorMut(checksum, offset), mask.$)), hash(adata));\n\n //\n // Assemble ciphertext\n //\n // C = C_1 || C_2 || ... || C_m || C_* || Tag[1..TAGLEN]\n ct.set(tag, pos);\n return ct;\n };\n\n hash = function hash(adata) {\n if (!adata.length) {\n // Fast path\n return zeroBlock;\n }\n\n //\n // Consider A as a sequence of 128-bit blocks\n //\n var m = adata.length / blockLength | 0;\n\n var offset = new Uint8Array(blockLength);\n var sum = new Uint8Array(blockLength);\n for (var i = 0; i < m; i++) {\n xorMut(offset, mask[ntz(i + 1)]);\n xorMut(sum, encipher(xor(offset, adata)));\n adata = adata.subarray(blockLength);\n }\n\n //\n // Process any final partial block; compute final hash value\n //\n if (adata.length) {\n xorMut(offset, mask.x);\n\n var cipherInput = new Uint8Array(blockLength);\n cipherInput.set(adata, 0);\n cipherInput[adata.length] = 128;\n xorMut(cipherInput, offset);\n\n xorMut(sum, encipher(cipherInput));\n }\n\n return sum;\n };\n\n extendKeyVariables = function extendKeyVariables(text, adata) {\n var newMaxNtz = _util2.default.nbits(Math.max(text.length, adata.length) / blockLength | 0) - 1;\n for (var i = maxNtz + 1; i <= newMaxNtz; i++) {\n mask[i] = _util2.default.double(mask[i - 1]);\n }\n maxNtz = newMaxNtz;\n };\n\n constructKeyVariables = function constructKeyVariables(cipher, key) {\n var aes = new _cipher2.default[cipher](key);\n encipher = aes.encrypt.bind(aes);\n decipher = aes.decrypt.bind(aes);\n\n var mask_x = encipher(zeroBlock);\n var mask_$ = _util2.default.double(mask_x);\n mask = [];\n mask[0] = _util2.default.double(mask_$);\n\n mask.x = mask_x;\n mask.$ = mask_$;\n };\n\n maxNtz = 0;\n encipher = void 0;\n decipher = void 0;\n mask = void 0;\n\n\n constructKeyVariables(cipher, key);\n\n /**\n * Encrypt/decrypt data.\n * @param {encipher|decipher} fn Encryption/decryption block cipher function\n * @param {Uint8Array} text The cleartext or ciphertext (without tag) input\n * @param {Uint8Array} nonce The nonce (15 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext or plaintext output, with tag appended in both cases\n */\n return _context3.abrupt('return', {\n /**\n * Encrypt plaintext input.\n * @param {Uint8Array} plaintext The cleartext input to be encrypted\n * @param {Uint8Array} nonce The nonce (15 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext output\n */\n encrypt: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(plaintext, nonce, adata) {\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n return _context.abrupt('return', crypt(encipher, plaintext, nonce, adata));\n\n case 1:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function encrypt(_x3, _x4, _x5) {\n return _ref2.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * Decrypt ciphertext input.\n * @param {Uint8Array} ciphertext The ciphertext input to be decrypted\n * @param {Uint8Array} nonce The nonce (15 bytes)\n * @param {Uint8Array} adata Associated data to sign\n * @returns {Promise<Uint8Array>} The ciphertext output\n */\n decrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ciphertext, nonce, adata) {\n var tag, crypted;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(ciphertext.length < tagLength)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Invalid OCB ciphertext');\n\n case 2:\n tag = ciphertext.subarray(-tagLength);\n\n ciphertext = ciphertext.subarray(0, -tagLength);\n\n crypted = crypt(decipher, ciphertext, nonce, adata);\n // if (Tag[1..TAGLEN] == T)\n\n if (!_util2.default.equalsUint8Array(tag, crypted.subarray(-tagLength))) {\n _context2.next = 7;\n break;\n }\n\n return _context2.abrupt('return', crypted.subarray(0, -tagLength));\n\n case 7:\n throw new Error('Authentication tag mismatch');\n\n case 8:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function decrypt(_x6, _x7, _x8) {\n return _ref3.apply(this, arguments);\n }\n\n return decrypt;\n }()\n });\n\n case 10:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function OCB(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Get OCB nonce as defined by {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.2|RFC4880bis-04, section 5.16.2}.\n * @param {Uint8Array} iv The initialization vector (15 bytes)\n * @param {Uint8Array} chunkIndex The chunk index (8 bytes)\n */\n\n\nvar _cipher = _dereq_('./cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 ProtonTech AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements AES-OCB en/decryption.\n * @requires crypto/cipher\n * @requires util\n * @module crypto/ocb\n */\n\nvar blockLength = 16;\nvar ivLength = 15;\n\n// https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.2:\n// While OCB [RFC7253] allows the authentication tag length to be of any\n// number up to 128 bits long, this document requires a fixed\n// authentication tag length of 128 bits (16 octets) for simplicity.\nvar tagLength = 16;\n\nfunction ntz(n) {\n var ntz = 0;\n for (var i = 1; (n & i) === 0; i <<= 1) {\n ntz++;\n }\n return ntz;\n}\n\nfunction xorMut(S, T) {\n for (var i = 0; i < S.length; i++) {\n S[i] ^= T[i];\n }\n return S;\n}\n\nfunction xor(S, T) {\n return xorMut(S.slice(), T);\n}\n\nvar zeroBlock = new Uint8Array(blockLength);\nvar one = new Uint8Array([1]);OCB.getNonce = function (iv, chunkIndex) {\n var nonce = iv.slice();\n for (var i = 0; i < chunkIndex.length; i++) {\n nonce[7 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nOCB.blockLength = blockLength;\nOCB.ivLength = ivLength;\nOCB.tagLength = tagLength;\n\nexports.default = OCB;\n\n},{\"../util\":398,\"./cipher\":332,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],342:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Create padding with secure random data\n * @private\n * @param {Integer} length Length of the padding in bytes\n * @returns {String} Padding as string\n * @async\n */\nvar getPkcs1Padding = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(length) {\n var result, randomBytes, i;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n result = '';\n\n case 1:\n if (!(result.length < length)) {\n _context.next = 8;\n break;\n }\n\n _context.next = 4;\n return _random2.default.getRandomBytes(length - result.length);\n\n case 4:\n randomBytes = _context.sent;\n\n for (i = 0; i < randomBytes.length; i++) {\n if (randomBytes[i] !== 0) {\n result += String.fromCharCode(randomBytes[i]);\n }\n }\n _context.next = 1;\n break;\n\n case 8:\n return _context.abrupt('return', result);\n\n case 9:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function getPkcs1Padding(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Create a EME-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.1|RFC 4880 13.1.1}\n * @param {String} M message to be encoded\n * @param {Integer} k the length in octets of the key modulus\n * @returns {Promise<String>} EME-PKCS1 padded message\n * @async\n */\n\n\nvar _random = _dereq_('./random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _hash = _dereq_('./hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** @namespace */\nvar eme = {};\n/** @namespace */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides EME-PKCS1-v1_5 encoding and decoding and EMSA-PKCS1-v1_5 encoding function\n * @see module:crypto/public_key/rsa\n * @see module:crypto/public_key/elliptic/ecdh\n * @see module:packet.PublicKeyEncryptedSessionKey\n * @requires crypto/random\n * @requires crypto/hash\n * @requires util\n * @module crypto/pkcs1\n */\n\nvar emsa = {};\n\n/**\n * ASN1 object identifiers for hashes\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.2}\n */\nvar hash_headers = [];\nhash_headers[1] = [0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10];\nhash_headers[2] = [0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14];\nhash_headers[3] = [0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14];\nhash_headers[8] = [0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20];\nhash_headers[9] = [0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30];\nhash_headers[10] = [0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40];\nhash_headers[11] = [0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x1C];eme.encode = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(M, k) {\n var mLen, PS;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n mLen = M.length;\n // length checking\n\n if (!(mLen > k - 11)) {\n _context2.next = 3;\n break;\n }\n\n throw new Error('Message too long');\n\n case 3:\n _context2.next = 5;\n return getPkcs1Padding(k - mLen - 3);\n\n case 5:\n PS = _context2.sent;\n return _context2.abrupt('return', String.fromCharCode(0) + String.fromCharCode(2) + PS + String.fromCharCode(0) + M);\n\n case 7:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Decode a EME-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.2|RFC 4880 13.1.2}\n * @param {String} EM encoded message, an octet string\n * @returns {String} message, an octet string\n */\neme.decode = function (EM) {\n // leading zeros truncated by bn.js\n if (EM.charCodeAt(0) !== 0) {\n EM = String.fromCharCode(0) + EM;\n }\n var firstOct = EM.charCodeAt(0);\n var secondOct = EM.charCodeAt(1);\n var i = 2;\n while (EM.charCodeAt(i) !== 0 && i < EM.length) {\n i++;\n }\n var psLen = i - 2;\n var separator = EM.charCodeAt(i++);\n if (firstOct === 0 && secondOct === 2 && psLen >= 8 && separator === 0) {\n return EM.substr(i);\n }\n throw new Error('Decryption error');\n};\n\n/**\n * Create a EMSA-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.3|RFC 4880 13.1.3}\n * @param {Integer} algo Hash algorithm type used\n * @param {String} M message to be encoded\n * @param {Integer} emLen intended length in octets of the encoded message\n * @returns {String} encoded message\n */\nemsa.encode = function (algo, M, emLen) {\n var i = void 0;\n // Apply the hash function to the message M to produce a hash value H\n var H = _util2.default.Uint8Array_to_str(_hash2.default.digest(algo, _util2.default.str_to_Uint8Array(M)));\n if (H.length !== _hash2.default.getHashByteLength(algo)) {\n throw new Error('Invalid hash length');\n }\n // produce an ASN.1 DER value for the hash function used.\n // Let T be the full hash prefix\n var T = '';\n for (i = 0; i < hash_headers[algo].length; i++) {\n T += String.fromCharCode(hash_headers[algo][i]);\n }\n // add hash value to prefix\n T += H;\n // and let tLen be the length in octets of T\n var tLen = T.length;\n if (emLen < tLen + 11) {\n throw new Error('Intended encoded message length too short');\n }\n // an octet string PS consisting of emLen - tLen - 3 octets with hexadecimal value 0xFF\n // The length of PS will be at least 8 octets\n var PS = '';\n for (i = 0; i < emLen - tLen - 3; i++) {\n PS += String.fromCharCode(0xff);\n }\n // Concatenate PS, the hash prefix T, and other padding to form the\n // encoded message EM as EM = 0x00 || 0x01 || PS || 0x00 || T.\n var EM = String.fromCharCode(0x00) + String.fromCharCode(0x01) + PS + String.fromCharCode(0x00) + T;\n return _util2.default.str_to_hex(EM);\n};\n\nexports.default = { eme: eme, emsa: emsa };\n\n},{\"../util\":398,\"./hash\":338,\"./random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],343:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions to add and remove PKCS5 padding\n * @see module:packet.PublicKeyEncryptedSessionKey\n * @module crypto/pkcs5\n */\n\n/**\n * Add pkcs5 padding to a text.\n * @param {String} msg Text to add padding\n * @returns {String} Text with padding added\n */\nfunction encode(msg) {\n var c = 8 - msg.length % 8;\n var padding = String.fromCharCode(c).repeat(c);\n return msg + padding;\n}\n\n/**\n * Remove pkcs5 padding from a string.\n * @param {String} msg Text to remove padding from\n * @returns {String} Text with padding removed\n */\nfunction decode(msg) {\n var len = msg.length;\n if (len > 0) {\n var c = msg.charCodeAt(len - 1);\n if (c >= 1 && c <= 8) {\n var provided = msg.substr(len - c);\n var computed = String.fromCharCode(c).repeat(c);\n if (provided === computed) {\n return msg.substr(0, len - c);\n }\n }\n }\n throw new Error('Invalid padding');\n}\n\nexports.default = { encode: encode, decode: decode };\n\n},{}],344:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _hash = _dereq_('../hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview A Digital signature algorithm implementation\n * @requires bn.js\n * @requires crypto/hash\n * @requires crypto/random\n * @requires util\n * @module crypto/public_key/dsa\n */\n\nvar one = new _bn2.default(1);\nvar zero = new _bn2.default(0);\n\n/*\n TODO regarding the hash function, read:\n https://tools.ietf.org/html/rfc4880#section-13.6\n https://tools.ietf.org/html/rfc4880#section-14\n*/\n\nexports.default = {\n /**\n * DSA Sign function\n * @param {Integer} hash_algo\n * @param {String} m\n * @param {BN} g\n * @param {BN} p\n * @param {BN} q\n * @param {BN} x\n * @returns {{ r: BN, s: BN }}\n * @async\n */\n sign: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(hash_algo, m, g, p, q, x) {\n var k, r, s, t, redp, redq, gred, xred, h;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n k = void 0;\n r = void 0;\n s = void 0;\n t = void 0;\n redp = new _bn2.default.red(p);\n redq = new _bn2.default.red(q);\n gred = g.toRed(redp);\n xred = x.toRed(redq);\n // If the output size of the chosen hash is larger than the number of\n // bits of q, the hash result is truncated to fit by taking the number\n // of leftmost bits equal to the number of bits of q. This (possibly\n // truncated) hash function result is treated as a number and used\n // directly in the DSA signature algorithm.\n\n h = new _bn2.default(_util2.default.getLeftNBits(_hash2.default.digest(hash_algo, m), q.bitLength())).toRed(redq);\n // FIPS-186-4, section 4.6:\n // The values of r and s shall be checked to determine if r = 0 or s = 0.\n // If either r = 0 or s = 0, a new value of k shall be generated, and the\n // signature shall be recalculated. It is extremely unlikely that r = 0\n // or s = 0 if signatures are generated properly.\n\n case 9:\n if (!true) {\n _context.next = 23;\n break;\n }\n\n _context.next = 12;\n return _random2.default.getRandomBN(one, q);\n\n case 12:\n k = _context.sent;\n // returns in [1, q-1]\n r = gred.redPow(k).fromRed().toRed(redq); // (g**k mod p) mod q\n\n if (!(zero.cmp(r) === 0)) {\n _context.next = 16;\n break;\n }\n\n return _context.abrupt('continue', 9);\n\n case 16:\n t = h.redAdd(xred.redMul(r)); // H(m) + x*r mod q\n s = k.toRed(redq).redInvm().redMul(t); // k**-1 * (H(m) + x*r) mod q\n\n if (!(zero.cmp(s) === 0)) {\n _context.next = 20;\n break;\n }\n\n return _context.abrupt('continue', 9);\n\n case 20:\n return _context.abrupt('break', 23);\n\n case 23:\n return _context.abrupt('return', { r: r.toArrayLike(Uint8Array),\n s: s.toArrayLike(Uint8Array) });\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function sign(_x, _x2, _x3, _x4, _x5, _x6) {\n return _ref.apply(this, arguments);\n }\n\n return sign;\n }(),\n\n /**\n * DSA Verify function\n * @param {Integer} hash_algo\n * @param {BN} r\n * @param {BN} s\n * @param {String} m\n * @param {BN} g\n * @param {BN} p\n * @param {BN} q\n * @param {BN} y\n * @returns BN\n * @async\n */\n verify: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(hash_algo, r, s, m, g, p, q, y) {\n var redp, redq, h, w, u1, u2, t1, t2, v;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(zero.ucmp(r) >= 0 || r.ucmp(q) >= 0 || zero.ucmp(s) >= 0 || s.ucmp(q) >= 0)) {\n _context2.next = 3;\n break;\n }\n\n _util2.default.print_debug(\"invalid DSA Signature\");\n return _context2.abrupt('return', null);\n\n case 3:\n redp = new _bn2.default.red(p);\n redq = new _bn2.default.red(q);\n h = new _bn2.default(_util2.default.getLeftNBits(_hash2.default.digest(hash_algo, m), q.bitLength()));\n w = s.toRed(redq).redInvm(); // s**-1 mod q\n\n if (!(zero.cmp(w) === 0)) {\n _context2.next = 10;\n break;\n }\n\n _util2.default.print_debug(\"invalid DSA Signature\");\n return _context2.abrupt('return', null);\n\n case 10:\n u1 = h.toRed(redq).redMul(w); // H(m) * w mod q\n\n u2 = r.toRed(redq).redMul(w); // r * w mod q\n\n t1 = g.toRed(redp).redPow(u1.fromRed()); // g**u1 mod p\n\n t2 = y.toRed(redp).redPow(u2.fromRed()); // y**u2 mod p\n\n v = t1.redMul(t2).fromRed().mod(q); // (g**u1 * y**u2 mod p) mod q\n\n return _context2.abrupt('return', v.cmp(r) === 0);\n\n case 16:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function verify(_x7, _x8, _x9, _x10, _x11, _x12, _x13, _x14) {\n return _ref2.apply(this, arguments);\n }\n\n return verify;\n }()\n};\n\n},{\"../../util\":398,\"../hash\":338,\"../random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],345:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview ElGamal implementation\n * @requires bn.js\n * @requires crypto/random\n * @module crypto/public_key/elgamal\n */\n\nvar zero = new _bn2.default(0);\n\nexports.default = {\n /**\n * ElGamal Encryption function\n * @param {BN} m\n * @param {BN} p\n * @param {BN} g\n * @param {BN} y\n * @returns {{ c1: BN, c2: BN }}\n * @async\n */\n encrypt: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(m, p, g, y) {\n var redp, mred, gred, yred, k;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n redp = new _bn2.default.red(p);\n mred = m.toRed(redp);\n gred = g.toRed(redp);\n yred = y.toRed(redp);\n // See Section 11.5 here: https://crypto.stanford.edu/~dabo/cryptobook/BonehShoup_0_4.pdf\n\n _context.next = 6;\n return _random2.default.getRandomBN(zero, p);\n\n case 6:\n k = _context.sent;\n return _context.abrupt('return', {\n c1: gred.redPow(k).fromRed(),\n c2: yred.redPow(k).redMul(mred).fromRed()\n });\n\n case 8:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function encrypt(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * ElGamal Encryption function\n * @param {BN} c1\n * @param {BN} c2\n * @param {BN} p\n * @param {BN} x\n * @returns BN\n * @async\n */\n decrypt: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(c1, c2, p, x) {\n var redp, c1red, c2red;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n redp = new _bn2.default.red(p);\n c1red = c1.toRed(redp);\n c2red = c2.toRed(redp);\n return _context2.abrupt('return', c1red.redPow(x).redInvm().redMul(c2red).fromRed());\n\n case 4:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function decrypt(_x5, _x6, _x7, _x8) {\n return _ref2.apply(this, arguments);\n }\n\n return decrypt;\n }()\n};\n\n},{\"../random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],346:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getPreferredHashAlgo = exports.generate = exports.nodeCurves = exports.webCurves = exports.curves = undefined;\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar generate = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(curve) {\n var keyPair;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new Curve(curve);\n _context2.next = 3;\n return curve.genKeyPair();\n\n case 3:\n keyPair = _context2.sent;\n return _context2.abrupt('return', {\n oid: curve.oid,\n Q: new _bn2.default(keyPair.getPublic()),\n d: new _bn2.default(keyPair.getPrivate()),\n hash: curve.hash,\n cipher: curve.cipher\n });\n\n case 5:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function generate(_x) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nvar webGenKeyPair = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(name) {\n var webCryptoKey, privateKey, publicKey;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return webCrypto.generateKey({ name: \"ECDSA\", namedCurve: webCurves[name] }, true, [\"sign\", \"verify\"]);\n\n case 2:\n webCryptoKey = _context3.sent;\n _context3.next = 5;\n return webCrypto.exportKey(\"jwk\", webCryptoKey.privateKey);\n\n case 5:\n privateKey = _context3.sent;\n _context3.next = 8;\n return webCrypto.exportKey(\"jwk\", webCryptoKey.publicKey);\n\n case 8:\n publicKey = _context3.sent;\n return _context3.abrupt('return', {\n pub: {\n x: _util2.default.b64_to_Uint8Array(publicKey.x, true),\n y: _util2.default.b64_to_Uint8Array(publicKey.y, true)\n },\n priv: _util2.default.b64_to_Uint8Array(privateKey.d, true)\n });\n\n case 10:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function webGenKeyPair(_x2) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar nodeGenKeyPair = function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(name) {\n var ecdh;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n // Note: ECDSA and ECDH key generation is structurally equivalent\n ecdh = nodeCrypto.createECDH(nodeCurves[name]);\n _context4.next = 3;\n return ecdh.generateKeys();\n\n case 3:\n return _context4.abrupt('return', {\n pub: ecdh.getPublicKey().toJSON().data,\n priv: ecdh.getPrivateKey().toJSON().data\n });\n\n case 4:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function nodeGenKeyPair(_x3) {\n return _ref4.apply(this, arguments);\n };\n}();\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _elliptic = _dereq_('elliptic');\n\nvar _key = _dereq_('./key');\n\nvar _key2 = _interopRequireDefault(_key);\n\nvar _random = _dereq_('../../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _enums = _dereq_('../../../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _oid = _dereq_('../../../type/oid');\n\nvar _oid2 = _interopRequireDefault(_oid);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar webCrypto = _util2.default.getWebCrypto(); // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Wrapper of an instance of an Elliptic Curve\n * @requires bn.js\n * @requires elliptic\n * @requires crypto/public_key/elliptic/key\n * @requires crypto/random\n * @requires enums\n * @requires util\n * @requires type/oid\n * @module crypto/public_key/elliptic/curve\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\n\nvar webCurves = {\n 'p256': 'P-256',\n 'p384': 'P-384',\n 'p521': 'P-521'\n};\nvar knownCurves = nodeCrypto ? nodeCrypto.getCurves() : [];\nvar nodeCurves = nodeCrypto ? {\n secp256k1: knownCurves.includes('secp256k1') ? 'secp256k1' : undefined,\n p256: knownCurves.includes('prime256v1') ? 'prime256v1' : undefined,\n p384: knownCurves.includes('secp384r1') ? 'secp384r1' : undefined,\n p521: knownCurves.includes('secp521r1') ? 'secp521r1' : undefined,\n ed25519: knownCurves.includes('ED25519') ? 'ED25519' : undefined,\n curve25519: knownCurves.includes('X25519') ? 'X25519' : undefined,\n brainpoolP256r1: knownCurves.includes('brainpoolP256r1') ? 'brainpoolP256r1' : undefined,\n brainpoolP384r1: knownCurves.includes('brainpoolP384r1') ? 'brainpoolP384r1' : undefined,\n brainpoolP512r1: knownCurves.includes('brainpoolP512r1') ? 'brainpoolP512r1' : undefined\n} : {};\n\nvar curves = {\n p256: {\n oid: [0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: nodeCurves.p256,\n web: webCurves.p256,\n payloadSize: 32\n },\n p384: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha384,\n cipher: _enums2.default.symmetric.aes192,\n node: nodeCurves.p384,\n web: webCurves.p384,\n payloadSize: 48\n },\n p521: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha512,\n cipher: _enums2.default.symmetric.aes256,\n node: nodeCurves.p521,\n web: webCurves.p521,\n payloadSize: 66\n },\n secp256k1: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: nodeCurves.secp256k1\n },\n ed25519: {\n oid: [0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01],\n keyType: _enums2.default.publicKey.eddsa,\n hash: _enums2.default.hash.sha512,\n node: false // nodeCurves.ed25519 TODO\n },\n curve25519: {\n oid: [0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: false // nodeCurves.curve25519 TODO\n },\n brainpoolP256r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha256,\n cipher: _enums2.default.symmetric.aes128,\n node: nodeCurves.brainpoolP256r1\n },\n brainpoolP384r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha384,\n cipher: _enums2.default.symmetric.aes192,\n node: nodeCurves.brainpoolP384r1\n },\n brainpoolP512r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D],\n keyType: _enums2.default.publicKey.ecdsa,\n hash: _enums2.default.hash.sha512,\n cipher: _enums2.default.symmetric.aes256,\n node: nodeCurves.brainpoolP512r1\n }\n};\n\n/**\n * @constructor\n */\nfunction Curve(oid_or_name, params) {\n try {\n if (_util2.default.isArray(oid_or_name) || _util2.default.isUint8Array(oid_or_name)) {\n // by oid byte array\n oid_or_name = new _oid2.default(oid_or_name);\n }\n if (oid_or_name instanceof _oid2.default) {\n // by curve OID\n oid_or_name = oid_or_name.getName();\n }\n // by curve name or oid string\n this.name = _enums2.default.write(_enums2.default.curve, oid_or_name);\n } catch (err) {\n throw new Error('Not valid curve');\n }\n params = params || curves[this.name];\n\n this.keyType = params.keyType;\n switch (this.keyType) {\n case _enums2.default.publicKey.ecdsa:\n this.curve = new _elliptic.ec(this.name);\n break;\n case _enums2.default.publicKey.eddsa:\n this.curve = new _elliptic.eddsa(this.name);\n break;\n default:\n throw new Error('Unknown elliptic key type;');\n }\n\n this.oid = params.oid;\n this.hash = params.hash;\n this.cipher = params.cipher;\n this.node = params.node && curves[this.name];\n this.web = params.web && curves[this.name];\n this.payloadSize = params.payloadSize;\n}\n\nCurve.prototype.keyFromPrivate = function (priv) {\n // Not for ed25519\n return new _key2.default(this, { priv: priv });\n};\n\nCurve.prototype.keyFromSecret = function (secret) {\n // Only for ed25519\n return new _key2.default(this, { secret: secret });\n};\n\nCurve.prototype.keyFromPublic = function (pub) {\n return new _key2.default(this, { pub: pub });\n};\n\nCurve.prototype.genKeyPair = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n var keyPair, r, compact;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n keyPair = void 0;\n\n if (!(this.web && _util2.default.getWebCrypto())) {\n _context.next = 13;\n break;\n }\n\n _context.prev = 2;\n _context.next = 5;\n return webGenKeyPair(this.name);\n\n case 5:\n keyPair = _context.sent;\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context['catch'](2);\n\n _util2.default.print_debug(\"Browser did not support signing: \" + _context.t0.message);\n\n case 11:\n _context.next = 17;\n break;\n\n case 13:\n if (!(this.node && _util2.default.getNodeCrypto())) {\n _context.next = 17;\n break;\n }\n\n _context.next = 16;\n return nodeGenKeyPair(this.name);\n\n case 16:\n keyPair = _context.sent;\n\n case 17:\n if (!(!keyPair || !keyPair.priv)) {\n _context.next = 30;\n break;\n }\n\n _context.t1 = this.curve;\n _context.t2 = _util2.default;\n _context.next = 22;\n return _random2.default.getRandomBytes(32);\n\n case 22:\n _context.t3 = _context.sent;\n _context.t4 = _context.t2.Uint8Array_to_str.call(_context.t2, _context.t3);\n _context.t5 = {\n entropy: _context.t4\n };\n _context.next = 27;\n return _context.t1.genKeyPair.call(_context.t1, _context.t5);\n\n case 27:\n r = _context.sent;\n compact = this.curve.curve.type === 'edwards' || this.curve.curve.type === 'mont';\n\n if (this.keyType === _enums2.default.publicKey.eddsa) {\n keyPair = { secret: r.getSecret() };\n } else {\n keyPair = { pub: r.getPublic('array', compact), priv: r.getPrivate().toArray() };\n }\n\n case 30:\n return _context.abrupt('return', new _key2.default(this, keyPair));\n\n case 31:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[2, 8]]);\n}));\n\nfunction getPreferredHashAlgo(oid) {\n return curves[_enums2.default.write(_enums2.default.curve, oid.toHex())].hash;\n}\n\nexports.default = Curve;\nexports.curves = curves;\nexports.webCurves = webCurves;\nexports.nodeCurves = nodeCurves;\nexports.generate = generate;\nexports.getPreferredHashAlgo = getPreferredHashAlgo;\n\n},{\"../../../enums\":359,\"../../../type/oid\":396,\"../../../util\":398,\"../../random\":355,\"./key\":351,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44,\"elliptic\":267}],347:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Encrypt and wrap a session key\n *\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.symmetric} cipher_algo Symmetric cipher to use\n * @param {module:enums.hash} hash_algo Hash algorithm to use\n * @param {module:type/mpi} m Value derived from session key (RFC 6637)\n * @param {Uint8Array} Q Recipient public key\n * @param {String} fingerprint Recipient fingerprint\n * @returns {{V: BN, C: BN}} Returns ephemeral key and encoded session key\n * @async\n */\nvar encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(oid, cipher_algo, hash_algo, m, Q, fingerprint) {\n var curve, param, v, S, Z, C;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n curve = new _curves2.default(oid);\n param = buildEcdhParam(_enums2.default.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint);\n\n cipher_algo = _enums2.default.read(_enums2.default.symmetric, cipher_algo);\n _context.next = 5;\n return curve.genKeyPair();\n\n case 5:\n v = _context.sent;\n\n Q = curve.keyFromPublic(Q);\n S = v.derive(Q);\n Z = kdf(hash_algo, S, _cipher2.default[cipher_algo].keySize, param);\n C = _aes_kw2.default.wrap(Z, m.toString());\n return _context.abrupt('return', {\n V: new _bn2.default(v.getPublic()),\n C: C\n });\n\n case 11:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function encrypt(_x, _x2, _x3, _x4, _x5, _x6) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypt and unwrap the value derived from session key\n *\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.symmetric} cipher_algo Symmetric cipher to use\n * @param {module:enums.hash} hash_algo Hash algorithm to use\n * @param {BN} V Public part of ephemeral key\n * @param {Uint8Array} C Encrypted and wrapped value derived from session key\n * @param {Uint8Array} d Recipient private key\n * @param {String} fingerprint Recipient fingerprint\n * @returns {Uint8Array} Value derived from session\n * @async\n */\n\n\nvar decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(oid, cipher_algo, hash_algo, V, C, d, fingerprint) {\n var curve, param, S, Z;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new _curves2.default(oid);\n param = buildEcdhParam(_enums2.default.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint);\n\n cipher_algo = _enums2.default.read(_enums2.default.symmetric, cipher_algo);\n V = curve.keyFromPublic(V);\n d = curve.keyFromPrivate(d);\n S = d.derive(V);\n Z = kdf(hash_algo, S, _cipher2.default[cipher_algo].keySize, param);\n return _context2.abrupt('return', new _bn2.default(_aes_kw2.default.unwrap(Z, C)));\n\n case 8:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function decrypt(_x7, _x8, _x9, _x10, _x11, _x12, _x13) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nvar _aes_kw = _dereq_('../../aes_kw');\n\nvar _aes_kw2 = _interopRequireDefault(_aes_kw);\n\nvar _cipher = _dereq_('../../cipher');\n\nvar _cipher2 = _interopRequireDefault(_cipher);\n\nvar _hash = _dereq_('../../hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _kdf_params = _dereq_('../../../type/kdf_params');\n\nvar _kdf_params2 = _interopRequireDefault(_kdf_params);\n\nvar _enums = _dereq_('../../../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Build Param for ECDH algorithm (RFC 6637)\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Key encryption and decryption for RFC 6637 ECDH\n * @requires crypto/public_key/elliptic/curve\n * @requires crypto/aes_kw\n * @requires crypto/cipher\n * @requires crypto/hash\n * @requires type/kdf_params\n * @requires enums\n * @requires util\n * @module crypto/public_key/elliptic/ecdh\n */\n\nfunction buildEcdhParam(public_algo, oid, cipher_algo, hash_algo, fingerprint) {\n var kdf_params = new _kdf_params2.default([hash_algo, cipher_algo]);\n return _util2.default.concatUint8Array([oid.write(), new Uint8Array([public_algo]), kdf_params.write(), _util2.default.str_to_Uint8Array(\"Anonymous Sender \"), fingerprint.subarray(0, 20)]);\n}\n\n// Key Derivation Function (RFC 6637)\nfunction kdf(hash_algo, X, length, param) {\n return _hash2.default.digest(hash_algo, _util2.default.concatUint8Array([new Uint8Array([0, 0, 0, 1]), new Uint8Array(X), param])).subarray(0, length);\n}exports.default = { encrypt: encrypt, decrypt: decrypt };\n\n},{\"../../../enums\":359,\"../../../type/kdf_params\":393,\"../../../util\":398,\"../../aes_kw\":326,\"../../cipher\":332,\"../../hash\":338,\"./curves\":346,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],348:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Sign a message using the provided key\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used to sign\n * @param {Uint8Array} m Message to sign\n * @param {Uint8Array} d Private key used to sign the message\n * @returns {{r: Uint8Array,\n * s: Uint8Array}} Signature of the message\n * @async\n */\nvar sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(oid, hash_algo, m, d) {\n var curve, key, signature;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromPrivate(d);\n _context.next = 4;\n return key.sign(m, hash_algo);\n\n case 4:\n signature = _context.sent;\n return _context.abrupt('return', { r: signature.r.toArrayLike(Uint8Array),\n s: signature.s.toArrayLike(Uint8Array) });\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function sign(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies if a signature is valid for a message\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used in the signature\n * @param {{r: Uint8Array,\n s: Uint8Array}} signature Signature to verify\n * @param {Uint8Array} m Message to verify\n * @param {Uint8Array} Q Public key used to verify the message\n * @returns {Boolean}\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of ECDSA following RFC6637 for Openpgpjs\n * @requires crypto/public_key/elliptic/curve\n * @module crypto/public_key/elliptic/ecdsa\n */\n\nvar verify = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(oid, hash_algo, signature, m, Q) {\n var curve, key;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromPublic(Q);\n return _context2.abrupt('return', key.verify(m, signature, hash_algo));\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function verify(_x5, _x6, _x7, _x8, _x9) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { sign: sign, verify: verify };\n\n},{\"./curves\":346,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],349:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Sign a message using the provided key\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used to sign\n * @param {Uint8Array} m Message to sign\n * @param {Uint8Array} d Private key used to sign\n * @returns {{R: Uint8Array,\n * S: Uint8Array}} Signature of the message\n * @async\n */\nvar sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(oid, hash_algo, m, d) {\n var curve, key, signature;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromSecret(d);\n _context.next = 4;\n return key.sign(m, hash_algo);\n\n case 4:\n signature = _context.sent;\n return _context.abrupt('return', { R: new Uint8Array(signature.Rencoded()),\n S: new Uint8Array(signature.Sencoded()) });\n\n case 6:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function sign(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies if a signature is valid for a message\n * @param {module:type/oid} oid Elliptic curve object identifier\n * @param {module:enums.hash} hash_algo Hash algorithm used in the signature\n * @param {{R: Uint8Array,\n S: Uint8Array}} signature Signature to verify the message\n * @param {Uint8Array} m Message to verify\n * @param {Uint8Array} Q Public key used to verify the message\n * @returns {Boolean}\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of EdDSA following RFC4880bis-03 for OpenPGP\n * @requires crypto/public_key/elliptic/curve\n * @module crypto/public_key/elliptic/eddsa\n */\n\nvar verify = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(oid, hash_algo, signature, m, Q) {\n var curve, key;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n curve = new _curves2.default(oid);\n key = curve.keyFromPublic(Q);\n return _context2.abrupt('return', key.verify(m, signature, hash_algo));\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function verify(_x5, _x6, _x7, _x8, _x9) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { sign: sign, verify: verify };\n\n},{\"./curves\":346,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],350:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _curves = _dereq_('./curves');\n\nvar _curves2 = _interopRequireDefault(_curves);\n\nvar _ecdsa = _dereq_('./ecdsa');\n\nvar _ecdsa2 = _interopRequireDefault(_ecdsa);\n\nvar _eddsa = _dereq_('./eddsa');\n\nvar _eddsa2 = _interopRequireDefault(_eddsa);\n\nvar _ecdh = _dereq_('./ecdh');\n\nvar _ecdh2 = _interopRequireDefault(_ecdh);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions to access Elliptic Curve Cryptography\n * @see module:crypto/public_key/elliptic/curve\n * @see module:crypto/public_key/elliptic/ecdh\n * @see module:crypto/public_key/elliptic/ecdsa\n * @see module:crypto/public_key/elliptic/eddsa\n * @module crypto/public_key/elliptic\n */\n\nexports.default = {\n Curve: _curves2.default, ecdh: _ecdh2.default, ecdsa: _ecdsa2.default, eddsa: _eddsa2.default, generate: _curves.generate, getPreferredHashAlgo: _curves.getPreferredHashAlgo\n};\n\n},{\"./curves\":346,\"./ecdh\":347,\"./ecdsa\":348,\"./eddsa\":349}],351:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nvar webSign = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(curve, hash_algo, message, keyPair) {\n var len, key, signature;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n len = curve.payloadSize;\n _context3.next = 3;\n return webCrypto.importKey(\"jwk\", {\n \"kty\": \"EC\",\n \"crv\": _curves.webCurves[curve.name],\n \"x\": _util2.default.Uint8Array_to_b64(new Uint8Array(keyPair.getPublic().getX().toArray('be', len)), true),\n \"y\": _util2.default.Uint8Array_to_b64(new Uint8Array(keyPair.getPublic().getY().toArray('be', len)), true),\n \"d\": _util2.default.Uint8Array_to_b64(new Uint8Array(keyPair.getPrivate().toArray('be', len)), true),\n \"use\": \"sig\",\n \"kid\": \"ECDSA Private Key\"\n }, {\n \"name\": \"ECDSA\",\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, curve.hash) }\n }, false, [\"sign\"]);\n\n case 3:\n key = _context3.sent;\n _context3.t0 = Uint8Array;\n _context3.next = 7;\n return webCrypto.sign({\n \"name\": 'ECDSA',\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, hash_algo) }\n }, key, message);\n\n case 7:\n _context3.t1 = _context3.sent;\n signature = new _context3.t0(_context3.t1);\n return _context3.abrupt('return', {\n r: new _bn2.default(signature.slice(0, len)),\n s: new _bn2.default(signature.slice(len, len << 1))\n });\n\n case 10:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function webSign(_x6, _x7, _x8, _x9) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar webVerify = function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(curve, hash_algo, _ref5, message, publicKey) {\n var r = _ref5.r,\n s = _ref5.s;\n var len, key, signature;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n len = curve.payloadSize;\n _context4.next = 3;\n return webCrypto.importKey(\"jwk\", {\n \"kty\": \"EC\",\n \"crv\": _curves.webCurves[curve.name],\n \"x\": _util2.default.Uint8Array_to_b64(new Uint8Array(publicKey.getX().toArray('be', len)), true),\n \"y\": _util2.default.Uint8Array_to_b64(new Uint8Array(publicKey.getY().toArray('be', len)), true),\n \"use\": \"sig\",\n \"kid\": \"ECDSA Public Key\"\n }, {\n \"name\": \"ECDSA\",\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, curve.hash) }\n }, false, [\"verify\"]);\n\n case 3:\n key = _context4.sent;\n signature = _util2.default.concatUint8Array([new Uint8Array(len - r.length), r, new Uint8Array(len - s.length), s]).buffer;\n return _context4.abrupt('return', webCrypto.verify({\n \"name\": 'ECDSA',\n \"namedCurve\": _curves.webCurves[curve.name],\n \"hash\": { name: _enums2.default.read(_enums2.default.webHash, hash_algo) }\n }, key, signature, message));\n\n case 6:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function webVerify(_x10, _x11, _x12, _x13, _x14) {\n return _ref4.apply(this, arguments);\n };\n}();\n\nvar nodeSign = function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(curve, hash_algo, message, keyPair) {\n var sign, key;\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n sign = nodeCrypto.createSign(_enums2.default.read(_enums2.default.hash, hash_algo));\n\n sign.write(message);\n sign.end();\n\n key = ECPrivateKey.encode({\n version: 1,\n parameters: curve.oid,\n privateKey: keyPair.getPrivate().toArray(),\n publicKey: { unused: 0, data: keyPair.getPublic().encode() }\n }, 'pem', {\n label: 'EC PRIVATE KEY'\n });\n return _context5.abrupt('return', ECDSASignature.decode(sign.sign(key), 'der'));\n\n case 5:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function nodeSign(_x15, _x16, _x17, _x18) {\n return _ref6.apply(this, arguments);\n };\n}();\n\nvar nodeVerify = function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(curve, hash_algo, _ref8, message, publicKey) {\n var r = _ref8.r,\n s = _ref8.s;\n var verify, key, signature;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n verify = nodeCrypto.createVerify(_enums2.default.read(_enums2.default.hash, hash_algo));\n\n verify.write(message);\n verify.end();\n\n key = SubjectPublicKeyInfo.encode({\n algorithm: {\n algorithm: [1, 2, 840, 10045, 2, 1],\n parameters: curve.oid\n },\n subjectPublicKey: { unused: 0, data: publicKey.encode() }\n }, 'pem', {\n label: 'PUBLIC KEY'\n });\n signature = ECDSASignature.encode({\n r: new _bn2.default(r), s: new _bn2.default(s)\n }, 'der');\n _context6.prev = 5;\n return _context6.abrupt('return', verify.verify(key, signature));\n\n case 9:\n _context6.prev = 9;\n _context6.t0 = _context6['catch'](5);\n return _context6.abrupt('return', false);\n\n case 12:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this, [[5, 9]]);\n }));\n\n return function nodeVerify(_x19, _x20, _x21, _x22, _x23) {\n return _ref7.apply(this, arguments);\n };\n}();\n\n// Originally written by Owen Smith https://github.com/omsmith\n// Adapted on Feb 2018 from https://github.com/Brightspace/node-jwk-to-pem/\n\n/* eslint-disable no-invalid-this */\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _curves = _dereq_('./curves');\n\nvar _hash = _dereq_('../../hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nvar _util = _dereq_('../../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _enums = _dereq_('../../../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar webCrypto = _util2.default.getWebCrypto(); // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Wrapper for a KeyPair of an Elliptic Curve\n * @requires bn.js\n * @requires crypto/public_key/elliptic/curves\n * @requires crypto/hash\n * @requires util\n * @requires enums\n * @requires asn1.js\n * @module crypto/public_key/elliptic/key\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\n\n/**\n * @constructor\n */\nfunction KeyPair(curve, options) {\n this.curve = curve;\n this.keyType = curve.curve.type === 'edwards' ? _enums2.default.publicKey.eddsa : _enums2.default.publicKey.ecdsa;\n this.keyPair = this.curve.curve.keyPair(options);\n}\n\nKeyPair.prototype.sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(message, hash_algo) {\n var signature, digest;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(this.curve.web && _util2.default.getWebCrypto())) {\n _context.next = 13;\n break;\n }\n\n _context.prev = 1;\n _context.next = 4;\n return webSign(this.curve, hash_algo, message, this.keyPair);\n\n case 4:\n signature = _context.sent;\n return _context.abrupt('return', signature);\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context['catch'](1);\n\n _util2.default.print_debug(\"Browser did not support signing: \" + _context.t0.message);\n\n case 11:\n _context.next = 15;\n break;\n\n case 13:\n if (!(this.curve.node && _util2.default.getNodeCrypto())) {\n _context.next = 15;\n break;\n }\n\n return _context.abrupt('return', nodeSign(this.curve, hash_algo, message, this.keyPair));\n\n case 15:\n digest = typeof hash_algo === 'undefined' ? message : _hash2.default.digest(hash_algo, message);\n return _context.abrupt('return', this.keyPair.sign(digest));\n\n case 17:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[1, 8]]);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\nKeyPair.prototype.verify = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(message, signature, hash_algo) {\n var result, digest;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(this.curve.web && _util2.default.getWebCrypto())) {\n _context2.next = 13;\n break;\n }\n\n _context2.prev = 1;\n _context2.next = 4;\n return webVerify(this.curve, hash_algo, signature, message, this.keyPair.getPublic());\n\n case 4:\n result = _context2.sent;\n return _context2.abrupt('return', result);\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n\n _util2.default.print_debug(\"Browser did not support signing: \" + _context2.t0.message);\n\n case 11:\n _context2.next = 15;\n break;\n\n case 13:\n if (!(this.curve.node && _util2.default.getNodeCrypto())) {\n _context2.next = 15;\n break;\n }\n\n return _context2.abrupt('return', nodeVerify(this.curve, hash_algo, signature, message, this.keyPair.getPublic()));\n\n case 15:\n digest = typeof hash_algo === 'undefined' ? message : _hash2.default.digest(hash_algo, message);\n return _context2.abrupt('return', this.keyPair.verify(digest, signature));\n\n case 17:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this, [[1, 8]]);\n }));\n\n return function (_x3, _x4, _x5) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nKeyPair.prototype.derive = function (pub) {\n if (this.keyType === _enums2.default.publicKey.eddsa) {\n throw new Error('Key can only be used for EdDSA');\n }\n return this.keyPair.derive(pub.keyPair.getPublic());\n};\n\nKeyPair.prototype.getPublic = function () {\n var compact = this.curve.curve.curve.type === 'edwards' || this.curve.curve.curve.type === 'mont';\n return this.keyPair.getPublic('array', compact);\n};\n\nKeyPair.prototype.getPrivate = function () {\n if (this.curve.keyType === _enums2.default.publicKey.eddsa) {\n return this.keyPair.getSecret();\n }\n return this.keyPair.getPrivate().toArray();\n};\n\nexports.default = KeyPair;\nvar asn1 = nodeCrypto ? _dereq_('asn1.js') : undefined;\n\nvar ECDSASignature = nodeCrypto ? asn1.define('ECDSASignature', function () {\n this.seq().obj(this.key('r').int(), this.key('s').int());\n}) : undefined;\n\nvar ECPrivateKey = nodeCrypto ? asn1.define('ECPrivateKey', function () {\n this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').explicit(0).optional().any(), this.key('publicKey').explicit(1).optional().bitstr());\n}) : undefined;\n\nvar AlgorithmIdentifier = nodeCrypto ? asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional().any());\n}) : undefined;\n\nvar SubjectPublicKeyInfo = nodeCrypto ? asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());\n}) : undefined;\n\n},{\"../../../enums\":359,\"../../../util\":398,\"../../hash\":338,\"./curves\":346,\"asn1.js\":\"asn1.js\",\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],352:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rsa = _dereq_('./rsa');\n\nvar _rsa2 = _interopRequireDefault(_rsa);\n\nvar _elgamal = _dereq_('./elgamal');\n\nvar _elgamal2 = _interopRequireDefault(_elgamal);\n\nvar _elliptic = _dereq_('./elliptic');\n\nvar _elliptic2 = _interopRequireDefault(_elliptic);\n\nvar _dsa = _dereq_('./dsa');\n\nvar _dsa2 = _interopRequireDefault(_dsa);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview Asymmetric cryptography functions\n * @requires crypto/public_key/dsa\n * @requires crypto/public_key/elgamal\n * @requires crypto/public_key/elliptic\n * @requires crypto/public_key/rsa\n * @module crypto/public_key\n */\n\nexports.default = {\n /** @see module:crypto/public_key/rsa */\n rsa: _rsa2.default,\n /** @see module:crypto/public_key/elgamal */\n elgamal: _elgamal2.default,\n /** @see module:crypto/public_key/elliptic */\n elliptic: _elliptic2.default,\n /** @see module:crypto/public_key/dsa */\n dsa: _dsa2.default\n};\n\n},{\"./dsa\":344,\"./elgamal\":345,\"./elliptic\":350,\"./rsa\":354}],353:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Probabilistic random number generator\n * @param {Integer} bits Bit length of the prime\n * @param {BN} e Optional RSA exponent to check against the prime\n * @param {Integer} k Optional number of iterations of Miller-Rabin test\n * @returns BN\n * @async\n */\nvar randomProbablePrime = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(bits, e, k) {\n var min, thirty, adds, n, i;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n min = new _bn2.default(1).shln(bits - 1);\n thirty = new _bn2.default(30);\n /*\n * We can avoid any multiples of 3 and 5 by looking at n mod 30\n * n mod 30 = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29\n * the next possible prime is mod 30:\n * 1 7 7 7 7 7 7 11 11 11 11 13 13 17 17 17 17 19 19 23 23 23 23 29 29 29 29 29 29 1\n */\n\n adds = [1, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 2];\n _context.next = 5;\n return _random2.default.getRandomBN(min, min.shln(1));\n\n case 5:\n n = _context.sent;\n i = n.mod(thirty).toNumber();\n\n case 7:\n n.iaddn(adds[i]);\n i = (i + adds[i]) % adds.length;\n // If reached the maximum, go back to the minimum.\n if (n.bitLength() > bits) {\n n = n.mod(min.shln(1)).iadd(min);\n i = n.mod(thirty).toNumber();\n }\n // eslint-disable-next-line no-await-in-loop\n\n case 10:\n _context.next = 12;\n return isProbablePrime(n, e, k);\n\n case 12:\n if (!_context.sent) {\n _context.next = 7;\n break;\n }\n\n case 13:\n return _context.abrupt('return', n);\n\n case 14:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function randomProbablePrime(_x, _x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Probabilistic primality testing\n * @param {BN} n Number to test\n * @param {BN} e Optional RSA exponent to check against the prime\n * @param {Integer} k Optional number of iterations of Miller-Rabin test\n * @returns {boolean}\n * @async\n */\n\n\nvar isProbablePrime = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(n, e, k) {\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(e && !n.subn(1).gcd(e).eqn(1))) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 2:\n if (divisionTest(n)) {\n _context2.next = 4;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 4:\n if (fermat(n)) {\n _context2.next = 6;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 6:\n _context2.next = 8;\n return millerRabin(n, k);\n\n case 8:\n if (_context2.sent) {\n _context2.next = 10;\n break;\n }\n\n return _context2.abrupt('return', false);\n\n case 10:\n return _context2.abrupt('return', true);\n\n case 11:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function isProbablePrime(_x4, _x5, _x6) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Tests whether n is probably prime or not using Fermat's test with b = 2.\n * Fails if b^(n-1) mod n === 1.\n * @param {BN} n Number to test\n * @param {Integer} b Optional Fermat test base\n * @returns {boolean}\n */\n\n\n// Miller-Rabin - Miller Rabin algorithm for primality test\n// Copyright Fedor Indutny, 2014.\n//\n// This software is licensed under the MIT License.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// Adapted on Jan 2018 from version 4.0.1 at https://github.com/indutny/miller-rabin\n\n// Sample syntax for Fixed-Base Miller-Rabin:\n// millerRabin(n, k, () => new BN(small_primes[Math.random() * small_primes.length | 0]))\n\n/**\n * Tests whether n is probably prime or not using the Miller-Rabin test.\n * See HAC Remark 4.28.\n * @param {BN} n Number to test\n * @param {Integer} k Optional number of iterations of Miller-Rabin test\n * @param {Function} rand Optional function to generate potential witnesses\n * @returns {boolean}\n * @async\n */\nvar millerRabin = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(n, k, rand) {\n var len, red, rone, n1, rn1, s, d, a, x, i;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n len = n.bitLength();\n red = _bn2.default.mont(n);\n rone = new _bn2.default(1).toRed(red);\n\n\n if (!k) {\n k = Math.max(1, len / 48 | 0);\n }\n\n n1 = n.subn(1);\n rn1 = n1.toRed(red);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n\n s = 0;\n\n while (!n1.testn(s)) {\n s++;\n }\n d = n.shrn(s);\n\n case 9:\n if (!(k > 0)) {\n _context3.next = 37;\n break;\n }\n\n if (!rand) {\n _context3.next = 14;\n break;\n }\n\n _context3.t0 = rand();\n _context3.next = 17;\n break;\n\n case 14:\n _context3.next = 16;\n return _random2.default.getRandomBN(new _bn2.default(2), n1);\n\n case 16:\n _context3.t0 = _context3.sent;\n\n case 17:\n a = _context3.t0;\n x = a.toRed(red).redPow(d);\n\n if (!(x.eq(rone) || x.eq(rn1))) {\n _context3.next = 21;\n break;\n }\n\n return _context3.abrupt('continue', 34);\n\n case 21:\n i = void 0;\n i = 1;\n\n case 23:\n if (!(i < s)) {\n _context3.next = 32;\n break;\n }\n\n x = x.redSqr();\n\n if (!x.eq(rone)) {\n _context3.next = 27;\n break;\n }\n\n return _context3.abrupt('return', false);\n\n case 27:\n if (!x.eq(rn1)) {\n _context3.next = 29;\n break;\n }\n\n return _context3.abrupt('break', 32);\n\n case 29:\n i++;\n _context3.next = 23;\n break;\n\n case 32:\n if (!(i === s)) {\n _context3.next = 34;\n break;\n }\n\n return _context3.abrupt('return', false);\n\n case 34:\n k--;\n _context3.next = 9;\n break;\n\n case 37:\n return _context3.abrupt('return', true);\n\n case 38:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function millerRabin(_x7, _x8, _x9) {\n return _ref3.apply(this, arguments);\n };\n}();\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Algorithms for probabilistic random prime generation\n * @requires bn.js\n * @requires crypto/random\n * @module crypto/public_key/prime\n */\n\nexports.default = {\n randomProbablePrime: randomProbablePrime, isProbablePrime: isProbablePrime, fermat: fermat, millerRabin: millerRabin, divisionTest: divisionTest\n};\nfunction fermat(n, b) {\n b = b || new _bn2.default(2);\n return b.toRed(_bn2.default.mont(n)).redPow(n.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction divisionTest(n) {\n return small_primes.every(function (m) {\n return n.modn(m) !== 0;\n });\n}\n\n// https://github.com/gpg/libgcrypt/blob/master/cipher/primegen.c\nvar small_primes = [7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999];\n\n},{\"../random\":355,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],354:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _prime = _dereq_('./prime');\n\nvar _prime2 = _interopRequireDefault(_prime);\n\nvar _random = _dereq_('../random');\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _config = _dereq_('../../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _util = _dereq_('../../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Helper for IE11 KeyOperation objects\nfunction promisifyIE11Op(keyObj, err) {\n if (typeof keyObj.then !== 'function') {\n // IE11 KeyOperation\n return new _promise2.default(function (resolve, reject) {\n keyObj.onerror = function () {\n reject(new Error(err));\n };\n keyObj.oncomplete = function (e) {\n resolve(e.target.result);\n };\n });\n }\n return keyObj;\n} // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview RSA implementation\n * @requires bn.js\n * @requires crypto/public_key/prime\n * @requires crypto/random\n * @requires config\n * @requires util\n * @module crypto/public_key/rsa\n */\n\nexports.default = {\n /** Create signature\n * @param {BN} m message\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @param {BN} d RSA private exponent\n * @returns {BN} RSA Signature\n * @async\n */\n sign: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(m, n, e, d) {\n var nred;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(n.cmp(m) <= 0)) {\n _context.next = 2;\n break;\n }\n\n throw new Error('Data too large.');\n\n case 2:\n nred = new _bn2.default.red(n);\n return _context.abrupt('return', m.toRed(nred).redPow(d).toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function sign(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n }\n\n return sign;\n }(),\n\n /**\n * Verify signature\n * @param {BN} s signature\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @returns {BN}\n * @async\n */\n verify: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(s, n, e) {\n var nred;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(n.cmp(s) <= 0)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Data too large.');\n\n case 2:\n nred = new _bn2.default.red(n);\n return _context2.abrupt('return', s.toRed(nred).redPow(e).toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 4:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function verify(_x5, _x6, _x7) {\n return _ref2.apply(this, arguments);\n }\n\n return verify;\n }(),\n\n /**\n * Encrypt message\n * @param {BN} m message\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @returns {BN} RSA Ciphertext\n * @async\n */\n encrypt: function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(m, n, e) {\n var nred;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(n.cmp(m) <= 0)) {\n _context3.next = 2;\n break;\n }\n\n throw new Error('Data too large.');\n\n case 2:\n nred = new _bn2.default.red(n);\n return _context3.abrupt('return', m.toRed(nred).redPow(e).toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 4:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function encrypt(_x8, _x9, _x10) {\n return _ref3.apply(this, arguments);\n }\n\n return encrypt;\n }(),\n\n /**\n * Decrypt RSA message\n * @param {BN} m message\n * @param {BN} n RSA public modulus\n * @param {BN} e RSA public exponent\n * @param {BN} d RSA private exponent\n * @param {BN} p RSA private prime p\n * @param {BN} q RSA private prime q\n * @param {BN} u RSA private inverse of prime q\n * @returns {BN} RSA Plaintext\n * @async\n */\n decrypt: function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(m, n, e, d, p, q, u) {\n var dq, dp, pred, qred, nred, blinder, unblinder, mp, mq, t, h, result;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(n.cmp(m) <= 0)) {\n _context4.next = 2;\n break;\n }\n\n throw new Error('Data too large.');\n\n case 2:\n dq = d.mod(q.subn(1)); // d mod (q-1)\n\n dp = d.mod(p.subn(1)); // d mod (p-1)\n\n pred = new _bn2.default.red(p);\n qred = new _bn2.default.red(q);\n nred = new _bn2.default.red(n);\n blinder = void 0;\n unblinder = void 0;\n\n if (!_config2.default.rsa_blinding) {\n _context4.next = 16;\n break;\n }\n\n _context4.next = 12;\n return _random2.default.getRandomBN(new _bn2.default(2), n);\n\n case 12:\n _context4.t0 = nred;\n unblinder = _context4.sent.toRed(_context4.t0);\n\n blinder = unblinder.redInvm().redPow(e);\n m = m.toRed(nred).redMul(blinder).fromRed();\n\n case 16:\n mp = m.toRed(pred).redPow(dp);\n mq = m.toRed(qred).redPow(dq);\n t = mq.redSub(mp.fromRed().toRed(qred));\n h = u.toRed(qred).redMul(t).fromRed();\n result = h.mul(p).add(mp).toRed(nred);\n\n\n if (_config2.default.rsa_blinding) {\n result = result.redMul(unblinder);\n }\n\n return _context4.abrupt('return', result.toArrayLike(Uint8Array, 'be', n.byteLength()));\n\n case 23:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function decrypt(_x11, _x12, _x13, _x14, _x15, _x16, _x17) {\n return _ref4.apply(this, arguments);\n }\n\n return decrypt;\n }(),\n\n /**\n * Generate a new random private key B bits long with public exponent E.\n *\n * When possible, webCrypto is used. Otherwise, primes are generated using\n * 40 rounds of the Miller-Rabin probabilistic random prime generation algorithm.\n * @see module:crypto/public_key/prime\n * @param {Integer} B RSA bit length\n * @param {String} E RSA public exponent in hex string\n * @returns {{n: BN, e: BN, d: BN,\n * p: BN, q: BN, u: BN}} RSA public modulus, RSA public exponent, RSA private exponent,\n * RSA private prime p, RSA private prime q, u = q ** -1 mod p\n * @async\n */\n generate: function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(B, E) {\n var key, webCrypto, keyPair, keyGenOpt, jwk, p, q, _ref6, phi;\n\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n key = void 0;\n\n E = new _bn2.default(E, 16);\n webCrypto = _util2.default.getWebCryptoAll();\n\n // Native RSA keygen using Web Crypto\n\n if (!webCrypto) {\n _context5.next = 35;\n break;\n }\n\n keyPair = void 0;\n keyGenOpt = void 0;\n\n if (!(window.crypto && window.crypto.subtle || window.msCrypto)) {\n _context5.next = 14;\n break;\n }\n\n // current standard spec\n keyGenOpt = {\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: B, // the specified keysize in bits\n publicExponent: E.toArrayLike(Uint8Array), // take three bytes (max 65537) for exponent\n hash: {\n name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify'\n }\n };\n keyPair = webCrypto.generateKey(keyGenOpt, true, ['sign', 'verify']);\n _context5.next = 11;\n return promisifyIE11Op(keyPair, 'Error generating RSA key pair.');\n\n case 11:\n keyPair = _context5.sent;\n _context5.next = 22;\n break;\n\n case 14:\n if (!(window.crypto && window.crypto.webkitSubtle)) {\n _context5.next = 21;\n break;\n }\n\n // outdated spec implemented by old Webkit\n keyGenOpt = {\n name: 'RSA-OAEP',\n modulusLength: B, // the specified keysize in bits\n publicExponent: E.toArrayLike(Uint8Array), // take three bytes (max 65537) for exponent\n hash: {\n name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify'\n }\n };\n _context5.next = 18;\n return webCrypto.generateKey(keyGenOpt, true, ['encrypt', 'decrypt']);\n\n case 18:\n keyPair = _context5.sent;\n _context5.next = 22;\n break;\n\n case 21:\n throw new Error('Unknown WebCrypto implementation');\n\n case 22:\n\n // export the generated keys as JsonWebKey (JWK)\n // https://tools.ietf.org/html/draft-ietf-jose-json-web-key-33\n jwk = webCrypto.exportKey('jwk', keyPair.privateKey);\n _context5.next = 25;\n return promisifyIE11Op(jwk, 'Error exporting RSA key pair.');\n\n case 25:\n jwk = _context5.sent;\n\n\n // parse raw ArrayBuffer bytes to jwk/json (WebKit/Safari/IE11 quirk)\n if (jwk instanceof ArrayBuffer) {\n jwk = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(jwk)));\n }\n\n // map JWK parameters to BN\n key = {};\n key.n = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.n));\n key.e = E;\n key.d = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.d));\n key.p = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.p));\n key.q = new _bn2.default(_util2.default.b64_to_Uint8Array(jwk.q));\n key.u = key.p.invm(key.q);\n return _context5.abrupt('return', key);\n\n case 35:\n _context5.next = 37;\n return _prime2.default.randomProbablePrime(B - (B >> 1), E, 40);\n\n case 37:\n p = _context5.sent;\n _context5.next = 40;\n return _prime2.default.randomProbablePrime(B >> 1, E, 40);\n\n case 40:\n q = _context5.sent;\n\n\n if (p.cmp(q) < 0) {\n _ref6 = [q, p];\n p = _ref6[0];\n q = _ref6[1];\n }\n\n phi = p.subn(1).mul(q.subn(1));\n return _context5.abrupt('return', {\n n: p.mul(q),\n e: E,\n d: E.invm(phi),\n p: p,\n q: q,\n // dp: d.mod(p.subn(1)),\n // dq: d.mod(q.subn(1)),\n u: p.invm(q)\n });\n\n case 44:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n function generate(_x18, _x19) {\n return _ref5.apply(this, arguments);\n }\n\n return generate;\n }(),\n\n prime: _prime2.default\n};\n\n},{\"../../config\":325,\"../../util\":398,\"../random\":355,\"./prime\":353,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],355:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _typeof2 = _dereq_('babel-runtime/helpers/typeof');\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Do not use util.getNodeCrypto because we need this regardless of use_native setting\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// The GPG4Browsers crypto interface\n\n/**\n * @fileoverview Provides tools for retrieving secure randomness from browsers or Node.js\n * @requires bn.js\n * @requires util\n * @module crypto/random\n */\n\nvar nodeCrypto = _util2.default.detectNode() && _dereq_('crypto');\n\nexports.default = {\n /**\n * Retrieve secure random byte array of the specified length\n * @param {Integer} length Length in bytes to generate\n * @returns {Uint8Array} Random byte array\n * @async\n */\n getRandomBytes: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(length) {\n var buf, bytes;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n buf = new Uint8Array(length);\n\n if (!(typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues)) {\n _context.next = 5;\n break;\n }\n\n window.crypto.getRandomValues(buf);\n _context.next = 20;\n break;\n\n case 5:\n if (!(typeof window !== 'undefined' && (0, _typeof3.default)(window.msCrypto) === 'object' && typeof window.msCrypto.getRandomValues === 'function')) {\n _context.next = 9;\n break;\n }\n\n window.msCrypto.getRandomValues(buf);\n _context.next = 20;\n break;\n\n case 9:\n if (!nodeCrypto) {\n _context.next = 14;\n break;\n }\n\n bytes = nodeCrypto.randomBytes(buf.length);\n\n buf.set(bytes);\n _context.next = 20;\n break;\n\n case 14:\n if (!this.randomBuffer.buffer) {\n _context.next = 19;\n break;\n }\n\n _context.next = 17;\n return this.randomBuffer.get(buf);\n\n case 17:\n _context.next = 20;\n break;\n\n case 19:\n throw new Error('No secure random number generator available.');\n\n case 20:\n return _context.abrupt('return', buf);\n\n case 21:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function getRandomBytes(_x) {\n return _ref.apply(this, arguments);\n }\n\n return getRandomBytes;\n }(),\n\n /**\n * Create a secure random MPI that is greater than or equal to min and less than max.\n * @param {module:type/mpi} min Lower bound, included\n * @param {module:type/mpi} max Upper bound, excluded\n * @returns {module:BN} Random MPI\n * @async\n */\n getRandomBN: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(min, max) {\n var modulus, bytes, r;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(max.cmp(min) <= 0)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Illegal parameter value: max <= min');\n\n case 2:\n modulus = max.sub(min);\n bytes = modulus.byteLength();\n\n // Using a while loop is necessary to avoid bias introduced by the mod operation.\n // However, we request 64 extra random bits so that the bias is negligible.\n // Section B.1.1 here: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf\n\n _context2.t0 = _bn2.default;\n _context2.next = 7;\n return this.getRandomBytes(bytes + 8);\n\n case 7:\n _context2.t1 = _context2.sent;\n r = new _context2.t0(_context2.t1);\n return _context2.abrupt('return', r.mod(modulus).add(min));\n\n case 10:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function getRandomBN(_x2, _x3) {\n return _ref2.apply(this, arguments);\n }\n\n return getRandomBN;\n }(),\n\n randomBuffer: new RandomBuffer()\n};\n\n/**\n * Buffer for secure random numbers\n */\n\nfunction RandomBuffer() {\n this.buffer = null;\n this.size = null;\n this.callback = null;\n}\n\n/**\n * Initialize buffer\n * @param {Integer} size size of buffer\n */\nRandomBuffer.prototype.init = function (size, callback) {\n this.buffer = new Uint8Array(size);\n this.size = 0;\n this.callback = callback;\n};\n\n/**\n * Concat array of secure random numbers to buffer\n * @param {Uint8Array} buf\n */\nRandomBuffer.prototype.set = function (buf) {\n if (!this.buffer) {\n throw new Error('RandomBuffer is not initialized');\n }\n if (!(buf instanceof Uint8Array)) {\n throw new Error('Invalid type: buf not an Uint8Array');\n }\n var freeSpace = this.buffer.length - this.size;\n if (buf.length > freeSpace) {\n buf = buf.subarray(0, freeSpace);\n }\n // set buf with offset old size of buffer\n this.buffer.set(buf, this.size);\n this.size += buf.length;\n};\n\n/**\n * Take numbers out of buffer and copy to array\n * @param {Uint8Array} buf the destination array\n */\nRandomBuffer.prototype.get = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(buf) {\n var i;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (this.buffer) {\n _context3.next = 2;\n break;\n }\n\n throw new Error('RandomBuffer is not initialized');\n\n case 2:\n if (buf instanceof Uint8Array) {\n _context3.next = 4;\n break;\n }\n\n throw new Error('Invalid type: buf not an Uint8Array');\n\n case 4:\n if (!(this.size < buf.length)) {\n _context3.next = 10;\n break;\n }\n\n if (this.callback) {\n _context3.next = 7;\n break;\n }\n\n throw new Error('Random number buffer depleted');\n\n case 7:\n _context3.next = 9;\n return this.callback();\n\n case 9:\n return _context3.abrupt('return', this.get(buf));\n\n case 10:\n for (i = 0; i < buf.length; i++) {\n buf[i] = this.buffer[--this.size];\n // clear buffer value\n this.buffer[this.size] = 0;\n }\n\n case 11:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n},{\"../util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/typeof\":41,\"babel-runtime/regenerator\":42,\"bn.js\":44,\"crypto\":\"crypto\"}],356:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _from = _dereq_('babel-runtime/core-js/array/from');\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _pkcs = _dereq_('./pkcs1');\n\nvar _pkcs2 = _interopRequireDefault(_pkcs);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n /**\n * Verifies the signature provided for data using specified algorithms and public key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * and {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4}\n * for public key and hash algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {module:enums.hash} hash_algo Hash algorithm\n * @param {Array<module:type/mpi>} msg_MPIs Algorithm-specific signature parameters\n * @param {Array<module:type/mpi>} pub_MPIs Algorithm-specific public key parameters\n * @param {Uint8Array} data Data for which the signature was created\n * @returns {Boolean} True if signature is valid\n * @async\n */\n verify: function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(algo, hash_algo, msg_MPIs, pub_MPIs, data) {\n var m, n, e, EM, EM2, r, s, p, q, g, y, oid, signature, Q, _oid, _signature, _Q;\n\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = algo;\n _context.next = _context.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context.t0 === _enums2.default.publicKey.rsa_sign ? 3 : _context.t0 === _enums2.default.publicKey.dsa ? 11 : _context.t0 === _enums2.default.publicKey.ecdsa ? 18 : _context.t0 === _enums2.default.publicKey.eddsa ? 22 : 26;\n break;\n\n case 3:\n m = msg_MPIs[0].toBN();\n n = pub_MPIs[0].toBN();\n e = pub_MPIs[1].toBN();\n _context.next = 8;\n return _public_key2.default.rsa.verify(m, n, e);\n\n case 8:\n EM = _context.sent;\n EM2 = _pkcs2.default.emsa.encode(hash_algo, _util2.default.Uint8Array_to_str(data), n.byteLength());\n return _context.abrupt('return', _util2.default.Uint8Array_to_hex(EM) === EM2);\n\n case 11:\n r = msg_MPIs[0].toBN();\n s = msg_MPIs[1].toBN();\n p = pub_MPIs[0].toBN();\n q = pub_MPIs[1].toBN();\n g = pub_MPIs[2].toBN();\n y = pub_MPIs[3].toBN();\n return _context.abrupt('return', _public_key2.default.dsa.verify(hash_algo, r, s, data, g, p, q, y));\n\n case 18:\n oid = pub_MPIs[0];\n signature = { r: msg_MPIs[0].toUint8Array(), s: msg_MPIs[1].toUint8Array() };\n Q = pub_MPIs[1].toUint8Array();\n return _context.abrupt('return', _public_key2.default.elliptic.ecdsa.verify(oid, hash_algo, signature, data, Q));\n\n case 22:\n _oid = pub_MPIs[0];\n // TODO refactor elliptic to accept Uint8Array\n // EdDSA signature params are expected in little-endian format\n\n _signature = { R: (0, _from2.default)(msg_MPIs[0].toUint8Array('le', 32)),\n S: (0, _from2.default)(msg_MPIs[1].toUint8Array('le', 32)) };\n _Q = (0, _from2.default)(pub_MPIs[1].toUint8Array('be', 33));\n return _context.abrupt('return', _public_key2.default.elliptic.eddsa.verify(_oid, hash_algo, _signature, data, _Q));\n\n case 26:\n throw new Error('Invalid signature algorithm.');\n\n case 27:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function verify(_x, _x2, _x3, _x4, _x5) {\n return _ref.apply(this, arguments);\n }\n\n return verify;\n }(),\n\n /**\n * Creates a signature on data using specified algorithms and private key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * and {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4}\n * for public key and hash algorithms.\n * @param {module:enums.publicKey} algo Public key algorithm\n * @param {module:enums.hash} hash_algo Hash algorithm\n * @param {Array<module:type/mpi>} key_params Algorithm-specific public and private key parameters\n * @param {Uint8Array} data Data to be signed\n * @returns {Uint8Array} Signature\n * @async\n */\n sign: function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(algo, hash_algo, key_params, data) {\n var n, e, d, m, signature, p, q, g, x, _signature2, oid, _d, _signature3, _oid2, _d2, _signature4;\n\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.t0 = algo;\n _context2.next = _context2.t0 === _enums2.default.publicKey.rsa_encrypt_sign ? 3 : _context2.t0 === _enums2.default.publicKey.rsa_encrypt ? 3 : _context2.t0 === _enums2.default.publicKey.rsa_sign ? 3 : _context2.t0 === _enums2.default.publicKey.dsa ? 12 : _context2.t0 === _enums2.default.publicKey.elgamal ? 20 : _context2.t0 === _enums2.default.publicKey.ecdsa ? 21 : _context2.t0 === _enums2.default.publicKey.eddsa ? 27 : 33;\n break;\n\n case 3:\n n = key_params[0].toBN();\n e = key_params[1].toBN();\n d = key_params[2].toBN();\n\n data = _util2.default.Uint8Array_to_str(data);\n m = new _bn2.default(_pkcs2.default.emsa.encode(hash_algo, data, n.byteLength()), 16);\n _context2.next = 10;\n return _public_key2.default.rsa.sign(m, n, e, d);\n\n case 10:\n signature = _context2.sent;\n return _context2.abrupt('return', _util2.default.Uint8Array_to_MPI(signature));\n\n case 12:\n p = key_params[0].toBN();\n q = key_params[1].toBN();\n g = key_params[2].toBN();\n x = key_params[4].toBN();\n _context2.next = 18;\n return _public_key2.default.dsa.sign(hash_algo, data, g, p, q, x);\n\n case 18:\n _signature2 = _context2.sent;\n return _context2.abrupt('return', _util2.default.concatUint8Array([_util2.default.Uint8Array_to_MPI(_signature2.r), _util2.default.Uint8Array_to_MPI(_signature2.s)]));\n\n case 20:\n throw new Error('Signing with Elgamal is not defined in the OpenPGP standard.');\n\n case 21:\n oid = key_params[0];\n _d = key_params[2].toUint8Array();\n _context2.next = 25;\n return _public_key2.default.elliptic.ecdsa.sign(oid, hash_algo, data, _d);\n\n case 25:\n _signature3 = _context2.sent;\n return _context2.abrupt('return', _util2.default.concatUint8Array([_util2.default.Uint8Array_to_MPI(_signature3.r), _util2.default.Uint8Array_to_MPI(_signature3.s)]));\n\n case 27:\n _oid2 = key_params[0];\n _d2 = (0, _from2.default)(key_params[2].toUint8Array('be', 32));\n _context2.next = 31;\n return _public_key2.default.elliptic.eddsa.sign(_oid2, hash_algo, data, _d2);\n\n case 31:\n _signature4 = _context2.sent;\n return _context2.abrupt('return', _util2.default.concatUint8Array([_util2.default.Uint8Array_to_MPI(_signature4.R), _util2.default.Uint8Array_to_MPI(_signature4.S)]));\n\n case 33:\n throw new Error('Invalid signature algorithm.');\n\n case 34:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function sign(_x6, _x7, _x8, _x9) {\n return _ref2.apply(this, arguments);\n }\n\n return sign;\n }()\n}; /**\n * @fileoverview Provides functions for asymmetric signing and signature verification\n * @requires bn.js\n * @requires crypto/public_key\n * @requires crypto/pkcs1\n * @requires enums\n * @requires util\n * @module crypto/signature\n */\n\n},{\"../enums\":359,\"../util\":398,\"./pkcs1\":342,\"./public_key\":352,\"babel-runtime/core-js/array/from\":20,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42,\"bn.js\":44}],357:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _base = _dereq_('./base64.js');\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Finds out which Ascii Armoring type is used. Throws error if unknown type.\n * @private\n * @param {String} text [String] ascii armored text\n * @returns {Integer} 0 = MESSAGE PART n of m\n * 1 = MESSAGE PART n\n * 2 = SIGNED MESSAGE\n * 3 = PGP MESSAGE\n * 4 = PUBLIC KEY BLOCK\n * 5 = PRIVATE KEY BLOCK\n * 6 = SIGNATURE\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/base64\n * @requires enums\n * @requires config\n * @requires util\n * @module encoding/armor\n */\n\nfunction getType(text) {\n var reHeader = /^-----BEGIN PGP (MESSAGE, PART \\d+\\/\\d+|MESSAGE, PART \\d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$\\n/m;\n\n var header = text.match(reHeader);\n\n if (!header) {\n throw new Error('Unknown ASCII armor type');\n }\n\n // BEGIN PGP MESSAGE, PART X/Y\n // Used for multi-part messages, where the armor is split amongst Y\n // parts, and this is the Xth part out of Y.\n if (/MESSAGE, PART \\d+\\/\\d+/.test(header[1])) {\n return _enums2.default.armor.multipart_section;\n } else\n // BEGIN PGP MESSAGE, PART X\n // Used for multi-part messages, where this is the Xth part of an\n // unspecified number of parts. Requires the MESSAGE-ID Armor\n // Header to be used.\n if (/MESSAGE, PART \\d+/.test(header[1])) {\n return _enums2.default.armor.multipart_last;\n } else\n // BEGIN PGP SIGNED MESSAGE\n if (/SIGNED MESSAGE/.test(header[1])) {\n return _enums2.default.armor.signed;\n } else\n // BEGIN PGP MESSAGE\n // Used for signed, encrypted, or compressed files.\n if (/MESSAGE/.test(header[1])) {\n return _enums2.default.armor.message;\n } else\n // BEGIN PGP PUBLIC KEY BLOCK\n // Used for armoring public keys.\n if (/PUBLIC KEY BLOCK/.test(header[1])) {\n return _enums2.default.armor.public_key;\n } else\n // BEGIN PGP PRIVATE KEY BLOCK\n // Used for armoring private keys.\n if (/PRIVATE KEY BLOCK/.test(header[1])) {\n return _enums2.default.armor.private_key;\n } else\n // BEGIN PGP SIGNATURE\n // Used for detached signatures, OpenPGP/MIME signatures, and\n // cleartext signatures. Note that PGP 2.x uses BEGIN PGP MESSAGE\n // for detached signatures.\n if (/SIGNATURE/.test(header[1])) {\n return _enums2.default.armor.signature;\n }\n}\n\n/**\n * Add additional information to the armor version of an OpenPGP binary\n * packet block.\n * @author Alex\n * @version 2011-12-16\n * @returns {String} The header information\n */\nfunction addheader() {\n var result = \"\";\n if (_config2.default.show_version) {\n result += \"Version: \" + _config2.default.versionstring + '\\r\\n';\n }\n if (_config2.default.show_comment) {\n result += \"Comment: \" + _config2.default.commentstring + '\\r\\n';\n }\n result += '\\r\\n';\n return result;\n}\n\n/**\n * Calculates a checksum over the given data and returns it base64 encoded\n * @param {String} data Data to create a CRC-24 checksum for\n * @returns {String} Base64 encoded checksum\n */\nfunction getCheckSum(data) {\n var c = createcrc24(data);\n var bytes = new Uint8Array([c >> 16, c >> 8 & 0xFF, c & 0xFF]);\n return _base2.default.encode(bytes);\n}\n\n/**\n * Calculates the checksum over the given data and compares it with the\n * given base64 encoded checksum\n * @param {String} data Data to create a CRC-24 checksum for\n * @param {String} checksum Base64 encoded checksum\n * @returns {Boolean} True if the given checksum is correct; otherwise false\n */\nfunction verifyCheckSum(data, checksum) {\n var c = getCheckSum(data);\n var d = checksum;\n return c[0] === d[0] && c[1] === d[1] && c[2] === d[2] && c[3] === d[3];\n}\n/**\n * Internal function to calculate a CRC-24 checksum over a given string (data)\n * @param {String} data Data to create a CRC-24 checksum for\n * @returns {Integer} The CRC-24 checksum as number\n */\nvar crc_table = [0x00000000, 0x00864cfb, 0x018ad50d, 0x010c99f6, 0x0393e6e1, 0x0315aa1a, 0x021933ec, 0x029f7f17, 0x07a18139, 0x0727cdc2, 0x062b5434, 0x06ad18cf, 0x043267d8, 0x04b42b23, 0x05b8b2d5, 0x053efe2e, 0x0fc54e89, 0x0f430272, 0x0e4f9b84, 0x0ec9d77f, 0x0c56a868, 0x0cd0e493, 0x0ddc7d65, 0x0d5a319e, 0x0864cfb0, 0x08e2834b, 0x09ee1abd, 0x09685646, 0x0bf72951, 0x0b7165aa, 0x0a7dfc5c, 0x0afbb0a7, 0x1f0cd1e9, 0x1f8a9d12, 0x1e8604e4, 0x1e00481f, 0x1c9f3708, 0x1c197bf3, 0x1d15e205, 0x1d93aefe, 0x18ad50d0, 0x182b1c2b, 0x192785dd, 0x19a1c926, 0x1b3eb631, 0x1bb8faca, 0x1ab4633c, 0x1a322fc7, 0x10c99f60, 0x104fd39b, 0x11434a6d, 0x11c50696, 0x135a7981, 0x13dc357a, 0x12d0ac8c, 0x1256e077, 0x17681e59, 0x17ee52a2, 0x16e2cb54, 0x166487af, 0x14fbf8b8, 0x147db443, 0x15712db5, 0x15f7614e, 0x3e19a3d2, 0x3e9fef29, 0x3f9376df, 0x3f153a24, 0x3d8a4533, 0x3d0c09c8, 0x3c00903e, 0x3c86dcc5, 0x39b822eb, 0x393e6e10, 0x3832f7e6, 0x38b4bb1d, 0x3a2bc40a, 0x3aad88f1, 0x3ba11107, 0x3b275dfc, 0x31dced5b, 0x315aa1a0, 0x30563856, 0x30d074ad, 0x324f0bba, 0x32c94741, 0x33c5deb7, 0x3343924c, 0x367d6c62, 0x36fb2099, 0x37f7b96f, 0x3771f594, 0x35ee8a83, 0x3568c678, 0x34645f8e, 0x34e21375, 0x2115723b, 0x21933ec0, 0x209fa736, 0x2019ebcd, 0x228694da, 0x2200d821, 0x230c41d7, 0x238a0d2c, 0x26b4f302, 0x2632bff9, 0x273e260f, 0x27b86af4, 0x252715e3, 0x25a15918, 0x24adc0ee, 0x242b8c15, 0x2ed03cb2, 0x2e567049, 0x2f5ae9bf, 0x2fdca544, 0x2d43da53, 0x2dc596a8, 0x2cc90f5e, 0x2c4f43a5, 0x2971bd8b, 0x29f7f170, 0x28fb6886, 0x287d247d, 0x2ae25b6a, 0x2a641791, 0x2b688e67, 0x2beec29c, 0x7c3347a4, 0x7cb50b5f, 0x7db992a9, 0x7d3fde52, 0x7fa0a145, 0x7f26edbe, 0x7e2a7448, 0x7eac38b3, 0x7b92c69d, 0x7b148a66, 0x7a181390, 0x7a9e5f6b, 0x7801207c, 0x78876c87, 0x798bf571, 0x790db98a, 0x73f6092d, 0x737045d6, 0x727cdc20, 0x72fa90db, 0x7065efcc, 0x70e3a337, 0x71ef3ac1, 0x7169763a, 0x74578814, 0x74d1c4ef, 0x75dd5d19, 0x755b11e2, 0x77c46ef5, 0x7742220e, 0x764ebbf8, 0x76c8f703, 0x633f964d, 0x63b9dab6, 0x62b54340, 0x62330fbb, 0x60ac70ac, 0x602a3c57, 0x6126a5a1, 0x61a0e95a, 0x649e1774, 0x64185b8f, 0x6514c279, 0x65928e82, 0x670df195, 0x678bbd6e, 0x66872498, 0x66016863, 0x6cfad8c4, 0x6c7c943f, 0x6d700dc9, 0x6df64132, 0x6f693e25, 0x6fef72de, 0x6ee3eb28, 0x6e65a7d3, 0x6b5b59fd, 0x6bdd1506, 0x6ad18cf0, 0x6a57c00b, 0x68c8bf1c, 0x684ef3e7, 0x69426a11, 0x69c426ea, 0x422ae476, 0x42aca88d, 0x43a0317b, 0x43267d80, 0x41b90297, 0x413f4e6c, 0x4033d79a, 0x40b59b61, 0x458b654f, 0x450d29b4, 0x4401b042, 0x4487fcb9, 0x461883ae, 0x469ecf55, 0x479256a3, 0x47141a58, 0x4defaaff, 0x4d69e604, 0x4c657ff2, 0x4ce33309, 0x4e7c4c1e, 0x4efa00e5, 0x4ff69913, 0x4f70d5e8, 0x4a4e2bc6, 0x4ac8673d, 0x4bc4fecb, 0x4b42b230, 0x49ddcd27, 0x495b81dc, 0x4857182a, 0x48d154d1, 0x5d26359f, 0x5da07964, 0x5cace092, 0x5c2aac69, 0x5eb5d37e, 0x5e339f85, 0x5f3f0673, 0x5fb94a88, 0x5a87b4a6, 0x5a01f85d, 0x5b0d61ab, 0x5b8b2d50, 0x59145247, 0x59921ebc, 0x589e874a, 0x5818cbb1, 0x52e37b16, 0x526537ed, 0x5369ae1b, 0x53efe2e0, 0x51709df7, 0x51f6d10c, 0x50fa48fa, 0x507c0401, 0x5542fa2f, 0x55c4b6d4, 0x54c82f22, 0x544e63d9, 0x56d11cce, 0x56575035, 0x575bc9c3, 0x57dd8538];\n\nfunction createcrc24(input) {\n var crc = 0xB704CE;\n\n for (var index = 0; index < input.length; index++) {\n crc = crc << 8 ^ crc_table[(crc >> 16 ^ input[index]) & 0xff];\n }\n return crc & 0xffffff;\n}\n\n/**\n * Splits a message into two parts, the headers and the body. This is an internal function\n * @param {String} text OpenPGP armored message part\n * @returns {Object} An object with attribute \"headers\" containing the headers\n * and an attribute \"body\" containing the body.\n */\nfunction splitHeaders(text) {\n // empty line with whitespace characters\n var reEmptyLine = /^[ \\f\\r\\t\\u00a0\\u2000-\\u200a\\u202f\\u205f\\u3000]*\\n/m;\n var headers = '';\n var body = text;\n\n var matchResult = reEmptyLine.exec(text);\n\n if (matchResult !== null) {\n headers = text.slice(0, matchResult.index);\n body = text.slice(matchResult.index + matchResult[0].length);\n } else {\n throw new Error('Mandatory blank line missing between armor headers and armor data');\n }\n\n headers = headers.split('\\n');\n // remove empty entry\n headers.pop();\n\n return { headers: headers, body: body };\n}\n\n/**\n * Verify armored headers. RFC4880, section 6.3: \"OpenPGP should consider improperly formatted\n * Armor Headers to be corruption of the ASCII Armor.\"\n * @private\n * @param {Array<String>} headers Armor headers\n */\nfunction verifyHeaders(headers) {\n for (var i = 0; i < headers.length; i++) {\n if (!/^([^\\s:]|[^\\s:][^:]*[^\\s:]): .+$/.test(headers[i])) {\n throw new Error('Improperly formatted armor header: ' + headers[i]);\n }\n if (!/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(headers[i])) {\n _util2.default.print_debug_error(new Error('Unknown header: ' + headers[i]));\n }\n }\n}\n\n/**\n * Splits a message into two parts, the body and the checksum. This is an internal function\n * @param {String} text OpenPGP armored message part\n * @returns {Object} An object with attribute \"body\" containing the body\n * and an attribute \"checksum\" containing the checksum.\n */\nfunction splitChecksum(text) {\n text = text.trim();\n var body = text;\n var checksum = \"\";\n\n var lastEquals = text.lastIndexOf(\"=\");\n\n if (lastEquals >= 0 && lastEquals !== text.length - 1) {\n // '=' as the last char means no checksum\n body = text.slice(0, lastEquals);\n checksum = text.slice(lastEquals + 1).substr(0, 4);\n }\n\n return { body: body, checksum: checksum };\n}\n\n/**\n * DeArmor an OpenPGP armored message; verify the checksum and return\n * the encoded bytes\n * @param {String} text OpenPGP armored message\n * @returns {Object} An object with attribute \"text\" containing the message text,\n * an attribute \"data\" containing the bytes and \"type\" for the ASCII armor type\n * @static\n */\nfunction dearmor(text) {\n var reSplit = /^-----[^-]+-----$\\n/m;\n\n // trim string and remove trailing whitespace at end of lines\n text = text.trim().replace(/[\\t\\r ]+\\n/g, '\\n');\n\n var type = getType(text);\n\n text = text + \"\\n\";\n var splittext = text.split(reSplit);\n\n // IE has a bug in split with a re. If the pattern matches the beginning of the\n // string it doesn't create an empty array element 0. So we need to detect this\n // so we know the index of the data we are interested in.\n var indexBase = 1;\n\n var result = void 0;\n var checksum = void 0;\n var msg = void 0;\n\n if (text.search(reSplit) !== splittext[0].length) {\n indexBase = 0;\n }\n\n if (type !== 2) {\n msg = splitHeaders(splittext[indexBase]);\n var msg_sum = splitChecksum(msg.body);\n\n result = {\n data: _base2.default.decode(msg_sum.body),\n headers: msg.headers,\n type: type\n };\n\n checksum = msg_sum.checksum;\n } else {\n // Reverse dash-escaping for msg\n msg = splitHeaders(splittext[indexBase].replace(/^- /mg, ''));\n var sig = splitHeaders(splittext[indexBase + 1].replace(/^- /mg, ''));\n verifyHeaders(sig.headers);\n var sig_sum = splitChecksum(sig.body);\n\n result = {\n text: msg.body.replace(/\\n$/, '').replace(/\\n/g, \"\\r\\n\"),\n data: _base2.default.decode(sig_sum.body),\n headers: msg.headers,\n type: type\n };\n\n checksum = sig_sum.checksum;\n }\n\n if (!verifyCheckSum(result.data, checksum) && (checksum || _config2.default.checksum_required)) {\n // will NOT throw error if checksum is empty AND checksum is not required (GPG compatibility)\n throw new Error(\"Ascii armor integrity check on message failed: '\" + checksum + \"' should be '\" + getCheckSum(result.data) + \"'\");\n }\n\n verifyHeaders(result.headers);\n\n return result;\n}\n\n/**\n * Armor an OpenPGP binary packet block\n * @param {Integer} messagetype type of the message\n * @param body\n * @param {Integer} partindex\n * @param {Integer} parttotal\n * @returns {String} Armored text\n * @static\n */\nfunction armor(messagetype, body, partindex, parttotal) {\n var result = [];\n switch (messagetype) {\n case _enums2.default.armor.multipart_section:\n result.push(\"-----BEGIN PGP MESSAGE, PART \" + partindex + \"/\" + parttotal + \"-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP MESSAGE, PART \" + partindex + \"/\" + parttotal + \"-----\\r\\n\");\n break;\n case _enums2.default.armor.multipart_last:\n result.push(\"-----BEGIN PGP MESSAGE, PART \" + partindex + \"-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP MESSAGE, PART \" + partindex + \"-----\\r\\n\");\n break;\n case _enums2.default.armor.signed:\n result.push(\"\\r\\n-----BEGIN PGP SIGNED MESSAGE-----\\r\\n\");\n result.push(\"Hash: \" + body.hash + \"\\r\\n\\r\\n\");\n result.push(body.text.replace(/^-/mg, \"- -\"));\n result.push(\"\\r\\n-----BEGIN PGP SIGNATURE-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body.data));\n result.push(\"\\r\\n=\" + getCheckSum(body.data) + \"\\r\\n\");\n result.push(\"-----END PGP SIGNATURE-----\\r\\n\");\n break;\n case _enums2.default.armor.message:\n result.push(\"-----BEGIN PGP MESSAGE-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP MESSAGE-----\\r\\n\");\n break;\n case _enums2.default.armor.public_key:\n result.push(\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP PUBLIC KEY BLOCK-----\\r\\n\\r\\n\");\n break;\n case _enums2.default.armor.private_key:\n result.push(\"-----BEGIN PGP PRIVATE KEY BLOCK-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP PRIVATE KEY BLOCK-----\\r\\n\");\n break;\n case _enums2.default.armor.signature:\n result.push(\"-----BEGIN PGP SIGNATURE-----\\r\\n\");\n result.push(addheader());\n result.push(_base2.default.encode(body));\n result.push(\"\\r\\n=\" + getCheckSum(body) + \"\\r\\n\");\n result.push(\"-----END PGP SIGNATURE-----\\r\\n\");\n break;\n }\n\n return result.join('');\n}\n\nexports.default = {\n encode: armor,\n decode: dearmor\n};\n\n},{\"../config\":325,\"../enums.js\":359,\"../util\":398,\"./base64.js\":358}],358:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* OpenPGP radix-64/base64 string encoding/decoding\n * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de\n * version 1.0, check www.haneWIN.de for the latest version\n *\n * This software is provided as-is, without express or implied warranty.\n * Permission to use, copy, modify, distribute or sell this software, with or\n * without fee, for any purpose and by any individual or organization, is hereby\n * granted, provided that the above copyright notice and this paragraph appear\n * in all copies. Distribution as a part of an application or binary must\n * include the above copyright notice in the documentation and/or other materials\n * provided with the application or distribution.\n */\n\n/**\n * @module encoding/base64\n */\n\nvar b64s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Standard radix-64\nvar b64u = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; // URL-safe radix-64\n\n/**\n * Convert binary array to radix-64\n * @param {Uint8Array} t Uint8Array to convert\n * @param {bool} u if true, output is URL-safe\n * @returns {string} radix-64 version of input string\n * @static\n */\nfunction s2r(t) {\n var u = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // TODO check btoa alternative\n var b64 = u ? b64u : b64s;\n var a = void 0;\n var c = void 0;\n var n = void 0;\n var r = [];\n var l = 0;\n var s = 0;\n var tl = t.length;\n\n for (n = 0; n < tl; n++) {\n c = t[n];\n if (s === 0) {\n r.push(b64.charAt(c >> 2 & 63));\n a = (c & 3) << 4;\n } else if (s === 1) {\n r.push(b64.charAt(a | c >> 4 & 15));\n a = (c & 15) << 2;\n } else if (s === 2) {\n r.push(b64.charAt(a | c >> 6 & 3));\n l += 1;\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n r.push(b64.charAt(c & 63));\n }\n l += 1;\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n\n s += 1;\n if (s === 3) {\n s = 0;\n }\n }\n if (s > 0) {\n r.push(b64.charAt(a));\n l += 1;\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n if (!u) {\n r.push('=');\n l += 1;\n }\n }\n if (s === 1 && !u) {\n if (l % 60 === 0 && !u) {\n r.push(\"\\n\");\n }\n r.push('=');\n }\n return r.join('');\n}\n\n/**\n * Convert radix-64 to binary array\n * @param {String} t radix-64 string to convert\n * @param {bool} u if true, input is interpreted as URL-safe\n * @returns {Uint8Array} binary array version of input string\n * @static\n */\nfunction r2s(t, u) {\n // TODO check atob alternative\n var b64 = u ? b64u : b64s;\n var c = void 0;\n var n = void 0;\n var r = [];\n var s = 0;\n var a = 0;\n var tl = t.length;\n\n for (n = 0; n < tl; n++) {\n c = b64.indexOf(t.charAt(n));\n if (c >= 0) {\n if (s) {\n r.push(a | c >> 6 - s & 255);\n }\n s = s + 2 & 7;\n a = c << s & 255;\n }\n }\n return new Uint8Array(r);\n}\n\nexports.default = {\n encode: s2r,\n decode: r2s\n};\n\n},{}],359:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_(\"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _entries = _dereq_(\"babel-runtime/core-js/object/entries\");\n\nvar _entries2 = _interopRequireDefault(_entries);\n\nvar _symbol = _dereq_(\"babel-runtime/core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @module enums\n */\n\nvar byValue = (0, _symbol2.default)('byValue');\n\nexports.default = {\n\n /** Maps curve names under various standards to one\n * @see {@link https://wiki.gnupg.org/ECC|ECC - GnuPG wiki}\n * @enum {String}\n * @readonly\n */\n curve: {\n /** NIST P-256 Curve */\n \"p256\": \"p256\",\n \"P-256\": \"p256\",\n \"secp256r1\": \"p256\",\n \"prime256v1\": \"p256\",\n \"1.2.840.10045.3.1.7\": \"p256\",\n \"2a8648ce3d030107\": \"p256\",\n \"2A8648CE3D030107\": \"p256\",\n\n /** NIST P-384 Curve */\n \"p384\": \"p384\",\n \"P-384\": \"p384\",\n \"secp384r1\": \"p384\",\n \"1.3.132.0.34\": \"p384\",\n \"2b81040022\": \"p384\",\n \"2B81040022\": \"p384\",\n\n /** NIST P-521 Curve */\n \"p521\": \"p521\",\n \"P-521\": \"p521\",\n \"secp521r1\": \"p521\",\n \"1.3.132.0.35\": \"p521\",\n \"2b81040023\": \"p521\",\n \"2B81040023\": \"p521\",\n\n /** SECG SECP256k1 Curve */\n \"secp256k1\": \"secp256k1\",\n \"1.3.132.0.10\": \"secp256k1\",\n \"2b8104000a\": \"secp256k1\",\n \"2B8104000A\": \"secp256k1\",\n\n /** Ed25519 */\n \"ED25519\": \"ed25519\",\n \"ed25519\": \"ed25519\",\n \"Ed25519\": \"ed25519\",\n \"1.3.6.1.4.1.11591.15.1\": \"ed25519\",\n \"2b06010401da470f01\": \"ed25519\",\n \"2B06010401DA470F01\": \"ed25519\",\n\n /** Curve25519 */\n \"X25519\": \"curve25519\",\n \"cv25519\": \"curve25519\",\n \"curve25519\": \"curve25519\",\n \"Curve25519\": \"curve25519\",\n \"1.3.6.1.4.1.3029.1.5.1\": \"curve25519\",\n \"2b060104019755010501\": \"curve25519\",\n \"2B060104019755010501\": \"curve25519\",\n\n /** BrainpoolP256r1 Curve */\n \"brainpoolP256r1\": \"brainpoolP256r1\",\n \"1.3.36.3.3.2.8.1.1.7\": \"brainpoolP256r1\",\n \"2b2403030208010107\": \"brainpoolP256r1\",\n \"2B2403030208010107\": \"brainpoolP256r1\",\n\n /** BrainpoolP384r1 Curve */\n \"brainpoolP384r1\": \"brainpoolP384r1\",\n \"1.3.36.3.3.2.8.1.1.11\": \"brainpoolP384r1\",\n \"2b240303020801010b\": \"brainpoolP384r1\",\n \"2B240303020801010B\": \"brainpoolP384r1\",\n\n /** BrainpoolP512r1 Curve */\n \"brainpoolP512r1\": \"brainpoolP512r1\",\n \"1.3.36.3.3.2.8.1.1.13\": \"brainpoolP512r1\",\n \"2b240303020801010d\": \"brainpoolP512r1\",\n \"2B240303020801010D\": \"brainpoolP512r1\"\n },\n\n /** A string to key specifier type\n * @enum {Integer}\n * @readonly\n */\n s2k: {\n simple: 0,\n salted: 1,\n iterated: 3,\n gnu: 101\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-9.1|RFC4880bis-04, section 9.1}\n * @enum {Integer}\n * @readonly\n */\n publicKey: {\n /** RSA (Encrypt or Sign) [HAC] */\n rsa_encrypt_sign: 1,\n /** RSA (Encrypt only) [HAC] */\n rsa_encrypt: 2,\n /** RSA (Sign only) [HAC] */\n rsa_sign: 3,\n /** Elgamal (Encrypt only) [ELGAMAL] [HAC] */\n elgamal: 16,\n /** DSA (Sign only) [FIPS186] [HAC] */\n dsa: 17,\n /** ECDH (Encrypt only) [RFC6637] */\n ecdh: 18,\n /** ECDSA (Sign only) [RFC6637] */\n ecdsa: 19,\n /** EdDSA (Sign only)\n * [{@link https://tools.ietf.org/html/draft-koch-eddsa-for-openpgp-04|Draft RFC}] */\n eddsa: 22,\n /** Reserved for AEDH */\n aedh: 23,\n /** Reserved for AEDSA */\n aedsa: 24\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC4880, section 9.2}\n * @enum {Integer}\n * @readonly\n */\n symmetric: {\n plaintext: 0,\n /** Not implemented! */\n idea: 1,\n tripledes: 2,\n cast5: 3,\n blowfish: 4,\n aes128: 7,\n aes192: 8,\n aes256: 9,\n twofish: 10\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.3|RFC4880, section 9.3}\n * @enum {Integer}\n * @readonly\n */\n compression: {\n uncompressed: 0,\n /** RFC1951 */\n zip: 1,\n /** RFC1950 */\n zlib: 2,\n bzip2: 3\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC4880, section 9.4}\n * @enum {Integer}\n * @readonly\n */\n hash: {\n md5: 1,\n sha1: 2,\n ripemd: 3,\n sha256: 8,\n sha384: 9,\n sha512: 10,\n sha224: 11\n },\n\n /** A list of hash names as accepted by webCrypto functions.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest|Parameters, algo}\n * @enum {String}\n */\n webHash: {\n 'SHA-1': 2,\n 'SHA-256': 8,\n 'SHA-384': 9,\n 'SHA-512': 10\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-9.6|RFC4880bis-04, section 9.6}\n * @enum {Integer}\n * @readonly\n */\n aead: {\n eax: 1,\n ocb: 2,\n experimental_gcm: 100 // Private algorithm\n },\n\n /** A list of packet types and numeric tags associated with them.\n * @enum {Integer}\n * @readonly\n */\n packet: {\n publicKeyEncryptedSessionKey: 1,\n signature: 2,\n symEncryptedSessionKey: 3,\n onePassSignature: 4,\n secretKey: 5,\n publicKey: 6,\n secretSubkey: 7,\n compressed: 8,\n symmetricallyEncrypted: 9,\n marker: 10,\n literal: 11,\n trust: 12,\n userid: 13,\n publicSubkey: 14,\n userAttribute: 17,\n symEncryptedIntegrityProtected: 18,\n modificationDetectionCode: 19,\n symEncryptedAEADProtected: 20 // see IETF draft: https://tools.ietf.org/html/draft-ford-openpgp-format-00#section-2.1\n },\n\n /** Data types in the literal packet\n * @enum {Integer}\n * @readonly\n */\n literal: {\n /** Binary data 'b' */\n binary: 'b'.charCodeAt(),\n /** Text data 't' */\n text: 't'.charCodeAt(),\n /** Utf8 data 'u' */\n utf8: 'u'.charCodeAt(),\n /** MIME message body part 'm' */\n mime: 'm'.charCodeAt()\n },\n\n /** One pass signature packet type\n * @enum {Integer}\n * @readonly\n */\n signature: {\n /** 0x00: Signature of a binary document. */\n binary: 0,\n /** 0x01: Signature of a canonical text document.\n *\n * Canonicalyzing the document by converting line endings. */\n text: 1,\n /** 0x02: Standalone signature.\n *\n * This signature is a signature of only its own subpacket contents.\n * It is calculated identically to a signature over a zero-lengh\n * binary document. Note that it doesn't make sense to have a V3\n * standalone signature. */\n standalone: 2,\n /** 0x10: Generic certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification does not make any particular\n * assertion as to how well the certifier has checked that the owner\n * of the key is in fact the person described by the User ID. */\n cert_generic: 16,\n /** 0x11: Persona certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has not done any verification of\n * the claim that the owner of this key is the User ID specified. */\n cert_persona: 17,\n /** 0x12: Casual certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has done some casual\n * verification of the claim of identity. */\n cert_casual: 18,\n /** 0x13: Positive certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has done substantial\n * verification of the claim of identity.\n *\n * Most OpenPGP implementations make their \"key signatures\" as 0x10\n * certifications. Some implementations can issue 0x11-0x13\n * certifications, but few differentiate between the types. */\n cert_positive: 19,\n /** 0x30: Certification revocation signature\n *\n * This signature revokes an earlier User ID certification signature\n * (signature class 0x10 through 0x13) or direct-key signature\n * (0x1F). It should be issued by the same key that issued the\n * revoked signature or an authorized revocation key. The signature\n * is computed over the same data as the certificate that it\n * revokes, and should have a later creation date than that\n * certificate. */\n cert_revocation: 48,\n /** 0x18: Subkey Binding Signature\n *\n * This signature is a statement by the top-level signing key that\n * indicates that it owns the subkey. This signature is calculated\n * directly on the primary key and subkey, and not on any User ID or\n * other packets. A signature that binds a signing subkey MUST have\n * an Embedded Signature subpacket in this binding signature that\n * contains a 0x19 signature made by the signing subkey on the\n * primary key and subkey. */\n subkey_binding: 24,\n /** 0x19: Primary Key Binding Signature\n *\n * This signature is a statement by a signing subkey, indicating\n * that it is owned by the primary key and subkey. This signature\n * is calculated the same way as a 0x18 signature: directly on the\n * primary key and subkey, and not on any User ID or other packets.\n *\n * When a signature is made over a key, the hash data starts with the\n * octet 0x99, followed by a two-octet length of the key, and then body\n * of the key packet. (Note that this is an old-style packet header for\n * a key packet with two-octet length.) A subkey binding signature\n * (type 0x18) or primary key binding signature (type 0x19) then hashes\n * the subkey using the same format as the main key (also using 0x99 as\n * the first octet). */\n key_binding: 25,\n /** 0x1F: Signature directly on a key\n *\n * This signature is calculated directly on a key. It binds the\n * information in the Signature subpackets to the key, and is\n * appropriate to be used for subpackets that provide information\n * about the key, such as the Revocation Key subpacket. It is also\n * appropriate for statements that non-self certifiers want to make\n * about the key itself, rather than the binding between a key and a\n * name. */\n key: 31,\n /** 0x20: Key revocation signature\n *\n * The signature is calculated directly on the key being revoked. A\n * revoked key is not to be used. Only revocation signatures by the\n * key being revoked, or by an authorized revocation key, should be\n * considered valid revocation signatures.a */\n key_revocation: 32,\n /** 0x28: Subkey revocation signature\n *\n * The signature is calculated directly on the subkey being revoked.\n * A revoked subkey is not to be used. Only revocation signatures\n * by the top-level signature key that is bound to this subkey, or\n * by an authorized revocation key, should be considered valid\n * revocation signatures.\n *\n * Key revocation signatures (types 0x20 and 0x28)\n * hash only the key being revoked. */\n subkey_revocation: 40,\n /** 0x40: Timestamp signature.\n * This signature is only meaningful for the timestamp contained in\n * it. */\n timestamp: 64,\n /** 0x50: Third-Party Confirmation signature.\n *\n * This signature is a signature over some other OpenPGP Signature\n * packet(s). It is analogous to a notary seal on the signed data.\n * A third-party signature SHOULD include Signature Target\n * subpacket(s) to give easy identification. Note that we really do\n * mean SHOULD. There are plausible uses for this (such as a blind\n * party that only sees the signature, not the key or source\n * document) that cannot include a target subpacket. */\n third_party: 80\n },\n\n /** Signature subpacket type\n * @enum {Integer}\n * @readonly\n */\n signatureSubpacket: {\n signature_creation_time: 2,\n signature_expiration_time: 3,\n exportable_certification: 4,\n trust_signature: 5,\n regular_expression: 6,\n revocable: 7,\n key_expiration_time: 9,\n placeholder_backwards_compatibility: 10,\n preferred_symmetric_algorithms: 11,\n revocation_key: 12,\n issuer: 16,\n notation_data: 20,\n preferred_hash_algorithms: 21,\n preferred_compression_algorithms: 22,\n key_server_preferences: 23,\n preferred_key_server: 24,\n primary_user_id: 25,\n policy_uri: 26,\n key_flags: 27,\n signers_user_id: 28,\n reason_for_revocation: 29,\n features: 30,\n signature_target: 31,\n embedded_signature: 32,\n issuer_fingerprint: 33,\n preferred_aead_algorithms: 34\n },\n\n /** Key flags\n * @enum {Integer}\n * @readonly\n */\n keyFlags: {\n /** 0x01 - This key may be used to certify other keys. */\n certify_keys: 1,\n /** 0x02 - This key may be used to sign data. */\n sign_data: 2,\n /** 0x04 - This key may be used to encrypt communications. */\n encrypt_communication: 4,\n /** 0x08 - This key may be used to encrypt storage. */\n encrypt_storage: 8,\n /** 0x10 - The private component of this key may have been split\n * by a secret-sharing mechanism. */\n split_private_key: 16,\n /** 0x20 - This key may be used for authentication. */\n authentication: 32,\n /** 0x80 - The private component of this key may be in the\n * possession of more than one person. */\n shared_private_key: 128\n },\n\n /** Key status\n * @enum {Integer}\n * @readonly\n */\n keyStatus: {\n invalid: 0,\n expired: 1,\n revoked: 2,\n valid: 3,\n no_self_cert: 4\n },\n\n /** Armor type\n * @enum {Integer}\n * @readonly\n */\n armor: {\n multipart_section: 0,\n multipart_last: 1,\n signed: 2,\n message: 3,\n public_key: 4,\n private_key: 5,\n signature: 6\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.2.3.25|RFC4880bis-04, section 5.2.3.25}\n * @enum {Integer}\n * @readonly\n */\n features: {\n /** 0x01 - Modification Detection (packets 18 and 19) */\n modification_detection: 1,\n /** 0x02 - AEAD Encrypted Data Packet (packet 20) and version 5\n * Symmetric-Key Encrypted Session Key Packets (packet 3) */\n aead: 2,\n /** 0x04 - Version 5 Public-Key Packet format and corresponding new\n * fingerprint format */\n v5_keys: 4\n },\n\n /** Asserts validity and converts from string/integer to integer. */\n write: function write(type, e) {\n if (typeof e === 'number') {\n e = this.read(type, e);\n }\n\n if (type[e] !== undefined) {\n return type[e];\n }\n\n throw new Error('Invalid enum value.');\n },\n\n /** Converts from an integer to string. */\n read: function read(type, e) {\n if (!type[byValue]) {\n type[byValue] = [];\n (0, _entries2.default)(type).forEach(function (_ref) {\n var _ref2 = (0, _slicedToArray3.default)(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n type[byValue][value] = key;\n });\n }\n\n if (type[byValue][e] !== undefined) {\n return type[byValue][e];\n }\n\n throw new Error('Invalid enum value.');\n }\n\n};\n\n},{\"babel-runtime/core-js/object/entries\":27,\"babel-runtime/core-js/symbol\":33,\"babel-runtime/helpers/slicedToArray\":40}],360:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initialize the HKP client and configure it with the key server url and fetch function.\n * @constructor\n * @param {String} keyServerBaseUrl (optional) The HKP key server base url including\n * the protocol to use e.g. https://pgp.mit.edu\n */\nfunction HKP(keyServerBaseUrl) {\n this._baseUrl = keyServerBaseUrl || _config2.default.keyserver;\n this._fetch = typeof window !== 'undefined' ? window.fetch : _dereq_('node-fetch');\n}\n\n/**\n * Search for a public key on the key server either by key ID or part of the user ID.\n * @param {String} options.keyID The long public key ID.\n * @param {String} options.query This can be any part of the key user ID such as name\n * or email address.\n * @returns {Promise<String>} The ascii armored public key.\n * @async\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This class implements a client for the OpenPGP HTTP Keyserver Protocol (HKP)\n * in order to lookup and upload keys on standard public key servers.\n * @module hkp\n */\n\nHKP.prototype.lookup = function (options) {\n var uri = this._baseUrl + '/pks/lookup?op=get&options=mr&search=';\n var fetch = this._fetch;\n\n if (options.keyId) {\n uri += '0x' + encodeURIComponent(options.keyId);\n } else if (options.query) {\n uri += encodeURIComponent(options.query);\n } else {\n throw new Error('You must provide a query parameter!');\n }\n\n return fetch(uri).then(function (response) {\n if (response.status === 200) {\n return response.text();\n }\n }).then(function (publicKeyArmored) {\n if (!publicKeyArmored || publicKeyArmored.indexOf('-----END PGP PUBLIC KEY BLOCK-----') < 0) {\n return;\n }\n return publicKeyArmored.trim();\n });\n};\n\n/**\n * Upload a public key to the server.\n * @param {String} publicKeyArmored An ascii armored public key to be uploaded.\n * @returns {Promise}\n * @async\n */\nHKP.prototype.upload = function (publicKeyArmored) {\n var uri = this._baseUrl + '/pks/add';\n var fetch = this._fetch;\n\n return fetch(uri, {\n method: 'post',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: 'keytext=' + encodeURIComponent(publicKeyArmored)\n });\n};\n\nexports.default = HKP;\n\n},{\"./config\":325,\"node-fetch\":\"node-fetch\"}],361:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HKP = exports.AsyncProxy = exports.Keyring = exports.crypto = exports.config = exports.enums = exports.armor = exports.OID = exports.KDFParams = exports.ECDHSymmetricKey = exports.Keyid = exports.S2K = exports.MPI = exports.packet = exports.util = exports.cleartext = exports.message = exports.signature = exports.key = exports.destroyWorker = exports.getWorker = exports.initWorker = exports.decryptSessionKeys = exports.encryptSessionKey = exports.decryptKey = exports.reformatKey = exports.generateKey = exports.verify = exports.sign = exports.decrypt = exports.encrypt = undefined;\n\nvar _openpgp = _dereq_('./openpgp');\n\nObject.defineProperty(exports, 'encrypt', {\n enumerable: true,\n get: function get() {\n return _openpgp.encrypt;\n }\n});\nObject.defineProperty(exports, 'decrypt', {\n enumerable: true,\n get: function get() {\n return _openpgp.decrypt;\n }\n});\nObject.defineProperty(exports, 'sign', {\n enumerable: true,\n get: function get() {\n return _openpgp.sign;\n }\n});\nObject.defineProperty(exports, 'verify', {\n enumerable: true,\n get: function get() {\n return _openpgp.verify;\n }\n});\nObject.defineProperty(exports, 'generateKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.generateKey;\n }\n});\nObject.defineProperty(exports, 'reformatKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.reformatKey;\n }\n});\nObject.defineProperty(exports, 'decryptKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.decryptKey;\n }\n});\nObject.defineProperty(exports, 'encryptSessionKey', {\n enumerable: true,\n get: function get() {\n return _openpgp.encryptSessionKey;\n }\n});\nObject.defineProperty(exports, 'decryptSessionKeys', {\n enumerable: true,\n get: function get() {\n return _openpgp.decryptSessionKeys;\n }\n});\nObject.defineProperty(exports, 'initWorker', {\n enumerable: true,\n get: function get() {\n return _openpgp.initWorker;\n }\n});\nObject.defineProperty(exports, 'getWorker', {\n enumerable: true,\n get: function get() {\n return _openpgp.getWorker;\n }\n});\nObject.defineProperty(exports, 'destroyWorker', {\n enumerable: true,\n get: function get() {\n return _openpgp.destroyWorker;\n }\n});\n\nvar _util = _dereq_('./util');\n\nObject.defineProperty(exports, 'util', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_util).default;\n }\n});\n\nvar _packet = _dereq_('./packet');\n\nObject.defineProperty(exports, 'packet', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_packet).default;\n }\n});\n\nvar _mpi = _dereq_('./type/mpi');\n\nObject.defineProperty(exports, 'MPI', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_mpi).default;\n }\n});\n\nvar _s2k = _dereq_('./type/s2k');\n\nObject.defineProperty(exports, 'S2K', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_s2k).default;\n }\n});\n\nvar _keyid = _dereq_('./type/keyid');\n\nObject.defineProperty(exports, 'Keyid', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_keyid).default;\n }\n});\n\nvar _ecdh_symkey = _dereq_('./type/ecdh_symkey');\n\nObject.defineProperty(exports, 'ECDHSymmetricKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_ecdh_symkey).default;\n }\n});\n\nvar _kdf_params = _dereq_('./type/kdf_params');\n\nObject.defineProperty(exports, 'KDFParams', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_kdf_params).default;\n }\n});\n\nvar _oid = _dereq_('./type/oid');\n\nObject.defineProperty(exports, 'OID', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_oid).default;\n }\n});\n\nvar _armor = _dereq_('./encoding/armor');\n\nObject.defineProperty(exports, 'armor', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_armor).default;\n }\n});\n\nvar _enums = _dereq_('./enums');\n\nObject.defineProperty(exports, 'enums', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_enums).default;\n }\n});\n\nvar _config = _dereq_('./config/config');\n\nObject.defineProperty(exports, 'config', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_config).default;\n }\n});\n\nvar _crypto = _dereq_('./crypto');\n\nObject.defineProperty(exports, 'crypto', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_crypto).default;\n }\n});\n\nvar _keyring = _dereq_('./keyring');\n\nObject.defineProperty(exports, 'Keyring', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_keyring).default;\n }\n});\n\nvar _async_proxy = _dereq_('./worker/async_proxy');\n\nObject.defineProperty(exports, 'AsyncProxy', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_async_proxy).default;\n }\n});\n\nvar _hkp = _dereq_('./hkp');\n\nObject.defineProperty(exports, 'HKP', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_hkp).default;\n }\n});\n\nvar openpgp = _interopRequireWildcard(_openpgp);\n\nvar _key = _dereq_('./key');\n\nvar keyMod = _interopRequireWildcard(_key);\n\nvar _signature = _dereq_('./signature');\n\nvar signatureMod = _interopRequireWildcard(_signature);\n\nvar _message = _dereq_('./message');\n\nvar messageMod = _interopRequireWildcard(_message);\n\nvar _cleartext = _dereq_('./cleartext');\n\nvar cleartextMod = _interopRequireWildcard(_cleartext);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = openpgp;\n\n/**\n * Export each high level api function separately.\n * Usage:\n *\n * import { encryptMessage } from 'openpgp.js'\n * encryptMessage(keys, text)\n */\n/* eslint-disable import/newline-after-import, import/first */\n\n/**\n * Export high level api as default.\n * Usage:\n *\n * import openpgp from 'openpgp.js'\n * openpgp.encryptMessage(keys, text)\n */\n\n\n/**\n * @see module:key\n * @name module:openpgp.key\n */\n\nvar key = exports.key = keyMod;\n\n/**\n * @see module:signature\n * @name module:openpgp.signature\n */\nvar signature = exports.signature = signatureMod;\n\n/**\n * @see module:message\n * @name module:openpgp.message\n */\nvar message = exports.message = messageMod;\n\n/**\n * @see module:cleartext\n * @name module:openpgp.cleartext\n */\nvar cleartext = exports.cleartext = cleartextMod;\n\n/**\n * @see module:util\n * @name module:openpgp.util\n */\n\n},{\"./cleartext\":322,\"./config/config\":324,\"./crypto\":340,\"./encoding/armor\":357,\"./enums\":359,\"./hkp\":360,\"./key\":362,\"./keyring\":363,\"./message\":366,\"./openpgp\":367,\"./packet\":371,\"./signature\":391,\"./type/ecdh_symkey\":392,\"./type/kdf_params\":393,\"./type/keyid\":394,\"./type/mpi\":395,\"./type/oid\":396,\"./type/s2k\":397,\"./util\":398,\"./worker/async_proxy\":399}],362:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isAeadSupported = exports.getPreferredAlgo = exports.getPreferredHashAlgo = exports.reformat = exports.generate = undefined;\n\nvar _values = _dereq_('babel-runtime/core-js/object/values');\n\nvar _values2 = _interopRequireDefault(_values);\n\nvar _getPrototypeOf = _dereq_('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Merges signatures from source[attr] to dest[attr]\n * @private\n * @param {Object} source\n * @param {Object} dest\n * @param {String} attr\n * @param {Function} checkFn optional, signature only merged if true\n */\nvar mergeSignatures = function () {\n var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18(source, dest, attr, checkFn) {\n return _regenerator2.default.wrap(function _callee18$(_context18) {\n while (1) {\n switch (_context18.prev = _context18.next) {\n case 0:\n source = source[attr];\n\n if (!source) {\n _context18.next = 8;\n break;\n }\n\n if (dest[attr].length) {\n _context18.next = 6;\n break;\n }\n\n dest[attr] = source;\n _context18.next = 8;\n break;\n\n case 6:\n _context18.next = 8;\n return _promise2.default.all(source.map(function () {\n var _ref20 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(sourceSig) {\n return _regenerator2.default.wrap(function _callee17$(_context17) {\n while (1) {\n switch (_context17.prev = _context17.next) {\n case 0:\n _context17.t1 = !sourceSig.isExpired();\n\n if (!_context17.t1) {\n _context17.next = 8;\n break;\n }\n\n _context17.t2 = !checkFn;\n\n if (_context17.t2) {\n _context17.next = 7;\n break;\n }\n\n _context17.next = 6;\n return checkFn(sourceSig);\n\n case 6:\n _context17.t2 = _context17.sent;\n\n case 7:\n _context17.t1 = _context17.t2;\n\n case 8:\n _context17.t0 = _context17.t1;\n\n if (!_context17.t0) {\n _context17.next = 11;\n break;\n }\n\n _context17.t0 = !dest[attr].some(function (destSig) {\n return _util2.default.equalsUint8Array(destSig.signature, sourceSig.signature);\n });\n\n case 11:\n if (!_context17.t0) {\n _context17.next = 13;\n break;\n }\n\n dest[attr].push(sourceSig);\n\n case 13:\n case 'end':\n return _context17.stop();\n }\n }\n }, _callee17, this);\n }));\n\n return function (_x36) {\n return _ref20.apply(this, arguments);\n };\n }()));\n\n case 8:\n case 'end':\n return _context18.stop();\n }\n }\n }, _callee18, this);\n }));\n\n return function mergeSignatures(_x32, _x33, _x34, _x35) {\n return _ref19.apply(this, arguments);\n };\n}();\n\n// TODO\n\n\n/**\n * Generates a new OpenPGP key. Supports RSA and ECC keys.\n * Primary and subkey will be of same type.\n * @param {module:enums.publicKey} [options.keyType=module:enums.publicKey.rsa_encrypt_sign]\n * To indicate what type of key to make.\n * RSA is 1. See {@link https://tools.ietf.org/html/rfc4880#section-9.1}\n * @param {Integer} options.numBits number of bits for the key creation.\n * @param {String|Array<String>} options.userIds\n * Assumes already in form of \"User Name <username@email.com>\"\n * If array is used, the first userId is set as primary user Id\n * @param {String} options.passphrase The passphrase used to encrypt the resulting private key\n * @param {Number} [options.keyExpirationTime=0]\n * The number of seconds after the key creation time that the key expires\n * @param {String} curve (optional) elliptic curve for ECC keys\n * @param {Date} date Override the creation date of the key and the key signatures\n * @param {Array<Object>} subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * sign parameter defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @returns {Promise<module:key.Key>}\n * @async\n * @static\n */\nvar generate = exports.generate = function () {\n var _ref43 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee41(options) {\n var generateSecretKey = function () {\n var _ref44 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee39(options) {\n var secretKeyPacket;\n return _regenerator2.default.wrap(function _callee39$(_context39) {\n while (1) {\n switch (_context39.prev = _context39.next) {\n case 0:\n secretKeyPacket = new _packet2.default.SecretKey(options.date);\n\n secretKeyPacket.packets = null;\n secretKeyPacket.algorithm = _enums2.default.read(_enums2.default.publicKey, options.algorithm);\n _context39.next = 5;\n return secretKeyPacket.generate(options.numBits, options.curve);\n\n case 5:\n return _context39.abrupt('return', secretKeyPacket);\n\n case 6:\n case 'end':\n return _context39.stop();\n }\n }\n }, _callee39, this);\n }));\n\n return function generateSecretKey(_x74) {\n return _ref44.apply(this, arguments);\n };\n }();\n\n var generateSecretSubkey = function () {\n var _ref45 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee40(options) {\n var secretSubkeyPacket;\n return _regenerator2.default.wrap(function _callee40$(_context40) {\n while (1) {\n switch (_context40.prev = _context40.next) {\n case 0:\n secretSubkeyPacket = new _packet2.default.SecretSubkey(options.date);\n\n secretSubkeyPacket.packets = null;\n secretSubkeyPacket.algorithm = _enums2.default.read(_enums2.default.publicKey, options.algorithm);\n _context40.next = 5;\n return secretSubkeyPacket.generate(options.numBits, options.curve);\n\n case 5:\n return _context40.abrupt('return', secretSubkeyPacket);\n\n case 6:\n case 'end':\n return _context40.stop();\n }\n }\n }, _callee40, this);\n }));\n\n return function generateSecretSubkey(_x75) {\n return _ref45.apply(this, arguments);\n };\n }();\n\n var promises, sanitizeKeyOptions;\n return _regenerator2.default.wrap(function _callee41$(_context41) {\n while (1) {\n switch (_context41.prev = _context41.next) {\n case 0:\n sanitizeKeyOptions = function sanitizeKeyOptions(options) {\n var subkeyDefaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n options.curve = options.curve || subkeyDefaults.curve;\n options.numBits = options.numBits || subkeyDefaults.numBits;\n options.keyExpirationTime = options.keyExpirationTime !== undefined ? options.keyExpirationTime : subkeyDefaults.keyExpirationTime;\n options.passphrase = _util2.default.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n options.date = options.date || subkeyDefaults.date;\n\n options.sign = options.sign || false;\n\n if (options.curve) {\n try {\n options.curve = _enums2.default.write(_enums2.default.curve, options.curve);\n } catch (e) {\n throw new Error('Not valid curve.');\n }\n if (options.curve === _enums2.default.curve.ed25519 || options.curve === _enums2.default.curve.curve25519) {\n if (options.sign) {\n options.algorithm = _enums2.default.publicKey.eddsa;\n options.curve = _enums2.default.curve.ed25519;\n } else {\n options.algorithm = _enums2.default.publicKey.ecdh;\n options.curve = _enums2.default.curve.curve25519;\n }\n } else {\n if (options.sign) {\n options.algorithm = _enums2.default.publicKey.ecdsa;\n } else {\n options.algorithm = _enums2.default.publicKey.ecdh;\n }\n }\n } else if (options.numBits) {\n options.algorithm = _enums2.default.publicKey.rsa_encrypt_sign;\n } else {\n throw new Error('Unrecognized key type');\n }\n return options;\n };\n\n options.sign = true; // primary key is always a signing key\n options = sanitizeKeyOptions(options);\n options.subkeys = options.subkeys.map(function (subkey, index) {\n return sanitizeKeyOptions(options.subkeys[index], options);\n });\n\n promises = [generateSecretKey(options)];\n\n promises = promises.concat(options.subkeys.map(generateSecretSubkey));\n return _context41.abrupt('return', _promise2.default.all(promises).then(function (packets) {\n return wrapKeyObject(packets[0], packets.slice(1), options);\n }));\n\n case 7:\n case 'end':\n return _context41.stop();\n }\n }\n }, _callee41, this);\n }));\n\n return function generate(_x72) {\n return _ref43.apply(this, arguments);\n };\n}();\n\n/**\n * Reformats and signs an OpenPGP key with a given User ID. Currently only supports RSA keys.\n * @param {module:key.Key} options.privateKey The private key to reformat\n * @param {module:enums.publicKey} [options.keyType=module:enums.publicKey.rsa_encrypt_sign]\n * @param {String|Array<String>} options.userIds\n * Assumes already in form of \"User Name <username@email.com>\"\n * If array is used, the first userId is set as primary user Id\n * @param {String} options.passphrase The passphrase used to encrypt the resulting private key\n * @param {Number} [options.keyExpirationTime=0]\n * The number of seconds after the key creation time that the key expires\n * @param {Date} date Override the creation date of the key and the key signatures\n * @param {Array<Object>} subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n *\n * @returns {Promise<module:key.Key>}\n * @async\n * @static\n */\n\n\nvar reformat = exports.reformat = function () {\n var _ref46 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee42(options) {\n var isDecrypted, packetlist, secretKeyPacket, secretSubkeyPackets, i, sanitizeKeyOptions;\n return _regenerator2.default.wrap(function _callee42$(_context42) {\n while (1) {\n switch (_context42.prev = _context42.next) {\n case 0:\n sanitizeKeyOptions = function sanitizeKeyOptions(options) {\n var subkeyDefaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n options.keyExpirationTime = options.keyExpirationTime || subkeyDefaults.keyExpirationTime;\n options.passphrase = _util2.default.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n options.date = options.date || subkeyDefaults.date;\n\n return options;\n };\n\n options = sanitizeKeyOptions(options);\n\n _context42.prev = 2;\n isDecrypted = options.privateKey.getKeyPackets().every(function (keyPacket) {\n return keyPacket.isDecrypted;\n });\n\n if (isDecrypted) {\n _context42.next = 7;\n break;\n }\n\n _context42.next = 7;\n return options.privateKey.decrypt();\n\n case 7:\n _context42.next = 12;\n break;\n\n case 9:\n _context42.prev = 9;\n _context42.t0 = _context42['catch'](2);\n throw new Error('Key not decrypted');\n\n case 12:\n packetlist = options.privateKey.toPacketlist();\n secretKeyPacket = void 0;\n secretSubkeyPackets = [];\n\n for (i = 0; i < packetlist.length; i++) {\n if (packetlist[i].tag === _enums2.default.packet.secretKey) {\n secretKeyPacket = packetlist[i];\n } else if (packetlist[i].tag === _enums2.default.packet.secretSubkey) {\n secretSubkeyPackets.push(packetlist[i]);\n }\n }\n\n if (secretKeyPacket) {\n _context42.next = 18;\n break;\n }\n\n throw new Error('Key does not contain a secret key packet');\n\n case 18:\n\n if (!options.subkeys) {\n options.subkeys = secretSubkeyPackets.map(function () {\n return {};\n });\n }\n\n if (!(options.subkeys.length !== secretSubkeyPackets.length)) {\n _context42.next = 21;\n break;\n }\n\n throw new Error('Number of subkey options does not match number of subkeys');\n\n case 21:\n\n options.subkeys = options.subkeys.map(function (subkey, index) {\n return sanitizeKeyOptions(options.subkeys[index], options);\n });\n\n return _context42.abrupt('return', wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options));\n\n case 23:\n case 'end':\n return _context42.stop();\n }\n }\n }, _callee42, this, [[2, 9]]);\n }));\n\n return function reformat(_x76) {\n return _ref46.apply(this, arguments);\n };\n}();\n\nvar wrapKeyObject = function () {\n var _ref47 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee47(secretKeyPacket, secretSubkeyPackets, options) {\n var packetlist;\n return _regenerator2.default.wrap(function _callee47$(_context47) {\n while (1) {\n switch (_context47.prev = _context47.next) {\n case 0:\n if (!options.passphrase) {\n _context47.next = 3;\n break;\n }\n\n _context47.next = 3;\n return secretKeyPacket.encrypt(options.passphrase);\n\n case 3:\n _context47.next = 5;\n return _promise2.default.all(secretSubkeyPackets.map(function () {\n var _ref48 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee43(secretSubkeyPacket, index) {\n var subkeyPassphrase;\n return _regenerator2.default.wrap(function _callee43$(_context43) {\n while (1) {\n switch (_context43.prev = _context43.next) {\n case 0:\n subkeyPassphrase = options.subkeys[index].passphrase;\n\n if (!subkeyPassphrase) {\n _context43.next = 4;\n break;\n }\n\n _context43.next = 4;\n return secretSubkeyPacket.encrypt(subkeyPassphrase);\n\n case 4:\n case 'end':\n return _context43.stop();\n }\n }\n }, _callee43, this);\n }));\n\n return function (_x81, _x82) {\n return _ref48.apply(this, arguments);\n };\n }()));\n\n case 5:\n packetlist = new _packet2.default.List();\n\n\n packetlist.push(secretKeyPacket);\n\n _context47.next = 9;\n return _promise2.default.all(options.userIds.map(function () {\n var _ref49 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee44(userId, index) {\n var userIdPacket, dataToSign, signaturePacket;\n return _regenerator2.default.wrap(function _callee44$(_context44) {\n while (1) {\n switch (_context44.prev = _context44.next) {\n case 0:\n userIdPacket = new _packet2.default.Userid();\n\n userIdPacket.format(userId);\n\n dataToSign = {};\n\n dataToSign.userid = userIdPacket;\n dataToSign.key = secretKeyPacket;\n signaturePacket = new _packet2.default.Signature(options.date);\n\n signaturePacket.signatureType = _enums2.default.signature.cert_generic;\n signaturePacket.publicKeyAlgorithm = secretKeyPacket.algorithm;\n _context44.next = 10;\n return getPreferredHashAlgo(secretKeyPacket);\n\n case 10:\n signaturePacket.hashAlgorithm = _context44.sent;\n\n signaturePacket.keyFlags = [_enums2.default.keyFlags.certify_keys | _enums2.default.keyFlags.sign_data];\n signaturePacket.preferredSymmetricAlgorithms = [];\n // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support)\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes256);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes128);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes192);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.cast5);\n signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.tripledes);\n if (_config2.default.aead_protect && _config2.default.aead_protect_version === 4) {\n signaturePacket.preferredAeadAlgorithms = [];\n signaturePacket.preferredAeadAlgorithms.push(_enums2.default.aead.eax);\n signaturePacket.preferredAeadAlgorithms.push(_enums2.default.aead.ocb);\n }\n signaturePacket.preferredHashAlgorithms = [];\n // prefer fast asm.js implementations (SHA-256). SHA-1 will not be secure much longer...move to bottom of list\n signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha256);\n signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha512);\n signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha1);\n signaturePacket.preferredCompressionAlgorithms = [];\n signaturePacket.preferredCompressionAlgorithms.push(_enums2.default.compression.zlib);\n signaturePacket.preferredCompressionAlgorithms.push(_enums2.default.compression.zip);\n if (index === 0) {\n signaturePacket.isPrimaryUserID = true;\n }\n if (_config2.default.integrity_protect) {\n signaturePacket.features = [0];\n signaturePacket.features[0] |= _enums2.default.features.modification_detection;\n }\n if (_config2.default.aead_protect && _config2.default.aead_protect_version === 4) {\n signaturePacket.features || (signaturePacket.features = [0]);\n signaturePacket.features[0] |= _enums2.default.features.aead;\n signaturePacket.features[0] |= _enums2.default.features.v5_keys;\n }\n if (options.keyExpirationTime > 0) {\n signaturePacket.keyExpirationTime = options.keyExpirationTime;\n signaturePacket.keyNeverExpires = false;\n }\n _context44.next = 32;\n return signaturePacket.sign(secretKeyPacket, dataToSign);\n\n case 32:\n return _context44.abrupt('return', { userIdPacket: userIdPacket, signaturePacket: signaturePacket });\n\n case 33:\n case 'end':\n return _context44.stop();\n }\n }\n }, _callee44, this);\n }));\n\n return function (_x83, _x84) {\n return _ref49.apply(this, arguments);\n };\n }())).then(function (list) {\n list.forEach(function (_ref50) {\n var userIdPacket = _ref50.userIdPacket,\n signaturePacket = _ref50.signaturePacket;\n\n packetlist.push(userIdPacket);\n packetlist.push(signaturePacket);\n });\n });\n\n case 9:\n _context47.next = 11;\n return _promise2.default.all(secretSubkeyPackets.map(function () {\n var _ref51 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee45(secretSubkeyPacket, index) {\n var subkeyOptions, dataToSign, subkeySignaturePacket;\n return _regenerator2.default.wrap(function _callee45$(_context45) {\n while (1) {\n switch (_context45.prev = _context45.next) {\n case 0:\n subkeyOptions = options.subkeys[index];\n dataToSign = {};\n\n dataToSign.key = secretKeyPacket;\n dataToSign.bind = secretSubkeyPacket;\n subkeySignaturePacket = new _packet2.default.Signature(subkeyOptions.date);\n\n subkeySignaturePacket.signatureType = _enums2.default.signature.subkey_binding;\n subkeySignaturePacket.publicKeyAlgorithm = secretKeyPacket.algorithm;\n _context45.next = 9;\n return getPreferredHashAlgo(secretSubkeyPacket);\n\n case 9:\n subkeySignaturePacket.hashAlgorithm = _context45.sent;\n\n subkeySignaturePacket.keyFlags = subkeyOptions.sign ? _enums2.default.keyFlags.sign_data : [_enums2.default.keyFlags.encrypt_communication | _enums2.default.keyFlags.encrypt_storage];\n if (subkeyOptions.keyExpirationTime > 0) {\n subkeySignaturePacket.keyExpirationTime = subkeyOptions.keyExpirationTime;\n subkeySignaturePacket.keyNeverExpires = false;\n }\n _context45.next = 14;\n return subkeySignaturePacket.sign(secretKeyPacket, dataToSign);\n\n case 14:\n return _context45.abrupt('return', { secretSubkeyPacket: secretSubkeyPacket, subkeySignaturePacket: subkeySignaturePacket });\n\n case 15:\n case 'end':\n return _context45.stop();\n }\n }\n }, _callee45, this);\n }));\n\n return function (_x85, _x86) {\n return _ref51.apply(this, arguments);\n };\n }())).then(function (packets) {\n packets.forEach(function (_ref52) {\n var secretSubkeyPacket = _ref52.secretSubkeyPacket,\n subkeySignaturePacket = _ref52.subkeySignaturePacket;\n\n packetlist.push(secretSubkeyPacket);\n packetlist.push(subkeySignaturePacket);\n });\n });\n\n case 11:\n\n // set passphrase protection\n if (options.passphrase) {\n secretKeyPacket.clearPrivateParams();\n }\n\n _context47.next = 14;\n return _promise2.default.all(secretSubkeyPackets.map(function () {\n var _ref53 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee46(secretSubkeyPacket, index) {\n var subkeyPassphrase;\n return _regenerator2.default.wrap(function _callee46$(_context46) {\n while (1) {\n switch (_context46.prev = _context46.next) {\n case 0:\n subkeyPassphrase = options.subkeys[index].passphrase;\n\n if (subkeyPassphrase) {\n secretSubkeyPacket.clearPrivateParams();\n }\n\n case 2:\n case 'end':\n return _context46.stop();\n }\n }\n }, _callee46, this);\n }));\n\n return function (_x87, _x88) {\n return _ref53.apply(this, arguments);\n };\n }()));\n\n case 14:\n return _context47.abrupt('return', new Key(packetlist));\n\n case 15:\n case 'end':\n return _context47.stop();\n }\n }\n }, _callee47, this);\n }));\n\n return function wrapKeyObject(_x78, _x79, _x80) {\n return _ref47.apply(this, arguments);\n };\n}();\n\n/**\n * Checks if a given certificate or binding signature is revoked\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Object} dataToVerify The data to check\n * @param {Array<module:packet.Signature>} revocations The revocation signatures to check\n * @param {module:packet.Signature} signature The certificate or signature to check\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key packet to check the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the signature revokes the data\n * @async\n */\n\n\nvar isDataRevoked = function () {\n var _ref54 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee49(primaryKey, dataToVerify, revocations, signature, key) {\n var date = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new Date();\n var normDate, revocationKeyIds;\n return _regenerator2.default.wrap(function _callee49$(_context49) {\n while (1) {\n switch (_context49.prev = _context49.next) {\n case 0:\n key = key || primaryKey;\n normDate = _util2.default.normalizeDate(date);\n revocationKeyIds = [];\n _context49.next = 5;\n return _promise2.default.all(revocations.map(function () {\n var _ref55 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee48(revocationSignature) {\n return _regenerator2.default.wrap(function _callee48$(_context48) {\n while (1) {\n switch (_context48.prev = _context48.next) {\n case 0:\n _context48.t0 = !(_config2.default.revocations_expire && revocationSignature.isExpired(normDate));\n\n if (!_context48.t0) {\n _context48.next = 8;\n break;\n }\n\n _context48.t1 = revocationSignature.verified;\n\n if (_context48.t1) {\n _context48.next = 7;\n break;\n }\n\n _context48.next = 6;\n return revocationSignature.verify(key, dataToVerify);\n\n case 6:\n _context48.t1 = _context48.sent;\n\n case 7:\n _context48.t0 = _context48.t1;\n\n case 8:\n if (!_context48.t0) {\n _context48.next = 11;\n break;\n }\n\n // TODO get an identifier of the revoked object instead\n revocationKeyIds.push(revocationSignature.issuerKeyId);\n return _context48.abrupt('return', true);\n\n case 11:\n return _context48.abrupt('return', false);\n\n case 12:\n case 'end':\n return _context48.stop();\n }\n }\n }, _callee48, this);\n }));\n\n return function (_x95) {\n return _ref55.apply(this, arguments);\n };\n }()));\n\n case 5:\n if (!signature) {\n _context49.next = 8;\n break;\n }\n\n signature.revoked = revocationKeyIds.some(function (keyId) {\n return keyId.equals(signature.issuerKeyId);\n }) ? true : signature.revoked;\n return _context49.abrupt('return', signature.revoked);\n\n case 8:\n return _context49.abrupt('return', revocationKeyIds.length > 0);\n\n case 9:\n case 'end':\n return _context49.stop();\n }\n }\n }, _callee49, this);\n }));\n\n return function isDataRevoked(_x89, _x90, _x91, _x92, _x93) {\n return _ref54.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the preferred signature hash algorithm of a key\n * @param {object} key\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID\n * @returns {Promise<String>}\n * @async\n */\nvar getPreferredHashAlgo = exports.getPreferredHashAlgo = function () {\n var _ref56 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee50(key) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var hash_algo, pref_algo, primaryUser, _primaryUser$selfCert;\n\n return _regenerator2.default.wrap(function _callee50$(_context50) {\n while (1) {\n switch (_context50.prev = _context50.next) {\n case 0:\n hash_algo = _config2.default.prefer_hash_algorithm;\n pref_algo = hash_algo;\n\n if (!(key instanceof Key)) {\n _context50.next = 8;\n break;\n }\n\n _context50.next = 5;\n return key.getPrimaryUser(date, userId);\n\n case 5:\n primaryUser = _context50.sent;\n\n if (primaryUser && primaryUser.selfCertification.preferredHashAlgorithms) {\n _primaryUser$selfCert = (0, _slicedToArray3.default)(primaryUser.selfCertification.preferredHashAlgorithms, 1);\n pref_algo = _primaryUser$selfCert[0];\n\n hash_algo = _crypto2.default.hash.getHashByteLength(hash_algo) <= _crypto2.default.hash.getHashByteLength(pref_algo) ? pref_algo : hash_algo;\n }\n // disable expiration checks\n key = key.getSigningKeyPacket(undefined, null, userId);\n\n case 8:\n switch ((0, _getPrototypeOf2.default)(key)) {\n case _packet2.default.SecretKey.prototype:\n case _packet2.default.PublicKey.prototype:\n case _packet2.default.SecretSubkey.prototype:\n case _packet2.default.PublicSubkey.prototype:\n switch (key.algorithm) {\n case 'ecdh':\n case 'ecdsa':\n case 'eddsa':\n pref_algo = _crypto2.default.publicKey.elliptic.getPreferredHashAlgo(key.params[0]);\n }\n }\n return _context50.abrupt('return', _crypto2.default.hash.getHashByteLength(hash_algo) <= _crypto2.default.hash.getHashByteLength(pref_algo) ? pref_algo : hash_algo);\n\n case 10:\n case 'end':\n return _context50.stop();\n }\n }\n }, _callee50, this);\n }));\n\n return function getPreferredHashAlgo(_x97) {\n return _ref56.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the preferred symmetric/aead algorithm for a set of keys\n * @param {symmetric|aead} type Type of preference to return\n * @param {Array<module:key.Key>} keys Set of keys\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID\n * @returns {Promise<module:enums.symmetric>} Preferred symmetric algorithm\n * @async\n */\n\n\nvar getPreferredAlgo = exports.getPreferredAlgo = function () {\n var _ref57 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee52(type, keys) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var prefProperty, defaultAlgo, prioMap, prefAlgo;\n return _regenerator2.default.wrap(function _callee52$(_context52) {\n while (1) {\n switch (_context52.prev = _context52.next) {\n case 0:\n prefProperty = type === 'symmetric' ? 'preferredSymmetricAlgorithms' : 'preferredAeadAlgorithms';\n defaultAlgo = type === 'symmetric' ? _config2.default.encryption_cipher : _config2.default.aead_mode;\n prioMap = {};\n _context52.next = 5;\n return _promise2.default.all(keys.map(function () {\n var _ref58 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee51(key) {\n var primaryUser;\n return _regenerator2.default.wrap(function _callee51$(_context51) {\n while (1) {\n switch (_context51.prev = _context51.next) {\n case 0:\n _context51.next = 2;\n return key.getPrimaryUser(date, userId);\n\n case 2:\n primaryUser = _context51.sent;\n\n if (!(!primaryUser || !primaryUser.selfCertification[prefProperty])) {\n _context51.next = 5;\n break;\n }\n\n return _context51.abrupt('return', defaultAlgo);\n\n case 5:\n primaryUser.selfCertification[prefProperty].forEach(function (algo, index) {\n var entry = prioMap[algo] || (prioMap[algo] = { prio: 0, count: 0, algo: algo });\n entry.prio += 64 >> index;\n entry.count++;\n });\n\n case 6:\n case 'end':\n return _context51.stop();\n }\n }\n }, _callee51, this);\n }));\n\n return function (_x104) {\n return _ref58.apply(this, arguments);\n };\n }()));\n\n case 5:\n prefAlgo = { prio: 0, algo: defaultAlgo };\n\n (0, _values2.default)(prioMap).forEach(function (_ref59) {\n var prio = _ref59.prio,\n count = _ref59.count,\n algo = _ref59.algo;\n\n try {\n if (algo !== _enums2.default[type].plaintext && algo !== _enums2.default[type].idea && // not implemented\n _enums2.default.read(_enums2.default[type], algo) && // known algorithm\n count === keys.length && // available for all keys\n prio > prefAlgo.prio) {\n prefAlgo = prioMap[algo];\n }\n } catch (e) {}\n });\n return _context52.abrupt('return', prefAlgo.algo);\n\n case 8:\n case 'end':\n return _context52.stop();\n }\n }\n }, _callee52, this);\n }));\n\n return function getPreferredAlgo(_x100, _x101) {\n return _ref57.apply(this, arguments);\n };\n}();\n\n/**\n * Returns whether aead is supported by all keys in the set\n * @param {Array<module:key.Key>} keys Set of keys\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Promise<Boolean>}\n * @async\n */\n\n\nvar isAeadSupported = exports.isAeadSupported = function () {\n var _ref60 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee54(keys) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var supported;\n return _regenerator2.default.wrap(function _callee54$(_context54) {\n while (1) {\n switch (_context54.prev = _context54.next) {\n case 0:\n supported = true;\n // TODO replace when Promise.some or Promise.any are implemented\n\n _context54.next = 3;\n return _promise2.default.all(keys.map(function () {\n var _ref61 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee53(key) {\n var primaryUser;\n return _regenerator2.default.wrap(function _callee53$(_context53) {\n while (1) {\n switch (_context53.prev = _context53.next) {\n case 0:\n _context53.next = 2;\n return key.getPrimaryUser(date, userId);\n\n case 2:\n primaryUser = _context53.sent;\n\n if (!primaryUser || !primaryUser.selfCertification.features || !(primaryUser.selfCertification.features[0] & _enums2.default.features.aead)) {\n supported = false;\n }\n\n case 4:\n case 'end':\n return _context53.stop();\n }\n }\n }, _callee53, this);\n }));\n\n return function (_x108) {\n return _ref61.apply(this, arguments);\n };\n }()));\n\n case 3:\n return _context54.abrupt('return', supported);\n\n case 4:\n case 'end':\n return _context54.stop();\n }\n }\n }, _callee54, this);\n }));\n\n return function isAeadSupported(_x105) {\n return _ref60.apply(this, arguments);\n };\n}();\n\nexports.Key = Key;\nexports.read = read;\nexports.readArmored = readArmored;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP key. Must contain a primary key.\n * Can contain additional subkeys, signatures, user ids, user attributes.\n * @param {module:packet.List} packetlist The packets that form this key\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires crypto\n * @requires packet\n * @requires config\n * @requires enums\n * @requires util\n * @module key\n */\n\nfunction Key(packetlist) {\n if (!(this instanceof Key)) {\n return new Key(packetlist);\n }\n // same data as in packetlist but in structured form\n this.primaryKey = null;\n this.revocationSignatures = [];\n this.directSignatures = [];\n this.users = [];\n this.subKeys = [];\n this.packetlist2structure(packetlist);\n if (!this.primaryKey || !this.users.length) {\n throw new Error('Invalid key: need at least key and user ID packet');\n }\n}\n\n/**\n * Transforms packetlist to structured key data\n * @param {module:packet.List} packetlist The packets that form a key\n */\nKey.prototype.packetlist2structure = function (packetlist) {\n var user = void 0;\n var primaryKeyId = void 0;\n var subKey = void 0;\n for (var i = 0; i < packetlist.length; i++) {\n switch (packetlist[i].tag) {\n case _enums2.default.packet.publicKey:\n case _enums2.default.packet.secretKey:\n this.primaryKey = packetlist[i];\n primaryKeyId = this.primaryKey.getKeyId();\n break;\n case _enums2.default.packet.userid:\n case _enums2.default.packet.userAttribute:\n user = new User(packetlist[i]);\n this.users.push(user);\n break;\n case _enums2.default.packet.publicSubkey:\n case _enums2.default.packet.secretSubkey:\n user = null;\n subKey = new SubKey(packetlist[i]);\n this.subKeys.push(subKey);\n break;\n case _enums2.default.packet.signature:\n switch (packetlist[i].signatureType) {\n case _enums2.default.signature.cert_generic:\n case _enums2.default.signature.cert_persona:\n case _enums2.default.signature.cert_casual:\n case _enums2.default.signature.cert_positive:\n if (!user) {\n _util2.default.print_debug('Dropping certification signatures without preceding user packet');\n continue;\n }\n if (packetlist[i].issuerKeyId.equals(primaryKeyId)) {\n user.selfCertifications.push(packetlist[i]);\n } else {\n user.otherCertifications.push(packetlist[i]);\n }\n break;\n case _enums2.default.signature.cert_revocation:\n if (user) {\n user.revocationSignatures.push(packetlist[i]);\n } else {\n this.directSignatures.push(packetlist[i]);\n }\n break;\n case _enums2.default.signature.key:\n this.directSignatures.push(packetlist[i]);\n break;\n case _enums2.default.signature.subkey_binding:\n if (!subKey) {\n _util2.default.print_debug('Dropping subkey binding signature without preceding subkey packet');\n continue;\n }\n subKey.bindingSignatures.push(packetlist[i]);\n break;\n case _enums2.default.signature.key_revocation:\n this.revocationSignatures.push(packetlist[i]);\n break;\n case _enums2.default.signature.subkey_revocation:\n if (!subKey) {\n _util2.default.print_debug('Dropping subkey revocation signature without preceding subkey packet');\n continue;\n }\n subKey.revocationSignatures.push(packetlist[i]);\n break;\n }\n break;\n }\n }\n};\n\n/**\n * Transforms structured key data to packetlist\n * @returns {module:packet.List} The packets that form a key\n */\nKey.prototype.toPacketlist = function () {\n var packetlist = new _packet2.default.List();\n packetlist.push(this.primaryKey);\n packetlist.concat(this.revocationSignatures);\n packetlist.concat(this.directSignatures);\n this.users.map(function (user) {\n return packetlist.concat(user.toPacketlist());\n });\n this.subKeys.map(function (subKey) {\n return packetlist.concat(subKey.toPacketlist());\n });\n return packetlist;\n};\n\n/**\n * Returns packetlist containing all public or private subkey packets matching keyId;\n * If keyId is not present, returns all subkey packets.\n * @param {type/keyid} keyId\n * @returns {module:packet.List}\n */\nKey.prototype.getSubkeyPackets = function () {\n var keyId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n var packets = new _packet2.default.List();\n this.subKeys.forEach(function (subKey) {\n if (!keyId || subKey.subKey.getKeyId().equals(keyId, true)) {\n packets.push(subKey.subKey);\n }\n });\n return packets;\n};\n\n/**\n * Returns a packetlist containing all public or private key packets matching keyId.\n * If keyId is not present, returns all key packets starting with the primary key.\n * @param {type/keyid} keyId\n * @returns {module:packet.List}\n */\nKey.prototype.getKeyPackets = function () {\n var keyId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n var packets = new _packet2.default.List();\n if (!keyId || this.primaryKey.getKeyId().equals(keyId, true)) {\n packets.push(this.primaryKey);\n }\n packets.concat(this.getSubkeyPackets(keyId));\n return packets;\n};\n\n/**\n * Returns key IDs of all key packets\n * @returns {Array<module:type/keyid>}\n */\nKey.prototype.getKeyIds = function () {\n return this.getKeyPackets().map(function (keyPacket) {\n return keyPacket.getKeyId();\n });\n};\n\n/**\n * Returns userids\n * @returns {Array<string>} array of userids\n */\nKey.prototype.getUserIds = function () {\n return this.users.map(function (user) {\n return user.userId ? _util2.default.encode_utf8(user.userId.userid) : null;\n }).filter(function (userid) {\n return userid !== null;\n });\n};\n\n/**\n * Returns true if this is a public key\n * @returns {Boolean}\n */\nKey.prototype.isPublic = function () {\n return this.primaryKey.tag === _enums2.default.packet.publicKey;\n};\n\n/**\n * Returns true if this is a private key\n * @returns {Boolean}\n */\nKey.prototype.isPrivate = function () {\n return this.primaryKey.tag === _enums2.default.packet.secretKey;\n};\n\n/**\n * Returns key as public key (shallow copy)\n * @returns {module:key.Key} new public Key\n */\nKey.prototype.toPublic = function () {\n var packetlist = new _packet2.default.List();\n var keyPackets = this.toPacketlist();\n var bytes = void 0;\n var pubKeyPacket = void 0;\n var pubSubkeyPacket = void 0;\n for (var i = 0; i < keyPackets.length; i++) {\n switch (keyPackets[i].tag) {\n case _enums2.default.packet.secretKey:\n bytes = keyPackets[i].writePublicKey();\n pubKeyPacket = new _packet2.default.PublicKey();\n pubKeyPacket.read(bytes);\n packetlist.push(pubKeyPacket);\n break;\n case _enums2.default.packet.secretSubkey:\n bytes = keyPackets[i].writePublicKey();\n pubSubkeyPacket = new _packet2.default.PublicSubkey();\n pubSubkeyPacket.read(bytes);\n packetlist.push(pubSubkeyPacket);\n break;\n default:\n packetlist.push(keyPackets[i]);\n }\n }\n return new Key(packetlist);\n};\n\n/**\n * Returns ASCII armored text of key\n * @returns {String} ASCII armor\n */\nKey.prototype.armor = function () {\n var type = this.isPublic() ? _enums2.default.armor.public_key : _enums2.default.armor.private_key;\n return _armor2.default.encode(type, this.toPacketlist().write());\n};\n\n/**\n * Returns the signature that has the latest creation date, while ignoring signatures created in the future.\n * @param {Array<module:packet.Signature>} signatures List of signatures\n * @param {Date} date Use the given date instead of the current time\n * @returns {module:packet.Signature} The latest signature\n */\nfunction getLatestSignature(signatures) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n var signature = signatures[0];\n for (var i = 1; i < signatures.length; i++) {\n if (signatures[i].created >= signature.created && (signatures[i].created <= date || date === null)) {\n signature = signatures[i];\n }\n }\n return signature;\n}\n\nfunction isValidSigningKeyPacket(keyPacket, signature) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n return keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.rsa_encrypt) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.elgamal) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.ecdh) && (!signature.keyFlags || (signature.keyFlags[0] & _enums2.default.keyFlags.sign_data) !== 0) && signature.verified && !signature.revoked && !signature.isExpired(date) && !isDataExpired(keyPacket, signature, date);\n}\n\n/**\n * Returns first key packet or key packet by given keyId that is available for signing and verification\n * @param {module:type/keyid} keyId, optional\n * @param {Date} date use the given date for verification instead of the current time\n * @param {Object} userId, optional user ID\n * @returns {Promise<module:packet.SecretSubkey|\n * module:packet.SecretKey|null>} key packet or null if no signing key has been found\n * @async\n */\nKey.prototype.getSigningKeyPacket = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n var keyId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var primaryKey, i, bindingSignature, primaryUser;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n primaryKey = this.primaryKey;\n _context.next = 3;\n return this.verifyPrimaryKey(date, userId);\n\n case 3:\n _context.t0 = _context.sent;\n _context.t1 = _enums2.default.keyStatus.valid;\n\n if (!(_context.t0 === _context.t1)) {\n _context.next = 25;\n break;\n }\n\n i = 0;\n\n case 7:\n if (!(i < this.subKeys.length)) {\n _context.next = 20;\n break;\n }\n\n if (!(!keyId || this.subKeys[i].subKey.getKeyId().equals(keyId))) {\n _context.next = 17;\n break;\n }\n\n _context.next = 11;\n return this.subKeys[i].verify(primaryKey, date);\n\n case 11:\n _context.t2 = _context.sent;\n _context.t3 = _enums2.default.keyStatus.valid;\n\n if (!(_context.t2 === _context.t3)) {\n _context.next = 17;\n break;\n }\n\n bindingSignature = getLatestSignature(this.subKeys[i].bindingSignatures, date);\n\n if (!isValidSigningKeyPacket(this.subKeys[i].subKey, bindingSignature, date)) {\n _context.next = 17;\n break;\n }\n\n return _context.abrupt('return', this.subKeys[i].subKey);\n\n case 17:\n i++;\n _context.next = 7;\n break;\n\n case 20:\n _context.next = 22;\n return this.getPrimaryUser(date, userId);\n\n case 22:\n primaryUser = _context.sent;\n\n if (!(primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) && isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, date))) {\n _context.next = 25;\n break;\n }\n\n return _context.abrupt('return', primaryKey);\n\n case 25:\n return _context.abrupt('return', null);\n\n case 26:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function () {\n return _ref.apply(this, arguments);\n };\n}();\n\nfunction isValidEncryptionKeyPacket(keyPacket, signature) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n return keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.dsa) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.rsa_sign) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.ecdsa) && keyPacket.algorithm !== _enums2.default.read(_enums2.default.publicKey, _enums2.default.publicKey.eddsa) && (!signature.keyFlags || (signature.keyFlags[0] & _enums2.default.keyFlags.encrypt_communication) !== 0 || (signature.keyFlags[0] & _enums2.default.keyFlags.encrypt_storage) !== 0) && signature.verified && !signature.revoked && !signature.isExpired(date) && !isDataExpired(keyPacket, signature, date);\n}\n\n/**\n * Returns first key packet or key packet by given keyId that is available for encryption or decryption\n * @param {module:type/keyid} keyId, optional\n * @param {Date} date, optional\n * @param {String} userId, optional\n * @returns {Promise<module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.SecretKey|\n * module:packet.PublicKey|null>} key packet or null if no encryption key has been found\n * @async\n */\nKey.prototype.getEncryptionKeyPacket = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(keyId) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var primaryKey, i, bindingSignature, primaryUser;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n primaryKey = this.primaryKey;\n _context2.next = 3;\n return this.verifyPrimaryKey(date, userId);\n\n case 3:\n _context2.t0 = _context2.sent;\n _context2.t1 = _enums2.default.keyStatus.valid;\n\n if (!(_context2.t0 === _context2.t1)) {\n _context2.next = 25;\n break;\n }\n\n i = 0;\n\n case 7:\n if (!(i < this.subKeys.length)) {\n _context2.next = 20;\n break;\n }\n\n if (!(!keyId || this.subKeys[i].subKey.getKeyId().equals(keyId))) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 11;\n return this.subKeys[i].verify(primaryKey, date);\n\n case 11:\n _context2.t2 = _context2.sent;\n _context2.t3 = _enums2.default.keyStatus.valid;\n\n if (!(_context2.t2 === _context2.t3)) {\n _context2.next = 17;\n break;\n }\n\n bindingSignature = getLatestSignature(this.subKeys[i].bindingSignatures, date);\n\n if (!isValidEncryptionKeyPacket(this.subKeys[i].subKey, bindingSignature, date)) {\n _context2.next = 17;\n break;\n }\n\n return _context2.abrupt('return', this.subKeys[i].subKey);\n\n case 17:\n i++;\n _context2.next = 7;\n break;\n\n case 20:\n _context2.next = 22;\n return this.getPrimaryUser(date, userId);\n\n case 22:\n primaryUser = _context2.sent;\n\n if (!(primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) && isValidEncryptionKeyPacket(primaryKey, primaryUser.selfCertification, date))) {\n _context2.next = 25;\n break;\n }\n\n return _context2.abrupt('return', primaryKey);\n\n case 25:\n return _context2.abrupt('return', null);\n\n case 26:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x9) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypts all secret key and subkey packets matching keyId\n * @param {String|Array<String>} passphrases - if multiple passphrases, then should be in same order as packets each should encrypt\n * @param {module:type/keyid} keyId\n * @returns {Promise<Array<module:packet.SecretKey|module:packet.SecretSubkey>>}\n * @async\n */\nKey.prototype.encrypt = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(passphrases) {\n var keyId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var keyPackets;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (this.isPrivate()) {\n _context4.next = 2;\n break;\n }\n\n throw new Error(\"Nothing to encrypt in a public key\");\n\n case 2:\n keyPackets = this.getKeyPackets(keyId);\n\n passphrases = _util2.default.isArray(passphrases) ? passphrases : new Array(keyPackets.length).fill(passphrases);\n\n if (!(passphrases.length !== keyPackets.length)) {\n _context4.next = 6;\n break;\n }\n\n throw new Error(\"Invalid number of passphrases for key\");\n\n case 6:\n return _context4.abrupt('return', _promise2.default.all(keyPackets.map(function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(keyPacket, i) {\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return keyPacket.encrypt(passphrases[i]);\n\n case 2:\n _context3.next = 4;\n return keyPacket.clearPrivateParams();\n\n case 4:\n return _context3.abrupt('return', keyPacket);\n\n case 5:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x14, _x15) {\n return _ref4.apply(this, arguments);\n };\n }())));\n\n case 7:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x12) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypts all secret key and subkey packets matching keyId\n * @param {String|Array<String>} passphrases\n * @param {module:type/keyid} keyId\n * @returns {Promise<Boolean>} true if all matching key and subkey packets decrypted successfully\n * @async\n */\nKey.prototype.decrypt = function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(passphrases) {\n var keyId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var results;\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (this.isPrivate()) {\n _context7.next = 2;\n break;\n }\n\n throw new Error(\"Nothing to decrypt in a public key\");\n\n case 2:\n passphrases = _util2.default.isArray(passphrases) ? passphrases : [passphrases];\n\n _context7.next = 5;\n return _promise2.default.all(this.getKeyPackets(keyId).map(function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(keyPacket) {\n var decrypted, error;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n decrypted = false;\n error = null;\n _context6.next = 4;\n return _promise2.default.all(passphrases.map(function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(passphrase) {\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n _context5.prev = 0;\n _context5.next = 3;\n return keyPacket.decrypt(passphrase);\n\n case 3:\n decrypted = true;\n _context5.next = 9;\n break;\n\n case 6:\n _context5.prev = 6;\n _context5.t0 = _context5['catch'](0);\n\n error = _context5.t0;\n\n case 9:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this, [[0, 6]]);\n }));\n\n return function (_x19) {\n return _ref7.apply(this, arguments);\n };\n }()));\n\n case 4:\n if (decrypted) {\n _context6.next = 6;\n break;\n }\n\n throw error;\n\n case 6:\n return _context6.abrupt('return', decrypted);\n\n case 7:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function (_x18) {\n return _ref6.apply(this, arguments);\n };\n }()));\n\n case 5:\n results = _context7.sent;\n return _context7.abrupt('return', results.every(function (result) {\n return result === true;\n }));\n\n case 7:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x16) {\n return _ref5.apply(this, arguments);\n };\n}();\n\n/**\n * Checks if a signature on a key is revoked\n * @param {module:packet.SecretKey|\n * @param {module:packet.Signature} signature The signature to verify\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key to verify the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the certificate is revoked\n * @async\n */\nKey.prototype.isRevoked = function () {\n var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(signature, key) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n return _context8.abrupt('return', isDataRevoked(this.primaryKey, { key: this.primaryKey }, this.revocationSignatures, signature, key, date));\n\n case 1:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x20, _x21) {\n return _ref8.apply(this, arguments);\n };\n}();\n\n/**\n * Verify primary key. Checks for revocation signatures, expiration time\n * and valid self signature\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID\n * @returns {Promise<module:enums.keyStatus>} The status of the primary key\n * @async\n */\nKey.prototype.verifyPrimaryKey = function () {\n var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n var userId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var primaryKey, _ref10, user, selfCertification;\n\n return _regenerator2.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n primaryKey = this.primaryKey;\n // check for key revocation signatures\n\n _context9.next = 3;\n return this.isRevoked(null, null, date);\n\n case 3:\n if (!_context9.sent) {\n _context9.next = 5;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 5:\n if (this.users.some(function (user) {\n return user.userId && user.selfCertifications.length;\n })) {\n _context9.next = 7;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.no_self_cert);\n\n case 7:\n _context9.next = 9;\n return this.getPrimaryUser(date, userId);\n\n case 9:\n _context9.t0 = _context9.sent;\n\n if (_context9.t0) {\n _context9.next = 12;\n break;\n }\n\n _context9.t0 = {};\n\n case 12:\n _ref10 = _context9.t0;\n user = _ref10.user;\n selfCertification = _ref10.selfCertification;\n\n if (user) {\n _context9.next = 17;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 17:\n if (!isDataExpired(primaryKey, selfCertification, date)) {\n _context9.next = 19;\n break;\n }\n\n return _context9.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 19:\n return _context9.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 20:\n case 'end':\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function () {\n return _ref9.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the expiration time of the primary key or Infinity if key does not expire\n * @returns {Promise<Date>}\n * @async\n */\nKey.prototype.getExpirationTime = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10() {\n var primaryUser, selfCert, keyExpiry, sigExpiry;\n return _regenerator2.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (!(this.primaryKey.version === 3)) {\n _context10.next = 2;\n break;\n }\n\n return _context10.abrupt('return', getExpirationTime(this.primaryKey));\n\n case 2:\n if (!(this.primaryKey.version >= 4)) {\n _context10.next = 10;\n break;\n }\n\n _context10.next = 5;\n return this.getPrimaryUser(null);\n\n case 5:\n primaryUser = _context10.sent;\n selfCert = primaryUser.selfCertification;\n keyExpiry = getExpirationTime(this.primaryKey, selfCert);\n sigExpiry = selfCert.getExpirationTime();\n return _context10.abrupt('return', keyExpiry < sigExpiry ? keyExpiry : sigExpiry);\n\n case 10:\n case 'end':\n return _context10.stop();\n }\n }\n }, _callee10, this);\n}));\n\n/**\n * Returns primary user and most significant (latest valid) self signature\n * - if multiple primary users exist, returns the one with the latest self signature\n * - otherwise, returns the user with the latest self signature\n * @param {Date} date use the given date for verification instead of the current time\n * @param {Object} userId (optional) user ID to get instead of the primary user, if it exists\n * @returns {Promise<{user: module:key.User,\n * selfCertification: module:packet.Signature}>} The primary user and the self signature\n * @async\n */\nKey.prototype.getPrimaryUser = function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n var userId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var users, primaryUser, user, cert, primaryKey, dataToVerify;\n return _regenerator2.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n users = this.users.map(function (user, index) {\n var selfCertification = getLatestSignature(user.selfCertifications, date);\n return { index: index, user: user, selfCertification: selfCertification };\n }).filter(function (_ref13) {\n var user = _ref13.user;\n\n return user.userId && (userId.name === undefined || user.userId.name === userId.name) && (userId.email === undefined || user.userId.email === userId.email) && (userId.comment === undefined || user.userId.comment === userId.comment);\n });\n\n if (users.length) {\n _context11.next = 5;\n break;\n }\n\n if (!userId) {\n _context11.next = 4;\n break;\n }\n\n throw new Error('Could not find user that matches that user ID');\n\n case 4:\n return _context11.abrupt('return', null);\n\n case 5:\n // sort by primary user flag and signature creation time\n primaryUser = users.sort(function (a, b) {\n var A = a.selfCertification;\n var B = b.selfCertification;\n return A.isPrimaryUserID - B.isPrimaryUserID || A.created - B.created;\n }).pop();\n user = primaryUser.user, cert = primaryUser.selfCertification;\n primaryKey = this.primaryKey;\n dataToVerify = { userid: user.userId, key: primaryKey };\n // skip if certificates is invalid, revoked, or expired\n // eslint-disable-next-line no-await-in-loop\n\n _context11.t0 = cert.verified;\n\n if (_context11.t0) {\n _context11.next = 14;\n break;\n }\n\n _context11.next = 13;\n return cert.verify(primaryKey, dataToVerify);\n\n case 13:\n _context11.t0 = _context11.sent;\n\n case 14:\n if (_context11.t0) {\n _context11.next = 16;\n break;\n }\n\n return _context11.abrupt('return', null);\n\n case 16:\n _context11.t1 = cert.revoked;\n\n if (_context11.t1) {\n _context11.next = 21;\n break;\n }\n\n _context11.next = 20;\n return user.isRevoked(primaryKey, cert, null, date);\n\n case 20:\n _context11.t1 = _context11.sent;\n\n case 21:\n if (!_context11.t1) {\n _context11.next = 23;\n break;\n }\n\n return _context11.abrupt('return', null);\n\n case 23:\n if (!cert.isExpired(date)) {\n _context11.next = 25;\n break;\n }\n\n return _context11.abrupt('return', null);\n\n case 25:\n return _context11.abrupt('return', primaryUser);\n\n case 26:\n case 'end':\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function () {\n return _ref12.apply(this, arguments);\n };\n}();\n\n/**\n * Update key with new components from specified key with same key ID:\n * users, subkeys, certificates are merged into the destination key,\n * duplicates and expired signatures are ignored.\n *\n * If the specified key is a private key and the destination key is public,\n * the destination key is transformed to a private key.\n * @param {module:key.Key} key Source key to merge\n */\nKey.prototype.update = function () {\n var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(key) {\n var _this = this;\n\n var equal;\n return _regenerator2.default.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n _context16.next = 2;\n return key.verifyPrimaryKey();\n\n case 2:\n _context16.t0 = _context16.sent;\n _context16.t1 = _enums2.default.keyStatus.invalid;\n\n if (!(_context16.t0 === _context16.t1)) {\n _context16.next = 6;\n break;\n }\n\n return _context16.abrupt('return');\n\n case 6:\n if (!(this.primaryKey.getFingerprint() !== key.primaryKey.getFingerprint())) {\n _context16.next = 8;\n break;\n }\n\n throw new Error('Key update method: fingerprints of keys not equal');\n\n case 8:\n if (!(this.isPublic() && key.isPrivate())) {\n _context16.next = 13;\n break;\n }\n\n // check for equal subkey packets\n equal = this.subKeys.length === key.subKeys.length && this.subKeys.every(function (destSubKey) {\n return key.subKeys.some(function (srcSubKey) {\n return destSubKey.subKey.getFingerprint() === srcSubKey.subKey.getFingerprint();\n });\n });\n\n if (equal) {\n _context16.next = 12;\n break;\n }\n\n throw new Error('Cannot update public key with private key if subkey mismatch');\n\n case 12:\n this.primaryKey = key.primaryKey;\n\n case 13:\n _context16.next = 15;\n return mergeSignatures(key, this, 'revocationSignatures', function (srcRevSig) {\n return isDataRevoked(_this.primaryKey, _this, [srcRevSig], null, key.primaryKey);\n });\n\n case 15:\n _context16.next = 17;\n return mergeSignatures(key, this, 'directSignatures');\n\n case 17:\n _context16.next = 19;\n return _promise2.default.all(key.users.map(function () {\n var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(srcUser) {\n var found;\n return _regenerator2.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n found = false;\n _context13.next = 3;\n return _promise2.default.all(_this.users.map(function () {\n var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(dstUser) {\n return _regenerator2.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (!(srcUser.userId && srcUser.userId.userid === dstUser.userId.userid || srcUser.userAttribute && srcUser.userAttribute.equals(dstUser.userAttribute))) {\n _context12.next = 4;\n break;\n }\n\n _context12.next = 3;\n return dstUser.update(srcUser, _this.primaryKey);\n\n case 3:\n found = true;\n\n case 4:\n case 'end':\n return _context12.stop();\n }\n }\n }, _callee12, _this);\n }));\n\n return function (_x29) {\n return _ref16.apply(this, arguments);\n };\n }()));\n\n case 3:\n if (!found) {\n _this.users.push(srcUser);\n }\n\n case 4:\n case 'end':\n return _context13.stop();\n }\n }\n }, _callee13, _this);\n }));\n\n return function (_x28) {\n return _ref15.apply(this, arguments);\n };\n }()));\n\n case 19:\n _context16.next = 21;\n return _promise2.default.all(key.subKeys.map(function () {\n var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(srcSubKey) {\n var found;\n return _regenerator2.default.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n found = false;\n _context15.next = 3;\n return _promise2.default.all(_this.subKeys.map(function () {\n var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(dstSubKey) {\n return _regenerator2.default.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n if (!(srcSubKey.subKey.getFingerprint() === dstSubKey.subKey.getFingerprint())) {\n _context14.next = 4;\n break;\n }\n\n _context14.next = 3;\n return dstSubKey.update(srcSubKey, _this.primaryKey);\n\n case 3:\n found = true;\n\n case 4:\n case 'end':\n return _context14.stop();\n }\n }\n }, _callee14, _this);\n }));\n\n return function (_x31) {\n return _ref18.apply(this, arguments);\n };\n }()));\n\n case 3:\n if (!found) {\n _this.subKeys.push(srcSubKey);\n }\n\n case 4:\n case 'end':\n return _context15.stop();\n }\n }\n }, _callee15, _this);\n }));\n\n return function (_x30) {\n return _ref17.apply(this, arguments);\n };\n }()));\n\n case 21:\n case 'end':\n return _context16.stop();\n }\n }\n }, _callee16, this);\n }));\n\n return function (_x27) {\n return _ref14.apply(this, arguments);\n };\n}();Key.prototype.revoke = function () {};\n\n/**\n * Signs primary user of key\n * @param {Array<module:key.Key>} privateKey decrypted private keys for signing\n * @returns {Promise<module:key.Key>} new public key with new certificate signature\n * @async\n */\nKey.prototype.signPrimaryUser = function () {\n var _ref21 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19(privateKeys) {\n var _ref22, index, user, userSign, key;\n\n return _regenerator2.default.wrap(function _callee19$(_context19) {\n while (1) {\n switch (_context19.prev = _context19.next) {\n case 0:\n _context19.next = 2;\n return this.getPrimaryUser();\n\n case 2:\n _context19.t0 = _context19.sent;\n\n if (_context19.t0) {\n _context19.next = 5;\n break;\n }\n\n _context19.t0 = {};\n\n case 5:\n _ref22 = _context19.t0;\n index = _ref22.index;\n user = _ref22.user;\n\n if (user) {\n _context19.next = 10;\n break;\n }\n\n throw new Error('Could not find primary user');\n\n case 10:\n _context19.next = 12;\n return user.sign(this.primaryKey, privateKeys);\n\n case 12:\n userSign = _context19.sent;\n key = new Key(this.toPacketlist());\n\n key.users[index] = userSign;\n return _context19.abrupt('return', key);\n\n case 16:\n case 'end':\n return _context19.stop();\n }\n }\n }, _callee19, this);\n }));\n\n return function (_x37) {\n return _ref21.apply(this, arguments);\n };\n}();\n\n/**\n * Signs all users of key\n * @param {Array<module:key.Key>} privateKeys decrypted private keys for signing\n * @returns {Promise<module:key.Key>} new public key with new certificate signature\n * @async\n */\nKey.prototype.signAllUsers = function () {\n var _ref23 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee20(privateKeys) {\n var that, key;\n return _regenerator2.default.wrap(function _callee20$(_context20) {\n while (1) {\n switch (_context20.prev = _context20.next) {\n case 0:\n that = this;\n key = new Key(this.toPacketlist());\n _context20.next = 4;\n return _promise2.default.all(this.users.map(function (user) {\n return user.sign(that.primaryKey, privateKeys);\n }));\n\n case 4:\n key.users = _context20.sent;\n return _context20.abrupt('return', key);\n\n case 6:\n case 'end':\n return _context20.stop();\n }\n }\n }, _callee20, this);\n }));\n\n return function (_x38) {\n return _ref23.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies primary user of key\n * - if no arguments are given, verifies the self certificates;\n * - otherwise, verifies all certificates signed with given keys.\n * @param {Array<module:key.Key>} keys array of keys to verify certificate signatures\n * @returns {Promise<Array<{keyid: module:type/keyid,\n * valid: Boolean}>>} List of signer's keyid and validity of signature\n * @async\n */\nKey.prototype.verifyPrimaryUser = function () {\n var _ref24 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee21(keys) {\n var primaryKey, _ref25, user, results;\n\n return _regenerator2.default.wrap(function _callee21$(_context21) {\n while (1) {\n switch (_context21.prev = _context21.next) {\n case 0:\n primaryKey = this.primaryKey;\n _context21.next = 3;\n return this.getPrimaryUser();\n\n case 3:\n _context21.t0 = _context21.sent;\n\n if (_context21.t0) {\n _context21.next = 6;\n break;\n }\n\n _context21.t0 = {};\n\n case 6:\n _ref25 = _context21.t0;\n user = _ref25.user;\n\n if (user) {\n _context21.next = 10;\n break;\n }\n\n throw new Error('Could not find primary user');\n\n case 10:\n if (!keys) {\n _context21.next = 16;\n break;\n }\n\n _context21.next = 13;\n return user.verifyAllCertifications(primaryKey, keys);\n\n case 13:\n _context21.t1 = _context21.sent;\n _context21.next = 24;\n break;\n\n case 16:\n _context21.t2 = primaryKey.keyid;\n _context21.next = 19;\n return user.verify(primaryKey);\n\n case 19:\n _context21.t3 = _context21.sent;\n _context21.t4 = _enums2.default.keyStatus.valid;\n _context21.t5 = _context21.t3 === _context21.t4;\n _context21.t6 = {\n keyid: _context21.t2,\n valid: _context21.t5\n };\n _context21.t1 = [_context21.t6];\n\n case 24:\n results = _context21.t1;\n return _context21.abrupt('return', results);\n\n case 26:\n case 'end':\n return _context21.stop();\n }\n }\n }, _callee21, this);\n }));\n\n return function (_x39) {\n return _ref24.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies all users of key\n * - if no arguments are given, verifies the self certificates;\n * - otherwise, verifies all certificates signed with given keys.\n * @param {Array<module:key.Key>} keys array of keys to verify certificate signatures\n * @returns {Promise<Array<{userid: String,\n * keyid: module:type/keyid,\n * valid: Boolean}>>} list of userid, signer's keyid and validity of signature\n * @async\n */\nKey.prototype.verifyAllUsers = function () {\n var _ref26 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee23(keys) {\n var results, primaryKey;\n return _regenerator2.default.wrap(function _callee23$(_context23) {\n while (1) {\n switch (_context23.prev = _context23.next) {\n case 0:\n results = [];\n primaryKey = this.primaryKey;\n _context23.next = 4;\n return _promise2.default.all(this.users.map(function () {\n var _ref27 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee22(user) {\n var signatures;\n return _regenerator2.default.wrap(function _callee22$(_context22) {\n while (1) {\n switch (_context22.prev = _context22.next) {\n case 0:\n if (!keys) {\n _context22.next = 6;\n break;\n }\n\n _context22.next = 3;\n return user.verifyAllCertifications(primaryKey, keys);\n\n case 3:\n _context22.t0 = _context22.sent;\n _context22.next = 14;\n break;\n\n case 6:\n _context22.t1 = primaryKey.keyid;\n _context22.next = 9;\n return user.verify(primaryKey);\n\n case 9:\n _context22.t2 = _context22.sent;\n _context22.t3 = _enums2.default.keyStatus.valid;\n _context22.t4 = _context22.t2 === _context22.t3;\n _context22.t5 = {\n keyid: _context22.t1,\n valid: _context22.t4\n };\n _context22.t0 = [_context22.t5];\n\n case 14:\n signatures = _context22.t0;\n\n signatures.forEach(function (signature) {\n results.push({\n userid: user.userId.userid,\n keyid: signature.keyid,\n valid: signature.valid\n });\n });\n\n case 16:\n case 'end':\n return _context22.stop();\n }\n }\n }, _callee22, this);\n }));\n\n return function (_x41) {\n return _ref27.apply(this, arguments);\n };\n }()));\n\n case 4:\n return _context23.abrupt('return', results);\n\n case 5:\n case 'end':\n return _context23.stop();\n }\n }\n }, _callee23, this);\n }));\n\n return function (_x40) {\n return _ref26.apply(this, arguments);\n };\n}();\n\n/**\n * @class\n * @classdesc Class that represents an user ID or attribute packet and the relevant signatures.\n */\nfunction User(userPacket) {\n if (!(this instanceof User)) {\n return new User(userPacket);\n }\n this.userId = userPacket.tag === _enums2.default.packet.userid ? userPacket : null;\n this.userAttribute = userPacket.tag === _enums2.default.packet.userAttribute ? userPacket : null;\n this.selfCertifications = [];\n this.otherCertifications = [];\n this.revocationSignatures = [];\n}\n\n/**\n * Transforms structured user data to packetlist\n * @returns {module:packet.List}\n */\nUser.prototype.toPacketlist = function () {\n var packetlist = new _packet2.default.List();\n packetlist.push(this.userId || this.userAttribute);\n packetlist.concat(this.revocationSignatures);\n packetlist.concat(this.selfCertifications);\n packetlist.concat(this.otherCertifications);\n return packetlist;\n};\n\n/**\n * Signs user\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Array<module:key.Key>} privateKeys Decrypted private keys for signing\n * @returns {Promise<module:key.Key>} New user with new certificate signatures\n * @async\n */\nUser.prototype.sign = function () {\n var _ref28 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee25(primaryKey, privateKeys) {\n var dataToSign, user;\n return _regenerator2.default.wrap(function _callee25$(_context25) {\n while (1) {\n switch (_context25.prev = _context25.next) {\n case 0:\n dataToSign = { userid: this.userId || this.userAttribute, key: primaryKey };\n user = new User(dataToSign.userid);\n _context25.next = 4;\n return _promise2.default.all(privateKeys.map(function () {\n var _ref29 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee24(privateKey) {\n var signingKeyPacket, signaturePacket;\n return _regenerator2.default.wrap(function _callee24$(_context24) {\n while (1) {\n switch (_context24.prev = _context24.next) {\n case 0:\n if (!privateKey.isPublic()) {\n _context24.next = 2;\n break;\n }\n\n throw new Error('Need private key for signing');\n\n case 2:\n if (!(privateKey.primaryKey.getFingerprint() === primaryKey.getFingerprint())) {\n _context24.next = 4;\n break;\n }\n\n throw new Error('Not implemented for self signing');\n\n case 4:\n _context24.next = 6;\n return privateKey.getSigningKeyPacket();\n\n case 6:\n signingKeyPacket = _context24.sent;\n\n if (signingKeyPacket) {\n _context24.next = 9;\n break;\n }\n\n throw new Error('Could not find valid signing key packet in key ' + privateKey.primaryKey.getKeyId().toHex());\n\n case 9:\n if (signingKeyPacket.isDecrypted) {\n _context24.next = 11;\n break;\n }\n\n throw new Error('Private key is not decrypted.');\n\n case 11:\n signaturePacket = new _packet2.default.Signature();\n // Most OpenPGP implementations use generic certification (0x10)\n\n signaturePacket.signatureType = _enums2.default.write(_enums2.default.signature, _enums2.default.signature.cert_generic);\n signaturePacket.keyFlags = [_enums2.default.keyFlags.certify_keys | _enums2.default.keyFlags.sign_data];\n signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;\n _context24.next = 17;\n return getPreferredHashAlgo(privateKey);\n\n case 17:\n signaturePacket.hashAlgorithm = _context24.sent;\n\n signaturePacket.signingKeyId = signingKeyPacket.getKeyId();\n signaturePacket.sign(signingKeyPacket, dataToSign);\n return _context24.abrupt('return', signaturePacket);\n\n case 21:\n case 'end':\n return _context24.stop();\n }\n }\n }, _callee24, this);\n }));\n\n return function (_x44) {\n return _ref29.apply(this, arguments);\n };\n }()));\n\n case 4:\n user.otherCertifications = _context25.sent;\n _context25.next = 7;\n return user.update(this, primaryKey);\n\n case 7:\n return _context25.abrupt('return', user);\n\n case 8:\n case 'end':\n return _context25.stop();\n }\n }\n }, _callee25, this);\n }));\n\n return function (_x42, _x43) {\n return _ref28.apply(this, arguments);\n };\n}();\n\n/**\n * Checks if a given certificate of the user is revoked\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {module:packet.Signature} certificate The certificate to verify\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key to verify the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the certificate is revoked\n * @async\n */\nUser.prototype.isRevoked = function () {\n var _ref30 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee26(primaryKey, certificate, key) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n return _regenerator2.default.wrap(function _callee26$(_context26) {\n while (1) {\n switch (_context26.prev = _context26.next) {\n case 0:\n return _context26.abrupt('return', isDataRevoked(primaryKey, {\n key: primaryKey,\n userid: this.userId || this.userAttribute\n }, this.revocationSignatures, certificate, key, date));\n\n case 1:\n case 'end':\n return _context26.stop();\n }\n }\n }, _callee26, this);\n }));\n\n return function (_x45, _x46, _x47) {\n return _ref30.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies the user certificate\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {module:packet.Signature} certificate A certificate of this user\n * @param {Array<module:key.Key>} keys Array of keys to verify certificate signatures\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<module:enums.keyStatus>} status of the certificate\n * @async\n */\nUser.prototype.verifyCertificate = function () {\n var _ref31 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee28(primaryKey, certificate, keys) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n var that, keyid, dataToVerify, results;\n return _regenerator2.default.wrap(function _callee28$(_context28) {\n while (1) {\n switch (_context28.prev = _context28.next) {\n case 0:\n that = this;\n keyid = certificate.issuerKeyId;\n dataToVerify = { userid: this.userId || this.userAttribute, key: primaryKey };\n _context28.next = 5;\n return _promise2.default.all(keys.map(function () {\n var _ref32 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee27(key) {\n var keyPacket;\n return _regenerator2.default.wrap(function _callee27$(_context27) {\n while (1) {\n switch (_context27.prev = _context27.next) {\n case 0:\n if (key.getKeyIds().some(function (id) {\n return id.equals(keyid);\n })) {\n _context27.next = 2;\n break;\n }\n\n return _context27.abrupt('return');\n\n case 2:\n _context27.next = 4;\n return key.getSigningKeyPacket(keyid, date);\n\n case 4:\n keyPacket = _context27.sent;\n _context27.t0 = certificate.revoked;\n\n if (_context27.t0) {\n _context27.next = 10;\n break;\n }\n\n _context27.next = 9;\n return that.isRevoked(primaryKey, certificate, keyPacket);\n\n case 9:\n _context27.t0 = _context27.sent;\n\n case 10:\n if (!_context27.t0) {\n _context27.next = 12;\n break;\n }\n\n return _context27.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 12:\n _context27.t1 = certificate.verified;\n\n if (_context27.t1) {\n _context27.next = 17;\n break;\n }\n\n _context27.next = 16;\n return certificate.verify(keyPacket, dataToVerify);\n\n case 16:\n _context27.t1 = _context27.sent;\n\n case 17:\n if (_context27.t1) {\n _context27.next = 19;\n break;\n }\n\n return _context27.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 19:\n if (!certificate.isExpired()) {\n _context27.next = 21;\n break;\n }\n\n return _context27.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 21:\n return _context27.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 22:\n case 'end':\n return _context27.stop();\n }\n }\n }, _callee27, this);\n }));\n\n return function (_x53) {\n return _ref32.apply(this, arguments);\n };\n }()));\n\n case 5:\n results = _context28.sent;\n return _context28.abrupt('return', results.find(function (result) {\n return result !== undefined;\n }));\n\n case 7:\n case 'end':\n return _context28.stop();\n }\n }\n }, _callee28, this);\n }));\n\n return function (_x49, _x50, _x51) {\n return _ref31.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies all user certificates\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Array<module:key.Key>} keys Array of keys to verify certificate signatures\n * @returns {Promise<Array<{keyid: module:type/keyid,\n * valid: Boolean}>>} List of signer's keyid and validity of signature\n * @async\n */\nUser.prototype.verifyAllCertifications = function () {\n var _ref33 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee30(primaryKey, keys) {\n var that, certifications;\n return _regenerator2.default.wrap(function _callee30$(_context30) {\n while (1) {\n switch (_context30.prev = _context30.next) {\n case 0:\n that = this;\n certifications = this.selfCertifications.concat(this.otherCertifications);\n return _context30.abrupt('return', _promise2.default.all(certifications.map(function () {\n var _ref34 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee29(certification) {\n var status;\n return _regenerator2.default.wrap(function _callee29$(_context29) {\n while (1) {\n switch (_context29.prev = _context29.next) {\n case 0:\n _context29.next = 2;\n return that.verifyCertificate(primaryKey, certification, keys);\n\n case 2:\n status = _context29.sent;\n return _context29.abrupt('return', {\n keyid: certification.issuerKeyId,\n valid: status === undefined ? null : status === _enums2.default.keyStatus.valid\n });\n\n case 4:\n case 'end':\n return _context29.stop();\n }\n }\n }, _callee29, this);\n }));\n\n return function (_x56) {\n return _ref34.apply(this, arguments);\n };\n }())));\n\n case 3:\n case 'end':\n return _context30.stop();\n }\n }\n }, _callee30, this);\n }));\n\n return function (_x54, _x55) {\n return _ref33.apply(this, arguments);\n };\n}();\n\n/**\n * Verify User. Checks for existence of self signatures, revocation signatures\n * and validity of self signature\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @returns {Promise<module:enums.keyStatus>} Status of user\n * @async\n */\nUser.prototype.verify = function () {\n var _ref35 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee32(primaryKey) {\n var that, dataToVerify, results;\n return _regenerator2.default.wrap(function _callee32$(_context32) {\n while (1) {\n switch (_context32.prev = _context32.next) {\n case 0:\n if (this.selfCertifications.length) {\n _context32.next = 2;\n break;\n }\n\n return _context32.abrupt('return', _enums2.default.keyStatus.no_self_cert);\n\n case 2:\n that = this;\n dataToVerify = { userid: this.userId || this.userAttribute, key: primaryKey };\n // TODO replace when Promise.some or Promise.any are implemented\n\n _context32.t0 = [_enums2.default.keyStatus.invalid];\n _context32.next = 7;\n return _promise2.default.all(this.selfCertifications.map(function () {\n var _ref36 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee31(selfCertification) {\n return _regenerator2.default.wrap(function _callee31$(_context31) {\n while (1) {\n switch (_context31.prev = _context31.next) {\n case 0:\n _context31.t0 = selfCertification.revoked;\n\n if (_context31.t0) {\n _context31.next = 5;\n break;\n }\n\n _context31.next = 4;\n return that.isRevoked(primaryKey, selfCertification);\n\n case 4:\n _context31.t0 = _context31.sent;\n\n case 5:\n if (!_context31.t0) {\n _context31.next = 7;\n break;\n }\n\n return _context31.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 7:\n _context31.t1 = selfCertification.verified;\n\n if (_context31.t1) {\n _context31.next = 12;\n break;\n }\n\n _context31.next = 11;\n return selfCertification.verify(primaryKey, dataToVerify);\n\n case 11:\n _context31.t1 = _context31.sent;\n\n case 12:\n if (_context31.t1) {\n _context31.next = 14;\n break;\n }\n\n return _context31.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 14:\n if (!selfCertification.isExpired()) {\n _context31.next = 16;\n break;\n }\n\n return _context31.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 16:\n return _context31.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 17:\n case 'end':\n return _context31.stop();\n }\n }\n }, _callee31, this);\n }));\n\n return function (_x58) {\n return _ref36.apply(this, arguments);\n };\n }()));\n\n case 7:\n _context32.t1 = _context32.sent;\n results = _context32.t0.concat.call(_context32.t0, _context32.t1);\n return _context32.abrupt('return', results.some(function (status) {\n return status === _enums2.default.keyStatus.valid;\n }) ? _enums2.default.keyStatus.valid : results.pop());\n\n case 10:\n case 'end':\n return _context32.stop();\n }\n }\n }, _callee32, this);\n }));\n\n return function (_x57) {\n return _ref35.apply(this, arguments);\n };\n}();\n\n/**\n * Update user with new components from specified user\n * @param {module:key.User} user Source user to merge\n * @param {module:packet.SecretKey|\n * module:packet.SecretSubkey} primaryKey primary key used for validation\n */\nUser.prototype.update = function () {\n var _ref37 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee34(user, primaryKey) {\n var dataToVerify;\n return _regenerator2.default.wrap(function _callee34$(_context34) {\n while (1) {\n switch (_context34.prev = _context34.next) {\n case 0:\n dataToVerify = { userid: this.userId || this.userAttribute, key: primaryKey };\n // self signatures\n\n _context34.next = 3;\n return mergeSignatures(user, this, 'selfCertifications', function () {\n var _ref38 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee33(srcSelfSig) {\n return _regenerator2.default.wrap(function _callee33$(_context33) {\n while (1) {\n switch (_context33.prev = _context33.next) {\n case 0:\n return _context33.abrupt('return', srcSelfSig.verified || srcSelfSig.verify(primaryKey, dataToVerify));\n\n case 1:\n case 'end':\n return _context33.stop();\n }\n }\n }, _callee33, this);\n }));\n\n return function (_x61) {\n return _ref38.apply(this, arguments);\n };\n }());\n\n case 3:\n _context34.next = 5;\n return mergeSignatures(user, this, 'otherCertifications');\n\n case 5:\n _context34.next = 7;\n return mergeSignatures(user, this, 'revocationSignatures', function (srcRevSig) {\n return isDataRevoked(primaryKey, dataToVerify, [srcRevSig]);\n });\n\n case 7:\n case 'end':\n return _context34.stop();\n }\n }\n }, _callee34, this);\n }));\n\n return function (_x59, _x60) {\n return _ref37.apply(this, arguments);\n };\n}();\n\n/**\n * @class\n * @classdesc Class that represents a subkey packet and the relevant signatures.\n */\nfunction SubKey(subKeyPacket) {\n if (!(this instanceof SubKey)) {\n return new SubKey(subKeyPacket);\n }\n this.subKey = subKeyPacket;\n this.bindingSignatures = [];\n this.revocationSignatures = [];\n}\n\n/**\n * Transforms structured subkey data to packetlist\n * @returns {module:packet.List}\n */\nSubKey.prototype.toPacketlist = function () {\n var packetlist = new _packet2.default.List();\n packetlist.push(this.subKey);\n packetlist.concat(this.revocationSignatures);\n packetlist.concat(this.bindingSignatures);\n return packetlist;\n};\n\n/**\n * Checks if a binding signature of a subkey is revoked\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {module:packet.Signature} signature The binding signature to verify\n * @param {module:packet.PublicSubkey|\n * module:packet.SecretSubkey|\n * module:packet.PublicKey|\n * module:packet.SecretKey} key, optional The key to verify the signature\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<Boolean>} True if the binding signature is revoked\n * @async\n */\nSubKey.prototype.isRevoked = function () {\n var _ref39 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee35(primaryKey, signature, key) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n return _regenerator2.default.wrap(function _callee35$(_context35) {\n while (1) {\n switch (_context35.prev = _context35.next) {\n case 0:\n return _context35.abrupt('return', isDataRevoked(primaryKey, {\n key: primaryKey,\n bind: this.subKey\n }, this.revocationSignatures, signature, key, date));\n\n case 1:\n case 'end':\n return _context35.stop();\n }\n }\n }, _callee35, this);\n }));\n\n return function (_x62, _x63, _x64) {\n return _ref39.apply(this, arguments);\n };\n}();\n\n/**\n * Verify subkey. Checks for revocation signatures, expiration time\n * and valid binding signature\n * @param {module:packet.SecretKey|\n * module:packet.PublicKey} primaryKey The primary key packet\n * @param {Date} date Use the given date instead of the current time\n * @returns {Promise<module:enums.keyStatus>} The status of the subkey\n * @async\n */\nSubKey.prototype.verify = function () {\n var _ref40 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee36(primaryKey) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var that, dataToVerify, bindingSignature;\n return _regenerator2.default.wrap(function _callee36$(_context36) {\n while (1) {\n switch (_context36.prev = _context36.next) {\n case 0:\n that = this;\n dataToVerify = { key: primaryKey, bind: this.subKey };\n // check for V3 expiration time\n\n if (!(this.subKey.version === 3 && isDataExpired(this.subKey, null, date))) {\n _context36.next = 4;\n break;\n }\n\n return _context36.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 4:\n // check subkey binding signatures\n bindingSignature = getLatestSignature(this.bindingSignatures, date);\n // check binding signature is verified\n\n _context36.t0 = bindingSignature.verified;\n\n if (_context36.t0) {\n _context36.next = 10;\n break;\n }\n\n _context36.next = 9;\n return bindingSignature.verify(primaryKey, dataToVerify);\n\n case 9:\n _context36.t0 = _context36.sent;\n\n case 10:\n if (_context36.t0) {\n _context36.next = 12;\n break;\n }\n\n return _context36.abrupt('return', _enums2.default.keyStatus.invalid);\n\n case 12:\n _context36.t1 = bindingSignature.revoked;\n\n if (_context36.t1) {\n _context36.next = 17;\n break;\n }\n\n _context36.next = 16;\n return that.isRevoked(primaryKey, bindingSignature, null, date);\n\n case 16:\n _context36.t1 = _context36.sent;\n\n case 17:\n if (!_context36.t1) {\n _context36.next = 19;\n break;\n }\n\n return _context36.abrupt('return', _enums2.default.keyStatus.revoked);\n\n case 19:\n if (!bindingSignature.isExpired(date)) {\n _context36.next = 21;\n break;\n }\n\n return _context36.abrupt('return', _enums2.default.keyStatus.expired);\n\n case 21:\n return _context36.abrupt('return', _enums2.default.keyStatus.valid);\n\n case 22:\n case 'end':\n return _context36.stop();\n }\n }\n }, _callee36, this);\n }));\n\n return function (_x66) {\n return _ref40.apply(this, arguments);\n };\n}();\n\n/**\n * Returns the expiration time of the subkey or Infinity if key does not expire\n * @param {Date} date Use the given date instead of the current time\n * @returns {Date}\n */\nSubKey.prototype.getExpirationTime = function () {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n var bindingSignature = getLatestSignature(this.bindingSignatures, date);\n var keyExpiry = getExpirationTime(this.subKey, bindingSignature);\n var sigExpiry = bindingSignature.getExpirationTime();\n return keyExpiry < sigExpiry ? keyExpiry : sigExpiry;\n};\n\n/**\n * Update subkey with new components from specified subkey\n * @param {module:key.SubKey} subKey Source subkey to merge\n * @param {module:packet.SecretKey|\n module:packet.SecretSubkey} primaryKey primary key used for validation\n */\nSubKey.prototype.update = function () {\n var _ref41 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee38(subKey, primaryKey) {\n var that, dataToVerify;\n return _regenerator2.default.wrap(function _callee38$(_context38) {\n while (1) {\n switch (_context38.prev = _context38.next) {\n case 0:\n _context38.next = 2;\n return subKey.verify(primaryKey);\n\n case 2:\n _context38.t0 = _context38.sent;\n _context38.t1 = _enums2.default.keyStatus.invalid;\n\n if (!(_context38.t0 === _context38.t1)) {\n _context38.next = 6;\n break;\n }\n\n return _context38.abrupt('return');\n\n case 6:\n if (!(this.subKey.getFingerprint() !== subKey.subKey.getFingerprint())) {\n _context38.next = 8;\n break;\n }\n\n throw new Error('SubKey update method: fingerprints of subkeys not equal');\n\n case 8:\n // key packet\n if (this.subKey.tag === _enums2.default.packet.publicSubkey && subKey.subKey.tag === _enums2.default.packet.secretSubkey) {\n this.subKey = subKey.subKey;\n }\n // update missing binding signatures\n that = this;\n dataToVerify = { key: primaryKey, bind: that.subKey };\n _context38.next = 13;\n return mergeSignatures(subKey, this, 'bindingSignatures', function () {\n var _ref42 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee37(srcBindSig) {\n var i;\n return _regenerator2.default.wrap(function _callee37$(_context37) {\n while (1) {\n switch (_context37.prev = _context37.next) {\n case 0:\n _context37.t0 = srcBindSig.verified;\n\n if (_context37.t0) {\n _context37.next = 5;\n break;\n }\n\n _context37.next = 4;\n return srcBindSig.verify(primaryKey, dataToVerify);\n\n case 4:\n _context37.t0 = _context37.sent;\n\n case 5:\n if (_context37.t0) {\n _context37.next = 7;\n break;\n }\n\n return _context37.abrupt('return', false);\n\n case 7:\n i = 0;\n\n case 8:\n if (!(i < that.bindingSignatures.length)) {\n _context37.next = 16;\n break;\n }\n\n if (!that.bindingSignatures[i].issuerKeyId.equals(srcBindSig.issuerKeyId)) {\n _context37.next = 13;\n break;\n }\n\n if (!(srcBindSig.created < that.bindingSignatures[i].created)) {\n _context37.next = 13;\n break;\n }\n\n that.bindingSignatures[i] = srcBindSig;\n return _context37.abrupt('return', false);\n\n case 13:\n i++;\n _context37.next = 8;\n break;\n\n case 16:\n return _context37.abrupt('return', true);\n\n case 17:\n case 'end':\n return _context37.stop();\n }\n }\n }, _callee37, this);\n }));\n\n return function (_x71) {\n return _ref42.apply(this, arguments);\n };\n }());\n\n case 13:\n _context38.next = 15;\n return mergeSignatures(subKey, this, 'revocationSignatures', function (srcRevSig) {\n return isDataRevoked(primaryKey, dataToVerify, [srcRevSig]);\n });\n\n case 15:\n case 'end':\n return _context38.stop();\n }\n }\n }, _callee38, this);\n }));\n\n return function (_x69, _x70) {\n return _ref41.apply(this, arguments);\n };\n}();\n\n/**\n * Reads an unarmored OpenPGP key list and returns one or multiple key objects\n * @param {Uint8Array} data to be parsed\n * @returns {{keys: Array<module:key.Key>,\n * err: (Array<Error>|null)}} result object with key and error arrays\n * @static\n */\nfunction read(data) {\n var result = {};\n result.keys = [];\n try {\n var packetlist = new _packet2.default.List();\n packetlist.read(data);\n var keyIndex = packetlist.indexOfTag(_enums2.default.packet.publicKey, _enums2.default.packet.secretKey);\n if (keyIndex.length === 0) {\n throw new Error('No key packet found');\n }\n for (var i = 0; i < keyIndex.length; i++) {\n var oneKeyList = packetlist.slice(keyIndex[i], keyIndex[i + 1]);\n try {\n var newKey = new Key(oneKeyList);\n result.keys.push(newKey);\n } catch (e) {\n result.err = result.err || [];\n result.err.push(e);\n }\n }\n } catch (e) {\n result.err = result.err || [];\n result.err.push(e);\n }\n return result;\n}\n\n/**\n * Reads an OpenPGP armored text and returns one or multiple key objects\n * @param {String} armoredText text to be parsed\n * @returns {{keys: Array<module:key.Key>,\n * err: (Array<Error>|null)}} result object with key and error arrays\n * @static\n */\nfunction readArmored(armoredText) {\n try {\n var input = _armor2.default.decode(armoredText);\n if (!(input.type === _enums2.default.armor.public_key || input.type === _enums2.default.armor.private_key)) {\n throw new Error('Armored text not of type key');\n }\n return read(input.data);\n } catch (e) {\n var result = { keys: [], err: [] };\n result.err.push(e);\n return result;\n }\n}\n\nfunction isDataExpired(keyPacket, signature) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n var normDate = _util2.default.normalizeDate(date);\n if (normDate !== null) {\n var expirationTime = getExpirationTime(keyPacket, signature);\n return !(keyPacket.created <= normDate && normDate < expirationTime) || signature && signature.isExpired(date);\n }\n return false;\n}\n\nfunction getExpirationTime(keyPacket, signature) {\n var expirationTime = void 0;\n // check V3 expiration time\n if (keyPacket.version === 3 && keyPacket.expirationTimeV3 !== 0) {\n expirationTime = keyPacket.created.getTime() + keyPacket.expirationTimeV3 * 24 * 3600 * 1000;\n }\n // check V4 expiration time\n if (keyPacket.version >= 4 && signature.keyNeverExpires === false) {\n expirationTime = keyPacket.created.getTime() + signature.keyExpirationTime * 1000;\n }\n return expirationTime ? new Date(expirationTime) : Infinity;\n}\n\n},{\"./config\":325,\"./crypto\":340,\"./encoding/armor\":357,\"./enums\":359,\"./packet\":371,\"./util\":398,\"babel-runtime/core-js/object/get-prototype-of\":29,\"babel-runtime/core-js/object/values\":31,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/slicedToArray\":40,\"babel-runtime/regenerator\":42}],363:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _keyring = _dereq_('./keyring.js');\n\nvar _keyring2 = _interopRequireDefault(_keyring);\n\nvar _localstore = _dereq_('./localstore.js');\n\nvar _localstore2 = _interopRequireDefault(_localstore);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileoverview Functions dealing with storage of the keyring.\n * @see module:keyring/keyring\n * @see module:keyring/localstore\n * @module keyring\n */\n_keyring2.default.localstore = _localstore2.default;\n\nexports.default = _keyring2.default;\n\n},{\"./keyring.js\":364,\"./localstore.js\":365}],364:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _key = _dereq_('../key');\n\nvar _localstore = _dereq_('./localstore');\n\nvar _localstore2 = _interopRequireDefault(_localstore);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initialization routine for the keyring.\n * This method reads the keyring from HTML5 local storage and initializes this instance.\n * @constructor\n * @param {keyring/localstore} [storeHandler] class implementing loadPublic(), loadPrivate(), storePublic(), and storePrivate() methods\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides the Keyring class\n * @requires key\n * @requires keyring/localstore\n * @module keyring/keyring\n */\n\nfunction Keyring(storeHandler) {\n this.storeHandler = storeHandler || new _localstore2.default();\n this.publicKeys = new KeyArray(this.storeHandler.loadPublic());\n this.privateKeys = new KeyArray(this.storeHandler.loadPrivate());\n}\n\n/**\n * Calls the storeHandler to save the keys\n */\nKeyring.prototype.store = function () {\n this.storeHandler.storePublic(this.publicKeys.keys);\n this.storeHandler.storePrivate(this.privateKeys.keys);\n};\n\n/**\n * Clear the keyring - erase all the keys\n */\nKeyring.prototype.clear = function () {\n this.publicKeys.keys = [];\n this.privateKeys.keys = [];\n};\n\n/**\n * Searches the keyring for keys having the specified key id\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @param {Boolean} deep if true search also in subkeys\n * @returns {Array<module:key.Key>|null} keys found or null\n */\nKeyring.prototype.getKeysForId = function (keyId, deep) {\n var result = [];\n result = result.concat(this.publicKeys.getForId(keyId, deep) || []);\n result = result.concat(this.privateKeys.getForId(keyId, deep) || []);\n return result.length ? result : null;\n};\n\n/**\n * Removes keys having the specified key id from the keyring\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @returns {Array<module:key.Key>|null} keys found or null\n */\nKeyring.prototype.removeKeysForId = function (keyId) {\n var result = [];\n result = result.concat(this.publicKeys.removeForId(keyId) || []);\n result = result.concat(this.privateKeys.removeForId(keyId) || []);\n return result.length ? result : null;\n};\n\n/**\n * Get all public and private keys\n * @returns {Array<module:key.Key>} all keys\n */\nKeyring.prototype.getAllKeys = function () {\n return this.publicKeys.keys.concat(this.privateKeys.keys);\n};\n\n/**\n * Array of keys\n * @param {Array<module:key.Key>} keys The keys to store in this array\n */\nfunction KeyArray(keys) {\n this.keys = keys;\n}\n\n/**\n * Searches all keys in the KeyArray matching the address or address part of the user ids\n * @param {String} email email address to search for\n * @returns {Array<module:key.Key>} The public keys associated with provided email address.\n */\nKeyArray.prototype.getForAddress = function (email) {\n var results = [];\n for (var i = 0; i < this.keys.length; i++) {\n if (emailCheck(email, this.keys[i])) {\n results.push(this.keys[i]);\n }\n }\n return results;\n};\n\n/**\n * Checks a key to see if it matches the specified email address\n * @private\n * @param {String} email email address to search for\n * @param {module:key.Key} key The key to be checked.\n * @returns {Boolean} True if the email address is defined in the specified key\n */\nfunction emailCheck(email, key) {\n email = email.toLowerCase();\n // escape email before using in regular expression\n var emailEsc = email.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n var emailRegex = new RegExp('<' + emailEsc + '>');\n var userIds = key.getUserIds();\n for (var i = 0; i < userIds.length; i++) {\n var userId = userIds[i].toLowerCase();\n if (email === userId || emailRegex.test(userId)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Checks a key to see if it matches the specified keyid\n * @private\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @param {module:packet.SecretKey|public_key|public_subkey|secret_subkey} keypacket The keypacket to be checked\n * @returns {Boolean} True if keypacket has the specified keyid\n */\nfunction keyIdCheck(keyId, keypacket) {\n if (keyId.length === 16) {\n return keyId === keypacket.getKeyId().toHex();\n }\n return keyId === keypacket.getFingerprint();\n}\n\n/**\n * Searches the KeyArray for a key having the specified key id\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @param {Boolean} deep if true search also in subkeys\n * @returns {module:key.Key|null} key found or null\n */\nKeyArray.prototype.getForId = function (keyId, deep) {\n for (var i = 0; i < this.keys.length; i++) {\n if (keyIdCheck(keyId, this.keys[i].primaryKey)) {\n return this.keys[i];\n }\n if (deep && this.keys[i].subKeys.length) {\n for (var j = 0; j < this.keys[i].subKeys.length; j++) {\n if (keyIdCheck(keyId, this.keys[i].subKeys[j].subKey)) {\n return this.keys[i];\n }\n }\n }\n }\n return null;\n};\n\n/**\n * Imports a key from an ascii armored message\n * @param {String} armored message to read the keys/key from\n * @returns {Promise<Array<Error>|null>} array of error objects or null\n * @async\n */\nKeyArray.prototype.importKey = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(armored) {\n var imported, i, key, keyidHex, keyFound;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n imported = (0, _key.readArmored)(armored);\n i = 0;\n\n case 2:\n if (!(i < imported.keys.length)) {\n _context.next = 15;\n break;\n }\n\n key = imported.keys[i];\n // check if key already in key array\n\n keyidHex = key.primaryKey.getKeyId().toHex();\n keyFound = this.getForId(keyidHex);\n\n if (!keyFound) {\n _context.next = 11;\n break;\n }\n\n _context.next = 9;\n return keyFound.update(key);\n\n case 9:\n _context.next = 12;\n break;\n\n case 11:\n this.push(key);\n\n case 12:\n i++;\n _context.next = 2;\n break;\n\n case 15:\n return _context.abrupt('return', imported.err ? imported.err : null);\n\n case 16:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Add key to KeyArray\n * @param {module:key.Key} key The key that will be added to the keyring\n * @returns {Number} The new length of the KeyArray\n */\nKeyArray.prototype.push = function (key) {\n return this.keys.push(key);\n};\n\n/**\n * Removes a key with the specified keyid from the keyring\n * @param {String} keyId provided as string of lowercase hex number\n * withouth 0x prefix (can be 16-character key ID or fingerprint)\n * @returns {module:key.Key|null} The key object which has been removed or null\n */\nKeyArray.prototype.removeForId = function (keyId) {\n for (var i = 0; i < this.keys.length; i++) {\n if (keyIdCheck(keyId, this.keys[i].primaryKey)) {\n return this.keys.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexports.default = Keyring;\n\n},{\"../key\":362,\"./localstore\":365,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],365:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _stringify = _dereq_('babel-runtime/core-js/json/stringify');\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _key = _dereq_('../key');\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The class that deals with storage of the keyring.\n * Currently the only option is to use HTML5 local storage.\n * @constructor\n * @param {String} prefix prefix for itemnames in localstore\n */\nfunction LocalStore(prefix) {\n prefix = prefix || 'openpgp-';\n this.publicKeysItem = prefix + this.publicKeysItem;\n this.privateKeysItem = prefix + this.privateKeysItem;\n if (typeof window !== 'undefined' && window.localStorage) {\n this.storage = window.localStorage;\n } else {\n this.storage = new (_dereq_('node-localstorage').LocalStorage)(_config2.default.node_store);\n }\n}\n\n/*\n * Declare the localstore itemnames\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides the LocalStore class\n * @requires config\n * @requires key\n * @requires util\n * @module keyring/localstore\n */\n\nLocalStore.prototype.publicKeysItem = 'public-keys';\nLocalStore.prototype.privateKeysItem = 'private-keys';\n\n/**\n * Load the public keys from HTML5 local storage.\n * @returns {Array<module:key.Key>} array of keys retrieved from localstore\n */\nLocalStore.prototype.loadPublic = function () {\n return loadKeys(this.storage, this.publicKeysItem);\n};\n\n/**\n * Load the private keys from HTML5 local storage.\n * @returns {Array<module:key.Key>} array of keys retrieved from localstore\n */\nLocalStore.prototype.loadPrivate = function () {\n return loadKeys(this.storage, this.privateKeysItem);\n};\n\nfunction loadKeys(storage, itemname) {\n var armoredKeys = JSON.parse(storage.getItem(itemname));\n var keys = [];\n if (armoredKeys !== null && armoredKeys.length !== 0) {\n var key = void 0;\n for (var i = 0; i < armoredKeys.length; i++) {\n key = (0, _key.readArmored)(armoredKeys[i]);\n if (!key.err) {\n keys.push(key.keys[0]);\n } else {\n _util2.default.print_debug(\"Error reading armored key from keyring index: \" + i);\n }\n }\n }\n return keys;\n}\n\n/**\n * Saves the current state of the public keys to HTML5 local storage.\n * The key array gets stringified using JSON\n * @param {Array<module:key.Key>} keys array of keys to save in localstore\n */\nLocalStore.prototype.storePublic = function (keys) {\n storeKeys(this.storage, this.publicKeysItem, keys);\n};\n\n/**\n * Saves the current state of the private keys to HTML5 local storage.\n * The key array gets stringified using JSON\n * @param {Array<module:key.Key>} keys array of keys to save in localstore\n */\nLocalStore.prototype.storePrivate = function (keys) {\n storeKeys(this.storage, this.privateKeysItem, keys);\n};\n\nfunction storeKeys(storage, itemname, keys) {\n var armoredKeys = [];\n if (keys.length) {\n for (var i = 0; i < keys.length; i++) {\n armoredKeys.push(keys[i].armor());\n }\n storage.setItem(itemname, (0, _stringify2.default)(armoredKeys));\n } else {\n storage.removeItem(itemname);\n }\n}\n\nexports.default = LocalStore;\n\n},{\"../config\":325,\"../key\":362,\"../util\":398,\"babel-runtime/core-js/json/stringify\":23,\"node-localstorage\":\"node-localstorage\"}],366:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createVerificationObjects = exports.createSignaturePackets = exports.encryptSessionKey = undefined;\n\nvar _from = _dereq_('babel-runtime/core-js/array/from');\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Encrypt a session key either with public keys, passwords, or both at once.\n * @param {Uint8Array} sessionKey session key for encryption\n * @param {String} symAlgo session key algorithm\n * @param {String} aeadAlgo (optional) aead algorithm, e.g. 'eax' or 'ocb'\n * @param {Array<Key>} publicKeys (optional) public key(s) for message encryption\n * @param {Array<String>} passwords (optional) for message encryption\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the date\n * @param {Object} userId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' }\n * @returns {Promise<Message>} new message with encrypted content\n * @async\n */\nvar encryptSessionKey = exports.encryptSessionKey = function () {\n var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(sessionKey, symAlgo, aeadAlgo, publicKeys, passwords) {\n var wildcard = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var date = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new Date();\n var userId = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : {};\n\n var packetlist, results, testDecrypt, sum, encryptPassword, _results;\n\n return _regenerator2.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n packetlist = new _packet2.default.List();\n\n if (!publicKeys) {\n _context11.next = 6;\n break;\n }\n\n _context11.next = 4;\n return _promise2.default.all(publicKeys.map(function () {\n var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(publicKey) {\n var encryptionKeyPacket, pkESKeyPacket;\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n _context8.next = 2;\n return publicKey.getEncryptionKeyPacket(undefined, date, userId);\n\n case 2:\n encryptionKeyPacket = _context8.sent;\n\n if (encryptionKeyPacket) {\n _context8.next = 5;\n break;\n }\n\n throw new Error('Could not find valid key packet for encryption in key ' + publicKey.primaryKey.getKeyId().toHex());\n\n case 5:\n pkESKeyPacket = new _packet2.default.PublicKeyEncryptedSessionKey();\n\n pkESKeyPacket.publicKeyId = wildcard ? _keyid2.default.wildcard() : encryptionKeyPacket.getKeyId();\n pkESKeyPacket.publicKeyAlgorithm = encryptionKeyPacket.algorithm;\n pkESKeyPacket.sessionKey = sessionKey;\n pkESKeyPacket.sessionKeyAlgorithm = symAlgo;\n _context8.next = 12;\n return pkESKeyPacket.encrypt(encryptionKeyPacket);\n\n case 12:\n delete pkESKeyPacket.sessionKey; // delete plaintext session key after encryption\n return _context8.abrupt('return', pkESKeyPacket);\n\n case 14:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x24) {\n return _ref9.apply(this, arguments);\n };\n }()));\n\n case 4:\n results = _context11.sent;\n\n packetlist.concat(results);\n\n case 6:\n if (!passwords) {\n _context11.next = 14;\n break;\n }\n\n testDecrypt = function () {\n var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(keyPacket, password) {\n return _regenerator2.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n _context9.prev = 0;\n _context9.next = 3;\n return keyPacket.decrypt(password);\n\n case 3:\n return _context9.abrupt('return', 1);\n\n case 6:\n _context9.prev = 6;\n _context9.t0 = _context9['catch'](0);\n return _context9.abrupt('return', 0);\n\n case 9:\n case 'end':\n return _context9.stop();\n }\n }\n }, _callee9, this, [[0, 6]]);\n }));\n\n return function testDecrypt(_x25, _x26) {\n return _ref10.apply(this, arguments);\n };\n }();\n\n sum = function sum(accumulator, currentValue) {\n return accumulator + currentValue;\n };\n\n encryptPassword = function () {\n var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(sessionKey, symAlgo, aeadAlgo, password) {\n var symEncryptedSessionKeyPacket, _results2;\n\n return _regenerator2.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n symEncryptedSessionKeyPacket = new _packet2.default.SymEncryptedSessionKey();\n\n symEncryptedSessionKeyPacket.sessionKey = sessionKey;\n symEncryptedSessionKeyPacket.sessionKeyAlgorithm = symAlgo;\n if (aeadAlgo) {\n symEncryptedSessionKeyPacket.aeadAlgorithm = aeadAlgo;\n }\n _context10.next = 6;\n return symEncryptedSessionKeyPacket.encrypt(password);\n\n case 6:\n if (!_config2.default.password_collision_check) {\n _context10.next = 12;\n break;\n }\n\n _context10.next = 9;\n return _promise2.default.all(passwords.map(function (pwd) {\n return testDecrypt(symEncryptedSessionKeyPacket, pwd);\n }));\n\n case 9:\n _results2 = _context10.sent;\n\n if (!(_results2.reduce(sum) !== 1)) {\n _context10.next = 12;\n break;\n }\n\n return _context10.abrupt('return', encryptPassword(sessionKey, symAlgo, password));\n\n case 12:\n\n delete symEncryptedSessionKeyPacket.sessionKey; // delete plaintext session key after encryption\n return _context10.abrupt('return', symEncryptedSessionKeyPacket);\n\n case 14:\n case 'end':\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n\n return function encryptPassword(_x27, _x28, _x29, _x30) {\n return _ref11.apply(this, arguments);\n };\n }();\n\n _context11.next = 12;\n return _promise2.default.all(passwords.map(function (pwd) {\n return encryptPassword(sessionKey, symAlgo, aeadAlgo, pwd);\n }));\n\n case 12:\n _results = _context11.sent;\n\n packetlist.concat(_results);\n\n case 14:\n return _context11.abrupt('return', new Message(packetlist));\n\n case 15:\n case 'end':\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function encryptSessionKey(_x16, _x17, _x18, _x19, _x20) {\n return _ref8.apply(this, arguments);\n };\n}();\n\n/**\n * Sign the message (the literal data packet of the message)\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature to add to the message\n * @param {Date} date (optional) override the creation time of the signature\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<Message>} new message with signed content\n * @async\n */\n\n\n/**\n * Create signature packets for the message\n * @param {module:packet.Literal} literalDataPacket the literal data packet to sign\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature to append\n * @param {Date} date (optional) override the creationtime of the signature\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:packet.List>} list of signature packets\n * @async\n */\nvar createSignaturePackets = exports.createSignaturePackets = function () {\n var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(literalDataPacket, privateKeys) {\n var signature = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n var userId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var packetlist, signatureType, existingSigPacketlist;\n return _regenerator2.default.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n packetlist = new _packet2.default.List();\n\n // If data packet was created from Uint8Array, use binary, otherwise use text\n\n signatureType = literalDataPacket.text === null ? _enums2.default.signature.binary : _enums2.default.signature.text;\n _context16.next = 4;\n return _promise2.default.all(privateKeys.map(function () {\n var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(privateKey) {\n var signingKeyPacket, signaturePacket;\n return _regenerator2.default.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n if (!privateKey.isPublic()) {\n _context15.next = 2;\n break;\n }\n\n throw new Error('Need private key for signing');\n\n case 2:\n _context15.next = 4;\n return privateKey.getSigningKeyPacket(undefined, date, userId);\n\n case 4:\n signingKeyPacket = _context15.sent;\n\n if (signingKeyPacket) {\n _context15.next = 7;\n break;\n }\n\n throw new Error('Could not find valid key packet for signing in key ' + privateKey.primaryKey.getKeyId().toHex());\n\n case 7:\n if (signingKeyPacket.isDecrypted) {\n _context15.next = 9;\n break;\n }\n\n throw new Error('Private key is not decrypted.');\n\n case 9:\n signaturePacket = new _packet2.default.Signature(date);\n\n signaturePacket.signatureType = signatureType;\n signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;\n _context15.next = 14;\n return (0, _key.getPreferredHashAlgo)(privateKey, date, userId);\n\n case 14:\n signaturePacket.hashAlgorithm = _context15.sent;\n _context15.next = 17;\n return signaturePacket.sign(signingKeyPacket, literalDataPacket);\n\n case 17:\n return _context15.abrupt('return', signaturePacket);\n\n case 18:\n case 'end':\n return _context15.stop();\n }\n }\n }, _callee15, this);\n }));\n\n return function (_x46) {\n return _ref16.apply(this, arguments);\n };\n }())).then(function (signatureList) {\n signatureList.forEach(function (signaturePacket) {\n return packetlist.push(signaturePacket);\n });\n });\n\n case 4:\n\n if (signature) {\n existingSigPacketlist = signature.packets.filterByTag(_enums2.default.packet.signature);\n\n packetlist.concat(existingSigPacketlist);\n }\n return _context16.abrupt('return', packetlist);\n\n case 6:\n case 'end':\n return _context16.stop();\n }\n }\n }, _callee16, this);\n }));\n\n return function createSignaturePackets(_x41, _x42) {\n return _ref15.apply(this, arguments);\n };\n}();\n\n/**\n * Verify message signatures\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date (optional) Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<({keyid: module:type/keyid, valid: Boolean})>>} list of signer's keyid and validity of signature\n * @async\n */\n\n\n/**\n * Create list of objects containing signer's keyid and validity of signature\n * @param {Array<module:packet.Signature>} signatureList array of signature packets\n * @param {Array<module:packet.Literal>} literalDataList array of literal data packets\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Date} date Verify the signature against the given date,\n * i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<{keyid: module:type/keyid,\n * valid: Boolean}>>} list of signer's keyid and validity of signature\n * @async\n */\nvar createVerificationObjects = exports.createVerificationObjects = function () {\n var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19(signatureList, literalDataList, keys) {\n var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();\n return _regenerator2.default.wrap(function _callee19$(_context19) {\n while (1) {\n switch (_context19.prev = _context19.next) {\n case 0:\n return _context19.abrupt('return', _promise2.default.all(signatureList.map(function () {\n var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18(signature) {\n var keyPacket, verifiedSig, packetlist;\n return _regenerator2.default.wrap(function _callee18$(_context18) {\n while (1) {\n switch (_context18.prev = _context18.next) {\n case 0:\n keyPacket = null;\n _context18.next = 3;\n return _promise2.default.all(keys.map(function () {\n var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(key) {\n var result;\n return _regenerator2.default.wrap(function _callee17$(_context17) {\n while (1) {\n switch (_context17.prev = _context17.next) {\n case 0:\n _context17.next = 2;\n return key.getSigningKeyPacket(signature.issuerKeyId, date);\n\n case 2:\n result = _context17.sent;\n\n if (result) {\n keyPacket = result;\n }\n\n case 4:\n case 'end':\n return _context17.stop();\n }\n }\n }, _callee17, this);\n }));\n\n return function (_x54) {\n return _ref19.apply(this, arguments);\n };\n }()));\n\n case 3:\n _context18.t0 = signature.issuerKeyId;\n\n if (!keyPacket) {\n _context18.next = 10;\n break;\n }\n\n _context18.next = 7;\n return signature.verify(keyPacket, literalDataList[0]);\n\n case 7:\n _context18.t1 = _context18.sent;\n _context18.next = 11;\n break;\n\n case 10:\n _context18.t1 = null;\n\n case 11:\n _context18.t2 = _context18.t1;\n verifiedSig = {\n keyid: _context18.t0,\n valid: _context18.t2\n };\n packetlist = new _packet2.default.List();\n\n packetlist.push(signature);\n verifiedSig.signature = new _signature.Signature(packetlist);\n\n return _context18.abrupt('return', verifiedSig);\n\n case 17:\n case 'end':\n return _context18.stop();\n }\n }\n }, _callee18, this);\n }));\n\n return function (_x53) {\n return _ref18.apply(this, arguments);\n };\n }())));\n\n case 1:\n case 'end':\n return _context19.stop();\n }\n }\n }, _callee19, this);\n }));\n\n return function createVerificationObjects(_x49, _x50, _x51) {\n return _ref17.apply(this, arguments);\n };\n}();\n\n/**\n * Unwrap compressed message\n * @returns {module:message.Message} message Content of compressed message\n */\n\n\nexports.Message = Message;\nexports.readArmored = readArmored;\nexports.read = read;\nexports.fromText = fromText;\nexports.fromBinary = fromBinary;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _keyid = _dereq_('./type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('./crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _signature = _dereq_('./signature');\n\nvar _key = _dereq_('./key');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP message.\n * Can be an encrypted message, signed message, compressed message or literal message\n * @param {module:packet.List} packetlist The packets that form this message\n * See {@link https://tools.ietf.org/html/rfc4880#section-11.3}\n */\n\nfunction Message(packetlist) {\n if (!(this instanceof Message)) {\n return new Message(packetlist);\n }\n this.packets = packetlist || new _packet2.default.List();\n}\n\n/**\n * Returns the key IDs of the keys to which the session key is encrypted\n * @returns {Array<module:type/keyid>} array of keyid objects\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires type/keyid\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n * @requires packet\n * @requires signature\n * @requires key\n * @module message\n */\n\nMessage.prototype.getEncryptionKeyIds = function () {\n var keyIds = [];\n var pkESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.publicKeyEncryptedSessionKey);\n pkESKeyPacketlist.forEach(function (packet) {\n keyIds.push(packet.publicKeyId);\n });\n return keyIds;\n};\n\n/**\n * Returns the key IDs of the keys that signed the message\n * @returns {Array<module:type/keyid>} array of keyid objects\n */\nMessage.prototype.getSigningKeyIds = function () {\n var keyIds = [];\n var msg = this.unwrapCompressed();\n // search for one pass signatures\n var onePassSigList = msg.packets.filterByTag(_enums2.default.packet.onePassSignature);\n onePassSigList.forEach(function (packet) {\n keyIds.push(packet.signingKeyId);\n });\n // if nothing found look for signature packets\n if (!keyIds.length) {\n var signatureList = msg.packets.filterByTag(_enums2.default.packet.signature);\n signatureList.forEach(function (packet) {\n keyIds.push(packet.issuerKeyId);\n });\n }\n return keyIds;\n};\n\n/**\n * Decrypt the message. Either a private key, a session key, or a password must be specified.\n * @param {Array<Key>} privateKeys (optional) private keys with decrypted secret data\n * @param {Array<String>} passwords (optional) passwords used to decrypt\n * @param {Array<Object>} sessionKeys (optional) session keys in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n * @returns {Promise<Message>} new message with decrypted content\n * @async\n */\nMessage.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(privateKeys, passwords, sessionKeys) {\n var keyObjs, symEncryptedPacketlist, symEncryptedPacket, exception, i, resultMsg;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.t0 = sessionKeys;\n\n if (_context.t0) {\n _context.next = 5;\n break;\n }\n\n _context.next = 4;\n return this.decryptSessionKeys(privateKeys, passwords);\n\n case 4:\n _context.t0 = _context.sent;\n\n case 5:\n keyObjs = _context.t0;\n symEncryptedPacketlist = this.packets.filterByTag(_enums2.default.packet.symmetricallyEncrypted, _enums2.default.packet.symEncryptedIntegrityProtected, _enums2.default.packet.symEncryptedAEADProtected);\n\n if (!(symEncryptedPacketlist.length === 0)) {\n _context.next = 9;\n break;\n }\n\n return _context.abrupt('return', this);\n\n case 9:\n symEncryptedPacket = symEncryptedPacketlist[0];\n exception = null;\n i = 0;\n\n case 12:\n if (!(i < keyObjs.length)) {\n _context.next = 27;\n break;\n }\n\n if (!(!keyObjs[i] || !_util2.default.isUint8Array(keyObjs[i].data) || !_util2.default.isString(keyObjs[i].algorithm))) {\n _context.next = 15;\n break;\n }\n\n throw new Error('Invalid session key for decryption.');\n\n case 15:\n _context.prev = 15;\n _context.next = 18;\n return symEncryptedPacket.decrypt(keyObjs[i].algorithm, keyObjs[i].data);\n\n case 18:\n return _context.abrupt('break', 27);\n\n case 21:\n _context.prev = 21;\n _context.t1 = _context['catch'](15);\n\n exception = _context.t1;\n\n case 24:\n i++;\n _context.next = 12;\n break;\n\n case 27:\n if (!(!symEncryptedPacket.packets || !symEncryptedPacket.packets.length)) {\n _context.next = 29;\n break;\n }\n\n throw exception || new Error('Decryption failed.');\n\n case 29:\n resultMsg = new Message(symEncryptedPacket.packets);\n\n symEncryptedPacket.packets = new _packet2.default.List(); // remove packets after decryption\n\n return _context.abrupt('return', resultMsg);\n\n case 32:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this, [[15, 21]]);\n }));\n\n return function (_x, _x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypt encrypted session keys either with private keys or passwords.\n * @param {Array<Key>} privateKeys (optional) private keys with decrypted secret data\n * @param {Array<String>} passwords (optional) passwords used to decrypt\n * @returns {Promise<Array<{ data: Uint8Array,\n algorithm: String }>>} array of object with potential sessionKey, algorithm pairs\n * @async\n */\nMessage.prototype.decryptSessionKeys = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(privateKeys, passwords) {\n var keyPackets, symESKeyPacketlist, pkESKeyPacketlist, seen;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n keyPackets = [];\n\n if (!passwords) {\n _context6.next = 9;\n break;\n }\n\n symESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.symEncryptedSessionKey);\n\n if (symESKeyPacketlist) {\n _context6.next = 5;\n break;\n }\n\n throw new Error('No symmetrically encrypted session key packet found.');\n\n case 5:\n _context6.next = 7;\n return _promise2.default.all(symESKeyPacketlist.map(function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(keyPacket) {\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _promise2.default.all(passwords.map(function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(password) {\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.prev = 0;\n _context2.next = 3;\n return keyPacket.decrypt(password);\n\n case 3:\n keyPackets.push(keyPacket);\n _context2.next = 9;\n break;\n\n case 6:\n _context2.prev = 6;\n _context2.t0 = _context2['catch'](0);\n\n _util2.default.print_debug_error(_context2.t0);\n\n case 9:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this, [[0, 6]]);\n }));\n\n return function (_x7) {\n return _ref4.apply(this, arguments);\n };\n }()));\n\n case 2:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x6) {\n return _ref3.apply(this, arguments);\n };\n }()));\n\n case 7:\n _context6.next = 18;\n break;\n\n case 9:\n if (!privateKeys) {\n _context6.next = 17;\n break;\n }\n\n pkESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.publicKeyEncryptedSessionKey);\n\n if (pkESKeyPacketlist) {\n _context6.next = 13;\n break;\n }\n\n throw new Error('No public key encrypted session key packet found.');\n\n case 13:\n _context6.next = 15;\n return _promise2.default.all(pkESKeyPacketlist.map(function () {\n var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(keyPacket) {\n var privateKeyPackets;\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n // TODO improve this\n privateKeyPackets = privateKeys.reduce(function (acc, privateKey) {\n return acc.concat(privateKey.getKeyPackets(keyPacket.publicKeyId));\n }, new _packet2.default.List());\n _context5.next = 3;\n return _promise2.default.all(privateKeyPackets.map(function () {\n var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(privateKeyPacket) {\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (privateKeyPacket) {\n _context4.next = 2;\n break;\n }\n\n return _context4.abrupt('return');\n\n case 2:\n if (privateKeyPacket.isDecrypted) {\n _context4.next = 4;\n break;\n }\n\n throw new Error('Private key is not decrypted.');\n\n case 4:\n _context4.prev = 4;\n _context4.next = 7;\n return keyPacket.decrypt(privateKeyPacket);\n\n case 7:\n keyPackets.push(keyPacket);\n _context4.next = 13;\n break;\n\n case 10:\n _context4.prev = 10;\n _context4.t0 = _context4['catch'](4);\n\n _util2.default.print_debug_error(_context4.t0);\n\n case 13:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this, [[4, 10]]);\n }));\n\n return function (_x9) {\n return _ref6.apply(this, arguments);\n };\n }()));\n\n case 3:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function (_x8) {\n return _ref5.apply(this, arguments);\n };\n }()));\n\n case 15:\n _context6.next = 18;\n break;\n\n case 17:\n throw new Error('No key or password specified.');\n\n case 18:\n if (!keyPackets.length) {\n _context6.next = 21;\n break;\n }\n\n // Return only unique session keys\n if (keyPackets.length > 1) {\n seen = {};\n\n keyPackets = keyPackets.filter(function (item) {\n var k = item.sessionKeyAlgorithm + _util2.default.Uint8Array_to_str(item.sessionKey);\n if (seen.hasOwnProperty(k)) {\n return false;\n }\n seen[k] = true;\n return true;\n });\n }\n\n return _context6.abrupt('return', keyPackets.map(function (packet) {\n return { data: packet.sessionKey, algorithm: packet.sessionKeyAlgorithm };\n }));\n\n case 21:\n throw new Error('Session key decryption failed.');\n\n case 22:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function (_x4, _x5) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Get literal data that is the body of the message\n * @returns {(Uint8Array|null)} literal body of the message as Uint8Array\n */\nMessage.prototype.getLiteralData = function () {\n var literal = this.packets.findPacket(_enums2.default.packet.literal);\n return literal && literal.getBytes() || null;\n};\n\n/**\n * Get filename from literal data packet\n * @returns {(String|null)} filename of literal data packet as string\n */\nMessage.prototype.getFilename = function () {\n var literal = this.packets.findPacket(_enums2.default.packet.literal);\n return literal && literal.getFilename() || null;\n};\n\n/**\n * Get literal data as text\n * @returns {(String|null)} literal body of the message interpreted as text\n */\nMessage.prototype.getText = function () {\n var literal = this.packets.findPacket(_enums2.default.packet.literal);\n if (literal) {\n return literal.getText();\n }\n return null;\n};\n\n/**\n * Encrypt the message either with public keys, passwords, or both at once.\n * @param {Array<Key>} keys (optional) public key(s) for message encryption\n * @param {Array<String>} passwords (optional) password(s) for message encryption\n * @param {Object} sessionKey (optional) session key in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the creation date of the literal package\n * @param {Object} userId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' }\n * @returns {Promise<Message>} new message with encrypted content\n * @async\n */\nMessage.prototype.encrypt = function () {\n var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(keys, passwords, sessionKey) {\n var wildcard = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var date = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Date();\n var userId = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var symAlgo, aeadAlgo, symEncryptedPacket, msg;\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n symAlgo = void 0;\n aeadAlgo = void 0;\n symEncryptedPacket = void 0;\n\n if (!sessionKey) {\n _context7.next = 11;\n break;\n }\n\n if (!(!_util2.default.isUint8Array(sessionKey.data) || !_util2.default.isString(sessionKey.algorithm))) {\n _context7.next = 6;\n break;\n }\n\n throw new Error('Invalid session key for encryption.');\n\n case 6:\n symAlgo = sessionKey.algorithm;\n aeadAlgo = sessionKey.aeadAlgorithm;\n sessionKey = sessionKey.data;\n _context7.next = 38;\n break;\n\n case 11:\n if (!(keys && keys.length)) {\n _context7.next = 32;\n break;\n }\n\n _context7.t0 = _enums2.default;\n _context7.t1 = _enums2.default.symmetric;\n _context7.next = 16;\n return (0, _key.getPreferredAlgo)('symmetric', keys, date, userId);\n\n case 16:\n _context7.t2 = _context7.sent;\n symAlgo = _context7.t0.read.call(_context7.t0, _context7.t1, _context7.t2);\n _context7.t3 = _config2.default.aead_protect && _config2.default.aead_protect_version === 4;\n\n if (!_context7.t3) {\n _context7.next = 23;\n break;\n }\n\n _context7.next = 22;\n return (0, _key.isAeadSupported)(keys, date, userId);\n\n case 22:\n _context7.t3 = _context7.sent;\n\n case 23:\n if (!_context7.t3) {\n _context7.next = 30;\n break;\n }\n\n _context7.t4 = _enums2.default;\n _context7.t5 = _enums2.default.aead;\n _context7.next = 28;\n return (0, _key.getPreferredAlgo)('aead', keys, date, userId);\n\n case 28:\n _context7.t6 = _context7.sent;\n aeadAlgo = _context7.t4.read.call(_context7.t4, _context7.t5, _context7.t6);\n\n case 30:\n _context7.next = 38;\n break;\n\n case 32:\n if (!(passwords && passwords.length)) {\n _context7.next = 37;\n break;\n }\n\n symAlgo = _enums2.default.read(_enums2.default.symmetric, _config2.default.encryption_cipher);\n aeadAlgo = _enums2.default.read(_enums2.default.aead, _config2.default.aead_mode);\n _context7.next = 38;\n break;\n\n case 37:\n throw new Error('No keys, passwords, or session key provided.');\n\n case 38:\n if (sessionKey) {\n _context7.next = 42;\n break;\n }\n\n _context7.next = 41;\n return _crypto2.default.generateSessionKey(symAlgo);\n\n case 41:\n sessionKey = _context7.sent;\n\n case 42:\n _context7.next = 44;\n return encryptSessionKey(sessionKey, symAlgo, aeadAlgo, keys, passwords, wildcard, date, userId);\n\n case 44:\n msg = _context7.sent;\n\n\n if (_config2.default.aead_protect && (_config2.default.aead_protect_version !== 4 || aeadAlgo)) {\n symEncryptedPacket = new _packet2.default.SymEncryptedAEADProtected();\n symEncryptedPacket.aeadAlgorithm = aeadAlgo;\n } else if (_config2.default.integrity_protect) {\n symEncryptedPacket = new _packet2.default.SymEncryptedIntegrityProtected();\n } else {\n symEncryptedPacket = new _packet2.default.SymmetricallyEncrypted();\n }\n symEncryptedPacket.packets = this.packets;\n\n _context7.next = 49;\n return symEncryptedPacket.encrypt(symAlgo, sessionKey);\n\n case 49:\n\n msg.packets.push(symEncryptedPacket);\n symEncryptedPacket.packets = new _packet2.default.List(); // remove packets after encryption\n return _context7.abrupt('return', {\n message: msg,\n sessionKey: {\n data: sessionKey,\n algorithm: symAlgo,\n aeadAlgorithm: aeadAlgo\n }\n });\n\n case 52:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x10, _x11, _x12) {\n return _ref7.apply(this, arguments);\n };\n}();Message.prototype.sign = function () {\n var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13() {\n var privateKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var packetlist, literalDataPacket, i, existingSigPacketlist, signatureType, signaturePacket, onePassSig;\n return _regenerator2.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n packetlist = new _packet2.default.List();\n literalDataPacket = this.packets.findPacket(_enums2.default.packet.literal);\n\n if (literalDataPacket) {\n _context13.next = 4;\n break;\n }\n\n throw new Error('No literal data packet to sign.');\n\n case 4:\n i = void 0;\n existingSigPacketlist = void 0;\n // If data packet was created from Uint8Array, use binary, otherwise use text\n\n signatureType = literalDataPacket.text === null ? _enums2.default.signature.binary : _enums2.default.signature.text;\n\n\n if (signature) {\n existingSigPacketlist = signature.packets.filterByTag(_enums2.default.packet.signature);\n for (i = existingSigPacketlist.length - 1; i >= 0; i--) {\n signaturePacket = existingSigPacketlist[i];\n onePassSig = new _packet2.default.OnePassSignature();\n\n onePassSig.type = signatureType;\n onePassSig.hashAlgorithm = signaturePacket.hashAlgorithm;\n onePassSig.publicKeyAlgorithm = signaturePacket.publicKeyAlgorithm;\n onePassSig.signingKeyId = signaturePacket.issuerKeyId;\n if (!privateKeys.length && i === 0) {\n onePassSig.flags = 1;\n }\n packetlist.push(onePassSig);\n }\n }\n\n _context13.next = 10;\n return _promise2.default.all((0, _from2.default)(privateKeys).reverse().map(function () {\n var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(privateKey, i) {\n var signingKeyPacket, onePassSig;\n return _regenerator2.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (!privateKey.isPublic()) {\n _context12.next = 2;\n break;\n }\n\n throw new Error('Need private key for signing');\n\n case 2:\n _context12.next = 4;\n return privateKey.getSigningKeyPacket(undefined, date, userId);\n\n case 4:\n signingKeyPacket = _context12.sent;\n\n if (signingKeyPacket) {\n _context12.next = 7;\n break;\n }\n\n throw new Error('Could not find valid key packet for signing in key ' + privateKey.primaryKey.getKeyId().toHex());\n\n case 7:\n onePassSig = new _packet2.default.OnePassSignature();\n\n onePassSig.type = signatureType;\n _context12.next = 11;\n return (0, _key.getPreferredHashAlgo)(privateKey, date, userId);\n\n case 11:\n onePassSig.hashAlgorithm = _context12.sent;\n\n onePassSig.publicKeyAlgorithm = signingKeyPacket.algorithm;\n onePassSig.signingKeyId = signingKeyPacket.getKeyId();\n if (i === privateKeys.length - 1) {\n onePassSig.flags = 1;\n }\n return _context12.abrupt('return', onePassSig);\n\n case 16:\n case 'end':\n return _context12.stop();\n }\n }\n }, _callee12, this);\n }));\n\n return function (_x35, _x36) {\n return _ref13.apply(this, arguments);\n };\n }())).then(function (onePassSignatureList) {\n onePassSignatureList.forEach(function (onePassSig) {\n return packetlist.push(onePassSig);\n });\n });\n\n case 10:\n\n packetlist.push(literalDataPacket);\n _context13.t0 = packetlist;\n _context13.next = 14;\n return createSignaturePackets(literalDataPacket, privateKeys, signature, date);\n\n case 14:\n _context13.t1 = _context13.sent;\n\n _context13.t0.concat.call(_context13.t0, _context13.t1);\n\n return _context13.abrupt('return', new Message(packetlist));\n\n case 17:\n case 'end':\n return _context13.stop();\n }\n }\n }, _callee13, this);\n }));\n\n return function () {\n return _ref12.apply(this, arguments);\n };\n}();\n\n/**\n * Compresses the message (the literal and -if signed- signature data packets of the message)\n * @param {module:enums.compression} compression compression algorithm to be used\n * @returns {module:message.Message} new message with compressed content\n */\nMessage.prototype.compress = function (compression) {\n if (compression === _enums2.default.compression.uncompressed) {\n return this;\n }\n\n var compressed = new _packet2.default.Compressed();\n compressed.packets = this.packets;\n compressed.algorithm = _enums2.default.read(_enums2.default.compression, compression);\n\n var packetList = new _packet2.default.List();\n packetList.push(compressed);\n\n return new Message(packetList);\n};\n\n/**\n * Create a detached signature for the message (the literal data packet of the message)\n * @param {Array<module:key.Key>} privateKeys private keys with decrypted secret key data for signing\n * @param {Signature} signature (optional) any existing detached signature\n * @param {Date} date (optional) override the creation time of the signature\n * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<module:signature.Signature>} new detached signature of message content\n * @async\n */\nMessage.prototype.signDetached = function () {\n var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14() {\n var privateKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var literalDataPacket;\n return _regenerator2.default.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n literalDataPacket = this.packets.findPacket(_enums2.default.packet.literal);\n\n if (literalDataPacket) {\n _context14.next = 3;\n break;\n }\n\n throw new Error('No literal data packet to sign.');\n\n case 3:\n _context14.t0 = _signature.Signature;\n _context14.next = 6;\n return createSignaturePackets(literalDataPacket, privateKeys, signature, date, userId);\n\n case 6:\n _context14.t1 = _context14.sent;\n return _context14.abrupt('return', new _context14.t0(_context14.t1));\n\n case 8:\n case 'end':\n return _context14.stop();\n }\n }\n }, _callee14, this);\n }));\n\n return function () {\n return _ref14.apply(this, arguments);\n };\n}();Message.prototype.verify = function (keys) {\n var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n\n var msg = this.unwrapCompressed();\n var literalDataList = msg.packets.filterByTag(_enums2.default.packet.literal);\n if (literalDataList.length !== 1) {\n throw new Error('Can only verify message with one literal data packet.');\n }\n var signatureList = msg.packets.filterByTag(_enums2.default.packet.signature);\n return createVerificationObjects(signatureList, literalDataList, keys, date);\n};\n\n/**\n * Verify detached message signature\n * @param {Array<module:key.Key>} keys array of keys to verify signatures\n * @param {Signature} signature\n * @param {Date} date Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @returns {Promise<Array<({keyid: module:type/keyid, valid: Boolean})>>} list of signer's keyid and validity of signature\n * @async\n */\nMessage.prototype.verifyDetached = function (signature, keys) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n\n var msg = this.unwrapCompressed();\n var literalDataList = msg.packets.filterByTag(_enums2.default.packet.literal);\n if (literalDataList.length !== 1) {\n throw new Error('Can only verify message with one literal data packet.');\n }\n var signatureList = signature.packets;\n return createVerificationObjects(signatureList, literalDataList, keys, date);\n};Message.prototype.unwrapCompressed = function () {\n var compressed = this.packets.filterByTag(_enums2.default.packet.compressed);\n if (compressed.length) {\n return new Message(compressed[0].packets);\n }\n return this;\n};\n\n/**\n * Append signature to unencrypted message object\n * @param {String|Uint8Array} detachedSignature The detached ASCII-armored or Uint8Array PGP signature\n */\nMessage.prototype.appendSignature = function (detachedSignature) {\n this.packets.read(_util2.default.isUint8Array(detachedSignature) ? detachedSignature : _armor2.default.decode(detachedSignature).data);\n};\n\n/**\n * Returns ASCII armored text of message\n * @returns {String} ASCII armor\n */\nMessage.prototype.armor = function () {\n return _armor2.default.encode(_enums2.default.armor.message, this.packets.write());\n};\n\n/**\n * reads an OpenPGP armored message and returns a message object\n * @param {String} armoredText text to be parsed\n * @returns {module:message.Message} new message object\n * @static\n */\nfunction readArmored(armoredText) {\n //TODO how do we want to handle bad text? Exception throwing\n //TODO don't accept non-message armored texts\n var input = _armor2.default.decode(armoredText).data;\n return read(input);\n}\n\n/**\n * reads an OpenPGP message as byte array and returns a message object\n * @param {Uint8Array} input binary message\n * @returns {Message} new message object\n * @static\n */\nfunction read(input) {\n var packetlist = new _packet2.default.List();\n packetlist.read(input);\n return new Message(packetlist);\n}\n\n/**\n * creates new message object from text\n * @param {String} text\n * @param {String} filename (optional)\n * @param {Date} date (optional)\n * @param {utf8|binary|text|mime} type (optional) data packet type\n * @returns {module:message.Message} new message object\n * @static\n */\nfunction fromText(text, filename) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'utf8';\n\n var literalDataPacket = new _packet2.default.Literal(date);\n // text will be converted to UTF8\n literalDataPacket.setText(text, type);\n if (filename !== undefined) {\n literalDataPacket.setFilename(filename);\n }\n var literalDataPacketlist = new _packet2.default.List();\n literalDataPacketlist.push(literalDataPacket);\n return new Message(literalDataPacketlist);\n}\n\n/**\n * creates new message object from binary data\n * @param {Uint8Array} bytes\n * @param {String} filename (optional)\n * @param {Date} date (optional)\n * @param {utf8|binary|text|mime} type (optional) data packet type\n * @returns {module:message.Message} new message object\n * @static\n */\nfunction fromBinary(bytes, filename) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'binary';\n\n if (!_util2.default.isUint8Array(bytes)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n var literalDataPacket = new _packet2.default.Literal(date);\n literalDataPacket.setBytes(bytes, type);\n if (filename !== undefined) {\n literalDataPacket.setFilename(filename);\n }\n var literalDataPacketlist = new _packet2.default.List();\n literalDataPacketlist.push(literalDataPacket);\n return new Message(literalDataPacketlist);\n}\n\n},{\"./config\":325,\"./crypto\":340,\"./encoding/armor\":357,\"./enums\":359,\"./key\":362,\"./packet\":371,\"./signature\":391,\"./type/keyid\":394,\"./util\":398,\"babel-runtime/core-js/array/from\":20,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],367:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nexports.initWorker = initWorker;\nexports.getWorker = getWorker;\nexports.destroyWorker = destroyWorker;\nexports.generateKey = generateKey;\nexports.reformatKey = reformatKey;\nexports.decryptKey = decryptKey;\nexports.encryptKey = encryptKey;\nexports.encrypt = encrypt;\nexports.decrypt = decrypt;\nexports.sign = sign;\nexports.verify = verify;\nexports.encryptSessionKey = encryptSessionKey;\nexports.decryptSessionKeys = decryptSessionKeys;\n\nvar _message = _dereq_('./message');\n\nvar messageLib = _interopRequireWildcard(_message);\n\nvar _cleartext = _dereq_('./cleartext');\n\nvar _key = _dereq_('./key');\n\nvar _config = _dereq_('./config/config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _async_proxy = _dereq_('./worker/async_proxy');\n\nvar _async_proxy2 = _interopRequireDefault(_async_proxy);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Old browser polyfills\nif (typeof window !== 'undefined') {\n _dereq_('./polyfills');\n}\n\n//////////////////////////\n// //\n// Web Worker setup //\n// //\n//////////////////////////\n\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview The openpgp base module should provide all of the functionality\n * to consume the openpgp.js library. All additional classes are documented\n * for extending and developing on top of the base library.\n * @requires message\n * @requires cleartext\n * @requires key\n * @requires config\n * @requires enums\n * @requires util\n * @requires polyfills\n * @requires worker/async_proxy\n * @module openpgp\n */\n\n// This file intentionally has two separate file overviews so that\n// a reference to this module appears at the end of doc/index.html.\n\n/**\n * @fileoverview To view the full API documentation, start from\n * {@link module:openpgp}\n */\n\nvar asyncProxy = void 0; // instance of the asyncproxy\n\n/**\n * Set the path for the web worker script and create an instance of the async proxy\n * @param {String} path relative path to the worker scripts, default: 'openpgp.worker.js'\n * @param {Number} n number of workers to initialize\n * @param {Array<Object>} workers alternative to path parameter: web workers initialized with 'openpgp.worker.js'\n */\nfunction initWorker() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$path = _ref.path,\n path = _ref$path === undefined ? 'openpgp.worker.js' : _ref$path,\n _ref$n = _ref.n,\n n = _ref$n === undefined ? 1 : _ref$n,\n _ref$workers = _ref.workers,\n workers = _ref$workers === undefined ? [] : _ref$workers;\n\n if (workers.length || typeof window !== 'undefined' && window.Worker) {\n asyncProxy = new _async_proxy2.default({ path: path, n: n, workers: workers, config: _config2.default });\n return true;\n }\n}\n\n/**\n * Returns a reference to the async proxy if the worker was initialized with openpgp.initWorker()\n * @returns {module:worker/async_proxy.AsyncProxy|null} the async proxy or null if not initialized\n */\nfunction getWorker() {\n return asyncProxy;\n}\n\n/**\n * Cleanup the current instance of the web worker.\n */\nfunction destroyWorker() {\n asyncProxy = undefined;\n}\n\n//////////////////////\n// //\n// Key handling //\n// //\n//////////////////////\n\n\n/**\n * Generates a new OpenPGP key pair. Supports RSA and ECC keys. Primary and subkey will be of same type.\n * @param {Array<Object>} userIds array of user IDs e.g. [{ name:'Phil Zimmermann', email:'phil@openpgp.org' }]\n * @param {String} passphrase (optional) The passphrase used to encrypt the resulting private key\n * @param {Number} numBits (optional) number of bits for RSA keys: 2048 or 4096.\n * @param {Number} keyExpirationTime (optional) The number of seconds after the key creation time that the key expires\n * @param {String} curve (optional) elliptic curve for ECC keys:\n * curve25519, p256, p384, p521, secp256k1,\n * brainpoolP256r1, brainpoolP384r1, or brainpoolP512r1.\n * @param {Date} date (optional) override the creation date of the key and the key signatures\n * @param {Array<Object>} subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * sign parameter defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @returns {Promise<Object>} The generated key object in the form:\n * { key:Key, privateKeyArmored:String, publicKeyArmored:String }\n * @async\n * @static\n */\n\nfunction generateKey(_ref2) {\n var _ref2$userIds = _ref2.userIds,\n userIds = _ref2$userIds === undefined ? [] : _ref2$userIds,\n _ref2$passphrase = _ref2.passphrase,\n passphrase = _ref2$passphrase === undefined ? \"\" : _ref2$passphrase,\n _ref2$numBits = _ref2.numBits,\n numBits = _ref2$numBits === undefined ? 2048 : _ref2$numBits,\n _ref2$keyExpirationTi = _ref2.keyExpirationTime,\n keyExpirationTime = _ref2$keyExpirationTi === undefined ? 0 : _ref2$keyExpirationTi,\n _ref2$curve = _ref2.curve,\n curve = _ref2$curve === undefined ? \"\" : _ref2$curve,\n _ref2$date = _ref2.date,\n date = _ref2$date === undefined ? new Date() : _ref2$date,\n _ref2$subkeys = _ref2.subkeys,\n subkeys = _ref2$subkeys === undefined ? [{}] : _ref2$subkeys;\n\n userIds = toArray(userIds);\n var options = { userIds: userIds, passphrase: passphrase, numBits: numBits, keyExpirationTime: keyExpirationTime, curve: curve, date: date, subkeys: subkeys };\n if (_util2.default.getWebCryptoAll() && numBits < 2048) {\n throw new Error('numBits should be 2048 or 4096, found: ' + numBits);\n }\n\n if (!_util2.default.getWebCryptoAll() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('generateKey', options);\n }\n\n return (0, _key.generate)(options).then(function (key) {\n return {\n\n key: key,\n privateKeyArmored: key.armor(),\n publicKeyArmored: key.toPublic().armor()\n\n };\n }).catch(onError.bind(null, 'Error generating keypair'));\n}\n\n/**\n * Reformats signature packets for a key and rewraps key object.\n * @param {Key} privateKey private key to reformat\n * @param {Array<Object>} userIds array of user IDs e.g. [{ name:'Phil Zimmermann', email:'phil@openpgp.org' }]\n * @param {String} passphrase (optional) The passphrase used to encrypt the resulting private key\n * @param {Number} keyExpirationTime (optional) The number of seconds after the key creation time that the key expires\n * @returns {Promise<Object>} The generated key object in the form:\n * { key:Key, privateKeyArmored:String, publicKeyArmored:String }\n * @async\n * @static\n */\nfunction reformatKey(_ref3) {\n var privateKey = _ref3.privateKey,\n _ref3$userIds = _ref3.userIds,\n userIds = _ref3$userIds === undefined ? [] : _ref3$userIds,\n _ref3$passphrase = _ref3.passphrase,\n passphrase = _ref3$passphrase === undefined ? \"\" : _ref3$passphrase,\n _ref3$keyExpirationTi = _ref3.keyExpirationTime,\n keyExpirationTime = _ref3$keyExpirationTi === undefined ? 0 : _ref3$keyExpirationTi,\n date = _ref3.date;\n\n userIds = toArray(userIds);\n var options = { privateKey: privateKey, userIds: userIds, passphrase: passphrase, keyExpirationTime: keyExpirationTime, date: date };\n if (asyncProxy) {\n return asyncProxy.delegate('reformatKey', options);\n }\n\n return (0, _key.reformat)(options).then(function (key) {\n return {\n\n key: key,\n privateKeyArmored: key.armor(),\n publicKeyArmored: key.toPublic().armor()\n\n };\n }).catch(onError.bind(null, 'Error reformatting keypair'));\n}\n\n/**\n * Unlock a private key with your passphrase.\n * @param {Key} privateKey the private key that is to be decrypted\n * @param {String|Array<String>} passphrase the user's passphrase(s) chosen during key generation\n * @returns {Promise<Object>} the unlocked key object in the form: { key:Key }\n * @async\n */\nfunction decryptKey(_ref4) {\n var privateKey = _ref4.privateKey,\n passphrase = _ref4.passphrase;\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('decryptKey', { privateKey: privateKey, passphrase: passphrase });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return privateKey.decrypt(passphrase);\n\n case 2:\n return _context.abrupt('return', {\n key: privateKey\n });\n\n case 3:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }))).catch(onError.bind(null, 'Error decrypting private key'));\n}\n\n/**\n * Lock a private key with your passphrase.\n * @param {Key} privateKey the private key that is to be decrypted\n * @param {String|Array<String>} passphrase the user's passphrase(s) chosen during key generation\n * @returns {Promise<Object>} the locked key object in the form: { key:Key }\n * @async\n */\nfunction encryptKey(_ref6) {\n var privateKey = _ref6.privateKey,\n passphrase = _ref6.passphrase;\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('encryptKey', { privateKey: privateKey, passphrase: passphrase });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return privateKey.encrypt(passphrase);\n\n case 2:\n return _context2.abrupt('return', {\n key: privateKey\n });\n\n case 3:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }))).catch(onError.bind(null, 'Error decrypting private key'));\n}\n\n///////////////////////////////////////////\n// //\n// Message encryption and decryption //\n// //\n///////////////////////////////////////////\n\n\n/**\n * Encrypts message text/data with public keys, passwords or both at once. At least either public keys or passwords\n * must be specified. If private keys are specified, those will be used to sign the message.\n * @param {String|Uint8Array} data text/data to be encrypted as JavaScript binary string or Uint8Array\n * @param {utf8|binary|text|mime} dataType (optional) data packet type\n * @param {Key|Array<Key>} publicKeys (optional) array of keys or single key, used to encrypt the message\n * @param {Key|Array<Key>} privateKeys (optional) private keys for signing. If omitted message will not be signed\n * @param {String|Array<String>} passwords (optional) array of passwords or a single password to encrypt the message\n * @param {Object} sessionKey (optional) session key in the form: { data:Uint8Array, algorithm:String }\n * @param {String} filename (optional) a filename for the literal data packet\n * @param {module:enums.compression} compression (optional) which compression algorithm to compress the message with, defaults to what is specified in config\n * @param {Boolean} armor (optional) if the return values should be ascii armored or the message/signature objects\n * @param {Boolean} detached (optional) if the signature should be detached (if true, signature will be added to returned object)\n * @param {Signature} signature (optional) a detached signature to add to the encrypted message\n * @param {Boolean} returnSessionKey (optional) if the unencrypted session key should be added to returned object\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the creation date of the message and the message signature\n * @param {Object} fromUserId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @param {Object} toUserId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' }\n * @returns {Promise<Object>} encrypted (and optionally signed message) in the form:\n * {data: ASCII armored message if 'armor' is true,\n * message: full Message object if 'armor' is false, signature: detached signature if 'detached' is true}\n * @async\n * @static\n */\nfunction encrypt(_ref8) {\n var data = _ref8.data,\n dataType = _ref8.dataType,\n publicKeys = _ref8.publicKeys,\n privateKeys = _ref8.privateKeys,\n passwords = _ref8.passwords,\n sessionKey = _ref8.sessionKey,\n filename = _ref8.filename,\n _ref8$compression = _ref8.compression,\n compression = _ref8$compression === undefined ? _config2.default.compression : _ref8$compression,\n _ref8$armor = _ref8.armor,\n armor = _ref8$armor === undefined ? true : _ref8$armor,\n _ref8$detached = _ref8.detached,\n detached = _ref8$detached === undefined ? false : _ref8$detached,\n _ref8$signature = _ref8.signature,\n signature = _ref8$signature === undefined ? null : _ref8$signature,\n _ref8$returnSessionKe = _ref8.returnSessionKey,\n returnSessionKey = _ref8$returnSessionKe === undefined ? false : _ref8$returnSessionKe,\n _ref8$wildcard = _ref8.wildcard,\n wildcard = _ref8$wildcard === undefined ? false : _ref8$wildcard,\n _ref8$date = _ref8.date,\n date = _ref8$date === undefined ? new Date() : _ref8$date,\n _ref8$fromUserId = _ref8.fromUserId,\n fromUserId = _ref8$fromUserId === undefined ? {} : _ref8$fromUserId,\n _ref8$toUserId = _ref8.toUserId,\n toUserId = _ref8$toUserId === undefined ? {} : _ref8$toUserId;\n\n checkData(data);publicKeys = toArray(publicKeys);privateKeys = toArray(privateKeys);passwords = toArray(passwords);\n\n if (!nativeAEAD() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('encrypt', { data: data, dataType: dataType, publicKeys: publicKeys, privateKeys: privateKeys, passwords: passwords, sessionKey: sessionKey, filename: filename, compression: compression, armor: armor, detached: detached, signature: signature, returnSessionKey: returnSessionKey, wildcard: wildcard, date: date, fromUserId: fromUserId, toUserId: toUserId });\n }\n var result = {};\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {\n var message, detachedSignature;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n message = createMessage(data, filename, date, dataType);\n\n if (!privateKeys) {\n privateKeys = [];\n }\n\n if (!(privateKeys.length || signature)) {\n _context3.next = 13;\n break;\n }\n\n if (!detached) {\n _context3.next = 10;\n break;\n }\n\n _context3.next = 6;\n return message.signDetached(privateKeys, signature, date, fromUserId);\n\n case 6:\n detachedSignature = _context3.sent;\n\n result.signature = armor ? detachedSignature.armor() : detachedSignature;\n _context3.next = 13;\n break;\n\n case 10:\n _context3.next = 12;\n return message.sign(privateKeys, signature, date, fromUserId);\n\n case 12:\n message = _context3.sent;\n\n case 13:\n message = message.compress(compression);\n return _context3.abrupt('return', message.encrypt(publicKeys, passwords, sessionKey, wildcard, date, toUserId));\n\n case 15:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }))).then(function (encrypted) {\n if (armor) {\n result.data = encrypted.message.armor();\n } else {\n result.message = encrypted.message;\n }\n if (returnSessionKey) {\n result.sessionKey = encrypted.sessionKey;\n }\n return result;\n }).catch(onError.bind(null, 'Error encrypting message'));\n}\n\n/**\n * Decrypts a message with the user's private key, a session key or a password. Either a private key,\n * a session key or a password must be specified.\n * @param {Message} message the message object with the encrypted data\n * @param {Key|Array<Key>} privateKeys (optional) private keys with decrypted secret key data or session key\n * @param {String|Array<String>} passwords (optional) passwords to decrypt the message\n * @param {Object|Array<Object>} sessionKeys (optional) session keys in the form: { data:Uint8Array, algorithm:String }\n * @param {Key|Array<Key>} publicKeys (optional) array of public keys or single key, to verify signatures\n * @param {String} format (optional) return data format either as 'utf8' or 'binary'\n * @param {Signature} signature (optional) detached signature for verification\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Promise<Object>} decrypted and verified message in the form:\n * { data:Uint8Array|String, filename:String, signatures:[{ keyid:String, valid:Boolean }] }\n * @async\n * @static\n */\nfunction decrypt(_ref10) {\n var message = _ref10.message,\n privateKeys = _ref10.privateKeys,\n passwords = _ref10.passwords,\n sessionKeys = _ref10.sessionKeys,\n publicKeys = _ref10.publicKeys,\n _ref10$format = _ref10.format,\n format = _ref10$format === undefined ? 'utf8' : _ref10$format,\n _ref10$signature = _ref10.signature,\n signature = _ref10$signature === undefined ? null : _ref10$signature,\n _ref10$date = _ref10.date,\n date = _ref10$date === undefined ? new Date() : _ref10$date;\n\n checkMessage(message);publicKeys = toArray(publicKeys);privateKeys = toArray(privateKeys);passwords = toArray(passwords);sessionKeys = toArray(sessionKeys);\n\n if (!nativeAEAD() && asyncProxy) {\n // use web worker if web crypto apis are not supported\n return asyncProxy.delegate('decrypt', { message: message, privateKeys: privateKeys, passwords: passwords, sessionKeys: sessionKeys, publicKeys: publicKeys, format: format, signature: signature, date: date });\n }\n\n return message.decrypt(privateKeys, passwords, sessionKeys).then(function () {\n var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(message) {\n var result;\n return _regenerator2.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n result = parseMessage(message, format);\n\n\n if (!publicKeys) {\n publicKeys = [];\n }\n\n if (!signature) {\n _context4.next = 8;\n break;\n }\n\n _context4.next = 5;\n return message.verifyDetached(signature, publicKeys, date);\n\n case 5:\n _context4.t0 = _context4.sent;\n _context4.next = 11;\n break;\n\n case 8:\n _context4.next = 10;\n return message.verify(publicKeys, date);\n\n case 10:\n _context4.t0 = _context4.sent;\n\n case 11:\n result.signatures = _context4.t0;\n return _context4.abrupt('return', result);\n\n case 13:\n case 'end':\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x2) {\n return _ref11.apply(this, arguments);\n };\n }()).catch(onError.bind(null, 'Error decrypting message'));\n}\n\n//////////////////////////////////////////\n// //\n// Message signing and verification //\n// //\n//////////////////////////////////////////\n\n\n/**\n * Signs a cleartext message.\n * @param {String | Uint8Array} data cleartext input to be signed\n * @param {utf8|binary|text|mime} dataType (optional) data packet type\n * @param {Key|Array<Key>} privateKeys array of keys or single key with decrypted secret key data to sign cleartext\n * @param {Boolean} armor (optional) if the return value should be ascii armored or the message object\n * @param {Boolean} detached (optional) if the return value should contain a detached signature\n * @param {Date} date (optional) override the creation date signature\n * @param {Object} fromUserId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' }\n * @returns {Promise<Object>} signed cleartext in the form:\n * {data: ASCII armored message if 'armor' is true,\n * message: full Message object if 'armor' is false, signature: detached signature if 'detached' is true}\n * @async\n * @static\n */\nfunction sign(_ref12) {\n var data = _ref12.data,\n dataType = _ref12.dataType,\n privateKeys = _ref12.privateKeys,\n _ref12$armor = _ref12.armor,\n armor = _ref12$armor === undefined ? true : _ref12$armor,\n _ref12$detached = _ref12.detached,\n detached = _ref12$detached === undefined ? false : _ref12$detached,\n _ref12$date = _ref12.date,\n date = _ref12$date === undefined ? new Date() : _ref12$date,\n _ref12$fromUserId = _ref12.fromUserId,\n fromUserId = _ref12$fromUserId === undefined ? {} : _ref12$fromUserId;\n\n checkData(data);\n privateKeys = toArray(privateKeys);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('sign', {\n data: data, dataType: dataType, privateKeys: privateKeys, armor: armor, detached: detached, date: date, fromUserId: fromUserId\n });\n }\n\n var result = {};\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {\n var message, signature;\n return _regenerator2.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n message = _util2.default.isString(data) ? new _cleartext.CleartextMessage(data) : messageLib.fromBinary(data, dataType);\n\n if (!detached) {\n _context5.next = 8;\n break;\n }\n\n _context5.next = 4;\n return message.signDetached(privateKeys, undefined, date, fromUserId);\n\n case 4:\n signature = _context5.sent;\n\n result.signature = armor ? signature.armor() : signature;\n _context5.next = 12;\n break;\n\n case 8:\n _context5.next = 10;\n return message.sign(privateKeys, undefined, date, fromUserId);\n\n case 10:\n message = _context5.sent;\n\n if (armor) {\n result.data = message.armor();\n } else {\n result.message = message;\n }\n\n case 12:\n return _context5.abrupt('return', result);\n\n case 13:\n case 'end':\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }))).catch(onError.bind(null, 'Error signing cleartext message'));\n}\n\n/**\n * Verifies signatures of cleartext signed message\n * @param {Key|Array<Key>} publicKeys array of publicKeys or single key, to verify signatures\n * @param {CleartextMessage} message cleartext message object with signatures\n * @param {Signature} signature (optional) detached signature for verification\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Promise<Object>} cleartext with status of verified signatures in the form of:\n * { data:String, signatures: [{ keyid:String, valid:Boolean }] }\n * @async\n * @static\n */\nfunction verify(_ref14) {\n var message = _ref14.message,\n publicKeys = _ref14.publicKeys,\n _ref14$signature = _ref14.signature,\n signature = _ref14$signature === undefined ? null : _ref14$signature,\n _ref14$date = _ref14.date,\n date = _ref14$date === undefined ? new Date() : _ref14$date;\n\n checkCleartextOrMessage(message);\n publicKeys = toArray(publicKeys);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('verify', { message: message, publicKeys: publicKeys, signature: signature, date: date });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6() {\n var result;\n return _regenerator2.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n result = {};\n\n result.data = message instanceof _cleartext.CleartextMessage ? message.getText() : message.getLiteralData();\n\n if (!signature) {\n _context6.next = 8;\n break;\n }\n\n _context6.next = 5;\n return message.verifyDetached(signature, publicKeys, date);\n\n case 5:\n _context6.t0 = _context6.sent;\n _context6.next = 11;\n break;\n\n case 8:\n _context6.next = 10;\n return message.verify(publicKeys, date);\n\n case 10:\n _context6.t0 = _context6.sent;\n\n case 11:\n result.signatures = _context6.t0;\n return _context6.abrupt('return', result);\n\n case 13:\n case 'end':\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }))).catch(onError.bind(null, 'Error verifying cleartext signed message'));\n}\n\n///////////////////////////////////////////////\n// //\n// Session key encryption and decryption //\n// //\n///////////////////////////////////////////////\n\n\n/**\n * Encrypt a symmetric session key with public keys, passwords, or both at once. At least either public keys\n * or passwords must be specified.\n * @param {Uint8Array} data the session key to be encrypted e.g. 16 random bytes (for aes128)\n * @param {String} algorithm algorithm of the symmetric session key e.g. 'aes128' or 'aes256'\n * @param {String} aeadAlgorithm (optional) aead algorithm, e.g. 'eax' or 'ocb'\n * @param {Key|Array<Key>} publicKeys (optional) array of public keys or single key, used to encrypt the key\n * @param {String|Array<String>} passwords (optional) passwords for the message\n * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs\n * @param {Date} date (optional) override the date\n * @param {Object} toUserId (optional) user ID to encrypt for, e.g. { name:'Phil Zimmermann', email:'phil@openpgp.org' }\n * @returns {Promise<Message>} the encrypted session key packets contained in a message object\n * @async\n * @static\n */\nfunction encryptSessionKey(_ref16) {\n var data = _ref16.data,\n algorithm = _ref16.algorithm,\n aeadAlgorithm = _ref16.aeadAlgorithm,\n publicKeys = _ref16.publicKeys,\n passwords = _ref16.passwords,\n _ref16$wildcard = _ref16.wildcard,\n wildcard = _ref16$wildcard === undefined ? false : _ref16$wildcard,\n _ref16$date = _ref16.date,\n date = _ref16$date === undefined ? new Date() : _ref16$date,\n _ref16$toUserId = _ref16.toUserId,\n toUserId = _ref16$toUserId === undefined ? {} : _ref16$toUserId;\n\n checkBinary(data);checkString(algorithm, 'algorithm');publicKeys = toArray(publicKeys);passwords = toArray(passwords);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('encryptSessionKey', { data: data, algorithm: algorithm, aeadAlgorithm: aeadAlgorithm, publicKeys: publicKeys, passwords: passwords, wildcard: wildcard, date: date, toUserId: toUserId });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7() {\n return _regenerator2.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _context7.next = 2;\n return messageLib.encryptSessionKey(data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard, date, toUserId);\n\n case 2:\n _context7.t0 = _context7.sent;\n return _context7.abrupt('return', {\n message: _context7.t0\n });\n\n case 4:\n case 'end':\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }))).catch(onError.bind(null, 'Error encrypting session key'));\n}\n\n/**\n * Decrypt symmetric session keys with a private key or password. Either a private key or\n * a password must be specified.\n * @param {Message} message a message object containing the encrypted session key packets\n * @param {Key|Array<Key>} privateKeys (optional) private keys with decrypted secret key data\n * @param {String|Array<String>} passwords (optional) passwords to decrypt the session key\n * @returns {Promise<Object|undefined>} Array of decrypted session key, algorithm pairs in form:\n * { data:Uint8Array, algorithm:String }\n * or 'undefined' if no key packets found\n * @async\n * @static\n */\nfunction decryptSessionKeys(_ref18) {\n var message = _ref18.message,\n privateKeys = _ref18.privateKeys,\n passwords = _ref18.passwords;\n\n checkMessage(message);privateKeys = toArray(privateKeys);passwords = toArray(passwords);\n\n if (asyncProxy) {\n // use web worker if available\n return asyncProxy.delegate('decryptSessionKeys', { message: message, privateKeys: privateKeys, passwords: passwords });\n }\n\n return _promise2.default.resolve().then((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8() {\n return _regenerator2.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n return _context8.abrupt('return', message.decryptSessionKeys(privateKeys, passwords));\n\n case 1:\n case 'end':\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }))).catch(onError.bind(null, 'Error decrypting session keys'));\n}\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\n/**\n * Input validation\n */\nfunction checkString(data, name) {\n if (!_util2.default.isString(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type String');\n }\n}\nfunction checkBinary(data, name) {\n if (!_util2.default.isUint8Array(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type Uint8Array');\n }\n}\nfunction checkData(data, name) {\n if (!_util2.default.isUint8Array(data) && !_util2.default.isString(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type String or Uint8Array');\n }\n}\nfunction checkMessage(message) {\n if (!(message instanceof messageLib.Message)) {\n throw new Error('Parameter [message] needs to be of type Message');\n }\n}\nfunction checkCleartextOrMessage(message) {\n if (!(message instanceof _cleartext.CleartextMessage) && !(message instanceof messageLib.Message)) {\n throw new Error('Parameter [message] needs to be of type Message or CleartextMessage');\n }\n}\n\n/**\n * Normalize parameter to an array if it is not undefined.\n * @param {Object} param the parameter to be normalized\n * @returns {Array<Object>|undefined} the resulting array or undefined\n */\nfunction toArray(param) {\n if (param && !_util2.default.isArray(param)) {\n param = [param];\n }\n return param;\n}\n\n/**\n * Creates a message obejct either from a Uint8Array or a string.\n * @param {String|Uint8Array} data the payload for the message\n * @param {String} filename the literal data packet's filename\n * @param {Date} date the creation date of the package\n * @param {utf8|binary|text|mime} type (optional) data packet type\n * @returns {Message} a message object\n */\nfunction createMessage(data, filename) {\n var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date();\n var type = arguments[3];\n\n var msg = void 0;\n if (_util2.default.isUint8Array(data)) {\n msg = messageLib.fromBinary(data, filename, date, type);\n } else if (_util2.default.isString(data)) {\n msg = messageLib.fromText(data, filename, date, type);\n } else {\n throw new Error('Data must be of type String or Uint8Array');\n }\n return msg;\n}\n\n/**\n * Parse the message given a certain format.\n * @param {Message} message the message object to be parse\n * @param {String} format the output format e.g. 'utf8' or 'binary'\n * @returns {Object} the parse data in the respective format\n */\nfunction parseMessage(message, format) {\n if (format === 'binary') {\n return {\n data: message.getLiteralData(),\n filename: message.getFilename()\n };\n } else if (format === 'utf8') {\n return {\n data: message.getText(),\n filename: message.getFilename()\n };\n }\n throw new Error('Invalid format');\n}\n\n/**\n * Global error handler that logs the stack trace and rethrows a high lvl error message.\n * @param {String} message A human readable high level error Message\n * @param {Error} error The internal error that caused the failure\n */\nfunction onError(message, error) {\n // log the stack trace\n _util2.default.print_debug_error(error);\n\n // update error message\n try {\n error.message = message + ': ' + error.message;\n } catch (e) {}\n\n throw error;\n}\n\n/**\n * Check for native AEAD support and configuration by the user. Only\n * browsers that implement the current WebCrypto specification support\n * native GCM. Native EAX is built on CTR and CBC, which current\n * browsers support. OCB and CFB are not natively supported.\n * @returns {Boolean} If authenticated encryption should be used\n */\nfunction nativeAEAD() {\n return _config2.default.aead_protect && ((_config2.default.aead_protect_version !== 4 || _config2.default.aead_mode === _enums2.default.aead.experimental_gcm) && _util2.default.getWebCrypto() || _config2.default.aead_protect_version === 4 && _config2.default.aead_mode === _enums2.default.aead.eax && _util2.default.getWebCrypto());\n}\n\n},{\"./cleartext\":322,\"./config/config\":324,\"./enums\":359,\"./key\":362,\"./message\":366,\"./polyfills\":390,\"./util\":398,\"./worker/async_proxy\":399,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],368:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Trust = exports.Signature = exports.SecretSubkey = exports.Userid = exports.SecretKey = exports.OnePassSignature = exports.UserAttribute = exports.PublicSubkey = exports.Marker = exports.SymmetricallyEncrypted = exports.PublicKey = exports.Literal = exports.SymEncryptedSessionKey = exports.PublicKeyEncryptedSessionKey = exports.SymEncryptedAEADProtected = exports.SymEncryptedIntegrityProtected = exports.Compressed = undefined;\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _compressed = _dereq_('./compressed.js');\n\nObject.defineProperty(exports, 'Compressed', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_compressed).default;\n }\n});\n\nvar _sym_encrypted_integrity_protected = _dereq_('./sym_encrypted_integrity_protected.js');\n\nObject.defineProperty(exports, 'SymEncryptedIntegrityProtected', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sym_encrypted_integrity_protected).default;\n }\n});\n\nvar _sym_encrypted_aead_protected = _dereq_('./sym_encrypted_aead_protected.js');\n\nObject.defineProperty(exports, 'SymEncryptedAEADProtected', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sym_encrypted_aead_protected).default;\n }\n});\n\nvar _public_key_encrypted_session_key = _dereq_('./public_key_encrypted_session_key.js');\n\nObject.defineProperty(exports, 'PublicKeyEncryptedSessionKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_public_key_encrypted_session_key).default;\n }\n});\n\nvar _sym_encrypted_session_key = _dereq_('./sym_encrypted_session_key.js');\n\nObject.defineProperty(exports, 'SymEncryptedSessionKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sym_encrypted_session_key).default;\n }\n});\n\nvar _literal = _dereq_('./literal.js');\n\nObject.defineProperty(exports, 'Literal', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_literal).default;\n }\n});\n\nvar _public_key = _dereq_('./public_key.js');\n\nObject.defineProperty(exports, 'PublicKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_public_key).default;\n }\n});\n\nvar _symmetrically_encrypted = _dereq_('./symmetrically_encrypted.js');\n\nObject.defineProperty(exports, 'SymmetricallyEncrypted', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_symmetrically_encrypted).default;\n }\n});\n\nvar _marker = _dereq_('./marker.js');\n\nObject.defineProperty(exports, 'Marker', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_marker).default;\n }\n});\n\nvar _public_subkey = _dereq_('./public_subkey.js');\n\nObject.defineProperty(exports, 'PublicSubkey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_public_subkey).default;\n }\n});\n\nvar _user_attribute = _dereq_('./user_attribute.js');\n\nObject.defineProperty(exports, 'UserAttribute', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_user_attribute).default;\n }\n});\n\nvar _one_pass_signature = _dereq_('./one_pass_signature.js');\n\nObject.defineProperty(exports, 'OnePassSignature', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_one_pass_signature).default;\n }\n});\n\nvar _secret_key = _dereq_('./secret_key.js');\n\nObject.defineProperty(exports, 'SecretKey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_secret_key).default;\n }\n});\n\nvar _userid = _dereq_('./userid.js');\n\nObject.defineProperty(exports, 'Userid', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_userid).default;\n }\n});\n\nvar _secret_subkey = _dereq_('./secret_subkey.js');\n\nObject.defineProperty(exports, 'SecretSubkey', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_secret_subkey).default;\n }\n});\n\nvar _signature = _dereq_('./signature.js');\n\nObject.defineProperty(exports, 'Signature', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_signature).default;\n }\n});\n\nvar _trust = _dereq_('./trust.js');\n\nObject.defineProperty(exports, 'Trust', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_trust).default;\n }\n});\nexports.newPacketFromTag = newPacketFromTag;\nexports.fromStructuredClone = fromStructuredClone;\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _all_packets = _dereq_('./all_packets.js');\n\nvar packets = _interopRequireWildcard(_all_packets);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Allocate a new packet\n * @function newPacketFromTag\n * @memberof module:packet\n * @param {String} tag property name from {@link module:enums.packet}\n * @returns {Object} new packet object with type based on tag\n */\nfunction newPacketFromTag(tag) {\n return new packets[packetClassFromTagName(tag)]();\n}\n\n/**\n * Allocate a new packet from structured packet clone\n * @see {@link https://w3c.github.io/html/infrastructure.html#safe-passing-of-structured-data}\n * @function fromStructuredClone\n * @memberof module:packet\n * @param {Object} packetClone packet clone\n * @returns {Object} new packet object with data from packet clone\n */\nfunction fromStructuredClone(packetClone) {\n var tagName = _enums2.default.read(_enums2.default.packet, packetClone.tag);\n var packet = newPacketFromTag(tagName);\n (0, _assign2.default)(packet, packetClone);\n if (packet.postCloneTypeFix) {\n packet.postCloneTypeFix();\n }\n return packet;\n}\n\n/**\n * Convert tag name to class name\n * @param {String} tag property name from {@link module:enums.packet}\n * @returns {String}\n * @private\n */\nfunction packetClassFromTagName(tag) {\n return tag.substr(0, 1).toUpperCase() + tag.substr(1);\n}\n\n},{\"../enums.js\":359,\"./all_packets.js\":368,\"./compressed.js\":370,\"./literal.js\":372,\"./marker.js\":373,\"./one_pass_signature.js\":374,\"./public_key.js\":377,\"./public_key_encrypted_session_key.js\":378,\"./public_subkey.js\":379,\"./secret_key.js\":380,\"./secret_subkey.js\":381,\"./signature.js\":382,\"./sym_encrypted_aead_protected.js\":383,\"./sym_encrypted_integrity_protected.js\":384,\"./sym_encrypted_session_key.js\":385,\"./symmetrically_encrypted.js\":386,\"./trust.js\":387,\"./user_attribute.js\":388,\"./userid.js\":389,\"babel-runtime/core-js/object/assign\":24}],369:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.clonePackets = clonePackets;\nexports.parseClonedPackets = parseClonedPackets;\n\nvar _key = _dereq_('../key');\n\nvar _message = _dereq_('../message');\n\nvar _cleartext = _dereq_('../cleartext');\n\nvar _signature = _dereq_('../signature');\n\nvar _packetlist = _dereq_('./packetlist');\n\nvar _packetlist2 = _interopRequireDefault(_packetlist);\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//////////////////////////////\n// //\n// List --> Clone //\n// //\n//////////////////////////////\n\n\n/**\n * Create a packetlist from the correspoding object types.\n * @param {Object} options the object passed to and from the web worker\n * @returns {Object} a mutated version of the options optject\n */\nfunction clonePackets(options) {\n if (options.publicKeys) {\n options.publicKeys = options.publicKeys.map(function (key) {\n return key.toPacketlist();\n });\n }\n if (options.privateKeys) {\n options.privateKeys = options.privateKeys.map(function (key) {\n return key.toPacketlist();\n });\n }\n if (options.privateKey) {\n options.privateKey = options.privateKey.toPacketlist();\n }\n if (options.key) {\n options.key = options.key.toPacketlist();\n }\n if (options.message) {\n //could be either a Message or CleartextMessage object\n if (options.message instanceof _message.Message) {\n options.message = options.message.packets;\n } else if (options.message instanceof _cleartext.CleartextMessage) {\n options.message = { text: options.message.text, signature: options.message.signature.packets };\n }\n }\n if (options.signature && options.signature instanceof _signature.Signature) {\n options.signature = options.signature.packets;\n }\n if (options.signatures) {\n options.signatures = options.signatures.map(function (sig) {\n return verificationObjectToClone(sig);\n });\n }\n return options;\n} // OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements packet list cloning required to\n * pass certain object types between the web worker and main thread using\n * the structured cloning algorithm.\n * @module packet/clone\n */\n\nfunction verificationObjectToClone(verObject) {\n verObject.signature = verObject.signature.packets;\n return verObject;\n}\n\n//////////////////////////////\n// //\n// Clone --> List //\n// //\n//////////////////////////////\n\n\n/**\n * Creates an object with the correct prototype from a corresponding packetlist.\n * @param {Object} options the object passed to and from the web worker\n * @param {String} method the public api function name to be delegated to the worker\n * @returns {Object} a mutated version of the options optject\n */\nfunction parseClonedPackets(options) {\n if (options.publicKeys) {\n options.publicKeys = options.publicKeys.map(packetlistCloneToKey);\n }\n if (options.privateKeys) {\n options.privateKeys = options.privateKeys.map(packetlistCloneToKey);\n }\n if (options.privateKey) {\n options.privateKey = packetlistCloneToKey(options.privateKey);\n }\n if (options.key) {\n options.key = packetlistCloneToKey(options.key);\n }\n if (options.message && options.message.signature) {\n options.message = packetlistCloneToCleartextMessage(options.message);\n } else if (options.message) {\n options.message = packetlistCloneToMessage(options.message);\n }\n if (options.signatures) {\n options.signatures = options.signatures.map(packetlistCloneToSignatures);\n }\n if (options.signature) {\n options.signature = packetlistCloneToSignature(options.signature);\n }\n return options;\n}\n\nfunction packetlistCloneToKey(clone) {\n var packetlist = _packetlist2.default.fromStructuredClone(clone);\n return new _key.Key(packetlist);\n}\n\nfunction packetlistCloneToMessage(clone) {\n var packetlist = _packetlist2.default.fromStructuredClone(clone);\n return new _message.Message(packetlist);\n}\n\nfunction packetlistCloneToCleartextMessage(clone) {\n var packetlist = _packetlist2.default.fromStructuredClone(clone.signature);\n return new _cleartext.CleartextMessage(clone.text, new _signature.Signature(packetlist));\n}\n\n//verification objects\nfunction packetlistCloneToSignatures(clone) {\n clone.keyid = _keyid2.default.fromClone(clone.keyid);\n clone.signature = new _signature.Signature(clone.signature);\n return clone;\n}\n\nfunction packetlistCloneToSignature(clone) {\n if (_util2.default.isString(clone)) {\n //signature is armored\n return clone;\n }\n var packetlist = _packetlist2.default.fromStructuredClone(clone);\n return new _signature.Signature(packetlist);\n}\n\n},{\"../cleartext\":322,\"../key\":362,\"../message\":366,\"../signature\":391,\"../type/keyid\":394,\"../util\":398,\"./packetlist\":376}],370:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _pako = _dereq_('pako');\n\nvar _pako2 = _interopRequireDefault(_pako);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _bzip2Build = _dereq_('../compression/bzip2.build.js');\n\nvar _bzip2Build2 = _interopRequireDefault(_bzip2Build);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Compressed Data Packet (Tag 8)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.6|RFC4880 5.6}:\n * The Compressed Data packet contains compressed data. Typically,\n * this packet is found as the contents of an encrypted packet, or following\n * a Signature or One-Pass Signature packet, and contains a literal data packet.\n * @memberof module:packet\n * @constructor\n */\nfunction Compressed() {\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.compressed;\n /**\n * List of packets\n * @type {module:packet.List}\n */\n this.packets = null;\n /**\n * Compression algorithm\n * @type {compression}\n */\n this.algorithm = 'zip';\n\n /**\n * Compressed packet data\n * @type {String}\n */\n this.compressed = null;\n}\n\n/**\n * Parsing function for the packet.\n * @param {String} bytes Payload of a tag 8 packet\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires pako\n * @requires config\n * @requires enums\n * @requires util\n * @requires compression/bzip2\n */\n\nCompressed.prototype.read = function (bytes) {\n // One octet that gives the algorithm used to compress the packet.\n this.algorithm = _enums2.default.read(_enums2.default.compression, bytes[0]);\n\n // Compressed data, which makes up the remainder of the packet.\n this.compressed = bytes.subarray(1, bytes.length);\n\n this.decompress();\n};\n\n/**\n * Return the compressed packet.\n * @returns {String} binary compressed packet\n */\nCompressed.prototype.write = function () {\n if (this.compressed === null) {\n this.compress();\n }\n\n return _util2.default.concatUint8Array([new Uint8Array([_enums2.default.write(_enums2.default.compression, this.algorithm)]), this.compressed]);\n};\n\n/**\n * Decompression method for decompressing the compressed data\n * read by read_packet\n */\nCompressed.prototype.decompress = function () {\n\n if (!decompress_fns[this.algorithm]) {\n throw new Error(\"Compression algorithm unknown :\" + this.algorithm);\n }\n\n this.packets.read(decompress_fns[this.algorithm](this.compressed));\n};\n\n/**\n * Compress the packet data (member decompressedData)\n */\nCompressed.prototype.compress = function () {\n\n if (!compress_fns[this.algorithm]) {\n throw new Error(\"Compression algorithm unknown :\" + this.algorithm);\n }\n\n this.compressed = compress_fns[this.algorithm](this.packets.write());\n};\n\nexports.default = Compressed;\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nvar nodeZlib = _util2.default.getNodeZlib();\n\nfunction node_zlib(func) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return function (data) {\n return func(data, options);\n };\n}\n\nfunction pako_zlib(constructor) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return function (data) {\n var obj = new constructor(options);\n obj.push(data, true);\n return obj.result;\n };\n}\n\nvar compress_fns = void 0;\nvar decompress_fns = void 0;\nif (nodeZlib) {\n // Use Node native zlib for DEFLATE compression/decompression\n compress_fns = {\n // eslint-disable-next-line no-sync\n zip: node_zlib(nodeZlib.deflateRawSync, { level: _config2.default.deflate_level }),\n // eslint-disable-next-line no-sync\n zlib: node_zlib(nodeZlib.deflateSync, { level: _config2.default.deflate_level }),\n bzip2: _bzip2Build2.default.compressFile\n };\n\n decompress_fns = {\n // eslint-disable-next-line no-sync\n zip: node_zlib(nodeZlib.inflateRawSync),\n // eslint-disable-next-line no-sync\n zlib: node_zlib(nodeZlib.inflateSync),\n bzip2: _bzip2Build2.default.decompressFile\n };\n} else {\n // Use JS fallbacks\n compress_fns = {\n zip: pako_zlib(_pako2.default.Deflate, { raw: true, level: _config2.default.deflate_level }),\n zlib: pako_zlib(_pako2.default.Deflate, { level: _config2.default.deflate_level }),\n bzip2: _bzip2Build2.default.compressFile\n };\n\n decompress_fns = {\n zip: pako_zlib(_pako2.default.Inflate, { raw: true }),\n zlib: pako_zlib(_pako2.default.Inflate),\n bzip2: _bzip2Build2.default.decompressFile\n };\n}\n\n},{\"../compression/bzip2.build.js\":323,\"../config\":325,\"../enums\":359,\"../util\":398,\"pako\":301}],371:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _all_packets = _dereq_('./all_packets');\n\nvar packets = _interopRequireWildcard(_all_packets);\n\nvar _clone = _dereq_('./clone');\n\nvar clone = _interopRequireWildcard(_clone);\n\nvar _packetlist = _dereq_('./packetlist');\n\nvar _packetlist2 = _interopRequireDefault(_packetlist);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mod = {\n List: _packetlist2.default,\n clone: clone\n}; /**\n * @fileoverview OpenPGP packet types\n * @see module:packet/all_packets\n * @see module:packet/clone\n * @see module:packet.List\n * @module packet\n */\n\n(0, _assign2.default)(mod, packets);\n\nexports.default = mod;\n\n},{\"./all_packets\":368,\"./clone\":369,\"./packetlist\":376,\"babel-runtime/core-js/object/assign\":24}],372:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Literal Data Packet (Tag 11)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.9|RFC4880 5.9}:\n * A Literal Data packet contains the body of a message; data that is not to be\n * further interpreted.\n * @param {Date} date the creation date of the literal package\n * @memberof module:packet\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires enums\n * @requires util\n */\n\nfunction Literal() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n this.tag = _enums2.default.packet.literal;\n this.format = 'utf8'; // default format for literal data packets\n this.date = _util2.default.normalizeDate(date);\n this.text = null; // textual data representation\n this.data = null; // literal data representation\n this.filename = 'msg.txt';\n}\n\n/**\n * Set the packet data to a javascript native string, end of line\n * will be normalized to \\r\\n and by default text is converted to UTF8\n * @param {String} text Any native javascript string\n * @param {utf8|binary|text|mime} format (optional) The format of the string of bytes\n */\nLiteral.prototype.setText = function (text) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utf8';\n\n this.format = format;\n this.text = text;\n this.data = null;\n};\n\n/**\n * Returns literal data packets as native JavaScript string\n * with normalized end of line to \\n\n * @returns {String} literal data as text\n */\nLiteral.prototype.getText = function () {\n if (this.text !== null) {\n return this.text;\n }\n // decode UTF8\n var text = _util2.default.decode_utf8(_util2.default.Uint8Array_to_str(this.data));\n // normalize EOL to \\n\n this.text = _util2.default.nativeEOL(text);\n return this.text;\n};\n\n/**\n * Set the packet data to value represented by the provided string of bytes.\n * @param {Uint8Array} bytes The string of bytes\n * @param {utf8|binary|text|mime} format The format of the string of bytes\n */\nLiteral.prototype.setBytes = function (bytes, format) {\n this.format = format;\n this.data = bytes;\n this.text = null;\n};\n\n/**\n * Get the byte sequence representing the literal packet data\n * @returns {Uint8Array} A sequence of bytes\n */\nLiteral.prototype.getBytes = function () {\n var textMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.data !== null) {\n return this.data;\n }\n\n if (textMode) {\n // normalize EOL to \\r\\n and UTF-8 encode\n this.data = _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(_util2.default.canonicalizeEOL(this.text)));\n } else {\n this.data = _util2.default.str_to_Uint8Array(this.text);\n }\n return this.data;\n};\n\n/**\n * Sets the filename of the literal packet data\n * @param {String} filename Any native javascript string\n */\nLiteral.prototype.setFilename = function (filename) {\n this.filename = filename;\n};\n\n/**\n * Get the filename of the literal packet data\n * @returns {String} filename\n */\nLiteral.prototype.getFilename = function () {\n return this.filename;\n};\n\n/**\n * Parsing function for a literal data packet (tag 11).\n *\n * @param {Uint8Array} input Payload of a tag 11 packet\n * @returns {module:packet.Literal} object representation\n */\nLiteral.prototype.read = function (bytes) {\n // - A one-octet field that describes how the data is formatted.\n var format = _enums2.default.read(_enums2.default.literal, bytes[0]);\n\n var filename_len = bytes[1];\n this.filename = _util2.default.decode_utf8(_util2.default.Uint8Array_to_str(bytes.subarray(2, 2 + filename_len)));\n\n this.date = _util2.default.readDate(bytes.subarray(2 + filename_len, 2 + filename_len + 4));\n\n var data = bytes.subarray(6 + filename_len, bytes.length);\n\n this.setBytes(data, format);\n};\n\n/**\n * Creates a string representation of the packet\n *\n * @returns {Uint8Array} Uint8Array representation of the packet\n */\nLiteral.prototype.write = function () {\n var filename = _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(this.filename));\n var filename_length = new Uint8Array([filename.length]);\n\n var format = new Uint8Array([_enums2.default.write(_enums2.default.literal, this.format)]);\n var date = _util2.default.writeDate(this.date);\n var data = this.getBytes(format !== 'binary');\n\n return _util2.default.concatUint8Array([format, filename_length, filename, date, data]);\n};\n\nexports.default = Literal;\n\n},{\"../enums\":359,\"../util\":398}],373:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the strange \"Marker packet\" (Tag 10)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.8|RFC4880 5.8}:\n * An experimental version of PGP used this packet as the Literal\n * packet, but no released version of PGP generated Literal packets with this\n * tag. With PGP 5.x, this packet has been reassigned and is reserved for use as\n * the Marker packet.\n *\n * Such a packet MUST be ignored when received.\n * @memberof module:packet\n * @constructor\n */\nfunction Marker() {\n this.tag = _enums2.default.packet.marker;\n}\n\n/**\n * Parsing function for a literal data packet (tag 10).\n *\n * @param {String} input Payload of a tag 10 packet\n * @param {Integer} position\n * Position to start reading from the input string\n * @param {Integer} len\n * Length of the packet or the remaining length of\n * input at position\n * @returns {module:packet.Marker} Object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires enums\n */\n\nMarker.prototype.read = function (bytes) {\n if (bytes[0] === 0x50 && // P\n bytes[1] === 0x47 && // G\n bytes[2] === 0x50) {\n // P\n return true;\n }\n // marker packet does not contain \"PGP\"\n return false;\n};\n\nexports.default = Marker;\n\n},{\"../enums\":359}],374:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the One-Pass Signature Packets (Tag 4)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.4|RFC4880 5.4}:\n * The One-Pass Signature packet precedes the signed data and contains\n * enough information to allow the receiver to begin calculating any\n * hashes needed to verify the signature. It allows the Signature\n * packet to be placed at the end of the message, so that the signer\n * can compute the entire signed message in one pass.\n * @memberof module:packet\n * @constructor\n */\nfunction OnePassSignature() {\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.onePassSignature;\n /** A one-octet version number. The current version is 3. */\n this.version = null;\n /**\n * A one-octet signature type.\n * Signature types are described in\n * {@link https://tools.ietf.org/html/rfc4880#section-5.2.1|RFC4880 Section 5.2.1}.\n */\n this.type = null;\n /**\n * A one-octet number describing the hash algorithm used.\n * @see {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC4880 9.4}\n */\n this.hashAlgorithm = null;\n /**\n * A one-octet number describing the public-key algorithm used.\n * @see {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC4880 9.1}\n */\n this.publicKeyAlgorithm = null;\n /** An eight-octet number holding the Key ID of the signing key. */\n this.signingKeyId = null;\n /**\n * A one-octet number holding a flag showing whether the signature is nested.\n * A zero value indicates that the next packet is another One-Pass Signature packet\n * that describes another signature to be applied to the same message data.\n */\n this.flags = null;\n}\n\n/**\n * parsing function for a one-pass signature packet (tag 4).\n * @param {Uint8Array} bytes payload of a tag 4 packet\n * @returns {module:packet.OnePassSignature} object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/keyid\n * @requires enums\n * @requires util\n*/\n\nOnePassSignature.prototype.read = function (bytes) {\n var mypos = 0;\n // A one-octet version number. The current version is 3.\n this.version = bytes[mypos++];\n\n // A one-octet signature type. Signature types are described in\n // Section 5.2.1.\n this.type = _enums2.default.read(_enums2.default.signature, bytes[mypos++]);\n\n // A one-octet number describing the hash algorithm used.\n this.hashAlgorithm = _enums2.default.read(_enums2.default.hash, bytes[mypos++]);\n\n // A one-octet number describing the public-key algorithm used.\n this.publicKeyAlgorithm = _enums2.default.read(_enums2.default.publicKey, bytes[mypos++]);\n\n // An eight-octet number holding the Key ID of the signing key.\n this.signingKeyId = new _keyid2.default();\n this.signingKeyId.read(bytes.subarray(mypos, mypos + 8));\n mypos += 8;\n\n // A one-octet number holding a flag showing whether the signature\n // is nested. A zero value indicates that the next packet is\n // another One-Pass Signature packet that describes another\n // signature to be applied to the same message data.\n this.flags = bytes[mypos++];\n return this;\n};\n\n/**\n * creates a string representation of a one-pass signature packet\n * @returns {Uint8Array} a Uint8Array representation of a one-pass signature packet\n */\nOnePassSignature.prototype.write = function () {\n var start = new Uint8Array([3, _enums2.default.write(_enums2.default.signature, this.type), _enums2.default.write(_enums2.default.hash, this.hashAlgorithm), _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm)]);\n\n var end = new Uint8Array([this.flags]);\n\n return _util2.default.concatUint8Array([start, this.signingKeyId.write(), end]);\n};\n\n/**\n * Fix custom types after cloning\n */\nOnePassSignature.prototype.postCloneTypeFix = function () {\n this.signingKeyId = _keyid2.default.fromClone(this.signingKeyId);\n};\n\nexports.default = OnePassSignature;\n\n},{\"../enums\":359,\"../type/keyid\":394,\"../util\":398}],375:[function(_dereq_,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_(\"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _util = _dereq_(\"../util\");\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n readSimpleLength: function readSimpleLength(bytes) {\n var len = 0;\n var offset = void 0;\n var type = bytes[0];\n\n if (type < 192) {\n var _bytes = (0, _slicedToArray3.default)(bytes, 1);\n\n len = _bytes[0];\n\n offset = 1;\n } else if (type < 255) {\n len = (bytes[0] - 192 << 8) + bytes[1] + 192;\n offset = 2;\n } else if (type === 255) {\n len = _util2.default.readNumber(bytes.subarray(1, 1 + 4));\n offset = 5;\n }\n\n return {\n len: len,\n offset: offset\n };\n },\n\n /**\n * Encodes a given integer of length to the openpgp length specifier to a\n * string\n *\n * @param {Integer} length The length to encode\n * @returns {Uint8Array} String with openpgp length representation\n */\n writeSimpleLength: function writeSimpleLength(length) {\n if (length < 192) {\n return new Uint8Array([length]);\n } else if (length > 191 && length < 8384) {\n /*\n * let a = (total data packet length) - 192 let bc = two octet\n * representation of a let d = b + 192\n */\n return new Uint8Array([(length - 192 >> 8) + 192, length - 192 & 0xFF]);\n }\n return _util2.default.concatUint8Array([new Uint8Array([255]), _util2.default.writeNumber(length, 4)]);\n },\n\n /**\n * Writes a packet header version 4 with the given tag_type and length to a\n * string\n *\n * @param {Integer} tag_type Tag type\n * @param {Integer} length Length of the payload\n * @returns {String} String of the header\n */\n writeHeader: function writeHeader(tag_type, length) {\n /* we're only generating v4 packet headers here */\n return _util2.default.concatUint8Array([new Uint8Array([0xC0 | tag_type]), this.writeSimpleLength(length)]);\n },\n\n /**\n * Writes a packet header Version 3 with the given tag_type and length to a\n * string\n *\n * @param {Integer} tag_type Tag type\n * @param {Integer} length Length of the payload\n * @returns {String} String of the header\n */\n writeOldHeader: function writeOldHeader(tag_type, length) {\n if (length < 256) {\n return new Uint8Array([0x80 | tag_type << 2, length]);\n } else if (length < 65536) {\n return _util2.default.concatUint8Array([new Uint8Array([0x80 | tag_type << 2 | 1]), _util2.default.writeNumber(length, 2)]);\n }\n return _util2.default.concatUint8Array([new Uint8Array([0x80 | tag_type << 2 | 2]), _util2.default.writeNumber(length, 4)]);\n },\n\n /**\n * Generic static Packet Parser function\n *\n * @param {String} input Input stream as string\n * @param {integer} position Position to start parsing\n * @param {integer} len Length of the input from position on\n * @returns {Object} Returns a parsed module:packet/packet\n */\n read: function read(input, position, len) {\n // some sanity checks\n if (input === null || input.length <= position || input.subarray(position, input.length).length < 2 || (input[position] & 0x80) === 0) {\n throw new Error(\"Error during parsing. This message / key probably does not conform to a valid OpenPGP format.\");\n }\n var mypos = position;\n var tag = -1;\n var format = -1;\n var packet_length = void 0;\n\n format = 0; // 0 = old format; 1 = new format\n if ((input[mypos] & 0x40) !== 0) {\n format = 1;\n }\n\n var packet_length_type = void 0;\n if (format) {\n // new format header\n tag = input[mypos] & 0x3F; // bit 5-0\n } else {\n // old format header\n tag = (input[mypos] & 0x3F) >> 2; // bit 5-2\n packet_length_type = input[mypos] & 0x03; // bit 1-0\n }\n\n // header octet parsing done\n mypos++;\n\n // parsed length from length field\n var bodydata = null;\n\n // used for partial body lengths\n var real_packet_length = -1;\n if (!format) {\n // 4.2.1. Old Format Packet Lengths\n switch (packet_length_type) {\n case 0:\n // The packet has a one-octet length. The header is 2 octets\n // long.\n packet_length = input[mypos++];\n break;\n case 1:\n // The packet has a two-octet length. The header is 3 octets\n // long.\n packet_length = input[mypos++] << 8 | input[mypos++];\n break;\n case 2:\n // The packet has a four-octet length. The header is 5\n // octets long.\n packet_length = input[mypos++] << 24 | input[mypos++] << 16 | input[mypos++] << 8 | input[mypos++];\n break;\n default:\n // 3 - The packet is of indeterminate length. The header is 1\n // octet long, and the implementation must determine how long\n // the packet is. If the packet is in a file, this means that\n // the packet extends until the end of the file. In general,\n // an implementation SHOULD NOT use indeterminate-length\n // packets except where the end of the data will be clear\n // from the context, and even then it is better to use a\n // definite length, or a new format header. The new format\n // headers described below have a mechanism for precisely\n // encoding data of indeterminate length.\n packet_length = len;\n break;\n }\n } else {\n // 4.2.2. New Format Packet Lengths\n // 4.2.2.1. One-Octet Lengths\n if (input[mypos] < 192) {\n packet_length = input[mypos++];\n // 4.2.2.2. Two-Octet Lengths\n } else if (input[mypos] >= 192 && input[mypos] < 224) {\n packet_length = (input[mypos++] - 192 << 8) + input[mypos++] + 192;\n // 4.2.2.4. Partial Body Lengths\n } else if (input[mypos] > 223 && input[mypos] < 255) {\n packet_length = 1 << (input[mypos++] & 0x1F);\n // EEEK, we're reading the full data here...\n var mypos2 = mypos + packet_length;\n bodydata = [input.subarray(mypos, mypos + packet_length)];\n var tmplen = void 0;\n while (true) {\n if (input[mypos2] < 192) {\n tmplen = input[mypos2++];\n packet_length += tmplen;\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n mypos2 += tmplen;\n break;\n } else if (input[mypos2] >= 192 && input[mypos2] < 224) {\n tmplen = (input[mypos2++] - 192 << 8) + input[mypos2++] + 192;\n packet_length += tmplen;\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n mypos2 += tmplen;\n break;\n } else if (input[mypos2] > 223 && input[mypos2] < 255) {\n tmplen = 1 << (input[mypos2++] & 0x1F);\n packet_length += tmplen;\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n mypos2 += tmplen;\n } else {\n mypos2++;\n tmplen = input[mypos2++] << 24 | input[mypos2++] << 16 | input[mypos2++] << 8 | input[mypos2++];\n bodydata.push(input.subarray(mypos2, mypos2 + tmplen));\n packet_length += tmplen;\n mypos2 += tmplen;\n break;\n }\n }\n real_packet_length = mypos2 - mypos;\n // 4.2.2.3. Five-Octet Lengths\n } else {\n mypos++;\n packet_length = input[mypos++] << 24 | input[mypos++] << 16 | input[mypos++] << 8 | input[mypos++];\n }\n }\n\n // if there was'nt a partial body length: use the specified\n // packet_length\n if (real_packet_length === -1) {\n real_packet_length = packet_length;\n }\n\n if (bodydata === null) {\n bodydata = input.subarray(mypos, mypos + real_packet_length);\n } else if (bodydata instanceof Array) {\n bodydata = _util2.default.concatUint8Array(bodydata);\n }\n\n return {\n tag: tag,\n packet: bodydata,\n offset: mypos + real_packet_length\n };\n }\n}; // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions for reading and writing packets\n * @requires enums\n * @requires util\n * @module packet/packet\n */\n\n},{\"../util\":398,\"babel-runtime/helpers/slicedToArray\":40}],376:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _all_packets = _dereq_('./all_packets');\n\nvar packets = _interopRequireWildcard(_all_packets);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * This class represents a list of openpgp packets.\n * Take care when iterating over it - the packets themselves\n * are stored as numerical indices.\n * @memberof module:packet\n * @constructor\n */\nfunction List() {\n /**\n * The number of packets contained within the list.\n * @readonly\n * @type {Integer}\n */\n this.length = 0;\n}\n\n/**\n * Reads a stream of binary data and interprents it as a list of packets.\n * @param {Uint8Array} A Uint8Array of bytes.\n */\n/* eslint-disable callback-return */\n/**\n * @requires packet/all_packets\n * @requires packet/packet\n * @requires config\n * @requires enums\n * @requires util\n */\n\nList.prototype.read = function (bytes) {\n var i = 0;\n\n while (i < bytes.length) {\n var parsed = _packet2.default.read(bytes, i, bytes.length - i);\n i = parsed.offset;\n\n var pushed = false;\n try {\n var tag = _enums2.default.read(_enums2.default.packet, parsed.tag);\n var packet = packets.newPacketFromTag(tag);\n this.push(packet);\n pushed = true;\n packet.read(parsed.packet);\n } catch (e) {\n if (!_config2.default.tolerant || parsed.tag === _enums2.default.packet.symmetricallyEncrypted || parsed.tag === _enums2.default.packet.literal || parsed.tag === _enums2.default.packet.compressed) {\n throw e;\n }\n _util2.default.print_debug_error(e);\n if (pushed) {\n this.pop(); // drop unsupported packet\n }\n }\n }\n};\n\n/**\n * Creates a binary representation of openpgp objects contained within the\n * class instance.\n * @returns {Uint8Array} A Uint8Array containing valid openpgp packets.\n */\nList.prototype.write = function () {\n var arr = [];\n\n for (var i = 0; i < this.length; i++) {\n var packetbytes = this[i].write();\n arr.push(_packet2.default.writeHeader(this[i].tag, packetbytes.length));\n arr.push(packetbytes);\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Adds a packet to the list. This is the only supported method of doing so;\n * writing to packetlist[i] directly will result in an error.\n * @param {Object} packet Packet to push\n */\nList.prototype.push = function (packet) {\n if (!packet) {\n return;\n }\n\n packet.packets = packet.packets || new List();\n\n this[this.length] = packet;\n this.length++;\n};\n\n/**\n * Remove a packet from the list and return it.\n * @returns {Object} The packet that was removed\n */\nList.prototype.pop = function () {\n if (this.length === 0) {\n return;\n }\n\n var packet = this[this.length - 1];\n delete this[this.length - 1];\n this.length--;\n\n return packet;\n};\n\n/**\n * Creates a new PacketList with all packets that pass the test implemented by the provided function.\n */\nList.prototype.filter = function (callback) {\n var filtered = new List();\n\n for (var i = 0; i < this.length; i++) {\n if (callback(this[i], i, this)) {\n filtered.push(this[i]);\n }\n }\n\n return filtered;\n};\n\n/**\n * Creates a new PacketList with all packets from the given types\n */\nList.prototype.filterByTag = function () {\n var filtered = new List();\n\n var handle = function handle(tag) {\n return function (packetType) {\n return tag === packetType;\n };\n };\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n for (var i = 0; i < this.length; i++) {\n if (args.some(handle(this[i].tag))) {\n filtered.push(this[i]);\n }\n }\n\n return filtered;\n};\n\n/**\n * Executes the provided callback once for each element\n */\nList.prototype.forEach = function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback(this[i], i, this);\n }\n};\n\n/**\n * Returns an array containing return values of callback\n * on each element\n */\nList.prototype.map = function (callback) {\n var packetArray = [];\n\n for (var i = 0; i < this.length; i++) {\n packetArray.push(callback(this[i], i, this));\n }\n\n return packetArray;\n};\n\n/**\n * Executes the callback function once for each element\n * until it finds one where callback returns a truthy value\n * @param {Function} callback\n * @returns {Promise<Boolean>}\n * @async\n */\nList.prototype.some = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(callback) {\n var i;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n i = 0;\n\n case 1:\n if (!(i < this.length)) {\n _context.next = 9;\n break;\n }\n\n _context.next = 4;\n return callback(this[i], i, this);\n\n case 4:\n if (!_context.sent) {\n _context.next = 6;\n break;\n }\n\n return _context.abrupt('return', true);\n\n case 6:\n i++;\n _context.next = 1;\n break;\n\n case 9:\n return _context.abrupt('return', false);\n\n case 10:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Executes the callback function once for each element,\n * returns true if all callbacks returns a truthy value\n */\nList.prototype.every = function (callback) {\n for (var i = 0; i < this.length; i++) {\n if (!callback(this[i], i, this)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Traverses packet tree and returns first matching packet\n * @param {module:enums.packet} type The packet type\n * @returns {module:packet/packet|null}\n */\nList.prototype.findPacket = function (type) {\n var packetlist = this.filterByTag(type);\n if (packetlist.length) {\n return packetlist[0];\n }\n var found = null;\n for (var i = 0; i < this.length; i++) {\n if (this[i].packets.length) {\n found = this[i].packets.findPacket(type);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n};\n\n/**\n * Returns array of found indices by tag\n */\nList.prototype.indexOfTag = function () {\n var tagIndex = [];\n var that = this;\n\n var handle = function handle(tag) {\n return function (packetType) {\n return tag === packetType;\n };\n };\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n for (var i = 0; i < this.length; i++) {\n if (args.some(handle(that[i].tag))) {\n tagIndex.push(i);\n }\n }\n return tagIndex;\n};\n\n/**\n * Returns slice of packetlist\n */\nList.prototype.slice = function (begin, end) {\n if (!end) {\n end = this.length;\n }\n var part = new List();\n for (var i = begin; i < end; i++) {\n part.push(this[i]);\n }\n return part;\n};\n\n/**\n * Concatenates packetlist or array of packets\n */\nList.prototype.concat = function (packetlist) {\n if (packetlist) {\n for (var i = 0; i < packetlist.length; i++) {\n this.push(packetlist[i]);\n }\n }\n return this;\n};\n\n/**\n * Allocate a new packetlist from structured packetlist clone\n * See {@link https://w3c.github.io/html/infrastructure.html#safe-passing-of-structured-data}\n * @param {Object} packetClone packetlist clone\n * @returns {Object} new packetlist object with data from packetlist clone\n */\nList.fromStructuredClone = function (packetlistClone) {\n var packetlist = new List();\n for (var i = 0; i < packetlistClone.length; i++) {\n packetlist.push(packets.fromStructuredClone(packetlistClone[i]));\n if (packetlist[i].packets.length !== 0) {\n packetlist[i].packets = this.fromStructuredClone(packetlist[i].packets);\n } else {\n packetlist[i].packets = new List();\n }\n }\n return packetlist;\n};\n\nexports.default = List;\n\n},{\"../config\":325,\"../enums\":359,\"../util\":398,\"./all_packets\":368,\"./packet\":375,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],377:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _mpi = _dereq_('../type/mpi');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Key Material Packet (Tag 5,6,7,14)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.5|RFC4480 5.5}:\n * A key material packet contains all the information about a public or\n * private key. There are four variants of this packet type, and two\n * major versions.\n *\n * A Public-Key packet starts a series of packets that forms an OpenPGP\n * key (sometimes called an OpenPGP certificate).\n * @memberof module:packet\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/keyid\n * @requires type/mpi\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nfunction PublicKey() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.publicKey;\n /**\n * Packet version\n * @type {Integer}\n */\n this.version = _config2.default.aead_protect && _config2.default.aead_protect_version === 4 ? 5 : 4;\n /**\n * Key creation date.\n * @type {Date}\n */\n this.created = _util2.default.normalizeDate(date);\n /**\n * Algorithm specific params\n * @type {Array<Object>}\n */\n this.params = [];\n /**\n * Time until expiration in days (V3 only)\n * @type {Integer}\n */\n this.expirationTimeV3 = 0;\n /**\n * Fingerprint in lowercase hex\n * @type {String}\n */\n this.fingerprint = null;\n /**\n * Keyid\n * @type {module:type/keyid}\n */\n this.keyid = null;\n}\n\n/**\n * Internal Parser for public keys as specified in {@link https://tools.ietf.org/html/rfc4880#section-5.5.2|RFC 4880 section 5.5.2 Public-Key Packet Formats}\n * called by read_tag&lt;num&gt;\n * @param {Uint8Array} bytes Input array to read the packet from\n * @returns {Object} This object with attributes set by the parser\n */\nPublicKey.prototype.read = function (bytes) {\n var pos = 0;\n // A one-octet version number (3, 4 or 5).\n this.version = bytes[pos++];\n\n if (this.version === 3 || this.version === 4 || this.version === 5) {\n // - A four-octet number denoting the time that the key was created.\n this.created = _util2.default.readDate(bytes.subarray(pos, pos + 4));\n pos += 4;\n\n if (this.version === 3) {\n // - A two-octet number denoting the time in days that this key is\n // valid. If this number is zero, then it does not expire.\n this.expirationTimeV3 = _util2.default.readNumber(bytes.subarray(pos, pos + 2));\n pos += 2;\n }\n\n // - A one-octet number denoting the public-key algorithm of this key.\n this.algorithm = _enums2.default.read(_enums2.default.publicKey, bytes[pos++]);\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n\n if (this.version === 5) {\n // - A four-octet scalar octet count for the following key material.\n pos += 4;\n }\n\n // - A series of values comprising the key material. This is\n // algorithm-specific and described in section XXXX.\n var types = _crypto2.default.getPubKeyParamTypes(algo);\n this.params = _crypto2.default.constructParams(types);\n\n for (var i = 0; i < types.length && pos < bytes.length; i++) {\n pos += this.params[i].read(bytes.subarray(pos, bytes.length));\n if (pos > bytes.length) {\n throw new Error('Error reading MPI @:' + pos);\n }\n }\n\n return pos;\n }\n throw new Error('Version ' + this.version + ' of the key packet is unsupported.');\n};\n\n/**\n * Alias of read()\n * @see module:packet.PublicKey#read\n */\nPublicKey.prototype.readPublicKey = PublicKey.prototype.read;\n\n/**\n * Same as write_private_key, but has less information because of\n * public key.\n * @returns {Uint8Array} OpenPGP packet body contents,\n */\nPublicKey.prototype.write = function () {\n var arr = [];\n // Version\n arr.push(new Uint8Array([this.version]));\n arr.push(_util2.default.writeDate(this.created));\n if (this.version === 3) {\n arr.push(_util2.default.writeNumber(this.expirationTimeV3, 2));\n }\n // A one-octet number denoting the public-key algorithm of this key\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n arr.push(new Uint8Array([algo]));\n\n var paramCount = _crypto2.default.getPubKeyParamTypes(algo).length;\n var params = _util2.default.concatUint8Array(this.params.slice(0, paramCount).map(function (param) {\n return param.write();\n }));\n if (this.version === 5) {\n // A four-octet scalar octet count for the following key material\n arr.push(_util2.default.writeNumber(params.length, 4));\n }\n // Algorithm-specific params\n arr.push(params);\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Alias of write()\n * @see module:packet.PublicKey#write\n */\nPublicKey.prototype.writePublicKey = PublicKey.prototype.write;\n\n/**\n * Write an old version packet - it's used by some of the internal routines.\n */\nPublicKey.prototype.writeOld = function () {\n var bytes = this.writePublicKey();\n\n return _util2.default.concatUint8Array([new Uint8Array([0x99]), _util2.default.writeNumber(bytes.length, 2), bytes]);\n};\n\n/**\n * Calculates the key id of the key\n * @returns {String} A 8 byte key id\n */\nPublicKey.prototype.getKeyId = function () {\n if (this.keyid) {\n return this.keyid;\n }\n this.keyid = new _keyid2.default();\n if (this.version === 5) {\n this.keyid.read(_util2.default.hex_to_Uint8Array(this.getFingerprint()).subarray(0, 8));\n } else if (this.version === 4) {\n this.keyid.read(_util2.default.hex_to_Uint8Array(this.getFingerprint()).subarray(12, 20));\n } else if (this.version === 3) {\n var arr = this.params[0].write();\n this.keyid.read(arr.subarray(arr.length - 8, arr.length));\n }\n return this.keyid;\n};\n\n/**\n * Calculates the fingerprint of the key\n * @returns {Uint8Array} A Uint8Array containing the fingerprint\n */\nPublicKey.prototype.getFingerprintBytes = function () {\n if (this.fingerprint) {\n return this.fingerprint;\n }\n var toHash = void 0;\n if (this.version === 5) {\n var bytes = this.writePublicKey();\n toHash = _util2.default.concatUint8Array([new Uint8Array([0x9A]), _util2.default.writeNumber(bytes.length, 4), bytes]);\n this.fingerprint = _crypto2.default.hash.sha256(toHash);\n } else if (this.version === 4) {\n toHash = this.writeOld();\n this.fingerprint = _crypto2.default.hash.sha1(toHash);\n } else if (this.version === 3) {\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n var paramCount = _crypto2.default.getPubKeyParamTypes(algo).length;\n toHash = '';\n for (var i = 0; i < paramCount; i++) {\n toHash += this.params[i].toString();\n }\n this.fingerprint = _crypto2.default.hash.md5(_util2.default.str_to_Uint8Array(toHash));\n }\n return this.fingerprint;\n};\n\n/**\n * Calculates the fingerprint of the key\n * @returns {String} A string containing the fingerprint in lowercase hex\n */\nPublicKey.prototype.getFingerprint = function () {\n return _util2.default.Uint8Array_to_hex(this.getFingerprintBytes());\n};\n\n/**\n * Returns algorithm information\n * @returns {Promise<Object>} An object of the form {algorithm: String, bits:int, curve:String}\n */\nPublicKey.prototype.getAlgorithmInfo = function () {\n var result = {};\n result.algorithm = this.algorithm;\n if (this.params[0] instanceof _mpi2.default) {\n result.bits = this.params[0].byteLength() * 8;\n } else {\n result.curve = this.params[0].getName();\n }\n return result;\n};\n\n/**\n * Fix custom types after cloning\n */\nPublicKey.prototype.postCloneTypeFix = function () {\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n var types = _crypto2.default.getPubKeyParamTypes(algo);\n for (var i = 0; i < types.length; i++) {\n var param = this.params[i];\n this.params[i] = types[i].fromClone(param);\n }\n if (this.keyid) {\n this.keyid = _keyid2.default.fromClone(this.keyid);\n }\n};\n\nexports.default = PublicKey;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"../type/keyid\":394,\"../type/mpi\":395,\"../util\":398}],378:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _keyid = _dereq_('../type/keyid');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _mpi = _dereq_('../type/mpi');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Public-Key Encrypted Session Key Packets (Tag 1)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.1|RFC4880 5.1}:\n * A Public-Key Encrypted Session Key packet holds the session key\n * used to encrypt a message. Zero or more Public-Key Encrypted Session Key\n * packets and/or Symmetric-Key Encrypted Session Key packets may precede a\n * Symmetrically Encrypted Data Packet, which holds an encrypted message. The\n * message is encrypted with the session key, and the session key is itself\n * encrypted and stored in the Encrypted Session Key packet(s). The\n * Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted\n * Session Key packet for each OpenPGP key to which the message is encrypted.\n * The recipient of the message finds a session key that is encrypted to their\n * public key, decrypts the session key, and then uses the session key to\n * decrypt the message.\n * @memberof module:packet\n * @constructor\n */\nfunction PublicKeyEncryptedSessionKey() {\n this.tag = _enums2.default.packet.publicKeyEncryptedSessionKey;\n this.version = 3;\n\n this.publicKeyId = new _keyid2.default();\n this.sessionKey = null;\n\n /** @type {Array<module:type/mpi>} */\n this.encrypted = [];\n}\n\n/**\n * Parsing function for a publickey encrypted session key packet (tag 1).\n *\n * @param {Uint8Array} input Payload of a tag 1 packet\n * @param {Integer} position Position to start reading from the input string\n * @param {Integer} len Length of the packet or the remaining length of\n * input at position\n * @returns {module:packet.PublicKeyEncryptedSessionKey} Object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/keyid\n * @requires type/mpi\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nPublicKeyEncryptedSessionKey.prototype.read = function (bytes) {\n this.version = bytes[0];\n this.publicKeyId.read(bytes.subarray(1, bytes.length));\n this.publicKeyAlgorithm = _enums2.default.read(_enums2.default.publicKey, bytes[9]);\n\n var i = 10;\n\n var algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n var types = _crypto2.default.getEncSessionKeyParamTypes(algo);\n this.encrypted = _crypto2.default.constructParams(types);\n\n for (var j = 0; j < types.length; j++) {\n i += this.encrypted[j].read(bytes.subarray(i, bytes.length));\n }\n};\n\n/**\n * Create a string representation of a tag 1 packet\n *\n * @returns {Uint8Array} The Uint8Array representation\n */\nPublicKeyEncryptedSessionKey.prototype.write = function () {\n var arr = [new Uint8Array([this.version]), this.publicKeyId.write(), new Uint8Array([_enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm)])];\n\n for (var i = 0; i < this.encrypted.length; i++) {\n arr.push(this.encrypted[i].write());\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Encrypt session key packet\n * @param {module:packet.PublicKey} key Public key\n * @returns {Promise<Boolean>}\n * @async\n */\nPublicKeyEncryptedSessionKey.prototype.encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(key) {\n var data, checksum, toEncrypt, algo;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n data = String.fromCharCode(_enums2.default.write(_enums2.default.symmetric, this.sessionKeyAlgorithm));\n\n\n data += _util2.default.Uint8Array_to_str(this.sessionKey);\n checksum = _util2.default.calc_checksum(this.sessionKey);\n\n data += _util2.default.Uint8Array_to_str(_util2.default.writeNumber(checksum, 2));\n\n toEncrypt = void 0;\n algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n\n if (!(algo === _enums2.default.publicKey.ecdh)) {\n _context.next = 10;\n break;\n }\n\n toEncrypt = new _mpi2.default(_crypto2.default.pkcs5.encode(data));\n _context.next = 15;\n break;\n\n case 10:\n _context.t0 = _mpi2.default;\n _context.next = 13;\n return _crypto2.default.pkcs1.eme.encode(data, key.params[0].byteLength());\n\n case 13:\n _context.t1 = _context.sent;\n toEncrypt = new _context.t0(_context.t1);\n\n case 15:\n _context.next = 17;\n return _crypto2.default.publicKeyEncrypt(algo, key.params, toEncrypt, key.getFingerprintBytes());\n\n case 17:\n this.encrypted = _context.sent;\n return _context.abrupt('return', true);\n\n case 19:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypts the session key (only for public key encrypted session key\n * packets (tag 1)\n *\n * @param {module:packet.SecretKey} key\n * Private key with secret params unlocked\n * @returns {Promise<Boolean>}\n * @async\n */\nPublicKeyEncryptedSessionKey.prototype.decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(key) {\n var algo, result, checksum, decoded;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n _context2.next = 3;\n return _crypto2.default.publicKeyDecrypt(algo, key.params, this.encrypted, key.getFingerprintBytes());\n\n case 3:\n result = _context2.sent;\n checksum = void 0;\n decoded = void 0;\n\n if (algo === _enums2.default.publicKey.ecdh) {\n decoded = _crypto2.default.pkcs5.decode(result.toString());\n checksum = _util2.default.readNumber(_util2.default.str_to_Uint8Array(decoded.substr(decoded.length - 2)));\n } else {\n decoded = _crypto2.default.pkcs1.eme.decode(result.toString());\n checksum = _util2.default.readNumber(result.toUint8Array().slice(result.byteLength() - 2));\n }\n\n key = _util2.default.str_to_Uint8Array(decoded.substring(1, decoded.length - 2));\n\n if (!(checksum !== _util2.default.calc_checksum(key))) {\n _context2.next = 12;\n break;\n }\n\n throw new Error('Checksum mismatch');\n\n case 12:\n this.sessionKey = key;\n this.sessionKeyAlgorithm = _enums2.default.read(_enums2.default.symmetric, decoded.charCodeAt(0));\n\n case 14:\n return _context2.abrupt('return', true);\n\n case 15:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Fix custom types after cloning\n */\nPublicKeyEncryptedSessionKey.prototype.postCloneTypeFix = function () {\n this.publicKeyId = _keyid2.default.fromClone(this.publicKeyId);\n var algo = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n var types = _crypto2.default.getEncSessionKeyParamTypes(algo);\n for (var i = 0; i < this.encrypted.length; i++) {\n this.encrypted[i] = types[i].fromClone(this.encrypted[i]);\n }\n};\n\nexports.default = PublicKeyEncryptedSessionKey;\n\n},{\"../crypto\":340,\"../enums\":359,\"../type/keyid\":394,\"../type/mpi\":395,\"../util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],379:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * A Public-Subkey packet (tag 14) has exactly the same format as a\n * Public-Key packet, but denotes a subkey. One or more subkeys may be\n * associated with a top-level key. By convention, the top-level key\n * provides signature services, and the subkeys provide encryption\n * services.\n * @memberof module:packet\n * @constructor\n * @extends module:packet.PublicKey\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/public_key\n * @requires enums\n */\n\nfunction PublicSubkey() {\n _public_key2.default.call(this);\n this.tag = _enums2.default.packet.publicSubkey;\n}\n\nPublicSubkey.prototype = new _public_key2.default();\nPublicSubkey.prototype.constructor = PublicSubkey;\n\nexports.default = PublicSubkey;\n\n},{\"../enums\":359,\"./public_key\":377}],380:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _public_key = _dereq_('./public_key');\n\nvar _public_key2 = _interopRequireDefault(_public_key);\n\nvar _keyid = _dereq_('../type/keyid.js');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _s2k = _dereq_('../type/s2k');\n\nvar _s2k2 = _interopRequireDefault(_s2k);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * A Secret-Key packet contains all the information that is found in a\n * Public-Key packet, including the public-key material, but also\n * includes the secret-key material after all the public-key fields.\n * @memberof module:packet\n * @constructor\n * @extends module:packet.PublicKey\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/public_key\n * @requires type/keyid\n * @requires type/s2k\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nfunction SecretKey() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n _public_key2.default.call(this, date);\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.secretKey;\n /**\n * Encrypted secret-key data\n */\n this.encrypted = null;\n /**\n * Indicator if secret-key data is available in decrypted form\n */\n this.isDecrypted = false;\n}\n\nSecretKey.prototype = new _public_key2.default();\nSecretKey.prototype.constructor = SecretKey;\n\nfunction get_hash_len(hash) {\n if (hash === 'sha1') {\n return 20;\n }\n return 2;\n}\n\nfunction get_hash_fn(hash) {\n if (hash === 'sha1') {\n return _crypto2.default.hash.sha1;\n }\n return function (c) {\n return _util2.default.writeNumber(_util2.default.calc_checksum(c), 2);\n };\n}\n\n// Helper function\n\nfunction parse_cleartext_params(hash_algorithm, cleartext, algorithm) {\n if (hash_algorithm) {\n var hashlen = get_hash_len(hash_algorithm);\n var hashfn = get_hash_fn(hash_algorithm);\n\n var hashtext = _util2.default.Uint8Array_to_str(cleartext.subarray(cleartext.length - hashlen, cleartext.length));\n cleartext = cleartext.subarray(0, cleartext.length - hashlen);\n var hash = _util2.default.Uint8Array_to_str(hashfn(cleartext));\n\n if (hash !== hashtext) {\n throw new Error(\"Incorrect key passphrase\");\n }\n }\n\n var algo = _enums2.default.write(_enums2.default.publicKey, algorithm);\n var types = _crypto2.default.getPrivKeyParamTypes(algo);\n var params = _crypto2.default.constructParams(types);\n var p = 0;\n\n for (var i = 0; i < types.length && p < cleartext.length; i++) {\n p += params[i].read(cleartext.subarray(p, cleartext.length));\n if (p > cleartext.length) {\n throw new Error('Error reading param @:' + p);\n }\n }\n\n return params;\n}\n\nfunction write_cleartext_params(hash_algorithm, algorithm, params) {\n var arr = [];\n var algo = _enums2.default.write(_enums2.default.publicKey, algorithm);\n var numPublicParams = _crypto2.default.getPubKeyParamTypes(algo).length;\n\n for (var i = numPublicParams; i < params.length; i++) {\n arr.push(params[i].write());\n }\n\n var bytes = _util2.default.concatUint8Array(arr);\n\n if (hash_algorithm) {\n var hash = get_hash_fn(hash_algorithm)(bytes);\n\n return _util2.default.concatUint8Array([bytes, hash]);\n }\n\n return bytes;\n}\n\n// 5.5.3. Secret-Key Packet Formats\n\n/**\n * Internal parser for private keys as specified in\n * {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.5.3|RFC4880bis-04 section 5.5.3}\n * @param {String} bytes Input string to read the packet from\n */\nSecretKey.prototype.read = function (bytes) {\n // - A Public-Key or Public-Subkey packet, as described above.\n var len = this.readPublicKey(bytes);\n\n bytes = bytes.subarray(len, bytes.length);\n\n // - One octet indicating string-to-key usage conventions. Zero\n // indicates that the secret-key data is not encrypted. 255 or 254\n // indicates that a string-to-key specifier is being given. Any\n // other value is a symmetric-key encryption algorithm identifier.\n var isEncrypted = bytes[0];\n\n if (isEncrypted) {\n this.encrypted = bytes;\n } else {\n // - Plain or encrypted multiprecision integers comprising the secret\n // key data. These algorithm-specific fields are as described\n // below.\n var privParams = parse_cleartext_params('mod', bytes.subarray(1, bytes.length), this.algorithm);\n this.params = this.params.concat(privParams);\n this.isDecrypted = true;\n }\n};\n\n/**\n * Creates an OpenPGP key packet for the given key.\n * @returns {String} A string of bytes containing the secret key OpenPGP packet\n */\nSecretKey.prototype.write = function () {\n var arr = [this.writePublicKey()];\n\n if (!this.encrypted) {\n arr.push(new Uint8Array([0]));\n arr.push(write_cleartext_params('mod', this.algorithm, this.params));\n } else {\n arr.push(this.encrypted);\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Encrypt the payload. By default, we use aes256 and iterated, salted string\n * to key specifier. If the key is in a decrypted state (isDecrypted === true)\n * and the passphrase is empty or undefined, the key will be set as not encrypted.\n * This can be used to remove passphrase protection after calling decrypt().\n * @param {String} passphrase\n * @returns {Promise<Boolean>}\n * @async\n */\nSecretKey.prototype.encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(passphrase) {\n var s2k, symmetric, hash, cleartext, key, blockLen, iv, arr, aead, optionalFields, mode, modeInstance, encrypted;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(this.isDecrypted && !passphrase)) {\n _context.next = 5;\n break;\n }\n\n this.encrypted = null;\n return _context.abrupt('return', false);\n\n case 5:\n if (passphrase) {\n _context.next = 7;\n break;\n }\n\n throw new Error('The key must be decrypted before removing passphrase protection.');\n\n case 7:\n s2k = new _s2k2.default();\n _context.next = 10;\n return _crypto2.default.random.getRandomBytes(8);\n\n case 10:\n s2k.salt = _context.sent;\n symmetric = 'aes256';\n hash = this.version === 5 ? null : 'sha1';\n cleartext = write_cleartext_params(hash, this.algorithm, this.params);\n key = produceEncryptionKey(s2k, passphrase, symmetric);\n blockLen = _crypto2.default.cipher[symmetric].blockSize;\n _context.next = 18;\n return _crypto2.default.random.getRandomBytes(blockLen);\n\n case 18:\n iv = _context.sent;\n arr = void 0;\n\n if (!(this.version === 5)) {\n _context.next = 36;\n break;\n }\n\n aead = 'eax';\n optionalFields = _util2.default.concatUint8Array([new Uint8Array([_enums2.default.write(_enums2.default.symmetric, symmetric), _enums2.default.write(_enums2.default.aead, aead)]), s2k.write(), iv]);\n\n arr = [new Uint8Array([253, optionalFields.length])];\n arr.push(optionalFields);\n mode = _crypto2.default[aead];\n _context.next = 28;\n return mode(symmetric, key);\n\n case 28:\n modeInstance = _context.sent;\n _context.next = 31;\n return modeInstance.encrypt(cleartext, iv.subarray(0, mode.ivLength), new Uint8Array());\n\n case 31:\n encrypted = _context.sent;\n\n arr.push(_util2.default.writeNumber(encrypted.length, 4));\n arr.push(encrypted);\n _context.next = 40;\n break;\n\n case 36:\n arr = [new Uint8Array([254, _enums2.default.write(_enums2.default.symmetric, symmetric)])];\n arr.push(s2k.write());\n arr.push(iv);\n arr.push(_crypto2.default.cfb.normalEncrypt(symmetric, key, cleartext, iv));\n\n case 40:\n\n this.encrypted = _util2.default.concatUint8Array(arr);\n return _context.abrupt('return', true);\n\n case 42:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\nfunction produceEncryptionKey(s2k, passphrase, algorithm) {\n return s2k.produce_key(passphrase, _crypto2.default.cipher[algorithm].keySize);\n}\n\n/**\n * Decrypts the private key params which are needed to use the key.\n * {@link module:packet.SecretKey.isDecrypted} should be false, as\n * otherwise calls to this function will throw an error.\n * @param {String} passphrase The passphrase for this private key as string\n * @returns {Promise<Boolean>}\n * @async\n */\nSecretKey.prototype.decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(passphrase) {\n var i, symmetric, aead, key, s2k_usage, s2k, iv, ciphertext, cleartext, mode, modeInstance, hash, privParams;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!this.isDecrypted) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Key packet is already decrypted.');\n\n case 2:\n i = 0;\n symmetric = void 0;\n aead = void 0;\n key = void 0;\n s2k_usage = this.encrypted[i++];\n\n // - Only for a version 5 packet, a one-octet scalar octet count of\n // the next 4 optional fields.\n\n if (this.version === 5) {\n i++;\n }\n\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // one-octet symmetric encryption algorithm.\n if (s2k_usage === 255 || s2k_usage === 254 || s2k_usage === 253) {\n symmetric = this.encrypted[i++];\n symmetric = _enums2.default.read(_enums2.default.symmetric, symmetric);\n\n // - [Optional] If string-to-key usage octet was 253, a one-octet\n // AEAD algorithm.\n if (s2k_usage === 253) {\n aead = this.encrypted[i++];\n aead = _enums2.default.read(_enums2.default.aead, aead);\n }\n\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // string-to-key specifier. The length of the string-to-key\n // specifier is implied by its type, as described above.\n s2k = new _s2k2.default();\n\n i += s2k.read(this.encrypted.subarray(i, this.encrypted.length));\n\n key = produceEncryptionKey(s2k, passphrase, symmetric);\n } else {\n symmetric = s2k_usage;\n symmetric = _enums2.default.read(_enums2.default.symmetric, symmetric);\n key = _crypto2.default.hash.md5(passphrase);\n }\n\n // - [Optional] If secret data is encrypted (string-to-key usage octet\n // not zero), an Initial Vector (IV) of the same length as the\n // cipher's block size.\n iv = this.encrypted.subarray(i, i + _crypto2.default.cipher[symmetric].blockSize);\n\n\n i += iv.length;\n\n // - Only for a version 5 packet, a four-octet scalar octet count for\n // the following key material.\n if (this.version === 5) {\n i += 4;\n }\n\n ciphertext = this.encrypted.subarray(i, this.encrypted.length);\n cleartext = void 0;\n\n if (!aead) {\n _context2.next = 31;\n break;\n }\n\n mode = _crypto2.default[aead];\n _context2.prev = 16;\n _context2.next = 19;\n return mode(symmetric, key);\n\n case 19:\n modeInstance = _context2.sent;\n _context2.next = 22;\n return modeInstance.decrypt(ciphertext, iv.subarray(0, mode.ivLength), new Uint8Array());\n\n case 22:\n cleartext = _context2.sent;\n _context2.next = 29;\n break;\n\n case 25:\n _context2.prev = 25;\n _context2.t0 = _context2['catch'](16);\n\n if (!(_context2.t0.message === 'Authentication tag mismatch')) {\n _context2.next = 29;\n break;\n }\n\n throw new Error('Incorrect key passphrase: ' + _context2.t0.message);\n\n case 29:\n _context2.next = 32;\n break;\n\n case 31:\n cleartext = _crypto2.default.cfb.normalDecrypt(symmetric, key, ciphertext, iv);\n\n case 32:\n hash = s2k_usage === 253 ? null : s2k_usage === 254 ? 'sha1' : 'mod';\n privParams = parse_cleartext_params(hash, cleartext, this.algorithm);\n\n this.params = this.params.concat(privParams);\n this.isDecrypted = true;\n this.encrypted = null;\n\n return _context2.abrupt('return', true);\n\n case 38:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this, [[16, 25]]);\n }));\n\n return function (_x3) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nSecretKey.prototype.generate = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(bits, curve) {\n var algo;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n _context3.next = 3;\n return _crypto2.default.generateParams(algo, bits, curve);\n\n case 3:\n this.params = _context3.sent;\n\n this.isDecrypted = true;\n\n case 5:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4, _x5) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n/**\n * Clear private params, return to initial state\n */\nSecretKey.prototype.clearPrivateParams = function () {\n if (!this.encrypted) {\n throw new Error('If secret key is not encrypted, clearing private params is irreversible.');\n }\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n this.params = this.params.slice(0, _crypto2.default.getPubKeyParamTypes(algo).length);\n this.isDecrypted = false;\n};\n\n/**\n * Fix custom types after cloning\n */\nSecretKey.prototype.postCloneTypeFix = function () {\n var algo = _enums2.default.write(_enums2.default.publicKey, this.algorithm);\n var types = [].concat(_crypto2.default.getPubKeyParamTypes(algo), _crypto2.default.getPrivKeyParamTypes(algo));\n for (var i = 0; i < this.params.length; i++) {\n var param = this.params[i];\n this.params[i] = types[i].fromClone(param);\n }\n if (this.keyid) {\n this.keyid = _keyid2.default.fromClone(this.keyid);\n }\n};\n\nexports.default = SecretKey;\n\n},{\"../crypto\":340,\"../enums\":359,\"../type/keyid.js\":394,\"../type/s2k\":397,\"../util\":398,\"./public_key\":377,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],381:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _secret_key = _dereq_('./secret_key');\n\nvar _secret_key2 = _interopRequireDefault(_secret_key);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * A Secret-Subkey packet (tag 7) is the subkey analog of the Secret\n * Key packet and has exactly the same format.\n * @memberof module:packet\n * @constructor\n * @extends module:packet.SecretKey\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/secret_key\n * @requires enums\n */\n\nfunction SecretSubkey() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n _secret_key2.default.call(this, date);\n this.tag = _enums2.default.packet.secretSubkey;\n}\n\nSecretSubkey.prototype = new _secret_key2.default();\nSecretSubkey.prototype.constructor = SecretSubkey;\n\nexports.default = SecretSubkey;\n\n},{\"../enums\":359,\"./secret_key\":380}],382:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _entries = _dereq_('babel-runtime/core-js/object/entries');\n\nvar _entries2 = _interopRequireDefault(_entries);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _packet2 = _dereq_('./packet');\n\nvar _packet3 = _interopRequireDefault(_packet2);\n\nvar _keyid = _dereq_('../type/keyid.js');\n\nvar _keyid2 = _interopRequireDefault(_keyid);\n\nvar _mpi = _dereq_('../type/mpi.js');\n\nvar _mpi2 = _interopRequireDefault(_mpi);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Signature Packet (Tag 2)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.2|RFC4480 5.2}:\n * A Signature packet describes a binding between some public key and\n * some data. The most common signatures are a signature of a file or a\n * block of text, and a signature that is a certification of a User ID.\n * @memberof module:packet\n * @constructor\n * @param {Date} date the creation date of the signature\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet/packet\n * @requires type/keyid\n * @requires type/mpi\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nfunction Signature() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n this.tag = _enums2.default.packet.signature;\n this.version = 4;\n this.signatureType = null;\n this.hashAlgorithm = null;\n this.publicKeyAlgorithm = null;\n\n this.signatureData = null;\n this.unhashedSubpackets = null;\n this.signedHashValue = null;\n\n this.created = _util2.default.normalizeDate(date);\n this.signatureExpirationTime = null;\n this.signatureNeverExpires = true;\n this.exportable = null;\n this.trustLevel = null;\n this.trustAmount = null;\n this.regularExpression = null;\n this.revocable = null;\n this.keyExpirationTime = null;\n this.keyNeverExpires = null;\n this.preferredSymmetricAlgorithms = null;\n this.revocationKeyClass = null;\n this.revocationKeyAlgorithm = null;\n this.revocationKeyFingerprint = null;\n this.issuerKeyId = new _keyid2.default();\n this.notation = null;\n this.preferredHashAlgorithms = null;\n this.preferredCompressionAlgorithms = null;\n this.keyServerPreferences = null;\n this.preferredKeyServer = null;\n this.isPrimaryUserID = null;\n this.policyURI = null;\n this.keyFlags = null;\n this.signersUserId = null;\n this.reasonForRevocationFlag = null;\n this.reasonForRevocationString = null;\n this.features = null;\n this.signatureTargetPublicKeyAlgorithm = null;\n this.signatureTargetHashAlgorithm = null;\n this.signatureTargetHash = null;\n this.embeddedSignature = null;\n this.issuerKeyVersion = null;\n this.issuerFingerprint = null;\n this.preferredAeadAlgorithms = null;\n\n this.verified = null;\n this.revoked = null;\n}\n\n/**\n * parsing function for a signature packet (tag 2).\n * @param {String} bytes payload of a tag 2 packet\n * @param {Integer} position position to start reading from the bytes string\n * @param {Integer} len length of the packet or the remaining length of bytes at position\n * @returns {module:packet.Signature} object representation\n */\nSignature.prototype.read = function (bytes) {\n var _this = this;\n\n var i = 0;\n this.version = bytes[i++];\n\n var subpackets = function subpackets(bytes) {\n // Two-octet scalar octet count for following subpacket data.\n var subpacket_length = _util2.default.readNumber(bytes.subarray(0, 2));\n\n var i = 2;\n\n // subpacket data set (zero or more subpackets)\n while (i < 2 + subpacket_length) {\n var len = _packet3.default.readSimpleLength(bytes.subarray(i, bytes.length));\n i += len.offset;\n\n _this.read_sub_packet(bytes.subarray(i, i + len.len));\n\n i += len.len;\n }\n\n return i;\n };\n\n // switch on version (3 and 4)\n switch (this.version) {\n case 3:\n {\n // One-octet length of following hashed material. MUST be 5.\n if (bytes[i++] !== 5) {\n _util2.default.print_debug(\"packet/signature.js\\n\" + 'invalid One-octet length of following hashed material.' + 'MUST be 5. @:' + (i - 1));\n }\n\n var sigpos = i;\n // One-octet signature type.\n this.signatureType = bytes[i++];\n\n // Four-octet creation time.\n this.created = _util2.default.readDate(bytes.subarray(i, i + 4));\n i += 4;\n\n // storing data appended to data which gets verified\n this.signatureData = bytes.subarray(sigpos, i);\n\n // Eight-octet Key ID of signer.\n this.issuerKeyId.read(bytes.subarray(i, i + 8));\n i += 8;\n\n // One-octet public-key algorithm.\n this.publicKeyAlgorithm = bytes[i++];\n\n // One-octet hash algorithm.\n this.hashAlgorithm = bytes[i++];\n break;\n }\n case 4:\n {\n this.signatureType = bytes[i++];\n this.publicKeyAlgorithm = bytes[i++];\n this.hashAlgorithm = bytes[i++];\n\n // hashed subpackets\n i += subpackets(bytes.subarray(i, bytes.length), true);\n\n // A V4 signature hashes the packet body\n // starting from its first field, the version number, through the end\n // of the hashed subpacket data. Thus, the fields hashed are the\n // signature version, the signature type, the public-key algorithm, the\n // hash algorithm, the hashed subpacket length, and the hashed\n // subpacket body.\n this.signatureData = bytes.subarray(0, i);\n var sigDataLength = i;\n\n // unhashed subpackets\n i += subpackets(bytes.subarray(i, bytes.length), false);\n this.unhashedSubpackets = bytes.subarray(sigDataLength, i);\n\n break;\n }\n default:\n throw new Error('Version ' + this.version + ' of the signature is unsupported.');\n }\n\n // Two-octet field holding left 16 bits of signed hash value.\n this.signedHashValue = bytes.subarray(i, i + 2);\n i += 2;\n\n this.signature = bytes.subarray(i, bytes.length);\n};\n\nSignature.prototype.write = function () {\n var arr = [];\n switch (this.version) {\n case 3:\n arr.push(new Uint8Array([3, 5])); // version, One-octet length of following hashed material. MUST be 5\n arr.push(new Uint8Array([this.signatureType]));\n arr.push(_util2.default.writeDate(this.created));\n arr.push(this.issuerKeyId.write());\n arr.push(new Uint8Array([_enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm), _enums2.default.write(_enums2.default.hash, this.hashAlgorithm)]));\n break;\n case 4:\n arr.push(this.signatureData);\n arr.push(this.unhashedSubpackets ? this.unhashedSubpackets : _util2.default.writeNumber(0, 2));\n break;\n }\n arr.push(this.signedHashValue);\n arr.push(this.signature);\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Signs provided data. This needs to be done prior to serialization.\n * @param {module:packet.SecretKey} key private key used to sign the message.\n * @param {Object} data Contains packets to be signed.\n * @returns {Promise<Boolean>}\n * @async\n */\nSignature.prototype.sign = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(key, data) {\n var signatureType, publicKeyAlgorithm, hashAlgorithm, arr, trailer, toHash, hash;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n signatureType = _enums2.default.write(_enums2.default.signature, this.signatureType);\n publicKeyAlgorithm = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n hashAlgorithm = _enums2.default.write(_enums2.default.hash, this.hashAlgorithm);\n arr = [new Uint8Array([4, signatureType, publicKeyAlgorithm, hashAlgorithm])];\n\n\n if (key.version === 5) {\n // We could also generate this subpacket for version 4 keys, but for\n // now we don't.\n this.issuerKeyVersion = key.version;\n this.issuerFingerprint = key.getFingerprintBytes();\n }\n\n this.issuerKeyId = key.getKeyId();\n\n // Add hashed subpackets\n arr.push(this.write_all_sub_packets());\n\n this.signatureData = _util2.default.concatUint8Array(arr);\n\n trailer = this.calculateTrailer();\n toHash = null;\n _context.t0 = this.version;\n _context.next = _context.t0 === 3 ? 13 : _context.t0 === 4 ? 15 : 17;\n break;\n\n case 13:\n toHash = _util2.default.concatUint8Array([this.toSign(signatureType, data), new Uint8Array([signatureType]), _util2.default.writeDate(this.created)]);\n return _context.abrupt('break', 18);\n\n case 15:\n toHash = _util2.default.concatUint8Array([this.toSign(signatureType, data), this.signatureData, trailer]);\n return _context.abrupt('break', 18);\n\n case 17:\n throw new Error('Version ' + this.version + ' of the signature is unsupported.');\n\n case 18:\n hash = _crypto2.default.hash.digest(hashAlgorithm, toHash);\n\n\n this.signedHashValue = hash.subarray(0, 2);\n\n _context.next = 22;\n return _crypto2.default.signature.sign(publicKeyAlgorithm, hashAlgorithm, key.params, toHash);\n\n case 22:\n this.signature = _context.sent;\n return _context.abrupt('return', true);\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Creates string of bytes with all subpacket data\n * @returns {String} a string-representation of a all subpacket data\n */\nSignature.prototype.write_all_sub_packets = function () {\n var sub = _enums2.default.signatureSubpacket;\n var arr = [];\n var bytes = void 0;\n if (this.created !== null) {\n arr.push(write_sub_packet(sub.signature_creation_time, _util2.default.writeDate(this.created)));\n }\n if (this.signatureExpirationTime !== null) {\n arr.push(write_sub_packet(sub.signature_expiration_time, _util2.default.writeNumber(this.signatureExpirationTime, 4)));\n }\n if (this.exportable !== null) {\n arr.push(write_sub_packet(sub.exportable_certification, new Uint8Array([this.exportable ? 1 : 0])));\n }\n if (this.trustLevel !== null) {\n bytes = new Uint8Array([this.trustLevel, this.trustAmount]);\n arr.push(write_sub_packet(sub.trust_signature, bytes));\n }\n if (this.regularExpression !== null) {\n arr.push(write_sub_packet(sub.regular_expression, this.regularExpression));\n }\n if (this.revocable !== null) {\n arr.push(write_sub_packet(sub.revocable, new Uint8Array([this.revocable ? 1 : 0])));\n }\n if (this.keyExpirationTime !== null) {\n arr.push(write_sub_packet(sub.key_expiration_time, _util2.default.writeNumber(this.keyExpirationTime, 4)));\n }\n if (this.preferredSymmetricAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredSymmetricAlgorithms));\n arr.push(write_sub_packet(sub.preferred_symmetric_algorithms, bytes));\n }\n if (this.revocationKeyClass !== null) {\n bytes = new Uint8Array([this.revocationKeyClass, this.revocationKeyAlgorithm]);\n bytes = _util2.default.concatUint8Array([bytes, this.revocationKeyFingerprint]);\n arr.push(write_sub_packet(sub.revocation_key, bytes));\n }\n if (!this.issuerKeyId.isNull() && this.issuerKeyVersion !== 5) {\n // If the version of [the] key is greater than 4, this subpacket\n // MUST NOT be included in the signature.\n arr.push(write_sub_packet(sub.issuer, this.issuerKeyId.write()));\n }\n if (this.notation !== null) {\n (0, _entries2.default)(this.notation).forEach(function (_ref2) {\n var _ref3 = (0, _slicedToArray3.default)(_ref2, 2),\n name = _ref3[0],\n value = _ref3[1];\n\n bytes = [new Uint8Array([0x80, 0, 0, 0])];\n // 2 octets of name length\n bytes.push(_util2.default.writeNumber(name.length, 2));\n // 2 octets of value length\n bytes.push(_util2.default.writeNumber(value.length, 2));\n bytes.push(_util2.default.str_to_Uint8Array(name + value));\n bytes = _util2.default.concatUint8Array(bytes);\n arr.push(write_sub_packet(sub.notation_data, bytes));\n });\n }\n if (this.preferredHashAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredHashAlgorithms));\n arr.push(write_sub_packet(sub.preferred_hash_algorithms, bytes));\n }\n if (this.preferredCompressionAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredCompressionAlgorithms));\n arr.push(write_sub_packet(sub.preferred_compression_algorithms, bytes));\n }\n if (this.keyServerPreferences !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.keyServerPreferences));\n arr.push(write_sub_packet(sub.key_server_preferences, bytes));\n }\n if (this.preferredKeyServer !== null) {\n arr.push(write_sub_packet(sub.preferred_key_server, _util2.default.str_to_Uint8Array(this.preferredKeyServer)));\n }\n if (this.isPrimaryUserID !== null) {\n arr.push(write_sub_packet(sub.primary_user_id, new Uint8Array([this.isPrimaryUserID ? 1 : 0])));\n }\n if (this.policyURI !== null) {\n arr.push(write_sub_packet(sub.policy_uri, _util2.default.str_to_Uint8Array(this.policyURI)));\n }\n if (this.keyFlags !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.keyFlags));\n arr.push(write_sub_packet(sub.key_flags, bytes));\n }\n if (this.signersUserId !== null) {\n arr.push(write_sub_packet(sub.signers_user_id, _util2.default.str_to_Uint8Array(this.signersUserId)));\n }\n if (this.reasonForRevocationFlag !== null) {\n bytes = _util2.default.str_to_Uint8Array(String.fromCharCode(this.reasonForRevocationFlag) + this.reasonForRevocationString);\n arr.push(write_sub_packet(sub.reason_for_revocation, bytes));\n }\n if (this.features !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.features));\n arr.push(write_sub_packet(sub.features, bytes));\n }\n if (this.signatureTargetPublicKeyAlgorithm !== null) {\n bytes = [new Uint8Array([this.signatureTargetPublicKeyAlgorithm, this.signatureTargetHashAlgorithm])];\n bytes.push(_util2.default.str_to_Uint8Array(this.signatureTargetHash));\n bytes = _util2.default.concatUint8Array(bytes);\n arr.push(write_sub_packet(sub.signature_target, bytes));\n }\n if (this.embeddedSignature !== null) {\n arr.push(write_sub_packet(sub.embedded_signature, this.embeddedSignature.write()));\n }\n if (this.issuerFingerprint !== null) {\n bytes = [new Uint8Array([this.issuerKeyVersion]), this.issuerFingerprint];\n bytes = _util2.default.concatUint8Array(bytes);\n arr.push(write_sub_packet(sub.issuer_fingerprint, bytes));\n }\n if (this.preferredAeadAlgorithms !== null) {\n bytes = _util2.default.str_to_Uint8Array(_util2.default.Uint8Array_to_str(this.preferredAeadAlgorithms));\n arr.push(write_sub_packet(sub.preferred_aead_algorithms, bytes));\n }\n\n var result = _util2.default.concatUint8Array(arr);\n var length = _util2.default.writeNumber(result.length, 2);\n\n return _util2.default.concatUint8Array([length, result]);\n};\n\n/**\n * Creates a string representation of a sub signature packet\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.1|RFC4880 5.2.3.1}\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.2|RFC4880 5.2.3.2}\n * @param {Integer} type subpacket signature type.\n * @param {String} data data to be included\n * @returns {String} a string-representation of a sub signature packet\n * @private\n */\nfunction write_sub_packet(type, data) {\n var arr = [];\n arr.push(_packet3.default.writeSimpleLength(data.length + 1));\n arr.push(new Uint8Array([type]));\n arr.push(data);\n return _util2.default.concatUint8Array(arr);\n}\n\n// V4 signature sub packets\n\nSignature.prototype.read_sub_packet = function (bytes) {\n var _this2 = this;\n\n var mypos = 0;\n\n var read_array = function read_array(prop, bytes) {\n _this2[prop] = [];\n\n for (var i = 0; i < bytes.length; i++) {\n _this2[prop].push(bytes[i]);\n }\n };\n\n // The leftwost bit denotes a \"critical\" packet, but we ignore it.\n var type = bytes[mypos++] & 0x7F;\n var seconds = void 0;\n\n // subpacket type\n switch (type) {\n case 2:\n // Signature Creation Time\n this.created = _util2.default.readDate(bytes.subarray(mypos, bytes.length));\n break;\n case 3:\n // Signature Expiration Time in seconds\n seconds = _util2.default.readNumber(bytes.subarray(mypos, bytes.length));\n\n this.signatureNeverExpires = seconds === 0;\n this.signatureExpirationTime = seconds;\n\n break;\n case 4:\n // Exportable Certification\n this.exportable = bytes[mypos++] === 1;\n break;\n case 5:\n // Trust Signature\n this.trustLevel = bytes[mypos++];\n this.trustAmount = bytes[mypos++];\n break;\n case 6:\n // Regular Expression\n this.regularExpression = bytes[mypos];\n break;\n case 7:\n // Revocable\n this.revocable = bytes[mypos++] === 1;\n break;\n case 9:\n // Key Expiration Time in seconds\n seconds = _util2.default.readNumber(bytes.subarray(mypos, bytes.length));\n\n this.keyExpirationTime = seconds;\n this.keyNeverExpires = seconds === 0;\n\n break;\n case 11:\n // Preferred Symmetric Algorithms\n read_array('preferredSymmetricAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n case 12:\n // Revocation Key\n // (1 octet of class, 1 octet of public-key algorithm ID, 20\n // octets of\n // fingerprint)\n this.revocationKeyClass = bytes[mypos++];\n this.revocationKeyAlgorithm = bytes[mypos++];\n this.revocationKeyFingerprint = bytes.subarray(mypos, mypos + 20);\n break;\n\n case 16:\n // Issuer\n this.issuerKeyId.read(bytes.subarray(mypos, bytes.length));\n break;\n\n case 20:\n // Notation Data\n // We don't know how to handle anything but a text flagged data.\n if (bytes[mypos] === 0x80) {\n // We extract key/value tuple from the byte stream.\n mypos += 4;\n var m = _util2.default.readNumber(bytes.subarray(mypos, mypos + 2));\n mypos += 2;\n var n = _util2.default.readNumber(bytes.subarray(mypos, mypos + 2));\n mypos += 2;\n\n var name = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, mypos + m));\n var value = _util2.default.Uint8Array_to_str(bytes.subarray(mypos + m, mypos + m + n));\n\n this.notation = this.notation || {};\n this.notation[name] = value;\n } else {\n _util2.default.print_debug(\"Unsupported notation flag \" + bytes[mypos]);\n }\n break;\n case 21:\n // Preferred Hash Algorithms\n read_array('preferredHashAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n case 22:\n // Preferred Compression Algorithms\n read_array('preferredCompressionAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n case 23:\n // Key Server Preferences\n read_array('keyServerPreferences', bytes.subarray(mypos, bytes.length));\n break;\n case 24:\n // Preferred Key Server\n this.preferredKeyServer = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 25:\n // Primary User ID\n this.isPrimaryUserID = bytes[mypos++] !== 0;\n break;\n case 26:\n // Policy URI\n this.policyURI = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 27:\n // Key Flags\n read_array('keyFlags', bytes.subarray(mypos, bytes.length));\n break;\n case 28:\n // Signer's User ID\n this.signersUserId += _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 29:\n // Reason for Revocation\n this.reasonForRevocationFlag = bytes[mypos++];\n this.reasonForRevocationString = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, bytes.length));\n break;\n case 30:\n // Features\n read_array('features', bytes.subarray(mypos, bytes.length));\n break;\n case 31:\n {\n // Signature Target\n // (1 octet public-key algorithm, 1 octet hash algorithm, N octets hash)\n this.signatureTargetPublicKeyAlgorithm = bytes[mypos++];\n this.signatureTargetHashAlgorithm = bytes[mypos++];\n\n var len = _crypto2.default.getHashByteLength(this.signatureTargetHashAlgorithm);\n\n this.signatureTargetHash = _util2.default.Uint8Array_to_str(bytes.subarray(mypos, mypos + len));\n break;\n }\n case 32:\n // Embedded Signature\n this.embeddedSignature = new Signature();\n this.embeddedSignature.read(bytes.subarray(mypos, bytes.length));\n break;\n case 33:\n // Issuer Fingerprint\n this.issuerKeyVersion = bytes[mypos++];\n this.issuerFingerprint = bytes.subarray(mypos, bytes.length);\n if (this.issuerKeyVersion === 5) {\n this.issuerKeyId.read(this.issuerFingerprint);\n } else {\n this.issuerKeyId.read(this.issuerFingerprint.subarray(-8));\n }\n break;\n case 34:\n // Preferred AEAD Algorithms\n read_array.call(this, 'preferredAeadAlgorithms', bytes.subarray(mypos, bytes.length));\n break;\n default:\n _util2.default.print_debug(\"Unknown signature subpacket type \" + type + \" @:\" + mypos);\n }\n};\n\n// Produces data to produce signature on\nSignature.prototype.toSign = function (type, data) {\n var t = _enums2.default.signature;\n\n switch (type) {\n case t.binary:\n return data.getBytes();\n\n case t.text:\n {\n var text = data.getText();\n // normalize EOL to \\r\\n\n text = _util2.default.canonicalizeEOL(text);\n // encode UTF8\n return _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(text));\n }\n case t.standalone:\n return new Uint8Array(0);\n\n case t.cert_generic:\n case t.cert_persona:\n case t.cert_casual:\n case t.cert_positive:\n case t.cert_revocation:\n {\n var _packet = void 0;\n var tag = void 0;\n\n if (data.userid !== undefined) {\n tag = 0xB4;\n _packet = data.userid;\n } else if (data.userattribute !== undefined) {\n tag = 0xD1;\n _packet = data.userattribute;\n } else {\n throw new Error('Either a userid or userattribute packet needs to be ' + 'supplied for certification.');\n }\n\n var bytes = _packet.write();\n\n if (this.version === 4) {\n return _util2.default.concatUint8Array([this.toSign(t.key, data), new Uint8Array([tag]), _util2.default.writeNumber(bytes.length, 4), bytes]);\n } else if (this.version === 3) {\n return _util2.default.concatUint8Array([this.toSign(t.key, data), bytes]);\n }\n break;\n }\n case t.subkey_binding:\n case t.subkey_revocation:\n case t.key_binding:\n return _util2.default.concatUint8Array([this.toSign(t.key, data), this.toSign(t.key, {\n key: data.bind\n })]);\n\n case t.key:\n if (data.key === undefined) {\n throw new Error('Key packet is required for this signature.');\n }\n return data.key.writeOld();\n\n case t.key_revocation:\n return this.toSign(t.key, data);\n case t.timestamp:\n return new Uint8Array(0);\n case t.third_party:\n throw new Error('Not implemented');\n default:\n throw new Error('Unknown signature type.');\n }\n};\n\nSignature.prototype.calculateTrailer = function () {\n // calculating the trailer\n // V3 signatures don't have a trailer\n if (this.version === 3) {\n return new Uint8Array(0);\n }\n var first = new Uint8Array([4, 0xFF]); //Version, ?\n return _util2.default.concatUint8Array([first, _util2.default.writeNumber(this.signatureData.length, 4)]);\n};\n\n/**\n * verifys the signature packet. Note: not signature types are implemented\n * @param {String|Object} data data which on the signature applies\n * @param {module:packet.PublicSubkey|module:packet.PublicKey|\n * module:packet.SecretSubkey|module:packet.SecretKey} key the public key to verify the signature\n * @returns {Promise<Boolean>} True if message is verified, else false.\n * @async\n */\nSignature.prototype.verify = function () {\n var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(key, data) {\n var signatureType, publicKeyAlgorithm, hashAlgorithm, bytes, trailer, mpicount, endian, mpi, i, j;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n signatureType = _enums2.default.write(_enums2.default.signature, this.signatureType);\n publicKeyAlgorithm = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm);\n hashAlgorithm = _enums2.default.write(_enums2.default.hash, this.hashAlgorithm);\n bytes = this.toSign(signatureType, data);\n trailer = this.calculateTrailer();\n mpicount = 0;\n // Algorithm-Specific Fields for RSA signatures:\n // - multiprecision number (MPI) of RSA signature value m**d mod n.\n\n if (publicKeyAlgorithm > 0 && publicKeyAlgorithm < 4) {\n mpicount = 1;\n\n // Algorithm-Specific Fields for DSA, ECDSA, and EdDSA signatures:\n // - MPI of DSA value r.\n // - MPI of DSA value s.\n } else if (publicKeyAlgorithm === _enums2.default.publicKey.dsa || publicKeyAlgorithm === _enums2.default.publicKey.ecdsa || publicKeyAlgorithm === _enums2.default.publicKey.eddsa) {\n mpicount = 2;\n }\n\n // EdDSA signature parameters are encoded in little-endian format\n // https://tools.ietf.org/html/rfc8032#section-5.1.2\n endian = publicKeyAlgorithm === _enums2.default.publicKey.eddsa ? 'le' : 'be';\n mpi = [];\n i = 0;\n\n for (j = 0; j < mpicount; j++) {\n mpi[j] = new _mpi2.default();\n i += mpi[j].read(this.signature.subarray(i, this.signature.length), endian);\n }\n\n _context2.next = 13;\n return _crypto2.default.signature.verify(publicKeyAlgorithm, hashAlgorithm, mpi, key.params, _util2.default.concatUint8Array([bytes, this.signatureData, trailer]));\n\n case 13:\n this.verified = _context2.sent;\n return _context2.abrupt('return', this.verified);\n\n case 15:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x4, _x5) {\n return _ref4.apply(this, arguments);\n };\n}();\n\n/**\n * Verifies signature expiration date\n * @param {Date} date (optional) use the given date for verification instead of the current time\n * @returns {Boolean} true if expired\n */\nSignature.prototype.isExpired = function () {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n\n var normDate = _util2.default.normalizeDate(date);\n if (normDate !== null) {\n var expirationTime = this.getExpirationTime();\n return !(this.created <= normDate && normDate < expirationTime);\n }\n return false;\n};\n\n/**\n * Returns the expiration time of the signature or Infinity if signature does not expire\n * @returns {Date} expiration time\n */\nSignature.prototype.getExpirationTime = function () {\n return !this.signatureNeverExpires ? new Date(this.created.getTime() + this.signatureExpirationTime * 1000) : Infinity;\n};\n\n/**\n * Fix custom types after cloning\n */\nSignature.prototype.postCloneTypeFix = function () {\n this.issuerKeyId = _keyid2.default.fromClone(this.issuerKeyId);\n};\n\nexports.default = Signature;\n\n},{\"../crypto\":340,\"../enums\":359,\"../type/keyid.js\":394,\"../type/mpi.js\":395,\"../util\":398,\"./packet\":375,\"babel-runtime/core-js/object/entries\":27,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/helpers/slicedToArray\":40,\"babel-runtime/regenerator\":42}],383:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nvar VERSION = 1; // A one-octet version number of the data packet.\n\n/**\n * Implementation of the Symmetrically Encrypted Authenticated Encryption with\n * Additional Data (AEAD) Protected Data Packet\n *\n * {@link https://tools.ietf.org/html/draft-ford-openpgp-format-00#section-2.1}:\n * AEAD Protected Data Packet\n * @memberof module:packet\n * @constructor\n */\nfunction SymEncryptedAEADProtected() {\n this.tag = _enums2.default.packet.symEncryptedAEADProtected;\n this.version = VERSION;\n this.cipherAlgo = null;\n this.aeadAlgorithm = 'eax';\n this.aeadAlgo = null;\n this.chunkSizeByte = null;\n this.iv = null;\n this.encrypted = null;\n this.packets = null;\n}\n\nexports.default = SymEncryptedAEADProtected;\n\n/**\n * Parse an encrypted payload of bytes in the order: version, IV, ciphertext (see specification)\n */\n\nSymEncryptedAEADProtected.prototype.read = function (bytes) {\n var offset = 0;\n if (bytes[offset] !== VERSION) {\n // The only currently defined value is 1.\n throw new Error('Invalid packet version.');\n }\n offset++;\n if (_config2.default.aead_protect_version === 4) {\n this.cipherAlgo = bytes[offset++];\n this.aeadAlgo = bytes[offset++];\n this.chunkSizeByte = bytes[offset++];\n } else {\n this.aeadAlgo = _enums2.default.aead.experimental_gcm;\n }\n var mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n this.iv = bytes.subarray(offset, mode.ivLength + offset);\n offset += mode.ivLength;\n this.encrypted = bytes.subarray(offset, bytes.length);\n};\n\n/**\n * Write the encrypted payload of bytes in the order: version, IV, ciphertext (see specification)\n * @returns {Uint8Array} The encrypted payload\n */\nSymEncryptedAEADProtected.prototype.write = function () {\n if (_config2.default.aead_protect_version === 4) {\n return _util2.default.concatUint8Array([new Uint8Array([this.version, this.cipherAlgo, this.aeadAlgo, this.chunkSizeByte]), this.iv, this.encrypted]);\n }\n return _util2.default.concatUint8Array([new Uint8Array([this.version]), this.iv, this.encrypted]);\n};\n\n/**\n * Decrypt the encrypted payload.\n * @param {String} sessionKeyAlgorithm The session key's cipher algorithm e.g. 'aes128'\n * @param {Uint8Array} key The session key used to encrypt the payload\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedAEADProtected.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(sessionKeyAlgorithm, key) {\n var mode, data, authTag;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n\n if (!(_config2.default.aead_protect_version === 4)) {\n _context.next = 11;\n break;\n }\n\n data = this.encrypted.subarray(0, -mode.tagLength);\n authTag = this.encrypted.subarray(-mode.tagLength);\n _context.t0 = this.packets;\n _context.next = 7;\n return this.crypt('decrypt', key, data, authTag);\n\n case 7:\n _context.t1 = _context.sent;\n\n _context.t0.read.call(_context.t0, _context.t1);\n\n _context.next = 17;\n break;\n\n case 11:\n this.cipherAlgo = _enums2.default.write(_enums2.default.symmetric, sessionKeyAlgorithm);\n _context.t2 = this.packets;\n _context.next = 15;\n return this.crypt('decrypt', key, this.encrypted);\n\n case 15:\n _context.t3 = _context.sent;\n\n _context.t2.read.call(_context.t2, _context.t3);\n\n case 17:\n return _context.abrupt('return', true);\n\n case 18:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypt the packet list payload.\n * @param {String} sessionKeyAlgorithm The session key's cipher algorithm e.g. 'aes128'\n * @param {Uint8Array} key The session key used to encrypt the payload\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedAEADProtected.prototype.encrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(sessionKeyAlgorithm, key) {\n var mode, data;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n this.cipherAlgo = _enums2.default.write(_enums2.default.symmetric, sessionKeyAlgorithm);\n this.aeadAlgo = _config2.default.aead_protect_version === 4 ? _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm) : _enums2.default.aead.experimental_gcm;\n mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n _context2.next = 5;\n return _crypto2.default.random.getRandomBytes(mode.ivLength);\n\n case 5:\n this.iv = _context2.sent;\n // generate new random IV\n this.chunkSizeByte = _config2.default.aead_chunk_size_byte;\n data = this.packets.write();\n _context2.next = 10;\n return this.crypt('encrypt', key, data, data.subarray(0, 0));\n\n case 10:\n this.encrypted = _context2.sent;\n\n case 11:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * En/decrypt the payload.\n * @param {encrypt|decrypt} fn Whether to encrypt or decrypt\n * @param {Uint8Array} key The session key used to en/decrypt the payload\n * @param {Uint8Array} data The data to en/decrypt\n * @param {Uint8Array} finalChunk For encryption: empty final chunk; for decryption: final authentication tag\n * @returns {Promise<Uint8Array>}\n * @async\n */\nSymEncryptedAEADProtected.prototype.crypt = function () {\n var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(fn, key, data, finalChunk) {\n var cipher, mode, modeInstance, tagLengthIfDecrypting, chunkSize, adataBuffer, adataArray, adataTagArray, adataView, chunkIndexArray, cryptedPromises, chunkIndex;\n return _regenerator2.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n cipher = _enums2.default.read(_enums2.default.symmetric, this.cipherAlgo);\n mode = _crypto2.default[_enums2.default.read(_enums2.default.aead, this.aeadAlgo)];\n _context3.next = 4;\n return mode(cipher, key);\n\n case 4:\n modeInstance = _context3.sent;\n\n if (!(_config2.default.aead_protect_version === 4)) {\n _context3.next = 25;\n break;\n }\n\n tagLengthIfDecrypting = fn === 'decrypt' ? mode.tagLength : 0;\n chunkSize = Math.pow(2, this.chunkSizeByte + 6) + tagLengthIfDecrypting; // ((uint64_t)1 << (c + 6))\n\n adataBuffer = new ArrayBuffer(21);\n adataArray = new Uint8Array(adataBuffer, 0, 13);\n adataTagArray = new Uint8Array(adataBuffer);\n adataView = new DataView(adataBuffer);\n chunkIndexArray = new Uint8Array(adataBuffer, 5, 8);\n\n adataArray.set([0xC0 | this.tag, this.version, this.cipherAlgo, this.aeadAlgo, this.chunkSizeByte], 0);\n adataView.setInt32(13 + 4, data.length - tagLengthIfDecrypting * Math.ceil(data.length / chunkSize)); // Should be setInt64(13, ...)\n cryptedPromises = [];\n\n for (chunkIndex = 0; chunkIndex === 0 || data.length;) {\n cryptedPromises.push(modeInstance[fn](data.subarray(0, chunkSize), mode.getNonce(this.iv, chunkIndexArray), adataArray));\n // We take a chunk of data, en/decrypt it, and shift `data` to the\n // next chunk.\n data = data.subarray(chunkSize);\n adataView.setInt32(5 + 4, ++chunkIndex); // Should be setInt64(5, ...)\n }\n // After the final chunk, we either encrypt a final, empty data\n // chunk to get the final authentication tag or validate that final\n // authentication tag.\n cryptedPromises.push(modeInstance[fn](finalChunk, mode.getNonce(this.iv, chunkIndexArray), adataTagArray));\n _context3.t0 = _util2.default;\n _context3.next = 21;\n return _promise2.default.all(cryptedPromises);\n\n case 21:\n _context3.t1 = _context3.sent;\n return _context3.abrupt('return', _context3.t0.concatUint8Array.call(_context3.t0, _context3.t1));\n\n case 25:\n return _context3.abrupt('return', modeInstance[fn](data, this.iv));\n\n case 26:\n case 'end':\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x5, _x6, _x7, _x8) {\n return _ref3.apply(this, arguments);\n };\n}();\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"../util\":398,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],384:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _exports = _dereq_('asmcrypto.js/src/aes/cfb/exports');\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires asmcrypto.js\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nvar nodeCrypto = _util2.default.getNodeCrypto();\nvar Buffer = _util2.default.getNodeBuffer();\n\nvar VERSION = 1; // A one-octet version number of the data packet.\n\n/**\n * Implementation of the Sym. Encrypted Integrity Protected Data Packet (Tag 18)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.13|RFC4880 5.13}:\n * The Symmetrically Encrypted Integrity Protected Data packet is\n * a variant of the Symmetrically Encrypted Data packet. It is a new feature\n * created for OpenPGP that addresses the problem of detecting a modification to\n * encrypted data. It is used in combination with a Modification Detection Code\n * packet.\n * @memberof module:packet\n * @constructor\n */\nfunction SymEncryptedIntegrityProtected() {\n this.tag = _enums2.default.packet.symEncryptedIntegrityProtected;\n this.version = VERSION;\n /** The encrypted payload. */\n this.encrypted = null; // string\n /**\n * If after decrypting the packet this is set to true,\n * a modification has been detected and thus the contents\n * should be discarded.\n * @type {Boolean}\n */\n this.modification = false;\n this.packets = null;\n}\n\nSymEncryptedIntegrityProtected.prototype.read = function (bytes) {\n // - A one-octet version number. The only currently defined value is 1.\n if (bytes[0] !== VERSION) {\n throw new Error('Invalid packet version.');\n }\n\n // - Encrypted data, the output of the selected symmetric-key cipher\n // operating in Cipher Feedback mode with shift amount equal to the\n // block size of the cipher (CFB-n where n is the block size).\n this.encrypted = bytes.subarray(1, bytes.length);\n};\n\nSymEncryptedIntegrityProtected.prototype.write = function () {\n return _util2.default.concatUint8Array([new Uint8Array([VERSION]), this.encrypted]);\n};\n\n/**\n * Encrypt the payload in the packet.\n * @param {String} sessionKeyAlgorithm The selected symmetric encryption algorithm to be used e.g. 'aes128'\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedIntegrityProtected.prototype.encrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(sessionKeyAlgorithm, key) {\n var bytes, prefixrandom, repeat, prefix, mdc, tohash, hash;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n bytes = this.packets.write();\n _context.next = 3;\n return _crypto2.default.getPrefixRandom(sessionKeyAlgorithm);\n\n case 3:\n prefixrandom = _context.sent;\n repeat = new Uint8Array([prefixrandom[prefixrandom.length - 2], prefixrandom[prefixrandom.length - 1]]);\n prefix = _util2.default.concatUint8Array([prefixrandom, repeat]);\n mdc = new Uint8Array([0xD3, 0x14]); // modification detection code packet\n\n tohash = _util2.default.concatUint8Array([bytes, mdc]);\n hash = _crypto2.default.hash.sha1(_util2.default.concatUint8Array([prefix, tohash]));\n\n tohash = _util2.default.concatUint8Array([tohash, hash]);\n\n if (sessionKeyAlgorithm.substr(0, 3) === 'aes') {\n // AES optimizations. Native code for node, asmCrypto for browser.\n this.encrypted = aesEncrypt(sessionKeyAlgorithm, prefix, tohash, key);\n } else {\n this.encrypted = _crypto2.default.cfb.encrypt(prefixrandom, sessionKeyAlgorithm, tohash, key, false);\n this.encrypted = this.encrypted.subarray(0, prefix.length + tohash.length);\n }\n return _context.abrupt('return', true);\n\n case 12:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Decrypts the encrypted data contained in the packet.\n * @param {String} sessionKeyAlgorithm The selected symmetric encryption algorithm to be used e.g. 'aes128'\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedIntegrityProtected.prototype.decrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(sessionKeyAlgorithm, key) {\n var decrypted, prefix, bytes, tohash, mdc;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n decrypted = void 0;\n\n if (sessionKeyAlgorithm.substr(0, 3) === 'aes') {\n // AES optimizations. Native code for node, asmCrypto for browser.\n decrypted = aesDecrypt(sessionKeyAlgorithm, this.encrypted, key);\n } else {\n decrypted = _crypto2.default.cfb.decrypt(sessionKeyAlgorithm, key, this.encrypted, false);\n }\n\n // there must be a modification detection code packet as the\n // last packet and everything gets hashed except the hash itself\n prefix = _crypto2.default.cfb.mdc(sessionKeyAlgorithm, key, this.encrypted);\n bytes = decrypted.subarray(0, decrypted.length - 20);\n tohash = _util2.default.concatUint8Array([prefix, bytes]);\n\n this.hash = _util2.default.Uint8Array_to_str(_crypto2.default.hash.sha1(tohash));\n mdc = _util2.default.Uint8Array_to_str(decrypted.subarray(decrypted.length - 20, decrypted.length));\n\n if (!(this.hash !== mdc)) {\n _context2.next = 11;\n break;\n }\n\n throw new Error('Modification detected.');\n\n case 11:\n this.packets.read(decrypted.subarray(0, decrypted.length - 22));\n\n case 12:\n return _context2.abrupt('return', true);\n\n case 13:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nexports.default = SymEncryptedIntegrityProtected;\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nfunction aesEncrypt(algo, prefix, pt, key) {\n if (nodeCrypto) {\n // Node crypto library.\n return nodeEncrypt(algo, prefix, pt, key);\n } // asm.js fallback\n return _exports.AES_CFB.encrypt(_util2.default.concatUint8Array([prefix, pt]), key);\n}\n\nfunction aesDecrypt(algo, ct, key) {\n var pt = void 0;\n if (nodeCrypto) {\n // Node crypto library.\n pt = nodeDecrypt(algo, ct, key);\n } else {\n // asm.js fallback\n pt = _exports.AES_CFB.decrypt(ct, key);\n }\n return pt.subarray(_crypto2.default.cipher[algo].blockSize + 2, pt.length); // Remove random prefix\n}\n\nfunction nodeEncrypt(algo, prefix, pt, key) {\n key = new Buffer(key);\n var iv = new Buffer(new Uint8Array(_crypto2.default.cipher[algo].blockSize));\n var cipherObj = new nodeCrypto.createCipheriv('aes-' + algo.substr(3, 3) + '-cfb', key, iv);\n var ct = cipherObj.update(new Buffer(_util2.default.concatUint8Array([prefix, pt])));\n return new Uint8Array(ct);\n}\n\nfunction nodeDecrypt(algo, ct, key) {\n ct = new Buffer(ct);\n key = new Buffer(key);\n var iv = new Buffer(new Uint8Array(_crypto2.default.cipher[algo].blockSize));\n var decipherObj = new nodeCrypto.createDecipheriv('aes-' + algo.substr(3, 3) + '-cfb', key, iv);\n var pt = decipherObj.update(ct);\n return new Uint8Array(pt);\n}\n\n},{\"../crypto\":340,\"../enums\":359,\"../util\":398,\"asmcrypto.js/src/aes/cfb/exports\":7,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],385:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _s2k = _dereq_('../type/s2k');\n\nvar _s2k2 = _interopRequireDefault(_s2k);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Public-Key Encrypted Session Key Packets (Tag 1)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.1|RFC4880 5.1}:\n * A Public-Key Encrypted Session Key packet holds the session key\n * used to encrypt a message. Zero or more Public-Key Encrypted Session Key\n * packets and/or Symmetric-Key Encrypted Session Key packets may precede a\n * Symmetrically Encrypted Data Packet, which holds an encrypted message. The\n * message is encrypted with the session key, and the session key is itself\n * encrypted and stored in the Encrypted Session Key packet(s). The\n * Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted\n * Session Key packet for each OpenPGP key to which the message is encrypted.\n * The recipient of the message finds a session key that is encrypted to their\n * public key, decrypts the session key, and then uses the session key to\n * decrypt the message.\n * @memberof module:packet\n * @constructor\n */\nfunction SymEncryptedSessionKey() {\n this.tag = _enums2.default.packet.symEncryptedSessionKey;\n this.version = _config2.default.aead_protect && _config2.default.aead_protect_version === 4 ? 5 : 4;\n this.sessionKey = null;\n this.sessionKeyEncryptionAlgorithm = null;\n this.sessionKeyAlgorithm = 'aes256';\n this.aeadAlgorithm = _enums2.default.read(_enums2.default.aead, _config2.default.aead_mode);\n this.encrypted = null;\n this.s2k = null;\n this.iv = null;\n}\n\n/**\n * Parsing function for a symmetric encrypted session key packet (tag 3).\n *\n * @param {Uint8Array} input Payload of a tag 1 packet\n * @param {Integer} position Position to start reading from the input string\n * @param {Integer} len\n * Length of the packet or the remaining length of\n * input at position\n * @returns {module:packet.SymEncryptedSessionKey} Object representation\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires type/s2k\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n */\n\nSymEncryptedSessionKey.prototype.read = function (bytes) {\n var offset = 0;\n\n // A one-octet version number. The only currently defined version is 4.\n this.version = bytes[offset++];\n\n // A one-octet number describing the symmetric algorithm used.\n var algo = _enums2.default.read(_enums2.default.symmetric, bytes[offset++]);\n\n if (this.version === 5) {\n // A one-octet AEAD algorithm.\n this.aeadAlgorithm = _enums2.default.read(_enums2.default.aead, bytes[offset++]);\n }\n\n // A string-to-key (S2K) specifier, length as defined above.\n this.s2k = new _s2k2.default();\n offset += this.s2k.read(bytes.subarray(offset, bytes.length));\n\n if (this.version === 5) {\n var mode = _crypto2.default[this.aeadAlgorithm];\n\n // A starting initialization vector of size specified by the AEAD\n // algorithm.\n this.iv = bytes.subarray(offset, offset += mode.ivLength);\n }\n\n // The encrypted session key itself, which is decrypted with the\n // string-to-key object. This is optional in version 4.\n if (this.version === 5 || offset < bytes.length) {\n this.encrypted = bytes.subarray(offset, bytes.length);\n this.sessionKeyEncryptionAlgorithm = algo;\n } else {\n this.sessionKeyAlgorithm = algo;\n }\n};\n\nSymEncryptedSessionKey.prototype.write = function () {\n var algo = this.encrypted === null ? this.sessionKeyAlgorithm : this.sessionKeyEncryptionAlgorithm;\n\n var bytes = void 0;\n\n if (this.version === 5) {\n bytes = _util2.default.concatUint8Array([new Uint8Array([this.version, _enums2.default.write(_enums2.default.symmetric, algo), _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm)]), this.s2k.write(), this.iv, this.encrypted]);\n } else {\n bytes = _util2.default.concatUint8Array([new Uint8Array([this.version, _enums2.default.write(_enums2.default.symmetric, algo)]), this.s2k.write()]);\n\n if (this.encrypted !== null) {\n bytes = _util2.default.concatUint8Array([bytes, this.encrypted]);\n }\n }\n\n return bytes;\n};\n\n/**\n * Decrypts the session key\n * @param {String} passphrase The passphrase in string form\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedSessionKey.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(passphrase) {\n var algo, length, key, mode, adata, modeInstance, decrypted;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n algo = this.sessionKeyEncryptionAlgorithm !== null ? this.sessionKeyEncryptionAlgorithm : this.sessionKeyAlgorithm;\n length = _crypto2.default.cipher[algo].keySize;\n key = this.s2k.produce_key(passphrase, length);\n\n if (!(this.version === 5)) {\n _context.next = 14;\n break;\n }\n\n mode = _crypto2.default[this.aeadAlgorithm];\n adata = new Uint8Array([0xC0 | this.tag, this.version, _enums2.default.write(_enums2.default.symmetric, this.sessionKeyEncryptionAlgorithm), _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm)]);\n _context.next = 8;\n return mode(algo, key);\n\n case 8:\n modeInstance = _context.sent;\n _context.next = 11;\n return modeInstance.decrypt(this.encrypted, this.iv, adata);\n\n case 11:\n this.sessionKey = _context.sent;\n _context.next = 15;\n break;\n\n case 14:\n if (this.encrypted !== null) {\n decrypted = _crypto2.default.cfb.normalDecrypt(algo, key, this.encrypted, null);\n\n\n this.sessionKeyAlgorithm = _enums2.default.read(_enums2.default.symmetric, decrypted[0]);\n this.sessionKey = decrypted.subarray(1, decrypted.length);\n } else {\n this.sessionKey = key;\n }\n\n case 15:\n return _context.abrupt('return', true);\n\n case 16:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypts the session key\n * @param {String} passphrase The passphrase in string form\n * @returns {Promise<Boolean>}\n * @async\n */\nSymEncryptedSessionKey.prototype.encrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(passphrase) {\n var algo, length, key, mode, adata, modeInstance, algo_enum, private_key;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n algo = this.sessionKeyEncryptionAlgorithm !== null ? this.sessionKeyEncryptionAlgorithm : this.sessionKeyAlgorithm;\n\n\n this.sessionKeyEncryptionAlgorithm = algo;\n\n this.s2k = new _s2k2.default();\n _context2.next = 5;\n return _crypto2.default.random.getRandomBytes(8);\n\n case 5:\n this.s2k.salt = _context2.sent;\n length = _crypto2.default.cipher[algo].keySize;\n key = this.s2k.produce_key(passphrase, length);\n\n if (!(this.sessionKey === null)) {\n _context2.next = 12;\n break;\n }\n\n _context2.next = 11;\n return _crypto2.default.generateSessionKey(this.sessionKeyAlgorithm);\n\n case 11:\n this.sessionKey = _context2.sent;\n\n case 12:\n if (!(this.version === 5)) {\n _context2.next = 26;\n break;\n }\n\n mode = _crypto2.default[this.aeadAlgorithm];\n _context2.next = 16;\n return _crypto2.default.random.getRandomBytes(mode.ivLength);\n\n case 16:\n this.iv = _context2.sent;\n // generate new random IV\n adata = new Uint8Array([0xC0 | this.tag, this.version, _enums2.default.write(_enums2.default.symmetric, this.sessionKeyEncryptionAlgorithm), _enums2.default.write(_enums2.default.aead, this.aeadAlgorithm)]);\n _context2.next = 20;\n return mode(algo, key);\n\n case 20:\n modeInstance = _context2.sent;\n _context2.next = 23;\n return modeInstance.encrypt(this.sessionKey, this.iv, adata);\n\n case 23:\n this.encrypted = _context2.sent;\n _context2.next = 29;\n break;\n\n case 26:\n algo_enum = new Uint8Array([_enums2.default.write(_enums2.default.symmetric, this.sessionKeyAlgorithm)]);\n private_key = _util2.default.concatUint8Array([algo_enum, this.sessionKey]);\n\n this.encrypted = _crypto2.default.cfb.normalEncrypt(algo, key, private_key, null);\n\n case 29:\n return _context2.abrupt('return', true);\n\n case 30:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Fix custom types after cloning\n */\nSymEncryptedSessionKey.prototype.postCloneTypeFix = function () {\n this.s2k = _s2k2.default.fromClone(this.s2k);\n};\n\nexports.default = SymEncryptedSessionKey;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"../type/s2k\":397,\"../util\":398,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],386:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Symmetrically Encrypted Data Packet (Tag 9)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.7|RFC4880 5.7}:\n * The Symmetrically Encrypted Data packet contains data encrypted with a\n * symmetric-key algorithm. When it has been decrypted, it contains other\n * packets (usually a literal data packet or compressed data packet, but in\n * theory other Symmetrically Encrypted Data packets or sequences of packets\n * that form whole OpenPGP messages).\n * @memberof module:packet\n * @constructor\n */\nfunction SymmetricallyEncrypted() {\n /**\n * Packet type\n * @type {module:enums.packet}\n */\n this.tag = _enums2.default.packet.symmetricallyEncrypted;\n /**\n * Encrypted secret-key data\n */\n this.encrypted = null;\n /**\n * Decrypted packets contained within.\n * @type {module:packet.List}\n */\n this.packets = null;\n /**\n * When true, decrypt fails if message is not integrity protected\n * @see module:config.ignore_mdc_error\n */\n this.ignore_mdc_error = _config2.default.ignore_mdc_error;\n} // GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires config\n * @requires crypto\n * @requires enums\n */\n\nSymmetricallyEncrypted.prototype.read = function (bytes) {\n this.encrypted = bytes;\n};\n\nSymmetricallyEncrypted.prototype.write = function () {\n return this.encrypted;\n};\n\n/**\n * Decrypt the symmetrically-encrypted packet data\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} sessionKeyAlgorithm Symmetric key algorithm to use\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymmetricallyEncrypted.prototype.decrypt = function () {\n var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(sessionKeyAlgorithm, key) {\n var decrypted;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n decrypted = _crypto2.default.cfb.decrypt(sessionKeyAlgorithm, key, this.encrypted, true);\n // If MDC errors are not being ignored, all missing MDC packets in symmetrically encrypted data should throw an error\n\n if (this.ignore_mdc_error) {\n _context.next = 3;\n break;\n }\n\n throw new Error('Decryption failed due to missing MDC.');\n\n case 3:\n this.packets.read(decrypted);\n\n return _context.abrupt('return', true);\n\n case 5:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Encrypt the symmetrically-encrypted packet data\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} sessionKeyAlgorithm Symmetric key algorithm to use\n * @param {Uint8Array} key The key of cipher blocksize length to be used\n * @returns {Promise<Boolean>}\n * @async\n */\nSymmetricallyEncrypted.prototype.encrypt = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(algo, key) {\n var data;\n return _regenerator2.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n data = this.packets.write();\n _context2.t0 = _crypto2.default.cfb;\n _context2.next = 4;\n return _crypto2.default.getPrefixRandom(algo);\n\n case 4:\n _context2.t1 = _context2.sent;\n _context2.t2 = algo;\n _context2.t3 = data;\n _context2.t4 = key;\n this.encrypted = _context2.t0.encrypt.call(_context2.t0, _context2.t1, _context2.t2, _context2.t3, _context2.t4, true);\n return _context2.abrupt('return', true);\n\n case 10:\n case 'end':\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nexports.default = SymmetricallyEncrypted;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums\":359,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}],387:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the Trust Packet (Tag 12)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.10|RFC4880 5.10}:\n * The Trust packet is used only within keyrings and is not normally\n * exported. Trust packets contain data that record the user's\n * specifications of which key holders are trustworthy introducers,\n * along with other information that implementing software uses for\n * trust information. The format of Trust packets is defined by a given\n * implementation.\n *\n * Trust packets SHOULD NOT be emitted to output streams that are\n * transferred to other users, and they SHOULD be ignored on any input\n * other than local keyring files.\n * @memberof module:packet\n * @constructor\n */\nfunction Trust() {\n this.tag = _enums2.default.packet.trust;\n}\n\n/**\n * Parsing function for a trust packet (tag 12).\n * Currently not implemented as we ignore trust packets\n * @param {String} byptes payload of a tag 12 packet\n */\n/**\n * @requires enums\n */\n\nTrust.prototype.read = function () {}; // TODO\n\nexports.default = Trust;\n\n},{\"../enums\":359}],388:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the User Attribute Packet (Tag 17)\n *\n * The User Attribute packet is a variation of the User ID packet. It\n * is capable of storing more types of data than the User ID packet,\n * which is limited to text. Like the User ID packet, a User Attribute\n * packet may be certified by the key owner (\"self-signed\") or any other\n * key owner who cares to certify it. Except as noted, a User Attribute\n * packet may be used anywhere that a User ID packet may be used.\n *\n * While User Attribute packets are not a required part of the OpenPGP\n * standard, implementations SHOULD provide at least enough\n * compatibility to properly handle a certification signature on the\n * User Attribute packet. A simple way to do this is by treating the\n * User Attribute packet as a User ID packet with opaque contents, but\n * an implementation may use any method desired.\n * @memberof module:packet\n * @constructor\n */\nfunction UserAttribute() {\n this.tag = _enums2.default.packet.userAttribute;\n this.attributes = [];\n}\n\n/**\n * parsing function for a user attribute packet (tag 17).\n * @param {Uint8Array} input payload of a tag 17 packet\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires packet\n * @requires enums\n * @requires util\n */\n\nUserAttribute.prototype.read = function (bytes) {\n var i = 0;\n while (i < bytes.length) {\n var len = _packet2.default.readSimpleLength(bytes.subarray(i, bytes.length));\n i += len.offset;\n\n this.attributes.push(_util2.default.Uint8Array_to_str(bytes.subarray(i, i + len.len)));\n i += len.len;\n }\n};\n\n/**\n * Creates a binary representation of the user attribute packet\n * @returns {Uint8Array} string representation\n */\nUserAttribute.prototype.write = function () {\n var arr = [];\n for (var i = 0; i < this.attributes.length; i++) {\n arr.push(_packet2.default.writeSimpleLength(this.attributes[i].length));\n arr.push(_util2.default.str_to_Uint8Array(this.attributes[i]));\n }\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Compare for equality\n * @param {module:packet.UserAttribute} usrAttr\n * @returns {Boolean} true if equal\n */\nUserAttribute.prototype.equals = function (usrAttr) {\n if (!usrAttr || !(usrAttr instanceof UserAttribute)) {\n return false;\n }\n return this.attributes.every(function (attr, index) {\n return attr === usrAttr.attributes[index];\n });\n};\n\nexports.default = UserAttribute;\n\n},{\"../enums\":359,\"../util\":398,\"./packet\":375}],389:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Implementation of the User ID Packet (Tag 13)\n *\n * A User ID packet consists of UTF-8 text that is intended to represent\n * the name and email address of the key holder. By convention, it\n * includes an RFC 2822 [RFC2822] mail name-addr, but there are no\n * restrictions on its content. The packet length in the header\n * specifies the length of the User ID.\n * @memberof module:packet\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires enums\n * @requires util\n */\n\nfunction Userid() {\n this.tag = _enums2.default.packet.userid;\n /** A string containing the user id. Usually in the form\n * John Doe <john@example.com>\n * @type {String}\n */\n this.userid = '';\n\n this.name = '';\n this.email = '';\n this.comment = '';\n}\n\n/**\n * Parsing function for a user id packet (tag 13).\n * @param {Uint8Array} input payload of a tag 13 packet\n */\nUserid.prototype.read = function (bytes) {\n this.parse(_util2.default.decode_utf8(_util2.default.Uint8Array_to_str(bytes)));\n};\n\n/**\n * Parse userid string, e.g. 'John Doe <john@example.com>'\n */\nUserid.prototype.parse = function (userid) {\n try {\n (0, _assign2.default)(this, _util2.default.parseUserId(userid));\n } catch (e) {}\n this.userid = userid;\n};\n\n/**\n * Creates a binary representation of the user id packet\n * @returns {Uint8Array} binary representation\n */\nUserid.prototype.write = function () {\n return _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(this.userid));\n};\n\n/**\n * Set userid string from object, e.g. { name:'Phil Zimmermann', email:'phil@openpgp.org' }\n */\nUserid.prototype.format = function (userid) {\n if (_util2.default.isString(userid)) {\n userid = _util2.default.parseUserId(userid);\n }\n (0, _assign2.default)(this, userid);\n this.userid = _util2.default.formatUserId(userid);\n};\n\nexports.default = Userid;\n\n},{\"../enums\":359,\"../util\":398,\"babel-runtime/core-js/object/assign\":24}],390:[function(_dereq_,module,exports){\n'use strict';\n\nvar _assign = _dereq_('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _symbol = _dereq_('babel-runtime/core-js/symbol');\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _from = _dereq_('babel-runtime/core-js/array/from');\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable import/no-extraneous-dependencies */\n// Old browser polyfills\n// All are listed as dev dependencies because Node does not need them\n// and for browser babel will take care of it\n\nif (typeof window.fetch === 'undefined') {\n _dereq_('whatwg-fetch');\n}\nif (typeof Array.prototype.fill === 'undefined') {\n _dereq_('core-js/fn/array/fill');\n}\nif (typeof Array.prototype.find === 'undefined') {\n _dereq_('core-js/fn/array/find');\n}\nif (typeof _from2.default === 'undefined') {\n _dereq_('core-js/fn/array/from');\n}\n\n// No if-statement on Promise because of IE11. Otherwise Promise is undefined in the service worker.\n_dereq_('core-js/fn/promise');\n\nif (typeof Uint8Array.from === 'undefined') {\n _dereq_('core-js/fn/typed/uint8-array');\n}\nif (typeof String.prototype.repeat === 'undefined') {\n _dereq_('core-js/fn/string/repeat');\n}\nif (typeof _symbol2.default === 'undefined') {\n _dereq_('core-js/fn/symbol');\n}\nif (typeof _assign2.default === 'undefined') {\n _dereq_('core-js/fn/object/assign');\n}\n\n},{\"babel-runtime/core-js/array/from\":20,\"babel-runtime/core-js/object/assign\":24,\"babel-runtime/core-js/symbol\":33,\"core-js/fn/array/fill\":48,\"core-js/fn/array/find\":49,\"core-js/fn/array/from\":50,\"core-js/fn/object/assign\":51,\"core-js/fn/promise\":52,\"core-js/fn/string/repeat\":53,\"core-js/fn/symbol\":54,\"core-js/fn/typed/uint8-array\":55,\"whatwg-fetch\":321}],391:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Signature = Signature;\nexports.readArmored = readArmored;\nexports.read = read;\n\nvar _armor = _dereq_('./encoding/armor');\n\nvar _armor2 = _interopRequireDefault(_armor);\n\nvar _packet = _dereq_('./packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nvar _enums = _dereq_('./enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @class\n * @classdesc Class that represents an OpenPGP signature.\n * @param {module:packet.List} packetlist The signature packets\n */\nfunction Signature(packetlist) {\n if (!(this instanceof Signature)) {\n return new Signature(packetlist);\n }\n this.packets = packetlist || new _packet2.default.List();\n}\n\n/**\n * Returns ASCII armored text of signature\n * @returns {String} ASCII armor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @requires encoding/armor\n * @requires packet\n * @requires enums\n * @module signature\n */\n\nSignature.prototype.armor = function () {\n return _armor2.default.encode(_enums2.default.armor.signature, this.packets.write());\n};\n\n/**\n * reads an OpenPGP armored signature and returns a signature object\n * @param {String} armoredText text to be parsed\n * @returns {Signature} new signature object\n * @static\n */\nfunction readArmored(armoredText) {\n var input = _armor2.default.decode(armoredText).data;\n return read(input);\n}\n\n/**\n * reads an OpenPGP signature as byte array and returns a signature object\n * @param {Uint8Array} input binary signature\n * @returns {Signature} new signature object\n * @static\n */\nfunction read(input) {\n var packetlist = new _packet2.default.List();\n packetlist.read(input);\n return new Signature(packetlist);\n}\n\n},{\"./encoding/armor\":357,\"./enums\":359,\"./packet\":371}],392:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\nfunction ECDHSymmetricKey(data) {\n if (typeof data === 'undefined') {\n data = new Uint8Array([]);\n } else if (_util2.default.isString(data)) {\n data = _util2.default.str_to_Uint8Array(data);\n } else {\n data = new Uint8Array(data);\n }\n this.data = data;\n}\n\n/**\n * Read an ECDHSymmetricKey from an Uint8Array\n * @param {Uint8Array} input Where to read the encoded symmetric key from\n * @returns {Number} Number of read bytes\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Encoded symmetric key for ECDH\n *\n * @requires util\n * @module type/ecdh_symkey\n */\n\nECDHSymmetricKey.prototype.read = function (input) {\n if (input.length >= 1) {\n var length = input[0];\n if (input.length >= 1 + length) {\n this.data = input.subarray(1, 1 + length);\n return 1 + this.data.length;\n }\n }\n throw new Error('Invalid symmetric key');\n};\n\n/**\n * Write an ECDHSymmetricKey as an Uint8Array\n * @returns {Uint8Array} An array containing the value\n */\nECDHSymmetricKey.prototype.write = function () {\n return _util2.default.concatUint8Array([new Uint8Array([this.data.length]), this.data]);\n};\n\nECDHSymmetricKey.fromClone = function (clone) {\n return new ECDHSymmetricKey(clone.data);\n};\n\nexports.default = ECDHSymmetricKey;\n\n},{\"../util\":398}],393:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n * @param {enums.hash} hash Hash algorithm\n * @param {enums.symmetric} cipher Symmetric algorithm\n */\nfunction KDFParams(data) {\n if (data && data.length === 2) {\n this.hash = data[0];\n this.cipher = data[1];\n } else {\n this.hash = _enums2.default.hash.sha1;\n this.cipher = _enums2.default.symmetric.aes128;\n }\n}\n\n/**\n * Read KDFParams from an Uint8Array\n * @param {Uint8Array} input Where to read the KDFParams from\n * @returns {Number} Number of read bytes\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of type KDF parameters\n *\n * {@link https://tools.ietf.org/html/rfc6637#section-7|RFC 6637 7}:\n * A key derivation function (KDF) is necessary to implement the EC\n * encryption. The Concatenation Key Derivation Function (Approved\n * Alternative 1) [NIST-SP800-56A] with the KDF hash function that is\n * SHA2-256 [FIPS-180-3] or stronger is REQUIRED.\n * @requires enums\n * @module type/kdf_params\n */\n\nKDFParams.prototype.read = function (input) {\n if (input.length < 4 || input[0] !== 3 || input[1] !== 1) {\n throw new Error('Cannot read KDFParams');\n }\n this.hash = input[2];\n this.cipher = input[3];\n return 4;\n};\n\n/**\n * Write KDFParams to an Uint8Array\n * @returns {Uint8Array} Array with the KDFParams value\n */\nKDFParams.prototype.write = function () {\n return new Uint8Array([3, 1, this.hash, this.cipher]);\n};\n\nKDFParams.fromClone = function (clone) {\n return new KDFParams([clone.hash, clone.cipher]);\n};\n\nexports.default = KDFParams;\n\n},{\"../enums.js\":359}],394:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../util.js');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\nfunction Keyid() {\n this.bytes = '';\n}\n\n/**\n * Parsing method for a key id\n * @param {Uint8Array} input Input to read the key id from\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of type key id\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-3.3|RFC4880 3.3}:\n * A Key ID is an eight-octet scalar that identifies a key.\n * Implementations SHOULD NOT assume that Key IDs are unique. The\n * section \"Enhanced Key Formats\" below describes how Key IDs are\n * formed.\n * @requires util\n * @module type/keyid\n */\n\nKeyid.prototype.read = function (bytes) {\n this.bytes = _util2.default.Uint8Array_to_str(bytes.subarray(0, 8));\n};\n\nKeyid.prototype.write = function () {\n return _util2.default.str_to_Uint8Array(this.bytes);\n};\n\nKeyid.prototype.toHex = function () {\n return _util2.default.str_to_hex(this.bytes);\n};\n\n/**\n * Checks equality of Key ID's\n * @param {Keyid} keyid\n * @param {Boolean} matchWildcard Indicates whether to check if either keyid is a wildcard\n */\nKeyid.prototype.equals = function (keyid) {\n var matchWildcard = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return matchWildcard && (keyid.isWildcard() || this.isWildcard()) || this.bytes === keyid.bytes;\n};\n\nKeyid.prototype.isNull = function () {\n return this.bytes === '';\n};\n\nKeyid.prototype.isWildcard = function () {\n return (/^0+$/.test(this.toHex())\n );\n};\n\nKeyid.mapToHex = function (keyId) {\n return keyId.toHex();\n};\n\nKeyid.fromClone = function (clone) {\n var keyid = new Keyid();\n keyid.bytes = clone.bytes;\n return keyid;\n};\n\nKeyid.fromId = function (hex) {\n var keyid = new Keyid();\n keyid.read(_util2.default.hex_to_Uint8Array(hex));\n return keyid;\n};\n\nKeyid.wildcard = function () {\n var keyid = new Keyid();\n keyid.read(new Uint8Array(8));\n return keyid;\n};\n\nexports.default = Keyid;\n\n},{\"../util.js\":398}],395:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _bn = _dereq_('bn.js');\n\nvar _bn2 = _interopRequireDefault(_bn);\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// Hint: We hold our MPIs as an array of octets in big endian format preceding a two\n// octet scalar: MPI: [a,b,c,d,e,f]\n// - MPI size: (a << 8) | b\n// - MPI = c | d << 8 | e << ((MPI.length -2)*8) | f ((MPI.length -2)*8)\n\n/**\n * Implementation of type MPI ({@link https://tools.ietf.org/html/rfc4880#section-3.2|RFC4880 3.2})\n * Multiprecision integers (also called MPIs) are unsigned integers used\n * to hold large integers such as the ones used in cryptographic\n * calculations.\n * An MPI consists of two pieces: a two-octet scalar that is the length\n * of the MPI in bits followed by a string of octets that contain the\n * actual integer.\n * @requires bn.js\n * @requires util\n * @module type/mpi\n */\n\nfunction MPI(data) {\n /** An implementation dependent integer */\n if (data instanceof MPI) {\n this.data = data.data;\n } else if (_bn2.default.isBN(data)) {\n this.fromBN(data);\n } else if (_util2.default.isUint8Array(data)) {\n this.fromUint8Array(data);\n } else if (_util2.default.isString(data)) {\n this.fromString(data);\n } else {\n this.data = null;\n }\n}\n\n/**\n * Parsing function for a MPI ({@link https://tools.ietf.org/html/rfc4880#section-3.2|RFC 4880 3.2}).\n * @param {Uint8Array} input Payload of MPI data\n * @param {String} endian Endianness of the data; 'be' for big-endian or 'le' for little-endian\n * @returns {Integer} Length of data read\n */\nMPI.prototype.read = function (bytes) {\n var endian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'be';\n\n if (_util2.default.isString(bytes)) {\n bytes = _util2.default.str_to_Uint8Array(bytes);\n }\n\n var bits = bytes[0] << 8 | bytes[1];\n var bytelen = bits + 7 >>> 3;\n var payload = bytes.subarray(2, 2 + bytelen);\n\n this.fromUint8Array(payload, endian);\n\n return 2 + bytelen;\n};\n\n/**\n * Converts the mpi object to a bytes as specified in\n * {@link https://tools.ietf.org/html/rfc4880#section-3.2|RFC4880 3.2}\n * @param {String} endian Endianness of the payload; 'be' for big-endian or 'le' for little-endian\n * @param {Integer} length Length of the data part of the MPI\n * @returns {Uint8Aray} mpi Byte representation\n */\nMPI.prototype.write = function (endian, length) {\n return _util2.default.Uint8Array_to_MPI(this.toUint8Array(endian, length));\n};\n\nMPI.prototype.bitLength = function () {\n return (this.data.length - 1) * 8 + _util2.default.nbits(this.data[0]);\n};\n\nMPI.prototype.byteLength = function () {\n return this.data.length;\n};\n\nMPI.prototype.toUint8Array = function (endian, length) {\n endian = endian || 'be';\n length = length || this.data.length;\n\n var payload = new Uint8Array(length);\n var start = length - this.data.length;\n if (start < 0) {\n throw new Error('Payload is too large.');\n }\n\n payload.set(this.data, start);\n if (endian === 'le') {\n payload.reverse();\n }\n\n return payload;\n};\n\nMPI.prototype.fromUint8Array = function (bytes) {\n var endian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'be';\n\n this.data = new Uint8Array(bytes.length);\n this.data.set(bytes);\n\n if (endian === 'le') {\n this.data.reverse();\n }\n};\n\nMPI.prototype.toString = function () {\n return _util2.default.Uint8Array_to_str(this.toUint8Array());\n};\n\nMPI.prototype.fromString = function (str) {\n var endian = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'be';\n\n this.fromUint8Array(_util2.default.str_to_Uint8Array(str), endian);\n};\n\nMPI.prototype.toBN = function () {\n return new _bn2.default(this.toUint8Array());\n};\n\nMPI.prototype.fromBN = function (bn) {\n this.data = bn.toArrayLike(Uint8Array);\n};\n\nMPI.fromClone = function (clone) {\n return new MPI(clone.data);\n};\n\nexports.default = MPI;\n\n},{\"../util\":398,\"bn.js\":44}],396:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = _dereq_('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _enums = _dereq_('../enums');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\n// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Wrapper to an OID value\n *\n * {@link https://tools.ietf.org/html/rfc6637#section-11|RFC6637, section 11}:\n * The sequence of octets in the third column is the result of applying\n * the Distinguished Encoding Rules (DER) to the ASN.1 Object Identifier\n * with subsequent truncation. The truncation removes the two fields of\n * encoded Object Identifier. The first omitted field is one octet\n * representing the Object Identifier tag, and the second omitted field\n * is the length of the Object Identifier body. For example, the\n * complete ASN.1 DER encoding for the NIST P-256 curve OID is \"06 08 2A\n * 86 48 CE 3D 03 01 07\", from which the first entry in the table above\n * is constructed by omitting the first two octets. Only the truncated\n * sequence of octets is the valid representation of a curve OID.\n * @requires util\n * @requires enums\n * @module type/oid\n */\n\nfunction OID(oid) {\n if (oid instanceof OID) {\n this.oid = oid.oid;\n } else if (_util2.default.isArray(oid) || _util2.default.isUint8Array(oid)) {\n oid = new Uint8Array(oid);\n if (oid[0] === 0x06) {\n // DER encoded oid byte array\n if (oid[1] !== oid.length - 2) {\n throw new Error('Length mismatch in DER encoded oid');\n }\n oid = oid.subarray(2);\n }\n this.oid = oid;\n } else {\n this.oid = '';\n }\n}\n\n/**\n * Method to read an OID object\n * @param {Uint8Array} input Where to read the OID from\n * @returns {Number} Number of read bytes\n */\nOID.prototype.read = function (input) {\n if (input.length >= 1) {\n var length = input[0];\n if (input.length >= 1 + length) {\n this.oid = input.subarray(1, 1 + length);\n return 1 + this.oid.length;\n }\n }\n throw new Error('Invalid oid');\n};\n\n/**\n * Serialize an OID object\n * @returns {Uint8Array} Array with the serialized value the OID\n */\nOID.prototype.write = function () {\n return _util2.default.concatUint8Array([new Uint8Array([this.oid.length]), this.oid]);\n};\n\n/**\n * Serialize an OID object as a hex string\n * @returns {string} String with the hex value of the OID\n */\nOID.prototype.toHex = function () {\n return _util2.default.Uint8Array_to_hex(this.oid);\n};\n\n/**\n * If a known curve object identifier, return the canonical name of the curve\n * @returns {string} String with the canonical name of the curve\n */\nOID.prototype.getName = function () {\n var hex = this.toHex();\n if (_enums2.default.curve[hex]) {\n return _enums2.default.write(_enums2.default.curve, hex);\n } else {\n throw new Error('Unknown curve object identifier.');\n }\n};\n\nOID.fromClone = function (clone) {\n return new OID(clone.oid);\n};\n\nexports.default = OID;\n\n},{\"../enums\":359,\"../util\":398}],397:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _config = _dereq_('../config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _enums = _dereq_('../enums.js');\n\nvar _enums2 = _interopRequireDefault(_enums);\n\nvar _util = _dereq_('../util.js');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n */\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of the String-to-key specifier\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-3.7|RFC4880 3.7}:\n * String-to-key (S2K) specifiers are used to convert passphrase strings\n * into symmetric-key encryption/decryption keys. They are used in two\n * places, currently: to encrypt the secret part of private keys in the\n * private keyring, and to convert passphrases to encryption keys for\n * symmetrically encrypted messages.\n * @requires config\n * @requires crypto\n * @requires enums\n * @requires util\n * @module type/s2k\n */\n\nfunction S2K() {\n /** @type {module:enums.hash} */\n this.algorithm = 'sha256';\n /** @type {module:enums.s2k} */\n this.type = 'iterated';\n /** @type {Integer} */\n this.c = _config2.default.s2k_iteration_count_byte;\n /** Eight bytes of salt in a binary string.\n * @type {String}\n */\n this.salt = null;\n}\n\nS2K.prototype.get_count = function () {\n // Exponent bias, defined in RFC4880\n var expbias = 6;\n\n return 16 + (this.c & 15) << (this.c >> 4) + expbias;\n};\n\n/**\n * Parsing function for a string-to-key specifier ({@link https://tools.ietf.org/html/rfc4880#section-3.7|RFC 4880 3.7}).\n * @param {String} input Payload of string-to-key specifier\n * @returns {Integer} Actual length of the object\n */\nS2K.prototype.read = function (bytes) {\n var i = 0;\n this.type = _enums2.default.read(_enums2.default.s2k, bytes[i++]);\n this.algorithm = _enums2.default.read(_enums2.default.hash, bytes[i++]);\n\n switch (this.type) {\n case 'simple':\n break;\n\n case 'salted':\n this.salt = bytes.subarray(i, i + 8);\n i += 8;\n break;\n\n case 'iterated':\n this.salt = bytes.subarray(i, i + 8);\n i += 8;\n\n // Octet 10: count, a one-octet, coded value\n this.c = bytes[i++];\n break;\n\n case 'gnu':\n if (_util2.default.Uint8Array_to_str(bytes.subarray(i, 3)) === \"GNU\") {\n i += 3; // GNU\n var gnuExtType = 1000 + bytes[i++];\n if (gnuExtType === 1001) {\n this.type = gnuExtType;\n // GnuPG extension mode 1001 -- don't write secret key at all\n } else {\n throw new Error(\"Unknown s2k gnu protection mode.\");\n }\n } else {\n throw new Error(\"Unknown s2k type.\");\n }\n break;\n\n default:\n throw new Error(\"Unknown s2k type.\");\n }\n\n return i;\n};\n\n/**\n * Serializes s2k information\n * @returns {Uint8Array} binary representation of s2k\n */\nS2K.prototype.write = function () {\n var arr = [new Uint8Array([_enums2.default.write(_enums2.default.s2k, this.type), _enums2.default.write(_enums2.default.hash, this.algorithm)])];\n\n switch (this.type) {\n case 'simple':\n break;\n case 'salted':\n arr.push(this.salt);\n break;\n case 'iterated':\n arr.push(this.salt);\n arr.push(new Uint8Array([this.c]));\n break;\n case 'gnu':\n throw new Error(\"GNU s2k type not supported.\");\n default:\n throw new Error(\"Unknown s2k type.\");\n }\n\n return _util2.default.concatUint8Array(arr);\n};\n\n/**\n * Produces a key using the specified passphrase and the defined\n * hashAlgorithm\n * @param {String} passphrase Passphrase containing user input\n * @returns {Uint8Array} Produced key with a length corresponding to\n * hashAlgorithm hash length\n */\nS2K.prototype.produce_key = function (passphrase, numBytes) {\n passphrase = _util2.default.str_to_Uint8Array(_util2.default.encode_utf8(passphrase));\n\n function round(prefix, s2k) {\n var algorithm = _enums2.default.write(_enums2.default.hash, s2k.algorithm);\n\n switch (s2k.type) {\n case 'simple':\n return _crypto2.default.hash.digest(algorithm, _util2.default.concatUint8Array([prefix, passphrase]));\n\n case 'salted':\n return _crypto2.default.hash.digest(algorithm, _util2.default.concatUint8Array([prefix, s2k.salt, passphrase]));\n\n case 'iterated':\n {\n var count = s2k.get_count();\n var data = _util2.default.concatUint8Array([s2k.salt, passphrase]);\n var isp = new Array(Math.ceil(count / data.length));\n\n isp = _util2.default.concatUint8Array(isp.fill(data));\n\n if (isp.length > count) {\n isp = isp.subarray(0, count);\n }\n\n return _crypto2.default.hash.digest(algorithm, _util2.default.concatUint8Array([prefix, isp]));\n }\n case 'gnu':\n throw new Error(\"GNU s2k type not supported.\");\n\n default:\n throw new Error(\"Unknown s2k type.\");\n }\n }\n\n var arr = [];\n var rlength = 0;\n var prefix = new Uint8Array(numBytes);\n\n for (var _i = 0; _i < numBytes; _i++) {\n prefix[_i] = 0;\n }\n\n var i = 0;\n while (rlength < numBytes) {\n var result = round(prefix.subarray(0, i), this);\n arr.push(result);\n rlength += result.length;\n i++;\n }\n\n return _util2.default.concatUint8Array(arr).subarray(0, numBytes);\n};\n\nS2K.fromClone = function (clone) {\n var s2k = new S2K();\n s2k.algorithm = clone.algorithm;\n s2k.type = clone.type;\n s2k.c = clone.c;\n s2k.salt = clone.salt;\n return s2k;\n};\n\nexports.default = S2K;\n\n},{\"../config\":325,\"../crypto\":340,\"../enums.js\":359,\"../util.js\":398}],398:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray2 = _dereq_('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _values = _dereq_('babel-runtime/core-js/object/values');\n\nvar _values2 = _interopRequireDefault(_values);\n\nvar _addressRfc = _dereq_('address-rfc2822');\n\nvar _addressRfc2 = _interopRequireDefault(_addressRfc);\n\nvar _config = _dereq_('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _util = _dereq_('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _base = _dereq_('./encoding/base64');\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/* eslint-disable no-console */\n\n/**\n * This object contains utility functions\n * @requires address-rfc2822\n * @requires config\n * @requires encoding/base64\n * @module util\n */\n\nvar isIE11 = typeof navigator !== 'undefined' && !!navigator.userAgent.match(/Trident\\/7\\.0.*rv:([0-9.]+).*\\).*Gecko$/); // re-import module to access util functions\nexports.default = {\n isString: function isString(data) {\n return typeof data === 'string' || String.prototype.isPrototypeOf(data);\n },\n\n isArray: function isArray(data) {\n return Array.prototype.isPrototypeOf(data);\n },\n\n isUint8Array: function isUint8Array(data) {\n return Uint8Array.prototype.isPrototypeOf(data);\n },\n\n /**\n * Get transferable objects to pass buffers with zero copy (similar to \"pass by reference\" in C++)\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage\n * @param {Object} obj the options object to be passed to the web worker\n * @returns {Array<ArrayBuffer>} an array of binary data to be passed\n */\n getTransferables: function getTransferables(obj) {\n // Internet Explorer does not support Transferable objects.\n if (isIE11) {\n return undefined;\n }\n if (_config2.default.zero_copy && Object.prototype.isPrototypeOf(obj)) {\n var transferables = [];\n _util2.default.collectBuffers(obj, transferables);\n return transferables.length ? transferables : undefined;\n }\n },\n\n collectBuffers: function collectBuffers(obj, collection) {\n if (!obj) {\n return;\n }\n if (_util2.default.isUint8Array(obj) && collection.indexOf(obj.buffer) === -1) {\n collection.push(obj.buffer);\n return;\n }\n if (Object.prototype.isPrototypeOf(obj)) {\n (0, _values2.default)(obj).forEach(function (value) {\n // recursively search all children\n _util2.default.collectBuffers(value, collection);\n });\n }\n },\n\n readNumber: function readNumber(bytes) {\n var n = 0;\n for (var i = 0; i < bytes.length; i++) {\n n += Math.pow(256, i) * bytes[bytes.length - 1 - i];\n }\n return n;\n },\n\n writeNumber: function writeNumber(n, bytes) {\n var b = new Uint8Array(bytes);\n for (var i = 0; i < bytes; i++) {\n b[i] = n >> 8 * (bytes - i - 1) & 0xFF;\n }\n\n return b;\n },\n\n readDate: function readDate(bytes) {\n var n = _util2.default.readNumber(bytes);\n var d = new Date(n * 1000);\n return d;\n },\n\n writeDate: function writeDate(time) {\n var numeric = Math.floor(time.getTime() / 1000);\n\n return _util2.default.writeNumber(numeric, 4);\n },\n\n normalizeDate: function normalizeDate() {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n\n return time === null ? time : new Date(Math.floor(+time / 1000) * 1000);\n },\n\n /**\n * Create hex string from a binary\n * @param {String} str String to convert\n * @returns {String} String containing the hexadecimal values\n */\n str_to_hex: function str_to_hex(str) {\n if (str === null) {\n return \"\";\n }\n var r = [];\n var e = str.length;\n var c = 0;\n var h = void 0;\n while (c < e) {\n h = str.charCodeAt(c++).toString(16);\n while (h.length < 2) {\n h = \"0\" + h;\n }\n r.push(\"\" + h);\n }\n return r.join('');\n },\n\n /**\n * Create binary string from a hex encoded string\n * @param {String} str Hex string to convert\n * @returns {String}\n */\n hex_to_str: function hex_to_str(hex) {\n var str = '';\n for (var i = 0; i < hex.length; i += 2) {\n str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));\n }\n return str;\n },\n\n /**\n * Convert a Uint8Array to an MPI-formatted Uint8Array.\n * Note: the output is **not** an MPI object.\n * @see {@link module:type/mpi/MPI.fromUint8Array}\n * @see {@link module:type/mpi/MPI.toUint8Array}\n * @param {Uint8Array} bin An array of 8-bit integers to convert\n * @returns {Uint8Array} MPI-formatted Uint8Array\n */\n Uint8Array_to_MPI: function Uint8Array_to_MPI(bin) {\n var size = (bin.length - 1) * 8 + _util2.default.nbits(bin[0]);\n var prefix = Uint8Array.from([(size & 0xFF00) >> 8, size & 0xFF]);\n return _util2.default.concatUint8Array([prefix, bin]);\n },\n\n /**\n * Convert a Base-64 encoded string an array of 8-bit integer\n *\n * Note: accepts both Radix-64 and URL-safe strings\n * @param {String} base64 Base-64 encoded string to convert\n * @returns {Uint8Array} An array of 8-bit integers\n */\n b64_to_Uint8Array: function b64_to_Uint8Array(base64) {\n // atob(base64.replace(/-/g, '+').replace(/_/g, '/'));\n return _base2.default.decode(base64.replace(/-/g, '+').replace(/_/g, '/'));\n },\n\n /**\n * Convert an array of 8-bit integer to a Base-64 encoded string\n * @param {Uint8Array} bytes An array of 8-bit integers to convert\n * @param {bool} url If true, output is URL-safe\n * @returns {String} Base-64 encoded string\n */\n Uint8Array_to_b64: function Uint8Array_to_b64(bytes, url) {\n // btoa(util.Uint8Array_to_str(bytes)).replace(/\\+/g, '-').replace(/\\//g, '_');\n return _base2.default.encode(bytes, url).replace('\\n', '');\n },\n\n /**\n * Convert a hex string to an array of 8-bit integers\n * @param {String} hex A hex string to convert\n * @returns {Uint8Array} An array of 8-bit integers\n */\n hex_to_Uint8Array: function hex_to_Uint8Array(hex) {\n var result = new Uint8Array(hex.length >> 1);\n for (var k = 0; k < hex.length >> 1; k++) {\n result[k] = parseInt(hex.substr(k << 1, 2), 16);\n }\n return result;\n },\n\n /**\n * Convert an array of 8-bit integers to a hex string\n * @param {Uint8Array} bytes Array of 8-bit integers to convert\n * @returns {String} Hexadecimal representation of the array\n */\n Uint8Array_to_hex: function Uint8Array_to_hex(bytes) {\n var r = [];\n var e = bytes.length;\n var c = 0;\n var h = void 0;\n while (c < e) {\n h = bytes[c++].toString(16);\n while (h.length < 2) {\n h = \"0\" + h;\n }\n r.push(\"\" + h);\n }\n return r.join('');\n },\n\n /**\n * Convert a string to an array of 8-bit integers\n * @param {String} str String to convert\n * @returns {Uint8Array} An array of 8-bit integers\n */\n str_to_Uint8Array: function str_to_Uint8Array(str) {\n if (!_util2.default.isString(str)) {\n throw new Error('str_to_Uint8Array: Data must be in the form of a string');\n }\n\n var result = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n result[i] = str.charCodeAt(i);\n }\n return result;\n },\n\n /**\n * Convert an array of 8-bit integers to a string\n * @param {Uint8Array} bytes An array of 8-bit integers to convert\n * @returns {String} String representation of the array\n */\n Uint8Array_to_str: function Uint8Array_to_str(bytes) {\n bytes = new Uint8Array(bytes);\n var result = [];\n var bs = 1 << 14;\n var j = bytes.length;\n\n for (var i = 0; i < j; i += bs) {\n result.push(String.fromCharCode.apply(String, bytes.subarray(i, i + bs < j ? i + bs : j)));\n }\n return result.join('');\n },\n\n /**\n * Convert a native javascript string to a string of utf8 bytes\n * @param {String} str The string to convert\n * @returns {String} A valid squence of utf8 bytes\n */\n encode_utf8: function encode_utf8(str) {\n return unescape(encodeURIComponent(str));\n },\n\n /**\n * Convert a string of utf8 bytes to a native javascript string\n * @param {String} utf8 A valid squence of utf8 bytes\n * @returns {String} A native javascript string\n */\n decode_utf8: function decode_utf8(utf8) {\n if (typeof utf8 !== 'string') {\n throw new Error('Parameter \"utf8\" is not of type string');\n }\n try {\n return decodeURIComponent(escape(utf8));\n } catch (e) {\n return utf8;\n }\n },\n\n /**\n * Concat Uint8arrays\n * @param {Array<Uint8array>} Array of Uint8Arrays to concatenate\n * @returns {Uint8array} Concatenated array\n */\n concatUint8Array: function concatUint8Array(arrays) {\n var totalLength = 0;\n for (var i = 0; i < arrays.length; i++) {\n if (!_util2.default.isUint8Array(arrays[i])) {\n throw new Error('concatUint8Array: Data must be in the form of a Uint8Array');\n }\n\n totalLength += arrays[i].length;\n }\n\n var result = new Uint8Array(totalLength);\n var pos = 0;\n arrays.forEach(function (element) {\n result.set(element, pos);\n pos += element.length;\n });\n\n return result;\n },\n\n /**\n * Deep copy Uint8Array\n * @param {Uint8Array} Array to copy\n * @returns {Uint8Array} new Uint8Array\n */\n copyUint8Array: function copyUint8Array(array) {\n if (!_util2.default.isUint8Array(array)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n var copy = new Uint8Array(array.length);\n copy.set(array);\n return copy;\n },\n\n /**\n * Check Uint8Array equality\n * @param {Uint8Array} first array\n * @param {Uint8Array} second array\n * @returns {Boolean} equality\n */\n equalsUint8Array: function equalsUint8Array(array1, array2) {\n if (!_util2.default.isUint8Array(array1) || !_util2.default.isUint8Array(array2)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (var i = 0; i < array1.length; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Calculates a 16bit sum of a Uint8Array by adding each character\n * codes modulus 65535\n * @param {Uint8Array} Uint8Array to create a sum of\n * @returns {Integer} An integer containing the sum of all character\n * codes % 65535\n */\n calc_checksum: function calc_checksum(text) {\n var checksum = {\n s: 0,\n add: function add(sadd) {\n this.s = (this.s + sadd) % 65536;\n }\n };\n for (var i = 0; i < text.length; i++) {\n checksum.add(text[i]);\n }\n return checksum.s;\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * @param {String} str String of the debug message\n */\n print_debug: function print_debug(str) {\n if (_config2.default.debug) {\n console.log(str);\n }\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * Different than print_debug because will call Uint8Array_to_hex iff necessary.\n * @param {String} str String of the debug message\n */\n print_debug_hexarray_dump: function print_debug_hexarray_dump(str, arrToHex) {\n if (_config2.default.debug) {\n str += ': ' + _util2.default.Uint8Array_to_hex(arrToHex);\n console.log(str);\n }\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * Different than print_debug because will call str_to_hex iff necessary.\n * @param {String} str String of the debug message\n */\n print_debug_hexstr_dump: function print_debug_hexstr_dump(str, strToHex) {\n if (_config2.default.debug) {\n str += _util2.default.str_to_hex(strToHex);\n console.log(str);\n }\n },\n\n /**\n * Helper function to print a debug error. Debug\n * messages are only printed if\n * @link module:config/config.debug is set to true.\n * @param {String} str String of the debug message\n */\n print_debug_error: function print_debug_error(error) {\n if (_config2.default.debug) {\n console.error(error);\n }\n },\n\n getLeftNBits: function getLeftNBits(array, bitcount) {\n var rest = bitcount % 8;\n if (rest === 0) {\n return array.subarray(0, bitcount / 8);\n }\n var bytes = (bitcount - rest) / 8 + 1;\n var result = array.subarray(0, bytes);\n return _util2.default.shiftRight(result, 8 - rest); // +String.fromCharCode(string.charCodeAt(bytes -1) << (8-rest) & 0xFF);\n },\n\n // returns bit length of the integer x\n nbits: function nbits(x) {\n var r = 1;\n var t = x >>> 16;\n if (t !== 0) {\n x = t;\n r += 16;\n }\n t = x >> 8;\n if (t !== 0) {\n x = t;\n r += 8;\n }\n t = x >> 4;\n if (t !== 0) {\n x = t;\n r += 4;\n }\n t = x >> 2;\n if (t !== 0) {\n x = t;\n r += 2;\n }\n t = x >> 1;\n if (t !== 0) {\n x = t;\n r += 1;\n }\n return r;\n },\n\n /**\n * If S[1] == 0, then double(S) == (S[2..128] || 0);\n * otherwise, double(S) == (S[2..128] || 0) xor\n * (zeros(120) || 10000111).\n *\n * Both OCB and EAX (through CMAC) require this function to be constant-time.\n *\n * @param {Uint8Array} data\n */\n double: function double(data) {\n var double = new Uint8Array(data.length);\n var last = data.length - 1;\n for (var i = 0; i < last; i++) {\n double[i] = data[i] << 1 ^ data[i + 1] >> 7;\n }\n double[last] = data[last] << 1 ^ (data[0] >> 7) * 0x87;\n return double;\n },\n\n /**\n * Shift a Uint8Array to the right by n bits\n * @param {Uint8Array} array The array to shift\n * @param {Integer} bits Amount of bits to shift (MUST be smaller\n * than 8)\n * @returns {String} Resulting array.\n */\n shiftRight: function shiftRight(array, bits) {\n if (bits) {\n for (var i = array.length - 1; i >= 0; i--) {\n array[i] >>= bits;\n if (i > 0) {\n array[i] |= array[i - 1] << 8 - bits;\n }\n }\n }\n return array;\n },\n\n /**\n * Get native Web Cryptography api, only the current version of the spec.\n * The default configuration is to use the api when available. But it can\n * be deactivated with config.use_native\n * @returns {Object} The SubtleCrypto api or 'undefined'\n */\n getWebCrypto: function getWebCrypto() {\n if (!_config2.default.use_native) {\n return;\n }\n\n return typeof window !== 'undefined' && window.crypto && window.crypto.subtle;\n },\n\n /**\n * Get native Web Cryptography api for all browsers, including legacy\n * implementations of the spec e.g IE11 and Safari 8/9. The default\n * configuration is to use the api when available. But it can be deactivated\n * with config.use_native\n * @returns {Object} The SubtleCrypto api or 'undefined'\n */\n getWebCryptoAll: function getWebCryptoAll() {\n if (!_config2.default.use_native) {\n return;\n }\n\n if (typeof window !== 'undefined') {\n if (window.crypto) {\n return window.crypto.subtle || window.crypto.webkitSubtle;\n }\n if (window.msCrypto) {\n return window.msCrypto.subtle;\n }\n }\n },\n\n /**\n * Detect Node.js runtime.\n */\n detectNode: function detectNode() {\n return typeof window === 'undefined';\n },\n\n /**\n * Get native Node.js crypto api. The default configuration is to use\n * the api when available. But it can also be deactivated with config.use_native\n * @returns {Object} The crypto module or 'undefined'\n */\n getNodeCrypto: function getNodeCrypto() {\n if (!_util2.default.detectNode() || !_config2.default.use_native) {\n return;\n }\n\n return _dereq_('crypto');\n },\n\n /**\n * Get native Node.js Buffer constructor. This should be used since\n * Buffer is not available under browserify.\n * @returns {Function} The Buffer constructor or 'undefined'\n */\n getNodeBuffer: function getNodeBuffer() {\n if (!_util2.default.detectNode()) {\n return;\n }\n\n // This \"hack\" allows us to access the native node buffer module.\n // otherwise, it gets replaced with the browserified version\n // eslint-disable-next-line no-useless-concat, import/no-dynamic-require\n return _dereq_('buf' + 'fer').Buffer;\n },\n\n getNodeZlib: function getNodeZlib() {\n if (!_util2.default.detectNode() || !_config2.default.use_native) {\n return;\n }\n\n return _dereq_('zlib');\n },\n\n isEmailAddress: function isEmailAddress(data) {\n if (!_util2.default.isString(data)) {\n return false;\n }\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+([a-zA-Z]{2,}|xn--[a-zA-Z\\-0-9]+)))$/;\n return re.test(data);\n },\n\n /**\n * Format user id for internal use.\n */\n formatUserId: function formatUserId(id) {\n // name and email address can be empty but must be of the correct type\n if (id.name && !_util2.default.isString(id.name) || id.email && !_util2.default.isEmailAddress(id.email)) {\n throw new Error('Invalid user id format');\n }\n return new _addressRfc2.default.Address(id.name, id.email, id.comment).format();\n },\n\n /**\n * Parse user id.\n */\n parseUserId: function parseUserId(userid) {\n try {\n var _rfc2822$parse = _addressRfc2.default.parse(userid),\n _rfc2822$parse2 = (0, _slicedToArray3.default)(_rfc2822$parse, 1),\n _rfc2822$parse2$ = _rfc2822$parse2[0],\n name = _rfc2822$parse2$.phrase,\n email = _rfc2822$parse2$.address,\n comment = _rfc2822$parse2$.comment;\n\n return { name: name, email: email, comment: comment.replace(/^\\(|\\)$/g, '') };\n } catch (e) {\n throw new Error('Invalid user id format');\n }\n },\n\n /**\n * Normalize line endings to \\r\\n\n */\n canonicalizeEOL: function canonicalizeEOL(text) {\n return text.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\").replace(/\\n/g, \"\\r\\n\");\n },\n\n /**\n * Convert line endings from canonicalized \\r\\n to native \\n\n */\n nativeEOL: function nativeEOL(text) {\n return text.replace(/\\r\\n/g, \"\\n\");\n },\n\n /**\n * Remove trailing spaces and tabs from each line\n */\n removeTrailingSpaces: function removeTrailingSpaces(text) {\n return text.replace(/[ \\t]+$/mg, \"\");\n }\n};\n\n},{\"./config\":325,\"./encoding/base64\":358,\"./util\":398,\"address-rfc2822\":1,\"babel-runtime/core-js/object/values\":31,\"babel-runtime/helpers/slicedToArray\":40,\"crypto\":\"crypto\",\"zlib\":\"zlib\"}],399:[function(_dereq_,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _promise = _dereq_('babel-runtime/core-js/promise');\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = _dereq_('babel-runtime/regenerator');\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = _dereq_('babel-runtime/helpers/asyncToGenerator');\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _util = _dereq_('../util.js');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _crypto = _dereq_('../crypto');\n\nvar _crypto2 = _interopRequireDefault(_crypto);\n\nvar _packet = _dereq_('../packet');\n\nvar _packet2 = _interopRequireDefault(_packet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Initializes a new proxy and loads the web worker\n * @param {String} path The path to the worker or 'openpgp.worker.js' by default\n * @param {Number} n number of workers to initialize if path given\n * @param {Object} config config The worker configuration\n * @param {Array<Object>} worker alternative to path parameter: web worker initialized with 'openpgp.worker.js'\n * @constructor\n */\nfunction AsyncProxy() {\n var _this = this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$path = _ref.path,\n path = _ref$path === undefined ? 'openpgp.worker.js' : _ref$path,\n _ref$n = _ref.n,\n n = _ref$n === undefined ? 1 : _ref$n,\n _ref$workers = _ref.workers,\n workers = _ref$workers === undefined ? [] : _ref$workers,\n config = _ref.config;\n\n /**\n * Message handling\n */\n var handleMessage = function handleMessage(workerId) {\n return function (event) {\n var msg = event.data;\n switch (msg.event) {\n case 'method-return':\n if (msg.err) {\n // fail\n var err = new Error(msg.err);\n // add worker stack\n err.workerStack = msg.stack;\n _this.tasks[msg.id].reject(err);\n } else {\n // success\n _this.tasks[msg.id].resolve(msg.data);\n }\n delete _this.tasks[msg.id];\n _this.workers[workerId].requests--;\n break;\n case 'request-seed':\n _this.seedRandom(workerId, msg.amount);\n break;\n default:\n throw new Error('Unknown Worker Event.');\n }\n };\n };\n\n if (workers.length) {\n this.workers = workers;\n } else {\n this.workers = [];\n while (this.workers.length < n) {\n this.workers.push(new Worker(path));\n }\n }\n\n var workerId = 0;\n this.workers.forEach(function (worker) {\n worker.requests = 0;\n worker.onmessage = handleMessage(workerId++);\n worker.onerror = function (e) {\n throw new Error('Unhandled error in openpgp worker: ' + e.message + ' (' + e.filename + ':' + e.lineno + ')');\n };\n\n if (config) {\n worker.postMessage({ event: 'configure', config: config });\n }\n });\n\n // Cannot rely on task order being maintained, use object keyed by request ID to track tasks\n this.tasks = {};\n this.currentID = 0;\n}\n\n/**\n * Get new request ID\n * @returns {integer} New unique request ID\n*/\n// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides functions for maintaining browser workers\n * @see module:openpgp.initWorker\n * @see module:openpgp.getWorker\n * @see module:openpgp.destroyWorker\n * @see module:worker/worker\n * @requires util\n * @requires crypto\n * @requires packet\n * @module worker/async_proxy\n */\n\nAsyncProxy.prototype.getID = function () {\n return this.currentID++;\n};\n\n/**\n * Send message to worker with random data\n * @param {Integer} size Number of bytes to send\n * @async\n */\nAsyncProxy.prototype.seedRandom = function () {\n var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(workerId, size) {\n var buf;\n return _regenerator2.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _crypto2.default.random.getRandomBytes(size);\n\n case 2:\n buf = _context.sent;\n\n this.workers[workerId].postMessage({ event: 'seed-random', buf: buf }, _util2.default.getTransferables(buf));\n\n case 4:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}();\n\n/**\n * Terminates the workers\n */\nAsyncProxy.prototype.terminate = function () {\n this.workers.forEach(function (worker) {\n worker.terminate();\n });\n};\n\n/**\n * Generic proxy function that handles all commands from the public api.\n * @param {String} method the public api function to be delegated to the worker thread\n * @param {Object} options the api function's options\n * @returns {Promise} see the corresponding public api functions for their return types\n * @async\n */\nAsyncProxy.prototype.delegate = function (method, options) {\n var _this2 = this;\n\n var id = this.getID();\n var requests = this.workers.map(function (worker) {\n return worker.requests;\n });\n var minRequests = Math.min(requests);\n var workerId = 0;\n for (; workerId < this.workers.length; workerId++) {\n if (this.workers[workerId].requests === minRequests) {\n break;\n }\n }\n\n return new _promise2.default(function (_resolve, reject) {\n // clone packets (for web worker structured cloning algorithm)\n _this2.workers[workerId].postMessage({ id: id, event: method, options: _packet2.default.clone.clonePackets(options) }, _util2.default.getTransferables(options));\n _this2.workers[workerId].requests++;\n\n // remember to handle parsing cloned packets from worker\n _this2.tasks[id] = { resolve: function resolve(data) {\n return _resolve(_packet2.default.clone.parseClonedPackets(data, method));\n }, reject: reject };\n });\n};\n\nexports.default = AsyncProxy;\n\n},{\"../crypto\":340,\"../packet\":371,\"../util.js\":398,\"babel-runtime/core-js/promise\":32,\"babel-runtime/helpers/asyncToGenerator\":35,\"babel-runtime/regenerator\":42}]},{},[361])(361)\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/openpgp/dist/openpgp.js\n// module id = 13\n// module chunks = 0","/*!\n * Vue.js v2.5.16\n * (c) 2014-2018 Evan You\n * Released under the MIT License.\n */\n'use strict';\n\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// these helpers produces better vm code in JS engines due to their\n// explicitness and function inlining\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value e.g. [object Object]\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : typeof val === 'object'\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert a input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if a attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether the object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it... e.g.\n * PhantomJS 1.x. Technically we don't need this anymore since native bind is\n * now more performant in most browsers, but removing it would be breaking for\n * code that was able to run in PhantomJS 1.x, so this must be kept for\n * backwards compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/**\n * Return same value\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a static keys string from compiler modules.\n */\nfunction genStaticKeys (modules) {\n return modules.reduce(function (keys, m) {\n return keys.concat(m.staticKeys || [])\n }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured'\n];\n\n/* */\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n})\n\n/* */\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = /[^\\w.$]/;\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = (function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {};\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// the current target watcher being evaluated.\n// this is globally unique because there could be only one\n// watcher being evaluated at any time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (_target) {\n if (Dep.target) { targetStack.push(Dep.target); }\n Dep.target = _target;\n}\n\nfunction popTarget () {\n Dep.target = targetStack.pop();\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n vnode.children,\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n var augment = hasProto\n ? protoAugment\n : copyAugment;\n augment(value, arrayMethods, arrayKeys);\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through each property and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment an target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src, keys) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment an target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n if (!getter && arguments.length === 2) {\n val = obj[key];\n }\n var setter = property && property.set;\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n var keys = Object.keys(from);\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n return childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'can only contain alphanumeric characters and the hyphen, ' +\n 'and must start with a letter.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def = dirs[key];\n if (typeof def === 'function') {\n dirs[key] = { bind: def, update: def };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n var extendsFrom = child.extends;\n if (extendsFrom) {\n parent = mergeOptions(parent, extendsFrom, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false && isObject(value) && ('@binding' in value))\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n if (!valid) {\n warn(\n \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', ')) +\n \", got \" + (toRawType(value)) + \".\",\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n logError(e, null, 'config.errorHandler');\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n/* globals MessageChannel */\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using both microtasks and (macro) tasks.\n// In < 2.4 we used microtasks everywhere, but there are some scenarios where\n// microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690) or even between bubbling of the same\n// event (#6566). However, using (macro) tasks everywhere also has subtle problems\n// when state is changed right before repaint (e.g. #6813, out-in transitions).\n// Here we use microtask by default, but expose a way to force (macro) task when\n// needed (e.g. in event handlers attached by v-on).\nvar microTimerFunc;\nvar macroTimerFunc;\nvar useMacroTask = false;\n\n// Determine (macro) task defer implementation.\n// Technically setImmediate should be the ideal choice, but it's only available\n// in IE. The only polyfill that consistently queues the callback after all DOM\n// events triggered in the same loop is by using MessageChannel.\n/* istanbul ignore if */\nif (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n macroTimerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else if (typeof MessageChannel !== 'undefined' && (\n isNative(MessageChannel) ||\n // PhantomJS\n MessageChannel.toString() === '[object MessageChannelConstructor]'\n)) {\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = flushCallbacks;\n macroTimerFunc = function () {\n port.postMessage(1);\n };\n} else {\n /* istanbul ignore next */\n macroTimerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\n// Determine microtask defer implementation.\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n microTimerFunc = function () {\n p.then(flushCallbacks);\n // in problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n} else {\n // fallback to macro\n microTimerFunc = macroTimerFunc;\n}\n\n/**\n * Wrap a function so that if any code inside triggers state change,\n * the changes are queued using a (macro) task instead of a microtask.\n */\nfunction withMacroTask (fn) {\n return fn._withTask || (fn._withTask = function () {\n useMacroTask = true;\n var res = fn.apply(null, arguments);\n useMacroTask = false;\n return res\n })\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n if (useMacroTask) {\n macroTimerFunc();\n } else {\n microTimerFunc();\n }\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n perf.clearMeasures(name);\n };\n }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';\n if (!has && !isAllowed) {\n warnNonPresent(target, key);\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n warnNonPresent(target, key);\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n cloned[i].apply(null, arguments$1);\n }\n } else {\n // return handler return value for single handlers\n return fns.apply(null, arguments)\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n vm\n) {\n var name, def, cur, old, event;\n for (name in on) {\n def = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n /* istanbul ignore if */\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur);\n }\n add(event.name, cur, event.once, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor,\n context\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (isDef(factory.contexts)) {\n // already pending\n factory.contexts.push(context);\n } else {\n var contexts = factory.contexts = [context];\n var sync = true;\n\n var forceRender = function () {\n for (var i = 0, l = contexts.length; i < l; i++) {\n contexts[i].$forceUpdate();\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender();\n }\n });\n\n var reject = once(function (reason) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender();\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (typeof res.then === 'function') {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isDef(res.component) && typeof res.component.then === 'function') {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n setTimeout(function () {\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender();\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n setTimeout(function () {\n if (isUndef(factory.resolved)) {\n reject(\n process.env.NODE_ENV !== 'production'\n ? (\"timeout (\" + (res.timeout) + \"ms)\")\n : null\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn, once) {\n if (once) {\n target.$once(event, fn);\n } else {\n target.$on(event, fn);\n }\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var this$1 = this;\n\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n this$1.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var this$1 = this;\n\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n this$1.$off(event[i], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n if (fn) {\n // specific handler\n var cb;\n var i$1 = cbs.length;\n while (i$1--) {\n cb = cbs[i$1];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i$1, 1);\n break\n }\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (process.env.NODE_ENV !== 'production') {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n for (var i = 0, l = cbs.length; i < l; i++) {\n try {\n cbs[i].apply(vm, args);\n } catch (e) {\n handleError(e, vm, (\"event handler for \\\"\" + event + \"\\\"\"));\n }\n }\n }\n return vm\n };\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n var slots = {};\n if (!children) {\n return slots\n }\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n (slots.default || (slots.default = [])).push(child);\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res\n) {\n res = res || {};\n for (var i = 0; i < fns.length; i++) {\n if (Array.isArray(fns[i])) {\n resolveScopedSlots(fns[i], res);\n } else {\n res[fns[i].key] = fns[i].fn;\n }\n }\n return res\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n if (vm._isMounted) {\n callHook(vm, 'beforeUpdate');\n }\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(\n vm.$el, vnode, hydrating, false /* removeOnly */,\n vm.$options._parentElm,\n vm.$options._refElm\n );\n // no need for the ref nodes after initial patch\n // this prevents keeping a detached DOM tree in memory (#5851)\n vm.$options._parentElm = vm.$options._refElm = null;\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n activeInstance = prevActiveInstance;\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction mountComponent (\n vm,\n el,\n hydrating\n) {\n vm.$el = el;\n if (!vm.$options.render) {\n vm.$options.render = createEmptyVNode;\n if (process.env.NODE_ENV !== 'production') {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n callHook(vm, 'beforeMount');\n\n var updateComponent;\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n updateComponent = function () {\n var name = vm._name;\n var id = vm._uid;\n var startTag = \"vue-perf-start:\" + id;\n var endTag = \"vue-perf-end:\" + id;\n\n mark(startTag);\n var vnode = vm._render();\n mark(endTag);\n measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n mark(startTag);\n vm._update(vnode, hydrating);\n mark(endTag);\n measure((\"vue \" + name + \" patch\"), startTag, endTag);\n };\n } else {\n updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n }\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, null, true /* isRenderWatcher */);\n hydrating = false;\n\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook(vm, 'mounted');\n }\n return vm\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n if (process.env.NODE_ENV !== 'production') {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren\n var hasChildren = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n parentVnode.data.scopedSlots || // has new scoped slots\n vm.$scopedSlots !== emptyObject // has old scoped slots\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (hasChildren) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n try {\n handlers[i].call(vm);\n } catch (e) {\n handleError(e, vm, (hook + \" hook\"));\n }\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (process.env.NODE_ENV !== 'production') {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (process.env.NODE_ENV !== 'production' && has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\nvar uid$1 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$1; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = process.env.NODE_ENV !== 'production'\n ? expOrFn.toString()\n : '';\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = function () {};\n process.env.NODE_ENV !== 'production' && warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var this$1 = this;\n\n var i = this.deps.length;\n while (i--) {\n var dep = this$1.deps[i];\n if (!this$1.newDepIds.has(dep.id)) {\n dep.removeSub(this$1);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var this$1 = this;\n\n var i = this.deps.length;\n while (i--) {\n this$1.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n var this$1 = this;\n\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this$1.deps[i].removeSub(this$1);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive(props, key, value, function () {\n if (vm.$parent && !isUpdatingChildComponent) {\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n } else {\n defineReactive(props, key, value);\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n process.env.NODE_ENV !== 'production' && warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if (process.env.NODE_ENV !== 'production' && getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (process.env.NODE_ENV !== 'production') {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : userDef;\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : userDef.get\n : noop;\n sharedPropertyDefinition.set = userDef.set\n ? userDef.set\n : noop;\n }\n if (process.env.NODE_ENV !== 'production' &&\n sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (process.env.NODE_ENV !== 'production') {\n if (methods[key] == null) {\n warn(\n \"Method \\\"\" + key + \"\\\" has an undefined value in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = methods[key] == null ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n if (process.env.NODE_ENV !== 'production') {\n dataDef.set = function (newData) {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n cb.call(vm, watcher.value);\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n defineReactive(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n } else {\n defineReactive(vm, key, result[key]);\n }\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject).filter(function (key) {\n /* istanbul ignore next */\n return Object.getOwnPropertyDescriptor(inject, key).enumerable\n })\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else if (process.env.NODE_ENV !== 'production') {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n if (isDef(ret)) {\n (ret)._isVList = true;\n }\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || fallback;\n } else {\n var slotNodes = this.$slots[name];\n // warn duplicate slot usage\n if (slotNodes) {\n if (process.env.NODE_ENV !== 'production' && slotNodes._rendered) {\n warn(\n \"Duplicate presence of slot \\\"\" + name + \"\\\" found in the same render tree \" +\n \"- this will likely cause render errors.\",\n this\n );\n }\n slotNodes._rendered = true;\n }\n nodes = slotNodes || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n if (!(key in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () { return resolveSlots(children, parent); };\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = data.scopedSlots || emptyObject;\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n\n\n\n// Register the component hook to weex native render engine.\n// The hook will be triggered by native, not javascript.\n\n\n// Updates the state of the component to weex native render engine.\n\n/* */\n\n// https://github.com/Hanks10100/weex-native-directive/tree/master/component\n\n// listening on native callback\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (\n vnode,\n hydrating,\n parentElm,\n refElm\n ) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance,\n parentElm,\n refElm\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor, context);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n // Weex specific: invoke recycle-list optimized @render function for\n // extracting cell-slot template.\n // https://github.com/Hanks10100/weex-native-directive/tree/master/component\n /* istanbul ignore if */\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent, // activeInstance in lifecycle state\n parentElm,\n refElm\n) {\n var options = {\n _isComponent: true,\n parent: parent,\n _parentVnode: vnode,\n _parentElm: parentElm || null,\n _refElm: refElm || null\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n hooks[key] = componentVNodeHooks[key];\n }\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n if (isDef(on[event])) {\n on[event] = [data.model.callback].concat(on[event]);\n } else {\n on[event] = data.model.callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if (process.env.NODE_ENV !== 'production' &&\n isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n } else {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n }\n}\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n // reset _rendered flag on slots for duplicate slot check\n if (process.env.NODE_ENV !== 'production') {\n for (var key in vm.$slots) {\n // $flow-disable-line\n vm.$slots[key]._rendered = false;\n }\n }\n\n if (_parentVnode) {\n vm.$scopedSlots = _parentVnode.data.scopedSlots || emptyObject;\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n if (vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n initProxy(vm);\n } else {\n vm._renderProxy = vm;\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook(vm, 'created');\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n opts._parentElm = options._parentElm;\n opts._refElm = options._refElm;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var extended = Ctor.extendOptions;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = dedupe(latest[key], extended[key], sealed[key]);\n }\n }\n return modified\n}\n\nfunction dedupe (latest, extended, sealed) {\n // compare latest and sealed to ensure lifecycle hooks won't be duplicated\n // between merges\n if (Array.isArray(latest)) {\n var res = [];\n sealed = Array.isArray(sealed) ? sealed : [sealed];\n extended = Array.isArray(extended) ? extended : [extended];\n for (var i = 0; i < latest.length; i++) {\n // push original options and not sealed options to exclude duplicated options\n if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {\n res.push(latest[i]);\n }\n }\n return res\n } else {\n return latest\n }\n}\n\nfunction Vue (options) {\n if (process.env.NODE_ENV !== 'production' &&\n !(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if (process.env.NODE_ENV !== 'production' && name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n var this$1 = this;\n\n for (var key in this$1.cache) {\n pruneCacheEntry(this$1.cache, key, this$1.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n}\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n}\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n if (process.env.NODE_ENV !== 'production') {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.5.16';\n\n/* */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n return (\n (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n (attr === 'selected' && tag === 'option') ||\n (attr === 'checked' && tag === 'input') ||\n (attr === 'muted' && tag === 'video')\n )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isBooleanAttr = makeMap(\n 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n 'required,reversed,scoped,seamless,selected,sortable,translate,' +\n 'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n return val == null || val === false\n};\n\n/* */\n\nfunction genClassForVnode (vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode && parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class)\n ? [child.class, parent.class]\n : parent.class\n }\n}\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n 'html,body,base,head,link,meta,style,title,' +\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n 'output,progress,select,textarea,' +\n 'details,dialog,menu,menuitem,summary,' +\n 'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n if (isSVG(tag)) {\n return 'svg'\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math'\n }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true\n }\n if (isReservedTag(tag)) {\n return false\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag]\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // http://stackoverflow.com/a/28210364/1070244\n return (unknownElementCache[tag] = (\n el.constructor === window.HTMLUnknownElement ||\n el.constructor === window.HTMLElement\n ))\n } else {\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/* */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Cannot find element: ' + el\n );\n return document.createElement('div')\n }\n return selected\n } else {\n return el\n }\n}\n\n/* */\n\nfunction createElement$1 (tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n node.appendChild(child);\n}\n\nfunction parentNode (node) {\n return node.parentNode\n}\n\nfunction nextSibling (node) {\n return node.nextSibling\n}\n\nfunction tagName (node) {\n return node.tagName\n}\n\nfunction setTextContent (node, text) {\n node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n node.setAttribute(scopeId, '');\n}\n\n\nvar nodeOps = Object.freeze({\n\tcreateElement: createElement$1,\n\tcreateElementNS: createElementNS,\n\tcreateTextNode: createTextNode,\n\tcreateComment: createComment,\n\tinsertBefore: insertBefore,\n\tremoveChild: removeChild,\n\tappendChild: appendChild,\n\tparentNode: parentNode,\n\tnextSibling: nextSibling,\n\ttagName: tagName,\n\tsetTextContent: setTextContent,\n\tsetStyleScope: setStyleScope\n});\n\n/* */\n\nvar ref = {\n create: function create (_, vnode) {\n registerRef(vnode);\n },\n update: function update (oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy (vnode) {\n registerRef(vnode, true);\n }\n}\n\nfunction registerRef (vnode, isRemoval) {\n var key = vnode.data.ref;\n if (!isDef(key)) { return }\n\n var vm = vnode.context;\n var ref = vnode.componentInstance || vnode.elm;\n var refs = vm.$refs;\n if (isRemoval) {\n if (Array.isArray(refs[key])) {\n remove(refs[key], ref);\n } else if (refs[key] === ref) {\n refs[key] = undefined;\n }\n } else {\n if (vnode.data.refInFor) {\n if (!Array.isArray(refs[key])) {\n refs[key] = [ref];\n } else if (refs[key].indexOf(ref) < 0) {\n // $flow-disable-line\n refs[key].push(ref);\n }\n } else {\n refs[key] = ref;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n return (\n a.key === b.key && (\n (\n a.tag === b.tag &&\n a.isComment === b.isComment &&\n isDef(a.data) === isDef(b.data) &&\n sameInputType(a, b)\n ) || (\n isTrue(a.isAsyncPlaceholder) &&\n a.asyncFactory === b.asyncFactory &&\n isUndef(b.asyncFactory.error)\n )\n )\n )\n}\n\nfunction sameInputType (a, b) {\n if (a.tag !== 'input') { return true }\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) { map[key] = i; }\n }\n return map\n}\n\nfunction createPatchFunction (backend) {\n var i, j;\n var cbs = {};\n\n var modules = backend.modules;\n var nodeOps = backend.nodeOps;\n\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n\n function emptyNodeAt (elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n }\n\n function createRmCb (childElm, listeners) {\n function remove () {\n if (--remove.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove.listeners = listeners;\n return remove\n }\n\n function removeNode (el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n\n function isUnknownElement$$1 (vnode, inVPre) {\n return (\n !inVPre &&\n !vnode.ns &&\n !(\n config.ignoredElements.length &&\n config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore)\n ? ignore.test(vnode.tag)\n : ignore === vnode.tag\n })\n ) &&\n config.isUnknownElement(vnode.tag)\n )\n }\n\n var creatingElmInVPre = 0;\n\n function createElm (\n vnode,\n insertedVnodeQueue,\n parentElm,\n refElm,\n nested,\n ownerArray,\n index\n ) {\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // This vnode was used in a previous render!\n // now it's used as a new node, overwriting its elm would cause\n // potential patch errors down the road when it's used as an insertion\n // reference node. Instead, we clone the node on-demand before creating\n // associated DOM element for it.\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return\n }\n\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n if (process.env.NODE_ENV !== 'production') {\n if (data && data.pre) {\n creatingElmInVPre++;\n }\n if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n warn(\n 'Unknown custom element: <' + tag + '> - did you ' +\n 'register the component correctly? For recursive components, ' +\n 'make sure to provide the \"name\" option.',\n vnode.context\n );\n }\n }\n\n vnode.elm = vnode.ns\n ? nodeOps.createElementNS(vnode.ns, tag)\n : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n\n /* istanbul ignore if */\n {\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n }\n\n if (process.env.NODE_ENV !== 'production' && data && data.pre) {\n creatingElmInVPre--;\n }\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n\n function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */, parentElm, refElm);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true\n }\n }\n }\n\n function initComponent (vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n\n function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n\n function insert (parent, elm, ref$$1) {\n if (isDef(parent)) {\n if (isDef(ref$$1)) {\n if (ref$$1.parentNode === parent) {\n nodeOps.insertBefore(parent, elm, ref$$1);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n\n function createChildren (vnode, children, insertedVnodeQueue) {\n if (Array.isArray(children)) {\n if (process.env.NODE_ENV !== 'production') {\n checkDuplicateKeys(children);\n }\n for (var i = 0; i < children.length; ++i) {\n createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n }\n }\n\n function isPatchable (vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag)\n }\n\n function invokeCreateHooks (vnode, insertedVnodeQueue) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) { i.create(emptyNode, vnode); }\n if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n }\n }\n\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope (vnode) {\n var i;\n if (isDef(i = vnode.fnScopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) &&\n i !== vnode.context &&\n i !== vnode.fnContext &&\n isDef(i = i.$options._scopeId)\n ) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n }\n\n function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n }\n }\n\n function invokeDestroyHook (vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n\n function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else { // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n\n function removeAndInvokeRemoveHook (vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n removeAndInvokeRemoveHook(i, rm);\n }\n for (i = 0; i < cbs.remove.length; ++i) {\n cbs.remove[i](vnode, rm);\n }\n if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n i(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n\n function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n\n if (process.env.NODE_ENV !== 'production') {\n checkDuplicateKeys(newCh);\n }\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n idxInOld = isDef(newStartVnode.key)\n ? oldKeyToIdx[newStartVnode.key]\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) { // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n } else {\n vnodeToMove = oldCh[idxInOld];\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n\n function checkDuplicateKeys (children) {\n var seenKeys = {};\n for (var i = 0; i < children.length; i++) {\n var vnode = children[i];\n var key = vnode.key;\n if (isDef(key)) {\n if (seenKeys[key]) {\n warn(\n (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n vnode.context\n );\n } else {\n seenKeys[key] = true;\n }\n }\n }\n }\n\n function findIdxInOld (node, oldCh, start, end) {\n for (var i = start; i < end; i++) {\n var c = oldCh[i];\n if (isDef(c) && sameVnode(node, c)) { return i }\n }\n }\n\n function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {\n if (oldVnode === vnode) {\n return\n }\n\n var elm = vnode.elm = oldVnode.elm;\n\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return\n }\n\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) &&\n isTrue(oldVnode.isStatic) &&\n vnode.key === oldVnode.key &&\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n ) {\n vnode.componentInstance = oldVnode.componentInstance;\n return\n }\n\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n } else if (isDef(ch)) {\n if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n }\n }\n\n function invokeInsertHook (vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i = 0; i < queue.length; ++i) {\n queue[i].data.hook.insert(queue[i]);\n }\n }\n }\n\n var hydrationBailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n // Note: style is excluded because it relies on initial clone for future\n // deep updates (#7063).\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n var i;\n var tag = vnode.tag;\n var data = vnode.data;\n var children = vnode.children;\n inVPre = inVPre || (data && data.pre);\n vnode.elm = elm;\n\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.isAsyncPlaceholder = true;\n return true\n }\n // assert node match\n if (process.env.NODE_ENV !== 'production') {\n if (!assertNodeMatch(elm, vnode, inVPre)) {\n return false\n }\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' &&\n typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('server innerHTML: ', i);\n console.warn('client innerHTML: ', elm.innerHTML);\n }\n return false\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i$1 = 0; i$1 < children.length; i$1++) {\n if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n childrenMatch = false;\n break\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' &&\n typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n }\n return false\n }\n }\n }\n }\n if (isDef(data)) {\n var fullInvoke = false;\n for (var key in data) {\n if (!isRenderedModule(key)) {\n fullInvoke = true;\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break\n }\n }\n if (!fullInvoke && data['class']) {\n // ensure collecting deps for deep class bindings for future updates\n traverse(data['class']);\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true\n }\n\n function assertNodeMatch (node, vnode, inVPre) {\n if (isDef(vnode.tag)) {\n return vnode.tag.indexOf('vue-component') === 0 || (\n !isUnknownElement$$1(vnode, inVPre) &&\n vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n )\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3)\n }\n }\n\n return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n return\n }\n\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue, parentElm, refElm);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n 'The client-side rendered virtual DOM tree is not matching ' +\n 'server-rendered content. This is likely caused by incorrect ' +\n 'HTML markup, for example nesting block-level elements inside ' +\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm$1 = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm$1,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm$1)) {\n removeVnodes(parentElm$1, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n}\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n]\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n ? 'true'\n : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n baseSetAttr(el, key, value);\n }\n}\n\nfunction baseSetAttr (el, key, value) {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // #7138: IE10 & 11 fires input event when setting placeholder on\n // <textarea>... block the first input event and remove the blocker\n // immediately.\n /* istanbul ignore if */\n if (\n isIE && !isIE9 &&\n el.tagName === 'TEXTAREA' &&\n key === 'placeholder' && !el.__ieph\n ) {\n var blocker = function (e) {\n e.stopImmediatePropagation();\n el.removeEventListener('input', blocker);\n };\n el.addEventListener('input', blocker);\n // $flow-disable-line\n el.__ieph = true; /* IE placeholder patched */\n }\n el.setAttribute(key, value);\n }\n}\n\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n}\n\n/* */\n\nfunction updateClass (oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (\n isUndef(data.staticClass) &&\n isUndef(data.class) && (\n isUndef(oldData) || (\n isUndef(oldData.staticClass) &&\n isUndef(oldData.class)\n )\n )\n ) {\n return\n }\n\n var cls = genClassForVnode(vnode);\n\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\n\nvar klass = {\n create: updateClass,\n update: updateClass\n}\n\n/* */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n var inSingle = false;\n var inDouble = false;\n var inTemplateString = false;\n var inRegex = false;\n var curly = 0;\n var square = 0;\n var paren = 0;\n var lastFilterIndex = 0;\n var c, prev, i, expression, filters;\n\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n } else if (inDouble) {\n if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n } else if (inTemplateString) {\n if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n } else if (inRegex) {\n if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n } else if (\n c === 0x7C && // pipe\n exp.charCodeAt(i + 1) !== 0x7C &&\n exp.charCodeAt(i - 1) !== 0x7C &&\n !curly && !square && !paren\n ) {\n if (expression === undefined) {\n // first filter, end of expression\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 0x22: inDouble = true; break // \"\n case 0x27: inSingle = true; break // '\n case 0x60: inTemplateString = true; break // `\n case 0x28: paren++; break // (\n case 0x29: paren--; break // )\n case 0x5B: square++; break // [\n case 0x5D: square--; break // ]\n case 0x7B: curly++; break // {\n case 0x7D: curly--; break // }\n }\n if (c === 0x2f) { // /\n var j = i - 1;\n var p = (void 0);\n // find first non-whitespace prev char\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== ' ') { break }\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n\n if (expression === undefined) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n\n function pushFilter () {\n (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n\n if (filters) {\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i]);\n }\n }\n\n return expression\n}\n\nfunction wrapFilter (exp, filter) {\n var i = filter.indexOf('(');\n if (i < 0) {\n // _f: resolveFilter\n return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n } else {\n var name = filter.slice(0, i);\n var args = filter.slice(i + 1);\n return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n }\n}\n\n/* */\n\nfunction baseWarn (msg) {\n console.error((\"[Vue compiler]: \" + msg));\n}\n\nfunction pluckModuleFunction (\n modules,\n key\n) {\n return modules\n ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n : []\n}\n\nfunction addProp (el, name, value) {\n (el.props || (el.props = [])).push({ name: name, value: value });\n el.plain = false;\n}\n\nfunction addAttr (el, name, value) {\n (el.attrs || (el.attrs = [])).push({ name: name, value: value });\n el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value) {\n el.attrsMap[name] = value;\n el.attrsList.push({ name: name, value: value });\n}\n\nfunction addDirective (\n el,\n name,\n rawName,\n value,\n arg,\n modifiers\n) {\n (el.directives || (el.directives = [])).push({ name: name, rawName: rawName, value: value, arg: arg, modifiers: modifiers });\n el.plain = false;\n}\n\nfunction addHandler (\n el,\n name,\n value,\n modifiers,\n important,\n warn\n) {\n modifiers = modifiers || emptyObject;\n // warn prevent and passive modifier\n /* istanbul ignore if */\n if (\n process.env.NODE_ENV !== 'production' && warn &&\n modifiers.prevent && modifiers.passive\n ) {\n warn(\n 'passive and prevent can\\'t be used together. ' +\n 'Passive handler can\\'t prevent default event.'\n );\n }\n\n // check capture modifier\n if (modifiers.capture) {\n delete modifiers.capture;\n name = '!' + name; // mark the event as captured\n }\n if (modifiers.once) {\n delete modifiers.once;\n name = '~' + name; // mark the event as once\n }\n /* istanbul ignore if */\n if (modifiers.passive) {\n delete modifiers.passive;\n name = '&' + name; // mark the event as passive\n }\n\n // normalize click.right and click.middle since they don't actually fire\n // this is technically browser-specific, but at least for now browsers are\n // the only target envs that have right/middle clicks.\n if (name === 'click') {\n if (modifiers.right) {\n name = 'contextmenu';\n delete modifiers.right;\n } else if (modifiers.middle) {\n name = 'mouseup';\n }\n }\n\n var events;\n if (modifiers.native) {\n delete modifiers.native;\n events = el.nativeEvents || (el.nativeEvents = {});\n } else {\n events = el.events || (el.events = {});\n }\n\n var newHandler = {\n value: value.trim()\n };\n if (modifiers !== emptyObject) {\n newHandler.modifiers = modifiers;\n }\n\n var handlers = events[name];\n /* istanbul ignore if */\n if (Array.isArray(handlers)) {\n important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n } else if (handlers) {\n events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n } else {\n events[name] = newHandler;\n }\n\n el.plain = false;\n}\n\nfunction getBindingAttr (\n el,\n name,\n getStatic\n) {\n var dynamicValue =\n getAndRemoveAttr(el, ':' + name) ||\n getAndRemoveAttr(el, 'v-bind:' + name);\n if (dynamicValue != null) {\n return parseFilters(dynamicValue)\n } else if (getStatic !== false) {\n var staticValue = getAndRemoveAttr(el, name);\n if (staticValue != null) {\n return JSON.stringify(staticValue)\n }\n }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n el,\n name,\n removeFromMap\n) {\n var val;\n if ((val = el.attrsMap[name]) != null) {\n var list = el.attrsList;\n for (var i = 0, l = list.length; i < l; i++) {\n if (list[i].name === name) {\n list.splice(i, 1);\n break\n }\n }\n }\n if (removeFromMap) {\n delete el.attrsMap[name];\n }\n return val\n}\n\n/* */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n el,\n value,\n modifiers\n) {\n var ref = modifiers || {};\n var number = ref.number;\n var trim = ref.trim;\n\n var baseValueExpression = '$$v';\n var valueExpression = baseValueExpression;\n if (trim) {\n valueExpression =\n \"(typeof \" + baseValueExpression + \" === 'string'\" +\n \"? \" + baseValueExpression + \".trim()\" +\n \": \" + baseValueExpression + \")\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n var assignment = genAssignmentCode(value, valueExpression);\n\n el.model = {\n value: (\"(\" + value + \")\"),\n expression: (\"\\\"\" + value + \"\\\"\"),\n callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n value,\n assignment\n) {\n var res = parseModel(value);\n if (res.key === null) {\n return (value + \"=\" + assignment)\n } else {\n return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len;\nvar str;\nvar chr;\nvar index$1;\nvar expressionPos;\nvar expressionEndPos;\n\n\n\nfunction parseModel (val) {\n // Fix https://github.com/vuejs/vue/pull/7730\n // allow v-model=\"obj.val \" (trailing whitespace)\n val = val.trim();\n len = val.length;\n\n if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n index$1 = val.lastIndexOf('.');\n if (index$1 > -1) {\n return {\n exp: val.slice(0, index$1),\n key: '\"' + val.slice(index$1 + 1) + '\"'\n }\n } else {\n return {\n exp: val,\n key: null\n }\n }\n }\n\n str = val;\n index$1 = expressionPos = expressionEndPos = 0;\n\n while (!eof()) {\n chr = next();\n /* istanbul ignore if */\n if (isStringStart(chr)) {\n parseString(chr);\n } else if (chr === 0x5B) {\n parseBracket(chr);\n }\n }\n\n return {\n exp: val.slice(0, expressionPos),\n key: val.slice(expressionPos + 1, expressionEndPos)\n }\n}\n\nfunction next () {\n return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n var inBracket = 1;\n expressionPos = index$1;\n while (!eof()) {\n chr = next();\n if (isStringStart(chr)) {\n parseString(chr);\n continue\n }\n if (chr === 0x5B) { inBracket++; }\n if (chr === 0x5D) { inBracket--; }\n if (inBracket === 0) {\n expressionEndPos = index$1;\n break\n }\n }\n}\n\nfunction parseString (chr) {\n var stringQuote = chr;\n while (!eof()) {\n chr = next();\n if (chr === stringQuote) {\n break\n }\n }\n}\n\n/* */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n el,\n dir,\n _warn\n) {\n warn$1 = _warn;\n var value = dir.value;\n var modifiers = dir.modifiers;\n var tag = el.tag;\n var type = el.attrsMap.type;\n\n if (process.env.NODE_ENV !== 'production') {\n // inputs with type=\"file\" are read only and setting the input's\n // value will throw an error.\n if (tag === 'input' && type === 'file') {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n \"File inputs are read only. Use a v-on:change listener instead.\"\n );\n }\n }\n\n if (el.component) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else if (tag === 'select') {\n genSelect(el, value, modifiers);\n } else if (tag === 'input' && type === 'checkbox') {\n genCheckboxModel(el, value, modifiers);\n } else if (tag === 'input' && type === 'radio') {\n genRadioModel(el, value, modifiers);\n } else if (tag === 'input' || tag === 'textarea') {\n genDefaultModel(el, value, modifiers);\n } else if (!config.isReservedTag(tag)) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else if (process.env.NODE_ENV !== 'production') {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"v-model is not supported on this element type. \" +\n 'If you are working with contenteditable, it\\'s recommended to ' +\n 'wrap a library dedicated for that purpose inside a custom component.'\n );\n }\n\n // ensure runtime directive metadata\n return true\n}\n\nfunction genCheckboxModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n addProp(el, 'checked',\n \"Array.isArray(\" + value + \")\" +\n \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n trueValueBinding === 'true'\n ? (\":(\" + value + \")\")\n : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n )\n );\n addHandler(el, 'change',\n \"var $$a=\" + value + \",\" +\n '$$el=$event.target,' +\n \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n 'if(Array.isArray($$a)){' +\n \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n '$$i=_i($$a,$$v);' +\n \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n null, true\n );\n}\n\nfunction genRadioModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var selectedVal = \"Array.prototype.filter\" +\n \".call($event.target.options,function(o){return o.selected})\" +\n \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n var code = \"var $$selectedVal = \" + selectedVal + \";\";\n code = code + \" \" + (genAssignmentCode(value, assignment));\n addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n el,\n value,\n modifiers\n) {\n var type = el.attrsMap.type;\n\n // warn if v-bind:value conflicts with v-model\n // except for inputs with v-bind:type\n if (process.env.NODE_ENV !== 'production') {\n var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n if (value$1 && !typeBinding) {\n var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n warn$1(\n binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n 'because the latter already expands to a value binding internally'\n );\n }\n }\n\n var ref = modifiers || {};\n var lazy = ref.lazy;\n var number = ref.number;\n var trim = ref.trim;\n var needCompositionGuard = !lazy && type !== 'range';\n var event = lazy\n ? 'change'\n : type === 'range'\n ? RANGE_TOKEN\n : 'input';\n\n var valueExpression = '$event.target.value';\n if (trim) {\n valueExpression = \"$event.target.value.trim()\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n\n var code = genAssignmentCode(value, valueExpression);\n if (needCompositionGuard) {\n code = \"if($event.target.composing)return;\" + code;\n }\n\n addProp(el, 'value', (\"(\" + value + \")\"));\n addHandler(el, event, code, null, true);\n if (trim || number) {\n addHandler(el, 'blur', '$forceUpdate()');\n }\n}\n\n/* */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event = isIE ? 'change' : 'input';\n on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\n\nvar target$1;\n\nfunction createOnceHandler (handler, event, capture) {\n var _target = target$1; // save current target element in closure\n return function onceHandler () {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove$2(event, onceHandler, capture, _target);\n }\n }\n}\n\nfunction add$1 (\n event,\n handler,\n once$$1,\n capture,\n passive\n) {\n handler = withMacroTask(handler);\n if (once$$1) { handler = createOnceHandler(handler, event, capture); }\n target$1.addEventListener(\n event,\n handler,\n supportsPassive\n ? { capture: capture, passive: passive }\n : capture\n );\n}\n\nfunction remove$2 (\n event,\n handler,\n capture,\n _target\n) {\n (_target || target$1).removeEventListener(\n event,\n handler._withTask || handler,\n capture\n );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n target$1 = vnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add$1, remove$2, vnode.context);\n target$1 = undefined;\n}\n\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners\n}\n\n/* */\n\nfunction updateDOMProps (oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__)) {\n props = vnode.data.domProps = extend({}, props);\n }\n\n for (key in oldProps) {\n if (isUndef(props[key])) {\n elm[key] = '';\n }\n }\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) { vnode.children.length = 0; }\n if (cur === oldProps[key]) { continue }\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n\n if (key === 'value') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else {\n elm[key] = cur;\n }\n }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n return (!elm.composing && (\n elm.tagName === 'OPTION' ||\n isNotInFocusAndDirty(elm, checkVal) ||\n isDirtyWithModifiers(elm, checkVal)\n ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try { notInFocus = document.activeElement !== elm; } catch (e) {}\n return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers)) {\n if (modifiers.lazy) {\n // inputs with lazy should only be updated when not in focus\n return false\n }\n if (modifiers.number) {\n return toNumber(value) !== toNumber(newVal)\n }\n if (modifiers.trim) {\n return value.trim() !== newVal.trim()\n }\n }\n return value !== newVal\n}\n\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n}\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle\n ? extend(data.staticStyle, style)\n : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n var res = {};\n var styleData;\n\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (\n childNode && childNode.data &&\n (styleData = normalizeStyleData(childNode.data))\n ) {\n extend(res, styleData);\n }\n }\n }\n\n if ((styleData = normalizeStyleData(vnode.data))) {\n extend(res, styleData);\n }\n\n var parentNode = vnode;\n while ((parentNode = parentNode.parent)) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res\n}\n\n/* */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(name, val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && (prop in emptyStyle)) {\n return prop\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name = vendorNames[i] + capName;\n if (name in emptyStyle) {\n return name\n }\n }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n\n if (isUndef(data.staticStyle) && isUndef(data.style) &&\n isUndef(oldData.staticStyle) && isUndef(oldData.style)\n ) {\n return\n }\n\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n\n var style = normalizeStyleBinding(vnode.data.style) || {};\n\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__)\n ? extend({}, style)\n : style;\n\n var newStyle = getStyle(vnode, true);\n\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n if (cur !== oldStyle[name]) {\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n }\n}\n\nvar style = {\n create: updateStyle,\n update: updateStyle\n}\n\n/* */\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(/\\s+/).forEach(function (c) { return el.classList.add(c); });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(/\\s+/).forEach(function (c) { return el.classList.remove(c); });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\n\n/* */\n\nfunction resolveTransition (def) {\n if (!def) {\n return\n }\n /* istanbul ignore else */\n if (typeof def === 'object') {\n var res = {};\n if (def.css !== false) {\n extend(res, autoCssTransition(def.name || 'v'));\n }\n extend(res, def);\n return res\n } else if (typeof def === 'string') {\n return autoCssTransition(def)\n }\n}\n\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: (name + \"-enter\"),\n enterToClass: (name + \"-enter-to\"),\n enterActiveClass: (name + \"-enter-active\"),\n leaveClass: (name + \"-leave\"),\n leaveToClass: (name + \"-leave-to\"),\n leaveActiveClass: (name + \"-leave-active\")\n }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined &&\n window.onwebkittransitionend !== undefined\n ) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined &&\n window.onwebkitanimationend !== undefined\n ) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n ? window.requestAnimationFrame\n ? window.requestAnimationFrame.bind(window)\n : setTimeout\n : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n raf(function () {\n raf(fn);\n });\n}\n\nfunction addTransitionClass (el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\n\nfunction removeTransitionClass (el, cls) {\n if (el._transitionClasses) {\n remove(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n el,\n expectedType,\n cb\n) {\n var ref = getTransitionInfo(el, expectedType);\n var type = ref.type;\n var timeout = ref.timeout;\n var propCount = ref.propCount;\n if (!type) { return cb() }\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function () {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n var styles = window.getComputedStyle(el);\n var transitionDelays = styles[transitionProp + 'Delay'].split(', ');\n var transitionDurations = styles[transitionProp + 'Duration'].split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = styles[animationProp + 'Delay'].split(', ');\n var animationDurations = styles[animationProp + 'Duration'].split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n var hasTransform =\n type === TRANSITION &&\n transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n }\n}\n\nfunction getTimeout (delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }))\n}\n\nfunction toMs (s) {\n return Number(s.slice(0, -1)) * 1000\n}\n\n/* */\n\nfunction enter (vnode, toggleDisplay) {\n var el = vnode.elm;\n\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return\n }\n\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var enterClass = data.enterClass;\n var enterToClass = data.enterToClass;\n var enterActiveClass = data.enterActiveClass;\n var appearClass = data.appearClass;\n var appearToClass = data.appearToClass;\n var appearActiveClass = data.appearActiveClass;\n var beforeEnter = data.beforeEnter;\n var enter = data.enter;\n var afterEnter = data.afterEnter;\n var enterCancelled = data.enterCancelled;\n var beforeAppear = data.beforeAppear;\n var appear = data.appear;\n var afterAppear = data.afterAppear;\n var appearCancelled = data.appearCancelled;\n var duration = data.duration;\n\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n transitionNode = transitionNode.parent;\n context = transitionNode.context;\n }\n\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n if (isAppear && !appear && appear !== '') {\n return\n }\n\n var startClass = isAppear && appearClass\n ? appearClass\n : enterClass;\n var activeClass = isAppear && appearActiveClass\n ? appearActiveClass\n : enterActiveClass;\n var toClass = isAppear && appearToClass\n ? appearToClass\n : enterToClass;\n\n var beforeEnterHook = isAppear\n ? (beforeAppear || beforeEnter)\n : beforeEnter;\n var enterHook = isAppear\n ? (typeof appear === 'function' ? appear : enter)\n : enter;\n var afterEnterHook = isAppear\n ? (afterAppear || afterEnter)\n : afterEnter;\n var enterCancelledHook = isAppear\n ? (appearCancelled || enterCancelled)\n : enterCancelled;\n\n var explicitEnterDuration = toNumber(\n isObject(duration)\n ? duration.enter\n : duration\n );\n\n if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {\n checkDuration(explicitEnterDuration, 'enter', vnode);\n }\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode, 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode &&\n pendingNode.tag === vnode.tag &&\n pendingNode.elm._leaveCb\n ) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n removeTransitionClass(el, startClass);\n if (!cb.cancelled) {\n addTransitionClass(el, toClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\n\nfunction leave (vnode, rm) {\n var el = vnode.elm;\n\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data) || el.nodeType !== 1) {\n return rm()\n }\n\n /* istanbul ignore if */\n if (isDef(el._leaveCb)) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var leaveClass = data.leaveClass;\n var leaveToClass = data.leaveToClass;\n var leaveActiveClass = data.leaveActiveClass;\n var beforeLeave = data.beforeLeave;\n var leave = data.leave;\n var afterLeave = data.afterLeave;\n var leaveCancelled = data.leaveCancelled;\n var delayLeave = data.delayLeave;\n var duration = data.duration;\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n\n var explicitLeaveDuration = toNumber(\n isObject(duration)\n ? duration.leave\n : duration\n );\n\n if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {\n checkDuration(explicitLeaveDuration, 'leave', vnode);\n }\n\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n\n function performLeave () {\n // the delayed leave may have already been cancelled\n if (cb.cancelled) {\n return\n }\n // record leaving element\n if (!vnode.data.show) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n removeTransitionClass(el, leaveClass);\n if (!cb.cancelled) {\n addTransitionClass(el, leaveToClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\n \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n \"got \" + (JSON.stringify(val)) + \".\",\n vnode.context\n );\n } else if (isNaN(val)) {\n warn(\n \"<transition> explicit \" + name + \" duration is NaN - \" +\n 'the duration expression might be incorrect.',\n vnode.context\n );\n }\n}\n\nfunction isValidDuration (val) {\n return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n if (isUndef(fn)) {\n return false\n }\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(\n Array.isArray(invokerFns)\n ? invokerFns[0]\n : invokerFns\n )\n } else {\n return (fn._length || fn.length) > 1\n }\n}\n\nfunction _enter (_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\n\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove$$1 (vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {}\n\nvar platformModules = [\n attrs,\n klass,\n events,\n domProps,\n style,\n transition\n]\n\n/* */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\n\nvar directive = {\n inserted: function inserted (el, binding, vnode, oldVnode) {\n if (vnode.tag === 'select') {\n // #6903\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n directive.componentUpdated(el, binding, vnode);\n });\n } else {\n setSelected(el, binding, vnode.context);\n }\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n\n componentUpdated: function componentUpdated (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions = el._vOptions;\n var curOptions = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\n\nfunction setSelected (el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n vm\n );\n return\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\n\nfunction hasNoMatchingOption (value, options) {\n return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n return '_value' in option\n ? option._value\n : option.value\n}\n\nfunction onCompositionStart (e) {\n e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) { return }\n e.target.composing = false;\n trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n/* */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n ? locateNode(vnode.componentInstance._vnode)\n : vnode\n}\n\nvar show = {\n bind: function bind (el, ref, vnode) {\n var value = ref.value;\n\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay =\n el.style.display === 'none' ? '' : el.style.display;\n if (value && transition$$1) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n\n update: function update (el, ref, vnode) {\n var value = ref.value;\n var oldValue = ref.oldValue;\n\n /* istanbul ignore if */\n if (!value === !oldValue) { return }\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n if (transition$$1) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n\n unbind: function unbind (\n el,\n binding,\n vnode,\n oldVnode,\n isDestroy\n ) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n}\n\nvar platformDirectives = {\n model: directive,\n show: show\n}\n\n/* */\n\n// Provides transition support for a single element/component.\n// supports transition mode (out-in / in-out)\n\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children))\n } else {\n return vnode\n }\n}\n\nfunction extractTransitionData (comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key$1 in listeners) {\n data[camelize(key$1)] = listeners[key$1];\n }\n return data\n}\n\nfunction placeholder (h, rawChild) {\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n })\n }\n}\n\nfunction hasParentTransition (vnode) {\n while ((vnode = vnode.parent)) {\n if (vnode.data.transition) {\n return true\n }\n }\n}\n\nfunction isSameChild (child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n\n render: function render (h) {\n var this$1 = this;\n\n var children = this.$slots.default;\n if (!children) {\n return\n }\n\n // filter out text nodes (possible whitespaces)\n children = children.filter(function (c) { return c.tag || isAsyncPlaceholder(c); });\n /* istanbul ignore if */\n if (!children.length) {\n return\n }\n\n // warn multiple elements\n if (process.env.NODE_ENV !== 'production' && children.length > 1) {\n warn(\n '<transition> can only be used on a single element. Use ' +\n '<transition-group> for lists.',\n this.$parent\n );\n }\n\n var mode = this.mode;\n\n // warn invalid mode\n if (process.env.NODE_ENV !== 'production' &&\n mode && mode !== 'in-out' && mode !== 'out-in'\n ) {\n warn(\n 'invalid <transition> mode: ' + mode,\n this.$parent\n );\n }\n\n var rawChild = children[0];\n\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild\n }\n\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild\n }\n\n if (this._leaving) {\n return placeholder(h, rawChild)\n }\n\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\" + (this._uid) + \"-\";\n child.key = child.key == null\n ? child.isComment\n ? id + 'comment'\n : id + child.tag\n : isPrimitive(child.key)\n ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n : child.key;\n\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {\n child.data.show = true;\n }\n\n if (\n oldChild &&\n oldChild.data &&\n !isSameChild(child, oldChild) &&\n !isAsyncPlaceholder(oldChild) &&\n // #6687 component root is a comment node\n !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n ) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n this$1._leaving = false;\n this$1.$forceUpdate();\n });\n return placeholder(h, rawChild)\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild\n }\n var delayedLeave;\n var performLeave = function () { delayedLeave(); };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n }\n }\n\n return rawChild\n }\n}\n\n/* */\n\n// Provides transition support for list items.\n// supports move transitions using the FLIP technique.\n\n// Because the vdom's children update algorithm is \"unstable\" - i.e.\n// it doesn't guarantee the relative positioning of removed elements,\n// we force transition-group to update its children into two passes:\n// in the first pass, we remove all nodes that need to be removed,\n// triggering their leaving transition; in the second pass, we insert/move\n// into the final desired state. This way in the second pass removed\n// nodes will remain where they should be.\n\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n props: props,\n\n render: function render (h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c\n ;(c.data || (c.data = {})).transition = transitionData;\n } else if (process.env.NODE_ENV !== 'production') {\n var opts = c.componentOptions;\n var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n }\n }\n }\n\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n var c$1 = prevChildren[i$1];\n c$1.data.transition = transitionData;\n c$1.data.pos = c$1.elm.getBoundingClientRect();\n if (map[c$1.key]) {\n kept.push(c$1);\n } else {\n removed.push(c$1);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n\n return h(tag, null, children)\n },\n\n beforeUpdate: function beforeUpdate () {\n // force removing pass\n this.__patch__(\n this._vnode,\n this.kept,\n false, // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n this._vnode = this.kept;\n },\n\n updated: function updated () {\n var children = this.prevChildren;\n var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return\n }\n\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n\n children.forEach(function (c) {\n if (c.data.moved) {\n var el = c.elm;\n var s = el.style;\n addTransitionClass(el, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(transitionEndEvent, cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n }\n });\n },\n\n methods: {\n hasMove: function hasMove (el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return (this._hasMove = info.hasTransform)\n }\n }\n}\n\nfunction callPendingCbs (c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\n\nfunction recordPosition (c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n s.transitionDuration = '0s';\n }\n}\n\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n}\n\n/* */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n setTimeout(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue);\n } else if (\n process.env.NODE_ENV !== 'production' &&\n process.env.NODE_ENV !== 'test' &&\n isChrome\n ) {\n console[console.info ? 'info' : 'log'](\n 'Download the Vue Devtools extension for a better development experience:\\n' +\n 'https://github.com/vuejs/vue-devtools'\n );\n }\n }\n if (process.env.NODE_ENV !== 'production' &&\n process.env.NODE_ENV !== 'test' &&\n config.productionTip !== false &&\n typeof console !== 'undefined'\n ) {\n console[console.info ? 'info' : 'log'](\n \"You are running Vue in development mode.\\n\" +\n \"Make sure to turn on production mode when deploying for production.\\n\" +\n \"See more tips at https://vuejs.org/guide/deployment.html\"\n );\n }\n }, 0);\n}\n\n/* */\n\nvar defaultTagRE = /\\{\\{((?:.|\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n text,\n delimiters\n) {\n var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n if (!tagRE.test(text)) {\n return\n }\n var tokens = [];\n var rawTokens = [];\n var lastIndex = tagRE.lastIndex = 0;\n var match, index, tokenValue;\n while ((match = tagRE.exec(text))) {\n index = match.index;\n // push text token\n if (index > lastIndex) {\n rawTokens.push(tokenValue = text.slice(lastIndex, index));\n tokens.push(JSON.stringify(tokenValue));\n }\n // tag token\n var exp = parseFilters(match[1].trim());\n tokens.push((\"_s(\" + exp + \")\"));\n rawTokens.push({ '@binding': exp });\n lastIndex = index + match[0].length;\n }\n if (lastIndex < text.length) {\n rawTokens.push(tokenValue = text.slice(lastIndex));\n tokens.push(JSON.stringify(tokenValue));\n }\n return {\n expression: tokens.join('+'),\n tokens: rawTokens\n }\n}\n\n/* */\n\nfunction transformNode (el, options) {\n var warn = options.warn || baseWarn;\n var staticClass = getAndRemoveAttr(el, 'class');\n if (process.env.NODE_ENV !== 'production' && staticClass) {\n var res = parseText(staticClass, options.delimiters);\n if (res) {\n warn(\n \"class=\\\"\" + staticClass + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.'\n );\n }\n }\n if (staticClass) {\n el.staticClass = JSON.stringify(staticClass);\n }\n var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n if (classBinding) {\n el.classBinding = classBinding;\n }\n}\n\nfunction genData (el) {\n var data = '';\n if (el.staticClass) {\n data += \"staticClass:\" + (el.staticClass) + \",\";\n }\n if (el.classBinding) {\n data += \"class:\" + (el.classBinding) + \",\";\n }\n return data\n}\n\nvar klass$1 = {\n staticKeys: ['staticClass'],\n transformNode: transformNode,\n genData: genData\n}\n\n/* */\n\nfunction transformNode$1 (el, options) {\n var warn = options.warn || baseWarn;\n var staticStyle = getAndRemoveAttr(el, 'style');\n if (staticStyle) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n var res = parseText(staticStyle, options.delimiters);\n if (res) {\n warn(\n \"style=\\\"\" + staticStyle + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.'\n );\n }\n }\n el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n }\n\n var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n if (styleBinding) {\n el.styleBinding = styleBinding;\n }\n}\n\nfunction genData$1 (el) {\n var data = '';\n if (el.staticStyle) {\n data += \"staticStyle:\" + (el.staticStyle) + \",\";\n }\n if (el.styleBinding) {\n data += \"style:(\" + (el.styleBinding) + \"),\";\n }\n return data\n}\n\nvar style$1 = {\n staticKeys: ['staticStyle'],\n transformNode: transformNode$1,\n genData: genData$1\n}\n\n/* */\n\nvar decoder;\n\nvar he = {\n decode: function decode (html) {\n decoder = decoder || document.createElement('div');\n decoder.innerHTML = html;\n return decoder.textContent\n }\n}\n\n/* */\n\nvar isUnaryTag = makeMap(\n 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n 'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n 'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n/*!\n * HTML Parser By John Resig (ejohn.org)\n * Modified by Juriy \"kangax\" Zaytsev\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\n// could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName\n// but for Vue templates we can enforce a simple charset\nvar ncname = '[a-zA-Z_][\\\\w\\\\-\\\\.]*';\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being pased as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\nvar IS_REGEX_CAPTURING_BROKEN = false;\n'x'.replace(/x(.)?/g, function (m, g) {\n IS_REGEX_CAPTURING_BROKEN = g === '';\n});\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&amp;': '&',\n '&#10;': '\\n',\n '&#9;': '\\t'\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n var stack = [];\n var expectHTML = options.expectHTML;\n var isUnaryTag$$1 = options.isUnaryTag || no;\n var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n var index = 0;\n var last, lastTag;\n while (html) {\n last = html;\n // Make sure we're not in a plaintext content element like script/style\n if (!lastTag || !isPlainTextElement(lastTag)) {\n var textEnd = html.indexOf('<');\n if (textEnd === 0) {\n // Comment:\n if (comment.test(html)) {\n var commentEnd = html.indexOf('-->');\n\n if (commentEnd >= 0) {\n if (options.shouldKeepComment) {\n options.comment(html.substring(4, commentEnd));\n }\n advance(commentEnd + 3);\n continue\n }\n }\n\n // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n if (conditionalComment.test(html)) {\n var conditionalEnd = html.indexOf(']>');\n\n if (conditionalEnd >= 0) {\n advance(conditionalEnd + 2);\n continue\n }\n }\n\n // Doctype:\n var doctypeMatch = html.match(doctype);\n if (doctypeMatch) {\n advance(doctypeMatch[0].length);\n continue\n }\n\n // End tag:\n var endTagMatch = html.match(endTag);\n if (endTagMatch) {\n var curIndex = index;\n advance(endTagMatch[0].length);\n parseEndTag(endTagMatch[1], curIndex, index);\n continue\n }\n\n // Start tag:\n var startTagMatch = parseStartTag();\n if (startTagMatch) {\n handleStartTag(startTagMatch);\n if (shouldIgnoreFirstNewline(lastTag, html)) {\n advance(1);\n }\n continue\n }\n }\n\n var text = (void 0), rest = (void 0), next = (void 0);\n if (textEnd >= 0) {\n rest = html.slice(textEnd);\n while (\n !endTag.test(rest) &&\n !startTagOpen.test(rest) &&\n !comment.test(rest) &&\n !conditionalComment.test(rest)\n ) {\n // < in plain text, be forgiving and treat it as text\n next = rest.indexOf('<', 1);\n if (next < 0) { break }\n textEnd += next;\n rest = html.slice(textEnd);\n }\n text = html.substring(0, textEnd);\n advance(textEnd);\n }\n\n if (textEnd < 0) {\n text = html;\n html = '';\n }\n\n if (options.chars && text) {\n options.chars(text);\n }\n } else {\n var endTagLength = 0;\n var stackedTag = lastTag.toLowerCase();\n var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n endTagLength = endTag.length;\n if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n text = text\n .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n }\n if (shouldIgnoreFirstNewline(stackedTag, text)) {\n text = text.slice(1);\n }\n if (options.chars) {\n options.chars(text);\n }\n return ''\n });\n index += html.length - rest$1.length;\n html = rest$1;\n parseEndTag(stackedTag, index - endTagLength, index);\n }\n\n if (html === last) {\n options.chars && options.chars(html);\n if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {\n options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"));\n }\n break\n }\n }\n\n // Clean up any remaining tags\n parseEndTag();\n\n function advance (n) {\n index += n;\n html = html.substring(n);\n }\n\n function parseStartTag () {\n var start = html.match(startTagOpen);\n if (start) {\n var match = {\n tagName: start[1],\n attrs: [],\n start: index\n };\n advance(start[0].length);\n var end, attr;\n while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {\n advance(attr[0].length);\n match.attrs.push(attr);\n }\n if (end) {\n match.unarySlash = end[1];\n advance(end[0].length);\n match.end = index;\n return match\n }\n }\n }\n\n function handleStartTag (match) {\n var tagName = match.tagName;\n var unarySlash = match.unarySlash;\n\n if (expectHTML) {\n if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n parseEndTag(lastTag);\n }\n if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n parseEndTag(tagName);\n }\n }\n\n var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n var l = match.attrs.length;\n var attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n var args = match.attrs[i];\n // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778\n if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('\"\"') === -1) {\n if (args[3] === '') { delete args[3]; }\n if (args[4] === '') { delete args[4]; }\n if (args[5] === '') { delete args[5]; }\n }\n var value = args[3] || args[4] || args[5] || '';\n var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n ? options.shouldDecodeNewlinesForHref\n : options.shouldDecodeNewlines;\n attrs[i] = {\n name: args[1],\n value: decodeAttr(value, shouldDecodeNewlines)\n };\n }\n\n if (!unary) {\n stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs });\n lastTag = tagName;\n }\n\n if (options.start) {\n options.start(tagName, attrs, unary, match.start, match.end);\n }\n }\n\n function parseEndTag (tagName, start, end) {\n var pos, lowerCasedTagName;\n if (start == null) { start = index; }\n if (end == null) { end = index; }\n\n if (tagName) {\n lowerCasedTagName = tagName.toLowerCase();\n }\n\n // Find the closest opened tag of the same type\n if (tagName) {\n for (pos = stack.length - 1; pos >= 0; pos--) {\n if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n break\n }\n }\n } else {\n // If no tag name is provided, clean shop\n pos = 0;\n }\n\n if (pos >= 0) {\n // Close all the open elements, up the stack\n for (var i = stack.length - 1; i >= pos; i--) {\n if (process.env.NODE_ENV !== 'production' &&\n (i > pos || !tagName) &&\n options.warn\n ) {\n options.warn(\n (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\")\n );\n }\n if (options.end) {\n options.end(stack[i].tag, start, end);\n }\n }\n\n // Remove the open elements from the stack\n stack.length = pos;\n lastTag = pos && stack[pos - 1].tag;\n } else if (lowerCasedTagName === 'br') {\n if (options.start) {\n options.start(tagName, [], true, start, end);\n }\n } else if (lowerCasedTagName === 'p') {\n if (options.start) {\n options.start(tagName, [], false, start, end);\n }\n if (options.end) {\n options.end(tagName, start, end);\n }\n }\n }\n}\n\n/* */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /([^]*?)\\s+(?:in|of)\\s+([^]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^v-bind:/;\nvar modifierRE = /\\.[^.]+/g;\n\nvar decodeHTMLCached = cached(he.decode);\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\n\n\n\nfunction createASTElement (\n tag,\n attrs,\n parent\n) {\n return {\n type: 1,\n tag: tag,\n attrsList: attrs,\n attrsMap: makeAttrsMap(attrs),\n parent: parent,\n children: []\n }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n template,\n options\n) {\n warn$2 = options.warn || baseWarn;\n\n platformIsPreTag = options.isPreTag || no;\n platformMustUseProp = options.mustUseProp || no;\n platformGetTagNamespace = options.getTagNamespace || no;\n\n transforms = pluckModuleFunction(options.modules, 'transformNode');\n preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n delimiters = options.delimiters;\n\n var stack = [];\n var preserveWhitespace = options.preserveWhitespace !== false;\n var root;\n var currentParent;\n var inVPre = false;\n var inPre = false;\n var warned = false;\n\n function warnOnce (msg) {\n if (!warned) {\n warned = true;\n warn$2(msg);\n }\n }\n\n function closeElement (element) {\n // check pre state\n if (element.pre) {\n inVPre = false;\n }\n if (platformIsPreTag(element.tag)) {\n inPre = false;\n }\n // apply post-transforms\n for (var i = 0; i < postTransforms.length; i++) {\n postTransforms[i](element, options);\n }\n }\n\n parseHTML(template, {\n warn: warn$2,\n expectHTML: options.expectHTML,\n isUnaryTag: options.isUnaryTag,\n canBeLeftOpenTag: options.canBeLeftOpenTag,\n shouldDecodeNewlines: options.shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n shouldKeepComment: options.comments,\n start: function start (tag, attrs, unary) {\n // check namespace.\n // inherit parent ns if there is one\n var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n // handle IE svg bug\n /* istanbul ignore if */\n if (isIE && ns === 'svg') {\n attrs = guardIESVGBug(attrs);\n }\n\n var element = createASTElement(tag, attrs, currentParent);\n if (ns) {\n element.ns = ns;\n }\n\n if (isForbiddenTag(element) && !isServerRendering()) {\n element.forbidden = true;\n process.env.NODE_ENV !== 'production' && warn$2(\n 'Templates should only be responsible for mapping the state to the ' +\n 'UI. Avoid placing tags with side-effects in your templates, such as ' +\n \"<\" + tag + \">\" + ', as they will not be parsed.'\n );\n }\n\n // apply pre-transforms\n for (var i = 0; i < preTransforms.length; i++) {\n element = preTransforms[i](element, options) || element;\n }\n\n if (!inVPre) {\n processPre(element);\n if (element.pre) {\n inVPre = true;\n }\n }\n if (platformIsPreTag(element.tag)) {\n inPre = true;\n }\n if (inVPre) {\n processRawAttrs(element);\n } else if (!element.processed) {\n // structural directives\n processFor(element);\n processIf(element);\n processOnce(element);\n // element-scope stuff\n processElement(element, options);\n }\n\n function checkRootConstraints (el) {\n if (process.env.NODE_ENV !== 'production') {\n if (el.tag === 'slot' || el.tag === 'template') {\n warnOnce(\n \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n 'contain multiple nodes.'\n );\n }\n if (el.attrsMap.hasOwnProperty('v-for')) {\n warnOnce(\n 'Cannot use v-for on stateful component root element because ' +\n 'it renders multiple elements.'\n );\n }\n }\n }\n\n // tree management\n if (!root) {\n root = element;\n checkRootConstraints(root);\n } else if (!stack.length) {\n // allow root elements with v-if, v-else-if and v-else\n if (root.if && (element.elseif || element.else)) {\n checkRootConstraints(element);\n addIfCondition(root, {\n exp: element.elseif,\n block: element\n });\n } else if (process.env.NODE_ENV !== 'production') {\n warnOnce(\n \"Component template should contain exactly one root element. \" +\n \"If you are using v-if on multiple elements, \" +\n \"use v-else-if to chain them instead.\"\n );\n }\n }\n if (currentParent && !element.forbidden) {\n if (element.elseif || element.else) {\n processIfConditions(element, currentParent);\n } else if (element.slotScope) { // scoped slot\n currentParent.plain = false;\n var name = element.slotTarget || '\"default\"';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n } else {\n currentParent.children.push(element);\n element.parent = currentParent;\n }\n }\n if (!unary) {\n currentParent = element;\n stack.push(element);\n } else {\n closeElement(element);\n }\n },\n\n end: function end () {\n // remove trailing whitespace\n var element = stack[stack.length - 1];\n var lastNode = element.children[element.children.length - 1];\n if (lastNode && lastNode.type === 3 && lastNode.text === ' ' && !inPre) {\n element.children.pop();\n }\n // pop stack\n stack.length -= 1;\n currentParent = stack[stack.length - 1];\n closeElement(element);\n },\n\n chars: function chars (text) {\n if (!currentParent) {\n if (process.env.NODE_ENV !== 'production') {\n if (text === template) {\n warnOnce(\n 'Component template requires a root element, rather than just text.'\n );\n } else if ((text = text.trim())) {\n warnOnce(\n (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\")\n );\n }\n }\n return\n }\n // IE textarea placeholder bug\n /* istanbul ignore if */\n if (isIE &&\n currentParent.tag === 'textarea' &&\n currentParent.attrsMap.placeholder === text\n ) {\n return\n }\n var children = currentParent.children;\n text = inPre || text.trim()\n ? isTextTag(currentParent) ? text : decodeHTMLCached(text)\n // only preserve whitespace if its not right after a starting tag\n : preserveWhitespace && children.length ? ' ' : '';\n if (text) {\n var res;\n if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n children.push({\n type: 2,\n expression: res.expression,\n tokens: res.tokens,\n text: text\n });\n } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n children.push({\n type: 3,\n text: text\n });\n }\n }\n },\n comment: function comment (text) {\n currentParent.children.push({\n type: 3,\n text: text,\n isComment: true\n });\n }\n });\n return root\n}\n\nfunction processPre (el) {\n if (getAndRemoveAttr(el, 'v-pre') != null) {\n el.pre = true;\n }\n}\n\nfunction processRawAttrs (el) {\n var l = el.attrsList.length;\n if (l) {\n var attrs = el.attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n attrs[i] = {\n name: el.attrsList[i].name,\n value: JSON.stringify(el.attrsList[i].value)\n };\n }\n } else if (!el.pre) {\n // non root node in pre blocks with no attributes\n el.plain = true;\n }\n}\n\nfunction processElement (element, options) {\n processKey(element);\n\n // determine whether this is a plain element after\n // removing structural attributes\n element.plain = !element.key && !element.attrsList.length;\n\n processRef(element);\n processSlot(element);\n processComponent(element);\n for (var i = 0; i < transforms.length; i++) {\n element = transforms[i](element, options) || element;\n }\n processAttrs(element);\n}\n\nfunction processKey (el) {\n var exp = getBindingAttr(el, 'key');\n if (exp) {\n if (process.env.NODE_ENV !== 'production' && el.tag === 'template') {\n warn$2(\"<template> cannot be keyed. Place the key on real elements instead.\");\n }\n el.key = exp;\n }\n}\n\nfunction processRef (el) {\n var ref = getBindingAttr(el, 'ref');\n if (ref) {\n el.ref = ref;\n el.refInFor = checkInFor(el);\n }\n}\n\nfunction processFor (el) {\n var exp;\n if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n var res = parseFor(exp);\n if (res) {\n extend(el, res);\n } else if (process.env.NODE_ENV !== 'production') {\n warn$2(\n (\"Invalid v-for expression: \" + exp)\n );\n }\n }\n}\n\n\n\nfunction parseFor (exp) {\n var inMatch = exp.match(forAliasRE);\n if (!inMatch) { return }\n var res = {};\n res.for = inMatch[2].trim();\n var alias = inMatch[1].trim().replace(stripParensRE, '');\n var iteratorMatch = alias.match(forIteratorRE);\n if (iteratorMatch) {\n res.alias = alias.replace(forIteratorRE, '');\n res.iterator1 = iteratorMatch[1].trim();\n if (iteratorMatch[2]) {\n res.iterator2 = iteratorMatch[2].trim();\n }\n } else {\n res.alias = alias;\n }\n return res\n}\n\nfunction processIf (el) {\n var exp = getAndRemoveAttr(el, 'v-if');\n if (exp) {\n el.if = exp;\n addIfCondition(el, {\n exp: exp,\n block: el\n });\n } else {\n if (getAndRemoveAttr(el, 'v-else') != null) {\n el.else = true;\n }\n var elseif = getAndRemoveAttr(el, 'v-else-if');\n if (elseif) {\n el.elseif = elseif;\n }\n }\n}\n\nfunction processIfConditions (el, parent) {\n var prev = findPrevElement(parent.children);\n if (prev && prev.if) {\n addIfCondition(prev, {\n exp: el.elseif,\n block: el\n });\n } else if (process.env.NODE_ENV !== 'production') {\n warn$2(\n \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n \"used on element <\" + (el.tag) + \"> without corresponding v-if.\"\n );\n }\n}\n\nfunction findPrevElement (children) {\n var i = children.length;\n while (i--) {\n if (children[i].type === 1) {\n return children[i]\n } else {\n if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {\n warn$2(\n \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n \"will be ignored.\"\n );\n }\n children.pop();\n }\n }\n}\n\nfunction addIfCondition (el, condition) {\n if (!el.ifConditions) {\n el.ifConditions = [];\n }\n el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n var once$$1 = getAndRemoveAttr(el, 'v-once');\n if (once$$1 != null) {\n el.once = true;\n }\n}\n\nfunction processSlot (el) {\n if (el.tag === 'slot') {\n el.slotName = getBindingAttr(el, 'name');\n if (process.env.NODE_ENV !== 'production' && el.key) {\n warn$2(\n \"`key` does not work on <slot> because slots are abstract outlets \" +\n \"and can possibly expand into multiple elements. \" +\n \"Use the key on a wrapping element instead.\"\n );\n }\n } else {\n var slotScope;\n if (el.tag === 'template') {\n slotScope = getAndRemoveAttr(el, 'scope');\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && slotScope) {\n warn$2(\n \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n \"can also be used on plain elements in addition to <template> to \" +\n \"denote scoped slots.\",\n true\n );\n }\n el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {\n warn$2(\n \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n \"scoped slot to make it clearer.\",\n true\n );\n }\n el.slotScope = slotScope;\n }\n var slotTarget = getBindingAttr(el, 'slot');\n if (slotTarget) {\n el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n // preserve slot as an attribute for native shadow DOM compat\n // only for non-scoped slots.\n if (el.tag !== 'template' && !el.slotScope) {\n addAttr(el, 'slot', slotTarget);\n }\n }\n }\n}\n\nfunction processComponent (el) {\n var binding;\n if ((binding = getBindingAttr(el, 'is'))) {\n el.component = binding;\n }\n if (getAndRemoveAttr(el, 'inline-template') != null) {\n el.inlineTemplate = true;\n }\n}\n\nfunction processAttrs (el) {\n var list = el.attrsList;\n var i, l, name, rawName, value, modifiers, isProp;\n for (i = 0, l = list.length; i < l; i++) {\n name = rawName = list[i].name;\n value = list[i].value;\n if (dirRE.test(name)) {\n // mark element as dynamic\n el.hasBindings = true;\n // modifiers\n modifiers = parseModifiers(name);\n if (modifiers) {\n name = name.replace(modifierRE, '');\n }\n if (bindRE.test(name)) { // v-bind\n name = name.replace(bindRE, '');\n value = parseFilters(value);\n isProp = false;\n if (modifiers) {\n if (modifiers.prop) {\n isProp = true;\n name = camelize(name);\n if (name === 'innerHtml') { name = 'innerHTML'; }\n }\n if (modifiers.camel) {\n name = camelize(name);\n }\n if (modifiers.sync) {\n addHandler(\n el,\n (\"update:\" + (camelize(name))),\n genAssignmentCode(value, \"$event\")\n );\n }\n }\n if (isProp || (\n !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n )) {\n addProp(el, name, value);\n } else {\n addAttr(el, name, value);\n }\n } else if (onRE.test(name)) { // v-on\n name = name.replace(onRE, '');\n addHandler(el, name, value, modifiers, false, warn$2);\n } else { // normal directives\n name = name.replace(dirRE, '');\n // parse arg\n var argMatch = name.match(argRE);\n var arg = argMatch && argMatch[1];\n if (arg) {\n name = name.slice(0, -(arg.length + 1));\n }\n addDirective(el, name, rawName, value, arg, modifiers);\n if (process.env.NODE_ENV !== 'production' && name === 'model') {\n checkForAliasModel(el, value);\n }\n }\n } else {\n // literal attribute\n if (process.env.NODE_ENV !== 'production') {\n var res = parseText(value, delimiters);\n if (res) {\n warn$2(\n name + \"=\\\"\" + value + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.'\n );\n }\n }\n addAttr(el, name, JSON.stringify(value));\n // #6887 firefox doesn't update muted state if set via attribute\n // even immediately after element creation\n if (!el.component &&\n name === 'muted' &&\n platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n addProp(el, name, 'true');\n }\n }\n }\n}\n\nfunction checkInFor (el) {\n var parent = el;\n while (parent) {\n if (parent.for !== undefined) {\n return true\n }\n parent = parent.parent;\n }\n return false\n}\n\nfunction parseModifiers (name) {\n var match = name.match(modifierRE);\n if (match) {\n var ret = {};\n match.forEach(function (m) { ret[m.slice(1)] = true; });\n return ret\n }\n}\n\nfunction makeAttrsMap (attrs) {\n var map = {};\n for (var i = 0, l = attrs.length; i < l; i++) {\n if (\n process.env.NODE_ENV !== 'production' &&\n map[attrs[i].name] && !isIE && !isEdge\n ) {\n warn$2('duplicate attribute: ' + attrs[i].name);\n }\n map[attrs[i].name] = attrs[i].value;\n }\n return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n return (\n el.tag === 'style' ||\n (el.tag === 'script' && (\n !el.attrsMap.type ||\n el.attrsMap.type === 'text/javascript'\n ))\n )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n var res = [];\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n if (!ieNSBug.test(attr.name)) {\n attr.name = attr.name.replace(ieNSPrefix, '');\n res.push(attr);\n }\n }\n return res\n}\n\nfunction checkForAliasModel (el, value) {\n var _el = el;\n while (_el) {\n if (_el.for && _el.alias === value) {\n warn$2(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"You are binding v-model directly to a v-for iteration alias. \" +\n \"This will not be able to modify the v-for source array because \" +\n \"writing to the alias is like modifying a function local variable. \" +\n \"Consider using an array of objects and use v-model on an object property instead.\"\n );\n }\n _el = _el.parent;\n }\n}\n\n/* */\n\n/**\n * Expand input[v-model] with dyanmic type bindings into v-if-else chains\n * Turn this:\n * <input v-model=\"data[type]\" :type=\"type\">\n * into this:\n * <input v-if=\"type === 'checkbox'\" type=\"checkbox\" v-model=\"data[type]\">\n * <input v-else-if=\"type === 'radio'\" type=\"radio\" v-model=\"data[type]\">\n * <input v-else :type=\"type\" v-model=\"data[type]\">\n */\n\nfunction preTransformNode (el, options) {\n if (el.tag === 'input') {\n var map = el.attrsMap;\n if (!map['v-model']) {\n return\n }\n\n var typeBinding;\n if (map[':type'] || map['v-bind:type']) {\n typeBinding = getBindingAttr(el, 'type');\n }\n if (!map.type && !typeBinding && map['v-bind']) {\n typeBinding = \"(\" + (map['v-bind']) + \").type\";\n }\n\n if (typeBinding) {\n var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n // 1. checkbox\n var branch0 = cloneASTElement(el);\n // process for on the main node\n processFor(branch0);\n addRawAttr(branch0, 'type', 'checkbox');\n processElement(branch0, options);\n branch0.processed = true; // prevent it from double-processed\n branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n addIfCondition(branch0, {\n exp: branch0.if,\n block: branch0\n });\n // 2. add radio else-if condition\n var branch1 = cloneASTElement(el);\n getAndRemoveAttr(branch1, 'v-for', true);\n addRawAttr(branch1, 'type', 'radio');\n processElement(branch1, options);\n addIfCondition(branch0, {\n exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n block: branch1\n });\n // 3. other\n var branch2 = cloneASTElement(el);\n getAndRemoveAttr(branch2, 'v-for', true);\n addRawAttr(branch2, ':type', typeBinding);\n processElement(branch2, options);\n addIfCondition(branch0, {\n exp: ifCondition,\n block: branch2\n });\n\n if (hasElse) {\n branch0.else = true;\n } else if (elseIfCondition) {\n branch0.elseif = elseIfCondition;\n }\n\n return branch0\n }\n }\n}\n\nfunction cloneASTElement (el) {\n return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$2 = {\n preTransformNode: preTransformNode\n}\n\nvar modules$1 = [\n klass$1,\n style$1,\n model$2\n]\n\n/* */\n\nfunction text (el, dir) {\n if (dir.value) {\n addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"));\n }\n}\n\n/* */\n\nfunction html (el, dir) {\n if (dir.value) {\n addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"));\n }\n}\n\nvar directives$1 = {\n model: model,\n text: text,\n html: html\n}\n\n/* */\n\nvar baseOptions = {\n expectHTML: true,\n modules: modules$1,\n directives: directives$1,\n isPreTag: isPreTag,\n isUnaryTag: isUnaryTag,\n mustUseProp: mustUseProp,\n canBeLeftOpenTag: canBeLeftOpenTag,\n isReservedTag: isReservedTag,\n getTagNamespace: getTagNamespace,\n staticKeys: genStaticKeys(modules$1)\n};\n\n/* */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n * create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n if (!root) { return }\n isStaticKey = genStaticKeysCached(options.staticKeys || '');\n isPlatformReservedTag = options.isReservedTag || no;\n // first pass: mark all non-static nodes.\n markStatic$1(root);\n // second pass: mark static roots.\n markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n return makeMap(\n 'type,tag,attrsList,attrsMap,plain,parent,children,attrs' +\n (keys ? ',' + keys : '')\n )\n}\n\nfunction markStatic$1 (node) {\n node.static = isStatic(node);\n if (node.type === 1) {\n // do not make component slot content static. this avoids\n // 1. components not able to mutate slot nodes\n // 2. static slot content fails for hot-reloading\n if (\n !isPlatformReservedTag(node.tag) &&\n node.tag !== 'slot' &&\n node.attrsMap['inline-template'] == null\n ) {\n return\n }\n for (var i = 0, l = node.children.length; i < l; i++) {\n var child = node.children[i];\n markStatic$1(child);\n if (!child.static) {\n node.static = false;\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n var block = node.ifConditions[i$1].block;\n markStatic$1(block);\n if (!block.static) {\n node.static = false;\n }\n }\n }\n }\n}\n\nfunction markStaticRoots (node, isInFor) {\n if (node.type === 1) {\n if (node.static || node.once) {\n node.staticInFor = isInFor;\n }\n // For a node to qualify as a static root, it should have children that\n // are not just static text. Otherwise the cost of hoisting out will\n // outweigh the benefits and it's better off to just always render it fresh.\n if (node.static && node.children.length && !(\n node.children.length === 1 &&\n node.children[0].type === 3\n )) {\n node.staticRoot = true;\n return\n } else {\n node.staticRoot = false;\n }\n if (node.children) {\n for (var i = 0, l = node.children.length; i < l; i++) {\n markStaticRoots(node.children[i], isInFor || !!node.for);\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n markStaticRoots(node.ifConditions[i$1].block, isInFor);\n }\n }\n }\n}\n\nfunction isStatic (node) {\n if (node.type === 2) { // expression\n return false\n }\n if (node.type === 3) { // text\n return true\n }\n return !!(node.pre || (\n !node.hasBindings && // no dynamic bindings\n !node.if && !node.for && // not v-if or v-for or v-else\n !isBuiltInTag(node.tag) && // not a built-in\n isPlatformReservedTag(node.tag) && // not a component\n !isDirectChildOfTemplateFor(node) &&\n Object.keys(node).every(isStaticKey)\n ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n while (node.parent) {\n node = node.parent;\n if (node.tag !== 'template') {\n return false\n }\n if (node.for) {\n return true\n }\n }\n return false\n}\n\n/* */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n 'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n esc: 'Escape',\n tab: 'Tab',\n enter: 'Enter',\n space: ' ',\n // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n up: ['Up', 'ArrowUp'],\n left: ['Left', 'ArrowLeft'],\n right: ['Right', 'ArrowRight'],\n down: ['Down', 'ArrowDown'],\n 'delete': ['Backspace', 'Delete']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n stop: '$event.stopPropagation();',\n prevent: '$event.preventDefault();',\n self: genGuard(\"$event.target !== $event.currentTarget\"),\n ctrl: genGuard(\"!$event.ctrlKey\"),\n shift: genGuard(\"!$event.shiftKey\"),\n alt: genGuard(\"!$event.altKey\"),\n meta: genGuard(\"!$event.metaKey\"),\n left: genGuard(\"'button' in $event && $event.button !== 0\"),\n middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n events,\n isNative,\n warn\n) {\n var res = isNative ? 'nativeOn:{' : 'on:{';\n for (var name in events) {\n res += \"\\\"\" + name + \"\\\":\" + (genHandler(name, events[name])) + \",\";\n }\n return res.slice(0, -1) + '}'\n}\n\nfunction genHandler (\n name,\n handler\n) {\n if (!handler) {\n return 'function(){}'\n }\n\n if (Array.isArray(handler)) {\n return (\"[\" + (handler.map(function (handler) { return genHandler(name, handler); }).join(',')) + \"]\")\n }\n\n var isMethodPath = simplePathRE.test(handler.value);\n var isFunctionExpression = fnExpRE.test(handler.value);\n\n if (!handler.modifiers) {\n if (isMethodPath || isFunctionExpression) {\n return handler.value\n }\n /* istanbul ignore if */\n return (\"function($event){\" + (handler.value) + \"}\") // inline statement\n } else {\n var code = '';\n var genModifierCode = '';\n var keys = [];\n for (var key in handler.modifiers) {\n if (modifierCode[key]) {\n genModifierCode += modifierCode[key];\n // left/right\n if (keyCodes[key]) {\n keys.push(key);\n }\n } else if (key === 'exact') {\n var modifiers = (handler.modifiers);\n genModifierCode += genGuard(\n ['ctrl', 'shift', 'alt', 'meta']\n .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n .join('||')\n );\n } else {\n keys.push(key);\n }\n }\n if (keys.length) {\n code += genKeyFilter(keys);\n }\n // Make sure modifiers like prevent and stop get executed after key filtering\n if (genModifierCode) {\n code += genModifierCode;\n }\n var handlerCode = isMethodPath\n ? (\"return \" + (handler.value) + \"($event)\")\n : isFunctionExpression\n ? (\"return (\" + (handler.value) + \")($event)\")\n : handler.value;\n /* istanbul ignore if */\n return (\"function($event){\" + code + handlerCode + \"}\")\n }\n}\n\nfunction genKeyFilter (keys) {\n return (\"if(!('button' in $event)&&\" + (keys.map(genFilterCode).join('&&')) + \")return null;\")\n}\n\nfunction genFilterCode (key) {\n var keyVal = parseInt(key, 10);\n if (keyVal) {\n return (\"$event.keyCode!==\" + keyVal)\n }\n var keyCode = keyCodes[key];\n var keyName = keyNames[key];\n return (\n \"_k($event.keyCode,\" +\n (JSON.stringify(key)) + \",\" +\n (JSON.stringify(keyCode)) + \",\" +\n \"$event.key,\" +\n \"\" + (JSON.stringify(keyName)) +\n \")\"\n )\n}\n\n/* */\n\nfunction on (el, dir) {\n if (process.env.NODE_ENV !== 'production' && dir.modifiers) {\n warn(\"v-on without argument does not support modifiers.\");\n }\n el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/* */\n\nfunction bind$1 (el, dir) {\n el.wrapData = function (code) {\n return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n };\n}\n\n/* */\n\nvar baseDirectives = {\n on: on,\n bind: bind$1,\n cloak: noop\n}\n\n/* */\n\nvar CodegenState = function CodegenState (options) {\n this.options = options;\n this.warn = options.warn || baseWarn;\n this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n this.directives = extend(extend({}, baseDirectives), options.directives);\n var isReservedTag = options.isReservedTag || no;\n this.maybeComponent = function (el) { return !isReservedTag(el.tag); };\n this.onceId = 0;\n this.staticRenderFns = [];\n};\n\n\n\nfunction generate (\n ast,\n options\n) {\n var state = new CodegenState(options);\n var code = ast ? genElement(ast, state) : '_c(\"div\")';\n return {\n render: (\"with(this){return \" + code + \"}\"),\n staticRenderFns: state.staticRenderFns\n }\n}\n\nfunction genElement (el, state) {\n if (el.staticRoot && !el.staticProcessed) {\n return genStatic(el, state)\n } else if (el.once && !el.onceProcessed) {\n return genOnce(el, state)\n } else if (el.for && !el.forProcessed) {\n return genFor(el, state)\n } else if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.tag === 'template' && !el.slotTarget) {\n return genChildren(el, state) || 'void 0'\n } else if (el.tag === 'slot') {\n return genSlot(el, state)\n } else {\n // component or element\n var code;\n if (el.component) {\n code = genComponent(el.component, el, state);\n } else {\n var data = el.plain ? undefined : genData$2(el, state);\n\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n }\n // module transforms\n for (var i = 0; i < state.transforms.length; i++) {\n code = state.transforms[i](el, code);\n }\n return code\n }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n el.staticProcessed = true;\n state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n el.onceProcessed = true;\n if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.staticInFor) {\n var key = '';\n var parent = el.parent;\n while (parent) {\n if (parent.for) {\n key = parent.key;\n break\n }\n parent = parent.parent;\n }\n if (!key) {\n process.env.NODE_ENV !== 'production' && state.warn(\n \"v-once can only be used inside v-for that is keyed. \"\n );\n return genElement(el, state)\n }\n return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n } else {\n return genStatic(el, state)\n }\n}\n\nfunction genIf (\n el,\n state,\n altGen,\n altEmpty\n) {\n el.ifProcessed = true; // avoid recursion\n return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n conditions,\n state,\n altGen,\n altEmpty\n) {\n if (!conditions.length) {\n return altEmpty || '_e()'\n }\n\n var condition = conditions.shift();\n if (condition.exp) {\n return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n } else {\n return (\"\" + (genTernaryExp(condition.block)))\n }\n\n // v-if with v-once should generate code like (a)?_m(0):_m(1)\n function genTernaryExp (el) {\n return altGen\n ? altGen(el, state)\n : el.once\n ? genOnce(el, state)\n : genElement(el, state)\n }\n}\n\nfunction genFor (\n el,\n state,\n altGen,\n altHelper\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n if (process.env.NODE_ENV !== 'production' &&\n state.maybeComponent(el) &&\n el.tag !== 'slot' &&\n el.tag !== 'template' &&\n !el.key\n ) {\n state.warn(\n \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n \"v-for should have explicit keys. \" +\n \"See https://vuejs.org/guide/list.html#key for more info.\",\n true /* tip */\n );\n }\n\n el.forProcessed = true; // avoid recursion\n return (altHelper || '_l') + \"((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + ((altGen || genElement)(el, state)) +\n '})'\n}\n\nfunction genData$2 (el, state) {\n var data = '{';\n\n // directives first.\n // directives may mutate the el's other properties before they are generated.\n var dirs = genDirectives(el, state);\n if (dirs) { data += dirs + ','; }\n\n // key\n if (el.key) {\n data += \"key:\" + (el.key) + \",\";\n }\n // ref\n if (el.ref) {\n data += \"ref:\" + (el.ref) + \",\";\n }\n if (el.refInFor) {\n data += \"refInFor:true,\";\n }\n // pre\n if (el.pre) {\n data += \"pre:true,\";\n }\n // record original tag name for components using \"is\" attribute\n if (el.component) {\n data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n }\n // module data generation functions\n for (var i = 0; i < state.dataGenFns.length; i++) {\n data += state.dataGenFns[i](el);\n }\n // attributes\n if (el.attrs) {\n data += \"attrs:{\" + (genProps(el.attrs)) + \"},\";\n }\n // DOM props\n if (el.props) {\n data += \"domProps:{\" + (genProps(el.props)) + \"},\";\n }\n // event handlers\n if (el.events) {\n data += (genHandlers(el.events, false, state.warn)) + \",\";\n }\n if (el.nativeEvents) {\n data += (genHandlers(el.nativeEvents, true, state.warn)) + \",\";\n }\n // slot target\n // only for non-scoped slots\n if (el.slotTarget && !el.slotScope) {\n data += \"slot:\" + (el.slotTarget) + \",\";\n }\n // scoped slots\n if (el.scopedSlots) {\n data += (genScopedSlots(el.scopedSlots, state)) + \",\";\n }\n // component v-model\n if (el.model) {\n data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n }\n // inline-template\n if (el.inlineTemplate) {\n var inlineTemplate = genInlineTemplate(el, state);\n if (inlineTemplate) {\n data += inlineTemplate + \",\";\n }\n }\n data = data.replace(/,$/, '') + '}';\n // v-bind data wrap\n if (el.wrapData) {\n data = el.wrapData(data);\n }\n // v-on data wrap\n if (el.wrapListeners) {\n data = el.wrapListeners(data);\n }\n return data\n}\n\nfunction genDirectives (el, state) {\n var dirs = el.directives;\n if (!dirs) { return }\n var res = 'directives:[';\n var hasRuntime = false;\n var i, l, dir, needRuntime;\n for (i = 0, l = dirs.length; i < l; i++) {\n dir = dirs[i];\n needRuntime = true;\n var gen = state.directives[dir.name];\n if (gen) {\n // compile-time directive that manipulates AST.\n // returns true if it also needs a runtime counterpart.\n needRuntime = !!gen(el, dir, state.warn);\n }\n if (needRuntime) {\n hasRuntime = true;\n res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\\\"\" + (dir.arg) + \"\\\"\") : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n }\n }\n if (hasRuntime) {\n return res.slice(0, -1) + ']'\n }\n}\n\nfunction genInlineTemplate (el, state) {\n var ast = el.children[0];\n if (process.env.NODE_ENV !== 'production' && (\n el.children.length !== 1 || ast.type !== 1\n )) {\n state.warn('Inline-template components must have exactly one child element.');\n }\n if (ast.type === 1) {\n var inlineRenderFns = generate(ast, state.options);\n return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n }\n}\n\nfunction genScopedSlots (\n slots,\n state\n) {\n return (\"scopedSlots:_u([\" + (Object.keys(slots).map(function (key) {\n return genScopedSlot(key, slots[key], state)\n }).join(',')) + \"])\")\n}\n\nfunction genScopedSlot (\n key,\n el,\n state\n) {\n if (el.for && !el.forProcessed) {\n return genForScopedSlot(key, el, state)\n }\n var fn = \"function(\" + (String(el.slotScope)) + \"){\" +\n \"return \" + (el.tag === 'template'\n ? el.if\n ? ((el.if) + \"?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n : genChildren(el, state) || 'undefined'\n : genElement(el, state)) + \"}\";\n return (\"{key:\" + key + \",fn:\" + fn + \"}\")\n}\n\nfunction genForScopedSlot (\n key,\n el,\n state\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n el.forProcessed = true; // avoid recursion\n return \"_l((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + (genScopedSlot(key, el, state)) +\n '})'\n}\n\nfunction genChildren (\n el,\n state,\n checkSkip,\n altGenElement,\n altGenNode\n) {\n var children = el.children;\n if (children.length) {\n var el$1 = children[0];\n // optimize single v-for\n if (children.length === 1 &&\n el$1.for &&\n el$1.tag !== 'template' &&\n el$1.tag !== 'slot'\n ) {\n return (altGenElement || genElement)(el$1, state)\n }\n var normalizationType = checkSkip\n ? getNormalizationType(children, state.maybeComponent)\n : 0;\n var gen = altGenNode || genNode;\n return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType ? (\",\" + normalizationType) : ''))\n }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n children,\n maybeComponent\n) {\n var res = 0;\n for (var i = 0; i < children.length; i++) {\n var el = children[i];\n if (el.type !== 1) {\n continue\n }\n if (needsNormalization(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n res = 2;\n break\n }\n if (maybeComponent(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n res = 1;\n }\n }\n return res\n}\n\nfunction needsNormalization (el) {\n return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n if (node.type === 1) {\n return genElement(node, state)\n } if (node.type === 3 && node.isComment) {\n return genComment(node)\n } else {\n return genText(node)\n }\n}\n\nfunction genText (text) {\n return (\"_v(\" + (text.type === 2\n ? text.expression // no need for () because already wrapped in _s()\n : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n var slotName = el.slotName || '\"default\"';\n var children = genChildren(el, state);\n var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n var attrs = el.attrs && (\"{\" + (el.attrs.map(function (a) { return ((camelize(a.name)) + \":\" + (a.value)); }).join(',')) + \"}\");\n var bind$$1 = el.attrsMap['v-bind'];\n if ((attrs || bind$$1) && !children) {\n res += \",null\";\n }\n if (attrs) {\n res += \",\" + attrs;\n }\n if (bind$$1) {\n res += (attrs ? '' : ',null') + \",\" + bind$$1;\n }\n return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n componentName,\n el,\n state\n) {\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n var res = '';\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n /* istanbul ignore if */\n {\n res += \"\\\"\" + (prop.name) + \"\\\":\" + (transformSpecialNewlines(prop.value)) + \",\";\n }\n }\n return res.slice(0, -1)\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n return text\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/* */\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\n 'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n 'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast) {\n var errors = [];\n if (ast) {\n checkNode(ast, errors);\n }\n return errors\n}\n\nfunction checkNode (node, errors) {\n if (node.type === 1) {\n for (var name in node.attrsMap) {\n if (dirRE.test(name)) {\n var value = node.attrsMap[name];\n if (value) {\n if (name === 'v-for') {\n checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), errors);\n } else if (onRE.test(name)) {\n checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), errors);\n } else {\n checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), errors);\n }\n }\n }\n }\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n checkNode(node.children[i], errors);\n }\n }\n } else if (node.type === 2) {\n checkExpression(node.expression, node.text, errors);\n }\n}\n\nfunction checkEvent (exp, text, errors) {\n var stipped = exp.replace(stripStringRE, '');\n var keywordMatch = stipped.match(unaryOperatorsRE);\n if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n errors.push(\n \"avoid using JavaScript unary operator as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim())\n );\n }\n checkExpression(exp, text, errors);\n}\n\nfunction checkFor (node, text, errors) {\n checkExpression(node.for || '', text, errors);\n checkIdentifier(node.alias, 'v-for alias', text, errors);\n checkIdentifier(node.iterator1, 'v-for iterator', text, errors);\n checkIdentifier(node.iterator2, 'v-for iterator', text, errors);\n}\n\nfunction checkIdentifier (\n ident,\n type,\n text,\n errors\n) {\n if (typeof ident === 'string') {\n try {\n new Function((\"var \" + ident + \"=_\"));\n } catch (e) {\n errors.push((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())));\n }\n }\n}\n\nfunction checkExpression (exp, text, errors) {\n try {\n new Function((\"return \" + exp));\n } catch (e) {\n var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n if (keywordMatch) {\n errors.push(\n \"avoid using JavaScript keyword as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n Raw expression: \" + (text.trim())\n );\n } else {\n errors.push(\n \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n \" \" + exp + \"\\n\\n\" +\n \" Raw expression: \" + (text.trim()) + \"\\n\"\n );\n }\n }\n}\n\n/* */\n\nfunction createFunction (code, errors) {\n try {\n return new Function(code)\n } catch (err) {\n errors.push({ err: err, code: code });\n return noop\n }\n}\n\nfunction createCompileToFunctionFn (compile) {\n var cache = Object.create(null);\n\n return function compileToFunctions (\n template,\n options,\n vm\n ) {\n options = extend({}, options);\n var warn$$1 = options.warn || warn;\n delete options.warn;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n // detect possible CSP restriction\n try {\n new Function('return 1');\n } catch (e) {\n if (e.toString().match(/unsafe-eval|CSP/)) {\n warn$$1(\n 'It seems you are using the standalone build of Vue.js in an ' +\n 'environment with Content Security Policy that prohibits unsafe-eval. ' +\n 'The template compiler cannot work in this environment. Consider ' +\n 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n 'templates into render functions.'\n );\n }\n }\n }\n\n // check cache\n var key = options.delimiters\n ? String(options.delimiters) + template\n : template;\n if (cache[key]) {\n return cache[key]\n }\n\n // compile\n var compiled = compile(template, options);\n\n // check compilation errors/tips\n if (process.env.NODE_ENV !== 'production') {\n if (compiled.errors && compiled.errors.length) {\n warn$$1(\n \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n vm\n );\n }\n if (compiled.tips && compiled.tips.length) {\n compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n }\n }\n\n // turn code into functions\n var res = {};\n var fnGenErrors = [];\n res.render = createFunction(compiled.render, fnGenErrors);\n res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n return createFunction(code, fnGenErrors)\n });\n\n // check function generation errors.\n // this should only happen if there is a bug in the compiler itself.\n // mostly for codegen development use\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n warn$$1(\n \"Failed to generate render function:\\n\\n\" +\n fnGenErrors.map(function (ref) {\n var err = ref.err;\n var code = ref.code;\n\n return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n }).join('\\n'),\n vm\n );\n }\n }\n\n return (cache[key] = res)\n }\n}\n\n/* */\n\nfunction createCompilerCreator (baseCompile) {\n return function createCompiler (baseOptions) {\n function compile (\n template,\n options\n ) {\n var finalOptions = Object.create(baseOptions);\n var errors = [];\n var tips = [];\n finalOptions.warn = function (msg, tip) {\n (tip ? tips : errors).push(msg);\n };\n\n if (options) {\n // merge custom modules\n if (options.modules) {\n finalOptions.modules =\n (baseOptions.modules || []).concat(options.modules);\n }\n // merge custom directives\n if (options.directives) {\n finalOptions.directives = extend(\n Object.create(baseOptions.directives || null),\n options.directives\n );\n }\n // copy other options\n for (var key in options) {\n if (key !== 'modules' && key !== 'directives') {\n finalOptions[key] = options[key];\n }\n }\n }\n\n var compiled = baseCompile(template, finalOptions);\n if (process.env.NODE_ENV !== 'production') {\n errors.push.apply(errors, detectErrors(compiled.ast));\n }\n compiled.errors = errors;\n compiled.tips = tips;\n return compiled\n }\n\n return {\n compile: compile,\n compileToFunctions: createCompileToFunctionFn(compile)\n }\n }\n}\n\n/* */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n template,\n options\n) {\n var ast = parse(template.trim(), options);\n if (options.optimize !== false) {\n optimize(ast, options);\n }\n var code = generate(ast, options);\n return {\n ast: ast,\n render: code.render,\n staticRenderFns: code.staticRenderFns\n }\n});\n\n/* */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/* */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n div = div || document.createElement('div');\n div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n return div.innerHTML.indexOf('&#10;') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && !template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue.compile = compileToFunctions;\n\nmodule.exports = Vue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue/dist/vue.common.js\n// module id = 14\n// module chunks = 0","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/timers-browserify/main.js\n// module id = 15\n// module chunks = 0","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/setimmediate/setImmediate.js\n// module id = 16\n// module chunks = 0","window._ = require('lodash');\nwindow.Popper = require('popper.js').default;\n\n/**\n * We'll load jQuery and the Bootstrap jQuery plugin which provides support\n * for JavaScript based Bootstrap features such as modals and tabs. This\n * code may be modified to fit the specific needs of your application.\n */\n\ntry {\n window.$ = window.jQuery = require('jquery');\n require('bootstrap');\n} catch (e) {}\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = require('axios');\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Next we will register the CSRF Token as a common header with Axios so that\n * all outgoing HTTP requests automatically have it attached. This is just\n * a simple convenience so we don't have to attach every token manually.\n */\n\nlet token = document.head.querySelector('meta[name=\"csrf-token\"]');\n\nif (token) {\n window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;\n} else {\n console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');\n}\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n// import Echo from \"laravel-echo\"\n// window.io = require('socket.io-client');\n\n// if (typeof io !== 'undefined') {\n// window.Echo = new Echo({\n// broadcaster: 'socket.io',\n// host: window.location.hostname + ':6001',\n// });\n// }\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/js/bootstrap.js","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.10';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n var sourceURL = '//# sourceURL=' +\n ('sourceURL' in options\n ? options.sourceURL\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/lodash.js\n// module id = 18\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 19\n// module chunks = 0","/*!\n * Bootstrap v4.1.1 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (factory((global.bootstrap = {}),global.jQuery,global.Popper));\n}(this, (function (exports,$,Popper) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Util = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($$$1(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $$$1(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $$$1.fn.emulateTransitionEnd = transitionEndEmulator;\n $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n var $selector = $$$1(document).find(selector);\n return $selector.length > 0 ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $$$1(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $$$1(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Alert = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'alert';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = $$$1(selector)[0];\n }\n\n if (!parent) {\n parent = $$$1(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $$$1.Event(Event.CLOSE);\n $$$1(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $$$1(element).removeClass(ClassName.SHOW);\n\n if (!$$$1(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $$$1(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $$$1(element).detach().trigger(Event.CLOSED).remove();\n }; // Static\n\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $$$1(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Alert._jQueryInterface;\n $$$1.fn[NAME].Constructor = Alert;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Button = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'button';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = $$$1(this._element).find(Selector.INPUT)[0];\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0];\n\n if (activeElement) {\n $$$1(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE);\n $$$1(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $$$1(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Static\n\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$$$1(button).hasClass(ClassName.BUTTON)) {\n button = $$$1(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($$$1(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $$$1(event.target).closest(Selector.BUTTON)[0];\n $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Button._jQueryInterface;\n $$$1.fn[NAME].Constructor = Button;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Carousel = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'carousel';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this._config = this._getConfig(config);\n this._element = $$$1(element)[0];\n this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0];\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $$$1(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $$$1(this._element).off(EVENT_KEY);\n $$$1.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $$$1(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $$$1(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $$$1(this._element).on(Event.TOUCHEND, function () {\n _this2.pause();\n\n if (_this2.touchTimeout) {\n clearTimeout(_this2.touchTimeout);\n }\n\n _this2.touchTimeout = setTimeout(function (event) {\n return _this2.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n });\n }\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM));\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]);\n\n var slideEvent = $$$1.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $$$1(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $$$1(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this3 = this;\n\n var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $$$1.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($$$1(this._element).hasClass(ClassName.SLIDE)) {\n $$$1(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $$$1(activeElement).addClass(directionalClassName);\n $$$1(nextElement).addClass(directionalClassName);\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $$$1(activeElement).one(Util.TRANSITION_END, function () {\n $$$1(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $$$1(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this3._isSliding = false;\n setTimeout(function () {\n return $$$1(_this3._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $$$1(activeElement).removeClass(ClassName.ACTIVE);\n $$$1(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $$$1(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n }; // Static\n\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $$$1(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $$$1(selector)[0];\n\n if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($$$1(target), config);\n\n if (slideIndex) {\n $$$1(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $$$1(window).on(Event.LOAD_DATA_API, function () {\n $$$1(Selector.DATA_RIDE).each(function () {\n var $carousel = $$$1(this);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Carousel._jQueryInterface;\n $$$1.fn[NAME].Constructor = Carousel;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Collapse = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'collapse';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = $$$1.makeArray($$$1(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var tabToggles = $$$1(Selector.DATA_TOGGLE);\n\n for (var i = 0; i < tabToggles.length; i++) {\n var elem = tabToggles[i];\n var selector = Util.getSelectorFromElement(elem);\n\n if (selector !== null && $$$1(selector).filter(element).length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($$$1(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter(\"[data-parent=\\\"\" + this._config.parent + \"\\\"]\"));\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $$$1(actives).not(this._selector).data(DATA_KEY);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $$$1.Event(Event.SHOW);\n $$$1(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $$$1(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length > 0) {\n $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $$$1(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $$$1.Event(Event.HIDE);\n $$$1(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n\n if (this._triggerArray.length > 0) {\n for (var i = 0; i < this._triggerArray.length; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $$$1(selector);\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent = null;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = $$$1(this._config.parent)[0];\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n $$$1(parent).find(selector).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n var isOpen = $$$1(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length > 0) {\n $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n }\n }; // Static\n\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? $$$1(selector)[0] : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $$$1(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $$$1(this);\n var selector = Util.getSelectorFromElement(this);\n $$$1(selector).each(function () {\n var $target = $$$1(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Collapse._jQueryInterface;\n $$$1.fn[NAME].Constructor = Collapse;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Dropdown = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'dropdown';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.dropdown';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown =\n /*#__PURE__*/\n function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $$$1(this._menu).hasClass(ClassName.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $$$1.Event(Event.SHOW, relatedTarget);\n $$$1(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $$$1(parent).addClass(ClassName.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $$$1(document.body).children().on('mouseover', null, $$$1.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $$$1(this._menu).toggleClass(ClassName.SHOW);\n $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(this._element).off(EVENT_KEY);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Private\n\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $$$1(this._element).on(Event.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n this._menu = $$$1(parent).find(Selector.MENU)[0];\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $$$1(this._element).parent();\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $$$1(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var _this2 = this;\n\n var offsetConf = {};\n\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});\n return data;\n };\n } else {\n offsetConf.offset = this._config.offset;\n }\n\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n }; // Static\n\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE));\n\n for (var i = 0; i < toggles.length; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $$$1(toggles[i]).data(DATA_KEY);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$$$1(parent).hasClass(ClassName.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $$$1.Event(Event.HIDE, relatedTarget);\n $$$1(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().off('mouseover', null, $$$1.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $$$1(dropdownMenu).removeClass(ClassName.SHOW);\n $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = $$$1(selector)[0];\n }\n\n return parent || element.parentNode;\n }; // eslint-disable-next-line complexity\n\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $$$1(parent).hasClass(ClassName.SHOW);\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = $$$1(parent).find(Selector.DATA_TOGGLE)[0];\n $$$1(toggle).trigger('focus');\n }\n\n $$$1(this).trigger('click');\n return;\n }\n\n var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get();\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($$$1(this), 'toggle');\n }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Dropdown._jQueryInterface;\n $$$1.fn[NAME].Constructor = Dropdown;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Dropdown._jQueryInterface;\n };\n\n return Dropdown;\n }($, Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Modal = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'modal';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top',\n NAVBAR_TOGGLER: '.navbar-toggler'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = $$$1(element).find(Selector.DIALOG)[0];\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isTransitioning || this._isShown) {\n return;\n }\n\n if ($$$1(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $$$1.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $$$1(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n $$$1(document.body).addClass(ClassName.OPEN);\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($$$1(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (this._isTransitioning || !this._isShown) {\n return;\n }\n\n var hideEvent = $$$1.Event(Event.HIDE);\n $$$1(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $$$1(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $$$1(document).off(Event.FOCUSIN);\n $$$1(this._element).removeClass(ClassName.SHOW);\n $$$1(this._element).off(Event.CLICK_DISMISS);\n $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $$$1(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.scrollTop = 0;\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $$$1(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $$$1.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $$$1(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $$$1(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $$$1(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $$$1(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $$$1(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $$$1(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $$$1(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n $$$1(this._backdrop).addClass(animate);\n }\n\n $$$1(this._backdrop).appendTo(document.body);\n $$$1(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $$$1(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $$$1(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($$$1(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n }; // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n // Adjust fixed content padding\n $$$1(Selector.FIXED_CONTENT).each(function (index, element) {\n var actualPadding = $$$1(element)[0].style.paddingRight;\n var calculatedPadding = $$$1(element).css('padding-right');\n $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $$$1(Selector.STICKY_CONTENT).each(function (index, element) {\n var actualMargin = $$$1(element)[0].style.marginRight;\n var calculatedMargin = $$$1(element).css('margin-right');\n $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust navbar-toggler margin\n\n $$$1(Selector.NAVBAR_TOGGLER).each(function (index, element) {\n var actualMargin = $$$1(element)[0].style.marginRight;\n var calculatedMargin = $$$1(element).css('margin-right');\n $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $$$1(document.body).css('padding-right');\n $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n $$$1(Selector.FIXED_CONTENT).each(function (index, element) {\n var padding = $$$1(element).data('padding-right');\n\n if (typeof padding !== 'undefined') {\n $$$1(element).css('padding-right', padding).removeData('padding-right');\n }\n }); // Restore sticky content and navbar-toggler margin\n\n $$$1(Selector.STICKY_CONTENT + \", \" + Selector.NAVBAR_TOGGLER).each(function (index, element) {\n var margin = $$$1(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $$$1(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $$$1(document.body).data('padding-right');\n\n if (typeof padding !== 'undefined') {\n $$$1(document.body).css('padding-right', padding).removeData('padding-right');\n }\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }; // Static\n\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = $$$1(selector)[0];\n }\n\n var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $$$1(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($$$1(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($$$1(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Modal._jQueryInterface;\n $$$1.fn[NAME].Constructor = Modal;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Tooltip = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $$$1.removeData(this.element, this.constructor.DATA_KEY);\n $$$1(this.element).off(this.constructor.EVENT_KEY);\n $$$1(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $$$1(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($$$1(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $$$1.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $$$1(this.element).trigger(showEvent);\n var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $$$1(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $$$1(this.config.container);\n $$$1(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $$$1(tip).appendTo(container);\n }\n\n $$$1(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().on('mouseover', null, $$$1.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $$$1(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($$$1(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $$$1.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $$$1(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $$$1(document.body).children().off('mouseover', null, $$$1.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($$$1(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $$$1(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $$$1(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $$$1(this.getTipElement());\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$$$1(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($$$1(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $$$1(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $$$1(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $$$1(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(data.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $$$1(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $$$1.fn[NAME] = Tooltip._jQueryInterface;\n $$$1.fn[NAME].Constructor = Tooltip;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n }($, Popper);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Popover = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'popover';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $$$1(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $$$1(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n }; // Private\n\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $$$1(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n }; // Static\n\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $$$1.fn[NAME] = Popover._jQueryInterface;\n $$$1.fn[NAME].Constructor = Popover;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var ScrollSpy = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'scrollspy';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $$$1(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = $$$1.makeArray($$$1(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = $$$1(targetSelector)[0];\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n $$$1(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $$$1(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $$$1(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n for (var i = this._offsets.length; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n queries = queries.map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n });\n var $link = $$$1(queries.join(','));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $$$1(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n $$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n }; // Static\n\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $$$1(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $$$1(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = $$$1.makeArray($$$1(Selector.DATA_SPY));\n\n for (var i = scrollSpys.length; i--;) {\n var $spy = $$$1(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = ScrollSpy._jQueryInterface;\n $$$1.fn[NAME].Constructor = ScrollSpy;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n var Tab = function ($$$1) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tab';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $$$1.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $$$1.makeArray($$$1(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $$$1.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $$$1.Event(Event.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $$$1(previous).trigger(hideEvent);\n }\n\n $$$1(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = $$$1(selector)[0];\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $$$1.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $$$1.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $$$1(previous).trigger(hiddenEvent);\n $$$1(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $$$1.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements;\n\n if (container.nodeName === 'UL') {\n activeElements = $$$1(container).find(Selector.ACTIVE_UL);\n } else {\n activeElements = $$$1(container).children(Selector.ACTIVE);\n }\n\n var active = activeElements[0];\n var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $$$1(active).removeClass(ClassName.SHOW + \" \" + ClassName.ACTIVE);\n var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $$$1(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $$$1(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n $$$1(element).addClass(ClassName.SHOW);\n\n if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n $$$1(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n }; // Static\n\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $$$1(this);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($$$1(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $$$1.fn[NAME] = Tab._jQueryInterface;\n $$$1.fn[NAME].Constructor = Tab;\n\n $$$1.fn[NAME].noConflict = function () {\n $$$1.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n }($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n (function ($$$1) {\n if (typeof $$$1 === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $$$1.fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n })($);\n\n exports.Util = Util;\n exports.Alert = Alert;\n exports.Button = Button;\n exports.Carousel = Carousel;\n exports.Collapse = Collapse;\n exports.Dropdown = Dropdown;\n exports.Modal = Modal;\n exports.Popover = Popover;\n exports.Scrollspy = ScrollSpy;\n exports.Tab = Tab;\n exports.Tooltip = Tooltip;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/dist/js/bootstrap.js\n// module id = 20\n// module chunks = 0","module.exports = require('./lib/axios');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/index.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/axios.js\n// module id = 22\n// module chunks = 0","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/is-buffer/index.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n config.method = config.method.toLowerCase();\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/Axios.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/normalizeHeaderName.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/settle.js\n// module id = 26\n// module chunks = 0","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/enhanceError.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/buildURL.js\n// module id = 28\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/parseHeaders.js\n// module id = 29\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n// module id = 30\n// module chunks = 0","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/btoa.js\n// module id = 31\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/cookies.js\n// module id = 32\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/InterceptorManager.js\n// module id = 33\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/dispatchRequest.js\n// module id = 34\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/transformData.js\n// module id = 35\n// module chunks = 0","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n// module id = 36\n// module chunks = 0","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/combineURLs.js\n// module id = 37\n// module chunks = 0","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/cancel/CancelToken.js\n// module id = 38\n// module chunks = 0","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/spread.js\n// module id = 39\n// module chunks = 0","// var openpgp = window.openpgp;\n\n// var options = {\n// userIds: [{ name:'Marvin Borner', email:'test@test.de' }], // multiple user IDs\n// numBits: 4096, // RSA key size\n// passphrase: 'cool password of private key'\n// };\n\n// openpgp.generateKey(options).then(function(key) {\n// var privateKey = key.privateKeyArmored; // '-----BEGIN PGP PRIVATE KEY BLOCK ... '\n// var publicKey = key.publicKeyArmored; // '-----BEGIN PGP PUBLIC KEY BLOCK ... '\n\n// console.log(publicKey);\n// console.log(privateKey);\n// });\n\n\n\nvar socket = io('http://127.0.0.1:8890', {\n transports: ['websocket']\n});\nsocket.on('message', function (data) {\n data = JSON.parse(data);\n $(\"#messages\").append(\"<p>\" + data.user + \" : \" + data.message + \"</p>\");\n});\n\n$('input.send').click(function (e) {\n e.preventDefault();\n sendMessage();\n});\n\nfunction sendMessage() {\n var message = $('input.message').val();\n $('input.message').val(\"\");\n $.ajax({\n type: \"POST\",\n url: \"sendMessage\",\n data: {\n \"_token\": $('meta[name=\"csrf-token\"]').attr('content'),\n \"message\": message\n },\n cache: false,\n success: function (results) {}\n });\n}\n\n\n// WEBPACK FOOTER //\n// ./resources/assets/js/chat.js"],"sourceRoot":""} \ No newline at end of file
diff --git a/public/js/initial_key_gen.js b/public/js/initial_key_gen.js
deleted file mode 100755
index ab068f0..0000000
--- a/public/js/initial_key_gen.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "/";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 56);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 56:
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(57);
-
-
-/***/ }),
-
-/***/ 57:
-/***/ (function(module, exports) {
-
-eval("$('form[keygen]').submit(function (event) {\n event.preventDefault();\n\n $('button[type=\"submit\"]').attr(\"disabled\", true).html('Loading...');\n\n var openpgp = window.openpgp;\n\n var options = {\n userIds: [{\n email: $(\"input#email\").val()\n }],\n numBits: 4096,\n passphrase: $(\"input#password\").val()\n };\n\n openpgp.generateKey(options).then(function (key) {\n var privateKey = key.privateKeyArmored;\n var publicKey = key.publicKeyArmored;\n\n localStorage.setItem(\"privkey\", privateKey);\n\n var now = new Date();\n var time = now.getTime();\n time += 3600 * 1000;\n now.setTime(time);\n document.cookie = \"publickey=\" + encodeURI(publicKey.substr(96).slice(0, -35)) + \"; expires=\" + now.toUTCString() + \";\";\n\n $('form[keygen]').unbind('submit').submit();\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2luaXRpYWxfa2V5X2dlbi5qcz8xMDVlIl0sIm5hbWVzIjpbIiQiLCJzdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiYXR0ciIsImh0bWwiLCJvcGVucGdwIiwid2luZG93Iiwib3B0aW9ucyIsInVzZXJJZHMiLCJlbWFpbCIsInZhbCIsIm51bUJpdHMiLCJwYXNzcGhyYXNlIiwiZ2VuZXJhdGVLZXkiLCJ0aGVuIiwia2V5IiwicHJpdmF0ZUtleSIsInByaXZhdGVLZXlBcm1vcmVkIiwicHVibGljS2V5IiwicHVibGljS2V5QXJtb3JlZCIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJub3ciLCJEYXRlIiwidGltZSIsImdldFRpbWUiLCJzZXRUaW1lIiwiZG9jdW1lbnQiLCJjb29raWUiLCJlbmNvZGVVUkkiLCJzdWJzdHIiLCJzbGljZSIsInRvVVRDU3RyaW5nIiwidW5iaW5kIl0sIm1hcHBpbmdzIjoiQUFBQUEsRUFBRSxjQUFGLEVBQWtCQyxNQUFsQixDQUF5QixVQUFDQyxLQUFELEVBQVc7QUFDaENBLFVBQU1DLGNBQU47O0FBRUFILE1BQUUsdUJBQUYsRUFBMkJJLElBQTNCLENBQWdDLFVBQWhDLEVBQTRDLElBQTVDLEVBQWtEQyxJQUFsRCxDQUF1RCxZQUF2RDs7QUFFQSxRQUFJQyxVQUFVQyxPQUFPRCxPQUFyQjs7QUFFQSxRQUFJRSxVQUFVO0FBQ1ZDLGlCQUFTLENBQUM7QUFDTkMsbUJBQU9WLEVBQUUsYUFBRixFQUFpQlcsR0FBakI7QUFERCxTQUFELENBREM7QUFJVkMsaUJBQVMsSUFKQztBQUtWQyxvQkFBWWIsRUFBRSxnQkFBRixFQUFvQlcsR0FBcEI7QUFMRixLQUFkOztBQVFBTCxZQUFRUSxXQUFSLENBQW9CTixPQUFwQixFQUE2Qk8sSUFBN0IsQ0FBa0MsVUFBQ0MsR0FBRCxFQUFTO0FBQ3ZDLFlBQUlDLGFBQWFELElBQUlFLGlCQUFyQjtBQUNBLFlBQUlDLFlBQVlILElBQUlJLGdCQUFwQjs7QUFFQUMscUJBQWFDLE9BQWIsQ0FBcUIsU0FBckIsRUFBZ0NMLFVBQWhDOztBQUVBLFlBQUlNLE1BQU0sSUFBSUMsSUFBSixFQUFWO0FBQ0EsWUFBSUMsT0FBT0YsSUFBSUcsT0FBSixFQUFYO0FBQ0FELGdCQUFRLE9BQU8sSUFBZjtBQUNBRixZQUFJSSxPQUFKLENBQVlGLElBQVo7QUFDQUcsaUJBQVNDLE1BQVQsR0FBa0IsZUFBZUMsVUFBVVgsVUFBVVksTUFBVixDQUFpQixFQUFqQixFQUFxQkMsS0FBckIsQ0FBMkIsQ0FBM0IsRUFBOEIsQ0FBQyxFQUEvQixDQUFWLENBQWYsR0FBK0QsWUFBL0QsR0FBOEVULElBQUlVLFdBQUosRUFBOUUsR0FBa0csR0FBcEg7O0FBRUFqQyxVQUFFLGNBQUYsRUFBa0JrQyxNQUFsQixDQUF5QixRQUF6QixFQUFtQ2pDLE1BQW5DO0FBQ0gsS0FiRDtBQWNILENBN0JEIiwiZmlsZSI6IjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJCgnZm9ybVtrZXlnZW5dJykuc3VibWl0KChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKCdidXR0b25bdHlwZT1cInN1Ym1pdFwiXScpLmF0dHIoXCJkaXNhYmxlZFwiLCB0cnVlKS5odG1sKCdMb2FkaW5nLi4uJyk7XG5cbiAgICB2YXIgb3BlbnBncCA9IHdpbmRvdy5vcGVucGdwO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHVzZXJJZHM6IFt7XG4gICAgICAgICAgICBlbWFpbDogJChcImlucHV0I2VtYWlsXCIpLnZhbCgpXG4gICAgICAgIH1dLFxuICAgICAgICBudW1CaXRzOiA0MDk2LFxuICAgICAgICBwYXNzcGhyYXNlOiAkKFwiaW5wdXQjcGFzc3dvcmRcIikudmFsKClcbiAgICB9O1xuXG4gICAgb3BlbnBncC5nZW5lcmF0ZUtleShvcHRpb25zKS50aGVuKChrZXkpID0+IHtcbiAgICAgICAgdmFyIHByaXZhdGVLZXkgPSBrZXkucHJpdmF0ZUtleUFybW9yZWQ7XG4gICAgICAgIHZhciBwdWJsaWNLZXkgPSBrZXkucHVibGljS2V5QXJtb3JlZDtcblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInByaXZrZXlcIiwgcHJpdmF0ZUtleSk7XG5cbiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHZhciB0aW1lID0gbm93LmdldFRpbWUoKTtcbiAgICAgICAgdGltZSArPSAzNjAwICogMTAwMDtcbiAgICAgICAgbm93LnNldFRpbWUodGltZSk7XG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IFwicHVibGlja2V5PVwiICsgZW5jb2RlVVJJKHB1YmxpY0tleS5zdWJzdHIoOTYpLnNsaWNlKDAsIC0zNSkpICsgXCI7IGV4cGlyZXM9XCIgKyBub3cudG9VVENTdHJpbmcoKSArIFwiO1wiO1xuXG4gICAgICAgICQoJ2Zvcm1ba2V5Z2VuXScpLnVuYmluZCgnc3VibWl0Jykuc3VibWl0KCk7XG4gICAgfSk7XG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2luaXRpYWxfa2V5X2dlbi5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///57\n");
-
-/***/ })
-
-/******/ }); \ No newline at end of file
diff --git a/public/js/service-worker-ext.js b/public/js/service-worker-ext.js
deleted file mode 100644
index 8acfa5f..0000000
--- a/public/js/service-worker-ext.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("[SERVICE WORKER] Started!"); \ No newline at end of file
diff --git a/public/manifest.json b/public/manifest.json
deleted file mode 100644
index 331eabb..0000000
--- a/public/manifest.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "short_name": "BEAM-Messenger",
- "name": "BEAM-Messenger",
- "theme_color": "#fff",
- "background_color": "#fff",
- "display": "standalone",
- "icons": [
- {
- "src": "icons/icon_48_48_dpi.png",
- "type": "image/png",
- "sizes": "48x48"
- },
- {
- "src": "icons/icon_72_48_dpi.png",
- "type": "image/png",
- "sizes": "72x72"
- },
- {
- "src": "icons/icon_96_48_dpi.png",
- "type": "image/png",
- "sizes": "96x96"
- },
- {
- "src": "icons/icon_144_48_dpi.png",
- "type": "image/png",
- "sizes": "144x144"
- },
- {
- "src": "icons/icon_168_48_dpi.png",
- "type": "image/png",
- "sizes": "168x168"
- },
- {
- "src": "icons/icon_192_48_dpi.png",
- "type": "image/png",
- "sizes": "192x192"
- },
- {
- "src": "icons/icon_128_128_dpi.png",
- "type": "image/png",
- "sizes": "128x128"
- },
- {
- "src": "icons/icon_256_128_dpi.png",
- "type": "image/png",
- "sizes": "256x256"
- },
- {
- "src": "icons/icon_384_128_dpi.png",
- "type": "image/png",
- "sizes": "384x384"
- },
- {
- "src": "icons/icon_512_128_dpi.png",
- "type": "image/png",
- "sizes": "512x512"
- }
- ],
- "start_url": "http://localhost:3000/",
- "orientation": "portrait"
- } \ No newline at end of file
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
deleted file mode 100755
index b99b75a..0000000
--- a/public/mix-manifest.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "/js/app.js": "/js/app.js",
- "/css/admin.css": "/css/admin.css",
- "/css/app.css": "/css/app.css",
- "/js/admin.js": "/js/admin.js",
- "/js/initial_key_gen.js": "/js/initial_key_gen.js"
-} \ No newline at end of file
diff --git a/public/robots.txt b/public/robots.txt
index eb05362..eb05362 100755..100644
--- a/public/robots.txt
+++ b/public/robots.txt
diff --git a/public/service-worker.js b/public/service-worker.js
deleted file mode 100644
index 4f37f80..0000000
--- a/public/service-worker.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var precacheConfig=[["0bd0898fc9d907f4b31b968c6e2efa7f.js","0bd0898fc9d907f4b31b968c6e2efa7f"],["3fc17c73a369921b5d2a49b8e752592b.js","3fc17c73a369921b5d2a49b8e752592b"],["becf15e26adbe45cab6f048bbbbabf01.js","becf15e26adbe45cab6f048bbbbabf01"],["css/admin.css","bc0158da6ff8698f0590f8bb1e065e79"],["css/app.css","11d839a7f1e5b6ea67744b1a355dd9e2"],["fonts/vendor/Ionicons/ionicons.eot","2c2ae068be3b089e0a5b59abb1831550"],["fonts/vendor/Ionicons/ionicons.svg","621bd386841f74e0053cb8e67f8a0604"],["fonts/vendor/Ionicons/ionicons.ttf","24712f6c47821394fba7942fbb52c3b2"],["fonts/vendor/Ionicons/ionicons.woff","05acfdb568b3df49ad31355b19495d4a"],["fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.eot","f4769f9bdb7466be65088239c12046d1"],["fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.svg","89889688147bd7575d6327160d64e760"],["fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.ttf","e18bbf611f2a2e43afc071aa2f4e1512"],["fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff","fa2772327f55d8198301fdb8bcfc8158"],["fonts/vendor/bootstrap/dist/glyphicons-halflings-regular.woff2","448c34a56d699c29117adc64c43affeb"],["fonts/vendor/font-awesome/fontawesome-webfont.eot","674f50d287a8c48dc19ba404d20fe713"],["fonts/vendor/font-awesome/fontawesome-webfont.svg","912ec66d7572ff821749319396470bde"],["fonts/vendor/font-awesome/fontawesome-webfont.ttf","b06871f281fee6b241d60582ae9369b9"],["fonts/vendor/font-awesome/fontawesome-webfont.woff","fee66e712a8a08eef5805a46892932ad"],["fonts/vendor/font-awesome/fontawesome-webfont.woff2","af7ae505a9eed503f8b8e6982036873e"],["fonts/vendor/ionicons/dist/ionicons.eot","3c1e04901e63bef6c26cbe06c067ca2c"],["fonts/vendor/ionicons/dist/ionicons.svg","91433571f154776a1d46c2a287de05d7"],["fonts/vendor/ionicons/dist/ionicons.ttf","b2e0fc821c6886fb3940f85a3320003e"],["fonts/vendor/ionicons/dist/ionicons.woff","a21b9e1aad96623ef91bca7ecea7b169"],["fonts/vendor/ionicons/dist/ionicons.woff2","43d5c718339efeb1177aff722d72669d"],["js/admin.js","d5bcfca30a8c2c7d680c00bcd4431eb6"],["js/app.js","212b999bc8e51363fd932bbc49dcb2b7"],["js/initial_key_gen.js","7b474bb47ec94d95b7a6d86d9a339d87"],["js/service-worker-ext.js","c28a117247a6ecf72b77c9b1b28a3d09"],["service-worker.js","90dee4ecae9112c281f05f1e53517388"]],cacheName="sw-precache-v3-BEAM-Messenger-"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,r){var o=new URL(e);return r&&o.pathname.match(r)||(o.search+=(o.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),o.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),o=createCacheKey(r,hashParamName,n,!1);return[r.toString(),o]}));function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);(t=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted([],e.request.url)&&(n=new URL("/",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).toolbox=e()}}(function(){return function e(t,n,r){function o(a,c){if(!n[a]){if(!t[a]){var i="function"==typeof require&&require;if(!c&&i)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[a]={exports:{}};t[a][0].call(f.exports,function(e){var n=t[a][1][e];return o(n||e)},f,f.exports,e,t,n,r)}return n[a].exports}for(var s="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,n){function r(e,t){((t=t||{}).debug||i.debug)&&console.log("[sw-toolbox] "+e)}function o(e){var t;return e&&e.cache&&(t=e.cache.name),t=t||i.cache.name,caches.open(t)}function s(e,t,n){var o=e.url,s=n.maxAgeSeconds,a=n.maxEntries,c=n.name,i=Date.now();return r("Updating LRU order for "+o+". Max entries is "+a+", max age is "+s),u.getDb(c).then(function(e){return u.setTimestampForUrl(e,o,i)}).then(function(e){return u.expireEntries(e,a,s,i)}).then(function(e){r("Successfully updated IDB.");var n=e.map(function(e){return t.delete(e)});return Promise.all(n).then(function(){r("Done with cache cleanup.")})}).catch(function(e){r(e)})}function a(e){var t=Array.isArray(e);if(t&&e.forEach(function(e){"string"==typeof e||e instanceof Request||(t=!1)}),!t)throw new TypeError("The precache method expects either an array of strings and/or Requests or a Promise that resolves to an array of strings and/or Requests.");return e}var c,i=e("./options"),u=e("./idb-cache-expiration");t.exports={debug:r,fetchAndCache:function(e,t){var n=(t=t||{}).successResponses||i.successResponses;return fetch(e.clone()).then(function(r){return"GET"===e.method&&n.test(r.status)&&o(t).then(function(n){n.put(e,r).then(function(){var r=t.cache||i.cache;(r.maxEntries||r.maxAgeSeconds)&&r.name&&function(e,t,n){var r=s.bind(null,e,t,n);c=c?c.then(r):r()}(e,n,r)})}),r.clone()})},openCache:o,renameCache:function(e,t,n){return r("Renaming cache: ["+e+"] to ["+t+"]",n),caches.delete(t).then(function(){return Promise.all([caches.open(e),caches.open(t)]).then(function(t){var n=t[0],r=t[1];return n.keys().then(function(e){return Promise.all(e.map(function(e){return n.match(e).then(function(t){return r.put(e,t)})}))}).then(function(){return caches.delete(e)})})})},cache:function(e,t){return o(t).then(function(t){return t.add(e)})},uncache:function(e,t){return o(t).then(function(t){return t.delete(e)})},precache:function(e){e instanceof Promise||a(e),i.preCacheItems=i.preCacheItems.concat(e)},validatePrecacheInput:a,isResponseFresh:function(e,t,n){if(!e)return!1;if(t){var r=e.headers.get("date");if(r&&new Date(r).getTime()+1e3*t<n)return!1}return!0}}},{"./idb-cache-expiration":2,"./options":4}],2:[function(e,t,n){var r="sw-toolbox-",o=1,s="store",a="url",c="timestamp",i={};t.exports={getDb:function(e){return e in i||(i[e]=function(e){return new Promise(function(t,n){var i=indexedDB.open(r+e,o);i.onupgradeneeded=function(){i.result.createObjectStore(s,{keyPath:a}).createIndex(c,c,{unique:!1})},i.onsuccess=function(){t(i.result)},i.onerror=function(){n(i.error)}})}(e)),i[e]},setTimestampForUrl:function(e,t,n){return new Promise(function(r,o){var a=e.transaction(s,"readwrite");a.objectStore(s).put({url:t,timestamp:n}),a.oncomplete=function(){r(e)},a.onabort=function(){o(a.error)}})},expireEntries:function(e,t,n,r){return function(e,t,n){return t?new Promise(function(r,o){var i=1e3*t,u=[],f=e.transaction(s,"readwrite"),h=f.objectStore(s);h.index(c).openCursor().onsuccess=function(e){var t=e.target.result;if(t&&n-i>t.value[c]){var r=t.value[a];u.push(r),h.delete(r),t.continue()}},f.oncomplete=function(){r(u)},f.onabort=o}):Promise.resolve([])}(e,n,r).then(function(n){return function(e,t){return t?new Promise(function(n,r){var o=[],i=e.transaction(s,"readwrite"),u=i.objectStore(s),f=u.index(c),h=f.count();f.count().onsuccess=function(){var e=h.result;e>t&&(f.openCursor().onsuccess=function(n){var r=n.target.result;if(r){var s=r.value[a];o.push(s),u.delete(s),e-o.length>t&&r.continue()}})},i.oncomplete=function(){n(o)},i.onabort=r}):Promise.resolve([])}(e,t).then(function(e){return n.concat(e)})})}}},{}],3:[function(e,t,n){function r(e){return e.reduce(function(e,t){return e.concat(t)},[])}e("serviceworker-cache-polyfill");var o=e("./helpers"),s=e("./router"),a=e("./options");t.exports={fetchListener:function(e){var t=s.match(e.request);t?e.respondWith(t(e.request)):s.default&&"GET"===e.request.method&&0===e.request.url.indexOf("http")&&e.respondWith(s.default(e.request))},activateListener:function(e){o.debug("activate event fired");var t=a.cache.name+"$$$inactive$$$";e.waitUntil(o.renameCache(t,a.cache.name))},installListener:function(e){var t=a.cache.name+"$$$inactive$$$";o.debug("install event fired"),o.debug("creating cache ["+t+"]"),e.waitUntil(o.openCache({cache:{name:t}}).then(function(e){return Promise.all(a.preCacheItems).then(r).then(o.validatePrecacheInput).then(function(t){return o.debug("preCache list: "+(t.join(", ")||"(none)")),e.addAll(t)})}))}}},{"./helpers":1,"./options":4,"./router":6,"serviceworker-cache-polyfill":16}],4:[function(e,t,n){var r;r=self.registration?self.registration.scope:self.scope||new URL("./",self.location).href,t.exports={cache:{name:"$$$toolbox-cache$$$"+r+"$$$",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\d\d)|(40[14567])|410$/}},{}],5:[function(e,t,n){var r=new URL("./",self.location).pathname,o=e("path-to-regexp"),s=function(e,t,n,s){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf("/")&&(t=r+t),this.keys=[],this.regexp=o(t,this.keys)),this.method=e,this.options=s,this.handler=n};s.prototype.makeHandler=function(e){var t;if(this.regexp){var n=this.regexp.exec(e);t={},this.keys.forEach(function(e,r){t[e.name]=n[r+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},t.exports=s},{"path-to-regexp":15}],6:[function(e,t,n){var r=e("./route"),o=e("./helpers"),s=function(e,t){for(var n=e.entries(),r=n.next(),o=[];!r.done;){new RegExp(r.value[0]).test(t)&&o.push(r.value[1]),r=n.next()}return o},a=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this.default=null};["get","post","put","delete","head","any"].forEach(function(e){a.prototype[e]=function(t,n,r){return this.add(e,t,n,r)}}),a.prototype.add=function(e,t,n,s){var a;s=s||{},t instanceof RegExp?a=RegExp:a=(a=s.origin||self.location.origin)instanceof RegExp?a.source:function(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}(a),e=e.toLowerCase();var c=new r(e,t,n,s);this.routes.has(a)||this.routes.set(a,new Map);var i=this.routes.get(a);i.has(e)||i.set(e,new Map);var u=i.get(e),f=c.regexp||c.fullUrlRegExp;u.has(f.source)&&o.debug('"'+t+'" resolves to same regex as existing route.'),u.set(f.source,c)},a.prototype.matchMethod=function(e,t){var n=new URL(t),r=n.origin,o=n.pathname;return this._match(e,s(this.routes,r),o)||this._match(e,[this.routes.get(RegExp)],t)},a.prototype._match=function(e,t,n){if(0===t.length)return null;for(var r=0;r<t.length;r++){var o=t[r],a=o&&o.get(e.toLowerCase());if(a){var c=s(a,n);if(c.length>0)return c[0].makeHandler(n)}}return null},a.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod("any",e.url)},t.exports=new a},{"./helpers":1,"./route":5}],7:[function(e,t,n){var r=e("../options"),o=e("../helpers");t.exports=function(e,t,n){return n=n||{},o.debug("Strategy: cache first ["+e.url+"]",n),o.openCache(n).then(function(t){return t.match(e).then(function(t){var s=n.cache||r.cache,a=Date.now();return o.isResponseFresh(t,s.maxAgeSeconds,a)?t:o.fetchAndCache(e,n)})})}},{"../helpers":1,"../options":4}],8:[function(e,t,n){var r=e("../options"),o=e("../helpers");t.exports=function(e,t,n){return n=n||{},o.debug("Strategy: cache only ["+e.url+"]",n),o.openCache(n).then(function(t){return t.match(e).then(function(e){var t=n.cache||r.cache,s=Date.now();if(o.isResponseFresh(e,t.maxAgeSeconds,s))return e})})}},{"../helpers":1,"../options":4}],9:[function(e,t,n){var r=e("../helpers"),o=e("./cacheOnly");t.exports=function(e,t,n){return r.debug("Strategy: fastest ["+e.url+"]",n),new Promise(function(s,a){var c=!1,i=[],u=function(e){i.push(e.toString()),c?a(new Error('Both cache and network failed: "'+i.join('", "')+'"')):c=!0},f=function(e){e instanceof Response?s(e):u("No result returned")};r.fetchAndCache(e.clone(),n).then(f,u),o(e,t,n).then(f,u)})}},{"../helpers":1,"./cacheOnly":8}],10:[function(e,t,n){t.exports={networkOnly:e("./networkOnly"),networkFirst:e("./networkFirst"),cacheOnly:e("./cacheOnly"),cacheFirst:e("./cacheFirst"),fastest:e("./fastest")}},{"./cacheFirst":7,"./cacheOnly":8,"./fastest":9,"./networkFirst":11,"./networkOnly":12}],11:[function(e,t,n){var r=e("../options"),o=e("../helpers");t.exports=function(e,t,n){var s=(n=n||{}).successResponses||r.successResponses,a=n.networkTimeoutSeconds||r.networkTimeoutSeconds;return o.debug("Strategy: network first ["+e.url+"]",n),o.openCache(n).then(function(t){var c,i,u=[];if(a){var f=new Promise(function(s){c=setTimeout(function(){t.match(e).then(function(e){var t=n.cache||r.cache,a=Date.now(),c=t.maxAgeSeconds;o.isResponseFresh(e,c,a)&&s(e)})},1e3*a)});u.push(f)}var h=o.fetchAndCache(e,n).then(function(e){if(c&&clearTimeout(c),s.test(e.status))return e;throw o.debug("Response was an HTTP error: "+e.statusText,n),i=e,new Error("Bad response")}).catch(function(r){return o.debug("Network or response error, fallback to cache ["+e.url+"]",n),t.match(e).then(function(e){if(e)return e;if(i)return i;throw r})});return u.push(h),Promise.race(u)})}},{"../helpers":1,"../options":4}],12:[function(e,t,n){var r=e("../helpers");t.exports=function(e,t,n){return r.debug("Strategy: network only ["+e.url+"]",n),fetch(e)}},{"../helpers":1}],13:[function(e,t,n){var r=e("./options"),o=e("./router"),s=e("./helpers"),a=e("./strategies"),c=e("./listeners");s.debug("Service Worker Toolbox is loading"),self.addEventListener("install",c.installListener),self.addEventListener("activate",c.activateListener),self.addEventListener("fetch",c.fetchListener),t.exports={networkOnly:a.networkOnly,networkFirst:a.networkFirst,cacheOnly:a.cacheOnly,cacheFirst:a.cacheFirst,fastest:a.fastest,router:o,options:r,cache:s.cache,uncache:s.uncache,precache:s.precache}},{"./helpers":1,"./listeners":3,"./options":4,"./router":6,"./strategies":10}],14:[function(e,t,n){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],15:[function(e,t,n){function r(e,t){for(var n,r=[],o=0,s=0,a="",u=t&&t.delimiter||"/";null!=(n=d.exec(e));){var f=n[0],h=n[1],l=n.index;if(a+=e.slice(s,l),s=l+f.length,h)a+=h[1];else{var p=e[s],m=n[2],g=n[3],b=n[4],v=n[5],w=n[6],x=n[7];a&&(r.push(a),a="");var y=null!=m&&null!=p&&p!==m,E="+"===w||"*"===w,R="?"===w||"*"===w,C=n[2]||u,k=b||v;r.push({name:g||o++,prefix:m||"",delimiter:C,optional:R,repeat:E,partial:y,asterisk:!!x,pattern:k?i(k):x?".*":"[^"+c(C)+"]+?"})}}return s<e.length&&(a+=e.substr(s)),a&&r.push(a),r}function o(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e){return encodeURI(e).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function a(e){for(var t=new Array(e.length),n=0;n<e.length;n++)"object"==typeof e[n]&&(t[n]=new RegExp("^(?:"+e[n].pattern+")$"));return function(n,r){for(var a="",c=n||{},i=(r||{}).pretty?o:encodeURIComponent,u=0;u<e.length;u++){var f=e[u];if("string"!=typeof f){var h,l=c[f.name];if(null==l){if(f.optional){f.partial&&(a+=f.prefix);continue}throw new TypeError('Expected "'+f.name+'" to be defined')}if(p(l)){if(!f.repeat)throw new TypeError('Expected "'+f.name+'" to not repeat, but received `'+JSON.stringify(l)+"`");if(0===l.length){if(f.optional)continue;throw new TypeError('Expected "'+f.name+'" to not be empty')}for(var d=0;d<l.length;d++){if(h=i(l[d]),!t[u].test(h))throw new TypeError('Expected all "'+f.name+'" to match "'+f.pattern+'", but received `'+JSON.stringify(h)+"`");a+=(0===d?f.prefix:f.delimiter)+h}}else{if(h=f.asterisk?s(l):i(l),!t[u].test(h))throw new TypeError('Expected "'+f.name+'" to match "'+f.pattern+'", but received "'+h+'"');a+=f.prefix+h}}else a+=f}return a}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function i(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function f(e){return e.sensitive?"":"i"}function h(e,t,n){p(t)||(n=t||n,t=[]);for(var r=(n=n||{}).strict,o=!1!==n.end,s="",a=0;a<e.length;a++){var i=e[a];if("string"==typeof i)s+=c(i);else{var h=c(i.prefix),l="(?:"+i.pattern+")";t.push(i),i.repeat&&(l+="(?:"+h+l+")*"),s+=l=i.optional?i.partial?h+"("+l+")?":"(?:"+h+"("+l+"))?":h+"("+l+")"}}var d=c(n.delimiter||"/"),m=s.slice(-d.length)===d;return r||(s=(m?s.slice(0,-d.length):s)+"(?:"+d+"(?=$))?"),s+=o?"$":r&&m?"":"(?="+d+"|$)",u(new RegExp("^"+s,f(n)),t)}function l(e,t,n){return p(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):p(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(l(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",f(n)),t)}(e,t,n):function(e,t,n){return h(r(e,n),t,n)}(e,t,n)}var p=e("isarray");t.exports=l,t.exports.parse=r,t.exports.compile=function(e,t){return a(r(e,t))},t.exports.tokensToFunction=a,t.exports.tokensToRegExp=h;var d=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g")},{isarray:14}],16:[function(e,t,n){!function(){var e=Cache.prototype.addAll,t=navigator.userAgent.match(/(Firefox|Chrome)\/(\d+\.)/);if(t)var n=t[1],r=parseInt(t[2]);e&&(!t||"Firefox"===n&&r>=46||"Chrome"===n&&r>=50)||(Cache.prototype.addAll=function(e){function t(e){this.name="NetworkError",this.code=19,this.message=e}var n=this;return t.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return e=e.map(function(e){return e instanceof Request?e:String(e)}),Promise.all(e.map(function(e){"string"==typeof e&&(e=new Request(e));var n=new URL(e.url).protocol;if("http:"!==n&&"https:"!==n)throw new t("Invalid scheme");return fetch(e.clone())}))}).then(function(r){if(r.some(function(e){return!e.ok}))throw new t("Incorrect response status");return Promise.all(r.map(function(t,r){return n.put(e[r],t)}))}).then(function(){})},Cache.prototype.add=function(e){return this.addAll([e])})}()},{}]},{},[13])(13)}),toolbox.router.get(/^https:\/\/fonts\.googleapis\.com\//,toolbox.cacheFirst,{}),toolbox.router.get(/^https:\/\/fonts\.gstatic\.com\//,toolbox.cacheFirst,{}),toolbox.router.get(/^https:\/\/cdn\.socket\.io\//,toolbox.cacheFirst,{}),toolbox.router.get(/\/socket.io\//,toolbox.cacheFirst,{}),toolbox.router.get(/\/_debugbar\//,toolbox.cacheFirst,{}),toolbox.router.get(/\/browser-sync\//,toolbox.cacheFirst,{}),toolbox.router.get(/\/avatar\//,toolbox.cacheFirst,{}),importScripts("/js/service-worker-ext.js"); \ No newline at end of file
diff --git a/resources/assets/js/admin.js b/resources/assets/js/admin.js
deleted file mode 100644
index 95038f5..0000000
--- a/resources/assets/js/admin.js
+++ /dev/null
@@ -1,269 +0,0 @@
-window.$ = window.jQuery = require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery/dist/jquery.min.js");
-require("../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap/dist/js/bootstrap.min.js");
-require("../../../vendor/almasaeed2010/adminlte/bower_components/fastclick/lib/fastclick.js");
-require("../../../vendor/almasaeed2010/adminlte/dist/js/adminlte.min.js");
-require("../../../vendor/almasaeed2010/adminlte/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js");
-require("../../../vendor/almasaeed2010/adminlte/plugins/jvectormap/jquery-jvectormap-world-mill-en.js");
-require("../../../vendor/almasaeed2010/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js");
-window.Chart = require("../../../vendor/almasaeed2010/adminlte/bower_components/chart.js/Chart.js");
-
-
-$(function () {
- 'use strict';
- /* ChartJS
- * -------
- * Charts
- */
-
- // sales example chart
- var salesChartCanvas = $('#salesChart').get(0).getContext('2d');
- var salesChart = new Chart(salesChartCanvas);
- var salesChartData = {
- labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
- datasets: [{
- label: 'Electronics',
- fillColor: 'rgb(210, 214, 222)',
- strokeColor: 'rgb(210, 214, 222)',
- pointColor: 'rgb(210, 214, 222)',
- pointStrokeColor: '#c1c7d1',
- pointHighlightFill: '#fff',
- pointHighlightStroke: 'rgb(220,220,220)',
- data: [65, 59, 80, 81, 56, 55, 40]
- },
- {
- label: 'Digital Goods',
- fillColor: 'rgba(60,141,188,0.9)',
- strokeColor: 'rgba(60,141,188,0.8)',
- pointColor: '#3b8bba',
- pointStrokeColor: 'rgba(60,141,188,1)',
- pointHighlightFill: '#fff',
- pointHighlightStroke: 'rgba(60,141,188,1)',
- data: [28, 48, 40, 19, 86, 27, 90]
- }
- ]
- };
- var salesChartOptions = {
- showScale: true,
- scaleShowGridLines: false,
- scaleGridLineColor: 'rgba(0,0,0,.05)',
- scaleGridLineWidth: 1,
- scaleShowHorizontalLines: true,
- scaleShowVerticalLines: true,
- bezierCurve: true,
- bezierCurveTension: 0.3,
- pointDot: false,
- pointDotRadius: 4,
- pointDotStrokeWidth: 1,
- pointHitDetectionRadius: 20,
- datasetStroke: true,
- datasetStrokeWidth: 2,
- datasetFill: true,
- legendTemplate: '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<datasets.length; i++){%><li><span style=\'background-color:<%=datasets[i].lineColor%>\'></span><%=datasets[i].label%></li><%}%></ul>',
- maintainAspectRatio: true,
- responsive: true
- };
- salesChart.Line(salesChartData, salesChartOptions);
-
- // -------------
- // - PIE CHART -
- // -------------
- var pieChartCanvas = $('#pieChart').get(0).getContext('2d');
- var pieChart = new Chart(pieChartCanvas);
- var PieData = [{
- value: 700,
- color: '#f56954',
- highlight: '#f56954',
- label: 'Chrome'
- },
- {
- value: 500,
- color: '#00a65a',
- highlight: '#00a65a',
- label: 'IE'
- },
- {
- value: 400,
- color: '#f39c12',
- highlight: '#f39c12',
- label: 'FireFox'
- },
- {
- value: 600,
- color: '#00c0ef',
- highlight: '#00c0ef',
- label: 'Safari'
- },
- {
- value: 300,
- color: '#3c8dbc',
- highlight: '#3c8dbc',
- label: 'Opera'
- },
- {
- value: 100,
- color: '#d2d6de',
- highlight: '#d2d6de',
- label: 'Navigator'
- }
- ];
- var pieOptions = {
- segmentShowStroke: true,
- segmentStrokeColor: '#fff',
- segmentStrokeWidth: 1,
- percentageInnerCutout: 50,
- animationSteps: 100,
- animationEasing: 'easeOutBounce',
- animateRotate: true,
- animateScale: false,
- responsive: true,
- maintainAspectRatio: false,
- legendTemplate: '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<segments.length; i++){%><li><span style=\'background-color:<%=segments[i].fillColor%>\'></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',
- tooltipTemplate: '<%=value %> <%=label%> users'
- };
- pieChart.Doughnut(PieData, pieOptions);
-
-
- /* jVector Maps
- * ------------
- * Create a world map with markers
- */
- $('#world-map-markers').vectorMap({
- map: 'world_mill_en',
- normalizeFunction: 'polynomial',
- hoverOpacity: 0.7,
- hoverColor: false,
- backgroundColor: 'transparent',
- regionStyle: {
- initial: {
- fill: 'rgba(210, 214, 222, 1)',
- 'fill-opacity': 1,
- stroke: 'none',
- 'stroke-width': 0,
- 'stroke-opacity': 1
- },
- hover: {
- 'fill-opacity': 0.7,
- cursor: 'pointer'
- },
- selected: {
- fill: 'yellow'
- },
- selectedHover: {}
- },
- markerStyle: {
- initial: {
- fill: '#00a65a',
- stroke: '#111'
- }
- },
- markers: [{
- latLng: [41.90, 12.45],
- name: 'Vatican City'
- },
- {
- latLng: [43.73, 7.41],
- name: 'Monaco'
- },
- {
- latLng: [-0.52, 166.93],
- name: 'Nauru'
- },
- {
- latLng: [-8.51, 179.21],
- name: 'Tuvalu'
- },
- {
- latLng: [43.93, 12.46],
- name: 'San Marino'
- },
- {
- latLng: [47.14, 9.52],
- name: 'Liechtenstein'
- },
- {
- latLng: [7.11, 171.06],
- name: 'Marshall Islands'
- },
- {
- latLng: [17.3, -62.73],
- name: 'Saint Kitts and Nevis'
- },
- {
- latLng: [3.2, 73.22],
- name: 'Maldives'
- },
- {
- latLng: [35.88, 14.5],
- name: 'Malta'
- },
- {
- latLng: [12.05, -61.75],
- name: 'Grenada'
- },
- {
- latLng: [13.16, -61.23],
- name: 'Saint Vincent and the Grenadines'
- },
- {
- latLng: [13.16, -59.55],
- name: 'Barbados'
- },
- {
- latLng: [17.11, -61.85],
- name: 'Antigua and Barbuda'
- },
- {
- latLng: [-4.61, 55.45],
- name: 'Seychelles'
- },
- {
- latLng: [7.35, 134.46],
- name: 'Palau'
- },
- {
- latLng: [42.5, 1.51],
- name: 'Andorra'
- },
- {
- latLng: [14.01, -60.98],
- name: 'Saint Lucia'
- },
- {
- latLng: [6.91, 158.18],
- name: 'Federated States of Micronesia'
- },
- {
- latLng: [1.3, 103.8],
- name: 'Singapore'
- },
- {
- latLng: [1.46, 173.03],
- name: 'Kiribati'
- },
- {
- latLng: [-21.13, -175.2],
- name: 'Tonga'
- },
- {
- latLng: [15.3, -61.38],
- name: 'Dominica'
- },
- {
- latLng: [-20.2, 57.5],
- name: 'Mauritius'
- },
- {
- latLng: [26.02, 50.55],
- name: 'Bahrain'
- },
- {
- latLng: [0.33, 6.73],
- name: 'São Tomé and Príncipe'
- }
- ]
- });
-});
-
-
-
-//---------------------------------------------------------END OF CHARTS------------------------------------------------------ \ No newline at end of file
diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js
deleted file mode 100755
index 7cb052d..0000000
--- a/resources/assets/js/app.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * First we will load all of this project's JavaScript dependencies which
- * includes Vue and other libraries. It is a great starting point when
- * building robust, powerful web applications using Vue and Laravel.
- */
-
-window.openpgp = require('openpgp');
-window.Vue = require('vue');
-require('./bootstrap');
-require('@fortawesome/fontawesome-free/js/all');
-require('./setup');
-require('./profile');
-require('./chat'); \ No newline at end of file
diff --git a/resources/assets/js/bootstrap.js b/resources/assets/js/bootstrap.js
deleted file mode 100755
index a919262..0000000
--- a/resources/assets/js/bootstrap.js
+++ /dev/null
@@ -1,52 +0,0 @@
-window._ = require('lodash');
-window.Popper = require('popper.js').default;
-
-/**
- * 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.$ = 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';
-
-/**
- * Next we will register the CSRF Token as a common header with Axios so that
- * all outgoing HTTP requests automatically have it attached. This is just
- * a simple convenience so we don't have to attach every token manually.
- */
-
-let token = document.head.querySelector('meta[name="csrf-token"]');
-
-if (token) {
- window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
-} else {
- console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
-}
-
-/**
- * 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.io = require('socket.io-client');
-
-// if (typeof io !== 'undefined') {
-// window.Echo = new Echo({
-// broadcaster: 'socket.io',
-// host: window.location.hostname + ':6001',
-// });
-// } \ No newline at end of file
diff --git a/resources/assets/js/chat.js b/resources/assets/js/chat.js
deleted file mode 100755
index c84f9d6..0000000
--- a/resources/assets/js/chat.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// var openpgp = window.openpgp;
-
-// var options = {
-// userIds: [{ name:'Marvin Borner', email:'test@test.de' }], // multiple user IDs
-// numBits: 4096, // RSA key size
-// passphrase: 'cool password of private key'
-// };
-
-// openpgp.generateKey(options).then(function(key) {
-// var privateKey = key.privateKeyArmored; // '-----BEGIN PGP PRIVATE KEY BLOCK ... '
-// var publicKey = key.publicKeyArmored; // '-----BEGIN PGP PUBLIC KEY BLOCK ... '
-
-// console.log(publicKey);
-// console.log(privateKey);
-// });
-
-// $.ajax({
-// type: "POST",
-// url: "keys/public/1",
-// data: {
-// "key": "test_key_2"
-// },
-// cache: false,
-// success: (results) => {
-// console.log(results);
-// }
-// });
-
-
-
-var socket = io('http://127.0.0.1:8890', {
- transports: ['websocket']
-});
-socket.on('message', (data) => {
- data = JSON.parse(data);
- $("#messages").append("<p>" + data.user + " : " + data.message + "</p>");
-});
-
-$('input.send').click((e) => {
- e.preventDefault();
- sendMessage();
-});
-
-function sendMessage() {
- var message = $('input.message').val();
- $('input.message').val("");
- $.ajax({
- type: "POST",
- url: "sendMessage",
- data: {
- "message": message
- },
- cache: false
- });
-} \ No newline at end of file
diff --git a/resources/assets/js/chatServer.js b/resources/assets/js/chatServer.js
deleted file mode 100755
index fb6c7fc..0000000
--- a/resources/assets/js/chatServer.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var app = require('express')();
-var server = require('http').Server(app);
-var io = require('socket.io')(server);
-var redis = require('redis');
-var port = 8890;
-
-server.listen(port, function () {
- console.log("Listening on " + port)
-});
-
-io.on('connection', function (socket) {
-
- console.log("new client connected");
- var redisClient = redis.createClient();
- redisClient.subscribe('message');
-
- redisClient.on("message", function (channel, message) {
- console.log("new message" + message);
- socket.emit(channel, message);
- });
-
- socket.on('disconnect', function () {
- console.log("client connected");
- redisClient.quit();
- });
-});
diff --git a/resources/assets/js/components/ExampleComponent.vue b/resources/assets/js/components/ExampleComponent.vue
deleted file mode 100755
index 2805329..0000000
--- a/resources/assets/js/components/ExampleComponent.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-<template>
- <div class="container">
- <div class="row justify-content-center">
- <div class="col-md-8">
- <div class="card card-default">
- <div class="card-header">Example Component</div>
-
- <div class="card-body">
- I'm an example component.
- </div>
- </div>
- </div>
- </div>
- </div>
-</template>
-
-<script>
- export default {
- mounted() {
- console.log('Component mounted.')
- }
- }
-</script>
diff --git a/resources/assets/js/initial_key_gen.js b/resources/assets/js/initial_key_gen.js
deleted file mode 100755
index 1b6875f..0000000
--- a/resources/assets/js/initial_key_gen.js
+++ /dev/null
@@ -1,30 +0,0 @@
-$('form[keygen]').submit((event) => {
- event.preventDefault();
-
- $('button[type="submit"]').attr("disabled", true).html('Loading...');
-
- var openpgp = window.openpgp;
-
- var options = {
- userIds: [{
- email: $("input#email").val()
- }],
- numBits: 4096,
- passphrase: $("input#password").val()
- };
-
- openpgp.generateKey(options).then((key) => {
- var privateKey = key.privateKeyArmored;
- var publicKey = key.publicKeyArmored;
-
- localStorage.setItem("privkey", privateKey);
-
- var now = new Date();
- var time = now.getTime();
- time += 3600 * 1000;
- now.setTime(time);
- document.cookie = "publickey=" + encodeURI(publicKey.substr(96).slice(0, -35)) + "; expires=" + now.toUTCString() + ";";
-
- $('form[keygen]').unbind('submit').submit();
- });
-}); \ No newline at end of file
diff --git a/resources/assets/js/profile.js b/resources/assets/js/profile.js
deleted file mode 100755
index d834542..0000000
--- a/resources/assets/js/profile.js
+++ /dev/null
@@ -1,39 +0,0 @@
-$("#avatarFile").on("change", () => {
- var preview = document.querySelector('#image-preview');
- var file = document.querySelector("#avatarFile").files[0];
- var reader = new FileReader();
-
- reader.addEventListener("load", () => {
- preview.src = reader.result;
- }, false);
-
- if (file) {
- reader.readAsDataURL(file);
- }
-});
-
-$("#avatarForm").submit(function (e) {
- var url = "/avatar";
- var data = new FormData();
- $.each(jQuery('#avatarFile')[0].files, (i, file) => {
- data.append('avatar', file);
- });
-
- e.preventDefault();
- $.ajax({
- url: url,
- data: data,
- cache: false,
- contentType: false,
- processData: false,
- method: 'POST',
- type: 'POST',
- success: (data) => {
- $("#avatarUploadSucceededAlert").show();
- $("#avatarUploadSucceededMessage").text(data.success);
- },
- error: () => {
- $("#avatarUploadFailedAlert").show();
- }
- });
-}); \ No newline at end of file
diff --git a/resources/assets/js/setup.js b/resources/assets/js/setup.js
deleted file mode 100755
index 880bf91..0000000
--- a/resources/assets/js/setup.js
+++ /dev/null
@@ -1,5 +0,0 @@
-$.ajaxSetup({
- headers: {
- 'X-CSRF-Token': $('input[name="_token"]').val()
- }
-}); \ No newline at end of file
diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss
deleted file mode 100755
index 70ecfdb..0000000
--- a/resources/assets/sass/_variables.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-
-// Body
-$body-bg: #f5f8fa;
-
-// Typography
-$font-family-sans-serif: "Raleway", sans-serif;
-$font-size-base: 0.9rem;
-$line-height-base: 1.6;
diff --git a/resources/assets/sass/admin.scss b/resources/assets/sass/admin.scss
deleted file mode 100644
index 146b90f..0000000
--- a/resources/assets/sass/admin.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-@import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap/dist/css/bootstrap.min.css";
-@import "../../../vendor/almasaeed2010/adminlte/bower_components/font-awesome/css/font-awesome.min.css";
-@import "../../../vendor/almasaeed2010/adminlte/bower_components/Ionicons/css/ionicons.min.css";
-@import "../../../vendor/almasaeed2010/adminlte/bower_components/jvectormap/jquery-jvectormap.css";
-@import "../../../vendor/almasaeed2010/adminlte/dist/css/AdminLTE.min.css";
-@import "../../../vendor/almasaeed2010/adminlte/dist/css/skins/_all-skins.min.css";
-// @import "../../../vendor/almasaeed2010/adminlte/bower_components/morris.js/morris.css";
-// @import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css";
-// @import "../../../vendor/almasaeed2010/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css";
-// @import "../../../vendor/almasaeed2010/adminlte/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css"; \ No newline at end of file
diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
deleted file mode 100755
index ad83043..0000000
--- a/resources/assets/sass/app.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-// Fonts
-@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");
-// Variables
-@import "variables";
-// Bootstrap
-@import "~bootstrap/scss/bootstrap";
-// Chat
-@import "chat";
-
-.navbar-laravel {
- margin: 0;
- padding: 0;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
-}
-
-.navbar.fixed-bottom {
- width: 100%;
- background-color: #555;
- overflow: auto;
-}
-
-.navbar.fixed-bottom .navbar-icon {
- float: left;
- width: 20%;
- text-align: center;
- padding: 12px 0;
- transition: all 0.3s ease;
- color: white;
- font-size: 36px;
-}
-
-.navbar.fixed-bottom a:hover {
- background-color: #000;
-}
-
-.active {
- background-color: #4CAF50 !important;
-}
-
-.alert {
- display: none;
-} \ No newline at end of file
diff --git a/resources/assets/sass/chat.scss b/resources/assets/sass/chat.scss
deleted file mode 100755
index 026d089..0000000
--- a/resources/assets/sass/chat.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-.MessagesWindow {
- height: 250px;
- overflow-y: scroll;
- padding: 15px;
-} \ No newline at end of file
diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php
deleted file mode 100755
index e5506df..0000000
--- a/resources/lang/en/auth.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-return [
-
- /*
- |--------------------------------------------------------------------------
- | Authentication Language Lines
- |--------------------------------------------------------------------------
- |
- | The following language lines are used during authentication for various
- | messages that we need to display to the user. You are free to modify
- | these language lines according to your application's requirements.
- |
- */
-
- 'failed' => 'These credentials do not match our records.',
- '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
deleted file mode 100755
index d481411..0000000
--- a/resources/lang/en/pagination.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-return [
-
- /*
- |--------------------------------------------------------------------------
- | Pagination Language Lines
- |--------------------------------------------------------------------------
- |
- | The following language lines are used by the paginator library to build
- | the simple pagination links. You are free to change them to anything
- | you want to customize your views to better match your application.
- |
- */
-
- 'previous' => '&laquo; Previous',
- 'next' => 'Next &raquo;',
-
-];
diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php
deleted file mode 100755
index e5544d2..0000000
--- a/resources/lang/en/passwords.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-return [
-
- /*
- |--------------------------------------------------------------------------
- | Password Reset Language Lines
- |--------------------------------------------------------------------------
- |
- | The following language lines are the default lines which match reasons
- | that are given by the password broker for a password update attempt
- | has failed, such as for an invalid token or invalid new password.
- |
- */
-
- 'password' => 'Passwords must be at least six characters and match the confirmation.',
- 'reset' => 'Your password has been reset!',
- 'sent' => 'We have e-mailed your password reset link!',
- 'token' => 'This password reset token is invalid.',
- 'user' => "We can't find a user with that e-mail address.",
-
-];
diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php
deleted file mode 100755
index b163c42..0000000
--- a/resources/lang/en/validation.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-
-return [
-
- /*
- |--------------------------------------------------------------------------
- | Validation Language Lines
- |--------------------------------------------------------------------------
- |
- | The following language lines contain the default error messages used by
- | the validator class. Some of these rules have multiple versions such
- | as the size rules. Feel free to tweak each of these messages here.
- |
- */
-
- 'accepted' => '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 may only contain letters.',
- 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
- 'alpha_num' => 'The :attribute may 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_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.',
- '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 may not be greater than :max.',
- 'file' => 'The :attribute may not be greater than :max kilobytes.',
- 'string' => 'The :attribute may not be greater than :max characters.',
- 'array' => 'The :attribute may 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.',
- ],
- 'not_in' => 'The selected :attribute is invalid.',
- 'not_regex' => 'The :attribute format is invalid.',
- 'numeric' => 'The :attribute must be a number.',
- '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 is 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.',
- '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.',
- ],
- '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.',
-
- /*
- |--------------------------------------------------------------------------
- | 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 attribute place-holders
- | with something more reader friendly such as E-Mail Address instead
- | of "email". This simply helps us make messages a little cleaner.
- |
- */
-
- 'attributes' => [],
-
-];
diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php
deleted file mode 100755
index b271a2d..0000000
--- a/resources/views/admin/dashboard.blade.php
+++ /dev/null
@@ -1,388 +0,0 @@
-@extends('admin.layouts.app')
-@section('content_header')
-<h1>
- Dashboard
- <small>Version 2.0</small>
-</h1>
-<ol class="breadcrumb">
- <li><a href="#"><i class="fa fa-dashboard"></i> Home</a></li>
- <li class="active">Dashboard</li>
-</ol>
-@endsection
-
-@section('content')
-
-<div class="row">
- <div class="col-md-3 col-sm-6 col-xs-12">
- <div class="info-box">
- <span class="info-box-icon bg-aqua"><i class="ion ion-ios-gear-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">CPU Traffic</span>
- <span class="info-box-number">{{ $cpu_load }}<small>%</small></span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- </div>
- <!-- /.col -->
- <div class="col-md-3 col-sm-6 col-xs-12">
- <div class="info-box">
- <span class="info-box-icon bg-red"><i class="fa fa-google-plus"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">Likes</span>
- <span class="info-box-number">41,410</span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- </div>
- <!-- /.col -->
-
- <!-- fix for small devices only -->
- <div class="clearfix visible-sm-block"></div>
-
- <div class="col-md-3 col-sm-6 col-xs-12">
- <div class="info-box">
- <span class="info-box-icon bg-green"><i class="ion ion-ios-cart-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">Sales</span>
- <span class="info-box-number">760</span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- </div>
- <!-- /.col -->
- <div class="col-md-3 col-sm-6 col-xs-12">
- <div class="info-box">
- <span class="info-box-icon bg-yellow"><i class="ion ion-ios-people-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">New Members</span>
- <span class="info-box-number">2,000</span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- </div>
- <!-- /.col -->
-</div>
-<!-- /.row -->
-
-<div class="row">
- <div class="col-md-12">
- <div class="box">
- <div class="box-header with-border">
- <h3 class="box-title">Monthly Recap Report</h3>
-
- <div class="box-tools pull-right">
- <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
- </button>
- <div class="btn-group">
- <button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
- <i class="fa fa-wrench"></i></button>
- <ul class="dropdown-menu" role="menu">
- <li><a href="#">Action</a></li>
- <li><a href="#">Another action</a></li>
- <li><a href="#">Something else here</a></li>
- <li class="divider"></li>
- <li><a href="#">Separated link</a></li>
- </ul>
- </div>
- <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
- </div>
- </div>
- <!-- /.box-header -->
- <div class="box-body">
- <div class="row">
- <div class="col-md-8">
- <p class="text-center">
- <strong>Sales: 1 Jan, 2014 - 30 Jul, 2014</strong>
- </p>
-
- <div class="chart">
- <!-- Sales Chart Canvas -->
- <canvas id="salesChart" style="height: 180px;"></canvas>
- </div>
- <!-- /.chart-responsive -->
- </div>
- <!-- /.col -->
- <div class="col-md-4">
- <p class="text-center">
- <strong>Goal Completion</strong>
- </p>
-
- <div class="progress-group">
- <span class="progress-text">Add Products to Cart</span>
- <span class="progress-number"><b>160</b>/200</span>
-
- <div class="progress sm">
- <div class="progress-bar progress-bar-aqua" style="width: 80%"></div>
- </div>
- </div>
- <!-- /.progress-group -->
- <div class="progress-group">
- <span class="progress-text">Complete Purchase</span>
- <span class="progress-number"><b>310</b>/400</span>
-
- <div class="progress sm">
- <div class="progress-bar progress-bar-red" style="width: 80%"></div>
- </div>
- </div>
- <!-- /.progress-group -->
- <div class="progress-group">
- <span class="progress-text">Visit Premium Page</span>
- <span class="progress-number"><b>480</b>/800</span>
-
- <div class="progress sm">
- <div class="progress-bar progress-bar-green" style="width: 80%"></div>
- </div>
- </div>
- <!-- /.progress-group -->
- <div class="progress-group">
- <span class="progress-text">Send Inquiries</span>
- <span class="progress-number"><b>250</b>/500</span>
-
- <div class="progress sm">
- <div class="progress-bar progress-bar-yellow" style="width: 80%"></div>
- </div>
- </div>
- <!-- /.progress-group -->
- </div>
- <!-- /.col -->
- </div>
- <!-- /.row -->
- </div>
- <!-- ./box-body -->
- <div class="box-footer">
- <div class="row">
- <div class="col-sm-3 col-xs-6">
- <div class="description-block border-right">
- <span class="description-percentage text-green"><i class="fa fa-caret-up"></i> 17%</span>
- <h5 class="description-header">$35,210.43</h5>
- <span class="description-text">TOTAL REVENUE</span>
- </div>
- <!-- /.description-block -->
- </div>
- <!-- /.col -->
- <div class="col-sm-3 col-xs-6">
- <div class="description-block border-right">
- <span class="description-percentage text-yellow"><i class="fa fa-caret-left"></i> 0%</span>
- <h5 class="description-header">$10,390.90</h5>
- <span class="description-text">TOTAL COST</span>
- </div>
- <!-- /.description-block -->
- </div>
- <!-- /.col -->
- <div class="col-sm-3 col-xs-6">
- <div class="description-block border-right">
- <span class="description-percentage text-green"><i class="fa fa-caret-up"></i> 20%</span>
- <h5 class="description-header">$24,813.53</h5>
- <span class="description-text">TOTAL PROFIT</span>
- </div>
- <!-- /.description-block -->
- </div>
- <!-- /.col -->
- <div class="col-sm-3 col-xs-6">
- <div class="description-block">
- <span class="description-percentage text-red"><i class="fa fa-caret-down"></i> 18%</span>
- <h5 class="description-header">1200</h5>
- <span class="description-text">GOAL COMPLETIONS</span>
- </div>
- <!-- /.description-block -->
- </div>
- </div>
- <!-- /.row -->
- </div>
- <!-- /.box-footer -->
- </div>
- <!-- /.box -->
- </div>
- <!-- /.col -->
-</div>
-<!-- /.row -->
-
-<!-- Main row -->
-<div class="row">
- <!-- Left col -->
- <div class="col-md-8">
- <!-- MAP & BOX PANE -->
- <div class="box box-success">
- <div class="box-header with-border">
- <h3 class="box-title">Visitors Report</h3>
-
- <div class="box-tools pull-right">
- <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
- </button>
- <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
- </div>
- </div>
- <!-- /.box-header -->
- <div class="box-body no-padding">
- <div class="row">
- <div class="col-md-9 col-sm-8">
- <div class="pad">
- <!-- Map will be created here -->
- <div id="world-map-markers" style="height: 325px;"></div>
- </div>
- </div>
- <!-- /.col -->
- <div class="col-md-3 col-sm-4">
- <div class="pad box-pane-right bg-green" style="min-height: 280px">
- <div class="description-block margin-bottom">
- <div class="sparkbar pad" data-color="#fff">90,70,90,70,75,80,70</div>
- <h5 class="description-header">8390</h5>
- <span class="description-text">Visits</span>
- </div>
- <!-- /.description-block -->
- <div class="description-block margin-bottom">
- <div class="sparkbar pad" data-color="#fff">90,50,90,70,61,83,63</div>
- <h5 class="description-header">30%</h5>
- <span class="description-text">Referrals</span>
- </div>
- <!-- /.description-block -->
- <div class="description-block">
- <div class="sparkbar pad" data-color="#fff">90,50,90,70,61,83,63</div>
- <h5 class="description-header">70%</h5>
- <span class="description-text">Organic</span>
- </div>
- <!-- /.description-block -->
- </div>
- </div>
- <!-- /.col -->
- </div>
- <!-- /.row -->
- </div>
- <!-- /.box-body -->
- </div>
- <!-- /.box -->
- </div>
- <!-- /.col -->
-
- <div class="col-md-4">
- <!-- Info Boxes Style 2 -->
- <div class="info-box bg-yellow">
- <span class="info-box-icon"><i class="ion ion-ios-pricetag-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">Inventory</span>
- <span class="info-box-number">5,200</span>
-
- <div class="progress">
- <div class="progress-bar" style="width: 50%"></div>
- </div>
- <span class="progress-description">
- 50% Increase in 30 Days
- </span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- <div class="info-box bg-green">
- <span class="info-box-icon"><i class="ion ion-ios-heart-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">Mentions</span>
- <span class="info-box-number">92,050</span>
-
- <div class="progress">
- <div class="progress-bar" style="width: 20%"></div>
- </div>
- <span class="progress-description">
- 20% Increase in 30 Days
- </span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- <div class="info-box bg-red">
- <span class="info-box-icon"><i class="ion ion-ios-cloud-download-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">Downloads</span>
- <span class="info-box-number">114,381</span>
-
- <div class="progress">
- <div class="progress-bar" style="width: 70%"></div>
- </div>
- <span class="progress-description">
- 70% Increase in 30 Days
- </span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
- <div class="info-box bg-aqua">
- <span class="info-box-icon"><i class="ion-ios-chatbubble-outline"></i></span>
-
- <div class="info-box-content">
- <span class="info-box-text">Direct Messages</span>
- <span class="info-box-number">163,921</span>
-
- <div class="progress">
- <div class="progress-bar" style="width: 40%"></div>
- </div>
- <span class="progress-description">
- 40% Increase in 30 Days
- </span>
- </div>
- <!-- /.info-box-content -->
- </div>
- <!-- /.info-box -->
-
- <div class="box box-default">
- <div class="box-header with-border">
- <h3 class="box-title">Browser Usage</h3>
-
- <div class="box-tools pull-right">
- <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
- </button>
- <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
- </div>
- </div>
- <!-- /.box-header -->
- <div class="box-body">
- <div class="row">
- <div class="col-md-8">
- <div class="chart-responsive">
- <canvas id="pieChart" height="150"></canvas>
- </div>
- <!-- ./chart-responsive -->
- </div>
- <!-- /.col -->
- <div class="col-md-4">
- <ul class="chart-legend clearfix">
- <li><i class="fa fa-circle-o text-red"></i> Chrome</li>
- <li><i class="fa fa-circle-o text-green"></i> IE</li>
- <li><i class="fa fa-circle-o text-yellow"></i> FireFox</li>
- <li><i class="fa fa-circle-o text-aqua"></i> Safari</li>
- <li><i class="fa fa-circle-o text-light-blue"></i> Opera</li>
- <li><i class="fa fa-circle-o text-gray"></i> Navigator</li>
- </ul>
- </div>
- <!-- /.col -->
- </div>
- <!-- /.row -->
- </div>
- <!-- /.box-body -->
- <div class="box-footer no-padding">
- <ul class="nav nav-pills nav-stacked">
- <li><a href="#">United States of America
- <span class="pull-right text-red"><i class="fa fa-angle-down"></i> 12%</span></a></li>
- <li><a href="#">India <span class="pull-right text-green"><i class="fa fa-angle-up"></i> 4%</span></a>
- </li>
- <li><a href="#">China
- <span class="pull-right text-yellow"><i class="fa fa-angle-left"></i> 0%</span></a></li>
- </ul>
- </div>
- <!-- /.footer -->
- </div>
- <!-- /.box -->
- </div>
- <!-- /.col -->
-</div>
-<!-- /.row -->
-@endsection \ No newline at end of file
diff --git a/resources/views/admin/layouts/app.blade.php b/resources/views/admin/layouts/app.blade.php
deleted file mode 100755
index 2f7e48d..0000000
--- a/resources/views/admin/layouts/app.blade.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
- <title>Admin interface of BEAM-Messenger</title>
-
- <link href="{{ asset("css/admin.css ") }}" rel="stylesheet" type="text/css" />
- <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic" rel="stylesheet">
- <!--[if lt IE 9]>
- <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
- <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
- <![endif]-->
-</head>
-
-<body class="hold-transition skin-blue sidebar-mini fixed sidebar-collapse">
- <div class="wrapper">
-
- @include('admin.layouts.navbar');
-
- @include('admin.layouts.left_sidebar');
-
- <div class="content-wrapper">
- <section class="content-header">
- @yield('content_header')
- </section>
-
- <section class="content">
- @yield('content')
- </section>
- </div>
-
- <aside class="control-sidebar control-sidebar-dark">
- @include('admin.layouts.right_sidebar')
- </aside>
- <div class="control-sidebar-bg"></div>
- </div>
-
- <script src="{{ asset("js/admin.js ") }}"></script>
- <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
- crossorigin="anonymous"></script>
-</body>
-
-</html> \ No newline at end of file
diff --git a/resources/views/admin/layouts/left_sidebar.blade.php b/resources/views/admin/layouts/left_sidebar.blade.php
deleted file mode 100644
index 3db3e38..0000000
--- a/resources/views/admin/layouts/left_sidebar.blade.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<aside class="main-sidebar">
- <!-- sidebar: style can be found in sidebar.less -->
- <section class="sidebar">
- <!-- Sidebar user panel -->
- <div class="user-panel">
- <div class="pull-left image">
- <img src="/avatar/{{ $user->avatar }}" class="img-circle" alt="User Image">
- </div>
- <div class="pull-left info">
- <p>{{ $user->name }}</p>
- <a href="#"><i class="fa fa-circle text-success"></i> Online</a>
- </div>
- </div>
- <!-- search form -->
- <form action="#" method="get" class="sidebar-form">
- <div class="input-group">
- <input type="text" name="q" class="form-control" placeholder="Search...">
- <span class="input-group-btn">
- <button type="submit" name="search" id="search-btn" class="btn btn-flat">
- <i class="fa fa-search"></i>
- </button>
- </span>
- </div>
- </form>
- <!-- /.search form -->
- <!-- sidebar menu: : style can be found in sidebar.less -->
- <ul class="sidebar-menu" data-widget="tree">
- <li class="header">NAVIGATION</li>
-
- <li class="active treeview menu-open">
- <a href="/admin">
- <i class="fa fa-dashboard"></i> <span>Dashboard</span>
- </a>
- </li>
-
- </ul>
- </section>
- <!-- /.sidebar -->
-</aside> \ No newline at end of file
diff --git a/resources/views/admin/layouts/navbar.blade.php b/resources/views/admin/layouts/navbar.blade.php
deleted file mode 100644
index e021129..0000000
--- a/resources/views/admin/layouts/navbar.blade.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<header class="main-header">
-
- <a href="/" class="logo">
- <span class="logo-mini"><b>B</b>M</span>
- <span class="logo-lg"><b>BEAM</b>-Messenger</span>
- </a>
-
- <nav class="navbar navbar-static-top">
- <a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
- <span class="sr-only">Toggle navigation</span>
- </a>
- <div class="navbar-custom-menu">
- <ul class="nav navbar-nav">
- <li class="dropdown user user-menu">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">
- <img src="/avatar/{{ $user->id }}" class="user-image" alt="User Image">
- <span class="hidden-xs">{{ $user->name }}</span>
- </a>
- <ul class="dropdown-menu">
- <li class="user-header">
- <img src="/avatar/{{ $user->id }}" class="img-circle" alt="User Image">
- <p>
- {{ $user->name }} - {{ $user->email }}
- <small>Member since {{ $user->created_at !== null ? $user->created_at : "ever." }}</small>
- </p>
- </li>
- <li class="user-footer">
- <div class="pull-left">
- <a href="/profile" class="btn btn-default btn-flat">Profile</a>
- </div>
- <div class="pull-right">
- <a href="/logout" class="btn btn-default btn-flat">Sign out</a>
- </div>
- </li>
- </ul>
- </li>
- <li>
- <a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
- </li>
- </ul>
- </div>
-
- </nav>
-</header> \ No newline at end of file
diff --git a/resources/views/admin/layouts/right_sidebar.blade.php b/resources/views/admin/layouts/right_sidebar.blade.php
deleted file mode 100644
index 80ce125..0000000
--- a/resources/views/admin/layouts/right_sidebar.blade.php
+++ /dev/null
@@ -1,185 +0,0 @@
-<ul class="nav nav-tabs nav-justified control-sidebar-tabs">
- <li><a href="#control-sidebar-home-tab" data-toggle="tab"><i class="fa fa-home"></i></a></li>
- <li><a href="#control-sidebar-settings-tab" data-toggle="tab"><i class="fa fa-gears"></i></a></li>
-</ul>
-<!-- Tab panes -->
-<div class="tab-content">
- <!-- Home tab content -->
- <div class="tab-pane" id="control-sidebar-home-tab">
- <h3 class="control-sidebar-heading">Recent Activity</h3>
- <ul class="control-sidebar-menu">
- <li>
- <a href="javascript:void(0)">
- <i class="menu-icon fa fa-birthday-cake bg-red"></i>
-
- <div class="menu-info">
- <h4 class="control-sidebar-subheading">Langdon's Birthday</h4>
-
- <p>Will be 23 on April 24th</p>
- </div>
- </a>
- </li>
- <li>
- <a href="javascript:void(0)">
- <i class="menu-icon fa fa-user bg-yellow"></i>
-
- <div class="menu-info">
- <h4 class="control-sidebar-subheading">Frodo Updated His Profile</h4>
-
- <p>New phone +1(800)555-1234</p>
- </div>
- </a>
- </li>
- <li>
- <a href="javascript:void(0)">
- <i class="menu-icon fa fa-envelope-o bg-light-blue"></i>
-
- <div class="menu-info">
- <h4 class="control-sidebar-subheading">Nora Joined Mailing List</h4>
-
- <p>nora@example.com</p>
- </div>
- </a>
- </li>
- <li>
- <a href="javascript:void(0)">
- <i class="menu-icon fa fa-file-code-o bg-green"></i>
-
- <div class="menu-info">
- <h4 class="control-sidebar-subheading">Cron Job 254 Executed</h4>
-
- <p>Execution time 5 seconds</p>
- </div>
- </a>
- </li>
- </ul>
- <!-- /.control-sidebar-menu -->
-
- <h3 class="control-sidebar-heading">Tasks Progress</h3>
- <ul class="control-sidebar-menu">
- <li>
- <a href="javascript:void(0)">
- <h4 class="control-sidebar-subheading">
- Custom Template Design
- <span class="label label-danger pull-right">70%</span>
- </h4>
-
- <div class="progress progress-xxs">
- <div class="progress-bar progress-bar-danger" style="width: 70%"></div>
- </div>
- </a>
- </li>
- <li>
- <a href="javascript:void(0)">
- <h4 class="control-sidebar-subheading">
- Update Resume
- <span class="label label-success pull-right">95%</span>
- </h4>
-
- <div class="progress progress-xxs">
- <div class="progress-bar progress-bar-success" style="width: 95%"></div>
- </div>
- </a>
- </li>
- <li>
- <a href="javascript:void(0)">
- <h4 class="control-sidebar-subheading">
- Laravel Integration
- <span class="label label-warning pull-right">50%</span>
- </h4>
-
- <div class="progress progress-xxs">
- <div class="progress-bar progress-bar-warning" style="width: 50%"></div>
- </div>
- </a>
- </li>
- <li>
- <a href="javascript:void(0)">
- <h4 class="control-sidebar-subheading">
- Back End Framework
- <span class="label label-primary pull-right">68%</span>
- </h4>
-
- <div class="progress progress-xxs">
- <div class="progress-bar progress-bar-primary" style="width: 68%"></div>
- </div>
- </a>
- </li>
- </ul>
- <!-- /.control-sidebar-menu -->
-
- </div>
- <!-- /.tab-pane -->
- <!-- Stats tab content -->
- <div class="tab-pane" id="control-sidebar-stats-tab">Stats Tab Content</div>
- <!-- /.tab-pane -->
- <!-- Settings tab content -->
- <div class="tab-pane" id="control-sidebar-settings-tab">
- <form method="post">
- <h3 class="control-sidebar-heading">General Settings</h3>
-
- <div class="form-group">
- <label class="control-sidebar-subheading">
- Report panel usage
- <input type="checkbox" class="pull-right" checked>
- </label>
-
- <p>
- Some information about this general settings option
- </p>
- </div>
- <!-- /.form-group -->
-
- <div class="form-group">
- <label class="control-sidebar-subheading">
- Allow mail redirect
- <input type="checkbox" class="pull-right" checked>
- </label>
-
- <p>
- Other sets of options are available
- </p>
- </div>
- <!-- /.form-group -->
-
- <div class="form-group">
- <label class="control-sidebar-subheading">
- Expose author name in posts
- <input type="checkbox" class="pull-right" checked>
- </label>
-
- <p>
- Allow the user to show his name in blog posts
- </p>
- </div>
- <!-- /.form-group -->
-
- <h3 class="control-sidebar-heading">Chat Settings</h3>
-
- <div class="form-group">
- <label class="control-sidebar-subheading">
- Show me as online
- <input type="checkbox" class="pull-right" checked>
- </label>
- </div>
- <!-- /.form-group -->
-
- <div class="form-group">
- <label class="control-sidebar-subheading">
- Turn off notifications
- <input type="checkbox" class="pull-right">
- </label>
- </div>
- <!-- /.form-group -->
-
- <div class="form-group">
- <label class="control-sidebar-subheading">
- Delete chat history
- <a href="javascript:void(0)" class="text-red pull-right"><i class="fa fa-trash-o"></i></a>
- </label>
- </div>
- <!-- /.form-group -->
- </form>
- </div>
- <!-- /.tab-pane -->
-</div> \ No newline at end of file
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php
deleted file mode 100755
index 119cfe1..0000000
--- a/resources/views/auth/login.blade.php
+++ /dev/null
@@ -1,71 +0,0 @@
-@extends('layouts.app')
-
-@section('content')
-<script src="{{ asset('js/initial_key_gen.js') }}" defer></script>
-
-<div class="container">
- <div class="row justify-content-center">
- <div class="col-md-8">
- <div class="card">
- <div class="card-header">{{ __('Login') }}</div>
-
- <div class="card-body">
- <form keygen method="POST" action="{{ route('login') }}" aria-label="{{ __('Login') }}">
- @csrf
-
- <div class="form-group row">
- <label for="email" class="col-sm-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
-
- <div class="col-md-6">
- <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>
-
- @if ($errors->has('email'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('email') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
-
- <div class="col-md-6">
- <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
-
- @if ($errors->has('password'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('password') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <div class="col-md-6 offset-md-4">
- <div class="checkbox">
- <label>
- <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}> {{ __('Remember Me') }}
- </label>
- </div>
- </div>
- </div>
-
- <div class="form-group row mb-0">
- <div class="col-md-8 offset-md-4">
- <button type="submit" class="btn btn-primary">
- {{ __('Login') }}
- </button>
-
- <a class="btn btn-link" href="{{ route('password.request') }}">
- {{ __('Forgot Your Password?') }}
- </a>
- </div>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
-</div>
-@endsection
diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php
deleted file mode 100755
index 12e8083..0000000
--- a/resources/views/auth/passwords/email.blade.php
+++ /dev/null
@@ -1,47 +0,0 @@
-@extends('layouts.app')
-
-@section('content')
-<div class="container">
- <div class="row justify-content-center">
- <div class="col-md-8">
- <div class="card">
- <div class="card-header">{{ __('Reset Password') }}</div>
-
- <div class="card-body">
- @if (session('status'))
- <div class="alert alert-success" role="alert">
- {{ session('status') }}
- </div>
- @endif
-
- <form method="POST" action="{{ route('password.email') }}" aria-label="{{ __('Reset Password') }}">
- @csrf
-
- <div class="form-group row">
- <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
-
- <div class="col-md-6">
- <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>
-
- @if ($errors->has('email'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('email') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row mb-0">
- <div class="col-md-6 offset-md-4">
- <button type="submit" class="btn btn-primary">
- {{ __('Send Password Reset Link') }}
- </button>
- </div>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
-</div>
-@endsection
diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php
deleted file mode 100755
index 3557662..0000000
--- a/resources/views/auth/passwords/reset.blade.php
+++ /dev/null
@@ -1,65 +0,0 @@
-@extends('layouts.app')
-
-@section('content')
-<div class="container">
- <div class="row justify-content-center">
- <div class="col-md-8">
- <div class="card">
- <div class="card-header">{{ __('Reset Password') }}</div>
-
- <div class="card-body">
- <form method="POST" action="{{ route('password.request') }}" aria-label="{{ __('Reset Password') }}">
- @csrf
-
- <input type="hidden" name="token" value="{{ $token }}">
-
- <div class="form-group row">
- <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
-
- <div class="col-md-6">
- <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ $email ?? old('email') }}" required autofocus>
-
- @if ($errors->has('email'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('email') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
-
- <div class="col-md-6">
- <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
-
- @if ($errors->has('password'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('password') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
-
- <div class="col-md-6">
- <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
- </div>
- </div>
-
- <div class="form-group row mb-0">
- <div class="col-md-6 offset-md-4">
- <button type="submit" class="btn btn-primary">
- {{ __('Reset Password') }}
- </button>
- </div>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
-</div>
-@endsection
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php
deleted file mode 100755
index 9b544ae..0000000
--- a/resources/views/auth/register.blade.php
+++ /dev/null
@@ -1,79 +0,0 @@
-@extends('layouts.app')
-
-@section('content')
-<script src="{{ asset('js/initial_key_gen.js') }}" defer></script>
-
-<div class="container">
- <div class="row justify-content-center">
- <div class="col-md-8">
- <div class="card">
- <div class="card-header">{{ __('Register') }}</div>
-
- <div class="card-body">
- <form keygen method="POST" action="{{ route('register') }}" aria-label="{{ __('Register') }}">
- @csrf
-
- <div class="form-group row">
- <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
-
- <div class="col-md-6">
- <input id="name" type="text" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>
-
- @if ($errors->has('name'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('name') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
-
- <div class="col-md-6">
- <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>
-
- @if ($errors->has('email'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('email') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
-
- <div class="col-md-6">
- <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
-
- @if ($errors->has('password'))
- <span class="invalid-feedback" role="alert">
- <strong>{{ $errors->first('password') }}</strong>
- </span>
- @endif
- </div>
- </div>
-
- <div class="form-group row">
- <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
-
- <div class="col-md-6">
- <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
- </div>
- </div>
-
- <div class="form-group row mb-0">
- <div class="col-md-6 offset-md-4">
- <button type="submit" class="btn btn-primary">
- {{ __('Register') }}
- </button>
- </div>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
-</div>
-@endsection
diff --git a/resources/views/confirmEmail.blade.php b/resources/views/confirmEmail.blade.php
deleted file mode 100755
index 1de32c2..0000000
--- a/resources/views/confirmEmail.blade.php
+++ /dev/null
@@ -1,16 +0,0 @@
-@extends('layouts.app') @section('content')
-
-<div class="container">
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="panel panel-default">
- <div class="panel-heading">Registration</div>
- <div class="panel-body">
- You have successfully registered. An email is sent to you for verification.
- </div>
- </div>
- </div>
- </div>
-</div>
-
-@endsection \ No newline at end of file
diff --git a/resources/views/email/verify.blade.php b/resources/views/email/verify.blade.php
deleted file mode 100755
index 25eda64..0000000
--- a/resources/views/email/verify.blade.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<h1>Click the Link To Verify Your Email</h1>
-
-Click the following link to verify your email {{url('/verify/email/'.$email_token)}} \ No newline at end of file
diff --git a/resources/views/errors/http.blade.php b/resources/views/errors/http.blade.php
deleted file mode 100755
index a05a725..0000000
--- a/resources/views/errors/http.blade.php
+++ /dev/null
@@ -1,5 +0,0 @@
-@extends('layouts.error')
-
-@section('title', $ErrorMessage)
-
-@section('message', $ErrorMessage)
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
deleted file mode 100755
index af1be47..0000000
--- a/resources/views/layouts/app.blade.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
-
-<head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <!-- CSRF Token -->
- <meta name="csrf-token" content="{{ csrf_token() }}">
-
- <title>{{ config('app.name', 'BEAM-Messenger') }}</title>
-
- <!-- Scripts -->
- <script src="{{ asset('js/app.js') }}" defer></script>
-
- <!-- Fonts -->
- <link rel="dns-prefetch" href="https://fonts.gstatic.com">
- <link href="https://fonts.googleapis.com/css?family=Raleway:300,400,600" rel="stylesheet" type="text/css">
-
- <!-- Styles -->
- <link href="{{ asset('css/app.css') }}" rel="stylesheet">
-
- <!-- Manifests -->
- <link rel="manifest" href="/manifest.json">
-</head>
-
-<body>
- <div id="app">
- <main class="py-4">
- @yield('content')
- </main>
- </div>
-
- <nav class="navbar fixed-bottom navbar-expand-md navbar-light navbar-laravel">
- <span class="navbar-icon active"><i class="fas fa-home"></i></span>
- <span class="navbar-icon"><i class="fas fa-search"></i></span>
- <span class="navbar-icon"><i class="far fa-comments"></i></span>
- <span class="navbar-icon"><i class="far fa-heart"></i></span>
- <span class="navbar-icon"><i class="far fa-user"></i></span>
- </nav>
-
- {{ csrf_field() }}
-
- <script>
- if ('serviceWorker' in navigator) {
- window.addEventListener("load", function(){
- navigator.serviceWorker.register('service-worker.js').then(function (registration) {
- console.log('ServiceWorker registration successful with scope:', registration.scope);
- }, function (err) {
- console.log('ServiceWorker failed:', err);
- });
- });
- }
- </script>
-</body>
-
-</html> \ No newline at end of file
diff --git a/resources/views/layouts/error.blade.php b/resources/views/layouts/error.blade.php
deleted file mode 100755
index 27513d0..0000000
--- a/resources/views/layouts/error.blade.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>@yield('title')</title>
-
- <!-- Fonts -->
- <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
-
- <!-- Styles -->
- <style>
- html, body {
- background-color: #fff;
- color: #636b6f;
- font-family: 'Raleway', sans-serif;
- font-weight: 100;
- height: 100vh;
- margin: 0;
- }
-
- .full-height {
- height: 100vh;
- }
-
- .flex-center {
- align-items: center;
- display: flex;
- justify-content: center;
- }
-
- .position-ref {
- position: relative;
- }
-
- .content {
- text-align: center;
- }
-
- .title {
- font-size: 36px;
- padding: 20px;
- }
- </style>
- </head>
- <body>
- <div class="flex-center position-ref full-height">
- <div class="content">
- <div class="title">
- @yield('message')
- </div>
- </div>
- </div>
- </body>
-</html>
diff --git a/resources/views/profile.blade.php b/resources/views/profile.blade.php
deleted file mode 100755
index c4a7db0..0000000
--- a/resources/views/profile.blade.php
+++ /dev/null
@@ -1,36 +0,0 @@
-@extends('layouts.app') @section('content')
-<div class="container">
-
- <div class="row">
- <div id="avatarUploadSucceededAlert" class="alert alert-success alert-block">
- <button type="button" class="close" data-dismiss="alert">×</button>
- <strong id="avatarUploadSucceededMessage"></strong>
- </div>
- <div id="avatarUploadFailedAlert" class="alert alert-danger">
- <strong>Whoops!</strong> There were some problems with your upload - please try again.
- </div>
- </div>
-
- <div class="row justify-content-center">
- <div class="profile-header-container">
- <div class="profile-header-img">
- <img id="image-preview" height="100px" width="100px" class="rounded-circle" src="/avatar/{{ $user->id }}" />
- <!-- badge -->
- <div class="rank-label-container">
- <span class="label label-default rank-label">{{$user->name}}</span>
- </div>
- </div>
- </div>
- </div>
-
- <div class="row justify-content-center">
- <form id="avatarForm">
- <div class="form-group">
- <input type="file" class="form-control-file" name="avatar" id="avatarFile" aria-describedby="fileHelp">
- <small id="fileHelp" class="form-text text-muted">Please upload a valid image file. Size of image should not be more than 2MB.</small>
- </div>
- <button type="submit" class="btn btn-primary">Submit</button>
- </form>
- </div>
-</div>
-@endsection \ No newline at end of file
diff --git a/resources/views/verificationSuccess.blade.php b/resources/views/verificationSuccess.blade.php
deleted file mode 100755
index 5cc48eb..0000000
--- a/resources/views/verificationSuccess.blade.php
+++ /dev/null
@@ -1,17 +0,0 @@
-@extends('layouts.app') @section('content')
-
-<div class="container">
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <div class="panel panel-default"></div>
- <div class="panel-heading">Registration Confirmed</div>
- <div class="panel-body">
- Your Email is verified. Click here to
- <a href="{{url('/login')}}">login</a>
- </div>
- </div>
- </div>
-</div>
-</div>
-
-@endsection \ No newline at end of file
diff --git a/resources/views/writeMessage.blade.php b/resources/views/writeMessage.blade.php
deleted file mode 100755
index 0136ba9..0000000
--- a/resources/views/writeMessage.blade.php
+++ /dev/null
@@ -1,33 +0,0 @@
-@extends('layouts.app') @section('content')
-
-<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>
-
-<div class="container">
- <div class="row">
- <div class="col-lg-8 col-lg-offset-2">
- <div class="panel panel-default">
- <div class="panel-heading">Messages Received</div>
- <div id="messages" class="MessagesWindow">
- @foreach ($messages as $key => $message)
- <p>{{$message->name}}: {{$message->message}}</p>
- @endforeach
-
- </div>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="col-md-10 col-md-offset-1">
- <div class="panel panel-default">
- <div class="panel-heading">Send message</div>
- <form action="sendmessage" method="POST">
- {{ csrf_field() }}
- <input type="text" name="message" class="message">
- <input type="submit" value="send" class="send">
- </form>
- </div>
- </div>
- </div>
-</div>
-
-@endsection
diff --git a/routes/api.php b/routes/api.php
index 9471c3a..c641ca5 100755..100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -11,8 +11,8 @@ use Illuminate\Http\Request;
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
- */
+*/
-Route::middleware('auth:api', 'throttle:30')->group(function() {
- Route::get('/user', ['as' => 'GetUserData', 'uses' => 'ApiController@getUserData']);
+Route::middleware('auth:api')->get('/user', function (Request $request) {
+ return $request->user();
});
diff --git a/routes/channels.php b/routes/channels.php
index 109904c..f16a20b 100755..100644
--- a/routes/channels.php
+++ b/routes/channels.php
@@ -9,12 +9,8 @@
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
- */
+*/
-// Broadcast::channel('App.User.{id}', function ($user, $id) {
-// return (int) $user->id === (int) $id;
-// });
-
-Broadcast::channel('chat', function ($user) {
- return Auth::check();
+Broadcast::channel('App.User.{id}', function ($user, $id) {
+ return (int) $user->id === (int) $id;
});
diff --git a/routes/console.php b/routes/console.php
index 75dd0cd..75dd0cd 100755..100644
--- a/routes/console.php
+++ b/routes/console.php
diff --git a/routes/keys.php b/routes/keys.php
deleted file mode 100755
index 52c7b3a..0000000
--- a/routes/keys.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/*
-|--------------------------------------------------------------------------
-| Routes for public keys
-|--------------------------------------------------------------------------
-|
-| Here is where you can register web routes for your application. These
-| routes are loaded by the RouteServiceProvider within a group which
-| contains the "web" middleware group. Now create something great!
-|
- */
-Auth::routes();
-Route::middleware('auth', 'throttle:30') // throttle to 30 per minute
- ->group(function () {
- Route::get('keys/cookie/public/', 'PublicKeyController@setUsersKeyByCookie');
- Route::get('keys/public/{user_id}', 'PublicKeyController@getUsersKey');
- Route::post('keys/public', 'PublicKeyController@setUsersKey');
- });
diff --git a/routes/web.php b/routes/web.php
index 41725f2..5eb1b7d 100755..100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,4 +1,5 @@
<?php
+
/*
|--------------------------------------------------------------------------
| Web Routes
@@ -8,19 +9,8 @@
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
- */
-
-// Route should not use authentication!
-Route::get('verify/email/{token}', 'Auth\RegisterController@verifyEmail');
-
-Auth::routes();
-Route::middleware('auth', 'throttle:30') // throttle to 30 per minute
- ->group(function () {
- Route::get('/', ['as' => 'MessageChat', 'uses' => 'SocketController@writeMessage']);
- Route::get('avatar/{user_id}', ['as' => 'GetAvatar', 'uses' => 'ImageController@getAvatar']);
- Route::get('profile', ['as' => 'GetProfileSettings', 'uses' => 'UserController@Profile']);
- Route::get('admin', ['as' => 'GetAdminDashboard', 'uses' => 'AdminController@Dashboard']);
+*/
- Route::post('avatar', ['as' => 'UpdateAvatar', 'uses' => 'UserController@updateAvatar']);
- Route::post('sendMessage', ['as' => 'SendMessage', 'uses' => 'SocketController@sendMessage']);
- });
+Route::get('/', function () {
+ return "BEAM-Messenger backend";
+});
diff --git a/server.php b/server.php
index 5fb6379..5fb6379 100755..100644
--- a/server.php
+++ b/server.php
diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore
deleted file mode 100755
index d6b7ef3..0000000
--- a/storage/debugbar/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php
deleted file mode 100755
index 547152f..0000000
--- a/tests/CreatesApplication.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Tests;
-
-use Illuminate\Contracts\Console\Kernel;
-
-trait CreatesApplication
-{
- /**
- * Creates the application.
- *
- * @return \Illuminate\Foundation\Application
- */
- public function createApplication()
- {
- $app = require __DIR__.'/../bootstrap/app.php';
-
- $app->make(Kernel::class)->bootstrap();
-
- return $app;
- }
-}
diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php
deleted file mode 100755
index f31e495..0000000
--- a/tests/Feature/ExampleTest.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace Tests\Feature;
-
-use Tests\TestCase;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-
-class ExampleTest extends TestCase
-{
- /**
- * A basic test example.
- *
- * @return void
- */
- public function testBasicTest()
- {
- $response = $this->get('/');
-
- $response->assertStatus(200);
- }
-}
diff --git a/tests/TestCase.php b/tests/TestCase.php
deleted file mode 100755
index 2932d4a..0000000
--- a/tests/TestCase.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Tests;
-
-use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
-
-abstract class TestCase extends BaseTestCase
-{
- use CreatesApplication;
-}
diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php
deleted file mode 100755
index e9fe19c..0000000
--- a/tests/Unit/ExampleTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace Tests\Unit;
-
-use Tests\TestCase;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-
-class ExampleTest extends TestCase
-{
- /**
- * A basic test example.
- *
- * @return void
- */
- public function testBasicTest()
- {
- $this->assertTrue(true);
- }
-}
diff --git a/tsconfig.json b/tsconfig.json
deleted file mode 100644
index e5de9df..0000000
--- a/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "lib": [
- "dom",
- "es5",
- ],
- "compilerOptions": {
- "target": "es5",
- "module": "commonjs",
- "sourceMap": true,
- "jsx": "react"
- }
-} \ No newline at end of file
diff --git a/webpack.mix.js b/webpack.mix.js
index 261f1f9..72fdbb1 100755..100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -1,5 +1,4 @@
let mix = require('laravel-mix');
-let SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
/*
|--------------------------------------------------------------------------
@@ -13,88 +12,4 @@ let SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
*/
mix.js('resources/assets/js/app.js', 'public/js')
- .js('resources/assets/js/admin.js', 'public/js') // TODO: FIX
- .js('resources/assets/js/initial_key_gen.js', 'public/js')
- // .ts('resources/assets/js/typescript.ts', 'public/js') => for use of typescript!
- .sass('resources/assets/sass/admin.scss', 'public/css')
- .sass('resources/assets/sass/app.scss', 'public/css')
- .sourceMaps()
- .browserSync({
- files: [
- 'public/css/*.css',
- 'public/js/*.js',
- //'**/*.blade.php'
- ],
- notify: false,
- injectChanges: true,
- proxy: {
- target: '127.0.0.1:8000',
- reqHeaders: function () {
- return {
- host: 'localhost:3000'
- };
- }
- }
- })
- .disableNotifications()
- .webpackConfig({
- module: {
- rules: [{
- test: /\.css$/,
- loader: 'postcss-loader',
- options: {
- plugins: () => [require('autoprefixer')]
- }
- }]
- },
- plugins: [
- new SWPrecacheWebpackPlugin({
- cacheId: 'BEAM-Messenger',
- filename: 'service-worker.js',
- staticFileGlobs: [
- 'public/**/*.{css,js,eot,svg,ttf,woff,woff2,html}', // all compiled/public scripts
- ],
- minify: true,
- stripPrefix: 'public/',
- handleFetch: true,
- maximumFileSizeToCacheInBytes: 20971520,
- // dynamicUrlToDependencies: {
- // '/': ['resources/views/writeMessage.blade.php'],
- // '/profile': ['resources/views/profile.blade.php'],
- // // TODO: add more for even better caching => ??
- // },
- staticFileGlobsIgnorePatterns: [/\.map$/, /mix-manifest\.json$/, /manifest\.json$/],
- navigateFallback: '/',
- importScripts: ['js/service-worker-ext.js'],
- runtimeCaching: [{
- urlPattern: /^https:\/\/fonts\.googleapis\.com\//,
- handler: 'cacheFirst'
- },
- {
- urlPattern: /^https:\/\/fonts\.gstatic\.com\//,
- handler: 'cacheFirst'
- },
- {
- urlPattern: /^https:\/\/cdn\.socket\.io\//,
- handler: 'cacheFirst'
- },
- {
- urlPattern: /\/socket.io\//,
- handler: 'cacheFirst'
- },
- {
- urlPattern: /\/_debugbar\//,
- handler: 'cacheFirst'
- },
- {
- urlPattern: /\/browser-sync\//,
- handler: 'cacheFirst'
- },
- {
- urlPattern: /\/avatar\//,
- handler: 'cacheFirst'
- }
- ],
- })
- ]
- }); \ No newline at end of file
+ .sass('resources/assets/sass/app.scss', 'public/css');
diff --git a/yarn.lock b/yarn.lock
index d179c8e..0caa2d8 100755..100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -43,7 +43,14 @@ ajv-keywords@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
-ajv@^5.0.0:
+ajv@^4.9.1:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^5.0.0, ajv@^5.1.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
@@ -53,8 +60,8 @@ ajv@^5.0.0:
json-schema-traverse "^0.3.0"
ajv@^6.1.0:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.1.tgz#88ebc1263c7133937d108b80c5572e64e1d9322d"
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360"
dependencies:
fast-deep-equal "^2.0.1"
fast-json-stable-stringify "^2.0.0"
@@ -288,7 +295,11 @@ aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-aws4@^1.2.1:
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+
+aws4@^1.2.1, aws4@^1.6.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
@@ -446,8 +457,8 @@ babel-helpers@^6.24.1:
babel-template "^6.24.1"
babel-loader@^7.1.1:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015"
+ version "7.1.5"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68"
dependencies:
find-cache-dir "^1.0.0"
loader-utils "^1.0.2"
@@ -944,8 +955,8 @@ boom@2.x.x:
hoek "2.x.x"
bootstrap@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.1.tgz#3aec85000fa619085da8d2e4983dfd67cf2114cb"
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.2.tgz#aee2a93472e61c471fc79fb475531dcbc87de326"
brace-expansion@^1.1.7:
version "1.1.11"
@@ -1001,12 +1012,13 @@ browserify-cipher@^1.0.0:
evp_bytestokey "^1.0.0"
browserify-des@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
dependencies:
cipher-base "^1.0.1"
des.js "^1.0.0"
inherits "^2.0.1"
+ safe-buffer "^5.1.2"
browserify-rsa@^4.0.0:
version "4.0.1"
@@ -1198,20 +1210,20 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000861"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000861.tgz#6f27840a130c10c0b1e00fab7729c1faf8f4ccd3"
+ version "1.0.30000869"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000869.tgz#c3da59fa8d9456df88a24bb292ede0e3798798cb"
caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000844:
- version "1.0.30000861"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000861.tgz#a32bb9607c34e4639b497ff37de746fc8a160410"
+ version "1.0.30000865"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz#70026616e8afe6e1442f8bb4e1092987d81a2f25"
capture-stack-trace@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
-caseless@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
caw@^1.0.1:
version "1.2.0"
@@ -1419,15 +1431,15 @@ colors@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-combined-stream@^1.0.5, combined-stream@~1.0.5:
+combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
dependencies:
delayed-stream "~1.0.0"
-commander@2.15.x, commander@^2.9.0, commander@~2.15.0:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
+commander@2.16.x, commander@~2.16.0:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50"
commander@~2.14.1:
version "2.14.1"
@@ -1447,22 +1459,22 @@ component-emitter@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-compressible@~2.0.13:
+compressible@~2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7"
dependencies:
mime-db ">= 1.34.0 < 2"
compression@^1.5.2:
- version "1.7.2"
- resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69"
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db"
dependencies:
- accepts "~1.3.4"
+ accepts "~1.3.5"
bytes "3.0.0"
- compressible "~2.0.13"
+ compressible "~2.0.14"
debug "2.6.9"
on-headers "~1.0.1"
- safe-buffer "5.1.1"
+ safe-buffer "5.1.2"
vary "~1.1.2"
concat-map@0.0.1:
@@ -1578,6 +1590,15 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
parse-json "^2.2.0"
require-from-string "^1.1.0"
+cosmiconfig@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
+ dependencies:
+ is-directory "^0.3.1"
+ js-yaml "^3.9.0"
+ parse-json "^4.0.0"
+ require-from-string "^2.0.1"
+
create-ecdh@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -2195,8 +2216,8 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47:
- version "1.3.50"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.50.tgz#7438b76f92b41b919f3fbdd350fbd0757dacddf7"
+ version "1.3.52"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz#d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0"
elliptic@^6.0.0:
version "6.4.0"
@@ -2243,7 +2264,7 @@ errno@^0.1.3, errno@~0.1.7:
dependencies:
prr "~1.0.1"
-error-ex@^1.2.0:
+error-ex@^1.2.0, error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
dependencies:
@@ -2355,8 +2376,8 @@ esprima@^2.6.0:
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
esprima@~3.1.0:
version "3.1.3"
@@ -2552,9 +2573,9 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
-extend@^3.0.0, extend@~3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
extglob@^0.3.1:
version "0.3.2"
@@ -2764,8 +2785,8 @@ flush-write-stream@^1.0.0:
readable-stream "^2.0.4"
follow-redirects@^1.0.0, follow-redirects@^1.3.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77"
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz#67a8f14f5a1f67f962c2c46469c79eaec0a90291"
dependencies:
debug "^3.1.0"
@@ -2805,6 +2826,14 @@ form-data@~2.1.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
+form-data@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "1.0.6"
+ mime-types "^2.1.12"
+
forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
@@ -2904,19 +2933,9 @@ gaze@^1.0.0:
dependencies:
globule "^1.0.0"
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
get-proxy@^1.0.1:
version "1.1.0"
@@ -3168,14 +3187,27 @@ handle-thing@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
-har-validator@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+
+har-validator@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
dependencies:
- chalk "^1.1.1"
- commander "^2.9.0"
- is-my-json-valid "^2.12.4"
- pinkie-promise "^2.0.0"
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
has-ansi@^2.0.0:
version "2.0.0"
@@ -3260,11 +3292,11 @@ hash-sum@^1.0.2:
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.4.tgz#8b50e1f35d51bd01e5ed9ece4dbe3549ccfa0a3c"
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812"
dependencies:
inherits "^2.0.3"
- minimalistic-assert "^1.0.0"
+ minimalistic-assert "^1.0.1"
hawk@~3.1.3:
version "3.1.3"
@@ -3299,8 +3331,8 @@ home-or-tmp@^2.0.0:
os-tmpdir "^1.0.1"
hosted-git-info@^2.1.4:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.1.tgz#6e4cee78b01bb849dcf93527708c69fdbee410df"
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
hpack.js@^2.1.6:
version "2.1.6"
@@ -3330,12 +3362,12 @@ html-loader@^0.4.5:
object-assign "^4.1.0"
html-minifier@^3.0.1:
- version "3.5.17"
- resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.17.tgz#fe9834c4288e4d5b4dfe18fbc7f3f811c108e5ea"
+ version "3.5.19"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.19.tgz#ed53c4b7326fe507bc3a1adbcc3bbb56660a2ebd"
dependencies:
camel-case "3.0.x"
clean-css "4.1.x"
- commander "2.15.x"
+ commander "2.16.x"
he "1.1.x"
param-case "2.1.x"
relateurl "0.2.x"
@@ -3392,6 +3424,14 @@ http-signature@~1.1.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
https-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
@@ -3488,6 +3528,18 @@ img-loader@^2.0.1:
imagemin-svgo "^6.0.0"
loader-utils "^1.1.0"
+import-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+ dependencies:
+ import-from "^2.1.0"
+
+import-from@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+ dependencies:
+ resolve-from "^3.0.0"
+
import-local@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
@@ -3615,8 +3667,8 @@ is-bzip2@^1.0.0:
resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc"
is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
is-data-descriptor@^0.1.4:
version "0.1.4"
@@ -3728,20 +3780,6 @@ is-jpg@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-1.0.1.tgz#296d57fdd99ce010434a7283e346ab9a1035e975"
-is-my-ip-valid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
-
-is-my-json-valid@^2.12.4:
- version "2.17.2"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c"
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- is-my-ip-valid "^1.0.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
is-natural-number@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-2.1.1.tgz#7d4c5728377ef386c3e194a9911bf57c6dc335e7"
@@ -3812,10 +3850,6 @@ is-primitive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
@@ -3918,14 +3952,14 @@ jquery@^3.2:
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca"
js-base64@^2.1.8, js-base64@^2.1.9:
- version "2.4.5"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92"
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033"
-js-tokens@^3.0.0, js-tokens@^3.0.2:
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-js-yaml@^3.4.3, js-yaml@~3.10.0:
+js-yaml@^3.4.3, js-yaml@^3.9.0, js-yaml@~3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
dependencies:
@@ -3955,6 +3989,10 @@ json-loader@^0.5.4:
version "0.5.7"
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+
json-schema-traverse@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
@@ -3967,7 +4005,7 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-json-stable-stringify@^1.0.0:
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
@@ -3995,10 +4033,6 @@ jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -4308,10 +4342,10 @@ longest@^1.0.0, longest@^1.0.1:
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
loose-envify@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
dependencies:
- js-tokens "^3.0.0"
+ js-tokens "^3.0.0 || ^4.0.0"
loud-rejection@^1.0.0:
version "1.6.0"
@@ -4480,19 +4514,15 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
-"mime-db@>= 1.34.0 < 2", mime-db@^1.28.0:
- version "1.34.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.34.0.tgz#452d0ecff5c30346a6dc1e64b1eaee0d3719ff9a"
-
-mime-db@~1.33.0:
- version "1.33.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+"mime-db@>= 1.34.0 < 2", mime-db@^1.28.0, mime-db@~1.35.0:
+ version "1.35.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47"
mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7:
- version "2.1.18"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ version "2.1.19"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0"
dependencies:
- mime-db "~1.33.0"
+ mime-db "~1.35.0"
mime@1.4.1:
version "1.4.1"
@@ -4507,10 +4537,10 @@ mimic-fn@^1.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
mimic-response@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
-minimalistic-assert@^1.0.0:
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -4640,7 +4670,7 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-needle@^2.2.0:
+needle@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d"
dependencies:
@@ -4729,12 +4759,12 @@ node-notifier@^5.1.2:
which "^1.3.0"
node-pre-gyp@^0.10.0:
- version "0.10.2"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.2.tgz#e8945c20ef6795a20aac2b44f036eb13cf5146e3"
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
- needle "^2.2.0"
+ needle "^2.2.1"
nopt "^4.0.1"
npm-packlist "^1.1.6"
npmlog "^4.0.2"
@@ -4744,8 +4774,8 @@ node-pre-gyp@^0.10.0:
tar "^4"
node-sass@^4.7.2:
- version "4.9.0"
- resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.0.tgz#d1b8aa855d98ed684d6848db929a20771cc2ae52"
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.2.tgz#5e63fe6bd0f2ae3ac9d6c14ede8620e2b8bdb437"
dependencies:
async-foreach "^0.1.3"
chalk "^1.1.1"
@@ -4762,7 +4792,7 @@ node-sass@^4.7.2:
nan "^2.10.0"
node-gyp "^3.3.1"
npmlog "^4.0.0"
- request "~2.79.0"
+ request "2.87.0"
sass-graph "^2.2.4"
stdout-stream "^1.4.0"
"true-case-path" "^1.0.2"
@@ -4859,7 +4889,7 @@ number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-oauth-sign@~0.8.1:
+oauth-sign@~0.8.1, oauth-sign@~0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
@@ -5111,6 +5141,13 @@ parse-json@^2.1.0, parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
parseurl@~1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
@@ -5185,6 +5222,14 @@ pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -5294,7 +5339,7 @@ postcss-filter-plugins@^2.0.0:
dependencies:
postcss "^5.0.4"
-postcss-load-config@^1.1.0, postcss-load-config@^1.2.0:
+postcss-load-config@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
dependencies:
@@ -5303,6 +5348,13 @@ postcss-load-config@^1.1.0, postcss-load-config@^1.2.0:
postcss-load-options "^1.2.0"
postcss-load-plugins "^2.3.0"
+postcss-load-config@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484"
+ dependencies:
+ cosmiconfig "^4.0.0"
+ import-cwd "^2.0.0"
+
postcss-load-options@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
@@ -5318,12 +5370,12 @@ postcss-load-plugins@^2.3.0:
object-assign "^4.1.0"
postcss-loader@^2.1.0:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.5.tgz#3c6336ee641c8f95138172533ae461a83595e788"
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740"
dependencies:
loader-utils "^1.1.0"
postcss "^6.0.0"
- postcss-load-config "^1.2.0"
+ postcss-load-config "^2.0.0"
schema-utils "^0.4.0"
postcss-merge-idents@^2.1.5:
@@ -5603,9 +5655,13 @@ qs@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
-qs@~6.3.0:
- version "6.3.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
+qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+
+qs@~6.5.1:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
query-string@^4.1.0:
version "4.3.4"
@@ -5864,18 +5920,43 @@ replace-ext@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
-"request@>=2.9.0 <2.82.0", request@~2.79.0:
- version "2.79.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+request@2.87.0:
+ version "2.87.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+"request@>=2.9.0 <2.82.0":
+ version "2.81.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
- caseless "~0.11.0"
+ caseless "~0.12.0"
combined-stream "~1.0.5"
extend "~3.0.0"
forever-agent "~0.6.1"
form-data "~2.1.1"
- har-validator "~2.0.6"
+ har-validator "~4.2.1"
hawk "~3.1.3"
http-signature "~1.1.0"
is-typedarray "~1.0.0"
@@ -5883,10 +5964,12 @@ replace-ext@^1.0.0:
json-stringify-safe "~5.0.1"
mime-types "~2.1.7"
oauth-sign "~0.8.1"
- qs "~6.3.0"
+ performance-now "^0.2.0"
+ qs "~6.4.0"
+ safe-buffer "^5.0.1"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
+ tunnel-agent "^0.6.0"
uuid "^3.0.0"
require-directory@^2.1.1:
@@ -5897,6 +5980,10 @@ require-from-string@^1.1.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
+require-from-string@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+
require-main-filename@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
@@ -5979,11 +6066,11 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
-safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@~5.1.1:
+safe-buffer@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0:
+safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -6765,7 +6852,7 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
-tough-cookie@~2.3.0:
+tough-cookie@~2.3.0, tough-cookie@~2.3.3:
version "2.3.4"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
dependencies:
@@ -6795,7 +6882,7 @@ tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
-tunnel-agent@^0.4.0, tunnel-agent@~0.4.1:
+tunnel-agent@^0.4.0:
version "0.4.3"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
@@ -6828,10 +6915,10 @@ uglify-es@^3.3.4:
source-map "~0.6.1"
uglify-js@3.4.x:
- version "3.4.2"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.2.tgz#70511a390eb62423675ba63c374ba1abf045116c"
+ version "3.4.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.5.tgz#650889c0766cf0f6fd5346cea09cd212f544be69"
dependencies:
- commander "~2.15.0"
+ commander "~2.16.0"
source-map "~0.6.1"
uglify-js@^2.8.29:
@@ -6983,10 +7070,8 @@ url@^0.11.0:
querystring "0.2.0"
use@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544"
- dependencies:
- kind-of "^6.0.2"
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
util-deprecate@~1.0.1:
version "1.0.2"
@@ -7019,7 +7104,7 @@ uuid@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
-uuid@^3.0.0, uuid@^3.0.1:
+uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
@@ -7434,8 +7519,8 @@ yargs@~3.10.0:
window-size "0.1.0"
yauzl@^2.2.1, yauzl@^2.4.2:
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.2.tgz#4fb1bc7ae1fc2f57037b54af6acc8fe1031c5b77"
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"